diff --git a/_maps/map_files/cyberiad/cyberiad.dmm b/_maps/map_files/cyberiad/cyberiad.dmm
index 93930a996d5..3b9a3eb0671 100644
--- a/_maps/map_files/cyberiad/cyberiad.dmm
+++ b/_maps/map_files/cyberiad/cyberiad.dmm
@@ -2469,7 +2469,7 @@
"aVy" = (/turf/simulated/floor,/area/hallway/primary/central/ne)
"aVz" = (/obj/machinery/disposal,/obj/structure/disposalpipe/trunk{dir = 4},/turf/simulated/floor{icon_state = "grimy"},/area/crew_quarters/bar)
"aVA" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/table/reinforced,/obj/item/stack/packageWrap,/obj/item/weapon/pen/blue{pixel_x = 0; pixel_y = 4},/obj/machinery/firealarm{dir = 2; pixel_y = 24},/obj/structure/disposalpipe/segment{dir = 4},/obj/item/weapon/book/manual/barman_recipes,/turf/simulated/floor{icon_state = "grimy"},/area/crew_quarters/bar)
-"aVB" = (/obj/structure/disposalpipe/segment{dir = 4},/mob/living/carbon/monkey{tag = "icon-punpun1"; name = "Pun Pun"; icon_state = "punpun1"},/turf/simulated/floor{icon_state = "grimy"},/area/crew_quarters/bar)
+"aVB" = (/obj/structure/disposalpipe/segment{dir = 4},/mob/living/carbon/human/monkey/punpun,/turf/simulated/floor{icon_state = "grimy"},/area/crew_quarters/bar)
"aVC" = (/obj/structure/disposalpipe/segment{dir = 8; icon_state = "pipe-c"},/turf/simulated/floor{icon_state = "grimy"},/area/crew_quarters/bar)
"aVD" = (/turf/simulated/floor{icon_state = "grimy"},/area/crew_quarters/bar)
"aVE" = (/obj/structure/window/reinforced{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/table/reinforced,/obj/item/clothing/head/that{pixel_x = 4; pixel_y = 6},/obj/item/weapon/lighter/zippo,/turf/simulated/floor{icon_state = "grimy"},/area/crew_quarters/bar)
@@ -4881,7 +4881,7 @@
"bPS" = (/obj/machinery/power/apc{dir = 8; name = "west bump"; pixel_x = -24},/obj/structure/cable,/obj/item/roller,/obj/machinery/atmospherics/unary/vent_scrubber{dir = 8; on = 1; scrub_N2O = 1; scrub_Toxins = 1},/turf/simulated/floor{icon_state = "white"},/area/medical/genetics_cloning)
"bPT" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor{icon_state = "white"},/area/medical/genetics_cloning)
"bPU" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 2; on = 1},/obj/item/device/radio/intercom{freerange = 1; frequency = 1459; name = "Station Intercom (General)"; pixel_x = 30},/turf/simulated/floor{icon_state = "white"},/area/medical/genetics_cloning)
-"bPV" = (/obj/machinery/light{dir = 8},/obj/item/device/radio/intercom{dir = 0; name = "Station Intercom (General)"; pixel_x = -27},/obj/item/weapon/storage/box/monkeycubes,/obj/item/weapon/storage/box/stokcubes,/obj/item/weapon/storage/box/neaeracubes,/obj/structure/table/glass,/obj/item/weapon/storage/box/wolpincubes,/obj/item/weapon/storage/box/farwacubes,/turf/simulated/floor{tag = "icon-whitepurple (WEST)"; icon_state = "whitepurple"; dir = 8},/area/medical/genetics)
+"bPV" = (/obj/machinery/light{dir = 8},/obj/item/device/radio/intercom{dir = 0; name = "Station Intercom (General)"; pixel_x = -27},/obj/item/weapon/storage/box/monkeycubes,/obj/item/weapon/storage/box/stokcubes,/obj/item/weapon/storage/box/neaeracubes,/obj/structure/table/glass,/obj/item/weapon/storage/box/farwacubes,/turf/simulated/floor{tag = "icon-whitepurple (WEST)"; icon_state = "whitepurple"; dir = 8},/area/medical/genetics)
"bPW" = (/obj/machinery/light{dir = 4; icon_state = "tube1"},/obj/machinery/firealarm{dir = 4; pixel_x = 24},/obj/item/roller,/obj/item/weapon/storage/box/disks,/obj/structure/table/glass,/turf/simulated/floor{tag = "icon-whitepurple (EAST)"; icon_state = "whitepurple"; dir = 4},/area/medical/genetics)
"bPX" = (/turf/simulated/wall/r_wall,/area/toxins/server_coldroom)
"bPY" = (/obj/machinery/door/firedoor{dir = 1; name = "hazard door north"},/obj/machinery/door/airlock/command{name = "Server Room"; req_access = null; req_access_txt = "30"},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor{icon_state = "dark"},/area/toxins/server)
@@ -7465,7 +7465,7 @@
"cNC" = (/obj/item/weapon/storage/fancy/vials,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/table/glass,/turf/simulated/floor{icon_state = "white"},/area/medical/virology/lab)
"cND" = (/obj/item/weapon/storage/lockbox/vials,/obj/structure/table/glass,/turf/simulated/floor{icon_state = "white"},/area/medical/virology/lab)
"cNE" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/turf/simulated/floor/plating,/area/medical/virology/lab)
-"cNF" = (/obj/item/weapon/storage/box/monkeycubes,/obj/item/weapon/storage/box/stokcubes,/obj/item/weapon/storage/box/neaeracubes,/obj/structure/table/glass,/obj/item/weapon/storage/box/wolpincubes,/obj/item/weapon/storage/box/farwacubes,/obj/structure/disposalpipe/segment{dir = 1; icon_state = "pipe-c"},/turf/simulated/floor{icon_state = "white"},/area/medical/virology/lab)
+"cNF" = (/obj/item/weapon/storage/box/monkeycubes,/obj/item/weapon/storage/box/stokcubes,/obj/item/weapon/storage/box/neaeracubes,/obj/structure/table/glass,/obj/item/weapon/storage/box/farwacubes,/obj/structure/disposalpipe/segment{dir = 1; icon_state = "pipe-c"},/turf/simulated/floor{icon_state = "white"},/area/medical/virology/lab)
"cNG" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/item/device/radio/intercom{dir = 1; name = "Station Intercom (General)"; pixel_y = -28},/obj/machinery/light,/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor{icon_state = "white"},/area/medical/virology/lab)
"cNH" = (/obj/machinery/alarm{dir = 1; pixel_y = -22},/obj/structure/disposalpipe/segment{dir = 2; icon_state = "pipe-c"},/obj/machinery/camera{c_tag = "Virology Lab East"; dir = 1; network = list("SS13")},/turf/simulated/floor{icon_state = "white"},/area/medical/virology/lab)
"cNI" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "Biohazard_medi"; name = "Quarantine Lockdown"; opacity = 0},/turf/simulated/floor/plating,/area/medical/virology/lab)
diff --git a/_maps/map_files/cyberiad/z2.dmm b/_maps/map_files/cyberiad/z2.dmm
index fe7514dd174..43eaa37cc76 100644
--- a/_maps/map_files/cyberiad/z2.dmm
+++ b/_maps/map_files/cyberiad/z2.dmm
@@ -590,7 +590,7 @@
"lr" = (/turf/unsimulated/wall/fakeglass{tag = "icon-fakewindows2 (NORTH)"; icon_state = "fakewindows2"; dir = 1},/area/wizard_station)
"ls" = (/turf/unsimulated/floor{dir = 8; icon_state = "chapel"},/area/wizard_station)
"lt" = (/obj/effect/decal/cleanable/blood,/turf/unsimulated/floor{icon_state = "chapel"},/area/wizard_station)
-"lu" = (/mob/living/carbon/monkey,/turf/unsimulated/floor{dir = 8; icon_state = "chapel"},/area/wizard_station)
+"lu" = (/mob/living/carbon/human/monkey,/turf/unsimulated/floor{dir = 8; icon_state = "chapel"},/area/wizard_station)
"lv" = (/turf/unsimulated/floor{icon_state = "chapel"},/area/wizard_station)
"lw" = (/obj/machinery/light/spot{tag = "icon-tube1 (WEST)"; icon_state = "tube1"; dir = 8},/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/shuttle/syndicate_elite/mothership)
"lx" = (/obj/machinery/door/airlock/external{name = "Shuttle Airlock"; req_access_txt = "150"},/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "syndicate_elite"; name = "Side Hull Door"; opacity = 0; req_access_txt = "150"},/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/shuttle/syndicate_elite/mothership)
diff --git a/_maps/map_files/cyberiad/z5.dmm b/_maps/map_files/cyberiad/z5.dmm
index 4b40ad7a576..580f6935395 100644
--- a/_maps/map_files/cyberiad/z5.dmm
+++ b/_maps/map_files/cyberiad/z5.dmm
@@ -358,8 +358,8 @@
"gT" = (/obj/machinery/light{dir = 1},/obj/machinery/hologram/holopad,/turf/simulated/floor,/area/research_outpost/anomaly)
"gU" = (/turf/simulated/floor{dir = 4; icon_state = "warning"},/area/research_outpost/anomaly)
"gV" = (/obj/structure/rack,/obj/item/clothing/suit/bio_suit/anomaly,/obj/item/clothing/head/bio_hood/anomaly,/obj/item/clothing/mask/breath,/obj/item/clothing/glasses/science,/obj/item/clothing/gloves/color/latex,/obj/machinery/alarm{dir = 8; pixel_x = 25; pixel_y = 0},/turf/simulated/floor{icon_state = "delivery"; name = "floor"},/area/research_outpost/anomaly)
-"gW" = (/mob/living/carbon/monkey,/turf/simulated/floor{icon_state = "white"},/area/research_outpost/anomaly)
-"gX" = (/obj/machinery/door/window/westleft{dir = 4; name = "Monkey Pen"; req_access_txt = "47"},/mob/living/carbon/monkey,/turf/simulated/floor{icon_state = "white"},/area/research_outpost/anomaly)
+"gW" = (/obj/machinery/door/window/westleft{dir = 4; name = "Monkey Pen"; req_access_txt = "47"},/mob/living/carbon/human/monkey,/turf/simulated/floor{icon_state = "white"},/area/research_outpost/anomaly)
+"gX" = (/mob/living/carbon/human/monkey,/turf/simulated/floor{icon_state = "white"},/area/research_outpost/anomaly)
"gY" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 8; initialize_directions = 11; level = 1},/turf/simulated/floor{icon_state = "white"},/area/research_outpost/hallway)
"gZ" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{level = 1},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4; level = 1},/obj/machinery/power/apc{dir = 4; name = "Outpost Hallways APC"; pixel_x = 24; pixel_y = 0},/obj/structure/cable{icon_state = "0-2"; d2 = 2},/obj/structure/cable,/turf/simulated/floor{icon_state = "white"},/area/research_outpost/hallway)
"ha" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4; level = 1},/turf/simulated/wall/r_wall,/area/research_outpost/power)
@@ -393,8 +393,8 @@
"hC" = (/obj/machinery/door/window/westleft{dir = 8; name = "Locker room"; opacity = 0; req_access_txt = "65"},/turf/simulated/floor,/area/research_outpost/anomaly)
"hD" = (/turf/simulated/floor,/area/research_outpost/anomaly)
"hE" = (/obj/structure/rack,/obj/item/clothing/suit/bio_suit/anomaly,/obj/item/clothing/head/bio_hood/anomaly,/obj/item/clothing/mask/breath,/obj/item/clothing/glasses/science,/obj/item/clothing/gloves/color/latex,/obj/machinery/camera{c_tag = "Research Outpost Anomaly Lab Storage"; dir = 8; network = list("Research Outpost")},/turf/simulated/floor{icon_state = "delivery"; name = "floor"},/area/research_outpost/anomaly)
-"hF" = (/obj/machinery/alarm{dir = 4; pixel_x = -25; pixel_y = 0},/mob/living/carbon/monkey,/turf/simulated/floor{icon_state = "white"},/area/research_outpost/anomaly)
-"hG" = (/obj/structure/window/reinforced{dir = 4},/mob/living/carbon/monkey,/turf/simulated/floor{icon_state = "white"},/area/research_outpost/anomaly)
+"hF" = (/obj/structure/window/reinforced{dir = 4},/mob/living/carbon/human/monkey,/turf/simulated/floor{icon_state = "white"},/area/research_outpost/anomaly)
+"hG" = (/obj/machinery/alarm{dir = 4; pixel_x = -25; pixel_y = 0},/mob/living/carbon/human/monkey,/turf/simulated/floor{icon_state = "white"},/area/research_outpost/anomaly)
"hH" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{level = 1},/turf/simulated/floor{icon_state = "white"},/area/research_outpost/hallway)
"hI" = (/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 8; initialize_directions = 11; level = 1},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/turf/simulated/floor{icon_state = "white"},/area/research_outpost/hallway)
"hJ" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4; level = 1},/turf/simulated/wall/r_wall,/area/research_outpost/power)
@@ -1588,8 +1588,8 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafafeVeWeXerbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkdSaaaaaReseseseseseseseYeZfafbfcfdfefffgfhfifjfkflfmfnfofpfqfrfsftfueOfvfwfxfyeOfzacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadadadadadaaaaaaaaaaaaaaadadadadadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaffAfBfCfDerbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkaaaaaaaaaResesesesesesesfEfFeufGfHfIfJfKfLfMaMfNfOfPfQfRfSfTfUfVdbfWfXfYfZfZgagbgcgdgeacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafafgfggghergigjererererbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkaaaaaaaaaaaaaResesesesesesesgkfFeufGfHglgmfKgngoaMgpgqdbgrdbdbdbdbgsdbgtgueOgvgwgxgygzemgAaeaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafgBgCgDgEgFgGbRdQgHergIgJerbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkaaaaaaaaaaaaaResesesesesesesbbfFeugKfHgLgMfKgNgOaMgPgQgRgSgTgUgVdbgWgXgYgZhahbhchdhehfemacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafhghhgChihjhkhlhmgHhngJgJgIerbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkaaaaaaaaaaaahohphqhrhshthqhuhvhwhxbbhyhzaMaMaMaMaMhAhBhCgShDgUhEdbhFhGhHhIhJhKhLhMhNhOhPhQaMhRbAaBaBaBaBaBaBaChSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafgBgCgDgEgFgGbRdQgHergIgJerbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkaaaaaaaaaaaaaResesesesesesesbbfFeugKfHgLgMfKgNgOaMgPgQgRgSgTgUgVdbgXgWgYgZhahbhchdhehfemacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafhghhgChihjhkhlhmgHhngJgJgIerbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkaaaaaaaaaaaahohphqhrhshthqhuhvhwhxbbhyhzaMaMaMaMaMhAhBhCgShDgUhEdbhGhFhHhIhJhKhLhMhNhOhPhQaMhRbAaBaBaBaBaBaBaChSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahThghhhggDgDgihUhjerfDhVergJhWerbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkaaaaaaaaaaaahXhYhZiaibibicidieifigihiiijikiliminioipiqirisitiuivdbiwixiyizeOeOiAeOeOeOiBiCiDiEiFiGiGiHiGiGiGiIbiaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafafiJiKgDiLiMgDeXiNhkiOiPiQererererererbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkacacacacacacacacacacacacacaaaaaaaaaaiRiSibibibibiTiUiViWiXiYiZjaikjbjcjdjejfjgjhjijjjkjljmjnjkjojpjqjrjsjtjqjujqjkjvjwjxjyjzjAjBjCjDiGbyaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafafjEjFjGgDiMjHhijIhjjJerjKjLerjMgHjNjOerbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkacacacacacacacacacacacacacacaaaaaaaaaajPjQibibjRibjSjTjUjVjWjXjYjZikkakbkckdkekfkgkhkikjkkklkmknkkkoklkpkkklkqkrksktkukvkwkxkykzkAkAkBiGbyaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
@@ -1787,3 +1787,4 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
"}
+
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/__HELPERS/global_lists.dm b/code/__HELPERS/global_lists.dm
index 26380218d1e..f4e9ef1133d 100644
--- a/code/__HELPERS/global_lists.dm
+++ b/code/__HELPERS/global_lists.dm
@@ -3,7 +3,7 @@
/////Initial Building/////
//////////////////////////
-/hook/startup/proc/makeDatumRefLists()
+/proc/makeDatumRefLists()
var/list/paths
//Hair - Initialise all /datum/sprite_accessory/hair into an list indexed by hair-style name
diff --git a/code/__HELPERS/unsorted.dm b/code/__HELPERS/unsorted.dm
index 22019b81db2..6ee1e073034 100644
--- a/code/__HELPERS/unsorted.dm
+++ b/code/__HELPERS/unsorted.dm
@@ -558,16 +558,10 @@ Turf and target are seperate in case you want to teleport some distance from a t
moblist.Add(M)
for(var/mob/new_player/M in sortmob)
moblist.Add(M)
- for(var/mob/living/carbon/monkey/M in sortmob)
- moblist.Add(M)
for(var/mob/living/carbon/slime/M in sortmob)
moblist.Add(M)
for(var/mob/living/simple_animal/M in sortmob)
moblist.Add(M)
-// for(var/mob/living/silicon/hivebot/M in world)
-// mob_list.Add(M)
-// for(var/mob/living/silicon/hive_mainframe/M in world)
-// mob_list.Add(M)
return moblist
//E = MC^2
diff --git a/code/_onclick/hud/hud.dm b/code/_onclick/hud/hud.dm
index dc93941ac6b..28d0757f3e5 100644
--- a/code/_onclick/hud/hud.dm
+++ b/code/_onclick/hud/hud.dm
@@ -174,10 +174,10 @@ datum/hud/New(mob/owner)
var/ui_color = mymob.client.prefs.UI_style_color
var/ui_alpha = mymob.client.prefs.UI_style_alpha
- if(ishuman(mymob))
- human_hud(ui_style, ui_color, ui_alpha) // Pass the player the UI style chosen in preferences
- else if(ismonkey(mymob))
+ if(issmall(mymob))
monkey_hud(ui_style)
+ else if(ishuman(mymob))
+ human_hud(ui_style, ui_color, ui_alpha) // Pass the player the UI style chosen in preferences
else if(isbrain(mymob))
brain_hud(ui_style)
else if( islarva(mymob) || isfacehugger(mymob) )
diff --git a/code/_onclick/other_mobs.dm b/code/_onclick/other_mobs.dm
index 3edd0ba0bde..921fb8e818e 100644
--- a/code/_onclick/other_mobs.dm
+++ b/code/_onclick/other_mobs.dm
@@ -50,39 +50,6 @@
/mob/living/RestrainedClickOn(var/atom/A)
return
-/*
- Monkeys
-*/
-/mob/living/carbon/monkey/UnarmedAttack(var/atom/A)
- A.attack_paw(src)
-/atom/proc/attack_paw(mob/user as mob)
- return
-
-/*
- Monkey RestrainedClickOn() was apparently the
- one and only use of all of the restrained click code
- (except to stop you from doing things while handcuffed);
- moving it here instead of various hand_p's has simplified
- things considerably
-*/
-/mob/living/carbon/monkey/RestrainedClickOn(var/atom/A)
- if(..())
- return
- if(a_intent != "harm" || !ismob(A)) return
- if(is_muzzled())
- return
- var/mob/living/carbon/ML = A
- var/dam_zone = ran_zone(pick("chest", "l_hand", "r_hand", "l_leg", "r_leg"))
- var/armor = ML.run_armor_check(dam_zone, "melee")
- if(prob(75))
- ML.apply_damage(rand(1,3), BRUTE, dam_zone, armor)
- for(var/mob/O in viewers(ML, null))
- O.show_message("\red [name] has bit [ML]!", 1)
- if(armor >= 2) return
- else
- for(var/mob/O in viewers(ML, null))
- O.show_message("\red [src] has attempted to bite [ML]!", 1)
-
/*
Aliens
Defaults to same as monkey in most places
@@ -90,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..0d283a3e5ba 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/primitive/diona
*/
/hook/harvest_podman
diff --git a/code/datums/mind.dm b/code/datums/mind.dm
index e3459ca6d55..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"
@@ -1012,36 +1005,6 @@ datum/mind
message_admins("[key_name_admin(usr)] has thrall'ed [current].")
log_admin("[key_name(usr)] has thrall'ed [current].")
- else if (href_list["monkey"])
- var/mob/living/L = current
- if (L.notransform)
- return
- switch(href_list["monkey"])
- if("healthy")
- if (usr.client.holder.rights & R_ADMIN)
- var/mob/living/carbon/human/H = current
- var/mob/living/carbon/monkey/M = current
- if (istype(H))
- log_admin("[key_name(usr)] attempting to monkeyize [key_name(current)]")
- message_admins("\blue [key_name_admin(usr)] attempting to monkeyize [key_name_admin(current)]")
- src = null
- M = H.monkeyize()
- src = M.mind
- //world << "DEBUG: \"healthy\": M=[M], M.mind=[M.mind], src=[src]!"
- sleep(0) //because deleting of virus is done through spawn(0)
- if("human")
- var/mob/living/carbon/monkey/M = current
- if (istype(M))
- log_admin("[key_name(usr)] attempting to humanize [key_name(current)]")
- message_admins("\blue [key_name_admin(usr)] attempting to humanize [key_name_admin(current)]")
- var/obj/item/weapon/dnainjector/m2h/m2h = new
- var/obj/item/weapon/implant/mobfinder = new(M) //hack because humanizing deletes mind --rastaf0
- src = null
- m2h.inject(M)
- src = mobfinder.loc:mind
- del(mobfinder)
- current.radiation -= 50
-
else if (href_list["silicon"])
current.hud_updateflag |= (1 << SPECIALROLE_HUD)
switch(href_list["silicon"])
@@ -1396,9 +1359,6 @@ datum/mind
mind_initialize() //updates the mind (or creates and initializes one if one doesn't exist)
mind.active = 1 //indicates that the mind is currently synced with a client
-//MONKEY
-/mob/living/carbon/monkey/mind_initialize()
- ..()
//slime
/mob/living/carbon/slime/mind_initialize()
diff --git a/code/datums/spell.dm b/code/datums/spell.dm
index 2c27947ddbf..f0275ae059d 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))
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..eef939d801f 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))
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 29b1cd1b3d9..32c3684ee78 100644
--- a/code/game/dna/dna_modifier.dm
+++ b/code/game/dna/dna_modifier.dm
@@ -132,7 +132,7 @@
return
if(usr.restrained() || usr.stat || usr.weakened || usr.stunned || usr.paralysis || usr.resting) //are you cuffed, dying, lying, stunned or other
return
- if (!ishuman(usr) && !ismonkey(usr)) //Make sure they're a mob that has dna
+ if (!ishuman(usr)) //Make sure they're a mob that has dna
usr << "\blue Try as you might, you can not climb up into the scanner."
return
if (src.occupant)
@@ -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..cfae77b2350 100644
--- a/code/game/dna/genes/monkey.dm
+++ b/code/game/dna/genes/monkey.dm
@@ -5,166 +5,91 @@
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.
- 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.unEquip(W)
+ H.regenerate_icons()
+ 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.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.unEquip(W)
+ H.set_species(H.species.primitive_form)
+
+ if(H.hud_used)
+ H.hud_used.monkey_hud()
+
+ 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
+ for(var/obj/item/W in H)
+ if (W==H.w_uniform) // will be torn
+ continue
+ H.unEquip(W)
+ H.regenerate_icons()
+ 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.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
+
+ if(H.hud_used)
+ H.hud_used.human_hud()
+
+
+ for(var/obj/item/W in H)
+ H.unEquip(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..27bba094711 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)) //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))
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..9077dee6bfb 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))
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))
if(mind && mind.changeling)
digitalcamo = 0
mind.changeling.changeling_speak = 0
diff --git a/code/game/gamemodes/changeling/powers/lesserform.dm b/code/game/gamemodes/changeling/powers/lesserform.dm
index 09751412a30..44aae09ae9f 100644
--- a/code/game/gamemodes/changeling/powers/lesserform.dm
+++ b/code/game/gamemodes/changeling/powers/lesserform.dm
@@ -16,52 +16,18 @@
return
user << "Our genes cry out!"
- var/mob/living/carbon/C = user
+ var/mob/living/carbon/human/H = user
- //TODO replace with monkeyize proc
+ if(!istype(H) || !H.species.primitive_form)
+ src << "We cannot perform this ability in this form!"
+ return
+
+ H.visible_message("[H] transforms!")
+ changeling.geneticdamage = 30
+ H << "Our genes cry out!"
var/list/implants = list() //Try to preserve implants.
- for(var/obj/item/weapon/implant/W in C)
+ for(var/obj/item/weapon/implant/W in H)
implants += W
-
- C.notransform = 1
- C.canmove = 0
- C.icon = null
- C.overlays.Cut()
- C.invisibility = 101
-
- var/atom/movable/overlay/animation = new /atom/movable/overlay( C.loc )
- animation.icon_state = "blank"
- animation.icon = 'icons/mob/mob.dmi'
- animation.master = src
- flick("h2monkey", animation)
- sleep(30)
- del(animation)
-
- var/mob/living/carbon/monkey/O = new /mob/living/carbon/monkey(src)
- O.dna = C.dna.Clone()
- C.dna = null
-
- for(var/obj/item/W in C)
- C.unEquip(W)
- for(var/obj/T in C)
- del(T)
-
- O.loc = C.loc
- O.name = "monkey ([copytext(md5(C.real_name), 2, 6)])"
- O.setToxLoss(C.getToxLoss())
- O.adjustBruteLoss(C.getBruteLoss())
- O.setOxyLoss(C.getOxyLoss())
- O.adjustFireLoss(C.getFireLoss())
- O.stat = C.stat
- O.a_intent = "harm"
- for(var/obj/item/weapon/implant/I in implants)
- I.loc = O
- I.implanted = O
-
- C.mind.transfer_to(O)
- O.mind.changeling.purchasedpowers += new /obj/effect/proc_holder/changeling/humanform(null)
- O.changeling_update_languages(changeling.absorbed_languages)
-
+ H.monkeyize()
feedback_add_details("changeling_powers","LF")
- qdel(C)
return 1
\ No newline at end of file
diff --git a/code/game/gamemodes/changeling/powers/tiny_prick.dm b/code/game/gamemodes/changeling/powers/tiny_prick.dm
index 6158b8672bd..0490b00d820 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)) )
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/cult/runes.dm b/code/game/gamemodes/cult/runes.dm
index 91739c16d22..d9a99767aa7 100644
--- a/code/game/gamemodes/cult/runes.dm
+++ b/code/game/gamemodes/cult/runes.dm
@@ -679,42 +679,6 @@ var/list/sacrificed = list()
H.dust()//To prevent the MMI from remaining
else
H.gib()
- for(var/mob/living/carbon/monkey/M in src.loc)
- if (ticker.mode.name == "cult")
- if(M.mind == ticker.mode:sacrifice_target)
- if(cultsinrange.len >= 3)
- sacrificed += M.mind
- usr << "\red The Geometer of Blood accepts this sacrifice, your objective is now complete."
- else
- usr << "\red Your target's earthly bonds are too strong. You need more cultists to succeed in this ritual."
- continue
- else
- if(prob(20))
- usr << "\red The Geometer of Blood accepts your meager sacrifice."
- ticker.mode:grant_runeword(usr)
- else
- usr << "\red The Geometer of blood accepts this sacrifice."
- usr << "\red However, a mere monkey is not enough to satisfy Him."
- else
- usr << "\red The Geometer of Blood accepts your meager sacrifice."
- if(prob(20))
- ticker.mode.grant_runeword(usr)
- M.gib()
-/* for(var/mob/living/carbon/alien/A)
- for(var/mob/K in cultsinrange)
- K.say("Barhah hra zar'garis!")
- A.dust() /// A.gib() doesnt work for some reason, and dust() leaves that skull and bones thingy which we dont really need.
- if (ticker.mode.name == "cult")
- if(prob(75))
- usr << "\red The Geometer of Blood accepts your exotic sacrifice."
- ticker.mode:grant_runeword(usr)
- else
- usr << "\red The Geometer of Blood accepts your exotic sacrifice."
- usr << "\red However, this alien is not enough to gain His favor."
- else
- usr << "\red The Geometer of Blood accepts your exotic sacrifice."
- return
- return fizzle() */
/////////////////////////////////////////SIXTEENTH RUNE
diff --git a/code/game/gamemodes/events.dm b/code/game/gamemodes/events.dm
index 07794377d04..ed0383660a9 100644
--- a/code/game/gamemodes/events.dm
+++ b/code/game/gamemodes/events.dm
@@ -1,167 +1,3 @@
-//this file left in for legacy support
-/*
-/proc/start_events()
- //changed to a while(1) loop since they are more efficient.
- //Moved the spawn in here to allow it to be called with advance proc call if it crashes.
- //and also to stop spawn copying variables from the game ticker
- spawn(3000)
- while(1)
- if(prob(50))//Every 120 seconds and prob 50 2-4 weak spacedusts will hit the station
- spawn(1)
- dust_swarm("weak")
- if(!event)
- //CARN: checks to see if random events are enabled.
- if(config.allow_random_events)
- if(prob(eventchance))
- event()
- hadevent = 1
- else
- Holiday_Random_Event()
- else
- event = 0
- sleep(1200)
-
-/proc/event()
- event = 1
-
- var/eventNumbersToPickFrom = list(1,2,4,5,6,7,8,9,10,11,12,13,14, 15) //so ninjas don't cause "empty" events.
-
- if((world.time/10)>=3600 && toggle_space_ninja && !sent_ninja_to_station)//If an hour has passed, relatively speaking. Also, if ninjas are allowed to spawn and if there is not already a ninja for the round.
- eventNumbersToPickFrom += 3
- switch(pick(eventNumbersToPickFrom))
- if(1)
- command_announcement.Announce("Meteors have been detected on collision course with the station.", "Meteor Alert", new_sound = 'sound/AI/meteors.ogg')
- spawn(100)
- meteor_wave()
- spawn_meteors()
- spawn(700)
- meteor_wave()
- spawn_meteors()
-
- if(2)
- command_announcement.Announce("Gravitational anomalies detected on the station. There is no additional data.", "Anomaly Alert", new_sound = 'sound/AI/granomalies.ogg')
- var/turf/T = pick(blobstart)
- var/obj/effect/bhole/bh = new /obj/effect/bhole( T.loc, 30 )
- spawn(rand(50, 300))
- del(bh)
- /*
- if(3) //Leaving the code in so someone can try and delag it, but this event can no longer occur randomly, per SoS's request. --NEO
- command_announcement.Announce("Space-time anomalies detected on the station. There is no additional data.", "Anomaly Alert", new_sound = 'sound/AI/spanomalies.ogg')
- var/list/turfs = new
- var/turf/picked
- for(var/turf/simulated/floor/T in world)
- if((T.z in config.station_levels))
- turfs += T
- for(var/turf/simulated/floor/T in turfs)
- if(prob(20))
- spawn(50+rand(0,3000))
- picked = pick(turfs)
- var/obj/effect/portal/P = new /obj/effect/portal( T )
- P.target = picked
- P.creator = null
- P.icon = 'icons/obj/objects.dmi'
- P.failchance = 0
- P.icon_state = "anom"
- P.name = "wormhole"
- spawn(rand(300,600))
- del(P)
- */
- if(3)
- if((world.time/10)>=3600 && toggle_space_ninja && !sent_ninja_to_station)//If an hour has passed, relatively speaking. Also, if ninjas are allowed to spawn and if there is not already a ninja for the round.
- space_ninja_arrival()//Handled in space_ninja.dm. Doesn't announce arrival, all sneaky-like.
- if(4)
- mini_blob_event()
-
- if(5)
- high_radiation_event()
- if(6)
- viral_outbreak()
- if(7)
- alien_infestation()
- if(8)
- prison_break()
- if(9)
- carp_migration()
- if(10)
- immovablerod()
- if(11)
- lightsout(1,2)
- if(12)
- appendicitis()
- if(13)
- IonStorm()
- if(14)
- spacevine_infestation()
- if(15)
- communications_blackout()
-*/
-
-
-
-/*
-/proc/viral_outbreak(var/virus = null)
-// command_announcement.Announce("Confirmed outbreak of level 7 viral biohazard aboard [station_name()]. All personnel must contain the outbreak.", "Biohazard Alert", new_sound = 'sound/AI/outbreak7.ogg')
- var/virus_type
- if(!virus)
- virus_type = pick(/datum/disease/dnaspread,/datum/disease/advance/flu,/datum/disease/advance/cold,/datum/disease/brainrot,/datum/disease/magnitis,/datum/disease/pierrot_throat)
- else
- switch(virus)
- if("fake gbs")
- virus_type = /datum/disease/fake_gbs
- if("gbs")
- virus_type = /datum/disease/gbs
- if("magnitis")
- virus_type = /datum/disease/magnitis
- if("rhumba beat")
- virus_type = /datum/disease/rhumba_beat
- if("brain rot")
- virus_type = /datum/disease/brainrot
- if("cold")
- virus_type = /datum/disease/advance/cold
- if("retrovirus")
- virus_type = /datum/disease/dnaspread
- if("flu")
- virus_type = /datum/disease/advance/flu
-// if("t-virus")
-// virus_type = /datum/disease/t_virus
- if("pierrot's throat")
- virus_type = /datum/disease/pierrot_throat
- for(var/mob/living/carbon/human/H in shuffle(living_mob_list))
-
- var/foundAlready = 0 // don't infect someone that already has the virus
- var/turf/T = get_turf(H)
- if(!T)
- continue
- if(!(T.z in config.station_levels))
- continue
- for(var/datum/disease/D in H.viruses)
- foundAlready = 1
- if(H.stat == 2 || foundAlready)
- continue
-
- if(virus_type == /datum/disease/dnaspread) //Dnaspread needs strain_data set to work.
- if((!H.dna) || (H.sdisabilities & BLIND)) //A blindness disease would be the worst.
- continue
- var/datum/disease/dnaspread/D = new
- D.strain_data["name"] = H.real_name
- D.strain_data["UI"] = H.dna.uni_identity
- D.strain_data["SE"] = H.dna.struc_enzymes
- D.carrier = 1
- D.holder = H
- D.affected_mob = H
- H.viruses += D
- break
- else
- var/datum/disease/D = new virus_type
- D.carrier = 1
- D.holder = H
- D.affected_mob = H
- H.viruses += D
- break
- spawn(rand(1500, 3000)) //Delayed announcements to keep the crew on their toes.
- command_announcement.Announce("Confirmed outbreak of level 7 viral biohazard aboard [station_name()]. All personnel must contain the outbreak.", "Biohazard Alert", new_sound = 'sound/AI/outbreak7.ogg')
-*/
-
/proc/alien_infestation(var/spawncount = 1) // -- TLE
//command_announcement.Announce("Unidentified lifesigns detected coming aboard [station_name()]. Secure any exterior access, including ducting and ventilation.", "Lifesign Alert", new_sound = 'sound/AI/aliens.ogg')
var/list/vents = list()
@@ -218,13 +54,6 @@
else
randmutg(H)
domutcheck(H,null,MUTCHK_FORCED)
- for(var/mob/living/carbon/monkey/M in living_mob_list)
- var/turf/T = get_turf(M)
- if(!T)
- continue
- if(!(T.z in config.station_levels))
- continue
- M.apply_effect((rand(15,75)),IRRADIATE,0)
sleep(100)
command_announcement.Announce("High levels of radiation detected near the station. Please report to the Med-bay if you feel strange.", "Anomaly Alert", new_sound = 'sound/AI/radiation.ogg')
diff --git a/code/game/gamemodes/mutiny/mutiny_hooks.dm b/code/game/gamemodes/mutiny/mutiny_hooks.dm
index 1ff1234cf2d..14766e520ec 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/primitive/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/gamemodes/nuclear/nuclearbomb.dm b/code/game/gamemodes/nuclear/nuclearbomb.dm
index 2fc85d6fe4a..921b765bf75 100644
--- a/code/game/gamemodes/nuclear/nuclearbomb.dm
+++ b/code/game/gamemodes/nuclear/nuclearbomb.dm
@@ -80,7 +80,7 @@ var/bomb_set
if (istype(O, /obj/item/device/multitool) || istype(O, /obj/item/weapon/wirecutters))
ui_interact(user)
-
+
if (src.extended)
if (istype(O, /obj/item/weapon/disk/nuclear))
usr.drop_item()
@@ -159,8 +159,6 @@ var/bomb_set
return
..()
-/obj/machinery/nuclearbomb/attack_paw(mob/user as mob)
- return src.attack_hand(user)
/obj/machinery/nuclearbomb/attack_hand(mob/user as mob)
if (src.extended)
@@ -182,9 +180,9 @@ var/bomb_set
obj/machinery/nuclearbomb/proc/nukehack_win(mob/user as mob)
ui_interact(user)
-
+
/obj/machinery/nuclearbomb/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1)
- var/data[0]
+ var/data[0]
var/uiwidth
var/uiheight
var/uititle
@@ -197,12 +195,12 @@ obj/machinery/nuclearbomb/proc/nukehack_win(mob/user as mob)
else
data["authstatus"] = "Auth. S2"
else
- if (src.timing)
+ if (src.timing)
data["authstatus"] = "Set"
else
data["authstatus"] = "Auth. S1"
- data["safe"] = src.safety ? "Safe" : "Engaged"
- data["time"] = src.timeleft
+ data["safe"] = src.safety ? "Safe" : "Engaged"
+ data["time"] = src.timeleft
data["timer"] = src.timing
data["safety"] = src.safety
data["anchored"] = src.anchored
@@ -217,7 +215,7 @@ obj/machinery/nuclearbomb/proc/nukehack_win(mob/user as mob)
uititle = "Nuke Control Panel"
else
data["hacking"] = 1
- var/list/tempwires[0]
+ var/list/tempwires[0]
for(var/wire in src.wires)
tempwires.Add(list(list("name" = wire, "cut" = src.wires[wire])))
data["wires"] = tempwires
@@ -227,17 +225,17 @@ obj/machinery/nuclearbomb/proc/nukehack_win(mob/user as mob)
uiwidth = 420
uiheight = 440
uititle = "Nuclear Bomb Defusion"
- ui = nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open)
+ ui = nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open)
if (!ui)
ui = new(user, src, ui_key, "nuclear_bomb.tmpl", uititle, uiwidth, uiheight)
- ui.set_initial_data(data)
+ ui.set_initial_data(data)
ui.open()
/obj/machinery/nuclearbomb/verb/make_deployable()
set category = "Object"
set name = "Make Deployable"
set src in oview(1)
-
+
if(usr.stat || !usr.canmove || usr.restrained())
return
@@ -340,8 +338,8 @@ obj/machinery/nuclearbomb/proc/nukehack_win(mob/user as mob)
if (src.timing == -1.0)
return
if (src.safety)
- usr << "\red The safety is still on."
- nanomanager.update_uis(src)
+ usr << "\red The safety is still on."
+ nanomanager.update_uis(src)
return
src.timing = !( src.timing )
if (src.timing)
@@ -429,7 +427,7 @@ obj/machinery/nuclearbomb/proc/nukehack_win(mob/user as mob)
if(ticker.mode.name == "nuclear emergency")
ticker.mode:nukes_left --
else if(off_station == 1)
- world << "A nuclear device was set off, but the explosion was out of reach of the station!"
+ world << "A nuclear device was set off, but the explosion was out of reach of the station!"
else if(off_station == 2)
world << "A nuclear device was set off, but the device was not on the station!"
else
diff --git a/code/game/jobs/access.dm b/code/game/jobs/access.dm
index f6b34aef591..96fe8b41027 100644
--- a/code/game/jobs/access.dm
+++ b/code/game/jobs/access.dm
@@ -118,7 +118,7 @@
//if they are holding or wearing a card that has access, that works
if(src.check_access(H.get_active_hand()) || src.check_access(H.wear_id))
return 1
- else if(istype(M, /mob/living/carbon/monkey) || istype(M, /mob/living/carbon/alien/humanoid))
+ else if(istype(M, /mob/living/carbon/alien/humanoid))
var/mob/living/carbon/george = M
//they can only hold things :(
if(src.check_access(george.get_active_hand()))
@@ -211,14 +211,14 @@
if("Special Operations Officer")
return get_all_centcom_access() + get_all_accesses()
if("Nanotrasen Navy Representative")
- return get_all_centcom_access() + get_all_accesses()
+ return get_all_centcom_access() + get_all_accesses()
if("Nanotrasen Navy Officer")
return get_all_centcom_access() + get_all_accesses()
if("Nanotrasen Navy Captain")
return get_all_centcom_access() + get_all_accesses()
if("Supreme Commander")
return get_all_centcom_access() + get_all_accesses()
-
+
/proc/get_syndicate_access(job)
switch(job)
if("Syndicate Operative")
@@ -226,12 +226,12 @@
if("Syndicate Operative Leader")
return list(access_syndicate, access_syndicate_leader)
if("Vox Raider")
- return list(access_vox)
+ return list(access_vox)
if("Vox Trader")
- return list(access_vox)
+ return list(access_vox)
if("Syndicate Commando")
- return list(access_syndicate, access_syndicate_leader)
-
+ return list(access_syndicate, access_syndicate_leader)
+
/proc/get_all_accesses()
return list(access_security, access_sec_doors, access_brig, access_armory, access_forensics_lockers, access_court,
access_medical, access_genetics, access_morgue, access_rd,
@@ -470,7 +470,7 @@
return "Bridge"
if(access_cent_commander)
return "Commander"
-
+
/proc/get_syndicate_access_desc(A)
switch(A)
if(access_syndicate)
@@ -534,7 +534,7 @@
return assignment
return "Unknown"
-
+
proc/GetIdCard(var/mob/living/carbon/human/H)
if(H.wear_id)
var/id = H.wear_id.GetID()
diff --git a/code/game/machinery/Freezer.dm b/code/game/machinery/Freezer.dm
index 9c1bd3fdafc..3c9d02f0f2e 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."
@@ -239,9 +236,6 @@
/obj/machinery/atmospherics/unary/heat_reservoir/heater/attack_ai(mob/user as mob)
src.attack_hand(user)
-/obj/machinery/atmospherics/unary/heat_reservoir/heater/attack_paw(mob/user as mob)
- src.attack_hand(user)
-
/obj/machinery/atmospherics/unary/heat_reservoir/heater/attack_hand(mob/user as mob)
if(panel_open)
user << "Close the maintenance panel first."
diff --git a/code/game/machinery/OpTable.dm b/code/game/machinery/OpTable.dm
index 9cdbe1fd662..6369ed99eee 100644
--- a/code/game/machinery/OpTable.dm
+++ b/code/game/machinery/OpTable.dm
@@ -42,19 +42,6 @@
if(prob(75))
del(src)
-/obj/machinery/optable/attack_paw(mob/user as mob)
- if ((HULK in usr.mutations))
- usr << text("\blue You destroy the operating table.")
- visible_message("\red [usr] destroys the operating table!")
- src.density = 0
- del(src)
- if (!( locate(/obj/machinery/optable, user.loc) ))
- step(user, get_dir(user, src))
- if (user.loc == src.loc)
- user.layer = TURF_LAYER
- visible_message("The monkey hides under the table!")
- return
-
/obj/machinery/optable/attack_hand(mob/user as mob)
if (HULK in usr.mutations)
usr << text("\blue You destroy the table.")
@@ -75,13 +62,13 @@
/obj/machinery/optable/MouseDrop_T(atom/movable/O as mob|obj, mob/user as mob)
if(usr.stat || (!ishuman(user) && !isrobot(user)) || user.restrained() || !check_table(user) || user.weakened || user.stunned)
return
-
+
if(!ismob(O)) //humans only
return
-
+
if(istype(O, /mob/living/simple_animal) || istype(O, /mob/living/silicon)) //animals and robots dont fit
return
-
+
var/mob/living/L = O
take_victim(L,usr)
return
diff --git a/code/game/machinery/Sleeper.dm b/code/game/machinery/Sleeper.dm
index fcc080124cd..b4f60877a8a 100644
--- a/code/game/machinery/Sleeper.dm
+++ b/code/game/machinery/Sleeper.dm
@@ -101,9 +101,6 @@
/obj/machinery/sleep_console/attack_ai(mob/user as mob)
return src.attack_hand(user)
-/obj/machinery/sleep_console/attack_paw(mob/user as mob)
- return src.attack_hand(user)
-
/obj/machinery/sleep_console/attack_hand(mob/user as mob)
if(..())
return
@@ -577,7 +574,7 @@
set name = "Enter Sleeper"
set category = null
set src in oview(1)
- if(usr.stat != 0 || !(ishuman(usr) || ismonkey(usr)))
+ if(usr.stat != 0 || !(ishuman(usr)))
return
if(src.occupant)
usr << "\blue The sleeper is already occupied!"
diff --git a/code/game/machinery/adv_med.dm b/code/game/machinery/adv_med.dm
index d94b779d631..9f0a05974e3 100644
--- a/code/game/machinery/adv_med.dm
+++ b/code/game/machinery/adv_med.dm
@@ -340,8 +340,6 @@
default_deconstruction_crowbar(G)
-/obj/machinery/body_scanconsole/attack_paw(user as mob)
- return src.attack_hand(user)
/obj/machinery/body_scanconsole/attack_ai(user as mob)
return src.attack_hand(user)
diff --git a/code/game/machinery/alarm.dm b/code/game/machinery/alarm.dm
index 83381796495..b1fcd04cd08 100644
--- a/code/game/machinery/alarm.dm
+++ b/code/game/machinery/alarm.dm
@@ -1109,8 +1109,6 @@ FIRE ALARM
/obj/machinery/firealarm/bullet_act(BLAH)
return src.alarm()
-/obj/machinery/firealarm/attack_paw(mob/user as mob)
- return src.attack_hand(user)
/obj/machinery/firealarm/emp_act(severity)
if(prob(50/severity)) alarm()
@@ -1368,9 +1366,6 @@ Just a object used in constructing fire alarms
return
master_area=A
-/obj/machinery/partyalarm/attack_paw(mob/user as mob)
- return attack_hand(user)
-
/obj/machinery/partyalarm/attack_hand(mob/user as mob)
if((user.stat && !isobserver(user)) || stat & (NOPOWER|BROKEN))
return
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/atmoalter/canister.dm b/code/game/machinery/atmoalter/canister.dm
index 99782c1b022..29746472c85 100644
--- a/code/game/machinery/atmoalter/canister.dm
+++ b/code/game/machinery/atmoalter/canister.dm
@@ -376,9 +376,6 @@ update_flag
src.add_hiddenprint(user)
return src.attack_hand(user)
-/obj/machinery/portable_atmospherics/canister/attack_paw(var/mob/user as mob)
- return src.attack_hand(user)
-
/obj/machinery/portable_atmospherics/canister/attack_alien(mob/living/carbon/alien/humanoid/user)
return
diff --git a/code/game/machinery/atmoalter/pump.dm b/code/game/machinery/atmoalter/pump.dm
index aec5d82c346..e5b39164cc3 100644
--- a/code/game/machinery/atmoalter/pump.dm
+++ b/code/game/machinery/atmoalter/pump.dm
@@ -96,9 +96,6 @@
src.add_hiddenprint(user)
return src.attack_hand(user)
-/obj/machinery/portable_atmospherics/pump/attack_paw(var/mob/user as mob)
- return src.attack_hand(user)
-
/obj/machinery/portable_atmospherics/pump/attack_hand(var/mob/user as mob)
user.set_machine(src)
diff --git a/code/game/machinery/atmoalter/scrubber.dm b/code/game/machinery/atmoalter/scrubber.dm
index 4821ef4f15b..02abbe87d92 100644
--- a/code/game/machinery/atmoalter/scrubber.dm
+++ b/code/game/machinery/atmoalter/scrubber.dm
@@ -150,9 +150,6 @@
src.add_hiddenprint(user)
return src.attack_hand(user)
-/obj/machinery/portable_atmospherics/scrubber/attack_paw(var/mob/user as mob)
- return src.attack_hand(user)
-
/obj/machinery/portable_atmospherics/scrubber/attack_hand(var/mob/user as mob)
user.set_machine(src)
diff --git a/code/game/machinery/autolathe.dm b/code/game/machinery/autolathe.dm
index 6c13db51ad5..7392804f585 100644
--- a/code/game/machinery/autolathe.dm
+++ b/code/game/machinery/autolathe.dm
@@ -168,9 +168,6 @@
busy = 0
src.updateUsrDialog()
-/obj/machinery/autolathe/attack_paw(mob/user)
- return attack_hand(user)
-
/obj/machinery/autolathe/attack_hand(mob/user)
if(..(user, 0))
return
@@ -292,14 +289,14 @@
/obj/machinery/autolathe/proc/can_build(var/datum/design/D,var/multiplier=1,var/custom_metal,var/custom_glass)
var/coeff = get_coeff(D)
-
+
var/metal_amount = m_amount
if(custom_metal)
metal_amount = custom_metal
var/glass_amount = g_amount
if(custom_glass)
glass_amount = custom_glass
-
+
if(D.materials["$metal"] && (metal_amount < (multiplier*D.materials["$metal"] / coeff)))
return 0
if(D.materials["$glass"] && (glass_amount < (multiplier*D.materials["$glass"] / coeff)))
diff --git a/code/game/machinery/biogenerator.dm b/code/game/machinery/biogenerator.dm
index c7f0d27b6b2..ba519459ad1 100644
--- a/code/game/machinery/biogenerator.dm
+++ b/code/game/machinery/biogenerator.dm
@@ -291,9 +291,6 @@
if("jacket")
if (check_cost(500/efficiency)) return 0
else new/obj/item/clothing/suit/jacket/leather(src.loc)
- //if("monkey")
- // if (check_cost(500)) return 0
- // else new/mob/living/carbon/monkey(src.loc)
processing = 0
menustat = "complete"
update_icon()
diff --git a/code/game/machinery/bots/medbot.dm b/code/game/machinery/bots/medbot.dm
index a3bf925ece1..b228e8b5c0c 100644
--- a/code/game/machinery/bots/medbot.dm
+++ b/code/game/machinery/bots/medbot.dm
@@ -129,9 +129,6 @@
text_dehack = "You reset [name]'s reagent processor circuits."
text_dehack_fail = "[name] seems damaged and does not respond to reprogramming!"
-/obj/machinery/bot/medbot/attack_paw(mob/user as mob)
- return attack_hand(user)
-
/obj/machinery/bot/medbot/attack_hand(mob/user as mob)
. = ..()
if (.)
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/cloning.dm b/code/game/machinery/cloning.dm
index 2ae38331a7b..f3fd4eba26d 100644
--- a/code/game/machinery/cloning.dm
+++ b/code/game/machinery/cloning.dm
@@ -165,8 +165,7 @@
/obj/machinery/clonepod/attack_ai(mob/user as mob)
return attack_hand(user)
-/obj/machinery/clonepod/attack_paw(mob/user as mob)
- return attack_hand(user)
+
/obj/machinery/clonepod/attack_hand(mob/user as mob)
if ((isnull(src.occupant)) || (stat & NOPOWER))
return
diff --git a/code/game/machinery/computer/HolodeckControl.dm b/code/game/machinery/computer/HolodeckControl.dm
index 0143d6e4eeb..79af00f560d 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)
@@ -389,9 +387,6 @@
throwpass = 1 //You can throw objects over this, despite it's density.
-/obj/structure/table/holotable/attack_paw(mob/user as mob)
- return attack_hand(user)
-
/obj/structure/table/holotable/attack_alien(mob/user as mob) //Removed code for larva since it doesn't work. Previous code is now a larva ability. /N
return attack_hand(user)
@@ -572,10 +567,6 @@
user << "The station AI is not to interact with these devices"
return
-/obj/machinery/readybutton/attack_paw(mob/user as mob)
- user << "You are too primitive to use this device"
- return
-
/obj/machinery/readybutton/New()
..()
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/atmos_control.dm b/code/game/machinery/computer/atmos_control.dm
index bce0006f488..81545418638 100644
--- a/code/game/machinery/computer/atmos_control.dm
+++ b/code/game/machinery/computer/atmos_control.dm
@@ -19,9 +19,6 @@
src.add_hiddenprint(user)
return interact(user)
-/obj/machinery/computer/atmoscontrol/attack_paw(var/mob/user as mob)
- return interact(user)
-
/obj/machinery/computer/atmoscontrol/attack_hand(mob/user)
if(..())
return
@@ -64,7 +61,7 @@
alarm_list+=alarm
for(var/obj/machinery/alarm/alarm in sortAtom(alarm_list))
if(!is_in_filter(alarm.alarm_area.type))
- continue
+ continue
if(!alarm.remote_control)
continue
if(alarm.hidden)
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/card.dm b/code/game/machinery/computer/card.dm
index 6f7c803c359..6d07202395d 100644
--- a/code/game/machinery/computer/card.dm
+++ b/code/game/machinery/computer/card.dm
@@ -74,8 +74,6 @@
/obj/machinery/computer/card/attack_ai(var/mob/user as mob)
return attack_hand(user)
-/obj/machinery/computer/card/attack_paw(var/mob/user as mob)
- return attack_hand(user)
/obj/machinery/computer/card/attack_hand(mob/user as mob)
if(..()) return
diff --git a/code/game/machinery/computer/cloning.dm b/code/game/machinery/computer/cloning.dm
index d5d63057e37..d97d9701321 100644
--- a/code/game/machinery/computer/cloning.dm
+++ b/code/game/machinery/computer/cloning.dm
@@ -86,8 +86,6 @@
..()
return
-/obj/machinery/computer/cloning/attack_paw(mob/user as mob)
- return attack_hand(user)
/obj/machinery/computer/cloning/attack_ai(mob/user as mob)
return attack_hand(user)
diff --git a/code/game/machinery/computer/communications.dm b/code/game/machinery/computer/communications.dm
index f476181db78..66ee77fcf7d 100644
--- a/code/game/machinery/computer/communications.dm
+++ b/code/game/machinery/computer/communications.dm
@@ -256,9 +256,6 @@ var/shuttle_call/shuttle_calls[0]
/obj/machinery/computer/communications/attack_ai(var/mob/user as mob)
return src.attack_hand(user)
-/obj/machinery/computer/communications/attack_paw(var/mob/user as mob)
- return src.attack_hand(user)
-
/obj/machinery/computer/communications/attack_hand(var/mob/user as mob)
if(..(user))
diff --git a/code/game/machinery/computer/computer.dm b/code/game/machinery/computer/computer.dm
index 03eb5db3dab..c1ec8fb3ddf 100644
--- a/code/game/machinery/computer/computer.dm
+++ b/code/game/machinery/computer/computer.dm
@@ -141,20 +141,6 @@
src.attack_hand(user)
return
-/obj/machinery/computer/attack_paw(mob/living/user)
- user.changeNext_move(CLICK_CD_MELEE)
- user.do_attack_animation(src)
- if(circuit)
- if(prob(10))
- user.visible_message("[user.name] smashes the [src.name] with its paws.",\
- "You smash the [src.name] with your paws.",\
- "You hear a smashing sound.")
- set_broken()
- return
- user.visible_message("[user.name] smashes against the [src.name] with its paws.",\
- "You smash against the [src.name] with your paws.",\
- "You hear a clicking sound.")
-
/obj/machinery/computer/attack_alien(mob/living/user)
user.changeNext_move(CLICK_CD_MELEE)
user.do_attack_animation(src)
diff --git a/code/game/machinery/computer/medical.dm b/code/game/machinery/computer/medical.dm
index 1b094542a42..ab8a43b4973 100644
--- a/code/game/machinery/computer/medical.dm
+++ b/code/game/machinery/computer/medical.dm
@@ -21,8 +21,6 @@
/obj/machinery/computer/med_data/attack_ai(user as mob)
return src.attack_hand(user)
-/obj/machinery/computer/med_data/attack_paw(user as mob)
- return src.attack_hand(user)
/obj/machinery/computer/med_data/attack_hand(mob/user as mob)
if(..())
diff --git a/code/game/machinery/computer/pod.dm b/code/game/machinery/computer/pod.dm
index a813e8d63de..e8b160d26f9 100644
--- a/code/game/machinery/computer/pod.dm
+++ b/code/game/machinery/computer/pod.dm
@@ -120,10 +120,6 @@
return attack_hand(user)
-/obj/machinery/computer/pod/attack_paw(var/mob/user as mob)
- return attack_hand(user)
-
-
/obj/machinery/computer/pod/attack_hand(var/mob/user as mob)
if(..())
return
diff --git a/code/game/machinery/computer/pod_tracking_console.dm b/code/game/machinery/computer/pod_tracking_console.dm
index 5de9643fd7d..5e5a4b8df9c 100644
--- a/code/game/machinery/computer/pod_tracking_console.dm
+++ b/code/game/machinery/computer/pod_tracking_console.dm
@@ -9,9 +9,6 @@
/obj/machinery/computer/podtracker/attack_ai(var/mob/user as mob)
return src.attack_hand(user)
-/obj/machinery/computer/podtracker/attack_paw(var/mob/user as mob)
- return src.attack_hand(user)
-
/obj/machinery/computer/podtracker/attack_hand(var/mob/user as mob)
if(..())
return
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/computer/prisonshuttle.dm b/code/game/machinery/computer/prisonshuttle.dm
index a19bc96211d..4e8ad7498f0 100644
--- a/code/game/machinery/computer/prisonshuttle.dm
+++ b/code/game/machinery/computer/prisonshuttle.dm
@@ -31,9 +31,6 @@ var/prison_shuttle_timeleft = 0
return src.attack_hand(user)
- attack_paw(var/mob/user as mob)
- return src.attack_hand(user)
-
attackby(I as obj, user as mob, params)
if(istype(I, /obj/item/weapon/screwdriver))
diff --git a/code/game/machinery/computer/salvage_ship.dm b/code/game/machinery/computer/salvage_ship.dm
index 5e0feda0c20..9c2e2b853c4 100644
--- a/code/game/machinery/computer/salvage_ship.dm
+++ b/code/game/machinery/computer/salvage_ship.dm
@@ -43,9 +43,6 @@
src.add_hiddenprint(user)
return attack_hand(user)
-/obj/machinery/computer/salvage_ship/attack_paw(mob/user as mob)
- return attack_hand(user)
-
/obj/machinery/computer/salvage_ship/attack_hand(mob/user as mob)
if(!allowed(user))
user << "\red Access Denied"
diff --git a/code/game/machinery/computer/security.dm b/code/game/machinery/computer/security.dm
index 4432de9d1cf..b7e009730e5 100644
--- a/code/game/machinery/computer/security.dm
+++ b/code/game/machinery/computer/security.dm
@@ -36,9 +36,6 @@
/obj/machinery/computer/secure_data/attack_ai(mob/user as mob)
return attack_hand(user)
-/obj/machinery/computer/secure_data/attack_paw(mob/user as mob)
- return attack_hand(user)
-
//Someone needs to break down the dat += into chunks instead of long ass lines.
/obj/machinery/computer/secure_data/attack_hand(mob/user as mob)
if(..())
diff --git a/code/game/machinery/computer/skills.dm b/code/game/machinery/computer/skills.dm
index 1717a25a92e..21f10e359fc 100644
--- a/code/game/machinery/computer/skills.dm
+++ b/code/game/machinery/computer/skills.dm
@@ -34,9 +34,6 @@
/obj/machinery/computer/skills/attack_ai(mob/user as mob)
return attack_hand(user)
-/obj/machinery/computer/skills/attack_paw(mob/user as mob)
- return attack_hand(user)
-
//Someone needs to break down the dat += into chunks instead of long ass lines.
/obj/machinery/computer/skills/attack_hand(mob/user as mob)
if(..())
diff --git a/code/game/machinery/computer/specops_shuttle.dm b/code/game/machinery/computer/specops_shuttle.dm
index 3f92848f4cd..4c765ecc1b3 100644
--- a/code/game/machinery/computer/specops_shuttle.dm
+++ b/code/game/machinery/computer/specops_shuttle.dm
@@ -250,9 +250,6 @@ var/specops_shuttle_timeleft = 0
user << "\red Access Denied."
return 1
-/obj/machinery/computer/specops_shuttle/attack_paw(var/mob/user as mob)
- return attack_hand(user)
-
/obj/machinery/computer/specops_shuttle/attackby(I as obj, user as mob, params)
if(istype(I,/obj/item/weapon/card/emag))
user << "\blue The electronic systems in this console are far too advanced for your primitive hacking peripherals."
diff --git a/code/game/machinery/computer/store.dm b/code/game/machinery/computer/store.dm
index 6578eaf8673..2950ca87f11 100644
--- a/code/game/machinery/computer/store.dm
+++ b/code/game/machinery/computer/store.dm
@@ -13,8 +13,6 @@
/obj/machinery/computer/merch/New()
..()
-/obj/machinery/computer/merch/attack_paw(mob/user as mob)
- return attack_hand(user)
/obj/machinery/computer/merch/attack_ai(mob/user as mob)
src.add_hiddenprint(user)
diff --git a/code/game/machinery/computer/syndicate_specops_shuttle.dm b/code/game/machinery/computer/syndicate_specops_shuttle.dm
index 45455b9c663..5ddc7fcaf13 100644
--- a/code/game/machinery/computer/syndicate_specops_shuttle.dm
+++ b/code/game/machinery/computer/syndicate_specops_shuttle.dm
@@ -184,9 +184,6 @@ var/syndicate_elite_shuttle_timeleft = 0
user << "\red Access Denied."
return 1
-/obj/machinery/computer/syndicate_elite_shuttle/attack_paw(var/mob/user as mob)
- return attack_hand(user)
-
/obj/machinery/computer/syndicate_elite_shuttle/attackby(I as obj, user as mob, params)
if(istype(I,/obj/item/weapon/card/emag))
user << "\blue The electronic systems in this console are far too advanced for your primitive hacking peripherals."
diff --git a/code/game/machinery/computer/xenos_shuttle.dm b/code/game/machinery/computer/xenos_shuttle.dm
index 343c2717b76..0577b0aca7d 100644
--- a/code/game/machinery/computer/xenos_shuttle.dm
+++ b/code/game/machinery/computer/xenos_shuttle.dm
@@ -24,11 +24,11 @@
moving = 1
lastMove = world.time
-
+
for(var/obj/machinery/door/airlock/alien/A in world)
A.close()
A.locked = 1
- A.update_icon()
+ A.update_icon()
for(var/mob/M in curr_location)
if(M.client)
@@ -41,20 +41,20 @@
shake_camera(M, 10, 1)
if(istype(M, /mob/living/carbon) && !isalien(M))
if(!M.buckled)
- M.Weaken(3)
-
+ M.Weaken(3)
+
if(curr_location.z != dest_location.z)
var/area/transit_location = locate(/area/xenos_station/transit)
curr_location.move_contents_to(transit_location)
curr_location = transit_location
sleep(XENOS_SHUTTLE_MOVE_TIME)
-
+
for(var/obj/machinery/door/airlock/alien/A in world)
A.close()
- if(dest_location != locate(/area/xenos_station/start))
+ if(dest_location != locate(/area/xenos_station/start))
A.locked = 0
- A.update_icon()
-
+ A.update_icon()
+
var/list/dstturfs = list()
var/throwy = world.maxy
@@ -78,7 +78,7 @@
for(var/mob/living/simple_animal/pest in dest_location) // And for the other kind of bug...
pest.gib()
-
+
curr_location.move_contents_to(dest_location)
curr_location = dest_location
moving = 0
@@ -91,9 +91,6 @@
/obj/machinery/computer/xenos_station/attack_ai(mob/user as mob)
return attack_hand(user)
-/obj/machinery/computer/xenos_station/attack_paw(mob/user as mob)
- return attack_hand(user)
-
/obj/machinery/computer/xenos_station/attack_alien(mob/user as mob)
return attack_hand(user)
@@ -101,7 +98,7 @@
if(!allowed(user))
user << "\red Access denied."
return
-
+
if(!isalien(user) && !isrobot(user) && !isAI(user))
user << "You do not know how to operate this terminal."
return
@@ -128,7 +125,7 @@
/obj/machinery/computer/xenos_station/Topic(href, href_list)
if(..())
return 1
-
+
if(!isliving(usr)) return
var/mob/living/user = usr
@@ -142,7 +139,7 @@
else if(href_list["station_ne"])
xenos_move_to(/area/xenos_station/northeast)
else if(href_list["station_e"])
- xenos_move_to(/area/xenos_station/east)
+ xenos_move_to(/area/xenos_station/east)
else if(href_list["station_sw"])
xenos_move_to(/area/xenos_station/southwest)
else if(href_list["station_se"])
diff --git a/code/game/machinery/cryopod.dm b/code/game/machinery/cryopod.dm
index 30db6a7d225..14a461474e1 100644
--- a/code/game/machinery/cryopod.dm
+++ b/code/game/machinery/cryopod.dm
@@ -174,7 +174,7 @@
var/on_store_message = "has entered long-term storage."
var/on_store_name = "Cryogenic Oversight"
var/on_enter_occupant_message = "You feel cool air surround you. You go numb as your senses turn inward."
- var/allow_occupant_types = list(/mob/living/carbon/human, /mob/living/carbon/monkey)
+ var/allow_occupant_types = list(/mob/living/carbon/human)
var/disallow_occupant_types = list()
var/mob/living/occupant = null // Person waiting to be despawned.
diff --git a/code/game/machinery/door_control.dm b/code/game/machinery/door_control.dm
index acd88137ebb..e469e358d2e 100644
--- a/code/game/machinery/door_control.dm
+++ b/code/game/machinery/door_control.dm
@@ -37,9 +37,6 @@
else
user << "Error, no route to host."
-/obj/machinery/door_control/attack_paw(mob/user as mob)
- return src.attack_hand(user)
-
/obj/machinery/door_control/attackby(obj/item/weapon/W, mob/user as mob, params)
/* For later implementation
if (istype(W, /obj/item/weapon/screwdriver))
@@ -140,9 +137,6 @@
/obj/machinery/driver_button/attack_ai(mob/user as mob)
return src.attack_hand(user)
-/obj/machinery/driver_button/attack_paw(mob/user as mob)
- return src.attack_hand(user)
-
/obj/machinery/driver_button/attackby(obj/item/weapon/W, mob/user as mob, params)
if(istype(W, /obj/item/device/detective_scanner))
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..c9422a930b2 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,9 +284,6 @@
L.adjustBruteLoss(DOOR_CRUSH_DAMAGE)
L.emote("scream")
L.Weaken(5)
- else if(ismonkey(L)) //For monkeys
- L.adjustBruteLoss(DOOR_CRUSH_DAMAGE)
- L.Weaken(5)
else //for simple_animals & borgs
L.adjustBruteLoss(DOOR_CRUSH_DAMAGE)
var/turf/location = src.loc
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/embedded_controller/embedded_controller_base.dm b/code/game/machinery/embedded_controller/embedded_controller_base.dm
index ec411753803..535e4cbd826 100644
--- a/code/game/machinery/embedded_controller/embedded_controller_base.dm
+++ b/code/game/machinery/embedded_controller/embedded_controller_base.dm
@@ -3,7 +3,7 @@
name = "Embedded Controller"
anchored = 1
-
+
use_power = 1
idle_power_usage = 10
@@ -29,11 +29,9 @@
/obj/machinery/embedded_controller/attack_ai(mob/user as mob)
src.ui_interact(user)
-/obj/machinery/embedded_controller/attack_paw(mob/user as mob)
- user << "You do not have the dexterity to use this."
- return
-
/obj/machinery/embedded_controller/attack_hand(mob/user as mob)
+ if(!user.IsAdvancedToolUser())
+ return 0
src.ui_interact(user)
/obj/machinery/embedded_controller/ui_interact()
@@ -44,7 +42,7 @@
icon_state = "airlock_control_standby"
power_channel = ENVIRON
density = 0
-
+
var/id_tag
//var/radio_power_use = 50 //power used to xmit signals
diff --git a/code/game/machinery/flasher.dm b/code/game/machinery/flasher.dm
index 2c2458df37b..5322c3da301 100644
--- a/code/game/machinery/flasher.dm
+++ b/code/game/machinery/flasher.dm
@@ -123,9 +123,6 @@
/obj/machinery/flasher_button/attack_ai(mob/user as mob)
return src.attack_hand(user)
-/obj/machinery/flasher_button/attack_paw(mob/user as mob)
- return src.attack_hand(user)
-
/obj/machinery/flasher_button/attackby(obj/item/weapon/W, mob/user as mob, params)
return src.attack_hand(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/holosign.dm b/code/game/machinery/holosign.dm
index cd1e5a85e62..687a07ced0f 100644
--- a/code/game/machinery/holosign.dm
+++ b/code/game/machinery/holosign.dm
@@ -46,9 +46,6 @@
/obj/machinery/holosign_switch/attack_ai(mob/user as mob)
return src.attack_hand(user)
-/
-obj/machinery/holosign_switch/attack_paw(mob/user as mob)
- return src.attack_hand(user)
/obj/machinery/holosign_switch/attackby(obj/item/weapon/W, mob/user as mob, params)
if(istype(W, /obj/item/device/detective_scanner))
diff --git a/code/game/machinery/igniter.dm b/code/game/machinery/igniter.dm
index 598d448d746..434c4d17336 100755
--- a/code/game/machinery/igniter.dm
+++ b/code/game/machinery/igniter.dm
@@ -13,10 +13,6 @@
/obj/machinery/igniter/attack_ai(mob/user as mob)
return src.attack_hand(user)
-/obj/machinery/igniter/attack_paw(mob/user as mob)
- if ((ticker && ticker.mode.name == "monkey"))
- return src.attack_hand(user)
- return
/obj/machinery/igniter/attack_hand(mob/user as mob)
if(..())
@@ -122,9 +118,6 @@
/obj/machinery/ignition_switch/attack_ai(mob/user as mob)
return src.attack_hand(user)
-/obj/machinery/ignition_switch/attack_paw(mob/user as mob)
- return src.attack_hand(user)
-
/obj/machinery/ignition_switch/attackby(obj/item/weapon/W, mob/user as mob, params)
return src.attack_hand(user)
diff --git a/code/game/machinery/kitchen/gibber.dm b/code/game/machinery/kitchen/gibber.dm
index e815ffc3257..00da3c157d7 100644
--- a/code/game/machinery/kitchen/gibber.dm
+++ b/code/game/machinery/kitchen/gibber.dm
@@ -164,9 +164,6 @@
else
src.overlays += image('icons/obj/kitchen.dmi', "gridle")
-/obj/machinery/gibber/attack_paw(mob/user as mob)
- return src.attack_hand(user)
-
/obj/machinery/gibber/relaymove(mob/user as mob)
if(locked)
return
diff --git a/code/game/machinery/kitchen/juicer.dm b/code/game/machinery/kitchen/juicer.dm
index bf963ea3c0d..2df46989506 100644
--- a/code/game/machinery/kitchen/juicer.dm
+++ b/code/game/machinery/kitchen/juicer.dm
@@ -60,9 +60,6 @@
src.updateUsrDialog()
return 0
-/obj/machinery/juicer/attack_paw(mob/user as mob)
- return src.attack_hand(user)
-
/obj/machinery/juicer/attack_ai(mob/user as mob)
return 0
diff --git a/code/game/machinery/kitchen/microwave.dm b/code/game/machinery/kitchen/microwave.dm
index 1fba31f1da9..dc4e21f9296 100644
--- a/code/game/machinery/kitchen/microwave.dm
+++ b/code/game/machinery/kitchen/microwave.dm
@@ -183,9 +183,6 @@
return 1
src.updateUsrDialog()
-/obj/machinery/microwave/attack_paw(mob/user as mob)
- return src.attack_hand(user)
-
/obj/machinery/microwave/attack_ai(mob/user as mob)
return 0
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/kitchen/smartfridge.dm b/code/game/machinery/kitchen/smartfridge.dm
index 523f52bdff2..d1354d17c9d 100644
--- a/code/game/machinery/kitchen/smartfridge.dm
+++ b/code/game/machinery/kitchen/smartfridge.dm
@@ -133,9 +133,6 @@
updateUsrDialog()
-/obj/machinery/smartfridge/attack_paw(mob/user as mob)
- return attack_hand(user)
-
/obj/machinery/smartfridge/attack_ai(mob/user as mob)
return 0
diff --git a/code/game/machinery/lightswitch.dm b/code/game/machinery/lightswitch.dm
index 666c49c3e8d..2edd028bde1 100644
--- a/code/game/machinery/lightswitch.dm
+++ b/code/game/machinery/lightswitch.dm
@@ -43,9 +43,6 @@
usr << "A light switch. It is [on? "on" : "off"]."
-/obj/machinery/light_switch/attack_paw(mob/user)
- src.attack_hand(user)
-
/obj/machinery/light_switch/attack_hand(mob/user)
on = !on
diff --git a/code/game/machinery/machinery.dm b/code/game/machinery/machinery.dm
index 367e31f7ac6..9651d57e461 100644
--- a/code/game/machinery/machinery.dm
+++ b/code/game/machinery/machinery.dm
@@ -322,17 +322,13 @@ Class Procs:
else
return src.attack_hand(user)
-/obj/machinery/attack_paw(mob/user as mob)
- return src.attack_hand(user)
-
/obj/machinery/attack_hand(mob/user as mob)
if(!interact_offline && stat & (NOPOWER|BROKEN|MAINT))
return 1
if(user.lying || user.stat)
return 1
if ( ! (istype(usr, /mob/living/carbon/human) || \
- istype(usr, /mob/living/silicon) || \
- istype(usr, /mob/living/carbon/monkey) && ticker && ticker.mode.name == "monkey") )
+ istype(usr, /mob/living/silicon)))
usr << "\red You don't have the dexterity to do this!"
return 1
/*
diff --git a/code/game/machinery/navbeacon.dm b/code/game/machinery/navbeacon.dm
index a8f39a4597e..8ce8273a526 100644
--- a/code/game/machinery/navbeacon.dm
+++ b/code/game/machinery/navbeacon.dm
@@ -128,10 +128,10 @@
/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)
+ if(!user.IsAdvancedToolUser())
+ return 0
interact(user, 0)
/obj/machinery/navbeacon/interact(var/mob/user, var/ai = 0)
diff --git a/code/game/machinery/newscaster.dm b/code/game/machinery/newscaster.dm
index bb5c005550a..9aa87881287 100644
--- a/code/game/machinery/newscaster.dm
+++ b/code/game/machinery/newscaster.dm
@@ -180,6 +180,10 @@ var/list/obj/machinery/newscaster/allCasters = list() //Global list that will co
/obj/machinery/newscaster/attack_hand(mob/user as mob) //########### THE MAIN BEEF IS HERE! And in the proc below this...############
if(!src.ispowered || src.isbroken)
return
+
+ if(!user.IsAdvancedToolUser())
+ return 0
+
if(istype(user, /mob/living/carbon/human) || istype(user,/mob/living/silicon) )
var/mob/living/human_or_robot_user = user
var/dat
@@ -744,10 +748,6 @@ var/list/obj/machinery/newscaster/allCasters = list() //Global list that will co
return src.attack_hand(user) //or maybe it'll have some special functions? No idea.
-/obj/machinery/newscaster/attack_paw(mob/user as mob)
- user << "The newscaster controls are far too complicated for your tiny brain!"
- return
-
/obj/machinery/newscaster/proc/AttachPhoto(mob/user as mob)
if(photo)
if(!issilicon(user))
diff --git a/code/game/machinery/pipe/pipe_dispenser.dm b/code/game/machinery/pipe/pipe_dispenser.dm
index d7b47e15aeb..43050cab6ae 100644
--- a/code/game/machinery/pipe/pipe_dispenser.dm
+++ b/code/game/machinery/pipe/pipe_dispenser.dm
@@ -7,9 +7,6 @@
var/unwrenched = 0
var/wait = 0
-/obj/machinery/pipedispenser/attack_paw(user as mob)
- return src.attack_hand(user)
-
/obj/machinery/pipedispenser/attack_hand(user as mob)
if(..())
return
diff --git a/code/game/machinery/portable_turret.dm b/code/game/machinery/portable_turret.dm
index 196850255eb..4458f560715 100644
--- a/code/game/machinery/portable_turret.dm
+++ b/code/game/machinery/portable_turret.dm
@@ -128,7 +128,7 @@
eprojectile = /obj/item/projectile/beam //If it has, going to kill mode
eshot_sound = 'sound/weapons/Laser.ogg'
egun = 1
-
+
if(/obj/item/weapon/gun/energy/gun/turret)
eprojectile = /obj/item/projectile/beam //If it has, going to copypaste mode
eshot_sound = 'sound/weapons/Laser.ogg'
@@ -210,7 +210,7 @@
/obj/machinery/porta_turret/proc/HasController()
var/area/A = get_area(src)
return A && A.turret_controls.len > 0
-
+
/obj/machinery/porta_turret/CanUseTopic(var/mob/user)
if(HasController())
user << "Turrets can only be controlled using the assigned turret controller."
@@ -336,9 +336,9 @@
spawn()
sleep(60)
attacked = 0
-
+
..()
-
+
/obj/machinery/porta_turret/emag_act(user as mob)
if(!emagged)
//Emagging the turret makes it go bonkers and stun everyone. It also makes
@@ -450,8 +450,8 @@
assess_and_assign(ME.occupant, targets, secondarytargets)
for(var/obj/spacepod/SP in view(7,src))
- assess_and_assign(SP.occupant, targets, secondarytargets)
-
+ assess_and_assign(SP.occupant, targets, secondarytargets)
+
for(var/obj/vehicle/train/T in view(7,src))
assess_and_assign(T.load, targets, secondarytargets)
@@ -502,7 +502,7 @@
if(iscuffed(L)) // If the target is handcuffed, leave it alone
return TURRET_NOT_TARGET
- if(isanimal(L) || ismonkey(L)) // Animals are not so dangerous
+ if(isanimal(L) || issmall(L)) // Animals are not so dangerous
return check_anomalies ? TURRET_SECONDARY_TARGET : TURRET_NOT_TARGET
if(isalien(L)) // Xenos are dangerous
return check_anomalies ? TURRET_PRIORITY_TARGET : TURRET_NOT_TARGET
@@ -524,8 +524,8 @@
var/mob/living/M = pick(targets)
targets -= M
if(target(M))
- return 1
-
+ return 1
+
/obj/machinery/porta_turret/proc/popUp() //pops the turret up
if(disabled)
return
@@ -562,7 +562,7 @@
raised = 0
invisibility = INVISIBILITY_LEVEL_TWO
update_icon()
-
+
/obj/machinery/porta_turret/on_assess_perp(mob/living/carbon/human/perp)
if((check_access || attacked) && !allowed(perp))
//if the turret has been attacked or is angry, target all non-authorized personnel, see req_access
@@ -616,8 +616,8 @@
// Lethal/emagged turrets use twice the power due to higher energy beams
// Emagged turrets again use twice as much power due to higher firing rates
- use_power(reqpower * (2 * (emagged || lethal)) * (2 * emagged))
-
+ use_power(reqpower * (2 * (emagged || lethal)) * (2 * emagged))
+
//Shooting Code:
A.current = T
A.yo = U.y - T.y
diff --git a/code/game/machinery/recharger.dm b/code/game/machinery/recharger.dm
index 944aa0ee312..4ff221e58f5 100644
--- a/code/game/machinery/recharger.dm
+++ b/code/game/machinery/recharger.dm
@@ -60,9 +60,6 @@
use_power = 1
update_icon()
-/obj/machinery/recharger/attack_paw(mob/user as mob)
- return attack_hand(user)
-
/obj/machinery/recharger/process()
if(stat & (NOPOWER|BROKEN) || !anchored)
return
diff --git a/code/game/machinery/robot_fabricator.dm b/code/game/machinery/robot_fabricator.dm
index 504f7ef8956..4465fdccf81 100644
--- a/code/game/machinery/robot_fabricator.dm
+++ b/code/game/machinery/robot_fabricator.dm
@@ -40,9 +40,6 @@
else
stat |= NOPOWER
-/obj/machinery/robotic_fabricator/attack_paw(user as mob)
- return src.attack_hand(user)
-
/obj/machinery/robotic_fabricator/attack_hand(user as mob)
var/dat
if (..())
diff --git a/code/game/machinery/suit_storage_unit.dm b/code/game/machinery/suit_storage_unit.dm
index 957111ea9d4..4017d1f3be1 100644
--- a/code/game/machinery/suit_storage_unit.dm
+++ b/code/game/machinery/suit_storage_unit.dm
@@ -96,6 +96,8 @@
return
if(stat & NOPOWER)
return
+ if(!user.IsAdvancedToolUser())
+ return 0
if(src.panelopen) //The maintenance panel is open. Time for some shady stuff
dat+= "
Suit storage unit: Maintenance panel"
dat+= "Maintenance panel controls
"
@@ -562,10 +564,6 @@
return src.attack_hand(user)
-/obj/machinery/suit_storage_unit/attack_paw(mob/user as mob)
- user << "The console controls are far too complicated for your tiny brain!"
- return
-
//////////////////////////////REMINDER: Make it lock once you place some fucker inside.
@@ -627,10 +625,6 @@
/obj/machinery/suit_cycler/attack_ai(mob/user as mob)
return src.attack_hand(user)
-/obj/machinery/suit_cycler/attack_paw(mob/user as mob)
- user << "\blue The console controls are far too complicated for your tiny brain!"
- return
-
/obj/machinery/suit_cycler/attackby(obj/item/I as obj, mob/user as mob, params)
if(electrified != 0)
@@ -751,6 +745,9 @@
if(..() || stat & (BROKEN|NOPOWER))
return
+ if(!user.IsAdvancedToolUser())
+ return 0
+
if(electrified != 0)
if(src.shock(user, 100))
return
diff --git a/code/game/machinery/telecomms/logbrowser.dm b/code/game/machinery/telecomms/logbrowser.dm
index 36b74f897a6..9708dbf3304 100644
--- a/code/game/machinery/telecomms/logbrowser.dm
+++ b/code/game/machinery/telecomms/logbrowser.dm
@@ -82,7 +82,7 @@
race = "[H.species.name]"
- else if(ismonkey(M))
+ else if(issmall(M))
race = "Monkey"
language = race
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/machinery/vending.dm b/code/game/machinery/vending.dm
index 7b69d8fdee2..c472711e159 100644
--- a/code/game/machinery/vending.dm
+++ b/code/game/machinery/vending.dm
@@ -394,9 +394,6 @@
/obj/machinery/vending/attack_ai(mob/user as mob)
return attack_hand(user)
-/obj/machinery/vending/attack_paw(mob/user as mob)
- return attack_hand(user)
-
/obj/machinery/vending/attack_hand(mob/user as mob)
if(stat & (BROKEN|NOPOWER))
return
diff --git a/code/game/mecha/mecha.dm b/code/game/mecha/mecha.dm
index 356936dbe81..a4832793c7e 100644
--- a/code/game/mecha/mecha.dm
+++ b/code/game/mecha/mecha.dm
@@ -524,9 +524,6 @@
src.log_append_to_last("Armor saved.")
return
-/obj/mecha/attack_paw(mob/living/user as mob)
- return src.attack_hand(user)
-
/obj/mecha/attack_alien(mob/living/user as mob)
src.log_message("Attack by alien. Attacker - [user].",1)
diff --git a/code/game/mecha/mecha_control_console.dm b/code/game/mecha/mecha_control_console.dm
index c4965210c95..f88992671ca 100644
--- a/code/game/mecha/mecha_control_console.dm
+++ b/code/game/mecha/mecha_control_console.dm
@@ -12,9 +12,6 @@
attack_ai(var/mob/user as mob)
return src.attack_hand(user)
- attack_paw(var/mob/user as mob)
- return src.attack_hand(user)
-
attack_hand(var/mob/user as mob)
if(..())
return
diff --git a/code/game/objects/effects/aliens.dm b/code/game/objects/effects/aliens.dm
index 82886f9f7c5..cac20a32362 100644
--- a/code/game/objects/effects/aliens.dm
+++ b/code/game/objects/effects/aliens.dm
@@ -119,10 +119,6 @@
healthcheck()
-/obj/structure/alien/resin/attack_paw(mob/user)
- return attack_hand(user)
-
-
/obj/structure/alien/resin/attack_alien(mob/living/user)
user.changeNext_move(CLICK_CD_MELEE)
user.do_attack_animation(src)
@@ -314,7 +310,7 @@
Grow()
-/obj/structure/alien/egg/attack_paw(mob/user)
+/obj/structure/alien/egg/attack_alien(mob/user)
if(isalien(user))
switch(status)
if(BURST)
diff --git a/code/game/objects/effects/effect_system.dm b/code/game/objects/effects/effect_system.dm
index b73c5bf8f1f..cf41bb42fd0 100644
--- a/code/game/objects/effects/effect_system.dm
+++ b/code/game/objects/effects/effect_system.dm
@@ -1105,10 +1105,6 @@ steam.start() -- spawns the effect
if(metal==1 || prob(50))
del(src)
- attack_paw(var/mob/user)
- attack_hand(user)
- return
-
attack_hand(var/mob/user)
if ((HULK in user.mutations) || (prob(75 - metal*25)))
user << "\blue You smash through the metal foam wall."
diff --git a/code/game/objects/effects/mines.dm b/code/game/objects/effects/mines.dm
index 9ca78dd7f30..dbb891ca337 100644
--- a/code/game/objects/effects/mines.dm
+++ b/code/game/objects/effects/mines.dm
@@ -19,7 +19,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/game/objects/items.dm b/code/game/objects/items.dm
index f73a366ea94..2121cae8c43 100644
--- a/code/game/objects/items.dm
+++ b/code/game/objects/items.dm
@@ -165,7 +165,7 @@
return 1
-/obj/item/attack_paw(mob/user as mob)
+/obj/item/attack_alien(mob/user as mob)
if(isalien(user)) // -- TLE
var/mob/living/carbon/alien/A = user
@@ -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))
@@ -494,34 +494,6 @@
return 0 //Unsupported slot
//END HUMAN
- else if(ismonkey(M))
- //START MONKEY
- var/mob/living/carbon/monkey/MO = M
- switch(slot)
- if(slot_l_hand)
- if(MO.l_hand)
- return 0
- return 1
- if(slot_r_hand)
- if(MO.r_hand)
- return 0
- return 1
- if(slot_wear_mask)
- if(MO.wear_mask)
- return 0
- if( !(slot_flags & SLOT_MASK) )
- return 0
- return 1
- if(slot_back)
- if(MO.back)
- return 0
- if( !(slot_flags & SLOT_BACK) )
- return 0
- return 1
- return 0 //Unsupported slot
-
- //END MONKEY
-
/obj/item/verb/verb_pickup()
set src in oview(1)
@@ -586,14 +558,6 @@
user << "\red You're going to need to remove that mask/helmet/glasses first."
return
- var/mob/living/carbon/monkey/Mo = M
- if(istype(Mo) && ( \
- (Mo.wear_mask && Mo.wear_mask.flags & MASKCOVERSEYES) \
- ))
- // you can't stab someone in the eyes wearing a mask!
- user << "\red You're going to need to remove that mask/helmet/glasses first."
- return
-
if(istype(M, /mob/living/carbon/alien) || istype(M, /mob/living/carbon/slime))//Aliens don't have eyes./N slimes also don't have eyes!
user << "\red You cannot locate any eyes on this creature!"
return
diff --git a/code/game/objects/items/devices/PDA/PDA.dm b/code/game/objects/items/devices/PDA/PDA.dm
index 281232f23a4..e31bfc79996 100755
--- a/code/game/objects/items/devices/PDA/PDA.dm
+++ b/code/game/objects/items/devices/PDA/PDA.dm
@@ -1134,9 +1134,6 @@ var/global/list/obj/item/device/pda/PDAs = list()
JFLOG("[user] used the fingerprint scanner on [C]")
if (!istype(C:dna, /datum/dna))
user << "\blue No fingerprints found on [C]"
- else if(!istype(C, /mob/living/carbon/monkey))
- if(!isnull(C:gloves))
- user << "\blue No fingerprints found on [C]"
else
user << text("\blue [C]'s Fingerprints: [md5(C:dna.uni_identity)]")
if ( !(C:blood_DNA) )
diff --git a/code/game/objects/items/devices/flashlight.dm b/code/game/objects/items/devices/flashlight.dm
index 91e264715b0..8e6216e0417 100644
--- a/code/game/objects/items/devices/flashlight.dm
+++ b/code/game/objects/items/devices/flashlight.dm
@@ -68,7 +68,7 @@
user.visible_message("[user] directs [src] to [M]'s eyes.", \
"You direct [src] to [M]'s eyes.")
- if(istype(M, /mob/living/carbon/human) || istype(M, /mob/living/carbon/monkey)) //robots and aliens are unaffected
+ if(istype(M, /mob/living/carbon/human)) //robots and aliens are unaffected
if(M.stat == DEAD || M.sdisabilities & BLIND) //mob is dead or fully blind
user << "[M] pupils does not react to the light!"
else if(XRAY in M.mutations) //mob has X-RAY vision
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/devices/radio/intercom.dm b/code/game/objects/items/devices/radio/intercom.dm
index a76d8c1cdeb..48adb04c988 100644
--- a/code/game/objects/items/devices/radio/intercom.dm
+++ b/code/game/objects/items/devices/radio/intercom.dm
@@ -40,9 +40,6 @@
spawn (0)
attack_self(user)
-/obj/item/device/radio/intercom/attack_paw(mob/user as mob)
- return attack_hand(user)
-
/obj/item/device/radio/intercom/attack_hand(mob/user as mob)
add_fingerprint(user)
spawn (0)
diff --git a/code/game/objects/items/policetape.dm b/code/game/objects/items/policetape.dm
index b9d21b36934..95430e24238 100644
--- a/code/game/objects/items/policetape.dm
+++ b/code/game/objects/items/policetape.dm
@@ -172,9 +172,6 @@ var/list/tape_roll_applications = list()
else
breaktape(/obj/item/weapon/soap, user)//cant be null, and can't be sharp.
-/obj/item/tape/attack_paw(mob/user as mob)
- breaktape(/obj/item/weapon/wirecutters,user)
-
/obj/item/tape/attack_alien(mob/user as mob)
breaktape(/obj/item/weapon/wirecutters,user)
diff --git a/code/game/objects/items/stacks/medical.dm b/code/game/objects/items/stacks/medical.dm
index 61e24b5932c..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) || istype(user, /mob/living/carbon/monkey) && ticker && ticker.mode.name == "monkey"))
+ 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/dna_injector.dm b/code/game/objects/items/weapons/dna_injector.dm
index 19dc7b0850e..7c92cdc2249 100644
--- a/code/game/objects/items/weapons/dna_injector.dm
+++ b/code/game/objects/items/weapons/dna_injector.dm
@@ -26,9 +26,6 @@
buf.dna.ResetSE()
SetValue(value)
-/obj/item/weapon/dnainjector/attack_paw(mob/user as mob)
- return attack_hand(user)
-
/obj/item/weapon/dnainjector/proc/GetRealBlock(var/selblock)
if(selblock==0)
return block
@@ -102,8 +99,7 @@
var/mob/living/carbon/human/H = M
if(H.species.flags & IS_SYNTHETIC)
return
- if (!(istype(usr, /mob/living/carbon/human) || ticker) && ticker.mode.name != "monkey")
- user << "\red You don't have the dexterity to do this!"
+ if (!usr.IsAdvancedToolUser())
return
M.attack_log += text("\[[time_stamp()]\] Has been injected with [name] by [user.name] ([user.ckey])")
@@ -160,7 +156,7 @@
for(var/mob/O in viewers(M, null))
O.show_message(text("\red [] has been injected with [] by [].", M, src, user), 1)
//Foreach goto(192)
- if (!(istype(M, /mob/living/carbon/human) || istype(M, /mob/living/carbon/monkey)))
+ if (!(istype(M, /mob/living/carbon/human)))
user << "\red Apparently it didn't work."
return
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/grenades/grenade.dm b/code/game/objects/items/weapons/grenades/grenade.dm
index fb9bc8d0ab6..b475e99ad3e 100644
--- a/code/game/objects/items/weapons/grenades/grenade.dm
+++ b/code/game/objects/items/weapons/grenades/grenade.dm
@@ -102,6 +102,3 @@
/obj/item/weapon/grenade/attack_hand()
walk(src, null, null)
..()
-
-/obj/item/weapon/grenade/attack_paw(mob/user as mob)
- return attack_hand(user)
diff --git a/code/game/objects/items/weapons/handcuffs.dm b/code/game/objects/items/weapons/handcuffs.dm
index b0abf1bb4f8..b44235a3c4f 100644
--- a/code/game/objects/items/weapons/handcuffs.dm
+++ b/code/game/objects/items/weapons/handcuffs.dm
@@ -17,6 +17,9 @@
var/trashtype = null //For disposable cuffs
/obj/item/weapon/restraints/handcuffs/attack(mob/living/carbon/C, mob/user)
+ if(!user.IsAdvancedToolUser())
+ return
+
if(CLUMSY in user.mutations && prob(50))
user << "Uh... how do those things work?!"
apply_cuffs(user,user)
diff --git a/code/game/objects/items/weapons/storage/bags.dm b/code/game/objects/items/weapons/storage/bags.dm
index 349aaa62553..2e7ad749b94 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))
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..c632645ae58 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)) //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/items/weapons/storage/internal.dm b/code/game/objects/items/weapons/storage/internal.dm
index 44c8aaa5697..ac1aba944ba 100644
--- a/code/game/objects/items/weapons/storage/internal.dm
+++ b/code/game/objects/items/weapons/storage/internal.dm
@@ -26,7 +26,7 @@
//returns 1 if the master item's parent's MouseDrop() should be called, 0 otherwise. It's strange, but no other way of
//doing it without the ability to call another proc's parent, really.
/obj/item/weapon/storage/internal/proc/handle_mousedrop(mob/user as mob, obj/over_object as obj)
- if (ishuman(user) || ismonkey(user)) //so monkeys can take off their backpacks -- Urist
+ if (ishuman(user)) //so monkeys can take off their backpacks -- Urist
if (istype(user.loc,/obj/mecha)) // stops inventory actions in a mech
return 0
diff --git a/code/game/objects/items/weapons/storage/storage.dm b/code/game/objects/items/weapons/storage/storage.dm
index 07ded953aaf..eb5717f43ff 100644
--- a/code/game/objects/items/weapons/storage/storage.dm
+++ b/code/game/objects/items/weapons/storage/storage.dm
@@ -25,7 +25,7 @@
var/use_sound = "rustle" //sound played when used. null for no sound.
/obj/item/weapon/storage/MouseDrop(obj/over_object as obj)
- if (ishuman(usr) || ismonkey(usr)) //so monkeys can take off their backpacks -- Urist
+ if (ishuman(usr)) //so monkeys can take off their backpacks -- Urist
var/mob/M = usr
if (istype(usr.loc,/obj/mecha)) // stops inventory actions in a mech
diff --git a/code/game/objects/items/weapons/twohanded.dm b/code/game/objects/items/weapons/twohanded.dm
index edc0426c5b8..df5e78ebf5f 100644
--- a/code/game/objects/items/weapons/twohanded.dm
+++ b/code/game/objects/items/weapons/twohanded.dm
@@ -59,11 +59,16 @@
unwield()
/obj/item/weapon/twohanded/attack_self(mob/user as mob)
- if( istype(user,/mob/living/carbon/monkey) )
- user << "It's too heavy for you to wield fully."
+ ..()
+
+ if(istype(user, /mob/living/carbon/human))
+ var/mob/living/carbon/human/H = user
+ if(H.species.is_small)
+ user << "It's too heavy for you to wield fully."
+ return
+ else
return
- ..()
if(wielded) //Trying to unwield it
unwield()
user << "You are now carrying the [name] with one hand."
diff --git a/code/game/objects/structures/bedsheet_bin.dm b/code/game/objects/structures/bedsheet_bin.dm
index 3b37a08299c..1c4936112a2 100644
--- a/code/game/objects/structures/bedsheet_bin.dm
+++ b/code/game/objects/structures/bedsheet_bin.dm
@@ -193,10 +193,6 @@ LINEN BINS
-/obj/structure/bedsheetbin/attack_paw(mob/user as mob)
- return attack_hand(user)
-
-
/obj/structure/bedsheetbin/attack_hand(mob/user as mob)
if(amount >= 1)
amount--
diff --git a/code/game/objects/structures/crates_lockers/closets.dm b/code/game/objects/structures/crates_lockers/closets.dm
index 8e4be5bd8f7..ce4729c3a03 100644
--- a/code/game/objects/structures/crates_lockers/closets.dm
+++ b/code/game/objects/structures/crates_lockers/closets.dm
@@ -328,10 +328,6 @@
spawn(30)
lastbang = 0
-
-/obj/structure/closet/attack_paw(mob/user as mob)
- return src.attack_hand(user)
-
/obj/structure/closet/attack_hand(mob/user as mob)
src.add_fingerprint(user)
src.toggle(user)
diff --git a/code/game/objects/structures/crates_lockers/closets/fireaxe.dm b/code/game/objects/structures/crates_lockers/closets/fireaxe.dm
index 14807277647..ca6c64318f2 100644
--- a/code/game/objects/structures/crates_lockers/closets/fireaxe.dm
+++ b/code/game/objects/structures/crates_lockers/closets/fireaxe.dm
@@ -183,10 +183,6 @@
usr << "\blue The [src.name] is closed."
update_icon()
- attack_paw(mob/user as mob)
- attack_hand(user)
- return
-
attack_ai(mob/user as mob)
if(src.smashed)
user << "\red The security of the cabinet is compromised."
diff --git a/code/game/objects/structures/crates_lockers/closets/secure/secure_closets.dm b/code/game/objects/structures/crates_lockers/closets/secure/secure_closets.dm
index 9dd81f658ec..c237650d21e 100644
--- a/code/game/objects/structures/crates_lockers/closets/secure/secure_closets.dm
+++ b/code/game/objects/structures/crates_lockers/closets/secure/secure_closets.dm
@@ -100,9 +100,6 @@
else
src.toggle(user)
-/obj/structure/closet/secure_closet/attack_paw(mob/user as mob)
- return src.attack_hand(user)
-
/obj/structure/closet/secure_closet/verb/verb_togglelock()
set src in oview(1) // One square distance
set category = "Object"
diff --git a/code/game/objects/structures/crates_lockers/closets/statue.dm b/code/game/objects/structures/crates_lockers/closets/statue.dm
index 82b305ec200..dfe09d025d9 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) || iscorgi(L))
if(L.buckled)
L.buckled = 0
L.anchored = 0
@@ -28,13 +28,13 @@
intialFire = L.getFireLoss()
intialBrute = L.getBruteLoss()
intialOxy = L.getOxyLoss()
- if(ishuman(L))
+ if(issmall(L))
+ name = "statue of a monkey"
+ icon_state = "monkey"
+ else if(ishuman(L))
name = "statue of [L.name]"
if(L.gender == "female")
icon_state = "human_female"
- else if(ismonkey(L))
- name = "statue of a monkey"
- icon_state = "monkey"
else if(iscorgi(L))
name = "statue of a corgi"
icon_state = "corgi"
diff --git a/code/game/objects/structures/displaycase.dm b/code/game/objects/structures/displaycase.dm
index b7f18ced386..f89ed09d6bb 100644
--- a/code/game/objects/structures/displaycase.dm
+++ b/code/game/objects/structures/displaycase.dm
@@ -72,7 +72,7 @@
desc = "A display case for the captain's antique laser gun. It taunts you to kick it."
/obj/structure/displaycase/captains_laser/New()
- req_access = list(access_captain)
+ req_access = list(access_captain)
locked = 1
spawn(5)
occupant = new /obj/item/weapon/gun/energy/laser/captain(src)
@@ -217,8 +217,6 @@
occupant=W
update_icon()
-/obj/structure/displaycase/attack_paw(mob/user as mob)
- return src.attack_hand(user)
/obj/structure/displaycase/attack_hand(mob/user as mob)
if (destroyed)
diff --git a/code/game/objects/structures/extinguisher.dm b/code/game/objects/structures/extinguisher.dm
index 74070214bd8..f8b3317253a 100644
--- a/code/game/objects/structures/extinguisher.dm
+++ b/code/game/objects/structures/extinguisher.dm
@@ -55,10 +55,6 @@
opened = !opened
update_icon()
-/obj/structure/extinguisher_cabinet/attack_paw(mob/user)
- attack_hand(user)
- return
-
/obj/structure/extinguisher_cabinet/update_icon()
if(!opened)
diff --git a/code/game/objects/structures/grille.dm b/code/game/objects/structures/grille.dm
index bb5838ceffd..9e66774f900 100644
--- a/code/game/objects/structures/grille.dm
+++ b/code/game/objects/structures/grille.dm
@@ -54,9 +54,6 @@
if(ismob(user)) shock(user, 70)
-/obj/structure/grille/attack_paw(mob/living/user as mob)
- attack_hand(user)
-
/obj/structure/grille/attack_hand(mob/living/user as mob)
user.changeNext_move(CLICK_CD_MELEE)
user.do_attack_animation(src)
diff --git a/code/game/objects/structures/inflatable.dm b/code/game/objects/structures/inflatable.dm
index 5d4eab9c35b..e75625b6a78 100644
--- a/code/game/objects/structures/inflatable.dm
+++ b/code/game/objects/structures/inflatable.dm
@@ -67,9 +67,6 @@
//world << "glass at [x],[y],[z] Mhit"
deflate(1)
- attack_paw(mob/user as mob)
- return attack_generic(user, 15)
-
attack_hand(mob/user as mob)
add_fingerprint(user)
return
@@ -184,9 +181,6 @@
if(get_dist(user,src) <= 1) //not remotely though
return TryToSwitchState(user)
- attack_paw(mob/user as mob)
- return TryToSwitchState(user)
-
attack_hand(mob/user as mob)
return TryToSwitchState(user)
diff --git a/code/game/objects/structures/kitchen_spike.dm b/code/game/objects/structures/kitchen_spike.dm
index eb3f0a3c371..de2fef2875e 100644
--- a/code/game/objects/structures/kitchen_spike.dm
+++ b/code/game/objects/structures/kitchen_spike.dm
@@ -4,77 +4,57 @@
name = "a meat spike"
icon = 'icons/obj/kitchen.dmi'
icon_state = "spike"
- desc = "A spike for collecting meat from animals"
+ desc = "A spike for collecting meat from animals."
density = 1
anchored = 1
var/meat = 0
- var/occupied = 0
- var/meattype = 0 // 0 - Nothing, 1 - Monkey, 2 - Xeno
+ var/occupied
+ var/meat_type
+ var/victim_name = "corpse"
-/obj/structure/kitchenspike
- attack_paw(mob/user as mob)
- return src.attack_hand(usr)
-
- attackby(obj/item/weapon/grab/G as obj, mob/user as mob, params)
- if(!istype(G, /obj/item/weapon/grab))
- return
- if(istype(G.affecting, /mob/living/carbon/monkey))
- if(src.occupied == 0)
- src.icon_state = "spikebloody"
- src.occupied = 1
- src.meat = 5
- src.meattype = 1
- for(var/mob/O in viewers(src, null))
- O.show_message(text("\red [user] has forced [G.affecting] onto the spike, killing them instantly!"))
- del(G.affecting)
- del(G)
-
- else
- user << "\red The spike already has something on it, finish collecting its meat first!"
- else if(istype(G.affecting, /mob/living/carbon/alien))
- if(src.occupied == 0)
- src.icon_state = "spikebloodygreen"
- src.occupied = 1
- src.meat = 5
- src.meattype = 2
- for(var/mob/O in viewers(src, null))
- O.show_message(text("\red [user] has forced [G.affecting] onto the spike, killing them instantly!"))
- del(G.affecting)
- del(G)
- else
- user << "\red The spike already has something on it, finish collecting its meat first!"
+/obj/structure/kitchenspike/attackby(obj/item/weapon/grab/G as obj, mob/user as mob)
+ if(!istype(G, /obj/item/weapon/grab) || !G.affecting)
+ return
+ if(occupied)
+ user << "The spike already has something on it, finish collecting its meat first!"
+ else
+ if(spike(G.affecting))
+ visible_message("[user] has forced [G.affecting] onto the spike, killing them instantly!")
+ del(G.affecting)
+ del(G)
else
- user << "\red They are too big for the spike, try something smaller!"
- return
+ user << "They are too big for the spike, try something smaller!"
-// MouseDrop_T(var/atom/movable/C, mob/user)
-// if(istype(C, /obj/mob/carbon/monkey)
-// else if(istype(C, /obj/mob/carbon/alien) && !istype(C, /mob/living/carbon/alien/larva/slime))
-// else if(istype(C, /obj/livestock/spesscarp
+/obj/structure/kitchenspike/proc/spike(var/mob/living/victim)
- attack_hand(mob/user as mob)
- if(..())
- return
- if(src.occupied)
- if(src.meattype == 1)
- if(src.meat > 1)
- src.meat--
- new /obj/item/weapon/reagent_containers/food/snacks/meat/monkey( src.loc )
- usr << "You remove some meat from the monkey."
- else if(src.meat == 1)
- src.meat--
- new /obj/item/weapon/reagent_containers/food/snacks/meat/monkey(src.loc)
- usr << "You remove the last piece of meat from the monkey!"
- src.icon_state = "spike"
- src.occupied = 0
- else if(src.meattype == 2)
- if(src.meat > 1)
- src.meat--
- new /obj/item/weapon/reagent_containers/food/snacks/xenomeat( src.loc )
- usr << "You remove some meat from the alien."
- else if(src.meat == 1)
- src.meat--
- new /obj/item/weapon/reagent_containers/food/snacks/xenomeat(src.loc)
- usr << "You remove the last piece of meat from the alien!"
- src.icon_state = "spike"
- src.occupied = 0
\ No newline at end of file
+ if(!istype(victim))
+ return
+
+ if(istype(victim, /mob/living/carbon/human))
+ var/mob/living/carbon/human/H = victim
+ if(!H.species.is_small)
+ return 0
+ meat_type = H.species.meat_type
+ icon_state = "spikebloody"
+ else if(istype(victim, /mob/living/carbon/alien))
+ meat_type = /obj/item/weapon/reagent_containers/food/snacks/xenomeat
+ icon_state = "spikebloodygreen"
+ else
+ return 0
+
+ victim_name = victim.name
+ occupied = 1
+ meat = 5
+ return 1
+
+/obj/structure/kitchenspike/attack_hand(mob/user as mob)
+ if(..() || !occupied)
+ return
+ meat--
+ new meat_type(get_turf(src))
+ if(src.meat > 1)
+ user << "You remove some meat from \the [victim_name]."
+ else if(src.meat == 1)
+ user << "You remove the last piece of meat from \the [victim_name]!"
+ icon_state = "spike"
+ occupied = 0
diff --git a/code/game/objects/structures/ladders.dm b/code/game/objects/structures/ladders.dm
index dfcb2f58270..8a431c43ac1 100644
--- a/code/game/objects/structures/ladders.dm
+++ b/code/game/objects/structures/ladders.dm
@@ -66,8 +66,5 @@
add_fingerprint(user)
-/obj/structure/ladder/attack_paw(mob/user as mob)
- return attack_hand(user)
-
/obj/structure/ladder/attackby(obj/item/weapon/W, mob/user as mob, params)
return attack_hand(user)
\ No newline at end of file
diff --git a/code/game/objects/structures/lamarr_cage.dm b/code/game/objects/structures/lamarr_cage.dm
index 5b6acef00ec..229fe4e9055 100644
--- a/code/game/objects/structures/lamarr_cage.dm
+++ b/code/game/objects/structures/lamarr_cage.dm
@@ -72,9 +72,6 @@
..()
return
-/obj/structure/lamarr/attack_paw(mob/user as mob)
- return src.attack_hand(user)
-
/obj/structure/lamarr/attack_hand(mob/user as mob)
if (src.destroyed)
return
diff --git a/code/game/objects/structures/mineral_doors.dm b/code/game/objects/structures/mineral_doors.dm
index 56e589ea1ae..51b0cfb5ea6 100644
--- a/code/game/objects/structures/mineral_doors.dm
+++ b/code/game/objects/structures/mineral_doors.dm
@@ -44,9 +44,6 @@
if(get_dist(user,src) <= 1) //not remotely though
return TryToSwitchState(user)
- attack_paw(mob/user as mob)
- return TryToSwitchState(user)
-
attack_hand(mob/user as mob)
return TryToSwitchState(user)
diff --git a/code/game/objects/structures/morgue.dm b/code/game/objects/structures/morgue.dm
index c591c75b0e3..ce743717f32 100644
--- a/code/game/objects/structures/morgue.dm
+++ b/code/game/objects/structures/morgue.dm
@@ -27,13 +27,13 @@
if(src.contents.len)
var/mob/living/M = locate() in contents
-
+
var/obj/structure/closet/body_bag/B = locate() in contents
if(M==null) M = locate() in B
if(M)
var/mob/dead/observer/G = M.get_ghost()
-
+
if(M.client)
src.icon_state = "morgue3"
else if(G && G.client) //There is a ghost and it is connected to the server
@@ -73,8 +73,6 @@
/obj/structure/morgue/alter_health()
return src.loc
-/obj/structure/morgue/attack_paw(mob/user as mob)
- return src.attack_hand(user)
/obj/structure/morgue/attack_hand(mob/user as mob)
if (src.connected)
@@ -155,8 +153,6 @@
anchored = 1.0
throwpass = 1
-/obj/structure/m_tray/attack_paw(mob/user as mob)
- return src.attack_hand(user)
/obj/structure/m_tray/attack_hand(mob/user as mob)
if (src.connected)
@@ -240,8 +236,6 @@
/obj/structure/crematorium/alter_health()
return src.loc
-/obj/structure/crematorium/attack_paw(mob/user as mob)
- return src.attack_hand(user)
/obj/structure/crematorium/attack_hand(mob/user as mob)
// if (cremating) AWW MAN! THIS WOULD BE SO MUCH MORE FUN ... TO WATCH
@@ -375,9 +369,6 @@
anchored = 1.0
throwpass = 1
-/obj/structure/c_tray/attack_paw(mob/user as mob)
- return src.attack_hand(user)
-
/obj/structure/c_tray/attack_hand(mob/user as mob)
if (src.connected)
for(var/atom/movable/A as mob|obj in src.loc)
diff --git a/code/game/objects/structures/stool_bed_chair_nest/bed.dm b/code/game/objects/structures/stool_bed_chair_nest/bed.dm
index 5d6dac37720..b19876e2e8e 100644
--- a/code/game/objects/structures/stool_bed_chair_nest/bed.dm
+++ b/code/game/objects/structures/stool_bed_chair_nest/bed.dm
@@ -30,9 +30,6 @@
..()
return
-/obj/structure/stool/bed/attack_paw(mob/user as mob)
- return src.attack_hand(user)
-
/obj/structure/stool/bed/attack_hand(mob/user as mob)
manual_unbuckle(user)
return
diff --git a/code/game/objects/structures/tables_racks.dm b/code/game/objects/structures/tables_racks.dm
index 523aa5a8e7a..520f951bca3 100644
--- a/code/game/objects/structures/tables_racks.dm
+++ b/code/game/objects/structures/tables_racks.dm
@@ -294,13 +294,6 @@
if(prob(75))
destroy()
-/obj/structure/table/attack_paw(mob/living/user)
- if(HULK in user.mutations)
- user.do_attack_animation(src)
- user.say(pick(";RAAAAAAAARGH!", ";HNNNNNNNNNGGGGGGH!", ";GWAAAAAAAARRRHHH!", "NNNNNNNNGGGGGGGGHH!", ";AAAAAAARRRGH!" ))
- visible_message("[user] smashes the [src] apart!")
- destroy()
-
/obj/structure/table/attack_alien(mob/living/user)
user.do_attack_animation(src)
@@ -923,13 +916,6 @@
destroy()
-/obj/structure/rack/attack_paw(mob/living/user)
- if(HULK in user.mutations)
- user.do_attack_animation(src)
- user.say(pick(";RAAAAAAAARGH!", ";HNNNNNNNNNGGGGGGH!", ";GWAAAAAAAARRRHHH!", "NNNNNNNNGGGGGGGGHH!", ";AAAAAAARRRGH!" ))
- visible_message("[user] smashes [src] apart!")
- destroy()
-
/obj/structure/rack/attack_alien(mob/living/user)
user.do_attack_animation(src)
diff --git a/code/game/objects/structures/window.dm b/code/game/objects/structures/window.dm
index 0ff0b69658e..603792c68c7 100644
--- a/code/game/objects/structures/window.dm
+++ b/code/game/objects/structures/window.dm
@@ -148,9 +148,6 @@ var/global/wcColored
return
-/obj/structure/window/attack_paw(mob/user as mob)
- return attack_hand(user)
-
/obj/structure/window/proc/attack_generic(mob/living/user as mob, damage = 0) //used by attack_alien, attack_animal, and attack_slime
user.changeNext_move(CLICK_CD_MELEE)
user.do_attack_animation(src)
diff --git a/code/game/supplyshuttle.dm b/code/game/supplyshuttle.dm
index a64e798c3ec..dd371817dca 100644
--- a/code/game/supplyshuttle.dm
+++ b/code/game/supplyshuttle.dm
@@ -40,6 +40,11 @@ var/list/mechtoys = list(
density = 0
anchored = 1
layer = 4
+ var/list/mobs_can_pass = list(
+ /mob/living/carbon/slime,
+ /mob/living/simple_animal/mouse,
+ /mob/living/silicon/robot/drone
+ )
/obj/structure/plasticflaps/CanPass(atom/A, turf/T)
if(istype(A) && A.checkpass(PASSGLASS))
@@ -52,10 +57,19 @@ var/list/mechtoys = list(
if(istype(A, /obj/vehicle)) //no vehicles
return 0
- if(istype(A, /mob/living)) // You Shall Not Pass!
- var/mob/living/M = A
- if(!M.lying && !istype(M, /mob/living/carbon/monkey) && !istype(M, /mob/living/carbon/slime) && !istype(M, /mob/living/simple_animal/mouse) && !istype(M, /mob/living/silicon/robot/drone)) //If your not laying down, or a small creature, no pass.
- return 0
+ var/mob/living/M = A
+ if(istype(M))
+ if(M.lying)
+ return ..()
+ for(var/mob_type in mobs_can_pass)
+ if(istype(A, mob_type))
+ return ..()
+ if(istype(A, /mob/living/carbon/human))
+ var/mob/living/carbon/human/H = M
+ if(H.species.is_small)
+ return ..()
+ return 0
+
return ..()
/obj/structure/plasticflaps/ex_act(severity)
@@ -314,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/game/turfs/simulated.dm b/code/game/turfs/simulated.dm
index 329dbbefa1a..2a64766de41 100644
--- a/code/game/turfs/simulated.dm
+++ b/code/game/turfs/simulated.dm
@@ -167,9 +167,7 @@
// Only adds blood on the floor -- Skie
/turf/simulated/proc/add_blood_floor(mob/living/carbon/M as mob)
- if(istype(M, /mob/living/carbon/monkey))
- blood_splatter(src,M,1)
- else if( istype(M, /mob/living/carbon/alien ))
+ if( istype(M, /mob/living/carbon/alien ))
var/obj/effect/decal/cleanable/blood/xeno/this = new /obj/effect/decal/cleanable/blood/xeno(src)
this.blood_DNA["UNKNOWN BLOOD"] = "X*"
else if( istype(M, /mob/living/silicon/robot ))
diff --git a/code/game/turfs/simulated/floor.dm b/code/game/turfs/simulated/floor.dm
index 307696a3a26..c7441526ab9 100644
--- a/code/game/turfs/simulated/floor.dm
+++ b/code/game/turfs/simulated/floor.dm
@@ -194,10 +194,6 @@ var/list/wood_icons = list("wood","wood-broken")
else
return 0
-
-/turf/simulated/floor/attack_paw(mob/user as mob)
- return src.attack_hand(user)
-
/turf/simulated/floor/attack_hand(mob/user as mob)
if (is_light_floor())
var/obj/item/stack/tile/light/T = floor_tile
diff --git a/code/game/turfs/simulated/walls.dm b/code/game/turfs/simulated/walls.dm
index 275a247d945..482979bc0e2 100644
--- a/code/game/turfs/simulated/walls.dm
+++ b/code/game/turfs/simulated/walls.dm
@@ -252,22 +252,6 @@
//Interactions
-/turf/simulated/wall/attack_paw(mob/living/user as mob)
- user.changeNext_move(CLICK_CD_MELEE)
- if ((HULK in user.mutations))
- user.do_attack_animation(src)
- if (prob(40))
- usr << text("\blue You smash through the wall.")
- usr.say(pick(";RAAAAAAAARGH!", ";HNNNNNNNNNGGGGGGH!", ";GWAAAAAAAARRRHHH!", "NNNNNNNNGGGGGGGGHH!", ";AAAAAAARRRGH!" ))
- dismantle_wall(1)
- return
- else
- usr << text("\blue You punch the wall.")
- take_damage(rand(25, 75))
- return
-
- return src.attack_hand(user)
-
/turf/simulated/wall/attack_animal(var/mob/living/simple_animal/M)
M.changeNext_move(CLICK_CD_MELEE)
M.do_attack_animation(src)
diff --git a/code/game/turfs/space/space.dm b/code/game/turfs/space/space.dm
index de8201d1595..9d021fa6da2 100644
--- a/code/game/turfs/space/space.dm
+++ b/code/game/turfs/space/space.dm
@@ -27,9 +27,6 @@
else
set_light(0)
-/turf/space/attack_paw(mob/user as mob)
- return src.attack_hand(user)
-
/turf/space/attack_hand(mob/user as mob)
if ((user.restrained() || !( user.pulling )))
return
@@ -343,4 +340,4 @@ proc/setup_map_transitions() //listamania
else
S.transition = directions[Z_NORTH]
- S.Assign_Destination()
+ S.Assign_Destination()
diff --git a/code/game/turfs/unsimulated/floor.dm b/code/game/turfs/unsimulated/floor.dm
index 74cd160a86b..cd36c4a1bb5 100644
--- a/code/game/turfs/unsimulated/floor.dm
+++ b/code/game/turfs/unsimulated/floor.dm
@@ -3,9 +3,6 @@
icon = 'icons/turf/floors.dmi'
icon_state = "Floor3"
-/turf/unsimulated/floor/attack_paw(user as mob)
- return src.attack_hand(user)
-
/turf/unsimulated/floor/attack_hand(var/mob/user as mob)
if ((!( user.canmove ) || user.restrained() || !( user.pulling )))
return
diff --git a/code/game/vehicles/spacepods/spacepod.dm b/code/game/vehicles/spacepods/spacepod.dm
index 14bc5b8e413..c66c6504ad4 100644
--- a/code/game/vehicles/spacepods/spacepod.dm
+++ b/code/game/vehicles/spacepods/spacepod.dm
@@ -276,8 +276,6 @@
else
user << "\blue \The [src] is fully repaired!"
-/obj/spacepod/attack_paw(mob/user as mob)
- return src.attack_hand(user)
/obj/spacepod/attack_hand(mob/user as mob)
if(!hatch_open)
diff --git a/code/game/verbs/suicide.dm b/code/game/verbs/suicide.dm
index 2adf60e2443..fa525e22e1f 100644
--- a/code/game/verbs/suicide.dm
+++ b/code/game/verbs/suicide.dm
@@ -101,32 +101,6 @@
death(0)
suiciding = 0
-/mob/living/carbon/monkey/verb/suicide()
- set hidden = 1
-
- if (stat == 2)
- src << "You're already dead!"
- return
-
- if (!ticker)
- src << "You can't commit suicide before the game starts!"
- return
-
- if (suiciding)
- src << "You're already committing suicide! Be patient!"
- return
-
- var/confirm = alert("Are you sure you want to commit suicide?", "Confirm Suicide", "Yes", "No")
-
- if(confirm == "Yes")
- if(!canmove || restrained())
- src << "You can't commit suicide whilst restrained! ((You can type Ghost instead however.))"
- return
- suiciding = 1
- //instead of killing them instantly, just put them at -175 health and let 'em gasp for a while
- viewers(src) << "\red [src] is attempting to bite \his tongue. It looks like \he's trying to commit suicide."
- adjustOxyLoss(max(175- getToxLoss() - getFireLoss() - getBruteLoss() - getOxyLoss(), 0))
- updatehealth()
/mob/living/silicon/ai/verb/suicide()
set hidden = 1
diff --git a/code/modules/admin/admin.dm b/code/modules/admin/admin.dm
index 2d6be2a6dbb..81086f3b3ef 100644
--- a/code/modules/admin/admin.dm
+++ b/code/modules/admin/admin.dm
@@ -101,7 +101,7 @@ var/global/nologevent = 0
body += "
"
//Monkey
- if(ismonkey(M))
+ if(issmall(M))
body += "Monkeyized | "
else
body += "Monkeyize | "
diff --git a/code/modules/admin/admin_verbs.dm b/code/modules/admin/admin_verbs.dm
index 363f3d504da..e6b35ef45e2 100644
--- a/code/modules/admin/admin_verbs.dm
+++ b/code/modules/admin/admin_verbs.dm
@@ -436,9 +436,10 @@ var/list/admin_verbs_mentor = list(
var/mob/living/carbon/human/H = T
if (H.species)
D.affected_species = list(H.species.name)
- if(istype(T,/mob/living/carbon/monkey))
- var/mob/living/carbon/monkey/M = T
- D.affected_species = list(M.greaterform)
+ if(H.species.primitive_form)
+ D.affected_species |= H.species.primitive_form
+ if(H.species.greater_form)
+ D.affected_species |= H.species.greater_form
infect_virus2(T,D,1)
feedback_add_details("admin_verb","GD2") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
diff --git a/code/modules/admin/player_panel.dm b/code/modules/admin/player_panel.dm
index ff98278ce90..5d1b2ab6a7c 100644
--- a/code/modules/admin/player_panel.dm
+++ b/code/modules/admin/player_panel.dm
@@ -230,12 +230,13 @@
if(isliving(M))
if(iscarbon(M)) //Carbon stuff
- if(ishuman(M))
+ if(issmall(M))
+ M_job = "Monkey"
+ else if(ishuman(M))
M_job = M.job
else if(isslime(M))
M_job = "slime"
- else if(ismonkey(M))
- M_job = "Monkey"
+
else if(isalien(M)) //aliens
if(islarva(M))
M_job = "Alien larva"
@@ -347,6 +348,8 @@
dat += "AI | "
else if(isrobot(M))
dat += "Cyborg | "
+ else if(issmall(M))
+ dat += "Monkey | "
else if(ishuman(M))
dat += "[M.real_name] | "
else if(istype(M, /mob/living/silicon/pai))
@@ -355,8 +358,6 @@
dat += "New Player | "
else if(isobserver(M))
dat += "Ghost | "
- else if(ismonkey(M))
- dat += "Monkey | "
else if(isalien(M))
dat += "Alien | "
else if(ismask(M))
diff --git a/code/modules/admin/topic.dm b/code/modules/admin/topic.dm
index 93a1e32cd79..28b855046e3 100644
--- a/code/modules/admin/topic.dm
+++ b/code/modules/admin/topic.dm
@@ -306,7 +306,7 @@
if("larva") M.change_mob_type( /mob/living/carbon/alien/larva , null, null, delmob, 1 )
if("human") M.change_mob_type( /mob/living/carbon/human/human , null, null, delmob, 1 )
if("slime") M.change_mob_type( /mob/living/carbon/slime , null, null, delmob, 1 )
- if("monkey") M.change_mob_type( /mob/living/carbon/monkey , null, null, delmob, 1 )
+ if("monkey") M.change_mob_type( /mob/living/carbon/human/monkey , null, null, delmob, 1 )
if("robot") M.change_mob_type( /mob/living/silicon/robot , null, null, delmob, 1 )
if("cat") M.change_mob_type( /mob/living/simple_animal/cat , null, null, delmob, 1 )
if("runtime") M.change_mob_type( /mob/living/simple_animal/cat/Runtime , null, null, delmob, 1 )
@@ -1440,44 +1440,6 @@
show_player_panel(H)
//H.regenerate_icons()
-/***************** BEFORE**************
-
- if (href_list["l_players"])
- var/dat = "Name/Real Name/Key/IP:
"
- for(var/mob/M in world)
- var/foo = ""
- if (ismob(M) && M.client)
- if(!M.client.authenticated && !M.client.authenticating)
- foo += text("\[ Authorize | ", src, M)
- else
- foo += text("\[ Authorized | ")
- if(M.start)
- if(!istype(M, /mob/living/carbon/monkey))
- foo += text("Monkeyize | ", src, M)
- else
- foo += text("Monkeyized | ")
- if(istype(M, /mob/living/silicon/ai))
- foo += text("Is an AI | ")
- else
- foo += text("Make AI | ", src, M)
- if(!(M.z in config.admin_levels))
- foo += text("Prison | ", src, M)
- foo += text("Maze | ", src, M)
- else
- foo += text("On Z = 2 | ")
- else
- foo += text("Hasn't Entered Game | ")
- foo += text("Heal/Revive | ", src, M)
-
- foo += text("Say \]", src, M)
- dat += text("N: [] R: [] (K: []) (IP: []) []
", M.name, M.real_name, (M.client ? M.client : "No client"), M.lastKnownIP, foo)
-
- usr << browse(dat, "window=players;size=900x480")
-
-*****************AFTER******************/
-
-// Now isn't that much better? IT IS NOW A PROC, i.e. kinda like a big panel like unstable
-
else if(href_list["adminplayeropts"])
var/mob/M = locate(href_list["adminplayeropts"])
show_player_panel(M)
@@ -2000,7 +1962,7 @@
where = "onfloor"
if ( where == "inhand" ) //Can only give when human or monkey
- if ( !( ishuman(usr) || ismonkey(usr) ) )
+ if ( !( ishuman(usr) ) )
usr << "Can only spawn in hand when you're a human or a monkey."
where = "onfloor"
else if ( usr.get_active_hand() )
diff --git a/code/modules/admin/verbs/randomverbs.dm b/code/modules/admin/verbs/randomverbs.dm
index 1274c48e79f..5c89bfb3f8f 100644
--- a/code/modules/admin/verbs/randomverbs.dm
+++ b/code/modules/admin/verbs/randomverbs.dm
@@ -415,18 +415,6 @@ Traitors and the like can also be revived with the previous role mostly intact.
message_admins("\blue [key_name_admin(usr)] has respawned [new_xeno.key] as a filthy xeno.", 1)
return //all done. The ghost is auto-deleted
- //check if they were a monkey
- else if(findtext(G_found.real_name,"monkey"))
- if(alert("This character appears to have been a monkey. Would you like to respawn them as such?",,"Yes","No")=="Yes")
- var/mob/living/carbon/monkey/new_monkey = new(pick(latejoin))
- G_found.mind.transfer_to(new_monkey) //be careful when doing stuff like this! I've already checked the mind isn't in use
- new_monkey.key = G_found.key
- new_monkey << "You have been fully respawned. Enjoy the game."
- message_admins("\blue [key_name_admin(usr)] has respawned [new_monkey.key] as a filthy xeno.", 1)
- return //all done. The ghost is auto-deleted
-
-
- //Ok, it's not a xeno or a monkey. So, spawn a human.
var/mob/living/carbon/human/new_character = new(pick(latejoin))//The mob being spawned.
var/datum/data/record/record_found //Referenced to later to either randomize or not randomize the character.
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/clothing/clothing.dm b/code/modules/clothing/clothing.dm
index 2cf4ecee51e..4e868b7765c 100644
--- a/code/modules/clothing/clothing.dm
+++ b/code/modules/clothing/clothing.dm
@@ -413,13 +413,13 @@ BLIND // can't see anything
A.attack_hand(user)
return
- if ((ishuman(usr) || ismonkey(usr)) && src.loc == user) //make it harder to accidentally undress yourself
+ if (ishuman(usr) && src.loc == user) //make it harder to accidentally undress yourself
return
..()
/obj/item/clothing/under/MouseDrop(obj/over_object as obj)
- if (ishuman(usr) || ismonkey(usr))
+ if (ishuman(usr))
//makes sure that the clothing is equipped so that we can't drag it into our hand from miles away.
if (!(src.loc == usr))
return
diff --git a/code/modules/clothing/masks/miscellaneous.dm b/code/modules/clothing/masks/miscellaneous.dm
index cd3e75e4ce5..49da421a9ca 100644
--- a/code/modules/clothing/masks/miscellaneous.dm
+++ b/code/modules/clothing/masks/miscellaneous.dm
@@ -10,21 +10,19 @@
sprite_sheets = list(
"Vox" = 'icons/mob/species/vox/mask.dmi'
)
+
+// Clumsy folks can't take the mask off themselves.
+/obj/item/clothing/mask/muzzle/attack_hand(mob/user as mob)
+ if(user.wear_mask == src && !user.IsAdvancedToolUser())
+ return 0
+ ..()
+
/obj/item/clothing/mask/muzzle/gag
name = "gag"
desc = "Stick this in their mouth to stop the noise."
icon_state = "gag"
w_class = 1
-//Monkeys can not take the muzzle off of themself! Call PETA!
-/obj/item/clothing/mask/muzzle/attack_paw(mob/user as mob)
- if (src == user.wear_mask)
- return
- else
- ..()
- return
-
-
/obj/item/clothing/mask/surgical
name = "sterile mask"
desc = "A sterile mask designed to help prevent the spread of diseases."
diff --git a/code/modules/events/radiation_storm.dm b/code/modules/events/radiation_storm.dm
index 5daabc84799..d22c1338c38 100644
--- a/code/modules/events/radiation_storm.dm
+++ b/code/modules/events/radiation_storm.dm
@@ -58,14 +58,6 @@
randmutg(H) // Applies good mutation
domutcheck(H,null,1)
-
- for(var/mob/living/carbon/monkey/M in living_mob_list)
- var/turf/T = get_turf(M)
- if(!T)
- continue
- if(!(T.z in config.station_levels))
- continue
- M.apply_effect((rand(5,25)),IRRADIATE,0)
sleep(100)
diff --git a/code/modules/food/candy_maker.dm b/code/modules/food/candy_maker.dm
index 7e12fc327bf..b9afb48ad77 100644
--- a/code/modules/food/candy_maker.dm
+++ b/code/modules/food/candy_maker.dm
@@ -183,9 +183,6 @@
return 1
src.updateUsrDialog()
-/obj/machinery/candy_maker/attack_paw(mob/user as mob)
- return src.attack_hand(user)
-
/obj/machinery/candy_maker/attack_ai(mob/user as mob)
return 0
diff --git a/code/modules/food/grill_new.dm b/code/modules/food/grill_new.dm
index ee8bd4bf460..43914a63967 100644
--- a/code/modules/food/grill_new.dm
+++ b/code/modules/food/grill_new.dm
@@ -186,9 +186,6 @@
return 1
src.updateUsrDialog()
-/obj/machinery/grill/attack_paw(mob/user as mob)
- return src.attack_hand(user)
-
/obj/machinery/grill/attack_ai(mob/user as mob)
return 0
diff --git a/code/modules/food/icecream_vat.dm b/code/modules/food/icecream_vat.dm
index 19101f5b8e1..e71afb26482 100644
--- a/code/modules/food/icecream_vat.dm
+++ b/code/modules/food/icecream_vat.dm
@@ -180,9 +180,6 @@
/obj/machinery/icemachine/attack_ai(mob/user)
return attack_hand(user)
-/obj/machinery/icemachine/attack_paw(mob/user)
- return attack_hand(user)
-
/obj/machinery/icemachine/proc/show_toppings()
var/dat = ""
diff --git a/code/modules/food/oven_new.dm b/code/modules/food/oven_new.dm
index 7d6022ae9ae..136b26a5bd0 100644
--- a/code/modules/food/oven_new.dm
+++ b/code/modules/food/oven_new.dm
@@ -186,9 +186,6 @@
return 1
src.updateUsrDialog()
-/obj/machinery/oven/attack_paw(mob/user as mob)
- return src.attack_hand(user)
-
/obj/machinery/oven/attack_ai(mob/user as mob)
return 0
diff --git a/code/modules/hydroponics/seed.dm b/code/modules/hydroponics/seed.dm
index 9d023c52c48..ac8b5e0d33e 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/primitive/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..2fe08928a62 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/primitive/diona
/datum/seed/diona/New()
..()
diff --git a/code/modules/hydroponics/seed_mobs.dm b/code/modules/hydroponics/seed_mobs.dm
index 8d5d26df12b..d00baff79d7 100644
--- a/code/modules/hydroponics/seed_mobs.dm
+++ b/code/modules/hydroponics/seed_mobs.dm
@@ -69,7 +69,7 @@
host << "\green You awaken slowly, stirring into sluggish motion as the air caresses you."
// This is a hack, replace with some kind of species blurb proc.
- if(istype(host,/mob/living/carbon/alien/diona))
+ if(istype(host,/mob/living/carbon/primitive/diona))
host << "You are [host], one of a race of drifting interstellar plantlike creatures that sometimes share their seeds with human traders."
host << "Too much darkness will send you into shock and starve you, but light will help you heal."
diff --git a/code/modules/hydroponics/trays/tray.dm b/code/modules/hydroponics/trays/tray.dm
index 9e727f62bcb..da6cf21d909 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/primitive/diona))
+ var/mob/living/carbon/primitive/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/language.dm b/code/modules/mob/language.dm
index 2ad7fc08929..ce69eafc411 100644
--- a/code/modules/mob/language.dm
+++ b/code/modules/mob/language.dm
@@ -570,4 +570,28 @@
else
return ..()
+/datum/language/human/monkey
+ name = "Chimpanzee"
+ desc = "Ook ook ook."
+ speech_verb = "chimpers"
+ ask_verb = "chimpers"
+ exclaim_verb = "screeches"
+ key = "mo"
+
+/datum/language/skrell/monkey
+ name = "Neara"
+ desc = "Squik squik squik."
+ key = "ne"
+
+/datum/language/unathi/monkey
+ name = "Stok"
+ desc = "Hiss hiss hiss."
+ key = "st"
+
+/datum/language/tajaran/monkey
+ name = "Farwa"
+ desc = "Meow meow meow."
+ key = "fa"
+
+
#undef SCRAMBLE_CACHE_LEN
diff --git a/code/modules/mob/living/carbon/alien/alien_defenses.dm b/code/modules/mob/living/carbon/alien/alien_defenses.dm
index 16b7a17721c..6c670bc7fe5 100644
--- a/code/modules/mob/living/carbon/alien/alien_defenses.dm
+++ b/code/modules/mob/living/carbon/alien/alien_defenses.dm
@@ -62,13 +62,6 @@ In all, this is a lot like the monkey code. /N
return 0
-/mob/living/carbon/alien/attack_paw(mob/living/carbon/monkey/M as mob)
- if(..())
- if (stat != DEAD)
- adjustBruteLoss(rand(1, 3))
- updatehealth()
- return
-
/mob/living/carbon/alien/attack_animal(mob/living/simple_animal/M as mob)
if(..())
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..813c226858f 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))
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 66cdd111b7e..06186ea604a 100644
--- a/code/modules/mob/living/carbon/human/examine.dm
+++ b/code/modules/mob/living/carbon/human/examine.dm
@@ -256,10 +256,11 @@
if(getBrainLoss() >= 60)
msg += "[t_He] [t_has] a stupid expression on [t_his] face.\n"
- if(!key && brain_op_stage != 4 && stat != DEAD)
- msg += "[t_He] [t_is] fast asleep. It doesn't look like they are waking up anytime soon.\n"
- else if(!client && brain_op_stage != 4 && stat != DEAD)
- msg += "[t_He] [t_has] suddenly fallen asleep.\n"
+ 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)
+ msg += "[t_He] [t_has] suddenly fallen asleep.\n"
var/list/wound_flavor_text = list()
var/list/is_destroyed = list()
diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm
index de9680dccab..caa4fc870c6 100644
--- a/code/modules/mob/living/carbon/human/human.dm
+++ b/code/modules/mob/living/carbon/human/human.dm
@@ -122,6 +122,18 @@
h_style = "Nucleation Crystals"
..(new_loc, "Nucleation")
+/mob/living/carbon/human/monkey/New(var/new_loc)
+ ..(new_loc, "Monkey")
+
+/mob/living/carbon/human/farwa/New(var/new_loc)
+ ..(new_loc, "Farwa")
+
+/mob/living/carbon/human/neara/New(var/new_loc)
+ ..(new_loc, "Neara")
+
+/mob/living/carbon/human/stok/New(var/new_loc)
+ ..(new_loc, "Stok")
+
/mob/living/carbon/human/Bump(atom/movable/AM as mob|obj, yes)
if ((!( yes ) || now_pushing))
return
@@ -1079,9 +1091,6 @@
tinted += MT.tint
return tinted
-/mob/living/carbon/human/IsAdvancedToolUser()
- return 1//Humans can use guns and such
-
/mob/living/carbon/human/abiotic(var/full_body = 0)
if(full_body && ((src.l_hand && !(src.l_hand.flags & ABSTRACT)) || (src.r_hand && !(src.r_hand.flags & ABSTRACT)) || (src.back || src.wear_mask || src.head || src.shoes || src.w_uniform || src.wear_suit || src.glasses || src.l_ear || src.r_ear || src.gloves)))
@@ -1376,6 +1385,8 @@
vessel = null
make_blood()
+ maxHealth = species.total_health
+
if(species.language)
add_language(species.language)
@@ -1678,4 +1689,12 @@
return 1
/mob/living/carbon/human/InCritical()
- return (health <= config.health_threshold_crit && stat == UNCONSCIOUS)
\ No newline at end of file
+ return (health <= config.health_threshold_crit && stat == UNCONSCIOUS)
+
+
+/mob/living/carbon/human/IsAdvancedToolUser(var/silent)
+ if(species.has_fine_manipulation)
+ return 1
+ if(!silent)
+ src << "You don't have the dexterity to use that!"
+ return 0
\ No newline at end of file
diff --git a/code/modules/mob/living/carbon/human/human_attackpaw.dm b/code/modules/mob/living/carbon/human/human_attackpaw.dm
deleted file mode 100644
index 5df58e09631..00000000000
--- a/code/modules/mob/living/carbon/human/human_attackpaw.dm
+++ /dev/null
@@ -1,18 +0,0 @@
-/mob/living/carbon/human/attack_paw(mob/living/M as mob)
- ..()
- if (M.a_intent == "help")
- help_shake_act(M)
- else
- M.do_attack_animation(src)
- if (M.is_muzzled())
- return
-
- visible_message("[M.name] bites [src]!", \
- "[M.name] bites [src]!")
- playsound(loc, 'sound/weapons/bite.ogg', 50, 1, -1)
-
- var/damage = rand(1, 3)
- var/dam_zone = pick("chest", "l_hand", "r_hand", "l_leg", "r_leg")
- var/obj/item/organ/external/affecting = get_organ(ran_zone(dam_zone))
- apply_damage(damage, BRUTE, affecting, run_armor_check(affecting, "melee"))
- return
diff --git a/code/modules/mob/living/carbon/human/inventory.dm b/code/modules/mob/living/carbon/human/inventory.dm
index 01722c780ba..c5760170c68 100644
--- a/code/modules/mob/living/carbon/human/inventory.dm
+++ b/code/modules/mob/living/carbon/human/inventory.dm
@@ -345,10 +345,6 @@
name = "human"
var/mob/living/carbon/human/target = null
-/obj/effect/equip_e/monkey
- name = "monkey"
- var/mob/living/carbon/monkey/target = null
-
/obj/effect/equip_e/process()
return
diff --git a/code/modules/mob/living/carbon/human/life.dm b/code/modules/mob/living/carbon/human/life.dm
index 0a3faac7886..ad7508c5b8d 100644
--- a/code/modules/mob/living/carbon/human/life.dm
+++ b/code/modules/mob/living/carbon/human/life.dm
@@ -124,6 +124,9 @@ var/global/list/brutefireloss_overlays = list("1" = image("icon" = 'icons/mob/sc
handle_heartattack()
+ if(!client)
+ species.handle_npc(src)
+
if(stat == DEAD)
handle_decay()
diff --git a/code/modules/mob/living/carbon/human/npcs.dm b/code/modules/mob/living/carbon/human/npcs.dm
new file mode 100644
index 00000000000..a51a9cbd990
--- /dev/null
+++ b/code/modules/mob/living/carbon/human/npcs.dm
@@ -0,0 +1,13 @@
+/obj/item/clothing/under/punpun
+ name = "fancy uniform"
+ desc = "It looks like it was tailored for a monkey."
+ icon_state = "punpun"
+ _color = "punpun"
+ species_restricted = list("Monkey")
+
+/mob/living/carbon/human/monkey/punpun/New()
+ ..()
+ spawn(1)
+ name = "Pun Pun"
+ real_name = name
+ w_uniform = new /obj/item/clothing/under/punpun(src)
\ No newline at end of file
diff --git a/code/modules/mob/living/carbon/human/say.dm b/code/modules/mob/living/carbon/human/say.dm
index 53d6689d36e..538a1dbbf50 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/primitive/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
new file mode 100644
index 00000000000..08268e38994
--- /dev/null
+++ b/code/modules/mob/living/carbon/human/species/monkey.dm
@@ -0,0 +1,84 @@
+/datum/species/monkey
+ name = "Monkey"
+ blurb = "Ook."
+
+ icobase = 'icons/mob/human_races/monkeys/r_monkey.dmi'
+ deform = 'icons/mob/human_races/monkeys/r_monkey.dmi'
+ damage_overlays = 'icons/mob/human_races/masks/dam_monkey.dmi'
+ damage_mask = 'icons/mob/human_races/masks/dam_mask_monkey.dmi'
+ blood_mask = 'icons/mob/human_races/masks/blood_monkey.dmi'
+ path = /mob/living/carbon/human/monkey
+ language = null
+ default_language = "Chimpanzee"
+ greater_form = "Human"
+ is_small = 1
+ has_fine_manipulation = 0
+ ventcrawler = 1
+ show_ssd = 0
+ eyes = "blank_eyes"
+
+ tail = "chimptail"
+
+ //unarmed_types = list(/datum/unarmed_attack/bite, /datum/unarmed_attack/claws)
+ //inherent_verbs = list(/mob/living/proc/ventcrawl)
+ meat_type = /obj/item/weapon/reagent_containers/food/snacks/meat/monkey
+
+ total_health = 75
+ brute_mod = 1.5
+ burn_mod = 1.5
+
+ flags = IS_RESTRICTED
+
+/datum/species/monkey/handle_npc(var/mob/living/carbon/human/H)
+ if(H.stat != CONSCIOUS)
+ return
+ if(prob(33) && H.canmove && isturf(H.loc) && !H.pulledby) //won't move if being pulled
+ step(H, pick(cardinal))
+ if(prob(1))
+ H.emote(pick("scratch","jump","roll","tail"))
+
+datum/species/monkey/get_random_name(var/gender)
+ return
+
+/datum/species/monkey/handle_post_spawn(var/mob/living/carbon/human/H)
+ H.real_name = "[lowertext(name)] ([rand(100,999)])"
+ H.name = H.real_name
+ ..()
+
+/datum/species/monkey/tajaran
+ name = "Farwa"
+
+ icobase = 'icons/mob/human_races/monkeys/r_farwa.dmi'
+ deform = 'icons/mob/human_races/monkeys/r_farwa.dmi'
+
+ greater_form = "Tajaran"
+ default_language = "Farwa"
+ flesh_color = "#AFA59E"
+ base_color = "#333333"
+ tail = "farwatail"
+
+/datum/species/monkey/skrell
+ name = "Neara"
+
+ icobase = 'icons/mob/human_races/monkeys/r_neara.dmi'
+ deform = 'icons/mob/human_races/monkeys/r_neara.dmi'
+
+ greater_form = "Skrell"
+ default_language = "Neara"
+ flesh_color = "#8CD7A3"
+ blood_color = "#1D2CBF"
+ reagent_tag = IS_SKRELL
+ tail = null
+
+/datum/species/monkey/unathi
+ name = "Stok"
+
+ icobase = 'icons/mob/human_races/monkeys/r_stok.dmi'
+ deform = 'icons/mob/human_races/monkeys/r_stok.dmi'
+
+ tail = "stoktail"
+ greater_form = "Unathi"
+ default_language = "Stok"
+ flesh_color = "#34AF10"
+ base_color = "#066000"
+ reagent_tag = IS_UNATHI
diff --git a/code/modules/mob/living/carbon/human/species/species.dm b/code/modules/mob/living/carbon/human/species/species.dm
new file mode 100644
index 00000000000..f7bc6239a26
--- /dev/null
+++ b/code/modules/mob/living/carbon/human/species/species.dm
@@ -0,0 +1,362 @@
+/*
+ Datum-based species. Should make for much cleaner and easier to maintain mutantrace code.
+*/
+
+/datum/species
+ var/name // Species name.
+ var/path // Species path
+ var/icobase = 'icons/mob/human_races/r_human.dmi' // Normal icon set.
+ var/deform = 'icons/mob/human_races/r_def_human.dmi' // Mutated icon set.
+
+ // Damage overlay and masks.
+ var/damage_overlays = 'icons/mob/human_races/masks/dam_human.dmi'
+ var/damage_mask = 'icons/mob/human_races/masks/dam_mask_human.dmi'
+ var/blood_mask = 'icons/mob/human_races/masks/blood_human.dmi'
+
+ var/eyes = "eyes_s" // Icon for eyes.
+ var/blurb = "A completely nondescript species." // A brief lore summary for use in the chargen screen.
+
+ var/primitive_form // Lesser form, if any (ie. monkey for humans)
+ var/greater_form // Greater form, if any, ie. human for monkeys.
+ var/tail // Name of tail image in species effects icon file.
+ var/unarmed //For empty hand harm-intent attack
+ var/unarmed_type = /datum/unarmed_attack
+ var/slowdown = 0 // Passive movement speed malus (or boost, if negative)
+
+ var/breath_type = "oxygen" // Non-oxygen gas breathed, if any.
+ var/poison_type = "plasma" // Poisonous air.
+ var/exhale_type = "carbon_dioxide" // Exhaled gas type.
+
+ var/cold_level_1 = 260 // Cold damage level 1 below this point.
+ var/cold_level_2 = 200 // Cold damage level 2 below this point.
+ var/cold_level_3 = 120 // Cold damage level 3 below this point.
+
+ var/heat_level_1 = 360 // Heat damage level 1 above this point.
+ var/heat_level_2 = 400 // Heat damage level 2 above this point.
+ var/heat_level_3 = 460 // Heat damage level 3 above this point; used for body temperature
+ var/heat_level_3_breathe = 1000 // Heat damage level 3 above this point; used for breathed air temperature
+
+ var/body_temperature = 310.15 //non-IS_SYNTHETIC species will try to stabilize at this temperature. (also affects temperature processing)
+ var/synth_temp_gain = 0 //IS_SYNTHETIC species will gain this much temperature every second
+ var/reagent_tag //Used for metabolizing reagents.
+
+ var/darksight = 2
+ var/hazard_high_pressure = HAZARD_HIGH_PRESSURE // Dangerously high pressure.
+ var/warning_high_pressure = WARNING_HIGH_PRESSURE // High pressure warning.
+ var/warning_low_pressure = WARNING_LOW_PRESSURE // Low pressure warning.
+ var/hazard_low_pressure = HAZARD_LOW_PRESSURE // Dangerously low pressure.
+
+ var/brute_mod = null // Physical damage reduction/malus.
+ var/burn_mod = null // Burn damage reduction/malus.
+
+ var/light_dam //Light level above which species takes damage, and below which it heals.
+ var/light_effect_amp //If 0, takes/heals 1 burn and brute per tick. Otherwise, both healing and damage effects are amplified.
+
+ var/total_health = 100
+ var/max_hurt_damage = 9 // Max melee damage dealt + 5 if hulk
+ var/list/default_genes = list()
+
+ var/ventcrawler = 0 //Determines if the mob can go through the vents.
+ var/has_fine_manipulation = 1 // Can use small items.
+
+ var/flags = 0 // Various specific features.
+ var/bloodflags=0
+ var/bodyflags=0
+ var/dietflags = 0 // Make sure you set this, otherwise it won't be able to digest a lot of foods
+
+ var/list/abilities = list() // For species-derived or admin-given powers
+
+ var/blood_color = "#A10808" //Red.
+ var/flesh_color = "#FFC896" //Pink.
+ var/single_gib_type = /obj/effect/decal/cleanable/blood/gibs
+ var/meat_type = /obj/item/weapon/reagent_containers/food/snacks/meat/human
+
+ var/base_color //Used when setting species.
+
+ //Used in icon caching.
+ var/race_key = 0
+ var/icon/icon_template
+ var/is_small
+ var/show_ssd = 1
+
+ // Language/culture vars.
+ var/default_language = "Galactic Common" // Default language is used when 'say' is used without modifiers.
+ var/language = "Galactic Common" // Default racial language, if any.
+ var/secondary_langs = list() // The names of secondary languages that are available to this species.
+ var/list/speech_sounds // A list of sounds to potentially play when speaking.
+ var/list/speech_chance // The likelihood of a speech sound playing.
+
+ // Determines the organs that the species spawns with and
+ var/list/has_organ = list( // which required-organ checks are conducted.
+ "heart" = /obj/item/organ/heart,
+ "lungs" = /obj/item/organ/lungs,
+ "liver" = /obj/item/organ/liver,
+ "kidneys" = /obj/item/organ/kidneys,
+ "brain" = /obj/item/organ/brain,
+ "appendix" = /obj/item/organ/appendix,
+ "eyes" = /obj/item/organ/eyes
+ )
+
+ var/list/has_limbs = list(
+ "chest" = list("path" = /obj/item/organ/external/chest),
+ "groin" = list("path" = /obj/item/organ/external/groin),
+ "head" = list("path" = /obj/item/organ/external/head),
+ "l_arm" = list("path" = /obj/item/organ/external/arm),
+ "r_arm" = list("path" = /obj/item/organ/external/arm/right),
+ "l_leg" = list("path" = /obj/item/organ/external/leg),
+ "r_leg" = list("path" = /obj/item/organ/external/leg/right),
+ "l_hand" = list("path" = /obj/item/organ/external/hand),
+ "r_hand" = list("path" = /obj/item/organ/external/hand/right),
+ "l_foot" = list("path" = /obj/item/organ/external/foot),
+ "r_foot" = list("path" = /obj/item/organ/external/foot/right)
+ )
+
+/datum/species/New()
+ unarmed = new unarmed_type()
+
+/datum/species/proc/get_random_name(var/gender)
+ var/datum/language/species_language = all_languages[language]
+ return species_language.get_random_name(gender)
+
+/datum/species/proc/create_organs(var/mob/living/carbon/human/H) //Handles creation of mob organs.
+
+ for(var/obj/item/organ/organ in H.contents)
+ if((organ in H.organs) || (organ in H.internal_organs))
+ del(organ)
+
+ if(H.organs) H.organs.Cut()
+ if(H.internal_organs) H.internal_organs.Cut()
+ if(H.organs_by_name) H.organs_by_name.Cut()
+ if(H.internal_organs_by_name) H.internal_organs_by_name.Cut()
+
+ H.organs = list()
+ H.internal_organs = list()
+ H.organs_by_name = list()
+ H.internal_organs_by_name = list()
+
+ for(var/limb_type in has_limbs)
+ var/list/organ_data = has_limbs[limb_type]
+ var/limb_path = organ_data["path"]
+ var/obj/item/organ/O = new limb_path(H)
+ organ_data["descriptor"] = O.name
+
+ for(var/organ in has_organ)
+ var/organ_type = has_organ[organ]
+ H.internal_organs_by_name[organ] = new organ_type(H,1)
+
+ for(var/name in H.organs_by_name)
+ H.organs |= H.organs_by_name[name]
+
+ for(var/obj/item/organ/external/O in H.organs)
+ O.owner = H
+
+ if(flags & IS_SYNTHETIC)
+ for(var/obj/item/organ/external/E in H.organs)
+ if(E.status & ORGAN_CUT_AWAY || E.status & ORGAN_DESTROYED) continue
+ E.robotize()
+ for(var/obj/item/organ/I in H.internal_organs)
+ I.robotize()
+
+
+/datum/species/proc/handle_breath(var/datum/gas_mixture/breath, var/mob/living/carbon/human/H)
+ 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.005
+ var/SA_para_min = 1
+ var/SA_sleep_min = 5
+ var/oxygen_used = 0
+ var/nitrogen_used = 0
+ var/breath_pressure = (breath.total_moles()*R_IDEAL_GAS_EQUATION*breath.temperature)/BREATH_VOLUME
+ var/vox_oxygen_max = 1 // For vox.
+
+ //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 // Tweaking to fit the hacky bullshit I've done with atmo -- TLE
+ // Nitrogen, for Vox.
+ var/Nitrogen_pp = (breath.nitrogen/breath.total_moles())*breath_pressure
+
+ // TODO: Split up into Voxs' own proc.
+ if(O2_pp < safe_oxygen_min && name != "Vox") // Too little oxygen
+ if(prob(20))
+ spawn(0)
+ H.emote("gasp")
+ if(O2_pp > 0)
+ var/ratio = safe_oxygen_min/O2_pp
+ H.adjustOxyLoss(min(5*ratio, HUMAN_MAX_OXYLOSS)) // Don't fuck them up too fast (space only does HUMAN_MAX_OXYLOSS after all!)
+ H.failed_last_breath = 1
+ oxygen_used = breath.oxygen*ratio/6
+ else
+ H.adjustOxyLoss(HUMAN_MAX_OXYLOSS)
+ H.failed_last_breath = 1
+ H.oxygen_alert = max(H.oxygen_alert, 1)
+ else if(Nitrogen_pp < safe_oxygen_min && name == "Vox") //Vox breathe nitrogen, not oxygen.
+
+ if(prob(20))
+ spawn(0) H.emote("gasp")
+ if(Nitrogen_pp > 0)
+ var/ratio = safe_oxygen_min/Nitrogen_pp
+ H.adjustOxyLoss(min(5*ratio, HUMAN_MAX_OXYLOSS))
+ H.failed_last_breath = 1
+ nitrogen_used = breath.nitrogen*ratio/6
+ else
+ H.adjustOxyLoss(HUMAN_MAX_OXYLOSS)
+ H.failed_last_breath = 1
+ H.oxygen_alert = max(H.oxygen_alert, 1)
+
+ else // We're in safe limits
+ H.failed_last_breath = 0
+ H.adjustOxyLoss(-5)
+ oxygen_used = breath.oxygen/6
+ H.oxygen_alert = 0
+
+ breath.oxygen -= oxygen_used
+ breath.nitrogen -= nitrogen_used
+ breath.carbon_dioxide += oxygen_used
+
+ //CO2 does not affect failed_last_breath. So if there was enough oxygen in the air but too much co2, this will hurt you, but only once per 4 ticks, instead of once per tick.
+ if(CO2_pp > safe_co2_max)
+ if(!H.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.
+ H.co2overloadtime = world.time
+ else if(world.time - H.co2overloadtime > 120)
+ H.Paralyse(3)
+ H.adjustOxyLoss(3) // Lets hurt em a little, let them know we mean business
+ if(world.time - H.co2overloadtime > 300) // They've been in here 30s now, lets start to kill them for their own good!
+ H.adjustOxyLoss(8)
+ if(prob(20)) // Lets give them some chance to know somethings not right though I guess.
+ spawn(0) H.emote("cough")
+
+ else
+ H.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(H.reagents)
+ H.reagents.add_reagent("plasma", Clamp(ratio, MIN_PLASMA_DAMAGE, MAX_PLASMA_DAMAGE))
+ H.toxins_alert = max(H.toxins_alert, 1)
+
+ else if(O2_pp > vox_oxygen_max && name == "Vox") //Oxygen is toxic to vox.
+ var/ratio = (breath.oxygen/vox_oxygen_max) * 1000
+ H.adjustToxLoss(Clamp(ratio, MIN_PLASMA_DAMAGE, MAX_PLASMA_DAMAGE))
+ H.toxins_alert = max(H.toxins_alert, 1)
+ else
+ H.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
+ H.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
+ H.sleeping = max(H.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) H.emote(pick("giggle", "laugh"))
+
+ handle_temperature(breath, H)
+
+ return 1
+
+/datum/species/proc/handle_temperature(datum/gas_mixture/breath, var/mob/living/carbon/human/H) // called by human/life, handles temperatures
+ if( (abs(310.15 - breath.temperature) > 50) && !(RESIST_HEAT in H.mutations)) // Hot air hurts :(
+ if(H.status_flags & GODMODE) return 1 //godmode
+ if(breath.temperature < cold_level_1)
+ if(prob(20))
+ H << "\red You feel your face freezing and an icicle forming in your lungs!"
+ else if(breath.temperature > heat_level_1)
+ if(prob(20))
+ H << "\red You feel your face burning and a searing heat in your lungs!"
+
+
+
+ switch(breath.temperature)
+ if(-INFINITY to cold_level_3)
+ H.apply_damage(COLD_GAS_DAMAGE_LEVEL_3, BURN, "head", used_weapon = "Excessive Cold")
+ H.fire_alert = max(H.fire_alert, 1)
+
+ if(cold_level_3 to cold_level_2)
+ H.apply_damage(COLD_GAS_DAMAGE_LEVEL_2, BURN, "head", used_weapon = "Excessive Cold")
+ H.fire_alert = max(H.fire_alert, 1)
+
+ if(cold_level_2 to cold_level_1)
+ H.apply_damage(COLD_GAS_DAMAGE_LEVEL_1, BURN, "head", used_weapon = "Excessive Cold")
+ H.fire_alert = max(H.fire_alert, 1)
+
+ if(heat_level_1 to heat_level_2)
+ H.apply_damage(HEAT_GAS_DAMAGE_LEVEL_1, BURN, "head", used_weapon = "Excessive Heat")
+ H.fire_alert = max(H.fire_alert, 2)
+
+ if(heat_level_2 to heat_level_3_breathe)
+ H.apply_damage(HEAT_GAS_DAMAGE_LEVEL_2, BURN, "head", used_weapon = "Excessive Heat")
+ H.fire_alert = max(H.fire_alert, 2)
+
+ if(heat_level_3_breathe to INFINITY)
+ H.apply_damage(HEAT_GAS_DAMAGE_LEVEL_3, BURN, "head", used_weapon = "Excessive Heat")
+ H.fire_alert = max(H.fire_alert, 2)
+ return
+
+/datum/species/proc/handle_post_spawn(var/mob/living/carbon/C) //Handles anything not already covered by basic species assignment.
+ handle_dna(C)
+ return
+
+/datum/species/proc/handle_dna(var/mob/living/carbon/C, var/remove) //Handles DNA mutations, as that doesn't work at init.
+ return
+
+// Used for species-specific names (Vox, etc)
+/datum/species/proc/makeName(var/gender,var/mob/living/carbon/human/H=null)
+ if(gender==FEMALE) return capitalize(pick(first_names_female)) + " " + capitalize(pick(last_names))
+ else return capitalize(pick(first_names_male)) + " " + capitalize(pick(last_names))
+
+/datum/species/proc/handle_death(var/mob/living/carbon/human/H) //Handles any species-specific death events (such as dionaea nymph spawns).
+ return
+
+/datum/species/proc/handle_attack_hand(var/mob/living/carbon/human/H, var/mob/living/carbon/human/M) //Handles any species-specific attackhand events.
+ return
+
+/datum/species/proc/say_filter(mob/M, message, datum/language/speaking)
+ return message
+
+/datum/species/proc/equip(var/mob/living/carbon/human/H)
+ return
+
+/datum/species/proc/can_understand(var/mob/other)
+ return
+
+// Called in life() when the mob has no client.
+/datum/species/proc/handle_npc(var/mob/living/carbon/human/H)
+ return
+
+//Species unarmed attacks
+
+/datum/unarmed_attack
+ var/attack_verb = list("attack") // Empty hand hurt intent verb.
+ var/damage = 0 // Extra empty hand attack damage.
+ var/attack_sound = "punch"
+ var/miss_sound = 'sound/weapons/punchmiss.ogg'
+ var/sharp = 0
+ var/edge = 0
+
+/datum/unarmed_attack/punch
+ attack_verb = list("punch")
+
+/datum/unarmed_attack/punch/weak
+ attack_verb = list("flail")
+ damage = 1
+
+/datum/unarmed_attack/diona
+ attack_verb = list("lash", "bludgeon")
+
+/datum/unarmed_attack/claws
+ attack_verb = list("scratch", "claw")
+ attack_sound = 'sound/weapons/slice.ogg'
+ miss_sound = 'sound/weapons/slashmiss.ogg'
+ sharp = 1
+ edge = 1
+
+/datum/unarmed_attack/claws/armalis
+ attack_verb = list("slash", "claw")
+ damage = 6 //they're huge! they should do a little more damage, i'd even go for 15-20 maybe...
diff --git a/code/modules/mob/living/carbon/human/species/station.dm b/code/modules/mob/living/carbon/human/species/station.dm
new file mode 100644
index 00000000000..02468e8c8ab
--- /dev/null
+++ b/code/modules/mob/living/carbon/human/species/station.dm
@@ -0,0 +1,457 @@
+/datum/species/human
+ name = "Human"
+ icobase = 'icons/mob/human_races/r_human.dmi'
+ deform = 'icons/mob/human_races/r_def_human.dmi'
+ primitive_form = "Monkey"
+ path = /mob/living/carbon/human/human
+ language = "Sol Common"
+ flags = HAS_LIPS | HAS_UNDERWEAR | CAN_BE_FAT
+ bodyflags = HAS_SKIN_TONE
+ dietflags = DIET_OMNI
+ unarmed_type = /datum/unarmed_attack/punch
+ blurb = "Humanity originated in the Sol system, and over the last five centuries has spread \
+ colonies across a wide swathe of space. They hold a wide range of forms and creeds.
\
+ While the central Sol government maintains control of its far-flung people, powerful corporate \
+ interests, rampant cyber and bio-augmentation and secretive factions make life on most human \
+ worlds tumultous at best."
+
+/datum/species/unathi
+ name = "Unathi"
+ icobase = 'icons/mob/human_races/r_lizard.dmi'
+ deform = 'icons/mob/human_races/r_def_lizard.dmi'
+ path = /mob/living/carbon/human/unathi
+ default_language = "Galactic Common"
+ language = "Sinta'unathi"
+ tail = "sogtail"
+ unarmed_type = /datum/unarmed_attack/claws
+ primitive_form = "Stok"
+ darksight = 3
+
+ blurb = "A heavily reptillian species, Unathi (or 'Sinta as they call themselves) hail from the \
+ Uuosa-Eso system, which roughly translates to 'burning mother'.
Coming from a harsh, radioactive \
+ desert planet, they mostly hold ideals of honesty, virtue, martial combat and bravery above all \
+ else, frequently even their own lives. They prefer warmer temperatures than most species and \
+ their native tongue is a heavy hissing laungage called Sinta'Unathi."
+
+ flags = HAS_LIPS | HAS_UNDERWEAR
+ bodyflags = FEET_CLAWS | HAS_TAIL | HAS_SKIN_COLOR | TAIL_WAGGING
+ dietflags = DIET_CARN
+
+ cold_level_1 = 280 //Default 260 - Lower is better
+ cold_level_2 = 220 //Default 200
+ cold_level_3 = 140 //Default 120
+
+ heat_level_1 = 380 //Default 360 - Higher is better
+ heat_level_2 = 420 //Default 400
+ heat_level_3 = 480 //Default 460
+ heat_level_3_breathe = 1100 //Default 1000
+
+ flesh_color = "#34AF10"
+
+ reagent_tag = IS_UNATHI
+ base_color = "#066000"
+
+/datum/species/unathi/handle_death(var/mob/living/carbon/human/H)
+
+ H.stop_tail_wagging(1)
+
+/datum/species/tajaran
+ name = "Tajaran"
+ icobase = 'icons/mob/human_races/r_tajaran.dmi'
+ deform = 'icons/mob/human_races/r_def_tajaran.dmi'
+ path = /mob/living/carbon/human/tajaran
+ default_language = "Galactic Common"
+ language = "Siik'tajr"
+ tail = "tajtail"
+ unarmed_type = /datum/unarmed_attack/claws
+ darksight = 8
+
+ blurb = "The Tajaran race is a species of feline-like bipeds hailing from the planet of Ahdomai in the \
+ S'randarr system. They have been brought up into the space age by the Humans and Skrell, and have been \
+ influenced heavily by their long history of Slavemaster rule. They have a structured, clan-influenced way \
+ of family and politics. They prefer colder environments, and speak a variety of languages, mostly Siik'Maas, \
+ using unique inflections their mouths form."
+
+ cold_level_1 = 240
+ cold_level_2 = 180
+ cold_level_3 = 100
+
+ heat_level_1 = 340
+ heat_level_2 = 380
+ heat_level_3 = 440
+ heat_level_3_breathe = 900
+
+ primitive_form = "Farwa"
+
+ flags = HAS_LIPS | HAS_UNDERWEAR | CAN_BE_FAT
+ bodyflags = FEET_PADDED | HAS_TAIL | HAS_SKIN_COLOR | TAIL_WAGGING
+ dietflags = DIET_OMNI
+
+ flesh_color = "#AFA59E"
+ base_color = "#333333"
+
+/datum/species/tajaran/handle_death(var/mob/living/carbon/human/H)
+
+ H.stop_tail_wagging(1)
+
+/datum/species/vulpkanin
+ name = "Vulpkanin"
+ icobase = 'icons/mob/human_races/r_vulpkanin.dmi'
+ deform = 'icons/mob/human_races/r_vulpkanin.dmi'
+ path = /mob/living/carbon/human/vulpkanin
+ default_language = "Galactic Common"
+ language = "Canilunzt"
+ tail = "vulptail"
+ unarmed_type = /datum/unarmed_attack/claws
+ darksight = 8
+
+ blurb = "Vulpkanin are a species of sharp-witted canine-pideds residing on the planet Altam just barely within the \
+ dual-star Vazzend system. Their politically de-centralized society and independent natures have led them to become a species and \
+ culture both feared and respected for their scientific breakthroughs. Discovery, loyalty, and utilitarianism dominates their lifestyles \
+ to the degree it can cause conflict with more rigorous and strict authorities. They speak a guttural language known as 'Canilunzt' \
+ which has a heavy emphasis on utilizing tail positioning and ear twitches to communicate intent."
+
+ flags = HAS_LIPS | HAS_UNDERWEAR
+ bodyflags = FEET_PADDED | HAS_TAIL | HAS_SKIN_COLOR | TAIL_WAGGING
+ dietflags = DIET_OMNI
+
+ flesh_color = "#966464"
+ base_color = "#BE8264"
+
+/datum/species/vulpkanin/handle_death(var/mob/living/carbon/human/H)
+
+ H.stop_tail_wagging(1)
+
+/datum/species/skrell
+ name = "Skrell"
+ icobase = 'icons/mob/human_races/r_skrell.dmi'
+ deform = 'icons/mob/human_races/r_def_skrell.dmi'
+ path = /mob/living/carbon/human/skrell
+ default_language = "Galactic Common"
+ language = "Skrellian"
+ primitive_form = "Neara"
+ unarmed_type = /datum/unarmed_attack/punch
+
+ blurb = "An amphibious species, Skrell come from the star system known as Qerr'Vallis, which translates to 'Star of \
+ the royals' or 'Light of the Crown'.
Skrell are a highly advanced and logical race who live under the rule \
+ of the Qerr'Katish, a caste within their society which keeps the empire of the Skrell running smoothly. Skrell are \
+ herbivores on the whole and tend to be co-operative with the other species of the galaxy, although they rarely reveal \
+ the secrets of their empire to their allies."
+
+ flags = HAS_LIPS | HAS_UNDERWEAR
+ bodyflags = HAS_SKIN_COLOR
+ dietflags = DIET_HERB
+
+ flesh_color = "#8CD7A3"
+ blood_color = "#1D2CBF"
+ reagent_tag = IS_SKRELL
+
+/datum/species/vox
+ name = "Vox"
+ icobase = 'icons/mob/human_races/r_vox.dmi'
+ deform = 'icons/mob/human_races/r_def_vox.dmi'
+ path = /mob/living/carbon/human/vox
+
+ default_language = "Galactic Common"
+ language = "Vox-pidgin"
+ speech_sounds = list('sound/voice/shriek1.ogg')
+ speech_chance = 20
+
+ unarmed_type = /datum/unarmed_attack/claws //I dont think it will hurt to give vox claws too.
+
+ blurb = "The Vox are the broken remnants of a once-proud race, now reduced to little more than \
+ scavenging vermin who prey on isolated stations, ships or planets to keep their own ancient arkships \
+ alive. They are four to five feet tall, reptillian, beaked, tailed and quilled; human crews often \
+ refer to them as 'shitbirds' for their violent and offensive nature, as well as their horrible \
+ smell.
Most humans will never meet a Vox raider, instead learning of this insular species through \
+ dealing with their traders and merchants; those that do rarely enjoy the experience."
+
+ warning_low_pressure = 50
+ hazard_low_pressure = 0
+
+ cold_level_1 = 80
+ cold_level_2 = 50
+ cold_level_3 = 0
+
+ eyes = "vox_eyes_s"
+
+ breath_type = "nitrogen"
+ poison_type = "oxygen"
+
+ flags = NO_SCAN | IS_WHITELISTED
+ dietflags = DIET_OMNI
+
+ blood_color = "#2299FC"
+ flesh_color = "#808D11"
+
+ reagent_tag = IS_VOX
+
+ makeName(var/gender,var/mob/living/carbon/human/H=null)
+ var/sounds = rand(2,8)
+ var/i = 0
+ var/newname = ""
+
+ while(i<=sounds)
+ i++
+ newname += pick(vox_name_syllables)
+ return capitalize(newname)
+/*
+/datum/species/vox/handle_post_spawn(var/mob/living/carbon/human/H)
+
+ H.verbs += /mob/living/carbon/human/proc/leap
+ ..() */
+
+/datum/species/vox/armalis/handle_post_spawn(var/mob/living/carbon/human/H)
+
+ H.verbs += /mob/living/carbon/human/proc/gut
+ ..()
+
+/datum/species/vox/armalis
+ name = "Vox Armalis"
+ icobase = 'icons/mob/human_races/r_armalis.dmi'
+ deform = 'icons/mob/human_races/r_armalis.dmi'
+ path = /mob/living/carbon/human/voxarmalis
+ unarmed_type = /datum/unarmed_attack/claws/armalis
+
+ warning_low_pressure = 50
+ hazard_low_pressure = 0
+
+ cold_level_1 = 80
+ cold_level_2 = 50
+ cold_level_3 = 0
+
+ heat_level_1 = 2000
+ heat_level_2 = 3000
+ heat_level_3 = 4000
+ heat_level_3_breathe = 4000
+
+ brute_mod = 0.2
+ burn_mod = 0.2
+
+ eyes = "blank_eyes"
+ breath_type = "nitrogen"
+ poison_type = "oxygen"
+
+ flags = NO_SCAN | NO_BLOOD | HAS_TAIL | NO_PAIN | IS_WHITELISTED
+ dietflags = DIET_OMNI //should inherit this from vox, this is here just in case
+
+ blood_color = "#2299FC"
+ flesh_color = "#808D11"
+
+ reagent_tag = IS_VOX
+
+ tail = "armalis_tail"
+ icon_template = 'icons/mob/human_races/r_armalis.dmi'
+
+ has_organ = list(
+ "heart" = /obj/item/organ/heart,
+ "lungs" = /obj/item/organ/lungs,
+ "liver" = /obj/item/organ/liver,
+ "kidneys" = /obj/item/organ/kidneys,
+ "brain" = /obj/item/organ/brain,
+ "eyes" = /obj/item/organ/eyes,
+ "stack" = /obj/item/organ/stack/vox
+ )
+
+/datum/species/kidan
+ name = "Kidan"
+ icobase = 'icons/mob/human_races/r_kidan.dmi'
+ deform = 'icons/mob/human_races/r_def_kidan.dmi'
+ path = /mob/living/carbon/human/kidan
+ default_language = "Galactic Common"
+ language = "Chittin"
+ unarmed_type = /datum/unarmed_attack/claws
+
+ brute_mod = 0.8
+
+ flags = IS_WHITELISTED
+ bodyflags = FEET_CLAWS
+ dietflags = DIET_HERB
+
+ blood_color = "#FB9800"
+
+
+/datum/species/slime
+ name = "Slime People"
+ default_language = "Galactic Common"
+ language = "Bubblish"
+ icobase = 'icons/mob/human_races/r_slime.dmi'
+ deform = 'icons/mob/human_races/r_slime.dmi'
+ path = /mob/living/carbon/human/slime
+ unarmed_type = /datum/unarmed_attack/punch
+
+ flags = IS_WHITELISTED | NO_BREATHE | HAS_LIPS | NO_INTORGANS | NO_SCAN
+ bodyflags = HAS_SKIN_COLOR
+ bloodflags = BLOOD_SLIME
+ dietflags = DIET_CARN
+
+ //ventcrawler = 1 //ventcrawling commented out
+
+ has_organ = list(
+ "brain" = /obj/item/organ/brain/slime
+ )
+
+/datum/species/grey
+ name = "Grey"
+ icobase = 'icons/mob/human_races/r_grey.dmi'
+ deform = 'icons/mob/human_races/r_def_grey.dmi'
+ default_language = "Galactic Common"
+ //language = "Grey" // Perhaps if they ever get a hivemind
+ unarmed_type = /datum/unarmed_attack/punch
+ darksight = 5 // BOOSTED from 2
+ eyes = "grey_eyes_s"
+
+ brute_mod = 1.25 //greys are fragile
+
+ default_genes = list(REMOTE_TALK)
+
+
+ flags = IS_WHITELISTED | HAS_LIPS | HAS_UNDERWEAR | CAN_BE_FAT
+ dietflags = DIET_HERB
+
+ blood_color = "#A200FF"
+
+/datum/species/grey/handle_dna(var/mob/living/carbon/C, var/remove)
+ if(!remove)
+ C.dna.SetSEState(REMOTETALKBLOCK,1,1)
+ C.mutations |= REMOTE_TALK
+ genemutcheck(C,REMOTETALKBLOCK,null,MUTCHK_FORCED)
+ else
+ C.dna.SetSEState(REMOTETALKBLOCK,0,1)
+ C.mutations -= REMOTE_TALK
+ genemutcheck(C,REMOTETALKBLOCK,null,MUTCHK_FORCED)
+ C.update_mutations()
+ ..()
+
+/datum/species/diona
+ name = "Diona"
+ icobase = 'icons/mob/human_races/r_diona.dmi'
+ deform = 'icons/mob/human_races/r_def_plant.dmi'
+ path = /mob/living/carbon/human/diona
+ default_language = "Galactic Common"
+ language = "Rootspeak"
+ unarmed_type = /datum/unarmed_attack/diona
+ //primitive_form = "Nymph"
+ slowdown = 5
+
+ warning_low_pressure = 50
+ hazard_low_pressure = -1
+
+ cold_level_1 = 50
+ cold_level_2 = -1
+ cold_level_3 = -1
+
+ heat_level_1 = 300
+ heat_level_2 = 340
+ heat_level_3 = 400
+ heat_level_3_breathe = 700
+
+ blurb = "Commonly referred to (erroneously) as 'plant people', the Dionaea are a strange space-dwelling collective \
+ species hailing from Epsilon Ursae Minoris. Each 'diona' is a cluster of numerous cat-sized organisms called nymphs; \
+ there is no effective upper limit to the number that can fuse in gestalt, and reports exist of the Epsilon Ursae \
+ Minoris primary being ringed with a cloud of singing space-station-sized entities.
The Dionaea coexist peacefully with \
+ all known species, especially the Skrell. Their communal mind makes them slow to react, and they have difficulty understanding \
+ even the simplest concepts of other minds. Their alien physiology allows them survive happily off a diet of nothing but light, \
+ water and other radiation."
+
+ flags = NO_BREATHE | REQUIRE_LIGHT | IS_PLANT | RAD_ABSORB | NO_BLOOD | NO_PAIN
+ dietflags = 0 //Diona regenerate nutrition in light, no diet necessary
+
+ body_temperature = T0C + 15 //make the plant people have a bit lower body temperature, why not
+
+ blood_color = "#004400"
+ flesh_color = "#907E4A"
+
+ reagent_tag = IS_DIONA
+
+ has_organ = list(
+ "nutrient channel" = /obj/item/organ/diona/nutrients,
+ "neural strata" = /obj/item/organ/diona/strata,
+ "response node" = /obj/item/organ/diona/node,
+ "gas bladder" = /obj/item/organ/diona/bladder,
+ "polyp segment" = /obj/item/organ/diona/polyp,
+ "anchoring ligament" = /obj/item/organ/diona/ligament
+ )
+
+ has_limbs = list(
+ "chest" = list("path" = /obj/item/organ/external/diona/chest),
+ "groin" = list("path" = /obj/item/organ/external/diona/groin),
+ "head" = list("path" = /obj/item/organ/external/diona/head),
+ "l_arm" = list("path" = /obj/item/organ/external/diona/arm),
+ "r_arm" = list("path" = /obj/item/organ/external/diona/arm/right),
+ "l_leg" = list("path" = /obj/item/organ/external/diona/leg),
+ "r_leg" = list("path" = /obj/item/organ/external/diona/leg/right),
+ "l_hand" = list("path" = /obj/item/organ/external/diona/hand),
+ "r_hand" = list("path" = /obj/item/organ/external/diona/hand/right),
+ "l_foot" = list("path" = /obj/item/organ/external/diona/foot),
+ "r_foot" = list("path" = /obj/item/organ/external/diona/foot/right)
+ )
+
+/datum/species/diona/can_understand(var/mob/other)
+ var/mob/living/carbon/primitive/diona/D = other
+ if(istype(D))
+ return 1
+ return 0
+
+/datum/species/diona/handle_post_spawn(var/mob/living/carbon/human/H)
+ H.gender = NEUTER
+
+ return ..()
+
+/* //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/primitive/diona/S = new(get_turf(H))
+
+ if(H.mind)
+ H.mind.transfer_to(S)
+ else
+ S.key = H.key
+
+ for(var/mob/living/carbon/primitive/diona/D in H.contents)
+ if(D.client)
+ D.loc = H.loc
+ else
+ del(D)
+
+ H.visible_message("\red[H] splits apart with a wet slithering noise!") */
+
+/datum/species/machine
+ name = "Machine"
+ icobase = 'icons/mob/human_races/r_machine.dmi'
+ deform = 'icons/mob/human_races/r_machine.dmi'
+ path = /mob/living/carbon/human/machine
+ default_language = "Galactic Common"
+ language = "Trinary"
+ unarmed_type = /datum/unarmed_attack/punch
+
+ eyes = "blank_eyes"
+ brute_mod = 1.5
+ burn_mod = 1.5
+
+ cold_level_1 = 50
+ cold_level_2 = -1
+ cold_level_3 = -1
+
+ heat_level_1 = 500 //gives them about 25 seconds in space before taking damage
+ heat_level_2 = 540
+ heat_level_3 = 600
+ heat_level_3_breathe = 600
+
+ synth_temp_gain = 10 //this should cause IPCs to stabilize at ~80 C in a 20 C environment.
+
+ flags = IS_WHITELISTED | NO_BREATHE | NO_SCAN | NO_BLOOD | NO_PAIN | IS_SYNTHETIC | NO_INTORGANS
+ dietflags = 0 //IPCs can't eat, so no diet
+ blood_color = "#1F181F"
+ flesh_color = "#AAAAAA"
+
+/datum/species/machine/handle_death(var/mob/living/carbon/human/H)
+ H.emote("deathgasp")
+ for(var/organ_name in H.organs_by_name)
+ if (organ_name == "head") // do the head last as that's when the user will be transfered to the posibrain
+ continue
+ var/obj/item/organ/external/O = H.organs_by_name[organ_name]
+ if(O && (O.body_part != UPPER_TORSO) && (O.body_part != LOWER_TORSO)) // We're making them fall apart, not gibbing them!
+ O.droplimb(1)
+ var/obj/item/organ/external/O = H.organs_by_name["head"]
+ if(O) O.droplimb(1)
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 8eef19e0a01..25c197c70f5 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/carbon/monkey/diona.dm b/code/modules/mob/living/carbon/primitive/dionaold.dm
similarity index 83%
rename from code/modules/mob/living/carbon/monkey/diona.dm
rename to code/modules/mob/living/carbon/primitive/dionaold.dm
index 9a0612d0a30..9024e4e49a4 100644
--- a/code/modules/mob/living/carbon/monkey/diona.dm
+++ b/code/modules/mob/living/carbon/primitive/dionaold.dm
@@ -3,7 +3,7 @@
*/
//Mob defines.
-/mob/living/carbon/monkey/diona
+/mob/living/carbon/primitive/diona
name = "diona nymph"
voice_name = "diona nymph"
speak_emote = list("chirrups")
@@ -12,22 +12,22 @@
var/ready_evolve = 0
ventcrawler = 1
-/mob/living/carbon/monkey/diona/New()
+/mob/living/carbon/primitive/diona/New()
..()
gender = NEUTER
- greaterform = "Diona"
+ //greaterform = "Diona"
add_language("Rootspeak")
-/mob/living/carbon/monkey/diona/attack_hand(mob/living/carbon/human/M as mob)
+/mob/living/carbon/primitive/diona/attack_hand(mob/living/carbon/human/M as mob)
//Let people pick the little buggers up.
if(M.a_intent == "help")
if(M.species && M.species.name == "Diona")
M << "You feel your being twine with that of [src] as it merges with your biomass."
src << "You feel your being twine with that of [M] as you merge with its biomass."
- src.verbs += /mob/living/carbon/monkey/diona/proc/split
- src.verbs -= /mob/living/carbon/monkey/diona/proc/merge
+ src.verbs += /mob/living/carbon/primitive/diona/proc/split
+ src.verbs -= /mob/living/carbon/primitive/diona/proc/merge
src.loc = M
else
var/obj/item/weapon/holder/diona/D = new(loc)
@@ -41,23 +41,23 @@
..()
-/mob/living/carbon/monkey/diona/New()
+/mob/living/carbon/primitive/diona/New()
..()
gender = NEUTER
- greaterform = "Diona"
+ //greaterform = "Diona"
add_language("Rootspeak")
- src.verbs += /mob/living/carbon/monkey/diona/proc/merge
+ src.verbs += /mob/living/carbon/primitive/diona/proc/merge
-/mob/living/carbon/monkey/diona/proc/merge()
+/mob/living/carbon/primitive/diona/proc/merge()
set category = "Diona"
set name = "Merge with gestalt"
set desc = "Merge with another diona."
if(istype(src.loc,/mob/living/carbon))
- src.verbs -= /mob/living/carbon/monkey/diona/proc/merge
+ src.verbs -= /mob/living/carbon/primitive/diona/proc/merge
return
var/list/choices = list()
@@ -80,19 +80,19 @@
src << "You feel your being twine with that of [M] as you merge with its biomass."
src.loc = M
- src.verbs += /mob/living/carbon/monkey/diona/proc/split
- src.verbs -= /mob/living/carbon/monkey/diona/proc/merge
+ src.verbs += /mob/living/carbon/primitive/diona/proc/split
+ src.verbs -= /mob/living/carbon/primitive/diona/proc/merge
else
return
-/mob/living/carbon/monkey/diona/proc/split()
+/mob/living/carbon/primitive/diona/proc/split()
set category = "Diona"
set name = "Split from gestalt"
set desc = "Split away from your gestalt as a lone nymph."
if(!(istype(src.loc,/mob/living/carbon)))
- src.verbs -= /mob/living/carbon/monkey/diona/proc/split
+ src.verbs -= /mob/living/carbon/primitive/diona/proc/split
return
src.loc << "You feel a pang of loss as [src] splits away from your biomass."
@@ -101,8 +101,8 @@
var/mob/living/M = src.loc
src.loc = get_turf(src)
- src.verbs -= /mob/living/carbon/monkey/diona/proc/split
- src.verbs += /mob/living/carbon/monkey/diona/proc/merge
+ src.verbs -= /mob/living/carbon/primitive/diona/proc/split
+ src.verbs += /mob/living/carbon/primitive/diona/proc/merge
if(istype(M))
for(var/atom/A in M.contents)
@@ -110,7 +110,7 @@
return
M.status_flags &= ~PASSEMOTES
-/mob/living/carbon/monkey/diona/verb/fertilize_plant()
+/mob/living/carbon/primitive/diona/verb/fertilize_plant()
set category = "Diona"
set name = "Fertilize plant"
@@ -129,7 +129,7 @@
target.nutrilevel = 10
src.visible_message("\red [src] secretes a trickle of green liquid from its tail, refilling [target]'s nutrient tray.","\red You secrete a trickle of green liquid from your tail, refilling [target]'s nutrient tray.")
-/mob/living/carbon/monkey/diona/verb/eat_weeds()
+/mob/living/carbon/primitive/diona/verb/eat_weeds()
set category = "Diona"
set name = "Eat Weeds"
@@ -148,7 +148,7 @@
target.weedlevel = 0
src.visible_message("\red [src] begins rooting through [target], ripping out weeds and eating them noisily.","\red You begin rooting through [target], ripping out weeds and eating them noisily.")
-/mob/living/carbon/monkey/diona/verb/evolve()
+/mob/living/carbon/primitive/diona/verb/evolve()
set category = "Diona"
set name = "Evolve"
@@ -188,7 +188,7 @@
del(src)
-/mob/living/carbon/monkey/diona/verb/steal_blood()
+/mob/living/carbon/primitive/diona/verb/steal_blood()
set category = "Diona"
set name = "Steal Blood"
set desc = "Take a blood sample from a suitable donor."
@@ -218,7 +218,7 @@
spawn(25)
update_progression()
-/mob/living/carbon/monkey/diona/proc/update_progression()
+/mob/living/carbon/primitive/diona/proc/update_progression()
if(!donors.len)
return
@@ -233,11 +233,11 @@
src << "\green The blood seeps into your small form, and you draw out the echoes of memories and personality from it, working them into your budding mind."
-/mob/living/carbon/monkey/diona/put_in_hands(obj/item/W)
+/mob/living/carbon/primitive/diona/put_in_hands(obj/item/W)
W.loc = get_turf(src)
W.layer = initial(W.layer)
W.dropped()
-/mob/living/carbon/monkey/diona/put_in_active_hand(obj/item/W)
+/mob/living/carbon/primitive/diona/put_in_active_hand(obj/item/W)
src << "\red You don't have any hands!"
return
diff --git a/code/modules/mob/living/carbon/species.dm b/code/modules/mob/living/carbon/species.dm
deleted file mode 100644
index af066547923..00000000000
--- a/code/modules/mob/living/carbon/species.dm
+++ /dev/null
@@ -1,808 +0,0 @@
-/*
- Datum-based species. Should make for much cleaner and easier to maintain mutantrace code.
-*/
-
-/datum/species
- var/name // Species name.
- var/path // Species path
- var/icobase = 'icons/mob/human_races/r_human.dmi' // Normal icon set.
- var/deform = 'icons/mob/human_races/r_def_human.dmi' // Mutated icon set.
- var/eyes = "eyes_s" // Icon for eyes.
- var/blurb = "A completely nondescript species." // A brief lore summary for use in the chargen screen.
-
- var/primitive // Lesser form, if any (ie. monkey for humans)
- var/tail // Name of tail image in species effects icon file.
- var/unarmed //For empty hand harm-intent attack
- var/unarmed_type = /datum/unarmed_attack
- var/slowdown = 0 // Passive movement speed malus (or boost, if negative)
-
- var/breath_type = "oxygen" // Non-oxygen gas breathed, if any.
- var/poison_type = "plasma" // Poisonous air.
- var/exhale_type = "carbon_dioxide" // Exhaled gas type.
-
- var/cold_level_1 = 260 // Cold damage level 1 below this point.
- var/cold_level_2 = 200 // Cold damage level 2 below this point.
- var/cold_level_3 = 120 // Cold damage level 3 below this point.
-
- var/heat_level_1 = 360 // Heat damage level 1 above this point.
- var/heat_level_2 = 400 // Heat damage level 2 above this point.
- var/heat_level_3 = 460 // Heat damage level 3 above this point; used for body temperature
- var/heat_level_3_breathe = 1000 // Heat damage level 3 above this point; used for breathed air temperature
-
- var/body_temperature = 310.15 //non-IS_SYNTHETIC species will try to stabilize at this temperature. (also affects temperature processing)
- var/synth_temp_gain = 0 //IS_SYNTHETIC species will gain this much temperature every second
- var/reagent_tag //Used for metabolizing reagents.
-
- var/darksight = 2
- var/hazard_high_pressure = HAZARD_HIGH_PRESSURE // Dangerously high pressure.
- var/warning_high_pressure = WARNING_HIGH_PRESSURE // High pressure warning.
- var/warning_low_pressure = WARNING_LOW_PRESSURE // Low pressure warning.
- var/hazard_low_pressure = HAZARD_LOW_PRESSURE // Dangerously low pressure.
-
- var/brute_mod = null // Physical damage reduction/malus.
- var/burn_mod = null // Burn damage reduction/malus.
-
- var/light_dam //Light level above which species takes damage, and below which it heals.
- var/light_effect_amp //If 0, takes/heals 1 burn and brute per tick. Otherwise, both healing and damage effects are amplified.
-
- var/max_hurt_damage = 9 // Max melee damage dealt + 5 if hulk
- var/list/default_genes = list()
-
- var/ventcrawler = 0 //Determines if the mob can go through the vents.
-
- var/flags = 0 // Various specific features.
- var/bloodflags=0
- var/bodyflags=0
- var/dietflags = 0 // Make sure you set this, otherwise it won't be able to digest a lot of foods
-
- var/list/abilities = list() // For species-derived or admin-given powers
-
- var/blood_color = "#A10808" //Red.
- var/flesh_color = "#FFC896" //Pink.
- var/single_gib_type = /obj/effect/decal/cleanable/blood/gibs
-
- var/base_color //Used when setting species.
-
- //Used in icon caching.
- var/race_key = 0
- var/icon/icon_template
-
- // Language/culture vars.
- var/default_language = "Galactic Common" // Default language is used when 'say' is used without modifiers.
- var/language = "Galactic Common" // Default racial language, if any.
- var/secondary_langs = list() // The names of secondary languages that are available to this species.
- var/list/speech_sounds // A list of sounds to potentially play when speaking.
- var/list/speech_chance // The likelihood of a speech sound playing.
-
- // Determines the organs that the species spawns with and
- var/list/has_organ = list( // which required-organ checks are conducted.
- "heart" = /obj/item/organ/heart,
- "lungs" = /obj/item/organ/lungs,
- "liver" = /obj/item/organ/liver,
- "kidneys" = /obj/item/organ/kidneys,
- "brain" = /obj/item/organ/brain,
- "appendix" = /obj/item/organ/appendix,
- "eyes" = /obj/item/organ/eyes
- )
-
- var/list/has_limbs = list(
- "chest" = list("path" = /obj/item/organ/external/chest),
- "groin" = list("path" = /obj/item/organ/external/groin),
- "head" = list("path" = /obj/item/organ/external/head),
- "l_arm" = list("path" = /obj/item/organ/external/arm),
- "r_arm" = list("path" = /obj/item/organ/external/arm/right),
- "l_leg" = list("path" = /obj/item/organ/external/leg),
- "r_leg" = list("path" = /obj/item/organ/external/leg/right),
- "l_hand" = list("path" = /obj/item/organ/external/hand),
- "r_hand" = list("path" = /obj/item/organ/external/hand/right),
- "l_foot" = list("path" = /obj/item/organ/external/foot),
- "r_foot" = list("path" = /obj/item/organ/external/foot/right)
- )
-
-/datum/species/New()
- unarmed = new unarmed_type()
-
-/datum/species/proc/get_random_name(var/gender)
- var/datum/language/species_language = all_languages[language]
- return species_language.get_random_name(gender)
-
-/datum/species/proc/create_organs(var/mob/living/carbon/human/H) //Handles creation of mob organs.
-
- for(var/obj/item/organ/organ in H.contents)
- if((organ in H.organs) || (organ in H.internal_organs))
- del(organ)
-
- if(H.organs) H.organs.Cut()
- if(H.internal_organs) H.internal_organs.Cut()
- if(H.organs_by_name) H.organs_by_name.Cut()
- if(H.internal_organs_by_name) H.internal_organs_by_name.Cut()
-
- H.organs = list()
- H.internal_organs = list()
- H.organs_by_name = list()
- H.internal_organs_by_name = list()
-
- for(var/limb_type in has_limbs)
- var/list/organ_data = has_limbs[limb_type]
- var/limb_path = organ_data["path"]
- var/obj/item/organ/O = new limb_path(H)
- organ_data["descriptor"] = O.name
-
- for(var/organ in has_organ)
- var/organ_type = has_organ[organ]
- H.internal_organs_by_name[organ] = new organ_type(H,1)
-
- for(var/name in H.organs_by_name)
- H.organs |= H.organs_by_name[name]
-
- for(var/obj/item/organ/external/O in H.organs)
- O.owner = H
-
- if(flags & IS_SYNTHETIC)
- for(var/obj/item/organ/external/E in H.organs)
- if(E.status & ORGAN_CUT_AWAY || E.status & ORGAN_DESTROYED) continue
- E.robotize()
- for(var/obj/item/organ/I in H.internal_organs)
- I.robotize()
-
-
-/datum/species/proc/handle_breath(var/datum/gas_mixture/breath, var/mob/living/carbon/human/H)
- 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.005
- var/SA_para_min = 1
- var/SA_sleep_min = 5
- var/oxygen_used = 0
- var/nitrogen_used = 0
- var/breath_pressure = (breath.total_moles()*R_IDEAL_GAS_EQUATION*breath.temperature)/BREATH_VOLUME
- var/vox_oxygen_max = 1 // For vox.
-
- //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 // Tweaking to fit the hacky bullshit I've done with atmo -- TLE
- // Nitrogen, for Vox.
- var/Nitrogen_pp = (breath.nitrogen/breath.total_moles())*breath_pressure
-
- // TODO: Split up into Voxs' own proc.
- if(O2_pp < safe_oxygen_min && name != "Vox") // Too little oxygen
- if(prob(20))
- spawn(0)
- H.emote("gasp")
- if(O2_pp > 0)
- var/ratio = safe_oxygen_min/O2_pp
- H.adjustOxyLoss(min(5*ratio, HUMAN_MAX_OXYLOSS)) // Don't fuck them up too fast (space only does HUMAN_MAX_OXYLOSS after all!)
- H.failed_last_breath = 1
- oxygen_used = breath.oxygen*ratio/6
- else
- H.adjustOxyLoss(HUMAN_MAX_OXYLOSS)
- H.failed_last_breath = 1
- H.oxygen_alert = max(H.oxygen_alert, 1)
- else if(Nitrogen_pp < safe_oxygen_min && name == "Vox") //Vox breathe nitrogen, not oxygen.
-
- if(prob(20))
- spawn(0) H.emote("gasp")
- if(Nitrogen_pp > 0)
- var/ratio = safe_oxygen_min/Nitrogen_pp
- H.adjustOxyLoss(min(5*ratio, HUMAN_MAX_OXYLOSS))
- H.failed_last_breath = 1
- nitrogen_used = breath.nitrogen*ratio/6
- else
- H.adjustOxyLoss(HUMAN_MAX_OXYLOSS)
- H.failed_last_breath = 1
- H.oxygen_alert = max(H.oxygen_alert, 1)
-
- else // We're in safe limits
- H.failed_last_breath = 0
- H.adjustOxyLoss(-5)
- oxygen_used = breath.oxygen/6
- H.oxygen_alert = 0
-
- breath.oxygen -= oxygen_used
- breath.nitrogen -= nitrogen_used
- breath.carbon_dioxide += oxygen_used
-
- //CO2 does not affect failed_last_breath. So if there was enough oxygen in the air but too much co2, this will hurt you, but only once per 4 ticks, instead of once per tick.
- if(CO2_pp > safe_co2_max)
- if(!H.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.
- H.co2overloadtime = world.time
- else if(world.time - H.co2overloadtime > 120)
- H.Paralyse(3)
- H.adjustOxyLoss(3) // Lets hurt em a little, let them know we mean business
- if(world.time - H.co2overloadtime > 300) // They've been in here 30s now, lets start to kill them for their own good!
- H.adjustOxyLoss(8)
- if(prob(20)) // Lets give them some chance to know somethings not right though I guess.
- spawn(0) H.emote("cough")
-
- else
- H.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(H.reagents)
- H.reagents.add_reagent("plasma", Clamp(ratio, MIN_PLASMA_DAMAGE, MAX_PLASMA_DAMAGE))
- H.toxins_alert = max(H.toxins_alert, 1)
-
- else if(O2_pp > vox_oxygen_max && name == "Vox") //Oxygen is toxic to vox.
- var/ratio = (breath.oxygen/vox_oxygen_max) * 1000
- H.adjustToxLoss(Clamp(ratio, MIN_PLASMA_DAMAGE, MAX_PLASMA_DAMAGE))
- H.toxins_alert = max(H.toxins_alert, 1)
- else
- H.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
- H.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
- H.sleeping = max(H.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) H.emote(pick("giggle", "laugh"))
-
- handle_temperature(breath, H)
-
- return 1
-
-/datum/species/proc/handle_temperature(datum/gas_mixture/breath, var/mob/living/carbon/human/H) // called by human/life, handles temperatures
- if( (abs(310.15 - breath.temperature) > 50) && !(RESIST_HEAT in H.mutations)) // Hot air hurts :(
- if(H.status_flags & GODMODE) return 1 //godmode
- if(breath.temperature < cold_level_1)
- if(prob(20))
- H << "\red You feel your face freezing and an icicle forming in your lungs!"
- else if(breath.temperature > heat_level_1)
- if(prob(20))
- H << "\red You feel your face burning and a searing heat in your lungs!"
-
-
-
- switch(breath.temperature)
- if(-INFINITY to cold_level_3)
- H.apply_damage(COLD_GAS_DAMAGE_LEVEL_3, BURN, "head", used_weapon = "Excessive Cold")
- H.fire_alert = max(H.fire_alert, 1)
-
- if(cold_level_3 to cold_level_2)
- H.apply_damage(COLD_GAS_DAMAGE_LEVEL_2, BURN, "head", used_weapon = "Excessive Cold")
- H.fire_alert = max(H.fire_alert, 1)
-
- if(cold_level_2 to cold_level_1)
- H.apply_damage(COLD_GAS_DAMAGE_LEVEL_1, BURN, "head", used_weapon = "Excessive Cold")
- H.fire_alert = max(H.fire_alert, 1)
-
- if(heat_level_1 to heat_level_2)
- H.apply_damage(HEAT_GAS_DAMAGE_LEVEL_1, BURN, "head", used_weapon = "Excessive Heat")
- H.fire_alert = max(H.fire_alert, 2)
-
- if(heat_level_2 to heat_level_3_breathe)
- H.apply_damage(HEAT_GAS_DAMAGE_LEVEL_2, BURN, "head", used_weapon = "Excessive Heat")
- H.fire_alert = max(H.fire_alert, 2)
-
- if(heat_level_3_breathe to INFINITY)
- H.apply_damage(HEAT_GAS_DAMAGE_LEVEL_3, BURN, "head", used_weapon = "Excessive Heat")
- H.fire_alert = max(H.fire_alert, 2)
- return
-
-/datum/species/proc/handle_post_spawn(var/mob/living/carbon/C) //Handles anything not already covered by basic species assignment.
- handle_dna(C)
- return
-
-/datum/species/proc/handle_dna(var/mob/living/carbon/C, var/remove) //Handles DNA mutations, as that doesn't work at init.
- return
-
-// Used for species-specific names (Vox, etc)
-/datum/species/proc/makeName(var/gender,var/mob/living/carbon/human/H=null)
- if(gender==FEMALE) return capitalize(pick(first_names_female)) + " " + capitalize(pick(last_names))
- else return capitalize(pick(first_names_male)) + " " + capitalize(pick(last_names))
-
-/datum/species/proc/handle_death(var/mob/living/carbon/human/H) //Handles any species-specific death events (such as dionaea nymph spawns).
- return
-
-/datum/species/proc/handle_attack_hand(var/mob/living/carbon/human/H, var/mob/living/carbon/human/M) //Handles any species-specific attackhand events.
- return
-
-/datum/species/proc/say_filter(mob/M, message, datum/language/speaking)
- return message
-
-/datum/species/proc/equip(var/mob/living/carbon/human/H)
- return
-
-/datum/species/proc/can_understand(var/mob/other)
- return
-
-/datum/species/human
- name = "Human"
- icobase = 'icons/mob/human_races/r_human.dmi'
- deform = 'icons/mob/human_races/r_def_human.dmi'
- primitive = /mob/living/carbon/monkey
- path = /mob/living/carbon/human/human
- language = "Sol Common"
- flags = HAS_LIPS | HAS_UNDERWEAR | CAN_BE_FAT
- bodyflags = HAS_SKIN_TONE
- dietflags = DIET_OMNI
- unarmed_type = /datum/unarmed_attack/punch
- blurb = "Humanity originated in the Sol system, and over the last five centuries has spread \
- colonies across a wide swathe of space. They hold a wide range of forms and creeds.
\
- While the central Sol government maintains control of its far-flung people, powerful corporate \
- interests, rampant cyber and bio-augmentation and secretive factions make life on most human \
- worlds tumultous at best."
-
-/datum/species/unathi
- name = "Unathi"
- icobase = 'icons/mob/human_races/r_lizard.dmi'
- deform = 'icons/mob/human_races/r_def_lizard.dmi'
- path = /mob/living/carbon/human/unathi
- default_language = "Galactic Common"
- language = "Sinta'unathi"
- tail = "sogtail"
- unarmed_type = /datum/unarmed_attack/claws
- primitive = /mob/living/carbon/monkey/unathi
- darksight = 3
-
- blurb = "A heavily reptillian species, Unathi (or 'Sinta as they call themselves) hail from the \
- Uuosa-Eso system, which roughly translates to 'burning mother'.
Coming from a harsh, radioactive \
- desert planet, they mostly hold ideals of honesty, virtue, martial combat and bravery above all \
- else, frequently even their own lives. They prefer warmer temperatures than most species and \
- their native tongue is a heavy hissing laungage called Sinta'Unathi."
-
- flags = HAS_LIPS | HAS_UNDERWEAR
- bodyflags = FEET_CLAWS | HAS_TAIL | HAS_SKIN_COLOR | TAIL_WAGGING
- dietflags = DIET_CARN
-
- cold_level_1 = 280 //Default 260 - Lower is better
- cold_level_2 = 220 //Default 200
- cold_level_3 = 140 //Default 120
-
- heat_level_1 = 380 //Default 360 - Higher is better
- heat_level_2 = 420 //Default 400
- heat_level_3 = 480 //Default 460
- heat_level_3_breathe = 1100 //Default 1000
-
- flesh_color = "#34AF10"
-
- reagent_tag = IS_UNATHI
- base_color = "#066000"
-
-/datum/species/unathi/handle_death(var/mob/living/carbon/human/H)
-
- H.stop_tail_wagging(1)
-
-/datum/species/tajaran
- name = "Tajaran"
- icobase = 'icons/mob/human_races/r_tajaran.dmi'
- deform = 'icons/mob/human_races/r_def_tajaran.dmi'
- path = /mob/living/carbon/human/tajaran
- default_language = "Galactic Common"
- language = "Siik'tajr"
- tail = "tajtail"
- unarmed_type = /datum/unarmed_attack/claws
- darksight = 8
-
- blurb = "The Tajaran race is a species of feline-like bipeds hailing from the planet of Ahdomai in the \
- S'randarr system. They have been brought up into the space age by the Humans and Skrell, and have been \
- influenced heavily by their long history of Slavemaster rule. They have a structured, clan-influenced way \
- of family and politics. They prefer colder environments, and speak a variety of languages, mostly Siik'Maas, \
- using unique inflections their mouths form."
-
- cold_level_1 = 240
- cold_level_2 = 180
- cold_level_3 = 100
-
- heat_level_1 = 340
- heat_level_2 = 380
- heat_level_3 = 440
- heat_level_3_breathe = 900
-
- primitive = /mob/living/carbon/monkey/tajara
-
- flags = HAS_LIPS | HAS_UNDERWEAR | CAN_BE_FAT
- bodyflags = FEET_PADDED | HAS_TAIL | HAS_SKIN_COLOR | TAIL_WAGGING
- dietflags = DIET_OMNI
-
- flesh_color = "#AFA59E"
- base_color = "#333333"
-
-/datum/species/tajaran/handle_death(var/mob/living/carbon/human/H)
-
- H.stop_tail_wagging(1)
-
-/datum/species/vulpkanin
- name = "Vulpkanin"
- icobase = 'icons/mob/human_races/r_vulpkanin.dmi'
- deform = 'icons/mob/human_races/r_vulpkanin.dmi'
- path = /mob/living/carbon/human/vulpkanin
- default_language = "Galactic Common"
- language = "Canilunzt"
- primitive = /mob/living/carbon/monkey/vulpkanin
- tail = "vulptail"
- unarmed_type = /datum/unarmed_attack/claws
- darksight = 8
-
- blurb = "Vulpkanin are a species of sharp-witted canine-pideds residing on the planet Altam just barely within the \
- dual-star Vazzend system. Their politically de-centralized society and independent natures have led them to become a species and \
- culture both feared and respected for their scientific breakthroughs. Discovery, loyalty, and utilitarianism dominates their lifestyles \
- to the degree it can cause conflict with more rigorous and strict authorities. They speak a guttural language known as 'Canilunzt' \
- which has a heavy emphasis on utilizing tail positioning and ear twitches to communicate intent."
-
- flags = HAS_LIPS | HAS_UNDERWEAR
- bodyflags = FEET_PADDED | HAS_TAIL | HAS_SKIN_COLOR | TAIL_WAGGING
- dietflags = DIET_OMNI
-
- flesh_color = "#966464"
- base_color = "#BE8264"
-
-/datum/species/vulpkanin/handle_death(var/mob/living/carbon/human/H)
-
- H.stop_tail_wagging(1)
-
-/datum/species/skrell
- name = "Skrell"
- icobase = 'icons/mob/human_races/r_skrell.dmi'
- deform = 'icons/mob/human_races/r_def_skrell.dmi'
- path = /mob/living/carbon/human/skrell
- default_language = "Galactic Common"
- language = "Skrellian"
- primitive = /mob/living/carbon/monkey/skrell
- unarmed_type = /datum/unarmed_attack/punch
-
- blurb = "An amphibious species, Skrell come from the star system known as Qerr'Vallis, which translates to 'Star of \
- the royals' or 'Light of the Crown'.
Skrell are a highly advanced and logical race who live under the rule \
- of the Qerr'Katish, a caste within their society which keeps the empire of the Skrell running smoothly. Skrell are \
- herbivores on the whole and tend to be co-operative with the other species of the galaxy, although they rarely reveal \
- the secrets of their empire to their allies."
-
- flags = HAS_LIPS | HAS_UNDERWEAR
- bodyflags = HAS_SKIN_COLOR
- dietflags = DIET_HERB
-
- flesh_color = "#8CD7A3"
- blood_color = "#1D2CBF"
- reagent_tag = IS_SKRELL
-
-/datum/species/vox
- name = "Vox"
- icobase = 'icons/mob/human_races/r_vox.dmi'
- deform = 'icons/mob/human_races/r_def_vox.dmi'
- path = /mob/living/carbon/human/vox
-
- default_language = "Galactic Common"
- language = "Vox-pidgin"
- speech_sounds = list('sound/voice/shriek1.ogg')
- speech_chance = 20
-
- unarmed_type = /datum/unarmed_attack/claws //I dont think it will hurt to give vox claws too.
-
- blurb = "The Vox are the broken remnants of a once-proud race, now reduced to little more than \
- scavenging vermin who prey on isolated stations, ships or planets to keep their own ancient arkships \
- alive. They are four to five feet tall, reptillian, beaked, tailed and quilled; human crews often \
- refer to them as 'shitbirds' for their violent and offensive nature, as well as their horrible \
- smell.
Most humans will never meet a Vox raider, instead learning of this insular species through \
- dealing with their traders and merchants; those that do rarely enjoy the experience."
-
- warning_low_pressure = 50
- hazard_low_pressure = 0
-
- cold_level_1 = 80
- cold_level_2 = 50
- cold_level_3 = 0
-
- eyes = "vox_eyes_s"
-
- breath_type = "nitrogen"
- poison_type = "oxygen"
-
- flags = NO_SCAN | IS_WHITELISTED
- dietflags = DIET_OMNI
-
- blood_color = "#2299FC"
- flesh_color = "#808D11"
-
- reagent_tag = IS_VOX
-
- makeName(var/gender,var/mob/living/carbon/human/H=null)
- var/sounds = rand(2,8)
- var/i = 0
- var/newname = ""
-
- while(i<=sounds)
- i++
- newname += pick(vox_name_syllables)
- return capitalize(newname)
-/*
-/datum/species/vox/handle_post_spawn(var/mob/living/carbon/human/H)
-
- H.verbs += /mob/living/carbon/human/proc/leap
- ..() */
-
-/datum/species/vox/armalis/handle_post_spawn(var/mob/living/carbon/human/H)
-
- H.verbs += /mob/living/carbon/human/proc/gut
- ..()
-
-/datum/species/vox/armalis
- name = "Vox Armalis"
- icobase = 'icons/mob/human_races/r_armalis.dmi'
- deform = 'icons/mob/human_races/r_armalis.dmi'
- path = /mob/living/carbon/human/voxarmalis
- unarmed_type = /datum/unarmed_attack/claws/armalis
-
- warning_low_pressure = 50
- hazard_low_pressure = 0
-
- cold_level_1 = 80
- cold_level_2 = 50
- cold_level_3 = 0
-
- heat_level_1 = 2000
- heat_level_2 = 3000
- heat_level_3 = 4000
- heat_level_3_breathe = 4000
-
- brute_mod = 0.2
- burn_mod = 0.2
-
- eyes = "blank_eyes"
- breath_type = "nitrogen"
- poison_type = "oxygen"
-
- flags = NO_SCAN | NO_BLOOD | HAS_TAIL | NO_PAIN | IS_WHITELISTED
- dietflags = DIET_OMNI //should inherit this from vox, this is here just in case
-
- blood_color = "#2299FC"
- flesh_color = "#808D11"
-
- reagent_tag = IS_VOX
-
- tail = "armalis_tail"
- icon_template = 'icons/mob/human_races/r_armalis.dmi'
-
- has_organ = list(
- "heart" = /obj/item/organ/heart,
- "lungs" = /obj/item/organ/lungs,
- "liver" = /obj/item/organ/liver,
- "kidneys" = /obj/item/organ/kidneys,
- "brain" = /obj/item/organ/brain,
- "eyes" = /obj/item/organ/eyes,
- "stack" = /obj/item/organ/stack/vox
- )
-
-/datum/species/kidan
- name = "Kidan"
- icobase = 'icons/mob/human_races/r_kidan.dmi'
- deform = 'icons/mob/human_races/r_def_kidan.dmi'
- path = /mob/living/carbon/human/kidan
- default_language = "Galactic Common"
- language = "Chittin"
- unarmed_type = /datum/unarmed_attack/claws
-
- brute_mod = 0.8
-
- flags = IS_WHITELISTED
- bodyflags = FEET_CLAWS
- dietflags = DIET_HERB
-
- blood_color = "#FB9800"
-
-
-/datum/species/slime
- name = "Slime People"
- default_language = "Galactic Common"
- language = "Bubblish"
- icobase = 'icons/mob/human_races/r_slime.dmi'
- deform = 'icons/mob/human_races/r_slime.dmi'
- path = /mob/living/carbon/human/slime
- primitive = /mob/living/carbon/slime
- unarmed_type = /datum/unarmed_attack/punch
-
- flags = IS_WHITELISTED | NO_BREATHE | HAS_LIPS | NO_INTORGANS | NO_SCAN
- bodyflags = HAS_SKIN_COLOR
- bloodflags = BLOOD_SLIME
- dietflags = DIET_CARN
-
- //ventcrawler = 1 //ventcrawling commented out
-
- has_organ = list(
- "brain" = /obj/item/organ/brain/slime
- )
-
-/datum/species/grey
- name = "Grey"
- icobase = 'icons/mob/human_races/r_grey.dmi'
- deform = 'icons/mob/human_races/r_def_grey.dmi'
- default_language = "Galactic Common"
- //language = "Grey" // Perhaps if they ever get a hivemind
- unarmed_type = /datum/unarmed_attack/punch
- darksight = 5 // BOOSTED from 2
- eyes = "grey_eyes_s"
-
- brute_mod = 1.25 //greys are fragile
-
- default_genes = list(REMOTE_TALK)
-
- primitive = /mob/living/carbon/monkey // TODO
-
- flags = IS_WHITELISTED | HAS_LIPS | HAS_UNDERWEAR | CAN_BE_FAT
- dietflags = DIET_HERB
-
- blood_color = "#A200FF"
-
-/datum/species/grey/handle_dna(var/mob/living/carbon/C, var/remove)
- if(!remove)
- C.dna.SetSEState(REMOTETALKBLOCK,1,1)
- C.mutations |= REMOTE_TALK
- genemutcheck(C,REMOTETALKBLOCK,null,MUTCHK_FORCED)
- else
- C.dna.SetSEState(REMOTETALKBLOCK,0,1)
- C.mutations -= REMOTE_TALK
- genemutcheck(C,REMOTETALKBLOCK,null,MUTCHK_FORCED)
- C.update_mutations()
- ..()
-
-/datum/species/diona
- name = "Diona"
- icobase = 'icons/mob/human_races/r_diona.dmi'
- deform = 'icons/mob/human_races/r_def_plant.dmi'
- path = /mob/living/carbon/human/diona
- default_language = "Galactic Common"
- language = "Rootspeak"
- unarmed_type = /datum/unarmed_attack/diona
- primitive = /mob/living/carbon/monkey/diona
- slowdown = 5
-
- warning_low_pressure = 50
- hazard_low_pressure = -1
-
- cold_level_1 = 50
- cold_level_2 = -1
- cold_level_3 = -1
-
- heat_level_1 = 300
- heat_level_2 = 340
- heat_level_3 = 400
- heat_level_3_breathe = 700
-
- blurb = "Commonly referred to (erroneously) as 'plant people', the Dionaea are a strange space-dwelling collective \
- species hailing from Epsilon Ursae Minoris. Each 'diona' is a cluster of numerous cat-sized organisms called nymphs; \
- there is no effective upper limit to the number that can fuse in gestalt, and reports exist of the Epsilon Ursae \
- Minoris primary being ringed with a cloud of singing space-station-sized entities.
The Dionaea coexist peacefully with \
- all known species, especially the Skrell. Their communal mind makes them slow to react, and they have difficulty understanding \
- even the simplest concepts of other minds. Their alien physiology allows them survive happily off a diet of nothing but light, \
- water and other radiation."
-
- flags = NO_BREATHE | REQUIRE_LIGHT | IS_PLANT | RAD_ABSORB | NO_BLOOD | NO_PAIN
- dietflags = 0 //Diona regenerate nutrition in light, no diet necessary
-
- body_temperature = T0C + 15 //make the plant people have a bit lower body temperature, why not
-
- blood_color = "#004400"
- flesh_color = "#907E4A"
-
- reagent_tag = IS_DIONA
-
- has_organ = list(
- "nutrient channel" = /obj/item/organ/diona/nutrients,
- "neural strata" = /obj/item/organ/diona/strata,
- "response node" = /obj/item/organ/diona/node,
- "gas bladder" = /obj/item/organ/diona/bladder,
- "polyp segment" = /obj/item/organ/diona/polyp,
- "anchoring ligament" = /obj/item/organ/diona/ligament
- )
-
- has_limbs = list(
- "chest" = list("path" = /obj/item/organ/external/diona/chest),
- "groin" = list("path" = /obj/item/organ/external/diona/groin),
- "head" = list("path" = /obj/item/organ/external/diona/head),
- "l_arm" = list("path" = /obj/item/organ/external/diona/arm),
- "r_arm" = list("path" = /obj/item/organ/external/diona/arm/right),
- "l_leg" = list("path" = /obj/item/organ/external/diona/leg),
- "r_leg" = list("path" = /obj/item/organ/external/diona/leg/right),
- "l_hand" = list("path" = /obj/item/organ/external/diona/hand),
- "r_hand" = list("path" = /obj/item/organ/external/diona/hand/right),
- "l_foot" = list("path" = /obj/item/organ/external/diona/foot),
- "r_foot" = list("path" = /obj/item/organ/external/diona/foot/right)
- )
-
-/datum/species/diona/can_understand(var/mob/other)
- var/mob/living/carbon/monkey/diona/D = other
- if(istype(D))
- return 1
- return 0
-
-/datum/species/diona/handle_post_spawn(var/mob/living/carbon/human/H)
- H.gender = NEUTER
-
- return ..()
-
-/* //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))
-
- if(H.mind)
- H.mind.transfer_to(S)
- else
- S.key = H.key
-
- for(var/mob/living/carbon/monkey/diona/D in H.contents)
- if(D.client)
- D.loc = H.loc
- else
- del(D)
-
- H.visible_message("\red[H] splits apart with a wet slithering noise!") */
-
-/datum/species/machine
- name = "Machine"
- icobase = 'icons/mob/human_races/r_machine.dmi'
- deform = 'icons/mob/human_races/r_machine.dmi'
- path = /mob/living/carbon/human/machine
- default_language = "Galactic Common"
- language = "Trinary"
- unarmed_type = /datum/unarmed_attack/punch
-
- eyes = "blank_eyes"
- brute_mod = 1.5
- burn_mod = 1.5
-
- cold_level_1 = 50
- cold_level_2 = -1
- cold_level_3 = -1
-
- heat_level_1 = 500 //gives them about 25 seconds in space before taking damage
- heat_level_2 = 540
- heat_level_3 = 600
- heat_level_3_breathe = 600
-
- synth_temp_gain = 10 //this should cause IPCs to stabilize at ~80 C in a 20 C environment.
-
- flags = IS_WHITELISTED | NO_BREATHE | NO_SCAN | NO_BLOOD | NO_PAIN | IS_SYNTHETIC | NO_INTORGANS
- dietflags = 0 //IPCs can't eat, so no diet
- blood_color = "#1F181F"
- flesh_color = "#AAAAAA"
-
-/datum/species/machine/handle_death(var/mob/living/carbon/human/H)
- H.emote("deathgasp")
- for(var/organ_name in H.organs_by_name)
- if (organ_name == "head") // do the head last as that's when the user will be transfered to the posibrain
- continue
- var/obj/item/organ/external/O = H.organs_by_name[organ_name]
- if(O && (O.body_part != UPPER_TORSO) && (O.body_part != LOWER_TORSO)) // We're making them fall apart, not gibbing them!
- O.droplimb(1)
- var/obj/item/organ/external/O = H.organs_by_name["head"]
- if(O) O.droplimb(1)
-
-
-//Species unarmed attacks
-
-/datum/unarmed_attack
- var/attack_verb = list("attack") // Empty hand hurt intent verb.
- var/damage = 0 // Extra empty hand attack damage.
- var/attack_sound = "punch"
- var/miss_sound = 'sound/weapons/punchmiss.ogg'
- var/sharp = 0
- var/edge = 0
-
-/datum/unarmed_attack/punch
- attack_verb = list("punch")
-
-/datum/unarmed_attack/punch/weak
- attack_verb = list("flail")
- damage = 1
-
-/datum/unarmed_attack/diona
- attack_verb = list("lash", "bludgeon")
-
-/datum/unarmed_attack/claws
- attack_verb = list("scratch", "claw")
- attack_sound = 'sound/weapons/slice.ogg'
- miss_sound = 'sound/weapons/slashmiss.ogg'
- sharp = 1
- edge = 1
-
-/datum/unarmed_attack/claws/armalis
- attack_verb = list("slash", "claw")
- damage = 6 //they're huge! they should do a little more damage, i'd even go for 15-20 maybe...
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/drone/drone_console.dm b/code/modules/mob/living/silicon/robot/drone/drone_console.dm
index 801dce4c2ef..97a9375c1f8 100644
--- a/code/modules/mob/living/silicon/robot/drone/drone_console.dm
+++ b/code/modules/mob/living/silicon/robot/drone/drone_console.dm
@@ -14,10 +14,6 @@
/obj/machinery/computer/drone_control/attack_ai(var/mob/user as mob)
return src.attack_hand(user)
-/obj/machinery/computer/drone_control/attack_paw(var/mob/user as mob)
-
- return src.attack_hand(user)
- return
/obj/machinery/computer/drone_control/attack_hand(var/mob/user as mob)
if(..())
diff --git a/code/modules/mob/living/silicon/robot/robot.dm b/code/modules/mob/living/silicon/robot/robot.dm
index bcef5aee0b7..6c163c41aa3 100644
--- a/code/modules/mob/living/silicon/robot/robot.dm
+++ b/code/modules/mob/living/silicon/robot/robot.dm
@@ -1012,10 +1012,6 @@ var/list/robot_verbs_default = list(
user.visible_message("[user] pets [src]!", \
"You pet [src]!")
-/mob/living/silicon/robot/attack_paw(mob/user)
-
- return attack_hand(user)
-
/mob/living/silicon/robot/proc/allowed(mob/M)
//check if it doesn't require any access at all
if(check_access(null))
@@ -1025,11 +1021,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/silicon/silicon.dm b/code/modules/mob/living/silicon/silicon.dm
index 6d0b1768f03..095d7af1436 100644
--- a/code/modules/mob/living/silicon/silicon.dm
+++ b/code/modules/mob/living/silicon/silicon.dm
@@ -321,3 +321,6 @@
if ("Disable")
sensor_mode = 0
src << "Sensor augmentations disabled."
+
+/mob/living/silicon/IsAdvancedToolUser()
+ return 1
\ No newline at end of file
diff --git a/code/modules/mob/living/simple_animal/friendly/corgi.dm b/code/modules/mob/living/simple_animal/friendly/corgi.dm
index 38a3243c1bb..7d5f290fc55 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) || 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) || 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..5e8f8d0d54b 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) || 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) || 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..ee95a6d06d3 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) || isrobot(usr))
//Removing from inventory
if(href_list["remove_inv"])
@@ -732,22 +732,4 @@
/mob/living/simple_animal/parrot/proc/parrot_hear(var/message="")
if(!message || stat)
return
- speech_buffer.Add(message)
-
-/mob/living/simple_animal/parrot/attack_paw(var/mob/user, var/damage, var/attack_message)
-
- var/success = ..()
-
- if(client)
- return success
-
- if(parrot_state == PARROT_PERCH)
- parrot_sleep_dur = parrot_sleep_max //Reset it's sleep timer if it was perched
-
- if(!success)
- return 0
-
- parrot_interest = user
- parrot_state = PARROT_SWOOP | PARROT_ATTACK //Attack other animals regardless
- icon_state = "parrot_fly"
- return success
+ speech_buffer.Add(message)
\ No newline at end of file
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/living/simple_animal/tribbles.dm b/code/modules/mob/living/simple_animal/tribbles.dm
index 52ac279ccce..2b6fab41b8e 100644
--- a/code/modules/mob/living/simple_animal/tribbles.dm
+++ b/code/modules/mob/living/simple_animal/tribbles.dm
@@ -197,8 +197,6 @@ var/global/totaltribbles = 0 //global variable so it updates for all tribbles,
..()
return
-/obj/structure/tribble_cage/attack_paw(mob/user as mob)
- return src.attack_hand(user)
/obj/structure/tribble_cage/attack_hand(mob/user as mob)
if (src.destroyed)
diff --git a/code/modules/mob/mob.dm b/code/modules/mob/mob.dm
index ff73ff13259..0d766fa162b 100644
--- a/code/modules/mob/mob.dm
+++ b/code/modules/mob/mob.dm
@@ -1492,4 +1492,4 @@ mob/proc/yank_out_object()
return
/mob/proc/handle_ventcrawl()
- return // Only living mobs can ventcrawl
\ No newline at end of file
+ return // Only living mobs can ventcrawl
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..cd4b79a4f58 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/primitive/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/say.dm b/code/modules/mob/say.dm
index 38328b16bb7..2f8a790c3c6 100644
--- a/code/modules/mob/say.dm
+++ b/code/modules/mob/say.dm
@@ -141,7 +141,8 @@
return all_languages["Noise"]
if(length(message) >= 2)
- var/language_prefix = lowertext(copytext(message, 1 ,3))
+
+ var/language_prefix = trim_right(lowertext(copytext(message, 1 ,4)))
var/datum/language/L = language_keys[language_prefix]
if (can_speak(L))
return L
diff --git a/code/modules/mob/transform_procs.dm b/code/modules/mob/transform_procs.dm
index 4a17773d012..4a6138e094a 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/primitive/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/organs/organ_alien.dm b/code/modules/organs/organ_alien.dm
index 28d5dd2fb98..0c3a68bc866 100644
--- a/code/modules/organs/organ_alien.dm
+++ b/code/modules/organs/organ_alien.dm
@@ -9,7 +9,7 @@
del(src)
spawn(1) // So it has time to be thrown about by the gib() proc.
- var/mob/living/carbon/alien/diona/D = new(get_turf(organ))
+ var/mob/living/carbon/primitive/diona/D = new(get_turf(organ))
diona.request_player(D)
del(organ)
*/
diff --git a/code/modules/paperwork/paperbin.dm b/code/modules/paperwork/paperbin.dm
index 67d1eacab72..6c567772b99 100644
--- a/code/modules/paperwork/paperbin.dm
+++ b/code/modules/paperwork/paperbin.dm
@@ -47,10 +47,6 @@
add_fingerprint(M)
-/obj/item/weapon/paper_bin/attack_paw(mob/user as mob)
- return attack_hand(user)
-
-
/obj/item/weapon/paper_bin/attack_hand(mob/user as mob)
if (ishuman(user))
var/mob/living/carbon/human/H = user
diff --git a/code/modules/paperwork/stamps.dm b/code/modules/paperwork/stamps.dm
index eaa8bbd1246..e86b0ec9756 100644
--- a/code/modules/paperwork/stamps.dm
+++ b/code/modules/paperwork/stamps.dm
@@ -77,9 +77,6 @@
icon_state = "stamp-cent"
_color = "internalaffairs"
-/obj/item/weapon/stamp/attack_paw(mob/user as mob)
- return attack_hand(user)
-
// Syndicate stamp to forge documents.
/obj/item/weapon/stamp/chameleon/attack_self(mob/user as mob)
diff --git a/code/modules/power/apc.dm b/code/modules/power/apc.dm
index 757bfc6b40f..a6553a6f4fc 100644
--- a/code/modules/power/apc.dm
+++ b/code/modules/power/apc.dm
@@ -811,9 +811,10 @@
return 0
if(!user.client)
return 0
+ if(!user.IsAdvancedToolUser())
+ 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/engine.dm b/code/modules/power/engine.dm
index c07e10ce150..50473d3e445 100644
--- a/code/modules/power/engine.dm
+++ b/code/modules/power/engine.dm
@@ -1,5 +1,3 @@
-/turf/simulated/floor/engine/attack_paw(var/mob/user as mob)
- return src.attack_hand(user)
/turf/simulated/floor/engine/attack_hand(var/mob/user as mob)
if ((!( user.canmove ) || user.restrained() || !( user.pulling )))
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..87cf5df27df 100644
--- a/code/modules/projectiles/gun.dm
+++ b/code/modules/projectiles/gun.dm
@@ -56,6 +56,8 @@
proc/special_check(var/mob/M) //Placeholder for any special checks, like detective's revolver.
+ if(!usr.IsAdvancedToolUser())
+ return 0
return 1
@@ -96,7 +98,7 @@
qdel(src)
return
- if (!user.IsAdvancedToolUser() || istype(user, /mob/living/carbon/monkey/diona))
+ if (!user.IsAdvancedToolUser() || istype(user, /mob/living/carbon/primitive/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-Machinery.dm b/code/modules/reagents/Chemistry-Machinery.dm
index b85e5a7c4c0..f23db641632 100644
--- a/code/modules/reagents/Chemistry-Machinery.dm
+++ b/code/modules/reagents/Chemistry-Machinery.dm
@@ -250,9 +250,6 @@
/obj/machinery/chem_dispenser/attack_ai(mob/user as mob)
return src.attack_hand(user)
-/obj/machinery/chem_dispenser/attack_paw(mob/user as mob)
- return src.attack_hand(user)
-
/obj/machinery/chem_dispenser/attack_hand(mob/user as mob)
if(stat & BROKEN)
return
@@ -636,9 +633,6 @@
/obj/machinery/chem_master/attack_ai(mob/user as mob)
return src.attack_hand(user)
-/obj/machinery/chem_master/attack_paw(mob/user as mob)
- return src.attack_hand(user)
-
/obj/machinery/chem_master/attack_hand(mob/user as mob)
if(stat & BROKEN)
return
@@ -1114,9 +1108,6 @@
src.updateUsrDialog()
return 0
-/obj/machinery/reagentgrinder/attack_paw(mob/user as mob)
- return src.attack_hand(user)
-
/obj/machinery/reagentgrinder/attack_ai(mob/user as mob)
return 0
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..ca38bf6de7f 100644
--- a/code/modules/reagents/newchem/toxins.dm
+++ b/code/modules/reagents/newchem/toxins.dm
@@ -602,13 +602,11 @@ datum/reagent/atrazine/reaction_mob(var/mob/living/M, var/method=TOUCH, var/volu
H.adjustToxLoss(50)
..()
return
- if(ismonkey(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
- MO.adjustToxLoss(100)
- ..()
- return
+ else if(istype(M,/mob/living/carbon/primitive/diona)) //plantmen monkeys (diona) take EVEN MORE damage
+ var/mob/living/carbon/primitive/diona/D = M
+ D.adjustToxLoss(100)
+ ..()
+ return
/datum/chemical_reaction/atrazine
name = "atrazine"
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/hypospray.dm b/code/modules/reagents/reagent_containers/hypospray.dm
index e5a49cc9680..e24378fb137 100644
--- a/code/modules/reagents/reagent_containers/hypospray.dm
+++ b/code/modules/reagents/reagent_containers/hypospray.dm
@@ -16,10 +16,6 @@
slot_flags = SLOT_BELT
var/ignore_flags = 0
-/obj/item/weapon/reagent_containers/hypospray/attack_paw(mob/user as mob)
- return src.attack_hand(user)
-
-
/obj/item/weapon/reagent_containers/hypospray/attack(mob/living/M, mob/user)
if(!reagents.total_volume)
user << "\red [src] is empty."
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..4bb71244045 100644
--- a/code/modules/recycling/disposal.dm
+++ b/code/modules/recycling/disposal.dm
@@ -206,37 +206,25 @@
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)
// human interact with machine
attack_hand(mob/user as mob)
+ if(stat & BROKEN)
+ return
+
if(user && user.loc == src)
usr << "\red You cannot reach the controls from inside."
return
- /*
- if(mode==-1)
- usr << "\red The disposal units power is disabled."
- return
- */
- interact(user, 0)
- // hostile mob escape from disposals
- attack_animal(var/mob/living/simple_animal/M)
- if(M.environment_smash)
- M.do_attack_animation(src)
- visible_message("[M.name] smashes \the [src] apart!")
- qdel(src)
+ // Clumsy folks can only flush it.
+ if(user.IsAdvancedToolUser(1))
+ interact(user, 0)
+ else
+ flush = !flush
+ update()
return
// user interaction
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/security levels/keycard authentication.dm b/code/modules/security levels/keycard authentication.dm
index 178662d4fb8..97bca316a2d 100644
--- a/code/modules/security levels/keycard authentication.dm
+++ b/code/modules/security levels/keycard authentication.dm
@@ -25,10 +25,6 @@
user << "The station AI is not to interact with these devices."
return
-/obj/machinery/keycard_auth/attack_paw(mob/user as mob)
- user << "You are too primitive to use this device."
- return
-
/obj/machinery/keycard_auth/attackby(obj/item/weapon/W as obj, mob/user as mob, params)
if(stat & (NOPOWER|BROKEN))
user << "This device is not powered."
@@ -56,8 +52,10 @@
stat |= NOPOWER
/obj/machinery/keycard_auth/attack_hand(mob/user as mob)
+ if(!user.IsAdvancedToolUser())
+ return 0
ui_interact(user)
-
+
/obj/machinery/keycard_auth/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1)
if(user.stat || stat & (NOPOWER|BROKEN))
user << "This device is not powered."
@@ -67,7 +65,7 @@
return
user.set_machine(src)
-
+
var/data[0]
data["screen"] = screen
data["event"] = event
@@ -77,12 +75,12 @@
if((type in ert_chosen))
active = 1
data["erttypes"] += list(list("name" = type, "active" = active))
-
- ui = nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open)
+
+ ui = nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open)
if (!ui)
ui = new(user, src, ui_key, "keycard_auth.tmpl", "Keycard Authentication Device UI", 520, 320)
- ui.set_initial_data(data)
- ui.open()
+ ui.set_initial_data(data)
+ ui.open()
/obj/machinery/keycard_auth/Topic(href, href_list)
if(..())
@@ -184,7 +182,7 @@ var/global/maint_all_access = 0
world << "Attention!"
world << "The maintenance access requirement has been revoked on all airlocks."
maint_all_access = 1
-
+
/proc/revoke_maint_all_access()
for(var/area/maintenance/A in world)
for(var/obj/machinery/door/airlock/D in A)
diff --git a/code/modules/shieldgen/shield_capacitor.dm b/code/modules/shieldgen/shield_capacitor.dm
index 192449d7735..89b30243c3f 100644
--- a/code/modules/shieldgen/shield_capacitor.dm
+++ b/code/modules/shieldgen/shield_capacitor.dm
@@ -69,9 +69,6 @@
else
..()
-/obj/machinery/shield_capacitor/attack_paw(user as mob)
- return src.attack_hand(user)
-
/obj/machinery/shield_capacitor/attack_ai(user as mob)
return src.attack_hand(user)
diff --git a/code/modules/shieldgen/shield_gen.dm b/code/modules/shieldgen/shield_gen.dm
index 97375aa9c26..030f852d08a 100644
--- a/code/modules/shieldgen/shield_gen.dm
+++ b/code/modules/shieldgen/shield_gen.dm
@@ -77,9 +77,6 @@
else
..()
-/obj/machinery/shield_gen/attack_paw(user as mob)
- return src.attack_hand(user)
-
/obj/machinery/shield_gen/attack_ai(user as mob)
return src.attack_hand(user)
diff --git a/code/modules/telesci/telesci_computer.dm b/code/modules/telesci/telesci_computer.dm
index 6d53a63aa10..b4bff7b37f2 100644
--- a/code/modules/telesci/telesci_computer.dm
+++ b/code/modules/telesci/telesci_computer.dm
@@ -50,10 +50,6 @@
for(var/i = 1; i <= starting_crystals; i++)
crystals += new /obj/item/bluespace_crystal/artificial(null) // starting crystals
-/obj/machinery/computer/telescience/attack_paw(mob/user)
- user << "You are too primitive to use this computer."
- return
-
/obj/machinery/computer/telescience/attackby(obj/item/W, mob/user, params)
if(istype(W, /obj/item/bluespace_crystal))
if(crystals.len >= max_crystals)
@@ -80,7 +76,7 @@
updateUsrDialog()
else
..()
-
+
/obj/machinery/computer/telescience/emag_act(user as mob)
if (!emagged)
user << "\blue You scramble the Telescience authentication key to an unknown signal. You should be able to teleport to more places now!"
diff --git a/code/modules/virus2/curer.dm b/code/modules/virus2/curer.dm
index df27fdfb841..054f56c8cd4 100644
--- a/code/modules/virus2/curer.dm
+++ b/code/modules/virus2/curer.dm
@@ -37,11 +37,6 @@
/obj/machinery/computer/curer/attack_ai(var/mob/user as mob)
return src.attack_hand(user)
-/obj/machinery/computer/curer/attack_paw(var/mob/user as mob)
-
- return src.attack_hand(user)
- return
-
/obj/machinery/computer/curer/attack_hand(var/mob/user as mob)
if(..())
return
diff --git a/code/modules/virus2/diseasesplicer.dm b/code/modules/virus2/diseasesplicer.dm
index d1938d6cdb1..5a407e37908 100644
--- a/code/modules/virus2/diseasesplicer.dm
+++ b/code/modules/virus2/diseasesplicer.dm
@@ -36,9 +36,6 @@
/obj/machinery/computer/diseasesplicer/attack_ai(var/mob/user as mob)
return src.attack_hand(user)
-/obj/machinery/computer/diseasesplicer/attack_paw(var/mob/user as mob)
- return src.attack_hand(user)
-
/obj/machinery/computer/diseasesplicer/attack_hand(var/mob/user as mob)
if(..()) return
ui_interact(user)
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/code/world.dm b/code/world.dm
index 132b18cf6a0..d216b314751 100644
--- a/code/world.dm
+++ b/code/world.dm
@@ -1,3 +1,15 @@
+var/global/datum/global_init/init = new ()
+
+/*
+ Pre-map initialization stuff should go here.
+*/
+/datum/global_init/New()
+
+ makeDatumRefLists()
+ load_configuration()
+
+ del(src)
+
/world
mob = /mob/new_player
turf = /turf/space
@@ -61,11 +73,7 @@
map_name = "Unknown"
#endif
- spawn(3000) //so we aren't adding to the round-start lag
- if(config.ToRban)
- ToRban_autoupdate()
- /*if(config.kick_inactive) HANDLED IN PROCESS SCHEDULER
- KickInactiveClients()*/
+
#undef RECOMMENDED_VERSION
@@ -299,7 +307,7 @@ var/world_topic_spam_protect_time = world.timeofday
join_motd = file2text("config/motd.txt")
-/world/proc/load_configuration()
+/proc/load_configuration()
config = new /datum/configuration()
config.load("config/config.txt")
config.load("config/game_options.txt","game_options")
diff --git a/icons/effects/species.dmi b/icons/effects/species.dmi
index 63f67113cdc..3124b463c77 100644
Binary files a/icons/effects/species.dmi and b/icons/effects/species.dmi differ
diff --git a/icons/mob/dam_human.dmi b/icons/mob/dam_human.dmi
deleted file mode 100644
index 98c89156995..00000000000
Binary files a/icons/mob/dam_human.dmi and /dev/null differ
diff --git a/icons/mob/dam_mask.dmi b/icons/mob/dam_mask.dmi
deleted file mode 100644
index 47eaf619a1d..00000000000
Binary files a/icons/mob/dam_mask.dmi and /dev/null differ
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/icons/mob/uniform.dmi b/icons/mob/uniform.dmi
index 680f6cdcd52..adc2ba51ef0 100644
Binary files a/icons/mob/uniform.dmi and b/icons/mob/uniform.dmi differ
diff --git a/icons/obj/clothing/uniforms.dmi b/icons/obj/clothing/uniforms.dmi
index ff8ffe3f27c..3380328db36 100644
Binary files a/icons/obj/clothing/uniforms.dmi and b/icons/obj/clothing/uniforms.dmi differ
diff --git a/icons/obj/objects.dmi b/icons/obj/objects.dmi
index 4226d98c5fd..7393f11d276 100644
Binary files a/icons/obj/objects.dmi and b/icons/obj/objects.dmi differ
diff --git a/paradise.dme b/paradise.dme
index 95230e48fcf..7d95b27c84f 100644
--- a/paradise.dme
+++ b/paradise.dme
@@ -1255,7 +1255,6 @@
#include "code\modules\mob\living\carbon\give.dm"
#include "code\modules\mob\living\carbon\life.dm"
#include "code\modules\mob\living\carbon\shock.dm"
-#include "code\modules\mob\living\carbon\species.dm"
#include "code\modules\mob\living\carbon\superheroes.dm"
#include "code\modules\mob\living\carbon\alien\alien.dm"
#include "code\modules\mob\living\carbon\alien\alien_defenses.dm"
@@ -1300,7 +1299,6 @@
#include "code\modules\mob\living\carbon\human\human.dm"
#include "code\modules\mob\living\carbon\human\human_attackalien.dm"
#include "code\modules\mob\living\carbon\human\human_attackhand.dm"
-#include "code\modules\mob\living\carbon\human\human_attackpaw.dm"
#include "code\modules\mob\living\carbon\human\human_damage.dm"
#include "code\modules\mob\living\carbon\human\human_defense.dm"
#include "code\modules\mob\living\carbon\human\human_defines.dm"
@@ -1309,13 +1307,17 @@
#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\species.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 +1329,7 @@
#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\carbon\primitive\dionaold.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"