| 15301 | } |
| 15302 | |
| 15303 | void cFodder::Sprite_Handle_Troop_Weapon(sSprite* pSprite) { |
| 15304 | |
| 15305 | if (pSprite->field_22 == eSprite_PersonType_Human) { |
| 15306 | |
| 15307 | // Fired Weapon? |
| 15308 | if (!pSprite->field_4A) |
| 15309 | return; |
| 15310 | |
| 15311 | // Delay before weapon fires? |
| 15312 | if (pSprite->field_4A >= 0) { |
| 15313 | |
| 15314 | pSprite->field_4A--; |
| 15315 | if (pSprite->field_4A) |
| 15316 | return; |
| 15317 | } |
| 15318 | |
| 15319 | } |
| 15320 | else { |
| 15321 | // No weapon firing? |
| 15322 | if (!pSprite->field_4A) |
| 15323 | return; |
| 15324 | |
| 15325 | if (pSprite->field_4A >= 0) { |
| 15326 | |
| 15327 | pSprite->field_4A -= 1; |
| 15328 | if (pSprite->field_4A) |
| 15329 | return; |
| 15330 | |
| 15331 | pSprite->field_4A = -1; |
| 15332 | } |
| 15333 | } |
| 15334 | |
| 15335 | // In water? no weapons |
| 15336 | if (pSprite->field_4F) |
| 15337 | return; |
| 15338 | |
| 15339 | // Are we enemy with rockets? |
| 15340 | if (pSprite->field_18 == eSprite_Enemy_Rocket) { |
| 15341 | mTroop_Weapon_Bullet_Disabled = true; |
| 15342 | mTroop_Weapon_Grenade_Disabled = true; |
| 15343 | mTroop_Weapon_Rocket_Disabled = true; |
| 15344 | |
| 15345 | // Only fire is unit is more than 24 away |
| 15346 | if (mSprite_Find_Distance > 0x18) |
| 15347 | mTroop_Weapon_Rocket_Disabled = false; |
| 15348 | |
| 15349 | } |
| 15350 | else { |
| 15351 | |
| 15352 | // Enemy, after 4th map (can throw grenades) |
| 15353 | //loc_1F4B0 |
| 15354 | if (pSprite->field_18 == eSprite_Enemy) { |
| 15355 | |
| 15356 | // Retail CF didn't allow enemy troops to use grenades until mission 4 |
| 15357 | if(!(mVersionCurrent->isRetail() && mGame_Data.mMission_Number < 4)) { |
| 15358 | |
| 15359 | // Use a grenade? |
| 15360 | if (!(tool_RandomGet() & 0x1F)) { |