KAZIK/src_graphics/tower_relics.inc
Игорь Федосеев eaac8b861e feat: rework artifacts and tower relics
Extend profiles from 280 to 312 bytes with legacy compatibility.
Keep tower relics run-local and share the profile bankroll.
2026-10-30 23:22:19 +03:00

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