BeginArrival3D PROC call LoadArrivalAssets3D call LoadCityArrival3D call CollectGraphicProfiles3D mov engineMode, MODE_ARRIVAL mov arrivalState3D, ARRIVAL_WALK mov cityPhase3D, CITY_BLACK mov cityTime3D, 0 mov cityClock3D, 0 mov arrivalTime3D, 0 mov arrivalConfirmed3D, 0 mov nativeProfileActive3D, 0 mov arrivalSelected3D, 0 cmp entryAccountCount3D, 0 je @F mov arrivalSelected3D, 1 @@: mov arrivalError3D, 0 call ClearKeys3D ret BeginArrival3D ENDP ArrivalChar3D PROC character:DWORD cmp engineMode, MODE_ARRIVAL jne arrival_char_done cmp arrivalState3D, ARRIVAL_NAME jne arrival_char_done mov eax, character cmp eax, 127 ja arrival_char_done cmp eax, 8 je arrival_char_backspace cmp arrivalNameLength3D, 16 jae arrival_char_done cmp al, '0' jb arrival_char_alpha cmp al, '9' jbe arrival_char_store arrival_char_alpha: mov dl, al or dl, 20h cmp dl, 'a' jb arrival_char_symbol cmp dl, 'z' jbe arrival_char_store arrival_char_symbol: cmp al, '_' je arrival_char_store cmp al, '-' jne arrival_char_done arrival_char_store: mov ecx, arrivalNameLength3D mov arrivalName3D[ecx], al inc ecx mov arrivalNameLength3D, ecx mov arrivalName3D[ecx], 0 mov arrivalError3D, 0 ret arrival_char_backspace: mov ecx, arrivalNameLength3D test ecx, ecx jz arrival_char_done dec ecx mov arrivalNameLength3D, ecx mov arrivalName3D[ecx], 0 arrival_char_done: ret ArrivalChar3D ENDP ArrivalEscape3D PROC cmp arrivalState3D, ARRIVAL_NAME jne @F mov arrivalState3D, ARRIVAL_PROFILE mov arrivalError3D, 0 call ClearKeys3D ret @@: cmp arrivalState3D, ARRIVAL_PROFILE je arrival_pause cmp arrivalState3D, ARRIVAL_STOP jae arrival_escape_done mov arrivalState3D, ARRIVAL_STOP mov arrivalTime3D, 0 call ClearKeys3D ret arrival_pause: xor paused3D, 1 arrival_escape_done: ret ArrivalEscape3D ENDP HandleArrival3D PROC uses ebx esi mov eax, deltaTime3D add arrivalTime3D, eax add cityClock3D, eax cmp arrivalState3D, ARRIVAL_NAME je arrival_name_input cmp arrivalState3D, ARRIVAL_PROFILE je arrival_profile_input cmp arrivalState3D, ARRIVAL_WALK jne arrival_animation call HandleCityApproach3D ret arrival_animation: cmp arrivalState3D, ARRIVAL_STOP jne arrival_admission cmp arrivalTime3D, 720 jb arrival_handle_done mov arrivalState3D, ARRIVAL_PROFILE mov arrivalTime3D, 0 call ClearKeys3D ret arrival_admission: cmp arrivalState3D, ARRIVAL_ADMIT jne arrival_entry cmp arrivalTime3D, 1200 jb arrival_handle_done mov arrivalState3D, ARRIVAL_ENTER mov arrivalTime3D, 0 ret arrival_entry: cmp arrivalTime3D, 1400 jb arrival_handle_done mov engineMode, MODE_WALK mov playerX, (16*FP_1+FP_HALF) mov playerY, (27*FP_1+FP_HALF) mov playerAngle, 384 mov interactTargetId, 0 mov interactPromptPtr, 0 call ClearKeys3D ret arrival_profile_input: invoke Pressed3D, 26h test eax, eax jz @F cmp arrivalSelected3D, 0 je @F dec arrivalSelected3D @@: invoke Pressed3D, 28h test eax, eax jz @F mov eax, entryAccountCount3D inc eax cmp arrivalSelected3D, eax jae @F inc arrivalSelected3D @@: cmp mouseClick3D, 0 je arrival_profile_enter cmp mouseX3D, 174 jb arrival_profile_enter cmp mouseX3D, 310 jae arrival_profile_enter mov eax, mouseY3D sub eax, 70 js arrival_profile_mouse_button cmp eax, 120 jae arrival_profile_mouse_button xor edx, edx mov ecx, 24 div ecx mov ebx, eax mov eax, arrivalSelected3D xor edx, edx mov ecx, 5 div ecx imul eax, 5 add eax, ebx mov ecx, entryAccountCount3D inc ecx cmp eax, ecx ja arrival_handle_done mov arrivalSelected3D, eax ret arrival_profile_mouse_button: cmp mouseY3D, 201 jb arrival_handle_done cmp mouseY3D, 219 ja arrival_handle_done jmp arrival_profile_confirm arrival_profile_enter: invoke Pressed3D, 0Dh test eax, eax jz arrival_handle_done arrival_profile_confirm: mov eax, arrivalSelected3D test eax, eax jz arrival_confirmed dec eax cmp eax, entryAccountCount3D je arrival_create_name invoke SelectGraphicProfile3D, eax test eax, eax jz arrival_selection_error arrival_confirmed: mov arrivalConfirmed3D, 1 mov arrivalState3D, ARRIVAL_ADMIT mov arrivalTime3D, 0 mov arrivalError3D, 0 call ClearKeys3D ret arrival_create_name: mov arrivalState3D, ARRIVAL_NAME mov arrivalNameLength3D, 0 mov arrivalName3D, 0 mov arrivalError3D, 0 call ClearKeys3D ret arrival_name_input: invoke Pressed3D, 0Dh test eax, eax jz arrival_handle_done call CreateGraphicProfile3D test eax, eax jnz arrival_confirmed arrival_selection_error: mov arrivalError3D, 1 arrival_handle_done: ret HandleArrival3D ENDP DrawEntryProfileRows3D PROC uses ebx esi edi local start:DWORD,rowY:DWORD,ink:DWORD invoke DrawBoxBorder, 174, 42, 138, 181, 0017191Ch, 00BD985Ah, 1 invoke DrawString8x8, 182, 51, OFFSET entryChoose3D, 00F0D7ABh mov eax, arrivalSelected3D xor edx, edx mov ecx, 5 div ecx imul eax, 5 mov start, eax mov ebx, eax mov rowY, 70 entry_row: mov eax, entryAccountCount3D inc eax cmp ebx, eax ja entry_rows_done mov ink, 00C5C7C9h cmp ebx, arrivalSelected3D jne @F invoke DrawBoxBorder, 178, rowY, 130, 22, 003B5148h, 00B6D9B4h, 1 mov ink, 00FFFFFFh @@: mov esi, OFFSET entryGuest3D test ebx, ebx jz entry_row_draw mov eax, entryAccountCount3D inc eax cmp ebx, eax jne entry_row_name mov esi, OFFSET entryNew3D jmp entry_row_draw entry_row_name: mov eax, ebx dec eax shl eax, 6 add eax, OFFSET entryAccountNames3D mov esi, eax mov edi, OFFSET entryDisplayName3D mov ecx, 15 entry_display_copy: lodsb cmp al, '.' je entry_display_end test al, al jz entry_display_end stosb loop entry_display_copy entry_display_end: mov BYTE PTR [edi], 0 mov esi, OFFSET entryDisplayName3D entry_row_draw: mov eax, rowY add eax, 3 invoke DrawString8x8, 182, eax, esi, ink mov eax, entryAccountCount3D inc eax cmp ebx, eax je entry_row_next mov eax, bankroll test ebx, ebx jz entry_display_bank mov eax, ebx dec eax mov eax, entryAccountBanks3D[eax*4] entry_display_bank: invoke FormatNumber, eax, OFFSET hudNumBuffer mov eax, rowY add eax, 13 invoke DrawString8x8, 182, eax, OFFSET entryMoney3D, 00B1C9ADh mov eax, rowY add eax, 13 invoke DrawString8x8, 192, eax, OFFSET hudNumBuffer, 00B1C9ADh entry_row_next: add rowY, 24 inc ebx mov eax, ebx sub eax, start cmp eax, 5 jb entry_row entry_rows_done: cmp arrivalError3D, 0 je @F invoke DrawString8x8, 182, 190, OFFSET entryProfileError3D, 00EC8875h @@: invoke DrawBoxBorder, 180, 202, 126, 17, 003F5748h, 00D8BC6Ah, 1 invoke DrawString8x8, 223, 207, OFFSET entryConfirm3D, 00FFFFFFh ret DrawEntryProfileRows3D ENDP