Files
psopeeps-newserv/system/client-functions/BlueBurstExclusive/StackLimits.s
T
2026-05-25 16:44:37 -07:00

85 lines
2.1 KiB
ArmAsm

# It would be a bad idea to change this function's visibility; either all players on the server should have this patch,
# or none should have it.
# If you change the stack limits in config.json away from the defaults, you should change the limits array below to
# match config.json and add this patch to the BBRequiredPatches list.
.meta name="Item stacks"
.meta description=""
.versions 50YJ 59NJ 59NL
entry_ptr:
reloc0:
.offsetof start
start:
.include WriteCodeBlocks
# Patch 1: rewrite item_is_stackable
.data <VERS 0x005C3DD8 0x005C5020 0x005C502C>
.deltaof item_is_stackable_start, item_is_stackable_end
item_is_stackable_start:
mov eax, [esp + 4]
cmp al, 4
je return_1
cmp al, 3
jne return_0
mov ah, [esp + 8]
push eax
mov ecx, esp
.binary <VERS E85C090100 E8D8130100 E8EC130100> # call max_stack_size_for_tool_start
pop ecx
cmp eax, 1
jg return_1
# Fallthrough to return_0
return_0:
xor eax, eax
ret
return_1:
xor eax, eax
inc eax
ret
item_is_stackable_end:
# Patch 2: rewrite max_stack_size_for_tool
.data <VERS 0x005D474C 0x005D6410 0x005D6430>
.deltaof max_stack_size_for_tool_start, max_stack_size_for_tool_end
max_stack_size_for_tool_start:
xor eax, eax
inc eax
# if (data1[0] != 3) return 1
cmp byte [ecx], 3
jne not_tool2
# declare return values array
call data_end
# This array specifies the stack limits for each tool class. The array index is the second byte of the item data (see
# names-v4.json for the values; for e.g. tech disks this is 02). For classes beyond 15, the value for 15 is used.
# Index: 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F 10 11 12 13 14 15
.binary 0A 0A 01 0A 0A 0A 0A 0A 0A 01 01 01 01 01 01 01 63 01 01 01 01 01
data_end:
# eax = std::min<uint8_t>(data1[1], 0x15)
mov al, [ecx + 1]
xor edx, edx
mov dl, 0x15
cmp eax, edx
cmovg eax, edx
# return data[eax]
pop edx
mov al, [edx + eax]
not_tool2:
ret
max_stack_size_for_tool_end:
.data 0x00000000
.data 0x00000000