From af7e552d3c139eabc3a150e6098938c559e37734 Mon Sep 17 00:00:00 2001 From: Ed <96445749+TheShuEd@users.noreply.github.com> Date: Mon, 16 Dec 2024 22:20:36 +0300 Subject: [PATCH] Flora clean up (#33839) * first migrate * clean up prototypes * Update polymorph.yml * Update flora.yml * and this one * and this one x2 * and this one x3 * Update migration.yml --- .../Prototypes/Catalog/Fills/Crates/cargo.yml | 5 +- .../Markers/Spawners/Random/flora.yml | 34 +- .../Markers/Spawners/Random/mineshaft.yml | 14 +- .../Markers/Spawners/Random/shadowkudzu.yml | 12 +- .../Entities/Objects/Decoration/flora.yml | 429 +++++------------- .../Entities/Objects/Misc/kudzu.yml | 12 +- Resources/Prototypes/Polymorphs/polymorph.yml | 2 +- .../Prototypes/Procedural/biome_templates.yml | 50 +- .../Prototypes/Procedural/dungeon_configs.yml | 7 +- Resources/ServerInfo/Guidebook/Mobs/Diona.xml | 2 +- .../Decoration/Flora/flora_trees.rsi/icon.png | Bin 4850 -> 0 bytes .../Flora/flora_trees.rsi/meta.json | 3 - Resources/migration.yml | 50 ++ 13 files changed, 187 insertions(+), 433 deletions(-) delete mode 100644 Resources/Textures/Objects/Decoration/Flora/flora_trees.rsi/icon.png diff --git a/Resources/Prototypes/Catalog/Fills/Crates/cargo.yml b/Resources/Prototypes/Catalog/Fills/Crates/cargo.yml index 0ce625876f..469c24ab97 100644 --- a/Resources/Prototypes/Catalog/Fills/Crates/cargo.yml +++ b/Resources/Prototypes/Catalog/Fills/Crates/cargo.yml @@ -342,7 +342,10 @@ - id: Lamp prob: 0.01 orGroup: Useful - - id: FloraTreeLarge05 + - id: FloraTreeLarge + prob: 0.01 + orGroup: Useful + - id: LightTree #Funny mobs maybe prob: 0.01 orGroup: Useful #notuseful diff --git a/Resources/Prototypes/Entities/Markers/Spawners/Random/flora.yml b/Resources/Prototypes/Entities/Markers/Spawners/Random/flora.yml index 9abd35a920..416833538a 100644 --- a/Resources/Prototypes/Entities/Markers/Spawners/Random/flora.yml +++ b/Resources/Prototypes/Entities/Markers/Spawners/Random/flora.yml @@ -7,36 +7,14 @@ layers: - state: red - sprite: Objects/Decoration/Flora/flora_trees.rsi - state: icon + state: tree01 - type: RandomSpawner prototypes: - - FloraTreeLarge01 - - FloraTreeLarge02 - - FloraTreeLarge03 - - FloraTreeLarge04 - - FloraTreeLarge05 - - FloraTreeLarge06 - - FloraTreeConifer01 - - FloraTreeConifer02 - - FloraTreeConifer03 - - FloraTreeSnow01 - - FloraTreeSnow02 - - FloraTreeSnow03 - - FloraTreeSnow04 - - FloraTreeSnow05 - - FloraTreeSnow06 - - FloraTree01 - - FloraTree02 - - FloraTree03 - - FloraTree04 - - FloraTree05 - - FloraTree06 + - FloraTreeLarge + - FloraTreeConifer + - FloraTreeSnow + - FloraTree chance: 0.95 rarePrototypes: - - ShadowTree01 - - ShadowTree02 - - ShadowTree03 - - ShadowTree04 - - ShadowTree05 - - ShadowTree06 + - ShadowTree rareChance: 0.05 diff --git a/Resources/Prototypes/Entities/Markers/Spawners/Random/mineshaft.yml b/Resources/Prototypes/Entities/Markers/Spawners/Random/mineshaft.yml index 8d1b36c022..34e6212dae 100644 --- a/Resources/Prototypes/Entities/Markers/Spawners/Random/mineshaft.yml +++ b/Resources/Prototypes/Entities/Markers/Spawners/Random/mineshaft.yml @@ -63,12 +63,7 @@ - type: RandomSpawner offset: 0.3 prototypes: - - FloraStalagmite1 - - FloraStalagmite2 - - FloraStalagmite3 - - FloraStalagmite4 - - FloraStalagmite5 - - FloraStalagmite6 + - FloraStalagmite chance: 0.9 - type: entity @@ -84,10 +79,5 @@ - type: RandomSpawner offset: 0.3 prototypes: - - FloraGreyStalagmite1 - - FloraGreyStalagmite2 - - FloraGreyStalagmite3 - - FloraGreyStalagmite4 - - FloraGreyStalagmite5 - - FloraGreyStalagmite6 + - FloraGreyStalagmite chance: 0.9 diff --git a/Resources/Prototypes/Entities/Markers/Spawners/Random/shadowkudzu.yml b/Resources/Prototypes/Entities/Markers/Spawners/Random/shadowkudzu.yml index 95a24157f9..bb79958095 100644 --- a/Resources/Prototypes/Entities/Markers/Spawners/Random/shadowkudzu.yml +++ b/Resources/Prototypes/Entities/Markers/Spawners/Random/shadowkudzu.yml @@ -14,12 +14,12 @@ - CrystalPink - CrystalPink - ShadowPortal - - ShadowTree01 - - ShadowTree02 - - ShadowTree03 - - ShadowTree04 - - ShadowTree05 - - ShadowTree06 + - ShadowTree #TODO: transform into EntityTable with weight + - ShadowTree + - ShadowTree + - ShadowTree + - ShadowTree + - ShadowTree rareChance: 0.05 rarePrototypes: - MobCatShadow diff --git a/Resources/Prototypes/Entities/Objects/Decoration/flora.yml b/Resources/Prototypes/Entities/Objects/Decoration/flora.yml index 31bc24cca6..cdbf73a29b 100644 --- a/Resources/Prototypes/Entities/Objects/Decoration/flora.yml +++ b/Resources/Prototypes/Entities/Objects/Decoration/flora.yml @@ -147,30 +147,24 @@ - type: entity parent: BaseRock - id: FloraRockSolid01 + id: FloraRockSolid components: - type: Sprite - state: rocksolid01 - -- type: entity - parent: BaseRock - id: FloraRockSolid02 - components: - - type: Sprite - state: rocksolid02 - -- type: entity - parent: BaseRock - id: FloraRockSolid03 - components: - - type: Sprite - state: rocksolid03 + layers: + - state: rocksolid01 + map: ["random"] + - type: RandomSprite + available: + - random: + rocksolid01: "" + rocksolid02: "" + rocksolid03: "" - type: entity name: stalagmite description: Natural stone spikes. parent: BaseRock - id: FloraStalagmite1 + id: FloraStalagmite components: - type: Destructible thresholds: @@ -185,192 +179,75 @@ collection: GlassBreak - type: Sprite sprite: Objects/Decoration/Flora/flora_stalagmite.rsi - state: stalagmite1 + layers: + - state: stalagmite1 + map: ["random"] + - type: RandomSprite + available: + - random: + stalagmite1: "" + stalagmite2: "" + stalagmite3: "" + stalagmite4: "" + stalagmite5: "" + stalagmite6: "" - type: entity - parent: FloraStalagmite1 - id: FloraStalagmite2 + parent: FloraStalagmite + id: FloraGreyStalagmite components: - type: Sprite sprite: Objects/Decoration/Flora/flora_stalagmite.rsi - state: stalagmite2 - -- type: entity - parent: FloraStalagmite1 - id: FloraStalagmite3 - components: - - type: Sprite - sprite: Objects/Decoration/Flora/flora_stalagmite.rsi - state: stalagmite3 - -- type: entity - parent: FloraStalagmite1 - id: FloraStalagmite4 - components: - - type: Sprite - sprite: Objects/Decoration/Flora/flora_stalagmite.rsi - state: stalagmite4 - -- type: entity - parent: FloraStalagmite1 - id: FloraStalagmite5 - components: - - type: Sprite - sprite: Objects/Decoration/Flora/flora_stalagmite.rsi - state: stalagmite5 - -- type: entity - parent: FloraStalagmite1 - id: FloraStalagmite6 - components: - - type: Sprite - sprite: Objects/Decoration/Flora/flora_stalagmite.rsi - state: stalagmite6 - -- type: entity - parent: FloraStalagmite1 - id: FloraGreyStalagmite1 - components: - - type: Sprite - sprite: Objects/Decoration/Flora/flora_stalagmite.rsi - state: grey_stalagmite1 - -- type: entity - parent: FloraGreyStalagmite1 - id: FloraGreyStalagmite2 - components: - - type: Sprite - sprite: Objects/Decoration/Flora/flora_stalagmite.rsi - state: grey_stalagmite2 - -- type: entity - parent: FloraGreyStalagmite1 - id: FloraGreyStalagmite3 - components: - - type: Sprite - sprite: Objects/Decoration/Flora/flora_stalagmite.rsi - state: grey_stalagmite3 - -- type: entity - parent: FloraGreyStalagmite1 - id: FloraGreyStalagmite4 - components: - - type: Sprite - sprite: Objects/Decoration/Flora/flora_stalagmite.rsi - state: grey_stalagmite4 - -- type: entity - parent: FloraGreyStalagmite1 - id: FloraGreyStalagmite5 - components: - - type: Sprite - sprite: Objects/Decoration/Flora/flora_stalagmite.rsi - state: grey_stalagmite5 - -- type: entity - parent: FloraGreyStalagmite1 - id: FloraGreyStalagmite6 - components: - - type: Sprite - sprite: Objects/Decoration/Flora/flora_stalagmite.rsi - state: grey_stalagmite6 - - -- type: entity - parent: BaseTree - id: FloraTree01 - name: tree - components: - - type: Sprite - state: tree01 - -- type: entity - parent: BaseTree - id: FloraTree02 - name: tree - components: - - type: Sprite - state: tree02 - -- type: entity - parent: BaseTree - id: FloraTree03 - name: tree - components: - - type: Sprite - state: tree03 + layers: + - state: grey_stalagmite1 + map: ["random"] + - type: RandomSprite + available: + - random: + grey_stalagmite1: "" + grey_stalagmite2: "" + grey_stalagmite3: "" + grey_stalagmite4: "" + grey_stalagmite5: "" + grey_stalagmite6: "" - type: entity parent: BaseTree - id: FloraTree04 + id: FloraTree name: tree components: - type: Sprite - state: tree04 - -- type: entity - parent: BaseTree - id: FloraTree05 - name: tree - components: - - type: Sprite - state: tree05 - -- type: entity - parent: BaseTree - id: FloraTree06 - name: tree - components: - - type: Sprite - state: tree06 - -- type: entity - parent: BaseTreeSnow - id: FloraTreeSnow01 - name: snowy tree - components: - - type: Sprite - state: treesnow01 + layers: + - state: tree01 + map: ["random"] + - type: RandomSprite + available: + - random: + tree01: "" + tree02: "" + tree03: "" + tree04: "" + tree05: "" + tree06: "" - type: entity parent: BaseTreeSnow - id: FloraTreeSnow02 + id: FloraTreeSnow name: snowy tree components: - type: Sprite - state: treesnow02 - -- type: entity - parent: BaseTreeSnow - id: FloraTreeSnow03 - name: snowy tree - components: - - type: Sprite - state: treesnow03 - -- type: entity - parent: BaseTreeSnow - id: FloraTreeSnow04 - name: snowy tree - components: - - type: Sprite - state: treesnow04 - -- type: entity - parent: BaseTreeSnow - id: FloraTreeSnow05 - name: snowy tree - components: - - type: Sprite - state: treesnow05 - -- type: entity - parent: BaseTreeSnow - id: FloraTreeSnow06 - name: snowy tree - components: - - type: Sprite - state: treesnow06 + layers: + - state: treesnow01 + map: ["random"] + - type: RandomSprite + available: + - random: + treesnow01: "" + treesnow02: "" + treesnow03: "" + treesnow04: "" + treesnow05: "" + treesnow06: "" - type: entity parent: BaseTreeSnow @@ -382,75 +259,38 @@ - type: entity parent: BaseTreeLarge - id: FloraTreeLarge01 - name: large tree - components: - - type: Sprite - state: treelarge01 - -- type: entity - parent: BaseTreeLarge - id: FloraTreeLarge02 - name: large tree - components: - - type: Sprite - state: treelarge02 - -- type: entity - parent: BaseTreeLarge - id: FloraTreeLarge03 - name: large tree - components: - - type: Sprite - state: treelarge03 - -- type: entity - parent: BaseTreeLarge - id: FloraTreeLarge04 - name: large tree - components: - - type: Sprite - state: treelarge04 - -- type: entity - parent: BaseTreeLarge - id: FloraTreeLarge05 - name: large tree - components: - - type: Sprite - state: treelarge05 - -- type: entity - parent: BaseTreeLarge - id: FloraTreeLarge06 + id: FloraTreeLarge name: large tree components: - type: Sprite - state: treelarge06 - -- type: entity - parent: BaseTreeConifer - id: FloraTreeConifer01 - name: snowy conifer - components: - - type: Sprite - state: treeconifer01 + layers: + - state: treelarge01 + map: ["random"] + - type: RandomSprite + available: + - random: + treelarge01: "" + treelarge02: "" + treelarge03: "" + treelarge04: "" + treelarge05: "" + treelarge06: "" - type: entity parent: BaseTreeConifer - id: FloraTreeConifer02 + id: FloraTreeConifer name: snowy conifer components: - type: Sprite - state: treeconifer02 - -- type: entity - parent: BaseTreeConifer - id: FloraTreeConifer03 - name: snowy conifer - components: - - type: Sprite - state: treeconifer03 + layers: + - state: treeconifer01 + map: ["random"] + - type: RandomSprite + available: + - random: + treeconifer01: "" + treeconifer02: "" + treeconifer03: "" - type: entity parent: BaseTreeConifer @@ -517,53 +357,17 @@ state: treestumpconifer - type: entity - parent: FloraTree01 - id: ShadowTree01 + parent: FloraTree + id: ShadowTree name: dark wood description: The leaves are whispering about you. components: - type: Sprite sprite: Objects/Decoration/Flora/flora_shadow_trees.rsi - state: tree01 - -- type: entity - parent: ShadowTree01 - id: ShadowTree02 - components: - - type: Sprite - state: tree02 - -- type: entity - parent: ShadowTree01 - id: ShadowTree03 - components: - - type: Sprite - state: tree03 - -- type: entity - parent: ShadowTree01 - id: ShadowTree04 - components: - - type: Sprite - state: tree04 - -- type: entity - parent: ShadowTree01 - id: ShadowTree05 - components: - - type: Sprite - state: tree05 - -- type: entity - parent: ShadowTree01 - id: ShadowTree06 - components: - - type: Sprite - state: tree06 - type: entity parent: BaseTree - id: LightTree01 + id: LightTree name: glowing tree description: A marvelous tree filled with strange energy. components: @@ -573,7 +377,18 @@ color: "#6270bb" - type: Sprite sprite: Objects/Decoration/Flora/flora_treeslight.rsi - state: tree01 + layers: + - state: tree01 + map: ["random"] + - type: RandomSprite + available: + - random: + tree01: "" + tree02: "" + tree03: "" + tree04: "" + tree05: "" + tree06: "" - type: Destructible thresholds: - trigger: @@ -603,44 +418,4 @@ spawn: MobLuminousObject: min: 0 - max: 1 - -- type: entity - parent: LightTree01 - id: LightTree02 - components: - - type: Sprite - sprite: Objects/Decoration/Flora/flora_treeslight.rsi - state: tree02 - -- type: entity - parent: LightTree01 - id: LightTree03 - components: - - type: Sprite - sprite: Objects/Decoration/Flora/flora_treeslight.rsi - state: tree03 - -- type: entity - parent: LightTree01 - id: LightTree04 - components: - - type: Sprite - sprite: Objects/Decoration/Flora/flora_treeslight.rsi - state: tree04 - -- type: entity - parent: LightTree01 - id: LightTree05 - components: - - type: Sprite - sprite: Objects/Decoration/Flora/flora_treeslight.rsi - state: tree05 - -- type: entity - parent: LightTree01 - id: LightTree06 - components: - - type: Sprite - sprite: Objects/Decoration/Flora/flora_treeslight.rsi - state: tree06 + max: 1 \ No newline at end of file diff --git a/Resources/Prototypes/Entities/Objects/Misc/kudzu.yml b/Resources/Prototypes/Entities/Objects/Misc/kudzu.yml index e6b81e7ce4..21b710a618 100644 --- a/Resources/Prototypes/Entities/Objects/Misc/kudzu.yml +++ b/Resources/Prototypes/Entities/Objects/Misc/kudzu.yml @@ -134,12 +134,12 @@ offset: 0.2 chance: 0.05 prototypes: - - LightTree01 - - LightTree02 - - LightTree03 - - LightTree04 - - LightTree05 - - LightTree06 + - LightTree #TODO: transform into EntityTable with weight + - LightTree + - LightTree + - LightTree + - LightTree + - LightTree - CrystalCyan rarePrototypes: - AnomalyFloraBulb diff --git a/Resources/Prototypes/Polymorphs/polymorph.yml b/Resources/Prototypes/Polymorphs/polymorph.yml index fe28287cb0..745e032e7d 100644 --- a/Resources/Prototypes/Polymorphs/polymorph.yml +++ b/Resources/Prototypes/Polymorphs/polymorph.yml @@ -109,7 +109,7 @@ - type: polymorph id: TreeMorph configuration: - entity: FloraTree01 + entity: FloraTree forced: true transferName: true revertOnDeath: true diff --git a/Resources/Prototypes/Procedural/biome_templates.yml b/Resources/Prototypes/Procedural/biome_templates.yml index 8897931644..588d95f40d 100644 --- a/Resources/Prototypes/Procedural/biome_templates.yml +++ b/Resources/Prototypes/Procedural/biome_templates.yml @@ -46,9 +46,7 @@ allowedTiles: - FloorAsteroidSand entities: - - FloraRockSolid01 - - FloraRockSolid02 - - FloraRockSolid03 + - FloraRockSolid # Large rock areas - !type:BiomeEntityLayer threshold: -0.20 @@ -135,18 +133,8 @@ allowedTiles: - FloorPlanetGrass entities: - - FloraTree01 - - FloraTree02 - - FloraTree03 - - FloraTree04 - - FloraTree05 - - FloraTree06 - - FloraTreeLarge01 - - FloraTreeLarge02 - - FloraTreeLarge03 - - FloraTreeLarge04 - - FloraTreeLarge05 - - FloraTreeLarge06 + - FloraTree + - FloraTreeLarge # Rock formations - !type:BiomeEntityLayer allowedTiles: @@ -261,9 +249,7 @@ allowedTiles: - FloorBasalt entities: - - FloraRockSolid01 - - FloraRockSolid02 - - FloraRockSolid03 + - FloraRockSolid - !type:BiomeEntityLayer threshold: 0.2 noise: @@ -384,12 +370,7 @@ allowedTiles: - FloorSnow entities: - - FloraTreeSnow01 - - FloraTreeSnow02 - - FloraTreeSnow03 - - FloraTreeSnow04 - - FloraTreeSnow05 - - FloraTreeSnow06 + - FloraTreeSnow # Rock formations - !type:BiomeEntityLayer allowedTiles: @@ -479,12 +460,7 @@ allowedTiles: - FloorChromite entities: - - ShadowTree01 - - ShadowTree02 - - ShadowTree03 - - ShadowTree04 - - ShadowTree05 - - ShadowTree06 + - ShadowTree # Rock formations - !type:BiomeEntityLayer threshold: -0.2 @@ -548,12 +524,7 @@ allowedTiles: - FloorAsteroidSand entities: - - FloraStalagmite1 - - FloraStalagmite2 - - FloraStalagmite3 - - FloraStalagmite4 - - FloraStalagmite5 - - FloraStalagmite6 + - FloraStalagmite - !type:BiomeEntityLayer threshold: -0.5 invert: true @@ -601,12 +572,7 @@ allowedTiles: - FloorAsteroidSand entities: - - FloraStalagmite1 - - FloraStalagmite2 - - FloraStalagmite3 - - FloraStalagmite4 - - FloraStalagmite5 - - FloraStalagmite6 + - FloraStalagmite - !type:BiomeEntityLayer threshold: -0.6 invert: true diff --git a/Resources/Prototypes/Procedural/dungeon_configs.yml b/Resources/Prototypes/Procedural/dungeon_configs.yml index d75581bbc2..c296aafad6 100644 --- a/Resources/Prototypes/Procedural/dungeon_configs.yml +++ b/Resources/Prototypes/Procedural/dungeon_configs.yml @@ -102,12 +102,7 @@ - !type:CorridorClutterDunGen contents: - - id: FloraStalagmite1 - - id: FloraStalagmite2 - - id: FloraStalagmite3 - - id: FloraStalagmite4 - - id: FloraStalagmite5 - - id: FloraStalagmite6 + - id: FloraStalagmite - !type:BoundaryWallDunGen diff --git a/Resources/ServerInfo/Guidebook/Mobs/Diona.xml b/Resources/ServerInfo/Guidebook/Mobs/Diona.xml index eedf23b14f..6c9e4ba208 100644 --- a/Resources/ServerInfo/Guidebook/Mobs/Diona.xml +++ b/Resources/ServerInfo/Guidebook/Mobs/Diona.xml @@ -16,7 +16,7 @@ ## Make Like A Tree And Leave - + Being exposed to too much Robust Harvest will cause a Diona to grow out of control, turning into an immobile tree (dropping all their equipment). Cutting down the tree will "restore" the Diona to their mobile state. diff --git a/Resources/Textures/Objects/Decoration/Flora/flora_trees.rsi/icon.png b/Resources/Textures/Objects/Decoration/Flora/flora_trees.rsi/icon.png deleted file mode 100644 index 41499b67b3d75dc598afc0e8dda7d55b7ddfca9d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4850 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