diff --git a/code/controllers/hooks-defs.dm b/code/controllers/hooks-defs.dm index 47d26d475c..ea2d017b6f 100644 --- a/code/controllers/hooks-defs.dm +++ b/code/controllers/hooks-defs.dm @@ -47,7 +47,7 @@ /** * Podman hook. * Called in podmen.dm when someone is brought back as a Diona. - * Parameters: var/mob/living/carbon/alien/diona + * Parameters: var/mob/living/carbon/diona */ /hook/harvest_podman diff --git a/code/modules/admin/topic.dm b/code/modules/admin/topic.dm index 72eed7a918..cddf8eedb0 100644 --- a/code/modules/admin/topic.dm +++ b/code/modules/admin/topic.dm @@ -278,7 +278,7 @@ switch(href_list["simplemake"]) if("observer") M.change_mob_type( /mob/observer/dead , null, null, delmob ) if("larva") M.change_mob_type( /mob/living/carbon/alien/larva , null, null, delmob ) - if("nymph") M.change_mob_type( /mob/living/carbon/alien/diona , null, null, delmob ) + if("nymph") M.change_mob_type( /mob/living/carbon/diona , null, null, delmob ) if("human") M.change_mob_type( /mob/living/carbon/human , null, null, delmob, href_list["species"]) if("slime") M.change_mob_type( /mob/living/simple_mob/slime/xenobio , null, null, delmob ) if("monkey") M.change_mob_type( /mob/living/carbon/human/monkey , null, null, delmob ) diff --git a/code/modules/clothing/clothing.dm b/code/modules/clothing/clothing.dm index 4d69794d05..465fb6dba5 100644 --- a/code/modules/clothing/clothing.dm +++ b/code/modules/clothing/clothing.dm @@ -483,8 +483,8 @@ var/global/list/light_overlay_cache = list() //see get_worn_overlay() on helmets else D.wear_hat(src) success = 1 - else if(istype(user, /mob/living/carbon/alien/diona)) - var/mob/living/carbon/alien/diona/D = user + else if(istype(user, /mob/living/carbon/diona)) + var/mob/living/carbon/diona/D = user if(D.hat) success = 2 else diff --git a/code/modules/food/food/snacks.dm b/code/modules/food/food/snacks.dm index e31ebf8ee8..71258879b5 100644 --- a/code/modules/food/food/snacks.dm +++ b/code/modules/food/food/snacks.dm @@ -4405,7 +4405,7 @@ /mob/living/simple_mob/adultslime composition_reagent = "slimejelly" -/mob/living/carbon/alien/diona +/mob/living/carbon/diona composition_reagent = "nutriment"//Dionae are plants, so eating them doesn't give animal protein /mob/living/simple_mob/slime diff --git a/code/modules/food/kitchen/cooking_machines/_appliance.dm b/code/modules/food/kitchen/cooking_machines/_appliance.dm index 26e817c5fa..b15345f881 100644 --- a/code/modules/food/kitchen/cooking_machines/_appliance.dm +++ b/code/modules/food/kitchen/cooking_machines/_appliance.dm @@ -655,7 +655,7 @@ if (isSynthetic()) src.composition_reagent = "iron" else - if(istype(src, /mob/living/carbon/human/diona) || istype(src, /mob/living/carbon/alien/diona)) + if(istype(src, /mob/living/carbon/human/diona) || istype(src, /mob/living/carbon/diona)) src.composition_reagent = "nutriment" // diona are plants, not meat else src.composition_reagent = "protein" diff --git a/code/modules/ghosttrap/trap.dm b/code/modules/ghosttrap/trap.dm index f0df593fca..4ca51499a2 100644 --- a/code/modules/ghosttrap/trap.dm +++ b/code/modules/ghosttrap/trap.dm @@ -109,6 +109,6 @@ var/global/list/ghost_traps /datum/ghosttrap/plant/welcome_candidate(var/mob/target) to_chat(target, "You awaken slowly, stirring into sluggish motion as the air caresses you.") // This is a hack, replace with some kind of species blurb proc. - if(istype(target,/mob/living/carbon/alien/diona)) + if(istype(target,/mob/living/carbon/diona)) to_chat(target, "You are \a [target], one of a race of drifting interstellar plantlike creatures that sometimes share their seeds with human traders.") - to_chat(target, "Too much darkness will send you into shock and starve you, but light will help you heal.") \ No newline at end of file + to_chat(target, "Too much darkness will send you into shock and starve you, but light will help you heal.") diff --git a/code/modules/hydroponics/_hydro_setup.dm b/code/modules/hydroponics/_hydro_setup.dm index e4966f9ffa..3b1ad91664 100644 --- a/code/modules/hydroponics/_hydro_setup.dm +++ b/code/modules/hydroponics/_hydro_setup.dm @@ -80,7 +80,7 @@ GLOBAL_LIST_INIT(plant_mob_products, list( /mob/living/simple_mob/animal/passive/mouse = 1, /mob/living/simple_mob/animal/space/carp = 1, /mob/living/carbon/human/monkey = 1, - /mob/living/carbon/alien/diona = 1 + /mob/living/carbon/diona = 1 )) GLOBAL_LIST_INIT(plant_item_products, list( @@ -111,4 +111,4 @@ GLOBAL_LIST_INIT(forbidden_plant_growth_sprites, list( GLOBAL_LIST_INIT(forbidden_plant_product_sprites, list( "gnomes" - )) \ No newline at end of file + )) diff --git a/code/modules/hydroponics/seedtypes/diona.dm b/code/modules/hydroponics/seedtypes/diona.dm index be3b80b6bf..817cb453e5 100644 --- a/code/modules/hydroponics/seedtypes/diona.dm +++ b/code/modules/hydroponics/seedtypes/diona.dm @@ -5,7 +5,7 @@ display_name = "replicant pods" can_self_harvest = 1 apply_color_to_mob = FALSE - has_mob_product = /mob/living/carbon/alien/diona + has_mob_product = /mob/living/carbon/diona /datum/seed/diona/New() ..() @@ -18,4 +18,4 @@ set_trait(TRAIT_PRODUCT_ICON,"diona") set_trait(TRAIT_PRODUCT_COLOUR,"#799957") set_trait(TRAIT_PLANT_COLOUR,"#66804B") - set_trait(TRAIT_PLANT_ICON,"alien4") \ No newline at end of file + set_trait(TRAIT_PLANT_ICON,"alien4") diff --git a/code/modules/hydroponics/trays/tray.dm b/code/modules/hydroponics/trays/tray.dm index 0bdd02e903..e073350bf5 100644 --- a/code/modules/hydroponics/trays/tray.dm +++ b/code/modules/hydroponics/trays/tray.dm @@ -150,8 +150,8 @@ /obj/machinery/portable_atmospherics/hydroponics/attack_generic(var/mob/user) // Why did I ever think this was a good idea. TODO: move this onto the nymph mob. - if(istype(user,/mob/living/carbon/alien/diona)) - var/mob/living/carbon/alien/diona/nymph = user + if(istype(user,/mob/living/carbon/diona)) + var/mob/living/carbon/diona/nymph = user if(nymph.stat == DEAD || nymph.paralysis || nymph.weakened || nymph.stunned || nymph.restrained()) return diff --git a/code/modules/mob/living/carbon/alien/alien.dm b/code/modules/mob/living/carbon/alien/alien.dm deleted file mode 100644 index 45ce881d99..0000000000 --- a/code/modules/mob/living/carbon/alien/alien.dm +++ /dev/null @@ -1,72 +0,0 @@ -/mob/living/carbon/alien - name = "alien" - desc = "What IS that?" - icon = 'icons/mob/alien.dmi' - icon_state = "alien" - pass_flags = PASSTABLE - health = 100 - maxHealth = 100 - mob_size = 4 - - inventory_panel_type = null // Disable inventory by default - - var/adult_form - var/dead_icon - var/amount_grown = 0 - var/max_grown = 200 - var/time_of_birth - var/language - var/death_msg = "lets out a waning guttural screech, green blood bubbling from its maw." - var/can_namepick_as_adult = 0 - var/adult_name - var/instance_num - -/mob/living/carbon/alien/Initialize() - . = ..() - - time_of_birth = world.time - - verbs += /mob/living/proc/ventcrawl - verbs += /mob/living/proc/hide - - instance_num = rand(1, 1000) - name = "[initial(name)] ([instance_num])" - real_name = name - regenerate_icons() - - if(language) - add_language(language) - - gender = NEUTER - -/mob/living/carbon/alien/u_equip(obj/item/W as obj) - return - -/mob/living/carbon/alien/Stat() - ..() - stat(null, "Progress: [amount_grown]/[max_grown]") - -/mob/living/carbon/alien/restrained() - return 0 - -/mob/living/carbon/alien/cannot_use_vents() - return - -/mob/living/carbon/alien/get_default_language() - if(default_language) - return default_language - return GLOB.all_languages["Skathari"] - -/mob/living/carbon/alien/say_quote(var/message, var/datum/language/speaking = null) - var/verb = "hisses" - var/ending = copytext(message, length(message)) - - if(speaking && (speaking.name != "Galactic Common")) //this is so adminbooze xenos speaking common have their custom verbs, - verb = speaking.get_spoken_verb(ending) //and use normal verbs for their own languages and non-common languages - else - if(ending == "!") - verb = "roars" - else if(ending == "?") - verb = "hisses curiously" - return verb - diff --git a/code/modules/mob/living/carbon/alien/alien_attacks.dm b/code/modules/mob/living/carbon/alien/alien_attacks.dm deleted file mode 100644 index da2f22aff1..0000000000 --- a/code/modules/mob/living/carbon/alien/alien_attacks.dm +++ /dev/null @@ -1,59 +0,0 @@ -//There has to be a better way to define this shit. ~ Z -//can't equip anything -/mob/living/carbon/alien/attack_ui(slot_id) - return - -/mob/living/carbon/alien/attack_hand(mob/living/carbon/M as mob) - - ..() - - switch(M.a_intent) - - if (I_HELP) - help_shake_act(M) - - if (I_GRAB) - if (M == src) - return - var/obj/item/grab/G = new /obj/item/grab( M, src ) - - M.put_in_active_hand(G) - - grabbed_by += G - G.affecting = src - G.synch() - - LAssailant = M - - playsound(src, 'sound/weapons/thudswoosh.ogg', 50, 1, -1) - for(var/mob/O in viewers(src, null)) - if ((O.client && !( O.blinded ))) - O.show_message(text("[] has grabbed [] passively!", M, src), 1) - - else - var/damage = rand(1, 9) - if (prob(90)) - if (HULK in M.mutations) - damage += 5 - spawn(0) - Paralyse(1) - step_away(src,M,15) - sleep(3) - step_away(src,M,15) - playsound(src, "punch", 25, 1, -1) - for(var/mob/O in viewers(src, null)) - if ((O.client && !( O.blinded ))) - O.show_message(text("[] has punched []!", M, src), 1) - if (damage > 4.9) - Weaken(rand(10,15)) - for(var/mob/O in viewers(M, null)) - if ((O.client && !( O.blinded ))) - O.show_message(text("[] has weakened []!", M, src), 1, "You hear someone fall.", 2) - adjustBruteLoss(damage) - updatehealth() - else - playsound(src, 'sound/weapons/punchmiss.ogg', 25, 1, -1) - for(var/mob/O in viewers(src, null)) - if ((O.client && !( O.blinded ))) - O.show_message(text("[] has attempted to punch []!", M, src), 1) - return diff --git a/code/modules/mob/living/carbon/alien/alien_damage.dm b/code/modules/mob/living/carbon/alien/alien_damage.dm deleted file mode 100644 index f2d147641f..0000000000 --- a/code/modules/mob/living/carbon/alien/alien_damage.dm +++ /dev/null @@ -1,33 +0,0 @@ -/mob/living/carbon/alien/ex_act(severity) - - if(!blinded) - flash_eyes() - - var/b_loss = null - var/f_loss = null - switch (severity) - if (1.0) - b_loss += 500 - gib() - return - - if (2.0) - - b_loss += 60 - - f_loss += 60 - - ear_damage += 30 - ear_deaf += 120 - - if(3.0) - b_loss += 30 - if (prob(50)) - Paralyse(1) - ear_damage += 15 - ear_deaf += 60 - - adjustBruteLoss(b_loss) - adjustFireLoss(f_loss) - - updatehealth() diff --git a/code/modules/mob/living/carbon/alien/death.dm b/code/modules/mob/living/carbon/alien/death.dm deleted file mode 100644 index 87990ae756..0000000000 --- a/code/modules/mob/living/carbon/alien/death.dm +++ /dev/null @@ -1,4 +0,0 @@ -/mob/living/carbon/alien/death(gibbed) - if(!gibbed && dead_icon) - icon_state = dead_icon - return ..(gibbed,death_msg) \ No newline at end of file diff --git a/code/modules/mob/living/carbon/alien/diona/diona.dm b/code/modules/mob/living/carbon/alien/diona/diona.dm deleted file mode 100644 index 710cb39c25..0000000000 --- a/code/modules/mob/living/carbon/alien/diona/diona.dm +++ /dev/null @@ -1,76 +0,0 @@ -var/global/list/_nymph_default_emotes = list( - /decl/emote/visible, - /decl/emote/visible/scratch, - /decl/emote/visible/drool, - /decl/emote/visible/nod, - /decl/emote/visible/sway, - /decl/emote/visible/sulk, - /decl/emote/visible/twitch, - /decl/emote/visible/dance, - /decl/emote/visible/roll, - /decl/emote/visible/shake, - /decl/emote/visible/jump, - /decl/emote/visible/shiver, - /decl/emote/visible/collapse, - /decl/emote/visible/spin, - /decl/emote/visible/sidestep, - /decl/emote/audible/hiss, - /decl/emote/audible, - /decl/emote/audible/scretch, - /decl/emote/audible/choke, - /decl/emote/audible/gnarl, - /decl/emote/audible/bug_hiss, - /decl/emote/audible/bug_chitter, - /decl/emote/audible/chirp -) - -/mob/living/carbon/alien/diona - name = "diona nymph" - voice_name = "diona nymph" - adult_form = /mob/living/carbon/human - can_namepick_as_adult = 1 - adult_name = "diona gestalt" - speak_emote = list("chirrups") - icon_state = "nymph" - item_state = "nymph" - language = LANGUAGE_ROOTLOCAL - species_language = LANGUAGE_ROOTLOCAL - only_species_language = 1 - death_msg = "expires with a pitiful chirrup..." - universal_understand = 0 - universal_speak = 0 // Dionaea do not need to speak to people other than other dionaea. - - can_pull_size = ITEMSIZE_SMALL - can_pull_mobs = MOB_PULL_SMALLER - - holder_type = /obj/item/holder/diona - var/obj/item/hat - -/mob/living/carbon/alien/diona/get_available_emotes() - return global._nymph_default_emotes - -/mob/living/carbon/alien/diona/Initialize() - . = ..() - species = GLOB.all_species[SPECIES_DIONA] - add_language(LANGUAGE_ROOTGLOBAL) - add_language(LANGUAGE_GALCOM) - verbs += /mob/living/carbon/alien/diona/proc/merge - -/mob/living/carbon/alien/diona/put_in_hands(var/obj/item/W) // No hands. - W.loc = get_turf(src) - return 1 - -/mob/living/carbon/alien/diona/proc/wear_hat(var/obj/item/new_hat) - if(hat) - return - hat = new_hat - new_hat.loc = src - update_icons() - -/mob/living/carbon/alien/diona/proc/handle_npc(var/mob/living/carbon/alien/diona/D) - if(D.stat != CONSCIOUS) - return - if(prob(33) && D.canmove && isturf(D.loc) && !D.pulledby) //won't move if being pulled - step(D, pick(cardinal)) - if(prob(1)) - D.emote(pick("scratch","jump","chirp","roll")) diff --git a/code/modules/mob/living/carbon/alien/diona/diona_attacks.dm b/code/modules/mob/living/carbon/alien/diona/diona_attacks.dm deleted file mode 100644 index 1b92a9a4ca..0000000000 --- a/code/modules/mob/living/carbon/alien/diona/diona_attacks.dm +++ /dev/null @@ -1,23 +0,0 @@ -/mob/living/carbon/alien/diona/MouseDrop(var/atom/over_object) - var/mob/living/carbon/human/H = over_object - if(!istype(H) || !Adjacent(H)) - return ..() - if(H.a_intent == "grab" && hat && !H.hands_are_full()) - hat.loc = get_turf(src) - H.put_in_hands(hat) - H.visible_message("\The [H] removes \the [src]'s [hat].") - hat = null - updateicon() - else - return ..() - -/mob/living/carbon/alien/diona/attackby(var/obj/item/W, var/mob/user) - if(user.a_intent == "help" && istype(W, /obj/item/clothing/head)) - if(hat) - to_chat(user, "\The [src] is already wearing \the [hat].") - return - user.unEquip(W) - wear_hat(W) - user.visible_message("\The [user] puts \the [W] on \the [src].") - return - return ..() diff --git a/code/modules/mob/living/carbon/alien/diona/life.dm b/code/modules/mob/living/carbon/alien/diona/life.dm deleted file mode 100644 index fe97e96674..0000000000 --- a/code/modules/mob/living/carbon/alien/diona/life.dm +++ /dev/null @@ -1,19 +0,0 @@ -//Dionaea regenerate health and nutrition in light. -/mob/living/carbon/alien/diona/handle_environment(datum/gas_mixture/environment) - - var/light_amount = 0 //how much light there is in the place, affects receiving nutrition and healing - if(isturf(loc)) //else, there's considered to be no light - var/turf/T = loc - light_amount = T.get_lumcount() * 5 - - adjust_nutrition(light_amount) - - if(light_amount > 2) //if there's enough light, heal - adjustBruteLoss(-1) - adjustFireLoss(-1) - adjustToxLoss(-1) - adjustOxyLoss(-1) - - - if(!client) - handle_npc(src) diff --git a/code/modules/mob/living/carbon/alien/diona/progression.dm b/code/modules/mob/living/carbon/alien/diona/progression.dm deleted file mode 100644 index ecd539b0fc..0000000000 --- a/code/modules/mob/living/carbon/alien/diona/progression.dm +++ /dev/null @@ -1,19 +0,0 @@ -/mob/living/carbon/alien/diona/confirm_evolution() - - if(!is_alien_whitelisted(src, GLOB.all_species[SPECIES_DIONA])) - alert(src, "You are currently not whitelisted to play as a full diona.") - return null - - if(amount_grown < max_grown) - to_chat(src, "You are not yet ready for your growth...") - return null - - src.split() - - if(istype(loc,/obj/item/holder/diona)) - var/obj/item/holder/diona/L = loc - src.loc = L.loc - qdel(L) - - src.visible_message("[src] begins to shift and quiver, and erupts in a shower of shed bark as it splits into a tangle of nearly a dozen new dionaea.","You begin to shift and quiver, feeling your awareness splinter. All at once, we consume our stored nutrients to surge with growth, splitting into a tangle of at least a dozen new dionaea. We have attained our gestalt form.") - return SPECIES_DIONA \ No newline at end of file diff --git a/code/modules/mob/living/carbon/alien/emote.dm b/code/modules/mob/living/carbon/alien/emote.dm deleted file mode 100644 index 1bfa2957b1..0000000000 --- a/code/modules/mob/living/carbon/alien/emote.dm +++ /dev/null @@ -1,31 +0,0 @@ -var/global/list/_alien_default_emotes = list( - /decl/emote/visible, - /decl/emote/visible/scratch, - /decl/emote/visible/drool, - /decl/emote/visible/nod, - /decl/emote/visible/sway, - /decl/emote/visible/sulk, - /decl/emote/visible/twitch, - /decl/emote/visible/twitch_v, - /decl/emote/visible/dance, - /decl/emote/visible/roll, - /decl/emote/visible/shake, - /decl/emote/visible/jump, - /decl/emote/visible/shiver, - /decl/emote/visible/collapse, - /decl/emote/visible/spin, - /decl/emote/visible/sidestep, - /decl/emote/audible/hiss, - /decl/emote/audible, - /decl/emote/audible/deathgasp_alien, - /decl/emote/audible/whimper, - /decl/emote/audible/gasp, - /decl/emote/audible/scretch, - /decl/emote/audible/choke, - /decl/emote/audible/moan, - /decl/emote/audible/gnarl, - /decl/emote/audible/chirp -) - -/mob/living/carbon/alien/get_available_emotes() - . = global._alien_default_emotes diff --git a/code/modules/mob/living/carbon/alien/larva/larva.dm b/code/modules/mob/living/carbon/alien/larva/larva.dm deleted file mode 100644 index 39bdbfb886..0000000000 --- a/code/modules/mob/living/carbon/alien/larva/larva.dm +++ /dev/null @@ -1,15 +0,0 @@ -/mob/living/carbon/alien/larva - name = "skathari larva" - real_name = "skathari larva" - adult_form = /mob/living/carbon/human - speak_emote = list("hisses") - icon_state = "larva" - language = "Hivemind" - maxHealth = 25 - health = 25 - faction = "xeno" - -/mob/living/carbon/alien/larva/Initialize() - . = ..() - add_language("Skathari") //Bonus language. - internal_organs |= new /obj/item/organ/internal/xenos/hivenode(src) diff --git a/code/modules/mob/living/carbon/alien/larva/life.dm b/code/modules/mob/living/carbon/alien/larva/life.dm deleted file mode 100644 index 641e572586..0000000000 --- a/code/modules/mob/living/carbon/alien/larva/life.dm +++ /dev/null @@ -1,13 +0,0 @@ - -//Larvae regenerate health and nutrition from plasma and alien weeds. -/mob/living/carbon/alien/larva/handle_environment(var/datum/gas_mixture/environment) - - if(!environment) return - - var/turf/T = get_turf(src) - if(environment.gas["phoron"] > 0 || (T && locate(/obj/effect/alien/weeds) in T.contents)) - update_progression() - adjustBruteLoss(-1) - adjustFireLoss(-1) - adjustToxLoss(-1) - adjustOxyLoss(-1) diff --git a/code/modules/mob/living/carbon/alien/larva/progression.dm b/code/modules/mob/living/carbon/alien/larva/progression.dm deleted file mode 100644 index ec98f81305..0000000000 --- a/code/modules/mob/living/carbon/alien/larva/progression.dm +++ /dev/null @@ -1,12 +0,0 @@ -/mob/living/carbon/alien/larva/confirm_evolution() - - to_chat(src, "You are growing into a full-fledged Skathari! It is time to choose a caste.") - to_chat(src, "There are three to choose from:") - to_chat(src, "Soldiers are strong and agile, able to hunt away from the hive and rapidly move through ventilation shafts. Soldiers generate plasma slowly and have low reserves.") - to_chat(src, "Guardians are tasked with protecting the hive and are deadly up close and at a range. They are not as physically imposing nor fast as the soldiers.") - to_chat(src, "Workers are the working class, offering the largest plasma storage and generation. They are the only caste which may evolve again, turning into the dreaded queen.") - var/alien_caste = alert(src, "Please choose which alien caste you shall belong to.",,"Soldier","Guardian","Worker") - return alien_caste ? "Skathari [alien_caste]" : null - -/mob/living/carbon/alien/larva/show_evolution_blurb() - return diff --git a/code/modules/mob/living/carbon/alien/life.dm b/code/modules/mob/living/carbon/alien/life.dm deleted file mode 100644 index 43bcdde499..0000000000 --- a/code/modules/mob/living/carbon/alien/life.dm +++ /dev/null @@ -1,161 +0,0 @@ -// Alien larva are quite simple. -/mob/living/carbon/alien/Life() - - set invisibility = 0 - set background = 1 - - if (transforming) return - if(!loc) return - - ..() - - if (stat != DEAD) //still breathing - // GROW! - update_progression() - - blinded = null - - //Status updates, death etc. - update_icons() - -/mob/living/carbon/alien/handle_mutations_and_radiation() - - // Currently both Dionaea and larvae like to eat radiation, so I'm defining the - // rad absorbtion here. This will need to be changed if other baby aliens are added. - - if(!radiation) - return - - var/rads = radiation/25 - radiation -= rads - adjust_nutrition(rads) - heal_overall_damage(rads,rads) - adjustOxyLoss(-(rads)) - adjustToxLoss(-(rads)) - return - -/mob/living/carbon/alien/handle_regular_status_updates() - - if(status_flags & GODMODE) return 0 - - if(stat == DEAD) - blinded = 1 - silent = 0 - else - updatehealth() - if(health <= 0) - death() - blinded = 1 - silent = 0 - return 1 - - if(paralysis && paralysis > 0) - blinded = 1 - set_stat(UNCONSCIOUS) - if(halloss > 0) - adjustHalLoss(-3) - - if(sleeping) - adjustHalLoss(-3) - if (mind) - if(mind.active && client != null) - AdjustSleeping(-1) - blinded = 1 - set_stat(UNCONSCIOUS) - else if(resting) - if(halloss > 0) - adjustHalLoss(-3) - - else - set_stat(CONSCIOUS) - if(halloss > 0) - adjustHalLoss(-1) - - // Eyes and blindness. - if(!has_eyes()) - SetBlinded(1) - blinded = 1 - eye_blurry = 1 - else if(eye_blind) - AdjustBlinded(-1) - blinded = 1 - else if(eye_blurry) - eye_blurry = max(eye_blurry-1, 0) - - update_icons() - - return 1 - -/mob/living/carbon/alien/handle_regular_hud_updates() - - if (stat == 2 || (XRAY in src.mutations)) - sight |= SEE_TURFS - sight |= SEE_MOBS - sight |= SEE_OBJS - see_in_dark = 8 - see_invisible = SEE_INVISIBLE_LEVEL_TWO - else if (stat != 2) - sight &= ~SEE_TURFS - sight &= ~SEE_MOBS - sight &= ~SEE_OBJS - see_in_dark = 2 - see_invisible = SEE_INVISIBLE_LIVING - - if (healths) - if (stat != 2) - switch(health) - if(100 to INFINITY) - healths.icon_state = "health0" - if(80 to 100) - healths.icon_state = "health1" - if(60 to 80) - healths.icon_state = "health2" - if(40 to 60) - healths.icon_state = "health3" - if(20 to 40) - healths.icon_state = "health4" - if(0 to 20) - healths.icon_state = "health5" - else - healths.icon_state = "health6" - else - healths.icon_state = "health7" - - if (client) - client.screen.Remove(global_hud.blurry,global_hud.druggy,global_hud.vimpaired) - - if ( stat != 2) - if ((blinded)) - overlay_fullscreen("blind", /obj/screen/fullscreen/blind) - else - clear_fullscreen("blind") - set_fullscreen(disabilities & NEARSIGHTED, "impaired", /obj/screen/fullscreen/impaired, 1) - set_fullscreen(eye_blurry, "blurry", /obj/screen/fullscreen/blurry) - set_fullscreen(druggy, "high", /obj/screen/fullscreen/high) - if(machine) - if(machine.check_eye(src) < 0) - reset_view(null) - else - if(client && !client.adminobs) - reset_view(null) - - return 1 - -/mob/living/carbon/alien/handle_environment(var/datum/gas_mixture/environment) - // Both alien subtypes survive in vaccum and suffer in high temperatures, - // so I'll just define this once, for both (see radiation comment above) - if(!environment) return - - if(environment.temperature > (T0C+66)) - adjustFireLoss((environment.temperature - (T0C+66))/5) // Might be too high, check in testing. - throw_alert("alien_fire", /obj/screen/alert/alien_fire) - if(prob(20)) - to_chat(src, "You feel a searing heat!") - else - clear_alert("alien_fire") - -/mob/living/carbon/alien/handle_fire() - if(..()) - return - bodytemperature += BODYTEMP_HEATING_MAX //If you're on fire, you heat up! - return diff --git a/code/modules/mob/living/carbon/alien/progression.dm b/code/modules/mob/living/carbon/alien/progression.dm deleted file mode 100644 index 1c4c37b083..0000000000 --- a/code/modules/mob/living/carbon/alien/progression.dm +++ /dev/null @@ -1,65 +0,0 @@ -/mob/living/carbon/alien/verb/evolve() - - set name = "Evolve" - set desc = "Evolve into your adult form." - set category = "Abilities" - - if(stat != CONSCIOUS) - return - - if(!adult_form) - verbs -= /mob/living/carbon/alien/verb/evolve - return - - if(handcuffed || legcuffed) - to_chat(src, "You cannot evolve when you are cuffed.") - return - - if(amount_grown < max_grown) - to_chat(src, "You are not fully grown.") - return - - // confirm_evolution() handles choices and other specific requirements. - var/new_species = confirm_evolution() - if(!new_species || !adult_form ) - return - - var/mob/living/carbon/human/adult = new adult_form(get_turf(src)) - adult.set_species(new_species) - show_evolution_blurb() - - transfer_languages(src, adult) - - if(src.faction != "neutral") - adult.faction = src.faction - - if(mind) - mind.transfer_to(adult) - if (can_namepick_as_adult) - var/newname = sanitize(input(adult, "You have become an adult. Choose a name for yourself.", "Adult Name") as null|text, MAX_NAME_LEN) - - if(!newname) - adult.fully_replace_character_name(name, "[src.adult_name] ([instance_num])") - else - adult.fully_replace_character_name(name, newname) - else - adult.key = src.key - - for (var/obj/item/W in src.contents) - src.drop_from_inventory(W) - - for(var/datum/language/L in languages) - adult.add_language(L.name) - - qdel(src) - -/mob/living/carbon/alien/proc/update_progression() - if(amount_grown < max_grown) - amount_grown++ - return - -/mob/living/carbon/alien/proc/confirm_evolution() - return - -/mob/living/carbon/alien/proc/show_evolution_blurb() - return \ No newline at end of file diff --git a/code/modules/mob/living/carbon/alien/update_icons.dm b/code/modules/mob/living/carbon/alien/update_icons.dm deleted file mode 100644 index a91445cc44..0000000000 --- a/code/modules/mob/living/carbon/alien/update_icons.dm +++ /dev/null @@ -1,20 +0,0 @@ -/mob/living/carbon/alien/regenerate_icons() - cut_overlays() - update_icons() - -/mob/living/carbon/alien/update_icons() - - var/state = 0 - if(amount_grown > max_grown*0.75) - state = 2 - else if(amount_grown > max_grown*0.25) - state = 1 - - if(stat == DEAD) - icon_state = "[initial(icon_state)][state]_dead" - else if (stunned) - icon_state = "[initial(icon_state)][state]_stun" - else if(lying || resting) - icon_state = "[initial(icon_state)][state]_sleep" - else - icon_state = "[initial(icon_state)][state]" diff --git a/code/modules/mob/living/carbon/human/human_attackhand.dm b/code/modules/mob/living/carbon/human/human_attackhand.dm index de1d29e306..e544249288 100644 --- a/code/modules/mob/living/carbon/human/human_attackhand.dm +++ b/code/modules/mob/living/carbon/human/human_attackhand.dm @@ -117,7 +117,6 @@ return M.put_in_active_hand(G) G.synch() - LAssailant = M H.do_attack_animation(src) playsound(src, 'sound/weapons/thudswoosh.ogg', 50, 1, -1) diff --git a/code/modules/mob/living/carbon/human/human_powers.dm b/code/modules/mob/living/carbon/human/human_powers.dm index 7425abafd6..2f12203111 100644 --- a/code/modules/mob/living/carbon/human/human_powers.dm +++ b/code/modules/mob/living/carbon/human/human_powers.dm @@ -150,7 +150,7 @@ /mob/living/carbon/human/proc/diona_split_into_nymphs(var/number_of_resulting_nymphs) var/turf/T = get_turf(src) - var/mob/living/carbon/alien/diona/S = new(T) + var/mob/living/carbon/diona/S = new(T) S.set_dir(dir) transfer_languages(src, S) @@ -162,7 +162,7 @@ var/nymphs = 1 - for(var/mob/living/carbon/alien/diona/D in src) + for(var/mob/living/carbon/diona/D in src) nymphs++ D.forceMove(T) transfer_languages(src, D, WHITELISTED|RESTRICTED) @@ -170,7 +170,7 @@ if(nymphs < number_of_resulting_nymphs) for(var/i in nymphs to (number_of_resulting_nymphs - 1)) - var/mob/M = new /mob/living/carbon/alien/diona(T) + var/mob/M = new /mob/living/carbon/diona(T) transfer_languages(src, M, WHITELISTED|RESTRICTED) M.set_dir(pick(NORTH, SOUTH, EAST, WEST)) diff --git a/code/modules/mob/living/carbon/human/say.dm b/code/modules/mob/living/carbon/human/say.dm index ce407bbf69..731bb65c02 100644 --- a/code/modules/mob/living/carbon/human/say.dm +++ b/code/modules/mob/living/carbon/human/say.dm @@ -68,7 +68,7 @@ //These only pertain to common. Languages are handled by mob/say_understands() if(!speaking) - if(istype(other, /mob/living/carbon/alien/diona)) + if(istype(other, /mob/living/carbon/diona)) if(other.languages.len >= 2) //They've sucked down some blood and can speak common now. return TRUE if(issilicon(other)) diff --git a/code/modules/mob/living/carbon/human/species/station/station.dm b/code/modules/mob/living/carbon/human/species/station/station.dm index 73542b1452..c121a48034 100644 --- a/code/modules/mob/living/carbon/human/species/station/station.dm +++ b/code/modules/mob/living/carbon/human/species/station/station.dm @@ -589,7 +589,7 @@ ) /datum/species/diona/can_understand(var/mob/other) - if(istype(other, /mob/living/carbon/alien/diona)) + if(istype(other, /mob/living/carbon/diona)) return TRUE return FALSE @@ -605,7 +605,7 @@ /datum/species/diona/handle_death(var/mob/living/carbon/human/H) - var/mob/living/carbon/alien/diona/S = new(get_turf(H)) + var/mob/living/carbon/diona/S = new(get_turf(H)) if(H.mind) H.mind.transfer_to(S) @@ -624,7 +624,7 @@ return - for(var/mob/living/carbon/alien/diona/D in H.contents) + for(var/mob/living/carbon/diona/D in H.contents) if(D.client) D.forceMove(get_turf(H)) else diff --git a/code/modules/mob/living/carbon/nymph/diona.dm b/code/modules/mob/living/carbon/nymph/diona.dm new file mode 100644 index 0000000000..98c0f8e591 --- /dev/null +++ b/code/modules/mob/living/carbon/nymph/diona.dm @@ -0,0 +1,130 @@ +var/global/list/_nymph_default_emotes = list( + /decl/emote/visible, + /decl/emote/visible/scratch, + /decl/emote/visible/drool, + /decl/emote/visible/nod, + /decl/emote/visible/sway, + /decl/emote/visible/sulk, + /decl/emote/visible/twitch, + /decl/emote/visible/dance, + /decl/emote/visible/roll, + /decl/emote/visible/shake, + /decl/emote/visible/jump, + /decl/emote/visible/shiver, + /decl/emote/visible/collapse, + /decl/emote/visible/spin, + /decl/emote/visible/sidestep, + /decl/emote/audible/hiss, + /decl/emote/audible, + /decl/emote/audible/scretch, + /decl/emote/audible/choke, + /decl/emote/audible/gnarl, + /decl/emote/audible/bug_hiss, + /decl/emote/audible/bug_chitter, + /decl/emote/audible/chirp +) + +/mob/living/carbon/diona + name = "diona nymph" + voice_name = "diona nymph" + speak_emote = list("chirrups") + icon_state = "nymph" + item_state = "nymph" + species_language = LANGUAGE_ROOTLOCAL + only_species_language = TRUE + gender = NEUTER + + can_pull_size = ITEMSIZE_SMALL + can_pull_mobs = MOB_PULL_SMALLER + + holder_type = /obj/item/holder/diona + var/obj/item/hat + + pass_flags = PASSTABLE + health = 100 + maxHealth = 100 + mob_size = 4 + + inventory_panel_type = null // Disable inventory by default + + var/can_namepick_as_adult = TRUE + var/adult_name = "diona gestalt" + var/death_msg = "expires with a pitiful chirrup..." + + var/amount_grown = 0 + var/max_grown = 200 + var/time_of_birth + var/instance_num + + +/mob/living/carbon/diona/get_available_emotes() + return global._nymph_default_emotes + + +/mob/living/carbon/diona/Initialize() + . = ..() + time_of_birth = world.time + + verbs += /mob/living/proc/ventcrawl + verbs += /mob/living/proc/hide + verbs += /mob/living/carbon/diona/proc/merge + + instance_num = rand(1, 1000) + name = "[initial(name)] ([instance_num])" + real_name = name + regenerate_icons() + + species = GLOB.all_species[SPECIES_DIONA] + add_language(LANGUAGE_ROOTGLOBAL) + add_language(LANGUAGE_GALCOM) + + +/mob/living/carbon/diona/put_in_hands(var/obj/item/W) // No hands. + W.loc = get_turf(src) + return TRUE + + +/mob/living/carbon/diona/proc/wear_hat(var/obj/item/new_hat) + if(hat) + return + hat = new_hat + new_hat.loc = src + update_icons() + + +/mob/living/carbon/diona/proc/handle_npc(var/mob/living/carbon/diona/D) + if(D.stat != CONSCIOUS) + return + if(prob(33) && D.canmove && isturf(D.loc) && !D.pulledby) //won't move if being pulled + step(D, pick(cardinal)) + if(prob(1)) + D.emote(pick("scratch","jump","chirp","roll")) + + +/mob/living/carbon/diona/u_equip(obj/item/W as obj) + return + + +/mob/living/carbon/diona/Stat() + ..() + stat(null, "Progress: [amount_grown]/[max_grown]") + + +/mob/living/carbon/diona/get_default_language() + if(default_language) + return default_language + return GLOB.all_languages["Skathari"] + + +/mob/living/carbon/diona/say_quote(var/message, var/datum/language/speaking = null) + var/verb = pick(speak_emote) + var/ending = copytext(message, length(message)) + if(speaking && (speaking.name != "Galactic Common")) + verb = speaking.get_spoken_verb(ending) + else if(ending == "?") + verb += " curiously" + return verb + + +/mob/living/carbon/diona/death(gibbed) + return ..(gibbed,death_msg) diff --git a/code/modules/mob/living/carbon/nymph/diona_attacks.dm b/code/modules/mob/living/carbon/nymph/diona_attacks.dm new file mode 100644 index 0000000000..cd16017e9a --- /dev/null +++ b/code/modules/mob/living/carbon/nymph/diona_attacks.dm @@ -0,0 +1,103 @@ +/mob/living/carbon/diona/MouseDrop(var/atom/over_object) + var/mob/living/carbon/human/H = over_object + if(!istype(H) || !Adjacent(H)) + return ..() + if(H.a_intent == "grab" && hat && !H.hands_are_full()) + hat.loc = get_turf(src) + H.put_in_hands(hat) + H.visible_message("\The [H] removes \the [src]'s [hat].") + hat = null + updateicon() + else + return ..() + + +/mob/living/carbon/diona/attackby(var/obj/item/W, var/mob/user) + if(user.a_intent == "help" && istype(W, /obj/item/clothing/head)) + if(hat) + to_chat(user, "\The [src] is already wearing \the [hat].") + return + user.unEquip(W) + wear_hat(W) + user.visible_message("\The [user] puts \the [W] on \the [src].") + return + return ..() + + +/mob/living/carbon/diona/attack_ui(slot_id) + return + + +/mob/living/carbon/diona/attack_hand(mob/living/carbon/M as mob) + ..() + switch(M.a_intent) + if(I_HELP) + help_shake_act(M) + + if(I_GRAB) + if(M == src) + return + var/obj/item/grab/G = new /obj/item/grab(M, src) + + M.put_in_active_hand(G) + + grabbed_by += G + G.affecting = src + G.synch() + + playsound(src, 'sound/weapons/thudswoosh.ogg', 50, 1, -1) + src.visible_message( + SPAN_WARNING("[M] grabs \the [src] passively!"), + SPAN_WARNING("You grab \the [src].") + ) + + else + var/damage = rand(1, 9) + if (prob(10)) + playsound(src, 'sound/weapons/punchmiss.ogg', 25, 1, -1) + src.visible_message( + SPAN_DANGER("[M] attempts to punch \the [src], but missed!"), + SPAN_DANGER("You failed to punch \the [src]!") + ) + return + + playsound(src, "punch", 25, 1, -1) + if (damage > 4.9) + Weaken(rand(10,15)) + src.visible_message( + SPAN_DANGER("[M] punches \the [src]!"), + SPAN_DANGER("You punch \the [src].") + ) + + adjustBruteLoss(damage) + updatehealth() + + +/mob/living/carbon/diona/ex_act(severity) + if(!blinded) + flash_eyes() + + var/b_loss = 0 + var/f_loss = 0 + switch(severity) + if(1.0) + b_loss = 500 + gib() + return + + if(2.0) + b_loss = 60 + f_loss = 60 + ear_damage += 30 + ear_deaf += 120 + + if(3.0) + b_loss = 30 + if(prob(50)) + Paralyse(1) + ear_damage += 15 + ear_deaf += 60 + + adjustBruteLoss(b_loss) + adjustFireLoss(f_loss) + updatehealth() diff --git a/code/modules/mob/living/carbon/alien/diona/diona_powers.dm b/code/modules/mob/living/carbon/nymph/diona_powers.dm similarity index 76% rename from code/modules/mob/living/carbon/alien/diona/diona_powers.dm rename to code/modules/mob/living/carbon/nymph/diona_powers.dm index f0bcdeb581..96d389a0ca 100644 --- a/code/modules/mob/living/carbon/alien/diona/diona_powers.dm +++ b/code/modules/mob/living/carbon/nymph/diona_powers.dm @@ -1,6 +1,5 @@ //Verbs after this point. -/mob/living/carbon/alien/diona/proc/merge() - +/mob/living/carbon/diona/proc/merge() set category = "Abilities" set name = "Merge with gestalt" set desc = "Merge with another diona." @@ -9,7 +8,7 @@ return if(istype(src.loc,/mob/living/carbon)) - src.verbs -= /mob/living/carbon/alien/diona/proc/merge + src.verbs -= /mob/living/carbon/diona/proc/merge return var/list/choices = list() @@ -29,18 +28,19 @@ else if(!do_merge(M)) to_chat(src, "You fail to merge with \the [M]...") -/mob/living/carbon/alien/diona/proc/do_merge(var/mob/living/carbon/human/H) + +/mob/living/carbon/diona/proc/do_merge(var/mob/living/carbon/human/H) if(!istype(H) || !src || !(src.Adjacent(H))) return 0 to_chat(H, "You feel your being twine with that of \the [src] as it merges with your biomass.") to_chat(src, "You feel your being twine with that of \the [H] as you merge with its biomass.") loc = H - verbs += /mob/living/carbon/alien/diona/proc/split - verbs -= /mob/living/carbon/alien/diona/proc/merge - return 1 + verbs += /mob/living/carbon/diona/proc/split + verbs -= /mob/living/carbon/diona/proc/merge + return TRUE -/mob/living/carbon/alien/diona/proc/split() +/mob/living/carbon/diona/proc/split() set category = "Abilities" set name = "Split from gestalt" set desc = "Split away from your gestalt as a lone nymph." @@ -49,7 +49,7 @@ return if(!(istype(src.loc,/mob/living/carbon))) - src.verbs -= /mob/living/carbon/alien/diona/proc/split + src.verbs -= /mob/living/carbon/diona/proc/split return to_chat(src.loc, "You feel a pang of loss as [src] splits away from your biomass.") @@ -58,8 +58,8 @@ var/mob/living/M = src.loc src.loc = get_turf(src) - src.verbs -= /mob/living/carbon/alien/diona/proc/split - src.verbs += /mob/living/carbon/alien/diona/proc/merge + src.verbs -= /mob/living/carbon/diona/proc/split + src.verbs += /mob/living/carbon/diona/proc/merge if(istype(M)) for(var/atom/A in M.contents) diff --git a/code/modules/mob/living/carbon/nymph/life.dm b/code/modules/mob/living/carbon/nymph/life.dm new file mode 100644 index 0000000000..b12d44fd4a --- /dev/null +++ b/code/modules/mob/living/carbon/nymph/life.dm @@ -0,0 +1,144 @@ +//Dionaea regenerate health and nutrition in light. +/mob/living/carbon/diona/handle_environment(datum/gas_mixture/environment) + var/light_amount = 0 //how much light there is in the place, affects receiving nutrition and healing + if(isturf(loc)) //else, there's considered to be no light + var/turf/T = loc + light_amount = T.get_lumcount() * 5 + + adjust_nutrition(light_amount) + + if(light_amount > 2) //if there's enough light, heal + adjustBruteLoss(-1) + adjustFireLoss(-1) + adjustToxLoss(-1) + adjustOxyLoss(-1) + + if(!client) + handle_npc(src) + + +// Alien larva are quite simple. +/mob/living/carbon/diona/Life() + set invisibility = 0 + set background = 1 + if(transforming || !loc) + return + + ..() + + if (stat != DEAD) + update_progression() // GROW! + + blinded = 0 + update_icons() + + +/mob/living/carbon/diona/handle_mutations_and_radiation() + // Currently Dionaea like to eat radiation + if(!radiation) + return + + var/rads = radiation/25 + radiation -= rads + adjust_nutrition(rads) + heal_overall_damage(rads,rads) + adjustOxyLoss(-(rads)) + adjustToxLoss(-(rads)) + return + + +/mob/living/carbon/diona/handle_regular_status_updates() + if(stat == DEAD) + SetBlinded(TRUE) + silent = FALSE + return TRUE + + updatehealth() + if(health <= 0) + death() + return handle_regular_status_updates() + + if(paralysis > 0) + SetBlinded(TRUE) + set_stat(UNCONSCIOUS) + adjustHalLoss(-3) + + if(sleeping) + adjustHalLoss(-3) + if(mind && mind.active && client) + AdjustSleeping(-1) + SetBlinded(TRUE) + set_stat(UNCONSCIOUS) + else if(resting) + adjustHalLoss(-3) + else + set_stat(CONSCIOUS) + adjustHalLoss(-1) + + // Eyes and blindness. + if(!has_eyes()) + SetBlinded(TRUE) + eye_blurry = TRUE + else if(eye_blind) + AdjustBlinded(-1) + else if(eye_blurry) + eye_blurry = max(eye_blurry-1, 0) + + update_icons() + return TRUE + + +/mob/living/carbon/diona/handle_regular_hud_updates() + if(stat == DEAD) + sight |= SEE_TURFS + sight |= SEE_MOBS + sight |= SEE_OBJS + see_in_dark = 8 + see_invisible = SEE_INVISIBLE_LEVEL_TWO + else + sight &= ~SEE_TURFS + sight &= ~SEE_MOBS + sight &= ~SEE_OBJS + see_in_dark = 2 + see_invisible = SEE_INVISIBLE_LIVING + + if(healths) + if(stat == DEAD) + healths.icon_state = "health7" + else + var/health_index = round((1 - health / maxHealth) * 5, 1) + healths.icon_state = "health[health_index]" + + if(client) + client.screen.Remove(global_hud.blurry,global_hud.druggy,global_hud.vimpaired) + + if (stat != DEAD) + if ((blinded)) + overlay_fullscreen("blind", /obj/screen/fullscreen/blind) + else + clear_fullscreen("blind") + set_fullscreen(disabilities & NEARSIGHTED, "impaired", /obj/screen/fullscreen/impaired, TRUE) + set_fullscreen(eye_blurry, "blurry", /obj/screen/fullscreen/blurry) + set_fullscreen(druggy, "high", /obj/screen/fullscreen/high) + if(machine?.check_eye(src) < 0 || (client && !client.adminobs)) + reset_view(null) + return TRUE + + +/mob/living/carbon/diona/handle_environment(var/datum/gas_mixture/environment) + if(!environment) + return + + if(environment.temperature > (T0C+66)) + adjustFireLoss((environment.temperature - (T0C+66))/5) // Might be too high, check in testing. + throw_alert("alien_fire", /obj/screen/alert/alien_fire) + if(prob(20)) + to_chat(src,SPAN_DANGER( "You feel a searing heat!")) + else + clear_alert("alien_fire") + + +/mob/living/carbon/diona/handle_fire() + . = ..() + if(!.) // True == Not on fire + bodytemperature += BODYTEMP_HEATING_MAX //If you're on fire, you heat up! diff --git a/code/modules/mob/living/carbon/nymph/progression.dm b/code/modules/mob/living/carbon/nymph/progression.dm new file mode 100644 index 0000000000..81edfe772f --- /dev/null +++ b/code/modules/mob/living/carbon/nymph/progression.dm @@ -0,0 +1,74 @@ +/mob/living/carbon/diona/proc/confirm_evolution() + if(!is_alien_whitelisted(src, GLOB.all_species[SPECIES_DIONA])) + alert(src, "You are currently not whitelisted to play as a full diona.") + return null + + if(amount_grown < max_grown) + to_chat(src, "You are not yet ready for your growth...") + return null + + src.split() + + if(istype(loc,/obj/item/holder/diona)) + var/obj/item/holder/diona/L = loc + src.loc = L.loc + qdel(L) + + src.visible_message( + SPAN_WARNING("[src] begins to shift and quiver, and erupts in a shower of shed bark as it splits into a tangle of nearly a dozen new dionaea."), + SPAN_WARNING("You begin to shift and quiver, feeling your awareness splinter. All at once, we consume our stored nutrients to surge with growth, splitting into a tangle of at least a dozen new dionaea. We have attained our gestalt form.") + ) + return SPECIES_DIONA + + +/mob/living/carbon/diona/verb/evolve() + set name = "Evolve" + set desc = "Evolve into your adult form." + set category = "Abilities" + + if(stat != CONSCIOUS) + return + + if(handcuffed || legcuffed) + to_chat(src, SPAN_WARNING("You cannot evolve when you are cuffed.")) + return + + if(amount_grown < max_grown) + to_chat(src, SPAN_WARNING("You are not fully grown.")) + return + + // confirm_evolution() handles choices and other specific requirements. + var/new_species = confirm_evolution() + if(!new_species) + return + + var/mob/living/carbon/human/adult = new /mob/living/carbon/human(get_turf(src)) + adult.set_species(new_species) + + transfer_languages(src, adult) + + if(src.faction != "neutral") + adult.faction = src.faction + + if(mind) + mind.transfer_to(adult) + if(can_namepick_as_adult) + var/newname = sanitize(input(adult, "You have become an adult. Choose a name for yourself.", "Adult Name") as null|text, MAX_NAME_LEN) + + if(!newname) + adult.fully_replace_character_name(name, "[src.adult_name] ([instance_num])") + else + adult.fully_replace_character_name(name, newname) + else + adult.key = src.key + + for (var/obj/item/W in src.contents) + src.drop_from_inventory(W) + + qdel(src) + + +/mob/living/carbon/diona/proc/update_progression() + if(amount_grown < max_grown) + amount_grown++ + return diff --git a/code/modules/mob/living/carbon/alien/diona/say_understands.dm b/code/modules/mob/living/carbon/nymph/say_understands.dm similarity index 50% rename from code/modules/mob/living/carbon/alien/diona/say_understands.dm rename to code/modules/mob/living/carbon/nymph/say_understands.dm index b42109059e..fb59d96334 100644 --- a/code/modules/mob/living/carbon/alien/diona/say_understands.dm +++ b/code/modules/mob/living/carbon/nymph/say_understands.dm @@ -1,5 +1,5 @@ -/mob/living/carbon/alien/diona/say_understands(var/mob/other, var/datum/language/speaking = null) +/mob/living/carbon/diona/say_understands(var/mob/other, var/datum/language/speaking = null) if(ishuman(other) && !speaking) if(languages.len >= 2) // They have sucked down some blood. return TRUE - return ..() \ No newline at end of file + return ..() diff --git a/code/modules/mob/living/carbon/alien/diona/update_icons.dm b/code/modules/mob/living/carbon/nymph/update_icons.dm similarity index 58% rename from code/modules/mob/living/carbon/alien/diona/update_icons.dm rename to code/modules/mob/living/carbon/nymph/update_icons.dm index 9fc10ab4a8..b26c72dba1 100644 --- a/code/modules/mob/living/carbon/alien/diona/update_icons.dm +++ b/code/modules/mob/living/carbon/nymph/update_icons.dm @@ -1,5 +1,4 @@ -/mob/living/carbon/alien/diona/update_icons() - +/mob/living/carbon/diona/update_icons() if(stat == DEAD) icon_state = "[initial(icon_state)]_dead" else if(lying || resting || stunned) @@ -9,4 +8,9 @@ cut_overlays() if(hat) - add_overlay(get_hat_icon(hat, 0, -8)) \ No newline at end of file + add_overlay(get_hat_icon(hat, 0, -8)) + + +/mob/living/carbon/diona/regenerate_icons() + cut_overlays() + update_icons() diff --git a/code/modules/mob/living/living.dm b/code/modules/mob/living/living.dm index 3f4dd459c5..caf97b5ae3 100644 --- a/code/modules/mob/living/living.dm +++ b/code/modules/mob/living/living.dm @@ -81,11 +81,7 @@ to_chat(src, "You are not injured enough to succumb to death!") /mob/living/proc/updatehealth() - if(status_flags & GODMODE) - health = 100 - set_stat(CONSCIOUS) - else - health = getMaxHealth() - getOxyLoss() - getToxLoss() - getFireLoss() - getBruteLoss() - getCloneLoss() - halloss + health = getMaxHealth() - getOxyLoss() - getToxLoss() - getFireLoss() - getBruteLoss() - getCloneLoss() - halloss //This proc is used for mobs which are affected by pressure to calculate the amount of pressure that actually //affects them once clothing is factored in. ~Errorage @@ -149,8 +145,6 @@ //'include_robo' only applies to healing, for legacy purposes, as all damage typically hurts both types of organs /mob/living/proc/adjustBruteLoss(var/amount,var/include_robo) - if(status_flags & GODMODE) return 0 //godmode - if(amount > 0) for(var/datum/modifier/M in modifiers) if(!isnull(M.incoming_damage_percent)) @@ -169,7 +163,6 @@ return oxyloss /mob/living/proc/adjustOxyLoss(var/amount) - if(status_flags & GODMODE) return 0 //godmode if(amount > 0) for(var/datum/modifier/M in modifiers) @@ -186,14 +179,12 @@ updatehealth() /mob/living/proc/setOxyLoss(var/amount) - if(status_flags & GODMODE) return 0 //godmode oxyloss = amount /mob/living/proc/getToxLoss() return toxloss /mob/living/proc/adjustToxLoss(var/amount) - if(status_flags & GODMODE) return 0 //godmode if(amount > 0) for(var/datum/modifier/M in modifiers) @@ -210,7 +201,6 @@ updatehealth() /mob/living/proc/setToxLoss(var/amount) - if(status_flags & GODMODE) return 0 //godmode toxloss = amount /mob/living/proc/getFireLoss() @@ -224,7 +214,6 @@ //'include_robo' only applies to healing, for legacy purposes, as all damage typically hurts both types of organs /mob/living/proc/adjustFireLoss(var/amount,var/include_robo) - if(status_flags & GODMODE) return 0 //godmode if(amount > 0) for(var/datum/modifier/M in modifiers) if(!isnull(M.incoming_damage_percent)) @@ -243,8 +232,6 @@ return cloneloss /mob/living/proc/adjustCloneLoss(var/amount) - if(status_flags & GODMODE) return 0 //godmode - if(amount > 0) for(var/datum/modifier/M in modifiers) if(!isnull(M.incoming_damage_percent)) @@ -260,25 +247,21 @@ updatehealth() /mob/living/proc/setCloneLoss(var/amount) - if(status_flags & GODMODE) return 0 //godmode cloneloss = amount /mob/living/proc/getBrainLoss() return brainloss /mob/living/proc/adjustBrainLoss(var/amount) - if(status_flags & GODMODE) return 0 //godmode brainloss = min(max(brainloss + amount, 0),(getMaxHealth()*2)) /mob/living/proc/setBrainLoss(var/amount) - if(status_flags & GODMODE) return 0 //godmode brainloss = amount /mob/living/proc/getHalLoss() return halloss /mob/living/proc/adjustHalLoss(var/amount) - if(status_flags & GODMODE) return 0 //godmode if(amount > 0) for(var/datum/modifier/M in modifiers) if(!isnull(M.incoming_damage_percent)) @@ -295,7 +278,6 @@ updatehealth() /mob/living/proc/setHalLoss(var/amount) - if(status_flags & GODMODE) return 0 //godmode halloss = amount // Use this to get a mob's max health whenever possible. Reading maxHealth directly will give inaccurate results if any modifiers exist. diff --git a/code/modules/mob/living/living_movement.dm b/code/modules/mob/living/living_movement.dm index 2be5bdc0e5..edc312e088 100644 --- a/code/modules/mob/living/living_movement.dm +++ b/code/modules/mob/living/living_movement.dm @@ -124,8 +124,6 @@ default behaviour is: now_pushing = 0 return - tmob.LAssailant = src - now_pushing = 0 . = ..() if (!istype(AM, /atom/movable) || AM.anchored) diff --git a/code/modules/mob/living/simple_mob/defense.dm b/code/modules/mob/living/simple_mob/defense.dm index ef4e9a3c43..371ddc6192 100644 --- a/code/modules/mob/living/simple_mob/defense.dm +++ b/code/modules/mob/living/simple_mob/defense.dm @@ -37,7 +37,6 @@ G.synch() G.affecting = src - LAssailant = L L.visible_message(SPAN_WARNING("\The [L] has grabbed [src] passively!")) L.do_attack_animation(src) diff --git a/code/modules/mob/living/simple_mob/subtypes/animal/giant_spider/hunter.dm b/code/modules/mob/living/simple_mob/subtypes/animal/giant_spider/hunter.dm index 7145a84b03..e9c0d51d99 100644 --- a/code/modules/mob/living/simple_mob/subtypes/animal/giant_spider/hunter.dm +++ b/code/modules/mob/living/simple_mob/subtypes/animal/giant_spider/hunter.dm @@ -108,7 +108,6 @@ // G.synch() // G.affecting = victim -// victim.LAssailant = src // visible_message("\The [src] seizes \the [victim] aggressively!") // do_attack_animation(victim) diff --git a/code/modules/mob/mob.dm b/code/modules/mob/mob.dm index 47706d84b5..8357546fa9 100644 --- a/code/modules/mob/mob.dm +++ b/code/modules/mob/mob.dm @@ -528,11 +528,6 @@ to_chat(src, "Somebody has a grip on them!") return - if(!iscarbon(src)) - M.LAssailant = null - else - M.LAssailant = usr - else if(isobj(AM)) var/obj/I = AM if(!can_pull_size || can_pull_size < I.w_class) diff --git a/code/modules/mob/mob_defines.dm b/code/modules/mob/mob_defines.dm index 95c1362fb3..8ee2e11748 100644 --- a/code/modules/mob/mob_defines.dm +++ b/code/modules/mob/mob_defines.dm @@ -165,9 +165,6 @@ statpanel("[P.panel]","",P) */ -//The last mob/living/carbon to push/drag/grab this mob (mostly used by slimes friend recognition) - var/mob/living/carbon/LAssailant = null - //Wizard mode, but can be used in other modes thanks to the brand new "Give Spell" badmin button var/list/spell/spell_list = list() diff --git a/code/modules/organs/subtypes/diona.dm b/code/modules/organs/subtypes/diona.dm index 93ed1a5010..c2371635f7 100644 --- a/code/modules/organs/subtypes/diona.dm +++ b/code/modules/organs/subtypes/diona.dm @@ -8,7 +8,7 @@ return 0 spawn(1) // So it has time to be thrown about by the gib() proc. - var/mob/living/carbon/alien/diona/D = new(target) + var/mob/living/carbon/diona/D = new(target) var/datum/ghosttrap/plant/P = get_ghost_trap("living plant") P.request_player(D, "A diona nymph has split off from its gestalt. ") spawn(60) diff --git a/code/modules/surgery/robotics.dm b/code/modules/surgery/robotics.dm index fb1844fe3b..ef1c434c12 100644 --- a/code/modules/surgery/robotics.dm +++ b/code/modules/surgery/robotics.dm @@ -542,7 +542,7 @@ var/obj/item/holder/diona/N = tool var/obj/item/organ/internal/brain/cephalon/cephalon = new(target, 1) target.internal_organs_by_name["brain"] = cephalon - var/mob/living/carbon/alien/diona/D = N.held_mob + var/mob/living/carbon/diona/D = N.held_mob user.drop_from_inventory(tool) if(D && D.mind) diff --git a/maps/submaps/surface_submaps/wilderness/derelictengine.dmm b/maps/submaps/surface_submaps/wilderness/derelictengine.dmm index 508bc29f70..7b769a2059 100644 --- a/maps/submaps/surface_submaps/wilderness/derelictengine.dmm +++ b/maps/submaps/surface_submaps/wilderness/derelictengine.dmm @@ -1,6 +1,6 @@ "aa" = (/obj/effect/floor_decal/techfloor{dir = 1},/mob/living/simple_mob/mechanical/hivebot/ranged_damage/siege/emp,/turf/simulated/shuttle/floor/alienplating/external,/area/submap/DerelictEngine) "ab" = (/mob/living/simple_mob/humanoid/merc/melee/sword/poi{health = 15; maxHealth = 15},/turf/simulated/floor/tiled/techfloor,/area/submap/DerelictEngine) -"am" = (/mob/living/carbon/alien/diona{adult_name = "Schmeinkie"; can_namepick_as_adult = 0; desc = "An overfed diona nymph that looks weirdly like scrumbulous, currently has a hollocollar tagged 'Schmeinkie' on it"; faction = "hivebot"; health = 150; maxHealth = 150; name = "Schmeinkie"; voice_name = "Schmeinkie"},/turf/simulated/floor/greengrid,/area/submap/DerelictEngine) +"am" = (/mob/living/carbon/diona{adult_name = "Schmeinkie"; can_namepick_as_adult = 0; desc = "An overfed diona nymph that looks weirdly like scrumbulous, currently has a hollocollar tagged 'Schmeinkie' on it"; faction = "hivebot"; health = 150; maxHealth = 150; name = "Schmeinkie"; voice_name = "Schmeinkie"},/turf/simulated/floor/greengrid,/area/submap/DerelictEngine) "an" = (/obj/effect/floor_decal/techfloor/orange{dir = 10},/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/plating,/area/submap/DerelictEngine) "ap" = (/mob/living/simple_mob/mechanical/hivebot/swarm,/turf/template_noop,/area/template_noop) "aG" = (/obj/effect/decal/cleanable/generic,/obj/structure/table/alien,/turf/simulated/shuttle/floor/alienplating/external,/area/submap/DerelictEngine) diff --git a/polaris.dme b/polaris.dme index ec35a918c8..5b098bede7 100644 --- a/polaris.dme +++ b/polaris.dme @@ -2307,24 +2307,6 @@ #include "code\modules\mob\living\carbon\shock.dm" #include "code\modules\mob\living\carbon\taste.dm" #include "code\modules\mob\living\carbon\viruses.dm" -#include "code\modules\mob\living\carbon\alien\alien.dm" -#include "code\modules\mob\living\carbon\alien\alien_attacks.dm" -#include "code\modules\mob\living\carbon\alien\alien_damage.dm" -#include "code\modules\mob\living\carbon\alien\death.dm" -#include "code\modules\mob\living\carbon\alien\emote.dm" -#include "code\modules\mob\living\carbon\alien\life.dm" -#include "code\modules\mob\living\carbon\alien\progression.dm" -#include "code\modules\mob\living\carbon\alien\update_icons.dm" -#include "code\modules\mob\living\carbon\alien\diona\diona.dm" -#include "code\modules\mob\living\carbon\alien\diona\diona_attacks.dm" -#include "code\modules\mob\living\carbon\alien\diona\diona_powers.dm" -#include "code\modules\mob\living\carbon\alien\diona\life.dm" -#include "code\modules\mob\living\carbon\alien\diona\progression.dm" -#include "code\modules\mob\living\carbon\alien\diona\say_understands.dm" -#include "code\modules\mob\living\carbon\alien\diona\update_icons.dm" -#include "code\modules\mob\living\carbon\alien\larva\larva.dm" -#include "code\modules\mob\living\carbon\alien\larva\life.dm" -#include "code\modules\mob\living\carbon\alien\larva\progression.dm" #include "code\modules\mob\living\carbon\brain\brain.dm" #include "code\modules\mob\living\carbon\brain\death.dm" #include "code\modules\mob\living\carbon\brain\emote.dm" @@ -2387,6 +2369,13 @@ #include "code\modules\mob\living\carbon\human\species\xenomorphs\alien_powers.dm" #include "code\modules\mob\living\carbon\human\species\xenomorphs\alien_species.dm" #include "code\modules\mob\living\carbon\human\species\xenomorphs\xenomorphs.dm" +#include "code\modules\mob\living\carbon\nymph\diona.dm" +#include "code\modules\mob\living\carbon\nymph\diona_attacks.dm" +#include "code\modules\mob\living\carbon\nymph\diona_powers.dm" +#include "code\modules\mob\living\carbon\nymph\life.dm" +#include "code\modules\mob\living\carbon\nymph\progression.dm" +#include "code\modules\mob\living\carbon\nymph\say_understands.dm" +#include "code\modules\mob\living\carbon\nymph\update_icons.dm" #include "code\modules\mob\living\silicon\death.dm" #include "code\modules\mob\living\silicon\emote.dm" #include "code\modules\mob\living\silicon\laws.dm"