| 10390 | } |
| 10391 | |
| 10392 | void 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) |
nothing calls this directly
no test coverage detected