| 13655 | } |
| 13656 | |
| 13657 | void cFodder::Sprite_Handle_Cannon(sSprite* pSprite) { |
| 13658 | int16 Data0, Data4, Data8, DataC, Data1C; |
| 13659 | ++pSprite->field_64; |
| 13660 | |
| 13661 | if (!pSprite->field_12) |
| 13662 | goto loc_1D65C; |
| 13663 | |
| 13664 | pSprite->field_12 -= 1; |
| 13665 | pSprite->field_3A++; |
| 13666 | |
| 13667 | if (pSprite->field_44) |
| 13668 | goto loc_1D5B3; |
| 13669 | |
| 13670 | Sprite_XY_Store(pSprite); |
| 13671 | Data1C = pSprite->field_10; |
| 13672 | |
| 13673 | Sprite_Movement_Calculate(pSprite); |
| 13674 | |
| 13675 | if (mSprite_Bullet_Destroy) |
| 13676 | goto loc_1D6CA; |
| 13677 | |
| 13678 | Data0 = pSprite->field_0; |
| 13679 | Data4 = pSprite->field_4; |
| 13680 | Data8 = pSprite->field_2E; |
| 13681 | DataC = pSprite->field_30; |
| 13682 | |
| 13683 | Map_Get_Distance_BetweenPoints_Within_Window(Data0, Data4, Data8, DataC); |
| 13684 | |
| 13685 | Data4 = pSprite->field_36; |
| 13686 | Data4 >>= 3; |
| 13687 | |
| 13688 | if (Data0 > Data4) |
| 13689 | goto loc_1D5CB; |
| 13690 | |
| 13691 | pSprite->field_2C = eSprite_Draw_Second; |
| 13692 | pSprite->field_0 = pSprite->field_2E; |
| 13693 | pSprite->field_4 = pSprite->field_30; |
| 13694 | pSprite->field_44 = -1; |
| 13695 | goto loc_1D5CB; |
| 13696 | loc_1D5B3:; |
| 13697 | pSprite->field_2C = eSprite_Draw_First; |
| 13698 | Sprite_Movement_Calculate(pSprite); |
| 13699 | |
| 13700 | if (mSprite_Bullet_Destroy) |
| 13701 | goto loc_1D6CA; |
| 13702 | |
| 13703 | loc_1D5CB:; |
| 13704 | if (pSprite->field_64 > 3) { |
| 13705 | Data0 = -9; |
| 13706 | Data4 = 0; |
| 13707 | if (Map_Terrain_Get_Type_And_Walkable(pSprite, Data0, Data4)) |
| 13708 | goto loc_1D65C; |
| 13709 | } |
| 13710 | |
| 13711 | if (!Sprite_Projectile_Collision_Check(pSprite)) |
| 13712 | return; |
| 13713 | |
| 13714 | if (mSprites_Found_Count == 1) |
nothing calls this directly
no outgoing calls
no test coverage detected