fix(attract): use remainder-driven item phases
Raw 1000:061c-063b divides the idle tick by 144, copies the remainder from CX:BX into AX:DX, and only then divides by 8. Readable C and Rust instead used an unbounded quotient equivalent to tick/1152, making DAT801-809 advance far too slowly and suggesting a nonexistent negative long-idle index. Use `(tick % 144) / 8` to repeat item states 0,1..9,8..1 every 144 callbacks. Remove the disproven long-idle status crops and restore the ten-minute simulator ceiling. Extend the C and Rust phase tests across the forward, reverse, and wrap boundaries. Test Plan: - raw instruction review at `1000:061c-063b` -- remainder transfer confirmed - `cargo test --workspace --all-targets --all-features` -- 125 passed - `cargo clippy --workspace --all-targets --all-features -- -D warnings` -- passed - `bash original/tools/test_reconstructed_c.sh` -- passed - `python3 original/tools/audit_reconstruction.py --require-complete` -- passed with zero incomplete or unclassified units - `rumdl check --flavor commonmark RECONSTRUCTION.md CHANGELOG.md` -- passed - `git diff --cached --check` -- passed
This commit is contained in:
@@ -9,7 +9,7 @@ use std::{
|
||||
pub const SIMULATION_HZ: u32 = 120;
|
||||
const SIMULATION_HZ_F64: f64 = 120.0;
|
||||
const SIMULATION_DT: f32 = 1.0 / 120.0;
|
||||
const MAX_SIMULATION_STEPS: u64 = 100_000;
|
||||
const MAX_SIMULATION_STEPS: u64 = 72_000;
|
||||
|
||||
#[derive(Clone, Copy, Debug, PartialEq, Eq)]
|
||||
pub enum Scenario {
|
||||
@@ -287,7 +287,7 @@ impl Simulation {
|
||||
}
|
||||
|
||||
fn record(&mut self, events: Vec<Event>) {
|
||||
let step = u32::try_from(self.step).expect("simulation step is limited to 100000");
|
||||
let step = u32::try_from(self.step).expect("simulation step is limited to 72000");
|
||||
let claw_bank = match self.game.claw.bank {
|
||||
ClawSpriteBank::Closing => "closing",
|
||||
ClawSpriteBank::Opening => "opening",
|
||||
|
||||
Reference in New Issue
Block a user