MCPcopy Create free account
hub / github.com/bfbbdecomp/bfbb / zParPTankSpawnBubbles

Function zParPTankSpawnBubbles

src/SB/Game/zParPTank.cpp:395–485  ·  view source on GitHub ↗

regswaps

Source from the content-addressed store, hash-verified

393
394// regswaps
395static void zParPTankSpawnBubbles(xVec3* pos, xVec3* vel, U32 count, float scale, zParPTank* zp)
396{
397 if (globals.player.ent.model == 0 || globals.player.ent.model->Mat == 0)
398 {
399 return;
400 }
401
402 if (count > zp->max_particles - zp->num_particles)
403 {
404 count = zp->max_particles - zp->num_particles;
405 }
406
407 if (count == 0)
408 {
409 return;
410 }
411
412 BubbleData* base_xp = zp == sBubblePTank ? sBubbleData : sMenuBubbleData;
413
414 RpPTankLockStruct plock;
415 RpPTankLockStruct clock;
416 RpPTankLockStruct slock;
417 RpPTankLockStruct uvlock;
418 RpPTankAtomicLock(zp->ptank, &plock, rpPTANKDFLAGPOSITION, rpPTANKLOCKWRITE);
419 if (!plock.data)
420 {
421 return;
422 }
423
424 RpPTankAtomicLock(zp->ptank, &clock, rpPTANKDFLAGCOLOR, rpPTANKLOCKWRITE);
425 if (!clock.data)
426 {
427 return;
428 }
429
430 RpPTankAtomicLock(zp->ptank, &slock, rpPTANKDFLAGSIZE, rpPTANKLOCKWRITE);
431 if (!slock.data)
432 {
433 return;
434 }
435
436 RpPTankAtomicLock(zp->ptank, &uvlock, rpPTANKDFLAGVTX2TEXCOORDS, rpPTANKLOCKWRITE);
437 if (!uvlock.data)
438 {
439 return;
440 }
441
442 U32 plock_base = (U32)plock.data;
443 U32 clock_base = (U32)clock.data;
444 U32 slock_base = (U32)slock.data;
445 U32 uvlock_base = (U32)uvlock.data;
446 xVec3* ref_pos = pos;
447 RwCamera* camera = RwCameraGetCurrentCamera();
448 if (gGameState == eGameState_Play && camera)
449 {
450 // TODO: This was probably some Renderware macro
451 ref_pos = (xVec3*)((U8*)camera->object.object.parent + 0x40);
452 }

Callers 2

Calls 3

xVec3Dist2Function · 0.85
xurandFunction · 0.85
zGameIsPausedFunction · 0.85

Tested by

no test coverage detected