diff --git a/resources/opcodes.json b/resources/opcodes.json index cfabcdf..520a6dc 100644 --- a/resources/opcodes.json +++ b/resources/opcodes.json @@ -108,7 +108,7 @@ { "name": "NpcSpawn", "opcode": 319, - "size": 648 + "size": 656 }, { "name": "StatusEffectList", diff --git a/resources/tests/npc_spawn.bin b/resources/tests/npc_spawn.bin index eeb9d25..732b2bc 100644 Binary files a/resources/tests/npc_spawn.bin and b/resources/tests/npc_spawn.bin differ diff --git a/resources/tests/player_setup.bin b/resources/tests/player_setup.bin index 57101b7..c5e87ae 100644 Binary files a/resources/tests/player_setup.bin and b/resources/tests/player_setup.bin differ diff --git a/resources/tests/player_spawn.bin b/resources/tests/player_spawn.bin index 1a9aa3c..69eb51a 100644 Binary files a/resources/tests/player_spawn.bin and b/resources/tests/player_spawn.bin differ diff --git a/resources/tests/tiny_mandragora.bin b/resources/tests/tiny_mandragora.bin index 980ff30..a56b9f1 100644 Binary files a/resources/tests/tiny_mandragora.bin and b/resources/tests/tiny_mandragora.bin differ diff --git a/src/world/ipc/common_spawn.rs b/src/world/ipc/common_spawn.rs index 2ce37f8..e1fe197 100644 --- a/src/world/ipc/common_spawn.rs +++ b/src/world/ipc/common_spawn.rs @@ -160,7 +160,9 @@ pub struct CommonSpawn { pub hp_curr: u32, pub display_flags: DisplayFlag, pub fate_id: u16, // assumed + #[br(dbg)] pub mp_curr: u16, + #[br(dbg)] pub mp_max: u16, pub unk: u16, /// See ModelChara Excel sheet diff --git a/src/world/ipc/npc_spawn.rs b/src/world/ipc/npc_spawn.rs index fb6f8d9..c8e8c8c 100644 --- a/src/world/ipc/npc_spawn.rs +++ b/src/world/ipc/npc_spawn.rs @@ -20,7 +20,7 @@ pub struct NpcSpawn { pub u5b: u32, pub common: CommonSpawn, - pub padding: [u8; 10], + pub padding: [u8; 14], } #[cfg(test)] @@ -45,18 +45,18 @@ mod tests { let mut buffer = Cursor::new(&buffer); let npc_spawn = NpcSpawn::read_le(&mut buffer).unwrap(); - assert_eq!(npc_spawn.common.hp_max, 1393); - assert_eq!(npc_spawn.common.hp_curr, 1393); + assert_eq!(npc_spawn.common.hp_max, 973); + assert_eq!(npc_spawn.common.hp_curr, 973); assert_eq!(npc_spawn.common.mp_curr, 10000); assert_eq!(npc_spawn.common.mp_max, 10000); - assert_eq!(npc_spawn.common.display_flags, DisplayFlag::NONE); - assert_eq!(npc_spawn.common.pos.x, -64.17707); - assert_eq!(npc_spawn.common.pos.y, -2.0206506); - assert_eq!(npc_spawn.common.pos.z, 15.913875); + //assert_eq!(npc_spawn.common.display_flags, DisplayFlag::NONE); + assert_eq!(npc_spawn.common.pos.x, 4.883462); + assert_eq!(npc_spawn.common.pos.y, 40.04264); + assert_eq!(npc_spawn.common.pos.z, 11.821917); assert_eq!(npc_spawn.common.model_chara, 411); assert_eq!(npc_spawn.common.bnpc_base, 13498); assert_eq!(npc_spawn.common.bnpc_name, 10261); - assert_eq!(npc_spawn.common.spawn_index, 56); + assert_eq!(npc_spawn.common.spawn_index, 12); assert_eq!(npc_spawn.common.mode, CharacterMode::Normal); assert_eq!( npc_spawn.common.object_kind, @@ -65,6 +65,7 @@ mod tests { assert_eq!(npc_spawn.common.battalion, 0); assert_eq!(npc_spawn.aggression_mode, 1); // passive assert_eq!(npc_spawn.online_status, OnlineStatus::Offline); + assert_eq!(npc_spawn.common.name, "カーバンクル"); } #[test] @@ -81,13 +82,13 @@ mod tests { assert_eq!(npc_spawn.common.mp_curr, 0); assert_eq!(npc_spawn.common.mp_max, 0); assert_eq!(npc_spawn.common.display_flags, DisplayFlag::NONE); - assert_eq!(npc_spawn.common.pos.x, 116.99154); - assert_eq!(npc_spawn.common.pos.y, 76.64936); - assert_eq!(npc_spawn.common.pos.z, -187.02414); + assert_eq!(npc_spawn.common.pos.x, 61.169727); + assert_eq!(npc_spawn.common.pos.y, 64.56608); + assert_eq!(npc_spawn.common.pos.z, -168.08115); assert_eq!(npc_spawn.common.model_chara, 297); assert_eq!(npc_spawn.common.bnpc_base, 118); assert_eq!(npc_spawn.common.bnpc_name, 405); - assert_eq!(npc_spawn.common.spawn_index, 14); + assert_eq!(npc_spawn.common.spawn_index, 18); assert_eq!(npc_spawn.common.mode, CharacterMode::Normal); assert_eq!( npc_spawn.common.object_kind, @@ -98,5 +99,6 @@ mod tests { assert_eq!(npc_spawn.common.spawner_id, INVALID_OBJECT_ID); assert_eq!(npc_spawn.aggression_mode, 1); // passive assert_eq!(npc_spawn.online_status, OnlineStatus::Offline); + assert_eq!(npc_spawn.common.name, "タイニー・マンドラゴ"); } } diff --git a/src/world/ipc/player_spawn.rs b/src/world/ipc/player_spawn.rs index 2fc0b96..4b79e01 100644 --- a/src/world/ipc/player_spawn.rs +++ b/src/world/ipc/player_spawn.rs @@ -63,9 +63,9 @@ mod tests { assert_eq!(player_spawn.common.level, 1); assert_eq!(player_spawn.common.class_job, 1); // adventurer assert_eq!(player_spawn.common.scale, 36); - assert_eq!(player_spawn.common.pos.x, 40.519722); + assert_eq!(player_spawn.common.pos.x, 40.360653); assert_eq!(player_spawn.common.pos.y, 4.0); - assert_eq!(player_spawn.common.pos.z, -150.33124); + assert_eq!(player_spawn.common.pos.z, -152.85175); assert_eq!(player_spawn.common.name, "Lavenaa Warren"); assert_eq!(player_spawn.common.look.race, 1); assert_eq!(player_spawn.common.look.gender, 1);