diff --git a/code/__defines/mobs.dm b/code/__defines/mobs.dm index 022c6011a7a..00633e438b2 100644 --- a/code/__defines/mobs.dm +++ b/code/__defines/mobs.dm @@ -272,8 +272,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..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, SPECIES_GOLEM) + 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/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/mods/gamemodes/heist/heist_base.dmm b/mods/gamemodes/heist/heist_base.dmm index e3015fa4193..5a445c37f40 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" = ( 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 e9f8ec7a411..fefac75fff8 100644 --- a/nebula.dme +++ b/nebula.dme @@ -3940,7 +3940,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" @@ -4384,8 +4383,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\golem.dm" #include "code\modules\species\station\human.dm" #include "code\modules\species\station\human_bodytypes.dm" #include "code\modules\species\station\monkey.dm" @@ -4658,6 +4655,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"