KAZIK/src_graphics/npc_mind_data.inc
Artvasil09 881a0061dc Add native NPC visitors with contracts, Clover slots, Pyramid, and party table scenes
Implement 32x32 BFS visitor navigation and daily contracts system with companion .npc journals; add native assembly scenes for Clover slots, Pyramid cards, Blackjack Party and Russian Party; package animation and sprite packs; add comprehensive offline test suites and rebuild shipping binaries.
2026-10-13 09:47:33 +03:00

258 lines
12 KiB
PHP

; ==============================================================================
; NPC MIND DATA - MASM32 / CP1251
; Multi-agent AI: Open-space Navigation, Personalities & Multi-seat Poker
; ==============================================================================
NPCAI_ARCHETYPE_SHARK equ 0 ; Àêóëà (Tight-Aggressive)
NPCAI_ARCHETYPE_MANIAC equ 1 ; Ëóäîìàí (Loose-Aggressive)
NPCAI_ARCHETYPE_ROCK equ 2 ; Ñêàëà (Tight-Passive)
NPCAI_ARCHETYPE_CALLING_STATION equ 3 ; Àâòîîòâåò÷èê (Loose-Passive)
NPCAI_ARCHETYPE_WHALE equ 4 ; Ìàæîð (Âûñîêèé áàíêðîëë, õàîñ)
NPCAI_ARCHETYPE_ROOKIE equ 5 ; Íîâè÷îê (Îøèáêè, íåóâåðåííîñòü)
NPCAI_STATE_IDLE equ 0 ; Ñòîèò, îñìàòðèâàåòñÿ
NPCAI_STATE_WALK equ 1 ; Èäåò ïî âåéïîèíòàì
NPCAI_STATE_GAMBLE equ 2 ; Èãðàåò çà ñòîëîì
NPCAI_STATE_BAR equ 3 ; Ó áàðà
NPCAI_STATE_ATM equ 4 ; Ó áàíêîìàòà
NPCAI_STATE_STAGE equ 5 ; Ñìîòðèò øîó
MPK_SEAT_EMPTY equ 0
MPK_SEAT_ACTIVE equ 1
MPK_SEAT_FOLDED equ 2
MPK_SEAT_ALLIN equ 3
MPK_SEAT_BUST equ 4
MPK_ACT_NONE equ 0
MPK_ACT_FOLD equ 1
MPK_ACT_CHECK equ 2
MPK_ACT_CALL equ 3
MPK_ACT_RAISE equ 4
MPK_ACT_ALLIN equ 5
MPK_STAGE_PREFLOP equ 0
MPK_STAGE_FLOP equ 1
MPK_STAGE_TURN equ 2
MPK_STAGE_RIVER equ 3
MPK_STAGE_SHOWDOWN equ 4
NPCAI_MAX_NPCS equ 6
MPK_MAX_SEATS equ 4
NPCAI_WAYPOINT_COUNT equ 16
; ------------------------------------------------------------------------------
; Ñòðóêòóðû äàííûõ
; ------------------------------------------------------------------------------
NpcPersonality STRUCT
namePtr dd ?
titlePtr dd ?
archetypeId dd ?
baseAggression dd ? ; 0..100
baseTightness dd ? ; 0..100
baseBluffRate dd ? ; 0..100
baseCourage dd ? ; 0..100
tiltSens dd ? ; 0..100
defaultBank dd ?
phraseWinPtr dd ?
phraseLosePtr dd ?
phraseBluffPtr dd ?
phraseBustPtr dd ?
NpcPersonality ENDS
NpcMindEntity STRUCT
posX dd ? ; 16.16 FP
posY dd ? ; 16.16 FP
dirX dd ? ; 16.16 FP
dirY dd ? ; 16.16 FP
speed dd ? ; 16.16 FP
state dd ? ; NPCAI_STATE_*
stateTimer dd ?
currentNode dd ?
targetNode dd ?
profileId dd ?
currentChips dd ?
currentTilt dd ? ; 0..100
thoughtPtr dd ?
reactionPtr dd ?
NpcMindEntity ENDS
MpkSeat STRUCT
isHuman dd ? ; 1=Player, 0=NPC
profileId dd ? ; Èíäåêñ NpcPersonality (0..5)
chips dd ?
roundBet dd ?
totalBet dd ?
card1 dd ?
card2 dd ?
evalScore dd ?
seatStatus dd ? ; MPK_SEAT_*
lastAction dd ? ; MPK_ACT_*
lastRaiseAmount dd ?
thoughtPtr dd ?
reactionPtr dd ?
MpkSeat ENDS
MultiPokerTable STRUCT
seats MpkSeat MPK_MAX_SEATS dup(<>)
commCards dd 5 dup(?)
commCount dd ?
mainPot dd ?
currentHighBet dd ?
minRaise dd ?
dealerButton dd ?
currentTurn dd ?
activeSeats dd ?
smallBlind dd ?
bigBlind dd ?
stage dd ?
MultiPokerTable ENDS
NpcWaypoint STRUCT
posX dd ? ; 16.16 FP
posY dd ? ; 16.16 FP
neighbor0 dd ?
neighbor1 dd ?
neighbor2 dd ?
neighbor3 dd ?
zoneType dd ?
NpcWaypoint ENDS
; ------------------------------------------------------------------------------
; Ñòðîêîâûå êîíñòàíòû è îïèñàíèÿ (CP1251)
; ------------------------------------------------------------------------------
.data
; Èìåíà è òèòóëû 6 óíèêàëüíûõ ïåðñîíàæåé
npcName0 db "Âèêòîð «Àêóëà»",0
npcTitle0 db "Ïðîôåññèîíàë (Tight-Aggressive)",0
npcName1 db "Ñåðãåé «Ëóäîìàí»",0
npcTitle1 db "Ìàíüÿê (Loose-Aggressive, ÒÈËÜÒ)",0
npcName2 db "Äÿäÿ Òîëÿ «Ñêàëà»",0
npcTitle2 db "Âåòåðàí (Tight-Passive)",0
npcName3 db "Ñòåïàí «Àâòîîòâåò÷èê»",0
npcTitle3 db "Ëþáèòåëü (Calling Station)",0
npcName4 db "Ìàæîð Àðò¸ì",0
npcTitle4 db "Õàéðîëëåð (Whale, Áåçóìíûå ñòàâêè)",0
npcName5 db "Âëàä «Íîâè÷îê»",0
npcTitle5 db "Ñòóäåíò (Rookie, Íåîïûòíûé)",0
; Ôðàçû ïîáåäû
npcWin0 db "«Õîëîäíûé ðàñ÷åò è íèêàêîé ìàãèè. Áàíê ìîé.»",0
npcWin1 db "«ÕÀ-ÕÀ! Êòî òóò êîðîëü êàçèíî?! Âñå ôèøêè ñþäà!»",0
npcWin2 db "«Òèøå åäåøü — äàëüøå áóäåøü, ìîëîäåæü.»",0
npcWin3 db "«Îïà, çàêðûëñÿ ñòðèò! À âû íå âåðèëè!»",0
npcWin4 db "«Îôèöèàíò, âñåì øàìïàíñêîãî çà ìîé ñ÷åò!»",0
npcWin5 db "«Îãî! Íåóæåëè ÿ ïðàâäà ïîáåäèë?! Âîò ýòî äà!»",0
; Ôðàçû ïîðàæåíèÿ / áýäáèòà
npcLose0 db "«Áûâàåò. Ìàòåìàòè÷åñêàÿ äèñïåðñèÿ íà äèñòàíöèè âåðíåò âñ¸.»",0
npcLose1 db "«ÄÀ ÊÀÊ ÒÀÊ-ÒÎ?! Îïÿòü ðèâåðîì ïåðååõàëè, ñóêà!»",0
npcLose2 db "«Çíàë âåäü, ÷òî íàäî áûëî ñáðàñûâàòü åùå íà ôëîïå...»",0
npcLose3 db "«Ýõ, ÷óòêà íå õâàòèëî äî ôëåøà... â ñëåäóþùèé ðàç ïîâåçåò.»",0
npcLose4 db "«Ïô-ô, êîïåéêè. Ñåé÷àñ ñíèìó åùå ïà÷êó â áàíêîìàòå.»",0
npcLose5 db "«ß òàê è çíàë... Íàäî áûëî âíèìàòåëüíåå ÷èòàòü ïðàâèëà.»",0
; Ôðàçû áëåôà / ðåéçà
npcBluff0 db "«Òâîÿ ðóêà ñëàáåå. Ñýêîíîìü ôèøêè è ïàñóé.»",0
npcBluff1 db "«Ñëàáàêè! Âàì íå ïî êàðìàíó ýòîò áàíê, äâèãàéòå ïàñ!»",0
npcBluff2 db "«Ó ìåíÿ îòëè÷íàÿ êàðòà. Íå ñîâåòóþ ëåçòü ïîä êîëåñà.»",0
npcBluff3 db "«À ÿ ïðîñòî õî÷ó ïîñìîòðåòü ñëåäóþùóþ êàðòó!»",0
npcBluff4 db "«Âû ñòàâèòå êîïåéêè! Äàâàéòå èãðàòü ïî-âçðîñëîìó!»",0
npcBluff5 db "«Ý-ý... êàæåòñÿ, ÿ ïîäíèìàþ ñòàâêó. Âû ñî ìíîé?»",0
; Ôðàçû áàíêðîòñòâà
npcBust0 db "«Ëèìèò íà ñåãîäíÿ èñ÷åðïàí. Ïîðà äåëàòü ïàóçó.»",0
npcBust1 db "«Âñ¸ â íîëü! Áåãó ê áàíêîìàòó, ÿ îáÿçàí îòûãðàòüñÿ!»",0
npcBust2 db "«Ïåíñèÿ êîí÷èëàñü... Ïîéäó ïîäûøó íà ñâåæåì âîçäóõå.»",0
npcBust3 db "«Îé, ôèøêè êîí÷èëèñü... Ïîéäó â áàð çà ïèâîì.»",0
npcBust4 db "«Îïÿòü îáíóëèëñÿ? Åðóíäà, ñåé÷àñ ñíèìó åùå $50,000.»",0
npcBust5 db "«Êàæåòñÿ, íà ìåòðî ìíå óæå íå õâàòàåò...»",0
; Ìûñëè â ñâîáîäíîì ïåðåìåùåíèè ïî êàçèíî
thWalkWander db "Îñìàòðèâàåò èãðîâîé çàë â ïîèñêàõ èíòåðåñíîé èãðû",0
thWalkTable db "Íàïðàâëÿåòñÿ ê ïîêåðíîìó ñòîëó èñïûòàòü óäà÷ó",0
thWalkBar db "Ðåøèë çàãëÿíóòü â áàð çà íàïèòêîì",0
thWalkAtm db "Çàêîí÷èëèñü ôèøêè, íàïðàâëÿåòñÿ ê áàíêîìàòó",0
thWalkStage db "Ïîäõîäèò ê ñöåíå ïîñìîòðåòü íà òàíöîâùèö",0
thIdleBored db "Ñòîèò ó êîëîííû, ïîäñ÷èòûâàåò îñòàâøèåñÿ äåíüãè",0
; Ìûñëè çà ïîêåðíûì ñòîëîì
thEvalStrong db "×óâñòâóåò íàòñ! Ãîòîâèò ëîâóøêó äëÿ îïïîíåíòîâ.",0
thEvalGood db "Ðóêà ñèëüíàÿ, îòëè÷íûå øàíñû çàáðàòü ýòîò áàíê.",0
thEvalDraw db "Ñ÷èòàåò àóòû: øàíñû áàíêà âûãîäíû äëÿ êîëëà.",0
thEvalTrash db "Êàðòû — ìóñîð. Ñìûñëà ðèñêîâàòü ôèøêàìè íåò.",0
thEvalTilted db "[ÒÈËÜÒ!] Çëèòñÿ ïîñëå ïðîèãðûøà è èäåò íà òàðàí!",0
thEvalBluffing db "ÁËÅÔ! Èçîáðàæàåò ìîíñòðà è äàâèò ñòàâêîé!",0
; Îïèñàíèÿ äåéñòâèé
thActFold db "Ñáðàñûâàåò êàðòû â ïàñ",0
thActCheck db "×åêàåò, ïðîïóñêàÿ õîä",0
thActCall db "Êîëëèðóåò (óðàâíèâàåò) òåêóùóþ ñòàâêó",0
thActRaise db "Ïîâûøàåò ñòàâêó (ðåéç!)",0
thActAllIn db "Äâèãàåò âñå ôèøêè âïåðåä — ÂÀ-ÁÀÍÊ (ÎËË-ÈÍ)!",0
; Íàçâàíèÿ óëèö ïîêåðà
strStagePreflop db "Ïðåôëîï (Êàðìàííûå êàðòû)",0
strStageFlop db "Ôëîï (3 êàðòû ñòîëà)",0
strStageTurn db "Òåðí (4 êàðòû ñòîëà)",0
strStageRiver db "Ðèâåð (5 êàðò ñòîëà)",0
strStageShow db "Âñêðûòèå êàðò (Showdown)",0
; Òåêñòû èíòåðôåéñà ìóëüòè-ïîêåðà
mpkTitleStr db "=== ÒÅÕÀÑÑÊÈÉ ÕÎËÄÅÌ: ÑÒÎË ÍÀ 4 ÈÃÐÎÊÀ ===",13,10,0
mpkPotStr db "Áàíê ñòîëà: $",0
mpkStreetStr db " | Ðàóíä: ",0
mpkCommCardsStr db "Îáùèå êàðòû íà ñòîëå: ",0
mpkPromptStr db "Âàø õîä: [1] ×åê/Êîëë | [2] Ðåéç | [0] Ïàñ -> ",0
mpkWaitNextStr db 13,10,"[Íàæìèòå ëþáóþ êëàâèøó äëÿ ñëåäóþùåé ðàçäà÷è, 0 äëÿ âûõîäà]...",0
mpkChipsPrefix db " Ñòåê: $",0
mpkThoughtPrefix db " [Ìûñëè]: ",0
mpkGameOverStr db 13,10,"Ðàçäà÷à îêîí÷åíà. Ïîáåäèòåëü: ",0
mpkWinChipsStr db " âûèãðàë áàíê $",0
ALIGN 4
; Áàçà ïðîôèëåé 6 óíèêàëüíûõ ëè÷íîñòåé
casinoNpcProfiles NpcPersonality <OFFSET npcName0, OFFSET npcTitle0, NPCAI_ARCHETYPE_SHARK, 75, 85, 20, 85, 15, 5000, OFFSET npcWin0, OFFSET npcLose0, OFFSET npcBluff0, OFFSET npcBust0>
NpcPersonality <OFFSET npcName1, OFFSET npcTitle1, NPCAI_ARCHETYPE_MANIAC, 95, 20, 80, 90, 85, 3500, OFFSET npcWin1, OFFSET npcLose1, OFFSET npcBluff1, OFFSET npcBust1>
NpcPersonality <OFFSET npcName2, OFFSET npcTitle2, NPCAI_ARCHETYPE_ROCK, 25, 90, 5, 30, 20, 4000, OFFSET npcWin2, OFFSET npcLose2, OFFSET npcBluff2, OFFSET npcBust2>
NpcPersonality <OFFSET npcName3, OFFSET npcTitle3, NPCAI_ARCHETYPE_CALLING_STATION, 15, 30, 10, 75, 40, 3000, OFFSET npcWin3, OFFSET npcLose3, OFFSET npcBluff3, OFFSET npcBust3>
NpcPersonality <OFFSET npcName4, OFFSET npcTitle4, NPCAI_ARCHETYPE_WHALE, 70, 45, 55, 70, 50, 10000, OFFSET npcWin4, OFFSET npcLose4, OFFSET npcBluff4, OFFSET npcBust4>
NpcPersonality <OFFSET npcName5, OFFSET npcTitle5, NPCAI_ARCHETYPE_ROOKIE, 40, 50, 25, 40, 60, 2000, OFFSET npcWin5, OFFSET npcLose5, OFFSET npcBluff5, OFFSET npcBust5>
; Ãðàô âåéïîèíòîâ êàçèíî (êîîðäèíàòû 16.16 FP è ñâÿçè)
casinoWaypoints3D NpcWaypoint <16*FP_1, 28*FP_1, 1, 4, 8, 0, 0> ; 0: Âõîä â êàçèíî
NpcWaypoint <16*FP_1, 20*FP_1, 0, 2, 4, 8, 0> ; 1: Öåíòð õîëëà (þã)
NpcWaypoint <16*FP_1, 14*FP_1, 1, 3, 10, 12, 0> ; 2: Öåíòð õîëëà (ñåâåð)
NpcWaypoint <16*FP_1, 6*FP_1, 2, 10, 12, 3, 7> ; 3: Ïåðåä ñöåíîé òàíöîâùèö
NpcWaypoint < 8*FP_1, 20*FP_1, 0, 1, 5, 7, 0> ; 4: Çàïàäíûé êîðèäîð
NpcWaypoint < 6*FP_1, 14*FP_1, 4, 6, 2, 5, 4> ; 5: Àâòîìàòû 777
NpcWaypoint < 6*FP_1, 9*FP_1, 5, 10, 2, 6, 4> ; 6: Àâòîìàòû CloverPit
NpcWaypoint < 4*FP_1, 25*FP_1, 4, 0, 7, 7, 5> ; 7: Áàðíàÿ ñòîéêà
NpcWaypoint <24*FP_1, 20*FP_1, 0, 1, 9, 14, 0> ; 8: Âîñòî÷íûé êîðèäîð
NpcWaypoint <26*FP_1, 25*FP_1, 8, 0, 9, 9, 0> ; 9: Çîíà îòäûõà VIP
NpcWaypoint <12*FP_1, 9*FP_1, 2, 3, 6, 11, 2> ; 10: Ñòîë Áëýêäæåêà
NpcWaypoint <16*FP_1, 11*FP_1, 2, 10, 12, 11, 3> ; 11: Ñòîë Ðóëåòêè
NpcWaypoint <20*FP_1, 9*FP_1, 2, 3, 11, 13, 1> ; 12: Ñòîë Ïîêåðà (Õîëäåì)
NpcWaypoint <24*FP_1, 9*FP_1, 12, 8, 14, 13, 1> ; 13: Ñòîë Äóðàêà
NpcWaypoint <26*FP_1, 15*FP_1, 8, 13, 14, 14, 6> ; 14: Áàíêîìàò (ATM)
NpcWaypoint <10*FP_1, 15*FP_1, 2, 4, 5, 10, 0> ; 15: Çîíà êîñòåé/÷åðåïîâ
; 6 àêòèâíûõ ïåðñîíàæåé, ãóëÿþùèõ ïî çàëó êàçèíî
casinoNpcs3D NpcMindEntity NPCAI_MAX_NPCS dup(<>)
; Ýêçåìïëÿð ñòîëà ìóëüòè-ïîêåðà
multiPokerTable MultiPokerTable <>
; Êîëîäà è ðàáî÷èé áóôåð äëÿ ìóëüòè-ïîêåðà
multiDeck dd 52 dup(0)
multiDeckIndex dd 0
multiEvalHand dd 7 dup(0)
multiActionWait dd 0