feat(tower): implement 3D Hell Tower mode and clean legacy console code
- Add 3D Hell Tower mode with 10 boss floors, briefings, and outcome tracking across games - Refactor poker.asm by removing >10,600 lines of dead legacy console games and menus - Rebuild poker.exe with clean binary output and update .gitignore
This commit is contained in:
parent
4a27ea0f44
commit
2024aacd31
17 changed files with 788 additions and 10654 deletions
1
.gitignore
vendored
1
.gitignore
vendored
|
|
@ -9,6 +9,7 @@ __pycache__/
|
|||
*.obj
|
||||
/tools/vendor/
|
||||
/tools/generated_frames/
|
||||
/graphify-out/
|
||||
|
||||
# Generated build/test output; keep packaging source and shipping exe files.
|
||||
/build/actions/
|
||||
|
|
|
|||
Binary file not shown.
81
casino3d.inc
81
casino3d.inc
|
|
@ -167,6 +167,7 @@ include src_graphics\unavailable_data.inc
|
|||
include src_graphics\native_slots_data.inc
|
||||
include src_graphics\native_clover_data.inc
|
||||
include src_graphics\native_coin_data.inc
|
||||
include src_graphics\hell_tower_data.inc
|
||||
|
||||
.data
|
||||
ALIGN 4
|
||||
|
|
@ -204,6 +205,7 @@ playerPlaneX dd (FP_1 * 66 / 100)
|
|||
playerPlaneY dd 0
|
||||
|
||||
engineMode dd 0
|
||||
startInHellTower dd 0
|
||||
interactTargetId dd 0
|
||||
interactPromptPtr dd 0
|
||||
dancerLuckBuff dd 0
|
||||
|
|
@ -3226,6 +3228,24 @@ dice_roll_lost:
|
|||
ret
|
||||
|
||||
dice_handle_result:
|
||||
cmp tournamentMode, 1
|
||||
jne @F
|
||||
invoke Pressed3D, 20h
|
||||
test eax, eax
|
||||
jnz dice_tourney_report
|
||||
invoke Pressed3D, 0Dh
|
||||
test eax, eax
|
||||
jnz dice_tourney_report
|
||||
ret
|
||||
dice_tourney_report:
|
||||
cmp dice3d_win, 0
|
||||
je dice_tourney_loss
|
||||
invoke TowerReportRoundOutcome, 1
|
||||
ret
|
||||
dice_tourney_loss:
|
||||
invoke TowerReportRoundOutcome, 2
|
||||
ret
|
||||
@@:
|
||||
invoke Pressed3D, 20h
|
||||
test eax, eax
|
||||
jz dice_done
|
||||
|
|
@ -3660,6 +3680,24 @@ skulls_pick_3:
|
|||
ret
|
||||
|
||||
skulls_handle_reveal:
|
||||
cmp tournamentMode, 1
|
||||
jne @F
|
||||
invoke Pressed3D, 20h
|
||||
test eax, eax
|
||||
jnz skulls_tourney_report
|
||||
invoke Pressed3D, 0Dh
|
||||
test eax, eax
|
||||
jnz skulls_tourney_report
|
||||
ret
|
||||
skulls_tourney_report:
|
||||
cmp skulls3d_win, 0
|
||||
je skulls_tourney_loss
|
||||
invoke TowerReportRoundOutcome, 1
|
||||
ret
|
||||
skulls_tourney_loss:
|
||||
invoke TowerReportRoundOutcome, 2
|
||||
ret
|
||||
@@:
|
||||
invoke Pressed3D, 20h
|
||||
test eax, eax
|
||||
jz skulls_input_done
|
||||
|
|
@ -4275,6 +4313,24 @@ skill_handle_round_wait:
|
|||
ret
|
||||
|
||||
skill_handle_end_wait:
|
||||
cmp tournamentMode, 1
|
||||
jne @F
|
||||
invoke Pressed3D, 20h
|
||||
test eax, eax
|
||||
jnz skill_tourney_report
|
||||
invoke Pressed3D, 0Dh
|
||||
test eax, eax
|
||||
jnz skill_tourney_report
|
||||
ret
|
||||
skill_tourney_report:
|
||||
cmp skill3d_state, 4
|
||||
jne skill_tourney_loss
|
||||
invoke TowerReportRoundOutcome, 1
|
||||
ret
|
||||
skill_tourney_loss:
|
||||
invoke TowerReportRoundOutcome, 2
|
||||
ret
|
||||
@@:
|
||||
invoke Pressed3D, 20h
|
||||
test eax, eax
|
||||
jz skill_input_done
|
||||
|
|
@ -4796,7 +4852,7 @@ check_target_umamusume:
|
|||
check_target_hell:
|
||||
cmp eax, INTERACT_HELL_TOWER
|
||||
jne check_target_shop
|
||||
call BeginUnavailable3D
|
||||
call InitHellTower3D
|
||||
ret
|
||||
|
||||
check_target_shop:
|
||||
|
|
@ -5153,8 +5209,15 @@ include src_graphics\billiards.inc
|
|||
include src_graphics\buckshot.inc
|
||||
include src_graphics\russian_table.inc
|
||||
include src_graphics\unavailable.inc
|
||||
include src_graphics\hell_tower.inc
|
||||
|
||||
; --- Main Loop of the 3D Casino Engine ---
|
||||
StartHellTower3D PROC uses ebx esi edi
|
||||
mov startInHellTower, 1
|
||||
call StartCasino3D
|
||||
ret
|
||||
StartHellTower3D ENDP
|
||||
|
||||
StartCasino3D PROC uses ebx esi edi
|
||||
call Init3DEngine
|
||||
test eax, eax
|
||||
|
|
@ -5162,6 +5225,10 @@ StartCasino3D PROC uses ebx esi edi
|
|||
invoke timeGetTime
|
||||
mov rngSeed3D, eax
|
||||
mov previousTick3D, eax
|
||||
cmp startInHellTower, 1
|
||||
jne engine_loop
|
||||
mov startInHellTower, 0
|
||||
call InitHellTower3D
|
||||
engine_loop:
|
||||
invoke PeekMessageA, OFFSET msg3D, 0, 0, 0, PM_REMOVE
|
||||
test eax, eax
|
||||
|
|
@ -5223,6 +5290,11 @@ leave_table:
|
|||
jmp engine_tick
|
||||
leave_idle_table:
|
||||
mov paused3D, 0
|
||||
cmp tournamentMode, 1
|
||||
jne @F
|
||||
call TowerExitToHall
|
||||
jmp engine_tick
|
||||
@@:
|
||||
mov engineMode, MODE_WALK
|
||||
call ClearKeys3D
|
||||
invoke PlayCasinoSound3D, 0, 0, 0
|
||||
|
|
@ -5264,6 +5336,12 @@ check_walk_mode:
|
|||
call RenderMinimap
|
||||
jmp present_frame
|
||||
check_slots_mode:
|
||||
cmp engineMode, MODE_HELL_TOWER
|
||||
jne @F
|
||||
call HandleHellTowerInput
|
||||
call RenderHellTower3D
|
||||
jmp present_frame
|
||||
@@:
|
||||
cmp engineMode,MODE_CLOVER
|
||||
jne @F
|
||||
call HandleNativeClover3D
|
||||
|
|
@ -5458,6 +5536,7 @@ pause_low_spec_saved:
|
|||
call SaveProgress3D
|
||||
jmp engine_shutdown
|
||||
present_frame:
|
||||
call RenderTowerInGameBadge
|
||||
mov eax, engineMode
|
||||
cmp eax, lastPersistMode3D
|
||||
je @F
|
||||
|
|
|
|||
BIN
poker.exe
BIN
poker.exe
Binary file not shown.
BIN
poker.obj
BIN
poker.obj
Binary file not shown.
Binary file not shown.
|
|
@ -514,6 +514,24 @@ bs_update_state:
|
|||
je bs_input_recovery
|
||||
cmp eax, BS_ERROR
|
||||
je bs_input_done
|
||||
cmp tournamentMode, 1
|
||||
jne bs_regular_restart
|
||||
invoke Pressed3D, 20h
|
||||
test eax, eax
|
||||
jnz bs_tourney_report
|
||||
invoke Pressed3D, 0Dh
|
||||
test eax, eax
|
||||
jnz bs_tourney_report
|
||||
ret
|
||||
bs_tourney_report:
|
||||
cmp bs3d_state, BS_WIN
|
||||
jne bs_tourney_loss
|
||||
invoke TowerReportRoundOutcome, 1
|
||||
ret
|
||||
bs_tourney_loss:
|
||||
invoke TowerReportRoundOutcome, 2
|
||||
ret
|
||||
bs_regular_restart:
|
||||
invoke Pressed3D, 20h
|
||||
test eax, eax
|
||||
jz bs_input_done
|
||||
|
|
|
|||
364
src_graphics/hell_tower.inc
Normal file
364
src_graphics/hell_tower.inc
Normal file
|
|
@ -0,0 +1,364 @@
|
|||
; --- hell_tower.inc: Implementation of Hell Tower (10-floor Boss Rush) ---
|
||||
.code
|
||||
|
||||
InitHellTower3D PROC
|
||||
mov tournamentMode, 1
|
||||
mov towerStage, 1
|
||||
mov towerFloorState, TOWER_STATE_BRIEFING
|
||||
mov towerAnimClock, 0
|
||||
call PlayTowerRandomMusic
|
||||
mov engineMode, MODE_HELL_TOWER
|
||||
call ClearKeys3D
|
||||
ret
|
||||
InitHellTower3D ENDP
|
||||
|
||||
TowerExitToHall PROC
|
||||
call StopTowerMusic
|
||||
mov tournamentMode, 0
|
||||
mov engineMode, MODE_WALK
|
||||
call ClearKeys3D
|
||||
ret
|
||||
TowerExitToHall ENDP
|
||||
|
||||
TowerLaunchCurrentFloor PROC uses ebx esi edi
|
||||
mov eax, towerStage
|
||||
dec eax
|
||||
cmp eax, 10
|
||||
jae @F
|
||||
jmp launch_valid
|
||||
@@:
|
||||
xor eax, eax
|
||||
launch_valid:
|
||||
mov edx, towerFloorModes[eax*4]
|
||||
mov towerCurrentGame, edx
|
||||
mov towerFloorState, TOWER_STATE_IN_GAME
|
||||
|
||||
; Launch corresponding game
|
||||
cmp edx, MODE_COIN
|
||||
jne @F
|
||||
call InitCoinGame
|
||||
mov engineMode, MODE_COIN
|
||||
jmp launch_done
|
||||
@@:
|
||||
cmp edx, MODE_DICE
|
||||
jne @F
|
||||
call InitDiceGame
|
||||
mov engineMode, MODE_DICE
|
||||
jmp launch_done
|
||||
@@:
|
||||
cmp edx, MODE_SKULLS
|
||||
jne @F
|
||||
call InitSkullsGame
|
||||
mov engineMode, MODE_SKULLS
|
||||
jmp launch_done
|
||||
@@:
|
||||
cmp edx, MODE_BLACKJACK
|
||||
jne @F
|
||||
call InitNativeBlackjack3D
|
||||
mov engineMode, MODE_BLACKJACK
|
||||
jmp launch_done
|
||||
@@:
|
||||
cmp edx, MODE_POKER
|
||||
jne @F
|
||||
call InitNativePoker3D
|
||||
mov engineMode, MODE_POKER
|
||||
jmp launch_done
|
||||
@@:
|
||||
cmp edx, MODE_RUSSIAN
|
||||
jne @F
|
||||
call InitRussianGame3D
|
||||
mov engineMode, MODE_RUSSIAN
|
||||
jmp launch_done
|
||||
@@:
|
||||
cmp edx, MODE_ROULETTE
|
||||
jne @F
|
||||
call InitNativeWheel3D
|
||||
mov engineMode, MODE_ROULETTE
|
||||
jmp launch_done
|
||||
@@:
|
||||
cmp edx, MODE_DURAK
|
||||
jne @F
|
||||
call InitNativeDurak3D
|
||||
mov engineMode, MODE_DURAK
|
||||
jmp launch_done
|
||||
@@:
|
||||
cmp edx, MODE_SKILL
|
||||
jne @F
|
||||
call InitSkillGame
|
||||
mov engineMode, MODE_SKILL
|
||||
jmp launch_done
|
||||
@@:
|
||||
cmp edx, MODE_BUCKSHOT
|
||||
jne launch_done
|
||||
call InitBuckshot3D
|
||||
mov engineMode, MODE_BUCKSHOT
|
||||
|
||||
launch_done:
|
||||
call ClearKeys3D
|
||||
ret
|
||||
TowerLaunchCurrentFloor ENDP
|
||||
|
||||
TowerReportRoundOutcome PROC uses eax outcome:DWORD
|
||||
cmp tournamentMode, 1
|
||||
jne report_exit
|
||||
mov eax, outcome
|
||||
cmp eax, 1
|
||||
jne report_loss
|
||||
|
||||
; --- Victory ---
|
||||
cmp towerStage, 10
|
||||
jae report_champion
|
||||
|
||||
mov towerFloorState, TOWER_STATE_CLEAR
|
||||
invoke PlayCasinoSound3D, OFFSET soundRoundWin, 0, 1
|
||||
mov engineMode, MODE_HELL_TOWER
|
||||
call ClearKeys3D
|
||||
ret
|
||||
|
||||
report_champion:
|
||||
mov towerFloorState, TOWER_STATE_CHAMPION
|
||||
mov eax, towerPrizeAmount
|
||||
add bankroll, eax
|
||||
invoke PlayCasinoSound3D, OFFSET soundRoundWin, 0, 1
|
||||
call SaveProgress3D
|
||||
mov engineMode, MODE_HELL_TOWER
|
||||
call ClearKeys3D
|
||||
ret
|
||||
|
||||
report_loss:
|
||||
mov towerFloorState, TOWER_STATE_DEFEAT
|
||||
call StopTowerMusic
|
||||
invoke PlayCasinoSound3D, OFFSET soundRoundLose, 0, 1
|
||||
mov engineMode, MODE_HELL_TOWER
|
||||
call ClearKeys3D
|
||||
ret
|
||||
|
||||
report_exit:
|
||||
ret
|
||||
TowerReportRoundOutcome ENDP
|
||||
|
||||
HandleHellTowerInput PROC
|
||||
mov eax, towerFloorState
|
||||
cmp eax, TOWER_STATE_BRIEFING
|
||||
je input_briefing
|
||||
cmp eax, TOWER_STATE_CLEAR
|
||||
je input_clear
|
||||
cmp eax, TOWER_STATE_DEFEAT
|
||||
je input_defeat
|
||||
cmp eax, TOWER_STATE_CHAMPION
|
||||
je input_champion
|
||||
ret
|
||||
|
||||
input_briefing:
|
||||
invoke Pressed3D, 1Bh ; ESC
|
||||
test eax, eax
|
||||
jz @F
|
||||
call TowerExitToHall
|
||||
ret
|
||||
@@:
|
||||
invoke Pressed3D, 20h ; SPACE
|
||||
test eax, eax
|
||||
jnz start_stage
|
||||
invoke Pressed3D, 0Dh ; ENTER
|
||||
test eax, eax
|
||||
jnz start_stage
|
||||
ret
|
||||
start_stage:
|
||||
call TowerLaunchCurrentFloor
|
||||
ret
|
||||
|
||||
input_clear:
|
||||
invoke Pressed3D, 1Bh ; ESC
|
||||
test eax, eax
|
||||
jz @F
|
||||
call TowerExitToHall
|
||||
ret
|
||||
@@:
|
||||
invoke Pressed3D, 20h ; SPACE
|
||||
test eax, eax
|
||||
jnz advance_stage
|
||||
invoke Pressed3D, 0Dh ; ENTER
|
||||
test eax, eax
|
||||
jnz advance_stage
|
||||
ret
|
||||
advance_stage:
|
||||
inc towerStage
|
||||
mov towerFloorState, TOWER_STATE_BRIEFING
|
||||
call ClearKeys3D
|
||||
ret
|
||||
|
||||
input_defeat:
|
||||
invoke Pressed3D, 1Bh ; ESC
|
||||
test eax, eax
|
||||
jnz exit_to_hall
|
||||
invoke Pressed3D, 20h ; SPACE
|
||||
test eax, eax
|
||||
jnz exit_to_hall
|
||||
invoke Pressed3D, 0Dh ; ENTER
|
||||
test eax, eax
|
||||
jnz exit_to_hall
|
||||
ret
|
||||
|
||||
input_champion:
|
||||
invoke Pressed3D, 1Bh ; ESC
|
||||
test eax, eax
|
||||
jnz exit_to_hall
|
||||
invoke Pressed3D, 20h ; SPACE
|
||||
test eax, eax
|
||||
jnz exit_to_hall
|
||||
invoke Pressed3D, 0Dh ; ENTER
|
||||
test eax, eax
|
||||
jnz exit_to_hall
|
||||
ret
|
||||
|
||||
exit_to_hall:
|
||||
call TowerExitToHall
|
||||
ret
|
||||
HandleHellTowerInput ENDP
|
||||
|
||||
RenderHellTower3D PROC uses ebx esi edi
|
||||
; 1. Clear background with deep infernal maroon
|
||||
lea edi, screenBuffer
|
||||
mov ecx, SCREEN_SIZE
|
||||
mov eax, 00100202h
|
||||
rep stosd
|
||||
|
||||
; 2. Outer and inner border
|
||||
invoke DrawBoxBorder, 8, 8, 304, 224, 00120202h, 00CC2222h, 2
|
||||
invoke DrawBoxBorder, 12, 12, 296, 216, 000C0202h, 00881111h, 1
|
||||
|
||||
; 3. Header Banner (Centered: 192px wide, (320 - 192)/2 = 64)
|
||||
invoke DrawBoxBorder, 18, 16, 284, 20, 00220404h, 00FF4444h, 1
|
||||
invoke DrawString8x8, 64, 22, OFFSET towerHeader, 00FFDD66h
|
||||
|
||||
; 4. Floor Header & Segment Progress Bar
|
||||
invoke DrawString8x8, 26, 42, OFFSET towerFloorPrefix, 00FF6666h
|
||||
invoke FormatNumber, towerStage, OFFSET hudNumBuffer
|
||||
invoke DrawString8x8, 66, 42, OFFSET hudNumBuffer, 00FFFFFFh
|
||||
invoke DrawString8x8, 74, 42, OFFSET towerOfTen, 00AAAAAAh
|
||||
|
||||
; Draw 10 stage pips across x = 26 .. 293
|
||||
xor esi, esi
|
||||
draw_pips_loop:
|
||||
mov eax, esi
|
||||
imul eax, 27
|
||||
add eax, 26 ; x position
|
||||
mov ebx, eax
|
||||
|
||||
; Color based on state
|
||||
mov ecx, towerStage
|
||||
dec ecx
|
||||
cmp esi, ecx
|
||||
jae pip_future
|
||||
; Past stage (Cleared): Bright Gold
|
||||
invoke DrawBoxBorder, ebx, 54, 24, 6, 00DDBB22h, 00FFEE44h, 1
|
||||
jmp pip_next
|
||||
pip_future:
|
||||
je pip_current
|
||||
; Future stage: Dark
|
||||
invoke DrawBoxBorder, ebx, 54, 24, 6, 002A0808h, 00441111h, 1
|
||||
jmp pip_next
|
||||
pip_current:
|
||||
; Current stage: Pulsing Fire Red/Orange
|
||||
invoke DrawBoxBorder, ebx, 54, 24, 6, 00EE3311h, 00FFAA33h, 1
|
||||
pip_next:
|
||||
inc esi
|
||||
cmp esi, 10
|
||||
jb draw_pips_loop
|
||||
|
||||
; 5. Specific State Panels
|
||||
mov eax, towerFloorState
|
||||
cmp eax, TOWER_STATE_BRIEFING
|
||||
je render_briefing
|
||||
cmp eax, TOWER_STATE_CLEAR
|
||||
je render_clear
|
||||
cmp eax, TOWER_STATE_DEFEAT
|
||||
je render_defeat
|
||||
cmp eax, TOWER_STATE_CHAMPION
|
||||
je render_champion
|
||||
ret
|
||||
|
||||
render_briefing:
|
||||
; Boss & Game Card
|
||||
invoke DrawBoxBorder, 20, 66, 280, 58, 001E0404h, 00AA2222h, 1
|
||||
invoke DrawString8x8, 28, 72, OFFSET towerEnemyLabel, 00FFAA55h
|
||||
|
||||
mov eax, towerStage
|
||||
dec eax
|
||||
mov edx, towerBossNames[eax*4]
|
||||
invoke DrawString8x8, 76, 72, edx, 00FFFFFFh
|
||||
|
||||
invoke DrawString8x8, 28, 86, OFFSET towerGameLabel, 00FFAA55h
|
||||
mov eax, towerStage
|
||||
dec eax
|
||||
mov edx, towerGameNames[eax*4]
|
||||
invoke DrawString8x8, 76, 86, edx, 00FFDD66h
|
||||
|
||||
mov eax, towerStage
|
||||
dec eax
|
||||
mov edx, towerDescriptions[eax*4]
|
||||
invoke DrawString8x8, 28, 104, edx, 00CCCCCCh
|
||||
|
||||
; Rules & Warning (fits cleanly inside 300px boundary)
|
||||
invoke DrawString8x8, 24, 132, OFFSET towerRuleText, 00FFAA33h
|
||||
invoke DrawString8x8, 24, 146, OFFSET towerLossWarning, 00EE4444h
|
||||
|
||||
; Bankroll Display
|
||||
invoke DrawString8x8, 24, 164, OFFSET textBank3D, 00AAAAAAh
|
||||
invoke FormatNumber, bankroll, OFFSET hudNumBuffer
|
||||
invoke DrawString8x8, 76, 164, OFFSET hudNumBuffer, 0066FF66h
|
||||
|
||||
; Action Buttons (Centered text inside buttons)
|
||||
invoke DrawBoxBorder, 22, 184, 132, 24, 003D0C0Ch, 00FF4444h, 1
|
||||
invoke DrawString8x8, 32, 192, OFFSET towerStartBtn, 00FFFFFFh
|
||||
|
||||
invoke DrawBoxBorder, 164, 184, 132, 24, 00220606h, 00882222h, 1
|
||||
invoke DrawString8x8, 178, 192, OFFSET towerEscBtn, 00AAAAAAh
|
||||
ret
|
||||
|
||||
render_clear:
|
||||
invoke DrawBoxBorder, 20, 76, 280, 74, 00082208h, 0033CC33h, 2
|
||||
invoke DrawString8x8, 48, 90, OFFSET towerClearTitle, 0066FF66h
|
||||
invoke DrawString8x8, 24, 112, OFFSET towerClearDesc, 00FFFFFFh
|
||||
|
||||
invoke DrawBoxBorder, 50, 174, 220, 26, 00114411h, 0044FF44h, 1
|
||||
invoke DrawString8x8, 100, 183, OFFSET towerNextBtn, 00FFFFFFh
|
||||
ret
|
||||
|
||||
render_defeat:
|
||||
invoke DrawBoxBorder, 20, 76, 280, 74, 002A0404h, 00FF2222h, 2
|
||||
invoke DrawString8x8, 60, 90, OFFSET towerDefeatTitle, 00FF4444h
|
||||
invoke DrawString8x8, 36, 112, OFFSET towerDefeatDesc, 00FFFFFFh
|
||||
|
||||
invoke DrawBoxBorder, 32, 174, 256, 26, 00441010h, 00FF4444h, 1
|
||||
invoke DrawString8x8, 48, 183, OFFSET towerReturnBtn, 00FFFFFFh
|
||||
ret
|
||||
|
||||
render_champion:
|
||||
invoke DrawBoxBorder, 18, 70, 284, 86, 00332200h, 00FFD700h, 2
|
||||
invoke DrawString8x8, 40, 82, OFFSET towerChampTitle, 00FFE066h
|
||||
invoke DrawString8x8, 56, 100, OFFSET towerChampSubtitle, 00FFFFFFh
|
||||
invoke DrawString8x8, 36, 122, OFFSET towerPrizeText, 0066FF66h
|
||||
|
||||
invoke DrawBoxBorder, 32, 174, 256, 26, 00443300h, 00FFCC00h, 1
|
||||
invoke DrawString8x8, 48, 183, OFFSET towerReturnBtn, 00FFFFFFh
|
||||
ret
|
||||
RenderHellTower3D ENDP
|
||||
|
||||
RenderTowerInGameBadge PROC
|
||||
cmp tournamentMode, 1
|
||||
jne badge_done
|
||||
cmp engineMode, MODE_HELL_TOWER
|
||||
je badge_done
|
||||
cmp engineMode, MODE_WALK
|
||||
je badge_done
|
||||
|
||||
invoke DrawBoxBorder, 4, 4, 96, 16, 00220404h, 00FF3333h, 1
|
||||
invoke DrawString8x8, 8, 8, OFFSET towerHudBadge, 00FFAA55h
|
||||
invoke FormatNumber, towerStage, OFFSET hudNumBuffer
|
||||
invoke DrawString8x8, 64, 8, OFFSET hudNumBuffer, 00FFFFFFh
|
||||
invoke DrawString8x8, 72, 8, OFFSET towerHudOfTen, 00AAAAAAh
|
||||
|
||||
badge_done:
|
||||
ret
|
||||
RenderTowerInGameBadge ENDP
|
||||
82
src_graphics/hell_tower_data.inc
Normal file
82
src_graphics/hell_tower_data.inc
Normal file
|
|
@ -0,0 +1,82 @@
|
|||
; --- hell_tower_data.inc: Data for Hell Tower 3D ---
|
||||
MODE_HELL_TOWER equ 22
|
||||
TOWER_STATE_BRIEFING equ 0
|
||||
TOWER_STATE_IN_GAME equ 1
|
||||
TOWER_STATE_CLEAR equ 2
|
||||
TOWER_STATE_DEFEAT equ 3
|
||||
TOWER_STATE_CHAMPION equ 4
|
||||
|
||||
InitHellTower3D PROTO
|
||||
TowerExitToHall PROTO
|
||||
TowerReportRoundOutcome PROTO :DWORD
|
||||
RenderTowerInGameBadge PROTO
|
||||
|
||||
.data
|
||||
towerStage dd 1
|
||||
towerFloorState dd 0
|
||||
towerAnimClock dd 0
|
||||
towerCurrentGame dd 0
|
||||
towerPrizeAmount dd 66600
|
||||
towerHudText db 91,32,0
|
||||
|
||||
towerFloorModes dd MODE_COIN, MODE_DICE, MODE_SKULLS, MODE_BLACKJACK, MODE_POKER, MODE_RUSSIAN, MODE_ROULETTE, MODE_DURAK, MODE_SKILL, MODE_BUCKSHOT
|
||||
|
||||
towerBoss1 db 193,197,209,32,192,199,192,208,210,192,0
|
||||
towerBoss2 db 196,197,204,206,205,32,202,206,209,210,197,201,0
|
||||
towerBoss3 db 215,197,208,205,206,202,205,200,198,205,200,202,0
|
||||
towerBoss4 db 202,208,211,207,220,197,32,207,208,197,200,209,207,206,196,205,197,201,0
|
||||
towerBoss5 db 196,197,204,206,205,32,193,203,197,212,192,0
|
||||
towerBoss6 db 206,193,208,197,215,197,205,205,219,201,32,195,208,197,216,205,200,202,0
|
||||
towerBoss7 db 202,206,203,197,209,206,32,209,211,196,220,193,219,0
|
||||
towerBoss8 db 202,192,208,210,206,215,205,219,201,32,215,197,208,210,0
|
||||
towerBoss9 db 207,192,203,192,215,32,202,208,222,202,192,0
|
||||
towerBoss10 db 194,203,192,196,219,202,192,32,193,192,216,205,200,0
|
||||
|
||||
towerBossNames dd OFFSET towerBoss1, OFFSET towerBoss2, OFFSET towerBoss3, OFFSET towerBoss4, OFFSET towerBoss5, OFFSET towerBoss6, OFFSET towerBoss7, OFFSET towerBoss8, OFFSET towerBoss9, OFFSET towerBoss10
|
||||
|
||||
towerGame1 db 206,240,229,235,32,232,32,240,229,248,234,224,0
|
||||
towerGame2 db 202,238,241,242,232,0
|
||||
towerGame3 db 215,229,240,229,239,224,32,232,32,248,224,240,232,234,0
|
||||
towerGame4 db 50,49,32,47,32,206,247,234,238,0
|
||||
towerGame5 db 207,238,234,229,240,0
|
||||
towerGame6 db 208,243,241,241,234,224,255,32,240,243,235,229,242,234,224,0
|
||||
towerGame7 db 202,224,231,232,237,238,45,240,243,235,229,242,234,224,0
|
||||
towerGame8 db 196,243,240,224,234,0
|
||||
towerGame9 db 202,240,254,234,58,32,83,107,105,108,108,32,67,104,101,99,107,0
|
||||
towerGame10 db 66,117,99,107,115,104,111,116,32,82,111,117,108,101,116,116,101,0
|
||||
|
||||
towerGameNames dd OFFSET towerGame1, OFFSET towerGame2, OFFSET towerGame3, OFFSET towerGame4, OFFSET towerGame5, OFFSET towerGame6, OFFSET towerGame7, OFFSET towerGame8, OFFSET towerGame9, OFFSET towerGame10
|
||||
|
||||
towerDesc1 db 211,227,224,228,224,233,32,241,242,238,240,238,237,243,32,236,238,237,229,242,251,46,0
|
||||
towerDesc2 db 207,229,240,229,225,240,238,241,252,32,228,229,236,238,237,224,32,226,32,241,243,236,236,229,32,234,238,241,242,229,233,46,0
|
||||
towerDesc3 db 205,224,233,228,232,32,228,243,248,243,32,239,238,228,32,247,229,240,229,239,238,236,46,0
|
||||
towerDesc4 db 209,238,225,229,240,232,32,50,49,32,238,247,234,238,32,232,32,239,238,225,229,228,232,32,234,240,243,239,252,229,46,0
|
||||
towerDesc5 db 194,241,234,240,238,233,32,234,224,240,242,251,32,232,32,239,238,225,229,228,232,32,226,32,239,238,234,229,240,46,0
|
||||
towerDesc6 db 49,32,239,224,242,240,238,237,32,226,32,225,224,240,224,225,224,237,229,58,32,226,251,230,232,226,232,46,0
|
||||
towerDesc7 db 209,228,229,235,224,233,32,241,242,224,226,234,243,32,237,224,32,240,243,235,229,242,234,229,46,0
|
||||
towerDesc8 db 206,241,242,224,226,252,32,247,184,240,242,224,32,226,32,228,243,240,224,234,224,245,46,0
|
||||
towerDesc9 db 207,238,239,224,228,232,32,226,32,231,238,237,243,32,232,32,241,238,240,226,232,241,252,32,241,32,234,240,254,234,224,46,0
|
||||
towerDesc10 db 196,243,253,235,252,32,237,224,32,228,240,238,225,238,226,232,234,224,245,32,231,224,32,230,232,231,237,252,33,0
|
||||
|
||||
towerDescriptions dd OFFSET towerDesc1, OFFSET towerDesc2, OFFSET towerDesc3, OFFSET towerDesc4, OFFSET towerDesc5, OFFSET towerDesc6, OFFSET towerDesc7, OFFSET towerDesc8, OFFSET towerDesc9, OFFSET towerDesc10
|
||||
|
||||
towerHeader db 202,192,199,200,205,206,32,51,68,32,45,32,192,196,209,202,192,223,32,193,192,216,205,223,0
|
||||
towerFloorPrefix db 221,210,192,198,32,0
|
||||
towerOfTen db 32,47,32,49,48,0
|
||||
towerEnemyLabel db 194,208,192,195,58,32,0
|
||||
towerGameLabel db 200,195,208,192,58,32,0
|
||||
towerRuleText db 49,48,32,225,232,242,226,32,239,238,228,240,255,228,32,225,229,231,32,239,240,224,226,224,32,237,224,32,238,248,232,225,234,243,0
|
||||
towerLossWarning db 207,238,240,224,230,229,237,232,229,32,45,32,226,238,231,226,240,224,242,32,226,32,245,238,235,235,32,234,224,231,232,237,238,0
|
||||
towerStartBtn db 91,207,208,206,193,197,203,93,32,194,32,193,206,201,0
|
||||
towerEscBtn db 91,69,83,67,93,32,209,193,197,198,192,210,220,0
|
||||
towerClearTitle db 221,210,192,198,32,199,192,215,200,217,197,205,33,32,194,208,192,195,32,207,206,194,197,208,198,197,205,33,0
|
||||
towerClearDesc db 194,240,224,227,32,239,238,226,229,240,230,229,237,33,32,194,239,229,240,229,228,232,32,237,238,226,251,233,32,253,242,224,230,46,0
|
||||
towerNextBtn db 91,207,208,206,193,197,203,93,32,196,192,203,220,216,197,0
|
||||
towerDefeatTitle db 194,219,32,207,192,203,200,32,194,32,192,196,209,202,206,201,32,193,192,216,205,197,46,46,46,0
|
||||
towerDefeatDesc db 194,224,248,224,32,228,243,248,224,32,237,224,226,229,234,232,32,241,227,238,240,229,235,224,32,226,32,192,228,243,46,0
|
||||
towerReturnBtn db 91,207,208,206,193,197,203,32,47,32,69,83,67,93,32,194,32,213,206,203,203,32,202,192,199,200,205,206,0
|
||||
towerChampTitle db 210,208,200,211,204,212,33,32,192,196,209,202,192,223,32,193,192,216,205,223,32,207,206,202,206,208,197,205,192,33,0
|
||||
towerChampSubtitle db 194,219,32,45,32,215,197,204,207,200,206,205,32,192,196,209,202,206,201,32,193,192,216,205,200,33,0
|
||||
towerPrizeText db 209,211,207,197,208,207,208,200,199,58,32,43,36,54,54,44,54,48,48,32,194,32,193,192,205,202,208,206,203,203,33,0
|
||||
towerHudBadge db 193,192,216,205,223,58,32,0
|
||||
towerHudOfTen db 47,49,48,0
|
||||
|
|
@ -312,6 +312,26 @@ bj_ready_input:
|
|||
jbe @F
|
||||
sub cbBet3D, 100
|
||||
@@:
|
||||
cmp tournamentMode, 1
|
||||
jne bj_regular_start
|
||||
cmp cbState3D, CB_RESULT
|
||||
jne bj_regular_start
|
||||
invoke Pressed3D, 20h
|
||||
test eax, eax
|
||||
jnz bj_tourney_report
|
||||
invoke Pressed3D, 0Dh
|
||||
test eax, eax
|
||||
jnz bj_tourney_report
|
||||
ret
|
||||
bj_tourney_report:
|
||||
cmp cbOutcome3D, 1
|
||||
je bj_tourney_loss
|
||||
invoke TowerReportRoundOutcome, 1
|
||||
ret
|
||||
bj_tourney_loss:
|
||||
invoke TowerReportRoundOutcome, 2
|
||||
ret
|
||||
bj_regular_start:
|
||||
invoke Pressed3D, 20h
|
||||
test eax, eax
|
||||
jz bj_input_done
|
||||
|
|
|
|||
|
|
@ -56,6 +56,11 @@ FreeNativeCoinArt3D ENDP
|
|||
|
||||
CoinEscape3D PROC
|
||||
mov paused3D,0
|
||||
cmp tournamentMode, 1
|
||||
jne @F
|
||||
call TowerExitToHall
|
||||
ret
|
||||
@@:
|
||||
cmp coin3d_state,COIN_TOSS
|
||||
jne coin_leave_hall
|
||||
mov coinExitQueued3D,1
|
||||
|
|
@ -149,6 +154,27 @@ coin_native_settle:
|
|||
coin_native_result:
|
||||
cmp coin3d_state,COIN_RESULT
|
||||
jne coin_native_mouse
|
||||
cmp tournamentMode, 1
|
||||
jne coin_regular_result
|
||||
invoke Pressed3D,20h
|
||||
test eax,eax
|
||||
jnz coin_tourney_report
|
||||
invoke Pressed3D,0Dh
|
||||
test eax,eax
|
||||
jnz coin_tourney_report
|
||||
cmp mouseClick3D,0
|
||||
je coin_native_done
|
||||
mov mouseClick3D,0
|
||||
coin_tourney_report:
|
||||
call CloseCoinDetail3D
|
||||
cmp coin3d_win, 0
|
||||
je @F
|
||||
invoke TowerReportRoundOutcome, 1
|
||||
ret
|
||||
@@:
|
||||
invoke TowerReportRoundOutcome, 2
|
||||
ret
|
||||
coin_regular_result:
|
||||
invoke Pressed3D,20h
|
||||
test eax,eax
|
||||
jnz coin_native_again
|
||||
|
|
|
|||
|
|
@ -870,6 +870,18 @@ dk_ready_input:
|
|||
test eax, eax
|
||||
jz dk_input_done
|
||||
dk_ready_start:
|
||||
cmp tournamentMode, 1
|
||||
jne @F
|
||||
cmp dkState3D, DK_RESULT
|
||||
jne @F
|
||||
cmp dkOutcome3D, 0
|
||||
jne dk_tourney_loss
|
||||
invoke TowerReportRoundOutcome, 1
|
||||
ret
|
||||
dk_tourney_loss:
|
||||
invoke TowerReportRoundOutcome, 2
|
||||
ret
|
||||
@@:
|
||||
call StartNativeDurak3D
|
||||
dk_input_done:
|
||||
ret
|
||||
|
|
|
|||
|
|
@ -551,6 +551,26 @@ poker_ready_input:
|
|||
jbe @F
|
||||
sub pkBlind3D, 50
|
||||
@@:
|
||||
cmp tournamentMode, 1
|
||||
jne poker_regular_start
|
||||
cmp pkState3D, PK_RESULT
|
||||
jne poker_regular_start
|
||||
invoke Pressed3D, 20h
|
||||
test eax, eax
|
||||
jnz poker_tourney_report
|
||||
invoke Pressed3D, 0Dh
|
||||
test eax, eax
|
||||
jnz poker_tourney_report
|
||||
ret
|
||||
poker_tourney_report:
|
||||
cmp pkOutcome3D, 1
|
||||
je poker_tourney_loss
|
||||
invoke TowerReportRoundOutcome, 1
|
||||
ret
|
||||
poker_tourney_loss:
|
||||
invoke TowerReportRoundOutcome, 2
|
||||
ret
|
||||
poker_regular_start:
|
||||
invoke Pressed3D, 20h
|
||||
test eax, eax
|
||||
jz poker_input_done
|
||||
|
|
|
|||
|
|
@ -304,6 +304,27 @@ wheel_mouse_clear:
|
|||
call InitNativeWheel3D
|
||||
ret
|
||||
wheel_spin_input:
|
||||
cmp roulState, 2
|
||||
jne wheel_regular_spin
|
||||
cmp tournamentMode, 1
|
||||
jne wheel_regular_spin
|
||||
invoke Pressed3D, 20h
|
||||
test eax, eax
|
||||
jnz wheel_tourney_report
|
||||
invoke Pressed3D, 0Dh
|
||||
test eax, eax
|
||||
jnz wheel_tourney_report
|
||||
ret
|
||||
wheel_tourney_report:
|
||||
mov ecx, wheelReturn3D
|
||||
cmp ecx, wheelStake3D
|
||||
ja wheel_tourney_win
|
||||
invoke TowerReportRoundOutcome, 2
|
||||
ret
|
||||
wheel_tourney_win:
|
||||
invoke TowerReportRoundOutcome, 1
|
||||
ret
|
||||
wheel_regular_spin:
|
||||
invoke Pressed3D, 20h
|
||||
test eax, eax
|
||||
jz wheel_handle_done
|
||||
|
|
|
|||
|
|
@ -312,6 +312,24 @@ rr_input_fire:
|
|||
mov rr3d_timer, 0
|
||||
ret
|
||||
rr_input_next:
|
||||
cmp tournamentMode, 1
|
||||
jne @F
|
||||
invoke Pressed3D, 20h
|
||||
test eax, eax
|
||||
jnz rr_tourney_report
|
||||
invoke Pressed3D, 0Dh
|
||||
test eax, eax
|
||||
jnz rr_tourney_report
|
||||
ret
|
||||
rr_tourney_report:
|
||||
cmp rr3d_state, RR_WIN
|
||||
jne rr_tourney_loss
|
||||
invoke TowerReportRoundOutcome, 1
|
||||
ret
|
||||
rr_tourney_loss:
|
||||
invoke TowerReportRoundOutcome, 2
|
||||
ret
|
||||
@@:
|
||||
invoke Pressed3D, 20h
|
||||
test eax, eax
|
||||
jz rr_input_done
|
||||
|
|
|
|||
116
tools/generators/generate_hell_tower_data.py
Normal file
116
tools/generators/generate_hell_tower_data.py
Normal file
|
|
@ -0,0 +1,116 @@
|
|||
def make_db(s):
|
||||
b = s.encode('cp1251')
|
||||
return ','.join(str(x) for x in b) + ',0'
|
||||
|
||||
bosses = [
|
||||
'БЕС АЗАРТА',
|
||||
'ДЕМОН КОСТЕЙ',
|
||||
'ЧЕРНОКНИЖНИК',
|
||||
'КРУПЬЕ ПРЕИСПОДНЕЙ',
|
||||
'ДЕМОН БЛЕФА',
|
||||
'ОБРЕЧЕННЫЙ ГРЕШНИК',
|
||||
'КОЛЕСО СУДЬБЫ',
|
||||
'КАРТОЧНЫЙ ЧЕРТ',
|
||||
'ПАЛАЧ КРЮКА',
|
||||
'ВЛАДЫКА БАШНИ'
|
||||
]
|
||||
|
||||
games = [
|
||||
'Орел и решка',
|
||||
'Кости',
|
||||
'Черепа и шарик',
|
||||
'21 / Очко',
|
||||
'Покер',
|
||||
'Русская рулетка',
|
||||
'Казино-рулетка',
|
||||
'Дурак',
|
||||
'Крюк: Skill Check',
|
||||
'Buckshot Roulette'
|
||||
]
|
||||
|
||||
descs = [
|
||||
'Угадай сторону монеты.',
|
||||
'Перебрось демона в сумме костей.',
|
||||
'Найди душу под черепом.',
|
||||
'Собери 21 очко и победи крупье.',
|
||||
'Вскрой карты и победи в покер.',
|
||||
'1 патрон в барабане: выживи.',
|
||||
'Сделай ставку на рулетке.',
|
||||
'Оставь чёрта в дураках.',
|
||||
'Попади в зону и сорвись с крюка.',
|
||||
'Дуэль на дробовиках за жизнь!'
|
||||
]
|
||||
|
||||
lines = []
|
||||
lines.append('; --- hell_tower_data.inc: Data for Hell Tower 3D ---')
|
||||
lines.append('MODE_HELL_TOWER equ 22')
|
||||
lines.append('TOWER_STATE_BRIEFING equ 0')
|
||||
lines.append('TOWER_STATE_IN_GAME equ 1')
|
||||
lines.append('TOWER_STATE_CLEAR equ 2')
|
||||
lines.append('TOWER_STATE_DEFEAT equ 3')
|
||||
lines.append('TOWER_STATE_CHAMPION equ 4')
|
||||
lines.append('')
|
||||
lines.append('InitHellTower3D PROTO')
|
||||
lines.append('TowerExitToHall PROTO')
|
||||
lines.append('TowerReportRoundOutcome PROTO :DWORD')
|
||||
lines.append('RenderTowerInGameBadge PROTO')
|
||||
lines.append('')
|
||||
lines.append('.data')
|
||||
lines.append('towerStage dd 1')
|
||||
lines.append('towerFloorState dd 0')
|
||||
lines.append('towerAnimClock dd 0')
|
||||
lines.append('towerCurrentGame dd 0')
|
||||
lines.append('towerPrizeAmount dd 66600')
|
||||
lines.append('towerHudText db 91,32,0')
|
||||
lines.append('')
|
||||
lines.append('towerFloorModes dd MODE_COIN, MODE_DICE, MODE_SKULLS, MODE_BLACKJACK, MODE_POKER, MODE_RUSSIAN, MODE_ROULETTE, MODE_DURAK, MODE_SKILL, MODE_BUCKSHOT')
|
||||
lines.append('')
|
||||
|
||||
for i, b in enumerate(bosses):
|
||||
lines.append(f'towerBoss{i+1} db {make_db(b)}')
|
||||
lines.append('')
|
||||
lines.append('towerBossNames dd ' + ', '.join(f'OFFSET towerBoss{i+1}' for i in range(10)))
|
||||
lines.append('')
|
||||
|
||||
for i, g in enumerate(games):
|
||||
lines.append(f'towerGame{i+1} db {make_db(g)}')
|
||||
lines.append('')
|
||||
lines.append('towerGameNames dd ' + ', '.join(f'OFFSET towerGame{i+1}' for i in range(10)))
|
||||
lines.append('')
|
||||
|
||||
for i, d in enumerate(descs):
|
||||
lines.append(f'towerDesc{i+1} db {make_db(d)}')
|
||||
lines.append('')
|
||||
lines.append('towerDescriptions dd ' + ', '.join(f'OFFSET towerDesc{i+1}' for i in range(10)))
|
||||
lines.append('')
|
||||
|
||||
ui_texts = {
|
||||
'towerHeader': 'КАЗИНО 3D - АДСКАЯ БАШНЯ',
|
||||
'towerFloorPrefix': 'ЭТАЖ ',
|
||||
'towerOfTen': ' / 10',
|
||||
'towerEnemyLabel': 'ВРАГ: ',
|
||||
'towerGameLabel': 'ИГРА: ',
|
||||
'towerRuleText': '10 битв подряд без права на ошибку',
|
||||
'towerLossWarning': 'Поражение - возврат в холл казино',
|
||||
'towerStartBtn': '[ПРОБЕЛ] В БОЙ',
|
||||
'towerEscBtn': '[ESC] СБЕЖАТЬ',
|
||||
'towerClearTitle': 'ЭТАЖ ЗАЧИЩЕН! ВРАГ ПОВЕРЖЕН!',
|
||||
'towerClearDesc': 'Враг повержен! Впереди новый этаж.',
|
||||
'towerNextBtn': '[ПРОБЕЛ] ДАЛЬШЕ',
|
||||
'towerDefeatTitle': 'ВЫ ПАЛИ В АДСКОЙ БАШНЕ...',
|
||||
'towerDefeatDesc': 'Ваша душа навеки сгорела в Аду.',
|
||||
'towerReturnBtn': '[ПРОБЕЛ / ESC] В ХОЛЛ КАЗИНО',
|
||||
'towerChampTitle': 'ТРИУМФ! АДСКАЯ БАШНЯ ПОКОРЕНА!',
|
||||
'towerChampSubtitle': 'ВЫ - ЧЕМПИОН АДСКОЙ БАШНИ!',
|
||||
'towerPrizeText': 'СУПЕРПРИЗ: +$66,600 В БАНКРОЛЛ!',
|
||||
'towerHudBadge': 'БАШНЯ: ',
|
||||
'towerHudOfTen': '/10',
|
||||
}
|
||||
|
||||
for k, v in ui_texts.items():
|
||||
lines.append(f'{k} db {make_db(v)}')
|
||||
|
||||
with open('src_graphics/hell_tower_data.inc', 'wb') as f:
|
||||
f.write(('\n'.join(lines) + '\n').encode('ascii'))
|
||||
|
||||
print('hell_tower_data.inc regenerated with compact strings.')
|
||||
Loading…
Add table
Reference in a new issue