1
0
mirror of https://github.com/ComfyFactory/ComfyFactorio.git synced 2025-01-08 00:39:30 +02:00
ComfyFactorio/maps/pirates/coredata.lua
Piratux 4c0657caf3 Bug fixes
Changes:
- Fixed an issue where if captain and all officers were afk (or captain would leave the game), some other crew member would get captain role.
- Fixed an issue where the crew would lose, if boat would leave the island when there was ~10 secs left until auto undock in >800 leagues on hard+ difficulty, even when requirements were fulfilled.
- Attempt to fix some desyncs.
2023-02-18 18:57:33 +02:00

318 lines
13 KiB
Lua

-- This file is part of thesixthroc's Pirate Ship softmod, licensed under GPLv3 and stored at https://github.com/danielmartin0/ComfyFactorio-Pirates.
local Math = require 'maps.pirates.math'
local _inspect = require 'utils.inspect'.inspect
local Public = {}
Public.scenario_id_name = 'pirates'
Public.version_string = '1.5.1' --major.minor.patch versioning, to match factorio mod portal
Public.blueprint_library_allowed = true
Public.blueprint_importing_allowed = true
Public.rocket_silo_death_causes_loss = false
Public.victory_x = 1000
Public.total_max_biters = 2200
Public.lobby_surface_name = '000-000-Lobby'
Public.private_run_lock_amount_hr = 24 -- how many hours need to pass, when crew is empty or inactive, until private run becomes public
Public.protected_run_lock_amount_hr = 24 -- how many hours need to pass, when crew is empty or inactive, until captain protection expires
Public.colors = {
coal = {r=0.5, g=0.5, b=0.5},
wood = {r=204, g=158, b=67},
stone = {r=230, g=220, b=190},
coin = {r=242, g=193, b=97},
oil = {r=181, g=107, b=91},
['raw-fish'] = {r=0, g=237, b=170},
['iron-plate'] = {r=170, g=180, b=190},
['iron-ore'] = {r=170, g=180, b=190},
['copper-plate'] = {r=219, g=149, b=96},
['copper-ore'] = {r=219, g=149, b=96},
notify_error = {r=170, g=170, b=170},
notify_player_expected = {r=255, g=231, b=46},
notify_player_announce = {r=244, g=255, b=145},
notify_game = {r=249, g=103, b=56},
notify_lobby = {r=249, g=153, b=56},
notify_force = {r=249, g=153, b=56},
notify_force_light = {r=255, g=220, b=161},
parrot = {r=87, g=255, b=148},
notify_victory = {r=84, g=249, b=84},
notify_gameover = {r=249, g=84, b=84},
renderingtext_green = {r=88, g=219, b=88},
renderingtext_yellow = {r=79, g=136, b=209},
quartermaster_rendering = {r=237, g=157, b=45, a=0.2},
healing_radius_rendering = {r=255, g=91, b=138, a=0.2},
toughness_rendering = {r=40, g=40, b=40, a=0.5},
shaman_charge_rendering = {r=0, g=100, b=255, a=0.6},
}
Public.static_boat_floor = 'brown-refined-concrete'
Public.moving_boat_floor = 'lab-dark-2'
Public.world_concrete_tile = 'black-refined-concrete'
Public.walkway_tile = 'orange-refined-concrete'
Public.landing_tile = 'red-refined-concrete'
Public.enemy_landing_tile = 'purple-refined-concrete'
Public.overworld_loading_tile = 'yellow-refined-concrete'
Public.overworld_presence_tile = 'green-refined-concrete'
Public.kraken_tile = 'pink-refined-concrete'
Public.enemy_units = {
'small-biter',
'small-spitter',
'medium-biter',
'medium-spitter',
'big-biter',
'big-spitter',
'behemoth-biter',
'behemoth-spitter',
}
Public.water_tile_names = {'water', 'deepwater', 'water-green', 'deepwater-green'}
Public.edgemost_tile_names = {'sand-1'}
Public.tiles_that_conflict_with_resource_layer = {'water', 'deepwater', 'water-green', 'deepwater-green', 'water-shallow', 'water-mud', 'out-of-map'}
Public.tiles_that_conflict_with_resource_layer_extended = {'water', 'deepwater', 'water-green', 'deepwater-green', 'water-shallow', 'water-mud', 'out-of-map', 'red-refined-concrete', 'brown-refined-concrete', 'orange-refined-concrete'}
Public.noworm_tile_names = {'red-refined-concrete', 'purple-refined-concrete', 'green-refined-concrete', 'orange-refined-concrete', 'brown-refined-concrete', 'lab-dark-2', 'sand-1', 'red-desert-3'}
Public.worm_solid_tile_names = {'black-refined-concrete', 'stone-path', 'concrete', 'refined-concrete', 'red-refined-concrete', 'purple-refined-concrete', 'brown-refined-concrete', 'lab-dark-2', 'sand-1', 'red-desert-3'}
Public.unteleportable_names = {'transport-belt', 'underground-belt', 'splitter', 'loader', 'fast-transport-belt', 'fast-underground-belt', 'fast-splitter', 'fast-loader', 'express-transport-belt', 'express-underground-belt', 'express-splitter', 'express-loader', 'pipe', 'pipe-to-ground', 'offshore-pump', 'chemical-plant', 'oil-refinery', 'flamethrower-turret', 'storage-tank', 'assembling-machine-2', 'assembling-machine-3', 'boiler', 'steam-engine', 'heat-exchanger', 'steam-turbine', 'pump', 'straight-rail', 'curved-rail', 'cargo-wagon', 'artillery-turret', 'electric-energy-interface', 'accumulator', 'linked-belt'}
Public.comfy_emojis = {
-- monkas = '<:monkas:555120573752279056>', -- deprecated, all occurences replaced with despair
despair = '<:despair:1004858546044805241>',
trashbin = '<:trashbin:835887736253710396>',
pogkot = '<:pogkot:763854655612518420>',
goldenobese = '<:goldenobese:491135683508043786>',
-- wut = '<:wut:493320605592977443>', -- deprecated, all occurences replaced with hype
hype = '<:hype:1024006040624308274>',
-- smolfish = '<:smolfish:673942701682589731>', -- deprecated, all occurences replaced with hype
-- mjau = '<:mjau:789611417132073010>', -- deprecated, all occurences replaced with hype
spurdo = '<:spurdo:669546779360100382>',
loops = '<:loops:783508194755346462>',
ree1 = '<:ree1:555118905090244618>',
derp = '<:derp:1024006042360742028>',
-- doge = '<:doge:491152224681066496>', -- deprecated
yum1 = '<:yum1:740341272451219517>',
feel = '<:feel:491147760553164800>',
kewl = '<:kewl:837016976937189418>',
}
Public.capacity_options = {
{value = 2, icon = 'virtual-signal/signal-2', text = '2', text2 = '/2', text3 = '2'},
{value = 4, icon = 'virtual-signal/signal-4', text = '4', text2 = '/4', text3 = '4'},
{value = 8, icon = 'virtual-signal/signal-8', text = '8', text2 = '/8', text3 = '8'},
{value = 24, icon = 'virtual-signal/signal-blue', text = '24', text2 = '/24', text3 = '24'},
{value = 999, icon = 'virtual-signal/signal-white', text = 'Inf.', text2 = '', text3 = 'Inf'},
-- {value = 64, icon = 'item/storage-tank', text = '64'},
}
-- Prefer not to change difficulty values if possible, since even tiny value change can have big effect on some formulas that rely on it.
Public.difficulty_options = {
-- The difficulty values we currently offer
--For the value of Easy difficulty, we are pulled in two directions: We wish to make the game comfy to play for those who haven't played it, but we also wish to represent the game mechanics faithfully so that Normal is not a crazy distance away.
{value = 0.5, icon = 'item/firearm-magazine', text = {'pirates.difficulty_easy'}, associated_color = {r = 50, g = 255, b = 50}},
{value = 1.0, icon = 'item/piercing-rounds-magazine', text = {'pirates.difficulty_normal'}, associated_color = {r = 255, g = 255, b = 50}},
{value = 1.5, icon = 'item/uranium-rounds-magazine', text = {'pirates.difficutly_hard'}, associated_color = {r = 255, g = 50, b = 50}},
{value = 2.0, icon = 'item/atomic-bomb', text = {'pirates.difficulty_nightmare'}, associated_color = {r = 170, g = 60, b = 60}},
}
function Public.get_difficulty_option_from_value(difficulty_value)
-- given a difficulty value, key in to the closesy entry in the above table. (organising things this way allows us to make changes to the 'value' keys in the above table without disrupting e.g. past highscores data)
if difficulty_value <= 0.75 then
return 1
elseif difficulty_value < 1.2 then
return 2
elseif difficulty_value <= 1.7 then
return 3
else
return 4
end
end
function Public.get_difficulty_option_informal_name_from_value(difficulty_value)
-- given a difficulty value, provide a simple named description of the difficulty. for internal use
if difficulty_value <= 0.75 then
return 'easy'
elseif difficulty_value < 1.2 then
return 'normal'
elseif difficulty_value <= 1.7 then
return 'hard'
else
return 'nightmare'
end
end
-- Public.mode_options = {
-- left = {value = 'speedrun', icon = 'achievement/watch-your-step', text = 'Speedrun'},
-- right = {value = 'infinity', icon = 'achievement/mass-production-1', text = 'Infinity'},
-- }
Public.daynightcycle_types = {
{displayname = {'pirates.daynightcycle_static'}, 0},
{displayname = {'pirates.daynightcycle_slowcyclic'}, ticksperday = 100000},
{displayname = {'pirates.daynightcycle_cyclic'}, ticksperday = 80000},
{displayname = {'pirates.daynightcycle_fastcyclic'}, ticksperday = 60000},
{displayname = {'pirates.daynightcycle_rapidcyclic'}, ticksperday = 40000},
}
Public.ore_types = {
{name = 'iron-ore', sprite_name = 'entity/iron-ore'},
{name = 'copper-ore', sprite_name = 'entity/copper-ore'},
{name = 'coal', sprite_name = 'entity/coal'},
{name = 'stone', sprite_name = 'entity/stone'},
{name = 'uranium-ore', sprite_name = 'entity/uranium-ore'},
{name = 'crude-oil', sprite_name = 'entity/crude-oil'},
}
Public.cost_items = {
{name = 'electronic-circuit', display_name = 'Electronic circuit', sprite_name = 'item/electronic-circuit', color={r=0,g=255,b=0}},
{name = 'engine-unit', display_name = 'Engine unit', sprite_name = 'item/engine-unit', color={r=255,g=255,b=0}},
{name = 'advanced-circuit', display_name = 'Advanced circuit', sprite_name = 'item/advanced-circuit', color={r=0,g=0,b=255}},
{name = 'uranium-235', display_name = 'Uranium-235', sprite_name = 'item/uranium-235', color={r=0,g=255,b=0}},
{name = 'flying-robot-frame', display_name = 'Flying robot frame', sprite_name = 'item/flying-robot-frame', color={r=0,g=255,b=255}},
-- {name = 'rocket-fuel', display_name = 'Rocket Fuel', sprite_name = 'item/rocket-fuel', color={r=255,g=255,b=255}},
-- {name = 'fluid-wagon', display_name = 'Fluid Wagon', sprite_name = 'item/fluid-wagon', color={r=255,g=255,b=255}},
}
Public.fallthrough_destination = {
dynamic_data = {},
static_params = {},
type = 'Lobby',
surface_name = Public.lobby_surface_name,
}
-- hacked to make spitters 25% cheaper:
Public.biterPollutionValues = {
['behemoth-biter'] = 400,
['behemoth-spitter'] = 150,
['big-biter'] = 80,
['big-spitter'] = 22,
['medium-biter'] = 20,
['medium-spitter'] = 9,
['small-biter'] = 4,
['small-spitter'] = 3
}
-- base game:
-- Public.biterPollutionValues = {
-- ['behemoth-biter'] = 400,
-- ['behemoth-spitter'] = 200,
-- ['big-biter'] = 80,
-- ['big-spitter'] = 30,
-- ['medium-biter'] = 20,
-- ['medium-spitter'] = 12,
-- ['small-biter'] = 4,
-- ['small-spitter'] = 4
-- }
--@TODO: Add a function to compare/print two version numbers
Public.max_extra_seconds_at_sea = 8 * 60
Public.loco_bp_1 = [[0eNqV0ttqwzAMBuB30bVTVufsVxljpKloBYkcbLdrCH73Oi6UMrxDLm3zf7KEFjgMF5wMsQO1APWaLaj3BSyduBvWOzdPCArI4QgCuBvX06B7PWpHVwQvgPiIN1B7L/4Mmo6Gl4j0HwKQHTnCR+F4mD/5Mh7QBDNVUsCkbYhoXusEJmsFzKCqAGtDgegej2/rj76J8il+aX1EzvozWpcwm10ZVbkrfcLJ/+u0vzvF07EuTOd0dlkc0k9NJpFyI1KnkGrrZJp0R/XWyUQnLEJcFfWykgKuaGxMyGZf1K2sC5nnTVl5fwdTR+VL]]
function Public.Dock_iconized_map()
local tiles = {}
for x = -15.5, 3.5 do
for y = 19.5, 0.5, -1 do
if (y <7 and y>2 and x == -2.5)
or (y == 6.5 and x<2 and x>-6)
then
tiles[#tiles + 1] = {name = Public.walkway_tile, position = {x = x, y = y}}
elseif y < 3 - Math.abs(x+5)^2/20 then --'island'
if y < 0.5 and x<-3 and x>-7 then
tiles[#tiles + 1] = {name = 'grass-1', position = {x = x, y = y}}
elseif y < 3 + Math.abs(x+5)^2/10 then
tiles[#tiles + 1] = {name = 'dirt-3', position = {x = x, y = y}}
else
tiles[#tiles + 1] = {name = 'dry-dirt', position = {x = x, y = y}}
end
elseif y<7 then
tiles[#tiles + 1] = {name = 'water', position = {x = x, y = y}}
end
end
end
return {
tiles = tiles,
entities = {},
}
end
-- function Public.Dock_iconized_map()
-- local tiles = {}
-- for x = -15.5, 3.5 do
-- for y = -19.5, -0.5 do
-- if (y >-7 and y<-2 and x == -2.5)
-- or (y == -6.5 and x<2 and x>-6)
-- then
-- tiles[#tiles + 1] = {name = Public.walkway_tile, position = {x = x, y = y}}
-- elseif y > -3 + Math.abs(x+5)^2/20 then --'island'
-- if y > -0.5 and x<-3 and x>-7 then
-- tiles[#tiles + 1] = {name = 'grass-1', position = {x = x, y = y}}
-- elseif y > -3 + Math.abs(x+5)^2/10 then
-- tiles[#tiles + 1] = {name = 'dirt-3', position = {x = x, y = y}}
-- else
-- tiles[#tiles + 1] = {name = 'dry-dirt', position = {x = x, y = y}}
-- end
-- elseif y>-7 then
-- tiles[#tiles + 1] = {name = 'water', position = {x = x, y = y}}
-- end
-- end
-- end
-- return {
-- tiles = tiles,
-- entities = {},
-- }
-- end
function Public.Lobby_iconized_map()
local tiles = {}
local width = 4
-- local height = 20
for x = -100, width do
for y = -35.5, 35.5 do
local negx = width - x
local negxnoisy = negx + Math.random(3)-2
if negxnoisy >= 50 then
tiles[#tiles + 1] = {name = 'grass-3', position = {x = x, y = y}}
elseif negxnoisy >= 30 and (negxnoisy-30) >= Math.abs(y)^2/200 then
tiles[#tiles + 1] = {name = 'dirt-4', position = {x = x, y = y}}
elseif negxnoisy >= 15 and (negxnoisy-15) >= Math.abs(y)^2/150 then
tiles[#tiles + 1] = {name = 'dirt-2', position = {x = x, y = y}}
else
if negx >= 5 and (negx-5) >= Math.abs(y)^2/100 then
tiles[#tiles + 1] = {name = 'sand-2', position = {x = x, y = y}}
elseif (negx <= 8 and Math.abs(y)<1) or (negx < 1 and Math.abs(y)<3) then
tiles[#tiles + 1] = {name = Public.walkway_tile, position = {x = x, y = y}}
else
tiles[#tiles + 1] = {name = 'water', position = {x = x, y = y}}
end
end
end
end
return {
tiles = tiles,
entities = {},
}
end
return Public