* Decrease deviation counter for the given unit. * * @param unit The Unit to decrease counter for. * @param amount The amount to decrease. * @return True if and only if the unit lost deviation. */
| 1172 | * @return True if and only if the unit lost deviation. |
| 1173 | */ |
| 1174 | bool Unit_Deviation_Decrease(Unit *unit, uint16 amount) |
| 1175 | { |
| 1176 | const UnitInfo *ui; |
| 1177 | |
| 1178 | if (unit == NULL || unit->deviated == 0) return false; |
| 1179 | |
| 1180 | ui = &g_table_unitInfo[unit->o.type]; |
| 1181 | |
| 1182 | if (!ui->flags.isNormalUnit) return false; |
| 1183 | |
| 1184 | if (amount == 0) { |
| 1185 | amount = g_table_houseInfo[unit->o.houseID].toughness; |
| 1186 | } |
| 1187 | |
| 1188 | if (unit->deviated > amount) { |
| 1189 | unit->deviated -= amount; |
| 1190 | return false; |
| 1191 | } |
| 1192 | |
| 1193 | unit->deviated = 0; |
| 1194 | |
| 1195 | unit->o.flags.s.bulletIsBig = true; |
| 1196 | Unit_UpdateMap(2, unit); |
| 1197 | unit->o.flags.s.bulletIsBig = false; |
| 1198 | |
| 1199 | if (unit->o.houseID == g_playerHouseID) { |
| 1200 | Unit_SetAction(unit, ui->o.actionsPlayer[3]); |
| 1201 | } else { |
| 1202 | Unit_SetAction(unit, ui->actionAI); |
| 1203 | } |
| 1204 | |
| 1205 | Unit_UntargetMe(unit); |
| 1206 | unit->targetAttack = 0; |
| 1207 | unit->targetMove = 0; |
| 1208 | |
| 1209 | return true; |
| 1210 | } |
| 1211 | |
| 1212 | /** |
| 1213 | * Remove fog arount the given unit. |
no test coverage detected