| 6484 | } |
| 6485 | |
| 6486 | void cFodder::Sprite_Handle_Helicopter_Enemy(sSprite* pSprite) { |
| 6487 | int16 Data0; |
| 6488 | int16 Data4; |
| 6489 | int16 Data8; |
| 6490 | int16 DataC; |
| 6491 | int16 Data10, Data14, Data1C; |
| 6492 | sSprite* Data24 = 0, *Data30 = 0; |
| 6493 | |
| 6494 | // Bullets don't hit choppers |
| 6495 | if (pSprite->field_38 == eSprite_Anim_Hit) |
| 6496 | pSprite->field_38 = eSprite_Anim_None; |
| 6497 | |
| 6498 | if (pSprite->field_38) { |
| 6499 | mSprite_Helicopter_DestroyLight = -1; |
| 6500 | |
| 6501 | pSprite->field_22 = eSprite_PersonType_AI; |
| 6502 | Sprite_Handle_Helicopter(pSprite); |
| 6503 | pSprite->field_22 = eSprite_PersonType_AI; |
| 6504 | |
| 6505 | mSprite_Helicopter_DestroyLight = 0; |
| 6506 | goto loc_25288; |
| 6507 | } |
| 6508 | |
| 6509 | if (!pSprite->field_43) { |
| 6510 | pSprite->field_46 = (pSprite->field_0 << 16) | (pSprite->field_4 & 0xFFFF); |
| 6511 | pSprite->field_43 = -1; |
| 6512 | } |
| 6513 | |
| 6514 | if (pSprite->field_4C) |
| 6515 | --pSprite->field_4C; |
| 6516 | |
| 6517 | if (pSprite->field_20) |
| 6518 | goto loc_250D2; |
| 6519 | |
| 6520 | Data0 = pSprite->field_0; |
| 6521 | Data4 = pSprite->field_4; |
| 6522 | Data8 = ((int64)pSprite->field_46) >> 16; |
| 6523 | DataC = ((int64)pSprite->field_46) & 0xFFFF; |
| 6524 | |
| 6525 | Map_Get_Distance_BetweenPoints_Within_Window(Data0, Data4, Data8, DataC); |
| 6526 | if (Data0 > 0x14) |
| 6527 | goto loc_250D2; |
| 6528 | |
| 6529 | Data8 = pSprite->field_62; |
| 6530 | if ((uint16)Data8 >= 0x1F4) { |
| 6531 | if (pSprite->field_18 == eSprite_Helicopter_Homing_Enemy2) |
| 6532 | if (mHelicopterCall_X < 0) |
| 6533 | goto loc_24FF1; |
| 6534 | |
| 6535 | if (!(tool_RandomGet() & 1)) |
| 6536 | goto loc_2500F; |
| 6537 | } |
| 6538 | |
| 6539 | loc_24FF1:; |
| 6540 | if (mVersionCurrent->isDemo()) { |
| 6541 | Data8 += 0x20; |
| 6542 | if (Data8) |
| 6543 | pSprite->field_62 = Data8; |