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"