| 17017 | } |
| 17018 | |
| 17019 | int16 cFodder::Sprite_Create_Bullet(sSprite* pSprite) { |
| 17020 | int16 Data0 = 1, Data8, Data4; |
| 17021 | sSprite* Data2C = 0, *Data30 = 0; |
| 17022 | |
| 17023 | if (mPhase_Completed_Timer) |
| 17024 | return -1; |
| 17025 | |
| 17026 | if (!pSprite->field_2E) |
| 17027 | return -1; |
| 17028 | |
| 17029 | if (pSprite == mSquad_Leader) |
| 17030 | if (pSprite->field_54 == 1) |
| 17031 | return -1; |
| 17032 | |
| 17033 | if (Sprite_Get_Free_Max42(Data0, Data2C, Data30)) |
| 17034 | return -1; |
| 17035 | |
| 17036 | if (mSprite_Projectile_Counters[2] == 0x14) |
| 17037 | return -1; |
| 17038 | |
| 17039 | ++mSprite_Projectile_Counters[2]; |
| 17040 | pSprite->field_54 = 2; |
| 17041 | pSprite->field_5A = -1; |
| 17042 | pSprite->field_57 = 8; |
| 17043 | Data2C->field_0 = pSprite->field_0; |
| 17044 | Data2C->field_2 = pSprite->field_2; |
| 17045 | Data2C->field_4 = pSprite->field_4; |
| 17046 | Data2C->field_6 = pSprite->field_6; |
| 17047 | Data2C->field_8 = 0x9D; |
| 17048 | //seg005:1023 |
| 17049 | Data0 = pSprite->field_3C; |
| 17050 | Data0 >>= 1; |
| 17051 | Data0 &= 0x07; |
| 17052 | Data2C->field_A = Data0; |
| 17053 | Data2C->field_12 = 9; |
| 17054 | |
| 17055 | if (pSprite->field_18 != eSprite_Player) { |
| 17056 | |
| 17057 | Data0 = pSprite->field_62; |
| 17058 | Data0 >>= 3; |
| 17059 | Data0 += 8; |
| 17060 | if (Data0 > 0x10) |
| 17061 | Data0 = 0x10; |
| 17062 | Data2C->field_12 = Data0; |
| 17063 | } |
| 17064 | else { |
| 17065 | |
| 17066 | Data2C->field_5E_SoldierAllocated = pSprite->field_46_mission_troop; |
| 17067 | Data2C->field_5D = -1; |
| 17068 | |
| 17069 | // Bullet Travel time |
| 17070 | Data0 = mSprite_Weapon_Data.mAliveTime; |
| 17071 | Data0 += mSprite_Bullet_Time_Modifier; |
| 17072 | Data2C->field_12 = Data0; |
| 17073 | } |
| 17074 | |
| 17075 | Data2C->field_18 = eSprite_Bullet; |
| 17076 | Data2C->field_1E_Big = pSprite->field_1E_Big; |
nothing calls this directly
no outgoing calls
no test coverage detected