MODE_NPC_DIALOG equ 20 IFDEF CASINO_ACTION_TEST DeleteFileA PROTO :DWORD ENDIF INTERACT_NPC equ 40 NPC_LIFE_COUNT equ 6 NPC_IDENTITY_COUNT equ 12 NPC_DEST_COUNT equ 10 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 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(<>) npcLifeReady3D dd 0 npcGuestArt3D AnimPack3D <> npcGuestPath3D db "assets\animations\hall\guest-cast-v1.bin",0 ; The two rotations share six appearances, with a mixed cast on every visit. npcGuestAppearance3D dd 0,2,4,1,3,5,2,0,4,1,3,5 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,6*FP_1+FP_HALF,16*FP_1+FP_HALF,16*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,27*FP_1+FP_HALF,10*FP_1+FP_HALF,7*FP_1+FP_HALF npcVisitRoute3D dd 1,5,8,2,3,6,7,9,1,0 npcStartDest3D dd 1,2,3,6,8,7 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) ; One bounded journal per profile; visitors 0..5 and 6..11 alternate at the entrance. 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 .code