diff --git a/src/CommandFormats.hh b/src/CommandFormats.hh index f054ce22..5e7b0f7c 100644 --- a/src/CommandFormats.hh +++ b/src/CommandFormats.hh @@ -7518,14 +7518,17 @@ struct G_RejectBattleStartRequest_Ep3_6xB4x53 { // GC v3: PSOGCCharacterFile::Character // XB v3: PSOXBCharacterFile::Character -// 6xE4: Increment enemy damage threshold +// 6xE4: Increment enemy damage // This command increments or decrements the amount of damage an enemy has -// sustained. This replaces the use of total_damage in 6x0A to update enemy HP. +// sustained. This replaces the use of total_damage in 6x0A to update enemy HP +// when used with the EnemyDamageSync patch. struct G_IncrementEnemyDamage_Extension_6xE4 { - G_EntityIDHeader header = {0xE4, sizeof(G_IncrementEnemyDamage_Extension_6xE4) / 4, 0x0000}; - le_int16_t hit_amount = 0; - le_uint16_t total_damage_before_hit = 0; - le_uint16_t current_hp_before_hit = 0; - le_uint16_t max_hp = 0; -} __packed_ws__(G_IncrementEnemyDamage_Extension_6xE4, 0x0C); + /* 00 */ G_EntityIDHeader header = {0xE4, sizeof(G_IncrementEnemyDamage_Extension_6xE4) / 4, 0x0000}; + /* 04 */ le_int16_t hit_amount = 0; + /* 06 */ le_uint16_t total_damage_before_hit = 0; + /* 08 */ le_uint16_t current_hp_before_hit = 0; + /* 0A */ le_uint16_t max_hp = 0; + /* 0C */ le_float factor = -1.0; + /* 10 */ +} __packed_ws__(G_IncrementEnemyDamage_Extension_6xE4, 0x10); diff --git a/src/ReceiveSubcommands.cc b/src/ReceiveSubcommands.cc index d33df62b..ed5a52ac 100644 --- a/src/ReceiveSubcommands.cc +++ b/src/ReceiveSubcommands.cc @@ -3460,9 +3460,10 @@ static asio::awaitable on_incr_enemy_damage(shared_ptr c, Subcomma } auto ene_st = l->map_state->enemy_state_for_index(c->version(), c->floor, cmd.header.entity_id & 0x0FFF); - c->log.info_f("E-{:03X} damage incremented by {}; before hit, damage was {} (cmd) or {} (ene_st) and HP was {}/{}", + c->log.info_f("E-{:03X} damage incremented by {} with factor {}; before hit, damage was {} (cmd) or {} (ene_st) and HP was {}/{}", ene_st->e_id, cmd.hit_amount.load(), + cmd.factor.load(), ene_st->total_damage, cmd.total_damage_before_hit.load(), cmd.current_hp_before_hit.load(), diff --git a/system/client-functions/EnemyDamageSyncWIP/EnemyDamageSyncWIP.3___.patch.s b/system/client-functions/EnemyDamageSyncWIP/EnemyDamageSyncWIP.3___.patch.s index 01f89c19..b5ae8cf2 100644 --- a/system/client-functions/EnemyDamageSyncWIP/EnemyDamageSyncWIP.3___.patch.s +++ b/system/client-functions/EnemyDamageSyncWIP/EnemyDamageSyncWIP.3___.patch.s @@ -92,10 +92,20 @@ start: .data 4 .address bl on_TObjectV8047c128_subtract_hp_with_sync + .data + .data 8 + fmuls f3, f0, f2 + fmuls f31, f30, f3 + .data + .data 4 + fctiwz f3, f31 + .data + .data 4 + stfd [r1 + 0x40], f3 .data .data 4 .address - bl on_TObjectV8047c128_subtract_hp_with_sync + bl on_TObjectV8047c128_subtract_hp_with_sync_demons_devils # subtract_hp callsites in TObjectV8047c128_v17_accept_hit .data .data 4 @@ -163,6 +173,41 @@ handle_6xE4: # [std] (G_IncrementEnemyDamage_Extension_6xE4* cmd @ r3) -> void lhbrx r3, [r31 + r3] bl state_for_enemy # EnemyState* st = state_for_enemy(cmd->header.entity_id); + li r4, 0x0C + lwbrx r5, [r31 + r4] # cmd->factor + andis. r0, r5, 0x8000 + bne handle_6xE4_not_proportional + stwx [r31 + r4], r5 + + li r8, 0x0A + lhbrx r8, [r31 + r8] + lhz r4, [r3 + 6] + sub r8, r8, r4 # current_hp = cmd->max_hp - st->total_damage + cmpwi r8, 0 + blt handle_6xE4_not_proportional + + lis r4, 0x4B00 + or r5, r4, r8 + stw [r1 - 4], r5 + lfs f1, [r1 - 4] + stw [r1 - 4], r4 + lfs f2, [r1 - 4] + fsubs f1, f1, f2 # f1 = static_cast(current_hp) + lfs f2, [r31 + 0x0C] + fmuls f1, f1, f2 + fctiwz f1, f1 + stfd [r1 - 8], f1 + lwz r8, [r1 - 4] + li r4, 1 + cmp r8, r4 + bge handle_6xE4_proportional_positive + mr r8, r4 +handle_6xE4_proportional_positive: + li r5, 0x04 + sthbrx [r31 + r5], r8 +handle_6xE4_not_proportional: + + # r3 still has the return value of state_for_enemy lhz r4, [r3 + 6] # st->total_damage li r5, 0x04 lhbrx r5, [r31 + r5] # cmd->hit_amount @@ -236,13 +281,23 @@ state_for_enemy: # [/r4] (uint16_t entity_id @ r3) -> EnemyState* @ r3 -on_TObjectV8047c128_add_hp_with_sync: # [std] (TObjectV8047c128* ene @ r3, int16_t amount @ r4) -> void + # AdjustmentType: + # 0 = SUBTRACT + # 1 = SUBTRACT_PROPORTION + # 2 = ADD + +on_TObjectV8047c128_subtract_hp_with_sync_demons_devils: li r5, 1 b on_add_or_subtract_hp + +on_TObjectV8047c128_add_hp_with_sync: # [std] (TObjectV8047c128* ene @ r3, int16_t amount @ r4) -> void + li r5, 2 + b on_add_or_subtract_hp + on_TObjectV8047c128_subtract_hp_with_sync: # [std] (TObjectV8047c128* ene @ r3, int16_t amount @ r4) -> void li r5, 0 -on_add_or_subtract_hp: # [std] (TObjectV8047c128* ene @ r3, int16_t amount @ r4, bool is_add @ r5) -> void +on_add_or_subtract_hp: # [std] (TObjectV8047c128* ene @ r3, int16_t amount @ r4, AdjustmentType type @ r5) -> void lwz r12, [r13 - ] andi. r12, r12, 0x0080 beq on_add_or_subtract_hp_skip_send @@ -259,10 +314,10 @@ on_add_or_subtract_hp: # [std] (TObjectV8047c128* ene @ r3, int16_t amount @ r4 mflr r0 stw [r1 + 4], r0 - stwu [r1 - 0x20], r1 - stw [r1 + 0x14], r29 - stw [r1 + 0x18], r30 - stw [r1 + 0x1C], r31 + stwu [r1 - 0x40], r1 + stw [r1 + 0x34], r29 + stw [r1 + 0x38], r30 + stw [r1 + 0x3C], r31 mr r29, r3 mr r30, r4 mr r31, r5 @@ -271,14 +326,14 @@ on_add_or_subtract_hp: # [std] (TObjectV8047c128* ene @ r3, int16_t amount @ r4 bl state_for_enemy # EnemyState* st = state_for_enemy(ene->entity_id); mr r5, r30 - cmplwi r31, 0 - beq on_add_or_subtract_hp_skip_negate_amount + cmplwi r31, 2 + bne on_add_or_subtract_hp_skip_negate_amount neg r5, r5 on_add_or_subtract_hp_skip_negate_amount: li r4, 0x1C lhbrx r4, [r29 + r4] - oris r4, r4, 0xE403 + oris r4, r4, 0xE404 stw [r1 + 0x08], r4 li r4, 0x0C sthbrx [r1 + r4], r5 @@ -291,25 +346,37 @@ on_add_or_subtract_hp_skip_negate_amount: li r4, 0x2B8 lhbrx r4, [r29 + r4] sth [r1 + 0x12], r4 + + li r5, 0x14 + cmplwi r31, 1 + bne on_add_or_subtract_hp_not_proportional + fmuls f0, f30, f0 + stfsx [r1 + r5], f0 # current_hp_factor (== (1.0 - special_amount * 0.01)) * weapon_reduction_factor + lwzx r4, [r1 + r5] + b on_add_or_subtract_hp_proportional_check_end +on_add_or_subtract_hp_not_proportional: + lis r4, 0xBF80 +on_add_or_subtract_hp_proportional_check_end: + stwbrx [r1 + r5], r4 + mr r3, r11 addi r4, r1, 0x08 - li r5, 0x0C + li r5, 0x10 bl send_60 -on_add_or_subtract_hp_tail_call: mr r3, r29 mr r4, r30 mr r5, r31 - lwz r31, [r1 + 0x1C] - lwz r30, [r1 + 0x18] - lwz r29, [r1 + 0x14] - addi r1, r1, 0x20 + lwz r31, [r1 + 0x3C] + lwz r30, [r1 + 0x38] + lwz r29, [r1 + 0x34] + addi r1, r1, 0x40 lwz r0, [r1 + 4] mtlr r0 on_add_or_subtract_hp_skip_send: - cmplwi r5, 0 - beq on_add_or_subtract_hp_tail_call_subtract_hp + cmplwi r5, 2 + bne on_add_or_subtract_hp_tail_call_subtract_hp b TObjectV8047c128_add_hp on_add_or_subtract_hp_tail_call_subtract_hp: b TObjectV8047c128_subtract_hp diff --git a/system/client-functions/EnemyDamageSyncWIP/EnemyDamageSyncWIP.4___.patch.s b/system/client-functions/EnemyDamageSyncWIP/EnemyDamageSyncWIP.4___.patch.s index a80e1f69..224818e9 100644 --- a/system/client-functions/EnemyDamageSyncWIP/EnemyDamageSyncWIP.4___.patch.s +++ b/system/client-functions/EnemyDamageSyncWIP/EnemyDamageSyncWIP.4___.patch.s @@ -103,11 +103,11 @@ on_add_or_subtract_hp_start: # (TObjectV004434c8* this @ eax, int16_t amount @ imul edx, edx, 0x0C add edx, [] # eax = state_for_enemy(cmd->header.entity_id) - sub esp, 0x0C - mov word [esp], 0x03E4 + sub esp, 0x10 + mov word [esp], 0x04E4 mov bx, [eax + 0x1C] mov [esp + 0x02], bx # cmd.entity_id - cmp dword [esp + 0x18], # Check if callsite is add_hp + cmp dword [esp + 0x1C], # Check if callsite is add_hp jne on_add_or_subtract_hp_skip_negate_amount neg cx on_add_or_subtract_hp_skip_negate_amount: @@ -118,16 +118,31 @@ on_add_or_subtract_hp_skip_negate_amount: mov [esp + 0x08], bx # cmd.current_hp mov bx, [eax + 0x02BC] mov [esp + 0x0A], bx # cmd.max_hp + mov dword [esp + 0x0C], 0xBF800000 # cmd.factor + + cmp dword [esp + 0x1C], # Check if callsite is Devil's/Demon's + jne on_add_or_subtract_hp_not_proportional + # esp is 0x20 down from where it is in caller's context + mov cx, 100 + sub cx, [esp + 0x34] # cx = (100 - special_amount) + movsx ecx, cx + mov [esp - 4], ecx + fild st0, dword [esp - 4] # current_hp_factor = static_cast(100 - special_amount) + fmul st0, dword [esp + 0x38] # *= weapon_reduction_factor + mov dword [esp - 4], 0x42C80000 # 100.0f + fdiv st0, dword [esp - 4] + fstp dword [esp + 0x0C], st0 # cmd.factor = ((100 - special_amount) * weapon_reduction_factor) / 100 +on_add_or_subtract_hp_not_proportional: mov ecx, esp mov ebx, [] # root_protocol test ebx, ebx jz on_add_or_subtract_hp_skip_send - mov eax, 0x0C + mov eax, 0x10 # Can't just `call ` here because this code is relocated at apply time mov edx, call edx # send_60(root_protocol, &out_cmd, sizeof(out_cmd)) - add esp, 0x0C + add esp, 0x10 on_add_or_subtract_hp_skip_send: mov edx, # subtract_hp @@ -188,6 +203,27 @@ handle_6xE4: # [std] (G_6xE4* cmd @ [esp + 4]) -> void imul eax, eax, 0x0C add eax, [] # eax = state_for_enemy(cmd->header.entity_id) + cmp dword [ebx + 0x0C], 0 + jl handle_6xE4_not_proportional + mov cx, [ebx + 0x0A] # cmd->max_hp + sub cx, [eax + 0x06] # st.total_damage + movzx ecx, cx + xor edx, edx + cmp ecx, edx + cmovl ecx, edx + mov [esp - 4], ecx + fild st0, dword [esp - 4] # current_hp = static_cast(max(cmd->max_hp - st.total_damage, 0)) + fld st0, dword [ebx + 0x0C] + fmulp st1, st0 + fistp dword [esp - 4], st0 + mov ecx, dword [esp - 4] # adjusted_hit_amount = static_cast(current_hp * cmd->factor) + xor edx, edx + inc edx + cmp ecx, edx + cmovl ecx, edx + mov [ebx + 0x04], cx # cmd->hit_amount = min(1, adjusted_hit_amount) +handle_6xE4_not_proportional: + movzx edx, word [eax + 0x06] # st.total_damage movsx esi, word [ebx + 0x04] # cmd->hit_amount movzx edi, word [ebx + 0x0A] # cmd->max_hp diff --git a/system/client-functions/EnemyDamageSyncWIP/EnemyDamageSyncWIP.59NL.patch.s b/system/client-functions/EnemyDamageSyncWIP/EnemyDamageSyncWIP.59NL.patch.s index 6ed58577..8a239ad9 100644 --- a/system/client-functions/EnemyDamageSyncWIP/EnemyDamageSyncWIP.59NL.patch.s +++ b/system/client-functions/EnemyDamageSyncWIP/EnemyDamageSyncWIP.59NL.patch.s @@ -46,6 +46,27 @@ handle_6xE4_start: # (G_6xE4* cmd @ [esp + 4]) -> void imul eax, eax, 0x0C add eax, [0x00AB02B8] # eax = state_for_enemy(cmd->header.entity_id) + cmp dword [ebx + 0x0C], 0 + jl handle_6xE4_not_proportional + mov cx, [ebx + 0x0A] # cmd->max_hp + sub cx, [eax + 0x06] # st.total_damage + movzx ecx, cx + xor edx, edx + cmp ecx, edx + cmovl ecx, edx + mov [esp - 4], ecx + fild st0, dword [esp - 4] # current_hp = static_cast(max(cmd->max_hp - st.total_damage, 0)) + fld st0, dword [ebx + 0x0C] + fmulp st1, st0 + fistp dword [esp - 4], st0 + mov ecx, dword [esp - 4] # adjusted_hit_amount = static_cast(current_hp * cmd->factor) + xor edx, edx + inc edx + cmp ecx, edx + cmovl ecx, edx + mov [ebx + 0x04], cx # cmd->hit_amount = min(1, adjusted_hit_amount) +handle_6xE4_not_proportional: + movzx edx, word [eax + 0x06] # st.total_damage movsx esi, word [ebx + 0x04] # cmd->hit_amount movzx edi, word [ebx + 0x0A] # cmd->max_hp @@ -122,7 +143,7 @@ handle_6xE4_end: push 5 push 0x00775A60 # TObjectV00b441c0::v19_handle_hit_special_effects push 5 - push 0x00775726 # TObjectV00b441c0::v19_handle_hit_special_effects + push 0x00775726 # TObjectV00b441c0::v19_handle_hit_special_effects (Devil's/Demon's) push 5 push 0x00774D7B # TObjectV00b441c0::v18_accept_hit push 5 @@ -159,12 +180,12 @@ on_add_or_subtract_hp_start: # (TObjectV00b441c0* this @ ecx, int16_t amount @ imul eax, eax, 0x0C add eax, [0x00AB02B8] # eax = state_for_enemy(cmd->header.entity_id) - sub esp, 0x0C - mov word [esp], 0x03E4 + sub esp, 0x10 + mov word [esp], 0x04E4 mov dx, [ecx + 0x1C] mov [esp + 0x02], dx # cmd.entity_id - mov dx, [esp + 0x10] - cmp dword [esp + 0x0C], 0x0077444D # Check if callsite is add_hp + mov dx, [esp + 0x14] + cmp dword [esp + 0x10], 0x0077444D # Check if callsite is add_hp jne on_add_or_subtract_hp_skip_negate_amount neg dx on_add_or_subtract_hp_skip_negate_amount: @@ -175,15 +196,30 @@ on_add_or_subtract_hp_skip_negate_amount: mov [esp + 0x08], dx # cmd.current_hp mov dx, [ecx + 0x02BC] mov [esp + 0x0A], dx # cmd.max_hp + mov dword [esp + 0x0C], 0xBF800000 # cmd.factor + + cmp dword [esp + 0x10], 0x0077572B # Check if callsite is Devil's/Demon's + jne on_add_or_subtract_hp_not_proportional + # esp is 0x18 down from where it is in caller's context + mov edx, 100 + sub edx, [esp + 0x24] # edx = (100 - special_amount) + mov [esp - 4], edx + fild st0, dword [esp - 4] # current_hp_factor = static_cast(100 - special_amount) + fmul st0, dword [esp + 0x50] # *= weapon_reduction_factor + mov dword [esp - 4], 0x42C80000 # 100.0f + fdiv st0, dword [esp - 4] + fstp dword [esp + 0x0C], st0 # cmd.factor = ((100 - special_amount) * weapon_reduction_factor) / 100 +on_add_or_subtract_hp_not_proportional: + mov edx, esp push ecx - push 0x0C + push 0x10 push edx mov ecx, [0x00AAB284] mov edx, 0x007D3F38 call edx # send_60(root_protocol, &cmd, sizeof(cmd)); pop ecx - add esp, 0x0C + add esp, 0x10 on_add_or_subtract_hp_skip_send: mov eax, 0x00777414 # subtract_hp diff --git a/tests/GC-XB-EnemyDamageSyncSwitch.test.txt b/tests/GC-XB-EnemyDamageSyncSwitch.test.txt index 53b23449..f439eab2 100644 --- a/tests/GC-XB-EnemyDamageSyncSwitch.test.txt +++ b/tests/GC-XB-EnemyDamageSyncSwitch.test.txt @@ -628,7 +628,7 @@ I 33336 2025-07-21 23:40:37 - [Commands] Received from C-2 (Tali Lv.60) @ ipss:N 0000 | B3 00 0C 00 BC 01 00 80 00 00 00 00 | I 33336 2025-07-21 23:40:37 - [C-2] Client cache behavior patched I 33336 2025-07-21 23:40:37 - [Commands] Sending to C-2 (Tali Lv.60) @ ipss:N-1:127.0.0.1:53977 (version=GC_V3 command=B2 flag=00) -0000 | B2 00 18 05 08 05 00 00 00 00 00 00 00 00 00 00 | +0000 | B2 00 E0 05 D0 05 00 00 00 00 00 00 00 00 00 00 | 0010 | 00 00 00 04 7D 08 02 A6 48 00 00 88 7C E8 02 A6 | } H | 0020 | 38 87 00 08 80 64 FF F8 80 A4 FF FC 7C 60 2B 78 | 8 d |`+x 0030 | 28 00 00 00 7D 08 03 A6 4D 82 00 20 7C E4 2A 14 | ( } M | * @@ -639,77 +639,89 @@ I 33336 2025-07-21 23:40:37 - [Commands] Sending to C-2 (Tali Lv.60) @ ipss:N-1: 0080 | 7C 00 28 6C 7C 00 04 AC 7C 00 2F AC 30 A5 00 08 | | (l| | / 0 0090 | 34 84 FF F8 40 80 FF EC 4C 00 01 2C 4B FF FF 84 | 4 @ L ,K 00A0 | 4B FF FF 7D 80 1E 45 28 00 00 00 08 2C 00 00 00 | K } E( , -00B0 | 41 82 00 0C 80 0F 63 08 00 00 00 04 4B F0 E0 DD | A c K -00C0 | 80 0F 63 60 00 00 00 04 4B F0 E0 99 80 4C 0D 74 | c` K L t +00B0 | 41 82 00 0C 80 0F 63 08 00 00 00 04 4B F0 E1 7D | A c K } +00C0 | 80 0F 63 60 00 00 00 04 4B F0 E1 39 80 4C 0D 74 | c` K 9 L t 00D0 | 00 00 00 08 00 E4 00 06 80 00 41 C0 80 01 3A 90 | A : -00E0 | 00 00 00 04 4B FF 08 61 80 01 15 08 00 00 00 04 | K a -00F0 | 4B FF 2D F1 80 01 1C 68 00 00 00 04 4B FF 26 91 | K - h K & -0100 | 80 01 1C B8 00 00 00 04 4B FF 26 41 80 01 1D 34 | K &A 4 -0110 | 00 00 00 04 4B FF 25 C5 80 01 1D 84 00 00 00 04 | K % -0120 | 4B FF 25 75 80 01 27 8C 00 00 00 04 4B FF 1B 6D | K %u ' K m -0130 | 80 01 2B 00 00 00 00 04 4B FF 17 F9 80 01 2C 70 | + K ,p -0140 | 00 00 00 04 4B FF 16 89 80 01 30 24 00 00 00 04 | K 0$ -0150 | 4B FF 12 D5 80 01 34 6C 00 00 00 04 4B FF 0E 8D | K 4l K -0160 | 80 01 35 64 00 00 00 04 4B FF 0D 95 80 01 36 5C | 5d K 6\ -0170 | 00 00 00 04 4B FF 0C 9D 80 01 37 C4 00 00 00 04 | K 7 -0180 | 4B FF 0B 35 80 01 39 04 00 00 00 04 4B FF 09 F5 | K 5 9 K -0190 | 80 01 3E 18 00 00 00 04 4B FF 04 E1 80 01 3F 1C | > K ? -01A0 | 00 00 00 04 4B FF 03 DD 80 01 47 88 00 00 00 04 | K G -01B0 | 4B FE FB 71 80 00 41 C0 00 00 03 30 81 8D AF 78 | K q A 0 x -01C0 | 71 8C 00 80 4D 82 00 20 7C 08 02 A6 90 01 00 04 | q M | -01D0 | 94 21 FF E0 93 E1 00 08 93 C1 00 0C 7C 7F 1B 78 | ! | x -01E0 | 38 60 00 02 7C 7F 1E 2C 28 03 10 00 41 80 00 D4 | 8` | ,( A -01F0 | 28 03 1B 50 40 80 00 CC 48 0F 26 B1 90 61 00 18 | ( P@ H & a -0200 | 38 60 00 02 7C 7F 1E 2C 48 00 00 D1 A0 83 00 06 | 8` | ,H -0210 | 38 A0 00 04 7C BF 2E 2C 7C 84 2A 14 38 A0 00 0A | 8 | .,| * 8 -0220 | 7C BF 2E 2C 7C 04 28 00 41 80 00 5C B0 A3 00 06 | | .,| ( A \ -0230 | 38 80 00 0C 48 00 02 01 80 83 00 00 70 80 08 00 | 8 H p -0240 | 40 82 00 80 60 84 08 00 90 83 00 00 80 C1 00 18 | @ ` -0250 | 28 06 00 00 41 82 00 6C 90 81 00 14 38 C0 00 12 | ( A l 8 -0260 | 7C A1 37 2C A0 DF 00 02 64 C6 0A 03 90 C1 00 0C | | 7, d -0270 | 70 C6 FF 0F B0 C1 00 10 38 61 00 0C 48 1E 02 31 | p 8a H 1 -0280 | 48 00 00 40 2C 04 00 00 40 80 00 08 38 80 00 00 | H @, @ 8 -0290 | B0 83 00 06 38 80 00 0C 7C 7E 1B 78 48 00 01 99 | 8 |~ xH -02A0 | 80 61 00 18 28 03 00 00 41 82 00 18 7F C4 F3 78 | a ( A x -02B0 | 81 83 00 18 81 8C 01 40 7D 89 03 A6 4E 80 04 21 | @} N ! -02C0 | 83 C1 00 0C 83 E1 00 08 38 21 00 20 80 01 00 04 | 8! -02D0 | 7C 08 03 A6 4E 80 00 20 80 8D BB 24 70 63 0F FF | | N $pc -02E0 | 1C 63 00 0C 7C 63 22 14 4E 80 00 20 38 A0 00 01 | c |c" N 8 -02F0 | 48 00 00 08 38 A0 00 00 81 8D AF 78 71 8C 00 80 | H 8 xq -0300 | 41 82 00 D0 A0 03 00 1C 28 00 10 00 41 80 00 C4 | A ( A -0310 | 28 00 1B 50 40 80 00 BC 81 6D AF 60 28 0B 00 00 | ( P@ m `( -0320 | 41 82 00 B0 7C 08 02 A6 90 01 00 04 94 21 FF E0 | A | ! -0330 | 93 A1 00 14 93 C1 00 18 93 E1 00 1C 7C 7D 1B 78 | |} x -0340 | 7C 9E 23 78 7C BF 2B 78 A0 7D 00 1C 4B FF FF 8D | | #x| +x } K -0350 | 7F C5 F3 78 28 1F 00 00 41 82 00 08 7C A5 00 D0 | x( A | -0360 | 38 80 00 1C 7C 9D 26 2C 64 84 E4 03 90 81 00 08 | 8 | &,d -0370 | 38 80 00 0C 7C A1 27 2C 38 80 00 06 7C 83 26 2C | 8 | ',8 | &, -0380 | B0 81 00 0E 38 80 03 2C 7C 9D 26 2C B0 81 00 10 | 8 ,| &, -0390 | 38 80 02 B8 7C 9D 26 2C B0 81 00 12 7D 63 5B 78 | 8 | &, }c[x -03A0 | 38 81 00 08 38 A0 00 0C 48 1D 7C 35 7F A3 EB 78 | 8 8 H |5 x -03B0 | 7F C4 F3 78 7F E5 FB 78 83 E1 00 1C 83 C1 00 18 | x x -03C0 | 83 A1 00 14 38 21 00 20 80 01 00 04 7C 08 03 A6 | 8! | -03D0 | 28 05 00 00 41 82 00 08 48 00 D0 78 48 00 D0 B4 | ( A H xH -03E0 | 81 8D AF 78 71 8C 00 80 4C 82 00 20 B0 61 00 0E | xq L a -03F0 | 4E 80 00 20 7C 08 02 A6 90 01 00 04 94 21 FF E0 | N | ! -0400 | 7C 66 1B 78 7C 87 23 78 7C 83 23 78 38 80 00 0C | |f x| #x| #x8 -0410 | 38 A0 FF FF 48 00 00 21 7C C3 33 78 7C E4 3B 78 | 8 H !| 3x| ;x -0420 | 38 21 00 20 80 01 00 04 7C 08 03 A6 7D 89 03 A6 | 8! | } -0430 | 4E 80 04 20 7C 08 02 A6 90 01 00 04 90 61 FF FC | N | a -0440 | 90 81 FF F8 90 A1 FF F4 90 C1 FF F0 90 E1 FF EC | -0450 | 91 01 FF E8 91 21 FF E4 91 41 FF E0 91 61 FF DC | ! A a -0460 | 91 81 FF D8 38 C1 FF C0 7C C4 30 50 90 26 00 00 | 8 | 0P & -0470 | 7C C1 33 78 54 86 72 1E 3C C6 00 01 64 C6 FF 00 | | 3xT r < d -0480 | 54 A5 04 3E 7C A5 33 78 90 A1 00 08 38 C0 00 00 | T >| 3x 8 -0490 | 38 63 FF FC 38 E1 00 08 54 80 F6 3E 7C 09 03 A6 | 8c 8 T >| -04A0 | 84 03 00 04 94 07 00 04 42 00 FF F8 38 61 00 08 | B 8a -04B0 | 48 1D FF FD 80 21 00 00 80 61 FF FC 80 81 FF F8 | H ! a -04C0 | 80 A1 FF F4 80 C1 FF F0 80 E1 FF EC 81 01 FF E8 | -04D0 | 81 21 FF E4 81 41 FF E0 81 61 FF DC 81 81 FF D8 | ! A a -04E0 | 80 01 00 04 7C 08 03 A6 4E 80 00 20 00 00 00 00 | | N -04F0 | 00 00 00 00 00 00 00 00 00 00 04 E4 00 00 00 01 | -0500 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | -0510 | 00 00 00 00 00 00 00 00 | +00E0 | 00 00 00 04 4B FF 08 DD 80 01 15 08 00 00 00 04 | K +00F0 | 4B FF 2E 6D 80 01 1C 68 00 00 00 04 4B FF 27 0D | K .m h K ' +0100 | 80 01 1C B8 00 00 00 04 4B FF 26 BD 80 01 1D 34 | K & 4 +0110 | 00 00 00 04 4B FF 26 41 80 01 1D 84 00 00 00 04 | K &A +0120 | 4B FF 25 F1 80 01 27 8C 00 00 00 04 4B FF 1B E9 | K % ' K +0130 | 80 01 2B 00 00 00 00 04 4B FF 18 75 80 01 2C 70 | + K u ,p +0140 | 00 00 00 04 4B FF 17 05 80 01 2F F8 00 00 00 08 | K / +0150 | EC 60 00 B2 EF FE 00 F2 80 01 30 14 00 00 00 04 | ` 0 +0160 | FC 60 F8 1E 80 01 30 1C 00 00 00 04 D8 61 00 40 | ` 0 a @ +0170 | 80 01 30 24 00 00 00 04 4B FF 13 41 80 01 34 6C | 0$ K A 4l +0180 | 00 00 00 04 4B FF 0F 09 80 01 35 64 00 00 00 04 | K 5d +0190 | 4B FF 0E 11 80 01 36 5C 00 00 00 04 4B FF 0D 19 | K 6\ K +01A0 | 80 01 37 C4 00 00 00 04 4B FF 0B B1 80 01 39 04 | 7 K 9 +01B0 | 00 00 00 04 4B FF 0A 71 80 01 3E 18 00 00 00 04 | K q > +01C0 | 4B FF 05 5D 80 01 3F 1C 00 00 00 04 4B FF 04 59 | K ] ? K Y +01D0 | 80 01 47 88 00 00 00 04 4B FE FB ED 80 00 41 C0 | G K A +01E0 | 00 00 03 D0 81 8D AF 78 71 8C 00 80 4D 82 00 20 | xq M +01F0 | 7C 08 02 A6 90 01 00 04 94 21 FF E0 93 E1 00 08 | | ! +0200 | 93 C1 00 0C 7C 7F 1B 78 38 60 00 02 7C 7F 1E 2C | | x8` | , +0210 | 28 03 10 00 41 80 01 48 28 03 1B 50 40 80 01 40 | ( A H( P@ @ +0220 | 48 0F 26 B1 90 61 00 18 38 60 00 02 7C 7F 1E 2C | H & a 8` | , +0230 | 48 00 01 45 38 80 00 0C 7C BF 24 2C 74 A0 80 00 | H E8 | $,t +0240 | 40 82 00 68 7C BF 21 2E 39 00 00 0A 7D 1F 46 2C | @ h| !.9 } F, +0250 | A0 83 00 06 7D 04 40 50 2C 08 00 00 41 80 00 4C | } @P, A L +0260 | 3C 80 4B 00 7C 85 43 78 90 A1 FF FC C0 21 FF FC | < K | Cx ! +0270 | 90 81 FF FC C0 41 FF FC EC 21 10 28 C0 5F 00 0C | A ! ( _ +0280 | EC 21 00 B2 FC 20 08 1E D8 21 FF F8 81 01 FF FC | ! ! +0290 | 38 80 00 01 7C 08 20 00 40 80 00 08 7C 88 23 78 | 8 | @ | #x +02A0 | 38 A0 00 04 7D 1F 2F 2C A0 83 00 06 38 A0 00 04 | 8 } /, 8 +02B0 | 7C BF 2E 2C 7C 84 2A 14 38 A0 00 0A 7C BF 2E 2C | | .,| * 8 | ., +02C0 | 7C 04 28 00 41 80 00 5C B0 A3 00 06 38 80 00 0C | | ( A \ 8 +02D0 | 48 00 02 2D 80 83 00 00 70 80 08 00 40 82 00 80 | H - p @ +02E0 | 60 84 08 00 90 83 00 00 80 C1 00 18 28 06 00 00 | ` ( +02F0 | 41 82 00 6C 90 81 00 14 38 C0 00 12 7C A1 37 2C | A l 8 | 7, +0300 | A0 DF 00 02 64 C6 0A 03 90 C1 00 0C 70 C6 FF 0F | d p +0310 | B0 C1 00 10 38 61 00 0C 48 1E 01 BD 48 00 00 40 | 8a H H @ +0320 | 2C 04 00 00 40 80 00 08 38 80 00 00 B0 83 00 06 | , @ 8 +0330 | 38 80 00 0C 7C 7E 1B 78 48 00 01 C5 80 61 00 18 | 8 |~ xH a +0340 | 28 03 00 00 41 82 00 18 7F C4 F3 78 81 83 00 18 | ( A x +0350 | 81 8C 01 40 7D 89 03 A6 4E 80 04 21 83 C1 00 0C | @} N ! +0360 | 83 E1 00 08 38 21 00 20 80 01 00 04 7C 08 03 A6 | 8! | +0370 | 4E 80 00 20 80 8D BB 24 70 63 0F FF 1C 63 00 0C | N $pc c +0380 | 7C 63 22 14 4E 80 00 20 38 A0 00 01 48 00 00 10 | |c" N 8 H +0390 | 38 A0 00 02 48 00 00 08 38 A0 00 00 81 8D AF 78 | 8 H 8 x +03A0 | 71 8C 00 80 41 82 00 F4 A0 03 00 1C 28 00 10 00 | q A ( +03B0 | 41 80 00 E8 28 00 1B 50 40 80 00 E0 81 6D AF 60 | A ( P@ m ` +03C0 | 28 0B 00 00 41 82 00 D4 7C 08 02 A6 90 01 00 04 | ( A | +03D0 | 94 21 FF C0 93 A1 00 34 93 C1 00 38 93 E1 00 3C | ! 4 8 < +03E0 | 7C 7D 1B 78 7C 9E 23 78 7C BF 2B 78 A0 7D 00 1C | |} x| #x| +x } +03F0 | 4B FF FF 85 7F C5 F3 78 28 1F 00 02 40 82 00 08 | K x( @ +0400 | 7C A5 00 D0 38 80 00 1C 7C 9D 26 2C 64 84 E4 04 | | 8 | &,d +0410 | 90 81 00 08 38 80 00 0C 7C A1 27 2C 38 80 00 06 | 8 | ',8 +0420 | 7C 83 26 2C B0 81 00 0E 38 80 03 2C 7C 9D 26 2C | | &, 8 ,| &, +0430 | B0 81 00 10 38 80 02 B8 7C 9D 26 2C B0 81 00 12 | 8 | &, +0440 | 38 A0 00 14 28 1F 00 01 40 82 00 14 EC 1E 00 32 | 8 ( @ 2 +0450 | 7C 01 2D 2E 7C 81 28 2E 48 00 00 08 3C 80 BF 80 | | -.| (.H < +0460 | 7C 81 2D 2C 7D 63 5B 78 38 81 00 08 38 A0 00 10 | | -,}c[x8 8 +0470 | 48 1D 7B 95 7F A3 EB 78 7F C4 F3 78 7F E5 FB 78 | H { x x x +0480 | 83 E1 00 3C 83 C1 00 38 83 A1 00 34 38 21 00 40 | < 8 48! @ +0490 | 80 01 00 04 7C 08 03 A6 28 05 00 02 40 82 00 08 | | ( @ +04A0 | 48 00 CF D8 48 00 D0 14 81 8D AF 78 71 8C 00 80 | H H xq +04B0 | 4C 82 00 20 B0 61 00 0E 4E 80 00 20 7C 08 02 A6 | L a N | +04C0 | 90 01 00 04 94 21 FF E0 7C 66 1B 78 7C 87 23 78 | ! |f x| #x +04D0 | 7C 83 23 78 38 80 00 0C 38 A0 FF FF 48 00 00 21 | | #x8 8 H ! +04E0 | 7C C3 33 78 7C E4 3B 78 38 21 00 20 80 01 00 04 | | 3x| ;x8! +04F0 | 7C 08 03 A6 7D 89 03 A6 4E 80 04 20 7C 08 02 A6 | | } N | +0500 | 90 01 00 04 90 61 FF FC 90 81 FF F8 90 A1 FF F4 | a +0510 | 90 C1 FF F0 90 E1 FF EC 91 01 FF E8 91 21 FF E4 | ! +0520 | 91 41 FF E0 91 61 FF DC 91 81 FF D8 38 C1 FF C0 | A a 8 +0530 | 7C C4 30 50 90 26 00 00 7C C1 33 78 54 86 72 1E | | 0P & | 3xT r +0540 | 3C C6 00 01 64 C6 FF 00 54 A5 04 3E 7C A5 33 78 | < d T >| 3x +0550 | 90 A1 00 08 38 C0 00 00 38 63 FF FC 38 E1 00 08 | 8 8c 8 +0560 | 54 80 F6 3E 7C 09 03 A6 84 03 00 04 94 07 00 04 | T >| +0570 | 42 00 FF F8 38 61 00 08 48 1D FF 5D 80 21 00 00 | B 8a H ] ! +0580 | 80 61 FF FC 80 81 FF F8 80 A1 FF F4 80 C1 FF F0 | a +0590 | 80 E1 FF EC 81 01 FF E8 81 21 FF E4 81 41 FF E0 | ! A +05A0 | 81 61 FF DC 81 81 FF D8 80 01 00 04 7C 08 03 A6 | a | +05B0 | 4E 80 00 20 00 00 00 00 00 00 00 00 00 00 00 00 | N +05C0 | 00 00 05 AC 00 00 00 01 00 00 00 00 00 00 00 00 | +05D0 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | I 33336 2025-07-21 23:40:37 - [Commands] Received from C-2 (Tali Lv.60) @ ipss:N-1:127.0.0.1:53977 (version=GC_V3 command=B3 flag=00) 0000 | B3 00 0C 00 00 00 00 00 00 00 00 00 | I 33336 2025-07-21 23:40:39 - [Commands] Received from C-2 (Tali Lv.60) @ ipss:N-1:127.0.0.1:53977 (version=GC_V3 command=60 flag=00) @@ -4465,7 +4477,8 @@ I 33336 2025-07-21 23:42:02 - [Commands] Received from C-2 (Tali Lv.60) @ ipss:N I 33336 2025-07-21 23:42:02 - [Commands] Received from C-2 (Tali Lv.60) @ ipss:N-1:127.0.0.1:53977 (version=GC_V3 command=60 flag=00) 0000 | 60 00 10 00 46 03 00 00 01 00 00 00 74 10 00 00 | ` F t I 33336 2025-07-21 23:42:03 - [Commands] Received from C-2 (Tali Lv.60) @ ipss:N-1:127.0.0.1:53977 (version=GC_V3 command=60 flag=00) -0000 | 60 00 10 00 E4 03 74 10 33 00 00 00 5F 00 5F 00 | ` t 3 _ _ +0000 | 60 00 14 00 E4 04 74 10 33 00 00 00 5F 00 5F 00 | ` t 3 _ _ +0010 | 00 00 80 BF | I 33336 2025-07-21 23:42:03 - [C-2] E-076 damage incremented by 51; before hit, damage was 0 (cmd) or 0 (ene_st) and HP was 95/95 I 33336 2025-07-21 23:42:03 - [Commands] Received from C-2 (Tali Lv.60) @ ipss:N-1:127.0.0.1:53977 (version=GC_V3 command=60 flag=00) 0000 | 60 00 10 00 0A 03 74 10 74 00 33 00 20 00 06 00 | ` t t 3 @@ -4481,7 +4494,8 @@ I 33336 2025-07-21 23:42:04 - [Commands] Received from C-2 (Tali Lv.60) @ ipss:N I 33336 2025-07-21 23:42:05 - [Commands] Received from C-2 (Tali Lv.60) @ ipss:N-1:127.0.0.1:53977 (version=GC_V3 command=60 flag=00) 0000 | 60 00 10 00 46 03 00 00 01 00 00 00 74 10 00 00 | ` F t I 33336 2025-07-21 23:42:05 - [Commands] Received from C-2 (Tali Lv.60) @ ipss:N-1:127.0.0.1:53977 (version=GC_V3 command=60 flag=00) -0000 | 60 00 10 00 E4 03 74 10 32 00 33 00 2C 00 5F 00 | ` t 2 3 , _ +0000 | 60 00 14 00 E4 04 74 10 32 00 33 00 2C 00 5F 00 | ` t 2 3 , _ +0010 | 00 00 80 BF | I 33336 2025-07-21 23:42:05 - [C-2] E-076 damage incremented by 50; before hit, damage was 51 (cmd) or 51 (ene_st) and HP was 44/95 I 33336 2025-07-21 23:42:05 - [Commands] Received from C-2 (Tali Lv.60) @ ipss:N-1:127.0.0.1:53977 (version=GC_V3 command=60 flag=00) 0000 | 60 00 10 00 0A 03 74 10 74 00 5F 00 20 00 0E 00 | ` t t _ diff --git a/tests/XB-GC-EnemyDamageSyncSwitch.test.txt b/tests/XB-GC-EnemyDamageSyncSwitch.test.txt index 9bba1188..3f467f12 100644 --- a/tests/XB-GC-EnemyDamageSyncSwitch.test.txt +++ b/tests/XB-GC-EnemyDamageSyncSwitch.test.txt @@ -955,7 +955,7 @@ I 34886 2025-07-21 23:45:01 - [Commands] Received from C-3 (Jess Lv.51) @ ip:127 0000 | B3 00 0C 00 55 45 4F 34 00 00 00 00 | UEO4 I 34886 2025-07-21 23:45:01 - [C-3] Version detected as 344F4555 I 34886 2025-07-21 23:45:22 - [Commands] Sending to C-3 (Jess Lv.51) @ ip:127.0.0.1:54521 (version=XB_V3 command=B2 flag=00) -0000 | B2 00 B4 05 A4 05 00 00 00 00 00 00 00 00 00 00 | +0000 | B2 00 2C 06 1C 06 00 00 00 00 00 00 00 00 00 00 | , 0010 | 7C 01 00 00 51 52 E8 B0 00 00 00 42 4A 4F 34 60 | | QR BJO4` 0020 | D4 43 00 78 05 40 00 7C 05 40 00 F0 63 2C 00 E0 | C x @ | @ c, 0030 | 05 63 00 44 4A 4F 34 D0 D7 43 00 18 09 40 00 1C | c DJO4 C @ @@ -979,7 +979,7 @@ I 34886 2025-07-21 23:45:22 - [Commands] Sending to C-3 (Jess Lv.51) @ ip:127.0. 0150 | 00 8B 44 2C 08 39 C1 7D 07 C6 04 0A 90 41 EB F5 | D, 9 } A 0160 | FF 74 2C 08 FF 74 2C 08 8B 4F 08 FF 11 83 C5 08 | t, t, O 0170 | 4B 75 B4 89 E9 8B 3C 24 8B 74 24 04 8B 6C 24 08 | Ku <$ t$ l$ -0180 | 8B 5C 24 0C 8B 44 24 10 01 CC FF E0 E8 69 01 00 | \$ D$ i +0180 | 8B 5C 24 0C 8B 44 24 10 01 CC FF E0 E8 AB 01 00 | \$ D$ 0190 | 00 E8 35 00 00 00 E8 01 00 00 00 C3 6A 05 68 A5 | 5 j h 01A0 | 58 2B 00 6A 01 E8 04 00 00 00 0F 00 00 00 58 FF | X+ j X 01B0 | 30 E8 0F 00 00 00 F6 05 B8 54 63 00 80 75 05 66 | 0 Tc u f @@ -990,63 +990,70 @@ I 34886 2025-07-21 23:45:22 - [Commands] Sending to C-3 (Jess Lv.51) @ ip:127.0. 0200 | 88 2A 00 6A 05 68 CC 88 2A 00 6A 05 68 D2 8C 2A | * j h * j h * 0210 | 00 6A 05 68 13 8D 2A 00 6A 05 68 E8 92 2A 00 6A | j h * j h * j 0220 | 05 68 77 95 2A 00 6A 05 68 70 96 2A 00 6A 05 68 | hw * j hp * j h -0230 | FF 98 2A 00 6A 0F E8 04 00 00 00 AD 00 00 00 58 | * j X -0240 | FF 30 E8 AD 00 00 00 50 51 53 F6 05 B8 54 63 00 | 0 PQS Tc -0250 | 80 0F 84 83 00 00 00 0F B7 50 1C 81 FA 00 10 00 | P -0260 | 00 7C 77 81 FA 50 1B 00 00 7D 6F 81 E2 FF 0F 00 | |w P }o -0270 | 00 6B D2 0C 03 15 90 7F 63 00 83 EC 0C 66 C7 04 | k c f -0280 | 24 E4 03 66 8B 58 1C 66 89 5C 24 02 81 7C 24 18 | $ f X f \$ |$ -0290 | 20 85 2A 00 75 03 66 F7 D9 66 89 4C 24 04 66 8B | * u f f L$ f -02A0 | 5A 06 66 89 5C 24 06 66 8B 98 30 03 00 00 66 89 | Z f \$ f 0 f -02B0 | 5C 24 08 66 8B 98 BC 02 00 00 66 89 5C 24 0A 89 | \$ f f \$ -02C0 | E1 8B 1D 20 3E 72 00 85 DB 74 0F B8 0C 00 00 00 | >r t -02D0 | BA 80 C5 2D 00 FF D2 83 C4 0C BA E0 9C 2A 00 B8 | - * -02E0 | 10 9D 2A 00 81 7C 24 0C 20 85 2A 00 0F 44 D0 5B | * |$ * D [ -02F0 | 59 58 FF E2 E8 1B FD FF FF C3 51 52 E8 B0 00 00 | YX QR -0300 | 00 42 4A 4F 34 60 D4 43 00 78 05 40 00 7C 05 40 | BJO4` C x @ | @ -0310 | 00 F0 63 2C 00 E0 05 63 00 44 4A 4F 34 D0 D7 43 | c, c DJO4 C -0320 | 00 18 09 40 00 1C 09 40 00 40 6F 2C 00 40 0C 63 | @ @ @o, @ c -0330 | 00 55 4A 4F 34 E0 0F 44 00 3C 3E 40 00 40 3E 40 | UJO4 D <>@ @>@ -0340 | 00 E0 84 2C 00 8C 87 63 00 44 45 4F 34 4C 17 44 | , c DEO4L D -0350 | 00 18 45 40 00 1C 45 40 00 30 80 2C 00 74 5C 63 | E@ E@ 0 , t\c -0360 | 00 55 45 4F 34 EC 0F 44 00 3C 3E 40 00 40 3E 40 | UEO4 D <>@ @>@ -0370 | 00 10 82 2C 00 0C 55 63 00 44 50 4F 34 68 17 44 | , Uc DPO4h D -0380 | 00 38 45 40 00 3C 45 40 00 60 80 2C 00 74 5C 63 | 8E@ r t -0500 | 5A FB FF FF C7 05 E8 37 72 00 01 00 00 00 E8 5B | Z 7r [ -0510 | 16 00 00 C7 05 E8 37 72 00 00 00 00 00 83 C4 14 | 7r -0520 | EB 22 31 FF 39 D2 0F 4C D7 66 89 50 06 89 C6 8B | "1 9 L f P -0530 | 04 24 85 C0 74 0B 89 C1 56 8B 11 FF 92 38 01 00 | $ t V 8 -0540 | 00 83 C4 04 5F 5E 5B C3 A0 9C 2A 00 13 00 00 00 | _^[ * -0550 | 66 83 B8 28 03 00 00 02 75 03 31 C0 C3 E8 FF FF | f ( u 1 -0560 | FF FF C3 EA 7C 2A 00 1A 00 00 00 66 89 C1 89 F8 | |* f -0570 | E8 FF FF FF FF EB 0E CC CC CC CC CC CC CC CC CC | -0580 | CC CC CC CC CC 00 00 00 00 00 00 00 00 00 00 00 | -0590 | 00 00 00 00 80 05 00 00 01 00 00 00 00 00 00 00 | -05A0 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | -05B0 | 00 00 00 00 | +0230 | FF 98 2A 00 6A 0F E8 04 00 00 00 EF 00 00 00 58 | * j X +0240 | FF 30 E8 EF 00 00 00 50 51 53 F6 05 B8 54 63 00 | 0 PQS Tc +0250 | 80 0F 84 C5 00 00 00 0F B7 50 1C 81 FA 00 10 00 | P +0260 | 00 0F 8C B5 00 00 00 81 FA 50 1B 00 00 0F 8D A9 | P +0270 | 00 00 00 81 E2 FF 0F 00 00 6B D2 0C 03 15 90 7F | k +0280 | 63 00 83 EC 10 66 C7 04 24 E4 04 66 8B 58 1C 66 | c f $ f X f +0290 | 89 5C 24 02 81 7C 24 1C 20 85 2A 00 75 03 66 F7 | \$ |$ * u f +02A0 | D9 66 89 4C 24 04 66 8B 5A 06 66 89 5C 24 06 66 | f L$ f Z f \$ f +02B0 | 8B 98 30 03 00 00 66 89 5C 24 08 66 8B 98 BC 02 | 0 f \$ f +02C0 | 00 00 66 89 5C 24 0A C7 44 24 0C 00 00 80 BF 81 | f \$ D$ +02D0 | 7C 24 1C 04 99 2A 00 75 28 66 B9 64 00 66 2B 4C | |$ * u(f d f+L +02E0 | 24 34 0F BF C9 89 4C 24 FC DB 44 24 FC D8 4C 24 | $4 L$ D$ L$ +02F0 | 38 C7 44 24 FC 00 00 C8 42 D8 74 24 FC D9 5C 24 | 8 D$ B t$ \$ +0300 | 0C 89 E1 8B 1D 20 3E 72 00 85 DB 74 0F B8 10 00 | >r t +0310 | 00 00 BA 80 C5 2D 00 FF D2 83 C4 10 BA E0 9C 2A | - * +0320 | 00 B8 10 9D 2A 00 81 7C 24 0C 20 85 2A 00 0F 44 | * |$ * D +0330 | D0 5B 59 58 FF E2 E8 D9 FC FF FF C3 51 52 E8 B0 | [YX QR +0340 | 00 00 00 42 4A 4F 34 60 D4 43 00 78 05 40 00 7C | BJO4` C x @ | +0350 | 05 40 00 F0 63 2C 00 E0 05 63 00 44 4A 4F 34 D0 | @ c, c DJO4 +0360 | D7 43 00 18 09 40 00 1C 09 40 00 40 6F 2C 00 40 | C @ @ @o, @ +0370 | 0C 63 00 55 4A 4F 34 E0 0F 44 00 3C 3E 40 00 40 | c UJO4 D <>@ @ +0380 | 3E 40 00 E0 84 2C 00 8C 87 63 00 44 45 4F 34 4C | >@ , c DEO4L +0390 | 17 44 00 18 45 40 00 1C 45 40 00 30 80 2C 00 74 | D E@ E@ 0 , t +03A0 | 5C 63 00 55 45 4F 34 EC 0F 44 00 3C 3E 40 00 40 | \c UEO4 D <>@ @ +03B0 | 3E 40 00 10 82 2C 00 0C 55 63 00 44 50 4F 34 68 | >@ , Uc DPO4h +03C0 | 17 44 00 38 45 40 00 3C 45 40 00 60 80 2C 00 74 | D 8E@ r +0570 | 00 85 DB 74 0A B8 0C 00 00 00 E8 21 FB FF FF C7 | t ! +0580 | 05 E8 37 72 00 01 00 00 00 E8 22 16 00 00 C7 05 | 7r " +0590 | E8 37 72 00 00 00 00 00 83 C4 14 EB 22 31 FF 39 | 7r "1 9 +05A0 | D2 0F 4C D7 66 89 50 06 89 C6 8B 04 24 85 C0 74 | L f P $ t +05B0 | 0B 89 C1 56 8B 11 FF 92 38 01 00 00 83 C4 04 5F | V 8 _ +05C0 | 5E 5B C3 A0 9C 2A 00 13 00 00 00 66 83 B8 28 03 | ^[ * f ( +05D0 | 00 00 02 75 03 31 C0 C3 E8 FF FF FF FF C3 EA 7C | u 1 | +05E0 | 2A 00 1A 00 00 00 66 89 C1 89 F8 E8 FF FF FF FF | * f +05F0 | EB 0E CC CC CC CC CC CC CC CC CC CC CC CC CC CC | +0600 | 00 00 00 00 00 00 00 00 00 00 00 00 F8 05 00 00 | +0610 | 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | +0620 | 00 00 00 00 00 00 00 00 00 00 00 00 | I 34886 2025-07-21 23:45:24 - [Commands] Received from C-3 (Jess Lv.51) @ ip:127.0.0.1:54521 (version=XB_V3 command=B3 flag=00) 0000 | B3 00 0C 00 46 25 E8 00 00 00 00 00 | F% I 34886 2025-07-21 23:45:25 - [Commands] Received from C-3 (Jess Lv.51) @ ip:127.0.0.1:54521 (version=XB_V3 command=60 flag=00) @@ -1559,7 +1566,8 @@ I 34886 2025-07-21 23:46:44 - [Commands] Received from C-3 (Jess Lv.51) @ ip:127 I 34886 2025-07-21 23:46:44 - [Commands] Received from C-3 (Jess Lv.51) @ ip:127.0.0.1:54521 (version=XB_V3 command=60 flag=00) 0000 | 60 00 10 00 46 03 00 00 01 00 00 00 8C 10 00 00 | ` F I 34886 2025-07-21 23:46:44 - [Commands] Received from C-3 (Jess Lv.51) @ ip:127.0.0.1:54521 (version=XB_V3 command=60 flag=00) -0000 | 60 00 10 00 E4 03 8C 10 66 00 00 00 AB 01 AB 01 | ` f +0000 | 60 00 14 00 E4 04 8C 10 66 00 00 00 AB 01 AB 01 | ` f +0010 | 00 00 80 BF | I 34886 2025-07-21 23:46:44 - [C-3] E-08E damage incremented by 102; before hit, damage was 0 (cmd) or 0 (ene_st) and HP was 427/427 I 34886 2025-07-21 23:46:45 - [Commands] Received from C-3 (Jess Lv.51) @ ip:127.0.0.1:54521 (version=XB_V3 command=60 flag=00) 0000 | 60 00 10 00 0A 03 8C 10 8C 00 66 00 00 02 B0 20 | ` f @@ -4305,7 +4313,8 @@ I 34886 2025-07-21 23:47:50 - [Commands] Received from C-3 (Jess Lv.51) @ ip:127 I 34886 2025-07-21 23:47:51 - [Commands] Received from C-3 (Jess Lv.51) @ ip:127.0.0.1:54521 (version=XB_V3 command=60 flag=00) 0000 | 60 00 10 00 46 03 00 00 01 00 00 00 8E 10 00 00 | ` F I 34886 2025-07-21 23:47:51 - [Commands] Received from C-3 (Jess Lv.51) @ ip:127.0.0.1:54521 (version=XB_V3 command=60 flag=00) -0000 | 60 00 10 00 E4 03 8E 10 76 00 00 00 AB 01 AB 01 | ` v +0000 | 60 00 14 00 E4 04 8E 10 76 00 00 00 AB 01 AB 01 | ` v +0010 | 00 00 80 BF | I 34886 2025-07-21 23:47:51 - [C-3] E-090 damage incremented by 118; before hit, damage was 0 (cmd) or 0 (ene_st) and HP was 427/427 I 34886 2025-07-21 23:47:51 - [Commands] Received from C-3 (Jess Lv.51) @ ip:127.0.0.1:54521 (version=XB_V3 command=60 flag=00) 0000 | 60 00 10 00 0A 03 8E 10 8E 00 76 00 00 06 90 20 | ` v @@ -4315,7 +4324,8 @@ I 34886 2025-07-21 23:47:52 - [Commands] Received from C-3 (Jess Lv.51) @ ip:127 I 34886 2025-07-21 23:47:53 - [Commands] Received from C-3 (Jess Lv.51) @ ip:127.0.0.1:54521 (version=XB_V3 command=60 flag=00) 0000 | 60 00 10 00 46 03 00 00 01 00 00 00 8E 10 00 00 | ` F I 34886 2025-07-21 23:47:53 - [Commands] Received from C-3 (Jess Lv.51) @ ip:127.0.0.1:54521 (version=XB_V3 command=60 flag=00) -0000 | 60 00 10 00 E4 03 8E 10 76 00 76 00 35 01 AB 01 | ` v v 5 +0000 | 60 00 14 00 E4 04 8E 10 76 00 76 00 35 01 AB 01 | ` v v 5 +0010 | 00 00 80 BF | I 34886 2025-07-21 23:47:53 - [C-3] E-090 damage incremented by 118; before hit, damage was 118 (cmd) or 118 (ene_st) and HP was 309/427 I 34886 2025-07-21 23:47:53 - [Commands] Received from C-3 (Jess Lv.51) @ ip:127.0.0.1:54521 (version=XB_V3 command=60 flag=00) 0000 | 60 00 10 00 0A 03 8E 10 8E 00 EC 00 00 06 90 20 | ` @@ -4325,7 +4335,8 @@ I 34886 2025-07-21 23:47:53 - [Commands] Received from C-3 (Jess Lv.51) @ ip:127 I 34886 2025-07-21 23:47:54 - [Commands] Received from C-3 (Jess Lv.51) @ ip:127.0.0.1:54521 (version=XB_V3 command=60 flag=00) 0000 | 60 00 10 00 46 03 00 00 01 00 00 00 8E 10 00 00 | ` F I 34886 2025-07-21 23:47:54 - [Commands] Received from C-3 (Jess Lv.51) @ ip:127.0.0.1:54521 (version=XB_V3 command=60 flag=00) -0000 | 60 00 10 00 E4 03 8E 10 66 00 EC 00 BF 00 AB 01 | ` f +0000 | 60 00 14 00 E4 04 8E 10 66 00 EC 00 BF 00 AB 01 | ` f +0010 | 00 00 80 BF | I 34886 2025-07-21 23:47:54 - [C-3] E-090 damage incremented by 102; before hit, damage was 236 (cmd) or 236 (ene_st) and HP was 191/427 I 34886 2025-07-21 23:47:54 - [Commands] Received from C-3 (Jess Lv.51) @ ip:127.0.0.1:54521 (version=XB_V3 command=60 flag=00) 0000 | 60 00 10 00 0A 03 8E 10 8E 00 52 01 00 02 B0 20 | ` R