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"