FILES ----- player.config terrestrial_worlds.config biomes\distributions.config biomes\oredistributions.configfunctions biomes\surface\arctic\arctic.biome biomes\surface\jungle\jungle.biome biomes\surface\magma\magma.biome biomes\surface\scorched\scorched.biome biomes\surface\toxic\toxic.biome biomes\surface\tundra\tundra.biome biomes\surface\volcanic\volcanic.biome [NEW] biomes\surface_detached\bioluminescence\bioluminescence.biome biomes\surface_detached\ice\ice.biome interface\crafting\craftablebackground.png [NEW] interface\crafting\craftablebackground2.png interface\crafting\craftableselected.png [NEW] interface\crafting\craftableselected2.png [NEW] interface\objectcrafting\fossilstation.config [NEW] interface\objectcrafting\identify.png [NEW] interface\objectcrafting\identifyover.png interface\windowconfig\bounty.config [NEW] items\armors\decorative\costumes\rock\bsleeve.png [NEW] items\armors\decorative\costumes\rock\chest.png [NEW] items\armors\decorative\costumes\rock\fsleeve.png [NEW] items\armors\decorative\costumes\rock\head.png [NEW] items\armors\decorative\costumes\rock\icons.png [NEW] items\armors\decorative\costumes\rock\mask.png [NEW] items\armors\decorative\costumes\rock\pants.png [NEW] items\armors\decorative\costumes\rock\rock.chest [NEW] items\armors\decorative\costumes\rock\rock.head [NEW] items\armors\decorative\costumes\rock\rock.legs [NEW] items\armors\decorative\hats\rock\rockhat.head items\generic\crafting\endomorphicjelly.item items\generic\crafting\fleshstrand.item [NEW] items\generic\crafting\fossilore.item [NEW] items\generic\crafting\fossilore.png [NEW] items\generic\crafting\glowfibreorange.item [NEW] items\generic\crafting\glowfibreorange.png [NEW] items\generic\crafting\glowfibreyellow.item [NEW] items\generic\crafting\glowfibreyellow.png items\generic\crafting\seaweed.item items\generic\produce\alienfruit.consumable items\generic\produce\coralcreep.consumable items\generic\produce\dirturchin.consumable items\generic\produce\oculemon.consumable items\generic\produce\pussplum.consumable items\generic\produce\reefpod.consumable items\generic\produce\toxictop.consumable items\generic\tier1\boiledpearlpeas.consumable items\generic\tier1\bread.consumable items\generic\tier1\fishdumplings.consumable items\generic\tier1\fishnchips.consumable items\generic\tier1\fishstew.consumable items\generic\tier1\mashedpotato.consumable items\generic\tier1\meatdumplings.consumable items\generic\tier1\meatstew.consumable items\generic\tier1\pearlpeabroth.consumable items\generic\tier1\potatogrids.consumable items\generic\tier2\applecrumble.consumable items\generic\tier2\baconpancakes.consumable items\generic\tier2\beakseedbread.consumable items\generic\tier2\beakseedjam.consumable items\generic\tier2\beakseedtart.consumable items\generic\tier2\cake.consumable items\generic\tier2\candyapple.consumable items\generic\tier2\candyapple.png items\generic\tier2\carrotbread.consumable items\generic\tier2\carrotcake.consumable items\generic\tier2\carrotjuice.consumable items\generic\tier2\carrotsoup.consumable items\generic\tier2\cheeseburger.consumable items\generic\tier2\feathercrownjam.consumable items\generic\tier2\featherfood.consumable items\generic\tier2\hamburger.consumable items\generic\tier2\kiwijam.consumable items\generic\tier2\kiwijuice.consumable items\generic\tier2\mushroomquiche.consumable items\generic\tier2\mushroomrice.consumable items\generic\tier2\pasty.consumable items\generic\tier2\pearlpeajam.consumable items\generic\tier2\pearlpeapancakes.consumable items\generic\tier2\pizza.consumable items\generic\tier2\quichelorraine.consumable items\generic\tier2\relish.consumable items\generic\tier2\relish.png items\generic\tier2\ricepudding.consumable items\generic\tier2\specialrice.consumable items\generic\tier2\spikycookies.consumable items\generic\tier2\stuffedtomato.consumable items\generic\tier2\sweetpopcorn.consumable items\generic\tier2\tomatojuice.consumable items\generic\tier2\tomatosoup.consumable items\generic\tier4\alienfruitjam.consumable items\generic\tier4\bloodypuss.consumable items\generic\tier4\brineapple.consumable items\generic\tier4\cyanider.consumable items\generic\tier4\oceanrisotto.consumable [NEW] items\generic\tier4\oceansalsa.consumable [NEW] items\generic\tier4\oceansalsa.png items\generic\tier4\oceansurprise.consumable items\generic\tier4\oculemonmeringue.consumable items\generic\tier4\oculemonstew.consumable items\generic\tier4\pussplumpudding.consumable items\generic\tier4\pussplumtart.consumable items\generic\tier4\reefjuice.consumable items\generic\tier4\reefpodsurprise.consumable items\generic\tier4\reefshake.consumable items\generic\tier4\ricecake.consumable items\generic\tier4\saltsalad.consumable items\generic\tier4\seafoodgratin.consumable items\generic\tier4\soggysack.consumable items\generic\tier4\stuffeddirturchin.consumable items\generic\tier4\sushi.consumable items\generic\tier4\toxicjamdonut.consumable items\generic\tier4\toxicjuice.consumable items\generic\tier4\toxictart.consumable items\generic\tier4\toxictopjam.consumable [NEW] items\generic\tier5\8gbpizzap.consumable [NEW] items\generic\tier5\8gbpizzap.png [NEW] items\generic\tier5\smash.consumable [NEW] items\generic\tier5\smash.png [NEW] items\generic\tier6\volcanicsalsa.consumable [NEW] items\generic\tier6\volcanicsalsa.png items\tools\miningtools\copperdrill.miningtool items\tools\miningtools\diamonddrill.miningtool [NEW] items\tools\miningtools\fossiltool.miningtool items\tools\miningtools\golddrill.miningtool items\tools\miningtools\platinumdrill.miningtool items\tools\miningtools\silverdrill.miningtool [NEW] monsters\crawling\approachstate.lua monsters\crawling\crawlingmonster.lua [NEW] monsters\crawling\fleestate.lua monsters\crawling\wanderstate.lua [NEW] monsters\crawling\skills\flamethrowerattack.lua [NEW] monsters\crawling\skills\flamethrowerattack.monsterskill monsters\ground\skills\shieldspecial.lua monsters\unique\glitchspider\default.frames monsters\unique\glitchspider\glitchspider.animation monsters\unique\glitchspider\glitchspider.monstertype npcs\merchant.npctype npcs\mission\miner.npctype npcs\outpost\outpostavianrefugee.npctype npcs\outpost\outpostfloranscholar.npctype npcs\outpost\outposthumanscientist.npctype npcs\outpost\outposthylotlperformer.npctype npcs\outpost\outposthylotlwarrior.npctype [NEW] objects\crafting\fossilstation\fossilstation.frames [NEW] objects\crafting\fossilstation\fossilstation.object [NEW] objects\crafting\fossilstation\fossilstation.png [NEW] objects\crafting\fossilstation\fossilstationicon.png [NEW] objects\crafting\fossilstation\fossilstationlit.frames [NEW] objects\crafting\fossilstation\fossilstationlit.png objects\crafting\spawnerstation\spawnerstation.frames objects\crafting\spawnerstation\spawnerstation.object [NEW] objects\farmables\neonmelon\neonmelonseedlit.png [NEW] objects\fossils\1piece\fossilsingle1\fossilsingle1.frames [NEW] objects\fossils\1piece\fossilsingle1\fossilsingle1.object [NEW] objects\fossils\1piece\fossilsingle1\fossilsingle1.png [NEW] objects\fossils\1piece\fossilsingle1\fossilsingle1icon.png [NEW] objects\fossils\1piece\fossilsingle2\fossilsingle2.frames [NEW] objects\fossils\1piece\fossilsingle2\fossilsingle2.object [NEW] objects\fossils\1piece\fossilsingle2\fossilsingle2.png [NEW] objects\fossils\1piece\fossilsingle2\fossilsingle2icon.png [NEW] objects\fossils\1piece\fossilsingle3\fossilsingle3.frames [NEW] objects\fossils\1piece\fossilsingle3\fossilsingle3.object [NEW] objects\fossils\1piece\fossilsingle3\fossilsingle3.png [NEW] objects\fossils\1piece\fossilsingle3\fossilsingle3icon.png [NEW] objects\fossils\1piece\fossilsingle4\fossilsingle4.frames [NEW] objects\fossils\1piece\fossilsingle4\fossilsingle4.object [NEW] objects\fossils\1piece\fossilsingle4\fossilsingle4.png [NEW] objects\fossils\1piece\fossilsingle4\fossilsingle4icon.png [NEW] objects\fossils\1piece\fossilsingle5\fossilsingle5.frames [NEW] objects\fossils\1piece\fossilsingle5\fossilsingle5.object [NEW] objects\fossils\1piece\fossilsingle5\fossilsingle5.png [NEW] objects\fossils\1piece\fossilsingle5\fossilsingle5icon.png [NEW] objects\fossils\2piece\fossildouble11\fossildouble11.frames [NEW] objects\fossils\2piece\fossildouble11\fossildouble11.object [NEW] objects\fossils\2piece\fossildouble11\fossildouble11.png [NEW] objects\fossils\2piece\fossildouble11\fossildouble11icon.png [NEW] objects\fossils\2piece\fossildouble12\fossildouble12.frames [NEW] objects\fossils\2piece\fossildouble12\fossildouble12.object [NEW] objects\fossils\2piece\fossildouble12\fossildouble12.png [NEW] objects\fossils\2piece\fossildouble12\fossildouble12icon.png [NEW] objects\fossils\2piece\fossildouble21\fossildouble21.frames [NEW] objects\fossils\2piece\fossildouble21\fossildouble21.object [NEW] objects\fossils\2piece\fossildouble21\fossildouble21.png [NEW] objects\fossils\2piece\fossildouble21\fossildouble21icon.png [NEW] objects\fossils\2piece\fossildouble22\fossildouble22.frames [NEW] objects\fossils\2piece\fossildouble22\fossildouble22.object [NEW] objects\fossils\2piece\fossildouble22\fossildouble22.png [NEW] objects\fossils\2piece\fossildouble22\fossildouble22icon.png [NEW] objects\fossils\2piece\fossildouble31\fossildouble31.frames [NEW] objects\fossils\2piece\fossildouble31\fossildouble31.object [NEW] objects\fossils\2piece\fossildouble31\fossildouble31.png [NEW] objects\fossils\2piece\fossildouble31\fossildouble31icon.png [NEW] objects\fossils\2piece\fossildouble32\fossildouble32.frames [NEW] objects\fossils\2piece\fossildouble32\fossildouble32.object [NEW] objects\fossils\2piece\fossildouble32\fossildouble32.png [NEW] objects\fossils\2piece\fossildouble32\fossildouble32icon.png [NEW] objects\fossils\2piece\fossildouble41\fossildouble41.frames [NEW] objects\fossils\2piece\fossildouble41\fossildouble41.object [NEW] objects\fossils\2piece\fossildouble41\fossildouble41.png [NEW] objects\fossils\2piece\fossildouble41\fossildouble41icon.png [NEW] objects\fossils\2piece\fossildouble42\fossildouble42.frames [NEW] objects\fossils\2piece\fossildouble42\fossildouble42.object [NEW] objects\fossils\2piece\fossildouble42\fossildouble42.png [NEW] objects\fossils\2piece\fossildouble42\fossildouble42icon.png [NEW] objects\fossils\2piece\fossildouble51\fossildouble51.frames [NEW] objects\fossils\2piece\fossildouble51\fossildouble51.object [NEW] objects\fossils\2piece\fossildouble51\fossildouble51.png [NEW] objects\fossils\2piece\fossildouble51\fossildouble51icon.png [NEW] objects\fossils\2piece\fossildouble52\fossildouble52.frames [NEW] objects\fossils\2piece\fossildouble52\fossildouble52.object [NEW] objects\fossils\2piece\fossildouble52\fossildouble52.png [NEW] objects\fossils\2piece\fossildouble52\fossildouble52icon.png [NEW] objects\fossils\3piece\fossiltriple11\fossiltriple11.frames [NEW] objects\fossils\3piece\fossiltriple11\fossiltriple11.object [NEW] objects\fossils\3piece\fossiltriple11\fossiltriple11.png [NEW] objects\fossils\3piece\fossiltriple11\fossiltriple11icon.png [NEW] objects\fossils\3piece\fossiltriple12\fossiltriple12.frames [NEW] objects\fossils\3piece\fossiltriple12\fossiltriple12.object [NEW] objects\fossils\3piece\fossiltriple12\fossiltriple12.png [NEW] objects\fossils\3piece\fossiltriple12\fossiltriple12icon.png [NEW] objects\fossils\3piece\fossiltriple13\fossiltriple13.frames [NEW] objects\fossils\3piece\fossiltriple13\fossiltriple13.object [NEW] objects\fossils\3piece\fossiltriple13\fossiltriple13.png [NEW] objects\fossils\3piece\fossiltriple13\fossiltriple13icon.png [NEW] objects\fossils\3piece\fossiltriple21\fossiltriple21.frames [NEW] objects\fossils\3piece\fossiltriple21\fossiltriple21.object [NEW] objects\fossils\3piece\fossiltriple21\fossiltriple21.png [NEW] objects\fossils\3piece\fossiltriple21\fossiltriple21icon.png [NEW] objects\fossils\3piece\fossiltriple22\fossiltriple22.frames [NEW] objects\fossils\3piece\fossiltriple22\fossiltriple22.object [NEW] objects\fossils\3piece\fossiltriple22\fossiltriple22.png [NEW] objects\fossils\3piece\fossiltriple22\fossiltriple22icon.png [NEW] objects\fossils\3piece\fossiltriple23\fossiltriple23.frames [NEW] objects\fossils\3piece\fossiltriple23\fossiltriple23.object [NEW] objects\fossils\3piece\fossiltriple23\fossiltriple23.png [NEW] objects\fossils\3piece\fossiltriple23\fossiltriple23icon.png [NEW] objects\fossils\3piece\fossiltriple31\fossiltriple31.frames [NEW] objects\fossils\3piece\fossiltriple31\fossiltriple31.object [NEW] objects\fossils\3piece\fossiltriple31\fossiltriple31.png [NEW] objects\fossils\3piece\fossiltriple31\fossiltriple31icon.png [NEW] objects\fossils\3piece\fossiltriple32\fossiltriple32.frames [NEW] objects\fossils\3piece\fossiltriple32\fossiltriple32.object [NEW] objects\fossils\3piece\fossiltriple32\fossiltriple32.png [NEW] objects\fossils\3piece\fossiltriple32\fossiltriple32icon.png [NEW] objects\fossils\3piece\fossiltriple33\fossiltriple33.frames [NEW] objects\fossils\3piece\fossiltriple33\fossiltriple33.object [NEW] objects\fossils\3piece\fossiltriple33\fossiltriple33.png [NEW] objects\fossils\3piece\fossiltriple33\fossiltriple33icon.png [NEW] objects\fossils\3piece\fossiltriple41\fossiltriple41.frames [NEW] objects\fossils\3piece\fossiltriple41\fossiltriple41.object [NEW] objects\fossils\3piece\fossiltriple41\fossiltriple41.png [NEW] objects\fossils\3piece\fossiltriple41\fossiltriple41icon.png [NEW] objects\fossils\3piece\fossiltriple42\fossiltriple42.frames [NEW] objects\fossils\3piece\fossiltriple42\fossiltriple42.object [NEW] objects\fossils\3piece\fossiltriple42\fossiltriple42.png [NEW] objects\fossils\3piece\fossiltriple42\fossiltriple42icon.png [NEW] objects\fossils\3piece\fossiltriple43\fossiltriple43.frames [NEW] objects\fossils\3piece\fossiltriple43\fossiltriple43.object [NEW] objects\fossils\3piece\fossiltriple43\fossiltriple43.png [NEW] objects\fossils\3piece\fossiltriple43\fossiltriple43icon.png [NEW] objects\fossils\3piece\fossiltriple51\fossiltriple51.frames [NEW] objects\fossils\3piece\fossiltriple51\fossiltriple51.object [NEW] objects\fossils\3piece\fossiltriple51\fossiltriple51.png [NEW] objects\fossils\3piece\fossiltriple51\fossiltriple51icon.png [NEW] objects\fossils\3piece\fossiltriple52\fossiltriple52.frames [NEW] objects\fossils\3piece\fossiltriple52\fossiltriple52.object [NEW] objects\fossils\3piece\fossiltriple52\fossiltriple52.png [NEW] objects\fossils\3piece\fossiltriple52\fossiltriple52icon.png [NEW] objects\fossils\3piece\fossiltriple53\fossiltriple53.frames [NEW] objects\fossils\3piece\fossiltriple53\fossiltriple53.object [NEW] objects\fossils\3piece\fossiltriple53\fossiltriple53.png [NEW] objects\fossils\3piece\fossiltriple53\fossiltriple53icon.png [NEW] objects\fossils\testfossil\fossiltooth.frames [NEW] objects\fossils\testfossil\fossiltooth.object [NEW] objects\fossils\testfossil\fossiltooth.png [NEW] objects\fossils\testfossil\fossiltoothicon.png objects\generic\arcadegame\arcadegameobject.lua [NEW] objects\generic\fossilpod\fossilpod.frames [NEW] objects\generic\fossilpod\fossilpod.object [NEW] objects\generic\fossilpod\fossilpod.png [NEW] objects\generic\fossilpod\fossilpodicon.png objects\generic\kennel\kennel.png objects\generic\kennel\kennelsleep.png objects\minibiome\bioluminescence\glowbush\glowbush1.object objects\minibiome\bioluminescence\glowbush\glowbush2.object objects\minibiome\bioluminescence\glowbush\glowbush3.object objects\minibiome\bioluminescence\glowbush\glowbush4.object objects\minibiome\bioluminescence\glowbush\glowbush5.object [NEW] objects\minibiome\bioluminescence\glowbushlamp\glowbushlamp.frames [NEW] objects\minibiome\bioluminescence\glowbushlamp\glowbushlamp.object [NEW] objects\minibiome\bioluminescence\glowbushlamp\glowbushlamp.png [NEW] objects\minibiome\bioluminescence\glowbushlamp\glowbushlampicon.png [NEW] objects\minibiome\bioluminescence\glowchest\glowchest.frames [NEW] objects\minibiome\bioluminescence\glowchest\glowchest.object [NEW] objects\minibiome\bioluminescence\glowchest\glowchest.png [NEW] objects\minibiome\bioluminescence\glowchest\glowchesticon.png objects\minibiome\bioluminescence\glowflower\glowflower1.object objects\minibiome\bioluminescence\glowflower\glowflower2.object objects\minibiome\bioluminescence\glowflower\glowflower3.object objects\minibiome\bioluminescence\glowflower\glowflower4.object objects\minibiome\bioluminescence\glowflower\glowflower5.object [NEW] objects\minibiome\bioluminescence\glowflowerlamp\glowflowerlamp.frames [NEW] objects\minibiome\bioluminescence\glowflowerlamp\glowflowerlamp.object [NEW] objects\minibiome\bioluminescence\glowflowerlamp\glowflowerlamp.png [NEW] objects\minibiome\bioluminescence\glowflowerlamp\glowflowerlampicon.png objects\minibiome\bioluminescence\glowtree\glowtree1.object objects\minibiome\bioluminescence\glowtree\glowtree2.object objects\minibiome\bioluminescence\glowtree\glowtree3.object objects\minibiome\bioluminescence\glowtree\glowtree4.object objects\minibiome\bioluminescence\glowtree\glowtree5.object objects\minibiome\bioluminescence\glowvine\glowvine1.object objects\minibiome\bioluminescence\glowvine\glowvine2.object objects\minibiome\bioluminescence\glowvine\glowvine3.object objects\minibiome\bioluminescence\glowvine\glowvine4.object objects\minibiome\bioluminescence\glowvine\glowvine5.object objects\minibiome\giantflower\giantflowerchest\giantflowerchest.object objects\minibiome\jungle\junglechest\junglechest.object objects\minibiome\stalactitecave\cavebed\cavebed.png objects\minibiome\stalactitecave\cavechair\cavechair.png quests\outpost\endgame\avianrefugeee1.questtemplate quests\outpost\endgame\avianrefugeee2.questtemplate [NEW] quests\outpost\endgame\humanscientiste1.questtemplate quests\outpost\endgame\hylotlperformere1.questtemplate [NEW] quests\outpost\endgame\hylotlperformere2part1.questtemplate [NEW] quests\outpost\endgame\hylotlperformere2part2.questtemplate [NEW] quests\outpost\endgame\hylotlwarriore1.questtemplate [NEW] quests\outpost\endgame\hylotlwarriore2.questtemplate [NEW] recipes\armor\other\paperwingsback\paperwingsback.recipe [NEW] recipes\biomes\bioluminescence\glowbushlamp.recipe [NEW] recipes\biomes\bioluminescence\glowchest.recipe [NEW] recipes\biomes\bioluminescence\glowflowerlamp.recipe [NEW] recipes\fossilstation\fossilpod.recipe [NEW] recipes\kitchen\tier4\alienfruitjam.recipe [NEW] recipes\kitchen\tier4\bloodypuss.recipe [NEW] recipes\kitchen\tier4\brineapple.recipe [NEW] recipes\kitchen\tier4\cyanider.recipe [NEW] recipes\kitchen\tier4\oceanrisotto.recipe [NEW] recipes\kitchen\tier4\oceansalsa.recipe [NEW] recipes\kitchen\tier4\oceansurprise.recipe [NEW] recipes\kitchen\tier4\oculemonmeringue.recipe [NEW] recipes\kitchen\tier4\oculemonstew.recipe [NEW] recipes\kitchen\tier4\pussplumpudding.recipe [NEW] recipes\kitchen\tier4\pussplumtart.recipe [NEW] recipes\kitchen\tier4\reefjuice.recipe [NEW] recipes\kitchen\tier4\reefpodsurprise.recipe [NEW] recipes\kitchen\tier4\reefshake.recipe [NEW] recipes\kitchen\tier4\ricecake.recipe [NEW] recipes\kitchen\tier4\saltsalad.recipe [NEW] recipes\kitchen\tier4\seafoodgratin.recipe [NEW] recipes\kitchen\tier4\soggysack.recipe [NEW] recipes\kitchen\tier4\stuffeddirturchin.recipe [NEW] recipes\kitchen\tier4\sushi.recipe [NEW] recipes\kitchen\tier4\toxicjamdonut.recipe [NEW] recipes\kitchen\tier4\toxicjuice.recipe [NEW] recipes\kitchen\tier4\toxictart.recipe [NEW] recipes\kitchen\tier4\toxictopjam.recipe [NEW] recipes\researchstation\fossilstation.recipe [NEW] recipes\terramart\fossiltool.recipe [NEW] recipes\unsorted\kennel.recipe species\novakidnamegen.config stats\effects\biomecold\biomecold.statuseffect stats\effects\biomeheat\biomeheat.statuseffect stats\effects\biomeradiation\biomeradiation.statuseffect [NEW] stats\effects\energyregen\energyregen480.statuseffect [NEW] stats\effects\energyregen\energyregen672.statuseffect terrain\cave\corecaves.terrain terrain\cave\densecaves.terrain terrain\cave\mooncaves.terrain terrain\cave\normalcaves.terrain terrain\cave\surfacecaves.terrain [NEW] tiles\mods\fossil.matmod [NEW] tiles\mods\fossil.png treasure\biome.treasurepools treasure\default.treasurechests [NEW] treasure\fossils.treasurepools DIFFS ----- player.config 93a94 > { "item" : "fossilstation" }, 344a346,347 > > "appliesEnvironmentStatusEffects" : true, terrestrial_worlds.config 354c354 < "secondaryRegion" : [ "ice" ] --- > "secondaryRegion" : [ "ice", "bioluminescence" ] 725a726,733 > ] > }, > > "bioluminescence" : { > "blockSelector" : [ "lowHillsSurface" ], > "fgCaveSelector" : [ "surfaceCaves" ], > "biome" : [ > [0, [ "bioluminescence" ]] biomes\distributions.config 87a88,103 > "moderateClumps" : { > "type" : "periodic", > > "octaves" : 2, > "alpha" : 2.0, > "beta" : 2.0, > > "modulus" : 6, > "modulusVariance" : 4, > > "densityPeriod" : 10, > "densityOffset" : -0.1, > > "typePeriod" : 10 > }, > biomes\oredistributions.configfunctions 32,37c32,37 < [0.5, [ [ "coal", 1.15], [ "uranium", 0.00], [ "plutonium", 0.00], [ "solarium", 0.00], [ "copper", 1.15], [ "silverore", 1.05], [ "gold", 1.00], [ "platinum", 0.90], [ "diamond", 0.85], [ "iron", 1.20] ] ], < [1.5, [ [ "coal", 1.15], [ "uranium", 0.00], [ "plutonium", 0.00], [ "solarium", 0.00], [ "copper", 1.20], [ "silverore", 1.15], [ "gold", 1.05], [ "platinum", 0.95], [ "diamond", 0.90], [ "iron", 1.30] ] ], < [2.5, [ [ "coal", 1.15], [ "uranium", 0.00], [ "plutonium", 0.00], [ "solarium", 0.00], [ "copper", 1.25], [ "silverore", 1.20], [ "gold", 1.15], [ "platinum", 1.00], [ "diamond", 0.95], [ "titanium", 1.20] ] ], < [3.5, [ [ "coal", 1.15], [ "uranium", 0.00], [ "plutonium", 0.00], [ "solarium", 0.00], [ "copper", 1.30], [ "silverore", 1.25], [ "gold", 1.20], [ "platinum", 1.05], [ "diamond", 1.00], [ "titanium", 1.30] ] ], < [4.5, [ [ "coal", 1.15], [ "uranium", 0.00], [ "plutonium", 0.00], [ "solarium", 0.00], [ "copper", 1.30], [ "silverore", 1.30], [ "gold", 1.25], [ "platinum", 1.15], [ "diamond", 1.05], [ "aegisalt", 1.20], [ "rubium", 1.20], [ "violium", 1.20] ] ], < [5.5, [ [ "coal", 1.15], [ "uranium", 0.00], [ "plutonium", 0.00], [ "solarium", 0.00], [ "copper", 1.30], [ "silverore", 1.30], [ "gold", 1.30], [ "platinum", 1.20], [ "diamond", 1.15], [ "aegisalt", 1.30], [ "rubium", 1.30], [ "violium", 1.30] ] ] --- > [0.5, [ [ "coal", 1.15], [ "uranium", 0.00], [ "plutonium", 0.00], [ "solarium", 0.00], [ "copper", 1.15], [ "silverore", 1.05], [ "gold", 1.00], [ "platinum", 0.90], [ "diamond", 0.85], [ "iron", 1.20], ["fossil", 0.79] ] ], > [1.5, [ [ "coal", 1.15], [ "uranium", 0.00], [ "plutonium", 0.00], [ "solarium", 0.00], [ "copper", 1.20], [ "silverore", 1.15], [ "gold", 1.05], [ "platinum", 0.95], [ "diamond", 0.90], [ "iron", 1.30], ["fossil", 0.79] ] ], > [2.5, [ [ "coal", 1.15], [ "uranium", 0.00], [ "plutonium", 0.00], [ "solarium", 0.00], [ "copper", 1.25], [ "silverore", 1.20], [ "gold", 1.15], [ "platinum", 1.00], [ "diamond", 0.95], [ "titanium", 1.20], ["fossil", 0.79] ] ], > [3.5, [ [ "coal", 1.15], [ "uranium", 0.00], [ "plutonium", 0.00], [ "solarium", 0.00], [ "copper", 1.30], [ "silverore", 1.25], [ "gold", 1.20], [ "platinum", 1.05], [ "diamond", 1.00], [ "titanium", 1.30], ["fossil", 0.79] ] ], > [4.5, [ [ "coal", 1.15], [ "uranium", 0.00], [ "plutonium", 0.00], [ "solarium", 0.00], [ "copper", 1.30], [ "silverore", 1.30], [ "gold", 1.25], [ "platinum", 1.15], [ "diamond", 1.05], [ "aegisalt", 1.20], [ "rubium", 1.20], [ "violium", 1.20], ["fossil", 0.79] ] ], > [5.5, [ [ "coal", 1.15], [ "uranium", 0.00], [ "plutonium", 0.00], [ "solarium", 0.00], [ "copper", 1.30], [ "silverore", 1.30], [ "gold", 1.30], [ "platinum", 1.20], [ "diamond", 1.15], [ "aegisalt", 1.30], [ "rubium", 1.30], [ "violium", 1.30], ["fossil", 0.79] ] ] 41,46c41,46 < [0.5, [ [ "coal", 1.15], [ "uranium", 0.00], [ "plutonium", 0.00], [ "solarium", 0.00], [ "copper", 1.20], [ "silverore", 1.10], [ "gold", 1.05], [ "platinum", 0.95], [ "diamond", 0.90], [ "iron", 1.25] ] ], < [1.5, [ [ "coal", 1.15], [ "uranium", 0.00], [ "plutonium", 0.00], [ "solarium", 0.00], [ "copper", 1.25], [ "silverore", 1.20], [ "gold", 1.10], [ "platinum", 1.00], [ "diamond", 0.95], [ "iron", 1.35] ] ], < [2.5, [ [ "coal", 1.15], [ "uranium", 0.00], [ "plutonium", 0.00], [ "solarium", 0.00], [ "copper", 1.30], [ "silverore", 1.25], [ "gold", 1.20], [ "platinum", 1.05], [ "diamond", 1.00], [ "titanium", 1.25] ] ], < [3.5, [ [ "coal", 1.15], [ "uranium", 0.00], [ "plutonium", 0.00], [ "solarium", 0.00], [ "copper", 1.35], [ "silverore", 1.30], [ "gold", 1.25], [ "platinum", 1.10], [ "diamond", 1.05], [ "titanium", 1.35] ] ], < [4.5, [ [ "coal", 1.15], [ "uranium", 0.00], [ "plutonium", 0.00], [ "solarium", 0.00], [ "copper", 1.35], [ "silverore", 1.35], [ "gold", 1.30], [ "platinum", 1.20], [ "diamond", 1.10], [ "aegisalt", 1.25], [ "rubium", 1.20], [ "violium", 1.20] ] ], < [5.5, [ [ "coal", 1.15], [ "uranium", 0.00], [ "plutonium", 0.00], [ "solarium", 0.00], [ "copper", 1.35], [ "silverore", 1.35], [ "gold", 1.35], [ "platinum", 1.25], [ "diamond", 1.20], [ "aegisalt", 1.35], [ "rubium", 1.35], [ "violium", 1.35] ] ] --- > [0.5, [ [ "coal", 1.15], [ "uranium", 0.00], [ "plutonium", 0.00], [ "solarium", 0.00], [ "copper", 1.20], [ "silverore", 1.10], [ "gold", 1.05], [ "platinum", 0.95], [ "diamond", 0.90], [ "iron", 1.25], ["fossil", 0.79] ] ], > [1.5, [ [ "coal", 1.15], [ "uranium", 0.00], [ "plutonium", 0.00], [ "solarium", 0.00], [ "copper", 1.25], [ "silverore", 1.20], [ "gold", 1.10], [ "platinum", 1.00], [ "diamond", 0.95], [ "iron", 1.35], ["fossil", 0.79] ] ], > [2.5, [ [ "coal", 1.15], [ "uranium", 0.00], [ "plutonium", 0.00], [ "solarium", 0.00], [ "copper", 1.30], [ "silverore", 1.25], [ "gold", 1.20], [ "platinum", 1.05], [ "diamond", 1.00], [ "titanium", 1.25], ["fossil", 0.79] ] ], > [3.5, [ [ "coal", 1.15], [ "uranium", 0.00], [ "plutonium", 0.00], [ "solarium", 0.00], [ "copper", 1.35], [ "silverore", 1.30], [ "gold", 1.25], [ "platinum", 1.10], [ "diamond", 1.05], [ "titanium", 1.35], ["fossil", 0.79] ] ], > [4.5, [ [ "coal", 1.15], [ "uranium", 0.00], [ "plutonium", 0.00], [ "solarium", 0.00], [ "copper", 1.35], [ "silverore", 1.35], [ "gold", 1.30], [ "platinum", 1.20], [ "diamond", 1.10], [ "aegisalt", 1.25], [ "rubium", 1.20], [ "violium", 1.20], ["fossil", 0.79] ] ], > [5.5, [ [ "coal", 1.15], [ "uranium", 0.00], [ "plutonium", 0.00], [ "solarium", 0.00], [ "copper", 1.35], [ "silverore", 1.35], [ "gold", 1.35], [ "platinum", 1.25], [ "diamond", 1.20], [ "aegisalt", 1.35], [ "rubium", 1.35], [ "violium", 1.35], ["fossil", 0.79] ] ] 50,55c50,55 < [0.5, [ [ "corefragment", 1.50], [ "coal", 1.15], [ "uranium", 0.00], [ "plutonium", 0.00], [ "solarium", 0.00], [ "copper", 1.25], [ "silverore", 1.15], [ "gold", 1.10], [ "platinum", 1.00], [ "diamond", 0.95], [ "iron", 1.30] ] ], < [1.5, [ [ "corefragment", 1.15], [ "coal", 1.15], [ "uranium", 0.00], [ "plutonium", 0.00], [ "solarium", 0.00], [ "copper", 1.30], [ "silverore", 1.25], [ "gold", 1.15], [ "platinum", 1.05], [ "diamond", 1.00], [ "iron", 1.40] ] ], < [2.5, [ [ "corefragment", 1.15], [ "coal", 1.15], [ "uranium", 0.00], [ "plutonium", 0.00], [ "solarium", 0.00], [ "copper", 1.35], [ "silverore", 1.30], [ "gold", 1.25], [ "platinum", 1.10], [ "diamond", 1.05], [ "titanium", 1.30] ] ], < [3.5, [ [ "corefragment", 1.15], [ "coal", 1.15], [ "uranium", 0.00], [ "plutonium", 0.00], [ "solarium", 0.00], [ "copper", 1.40], [ "silverore", 1.35], [ "gold", 1.30], [ "platinum", 1.15], [ "diamond", 1.10], [ "titanium", 1.40] ] ], < [4.5, [ [ "corefragment", 1.15], [ "coal", 1.15], [ "uranium", 0.00], [ "plutonium", 0.00], [ "solarium", 0.00], [ "copper", 1.40], [ "silverore", 1.40], [ "gold", 1.35], [ "platinum", 1.25], [ "diamond", 1.15], [ "aegisalt", 1.30], [ "rubium", 1.30], [ "violium", 1.30] ] ], < [5.5, [ [ "corefragment", 1.15], [ "coal", 1.15], [ "uranium", 0.00], [ "plutonium", 0.00], [ "solarium", 0.00], [ "copper", 1.40], [ "silverore", 1.40], [ "gold", 1.40], [ "platinum", 1.30], [ "diamond", 1.25], [ "aegisalt", 1.40], [ "rubium", 1.40], [ "violium", 1.40] ] ] --- > [0.5, [ [ "corefragment", 1.50], [ "coal", 1.15], [ "uranium", 0.00], [ "plutonium", 0.00], [ "solarium", 0.00], [ "copper", 1.25], [ "silverore", 1.15], [ "gold", 1.10], [ "platinum", 1.00], [ "diamond", 0.95], [ "iron", 1.30], ["fossil", 0.79] ] ], > [1.5, [ [ "corefragment", 1.15], [ "coal", 1.15], [ "uranium", 0.00], [ "plutonium", 0.00], [ "solarium", 0.00], [ "copper", 1.30], [ "silverore", 1.25], [ "gold", 1.15], [ "platinum", 1.05], [ "diamond", 1.00], [ "iron", 1.40], ["fossil", 0.79] ] ], > [2.5, [ [ "corefragment", 1.15], [ "coal", 1.15], [ "uranium", 0.00], [ "plutonium", 0.00], [ "solarium", 0.00], [ "copper", 1.35], [ "silverore", 1.30], [ "gold", 1.25], [ "platinum", 1.10], [ "diamond", 1.05], [ "titanium", 1.30], ["fossil", 0.79] ] ], > [3.5, [ [ "corefragment", 1.15], [ "coal", 1.15], [ "uranium", 0.00], [ "plutonium", 0.00], [ "solarium", 0.00], [ "copper", 1.40], [ "silverore", 1.35], [ "gold", 1.30], [ "platinum", 1.15], [ "diamond", 1.10], [ "titanium", 1.40], ["fossil", 0.79] ] ], > [4.5, [ [ "corefragment", 1.15], [ "coal", 1.15], [ "uranium", 0.00], [ "plutonium", 0.00], [ "solarium", 0.00], [ "copper", 1.40], [ "silverore", 1.40], [ "gold", 1.35], [ "platinum", 1.25], [ "diamond", 1.15], [ "aegisalt", 1.30], [ "rubium", 1.30], [ "violium", 1.30], ["fossil", 0.79] ] ], > [5.5, [ [ "corefragment", 1.15], [ "coal", 1.15], [ "uranium", 0.00], [ "plutonium", 0.00], [ "solarium", 0.00], [ "copper", 1.40], [ "silverore", 1.40], [ "gold", 1.40], [ "platinum", 1.30], [ "diamond", 1.25], [ "aegisalt", 1.40], [ "rubium", 1.40], [ "violium", 1.40], ["fossil", 0.79] ] ] biomes\surface\arctic\arctic.biome 4a5,6 > "statusEffects" : [ "biomecold" ], > biomes\surface\jungle\jungle.biome 4a5,6 > "statusEffects" : [ "biomeradiation" ], > biomes\surface\magma\magma.biome 4a5,6 > "statusEffects" : [ "biomeheat" ], > biomes\surface\scorched\scorched.biome 4a5,6 > "statusEffects" : [ "biomeheat" ], > biomes\surface\toxic\toxic.biome 4a5,6 > "statusEffects" : [ "biomeradiation" ], > biomes\surface\tundra\tundra.biome 4a5,6 > "statusEffects" : [ "biomecold" ], > biomes\surface\volcanic\volcanic.biome 4a5,6 > "statusEffects" : [ "biomeheat" ], > biomes\surface_detached\ice\ice.biome 4c4 < "requiredStatuses" : [], --- > interface\windowconfig\bounty.config 21c21 < "title" : " BOUNTY", --- > "title" : " Treasured Trophies", 43,54d42 < "lblAmountInput" : { < "type" : "image", < "file" : "/interface/crafting/amount.png", < "position" : [208, 39], < "zlevel" : -3 < }, < "lbllvlSort" : { < "type" : "image", < "file" : "/interface/crafting/cost.png", < "position" : [123, 232], < "zlevel" : -3 < }, 68a57,64 > "rewards" : { > "type" : "itemgrid", > "position" : [250, 46], > "spacing" : [19, 0], > "dimensions" : [5, 1], > "callback" : "null" > }, > 98,114d93 < }, < "level" : { < "type" : "label", < "position" : [138, 9], < "hAnchor" : "mid", < "value" : "Lvl. 100" < }, < "moneyIcon" : { < "type" : "image", < "position" : [126, 1], < "file" : "/interface/money.png" < }, < "priceLabel" : { < "type" : "label", < "position" : [138, 1], < "hAnchor" : "left", < "value" : "0" items\generic\crafting\endomorphicjelly.item 6c6,7 < "shortdescription" : "Endomorphic Jelly" --- > "shortdescription" : "Endomorphic Jelly", > "learnBlueprintsOnPickup" : [ "sushi", "ricecake", "oceansurprise" ] items\generic\crafting\fleshstrand.item 7,9c7 < "learnBlueprintsOnPickup" : [ < "fleshblock" < ] --- > "learnBlueprintsOnPickup" : [ "fleshblock", "bloodypuss" ] items\generic\crafting\seaweed.item 6c6,7 < "shortdescription" : "Alien Seaweed" --- > "shortdescription" : "Alien Seaweed", > "learnBlueprintsOnPickup" : [ "ricecake" ] items\generic\produce\alienfruit.consumable 19c19,20 < ] --- > ], > "learnBlueprintsOnPickup" : [ "alienfruitjam" ] items\generic\produce\coralcreep.consumable 19c19,20 < ] --- > ], > "learnBlueprintsOnPickup" : [ "seafoodgratin", "soggysack" ] items\generic\produce\dirturchin.consumable 20c20,21 < ] --- > ], > "learnBlueprintsOnPickup" : [ "stuffeddirturchin", "soggysack" ] items\generic\produce\oculemon.consumable 19c19,20 < ] --- > ], > "learnBlueprintsOnPickup" : [ "cyanider", "oculemonmeringue" ] items\generic\produce\pussplum.consumable 24c24,25 < ] --- > ], > "learnBlueprintsOnPickup" : [ "pussplumtart" ] items\generic\produce\reefpod.consumable 24c24,25 < ] --- > ], > "learnBlueprintsOnPickup" : [ "reefjuice", "saltsalad" ] items\generic\produce\toxictop.consumable 28c28,29 < ] --- > ], > "learnBlueprintsOnPickup" : [ "toxictopjam" ] items\generic\tier1\boiledpearlpeas.consumable 6a7 > "handPosition" : [0, -4], items\generic\tier1\bread.consumable 7c7 < "handPosition" : [0, 4], --- > "handPosition" : [0, 6], items\generic\tier1\fishdumplings.consumable 6a7 > "handPosition" : [0, 6], items\generic\tier1\fishnchips.consumable 6a7 > "handPosition" : [0, -2], items\generic\tier1\fishstew.consumable 6a7 > "handPosition" : [0, -4], items\generic\tier1\mashedpotato.consumable 6a7 > "handPosition" : [0, -2], items\generic\tier1\meatdumplings.consumable 6a7 > "handPosition" : [0, 7], items\generic\tier1\meatstew.consumable 6a7 > "handPosition" : [0, -4], items\generic\tier1\pearlpeabroth.consumable 6a7 > "handPosition" : [0, -4], items\generic\tier1\potatogrids.consumable 4c4 < "inventoryIcon" : "mashedpotato.png", --- > "inventoryIcon" : "potatogrids.png", items\generic\tier2\applecrumble.consumable 6a7 > "handPosition" : [0, 4], items\generic\tier2\baconpancakes.consumable 6a7 > "handPosition" : [0, -4], items\generic\tier2\beakseedbread.consumable 6a7 > "handPosition" : [0, 6], items\generic\tier2\beakseedjam.consumable 6a7 > "handPosition" : [0, 4], items\generic\tier2\beakseedtart.consumable 6a7 > "handPosition" : [0, 4], items\generic\tier2\cake.consumable 6a7 > "handPosition" : [0, -4], items\generic\tier2\candyapple.consumable 6a7 > "handPosition" : [8, -4], items\generic\tier2\carrotbread.consumable 6a7 > "handPosition" : [0, 4], items\generic\tier2\carrotcake.consumable 7c7 < "handPosition" : [0, -12], --- > "handPosition" : [0, -5], items\generic\tier2\carrotjuice.consumable 6a7 > "handPosition" : [-8, -2], items\generic\tier2\carrotsoup.consumable 6a7 > "handPosition" : [0, -4], items\generic\tier2\cheeseburger.consumable 6a7 > "handPosition" : [0, -4], items\generic\tier2\feathercrownjam.consumable 6a7 > "handPosition" : [0, 4], items\generic\tier2\featherfood.consumable 6a7 > "handPosition" : [0, 4], items\generic\tier2\hamburger.consumable 6a7 > "handPosition" : [0, -4], items\generic\tier2\kiwijam.consumable 6a7 > "handPosition" : [0, 4], items\generic\tier2\kiwijuice.consumable 7c7 < "handPosition" : [0, 4], --- > "handPosition" : [-7, -4], items\generic\tier2\mushroomquiche.consumable 6a7 > "handPosition" : [0, -3], items\generic\tier2\mushroomrice.consumable 6a7 > "handPosition" : [0, -3], items\generic\tier2\pasty.consumable 6a7 > "handPosition" : [0, 4], items\generic\tier2\pearlpeajam.consumable 6a7 > "handPosition" : [0, 4], items\generic\tier2\pearlpeapancakes.consumable 6a7 > "handPosition" : [0, -4], items\generic\tier2\pizza.consumable 6a7 > "handPosition" : [0, 4], items\generic\tier2\quichelorraine.consumable 6a7 > "handPosition" : [0, -3], items\generic\tier2\relish.consumable 6a7 > "handPosition" : [0, -4], items\generic\tier2\ricepudding.consumable 7c7 < "handPosition" : [0, 4], --- > "handPosition" : [0, -2], 14c14 < "effect" : "foodheal90", --- > "effect" : "foodheal190", items\generic\tier2\specialrice.consumable 6a7 > "handPosition" : [0, -2], items\generic\tier2\spikycookies.consumable 6a7 > "handPosition" : [8, -2], items\generic\tier2\stuffedtomato.consumable 6a7 > "handPosition" : [0, -4], items\generic\tier2\sweetpopcorn.consumable 6a7 > "handPosition" : [8, 4], items\generic\tier2\tomatojuice.consumable 7c7 < "handPosition" : [-8, 0], --- > "handPosition" : [8, -4], items\generic\tier2\tomatosoup.consumable 6a7 > "handPosition" : [0, -4], items\generic\tier4\alienfruitjam.consumable 8c8,23 < "wellfed" --- > { > "effect" : "runboost25", > "duration" : 30 > }, > { > "effect" : "lowgrav", > "duration" : 60 > }, > { > "effect" : "foodheal50", > "duration" : 60 > }, > { > "effect" : "wellfed", > "duration" : 210 > } 10c25,29 < "emitters" : [ "drinking" ] --- > "blockingEffects" : [ > "wellfed" > ], > "emitters" : [ "drinking" ], > "learnBlueprintsOnPickup" : [ "toxicjuice" ] items\generic\tier4\bloodypuss.consumable 9c9,20 < "wellfed" --- > { > "effect" : "jumpboost25", > "duration" : 60 > }, > { > "effect" : "bouncy", > "duration" : 60 > }, > { > "effect" : "wellfed", > "duration" : 210 > } 10a22,24 > "blockingEffects" : [ > "wellfed" > ], items\generic\tier4\brineapple.consumable 8a9,22 > { > "effect" : "foodheal25", > "duration" : 60 > }, > { > "effect" : "runboost25", > "duration" : 120 > }, > { > "effect" : "wellfed", > "duration" : 210 > } > ] ], > "blockingEffects" : [ 10c24,25 < ] ] --- > ], > "learnBlueprintsOnPickup" : [ "oceansalsa" ] items\generic\tier4\cyanider.consumable 8c8,23 < "wellfed" --- > { > "effect" : "jumpboost25", > "duration" : 30 > }, > { > "effect" : "foodheal50", > "duration" : 60 > }, > { > "effect" : "maxhealthboost40", > "duration" : 240 > }, > { > "effect" : "wellfed", > "duration" : 240 > } 10c25,29 < "emitters" : [ "drinking" ] --- > "blockingEffects" : [ > "wellfed" > ], > "emitters" : [ "drinking" ], > "learnBlueprintsOnPickup" : [ "oculemonstew" ] items\generic\tier4\oceanrisotto.consumable 7a8,25 > { > "effect" : "foodheal190", > "duration" : 60 > }, > { > "effect" : "maxhealthboost10", > "duration" : 240 > }, > { > "effect" : "maxenergyboost20", > "duration" : 240 > }, > { > "effect" : "wellfed", > "duration" : 240 > } > ] ], > "blockingEffects" : [ 9c27,28 < ] ] --- > ], > "learnBlueprintsOnPickup" : [ "oceansalsa", "reefpodsurprise" ] items\generic\tier4\oceansurprise.consumable 7a8,25 > { > "effect" : "foodheal145", > "duration" : 60 > }, > { > "effect" : "maxhealthboost20", > "duration" : 240 > }, > { > "effect" : "maxenergyboost40", > "duration" : 240 > }, > { > "effect" : "wellfed", > "duration" : 240 > } > ] ], > "blockingEffects" : [ 9c27 < ] ] --- > ] items\generic\tier4\oculemonmeringue.consumable 7a8,25 > { > "effect" : "runboost25", > "duration" : 30 > }, > { > "effect" : "foodheal95", > "duration" : 60 > }, > { > "effect" : "maxhealthboost40", > "duration" : 240 > }, > { > "effect" : "wellfed", > "duration" : 240 > } > ] ], > "blockingEffects" : [ 9c27 < ] ] --- > ] items\generic\tier4\oculemonstew.consumable 9c9,24 < "wellfed" --- > { > "effect" : "jumpboost25", > "duration" : 30 > }, > { > "effect" : "foodheal120", > "duration" : 60 > }, > { > "effect" : "maxhealthboost40", > "duration" : 240 > }, > { > "effect" : "wellfed", > "duration" : 240 > } 10a26,28 > "blockingEffects" : [ > "wellfed" > ], items\generic\tier4\pussplumpudding.consumable 8c8,23 < "wellfed" --- > { > "effect" : "runboost25", > "duration" : 30 > }, > { > "effect" : "jumpboost25", > "duration" : 30 > }, > { > "effect" : "foodheal240", > "duration" : 60 > }, > { > "effect" : "wellfed", > "duration" : 240 > } 9a25,27 > "blockingEffects" : [ > "wellfed" > ], items\generic\tier4\pussplumtart.consumable 7a8,21 > { > "effect" : "jumpboost25", > "duration" : 30 > }, > { > "effect" : "foodheal70", > "duration" : 60 > }, > { > "effect" : "wellfed", > "duration" : 180 > } > ] ], > "blockingEffects" : [ 9c23,24 < ] ] --- > ], > "learnBlueprintsOnPickup" : [ "pussplumpudding" ] items\generic\tier4\reefjuice.consumable 8c8,19 < "wellfed" --- > { > "effect" : "maxhealthboost10", > "duration" : 180 > }, > { > "effect" : "maxenergyboost20", > "duration" : 180 > }, > { > "effect" : "wellfed", > "duration" : 180 > } 10c21,25 < "emitters" : [ "drinking" ] --- > "blockingEffects" : [ > "wellfed" > ], > "emitters" : [ "drinking" ], > "learnBlueprintsOnPickup" : [ "reefshake" ] items\generic\tier4\reefpodsurprise.consumable 8c8,19 < "wellfed" --- > { > "effect" : "maxhealthboost50", > "duration" : 240 > }, > { > "effect" : "maxenergyboost20", > "duration" : 240 > }, > { > "effect" : "wellfed", > "duration" : 240 > } 9a21,23 > "blockingEffects" : [ > "wellfed" > ], items\generic\tier4\reefshake.consumable 9c9,20 < "wellfed" --- > { > "effect" : "maxhealthboost20", > "duration" : 180 > }, > { > "effect" : "maxenergyboost20", > "duration" : 180 > }, > { > "effect" : "wellfed", > "duration" : 180 > } 10a22,24 > "blockingEffects" : [ > "wellfed" > ], items\generic\tier4\ricecake.consumable 7a8,17 > { > "effect" : "foodheal145", > "duration" : 60 > }, > { > "effect" : "wellfed", > "duration" : 180 > } > ] ], > "blockingEffects" : [ 9c19,20 < ] ] --- > ], > "learnBlueprintsOnPickup" : [ "sushi" ] items\generic\tier4\saltsalad.consumable 6c6 < "shortdescription" : "Saltsalad", --- > "shortdescription" : "Salt Salad", 8a9,26 > { > "effect" : "foodheal50", > "duration" : 60 > }, > { > "effect" : "maxhealthboost10", > "duration" : 180 > }, > { > "effect" : "maxenergyboost20", > "duration" : 180 > }, > { > "effect" : "wellfed", > "duration" : 180 > } > ] ], > "blockingEffects" : [ 10c28,29 < ] ] --- > ], > "learnBlueprintsOnPickup" : [ "oceanrisotto" ] items\generic\tier4\seafoodgratin.consumable 7a8,17 > { > "effect" : "foodheal120", > "duration" : 60 > }, > { > "effect" : "wellfed", > "duration" : 180 > } > ] ], > "blockingEffects" : [ 9c19,20 < ] ] --- > ], > "learnBlueprintsOnPickup" : [ "brineapple", "saltsalad" ] items\generic\tier4\soggysack.consumable 7a8,17 > { > "effect" : "foodheal50", > "duration" : 60 > }, > { > "effect" : "wellfed", > "duration" : 150 > } > ] ], > "blockingEffects" : [ 9c19 < ] ] --- > ] items\generic\tier4\stuffeddirturchin.consumable 8a9,18 > { > "effect" : "foodheal120", > "duration" : 60 > }, > { > "effect" : "wellfed", > "duration" : 180 > } > ] ], > "blockingEffects" : [ 10c20 < ] ] --- > ] items\generic\tier4\sushi.consumable 7a8,17 > { > "effect" : "foodheal240", > "duration" : 60 > }, > { > "effect" : "wellfed", > "duration" : 210 > } > ] ], > "blockingEffects" : [ 9c19 < ] ] --- > ] items\generic\tier4\toxicjamdonut.consumable 7a8,29 > { > "effect" : "weakpoison", > "duration" : 30 > }, > { > "effect" : "energyregen672", > "duration" : 60 > }, > { > "effect" : "runboost25", > "duration" : 120 > }, > { > "effect" : "maxenergyboost100", > "duration" : 300 > }, > { > "effect" : "wellfed", > "duration" : 300 > } > ] ], > "blockingEffects" : [ 9c31 < ] ] --- > ] items\generic\tier4\toxicjuice.consumable 8c8,27 < "wellfed" --- > { > "effect" : "weakpoison", > "duration" : 30 > }, > { > "effect" : "lowgrav", > "duration" : 60 > }, > { > "effect" : "energyregen384", > "duration" : 60 > }, > { > "effect" : "maxenergyboost80", > "duration" : 240 > }, > { > "effect" : "wellfed", > "duration" : 240 > } 10c29,33 < "emitters" : [ "drinking" ] --- > "blockingEffects" : [ > "wellfed" > ], > "emitters" : [ "drinking" ], > "learnBlueprintsOnPickup" : [ "toxictart" ] items\generic\tier4\toxictart.consumable 7a8,33 > { > "effect" : "weakpoison", > "duration" : 30 > }, > { > "effect" : "runboost25", > "duration" : 60 > }, > { > "effect" : "lowgrav", > "duration" : 60 > }, > { > "effect" : "energyregen480", > "duration" : 60 > }, > { > "effect" : "maxenergyboost80", > "duration" : 270 > }, > { > "effect" : "wellfed", > "duration" : 270 > } > ] ], > "blockingEffects" : [ 9c35 < ] ] --- > ] items\generic\tier4\toxictopjam.consumable 8c8,27 < "wellfed" --- > { > "effect" : "weakpoison", > "duration" : 30 > }, > { > "effect" : "runboost25", > "duration" : 60 > }, > { > "effect" : "energyregen384", > "duration" : 60 > }, > { > "effect" : "maxenergyboost80", > "duration" : 240 > }, > { > "effect" : "wellfed", > "duration" : 240 > } 10c29,33 < "emitters" : [ "drinking" ] --- > "blockingEffects" : [ > "wellfed" > ], > "emitters" : [ "drinking" ], > "learnBlueprintsOnPickup" : [ "toxicjamdonut" ] items\tools\miningtools\copperdrill.miningtool 28c28 < "harvestLevel" : 9999, --- > "harvestLevel" : 99, items\tools\miningtools\diamonddrill.miningtool 28c28 < "harvestLevel" : 9999, --- > "harvestLevel" : 99, items\tools\miningtools\golddrill.miningtool 28c28 < "harvestLevel" : 9999, --- > "harvestLevel" : 99, items\tools\miningtools\platinumdrill.miningtool 28c28 < "harvestLevel" : 9999, --- > "harvestLevel" : 99, items\tools\miningtools\silverdrill.miningtool 28c28 < "harvestLevel" : 9999, --- > "harvestLevel" : 99, monsters\crawling\crawlingmonster.lua 13a14,19 > self.lastTargetPosition = {0, 0} > self.staleTargetTime = 1.0 > self.staleTargetTimer = 0 > self.skillOptions = {} > self.noOptionCount = 0 > 19a26,27 > self.skillTimer = 0 > 22a31,33 > self.lastAggressGroundPosition = {0, 0} > self.stuckCount = 0 > self.stuckPosition = {0, 0} 30c41 < local states = stateMachine.scanScripts(entity.configParameter("scripts"), "(%a+State)%.lua") --- > local states = stateMachine.scanScripts(entity.configParameter("scripts"), "(%a+State)%.lua") 37,39c48 < if _ENV[special].enter then < table.insert(states, 1, special) < end --- > table.insert(states, 1, special) 45d53 < 48,49c56,77 < self.skillCooldownTimers[skillName] = params.cooldownTime < self.skillParameters[skillName] = params --- > > --create generic attacks from factories > if params and params.factory then > if type(_ENV[params.factory]) == "function" then > if not _ENV[skillName] then > _ENV[skillName] = _ENV[params.factory](skillName) > table.insert(states, 1, skillName) > else > world.logInfo("Failed to create skill %s from factory %s: Table %s already exists in this context", skillName, params.factory, skillName) > end > else > world.logInfo("Failed to create skill %s from factory %s: factory function does not exist in this context", skillName, params.factory) > end > end > > self.skillParameters[skillName] = loadSkillParameters(skillName) > self.skillCooldownTimers[skillName] = 0 > > --run skill onInit hooks > if type(_ENV[skillName].onInit) == "function" then > _ENV[skillName].onInit() > end 51a80,81 > self.skillChains = {} > 56c86,93 < entity.setActiveSkillName(stateName) --- > self.skillTimer = self.skillParameters[stateName].skillTimeLimit > > --increment or reset the attack chain tracker > if self.skillChains[stateName] then > self.skillChains[stateName] = self.skillChains[stateName] + 1 > else > self.skillChains = { [stateName] = 1 } > end 75a113,114 > > entity.setGlobalTag("flipTag", "") 80,91c119,120 < self.position = mcontroller.position() < self.onGround = mcontroller.onGround() < < --execute skill onUpdate hooks < for skillName, params in pairs(self.skillParameters) do < if type(_ENV[skillName].onUpdate) == "function" then < _ENV[skillName].onUpdate(dt) < end < end < < if self.groundDirection[2] ~= -1 then < if not self.jumping then mcontroller.controlFly({ 0, 0 }, true) end --- > if self.groundDirection[2] ~= -1 and (onGround() or self.groundChangeCooldownTimer > 0) then > mcontroller.controlFly({0,0}) 93c122 < gravityEnabled = false --- > gravityEnabled = false 96a126,128 > self.position = mcontroller.position() > self.onGround = mcontroller.onGround() > 100a133 > local inState = self.state.stateDesc() 104a138,144 > --execute skill onUpdate hooks > for skillName, params in pairs(self.skillParameters) do > if type(_ENV[skillName].onUpdate) == "function" then > _ENV[skillName].onUpdate(dt) > end > end > 123c163,165 < setGroundDirection({0, -1}) --- > --do nothin > elseif inState == "stunState" or inState == "fleeState" then > self.state.update(dt) 125c167,168 < trackTarget() --- > checkTerritory() > track() 128,133c171,175 < --this should end up in skills < for skillName, skillCooldown in pairs(self.skillCooldownTimers) do < if skillCooldown <= 0 then < self.state.pickState() < end < end --- > --calculate skill positions relative to target > updateSkillOptions() > > --this should end up in skills, approach, or fall back into flee > if inState ~= "approachState" then self.state.pickState() end 137c179,185 < self.state.pickState() --This should be the evade state --- > if hasTarget() then > -- Force flee > self.state.pickState({flee = true}) > else > -- Force wandering > self.state.pickState({wander = true}) > end 141c189,191 < decrementTimers() --- > if hasTarget() and self.debug then > drawDebugSkillOptions() > end 143,149c193,194 < if self.jumping then < mcontroller.controlParameters({ < gravityMultiplier = 0.4 < }) < if self.jumpTimer < 0 and findGround() then < self.jumping = false < end --- > if hasTarget() then > setGroundDirection({0, -1}) 152c197,199 < script.setUpdateDelta(hasTarget() and 1 or self.jumping and 1 or 10) --- > decrementTimers() > > script.setUpdateDelta(hasTarget() and 1 or 10) 156,157c203,212 < function damage(args) < setTarget(args.sourceId) --- > -- get the skill parameters from the relevant configParameter and make necessary adjustments > function loadSkillParameters(skillName) > -- world.logInfo("%s %s loading parameters for skill %s", entity.type(), entity.id(), skillName) > if type(_ENV[skillName].loadSkillParameters) == "function" then > return _ENV[skillName].loadSkillParameters() > elseif entity.configParameter(skillName) then > local params = entity.configParameter(skillName) > > local xAdjust = entity.configParameter("projectileSourcePosition", {0, 0})[1] > local yAdjust = -(mcontroller.boundBox()[2] + 2.5) + entity.configParameter("projectileSourcePosition", {0, 0})[2] 159,160c214,250 < if entity.health() > 0 then < self.state.endState() --- > for i, rect in ipairs(params.startRects) do > local startRect = normalizeRect(rect) > > --adjust rect for monster mouth position > if startRect[1] > 0 then > startRect[1] = startRect[1] + xAdjust > elseif startRect[1] < 0 then > startRect[1] = startRect[1] - xAdjust > end > if startRect[3] > 0 then > startRect[3] = startRect[3] + xAdjust > elseif startRect[1] < 0 then > startRect[3] = startRect[3] - xAdjust > end > > --adjust rect for monster standing height compared to player > startRect[2] = startRect[2] + yAdjust > startRect[4] = startRect[4] + yAdjust > > params.startRects[i] = startRect > > --adjust corresponding approachPoint > local approachPoint = params.approachPoints[i] > if approachPoint[1] > 0 then > approachPoint[1] = approachPoint[1] + xAdjust > elseif approachPoint[1] < 0 then > approachPoint[1] = approachPoint[1] - xAdjust > end > > approachPoint[2] = approachPoint[2] + yAdjust > > params.approachPoints[i] = approachPoint > end > > return params > else > world.logInfo("Unable to load parameters for skill %s!", skillName) 165,166c255,286 < function setSpawnVelocity(velocity) < mcontroller.setVelocity(velocity) --- > function damage(args) > if capturepod ~= nil and capturepod.onDamage(args) then > return > end > > --execute skill onDamage hooks > for skillName, params in pairs(self.skillParameters) do > if type(_ENV[skillName].onDamage) == "function" then > _ENV[skillName].onDamage(args) > end > end > > if args.damage > 0 then > local entityId = entity.id() > local damageNotificationRegion = entity.configParameter("damageNotificationRegion", { -10, -4, 10, 4 }) > world.entityQuery( > vec2.add({ damageNotificationRegion[1], damageNotificationRegion[2] }, self.position), > vec2.add({ damageNotificationRegion[3], damageNotificationRegion[4] }, self.position), > { > includedTypes = {"monster"}, > withoutEntityId = entityId, > callScript = "monsterDamaged", > callScriptArgs = { entityId, entity.seed(), args.sourceId } > } > ) > > if entity.health() <= 0 then > world.callScriptedEntity(args.sourceId, "monsterKilled", entity.id()) > else > if args.sourceId ~= self.target and args.sourceId ~= 0 then setTarget(args.sourceId) end > end > end 191,203d310 < function directionFromHeading(heading) < if self.groundDirection[2] == -1 then < return util.toDirection(heading[1]) < elseif self.groundDirection[2] == 1 then < return util.toDirection(-heading[1]) < elseif self.groundDirection[1] == -1 then < return util.toDirection(-heading[2]) < elseif self.groundDirection[1] == 1 then < return util.toDirection(heading[2]) < end < end < < -------------------------------------------------------------------------------- 230,250c337,342 < function findGround() < local bounds = boundingBox() < local groundDirections = { < {0, 1}, < {1, 0}, < {-1, 0}, < {0, -1} < } < < for _,direction in pairs(groundDirections) do < local floorCheckRegion = { < bounds[1] + direction[1] * 0.5, < bounds[2] + direction[2] * 0.5, < bounds[3] + direction[1] * 0.5, < bounds[4] + direction[2] * 0.5 < } < if world.rectCollision(floorCheckRegion, true) then < setGroundDirection(direction, true) < entity.setAnimationState("movement", "idle") < return true < end --- > function controlFace(direction) > mcontroller.controlFace(1) > if direction < 0 then > entity.setGlobalTag("flipTag", "?flipx") > else > entity.setGlobalTag("flipTag", "") 252,253d343 < < return false 256d345 < 258,265c347,349 < function directionalJump(direction, speed) < if self.groundChangeCooldownTimer <= 0 then < local jumpMovement = vec2.mul(vec2.norm(direction), speed) < setGroundDirection({0, -1}) < mcontroller.setVelocity(jumpMovement) < self.jumping = true < self.jumpTimer = 0.2 < entity.setAnimationState("movement", "jump") --- > function faceTarget() > if self.onGround then > mcontroller.controlFace(self.toTarget[1]) 270,272c354,361 < function faceTarget() < if self.onGround then < mcontroller.controlFace(self.toTarget[1]) --- > -- NOTE: this will be inaccurate if called more than once per tick > function checkStuck() > local newPos = mcontroller.position() > if newPos[1] == self.stuckPosition[1] and newPos[2] == self.stuckPosition[2] then > self.stuckCount = self.stuckCount + 1 > else > self.stuckCount = 0 > self.stuckPosition = newPos 273a363,364 > > return self.stuckCount 283,284c374 < function move(direction, run) < if self.jumping then return false end --- > function crawl(direction, run) 287a378,379 > controlFace(direction) > 312c404 < util.debugLine(mcontroller.position(), vec2.add(mcontroller.position(), vec2.mul(self.groundDirection, 3)), "blue") --- > --util.debugLine(mcontroller.position(), vec2.add(mcontroller.position(), vec2.mul(self.groundDirection, 3)), "blue") 315c407 < if math.abs(direction) > 0 then --- > if math.abs(direction) > 0 or true then 385a478,532 > -------------------------------------------------------------------------------- > function move(delta, run, jumpThresholdX) > checkTerrain(delta[1]) > > mcontroller.controlMove(delta[1], run) > > if self.jumpTimer > 0 and not self.onGround then > mcontroller.controlHoldJump() > else > if self.jumpTimer <= 0 then > if jumpThresholdX == nil then jumpThresholdX = 4 end > > -- We either need to be blocked by something, the target is above us and > -- we are about to fall, or the target is significantly high above us > local doJump = false > if isBlocked() then > doJump = true > elseif (delta[2] >= 0 and willFall() and math.abs(delta[1]) > 7) then > doJump = true > elseif (math.abs(delta[1]) < jumpThresholdX and delta[2] > entity.configParameter("jumpTargetDistance")) then > doJump = true > end > > if doJump then > self.jumpTimer = entity.randomizeParameterRange("jumpTime") > jump() > end > end > end > > if delta[2] < 0 then > mcontroller.controlDown() > end > > if not self.onGround then > entity.setAnimationState("movement", "jump") > elseif delta[1] ~= 0 then > entity.setAnimationState("movement", "run") > else > entity.setAnimationState("movement", "idle") > end > end > -------------------------------------------------------------------------------- > function jump() > mcontroller.controlJump() > end > > -------------------------------------------------------------------------------- > function moveX(direction, run) > checkTerrain(direction) > > mcontroller.controlMove(direction, run) > end > -------------------------------------------------------------------------------- > 423c570,654 < function trackTarget() --- > --TODO: this could probably be further optimized by creating a list of discrete points and using sensors... project for another time > function checkTerrain(direction) > --normalize to 1 or -1 > direction = direction > 0 and 1 or -1 > > local reverse = false > if direction ~= nil then > reverse = direction ~= mcontroller.facingDirection() > end > > local boundBox = mcontroller.boundBox() > > -- update self.isBlocked > local blockLine, topLine > if not reverse then > blockLine = {entity.toAbsolutePosition({boundBox[3] + 0.25, boundBox[4]}), entity.toAbsolutePosition({boundBox[3] + 0.25, boundBox[2] - 1.0})} > else > blockLine = {entity.toAbsolutePosition({-boundBox[3] - 0.25, boundBox[4]}), entity.toAbsolutePosition({-boundBox[3] - 0.25, boundBox[2] - 1.0})} > end > > local blockBlocks = world.collisionBlocksAlongLine(blockLine[1], blockLine[2]) > self.isBlocked = false > if #blockBlocks > 0 then > --check for basic blockage > local topOffset = blockBlocks[1][2] - blockLine[2][2] > if topOffset > 2.75 then > self.isBlocked = true > elseif topOffset > 0.25 then > --also check for that stupid little hook ledge thing > self.isBlocked = not world.pointCollision({blockBlocks[1][1] - direction, blockBlocks[1][2] - 1}) > > if not self.isBlocked then > --also check if blocks above prevent us from climbing > topLine = {entity.toAbsolutePosition({boundBox[1], boundBox[4] + 0.5}), entity.toAbsolutePosition({boundBox[3], boundBox[4] + 0.5})} > self.isBlocked = world.lineCollision(topLine[1], topLine[2]) > end > end > end > > -- world.debugLine(blockLine[1], blockLine[2], self.isBlocked and "red" or "blue") > -- if topLine then world.debugLine(topLine[1], topLine[2], self.isBlocked and "red" or "blue") end > -- if #blockBlocks > 0 then world.debugPoint({blockBlocks[1][1] - direction, blockBlocks[1][2] - 1}, self.isBlocked and "red" or "blue") end > > -- update self.willFall > local fallLine > if reverse then > fallLine = {entity.toAbsolutePosition({-0.5, boundBox[2] - 0.75}), entity.toAbsolutePosition({boundBox[3], boundBox[2] - 0.75})} > else > fallLine = {entity.toAbsolutePosition({0.5, boundBox[2] - 0.75}), entity.toAbsolutePosition({-boundBox[3], boundBox[2] - 0.75})} > end > self.willFall = > world.lineCollision(fallLine[1], fallLine[2]) == false and > world.lineCollision({fallLine[1][1], fallLine[1][2] - 1}, {fallLine[2][1], fallLine[2][2] - 1}) == false > > -- world.debugLine(fallLine[1], fallLine[2], self.willFall and "red" or "blue") > -- world.debugLine({fallLine[1][1], fallLine[1][2] - 1}, {fallLine[2][1], fallLine[2][2] - 1}, self.willFall and "red" or "blue") > end > > -------------------------------------------------------------------------------- > function isBlocked() > return self.isBlocked > end > > -------------------------------------------------------------------------------- > function willFall() > return self.willFall > end > > -------------------------------------------------------------------------------- > function checkTerritory() > local tdist = entity.configParameter("territoryDistance") > local hdist = world.distance(self.position, storage.basePosition)[1] > > if hdist > tdist then > self.territory = -1 > return > elseif hdist < -tdist then > self.territory = 1 > else > self.territory = 0 > end > end > > -------------------------------------------------------------------------------- > function track() 425c656 < if not world.entityExists(self.target) or (not attacking() and self.targetHoldTimer <= 0) then --- > if not world.entityExists(self.target) or (not inSkill() and self.targetHoldTimer <= 0) then 426a658,659 > elseif inSkill() then > self.targetHoldTimer = entity.configParameter("targetHoldTime") 430,433c663,678 < local target = entity.closestValidTarget(entity.configParameter("targetRadius")) < if entity.entityInSight(target) then < setTarget(entity.closestValidTarget(entity.configParameter("targetRadius"))) < self.targetSearchTimer = entity.configParameter("targetSearchTime") --- > -- Use either the territorialTargetRadius or the minimalTargetRadius, > -- depending on whether we are in our territory or not > local targetId > if self.territory == 0 then > targetId = entity.closestValidTarget(entity.configParameter("territorialTargetRadius")) > else > targetId = entity.closestValidTarget(entity.configParameter("minimalTargetRadius")) > end > > if targetId ~= 0 then > -- Pets don't attack npcs unless they are attacking the owner > if isCaptive() and world.isNpc(targetId) and world.callScriptedEntity(targetId, "attackTargetId") ~= self.ownerEntityId then > targetId = 0 > end > > setTarget(targetId) 434a680,681 > > self.targetSearchTimer = entity.configParameter("targetSearchTime") 437,439c684 < if self.target == 0 then < self.toTarget = {0, 0} < else --- > if hasTarget() then 440a686,687 > else > self.toTarget = {0, 0} 441a689,690 > > self.fromTarget = {-self.toTarget[1], -self.toTarget[2]} 479a729,818 > function updateSkillOptions() > if not hasTarget() then return nil end > > local targetMoveTolerance = 0.5 > local collisionTolerance = 2 > > local newTargetPosition = world.entityPosition(self.target) > local targetMovement = world.distance(self.lastTargetPosition, newTargetPosition) > > --if target has moved or information is stale, perform full update > if self.staleTargetTimer <= 0 or math.abs(targetMovement[1]) > targetMoveTolerance or math.abs(targetMovement[2]) > targetMoveTolerance then > local validOptionCount = 0 > self.skillOptions = {} > > --find starting points and rects for each skill > for skillName, params in pairs(self.skillParameters) do > for i, offset in ipairs(self.skillParameters[skillName].approachPoints) do > local approachPoint = {newTargetPosition[1] + offset[1], newTargetPosition[2] + offset[2]} > local startRect = translate(self.skillParameters[skillName].startRects[i], newTargetPosition) > > self.skillOptions[#self.skillOptions + 1] = { > skillName = skillName, > approachPoint = approachPoint, > startRect = startRect, > valid = false > } > > approachPoint = world.resolvePolyCollision(entity.configParameter("movementSettings.collisionPoly"), approachPoint, collisionTolerance) > if approachPoint > and pointWithinRect(approachPoint, startRect) --approachPoint hasn't been shifted out of the startRect > and (params.requireLos == false or world.lineCollision(approachPoint, newTargetPosition) == false) --space is in LoS of target > and self.skillCooldownTimers[skillName] <= travelTime(world.distance(mcontroller.position(), approachPoint)[1]) + 0.4 --skill will be ready when we get there > then > > --now check for ground below. first try a line down from the approach point > local canStand = world.lineCollision(approachPoint, {approachPoint[1], startRect[2] + mcontroller.boundBox()[2]}, false) > > --if that fails, try placing a collision poly at the bottom edge of the startRect > if not canStand then > local fallPoint = {approachPoint[1], startRect[2]} > local resolvedFallPoint = world.resolvePolyCollision(entity.configParameter("movementSettings.collisionPoly"), fallPoint, collisionTolerance) > > if (resolvedFallPoint == nil) or math.abs(fallPoint[2] - resolvedFallPoint[2]) > 0.2 then > if resolvedFallPoint and pointWithinRect(resolvedFallPoint, startRect) then approachPoint = resolvedFallPoint end > canStand = true > end > end > > if canStand then > self.skillOptions[#self.skillOptions].approachPoint = approachPoint > self.skillOptions[#self.skillOptions].valid = true > validOptionCount = validOptionCount + 1 > end > end > end > end > > if validOptionCount == 0 then > self.noOptionCount = self.noOptionCount + 1 > else > self.noOptionCount = 0 > end > > self.lastTargetPosition = newTargetPosition > self.staleTargetTimer = self.staleTargetTime > end > > --update deltas, distances and scores > for _, option in pairs(self.skillOptions) do > option.approachDelta = world.distance(option.approachPoint, mcontroller.position()) > option.approachDistance = world.magnitude(option.approachDelta) > > --score with custom hook or default method > if type(_ENV[option.skillName].scoreOption) == "function" then > option.score = _ENV[option.skillName].scoreOption(option) > else > option.score = -option.approachDistance > if option.valid == false then option.score = -1000 end > end > > if self.skillChains[option.skillName] then > option.score = option.score - self.skillChains[option.skillName] > end > end > > --rank options > table.sort(self.skillOptions, function(a,b) return a.score > b.score end) > end > > -------------------------------------------------------------------------------- 514a854,888 > -------------------------------------------------------------------------------- > -- draw points and rects for each approach point and valid attack start zone > function drawDebugSkillOptions() > for i, option in pairs(self.skillOptions) do > world.debugPoint(option.approachPoint, "green") > drawDebugRect(option.startRect, i == 1 and "#3333FF" or option.valid and "#AAFFBB" or "#FF3333") > world.debugText(option.skillName, {option.startRect[1], option.startRect[4]}, "#BBBBFF") > world.debugText(option.approachDelta[1], {option.startRect[1], option.startRect[4] + 1.5}, "#000099") > > world.debugPoint(mcontroller.position(), "blue") > local tarPos = world.entityPosition(self.target) > if tarPos then world.debugPoint(tarPos, "red") end > end > end > > -------------------------------------------------------------------------------- > function canStartSkill(skillName) > if skillName and hasTarget() then > if self.skillCooldownTimers[skillName] <= 0 then > for _, option in ipairs(self.skillOptions) do > if option.skillName == skillName and (option.startOnGround == false or mcontroller.onGround()) and pointWithinRect(mcontroller.position(), option.startRect) then > return true > end > end > end > end > > return false > end > > -------------------------------------------------------------------------------- > function canContinueSkill() > return hasTarget() and > self.skillTimer > 0 > end 524c898 < return stateName == "aggroHopState" or isSkillState(stateName) --- > return isSkillState(stateName) 531a906,911 > > -------------------------------------------------------------------------------- > function isSkillState(stateName) > return string.find(stateName, 'Attack$') or string.find(stateName, 'Special$') > end > 543a924,925 > self.skillTimer = self.skillTimer - dt > self.staleTargetTimer = self.staleTargetTimer - dt monsters\crawling\wanderstate.lua 21c21 < move(stateData.direction) --- > crawl(stateData.direction) monsters\ground\skills\shieldspecial.lua 2c2 < active = false, --- > activate = false, 10c10,11 < if sourceId ~= 0 then --- > if sourceId ~= 0 and hasTarget() and shieldSpecial.activate then > shieldSpecial.activateShield() 14d14 < 16,17c16,27 < --Keep the shield up if it's up, activate if the cooldown is off < if status.resourcePositive("shieldHealth") or self.skillCooldownTimers["shieldSpecial"] <= 0 then --- > if not hasTarget() then > shieldSpecial.deactivateShield() > return true > end > > --Set to activate on next damage > if self.skillCooldownTimers["shieldSpecial"] <= 0 then > shieldSpecial.activate = true > end > > --Keep the shield up if it's up > if status.resourcePositive("shieldHealth") then 39c49 < if self.skillCooldownTimers["shieldSpecial"] <= 0 then --- > if shieldSpecial.activate then 42a53 > shieldSpecial.activate = false monsters\unique\glitchspider\default.frames 10a11,20 > }, > > "aliases" : { > "windup.1" : "ranged.1", > "windup.2" : "ranged.2", > "windup.3" : "ranged.3", > > "winddown.1" : "ranged.4", > "winddown.2" : "ranged.5", > "winddown.3" : "ranged.6" monsters\unique\glitchspider\glitchspider.animation 27a28,43 > }, > "chargeWindup" : { > "frames" : 6, > "cycle" : 0.3, > "mode" : "loop" > }, > "charge" : { > "frames" : 6, > "cycle" : 0.3, > "mode" : "loop" > }, > "knockback" : { > "frames" : 1 > }, > "knockout" : { > "frames" : 1 55a72,83 > }, > "windup" : { > "frames" : 3, > "cycle" : 0.25, > "mode" : "transition", > "transition" : "shooting" > }, > "winddown" : { > "frames" : 3, > "cycle" : 0.25, > "mode" : "transition", > "transition" : "idle" 81c109 < "image" : ":idle" --- > "image" : ":idle" 86c114 < "image" : ":jump" --- > "image" : ":jump" 91c119 < "image" : ":fall." --- > "image" : ":fall." 96c124 < "image" : ":move." --- > "image" : ":move." 101c129 < "image" : ":move." --- > "image" : ":move." 104c132 < "ranged" : { --- > "charge" : { 106c134,149 < "image" : ":ranged." --- > "image" : ":move." > } > }, > "chargeWindup" : { > "properties" : { > "image" : ":move." > } > }, > "knockback" : { > "properties" : { > "image" : ":jump" > } > }, > "knockout" : { > "properties" : { > "image" : ":jump" 114c157,167 < "image" : ":idle" --- > "image" : ":ranged.3" > } > }, > "windup" : { > "properties" : { > "image" : ":windup." > } > }, > "winddown" : { > "properties" : { > "image" : ":winddown." monsters\unique\glitchspider\glitchspider.monstertype 20c20,21 < "/monsters/crawling/evadeState.lua", --- > "/monsters/crawling/approachState.lua", > "/monsters/crawling/fleeState.lua", 25,26c26,27 < "baseSkills" : [], < "specialSkills" : ["dropSpecial"], --- > "baseSkills" : ["flameThrowerAttack"], > "specialSkills" : ["pounceAttack"], 28c29,33 < "targetRadius" : 15.0, --- > "projectileSourcePosition" : [0.2, 0.8], > > "territoryDistance" : 40.0, > "territorialTargetRadius" : 20.0, > "minimalTargetRadius" : 6.0, 32c37,40 < "aggressive" : false, --- > "aggressive" : true, > > "jumpTargetDistance" : 4, > "jumpTime" : [0.4, 0.7], 39,45d46 < "evade" : { < "jumpSpeed" : 30, < "actionCooldown" : 2, < "maxCeilingHeight": 15, < "targetYOffset" : 6 < }, < 70c71 < "knockoutTime" : 1, --- > "knockoutTime" : 0.5, 71a73,76 > "knockoutAnimationStates" : { > "movement" : "knockout", > "attack" : "idle" > }, 85c90 < "targetMaterialKind" : "organic" --- > "targetMaterialKind" : "robotic" 105a111,113 > }, > "poisonImmunity" : { > "baseValue" : 1.0 npcs\merchant.npctype 248c248 < { "item" : { "name" : "pizzap" }, "cost" : 2355 }, --- > { "item" : { "name" : "8gbpizzap" }, "cost" : 2355 }, npcs\mission\miner.npctype 12a13 > "damageTeamType" : "friendly", npcs\outpost\outpostavianrefugee.npctype 6,7c6,7 < "offeredQuests" : [ "avianrefugee2part1.gearup", "avianrefugee2part2.gearup" ], < "turnInQuests" : [ "avianrefugee2part2.gearup" ], --- > "offeredQuests" : [ "avianrefugee2part1.gearup", "avianrefugee2part2.gearup", "avianrefugeeE1.gearup", "avianrefugeeE2.gearup" ], > "turnInQuests" : [ "avianrefugee2part2.gearup", "avianrefugeeE1.gearup", "avianrefugeeE2.gearup" ], npcs\outpost\outpostfloranscholar.npctype 7c7 < "turnInQuests" : [ "avianrefugee2part1.gearup", "floranscholar2.gearup" ], --- > "turnInQuests" : [ "avianrefugee2part1.gearup", "floranscholar2.gearup","hylotlperformerE2part1.gearup" ], npcs\outpost\outposthumanscientist.npctype 5a6,7 > "offeredQuests" : [ "humanscientistE1.gearup" ], > "turnInQuests" : [ "humanscientistE1.gearup" ], npcs\outpost\outposthylotlperformer.npctype 6,7c6,7 < "offeredQuests" : [ "hylotlperformer1.gearup", "hylotlperformer3.gearup", "hylotlperformerE1.gearup" ], < "turnInQuests" : [ "hylotlperformer1.gearup", "hylotlperformer3.gearup", "hylotlperformerE1.gearup" ], --- > "offeredQuests" : [ "hylotlperformer1.gearup", "hylotlperformer3.gearup", "hylotlperformerE1.gearup", "hylotlperformerE2part1.gearup", "hylotlperformerE2part2.gearup" ], > "turnInQuests" : [ "hylotlperformer1.gearup", "hylotlperformer3.gearup", "hylotlperformerE1.gearup", "hylotlperformerE2part2.gearup" ], npcs\outpost\outposthylotlwarrior.npctype 5a6,7 > "offeredQuests" : [ "hylotlwarriorE1.gearup", "hylotlwarriorE2.gearup" ], > "turnInQuests" : [ "hylotlwarriorE1.gearup", "hylotlwarriorE2.gearup" ], objects\crafting\spawnerstation\spawnerstation.frames 4c4 < "size" : [32, 24], --- > "size" : [32, 32], objects\crafting\spawnerstation\spawnerstation.object 10c10 < "description" : "A station used to obtain employment beacons that call in all kinds of helpful people.", --- > "description" : "A station used to obtain employment beacons that call in all kinds of people.", objects\generic\arcadegame\arcadegameobject.lua 2c2 < world.spawnItem(entity.configParameter("winningticket"), vec2.add(entity.position(), {0, 3})) --- > world.spawnItem(entity.configParameter("winningItem"), vec2.add(entity.position(), {0, 3})) objects\minibiome\bioluminescence\glowbush\glowbush1.object 17c17 < // "objectItem" : "plantfibre", --- > "objectItem" : "glowfibreorange", objects\minibiome\bioluminescence\glowbush\glowbush2.object 17c17 < // "objectItem" : "plantfibre", --- > "objectItem" : "glowfibreorange", objects\minibiome\bioluminescence\glowbush\glowbush3.object 17c17 < // "objectItem" : "plantfibre", --- > "objectItem" : "glowfibreorange", objects\minibiome\bioluminescence\glowbush\glowbush4.object 17c17 < // "objectItem" : "plantfibre", --- > "objectItem" : "glowfibreorange", objects\minibiome\bioluminescence\glowbush\glowbush5.object 17c17 < // "objectItem" : "plantfibre", --- > "objectItem" : "glowfibreorange", objects\minibiome\bioluminescence\glowflower\glowflower1.object 17c17 < // "objectItem" : "plantfibre", --- > "objectItem" : "glowfibreyellow", objects\minibiome\bioluminescence\glowflower\glowflower2.object 17c17 < // "objectItem" : "plantfibre", --- > "objectItem" : "glowfibreyellow", objects\minibiome\bioluminescence\glowflower\glowflower3.object 17c17 < // "objectItem" : "plantfibre", --- > "objectItem" : "glowfibreyellow", objects\minibiome\bioluminescence\glowflower\glowflower4.object 17c17 < // "objectItem" : "plantfibre", --- > "objectItem" : "glowfibreyellow", objects\minibiome\bioluminescence\glowflower\glowflower5.object 17c17 < // "objectItem" : "plantfibre", --- > "objectItem" : "glowfibreyellow", objects\minibiome\bioluminescence\glowtree\glowtree1.object 17c17 < // "objectItem" : "plantfibre", --- > // "objectItem" : "glowfibreblue", objects\minibiome\bioluminescence\glowtree\glowtree2.object 17c17 < // "objectItem" : "plantfibre", --- > // "objectItem" : "glowfibreblue", objects\minibiome\bioluminescence\glowtree\glowtree3.object 17c17 < // "objectItem" : "plantfibre", --- > // "objectItem" : "glowfibreblue", objects\minibiome\bioluminescence\glowtree\glowtree4.object 17c17 < // "objectItem" : "plantfibre", --- > // "objectItem" : "glowfibreblue", objects\minibiome\bioluminescence\glowtree\glowtree5.object 17c17 < // "objectItem" : "plantfibre", --- > // "objectItem" : "glowfibreblue", objects\minibiome\bioluminescence\glowvine\glowvine1.object 17c17 < // "objectItem" : "plantfibre", --- > // "objectItem" : "glowfibreblue", objects\minibiome\bioluminescence\glowvine\glowvine2.object 17c17 < // "objectItem" : "plantfibre", --- > // "objectItem" : "glowfibreblue", objects\minibiome\bioluminescence\glowvine\glowvine3.object 17c17 < // "objectItem" : "plantfibre", --- > // "objectItem" : "glowfibreblue", objects\minibiome\bioluminescence\glowvine\glowvine4.object 17c17 < // "objectItem" : "plantfibre", --- > // "objectItem" : "glowfibreblue", objects\minibiome\bioluminescence\glowvine\glowvine5.object 17c17 < // "objectItem" : "plantfibre", --- > // "objectItem" : "glowfibreblue", objects\minibiome\giantflower\giantflowerchest\giantflowerchest.object 32,33c32,33 < "openSounds" : [ "/sfx/objects/chest_small_open.wav" ], < "closeSounds" : [ "/sfx/objects/chest_small_close.wav" ], --- > "openSounds" : [ "/sfx/objects/florancrate_open.wav" ], > "closeSounds" : [ "/sfx/objects/florancrate_close.wav" ], objects\minibiome\jungle\junglechest\junglechest.object 29,30c29,30 < "openSounds" : [ "/sfx/objects/chest_small_open.wav" ], < "closeSounds" : [ "/sfx/objects/chest_small_close.wav" ], --- > "openSounds" : [ "/sfx/objects/florancrate_open.wav" ], > "closeSounds" : [ "/sfx/objects/florancrate_close.wav" ], quests\outpost\endgame\avianrefugeee1.questtemplate 11c11 < "moneyRange" : [200, 200], --- > "moneyRange" : [80, 80], quests\outpost\endgame\avianrefugeee2.questtemplate 6c6 < "text" : "I've finalised my plans for one-man flight! ^green;If you aren't busy, please ^orange;take this Blueprint and craft me Paper Wings ^white; so I can soar like the moon in the night sky!", --- > "text" : "I've finalised my plans for one-man flight! ^green;If you aren't busy, please ^orange;take this Blueprint and craft me Paper Wings ^green;at a Crafting Table ^white;so I can soar like the moon in the night sky!", 7a8 > "acceptItems" : [[ "paperwingsback-recipe", 1]], 9c10 < { "kind" : "gather", "item" : [ "bluestim", 5] } --- > { "kind" : "gather", "item" : [ "paperwingsback", 1] } quests\outpost\endgame\hylotlperformere1.questtemplate 11c11 < "moneyRange" : [200, 200], --- > "moneyRange" : [0, 0], species\novakidnamegen.config 6,7c6,7 < [ { "mode" : "alts" }, "Ace", "Arch", "Bat", "Bate", "Brig", "Chris", "Cross", "Ed", "Dew", "Dona", "Elm", "Far", "Futter", "Good", "Galt", "Hop", "Crow", "Jack", "Lint", "Love", "Greg", "Mitch", "Moss", "Nate", "Orf", "Priest", "Paul", "Rich", "Stepp", "Thom", "Wil" ], < [ { "mode" : "alts" }, "son", "man", "mann", "ley", "born", "by", "mer", "ron", "ton", "mon", "well", "ald", "ell", "all", "ness", "tello", "roy", "ment", "wall", "wale", "liss", "less", "leth", "by", "-Smythe", "-Jones", "-Peters", "-Funke" ] --- > [ { "mode" : "alts" }, "Ace", "Acro", "Acryl", "Ammo", "Amyl", "Aqu", "Badde", "Benze", "Benzy", "Buta", "Butan", "Butyl", "Carbo", "Clint", "Clem", "Country", "Cetus", "Chloro", "Corvus", "Cylo", "Decane", "Diace", "Dich", "Dieth", "Diethyl", "Diox", "Dioxol", "Dodeca", "Dowano", "Dyme", "Epich", "Ethane", "Ethoxy", "Ethyl", "Freon", "Fuel", "Furan", "Furf", "Goode", "Green", "Gun", "Gutter", "Heptane", "Hexan", "Hexen", "Hydro", "Isobu", "Jet", "Kero", "Lacto", "Leo", "Libra", "Lynx", "Lyra", "Magie", "Merca", "Metha", "Methan", "Methox", "Methyl", "Milli", "Minera", "Naptha", "Nitric", "Nitro", "Nonane", "Octane", "Octyl", "Orio", "Oxy", "Pentan", "Perch", "Pers", "Pheno", "Phenyl", "Pinen", "Propane", "Propyl", "Propyl", "Saddle", "Styre", "Slang", "Tert", "Tetra", "Ursa", "Uggly", "Varni", "Vela", "Vinyl", "Virgo", "Xylene", "Xenon" ], > [ { "mode" : "alts" }, "-Head", "-Wood", "-Horn", " Snipe", "-Man", " Firewater", " Moonshine", " Fandango", " Jackeroo", " Gas", " Gunn", " Eastwood", " Cowpuncher", " Cowhand", " Rustler", "Dodger", " Clodhopp", "Nova", " Shavetail", " Saddlebum", " Gungiver", "-Guzzler", " Tanglefoot", " Tanhider", " Sparrowcatch", " Winder", " Snappehead", " Monoxide", " Dioxide", " Bandwagon", " Rider", " Badlander", " Bandero", "-Son", " Barreled", "-Burner", " Blatherskit", " Whistleberry", " Yellowbelly", " Sawbones", " Valleytan", " Saltlicker", " Tenderfoot", " Chickabiddy", " Calaboose", " Caboodle", " Trapper", " Driver", "-Slinger", " Maverick", "-Carbonate", " Ether", " Sulfide", " Lamine", " Dioxide", " Chloride", " Gasoline", " Ace-High", " Murphy", " Cody", " Baker", " Bushwacker", " Allen", " Livingston", " Bootlicker", "Steele", "Anderson", " Jones", " Starret", " Page", " Waller", " Hayes", " O'Brien", " Ford", " Jr.", " Hoxie", " Bannon", " McCrea", " O'Day", " McCoy" ] stats\effects\biomecold\biomecold.statuseffect 6c6 < "defaultDuration" : 5, --- > "defaultDuration" : 10, stats\effects\biomeheat\biomeheat.statuseffect 6c6 < "defaultDuration" : 5, --- > "defaultDuration" : 10, stats\effects\biomeradiation\biomeradiation.statuseffect 6c6 < "defaultDuration" : 60, --- > "defaultDuration" : 10, terrain\cave\corecaves.terrain 105c105,106 < "radius" : 4, --- > "sectorSize" : 64, > "radius" : 2, terrain\cave\densecaves.terrain 111c111,112 < "radius" : 4, --- > "sectorSize" : 64, > "radius" : 2, terrain\cave\mooncaves.terrain 155c155,156 < // "radius" : 4, --- > // "sectorSize" : 64, > // "radius" : 2, terrain\cave\normalcaves.terrain 105c105,106 < "radius" : 4, --- > "sectorSize" : 64, > "radius" : 2, terrain\cave\surfacecaves.terrain 64c64,65 < "radius" : 4, --- > "sectorSize" : 64, > "radius" : 2, treasure\biome.treasurepools 445a446,478 > "bioluminescenceChestTreasure" : [ > [1, { > "pool" : [ > {"weight" : 0.2, "pool" : "basicTreasure"}, > {"weight" : 0.8, "pool" : "bioluminescenceTreasure"} > ], > "poolRounds" : [ > [0.1, 1], > [0.7, 2], > [0.2, 3] > ], > "allowDuplication" : false > }] > ], > > "bioluminescenceTreasure" : [ > [1, { > "pool" : [ > {"weight" : 1.0, "item" : ["glowfibreorange", 3]}, > {"weight" : 1.0, "item" : ["glowfibreyellow", 3]}, > {"weight" : 0.3, "item" : "glowflowerlamp-recipe"}, > {"weight" : 0.3, "item" : "glowbushlamp-recipe"}, > {"weight" : 0.3, "item" : "glowchest-recipe"}, > {"weight" : 0.3, "item" : "lightsword"}, > {"weight" : 0.3, "item" : "lightbow"}, > {"weight" : 0.3, "item" : "lighthelmhead"}, > {"weight" : 0.3, "item" : "bioluminhead"}, > {"weight" : 0.3, "item" : "bioluminchest"}, > {"weight" : 0.3, "item" : "bioluminlegs"} > ] > }] > ], > treasure\default.treasurechests 119a120,127 > "bioluminescenceChest" : [ > { > "containers" : [ "glowchest" ], > "treasurePool" : "bioluminescenceChestTreasure", > "minimumLevel" : 0 > } > ], >