Line 245: |
Line 245: |
| end | | end |
| | | |
− | function ShipCapabilities:_attack_power_cap(attack_power, cap)
| + | -- Basic attack power for shelling and carrier shelling. |
− | --if attack_power > cap then
| |
− | -- return math.floor(cap + math.sqrt(attack_power - cap))
| |
− | --end
| |
− | return math.floor(attack_power)
| |
− | end
| |
− | | |
| function ShipCapabilities:day_battle() | | function ShipCapabilities:day_battle() |
| if not self:_is_submarine() then | | if not self:_is_submarine() then |
Line 270: |
Line 264: |
| end | | end |
| end | | end |
− | return 1, self:_attack_power_cap(firepower + 5, 150) | + | return 1, 5 + firepower |
| end | | end |
| else | | else |
Line 301: |
Line 295: |
| end | | end |
| if has_planes then | | if has_planes then |
− | return is_installation and 3 or 2, self:_attack_power_cap(1.5 * (firepower + torpedo) + bombing * 2 + 55, 150) | + | return is_installation and 3 or 2, 55 + math.floor(1.5 * (firepower + torpedo + math.floor(1.3 * bombing))) |
| end | | end |
| end | | end |
Line 311: |
Line 305: |
| function ShipCapabilities:format_day_battle(mode, attack_power) | | function ShipCapabilities:format_day_battle(mode, attack_power) |
| if mode then | | if mode then |
− | return format{self._attack_template, mode = self._day_battle_modes[mode], attack_power = attack_power} | + | return format{self._attack_template, mode = self._day_battle_modes[mode], attack_power = math.floor(attack_power)} |
| elseif mode == false then | | elseif mode == false then |
| return "No Action" | | return "No Action" |
Line 318: |
Line 312: |
| end | | end |
| | | |
| + | -- Basic attack power for closing torpedo. |
| function ShipCapabilities:closing_torpedo() | | function ShipCapabilities:closing_torpedo() |
| local torpedo = self._ship:torpedo_leveled() | | local torpedo = self._ship:torpedo_leveled() |
Line 330: |
Line 325: |
| end | | end |
| end | | end |
− | return self:_attack_power_cap(torpedo + 5, 150) | + | return 5 + torpedo |
| end | | end |
| return false | | return false |
Line 337: |
Line 332: |
| function ShipCapabilities:format_torpedo(attack_power) | | function ShipCapabilities:format_torpedo(attack_power) |
| if attack_power then | | if attack_power then |
− | return tostring(attack_power) | + | return tostring(math.floor(attack_power)) |
| end | | end |
| return "No" | | return "No" |
Line 344: |
Line 339: |
| ShipCapabilities.format_closing_torpedo = ShipCapabilities.format_torpedo | | ShipCapabilities.format_closing_torpedo = ShipCapabilities.format_torpedo |
| | | |
| + | -- Detect possible day time special attack modifiers (post-cap). |
| function ShipCapabilities:artillery_spotting() | | function ShipCapabilities:artillery_spotting() |
| local total_space = self._ship:total_space() | | local total_space = self._ship:total_space() |
Line 393: |
Line 389: |
| end | | end |
| | | |
| + | -- Basic attack power for night battle carrier shelling. |
| + | -- Or basic attack power for night battle attack * detected night special attack modifier (pre-cap). |
| function ShipCapabilities:night_battle() | | function ShipCapabilities:night_battle() |
| local main_guns, secondary_guns, torpedoes, has_planes, firepower, torpedo = 0, 0, 0, false, self._ship:firepower_leveled(), self._ship:torpedo_leveled() | | local main_guns, secondary_guns, torpedoes, has_planes, firepower, torpedo = 0, 0, 0, false, self._ship:firepower_leveled(), self._ship:torpedo_leveled() |
Line 426: |
Line 424: |
| if self:_is_carrier() then | | if self:_is_carrier() then |
| if has_planes and self._ship:night_bombing() then | | if has_planes and self._ship:night_bombing() then |
− | return 8, self:_attack_power_cap(firepower + torpedo, 300) | + | return 8, firepower + torpedo |
| end | | end |
| return false | | return false |
| else | | else |
| if torpedoes >= 2 and torpedo > 0 then | | if torpedoes >= 2 and torpedo > 0 then |
− | return 7, self:_attack_power_cap((firepower + torpedo) * 1.5, 300) | + | return 7, (firepower + torpedo) * 1.5 |
| elseif main_guns >= 3 and firepower > 0 then | | elseif main_guns >= 3 and firepower > 0 then |
− | return 4, self:_attack_power_cap((firepower + torpedo) * 2, 300) | + | return 4, (firepower + torpedo) * 2 |
| elseif main_guns >= 2 and secondary_guns >= 1 and firepower > 0 then | | elseif main_guns >= 2 and secondary_guns >= 1 and firepower > 0 then |
− | return 5, self:_attack_power_cap((firepower + torpedo) * 1.75, 300) | + | return 5, (firepower + torpedo) * 1.75 |
| elseif main_guns >= 1 and torpedoes == 1 and firepower > 0 and torpedo > 0 then | | elseif main_guns >= 1 and torpedoes == 1 and firepower > 0 and torpedo > 0 then |
− | return 6, self:_attack_power_cap((firepower + torpedo) * 1.3, 300) | + | return 6, (firepower + torpedo) * 1.3 |
| elseif main_guns + secondary_guns >= 2 and firepower > 0 then | | elseif main_guns + secondary_guns >= 2 and firepower > 0 then |
− | return 3, self:_attack_power_cap((firepower + torpedo) * 1.2, 300) | + | return 3, (firepower + torpedo) * 1.2 |
| elseif torpedoes > 0 and torpedo > 0 then | | elseif torpedoes > 0 and torpedo > 0 then |
− | return 2, self:_attack_power_cap(firepower + torpedo, 300) | + | return 2, firepower + torpedo |
| elseif firepower > 0 then | | elseif firepower > 0 then |
− | return 1, self:_attack_power_cap(firepower + torpedo, 300) | + | return 1, firepower + torpedo |
| else | | else |
| return false | | return false |
Line 454: |
Line 452: |
| local multiplier = self._night_battle_attack_counts[mode] | | local multiplier = self._night_battle_attack_counts[mode] |
| if multiplier then | | if multiplier then |
− | attack_power = tostring(attack_power) .. " " .. multiplier | + | attack_power = tostring(math.floor(attack_power)) .. " " .. multiplier |
| end | | end |
| return format{self._attack_template, mode = self._night_battle_modes[mode], attack_power = attack_power} | | return format{self._attack_template, mode = self._night_battle_modes[mode], attack_power = attack_power} |
Line 463: |
Line 461: |
| end | | end |
| | | |
| + | -- Basic attack power for opening torpedo. |
| function ShipCapabilities:opening_torpedo() | | function ShipCapabilities:opening_torpedo() |
| local torpedo = self._ship:torpedo_leveled() | | local torpedo = self._ship:torpedo_leveled() |
Line 488: |
Line 487: |
| end | | end |
| if opening_torpedo then | | if opening_torpedo then |
− | return self:_attack_power_cap(torpedo + 5, 150) | + | return 5 + torpedo |
| end | | end |
| return false | | return false |
Line 495: |
Line 494: |
| ShipCapabilities.format_opening_torpedo = ShipCapabilities.format_torpedo | | ShipCapabilities.format_opening_torpedo = ShipCapabilities.format_torpedo |
| | | |
| + | -- Basic attack power for ASW attack * sonar w/ depth charge modifier (pre-cap). |
| function ShipCapabilities:asw_attack() | | function ShipCapabilities:asw_attack() |
| local base_asw | | local base_asw |
Line 501: |
Line 501: |
| return false | | return false |
| elseif self:_is_asw_surface_ship() then | | elseif self:_is_asw_surface_ship() then |
− | base_asw = 25 | + | base_asw = 13 |
| elseif self:_is_asw_aviation_ship() then | | elseif self:_is_asw_aviation_ship() then |
− | base_asw = 10 | + | base_asw = 8 |
| if not self._ship:night_bombing() then | | if not self._ship:night_bombing() then |
| night = false | | night = false |
Line 511: |
Line 511: |
| end | | end |
| local asw_leveled = self._ship:asw_leveled() | | local asw_leveled = self._ship:asw_leveled() |
− | local ship_asw, equipment_asw, depth_charge, sonar, bomber = (asw_leveled or 0) / 5, 0, false, false, false | + | local ship_asw, equipment_asw, depth_charge, sonar, bomber = (asw_leveled or 0), 0, false, false, false |
| for i = 1, self._ship:slots() or 0 do | | for i = 1, self._ship:slots() or 0 do |
| local equipment, size = self._ship:slot(i) | | local equipment, size = self._ship:slot(i) |
Line 534: |
Line 534: |
| depth_charge_sonar_boost = 1.15 | | depth_charge_sonar_boost = 1.15 |
| end | | end |
− | return self:_attack_power_cap(depth_charge_sonar_boost * (base_asw + 2 * equipment_asw + ship_asw / 5), 100), day, night, not asw_leveled | + | return depth_charge_sonar_boost * (base_asw + 1.5 * equipment_asw + 2 * math.sqrt(ship_asw)), day, night, not asw_leveled |
| end | | end |
| | | |
| function ShipCapabilities:format_asw_attack(attack_power, day, night, uncertain) | | function ShipCapabilities:format_asw_attack(attack_power, day, night, uncertain) |
| if attack_power then | | if attack_power then |
| + | attack_power = math.floor(attack_power) |
| local phases = {} | | local phases = {} |
| if day then | | if day then |
Line 557: |
Line 558: |
| end | | end |
| | | |
| + | -- Basic attack power for opening airstrike (returns an array with attack values per each bomber). |
| function ShipCapabilities:opening_airstrike() | | function ShipCapabilities:opening_airstrike() |
| if not self:_is_aviation_ship() then | | if not self:_is_aviation_ship() then |
Line 566: |
Line 568: |
| if size and size > 0 and equipment and self:_is_bomber(equipment) then | | if size and size > 0 and equipment and self:_is_bomber(equipment) then |
| local equipment_torpedo, equipment_bombing = equipment:torpedo() or 0, equipment:bombing() or 0 | | local equipment_torpedo, equipment_bombing = equipment:torpedo() or 0, equipment:bombing() or 0 |
− | local attack_power = (equipment_torpedo + equipment_bombing) * math.sqrt(size) + 25
| |
| if self:_is_torpedo_bomber(equipment) then | | if self:_is_torpedo_bomber(equipment) then |
− | table.insert(airstrikes, self:_attack_power_cap(attack_power * 1.5, 150)) | + | table.insert(airstrikes, 1.5 * (25 + equipment_torpedo * math.sqrt(size))) -- 0.8 is also possible |
| else | | else |
− | table.insert(airstrikes, self:_attack_power_cap(attack_power, 150)) | + | table.insert(airstrikes, 25 + equipment_bombing * math.sqrt(size)) |
| end | | end |
| end | | end |
Line 584: |
Line 585: |
| local result = {} | | local result = {} |
| for _, attack in ipairs(attacks) do | | for _, attack in ipairs(attacks) do |
− | table.insert(result, tostring(attack)) | + | table.insert(result, tostring(math.floor(attack))) |
| end | | end |
| return table.concat(result, ",") | | return table.concat(result, ",") |