feat(2.5d): integrate all classic games via dedicated terminal windows and 22 stations

This commit is contained in:
Игорь Федосеев 2026-09-24 22:31:49 +03:00
parent 99fc93c700
commit 3ae4323379
6 changed files with 904 additions and 174 deletions

View file

@ -167,17 +167,46 @@ dancerLuckBuff dd 0
flashTimer dd 0
flashMessage db 128 dup(0)
promptDancer db "[E] CABARET - TIP $100",0
promptSlot1 db "[E] SLOTS 777",0
promptSlot2 db "[E] SLOTS 777",0
promptBlackjack db "[E] BLACKJACK / 21",0
promptPoker db "POKER - UNDER CONSTRUCTION",0
promptRoulette db "[E] ROULETTE",0
promptShop db "[E] BOUTIQUE",0
promptATM db "[E] CASHIER",0
promptBackroom db "BACKROOM - UNDER CONSTRUCTION",0
promptDurak db "DURAK - UNDER CONSTRUCTION",0
promptHell db "TOWER - UNDER CONSTRUCTION",0
promptDancer db "[E] ÊÀÁÀÐÅ - ×ÀÅÂÛÅ $100",0
promptBlackjack db "[E] ÁËÝÊÄÆÅÊ (21)",0
promptPoker db "[E] ÏÎÊÅÐ (TEXAS HOLD'EM)",0
promptDurak db "[E] ÊÀÐÒÛ: ÏÎÄÊÈÄÍÎÉ ÄÓÐÀÊ",0
promptCasinoRoulette db "[E] ÅÂÐÎÏÅÉÑÊÀß ÐÓËÅÒÊÀ",0
promptClassicSlot db "[E] ÊËÀÑÑÈ×ÅÑÊÈÅ ÑËÎÒÛ 777",0
promptCloverSlot db "[E] ÑËÎÒÛ CLOVERPIT (5x3)",0
promptDice db "[E] ÈÃÐÀ Â ÊÎÑÒÈ (CRAPS)",0
promptSkulls db "[E] ÍÀϨÐÑÒÊÈ (×ÅÐÅÏÀ)",0
promptCoin db "[E] ÌÎÍÅÒÊÀ (ÎШË/ÐÅØÊÀ)",0
promptSkillCheck db "[E] ÒÐÅÍÈÐÎÂÊÀ ÐÅÀÊÖÈÈ",0
promptBuckshot db "[E] BUCKSHOT ROULETTE",0
promptRussianRoulette db "[E] ÐÓÑÑÊÀß ÐÓËÅÒÊÀ (VIP)",0
promptOnlineRR db "[E] ÑÅÒÅÂÀß ÐÓËÅÒÊÀ (NET)",0
promptUmamusume db "[E] ÑÊÀ×ÊÈ ÓÌÀÌÓÑÓÌÝ",0
promptHellTower db "[E] ÁÀØÍß ÀÄÀ (10 ÝÒÀÆÅÉ)",0
promptShop db "[E] ÁÓÒÈÊ È ÒÀËÈÑÌÀÍÛ",0
promptATM db "[E] ÁÀÍÊÎÌÀÒ È ÁÀËÀÍÑ",0
promptPlayerTerminal db "[E] ÒÅÐÌÈÍÀË: ÑÒÀÒÛ È À×ÈÂÊÈ",0
promptObserver db "[E] ÐÅÆÈÌ ÍÀÁËÞÄÀÒÅËß (ÈÈ)",0
szTitleBlackjack db "[KAZIK 3D CASINO] - ÁËÝÊÄÆÅÊ (21)",0
szTitlePoker db "[KAZIK 3D CASINO] - ÏÎÊÅÐ (TEXAS HOLD'EM)",0
szTitleDurak db "[KAZIK 3D CASINO] - ÏÎÄÊÈÄÍÎÉ ÄÓÐÀÊ",0
szTitleCasinoRoulette db "[KAZIK 3D CASINO] - ÅÂÐÎÏÅÉÑÊÀß ÐÓËÅÒÊÀ",0
szTitleClassicSlot db "[KAZIK 3D CASINO] - ÊËÀÑÑÈ×ÅÑÊÈÅ ÑËÎÒÛ 777",0
szTitleCloverSlot db "[KAZIK 3D CASINO] - ÑËÎÒ-ÌÀØÈÍÀ CLOVERPIT (5x3)",0
szTitleDice db "[KAZIK 3D CASINO] - ÈÃÐÀ Â ÊÎÑÒÈ (CRAPS)",0
szTitleSkulls db "[KAZIK 3D CASINO] - ÍÀϨÐÑÒÊÈ",0
szTitleCoin db "[KAZIK 3D CASINO] - ÌÎÍÅÒÊÀ (ÎШË/ÐÅØÊÀ)",0
szTitleSkillCheck db "[KAZIK 3D CASINO] - ÏÐÎÂÅÐÊÀ ÐÅÀÊÖÈÈ",0
szTitleBuckshot db "[KAZIK 3D CASINO] - BUCKSHOT ROULETTE",0
szTitleRussianRoulette db "[KAZIK 3D CASINO] - ÐÓÑÑÊÀß ÐÓËÅÒÊÀ",0
szTitleOnlineRR db "[KAZIK 3D CASINO] - ÑÅÒÅÂÀß ÐÓÑÑÊÀß ÐÓËÅÒÊÀ",0
szTitleUmamusume db "[KAZIK 3D CASINO] - ÑÊÀ×ÊÈ ÓÌÀÌÓÑÓÌÝ",0
szTitleHellTower db "[KAZIK 3D CASINO] - ÁÀØÍß ÀÄÀ (ÒÓÐÍÈÐ)",0
szTitleShop db "[KAZIK 3D CASINO] - ÁÓÒÈÊ È ÒÀËÈÑÌÀÍÛ",0
szTitleATM db "[KAZIK 3D CASINO] - ÁÀÍÊÎÌÀÒ",0
szTitleTerminal db "[KAZIK 3D CASINO] - ÒÅÐÌÈÍÀË ÈÃÐÎÊÀ",0
szTitleObserver db "[KAZIK 3D CASINO] - ÐÅÆÈÌ ÍÀÁËÞÄÀÒÅËß (ÈÈ)",0
msgDancerTipped db "Âû áðîñèëè $100 òàíöîâùèöå! ÓÄÀ×À ÀÊÒÈÂÈÐÎÂÀÍÀ!",0
msgNeedMoney db "Íåäîñòàòî÷íî äåíåã â êîøåëüêå!",0
@ -186,7 +215,29 @@ targetHUDFormat db "
luckHUDFormat db " ÓÄÀ×À: +",0
controlsHUD db "WASD/Ñòðåëêè: Õîäüáà | E: Äåéñòâèå | ESC: Ìåíþ",0
NUM_SPRITES equ 13
NUM_SPRITES equ 22
INTERACT_NONE equ 0
INTERACT_BLACKJACK equ 1
INTERACT_POKER equ 2
INTERACT_SLOTS_777 equ 3
INTERACT_ROULETTE equ 4
INTERACT_SKULLS equ 5
INTERACT_SHOP equ 6
INTERACT_ATM equ 7
INTERACT_DANCER equ 8
INTERACT_HELL_TOWER equ 9
INTERACT_DURAK equ 10
INTERACT_BUCKSHOT equ 11
INTERACT_COIN equ 12
INTERACT_DICE equ 13
INTERACT_SLOTS_CLOVER equ 14
INTERACT_UMAMUSUME equ 15
INTERACT_OBSERVER equ 16
INTERACT_TERMINAL equ 17
INTERACT_ONLINE_RR equ 18
INTERACT_RUSSIAN_ROULETTE equ 19
INTERACT_SKILL_CHECK equ 20
ALIGN 4
casinoSprites SpriteObject NUM_SPRITES dup(<>)
sortedSprites dd NUM_SPRITES dup(0)
@ -2633,18 +2684,104 @@ interaction_done:
ret
CheckInteractions ENDP
; --- LaunchClassicGame: Îòêðûòèå îòäåëüíîãî îêíà äëÿ êëàññè÷åñêîé âåðñèè èãðû ---
LaunchClassicGame PROC uses ebx esi edi, pGameProc:DWORD, gameId:DWORD, pTitle:DWORD
LOCAL rc3D[16]:BYTE
LOCAL conWnd:DWORD
LOCAL conW:DWORD, conH:DWORD, conX:DWORD, conY:DWORD
mov eax, gameId
mov currentGameId, eax
invoke AllocConsole
test eax, eax
jz launch_ret
invoke GetStdHandle, STD_OUTPUT_HANDLE
mov hOut, eax
invoke GetStdHandle, STD_INPUT_HANDLE
mov hIn, eax
invoke SetConsoleCP, 1251
invoke SetConsoleOutputCP, 1251
cmp pTitle, 0
je @F
invoke SetConsoleTitleA, pTitle
@@:
call EnableAnsi
call ConfigureConsoleSize
invoke GetConsoleWindow
mov conWnd, eax
test eax, eax
jz run_game_body
cmp h3DWnd, 0
je show_con_fallback
lea eax, rc3D
invoke GetWindowRect, h3DWnd, eax
mov eax, dword ptr rc3D[0]
add eax, 40
mov conX, eax
mov eax, dword ptr rc3D[4]
add eax, 40
mov conY, eax
mov conW, 960
mov conH, 680
invoke SetWindowPos, conWnd, 0, conX, conY, conW, conH, 40h ; SWP_SHOWWINDOW
jmp set_con_focus
show_con_fallback:
invoke ShowWindow, conWnd, 5 ; SW_SHOW
set_con_focus:
invoke SetForegroundWindow, conWnd
invoke SetFocus, conWnd
run_game_body:
call pGameProc
invoke FreeConsole
mov hOut, 0
mov hIn, 0
cmp h3DWnd, 0
je cleanup_game_input
invoke SetForegroundWindow, h3DWnd
invoke SetFocus, h3DWnd
cleanup_game_input:
mov ecx, 256
xor eax, eax
lea edi, keys3D
rep stosb
mov ecx, 256
lea edi, pressedKeys3D
rep stosb
invoke GetTickCount
mov previousTick3D, eax
mov frameStart3D, eax
mov deltaTime3D, 0
call SaveProgress3D
launch_ret:
ret
LaunchClassicGame ENDP
Trigger3DInteraction PROC
mov eax, interactTargetId
test eax, eax
jz @F
jz trigger_done
cmp eax, 8 ; DANCER
jne check_target_slots
cmp eax, INTERACT_DANCER
jne check_target_bj
cmp bankroll, 100
jl dancer_no_cash
sub bankroll, 100
inc dancerLuckBuff
; Tips are cosmetic and must not silently change game odds.
invoke CopyString3D, OFFSET textTips3D, OFFSET flashMessage
mov flashTimer, 100
invoke PlaySoundA, OFFSET soundJackpot, 0, 1
@ -2654,42 +2791,124 @@ dancer_no_cash:
mov flashTimer, 60
ret
check_target_slots:
cmp eax, 3 ; SLOTS
jne check_target_bj
mov engineMode, MODE_SLOTS
invoke PlaySoundA, OFFSET soundClick, 0, 1
check_target_bj:
cmp eax, INTERACT_BLACKJACK
jne check_target_poker
invoke LaunchClassicGame, OFFSET Game21, 1, OFFSET szTitleBlackjack
ret
check_target_bj:
cmp eax, 1 ; BLACKJACK
check_target_poker:
cmp eax, INTERACT_POKER
jne check_target_durak
invoke LaunchClassicGame, OFFSET GamePoker, 2, OFFSET szTitlePoker
ret
check_target_durak:
cmp eax, INTERACT_DURAK
jne check_target_slots777
invoke LaunchClassicGame, OFFSET GameDurak, 10, OFFSET szTitleDurak
ret
check_target_slots777:
cmp eax, INTERACT_SLOTS_777
jne check_target_slots_clover
invoke LaunchClassicGame, OFFSET GameClassicSlot, 9, OFFSET szTitleClassicSlot
ret
check_target_slots_clover:
cmp eax, INTERACT_SLOTS_CLOVER
jne check_target_roulette
mov engineMode, MODE_BLACKJACK
mov bjState, 0
invoke LaunchClassicGame, OFFSET GameSlot, 3, OFFSET szTitleCloverSlot
ret
check_target_roulette:
cmp eax, 4 ; ROULETTE
cmp eax, INTERACT_ROULETTE
jne check_target_dice
invoke LaunchClassicGame, OFFSET GameCasinoRoulette, 8, OFFSET szTitleCasinoRoulette
ret
check_target_dice:
cmp eax, INTERACT_DICE
jne check_target_skulls
invoke LaunchClassicGame, OFFSET GameDice, 7, OFFSET szTitleDice
ret
check_target_skulls:
cmp eax, INTERACT_SKULLS
jne check_target_coin
invoke LaunchClassicGame, OFFSET GameSkulls, 5, OFFSET szTitleSkulls
ret
check_target_coin:
cmp eax, INTERACT_COIN
jne check_target_skill
invoke LaunchClassicGame, OFFSET GameCoin, 6, OFFSET szTitleCoin
ret
check_target_skill:
cmp eax, INTERACT_SKILL_CHECK
jne check_target_buckshot
invoke LaunchClassicGame, OFFSET GameSkillCheck, 11, OFFSET szTitleSkillCheck
ret
check_target_buckshot:
cmp eax, INTERACT_BUCKSHOT
jne check_target_rr
invoke LaunchClassicGame, OFFSET GameBuckshot, 13, OFFSET szTitleBuckshot
ret
check_target_rr:
cmp eax, INTERACT_RUSSIAN_ROULETTE
jne check_target_online_rr
invoke LaunchClassicGame, OFFSET GameRoulette, 4, OFFSET szTitleRussianRoulette
ret
check_target_online_rr:
cmp eax, INTERACT_ONLINE_RR
jne check_target_umamusume
invoke LaunchClassicGame, OFFSET GameOnlineCasino, 20, OFFSET szTitleOnlineRR
ret
check_target_umamusume:
cmp eax, INTERACT_UMAMUSUME
jne check_target_hell
invoke LaunchClassicGame, OFFSET GameUmamusume, 21, OFFSET szTitleUmamusume
ret
check_target_hell:
cmp eax, INTERACT_HELL_TOWER
jne check_target_shop
mov engineMode, MODE_ROULETTE
mov roulState, 0
invoke LaunchClassicGame, OFFSET GameTournament, 666, OFFSET szTitleHellTower
ret
check_target_shop:
cmp eax, 6 ; SHOP
cmp eax, INTERACT_SHOP
jne check_target_atm
mov engineMode, MODE_SHOP
invoke LaunchClassicGame, OFFSET GameShop, 0, OFFSET szTitleShop
ret
check_target_atm:
cmp eax, 7 ; ATM
jne target_unported
cmp eax, INTERACT_ATM
jne check_target_terminal
mov engineMode, MODE_ATM
ret
check_target_terminal:
cmp eax, INTERACT_TERMINAL
jne check_target_observer
invoke LaunchClassicGame, OFFSET GamePlayerTerminal, 0, OFFSET szTitleTerminal
ret
check_target_observer:
cmp eax, INTERACT_OBSERVER
jne target_unported
invoke LaunchClassicGame, OFFSET GameObserver, 14, OFFSET szTitleObserver
ret
target_unported:
invoke CopyString3D, OFFSET textUnavailable3D, OFFSET flashMessage
mov flashTimer, 150
@@:
trigger_done:
ret
Trigger3DInteraction ENDP
@ -2721,7 +2940,7 @@ init_sprites_table:
mov casinoSprites[0*SIZEOF SpriteObject].curFrame, 0
mov casinoSprites[0*SIZEOF SpriteObject].animTimer, 0
mov casinoSprites[0*SIZEOF SpriteObject].animSpeed, 5
mov casinoSprites[0*SIZEOF SpriteObject].interactId, 8
mov casinoSprites[0*SIZEOF SpriteObject].interactId, INTERACT_DANCER
mov casinoSprites[0*SIZEOF SpriteObject].promptPtr, OFFSET promptDancer
; Sprite 1: VIP Dancer 2 (Center Stage Star)
@ -2732,7 +2951,7 @@ init_sprites_table:
mov casinoSprites[1*SIZEOF SpriteObject].curFrame, 2
mov casinoSprites[1*SIZEOF SpriteObject].animTimer, 0
mov casinoSprites[1*SIZEOF SpriteObject].animSpeed, 5
mov casinoSprites[1*SIZEOF SpriteObject].interactId, 8
mov casinoSprites[1*SIZEOF SpriteObject].interactId, INTERACT_DANCER
mov casinoSprites[1*SIZEOF SpriteObject].promptPtr, OFFSET promptDancer
; Sprite 2: VIP Dancer 3 (Stage Right)
@ -2743,21 +2962,21 @@ init_sprites_table:
mov casinoSprites[2*SIZEOF SpriteObject].curFrame, 1
mov casinoSprites[2*SIZEOF SpriteObject].animTimer, 0
mov casinoSprites[2*SIZEOF SpriteObject].animSpeed, 5
mov casinoSprites[2*SIZEOF SpriteObject].interactId, 8
mov casinoSprites[2*SIZEOF SpriteObject].interactId, INTERACT_DANCER
mov casinoSprites[2*SIZEOF SpriteObject].promptPtr, OFFSET promptDancer
; Sprite 3: Blackjack Table with Dealer (Front Center Left)
; Sprite 3: VIP Blackjack (Front Center Left)
mov casinoSprites[3*SIZEOF SpriteObject].posX, (12 * FP_1 + FP_HALF)
mov casinoSprites[3*SIZEOF SpriteObject].posY, (10 * FP_1)
mov casinoSprites[3*SIZEOF SpriteObject].posY, (8 * FP_1)
mov casinoSprites[3*SIZEOF SpriteObject].baseTexId, 30
mov casinoSprites[3*SIZEOF SpriteObject].frameCount, 1
mov casinoSprites[3*SIZEOF SpriteObject].curFrame, 0
mov casinoSprites[3*SIZEOF SpriteObject].animTimer, 0
mov casinoSprites[3*SIZEOF SpriteObject].animSpeed, 1
mov casinoSprites[3*SIZEOF SpriteObject].interactId, 1
mov casinoSprites[3*SIZEOF SpriteObject].interactId, INTERACT_BLACKJACK
mov casinoSprites[3*SIZEOF SpriteObject].promptPtr, OFFSET promptBlackjack
; Sprite 4: Roulette Table (Front Center)
; Sprite 4: European Roulette Table (Front Center)
mov casinoSprites[4*SIZEOF SpriteObject].posX, (16 * FP_1 + FP_HALF)
mov casinoSprites[4*SIZEOF SpriteObject].posY, (10 * FP_1)
mov casinoSprites[4*SIZEOF SpriteObject].baseTexId, 31
@ -2765,96 +2984,195 @@ init_sprites_table:
mov casinoSprites[4*SIZEOF SpriteObject].curFrame, 0
mov casinoSprites[4*SIZEOF SpriteObject].animTimer, 0
mov casinoSprites[4*SIZEOF SpriteObject].animSpeed, 1
mov casinoSprites[4*SIZEOF SpriteObject].interactId, 4
mov casinoSprites[4*SIZEOF SpriteObject].promptPtr, OFFSET promptRoulette
mov casinoSprites[4*SIZEOF SpriteObject].interactId, INTERACT_ROULETTE
mov casinoSprites[4*SIZEOF SpriteObject].promptPtr, OFFSET promptCasinoRoulette
; Sprite 5: Poker Table (Front Center Right)
mov casinoSprites[5*SIZEOF SpriteObject].posX, (21 * FP_1)
mov casinoSprites[5*SIZEOF SpriteObject].posY, (10 * FP_1)
; Sprite 5: Texas Hold'em Poker Table (Front Center Right)
mov casinoSprites[5*SIZEOF SpriteObject].posX, (20 * FP_1 + FP_HALF)
mov casinoSprites[5*SIZEOF SpriteObject].posY, (8 * FP_1)
mov casinoSprites[5*SIZEOF SpriteObject].baseTexId, 30
mov casinoSprites[5*SIZEOF SpriteObject].frameCount, 1
mov casinoSprites[5*SIZEOF SpriteObject].curFrame, 0
mov casinoSprites[5*SIZEOF SpriteObject].animTimer, 0
mov casinoSprites[5*SIZEOF SpriteObject].animSpeed, 1
mov casinoSprites[5*SIZEOF SpriteObject].interactId, 1
mov casinoSprites[5*SIZEOF SpriteObject].interactId, INTERACT_POKER
mov casinoSprites[5*SIZEOF SpriteObject].promptPtr, OFFSET promptPoker
; Sprite 6: Slot Machine 1 (West Arcade)
mov casinoSprites[6*SIZEOF SpriteObject].posX, (6 * FP_1)
; Sprite 6: Podkidnoy Durak Card Table
mov casinoSprites[6*SIZEOF SpriteObject].posX, (24 * FP_1 + FP_HALF)
mov casinoSprites[6*SIZEOF SpriteObject].posY, (8 * FP_1)
mov casinoSprites[6*SIZEOF SpriteObject].baseTexId, 24
mov casinoSprites[6*SIZEOF SpriteObject].frameCount, 3
mov casinoSprites[6*SIZEOF SpriteObject].baseTexId, 30
mov casinoSprites[6*SIZEOF SpriteObject].frameCount, 1
mov casinoSprites[6*SIZEOF SpriteObject].curFrame, 0
mov casinoSprites[6*SIZEOF SpriteObject].animTimer, 0
mov casinoSprites[6*SIZEOF SpriteObject].animSpeed, 8
mov casinoSprites[6*SIZEOF SpriteObject].interactId, 3
mov casinoSprites[6*SIZEOF SpriteObject].promptPtr, OFFSET promptSlot1
mov casinoSprites[6*SIZEOF SpriteObject].animSpeed, 1
mov casinoSprites[6*SIZEOF SpriteObject].interactId, INTERACT_DURAK
mov casinoSprites[6*SIZEOF SpriteObject].promptPtr, OFFSET promptDurak
; Sprite 7: Slot Machine 2 (CloverPit)
; Sprite 7: Classic Slots 777 (West Arcade 1)
mov casinoSprites[7*SIZEOF SpriteObject].posX, (6 * FP_1)
mov casinoSprites[7*SIZEOF SpriteObject].posY, (11 * FP_1)
mov casinoSprites[7*SIZEOF SpriteObject].posY, (8 * FP_1)
mov casinoSprites[7*SIZEOF SpriteObject].baseTexId, 24
mov casinoSprites[7*SIZEOF SpriteObject].frameCount, 3
mov casinoSprites[7*SIZEOF SpriteObject].curFrame, 1
mov casinoSprites[7*SIZEOF SpriteObject].curFrame, 0
mov casinoSprites[7*SIZEOF SpriteObject].animTimer, 0
mov casinoSprites[7*SIZEOF SpriteObject].animSpeed, 8
mov casinoSprites[7*SIZEOF SpriteObject].interactId, 3
mov casinoSprites[7*SIZEOF SpriteObject].promptPtr, OFFSET promptSlot2
mov casinoSprites[7*SIZEOF SpriteObject].interactId, INTERACT_SLOTS_777
mov casinoSprites[7*SIZEOF SpriteObject].promptPtr, OFFSET promptClassicSlot
; Sprite 8: Slot Machine 3
; Sprite 8: CloverPit Slots 5x3 (West Arcade 2)
mov casinoSprites[8*SIZEOF SpriteObject].posX, (6 * FP_1)
mov casinoSprites[8*SIZEOF SpriteObject].posY, (14 * FP_1)
mov casinoSprites[8*SIZEOF SpriteObject].posY, (11 * FP_1)
mov casinoSprites[8*SIZEOF SpriteObject].baseTexId, 24
mov casinoSprites[8*SIZEOF SpriteObject].frameCount, 3
mov casinoSprites[8*SIZEOF SpriteObject].curFrame, 2
mov casinoSprites[8*SIZEOF SpriteObject].curFrame, 1
mov casinoSprites[8*SIZEOF SpriteObject].animTimer, 0
mov casinoSprites[8*SIZEOF SpriteObject].animSpeed, 8
mov casinoSprites[8*SIZEOF SpriteObject].interactId, 3
mov casinoSprites[8*SIZEOF SpriteObject].promptPtr, OFFSET promptSlot1
mov casinoSprites[8*SIZEOF SpriteObject].interactId, INTERACT_SLOTS_CLOVER
mov casinoSprites[8*SIZEOF SpriteObject].promptPtr, OFFSET promptCloverSlot
; Sprite 9: Bartender / Bar Counter (East Wing)
mov casinoSprites[9*SIZEOF SpriteObject].posX, (26 * FP_1)
mov casinoSprites[9*SIZEOF SpriteObject].posY, (12 * FP_1)
mov casinoSprites[9*SIZEOF SpriteObject].baseTexId, 32
; Sprite 9: Craps & Dice Table (West Arcade 3)
mov casinoSprites[9*SIZEOF SpriteObject].posX, (6 * FP_1)
mov casinoSprites[9*SIZEOF SpriteObject].posY, (14 * FP_1)
mov casinoSprites[9*SIZEOF SpriteObject].baseTexId, 30
mov casinoSprites[9*SIZEOF SpriteObject].frameCount, 1
mov casinoSprites[9*SIZEOF SpriteObject].curFrame, 0
mov casinoSprites[9*SIZEOF SpriteObject].animTimer, 0
mov casinoSprites[9*SIZEOF SpriteObject].animSpeed, 1
mov casinoSprites[9*SIZEOF SpriteObject].interactId, 6
mov casinoSprites[9*SIZEOF SpriteObject].promptPtr, OFFSET promptShop
mov casinoSprites[9*SIZEOF SpriteObject].interactId, INTERACT_DICE
mov casinoSprites[9*SIZEOF SpriteObject].promptPtr, OFFSET promptDice
; Sprite 10: ATM Bank Terminal (East Wing)
mov casinoSprites[10*SIZEOF SpriteObject].posX, (26 * FP_1)
mov casinoSprites[10*SIZEOF SpriteObject].posY, (16 * FP_1)
mov casinoSprites[10*SIZEOF SpriteObject].baseTexId, 33
; Sprite 10: Skulls & Cups Table
mov casinoSprites[10*SIZEOF SpriteObject].posX, (10 * FP_1)
mov casinoSprites[10*SIZEOF SpriteObject].posY, (15 * FP_1)
mov casinoSprites[10*SIZEOF SpriteObject].baseTexId, 30
mov casinoSprites[10*SIZEOF SpriteObject].frameCount, 1
mov casinoSprites[10*SIZEOF SpriteObject].curFrame, 0
mov casinoSprites[10*SIZEOF SpriteObject].animTimer, 0
mov casinoSprites[10*SIZEOF SpriteObject].animSpeed, 1
mov casinoSprites[10*SIZEOF SpriteObject].interactId, 7
mov casinoSprites[10*SIZEOF SpriteObject].promptPtr, OFFSET promptATM
mov casinoSprites[10*SIZEOF SpriteObject].interactId, INTERACT_SKULLS
mov casinoSprites[10*SIZEOF SpriteObject].promptPtr, OFFSET promptSkulls
; Sprite 11: Underground Table (South Wing)
mov casinoSprites[11*SIZEOF SpriteObject].posX, (16 * FP_1 + FP_HALF)
mov casinoSprites[11*SIZEOF SpriteObject].posY, (24 * FP_1)
mov casinoSprites[11*SIZEOF SpriteObject].baseTexId, 34
; Sprite 11: Coin Toss Stand
mov casinoSprites[11*SIZEOF SpriteObject].posX, (14 * FP_1)
mov casinoSprites[11*SIZEOF SpriteObject].posY, (15 * FP_1)
mov casinoSprites[11*SIZEOF SpriteObject].baseTexId, 30
mov casinoSprites[11*SIZEOF SpriteObject].frameCount, 1
mov casinoSprites[11*SIZEOF SpriteObject].curFrame, 0
mov casinoSprites[11*SIZEOF SpriteObject].animTimer, 0
mov casinoSprites[11*SIZEOF SpriteObject].animSpeed, 1
mov casinoSprites[11*SIZEOF SpriteObject].interactId, 5
mov casinoSprites[11*SIZEOF SpriteObject].promptPtr, OFFSET promptBackroom
mov casinoSprites[11*SIZEOF SpriteObject].interactId, INTERACT_COIN
mov casinoSprites[11*SIZEOF SpriteObject].promptPtr, OFFSET promptCoin
; Sprite 12: Secret Demon Portal (South Wing)
mov casinoSprites[12*SIZEOF SpriteObject].posX, (16 * FP_1 + FP_HALF)
mov casinoSprites[12*SIZEOF SpriteObject].posY, (29 * FP_1)
mov casinoSprites[12*SIZEOF SpriteObject].baseTexId, 4
; Sprite 12: Skill Check Stand
mov casinoSprites[12*SIZEOF SpriteObject].posX, (18 * FP_1)
mov casinoSprites[12*SIZEOF SpriteObject].posY, (15 * FP_1)
mov casinoSprites[12*SIZEOF SpriteObject].baseTexId, 30
mov casinoSprites[12*SIZEOF SpriteObject].frameCount, 1
mov casinoSprites[12*SIZEOF SpriteObject].curFrame, 0
mov casinoSprites[12*SIZEOF SpriteObject].animTimer, 0
mov casinoSprites[12*SIZEOF SpriteObject].animSpeed, 1
mov casinoSprites[12*SIZEOF SpriteObject].interactId, 9
mov casinoSprites[12*SIZEOF SpriteObject].promptPtr, OFFSET promptHell
mov casinoSprites[12*SIZEOF SpriteObject].interactId, INTERACT_SKILL_CHECK
mov casinoSprites[12*SIZEOF SpriteObject].promptPtr, OFFSET promptSkillCheck
; Sprite 13: Umamusume Derby Lounge
mov casinoSprites[13*SIZEOF SpriteObject].posX, (22 * FP_1)
mov casinoSprites[13*SIZEOF SpriteObject].posY, (15 * FP_1)
mov casinoSprites[13*SIZEOF SpriteObject].baseTexId, 30
mov casinoSprites[13*SIZEOF SpriteObject].frameCount, 1
mov casinoSprites[13*SIZEOF SpriteObject].curFrame, 0
mov casinoSprites[13*SIZEOF SpriteObject].animTimer, 0
mov casinoSprites[13*SIZEOF SpriteObject].animSpeed, 1
mov casinoSprites[13*SIZEOF SpriteObject].interactId, INTERACT_UMAMUSUME
mov casinoSprites[13*SIZEOF SpriteObject].promptPtr, OFFSET promptUmamusume
; Sprite 14: Boutique & Shop (East Wing)
mov casinoSprites[14*SIZEOF SpriteObject].posX, (26 * FP_1)
mov casinoSprites[14*SIZEOF SpriteObject].posY, (12 * FP_1)
mov casinoSprites[14*SIZEOF SpriteObject].baseTexId, 32
mov casinoSprites[14*SIZEOF SpriteObject].frameCount, 1
mov casinoSprites[14*SIZEOF SpriteObject].curFrame, 0
mov casinoSprites[14*SIZEOF SpriteObject].animTimer, 0
mov casinoSprites[14*SIZEOF SpriteObject].animSpeed, 1
mov casinoSprites[14*SIZEOF SpriteObject].interactId, INTERACT_SHOP
mov casinoSprites[14*SIZEOF SpriteObject].promptPtr, OFFSET promptShop
; Sprite 15: Cashier & ATM (East Wing)
mov casinoSprites[15*SIZEOF SpriteObject].posX, (26 * FP_1)
mov casinoSprites[15*SIZEOF SpriteObject].posY, (16 * FP_1)
mov casinoSprites[15*SIZEOF SpriteObject].baseTexId, 33
mov casinoSprites[15*SIZEOF SpriteObject].frameCount, 1
mov casinoSprites[15*SIZEOF SpriteObject].curFrame, 0
mov casinoSprites[15*SIZEOF SpriteObject].animTimer, 0
mov casinoSprites[15*SIZEOF SpriteObject].animSpeed, 1
mov casinoSprites[15*SIZEOF SpriteObject].interactId, INTERACT_ATM
mov casinoSprites[15*SIZEOF SpriteObject].promptPtr, OFFSET promptATM
; Sprite 16: Player Terminal (East Wing)
mov casinoSprites[16*SIZEOF SpriteObject].posX, (26 * FP_1)
mov casinoSprites[16*SIZEOF SpriteObject].posY, (20 * FP_1)
mov casinoSprites[16*SIZEOF SpriteObject].baseTexId, 33
mov casinoSprites[16*SIZEOF SpriteObject].frameCount, 1
mov casinoSprites[16*SIZEOF SpriteObject].curFrame, 0
mov casinoSprites[16*SIZEOF SpriteObject].animTimer, 0
mov casinoSprites[16*SIZEOF SpriteObject].animSpeed, 1
mov casinoSprites[16*SIZEOF SpriteObject].interactId, INTERACT_TERMINAL
mov casinoSprites[16*SIZEOF SpriteObject].promptPtr, OFFSET promptPlayerTerminal
; Sprite 17: Buckshot Roulette (South-West)
mov casinoSprites[17*SIZEOF SpriteObject].posX, (12 * FP_1)
mov casinoSprites[17*SIZEOF SpriteObject].posY, (22 * FP_1)
mov casinoSprites[17*SIZEOF SpriteObject].baseTexId, 30
mov casinoSprites[17*SIZEOF SpriteObject].frameCount, 1
mov casinoSprites[17*SIZEOF SpriteObject].curFrame, 0
mov casinoSprites[17*SIZEOF SpriteObject].animTimer, 0
mov casinoSprites[17*SIZEOF SpriteObject].animSpeed, 1
mov casinoSprites[17*SIZEOF SpriteObject].interactId, INTERACT_BUCKSHOT
mov casinoSprites[17*SIZEOF SpriteObject].promptPtr, OFFSET promptBuckshot
; Sprite 18: Observer Lounge (South-East)
mov casinoSprites[18*SIZEOF SpriteObject].posX, (20 * FP_1)
mov casinoSprites[18*SIZEOF SpriteObject].posY, (22 * FP_1)
mov casinoSprites[18*SIZEOF SpriteObject].baseTexId, 30
mov casinoSprites[18*SIZEOF SpriteObject].frameCount, 1
mov casinoSprites[18*SIZEOF SpriteObject].curFrame, 0
mov casinoSprites[18*SIZEOF SpriteObject].animTimer, 0
mov casinoSprites[18*SIZEOF SpriteObject].animSpeed, 1
mov casinoSprites[18*SIZEOF SpriteObject].interactId, INTERACT_OBSERVER
mov casinoSprites[18*SIZEOF SpriteObject].promptPtr, OFFSET promptObserver
; Sprite 19: Russian Roulette (Backroom Entrance)
mov casinoSprites[19*SIZEOF SpriteObject].posX, (16 * FP_1)
mov casinoSprites[19*SIZEOF SpriteObject].posY, (25 * FP_1)
mov casinoSprites[19*SIZEOF SpriteObject].baseTexId, 34
mov casinoSprites[19*SIZEOF SpriteObject].frameCount, 1
mov casinoSprites[19*SIZEOF SpriteObject].curFrame, 0
mov casinoSprites[19*SIZEOF SpriteObject].animTimer, 0
mov casinoSprites[19*SIZEOF SpriteObject].animSpeed, 1
mov casinoSprites[19*SIZEOF SpriteObject].interactId, INTERACT_RUSSIAN_ROULETTE
mov casinoSprites[19*SIZEOF SpriteObject].promptPtr, OFFSET promptRussianRoulette
; Sprite 20: Online Russian Roulette (Backroom Secret Terminal)
mov casinoSprites[20*SIZEOF SpriteObject].posX, (18 * FP_1)
mov casinoSprites[20*SIZEOF SpriteObject].posY, (25 * FP_1)
mov casinoSprites[20*SIZEOF SpriteObject].baseTexId, 34
mov casinoSprites[20*SIZEOF SpriteObject].frameCount, 1
mov casinoSprites[20*SIZEOF SpriteObject].curFrame, 0
mov casinoSprites[20*SIZEOF SpriteObject].animTimer, 0
mov casinoSprites[20*SIZEOF SpriteObject].animSpeed, 1
mov casinoSprites[20*SIZEOF SpriteObject].interactId, INTERACT_ONLINE_RR
mov casinoSprites[20*SIZEOF SpriteObject].promptPtr, OFFSET promptOnlineRR
; Sprite 21: Hell Tower Portal (South Wing Deep End)
mov casinoSprites[21*SIZEOF SpriteObject].posX, (16 * FP_1 + FP_HALF)
mov casinoSprites[21*SIZEOF SpriteObject].posY, (29 * FP_1)
mov casinoSprites[21*SIZEOF SpriteObject].baseTexId, 4
mov casinoSprites[21*SIZEOF SpriteObject].frameCount, 1
mov casinoSprites[21*SIZEOF SpriteObject].curFrame, 0
mov casinoSprites[21*SIZEOF SpriteObject].animTimer, 0
mov casinoSprites[21*SIZEOF SpriteObject].animSpeed, 1
mov casinoSprites[21*SIZEOF SpriteObject].interactId, INTERACT_HELL_TOWER
mov casinoSprites[21*SIZEOF SpriteObject].promptPtr, OFFSET promptHellTower
mov eax, 1
jmp init_return

