diff --git a/code/ATMOSPHERICS/components/tvalve.dm b/code/ATMOSPHERICS/components/tvalve.dm
index da4a9cbb7bd..c97367f0529 100644
--- a/code/ATMOSPHERICS/components/tvalve.dm
+++ b/code/ATMOSPHERICS/components/tvalve.dm
@@ -37,12 +37,12 @@
if(!istype(T))
return
add_underlay(T, node1, turn(dir, -180))
-
+
if(istype(src, /obj/machinery/atmospherics/tvalve/mirrored))
add_underlay(T, node2, turn(dir, 90))
else
add_underlay(T, node2, turn(dir, -90))
-
+
add_underlay(T, node3, dir)
/obj/machinery/atmospherics/tvalve/hide(var/i)
@@ -172,9 +172,6 @@
/obj/machinery/atmospherics/tvalve/attack_ai(mob/user as mob)
return
-/obj/machinery/atmospherics/tvalve/attack_paw(mob/user as mob)
- return attack_hand(user)
-
/obj/machinery/atmospherics/tvalve/attack_hand(mob/user as mob)
src.add_fingerprint(usr)
update_icon(1)
@@ -224,7 +221,7 @@
src.connected_to = c
node3 = target
break
-
+
update_icon()
update_underlays()
@@ -419,7 +416,7 @@
if(target.initialize_directions & get_dir(target,src))
node3 = target
break
-
+
update_icon()
update_underlays()
diff --git a/code/ATMOSPHERICS/components/valve.dm b/code/ATMOSPHERICS/components/valve.dm
index 1ec8bc13dce..481b3ecd062 100644
--- a/code/ATMOSPHERICS/components/valve.dm
+++ b/code/ATMOSPHERICS/components/valve.dm
@@ -132,9 +132,6 @@
/obj/machinery/atmospherics/valve/attack_ai(mob/user as mob)
return
-/obj/machinery/atmospherics/valve/attack_paw(mob/user as mob)
- return attack_hand(user)
-
/obj/machinery/atmospherics/valve/attack_hand(mob/user as mob)
src.add_fingerprint(usr)
update_icon(1)
diff --git a/code/_onclick/other_mobs.dm b/code/_onclick/other_mobs.dm
index 17121f92f32..921fb8e818e 100644
--- a/code/_onclick/other_mobs.dm
+++ b/code/_onclick/other_mobs.dm
@@ -57,7 +57,7 @@
/mob/living/carbon/alien/UnarmedAttack(var/atom/A)
A.attack_alien(src)
/atom/proc/attack_alien(mob/user as mob)
- attack_paw(user)
+ attack_hand(user)
return
/mob/living/carbon/alien/RestrainedClickOn(var/atom/A)
return
diff --git a/code/controllers/hooks-defs.dm b/code/controllers/hooks-defs.dm
index 973da27ee48..fafb898de6a 100644
--- a/code/controllers/hooks-defs.dm
+++ b/code/controllers/hooks-defs.dm
@@ -54,7 +54,7 @@
/**
* Podman hook.
* Called in podmen.dm when someone is brought back as a Diona.
- * Parameters: var/mob/living/carbon/monkey/diona
+ * Parameters: var/mob/living/carbon/alien/diona
*/
/hook/harvest_podman
diff --git a/code/datums/mind.dm b/code/datums/mind.dm
index 47fade12372..5d5b7588355 100644
--- a/code/datums/mind.dm
+++ b/code/datums/mind.dm
@@ -137,7 +137,7 @@ datum/mind
)
var/text = ""
var/mob/living/carbon/human/H = current
- if (istype(current, /mob/living/carbon/human) || istype(current, /mob/living/carbon/monkey))
+ if (istype(current, /mob/living/carbon/human))
/** Impanted**/
if(H.is_loyalty_implanted(H))
text = "Loyalty Implant:Remove|Implanted"
@@ -343,13 +343,6 @@ datum/mind
text = "[text]: "
if (istype(current, /mob/living/carbon/human))
text += "healthy|infected|HUMAN|other"
- else if (istype(current, /mob/living/carbon/monkey))
- var/found = 0
-
- if(found)
- text += "healthy|INFECTED|human|other"
- else
- text += "HEALTHY|infected|human|other"
else
text += "healthy|infected|human|OTHER"
diff --git a/code/datums/spell.dm b/code/datums/spell.dm
index 2c27947ddbf..c9a91dc563d 100644
--- a/code/datums/spell.dm
+++ b/code/datums/spell.dm
@@ -84,7 +84,7 @@ var/list/spells = typesof(/obj/effect/proc_holder/spell) //needed for the badmin
user << "Not when you're incapacitated."
return 0
- if(ishuman(user) || ismonkey(user))
+ if(ishuman(user) || issmall(user))
if(user.is_muzzled())
user << "Mmmf mrrfff!"
return 0
diff --git a/code/datums/spells/horsemask.dm b/code/datums/spells/horsemask.dm
index d8f7fec621e..035a3ab7416 100644
--- a/code/datums/spells/horsemask.dm
+++ b/code/datums/spells/horsemask.dm
@@ -12,7 +12,7 @@
range = 7
cooldown_min = 30 //30 deciseconds reduction per rank
selection_type = "range"
- var/list/compatible_mobs = list(/mob/living/carbon/human, /mob/living/carbon/monkey)
+ var/list/compatible_mobs = list(/mob/living/carbon/human)
action_icon_state = "spell_horse"
diff --git a/code/datums/spells/inflict_handler.dm b/code/datums/spells/inflict_handler.dm
index 2035ed315e1..742326464db 100644
--- a/code/datums/spells/inflict_handler.dm
+++ b/code/datums/spells/inflict_handler.dm
@@ -26,7 +26,7 @@
if("gib")
target.gib()
if("gib_brain")
- if(ishuman(target) || ismonkey(target))
+ if(ishuman(target) || issmall(target))
var/mob/living/carbon/C = target
if(C.brain_op_stage != 4) // Their brain is already taken out
var/obj/item/organ/brain/B = new(C.loc)
diff --git a/code/datums/supplypacks.dm b/code/datums/supplypacks.dm
index d00c7deeac6..d7dfd29644d 100644
--- a/code/datums/supplypacks.dm
+++ b/code/datums/supplypacks.dm
@@ -799,11 +799,13 @@ var/list/all_supply_groups = list(supply_emergency,supply_security,supply_engine
cost = 30
containername = "farwa crate"
+/*
/datum/supply_packs/organic/wolpin
name = "Wolpin crate"
contains = list (/obj/item/weapon/storage/box/wolpincubes)
cost = 30
containername = "wolpin crate"
+*/
/datum/supply_packs/organic/skrell
name = "Neaera crate"
diff --git a/code/game/atoms_movable.dm b/code/game/atoms_movable.dm
index 0cc4606419b..ab594b30ba1 100644
--- a/code/game/atoms_movable.dm
+++ b/code/game/atoms_movable.dm
@@ -251,10 +251,6 @@
return src.master.attackby(a, b, c)
return
-/atom/movable/overlay/attack_paw(a, b, c)
- if (src.master)
- return src.master.attack_paw(a, b, c)
- return
/atom/movable/overlay/attack_hand(a, b, c)
if (src.master)
diff --git a/code/game/dna/dna_modifier.dm b/code/game/dna/dna_modifier.dm
index 2ba16ac0663..38804b13067 100644
--- a/code/game/dna/dna_modifier.dm
+++ b/code/game/dna/dna_modifier.dm
@@ -417,8 +417,6 @@
return
return
*/
-/obj/machinery/computer/scan_consolenew/attack_paw(user as mob)
- attack_hand(user)
/obj/machinery/computer/scan_consolenew/attack_ai(user as mob)
src.add_hiddenprint(user)
diff --git a/code/game/dna/genes/goon_disabilities.dm b/code/game/dna/genes/goon_disabilities.dm
index 9d22fff859b..449d15fc1bc 100644
--- a/code/game/dna/genes/goon_disabilities.dm
+++ b/code/game/dna/genes/goon_disabilities.dm
@@ -315,7 +315,7 @@
invocation_type = "none"
range = 7
selection_type = "range"
- var/list/compatible_mobs = list(/mob/living/carbon/human, /mob/living/carbon/monkey)
+ var/list/compatible_mobs = list(/mob/living/carbon/human)
include_user = 0
action_icon_state = "genetic_incendiary"
diff --git a/code/game/dna/genes/goon_powers.dm b/code/game/dna/genes/goon_powers.dm
index 6007d233512..4abbb4eee54 100644
--- a/code/game/dna/genes/goon_powers.dm
+++ b/code/game/dna/genes/goon_powers.dm
@@ -142,7 +142,7 @@
selection_type = "range"
include_user = 1
// centcomm_cancast = 0
- var/list/compatible_mobs = list(/mob/living/carbon/human, /mob/living/carbon/monkey)
+ var/list/compatible_mobs = list(/mob/living/carbon/human)
action_icon_state = "genetic_cryo"
@@ -240,7 +240,7 @@
action_icon_state = "genetic_eat"
- var/list/types_allowed=list(/obj/item,/mob/living/simple_animal, /mob/living/carbon/monkey, /mob/living/carbon/human)
+ var/list/types_allowed=list(/obj/item,/mob/living/simple_animal, /mob/living/carbon/human)
/obj/effect/proc_holder/spell/wizard/targeted/eat/choose_targets(mob/user = usr)
var/list/targets = new /list()
diff --git a/code/game/dna/genes/monkey.dm b/code/game/dna/genes/monkey.dm
index c10178b285a..4c711464777 100644
--- a/code/game/dna/genes/monkey.dm
+++ b/code/game/dna/genes/monkey.dm
@@ -5,166 +5,92 @@
block=MONKEYBLOCK
/datum/dna/gene/monkey/can_activate(var/mob/M,var/flags)
- return istype(M, /mob/living/carbon/human) || istype(M,/mob/living/carbon/monkey)
+ return istype(M, /mob/living/carbon/human)
-/datum/dna/gene/monkey/activate(var/mob/living/M, var/connected, var/flags)
- if(!istype(M,/mob/living/carbon/human))
+/datum/dna/gene/monkey/activate(var/mob/living/carbon/human/H, var/connected, var/flags)
+ if(!istype(H,/mob/living/carbon/human))
// testing("Cannot monkey-ify [M], type is [M.type].")
return
- var/mob/living/carbon/human/H = M
- H.notransform = 1
- var/list/implants = list() //Try to preserve implants.
- for(var/obj/item/weapon/implant/W in H)
- implants += W
- W.loc = null
-
- if(!connected)
- for(var/obj/item/W in (H.contents-implants))
- if (W==H.w_uniform) // will be teared
- continue
- H.unEquip(W)
- M.notransform = 1
- M.canmove = 0
- M.icon = null
- M.invisibility = 101
- var/atom/movable/overlay/animation = new( M.loc )
- animation.icon_state = "blank"
- animation.icon = 'icons/mob/mob.dmi'
- animation.master = src
- flick("h2monkey", animation)
- sleep(48)
- qdel(animation)
-
-
- var/mob/living/carbon/monkey/O = null
- if(H.species.primitive)
- O = new H.species.primitive(src)
- else
- H.gib() //Trying to change the species of a creature with no primitive var set is messy.
+ if(H.monkeyizing)
return
-
- if(M)
- if (M.dna)
- O.dna = M.dna.Clone()
- M.dna = null
-
- if (M.suiciding)
- O.suiciding = M.suiciding
- M.suiciding = null
-
-
-
-
- for(var/obj/T in (M.contents-implants))
- qdel(T)
-
- O.loc = M.loc
-
- if(M.mind)
- M.mind.transfer_to(O) //transfer our mind to the cute little monkey
-
- if (connected) //inside dna thing
- var/obj/machinery/dna_scannernew/C = connected
- O.loc = C
- C.occupant = O
- connected = null
- O.real_name = text("monkey ([])",copytext(md5(M.real_name), 2, 6))
- O.take_overall_damage(M.getBruteLoss() + 40, M.getFireLoss())
- O.adjustToxLoss(M.getToxLoss() + 20)
- O.adjustOxyLoss(M.getOxyLoss())
- O.stat = M.stat
- O.a_intent = "hurt"
- for (var/obj/item/weapon/implant/I in implants)
- I.loc = O
- I.implanted = O
-// O.update_icon = 1 //queue a full icon update at next life() call
- qdel(M)
- return
-
-/datum/dna/gene/monkey/deactivate(var/mob/living/M, var/connected, var/flags)
- if(!istype(M,/mob/living/carbon/monkey))
- testing("Cannot humanize [M], type is [M.type].")
- return
- var/mob/living/carbon/monkey/Mo = M
- Mo.notransform = 1
- var/list/implants = list() //Still preserving implants
- for(var/obj/item/weapon/implant/W in Mo)
- implants += W
- W.loc = null
- if(!connected)
- for(var/obj/item/W in (Mo.contents-implants))
- Mo.unEquip(W)
- M.notransform = 1
- M.canmove = 0
- M.icon = null
- M.invisibility = 101
- var/atom/movable/overlay/animation = new( M.loc )
- animation.icon_state = "blank"
- animation.icon = 'icons/mob/mob.dmi'
- animation.master = src
- flick("monkey2h", animation)
- sleep(48)
- del(animation)
-
- var/mob/living/carbon/human/O
- if(Mo.greaterform)
- var/greatform = lowertext(Mo.greaterform)
- var/typepath = "/mob/living/carbon/human/"
- typepath += greatform
- O = new typepath(src, greatform)
- else
- O = new(src)
-
- if (M.dna.GetUIState(DNA_UI_GENDER))
- O.gender = FEMALE
- else
- O.gender = MALE
-
- if (M)
- if (M.dna)
- O.dna = M.dna.Clone()
- M.dna = null
-
- if (M.suiciding)
- O.suiciding = M.suiciding
- M.suiciding = null
-
-
- //for(var/obj/T in M)
- // del(T)
-
- O.loc = M.loc
-
- if(M.mind)
- M.mind.transfer_to(O) //transfer our mind to the human
-
- if (connected) //inside dna thing
- var/obj/machinery/dna_scannernew/C = connected
- O.loc = C
- C.occupant = O
- connected = null
-
- var/i
- while (!i)
- var/randomname
- if (O.gender == MALE)
- randomname = capitalize(pick(first_names_male) + " " + capitalize(pick(last_names)))
- else
- randomname = capitalize(pick(first_names_female) + " " + capitalize(pick(last_names)))
- if (findname(randomname))
+ for(var/obj/item/W in H)
+ if (W==H.w_uniform) // will be torn
continue
- else
- O.real_name = randomname
- O.dna.real_name = randomname
- i++
- O.UpdateAppearance()
- O.take_overall_damage(M.getBruteLoss(), M.getFireLoss())
- O.adjustToxLoss(M.getToxLoss())
- O.adjustOxyLoss(M.getOxyLoss())
- O.stat = M.stat
- for (var/obj/item/weapon/implant/I in implants)
- I.loc = O
- I.implanted = O
-// O.update_icon = 1 //queue a full icon update at next life() call
- del(M)
- return
\ No newline at end of file
+ H.drop_from_inventory(W)
+ H.regenerate_icons()
+ H.monkeyizing = 1
+ H.canmove = 0
+ H.stunned = 1
+ H.icon = null
+ H.invisibility = 101
+ for(var/t in H.organs)
+ del(t)
+ var/atom/movable/overlay/animation = new /atom/movable/overlay( H.loc )
+ animation.icon_state = "blank"
+ animation.icon = 'icons/mob/mob.dmi'
+ animation.master = H
+ flick("h2monkey", animation)
+ sleep(48)
+ //animation = null
+
+ H.monkeyizing = 0
+ H.stunned = 0
+ H.update_canmove()
+ H.invisibility = initial(H.invisibility)
+
+ if(!H.species.primitive_form) //If the creature in question has no primitive set, this is going to be messy.
+ H.gib()
+ return
+
+ for(var/obj/item/W in H)
+ H.drop_from_inventory(W)
+ H.set_species(H.species.primitive_form)
+
+ H << "You are now [H.species.name]. "
+ qdel(animation)
+
+ return H
+
+/datum/dna/gene/monkey/deactivate(var/mob/living/carbon/human/H, var/connected, var/flags)
+ if(!istype(H,/mob/living/carbon/human))
+// testing("Cannot monkey-ify [M], type is [M.type].")
+ return
+ if(H.monkeyizing)
+ return
+ for(var/obj/item/W in H)
+ if (W==H.w_uniform) // will be torn
+ continue
+ H.drop_from_inventory(W)
+ H.regenerate_icons()
+ H.monkeyizing = 1
+ H.canmove = 0
+ H.stunned = 1
+ H.icon = null
+ H.invisibility = 101
+ for(var/t in H.organs)
+ del(t)
+ var/atom/movable/overlay/animation = new /atom/movable/overlay( H.loc )
+ animation.icon_state = "blank"
+ animation.icon = 'icons/mob/mob.dmi'
+ animation.master = H
+ flick("monkey2h", animation)
+ sleep(48)
+ //animation = null
+
+ H.monkeyizing = 0
+ H.stunned = 0
+ H.update_canmove()
+ H.invisibility = initial(H.invisibility)
+
+ if(!H.species.greater_form) //If the creature in question has no primitive set, this is going to be messy.
+ H.gib()
+ return
+
+ for(var/obj/item/W in H)
+ H.drop_from_inventory(W)
+ H.set_species(H.species.greater_form)
+
+ H << "You are now [H.species.name]. "
+ qdel(animation)
+
+ return H
\ No newline at end of file
diff --git a/code/game/gamemodes/changeling/changeling_power.dm b/code/game/gamemodes/changeling/changeling_power.dm
index 36df179ae32..25875f77f04 100644
--- a/code/game/gamemodes/changeling/changeling_power.dm
+++ b/code/game/gamemodes/changeling/changeling_power.dm
@@ -47,7 +47,7 @@
//Fairly important to remember to return 1 on success >.<
/obj/effect/proc_holder/changeling/proc/can_sting(var/mob/user, var/mob/target)
- if(!ishuman(user) && !ismonkey(user)) //typecast everything from mob to carbon from this point onwards
+ if(!ishuman(user) && !issmall(user)) //typecast everything from mob to carbon from this point onwards
return 0
if(req_human && !ishuman(user))
user << "We cannot do that in this form!"
@@ -72,7 +72,7 @@
//used in /mob/Stat()
/obj/effect/proc_holder/changeling/proc/can_be_used_by(var/mob/user)
- if(!ishuman(user) && !ismonkey(user))
+ if(!ishuman(user) && !issmall(user))
return 0
if(req_human && !ishuman(user))
return 0
diff --git a/code/game/gamemodes/changeling/evolution_menu.dm b/code/game/gamemodes/changeling/evolution_menu.dm
index 32ab8473d66..fefc9965a24 100644
--- a/code/game/gamemodes/changeling/evolution_menu.dm
+++ b/code/game/gamemodes/changeling/evolution_menu.dm
@@ -352,7 +352,7 @@ var/list/sting_paths
/mob/proc/make_changeling()
if(!mind)
return
- if(!ishuman(src) && !ismonkey(src))
+ if(!ishuman(src) && !issmall(src))
return
if(!mind.changeling)
mind.changeling = new /datum/changeling(gender)
@@ -360,7 +360,7 @@ var/list/sting_paths
sting_paths = init_subtypes(/obj/effect/proc_holder/changeling)
if(mind.changeling.purchasedpowers)
remove_changeling_powers(1)
-
+
add_language("Changeling")
for(var/language in languages)
@@ -377,7 +377,7 @@ var/list/sting_paths
var/mob/living/carbon/C = src //only carbons have dna now, so we have to typecaste
mind.changeling.absorbed_dna |= C.dna
return 1
-
+
//Used to dump the languages from the changeling datum into the actual mob.
/mob/proc/changeling_update_languages(var/updated_languages)
@@ -400,7 +400,7 @@ var/list/sting_paths
mimicing = ""
/mob/proc/remove_changeling_powers(var/keep_free_powers=0)
- if(ishuman(src) || ismonkey(src))
+ if(ishuman(src) || issmall(src))
if(mind && mind.changeling)
digitalcamo = 0
mind.changeling.changeling_speak = 0
diff --git a/code/game/gamemodes/changeling/powers/tiny_prick.dm b/code/game/gamemodes/changeling/powers/tiny_prick.dm
index 6158b8672bd..04446895a4d 100644
--- a/code/game/gamemodes/changeling/powers/tiny_prick.dm
+++ b/code/game/gamemodes/changeling/powers/tiny_prick.dm
@@ -82,7 +82,7 @@
/obj/effect/proc_holder/changeling/sting/transformation/can_sting(var/mob/user, var/mob/target)
if(!..())
return
- if((HUSK in target.mutations) || (!ishuman(target) && !ismonkey(target)))
+ if((HUSK in target.mutations) || (!ishuman(target) && !issmall(target)))
user << "Our sting appears ineffective against its DNA."
return 0
if(ishuman(target))
@@ -95,7 +95,7 @@
/obj/effect/proc_holder/changeling/sting/transformation/sting_action(var/mob/user, var/mob/target)
add_logs(target, user, "stung", object="transformation sting", addition=" new identity is [selected_dna.real_name]")
var/datum/dna/NewDNA = selected_dna
- if(ismonkey(target))
+ if(issmall(target))
user << "We stealthily sting [target.name]."
target.dna = NewDNA.Clone()
target.real_name = NewDNA.real_name
diff --git a/code/game/gamemodes/mutiny/mutiny_hooks.dm b/code/game/gamemodes/mutiny/mutiny_hooks.dm
index 1ff1234cf2d..5fdc1ec01b5 100644
--- a/code/game/gamemodes/mutiny/mutiny_hooks.dm
+++ b/code/game/gamemodes/mutiny/mutiny_hooks.dm
@@ -12,7 +12,7 @@
mode.update_icon(H.mind)
return 1
-/hook/harvest_podman/proc/update_icon(mob/living/carbon/monkey/diona/D)
+/hook/harvest_podman/proc/update_icon(mob/living/carbon/alien/diona/D)
var/datum/game_mode/mutiny/mode = get_mutiny_mode()
if (!mode) return 1
diff --git a/code/game/gamemodes/nations/flagprocs.dm b/code/game/gamemodes/nations/flagprocs.dm
index b7dc23a2913..aa516de1f3d 100644
--- a/code/game/gamemodes/nations/flagprocs.dm
+++ b/code/game/gamemodes/nations/flagprocs.dm
@@ -23,8 +23,6 @@
/obj/item/flag/nation/attackby(var/obj/item/weapon/W, var/mob/user, params)
return
-/obj/item/flag/nation/attack_paw()
- return
/obj/item/flag/nation/ex_act()
return
diff --git a/code/game/machinery/Freezer.dm b/code/game/machinery/Freezer.dm
index 9c1bd3fdafc..fa44371b82e 100644
--- a/code/game/machinery/Freezer.dm
+++ b/code/game/machinery/Freezer.dm
@@ -82,9 +82,6 @@
/obj/machinery/atmospherics/unary/cold_sink/freezer/attack_ai(mob/user as mob)
src.attack_hand(user)
-/obj/machinery/atmospherics/unary/cold_sink/freezer/attack_paw(mob/user as mob)
- src.attack_hand(user)
-
/obj/machinery/atmospherics/unary/cold_sink/freezer/attack_hand(mob/user as mob)
if(panel_open)
user << "Close the maintenance panel first."
diff --git a/code/game/machinery/atmoalter/area_atmos_computer.dm b/code/game/machinery/atmoalter/area_atmos_computer.dm
index ddd5973c0d7..fbebcbeca44 100644
--- a/code/game/machinery/atmoalter/area_atmos_computer.dm
+++ b/code/game/machinery/atmoalter/area_atmos_computer.dm
@@ -24,8 +24,6 @@
src.add_hiddenprint(user)
return src.attack_hand(user)
- attack_paw(var/mob/user as mob)
- return
attack_hand(var/mob/user as mob)
if(..(user))
diff --git a/code/game/machinery/camera/camera.dm b/code/game/machinery/camera/camera.dm
index 7c24df85ba8..7051d805c82 100644
--- a/code/game/machinery/camera/camera.dm
+++ b/code/game/machinery/camera/camera.dm
@@ -113,17 +113,6 @@
return
user.electrocute_act(10, src)
-/obj/machinery/camera/attack_paw(mob/living/carbon/alien/humanoid/user as mob)
- if(!istype(user))
- return
- user.do_attack_animation(src)
- status = 0
- visible_message("\The [user] slashes at [src]!")
- playsound(src.loc, 'sound/weapons/slash.ogg', 100, 1)
- icon_state = "[initial(icon_state)]1"
- add_hiddenprint(user)
- deactivate(user,0)
-
/obj/machinery/camera/attackby(W as obj, mob/living/user as mob, params)
var/msg = "You attach [W] into the assembly inner circuits."
var/msg2 = "The camera already has that upgrade!"
diff --git a/code/game/machinery/computer/HolodeckControl.dm b/code/game/machinery/computer/HolodeckControl.dm
index 0143d6e4eeb..d7293163318 100644
--- a/code/game/machinery/computer/HolodeckControl.dm
+++ b/code/game/machinery/computer/HolodeckControl.dm
@@ -15,8 +15,6 @@
attack_ai(var/mob/user as mob)
return src.attack_hand(user)
- attack_paw(var/mob/user as mob)
- return
attack_hand(var/mob/user as mob)
diff --git a/code/game/machinery/computer/aifixer.dm b/code/game/machinery/computer/aifixer.dm
index 417e781e640..f171a8262b1 100644
--- a/code/game/machinery/computer/aifixer.dm
+++ b/code/game/machinery/computer/aifixer.dm
@@ -26,9 +26,6 @@
/obj/machinery/computer/aifixer/attack_ai(var/mob/user as mob)
return attack_hand(user)
-/obj/machinery/computer/aifixer/attack_paw(var/mob/user as mob)
- return attack_hand(user)
-
/obj/machinery/computer/aifixer/attack_hand(var/mob/user as mob)
if(..())
return
diff --git a/code/game/machinery/computer/camera.dm b/code/game/machinery/computer/camera.dm
index 33ac065926d..35745965926 100644
--- a/code/game/machinery/computer/camera.dm
+++ b/code/game/machinery/computer/camera.dm
@@ -46,8 +46,6 @@ var/camera_cache_id = 1
attack_ai(var/mob/user as mob)
return attack_hand(user)
- attack_paw(var/mob/user as mob)
- return attack_hand(user)
check_eye(var/mob/user as mob)
if ((get_dist(user, src) > 1 || !( user.canmove ) || user.blinded || !( current ) || !( current.status )) && (!istype(user, /mob/living/silicon)))
diff --git a/code/game/machinery/computer/prisoner.dm b/code/game/machinery/computer/prisoner.dm
index 1e667aae3b3..5bef2a94555 100644
--- a/code/game/machinery/computer/prisoner.dm
+++ b/code/game/machinery/computer/prisoner.dm
@@ -21,8 +21,6 @@
return src.attack_hand(user)
- attack_paw(var/mob/user as mob)
- return
attack_hand(var/mob/user as mob)
diff --git a/code/game/machinery/doors/airlock.dm b/code/game/machinery/doors/airlock.dm
index 617214ea5c5..a0021730a11 100644
--- a/code/game/machinery/doors/airlock.dm
+++ b/code/game/machinery/doors/airlock.dm
@@ -606,8 +606,6 @@ About the new airlock wires panel:
s.set_up(5, 1, src)
s.start()
return ..()
-/obj/machinery/door/airlock/attack_paw(mob/user as mob)
- return src.attack_hand(user)
/obj/machinery/door/airlock/attack_hand(mob/user as mob)
if(!istype(user, /mob/living/silicon))
diff --git a/code/game/machinery/doors/door.dm b/code/game/machinery/doors/door.dm
index 7fbc689bbbb..640775a48d0 100644
--- a/code/game/machinery/doors/door.dm
+++ b/code/game/machinery/doors/door.dm
@@ -132,11 +132,6 @@
/obj/machinery/door/attack_ai(mob/user as mob)
return src.attack_hand(user)
-
-/obj/machinery/door/attack_paw(mob/user as mob)
- return src.attack_hand(user)
-
-
/obj/machinery/door/attack_hand(mob/user as mob)
return src.attackby(user, user)
@@ -289,7 +284,7 @@
L.adjustBruteLoss(DOOR_CRUSH_DAMAGE)
L.emote("scream")
L.Weaken(5)
- else if(ismonkey(L)) //For monkeys
+ else if(issmall(L)) //For monkeys
L.adjustBruteLoss(DOOR_CRUSH_DAMAGE)
L.Weaken(5)
else //for simple_animals & borgs
diff --git a/code/game/machinery/doors/windowdoor.dm b/code/game/machinery/doors/windowdoor.dm
index 7a3a945721d..1430e8f00dc 100644
--- a/code/game/machinery/doors/windowdoor.dm
+++ b/code/game/machinery/doors/windowdoor.dm
@@ -227,8 +227,6 @@
return
attack_generic(user, 25)
-/obj/machinery/door/window/attack_paw(mob/user as mob)
- return src.attack_hand(user)
/obj/machinery/door/window/attack_hand(mob/user as mob)
return src.attackby(user, user)
diff --git a/code/game/machinery/guestpass.dm b/code/game/machinery/guestpass.dm
index 83cf1682bd8..65510c1d5aa 100644
--- a/code/game/machinery/guestpass.dm
+++ b/code/game/machinery/guestpass.dm
@@ -67,8 +67,6 @@
/obj/machinery/computer/guestpass/attack_ai(var/mob/user as mob)
return attack_hand(user)
-/obj/machinery/computer/guestpass/attack_paw(var/mob/user as mob)
- return attack_hand(user)
/obj/machinery/computer/guestpass/attack_hand(var/mob/user as mob)
if(..())
diff --git a/code/game/machinery/kitchen/monkeyrecycler.dm b/code/game/machinery/kitchen/monkeyrecycler.dm
index 9342e6530b3..699f52ca5c0 100644
--- a/code/game/machinery/kitchen/monkeyrecycler.dm
+++ b/code/game/machinery/kitchen/monkeyrecycler.dm
@@ -18,8 +18,8 @@
if (istype(O, /obj/item/weapon/grab))
var/obj/item/weapon/grab/G = O
var/grabbed = G.affecting
- if(istype(grabbed, /mob/living/carbon/monkey))
- var/mob/living/carbon/monkey/target = grabbed
+ if(istype(grabbed, /mob/living/carbon/human/monkey))
+ var/mob/living/carbon/human/monkey/target = grabbed
if(target.stat == 0)
user << "\red The monkey is struggling far too much to put it in the recycler."
else
diff --git a/code/game/machinery/kitchen/processor.dm b/code/game/machinery/kitchen/processor.dm
index 9cc323b8b25..dd38d825810 100644
--- a/code/game/machinery/kitchen/processor.dm
+++ b/code/game/machinery/kitchen/processor.dm
@@ -79,11 +79,11 @@
..()
/datum/food_processor_process/mob/monkey
- input = /mob/living/carbon/monkey
+ input = /mob/living/carbon/human/monkey
output = null
/datum/food_processor_process/mob/monkey/process(loc, what)
- var/mob/living/carbon/monkey/O = what
+ var/mob/living/carbon/human/monkey/O = what
if (O.client) //grief-proof
O.loc = loc
O.visible_message("Suddenly [O] jumps out from the processor!", \
diff --git a/code/game/machinery/navbeacon.dm b/code/game/machinery/navbeacon.dm
index a8f39a4597e..82328073b4b 100644
--- a/code/game/machinery/navbeacon.dm
+++ b/code/game/machinery/navbeacon.dm
@@ -128,8 +128,6 @@
/obj/machinery/navbeacon/attack_ai(var/mob/user)
interact(user, 1)
-/obj/machinery/navbeacon/attack_paw()
- return
/obj/machinery/navbeacon/attack_hand(var/mob/user)
interact(user, 0)
diff --git a/code/game/machinery/teleporter.dm b/code/game/machinery/teleporter.dm
index 9d30d7207af..6937938b135 100644
--- a/code/game/machinery/teleporter.dm
+++ b/code/game/machinery/teleporter.dm
@@ -46,7 +46,7 @@
else
..()
return
-
+
/obj/machinery/computer/teleporter/emag_act(user as mob)
if(!emagged)
emagged = 1
@@ -54,10 +54,6 @@
else
ui_interact(user)
-/obj/machinery/computer/teleporter/attack_paw(mob/user)
- usr << "You are too primitive to use this computer."
- return
-
/obj/machinery/computer/teleporter/attack_ai(mob/user)
src.attack_hand(user)
@@ -443,9 +439,6 @@
user << "You reconnect the station to nearby machinery."
return
-/obj/machinery/teleport/station/attack_paw()
- src.attack_hand()
-
/obj/machinery/teleport/station/attack_ai()
src.attack_hand()
diff --git a/code/game/objects/items.dm b/code/game/objects/items.dm
index 8b1f979d4a7..91eb8b450bf 100644
--- a/code/game/objects/items.dm
+++ b/code/game/objects/items.dm
@@ -202,7 +202,7 @@
A.unEquip(src)
user << "Your claws aren't capable of such fine manipulation."
return
- attack_paw(A)
+ attack_hand(A)
/obj/item/attack_ai(mob/user as mob)
if (istype(src.loc, /obj/item/weapon/robot_module))
diff --git a/code/game/objects/items/devices/powersink.dm b/code/game/objects/items/devices/powersink.dm
index 7c11ef5b5d6..dd163e05bed 100644
--- a/code/game/objects/items/devices/powersink.dm
+++ b/code/game/objects/items/devices/powersink.dm
@@ -67,8 +67,6 @@
attached = null
..()
- attack_paw()
- return
attack_ai()
return
diff --git a/code/game/objects/items/stacks/medical.dm b/code/game/objects/items/stacks/medical.dm
index e81b0e6e9b3..3ac400eefeb 100644
--- a/code/game/objects/items/stacks/medical.dm
+++ b/code/game/objects/items/stacks/medical.dm
@@ -15,7 +15,7 @@
user << "\The [src] cannot be applied to [M]!"
return 1
- if (!(istype(user, /mob/living/carbon/human) || istype(user, /mob/living/silicon))
+ if (!(istype(user, /mob/living/carbon/human) || istype(user, /mob/living/silicon)))
user << "You don't have the dexterity to do this!"
return 1
diff --git a/code/game/objects/items/weapons/grenades.dm b/code/game/objects/items/weapons/grenades.dm
index 3d6c101a109..5a1c01584a5 100644
--- a/code/game/objects/items/weapons/grenades.dm
+++ b/code/game/objects/items/weapons/grenades.dm
@@ -385,7 +385,7 @@
/obj/item/weapon/grenade/clusterbuster/monkey
name = "Barrel of Monkeys"
desc = "Not really that much fun."
- payload = /mob/living/carbon/monkey
+ payload = /mob/living/carbon/human/monkey
/obj/item/weapon/grenade/clusterbuster/fluffy
name = "Fluffy Love Bomb"
desc = "Exactly as snuggly as it sounds."
diff --git a/code/game/objects/items/weapons/storage/bags.dm b/code/game/objects/items/weapons/storage/bags.dm
index 349aaa62553..5a87bc98ca0 100644
--- a/code/game/objects/items/weapons/storage/bags.dm
+++ b/code/game/objects/items/weapons/storage/bags.dm
@@ -378,7 +378,7 @@
else
playsound(M, 'sound/items/trayhit2.ogg', 50, 1)
- if(ishuman(M) || ismonkey(M))
+ if(ishuman(M) || issmall(M))
if(prob(10))
M.Weaken(2)
diff --git a/code/game/objects/items/weapons/storage/boxes.dm b/code/game/objects/items/weapons/storage/boxes.dm
index f4bbc9844bf..313550779ce 100644
--- a/code/game/objects/items/weapons/storage/boxes.dm
+++ b/code/game/objects/items/weapons/storage/boxes.dm
@@ -411,7 +411,7 @@
for(var/i = 1; i <= 5; i++)
new /obj/item/weapon/reagent_containers/food/snacks/monkeycube/wrapped/neaeracube(src)
-
+/*
/obj/item/weapon/storage/box/wolpincubes
name = "wolpin cube box"
desc = "Drymate brand wolpin cubes. Just add water!"
@@ -423,6 +423,7 @@
..()
for(var/i = 1; i <= 5; i++)
new /obj/item/weapon/reagent_containers/food/snacks/monkeycube/wrapped/wolpincube(src)
+*/
/obj/item/weapon/storage/box/permits
name = "box of construction permits"
diff --git a/code/game/objects/items/weapons/storage/firstaid.dm b/code/game/objects/items/weapons/storage/firstaid.dm
index 30966b998d1..8a68307065f 100644
--- a/code/game/objects/items/weapons/storage/firstaid.dm
+++ b/code/game/objects/items/weapons/storage/firstaid.dm
@@ -168,7 +168,7 @@
/obj/item/weapon/storage/pill_bottle/MouseDrop(obj/over_object as obj) //Quick pillbottle fix. -Agouri
- if (ishuman(usr) || ismonkey(usr)) //Can monkeys even place items in the pocket slots? Leaving this in just in case~
+ if (ishuman(usr) || issmall(usr)) //Can monkeys even place items in the pocket slots? Leaving this in just in case~
var/mob/M = usr
if (!( istype(over_object, /obj/screen) ))
return ..()
diff --git a/code/game/objects/structures/crates_lockers/closets/statue.dm b/code/game/objects/structures/crates_lockers/closets/statue.dm
index 82b305ec200..03911c66984 100644
--- a/code/game/objects/structures/crates_lockers/closets/statue.dm
+++ b/code/game/objects/structures/crates_lockers/closets/statue.dm
@@ -14,7 +14,7 @@
/obj/structure/closet/statue/New(loc, var/mob/living/L)
- if(ishuman(L) || ismonkey(L) || iscorgi(L))
+ if(ishuman(L) || issmall(L) || iscorgi(L))
if(L.buckled)
L.buckled = 0
L.anchored = 0
@@ -32,7 +32,7 @@
name = "statue of [L.name]"
if(L.gender == "female")
icon_state = "human_female"
- else if(ismonkey(L))
+ else if(issmall(L))
name = "statue of a monkey"
icon_state = "monkey"
else if(iscorgi(L))
diff --git a/code/game/supplyshuttle.dm b/code/game/supplyshuttle.dm
index e610994fc5c..dd371817dca 100644
--- a/code/game/supplyshuttle.dm
+++ b/code/game/supplyshuttle.dm
@@ -328,14 +328,10 @@ var/list/mechtoys = list(
/obj/machinery/computer/ordercomp/attack_ai(var/mob/user as mob)
return attack_hand(user)
-/obj/machinery/computer/ordercomp/attack_paw(var/mob/user as mob)
- return attack_hand(user)
/obj/machinery/computer/supplycomp/attack_ai(var/mob/user as mob)
return attack_hand(user)
-/obj/machinery/computer/supplycomp/attack_paw(var/mob/user as mob)
- return attack_hand(user)
/obj/machinery/computer/ordercomp/attack_hand(var/mob/user as mob)
if(..())
diff --git a/code/modules/awaymissions/mission_code/wildwest.dm b/code/modules/awaymissions/mission_code/wildwest.dm
index 2f1edeacaa5..3e2910fa556 100644
--- a/code/modules/awaymissions/mission_code/wildwest.dm
+++ b/code/modules/awaymissions/mission_code/wildwest.dm
@@ -170,7 +170,7 @@
if(triggered) return
- if(istype(M, /mob/living/carbon/human) || istype(M, /mob/living/carbon/monkey))
+ if(istype(M, /mob/living/carbon/human))
for(var/mob/O in viewers(world.view, src.loc))
O << "[M] triggered the \icon[src] [src]"
triggered = 1
diff --git a/code/modules/hydroponics/seed.dm b/code/modules/hydroponics/seed.dm
index 9d023c52c48..1919da66b69 100644
--- a/code/modules/hydroponics/seed.dm
+++ b/code/modules/hydroponics/seed.dm
@@ -728,7 +728,7 @@
else
product = new /obj/item/weapon/reagent_containers/food/snacks/grown(get_turf(user),name)
if(get_trait(TRAIT_PRODUCT_COLOUR))
- if(!has_mob_product || (has_mob_product && has_mob_product != /mob/living/carbon/monkey/diona))
+ if(!has_mob_product || (has_mob_product && has_mob_product != /mob/living/carbon/alien/diona))
product.color = get_trait(TRAIT_PRODUCT_COLOUR)
if(istype(product,/obj/item/weapon/reagent_containers/food))
var/obj/item/weapon/reagent_containers/food/food = product
diff --git a/code/modules/hydroponics/seed_datums.dm b/code/modules/hydroponics/seed_datums.dm
index e1eb5c8681b..e70b16a4a69 100644
--- a/code/modules/hydroponics/seed_datums.dm
+++ b/code/modules/hydroponics/seed_datums.dm
@@ -1055,7 +1055,7 @@
seed_noun = "nodes"
display_name = "replicant pods"
can_self_harvest = 1
- has_mob_product = /mob/living/carbon/monkey/diona
+ has_mob_product = /mob/living/carbon/alien/diona
/datum/seed/diona/New()
..()
diff --git a/code/modules/hydroponics/trays/tray.dm b/code/modules/hydroponics/trays/tray.dm
index 9e727f62bcb..374cd73ac8c 100644
--- a/code/modules/hydroponics/trays/tray.dm
+++ b/code/modules/hydroponics/trays/tray.dm
@@ -138,8 +138,8 @@
return ..()
/obj/machinery/portable_atmospherics/hydroponics/proc/attack_generic(var/mob/user)
- if(istype(user,/mob/living/carbon/monkey/diona))
- var/mob/living/carbon/monkey/diona/nymph = user
+ if(istype(user,/mob/living/carbon/alien/diona))
+ var/mob/living/carbon/alien/diona/nymph = user
if(nymph.stat == DEAD || nymph.paralysis || nymph.weakened || nymph.stunned || nymph.restrained())
return
diff --git a/code/modules/jungle/jungle_animals.dm b/code/modules/jungle/jungle_animals.dm
index 32db403da09..cb138b8baac 100644
--- a/code/modules/jungle/jungle_animals.dm
+++ b/code/modules/jungle/jungle_animals.dm
@@ -36,7 +36,7 @@
/obj/effect/landmark/animal_spawner/monkey
name = "monkey spawner"
- spawn_type = /mob/living/carbon/monkey
+ spawn_type = /mob/living/carbon/human/monkey
/obj/effect/landmark/animal_spawner/snake
name = "snake spawner"
diff --git a/code/modules/media/jukebox.dm b/code/modules/media/jukebox.dm
index e0fbf78ca6d..6e5554a52dd 100644
--- a/code/modules/media/jukebox.dm
+++ b/code/modules/media/jukebox.dm
@@ -87,8 +87,6 @@ var/global/loopModeNames=list(
/obj/machinery/media/jukebox/attack_ai(var/mob/user)
attack_hand(user)
-/obj/machinery/media/jukebox/attack_paw()
- return
/obj/machinery/media/jukebox/power_change()
..()
diff --git a/code/modules/mob/living/carbon/alien/diona/diona.dm b/code/modules/mob/living/carbon/alien/diona/diona.dm
new file mode 100644
index 00000000000..981e2507494
--- /dev/null
+++ b/code/modules/mob/living/carbon/alien/diona/diona.dm
@@ -0,0 +1,34 @@
+/mob/living/carbon/alien/diona
+ name = "diona nymph"
+ voice_name = "diona nymph"
+ adult_form = /mob/living/carbon/human
+ speak_emote = list("chirrups")
+ icon_state = "nymph"
+ language = "Rootspeak"
+
+ universal_understand = 1
+ universal_speak = 0 // Dionaea do not need to speak to people other than other dionaea.
+ holder_type = /obj/item/weapon/holder/diona
+
+/mob/living/carbon/alien/diona/New()
+
+ ..()
+ species = all_species["Diona"]
+ verbs += /mob/living/carbon/alien/diona/proc/merge
+
+/mob/living/carbon/alien/diona/start_pulling(var/atom/movable/AM)
+ //TODO: Collapse these checks into one proc (see pai and drone)
+ if(istype(AM,/obj/item))
+ var/obj/item/O = AM
+ if(O.w_class > 2)
+ src << "You are too small to pull that."
+ return
+ else
+ ..()
+ else
+ src << "You are too small to pull that."
+ return
+
+/mob/living/carbon/alien/diona/put_in_hands(var/obj/item/W) // No hands.
+ W.loc = get_turf(src)
+ return 1
diff --git a/code/modules/mob/living/carbon/alien/diona/diona_attacks.dm b/code/modules/mob/living/carbon/alien/diona/diona_attacks.dm
new file mode 100644
index 00000000000..5490d33fcbc
--- /dev/null
+++ b/code/modules/mob/living/carbon/alien/diona/diona_attacks.dm
@@ -0,0 +1,7 @@
+/mob/living/carbon/alien/diona/attack_hand(mob/living/carbon/human/M as mob)
+ if(istype(M) && M.a_intent == "help")
+ if(M.species && M.species.name == "Diona" && do_merge(M))
+ return
+ get_scooped(M)
+ return
+ ..()
\ No newline at end of file
diff --git a/code/modules/mob/living/carbon/alien/diona/diona_powers.dm b/code/modules/mob/living/carbon/alien/diona/diona_powers.dm
new file mode 100644
index 00000000000..54678e1ea01
--- /dev/null
+++ b/code/modules/mob/living/carbon/alien/diona/diona_powers.dm
@@ -0,0 +1,69 @@
+//Verbs after this point.
+/mob/living/carbon/alien/diona/proc/merge()
+
+ set category = "Abilities"
+ set name = "Merge with gestalt"
+ set desc = "Merge with another diona."
+
+ if(stat == DEAD || paralysis || weakened || stunned || restrained())
+ return
+
+ if(istype(src.loc,/mob/living/carbon))
+ src.verbs -= /mob/living/carbon/alien/diona/proc/merge
+ return
+
+ var/list/choices = list()
+ for(var/mob/living/carbon/C in view(1,src))
+
+ if(!(src.Adjacent(C)) || !(C.client)) continue
+
+ if(istype(C,/mob/living/carbon/human))
+ var/mob/living/carbon/human/D = C
+ if(D.species && D.species.name == "Diona")
+ choices += C
+
+ var/mob/living/M = input(src,"Who do you wish to merge with?") in null|choices
+
+ if(!M)
+ src << "There is nothing nearby to merge with."
+ else if(!do_merge(M))
+ src << "You fail to merge with \the [M]..."
+
+/mob/living/carbon/alien/diona/proc/do_merge(var/mob/living/carbon/human/H)
+ if(!istype(H) || !src || !(src.Adjacent(H)))
+ return 0
+ H << "You feel your being twine with that of \the [src] as it merges with your biomass."
+ H.status_flags |= PASSEMOTES
+ 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
+
+/mob/living/carbon/alien/diona/proc/split()
+
+ set category = "Abilities"
+ set name = "Split from gestalt"
+ set desc = "Split away from your gestalt as a lone nymph."
+
+ if(stat == DEAD || paralysis || weakened || stunned || restrained())
+ return
+
+ if(!(istype(src.loc,/mob/living/carbon)))
+ src.verbs -= /mob/living/carbon/alien/diona/proc/split
+ return
+
+ src.loc << "You feel a pang of loss as [src] splits away from your biomass."
+ src << "You wiggle out of the depths of [src.loc]'s biomass and plop to the ground."
+
+ 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
+
+ if(istype(M))
+ for(var/atom/A in M.contents)
+ if(istype(A,/mob/living/simple_animal/borer) || istype(A,/obj/item/weapon/holder))
+ return
+ M.status_flags &= ~PASSEMOTES
\ No newline at end of file
diff --git a/code/modules/mob/living/carbon/monkey/diona.dm b/code/modules/mob/living/carbon/alien/diona/dionaold.dm
similarity index 100%
rename from code/modules/mob/living/carbon/monkey/diona.dm
rename to code/modules/mob/living/carbon/alien/diona/dionaold.dm
diff --git a/code/modules/mob/living/carbon/alien/diona/life.dm b/code/modules/mob/living/carbon/alien/diona/life.dm
new file mode 100644
index 00000000000..ec0dd5d7e17
--- /dev/null
+++ b/code/modules/mob/living/carbon/alien/diona/life.dm
@@ -0,0 +1,22 @@
+//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
+ var/atom/movable/lighting_overlay/L = locate(/atom/movable/lighting_overlay) in T
+ if(L)
+ light_amount = min(10,L.lum_r + L.lum_g + L.lum_b) - 5 //hardcapped so it's not abused by having a ton of flashlights
+ else
+ light_amount = 5
+
+
+ nutrition += light_amount
+
+ if(nutrition > 500)
+ nutrition = 500
+ if(light_amount > 2) //if there's enough light, heal
+ adjustBruteLoss(-1)
+ adjustFireLoss(-1)
+ adjustToxLoss(-1)
+ adjustOxyLoss(-1)
\ No newline at end of file
diff --git a/code/modules/mob/living/carbon/alien/diona/progression.dm b/code/modules/mob/living/carbon/alien/diona/progression.dm
new file mode 100644
index 00000000000..588acea5ad8
--- /dev/null
+++ b/code/modules/mob/living/carbon/alien/diona/progression.dm
@@ -0,0 +1,19 @@
+/mob/living/carbon/alien/diona/confirm_evolution()
+
+ if(!is_alien_whitelisted(src, "Diona") && config.usealienwhitelist)
+ src << alert("You are currently not whitelisted to play as a full diona.")
+ return null
+
+ if(amount_grown < max_grown)
+ src << "You are not yet ready for your growth..."
+ return null
+
+ src.split()
+
+ if(istype(loc,/obj/item/weapon/holder/diona))
+ var/obj/item/weapon/holder/diona/L = loc
+ src.loc = L.loc
+ qdel(L)
+
+ src.visible_message("\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.","\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.")
+ return "Diona"
\ No newline at end of file
diff --git a/code/modules/mob/living/carbon/alien/diona/say_understands.dm b/code/modules/mob/living/carbon/alien/diona/say_understands.dm
new file mode 100644
index 00000000000..3f68a44cffb
--- /dev/null
+++ b/code/modules/mob/living/carbon/alien/diona/say_understands.dm
@@ -0,0 +1,6 @@
+/mob/living/carbon/alien/diona/say_understands(var/mob/other,var/datum/language/speaking = null)
+
+ if (istype(other, /mob/living/carbon/human) && !speaking)
+ if(languages.len >= 2) // They have sucked down some blood.
+ return 1
+ return ..()
\ No newline at end of file
diff --git a/code/modules/mob/living/carbon/alien/diona/update_icons.dm b/code/modules/mob/living/carbon/alien/diona/update_icons.dm
new file mode 100644
index 00000000000..b39972cdad3
--- /dev/null
+++ b/code/modules/mob/living/carbon/alien/diona/update_icons.dm
@@ -0,0 +1,8 @@
+/mob/living/carbon/alien/diona/update_icons()
+
+ if(stat == DEAD)
+ icon_state = "[initial(icon_state)]_dead"
+ else if(lying || resting || stunned)
+ icon_state = "[initial(icon_state)]_sleep"
+ else
+ icon_state = "[initial(icon_state)]"
diff --git a/code/modules/mob/living/carbon/alien/humanoid/humanoid.dm b/code/modules/mob/living/carbon/alien/humanoid/humanoid.dm
index c054f766dac..6c01076a72f 100644
--- a/code/modules/mob/living/carbon/alien/humanoid/humanoid.dm
+++ b/code/modules/mob/living/carbon/alien/humanoid/humanoid.dm
@@ -136,34 +136,6 @@
updatehealth()
return
-/mob/living/carbon/alien/humanoid/attack_paw(mob/living/carbon/monkey/M as mob)
- if(!ismonkey(M)) return//Fix for aliens receiving double messages when attacking other aliens.
-
- if (!ticker)
- M << "You cannot attack people before the game has started."
- return
-
- if (istype(loc, /turf) && istype(loc.loc, /area/start))
- M << "No attacking people at spawn, you jackass."
- return
- ..()
-
- switch(M.a_intent)
-
- if ("help")
- help_shake_act(M)
- else
- M.do_attack_animation(src)
- if (istype(src.wear_mask, /obj/item/clothing/mask/muzzle))
- return
- playsound(loc, 'sound/weapons/bite.ogg', 50, 1, -1)
- visible_message("[M.name] bites [src]!", \
- "[M.name] bites [src]!")
- if (health > -100)
- adjustBruteLoss(rand(1, 3))
- updatehealth()
- return
-
/mob/living/carbon/alien/humanoid/attack_slime(mob/living/carbon/slime/M as mob)
if (!ticker)
diff --git a/code/modules/mob/living/carbon/alien/larva/larva.dm b/code/modules/mob/living/carbon/alien/larva/larva.dm
index 30ca1668054..a7207f22f9d 100644
--- a/code/modules/mob/living/carbon/alien/larva/larva.dm
+++ b/code/modules/mob/living/carbon/alien/larva/larva.dm
@@ -155,34 +155,6 @@
updatehealth()
-/mob/living/carbon/alien/larva/attack_paw(mob/living/carbon/monkey/M as mob)
- if(!(istype(M, /mob/living/carbon/monkey))) return//Fix for aliens receiving double messages when attacking other aliens.
-
- if (!ticker)
- M << "You cannot attack people before the game has started."
- return
-
- if (istype(loc, /turf) && istype(loc.loc, /area/start))
- M << "No attacking people at spawn, you jackass."
- return
- ..()
-
- switch(M.a_intent)
-
- if ("help")
- help_shake_act(M)
- else
- M.do_attack_animation(src)
- if (istype(src.wear_mask, /obj/item/clothing/mask/muzzle))
- return
- playsound(loc, 'sound/weapons/bite.ogg', 50, 1, -1)
- visible_message("[M.name] bites [src]!", \
- "[M.name] bites [src]!")
- if (health > -100)
- adjustBruteLoss(rand(1, 3))
- updatehealth()
- return
-
/mob/living/carbon/alien/larva/attack_slime(mob/living/carbon/slime/M as mob)
if (!ticker)
diff --git a/code/modules/mob/living/carbon/alien/special/facehugger.dm b/code/modules/mob/living/carbon/alien/special/facehugger.dm
index 37381273369..9fd07805651 100644
--- a/code/modules/mob/living/carbon/alien/special/facehugger.dm
+++ b/code/modules/mob/living/carbon/alien/special/facehugger.dm
@@ -240,7 +240,7 @@ var/const/MAX_ACTIVE_TIME = 400
if(M.stat == DEAD)
return 0
- if(iscorgi(M) || ismonkey(M))
+ if(iscorgi(M) || issmall(M))
return 1
var/mob/living/carbon/C = M
diff --git a/code/modules/mob/living/carbon/human/examine.dm b/code/modules/mob/living/carbon/human/examine.dm
index 8e7f0f71622..06186ea604a 100644
--- a/code/modules/mob/living/carbon/human/examine.dm
+++ b/code/modules/mob/living/carbon/human/examine.dm
@@ -256,7 +256,7 @@
if(getBrainLoss() >= 60)
msg += "[t_He] [t_has] a stupid expression on [t_his] face.\n"
- if(species.show_ssd && (!species.has_organ["brain"] || has_brain()) && stat != DEAD)
+ if(species.show_ssd && (!species.has_organ["brain"] || brain_op_stage != 4) && stat != DEAD)
if(!key)
msg += "[t_He] [t_is] fast asleep. It doesn't look like they are waking up anytime soon.\n"
else if(!client)
diff --git a/code/modules/mob/living/carbon/human/npcs.dm b/code/modules/mob/living/carbon/human/npcs.dm
index 290c81723ee..a51a9cbd990 100644
--- a/code/modules/mob/living/carbon/human/npcs.dm
+++ b/code/modules/mob/living/carbon/human/npcs.dm
@@ -2,7 +2,7 @@
name = "fancy uniform"
desc = "It looks like it was tailored for a monkey."
icon_state = "punpun"
- item_color = "punpun"
+ _color = "punpun"
species_restricted = list("Monkey")
/mob/living/carbon/human/monkey/punpun/New()
diff --git a/code/modules/mob/living/carbon/human/say.dm b/code/modules/mob/living/carbon/human/say.dm
index 53d6689d36e..65d35e5c080 100644
--- a/code/modules/mob/living/carbon/human/say.dm
+++ b/code/modules/mob/living/carbon/human/say.dm
@@ -190,7 +190,7 @@
//These only pertain to common. Languages are handled by mob/say_understands()
if (!speaking)
- if (istype(other, /mob/living/carbon/monkey/diona))
+ if (istype(other, /mob/living/carbon/alien/diona))
if(other.languages.len >= 2) //They've sucked down some blood and can speak common now.
return 1
if (istype(other, /mob/living/silicon))
diff --git a/code/modules/mob/living/carbon/human/species/apollo.dm b/code/modules/mob/living/carbon/human/species/apollo.dm
index bddfa770a14..409944cd048 100644
--- a/code/modules/mob/living/carbon/human/species/apollo.dm
+++ b/code/modules/mob/living/carbon/human/species/apollo.dm
@@ -5,7 +5,7 @@
language = "Wryn Hivemind"
tail = "wryntail"
unarmed_type = /datum/unarmed_attack/punch/weak
- primitive = /mob/living/carbon/monkey/wryn
+ //primitive = /mob/living/carbon/monkey/wryn
darksight = 3
slowdown = 1
warning_low_pressure = -300
diff --git a/code/modules/mob/living/carbon/human/species/monkey.dm b/code/modules/mob/living/carbon/human/species/monkey.dm
index 4f00eaea20a..97c57a1af47 100644
--- a/code/modules/mob/living/carbon/human/species/monkey.dm
+++ b/code/modules/mob/living/carbon/human/species/monkey.dm
@@ -1,6 +1,5 @@
/datum/species/monkey
name = "Monkey"
- name_plural = "Monkeys"
blurb = "Ook."
icobase = 'icons/mob/human_races/monkeys/r_monkey.dmi'
@@ -12,22 +11,18 @@
default_language = "Chimpanzee"
greater_form = "Human"
is_small = 1
- has_fine_manipulation = 0
+ //has_fine_manipulation = 0
show_ssd = 0
eyes = "blank_eyes"
- gibbed_anim = "gibbed-m"
- dusted_anim = "dust-m"
- death_message = "lets out a faint chimper as it collapses and stops moving..."
tail = "chimptail"
- unarmed_types = list(/datum/unarmed_attack/bite, /datum/unarmed_attack/claws)
- inherent_verbs = list(/mob/living/proc/ventcrawl)
- hud_type = /datum/hud_data/monkey
+ //unarmed_types = list(/datum/unarmed_attack/bite, /datum/unarmed_attack/claws)
+ //inherent_verbs = list(/mob/living/proc/ventcrawl)
+ //hud_type = /datum/hud_data/monkey
meat_type = /obj/item/weapon/reagent_containers/food/snacks/meat/monkey
- rarity_value = 0.1
- total_health = 75
+ //total_health = 75
brute_mod = 1.5
burn_mod = 1.5
@@ -48,7 +43,6 @@
/datum/species/monkey/tajaran
name = "Farwa"
- name_plural = "Farwa"
icobase = 'icons/mob/human_races/monkeys/r_farwa.dmi'
deform = 'icons/mob/human_races/monkeys/r_farwa.dmi'
@@ -61,7 +55,6 @@
/datum/species/monkey/skrell
name = "Neara"
- name_plural = "Neara"
icobase = 'icons/mob/human_races/monkeys/r_neara.dmi'
deform = 'icons/mob/human_races/monkeys/r_neara.dmi'
@@ -75,7 +68,6 @@
/datum/species/monkey/unathi
name = "Stok"
- name_plural = "Stok"
icobase = 'icons/mob/human_races/monkeys/r_stok.dmi'
deform = 'icons/mob/human_races/monkeys/r_stok.dmi'
diff --git a/code/modules/mob/living/carbon/human/species/station.dm b/code/modules/mob/living/carbon/human/species/station.dm
index c7cdb5b6cd9..2f50a1b21da 100644
--- a/code/modules/mob/living/carbon/human/species/station.dm
+++ b/code/modules/mob/living/carbon/human/species/station.dm
@@ -388,7 +388,7 @@
)
/datum/species/diona/can_understand(var/mob/other)
- var/mob/living/carbon/monkey/diona/D = other
+ var/mob/living/carbon/alien/diona/D = other
if(istype(D))
return 1
return 0
@@ -401,14 +401,14 @@
/* //overpowered and dumb as hell; they get cloning back, though.
/datum/species/diona/handle_death(var/mob/living/carbon/human/H)
- var/mob/living/carbon/monkey/diona/S = new(get_turf(H))
+ var/mob/living/carbon/alien/diona/S = new(get_turf(H))
if(H.mind)
H.mind.transfer_to(S)
else
S.key = H.key
- for(var/mob/living/carbon/monkey/diona/D in H.contents)
+ for(var/mob/living/carbon/alien/diona/D in H.contents)
if(D.client)
D.loc = H.loc
else
diff --git a/code/modules/mob/living/carbon/human/update_icons.dm b/code/modules/mob/living/carbon/human/update_icons.dm
index cdc370a4d53..7361b4b5a75 100644
--- a/code/modules/mob/living/carbon/human/update_icons.dm
+++ b/code/modules/mob/living/carbon/human/update_icons.dm
@@ -185,14 +185,6 @@ Please contact me on #coderbus IRC. ~Carn x
var/global/list/damage_icon_parts = list()
-proc/get_damage_icon_part(damage_state, body_part)
- if(damage_icon_parts["[damage_state]/[body_part]"] == null)
- var/icon/DI = new /icon('icons/mob/dam_human.dmi', damage_state) // the damage icon for whole human
- DI.Blend(new /icon('icons/mob/dam_mask.dmi', body_part), ICON_MULTIPLY) // mask with this organ's pixels
- damage_icon_parts["[damage_state]/[body_part]"] = DI
- return DI
- else
- return damage_icon_parts["[damage_state]/[body_part]"]
//DAMAGE OVERLAYS
//constructs damage icon for each organ from mask * damage field and saves it in our overlays_ lists
@@ -213,7 +205,7 @@ proc/get_damage_icon_part(damage_state, body_part)
previous_damage_appearance = damage_appearance
- var/icon/standing = new /icon('icons/mob/dam_human.dmi', "00")
+ var/icon/standing = new /icon(species.damage_overlays, "00")
var/image/standing_image = new /image("icon" = standing)
@@ -224,9 +216,15 @@ proc/get_damage_icon_part(damage_state, body_part)
if(!(O.status & ORGAN_DESTROYED))
O.update_icon()
if(O.damage_state == "00") continue
-
- var/icon/DI = get_damage_icon_part(O.damage_state, O.icon_name)
-
+ var/icon/DI
+ var/cache_index = "[O.damage_state]/[O.icon_name]/[species.blood_color]/[species.name]"
+ if(damage_icon_parts[cache_index] == null)
+ DI = new /icon(species.damage_overlays, O.damage_state) // the damage icon for whole human
+ DI.Blend(new /icon(species.damage_mask, O.icon_name), ICON_MULTIPLY) // mask with this organ's pixels
+ DI.Blend(species.blood_color, ICON_MULTIPLY)
+ damage_icon_parts[cache_index] = DI
+ else
+ DI = damage_icon_parts[cache_index]
standing_image.overlays += DI
overlays_standing[DAMAGE_LAYER] = standing_image
@@ -525,7 +523,7 @@ proc/get_damage_icon_part(damage_state, body_part)
standing.icon = w_uniform.sprite_sheets[species.name]
if(w_uniform.blood_DNA)
- var/image/bloodsies = image("icon" = 'icons/effects/blood.dmi', "icon_state" = "uniformblood")
+ var/image/bloodsies = image("icon" = species.blood_mask, "icon_state" = "uniformblood")
bloodsies.color = w_uniform.blood_color
standing.overlays += bloodsies
@@ -580,14 +578,14 @@ proc/get_damage_icon_part(damage_state, body_part)
standing = image("icon" = 'icons/mob/hands.dmi', "icon_state" = "[t_state]")
if(gloves.blood_DNA)
- var/image/bloodsies = image("icon" = 'icons/effects/blood.dmi', "icon_state" = "bloodyhands")
+ var/image/bloodsies = image("icon" = species.blood_mask, "icon_state" = "bloodyhands")
bloodsies.color = gloves.blood_color
standing.overlays += bloodsies
gloves.screen_loc = ui_gloves
overlays_standing[GLOVES_LAYER] = standing
else
if(blood_DNA)
- var/image/bloodsies = image("icon" = 'icons/effects/blood.dmi', "icon_state" = "bloodyhands")
+ var/image/bloodsies = image("icon" = species.blood_mask, "icon_state" = "bloodyhands")
bloodsies.color = hand_blood_color
overlays_standing[GLOVES_LAYER] = bloodsies
else
@@ -652,13 +650,13 @@ proc/get_damage_icon_part(damage_state, body_part)
if(shoes.blood_DNA)
- var/image/bloodsies = image("icon" = 'icons/effects/blood.dmi', "icon_state" = "shoeblood")
+ var/image/bloodsies = image("icon" = species.blood_mask, "icon_state" = "shoeblood")
bloodsies.color = shoes.blood_color
standing.overlays += bloodsies
overlays_standing[SHOES_LAYER] = standing
else
if(feet_blood_DNA)
- var/image/bloodsies = image("icon" = 'icons/effects/blood.dmi', "icon_state" = "shoeblood")
+ var/image/bloodsies = image("icon" = species.blood_mask, "icon_state" = "shoeblood")
bloodsies.color = feet_blood_color
overlays_standing[SHOES_LAYER] = bloodsies
else
@@ -695,7 +693,7 @@ proc/get_damage_icon_part(damage_state, body_part)
standing = image("icon" = 'icons/mob/head.dmi', "icon_state" = "[head.icon_state]")
if(head.blood_DNA)
- var/image/bloodsies = image("icon" = 'icons/effects/blood.dmi', "icon_state" = "helmetblood")
+ var/image/bloodsies = image("icon" = species.blood_mask, "icon_state" = "helmetblood")
bloodsies.color = head.blood_color
standing.overlays += bloodsies
overlays_standing[HEAD_LAYER] = standing
@@ -751,7 +749,7 @@ proc/get_damage_icon_part(damage_state, body_part)
if(wear_suit.blood_DNA)
var/obj/item/clothing/suit/S = wear_suit
- var/image/bloodsies = image("icon" = 'icons/effects/blood.dmi', "icon_state" = "[S.blood_overlay_type]blood")
+ var/image/bloodsies = image("icon" = species.blood_mask, "icon_state" = "[S.blood_overlay_type]blood")
bloodsies.color = wear_suit.blood_color
standing.overlays += bloodsies
@@ -791,7 +789,9 @@ proc/get_damage_icon_part(damage_state, body_part)
standing = image("icon" = 'icons/mob/mask.dmi', "icon_state" = "[wear_mask.icon_state]")
if( !istype(wear_mask, /obj/item/clothing/mask/cigarette) && wear_mask.blood_DNA )
- standing.overlays += image("icon" = 'icons/effects/blood.dmi', "icon_state" = "maskblood")
+ var/image/bloodsies = image("icon" = species.blood_mask, "icon_state" = "maskblood")
+ bloodsies.color = wear_mask.blood_color
+ standing.overlays += bloodsies
overlays_standing[FACEMASK_LAYER] = standing
else
overlays_standing[FACEMASK_LAYER] = null
diff --git a/code/modules/mob/living/carbon/metroid/life.dm b/code/modules/mob/living/carbon/metroid/life.dm
index a839b8a85b2..d2cfeeb9037 100644
--- a/code/modules/mob/living/carbon/metroid/life.dm
+++ b/code/modules/mob/living/carbon/metroid/life.dm
@@ -379,7 +379,7 @@
Target = C
break
- if(islarva(C) || ismonkey(C))
+ if(islarva(C) || issmall(C))
Target = C
break
diff --git a/code/modules/mob/living/carbon/metroid/metroid.dm b/code/modules/mob/living/carbon/metroid/metroid.dm
index c2c7f678a72..cc412c799f3 100644
--- a/code/modules/mob/living/carbon/metroid/metroid.dm
+++ b/code/modules/mob/living/carbon/metroid/metroid.dm
@@ -291,37 +291,6 @@
adjustBruteLoss(damage)
updatehealth()
-/mob/living/carbon/slime/attack_paw(mob/living/carbon/monkey/M as mob)
- if(!(istype(M, /mob/living/carbon/monkey)))
- return // Fix for aliens receiving double messages when attacking other aliens.
-
- if (!ticker)
- M << "You cannot attack people before the game has started."
- return
-
- if (istype(loc, /turf) && istype(loc.loc, /area/start))
- M << "No attacking people at spawn, you jackass."
- return
-
- ..()
-
- switch(M.a_intent)
-
- if ("help")
- help_shake_act(M)
- else
- if (istype(wear_mask, /obj/item/clothing/mask/muzzle))
- return
- if (health > 0)
- M.do_attack_animation(src)
- attacked += 10
- //playsound(loc, 'sound/weapons/bite.ogg', 50, 1, -1)
- visible_message("[M.name] has attacked [src]!", \
- "[M.name] has attacked [src]!")
- adjustBruteLoss(rand(1, 3))
- updatehealth()
- return
-
/mob/living/carbon/slime/attack_larva(mob/living/carbon/alien/larva/L as mob)
switch(L.a_intent)
diff --git a/code/modules/mob/living/carbon/monkey/death.dm b/code/modules/mob/living/carbon/monkey/death.dm
deleted file mode 100644
index 0c3ef632cca..00000000000
--- a/code/modules/mob/living/carbon/monkey/death.dm
+++ /dev/null
@@ -1,56 +0,0 @@
-/mob/living/carbon/monkey/gib()
- death(1)
- var/atom/movable/overlay/animation = null
- notransform = 1
- canmove = 0
- icon = null
- invisibility = 101
-
- animation = new(loc)
- animation.icon_state = "blank"
- animation.icon = 'icons/mob/mob.dmi'
- animation.master = src
-
- flick("gibbed-m", animation)
- gibs(loc, viruses, dna)
-
- spawn(15)
- if(animation) del(animation)
- if(src) del(src)
-
-/mob/living/carbon/monkey/dust()
- death(1)
- var/atom/movable/overlay/animation = null
- notransform = 1
- canmove = 0
- icon = null
- invisibility = 101
-
- animation = new(loc)
- animation.icon_state = "blank"
- animation.icon = 'icons/mob/mob.dmi'
- animation.master = src
-
- flick("dust-m", animation)
- new /obj/effect/decal/cleanable/ash(loc)
-
- spawn(15)
- if(animation) del(animation)
- if(src) del(src)
-
-
-/mob/living/carbon/monkey/death(gibbed)
- if(stat == DEAD) return
- if(healths) healths.icon_state = "health5"
- stat = DEAD
-
- if(!gibbed)
- for(var/mob/O in viewers(src, null))
- O.show_message("The [name] lets out a faint chimper as it collapses and stops moving...", 1) //ded -- Urist
-
- update_canmove()
- if(blind) blind.layer = 0
-
- ticker.mode.check_win()
-
- return ..(gibbed)
\ No newline at end of file
diff --git a/code/modules/mob/living/carbon/monkey/emote.dm b/code/modules/mob/living/carbon/monkey/emote.dm
deleted file mode 100644
index c7973bc4eb8..00000000000
--- a/code/modules/mob/living/carbon/monkey/emote.dm
+++ /dev/null
@@ -1,157 +0,0 @@
-/mob/living/carbon/monkey/emote(var/act,var/m_type=1,var/message = null)
-
- var/param = null
- if (findtext(act, "-", 1, null))
- var/t1 = findtext(act, "-", 1, null)
- param = copytext(act, t1 + 1, length(act) + 1)
- act = copytext(act, 1, t1)
-
- if(findtext(act,"s",-1) && !findtext(act,"_",-2))//Removes ending s's unless they are prefixed with a '_'
- act = copytext(act,1,length(act))
-
- var/muzzled = is_muzzled()
-
- //Emote Cooldown System (it's so simple!)
- // proc/handle_emote_CD() located in [code\modules\mob\emote.dm]
- var/on_CD = 0
- switch(act)
- //Cooldown-inducing emotes
- if("chirp")
- if(istype(src,/mob/living/carbon/monkey/diona)) //Only Diona Nymphs can chirp
- on_CD = handle_emote_CD() //proc located in code\modules\mob\emote.dm
- else //Everyone else fails, skip the emote attempt
- return
- //Everything else, including typos of the above emotes
- else
- on_CD = 0 //If it doesn't induce the cooldown, we won't check for the cooldown
-
- if(on_CD == 1) // Check if we need to suppress the emote attempt.
- return // Suppress emote, you're still cooling off.
- //--FalseIncarnate
-
- switch(act)
- if ("me")
- if(silent)
- return
- if (src.client)
- if (client.prefs.muted & MUTE_IC)
- src << "\red You cannot send IC messages (muted)."
- return
- if (src.client.handle_spam_prevention(message,MUTE_IC))
- return
- if (stat)
- return
- if(!(message))
- return
- return custom_emote(m_type, message)
-
-
- if ("custom")
- return custom_emote(m_type, message)
-
- if ("chirp")
- message = "The [src.name] chirps!"
- playsound(src.loc, 'sound/misc/nymphchirp.ogg', 50, 0)
- m_type = 2
- if("sign")
- if (!src.restrained())
- message = text("The monkey signs[].", (text2num(param) ? text(" the number []", text2num(param)) : null))
- m_type = 1
- if("scratch")
- if (!src.restrained())
- message = "The [src.name] scratches."
- m_type = 1
- if("whimper")
- if (!muzzled)
- message = "The [src.name] whimpers."
- m_type = 2
- if("roar")
- if (!muzzled)
- message = "The [src.name] roars."
- m_type = 2
- if("tail")
- message = "The [src.name] waves his tail."
- m_type = 1
- if("gasp")
- message = "The [src.name] gasps."
- m_type = 2
- if("shiver")
- message = "The [src.name] shivers."
- m_type = 2
- if("drool")
- message = "The [src.name] drools."
- m_type = 1
- if("paw")
- if (!src.restrained())
- message = "The [src.name] flails his paw."
- m_type = 1
- if("scretch")
- if (!muzzled)
- message = "The [src.name] scretches."
- m_type = 2
- if("choke")
- message = "The [src.name] chokes."
- m_type = 2
- if("moan")
- message = "The [src.name] moans!"
- m_type = 2
- if("nod")
- message = "The [src.name] nods his head."
- m_type = 1
- if("sit")
- message = "The [src.name] sits down."
- m_type = 1
- if("sway")
- message = "The [src.name] sways around dizzily."
- m_type = 1
- if("sulk")
- message = "The [src.name] sulks down sadly."
- m_type = 1
- if("twitch")
- message = "The [src.name] twitches violently."
- m_type = 1
- if("dance")
- if (!src.restrained())
- message = "The [src.name] dances around happily."
- m_type = 1
- if("roll")
- if (!src.restrained())
- message = "The [src.name] rolls."
- m_type = 1
- if("shake")
- message = "The [src.name] shakes his head."
- m_type = 1
- if("gnarl")
- if (!muzzled)
- message = "The [src.name] gnarls and shows his teeth.."
- m_type = 2
- if("jump")
- message = "The [src.name] jumps!"
- m_type = 1
- if("collapse")
- Paralyse(2)
- message = text("[] collapses!", src)
- m_type = 2
- if("deathgasp")
- message = "The [src.name] lets out a faint chimper as it collapses and stops moving..."
- m_type = 1
- if("help")
- var/text = "choke, "
- if(istype(src,/mob/living/carbon/monkey/diona))
- text += "chirp, "
- text += "collapse, dance, deathgasp, drool, gasp, shiver, gnarl, jump, paw, moan, nod, roar, roll, scratch,\nscretch, shake, sign-#, sit, sulk, sway, tail, twitch, whimper"
- src << text
- else
- src << text("Invalid Emote: []", act)
- if ((message && src.stat == 0))
- if(src.client)
- log_emote("[name]/[key] : [message]")
- if (m_type & 1)
- for(var/mob/O in viewers(src, null))
- O.show_message(message, m_type)
- //Foreach goto(703)
- else
- for(var/mob/O in hearers(src, null))
- O.show_message(message, m_type)
- //Foreach goto(746)
- return
\ No newline at end of file
diff --git a/code/modules/mob/living/carbon/monkey/examine.dm b/code/modules/mob/living/carbon/monkey/examine.dm
deleted file mode 100644
index 9c9d0ef5082..00000000000
--- a/code/modules/mob/living/carbon/monkey/examine.dm
+++ /dev/null
@@ -1,63 +0,0 @@
-/mob/living/carbon/monkey/examine()
- set src in oview()
-
- if(!usr || !src) return
- if( (usr.sdisabilities & BLIND || usr.blinded || usr.stat) && !istype(usr,/mob/dead/observer) )
- usr << "Something is there but you can't see it."
- return
-
- var/msg = "*---------*\nThis is \icon[src] \a [src]!\n"
-
- if (src.handcuffed)
- msg += "It is \icon[src.handcuffed] handcuffed!\n"
- if (src.wear_mask)
- msg += "It has \icon[src.wear_mask] \a [src.wear_mask] on its head.\n"
- if (src.l_hand)
- msg += "It has \icon[src.l_hand] \a [src.l_hand] in its left hand.\n"
- if (src.r_hand)
- msg += "It has \icon[src.r_hand] \a [src.r_hand] in its right hand.\n"
- if (src.back)
- msg += "It has \icon[src.back] \a [src.back] on its back.\n"
- if (src.stat == DEAD)
- msg += "It is limp and unresponsive, with no signs of life.\n"
- else
- msg += ""
- if (src.getBruteLoss())
- if (src.getBruteLoss() < 30)
- msg += "It has minor bruising.\n"
- else
- msg += "It has severe bruising!\n"
- if (src.getFireLoss())
- if (src.getFireLoss() < 30)
- msg += "It has minor burns.\n"
- else
- msg += "It has severe burns!\n"
- if (src.fire_stacks > 0)
- msg += "It's covered in something flammable.\n"
- if (src.fire_stacks < 0)
- msg += "It's soaked in water.\n"
- if (src.stat == UNCONSCIOUS)
- msg += "It isn't responding to anything around it; it seems to be asleep.\n"
- msg += ""
-
- msg += ""
- switch(wetlevel)
- if(1)
- msg += "It looks a bit damp.\n"
- if(2)
- msg += "It looks a little bit wet.\n"
- if(3)
- msg += "It looks wet.\n"
- if(4)
- msg += "It looks very wet.\n"
- if(5)
- msg += "It looks absolutely soaked.\n"
- msg += ""
-
- if (src.digitalcamo)
- msg += "It is repulsively uncanny!\n"
-
- msg += "*---------*"
-
- usr << msg
- return
\ No newline at end of file
diff --git a/code/modules/mob/living/carbon/monkey/hud.dm b/code/modules/mob/living/carbon/monkey/hud.dm
deleted file mode 100644
index 35f86d2e6b7..00000000000
--- a/code/modules/mob/living/carbon/monkey/hud.dm
+++ /dev/null
@@ -1,249 +0,0 @@
-/datum/hud/proc/monkey_hud(var/ui_style='icons/mob/screen1_old.dmi')
-
- src.adding = list()
- src.other = list()
-
- var/obj/screen/using
- var/obj/screen/inventory/inv_box
-
- using = new /obj/screen()
- using.name = "act_intent"
- using.dir = SOUTHWEST
- using.icon = ui_style
- using.icon_state = (mymob.a_intent == "hurt" ? "harm" : mymob.a_intent)
- using.screen_loc = ui_acti
- using.layer = 20
- src.adding += using
- action_intent = using
-
-//intent small hud objects
- var/icon/ico
-
- ico = new(ui_style, "black")
- ico.MapColors(0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, -1,-1,-1,-1)
- ico.DrawBox(rgb(255,255,255,1),1,ico.Height()/2,ico.Width()/2,ico.Height())
- using = new /obj/screen( src )
- using.name = "help"
- using.icon = ico
- using.screen_loc = ui_acti
- using.layer = 21
- src.adding += using
- help_intent = using
-
- ico = new(ui_style, "black")
- ico.MapColors(0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, -1,-1,-1,-1)
- ico.DrawBox(rgb(255,255,255,1),ico.Width()/2,ico.Height()/2,ico.Width(),ico.Height())
- using = new /obj/screen( src )
- using.name = "disarm"
- using.icon = ico
- using.screen_loc = ui_acti
- using.layer = 21
- src.adding += using
- disarm_intent = using
-
- ico = new(ui_style, "black")
- ico.MapColors(0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, -1,-1,-1,-1)
- ico.DrawBox(rgb(255,255,255,1),ico.Width()/2,1,ico.Width(),ico.Height()/2)
- using = new /obj/screen( src )
- using.name = "grab"
- using.icon = ico
- using.screen_loc = ui_acti
- using.layer = 21
- src.adding += using
- grab_intent = using
-
- ico = new(ui_style, "black")
- ico.MapColors(0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, -1,-1,-1,-1)
- ico.DrawBox(rgb(255,255,255,1),1,1,ico.Width()/2,ico.Height()/2)
- using = new /obj/screen( src )
- using.name = "harm"
- using.icon = ico
- using.screen_loc = ui_acti
- using.layer = 21
- src.adding += using
- hurt_intent = using
-
-//end intent small hud objects
-
- using = new /obj/screen()
- using.name = "mov_intent"
- using.dir = SOUTHWEST
- using.icon = ui_style
- using.icon_state = (mymob.m_intent == "run" ? "running" : "walking")
- using.screen_loc = ui_movi
- using.layer = 20
- src.adding += using
- move_intent = using
-
- using = new /obj/screen()
- using.name = "drop"
- using.icon = ui_style
- using.icon_state = "act_drop"
- using.screen_loc = ui_drop_throw
- using.layer = 19
- src.adding += using
-
- inv_box = new /obj/screen/inventory()
- inv_box.name = "r_hand"
- inv_box.dir = WEST
- inv_box.icon = ui_style
- inv_box.icon_state = "hand_inactive"
- if(mymob && !mymob.hand) //This being 0 or null means the right hand is in use
- inv_box.icon_state = "hand_active"
- inv_box.screen_loc = ui_rhand
- inv_box.slot_id = slot_r_hand
- inv_box.layer = 19
- src.r_hand_hud_object = inv_box
- src.adding += inv_box
-
- inv_box = new /obj/screen/inventory()
- inv_box.name = "l_hand"
- inv_box.dir = EAST
- inv_box.icon = ui_style
- inv_box.icon_state = "hand_inactive"
- if(mymob && mymob.hand) //This being 1 means the left hand is in use
- inv_box.icon_state = "hand_active"
- inv_box.screen_loc = ui_lhand
- inv_box.slot_id = slot_l_hand
- inv_box.layer = 19
- src.l_hand_hud_object = inv_box
- src.adding += inv_box
-
- using = new /obj/screen()
- using.name = "hand"
- using.dir = SOUTH
- using.icon = ui_style
- using.icon_state = "hand1"
- using.screen_loc = ui_swaphand1
- using.layer = 19
- src.adding += using
-
- using = new /obj/screen()
- using.name = "hand"
- using.dir = SOUTH
- using.icon = ui_style
- using.icon_state = "hand2"
- using.screen_loc = ui_swaphand2
- using.layer = 19
- src.adding += using
-
- inv_box = new /obj/screen/inventory()
- inv_box.name = "mask"
- inv_box.dir = NORTH
- inv_box.icon = ui_style
- inv_box.icon_state = "equip"
- inv_box.screen_loc = ui_monkey_mask
- inv_box.slot_id = slot_wear_mask
- inv_box.layer = 19
- src.adding += inv_box
-
- inv_box = new /obj/screen/inventory()
- inv_box.name = "back"
- inv_box.dir = NORTHEAST
- inv_box.icon = ui_style
- inv_box.icon_state = "equip"
- inv_box.screen_loc = ui_back
- inv_box.slot_id = slot_back
- inv_box.layer = 19
- src.adding += inv_box
-
- mymob.throw_icon = new /obj/screen()
- mymob.throw_icon.icon = ui_style
- mymob.throw_icon.icon_state = "act_throw_off"
- mymob.throw_icon.name = "throw"
- mymob.throw_icon.screen_loc = ui_drop_throw
-
- mymob.oxygen = new /obj/screen()
- mymob.oxygen.icon = ui_style
- mymob.oxygen.icon_state = "oxy0"
- mymob.oxygen.name = "oxygen"
- mymob.oxygen.screen_loc = ui_oxygen
-
- mymob.pressure = new /obj/screen()
- mymob.pressure.icon = ui_style
- mymob.pressure.icon_state = "pressure0"
- mymob.pressure.name = "pressure"
- mymob.pressure.screen_loc = ui_pressure
-
- mymob.toxin = new /obj/screen()
- mymob.toxin.icon = ui_style
- mymob.toxin.icon_state = "tox0"
- mymob.toxin.name = "toxin"
- mymob.toxin.screen_loc = ui_toxin
-
- mymob.internals = new /obj/screen()
- mymob.internals.icon = ui_style
- mymob.internals.icon_state = "internal0"
- mymob.internals.name = "internal"
- mymob.internals.screen_loc = ui_internal
-
- mymob.fire = new /obj/screen()
- mymob.fire.icon = ui_style
- mymob.fire.icon_state = "fire0"
- mymob.fire.name = "fire"
- mymob.fire.screen_loc = ui_fire
-
- mymob.bodytemp = new /obj/screen()
- mymob.bodytemp.icon = ui_style
- mymob.bodytemp.icon_state = "temp1"
- mymob.bodytemp.name = "body temperature"
- mymob.bodytemp.screen_loc = ui_temp
-
- mymob.healths = new /obj/screen()
- mymob.healths.icon = ui_style
- mymob.healths.icon_state = "health0"
- mymob.healths.name = "health"
- mymob.healths.screen_loc = ui_health
-
- mymob.pullin = new /obj/screen()
- mymob.pullin.icon = ui_style
- mymob.pullin.icon_state = "pull0"
- mymob.pullin.name = "pull"
- mymob.pullin.screen_loc = ui_pull_resist
-
- mymob.blind = new /obj/screen()
- mymob.blind.icon = 'icons/mob/screen1_full.dmi'
- mymob.blind.icon_state = "blackimageoverlay"
- mymob.blind.name = " "
- mymob.blind.screen_loc = "1,1"
- mymob.blind.layer = 0
-
- mymob.flash = new /obj/screen()
- mymob.flash.icon = ui_style
- mymob.flash.icon_state = "blank"
- mymob.flash.name = "flash"
- mymob.flash.screen_loc = "1,1 to 15,15"
- mymob.flash.layer = 17
-
- mymob.zone_sel = new /obj/screen/zone_sel()
- mymob.zone_sel.icon = ui_style
- mymob.zone_sel.overlays.Cut()
- mymob.zone_sel.overlays += image('icons/mob/zone_sel.dmi', "[mymob.zone_sel.selecting]")
-
- //Handle the gun settings buttons
- mymob.gun_setting_icon = new /obj/screen/gun/mode(null)
- if (mymob.client)
- if (mymob.client.gun_mode) // If in aim mode, correct the sprite
- mymob.gun_setting_icon.dir = 2
- for(var/obj/item/weapon/gun/G in mymob) // If targeting someone, display other buttons
- if (G.target)
- mymob.item_use_icon = new /obj/screen/gun/item(null)
- if (mymob.client.target_can_click)
- mymob.item_use_icon.dir = 1
- src.adding += mymob.item_use_icon
- mymob.gun_move_icon = new /obj/screen/gun/move(null)
- if (mymob.client.target_can_move)
- mymob.gun_move_icon.dir = 1
- mymob.gun_run_icon = new /obj/screen/gun/run(null)
- if (mymob.client.target_can_run)
- mymob.gun_run_icon.dir = 1
- src.adding += mymob.gun_run_icon
- src.adding += mymob.gun_move_icon
-
- mymob.client.screen = null
-
- mymob.client.screen += list( mymob.throw_icon, mymob.zone_sel, mymob.oxygen, mymob.pressure, mymob.toxin, mymob.bodytemp, mymob.internals, mymob.fire, mymob.healths, mymob.pullin, mymob.blind, mymob.flash, mymob.gun_setting_icon) //, mymob.hands, mymob.rest, mymob.sleep, mymob.mach )
- mymob.client.screen += src.adding + src.other
-
- return
-
diff --git a/code/modules/mob/living/carbon/monkey/inventory.dm b/code/modules/mob/living/carbon/monkey/inventory.dm
deleted file mode 100644
index 8ccadd0349c..00000000000
--- a/code/modules/mob/living/carbon/monkey/inventory.dm
+++ /dev/null
@@ -1,243 +0,0 @@
-/obj/effect/equip_e/monkey/process()
- if (item)
- item.add_fingerprint(source)
- if (!( item ))
- switch(place)
- if("head")
- if (!( target.wear_mask ))
- del(src)
- return
- if("l_hand")
- if (!( target.l_hand ))
- del(src)
- return
- if("r_hand")
- if (!( target.r_hand ))
- del(src)
- return
- if("back")
- if (!( target.back ))
- del(src)
- return
- if("handcuff")
- if (!( target.handcuffed ))
- del(src)
- return
- if("internal")
- if ((!( (istype(target.wear_mask, /obj/item/clothing/mask) && istype(target.back, /obj/item/weapon/tank) && !( target.internal )) ) && !( target.internal )))
- del(src)
- return
-
- if (item)
- if(isrobot(source) && place != "handcuff")
- var/list/L = list( "syringe", "pill", "drink", "dnainjector", "fuel")
- if(!(L.Find(place)))
- del(src)
- return
- for(var/mob/O in viewers(target, null))
- if ((O.client && !( O.blinded )))
- O.show_message(text("\red [] is trying to put a [] on []", source, item, target), 1)
- else
- var/message = null
- switch(place)
- if("mask")
- if(istype(target.wear_mask, /obj/item/clothing)&&(target.wear_mask:flags & NODROP))
- message = text("\red [] fails to take off \a [] from []'s body!", source, target.wear_mask, target)
- else
- message = text("\red [] is trying to take off \a [] from []'s head!", source, target.wear_mask, target)
- if("l_hand")
- message = text("\red [] is trying to take off a [] from []'s left hand!", source, target.l_hand, target)
- if("r_hand")
- message = text("\red [] is trying to take off a [] from []'s right hand!", source, target.r_hand, target)
- if("back")
- message = text("\red [] is trying to take off a [] from []'s back!", source, target.back, target)
- if("handcuff")
- message = text("\red [] is trying to unhandcuff []!", source, target)
- if("internal")
- if (target.internal)
- message = text("\red [] is trying to remove []'s internals", source, target)
- else
- message = text("\red [] is trying to set on []'s internals.", source, target)
- else
- for(var/mob/M in viewers(target, null))
- M.show_message(message, 1)
- spawn( 30 )
- done()
- return
- return
-
-/obj/effect/equip_e/monkey/done()
- if(!source || !target) return
- if(source.loc != s_loc) return
- if(target.loc != t_loc) return
- if(LinkBlocked(s_loc,t_loc)) return
- if(item && source.get_active_hand() != item) return
- if ((source.restrained() || source.stat)) return
- switch(place)
- if("mask")
- if (target.wear_mask)
- if(istype(target.wear_mask, /obj/item/clothing)&& (target.wear_mask:flags & NODROP))
- return
- var/obj/item/W = target.wear_mask
- target.unEquip(W)
- if (target.client)
- target.client.screen -= W
- if (W)
- W.loc = target.loc
- W.dropped(target)
- W.layer = initial(W.layer)
- W.add_fingerprint(source)
- else
- if (istype(item, /obj/item/clothing/mask))
- source.drop_item()
- loc = target
- item.layer = 20
- target.wear_mask = item
- item.loc = target
- if("l_hand")
- if (target.l_hand)
- var/obj/item/W = target.l_hand
- target.unEquip(W)
- if (target.client)
- target.client.screen -= W
- if (W)
- W.loc = target.loc
- W.layer = initial(W.layer)
- W.dropped(target)
- W.add_fingerprint(source)
- else
- if (istype(item, /obj/item))
- source.drop_item()
- loc = target
- item.layer = 20
- target.l_hand = item
- item.loc = target
- item.dropped(source)
- item.equipped(target,target.l_hand)
- if("r_hand")
- if (target.r_hand)
- var/obj/item/W = target.r_hand
- target.unEquip(W)
- if (target.client)
- target.client.screen -= W
- if (W)
- W.loc = target.loc
- W.layer = initial(W.layer)
- W.dropped(target)
- W.add_fingerprint(source)
- else
- if (istype(item, /obj/item))
- source.drop_item()
- loc = target
- item.layer = 20
- target.r_hand = item
- item.loc = target
- item.dropped(source)
- item.equipped(target,target.r_hand)
- if("back")
- if (target.back)
- var/obj/item/W = target.back
- target.unEquip(W)
- if (target.client)
- target.client.screen -= W
- if (W)
- W.loc = target.loc
- W.dropped(target)
- W.layer = initial(W.layer)
- W.add_fingerprint(source)
- else
- if ((istype(item, /obj/item) && item.slot_flags & SLOT_BACK ))
- source.drop_item()
- loc = target
- item.layer = 20
- target.back = item
- item.loc = target
- if("handcuff")
- if (target.handcuffed)
- var/obj/item/W = target.handcuffed
- target.unEquip(W)
- if (target.client)
- target.client.screen -= W
- if (W)
- W.loc = target.loc
- W.dropped(target)
- W.layer = initial(W.layer)
- W.add_fingerprint(source)
- else
- if (istype(item, /obj/item/weapon/restraints/handcuffs))
- source.drop_item()
- target.handcuffed = item
- item.loc = target
- if("internal")
- if (target.internal)
- target.internal.add_fingerprint(source)
- target.internal = null
- else
- if (target.internal)
- target.internal = null
- if (!( istype(target.wear_mask, /obj/item/clothing/mask) ))
- return
- else
- if (istype(target.back, /obj/item/weapon/tank))
- target.internal = target.back
- target.internal.add_fingerprint(source)
- for(var/mob/M in viewers(target, 1))
- if ((M.client && !( M.blinded )))
- M.show_message(text("[] is now running on internals.", target), 1)
- else
- source.regenerate_icons()
- target.regenerate_icons()
- del(src)
- return
-
-
-
-//This is an UNSAFE proc. Use mob_can_equip() before calling this one! Or rather use equip_to_slot_if_possible() or advanced_equip_to_slot_if_possible()
-//set redraw_mob to 0 if you don't wish the hud to be updated - if you're doing it manually in your own proc.
-/mob/living/carbon/monkey/equip_to_slot(obj/item/W as obj, slot, redraw_mob = 1)
- if(!slot) return
- if(!istype(W)) return
-
- if(W == get_active_hand())
- unEquip(W)
-
- switch(slot)
- if(slot_back)
- src.back = W
- W.equipped(src, slot)
- update_inv_back(redraw_mob)
- if(slot_wear_mask)
- src.wear_mask = W
- W.equipped(src, slot)
- update_inv_wear_mask(redraw_mob)
- if(slot_handcuffed)
- src.handcuffed = W
- update_inv_handcuffed(redraw_mob)
- if(slot_legcuffed)
- src.legcuffed = W
- W.equipped(src, slot)
- update_inv_legcuffed(redraw_mob)
- if(slot_l_hand)
- src.l_hand = W
- W.equipped(src, slot)
- update_inv_l_hand(redraw_mob)
- if(slot_r_hand)
- src.r_hand = W
- W.equipped(src, slot)
- update_inv_r_hand(redraw_mob)
- if(slot_in_backpack)
- W.loc = src.back
- else
- usr << "\red You are trying to eqip this item to an unsupported inventory slot. How the heck did you manage that? Stop it..."
- return
-
- W.layer = 20
-
- return
-
-/mob/living/carbon/monkey/put_in_hands(obj/item/W)
- if(!W) return 0
- if(put_in_active_hand(W)) return 1
- else if(put_in_inactive_hand(W)) return 1
- else
- ..()
diff --git a/code/modules/mob/living/carbon/monkey/life.dm b/code/modules/mob/living/carbon/monkey/life.dm
deleted file mode 100644
index ec2c33983af..00000000000
--- a/code/modules/mob/living/carbon/monkey/life.dm
+++ /dev/null
@@ -1,675 +0,0 @@
-//This file was auto-corrected by findeclaration.exe on 25.5.2012 20:42:32
-
-/mob/living/carbon/monkey
- var/oxygen_alert = 0
- var/toxins_alert = 0
- var/fire_alert = 0
- var/pressure_alert = 0
-
- var/temperature_alert = 0
-
-
-/mob/living/carbon/monkey/Life()
- set invisibility = 0
- //set background = 1
- if (notransform) return
- if (update_muts)
- update_muts=0
- domutcheck(src,null,MUTCHK_FORCED)
- ..()
-
- var/datum/gas_mixture/environment // Added to prevent null location errors-- TLE
- if(loc)
- environment = loc.return_air()
-
- if (stat != DEAD)
- if(!istype(src,/mob/living/carbon/monkey/diona)) //still breathing
- //First, resolve location and get a breath
- if(mob_master.current_cycle%4==2)
- //Only try to take a breath every 4 seconds, unless suffocating
- breathe()
- else //Still give containing object the chance to interact
- if(istype(loc, /obj/))
- var/obj/location_as_object = loc
- location_as_object.handle_internal_lifeform(src, 0)
-
-
- //Updates the number of stored chemicals for powers
- handle_changeling()
-
- //Mutations and radiation
- handle_mutations_and_radiation()
-
- //Chemicals in the body
- handle_chemicals_in_body()
-
- //Disabilities
- handle_disabilities()
-
- //Virus updates, duh
- handle_virus_updates()
-
- //Apparently, the person who wrote this code designed it so that
- //blinded get reset each cycle and then get activated later in the
- //code. Very ugly. I dont care. Moving this stuff here so its easy
- //to find it.
- blinded = null
-
- //Handle temperature/pressure differences between body and environment
- if(environment) // More error checking -- TLE
- handle_environment(environment)
-
- //Check if we're on fire
- handle_fire()
-
- //Decrease wetness over time
- handle_wetness()
-
- //Status updates, death etc.
- handle_regular_status_updates()
-
- handle_actions()
-
- update_canmove()
-
- if(client)
- handle_regular_hud_updates()
-
- // Grabbing
- for(var/obj/item/weapon/grab/G in src)
- G.process()
-
- if(!client && stat == CONSCIOUS)
- if(prob(33) && canmove && isturf(loc) && !pulledby) //won't move if being pulled
- step(src, pick(cardinal))
- if(prob(1))
- emote(pick("scratch","jump","roll","tail"))
- updatehealth()
-
-
-/mob/living/carbon/monkey/calculate_affecting_pressure(var/pressure)
- ..()
- return pressure
-
-/mob/living/carbon/monkey
-
- proc/handle_disabilities()
-
- if (disabilities & EPILEPSY)
- if ((prob(1) && paralysis < 10))
- src << "\red You have a seizure!"
- Paralyse(10)
- if (disabilities & COUGHING)
- if ((prob(5) && paralysis <= 1))
- drop_item()
- spawn( 0 )
- emote("cough")
- return
- if (disabilities & TOURETTES)
- if ((prob(10) && paralysis <= 1))
- Stun(10)
- spawn( 0 )
- emote("twitch")
- return
- if (disabilities & NERVOUS)
- if (prob(10))
- stuttering = max(10, stuttering)
-
- proc/handle_mutations_and_radiation()
-
- if(getFireLoss())
- if((RESIST_HEAT in mutations) || prob(50))
- switch(getFireLoss())
- if(1 to 50)
- adjustFireLoss(-1)
- if(51 to 100)
- adjustFireLoss(-5)
-
- if ((HULK in mutations) && health <= 25)
- mutations.Remove(HULK)
- dna.SetSEState(HULKBLOCK,0)
- update_mutations() //update our mutation overlays
- status_flags |= CANSTUN | CANWEAKEN | CANPARALYSE | CANPUSH //temporary fix until the problem can be solved.
- src << "You suddenly feel very weak."
- Weaken(3)
- emote("collapse")
-
- if (radiation)
-
- if(istype(src,/mob/living/carbon/monkey/diona)) //Filthy check. Dionaea don't take rad damage.
- var/rads = radiation/25
- radiation -= rads
- nutrition += rads
- heal_overall_damage(rads,rads)
- adjustOxyLoss(-(rads))
- adjustToxLoss(-(rads))
- return
-
- if (radiation > 100)
- radiation = 100
- Weaken(10)
- if(!lying)
- src << "\red You feel weak."
- emote("collapse")
-
- switch(radiation)
- if(1 to 49)
- radiation--
- if(prob(25))
- adjustToxLoss(1)
-
- if(50 to 74)
- radiation -= 2
- adjustToxLoss(1)
- if(prob(5))
- radiation -= 5
- Weaken(3)
- if(!lying)
- src << "\red You feel weak."
- emote("collapse")
-
- if(75 to 100)
- radiation -= 3
- adjustToxLoss(3)
- if(prob(1))
- src << "\red You mutate!"
- randmutb(src)
- domutcheck(src,null)
- emote("gasp")
-
- // Separate proc so we can jump out of it when we've succeeded in spreading disease.
- proc/findAirborneVirii()
- for(var/obj/effect/decal/cleanable/blood/B in get_turf(src))
- if(B.virus2.len)
- for (var/ID in B.virus2)
- var/datum/disease2/disease/V = B.virus2[ID]
- if (infect_virus2(src,V))
- return 1
-
- for(var/obj/effect/decal/cleanable/mucus/M in get_turf(src))
- if(M.virus2.len)
- for (var/ID in M.virus2)
- var/datum/disease2/disease/V = M.virus2[ID]
- if (infect_virus2(src,V))
- return 1
-
- for(var/obj/effect/decal/cleanable/poop/P in get_turf(src))
- if(P.virus2.len)
- for (var/ID in P.virus2)
- var/datum/disease2/disease/V = P.virus2[ID]
- if (infect_virus2(src,V))
- return 1
-
- return 0
-
- proc/handle_virus_updates()
- if(status_flags & GODMODE) return 0 //godmode
- if(bodytemperature > 406)
- for (var/ID in virus2)
- var/datum/disease2/disease/V = virus2[ID]
- V.cure(src)
-
- src.findAirborneVirii()
-
- for (var/ID in virus2)
- var/datum/disease2/disease/V = virus2[ID]
- if(isnull(V)) // Trying to figure out a runtime error that keeps repeating
- CRASH("virus2 nulled before calling activate()")
- else
- V.activate(src)
- // activate may have deleted the virus
- if(!V) continue
-
- // check if we're immune
- if(V.antigen & src.antibodies)
- V.dead = 1
- return
-
- proc/breathe()
- if(reagents)
-
- if(reagents.has_reagent("lexorin")) return
-
- if(!loc) return //probably ought to make a proper fix for this, but :effort: --NeoFite
-
- var/datum/gas_mixture/environment = loc.return_air()
- var/datum/gas_mixture/breath
- if(health < 0)
- losebreath++
- if(losebreath>0) //Suffocating so do not take a breath
- losebreath--
- if (prob(75)) //High chance of gasping for air
- spawn emote("gasp")
- if(istype(loc, /obj/))
- var/obj/location_as_object = loc
- location_as_object.handle_internal_lifeform(src, 0)
- else
- //First, check for air from internal atmosphere (using an air tank and mask generally)
- breath = get_breath_from_internal(BREATH_VOLUME)
-
- //No breath from internal atmosphere so get breath from location
- if(!breath)
- if(istype(loc, /obj/))
- var/obj/location_as_object = loc
- breath = location_as_object.handle_internal_lifeform(src, BREATH_VOLUME)
- else if(istype(loc, /turf/))
- var/breath_moles = environment.total_moles()*BREATH_PERCENTAGE
- breath = loc.remove_air(breath_moles)
-
-
-
- else //Still give containing object the chance to interact
- if(istype(loc, /obj/))
- var/obj/location_as_object = loc
- location_as_object.handle_internal_lifeform(src, 0)
-
- handle_breath(breath)
-
- if(breath)
- loc.assume_air(breath)
-
- proc/handle_breath(datum/gas_mixture/breath)
- if(status_flags & GODMODE)
- return
-
- if(!breath || (breath.total_moles() == 0))
- adjustOxyLoss(7)
-
- oxygen_alert = max(oxygen_alert, 1)
-
- return 0
-
- var/safe_oxygen_min = 16 // Minimum safe partial pressure of O2, in kPa
- //var/safe_oxygen_max = 140 // Maximum safe partial pressure of O2, in kPa (Not used for now)
- var/safe_co2_max = 10 // Yes it's an arbitrary value who cares?
- var/safe_toxins_max = 0.5
- var/safe_toxins_mask = 5
- var/SA_para_min = 0.5
- var/SA_sleep_min = 5
- var/oxygen_used = 0
- var/breath_pressure = (breath.total_moles()*R_IDEAL_GAS_EQUATION*breath.temperature)/BREATH_VOLUME
-
- //Partial pressure of the O2 in our breath
- var/O2_pp = (breath.oxygen/breath.total_moles())*breath_pressure
- // Same, but for the toxins
- var/Toxins_pp = (breath.toxins/breath.total_moles())*breath_pressure
- // And CO2, lets say a PP of more than 10 will be bad (It's a little less really, but eh, being passed out all round aint no fun)
- var/CO2_pp = (breath.carbon_dioxide/breath.total_moles())*breath_pressure
-
- if(O2_pp < safe_oxygen_min) // Too little oxygen
- if(prob(20))
- spawn(0) emote("gasp")
- if (O2_pp == 0)
- O2_pp = 0.01
- var/ratio = safe_oxygen_min/O2_pp
- adjustOxyLoss(min(5*ratio, 7)) // Don't fuck them up too fast (space only does 7 after all!)
- oxygen_used = breath.oxygen*ratio/6
- oxygen_alert = max(oxygen_alert, 1)
- /*else if (O2_pp > safe_oxygen_max) // Too much oxygen (commented this out for now, I'll deal with pressure damage elsewhere I suppose)
- spawn(0) emote("cough")
- var/ratio = O2_pp/safe_oxygen_max
- oxyloss += 5*ratio
- oxygen_used = breath.oxygen*ratio/6
- oxygen_alert = max(oxygen_alert, 1)*/
- else // We're in safe limits
- adjustOxyLoss(-5)
- oxygen_used = breath.oxygen/6
- oxygen_alert = 0
-
- breath.oxygen -= oxygen_used
- breath.carbon_dioxide += oxygen_used
-
- if(CO2_pp > safe_co2_max)
- if(!co2overloadtime) // If it's the first breath with too much CO2 in it, lets start a counter, then have them pass out after 12s or so.
- co2overloadtime = world.time
- else if(world.time - co2overloadtime > 120)
- Paralyse(3)
- adjustOxyLoss(3) // Lets hurt em a little, let them know we mean business
- if(world.time - co2overloadtime > 300) // They've been in here 30s now, lets start to kill them for their own good!
- adjustOxyLoss(8)
- if(prob(20)) // Lets give them some chance to know somethings not right though I guess.
- spawn(0) emote("cough")
-
- else
- co2overloadtime = 0
-
- if(Toxins_pp > safe_toxins_max) // Too much toxins
- var/ratio = (breath.toxins/safe_toxins_max) * 10
- //adjustToxLoss(Clamp(ratio, MIN_PLASMA_DAMAGE, MAX_PLASMA_DAMAGE)) //Limit amount of damage toxin exposure can do per second
- if(wear_mask)
- if(wear_mask.flags & BLOCK_GAS_SMOKE_EFFECT)
- if(breath.toxins > safe_toxins_mask)
- ratio = (breath.toxins/safe_toxins_mask) * 10
- else
- ratio = 0
- if(ratio)
- if(reagents)
- reagents.add_reagent("plasma", Clamp(ratio, MIN_PLASMA_DAMAGE, MAX_PLASMA_DAMAGE))
- toxins_alert = max(toxins_alert, 1)
- else
- toxins_alert = 0
-
- if(breath.trace_gases.len) // If there's some other shit in the air lets deal with it here.
- for(var/datum/gas/sleeping_agent/SA in breath.trace_gases)
- var/SA_pp = (SA.moles/breath.total_moles())*breath_pressure
- if(SA_pp > SA_para_min) // Enough to make us paralysed for a bit
- Paralyse(3) // 3 gives them one second to wake up and run away a bit!
- if(SA_pp > SA_sleep_min) // Enough to make us sleep as well
- sleeping = max(sleeping+2, 10)
- else if(SA_pp > 0.01) // There is sleeping gas in their lungs, but only a little, so give them a bit of a warning
- if(prob(20))
- spawn(0) emote(pick("giggle", "laugh"))
-
-
- if(breath.temperature > (T0C+66)) // Hot air hurts :(
- if(prob(20))
- src << "\red You feel a searing heat in your lungs!"
- fire_alert = max(fire_alert, 2)
- else
- fire_alert = 0
-
-
- //Temporary fixes to the alerts.
-
- return 1
-
- proc/handle_environment(datum/gas_mixture/environment)
- if(!environment)
- return
-
- //Moved these vars here for use in the fuck-it-skip-processing check.
- var/pressure = environment.return_pressure()
- var/adjusted_pressure = calculate_affecting_pressure(pressure) //Returns how much pressure actually affects the mob.
-
- if(adjusted_pressure < WARNING_HIGH_PRESSURE && adjusted_pressure > WARNING_LOW_PRESSURE && abs(environment.temperature - 293.15) < 20 && abs(bodytemperature - 310.14) < 0.5 && environment.toxins < MOLES_PLASMA_VISIBLE)
-
- //Hopefully should fix the walk-inside-still-pressure-warning issue.
- if(pressure_alert)
- pressure_alert = 0
-
- return // Temperatures are within normal ranges, fuck all this processing. ~Ccomp
-
- var/environment_heat_capacity = environment.heat_capacity()
- if(istype(get_turf(src), /turf/space))
- var/turf/heat_turf = get_turf(src)
- environment_heat_capacity = heat_turf.heat_capacity
-
- if(!on_fire)
- if((environment.temperature > (T0C + 50)) || (environment.temperature < (T0C + 10)))
- var/transfer_coefficient = 1
-
- handle_temperature_damage(HEAD, environment.temperature, environment_heat_capacity*transfer_coefficient)
-
- if(stat==2)
- bodytemperature += 0.1*(environment.temperature - bodytemperature)*environment_heat_capacity/(environment_heat_capacity + 270000)
-
- //Account for massive pressure differences
- switch(adjusted_pressure)
- if(HAZARD_HIGH_PRESSURE to INFINITY)
- adjustBruteLoss( min( ( (adjusted_pressure / HAZARD_HIGH_PRESSURE) -1 )*PRESSURE_DAMAGE_COEFFICIENT , MAX_HIGH_PRESSURE_DAMAGE) )
- pressure_alert = 2
- if(WARNING_HIGH_PRESSURE to HAZARD_HIGH_PRESSURE)
- pressure_alert = 1
- if(WARNING_LOW_PRESSURE to WARNING_HIGH_PRESSURE)
- pressure_alert = 0
- if(HAZARD_LOW_PRESSURE to WARNING_LOW_PRESSURE)
- pressure_alert = -1
- else
- if( !(RESIST_COLD in mutations) )
- adjustBruteLoss( LOW_PRESSURE_DAMAGE )
- pressure_alert = -2
- else
- pressure_alert = -1
-
- return
-
- proc/handle_temperature_damage(body_part, exposed_temperature, exposed_intensity)
- if(status_flags & GODMODE) return
- var/discomfort = min( abs(exposed_temperature - bodytemperature)*(exposed_intensity)/2000000, 1.0)
- //adjustFireLoss(2.5*discomfort)
-
- if(exposed_temperature > bodytemperature)
- adjustFireLoss(20.0*discomfort)
-
- else
- adjustFireLoss(5.0*discomfort)
-
- proc/handle_chemicals_in_body()
-
- if(istype(src,/mob/living/carbon/monkey/diona)) //Filthy check. Dionaea nymphs need light or they get sad.
- 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
- var/atom/movable/lighting_overlay/L = locate(/atom/movable/lighting_overlay) in T
- if(L)
- light_amount = (L.get_clamped_lum()*10) - 5 //hardcapped so it's not abused by having a ton of flashlights
- else
- light_amount = 5
-
- nutrition += light_amount
- traumatic_shock -= light_amount
-
- if(nutrition > 500)
- nutrition = 500
- if(light_amount > 2) //if there's enough light, heal
- adjustBruteLoss(-1)
- adjustToxLoss(-1)
- adjustOxyLoss(-1)
-
- if(reagents && reagents.reagent_list.len)
- reagents.metabolize(src,alien)
-
- if (drowsyness)
- drowsyness--
- eye_blurry = max(2, eye_blurry)
- if (prob(5))
- sleeping += 1
- Paralyse(5)
-
- if(confused)
- confused = max(0, confused - 1)
-
- if(resting)
- dizziness = max(0, dizziness - 5)
- else
- dizziness = max(0, dizziness - 1)
-
- return //TODO: DEFERRED
-
- proc/handle_regular_status_updates()
-
- if(stat == DEAD) //DEAD. BROWN BREAD. SWIMMING WITH THE SPESS CARP
- blinded = 1
- silent = 0
- else //ALIVE. LIGHTS ARE ON
- updatehealth()
- if(health < config.health_threshold_dead || brain_op_stage == 4.0)
- death()
- blinded = 1
- stat = DEAD
- silent = 0
- return 1
-
- //UNCONSCIOUS. NO-ONE IS HOME
- if( (getOxyLoss() > 25) || (config.health_threshold_crit >= health) )
- if( health <= 20 && prob(1) )
- spawn(0)
- emote("gasp")
- if(!reagents.has_reagent("epinephrine"))
- adjustOxyLoss(1)
- Paralyse(3)
- if(halloss > 100)
- src << "You're in too much pain to keep going..."
- for(var/mob/O in oviewers(src, null))
- O.show_message("[src] slumps to the ground, too weak to continue fighting.", 1)
- Paralyse(10)
- setHalLoss(99)
-
- if(paralysis)
- AdjustParalysis(-1)
- blinded = 1
- stat = UNCONSCIOUS
- if(halloss > 0)
- adjustHalLoss(-3)
- else if(sleeping)
- handle_dreams()
- adjustHalLoss(-3)
- sleeping = max(sleeping-1, 0)
- blinded = 1
- stat = UNCONSCIOUS
- if( prob(10) && health && !hal_crit )
- spawn(0)
- emote("snore")
- else if(resting)
- if(halloss > 0)
- adjustHalLoss(-3)
- //CONSCIOUS
- else
- stat = CONSCIOUS
- if(halloss > 0)
- adjustHalLoss(-1)
-
- //Eyes
- if(sdisabilities & BLIND) //disabled-blind, doesn't get better on its own
- blinded = 1
- else if(eye_blind) //blindness, heals slowly over time
- eye_blind = max(eye_blind-1,0)
- blinded = 1
- else if(eye_blurry) //blurry eyes heal slowly
- eye_blurry = max(eye_blurry-1, 0)
-
- //Ears
- if(sdisabilities & DEAF) //disabled-deaf, doesn't get better on its own
- ear_deaf = max(ear_deaf, 1)
- else if(ear_deaf) //deafness, heals slowly over time
- ear_deaf = max(ear_deaf-1, 0)
- else if(ear_damage < 25) //ear damage heals slowly under this threshold. otherwise you'll need earmuffs
- ear_damage = max(ear_damage-0.05, 0)
-
- //Other
- handle_statuses()
-
- CheckStamina()
-
- return 1
-
-
- proc/handle_regular_hud_updates()
-
- if (stat == 2 || (XRAY in 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(pressure)
- pressure.icon_state = "pressure[pressure_alert]"
-
- if(pullin) pullin.icon_state = "pull[pulling ? 1 : 0]"
-
-
- if (toxin) toxin.icon_state = "tox[toxins_alert ? 1 : 0]"
- if (oxygen) oxygen.icon_state = "oxy[oxygen_alert ? 1 : 0]"
- if (fire) fire.icon_state = "fire[fire_alert ? 2 : 0]"
- //NOTE: the alerts dont reset when youre out of danger. dont blame me,
- //blame the person who coded them. Temporary fix added.
-
- if(bodytemp)
- switch(bodytemperature) //310.055 optimal body temp
- if(345 to INFINITY)
- bodytemp.icon_state = "temp4"
- if(335 to 345)
- bodytemp.icon_state = "temp3"
- if(327 to 335)
- bodytemp.icon_state = "temp2"
- if(316 to 327)
- bodytemp.icon_state = "temp1"
- if(300 to 316)
- bodytemp.icon_state = "temp0"
- if(295 to 300)
- bodytemp.icon_state = "temp-1"
- if(280 to 295)
- bodytemp.icon_state = "temp-2"
- if(260 to 280)
- bodytemp.icon_state = "temp-3"
- else
- bodytemp.icon_state = "temp-4"
-
- client.screen.Remove(global_hud.blurry,global_hud.druggy,global_hud.vimpaired)
-
- if(blind && stat != DEAD)
- if(blinded)
- blind.layer = 18
- else
- blind.layer = 0
-
- if(disabilities & NEARSIGHTED)
- client.screen += global_hud.vimpaired
-
- if(eye_blurry)
- client.screen += global_hud.blurry
-
- if(druggy)
- client.screen += global_hud.druggy
-
- if (stat != 2)
- if (machine)
- if (!( machine.check_eye(src) ))
- reset_view(null)
- else
- if(client && !client.adminobs)
- reset_view(null)
-
- return 1
-
- proc/handle_random_events()
- if (prob(1) && prob(2))
- spawn(0)
- emote("scratch")
- return
-
-
- proc/handle_changeling()
- if(mind && mind.changeling)
- mind.changeling.regenerate()
-
- ///FIRE CODE
- handle_fire()
- if(..())
- return
- adjustFireLoss(6)
- return
- //END FIRE CODE
-
- proc/handle_wetness()
- if(mob_master.current_cycle%20==2) //dry off a bit once every 20 ticks or so
- wetlevel = max(wetlevel - 1,0)
- return
diff --git a/code/modules/mob/living/carbon/monkey/login.dm b/code/modules/mob/living/carbon/monkey/login.dm
deleted file mode 100644
index 3b7e5dcb971..00000000000
--- a/code/modules/mob/living/carbon/monkey/login.dm
+++ /dev/null
@@ -1,4 +0,0 @@
-/mob/living/carbon/monkey/Login()
- ..()
- update_hud()
- return
diff --git a/code/modules/mob/living/carbon/monkey/monkey.dm b/code/modules/mob/living/carbon/monkey/monkey.dm
deleted file mode 100644
index 34a1bc589e1..00000000000
--- a/code/modules/mob/living/carbon/monkey/monkey.dm
+++ /dev/null
@@ -1,553 +0,0 @@
-/mob/living/carbon/monkey
- name = "monkey"
- voice_name = "monkey"
- speak_emote = list("chimpers")
- icon_state = "monkey1"
- icon = 'icons/mob/monkey.dmi'
- gender = NEUTER
- pass_flags = PASSTABLE
- update_icon = 0 ///no need to call regenerate_icon
-
- var/obj/item/weapon/card/id/wear_id = null // Fix for station bounced radios -- Skie
- var/greaterform = "Human" // Used when humanizing a monkey.
- icon_state = "monkey1"
- //var/uni_append = "12C4E2" // Small appearance modifier for different species.
- var/list/uni_append = list(0x12C,0x4E2) // Same as above for DNA2.
- var/update_muts = 1 // Monkey gene must be set at start.
- var/alien = 0 //Used for reagent metabolism.
- ventcrawler = 2
-
-/mob/living/carbon/monkey/tajara
- name = "farwa"
- voice_name = "farwa"
- speak_emote = list("mews")
- icon_state = "tajkey1"
- uni_append = list(0x0A0,0xE00) // 0A0E00
-
-/mob/living/carbon/monkey/vulpkanin
- name = "wolpin"
- voice_name = "wolpin"
- speak_emote = list("yaps")
- icon_state = "wolfling"
- uni_append = list(0x066,0x4FE)
-
-/mob/living/carbon/monkey/skrell
- name = "neaera"
- voice_name = "neaera"
- speak_emote = list("squicks")
- icon_state = "skrellkey1"
- uni_append = list(0x01C,0xC92) // 01CC92
-
-/mob/living/carbon/monkey/unathi
- name = "stok"
- voice_name = "stok"
- speak_emote = list("hisses")
- icon_state = "stokkey1"
- uni_append = list(0x044,0xC5D) // 044C5D
-
-/mob/living/carbon/monkey/wryn
- name = "lajavi"
- voice_name = "lajavi"
- speak_emote = list("hisses")
- icon_state = "wrynkey1"
- uni_append = list(0x022,0xF5D) // 022F5D
-
-/mob/living/carbon/monkey/New()
- var/datum/reagents/R = new/datum/reagents(330)
- reagents = R
- R.my_atom = src
-
- if(name == initial(name)) //To stop Pun-Pun becoming generic.
- name = "[name] ([rand(1, 1000)])"
- real_name = name
-
- if (!(dna))
- if(gender == NEUTER)
- gender = pick(MALE, FEMALE)
- dna = new /datum/dna( null )
- dna.real_name = real_name
- dna.ResetSE()
- dna.ResetUI()
- //dna.uni_identity = "00600200A00E0110148FC01300B009"
- //dna.SetUI(list(0x006,0x002,0x00A,0x00E,0x011,0x014,0x8FC,0x013,0x00B,0x009))
- //dna.struc_enzymes = "43359156756131E13763334D1C369012032164D4FE4CD61544B6C03F251B6C60A42821D26BA3B0FD6"
- //dna.SetSE(list(0x433,0x591,0x567,0x561,0x31E,0x137,0x633,0x34D,0x1C3,0x690,0x120,0x321,0x64D,0x4FE,0x4CD,0x615,0x44B,0x6C0,0x3F2,0x51B,0x6C6,0x0A4,0x282,0x1D2,0x6BA,0x3B0,0xFD6))
- dna.unique_enzymes = md5(name)
-
- // We're a monkey
- dna.SetSEState(MONKEYBLOCK, 1)
- dna.SetSEValueRange(MONKEYBLOCK,0xDAC, 0xFFF)
- // Fix gender
- dna.SetUIState(DNA_UI_GENDER, gender != MALE, 1)
-
- // Set the blocks to uni_append, if needed.
- if(uni_append.len>0)
- for(var/b=1;b<=uni_append.len;b++)
- dna.SetUIValue(DNA_UI_LENGTH-(uni_append.len-b),uni_append[b], 1)
- dna.UpdateUI()
-
- update_muts=1
-
- ..()
- update_icons()
- return
-
-/mob/living/carbon/monkey/unathi/New()
-
- ..()
- greaterform = "Unathi"
- dna.species = "Unathi"
- add_language("Sinta'unathi")
-
-/mob/living/carbon/monkey/skrell/New()
-
- ..()
- greaterform = "Skrell"
- dna.species = "Skrell"
- add_language("Skrellian")
-
-/mob/living/carbon/monkey/tajara/New()
-
- ..()
- greaterform = "Tajaran"
- dna.species = "Tajaran"
- add_language("Siik'tajr")
-
-/mob/living/carbon/monkey/vulpkanin/New()
-
- ..()
- greaterform = "Vulpkanin"
- dna.species = "Vulpkanin"
- add_language("Canilunzt")
-
-/mob/living/carbon/monkey/diona/New()
-
- ..()
- alien = 1
- gender = NEUTER
- greaterform = "Diona"
- dna.species = "Diona"
- add_language("Rootspeak")
-
-/mob/living/carbon/monkey/movement_delay()
- var/tally = 0
- if(status_flags & GOTTAGOFAST)
- tally -= 1
-
- var/health_deficiency = (100 - health)
- if(health_deficiency >= 45) tally += (health_deficiency / 25)
-
- if (bodytemperature < 283.222)
- tally += (283.222 - bodytemperature) / 10 * 1.75
- return tally+config.monkey_delay
-
-/mob/living/carbon/monkey/Bump(atom/movable/AM as mob|obj, yes)
-
- spawn( 0 )
- if ((!( yes ) || now_pushing))
- return
- now_pushing = 1
- if(ismob(AM))
- var/mob/tmob = AM
- if(istype(tmob, /mob/living/carbon/human) && (FAT in tmob.mutations))
- if(prob(70))
- usr << "\red You fail to push [tmob]'s fat ass out of the way."
- now_pushing = 0
- return
- if(!(tmob.status_flags & CANPUSH))
- now_pushing = 0
- return
-
- tmob.LAssailant = src
- now_pushing = 0
- ..()
- if (!( istype(AM, /atom/movable) ))
- return
- if (!( now_pushing ))
- now_pushing = 1
- if (!( AM.anchored ))
- var/t = get_dir(src, AM)
- if (istype(AM, /obj/structure/window/full))
- for(var/obj/structure/window/win in get_step(AM,t))
- now_pushing = 0
- return
- step(AM, t)
- now_pushing = null
- return
- return
-
-/mob/living/carbon/monkey/Topic(href, href_list)
- ..()
- if (href_list["mach_close"])
- var/t1 = text("window=[]", href_list["mach_close"])
- unset_machine()
- src << browse(null, t1)
- if ((href_list["item"] && !( usr.stat ) && !( usr.restrained() ) && in_range(src, usr) ))
- var/obj/effect/equip_e/monkey/O = new /obj/effect/equip_e/monkey( )
- O.source = usr
- O.target = src
- O.item = usr.get_active_hand()
- O.s_loc = usr.loc
- O.t_loc = loc
- O.place = href_list["item"]
- requests += O
- spawn( 0 )
- O.process()
- return
- ..()
- return
-
-/mob/living/carbon/monkey/meteorhit(obj/O as obj)
- for(var/mob/M in viewers(src, null))
- M.show_message(text("\red [] has been hit by []", src, O), 1)
- if (health > 0)
- var/shielded = 0
- adjustBruteLoss(30)
- if ((O.icon_state == "flaming" && !( shielded )))
- adjustFireLoss(40)
- health = 100 - getOxyLoss() - getToxLoss() - getFireLoss() - getBruteLoss()
- return
-
-/mob/living/carbon/monkey/attack_paw(mob/living/M as mob)
- ..()
-
- if (M.a_intent == "help")
- help_shake_act(M)
- else
- if (M.a_intent == "harm" && !(istype(src.wear_mask, /obj/item/clothing/mask/muzzle)))
- M.do_attack_animation(src)
- if (prob(75))
- playsound(loc, 'sound/weapons/bite.ogg', 50, 1, -1)
- visible_message("[M.name] bites [name]!", \
- "[M.name] bites [name]!")
- var/damage = rand(1, 5)
- if (health > -100)
- adjustBruteLoss(damage)
- health = 100 - getOxyLoss() - getToxLoss() - getFireLoss() - getBruteLoss()
- else
- visible_message("[M.name] has attempted to bite [name]!", \
- "[M.name] has attempted to bite [name]!")
- return
-
-/mob/living/carbon/monkey/attack_larva(mob/living/carbon/alien/larva/L as mob)
-
- switch(L.a_intent)
- if("help")
- visible_message("[L] rubs its head against [src].")
-
-
- else
- L.do_attack_animation(src)
- var/damage = rand(1, 3)
- visible_message("[L] bites [src]!", \
- "[L] bites [src]!")
- playsound(loc, 'sound/weapons/bite.ogg', 50, 1, -1)
-
- if(stat != DEAD)
- L.amount_grown = min(L.amount_grown + damage, L.max_grown)
- adjustBruteLoss(damage)
-
-/mob/living/carbon/monkey/attack_hand(mob/living/carbon/human/M as mob)
- if (!ticker)
- M << "You cannot attack people before the game has started."
- return
-
- if (istype(loc, /turf) && istype(loc.loc, /area/start))
- M << "No attacking people at spawn, you jackass."
- return
-
- if(..()) //To allow surgery to return properly.
- return
-
- if (M.a_intent == "help")
- help_shake_act(M)
-
- else
- if (M.a_intent == "harm")
- M.do_attack_animation(src)
- if (prob(75))
- visible_message("[M] has punched [name]!", \
- "[M] has punched [name]!")
-
- playsound(loc, "punch", 25, 1, -1)
- var/damage = rand(5, 10)
- if (prob(40))
- damage = rand(10, 15)
- if ( (paralysis < 5) && (health > 0) )
- Paralyse(rand(10, 15))
- spawn( 0 )
- visible_message("[M] has knocked out [name]!", \
- "[M] has knocked out [name]!")
- return
- adjustBruteLoss(damage)
- updatehealth()
- else
- playsound(loc, 'sound/weapons/punchmiss.ogg', 25, 1, -1)
- visible_message("[M] has attempted to punch [name]!", \
- "[M] has attempted to punch [name]!")
- else
- if (M.a_intent == "grab")
- if (M == src || anchored)
- return
-
- var/obj/item/weapon/grab/G = new /obj/item/weapon/grab(M, src )
-
- M.put_in_active_hand(G)
-
- G.synch()
-
- LAssailant = M
-
- playsound(loc, 'sound/weapons/thudswoosh.ogg', 50, 1, -1)
- visible_message("[M] has grabbed [name] passively!")
- else
- if (!( paralysis ))
- if (prob(25))
- Paralyse(2)
- playsound(loc, 'sound/weapons/thudswoosh.ogg', 50, 1, -1)
- visible_message("[M] has pushed down [src]!", \
- "[M] has pushed down [src]!")
- else
- if(drop_item())
- playsound(loc, 'sound/weapons/thudswoosh.ogg', 50, 1, -1)
- visible_message("[M] has disarmed [src]!", \
- "[M] has disarmed [src]!")
- return
-
-/mob/living/carbon/monkey/attack_alien(mob/living/carbon/alien/humanoid/M as mob)
- if (!ticker)
- M << "You cannot attack people before the game has started."
- return
-
- if (istype(loc, /turf) && istype(loc.loc, /area/start))
- M << "No attacking people at spawn, you jackass."
- return
-
- switch(M.a_intent)
- if ("help")
- visible_message(" [M] caresses [src] with its scythe like arm.")
-
- if ("harm")
- M.do_attack_animation(src)
- if ((prob(95) && health > 0))
- playsound(loc, 'sound/weapons/slice.ogg', 25, 1, -1)
- var/damage = rand(15, 30)
- if (damage >= 25)
- damage = rand(20, 40)
- if (paralysis < 15)
- Paralyse(rand(10, 15))
- visible_message("[M] has wounded [name]!", \
- "[M] has wounded [name]!")
- else
- visible_message("[M] has slashed [name]!", \
- "[M] has slashed [name]!")
- if (stat != DEAD)
- adjustBruteLoss(damage)
- updatehealth()
- else
- playsound(loc, 'sound/weapons/slashmiss.ogg', 25, 1, -1)
- visible_message("[M] has attempted to lunge at [name]!", \
- "[M] has attempted to lunge at [name]!")
-
- if ("grab")
- if (M == src || anchored)
- return
- var/obj/item/weapon/grab/G = new /obj/item/weapon/grab(M, src )
-
- M.put_in_active_hand(G)
-
- G.synch()
-
- LAssailant = M
-
- playsound(loc, 'sound/weapons/thudswoosh.ogg', 50, 1, -1)
- visible_message("[M] has grabbed [name] passively!")
-
- if ("disarm")
- M.do_attack_animation(src)
- playsound(loc, 'sound/weapons/pierce.ogg', 25, 1, -1)
- var/damage = 5
- if(prob(95))
- Weaken(10)
- visible_message("[M] has tackled down [name]!", \
- "[M] has tackled down [name]!")
- else
- if(drop_item())
- visible_message("[M] has disarmed [name]!", \
- "[M] has disarmed [name]!")
- adjustBruteLoss(damage)
- updatehealth()
- return
-
-/mob/living/carbon/monkey/attack_animal(mob/living/simple_animal/M as mob)
- if(M.melee_damage_upper == 0)
- M.emote("[M.friendly] [src]")
- else
- M.do_attack_animation(src)
- if(M.attack_sound)
- playsound(loc, M.attack_sound, 50, 1, 1)
- visible_message("[M] [M.attacktext] [src]!", \
- "[M] [M.attacktext] [src]!")
- add_logs(M, src, "attacked", admin=0)
- var/damage = rand(M.melee_damage_lower, M.melee_damage_upper)
- adjustBruteLoss(damage)
- updatehealth()
-
-
-/mob/living/carbon/monkey/attack_slime(mob/living/carbon/slime/M as mob)
- if (!ticker)
- M << "You cannot attack people before the game has started."
- return
-
- if(M.Victim) return // can't attack while eating!
-
- if (health > -100)
-
- M.do_attack_animation(src)
- visible_message("The [M.name] glomps [src]!", \
- "The [M.name] glomps [src]!")
-
- var/damage = rand(1, 3)
-
- if(M.is_adult)
- damage = rand(20, 40)
- else
- damage = rand(5, 35)
-
- adjustBruteLoss(damage)
-
- if(M.powerlevel > 0)
- var/stunprob = 10
- var/power = M.powerlevel + rand(0,3)
-
- switch(M.powerlevel)
- if(1 to 2) stunprob = 20
- if(3 to 4) stunprob = 30
- if(5 to 6) stunprob = 40
- if(7 to 8) stunprob = 60
- if(9) stunprob = 70
- if(10) stunprob = 95
-
- if(prob(stunprob))
- M.powerlevel -= 3
- if(M.powerlevel < 0)
- M.powerlevel = 0
-
- visible_message("[M] shocked [src]!", \
- "[M] shocked [src]!")
-
- Weaken(power)
- if (stuttering < power)
- stuttering = power
- Stun(power)
-
- var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread
- s.set_up(5, 1, src)
- s.start()
-
- if (prob(stunprob) && M.powerlevel >= 8)
- adjustFireLoss(M.powerlevel * rand(6,10))
-
-
- updatehealth()
-
- return
-
-/mob/living/carbon/monkey/Stat()
- ..()
- statpanel("Status")
- stat(null, text("Intent: []", a_intent))
- stat(null, text("Move Mode: []", m_intent))
- if(client && mind)
- if (client.statpanel == "Status")
- if(mind.changeling)
- stat("Chemical Storage", mind.changeling.chem_charges)
- stat("Genetic Damage Time", mind.changeling.geneticdamage)
- return
-
-
-/mob/living/carbon/monkey/verb/removeinternal()
- set name = "Remove Internals"
- set category = "IC"
- internal = null
- return
-
-/mob/living/carbon/monkey/var/co2overloadtime = null
-/mob/living/carbon/monkey/var/temperature_resistance = T0C+75
-
-/mob/living/carbon/monkey/emp_act(severity)
- if(wear_id) wear_id.emp_act(severity)
- ..()
-
-/mob/living/carbon/monkey/ex_act(severity)
- ..()
- switch(severity)
- if(1.0)
- gib()
- return
- if(2.0)
- adjustBruteLoss(60)
- adjustFireLoss(60)
- if(3.0)
- adjustBruteLoss(30)
- if (prob(50))
- Paralyse(10)
- return
-
-/mob/living/carbon/monkey/blob_act()
- if (stat != 2)
- adjustFireLoss(60)
- health = 100 - getOxyLoss() - getToxLoss() - getFireLoss() - getBruteLoss()
- if (prob(50))
- Paralyse(10)
- if (stat == DEAD && client)
- gib()
- return
- if (stat == DEAD && !client)
- gibs(loc, viruses)
- del(src)
- return
-
-
-/mob/living/carbon/monkey/IsAdvancedToolUser()//Unless its monkey mode monkeys cant use advanced tools
- if(!ticker) return 0
- if(!ticker.mode.name == "monkey") return 0
- return 1
-
-/mob/living/carbon/monkey/canBeHandcuffed()
- return 1
-
-
-/mob/living/carbon/monkey/assess_threat(var/obj/machinery/bot/secbot/judgebot, var/lasercolor)
- if(judgebot.emagged == 2)
- return 10 //Everyone is a criminal!
- var/threatcount = 0
-
- //Securitrons can't identify monkeys
- if(!lasercolor && judgebot.idcheck )
- threatcount += 4
-
- //Lasertag bullshit
- if(lasercolor)
- if(lasercolor == "b")//Lasertag turrets target the opposing team, how great is that? -Sieve
- if((istype(r_hand,/obj/item/weapon/gun/energy/laser/redtag)) || (istype(l_hand,/obj/item/weapon/gun/energy/laser/redtag)))
- threatcount += 4
-
- if(lasercolor == "r")
- if((istype(r_hand,/obj/item/weapon/gun/energy/laser/bluetag)) || (istype(l_hand,/obj/item/weapon/gun/energy/laser/bluetag)))
- threatcount += 4
-
- return threatcount
-
- //Check for weapons
- if(judgebot.weaponscheck)
- if(judgebot.check_for_weapons(l_hand))
- threatcount += 4
- if(judgebot.check_for_weapons(r_hand))
- threatcount += 4
-
- //Loyalty implants imply trustworthyness
- if(isloyal(src))
- threatcount -= 1
-
- return threatcount
diff --git a/code/modules/mob/living/carbon/monkey/npc.dm b/code/modules/mob/living/carbon/monkey/npc.dm
deleted file mode 100644
index f863558605a..00000000000
--- a/code/modules/mob/living/carbon/monkey/npc.dm
+++ /dev/null
@@ -1,89 +0,0 @@
-mob/living/carbon/monkey/var
- mob/npc_target = null // the NPC this monkey is attacking
- mob/npc_fleeing = null // the monkey is scared of this mob
- mob/hiding_behind = null
- hid_behind = 0
-
- var/list/hostiles = list()
-
- fleeing_duration = 0
-
-mob/living/carbon/monkey/proc/npc_act()
- if(!client && !stat)
- if(npc_fleeing && canmove)
- var/prevloc = loc
- if(!hiding_behind)
- for(var/mob/living/carbon/human/H in view(7, src))
- if(!hostiles.Find(H))
- hiding_behind = H
-
- if(hiding_behind)
- if(get_dist(src, hiding_behind) == 1)
- if(!hid_behind)
- emote("me", 1, "hides behind [hiding_behind]!")
- hid_behind = 1
- step_to(src, get_step(hiding_behind, get_dir(npc_fleeing, hiding_behind)))
- else
- if(!step_to(src, hiding_behind, 1))
- hiding_behind = null
- else
- step_away(src, npc_fleeing, 7)
-
- if(prob(7))
- if(prob(50) && (npc_fleeing in view(8,src)))
- switch(rand(1,3))
- if(1)
- emote("me", 1, "shows [npc_fleeing] its fangs!")
- if(2)
- emote("me", 2, "gnarls at [npc_fleeing].")
- if(3)
- emote("me", 2, "eyes [npc_fleeing] fearfully.")
- else
- switch(rand(1,3))
- if(1)
- emote("whimper")
- if(2)
- emote("me", 1, "trembles heavily.")
- if(3)
- emote("me", 2, "chimpers nervously.")
-
- fleeing_duration--
- if(fleeing_duration <= 0)
- npc_fleeing = null
- hiding_behind = null
- hid_behind = 0
-
- if(loc == prevloc) dir = get_dir(src, npc_fleeing)
- else
- if(prob(33) && canmove && isturf(loc))
- step(src, pick(cardinal))
- if(prob(1))
- if(health < 70)
- switch(rand(1,3))
- if(1)
- emote("me", 1, "cowers on the floor, writhing in pain.")
- if(2)
- emote("me", 1, "trembles visibly, it seems to be in pain.")
- if(3)
- emote("me", 1, "wraps its arms around its knees, breathing heavily.")
- else
- emote(pick("scratch","jump","roll","tail"))
-
-mob/living/carbon/monkey/react_to_attack(mob/M)
- if(npc_fleeing == M)
- fleeing_duration += 30
- return
-
- if(!hostiles.Find(M)) hostiles += M
-
- spawn(5)
- switch(rand(1,3))
- if(1)
- emote("me", 1, "flails about wildly!")
- if(2)
- emote("me", 2, "screams loudly at [M]!")
- if(3)
- emote("me", 2, "whimpers fearfully!")
-
- npc_fleeing = M
- fleeing_duration = 30
\ No newline at end of file
diff --git a/code/modules/mob/living/carbon/monkey/say.dm b/code/modules/mob/living/carbon/monkey/say.dm
deleted file mode 100644
index 9a629c358fc..00000000000
--- a/code/modules/mob/living/carbon/monkey/say.dm
+++ /dev/null
@@ -1,28 +0,0 @@
-/mob/living/carbon/monkey/say(var/message)
- var/verb = "says"
- var/message_range = world.view
-
- if(client)
- if(client.prefs.muted & MUTE_IC)
- src << "\red You cannot speak in IC (Muted)."
- return
-
- message = trim_strip_html_properly(message)
-
- if(stat == 2)
- return say_dead(message)
-
- if(copytext(message,1,2) == "*")
- return emote(copytext(message,2))
-
- var/datum/language/speaking = parse_language(message)
-
- if(speaking)
- message = copytext(message, 2+length(speaking.key))
-
- message = trim(message)
-
- if(!message || stat)
- return
-
- ..(message, speaking, verb, null, null, message_range, null)
\ No newline at end of file
diff --git a/code/modules/mob/living/carbon/monkey/update_icons.dm b/code/modules/mob/living/carbon/monkey/update_icons.dm
deleted file mode 100644
index 7c268632876..00000000000
--- a/code/modules/mob/living/carbon/monkey/update_icons.dm
+++ /dev/null
@@ -1,134 +0,0 @@
-//Monkey Overlays Indexes////////
-#define M_MASK_LAYER 1
-#define M_BACK_LAYER 2
-#define M_HANDCUFF_LAYER 3
-#define M_L_HAND_LAYER 4
-#define M_R_HAND_LAYER 5
-#define TARGETED_LAYER 6
-#define M_FIRE_LAYER 7
-#define M_TOTAL_LAYERS 7
-/////////////////////////////////
-
-/mob/living/carbon/monkey
- var/list/overlays_lying[M_TOTAL_LAYERS]
- var/list/overlays_standing[M_TOTAL_LAYERS]
-
-/mob/living/carbon/monkey/regenerate_icons()
- ..()
- update_inv_wear_mask(0)
- update_inv_back(0)
- update_inv_r_hand(0)
- update_inv_l_hand(0)
- update_inv_handcuffed(0)
- update_fire()
- update_icons()
- //Hud Stuff
- update_hud()
- return
-
-/mob/living/carbon/monkey/update_icons()
- update_hud()
- lying_prev = lying //so we don't update overlays for lying/standing unless our stance changes again
- overlays.Cut()
- for(var/image/I in overlays_standing)
- overlays += I
-
-
- if(lying)
- var/matrix/M = matrix()
- M.Turn(90)
- M.Translate(1,-6)
- src.transform = M
- else
- var/matrix/M = matrix()
- src.transform = M
-
-
-
-////////
-/mob/living/carbon/monkey/update_inv_wear_mask(var/update_icons=1)
- if( wear_mask && istype(wear_mask, /obj/item/clothing/mask) )
- overlays_standing[M_MASK_LAYER] = image("icon" = 'icons/mob/monkey.dmi', "icon_state" = "[wear_mask.icon_state]")
- wear_mask.screen_loc = ui_monkey_mask
- else
- overlays_standing[M_MASK_LAYER] = null
- if(update_icons) update_icons()
-
-
-/mob/living/carbon/monkey/update_inv_r_hand(var/update_icons=1)
- if(r_hand)
- var/t_state = r_hand.item_state
- if(!t_state) t_state = r_hand.icon_state
- overlays_standing[M_R_HAND_LAYER] = image("icon" = 'icons/mob/items_righthand.dmi', "icon_state" = t_state)
- r_hand.screen_loc = ui_rhand
- if (handcuffed) drop_r_hand()
- else
- overlays_standing[M_R_HAND_LAYER] = null
- if(update_icons) update_icons()
-
-
-/mob/living/carbon/monkey/update_inv_l_hand(var/update_icons=1)
- if(l_hand)
- var/t_state = l_hand.item_state
- if(!t_state) t_state = l_hand.icon_state
- overlays_standing[M_L_HAND_LAYER] = image("icon" = 'icons/mob/items_lefthand.dmi', "icon_state" = t_state)
- l_hand.screen_loc = ui_lhand
- if (handcuffed) drop_l_hand()
- else
- overlays_standing[M_L_HAND_LAYER] = null
- if(update_icons) update_icons()
-
-
-/mob/living/carbon/monkey/update_inv_back(var/update_icons=1)
- if(back)
- overlays_standing[M_BACK_LAYER] = image("icon" = 'icons/mob/back.dmi', "icon_state" = "[back.icon_state]")
- back.screen_loc = ui_monkey_back
- else
- overlays_standing[M_BACK_LAYER] = null
- if(update_icons) update_icons()
-
-
-/mob/living/carbon/monkey/update_inv_handcuffed(var/update_icons=1)
- if(handcuffed)
- drop_r_hand()
- drop_l_hand()
- stop_pulling()
- overlays_standing[M_HANDCUFF_LAYER] = image("icon" = 'icons/mob/monkey.dmi', "icon_state" = "handcuff1")
- else
- overlays_standing[M_HANDCUFF_LAYER] = null
- if(update_icons) update_icons()
-
-
-/mob/living/carbon/monkey/update_hud()
- if (client)
- client.screen |= contents
-
-//Call when target overlay should be added/removed
-/mob/living/carbon/monkey/update_targeted(var/update_icons=1)
- if (targeted_by && target_locked)
- overlays_standing[TARGETED_LAYER] = target_locked
- else if (!targeted_by && target_locked)
- del(target_locked)
- if (!targeted_by)
- overlays_standing[TARGETED_LAYER] = null
- if(update_icons) update_icons()
-
-/mob/living/carbon/monkey/update_fire()
- overlays -= overlays_standing[M_FIRE_LAYER]
- if(on_fire)
- overlays_standing[M_FIRE_LAYER] = image("icon"='icons/mob/OnFire.dmi', "icon_state"="Standing", "layer"= -M_FIRE_LAYER)
- overlays += overlays_standing[M_FIRE_LAYER]
- return
- else
- overlays_standing[M_FIRE_LAYER] = null
-
-//Monkey Overlays Indexes////////
-#undef M_MASK_LAYER
-#undef M_BACK_LAYER
-#undef M_HANDCUFF_LAYER
-#undef M_L_HAND_LAYER
-#undef M_R_HAND_LAYER
-#undef TARGETED_LAYER
-#undef M_FIRE_LAYER
-#undef M_TOTAL_LAYERS
-
diff --git a/code/modules/mob/living/living.dm b/code/modules/mob/living/living.dm
index 4361b9e74a2..3c5c9b62a15 100644
--- a/code/modules/mob/living/living.dm
+++ b/code/modules/mob/living/living.dm
@@ -67,13 +67,6 @@
H.UpdateDamageIcon()
H.updatehealth()
return 1
- else if(istype(src, /mob/living/carbon/monkey))
- if (RESIST_HEAT in src.mutations) //fireproof
- return 0
- var/mob/living/carbon/monkey/M = src
- M.adjustFireLoss(burn_amount)
- M.updatehealth()
- return 1
else if(istype(src, /mob/living/silicon/ai))
return 0
diff --git a/code/modules/mob/living/silicon/robot/robot.dm b/code/modules/mob/living/silicon/robot/robot.dm
index bcef5aee0b7..9fcea92d006 100644
--- a/code/modules/mob/living/silicon/robot/robot.dm
+++ b/code/modules/mob/living/silicon/robot/robot.dm
@@ -1025,11 +1025,6 @@ var/list/robot_verbs_default = list(
//if they are holding or wearing a card that has access, that works
if(check_access(H.get_active_hand()) || check_access(H.wear_id))
return 1
- else if(istype(M, /mob/living/carbon/monkey))
- var/mob/living/carbon/monkey/george = M
- //they can only hold things :(
- if(george.get_active_hand() && istype(george.get_active_hand(), /obj/item/weapon/card/id) && check_access(george.get_active_hand()))
- return 1
return 0
/mob/living/silicon/robot/proc/check_access(obj/item/weapon/card/id/I)
diff --git a/code/modules/mob/living/simple_animal/friendly/corgi.dm b/code/modules/mob/living/simple_animal/friendly/corgi.dm
index 38a3243c1bb..ec32d9f4f2e 100644
--- a/code/modules/mob/living/simple_animal/friendly/corgi.dm
+++ b/code/modules/mob/living/simple_animal/friendly/corgi.dm
@@ -107,7 +107,7 @@
//Removing from inventory
if(href_list["remove_inv"])
- if(!Adjacent(usr) || !(ishuman(usr) || ismonkey(usr) || isrobot(usr) || isalienadult(usr)))
+ if(!Adjacent(usr) || !(ishuman(usr) || issmall(usr) || isrobot(usr) || isalienadult(usr)))
return
var/remove_from = href_list["remove_inv"]
switch(remove_from)
@@ -140,7 +140,7 @@
//Adding things to inventory
else if(href_list["add_inv"])
- if(!Adjacent(usr) || !(ishuman(usr) || ismonkey(usr) || isrobot(usr) || isalienadult(usr)))
+ if(!Adjacent(usr) || !(ishuman(usr) || issmall(usr) || isrobot(usr) || isalienadult(usr)))
return
var/add_to = href_list["add_inv"]
if(!usr.get_active_hand())
diff --git a/code/modules/mob/living/simple_animal/friendly/crab.dm b/code/modules/mob/living/simple_animal/friendly/crab.dm
index fde8333ebdb..09a3ceed3d7 100644
--- a/code/modules/mob/living/simple_animal/friendly/crab.dm
+++ b/code/modules/mob/living/simple_animal/friendly/crab.dm
@@ -83,7 +83,7 @@
//Removing from inventory
if(href_list["remove_inv"])
- if(get_dist(src,usr) > 1 || !(ishuman(usr) || ismonkey(usr) || isrobot(usr) || isalienadult(usr)))
+ if(get_dist(src,usr) > 1 || !(ishuman(usr) || issmall(usr) || isrobot(usr) || isalienadult(usr)))
return
var/remove_from = href_list["remove_inv"]
switch(remove_from)
@@ -113,7 +113,7 @@
//Adding things to inventory
else if(href_list["add_inv"])
- if(get_dist(src,usr) > 1 || !(ishuman(usr) || ismonkey(usr) || isrobot(usr) || isalienadult(usr)))
+ if(get_dist(src,usr) > 1 || !(ishuman(usr) || issmall(usr) || isrobot(usr) || isalienadult(usr)))
return
var/add_to = href_list["add_inv"]
if(!usr.get_active_hand())
diff --git a/code/modules/mob/living/simple_animal/parrot.dm b/code/modules/mob/living/simple_animal/parrot.dm
index 04f5c411957..34d7c63dbd3 100644
--- a/code/modules/mob/living/simple_animal/parrot.dm
+++ b/code/modules/mob/living/simple_animal/parrot.dm
@@ -137,7 +137,7 @@
return
//Is the usr's mob type able to do this?
- if(ishuman(usr) || ismonkey(usr) || isrobot(usr))
+ if(ishuman(usr) || issmall(usr) || isrobot(usr))
//Removing from inventory
if(href_list["remove_inv"])
diff --git a/code/modules/mob/living/simple_animal/simple_animal.dm b/code/modules/mob/living/simple_animal/simple_animal.dm
index 3e1fd60f404..56d4ffb9f61 100644
--- a/code/modules/mob/living/simple_animal/simple_animal.dm
+++ b/code/modules/mob/living/simple_animal/simple_animal.dm
@@ -308,29 +308,6 @@
return
-/mob/living/simple_animal/attack_paw(mob/living/carbon/monkey/M as mob)
- if(!(istype(M, /mob/living/carbon/monkey)))
- return // Fix for aliens receiving double messages when attacking simple animals.
-
- ..()
-
- switch(M.a_intent)
-
- if ("help")
- if (health > 0)
- visible_message(" [M] [response_help] [src].")
- playsound(loc, 'sound/weapons/thudswoosh.ogg', 50, 1, -1)
- else
- M.do_attack_animation(src)
- if (istype(src.wear_mask, /obj/item/clothing/mask/muzzle))
- return
- playsound(loc, 'sound/weapons/bite.ogg', 50, 1, -1)
- visible_message("[M.name] bites [src]!", \
- "[M.name] bites [src]!")
- if (health > -100)
- adjustBruteLoss(rand(1, 3))
- return
-
/mob/living/simple_animal/attack_alien(mob/living/carbon/alien/humanoid/M as mob)
switch(M.a_intent)
diff --git a/code/modules/mob/mob_cleanup.dm b/code/modules/mob/mob_cleanup.dm
index 1cac93904f8..cdc734c49a7 100644
--- a/code/modules/mob/mob_cleanup.dm
+++ b/code/modules/mob/mob_cleanup.dm
@@ -152,14 +152,6 @@ Put (mob/proc)s here that are in dire need of a code cleanup.
//
world << "Shoes pass [passed]"
*/ //
- else if(istype(src, /mob/living/carbon/monkey))
- var/mob/living/carbon/monkey/M = src
- switch(target_zone)
- if(1)
- if(M.wear_mask && isobj(M.wear_mask))
- Cl = M.wear_mask
- passed = prob((Cl.permeability_coefficient*100) - 1)
- //world << "Mask pass [passed]"
if(!passed && spread_type == AIRBORNE && !internals)
passed = (prob((50*virus.permeability_mod) - 1))
diff --git a/code/modules/mob/mob_grab.dm b/code/modules/mob/mob_grab.dm
index ccbcee33e1e..2430e027f87 100644
--- a/code/modules/mob/mob_grab.dm
+++ b/code/modules/mob/mob_grab.dm
@@ -382,7 +382,7 @@
if(isalien(attacker) && iscarbon(prey)) //Xenomorphs eating carbon mobs
return 1
- if(ishuman(attacker) && attacker.get_species() == "Kidan" && istype(prey,/mob/living/carbon/monkey/diona)) //Kidan eating nymphs
+ if(ishuman(attacker) && attacker.get_species() == "Kidan" && istype(prey,/mob/living/carbon/alien/diona)) //Kidan eating nymphs
return 1
if(ishuman(attacker) && attacker.get_species() == "Tajaran" && istype(prey,/mob/living/simple_animal/mouse)) //Tajaran eating mice. Meow!
diff --git a/code/modules/mob/mob_helpers.dm b/code/modules/mob/mob_helpers.dm
index 3383ad1eab9..49420198f26 100644
--- a/code/modules/mob/mob_helpers.dm
+++ b/code/modules/mob/mob_helpers.dm
@@ -5,10 +5,12 @@
return 1
return 0
-/proc/ismonkey(A)
- if(A && istype(A, /mob/living/carbon/monkey))
- return 1
- return 0
+/proc/issmall(A)
+ if(A && istype(A, /mob/living/carbon/human))
+ var/mob/living/carbon/human/H = A
+ if(H.species && H.species.is_small)
+ return 1
+ return 0
/proc/isbrain(A)
if(A && istype(A, /mob/living/carbon/brain))
@@ -395,7 +397,7 @@ var/list/intents = list("help","disarm","grab","harm")
if(hud_used && hud_used.action_intent)
hud_used.action_intent.icon_state = "intent_[a_intent]"
- else if(isrobot(src) || ismonkey(src) || islarva(src))
+ else if(isrobot(src) || islarva(src))
switch(input)
if("help")
a_intent = "help"
diff --git a/code/modules/mob/transform_procs.dm b/code/modules/mob/transform_procs.dm
index 4a17773d012..032011a8fe5 100644
--- a/code/modules/mob/transform_procs.dm
+++ b/code/modules/mob/transform_procs.dm
@@ -481,7 +481,7 @@
return 1
//Friendly Creatures!
- if(ispath(MP, /mob/living/carbon/monkey/diona) && !jobban_isbanned(src, "Dionaea"))
+ if(ispath(MP, /mob/living/carbon/alien/diona) && !jobban_isbanned(src, "Dionaea"))
return 1
//Not in here? Must be untested!
diff --git a/code/modules/organs/blood.dm b/code/modules/organs/blood.dm
index 141e3d9ee5d..9cc65e3920d 100644
--- a/code/modules/organs/blood.dm
+++ b/code/modules/organs/blood.dm
@@ -326,12 +326,6 @@ proc/blood_splatter(var/target,var/datum/reagent/blood/source,var/large)
if(istype(source,/mob/living/carbon/human))
var/mob/living/carbon/human/M = source
source = M.get_blood(M.vessel)
- else if(istype(source,/mob/living/carbon/monkey))
- var/mob/living/carbon/monkey/donor = source
- if(donor.dna)
- source = new()
- source.data["blood_DNA"] = donor.dna.unique_enzymes
- source.data["blood_type"] = donor.dna.b_type
// Are we dripping or splattering?
var/list/drips = list()
diff --git a/code/modules/power/apc.dm b/code/modules/power/apc.dm
index 757bfc6b40f..889d2f47f62 100644
--- a/code/modules/power/apc.dm
+++ b/code/modules/power/apc.dm
@@ -812,8 +812,7 @@
if(!user.client)
return 0
if ( ! (istype(user, /mob/living/carbon/human) || \
- istype(user, /mob/living/silicon) || \
- istype(user, /mob/living/carbon/monkey) /*&& ticker && ticker.mode.name == "monkey"*/) )
+ istype(user, /mob/living/silicon)))
user << "\red You don't have the dexterity to use this [src]!"
return 0
if(user.restrained())
diff --git a/code/modules/power/port_gen.dm b/code/modules/power/port_gen.dm
index a434098da03..ccb5e52ff6c 100644
--- a/code/modules/power/port_gen.dm
+++ b/code/modules/power/port_gen.dm
@@ -229,7 +229,7 @@ display round(lastgen) and plasmatank amount
if(panel_open)
user << "You open the access panel."
else
- user << "You close the access panel."
+ user << "You close the access panel."
else if(istype(O, /obj/item/weapon/storage/part_replacer) && panel_open)
exchange_parts(user, O)
return
@@ -238,8 +238,8 @@ display round(lastgen) and plasmatank amount
/obj/machinery/power/port_gen/pacman/emag_act(user as mob)
emagged = 1
- emp_act(1)
-
+ emp_act(1)
+
/obj/machinery/power/port_gen/pacman/attack_hand(mob/user as mob)
..()
if (!anchored)
@@ -250,9 +250,6 @@ display round(lastgen) and plasmatank amount
/obj/machinery/power/port_gen/pacman/attack_ai(mob/user as mob)
interact(user)
-/obj/machinery/power/port_gen/pacman/attack_paw(mob/user as mob)
- interact(user)
-
/obj/machinery/power/port_gen/pacman/interact(mob/user)
if (get_dist(src, user) > 1 )
if (!istype(user, /mob/living/silicon/ai))
diff --git a/code/modules/projectiles/gun.dm b/code/modules/projectiles/gun.dm
index 96feb8cd89d..95eaa69a81f 100644
--- a/code/modules/projectiles/gun.dm
+++ b/code/modules/projectiles/gun.dm
@@ -96,7 +96,7 @@
qdel(src)
return
- if (!user.IsAdvancedToolUser() || istype(user, /mob/living/carbon/monkey/diona))
+ if (!user.IsAdvancedToolUser() || istype(user, /mob/living/carbon/alien/diona))
user << "\red You don't have the dexterity to do this!"
return
if(istype(user, /mob/living))
diff --git a/code/modules/projectiles/projectile/change.dm b/code/modules/projectiles/projectile/change.dm
index 0a828d3be11..e002314411a 100644
--- a/code/modules/projectiles/projectile/change.dm
+++ b/code/modules/projectiles/projectile/change.dm
@@ -33,11 +33,8 @@
var/mob/living/new_mob
- var/randomize = pick("monkey","robot","slime","xeno","human")
+ var/randomize = pick("robot","slime","xeno","human")
switch(randomize)
- if("monkey")
- new_mob = new /mob/living/carbon/monkey(M.loc)
- new_mob.universal_speak = 1
if("robot")
new_mob = new /mob/living/silicon/robot(M.loc)
new_mob.gender = M.gender
diff --git a/code/modules/projectiles/projectile/magic.dm b/code/modules/projectiles/projectile/magic.dm
index cc2a94ad1f0..e06ee2faa12 100644
--- a/code/modules/projectiles/projectile/magic.dm
+++ b/code/modules/projectiles/projectile/magic.dm
@@ -148,11 +148,8 @@ proc/wabbajack(mob/living/M)
var/mob/living/new_mob
- var/randomize = pick("monkey","robot","slime","xeno","human","animal")
+ var/randomize = pick("robot","slime","xeno","human","animal")
switch(randomize)
- if("monkey")
- new_mob = new /mob/living/carbon/monkey(M.loc)
- new_mob.universal_speak = 1
if("robot")
if(prob(30))
new_mob = new /mob/living/silicon/robot/syndicate(M.loc)
diff --git a/code/modules/reagents/Chemistry-Reagents.dm b/code/modules/reagents/Chemistry-Reagents.dm
index b02dbddc52d..61f1db03b17 100644
--- a/code/modules/reagents/Chemistry-Reagents.dm
+++ b/code/modules/reagents/Chemistry-Reagents.dm
@@ -154,13 +154,6 @@ datum
if(self.data["virus2"])
blood_prop.virus2 = virus_copylist(self.data["virus2"])
-
- else if(istype(self.data["donor"], /mob/living/carbon/monkey))
- var/obj/effect/decal/cleanable/blood/blood_prop = locate() in T
- if(!blood_prop)
- blood_prop = new(T)
- blood_prop.blood_DNA["Non-Human DNA"] = "A+"
-
else if(istype(self.data["donor"], /mob/living/carbon/alien))
var/obj/effect/decal/cleanable/blood/xeno/blood_prop = locate() in T
if(!blood_prop)
diff --git a/code/modules/reagents/newchem/toxins.dm b/code/modules/reagents/newchem/toxins.dm
index 9cfa220198b..c3020926188 100644
--- a/code/modules/reagents/newchem/toxins.dm
+++ b/code/modules/reagents/newchem/toxins.dm
@@ -602,10 +602,10 @@ datum/reagent/atrazine/reaction_mob(var/mob/living/M, var/method=TOUCH, var/volu
H.adjustToxLoss(50)
..()
return
- if(ismonkey(M))
+ if(issmall(M))
var/mob/living/carbon/monkey/MO = M
if(MO.dna)
- if(istype(MO,/mob/living/carbon/monkey/diona)) //plantmen monkeys (diona) take EVEN MORE damage
+ if(istype(MO,/mob/living/carbon/alien/diona)) //plantmen monkeys (diona) take EVEN MORE damage
MO.adjustToxLoss(100)
..()
return
diff --git a/code/modules/reagents/reagent_containers/food/snacks.dm b/code/modules/reagents/reagent_containers/food/snacks.dm
index 7f4d494af0f..c199844a083 100644
--- a/code/modules/reagents/reagent_containers/food/snacks.dm
+++ b/code/modules/reagents/reagent_containers/food/snacks.dm
@@ -1669,7 +1669,7 @@
bitesize = 12
filling_color = "#ADAC7F"
- var/monkey_type = /mob/living/carbon/monkey
+ var/monkey_type = "Monkey"
New()
..()
@@ -1687,6 +1687,7 @@
if(wrapped)
Unwrap(user)
+/*
On_Consume(var/mob/M)
M << "Something inside of you suddently expands!"
@@ -1714,7 +1715,7 @@
else //someone is having a bad day
E.createwound(CUT, 30)
E.embed(surprise)
- else if (ismonkey(M))
+ else if (issmall(M))
M.visible_message("[M] suddenly tears in half!")
var/mob/living/carbon/monkey/ook = new monkey_type(M.loc)
ook.name = "malformed [ook.name]"
@@ -1722,6 +1723,7 @@
ook.add_blood(M)
M.gib()
..()
+*/
water_act(volume, temperature)
if(volume >= 5) return Expand()
@@ -1729,7 +1731,8 @@
proc/Expand()
for(var/mob/M in viewers(src,7))
M << "\red \The [src] expands!"
- new monkey_type(src)
+ var/mob/living/carbon/human/H = new (src)
+ H.set_species(monkey_type)
del(src)
proc/Unwrap(mob/user as mob)
@@ -1746,32 +1749,34 @@
/obj/item/weapon/reagent_containers/food/snacks/monkeycube/farwacube
name = "farwa cube"
- monkey_type = /mob/living/carbon/monkey/tajara
+ monkey_type = "Farwa"
/obj/item/weapon/reagent_containers/food/snacks/monkeycube/wrapped/farwacube
name = "farwa cube"
- monkey_type =/mob/living/carbon/monkey/tajara
+ monkey_type = "Farwa"
+/*
/obj/item/weapon/reagent_containers/food/snacks/monkeycube/wolpincube
name = "wolpin cube"
monkey_type = /mob/living/carbon/monkey/vulpkanin
/obj/item/weapon/reagent_containers/food/snacks/monkeycube/wrapped/wolpincube
name = "wolpin cube"
monkey_type = /mob/living/carbon/monkey/vulpkanin
+*/
/obj/item/weapon/reagent_containers/food/snacks/monkeycube/stokcube
name = "stok cube"
- monkey_type = /mob/living/carbon/monkey/unathi
+ monkey_type = "Stok"
/obj/item/weapon/reagent_containers/food/snacks/monkeycube/wrapped/stokcube
name = "stok cube"
- monkey_type =/mob/living/carbon/monkey/unathi
+ monkey_type = "Stok"
/obj/item/weapon/reagent_containers/food/snacks/monkeycube/neaeracube
name = "neaera cube"
- monkey_type =/mob/living/carbon/monkey/skrell
+ monkey_type = "Neara"
/obj/item/weapon/reagent_containers/food/snacks/monkeycube/wrapped/neaeracube
name = "neaera cube"
- monkey_type =/mob/living/carbon/monkey/skrell
+ monkey_type = "Neara"
/obj/item/weapon/reagent_containers/food/snacks/spellburger
diff --git a/code/modules/reagents/reagent_containers/syringes.dm b/code/modules/reagents/reagent_containers/syringes.dm
index 564207dacca..c44da6e511d 100644
--- a/code/modules/reagents/reagent_containers/syringes.dm
+++ b/code/modules/reagents/reagent_containers/syringes.dm
@@ -44,8 +44,6 @@
..()
update_icon()
- attack_paw()
- return attack_hand()
attackby(obj/item/I as obj, mob/user as mob, params)
@@ -361,8 +359,6 @@
..()
update_icon()
- attack_paw()
- return attack_hand()
attackby(obj/item/I as obj, mob/user as mob)
diff --git a/code/modules/recycling/disposal.dm b/code/modules/recycling/disposal.dm
index ebb92a8474f..0eb8dbafd3f 100644
--- a/code/modules/recycling/disposal.dm
+++ b/code/modules/recycling/disposal.dm
@@ -206,15 +206,6 @@
return
- // monkeys can only pull the flush lever
- attack_paw(mob/user as mob)
- if(stat & BROKEN)
- return
-
- flush = !flush
- update()
- return
-
// ai as human but can't flush
attack_ai(mob/user as mob)
interact(user, 1)
diff --git a/code/modules/research/xenoarchaeology/artifact/artifact_autocloner.dm b/code/modules/research/xenoarchaeology/artifact/artifact_autocloner.dm
index e4a0992fbcd..3242d7a73ef 100644
--- a/code/modules/research/xenoarchaeology/artifact/artifact_autocloner.dm
+++ b/code/modules/research/xenoarchaeology/artifact/artifact_autocloner.dm
@@ -41,8 +41,7 @@
/mob/living/simple_animal/slime,\
/mob/living/simple_animal/crab,\
/mob/living/simple_animal/mouse,\
- /mob/living/simple_animal/hostile/retaliate/goat,\
- /mob/living/carbon/monkey\
+ /mob/living/simple_animal/hostile/retaliate/goat\
)
//todo: how the hell is the asteroid permanently powered?
diff --git a/code/modules/virus2/effect.dm b/code/modules/virus2/effect.dm
index 014fc44cfbf..33b8fd46f6c 100644
--- a/code/modules/virus2/effect.dm
+++ b/code/modules/virus2/effect.dm
@@ -626,7 +626,7 @@
..()
-var/list/compatible_mobs = list(/mob/living/carbon/human, /mob/living/carbon/monkey)
+var/list/compatible_mobs = list(/mob/living/carbon/human)
/datum/disease2/effect/horsethroat
name = "Horse Throat"
stage = 3
diff --git a/code/modules/virus2/helpers.dm b/code/modules/virus2/helpers.dm
index 982bf477cc3..cfc6bd1bdb6 100644
--- a/code/modules/virus2/helpers.dm
+++ b/code/modules/virus2/helpers.dm
@@ -69,11 +69,6 @@ proc/airborne_can_reach(turf/source, turf/target, var/radius=5)
if(M.reagents.has_reagent("spaceacillin"))
return
- if(istype(M,/mob/living/carbon/monkey))
- var/mob/living/carbon/monkey/chimp = M
- if (!(chimp.greaterform in disease.affected_species))
- return
-
if(istype(M,/mob/living/carbon/human))
var/mob/living/carbon/human/chump = M
if (!(chump.species.name in disease.affected_species))
diff --git a/icons/mob/human_races/masks/blood_human.dmi b/icons/mob/human_races/masks/blood_human.dmi
new file mode 100644
index 00000000000..dc54991c84d
Binary files /dev/null and b/icons/mob/human_races/masks/blood_human.dmi differ
diff --git a/icons/mob/human_races/masks/blood_monkey.dmi b/icons/mob/human_races/masks/blood_monkey.dmi
new file mode 100644
index 00000000000..5d5dd66d752
Binary files /dev/null and b/icons/mob/human_races/masks/blood_monkey.dmi differ
diff --git a/icons/mob/human_races/masks/dam_human.dmi b/icons/mob/human_races/masks/dam_human.dmi
new file mode 100644
index 00000000000..cb6bf82d98e
Binary files /dev/null and b/icons/mob/human_races/masks/dam_human.dmi differ
diff --git a/icons/mob/human_races/masks/dam_mask_human.dmi b/icons/mob/human_races/masks/dam_mask_human.dmi
new file mode 100644
index 00000000000..db55b5a6b5d
Binary files /dev/null and b/icons/mob/human_races/masks/dam_mask_human.dmi differ
diff --git a/icons/mob/human_races/masks/dam_mask_monkey.dmi b/icons/mob/human_races/masks/dam_mask_monkey.dmi
new file mode 100644
index 00000000000..4761f21fbd5
Binary files /dev/null and b/icons/mob/human_races/masks/dam_mask_monkey.dmi differ
diff --git a/icons/mob/human_races/masks/dam_monkey.dmi b/icons/mob/human_races/masks/dam_monkey.dmi
new file mode 100644
index 00000000000..43d1f2c7a73
Binary files /dev/null and b/icons/mob/human_races/masks/dam_monkey.dmi differ
diff --git a/icons/mob/human_races/monkeys/r_farwa.dmi b/icons/mob/human_races/monkeys/r_farwa.dmi
new file mode 100644
index 00000000000..585fa3bcf35
Binary files /dev/null and b/icons/mob/human_races/monkeys/r_farwa.dmi differ
diff --git a/icons/mob/human_races/monkeys/r_monkey.dmi b/icons/mob/human_races/monkeys/r_monkey.dmi
new file mode 100644
index 00000000000..c405a94978d
Binary files /dev/null and b/icons/mob/human_races/monkeys/r_monkey.dmi differ
diff --git a/icons/mob/human_races/monkeys/r_neara.dmi b/icons/mob/human_races/monkeys/r_neara.dmi
new file mode 100644
index 00000000000..69183f0d4bb
Binary files /dev/null and b/icons/mob/human_races/monkeys/r_neara.dmi differ
diff --git a/icons/mob/human_races/monkeys/r_stok.dmi b/icons/mob/human_races/monkeys/r_stok.dmi
new file mode 100644
index 00000000000..28af62205cc
Binary files /dev/null and b/icons/mob/human_races/monkeys/r_stok.dmi differ
diff --git a/paradise.dme b/paradise.dme
index 95230e48fcf..4ec576d4155 100644
--- a/paradise.dme
+++ b/paradise.dme
@@ -1264,6 +1264,13 @@
#include "code\modules\mob\living\carbon\alien\login.dm"
#include "code\modules\mob\living\carbon\alien\logout.dm"
#include "code\modules\mob\living\carbon\alien\say.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\humanoid\alien_powers.dm"
#include "code\modules\mob\living\carbon\alien\humanoid\emote.dm"
#include "code\modules\mob\living\carbon\alien\humanoid\empress.dm"
@@ -1309,13 +1316,16 @@
#include "code\modules\mob\living\carbon\human\inventory.dm"
#include "code\modules\mob\living\carbon\human\life.dm"
#include "code\modules\mob\living\carbon\human\login.dm"
+#include "code\modules\mob\living\carbon\human\npcs.dm"
#include "code\modules\mob\living\carbon\human\say.dm"
#include "code\modules\mob\living\carbon\human\update_icons.dm"
#include "code\modules\mob\living\carbon\human\whisper.dm"
#include "code\modules\mob\living\carbon\human\species\apollo.dm"
#include "code\modules\mob\living\carbon\human\species\golem.dm"
+#include "code\modules\mob\living\carbon\human\species\monkey.dm"
#include "code\modules\mob\living\carbon\human\species\plasmaman.dm"
#include "code\modules\mob\living\carbon\human\species\shadow.dm"
+#include "code\modules\mob\living\carbon\human\species\station.dm"
#include "code\modules\mob\living\carbon\metroid\death.dm"
#include "code\modules\mob\living\carbon\metroid\emote.dm"
#include "code\modules\mob\living\carbon\metroid\examine.dm"
@@ -1327,16 +1337,6 @@
#include "code\modules\mob\living\carbon\metroid\say.dm"
#include "code\modules\mob\living\carbon\metroid\subtypes.dm"
#include "code\modules\mob\living\carbon\metroid\update_icons.dm"
-#include "code\modules\mob\living\carbon\monkey\death.dm"
-#include "code\modules\mob\living\carbon\monkey\diona.dm"
-#include "code\modules\mob\living\carbon\monkey\emote.dm"
-#include "code\modules\mob\living\carbon\monkey\examine.dm"
-#include "code\modules\mob\living\carbon\monkey\inventory.dm"
-#include "code\modules\mob\living\carbon\monkey\life.dm"
-#include "code\modules\mob\living\carbon\monkey\login.dm"
-#include "code\modules\mob\living\carbon\monkey\monkey.dm"
-#include "code\modules\mob\living\carbon\monkey\say.dm"
-#include "code\modules\mob\living\carbon\monkey\update_icons.dm"
#include "code\modules\mob\living\silicon\death.dm"
#include "code\modules\mob\living\silicon\login.dm"
#include "code\modules\mob\living\silicon\say.dm"