diff --git a/README.md b/README.md new file mode 100644 index 00000000..94d3dd1d --- /dev/null +++ b/README.md @@ -0,0 +1,77 @@ +# Enternia + +This mod adds a whole new planet type with it's own biomes, monsters, materials and unique equipment. + +## Installation + +Subscribe to this mod on Steam! [Link](https://steamcommunity.com/sharedfiles/filedetails/?id=2006558650) + +Or download the latest release for source code. + +## Description + +I made this little mod mainly for myself, but decided to share with everybody. +This mod doesn't require any other mods to work and should be FU-compatible. +Tabula Rasa compatible. + +### Screenshots + +You can view screenshots on the [Steam page of the mod](https://steamcommunity.com/sharedfiles/filedetails/?id=2006558650). + +## Contents + +For the full list of contents, see [this](https://steamcommunity.com/workshop/filedetails/discussion/2006558650/2441461920658470681/). + +### Planet + +**Ionized Air** - planet hazard effect (like Deadly Cold on arctic stars). Periodically damages the player if they have no energy left. Time between hits allows the energy to regen, so don't worry about it too much. The effect can be completely blocked with Enter-EPP. +**Ionized Rain/Storm** - like regular Rain/Storm, but additionally damages the player and non-immune npcs with electric damage. Can be completely blocked with Enter-EPP. +**Immune mobs** - almost every mob on the planet is immune to the electric status effects (except Static Field). + +**Appearance**: green-white-pink planet, appears near Tier 2&3 stars. +**Difficulties**: 4-6 (Extreme-Inconcievable) +**Dungeons** (3-4): Apex Testing Lab (most probable), Apex Miniknog Base, Cultist Hideout, Floran Village (least probable), Hylotl Village (least probable). +**Blocks**: Moon Stone, Moon Rock, Moon Dust. +**Ores**: Prism Ore, Crystal Ore, Core Fragments (at core), Diamonds (at core), tier 4+ ores. + +### Biomes + +**Enternia** - has aya trees, prism ore, adult poptops (rarely and only during day), can have scout drones, battle drones (rarely), scandroids, narfins. At night has orbides and random hostile horrors. +**Enternia Forest** - has very tall fruitless aya trees, crystals, crystal ore, tesla spikes (rare), tsay seeds, can have scandroids, scout/battle drones, ice narfins (rare). At night additionally has orbides and random hostile horrors. +**Enternia Poptop Valley** - has poptops, adult poptops, short pink fruitless aya trees, gil seeds, ground spikes and prism ore. +**Enternia Subsurface** - has crystals, crystal ore, tesla spikes (rare), regular spikes, scout/battle drones, icenarfins (rare), adult poptops. +**Enternia Hive** (underground) - like a normal Hive biome, but underground. +**Enternia Deep Caves** - located above the core - has a lot of crystals, crystal blocks, tesla spikes, stone spikes, chests, etc. Monsters - battle drones, defensive drones R300 (they drop Rare Laser Diode), and some ice monsters. + +### Armor + +**C.T. Walkers** - Tier 6 Boots, ++energy, --health, effect Halfed Damage - wearer only takes half of fall damage. +**C.T. Bodysuit** - Tier 6 Chest, ++energy, --health, effect Life Support - adds very slow HP regen, ignores regen blockers. +**C.T. Visor** - Tier 6 Helm, ++energy, --health, effect Flashlight - like the one on Mining Hat, but blue. +**C.T. Mindframe** - Tier 6 Helm, ++energy, --health, effect Static Field (nonstackable) - periodically damages hostile creatures around the player in a 10 block radius, dealing 5-10 electrical damage. Hostile creatures are monsters, enemy npcs and angered passive creatures. +**Enter-EPP** - adds full immunity to electricity-related statuses, gives +20% electric resist and a Static Field effect (nonstackable). + +### Weapons + +**Fixed Point SMG** - Tier 5 MP, rapid fire, low energy consuption, piercing shot. Can be upgraded at Weapon Upgrade Anvil. +**Double Point SMG** - Tier 6 Fixed Point SMG, upgraded at Weapon Upgrade Anvil. Shoots 2 bullets instead of 1. +**Fixed Point Hyperblaster** - Tier 5 MP, rapid fire, moderate energy consuption, electrical damage, bouncing shot. Can be upgraded at Weapon Upgrade Anvil. +**Double Point Hyperblaster** - Tier 6 Fixed Point Hyperblaster, upgraded at Weapon Upgrade Anvil. Shoots 2 bullets instead of 1. +**Plasmasword of Enternia** - Tier 4 electric broadsword with an alt ability. Can be upgraded at Weapon Upgrade Anvil. +**Ceterai's Plasmasword** - Tier 6 Plasmasword of Enternia, upgraded at Weapon Upgrade Anvil. + +### Monsters + +**Scout Drone** - looks like apex minidrone, but doesn't drop anything. Capturable if has less than 50% hp. Can be found on the surface and in the subsurface. +**Battle Drone** - stronger than the scout. Has a ranged attack. If close, strikes with electricity (blocked by Enter-EPP). Capturable if has less than 50% hp. Can be found on the surface and in deep caves. +**Defensive Drone R300** - an even stronger drone, stuns with melee attacks, releases electric gas in the air (blocked by Enter-EPP), has ranged attacks. Drops Rare Laser Diode. Capturable if has less than 20% hp. Can be found in deep caves only. + +### Materials + +Three materials (Cetereye, Ceter-Sphere and Enter-Sphere) that are needed to craft most of these items can be purchased at Treasured Trophies or in Tabula Rasa if installed. +**Rare Laser Diode** is dropped by Defensive Drones R300. + +### Other + +**Aya, Gil, Tsay** - fruits, have different cooking recipes. Gil & Tsay have their own crops. +**Aya Tree** - a tree, grows in Enternia, drops Ayas. diff --git a/_metadata b/_metadata index c06d6228..ee4cf3a2 100644 --- a/_metadata +++ b/_metadata @@ -1,10 +1,10 @@ { "author" : "Ceterai", - "description" : "A little mod I made mainly for myself, but desided to share with everybody.\n\nThis mod doesn't require any other mods to work and should be FU-compatible.\n\nUpdate 1.1:\n- desided to give the mod a proper name;\n- added 1 planet type, 1 biome, trees/crops/food for it, 1 upgradeable sword;\n- minor improvements;\n- moved content list & description here.\n\nTabula Rasa compatible.", + "description" : "This mod adds a whole new planet type with it's own biomes, monsters, materials and unique equipment.\nFor the full list of contents, see [url=https://steamcommunity.com/workshop/filedetails/discussion/2006558650/2441461920658470681/]this[/url].\n\nUpdate 1.2:\n- fixed 'large planet' bug;\n- added 2 new surface biomes and 3 underground biomes;\n- completely reworked and rebalanced the planet - the old biome, all recipes, item stats, etc.;\n- added 3 new capturable monsters, 1 new EPP and 2 new crafting materials;\n- made the planet much harder to survive - added a planet hazard - ionized air, new weather - ionized rain, added teslaspikes and other hazards to spawn;\n- reworked all monster spawns;\n- changed possible planet difficulty to 4-6;\n- changed possible dungeons;\n- minor improvements.\nSee the list of contents for more info.\n\nI made this little mod mainly for myself, but decided to share with everybody.\nThis mod doesn't require any other mods to work and should be FU-compatible.\nTabula Rasa compatible.", "friendlyName" : "Enternia", "link" : "steam://url/CommunityFilePage/2006558650", "name" : "ctset", "steamContentId" : "2006558650", - "tags" : "Crafting and Building|Planets and Environments|Weapons|Food and Farming|Armor and Clothes", - "version" : "1.1" + "tags" : "Crafting and Building|Planets and Environments|Weapons|Food and Farming|Armor and Clothes|Miscellaneous|NPCs and Creatures", + "version" : "1.2" } \ No newline at end of file diff --git a/biomes/oredistributions.configfunctions.patch b/biomes/oredistributions.configfunctions.patch new file mode 100644 index 00000000..337338b1 --- /dev/null +++ b/biomes/oredistributions.configfunctions.patch @@ -0,0 +1,32 @@ +[ +{"op":"add", +"path":"/ctcrystal", +"value":[ + [0.5, [ [ "crystal", 1.00 ] ] ] + ] +}, + +{"op":"add", +"path":"/ctcrystalsub", +"value":[ + [0.5, [ [ "crystal", 0.90 ], [ "diamond", 0.00 ], [ "corefragment", 0.00 ], [ "iron", 0.90 ], [ "tungsten", 0.00 ], [ "titanium", 0.00 ], [ "durasteel", 0.00 ], [ "aegisalt", 0.00 ], [ "ferozium", 0.00 ], [ "violium", 0.00 ], [ "solarium", 0.00 ] ] ], + [1.5, [ [ "crystal", 0.90 ], [ "diamond", 0.00 ], [ "corefragment", 0.00 ], [ "iron", 0.65 ], [ "tungsten", 0.90 ], [ "titanium", 0.00 ], [ "durasteel", 0.00 ], [ "aegisalt", 0.00 ], [ "ferozium", 0.00 ], [ "violium", 0.00 ], [ "solarium", 0.00 ] ] ], + [2.5, [ [ "crystal", 0.90 ], [ "diamond", 0.00 ], [ "corefragment", 0.00 ], [ "iron", 0.00 ], [ "tungsten", 0.65 ], [ "titanium", 0.90 ], [ "durasteel", 0.00 ], [ "aegisalt", 0.00 ], [ "ferozium", 0.00 ], [ "violium", 0.00 ], [ "solarium", 0.00 ] ] ], + [3.5, [ [ "crystal", 0.90 ], [ "diamond", 0.00 ], [ "corefragment", 0.00 ], [ "iron", 0.00 ], [ "tungsten", 0.00 ], [ "titanium", 0.65 ], [ "durasteel", 0.90 ], [ "aegisalt", 0.00 ], [ "ferozium", 0.00 ], [ "violium", 0.00 ], [ "solarium", 0.00 ] ] ], + [4.5, [ [ "crystal", 0.90 ], [ "diamond", 0.00 ], [ "corefragment", 0.00 ], [ "iron", 0.00 ], [ "tungsten", 0.00 ], [ "titanium", 0.00 ], [ "durasteel", 0.65 ], [ "aegisalt", 0.90 ], [ "ferozium", 0.90 ], [ "violium", 0.90 ], [ "solarium", 0.00 ] ] ], + [5.5, [ [ "crystal", 0.90 ], [ "diamond", 0.00 ], [ "corefragment", 0.00 ], [ "iron", 0.00 ], [ "tungsten", 0.00 ], [ "titanium", 0.00 ], [ "durasteel", 0.00 ], [ "aegisalt", 0.65 ], [ "ferozium", 0.65 ], [ "violium", 0.65 ], [ "solarium", 0.90 ] ] ] + ] +}, + +{"op":"add", +"path":"/ctcrystalsub2", +"value":[ + [0.5, [ [ "crystal", 0.70 ], [ "diamond", 0.10 ], [ "corefragment", 0.00 ], [ "iron", 1.00 ], [ "tungsten", 0.00 ], [ "titanium", 0.00 ], [ "durasteel", 0.00 ], [ "aegisalt", 0.00 ], [ "ferozium", 0.00 ], [ "violium", 0.00 ], [ "solarium", 0.00 ] ] ], + [1.5, [ [ "crystal", 0.70 ], [ "diamond", 0.10 ], [ "corefragment", 0.00 ], [ "iron", 0.80 ], [ "tungsten", 1.00 ], [ "titanium", 0.00 ], [ "durasteel", 0.00 ], [ "aegisalt", 0.00 ], [ "ferozium", 0.00 ], [ "violium", 0.00 ], [ "solarium", 0.00 ] ] ], + [2.5, [ [ "crystal", 0.70 ], [ "diamond", 0.10 ], [ "corefragment", 0.00 ], [ "iron", 0.00 ], [ "tungsten", 0.80 ], [ "titanium", 1.00 ], [ "durasteel", 0.00 ], [ "aegisalt", 0.00 ], [ "ferozium", 0.00 ], [ "violium", 0.00 ], [ "solarium", 0.00 ] ] ], + [3.5, [ [ "crystal", 0.70 ], [ "diamond", 0.10 ], [ "corefragment", 0.00 ], [ "iron", 0.00 ], [ "tungsten", 0.00 ], [ "titanium", 0.80 ], [ "durasteel", 1.00 ], [ "aegisalt", 0.00 ], [ "ferozium", 0.00 ], [ "violium", 0.00 ], [ "solarium", 0.00 ] ] ], + [4.5, [ [ "crystal", 0.70 ], [ "diamond", 0.10 ], [ "corefragment", 0.00 ], [ "iron", 0.00 ], [ "tungsten", 0.00 ], [ "titanium", 0.00 ], [ "durasteel", 0.80 ], [ "aegisalt", 1.00 ], [ "ferozium", 1.00 ], [ "violium", 1.00 ], [ "solarium", 0.00 ] ] ], + [5.5, [ [ "crystal", 0.70 ], [ "diamond", 0.10 ], [ "corefragment", 0.00 ], [ "iron", 0.00 ], [ "tungsten", 0.00 ], [ "titanium", 0.00 ], [ "durasteel", 0.00 ], [ "aegisalt", 0.80 ], [ "ferozium", 0.80 ], [ "violium", 0.80 ], [ "solarium", 1.00 ] ] ] + ] +} +] \ No newline at end of file diff --git a/biomes/surface/ctforest.biome b/biomes/surface/ctforest.biome index 6e60334b..ebc61ded 100644 --- a/biomes/surface/ctforest.biome +++ b/biomes/surface/ctforest.biome @@ -7,21 +7,25 @@ { "select" : 2, "pool" : [ - [ 0.334, "poptop" ], - [ 0.200, "iguarmor" ], - [ 0.200, "scandroid" ], - [ 0.266, "orbide" ] + [ 0.334, "ctminidrone" ], + [ 0.333, "ctscandroid" ], + [ 0.333, "ctnarfin" ] ] }, { - "select" : 2, + "select" : 1, "pool" : [ - [ 0.5, "adultpoptop" ], - [ 0.5, "adultpoptop" ] + [ 1, "ctadultpoptop" ] ] }, { - "select" : 5, + "select" : 1, + "pool" : [ + [ 1, "ctorbide" ] + ] + }, + { + "select" : 2, "pool" : "nightTerrors" }, { @@ -29,29 +33,33 @@ "pool" : "generatedFlying" }, { - "select" : 4, + "select" : 2, "pool" : [ [ 1, "birdcritter" ], [ 1, "sporelingcritter" ], - [ 1, "blipcritter" ], - [ 1, "fireflyspawner" ], - [ 1, "fireflyspawner" ], + [ 1, "bouncercritter" ], [ 1, "fireflyspawner" ], - [ 1, "fishcritter" ], [ 1, "bioluminfireflyspawner" ] ] } ], "monsterParameters" : { - "colors" : "forest" + "colors" : "ocean", + "statusSettings" : { + "stats" : { + "electricStatusImmunity" : { + "baseValue" : 1.0 + } + } + } } }, "hueShiftOptions" : [0, 20], - + "statusEffects" : [ "ctbiomeelectric" ], "weather" : [ [0, [ - "/weather.config:garden" + "/weather.config:ctforest" ]] ], @@ -120,7 +128,7 @@ "tracks" : [ "/music/epsilon-indi.ogg", "/music/hymn-to-the-stars.ogg", "/music/procyon.ogg", "/music/stellarformation.ogg", "/music/vast-immortal-suns.ogg", "/music/atlas.ogg", "/music/blue-straggler.ogg", "/music/cygnus-x1.ogg", "/music/europa.ogg", "/music/haiku.ogg", "/music/m54.ogg", "/music/on-the-beach-at-night.ogg" ] }, "night" : { - "tracks" : [ "/music/jupiter.ogg", "/music/arctic-constellation1.ogg", "/music/arctic-constellation2.ogg", "/music/mercury.ogg", "/music/mira.ogg", "/music/procyon.ogg", "/music/tranquility-base.ogg", "/music/psyche.ogg", "/music/accretion-disc.ogg", "/music/cygnus-x1.ogg", "/music/eridanus-supervoid.ogg", "/music/horsehead-nebula.ogg", "/music/large-magellanic-cloud.ogg", "/music/m54.ogg", "/music/nomads.ogg", "/music/on-the-beach-at-night.ogg" ] + "tracks" : [ "/sfx/environmental/tundra_night.ogg", "/music/jupiter.ogg", "/music/arctic-constellation1.ogg", "/music/arctic-constellation2.ogg", "/music/mercury.ogg", "/music/mira.ogg", "/music/procyon.ogg", "/music/tranquility-base.ogg", "/music/psyche.ogg", "/music/accretion-disc.ogg", "/music/cygnus-x1.ogg", "/music/eridanus-supervoid.ogg", "/music/horsehead-nebula.ogg", "/music/large-magellanic-cloud.ogg", "/music/m54.ogg", "/music/nomads.ogg", "/music/on-the-beach-at-night.ogg" ] } }, @@ -150,7 +158,7 @@ "mode" : "floor", "priority" : 1.0, "variants" : 1, - "distribution" : "/biomes/distributions.config:scatteredSmall", + "distribution" : "/biomes/distributions.config:denseMedium", "type" : "object", "objectSets" : [ @@ -174,7 +182,7 @@ "mode" : "floor", "priority" : 1, "variants" : 1, - "distribution" : "/biomes/distributions.config:overgroundRareChests", + "distribution" : "/biomes/distributions.config:overgroundChests", "type" : "object", "objectSets" : [ @@ -184,28 +192,19 @@ } ] }, - { - "mode" : "floor", - "priority" : 0, - "variants" : 1, - "distribution" : "/biomes/distributions.config:undergroundweaponChests", - "type" : "treasureBox", - "treasureBoxSets" : [ "weaponChest" ] - }, + // MICRO DUNGEONS { "mode" : "floor", "priority" : 3.0, - "variants" : 1, + "variants" : 2, "distribution" : "/biomes/distributions.config:tiyDist", "type" : "microdungeon", "microdungeons" : [ "spiralspikes", "aridplatforming", "oasis", "blank", "none" ] }, - // MICRO DUNGEONS - { "mode" : "floor", "priority" : 1, @@ -219,7 +218,7 @@ { "mode" : "floor", "priority" : 1.0, - "variants" : 1, + "variants" : 4, "distribution" : "/biomes/distributions.config:denseSmall", "type" : "grass", @@ -235,8 +234,10 @@ "bushes" : [ { "name" : "testbush", - "baseHueShiftMax" : 100, - "modHueShiftMax" : 100 + "baseHueShiftMax" : 200, + "modHueShiftMax" : 200, + "baseHueShiftMin" : 200, + "modHueShiftMin" : 200 } ] }, @@ -244,7 +245,7 @@ "mode" : "floor", "priority" : 1.0, "variants" : 1, - "distribution" : "/biomes/distributions.config:denseMedium", + "distribution" : "/biomes/distributions.config:scatteredSmall", "type" : "tree", "treeFoliageHueShiftMax" : 30, @@ -257,7 +258,7 @@ "mode" : "floor", "priority" : 1.0, "variants" : 1, - "distribution" : "/biomes/distributions.config:denseMedium", + "distribution" : "/biomes/distributions.config:scatteredSmall", "type" : "tree", "treeFoliageHueShiftMax" : 30, @@ -267,37 +268,21 @@ "treeFoliageList" : [ "ctayaleaves" ] }, - // CROPS + - { - "mode" : "floor", - "priority" : 2.0, - "variants" : 1, - "distribution" : "/biomes/distributions.config:denseLarge", + // CROPS - "type" : "object", - "objectSets" : [ - { - "pool" : [ [1, "wildctgilseed" ] ], - "parameters" : { - "startingStage" : 4 - } - } - ] - }, { "mode" : "floor", - "priority" : 2.0, - "variants" : 1, - "distribution" : "/biomes/distributions.config:denseLarge", + "priority" : 1.0, + "variants" : 3, + "distribution" : "/biomes/distributions.config:scatteredSmall", "type" : "object", "objectSets" : [ { - "pool" : [ [1, "wildcttsayseed" ] ], - "parameters" : { - "startingStage" : 4 - } + "pool" : [ [0.35, "prismrock1" ], [0.35, "prismrock2" ], [0.35, "prismrock3" ] ], + "parameters" : { } } ] } @@ -312,15 +297,6 @@ "ceilingGrassModDensity" : 0.3, "items" : [ - { - "mode" : "floor", - "priority" : 0.0, - "variants" : 1, - "distribution" : "/biomes/distributions.config:undergroundChests", - - "type" : "treasureBox", - "treasureBoxSets" : [ "basicChest" ] - }, { "mode" : "floor", @@ -382,7 +358,7 @@ "mode" : "ceiling", "priority" : 2.0, "variants" : 1, - "distribution" : "/biomes/distributions.config:denseMedium", + "distribution" : "/biomes/distributions.config:scatteredLarge", "type" : "tree", "treeFoliageHueShiftMax" : 180, @@ -390,15 +366,43 @@ "treeStemList" : [ "rootvine", "rootvine2", "rootvine3" ], "treeFoliageList" : [ "" ] }, + { + "mode" : "floor", + "priority" : 1.0, + "variants" : 4, + "distribution" : "/biomes/distributions.config:scatteredSmall", + + "type" : "object", + "objectSets" : [ + { + "pool" : [ [0.35, "groundspike1" ], [0.35, "groundspike2" ], [0.35, "groundspike3" ], [0.35, "groundspike4" ] ], + "parameters" : { } + } + ] + }, { "mode" : "floor", "priority" : 3.0, - "variants" : 1, + "variants" : 4, "period" : 5, - "distribution" : "/biomes/distributions.config:scatteredSmall", + "distribution" : "/biomes/distributions.config:scatteredLarge", "type" : "grass", "grasses" : [ "testflower", "testflower2", "testflower3", "testflower4", "testflower5", "testflower6", "testflower7" ] + }, + { + "mode" : "floor", + "priority" : 0.0, + "variants" : 3, + "distribution" : "/biomes/distributions.config:denseSmall", + + "type" : "object", + "objectSets" : [ + { + "pool" : [ [0.35, "prismrock1" ], [0.35, "prismrock2" ], [0.35, "prismrock3" ] ], + "parameters" : { } + } + ] } ] } diff --git a/biomes/surface/ctforesthive.biome b/biomes/surface/ctforesthive.biome new file mode 100644 index 00000000..ee5532f3 --- /dev/null +++ b/biomes/surface/ctforesthive.biome @@ -0,0 +1,174 @@ +{ + "name" : "ctforesthive", + "friendlyName" : "Enternia Hive", + "spawnProfile" : { + "groups" : [ + { + "select" : 1, + "pool" : [ + [ 1, "orbide" ] + ] + }, + { + "select" : 4, + "pool" : [ + [ 1, "swarmcritter" ], + [ 1, "swarmflyingcritter" ], + [ 1, "rolypolycritter" ], + [ 1, "maggotcritter" ] + ] + } + ] + }, + "mainBlock" : "hive", + "subBlocks" : [ "moonrock" ], + "ores" : "ctcrystalsub", + + "hueShiftOptions" : [0], + "parallax" : "ctforestsub.parallax", + + "sky" : { + "topColor" : [182, 204, 255], + "bottomColor" : [224, 239, 255], + "nightTopColor" : [0, 0, 30], + "nightBottomColor" : [0, 0, 0] + }, + + "undergroundPlaceables" : { + "grassMod" : [ "hivegrass" ], + "grassModDensity" : 0.9, + + "ceilingGrassMod" : [ "hiveceilinggrass" ], + "ceilingGrassModDensity" : 0.9, + + "items" : [ + { + "mode" : "floor", + "priority" : 1.0, + "variants" : 1, + "distribution" : "/biomes/distributions.config:minibiomeChests", + + "type" : "treasureBox", + "treasureBoxSets" : [ "hiveChest" ] + }, + { + "mode" : "floor", + "priority" : 0.1, + "variants" : 11, + "distribution" : "/biomes/distributions.config:denseSmall", + + "type" : "object", + "objectSets" : [ + { + "pool" : [ [0.35, "hivebush1" ], [0.35, "hivebush2" ], [0.35, "hivebush3" ], [0.35, "hivebush4" ], [0.35, "hivebush5" ], [0.35, "buglike1" ], [0.35, "buglike2" ], [0.35, "buglike3" ], [0.35, "buglike4" ], [0.35, "buglike5" ], [0.35, "hivelight1" ], [0.35, "hivelight2" ] ], + "parameters" : { } + } + ] + }, + { + "mode" : "ceiling", + "priority" : 0.1, + "variants" : 11, + "distribution" : "/biomes/distributions.config:denseSmall", + + "type" : "object", + "objectSets" : [ + { + "pool" : [ [0.35, "buglike6" ], [0.35, "buglike7" ], [0.35, "buglike8" ], [0.35, "buglike9" ], [0.35, "buglike10" ] ], + "parameters" : { } + } + ] + }, + { + "mode" : "ceiling", + "priority" : 0.1, + "variants" : 1, + "distribution" : "/biomes/distributions.config:denseMedium", + + "type" : "tree", + "treeFoliageHueShiftMax" : 180, + "treeStemHueShiftMax" : 180, + "treeStemList" : [ "podvine" ] + }, + { + "mode" : "floor", + "priority" : 1.0, + "variants" : 1, + "distribution" : "/biomes/distributions.config:surfaceCapsules", + + "type" : "object", + "objectSets" : [ + { + "pool" : [ [0.35, "capsulesmall" ], [0.35, "capsulemed" ], [0.35, "capsulebig" ] ], + "parameters" : { } + } + ] + }, + { + "mode" : "floor", + "priority" : 1, + "variants" : 1, + "distribution" : "/biomes/distributions.config:mainBiomeMicrodungeon", + + "type" : "microdungeon", + "microdungeons" : [ "hivemicrodungeons" ] + }, + { + "mode" : "floor", + "priority" : 0.0, + "variants" : 1, + "distribution" : "/biomes/distributions.config:minibiomeChests", + + "type" : "treasureBox", + "treasureBoxSets" : [ "basicChest" ] + }, + { + "mode" : "floor", + "priority" : 1.0, + "variants" : 1, + "distribution" : "/biomes/distributions.config:scatteredLarge", + + "type" : "tree", + "treeFoliageHueShiftMax" : 0, + "treeStemHueShiftMax" : 0, + "treeStemList" : [ "hive" ], + "treeFoliageList" : [ "hive" ] + }, + { + "mode" : "ceiling", + "priority" : 2.0, + "variants" : 1, + "distribution" : "/biomes/distributions.config:superCommon", + + "type" : "tree", + "treeFoliageHueShiftMax" : 0, + "treeStemHueShiftMax" : 10, + "treeStemList" : [ "hivevine" ], + "treeFoliageList" : [ "" ] + }, + { + "mode" : "floor", + "priority" : 0.0, + "variants" : 1, + "distribution" : "/biomes/distributions.config:undergroundChallengeDoors", + + "type" : "object", + "objectSets" : [ + { + "pool" : [ [1, "challengedoor" ] ], + "parameters" : { } + } + ] + }, + { + "mode" : "floor", + "priority" : 1, + "variants" : 1, + "distribution" : "/biomes/distributions.config:undergroundBiomeEncounterDungeon", + + "type" : "microdungeon", + "microdungeons" : [ "undergroundencounterdungeons" ] + } + ] + } +} diff --git a/biomes/surface/ctforestlabs.biome b/biomes/surface/ctforestlabs.biome new file mode 100644 index 00000000..1aa34461 --- /dev/null +++ b/biomes/surface/ctforestlabs.biome @@ -0,0 +1,436 @@ +{ + "name" : "ctforestlabs", + "friendlyName" : "Enternia Deep Forests", + + "spawnProfile" : { + "groups" : [ + { + "select" : 2, + "pool" : [ + [ 0.600, "ctminidrone" ], + [ 0.300, "ctscandroid" ], + [ 0.100, "cticenarfin" ] + ] + }, + { + "select" : 1, + "pool" : [ + [ 1, "ctorbide" ] + ] + }, + { + "select" : 2, + "pool" : "nightTerrors" + }, + { + "select" : 1, + "pool" : "generatedFlying" + }, + { + "select" : 2, + "pool" : [ + [ 0.150, "crystalbirdcritter" ], + [ 0.600, "ciclesnailcritter" ], + [ 0.150, "crystaltortoisecritter" ], + [ 0.100, "bluebutterflycritter" ] + ] + } + ], + "monsterParameters" : { + "colors" : "ocean", + "statusSettings" : { + "stats" : { + "electricStatusImmunity" : { + "baseValue" : 1.0 + } + } + } + } + }, + + "hueShiftOptions" : [30, 45], + + "statusEffects" : [ "ctbiomeelectric" ], + "weather" : [ + [0, [ + "/weather.config:ctforest" + ]] + ], + + "skyOptions" : [ + { + // sunny earth days, red/orange sunrise and purple/red sunset + "mainColor" : [255, 255, 255], + + "morningColors" : [ [242, 120, 0], [255, 230, 176] ], + "dayColors" : [ [115, 224, 255], [255, 255, 255] ], + "eveningColors" : [ [125, 17, 158], [210, 52, 50] ], + "nightColors" : [ [24, 38, 53, 80], [58, 42, 70, 160] ], + + "morningLightColor" : [140, 71, 0], + "dayLightColor" : [200, 200, 200], + "eveningLightColor" : [160, 120, 180], + "nightLightColor" : [40, 20, 60] + }, + { + // sunny lilac day, blue/orange sunrise and blue/green sunset + "mainColor" : [255, 255, 255], + + "morningColors" : [ [0, 24, 55], [255, 140, 49] ], + "dayColors" : [ [176, 115, 255], [255, 255, 255] ], + "eveningColors" : [ [100, 86, 173], [0, 222, 73] ], + "nightColors" : [ [24, 38, 53, 80], [58, 42, 70, 160] ], + + "morningLightColor" : [140, 71, 0], + "dayLightColor" : [200, 200, 200], + "eveningLightColor" : [160, 120, 180], + "nightLightColor" : [40, 20, 60] + }, + { + // sunny pink day, pink/peach sunrise and blue/pink sunset + "mainColor" : [255, 255, 255], + + "morningColors" : [ [197, 48, 174], [253, 161, 96] ], + "dayColors" : [ [255, 116, 122], [255, 255, 255] ], + "eveningColors" : [ [88, 42, 91], [175, 20, 50] ], + "nightColors" : [ [24, 38, 53, 80], [58, 42, 70, 160] ], + + "morningLightColor" : [140, 71, 0], + "dayLightColor" : [200, 200, 200], + "eveningLightColor" : [180, 120, 120], + "nightLightColor" : [40, 20, 60] + } + ], + + "mainBlock" : "moonstone", + "subBlocks" : [ "moonrock", "moondust" ], + "ores" : "ctcrystal", + + "parallax" : "ctforest.parallax", + + "ambientNoises" : { + "day" : { + "tracks" : [ "/sfx/environmental/forest_day.ogg", "/sfx/environmental/forest_day2.ogg" ] + }, + "night" : { + "tracks" : [ "/sfx/environmental/forest_night.ogg", "/sfx/environmental/forest_night2.ogg" ] + } + }, + + "musicTrack" : { + "day" : { + "tracks" : [ "/music/epsilon-indi.ogg", "/music/hymn-to-the-stars.ogg", "/music/procyon.ogg", "/music/stellarformation.ogg", "/music/vast-immortal-suns.ogg", "/music/atlas.ogg", "/music/blue-straggler.ogg", "/music/cygnus-x1.ogg", "/music/europa.ogg", "/music/haiku.ogg", "/music/m54.ogg", "/music/on-the-beach-at-night.ogg" ] + }, + "night" : { + "tracks" : [ "/sfx/environmental/tundra_night.ogg", "/music/jupiter.ogg", "/music/arctic-constellation1.ogg", "/music/arctic-constellation2.ogg", "/music/mercury.ogg", "/music/mira.ogg", "/music/procyon.ogg", "/music/tranquility-base.ogg", "/music/psyche.ogg", "/music/accretion-disc.ogg", "/music/cygnus-x1.ogg", "/music/eridanus-supervoid.ogg", "/music/horsehead-nebula.ogg", "/music/large-magellanic-cloud.ogg", "/music/m54.ogg", "/music/nomads.ogg", "/music/on-the-beach-at-night.ogg" ] + } + }, + + "surfacePlaceables" : { + "grassMod" : [ "grass" ], + "grassModDensity" : 0.9, + + "ceilingGrassMod" : [ "undergrowth" ], + "ceilingGrassModDensity" : 0.5, + + "items" : [ + { + "mode" : "floor", + "priority" : 4.0, + "variants" : 1, + "distribution" : "/biomes/distributions.config:surfaceCapsules", + + "type" : "object", + "objectSets" : [ + { + "pool" : [ [0.35, "capsulesmall" ], [0.35, "capsulemed" ], [0.35, "capsulebig" ] ], + "parameters" : { } + } + ] + }, + { + "mode" : "floor", + "priority" : 2.0, + "variants" : 1, + "distribution" : "/biomes/distributions.config:scatteredLarge", + + "type" : "object", + "objectSets" : [ + { + "pool" : [ [1, "flowerblue" ] ], + "parameters" : { } + } + ] + }, + + { + "mode" : "floor", + "priority" : 3.0, + "variants" : 1, + "distribution" : "/biomes/distributions.config:overgroundChests", + + "type" : "treasureBox", + "treasureBoxSets" : [ "forestChest" ] + }, + { + "mode" : "floor", + "priority" : 4.0, + "variants" : 1, + "distribution" : "/biomes/distributions.config:overgroundChests", + + "type" : "object", + "objectSets" : [ + { + "pool" : [ [1, "statuspod" ] ], + "parameters" : { } + } + ] + }, + { + "mode" : "floor", + "priority" : 1.0, + "variants" : 1, + "distribution" : "/biomes/distributions.config:undergroundweaponChests", + + "type" : "treasureBox", + "treasureBoxSets" : [ "weaponChest" ] + }, + + // MICRO DUNGEONS + + { + "mode" : "floor", + "priority" : 1, + "variants" : 2, + "distribution" : "/biomes/distributions.config:tiyDist", + + "type" : "microdungeon", + "microdungeons" : [ "oasismicrodungeons" ] + }, + + { + "mode" : "floor", + "priority" : 1, + "variants" : 1, + "distribution" : "/biomes/distributions.config:mainBiomeEncounterDungeon", + + "type" : "microdungeon", + "microdungeons" : [ "encounterdungeons" ] + }, + + { + "mode" : "floor", + "priority" : 2.0, + "variants" : 4, + "distribution" : "/biomes/distributions.config:denseLarge", + + "type" : "grass", + "grasses" : [ "grass", "testflower", "testflower2", "testflower3", "testflower4", "testflower5", "testflower6", "testflower7" ] + }, + { + "mode" : "floor", + "priority" : 2.0, + "variants" : 1, + "distribution" : "/biomes/distributions.config:denseMedium", + + "type" : "bush", + "bushes" : [ + { + "name" : "testbush", + "baseHueShiftMax" : 220, + "modHueShiftMax" : 220, + "baseHueShiftMin" : 220, + "modHueShiftMin" : 220 + } + ] + }, + { + "mode" : "floor", + "priority" : 2.0, + "variants" : 1, + "distribution" : "/biomes/distributions.config:denseMedium", + + "type" : "tree", + "treeFoliageHueShiftMax" : 30, + "treeFoliageHueShiftMin" : 10, + "treeStemHueShiftMax" : 15, + "treeStemList" : [ "ctayastem2" ], + "treeFoliageList" : [ "ctayaleaves2" ] + }, + { + "mode" : "floor", + "priority" : 2.0, + "variants" : 1, + "distribution" : "/biomes/distributions.config:denseLarge", + + "type" : "tree", + "treeFoliageHueShiftMax" : 30, + "treeFoliageHueShiftMin" : 10, + "treeStemHueShiftMax" : 15, + "treeStemList" : [ "ctayastem2" ], + "treeFoliageList" : [ "ctayaleaves2" ] + }, + + // CROPS + + { + "mode" : "floor", + "priority" : 1.0, + "variants" : 1, + "distribution" : "/biomes/distributions.config:scatteredLarge", + + "type" : "object", + "objectSets" : [ + { + "pool" : [ [1, "wildcttsayseed" ] ], + "parameters" : { + "startingStage" : 2 + } + } + ] + }, + { + "mode" : "floor", + "priority" : 1.0, + "variants" : 1, + "distribution" : "/biomes/distributions.config:rareClumpySmall", + + "type" : "object", + "objectSets" : [ + { + "pool" : [ [1, "teslaspike" ] ], + "parameters" : { } + } + ] + }, + + { + "mode" : "floor", + "priority" : 1.0, + "variants" : 4, + "distribution" : "/biomes/distributions.config:scatteredLarge", + + "type" : "object", + "objectSets" : [ + { + "pool" : [ [0.35, "crystalcavebush1" ], [0.35, "crystalcavebush2" ], [0.35, "crystalcavebush3" ], [0.35, "crystalcavebush4" ] ], + "parameters" : { } + } + ] + } + ] + }, + + "undergroundPlaceables" : { + "grassMod" : [ "grass" ], + "grassModDensity" : 0.2, + + "ceilingGrassMod" : [ "roots" ], + "ceilingGrassModDensity" : 0.3, + + "items" : [ + + { + "mode" : "floor", + "priority" : 1, + "variants" : 1, + "distribution" : "/biomes/distributions.config:undergroundChests", + + "type" : "treasureBox", + "treasureBoxSets" : [ "forestChest" ] + }, + { + "mode" : "floor", + "priority" : 1.0, + "variants" : 1, + "distribution" : "/biomes/distributions.config:undergroundChests", + + "type" : "object", + "objectSets" : [ + { + "pool" : [ [1, "statuspod" ] ], + "parameters" : { } + } + ] + }, + { + "mode" : "floor", + "priority" : 1.0, + "variants" : 1, + "distribution" : "/biomes/distributions.config:undergroundweaponChests", + + "type" : "treasureBox", + "treasureBoxSets" : [ "weaponChest" ] + }, + { + "mode" : "floor", + "priority" : 4.0, + "variants" : 1, + "distribution" : "/biomes/distributions.config:undergroundCapsules", + + "type" : "object", + "objectSets" : [ + { + "pool" : [ [0.35, "capsulesmall" ], [0.35, "capsulemed" ], [0.35, "capsulebig" ] ], + "parameters" : { } + } + ] + }, + { + "mode" : "ceiling", + "priority" : 5.0, + "variants" : 1, + "distribution" : "/biomes/distributions.config:denseMedium", + + "type" : "tree", + "treeFoliageHueShiftMax" : 180, + "treeStemHueShiftMax" : 10, + "treeStemList" : [ "rootvine", "rootvine2", "rootvine3" ], + "treeFoliageList" : [ "" ] + }, + { + "mode" : "floor", + "priority" : 2.0, + "variants" : 4, + "period" : 5, + "distribution" : "/biomes/distributions.config:scatteredLarge", + + "type" : "grass", + "grasses" : [ "testflower", "testflower2", "testflower3", "testflower4", "testflower5", "testflower6", "testflower7" ] + }, + + // CROPS + + { + "mode" : "floor", + "priority" : 3.0, + "variants" : 1, + "distribution" : "/biomes/distributions.config:scatteredLarge", + + "type" : "object", + "objectSets" : [ + { + "pool" : [ [1, "wildcttsayseed" ] ], + "parameters" : { + "startingStage" : 2 + } + } + ] + }, + { + "mode" : "floor", + "priority" : 4.0, + "variants" : 4, + "distribution" : "/biomes/distributions.config:denseMedium", + + "type" : "object", + "objectSets" : [ + { + "pool" : [ [0.35, "crystalcavebush1" ], [0.35, "crystalcavebush2" ], [0.35, "crystalcavebush3" ], [0.35, "crystalcavebush4" ] ], + "parameters" : { } + } + ] + } + ] + } +} diff --git a/biomes/surface/ctforestpoptop.biome b/biomes/surface/ctforestpoptop.biome new file mode 100644 index 00000000..8c9661a9 --- /dev/null +++ b/biomes/surface/ctforestpoptop.biome @@ -0,0 +1,440 @@ +{ + "name" : "ctforestpoptop", + "friendlyName" : "Enternia Poptop Valley", + + "spawnProfile" : { + "groups" : [ + { + "select" : 1, + "pool" : [ + [ 1, "ctpoptop" ] + ] + }, + { + "select" : 2, + "pool" : [ + [ 1, "birdcritter" ], + [ 1, "prismelementalcritter" ], + [ 1, "fireflyspawner" ], + [ 1, "bioluminfireflyspawner" ] + ] + } + ], + "monsterParameters" : { + "colors" : "ocean", + "statusSettings" : { + "stats" : { + "electricStatusImmunity" : { + "baseValue" : 1.0 + } + } + } + } + }, + + "hueShiftOptions" : [250], + + "statusEffects" : [ "ctbiomeelectric" ], + "weather" : [ + [0, [ + "/weather.config:ctforest" + ]] + ], + + "skyOptions" : [ + { + // sunny earth days, red/orange sunrise and purple/red sunset + "mainColor" : [255, 255, 255], + + "morningColors" : [ [242, 120, 0], [255, 230, 176] ], + "dayColors" : [ [115, 224, 255], [255, 255, 255] ], + "eveningColors" : [ [125, 17, 158], [210, 52, 50] ], + "nightColors" : [ [24, 38, 53, 80], [58, 42, 70, 160] ], + + "morningLightColor" : [140, 71, 0], + "dayLightColor" : [200, 200, 200], + "eveningLightColor" : [160, 120, 180], + "nightLightColor" : [40, 20, 60] + }, + { + // sunny lilac day, blue/orange sunrise and blue/green sunset + "mainColor" : [255, 255, 255], + + "morningColors" : [ [0, 24, 55], [255, 140, 49] ], + "dayColors" : [ [176, 115, 255], [255, 255, 255] ], + "eveningColors" : [ [100, 86, 173], [0, 222, 73] ], + "nightColors" : [ [24, 38, 53, 80], [58, 42, 70, 160] ], + + "morningLightColor" : [140, 71, 0], + "dayLightColor" : [200, 200, 200], + "eveningLightColor" : [160, 120, 180], + "nightLightColor" : [40, 20, 60] + }, + { + // sunny pink day, pink/peach sunrise and blue/pink sunset + "mainColor" : [255, 255, 255], + + "morningColors" : [ [197, 48, 174], [253, 161, 96] ], + "dayColors" : [ [255, 116, 122], [255, 255, 255] ], + "eveningColors" : [ [88, 42, 91], [175, 20, 50] ], + "nightColors" : [ [24, 38, 53, 80], [58, 42, 70, 160] ], + + "morningLightColor" : [140, 71, 0], + "dayLightColor" : [200, 200, 200], + "eveningLightColor" : [180, 120, 120], + "nightLightColor" : [40, 20, 60] + } + ], + + "mainBlock" : "moonstone", + "subBlocks" : [ "moonrock", "moondust" ], + "ores" : "prismore", + + "parallax" : "ctforest.parallax", + + "ambientNoises" : { + "day" : { + "tracks" : [ "/sfx/environmental/forest_day.ogg", "/sfx/environmental/forest_day2.ogg" ] + }, + "night" : { + "tracks" : [ "/sfx/environmental/forest_night.ogg", "/sfx/environmental/forest_night2.ogg" ] + } + }, + + "musicTrack" : { + "day" : { + "tracks" : [ "/music/epsilon-indi.ogg", "/music/hymn-to-the-stars.ogg", "/music/procyon.ogg", "/music/stellarformation.ogg", "/music/vast-immortal-suns.ogg", "/music/atlas.ogg", "/music/blue-straggler.ogg", "/music/cygnus-x1.ogg", "/music/europa.ogg", "/music/haiku.ogg", "/music/m54.ogg", "/music/on-the-beach-at-night.ogg" ] + }, + "night" : { + "tracks" : [ "/sfx/environmental/tundra_night.ogg", "/music/jupiter.ogg", "/music/arctic-constellation1.ogg", "/music/arctic-constellation2.ogg", "/music/mercury.ogg", "/music/mira.ogg", "/music/procyon.ogg", "/music/tranquility-base.ogg", "/music/psyche.ogg", "/music/accretion-disc.ogg", "/music/cygnus-x1.ogg", "/music/eridanus-supervoid.ogg", "/music/horsehead-nebula.ogg", "/music/large-magellanic-cloud.ogg", "/music/m54.ogg", "/music/nomads.ogg", "/music/on-the-beach-at-night.ogg" ] + } + }, + + "surfacePlaceables" : { + "grassMod" : [ "grass" ], + "grassModDensity" : 0.9, + + "ceilingGrassMod" : [ "undergrowth" ], + "ceilingGrassModDensity" : 0.5, + + "items" : [ + { + "mode" : "floor", + "priority" : 1.0, + "variants" : 1, + "distribution" : "/biomes/distributions.config:surfaceCapsules", + + "type" : "object", + "objectSets" : [ + { + "pool" : [ [0.35, "capsulesmall" ], [0.35, "capsulemed" ], [0.35, "capsulebig" ] ], + "parameters" : { } + } + ] + }, + { + "mode" : "floor", + "priority" : 3.0, + "variants" : 1, + "distribution" : "/biomes/distributions.config:scatteredSmall", + + "type" : "object", + "objectSets" : [ + { + "pool" : [ [1, "flowerred" ] ], + "parameters" : { } + } + ] + }, + + { + "mode" : "floor", + "priority" : 1, + "variants" : 1, + "distribution" : "/biomes/distributions.config:overgroundChests", + + "type" : "treasureBox", + "treasureBoxSets" : [ "forestChest" ] + }, + { + "mode" : "floor", + "priority" : 1, + "variants" : 1, + "distribution" : "/biomes/distributions.config:overgroundChests", + + "type" : "object", + "objectSets" : [ + { + "pool" : [ [1, "statuspod" ] ], + "parameters" : { } + } + ] + }, + { + "mode" : "floor", + "priority" : 1, + "variants" : 1, + "distribution" : "/biomes/distributions.config:undergroundweaponChests", + + "type" : "treasureBox", + "treasureBoxSets" : [ "weaponChest" ] + }, + + // MICRO DUNGEONS + + { + "mode" : "floor", + "priority" : 1.0, + "variants" : 2, + "distribution" : "/biomes/distributions.config:tiyDist", + + "type" : "microdungeon", + "microdungeons" : [ "spiralspikes", "aridplatforming", "oasis", "blank", "none" ] + }, + + { + "mode" : "floor", + "priority" : 1, + "variants" : 1, + "distribution" : "/biomes/distributions.config:mainBiomeEncounterDungeon", + + "type" : "microdungeon", + "microdungeons" : [ "encounterdungeons" ] + }, + + { + "mode" : "floor", + "priority" : 1.0, + "variants" : 4, + "distribution" : "/biomes/distributions.config:denseSmall", + + "type" : "grass", + "grasses" : [ "grass", "testflower", "testflower2", "testflower3", "testflower4", "testflower5", "testflower6", "testflower7" ] + }, + { + "mode" : "floor", + "priority" : 1.0, + "variants" : 1, + "distribution" : "/biomes/distributions.config:scatteredSmall", + + "type" : "bush", + "bushes" : [ + { + "name" : "testbush", + "baseHueShiftMin" : 360, + "modHueShiftMin" : 360, + "baseHueShiftMax" : 360, + "modHueShiftMax" : 360 + } + ] + }, + { + "mode" : "floor", + "priority" : 1.0, + "variants" : 1, + "distribution" : "/biomes/distributions.config:denseMedium", + + "type" : "tree", + "treeFoliageHueShiftMax" : 0, + "treeFoliageHueShiftMin" : 0, + "treeStemHueShiftMax" : 15, + "treeStemList" : [ "ctayastem3" ], + "treeFoliageList" : [ "ctayaleaves3" ] + }, + { + "mode" : "floor", + "priority" : 1.0, + "variants" : 1, + "distribution" : "/biomes/distributions.config:denseLarge", + + "type" : "tree", + "treeFoliageHueShiftMax" : 0, + "treeFoliageHueShiftMin" : 0, + "treeStemHueShiftMax" : 15, + "treeStemList" : [ "ctayastem3" ], + "treeFoliageList" : [ "ctayaleaves3" ] + }, + { + "mode" : "floor", + "priority" : 2, + "variants" : 1, + "distribution" : "/biomes/distributions.config:scatteredSmall", + + "type" : "object", + "objectSets" : [ + { + "pool" : [ [1, "wildctgilseed" ] ], + "parameters" : { + "startingStage" : 2 + } + } + ] + }, + { + "mode" : "floor", + "priority" : 1.0, + "variants" : 4, + "distribution" : "/biomes/distributions.config:potsRare", + + "type" : "object", + "objectSets" : [ + { + "pool" : [ [0.35, "groundspike1" ], [0.35, "groundspike2" ], [0.35, "groundspike3" ], [0.35, "groundspike4" ] ], + "parameters" : { } + } + ] + }, + { + "mode" : "floor", + "priority" : 0.0, + "variants" : 3, + "distribution" : "/biomes/distributions.config:scatteredSmall", + + "type" : "object", + "objectSets" : [ + { + "pool" : [ [0.35, "prismrock1" ], [0.35, "prismrock2" ], [0.35, "prismrock3" ] ], + "parameters" : { } + } + ] + } + ] + }, + + "undergroundPlaceables" : { + "grassMod" : [ "grass" ], + "grassModDensity" : 0.2, + + "ceilingGrassMod" : [ "roots" ], + "ceilingGrassModDensity" : 0.3, + + "items" : [ + + { + "mode" : "floor", + "priority" : 0, + "variants" : 1, + "distribution" : "/biomes/distributions.config:undergroundChests", + + "type" : "treasureBox", + "treasureBoxSets" : [ "forestChest" ] + }, + + { + "mode" : "floor", + "priority" : 0.0, + "variants" : 1, + "distribution" : "/biomes/distributions.config:undergroundtechChests", + + "type" : "treasureBox", + "treasureBoxSets" : [ "techChest" ] + }, + { + "mode" : "floor", + "priority" : 1.0, + "variants" : 1, + "distribution" : "/biomes/distributions.config:undergroundChests", + + "type" : "object", + "objectSets" : [ + { + "pool" : [ [1, "statuspod" ] ], + "parameters" : { } + } + ] + }, + { + "mode" : "floor", + "priority" : 0.0, + "variants" : 1, + "distribution" : "/biomes/distributions.config:undergroundweaponChests", + + "type" : "treasureBox", + "treasureBoxSets" : [ "weaponChest" ] + }, + { + "mode" : "floor", + "priority" : 1.0, + "variants" : 1, + "distribution" : "/biomes/distributions.config:undergroundCapsules", + + "type" : "object", + "objectSets" : [ + { + "pool" : [ [0.35, "capsulesmall" ], [0.35, "capsulemed" ], [0.35, "capsulebig" ] ], + "parameters" : { } + } + ] + }, + { + "mode" : "ceiling", + "priority" : 5.0, + "variants" : 1, + "distribution" : "/biomes/distributions.config:denseMedium", + + "type" : "tree", + "treeFoliageHueShiftMax" : 180, + "treeStemHueShiftMax" : 10, + "treeStemList" : [ "rootvine", "rootvine2", "rootvine3" ], + "treeFoliageList" : [ "" ] + }, + { + "mode" : "floor", + "priority" : 3.0, + "variants" : 4, + "period" : 5, + "distribution" : "/biomes/distributions.config:scatteredSmall", + + "type" : "grass", + "grasses" : [ "testflower", "testflower2", "testflower3", "testflower4", "testflower5", "testflower6", "testflower7" ] + }, + + // CROPS + + { + "mode" : "floor", + "priority" : 1.0, + "variants" : 1, + "distribution" : "/biomes/distributions.config:scatteredSmall", + + "type" : "object", + "objectSets" : [ + { + "pool" : [ [1, "wildctgilseed" ] ], + "parameters" : { + "startingStage" : 2 + } + } + ] + }, + { + "mode" : "floor", + "priority" : 1.0, + "variants" : 4, + "distribution" : "/biomes/distributions.config:scatteredSmall", + + "type" : "object", + "objectSets" : [ + { + "pool" : [ [0.35, "groundspike1" ], [0.35, "groundspike2" ], [0.35, "groundspike3" ], [0.35, "groundspike4" ] ], + "parameters" : { } + } + ] + }, + { + "mode" : "floor", + "priority" : 0.0, + "variants" : 3, + "distribution" : "/biomes/distributions.config:scatteredSmall", + + "type" : "object", + "objectSets" : [ + { + "pool" : [ [0.35, "prismrock1" ], [0.35, "prismrock2" ], [0.35, "prismrock3" ] ], + "parameters" : { } + } + ] + } + ] + } +} diff --git a/biomes/surface/ctforestsub.biome b/biomes/surface/ctforestsub.biome new file mode 100644 index 00000000..c9a3fbdd --- /dev/null +++ b/biomes/surface/ctforestsub.biome @@ -0,0 +1,255 @@ +{ + "name" : "ctforestsub", + "friendlyName" : "Enternia Subsurface", + + "spawnProfile" : { + "groups" : [ + { + "select" : 1, + "pool" : [ + [ 0.900, "ctminidrone" ], + [ 0.100, "cticenarfin" ] + ] + }, + { + "select" : 1, + "pool" : [ + [ 1, "ctadultpoptopsub" ] + ] + }, + { + "select" : 2, + "pool" : [ + [ 0.850, "ciclesnailcritter" ], + [ 0.150, "crystaltortoisecritter" ] + ] + } + ], + "monsterParameters" : { + "colors" : "ocean", + "statusSettings" : { + "stats" : { + "electricStatusImmunity" : { + "baseValue" : 1.0 + } + } + } + } + }, + + "hueShiftOptions" : [30, 45], + "statusEffects" : [ "ctbiomeelectric" ], + + "mainBlock" : "moonstone", + "subBlocks" : [ "moonrock", "moondust" ], + "ores" : "ctcrystalsub", + + "parallax" : "ctforestsub.parallax", + + "ambientNoises" : { + "day" : { + "tracks" : [ "/sfx/environmental/desert_underground.ogg" ] + }, + "night" : { + "tracks" : [ "/sfx/environmental/desert_underground.ogg" ] + } + }, + + "musicTrack" : { + "day" : { + "tracks" : [ "/music/epsilon-indi.ogg", "/music/hymn-to-the-stars.ogg", "/music/procyon.ogg", "/music/stellarformation.ogg", "/music/vast-immortal-suns.ogg", "/music/atlas.ogg", "/music/blue-straggler.ogg", "/music/cygnus-x1.ogg", "/music/europa.ogg", "/music/haiku.ogg", "/music/m54.ogg", "/music/on-the-beach-at-night.ogg" ] + }, + "night" : { + "tracks" : [ "/music/jupiter.ogg", "/music/arctic-constellation1.ogg", "/music/arctic-constellation2.ogg", "/music/mercury.ogg", "/music/mira.ogg", "/music/procyon.ogg", "/music/tranquility-base.ogg", "/music/psyche.ogg", "/music/accretion-disc.ogg", "/music/cygnus-x1.ogg", "/music/eridanus-supervoid.ogg", "/music/horsehead-nebula.ogg", "/music/large-magellanic-cloud.ogg", "/music/m54.ogg", "/music/nomads.ogg", "/music/on-the-beach-at-night.ogg" ] + } + }, + + "undergroundPlaceables" : { + "grassMod" : [ "grass" ], + "grassModDensity" : 0.9, + + "ceilingGrassMod" : [ "roots" ], + "ceilingGrassModDensity" : 0.9, + + "items" : [ + + { + "mode" : "floor", + "priority" : 1, + "variants" : 1, + "distribution" : "/biomes/distributions.config:undergroundChests", + + "type" : "treasureBox", + "treasureBoxSets" : [ "forestChest" ] + }, + { + "mode" : "floor", + "priority" : 1, + "variants" : 1, + "distribution" : "/biomes/distributions.config:undergroundChests", + + "type" : "treasureBox", + "treasureBoxSets" : [ "crystalChest" ] + }, + { + "mode" : "floor", + "priority" : 1.0, + "variants" : 1, + "distribution" : "/biomes/distributions.config:undergroundChests", + + "type" : "object", + "objectSets" : [ + { + "pool" : [ [1, "statuspod" ] ], + "parameters" : { } + } + ] + }, + { + "mode" : "floor", + "priority" : 1.0, + "variants" : 1, + "distribution" : "/biomes/distributions.config:undergroundweaponChests", + + "type" : "treasureBox", + "treasureBoxSets" : [ "weaponChest" ] + }, + { + "mode" : "floor", + "priority" : 4.0, + "variants" : 1, + "distribution" : "/biomes/distributions.config:undergroundCapsules", + + "type" : "object", + "objectSets" : [ + { + "pool" : [ [0.35, "capsulesmall" ], [0.35, "capsulemed" ], [0.35, "capsulebig" ] ], + "parameters" : { } + } + ] + }, + { + "mode" : "floor", "priority" : 2.0, "variants" : 4, "period" : 5, + "distribution" : "/biomes/distributions.config:scatteredLarge", + "type" : "grass", + "grasses" : [ "testflower", "testflower2", "testflower3", "testflower4", "testflower5", "testflower6", "testflower7" ] + }, + { + "mode" : "floor", + "priority" : 1.0, + "variants" : 1, + "distribution" : "/biomes/distributions.config:denseMedium", + + "type" : "bush", + "bushes" : [ + { + "name" : "testbush", + "baseHueShiftMax" : 200, + "modHueShiftMax" : 200, + "baseHueShiftMin" : 200, + "modHueShiftMin" : 200 + } + ] + }, + { + "mode" : "floor", + "priority" : 1, + "variants" : 1, + "distribution" : "/biomes/distributions.config:mainBiomeEncounterDungeon", + + "type" : "microdungeon", + "microdungeons" : [ "encounterdungeons" ] + }, + + // CROPS + { + "mode" : "floor", + "priority" : 1.0, + "variants" : 1, + "distribution" : "/biomes/distributions.config:hazardUndergroundLower", + + "type" : "object", + "objectSets" : [ + { + "pool" : [ [0.20, "groundspike1" ], [0.20, "groundspike2" ], [0.20, "groundspike3" ], [0.20, "groundspike4" ] ] + } + ] + }, + { + "mode" : "ceiling", + "priority" : 1.0, + "variants" : 1, + "distribution" : "/biomes/distributions.config:hazardUndergroundCeilingLower", + + "type" : "object", + "objectSets" : [ + { + "pool" : [ [0.20, "ceilingspike1" ], [0.20, "ceilingspike2" ], [0.20, "ceilingspike3" ], [0.20, "ceilingspike4" ] ] + } + ] + }, + { + "mode" : "floor", + "priority" : 1.0, + "variants" : 1, + "distribution" : "/biomes/distributions.config:rareClumpySmall", + + "type" : "object", + "objectSets" : [ + { + "pool" : [ [1, "teslaspike" ] ], + "parameters" : { } + } + ] + }, + { + "mode" : "floor", + "priority" : 1.0, + "variants" : 1, + "distribution" : "/biomes/distributions.config:potsRare", + + "type" : "object", + "objectSets" : [ + { + "pool" : [ [1, "teslaspike" ] ], + "parameters" : { } + } + ] + }, + { + "mode" : "floor", "priority" : 4.0, "variants" : 4, + "distribution" : "/biomes/distributions.config:denseMedium", + "type" : "object", + "objectSets" : [ + { + "pool" : [ [0.35, "crystalcavebush1" ], [0.35, "crystalcavebush2" ], [0.35, "crystalcavebush3" ], [0.35, "crystalcavebush4" ] ], + "parameters" : { } + } + ] + }, + { + "mode" : "floor", + "priority" : 0.0, + "variants" : 1, + "distribution" : "/biomes/distributions.config:undergroundChallengeDoors", + + "type" : "object", + "objectSets" : [ + { + "pool" : [ [1, "challengedoor" ] ], + "parameters" : { } + } + ] + }, + { + "mode" : "floor", + "priority" : 1, + "variants" : 1, + "distribution" : "/biomes/distributions.config:undergroundBiomeEncounterDungeon", + + "type" : "microdungeon", + "microdungeons" : [ "undergroundencounterdungeons" ] + } + ] + } +} diff --git a/biomes/surface/ctforestsub.parallax b/biomes/surface/ctforestsub.parallax new file mode 100644 index 00000000..fec5baec --- /dev/null +++ b/biomes/surface/ctforestsub.parallax @@ -0,0 +1,25 @@ +{ + "layers" : [ + { + "kind" : "tile/lakecavern", + "nohueshift" : false, + "lightMapped" : true, + "parallax" : 1.2, + "repeatY" : true + }, + { + "kind" : "tile/skullcavern", + "nohueshift" : false, + "lightMapped" : true, + "parallax" : 1.4, + "repeatY" : true + }, + { + "kind" : "tile/lakeback", + "nohueshift" : false, + "lightMapped" : true, + "parallax" : 1.5, + "repeatY" : true + } + ] +} \ No newline at end of file diff --git a/biomes/surface/ctforestsub2.biome b/biomes/surface/ctforestsub2.biome new file mode 100644 index 00000000..f157fff0 --- /dev/null +++ b/biomes/surface/ctforestsub2.biome @@ -0,0 +1,213 @@ +{ + "name" : "ctforestsub2", + "friendlyName" : "Enternia Deep Caves", + + "spawnProfile" : { + "groups" : [ + { + "select" : 3, + "pool" : [ + [ 0.500, "ctminidronesub" ], + [ 0.100, "cticenarfin" ], + [ 0.200, "wisper" ], + [ 0.200, "skimbus" ] + ] + }, + { + "select" : 2, + "pool" : [ + [ 0.850, "ciclesnailcritter" ], + [ 0.150, "crystaltortoisecritter" ] + ] + } + ], + "monsterParameters" : { + "colors" : "ocean", + "statusSettings" : { + "stats" : { + "electricStatusImmunity" : { + "baseValue" : 1.0 + } + } + } + } + }, + + "hueShiftOptions" : [30, 45], + "statusEffects" : [ "ctbiomeelectric" ], + + "mainBlock" : "moonstone", + "subBlocks" : [ "crystalblock", "moonrock" ], + "ores" : "ctcrystalsub2", + + "parallax" : "ctforestsub.parallax", + + "ambientNoises" : { + "day" : { + "tracks" : [ "/sfx/environmental/desert_underground.ogg" ] + }, + "night" : { + "tracks" : [ "/sfx/environmental/desert_underground.ogg" ] + } + }, + + "musicTrack" : { + "day" : { + "tracks" : [ "/music/epsilon-indi.ogg", "/music/hymn-to-the-stars.ogg", "/music/procyon.ogg", "/music/stellarformation.ogg", "/music/vast-immortal-suns.ogg", "/music/atlas.ogg", "/music/blue-straggler.ogg", "/music/cygnus-x1.ogg", "/music/europa.ogg", "/music/haiku.ogg", "/music/m54.ogg", "/music/on-the-beach-at-night.ogg" ] + }, + "night" : { + "tracks" : [ "/music/jupiter.ogg", "/music/arctic-constellation1.ogg", "/music/arctic-constellation2.ogg", "/music/mercury.ogg", "/music/mira.ogg", "/music/procyon.ogg", "/music/tranquility-base.ogg", "/music/psyche.ogg", "/music/accretion-disc.ogg", "/music/cygnus-x1.ogg", "/music/eridanus-supervoid.ogg", "/music/horsehead-nebula.ogg", "/music/large-magellanic-cloud.ogg", "/music/m54.ogg", "/music/nomads.ogg", "/music/on-the-beach-at-night.ogg" ] + } + }, + + "undergroundPlaceables" : { + "grassMod" : [ "grass" ], + "grassModDensity" : 0.2, + + "ceilingGrassMod" : [ "roots" ], + "ceilingGrassModDensity" : 0.3, + + "items" : [ + + { + "mode" : "floor", + "priority" : 1, + "variants" : 1, + "distribution" : "/biomes/distributions.config:undergroundChests", + + "type" : "treasureBox", + "treasureBoxSets" : [ "forestChest" ] + }, + { + "mode" : "floor", + "priority" : 1, + "variants" : 1, + "distribution" : "/biomes/distributions.config:undergroundChests", + + "type" : "treasureBox", + "treasureBoxSets" : [ "crystalChest" ] + }, + { + "mode" : "floor", + "priority" : 1.0, + "variants" : 1, + "distribution" : "/biomes/distributions.config:undergroundChests", + + "type" : "object", + "objectSets" : [ + { + "pool" : [ [1, "statuspod" ] ], + "parameters" : { } + } + ] + }, + { + "mode" : "floor", + "priority" : 1.0, + "variants" : 1, + "distribution" : "/biomes/distributions.config:undergroundweaponChests", + + "type" : "treasureBox", + "treasureBoxSets" : [ "weaponChest" ] + }, + { + "mode" : "floor", + "priority" : 4.0, + "variants" : 1, + "distribution" : "/biomes/distributions.config:undergroundCapsules", + + "type" : "object", + "objectSets" : [ + { + "pool" : [ [0.35, "capsulesmall" ], [0.35, "capsulemed" ], [0.35, "capsulebig" ] ], + "parameters" : { } + } + ] + }, + { + "mode" : "floor", + "priority" : 1, + "variants" : 1, + "distribution" : "/biomes/distributions.config:mainBiomeEncounterDungeon", + + "type" : "microdungeon", + "microdungeons" : [ "encounterdungeons" ] + }, + { + "mode" : "floor", + "priority" : 1.0, + "variants" : 1, + "distribution" : "/biomes/distributions.config:hazardUndergroundLower", + + "type" : "object", + "objectSets" : [ + { + "pool" : [ [0.20, "groundspike1" ], [0.20, "groundspike2" ], [0.20, "groundspike3" ], [0.20, "groundspike4" ] ] + } + ] + }, + { + "mode" : "ceiling", + "priority" : 1.0, + "variants" : 1, + "distribution" : "/biomes/distributions.config:hazardUndergroundCeilingLower", + + "type" : "object", + "objectSets" : [ + { + "pool" : [ [0.20, "ceilingspike1" ], [0.20, "ceilingspike2" ], [0.20, "ceilingspike3" ], [0.20, "ceilingspike4" ] ] + } + ] + }, + { + "mode" : "floor", + "priority" : 1.0, + "variants" : 1, + "distribution" : "/biomes/distributions.config:scatteredSmall", + + "type" : "object", + "objectSets" : [ + { + "pool" : [ [1, "teslaspike" ] ], + "parameters" : { } + } + ] + }, + { + "mode" : "floor", "priority" : 4.0, "variants" : 4, + "distribution" : "/biomes/distributions.config:denseSmall", + "type" : "object", + "objectSets" : [ + { + "pool" : [ [0.35, "crystalcavebush1" ], [0.35, "crystalcavebush2" ], [0.35, "crystalcavebush3" ], [0.35, "crystalcavebush4" ] ], + "parameters" : { } + } + ] + }, + { + "mode" : "floor", + "priority" : 0.0, + "variants" : 1, + "distribution" : "/biomes/distributions.config:undergroundChallengeDoors", + + "type" : "object", + "objectSets" : [ + { + "pool" : [ [1, "challengedoor" ] ], + "parameters" : { } + } + ] + }, + { + "mode" : "floor", + "priority" : 1, + "variants" : 1, + "distribution" : "/biomes/distributions.config:undergroundBiomeEncounterDungeon", + + "type" : "microdungeon", + "microdungeons" : [ "undergroundencounterdungeons" ] + } + + ] + } +} diff --git a/biomes/surface/ctrainweather/drizzle.weather b/biomes/surface/ctrainweather/drizzle.weather new file mode 100644 index 00000000..b78e03a0 --- /dev/null +++ b/biomes/surface/ctrainweather/drizzle.weather @@ -0,0 +1,76 @@ +{ + "name" : "ctdrizzleweather", + + "particles" : [ + { + "density" : 0.02, + "particle" : { + "type" : "textured", + "image" : "/particles/rain/1.png", + "velocity" : [0, -35.5], + "approach" : [15, 15], + "angularVelocity" : 0, + "timeToLive" : 20, + "destructionAction" : "Image", + "destructionTime" : 0.1, + "destructionImage" : "/particles/splash/1.png", + "collidesForeground" : true, + "collidesLiquid" : true, + "ignoreWind" : false + } + }, + { + "density" : 0.02, + "particle" : { + "type" : "textured", + "image" : "/particles/rain/2.png", + "velocity" : [0, -25.5], + "approach" : [15, 15], + "angularVelocity" : 0, + "timeToLive" : 20, + "destructionAction" : "Image", + "destructionTime" : 0.1, + "destructionImage" : "/particles/splash/1.png", + "collidesForeground" : true, + "collidesLiquid" : true, + "ignoreWind" : false + } + }, + { + "density" : 0.02, + "particle" : { + "type" : "textured", + "image" : "/particles/rain/3.png", + "velocity" : [0, -20.5], + "approach" : [15, 15], + "angularVelocity" : 0, + "timeToLive" : 20, + "destructionAction" : "Image", + "destructionTime" : 0.1, + "destructionImage" : "/particles/splash/1.png", + "collidesForeground" : true, + "collidesLiquid" : true, + "ignoreWind" : false + } + } + ], + + "projectiles" : [ + { + "projectile" : "lightwater", + "parameters" : { + "power" : 0 + }, + "velocity" : [0, -100], + "ratePerX" : 0.05, + "spawnAboveRegion" : 30, + "spawnHorizontalPad" : 10, + "windAffectAmount" : 1 + } + ], + + "duration" : [50, 400], + "lightningFrequency" : 0.00, + "maximumWind" : 4.5, + "weatherNoises" : [ "/sfx/weather/rain_light.ogg" ] +} diff --git a/biomes/surface/ctrainweather/rain.weather b/biomes/surface/ctrainweather/rain.weather new file mode 100644 index 00000000..dce11f7c --- /dev/null +++ b/biomes/surface/ctrainweather/rain.weather @@ -0,0 +1,85 @@ +{ + "name" : "ctrainweather", + + "particles" : [ + { + + "density" : 0.05, + "autoRotate" : true, + + "particle" : { + "type" : "textured", + "image" : "/particles/rain/1.png", + "velocity" : [0, -35.5], + "approach" : [15, 15], + "angularVelocity" : 0, + "timeToLive" : 20, + "destructionAction" : "Image", + "destructionTime" : 0.1, + "destructionImage" : "/particles/splash/1.png", + "collidesForeground" : true, + "collidesLiquid" : true, + "ignoreWind" : false + } + }, + { + "density" : 0.05, + "autoRotate" : true, + + "particle" : { + "type" : "textured", + "image" : "/particles/rain/2.png", + "velocity" : [0, -25.5], + "approach" : [15, 15], + "angularVelocity" : 0, + "timeToLive" : 20, + "destructionAction" : "Image", + "destructionTime" : 0.1, + "destructionImage" : "/particles/splash/1.png", + "collidesForeground" : true, + "collidesLiquid" : true, + "ignoreWind" : false + } + }, + { + "density" : 0.05, + "autoRotate" : true, + + "particle" : { + "type" : "textured", + "image" : "/particles/rain/3.png", + "velocity" : [0, -20.5], + "approach" : [15, 15], + "angularVelocity" : 0, + "timeToLive" : 20, + "destructionAction" : "Image", + "destructionTime" : 0.1, + "destructionImage" : "/particles/splash/1.png", + "collidesForeground" : true, + "collidesLiquid" : true, + "ignoreWind" : false + } + } + ], + + "projectiles" : [ + { + "projectile" : "lightwater", + "parameters" : { + "power" : 0 + }, + "velocity" : [0, -100], + "ratePerX" : 0.1, + "spawnAboveRegion" : 30, + "spawnHorizontalPad" : 10, + "windAffectAmount" : 1 + } + ], + + "statusEffects" : ["wet", "ctionizedrain"], + + "duration" : [40, 100], + "maximumWind" : 15.0, + + "weatherNoises" : [ "/sfx/weather/rain_medium.ogg" ] +} diff --git a/biomes/surface/ctrainweather/storm.weather b/biomes/surface/ctrainweather/storm.weather new file mode 100644 index 00000000..82099771 --- /dev/null +++ b/biomes/surface/ctrainweather/storm.weather @@ -0,0 +1,80 @@ +{ + "name" : "ctstormweather", + + "particles" : [ + { + "density" : 0.15, + "autoRotate" : true, + "particle" : { + "type" : "textured", + "image" : "/particles/rain/1.png", + "velocity" : [0, -35.5], + "approach" : [15, 15], + "angularVelocity" : 0, + "timeToLive" : 20, + "destructionAction" : "Image", + "destructionTime" : 0.1, + "destructionImage" : "/particles/splash/1.png", + "collidesForeground" : true, + "collidesLiquid" : true, + "ignoreWind" : false + } + }, + { + "density" : 0.15, + "autoRotate" : true, + "particle" : { + "type" : "textured", + "image" : "/particles/rain/2.png", + "velocity" : [0, -25.5], + "approach" : [15, 15], + "angularVelocity" : 0, + "timeToLive" : 20, + "destructionAction" : "Image", + "destructionTime" : 0.1, + "destructionImage" : "/particles/splash/1.png", + "collidesForeground" : true, + "collidesLiquid" : true, + "ignoreWind" : false + } + }, + { + "density" : 0.15, + "autoRotate" : true, + "particle" : { + "type" : "textured", + "image" : "/particles/rain/3.png", + "velocity" : [0, -20.5], + "approach" : [15, 15], + "angularVelocity" : 0, + "timeToLive" : 20, + "destructionAction" : "Image", + "destructionTime" : 0.1, + "destructionImage" : "/particles/splash/1.png", + "collidesForeground" : true, + "collidesLiquid" : true, + "ignoreWind" : false + } + } + ], + + "projectiles" : [ + { + "projectile" : "water", + "parameters" : { + "power" : 0 + }, + "velocity" : [0, -100], + "ratePerX" : 0.1, + "spawnAboveRegion" : 30, + "spawnHorizontalPad" : 10, + "windAffectAmount" : 1 + } + ], + + "statusEffects" : ["wet", "ctionizedrain"], + + "duration" : [50, 400], + "maximumWind" : 60.0, + "weatherNoises" : [ "/sfx/weather/rain_heavy.ogg" ] +} diff --git a/celestial.config.patch b/celestial.config.patch index 074bec9e..82387627 100644 --- a/celestial.config.patch +++ b/celestial.config.patch @@ -26,15 +26,7 @@ "path":"/satelliteTypes/Tier2/baseParameters/terrestrialType/-", "value":"ctforest" }, -{"op":"add", -"path":"/planetaryTypes/Tier1/baseParameters/terrestrialType/-", -"value":"ctforest" -}, -{"op":"add", -"path":"/satelliteTypes/Tier1/baseParameters/terrestrialType/-", -"value":"ctforest" -}, {"op":"add", "path":"/planetaryTypes/Tier3/baseParameters/terrestrialType/-", "value":"ctforest" diff --git a/ctarmor/ctarmor.chest b/ctarmor/ctarmor.chest index a85906da..1c40ae2b 100644 --- a/ctarmor/ctarmor.chest +++ b/ctarmor/ctarmor.chest @@ -5,7 +5,7 @@ "maxStack" : 1, "rarity" : "Legendary", "category" : "chestarmour", - "description" : "Ceterai's bodysuit. Provides enhanced energy flow in exchange for protection. Adds slow health regen, unaffected by regen blockers.", + "description" : "\nProvides enhanced energy flow in exchange for protection. Adds slow health regen, unaffected by regen blockers.", "shortdescription" : "^blue;C.T. Suit^reset;", "tooltipKind" : "armor", diff --git a/ctarmor/ctarmor.legs b/ctarmor/ctarmor.legs index 56ddc62f..a1a30225 100644 --- a/ctarmor/ctarmor.legs +++ b/ctarmor/ctarmor.legs @@ -5,7 +5,7 @@ "maxStack" : 1, "rarity" : "Legendary", "category" : "legarmour", - "description" : "This legwear reduses any falldamage by 50%.", + "description" : "\nThis legwear reduses any falldamage by 50%.", "shortdescription" : "^blue;C.T. Walkers^reset;", "tooltipKind" : "armor", diff --git a/ctarmor/ctepp/back.frames b/ctarmor/ctepp/back.frames new file mode 100644 index 00000000..135033ac --- /dev/null +++ b/ctarmor/ctepp/back.frames @@ -0,0 +1,23 @@ +{ + "frameGrid" : { + "size" : [43, 43], + "dimensions" : [9, 7], + + "names" : [ + [ null, "idle.1", "idle.2", "idle.3", "idle.4", "idle.5", "sit.1", null, "duck.1" ], + [ null, "walk.1", "walk.2", "walk.3", "walk.4", "walk.5", "walk.6", "walk.7", "walk.8" ], + [ null, "run.1", "run.2", "run.3", "run.4", "run.5", "run.6", "run.7", "run.8" ], + [ null, "jump.1", "jump.2", "jump.3", "jump.4", "fall.1", "fall.2", "fall.3", "fall.4" ], + [ null, "climb.1", "climb.2", "climb.3", "climb.4", "climb.5", "climb.6", "climb.7", "climb.8" ], + [ null, "swimIdle.1", null, null, "swim.1", "swim.2", "swim.3", "swim.4", null ], + [ null, "runbackwards.1", "runbackwards.2", "runbackwards.3", "runbackwards.4", "runbackwards.5", "runbackwards.6", "runbackwards.7", "runbackwards.8" ] + ] + }, + "aliases" : { + "swimIdle.2" : "swimIdle.1", + "swim.5" : "swimIdle.1", + "swim.6" : "swimIdle.1", + "swim.7" : "swimIdle.1", + "lay.1" : "idle.1" + } +} diff --git a/ctarmor/ctepp/back.png b/ctarmor/ctepp/back.png new file mode 100644 index 00000000..7b9667a4 Binary files /dev/null and b/ctarmor/ctepp/back.png differ diff --git a/ctarmor/ctepp/ctepp.back b/ctarmor/ctepp/ctepp.back new file mode 100644 index 00000000..7522c91e --- /dev/null +++ b/ctarmor/ctepp/ctepp.back @@ -0,0 +1,57 @@ +{ + "itemName" : "ctepp", + "price" : 6000, + "inventoryIcon" : "ctepp.png", + "tooltipKind" : "baseaugment", + "rarity" : "Legendary", + "pickupQuestTemplates" : [ ], + "category" : "enviroProtectionPack", + "description" : "- full immunity to electricity-related statuses;\n- +20% electric resist;\n- ^blue;Static Field^reset; effect (nonstackable). Useful on ^#0087ff;Enternia^reset; planets.", + "shortdescription" : "^blue;Enter-EPP^reset;", + + "maleFrames" : "back.png", + "femaleFrames" : "back.png", + "maxStack" : 1, + + "statusEffects" : [ + { + "stat" : "electricStatusImmunity", + "amount" : 1.0 + }, + { + "stat" : "electricResistance", + "amount" : 0.20 + }, + "ctmind" + ], + + "acceptsAugmentType" : "back", + "radioMessagesOnPickup" : [ "pickupepp" ], + + "colorOptions" : [ + // BLACK + { "ffca8a" : "444444", "e0975c" : "343434", "a85636" : "181818", "6f2919" : "000000" }, + // BLACK + { "ffca8a" : "444444", "e0975c" : "343434", "a85636" : "181818", "6f2919" : "000000" }, + // GREY + { "ffca8a" : "b5b5b5", "e0975c" : "808080", "a85636" : "555555", "6f2919" : "313332" }, + // WHITE + { "ffca8a" : "e6e6e6", "e0975c" : "b6b6b6", "a85636" : "7b7b7b", "6f2919" : "373737" }, + // RED + { "ffca8a" : "f4988c", "e0975c" : "d93a3a", "a85636" : "932625", "6f2919" : "601119" }, + // ORANGE + { "ffca8a" : "ffd495", "e0975c" : "ea9931", "a85636" : "af4e00", "6f2919" : "6e2900" }, + // YELLOW + { "ffca8a" : "ffffa7", "e0975c" : "e2c344", "a85636" : "a46e06", "6f2919" : "642f00" }, + // GREEN + { "ffca8a" : "b2e89d", "e0975c" : "51bd3b", "a85636" : "247824", "6f2919" : "144216" }, + // BLUE + { "ffca8a" : "96cbe7", "e0975c" : "5588d4", "a85636" : "344495", "6f2919" : "1a1c51" }, + // PURPLE + { "ffca8a" : "d29ce7", "e0975c" : "a451c4", "a85636" : "6a2284", "6f2919" : "320c40" }, + // PINK + { "ffca8a" : "eab3db", "e0975c" : "d35eae", "a85636" : "97276d", "6f2919" : "59163f" }, + // BROWN + { "ffca8a" : "ccae7c", "e0975c" : "a47844", "a85636" : "754c23", "6f2919" : "472b13" } + ] +} diff --git a/ctarmor/ctepp/ctepp.png b/ctarmor/ctepp/ctepp.png new file mode 100644 index 00000000..198e8afa Binary files /dev/null and b/ctarmor/ctepp/ctepp.png differ diff --git a/ctfarmables/aya/foliage/ctayaleaves/ctayaleaves.modularfoliage b/ctfarmables/aya/foliage/ctayaleaves/ctayaleaves.modularfoliage index 7df43e51..720222fb 100644 --- a/ctfarmables/aya/foliage/ctayaleaves/ctayaleaves.modularfoliage +++ b/ctfarmables/aya/foliage/ctayaleaves/ctayaleaves.modularfoliage @@ -4,8 +4,11 @@ "dropConfig" : { "drops" : [ - [ { "item" : "sapling" }, { "item" : "ctaya", "count" : 1 } ], - [ { "item" : "sapling" }, { "item" : "ctaya", "count" : 2 } ] + [ { "item" : "ctsapling" } ], + [ { "item" : "ctsapling" } ], + [ { "item" : "ctsapling" }, { "item" : "ctaya", "count" : 1 } ], + [ { "item" : "ctsapling" }, { "item" : "ctaya", "count" : 1 } ], + [ { "item" : "ctsapling" }, { "item" : "ctwoodsap", "count" : 1 } ] ], "particles" : { diff --git a/ctfarmables/aya/foliage/ctayaleaves/ctayaleaves2.modularfoliage b/ctfarmables/aya/foliage/ctayaleaves/ctayaleaves2.modularfoliage new file mode 100644 index 00000000..17f255a6 --- /dev/null +++ b/ctfarmables/aya/foliage/ctayaleaves/ctayaleaves2.modularfoliage @@ -0,0 +1,170 @@ +{ + "name" : "ctayaleaves2", + "shape" : "ctforest", + + "dropConfig" : { + "drops" : [ + [ ], + [ { "item" : "ctsapling" } ], + [ { "item" : "ctsapling" } ], + [ { "item" : "ctsapling" }, { "item" : "ctwoodsap", "count" : 1 } ] + ], + + "particles" : { + "breakTree" : { + "density" : 3, + "options" : [ + { + "type" : "ember", + "color" : [34, 57, 32], + "timeToLive" : 10, + "initialVelocity" : [0, 5], + "finalVelocity" : [0, -20], + "approach" : [0, 5], + "variance" : { + "timeToLive" : 3.0, + "initialVelocity" : [1.0, 1.0] + } + }, + { + "type" : "ember", + "color" : [58, 83, 48], + "timeToLive" : 10, + "initialVelocity" : [0, 5], + "finalVelocity" : [0, -20], + "approach" : [0, 5], + "variance" : { + "timeToLive" : 3.0, + "initialVelocity" : [1.0, 1.0] + } + }, + { + "type" : "ember", + "color" : [73, 109, 72], + "timeToLive" : 10, + "initialVelocity" : [0, 5], + "finalVelocity" : [0, -20], + "approach" : [0, 5], + "variance" : { + "timeToLive" : 3.0, + "initialVelocity" : [1.0, 1.0] + } + } + ] + }, + "hitGround" : { + "density" : 3, + "options" : [ + { + "type" : "ember", + "color" : [34, 57, 32], + "timeToLive" : 10, + "initialVelocity" : [0, 5], + "finalVelocity" : [0, -20], + "approach" : [0, 5], + "variance" : { + "timeToLive" : 3.0, + "initialVelocity" : [1.0, 1.0] + } + }, + { + "type" : "ember", + "color" : [58, 83, 48], + "timeToLive" : 10, + "initialVelocity" : [0, 5], + "finalVelocity" : [0, -20], + "approach" : [0, 5], + "variance" : { + "timeToLive" : 3.0, + "initialVelocity" : [1.0, 1.0] + } + }, + { + "type" : "ember", + "color" : [73, 109, 72], + "timeToLive" : 10, + "initialVelocity" : [0, 5], + "finalVelocity" : [0, -20], + "approach" : [0, 5], + "variance" : { + "timeToLive" : 3.0, + "initialVelocity" : [1.0, 1.0] + } + } + ] + } + } + }, + + + "parallaxFoliage" : false, + + "crownLeaves" : { + "crown1" : { + "image" : "crown1.png", + "backimage" : "", + "attachment" : { + "bx" : 0, + "by" : 0 + } + }, + "crown2" : { + "image" : "crown2.png", + "backimage" : "", + "attachment" : { + "bx" : 0, + "by" : 0 + } + }, + "crown3" : { + "image" : "crown3.png", + "backimage" : "", + "attachment" : { + "bx" : 0, + "by" : 0 + } + } + }, + "branchLeaves" : { + "branch1" : { + "image" : "branch1.png", + "backimage" : "", + "attachment" : { + "bx" : 0, + "by" : 0 + } + }, + "branch2" : { + "image" : "branch2.png", + "backimage" : "", + "attachment" : { + "bx" : 0, + "by" : 0 + } + }, + "branch3" : { + "image" : "branch3.png", + "backimage" : "", + "attachment" : { + "bx" : 0, + "by" : 0 + } + }, + "branch4" : { + "image" : "branch4.png", + "backimage" : "", + "attachment" : { + "bx" : 0, + "by" : 0 + } + }, + "branch5" : { + "image" : "branch5.png", + "backimage" : "", + "attachment" : { + "bx" : 0, + "by" : 0 + } + } + } +} diff --git a/ctfarmables/aya/foliage/ctayaleaves3/branch1.png b/ctfarmables/aya/foliage/ctayaleaves3/branch1.png new file mode 100644 index 00000000..18e422de Binary files /dev/null and b/ctfarmables/aya/foliage/ctayaleaves3/branch1.png differ diff --git a/ctfarmables/aya/foliage/ctayaleaves3/branch2.png b/ctfarmables/aya/foliage/ctayaleaves3/branch2.png new file mode 100644 index 00000000..4c1908de Binary files /dev/null and b/ctfarmables/aya/foliage/ctayaleaves3/branch2.png differ diff --git a/ctfarmables/aya/foliage/ctayaleaves3/branch3.png b/ctfarmables/aya/foliage/ctayaleaves3/branch3.png new file mode 100644 index 00000000..6654a3d3 Binary files /dev/null and b/ctfarmables/aya/foliage/ctayaleaves3/branch3.png differ diff --git a/ctfarmables/aya/foliage/ctayaleaves3/branch4.png b/ctfarmables/aya/foliage/ctayaleaves3/branch4.png new file mode 100644 index 00000000..b426fb70 Binary files /dev/null and b/ctfarmables/aya/foliage/ctayaleaves3/branch4.png differ diff --git a/ctfarmables/aya/foliage/ctayaleaves3/branch5.png b/ctfarmables/aya/foliage/ctayaleaves3/branch5.png new file mode 100644 index 00000000..af958a1b Binary files /dev/null and b/ctfarmables/aya/foliage/ctayaleaves3/branch5.png differ diff --git a/ctfarmables/aya/foliage/ctayaleaves3/crown1.png b/ctfarmables/aya/foliage/ctayaleaves3/crown1.png new file mode 100644 index 00000000..aaf92e9e Binary files /dev/null and b/ctfarmables/aya/foliage/ctayaleaves3/crown1.png differ diff --git a/ctfarmables/aya/foliage/ctayaleaves3/crown2.png b/ctfarmables/aya/foliage/ctayaleaves3/crown2.png new file mode 100644 index 00000000..9a0a2992 Binary files /dev/null and b/ctfarmables/aya/foliage/ctayaleaves3/crown2.png differ diff --git a/ctfarmables/aya/foliage/ctayaleaves3/crown3.png b/ctfarmables/aya/foliage/ctayaleaves3/crown3.png new file mode 100644 index 00000000..86d51e70 Binary files /dev/null and b/ctfarmables/aya/foliage/ctayaleaves3/crown3.png differ diff --git a/ctfarmables/aya/foliage/ctayaleaves3/ctayaleaves3.modularfoliage b/ctfarmables/aya/foliage/ctayaleaves3/ctayaleaves3.modularfoliage new file mode 100644 index 00000000..1cd1cbb0 --- /dev/null +++ b/ctfarmables/aya/foliage/ctayaleaves3/ctayaleaves3.modularfoliage @@ -0,0 +1,170 @@ +{ + "name" : "ctayaleaves3", + "shape" : "ctforest", + + "dropConfig" : { + "drops" : [ + [ ], + [ { "item" : "ctsapling" } ], + [ { "item" : "ctsapling" } ], + [ { "item" : "ctsapling" }, { "item" : "ctwoodsap", "count" : 1 } ] + ], + + "particles" : { + "breakTree" : { + "density" : 3, + "options" : [ + { + "type" : "ember", + "color" : [34, 57, 32], + "timeToLive" : 10, + "initialVelocity" : [0, 5], + "finalVelocity" : [0, -20], + "approach" : [0, 5], + "variance" : { + "timeToLive" : 3.0, + "initialVelocity" : [1.0, 1.0] + } + }, + { + "type" : "ember", + "color" : [58, 83, 48], + "timeToLive" : 10, + "initialVelocity" : [0, 5], + "finalVelocity" : [0, -20], + "approach" : [0, 5], + "variance" : { + "timeToLive" : 3.0, + "initialVelocity" : [1.0, 1.0] + } + }, + { + "type" : "ember", + "color" : [73, 109, 72], + "timeToLive" : 10, + "initialVelocity" : [0, 5], + "finalVelocity" : [0, -20], + "approach" : [0, 5], + "variance" : { + "timeToLive" : 3.0, + "initialVelocity" : [1.0, 1.0] + } + } + ] + }, + "hitGround" : { + "density" : 3, + "options" : [ + { + "type" : "ember", + "color" : [34, 57, 32], + "timeToLive" : 10, + "initialVelocity" : [0, 5], + "finalVelocity" : [0, -20], + "approach" : [0, 5], + "variance" : { + "timeToLive" : 3.0, + "initialVelocity" : [1.0, 1.0] + } + }, + { + "type" : "ember", + "color" : [58, 83, 48], + "timeToLive" : 10, + "initialVelocity" : [0, 5], + "finalVelocity" : [0, -20], + "approach" : [0, 5], + "variance" : { + "timeToLive" : 3.0, + "initialVelocity" : [1.0, 1.0] + } + }, + { + "type" : "ember", + "color" : [73, 109, 72], + "timeToLive" : 10, + "initialVelocity" : [0, 5], + "finalVelocity" : [0, -20], + "approach" : [0, 5], + "variance" : { + "timeToLive" : 3.0, + "initialVelocity" : [1.0, 1.0] + } + } + ] + } + } + }, + + + "parallaxFoliage" : false, + + "crownLeaves" : { + "crown1" : { + "image" : "crown1.png", + "backimage" : "", + "attachment" : { + "bx" : 0, + "by" : 0 + } + }, + "crown2" : { + "image" : "crown2.png", + "backimage" : "", + "attachment" : { + "bx" : 0, + "by" : 0 + } + }, + "crown3" : { + "image" : "crown3.png", + "backimage" : "", + "attachment" : { + "bx" : 0, + "by" : 0 + } + } + }, + "branchLeaves" : { + "branch1" : { + "image" : "branch1.png", + "backimage" : "", + "attachment" : { + "bx" : 0, + "by" : 0 + } + }, + "branch2" : { + "image" : "branch2.png", + "backimage" : "", + "attachment" : { + "bx" : 0, + "by" : 0 + } + }, + "branch3" : { + "image" : "branch3.png", + "backimage" : "", + "attachment" : { + "bx" : 0, + "by" : 0 + } + }, + "branch4" : { + "image" : "branch4.png", + "backimage" : "", + "attachment" : { + "bx" : 0, + "by" : 0 + } + }, + "branch5" : { + "image" : "branch5.png", + "backimage" : "", + "attachment" : { + "bx" : 0, + "by" : 0 + } + } + } +} diff --git a/ctfarmables/aya/foliage/ctayaleaves3/saplingicon.png b/ctfarmables/aya/foliage/ctayaleaves3/saplingicon.png new file mode 100644 index 00000000..3309ab80 Binary files /dev/null and b/ctfarmables/aya/foliage/ctayaleaves3/saplingicon.png differ diff --git a/ctfarmables/aya/sapling/ctbuildsapling.lua b/ctfarmables/aya/sapling/ctbuildsapling.lua new file mode 100644 index 00000000..9b44c059 --- /dev/null +++ b/ctfarmables/aya/sapling/ctbuildsapling.lua @@ -0,0 +1,23 @@ +require "/scripts/util.lua" + +function build(directory, config, parameters, level, seed) + if not parameters.stemName then + -- a pine tree isn't PERFECTLY generic but it's close enough + parameters.stemName = "ctayastem" + parameters.foliageName = parameters.foliageName or "ctayaleaves" + end + + config.inventoryIcon = jarray() + + table.insert(config.inventoryIcon, { + image = string.format("%s?hueshift=%s", util.absolutePath(root.treeStemDirectory(parameters.stemName), "saplingicon.png"), parameters.stemHueShift or 0) + }) + + if parameters.foliageName then + table.insert(config.inventoryIcon, { + image = string.format("%s?hueshift=%s", util.absolutePath(root.treeFoliageDirectory(parameters.foliageName), "saplingicon.png"), parameters.foliageHueShift or 0) + }) + end + + return config, parameters +end diff --git a/ctfarmables/aya/sapling/ctsapling.object b/ctfarmables/aya/sapling/ctsapling.object new file mode 100644 index 00000000..5fec8625 --- /dev/null +++ b/ctfarmables/aya/sapling/ctsapling.object @@ -0,0 +1,48 @@ +{ + "objectName" : "ctsapling", + "colonyTags" : [], + "rarity" : "Common", + "category" : "sapling", + "description" : "A tree sapling. From simple roots a tree will grow.", + "shortdescription" : "Enternia Tree Sapling", + "objectType" : "farmable", + "printable" : false, + "retainObjectParametersInItem" : true, + + "apexDescription" : "I can plant this to grow a tree.", + "avianDescription" : "I can grow a tree by planting this sapling.", + "floranDescription" : "Floran plant cute sssapling, grow big bad evil tree!", + "glitchDescription" : "Wonder. Planting this sapling allows me to grow life.", + "humanDescription" : "This sapling will grow into a tree.", + "hylotlDescription" : "Such wondrous life, springing forth from the tiniest shoot. Sigh.", + "novakidDescription" : "It'll grow into a big tree if I plant it.", + + "inventoryIcon" : "saplingicon.png", + "orientations" : [ + { + "dualImage" : "sapling.png:..", + "imagePosition" : [0, 0], + + "spaceScan" : 0.1, + "requireTilledAnchors" : false, + "requireSoilAnchors" : false, + "anchors" : [ "bottom" ] + } + ], + + "stages" : [ + { + "duration" : [150, 180] + }, + { + "duration" : [150, 180] + }, + { + "tree" : true + } + ], + + "consumeSoilMoisture" : false, + + "builder" : "/ctfarmables/aya/sapling/ctbuildsapling.lua" +} diff --git a/ctfarmables/aya/sapling/sapling.frames b/ctfarmables/aya/sapling/sapling.frames new file mode 100644 index 00000000..1bf38137 --- /dev/null +++ b/ctfarmables/aya/sapling/sapling.frames @@ -0,0 +1,14 @@ +{ + + "frameGrid" : { + "size" : [16, 20], + "dimensions" : [8, 1], + "names" : [ + [ "default.0.0", "default.1.0", "default.2.0", "default.2.1", "default.2.2", "default.2.3", "default.2.4", "default.3.0" ] + ] + }, + + "aliases" : { + "default.default.default" : "default.0.0" + } +} diff --git a/ctfarmables/aya/sapling/sapling.png b/ctfarmables/aya/sapling/sapling.png new file mode 100644 index 00000000..3dc99f86 Binary files /dev/null and b/ctfarmables/aya/sapling/sapling.png differ diff --git a/ctfarmables/aya/sapling/saplingicon.png b/ctfarmables/aya/sapling/saplingicon.png new file mode 100644 index 00000000..7550aae9 Binary files /dev/null and b/ctfarmables/aya/sapling/saplingicon.png differ diff --git a/ctfarmables/aya/stem/ctayastem/ctayastem.modularstem b/ctfarmables/aya/stem/ctayastem/ctayastem.modularstem index e737b06a..64e21d72 100644 --- a/ctfarmables/aya/stem/ctayastem/ctayastem.modularstem +++ b/ctfarmables/aya/stem/ctayastem/ctayastem.modularstem @@ -1,12 +1,12 @@ { "name" : "ctayastem", "shape" : "ctforest", - "health" : 10, + "health" : 25, "middleMinSize" : 5, "middleMaxSize" : 8, "dropConfig" : { "drops" : [ - [ { "item" : "logblock", "count" : 3 } ] + [ { "item" : "ctwood", "count" : 2 } ] ], "sounds" : { "breakTree" : [ diff --git a/ctfarmables/aya/stem/ctayastem2/base1.png b/ctfarmables/aya/stem/ctayastem2/base1.png new file mode 100644 index 00000000..c9aa0262 Binary files /dev/null and b/ctfarmables/aya/stem/ctayastem2/base1.png differ diff --git a/ctfarmables/aya/stem/ctayastem2/base2.png b/ctfarmables/aya/stem/ctayastem2/base2.png new file mode 100644 index 00000000..631b0168 Binary files /dev/null and b/ctfarmables/aya/stem/ctayastem2/base2.png differ diff --git a/ctfarmables/aya/stem/ctayastem2/base3.png b/ctfarmables/aya/stem/ctayastem2/base3.png new file mode 100644 index 00000000..2add65e6 Binary files /dev/null and b/ctfarmables/aya/stem/ctayastem2/base3.png differ diff --git a/ctfarmables/aya/stem/ctayastem2/branch1.png b/ctfarmables/aya/stem/ctayastem2/branch1.png new file mode 100644 index 00000000..86841934 Binary files /dev/null and b/ctfarmables/aya/stem/ctayastem2/branch1.png differ diff --git a/ctfarmables/aya/stem/ctayastem2/branch2.png b/ctfarmables/aya/stem/ctayastem2/branch2.png new file mode 100644 index 00000000..8d7e343c Binary files /dev/null and b/ctfarmables/aya/stem/ctayastem2/branch2.png differ diff --git a/ctfarmables/aya/stem/ctayastem2/branch3.png b/ctfarmables/aya/stem/ctayastem2/branch3.png new file mode 100644 index 00000000..a2f0e748 Binary files /dev/null and b/ctfarmables/aya/stem/ctayastem2/branch3.png differ diff --git a/ctfarmables/aya/stem/ctayastem2/branch4.png b/ctfarmables/aya/stem/ctayastem2/branch4.png new file mode 100644 index 00000000..ed9fb64d Binary files /dev/null and b/ctfarmables/aya/stem/ctayastem2/branch4.png differ diff --git a/ctfarmables/aya/stem/ctayastem2/branch5.png b/ctfarmables/aya/stem/ctayastem2/branch5.png new file mode 100644 index 00000000..c062a634 Binary files /dev/null and b/ctfarmables/aya/stem/ctayastem2/branch5.png differ diff --git a/ctfarmables/aya/stem/ctayastem2/crown1.png b/ctfarmables/aya/stem/ctayastem2/crown1.png new file mode 100644 index 00000000..1550ac89 Binary files /dev/null and b/ctfarmables/aya/stem/ctayastem2/crown1.png differ diff --git a/ctfarmables/aya/stem/ctayastem2/crown2.png b/ctfarmables/aya/stem/ctayastem2/crown2.png new file mode 100644 index 00000000..cce9a506 Binary files /dev/null and b/ctfarmables/aya/stem/ctayastem2/crown2.png differ diff --git a/ctfarmables/aya/stem/ctayastem2/crown3.png b/ctfarmables/aya/stem/ctayastem2/crown3.png new file mode 100644 index 00000000..d8793d4b Binary files /dev/null and b/ctfarmables/aya/stem/ctayastem2/crown3.png differ diff --git a/ctfarmables/aya/stem/ctayastem2/ctayastem2.modularstem b/ctfarmables/aya/stem/ctayastem2/ctayastem2.modularstem new file mode 100644 index 00000000..00559d9c --- /dev/null +++ b/ctfarmables/aya/stem/ctayastem2/ctayastem2.modularstem @@ -0,0 +1,201 @@ +{ + "name" : "ctayastem2", + "shape" : "ctforest", + "health" : 25, + "middleMinSize" : 7, + "middleMaxSize" : 10, + "dropConfig" : { + "drops" : [ + [ { "item" : "ctwood", "count" : 2 } ] + ], + "sounds" : { + "breakTree" : [ + { "file" : "/sfx/environmental/tree_breaking.ogg" }, + { "file" : "/sfx/environmental/tree_breaking_alt.ogg" } + ], + "hitGround" : [ { "file" : "/sfx/environmental/tree_hitground.ogg" }, { "file" : "/sfx/environmental/tree_hitground2.ogg" } ], + "damageTree" : [ { "file" : "/sfx/tools/axe_chop_normal.ogg" }, { "file" : "/sfx/tools/axe_chop_tough.ogg" }, { "file" : "/sfx/tools/axe_chop_light.ogg" } ] + }, + "particles" : { + "breakTree" : { + "density" : 3, + "options" : [ { + "image" : "/particles/treestems/birch.png", + "timeToLive" : 10, + "initialVelocity" : [0, 0], + "finalVelocity" : [0, -30], + "approach" : [0, 5], + "variance" : { + "timeToLive" : 3.0, + "initialPosition" : [1.0, 1.0], + "initialVelocity" : [1.0, 1.0] + } + } ] + }, + "hitGround" : { + "density" : 3, + "options" : [ { + "type" : "animated", + "animation" : "/animations/dusttest/dusttest.animation", + "timeToLive" : 3, + "destructionAction" : "shrink", + "destructionTime" : 1.0, + "variance" : { + "rotation" : 180, + "timeToLive" : 1.0, + "initialPosition" : [1.0, 1.0], + "initialVelocity" : [1.0, 1.0] + } + } ] + }, + "damageTree" : { + "density" : 1, + "options" : [ { + "type" : "textured", + "image" : "/particles/treestems/something.png", + "timeToLive" : 10, + "initialVelocity" : [0, 0], + "finalVelocity" : [0, -30], + "approach" : [0, 5], + "variance" : { + "timeToLive" : 3.0, + "initialPosition" : [1.0, 1.0], + "initialVelocity" : [1.0, 1.0] + } + } ] + } + } + }, + "base" : { + "base1" : { + "image" : "base1.png", + "attachment" : { + "bx" : 0, + "by" : 0, + "x" : 5, + "y" : 20 + } + }, + "base2" : { + "image" : "base2.png", + "attachment" : { + "bx" : 0, + "by" : 0, + "x" : 5, + "y" : 20 + } + }, + "base3" : { + "image" : "base3.png", + "attachment" : { + "bx" : 0, + "by" : 0, + "x" : 5, + "y" : 20 + } + } + }, + "crown" : { + "crown1" : { + "image" : "crown1.png", + "attachment" : { + "bx" : -86, + "by" : -16 + } + }, + "crown2" : { + "image" : "crown2.png", + "attachment" : { + "bx" : -85, + "by" : -16 + } + }, + "crown3" : { + "image" : "crown3.png", + "attachment" : { + "bx" : -85, + "by" : -16 + } + } + }, + "middle" : { + "middle1" : { + "image" : "middle1.png", + "attachment" : { + "bx" : -4, + "by" : 0, + "x" : 5, + "y" : 20 + } + }, + "middle2" : { + "image" : "middle2.png", + "attachment" : { + "bx" : -4, + "by" : 0, + "x" : 5, + "y" : 20 + } + }, + "middle3" : { + "image" : "middle3.png", + "attachment" : { + "bx" : -5, + "by" : 0, + "x" : 5, + "y" : 20 + } + }, + "middle4" : { + "image" : "middle4.png", + "attachment" : { + "bx" : -6, + "by" : 0, + "x" : 5, + "y" : 20 + } + } + }, + "branch" : { + "branch1" : { + "image" : "branch1.png", + "attachment" : { + "bx" : -78, + "by" : -30, + "h" : 40 + } + }, + "branch2" : { + "image" : "branch2.png", + "attachment" : { + "bx" : -80, + "by" : -30, + "h" : 40 + } + }, + "branch3" : { + "image" : "branch3.png", + "attachment" : { + "bx" : -75, + "by" : -28, + "h" : 40 + } + }, + "branch4" : { + "image" : "branch4.png", + "attachment" : { + "bx" : -78, + "by" : -30, + "h" : 40 + } + }, + "branch5" : { + "image" : "branch5.png", + "attachment" : { + "bx" : -75, + "by" : -28, + "h" : 40 + } + } + } +} diff --git a/ctfarmables/aya/stem/ctayastem2/ctayastem3.modularstem b/ctfarmables/aya/stem/ctayastem2/ctayastem3.modularstem new file mode 100644 index 00000000..b39a24bd --- /dev/null +++ b/ctfarmables/aya/stem/ctayastem2/ctayastem3.modularstem @@ -0,0 +1,201 @@ +{ + "name" : "ctayastem3", + "shape" : "ctforest", + "health" : 15, + "middleMinSize" : 1, + "middleMaxSize" : 1, + "dropConfig" : { + "drops" : [ + [ { "item" : "ctwood", "count" : 2 } ] + ], + "sounds" : { + "breakTree" : [ + { "file" : "/sfx/environmental/tree_breaking.ogg" }, + { "file" : "/sfx/environmental/tree_breaking_alt.ogg" } + ], + "hitGround" : [ { "file" : "/sfx/environmental/tree_hitground.ogg" }, { "file" : "/sfx/environmental/tree_hitground2.ogg" } ], + "damageTree" : [ { "file" : "/sfx/tools/axe_chop_normal.ogg" }, { "file" : "/sfx/tools/axe_chop_tough.ogg" }, { "file" : "/sfx/tools/axe_chop_light.ogg" } ] + }, + "particles" : { + "breakTree" : { + "density" : 3, + "options" : [ { + "image" : "/particles/treestems/birch.png", + "timeToLive" : 10, + "initialVelocity" : [0, 0], + "finalVelocity" : [0, -30], + "approach" : [0, 5], + "variance" : { + "timeToLive" : 3.0, + "initialPosition" : [1.0, 1.0], + "initialVelocity" : [1.0, 1.0] + } + } ] + }, + "hitGround" : { + "density" : 3, + "options" : [ { + "type" : "animated", + "animation" : "/animations/dusttest/dusttest.animation", + "timeToLive" : 3, + "destructionAction" : "shrink", + "destructionTime" : 1.0, + "variance" : { + "rotation" : 180, + "timeToLive" : 1.0, + "initialPosition" : [1.0, 1.0], + "initialVelocity" : [1.0, 1.0] + } + } ] + }, + "damageTree" : { + "density" : 1, + "options" : [ { + "type" : "textured", + "image" : "/particles/treestems/something.png", + "timeToLive" : 10, + "initialVelocity" : [0, 0], + "finalVelocity" : [0, -30], + "approach" : [0, 5], + "variance" : { + "timeToLive" : 3.0, + "initialPosition" : [1.0, 1.0], + "initialVelocity" : [1.0, 1.0] + } + } ] + } + } + }, + "base" : { + "base1" : { + "image" : "base1.png", + "attachment" : { + "bx" : 0, + "by" : 0, + "x" : 5, + "y" : 20 + } + }, + "base2" : { + "image" : "base2.png", + "attachment" : { + "bx" : 0, + "by" : 0, + "x" : 5, + "y" : 20 + } + }, + "base3" : { + "image" : "base3.png", + "attachment" : { + "bx" : 0, + "by" : 0, + "x" : 5, + "y" : 20 + } + } + }, + "crown" : { + "crown1" : { + "image" : "crown1.png", + "attachment" : { + "bx" : -86, + "by" : -16 + } + }, + "crown2" : { + "image" : "crown2.png", + "attachment" : { + "bx" : -85, + "by" : -16 + } + }, + "crown3" : { + "image" : "crown3.png", + "attachment" : { + "bx" : -85, + "by" : -16 + } + } + }, + "middle" : { + "middle1" : { + "image" : "middle1.png", + "attachment" : { + "bx" : -4, + "by" : 0, + "x" : 5, + "y" : 20 + } + }, + "middle2" : { + "image" : "middle2.png", + "attachment" : { + "bx" : -4, + "by" : 0, + "x" : 5, + "y" : 20 + } + }, + "middle3" : { + "image" : "middle3.png", + "attachment" : { + "bx" : -5, + "by" : 0, + "x" : 5, + "y" : 20 + } + }, + "middle4" : { + "image" : "middle4.png", + "attachment" : { + "bx" : -6, + "by" : 0, + "x" : 5, + "y" : 20 + } + } + }, + "branch" : { + "branch1" : { + "image" : "branch1.png", + "attachment" : { + "bx" : -78, + "by" : -30, + "h" : 40 + } + }, + "branch2" : { + "image" : "branch2.png", + "attachment" : { + "bx" : -80, + "by" : -30, + "h" : 40 + } + }, + "branch3" : { + "image" : "branch3.png", + "attachment" : { + "bx" : -75, + "by" : -28, + "h" : 40 + } + }, + "branch4" : { + "image" : "branch4.png", + "attachment" : { + "bx" : -78, + "by" : -30, + "h" : 40 + } + }, + "branch5" : { + "image" : "branch5.png", + "attachment" : { + "bx" : -75, + "by" : -28, + "h" : 40 + } + } + } +} diff --git a/ctfarmables/aya/stem/ctayastem2/middle1.png b/ctfarmables/aya/stem/ctayastem2/middle1.png new file mode 100644 index 00000000..a917bfe1 Binary files /dev/null and b/ctfarmables/aya/stem/ctayastem2/middle1.png differ diff --git a/ctfarmables/aya/stem/ctayastem2/middle2.png b/ctfarmables/aya/stem/ctayastem2/middle2.png new file mode 100644 index 00000000..0fb167fa Binary files /dev/null and b/ctfarmables/aya/stem/ctayastem2/middle2.png differ diff --git a/ctfarmables/aya/stem/ctayastem2/middle3.png b/ctfarmables/aya/stem/ctayastem2/middle3.png new file mode 100644 index 00000000..54a3edcf Binary files /dev/null and b/ctfarmables/aya/stem/ctayastem2/middle3.png differ diff --git a/ctfarmables/aya/stem/ctayastem2/middle4.png b/ctfarmables/aya/stem/ctayastem2/middle4.png new file mode 100644 index 00000000..5f842910 Binary files /dev/null and b/ctfarmables/aya/stem/ctayastem2/middle4.png differ diff --git a/ctfarmables/aya/stem/ctayastem2/saplingicon.png b/ctfarmables/aya/stem/ctayastem2/saplingicon.png new file mode 100644 index 00000000..b1589e47 Binary files /dev/null and b/ctfarmables/aya/stem/ctayastem2/saplingicon.png differ diff --git a/ctfood/ctassorti.consumable b/ctfood/ctassorti.consumable index d957ce69..9b3de742 100644 --- a/ctfood/ctassorti.consumable +++ b/ctfood/ctassorti.consumable @@ -20,7 +20,7 @@ "tooltipKind" : "food", "builder" : "/items/buildscripts/buildfood.lua", "maxStack" : 1, - "itemAgingScripts" : ["/scripts/items/rotting.lua"], + "itemAgingScripts" : ["/ctfood/ctrotting.lua"], "rottingMultiplier" : 3.0, "blockingEffects" : [ "wellfed" diff --git a/ctfood/ctaya.consumable b/ctfood/ctaya.consumable index 27c42996..25454c22 100644 --- a/ctfood/ctaya.consumable +++ b/ctfood/ctaya.consumable @@ -11,7 +11,7 @@ "tooltipKind" : "food", "builder" : "/items/buildscripts/buildfood.lua", "maxStack" : 1, - "itemAgingScripts" : ["/scripts/items/rotting.lua"], + "itemAgingScripts" : ["/ctfood/ctrotting.lua"], "rottingMultiplier" : 3.0, "blockingEffects" : [ "wellfed" diff --git a/ctfood/ctgil.consumable b/ctfood/ctgil.consumable index 6a78a5de..b748eaad 100644 --- a/ctfood/ctgil.consumable +++ b/ctfood/ctgil.consumable @@ -11,7 +11,7 @@ "tooltipKind" : "food", "builder" : "/items/buildscripts/buildfood.lua", "maxStack" : 1, - "itemAgingScripts" : ["/scripts/items/rotting.lua"], + "itemAgingScripts" : ["/ctfood/ctrotting.lua"], "rottingMultiplier" : 3.0, "blockingEffects" : [ "wellfed" diff --git a/ctfood/ctrotting.config b/ctfood/ctrotting.config new file mode 100644 index 00000000..3ea3aeac --- /dev/null +++ b/ctfood/ctrotting.config @@ -0,0 +1,12 @@ +{ + "baseTimeToRot" : 10800, + "rottedItem" : "ctwoodsap", + + "rotTimeDescriptions" : [ + [300, "^red;Almost fully fermented^reset;"], + [1800, "^orange;Starting to ferment^reset;"], + [3600, "^yellow;Will probably start fermenting soon^reset;"], + [10800, "^green;Should stay fresh for awhile^reset;"], + [999999, "^green;Extremely well preserved^reset;"] + ] +} diff --git a/ctfood/ctrotting.lua b/ctfood/ctrotting.lua new file mode 100644 index 00000000..beff55ea --- /dev/null +++ b/ctfood/ctrotting.lua @@ -0,0 +1,27 @@ +function ageItem(baseItem, aging) + if baseItem.parameters.timeToRot then + baseItem.parameters.timeToRot = baseItem.parameters.timeToRot - aging + + baseItem.parameters.tooltipFields = baseItem.parameters.tooltipFields or {} + baseItem.parameters.tooltipFields.rotTimeLabel = getRotTimeDescription(baseItem.parameters.timeToRot) + + if baseItem.parameters.timeToRot <= 0 then + local itemConfig = root.itemConfig(baseItem.name) + return { + name = itemConfig.config.rottedItem or root.assetJson("/ctfood/ctrotting.config:rottedItem"), + count = baseItem.count, + parameters = {} + } + end + end + + return baseItem +end + +function getRotTimeDescription(rotTime) + local descList = root.assetJson("/ctfood/ctrotting.config:rotTimeDescriptions") + for i, desc in ipairs(descList) do + if rotTime <= desc[1] then return desc[2] end + end + return descList[#descList] +end diff --git a/ctfood/cttsay.consumable b/ctfood/cttsay.consumable index e9516fc2..aed3a10f 100644 --- a/ctfood/cttsay.consumable +++ b/ctfood/cttsay.consumable @@ -11,7 +11,7 @@ "tooltipKind" : "food", "builder" : "/items/buildscripts/buildfood.lua", "maxStack" : 1, - "itemAgingScripts" : ["/scripts/items/rotting.lua"], + "itemAgingScripts" : ["/ctfood/ctrotting.lua"], "rottingMultiplier" : 3.0, "blockingEffects" : [ "wellfed" diff --git a/ctfood/ctwood.item b/ctfood/ctwood.item new file mode 100644 index 00000000..872fa847 --- /dev/null +++ b/ctfood/ctwood.item @@ -0,0 +1,16 @@ +{ + "itemName" : "ctwood", + "price" : 3, + "rarity" : "Common", + "category" : "craftingMaterial", + "inventoryIcon" : "ctwood.png", + "description" : "A piece of wood from the aya tree. Can be converted into regular wood or used to craft a food ingredient.", + "shortdescription" : "Aya Wood", + "glitchdescription" : "Confused. Don't really see a way this can be edible.", + "florandescription" : "Tassty tree givess tassty friutss and tasssty wood... Floran iss hungry!", + "novakiddescription" : "I heard one can eat them planks.", + "itemTags" : [ "reagent" ], + "learnBlueprintsOnPickup" : [ + "ctwoodsap", "logblock", "moondust" + ] +} diff --git a/ctfood/ctwood.png b/ctfood/ctwood.png new file mode 100644 index 00000000..64a3b7f6 Binary files /dev/null and b/ctfood/ctwood.png differ diff --git a/ctfood/ctwoodsap.item b/ctfood/ctwoodsap.item new file mode 100644 index 00000000..4022055c --- /dev/null +++ b/ctfood/ctwoodsap.item @@ -0,0 +1,13 @@ +{ + "itemName" : "ctwoodsap", + "price" : 0, + "rarity" : "Common", + "category" : "craftingMaterial", + "inventoryIcon" : "ctwoodsap.png", + "description" : "This ferment acts as aya wood sap and is what some fruits turn into when expire. Very sticky.", + "shortdescription" : "Enternia Ferment", + "itemTags" : [ "reagent" ], + "learnBlueprintsOnPickup" : [ + "ctwoodsap" + ] +} diff --git a/ctfood/ctwoodsap.png b/ctfood/ctwoodsap.png new file mode 100644 index 00000000..a4e1b312 Binary files /dev/null and b/ctfood/ctwoodsap.png differ diff --git a/ctitems/cteye.item b/ctitems/cteye.item index 7a2b09cc..7f447cb6 100644 --- a/ctitems/cteye.item +++ b/ctitems/cteye.item @@ -5,7 +5,7 @@ "category" : "craftingMaterial", "inventoryIcon" : "cteye.png", "description" : "A material named after a terrible pun? Neat.", - "shortdescription" : "^blue;Ceter-Eye^reset;", - "learnBlueprintsOnPickup" : ["cthead", "cthead2", "ctbody", "ctlegs", "ctgun1", "ctgun2", "ctsword"], + "shortdescription" : "^blue;Cetereye^reset;", + "learnBlueprintsOnPickup" : ["cthead", "cthead2", "ctbody", "ctlegs", "ctgun1", "ctgun2", "ctsword", "ctepp"], "itemTags" : [ "reagent" ] } diff --git a/ctitems/ctgun1.activeitem b/ctitems/ctgun1.activeitem index f0bbffa3..25875a60 100644 --- a/ctitems/ctgun1.activeitem +++ b/ctitems/ctgun1.activeitem @@ -39,8 +39,8 @@ "class" : "GunFire", "fireTime" : 0.06, - "baseDps" : 12.0, - "energyUsage" : 12, + "baseDps" : 10.0, + "energyUsage" : 15, "inaccuracy" : 0.06, "projectileCount" : 1, @@ -89,8 +89,8 @@ }, "muzzleOffset" : [0.7, 0.0], "primaryAbility" : { - "baseDps" : 16.0, - "energyUsage" : 14, + "baseDps" : 12.0, + "energyUsage" : 20, "projectileCount" : 2 }, "shortdescription" : "^blue;Double Point SMG^reset; ^yellow;^reset;" diff --git a/ctitems/ctgun2.activeitem b/ctitems/ctgun2.activeitem index 79e3bc28..065db41e 100644 --- a/ctitems/ctgun2.activeitem +++ b/ctitems/ctgun2.activeitem @@ -38,9 +38,9 @@ "scripts" : ["/items/active/weapons/ranged/gunfire.lua"], "class" : "GunFire", - "fireTime" : 0.06, - "baseDps" : 12.0, - "energyUsage" : 22, + "fireTime" : 0.08, + "baseDps" : 10.0, + "energyUsage" : 28, "inaccuracy" : 0.06, "projectileCount" : 1, @@ -70,7 +70,7 @@ "allowFlip" : true }, "cooldown" : { - "duration" : 0.06, + "duration" : 0.08, "armRotation" : 3, "weaponRotation" : 3, "twoHanded" : false, @@ -90,8 +90,8 @@ }, "muzzleOffset" : [0.7, 0.0], "primaryAbility" : { - "baseDps" : 16.0, - "energyUsage" : 24, + "baseDps" : 12.0, + "energyUsage" : 32, "projectileCount" : 2 }, "shortdescription" : "^blue;Double Point Hyperblaster^reset; ^yellow;^reset;" diff --git a/ctitems/ctlaserdiode.item b/ctitems/ctlaserdiode.item new file mode 100644 index 00000000..32d3ed9f --- /dev/null +++ b/ctitems/ctlaserdiode.item @@ -0,0 +1,10 @@ +{ + "itemName" : "ctlaserdiode", + "price" : 100, + "rarity" : "Uncommon", + "category" : "craftingMaterial", + "inventoryIcon" : "ctlaserdiode.png", + "description" : "Is dropped by defensife drones deep in ^#0087ff;Enternia^white; undergrounds.", + "shortdescription" : "Rare Laser Diode", + "itemTags" : [ "reagent" ] +} diff --git a/ctitems/ctlaserdiode.png b/ctitems/ctlaserdiode.png new file mode 100644 index 00000000..3554cb25 Binary files /dev/null and b/ctitems/ctlaserdiode.png differ diff --git a/ctitems/ctsphere2.item b/ctitems/ctsphere2.item new file mode 100644 index 00000000..9ef8d575 --- /dev/null +++ b/ctitems/ctsphere2.item @@ -0,0 +1,10 @@ +{ + "itemName" : "ctsphere2", + "price" : 1800, + "rarity" : "Legendary", + "category" : "craftingMaterial", + "inventoryIcon" : "ctsphere2.png", + "description" : "The sphere of Enternia essence.", + "shortdescription" : "^blue;Enter-Sphere^reset;", + "itemTags" : [ "reagent" ] +} diff --git a/ctitems/ctsphere2.png b/ctitems/ctsphere2.png new file mode 100644 index 00000000..cc436f82 Binary files /dev/null and b/ctitems/ctsphere2.png differ diff --git a/ctitems/ctsword.activeitem b/ctitems/ctsword.activeitem index 94c1ec87..42a6592b 100644 --- a/ctitems/ctsword.activeitem +++ b/ctitems/ctsword.activeitem @@ -6,7 +6,7 @@ "rarity":"Rare", "category":"broadsword", "description":"It's interesting what a ceter-eye can do to a sword.", - "shortdescription":"Plasmasword of Enternia", + "shortdescription":"^blue;Plasmasword of Enternia^reset;", "tooltipKind":"sword", "twoHanded":true, "itemTags":[ @@ -35,7 +35,7 @@ "primaryAbilityType":"broadswordcombo", "primaryAbility":{ "fireTime":1.1, - "baseDps":11, + "baseDps":18, "stepDamageConfig":[ { "baseDamageFactor":1.0, @@ -60,8 +60,8 @@ "blade":"ctswordup.png" }, "primaryAbility":{ - "baseDps":12.0, - "fireTime":1.0 + "baseDps":19.0, + "fireTime":0.9 }, "shortdescription":"^blue;Ceterai's Plasmasword^reset; ^yellow;^reset;" } diff --git a/ctmark2/ctmark2.head b/ctmark2/ctmark2.head index 0ce5503f..91ac35b7 100644 --- a/ctmark2/ctmark2.head +++ b/ctmark2/ctmark2.head @@ -5,7 +5,7 @@ "maxStack" : 1, "rarity" : "Legendary", "category" : "headarmour", - "description" : "A misterious device, that you can put on your head. What is its purpose?", + "description" : "\nA misterious device, that you can put on your head. What is its purpose?", "shortdescription" : "^blue;C.T. Mindframe^reset;", "tooltipKind" : "armor", diff --git a/ctmonsters/ctdrone/body/ctdronebody.monsterpart b/ctmonsters/ctdrone/body/ctdronebody.monsterpart new file mode 100644 index 00000000..23897560 --- /dev/null +++ b/ctmonsters/ctdrone/body/ctdronebody.monsterpart @@ -0,0 +1,9 @@ +{ + "name" : "ctdronebody", + "category" : "ctdrone_parts", + "type" : "body", + + "frames" : { + "body" : "ctdronebody.png" + } +} diff --git a/ctmonsters/ctdrone/body/ctdronebody.png b/ctmonsters/ctdrone/body/ctdronebody.png new file mode 100644 index 00000000..d2e8d680 Binary files /dev/null and b/ctmonsters/ctdrone/body/ctdronebody.png differ diff --git a/ctmonsters/ctdrone/ctdrone.animation b/ctmonsters/ctdrone/ctdrone.animation new file mode 100644 index 00000000..e5415975 --- /dev/null +++ b/ctmonsters/ctdrone/ctdrone.animation @@ -0,0 +1,157 @@ +{ + "animatedParts" : { + "stateTypes" : { + "body" : { + "priority" : 0, + "default" : "idle", + + "states" : { + "idle" : { + "frames" : 1 + }, + "fly" : { + "frames" : 4, + "cycle" : 0.4, + "mode" : "loop" + }, + "charge" : { + "frames" : 4, + "cycle" : 0.25, + "mode" : "loop" + }, + "fire" : { + "frames" : 4, + "cycle" : 0.4, + "mode" : "loop" + } + } + }, + "damage" : { + "priority" : 3, + "default" : "none", + "states" : { + "none" : { + "frames" : 1 + }, + "stunned" : { + "frames" : 1 + } + } + }, + "releaseParticles" : { + "default" : "off", + "states" : { + "off" : { + "frames" : 1, + "properties" : { + "particleEmittersOff" : [ "releaseParticles" ] + } + }, + "on" : { + "frames" : 1, + "cycle" : 0.1, + "mode" : "transition", + "transition" : "off", + "properties" : { + "particleEmittersOn" : [ "releaseParticles" ] + } + } + } + } + }, + + "parts" : { + + "body" : { + "properties" : { + "zLevel" : 1, + "centered" : true + }, + + "partStates" : { + "body" : { + "idle" : { + "properties" : { + "image" : ":idle." + } + }, + "fly" : { + "properties" : { + "image" : ":fly." + } + }, + "charge" : { + "properties" : { + "image" : ":fly." + } + }, + "fire" : { + "properties" : { + "image" : ":fly." + } + } + } + } + } + + } + }, + + "particleEmitters" : { + "deathPoof" : { + "particles" : [ + { "particle" : "electricswoosh1" }, + { "particle" : "electricswoosh2" }, + { "particle" : "electricswoosh1" }, + { "particle" : "electricswoosh2" }, + + { "particle" : "deathfizz1left" }, + { "particle" : "deathfizz1right" }, + { "particle" : "deathfizz2left" }, + { "particle" : "deathfizz2right" }, + { "particle" : "deathfizz3left" }, + { "particle" : "deathfizz3right" }, + { "particle" : "deathfizz4left" }, + { "particle" : "deathfizz4right" } + ] + }, + "captureParticles" : { + "particles" : [ + { "particle" : "monstercapture" } + ] + }, + "releaseParticles" : { + "particles" : [ + { "particle" : "monsterrelease" } + ] + }, + "teleportOut" : { + "particles" : [ + { "particle" : "monstercapture" } + ] + }, + "teleportIn" : { + "particles" : [ + { "particle" : "monsterrelease" } + ] + }, + "levelUp" : { + "particles" : [ + { "particle" : "monsterlevelup" } + ] + } + }, + + "sounds" : { + "aggroHop" : [ ], + "deathPuff" : [ "/sfx/npc/enemydeathpuff.ogg" ] + }, + + "effects" : { + "blink" : { + "type" : "flash", + "time" : 0.25, + "directives" : "fade=ffffff;0.5" + } + } +} diff --git a/ctmonsters/ctdrone/ctdrone.monstertype b/ctmonsters/ctdrone/ctdrone.monstertype new file mode 100644 index 00000000..09f106db --- /dev/null +++ b/ctmonsters/ctdrone/ctdrone.monstertype @@ -0,0 +1,202 @@ +{ + "type" : "ctdrone", + "shortdescription" : "Scout Drone", + "description" : "Observer drone operated by the Enternia Defensive System.", + + "categories" : [ "ctdrone_parts" ], + "parts" : [ "body" ], + "partParameters" : "ctdrone.partparams", + + "animation" : "ctdrone.animation", + "reversed" : true, + + "dropPools" : [ ], + + "baseParameters" : { + "scripts" : [ + "/monsters/monster.lua" + ], + + "behavior" : "monster", + + "behaviorConfig" : { + "damageOnTouch" : true, + + "targetQueryRange" : 20, + "targetOnDamage" : true, + "keepTargetInSight" : true, + "keepTargetInRange" : 50, + "targetOutOfSightTime" : 5.0, + + // Attack specific parameters + "swoopVelocity" : 30, + + "foundTargetActions" : [ ], + + "fleeActions" : [ ], + + "hostileActions" : [ ], + + "periodicActions" : [ ], + + "approachActions" : [ + { + "name" : "approach-fly" + } + ], + + "followActions" : [ + { + "name" : "approach-teleport", + "parameters" : { + } + }, + { + "name" : "approach-fly" + } + ], + + "wanderActions" : [ + { + "name" : "wander-fly", + "cooldown" : [5,20], + "parameters" : { + "wanderTime" : [10,40], + "groundDistance" : 20, + "ceilingDistance" : 10, + "xVelocity" : 8, + "yVelocity" : 12 + } + }, + { + "name" : "land-fly", + "parameters" : { + "flySpeed" : 8, + "flyControlForce" : 25, + "landCheckDistance" : 40, + "idleTime" : 40 + } + } + ], + + "concurrentActions" : [ ], + + "concurrentHostileActions" : [ ] + }, + + "baseSkills" : [ "flyingSwoopAttack" ], + + "metaBoundBox" : [-2.5, -2.5, 2.5, 2.5], + "scale" : 1.0, + + "movementSettings" : { + "gravityEnabled" : false, + "collisionPoly" : [ [-1.0, -1.0], [1.0, -1.0], [1.0, 1.0], [-1.0, 1.0] ], + + "mass" : 1.0, + "flySpeed" : 16, + "airFriction" : 0.25, + "airForce" : 25.0 + }, + + "bodyMaterialKind" : "robotic", + + "knockoutTime" : 0.1, + "knockoutEffect" : "blink", + "knockoutAnimationStates" : { + "damage" : "stunned" + }, + "deathParticles" : "deathPoof", + + "touchDamage" : { + "poly" : [ [-1.0, -1.0], [1.0, -1.0], [1.0, 1.0], [-1.0, 1.0] ], + "damage" : 12, + + "teamType" : "enemy", + "damageSourceKind" : "lash", + "knockback" : 10, + "statusEffects" : [ ] + }, + + "statusSettings" : { + "statusProperties" : { + "targetMaterialKind" : "robotic" + }, + + "appliesEnvironmentStatusEffects" : false, + "appliesWeatherStatusEffects" : true, + "minimumLiquidStatusEffectPercentage" : 0.1, + + "primaryScriptSources" : [ + "/stats/monster_primary.lua" + ], + "primaryScriptDelta" : 5, + + "stats" : { + "knockbackStunTime" : { + "baseValue" : 0.25 + }, + "knockbackThreshold" : { + "baseValue" : 9 + }, + "maxHealth" : { + "baseValue" : 48 + }, + "protection" : { + "baseValue" : 10.0 + }, + "healthRegen" : { + "baseValue" : 0.0 + }, + "powerMultiplier" : { + "baseValue" : 1.0 + }, + "physicalResistance" : { + "baseValue" : 0.25 + }, + "fireResistance" : { + "baseValue" : 0.0 + }, + "fireStatusImmunity" : { + "baseValue" : 0.0 + }, + "iceResistance" : { + "baseValue" : 0.3 + }, + "iceStatusImmunity" : { + "baseValue" : 0.0 + }, + "electricResistance" : { + "baseValue" : -0.5 + }, + "electricStatusImmunity" : { + "baseValue" : 0.0 + }, + "poisonResistance" : { + "baseValue" : 0.5 + }, + "poisonStatusImmunity" : { + "baseValue" : 1.0 + } + }, + + "resources" : { + "stunned" : { + "deltaValue" : -1.0, + "initialValue" : 0.0 + }, + "health" : { + "maxStat" : "maxHealth", + "deltaStat" : "healthRegen", + "defaultPercentage" : 100 + } + } + }, + + "mouthOffset" : [0, 0], + "feetOffset" : [0, -8], + "capturable" : true, + "captureHealthFraction" : 0.5, + "nametagColor" : [64, 200, 255] + } +} diff --git a/ctmonsters/ctdrone/ctdrone.partparams b/ctmonsters/ctdrone/ctdrone.partparams new file mode 100644 index 00000000..3fd511d5 --- /dev/null +++ b/ctmonsters/ctdrone/ctdrone.partparams @@ -0,0 +1,10 @@ +{ + "partParameterDescription" : { + "baseSkills" : [ "merge", [ ] ], + "specialSkills" : [ "merge", [ ] ], + + "projectileOffset" : [ "override", [0.0, 0.0] ] + }, + + "partParameters" : { } +} \ No newline at end of file diff --git a/ctmonsters/ctdrone/default.frames b/ctmonsters/ctdrone/default.frames new file mode 100644 index 00000000..66bda751 --- /dev/null +++ b/ctmonsters/ctdrone/default.frames @@ -0,0 +1,16 @@ +{ + "frameGrid" : { + "size" : [32, 32], + "dimensions" : [5, 4], + + "names" : [ + [ null, "idle.1", null, "blink.1" ], + [ null, "fly.1", "fly.2", "fly.3", "fly.4" ], + [ null, "fire.1", "fire.2", "fire.3", "fire.4" ], + [ null, "flying_attack.1", "flying_attack.2", "flying_attack.3", "flying_attack.4" ] + ] + }, + "aliases" : { + "hurt.1" : "fire.2" + } +} diff --git a/ctmonsters/ctdrone2/body/ctdrone2body.monsterpart b/ctmonsters/ctdrone2/body/ctdrone2body.monsterpart new file mode 100644 index 00000000..892cad27 --- /dev/null +++ b/ctmonsters/ctdrone2/body/ctdrone2body.monsterpart @@ -0,0 +1,9 @@ +{ + "name" : "ctdrone2body", + "category" : "ctdrone2_parts", + "type" : "body", + + "frames" : { + "body" : "ctdrone2body.png" + } +} diff --git a/ctmonsters/ctdrone2/body/ctdrone2body.png b/ctmonsters/ctdrone2/body/ctdrone2body.png new file mode 100644 index 00000000..36677503 Binary files /dev/null and b/ctmonsters/ctdrone2/body/ctdrone2body.png differ diff --git a/ctmonsters/ctdrone2/ctdrone2.animation b/ctmonsters/ctdrone2/ctdrone2.animation new file mode 100644 index 00000000..631ea4a9 --- /dev/null +++ b/ctmonsters/ctdrone2/ctdrone2.animation @@ -0,0 +1,158 @@ +{ + "animatedParts" : { + "stateTypes" : { + "body" : { + "priority" : 0, + "default" : "idle", + + "states" : { + "idle" : { + "frames" : 1 + }, + "fly" : { + "frames" : 4, + "cycle" : 0.4, + "mode" : "loop" + }, + "charge" : { + "frames" : 4, + "cycle" : 0.25, + "mode" : "loop" + }, + "fire" : { + "frames" : 4, + "cycle" : 0.4, + "mode" : "loop" + } + } + }, + "damage" : { + "priority" : 3, + "default" : "none", + "states" : { + "none" : { + "frames" : 1 + }, + "stunned" : { + "frames" : 1 + } + } + }, + "releaseParticles" : { + "default" : "off", + "states" : { + "off" : { + "frames" : 1, + "properties" : { + "particleEmittersOff" : [ "releaseParticles" ] + } + }, + "on" : { + "frames" : 1, + "cycle" : 0.1, + "mode" : "transition", + "transition" : "off", + "properties" : { + "particleEmittersOn" : [ "releaseParticles" ] + } + } + } + } + }, + + "parts" : { + + "body" : { + "properties" : { + "zLevel" : 1, + "centered" : true + }, + + "partStates" : { + "body" : { + "idle" : { + "properties" : { + "image" : ":idle." + } + }, + "fly" : { + "properties" : { + "image" : ":fly." + } + }, + "charge" : { + "properties" : { + "image" : ":fly." + } + }, + "fire" : { + "properties" : { + "image" : ":fly." + } + } + } + } + } + + } + }, + + "particleEmitters" : { + "deathPoof" : { + "particles" : [ + { "particle" : "electricswoosh1" }, + { "particle" : "electricswoosh2" }, + { "particle" : "electricswoosh1" }, + { "particle" : "electricswoosh2" }, + + { "particle" : "deathfizz1left" }, + { "particle" : "deathfizz1right" }, + { "particle" : "deathfizz2left" }, + { "particle" : "deathfizz2right" }, + { "particle" : "deathfizz3left" }, + { "particle" : "deathfizz3right" }, + { "particle" : "deathfizz4left" }, + { "particle" : "deathfizz4right" } + ] + }, + "captureParticles" : { + "particles" : [ + { "particle" : "monstercapture" } + ] + }, + "releaseParticles" : { + "particles" : [ + { "particle" : "monsterrelease" } + ] + }, + "teleportOut" : { + "particles" : [ + { "particle" : "monstercapture" } + ] + }, + "teleportIn" : { + "particles" : [ + { "particle" : "monsterrelease" } + ] + }, + "levelUp" : { + "particles" : [ + { "particle" : "monsterlevelup" } + ] + } + }, + + "sounds" : { + "aggroHop" : [ ], + "deathPuff" : [ "/sfx/npc/enemydeathpuff.ogg" ], + "fire" : [ "/sfx/gun/plasma_ar1.ogg" ] + }, + + "effects" : { + "blink" : { + "type" : "flash", + "time" : 0.25, + "directives" : "fade=ffffff;0.5" + } + } +} diff --git a/ctmonsters/ctdrone2/ctdrone2.lua b/ctmonsters/ctdrone2/ctdrone2.lua new file mode 100644 index 00000000..e4746a31 --- /dev/null +++ b/ctmonsters/ctdrone2/ctdrone2.lua @@ -0,0 +1,284 @@ +require "/scripts/behavior.lua" +require "/scripts/pathing.lua" +require "/scripts/util.lua" +require "/scripts/vec2.lua" +require "/scripts/poly.lua" +require "/scripts/drops.lua" +require "/scripts/status.lua" +require "/scripts/companions/capturable.lua" +require "/scripts/tenant.lua" +require "/scripts/actions/movement.lua" +require "/scripts/actions/animator.lua" + +-- Engine callback - called on initialization of entity +function init() + self.pathing = {} + + self.shouldDie = true + self.notifications = {} + storage.spawnTime = world.time() + if storage.spawnPosition == nil or config.getParameter("wasRelocated", false) then + local position = mcontroller.position() + local groundSpawnPosition + if mcontroller.baseParameters().gravityEnabled then + groundSpawnPosition = findGroundPosition(position, -20, 3) + end + storage.spawnPosition = groundSpawnPosition or position + end + + self.behavior = behavior.behavior(config.getParameter("behavior"), sb.jsonMerge(config.getParameter("behaviorConfig", {}), skillBehaviorConfig()), _ENV) + self.board = self.behavior:blackboard() + self.board:setPosition("spawn", storage.spawnPosition) + + self.collisionPoly = mcontroller.collisionPoly() + + if animator.hasSound("deathPuff") then + monster.setDeathSound("deathPuff") + end + if config.getParameter("deathParticles") then + monster.setDeathParticleBurst(config.getParameter("deathParticles")) + end + + script.setUpdateDelta(config.getParameter("initialScriptDelta", 5)) + mcontroller.setAutoClearControls(false) + self.behaviorTickRate = config.getParameter("behaviorUpdateDelta", 2) + self.behaviorTick = math.random(1, self.behaviorTickRate) + + animator.setGlobalTag("flipX", "") + self.board:setNumber("facingDirection", mcontroller.facingDirection()) + + capturable.init() + + -- Listen to damage taken + self.damageTaken = damageListener("damageTaken", function(notifications) + for _,notification in pairs(notifications) do + if notification.healthLost > 0 then + self.damaged = true + self.board:setEntity("damageSource", notification.sourceEntityId) + end + end + end) + + self.debug = true + + message.setHandler("notify", function(_,_,notification) + return notify(notification) + end) + message.setHandler("despawn", function() + monster.setDropPool(nil) + monster.setDeathParticleBurst(nil) + monster.setDeathSound(nil) + self.deathBehavior = nil + self.shouldDie = true + status.addEphemeralEffect("monsterdespawn") + end) + + local deathBehavior = config.getParameter("deathBehavior") + if deathBehavior then + self.deathBehavior = behavior.behavior(deathBehavior, config.getParameter("behaviorConfig", {}), _ENV, self.behavior:blackboard()) + end + + self.forceRegions = ControlMap:new(config.getParameter("forceRegions", {})) + self.damageSources = ControlMap:new(config.getParameter("damageSources", {})) + self.touchDamageEnabled = false + + if config.getParameter("elite", true) then + status.setPersistentEffects("elite", {"elitemonster"}) + end + status.setPersistentEffects("ctmind", {"ctmind"}) + + if config.getParameter("damageBar") then + monster.setDamageBar(config.getParameter("damageBar")); + end + + monster.setInteractive(config.getParameter("interactive", false)) + + monster.setAnimationParameter("chains", config.getParameter("chains")) +end + +function update(dt) + capturable.update(dt) + self.damageTaken:update() + + if status.resourcePositive("stunned") then + animator.setAnimationState("damage", "stunned") + animator.setGlobalTag("hurt", "hurt") + self.stunned = true + mcontroller.clearControls() + if self.damaged then + self.suppressDamageTimer = config.getParameter("stunDamageSuppression", 0.5) + monster.setDamageOnTouch(false) + end + return + else + animator.setGlobalTag("hurt", "") + animator.setAnimationState("damage", "none") + end + + -- Suppressing touch damage + if self.suppressDamageTimer then + monster.setDamageOnTouch(false) + self.suppressDamageTimer = math.max(self.suppressDamageTimer - dt, 0) + if self.suppressDamageTimer == 0 then + self.suppressDamageTimer = nil + end + elseif status.statPositive("invulnerable") then + monster.setDamageOnTouch(false) + else + monster.setDamageOnTouch(self.touchDamageEnabled) + end + + if self.behaviorTick >= self.behaviorTickRate then + self.behaviorTick = self.behaviorTick - self.behaviorTickRate + mcontroller.clearControls() + + self.tradingEnabled = false + self.setFacingDirection = false + self.moving = false + self.rotated = false + self.forceRegions:clear() + self.damageSources:clear() + self.damageParts = {} + clearAnimation() + + if self.behavior then + local board = self.behavior:blackboard() + board:setEntity("self", entity.id()) + board:setPosition("self", mcontroller.position()) + board:setNumber("dt", dt * self.behaviorTickRate) + board:setNumber("facingDirection", self.facingDirection or mcontroller.facingDirection()) + + self.behavior:run(dt * self.behaviorTickRate) + end + BGroup:updateGroups() + + updateAnimation() + + if not self.rotated and self.rotation then + mcontroller.setRotation(0) + animator.resetTransformationGroup(self.rotationGroup) + self.rotation = nil + self.rotationGroup = nil + end + + self.interacted = false + self.damaged = false + self.stunned = false + self.notifications = {} + + setDamageSources() + setPhysicsForces() + monster.setDamageParts(self.damageParts) + overrideCollisionPoly() + end + self.behaviorTick = self.behaviorTick + 1 + + if config.getParameter("facingMode", "control") == "transformation" then + mcontroller.controlFace(1) + end +end + +function skillBehaviorConfig() + local skills = config.getParameter("skills", {}) + local skillConfig = {} + + for _,skillName in pairs(skills) do + local skillHostileActions = root.monsterSkillParameter(skillName, "hostileActions") + if skillHostileActions then + construct(skillConfig, "hostileActions") + util.appendLists(skillConfig.hostileActions, skillHostileActions) + end + end + + return skillConfig +end + +function interact(args) + self.interacted = true + self.board:setEntity("interactionSource", args.sourceId) +end + +function shouldDie() + return (self.shouldDie and status.resource("health") <= 0) or capturable.justCaptured +end + +function die() + if not capturable.justCaptured then + if self.deathBehavior then + self.deathBehavior:run(script.updateDt()) + end + capturable.die() + end + spawnDrops() +end + +function uninit() + BGroup:uninit() +end + +function setDamageSources() + local partSources = {} + for part,ds in pairs(config.getParameter("damageParts", {})) do + local damageArea = animator.partPoly(part, "damageArea") + if damageArea then + ds.poly = damageArea + table.insert(partSources, ds) + end + end + + local damageSources = util.mergeLists(partSources, self.damageSources:values()) + damageSources = util.map(damageSources, function(ds) + ds.damage = ds.damage * root.evalFunction("monsterLevelPowerMultiplier", monster.level()) * status.stat("powerMultiplier") + if ds.knockback and type(ds.knockback) == "table" then + ds.knockback[1] = ds.knockback[1] * mcontroller.facingDirection() + end + + local team = entity.damageTeam() + ds.team = { type = ds.damageTeamType or team.type, team = ds.damageTeam or team.team } + + return ds + end) + monster.setDamageSources(damageSources) +end + +function setPhysicsForces() + local regions = util.map(self.forceRegions:values(), function(region) + if region.type == "RadialForceRegion" then + region.center = vec2.add(mcontroller.position(), region.center) + elseif region.type == "DirectionalForceRegion" then + if region.rectRegion then + region.rectRegion = rect.translate(region.rectRegion, mcontroller.position()) + util.debugRect(region.rectRegion, "blue") + elseif region.polyRegion then + region.polyRegion = poly.translate(region.polyRegion, mcontroller.position()) + end + end + + return region + end) + + monster.setPhysicsForces(regions) +end + +function overrideCollisionPoly() + local collisionParts = config.getParameter("collisionParts", {}) + + for _,part in pairs(collisionParts) do + local collisionPoly = animator.partPoly(part, "collisionPoly") + if collisionPoly then + -- Animator flips the polygon by default + -- to have it unflipped we need to flip it again + if not config.getParameter("flipPartPoly", true) and mcontroller.facingDirection() < 0 then + collisionPoly = poly.flip(collisionPoly) + end + mcontroller.controlParameters({collisionPoly = collisionPoly, standingPoly = collisionPoly, crouchingPoly = collisionPoly}) + break + end + end +end + +function setupTenant(...) + require("/scripts/tenant.lua") + tenant.setHome(...) +end + diff --git a/ctmonsters/ctdrone2/ctdrone2.monstertype b/ctmonsters/ctdrone2/ctdrone2.monstertype new file mode 100644 index 00000000..cd8d4bd4 --- /dev/null +++ b/ctmonsters/ctdrone2/ctdrone2.monstertype @@ -0,0 +1,224 @@ +{ + "type" : "ctdrone2", + "shortdescription" : "Battle Drone", + "description" : "Electrified durasteel drone operated by the Enternia Defensive System. Has ranged attacks.", + + "categories" : [ "ctdrone2_parts" ], + "parts" : [ "body" ], + "partParameters" : "ctdrone2.partparams", + + "animation" : "ctdrone2.animation", + "reversed" : true, + + "dropPools" : [ { "default" : "smallRobotTreasure", "bow" : "scandroidHunting" } ], + + "baseParameters" : { + "monsterClass" : "rare", + "scripts" : [ + "/ctmonsters/ctdrone2/ctdrone2.lua" + ], + + "behavior" : "monster", + "seeThroughLiquid" : false, + "behaviorConfig" : { + "damageOnTouch" : true, + + "targetQueryRange" : 20, + "targetOnDamage" : true, + "keepTargetInSight" : true, + "keepTargetInRange" : 50, + "targetOutOfSightTime" : 5.0, + + "foundTargetActions" : [ ], + + "fleeActions" : [ ], + + "hostileActions" : [ + { + "name" : "action-fire", + "cooldown" : 0.0, + "parameters" : { + "requireLineOfSight" : true, + "maximumRange" : 15, + "minimumRange" : 3, + "windupStopForce" : 50, + "windupState" : "fire", + "windupTime" : 0.3, + + "projectileType" : "firelasershot", + "projectileParameters" : { + "speed" : 35 + }, + "fireOffset" : [0.5, 0.0], + "aimAtTarget" : true, + "onGround" : false, + "fireState" : "", + "fireSound" : "fire", + + "winddownState" : "fly", + "winddownTime" : 1.0 + } + } + ], + + "periodicActions" : [ ], + + "approachActions" : [ + { + "name" : "approach-fly" + } + ], + + "followActions" : [ + { + "name" : "approach-teleport", + "parameters" : { + } + }, + { + "name" : "approach-fly" + } + ], + + "wanderActions" : [ + { + "name" : "wander-fly", + "cooldown" : [5,20], + "parameters" : { + "wanderTime" : [10,40], + "groundDistance" : 20, + "ceilingDistance" : 10, + "xVelocity" : 8, + "yVelocity" : 12 + } + }, + { + "name" : "land-fly", + "parameters" : { + "flySpeed" : 8, + "flyControlForce" : 25, + "landCheckDistance" : 40, + "idleTime" : 40 + } + } + ], + + "concurrentActions" : [ ], + + "concurrentHostileActions" : [ ] + }, + + "metaBoundBox" : [-2.5, -2.5, 2.5, 2.5], + "scale" : 1.0, + + "movementSettings" : { + "gravityEnabled" : false, + "collisionPoly" : [ [-1.0, -1.0], [1.0, -1.0], [1.0, 1.0], [-1.0, 1.0] ], + + "mass" : 1.0, + "flySpeed" : 12, + "airFriction" : 0.25, + "airForce" : 25.0 + }, + + "bodyMaterialKind" : "robotic", + + "knockoutTime" : 0.1, + "knockoutEffect" : "blink", + "knockoutAnimationStates" : { + "damage" : "stunned" + }, + "deathParticles" : "deathPoof", + + "touchDamage" : { + "poly" : [ [-1.0, -1.0], [1.0, -1.0], [1.0, 1.0], [-1.0, 1.0] ], + "damage" : 0, + + "teamType" : "enemy", + "damageSourceKind" : "electric", + "knockback" : 10, + "statusEffects" : [ "ctionizedrain" ] + }, + + "statusSettings" : { + "statusProperties" : { + "targetMaterialKind" : "robotic" + }, + + "appliesEnvironmentStatusEffects" : true, + "appliesWeatherStatusEffects" : true, + "minimumLiquidStatusEffectPercentage" : 0.1, + + "primaryScriptSources" : [ + "/stats/monster_primary.lua" + ], + "primaryScriptDelta" : 5, + + "stats" : { + "knockbackStunTime" : { + "baseValue" : 0.25 + }, + "knockbackThreshold" : { + "baseValue" : 9 + }, + "maxHealth" : { + "baseValue" : 48 + }, + "protection" : { + "baseValue" : 30.0 + }, + "healthRegen" : { + "baseValue" : 0.1 + }, + "powerMultiplier" : { + "baseValue" : 1.0 + }, + "physicalResistance" : { + "baseValue" : 0.5 + }, + "fireResistance" : { + "baseValue" : 0.0 + }, + "fireStatusImmunity" : { + "baseValue" : 0.0 + }, + "iceResistance" : { + "baseValue" : 0.3 + }, + "iceStatusImmunity" : { + "baseValue" : 0.0 + }, + "electricResistance" : { + "baseValue" : -0.5 + }, + "electricStatusImmunity" : { + "baseValue" : 0.0 + }, + "poisonResistance" : { + "baseValue" : 0.5 + }, + "poisonStatusImmunity" : { + "baseValue" : 1.0 + } + }, + + "resources" : { + "stunned" : { + "deltaValue" : -1.0, + "initialValue" : 0.0 + }, + "health" : { + "maxStat" : "maxHealth", + "deltaStat" : "healthRegen", + "defaultPercentage" : 100 + } + } + }, + + "mouthOffset" : [0, 0], + "feetOffset" : [0, -8], + "capturable" : true, + "captureHealthFraction" : 0.5, + "nametagColor" : [64, 200, 255] + } +} diff --git a/ctmonsters/ctdrone2/ctdrone2.partparams b/ctmonsters/ctdrone2/ctdrone2.partparams new file mode 100644 index 00000000..3fd511d5 --- /dev/null +++ b/ctmonsters/ctdrone2/ctdrone2.partparams @@ -0,0 +1,10 @@ +{ + "partParameterDescription" : { + "baseSkills" : [ "merge", [ ] ], + "specialSkills" : [ "merge", [ ] ], + + "projectileOffset" : [ "override", [0.0, 0.0] ] + }, + + "partParameters" : { } +} \ No newline at end of file diff --git a/ctmonsters/ctdrone2/default.frames b/ctmonsters/ctdrone2/default.frames new file mode 100644 index 00000000..66bda751 --- /dev/null +++ b/ctmonsters/ctdrone2/default.frames @@ -0,0 +1,16 @@ +{ + "frameGrid" : { + "size" : [32, 32], + "dimensions" : [5, 4], + + "names" : [ + [ null, "idle.1", null, "blink.1" ], + [ null, "fly.1", "fly.2", "fly.3", "fly.4" ], + [ null, "fire.1", "fire.2", "fire.3", "fire.4" ], + [ null, "flying_attack.1", "flying_attack.2", "flying_attack.3", "flying_attack.4" ] + ] + }, + "aliases" : { + "hurt.1" : "fire.2" + } +} diff --git a/ctmonsters/ctdrone3/body/ctdrone3body.monsterpart b/ctmonsters/ctdrone3/body/ctdrone3body.monsterpart new file mode 100644 index 00000000..be6fdf2e --- /dev/null +++ b/ctmonsters/ctdrone3/body/ctdrone3body.monsterpart @@ -0,0 +1,9 @@ +{ + "name" : "ctdrone3body", + "category" : "ctdrone3_parts", + "type" : "body", + + "frames" : { + "body" : "ctdrone3body.png" + } +} diff --git a/ctmonsters/ctdrone3/body/ctdrone3body.png b/ctmonsters/ctdrone3/body/ctdrone3body.png new file mode 100644 index 00000000..7106afaf Binary files /dev/null and b/ctmonsters/ctdrone3/body/ctdrone3body.png differ diff --git a/ctmonsters/ctdrone3/ctdrone3.animation b/ctmonsters/ctdrone3/ctdrone3.animation new file mode 100644 index 00000000..2f73dff1 --- /dev/null +++ b/ctmonsters/ctdrone3/ctdrone3.animation @@ -0,0 +1,159 @@ +{ + "animatedParts" : { + "stateTypes" : { + "body" : { + "priority" : 0, + "default" : "idle", + + "states" : { + "idle" : { + "frames" : 1 + }, + "fly" : { + "frames" : 4, + "cycle" : 0.4, + "mode" : "loop" + }, + "charge" : { + "frames" : 4, + "cycle" : 0.25, + "mode" : "loop" + }, + "fire" : { + "frames" : 4, + "cycle" : 0.4, + "mode" : "loop" + } + } + }, + "damage" : { + "priority" : 3, + "default" : "none", + "states" : { + "none" : { + "frames" : 1 + }, + "stunned" : { + "frames" : 1 + } + } + }, + "releaseParticles" : { + "default" : "off", + "states" : { + "off" : { + "frames" : 1, + "properties" : { + "particleEmittersOff" : [ "releaseParticles" ] + } + }, + "on" : { + "frames" : 1, + "cycle" : 0.1, + "mode" : "transition", + "transition" : "off", + "properties" : { + "particleEmittersOn" : [ "releaseParticles" ] + } + } + } + } + }, + + "parts" : { + + "body" : { + "properties" : { + "zLevel" : 1, + "centered" : true + }, + + "partStates" : { + "body" : { + "idle" : { + "properties" : { + "image" : ":idle." + } + }, + "fly" : { + "properties" : { + "image" : ":fly." + } + }, + "charge" : { + "properties" : { + "image" : ":fly." + } + }, + "fire" : { + "properties" : { + "image" : ":fly." + } + } + } + } + } + + } + }, + + "particleEmitters" : { + "deathPoof" : { + "particles" : [ + { "particle" : "electricswoosh1" }, + { "particle" : "electricswoosh2" }, + { "particle" : "electricswoosh1" }, + { "particle" : "electricswoosh2" }, + + { "particle" : "deathfizz1left" }, + { "particle" : "deathfizz1right" }, + { "particle" : "deathfizz2left" }, + { "particle" : "deathfizz2right" }, + { "particle" : "deathfizz3left" }, + { "particle" : "deathfizz3right" }, + { "particle" : "deathfizz4left" }, + { "particle" : "deathfizz4right" } + ] + }, + "captureParticles" : { + "particles" : [ + { "particle" : "monstercapture" } + ] + }, + "releaseParticles" : { + "particles" : [ + { "particle" : "monsterrelease" } + ] + }, + "teleportOut" : { + "particles" : [ + { "particle" : "monstercapture" } + ] + }, + "teleportIn" : { + "particles" : [ + { "particle" : "monsterrelease" } + ] + }, + "levelUp" : { + "particles" : [ + { "particle" : "monsterlevelup" } + ] + } + }, + + "sounds" : { + "aggroHop" : [ ], + "deathPuff" : [ "/sfx/npc/enemydeathpuff.ogg" ], + "fire" : [ "/sfx/projectiles/electric_barrier_shock1.ogg" ], + "fire2" : [ "/sfx/melee/giantsword_charge_full.ogg" ] + }, + + "effects" : { + "blink" : { + "type" : "flash", + "time" : 0.25, + "directives" : "fade=ffffff;0.5" + } + } +} diff --git a/ctmonsters/ctdrone3/ctdrone3.monstertype b/ctmonsters/ctdrone3/ctdrone3.monstertype new file mode 100644 index 00000000..ab350250 --- /dev/null +++ b/ctmonsters/ctdrone3/ctdrone3.monstertype @@ -0,0 +1,250 @@ +{ + "type" : "ctdrone3", + "shortdescription" : "Defensive Drone R300", + "description" : "Hightech durasteel drone operated by the EDS. Has ranged attacks and spreads ionized clouds.", + + "categories" : [ "ctdrone3_parts" ], + "parts" : [ "body" ], + "partParameters" : "ctdrone3.partparams", + + "animation" : "ctdrone3.animation", + "reversed" : true, + + "dropPools" : [ { "default" : "ctdrone3Treasure" } ], + + "baseParameters" : { + "monsterClass" : "rare", + "elite" : true, + "scripts" : [ + "/monsters/monster.lua" + ], + + "behavior" : "monster", + "seeThroughLiquid" : false, + "behaviorConfig" : { + "damageOnTouch" : true, + + "targetQueryRange" : 20, + "targetOnDamage" : true, + "keepTargetInSight" : true, + "keepTargetInRange" : 50, + "targetOutOfSightTime" : 5.0, + + "foundTargetActions" : [ ], + + "fleeActions" : [ ], + + "hostileActions" : [ + { + "name" : "action-fire", + "cooldown" : 5.0, + "parameters" : { + "onGround" : false, + "requireLineOfSight" : true, + "maximumRange" : 30, + "minimumRange" : 2, + "windupState" : "fire", + "windupTime" : 0.6, + "windupStopForce" : 200, + + "projectileType" : "energycrystal", + "fireOffset" : [0, -0.5], + "fireSound" : "fire2", + "fireState" : "", + + "winddownState" : "", + "winddownTime" : 0.1 + } + } + ], + + "periodicActions" : [ ], + + "approachActions" : [ + { + "name" : "approach-fly" + } + ], + + "followActions" : [ + { + "name" : "approach-teleport", + "parameters" : { + } + }, + { + "name" : "approach-fly" + } + ], + + "wanderActions" : [ + { + "name" : "wander-fly", + "cooldown" : [5,20], + "parameters" : { + "wanderTime" : [10,40], + "groundDistance" : 20, + "ceilingDistance" : 10, + "xVelocity" : 8, + "yVelocity" : 12 + } + }, + { + "name" : "land-fly", + "parameters" : { + "flySpeed" : 8, + "flyControlForce" : 25, + "landCheckDistance" : 40, + "idleTime" : 40 + } + } + ], + + "concurrentActions" : [ ], + + "concurrentHostileActions" : [ + { + "name" : "action-fire", + "cooldown" : 10.0, + "parameters" : { + "maximumRange" : 50, + "requireLineOfSight" : false, + "onGround" : false, + "windupState" : "", + "windupTime" : 0.0, + + "projectileType" : "smallelectriccloud", + "projectileParameters" : { + "speed" : 10.0, + "timeToLive" : 1.0 + }, + "fireOffset" : [0.0, 0.0], + "aimAtTarget" : false, + "inaccuracy" : 3.14, + "projectileCount" : 8, + "projectileInterval" : 0.0, + "fireState" : "", + "fireDelay" : 0.0, + "fireSound" : "fire", + + "winddownState" : "", + "winddownTime" : 0.0 + } + } + ] + }, + + "metaBoundBox" : [-2.5, -2.5, 2.5, 2.5], + "scale" : 1.0, + + "movementSettings" : { + "gravityEnabled" : false, + "collisionPoly" : [ [-1.0, -1.0], [1.0, -1.0], [1.0, 1.0], [-1.0, 1.0] ], + + "mass" : 1.0, + "flySpeed" : 12, + "airFriction" : 0.25, + "airForce" : 25.0 + }, + + "bodyMaterialKind" : "robotic", + + "knockoutTime" : 0.1, + "knockoutEffect" : "blink", + "knockoutAnimationStates" : { + "damage" : "stunned" + }, + "deathParticles" : "deathPoof", + + "touchDamage" : { + "poly" : [ [-1.0, -1.0], [1.0, -1.0], [1.0, 1.0], [-1.0, 1.0] ], + "damage" : 10, + + "teamType" : "enemy", + "damageSourceKind" : "default", + "knockback" : 20, + "statusEffects" : [ "stun" ] + }, + + "statusSettings" : { + "statusProperties" : { + "targetMaterialKind" : "robotic" + }, + + "appliesEnvironmentStatusEffects" : true, + "appliesWeatherStatusEffects" : true, + "minimumLiquidStatusEffectPercentage" : 0.1, + + "primaryScriptSources" : [ + "/stats/monster_primary.lua" + ], + "primaryScriptDelta" : 5, + + "stats" : { + "knockbackStunTime" : { + "baseValue" : 0.25 + }, + "knockbackThreshold" : { + "baseValue" : 9 + }, + "maxHealth" : { + "baseValue" : 68 + }, + "protection" : { + "baseValue" : 30.0 + }, + "healthRegen" : { + "baseValue" : 0.1 + }, + "powerMultiplier" : { + "baseValue" : 1.0 + }, + "physicalResistance" : { + "baseValue" : 0.5 + }, + "fireResistance" : { + "baseValue" : 0.0 + }, + "fireStatusImmunity" : { + "baseValue" : 0.0 + }, + "iceResistance" : { + "baseValue" : 0.3 + }, + "iceStatusImmunity" : { + "baseValue" : 0.0 + }, + "electricResistance" : { + "baseValue" : -0.5 + }, + "electricStatusImmunity" : { + "baseValue" : 0.0 + }, + "poisonResistance" : { + "baseValue" : 0.5 + }, + "poisonStatusImmunity" : { + "baseValue" : 1.0 + } + }, + + "resources" : { + "stunned" : { + "deltaValue" : -1.0, + "initialValue" : 0.0 + }, + "health" : { + "maxStat" : "maxHealth", + "deltaStat" : "healthRegen", + "defaultPercentage" : 100 + } + } + }, + + "mouthOffset" : [0, 0], + "feetOffset" : [0, -8], + "capturable" : true, + "captureHealthFraction" : 0.2, + "nametagColor" : [64, 200, 255] + } +} diff --git a/ctmonsters/ctdrone3/ctdrone3.partparams b/ctmonsters/ctdrone3/ctdrone3.partparams new file mode 100644 index 00000000..3fd511d5 --- /dev/null +++ b/ctmonsters/ctdrone3/ctdrone3.partparams @@ -0,0 +1,10 @@ +{ + "partParameterDescription" : { + "baseSkills" : [ "merge", [ ] ], + "specialSkills" : [ "merge", [ ] ], + + "projectileOffset" : [ "override", [0.0, 0.0] ] + }, + + "partParameters" : { } +} \ No newline at end of file diff --git a/ctmonsters/ctdrone3/default.frames b/ctmonsters/ctdrone3/default.frames new file mode 100644 index 00000000..66bda751 --- /dev/null +++ b/ctmonsters/ctdrone3/default.frames @@ -0,0 +1,16 @@ +{ + "frameGrid" : { + "size" : [32, 32], + "dimensions" : [5, 4], + + "names" : [ + [ null, "idle.1", null, "blink.1" ], + [ null, "fly.1", "fly.2", "fly.3", "fly.4" ], + [ null, "fire.1", "fire.2", "fire.3", "fire.4" ], + [ null, "flying_attack.1", "flying_attack.2", "flying_attack.3", "flying_attack.4" ] + ] + }, + "aliases" : { + "hurt.1" : "fire.2" + } +} diff --git a/effects/ctbiomeelectric/ctbiomeelectric.animation b/effects/ctbiomeelectric/ctbiomeelectric.animation new file mode 100644 index 00000000..c0ba3ddc --- /dev/null +++ b/effects/ctbiomeelectric/ctbiomeelectric.animation @@ -0,0 +1,26 @@ +{ + "particleEmitters" : { + "electricalburn" : { + "enabled" : true, + "emissionRate" : 10.0, + "particles" : [ + { + "particle" : { + "type" : "ember", + "size" : 1.0, + "color" : [0, 225, 255, 180], + "fade" : 0.9, + "destructionAction" : "shrink", + "destructionTime" : 0.8, + "position" : [0.0, 0.0], + "offsetRegion" : [0, 0, 0, 0], + "initialVelocity" : [0, 0.3], + "finalVelocity" : [0, 0.5], + "approach" : [0, 0.0], + "timeToLive" : 0.8 + } + } + ] + } + } +} diff --git a/effects/ctbiomeelectric/ctbiomeelectric.lua b/effects/ctbiomeelectric/ctbiomeelectric.lua new file mode 100644 index 00000000..9a98377f --- /dev/null +++ b/effects/ctbiomeelectric/ctbiomeelectric.lua @@ -0,0 +1,33 @@ +function init() + animator.setParticleEmitterOffsetRegion("electricalburn", mcontroller.boundBox()) + animator.setParticleEmitterActive("electricalburn", true) + + -- effect.setParentDirectives(config.getParameter("directives", "")) + + self.movementModifiers = config.getParameter("movementModifiers", {}) + + self.energyCost = config.getParameter("energyCost", 1) + self.healthDamage = config.getParameter("healthDamage", 1) + + script.setUpdateDelta(config.getParameter("tickRate", 1)) + + effect.addStatModifierGroup({{stat = "energyRegenPercentageRate", effectiveMultiplier = 1}}) + + world.sendEntityMessage(entity.id(), "queueRadioMessage", "ctbiomeelectric", 5.0) +end + +function update(dt) + if not status.overConsumeResource("energy", self.energyCost) then + mcontroller.controlModifiers(self.movementModifiers) + status.applySelfDamageRequest({ + damageType = "IgnoresDef", + damage = self.healthDamage, + damageSourceKind = "electric", + sourceEntityId = entity.id() + }) + end +end + +function uninit() + +end diff --git a/effects/ctbiomeelectric/ctbiomeelectric.png b/effects/ctbiomeelectric/ctbiomeelectric.png new file mode 100644 index 00000000..7abdf234 Binary files /dev/null and b/effects/ctbiomeelectric/ctbiomeelectric.png differ diff --git a/effects/ctbiomeelectric/ctbiomeelectric.statuseffect b/effects/ctbiomeelectric/ctbiomeelectric.statuseffect new file mode 100644 index 00000000..62153810 --- /dev/null +++ b/effects/ctbiomeelectric/ctbiomeelectric.statuseffect @@ -0,0 +1,24 @@ +{ + "name" : "ctbiomeelectric", + "blockingStat" : "electricStatusImmunity", + + "effectConfig" : { + "movementModifiers" : { + "speedModifier" : 1.4, + "airJumpModifier" : 1.4 + }, + "tickRate" : 200, + "energyCost" : 10, + "healthDamage" : 20 + }, + "defaultDuration" : 5, + + "scripts" : [ + "ctbiomeelectric.lua" + ], + + "animationConfig" : "ctbiomeelectric.animation", + + "label" : "Ionized Air", + "icon" : "ctbiomeelectric.png" +} diff --git a/effects/ctionizedrain/ctionizedrain.animation b/effects/ctionizedrain/ctionizedrain.animation new file mode 100644 index 00000000..fc90b387 --- /dev/null +++ b/effects/ctionizedrain/ctionizedrain.animation @@ -0,0 +1,26 @@ +{ + "particleEmitters" : { + "sparks" : { + "enabled" : true, + "emissionRate" : 5.0, + "particles" : [ + { + "particle" : "electricswoosh1" + }, + { + "particle" : "electricswoosh2" + } + ] + } + }, + "lights" : { + "glow" : { + "active" : true, + "position" : [0, 0], + "color" : [100, 50, 150] + } + }, + "sounds" : { + "bolt" : [ "/sfx/projectiles/electric_barrier_shock1.ogg" ] + } +} diff --git a/effects/ctionizedrain/ctionizedrain.lua b/effects/ctionizedrain/ctionizedrain.lua new file mode 100644 index 00000000..f46027e3 --- /dev/null +++ b/effects/ctionizedrain/ctionizedrain.lua @@ -0,0 +1,29 @@ +require "/scripts/util.lua" + +function init() + animator.setParticleEmitterOffsetRegion("sparks", mcontroller.boundBox()) + animator.setParticleEmitterActive("sparks", true) + effect.setParentDirectives("fade=7733AA=0.25") + + script.setUpdateDelta(60) + + self.damageClampRange = config.getParameter("damageClampRange") + + self.tickTime = config.getParameter("boltInterval", 1.0) + self.tickTimer = self.tickTime +end + +function update(dt) + self.tickTimer = self.tickTimer - dt + local boltPower = util.clamp(status.resourceMax("health") * config.getParameter("healthDamageFactor", 1.0), self.damageClampRange[1], self.damageClampRange[2]) + status.applySelfDamageRequest({ + damageType = "IgnoresDef", + damage = boltPower, + damageSourceKind = "electric", + sourceEntityId = entity.id() + }) +end + +function uninit() + +end diff --git a/effects/ctionizedrain/ctionizedrain.statuseffect b/effects/ctionizedrain/ctionizedrain.statuseffect new file mode 100644 index 00000000..a96cc992 --- /dev/null +++ b/effects/ctionizedrain/ctionizedrain.statuseffect @@ -0,0 +1,21 @@ +{ + "name" : "ctionizedrain", + "blockingStat" : "electricStatusImmunity", + + "effectConfig" : { + "boltInterval" : 30.0, + "jumpDistance" : 8, + "healthDamageFactor" : 0.03, + "damageClampRange" : [2, 8] + }, + "defaultDuration" : 1, + + "scripts" : [ + "ctionizedrain.lua" + ], + + "animationConfig" : "ctionizedrain.animation", + + "label" : "Electrified", + "icon" : "/interface/statuses/electric.png" +} diff --git a/interface/cockpit/cockpit.config.patch b/interface/cockpit/cockpit.config.patch index 33c68e42..8f227524 100644 --- a/interface/cockpit/cockpit.config.patch +++ b/interface/cockpit/cockpit.config.patch @@ -10,4 +10,23 @@ {"op":"add","path":"/planetTypeNames/ctforest", "value":"Enternia"}, {"op":"add","path":"/planetTypeColors/ctforest", -"value":[0, 135, 255]}] \ No newline at end of file +"value":[0, 135, 255]}, +{"op":"add","path":"/displayWeathers/ctrainweather", +"value":{ + "displayName" : "Ionic Rain", + "icon" : "/interface/cockpit/weather/ctrain.png" + }}, +{"op":"add","path":"/displayWeathers/ctdrizzleweather", +"value":{ + "displayName" : "Drizzle", + "icon" : "/interface/cockpit/weather/drizzle.png" + }}, +{"op":"add","path":"/displayWeathers/ctstormweather", +"value":{ + "displayName" : "Ionic Storms", + "icon" : "/interface/cockpit/weather/ctthunder.png" + }} + + + +] \ No newline at end of file diff --git a/interface/cockpit/weather/ctrain.png b/interface/cockpit/weather/ctrain.png new file mode 100644 index 00000000..f983cfe8 Binary files /dev/null and b/interface/cockpit/weather/ctrain.png differ diff --git a/interface/cockpit/weather/ctthunder.png b/interface/cockpit/weather/ctthunder.png new file mode 100644 index 00000000..099fa3dc Binary files /dev/null and b/interface/cockpit/weather/ctthunder.png differ diff --git a/objects/human/vendingmachine/vendingmachine.object.patch b/objects/human/vendingmachine/vendingmachine.object.patch new file mode 100644 index 00000000..d4de3050 --- /dev/null +++ b/objects/human/vendingmachine/vendingmachine.object.patch @@ -0,0 +1,7 @@ +[{"op" : "add", +"path" : "/interactData/items/-", +"value" : { "item" : "ctayasoda" } +},{"op" : "add", +"path" : "/interactData/items/-", +"value" : { "item" : "cttsaycola" } +}] diff --git a/radiomessages/exploration.radiomessages.patch b/radiomessages/exploration.radiomessages.patch new file mode 100644 index 00000000..3e8b90df --- /dev/null +++ b/radiomessages/exploration.radiomessages.patch @@ -0,0 +1,8 @@ +[{"op":"add", +"path":"/ctbiomeelectric", +"value":{ + "unique" : false, + "text" : "Be careful, the air appears to be ionized. Unless you don't have immunity to electricity, try to not drain your energy as it may damage you periodically.", + "textSpeed" : 70 + } +}] \ No newline at end of file diff --git a/recipes/cookingtable1/condiments/ctayajam.recipe b/recipes/cookingtable1/condiments/ctayajam.recipe index 0ea8d5a1..7c9fe645 100644 --- a/recipes/cookingtable1/condiments/ctayajam.recipe +++ b/recipes/cookingtable1/condiments/ctayajam.recipe @@ -1,6 +1,7 @@ { "input" : [ - { "item" : "ctayaboiled", "count" : 2 } + { "item" : "ctayaboiled", "count" : 2 }, + { "item" : "ctwoodsap", "count" : 1 } ], "output" : { "item" : "ctayajam", "count" : 1 }, "groups" : [ "craftingfood", "condiments" ] diff --git a/recipes/cookingtable1/condiments/ctferment.recipe b/recipes/cookingtable1/condiments/ctferment.recipe new file mode 100644 index 00000000..44b06609 --- /dev/null +++ b/recipes/cookingtable1/condiments/ctferment.recipe @@ -0,0 +1,7 @@ +{ + "input" : [ + { "item" : "ctwood", "count" : 3 } + ], + "output" : { "item" : "ctwoodsap", "count" : 1 }, + "groups" : [ "craftingfood", "condiments" ] +} diff --git a/recipes/ctepp.recipe b/recipes/ctepp.recipe new file mode 100644 index 00000000..25c4c47c --- /dev/null +++ b/recipes/ctepp.recipe @@ -0,0 +1,12 @@ +{ + "input" : [ + { "item" : "ctsphere2", "count" : 1 }, + { "item" : "cteye", "count" : 3 }, + { "item" : "durasteelbar", "count" : 20 }, + { "item" : "moonstone", "count" : 150 }, + { "item" : "moonrock", "count" : 150 } + ], + "duration" : 5, + "output" : { "item" : "ctepp", "count" : 1 }, + "groups" : [ "craftinganvil3", "hazardgear", "all" ] +} diff --git a/recipes/cteye.recipe b/recipes/cteye.recipe index 3fb141f0..db196588 100644 --- a/recipes/cteye.recipe +++ b/recipes/cteye.recipe @@ -1,8 +1,7 @@ { "input" : [ { "item" : "diamond", "count" : 1 }, - { "item" : "crystal", "count" : 2 }, - { "item" : "cellmatter", "count" : 5 }, + { "item" : "crystal", "count" : 50 }, { "item" : "ctaya", "count" : 1 }, { "item" : "moonrock", "count" : 20 } ], diff --git a/recipes/ctgun2.recipe b/recipes/ctgun2.recipe index 5c2da1f7..ff1a89f0 100644 --- a/recipes/ctgun2.recipe +++ b/recipes/ctgun2.recipe @@ -1,7 +1,7 @@ { "input" : [ { "item" : "ctgun1", "count" : 1 }, - { "item" : "ctsphere", "count" : 1 } + { "item" : "upgrademodule", "count" : 1 } ], "duration" : 5, "output" : { "item" : "ctgun2", "count" : 1 }, diff --git a/recipes/ctmark1.recipe b/recipes/ctmark1.recipe index 1aa8fc15..d603f18a 100644 --- a/recipes/ctmark1.recipe +++ b/recipes/ctmark1.recipe @@ -1,7 +1,6 @@ { "input" : [ { "item" : "ctsphere", "count" : 1 }, - { "item" : "cteye", "count" : 1 }, { "item" : "durasteelbar", "count" : 10 }, { "item" : "moonstone", "count" : 50 } ], diff --git a/recipes/ctmark2.recipe b/recipes/ctmark2.recipe index dbd4005a..5a291a79 100644 --- a/recipes/ctmark2.recipe +++ b/recipes/ctmark2.recipe @@ -1,7 +1,7 @@ { "input" : [ { "item" : "cteye", "count" : 1 }, - { "item" : "durasteelbar", "count" : 10 }, + { "item" : "durasteelbar", "count" : 15 }, { "item" : "moonstone", "count" : 50 }, { "item" : "glowfibre", "count" : 50 } ], diff --git a/recipes/ctmoondust.recipe b/recipes/ctmoondust.recipe new file mode 100644 index 00000000..e0a6cb56 --- /dev/null +++ b/recipes/ctmoondust.recipe @@ -0,0 +1,11 @@ +{ + "input" : [ + { "item" : "ctwood", "count" : 1 } + ], + "output" : { + "item" : "moondust", + "count" : 1 + }, + "duration" : 0.25, + "groups" : [ "craftingfurniture", "materials", "all" ] +} diff --git a/recipes/ctnormalwood.recipe b/recipes/ctnormalwood.recipe new file mode 100644 index 00000000..52506c19 --- /dev/null +++ b/recipes/ctnormalwood.recipe @@ -0,0 +1,11 @@ +{ + "input" : [ + { "item" : "ctwood", "count" : 1 } + ], + "output" : { + "item" : "logblock", + "count" : 1 + }, + "duration" : 0.25, + "groups" : [ "craftingfurniture", "materials", "all" ] +} diff --git a/recipes/ctsphere.recipe b/recipes/ctsphere.recipe index 756b2647..1a378091 100644 --- a/recipes/ctsphere.recipe +++ b/recipes/ctsphere.recipe @@ -1,7 +1,7 @@ { "input" : [ { "item" : "cteye", "count" : 1 }, - { "item" : "prisiliteore", "count" : 10 }, + { "item" : "prisiliteore", "count" : 50 }, { "item" : "moondust", "count" : 100 } ], "output" : { diff --git a/recipes/ctsphere2.recipe b/recipes/ctsphere2.recipe new file mode 100644 index 00000000..2508c2c9 --- /dev/null +++ b/recipes/ctsphere2.recipe @@ -0,0 +1,14 @@ +{ + "input" : [ + { "item" : "ctgil", "count" : 1 }, + { "item" : "crystal", "count" : 100 }, + { "item" : "ctlaserdiode", "count" : 1 }, + { "item" : "moondust", "count" : 100 }, + { "item" : "ctwoodsap", "count" : 50 } + ], + "output" : { + "item" : "ctsphere2", + "count" : 1 + }, + "groups" : [ "treasuredtrophies", "mod" ] +} diff --git a/recipes/refinery/ctsap.recipe b/recipes/refinery/ctsap.recipe new file mode 100644 index 00000000..197c6bf6 --- /dev/null +++ b/recipes/refinery/ctsap.recipe @@ -0,0 +1,7 @@ +{ + "input" : [ + { "item" : "ctwoodsap", "count" : 1 } + ], + "output" : { "item" : "money", "count" : 10 }, + "groups" : [ "refinery" ] +} diff --git a/spawntypes/uniques.spawntypes.patch b/spawntypes/uniques.spawntypes.patch new file mode 100644 index 00000000..5751bb62 --- /dev/null +++ b/spawntypes/uniques.spawntypes.patch @@ -0,0 +1,65 @@ +[ + {"op": "add", "path": "/-", "value": { + "name" : "ctpoptop", + "spawnParameters" : {"area" : "surface","region" : "exposed","time" : "all"}, + "groupSize" : [1, 1], "spawnChance" : 0.26, + "monsterType" : [ [0.58, "poptop"], [0.01, "albinopoptop"], [0.40, "adultpoptop"], [0.01, "albinoadultpoptop"] ], + "monsterParameters" : {"aggressive" : true} + }}, + {"op": "add", "path": "/-", "value": { + "name" : "ctadultpoptop", + "spawnParameters" : {"area" : "surface","region" : "all","time" : "day"}, + "groupSize" : [1, 1], "spawnChance" : 0.06, + "monsterType" : [ [0.99, "adultpoptop"], [0.01, "albinoadultpoptop"] ], + "monsterParameters" : {"aggressive" : true} + }}, + {"op": "add", "path": "/-", "value": { + "name" : "ctscandroid", + "spawnParameters" : {"area" : "air","region" : "all","time" : "all"}, + "groupSize" : [1, 1], "spawnChance" : 0.08, + "monsterType" : [ [0.99, "scandroid"], [0.01, "cultistscandroid"] ], + "monsterParameters" : {"aggressive" : false} + }}, + {"op": "add", "path": "/-", "value": { + "name" : "cticenarfin", + "spawnParameters" : {"area" : "surface","region" : "all","time" : "all"}, + "groupSize" : [1, 1], "spawnChance" : 0.06, + "monsterType" : [ [1, "icenarfin"] ], + "monsterParameters" : {"aggressive" : true} + }}, + {"op": "add", "path": "/-", "value": { + "name" : "ctnarfin", + "spawnParameters" : {"area" : "surface","region" : "all","time" : "all"}, + "groupSize" : [1, 2], "spawnChance" : 0.05, + "monsterType" : [ [1, "narfin"] ], + "monsterParameters" : {"aggressive" : true} + }}, + {"op": "add", "path": "/-", "value": { + "name" : "ctorbide", + "spawnParameters" : {"area" : "surface","region" : "exposed","time" : "night"}, + "groupSize" : [1, 1], "spawnChance" : 0.16, + "monsterType" : [ [0.99, "orbide"], [0.01, "iceorbide"] ], + "monsterParameters" : {"aggressive" : true} + }}, + {"op": "add", "path": "/-", "value": { + "name" : "ctminidrone", + "spawnParameters" : {"area" : "air","region" : "all","time" : "all"}, + "groupSize" : [1, 2], "spawnChance" : 0.07, + "monsterType" : [ [0.9, "ctdrone"], [0.1, "ctdrone2"] ], + "monsterParameters" : {"aggressive" : true} + }}, + {"op": "add", "path": "/-", "value": { + "name" : "ctminidronesub", + "spawnParameters" : {"area" : "air","region" : "all","time" : "all"}, + "groupSize" : [1, 2], "spawnChance" : 0.06, + "monsterType" : [ [0.9, "ctdrone2"], [0.1, "ctdrone3"] ], + "monsterParameters" : {"aggressive" : true} + }}, + {"op": "add", "path": "/-", "value": { + "name" : "ctadultpoptopsub", + "spawnParameters" : {"area" : "surface","region" : "all","time" : "all"}, + "groupSize" : [1, 1], "spawnChance" : 0.1, + "monsterType" : [ [0.8, "adultpoptop"], [0.2, "albinoadultpoptop"] ], + "monsterParameters" : {"aggressive" : true} + }} +] \ No newline at end of file diff --git a/terrestrial_worlds.config.patch b/terrestrial_worlds.config.patch index 957ba561..ad4092ae 100644 --- a/terrestrial_worlds.config.patch +++ b/terrestrial_worlds.config.patch @@ -3,19 +3,34 @@ "op" : "add", "path" : "/planetTypes/ctforest", "value" : { - "threatRange" : [3, 4], + "threatRange" : [4, 6], "layers" : { "surface" : { "primaryRegion" : [ "ctforest" ], - "secondaryRegions" : [ "bioluminescence", "colourful", "hive" ], - "dungeonCountRange" : [2, 3], + "secondaryRegions" : [ "ctforestlabs", "ctforestpoptop" ], + "dungeonCountRange" : [3, 4], "dungeons" : [ - [1.0,"oasis"], + [4.0, "apextestfacility"], [3.0, "apexbase"], + [3.0, "cultistlair"], [1.0,"hylotlcity"], - [1.0,"hylotlcity"], - [1.0,"floranvillagetower"], - [1.0,"floranhutvillage"] + [1.0,"floranvillagetower"] ] + }, + "subsurface" : { + "primaryRegion" : ["ctforestsub"], + "secondaryRegions" : [] + }, + "underground1" : { + "primaryRegion" : ["ctforestsub"], + "secondaryRegions" : [ "ctforesthive" ] + }, + "underground2" : { + "primaryRegion" : ["ctforestsub2"], + "secondaryRegions" : [ "ctforesthive" ] + }, + "underground3" : { + "primaryRegion" : ["ctforestsub2"], + "secondaryRegions" : [] } } } @@ -31,14 +46,80 @@ "op" : "add", "path" : "/regionTypes/ctforest", "value" : { - "caveLiquid" : [ "water", "healingliquid" ], //what liquids appear on your biome surface? - "caveLiquidChanceRange" : [10, 10], //how often does your liquid appear on the surface? + "caveLiquid" : [ "water" ], //what liquids appear on your biome surface? + "caveLiquidChanceRange" : [10, 50], //how often does your liquid appear on the surface? "blockSelector" : [ "remixedSwampySurface", "remixedPoolsSurface" ], //surface terrain generation "fgCaveSelector" : [ "surfaceCaves" ], //foreground cave terrain generation "bgOreSelector" : [ "empty" ], // background ore terrain selector "biome" : [ [0, [ "ctforest" ]] // and one more case of the "name" value + ], + "subRegion" : ["ctforestlabs", "ctforestpoptop"] + } + }, + + { + "op" : "add", + "path" : "/regionTypes/ctforestlabs", + "value" : { + "caveLiquid" : [ "water" ], //what liquids appear on your biome surface? + "caveLiquidChanceRange" : [10, 10], //how often does your liquid appear on the surface? + "blockSelector" : [ "remixedSwampySurface", "remixedPoolsSurface" ], //surface terrain generation + "fgCaveSelector" : [ "surfaceCaves" ], //foreground cave terrain generation + "bgOreSelector" : [ "empty" ], // background ore terrain selector + "biome" : [ + [0, [ "ctforestlabs" ]] // and one more case of the "name" value ] } + }, + + { + "op" : "add", + "path" : "/regionTypes/ctforestpoptop", + "value" : { + "caveLiquid" : [ "water" ], //what liquids appear on your biome surface? + "caveLiquidChanceRange" : [10, 10], //how often does your liquid appear on the surface? + "blockSelector" : [ "remixedSwampySurface", "remixedPoolsSurface" ], //surface terrain generation + "fgCaveSelector" : [ "surfaceCaves" ], //foreground cave terrain generation + "bgOreSelector" : [ "empty" ], // background ore terrain selector + "biome" : [ + [0, [ "ctforestpoptop" ]] // and one more case of the "name" value + ] + } + }, + + { + "op" : "add", + "path" : "/regionTypes/ctforestsub", + "value" : { + "caveLiquid" : [ "water" ], + "biome" : [ + [0, [ "ctforestsub" ]] + ], + "subRegion" : ["ctforesthive"] + } + }, + + { + "op" : "add", + "path" : "/regionTypes/ctforestsub2", + "value" : { + "caveLiquid" : [ "water", "poison" ], + "biome" : [ + [0, [ "ctforestsub2" ]] + ] + } + }, + + { + "op" : "add", + "path" : "/regionTypes/ctforesthive", + "value" : { + "caveLiquid" : [ "water" ], + "biome" : [ + [0, [ "ctforesthive" ]] + ], + "subRegion" : ["ctforestsub"] + } } -] \ No newline at end of file +] diff --git a/treasure/cropharvest.treasurepools.patch b/treasure/cropharvest.treasurepools.patch index 1b13ce14..24525d8a 100644 --- a/treasure/cropharvest.treasurepools.patch +++ b/treasure/cropharvest.treasurepools.patch @@ -7,7 +7,7 @@ "pool" : [ {"weight" : 0.89, "item" : "ctgil"}, {"weight" : 0.01, "item" : "ctgilseed"}, - {"weight" : 0.1, "item" : "plantfibre"} + {"weight" : 0.1, "item" : "ctwoodsap"} ], "poolRounds" : [ [0.6, 1], @@ -24,7 +24,7 @@ "pool" : [ {"weight" : 0.89, "item" : "cttsay"}, {"weight" : 0.01, "item" : "cttsayseed"}, - {"weight" : 0.1, "item" : "plantfibre"} + {"weight" : 0.1, "item" : "ctwoodsap"} ], "poolRounds" : [ [0.6, 1], diff --git a/treasure/monster.treasurepools.patch b/treasure/monster.treasurepools.patch new file mode 100644 index 00000000..0c425704 --- /dev/null +++ b/treasure/monster.treasurepools.patch @@ -0,0 +1,14 @@ +[ + { + "op": "add", + "path": "/ctdrone3Treasure", + "value": [ + [1, { + "fill" : [ + {"item" : [ "ctlaserdiode", 1]}, + {"pool" : "robotTreasure"} + ] + }] + ] + } +] \ No newline at end of file diff --git a/weather.config.patch b/weather.config.patch new file mode 100644 index 00000000..ff0f2d4f --- /dev/null +++ b/weather.config.patch @@ -0,0 +1,12 @@ +[ + { + "op" : "add", + "path" : "/ctforest", + "value" : [ + [0.7, "clear"], + [0.16, "ctrainweather"], + [0.04, "ctdrizzleweather"], + [0.10, "ctstormweather"] + ] + } +] \ No newline at end of file