View file

@ -72,6 +72,13 @@ GetConsoleScreenBufferInfo PROTO :DWORD, :DWORD
GetConsoleMode PROTO :DWORD, :DWORD
SetConsoleMode PROTO :DWORD, :DWORD
FillConsoleOutputCharacterA PROTO :DWORD, :DWORD, :DWORD, :DWORD, :DWORD
AllocConsole PROTO
FreeConsole PROTO
GetConsoleWindow PROTO
SetConsoleTitleA PROTO :DWORD
GetWindowRect PROTO :DWORD, :DWORD
SetWindowPos PROTO :DWORD, :DWORD, :DWORD, :DWORD, :DWORD, :DWORD, :DWORD
SetFocus PROTO :DWORD
mciSendStringA PROTO :DWORD, :DWORD, :DWORD, :DWORD
waveOutSetVolume PROTO :DWORD, :DWORD
AnimFrameDelay PROTO :DWORD
@ -14925,6 +14932,46 @@ uma_exit:
ret
GameUmamusume ENDP
; --- GamePlayerTerminal: Èãðîâîé òåðìèíàë (ñòàòèñòèêà, à÷èâêè, êâåñòû) ---
titleTerminal db "=== ÒÅÐÌÈÍÀË ÈÃÐÎÊÀ ===",13,10,0
textTerminalMenu db "1. Äîñòèæåíèÿ",13,10,"2. Ñòàòèñòèêà ïî èãðàì",13,10,"3. Åæåäíåâíûå çàäàíèÿ",13,10,"4. Ãëàâíîå ìåíþ è ÷èòû",13,10,"0. Íàçàä â êàçèíî",13,10,0
GamePlayerTerminal PROC
terminal_loop:
call ClearView
invoke PrintTitleColor, OFFSET titleTerminal
invoke PrintStr, OFFSET textTerminalMenu
invoke PrintStr, OFFSET choiceText
call ReadKey
cmp al, '1'
je term_ach
cmp al, '2'
je term_stats
cmp al, '3'
je term_daily
cmp al, '4'
je term_classic_menu
cmp al, '0'
je term_exit
cmp al, 1Bh
je term_exit
jmp terminal_loop
term_ach:
call GameAchievements
jmp terminal_loop
term_stats:
call GameStatsByGame
jmp terminal_loop
term_daily:
call GameDailyTasks
jmp terminal_loop
term_classic_menu:
call MainMenu
jmp terminal_loop
term_exit:
ret
GamePlayerTerminal ENDP
include casino3d.inc

