From 913e2621784900bc9c9c5475c5f5f303c1c29e4b Mon Sep 17 00:00:00 2001 From: Penelope Haze Date: Sun, 5 Jan 2025 01:43:21 -0500 Subject: [PATCH 1/2] Move golems to xenobiology modpack --- code/__defines/mobs.dm | 1 - code/controllers/subsystems/initialization/modpacks.dm | 2 +- mods/content/xenobiology/_xenobiology.dm | 5 +++++ mods/content/xenobiology/_xenobiology.dme | 2 ++ .../station => mods/content/xenobiology/species}/golem.dm | 0 .../content/xenobiology/species/golem_organs.dm | 0 nebula.dme | 2 -- 7 files changed, 8 insertions(+), 4 deletions(-) rename {code/modules/species/station => mods/content/xenobiology/species}/golem.dm (100%) rename code/modules/organs/internal/species/golem.dm => mods/content/xenobiology/species/golem_organs.dm (100%) diff --git a/code/__defines/mobs.dm b/code/__defines/mobs.dm index 022c6011a7a..95c2748734a 100644 --- a/code/__defines/mobs.dm +++ b/code/__defines/mobs.dm @@ -273,7 +273,6 @@ #define SPECIES_HUMAN "Human" #define SPECIES_MONKEY "Monkey" #define SPECIES_ALIEN "Humanoid" -#define SPECIES_GOLEM "Golem" #define SURGERY_CLOSED 0 #define SURGERY_OPEN 1 diff --git a/code/controllers/subsystems/initialization/modpacks.dm b/code/controllers/subsystems/initialization/modpacks.dm index f2f6c65a2e6..0b3277ce66e 100644 --- a/code/controllers/subsystems/initialization/modpacks.dm +++ b/code/controllers/subsystems/initialization/modpacks.dm @@ -6,7 +6,7 @@ SUBSYSTEM_DEF(modpacks) // Compiled modpack information. var/list/default_submap_whitelisted_species = list() - var/list/default_submap_blacklisted_species = list(SPECIES_ALIEN, SPECIES_GOLEM) + var/list/default_submap_blacklisted_species = list(SPECIES_ALIEN) var/list/modpack_nanoui_directories = list() /datum/controller/subsystem/modpacks/Initialize() diff --git a/mods/content/xenobiology/_xenobiology.dm b/mods/content/xenobiology/_xenobiology.dm index aa3c42d3480..ab4b0f9da7a 100644 --- a/mods/content/xenobiology/_xenobiology.dm +++ b/mods/content/xenobiology/_xenobiology.dm @@ -1,4 +1,9 @@ #define isslime(X) istype(X, /mob/living/slime) +#define SPECIES_GOLEM "Golem" /decl/modpack/xenobiology name = "Xenobiology" + +/decl/modpack/xenobiology/initialize() + . = ..() + SSmodpacks.default_submap_blacklisted_species += SPECIES_GOLEM diff --git a/mods/content/xenobiology/_xenobiology.dme b/mods/content/xenobiology/_xenobiology.dme index 1591ea3f458..4057d6b485b 100644 --- a/mods/content/xenobiology/_xenobiology.dme +++ b/mods/content/xenobiology/_xenobiology.dme @@ -53,5 +53,7 @@ #include "slime\slime_reagents.dm" #include "slime\slime_surgery.dm" #include "slime\slime_update_icon.dm" +#include "species\golem.dm" +#include "species\golem_organs.dm" // END_INCLUDE #endif \ No newline at end of file diff --git a/code/modules/species/station/golem.dm b/mods/content/xenobiology/species/golem.dm similarity index 100% rename from code/modules/species/station/golem.dm rename to mods/content/xenobiology/species/golem.dm diff --git a/code/modules/organs/internal/species/golem.dm b/mods/content/xenobiology/species/golem_organs.dm similarity index 100% rename from code/modules/organs/internal/species/golem.dm rename to mods/content/xenobiology/species/golem_organs.dm diff --git a/nebula.dme b/nebula.dme index 01ffa95cb81..c2e5aaf8939 100644 --- a/nebula.dme +++ b/nebula.dme @@ -3347,7 +3347,6 @@ #include "code\modules\organs\internal\lungs.dm" #include "code\modules\organs\internal\stomach.dm" #include "code\modules\organs\internal\voice.dm" -#include "code\modules\organs\internal\species\golem.dm" #include "code\modules\overmap\_defines.dm" #include "code\modules\overmap\_overmap.dm" #include "code\modules\overmap\overmap_object.dm" @@ -3793,7 +3792,6 @@ #include "code\modules\species\species_helpers.dm" #include "code\modules\species\species_hud.dm" #include "code\modules\species\outsider\random.dm" -#include "code\modules\species\station\golem.dm" #include "code\modules\species\station\human.dm" #include "code\modules\species\station\human_bodytypes.dm" #include "code\modules\species\station\monkey.dm" From df3812630c98331ba01340985145e490bed33a5c Mon Sep 17 00:00:00 2001 From: Penelope Haze Date: Sun, 5 Jan 2025 02:42:28 -0500 Subject: [PATCH 2/2] Move random alien species to modpack --- code/__defines/mobs.dm | 1 - .../subsystems/initialization/modpacks.dm | 2 +- code/game/objects/random/random.dm | 2 + code/modules/species/outsider/random.dm | 142 -- maps/__map_modpack_compatibility.dm | 25 + maps/modpack_testing/modpack_testing.dm | 1 + mods/gamemodes/heist/heist_base.dmm | 10 +- mods/gamemodes/ninja/maps/ninja_base.dmm | 1305 ++++++++--------- .../species/random_species/_random_species.dm | 8 + .../random_species/_random_species.dme | 9 + mods/species/random_species/aliumizer.dm | 34 + .../random_species/random_species_bodytype.dm | 28 + .../random_species/random_species_species.dm | 80 + nebula.dme | 2 +- 14 files changed, 839 insertions(+), 810 deletions(-) delete mode 100644 code/modules/species/outsider/random.dm create mode 100644 maps/__map_modpack_compatibility.dm create mode 100644 mods/species/random_species/_random_species.dm create mode 100644 mods/species/random_species/_random_species.dme create mode 100644 mods/species/random_species/aliumizer.dm create mode 100644 mods/species/random_species/random_species_bodytype.dm create mode 100644 mods/species/random_species/random_species_species.dm diff --git a/code/__defines/mobs.dm b/code/__defines/mobs.dm index 95c2748734a..00633e438b2 100644 --- a/code/__defines/mobs.dm +++ b/code/__defines/mobs.dm @@ -272,7 +272,6 @@ #define SPECIES_HUMAN "Human" #define SPECIES_MONKEY "Monkey" -#define SPECIES_ALIEN "Humanoid" #define SURGERY_CLOSED 0 #define SURGERY_OPEN 1 diff --git a/code/controllers/subsystems/initialization/modpacks.dm b/code/controllers/subsystems/initialization/modpacks.dm index 0b3277ce66e..7a44aec55c6 100644 --- a/code/controllers/subsystems/initialization/modpacks.dm +++ b/code/controllers/subsystems/initialization/modpacks.dm @@ -6,7 +6,7 @@ SUBSYSTEM_DEF(modpacks) // Compiled modpack information. var/list/default_submap_whitelisted_species = list() - var/list/default_submap_blacklisted_species = list(SPECIES_ALIEN) + var/list/default_submap_blacklisted_species = list() var/list/modpack_nanoui_directories = list() /datum/controller/subsystem/modpacks/Initialize() diff --git a/code/game/objects/random/random.dm b/code/game/objects/random/random.dm index 1e9a08082aa..a600a4a68c5 100644 --- a/code/game/objects/random/random.dm +++ b/code/game/objects/random/random.dm @@ -24,6 +24,8 @@ return var/type_to_spawn = item_to_spawn() + if(!type_to_spawn) + return if(islist(type_to_spawn)) for(var/spawn_type in type_to_spawn) LAZYADD(., create_instance(spawn_type, loc)) diff --git a/code/modules/species/outsider/random.dm b/code/modules/species/outsider/random.dm deleted file mode 100644 index af9094b53ca..00000000000 --- a/code/modules/species/outsider/random.dm +++ /dev/null @@ -1,142 +0,0 @@ -/decl/bodytype/alium - name = "humanoid" - bodytype_category = BODYTYPE_HUMANOID - icon_base = 'icons/mob/human_races/species/humanoid/body.dmi' - bandages_icon = 'icons/mob/bandage.dmi' - limb_blend = ICON_MULTIPLY - appearance_flags = HAS_SKIN_COLOR - body_flags = BODY_FLAG_NO_DNA | BODY_FLAG_NO_DEFIB | BODY_FLAG_NO_STASIS - uid = "bodytype_alium" - -/decl/bodytype/alium/Initialize() - if(prob(10)) - movement_slowdown += pick(-1,1) - if(prob(5)) - body_flags |= BODY_FLAG_NO_PAIN - base_color = RANDOM_RGB - MULT_BY_RANDOM_COEF(eye_flash_mod, 0.5, 1.5) - eye_darksight_range = rand(1,8) - var/temp_comfort_shift = rand(-50,50) - cold_level_1 += temp_comfort_shift - cold_level_2 += temp_comfort_shift - cold_level_3 += temp_comfort_shift - heat_level_1 += temp_comfort_shift - heat_level_2 += temp_comfort_shift - heat_level_3 += temp_comfort_shift - heat_discomfort_level += temp_comfort_shift - cold_discomfort_level += temp_comfort_shift - . = ..() - -/decl/species/alium - name = SPECIES_ALIEN - name_plural = "Humanoids" - description = "Some alien humanoid species, unknown to humanity. How exciting." - rarity_value = 5 - hidden_from_codex = TRUE - - spawn_flags = SPECIES_IS_RESTRICTED - - available_bodytypes = list(/decl/bodytype/alium) - - force_background_info = list( - /decl/background_category/heritage = /decl/background_detail/heritage/hidden/alium - ) - - exertion_effect_chance = 10 - exertion_hydration_scale = 1 - exertion_reagent_scale = 1 - exertion_reagent_path = /decl/material/liquid/lactate - exertion_emotes_biological = list( - /decl/emote/exertion/biological, - /decl/emote/exertion/biological/breath, - /decl/emote/exertion/biological/pant - ) - var/blood_color - -/decl/species/alium/Initialize() - - //Coloring - blood_color = RANDOM_RGB - flesh_color = RANDOM_RGB - - //Combat stats - MULT_BY_RANDOM_COEF(total_health, 0.8, 1.2) - MULT_BY_RANDOM_COEF(brute_mod, 0.5, 1.5) - MULT_BY_RANDOM_COEF(burn_mod, 0.8, 1.2) - MULT_BY_RANDOM_COEF(oxy_mod, 0.5, 1.5) - MULT_BY_RANDOM_COEF(toxins_mod, 0, 2) - MULT_BY_RANDOM_COEF(radiation_mod, 0, 2) - - if(brute_mod < 1 && prob(40)) - species_flags |= SPECIES_FLAG_NO_MINOR_CUT - if(brute_mod < 0.9 && prob(40)) - species_flags |= SPECIES_FLAG_NO_EMBED - if(toxins_mod < 0.1) - species_flags |= SPECIES_FLAG_NO_POISON - - //Gastronomic traits - taste_sensitivity = pick(TASTE_HYPERSENSITIVE, TASTE_SENSITIVE, TASTE_DULL, TASTE_NUMB) - gluttonous = pick(0, GLUT_TINY, GLUT_SMALLER, GLUT_ANYTHING) - stomach_capacity = 5 * stomach_capacity - if(prob(20)) - gluttonous |= pick(GLUT_ITEM_TINY, GLUT_ITEM_NORMAL, GLUT_ITEM_ANYTHING, GLUT_PROJECTILE_VOMIT) - if(gluttonous & GLUT_ITEM_ANYTHING) - stomach_capacity += ITEM_SIZE_HUGE - - //Environment - var/temp_comfort_shift = rand(-50,50) - body_temperature += temp_comfort_shift - - var/pressure_comfort_shift = rand(-50,50) - hazard_high_pressure += pressure_comfort_shift - warning_high_pressure += pressure_comfort_shift - warning_low_pressure += pressure_comfort_shift - hazard_low_pressure += pressure_comfort_shift - - //Misc traits - if(prob(40)) - available_pronouns = list(/decl/pronouns) - if(prob(10)) - species_flags |= SPECIES_FLAG_NO_SLIP - if(prob(10)) - species_flags |= SPECIES_FLAG_NO_TANGLE - - . = ..() - -/decl/species/alium/get_species_blood_color(mob/living/human/H) - if(istype(H) && H.isSynthetic()) - return ..() - return blood_color - -/obj/structure/aliumizer - name = "alien monolith" - desc = "Your true form is calling. Use this to become an alien humanoid." - icon = 'icons/obj/xenoarchaeology.dmi' - icon_state = "ano51" - anchored = TRUE - -/obj/structure/aliumizer/attack_hand(mob/user) - SHOULD_CALL_PARENT(FALSE) - if(!ishuman(user)) - to_chat(user, SPAN_WARNING("You've got no business touching this.")) - return TRUE - var/decl/species/species = user.get_species() - if(!species) - return TRUE - if(species.name == SPECIES_ALIEN) - to_chat(user, SPAN_WARNING("You're already a [SPECIES_ALIEN].")) - return TRUE - if(alert("Are you sure you want to be an alien?", "Mom Look I'm An Alien!", "Yes", "No") == "No") - to_chat(user, SPAN_NOTICE("You are now a [SPECIES_ALIEN]!")) - return TRUE - if(species.name == SPECIES_ALIEN) //no spamming it to get free implants - return TRUE - to_chat(user, "You're now an alien humanoid of some undiscovered species. Make up what lore you want, no one knows a thing about your species! You can check info about your traits with Check Species Info verb in IC tab.") - to_chat(user, "You can't speak any other languages by default. You can use translator implant that spawns on top of this monolith - it will give you knowledge of any language if you hear it enough times.") - var/mob/living/human/H = user - new /obj/item/implanter/translator(get_turf(src)) - H.change_species(SPECIES_ALIEN) - var/decl/background_detail/background = H.get_background_datum_by_flag(BACKGROUND_FLAG_NAMING) - H.fully_replace_character_name(background.get_random_name(H, H.gender)) - H.rename_self("Humanoid Alien", 1) - return TRUE diff --git a/maps/__map_modpack_compatibility.dm b/maps/__map_modpack_compatibility.dm new file mode 100644 index 00000000000..288644f46e2 --- /dev/null +++ b/maps/__map_modpack_compatibility.dm @@ -0,0 +1,25 @@ +// This must be included before maps and any modpacks that use it. +// That includes before _map_include.dm. + +/// A spawner that can have its path overridden by a modpack, so that maps can have optional modpack compatibility. +/obj/abstract/modpack_compat + abstract_type = /obj/abstract/modpack_compat + name = "optional modpack object" + desc = "This item type is used to spawn a movable at roundstart, whether a modpack is included or not." + icon = 'icons/misc/mark.dmi' + icon_state = "rup" + var/atom/movable/spawn_object + +/obj/abstract/modpack_compat/Initialize() + ..() + if(ispath(spawn_object)) + new spawn_object + return INITIALIZE_HINT_QDEL + +#define OPTIONAL_SPAWNER(TYPE, VALUE) \ +/obj/abstract/modpack_compat/##TYPE { \ + spawn_object = VALUE; \ +} + +/// This spawner is used to optionally spawn the aliumizer if the random aliens modpack is included. +OPTIONAL_SPAWNER(aliumizer, null) \ No newline at end of file diff --git a/maps/modpack_testing/modpack_testing.dm b/maps/modpack_testing/modpack_testing.dm index e6dea707f30..af02fb7233b 100644 --- a/maps/modpack_testing/modpack_testing.dm +++ b/maps/modpack_testing/modpack_testing.dm @@ -49,6 +49,7 @@ #include "../../mods/species/serpentid/_serpentid.dme" #include "../../mods/species/utility_frames/_utility_frames.dme" #include "../../mods/species/vox/_vox.dme" + #include "../../mods/species/random_species/_random_species.dme" #define USING_MAP_DATUM /datum/map/modpack_testing diff --git a/mods/gamemodes/heist/heist_base.dmm b/mods/gamemodes/heist/heist_base.dmm index fee7c80e11c..b127999b03b 100644 --- a/mods/gamemodes/heist/heist_base.dmm +++ b/mods/gamemodes/heist/heist_base.dmm @@ -112,7 +112,7 @@ /turf/unsimulated/floor/plating, /area/map_template/syndicate_mothership/raider_base) "aA" = ( -/obj/structure/aliumizer, +/obj/abstract/modpack_compat/aliumizer, /turf/unsimulated/floor/asteroid, /area/map_template/syndicate_mothership/raider_base) "aB" = ( @@ -737,7 +737,7 @@ /obj/machinery/door/blast/regular/open{ id_tag = "SkipjackShuttersNorth"; name = "Blast Doors"; - + }, /obj/effect/wallframe_spawn/reinforced/titanium, /obj/effect/paint/brown, @@ -1104,7 +1104,7 @@ dir = 4; id_tag = "SkipjackShuttersWest"; name = "Skipjack Shutters"; - + }, /obj/effect/wallframe_spawn/reinforced/titanium, /obj/effect/paint/brown, @@ -1131,7 +1131,7 @@ dir = 8; id_tag = "SkipjackShuttersEast"; name = "Skipjack Shutters"; - + }, /obj/effect/wallframe_spawn/reinforced/titanium, /obj/effect/paint/brown, @@ -1203,7 +1203,7 @@ dir = 4; id_tag = "SkipjackShuttersWest"; name = "Skipjack Shutters"; - + }, /obj/effect/wallframe_spawn/reinforced/titanium, /turf/floor/plating, diff --git a/mods/gamemodes/ninja/maps/ninja_base.dmm b/mods/gamemodes/ninja/maps/ninja_base.dmm index 828d006063e..9b4d2bb2ad4 100644 --- a/mods/gamemodes/ninja/maps/ninja_base.dmm +++ b/mods/gamemodes/ninja/maps/ninja_base.dmm @@ -2,17 +2,10 @@ "ac" = ( /turf/unsimulated/floor/snow, /area/map_template/ninja_dojo/dojo) -"ad" = ( -/turf/unsimulated/floor/snow, -/area/map_template/ninja_dojo/dojo) "ae" = ( /obj/effect/floor_decal/asteroid, /turf/unsimulated/floor/snow, /area/map_template/ninja_dojo/dojo) -"af" = ( -/obj/effect/floor_decal/asteroid, -/turf/unsimulated/floor/snow, -/area/map_template/ninja_dojo/dojo) "ag" = ( /obj/structure/flora/tree/dead, /turf/unsimulated/floor/snow, @@ -21,10 +14,6 @@ /obj/structure/flora/tree/pine, /turf/unsimulated/floor/snow, /area/map_template/ninja_dojo/dojo) -"ai" = ( -/obj/structure/flora/tree/dead, -/turf/unsimulated/floor/snow, -/area/map_template/ninja_dojo/dojo) "aj" = ( /turf/wall/wood, /area/map_template/ninja_dojo/dojo) @@ -156,10 +145,6 @@ "aG" = ( /turf/unsimulated/floor/wood, /area/map_template/ninja_dojo/dojo) -"aH" = ( -/obj/structure/flora/tree/pine, -/turf/unsimulated/floor/snow, -/area/map_template/ninja_dojo/dojo) "aI" = ( /obj/structure/iv_drip, /obj/structure/window/reinforced/crescent, @@ -500,7 +485,7 @@ /area/map_template/ninja_dojo/dojo) "bM" = ( /obj/effect/floor_decal/snow, -/obj/structure/aliumizer, +/obj/abstract/modpack_compat/aliumizer, /turf/unsimulated/floor/ice, /area/map_template/ninja_dojo/dojo) "bN" = ( @@ -905,7 +890,7 @@ /obj/machinery/door/blast/regular/open{ id_tag = "ninjadoor"; name = "Blast Door"; - + }, /turf/unsimulated/floor/dark, /area/map_template/ninja_dojo/start) @@ -1103,11 +1088,11 @@ ss ss ac ac -ad -ad ac ac -af +ac +ac +ae ac ac ac @@ -1117,14 +1102,14 @@ ac ac ac ac -ad +ac ag bn bo -ad +ac ag ac -ad +ac bn bn bn @@ -1144,30 +1129,30 @@ ss "} (3,1,1) = {" ss -ad -af -ad -ad -ad -ai -ad ac -ad -ad +ae +ac +ac +ac +ag +ac +ac +ac +ac +ac +ac +ac ac -ad -ad -ad ac ae -ad -ad +ac +ac bo bn -ad -ad -ad -ad +ac +ac +ac +ac bn bo bo @@ -1187,29 +1172,29 @@ ss "} (4,1,1) = {" ss -ad -ad -ad ac ac -ad -ad ac ac -aH ac -ad -ad -ad -ad -ad -ad -ad +ac +ac +ac +ac +ah +ac +ac +ac +ac +ac +ac +ac +ac bn bn ac -ad -ad +ac +ac ac bn bn @@ -1230,30 +1215,30 @@ ss "} (5,1,1) = {" ss -ad -ad -ad ac -ad -ad ac -ad -ad ac ac -ad -ad -ad -ad -ad -ad -ad +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac bn bo -ad -ad +ac +ac ae -ad +ac bo bn bn @@ -1277,26 +1262,26 @@ ac ac ac ae -ad -ad -ad ac ac ac -ad -ad -ad -ad +ac +ac +ac +ac +ac +ac +ac ae ac ac ag bo bn -ad +ac ag -ad -ad +ac +ac bo bn ck @@ -1320,7 +1305,7 @@ ac ac ac ac -ad +ac aj aj aj @@ -1329,17 +1314,17 @@ aj aj aj aj -ad -ad -ad -ad -ad +ac +ac +ac +ac +ac bn bn -ad -ad -ad -ad +ac +ac +ac +ac bo bn bn @@ -1363,7 +1348,7 @@ ac ac ac ac -ad +ac aj ak ar @@ -1382,7 +1367,7 @@ bh aA aj aj -ad +ac bn bn bn @@ -1405,8 +1390,8 @@ ss ac ag ac -ad -ad +ac +ac aj al ao @@ -1425,7 +1410,7 @@ aG aG bT aj -ad +ac bn bn bn @@ -1447,9 +1432,9 @@ ss ss ac ac -ad -ad -ad +ac +ac +ac aj am ao @@ -1468,7 +1453,7 @@ bG bP bU aA -ad +ac bn bn ck @@ -1490,9 +1475,9 @@ ss ss ac ac -ad -ad -ad +ac +ac +ac aj an at @@ -1533,9 +1518,9 @@ ss ss ac ac -ad -ad -ad +ac +ac +ac aj ao ao @@ -1575,10 +1560,10 @@ ss (13,1,1) = {" ss ac -ad -ad -ad -ad +ac +ac +ac +ac aj ao ao @@ -1597,7 +1582,7 @@ bI bR aU aA -ad +ac bn bn bo @@ -1618,10 +1603,10 @@ ss (14,1,1) = {" ss ac -ad +ac ac ae -ad +ac aj aq aw @@ -1640,7 +1625,7 @@ aG aG bV aj -ad +ac bn bn bn @@ -1661,10 +1646,10 @@ ss (15,1,1) = {" ss ac -ad ac ac -ad +ac +ac aj aj aj @@ -1683,7 +1668,7 @@ bh aA aj aj -ad +ac bo bn bn @@ -1703,12 +1688,12 @@ ss "} (16,1,1) = {" ss -ad -ad ac ac -ad -ad +ac +ac +ac +ac aj ax aE @@ -1716,42 +1701,42 @@ aA aV aG aj -ad -ad -ad -ad -ad +ac +ac +ac +ac +ac bn bn -ad -ad -ad -ad -ad -ad -ad -ad +ac +ac +ac +ac +ac +ac +ac +ac bn bn -ad -ad -ad ac -ad -ad -ad -ad -ad +ac +ac +ac +ac +ac +ac +ac +ac ss "} (17,1,1) = {" ss -ad ac -ad ac -ad -ad +ac +ac +ac +ac aj ay aE @@ -1770,26 +1755,26 @@ bo bn bn bn -ad -ad +ac +ac ae -ad +ac bn bn -ad ac ac -ad -ad -ad -ad +ac +ac +ac +ac +ac ac ah ss "} (18,1,1) = {" ss -ad +ac ac ah ac @@ -1802,42 +1787,42 @@ aA aG aG aA -ad +ac bn ag bn -ad -ad -ad -ad +ac +ac +ac +ac bn ah bn ac -ad -ad -ad +ac +ac +ac bn bn -ad -ad -ad -ad +ac +ac +ac +ac ag -ad -ad -ad -ad +ac +ac +ac +ac ss "} (19,1,1) = {" ss -ad -ad -ad ac ac -ad +ac +ac +ac +ac aj aj aj @@ -1845,88 +1830,88 @@ aj aG bb aj -ad +ac bo bn bn -ad -ad -ad -ad +ac +ac +ac +ac bn bn bn ac -ad -ad +ac +ac ac bn bo -ad +ac ae -ad -ad ac ac -ad -ad +ac +ac +ac +ac ae ss "} (20,1,1) = {" ss -ad -ad ac ac -ad -ad -ad ac -ad +ac +ac +ac +ac +ac +ac aA aG aG aj -ad +ac bn -ad -ad +ac +ac bD bE bE bE -ad -ad +ac +ac bn -ad -ad -ad +ac +ac +ac ac bn bn -ad -ad ac -ad -ad -ad -ad ac -ad +ac +ac +ac +ac +ac +ac +ac ss "} (21,1,1) = {" ss -ad -ad ac -ad ac -ad -ad -af -ad +ac +ac +ac +ac +ac +ae +ac aA aG aG @@ -1934,13 +1919,13 @@ bh bn bn ae -ad +ac bE bJ bM bD -ad -ad +ac +ac bo bn bo @@ -1948,28 +1933,28 @@ bn bn bn bn -ad -ad ac -ad ac -ad -ad -ad +ac +ac +ac +ac +ac +ac ac ss "} (22,1,1) = {" ss ac -ad ac -ad -ai -ad -ad ac -ad +ac +ag +ac +ac +ac +ac aA aG aG @@ -1982,8 +1967,8 @@ bD bJ bJ bE -ad -ad +ac +ac bo bn bn @@ -1991,15 +1976,15 @@ bo bn bn bn -ad -ad -ad -ad ac -ad -ad -ad -ad +ac +ac +ac +ac +ac +ac +ac +ac ss "} (23,1,1) = {" @@ -2007,146 +1992,146 @@ ss ac ac ac -ad -ad -ad -ad ac -ad +ac +ac +ac +ac +ac aA aG aG aj -ad +ac bn ac -ad +ac bE bE bD bE ac -ad +ac bn ac -ad -ad -ad +ac +ac +ac bn bn -ad -ad -ad -ad -ad -ad -ad +ac +ac +ac +ac +ac +ac +ac ag -ad +ac ss "} (24,1,1) = {" ss -ad -ad -ad -ad -ad -ad ac -ad -ad +ac +ac +ac +ac +ac +ac +ac +ac aj aG aG aj -ad +ac bn bn bn -ad ac -ad -ad +ac +ac +ac bn bn bn ac ae -ad -ad +ac +ac bn bn -ad -ad -ad -ad -ad -ad -ad -ad -ad +ac +ac +ac +ac +ac +ac +ac +ac +ac ss "} (25,1,1) = {" ss ac -ad -ad -ad -ad -ad ac -ad -ad +ac +ac +ac +ac +ac +ac +ac aj aG aG aA -ad +ac bo bt bn -ad -ad -ad +ac +ac +ac ac bn ag bn ac -ad +ac aj aj cu cu aj aj -ad -ad +ac +ac ae -ad -ad -ad -ad +ac +ac +ac +ac ss "} (26,1,1) = {" ss -ad -ad -ad -ad ac ac ac -ad -ad +ac +ac +ac +ac +ac +ac aj aG aG aA -ad +ac bn bn bn @@ -2157,73 +2142,73 @@ bn bn bo bn -ad -ad +ac +ac aj cm cp cp cy aj -ad -ad -ad ac ac ac -ad +ac +ac +ac +ac ss "} (27,1,1) = {" ss -ad ac ac -ad -ad ac ac -ad -ad +ac +ac +ac +ac +ac aj aV aG aj -ad -ad -ad -ad -ad +ac +ac +ac +ac +ac bn bn -ad -ad +ac +ac ae -ad -ad -ad +ac +ac +ac aj cn cp cp cz aj -ad -ad -ad ac -ad ac -ad +ac +ac +ac +ac +ac ss "} (28,1,1) = {" ss -ad -ad ac ac -ad +ac +ac +ac ae ac aj @@ -2251,22 +2236,22 @@ cp cp cA aj -ad -ad -ad -ad -ad ac -ad +ac +ac +ac +ac +ac +ac ss "} (29,1,1) = {" ss -ad +ac ae ac -ad -ad +ac +ac ae ac aj @@ -2294,13 +2279,13 @@ cp cp cB aj -ad -ad -ad -ad -ad -af -ad +ac +ac +ac +ac +ac +ae +ac ss "} (30,1,1) = {" @@ -2309,9 +2294,9 @@ ac ac ac ac -ad ac -ad +ac +ac aA aG aG @@ -2337,13 +2322,13 @@ cp cp cC aj -ad -ad -ad -ad -ad ac -ad +ac +ac +ac +ac +ac +ac ss "} (31,1,1) = {" @@ -2354,7 +2339,7 @@ ac ac ac ac -ad +ac aA aG aO @@ -2380,24 +2365,24 @@ cp cp cD aj -ad -ad ac -ad -ad -ad -ad +ac +ac +ac +ac +ac +ac ss "} (32,1,1) = {" ss -ad -ad ac -ad ac ac -ad +ac +ac +ac +ac aA aG aP @@ -2423,24 +2408,24 @@ cp cp cE aj -ad -ad -ad -ad -aH ac -ad +ac +ac +ac +ah +ac +ac ss "} (33,1,1) = {" ss -ad -ad +ac +ac ac ag -ad ac -ad +ac +ac aA aG aP @@ -2466,24 +2451,24 @@ cp cp cF aj -ad -ad -ad -ad ac -ad -ad +ac +ac +ac +ac +ac +ac ss "} (34,1,1) = {" ss -ad -ad ac -ad -ad ac -ad +ac +ac +ac +ac +ac aA aG aQ @@ -2509,24 +2494,24 @@ cv cw aj aj -ad -ad -ad -ad -ad -ad -ad +ac +ac +ac +ac +ac +ac +ac ss "} (35,1,1) = {" ss -ad -ad -ad ac -ad ac -ad +ac +ac +ac +ac +ac aj aG aG @@ -2551,25 +2536,25 @@ aj aj aj aj -ad -ad -ad -ad -ad -ad -ad -ad +ac +ac +ac +ac +ac +ac +ac +ac ss "} (36,1,1) = {" ss -ad -ad -ad -ad -ad -ad -ad +ac +ac +ac +ac +ac +ac +ac aj aj aA @@ -2590,119 +2575,111 @@ cc ci ci aj -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac ss "} (37,1,1) = {" ss ae -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac aj cd ci ci aj -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad ac -ad +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac ss "} (38,1,1) = {" ss -ad -ad -ad -ad -ac -ad -ad -ad -ad -ad -ad +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac ae -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac aj aj aj aj aj -ad +ac ae ac ac -ad -ad -ad -ad -ad -ad ac -ad +ac +ac +ac +ac +ac +ac +ac ss "} (39,1,1) = {" ss -ad +ac ag -ad -ad ac -ad -ad -ad -ad -ad -ad ac ac ac @@ -2711,198 +2688,206 @@ ac ac ac ac -ad -ad -ad -ad -ad -ad -ad -ad -ad ac ac -ad -ad -ad ac -ad -ad -ad ac -ad +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac ss "} (40,1,1) = {" ss -ad -ad -ad -ad ac -ad -ad -ad +ac +ac +ac +ac +ac +ac +ac ag -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad ac ac ac ac -ad -ad -ad ac ac -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac ss "} (41,1,1) = {" ss -ad -ad -ad -ad -ad -ac -ad -ad -ad -ad -ad -ad -ad -ad -ad +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac ag -ad -ad -ad -ad -ad -ad -ad -ac -aH -ac -ad -ad -ad -ad -ad -ad -ad -ad -ac -ad +ac +ac +ac +ac +ac +ac +ac +ac +ah +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac ag -ad -ad +ac +ac ss "} (42,1,1) = {" ss -ad -ad -ad -ad -ad -ad -ac -ac -ac -ad -ad -ac -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ac -ac -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac ss "} (43,1,1) = {" ss -ad -ad -ad -ad -ad -ad -ad -ad -ad ac ac ac -ad +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac ae -ad -ad -ad -ad -ad -ad -ad +ac +ac +ac +ac +ac +ac +ac ae -ad -ac -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac ss "} (44,1,1) = {" diff --git a/mods/species/random_species/_random_species.dm b/mods/species/random_species/_random_species.dm new file mode 100644 index 00000000000..7f20e9a608f --- /dev/null +++ b/mods/species/random_species/_random_species.dm @@ -0,0 +1,8 @@ +#define SPECIES_ALIEN "Humanoid" + +/decl/modpack/random_species + name = "Random Alien Species" + +/decl/modpack/random_species/initialize() + . = ..() + SSmodpacks.default_submap_blacklisted_species += SPECIES_ALIEN diff --git a/mods/species/random_species/_random_species.dme b/mods/species/random_species/_random_species.dme new file mode 100644 index 00000000000..fda80f4abf4 --- /dev/null +++ b/mods/species/random_species/_random_species.dme @@ -0,0 +1,9 @@ +#ifndef SPECIES_PACK_RANDOM +#define SPECIES_PACK_RANDOM +// BEGIN_INCLUDE +#include "_random_species.dm" +#include "aliumizer.dm" +#include "random_species_bodytype.dm" +#include "random_species_species.dm" +// END_INCLUDE +#endif diff --git a/mods/species/random_species/aliumizer.dm b/mods/species/random_species/aliumizer.dm new file mode 100644 index 00000000000..6d7ab1e5796 --- /dev/null +++ b/mods/species/random_species/aliumizer.dm @@ -0,0 +1,34 @@ +/obj/structure/aliumizer + name = "alien monolith" + desc = "Your true form is calling. Use this to become an alien humanoid." + icon = 'icons/obj/xenoarchaeology.dmi' // todo: duplicate icon in modpack to avoid skew from upstream changes? + icon_state = "ano51" + anchored = TRUE + +/obj/structure/aliumizer/attack_hand(mob/user) + SHOULD_CALL_PARENT(FALSE) + if(!ishuman(user)) + to_chat(user, SPAN_WARNING("You've got no business touching this.")) + return TRUE + var/decl/species/species = user.get_species() + if(!species) + return TRUE + if(species.name == SPECIES_ALIEN) + to_chat(user, SPAN_WARNING("You're already a [SPECIES_ALIEN].")) + return TRUE + if(alert("Are you sure you want to be an alien?", "Mom Look I'm An Alien!", "Yes", "No") == "No") + to_chat(user, SPAN_NOTICE("You are now a [SPECIES_ALIEN]!")) + return TRUE + if(species.name == SPECIES_ALIEN) //no spamming it to get free implants + return TRUE + to_chat(user, "You're now an alien humanoid of some undiscovered species. Make up what lore you want, no one knows a thing about your species! You can check info about your traits with Check Species Info verb in IC tab.") + to_chat(user, "You can't speak any other languages by default. You can use translator implant that spawns on top of this monolith - it will give you knowledge of any language if you hear it enough times.") + var/mob/living/human/H = user + new /obj/item/implanter/translator(get_turf(src)) + H.change_species(SPECIES_ALIEN) + var/decl/background_detail/background = H.get_background_datum_by_flag(BACKGROUND_FLAG_NAMING) + H.fully_replace_character_name(background.get_random_name(H, H.gender)) + H.rename_self("Humanoid Alien", 1) + return TRUE + +OPTIONAL_SPAWNER(aliumizer, /obj/structure/aliumizer) \ No newline at end of file diff --git a/mods/species/random_species/random_species_bodytype.dm b/mods/species/random_species/random_species_bodytype.dm new file mode 100644 index 00000000000..b4a015834ff --- /dev/null +++ b/mods/species/random_species/random_species_bodytype.dm @@ -0,0 +1,28 @@ +/decl/bodytype/alium + name = "humanoid" + bodytype_category = BODYTYPE_HUMANOID + icon_base = 'icons/mob/human_races/species/humanoid/body.dmi' + bandages_icon = 'icons/mob/bandage.dmi' + limb_blend = ICON_MULTIPLY + appearance_flags = HAS_SKIN_COLOR + body_flags = BODY_FLAG_NO_DNA | BODY_FLAG_NO_DEFIB | BODY_FLAG_NO_STASIS + uid = "bodytype_alium" + +/decl/bodytype/alium/Initialize() + if(prob(10)) + movement_slowdown += pick(-1,1) + if(prob(5)) + body_flags |= BODY_FLAG_NO_PAIN + base_color = RANDOM_RGB + MULT_BY_RANDOM_COEF(eye_flash_mod, 0.5, 1.5) + eye_darksight_range = rand(1,8) + var/temp_comfort_shift = rand(-50,50) + cold_level_1 += temp_comfort_shift + cold_level_2 += temp_comfort_shift + cold_level_3 += temp_comfort_shift + heat_level_1 += temp_comfort_shift + heat_level_2 += temp_comfort_shift + heat_level_3 += temp_comfort_shift + heat_discomfort_level += temp_comfort_shift + cold_discomfort_level += temp_comfort_shift + . = ..() \ No newline at end of file diff --git a/mods/species/random_species/random_species_species.dm b/mods/species/random_species/random_species_species.dm new file mode 100644 index 00000000000..06f431624ac --- /dev/null +++ b/mods/species/random_species/random_species_species.dm @@ -0,0 +1,80 @@ +/decl/species/alium + name = SPECIES_ALIEN + name_plural = "Humanoids" + description = "Some alien humanoid species, unknown to humanity. How exciting." + rarity_value = 5 + hidden_from_codex = TRUE + + spawn_flags = SPECIES_IS_RESTRICTED + + available_bodytypes = list(/decl/bodytype/alium) + + force_background_info = list( + /decl/background_category/heritage = /decl/background_detail/heritage/hidden/alium + ) + + exertion_effect_chance = 10 + exertion_hydration_scale = 1 + exertion_reagent_scale = 1 + exertion_reagent_path = /decl/material/liquid/lactate + exertion_emotes_biological = list( + /decl/emote/exertion/biological, + /decl/emote/exertion/biological/breath, + /decl/emote/exertion/biological/pant + ) + var/blood_color + +/decl/species/alium/Initialize() + + //Coloring + blood_color = RANDOM_RGB + flesh_color = RANDOM_RGB + + //Combat stats + MULT_BY_RANDOM_COEF(total_health, 0.8, 1.2) + MULT_BY_RANDOM_COEF(brute_mod, 0.5, 1.5) + MULT_BY_RANDOM_COEF(burn_mod, 0.8, 1.2) + MULT_BY_RANDOM_COEF(oxy_mod, 0.5, 1.5) + MULT_BY_RANDOM_COEF(toxins_mod, 0, 2) + MULT_BY_RANDOM_COEF(radiation_mod, 0, 2) + + if(brute_mod < 1 && prob(40)) + species_flags |= SPECIES_FLAG_NO_MINOR_CUT + if(brute_mod < 0.9 && prob(40)) + species_flags |= SPECIES_FLAG_NO_EMBED + if(toxins_mod < 0.1) + species_flags |= SPECIES_FLAG_NO_POISON + + //Gastronomic traits + taste_sensitivity = pick(TASTE_HYPERSENSITIVE, TASTE_SENSITIVE, TASTE_DULL, TASTE_NUMB) + gluttonous = pick(0, GLUT_TINY, GLUT_SMALLER, GLUT_ANYTHING) + stomach_capacity = 5 * stomach_capacity + if(prob(20)) + gluttonous |= pick(GLUT_ITEM_TINY, GLUT_ITEM_NORMAL, GLUT_ITEM_ANYTHING, GLUT_PROJECTILE_VOMIT) + if(gluttonous & GLUT_ITEM_ANYTHING) + stomach_capacity += ITEM_SIZE_HUGE + + //Environment + var/temp_comfort_shift = rand(-50,50) + body_temperature += temp_comfort_shift + + var/pressure_comfort_shift = rand(-50,50) + hazard_high_pressure += pressure_comfort_shift + warning_high_pressure += pressure_comfort_shift + warning_low_pressure += pressure_comfort_shift + hazard_low_pressure += pressure_comfort_shift + + //Misc traits + if(prob(40)) + available_pronouns = list(/decl/pronouns) + if(prob(10)) + species_flags |= SPECIES_FLAG_NO_SLIP + if(prob(10)) + species_flags |= SPECIES_FLAG_NO_TANGLE + + . = ..() + +/decl/species/alium/get_species_blood_color(mob/living/human/H) + if(istype(H) && H.isSynthetic()) + return ..() + return blood_color \ No newline at end of file diff --git a/nebula.dme b/nebula.dme index c2e5aaf8939..837c78385a6 100644 --- a/nebula.dme +++ b/nebula.dme @@ -3791,7 +3791,6 @@ #include "code\modules\species\species_getters.dm" #include "code\modules\species\species_helpers.dm" #include "code\modules\species\species_hud.dm" -#include "code\modules\species\outsider\random.dm" #include "code\modules\species\station\human.dm" #include "code\modules\species\station\human_bodytypes.dm" #include "code\modules\species\station\monkey.dm" @@ -4064,6 +4063,7 @@ #include "code\unit_tests\~helpers.dm" #include "interface\interface.dm" #include "interface\skin.dmf" +#include "maps\__map_modpack_compatibility.dm" #include "maps\__map_names.dm" #include "maps\_map_include.dm" #include "maps\antag_spawn\ert\ert.dm"