KAZIK/src_graphics/bowling_performance.inc
Artvasil09 7e081beeca feat: enhance bowling physics, audio, ball weight selection, and visitor cast routines
- Bowling feel: impulse contact solver, string pinsetter cycle, in-world lengthwise return rack and visible ball return lift

- Ball weights: 4/5/6/7 kg selection with equal launch work physics, momentum balance, and projected picking

- Audio: dedicated MCI channels with 7 synthesized waveaudio cues (release, rolling, impacts, applause, pinsetter, return)

- First-person animations: 33-frame player underarm throw/follow-through sequence (player-underarm-v2)

- Visitors: 10 persistent shared cast identities with exclusive reservations, activity transitions, and chair sit/rise animations

- Tests & verification: comprehensive native regression test suites and updated documentation

- Synchronize binaries and update launcher hash to 536E23BED4055562BC63871826FF44FFED037923A9BE8E0F591131DB4FBD104B
2026-11-04 18:44:12 +03:00

120 lines
2.4 KiB
PHP

DrawBowlingPlayerHand3D PROC uses ebx esi
local offsetY:DWORD
mov offsetY,120
cmp bpHandArt3D.pixels,0
je bp_hand_done
cmp bpScoreOpen3D,0
jne bp_hand_done
mov esi,bpLane3D
cmp bwTurn3D[esi*4],0
jne bp_hand_done
xor ebx,ebx
cmp bpState3D,BP_RETURN
jne @F
cmp bpAfterReturn3D,BP_FINISHED
je bp_hand_done
mov eax,bpTime3D
sub eax,2100
jle bp_hand_done
invoke BowlingPinsetterEase3D,eax,700
neg eax
add eax,FP_1
imul eax,300
sar eax,16
add eax,120
mov offsetY,eax
jmp bp_hand_draw
@@:
cmp bpState3D,BP_DIRECTION
je bp_hand_draw
cmp bpState3D,BP_POWER
je bp_hand_draw
cmp bpState3D,BP_RELEASE
jne bp_hand_follow
mov eax,bpTime3D
xor edx,edx
mov ecx,33
div ecx
cmp eax,20
jbe @F
mov eax,20
@@:
mov ebx,eax
jmp bp_hand_draw
bp_hand_follow:
cmp bpState3D,BP_ROLL
jne bp_hand_done
cmp bpTime3D,396
jae bp_hand_done
mov eax,bpTime3D
xor edx,edx
mov ecx,33
div ecx
add eax,21
cmp eax,32
jbe @F
mov eax,32
@@:
mov ebx,eax
bp_hand_draw:
mov eax,bpShotWeightKg3D
cmp bpState3D,BP_DIRECTION
je bp_hand_selected
cmp bpState3D,BP_POWER
jne @F
bp_hand_selected:
mov eax,bpWeightKg3D
@@:
invoke BowlingTintHand3D,ebx,eax
invoke DrawAnimSprite3D,OFFSET bpTintedHand3D,0,320,offsetY,320,320
bp_hand_done:
ret
DrawBowlingPlayerHand3D ENDP
RenderBowlingReactions3D PROC uses ebx esi edi
local phase:DWORD
mov phase,CAST_TALK
cmp bpReactionTime3D,0
je @F
mov eax,bpReaction3D
mov phase,eax
@@:
xor esi,esi
bp_crowd_person:
lea ebx,[esi+6]
test esi,esi
jnz bp_crowd_draw
mov edi,bpLane3D
cmp bwTurn3D[edi*4],1
jne bp_crowd_draw
cmp bpState3D,BP_SETTLE
je bp_crowd_draw
cmp bpState3D,BP_FINISHED
jne bp_crowd_next
bp_crowd_draw:
invoke ConfigureCharacter3D,OFFSET bwSmallActor3D,ebx,phase,animationClock3D,0,0
mov eax,bpCentre3D
mov ecx,FP_1*16/10
test esi,esi
jnz @F
mov ecx,FP_1*9/10
@@:
cmp esi,1
jne @F
neg ecx
@@:
add eax,ecx
mov bwSmallActor3D.posX,eax
mov eax,FP_1*218/10
test esi,esi
jnz @F
mov eax,23*FP_1
@@:
mov bwSmallActor3D.posY,eax
invoke DrawCityObject3D,OFFSET bwSmallActor3D,0
bp_crowd_next:
inc esi
cmp esi,3
jb bp_crowd_person
ret
RenderBowlingReactions3D ENDP