From 0ab3056889a7b030101be3457f0f9b9f1912869c Mon Sep 17 00:00:00 2001 From: Xansta <> Date: Wed, 19 Mar 2025 14:08:20 -0500 Subject: [PATCH 1/2] Surf's Up Scenario Updates Make scenario run in the ECS and pre-ECS releases Organize code a bit --- scripts/scenario_29_surf.lua | 410 ++++++++++++++++++++--------------- 1 file changed, 240 insertions(+), 170 deletions(-) diff --git a/scripts/scenario_29_surf.lua b/scripts/scenario_29_surf.lua index 2d47f782de..5257cf9651 100644 --- a/scripts/scenario_29_surf.lua +++ b/scripts/scenario_29_surf.lua @@ -48,16 +48,139 @@ require("generate_call_sign_scenario_utility.lua") require("comms_scenario_utility.lua") function init() - scenario_version = "1.0.6" - ee_version = "2024.08.09" + scenario_version = "1.0.8" + ee_version = "2024.12.08" print(string.format(" ---- Scenario: Surf's Up! ---- Version %s ---- Tested with EE version %s ----",scenario_version,ee_version)) if _VERSION ~= nil then - print(_VERSION) + print("Lua version:",_VERSION) end - -- global variables: + ECS = false + if createEntity then + ECS = true + end + setGlobals() + constructEnvironment() + setVariations() + onNewPlayerShip(setPlayer) +end +function isObjectType(obj,typ,qualifier) + if obj ~= nil and obj:isValid() then + if typ ~= nil then + if ECS then + if typ == "SpaceStation" then + return obj.components.docking_bay and obj.components.physics and obj.components.physics.type == "static" + elseif typ == "PlayerSpaceship" then + return obj.components.player_control + elseif typ == "ScanProbe" then + return obj.components.allow_radar_link + elseif typ == "CpuShip" then + return obj.ai_controller + elseif typ == "Asteroid" then + return obj.components.mesh_render and string.sub(obj.components.mesh_render.mesh, 7) == "Astroid" + elseif typ == "Nebula" then + return obj.components.nebula_renderer + elseif typ == "Planet" then + return obj.components.planet_render + elseif typ == "SupplyDrop" then + return obj.components.pickup and obj.components.radar_trace.icon == "radar/blip.png" and obj.components.radar_trace.color_by_faction + elseif typ == "BlackHole" then + return obj.components.gravity and obj.components.billboard_render.texture == "blackHole3d.png" + elseif typ == "WarpJammer" then + return obj.components.warp_jammer + elseif typ == "Mine" then + return obj.components.delayed_explode_on_touch and obj.components.constant_particle_emitter + elseif typ == "EMPMissile" then + return obj.components.radar_trace.icon == "radar/missile.png" and obj.components.explode_on_touch.damage_type == "emp" + elseif typ == "Nuke" then + return obj.components.radar_trace.icon == "radar/missile.png" and obj.components.explosion_sfx == "sfx/nuke_explosion.wav" + elseif typ == "Zone" then + return obj.components.zone + else + if qualifier == "MovingMissile" then + if typ == "HomingMissile" or typ == "HVLI" or typ == "Nuke" or typ == "EMPMissile" then + return obj.components.radar_trace.icon == "radar/missile.png" + else + return false + end + elseif qualifier == "SplashMissile" then + if typ == "Nuke" or typ == "EMPMissile" then + if obj.components.radar_trace.icon == "radar/missile.png" then + if typ == "Nuke" then + return obj.components.explosion_sfx == "sfx/nuke_explosion.wav" + else --EMP + return obj.components.explode_on_touch.damage_type == "emp" + end + else + return false + end + else + return false + end + else + return false + end + end + else + return obj.typeName == typ + end + else + return false + end + else + return false + end +end +function setVariations() + enemy_config = { + ["Easy"] = {number = .5, desc = _("msgMainscreen","Easy")}, + ["Normal"] = {number = 1, desc = _("msgMainscreen","Normal")}, + ["Hard"] = {number = 2, desc = _("msgMainscreen","Hard")}, + ["Extreme"] = {number = 3, desc = _("msgMainscreen","Extreme")}, + ["Quixotic"] = {number = 5, desc = _("msgMainscreen","Quixotic")}, + } + enemy_power = enemy_config[getScenarioSetting("Enemies")].number + local enemy_speed = { + ["Normal"] = 1, + ["10"] = 1.1, + ["20"] = 1.2, + ["30"] = 1.3, + ["40"] = 1.4, + ["50"] = 1.5 + } + speed_factor = enemy_speed[getScenarioSetting("Pace")] + local advance_config = { + ["1"] = 0, + ["2"] = 1, + ["3"] = 2, + ["4"] = 3, + ["5"] = 4, + ["6"] = 5, + ["7"] = 6, + ["8"] = 7, + ["9"] = 8, + } + wave_advance = advance_config[getScenarioSetting("Advance")] + -- Alternative player ship + local prototype_config = { + ["None"] = "None", + ["Cruiser"] = "Player Cruiser", + ["Missile Cruiser"] = "Player Missile Cr.", + ["Fighter"] = "Player Fighter", + } + if getScenarioSetting("Prototype") ~= "None" then + local ship = PlayerSpaceship():setTemplate(prototype_config[getScenarioSetting("Prototype")]) + if prototype_config[getScenarioSetting("Prototype")] == "Player Fighter" then +-- Arc, Dir,Range,Cycle, Dmg + ship:setBeamWeapon(0, 65, 0, 700, 4, 4) + ship:setBeamWeapon(1, 40, -10, 1000, 6, 6) + ship:setBeamWeapon(2, 40, 10, 1000, 6, 6) + end + end +end +function setGlobals() wave_number = 0 spawn_wave_delay = nil - add_station_to_database = true + add_station_to_database = true include_goods_for_sale_in_status = true include_ordnance_in_status = true stations_sell_goods = true @@ -71,30 +194,19 @@ function init() transport_list = {} nebulas = {} check_zones = {} - - -- Random friendly stations - local name_categories = { + mission_good = {} + mission_goods = {} + asteroid_storm = false + storm_asteroids = {} + player_spawn_count = 0 + name_categories = { "Science", "History", "Pop Sci Fi", "Spec Sci Fi", "Generic", } - local station_angle = random(0,360) - local station_x, station_y = vectorFromAngle(station_angle,random(2000,5000)) - local name_category = tableRemoveRandom(name_categories) - local station = placeStation(station_x, station_y,name_category,"Human Navy") - setReinforcements(station) - table.insert(friendly_stations, station) - table.insert(station_list, station) - local dx, dy = vectorFromAngle(station_angle + random(-60,60),random(2000,5000)) - name_category = tableRemoveRandom(name_categories) - station = placeStation(station_x + dx, station_y + dy,name_category,"Human Navy") - setReinforcements(station) - table.insert(friendly_stations, station) - spreadServiceToStations(friendly_stations) - table.insert(station_list, station) - local mission_reasons = { + mission_reasons = { ["energy"] = { [_("situationReport-comms", "A recent reactor failure has put us on auxiliary power, so we cannot recharge ships.")] = { "nickel","platinum","gold","dilithium","tritanium","cobalt","optic","filament","sensor","lifter","software","circuit","battery" @@ -129,16 +241,100 @@ function init() }, } } - mission_goods = {} + ship_templates = { + {name = "Gnat", warp_jammer = "none", strength = 2, create = gnat}, + {name = "MT52 Hornet", warp_jammer = "none", strength = 5, create = stockTemplate}, + {name = "MU52 Hornet", warp_jammer = "none", strength = 5, create = stockTemplate}, + {name = "Adder MK5", warp_jammer = "none", strength = 7, create = stockTemplate}, + {name = "WX-Lindworm", warp_jammer = "none", strength = 7, create = stockTemplate}, + {name = "Adder MK9", warp_jammer = "none", strength = 11, create = stockTemplate}, + {name = "Phobos T3", warp_jammer = "none", strength = 15, create = stockTemplate}, + {name = "Piranha F12", warp_jammer = "beam", strength = 15, create = stockTemplate}, + {name = "Farco 11", warp_jammer = "plain", strength = 21, create = farco11}, + {name = "Ranus U", warp_jammer = "beam", strength = 25, create = stockTemplate}, + {name = "Stalker Q7", warp_jammer = "missile", strength = 25, create = stockTemplate}, + {name = "Stalker R7", warp_jammer = "missile", strength = 25, create = stockTemplate}, + {name = "Maniapak", warp_jammer = "none", strength = 34, create = maniapak}, + {name = "Cucaracha", warp_jammer = "plain", strength = 36, create = cucaracha}, + {name = "Atlantis X23", warp_jammer = "none", strength = 50, create = stockTemplate}, + {name = "Atlantis Y42", warp_jammer = "plain", strength = 60, create = atlantisY42}, + {name = "Enforcer", warp_jammer = "none", strength = 75, create = enforcer}, + {name = "Starhammer III", warp_jammer = "none", strength = 85, create = starhammerIII}, + {name = "Starhammer V", warp_jammer = "plain", strength = 90, create = starhammerV}, + {name = "Tyr", warp_jammer = "none", strength = 150, create = tyr}, + } + -- Player ship(s) + player_ship_stats = { + ["Atlantis"] = { strength = 52, cargo = 6, long_range_radar = 30000, short_range_radar = 5000, }, + ["Benedict"] = { strength = 10, cargo = 9, long_range_radar = 30000, short_range_radar = 5000, }, + ["Crucible"] = { strength = 45, cargo = 5, long_range_radar = 20000, short_range_radar = 6000, }, + ["Ender"] = { strength = 100, cargo = 20, long_range_radar = 45000, short_range_radar = 7000, }, + ["Flavia P.Falcon"] = { strength = 13, cargo = 15, long_range_radar = 40000, short_range_radar = 5000, }, + ["Hathcock"] = { strength = 30, cargo = 6, long_range_radar = 35000, short_range_radar = 6000, }, + ["Kiriya"] = { strength = 10, cargo = 9, long_range_radar = 35000, short_range_radar = 5000, }, + ["MP52 Hornet"] = { strength = 7, cargo = 3, long_range_radar = 18000, short_range_radar = 4000, }, + ["Maverick"] = { strength = 45, cargo = 5, long_range_radar = 20000, short_range_radar = 4000, }, + ["Nautilus"] = { strength = 12, cargo = 7, long_range_radar = 22000, short_range_radar = 4000, }, + ["Phobos M3P"] = { strength = 19, cargo = 10, long_range_radar = 25000, short_range_radar = 5000, }, + ["Piranha"] = { strength = 16, cargo = 8, long_range_radar = 25000, short_range_radar = 6000, }, + ["Player Cruiser"] = { strength = 40, cargo = 6, long_range_radar = 30000, short_range_radar = 5000, }, + ["Player Fighter"] = { strength = 7, cargo = 3, long_range_radar = 15000, short_range_radar = 4500, }, + ["Player Missile Cr."] = { strength = 45, cargo = 8, long_range_radar = 35000, short_range_radar = 6000, }, + ["Repulse"] = { strength = 14, cargo = 12, long_range_radar = 38000, short_range_radar = 5000, }, + ["Striker"] = { strength = 8, cargo = 4, long_range_radar = 35000, short_range_radar = 5000, }, + ["ZX-Lindworm"] = { strength = 8, cargo = 3, long_range_radar = 18000, short_range_radar = 5500, }, + } + player_ship_names = { + ["Atlantis"] = {"Excaliber","Thrasher","Punisher","Vorpal","Protang","Drummond","Parchim","Coronado"}, + ["Benedict"] = {"Elizabeth","Ford","Vikramaditya","Liaoning","Avenger","Naruebet","Washington","Lincoln","Garibaldi","Eisenhower"}, + ["Crucible"] = {"Sling", "Stark", "Torrid", "Kicker", "Flummox", "3rd Charm"}, + ["Ender"] = {"Mongo","Godzilla","Leviathan","Kraken","Jupiter","Saturn"}, + ["Flavia P.Falcon"] = {"Ladyhawke","Hunter","Seeker","Gyrefalcon","Kestrel","Magpie","Bandit","Buccaneer"}, + ["Hathcock"] = {"Hayha", "Waldron", "Plunkett", "Mawhinney", "Furlong", "Zaytsev", "Pavlichenko", "Pegahmagabow", "Fett", "Hawkeye", "Hanzo"}, + ["Kiriya"] = {"Cavour","Reagan","Gaulle","Paulo","Truman","Stennis","Kuznetsov","Roosevelt","Vinson","Old Salt"}, + ["MP52 Hornet"] = {"Dragonfly","Scarab","Mantis","Yellow Jacket","Jimminy","Flik","Thorny","Buzz"}, + ["Maverick"] = {"Angel", "Thunderbird", "Roaster", "Magnifier", "Hedge"}, + ["Nautilus"] = {"October", "Abdiel", "Manxman", "Newcon", "Nusret", "Pluton", "Amiral", "Amur", "Heinkel", "Dornier"}, + ["Phobos M3P"] = {"Blinder","Shadow","Distortion","Diemos","Ganymede","Castillo","Thebe","Retrograde"}, + ["Piranha"] = {"Razor","Biter","Ripper","Voracious","Carnivorous","Characid","Vulture","Predator"}, + ["Player Cruiser"] = {"Excelsior","Velociraptor","Thunder","Kona","Encounter","Perth","Aspern","Panther"}, + ["Player Fighter"] = {"Buzzer","Flitter","Zippiticus","Hopper","Molt","Stinger","Stripe"}, + ["Player Missile Cr."] ={"Projectus","Hurlmeister","Flinger","Ovod","Amatola","Nakhimov","Antigone"}, + ["Repulse"] = {"Fiddler","Brinks","Loomis","Mowag","Patria","Pandur","Terrex","Komatsu","Eitan"}, + ["Striker"] = {"Sparrow","Sizzle","Squawk","Crow","Phoenix","Snowbird","Hawk"}, + ["ZX-Lindworm"] = {"Seagull","Catapult","Blowhard","Flapper","Nixie","Pixie","Tinkerbell"}, + ["Player Cruiser"] = {"Excelsior","Velociraptor","Thunder","Kona","Encounter","Perth","Aspern","Panther"}, + ["Player Missile Cr."] ={"Projectus","Hurlmeister","Flinger","Ovod","Amatola","Nakhimov","Antigone"}, + ["Player Fighter"] = {"Buzzer","Flitter","Zippiticus","Hopper","Molt","Stinger","Stripe"}, + ["Leftovers"] = {"Foregone","Righteous","Masher"}, + } +end +function constructEnvironment() + -- Random friendly stations + local station_angle = random(0,360) + local station_x, station_y = vectorFromAngle(station_angle,random(2000,5000)) + local name_category = tableRemoveRandom(name_categories) + local station = placeStation(station_x, station_y,name_category,"Human Navy") + setReinforcements(station) + table.insert(friendly_stations, station) + table.insert(station_list, station) + local dx, dy = vectorFromAngle(station_angle + random(-60,60),random(2000,5000)) + name_category = tableRemoveRandom(name_categories) + station = placeStation(station_x + dx, station_y + dy,name_category,"Human Navy") + setReinforcements(station) + table.insert(friendly_stations, station) + spreadServiceToStations(friendly_stations) + table.insert(station_list, station) + local reason_list = {} for i,station in ipairs(friendly_stations) do if not station:getRestocksScanProbes() then if station.probe_fail_reason == nil then - local reason_list = { + reason_list = { _("situationReport-comms", "Cannot replenish scan probes due to fabrication unit failure."), _("situationReport-comms", "Parts shortage prevents scan probe replenishment."), _("situationReport-comms", "Station management has curtailed scan probe replenishment for cost cutting reasons."), } - station.probe_fail_reason = reason_list[math.random(1,#reason_list)] + station.probe_fail_reason = tableSelectRandom(reason_list) mission_goods["restock_probes"] = mission_reasons["restock_probes"][station.probe_fail_reason] end end @@ -149,7 +345,7 @@ function init() _("situationReport-comms", "Hull repair automation unavailable while it is undergoing maintenance."), _("situationReport-comms", "All hull repair technicians quarantined to quarters due to illness."), } - station.repair_fail_reason = reason_list[math.random(1,#reason_list)] + station.repair_fail_reason = tableSelectRandom(reason_list) mission_goods["hull"] = mission_reasons["hull"][station.repair_fail_reason] end end @@ -160,19 +356,17 @@ function init() _("situationReport-comms", "A damaged power coupling makes it too dangerous to recharge ships."), _("situationReport-comms", "An asteroid strike damaged our solar cells and we are short on power, so we can't recharge ships right now."), } - station.energy_fail_reason = reason_list[math.random(1,#reason_list)] + station.energy_fail_reason = tableSelectRandom(reason_list) mission_goods["energy"] = mission_reasons["energy"][station.energy_fail_reason] end end end - -- Random nebulae local neb_x, neb_y = vectorFromAngle(random(0, 360), 15000) for n = 1, 5 do local d_neb_x, d_neb_y = vectorFromAngle(random(0, 360), random(2500, 10000)) table.insert(nebulas,Nebula():setPosition(neb_x + d_neb_x, neb_y + d_neb_y)) end - -- Random asteroids for cnt = 1, random(2, 7) do local major_angle = random(0, 360) @@ -190,64 +384,7 @@ function init() VisualAsteroid():setPosition(base_x + dx1 + dx2, base_y + dy1 + dy2):setSize(random(4,300) + random(4,300) + random(4,300)) end end - asteroid_storm = false - storm_asteroids = {} - - -- Enemy strength configuration and primary enemy type list - enemy_config = { - ["Easy"] = {number = .5, desc = _("msgMainscreen","Easy")}, - ["Normal"] = {number = 1, desc = _("msgMainscreen","Normal")}, - ["Hard"] = {number = 2, desc = _("msgMainscreen","Hard")}, - ["Extreme"] = {number = 3, desc = _("msgMainscreen","Extreme")}, - ["Quixotic"] = {number = 5, desc = _("msgMainscreen","Quixotic")}, - } - enemy_power = enemy_config[getScenarioSetting("Enemies")].number - local enemy_speed = { - ["Normal"] = 1, - ["10"] = 1.1, - ["20"] = 1.2, - ["30"] = 1.3, - ["40"] = 1.4, - ["50"] = 1.5 - } - speed_factor = enemy_speed[getScenarioSetting("Pace")] - local advance_config = { - ["1"] = 0, - ["2"] = 1, - ["3"] = 2, - ["4"] = 3, - ["5"] = 4, - ["6"] = 5, - ["7"] = 6, - ["8"] = 7, - ["9"] = 8, - } - wave_advance = advance_config[getScenarioSetting("Advance")] - ship_templates = { - {name = "Gnat", warp_jammer = "none", strength = 2, create = gnat}, - {name = "MT52 Hornet", warp_jammer = "none", strength = 5, create = stockTemplate}, - {name = "MU52 Hornet", warp_jammer = "none", strength = 5, create = stockTemplate}, - {name = "Adder MK5", warp_jammer = "none", strength = 7, create = stockTemplate}, - {name = "WX-Lindworm", warp_jammer = "none", strength = 7, create = stockTemplate}, - {name = "Adder MK9", warp_jammer = "none", strength = 11, create = stockTemplate}, - {name = "Phobos T3", warp_jammer = "none", strength = 15, create = stockTemplate}, - {name = "Piranha F12", warp_jammer = "beam", strength = 15, create = stockTemplate}, - {name = "Farco 11", warp_jammer = "plain", strength = 21, create = farco11}, - {name = "Ranus U", warp_jammer = "beam", strength = 25, create = stockTemplate}, - {name = "Stalker Q7", warp_jammer = "missile", strength = 25, create = stockTemplate}, - {name = "Stalker R7", warp_jammer = "missile", strength = 25, create = stockTemplate}, - {name = "Maniapak", warp_jammer = "none", strength = 34, create = maniapak}, - {name = "Cucaracha", warp_jammer = "plain", strength = 36, create = cucaracha}, - {name = "Atlantis X23", warp_jammer = "none", strength = 50, create = stockTemplate}, - {name = "Atlantis Y42", warp_jammer = "plain", strength = 60, create = atlantisY42}, - {name = "Enforcer", warp_jammer = "none", strength = 75, create = enforcer}, - {name = "Starhammer III", warp_jammer = "none", strength = 85, create = starhammerIII}, - {name = "Starhammer V", warp_jammer = "plain", strength = 90, create = starhammerV}, - {name = "Tyr", warp_jammer = "none", strength = 150, create = tyr}, - } - -- Random neutral stations - neutral_stations = {} for n = 1, 6 do name_category = tableRemoveRandom(name_categories) if name_category == nil then @@ -259,7 +396,10 @@ function init() table.insert(station_list, station) end spreadServiceToStationPairs(neutral_stations) - + setImprovementMissions() +end +function setImprovementMissions() + -- set up ad hoc improvement missions local ordnance_missions = { "Homing","Nuke","EMP","Mine","HVLI", } @@ -289,7 +429,6 @@ function init() end end end - mission_good = {} -- Pick goods for missions local already_selected_station = {} local already_selected_good = {} @@ -380,80 +519,6 @@ function init() end end end - --[[ - print("Missions and goods final:") - for mission,details in pairs(mission_good) do - local out_station = "None" - if details.station ~= nil then - out_station = details.station:getCallSign() - end - print("Mission:",mission,"Good:",details.good,"Station:",out_station) - end - --]] - -- Player ship(s) - player_ship_stats = { - ["Atlantis"] = { strength = 52, cargo = 6, long_range_radar = 30000, short_range_radar = 5000, }, - ["Benedict"] = { strength = 10, cargo = 9, long_range_radar = 30000, short_range_radar = 5000, }, - ["Crucible"] = { strength = 45, cargo = 5, long_range_radar = 20000, short_range_radar = 6000, }, - ["Ender"] = { strength = 100, cargo = 20, long_range_radar = 45000, short_range_radar = 7000, }, - ["Flavia P.Falcon"] = { strength = 13, cargo = 15, long_range_radar = 40000, short_range_radar = 5000, }, - ["Hathcock"] = { strength = 30, cargo = 6, long_range_radar = 35000, short_range_radar = 6000, }, - ["Kiriya"] = { strength = 10, cargo = 9, long_range_radar = 35000, short_range_radar = 5000, }, - ["MP52 Hornet"] = { strength = 7, cargo = 3, long_range_radar = 18000, short_range_radar = 4000, }, - ["Maverick"] = { strength = 45, cargo = 5, long_range_radar = 20000, short_range_radar = 4000, }, - ["Nautilus"] = { strength = 12, cargo = 7, long_range_radar = 22000, short_range_radar = 4000, }, - ["Phobos M3P"] = { strength = 19, cargo = 10, long_range_radar = 25000, short_range_radar = 5000, }, - ["Piranha"] = { strength = 16, cargo = 8, long_range_radar = 25000, short_range_radar = 6000, }, - ["Player Cruiser"] = { strength = 40, cargo = 6, long_range_radar = 30000, short_range_radar = 5000, }, - ["Player Fighter"] = { strength = 7, cargo = 3, long_range_radar = 15000, short_range_radar = 4500, }, - ["Player Missile Cr."] = { strength = 45, cargo = 8, long_range_radar = 35000, short_range_radar = 6000, }, - ["Repulse"] = { strength = 14, cargo = 12, long_range_radar = 38000, short_range_radar = 5000, }, - ["Striker"] = { strength = 8, cargo = 4, long_range_radar = 35000, short_range_radar = 5000, }, - ["ZX-Lindworm"] = { strength = 8, cargo = 3, long_range_radar = 18000, short_range_radar = 5500, }, - } - player_ship_names = { - ["Atlantis"] = {"Excaliber","Thrasher","Punisher","Vorpal","Protang","Drummond","Parchim","Coronado"}, - ["Benedict"] = {"Elizabeth","Ford","Vikramaditya","Liaoning","Avenger","Naruebet","Washington","Lincoln","Garibaldi","Eisenhower"}, - ["Crucible"] = {"Sling", "Stark", "Torrid", "Kicker", "Flummox", "3rd Charm"}, - ["Ender"] = {"Mongo","Godzilla","Leviathan","Kraken","Jupiter","Saturn"}, - ["Flavia P.Falcon"] = {"Ladyhawke","Hunter","Seeker","Gyrefalcon","Kestrel","Magpie","Bandit","Buccaneer"}, - ["Hathcock"] = {"Hayha", "Waldron", "Plunkett", "Mawhinney", "Furlong", "Zaytsev", "Pavlichenko", "Pegahmagabow", "Fett", "Hawkeye", "Hanzo"}, - ["Kiriya"] = {"Cavour","Reagan","Gaulle","Paulo","Truman","Stennis","Kuznetsov","Roosevelt","Vinson","Old Salt"}, - ["MP52 Hornet"] = {"Dragonfly","Scarab","Mantis","Yellow Jacket","Jimminy","Flik","Thorny","Buzz"}, - ["Maverick"] = {"Angel", "Thunderbird", "Roaster", "Magnifier", "Hedge"}, - ["Nautilus"] = {"October", "Abdiel", "Manxman", "Newcon", "Nusret", "Pluton", "Amiral", "Amur", "Heinkel", "Dornier"}, - ["Phobos M3P"] = {"Blinder","Shadow","Distortion","Diemos","Ganymede","Castillo","Thebe","Retrograde"}, - ["Piranha"] = {"Razor","Biter","Ripper","Voracious","Carnivorous","Characid","Vulture","Predator"}, - ["Player Cruiser"] = {"Excelsior","Velociraptor","Thunder","Kona","Encounter","Perth","Aspern","Panther"}, - ["Player Fighter"] = {"Buzzer","Flitter","Zippiticus","Hopper","Molt","Stinger","Stripe"}, - ["Player Missile Cr."] ={"Projectus","Hurlmeister","Flinger","Ovod","Amatola","Nakhimov","Antigone"}, - ["Repulse"] = {"Fiddler","Brinks","Loomis","Mowag","Patria","Pandur","Terrex","Komatsu","Eitan"}, - ["Striker"] = {"Sparrow","Sizzle","Squawk","Crow","Phoenix","Snowbird","Hawk"}, - ["ZX-Lindworm"] = {"Seagull","Catapult","Blowhard","Flapper","Nixie","Pixie","Tinkerbell"}, - ["Player Cruiser"] = {"Excelsior","Velociraptor","Thunder","Kona","Encounter","Perth","Aspern","Panther"}, - ["Player Missile Cr."] ={"Projectus","Hurlmeister","Flinger","Ovod","Amatola","Nakhimov","Antigone"}, - ["Player Fighter"] = {"Buzzer","Flitter","Zippiticus","Hopper","Molt","Stinger","Stripe"}, - ["Leftovers"] = {"Foregone","Righteous","Masher"}, - } - player_spawn_count = 0 - onNewPlayerShip(setPlayer) - - -- Alternative player ship - local prototype_config = { - ["None"] = "None", - ["Cruiser"] = "Player Cruiser", - ["Missile Cruiser"] = "Player Missile Cr.", - ["Fighter"] = "Player Fighter", - } - if getScenarioSetting("Prototype") ~= "None" then - local ship = PlayerSpaceship():setTemplate(prototype_config[getScenarioSetting("Prototype")]) - if prototype_config[getScenarioSetting("Prototype")] == "Player Fighter" then --- Arc, Dir,Range,Cycle, Dmg - ship:setBeamWeapon(0, 65, 0, 700, 4, 4) - ship:setBeamWeapon(1, 40, -10, 1000, 6, 6) - ship:setBeamWeapon(2, 40, 10, 1000, 6, 6) - end - end end function setReinforcements(station) station.comms_data = {} @@ -522,13 +587,13 @@ function spreadServiceToStationPairs(stations) while(#station_service_pool > 0) do local service = tableRemoveRandom(station_service_pool) if #station_pool < 1 then - for _,station in ipairs(stations) do + for i,station in ipairs(stations) do table.insert(station_pool,station) end end local station_1 = tableRemoveRandom(station_pool) if #station_pool < 1 then - for _,station in ipairs(stations) do + for i,station in ipairs(stations) do table.insert(station_pool,station) end end @@ -667,6 +732,13 @@ function tableRemoveRandom(array) array[array_item_count] = temp return table.remove(array) end +function tableSelectRandom(array) + local array_item_count = #array + if array_item_count == 0 then + return nil + end + return array[math.random(1,#array)] +end function angleFromVectorNorth(p1x,p1y,p2x,p2y) TWOPI = 6.2831853071795865 RAD2DEG = 57.2957795130823209 @@ -1390,7 +1462,7 @@ function asteroidStorm() if #storm_asteroids > 0 then for i,asteroid in ipairs(storm_asteroids) do if asteroid ~= nil and asteroid:isValid() then - if asteroid.typeName == "Asteroid" then + if isObjectType(asteroid,"Asteroid") then real = real + 1 else visual = visual + 1 @@ -1683,9 +1755,7 @@ function checkZones(p,delta) end end end ---------------------------- --- Station communication -- ---------------------------- + function update(delta) if delta == 0 then return @@ -1716,7 +1786,7 @@ function update(delta) for i, enemy in ipairs(enemy_list) do if enemy ~= nil and enemy:isValid() then enemy_count = enemy_count + 1 - if enemy.typeName == "SpaceStation" or enemy:getTypeName() == "Defense platform" then + if isObjectType(enemy,"SpaceStation") or enemy:getTypeName() == "Defense platform" then enemy_base_count = enemy_base_count + 1 else if enemy:getOrder() == "Idle" or enemy:getOrder() == "Defend Location" then From 05cbf1d74c1137065fdfead387909c73e0c2f553 Mon Sep 17 00:00:00 2001 From: Xansta <> Date: Thu, 17 Apr 2025 09:20:55 -0500 Subject: [PATCH 2/2] Rely on function in utils.lua in #2331 --- scripts/scenario_29_surf.lua | 71 ------------------------------------ 1 file changed, 71 deletions(-) diff --git a/scripts/scenario_29_surf.lua b/scripts/scenario_29_surf.lua index 5257cf9651..bb814ddeaa 100644 --- a/scripts/scenario_29_surf.lua +++ b/scripts/scenario_29_surf.lua @@ -54,82 +54,11 @@ function init() if _VERSION ~= nil then print("Lua version:",_VERSION) end - ECS = false - if createEntity then - ECS = true - end setGlobals() constructEnvironment() setVariations() onNewPlayerShip(setPlayer) end -function isObjectType(obj,typ,qualifier) - if obj ~= nil and obj:isValid() then - if typ ~= nil then - if ECS then - if typ == "SpaceStation" then - return obj.components.docking_bay and obj.components.physics and obj.components.physics.type == "static" - elseif typ == "PlayerSpaceship" then - return obj.components.player_control - elseif typ == "ScanProbe" then - return obj.components.allow_radar_link - elseif typ == "CpuShip" then - return obj.ai_controller - elseif typ == "Asteroid" then - return obj.components.mesh_render and string.sub(obj.components.mesh_render.mesh, 7) == "Astroid" - elseif typ == "Nebula" then - return obj.components.nebula_renderer - elseif typ == "Planet" then - return obj.components.planet_render - elseif typ == "SupplyDrop" then - return obj.components.pickup and obj.components.radar_trace.icon == "radar/blip.png" and obj.components.radar_trace.color_by_faction - elseif typ == "BlackHole" then - return obj.components.gravity and obj.components.billboard_render.texture == "blackHole3d.png" - elseif typ == "WarpJammer" then - return obj.components.warp_jammer - elseif typ == "Mine" then - return obj.components.delayed_explode_on_touch and obj.components.constant_particle_emitter - elseif typ == "EMPMissile" then - return obj.components.radar_trace.icon == "radar/missile.png" and obj.components.explode_on_touch.damage_type == "emp" - elseif typ == "Nuke" then - return obj.components.radar_trace.icon == "radar/missile.png" and obj.components.explosion_sfx == "sfx/nuke_explosion.wav" - elseif typ == "Zone" then - return obj.components.zone - else - if qualifier == "MovingMissile" then - if typ == "HomingMissile" or typ == "HVLI" or typ == "Nuke" or typ == "EMPMissile" then - return obj.components.radar_trace.icon == "radar/missile.png" - else - return false - end - elseif qualifier == "SplashMissile" then - if typ == "Nuke" or typ == "EMPMissile" then - if obj.components.radar_trace.icon == "radar/missile.png" then - if typ == "Nuke" then - return obj.components.explosion_sfx == "sfx/nuke_explosion.wav" - else --EMP - return obj.components.explode_on_touch.damage_type == "emp" - end - else - return false - end - else - return false - end - else - return false - end - end - else - return obj.typeName == typ - end - else - return false - end - else - return false - end -end function setVariations() enemy_config = { ["Easy"] = {number = .5, desc = _("msgMainscreen","Easy")},