- Bowling feel: impulse contact solver, string pinsetter cycle, in-world lengthwise return rack and visible ball return lift - Ball weights: 4/5/6/7 kg selection with equal launch work physics, momentum balance, and projected picking - Audio: dedicated MCI channels with 7 synthesized waveaudio cues (release, rolling, impacts, applause, pinsetter, return) - First-person animations: 33-frame player underarm throw/follow-through sequence (player-underarm-v2) - Visitors: 10 persistent shared cast identities with exclusive reservations, activity transitions, and chair sit/rise animations - Tests & verification: comprehensive native regression test suites and updated documentation - Synchronize binaries and update launcher hash to 536E23BED4055562BC63871826FF44FFED037923A9BE8E0F591131DB4FBD104B
176 lines
8.1 KiB
PHP
176 lines
8.1 KiB
PHP
MODE_NPC_DIALOG equ 20
|
|
IFDEF CASINO_ACTION_TEST
|
|
DeleteFileA PROTO :DWORD
|
|
ENDIF
|
|
INTERACT_NPC equ 40
|
|
NPC_LIFE_COUNT equ 10
|
|
NPC_IDENTITY_COUNT equ 12
|
|
NPC_DEST_COUNT equ 12
|
|
NPC_STAND equ 0
|
|
NPC_WALK equ 1
|
|
NPC_SIT equ 2
|
|
NPC_AWAY equ 3
|
|
NPC_PATH_CAP equ 1024
|
|
InitNpcLife3D PROTO
|
|
UpdateNpcLife3D PROTO
|
|
RenderNpcLife3D PROTO
|
|
CheckNpcInteractions3D PROTO
|
|
OpenNpcDialog3D PROTO
|
|
HandleNpcDialog3D PROTO
|
|
RenderNpcDialog3D PROTO
|
|
CloseNpcDialog3D PROTO
|
|
NpcPlanPath3D PROTO :DWORD,:DWORD
|
|
NpcTryCell3D PROTO :DWORD,:DWORD
|
|
NpcMove3D PROTO :DWORD,:DWORD
|
|
NpcCanStep3D PROTO :DWORD,:DWORD,:DWORD
|
|
NpcEntity3D PROTO :DWORD
|
|
InitNpcVisits3D PROTO
|
|
NpcArrive3D PROTO :DWORD
|
|
NpcChooseVisit3D PROTO :DWORD
|
|
NpcAdvanceVisit3D PROTO :DWORD
|
|
NpcResolveVisitPose3D PROTO :DWORD
|
|
NpcSeatOffset3D PROTO :DWORD
|
|
NpcVisitRandom3D PROTO :DWORD,:DWORD
|
|
NpcReleaseStation3D PROTO :DWORD
|
|
NpcDrawRemark3D PROTO :DWORD
|
|
NpcRecordRound3D PROTO :DWORD,:DWORD
|
|
NpcEnsureJournal3D PROTO
|
|
NpcSaveJournal3D PROTO
|
|
NpcAcceptContract3D PROTO :DWORD
|
|
NpcClaimContract3D PROTO :DWORD
|
|
NpcContractType3D PROTO :DWORD
|
|
NpcDate3D PROTO
|
|
NpcNameText3D PROTO :DWORD
|
|
NpcLife3D STRUCT
|
|
identity dd ?
|
|
state dd ?
|
|
remaining dd ?
|
|
destination dd ?
|
|
routeStep dd ?
|
|
pathCount dd ?
|
|
remainder dd ?
|
|
poseClock dd ?
|
|
NpcLife3D ENDS
|
|
.data
|
|
npcLife3D NpcLife3D NPC_LIFE_COUNT dup(<>)
|
|
; The original six poker-mind records retain their layout and profile range.
|
|
npcExtraActors3D NpcMindEntity 4 dup(<>)
|
|
npcInitialIdentity3D dd 0,1,2,3,4,5,6,7,9,10
|
|
npcLifeReady3D dd 0
|
|
npcGuestArt3D AnimPack3D <>
|
|
npcGuestPath3D db "assets\animations\hall\guest-cast-v1.bin",0
|
|
npcWalkArt3D AnimPack3D <>
|
|
npcWalkPath3D db "assets\animations\hall\guest-walk-v2.bin",0
|
|
npcWalkLeftArt3D AnimPack3D <>
|
|
npcWalkLeftPath3D db "assets\animations\hall\guest-walk-left-v2.bin",0
|
|
npcWalkDistance3D dd NPC_LIFE_COUNT dup(0)
|
|
npcWalkVelocityX3D dd NPC_LIFE_COUNT dup(0)
|
|
npcWalkVelocityY3D dd NPC_LIFE_COUNT dup(0)
|
|
; Keep the twelve-slot historical journal, but resolve every appearance to the shared ten.
|
|
npcRise3D dd NPC_LIFE_COUNT dup(0)
|
|
npcSitTime3D dd NPC_LIFE_COUNT dup(0)
|
|
npcGuestAppearance3D dd 0,2,4,1,3,5,6,8,0,7,9,2
|
|
npcGuestNames3D dd OFFSET npcName0,OFFSET npcName1,OFFSET npcName2,OFFSET npcGuestAnna3D
|
|
dd OFFSET npcGuestMarina3D,OFFSET npcGuestVera3D,OFFSET npcName6,OFFSET npcName7
|
|
dd OFFSET npcName8,OFFSET npcGuestOlga3D,OFFSET npcGuestDaria3D,OFFSET npcName11
|
|
npcGuestAnna3D db 192,237,237,224,32,204,232,240,237,224,255,0
|
|
npcGuestMarina3D db 204,224,240,232,237,224,32,203,243,237,237,224,255,0
|
|
npcGuestVera3D db 194,229,240,224,32,209,229,240,229,225,240,255,237,224,255,0
|
|
npcGuestOlga3D db 206,235,252,227,224,32,204,232,240,237,224,255,0
|
|
npcGuestDaria3D db 196,224,240,252,255,32,193,238,227,224,242,224,255,0
|
|
npcLifeClock3D dd 0
|
|
npcSelected3D dd -1
|
|
npcDialogIdentity3D dd 0
|
|
npcDialogError3D dd 0
|
|
npcNameBuffer3D db 64 dup(0)
|
|
npcJournalIoError3D dd 0
|
|
npcDestX3D dd 16*FP_1+FP_HALF,16*FP_1+FP_HALF,10*FP_1+FP_HALF,6*FP_1+FP_HALF,13*FP_1+FP_HALF
|
|
dd 21*FP_1+FP_HALF,7*FP_1+FP_HALF,13*FP_1+FP_HALF,16*FP_1+FP_HALF,19*FP_1+FP_HALF
|
|
dd 6*FP_1+FP_HALF,15*FP_1+FP_HALF
|
|
npcDestY3D dd 28*FP_1+FP_HALF,17*FP_1+FP_HALF,13*FP_1+FP_HALF,14*FP_1+FP_HALF,9*FP_1+FP_HALF
|
|
dd 10*FP_1+FP_HALF,25*FP_1+FP_HALF,19*FP_1+FP_HALF,10*FP_1+FP_HALF,10*FP_1+FP_HALF
|
|
dd 25*FP_1+FP_HALF,19*FP_1+FP_HALF
|
|
npcStartDest3D dd 1,2,3,6,8,7,4,5,9,11
|
|
npcSprite3D CityProp3D <0,0,FP_1*3/5,FP_1*6/5,0,OFFSET hallPatrons3D>
|
|
npcDrawOrder3D dd NPC_LIFE_COUNT dup(0)
|
|
npcDrawDepth3D dd NPC_LIFE_COUNT dup(0)
|
|
npcJournalLoaded3D dd 0
|
|
npcJournalPath3D db 260 dup(0)
|
|
npcJournalNextPath3D db 260 dup(0)
|
|
npcJournalSuffix3D db ".npc",0
|
|
IFDEF CASINO_ACTION_TEST
|
|
npcJournalBasePtr3D dd OFFSET npcJournalTestBase3D
|
|
npcJournalTestBase3D db "build\arrival\fixtures\npc-default.dat",0
|
|
ELSE
|
|
npcJournalBasePtr3D dd 0
|
|
ENDIF
|
|
npcDateOverride3D dd 0
|
|
npcSystemTime3D dw 8 dup(0)
|
|
; Retain the twelve historical journal entries for existing saves and contracts.
|
|
npcJournal3D LABEL DWORD
|
|
npcJournalMagic3D dd 3151504Eh
|
|
npcJournalDay3D dd 0
|
|
npcAccepted3D dd 0
|
|
npcClaimed3D dd 0
|
|
npcProgress3D dd NPC_IDENTITY_COUNT dup(0)
|
|
npcJournalChecksum3D dd 0
|
|
NPC_JOURNAL_SIZE equ $-npcJournal3D
|
|
npcJournalRead3D db NPC_JOURNAL_SIZE dup(0)
|
|
npcQuestGames3D dd -1,0,0,1,1,2,2,3,3,4,5,5
|
|
npcQuestWins3D dd 0,0,1,0,1,0,1,0,1,0,0,1
|
|
npcQuestGoals3D dd 3,3,1,2,1,2,1,3,1,3,1,1
|
|
npcQuestRewards3D dd 150,150,350,250,500,350,700,250,500,150,300,700
|
|
npcQuestTexts3D dd OFFSET npcQuest0,OFFSET npcQuest1,OFFSET npcQuest2,OFFSET npcQuest3
|
|
dd OFFSET npcQuest4,OFFSET npcQuest5,OFFSET npcQuest6,OFFSET npcQuest7
|
|
dd OFFSET npcQuest8,OFFSET npcQuest9,OFFSET npcQuest10,OFFSET npcQuest11
|
|
npcNames3D dd OFFSET npcName0,OFFSET npcName1,OFFSET npcName2,OFFSET npcName3,OFFSET npcName4,OFFSET npcName5
|
|
dd OFFSET npcName6,OFFSET npcName7,OFFSET npcName8,OFFSET npcName9,OFFSET npcName10,OFFSET npcName11
|
|
npcGreetings3D dd OFFSET npcGreeting0,OFFSET npcGreeting1,OFFSET npcGreeting2
|
|
dd OFFSET npcGreeting3,OFFSET npcGreeting4,OFFSET npcGreeting5
|
|
npcName6 db 196,236,232,242,240,232,233,32,209,229,240,238,226,0
|
|
npcName7 db 194,232,234,242,238,240,32,195,240,238,236,238,226,0
|
|
npcName8 db 195,240,232,227,238,240,232,233,32,203,232,241,0
|
|
npcName9 db 207,224,226,229,235,32,204,232,240,237,251,233,0
|
|
npcName10 db 192,237,242,238,237,32,193,238,227,224,242,251,233,0
|
|
npcName11 db 192,235,232,241,224,32,194,229,242,240,238,226,224,0
|
|
npcGreeting0 db 207,240,238,226,229,240,232,236,32,242,226,238,254,32,226,251,228,229,240,230,234,243,63,0
|
|
npcGreeting1 db 209,229,227,238,228,237,255,32,255,32,232,227,240,224,254,32,241,236,229,235,238,46,0
|
|
npcGreeting2 db 211,228,224,247,224,32,235,254,225,232,242,32,242,229,240,239,229,235,232,226,251,245,46,0
|
|
npcGreeting3 db 196,224,226,224,233,32,241,251,227,240,224,229,236,32,225,229,231,32,241,239,229,248,234,232,46,0
|
|
npcGreeting4 db 197,241,242,252,32,228,229,235,238,32,241,32,237,224,227,240,224,228,238,233,46,0
|
|
npcGreeting5 db 207,238,239,240,238,225,243,229,236,32,241,226,238,232,32,241,232,235,251,63,0
|
|
npcQuest0 db 199,224,226,229,240,248,232,32,235,254,225,251,229,32,51,32,240,224,243,237,228,224,0
|
|
npcQuest1 db 207,238,228,225,240,238,241,252,32,236,238,237,229,242,234,243,32,51,32,240,224,231,224,0
|
|
npcQuest2 db 194,251,232,227,240,224,233,32,226,32,236,238,237,229,242,234,243,0
|
|
npcQuest3 db 209,251,227,240,224,233,32,50,32,240,224,243,237,228,224,32,226,32,225,235,253,234,228,230,229,234,0
|
|
npcQuest4 db 194,251,232,227,240,224,233,32,226,32,225,235,253,234,228,230,229,234,0
|
|
npcQuest5 db 199,224,226,229,240,248,232,32,50,32,240,224,231,228,224,247,232,32,239,238,234,229,240,224,0
|
|
npcQuest6 db 194,251,232,227,240,224,233,32,240,224,231,228,224,247,243,32,239,238,234,229,240,224,0
|
|
npcQuest7 db 209,251,227,240,224,233,32,51,32,240,224,243,237,228,224,32,226,32,240,243,235,229,242,234,243,0
|
|
npcQuest8 db 194,251,232,227,240,224,233,32,226,32,240,243,235,229,242,234,243,0
|
|
npcQuest9 db 202,240,243,242,232,32,224,226,242,238,236,224,242,32,51,32,240,224,231,224,0
|
|
npcQuest10 db 199,224,226,229,240,248,232,32,239,224,240,242,232,254,32,226,32,228,243,240,224,234,224,0
|
|
npcQuest11 db 194,251,232,227,240,224,233,32,239,224,240,242,232,254,32,226,32,228,243,240,224,234,224,0
|
|
npcTalkPrompt3D db 91,69,93,32,207,206,195,206,194,206,208,200,210,220,0
|
|
npcContractTitle3D db 215,197,203,203,197,205,196,198,32,205,192,32,209,197,195,206,196,205,223,0
|
|
npcProgressText3D db 207,240,238,227,240,229,241,241,0
|
|
npcRewardText3D db 205,224,227,240,224,228,224,0
|
|
npcAcceptText3D db 194,199,223,210,220,0
|
|
npcClaimText3D db 205,192,195,208,192,196,192,0
|
|
npcCloseText3D db 199,192,202,208,219,210,220,0
|
|
npcAvailableText3D db 204,238,230,237,238,32,239,240,232,237,255,242,252,0
|
|
npcActiveText3D db 194,251,239,238,235,237,255,229,242,241,255,0
|
|
npcReadyText3D db 195,238,242,238,226,238,33,32,199,224,225,229,240,232,32,237,224,227,240,224,228,243,0
|
|
npcDoneText3D db 205,224,227,240,224,228,224,32,243,230,229,32,239,238,235,243,247,229,237,224,0
|
|
npcIoErrorText3D db 205,229,32,243,228,224,235,238,241,252,32,241,238,245,240,224,237,232,242,252,32,231,224,228,224,237,232,229,0
|
|
npcSlashText3D db " / ",0
|
|
.data?
|
|
npcPaths3D dd NPC_LIFE_COUNT*NPC_PATH_CAP dup(?)
|
|
npcParents3D dd NPC_PATH_CAP dup(?)
|
|
npcQueue3D dd NPC_PATH_CAP dup(?)
|
|
.data
|
|
npcSearchHead3D dd 0
|
|
npcSearchTail3D dd 0
|
|
npcSearchGoal3D dd 0
|
|
include src_graphics\npc_visits_data.inc
|
|
.code
|