MCPcopy Create free account
hub / github.com/OpenFodder/openfodder / Sprite_Handle_Player

Method Sprite_Handle_Player

Source/Fodder.cpp:10392–10755  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

10390}
10391
10392void cFodder::Sprite_Handle_Player(sSprite *pSprite) {
10393 int16 Data0, Data4, eax;
10394 sSprite* Data28 = 0;
10395
10396 // player soldier in vehicle?
10397 if (pSprite->field_6E) {
10398 Sprite_Handle_Player_InVehicle(pSprite);
10399 return;
10400 }
10401
10402 // If player is invincible
10403 if (pSprite->field_75 & eSprite_Flag_Invincibility) {
10404
10405 // And dying
10406 if (pSprite->field_38 <= eSprite_Anim_Slide1)
10407 pSprite->field_38 = eSprite_Anim_None;
10408
10409 // No longer Sinking
10410 pSprite->field_5B = 0;
10411
10412 // Unknown
10413 pSprite->field_64 = 0;
10414 }
10415
10416 if (Sprite_Handle_Soldier_Animation(pSprite))
10417 return;
10418
10419 // Animation running?
10420 if (pSprite->field_38)
10421 return;
10422
10423 if (Sprite_Handle_Player_MissionOver(pSprite))
10424 return;
10425
10426 //loc_18E8D
10427 Sprite_Handle_Player_Enter_Vehicle(pSprite);
10428 mSprite_FaceWeaponTarget = 0;
10429
10430 word_3AA1D = word_3BED5[pSprite->field_32];
10431 //seg004:0183
10432
10433 if (mSquad_Join_TargetSquad[pSprite->field_32] < 0 && pSprite->field_32 != mSquad_Selected) {
10434 //loc_18F12
10435 mSprite_FaceWeaponTarget = -1;
10436
10437 Data28 = &mSprites[pSprite->field_5E];
10438
10439 // The original engine checked 1 sprite per cycle, this is problematic
10440 // with max sprites gets bigger, especially at 100,000. So we check every sprite
10441 // every cycle, if not using the original parameters.
10442 if (!mParams->isOriginalSpriteMax()) {
10443 bool looped = false;
10444
10445 while (Data28->field_0 == -32768) {
10446 ++pSprite->field_5E;
10447 if (pSprite->field_5E >= (mParams->mSpritesMax - 2)) {
10448 pSprite->field_5E = 0;
10449 if (looped)

Callers

nothing calls this directly

Calls 1

isOriginalSpriteMaxMethod · 0.80

Tested by

no test coverage detected