FILES ----- dungeon_worlds.config instance_worlds.config player.config systemworld.config system_objects.config versioning.config [NEW] codex\apex\apexspace1.codex [NEW] damage\impact.damage dialog\shipcrew.config dungeons\space\cultistship\cultistship.dungeon [NEW] dungeons\space\cultistship\middle_3.json [NEW] dungeons\space\hazards\hazard-pirate3.json [NEW] dungeons\space\merchantindustrialship\back_1.json [NEW] dungeons\space\merchantindustrialship\back_2.json [NEW] dungeons\space\merchantindustrialship\front_1.json [NEW] dungeons\space\merchantindustrialship\front_2.json [NEW] dungeons\space\merchantindustrialship\front_3.json [NEW] dungeons\space\merchantindustrialship\merchantindustrialship.dungeon dungeons\space\pirateship\pirateship.dungeon dungeons\space\spaceencounter\miniknogbase.json interface\cockpit\cockpit.config interface\cockpit\cockpit.lua items\active\weapons\bossdrop\miniknoglauncher\rocketstack.lua items\active\weapons\ranged\abilities\chargefire\chargefire.lua items\armors\backerhats\afrowig\mask.png items\armors\glitch\glitch-tier1\mask.png items\generic\meat\alienmeat.consumable items\generic\meat\rawbacon.consumable monsters\space\chiropterror\chiropterror.monstertype monsters\space\cosmostache\cosmostache.monstertype monsters\space\heavydrone\heavydrone.monstertype monsters\space\masteroid\masteroid.monstertype monsters\space\masteroidlarge\masteroidlarge.monstertype monsters\space\masteroidmid\masteroidmid.monstertype monsters\space\trifangle\trifangle.monstertype npcs\merchantpools.config npcs\biome\greenfinger.npctype npcs\crew\crewmemberengineer.npctype npcs\crew\crewmembermechanic.npctype npcs\space\astrocrewmate.npctype npcs\space\industrialcrewmate.npctype [NEW] npcs\space\industrialmerchant.npctype objects\generic\mechbeacon\mechbeacon.object objects\human\dangersignh\dangersignh.png objects\playerstation\expansionslot\expansionslothorizontal.object quests\other\transponder.questtemplate scripts\companions\crewbenefits.lua scripts\companions\player.lua scripts\companions\recruitspawner.lua [NEW] ships\shipupgrades.config ships\apex\apexT0.structure ships\apex\apexT1.structure ships\apex\apexT2.structure ships\apex\apexT3.structure ships\apex\apexT4.structure ships\apex\apexT5.structure ships\apex\apexT6.structure ships\apex\apexT7.structure ships\apex\apexT8.structure ships\avian\avianT0.structure ships\avian\avianT1.structure ships\avian\avianT2.structure ships\avian\avianT3.structure ships\avian\avianT4.structure ships\avian\avianT5.structure ships\avian\avianT6.structure ships\avian\avianT7.structure ships\avian\avianT8.structure ships\floran\floranT0.structure ships\floran\floranT1.structure ships\floran\floranT2.structure ships\floran\floranT3.structure ships\floran\floranT4.structure ships\floran\floranT5.structure ships\floran\floranT6.structure ships\floran\floranT7.structure ships\floran\floranT8.structure ships\glitch\glitchT0.structure ships\glitch\glitchT1.structure ships\glitch\glitchT2.structure ships\glitch\glitchT3.structure ships\glitch\glitchT4.structure ships\glitch\glitchT5.structure ships\glitch\glitchT6.structure ships\glitch\glitchT7.structure ships\glitch\glitchT8.structure ships\human\humanT0.structure ships\human\humanT1.structure ships\human\humanT2.structure ships\human\humanT3.structure ships\human\humanT4.structure ships\human\humanT5.structure ships\human\humanT6.structure ships\human\humanT7.structure ships\human\humanT8.structure ships\hylotl\hylotlT0.structure ships\hylotl\hylotlT1.structure ships\hylotl\hylotlT2.structure ships\hylotl\hylotlT3.structure ships\hylotl\hylotlT4.structure ships\hylotl\hylotlT5.structure ships\hylotl\hylotlT6.structure ships\hylotl\hylotlT7.structure ships\hylotl\hylotlT8.structure ships\novakid\novakidT0.structure ships\novakid\novakidT1.structure ships\novakid\novakidT2.structure ships\novakid\novakidT3.structure ships\novakid\novakidT4.structure ships\novakid\novakidT5.structure ships\novakid\novakidT6.structure ships\novakid\novakidT7.structure ships\novakid\novakidT8.structure stats\spacemonster_primary.lua tiles\materials\junk.png treasure\hunting.treasurepools treasure\space.treasurepools vehicles\modularmech\modularmech.lua vehicles\modularmech\modularmech.vehicle [NEW] versioning\ClientContext_5_6.lua [NEW] versioning\PlayerEntity_29_30.lua [NEW] versioning\System_1_2.lua DIFFS ----- dungeon_worlds.config 341a342,356 > "merchantindustrialship" : { > "primaryDungeon" : "merchantindustrialship", > "threatLevel" : 3, > "gravity" : 0, > "worldSize" : [1300, 200], > "dungeonBaseHeight" : 150, > "dungeonSurfaceHeight" : 150, > "ambientLightLevel" : [32, 32, 32], > "ambientNoises" : "/sfx/environmental/space_loop4.ogg", > "musicTrack" : "/music/lava-exploration1.ogg", > "environmentStatusEffects" : ["dontstarve"], > "worldEdgeForceRegions" : "TopAndBottom", > "biome" : "space" > }, > instance_worlds.config 895c895 < "dungeonWorld" : "cultistship", --- > "dungeonWorld" : "merchantindustrialship", 955a956,986 > "beamUpRule" : "Anywhere", > "disableDeathDrops" : true, > > "tempWorldDeleteTime" : 600000, > > "skyParameters" : { > "dayLength" : 10000, > "surfaceLevel" : 1000, > "spaceLevel" : 3000, > "seed" : -5288806180628666923, > > "skyType" : "barren", > "skyColoring" : { > "mainColor" : [200, 200, 255], > > "morningColors" : [[200, 200, 255], [200, 200, 255]], > "dayColors" : [[200, 200, 255], [200, 200, 255]], > "eveningColors" : [[200, 200, 255], [200, 200, 255]], > "nightColors" : [[200, 200, 255], [200, 200, 255]], > > "morningLightColor" : [120, 120, 120], > "dayLightColor" : [120, 120, 120], > "eveningLightColor" : [120, 120, 120], > "nightLightColor" : [120, 120, 120] > } > } > }, > > "merchantindustrialship" : { > "type" : "FloatingDungeon", > "dungeonWorld" : "merchantindustrialship", player.config 731a732,733 > "shipUpgradeDiminishingReturns" : 0.5, > systemworld.config 35a36,37 > // keep this distance from other orbits > "objectSpawnPadding" : 4, 37d38 < "initialObjectRange" : [30, 140], 50a52,55 > // estimated time for a full cycle of objects to appear or disappear > // used to spawn an initial set of temporary objects > "objectSpawnCycle" : 1800, > "minObjectOrbitTime" : 180, 54c59,60 < [0.1, "friendlyship"], --- > [0.1, "researchship"], > [0.1, "merchantindustrialship"], system_objects.config 17c17 < "orbitTime" : [0, 0], --- > "lifeTime" : [0, 0], 41c41 < "orbitTime" : [0, 0], --- > "lifeTime" : [0, 0], 65c65 < "orbitTime" : [0, 0], --- > "lifeTime" : [0, 0], 89c89 < "orbitTime" : [0, 0], --- > "lifeTime" : [0, 0], 113c113 < "orbitTime" : [0, 0], --- > "lifeTime" : [0, 0], 136c136 < "orbitTime" : [1500, 2100], --- > "lifeTime" : [1500, 2100], 155c155 < "orbitTime" : [1500, 2100], --- > "lifeTime" : [1500, 2100], 163c163 < "friendlyship" : { --- > "researchship" : { 174c174,193 < "orbitTime" : [1500, 2100], --- > "lifeTime" : [1500, 2100], > "parameters" : { > "icon" : "/celestial/system/ships/npcship.png", > "displayName" : "Friendly Ship", > "description" : "This ship acknowledges our communications and her captain cordially invites us to pay a visit." > } > }, > > "merchantindustrialship" : { > "warpAction" : "InstanceWorld:merchantindustrialship", > "skyParameters" : { > "seed" : 0, > "horizonClouds" : false, > "horizonImages" : [ { "left": "/celestial/system/ships/shiphorizonleft.png", "right": "/celestial/system/ships/shiphorizonright.png" } ] > }, > > "moving" : true, > "speed" : 15.0, > "orbitRange" : [1, 1], > "lifeTime" : [1500, 2100], 193d211 < "orbitTime" : [1500, 2100], 196a215 > "lifeTime" : [1500, 2100], versioning.config 4c4 < "System" : 1, --- > "System" : 2, 11c11 < "PlayerEntity" : 29, --- > "PlayerEntity" : 30, dialog\shipcrew.config 81c81 < "Bored. Maintaining a spaceship is mind-numbing work - I want to play a game of chess!", --- > "Bored. Maintaining a spaceship is mind-numbing work - I want to play a game of clunkey jacks!", dungeons\space\cultistship\cultistship.dungeon 10,11c10,11 < "maxParts" : 3, < "protected" : false --- > "maxParts" : 4, > "protected" : true 15a16,359 > // ENEMY GROUPS > { > "name" : "smallgroup-low1", > "rules" : [ > [ "ignorePartMaximumRule" ] > ], > "def" : [ "tmx", "/dungeons/space/hazards/monstergroups/smallgroup-low1.json" ], > "maximumThreatLevel" : 3.9, > "chance" : 1, > "markDungeonId" : false > }, > { > "name" : "smallgroup-low2", > "rules" : [ > [ "ignorePartMaximumRule" ] > ], > "def" : [ "tmx", "/dungeons/space/hazards/monstergroups/smallgroup-low2.json" ], > "maximumThreatLevel" : 3.9, > "chance" : 1, > "markDungeonId" : false > }, > { > "name" : "smallgroup-low3", > "rules" : [ > [ "ignorePartMaximumRule" ] > ], > "def" : [ "tmx", "/dungeons/space/hazards/monstergroups/smallgroup-low3.json" ], > "maximumThreatLevel" : 3.9, > "chance" : 1, > "markDungeonId" : false > }, > { > "name" : "smallgroup-low4", > "rules" : [ > [ "ignorePartMaximumRule" ] > ], > "def" : [ "tmx", "/dungeons/space/hazards/monstergroups/smallgroup-low4.json" ], > "maximumThreatLevel" : 3.9, > "chance" : 1, > "markDungeonId" : false > }, > { > "name" : "smallgroup-low5", > "rules" : [ > [ "ignorePartMaximumRule" ] > ], > "def" : [ "tmx", "/dungeons/space/hazards/monstergroups/smallgroup-low5.json" ], > "maximumThreatLevel" : 3.9, > "chance" : 1, > "markDungeonId" : false > }, > { > "name" : "smallgroup-mid1", > "rules" : [ > [ "ignorePartMaximumRule" ] > ], > "def" : [ "tmx", "/dungeons/space/hazards/monstergroups/smallgroup-mid1.json" ], > "minimumThreatLevel" : 4, > "maximumThreatLevel" : 4.9, > "chance" : 1, > "markDungeonId" : false > }, > { > "name" : "smallgroup-mid2", > "rules" : [ > [ "ignorePartMaximumRule" ] > ], > "def" : [ "tmx", "/dungeons/space/hazards/monstergroups/smallgroup-mid2.json" ], > "minimumThreatLevel" : 4, > "maximumThreatLevel" : 4.9, > "chance" : 1, > "markDungeonId" : false > }, > { > "name" : "smallgroup-mid3", > "rules" : [ > [ "ignorePartMaximumRule" ] > ], > "def" : [ "tmx", "/dungeons/space/hazards/monstergroups/smallgroup-mid3.json" ], > "minimumThreatLevel" : 4, > "maximumThreatLevel" : 4.9, > "chance" : 1, > "markDungeonId" : false > }, > { > "name" : "smallgroup-mid4", > "rules" : [ > [ "ignorePartMaximumRule" ] > ], > "def" : [ "tmx", "/dungeons/space/hazards/monstergroups/smallgroup-mid4.json" ], > "minimumThreatLevel" : 4, > "maximumThreatLevel" : 4.9, > "chance" : 1, > "markDungeonId" : false > }, > { > "name" : "smallgroup-mid5", > "rules" : [ > [ "ignorePartMaximumRule" ] > ], > "def" : [ "tmx", "/dungeons/space/hazards/monstergroups/smallgroup-mid5.json" ], > "minimumThreatLevel" : 4, > "maximumThreatLevel" : 4.9, > "chance" : 1, > "markDungeonId" : false > }, > { > "name" : "smallgroup-high1", > "rules" : [ > [ "ignorePartMaximumRule" ] > ], > "def" : [ "tmx", "/dungeons/space/hazards/monstergroups/smallgroup-high1.json" ], > "minimumThreatLevel" : 5, > "chance" : 1, > "markDungeonId" : false > }, > { > "name" : "smallgroup-high2", > "rules" : [ > [ "ignorePartMaximumRule" ] > ], > "def" : [ "tmx", "/dungeons/space/hazards/monstergroups/smallgroup-high2.json" ], > "minimumThreatLevel" : 5, > "chance" : 1, > "markDungeonId" : false > }, > { > "name" : "smallgroup-high3", > "rules" : [ > [ "ignorePartMaximumRule" ] > ], > "def" : [ "tmx", "/dungeons/space/hazards/monstergroups/smallgroup-high3.json" ], > "minimumThreatLevel" : 5, > "chance" : 1, > "markDungeonId" : false > }, > { > "name" : "smallgroup-high4", > "rules" : [ > [ "ignorePartMaximumRule" ] > ], > "def" : [ "tmx", "/dungeons/space/hazards/monstergroups/smallgroup-high4.json" ], > "minimumThreatLevel" : 5, > "chance" : 1, > "markDungeonId" : false > }, > { > "name" : "smallgroup-high5", > "rules" : [ > [ "ignorePartMaximumRule" ] > ], > "def" : [ "tmx", "/dungeons/space/hazards/monstergroups/smallgroup-high5.json" ], > "minimumThreatLevel" : 5, > "chance" : 1, > "markDungeonId" : false > }, > > { > "name" : "largegroup-low1", > "rules" : [ > [ "ignorePartMaximumRule" ] > ], > "def" : [ "tmx", "/dungeons/space/hazards/monstergroups/largegroup-low1.json" ], > "maximumThreatLevel" : 3.9, > "chance" : 1, > "markDungeonId" : false > }, > { > "name" : "largegroup-low2", > "rules" : [ > [ "ignorePartMaximumRule" ] > ], > "def" : [ "tmx", "/dungeons/space/hazards/monstergroups/largegroup-low2.json" ], > "maximumThreatLevel" : 3.9, > "chance" : 1, > "markDungeonId" : false > }, > { > "name" : "largegroup-low3", > "rules" : [ > [ "ignorePartMaximumRule" ] > ], > "def" : [ "tmx", "/dungeons/space/hazards/monstergroups/largegroup-low3.json" ], > "maximumThreatLevel" : 3.9, > "chance" : 1, > "markDungeonId" : false > }, > { > "name" : "largegroup-low4", > "rules" : [ > [ "ignorePartMaximumRule" ] > ], > "def" : [ "tmx", "/dungeons/space/hazards/monstergroups/largegroup-low4.json" ], > "maximumThreatLevel" : 3.9, > "chance" : 1, > "markDungeonId" : false > }, > { > "name" : "largegroup-low5", > "rules" : [ > [ "ignorePartMaximumRule" ] > ], > "def" : [ "tmx", "/dungeons/space/hazards/monstergroups/largegroup-low5.json" ], > "maximumThreatLevel" : 3.9, > "chance" : 1, > "markDungeonId" : false > }, > { > "name" : "largegroup-mid1", > "rules" : [ > [ "ignorePartMaximumRule" ] > ], > "def" : [ "tmx", "/dungeons/space/hazards/monstergroups/largegroup-mid1.json" ], > "minimumThreatLevel" : 4, > "maximumThreatLevel" : 4.9, > "chance" : 1, > "markDungeonId" : false > }, > { > "name" : "largegroup-mid2", > "rules" : [ > [ "ignorePartMaximumRule" ] > ], > "def" : [ "tmx", "/dungeons/space/hazards/monstergroups/largegroup-mid2.json" ], > "minimumThreatLevel" : 4, > "maximumThreatLevel" : 4.9, > "chance" : 1, > "markDungeonId" : false > }, > { > "name" : "largegroup-mid3", > "rules" : [ > [ "ignorePartMaximumRule" ] > ], > "def" : [ "tmx", "/dungeons/space/hazards/monstergroups/largegroup-mid3.json" ], > "minimumThreatLevel" : 4, > "maximumThreatLevel" : 4.9, > "chance" : 1, > "markDungeonId" : false > }, > { > "name" : "largegroup-mid4", > "rules" : [ > [ "ignorePartMaximumRule" ] > ], > "def" : [ "tmx", "/dungeons/space/hazards/monstergroups/largegroup-mid4.json" ], > "minimumThreatLevel" : 4, > "maximumThreatLevel" : 4.9, > "chance" : 1, > "markDungeonId" : false > }, > { > "name" : "largegroup-mid5", > "rules" : [ > [ "ignorePartMaximumRule" ] > ], > "def" : [ "tmx", "/dungeons/space/hazards/monstergroups/largegroup-mid5.json" ], > "minimumThreatLevel" : 4, > "maximumThreatLevel" : 4.9, > "chance" : 1, > "markDungeonId" : false > }, > { > "name" : "largegroup-high1", > "rules" : [ > [ "ignorePartMaximumRule" ] > ], > "def" : [ "tmx", "/dungeons/space/hazards/monstergroups/largegroup-high1.json" ], > "minimumThreatLevel" : 5, > "chance" : 1, > "markDungeonId" : false > }, > { > "name" : "largegroup-high2", > "rules" : [ > [ "ignorePartMaximumRule" ] > ], > "def" : [ "tmx", "/dungeons/space/hazards/monstergroups/largegroup-high2.json" ], > "minimumThreatLevel" : 5, > "chance" : 1, > "markDungeonId" : false > }, > { > "name" : "largegroup-high3", > "rules" : [ > [ "ignorePartMaximumRule" ] > ], > "def" : [ "tmx", "/dungeons/space/hazards/monstergroups/largegroup-high3.json" ], > "minimumThreatLevel" : 5, > "chance" : 1, > "markDungeonId" : false > }, > { > "name" : "largegroup-high4", > "rules" : [ > [ "ignorePartMaximumRule" ] > ], > "def" : [ "tmx", "/dungeons/space/hazards/monstergroups/largegroup-high4.json" ], > "minimumThreatLevel" : 5, > "chance" : 1, > "markDungeonId" : false > }, > { > "name" : "largegroup-high5", > "rules" : [ > [ "ignorePartMaximumRule" ] > ], > "def" : [ "tmx", "/dungeons/space/hazards/monstergroups/largegroup-high5.json" ], > "minimumThreatLevel" : 5, > "chance" : 1, > "markDungeonId" : false > }, > > // HAZARD ZONE > { > "name" : "hazard-pirate1", > "rules" : [ > [ "ignorePartMaximumRule" ] > ], > "def" : [ "tmx", "/dungeons/space/hazards/hazard-pirate1.json" ], > "chance" : 1, > "markDungeonId" : false > }, > { > "name" : "hazard-pirate2", > "rules" : [ > [ "ignorePartMaximumRule" ] > ], > "def" : [ "tmx", "/dungeons/space/hazards/hazard-pirate2.json" ], > "chance" : 1, > "markDungeonId" : false > }, > { > "name" : "hazard-pirate3", > "rules" : [ > [ "ignorePartMaximumRule" ] > ], > "def" : [ "tmx", "/dungeons/space/hazards/hazard-pirate3.json" ], > "chance" : 1, > "markDungeonId" : false > }, > > // CULTIST SHIP > 35c379 < [ "doNotCombineWith", [ "middle_1", "middle_2" ] ] --- > [ "doNotCombineWith", [ "middle_1", "middle_2", "middle_3" ] ] 43c387 < [ "doNotCombineWith", [ "middle_1", "middle_2" ] ] --- > [ "doNotCombineWith", [ "middle_1", "middle_2", "middle_3" ] ] 45a390,397 > "chance" : 0.3 > }, > { > "name" : "middle_3", > "rules" : [ > [ "doNotCombineWith", [ "middle_1", "middle_2", "middle_3" ] ] > ], > "def" : [ "tmx", "middle_3.json" ], dungeons\space\pirateship\pirateship.dungeon 11c11 < "protected" : false --- > "protected" : true 344a345,353 > "chance" : 1, > "markDungeonId" : false > }, > { > "name" : "hazard-pirate3", > "rules" : [ > [ "ignorePartMaximumRule" ] > ], > "def" : [ "tmx", "/dungeons/space/hazards/hazard-pirate3.json" ], dungeons\space\spaceencounter\miniknogbase.json [TMX file differences are left out for huge size.] interface\cockpit\cockpit.config 298c298 < "value" : "FTL travel will consume ^green;100 fuel^reset;.\nConfirm to proceed." --- > "value" : "FTL travel will consume ^green;%s fuel^reset;.\nConfirm to proceed." 1198,1199c1198,1199 < "valid" : "FTL travel will consume ^green;100 fuel^reset;.\nConfirm to proceed.", < "invalid" : "FTL travel requires ^red;100 fuel^reset;.\n Not enough fuel to proceed." --- > "valid" : "FTL travel will consume ^green;%i fuel^reset;.\nConfirm to proceed.", > "invalid" : "FTL travel requires ^red;%i fuel^reset;.\n Not enough fuel to proceed." interface\cockpit\cockpit.lua 31a32,33 > > player.lounge(pane.sourceEntity()) 280,282c282,284 < local fuelCost = config.getParameter("jumpFuelCost") < if player.isAdmin() or fuelAmount >= fuelCost then < widget.setText("jumpDialog.text", config.getParameter("jumpDialog.valid")) --- > local cost = fuelCost() > if player.isAdmin() or fuelAmount >= cost then > widget.setText("jumpDialog.text", string.format(config.getParameter("jumpDialog.valid"), cost)) 288c290 < widget.setText("jumpDialog.text", config.getParameter("jumpDialog.invalid")) --- > widget.setText("jumpDialog.text", string.format(config.getParameter("jumpDialog.invalid"), cost)) 318a321,326 > function fuelCost() > local cost = config.getParameter("jumpFuelCost") > sb.logInfo("%s %s", world.getProperty("ship.fuelEfficiency"), cost - cost * (world.getProperty("ship.fuelEfficiency") or 0.0)) > return util.round(cost - cost * (world.getProperty("ship.fuelEfficiency") or 0.0)) > end > 466,468c474,475 < local fuelCost = config.getParameter("jumpFuelCost") < < if player.isAdmin() or (fuelAmount and fuelAmount >= fuelCost) then --- > local cost = fuelCost() > if player.isAdmin() or (fuelAmount and fuelAmount >= cost) then 474c481 < world.setProperty("ship.fuel", fuelAmount - fuelCost) --- > world.setProperty("ship.fuel", fuelAmount - cost) items\active\weapons\bossdrop\miniknoglauncher\rocketstack.lua 59a60,64 > if world.lineTileCollision(mcontroller.position(), self:firePosition()) then > self:setState(self.cooldown) > return > end > items\active\weapons\ranged\abilities\chargefire\chargefire.lua 53a54,59 > if world.lineTileCollision(mcontroller.position(), self:firePosition()) then > animator.setAnimationState("firing", "off") > self:setState(self.cooldown) > return > end > items\generic\meat\alienmeat.consumable 2c2 < "itemName" : "rawbacon", --- > "itemName" : "alienmeat", 4c4 < "price" : 20, --- > "price" : 4, 7,9c7,9 < "inventoryIcon" : "rawbacon.png", < "description" : "Raw strips of bacon. I should cook them first, right?", < "shortdescription" : "Raw Bacon", --- > "inventoryIcon" : "alienmeat.png", > "description" : "A raw slab of weird, stringy alien meat. Maybe I should cook it.", > "shortdescription" : "Raw Steak", 23,24c23 < ], < "learnBlueprintsOnPickup" : [ "sweetmeat" ] --- > ] items\generic\meat\rawbacon.consumable 2c2 < "itemName" : "alienmeat", --- > "itemName" : "rawbacon", 4c4 < "price" : 4, --- > "price" : 20, 7,9c7,9 < "inventoryIcon" : "alienmeat.png", < "description" : "A raw slab of weird, stringy alien meat. Maybe I should cook it.", < "shortdescription" : "Raw Steak", --- > "inventoryIcon" : "rawbacon.png", > "description" : "Raw strips of bacon. I should cook them first, right?", > "shortdescription" : "Raw Bacon", 23c23,24 < ] --- > ], > "learnBlueprintsOnPickup" : [ "sweetmeat" ] monsters\space\chiropterror\chiropterror.monstertype 107c107 < "damageSourceKind" : "lash", --- > "damageSourceKind" : "impact", monsters\space\cosmostache\cosmostache.monstertype 77c77 < "damageSourceKind" : "lash", --- > "damageSourceKind" : "impact", monsters\space\heavydrone\heavydrone.monstertype 28c28 < "damageSourceKind" : "lash", --- > "damageSourceKind" : "impact", monsters\space\masteroid\masteroid.monstertype 111c111 < "damageSourceKind" : "lash", --- > "damageSourceKind" : "impact", monsters\space\masteroidlarge\masteroidlarge.monstertype 75c75 < "damageSourceKind" : "lash", --- > "damageSourceKind" : "impact", monsters\space\masteroidmid\masteroidmid.monstertype 75c75 < "damageSourceKind" : "lash", --- > "damageSourceKind" : "impact", monsters\space\trifangle\trifangle.monstertype 109c109 < "damageSourceKind" : "lash", --- > "damageSourceKind" : "impact", npcs\merchantpools.config 374a375,387 > "industrialmerchant" : [ > [0, [ > { "item" : { "name" : "industrialchair" }, "rarity" : 0.2 }, > { "item" : { "name" : "industrialtable" }, "rarity" : 0.2 }, > { "item" : { "name" : "industriallight" }, "rarity" : 0.2 }, > { "item" : { "name" : "industrialcrate" }, "rarity" : 0.2 }, > { "item" : { "name" : "industrialdoor" }, "rarity" : 0.2 }, > { "item" : { "name" : "industrialstoragelocker" }, "rarity" : 0.2 }, > { "item" : { "name" : "industrialdisplay" }, "rarity" : 0.2 }, > { "item" : { "name" : "industrialcomputer" }, "rarity" : 0.2 } > ]] > ], > npcs\biome\greenfinger.npctype 19,21c19,21 < "Hello human, I am thisss tribe's Greenfinger. Don't blame them if they get a bit exciteable, that's jussst how Floran are!", < "Greetings, human. I am Greenfinger . It iss my role to guide the Floran of this tribe.", < "Welcome to our tribe, human. I am Greenfinger , and we shall treat you with resspect as long as you do the sssame." --- > "Hello ape, I am thisss tribe's Greenfinger. Don't blame them if they get a bit exciteable, that's jussst how Floran are!", > "Greetings, ape. I am Greenfinger . It iss my role to guide the Floran of this tribe.", > "Welcome to our tribe, ape. I am Greenfinger , and we shall treat you with resspect as long as you do the sssame." 24,26c24,26 < "Hello human, I am thisss tribe's Greenfinger. Don't blame them if they get a bit exciteable, that's jussst how Floran are!", < "Greetings, human. I am Greenfinger . It iss my role to guide the Floran of this tribe.", < "Welcome to our tribe, human. I am Greenfinger , and we shall treat you with resspect as long as you do the sssame." --- > "Hello bird friend, I am thisss tribe's Greenfinger. Don't blame them if they get a bit exciteable, that's jussst how Floran are!", > "Greetings, bird friend. I am Greenfinger . It iss my role to guide the Floran of this tribe.", > "Welcome to our tribe, bird friend. I am Greenfinger , and we shall treat you with resspect as long as you do the sssame." npcs\crew\crewmemberengineer.npctype 19,22c19,21 < "type" : "PeriodicMultiplier", < "property" : "fuelEfficiency", < "value" : 1.1, < "period" : 1000 --- > "type" : "ShipUpgradeBenefit", > "property" : "shipSpeed", > "value" : 3.75 33,40c32 < "I'll get to work on improving your fuel efficiency!" < ] < } < }, < "shipImprovementApplied" : { < "default" : { < "default" : [ < "It's done! Fuel efficiency is up another 10%! I'll keep working on it!" --- > "I'll keep your engines in good shape. Thrust velocity is up by 25%!" npcs\crew\crewmembermechanic.npctype 19,22c19,21 < "type" : "PeriodicIncrease", < "property" : "maxFuel", < "value" : 100, < "period" : 1000 --- > "type" : "ShipUpgradeBenefit", > "property" : "fuelEfficiency", > "value" : 0.1 33,40c32 < "Wow, this fuel tank is tiny! I'll fix that..." < ] < } < }, < "shipImprovementApplied" : { < "default" : { < "default" : [ < "Fuel tank capacity increased, captain! Let's see if I can't add some more!" --- > "I'll keep clearing out the carborator while I'm here. Fuel efficiency is up 10%!" npcs\space\astrocrewmate.npctype 3c3 < "baseType" : "guard", --- > "baseType" : "villager", npcs\space\industrialcrewmate.npctype 3c3 < "baseType" : "guard", --- > "baseType" : "villager", 22,24c22 < "head" : [ < { "name" : "industrialcrewhead", "parameters" : { "colorIndex" : [0] } } < ], --- > "head" : [ { "name" : "industrialcrewhead" } ], objects\generic\mechbeacon\mechbeacon.object 56c56,59 < // "interactive" : false, --- > "interactive" : false, > > "breakDropOptions" : [ ], > "smashDropOptions" : [ ], objects\playerstation\expansionslot\expansionslothorizontal.object 82a83 > "unbreakable" : true, quests\other\transponder.questtemplate 4c4 < "text" : "Would you like to deploy your very own space station? I can craft for you your very own ^orange;Station Transponder^white;, and all it will take is some resources! \nSimply ^green;bring 50 ^orange;Titanium Bars^white;, ^green;50 ^orange;Gold Bars^white;, ^green;50 ^orange;Silver Bars^white; and ^green;1000 ^orange; pixels ^green;to me or any other Transponder vendor^white;!", --- > "text" : "Would you like to deploy your very own space station? I can craft for you your very own ^orange;Station Transponder^white;, and all it will take is some resources! \nSimply ^green;bring 50 ^orange;Titanium Bars^white;, ^green;50 ^orange;Gold Bars^white;, ^green;50 ^orange;Silver Bars^white; and ^green;1000^orange; pixels ^green;to me or any other Transponder vendor^white;!", scripts\companions\crewbenefits.lua 35a36,40 > -- returns a *list* of ship upgrade configurations > function Benefit:shipUpgrades() > return {} > end > 64,66c69,72 < local PeriodicBenefit = setmetatable({}, Benefit) < PeriodicBenefit.__index = PeriodicBenefit < PeriodicBenefit.operation = nil --- > local ShipUpgradeBenefit = setmetatable({}, Benefit) > ShipUpgradeBenefit.__index = ShipUpgradeBenefit > ShipUpgradeBenefit.operation = nil > benefitTypes.ShipUpgradeBenefit = ShipUpgradeBenefit 68,69c74 < function PeriodicBenefit:init(store) < self.startTime = (store and store.startTime) or world.time() --- > function ShipUpgradeBenefit:init(store) 72c77 < function PeriodicBenefit:store() --- > function ShipUpgradeBenefit:shipUpgrades() 74,96c79,80 < startTime = self.startTime < } < end < < function PeriodicBenefit:applyOperation() < local shipUpgrades = player.shipUpgrades() < assert(shipUpgrades[self.definition.property] and self.operation) < shipUpgrades[self.definition.property] = self.operation(shipUpgrades[self.definition.property], self.definition.value) < player.upgradeShip(shipUpgrades) < end < < function PeriodicBenefit:shipUpdate(recruit, dt) < local now = world.time() < local elapsed = now - self.startTime < if elapsed >= self.definition.period then < self:applyOperation() < self.startTime = now < < recruit:sendMessage("notify", { < type = "shipImprovementApplied", < sourceId = entity.id() < }) < end --- > { [self.definition.property] = self.definition.value } > } 99,106d82 < benefitTypes.PeriodicMultiplier = setmetatable({}, PeriodicBenefit) < benefitTypes.PeriodicMultiplier.__index = benefitTypes.PeriodicMultiplier < benefitTypes.PeriodicMultiplier.operation = function (a,b) return a*b end < < benefitTypes.PeriodicIncrease = setmetatable({}, PeriodicBenefit) < benefitTypes.PeriodicIncrease.__index = benefitTypes.PeriodicIncrease < benefitTypes.PeriodicIncrease.operation = function (a,b) return a+b end < 144a121,128 > end > > function Composite:shipUpgrades() > local upgrades = {} > for _,benefit in pairs(self.benefits) do > util.appendLists(upgrades, benefit:shipUpgrades()) > end > return upgrades scripts\companions\player.lua 109a110,133 > function updateShipUpgrades() > local diminishingReturns = config.getParameter("shipUpgradeDiminishingReturns") > local upgrades = root.assetJson("/ships/shipupgrades.config") > local appliedCount = {} > > local modifiers = jobject() > for _,upgrade in pairs(recruitSpawner:getShipUpgrades()) do > for k,v in pairs(upgrade) do > local count = appliedCount[k] or 0 > if not upgrades[k] then > error(string.format("No base value set for ship upgrade %s in /ship/shipupgrades.config. Cannot apply crew benefit.")) > end > local value = v * (diminishingReturns ^ count) > modifiers[k] = (modifiers[k] or 0) + value > appliedCount[k] = count + 1 > end > end > for property,value in pairs(modifiers) do > upgrades[property] = upgrades[property] + value > end > > player.upgradeShip(upgrades) > end > 186a211 > updateShipUpgrades() scripts\companions\recruitspawner.lua 215a216,223 > function recruitSpawner:getShipUpgrades() > local upgrades = {} > self:forEachCrewMember(function (recruit) > util.appendLists(upgrades, recruit.benefits:shipUpgrades()) > end) > return upgrades > end > ships\apex\apexT0.structure 5d4 < "maxFuel" : 1000, ships\apex\apexT1.structure 5d4 < "maxFuel" : 1000, ships\apex\apexT2.structure 5d4 < "maxFuel" : 1000, ships\apex\apexT3.structure 5d4 < "maxFuel" : 1000, ships\apex\apexT4.structure 5d4 < "maxFuel" : 1000, ships\apex\apexT5.structure 5d4 < "maxFuel" : 1000, ships\apex\apexT6.structure 5d4 < "maxFuel" : 1000, ships\apex\apexT7.structure 5d4 < "maxFuel" : 1000, ships\apex\apexT8.structure 5d4 < "maxFuel" : 1000, ships\avian\avianT0.structure 5d4 < "maxFuel" : 1000, ships\avian\avianT1.structure 5d4 < "maxFuel" : 1000, ships\avian\avianT2.structure 5d4 < "maxFuel" : 1000, ships\avian\avianT3.structure 5d4 < "maxFuel" : 1000, ships\avian\avianT4.structure 5d4 < "maxFuel" : 1000, ships\avian\avianT5.structure 5d4 < "maxFuel" : 1000, ships\avian\avianT6.structure 5d4 < "maxFuel" : 1000, ships\avian\avianT7.structure 5d4 < "maxFuel" : 1000, ships\avian\avianT8.structure 5d4 < "maxFuel" : 1000, ships\floran\floranT0.structure 5d4 < "maxFuel" : 1000, ships\floran\floranT1.structure 5d4 < "maxFuel" : 1000, ships\floran\floranT2.structure 5d4 < "maxFuel" : 1000, ships\floran\floranT3.structure 5d4 < "maxFuel" : 1000, ships\floran\floranT4.structure 5d4 < "maxFuel" : 1000, ships\floran\floranT5.structure 5d4 < "maxFuel" : 1000, ships\floran\floranT6.structure 5d4 < "maxFuel" : 1000, ships\floran\floranT7.structure 5d4 < "maxFuel" : 1000, ships\floran\floranT8.structure 5d4 < "maxFuel" : 1000, ships\glitch\glitchT0.structure 5d4 < "maxFuel" : 1000, ships\glitch\glitchT1.structure 5d4 < "maxFuel" : 1000, ships\glitch\glitchT2.structure 5d4 < "maxFuel" : 1000, ships\glitch\glitchT3.structure 5d4 < "maxFuel" : 1000, ships\glitch\glitchT4.structure 5d4 < "maxFuel" : 1000, ships\glitch\glitchT5.structure 5d4 < "maxFuel" : 1000, ships\glitch\glitchT6.structure 5d4 < "maxFuel" : 1000, ships\glitch\glitchT7.structure 5d4 < "maxFuel" : 1000, ships\glitch\glitchT8.structure 5d4 < "maxFuel" : 1000, ships\human\humanT0.structure 5d4 < "maxFuel" : 1000, ships\human\humanT1.structure 5d4 < "maxFuel" : 1000, ships\human\humanT2.structure 5d4 < "maxFuel" : 1000, ships\human\humanT3.structure 5d4 < "maxFuel" : 1000, ships\human\humanT4.structure 5d4 < "maxFuel" : 1000, ships\human\humanT5.structure 5d4 < "maxFuel" : 1000, ships\human\humanT6.structure 5d4 < "maxFuel" : 1000, ships\human\humanT7.structure 5d4 < "maxFuel" : 1000, ships\human\humanT8.structure 5d4 < "maxFuel" : 1000, ships\hylotl\hylotlT0.structure 5d4 < "maxFuel" : 1000, ships\hylotl\hylotlT1.structure 5d4 < "maxFuel" : 1000, ships\hylotl\hylotlT2.structure 5d4 < "maxFuel" : 1000, ships\hylotl\hylotlT3.structure 5d4 < "maxFuel" : 1000, ships\hylotl\hylotlT4.structure 5d4 < "maxFuel" : 1000, ships\hylotl\hylotlT5.structure 5d4 < "maxFuel" : 1000, ships\hylotl\hylotlT6.structure 5d4 < "maxFuel" : 1000, ships\hylotl\hylotlT7.structure 5d4 < "maxFuel" : 1000, ships\hylotl\hylotlT8.structure 5d4 < "maxFuel" : 1000, ships\novakid\novakidT0.structure 5d4 < "maxFuel" : 1000, ships\novakid\novakidT1.structure 5d4 < "maxFuel" : 1000, ships\novakid\novakidT2.structure 5d4 < "maxFuel" : 1000, ships\novakid\novakidT3.structure 5d4 < "maxFuel" : 1000, ships\novakid\novakidT4.structure 5d4 < "maxFuel" : 1000, ships\novakid\novakidT5.structure 5d4 < "maxFuel" : 1000, ships\novakid\novakidT6.structure 5d4 < "maxFuel" : 1000, ships\novakid\novakidT7.structure 5d4 < "maxFuel" : 1000, ships\novakid\novakidT8.structure 5d4 < "maxFuel" : 1000, stats\spacemonster_primary.lua 1a2,3 > require "/scripts/util.lua" > require "/scripts/status.lua" 8a11,27 > > self.damageListener = damageListener("inflictedHits", function(notifications) > for _, notification in ipairs(notifications) do > if notification.damageSourceKind == "impact" then > local tarVel = vec2.mul(world.entityVelocity(notification.targetEntityId), 0.85) > local tarPos = world.entityPosition(notification.targetEntityId) > local relativeVelocity = vec2.sub(tarVel, mcontroller.velocity()) > local relativePosition = world.distance(mcontroller.position(), tarPos) > local angleDiff = util.angleDiff(vec2.angle(relativeVelocity), vec2.angle(relativePosition)) > if math.abs(angleDiff) < math.pi / 2 then > local normal = vec2.norm(relativePosition) > local bounceVelocity = vec2.mul(vec2.mul(normal, 2 * 0.75), vec2.dot(relativeVelocity, normal)) > mcontroller.setVelocity(vec2.add(mcontroller.velocity(), bounceVelocity)) > end > end > end > end) 112a132,133 > > self.damageListener:update() treasure\hunting.treasurepools 520c520 < {"weight" : 0.001, "item" : "saveranaf"} --- > {"weight" : 0.001, "item" : "scaveranaf"} treasure\space.treasurepools 291,307d290 < "industrialcargoCommon" : [ < [1, { < "pool" : [ < {"weight" : 0.3, "pool" : "money"}, < {"weight" : 0.85, "pool" : "commonSpaceItem"}, < {"weight" : 0.02, "item" : "industrialcrewhead" } < ], < "poolRounds" : [ < [0.40, 0], < [0.40, 1], < [0.30, 2], < [0.20, 3] < ], < "allowDuplication" : false < }] < ], < 324c307 < "industrialcargoRare" : [ --- > "humanspacecodex" : [ 327,340c310,311 < {"pool" : "rareSpaceItem"} < ], < "poolRounds" : [ < [0.1, 1], < [0.4, 2], < [0.4, 3], < [0.1, 4] < ], < "pool" : [ < {"weight" : 0.30, "pool" : "chestMoney"}, < {"weight" : 0.65, "pool" : "commonSpaceItem"}, < {"weight" : 0.05, "pool" : "rareSpaceItem"} < ], < "allowDuplication" : false --- > {"item" : [ "humanspace1-codex", 1]} > ] 344c315 < "humanspacecodex" : [ --- > "hylotlspacecodex" : [ 347c318 < {"item" : [ "humanspace1-codex", 1]} --- > {"item" : [ "hylotlspace1-codex", 1]} 352c323 < "hylotlspacecodex" : [ --- > "apexspacecodex" : [ 355c326 < {"item" : [ "hylotlspace1-codex", 1]} --- > {"item" : [ "apexspace1-codex", 1]} vehicles\modularmech\modularmech.lua 419d418 < vehicle.setMovingCollisionEnabled("body", true) 421d419 < vehicle.setDamageSourceEnabled("bumperFlight", self.flightMode) 426d423 < vehicle.setMovingCollisionEnabled("body", false) 428d424 < vehicle.setDamageSourceEnabled("bumperFlight", false) vehicles\modularmech\modularmech.vehicle 115c115 < "maxprotection", --- > "invulnerable", 119,130d118 < }, < { < "stat" : "biomeradiationImmunity", < "amount" : 1.0 < }, < { < "stat" : "biomecoldImmunity", < "amount" : 1.0 < }, < { < "stat" : "biomeheatImmunity", < "amount" : 1.0 149,157d136 < "physicsCollisions" : { < "body" : { < "enabled" : false, < "collision" : [ [-2.125, -0.75], [-0.125, -2.5], [0.125, -2.5], [2.125, -0.75], [2.125, 1.5], [0.375, 2.75], [-0.375, 2.75], [-2.125, 1.5] ], < "collisionKind" : "slippery", < "categoryWhitelist" : ["monster"] < } < }, < 159,167d137 < "bumperFlight" : { < "enabled" : false, < < "poly" : [ [-2.625, -1.25], [-0.125, -3.0], [0.125, -3.0], [2.625, -1.25], [2.625, 2], [0.875, 3.25], [-0.875, 3.25], [-2.625, 2] ], < "damage" : 0, < "damageType" : "Knockback", < "damageRepeatTimeout" : 0.25, < "knockback" : 35 < }, 181c151 < "energyDrain" : 10, --- > "energyDrain" : 20, 185c155 < "energyDrain" : 12, --- > "energyDrain" : 25, 189c159 < "energyDrain" : 14, --- > "energyDrain" : 30,