make client functions parameterizable by version

This commit is contained in:
Martin Michelsen
2025-06-01 20:50:48 -07:00
parent 1a6b26e56b
commit bee4c55446
453 changed files with 3636 additions and 21378 deletions
@@ -1,34 +0,0 @@
# WARNING: FlickeringStatusIcons patch starts immediately after this; if the
# size of this is changed, that patch will have to be changed too
# Replacement for handle_0E (do nothing)
ret
# Call table: 2 functions (on_window_created, on_hp_updated)
jmp on_window_created
on_hp_updated:
call rewrite_string
movsx ecx, word [ebp + 0x02BC] # Replaced opcode at callsite
ret
on_window_created:
mov [0x00010C08], eax # prev_desc
push ebp
mov ebp, ebx
call rewrite_string
pop ebp
mov dword [esp + 4], 0x00010C1C # Change first argument to desc_buf
jmp [0x00010C04] # Call original function
rewrite_string:
movsx eax, word [ebp + 0x02BC] # max HP
push eax
movsx eax, word [ebp + 0x0330] # current HP
push eax
push dword [0x00010C08] # prev_desc
push 0x00010C0C # desc_template
push 0x00010C1C # desc_buf
call [0x00010C00] # sprintf
add esp, 0x14
ret
@@ -1,94 +0,0 @@
.meta name="Enemy HP bars"
.meta description="Shows HP bars in\nenemy info windows"
# Original code by Ralf @ GC-Forever and Aleron Ives
# https://www.gc-forever.com/forums/viewtopic.php?t=2050
# https://www.gc-forever.com/forums/viewtopic.php?t=2049
entry_ptr:
reloc0:
.offsetof start
start:
.include WriteCodeBlocksGC
# region @ 8000B650 (108 bytes)
.data 0x8000B650 # address
.data 0x0000006C # size
.data 0x3CA08001 # 8000B650 => lis r5, 0x8001
.data 0x8065B6BC # 8000B654 => lwz r3, [r5 - 0x4944]
.data 0x7FFEFB78 # 8000B658 => mr r30, r31
.data 0xA8DE032C # 8000B65C => lha r6, [r30 + 0x032C]
.data 0x48000010 # 8000B660 => b +0x00000010 /* 8000B670 */
.data 0xA8DE02B8 # 8000B664 => lha r6, [r30 + 0x02B8]
.data 0x3CA08001 # 8000B668 => lis r5, 0x8001
.data 0x9065B6BC # 8000B66C => stw [r5 - 0x4944], r3
.data 0x7C0802A6 # 8000B670 => mflr r0
.data 0x9005B6C0 # 8000B674 => stw [r5 - 0x4940], r0
.data 0x7C651B78 # 8000B678 => mr r5, r3
.data 0xA8FE02B8 # 8000B67C => lha r7, [r30 + 0x02B8]
.data 0x3C808000 # 8000B680 => lis r4, 0x8000
.data 0x6084B6AC # 8000B684 => ori r4, r4, 0xB6AC
.data 0x38640018 # 8000B688 => addi r3, r4, 0x0018
.data 0x4CC63182 # 8000B68C => crxor crb6, crb6, crb6
.data 0x4838BB3D # 8000B690 => bl +0x0038BB3C /* 803971CC */
.data 0x3C808000 # 8000B694 => lis r4, 0x8000
.data 0x6084B6C4 # 8000B698 => ori r4, r4, 0xB6C4
.data 0x7F83E378 # 8000B69C => mr r3, r28
.data 0x8004FFFC # 8000B6A0 => lwz r0, [r4 - 0x0004]
.data 0x7C0803A6 # 8000B6A4 => mtlr r0
.data 0x4E800020 # 8000B6A8 => blr
.data 0x25730A0A # 8000B6AC => .invalid
.data 0x48503A25 # 8000B6B0 => bl +0x00503A24 /* 8050F0D4 */
.data 0x642F2564 # 8000B6B4 => oris r15, r1, 0x2564
.data 0x00000000 # 8000B6B8 => .invalid
# region @ 80261B38 (4 bytes)
.data 0x80261B38 # address
.data 0x00000004 # size
.data 0x4BDA9B19 # 80261B38 => bl -0x002564E8 /* 8000B650 */
# region @ 80261B9C (4 bytes)
.data 0x80261B9C # address
.data 0x00000004 # size
.data 0x4BFE1545 # 80261B9C => bl -0x0001EABC /* 802430E0 */
# region @ 80261CF8 (4 bytes)
.data 0x80261CF8 # address
.data 0x00000004 # size
.data 0x4BDA996D # 80261CF8 => bl -0x00256694 /* 8000B664 */
# region @ 804CB610 (4 bytes)
.data 0x804CB610 # address
.data 0x00000004 # size
.data 0x42960000 # 804CB610 => bc 20, 22, +0x00000000 /* 804CB610 */
# region @ 804CB61C (4 bytes)
.data 0x804CB61C # address
.data 0x00000004 # size
.data 0x42960000 # 804CB61C => bc 20, 22, +0x00000000 /* 804CB61C */
# region @ 804CB628 (4 bytes)
.data 0x804CB628 # address
.data 0x00000004 # size
.data 0x42960000 # 804CB628 => bc 20, 22, +0x00000000 /* 804CB628 */
# region @ 804CB634 (4 bytes)
.data 0x804CB634 # address
.data 0x00000004 # size
.data 0x42960000 # 804CB634 => bc 20, 22, +0x00000000 /* 804CB634 */
# region @ 804CB640 (4 bytes)
.data 0x804CB640 # address
.data 0x00000004 # size
.data 0x42960000 # 804CB640 => bc 20, 22, +0x00000000 /* 804CB640 */
.data 0x804CB670
.data 0x00000004
.data 0x42960000
.data 0x804CB6A0
.data 0x00000004
.data 0x42960000
# region @ 804CB6D0 (4 bytes)
.data 0x804CB6D0 # address
.data 0x00000004 # size
.data 0x42780000 # 804CB6D0 => bc 19, 24, +0x00000000 /* 804CB6D0 */
# region @ 804CB6EC (4 bytes)
.data 0x804CB6EC # address
.data 0x00000004 # size
.data 0xFF00FF15 # 804CB6EC => .invalid FC, 0
# region @ 805CC8C4 (4 bytes)
.data 0x805CC8C4 # address
.data 0x00000004 # size
.data 0x42C00000 # 805CC8C4 => b +0x00000000 /* 805CC8C4 */
# end sentinel
.data 0x00000000 # address
.data 0x00000000 # size
@@ -1,94 +0,0 @@
.meta name="Enemy HP bars"
.meta description="Shows HP bars in\nenemy info windows"
# Original code by Ralf @ GC-Forever and Aleron Ives
# https://www.gc-forever.com/forums/viewtopic.php?t=2050
# https://www.gc-forever.com/forums/viewtopic.php?t=2049
entry_ptr:
reloc0:
.offsetof start
start:
.include WriteCodeBlocksGC
# region @ 8000B650 (108 bytes)
.data 0x8000B650 # address
.data 0x0000006C # size
.data 0x3CA08001 # 8000B650 => lis r5, 0x8001
.data 0x8065B6BC # 8000B654 => lwz r3, [r5 - 0x4944]
.data 0x7FFEFB78 # 8000B658 => mr r30, r31
.data 0xA8DE032C # 8000B65C => lha r6, [r30 + 0x032C]
.data 0x48000010 # 8000B660 => b +0x00000010 /* 8000B670 */
.data 0xA8DE02B8 # 8000B664 => lha r6, [r30 + 0x02B8]
.data 0x3CA08001 # 8000B668 => lis r5, 0x8001
.data 0x9065B6BC # 8000B66C => stw [r5 - 0x4944], r3
.data 0x7C0802A6 # 8000B670 => mflr r0
.data 0x9005B6C0 # 8000B674 => stw [r5 - 0x4940], r0
.data 0x7C651B78 # 8000B678 => mr r5, r3
.data 0xA8FE02B8 # 8000B67C => lha r7, [r30 + 0x02B8]
.data 0x3C808000 # 8000B680 => lis r4, 0x8000
.data 0x6084B6AC # 8000B684 => ori r4, r4, 0xB6AC
.data 0x38640018 # 8000B688 => addi r3, r4, 0x0018
.data 0x4CC63182 # 8000B68C => crxor crb6, crb6, crb6
.data 0x4838BB95 # 8000B690 => bl +0x0038BB94 /* 80397224 */
.data 0x3C808000 # 8000B694 => lis r4, 0x8000
.data 0x6084B6C4 # 8000B698 => ori r4, r4, 0xB6C4
.data 0x7F83E378 # 8000B69C => mr r3, r28
.data 0x8004FFFC # 8000B6A0 => lwz r0, [r4 - 0x0004]
.data 0x7C0803A6 # 8000B6A4 => mtlr r0
.data 0x4E800020 # 8000B6A8 => blr
.data 0x25730A0A # 8000B6AC => .invalid
.data 0x48503A25 # 8000B6B0 => bl +0x00503A24 /* 8050F0D4 */
.data 0x642F2564 # 8000B6B4 => oris r15, r1, 0x2564
.data 0x00000000 # 8000B6B8 => .invalid
# region @ 80261B38 (4 bytes)
.data 0x80261B38 # address
.data 0x00000004 # size
.data 0x4BDA9B19 # 80261B38 => bl -0x002564E8 /* 8000B650 */
# region @ 80261B9C (4 bytes)
.data 0x80261B9C # address
.data 0x00000004 # size
.data 0x4BFE1545 # 80261B9C => bl -0x0001EABC /* 802430E0 */
# region @ 80261CF8 (4 bytes)
.data 0x80261CF8 # address
.data 0x00000004 # size
.data 0x4BDA996D # 80261CF8 => bl -0x00256694 /* 8000B664 */
# region @ 804CBAF0 (4 bytes)
.data 0x804CBAF0 # address
.data 0x00000004 # size
.data 0x42960000 # 804CBAF0 => bc 20, 22, +0x00000000 /* 804CBAF0 */
# region @ 804CBAFC (4 bytes)
.data 0x804CBAFC # address
.data 0x00000004 # size
.data 0x42960000 # 804CBAFC => bc 20, 22, +0x00000000 /* 804CBAFC */
# region @ 804CBB08 (4 bytes)
.data 0x804CBB08 # address
.data 0x00000004 # size
.data 0x42960000 # 804CBB08 => bc 20, 22, +0x00000000 /* 804CBB08 */
# region @ 804CBB14 (4 bytes)
.data 0x804CBB14 # address
.data 0x00000004 # size
.data 0x42960000 # 804CBB14 => bc 20, 22, +0x00000000 /* 804CBB14 */
# region @ 804CBB20 (4 bytes)
.data 0x804CBB20 # address
.data 0x00000004 # size
.data 0x42960000 # 804CBB20 => bc 20, 22, +0x00000000 /* 804CBB20 */
.data 0x804CBB50
.data 0x00000004
.data 0x42960000
.data 0x804CBB80
.data 0x00000004
.data 0x42960000
# region @ 804CBBB0 (4 bytes)
.data 0x804CBBB0 # address
.data 0x00000004 # size
.data 0x42780000 # 804CBBB0 => bc 19, 24, +0x00000000 /* 804CBBB0 */
# region @ 804CBBCC (4 bytes)
.data 0x804CBBCC # address
.data 0x00000004 # size
.data 0xFF00FF15 # 804CBBCC => .invalid FC, 0
# region @ 805D38E4 (4 bytes)
.data 0x805D38E4 # address
.data 0x00000004 # size
.data 0x42C00000 # 805D38E4 => b +0x00000000 /* 805D38E4 */
# end sentinel
.data 0x00000000 # address
.data 0x00000000 # size
@@ -1,94 +0,0 @@
.meta name="Enemy HP bars"
.meta description="Shows HP bars in\nenemy info windows"
# Original code by Ralf @ GC-Forever and Aleron Ives
# https://www.gc-forever.com/forums/viewtopic.php?t=2050
# https://www.gc-forever.com/forums/viewtopic.php?t=2049
entry_ptr:
reloc0:
.offsetof start
start:
.include WriteCodeBlocksGC
# region @ 8000B650 (108 bytes)
.data 0x8000B650 # address
.data 0x0000006C # size
.data 0x3CA08001 # 8000B650 => lis r5, 0x8001
.data 0x8065B6BC # 8000B654 => lwz r3, [r5 - 0x4944]
.data 0x7FFEFB78 # 8000B658 => mr r30, r31
.data 0xA8DE032C # 8000B65C => lha r6, [r30 + 0x032C]
.data 0x48000010 # 8000B660 => b +0x00000010 /* 8000B670 */
.data 0xA8DE02B8 # 8000B664 => lha r6, [r30 + 0x02B8]
.data 0x3CA08001 # 8000B668 => lis r5, 0x8001
.data 0x9065B6BC # 8000B66C => stw [r5 - 0x4944], r3
.data 0x7C0802A6 # 8000B670 => mflr r0
.data 0x9005B6C0 # 8000B674 => stw [r5 - 0x4940], r0
.data 0x7C651B78 # 8000B678 => mr r5, r3
.data 0xA8FE02B8 # 8000B67C => lha r7, [r30 + 0x02B8]
.data 0x3C808000 # 8000B680 => lis r4, 0x8000
.data 0x6084B6AC # 8000B684 => ori r4, r4, 0xB6AC
.data 0x38640018 # 8000B688 => addi r3, r4, 0x0018
.data 0x4CC63182 # 8000B68C => crxor crb6, crb6, crb6
.data 0x4838F295 # 8000B690 => bl +0x0038F294 /* 8039A924 */
.data 0x3C808000 # 8000B694 => lis r4, 0x8000
.data 0x6084B6C4 # 8000B698 => ori r4, r4, 0xB6C4
.data 0x7F83E378 # 8000B69C => mr r3, r28
.data 0x8004FFFC # 8000B6A0 => lwz r0, [r4 - 0x0004]
.data 0x7C0803A6 # 8000B6A4 => mtlr r0
.data 0x4E800020 # 8000B6A8 => blr
.data 0x25730A0A # 8000B6AC => .invalid
.data 0x48503A25 # 8000B6B0 => bl +0x00503A24 /* 8050F0D4 */
.data 0x642F2564 # 8000B6B4 => oris r15, r1, 0x2564
.data 0x00000000 # 8000B6B8 => .invalid
# region @ 80262EF8 (4 bytes)
.data 0x80262EF8 # address
.data 0x00000004 # size
.data 0x4BDA8759 # 80262EF8 => bl -0x002578A8 /* 8000B650 */
# region @ 80262F5C (4 bytes)
.data 0x80262F5C # address
.data 0x00000004 # size
.data 0x4BFE12B1 # 80262F5C => bl -0x0001ED50 /* 8024420C */
# region @ 802630B8 (4 bytes)
.data 0x802630B8 # address
.data 0x00000004 # size
.data 0x4BDA85AD # 802630B8 => bl -0x00257A54 /* 8000B664 */
# region @ 804D0158 (4 bytes)
.data 0x804D0158 # address
.data 0x00000004 # size
.data 0x42960000 # 804D0158 => bc 20, 22, +0x00000000 /* 804D0158 */
# region @ 804D0164 (4 bytes)
.data 0x804D0164 # address
.data 0x00000004 # size
.data 0x42960000 # 804D0164 => bc 20, 22, +0x00000000 /* 804D0164 */
# region @ 804D0170 (4 bytes)
.data 0x804D0170 # address
.data 0x00000004 # size
.data 0x42960000 # 804D0170 => bc 20, 22, +0x00000000 /* 804D0170 */
# region @ 804D017C (4 bytes)
.data 0x804D017C # address
.data 0x00000004 # size
.data 0x42960000 # 804D017C => bc 20, 22, +0x00000000 /* 804D017C */
# region @ 804D0188 (4 bytes)
.data 0x804D0188 # address
.data 0x00000004 # size
.data 0x42960000 # 804D0188 => bc 20, 22, +0x00000000 /* 804D0188 */
.data 0x804D01B8
.data 0x00000004
.data 0x42960000
.data 0x804D01E8
.data 0x00000004
.data 0x42960000
# region @ 804D0218 (4 bytes)
.data 0x804D0218 # address
.data 0x00000004 # size
.data 0x42780000 # 804D0218 => bc 19, 24, +0x00000000 /* 804D0218 */
# region @ 804D0234 (4 bytes)
.data 0x804D0234 # address
.data 0x00000004 # size
.data 0xFF00FF15 # 804D0234 => .invalid FC, 0
# region @ 805DD104 (4 bytes)
.data 0x805DD104 # address
.data 0x00000004 # size
.data 0x42C00000 # 805DD104 => b +0x00000000 /* 805DD104 */
# end sentinel
.data 0x00000000 # address
.data 0x00000000 # size
@@ -1,94 +0,0 @@
.meta name="Enemy HP bars"
.meta description="Shows HP bars in\nenemy info windows"
# Original code by Ralf @ GC-Forever and Aleron Ives
# https://www.gc-forever.com/forums/viewtopic.php?t=2050
# https://www.gc-forever.com/forums/viewtopic.php?t=2049
entry_ptr:
reloc0:
.offsetof start
start:
.include WriteCodeBlocksGC
# region @ 8000B650 (108 bytes)
.data 0x8000B650 # address
.data 0x0000006C # size
.data 0x3CA08001 # 8000B650 => lis r5, 0x8001
.data 0x8065B6BC # 8000B654 => lwz r3, [r5 - 0x4944]
.data 0x7FFEFB78 # 8000B658 => mr r30, r31
.data 0xA8DE032C # 8000B65C => lha r6, [r30 + 0x032C]
.data 0x48000010 # 8000B660 => b +0x00000010 /* 8000B670 */
.data 0xA8DE02B8 # 8000B664 => lha r6, [r30 + 0x02B8]
.data 0x3CA08001 # 8000B668 => lis r5, 0x8001
.data 0x9065B6BC # 8000B66C => stw [r5 - 0x4944], r3
.data 0x7C0802A6 # 8000B670 => mflr r0
.data 0x9005B6C0 # 8000B674 => stw [r5 - 0x4940], r0
.data 0x7C651B78 # 8000B678 => mr r5, r3
.data 0xA8FE02B8 # 8000B67C => lha r7, [r30 + 0x02B8]
.data 0x3C808000 # 8000B680 => lis r4, 0x8000
.data 0x6084B6AC # 8000B684 => ori r4, r4, 0xB6AC
.data 0x38640018 # 8000B688 => addi r3, r4, 0x0018
.data 0x4CC63182 # 8000B68C => crxor crb6, crb6, crb6
.data 0x4838A86D # 8000B690 => bl +0x0038A86C /* 80395EFC */
.data 0x3C808000 # 8000B694 => lis r4, 0x8000
.data 0x6084B6C4 # 8000B698 => ori r4, r4, 0xB6C4
.data 0x7F83E378 # 8000B69C => mr r3, r28
.data 0x8004FFFC # 8000B6A0 => lwz r0, [r4 - 0x0004]
.data 0x7C0803A6 # 8000B6A4 => mtlr r0
.data 0x4E800020 # 8000B6A8 => blr
.data 0x25730A0A # 8000B6AC => .invalid
.data 0x48503A25 # 8000B6B0 => bl +0x00503A24 /* 8050F0D4 */
.data 0x642F2564 # 8000B6B4 => oris r15, r1, 0x2564
.data 0x00000000 # 8000B6B8 => .invalid
# region @ 80261260 (4 bytes)
.data 0x80261260 # address
.data 0x00000004 # size
.data 0x4BDAA3F1 # 80261260 => bl -0x00255C10 /* 8000B650 */
# region @ 802612C4 (4 bytes)
.data 0x802612C4 # address
.data 0x00000004 # size
.data 0x4BFE1541 # 802612C4 => bl -0x0001EAC0 /* 80242804 */
# region @ 80261420 (4 bytes)
.data 0x80261420 # address
.data 0x00000004 # size
.data 0x4BDAA245 # 80261420 => bl -0x00255DBC /* 8000B664 */
# region @ 804CAE40 (4 bytes)
.data 0x804CAE40 # address
.data 0x00000004 # size
.data 0x42960000 # 804CAE40 => bc 20, 22, +0x00000000 /* 804CAE40 */
# region @ 804CAE4C (4 bytes)
.data 0x804CAE4C # address
.data 0x00000004 # size
.data 0x42960000 # 804CAE4C => bc 20, 22, +0x00000000 /* 804CAE4C */
# region @ 804CAE58 (4 bytes)
.data 0x804CAE58 # address
.data 0x00000004 # size
.data 0x42960000 # 804CAE58 => bc 20, 22, +0x00000000 /* 804CAE58 */
# region @ 804CAE64 (4 bytes)
.data 0x804CAE64 # address
.data 0x00000004 # size
.data 0x42960000 # 804CAE64 => bc 20, 22, +0x00000000 /* 804CAE64 */
# region @ 804CAE70 (4 bytes)
.data 0x804CAE70 # address
.data 0x00000004 # size
.data 0x42960000 # 804CAE70 => bc 20, 22, +0x00000000 /* 804CAE70 */
.data 0x804CAEA0
.data 0x00000004
.data 0x42960000
.data 0x804CAED0
.data 0x00000004
.data 0x42960000
# region @ 804CAF00 (4 bytes)
.data 0x804CAF00 # address
.data 0x00000004 # size
.data 0x42780000 # 804CAF00 => bc 19, 24, +0x00000000 /* 804CAF00 */
# region @ 804CAF1C (4 bytes)
.data 0x804CAF1C # address
.data 0x00000004 # size
.data 0xFF00FF15 # 804CAF1C => .invalid FC, 0
# region @ 805CBFBC (4 bytes)
.data 0x805CBFBC # address
.data 0x00000004 # size
.data 0x42C00000 # 805CBFBC => b +0x00000000 /* 805CBFBC */
# end sentinel
.data 0x00000000 # address
.data 0x00000000 # size
@@ -1,94 +0,0 @@
.meta name="Enemy HP bars"
.meta description="Shows HP bars in\nenemy info windows"
# Original code by Ralf @ GC-Forever and Aleron Ives
# https://www.gc-forever.com/forums/viewtopic.php?t=2050
# https://www.gc-forever.com/forums/viewtopic.php?t=2049
entry_ptr:
reloc0:
.offsetof start
start:
.include WriteCodeBlocksGC
# region @ 8000B650 (108 bytes)
.data 0x8000B650 # address
.data 0x0000006C # size
.data 0x3CA08001 # 8000B650 => lis r5, 0x8001
.data 0x8065B6BC # 8000B654 => lwz r3, [r5 - 0x4944]
.data 0x7FFEFB78 # 8000B658 => mr r30, r31
.data 0xA8DE032C # 8000B65C => lha r6, [r30 + 0x032C]
.data 0x48000010 # 8000B660 => b +0x00000010 /* 8000B670 */
.data 0xA8DE02B8 # 8000B664 => lha r6, [r30 + 0x02B8]
.data 0x3CA08001 # 8000B668 => lis r5, 0x8001
.data 0x9065B6BC # 8000B66C => stw [r5 - 0x4944], r3
.data 0x7C0802A6 # 8000B670 => mflr r0
.data 0x9005B6C0 # 8000B674 => stw [r5 - 0x4940], r0
.data 0x7C651B78 # 8000B678 => mr r5, r3
.data 0xA8FE02B8 # 8000B67C => lha r7, [r30 + 0x02B8]
.data 0x3C808000 # 8000B680 => lis r4, 0x8000
.data 0x6084B6AC # 8000B684 => ori r4, r4, 0xB6AC
.data 0x38640018 # 8000B688 => addi r3, r4, 0x0018
.data 0x4CC63182 # 8000B68C => crxor crb6, crb6, crb6
.data 0x4838D275 # 8000B690 => bl +0x0038D274 /* 80398904 */
.data 0x3C808000 # 8000B694 => lis r4, 0x8000
.data 0x6084B6C4 # 8000B698 => ori r4, r4, 0xB6C4
.data 0x7F83E378 # 8000B69C => mr r3, r28
.data 0x8004FFFC # 8000B6A0 => lwz r0, [r4 - 0x0004]
.data 0x7C0803A6 # 8000B6A4 => mtlr r0
.data 0x4E800020 # 8000B6A8 => blr
.data 0x25730A0A # 8000B6AC => .invalid
.data 0x48503A25 # 8000B6B0 => bl +0x00503A24 /* 8050F0D4 */
.data 0x642F2564 # 8000B6B4 => oris r15, r1, 0x2564
.data 0x00000000 # 8000B6B8 => .invalid
# region @ 80261E38 (4 bytes)
.data 0x80261E38 # address
.data 0x00000004 # size
.data 0x4BDA9819 # 80261E38 => bl -0x002567E8 /* 8000B650 */
# region @ 80261E9C (4 bytes)
.data 0x80261E9C # address
.data 0x00000004 # size
.data 0x4BFE1349 # 80261E9C => bl -0x0001ECB8 /* 802431E4 */
# region @ 80261FF8 (4 bytes)
.data 0x80261FF8 # address
.data 0x00000004 # size
.data 0x4BDA966D # 80261FF8 => bl -0x00256994 /* 8000B664 */
# region @ 804CE590 (4 bytes)
.data 0x804CE590 # address
.data 0x00000004 # size
.data 0x42960000 # 804CE590 => bc 20, 22, +0x00000000 /* 804CE590 */
# region @ 804CE59C (4 bytes)
.data 0x804CE59C # address
.data 0x00000004 # size
.data 0x42960000 # 804CE59C => bc 20, 22, +0x00000000 /* 804CE59C */
# region @ 804CE5A8 (4 bytes)
.data 0x804CE5A8 # address
.data 0x00000004 # size
.data 0x42960000 # 804CE5A8 => bc 20, 22, +0x00000000 /* 804CE5A8 */
# region @ 804CE5B4 (4 bytes)
.data 0x804CE5B4 # address
.data 0x00000004 # size
.data 0x42960000 # 804CE5B4 => bc 20, 22, +0x00000000 /* 804CE5B4 */
# region @ 804CE5C0 (4 bytes)
.data 0x804CE5C0 # address
.data 0x00000004 # size
.data 0x42960000 # 804CE5C0 => bc 20, 22, +0x00000000 /* 804CE5C0 */
.data 0x804CE5F0
.data 0x00000004
.data 0x42960000
.data 0x804CE620
.data 0x00000004
.data 0x42960000
# region @ 804CE650 (4 bytes)
.data 0x804CE650 # address
.data 0x00000004 # size
.data 0x42780000 # 804CE650 => bc 19, 24, +0x00000000 /* 804CE650 */
# region @ 804CE66C (4 bytes)
.data 0x804CE66C # address
.data 0x00000004 # size
.data 0xFF00FF15 # 804CE66C => .invalid FC, 0
# region @ 805D65BC (4 bytes)
.data 0x805D65BC # address
.data 0x00000004 # size
.data 0x42C00000 # 805D65BC => b +0x00000000 /* 805D65BC */
# end sentinel
.data 0x00000000 # address
.data 0x00000000 # size
@@ -1,94 +0,0 @@
.meta name="Enemy HP bars"
.meta description="Shows HP bars in\nenemy info windows"
# Original code by Ralf @ GC-Forever and Aleron Ives
# https://www.gc-forever.com/forums/viewtopic.php?t=2050
# https://www.gc-forever.com/forums/viewtopic.php?t=2049
entry_ptr:
reloc0:
.offsetof start
start:
.include WriteCodeBlocksGC
# region @ 8000B650 (108 bytes)
.data 0x8000B650 # address
.data 0x0000006C # size
.data 0x3CA08001 # 8000B650 => lis r5, 0x8001
.data 0x8065B6BC # 8000B654 => lwz r3, [r5 - 0x4944]
.data 0x7FFEFB78 # 8000B658 => mr r30, r31
.data 0xA8DE032C # 8000B65C => lha r6, [r30 + 0x032C]
.data 0x48000010 # 8000B660 => b +0x00000010 /* 8000B670 */
.data 0xA8DE02B8 # 8000B664 => lha r6, [r30 + 0x02B8]
.data 0x3CA08001 # 8000B668 => lis r5, 0x8001
.data 0x9065B6BC # 8000B66C => stw [r5 - 0x4944], r3
.data 0x7C0802A6 # 8000B670 => mflr r0
.data 0x9005B6C0 # 8000B674 => stw [r5 - 0x4940], r0
.data 0x7C651B78 # 8000B678 => mr r5, r3
.data 0xA8FE02B8 # 8000B67C => lha r7, [r30 + 0x02B8]
.data 0x3C808000 # 8000B680 => lis r4, 0x8000
.data 0x6084B6AC # 8000B684 => ori r4, r4, 0xB6AC
.data 0x38640018 # 8000B688 => addi r3, r4, 0x0018
.data 0x4CC63182 # 8000B68C => crxor crb6, crb6, crb6
.data 0x4838F115 # 8000B690 => bl +0x0038F114 /* 8039A7A4 */
.data 0x3C808000 # 8000B694 => lis r4, 0x8000
.data 0x6084B6C4 # 8000B698 => ori r4, r4, 0xB6C4
.data 0x7F83E378 # 8000B69C => mr r3, r28
.data 0x8004FFFC # 8000B6A0 => lwz r0, [r4 - 0x0004]
.data 0x7C0803A6 # 8000B6A4 => mtlr r0
.data 0x4E800020 # 8000B6A8 => blr
.data 0x25730A0A # 8000B6AC => .invalid
.data 0x48503A25 # 8000B6B0 => bl +0x00503A24 /* 8050F0D4 */
.data 0x642F2564 # 8000B6B4 => oris r15, r1, 0x2564
.data 0x00000000 # 8000B6B8 => .invalid
# region @ 80262E80 (4 bytes)
.data 0x80262E80 # address
.data 0x00000004 # size
.data 0x4BDA87D1 # 80262E80 => bl -0x00257830 /* 8000B650 */
# region @ 80262EE4 (4 bytes)
.data 0x80262EE4 # address
.data 0x00000004 # size
.data 0x4BFE0665 # 80262EE4 => bl -0x0001F99C /* 80243548 */
# region @ 80263040 (4 bytes)
.data 0x80263040 # address
.data 0x00000004 # size
.data 0x4BDA8625 # 80263040 => bl -0x002579DC /* 8000B664 */
# region @ 804D0AE0 (4 bytes)
.data 0x804D0AE0 # address
.data 0x00000004 # size
.data 0x42960000 # 804D0AE0 => bc 20, 22, +0x00000000 /* 804D0AE0 */
# region @ 804D0AEC (4 bytes)
.data 0x804D0AEC # address
.data 0x00000004 # size
.data 0x42960000 # 804D0AEC => bc 20, 22, +0x00000000 /* 804D0AEC */
# region @ 804D0AF8 (4 bytes)
.data 0x804D0AF8 # address
.data 0x00000004 # size
.data 0x42960000 # 804D0AF8 => bc 20, 22, +0x00000000 /* 804D0AF8 */
# region @ 804D0B04 (4 bytes)
.data 0x804D0B04 # address
.data 0x00000004 # size
.data 0x42960000 # 804D0B04 => bc 20, 22, +0x00000000 /* 804D0B04 */
# region @ 804D0B10 (4 bytes)
.data 0x804D0B10 # address
.data 0x00000004 # size
.data 0x42960000 # 804D0B10 => bc 20, 22, +0x00000000 /* 804D0B10 */
.data 0x804D0B40
.data 0x00000004
.data 0x42960000
.data 0x804D0B70
.data 0x00000004
.data 0x42960000
# region @ 804D0BA0 (4 bytes)
.data 0x804D0BA0 # address
.data 0x00000004 # size
.data 0x42780000 # 804D0BA0 => bc 19, 24, +0x00000000 /* 804D0BA0 */
# region @ 804D0BBC (4 bytes)
.data 0x804D0BBC # address
.data 0x00000004 # size
.data 0xFF00FF15 # 804D0BBC => .invalid FC, 0
# region @ 805DDA5C (4 bytes)
.data 0x805DDA5C # address
.data 0x00000004 # size
.data 0x42C00000 # 805DDA5C => b +0x00000000 /* 805DDA5C */
# end sentinel
.data 0x00000000 # address
.data 0x00000000 # size
@@ -1,94 +0,0 @@
.meta name="Enemy HP bars"
.meta description="Shows HP bars in\nenemy info windows"
# Original code by Ralf @ GC-Forever and Aleron Ives
# https://www.gc-forever.com/forums/viewtopic.php?t=2050
# https://www.gc-forever.com/forums/viewtopic.php?t=2049
entry_ptr:
reloc0:
.offsetof start
start:
.include WriteCodeBlocksGC
# region @ 8000B650 (108 bytes)
.data 0x8000B650 # address
.data 0x0000006C # size
.data 0x3CA08001 # 8000B650 => lis r5, 0x8001
.data 0x8065B6BC # 8000B654 => lwz r3, [r5 - 0x4944]
.data 0x7FFEFB78 # 8000B658 => mr r30, r31
.data 0xA8DE032C # 8000B65C => lha r6, [r30 + 0x032C]
.data 0x48000010 # 8000B660 => b +0x00000010 /* 8000B670 */
.data 0xA8DE02B8 # 8000B664 => lha r6, [r30 + 0x02B8]
.data 0x3CA08001 # 8000B668 => lis r5, 0x8001
.data 0x9065B6BC # 8000B66C => stw [r5 - 0x4944], r3
.data 0x7C0802A6 # 8000B670 => mflr r0
.data 0x9005B6C0 # 8000B674 => stw [r5 - 0x4940], r0
.data 0x7C651B78 # 8000B678 => mr r5, r3
.data 0xA8FE02B8 # 8000B67C => lha r7, [r30 + 0x02B8]
.data 0x3C808000 # 8000B680 => lis r4, 0x8000
.data 0x6084B6AC # 8000B684 => ori r4, r4, 0xB6AC
.data 0x38640018 # 8000B688 => addi r3, r4, 0x0018
.data 0x4CC63182 # 8000B68C => crxor crb6, crb6, crb6
.data 0x4838EEC5 # 8000B690 => bl +0x0038EEC4 /* 8039A554 */
.data 0x3C808000 # 8000B694 => lis r4, 0x8000
.data 0x6084B6C4 # 8000B698 => ori r4, r4, 0xB6C4
.data 0x7F83E378 # 8000B69C => mr r3, r28
.data 0x8004FFFC # 8000B6A0 => lwz r0, [r4 - 0x0004]
.data 0x7C0803A6 # 8000B6A4 => mtlr r0
.data 0x4E800020 # 8000B6A8 => blr
.data 0x25730A0A # 8000B6AC => .invalid
.data 0x48503A25 # 8000B6B0 => bl +0x00503A24 /* 8050F0D4 */
.data 0x642F2564 # 8000B6B4 => oris r15, r1, 0x2564
.data 0x00000000 # 8000B6B8 => .invalid
# region @ 80262C34 (4 bytes)
.data 0x80262C34 # address
.data 0x00000004 # size
.data 0x4BDA8A1D # 80262C34 => bl -0x002575E4 /* 8000B650 */
# region @ 80262C98 (4 bytes)
.data 0x80262C98 # address
.data 0x00000004 # size
.data 0x4BFE1241 # 80262C98 => bl -0x0001EDC0 /* 80243ED8 */
# region @ 80262DF4 (4 bytes)
.data 0x80262DF4 # address
.data 0x00000004 # size
.data 0x4BDA8871 # 80262DF4 => bl -0x00257790 /* 8000B664 */
# region @ 804D0880 (4 bytes)
.data 0x804D0880 # address
.data 0x00000004 # size
.data 0x42960000 # 804D0880 => bc 20, 22, +0x00000000 /* 804D0880 */
# region @ 804D088C (4 bytes)
.data 0x804D088C # address
.data 0x00000004 # size
.data 0x42960000 # 804D088C => bc 20, 22, +0x00000000 /* 804D088C */
# region @ 804D0898 (4 bytes)
.data 0x804D0898 # address
.data 0x00000004 # size
.data 0x42960000 # 804D0898 => bc 20, 22, +0x00000000 /* 804D0898 */
# region @ 804D08A4 (4 bytes)
.data 0x804D08A4 # address
.data 0x00000004 # size
.data 0x42960000 # 804D08A4 => bc 20, 22, +0x00000000 /* 804D08A4 */
# region @ 804D08B0 (4 bytes)
.data 0x804D08B0 # address
.data 0x00000004 # size
.data 0x42960000 # 804D08B0 => bc 20, 22, +0x00000000 /* 804D08B0 */
.data 0x804D08E0
.data 0x00000004
.data 0x42960000
.data 0x804D0910
.data 0x00000004
.data 0x42960000
# region @ 804D0940 (4 bytes)
.data 0x804D0940 # address
.data 0x00000004 # size
.data 0x42780000 # 804D0940 => bc 19, 24, +0x00000000 /* 804D0940 */
# region @ 804D095C (4 bytes)
.data 0x804D095C # address
.data 0x00000004 # size
.data 0xFF00FF15 # 804D095C => .invalid FC, 0
# region @ 805DD7FC (4 bytes)
.data 0x805DD7FC # address
.data 0x00000004 # size
.data 0x42C00000 # 805DD7FC => b +0x00000000 /* 805DD7FC */
# end sentinel
.data 0x00000000 # address
.data 0x00000000 # size
@@ -1,94 +0,0 @@
.meta name="Enemy HP bars"
.meta description="Shows HP bars in\nenemy info windows"
# Original code by Ralf @ GC-Forever and Aleron Ives
# https://www.gc-forever.com/forums/viewtopic.php?t=2050
# https://www.gc-forever.com/forums/viewtopic.php?t=2049
entry_ptr:
reloc0:
.offsetof start
start:
.include WriteCodeBlocksGC
# region @ 8000B650 (108 bytes)
.data 0x8000B650 # address
.data 0x0000006C # size
.data 0x3CA08001 # 8000B650 => lis r5, 0x8001
.data 0x8065B6BC # 8000B654 => lwz r3, [r5 - 0x4944]
.data 0x7FFEFB78 # 8000B658 => mr r30, r31
.data 0xA8DE032C # 8000B65C => lha r6, [r30 + 0x032C]
.data 0x48000010 # 8000B660 => b +0x00000010 /* 8000B670 */
.data 0xA8DE02B8 # 8000B664 => lha r6, [r30 + 0x02B8]
.data 0x3CA08001 # 8000B668 => lis r5, 0x8001
.data 0x9065B6BC # 8000B66C => stw [r5 - 0x4944], r3
.data 0x7C0802A6 # 8000B670 => mflr r0
.data 0x9005B6C0 # 8000B674 => stw [r5 - 0x4940], r0
.data 0x7C651B78 # 8000B678 => mr r5, r3
.data 0xA8FE02B8 # 8000B67C => lha r7, [r30 + 0x02B8]
.data 0x3C808000 # 8000B680 => lis r4, 0x8000
.data 0x6084B6AC # 8000B684 => ori r4, r4, 0xB6AC
.data 0x38640018 # 8000B688 => addi r3, r4, 0x0018
.data 0x4CC63182 # 8000B68C => crxor crb6, crb6, crb6
.data 0x4838DD85 # 8000B690 => bl +0x0038DD84 /* 80399414 */
.data 0x3C808000 # 8000B694 => lis r4, 0x8000
.data 0x6084B6C4 # 8000B698 => ori r4, r4, 0xB6C4
.data 0x7F83E378 # 8000B69C => mr r3, r28
.data 0x8004FFFC # 8000B6A0 => lwz r0, [r4 - 0x0004]
.data 0x7C0803A6 # 8000B6A4 => mtlr r0
.data 0x4E800020 # 8000B6A8 => blr
.data 0x25730A0A # 8000B6AC => .invalid
.data 0x48503A25 # 8000B6B0 => bl +0x00503A24 /* 8050F0D4 */
.data 0x642F2564 # 8000B6B4 => oris r15, r1, 0x2564
.data 0x00000000 # 8000B6B8 => .invalid
# region @ 80262740 (4 bytes)
.data 0x80262740 # address
.data 0x00000004 # size
.data 0x4BDA8F11 # 80262740 => bl -0x002570F0 /* 8000B650 */
# region @ 802627A4 (4 bytes)
.data 0x802627A4 # address
.data 0x00000004 # size
.data 0x4BFE12B1 # 802627A4 => bl -0x0001ED50 /* 80243A54 */
# region @ 80262900 (4 bytes)
.data 0x80262900 # address
.data 0x00000004 # size
.data 0x4BDA8D65 # 80262900 => bl -0x0025729C /* 8000B664 */
# region @ 804D0548 (4 bytes)
.data 0x804D0548 # address
.data 0x00000004 # size
.data 0x42960000 # 804D0548 => bc 20, 22, +0x00000000 /* 804D0548 */
# region @ 804D0554 (4 bytes)
.data 0x804D0554 # address
.data 0x00000004 # size
.data 0x42960000 # 804D0554 => bc 20, 22, +0x00000000 /* 804D0554 */
# region @ 804D0560 (4 bytes)
.data 0x804D0560 # address
.data 0x00000004 # size
.data 0x42960000 # 804D0560 => bc 20, 22, +0x00000000 /* 804D0560 */
# region @ 804D056C (4 bytes)
.data 0x804D056C # address
.data 0x00000004 # size
.data 0x42960000 # 804D056C => bc 20, 22, +0x00000000 /* 804D056C */
# region @ 804D0578 (4 bytes)
.data 0x804D0578 # address
.data 0x00000004 # size
.data 0x42960000 # 804D0578 => bc 20, 22, +0x00000000 /* 804D0578 */
.data 0x804D05A8
.data 0x00000004
.data 0x42960000
.data 0x804D05D8
.data 0x00000004
.data 0x42960000
# region @ 804D0608 (4 bytes)
.data 0x804D0608 # address
.data 0x00000004 # size
.data 0x42780000 # 804D0608 => bc 19, 24, +0x00000000 /* 804D0608 */
# region @ 804D0624 (4 bytes)
.data 0x804D0624 # address
.data 0x00000004 # size
.data 0xFF00FF15 # 804D0624 => .invalid FC, 0
# region @ 805D9344 (4 bytes)
.data 0x805D9344 # address
.data 0x00000004 # size
.data 0x42C00000 # 805D9344 => b +0x00000000 /* 805D9344 */
# end sentinel
.data 0x00000000 # address
.data 0x00000000 # size
@@ -0,0 +1,103 @@
.meta name="Enemy HP bars"
.meta description="Shows HP bars in\nenemy info windows"
# Original code by Ralf @ GC-Forever and Aleron Ives
# https://www.gc-forever.com/forums/viewtopic.php?t=2050
# https://www.gc-forever.com/forums/viewtopic.php?t=2049
.versions 3OE0 3OE1 3OE2 3OJ2 3OJ3 3OJ4 3OJ5 3OP0
entry_ptr:
reloc0:
.offsetof start
start:
.include WriteCodeBlocksGC
.data 0x8000B650
.data 0x0000006C
.address 0x8000B650
hook1:
lis r5, 0x8001
lwz r3, [r5 - 0x4944]
mr r30, r31
lha r6, [r30 + 0x032C]
b +0x10
hook2:
lha r6, [r30 + 0x02B8]
lis r5, 0x8001
stw [r5 - 0x4944], r3
mflr r0
stw [r5 - 0x4940], r0
mr r5, r3
lha r7, [r30 + 0x02B8]
lis r4, 0x8000
ori r4, r4, 0xB6AC
addi r3, r4, 0x0018
crxor crb6, crb6, crb6
.data <VERS 0x4838BB3D 0x4838BB95 0x4838F295 0x4838A86D 0x4838D275 0x4838F115 0x4838EEC5 0x4838DD85>
lis r4, 0x8000
ori r4, r4, 0xB6C4
mr r3, r28
lwz r0, [r4 - 0x0004]
mtlr r0
blr
.data 0x25730A0A
.data 0x48503A25
.data 0x642F2564
.data 0x00000000
.data <VERS 0x80261B38 0x80261B38 0x80262EF8 0x80261260 0x80261E38 0x80262E80 0x80262C34 0x80262740>
.data 0x00000004
.address <VERS 0x80261B38 0x80261B38 0x80262EF8 0x80261260 0x80261E38 0x80262E80 0x80262C34 0x80262740>
bl hook1
.data <VERS 0x80261B9C 0x80261B9C 0x80262F5C 0x802612C4 0x80261E9C 0x80262EE4 0x80262C98 0x802627A4>
.data 0x00000004
.data <VERS 0x4BFE1545 0x4BFE1545 0x4BFE12B1 0x4BFE1541 0x4BFE1349 0x4BFE0665 0x4BFE1241 0x4BFE12B1>
.data <VERS 0x80261CF8 0x80261CF8 0x802630B8 0x80261420 0x80261FF8 0x80263040 0x80262DF4 0x80262900>
.data 0x00000004
.address <VERS 0x80261CF8 0x80261CF8 0x802630B8 0x80261420 0x80261FF8 0x80263040 0x80262DF4 0x80262900>
bl hook2
.data <VERS 0x804CB610 0x804CBAF0 0x804D0158 0x804CAE40 0x804CE590 0x804D0AE0 0x804D0880 0x804D0548>
.data 0x00000004
.data 0x42960000
.data <VERS 0x804CB61C 0x804CBAFC 0x804D0164 0x804CAE4C 0x804CE59C 0x804D0AEC 0x804D088C 0x804D0554>
.data 0x00000004
.data 0x42960000
.data <VERS 0x804CB628 0x804CBB08 0x804D0170 0x804CAE58 0x804CE5A8 0x804D0AF8 0x804D0898 0x804D0560>
.data 0x00000004
.data 0x42960000
.data <VERS 0x804CB634 0x804CBB14 0x804D017C 0x804CAE64 0x804CE5B4 0x804D0B04 0x804D08A4 0x804D056C>
.data 0x00000004
.data 0x42960000
.data <VERS 0x804CB640 0x804CBB20 0x804D0188 0x804CAE70 0x804CE5C0 0x804D0B10 0x804D08B0 0x804D0578>
.data 0x00000004
.data 0x42960000
.data <VERS 0x804CB670 0x804CBB50 0x804D01B8 0x804CAEA0 0x804CE5F0 0x804D0B40 0x804D08E0 0x804D05A8>
.data 0x00000004
.data 0x42960000
.data <VERS 0x804CB6A0 0x804CBB80 0x804D01E8 0x804CAED0 0x804CE620 0x804D0B70 0x804D0910 0x804D05D8>
.data 0x00000004
.data 0x42960000
.data <VERS 0x804CB6D0 0x804CBBB0 0x804D0218 0x804CAF00 0x804CE650 0x804D0BA0 0x804D0940 0x804D0608>
.data 0x00000004
.data 0x42780000
.data <VERS 0x804CB6EC 0x804CBBCC 0x804D0234 0x804CAF1C 0x804CE66C 0x804D0BBC 0x804D095C 0x804D0624>
.data 0x00000004
.data 0xFF00FF15
.data <VERS 0x805CC8C4 0x805D38E4 0x805DD104 0x805CBFBC 0x805D65BC 0x805DDA5C 0x805DD7FC 0x805D9344>
.data 0x00000004
.data 0x42C00000
.data 0x00000000
.data 0x00000000
@@ -1,69 +0,0 @@
.meta name="Enemy HP bars"
.meta description="Shows HP bars in\nenemy info windows"
# Original code by Ralf @ GC-Forever and Aleron Ives
# https://www.gc-forever.com/forums/viewtopic.php?t=2050
# https://www.gc-forever.com/forums/viewtopic.php?t=2049
# Xbox port by fuzziqersoftware
entry_ptr:
reloc0:
.offsetof start
start:
.include WriteCodeBlocksXB
.data 0x0026B063
.data 0x00000001
.binary C0
.data 0x0026B06C
.data 0x00000001
.binary FA
.data 0x0026B266
.data 0x00000004
.binary 836004FD
.data 0x0054A92C
.data 0x00000004
.data 0x42960000
.data 0x0054A95C
.data 0x00000004
.data 0x42960000
.data 0x0054A98C
.data 0x00000004
.data 0x42960000
.data 0x0054A9BC
.data 0x00000004
.data 0x42960000
.data 0x0054A9EC
.data 0x00000004
.data 0x42780000
.data 0x0054AA08
.data 0x00000004
.data 0xFF00FF15
.data 0x00010C00
.deltaof str_data_start, str_data_end
str_data_start:
.data 0x00318308 # sprintf
.data 0x00264E80 # Original function for on_window_created callsite
.data 0x00000000
.binary "%s\n\nHP:%d/%d"
.data 0x00000000
.data 0x00000000
str_data_end:
.data 0x002DB050
.deltaof new_code_start, new_code_end
new_code_start:
.include EnemyHPBars-TextHandlerXB
new_code_end:
.data 0x0026B241
.data 0x00000007
nop
nop
.binary E80BFE0600 # call 002DB053 (on_hp_updated)
.data 0x0026B028
.data 0x00000005
.binary E824000700 # call 002DB051 (on_window_created)
.data 0x00000000
.data 0x00000000
@@ -1,69 +0,0 @@
.meta name="Enemy HP bars"
.meta description="Shows HP bars in\nenemy info windows"
# Original code by Ralf @ GC-Forever and Aleron Ives
# https://www.gc-forever.com/forums/viewtopic.php?t=2050
# https://www.gc-forever.com/forums/viewtopic.php?t=2049
# Xbox port by fuzziqersoftware
entry_ptr:
reloc0:
.offsetof start
start:
.include WriteCodeBlocksXB
.data 0x0026B193
.data 0x00000001
.binary C0
.data 0x0026B19C
.data 0x00000001
.binary FA
.data 0x0026B396
.data 0x00000004
.binary 836004FD
.data 0x0054A1CC
.data 0x00000004
.data 0x42960000
.data 0x0054A1FC
.data 0x00000004
.data 0x42960000
.data 0x0054A22C
.data 0x00000004
.data 0x42960000
.data 0x0054A25C
.data 0x00000004
.data 0x42960000
.data 0x0054A28C
.data 0x00000004
.data 0x42780000
.data 0x0054A2A8
.data 0x00000004
.data 0xFF00FF15
.data 0x00010C00
.deltaof str_data_start, str_data_end
str_data_start:
.data 0x00317D7A # sprintf
.data 0x00264F80 # Original function for on_window_created callsite
.data 0x00000000
.binary "%s\n\nHP:%d/%d"
.data 0x00000000
.data 0x00000000
str_data_end:
.data 0x002DB550
.deltaof new_code_start, new_code_end
new_code_start:
.include EnemyHPBars-TextHandlerXB
new_code_end:
.data 0x0026B371
.data 0x00000007
nop
nop
.binary E8DB010700 # call 002DB553 (on_hp_updated)
.data 0x0026B158
.data 0x00000005
.binary E8F4030700 # call 002DB551 (on_window_created)
.data 0x00000000
.data 0x00000000
@@ -1,69 +0,0 @@
.meta name="Enemy HP bars"
.meta description="Shows HP bars in\nenemy info windows"
# Original code by Ralf @ GC-Forever and Aleron Ives
# https://www.gc-forever.com/forums/viewtopic.php?t=2050
# https://www.gc-forever.com/forums/viewtopic.php?t=2049
# Xbox port by fuzziqersoftware
entry_ptr:
reloc0:
.offsetof start
start:
.include WriteCodeBlocksXB
.data 0x0026ABA3
.data 0x00000001
.binary C0
.data 0x0026ABAC
.data 0x00000001
.binary FA
.data 0x0026ADA6
.data 0x00000004
.binary 836004FD
.data 0x00545334
.data 0x00000004
.data 0x42960000
.data 0x00545364
.data 0x00000004
.data 0x42960000
.data 0x00545394
.data 0x00000004
.data 0x42960000
.data 0x005453C4
.data 0x00000004
.data 0x42960000
.data 0x005453F4
.data 0x00000004
.data 0x42780000
.data 0x00545410
.data 0x00000004
.data 0xFF00FF15
.data 0x00010C00
.deltaof str_data_start, str_data_end
str_data_start:
.data 0x00313B22 # sprintf
.data 0x002649C0 # Original function for on_window_created callsite
.data 0x00000000
.binary "%s\n\nHP:%d/%d"
.data 0x00000000
.data 0x00000000
str_data_end:
.data 0x002D90E0
.deltaof new_code_start, new_code_end
new_code_start:
.include EnemyHPBars-TextHandlerXB
new_code_end:
.data 0x0026AD81
.data 0x00000007
nop
nop
.binary E85BE30600 # call 002D90E3 (on_hp_updated)
.data 0x0026AB68
.data 0x00000005
.binary E874E50600 # call 002D90E1 (on_window_created)
.data 0x00000000
.data 0x00000000
@@ -1,69 +0,0 @@
.meta name="Enemy HP bars"
.meta description="Shows HP bars in\nenemy info windows"
# Original code by Ralf @ GC-Forever and Aleron Ives
# https://www.gc-forever.com/forums/viewtopic.php?t=2050
# https://www.gc-forever.com/forums/viewtopic.php?t=2049
# Xbox port by fuzziqersoftware
entry_ptr:
reloc0:
.offsetof start
start:
.include WriteCodeBlocksXB
.data 0x0026AF13
.data 0x00000001
.binary C0
.data 0x0026AF1C
.data 0x00000001
.binary FA
.data 0x0026B116
.data 0x00000004
.binary 836004FD
.data 0x005459C4
.data 0x00000004
.data 0x42960000
.data 0x005459F4
.data 0x00000004
.data 0x42960000
.data 0x00545A24
.data 0x00000004
.data 0x42960000
.data 0x00545A54
.data 0x00000004
.data 0x42960000
.data 0x00545A84
.data 0x00000004
.data 0x42780000
.data 0x00545AA0
.data 0x00000004
.data 0xFF00FF15
.data 0x00010C00
.deltaof str_data_start, str_data_end
str_data_start:
.data 0x00314722 # sprintf
.data 0x00264D80 # Original function for on_window_created callsite
.data 0x00000000
.binary "%s\n\nHP:%d/%d"
.data 0x00000000
.data 0x00000000
str_data_end:
.data 0x002D9CB0
.deltaof new_code_start, new_code_end
new_code_start:
.include EnemyHPBars-TextHandlerXB
new_code_end:
.data 0x0026B0F1
.data 0x00000007
nop
nop
.binary E8BBEB0600 # call 002D9CB3 (on_hp_updated)
.data 0x0026AED8
.data 0x00000005
.binary E8D4ED0600 # call 002D9CB1 (on_window_created)
.data 0x00000000
.data 0x00000000
@@ -1,69 +0,0 @@
.meta name="Enemy HP bars"
.meta description="Shows HP bars in\nenemy info windows"
# Original code by Ralf @ GC-Forever and Aleron Ives
# https://www.gc-forever.com/forums/viewtopic.php?t=2050
# https://www.gc-forever.com/forums/viewtopic.php?t=2049
# Xbox port by fuzziqersoftware
entry_ptr:
reloc0:
.offsetof start
start:
.include WriteCodeBlocksXB
.data 0x0026B2F3
.data 0x00000001
.binary C0
.data 0x0026B2FC
.data 0x00000001
.binary FA
.data 0x0026B4F6
.data 0x00000004
.binary 836004FD
.data 0x0054D4AC
.data 0x00000004
.data 0x42960000
.data 0x0054D4DC
.data 0x00000004
.data 0x42960000
.data 0x0054D50C
.data 0x00000004
.data 0x42960000
.data 0x0054D53C
.data 0x00000004
.data 0x42960000
.data 0x0054D56C
.data 0x00000004
.data 0x42780000
.data 0x0054D588
.data 0x00000004
.data 0xFF00FF15
.data 0x00010C00
.deltaof str_data_start, str_data_end
str_data_start:
.data 0x00317D7A # sprintf
.data 0x00265130 # Original function for on_window_created callsite
.data 0x00000000
.binary "%s\n\nHP:%d/%d"
.data 0x00000000
.data 0x00000000
str_data_end:
.data 0x002DB580
.deltaof new_code_start, new_code_end
new_code_start:
.include EnemyHPBars-TextHandlerXB
new_code_end:
.data 0x0026B4D1
.data 0x00000007
nop
nop
.binary E8AB000700 # call 002DB583 (on_hp_updated)
.data 0x0026B2B8
.data 0x00000005
.binary E8C4020700 # call 002DB581 (on_window_created)
.data 0x00000000
.data 0x00000000
@@ -1,69 +0,0 @@
.meta name="Enemy HP bars"
.meta description="Shows HP bars in\nenemy info windows"
# Original code by Ralf @ GC-Forever and Aleron Ives
# https://www.gc-forever.com/forums/viewtopic.php?t=2050
# https://www.gc-forever.com/forums/viewtopic.php?t=2049
# Xbox port by fuzziqersoftware
entry_ptr:
reloc0:
.offsetof start
start:
.include WriteCodeBlocksXB
.data 0x0026B083
.data 0x00000001
.binary C0
.data 0x0026B08C
.data 0x00000001
.binary FA
.data 0x0026B286
.data 0x00000004
.binary 836004FD
.data 0x0054A92C
.data 0x00000004
.data 0x42960000
.data 0x0054A95C
.data 0x00000004
.data 0x42960000
.data 0x0054A98C
.data 0x00000004
.data 0x42960000
.data 0x0054A9BC
.data 0x00000004
.data 0x42960000
.data 0x0054A9EC
.data 0x00000004
.data 0x42780000
.data 0x0054AA08
.data 0x00000004
.data 0xFF00FF15
.data 0x00010C00
.deltaof str_data_start, str_data_end
str_data_start:
.data 0x00318338 # sprintf
.data 0x00264EA0 # Original function for on_window_created callsite
.data 0x00000000
.binary "%s\n\nHP:%d/%d"
.data 0x00000000
.data 0x00000000
str_data_end:
.data 0x002DB080
.deltaof new_code_start, new_code_end
new_code_start:
.include EnemyHPBars-TextHandlerXB
new_code_end:
.data 0x0026B261
.data 0x00000007
nop
nop
.binary E81BFE0600 # call 002DB083 (on_hp_updated)
.data 0x0026B048
.data 0x00000005
.binary E834000700 # call 002DB081 (on_window_created)
.data 0x00000000
.data 0x00000000
@@ -1,69 +0,0 @@
.meta name="Enemy HP bars"
.meta description="Shows HP bars in\nenemy info windows"
# Original code by Ralf @ GC-Forever and Aleron Ives
# https://www.gc-forever.com/forums/viewtopic.php?t=2050
# https://www.gc-forever.com/forums/viewtopic.php?t=2049
# Xbox port by fuzziqersoftware
entry_ptr:
reloc0:
.offsetof start
start:
.include WriteCodeBlocksXB
.data 0x0026B193
.data 0x00000001
.binary C0
.data 0x0026B19C
.data 0x00000001
.binary FA
.data 0x0026B396
.data 0x00000004
.binary 836004FD
.data 0x0054ACCC
.data 0x00000004
.data 0x42960000
.data 0x0054ACFC
.data 0x00000004
.data 0x42960000
.data 0x0054AD2C
.data 0x00000004
.data 0x42960000
.data 0x0054AD5C
.data 0x00000004
.data 0x42960000
.data 0x0054AD8C
.data 0x00000004
.data 0x42780000
.data 0x0054ADA8
.data 0x00000004
.data 0xFF00FF15
.data 0x00010C00
.deltaof str_data_start, str_data_end
str_data_start:
.data 0x00318858 # sprintf
.data 0x00264FD0 # Original function for on_window_created callsite
.data 0x00000000
.binary "%s\n\nHP:%d/%d"
.data 0x00000000
.data 0x00000000
str_data_end:
.data 0x002DB5D0
.deltaof new_code_start, new_code_end
new_code_start:
.include EnemyHPBars-TextHandlerXB
new_code_end:
.data 0x0026B371
.data 0x00000007
nop
nop
.binary E85B020700 # call 002DB5D3 (on_hp_updated)
.data 0x0026B158
.data 0x00000005
.binary E874040700 # call 002DB5D1 (on_window_created)
.data 0x00000000
.data 0x00000000
@@ -0,0 +1,103 @@
.meta name="Enemy HP bars"
.meta description="Shows HP bars in\nenemy info windows"
# Original code by Ralf @ GC-Forever and Aleron Ives
# https://www.gc-forever.com/forums/viewtopic.php?t=2050
# https://www.gc-forever.com/forums/viewtopic.php?t=2049
# Xbox port by fuzziqersoftware
.versions 4OED 4OEU 4OJB 4OJD 4OJU 4OPD 4OPU
entry_ptr:
reloc0:
.offsetof start
start:
.include WriteCodeBlocksXB
.data <VERS 0x0026B063 0x0026B193 0x0026ABA3 0x0026AF13 0x0026B2F3 0x0026B083 0x0026B193>
.data 0x00000001
.binary C0
.data <VERS 0x0026B06C 0x0026B19C 0x0026ABAC 0x0026AF1C 0x0026B2FC 0x0026B08C 0x0026B19C>
.data 0x00000001
.binary FA
.data <VERS 0x0026B266 0x0026B396 0x0026ADA6 0x0026B116 0x0026B4F6 0x0026B286 0x0026B396>
.data 0x00000004
.binary 836004FD
.data <VERS 0x0054A92C 0x0054A1CC 0x00545334 0x005459C4 0x0054D4AC 0x0054A92C 0x0054ACCC>
.data 0x00000004
.data 0x42960000
.data <VERS 0x0054A95C 0x0054A1FC 0x00545364 0x005459F4 0x0054D4DC 0x0054A95C 0x0054ACFC>
.data 0x00000004
.data 0x42960000
.data <VERS 0x0054A98C 0x0054A22C 0x00545394 0x00545A24 0x0054D50C 0x0054A98C 0x0054AD2C>
.data 0x00000004
.data 0x42960000
.data <VERS 0x0054A9BC 0x0054A25C 0x005453C4 0x00545A54 0x0054D53C 0x0054A9BC 0x0054AD5C>
.data 0x00000004
.data 0x42960000
.data <VERS 0x0054A9EC 0x0054A28C 0x005453F4 0x00545A84 0x0054D56C 0x0054A9EC 0x0054AD8C>
.data 0x00000004
.data 0x42780000
.data <VERS 0x0054AA08 0x0054A2A8 0x00545410 0x00545AA0 0x0054D588 0x0054AA08 0x0054ADA8>
.data 0x00000004
.data 0xFF00FF15
.data 0x00010C00
.deltaof str_data_start, str_data_end
str_data_start:
.data <VERS 0x00318308 0x00317D7A 0x00313B22 0x00314722 0x00317D7A 0x00318338 0x00318858> # sprintf
.data <VERS 0x00264E80 0x00264F80 0x002649C0 0x00264D80 0x00265130 0x00264EA0 0x00264FD0> # Original function for on_window_created callsite
.data 0x00000000
.binary "%s\n\nHP:%d/%d"
.data 0x00000000
.data 0x00000000
str_data_end:
# WARNING: FlickeringStatusIcons patch starts immediately after this segment;
# if the size of this is changed, that patch will have to be changed too
.data <VERS 0x002DB050 0x002DB550 0x002D90E0 0x002D9CB0 0x002DB580 0x002DB080 0x002DB5D0>
.deltaof new_code_start, new_code_end
new_code_start:
# Replacement for handle_0E (do nothing)
ret
# Call table: 2 functions (on_window_created, on_hp_updated)
jmp on_window_created
on_hp_updated:
call rewrite_string
movsx ecx, word [ebp + 0x02BC] # Replaced opcode at callsite
ret
on_window_created:
mov [0x00010C08], eax # prev_desc
push ebp
mov ebp, ebx
call rewrite_string
pop ebp
mov dword [esp + 4], 0x00010C1C # Change first argument to desc_buf
jmp [0x00010C04] # Call original function
rewrite_string:
movsx eax, word [ebp + 0x02BC] # max HP
push eax
movsx eax, word [ebp + 0x0330] # current HP
push eax
push dword [0x00010C08] # prev_desc
push 0x00010C0C # desc_template
push 0x00010C1C # desc_buf
call [0x00010C00] # sprintf
add esp, 0x14
ret
new_code_end:
.data <VERS 0x0026B241 0x0026B371 0x0026AD81 0x0026B0F1 0x0026B4D1 0x0026B261 0x0026B371>
.data 0x00000007
nop
nop
.binary <VERS E80BFE0600 E8DB010700 E85BE30600 E8BBEB0600 E8AB000700 E81BFE0600 E85B020700> # call on_hp_updated
.data <VERS 0x0026B028 0x0026B158 0x0026AB68 0x0026AED8 0x0026B2B8 0x0026B048 0x0026B158>
.data 0x00000005
.binary <VERS E824000700 E8F4030700 E874E50600 E8D4ED0600 E8C4020700 E834000700 E874040700> # call on_window_created
.data 0x00000000
.data 0x00000000