| 12195 | } |
| 12196 | |
| 12197 | void cFodder::Sprite_Handle_Rocket(sSprite* pSprite) { |
| 12198 | sSprite* Data24 = 0; |
| 12199 | |
| 12200 | if (pSprite->field_56) { |
| 12201 | |
| 12202 | pSprite->field_56 -= 1; |
| 12203 | if (!pSprite->field_56) { |
| 12204 | if (mVersionCurrent->isCoverDisk()) |
| 12205 | Sound_Play(pSprite, 0x10, 0x0F); |
| 12206 | else |
| 12207 | Sound_Play(pSprite, eSound_Effect_Rocket, 0x0F); |
| 12208 | |
| 12209 | } |
| 12210 | Data24 = pSprite->field_46_sprite; |
| 12211 | pSprite->field_0 = Data24->field_0; |
| 12212 | pSprite->field_2 = Data24->field_2; |
| 12213 | pSprite->field_4 = Data24->field_4; |
| 12214 | pSprite->field_6 = Data24->field_6; |
| 12215 | |
| 12216 | pSprite->field_4 += 1; |
| 12217 | pSprite->field_0 += 3; |
| 12218 | pSprite->field_8 = 0x7C; |
| 12219 | pSprite->field_A = 0; |
| 12220 | return; |
| 12221 | } |
| 12222 | |
| 12223 | pSprite->field_8 = 0xA3; |
| 12224 | int16 Data0 = pSprite->field_26; |
| 12225 | int16 Data4 = pSprite->field_28; |
| 12226 | int16 Data8 = pSprite->field_0; |
| 12227 | int16 DataC = pSprite->field_4; |
| 12228 | |
| 12229 | Map_Get_Distance_BetweenPoints_Within_Window(Data0, Data4, Data8, DataC); |
| 12230 | if (Data0 <= 7) |
| 12231 | goto loc_1B843; |
| 12232 | |
| 12233 | Data0 = pSprite->field_26; |
| 12234 | Data4 = pSprite->field_28; |
| 12235 | Sprite_Direction_Between_Points(pSprite, Data0, Data4); |
| 12236 | Sprite_Movement_Calculate(pSprite); |
| 12237 | |
| 12238 | Data0 = pSprite->field_10; |
| 12239 | Data0 >>= 5; |
| 12240 | Data0 -= 1; |
| 12241 | Data0 ^= 0x0F; |
| 12242 | Data0 &= 0x0F; |
| 12243 | pSprite->field_A = Data0; |
| 12244 | |
| 12245 | Data0 = -9; |
| 12246 | Data4 = 2; |
| 12247 | |
| 12248 | if (!Map_Terrain_Get_Type_And_Walkable(pSprite, Data0, Data4)) |
| 12249 | return; |
| 12250 | |
| 12251 | loc_1B843:; |
| 12252 | // Hit Target |
| 12253 | pSprite->field_18 = eSprite_Explosion; |
| 12254 | Sprite_Projectile_HitTarget(pSprite); |
nothing calls this directly
no test coverage detected