1use super::DojosAccount;
2use steel::*;
3
4#[repr(C)]
5#[derive(Clone, Copy, Debug, PartialEq, bytemuck::Pod, bytemuck::Zeroable)]
6pub struct Game {
7 pub total_spirit_power: u64,
9 pub total_shards_burned: u64,
11 pub last_emission_slot: u64,
13 pub total_effective_spirit_power: u64,
15 pub buffer3: u64,
16 pub buffer4: u64,
17}
18
19account!(DojosAccount, Game);
20
21impl Game {
22 pub fn effective_spirit_power_with_scene(raw_sp: u64, scene_id: u64) -> u64 {
25 let (flat, pct_bps) = crate::utils::scene_bonus(scene_id);
26 let base = raw_sp.saturating_add(flat);
27 if pct_bps == 0 {
28 base
29 } else {
30 base.saturating_mul(10000 + pct_bps) / 10000
31 }
32 }
33}