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

Method Sprite_Handle_Rocket

Source/Fodder.cpp:12197–12258  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

12195}
12196
12197void 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
12251loc_1B843:;
12252 // Hit Target
12253 pSprite->field_18 = eSprite_Explosion;
12254 Sprite_Projectile_HitTarget(pSprite);

Callers

nothing calls this directly

Calls 1

isCoverDiskMethod · 0.80

Tested by

no test coverage detected