Add rooftop elevator, lounge, volumetric city, river and animated traffic. Prune invisible mesh faces, clip CPU surfaces, streamline compositing and add automatic/F8 roof quality profiles with renderer diagnostics. Include dartboard/reticle improvements, tracked fortune orb numerals and fate-session visuals, native regression tests, compatible jukebox IDs and updated shipping executables.
420 lines
9.2 KiB
PHP
420 lines
9.2 KiB
PHP
.data
|
|
dtVectors3D LABEL DWORD
|
|
dd 0,53,20,1
|
|
dd 0,103,60,3
|
|
dd 0,166,40,2
|
|
dd 16,50,1,1
|
|
dd 32,98,3,3
|
|
dd 51,158,2,2
|
|
dd 31,43,18,1
|
|
dd 61,83,54,3
|
|
dd 98,134,36,2
|
|
dd 43,31,4,1
|
|
dd 83,61,12,3
|
|
dd 134,98,8,2
|
|
dd 50,16,13,1
|
|
dd 98,32,39,3
|
|
dd 158,51,26,2
|
|
dd 53,0,6,1
|
|
dd 103,0,18,3
|
|
dd 166,0,12,2
|
|
dd 50,-16,10,1
|
|
dd 98,-32,30,3
|
|
dd 158,-51,20,2
|
|
dd 43,-31,15,1
|
|
dd 83,-61,45,3
|
|
dd 134,-98,30,2
|
|
dd 31,-43,2,1
|
|
dd 61,-83,6,3
|
|
dd 98,-134,4,2
|
|
dd 16,-50,17,1
|
|
dd 32,-98,51,3
|
|
dd 51,-158,34,2
|
|
dd 0,-53,3,1
|
|
dd 0,-103,9,3
|
|
dd 0,-166,6,2
|
|
dd -16,-50,19,1
|
|
dd -32,-98,57,3
|
|
dd -51,-158,38,2
|
|
dd -31,-43,7,1
|
|
dd -61,-83,21,3
|
|
dd -98,-134,14,2
|
|
dd -43,-31,16,1
|
|
dd -83,-61,48,3
|
|
dd -134,-98,32,2
|
|
dd -50,-16,8,1
|
|
dd -98,-32,24,3
|
|
dd -158,-51,16,2
|
|
dd -53,0,11,1
|
|
dd -103,0,33,3
|
|
dd -166,0,22,2
|
|
dd -50,16,14,1
|
|
dd -98,32,42,3
|
|
dd -158,51,28,2
|
|
dd -43,31,9,1
|
|
dd -83,61,27,3
|
|
dd -134,98,18,2
|
|
dd -31,43,12,1
|
|
dd -61,83,36,3
|
|
dd -98,134,24,2
|
|
dd -16,50,5,1
|
|
dd -32,98,15,3
|
|
dd -51,158,10,2
|
|
dd 0,0,50,2
|
|
dd 0,6,50,2
|
|
dd 0,10,25,1
|
|
dd 0,16,20,1
|
|
dd 0,190,0,0
|
|
dd 2147483647,0,0,0
|
|
dd -2147483648,0,0,0
|
|
dtVectorCount3D equ 67
|
|
dtTestTriples3D dd 0
|
|
dtTestMetricPath db "build\darts\aim-metrics.bin",0
|
|
.code
|
|
DartsTestReticle PROC uses ebx esi edi
|
|
mov edi,OFFSET screenBuffer
|
|
mov ecx,640*480
|
|
mov eax,00E0E0E0h
|
|
rep stosd
|
|
invoke DrawDartsReticle3D,320,214
|
|
mov esi,OFFSET screenBuffer
|
|
mov ecx,640*480
|
|
xor ebx,ebx
|
|
dt_test_reticle_light:
|
|
lodsd
|
|
cmp eax,00E0E0E0h
|
|
je @F
|
|
cmp eax,00152021h
|
|
jne dt_test_reticle_fail
|
|
inc ebx
|
|
@@:
|
|
loop dt_test_reticle_light
|
|
cmp ebx,9
|
|
jne dt_test_reticle_fail
|
|
mov edi,OFFSET screenBuffer
|
|
mov ecx,640*480
|
|
mov eax,00101010h
|
|
rep stosd
|
|
invoke DrawDartsReticle3D,0,32
|
|
mov esi,OFFSET screenBuffer
|
|
mov ecx,640*480
|
|
xor ebx,ebx
|
|
dt_test_reticle_dark:
|
|
lodsd
|
|
cmp eax,00101010h
|
|
je @F
|
|
cmp eax,00F6E6ADh
|
|
jne dt_test_reticle_fail
|
|
inc ebx
|
|
@@:
|
|
loop dt_test_reticle_dark
|
|
cmp ebx,5
|
|
jne dt_test_reticle_fail
|
|
ret
|
|
dt_test_reticle_fail:
|
|
invoke ExitProcess,8506
|
|
ret
|
|
DartsTestReticle ENDP
|
|
|
|
DartsTestWriteMetrics PROC uses ebx
|
|
local written:DWORD
|
|
invoke CreateFileA,OFFSET dtTestMetricPath,40000000h,0,0,2,80h,0
|
|
cmp eax,-1
|
|
je dt_test_metric_fail
|
|
mov ebx,eax
|
|
invoke WriteFile,ebx,OFFSET dtTestTriples3D,4,ADDR written,0
|
|
invoke CloseHandle,ebx
|
|
ret
|
|
dt_test_metric_fail:
|
|
invoke ExitProcess,8505
|
|
ret
|
|
DartsTestWriteMetrics ENDP
|
|
|
|
DartsTestStart PROC uses ebx esi edi
|
|
local legs:DWORD
|
|
call InitPaths3D
|
|
call DartsTestReticle
|
|
lea esi,dtVectors3D
|
|
mov ebx,dtVectorCount3D
|
|
dt_test_vector:
|
|
invoke DartsScore3D,[esi],[esi+4]
|
|
cmp eax,[esi+8]
|
|
jne dt_test_fail
|
|
cmp edx,[esi+12]
|
|
jne dt_test_fail
|
|
add esi,16
|
|
dec ebx
|
|
jnz dt_test_vector
|
|
mov playerX,123456
|
|
mov playerY,789012
|
|
mov bankroll,12345
|
|
call ResetDarts3D
|
|
mov dtCursorX3D,320*256
|
|
mov dtCursorY3D,214*256
|
|
mov dtClock3D,384
|
|
mov dtHolding3D,1
|
|
mov dtHoldTime3D,0
|
|
call DartsAim3D
|
|
cmp dtAimX3D,10
|
|
jl dt_test_fail
|
|
cmp dtAimX3D,13
|
|
jg dt_test_fail
|
|
mov ebx,dtAimX3D
|
|
mov dtHoldTime3D,4000
|
|
call DartsAim3D
|
|
mov eax,dtAimX3D
|
|
sub eax,ebx
|
|
cmp eax,8
|
|
jne dt_test_fail
|
|
; Fine mouse motion must survive the hall's coarser 320px UI coordinates.
|
|
mov engineMode,MODE_DARTS
|
|
mov viewWidth3D,2560
|
|
mov viewHeight3D,1440
|
|
mov viewLeft3D,0
|
|
mov viewTop3D,0
|
|
invoke WindowEvents3D,0,200h,0,02820500h
|
|
call DartsAim3D
|
|
mov ebx,dtAimX3D
|
|
invoke WindowEvents3D,0,200h,0,02820502h
|
|
call DartsAim3D
|
|
cmp dtAimX3D,ebx
|
|
jle dt_test_fail
|
|
cmp mouseX3D,160
|
|
jne dt_test_fail
|
|
mov ebx,dtAimY3D
|
|
invoke WindowEvents3D,0,200h,0,02840502h
|
|
call DartsAim3D
|
|
cmp dtAimY3D,ebx
|
|
jge dt_test_fail
|
|
cmp mouseY3D,107
|
|
jne dt_test_fail
|
|
call ResetDarts3D
|
|
call DartsCamera3D
|
|
invoke DartsProject3D,-248,0,DT_WALL
|
|
mov ebx,eax
|
|
invoke DartsProject3D,248,0,DT_WALL
|
|
sub eax,ebx
|
|
cmp eax,170
|
|
jl dt_test_fail
|
|
cmp eax,180
|
|
jg dt_test_fail
|
|
; Camping at the centre of T20 no longer guarantees a triple every time.
|
|
mov dtCursorX3D,320*256
|
|
mov dtCursorY3D,214*256-103*DT_FOCAL*256/DT_WALL
|
|
mov dtClock3D,0
|
|
mov dtTestTriples3D,0
|
|
mov edi,100
|
|
dt_test_sway_samples:
|
|
call DartsAim3D
|
|
invoke DartsScore3D,dtAimX3D,dtAimY3D
|
|
cmp eax,60
|
|
jne @F
|
|
inc dtTestTriples3D
|
|
@@:
|
|
add dtClock3D,16
|
|
dec edi
|
|
jnz dt_test_sway_samples
|
|
cmp dtTestTriples3D,10
|
|
jb dt_test_fail
|
|
cmp dtTestTriples3D,60
|
|
ja dt_test_fail
|
|
call DartsTestWriteMetrics
|
|
mov dtState3D,DT_FLIGHT
|
|
mov dtTimer3D,400
|
|
mov deltaTime3D,16
|
|
mov pressedKeys3D[9],1
|
|
call HandleDarts3D
|
|
cmp dtScoreOpen3D,1
|
|
jne dt_test_fail
|
|
cmp dtTimer3D,400
|
|
jne dt_test_fail
|
|
mov pressedKeys3D[9],1
|
|
call HandleDarts3D
|
|
cmp dtScoreOpen3D,0
|
|
jne dt_test_fail
|
|
cmp dtTimer3D,416
|
|
jne dt_test_fail
|
|
call ResetDarts3D
|
|
mov dtHitX3D,0
|
|
mov dtHitY3D,103
|
|
mov dtRemaining3D,59
|
|
mov dtVisitStart3D,100
|
|
mov dtState3D,DT_FLIGHT
|
|
call SettleDarts3D
|
|
cmp dtRemaining3D,100
|
|
jne dt_test_fail
|
|
cmp dtBust3D,1
|
|
jne dt_test_fail
|
|
cmp dtCount3D,1
|
|
jne dt_test_fail
|
|
call SettleDarts3D
|
|
cmp dtCount3D,1
|
|
jne dt_test_fail
|
|
call ResetDarts3D
|
|
mov dtHitX3D,0
|
|
mov dtHitY3D,166
|
|
mov dtRemaining3D,40
|
|
mov dtVisitStart3D,40
|
|
mov dtState3D,DT_FLIGHT
|
|
call SettleDarts3D
|
|
cmp dtRemaining3D,0
|
|
jne dt_test_fail
|
|
mov dtTimer3D,1300
|
|
mov deltaTime3D,16
|
|
call HandleDarts3D
|
|
cmp dtState3D,DT_WIN
|
|
jne dt_test_fail
|
|
call ResetDarts3D
|
|
mov dtHitY3D,166
|
|
mov dtRemaining3D,41
|
|
mov dtVisitStart3D,41
|
|
mov dtState3D,DT_FLIGHT
|
|
call SettleDarts3D
|
|
cmp dtRemaining3D,1
|
|
jne dt_test_fail
|
|
cmp dtBust3D,0
|
|
jne dt_test_fail
|
|
mov dtCount3D,3
|
|
mov dtState3D,DT_RETURN
|
|
mov dtTimer3D,750
|
|
call HandleDarts3D
|
|
cmp dtCount3D,0
|
|
jne dt_test_fail
|
|
cmp dtVisit3D,2
|
|
jne dt_test_fail
|
|
cmp dtActor3D,1
|
|
jne dt_test_fail
|
|
cmp dtRemaining3D,500
|
|
jne dt_test_fail
|
|
cmp dtScores3D,1
|
|
jne dt_test_fail
|
|
cmp dtScores3D[4],500
|
|
jne dt_test_fail
|
|
call ResetDarts3D
|
|
mov engineMode,MODE_DARTS
|
|
mov viewWidth3D,640
|
|
mov viewHeight3D,480
|
|
mov viewLeft3D,0
|
|
mov viewTop3D,0
|
|
mov mouseClick3D,0
|
|
invoke WindowEvents3D,0,200h,0,00D60140h
|
|
cmp mouseClick3D,0
|
|
jne dt_test_fail
|
|
invoke WindowEvents3D,0,201h,1,00D60140h
|
|
call HandleDarts3D
|
|
cmp dtState3D,DT_AIM
|
|
jne dt_test_fail
|
|
cmp dtHolding3D,1
|
|
jne dt_test_fail
|
|
invoke WindowEvents3D,0,202h,0,00D60140h
|
|
call HandleDarts3D
|
|
cmp dtState3D,DT_RELEASE
|
|
jne dt_test_fail
|
|
cmp dtThrows3D,1
|
|
jne dt_test_fail
|
|
mov ebx,dtHitX3D
|
|
mov esi,dtHitY3D
|
|
invoke WindowEvents3D,0,200h,0,00640064h
|
|
call HandleDarts3D
|
|
cmp dtHitX3D,ebx
|
|
jne dt_test_fail
|
|
cmp dtHitY3D,esi
|
|
jne dt_test_fail
|
|
call ResetDarts3D
|
|
mov dtHitX3D,80
|
|
mov dtHitY3D,103
|
|
mov dtState3D,DT_FLIGHT
|
|
mov dtTimer3D,0
|
|
call DartsCamera3D
|
|
cmp dtCamZ3D,0
|
|
jne dt_test_fail
|
|
mov dtTimer3D,600
|
|
call DartsCamera3D
|
|
cmp dtCamZ3D,DT_WALL/2-160
|
|
jne dt_test_fail
|
|
cmp dtYawSin3D,50000
|
|
jl dt_test_fail
|
|
mov dtTimer3D,1200
|
|
call DartsCamera3D
|
|
cmp dtCamZ3D,DT_WALL-420
|
|
jne dt_test_fail
|
|
invoke DartsProject3D,80,103,DT_WALL
|
|
cmp eax,320
|
|
jl dt_test_fail
|
|
cmp eax,420
|
|
jg dt_test_fail
|
|
cmp edx,120
|
|
jl dt_test_fail
|
|
cmp edx,214
|
|
jg dt_test_fail
|
|
cmp dtYawSin3D,12000
|
|
jg dt_test_fail
|
|
; Actual bot input ignores the cursor and automatically releases a dart.
|
|
call ResetDarts3D
|
|
mov dtActor3D,1
|
|
mov mouseX3D,0
|
|
mov mouseY3D,0
|
|
mov deltaTime3D,1600
|
|
call HandleDarts3D
|
|
cmp dtState3D,DT_RELEASE
|
|
jne dt_test_fail
|
|
cmp dtThrows3D,1
|
|
jne dt_test_fail
|
|
cmp dtScores3D,500
|
|
jne dt_test_fail
|
|
; Complete a real match through normal phase/visit transitions.
|
|
mov legs,20
|
|
dt_test_another_match:
|
|
call ResetDarts3D
|
|
mov edi,5000
|
|
dt_test_match:
|
|
cmp dtState3D,DT_WIN
|
|
je dt_test_match_done
|
|
cmp dtState3D,DT_AIM
|
|
jne dt_test_match_tick
|
|
cmp dtActor3D,0
|
|
jne dt_test_match_tick
|
|
call DartsBotAim3D
|
|
mov eax,dtBotAimX3D
|
|
mov dtAimX3D,eax
|
|
mov eax,dtBotAimY3D
|
|
mov dtAimY3D,eax
|
|
call ThrowDarts3D
|
|
dt_test_match_tick:
|
|
mov deltaTime3D,1400
|
|
call HandleDarts3D
|
|
cmp dtScores3D,500
|
|
ja dt_test_fail
|
|
cmp dtScores3D[4],500
|
|
ja dt_test_fail
|
|
dec edi
|
|
jnz dt_test_match
|
|
jmp dt_test_fail
|
|
dt_test_match_done:
|
|
mov eax,dtWinner3D
|
|
cmp dtScores3D[eax*4],0
|
|
jne dt_test_fail
|
|
dec legs
|
|
jnz dt_test_another_match
|
|
cmp playerX,123456
|
|
jne dt_test_fail
|
|
cmp playerY,789012
|
|
jne dt_test_fail
|
|
cmp bankroll,12345
|
|
jne dt_test_fail
|
|
call LoadDarts3D
|
|
test eax,eax
|
|
jz dt_test_assets
|
|
call DartsTestFrames
|
|
call FreeDarts3D
|
|
xor eax,eax
|
|
jmp dt_test_exit
|
|
dt_test_assets:
|
|
mov eax,8502
|
|
jmp dt_test_exit
|
|
dt_test_fail:
|
|
mov eax,8501
|
|
dt_test_exit:
|
|
invoke ExitProcess,eax
|
|
DartsTestStart ENDP
|
|
|