Binary file not shown.

View file

@ -167,17 +167,46 @@ dancerLuckBuff dd 0
flashTimer dd 0
flashMessage db 128 dup(0)
promptDancer db "[E] CABARET - TIP $100",0
promptSlot1 db "[E] SLOTS 777",0
promptSlot2 db "[E] SLOTS 777",0
promptBlackjack db "[E] BLACKJACK / 21",0
promptPoker db "POKER - UNDER CONSTRUCTION",0
promptRoulette db "[E] ROULETTE",0
promptShop db "[E] BOUTIQUE",0
promptATM db "[E] CASHIER",0
promptBackroom db "BACKROOM - UNDER CONSTRUCTION",0
promptDurak db "DURAK - UNDER CONSTRUCTION",0
promptHell db "TOWER - UNDER CONSTRUCTION",0
promptDancer db "[E] ÊÀÁÀÐÅ - ×ÀÅÂÛÅ $100",0
promptBlackjack db "[E] ÁËÝÊÄÆÅÊ (21)",0
promptPoker db "[E] ÏÎÊÅÐ (TEXAS HOLD'EM)",0
promptDurak db "[E] ÊÀÐÒÛ: ÏÎÄÊÈÄÍÎÉ ÄÓÐÀÊ",0
promptCasinoRoulette db "[E] ÅÂÐÎÏÅÉÑÊÀß ÐÓËÅÒÊÀ",0
promptClassicSlot db "[E] ÊËÀÑÑÈ×ÅÑÊÈÅ ÑËÎÒÛ 777",0
promptCloverSlot db "[E] ÑËÎÒÛ CLOVERPIT (5x3)",0
promptDice db "[E] ÈÃÐÀ Â ÊÎÑÒÈ (CRAPS)",0
promptSkulls db "[E] ÍÀϨÐÑÒÊÈ (×ÅÐÅÏÀ)",0
promptCoin db "[E] ÌÎÍÅÒÊÀ (ÎШË/ÐÅØÊÀ)",0
promptSkillCheck db "[E] ÒÐÅÍÈÐÎÂÊÀ ÐÅÀÊÖÈÈ",0
promptBuckshot db "[E] BUCKSHOT ROULETTE",0
promptRussianRoulette db "[E] ÐÓÑÑÊÀß ÐÓËÅÒÊÀ (VIP)",0
promptOnlineRR db "[E] ÑÅÒÅÂÀß ÐÓËÅÒÊÀ (NET)",0
promptUmamusume db "[E] ÑÊÀ×ÊÈ ÓÌÀÌÓÑÓÌÝ",0
promptHellTower db "[E] ÁÀØÍß ÀÄÀ (10 ÝÒÀÆÅÉ)",0
promptShop db "[E] ÁÓÒÈÊ È ÒÀËÈÑÌÀÍÛ",0
promptATM db "[E] ÁÀÍÊÎÌÀÒ È ÁÀËÀÍÑ",0
promptPlayerTerminal db "[E] ÒÅÐÌÈÍÀË: ÑÒÀÒÛ È À×ÈÂÊÈ",0
promptObserver db "[E] ÐÅÆÈÌ ÍÀÁËÞÄÀÒÅËß (ÈÈ)",0
szTitleBlackjack db "[KAZIK 3D CASINO] - ÁËÝÊÄÆÅÊ (21)",0
szTitlePoker db "[KAZIK 3D CASINO] - ÏÎÊÅÐ (TEXAS HOLD'EM)",0
szTitleDurak db "[KAZIK 3D CASINO] - ÏÎÄÊÈÄÍÎÉ ÄÓÐÀÊ",0
szTitleCasinoRoulette db "[KAZIK 3D CASINO] - ÅÂÐÎÏÅÉÑÊÀß ÐÓËÅÒÊÀ",0
szTitleClassicSlot db "[KAZIK 3D CASINO] - ÊËÀÑÑÈ×ÅÑÊÈÅ ÑËÎÒÛ 777",0
szTitleCloverSlot db "[KAZIK 3D CASINO] - ÑËÎÒ-ÌÀØÈÍÀ CLOVERPIT (5x3)",0
szTitleDice db "[KAZIK 3D CASINO] - ÈÃÐÀ Â ÊÎÑÒÈ (CRAPS)",0
szTitleSkulls db "[KAZIK 3D CASINO] - ÍÀϨÐÑÒÊÈ",0
szTitleCoin db "[KAZIK 3D CASINO] - ÌÎÍÅÒÊÀ (ÎШË/ÐÅØÊÀ)",0
szTitleSkillCheck db "[KAZIK 3D CASINO] - ÏÐÎÂÅÐÊÀ ÐÅÀÊÖÈÈ",0
szTitleBuckshot db "[KAZIK 3D CASINO] - BUCKSHOT ROULETTE",0
szTitleRussianRoulette db "[KAZIK 3D CASINO] - ÐÓÑÑÊÀß ÐÓËÅÒÊÀ",0
szTitleOnlineRR db "[KAZIK 3D CASINO] - ÑÅÒÅÂÀß ÐÓÑÑÊÀß ÐÓËÅÒÊÀ",0
szTitleUmamusume db "[KAZIK 3D CASINO] - ÑÊÀ×ÊÈ ÓÌÀÌÓÑÓÌÝ",0
szTitleHellTower db "[KAZIK 3D CASINO] - ÁÀØÍß ÀÄÀ (ÒÓÐÍÈÐ)",0
szTitleShop db "[KAZIK 3D CASINO] - ÁÓÒÈÊ È ÒÀËÈÑÌÀÍÛ",0
szTitleATM db "[KAZIK 3D CASINO] - ÁÀÍÊÎÌÀÒ",0
szTitleTerminal db "[KAZIK 3D CASINO] - ÒÅÐÌÈÍÀË ÈÃÐÎÊÀ",0
szTitleObserver db "[KAZIK 3D CASINO] - ÐÅÆÈÌ ÍÀÁËÞÄÀÒÅËß (ÈÈ)",0
msgDancerTipped db "Âû áðîñèëè $100 òàíöîâùèöå! ÓÄÀ×À ÀÊÒÈÂÈÐÎÂÀÍÀ!",0
msgNeedMoney db "Íåäîñòàòî÷íî äåíåã â êîøåëüêå!",0
@ -186,7 +215,29 @@ targetHUDFormat db "
luckHUDFormat db " ÓÄÀ×À: +",0
controlsHUD db "WASD/Ñòðåëêè: Õîäüáà | E: Äåéñòâèå | ESC: Ìåíþ",0
NUM_SPRITES equ 13
NUM_SPRITES equ 22
INTERACT_NONE equ 0
INTERACT_BLACKJACK equ 1
INTERACT_POKER equ 2
INTERACT_SLOTS_777 equ 3
INTERACT_ROULETTE equ 4
INTERACT_SKULLS equ 5
INTERACT_SHOP equ 6
INTERACT_ATM equ 7
INTERACT_DANCER equ 8
INTERACT_HELL_TOWER equ 9
INTERACT_DURAK equ 10
INTERACT_BUCKSHOT equ 11
INTERACT_COIN equ 12
INTERACT_DICE equ 13
INTERACT_SLOTS_CLOVER equ 14
INTERACT_UMAMUSUME equ 15
INTERACT_OBSERVER equ 16
INTERACT_TERMINAL equ 17
INTERACT_ONLINE_RR equ 18
INTERACT_RUSSIAN_ROULETTE equ 19
INTERACT_SKILL_CHECK equ 20
ALIGN 4
casinoSprites SpriteObject NUM_SPRITES dup(<>)
sortedSprites dd NUM_SPRITES dup(0)
@ -2633,18 +2684,104 @@ interaction_done:
ret
CheckInteractions ENDP
; --- LaunchClassicGame: Îòêðûòèå îòäåëüíîãî îêíà äëÿ êëàññè÷åñêîé âåðñèè èãðû ---
LaunchClassicGame PROC uses ebx esi edi, pGameProc:DWORD, gameId:DWORD, pTitle:DWORD
LOCAL rc3D[16]:BYTE
LOCAL conWnd:DWORD
LOCAL conW:DWORD, conH:DWORD, conX:DWORD, conY:DWORD
mov eax, gameId
mov currentGameId, eax
invoke AllocConsole
test eax, eax
jz launch_ret
invoke GetStdHandle, STD_OUTPUT_HANDLE
mov hOut, eax
invoke GetStdHandle, STD_INPUT_HANDLE
mov hIn, eax
invoke SetConsoleCP, 1251
invoke SetConsoleOutputCP, 1251
cmp pTitle, 0
je @F
invoke SetConsoleTitleA, pTitle
@@:
call EnableAnsi
call ConfigureConsoleSize
invoke GetConsoleWindow
mov conWnd, eax
test eax, eax
jz run_game_body
cmp h3DWnd, 0
je show_con_fallback
lea eax, rc3D
invoke GetWindowRect, h3DWnd, eax
mov eax, dword ptr rc3D[0]
add eax, 40
mov conX, eax
mov eax, dword ptr rc3D[4]
add eax, 40
mov conY, eax
mov conW, 960
mov conH, 680
invoke SetWindowPos, conWnd, 0, conX, conY, conW, conH, 40h ; SWP_SHOWWINDOW
jmp set_con_focus
show_con_fallback:
invoke ShowWindow, conWnd, 5 ; SW_SHOW
set_con_focus:
invoke SetForegroundWindow, conWnd
invoke SetFocus, conWnd
run_game_body:
call pGameProc
invoke FreeConsole
mov hOut, 0
mov hIn, 0
cmp h3DWnd, 0
je cleanup_game_input
invoke SetForegroundWindow, h3DWnd
invoke SetFocus, h3DWnd
cleanup_game_input:
mov ecx, 256
xor eax, eax
lea edi, keys3D
rep stosb
mov ecx, 256
lea edi, pressedKeys3D
rep stosb
invoke GetTickCount
mov previousTick3D, eax
mov frameStart3D, eax
mov deltaTime3D, 0
call SaveProgress3D
launch_ret:
ret
LaunchClassicGame ENDP
Trigger3DInteraction PROC
mov eax, interactTargetId
test eax, eax
jz @F
jz trigger_done
cmp eax, 8 ; DANCER
jne check_target_slots
cmp eax, INTERACT_DANCER
jne check_target_bj
cmp bankroll, 100
jl dancer_no_cash
sub bankroll, 100
inc dancerLuckBuff
; Tips are cosmetic and must not silently change game odds.
invoke CopyString3D, OFFSET textTips3D, OFFSET flashMessage
mov flashTimer, 100
invoke PlaySoundA, OFFSET soundJackpot, 0, 1
@ -2654,42 +2791,124 @@ dancer_no_cash:
mov flashTimer, 60
ret
check_target_slots:
cmp eax, 3 ; SLOTS
jne check_target_bj
mov engineMode, MODE_SLOTS
invoke PlaySoundA, OFFSET soundClick, 0, 1
check_target_bj:
cmp eax, INTERACT_BLACKJACK
jne check_target_poker
invoke LaunchClassicGame, OFFSET Game21, 1, OFFSET szTitleBlackjack
ret
check_target_bj:
cmp eax, 1 ; BLACKJACK
check_target_poker:
cmp eax, INTERACT_POKER
jne check_target_durak
invoke LaunchClassicGame, OFFSET GamePoker, 2, OFFSET szTitlePoker
ret
check_target_durak:
cmp eax, INTERACT_DURAK
jne check_target_slots777
invoke LaunchClassicGame, OFFSET GameDurak, 10, OFFSET szTitleDurak
ret
check_target_slots777:
cmp eax, INTERACT_SLOTS_777
jne check_target_slots_clover
invoke LaunchClassicGame, OFFSET GameClassicSlot, 9, OFFSET szTitleClassicSlot
ret
check_target_slots_clover:
cmp eax, INTERACT_SLOTS_CLOVER
jne check_target_roulette
mov engineMode, MODE_BLACKJACK
mov bjState, 0
invoke LaunchClassicGame, OFFSET GameSlot, 3, OFFSET szTitleCloverSlot
ret
check_target_roulette:
cmp eax, 4 ; ROULETTE
cmp eax, INTERACT_ROULETTE
jne check_target_dice
invoke LaunchClassicGame, OFFSET GameCasinoRoulette, 8, OFFSET szTitleCasinoRoulette
ret
check_target_dice:
cmp eax, INTERACT_DICE
jne check_target_skulls
invoke LaunchClassicGame, OFFSET GameDice, 7, OFFSET szTitleDice
ret
check_target_skulls:
cmp eax, INTERACT_SKULLS
jne check_target_coin
invoke LaunchClassicGame, OFFSET GameSkulls, 5, OFFSET szTitleSkulls
ret
check_target_coin:
cmp eax, INTERACT_COIN
jne check_target_skill
invoke LaunchClassicGame, OFFSET GameCoin, 6, OFFSET szTitleCoin
ret
check_target_skill:
cmp eax, INTERACT_SKILL_CHECK
jne check_target_buckshot
invoke LaunchClassicGame, OFFSET GameSkillCheck, 11, OFFSET szTitleSkillCheck
ret
check_target_buckshot:
cmp eax, INTERACT_BUCKSHOT
jne check_target_rr
invoke LaunchClassicGame, OFFSET GameBuckshot, 13, OFFSET szTitleBuckshot
ret
check_target_rr:
cmp eax, INTERACT_RUSSIAN_ROULETTE
jne check_target_online_rr
invoke LaunchClassicGame, OFFSET GameRoulette, 4, OFFSET szTitleRussianRoulette
ret
check_target_online_rr:
cmp eax, INTERACT_ONLINE_RR
jne check_target_umamusume
invoke LaunchClassicGame, OFFSET GameOnlineCasino, 20, OFFSET szTitleOnlineRR
ret
check_target_umamusume:
cmp eax, INTERACT_UMAMUSUME
jne check_target_hell
invoke LaunchClassicGame, OFFSET GameUmamusume, 21, OFFSET szTitleUmamusume
ret
check_target_hell:
cmp eax, INTERACT_HELL_TOWER
jne check_target_shop
mov engineMode, MODE_ROULETTE
mov roulState, 0
invoke LaunchClassicGame, OFFSET GameTournament, 666, OFFSET szTitleHellTower
ret
check_target_shop:
cmp eax, 6 ; SHOP
cmp eax, INTERACT_SHOP
jne check_target_atm
mov engineMode, MODE_SHOP
invoke LaunchClassicGame, OFFSET GameShop, 0, OFFSET szTitleShop
ret
check_target_atm:
cmp eax, 7 ; ATM
jne target_unported
cmp eax, INTERACT_ATM
jne check_target_terminal
mov engineMode, MODE_ATM
ret
check_target_terminal:
cmp eax, INTERACT_TERMINAL
jne check_target_observer
invoke LaunchClassicGame, OFFSET GamePlayerTerminal, 0, OFFSET szTitleTerminal
ret
check_target_observer:
cmp eax, INTERACT_OBSERVER
jne target_unported
invoke LaunchClassicGame, OFFSET GameObserver, 14, OFFSET szTitleObserver
ret
target_unported:
invoke CopyString3D, OFFSET textUnavailable3D, OFFSET flashMessage
mov flashTimer, 150
@@:
trigger_done:
ret
Trigger3DInteraction ENDP
@ -2721,7 +2940,7 @@ init_sprites_table:
mov casinoSprites[0*SIZEOF SpriteObject].curFrame, 0
mov casinoSprites[0*SIZEOF SpriteObject].animTimer, 0
mov casinoSprites[0*SIZEOF SpriteObject].animSpeed, 5
mov casinoSprites[0*SIZEOF SpriteObject].interactId, 8
mov casinoSprites[0*SIZEOF SpriteObject].interactId, INTERACT_DANCER
mov casinoSprites[0*SIZEOF SpriteObject].promptPtr, OFFSET promptDancer
; Sprite 1: VIP Dancer 2 (Center Stage Star)
@ -2732,7 +2951,7 @@ init_sprites_table:
mov casinoSprites[1*SIZEOF SpriteObject].curFrame, 2
mov casinoSprites[1*SIZEOF SpriteObject].animTimer, 0
mov casinoSprites[1*SIZEOF SpriteObject].animSpeed, 5
mov casinoSprites[1*SIZEOF SpriteObject].interactId, 8
mov casinoSprites[1*SIZEOF SpriteObject].interactId, INTERACT_DANCER
mov casinoSprites[1*SIZEOF SpriteObject].promptPtr, OFFSET promptDancer
; Sprite 2: VIP Dancer 3 (Stage Right)
@ -2743,21 +2962,21 @@ init_sprites_table:
mov casinoSprites[2*SIZEOF SpriteObject].curFrame, 1
mov casinoSprites[2*SIZEOF SpriteObject].animTimer, 0
mov casinoSprites[2*SIZEOF SpriteObject].animSpeed, 5
mov casinoSprites[2*SIZEOF SpriteObject].interactId, 8
mov casinoSprites[2*SIZEOF SpriteObject].interactId, INTERACT_DANCER
mov casinoSprites[2*SIZEOF SpriteObject].promptPtr, OFFSET promptDancer
; Sprite 3: Blackjack Table with Dealer (Front Center Left)
; Sprite 3: VIP Blackjack (Front Center Left)
mov casinoSprites[3*SIZEOF SpriteObject].posX, (12 * FP_1 + FP_HALF)
mov casinoSprites[3*SIZEOF SpriteObject].posY, (10 * FP_1)
mov casinoSprites[3*SIZEOF SpriteObject].posY, (8 * FP_1)
mov casinoSprites[3*SIZEOF SpriteObject].baseTexId, 30
mov casinoSprites[3*SIZEOF SpriteObject].frameCount, 1
mov casinoSprites[3*SIZEOF SpriteObject].curFrame, 0
mov casinoSprites[3*SIZEOF SpriteObject].animTimer, 0
mov casinoSprites[3*SIZEOF SpriteObject].animSpeed, 1
mov casinoSprites[3*SIZEOF SpriteObject].interactId, 1
mov casinoSprites[3*SIZEOF SpriteObject].interactId, INTERACT_BLACKJACK
mov casinoSprites[3*SIZEOF SpriteObject].promptPtr, OFFSET promptBlackjack
; Sprite 4: Roulette Table (Front Center)
; Sprite 4: European Roulette Table (Front Center)
mov casinoSprites[4*SIZEOF SpriteObject].posX, (16 * FP_1 + FP_HALF)
mov casinoSprites[4*SIZEOF SpriteObject].posY, (10 * FP_1)
mov casinoSprites[4*SIZEOF SpriteObject].baseTexId, 31
@ -2765,96 +2984,195 @@ init_sprites_table:
mov casinoSprites[4*SIZEOF SpriteObject].curFrame, 0
mov casinoSprites[4*SIZEOF SpriteObject].animTimer, 0
mov casinoSprites[4*SIZEOF SpriteObject].animSpeed, 1
mov casinoSprites[4*SIZEOF SpriteObject].interactId, 4
mov casinoSprites[4*SIZEOF SpriteObject].promptPtr, OFFSET promptRoulette
mov casinoSprites[4*SIZEOF SpriteObject].interactId, INTERACT_ROULETTE
mov casinoSprites[4*SIZEOF SpriteObject].promptPtr, OFFSET promptCasinoRoulette
; Sprite 5: Poker Table (Front Center Right)
mov casinoSprites[5*SIZEOF SpriteObject].posX, (21 * FP_1)
mov casinoSprites[5*SIZEOF SpriteObject].posY, (10 * FP_1)
; Sprite 5: Texas Hold'em Poker Table (Front Center Right)
mov casinoSprites[5*SIZEOF SpriteObject].posX, (20 * FP_1 + FP_HALF)
mov casinoSprites[5*SIZEOF SpriteObject].posY, (8 * FP_1)
mov casinoSprites[5*SIZEOF SpriteObject].baseTexId, 30
mov casinoSprites[5*SIZEOF SpriteObject].frameCount, 1
mov casinoSprites[5*SIZEOF SpriteObject].curFrame, 0
mov casinoSprites[5*SIZEOF SpriteObject].animTimer, 0
mov casinoSprites[5*SIZEOF SpriteObject].animSpeed, 1
mov casinoSprites[5*SIZEOF SpriteObject].interactId, 1
mov casinoSprites[5*SIZEOF SpriteObject].interactId, INTERACT_POKER
mov casinoSprites[5*SIZEOF SpriteObject].promptPtr, OFFSET promptPoker
; Sprite 6: Slot Machine 1 (West Arcade)
mov casinoSprites[6*SIZEOF SpriteObject].posX, (6 * FP_1)
; Sprite 6: Podkidnoy Durak Card Table
mov casinoSprites[6*SIZEOF SpriteObject].posX, (24 * FP_1 + FP_HALF)
mov casinoSprites[6*SIZEOF SpriteObject].posY, (8 * FP_1)
mov casinoSprites[6*SIZEOF SpriteObject].baseTexId, 24
mov casinoSprites[6*SIZEOF SpriteObject].frameCount, 3
mov casinoSprites[6*SIZEOF SpriteObject].baseTexId, 30
mov casinoSprites[6*SIZEOF SpriteObject].frameCount, 1
mov casinoSprites[6*SIZEOF SpriteObject].curFrame, 0
mov casinoSprites[6*SIZEOF SpriteObject].animTimer, 0
mov casinoSprites[6*SIZEOF SpriteObject].animSpeed, 8
mov casinoSprites[6*SIZEOF SpriteObject].interactId, 3
mov casinoSprites[6*SIZEOF SpriteObject].promptPtr, OFFSET promptSlot1
mov casinoSprites[6*SIZEOF SpriteObject].animSpeed, 1
mov casinoSprites[6*SIZEOF SpriteObject].interactId, INTERACT_DURAK
mov casinoSprites[6*SIZEOF SpriteObject].promptPtr, OFFSET promptDurak
; Sprite 7: Slot Machine 2 (CloverPit)
; Sprite 7: Classic Slots 777 (West Arcade 1)
mov casinoSprites[7*SIZEOF SpriteObject].posX, (6 * FP_1)
mov casinoSprites[7*SIZEOF SpriteObject].posY, (11 * FP_1)
mov casinoSprites[7*SIZEOF SpriteObject].posY, (8 * FP_1)
mov casinoSprites[7*SIZEOF SpriteObject].baseTexId, 24
mov casinoSprites[7*SIZEOF SpriteObject].frameCount, 3
mov casinoSprites[7*SIZEOF SpriteObject].curFrame, 1
mov casinoSprites[7*SIZEOF SpriteObject].curFrame, 0
mov casinoSprites[7*SIZEOF SpriteObject].animTimer, 0
mov casinoSprites[7*SIZEOF SpriteObject].animSpeed, 8
mov casinoSprites[7*SIZEOF SpriteObject].interactId, 3
mov casinoSprites[7*SIZEOF SpriteObject].promptPtr, OFFSET promptSlot2
mov casinoSprites[7*SIZEOF SpriteObject].interactId, INTERACT_SLOTS_777
mov casinoSprites[7*SIZEOF SpriteObject].promptPtr, OFFSET promptClassicSlot
; Sprite 8: Slot Machine 3
; Sprite 8: CloverPit Slots 5x3 (West Arcade 2)
mov casinoSprites[8*SIZEOF SpriteObject].posX, (6 * FP_1)
mov casinoSprites[8*SIZEOF SpriteObject].posY, (14 * FP_1)
mov casinoSprites[8*SIZEOF SpriteObject].posY, (11 * FP_1)
mov casinoSprites[8*SIZEOF SpriteObject].baseTexId, 24
mov casinoSprites[8*SIZEOF SpriteObject].frameCount, 3
mov casinoSprites[8*SIZEOF SpriteObject].curFrame, 2
mov casinoSprites[8*SIZEOF SpriteObject].curFrame, 1
mov casinoSprites[8*SIZEOF SpriteObject].animTimer, 0
mov casinoSprites[8*SIZEOF SpriteObject].animSpeed, 8
mov casinoSprites[8*SIZEOF SpriteObject].interactId, 3
mov casinoSprites[8*SIZEOF SpriteObject].promptPtr, OFFSET promptSlot1
mov casinoSprites[8*SIZEOF SpriteObject].interactId, INTERACT_SLOTS_CLOVER
mov casinoSprites[8*SIZEOF SpriteObject].promptPtr, OFFSET promptCloverSlot
; Sprite 9: Bartender / Bar Counter (East Wing)
mov casinoSprites[9*SIZEOF SpriteObject].posX, (26 * FP_1)
mov casinoSprites[9*SIZEOF SpriteObject].posY, (12 * FP_1)
mov casinoSprites[9*SIZEOF SpriteObject].baseTexId, 32
; Sprite 9: Craps & Dice Table (West Arcade 3)
mov casinoSprites[9*SIZEOF SpriteObject].posX, (6 * FP_1)
mov casinoSprites[9*SIZEOF SpriteObject].posY, (14 * FP_1)
mov casinoSprites[9*SIZEOF SpriteObject].baseTexId, 30
mov casinoSprites[9*SIZEOF SpriteObject].frameCount, 1
mov casinoSprites[9*SIZEOF SpriteObject].curFrame, 0
mov casinoSprites[9*SIZEOF SpriteObject].animTimer, 0
mov casinoSprites[9*SIZEOF SpriteObject].animSpeed, 1
mov casinoSprites[9*SIZEOF SpriteObject].interactId, 6
mov casinoSprites[9*SIZEOF SpriteObject].promptPtr, OFFSET promptShop
mov casinoSprites[9*SIZEOF SpriteObject].interactId, INTERACT_DICE
mov casinoSprites[9*SIZEOF SpriteObject].promptPtr, OFFSET promptDice
; Sprite 10: ATM Bank Terminal (East Wing)
mov casinoSprites[10*SIZEOF SpriteObject].posX, (26 * FP_1)
mov casinoSprites[10*SIZEOF SpriteObject].posY, (16 * FP_1)
mov casinoSprites[10*SIZEOF SpriteObject].baseTexId, 33
; Sprite 10: Skulls & Cups Table
mov casinoSprites[10*SIZEOF SpriteObject].posX, (10 * FP_1)
mov casinoSprites[10*SIZEOF SpriteObject].posY, (15 * FP_1)
mov casinoSprites[10*SIZEOF SpriteObject].baseTexId, 30
mov casinoSprites[10*SIZEOF SpriteObject].frameCount, 1
mov casinoSprites[10*SIZEOF SpriteObject].curFrame, 0
mov casinoSprites[10*SIZEOF SpriteObject].animTimer, 0
mov casinoSprites[10*SIZEOF SpriteObject].animSpeed, 1
mov casinoSprites[10*SIZEOF SpriteObject].interactId, 7
mov casinoSprites[10*SIZEOF SpriteObject].promptPtr, OFFSET promptATM
mov casinoSprites[10*SIZEOF SpriteObject].interactId, INTERACT_SKULLS
mov casinoSprites[10*SIZEOF SpriteObject].promptPtr, OFFSET promptSkulls
; Sprite 11: Underground Table (South Wing)
mov casinoSprites[11*SIZEOF SpriteObject].posX, (16 * FP_1 + FP_HALF)
mov casinoSprites[11*SIZEOF SpriteObject].posY, (24 * FP_1)
mov casinoSprites[11*SIZEOF SpriteObject].baseTexId, 34
; Sprite 11: Coin Toss Stand
mov casinoSprites[11*SIZEOF SpriteObject].posX, (14 * FP_1)
mov casinoSprites[11*SIZEOF SpriteObject].posY, (15 * FP_1)
mov casinoSprites[11*SIZEOF SpriteObject].baseTexId, 30
mov casinoSprites[11*SIZEOF SpriteObject].frameCount, 1
mov casinoSprites[11*SIZEOF SpriteObject].curFrame, 0
mov casinoSprites[11*SIZEOF SpriteObject].animTimer, 0
mov casinoSprites[11*SIZEOF SpriteObject].animSpeed, 1
mov casinoSprites[11*SIZEOF SpriteObject].interactId, 5
mov casinoSprites[11*SIZEOF SpriteObject].promptPtr, OFFSET promptBackroom
mov casinoSprites[11*SIZEOF SpriteObject].interactId, INTERACT_COIN
mov casinoSprites[11*SIZEOF SpriteObject].promptPtr, OFFSET promptCoin
; Sprite 12: Secret Demon Portal (South Wing)
mov casinoSprites[12*SIZEOF SpriteObject].posX, (16 * FP_1 + FP_HALF)
mov casinoSprites[12*SIZEOF SpriteObject].posY, (29 * FP_1)
mov casinoSprites[12*SIZEOF SpriteObject].baseTexId, 4
; Sprite 12: Skill Check Stand
mov casinoSprites[12*SIZEOF SpriteObject].posX, (18 * FP_1)
mov casinoSprites[12*SIZEOF SpriteObject].posY, (15 * FP_1)
mov casinoSprites[12*SIZEOF SpriteObject].baseTexId, 30
mov casinoSprites[12*SIZEOF SpriteObject].frameCount, 1
mov casinoSprites[12*SIZEOF SpriteObject].curFrame, 0
mov casinoSprites[12*SIZEOF SpriteObject].animTimer, 0
mov casinoSprites[12*SIZEOF SpriteObject].animSpeed, 1
mov casinoSprites[12*SIZEOF SpriteObject].interactId, 9
mov casinoSprites[12*SIZEOF SpriteObject].promptPtr, OFFSET promptHell
mov casinoSprites[12*SIZEOF SpriteObject].interactId, INTERACT_SKILL_CHECK
mov casinoSprites[12*SIZEOF SpriteObject].promptPtr, OFFSET promptSkillCheck
; Sprite 13: Umamusume Derby Lounge
mov casinoSprites[13*SIZEOF SpriteObject].posX, (22 * FP_1)
mov casinoSprites[13*SIZEOF SpriteObject].posY, (15 * FP_1)
mov casinoSprites[13*SIZEOF SpriteObject].baseTexId, 30
mov casinoSprites[13*SIZEOF SpriteObject].frameCount, 1
mov casinoSprites[13*SIZEOF SpriteObject].curFrame, 0
mov casinoSprites[13*SIZEOF SpriteObject].animTimer, 0
mov casinoSprites[13*SIZEOF SpriteObject].animSpeed, 1
mov casinoSprites[13*SIZEOF SpriteObject].interactId, INTERACT_UMAMUSUME
mov casinoSprites[13*SIZEOF SpriteObject].promptPtr, OFFSET promptUmamusume
; Sprite 14: Boutique & Shop (East Wing)
mov casinoSprites[14*SIZEOF SpriteObject].posX, (26 * FP_1)
mov casinoSprites[14*SIZEOF SpriteObject].posY, (12 * FP_1)
mov casinoSprites[14*SIZEOF SpriteObject].baseTexId, 32
mov casinoSprites[14*SIZEOF SpriteObject].frameCount, 1
mov casinoSprites[14*SIZEOF SpriteObject].curFrame, 0
mov casinoSprites[14*SIZEOF SpriteObject].animTimer, 0
mov casinoSprites[14*SIZEOF SpriteObject].animSpeed, 1
mov casinoSprites[14*SIZEOF SpriteObject].interactId, INTERACT_SHOP
mov casinoSprites[14*SIZEOF SpriteObject].promptPtr, OFFSET promptShop
; Sprite 15: Cashier & ATM (East Wing)
mov casinoSprites[15*SIZEOF SpriteObject].posX, (26 * FP_1)
mov casinoSprites[15*SIZEOF SpriteObject].posY, (16 * FP_1)
mov casinoSprites[15*SIZEOF SpriteObject].baseTexId, 33
mov casinoSprites[15*SIZEOF SpriteObject].frameCount, 1
mov casinoSprites[15*SIZEOF SpriteObject].curFrame, 0
mov casinoSprites[15*SIZEOF SpriteObject].animTimer, 0
mov casinoSprites[15*SIZEOF SpriteObject].animSpeed, 1
mov casinoSprites[15*SIZEOF SpriteObject].interactId, INTERACT_ATM
mov casinoSprites[15*SIZEOF SpriteObject].promptPtr, OFFSET promptATM
; Sprite 16: Player Terminal (East Wing)
mov casinoSprites[16*SIZEOF SpriteObject].posX, (26 * FP_1)
mov casinoSprites[16*SIZEOF SpriteObject].posY, (20 * FP_1)
mov casinoSprites[16*SIZEOF SpriteObject].baseTexId, 33
mov casinoSprites[16*SIZEOF SpriteObject].frameCount, 1
mov casinoSprites[16*SIZEOF SpriteObject].curFrame, 0
mov casinoSprites[16*SIZEOF SpriteObject].animTimer, 0
mov casinoSprites[16*SIZEOF SpriteObject].animSpeed, 1
mov casinoSprites[16*SIZEOF SpriteObject].interactId, INTERACT_TERMINAL
mov casinoSprites[16*SIZEOF SpriteObject].promptPtr, OFFSET promptPlayerTerminal
; Sprite 17: Buckshot Roulette (South-West)
mov casinoSprites[17*SIZEOF SpriteObject].posX, (12 * FP_1)
mov casinoSprites[17*SIZEOF SpriteObject].posY, (22 * FP_1)
mov casinoSprites[17*SIZEOF SpriteObject].baseTexId, 30
mov casinoSprites[17*SIZEOF SpriteObject].frameCount, 1
mov casinoSprites[17*SIZEOF SpriteObject].curFrame, 0
mov casinoSprites[17*SIZEOF SpriteObject].animTimer, 0
mov casinoSprites[17*SIZEOF SpriteObject].animSpeed, 1
mov casinoSprites[17*SIZEOF SpriteObject].interactId, INTERACT_BUCKSHOT
mov casinoSprites[17*SIZEOF SpriteObject].promptPtr, OFFSET promptBuckshot
; Sprite 18: Observer Lounge (South-East)
mov casinoSprites[18*SIZEOF SpriteObject].posX, (20 * FP_1)
mov casinoSprites[18*SIZEOF SpriteObject].posY, (22 * FP_1)
mov casinoSprites[18*SIZEOF SpriteObject].baseTexId, 30
mov casinoSprites[18*SIZEOF SpriteObject].frameCount, 1
mov casinoSprites[18*SIZEOF SpriteObject].curFrame, 0
mov casinoSprites[18*SIZEOF SpriteObject].animTimer, 0
mov casinoSprites[18*SIZEOF SpriteObject].animSpeed, 1
mov casinoSprites[18*SIZEOF SpriteObject].interactId, INTERACT_OBSERVER
mov casinoSprites[18*SIZEOF SpriteObject].promptPtr, OFFSET promptObserver
; Sprite 19: Russian Roulette (Backroom Entrance)
mov casinoSprites[19*SIZEOF SpriteObject].posX, (16 * FP_1)
mov casinoSprites[19*SIZEOF SpriteObject].posY, (25 * FP_1)
mov casinoSprites[19*SIZEOF SpriteObject].baseTexId, 34
mov casinoSprites[19*SIZEOF SpriteObject].frameCount, 1
mov casinoSprites[19*SIZEOF SpriteObject].curFrame, 0
mov casinoSprites[19*SIZEOF SpriteObject].animTimer, 0
mov casinoSprites[19*SIZEOF SpriteObject].animSpeed, 1
mov casinoSprites[19*SIZEOF SpriteObject].interactId, INTERACT_RUSSIAN_ROULETTE
mov casinoSprites[19*SIZEOF SpriteObject].promptPtr, OFFSET promptRussianRoulette
; Sprite 20: Online Russian Roulette (Backroom Secret Terminal)
mov casinoSprites[20*SIZEOF SpriteObject].posX, (18 * FP_1)
mov casinoSprites[20*SIZEOF SpriteObject].posY, (25 * FP_1)
mov casinoSprites[20*SIZEOF SpriteObject].baseTexId, 34
mov casinoSprites[20*SIZEOF SpriteObject].frameCount, 1
mov casinoSprites[20*SIZEOF SpriteObject].curFrame, 0
mov casinoSprites[20*SIZEOF SpriteObject].animTimer, 0
mov casinoSprites[20*SIZEOF SpriteObject].animSpeed, 1
mov casinoSprites[20*SIZEOF SpriteObject].interactId, INTERACT_ONLINE_RR
mov casinoSprites[20*SIZEOF SpriteObject].promptPtr, OFFSET promptOnlineRR
; Sprite 21: Hell Tower Portal (South Wing Deep End)
mov casinoSprites[21*SIZEOF SpriteObject].posX, (16 * FP_1 + FP_HALF)
mov casinoSprites[21*SIZEOF SpriteObject].posY, (29 * FP_1)
mov casinoSprites[21*SIZEOF SpriteObject].baseTexId, 4
mov casinoSprites[21*SIZEOF SpriteObject].frameCount, 1
mov casinoSprites[21*SIZEOF SpriteObject].curFrame, 0
mov casinoSprites[21*SIZEOF SpriteObject].animTimer, 0
mov casinoSprites[21*SIZEOF SpriteObject].animSpeed, 1
mov casinoSprites[21*SIZEOF SpriteObject].interactId, INTERACT_HELL_TOWER
mov casinoSprites[21*SIZEOF SpriteObject].promptPtr, OFFSET promptHellTower
mov eax, 1
jmp init_return

