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 flashTimer dd 0
flashMessage db 128 dup(0) flashMessage db 128 dup(0)
promptDancer db "[E] CABARET - TIP $100",0 promptDancer db "[E] ÊÀÁÀÐÅ - ×ÀÅÂÛÅ $100",0
promptSlot1 db "[E] SLOTS 777",0 promptBlackjack db "[E] ÁËÝÊÄÆÅÊ (21)",0
promptSlot2 db "[E] SLOTS 777",0 promptPoker db "[E] ÏÎÊÅÐ (TEXAS HOLD'EM)",0
promptBlackjack db "[E] BLACKJACK / 21",0 promptDurak db "[E] ÊÀÐÒÛ: ÏÎÄÊÈÄÍÎÉ ÄÓÐÀÊ",0
promptPoker db "POKER - UNDER CONSTRUCTION",0 promptCasinoRoulette db "[E] ÅÂÐÎÏÅÉÑÊÀß ÐÓËÅÒÊÀ",0
promptRoulette db "[E] ROULETTE",0 promptClassicSlot db "[E] ÊËÀÑÑÈ×ÅÑÊÈÅ ÑËÎÒÛ 777",0
promptShop db "[E] BOUTIQUE",0 promptCloverSlot db "[E] ÑËÎÒÛ CLOVERPIT (5x3)",0
promptATM db "[E] CASHIER",0 promptDice db "[E] ÈÃÐÀ Â ÊÎÑÒÈ (CRAPS)",0
promptBackroom db "BACKROOM - UNDER CONSTRUCTION",0 promptSkulls db "[E] ÍÀϨÐÑÒÊÈ (×ÅÐÅÏÀ)",0
promptDurak db "DURAK - UNDER CONSTRUCTION",0 promptCoin db "[E] ÌÎÍÅÒÊÀ (ÎШË/ÐÅØÊÀ)",0
promptHell db "TOWER - UNDER CONSTRUCTION",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 msgDancerTipped db "Âû áðîñèëè $100 òàíöîâùèöå! ÓÄÀ×À ÀÊÒÈÂÈÐÎÂÀÍÀ!",0
msgNeedMoney db "Íåäîñòàòî÷íî äåíåã â êîøåëüêå!",0 msgNeedMoney db "Íåäîñòàòî÷íî äåíåã â êîøåëüêå!",0
@ -186,7 +215,29 @@ targetHUDFormat db "
luckHUDFormat db " ÓÄÀ×À: +",0 luckHUDFormat db " ÓÄÀ×À: +",0
controlsHUD db "WASD/Ñòðåëêè: Õîäüáà | E: Äåéñòâèå | ESC: Ìåíþ",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 ALIGN 4
casinoSprites SpriteObject NUM_SPRITES dup(<>) casinoSprites SpriteObject NUM_SPRITES dup(<>)
sortedSprites dd NUM_SPRITES dup(0) sortedSprites dd NUM_SPRITES dup(0)
@ -2633,18 +2684,104 @@ interaction_done:
ret ret
CheckInteractions ENDP 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 Trigger3DInteraction PROC
mov eax, interactTargetId mov eax, interactTargetId
test eax, eax test eax, eax
jz @F jz trigger_done
cmp eax, 8 ; DANCER cmp eax, INTERACT_DANCER
jne check_target_slots jne check_target_bj
cmp bankroll, 100 cmp bankroll, 100
jl dancer_no_cash jl dancer_no_cash
sub bankroll, 100 sub bankroll, 100
inc dancerLuckBuff inc dancerLuckBuff
; Tips are cosmetic and must not silently change game odds.
invoke CopyString3D, OFFSET textTips3D, OFFSET flashMessage invoke CopyString3D, OFFSET textTips3D, OFFSET flashMessage
mov flashTimer, 100 mov flashTimer, 100
invoke PlaySoundA, OFFSET soundJackpot, 0, 1 invoke PlaySoundA, OFFSET soundJackpot, 0, 1
@ -2654,42 +2791,124 @@ dancer_no_cash:
mov flashTimer, 60 mov flashTimer, 60
ret ret
check_target_slots: check_target_bj:
cmp eax, 3 ; SLOTS cmp eax, INTERACT_BLACKJACK
jne check_target_bj jne check_target_poker
mov engineMode, MODE_SLOTS invoke LaunchClassicGame, OFFSET Game21, 1, OFFSET szTitleBlackjack
invoke PlaySoundA, OFFSET soundClick, 0, 1
ret ret
check_target_bj: check_target_poker:
cmp eax, 1 ; BLACKJACK 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 jne check_target_roulette
mov engineMode, MODE_BLACKJACK invoke LaunchClassicGame, OFFSET GameSlot, 3, OFFSET szTitleCloverSlot
mov bjState, 0
ret ret
check_target_roulette: 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 jne check_target_shop
mov engineMode, MODE_ROULETTE invoke LaunchClassicGame, OFFSET GameTournament, 666, OFFSET szTitleHellTower
mov roulState, 0
ret ret
check_target_shop: check_target_shop:
cmp eax, 6 ; SHOP cmp eax, INTERACT_SHOP
jne check_target_atm jne check_target_atm
mov engineMode, MODE_SHOP invoke LaunchClassicGame, OFFSET GameShop, 0, OFFSET szTitleShop
ret ret
check_target_atm: check_target_atm:
cmp eax, 7 ; ATM cmp eax, INTERACT_ATM
jne target_unported jne check_target_terminal
mov engineMode, MODE_ATM mov engineMode, MODE_ATM
ret 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: target_unported:
invoke CopyString3D, OFFSET textUnavailable3D, OFFSET flashMessage invoke CopyString3D, OFFSET textUnavailable3D, OFFSET flashMessage
mov flashTimer, 150 mov flashTimer, 150
@@: trigger_done:
ret ret
Trigger3DInteraction ENDP Trigger3DInteraction ENDP
@ -2721,7 +2940,7 @@ init_sprites_table:
mov casinoSprites[0*SIZEOF SpriteObject].curFrame, 0 mov casinoSprites[0*SIZEOF SpriteObject].curFrame, 0
mov casinoSprites[0*SIZEOF SpriteObject].animTimer, 0 mov casinoSprites[0*SIZEOF SpriteObject].animTimer, 0
mov casinoSprites[0*SIZEOF SpriteObject].animSpeed, 5 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 mov casinoSprites[0*SIZEOF SpriteObject].promptPtr, OFFSET promptDancer
; Sprite 1: VIP Dancer 2 (Center Stage Star) ; 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].curFrame, 2
mov casinoSprites[1*SIZEOF SpriteObject].animTimer, 0 mov casinoSprites[1*SIZEOF SpriteObject].animTimer, 0
mov casinoSprites[1*SIZEOF SpriteObject].animSpeed, 5 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 mov casinoSprites[1*SIZEOF SpriteObject].promptPtr, OFFSET promptDancer
; Sprite 2: VIP Dancer 3 (Stage Right) ; 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].curFrame, 1
mov casinoSprites[2*SIZEOF SpriteObject].animTimer, 0 mov casinoSprites[2*SIZEOF SpriteObject].animTimer, 0
mov casinoSprites[2*SIZEOF SpriteObject].animSpeed, 5 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 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].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].baseTexId, 30
mov casinoSprites[3*SIZEOF SpriteObject].frameCount, 1 mov casinoSprites[3*SIZEOF SpriteObject].frameCount, 1
mov casinoSprites[3*SIZEOF SpriteObject].curFrame, 0 mov casinoSprites[3*SIZEOF SpriteObject].curFrame, 0
mov casinoSprites[3*SIZEOF SpriteObject].animTimer, 0 mov casinoSprites[3*SIZEOF SpriteObject].animTimer, 0
mov casinoSprites[3*SIZEOF SpriteObject].animSpeed, 1 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 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].posX, (16 * FP_1 + FP_HALF)
mov casinoSprites[4*SIZEOF SpriteObject].posY, (10 * FP_1) mov casinoSprites[4*SIZEOF SpriteObject].posY, (10 * FP_1)
mov casinoSprites[4*SIZEOF SpriteObject].baseTexId, 31 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].curFrame, 0
mov casinoSprites[4*SIZEOF SpriteObject].animTimer, 0 mov casinoSprites[4*SIZEOF SpriteObject].animTimer, 0
mov casinoSprites[4*SIZEOF SpriteObject].animSpeed, 1 mov casinoSprites[4*SIZEOF SpriteObject].animSpeed, 1
mov casinoSprites[4*SIZEOF SpriteObject].interactId, 4 mov casinoSprites[4*SIZEOF SpriteObject].interactId, INTERACT_ROULETTE
mov casinoSprites[4*SIZEOF SpriteObject].promptPtr, OFFSET promptRoulette mov casinoSprites[4*SIZEOF SpriteObject].promptPtr, OFFSET promptCasinoRoulette
; Sprite 5: Poker Table (Front Center Right) ; Sprite 5: Texas Hold'em Poker Table (Front Center Right)
mov casinoSprites[5*SIZEOF SpriteObject].posX, (21 * FP_1) mov casinoSprites[5*SIZEOF SpriteObject].posX, (20 * FP_1 + FP_HALF)
mov casinoSprites[5*SIZEOF SpriteObject].posY, (10 * FP_1) mov casinoSprites[5*SIZEOF SpriteObject].posY, (8 * FP_1)
mov casinoSprites[5*SIZEOF SpriteObject].baseTexId, 30 mov casinoSprites[5*SIZEOF SpriteObject].baseTexId, 30
mov casinoSprites[5*SIZEOF SpriteObject].frameCount, 1 mov casinoSprites[5*SIZEOF SpriteObject].frameCount, 1
mov casinoSprites[5*SIZEOF SpriteObject].curFrame, 0 mov casinoSprites[5*SIZEOF SpriteObject].curFrame, 0
mov casinoSprites[5*SIZEOF SpriteObject].animTimer, 0 mov casinoSprites[5*SIZEOF SpriteObject].animTimer, 0
mov casinoSprites[5*SIZEOF SpriteObject].animSpeed, 1 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 mov casinoSprites[5*SIZEOF SpriteObject].promptPtr, OFFSET promptPoker
; Sprite 6: Slot Machine 1 (West Arcade) ; Sprite 6: Podkidnoy Durak Card Table
mov casinoSprites[6*SIZEOF SpriteObject].posX, (6 * FP_1) 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].posY, (8 * FP_1)
mov casinoSprites[6*SIZEOF SpriteObject].baseTexId, 24 mov casinoSprites[6*SIZEOF SpriteObject].baseTexId, 30
mov casinoSprites[6*SIZEOF SpriteObject].frameCount, 3 mov casinoSprites[6*SIZEOF SpriteObject].frameCount, 1
mov casinoSprites[6*SIZEOF SpriteObject].curFrame, 0 mov casinoSprites[6*SIZEOF SpriteObject].curFrame, 0
mov casinoSprites[6*SIZEOF SpriteObject].animTimer, 0 mov casinoSprites[6*SIZEOF SpriteObject].animTimer, 0
mov casinoSprites[6*SIZEOF SpriteObject].animSpeed, 8 mov casinoSprites[6*SIZEOF SpriteObject].animSpeed, 1
mov casinoSprites[6*SIZEOF SpriteObject].interactId, 3 mov casinoSprites[6*SIZEOF SpriteObject].interactId, INTERACT_DURAK
mov casinoSprites[6*SIZEOF SpriteObject].promptPtr, OFFSET promptSlot1 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].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].baseTexId, 24
mov casinoSprites[7*SIZEOF SpriteObject].frameCount, 3 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].animTimer, 0
mov casinoSprites[7*SIZEOF SpriteObject].animSpeed, 8 mov casinoSprites[7*SIZEOF SpriteObject].animSpeed, 8
mov casinoSprites[7*SIZEOF SpriteObject].interactId, 3 mov casinoSprites[7*SIZEOF SpriteObject].interactId, INTERACT_SLOTS_777
mov casinoSprites[7*SIZEOF SpriteObject].promptPtr, OFFSET promptSlot2 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].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].baseTexId, 24
mov casinoSprites[8*SIZEOF SpriteObject].frameCount, 3 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].animTimer, 0
mov casinoSprites[8*SIZEOF SpriteObject].animSpeed, 8 mov casinoSprites[8*SIZEOF SpriteObject].animSpeed, 8
mov casinoSprites[8*SIZEOF SpriteObject].interactId, 3 mov casinoSprites[8*SIZEOF SpriteObject].interactId, INTERACT_SLOTS_CLOVER
mov casinoSprites[8*SIZEOF SpriteObject].promptPtr, OFFSET promptSlot1 mov casinoSprites[8*SIZEOF SpriteObject].promptPtr, OFFSET promptCloverSlot
; Sprite 9: Bartender / Bar Counter (East Wing) ; Sprite 9: Craps & Dice Table (West Arcade 3)
mov casinoSprites[9*SIZEOF SpriteObject].posX, (26 * FP_1) mov casinoSprites[9*SIZEOF SpriteObject].posX, (6 * FP_1)
mov casinoSprites[9*SIZEOF SpriteObject].posY, (12 * FP_1) mov casinoSprites[9*SIZEOF SpriteObject].posY, (14 * FP_1)
mov casinoSprites[9*SIZEOF SpriteObject].baseTexId, 32 mov casinoSprites[9*SIZEOF SpriteObject].baseTexId, 30
mov casinoSprites[9*SIZEOF SpriteObject].frameCount, 1 mov casinoSprites[9*SIZEOF SpriteObject].frameCount, 1
mov casinoSprites[9*SIZEOF SpriteObject].curFrame, 0 mov casinoSprites[9*SIZEOF SpriteObject].curFrame, 0
mov casinoSprites[9*SIZEOF SpriteObject].animTimer, 0 mov casinoSprites[9*SIZEOF SpriteObject].animTimer, 0
mov casinoSprites[9*SIZEOF SpriteObject].animSpeed, 1 mov casinoSprites[9*SIZEOF SpriteObject].animSpeed, 1
mov casinoSprites[9*SIZEOF SpriteObject].interactId, 6 mov casinoSprites[9*SIZEOF SpriteObject].interactId, INTERACT_DICE
mov casinoSprites[9*SIZEOF SpriteObject].promptPtr, OFFSET promptShop mov casinoSprites[9*SIZEOF SpriteObject].promptPtr, OFFSET promptDice
; Sprite 10: ATM Bank Terminal (East Wing) ; Sprite 10: Skulls & Cups Table
mov casinoSprites[10*SIZEOF SpriteObject].posX, (26 * FP_1) mov casinoSprites[10*SIZEOF SpriteObject].posX, (10 * FP_1)
mov casinoSprites[10*SIZEOF SpriteObject].posY, (16 * FP_1) mov casinoSprites[10*SIZEOF SpriteObject].posY, (15 * FP_1)
mov casinoSprites[10*SIZEOF SpriteObject].baseTexId, 33 mov casinoSprites[10*SIZEOF SpriteObject].baseTexId, 30
mov casinoSprites[10*SIZEOF SpriteObject].frameCount, 1 mov casinoSprites[10*SIZEOF SpriteObject].frameCount, 1
mov casinoSprites[10*SIZEOF SpriteObject].curFrame, 0 mov casinoSprites[10*SIZEOF SpriteObject].curFrame, 0
mov casinoSprites[10*SIZEOF SpriteObject].animTimer, 0 mov casinoSprites[10*SIZEOF SpriteObject].animTimer, 0
mov casinoSprites[10*SIZEOF SpriteObject].animSpeed, 1 mov casinoSprites[10*SIZEOF SpriteObject].animSpeed, 1
mov casinoSprites[10*SIZEOF SpriteObject].interactId, 7 mov casinoSprites[10*SIZEOF SpriteObject].interactId, INTERACT_SKULLS
mov casinoSprites[10*SIZEOF SpriteObject].promptPtr, OFFSET promptATM mov casinoSprites[10*SIZEOF SpriteObject].promptPtr, OFFSET promptSkulls
; Sprite 11: Underground Table (South Wing) ; Sprite 11: Coin Toss Stand
mov casinoSprites[11*SIZEOF SpriteObject].posX, (16 * FP_1 + FP_HALF) mov casinoSprites[11*SIZEOF SpriteObject].posX, (14 * FP_1)
mov casinoSprites[11*SIZEOF SpriteObject].posY, (24 * FP_1) mov casinoSprites[11*SIZEOF SpriteObject].posY, (15 * FP_1)
mov casinoSprites[11*SIZEOF SpriteObject].baseTexId, 34 mov casinoSprites[11*SIZEOF SpriteObject].baseTexId, 30
mov casinoSprites[11*SIZEOF SpriteObject].frameCount, 1 mov casinoSprites[11*SIZEOF SpriteObject].frameCount, 1
mov casinoSprites[11*SIZEOF SpriteObject].curFrame, 0 mov casinoSprites[11*SIZEOF SpriteObject].curFrame, 0
mov casinoSprites[11*SIZEOF SpriteObject].animTimer, 0 mov casinoSprites[11*SIZEOF SpriteObject].animTimer, 0
mov casinoSprites[11*SIZEOF SpriteObject].animSpeed, 1 mov casinoSprites[11*SIZEOF SpriteObject].animSpeed, 1
mov casinoSprites[11*SIZEOF SpriteObject].interactId, 5 mov casinoSprites[11*SIZEOF SpriteObject].interactId, INTERACT_COIN
mov casinoSprites[11*SIZEOF SpriteObject].promptPtr, OFFSET promptBackroom mov casinoSprites[11*SIZEOF SpriteObject].promptPtr, OFFSET promptCoin
; Sprite 12: Secret Demon Portal (South Wing) ; Sprite 12: Skill Check Stand
mov casinoSprites[12*SIZEOF SpriteObject].posX, (16 * FP_1 + FP_HALF) mov casinoSprites[12*SIZEOF SpriteObject].posX, (18 * FP_1)
mov casinoSprites[12*SIZEOF SpriteObject].posY, (29 * FP_1) mov casinoSprites[12*SIZEOF SpriteObject].posY, (15 * FP_1)
mov casinoSprites[12*SIZEOF SpriteObject].baseTexId, 4 mov casinoSprites[12*SIZEOF SpriteObject].baseTexId, 30
mov casinoSprites[12*SIZEOF SpriteObject].frameCount, 1 mov casinoSprites[12*SIZEOF SpriteObject].frameCount, 1
mov casinoSprites[12*SIZEOF SpriteObject].curFrame, 0 mov casinoSprites[12*SIZEOF SpriteObject].curFrame, 0
mov casinoSprites[12*SIZEOF SpriteObject].animTimer, 0 mov casinoSprites[12*SIZEOF SpriteObject].animTimer, 0
mov casinoSprites[12*SIZEOF SpriteObject].animSpeed, 1 mov casinoSprites[12*SIZEOF SpriteObject].animSpeed, 1
mov casinoSprites[12*SIZEOF SpriteObject].interactId, 9 mov casinoSprites[12*SIZEOF SpriteObject].interactId, INTERACT_SKILL_CHECK
mov casinoSprites[12*SIZEOF SpriteObject].promptPtr, OFFSET promptHell 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 mov eax, 1
jmp init_return jmp init_return

