Extend profiles from 280 to 312 bytes with legacy compatibility. Keep tower relics run-local and share the profile bankroll.
278 lines
5.9 KiB
PHP
278 lines
5.9 KiB
PHP
; Run-local relics. Never serialized; all stakes still use the profile bankroll.
|
|
ResetTowerRelics3D PROC
|
|
mov towerHeartUses3D,0
|
|
mov towerSealUses3D,0
|
|
mov towerSealStage3D,0
|
|
mov towerBulletUses3D,0
|
|
mov towerBustUses3D,0
|
|
mov towerEye3D,0
|
|
mov towerPurseUses3D,0
|
|
mov towerRewardPending3D,0
|
|
mov towerRewardSelection3D,0
|
|
mov towerEntryBank3D,0
|
|
mov towerRewardOffers3D,0
|
|
mov towerRewardOffers3D[4],0
|
|
mov towerRewardOffers3D[8],0
|
|
ret
|
|
ResetTowerRelics3D ENDP
|
|
|
|
PrepareTowerReward3D PROC
|
|
mov towerRewardPending3D,1
|
|
mov towerRewardSelection3D,0
|
|
mov towerRewardOffers3D,0
|
|
mov towerRewardOffers3D[8],5
|
|
mov eax,towerStage
|
|
cmp towerFloorState,TOWER_STATE_CLEAR
|
|
jne @F
|
|
inc eax
|
|
@@:
|
|
mov towerSealStage3D,eax
|
|
mov towerSealUses3D,0
|
|
mov ecx,1
|
|
cmp eax,3
|
|
jne @F
|
|
mov ecx,3
|
|
@@:
|
|
cmp eax,4
|
|
jne @F
|
|
mov ecx,2
|
|
@@:
|
|
cmp eax,6
|
|
jne @F
|
|
mov ecx,4
|
|
@@:
|
|
mov towerRewardOffers3D[4],ecx
|
|
call ClearKeys3D
|
|
mov mouseClick3D,0
|
|
ret
|
|
PrepareTowerReward3D ENDP
|
|
|
|
ChooseTowerRelic3D PROC index:DWORD
|
|
cmp towerRewardPending3D,1
|
|
jne tower_choose_done
|
|
mov ecx,index
|
|
cmp ecx,2
|
|
ja tower_choose_done
|
|
mov eax,towerRewardOffers3D[ecx*4]
|
|
cmp eax,0
|
|
jne @F
|
|
inc towerHeartUses3D
|
|
@@:
|
|
cmp eax,1
|
|
jne @F
|
|
mov towerSealUses3D,2
|
|
@@:
|
|
cmp eax,2
|
|
jne @F
|
|
add towerBulletUses3D,2
|
|
@@:
|
|
cmp eax,3
|
|
jne @F
|
|
add towerBustUses3D,2
|
|
@@:
|
|
cmp eax,4
|
|
jne @F
|
|
mov towerEye3D,1
|
|
@@:
|
|
cmp eax,5
|
|
jne @F
|
|
add towerPurseUses3D,2
|
|
@@:
|
|
mov towerRewardPending3D,0
|
|
call ClearKeys3D
|
|
mov mouseClick3D,0
|
|
tower_choose_done:
|
|
ret
|
|
ChooseTowerRelic3D ENDP
|
|
|
|
HandleTowerReward3D PROC
|
|
invoke Pressed3D,1Bh
|
|
test eax,eax
|
|
jz @F
|
|
call TowerExitToHall
|
|
ret
|
|
@@:
|
|
invoke Pressed3D,25h
|
|
test eax,eax
|
|
jz @F
|
|
cmp towerRewardSelection3D,0
|
|
je @F
|
|
dec towerRewardSelection3D
|
|
@@:
|
|
invoke Pressed3D,27h
|
|
test eax,eax
|
|
jz @F
|
|
cmp towerRewardSelection3D,2
|
|
jae @F
|
|
inc towerRewardSelection3D
|
|
@@:
|
|
cmp mouseClick3D,0
|
|
je tower_reward_keys
|
|
mov mouseClick3D,0
|
|
cmp mouseY3D,73
|
|
jb tower_reward_keys
|
|
cmp mouseY3D,183
|
|
jae tower_reward_keys
|
|
mov eax,mouseX3D
|
|
sub eax,8
|
|
js tower_reward_keys
|
|
xor edx,edx
|
|
mov ecx,102
|
|
div ecx
|
|
cmp eax,2
|
|
ja tower_reward_keys
|
|
mov towerRewardSelection3D,eax
|
|
invoke ChooseTowerRelic3D,eax
|
|
ret
|
|
tower_reward_keys:
|
|
invoke Pressed3D,31h
|
|
test eax,eax
|
|
jz @F
|
|
invoke ChooseTowerRelic3D,0
|
|
ret
|
|
@@:
|
|
invoke Pressed3D,32h
|
|
test eax,eax
|
|
jz @F
|
|
invoke ChooseTowerRelic3D,1
|
|
ret
|
|
@@:
|
|
invoke Pressed3D,33h
|
|
test eax,eax
|
|
jz @F
|
|
invoke ChooseTowerRelic3D,2
|
|
ret
|
|
@@:
|
|
invoke Pressed3D,0Dh
|
|
test eax,eax
|
|
jnz tower_reward_confirm
|
|
invoke Pressed3D,20h
|
|
test eax,eax
|
|
jz tower_reward_done
|
|
tower_reward_confirm:
|
|
invoke ChooseTowerRelic3D,towerRewardSelection3D
|
|
tower_reward_done:
|
|
ret
|
|
HandleTowerReward3D ENDP
|
|
|
|
RenderTowerReward3D PROC uses ebx esi edi
|
|
local x:DWORD,y:DWORD
|
|
invoke DrawBox,0,0,320,240,000C080Bh
|
|
invoke DrawBoxBorder,4,24,312,192,0014090Dh,00D08030h,2
|
|
invoke DrawString8x8,16,32,OFFSET towerRewardTitle3D,00FFD080h
|
|
invoke DrawString8x8,16,47,OFFSET towerRewardHint3D,00CCCCBBh
|
|
xor ebx,ebx
|
|
mov x,8
|
|
tower_reward_card:
|
|
mov edx,00604430h
|
|
cmp ebx,towerRewardSelection3D
|
|
jne @F
|
|
mov edx,00FFCC66h
|
|
@@:
|
|
invoke DrawBoxBorder,x,73,100,110,002A1717h,edx,2
|
|
mov esi,towerRewardOffers3D[ebx*4]
|
|
mov eax,x
|
|
add eax,4
|
|
invoke DrawString8x8,eax,83,towerRelicNames3D[esi*4],00FFDD88h
|
|
mov edi,towerRelicDescriptions3D[esi*4]
|
|
mov y,105
|
|
push ebx
|
|
mov ebx,3
|
|
@@:
|
|
mov eax,x
|
|
add eax,4
|
|
invoke DrawString8x8,eax,y,edi,00DDD3CCh
|
|
tower_reward_text_end:
|
|
cmp BYTE PTR [edi],0
|
|
je tower_reward_text_next
|
|
inc edi
|
|
jmp tower_reward_text_end
|
|
tower_reward_text_next:
|
|
inc edi
|
|
add y,13
|
|
dec ebx
|
|
jnz @B
|
|
pop ebx
|
|
mov eax,x
|
|
add eax,4
|
|
invoke DrawString8x8,eax,161,OFFSET towerRunOnly3D,00AA9999h
|
|
add x,102
|
|
inc ebx
|
|
cmp ebx,3
|
|
jb tower_reward_card
|
|
invoke DrawString8x8,16,195,OFFSET towerRewardKeys3D,00FFDD88h
|
|
call RenderTowerRelicStock3D
|
|
ret
|
|
RenderTowerReward3D ENDP
|
|
|
|
; Six compact counters remain visible between floors and during play.
|
|
RenderTowerRelicStock3D PROC uses ebx esi
|
|
local x:DWORD,y:DWORD,stepX:DWORD
|
|
mov x,4
|
|
mov y,229
|
|
mov stepX,52
|
|
cmp engineMode,MODE_HELL_TOWER
|
|
je tower_stock_menu
|
|
; Keep table action buttons at the bottom unobscured.
|
|
invoke DrawBox,100,4,216,26,0014090Dh
|
|
mov x,104
|
|
mov y,7
|
|
mov stepX,70
|
|
jmp tower_stock_start
|
|
tower_stock_menu:
|
|
invoke DrawBox,0,226,320,14,0014090Dh
|
|
tower_stock_start:
|
|
xor ebx,ebx
|
|
tower_stock_counter:
|
|
invoke DrawString8x8,x,y,towerStockLabels3D[ebx*4],00CCAA88h
|
|
mov esi,towerStockValues3D[ebx*4]
|
|
invoke FormatNumber,DWORD PTR [esi],OFFSET towerRelicNum3D
|
|
mov eax,x
|
|
add eax,26
|
|
invoke DrawString8x8,eax,y,OFFSET towerRelicNum3D,00FFFFFFh
|
|
mov eax,stepX
|
|
add x,eax
|
|
inc ebx
|
|
cmp ebx,3
|
|
jne @F
|
|
cmp engineMode,MODE_HELL_TOWER
|
|
je @F
|
|
mov x,104
|
|
add y,12
|
|
@@:
|
|
cmp ebx,6
|
|
jb tower_stock_counter
|
|
ret
|
|
RenderTowerRelicStock3D ENDP
|
|
|
|
TryTowerBustSave3D PROC
|
|
cmp tournamentMode,1
|
|
jne tower_bust_none
|
|
cmp towerBustUses3D,0
|
|
je tower_bust_none
|
|
dec towerBustUses3D
|
|
dec cbPlayerCount3D
|
|
invoke NativeBJScore3D,OFFSET cbPlayer3D,cbPlayerCount3D
|
|
mov cbPlayerScore3D,eax
|
|
invoke CopyString3D,OFFSET towerBustMessage3D,OFFSET flashMessage
|
|
mov flashTimer,140
|
|
mov eax,1
|
|
ret
|
|
tower_bust_none:
|
|
xor eax,eax
|
|
ret
|
|
TryTowerBustSave3D ENDP
|
|
|
|
UpdateTowerEye3D PROC
|
|
cmp tournamentMode,1
|
|
jne tower_eye_done
|
|
cmp towerEye3D,1
|
|
jne tower_eye_done
|
|
mov eax,bs3d_shellIndex
|
|
cmp eax,bs3d_shellCount
|
|
jae tower_eye_done
|
|
mov eax,bs3d_shells[eax*4]
|
|
mov bs3d_known,eax
|
|
tower_eye_done:
|
|
ret
|
|
UpdateTowerEye3D ENDP
|