Axes carbon aliums, makes nymphs direct subtype of carbon (#8931)

* Axes carbon aliums, makes nymphs direct subtype of carbon

* Keep type as diona
This commit is contained in:
Atermonera
2023-02-18 21:07:53 -08:00
committed by GitHub
parent fbb33b538f
commit e5c920e680
45 changed files with 503 additions and 712 deletions

View File

@@ -47,7 +47,7 @@
/** /**
* Podman hook. * Podman hook.
* Called in podmen.dm when someone is brought back as a Diona. * 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 /hook/harvest_podman

View File

@@ -278,7 +278,7 @@
switch(href_list["simplemake"]) switch(href_list["simplemake"])
if("observer") M.change_mob_type( /mob/observer/dead , null, null, delmob ) 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("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("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("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 ) if("monkey") M.change_mob_type( /mob/living/carbon/human/monkey , null, null, delmob )

View File

@@ -483,8 +483,8 @@ var/global/list/light_overlay_cache = list() //see get_worn_overlay() on helmets
else else
D.wear_hat(src) D.wear_hat(src)
success = 1 success = 1
else if(istype(user, /mob/living/carbon/alien/diona)) else if(istype(user, /mob/living/carbon/diona))
var/mob/living/carbon/alien/diona/D = user var/mob/living/carbon/diona/D = user
if(D.hat) if(D.hat)
success = 2 success = 2
else else

View File

@@ -4405,7 +4405,7 @@
/mob/living/simple_mob/adultslime /mob/living/simple_mob/adultslime
composition_reagent = "slimejelly" 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 composition_reagent = "nutriment"//Dionae are plants, so eating them doesn't give animal protein
/mob/living/simple_mob/slime /mob/living/simple_mob/slime

View File

@@ -655,7 +655,7 @@
if (isSynthetic()) if (isSynthetic())
src.composition_reagent = "iron" src.composition_reagent = "iron"
else 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 src.composition_reagent = "nutriment" // diona are plants, not meat
else else
src.composition_reagent = "protein" src.composition_reagent = "protein"

View File

@@ -109,6 +109,6 @@ var/global/list/ghost_traps
/datum/ghosttrap/plant/welcome_candidate(var/mob/target) /datum/ghosttrap/plant/welcome_candidate(var/mob/target)
to_chat(target, "<span class='alium'><B>You awaken slowly, stirring into sluggish motion as the air caresses you.</B></span>") to_chat(target, "<span class='alium'><B>You awaken slowly, stirring into sluggish motion as the air caresses you.</B></span>")
// This is a hack, replace with some kind of species blurb proc. // 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, "<B>You are \a [target], one of a race of drifting interstellar plantlike creatures that sometimes share their seeds with human traders.</B>") to_chat(target, "<B>You are \a [target], one of a race of drifting interstellar plantlike creatures that sometimes share their seeds with human traders.</B>")
to_chat(target, "<B>Too much darkness will send you into shock and starve you, but light will help you heal.</B>") to_chat(target, "<B>Too much darkness will send you into shock and starve you, but light will help you heal.</B>")

View File

@@ -80,7 +80,7 @@ GLOBAL_LIST_INIT(plant_mob_products, list(
/mob/living/simple_mob/animal/passive/mouse = 1, /mob/living/simple_mob/animal/passive/mouse = 1,
/mob/living/simple_mob/animal/space/carp = 1, /mob/living/simple_mob/animal/space/carp = 1,
/mob/living/carbon/human/monkey = 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( 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( GLOBAL_LIST_INIT(forbidden_plant_product_sprites, list(
"gnomes" "gnomes"
)) ))

View File

@@ -5,7 +5,7 @@
display_name = "replicant pods" display_name = "replicant pods"
can_self_harvest = 1 can_self_harvest = 1
apply_color_to_mob = FALSE apply_color_to_mob = FALSE
has_mob_product = /mob/living/carbon/alien/diona has_mob_product = /mob/living/carbon/diona
/datum/seed/diona/New() /datum/seed/diona/New()
..() ..()
@@ -18,4 +18,4 @@
set_trait(TRAIT_PRODUCT_ICON,"diona") set_trait(TRAIT_PRODUCT_ICON,"diona")
set_trait(TRAIT_PRODUCT_COLOUR,"#799957") set_trait(TRAIT_PRODUCT_COLOUR,"#799957")
set_trait(TRAIT_PLANT_COLOUR,"#66804B") set_trait(TRAIT_PLANT_COLOUR,"#66804B")
set_trait(TRAIT_PLANT_ICON,"alien4") set_trait(TRAIT_PLANT_ICON,"alien4")

View File

@@ -150,8 +150,8 @@
/obj/machinery/portable_atmospherics/hydroponics/attack_generic(var/mob/user) /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. // 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)) if(istype(user,/mob/living/carbon/diona))
var/mob/living/carbon/alien/diona/nymph = user var/mob/living/carbon/diona/nymph = user
if(nymph.stat == DEAD || nymph.paralysis || nymph.weakened || nymph.stunned || nymph.restrained()) if(nymph.stat == DEAD || nymph.paralysis || nymph.weakened || nymph.stunned || nymph.restrained())
return return

View File

@@ -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

View File

@@ -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("<font color='red'>[] has grabbed [] passively!</font>", 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("<font color='red'><B>[] has punched []!</B></font>", 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("<font color='red'><B>[] has weakened []!</B></font>", M, src), 1, "<font color='red'>You hear someone fall.</font>", 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("<font color='red'><B>[] has attempted to punch []!</B></font>", M, src), 1)
return

View File

@@ -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()

View File

@@ -1,4 +0,0 @@
/mob/living/carbon/alien/death(gibbed)
if(!gibbed && dead_icon)
icon_state = dead_icon
return ..(gibbed,death_msg)

View File

@@ -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"))

View File

@@ -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("<span class='danger'>\The [H] removes \the [src]'s [hat].</span>")
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, "<span class='warning'>\The [src] is already wearing \the [hat].</span>")
return
user.unEquip(W)
wear_hat(W)
user.visible_message("<span class='notice'>\The [user] puts \the [W] on \the [src].</span>")
return
return ..()

View File

@@ -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)

View File

@@ -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("<font color='red'>[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.</font>","<font color='red'>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.</font>")
return SPECIES_DIONA

View File

@@ -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

View File

@@ -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)

View File

@@ -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)

View File

@@ -1,12 +0,0 @@
/mob/living/carbon/alien/larva/confirm_evolution()
to_chat(src, "<span class='notice'><b>You are growing into a full-fledged Skathari! It is time to choose a caste.</b></span>")
to_chat(src, "<span class='notice'>There are three to choose from:</span>")
to_chat(src, "<B>Soldiers</B> <span class='notice'> 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.</span>")
to_chat(src, "<B>Guardians</B> <span class='notice'> 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.</span>")
to_chat(src, "<B>Workers</B> <span class='notice'> 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.</span>")
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

View File

@@ -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, "<font color='red'>You feel a searing heat!</font>")
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

View File

@@ -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, "<font color='red'>You cannot evolve when you are cuffed.</font>")
return
if(amount_grown < max_grown)
to_chat(src, "<font color='red'>You are not fully grown.</font>")
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

View File

@@ -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]"

View File

@@ -117,7 +117,6 @@
return return
M.put_in_active_hand(G) M.put_in_active_hand(G)
G.synch() G.synch()
LAssailant = M
H.do_attack_animation(src) H.do_attack_animation(src)
playsound(src, 'sound/weapons/thudswoosh.ogg', 50, 1, -1) playsound(src, 'sound/weapons/thudswoosh.ogg', 50, 1, -1)

View File

@@ -150,7 +150,7 @@
/mob/living/carbon/human/proc/diona_split_into_nymphs(var/number_of_resulting_nymphs) /mob/living/carbon/human/proc/diona_split_into_nymphs(var/number_of_resulting_nymphs)
var/turf/T = get_turf(src) 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) S.set_dir(dir)
transfer_languages(src, S) transfer_languages(src, S)
@@ -162,7 +162,7 @@
var/nymphs = 1 var/nymphs = 1
for(var/mob/living/carbon/alien/diona/D in src) for(var/mob/living/carbon/diona/D in src)
nymphs++ nymphs++
D.forceMove(T) D.forceMove(T)
transfer_languages(src, D, WHITELISTED|RESTRICTED) transfer_languages(src, D, WHITELISTED|RESTRICTED)
@@ -170,7 +170,7 @@
if(nymphs < number_of_resulting_nymphs) if(nymphs < number_of_resulting_nymphs)
for(var/i in nymphs to (number_of_resulting_nymphs - 1)) 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) transfer_languages(src, M, WHITELISTED|RESTRICTED)
M.set_dir(pick(NORTH, SOUTH, EAST, WEST)) M.set_dir(pick(NORTH, SOUTH, EAST, WEST))

View File

@@ -68,7 +68,7 @@
//These only pertain to common. Languages are handled by mob/say_understands() //These only pertain to common. Languages are handled by mob/say_understands()
if(!speaking) 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. if(other.languages.len >= 2) //They've sucked down some blood and can speak common now.
return TRUE return TRUE
if(issilicon(other)) if(issilicon(other))

View File

@@ -589,7 +589,7 @@
) )
/datum/species/diona/can_understand(var/mob/other) /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 TRUE
return FALSE return FALSE
@@ -605,7 +605,7 @@
/datum/species/diona/handle_death(var/mob/living/carbon/human/H) /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) if(H.mind)
H.mind.transfer_to(S) H.mind.transfer_to(S)
@@ -624,7 +624,7 @@
return 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) if(D.client)
D.forceMove(get_turf(H)) D.forceMove(get_turf(H))
else else

View File

@@ -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)

View File

@@ -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("<span class='danger'>\The [H] removes \the [src]'s [hat].</span>")
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, "<span class='warning'>\The [src] is already wearing \the [hat].</span>")
return
user.unEquip(W)
wear_hat(W)
user.visible_message("<span class='notice'>\The [user] puts \the [W] on \the [src].</span>")
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()

View File

@@ -1,6 +1,5 @@
//Verbs after this point. //Verbs after this point.
/mob/living/carbon/alien/diona/proc/merge() /mob/living/carbon/diona/proc/merge()
set category = "Abilities" set category = "Abilities"
set name = "Merge with gestalt" set name = "Merge with gestalt"
set desc = "Merge with another diona." set desc = "Merge with another diona."
@@ -9,7 +8,7 @@
return return
if(istype(src.loc,/mob/living/carbon)) 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 return
var/list/choices = list() var/list/choices = list()
@@ -29,18 +28,19 @@
else if(!do_merge(M)) else if(!do_merge(M))
to_chat(src, "You fail to merge with \the [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))) if(!istype(H) || !src || !(src.Adjacent(H)))
return 0 return 0
to_chat(H, "You feel your being twine with that of \the [src] as it merges with your biomass.") 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.") to_chat(src, "You feel your being twine with that of \the [H] as you merge with its biomass.")
loc = H loc = H
verbs += /mob/living/carbon/alien/diona/proc/split verbs += /mob/living/carbon/diona/proc/split
verbs -= /mob/living/carbon/alien/diona/proc/merge verbs -= /mob/living/carbon/diona/proc/merge
return 1 return TRUE
/mob/living/carbon/alien/diona/proc/split()
/mob/living/carbon/diona/proc/split()
set category = "Abilities" set category = "Abilities"
set name = "Split from gestalt" set name = "Split from gestalt"
set desc = "Split away from your gestalt as a lone nymph." set desc = "Split away from your gestalt as a lone nymph."
@@ -49,7 +49,7 @@
return return
if(!(istype(src.loc,/mob/living/carbon))) 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 return
to_chat(src.loc, "You feel a pang of loss as [src] splits away from your biomass.") 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 var/mob/living/M = src.loc
src.loc = get_turf(src) src.loc = get_turf(src)
src.verbs -= /mob/living/carbon/alien/diona/proc/split src.verbs -= /mob/living/carbon/diona/proc/split
src.verbs += /mob/living/carbon/alien/diona/proc/merge src.verbs += /mob/living/carbon/diona/proc/merge
if(istype(M)) if(istype(M))
for(var/atom/A in M.contents) for(var/atom/A in M.contents)

View File

@@ -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!

View File

@@ -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

View File

@@ -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(ishuman(other) && !speaking)
if(languages.len >= 2) // They have sucked down some blood. if(languages.len >= 2) // They have sucked down some blood.
return TRUE return TRUE
return ..() return ..()

View File

@@ -1,5 +1,4 @@
/mob/living/carbon/alien/diona/update_icons() /mob/living/carbon/diona/update_icons()
if(stat == DEAD) if(stat == DEAD)
icon_state = "[initial(icon_state)]_dead" icon_state = "[initial(icon_state)]_dead"
else if(lying || resting || stunned) else if(lying || resting || stunned)
@@ -9,4 +8,9 @@
cut_overlays() cut_overlays()
if(hat) if(hat)
add_overlay(get_hat_icon(hat, 0, -8)) add_overlay(get_hat_icon(hat, 0, -8))
/mob/living/carbon/diona/regenerate_icons()
cut_overlays()
update_icons()

View File

@@ -81,11 +81,7 @@
to_chat(src, "<font color='blue'>You are not injured enough to succumb to death!</font>") to_chat(src, "<font color='blue'>You are not injured enough to succumb to death!</font>")
/mob/living/proc/updatehealth() /mob/living/proc/updatehealth()
if(status_flags & GODMODE) health = getMaxHealth() - getOxyLoss() - getToxLoss() - getFireLoss() - getBruteLoss() - getCloneLoss() - halloss
health = 100
set_stat(CONSCIOUS)
else
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 //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 //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 //'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) /mob/living/proc/adjustBruteLoss(var/amount,var/include_robo)
if(status_flags & GODMODE) return 0 //godmode
if(amount > 0) if(amount > 0)
for(var/datum/modifier/M in modifiers) for(var/datum/modifier/M in modifiers)
if(!isnull(M.incoming_damage_percent)) if(!isnull(M.incoming_damage_percent))
@@ -169,7 +163,6 @@
return oxyloss return oxyloss
/mob/living/proc/adjustOxyLoss(var/amount) /mob/living/proc/adjustOxyLoss(var/amount)
if(status_flags & GODMODE) return 0 //godmode
if(amount > 0) if(amount > 0)
for(var/datum/modifier/M in modifiers) for(var/datum/modifier/M in modifiers)
@@ -186,14 +179,12 @@
updatehealth() updatehealth()
/mob/living/proc/setOxyLoss(var/amount) /mob/living/proc/setOxyLoss(var/amount)
if(status_flags & GODMODE) return 0 //godmode
oxyloss = amount oxyloss = amount
/mob/living/proc/getToxLoss() /mob/living/proc/getToxLoss()
return toxloss return toxloss
/mob/living/proc/adjustToxLoss(var/amount) /mob/living/proc/adjustToxLoss(var/amount)
if(status_flags & GODMODE) return 0 //godmode
if(amount > 0) if(amount > 0)
for(var/datum/modifier/M in modifiers) for(var/datum/modifier/M in modifiers)
@@ -210,7 +201,6 @@
updatehealth() updatehealth()
/mob/living/proc/setToxLoss(var/amount) /mob/living/proc/setToxLoss(var/amount)
if(status_flags & GODMODE) return 0 //godmode
toxloss = amount toxloss = amount
/mob/living/proc/getFireLoss() /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 //'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) /mob/living/proc/adjustFireLoss(var/amount,var/include_robo)
if(status_flags & GODMODE) return 0 //godmode
if(amount > 0) if(amount > 0)
for(var/datum/modifier/M in modifiers) for(var/datum/modifier/M in modifiers)
if(!isnull(M.incoming_damage_percent)) if(!isnull(M.incoming_damage_percent))
@@ -243,8 +232,6 @@
return cloneloss return cloneloss
/mob/living/proc/adjustCloneLoss(var/amount) /mob/living/proc/adjustCloneLoss(var/amount)
if(status_flags & GODMODE) return 0 //godmode
if(amount > 0) if(amount > 0)
for(var/datum/modifier/M in modifiers) for(var/datum/modifier/M in modifiers)
if(!isnull(M.incoming_damage_percent)) if(!isnull(M.incoming_damage_percent))
@@ -260,25 +247,21 @@
updatehealth() updatehealth()
/mob/living/proc/setCloneLoss(var/amount) /mob/living/proc/setCloneLoss(var/amount)
if(status_flags & GODMODE) return 0 //godmode
cloneloss = amount cloneloss = amount
/mob/living/proc/getBrainLoss() /mob/living/proc/getBrainLoss()
return brainloss return brainloss
/mob/living/proc/adjustBrainLoss(var/amount) /mob/living/proc/adjustBrainLoss(var/amount)
if(status_flags & GODMODE) return 0 //godmode
brainloss = min(max(brainloss + amount, 0),(getMaxHealth()*2)) brainloss = min(max(brainloss + amount, 0),(getMaxHealth()*2))
/mob/living/proc/setBrainLoss(var/amount) /mob/living/proc/setBrainLoss(var/amount)
if(status_flags & GODMODE) return 0 //godmode
brainloss = amount brainloss = amount
/mob/living/proc/getHalLoss() /mob/living/proc/getHalLoss()
return halloss return halloss
/mob/living/proc/adjustHalLoss(var/amount) /mob/living/proc/adjustHalLoss(var/amount)
if(status_flags & GODMODE) return 0 //godmode
if(amount > 0) if(amount > 0)
for(var/datum/modifier/M in modifiers) for(var/datum/modifier/M in modifiers)
if(!isnull(M.incoming_damage_percent)) if(!isnull(M.incoming_damage_percent))
@@ -295,7 +278,6 @@
updatehealth() updatehealth()
/mob/living/proc/setHalLoss(var/amount) /mob/living/proc/setHalLoss(var/amount)
if(status_flags & GODMODE) return 0 //godmode
halloss = amount halloss = amount
// Use this to get a mob's max health whenever possible. Reading maxHealth directly will give inaccurate results if any modifiers exist. // Use this to get a mob's max health whenever possible. Reading maxHealth directly will give inaccurate results if any modifiers exist.

View File

@@ -124,8 +124,6 @@ default behaviour is:
now_pushing = 0 now_pushing = 0
return return
tmob.LAssailant = src
now_pushing = 0 now_pushing = 0
. = ..() . = ..()
if (!istype(AM, /atom/movable) || AM.anchored) if (!istype(AM, /atom/movable) || AM.anchored)

View File

@@ -37,7 +37,6 @@
G.synch() G.synch()
G.affecting = src G.affecting = src
LAssailant = L
L.visible_message(SPAN_WARNING("\The [L] has grabbed [src] passively!")) L.visible_message(SPAN_WARNING("\The [L] has grabbed [src] passively!"))
L.do_attack_animation(src) L.do_attack_animation(src)

View File

@@ -108,7 +108,6 @@
// G.synch() // G.synch()
// G.affecting = victim // G.affecting = victim
// victim.LAssailant = src
// visible_message("<span class='warning'>\The [src] seizes \the [victim] aggressively!</span>") // visible_message("<span class='warning'>\The [src] seizes \the [victim] aggressively!</span>")
// do_attack_animation(victim) // do_attack_animation(victim)

View File

@@ -528,11 +528,6 @@
to_chat(src, "<span class='warning'>Somebody has a grip on them!</span>") to_chat(src, "<span class='warning'>Somebody has a grip on them!</span>")
return return
if(!iscarbon(src))
M.LAssailant = null
else
M.LAssailant = usr
else if(isobj(AM)) else if(isobj(AM))
var/obj/I = AM var/obj/I = AM
if(!can_pull_size || can_pull_size < I.w_class) if(!can_pull_size || can_pull_size < I.w_class)

View File

@@ -165,9 +165,6 @@
statpanel("[P.panel]","",P) 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 //Wizard mode, but can be used in other modes thanks to the brand new "Give Spell" badmin button
var/list/spell/spell_list = list() var/list/spell/spell_list = list()

View File

@@ -8,7 +8,7 @@
return 0 return 0
spawn(1) // So it has time to be thrown about by the gib() proc. 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") var/datum/ghosttrap/plant/P = get_ghost_trap("living plant")
P.request_player(D, "A diona nymph has split off from its gestalt. ") P.request_player(D, "A diona nymph has split off from its gestalt. ")
spawn(60) spawn(60)

View File

@@ -542,7 +542,7 @@
var/obj/item/holder/diona/N = tool var/obj/item/holder/diona/N = tool
var/obj/item/organ/internal/brain/cephalon/cephalon = new(target, 1) var/obj/item/organ/internal/brain/cephalon/cephalon = new(target, 1)
target.internal_organs_by_name["brain"] = cephalon 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) user.drop_from_inventory(tool)
if(D && D.mind) if(D && D.mind)

View File

@@ -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) "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) "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) "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) "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) "aG" = (/obj/effect/decal/cleanable/generic,/obj/structure/table/alien,/turf/simulated/shuttle/floor/alienplating/external,/area/submap/DerelictEngine)

View File

@@ -2307,24 +2307,6 @@
#include "code\modules\mob\living\carbon\shock.dm" #include "code\modules\mob\living\carbon\shock.dm"
#include "code\modules\mob\living\carbon\taste.dm" #include "code\modules\mob\living\carbon\taste.dm"
#include "code\modules\mob\living\carbon\viruses.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\brain.dm"
#include "code\modules\mob\living\carbon\brain\death.dm" #include "code\modules\mob\living\carbon\brain\death.dm"
#include "code\modules\mob\living\carbon\brain\emote.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_powers.dm"
#include "code\modules\mob\living\carbon\human\species\xenomorphs\alien_species.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\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\death.dm"
#include "code\modules\mob\living\silicon\emote.dm" #include "code\modules\mob\living\silicon\emote.dm"
#include "code\modules\mob\living\silicon\laws.dm" #include "code\modules\mob\living\silicon\laws.dm"