KAZIK/tools/tests/character_cast_test.inc
Artvasil09 3150d217b5 feat: add playable bowling match mode and calibrate rooftop character scaling
- Add playable ten-frame bowling against bot with two timing gates (direction/power) and fixed-step physics

- Add lane match interaction, shaded ball surface, pin collisions, bonus balls, and live score sheet

- Scale rooftop terrace visitor sprites to eye level according to the taller rooftop standing eye height

- Resolve mode and interaction ID conflicts with Hell FPS (MODE_BOWLING=30, INTERACT_BOWL_PLAY=56)

- Update launcher hash, installer package, and expansion regression test suites
2026-11-01 22:50:33 +03:00

270 lines
13 KiB
PHP

.data
castTestObject CityProp3D <16*FP_1,16*FP_1,CAST_WIDTH,CAST_HEIGHT,0,OFFSET characterCast3D>
castTestActions dd CAST_IDLE,CAST_WALK,CAST_WALK,CAST_SEAT_DRINK,CAST_PICK_UP,CAST_THROW
castTestClocks dd 0,FP_1*9/32,FP_1*9/32,360,700,1800
castPath0_0 db "build\hall-expansion\cast-0-0.bmp",0
castPath0_1 db "build\hall-expansion\cast-0-1.bmp",0
castPath0_2 db "build\hall-expansion\cast-0-2.bmp",0
castPath0_3 db "build\hall-expansion\cast-0-3.bmp",0
castPath0_4 db "build\hall-expansion\cast-0-4.bmp",0
castPath0_5 db "build\hall-expansion\cast-0-5.bmp",0
castPath1_0 db "build\hall-expansion\cast-1-0.bmp",0
castPath1_1 db "build\hall-expansion\cast-1-1.bmp",0
castPath1_2 db "build\hall-expansion\cast-1-2.bmp",0
castPath1_3 db "build\hall-expansion\cast-1-3.bmp",0
castPath1_4 db "build\hall-expansion\cast-1-4.bmp",0
castPath1_5 db "build\hall-expansion\cast-1-5.bmp",0
castPath2_0 db "build\hall-expansion\cast-2-0.bmp",0
castPath2_1 db "build\hall-expansion\cast-2-1.bmp",0
castPath2_2 db "build\hall-expansion\cast-2-2.bmp",0
castPath2_3 db "build\hall-expansion\cast-2-3.bmp",0
castPath2_4 db "build\hall-expansion\cast-2-4.bmp",0
castPath2_5 db "build\hall-expansion\cast-2-5.bmp",0
castPath3_0 db "build\hall-expansion\cast-3-0.bmp",0
castPath3_1 db "build\hall-expansion\cast-3-1.bmp",0
castPath3_2 db "build\hall-expansion\cast-3-2.bmp",0
castPath3_3 db "build\hall-expansion\cast-3-3.bmp",0
castPath3_4 db "build\hall-expansion\cast-3-4.bmp",0
castPath3_5 db "build\hall-expansion\cast-3-5.bmp",0
castPath4_0 db "build\hall-expansion\cast-4-0.bmp",0
castPath4_1 db "build\hall-expansion\cast-4-1.bmp",0
castPath4_2 db "build\hall-expansion\cast-4-2.bmp",0
castPath4_3 db "build\hall-expansion\cast-4-3.bmp",0
castPath4_4 db "build\hall-expansion\cast-4-4.bmp",0
castPath4_5 db "build\hall-expansion\cast-4-5.bmp",0
castPath5_0 db "build\hall-expansion\cast-5-0.bmp",0
castPath5_1 db "build\hall-expansion\cast-5-1.bmp",0
castPath5_2 db "build\hall-expansion\cast-5-2.bmp",0
castPath5_3 db "build\hall-expansion\cast-5-3.bmp",0
castPath5_4 db "build\hall-expansion\cast-5-4.bmp",0
castPath5_5 db "build\hall-expansion\cast-5-5.bmp",0
castPath6_0 db "build\hall-expansion\cast-6-0.bmp",0
castPath6_1 db "build\hall-expansion\cast-6-1.bmp",0
castPath6_2 db "build\hall-expansion\cast-6-2.bmp",0
castPath6_3 db "build\hall-expansion\cast-6-3.bmp",0
castPath6_4 db "build\hall-expansion\cast-6-4.bmp",0
castPath6_5 db "build\hall-expansion\cast-6-5.bmp",0
castPath7_0 db "build\hall-expansion\cast-7-0.bmp",0
castPath7_1 db "build\hall-expansion\cast-7-1.bmp",0
castPath7_2 db "build\hall-expansion\cast-7-2.bmp",0
castPath7_3 db "build\hall-expansion\cast-7-3.bmp",0
castPath7_4 db "build\hall-expansion\cast-7-4.bmp",0
castPath7_5 db "build\hall-expansion\cast-7-5.bmp",0
castPath8_0 db "build\hall-expansion\cast-8-0.bmp",0
castPath8_1 db "build\hall-expansion\cast-8-1.bmp",0
castPath8_2 db "build\hall-expansion\cast-8-2.bmp",0
castPath8_3 db "build\hall-expansion\cast-8-3.bmp",0
castPath8_4 db "build\hall-expansion\cast-8-4.bmp",0
castPath8_5 db "build\hall-expansion\cast-8-5.bmp",0
castPath9_0 db "build\hall-expansion\cast-9-0.bmp",0
castPath9_1 db "build\hall-expansion\cast-9-1.bmp",0
castPath9_2 db "build\hall-expansion\cast-9-2.bmp",0
castPath9_3 db "build\hall-expansion\cast-9-3.bmp",0
castPath9_4 db "build\hall-expansion\cast-9-4.bmp",0
castPath9_5 db "build\hall-expansion\cast-9-5.bmp",0
castTestPaths LABEL DWORD
dd OFFSET castPath0_0,OFFSET castPath0_1,OFFSET castPath0_2,OFFSET castPath0_3,OFFSET castPath0_4,OFFSET castPath0_5
dd OFFSET castPath1_0,OFFSET castPath1_1,OFFSET castPath1_2,OFFSET castPath1_3,OFFSET castPath1_4,OFFSET castPath1_5
dd OFFSET castPath2_0,OFFSET castPath2_1,OFFSET castPath2_2,OFFSET castPath2_3,OFFSET castPath2_4,OFFSET castPath2_5
dd OFFSET castPath3_0,OFFSET castPath3_1,OFFSET castPath3_2,OFFSET castPath3_3,OFFSET castPath3_4,OFFSET castPath3_5
dd OFFSET castPath4_0,OFFSET castPath4_1,OFFSET castPath4_2,OFFSET castPath4_3,OFFSET castPath4_4,OFFSET castPath4_5
dd OFFSET castPath5_0,OFFSET castPath5_1,OFFSET castPath5_2,OFFSET castPath5_3,OFFSET castPath5_4,OFFSET castPath5_5
dd OFFSET castPath6_0,OFFSET castPath6_1,OFFSET castPath6_2,OFFSET castPath6_3,OFFSET castPath6_4,OFFSET castPath6_5
dd OFFSET castPath7_0,OFFSET castPath7_1,OFFSET castPath7_2,OFFSET castPath7_3,OFFSET castPath7_4,OFFSET castPath7_5
dd OFFSET castPath8_0,OFFSET castPath8_1,OFFSET castPath8_2,OFFSET castPath8_3,OFFSET castPath8_4,OFFSET castPath8_5
dd OFFSET castPath9_0,OFFSET castPath9_1,OFFSET castPath9_2,OFFSET castPath9_3,OFFSET castPath9_4,OFFSET castPath9_5
castWalk0_0 db "build\hall-expansion\cast-walk-0-0.bmp",0
castWalk0_1 db "build\hall-expansion\cast-walk-0-1.bmp",0
castWalk0_2 db "build\hall-expansion\cast-walk-0-2.bmp",0
castWalk0_3 db "build\hall-expansion\cast-walk-0-3.bmp",0
castWalk0_4 db "build\hall-expansion\cast-walk-0-4.bmp",0
castWalk0_5 db "build\hall-expansion\cast-walk-0-5.bmp",0
castWalk0_6 db "build\hall-expansion\cast-walk-0-6.bmp",0
castWalk0_7 db "build\hall-expansion\cast-walk-0-7.bmp",0
castWalk1_0 db "build\hall-expansion\cast-walk-1-0.bmp",0
castWalk1_1 db "build\hall-expansion\cast-walk-1-1.bmp",0
castWalk1_2 db "build\hall-expansion\cast-walk-1-2.bmp",0
castWalk1_3 db "build\hall-expansion\cast-walk-1-3.bmp",0
castWalk1_4 db "build\hall-expansion\cast-walk-1-4.bmp",0
castWalk1_5 db "build\hall-expansion\cast-walk-1-5.bmp",0
castWalk1_6 db "build\hall-expansion\cast-walk-1-6.bmp",0
castWalk1_7 db "build\hall-expansion\cast-walk-1-7.bmp",0
castWalk2_0 db "build\hall-expansion\cast-walk-2-0.bmp",0
castWalk2_1 db "build\hall-expansion\cast-walk-2-1.bmp",0
castWalk2_2 db "build\hall-expansion\cast-walk-2-2.bmp",0
castWalk2_3 db "build\hall-expansion\cast-walk-2-3.bmp",0
castWalk2_4 db "build\hall-expansion\cast-walk-2-4.bmp",0
castWalk2_5 db "build\hall-expansion\cast-walk-2-5.bmp",0
castWalk2_6 db "build\hall-expansion\cast-walk-2-6.bmp",0
castWalk2_7 db "build\hall-expansion\cast-walk-2-7.bmp",0
castWalk3_0 db "build\hall-expansion\cast-walk-3-0.bmp",0
castWalk3_1 db "build\hall-expansion\cast-walk-3-1.bmp",0
castWalk3_2 db "build\hall-expansion\cast-walk-3-2.bmp",0
castWalk3_3 db "build\hall-expansion\cast-walk-3-3.bmp",0
castWalk3_4 db "build\hall-expansion\cast-walk-3-4.bmp",0
castWalk3_5 db "build\hall-expansion\cast-walk-3-5.bmp",0
castWalk3_6 db "build\hall-expansion\cast-walk-3-6.bmp",0
castWalk3_7 db "build\hall-expansion\cast-walk-3-7.bmp",0
castWalk4_0 db "build\hall-expansion\cast-walk-4-0.bmp",0
castWalk4_1 db "build\hall-expansion\cast-walk-4-1.bmp",0
castWalk4_2 db "build\hall-expansion\cast-walk-4-2.bmp",0
castWalk4_3 db "build\hall-expansion\cast-walk-4-3.bmp",0
castWalk4_4 db "build\hall-expansion\cast-walk-4-4.bmp",0
castWalk4_5 db "build\hall-expansion\cast-walk-4-5.bmp",0
castWalk4_6 db "build\hall-expansion\cast-walk-4-6.bmp",0
castWalk4_7 db "build\hall-expansion\cast-walk-4-7.bmp",0
castWalk5_0 db "build\hall-expansion\cast-walk-5-0.bmp",0
castWalk5_1 db "build\hall-expansion\cast-walk-5-1.bmp",0
castWalk5_2 db "build\hall-expansion\cast-walk-5-2.bmp",0
castWalk5_3 db "build\hall-expansion\cast-walk-5-3.bmp",0
castWalk5_4 db "build\hall-expansion\cast-walk-5-4.bmp",0
castWalk5_5 db "build\hall-expansion\cast-walk-5-5.bmp",0
castWalk5_6 db "build\hall-expansion\cast-walk-5-6.bmp",0
castWalk5_7 db "build\hall-expansion\cast-walk-5-7.bmp",0
castWalk6_0 db "build\hall-expansion\cast-walk-6-0.bmp",0
castWalk6_1 db "build\hall-expansion\cast-walk-6-1.bmp",0
castWalk6_2 db "build\hall-expansion\cast-walk-6-2.bmp",0
castWalk6_3 db "build\hall-expansion\cast-walk-6-3.bmp",0
castWalk6_4 db "build\hall-expansion\cast-walk-6-4.bmp",0
castWalk6_5 db "build\hall-expansion\cast-walk-6-5.bmp",0
castWalk6_6 db "build\hall-expansion\cast-walk-6-6.bmp",0
castWalk6_7 db "build\hall-expansion\cast-walk-6-7.bmp",0
castWalk7_0 db "build\hall-expansion\cast-walk-7-0.bmp",0
castWalk7_1 db "build\hall-expansion\cast-walk-7-1.bmp",0
castWalk7_2 db "build\hall-expansion\cast-walk-7-2.bmp",0
castWalk7_3 db "build\hall-expansion\cast-walk-7-3.bmp",0
castWalk7_4 db "build\hall-expansion\cast-walk-7-4.bmp",0
castWalk7_5 db "build\hall-expansion\cast-walk-7-5.bmp",0
castWalk7_6 db "build\hall-expansion\cast-walk-7-6.bmp",0
castWalk7_7 db "build\hall-expansion\cast-walk-7-7.bmp",0
castWalk8_0 db "build\hall-expansion\cast-walk-8-0.bmp",0
castWalk8_1 db "build\hall-expansion\cast-walk-8-1.bmp",0
castWalk8_2 db "build\hall-expansion\cast-walk-8-2.bmp",0
castWalk8_3 db "build\hall-expansion\cast-walk-8-3.bmp",0
castWalk8_4 db "build\hall-expansion\cast-walk-8-4.bmp",0
castWalk8_5 db "build\hall-expansion\cast-walk-8-5.bmp",0
castWalk8_6 db "build\hall-expansion\cast-walk-8-6.bmp",0
castWalk8_7 db "build\hall-expansion\cast-walk-8-7.bmp",0
castWalk9_0 db "build\hall-expansion\cast-walk-9-0.bmp",0
castWalk9_1 db "build\hall-expansion\cast-walk-9-1.bmp",0
castWalk9_2 db "build\hall-expansion\cast-walk-9-2.bmp",0
castWalk9_3 db "build\hall-expansion\cast-walk-9-3.bmp",0
castWalk9_4 db "build\hall-expansion\cast-walk-9-4.bmp",0
castWalk9_5 db "build\hall-expansion\cast-walk-9-5.bmp",0
castWalk9_6 db "build\hall-expansion\cast-walk-9-6.bmp",0
castWalk9_7 db "build\hall-expansion\cast-walk-9-7.bmp",0
castWalkPaths LABEL DWORD
dd OFFSET castWalk0_0,OFFSET castWalk0_1,OFFSET castWalk0_2,OFFSET castWalk0_3,OFFSET castWalk0_4,OFFSET castWalk0_5,OFFSET castWalk0_6,OFFSET castWalk0_7
dd OFFSET castWalk1_0,OFFSET castWalk1_1,OFFSET castWalk1_2,OFFSET castWalk1_3,OFFSET castWalk1_4,OFFSET castWalk1_5,OFFSET castWalk1_6,OFFSET castWalk1_7
dd OFFSET castWalk2_0,OFFSET castWalk2_1,OFFSET castWalk2_2,OFFSET castWalk2_3,OFFSET castWalk2_4,OFFSET castWalk2_5,OFFSET castWalk2_6,OFFSET castWalk2_7
dd OFFSET castWalk3_0,OFFSET castWalk3_1,OFFSET castWalk3_2,OFFSET castWalk3_3,OFFSET castWalk3_4,OFFSET castWalk3_5,OFFSET castWalk3_6,OFFSET castWalk3_7
dd OFFSET castWalk4_0,OFFSET castWalk4_1,OFFSET castWalk4_2,OFFSET castWalk4_3,OFFSET castWalk4_4,OFFSET castWalk4_5,OFFSET castWalk4_6,OFFSET castWalk4_7
dd OFFSET castWalk5_0,OFFSET castWalk5_1,OFFSET castWalk5_2,OFFSET castWalk5_3,OFFSET castWalk5_4,OFFSET castWalk5_5,OFFSET castWalk5_6,OFFSET castWalk5_7
dd OFFSET castWalk6_0,OFFSET castWalk6_1,OFFSET castWalk6_2,OFFSET castWalk6_3,OFFSET castWalk6_4,OFFSET castWalk6_5,OFFSET castWalk6_6,OFFSET castWalk6_7
dd OFFSET castWalk7_0,OFFSET castWalk7_1,OFFSET castWalk7_2,OFFSET castWalk7_3,OFFSET castWalk7_4,OFFSET castWalk7_5,OFFSET castWalk7_6,OFFSET castWalk7_7
dd OFFSET castWalk8_0,OFFSET castWalk8_1,OFFSET castWalk8_2,OFFSET castWalk8_3,OFFSET castWalk8_4,OFFSET castWalk8_5,OFFSET castWalk8_6,OFFSET castWalk8_7
dd OFFSET castWalk9_0,OFFSET castWalk9_1,OFFSET castWalk9_2,OFFSET castWalk9_3,OFFSET castWalk9_4,OFFSET castWalk9_5,OFFSET castWalk9_6,OFFSET castWalk9_7
.code
CharacterCastNativeTests PROC uses ebx esi edi
local phase:DWORD,time:DWORD,vx:DWORD,vy:DWORD
mov expansionStage,130
call LoadCharacterCast3D
cmp characterCast3D.frames,CAST_COUNT*CAST_STRIDE
jne cast_test_fail
cmp npcGuestArt3D.pixels,0
jne cast_test_fail
cmp npcWalkArt3D.pixels,0
jne cast_test_fail
cmp npcWalkLeftArt3D.pixels,0
jne cast_test_fail
cmp bwMotionArt3D.pixels,0
jne cast_test_fail
cmp bwSeatedArt3D.pixels,0
jne cast_test_fail
mov playerX,16*FP_1
mov playerY,20*FP_1
mov playerAngle,384
mov viewEye3D,HALL_STANDING_EYE
mov viewHorizon3D,HALF_H
call UpdateCamera3D
xor esi,esi
mov phase,0
cast_test_identity:
xor edi,edi
cast_test_action:
invoke ConfigureCharacter3D,OFFSET castTestObject,esi,edi,99999,FP_1,0
mov eax,castTestObject.frame
xor edx,edx
mov ecx,CAST_STRIDE
div ecx
cmp eax,esi
jne cast_test_fail
cmp castTestObject.asset,OFFSET characterCast3D
jne cast_test_fail
cmp castTestObject.worldH,CAST_HEIGHT
jne cast_test_fail
inc edi
cmp edi,12
jb cast_test_action
xor edi,edi
cast_test_picture:
invoke DrawBox,0,0,SCREEN_W,SCREEN_H,001C2228h
lea edi,zBuffer
mov eax,7FFFFFFFh
mov ecx,SCREEN_W
rep stosd
lea edi,cityDepthBuffer3D
mov ecx,SCREEN_SIZE
rep stosd
mov edi,phase
mov eax,castTestActions[edi*4]
mov time,eax
mov vx,0
mov vy,0
cmp edi,1
jne @F
mov vy,-FP_1
@@:
cmp edi,2
jne @F
mov vx,FP_1
@@:
invoke ConfigureCharacter3D,OFFSET castTestObject,esi,time,castTestClocks[edi*4],vx,vy
invoke DrawCityObject3D,OFFSET castTestObject,0
imul ebx,esi,6
add ebx,phase
invoke ExpansionSnapshot,castTestPaths[ebx*4]
inc phase
cmp phase,6
jb cast_test_picture
mov phase,0
cast_test_walking:
invoke DrawBox,0,0,SCREEN_W,SCREEN_H,001C2228h
lea edi,zBuffer
mov eax,7FFFFFFFh
mov ecx,SCREEN_W
rep stosd
lea edi,cityDepthBuffer3D
mov ecx,SCREEN_SIZE
rep stosd
imul eax,phase,FP_1*3/32
invoke ConfigureCharacter3D,OFFSET castTestObject,esi,CAST_WALK,eax,FP_1,0
invoke DrawCityObject3D,OFFSET castTestObject,0
imul ebx,esi,8
add ebx,phase
invoke ExpansionSnapshot,castWalkPaths[ebx*4]
inc phase
cmp phase,8
jb cast_test_walking
inc esi
mov phase,0
cmp esi,CAST_COUNT
jb cast_test_identity
call RoofCharacterScaleNativeTests
ret
cast_test_fail:
invoke ExitProcess,expansionStage
ret
CharacterCastNativeTests ENDP
include tools/tests/roof_character_scale_test.inc