View file

@ -72,6 +72,13 @@ GetConsoleScreenBufferInfo PROTO :DWORD, :DWORD
GetConsoleMode PROTO :DWORD, :DWORD GetConsoleMode PROTO :DWORD, :DWORD
SetConsoleMode PROTO :DWORD, :DWORD SetConsoleMode PROTO :DWORD, :DWORD
FillConsoleOutputCharacterA PROTO :DWORD, :DWORD, :DWORD, :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 mciSendStringA PROTO :DWORD, :DWORD, :DWORD, :DWORD
waveOutSetVolume PROTO :DWORD, :DWORD waveOutSetVolume PROTO :DWORD, :DWORD
AnimFrameDelay PROTO :DWORD AnimFrameDelay PROTO :DWORD
@ -14925,6 +14932,46 @@ uma_exit:
ret ret
GameUmamusume ENDP 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 include casino3d.inc

Binary file not shown.

View file

@ -167,17 +167,46 @@ dancerLuckBuff dd 0
flashTimer dd 0 flashTimer dd 0
flashMessage db 128 dup(0) flashMessage db 128 dup(0)
promptDancer db "[E] CABARET - TIP $100",0 promptDancer db "[E] ÊÀÁÀÐÅ - ×ÀÅÂÛÅ $100",0
promptSlot1 db "[E] SLOTS 777",0 promptBlackjack db "[E] ÁËÝÊÄÆÅÊ (21)",0
promptSlot2 db "[E] SLOTS 777",0 promptPoker db "[E] ÏÎÊÅÐ (TEXAS HOLD'EM)",0
promptBlackjack db "[E] BLACKJACK / 21",0 promptDurak db "[E] ÊÀÐÒÛ: ÏÎÄÊÈÄÍÎÉ ÄÓÐÀÊ",0
promptPoker db "POKER - UNDER CONSTRUCTION",0 promptCasinoRoulette db "[E] ÅÂÐÎÏÅÉÑÊÀß ÐÓËÅÒÊÀ",0
promptRoulette db "[E] ROULETTE",0 promptClassicSlot db "[E] ÊËÀÑÑÈ×ÅÑÊÈÅ ÑËÎÒÛ 777",0
promptShop db "[E] BOUTIQUE",0 promptCloverSlot db "[E] ÑËÎÒÛ CLOVERPIT (5x3)",0
promptATM db "[E] CASHIER",0 promptDice db "[E] ÈÃÐÀ Â ÊÎÑÒÈ (CRAPS)",0
promptBackroom db "BACKROOM - UNDER CONSTRUCTION",0 promptSkulls db "[E] ÍÀϨÐÑÒÊÈ (×ÅÐÅÏÀ)",0
promptDurak db "DURAK - UNDER CONSTRUCTION",0 promptCoin db "[E] ÌÎÍÅÒÊÀ (ÎШË/ÐÅØÊÀ)",0
promptHell db "TOWER - UNDER CONSTRUCTION",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 msgDancerTipped db "Âû áðîñèëè $100 òàíöîâùèöå! ÓÄÀ×À ÀÊÒÈÂÈÐÎÂÀÍÀ!",0
msgNeedMoney db "Íåäîñòàòî÷íî äåíåã â êîøåëüêå!",0 msgNeedMoney db "Íåäîñòàòî÷íî äåíåã â êîøåëüêå!",0
@ -186,7 +215,29 @@ targetHUDFormat db "
luckHUDFormat db " ÓÄÀ×À: +",0 luckHUDFormat db " ÓÄÀ×À: +",0
controlsHUD db "WASD/Ñòðåëêè: Õîäüáà | E: Äåéñòâèå | ESC: Ìåíþ",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 ALIGN 4
casinoSprites SpriteObject NUM_SPRITES dup(<>) casinoSprites SpriteObject NUM_SPRITES dup(<>)
sortedSprites dd NUM_SPRITES dup(0) sortedSprites dd NUM_SPRITES dup(0)
@ -2633,18 +2684,104 @@ interaction_done:
ret ret
CheckInteractions ENDP 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 Trigger3DInteraction PROC
mov eax, interactTargetId mov eax, interactTargetId
test eax, eax test eax, eax
jz @F jz trigger_done
cmp eax, 8 ; DANCER cmp eax, INTERACT_DANCER
jne check_target_slots jne check_target_bj
cmp bankroll, 100 cmp bankroll, 100
jl dancer_no_cash jl dancer_no_cash
sub bankroll, 100 sub bankroll, 100
inc dancerLuckBuff inc dancerLuckBuff
; Tips are cosmetic and must not silently change game odds.
invoke CopyString3D, OFFSET textTips3D, OFFSET flashMessage invoke CopyString3D, OFFSET textTips3D, OFFSET flashMessage
mov flashTimer, 100 mov flashTimer, 100
invoke PlaySoundA, OFFSET soundJackpot, 0, 1 invoke PlaySoundA, OFFSET soundJackpot, 0, 1
@ -2654,42 +2791,124 @@ dancer_no_cash:
mov flashTimer, 60 mov flashTimer, 60
ret ret
check_target_slots: check_target_bj:
cmp eax, 3 ; SLOTS cmp eax, INTERACT_BLACKJACK
jne check_target_bj jne check_target_poker
mov engineMode, MODE_SLOTS invoke LaunchClassicGame, OFFSET Game21, 1, OFFSET szTitleBlackjack
invoke PlaySoundA, OFFSET soundClick, 0, 1
ret ret
check_target_bj: check_target_poker:
cmp eax, 1 ; BLACKJACK 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 jne check_target_roulette
mov engineMode, MODE_BLACKJACK invoke LaunchClassicGame, OFFSET GameSlot, 3, OFFSET szTitleCloverSlot
mov bjState, 0
ret ret
check_target_roulette: 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 jne check_target_shop
mov engineMode, MODE_ROULETTE invoke LaunchClassicGame, OFFSET GameTournament, 666, OFFSET szTitleHellTower
mov roulState, 0
ret ret
check_target_shop: check_target_shop:
cmp eax, 6 ; SHOP cmp eax, INTERACT_SHOP
jne check_target_atm jne check_target_atm
mov engineMode, MODE_SHOP invoke LaunchClassicGame, OFFSET GameShop, 0, OFFSET szTitleShop
ret ret
check_target_atm: check_target_atm:
cmp eax, 7 ; ATM cmp eax, INTERACT_ATM
jne target_unported jne check_target_terminal
mov engineMode, MODE_ATM mov engineMode, MODE_ATM
ret 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: target_unported:
invoke CopyString3D, OFFSET textUnavailable3D, OFFSET flashMessage invoke CopyString3D, OFFSET textUnavailable3D, OFFSET flashMessage
mov flashTimer, 150 mov flashTimer, 150
@@: trigger_done:
ret ret
Trigger3DInteraction ENDP Trigger3DInteraction ENDP
@ -2721,7 +2940,7 @@ init_sprites_table:
mov casinoSprites[0*SIZEOF SpriteObject].curFrame, 0 mov casinoSprites[0*SIZEOF SpriteObject].curFrame, 0
mov casinoSprites[0*SIZEOF SpriteObject].animTimer, 0 mov casinoSprites[0*SIZEOF SpriteObject].animTimer, 0
mov casinoSprites[0*SIZEOF SpriteObject].animSpeed, 5 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 mov casinoSprites[0*SIZEOF SpriteObject].promptPtr, OFFSET promptDancer
; Sprite 1: VIP Dancer 2 (Center Stage Star) ; 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].curFrame, 2
mov casinoSprites[1*SIZEOF SpriteObject].animTimer, 0 mov casinoSprites[1*SIZEOF SpriteObject].animTimer, 0
mov casinoSprites[1*SIZEOF SpriteObject].animSpeed, 5 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 mov casinoSprites[1*SIZEOF SpriteObject].promptPtr, OFFSET promptDancer
; Sprite 2: VIP Dancer 3 (Stage Right) ; 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].curFrame, 1
mov casinoSprites[2*SIZEOF SpriteObject].animTimer, 0 mov casinoSprites[2*SIZEOF SpriteObject].animTimer, 0
mov casinoSprites[2*SIZEOF SpriteObject].animSpeed, 5 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 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].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].baseTexId, 30
mov casinoSprites[3*SIZEOF SpriteObject].frameCount, 1 mov casinoSprites[3*SIZEOF SpriteObject].frameCount, 1
mov casinoSprites[3*SIZEOF SpriteObject].curFrame, 0 mov casinoSprites[3*SIZEOF SpriteObject].curFrame, 0
mov casinoSprites[3*SIZEOF SpriteObject].animTimer, 0 mov casinoSprites[3*SIZEOF SpriteObject].animTimer, 0
mov casinoSprites[3*SIZEOF SpriteObject].animSpeed, 1 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 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].posX, (16 * FP_1 + FP_HALF)
mov casinoSprites[4*SIZEOF SpriteObject].posY, (10 * FP_1) mov casinoSprites[4*SIZEOF SpriteObject].posY, (10 * FP_1)
mov casinoSprites[4*SIZEOF SpriteObject].baseTexId, 31 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].curFrame, 0
mov casinoSprites[4*SIZEOF SpriteObject].animTimer, 0 mov casinoSprites[4*SIZEOF SpriteObject].animTimer, 0
mov casinoSprites[4*SIZEOF SpriteObject].animSpeed, 1 mov casinoSprites[4*SIZEOF SpriteObject].animSpeed, 1
mov casinoSprites[4*SIZEOF SpriteObject].interactId, 4 mov casinoSprites[4*SIZEOF SpriteObject].interactId, INTERACT_ROULETTE
mov casinoSprites[4*SIZEOF SpriteObject].promptPtr, OFFSET promptRoulette mov casinoSprites[4*SIZEOF SpriteObject].promptPtr, OFFSET promptCasinoRoulette
; Sprite 5: Poker Table (Front Center Right) ; Sprite 5: Texas Hold'em Poker Table (Front Center Right)
mov casinoSprites[5*SIZEOF SpriteObject].posX, (21 * FP_1) mov casinoSprites[5*SIZEOF SpriteObject].posX, (20 * FP_1 + FP_HALF)
mov casinoSprites[5*SIZEOF SpriteObject].posY, (10 * FP_1) mov casinoSprites[5*SIZEOF SpriteObject].posY, (8 * FP_1)
mov casinoSprites[5*SIZEOF SpriteObject].baseTexId, 30 mov casinoSprites[5*SIZEOF SpriteObject].baseTexId, 30
mov casinoSprites[5*SIZEOF SpriteObject].frameCount, 1 mov casinoSprites[5*SIZEOF SpriteObject].frameCount, 1
mov casinoSprites[5*SIZEOF SpriteObject].curFrame, 0 mov casinoSprites[5*SIZEOF SpriteObject].curFrame, 0
mov casinoSprites[5*SIZEOF SpriteObject].animTimer, 0 mov casinoSprites[5*SIZEOF SpriteObject].animTimer, 0
mov casinoSprites[5*SIZEOF SpriteObject].animSpeed, 1 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 mov casinoSprites[5*SIZEOF SpriteObject].promptPtr, OFFSET promptPoker
; Sprite 6: Slot Machine 1 (West Arcade) ; Sprite 6: Podkidnoy Durak Card Table
mov casinoSprites[6*SIZEOF SpriteObject].posX, (6 * FP_1) 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].posY, (8 * FP_1)
mov casinoSprites[6*SIZEOF SpriteObject].baseTexId, 24 mov casinoSprites[6*SIZEOF SpriteObject].baseTexId, 30
mov casinoSprites[6*SIZEOF SpriteObject].frameCount, 3 mov casinoSprites[6*SIZEOF SpriteObject].frameCount, 1
mov casinoSprites[6*SIZEOF SpriteObject].curFrame, 0 mov casinoSprites[6*SIZEOF SpriteObject].curFrame, 0
mov casinoSprites[6*SIZEOF SpriteObject].animTimer, 0 mov casinoSprites[6*SIZEOF SpriteObject].animTimer, 0
mov casinoSprites[6*SIZEOF SpriteObject].animSpeed, 8 mov casinoSprites[6*SIZEOF SpriteObject].animSpeed, 1
mov casinoSprites[6*SIZEOF SpriteObject].interactId, 3 mov casinoSprites[6*SIZEOF SpriteObject].interactId, INTERACT_DURAK
mov casinoSprites[6*SIZEOF SpriteObject].promptPtr, OFFSET promptSlot1 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].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].baseTexId, 24
mov casinoSprites[7*SIZEOF SpriteObject].frameCount, 3 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].animTimer, 0
mov casinoSprites[7*SIZEOF SpriteObject].animSpeed, 8 mov casinoSprites[7*SIZEOF SpriteObject].animSpeed, 8
mov casinoSprites[7*SIZEOF SpriteObject].interactId, 3 mov casinoSprites[7*SIZEOF SpriteObject].interactId, INTERACT_SLOTS_777
mov casinoSprites[7*SIZEOF SpriteObject].promptPtr, OFFSET promptSlot2 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].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].baseTexId, 24
mov casinoSprites[8*SIZEOF SpriteObject].frameCount, 3 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].animTimer, 0
mov casinoSprites[8*SIZEOF SpriteObject].animSpeed, 8 mov casinoSprites[8*SIZEOF SpriteObject].animSpeed, 8
mov casinoSprites[8*SIZEOF SpriteObject].interactId, 3 mov casinoSprites[8*SIZEOF SpriteObject].interactId, INTERACT_SLOTS_CLOVER
mov casinoSprites[8*SIZEOF SpriteObject].promptPtr, OFFSET promptSlot1 mov casinoSprites[8*SIZEOF SpriteObject].promptPtr, OFFSET promptCloverSlot
; Sprite 9: Bartender / Bar Counter (East Wing) ; Sprite 9: Craps & Dice Table (West Arcade 3)
mov casinoSprites[9*SIZEOF SpriteObject].posX, (26 * FP_1) mov casinoSprites[9*SIZEOF SpriteObject].posX, (6 * FP_1)
mov casinoSprites[9*SIZEOF SpriteObject].posY, (12 * FP_1) mov casinoSprites[9*SIZEOF SpriteObject].posY, (14 * FP_1)
mov casinoSprites[9*SIZEOF SpriteObject].baseTexId, 32 mov casinoSprites[9*SIZEOF SpriteObject].baseTexId, 30
mov casinoSprites[9*SIZEOF SpriteObject].frameCount, 1 mov casinoSprites[9*SIZEOF SpriteObject].frameCount, 1
mov casinoSprites[9*SIZEOF SpriteObject].curFrame, 0 mov casinoSprites[9*SIZEOF SpriteObject].curFrame, 0
mov casinoSprites[9*SIZEOF SpriteObject].animTimer, 0 mov casinoSprites[9*SIZEOF SpriteObject].animTimer, 0
mov casinoSprites[9*SIZEOF SpriteObject].animSpeed, 1 mov casinoSprites[9*SIZEOF SpriteObject].animSpeed, 1
mov casinoSprites[9*SIZEOF SpriteObject].interactId, 6 mov casinoSprites[9*SIZEOF SpriteObject].interactId, INTERACT_DICE
mov casinoSprites[9*SIZEOF SpriteObject].promptPtr, OFFSET promptShop mov casinoSprites[9*SIZEOF SpriteObject].promptPtr, OFFSET promptDice
; Sprite 10: ATM Bank Terminal (East Wing) ; Sprite 10: Skulls & Cups Table
mov casinoSprites[10*SIZEOF SpriteObject].posX, (26 * FP_1) mov casinoSprites[10*SIZEOF SpriteObject].posX, (10 * FP_1)
mov casinoSprites[10*SIZEOF SpriteObject].posY, (16 * FP_1) mov casinoSprites[10*SIZEOF SpriteObject].posY, (15 * FP_1)
mov casinoSprites[10*SIZEOF SpriteObject].baseTexId, 33 mov casinoSprites[10*SIZEOF SpriteObject].baseTexId, 30
mov casinoSprites[10*SIZEOF SpriteObject].frameCount, 1 mov casinoSprites[10*SIZEOF SpriteObject].frameCount, 1
mov casinoSprites[10*SIZEOF SpriteObject].curFrame, 0 mov casinoSprites[10*SIZEOF SpriteObject].curFrame, 0
mov casinoSprites[10*SIZEOF SpriteObject].animTimer, 0 mov casinoSprites[10*SIZEOF SpriteObject].animTimer, 0
mov casinoSprites[10*SIZEOF SpriteObject].animSpeed, 1 mov casinoSprites[10*SIZEOF SpriteObject].animSpeed, 1
mov casinoSprites[10*SIZEOF SpriteObject].interactId, 7 mov casinoSprites[10*SIZEOF SpriteObject].interactId, INTERACT_SKULLS
mov casinoSprites[10*SIZEOF SpriteObject].promptPtr, OFFSET promptATM mov casinoSprites[10*SIZEOF SpriteObject].promptPtr, OFFSET promptSkulls
; Sprite 11: Underground Table (South Wing) ; Sprite 11: Coin Toss Stand
mov casinoSprites[11*SIZEOF SpriteObject].posX, (16 * FP_1 + FP_HALF) mov casinoSprites[11*SIZEOF SpriteObject].posX, (14 * FP_1)
mov casinoSprites[11*SIZEOF SpriteObject].posY, (24 * FP_1) mov casinoSprites[11*SIZEOF SpriteObject].posY, (15 * FP_1)
mov casinoSprites[11*SIZEOF SpriteObject].baseTexId, 34 mov casinoSprites[11*SIZEOF SpriteObject].baseTexId, 30
mov casinoSprites[11*SIZEOF SpriteObject].frameCount, 1 mov casinoSprites[11*SIZEOF SpriteObject].frameCount, 1
mov casinoSprites[11*SIZEOF SpriteObject].curFrame, 0 mov casinoSprites[11*SIZEOF SpriteObject].curFrame, 0
mov casinoSprites[11*SIZEOF SpriteObject].animTimer, 0 mov casinoSprites[11*SIZEOF SpriteObject].animTimer, 0
mov casinoSprites[11*SIZEOF SpriteObject].animSpeed, 1 mov casinoSprites[11*SIZEOF SpriteObject].animSpeed, 1
mov casinoSprites[11*SIZEOF SpriteObject].interactId, 5 mov casinoSprites[11*SIZEOF SpriteObject].interactId, INTERACT_COIN
mov casinoSprites[11*SIZEOF SpriteObject].promptPtr, OFFSET promptBackroom mov casinoSprites[11*SIZEOF SpriteObject].promptPtr, OFFSET promptCoin
; Sprite 12: Secret Demon Portal (South Wing) ; Sprite 12: Skill Check Stand
mov casinoSprites[12*SIZEOF SpriteObject].posX, (16 * FP_1 + FP_HALF) mov casinoSprites[12*SIZEOF SpriteObject].posX, (18 * FP_1)
mov casinoSprites[12*SIZEOF SpriteObject].posY, (29 * FP_1) mov casinoSprites[12*SIZEOF SpriteObject].posY, (15 * FP_1)
mov casinoSprites[12*SIZEOF SpriteObject].baseTexId, 4 mov casinoSprites[12*SIZEOF SpriteObject].baseTexId, 30
mov casinoSprites[12*SIZEOF SpriteObject].frameCount, 1 mov casinoSprites[12*SIZEOF SpriteObject].frameCount, 1
mov casinoSprites[12*SIZEOF SpriteObject].curFrame, 0 mov casinoSprites[12*SIZEOF SpriteObject].curFrame, 0
mov casinoSprites[12*SIZEOF SpriteObject].animTimer, 0 mov casinoSprites[12*SIZEOF SpriteObject].animTimer, 0
mov casinoSprites[12*SIZEOF SpriteObject].animSpeed, 1 mov casinoSprites[12*SIZEOF SpriteObject].animSpeed, 1
mov casinoSprites[12*SIZEOF SpriteObject].interactId, 9 mov casinoSprites[12*SIZEOF SpriteObject].interactId, INTERACT_SKILL_CHECK
mov casinoSprites[12*SIZEOF SpriteObject].promptPtr, OFFSET promptHell 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 mov eax, 1
jmp init_return jmp init_return

View file

@ -72,6 +72,13 @@ GetConsoleScreenBufferInfo PROTO :DWORD, :DWORD
GetConsoleMode PROTO :DWORD, :DWORD GetConsoleMode PROTO :DWORD, :DWORD
SetConsoleMode PROTO :DWORD, :DWORD SetConsoleMode PROTO :DWORD, :DWORD
FillConsoleOutputCharacterA PROTO :DWORD, :DWORD, :DWORD, :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 mciSendStringA PROTO :DWORD, :DWORD, :DWORD, :DWORD
waveOutSetVolume PROTO :DWORD, :DWORD waveOutSetVolume PROTO :DWORD, :DWORD
AnimFrameDelay PROTO :DWORD AnimFrameDelay PROTO :DWORD
@ -14925,6 +14932,46 @@ uma_exit:
ret ret
GameUmamusume ENDP 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 include casino3d.inc

BIN
poker.exe

Binary file not shown.