254 lines
5.5 KiB
PHP
254 lines
5.5 KiB
PHP
; Native room, automatic lane simulation and full-body visitors; no AI service.
|
|
InitBowling3D PROC uses esi edi
|
|
mov bwClock3D,-1
|
|
mov bwMonitorClock3D,-1
|
|
mov bwSeat3D,0
|
|
xor esi,esi
|
|
bw_init_lane:
|
|
mov bwState3D[esi*4],0
|
|
imul eax,esi,349
|
|
mov bwTime3D[esi*4],eax
|
|
mov bwTurn3D[esi*4],0
|
|
mov bwBall3D[esi*4],0
|
|
mov bwRack3D[esi*4],1023
|
|
mov bwHit3D[esi*4],0
|
|
mov bwNewRack3D[esi*4],0
|
|
mov bwFrameDone3D[esi*4],0
|
|
inc esi
|
|
cmp esi,BW_LANES
|
|
jb bw_init_lane
|
|
lea edi,bwFrames3D
|
|
xor eax,eax
|
|
mov ecx,16
|
|
rep stosd
|
|
lea edi,bwRollCount3D
|
|
mov ecx,16
|
|
rep stosd
|
|
lea edi,bwScores3D
|
|
mov ecx,16
|
|
rep stosd
|
|
ret
|
|
InitBowling3D ENDP
|
|
|
|
LoadBowling3D PROC
|
|
cmp bwArt3D.pixels,0
|
|
jne bw_load_done
|
|
invoke LoadAnimPack3D,OFFSET bwArt3D,OFFSET bwArtPath3D
|
|
invoke ValidateCityPack3D,OFFSET bwArt3D,256,256,14
|
|
call LoadCharacterCast3D
|
|
call RefreshBowlingMonitors3D
|
|
bw_load_done:
|
|
ret
|
|
LoadBowling3D ENDP
|
|
|
|
FreeBowling3D PROC
|
|
invoke FreeAnimPack3D,OFFSET bwArt3D
|
|
invoke FreeAnimPack3D,OFFSET bwMotionArt3D
|
|
invoke FreeAnimPack3D,OFFSET bwSeatedArt3D
|
|
ret
|
|
FreeBowling3D ENDP
|
|
|
|
ResolveBowlingSurface3D PROC material:DWORD
|
|
mov eax,material
|
|
cmp eax,252
|
|
jne @F
|
|
mov eax,OFFSET bwSignPixels3D
|
|
mov ecx,128
|
|
mov edx,16
|
|
ret
|
|
@@:
|
|
cmp eax,244
|
|
jb bw_material_atlas
|
|
sub eax,244
|
|
cmp eax,7
|
|
ja bw_material_missing
|
|
shl eax,15
|
|
add eax,OFFSET bwMonitors3D
|
|
mov ecx,128
|
|
mov edx,64
|
|
ret
|
|
bw_material_atlas:
|
|
sub eax,BW_MATERIAL
|
|
cmp eax,13
|
|
ja bw_material_missing
|
|
cmp bwArt3D.pixels,0
|
|
je bw_material_missing
|
|
shl eax,18
|
|
add eax,bwArt3D.pixels
|
|
mov ecx,256
|
|
mov edx,256
|
|
ret
|
|
bw_material_missing:
|
|
xor eax,eax
|
|
ret
|
|
ResolveBowlingSurface3D ENDP
|
|
|
|
BowlingTravel3D PROC
|
|
cmp engineMode,MODE_WALK
|
|
jne bw_travel_done
|
|
cmp hallLevel3D,HALL_BOWLING
|
|
je bw_travel_out
|
|
cmp hallLevel3D,0
|
|
jne bw_travel_done
|
|
cmp playerX,3*FP_1
|
|
jb bw_travel_done
|
|
cmp playerX,7*FP_1
|
|
ja bw_travel_done
|
|
cmp playerY,FP_1*15/10
|
|
jae bw_travel_done
|
|
add playerX,12*FP_1
|
|
add playerY,29*FP_1
|
|
mov hallLevel3D,HALL_BOWLING
|
|
mov worldMap3D,OFFSET bwMap3D
|
|
mov floorTexture3D,231
|
|
call LoadBowling3D
|
|
call BowlingEye3D
|
|
ret
|
|
bw_travel_out:
|
|
cmp playerY,FP_1*305/10
|
|
jbe bw_travel_done
|
|
cmp playerX,15*FP_1
|
|
jb bw_travel_done
|
|
cmp playerX,19*FP_1
|
|
ja bw_travel_done
|
|
sub playerX,12*FP_1
|
|
sub playerY,29*FP_1
|
|
mov hallLevel3D,0
|
|
mov worldMap3D,OFFSET casinoMap
|
|
mov floorTexture3D,100
|
|
mov bwSeat3D,0
|
|
mov viewCeiling3D,FP_1*5/2
|
|
mov viewEye3D,HALL_STANDING_EYE
|
|
bw_travel_done:
|
|
ret
|
|
BowlingTravel3D ENDP
|
|
|
|
BowlingEye3D PROC
|
|
mov viewHorizon3D,HALF_H
|
|
mov viewCeiling3D,6*FP_1
|
|
mov viewEye3D,HALL_STANDING_EYE
|
|
cmp bwSeat3D,0
|
|
je @F
|
|
mov viewEye3D,FP_1*12/10
|
|
@@:
|
|
ret
|
|
BowlingEye3D ENDP
|
|
|
|
BowlingCanWalk3D PROC uses esi edi px:DWORD,py:DWORD
|
|
cmp bwSeat3D,0
|
|
jne bw_walk_block
|
|
cmp px,FP_1*12/10
|
|
jb bw_walk_block
|
|
cmp px,FP_1*308/10
|
|
ja bw_walk_block
|
|
cmp py,FP_1*12/10
|
|
jb bw_walk_block
|
|
cmp py,FP_1*308/10
|
|
ja bw_walk_block
|
|
cmp px,19*FP_1
|
|
jae bw_walk_furniture
|
|
cmp px,2*FP_1
|
|
jb bw_walk_furniture
|
|
cmp px,FP_1*173/10
|
|
ja bw_walk_furniture
|
|
cmp py,FP_1*223/10
|
|
jb bw_walk_block
|
|
bw_walk_furniture:
|
|
lea esi,bwCollision3D
|
|
mov edi,BOWL_COLLISION_COUNT
|
|
bw_walk_prop:
|
|
mov eax,px
|
|
cmp eax,[esi]
|
|
jb bw_walk_next
|
|
cmp eax,[esi+4]
|
|
ja bw_walk_next
|
|
mov eax,py
|
|
cmp eax,[esi+8]
|
|
jb bw_walk_next
|
|
cmp eax,[esi+12]
|
|
jbe bw_walk_block
|
|
bw_walk_next:
|
|
add esi,16
|
|
dec edi
|
|
jnz bw_walk_prop
|
|
mov eax,1
|
|
ret
|
|
bw_walk_block:
|
|
xor eax,eax
|
|
ret
|
|
BowlingCanWalk3D ENDP
|
|
|
|
CheckBowlingInteractions3D PROC uses esi edi
|
|
cmp bwSeat3D,0
|
|
je bw_check_seats
|
|
mov interactTargetId,INTERACT_BOWL_SEAT
|
|
mov interactPromptPtr,OFFSET bwStandPrompt3D
|
|
ret
|
|
bw_check_seats:
|
|
lea esi,bwSeats3D
|
|
xor edi,edi
|
|
bw_check_seat:
|
|
cmp edi,4
|
|
jb bw_check_available_seat
|
|
cmp edi,9
|
|
jne bw_check_next_seat
|
|
bw_check_available_seat:
|
|
mov interactTargetId,0
|
|
invoke HallTarget3D,[esi],[esi+4],INTERACT_BOWL_SEAT,OFFSET bwSeatPrompt3D
|
|
cmp interactTargetId,INTERACT_BOWL_SEAT
|
|
jne @F
|
|
mov bwSeatTarget3D,edi
|
|
ret
|
|
@@:
|
|
bw_check_next_seat:
|
|
add esi,12
|
|
inc edi
|
|
cmp edi,BOWL_SEAT_COUNT
|
|
jb bw_check_seat
|
|
invoke HallTarget3D,27*FP_1,FP_1*59/10,INTERACT_BAR,OFFSET bwBarName3D
|
|
ret
|
|
CheckBowlingInteractions3D ENDP
|
|
|
|
TryBowlingInteraction3D PROC uses esi
|
|
cmp hallLevel3D,HALL_BOWLING
|
|
jne bw_try_none
|
|
cmp interactTargetId,INTERACT_BOWL_SEAT
|
|
jne bw_try_none
|
|
cmp bwSeat3D,0
|
|
jne bw_try_stand
|
|
mov eax,playerX
|
|
mov bwReturnX3D,eax
|
|
mov eax,playerY
|
|
mov bwReturnY3D,eax
|
|
mov eax,playerAngle
|
|
mov bwReturnAngle3D,eax
|
|
mov esi,bwSeatTarget3D
|
|
imul esi,12
|
|
mov eax,bwSeats3D[esi]
|
|
mov playerX,eax
|
|
mov eax,bwSeats3D[esi+4]
|
|
mov playerY,eax
|
|
mov eax,bwSeats3D[esi+8]
|
|
mov playerAngle,eax
|
|
mov bwSeat3D,1
|
|
jmp bw_try_handled
|
|
bw_try_stand:
|
|
mov eax,bwReturnX3D
|
|
mov playerX,eax
|
|
mov eax,bwReturnY3D
|
|
mov playerY,eax
|
|
mov eax,bwReturnAngle3D
|
|
mov playerAngle,eax
|
|
mov bwSeat3D,0
|
|
bw_try_handled:
|
|
call BowlingEye3D
|
|
call ClearKeys3D
|
|
mov eax,1
|
|
ret
|
|
bw_try_none:
|
|
xor eax,eax
|
|
ret
|
|
TryBowlingInteraction3D ENDP
|
|
|
|
include src_graphics\bowling_simulation.inc
|
|
include src_graphics\bowling_render.inc
|