View file

@ -72,6 +72,13 @@ GetConsoleScreenBufferInfo PROTO :DWORD, :DWORD
GetConsoleMode PROTO :DWORD, :DWORD
SetConsoleMode PROTO :DWORD, :DWORD
FillConsoleOutputCharacterA PROTO :DWORD, :DWORD, :DWORD, :DWORD, :DWORD
AllocConsole PROTO
FreeConsole PROTO
GetConsoleWindow PROTO
SetConsoleTitleA PROTO :DWORD
GetWindowRect PROTO :DWORD, :DWORD
SetWindowPos PROTO :DWORD, :DWORD, :DWORD, :DWORD, :DWORD, :DWORD, :DWORD
SetFocus PROTO :DWORD
mciSendStringA PROTO :DWORD, :DWORD, :DWORD, :DWORD
waveOutSetVolume PROTO :DWORD, :DWORD
AnimFrameDelay PROTO :DWORD
@ -14925,6 +14932,46 @@ uma_exit:
ret
GameUmamusume ENDP
; --- GamePlayerTerminal: Èãðîâîé òåðìèíàë (ñòàòèñòèêà, à÷èâêè, êâåñòû) ---
titleTerminal db "=== ÒÅÐÌÈÍÀË ÈÃÐÎÊÀ ===",13,10,0
textTerminalMenu db "1. Äîñòèæåíèÿ",13,10,"2. Ñòàòèñòèêà ïî èãðàì",13,10,"3. Åæåäíåâíûå çàäàíèÿ",13,10,"4. Ãëàâíîå ìåíþ è ÷èòû",13,10,"0. Íàçàä â êàçèíî",13,10,0
GamePlayerTerminal PROC
terminal_loop:
call ClearView
invoke PrintTitleColor, OFFSET titleTerminal
invoke PrintStr, OFFSET textTerminalMenu
invoke PrintStr, OFFSET choiceText
call ReadKey
cmp al, '1'
je term_ach
cmp al, '2'
je term_stats
cmp al, '3'
je term_daily
cmp al, '4'
je term_classic_menu
cmp al, '0'
je term_exit
cmp al, 1Bh
je term_exit
jmp terminal_loop
term_ach:
call GameAchievements
jmp terminal_loop
term_stats:
call GameStatsByGame
jmp terminal_loop
term_daily:
call GameDailyTasks
jmp terminal_loop
term_classic_menu:
call MainMenu
jmp terminal_loop
term_exit:
ret
GamePlayerTerminal ENDP
include casino3d.inc

BIN
poker.exe

Binary file not shown.