Cross-pod beams: replicate emitter discharge via subsystem update records
User report: lasers only visible on the window firing them. The peer's replicant emitters never learned the master fired. THE AUTHENTIC PIPE (decomp-verified): - FUN_0041c350 (the "beam keepalive" ServiceDischarge/ContinueDischarge call) does TWO things: queue the LOCAL deferred beam-effect callback (@0x4bac0c) on the app+0x34 manager -- our per-weapon render walk already plays that role -- and set the subsystem DIRTY bit, which maps to the 2007 engine's updateModel / ForceUpdate(). - Replication rides SUBSYSTEM UPDATE RECORDS inside the mech's update message: the roster walk already hands the entity's stream to every subsystem's PerformAndWatch; Simulation::WriteSimulationUpdate serializes each requested updateModel bit; Entity::UpdateMessageHandler routes received records by subsystemID to the subsystem's ReadUpdateRecord. All engine machinery -- the missing pieces were the Emitter's serialize/apply pair + the triggers. CORRECTIONS to the dormant task-33-era transcriptions (never exercised -- nothing ever set updateModel -- so the latent misreads never surfaced): - The weapon-family VTABLE SLOT MAP was swapped: slot 6 = ReadUpdateRecord, 7 = WriteUpdateRecord, 9 = TakeDamage (evidence: Mech hierarchy symmetry + body semantics; @004ba568 resolves an EntityID at rec+0x30 through the entity index -- record semantics, not Damage). Renamed across MechWeapon / Emitter / ProjectileWeapon; the real Emitter::TakeDamage @004bafc8 is undecoded (inherits MechWeapon for now). - Emitter/MechWeapon Write: `*record = 0x38/0x18` is the record LENGTH, not recordID; rec+0x30 is the TARGET's EntityID (GetEntityID()), not a colour -- the old `CopyColor(targetEntity+0x184)` was also a databinding trap. - OVERRIDE-SIGNATURE TRAP: the decls used each class's own shadowing UpdateRecord typedef as the param type, silently NOT overriding the engine virtual (the base ran instead; nothing would ever have serialized). Base-typed params (Simulation__UpdateRecord*), casts inside. - Emitter::ReadUpdateRecord reconstructed (@004ba568): target EntityID resolve (drop unknown non-null targets), MechWeapon alarm apply chain, beam fields. - ServiceDischarge/ContinueDischarge: ForceUpdate() per keepalive tick + one final record at beam end (turns the peer's beam off). - Mech::DrawWeaponBeams extracted from the player-only drive block so the walk runs for REPLICANTS (+ per-mech gun-port cache -- the process-wide statics would have served the player's segment pointers as the replicant's muzzles). VERIFIED 2-node: A fires 57 volleys -> 225 emitter records -> B applies all 225 -> B draws 414 beams (PPC blue / laser red, from A's replicant's own gun ports). Solo un-regressed (150 beams, kill chain, no crash). Also preserved: the full Mech::WriteUpdateRecord @0x4a0c2c recovery (reference/decomp/mech_writeupdate_004a0c2c.disasm.txt) with all 9 record types decoded (pose/alarm/leg-state+heat with the body-channel write-through re-sync, knockdown, death, impact, movementMode) -- transcription deferred; it replicates remote knockdown/death/heat and was not needed for beams. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Fable 5
parent
a110041a70
commit
29035028fd
@@ -0,0 +1,467 @@
|
||||
=== Mech::WriteUpdateRecord @0x4a0c2c (vtable slot 7) ===
|
||||
=== args: (this=ebp+8, record=ebp+0xC, type=ebp+0x10); jump table @0x4a0c55 on type 0..8 ===
|
||||
=== table: 0:0x4a0c79 1:0x4a11cb 2:0x4a0e5b 3:0x4a0d84 4:0x4a0e9e 5:0x4a0fab 6:0x4a104d 7:0x4a10ff 8:0x4a117f ===
|
||||
|
||||
===== prologue + dispatch @0x4a0c2c..0x4a0c55 =====
|
||||
0x4a0c2c: push ebp
|
||||
0x4a0c2d: mov ebp, esp
|
||||
0x4a0c2f: add esp, -0x68
|
||||
0x4a0c32: push ebx
|
||||
0x4a0c33: push esi
|
||||
0x4a0c34: push edi
|
||||
0x4a0c35: mov edi, dword ptr [ebp + 0x10]
|
||||
0x4a0c38: mov ebx, dword ptr [ebp + 8]
|
||||
0x4a0c3b: mov eax, dword ptr [ebx + 0x128]
|
||||
0x4a0c41: mov esi, dword ptr [eax]
|
||||
0x4a0c43: mov eax, edi
|
||||
0x4a0c45: cmp eax, 8
|
||||
0x4a0c48: ja 0x4a11cb
|
||||
0x4a0c4e: jmp dword ptr [eax*4 + 0x4a0c55]
|
||||
|
||||
===== case 0 (full pose snapshot) @0x4a0c79..0x4a0d84 =====
|
||||
0x4a0c79: lea edx, [ebx + 0x138]
|
||||
0x4a0c7f: push edx
|
||||
0x4a0c80: lea ecx, [ebp - 0x44]
|
||||
0x4a0c83: push ecx
|
||||
0x4a0c84: call 0x408f44
|
||||
0x4a0c89: add esp, 8
|
||||
0x4a0c8c: lea eax, [ebx + 0x2d4]
|
||||
0x4a0c92: push eax
|
||||
0x4a0c93: lea edx, [ebp - 0x50]
|
||||
0x4a0c96: push edx
|
||||
0x4a0c97: call 0x408440
|
||||
0x4a0c9c: add esp, 8
|
||||
0x4a0c9f: push edi
|
||||
0x4a0ca0: mov ecx, dword ptr [ebp + 0xc]
|
||||
0x4a0ca3: push ecx
|
||||
0x4a0ca4: push ebx
|
||||
0x4a0ca5: call 0x4225a4
|
||||
0x4a0caa: mov edi, dword ptr [ebp + 0xc]
|
||||
0x4a0cad: add esp, 0xc
|
||||
0x4a0cb0: lea eax, [ebp - 0x44]
|
||||
0x4a0cb3: lea edx, [ebx + 0x138]
|
||||
0x4a0cb9: mov word ptr [edi + 4], 0
|
||||
0x4a0cbf: mov dword ptr [ebx + 0x77c], 1
|
||||
0x4a0cc9: push eax
|
||||
0x4a0cca: push edx
|
||||
0x4a0ccb: call 0x409a00
|
||||
0x4a0cd0: add esp, 8
|
||||
0x4a0cd3: lea ecx, [ebx + 0x2d4]
|
||||
0x4a0cd9: mov dword ptr [ebp - 4], ecx
|
||||
0x4a0cdc: lea eax, [ebp - 0x50]
|
||||
0x4a0cdf: push eax
|
||||
0x4a0ce0: mov edx, dword ptr [ebp - 4]
|
||||
0x4a0ce3: push edx
|
||||
0x4a0ce4: call 0x408440
|
||||
0x4a0ce9: add esp, 8
|
||||
0x4a0cec: mov ecx, dword ptr [ebx + 0x3b0]
|
||||
0x4a0cf2: cmp ecx, 2
|
||||
0x4a0cf5: je 0x4a0d02
|
||||
0x4a0cf7: mov eax, dword ptr [ebx + 0x3b0]
|
||||
0x4a0cfd: cmp eax, 3
|
||||
0x4a0d00: jne 0x4a0d16
|
||||
0x4a0d02: push 0x4e0fd4 ; [0x4e0fd4]=0f
|
||||
0x4a0d07: lea edx, [ebx + 0x298]
|
||||
0x4a0d0d: push edx
|
||||
0x4a0d0e: call 0x40a7f4
|
||||
0x4a0d13: add esp, 8
|
||||
0x4a0d16: mov ecx, dword ptr [ebx + 0x40]
|
||||
0x4a0d19: mov eax, dword ptr [ebx + 0x3c]
|
||||
0x4a0d1c: cmp ecx, eax
|
||||
0x4a0d1e: je 0x4a0d64
|
||||
0x4a0d20: mov edx, dword ptr [ebx + 0x3c]
|
||||
0x4a0d23: cmp edx, 2
|
||||
0x4a0d26: je 0x4a0d30
|
||||
0x4a0d28: mov ecx, dword ptr [ebx + 0x40]
|
||||
0x4a0d2b: cmp ecx, 2
|
||||
0x4a0d2e: jne 0x4a0d64
|
||||
0x4a0d30: lea eax, [ebx + 0x12c]
|
||||
0x4a0d36: push eax
|
||||
0x4a0d37: lea edx, [ebx + 0x260]
|
||||
0x4a0d3d: push edx
|
||||
0x4a0d3e: call 0x40a938
|
||||
0x4a0d43: add esp, 8
|
||||
0x4a0d46: lea ecx, [ebx + 0x2c8]
|
||||
0x4a0d4c: push ecx
|
||||
0x4a0d4d: lea eax, [ebx + 0x298]
|
||||
0x4a0d53: push eax
|
||||
0x4a0d54: call 0x40a7f4
|
||||
0x4a0d59: add esp, 8
|
||||
0x4a0d5c: xor edx, edx
|
||||
0x4a0d5e: mov dword ptr [ebx + 0x77c], edx
|
||||
0x4a0d64: mov ecx, dword ptr [esi + 0x128]
|
||||
0x4a0d6a: mov dword ptr [edi + 0x74], ecx
|
||||
0x4a0d6d: mov eax, dword ptr [esi + 0x128]
|
||||
0x4a0d73: mov dword ptr [ebx + 0x6b4], eax
|
||||
0x4a0d79: mov dword ptr [edi], 0x78
|
||||
0x4a0d7f: jmp 0x4a11d9
|
||||
|
||||
===== case 3 (score/heat) @0x4a0d84..0x4a0e5b =====
|
||||
0x4a0d84: mov edx, dword ptr [ebp + 0xc]
|
||||
0x4a0d87: mov dword ptr [ebp - 8], edx
|
||||
0x4a0d8a: push edi
|
||||
0x4a0d8b: mov ecx, dword ptr [ebp - 8]
|
||||
0x4a0d8e: push ecx
|
||||
0x4a0d8f: push ebx
|
||||
0x4a0d90: call 0x41bd60
|
||||
0x4a0d95: add esp, 0xc
|
||||
0x4a0d98: mov eax, dword ptr [ebp - 8]
|
||||
0x4a0d9b: mov dword ptr [eax], 0x20
|
||||
0x4a0da1: mov edx, dword ptr [ebp - 8]
|
||||
0x4a0da4: mov word ptr [edx + 4], 0
|
||||
0x4a0daa: mov ecx, dword ptr [ebp - 8]
|
||||
0x4a0dad: mov eax, dword ptr [ebx + 0x654]
|
||||
0x4a0db3: mov dword ptr [ecx + 0x10], eax
|
||||
0x4a0db6: mov edx, dword ptr [ebp - 8]
|
||||
0x4a0db9: mov ecx, dword ptr [ebx + 0x3b0]
|
||||
0x4a0dbf: mov dword ptr [edx + 0x14], ecx
|
||||
0x4a0dc2: mov eax, dword ptr [ebp - 8]
|
||||
0x4a0dc5: mov edx, dword ptr [ebx + 0x4d8]
|
||||
0x4a0dcb: mov dword ptr [eax + 0x18], edx
|
||||
0x4a0dce: mov ecx, dword ptr [ebp - 8]
|
||||
0x4a0dd1: mov eax, dword ptr [ecx + 0x10]
|
||||
0x4a0dd4: mov dword ptr [ebx + 0x658], eax
|
||||
0x4a0dda: mov edx, dword ptr [ebp - 8]
|
||||
0x4a0ddd: mov ecx, dword ptr [edx + 0x14]
|
||||
0x4a0de0: test ecx, ecx
|
||||
0x4a0de2: jne 0x4a0e0d
|
||||
0x4a0de4: push 1
|
||||
0x4a0de6: lea eax, [ebx + 0x65c]
|
||||
0x4a0dec: push eax
|
||||
0x4a0ded: call 0x4283b8
|
||||
0x4a0df2: add esp, 8
|
||||
0x4a0df5: mov edx, dword ptr [ebp - 8]
|
||||
0x4a0df8: mov ecx, dword ptr [edx + 0x14]
|
||||
0x4a0dfb: push ecx
|
||||
0x4a0dfc: lea eax, [ebx + 0x714]
|
||||
0x4a0e02: push eax
|
||||
0x4a0e03: call 0x41bbd8
|
||||
0x4a0e08: add esp, 8
|
||||
0x4a0e0b: jmp 0x4a0e3e
|
||||
0x4a0e0d: mov edx, dword ptr [ebp - 8]
|
||||
0x4a0e10: mov ecx, dword ptr [edx + 0x14]
|
||||
0x4a0e13: dec ecx
|
||||
0x4a0e14: jne 0x4a0e2e
|
||||
0x4a0e16: mov eax, dword ptr [ebp - 8]
|
||||
0x4a0e19: mov edx, dword ptr [eax + 0x14]
|
||||
0x4a0e1c: push edx
|
||||
0x4a0e1d: lea ecx, [ebx + 0x714]
|
||||
0x4a0e23: push ecx
|
||||
0x4a0e24: call 0x41bbd8
|
||||
0x4a0e29: add esp, 8
|
||||
0x4a0e2c: jmp 0x4a0e3e
|
||||
0x4a0e2e: mov eax, dword ptr [ebp - 8]
|
||||
0x4a0e31: mov edx, dword ptr [eax + 0x14]
|
||||
0x4a0e34: push edx
|
||||
0x4a0e35: push ebx
|
||||
0x4a0e36: call 0x4a800c
|
||||
0x4a0e3b: add esp, 8
|
||||
0x4a0e3e: mov ecx, dword ptr [ebp - 8]
|
||||
0x4a0e41: mov eax, dword ptr [esi + 0x128]
|
||||
0x4a0e47: mov dword ptr [ecx + 0x1c], eax
|
||||
0x4a0e4a: mov edx, dword ptr [esi + 0x128]
|
||||
0x4a0e50: mov dword ptr [ebx + 0x6b4], edx
|
||||
0x4a0e56: jmp 0x4a11d9
|
||||
|
||||
===== case 2 (alarm-only) @0x4a0e5b..0x4a0e9e =====
|
||||
0x4a0e5b: mov ecx, dword ptr [ebp + 0xc]
|
||||
0x4a0e5e: mov dword ptr [ebp - 0xc], ecx
|
||||
0x4a0e61: push edi
|
||||
0x4a0e62: mov eax, dword ptr [ebp - 0xc]
|
||||
0x4a0e65: push eax
|
||||
0x4a0e66: push ebx
|
||||
0x4a0e67: call 0x41bd60
|
||||
0x4a0e6c: add esp, 0xc
|
||||
0x4a0e6f: mov edx, dword ptr [ebp - 0xc]
|
||||
0x4a0e72: mov dword ptr [edx], 0x14
|
||||
0x4a0e78: mov ecx, dword ptr [ebp - 0xc]
|
||||
0x4a0e7b: mov word ptr [ecx + 4], 0
|
||||
0x4a0e81: mov eax, dword ptr [ebp - 0xc]
|
||||
0x4a0e84: mov edx, dword ptr [esi + 0x128]
|
||||
0x4a0e8a: mov dword ptr [eax + 0x10], edx
|
||||
0x4a0e8d: mov ecx, dword ptr [esi + 0x128]
|
||||
0x4a0e93: mov dword ptr [ebx + 0x6b4], ecx
|
||||
0x4a0e99: jmp 0x4a11d9
|
||||
|
||||
===== case 4 (pose + time re-sync) @0x4a0e9e..0x4a0fab =====
|
||||
0x4a0e9e: mov eax, dword ptr [ebp + 0xc]
|
||||
0x4a0ea1: mov dword ptr [ebp - 0x10], eax
|
||||
0x4a0ea4: push edi
|
||||
0x4a0ea5: mov edx, dword ptr [ebp - 0x10]
|
||||
0x4a0ea8: push edx
|
||||
0x4a0ea9: push ebx
|
||||
0x4a0eaa: call 0x41bd60
|
||||
0x4a0eaf: mov ecx, dword ptr [ebp - 0x10]
|
||||
0x4a0eb2: add esp, 0xc
|
||||
0x4a0eb5: lea edx, [ebx + 0x10c]
|
||||
0x4a0ebb: mov dword ptr [ecx], 0x2c
|
||||
0x4a0ec1: mov eax, dword ptr [ebp - 0x10]
|
||||
0x4a0ec4: mov word ptr [eax + 4], 0
|
||||
0x4a0eca: push edx
|
||||
0x4a0ecb: call 0x40a138
|
||||
0x4a0ed0: pop ecx
|
||||
0x4a0ed1: lea ecx, [ebx + 0x10c]
|
||||
0x4a0ed7: push ecx
|
||||
0x4a0ed8: mov eax, dword ptr [ebp - 0x10]
|
||||
0x4a0edb: add eax, 0x10
|
||||
0x4a0ede: push eax
|
||||
0x4a0edf: call 0x408f44
|
||||
0x4a0ee4: add esp, 8
|
||||
0x4a0ee7: lea eax, [ebx + 0x1d0]
|
||||
0x4a0eed: mov edi, dword ptr [ebp - 0x10]
|
||||
0x4a0ef0: add edi, 0x1c
|
||||
0x4a0ef3: push eax
|
||||
0x4a0ef4: push edi
|
||||
0x4a0ef5: call 0x408440
|
||||
0x4a0efa: add esp, 8
|
||||
0x4a0efd: call 0x414b60
|
||||
0x4a0f02: mov dword ptr [ebp - 0x14], eax
|
||||
0x4a0f05: lea eax, [ebx + 0x778]
|
||||
0x4a0f0b: mov edx, dword ptr [ebp - 0x14]
|
||||
0x4a0f0e: mov ecx, dword ptr [edx]
|
||||
0x4a0f10: mov dword ptr [eax], ecx
|
||||
0x4a0f12: call 0x414b60
|
||||
0x4a0f17: mov dword ptr [ebp - 0x18], eax
|
||||
0x4a0f1a: lea eax, [ebx + 0x2e0]
|
||||
0x4a0f20: mov edx, dword ptr [ebp - 0x18]
|
||||
0x4a0f23: mov ecx, dword ptr [edx]
|
||||
0x4a0f25: mov dword ptr [eax], ecx
|
||||
0x4a0f27: lea eax, [ebx + 0x14]
|
||||
0x4a0f2a: mov edx, dword ptr [ebx + 0x2e0]
|
||||
0x4a0f30: mov ecx, dword ptr [eax]
|
||||
0x4a0f32: sub edx, ecx
|
||||
0x4a0f34: mov dword ptr [ebp - 0x68], edx
|
||||
0x4a0f37: fild dword ptr [ebp - 0x68]
|
||||
0x4a0f3a: fdiv dword ptr [0x52140c]
|
||||
0x4a0f40: fstp dword ptr [ebp - 0x1c]
|
||||
0x4a0f43: fld dword ptr [ebp - 0x1c]
|
||||
0x4a0f46: fcomp dword ptr [0x4a1228]
|
||||
0x4a0f4c: fnstsw ax
|
||||
0x4a0f4e: sahf
|
||||
0x4a0f4f: jae 0x4a0f62
|
||||
0x4a0f51: mov edx, dword ptr [ebx + 0x2e0]
|
||||
0x4a0f57: mov ecx, dword ptr [ebx + 0x14]
|
||||
0x4a0f5a: sub edx, ecx
|
||||
0x4a0f5c: add dword ptr [ebx + 0x2e0], edx
|
||||
0x4a0f62: lea eax, [ebx + 0x10c]
|
||||
0x4a0f68: push eax
|
||||
0x4a0f69: lea edx, [ebx + 0x138]
|
||||
0x4a0f6f: push edx
|
||||
0x4a0f70: call 0x409968
|
||||
0x4a0f75: add esp, 8
|
||||
0x4a0f78: lea eax, [ebx + 0x1d0]
|
||||
0x4a0f7e: lea edi, [ebx + 0x2d4]
|
||||
0x4a0f84: push eax
|
||||
0x4a0f85: push edi
|
||||
0x4a0f86: call 0x408440
|
||||
0x4a0f8b: add esp, 8
|
||||
0x4a0f8e: mov eax, dword ptr [ebp - 0x10]
|
||||
0x4a0f91: mov edx, dword ptr [esi + 0x128]
|
||||
0x4a0f97: mov dword ptr [eax + 0x28], edx
|
||||
0x4a0f9a: mov ecx, dword ptr [esi + 0x128]
|
||||
0x4a0fa0: mov dword ptr [ebx + 0x6b4], ecx
|
||||
0x4a0fa6: jmp 0x4a11d9
|
||||
|
||||
===== case 5 (subsystem alarm A) @0x4a0fab..0x4a104d =====
|
||||
0x4a0fab: mov eax, dword ptr [ebp + 0xc]
|
||||
0x4a0fae: mov dword ptr [ebp - 0x20], eax
|
||||
0x4a0fb1: push edi
|
||||
0x4a0fb2: mov edx, dword ptr [ebp - 0x20]
|
||||
0x4a0fb5: push edx
|
||||
0x4a0fb6: push ebx
|
||||
0x4a0fb7: call 0x41bd60
|
||||
0x4a0fbc: mov ecx, dword ptr [ebp - 0x20]
|
||||
0x4a0fbf: add esp, 0xc
|
||||
0x4a0fc2: mov dword ptr [ecx], 0x2c
|
||||
0x4a0fc8: mov eax, dword ptr [ebp - 0x20]
|
||||
0x4a0fcb: mov word ptr [eax + 4], 0
|
||||
0x4a0fd1: mov edx, dword ptr [ebp - 0x20]
|
||||
0x4a0fd4: mov ecx, dword ptr [ebx + 0x464]
|
||||
0x4a0fda: mov dword ptr [edx + 0x10], ecx
|
||||
0x4a0fdd: lea ecx, [ebx + 0x4a8]
|
||||
0x4a0fe3: mov eax, dword ptr [ebp - 0x20]
|
||||
0x4a0fe6: mov edx, dword ptr [ebx + 0x4a4]
|
||||
0x4a0fec: mov dword ptr [eax + 0x14], edx
|
||||
0x4a0fef: mov dword ptr [ebp - 0x24], ecx
|
||||
0x4a0ff2: mov edi, dword ptr [ebp - 0x20]
|
||||
0x4a0ff5: mov eax, dword ptr [ebp - 0x24]
|
||||
0x4a0ff8: push eax
|
||||
0x4a0ff9: add edi, 0x18
|
||||
0x4a0ffc: push edi
|
||||
0x4a0ffd: call 0x408440
|
||||
0x4a1002: add esp, 8
|
||||
0x4a1005: mov edx, dword ptr [ebp - 0x20]
|
||||
0x4a1008: mov ecx, dword ptr [ebx + 0x4b4]
|
||||
0x4a100e: mov dword ptr [edx + 0x24], ecx
|
||||
0x4a1011: push 0x20
|
||||
0x4a1013: push ebx
|
||||
0x4a1014: call 0x4a800c
|
||||
0x4a1019: add esp, 8
|
||||
0x4a101c: push 0x4e0fd4 ; [0x4e0fd4]=0f
|
||||
0x4a1021: lea eax, [ebx + 0x298]
|
||||
0x4a1027: push eax
|
||||
0x4a1028: call 0x40a7f4
|
||||
0x4a102d: add esp, 8
|
||||
0x4a1030: mov edx, dword ptr [ebp - 0x20]
|
||||
0x4a1033: mov ecx, dword ptr [esi + 0x128]
|
||||
0x4a1039: mov dword ptr [edx + 0x28], ecx
|
||||
0x4a103c: mov eax, dword ptr [esi + 0x128]
|
||||
0x4a1042: mov dword ptr [ebx + 0x6b4], eax
|
||||
0x4a1048: jmp 0x4a11d9
|
||||
|
||||
===== case 6 (subsystem alarm B/death) @0x4a104d..0x4a10ff =====
|
||||
0x4a104d: mov edx, dword ptr [ebp + 0xc]
|
||||
0x4a1050: mov dword ptr [ebp - 0x28], edx
|
||||
0x4a1053: push edi
|
||||
0x4a1054: mov ecx, dword ptr [ebp - 0x28]
|
||||
0x4a1057: push ecx
|
||||
0x4a1058: push ebx
|
||||
0x4a1059: call 0x41bd60
|
||||
0x4a105e: mov eax, dword ptr [ebp - 0x28]
|
||||
0x4a1061: add esp, 0xc
|
||||
0x4a1064: mov dword ptr [eax], 0x2c
|
||||
0x4a106a: mov edx, dword ptr [ebp - 0x28]
|
||||
0x4a106d: mov word ptr [edx + 4], 0
|
||||
0x4a1073: mov ecx, dword ptr [ebp - 0x28]
|
||||
0x4a1076: mov eax, dword ptr [ebx + 0x464]
|
||||
0x4a107c: mov dword ptr [ecx + 0x10], eax
|
||||
0x4a107f: lea eax, [ebx + 0x4a8]
|
||||
0x4a1085: mov edx, dword ptr [ebp - 0x28]
|
||||
0x4a1088: mov ecx, dword ptr [ebx + 0x4a4]
|
||||
0x4a108e: mov dword ptr [edx + 0x14], ecx
|
||||
0x4a1091: mov dword ptr [ebp - 0x2c], eax
|
||||
0x4a1094: mov edi, dword ptr [ebp - 0x28]
|
||||
0x4a1097: mov eax, dword ptr [ebp - 0x2c]
|
||||
0x4a109a: push eax
|
||||
0x4a109b: add edi, 0x18
|
||||
0x4a109e: push edi
|
||||
0x4a109f: call 0x408440
|
||||
0x4a10a4: mov edx, dword ptr [ebp - 0x28]
|
||||
0x4a10a7: add esp, 8
|
||||
0x4a10aa: mov ecx, dword ptr [ebx + 0x4b4]
|
||||
0x4a10b0: lea eax, [ebx + 0x714]
|
||||
0x4a10b6: mov dword ptr [edx + 0x24], ecx
|
||||
0x4a10b9: push 0
|
||||
0x4a10bb: push eax
|
||||
0x4a10bc: call 0x41bbd8
|
||||
0x4a10c1: add esp, 8
|
||||
0x4a10c4: mov dword ptr [ebx + 0x658], 1
|
||||
0x4a10ce: push 0x4e0fd4 ; [0x4e0fd4]=0f
|
||||
0x4a10d3: lea edx, [ebx + 0x298]
|
||||
0x4a10d9: push edx
|
||||
0x4a10da: call 0x40a7f4
|
||||
0x4a10df: add esp, 8
|
||||
0x4a10e2: mov ecx, dword ptr [ebp - 0x28]
|
||||
0x4a10e5: mov eax, dword ptr [esi + 0x128]
|
||||
0x4a10eb: mov dword ptr [ecx + 0x28], eax
|
||||
0x4a10ee: mov edx, dword ptr [esi + 0x128]
|
||||
0x4a10f4: mov dword ptr [ebx + 0x6b4], edx
|
||||
0x4a10fa: jmp 0x4a11d9
|
||||
|
||||
===== case 7 (subsystem alarm C) @0x4a10ff..0x4a117f =====
|
||||
0x4a10ff: mov ecx, dword ptr [ebp + 0xc]
|
||||
0x4a1102: mov dword ptr [ebp - 0x30], ecx
|
||||
0x4a1105: push edi
|
||||
0x4a1106: mov eax, dword ptr [ebp - 0x30]
|
||||
0x4a1109: push eax
|
||||
0x4a110a: push ebx
|
||||
0x4a110b: call 0x41bd60
|
||||
0x4a1110: mov edx, dword ptr [ebp - 0x30]
|
||||
0x4a1113: add esp, 0xc
|
||||
0x4a1116: mov dword ptr [edx], 0x2c
|
||||
0x4a111c: mov ecx, dword ptr [ebp - 0x30]
|
||||
0x4a111f: mov word ptr [ecx + 4], 0
|
||||
0x4a1125: mov eax, dword ptr [ebp - 0x30]
|
||||
0x4a1128: mov edx, dword ptr [ebx + 0x464]
|
||||
0x4a112e: mov dword ptr [eax + 0x10], edx
|
||||
0x4a1131: lea edx, [ebx + 0x4a8]
|
||||
0x4a1137: mov ecx, dword ptr [ebp - 0x30]
|
||||
0x4a113a: mov eax, dword ptr [ebx + 0x4a4]
|
||||
0x4a1140: mov dword ptr [ecx + 0x14], eax
|
||||
0x4a1143: mov dword ptr [ebp - 0x34], edx
|
||||
0x4a1146: mov edi, dword ptr [ebp - 0x30]
|
||||
0x4a1149: mov eax, dword ptr [ebp - 0x34]
|
||||
0x4a114c: push eax
|
||||
0x4a114d: add edi, 0x18
|
||||
0x4a1150: push edi
|
||||
0x4a1151: call 0x408440
|
||||
0x4a1156: add esp, 8
|
||||
0x4a1159: mov edx, dword ptr [ebp - 0x30]
|
||||
0x4a115c: mov ecx, dword ptr [ebx + 0x4b4]
|
||||
0x4a1162: mov dword ptr [edx + 0x24], ecx
|
||||
0x4a1165: mov eax, dword ptr [ebp - 0x30]
|
||||
0x4a1168: mov edx, dword ptr [esi + 0x128]
|
||||
0x4a116e: mov dword ptr [eax + 0x28], edx
|
||||
0x4a1171: mov ecx, dword ptr [esi + 0x128]
|
||||
0x4a1177: mov dword ptr [ebx + 0x6b4], ecx
|
||||
0x4a117d: jmp 0x4a11d9
|
||||
|
||||
===== case 8 (single scalar) @0x4a117f..0x4a11cb =====
|
||||
0x4a117f: mov eax, dword ptr [ebp + 0xc]
|
||||
0x4a1182: mov dword ptr [ebp - 0x38], eax
|
||||
0x4a1185: push edi
|
||||
0x4a1186: mov edx, dword ptr [ebp - 0x38]
|
||||
0x4a1189: push edx
|
||||
0x4a118a: push ebx
|
||||
0x4a118b: call 0x41bd60
|
||||
0x4a1190: add esp, 0xc
|
||||
0x4a1193: mov ecx, dword ptr [ebp - 0x38]
|
||||
0x4a1196: mov dword ptr [ecx], 0x18
|
||||
0x4a119c: mov eax, dword ptr [ebp - 0x38]
|
||||
0x4a119f: mov word ptr [eax + 4], 0
|
||||
0x4a11a5: mov edx, dword ptr [ebp - 0x38]
|
||||
0x4a11a8: mov ecx, dword ptr [ebx + 0x3f4]
|
||||
0x4a11ae: mov dword ptr [edx + 0x10], ecx
|
||||
0x4a11b1: mov eax, dword ptr [ebp - 0x38]
|
||||
0x4a11b4: mov edx, dword ptr [esi + 0x128]
|
||||
0x4a11ba: mov dword ptr [eax + 0x14], edx
|
||||
0x4a11bd: mov ecx, dword ptr [esi + 0x128]
|
||||
0x4a11c3: mov dword ptr [ebx + 0x6b4], ecx
|
||||
0x4a11c9: jmp 0x4a11d9
|
||||
|
||||
===== case 1 + default + epilogue @0x4a11cb..0x4a1232 =====
|
||||
0x4a11cb: push edi
|
||||
0x4a11cc: mov eax, dword ptr [ebp + 0xc]
|
||||
0x4a11cf: push eax
|
||||
0x4a11d0: push ebx
|
||||
0x4a11d1: call 0x4225a4
|
||||
0x4a11d6: add esp, 0xc
|
||||
0x4a11d9: mov eax, dword ptr [ebx + 0x3c]
|
||||
0x4a11dc: mov edx, dword ptr [ebx + 0x40]
|
||||
0x4a11df: cmp eax, edx
|
||||
0x4a11e1: je 0x4a121e
|
||||
0x4a11e3: cmp eax, 2
|
||||
0x4a11e6: jne 0x4a121e
|
||||
0x4a11e8: mov esi, ebx
|
||||
0x4a11ea: push esi
|
||||
0x4a11eb: lea eax, [ebp - 0x64]
|
||||
0x4a11ee: push eax
|
||||
0x4a11ef: call 0x436668
|
||||
0x4a11f4: add esp, 8
|
||||
0x4a11f7: lea edx, [ebp - 0x64]
|
||||
0x4a11fa: push edx
|
||||
0x4a11fb: push esi
|
||||
0x4a11fc: mov ecx, dword ptr [0x4efc94] ; [0x4efc94]=0f
|
||||
0x4a1202: mov eax, dword ptr [ecx + 0x38]
|
||||
0x4a1205: push eax
|
||||
0x4a1206: call 0x4364e4
|
||||
0x4a120b: add esp, 0xc
|
||||
0x4a120e: mov eax, dword ptr [ebx + 0x40]
|
||||
0x4a1211: push eax
|
||||
0x4a1212: add ebx, 0x2c
|
||||
0x4a1215: push ebx
|
||||
0x4a1216: call 0x41bbd8
|
||||
0x4a121b: add esp, 8
|
||||
0x4a121e: pop edi
|
||||
0x4a121f: pop esi
|
||||
0x4a1220: pop ebx
|
||||
0x4a1221: mov esp, ebp
|
||||
0x4a1223: pop ebp
|
||||
0x4a1224: ret
|
||||
0x4a1225: add byte ptr [eax], al
|
||||
0x4a1227: add byte ptr [eax], al
|
||||
0x4a1229: add byte ptr [eax], ah
|
||||
0x4a122b: inc ecx
|
||||
0x4a122c: push ebp
|
||||
0x4a122d: mov ebp, esp
|
||||
0x4a122f: add esp, -0x34
|
||||
Reference in New Issue
Block a user