feat(charms): port and integrate roguelike charms system into 3D casino
- Add 4 unique charms: Clover of Luck, Golden Horseshoe, Skull of Immortality, Devil's Contract - Add Sidorovich shop tabs ([РУБАШКИ] / [ТАЛИСМАНЫ]) with TAB/arrow navigation and purchases - Extend casino3d-progress.dat to 32 bytes with backward-compatible save/load - Hook event triggers into Blackjack, Poker, Durak, Coin, Dice, Scratch, Slots, Roulette, Russian Roulette, Buckshot, and Hell Tower - Display active charm badges on HUD and Hell Tower briefing
This commit is contained in:
parent
2c1b83865a
commit
fed880cce2
21 changed files with 8574 additions and 7989 deletions
Binary file not shown.
14
casino3d.inc
14
casino3d.inc
|
|
@ -170,6 +170,7 @@ include src_graphics\native_coin_data.inc
|
|||
include src_graphics\native_dice_data.inc
|
||||
include src_graphics\scratch_data.inc
|
||||
include src_graphics\hell_tower_data.inc
|
||||
include src_graphics\charms_data.inc
|
||||
|
||||
.data
|
||||
ALIGN 4
|
||||
|
|
@ -1337,10 +1338,14 @@ RenderHUD PROC uses ebx esi edi
|
|||
invoke DrawBox, 159, 118, 2, 5, 00E7DFC8h
|
||||
invoke DrawBox, 157, 120, 6, 1, 00E7DFC8h
|
||||
cmp interactPromptPtr, 0
|
||||
je @F
|
||||
je hud_charms_bottom
|
||||
invoke DrawBoxBorder, 4, 199, 312, 18, 0014191Dh, 00D8BC6Ah, 1
|
||||
invoke DrawString8x8, 10, 204, interactPromptPtr, 00F5E2B0h
|
||||
@@:
|
||||
invoke DrawCharmsHUD, 8, 18
|
||||
jmp hud_charms_done
|
||||
hud_charms_bottom:
|
||||
invoke DrawCharmsHUD, 8, 214
|
||||
hud_charms_done:
|
||||
cmp flashTimer, 0
|
||||
je hud_finished
|
||||
dec flashTimer
|
||||
|
|
@ -3226,7 +3231,11 @@ dice_check_win:
|
|||
dice_roll_lost:
|
||||
mov dice3d_win, 0
|
||||
mov dice3d_state, 2
|
||||
invoke TriggerCharmLossProtection, dice3d_bet
|
||||
test eax, eax
|
||||
jnz @F
|
||||
invoke PlayCasinoSound3D, OFFSET soundLose, 0, 1
|
||||
@@:
|
||||
invoke NpcRecordRound3D,8,0
|
||||
call SaveProgress3D
|
||||
ret
|
||||
|
|
@ -5105,6 +5114,7 @@ include src_graphics\buckshot.inc
|
|||
include src_graphics\russian_table.inc
|
||||
include src_graphics\unavailable.inc
|
||||
include src_graphics\hell_tower.inc
|
||||
include src_graphics\charms.inc
|
||||
|
||||
; --- Main Loop of the 3D Casino Engine ---
|
||||
StartHellTower3D PROC uses ebx esi edi
|
||||
|
|
|
|||
BIN
poker.exe
BIN
poker.exe
Binary file not shown.
BIN
poker.obj
BIN
poker.obj
Binary file not shown.
File diff suppressed because it is too large
Load diff
204
src_graphics/charms.inc
Normal file
204
src_graphics/charms.inc
Normal file
|
|
@ -0,0 +1,204 @@
|
|||
|
||||
.code
|
||||
|
||||
; ------------------------------------------------------------------------------
|
||||
; TriggerCharmLossProtection: Checks Devil's Contract and Clover to save bet
|
||||
; Input: betAmount (DWORD)
|
||||
; Output: eax = 1 if saved (bet refunded to bankroll), 0 if not saved
|
||||
; ------------------------------------------------------------------------------
|
||||
TriggerCharmLossProtection PROC uses ebx ecx edx, betAmount:DWORD
|
||||
; 1. Check Devil's Contract (50% chance to refund full bet)
|
||||
cmp charmDevilUses, 0
|
||||
jle check_clover
|
||||
|
||||
invoke RandomRange, 100
|
||||
cmp eax, 50
|
||||
jge check_clover
|
||||
|
||||
; Devil Contract Triggered!
|
||||
dec charmDevilUses
|
||||
mov eax, betAmount
|
||||
test eax, eax
|
||||
jz @F
|
||||
add bankroll, eax
|
||||
@@:
|
||||
invoke CopyString3D, OFFSET msgCharmDevilSave, OFFSET flashMessage
|
||||
mov flashTimer, 120
|
||||
invoke PlayCasinoSound3D, OFFSET soundJackpot, 0, 1
|
||||
call SaveProgress3D
|
||||
mov eax, 1
|
||||
ret
|
||||
|
||||
check_clover:
|
||||
; 2. Check Clover of Luck (15% chance to refund bet)
|
||||
cmp charmCloverUses, 0
|
||||
jle protection_none
|
||||
|
||||
invoke RandomRange, 100
|
||||
cmp eax, 15
|
||||
jge protection_none
|
||||
|
||||
; Clover Triggered!
|
||||
dec charmCloverUses
|
||||
mov eax, betAmount
|
||||
test eax, eax
|
||||
jz @F
|
||||
add bankroll, eax
|
||||
@@:
|
||||
invoke CopyString3D, OFFSET msgCharmCloverSave, OFFSET flashMessage
|
||||
mov flashTimer, 120
|
||||
invoke PlayCasinoSound3D, OFFSET soundJackpot, 0, 1
|
||||
call SaveProgress3D
|
||||
mov eax, 1
|
||||
ret
|
||||
|
||||
protection_none:
|
||||
xor eax, eax
|
||||
ret
|
||||
TriggerCharmLossProtection ENDP
|
||||
|
||||
; ------------------------------------------------------------------------------
|
||||
; TriggerCharmWinBonus: Grants +15% extra payout on slot / roulette win
|
||||
; Input: winAmount (DWORD)
|
||||
; Output: eax = bonus amount added to bankroll, 0 if no horseshoe active
|
||||
; ------------------------------------------------------------------------------
|
||||
TriggerCharmWinBonus PROC uses ebx ecx edx, winAmount:DWORD
|
||||
cmp charmHorseshoeUses, 0
|
||||
jle bonus_none
|
||||
|
||||
mov eax, winAmount
|
||||
test eax, eax
|
||||
jle bonus_none
|
||||
|
||||
; Calculate 15% bonus: (winAmount * 15) / 100
|
||||
imul eax, 15
|
||||
xor edx, edx
|
||||
mov ecx, 100
|
||||
div ecx
|
||||
cmp eax, 1
|
||||
jge @F
|
||||
mov eax, 1
|
||||
@@:
|
||||
mov ebx, eax
|
||||
add bankroll, ebx
|
||||
dec charmHorseshoeUses
|
||||
invoke CopyString3D, OFFSET msgCharmHorseshoeWin, OFFSET flashMessage
|
||||
mov flashTimer, 120
|
||||
invoke PlayCasinoSound3D, OFFSET soundCoin, 0, 1
|
||||
call SaveProgress3D
|
||||
mov eax, ebx
|
||||
ret
|
||||
|
||||
bonus_none:
|
||||
xor eax, eax
|
||||
ret
|
||||
TriggerCharmWinBonus ENDP
|
||||
|
||||
; ------------------------------------------------------------------------------
|
||||
; TriggerCharmBulletProtection: Protects player from fatal gunshot
|
||||
; Output: eax = 1 if saved (bullet misfired), 0 if no skull active
|
||||
; ------------------------------------------------------------------------------
|
||||
TriggerCharmBulletProtection PROC uses ebx ecx edx
|
||||
cmp charmSkullUses, 0
|
||||
jle bullet_none
|
||||
|
||||
dec charmSkullUses
|
||||
invoke CopyString3D, OFFSET msgCharmSkullSave, OFFSET flashMessage
|
||||
mov flashTimer, 140
|
||||
invoke PlayCasinoSound3D, OFFSET rrDrySound3D, 0, 1
|
||||
call SaveProgress3D
|
||||
mov eax, 1
|
||||
ret
|
||||
|
||||
bullet_none:
|
||||
xor eax, eax
|
||||
ret
|
||||
TriggerCharmBulletProtection ENDP
|
||||
|
||||
; ------------------------------------------------------------------------------
|
||||
; DrawCharmsHUD: Draws active charm badges with remaining charges
|
||||
; Input: drawX, drawY (screen coordinates)
|
||||
; ------------------------------------------------------------------------------
|
||||
DrawCharmsHUD PROC uses ebx esi edi, drawX:DWORD, drawY:DWORD
|
||||
local curX:DWORD, tempBuf[16]:BYTE
|
||||
|
||||
mov eax, charmCloverUses
|
||||
or eax, charmHorseshoeUses
|
||||
or eax, charmSkullUses
|
||||
or eax, charmDevilUses
|
||||
test eax, eax
|
||||
jz hud_done
|
||||
|
||||
mov eax, drawX
|
||||
mov curX, eax
|
||||
|
||||
; 1. Clover Badge
|
||||
cmp charmCloverUses, 0
|
||||
jle check_horse_hud
|
||||
|
||||
invoke DrawString8x8, curX, drawY, OFFSET badgeCloverPrefix, 0080FF80h
|
||||
add curX, 32
|
||||
invoke FormatNumber, charmCloverUses, ADDR tempBuf
|
||||
invoke DrawString8x8, curX, drawY, ADDR tempBuf, 00FFFFFFh
|
||||
cmp charmCloverUses, 10
|
||||
jb @F
|
||||
add curX, 8
|
||||
@@:
|
||||
add curX, 8
|
||||
invoke DrawString8x8, curX, drawY, OFFSET badgeCloseBracket, 0080FF80h
|
||||
add curX, 16
|
||||
|
||||
check_horse_hud:
|
||||
; 2. Horseshoe Badge
|
||||
cmp charmHorseshoeUses, 0
|
||||
jle check_skull_hud
|
||||
|
||||
invoke DrawString8x8, curX, drawY, OFFSET badgeHorsePrefix, 00FFE060h
|
||||
add curX, 32
|
||||
invoke FormatNumber, charmHorseshoeUses, ADDR tempBuf
|
||||
invoke DrawString8x8, curX, drawY, ADDR tempBuf, 00FFFFFFh
|
||||
cmp charmHorseshoeUses, 10
|
||||
jb @F
|
||||
add curX, 8
|
||||
@@:
|
||||
add curX, 8
|
||||
invoke DrawString8x8, curX, drawY, OFFSET badgeCloseBracket, 00FFE060h
|
||||
add curX, 16
|
||||
|
||||
check_skull_hud:
|
||||
; 3. Skull Badge
|
||||
cmp charmSkullUses, 0
|
||||
jle check_devil_hud
|
||||
|
||||
invoke DrawString8x8, curX, drawY, OFFSET badgeSkullPrefix, 0080FFFFh
|
||||
add curX, 32
|
||||
invoke FormatNumber, charmSkullUses, ADDR tempBuf
|
||||
invoke DrawString8x8, curX, drawY, ADDR tempBuf, 00FFFFFFh
|
||||
cmp charmSkullUses, 10
|
||||
jb @F
|
||||
add curX, 8
|
||||
@@:
|
||||
add curX, 8
|
||||
invoke DrawString8x8, curX, drawY, OFFSET badgeCloseBracket, 0080FFFFh
|
||||
add curX, 16
|
||||
|
||||
check_devil_hud:
|
||||
; 4. Devil Contract Badge
|
||||
cmp charmDevilUses, 0
|
||||
jle hud_done
|
||||
|
||||
invoke DrawString8x8, curX, drawY, OFFSET badgeDevilPrefix, 00FF6060h
|
||||
add curX, 32
|
||||
invoke FormatNumber, charmDevilUses, ADDR tempBuf
|
||||
invoke DrawString8x8, curX, drawY, ADDR tempBuf, 00FFFFFFh
|
||||
cmp charmDevilUses, 10
|
||||
jb @F
|
||||
add curX, 8
|
||||
@@:
|
||||
add curX, 8
|
||||
invoke DrawString8x8, curX, drawY, OFFSET badgeCloseBracket, 00FF6060h
|
||||
add curX, 16
|
||||
|
||||
hud_done:
|
||||
ret
|
||||
DrawCharmsHUD ENDP
|
||||
58
src_graphics/charms_data.inc
Normal file
58
src_graphics/charms_data.inc
Normal file
|
|
@ -0,0 +1,58 @@
|
|||
CHARM_COUNT equ 4
|
||||
|
||||
CHARM_CLOVER_PRICE equ 12000
|
||||
CHARM_CLOVER_USES equ 3
|
||||
|
||||
CHARM_HORSESHOE_PRICE equ 20000
|
||||
CHARM_HORSESHOE_USES equ 5
|
||||
|
||||
CHARM_SKULL_PRICE equ 35000
|
||||
CHARM_SKULL_USES equ 1
|
||||
|
||||
CHARM_DEVIL_PRICE equ 50000
|
||||
CHARM_DEVIL_USES equ 2
|
||||
|
||||
TriggerCharmLossProtection PROTO :DWORD
|
||||
TriggerCharmWinBonus PROTO :DWORD
|
||||
TriggerCharmBulletProtection PROTO
|
||||
DrawCharmsHUD PROTO :DWORD, :DWORD
|
||||
|
||||
.data
|
||||
|
||||
; Active Charm Charges
|
||||
charmCloverUses dd 0
|
||||
charmHorseshoeUses dd 0
|
||||
charmSkullUses dd 0
|
||||
charmDevilUses dd 0
|
||||
|
||||
; Charm Store Metadata
|
||||
charmPrices3D dd CHARM_CLOVER_PRICE, CHARM_HORSESHOE_PRICE, CHARM_SKULL_PRICE, CHARM_DEVIL_PRICE
|
||||
charmUsesPack3D dd CHARM_CLOVER_USES, CHARM_HORSESHOE_USES, CHARM_SKULL_USES, CHARM_DEVIL_USES
|
||||
|
||||
charmNameClover db 'Êëåâåð Óäà÷è',0
|
||||
charmNameHorseshoe db 'Çîëîòàÿ Ïîäêîâà',0
|
||||
charmNameSkull db '×åðåï Áåññìåðòèÿ',0
|
||||
charmNameDevil db 'Êîíòðàêò Äüÿâîëà',0
|
||||
|
||||
charmNames3D dd OFFSET charmNameClover, OFFSET charmNameHorseshoe, OFFSET charmNameSkull, OFFSET charmNameDevil
|
||||
|
||||
charmDescClover db '15% øàíñ ñïàñòè ñòàâêó',0
|
||||
charmDescHorseshoe db '+15% ê âûèãðûøó â ñëîòàõ',0
|
||||
charmDescSkull db '100% ñïàñåíèå îò ïóëè',0
|
||||
charmDescDevil db '50% øàíñ ñïàñòè ñòàâêó',0
|
||||
|
||||
charmDescs3D dd OFFSET charmDescClover, OFFSET charmDescHorseshoe, OFFSET charmDescSkull, OFFSET charmDescDevil
|
||||
|
||||
; HUD Flash Messages
|
||||
msgCharmCloverSave db 'Êëåâåð ñïàñ âàøó ñòàâêó!',0
|
||||
msgCharmDevilSave db 'Äüÿâîë: ñòàâêà âîçâðàùåíà!',0
|
||||
msgCharmHorseshoeWin db 'Ïîäêîâà: +15% ê âûèãðûøó!',0
|
||||
msgCharmSkullSave db '×åðåï: Îñå÷êà! Âû âûæèëè!',0
|
||||
msgCharmTowerSave db 'Òàëèñìàí ñïàñ âàñ îò ïàäåíèÿ ñ Áàøíè!',0
|
||||
|
||||
; Compact HUD Badges
|
||||
badgeCloverPrefix db '[ÊË:',0
|
||||
badgeHorsePrefix db '[ÏÊ:',0
|
||||
badgeSkullPrefix db '[×Ð:',0
|
||||
badgeDevilPrefix db '[ÊÒ:',0
|
||||
badgeCloseBracket db '] ',0
|
||||
|
|
@ -1,364 +1,375 @@
|
|||
; --- 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
|
||||
; --- 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:
|
||||
invoke TriggerCharmLossProtection, 0
|
||||
test eax, eax
|
||||
jz @F
|
||||
mov towerFloorState, TOWER_STATE_BRIEFING
|
||||
invoke CopyString3D, OFFSET msgCharmTowerSave, OFFSET flashMessage
|
||||
mov flashTimer, 140
|
||||
mov engineMode, MODE_HELL_TOWER
|
||||
call ClearKeys3D
|
||||
ret
|
||||
@@:
|
||||
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
|
||||
invoke DrawCharmsHUD, 130, 42
|
||||
|
||||
; 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
|
||||
|
|
|
|||
|
|
@ -1,42 +1,49 @@
|
|||
BeginMerchant3D PROTO
|
||||
HandleMerchant3D PROTO
|
||||
RenderMerchant3D PROTO
|
||||
BuyMerchantBack3D PROTO :DWORD
|
||||
.data
|
||||
merchantSelected3D dd 0
|
||||
merchantTime3D dd 0
|
||||
merchantReaction3D dd 1200
|
||||
merchantReactionKind3D dd 1
|
||||
merchantPreviousFocus3D dd 0
|
||||
merchantMessage3D dd 0
|
||||
merchantPrices3D dd 0,3000,3000,10000,12000,15000,17000,18000,20000,22000,22000,23000,24000
|
||||
merchantGrey3D db 209,197,208,197,193,208,206,0
|
||||
merchantBlue3D db 209,192,207,212,200,208,206,194,192,223,32,194,206,203,205,192,0
|
||||
merchantRed3D db 193,192,195,208,206,194,219,201,32,202,208,197,209,210,0
|
||||
merchantGold3D db 199,206,203,206,210,206,197,32,209,206,203,205,214,197,0
|
||||
merchantSkull3D db 215,197,208,197,207,32,200,32,208,206,199,219,0
|
||||
merchantClover3D db 202,203,197,194,197,208,0
|
||||
merchantArcane3D db 192,208,202,192,205,192,0
|
||||
merchantNoir3D db 205,211,192,208,0
|
||||
merchantDiamond3D db 192,203,204,192,199,0
|
||||
merchantRider3D db 205,192,197,199,196,205,200,202,0
|
||||
merchantBee3D db 207,215,197,203,192,0
|
||||
merchantFan3D db 194,197,197,208,0
|
||||
merchantWeb3D db 207,192,211,210,200,205,192,0
|
||||
merchantNames3D dd OFFSET merchantGrey3D,OFFSET merchantBlue3D,OFFSET merchantRed3D
|
||||
dd OFFSET merchantGold3D,OFFSET merchantSkull3D,OFFSET merchantClover3D
|
||||
dd OFFSET merchantArcane3D,OFFSET merchantNoir3D,OFFSET merchantDiamond3D
|
||||
dd OFFSET merchantRider3D,OFFSET merchantBee3D,OFFSET merchantFan3D,OFFSET merchantWeb3D
|
||||
merchantTitle3D db 209,200,196,206,208,206,194,200,215,0
|
||||
merchantStock3D db 208,211,193,192,216,202,200,0
|
||||
merchantBuy3D db 202,211,207,200,210,220,0
|
||||
merchantOwned3D db 197,209,210,220,0
|
||||
merchantEquipped3D db 205,192,196,197,210,206,0
|
||||
merchantPoor3D db 204,192,203,206,32,212,200,216,197,202,0
|
||||
merchantShopKeys3D db 194,194,197,208,213,47,194,205,200,199,32,32,69,78,84,69,82,58,32,202,211,207,200,210,220,32,32,69,83,67,58,32
|
||||
db 213,206,203,203,0
|
||||
merchantHello3D db 207,206,209,204,206,210,208,200,44,32,215,210,206,32,197,209,210,220,46,0
|
||||
merchantThanks3D db 213,206,208,206,216,200,201,32,194,219,193,206,208,46,0
|
||||
merchantArrowUp3D db "^",0
|
||||
merchantArrowDown3D db "v",0
|
||||
.code
|
||||
BeginMerchant3D PROTO
|
||||
HandleMerchant3D PROTO
|
||||
RenderMerchant3D PROTO
|
||||
BuyMerchantBack3D PROTO :DWORD
|
||||
BuyMerchantCharm3D PROTO :DWORD
|
||||
.data
|
||||
merchantTab3D dd 0
|
||||
merchantCharmSelected3D dd 0
|
||||
merchantSelected3D dd 0
|
||||
merchantTime3D dd 0
|
||||
merchantReaction3D dd 1200
|
||||
merchantReactionKind3D dd 1
|
||||
merchantPreviousFocus3D dd 0
|
||||
merchantMessage3D dd 0
|
||||
merchantPrices3D dd 0,3000,3000,10000,12000,15000,17000,18000,20000,22000,22000,23000,24000
|
||||
merchantGrey3D db 209,197,208,197,193,208,206,0
|
||||
merchantBlue3D db 209,192,207,212,200,208,206,194,192,223,32,194,206,203,205,192,0
|
||||
merchantRed3D db 193,192,195,208,206,194,219,201,32,202,208,197,209,210,0
|
||||
merchantGold3D db 199,206,203,206,210,206,197,32,209,206,203,205,214,197,0
|
||||
merchantSkull3D db 215,197,208,197,207,32,200,32,208,206,199,219,0
|
||||
merchantClover3D db 202,203,197,194,197,208,0
|
||||
merchantArcane3D db 192,208,202,192,205,192,0
|
||||
merchantNoir3D db 205,211,192,208,0
|
||||
merchantDiamond3D db 192,203,204,192,199,0
|
||||
merchantRider3D db 205,192,197,199,196,205,200,202,0
|
||||
merchantBee3D db 207,215,197,203,192,0
|
||||
merchantFan3D db 194,197,197,208,0
|
||||
merchantWeb3D db 207,192,211,210,200,205,192,0
|
||||
merchantNames3D dd OFFSET merchantGrey3D,OFFSET merchantBlue3D,OFFSET merchantRed3D
|
||||
dd OFFSET merchantGold3D,OFFSET merchantSkull3D,OFFSET merchantClover3D
|
||||
dd OFFSET merchantArcane3D,OFFSET merchantNoir3D,OFFSET merchantDiamond3D
|
||||
dd OFFSET merchantRider3D,OFFSET merchantBee3D,OFFSET merchantFan3D,OFFSET merchantWeb3D
|
||||
merchantTitle3D db 209,200,196,206,208,206,194,200,215,0
|
||||
merchantStock3D db 208,211,193,192,216,202,200,0
|
||||
merchantBuy3D db 202,211,207,200,210,220,0
|
||||
merchantOwned3D db 197,209,210,220,0
|
||||
merchantEquipped3D db 205,192,196,197,210,206,0
|
||||
merchantPoor3D db 204,192,203,206,32,212,200,216,197,202,0
|
||||
merchantShopKeys3D db 194,194,197,208,213,47,194,205,200,199,32,32,69,78,84,69,82,58,32,202,211,207,200,210,220,32,32,69,83,67,58,32
|
||||
db 213,206,203,203,0
|
||||
merchantTabCharmsLabel db 210,192,203,200,209,204,192,205,219,0
|
||||
merchantDollar3D db '$',0
|
||||
merchantStockUsesLabel db 199,224,240,58,32,0
|
||||
merchantShopKeysWithTabs db 84,65,66,58,32,194,234,235,224,228,234,224,32,32,69,78,84,69,82,58,32,202,243,239,232,242,252,32,32,69,83,67,58,32,213,238,235,235,0
|
||||
merchantHello3D db 207,206,209,204,206,210,208,200,44,32,215,210,206,32,197,209,210,220,46,0
|
||||
merchantThanks3D db 213,206,208,206,216,200,201,32,194,219,193,206,208,46,0
|
||||
merchantArrowUp3D db "^",0
|
||||
merchantArrowDown3D db "v",0
|
||||
.code
|
||||
|
|
|
|||
|
|
@ -4,6 +4,8 @@ BeginMerchant3D PROC
|
|||
mov merchantTime3D, 0
|
||||
mov merchantReaction3D, 1280
|
||||
mov merchantMessage3D, 0
|
||||
mov merchantTab3D, 0
|
||||
mov merchantCharmSelected3D, 0
|
||||
mov eax, selectedBack3D
|
||||
cmp eax, 12
|
||||
jbe @F
|
||||
|
|
@ -46,6 +48,48 @@ merchant_purchase_done:
|
|||
ret
|
||||
BuyMerchantBack3D ENDP
|
||||
|
||||
BuyMerchantCharm3D PROC uses ebx charmIndex:DWORD
|
||||
mov ebx, charmIndex
|
||||
cmp ebx, 3
|
||||
ja charm_purchase_done
|
||||
mov eax, charmPrices3D[ebx*4]
|
||||
cmp bankroll, eax
|
||||
jb charm_purchase_poor
|
||||
sub bankroll, eax
|
||||
mov ecx, charmUsesPack3D[ebx*4]
|
||||
cmp ebx, 0
|
||||
jne @F
|
||||
add charmCloverUses, ecx
|
||||
jmp charm_bought
|
||||
@@:
|
||||
cmp ebx, 1
|
||||
jne @F
|
||||
add charmHorseshoeUses, ecx
|
||||
jmp charm_bought
|
||||
@@:
|
||||
cmp ebx, 2
|
||||
jne @F
|
||||
add charmSkullUses, ecx
|
||||
jmp charm_bought
|
||||
@@:
|
||||
cmp ebx, 3
|
||||
jne charm_bought
|
||||
add charmDevilUses, ecx
|
||||
charm_bought:
|
||||
mov merchantMessage3D, 1
|
||||
mov merchantReaction3D, 0
|
||||
mov merchantReactionKind3D, 2
|
||||
call SaveProgress3D
|
||||
invoke PlayCasinoSound3D, OFFSET soundCoin, 0, 1
|
||||
ret
|
||||
charm_purchase_poor:
|
||||
mov merchantMessage3D, 2
|
||||
mov merchantReaction3D, 0
|
||||
mov merchantReactionKind3D, 1
|
||||
charm_purchase_done:
|
||||
ret
|
||||
BuyMerchantCharm3D ENDP
|
||||
|
||||
HandleMerchant3D PROC uses ebx
|
||||
mov eax, merchantSelected3D
|
||||
cmp eax, merchantPreviousFocus3D
|
||||
|
|
@ -57,6 +101,27 @@ HandleMerchant3D PROC uses ebx
|
|||
mov eax, deltaTime3D
|
||||
add merchantTime3D, eax
|
||||
add merchantReaction3D, eax
|
||||
|
||||
; TAB (09h), Left Arrow (25h), Right Arrow (27h) toggle tabs
|
||||
invoke Pressed3D, 09h
|
||||
test eax, eax
|
||||
jnz merchant_tab_toggle
|
||||
invoke Pressed3D, 25h
|
||||
test eax, eax
|
||||
jnz merchant_tab_toggle
|
||||
invoke Pressed3D, 27h
|
||||
test eax, eax
|
||||
jz @F
|
||||
merchant_tab_toggle:
|
||||
xor merchantTab3D, 1
|
||||
mov merchantReaction3D, 0
|
||||
mov merchantReactionKind3D, 1
|
||||
invoke PlayCasinoSound3D, OFFSET soundClick, 0, 1
|
||||
@@:
|
||||
cmp merchantTab3D, 0
|
||||
jne handle_charms_vertical
|
||||
|
||||
; Shirts vertical navigation
|
||||
invoke Pressed3D, 26h
|
||||
test eax, eax
|
||||
jz @F
|
||||
|
|
@ -66,17 +131,53 @@ HandleMerchant3D PROC uses ebx
|
|||
@@:
|
||||
invoke Pressed3D, 28h
|
||||
test eax, eax
|
||||
jz @F
|
||||
jz merchant_after_vertical
|
||||
cmp merchantSelected3D, 12
|
||||
jae @F
|
||||
jae merchant_after_vertical
|
||||
inc merchantSelected3D
|
||||
jmp merchant_after_vertical
|
||||
|
||||
handle_charms_vertical:
|
||||
; Charms vertical navigation
|
||||
invoke Pressed3D, 26h
|
||||
test eax, eax
|
||||
jz @F
|
||||
cmp merchantCharmSelected3D, 0
|
||||
je @F
|
||||
dec merchantCharmSelected3D
|
||||
@@:
|
||||
invoke Pressed3D, 28h
|
||||
test eax, eax
|
||||
jz merchant_after_vertical
|
||||
cmp merchantCharmSelected3D, 3
|
||||
jae merchant_after_vertical
|
||||
inc merchantCharmSelected3D
|
||||
|
||||
merchant_after_vertical:
|
||||
cmp mouseClick3D, 0
|
||||
je merchant_enter
|
||||
cmp mouseX3D, 168
|
||||
jb merchant_enter
|
||||
cmp mouseX3D, 311
|
||||
jae merchant_enter
|
||||
|
||||
; Tab header clicks (y 31..46)
|
||||
cmp mouseY3D, 31
|
||||
jb merchant_enter
|
||||
cmp mouseY3D, 46
|
||||
jae merchant_mouse_content
|
||||
cmp mouseX3D, 235
|
||||
jae tab_charms_click
|
||||
mov merchantTab3D, 0
|
||||
ret
|
||||
tab_charms_click:
|
||||
mov merchantTab3D, 1
|
||||
ret
|
||||
|
||||
merchant_mouse_content:
|
||||
cmp merchantTab3D, 0
|
||||
jne merchant_mouse_charms
|
||||
|
||||
cmp mouseY3D, 48
|
||||
jae merchant_mouse_rows
|
||||
cmp mouseY3D, 34
|
||||
|
|
@ -114,18 +215,41 @@ merchant_mouse_rows:
|
|||
ja merchant_handle_done
|
||||
mov merchantSelected3D, eax
|
||||
ret
|
||||
|
||||
merchant_mouse_charms:
|
||||
cmp mouseY3D, 50
|
||||
jb merchant_mouse_buy
|
||||
cmp mouseY3D, 178
|
||||
jae merchant_mouse_buy
|
||||
mov eax, mouseY3D
|
||||
sub eax, 50
|
||||
xor edx, edx
|
||||
mov ecx, 32
|
||||
div ecx
|
||||
cmp eax, 3
|
||||
ja merchant_handle_done
|
||||
mov merchantCharmSelected3D, eax
|
||||
ret
|
||||
|
||||
merchant_mouse_buy:
|
||||
cmp mouseY3D, 193
|
||||
jb merchant_handle_done
|
||||
cmp mouseY3D, 211
|
||||
ja merchant_handle_done
|
||||
jmp merchant_confirm
|
||||
|
||||
merchant_enter:
|
||||
invoke Pressed3D, 0Dh
|
||||
test eax, eax
|
||||
jz merchant_handle_done
|
||||
|
||||
merchant_confirm:
|
||||
cmp merchantTab3D, 0
|
||||
jne @F
|
||||
invoke BuyMerchantBack3D, merchantSelected3D
|
||||
ret
|
||||
@@:
|
||||
invoke BuyMerchantCharm3D, merchantCharmSelected3D
|
||||
merchant_handle_done:
|
||||
ret
|
||||
HandleMerchant3D ENDP
|
||||
|
|
@ -173,14 +297,45 @@ merchant_draw_pose:
|
|||
mov esi, OFFSET merchantThanks3D
|
||||
@@:
|
||||
invoke DrawString8x8, 6, 209, esi, 00F0D7ABh
|
||||
|
||||
; Draw card back preview only on Shirts tab
|
||||
cmp merchantTab3D, 0
|
||||
jne @F
|
||||
invoke DrawAnimSprite3D, OFFSET backsPack3D, merchantSelected3D, 24, 282, 68, 96
|
||||
@@:
|
||||
invoke DrawBox, 0, 0, 320, 21, 00181D1Bh
|
||||
invoke DrawString8x8, 8, 6, OFFSET merchantTitle3D, 00E9CD9Ah
|
||||
invoke DrawString8x8, 152, 6, OFFSET textBank3D, 00B8D5B3h
|
||||
invoke FormatNumber, bankroll, OFFSET hudNumBuffer
|
||||
invoke DrawString8x8, 203, 6, OFFSET hudNumBuffer, 00FFFFFFh
|
||||
|
||||
; Right Panel
|
||||
invoke DrawBoxBorder, 166, 31, 147, 187, 00191D1Fh, 009A825Ah, 1
|
||||
invoke DrawString8x8, 173, 36, OFFSET merchantStock3D, 00E9CD9Ah
|
||||
|
||||
; Tab 1: [ ÐÓÁÀØÊÈ ] (x 169..232)
|
||||
cmp merchantTab3D, 0
|
||||
jne @F
|
||||
invoke DrawBox, 169, 33, 64, 13, 00395046h
|
||||
invoke DrawString8x8, 171, 36, OFFSET merchantStock3D, 00FFFFFFh
|
||||
jmp tab2_draw
|
||||
@@:
|
||||
invoke DrawString8x8, 171, 36, OFFSET merchantStock3D, 007E8E81h
|
||||
|
||||
tab2_draw:
|
||||
; Tab 2: [ ÒÀËÈÑÌÀÍÛ ] (x 236..310)
|
||||
cmp merchantTab3D, 1
|
||||
jne @F
|
||||
invoke DrawBox, 236, 33, 74, 13, 00395046h
|
||||
invoke DrawString8x8, 238, 36, OFFSET merchantTabCharmsLabel, 00FFFFFFh
|
||||
jmp tab_draw_done
|
||||
@@:
|
||||
invoke DrawString8x8, 238, 36, OFFSET merchantTabCharmsLabel, 007E8E81h
|
||||
|
||||
tab_draw_done:
|
||||
cmp merchantTab3D, 0
|
||||
jne render_charms_view
|
||||
|
||||
; --- SHIRTS VIEW ---
|
||||
invoke DrawBoxBorder, 248, 34, 24, 12, 00373F3Bh, 00889985h, 1
|
||||
invoke DrawString8x8, 256, 36, OFFSET merchantArrowUp3D, 00FFFFFFh
|
||||
invoke DrawBoxBorder, 279, 34, 24, 12, 00373F3Bh, 00889985h, 1
|
||||
|
|
@ -225,6 +380,66 @@ merchant_item_status:
|
|||
sub eax, start
|
||||
cmp eax, 5
|
||||
jb merchant_render_row
|
||||
jmp merchant_render_footer
|
||||
|
||||
render_charms_view:
|
||||
; --- CHARMS VIEW ---
|
||||
xor ebx, ebx
|
||||
mov rowY, 50
|
||||
charm_render_loop:
|
||||
cmp ebx, 4
|
||||
jae merchant_render_footer
|
||||
|
||||
mov ink, 00C1C8C1h
|
||||
cmp ebx, merchantCharmSelected3D
|
||||
jne @F
|
||||
invoke DrawBoxBorder, 168, rowY, 142, 28, 00395046h, 00A7C4AEh, 1
|
||||
mov ink, 00FFFFFFh
|
||||
@@:
|
||||
; Line 1: Charm Name
|
||||
mov eax, rowY
|
||||
add eax, 2
|
||||
invoke DrawString8x8, 171, eax, charmNames3D[ebx*4], ink
|
||||
|
||||
; Line 2: Charm Description
|
||||
mov eax, rowY
|
||||
add eax, 11
|
||||
invoke DrawString8x8, 171, eax, charmDescs3D[ebx*4], 0088B8A8h
|
||||
|
||||
; Line 3: Price and Charges
|
||||
mov eax, rowY
|
||||
add eax, 20
|
||||
push eax
|
||||
|
||||
invoke DrawString8x8, 171, eax, OFFSET merchantDollar3D, 00C7B58Ah
|
||||
invoke FormatNumber, charmPrices3D[ebx*4], OFFSET hudNumBuffer
|
||||
pop eax
|
||||
push eax
|
||||
invoke DrawString8x8, 179, eax, OFFSET hudNumBuffer, 00FFFFFFh
|
||||
|
||||
pop eax
|
||||
push eax
|
||||
invoke DrawString8x8, 234, eax, OFFSET merchantStockUsesLabel, 00A0A0A0h
|
||||
|
||||
mov edx, charmCloverUses
|
||||
cmp ebx, 0
|
||||
je draw_cur_uses
|
||||
mov edx, charmHorseshoeUses
|
||||
cmp ebx, 1
|
||||
je draw_cur_uses
|
||||
mov edx, charmSkullUses
|
||||
cmp ebx, 2
|
||||
je draw_cur_uses
|
||||
mov edx, charmDevilUses
|
||||
draw_cur_uses:
|
||||
invoke FormatNumber, edx, OFFSET hudNumBuffer
|
||||
pop eax
|
||||
invoke DrawString8x8, 274, eax, OFFSET hudNumBuffer, 00FFE060h
|
||||
|
||||
add rowY, 31
|
||||
inc ebx
|
||||
jmp charm_render_loop
|
||||
|
||||
merchant_render_footer:
|
||||
cmp merchantMessage3D, 2
|
||||
jne @F
|
||||
|
|
@ -233,6 +448,6 @@ merchant_render_footer:
|
|||
invoke DrawBoxBorder, 171, 194, 136, 17, 003B5949h, 00CBAF73h, 1
|
||||
invoke DrawString8x8, 194, 199, OFFSET merchantBuy3D, 00FFFFFFh
|
||||
invoke DrawBox, 0, 224, 320, 16, 00181D1Bh
|
||||
invoke DrawString8x8, 8, 229, OFFSET merchantShopKeys3D, 00C5C7B8h
|
||||
invoke DrawString8x8, 8, 229, OFFSET merchantShopKeysWithTabs, 00C5C7B8h
|
||||
ret
|
||||
RenderMerchant3D ENDP
|
||||
|
|
|
|||
|
|
@ -1,342 +1,345 @@
|
|||
; Single 52-card deck; dealer stands on all 17s, blackjack pays 3:2.
|
||||
InitNativeBlackjack3D PROC
|
||||
mov cardExitActive3D, 0
|
||||
call LoadCardTableAssets3D
|
||||
mov cbState3D, CB_IDLE
|
||||
mov cbPlayerCount3D, 0
|
||||
mov cbDealerCount3D, 0
|
||||
mov cbStake3D, 0
|
||||
mov cbError3D, 0
|
||||
call InitBJParty3D
|
||||
call ClearKeys3D
|
||||
ret
|
||||
InitNativeBlackjack3D ENDP
|
||||
|
||||
NativeBJScore3D PROC uses ebx esi edi hand:DWORD,count:DWORD
|
||||
mov esi, hand
|
||||
xor edi, edi
|
||||
xor ebx, ebx
|
||||
xor ecx, ecx
|
||||
bj_score_card:
|
||||
cmp ecx, count
|
||||
jae bj_score_soft
|
||||
mov eax, [esi+ecx*4]
|
||||
push ecx
|
||||
xor edx, edx
|
||||
mov ecx, 13
|
||||
div ecx
|
||||
pop ecx
|
||||
inc ecx
|
||||
cmp edx, 12
|
||||
je bj_score_ace
|
||||
add edx, 2
|
||||
cmp edx, 10
|
||||
jbe @F
|
||||
mov edx, 10
|
||||
@@:
|
||||
add edi, edx
|
||||
jmp bj_score_card
|
||||
bj_score_ace:
|
||||
add edi, 11
|
||||
inc ebx
|
||||
jmp bj_score_card
|
||||
bj_score_soft:
|
||||
cmp edi, 21
|
||||
jbe bj_score_done
|
||||
test ebx, ebx
|
||||
jz bj_score_done
|
||||
sub edi, 10
|
||||
dec ebx
|
||||
jmp bj_score_soft
|
||||
bj_score_done:
|
||||
mov eax, edi
|
||||
ret
|
||||
NativeBJScore3D ENDP
|
||||
|
||||
NativeBJSettle3D PROC result:DWORD
|
||||
cmp cbState3D, CB_RESULT
|
||||
je bj_settle_done
|
||||
mov cbState3D, CB_RESULT
|
||||
mov cbVisible3D, 1
|
||||
mov eax, result
|
||||
mov cbOutcome3D, eax
|
||||
call ResolveBJParty3D
|
||||
mov eax, result
|
||||
cmp eax, 1
|
||||
je bj_settle_loss
|
||||
mov eax, cbStake3D
|
||||
cmp result, 2
|
||||
je bj_settle_credit
|
||||
shl eax, 1
|
||||
cmp result, 3
|
||||
jne bj_settle_credit
|
||||
mov edx, cbStake3D
|
||||
shr edx, 1
|
||||
add eax, edx
|
||||
bj_settle_credit:
|
||||
add bankroll, eax
|
||||
invoke PlayCasinoSound3D, OFFSET soundRoundWin, 0, 1
|
||||
jmp bj_settle_save
|
||||
bj_settle_loss:
|
||||
invoke PlayCasinoSound3D, OFFSET soundRoundLose, 0, 1
|
||||
bj_settle_save:
|
||||
call ClearKeys3D
|
||||
xor eax,eax
|
||||
cmp cbOutcome3D,0
|
||||
sete al
|
||||
cmp cbOutcome3D,3
|
||||
jne @F
|
||||
mov eax,1
|
||||
@@:
|
||||
invoke NpcRecordRound3D,1,eax
|
||||
call SaveProgress3D
|
||||
bj_settle_done:
|
||||
ret
|
||||
NativeBJSettle3D ENDP
|
||||
|
||||
StartNativeBlackjack3D PROC
|
||||
cmp cbState3D, CB_IDLE
|
||||
je @F
|
||||
cmp cbState3D, CB_RESULT
|
||||
jne bj_start_done
|
||||
@@:
|
||||
mov eax, cbBet3D
|
||||
cmp bankroll, eax
|
||||
jb bj_start_empty
|
||||
sub bankroll, eax
|
||||
mov cbStake3D, eax
|
||||
mov cbError3D, 0
|
||||
mov cbDouble3D, 0
|
||||
mov cbEarlyOutcome3D, -1
|
||||
mov cbBotsSettled3D, 0
|
||||
mov cbInitialFlights3D, 4
|
||||
mov cbVisible3D, 0
|
||||
mov cbPlayerCount3D, 2
|
||||
mov cbDealerCount3D, 2
|
||||
mov cbCursor3D, 4
|
||||
invoke ShuffleCards3D, OFFSET cbDeck3D
|
||||
mov eax, cbDeck3D[0]
|
||||
mov cbPlayer3D[0], eax
|
||||
mov eax, cbDeck3D[4]
|
||||
mov cbDealer3D[0], eax
|
||||
mov eax, cbDeck3D[8]
|
||||
mov cbPlayer3D[4], eax
|
||||
mov eax, cbDeck3D[12]
|
||||
mov cbDealer3D[4], eax
|
||||
cmp cbBotCount3D, 0
|
||||
je @F
|
||||
call DealBJParty3D
|
||||
@@:
|
||||
invoke NativeBJScore3D, OFFSET cbPlayer3D, 2
|
||||
mov cbPlayerScore3D, eax
|
||||
invoke NativeBJScore3D, OFFSET cbDealer3D, 2
|
||||
mov cbDealerScore3D, eax
|
||||
mov cbTimer3D, 0
|
||||
mov cbState3D, CB_DEAL
|
||||
call ClearKeys3D
|
||||
invoke PlayCasinoSound3D, OFFSET soundCards, 0, 1
|
||||
call SaveProgress3D
|
||||
bj_start_done:
|
||||
ret
|
||||
bj_start_empty:
|
||||
mov cbError3D, 1
|
||||
ret
|
||||
StartNativeBlackjack3D ENDP
|
||||
|
||||
NativeBJHit3D PROC uses ebx
|
||||
cmp cbState3D, CB_PLAYER
|
||||
jne bj_hit_done
|
||||
cmp cbPlayerCount3D, 12
|
||||
jae bj_hit_done
|
||||
cmp cbCursor3D, 52
|
||||
jae bj_hit_done
|
||||
mov ebx, cbCursor3D
|
||||
mov eax, cbDeck3D[ebx*4]
|
||||
mov cbCard3D, eax
|
||||
inc cbCursor3D
|
||||
mov cbTimer3D, 0
|
||||
mov cbState3D, CB_HIT
|
||||
call ClearKeys3D
|
||||
invoke PlayCasinoSound3D, OFFSET soundCards, 0, 1
|
||||
bj_hit_done:
|
||||
ret
|
||||
NativeBJHit3D ENDP
|
||||
|
||||
HandleNativeBlackjack3D PROC uses ebx
|
||||
call HandleCardExit3D
|
||||
test eax, eax
|
||||
jnz bj_input_done
|
||||
call BJPartyInput3D
|
||||
invoke CardTableMouse3D, MODE_BLACKJACK
|
||||
cmp cardExitActive3D, 0
|
||||
jne bj_input_done
|
||||
cmp engineMode, MODE_BLACKJACK
|
||||
jne bj_input_done
|
||||
cmp cbState3D, CB_IDLE
|
||||
je bj_ready_input
|
||||
cmp cbState3D, CB_RESULT
|
||||
je bj_ready_input
|
||||
cmp cbState3D, CB_PLAYER
|
||||
je bj_player_input
|
||||
cmp cbState3D, CB_BOTS
|
||||
jne @F
|
||||
call UpdateBJParty3D
|
||||
ret
|
||||
@@:
|
||||
mov eax, deltaTime3D
|
||||
add cbTimer3D, eax
|
||||
cmp cbState3D, CB_DEAL
|
||||
jne bj_animate_hit
|
||||
mov eax, cbInitialFlights3D
|
||||
imul eax, TABLE_FLIGHT_MS
|
||||
cmp cbTimer3D, eax
|
||||
jb bj_input_done
|
||||
cmp cbDealerScore3D, 21
|
||||
jne bj_player_natural
|
||||
mov eax, 1
|
||||
cmp cbPlayerScore3D, 21
|
||||
jne @F
|
||||
mov eax, 2
|
||||
@@:
|
||||
invoke NativeBJSettle3D, eax
|
||||
ret
|
||||
bj_player_natural:
|
||||
cmp cbPlayerScore3D, 21
|
||||
jne bj_begin_player
|
||||
invoke FinishBJPlayer3D, 3
|
||||
ret
|
||||
bj_begin_player:
|
||||
mov cbState3D, CB_PLAYER
|
||||
call ClearKeys3D
|
||||
ret
|
||||
bj_animate_hit:
|
||||
cmp cbState3D, CB_HIT
|
||||
jne bj_animate_dealer
|
||||
cmp cbTimer3D, TABLE_FLIGHT_MS
|
||||
jb bj_input_done
|
||||
mov ebx, cbPlayerCount3D
|
||||
mov eax, cbCard3D
|
||||
mov cbPlayer3D[ebx*4], eax
|
||||
inc cbPlayerCount3D
|
||||
invoke NativeBJScore3D, OFFSET cbPlayer3D, cbPlayerCount3D
|
||||
mov cbPlayerScore3D, eax
|
||||
cmp eax, 21
|
||||
ja bj_player_bust
|
||||
je bj_begin_dealer
|
||||
cmp cbDouble3D, 0
|
||||
jne bj_begin_dealer
|
||||
jmp bj_begin_player
|
||||
bj_player_bust:
|
||||
invoke FinishBJPlayer3D, 1
|
||||
ret
|
||||
bj_animate_dealer:
|
||||
cmp cbTimer3D, 600
|
||||
jb bj_input_done
|
||||
cmp cbDealerScore3D, 17
|
||||
jae bj_compare_hands
|
||||
cmp cbDealerCount3D, 12
|
||||
jae bj_compare_hands
|
||||
cmp cbCursor3D, 52
|
||||
jae bj_compare_hands
|
||||
mov ebx, cbCursor3D
|
||||
mov eax, cbDeck3D[ebx*4]
|
||||
inc cbCursor3D
|
||||
mov ebx, cbDealerCount3D
|
||||
mov cbDealer3D[ebx*4], eax
|
||||
inc cbDealerCount3D
|
||||
invoke NativeBJScore3D, OFFSET cbDealer3D, cbDealerCount3D
|
||||
mov cbDealerScore3D, eax
|
||||
mov cbTimer3D, 0
|
||||
invoke PlayCasinoSound3D, OFFSET soundCards, 0, 1
|
||||
ret
|
||||
bj_compare_hands:
|
||||
cmp cbEarlyOutcome3D, -1
|
||||
je @F
|
||||
invoke NativeBJSettle3D, cbEarlyOutcome3D
|
||||
ret
|
||||
@@:
|
||||
mov eax, cbDealerScore3D
|
||||
cmp eax, 21
|
||||
ja bj_player_win
|
||||
cmp eax, cbPlayerScore3D
|
||||
jb bj_player_win
|
||||
je bj_player_push
|
||||
invoke NativeBJSettle3D, 1
|
||||
ret
|
||||
bj_player_win:
|
||||
invoke NativeBJSettle3D, 0
|
||||
ret
|
||||
bj_player_push:
|
||||
invoke NativeBJSettle3D, 2
|
||||
ret
|
||||
bj_player_input:
|
||||
invoke Pressed3D, 44h
|
||||
test eax, eax
|
||||
jz @F
|
||||
cmp cbPlayerCount3D, 2
|
||||
jne bj_input_done
|
||||
mov eax, cbStake3D
|
||||
cmp bankroll, eax
|
||||
jb bj_input_done
|
||||
sub bankroll, eax
|
||||
add cbStake3D, eax
|
||||
mov cbDouble3D, 1
|
||||
call SaveProgress3D
|
||||
call NativeBJHit3D
|
||||
ret
|
||||
@@:
|
||||
invoke Pressed3D, 48h
|
||||
test eax, eax
|
||||
jz @F
|
||||
call NativeBJHit3D
|
||||
ret
|
||||
@@:
|
||||
invoke Pressed3D, 53h
|
||||
test eax, eax
|
||||
jz bj_input_done
|
||||
bj_begin_dealer:
|
||||
invoke FinishBJPlayer3D, -1
|
||||
ret
|
||||
bj_ready_input:
|
||||
invoke Pressed3D, 26h
|
||||
test eax, eax
|
||||
jz @F
|
||||
cmp cbBet3D, 10000
|
||||
jae @F
|
||||
add cbBet3D, 100
|
||||
@@:
|
||||
invoke Pressed3D, 28h
|
||||
test eax, eax
|
||||
jz @F
|
||||
cmp cbBet3D, 100
|
||||
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
|
||||
call StartNativeBlackjack3D
|
||||
bj_input_done:
|
||||
ret
|
||||
HandleNativeBlackjack3D ENDP
|
||||
include src_graphics\native_blackjack_party.inc
|
||||
; Single 52-card deck; dealer stands on all 17s, blackjack pays 3:2.
|
||||
InitNativeBlackjack3D PROC
|
||||
mov cardExitActive3D, 0
|
||||
call LoadCardTableAssets3D
|
||||
mov cbState3D, CB_IDLE
|
||||
mov cbPlayerCount3D, 0
|
||||
mov cbDealerCount3D, 0
|
||||
mov cbStake3D, 0
|
||||
mov cbError3D, 0
|
||||
call InitBJParty3D
|
||||
call ClearKeys3D
|
||||
ret
|
||||
InitNativeBlackjack3D ENDP
|
||||
|
||||
NativeBJScore3D PROC uses ebx esi edi hand:DWORD,count:DWORD
|
||||
mov esi, hand
|
||||
xor edi, edi
|
||||
xor ebx, ebx
|
||||
xor ecx, ecx
|
||||
bj_score_card:
|
||||
cmp ecx, count
|
||||
jae bj_score_soft
|
||||
mov eax, [esi+ecx*4]
|
||||
push ecx
|
||||
xor edx, edx
|
||||
mov ecx, 13
|
||||
div ecx
|
||||
pop ecx
|
||||
inc ecx
|
||||
cmp edx, 12
|
||||
je bj_score_ace
|
||||
add edx, 2
|
||||
cmp edx, 10
|
||||
jbe @F
|
||||
mov edx, 10
|
||||
@@:
|
||||
add edi, edx
|
||||
jmp bj_score_card
|
||||
bj_score_ace:
|
||||
add edi, 11
|
||||
inc ebx
|
||||
jmp bj_score_card
|
||||
bj_score_soft:
|
||||
cmp edi, 21
|
||||
jbe bj_score_done
|
||||
test ebx, ebx
|
||||
jz bj_score_done
|
||||
sub edi, 10
|
||||
dec ebx
|
||||
jmp bj_score_soft
|
||||
bj_score_done:
|
||||
mov eax, edi
|
||||
ret
|
||||
NativeBJScore3D ENDP
|
||||
|
||||
NativeBJSettle3D PROC result:DWORD
|
||||
cmp cbState3D, CB_RESULT
|
||||
je bj_settle_done
|
||||
mov cbState3D, CB_RESULT
|
||||
mov cbVisible3D, 1
|
||||
mov eax, result
|
||||
mov cbOutcome3D, eax
|
||||
call ResolveBJParty3D
|
||||
mov eax, result
|
||||
cmp eax, 1
|
||||
je bj_settle_loss
|
||||
mov eax, cbStake3D
|
||||
cmp result, 2
|
||||
je bj_settle_credit
|
||||
shl eax, 1
|
||||
cmp result, 3
|
||||
jne bj_settle_credit
|
||||
mov edx, cbStake3D
|
||||
shr edx, 1
|
||||
add eax, edx
|
||||
bj_settle_credit:
|
||||
add bankroll, eax
|
||||
invoke PlayCasinoSound3D, OFFSET soundRoundWin, 0, 1
|
||||
jmp bj_settle_save
|
||||
bj_settle_loss:
|
||||
invoke TriggerCharmLossProtection, cbStake3D
|
||||
test eax, eax
|
||||
jnz bj_settle_save
|
||||
invoke PlayCasinoSound3D, OFFSET soundRoundLose, 0, 1
|
||||
bj_settle_save:
|
||||
call ClearKeys3D
|
||||
xor eax,eax
|
||||
cmp cbOutcome3D,0
|
||||
sete al
|
||||
cmp cbOutcome3D,3
|
||||
jne @F
|
||||
mov eax,1
|
||||
@@:
|
||||
invoke NpcRecordRound3D,1,eax
|
||||
call SaveProgress3D
|
||||
bj_settle_done:
|
||||
ret
|
||||
NativeBJSettle3D ENDP
|
||||
|
||||
StartNativeBlackjack3D PROC
|
||||
cmp cbState3D, CB_IDLE
|
||||
je @F
|
||||
cmp cbState3D, CB_RESULT
|
||||
jne bj_start_done
|
||||
@@:
|
||||
mov eax, cbBet3D
|
||||
cmp bankroll, eax
|
||||
jb bj_start_empty
|
||||
sub bankroll, eax
|
||||
mov cbStake3D, eax
|
||||
mov cbError3D, 0
|
||||
mov cbDouble3D, 0
|
||||
mov cbEarlyOutcome3D, -1
|
||||
mov cbBotsSettled3D, 0
|
||||
mov cbInitialFlights3D, 4
|
||||
mov cbVisible3D, 0
|
||||
mov cbPlayerCount3D, 2
|
||||
mov cbDealerCount3D, 2
|
||||
mov cbCursor3D, 4
|
||||
invoke ShuffleCards3D, OFFSET cbDeck3D
|
||||
mov eax, cbDeck3D[0]
|
||||
mov cbPlayer3D[0], eax
|
||||
mov eax, cbDeck3D[4]
|
||||
mov cbDealer3D[0], eax
|
||||
mov eax, cbDeck3D[8]
|
||||
mov cbPlayer3D[4], eax
|
||||
mov eax, cbDeck3D[12]
|
||||
mov cbDealer3D[4], eax
|
||||
cmp cbBotCount3D, 0
|
||||
je @F
|
||||
call DealBJParty3D
|
||||
@@:
|
||||
invoke NativeBJScore3D, OFFSET cbPlayer3D, 2
|
||||
mov cbPlayerScore3D, eax
|
||||
invoke NativeBJScore3D, OFFSET cbDealer3D, 2
|
||||
mov cbDealerScore3D, eax
|
||||
mov cbTimer3D, 0
|
||||
mov cbState3D, CB_DEAL
|
||||
call ClearKeys3D
|
||||
invoke PlayCasinoSound3D, OFFSET soundCards, 0, 1
|
||||
call SaveProgress3D
|
||||
bj_start_done:
|
||||
ret
|
||||
bj_start_empty:
|
||||
mov cbError3D, 1
|
||||
ret
|
||||
StartNativeBlackjack3D ENDP
|
||||
|
||||
NativeBJHit3D PROC uses ebx
|
||||
cmp cbState3D, CB_PLAYER
|
||||
jne bj_hit_done
|
||||
cmp cbPlayerCount3D, 12
|
||||
jae bj_hit_done
|
||||
cmp cbCursor3D, 52
|
||||
jae bj_hit_done
|
||||
mov ebx, cbCursor3D
|
||||
mov eax, cbDeck3D[ebx*4]
|
||||
mov cbCard3D, eax
|
||||
inc cbCursor3D
|
||||
mov cbTimer3D, 0
|
||||
mov cbState3D, CB_HIT
|
||||
call ClearKeys3D
|
||||
invoke PlayCasinoSound3D, OFFSET soundCards, 0, 1
|
||||
bj_hit_done:
|
||||
ret
|
||||
NativeBJHit3D ENDP
|
||||
|
||||
HandleNativeBlackjack3D PROC uses ebx
|
||||
call HandleCardExit3D
|
||||
test eax, eax
|
||||
jnz bj_input_done
|
||||
call BJPartyInput3D
|
||||
invoke CardTableMouse3D, MODE_BLACKJACK
|
||||
cmp cardExitActive3D, 0
|
||||
jne bj_input_done
|
||||
cmp engineMode, MODE_BLACKJACK
|
||||
jne bj_input_done
|
||||
cmp cbState3D, CB_IDLE
|
||||
je bj_ready_input
|
||||
cmp cbState3D, CB_RESULT
|
||||
je bj_ready_input
|
||||
cmp cbState3D, CB_PLAYER
|
||||
je bj_player_input
|
||||
cmp cbState3D, CB_BOTS
|
||||
jne @F
|
||||
call UpdateBJParty3D
|
||||
ret
|
||||
@@:
|
||||
mov eax, deltaTime3D
|
||||
add cbTimer3D, eax
|
||||
cmp cbState3D, CB_DEAL
|
||||
jne bj_animate_hit
|
||||
mov eax, cbInitialFlights3D
|
||||
imul eax, TABLE_FLIGHT_MS
|
||||
cmp cbTimer3D, eax
|
||||
jb bj_input_done
|
||||
cmp cbDealerScore3D, 21
|
||||
jne bj_player_natural
|
||||
mov eax, 1
|
||||
cmp cbPlayerScore3D, 21
|
||||
jne @F
|
||||
mov eax, 2
|
||||
@@:
|
||||
invoke NativeBJSettle3D, eax
|
||||
ret
|
||||
bj_player_natural:
|
||||
cmp cbPlayerScore3D, 21
|
||||
jne bj_begin_player
|
||||
invoke FinishBJPlayer3D, 3
|
||||
ret
|
||||
bj_begin_player:
|
||||
mov cbState3D, CB_PLAYER
|
||||
call ClearKeys3D
|
||||
ret
|
||||
bj_animate_hit:
|
||||
cmp cbState3D, CB_HIT
|
||||
jne bj_animate_dealer
|
||||
cmp cbTimer3D, TABLE_FLIGHT_MS
|
||||
jb bj_input_done
|
||||
mov ebx, cbPlayerCount3D
|
||||
mov eax, cbCard3D
|
||||
mov cbPlayer3D[ebx*4], eax
|
||||
inc cbPlayerCount3D
|
||||
invoke NativeBJScore3D, OFFSET cbPlayer3D, cbPlayerCount3D
|
||||
mov cbPlayerScore3D, eax
|
||||
cmp eax, 21
|
||||
ja bj_player_bust
|
||||
je bj_begin_dealer
|
||||
cmp cbDouble3D, 0
|
||||
jne bj_begin_dealer
|
||||
jmp bj_begin_player
|
||||
bj_player_bust:
|
||||
invoke FinishBJPlayer3D, 1
|
||||
ret
|
||||
bj_animate_dealer:
|
||||
cmp cbTimer3D, 600
|
||||
jb bj_input_done
|
||||
cmp cbDealerScore3D, 17
|
||||
jae bj_compare_hands
|
||||
cmp cbDealerCount3D, 12
|
||||
jae bj_compare_hands
|
||||
cmp cbCursor3D, 52
|
||||
jae bj_compare_hands
|
||||
mov ebx, cbCursor3D
|
||||
mov eax, cbDeck3D[ebx*4]
|
||||
inc cbCursor3D
|
||||
mov ebx, cbDealerCount3D
|
||||
mov cbDealer3D[ebx*4], eax
|
||||
inc cbDealerCount3D
|
||||
invoke NativeBJScore3D, OFFSET cbDealer3D, cbDealerCount3D
|
||||
mov cbDealerScore3D, eax
|
||||
mov cbTimer3D, 0
|
||||
invoke PlayCasinoSound3D, OFFSET soundCards, 0, 1
|
||||
ret
|
||||
bj_compare_hands:
|
||||
cmp cbEarlyOutcome3D, -1
|
||||
je @F
|
||||
invoke NativeBJSettle3D, cbEarlyOutcome3D
|
||||
ret
|
||||
@@:
|
||||
mov eax, cbDealerScore3D
|
||||
cmp eax, 21
|
||||
ja bj_player_win
|
||||
cmp eax, cbPlayerScore3D
|
||||
jb bj_player_win
|
||||
je bj_player_push
|
||||
invoke NativeBJSettle3D, 1
|
||||
ret
|
||||
bj_player_win:
|
||||
invoke NativeBJSettle3D, 0
|
||||
ret
|
||||
bj_player_push:
|
||||
invoke NativeBJSettle3D, 2
|
||||
ret
|
||||
bj_player_input:
|
||||
invoke Pressed3D, 44h
|
||||
test eax, eax
|
||||
jz @F
|
||||
cmp cbPlayerCount3D, 2
|
||||
jne bj_input_done
|
||||
mov eax, cbStake3D
|
||||
cmp bankroll, eax
|
||||
jb bj_input_done
|
||||
sub bankroll, eax
|
||||
add cbStake3D, eax
|
||||
mov cbDouble3D, 1
|
||||
call SaveProgress3D
|
||||
call NativeBJHit3D
|
||||
ret
|
||||
@@:
|
||||
invoke Pressed3D, 48h
|
||||
test eax, eax
|
||||
jz @F
|
||||
call NativeBJHit3D
|
||||
ret
|
||||
@@:
|
||||
invoke Pressed3D, 53h
|
||||
test eax, eax
|
||||
jz bj_input_done
|
||||
bj_begin_dealer:
|
||||
invoke FinishBJPlayer3D, -1
|
||||
ret
|
||||
bj_ready_input:
|
||||
invoke Pressed3D, 26h
|
||||
test eax, eax
|
||||
jz @F
|
||||
cmp cbBet3D, 10000
|
||||
jae @F
|
||||
add cbBet3D, 100
|
||||
@@:
|
||||
invoke Pressed3D, 28h
|
||||
test eax, eax
|
||||
jz @F
|
||||
cmp cbBet3D, 100
|
||||
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
|
||||
call StartNativeBlackjack3D
|
||||
bj_input_done:
|
||||
ret
|
||||
HandleNativeBlackjack3D ENDP
|
||||
include src_graphics\native_blackjack_party.inc
|
||||
|
|
|
|||
File diff suppressed because it is too large
Load diff
File diff suppressed because it is too large
Load diff
File diff suppressed because it is too large
Load diff
File diff suppressed because it is too large
Load diff
File diff suppressed because it is too large
Load diff
File diff suppressed because it is too large
Load diff
File diff suppressed because it is too large
Load diff
|
|
@ -66,7 +66,7 @@ displaySettingsPath3D db "runtime\display.cfg",0
|
|||
displaySettingsData3D dd 44535031h,1,0
|
||||
displaySettingsIo3D dd 0
|
||||
savePath3D db "runtime\casino3d-progress.dat",0
|
||||
saveData3D dd 32443343h, 10000, 0, 0
|
||||
saveData3D dd 32443343h, 10000, 0, 0, 0, 0, 0, 0
|
||||
saveIo3D dd 0
|
||||
previewBackMap3D dd 0,3,5,2
|
||||
textPause3D db 202,192,199,200,205,206,32,47,32,205,192,209,210,208,206,201,202,200,0
|
||||
|
|
|
|||
File diff suppressed because it is too large
Load diff
|
|
@ -410,6 +410,16 @@ FinishScratch3D PROC
|
|||
mov eax,1000000000
|
||||
@@:
|
||||
mov bankroll,eax
|
||||
mov ecx, scrGross3D
|
||||
cmp ecx, scrStake3D
|
||||
ja scratch_charm_win
|
||||
cmp ecx, 0
|
||||
jne @F
|
||||
invoke TriggerCharmLossProtection, scrStake3D
|
||||
jmp @F
|
||||
scratch_charm_win:
|
||||
invoke TriggerCharmWinBonus, scrGross3D
|
||||
@@:
|
||||
call ScratchStartPayout3D
|
||||
call SaveProgress3D
|
||||
scratch_finish_done:
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue