mirror of
https://github.com/Bubberstation/Bubberstation.git
synced 2026-08-23 21:18:37 +01:00
[MIRROR] Refactors monkeys into a species (#2379)
* Refactors monkeys into a species * aaa Co-authored-by: Qustinnus <Floydje123@hotmail.com> Co-authored-by: Azarak <azarak10@gmail.com>
This commit is contained in:
co-authored by
Qustinnus
Azarak
parent
898121f9cd
commit
d7f054b035
@@ -652,7 +652,7 @@
|
||||
/obj/effect/turf_decal/tile/neutral{
|
||||
dir = 8
|
||||
},
|
||||
/mob/living/carbon/monkey{
|
||||
/mob/living/carbon/human/species/monkey{
|
||||
faction = list("neutral","Syndicate")
|
||||
},
|
||||
/turf/open/floor/plasteel/dark,
|
||||
@@ -991,7 +991,7 @@
|
||||
/obj/effect/turf_decal/tile/neutral{
|
||||
dir = 8
|
||||
},
|
||||
/mob/living/carbon/monkey{
|
||||
/mob/living/carbon/human/species/monkey{
|
||||
faction = list("neutral","Syndicate")
|
||||
},
|
||||
/turf/open/floor/plasteel/dark,
|
||||
@@ -2240,7 +2240,7 @@
|
||||
/area/ruin/unpowered/syndicate_lava_base/cargo)
|
||||
"hp" = (
|
||||
/obj/effect/decal/cleanable/dirt,
|
||||
/mob/living/carbon/monkey{
|
||||
/mob/living/carbon/human/species/monkey{
|
||||
faction = list("neutral","Syndicate")
|
||||
},
|
||||
/turf/open/floor/plasteel/white/side{
|
||||
@@ -2257,7 +2257,7 @@
|
||||
},
|
||||
/area/ruin/unpowered/syndicate_lava_base/virology)
|
||||
"hr" = (
|
||||
/mob/living/carbon/monkey{
|
||||
/mob/living/carbon/human/species/monkey{
|
||||
faction = list("neutral","Syndicate")
|
||||
},
|
||||
/turf/open/floor/plasteel/white/side{
|
||||
@@ -2395,7 +2395,7 @@
|
||||
/turf/open/floor/mineral/plastitanium,
|
||||
/area/ruin/unpowered/syndicate_lava_base/cargo)
|
||||
"hE" = (
|
||||
/mob/living/carbon/monkey{
|
||||
/mob/living/carbon/human/species/monkey{
|
||||
faction = list("neutral","Syndicate")
|
||||
},
|
||||
/turf/open/floor/plasteel/white/side{
|
||||
@@ -2412,7 +2412,7 @@
|
||||
/area/ruin/unpowered/syndicate_lava_base/virology)
|
||||
"hG" = (
|
||||
/obj/effect/decal/cleanable/dirt,
|
||||
/mob/living/carbon/monkey{
|
||||
/mob/living/carbon/human/species/monkey{
|
||||
faction = list("neutral","Syndicate")
|
||||
},
|
||||
/turf/open/floor/plasteel/white/side{
|
||||
|
||||
@@ -1119,7 +1119,7 @@
|
||||
/obj/effect/turf_decal/tile/purple{
|
||||
dir = 8
|
||||
},
|
||||
/mob/living/carbon/monkey,
|
||||
/mob/living/carbon/human/species/monkey,
|
||||
/turf/open/floor/plasteel,
|
||||
/area/awaymission/research/interior/genetics)
|
||||
"cU" = (
|
||||
@@ -1279,7 +1279,7 @@
|
||||
/obj/effect/turf_decal/tile/purple{
|
||||
dir = 8
|
||||
},
|
||||
/mob/living/carbon/monkey,
|
||||
/mob/living/carbon/human/species/monkey,
|
||||
/turf/open/floor/plasteel,
|
||||
/area/awaymission/research/interior/genetics)
|
||||
"dj" = (
|
||||
@@ -3699,7 +3699,7 @@
|
||||
/obj/effect/turf_decal/tile/purple{
|
||||
dir = 8
|
||||
},
|
||||
/mob/living/carbon/monkey,
|
||||
/mob/living/carbon/human/species/monkey,
|
||||
/turf/open/floor/plasteel,
|
||||
/area/awaymission/research/interior/genetics)
|
||||
"hX" = (
|
||||
|
||||
@@ -26532,7 +26532,7 @@
|
||||
/obj/effect/turf_decal/tile/red{
|
||||
dir = 8
|
||||
},
|
||||
/mob/living/carbon/monkey/punpun,
|
||||
/mob/living/carbon/human/species/monkey/punpun,
|
||||
/turf/open/floor/plasteel,
|
||||
/area/crew_quarters/kitchen)
|
||||
"bff" = (
|
||||
@@ -83762,7 +83762,7 @@
|
||||
/obj/effect/turf_decal/stripes/line{
|
||||
dir = 9
|
||||
},
|
||||
/mob/living/carbon/monkey,
|
||||
/mob/living/carbon/human/species/monkey,
|
||||
/turf/open/floor/plasteel/dark,
|
||||
/area/science/genetics)
|
||||
"djC" = (
|
||||
@@ -83786,7 +83786,7 @@
|
||||
/obj/effect/turf_decal/stripes/end{
|
||||
dir = 4
|
||||
},
|
||||
/mob/living/carbon/monkey,
|
||||
/mob/living/carbon/human/species/monkey,
|
||||
/turf/open/floor/plasteel/dark,
|
||||
/area/science/genetics)
|
||||
"djD" = (
|
||||
@@ -84685,7 +84685,7 @@
|
||||
/obj/effect/turf_decal/stripes/line{
|
||||
dir = 8
|
||||
},
|
||||
/mob/living/carbon/monkey,
|
||||
/mob/living/carbon/human/species/monkey,
|
||||
/turf/open/floor/plasteel/dark,
|
||||
/area/science/genetics)
|
||||
"dlp" = (
|
||||
@@ -85072,7 +85072,7 @@
|
||||
layer = 2.9
|
||||
},
|
||||
/obj/effect/turf_decal/stripes/end,
|
||||
/mob/living/carbon/monkey,
|
||||
/mob/living/carbon/human/species/monkey,
|
||||
/turf/open/floor/plasteel/dark,
|
||||
/area/science/genetics)
|
||||
"dmC" = (
|
||||
@@ -100811,7 +100811,7 @@
|
||||
/obj/effect/turf_decal/tile/green{
|
||||
dir = 8
|
||||
},
|
||||
/mob/living/carbon/monkey,
|
||||
/mob/living/carbon/human/species/monkey,
|
||||
/turf/open/floor/plasteel/white,
|
||||
/area/medical/virology)
|
||||
"dVE" = (
|
||||
@@ -100858,7 +100858,7 @@
|
||||
/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{
|
||||
dir = 8
|
||||
},
|
||||
/mob/living/carbon/monkey,
|
||||
/mob/living/carbon/human/species/monkey,
|
||||
/turf/open/floor/plasteel/white,
|
||||
/area/medical/virology)
|
||||
"dVH" = (
|
||||
@@ -101182,7 +101182,7 @@
|
||||
/obj/structure/bed/roller,
|
||||
/obj/effect/decal/cleanable/dirt,
|
||||
/obj/effect/turf_decal/bot,
|
||||
/mob/living/carbon/monkey,
|
||||
/mob/living/carbon/human/species/monkey,
|
||||
/turf/open/floor/plasteel,
|
||||
/area/medical/virology)
|
||||
"dWy" = (
|
||||
|
||||
@@ -19393,7 +19393,7 @@
|
||||
/obj/effect/turf_decal/tile/bar{
|
||||
dir = 1
|
||||
},
|
||||
/mob/living/carbon/monkey/punpun,
|
||||
/mob/living/carbon/human/species/monkey/punpun,
|
||||
/turf/open/floor/plasteel,
|
||||
/area/crew_quarters/bar)
|
||||
"aSG" = (
|
||||
@@ -38559,7 +38559,7 @@
|
||||
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2{
|
||||
dir = 6
|
||||
},
|
||||
/mob/living/carbon/monkey,
|
||||
/mob/living/carbon/human/species/monkey,
|
||||
/turf/open/floor/plasteel,
|
||||
/area/medical/virology)
|
||||
"bQK" = (
|
||||
@@ -48362,7 +48362,7 @@
|
||||
/obj/effect/turf_decal/tile/green{
|
||||
dir = 4
|
||||
},
|
||||
/mob/living/carbon/monkey,
|
||||
/mob/living/carbon/human/species/monkey,
|
||||
/turf/open/floor/plasteel,
|
||||
/area/medical/virology)
|
||||
"cKZ" = (
|
||||
@@ -48923,7 +48923,7 @@
|
||||
pixel_y = 2;
|
||||
req_access_txt = "9"
|
||||
},
|
||||
/mob/living/carbon/monkey,
|
||||
/mob/living/carbon/human/species/monkey,
|
||||
/turf/open/floor/engine,
|
||||
/area/science/genetics)
|
||||
"ddD" = (
|
||||
@@ -49279,7 +49279,7 @@
|
||||
/obj/effect/turf_decal/tile/green{
|
||||
dir = 4
|
||||
},
|
||||
/mob/living/carbon/monkey,
|
||||
/mob/living/carbon/human/species/monkey,
|
||||
/turf/open/floor/plasteel,
|
||||
/area/medical/virology)
|
||||
"dUO" = (
|
||||
@@ -49290,7 +49290,7 @@
|
||||
/obj/structure/window/reinforced{
|
||||
dir = 1
|
||||
},
|
||||
/mob/living/carbon/monkey,
|
||||
/mob/living/carbon/human/species/monkey,
|
||||
/turf/open/floor/engine,
|
||||
/area/science/genetics)
|
||||
"dYq" = (
|
||||
@@ -49374,7 +49374,7 @@
|
||||
/obj/effect/turf_decal/tile/green{
|
||||
dir = 8
|
||||
},
|
||||
/mob/living/carbon/monkey,
|
||||
/mob/living/carbon/human/species/monkey,
|
||||
/turf/open/floor/plasteel,
|
||||
/area/medical/virology)
|
||||
"emq" = (
|
||||
@@ -54109,7 +54109,7 @@
|
||||
req_access_txt = "9"
|
||||
},
|
||||
/obj/machinery/light,
|
||||
/mob/living/carbon/monkey,
|
||||
/mob/living/carbon/human/species/monkey,
|
||||
/turf/open/floor/engine,
|
||||
/area/science/genetics)
|
||||
"qrU" = (
|
||||
@@ -56824,7 +56824,7 @@
|
||||
/obj/effect/turf_decal/tile/green{
|
||||
dir = 1
|
||||
},
|
||||
/mob/living/carbon/monkey,
|
||||
/mob/living/carbon/human/species/monkey,
|
||||
/turf/open/floor/plasteel,
|
||||
/area/medical/virology)
|
||||
"xUi" = (
|
||||
|
||||
@@ -30478,7 +30478,7 @@
|
||||
/area/science/xenobiology)
|
||||
"aXb" = (
|
||||
/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer4,
|
||||
/mob/living/carbon/monkey,
|
||||
/mob/living/carbon/human/species/monkey,
|
||||
/turf/open/floor/grass,
|
||||
/area/science/genetics)
|
||||
"aXc" = (
|
||||
@@ -31066,7 +31066,7 @@
|
||||
/obj/effect/turf_decal/box/corners{
|
||||
dir = 4
|
||||
},
|
||||
/mob/living/carbon/monkey,
|
||||
/mob/living/carbon/human/species/monkey,
|
||||
/turf/open/floor/grass,
|
||||
/area/science/genetics)
|
||||
"aXV" = (
|
||||
@@ -34807,7 +34807,7 @@
|
||||
dir = 8
|
||||
},
|
||||
/obj/structure/flora/ausbushes/grassybush,
|
||||
/mob/living/carbon/monkey,
|
||||
/mob/living/carbon/human/species/monkey,
|
||||
/turf/open/floor/grass,
|
||||
/area/science/genetics)
|
||||
"bdB" = (
|
||||
@@ -35037,7 +35037,7 @@
|
||||
/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer4{
|
||||
dir = 4
|
||||
},
|
||||
/mob/living/carbon/monkey,
|
||||
/mob/living/carbon/human/species/monkey,
|
||||
/turf/open/floor/grass,
|
||||
/area/science/genetics)
|
||||
"bdT" = (
|
||||
@@ -38263,7 +38263,7 @@
|
||||
/obj/item/food/grown/banana,
|
||||
/obj/structure/flora/ausbushes/ywflowers,
|
||||
/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4,
|
||||
/mob/living/carbon/monkey,
|
||||
/mob/living/carbon/human/species/monkey,
|
||||
/turf/open/floor/grass,
|
||||
/area/medical/virology)
|
||||
"biE" = (
|
||||
@@ -40223,7 +40223,7 @@
|
||||
name = "medical camera";
|
||||
network = list("ss13","medical")
|
||||
},
|
||||
/mob/living/carbon/monkey,
|
||||
/mob/living/carbon/human/species/monkey,
|
||||
/turf/open/floor/grass,
|
||||
/area/medical/virology)
|
||||
"blC" = (
|
||||
@@ -41656,7 +41656,7 @@
|
||||
/obj/machinery/light{
|
||||
dir = 4
|
||||
},
|
||||
/mob/living/carbon/monkey{
|
||||
/mob/living/carbon/human/species/monkey{
|
||||
name = "mankey"
|
||||
},
|
||||
/turf/open/floor/grass,
|
||||
@@ -42413,7 +42413,7 @@
|
||||
/obj/structure/flora/grass/jungle,
|
||||
/obj/structure/flora/ausbushes/fernybush,
|
||||
/obj/structure/disposalpipe/segment,
|
||||
/mob/living/carbon/monkey,
|
||||
/mob/living/carbon/human/species/monkey,
|
||||
/turf/open/floor/grass,
|
||||
/area/medical/virology)
|
||||
"bpb" = (
|
||||
@@ -45441,7 +45441,7 @@
|
||||
dir = 8;
|
||||
pixel_x = 24
|
||||
},
|
||||
/mob/living/carbon/monkey,
|
||||
/mob/living/carbon/human/species/monkey,
|
||||
/turf/open/floor/grass,
|
||||
/area/medical/virology)
|
||||
"btw" = (
|
||||
@@ -80856,7 +80856,7 @@
|
||||
pixel_y = 24;
|
||||
req_access_txt = "25"
|
||||
},
|
||||
/mob/living/carbon/monkey/punpun,
|
||||
/mob/living/carbon/human/species/monkey/punpun,
|
||||
/turf/open/floor/plasteel/dark,
|
||||
/area/crew_quarters/bar)
|
||||
"cAl" = (
|
||||
|
||||
@@ -1243,7 +1243,7 @@
|
||||
/obj/machinery/airalarm{
|
||||
pixel_y = 22
|
||||
},
|
||||
/mob/living/carbon/monkey,
|
||||
/mob/living/carbon/human/species/monkey,
|
||||
/turf/open/floor/grass,
|
||||
/area/medical/virology)
|
||||
"acX" = (
|
||||
@@ -1393,7 +1393,7 @@
|
||||
/area/security/prison)
|
||||
"adv" = (
|
||||
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2,
|
||||
/mob/living/carbon/monkey,
|
||||
/mob/living/carbon/human/species/monkey,
|
||||
/turf/open/floor/grass,
|
||||
/area/medical/virology)
|
||||
"adw" = (
|
||||
@@ -1441,7 +1441,7 @@
|
||||
/area/security/prison)
|
||||
"adB" = (
|
||||
/obj/structure/cable,
|
||||
/mob/living/carbon/monkey,
|
||||
/mob/living/carbon/human/species/monkey,
|
||||
/turf/open/floor/grass,
|
||||
/area/medical/virology)
|
||||
"adC" = (
|
||||
@@ -45483,7 +45483,7 @@
|
||||
/area/bridge/showroom/corporate)
|
||||
"chx" = (
|
||||
/obj/structure/flora/ausbushes/brflowers,
|
||||
/mob/living/carbon/monkey,
|
||||
/mob/living/carbon/human/species/monkey,
|
||||
/turf/open/floor/grass,
|
||||
/area/science/genetics)
|
||||
"chy" = (
|
||||
@@ -50884,7 +50884,7 @@
|
||||
/obj/effect/turf_decal/stripes/line{
|
||||
dir = 4
|
||||
},
|
||||
/mob/living/carbon/monkey,
|
||||
/mob/living/carbon/human/species/monkey,
|
||||
/turf/open/floor/grass,
|
||||
/area/science/genetics)
|
||||
"cuu" = (
|
||||
@@ -64880,7 +64880,7 @@
|
||||
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2{
|
||||
dir = 8
|
||||
},
|
||||
/mob/living/carbon/monkey/punpun,
|
||||
/mob/living/carbon/human/species/monkey/punpun,
|
||||
/turf/open/floor/plasteel,
|
||||
/area/crew_quarters/bar)
|
||||
"enV" = (
|
||||
@@ -68641,7 +68641,7 @@
|
||||
/turf/open/floor/plating,
|
||||
/area/maintenance/aft)
|
||||
"jwJ" = (
|
||||
/mob/living/carbon/monkey,
|
||||
/mob/living/carbon/human/species/monkey,
|
||||
/turf/open/floor/grass,
|
||||
/area/medical/virology)
|
||||
"jwW" = (
|
||||
@@ -75953,7 +75953,7 @@
|
||||
/turf/open/floor/plasteel/white,
|
||||
/area/medical/chemistry)
|
||||
"sRB" = (
|
||||
/mob/living/carbon/monkey,
|
||||
/mob/living/carbon/human/species/monkey,
|
||||
/turf/open/floor/grass,
|
||||
/area/science/genetics)
|
||||
"sSr" = (
|
||||
|
||||
@@ -287,7 +287,7 @@
|
||||
/turf/open/floor/grass,
|
||||
/area/shuttle/escape)
|
||||
"it" = (
|
||||
/mob/living/carbon/monkey,
|
||||
/mob/living/carbon/human/species/monkey,
|
||||
/obj/structure/flora/grass/jungle/b{
|
||||
icon_state = "bushb3"
|
||||
},
|
||||
@@ -428,7 +428,7 @@
|
||||
/turf/open/floor/plasteel/white,
|
||||
/area/shuttle/escape)
|
||||
"mq" = (
|
||||
/mob/living/carbon/monkey,
|
||||
/mob/living/carbon/human/species/monkey,
|
||||
/obj/machinery/light/floor,
|
||||
/obj/structure/flora/ausbushes/sparsegrass,
|
||||
/turf/open/floor/grass,
|
||||
@@ -926,7 +926,7 @@
|
||||
/turf/open/floor/plasteel/white,
|
||||
/area/shuttle/escape)
|
||||
"Ia" = (
|
||||
/mob/living/carbon/monkey,
|
||||
/mob/living/carbon/human/species/monkey,
|
||||
/obj/structure/flora/ausbushes/sparsegrass,
|
||||
/turf/open/floor/grass,
|
||||
/area/shuttle/escape)
|
||||
@@ -1243,11 +1243,11 @@
|
||||
/obj/effect/turf_decal/weather/dirt{
|
||||
dir = 1
|
||||
},
|
||||
/mob/living/carbon/monkey,
|
||||
/mob/living/carbon/human/species/monkey,
|
||||
/turf/open/floor/grass,
|
||||
/area/shuttle/escape)
|
||||
"Vv" = (
|
||||
/mob/living/carbon/monkey,
|
||||
/mob/living/carbon/human/species/monkey,
|
||||
/turf/open/floor/grass,
|
||||
/area/shuttle/escape)
|
||||
"VI" = (
|
||||
|
||||
+4
-18
@@ -91,22 +91,6 @@
|
||||
#define DNA_MUTATION_BLOCKS 8
|
||||
#define DNA_UNIQUE_ENZYMES_LEN 32
|
||||
|
||||
//Transformation proc stuff
|
||||
#define TR_KEEPITEMS (1<<0)
|
||||
#define TR_KEEPVIRUS (1<<1)
|
||||
#define TR_KEEPDAMAGE (1<<2)
|
||||
/// hashing names (e.g. monkey(e34f)) (only in monkeyize)
|
||||
#define TR_HASHNAME (1<<3)
|
||||
#define TR_KEEPIMPLANTS (1<<4)
|
||||
/// changelings shouldn't edit the DNA's SE when turning into a monkey
|
||||
#define TR_KEEPSE (1<<5)
|
||||
#define TR_DEFAULTMSG (1<<6)
|
||||
#define TR_KEEPORGANS (1<<8)
|
||||
#define TR_KEEPSTUNS (1<<9)
|
||||
#define TR_KEEPREAGENTS (1<<10)
|
||||
#define TR_KEEPSTAMINADAMAGE (1<<11)
|
||||
#define TR_KEEPAI (1<<12)
|
||||
|
||||
//species traits for mutantraces
|
||||
#define MUTCOLORS 1
|
||||
#define HAIR 2
|
||||
@@ -129,7 +113,6 @@
|
||||
#define AGENDER 16
|
||||
/// Do not draw eyes or eyeless overlay
|
||||
#define NOEYESPRITES 17
|
||||
|
||||
/// Used for determining which wounds are applicable to this species.
|
||||
/// if we have flesh (can suffer slash/piercing/burn wounds, requires they don't have NOBLOOD)
|
||||
#define HAS_FLESH 18
|
||||
@@ -137,7 +120,10 @@
|
||||
#define HAS_BONE 19
|
||||
///If we have a limb-specific overlay sprite
|
||||
#define HAS_MARKINGS 20
|
||||
|
||||
/// Do not draw blood overlay
|
||||
#define NOBLOODOVERLAY 21
|
||||
///No augments, for monkeys in specific because they will turn into fucking freakazoids https://cdn.discordapp.com/attachments/326831214667235328/791313258912153640/102707682-fa7cad80-4294-11eb-8f13-8c689468aeb0.png
|
||||
#define NOAUGMENTS 22
|
||||
|
||||
//organ slots
|
||||
#define ORGAN_SLOT_BRAIN "brain"
|
||||
|
||||
@@ -973,6 +973,8 @@
|
||||
#define COMSIG_MOB_ITEM_ATTACK_QDELETED "mob_item_attack_qdeleted"
|
||||
///from base of mob/RangedAttack(): (atom/A, params)
|
||||
#define COMSIG_MOB_ATTACK_RANGED "mob_attack_ranged"
|
||||
///From base of atom/ctrl_click(): (atom/A)
|
||||
#define COMSIG_MOB_CTRL_CLICKED "mob_ctrl_clicked"
|
||||
///from mob/living/carbon/human/UnarmedAttack(): (atom/target, proximity)
|
||||
#define COMSIG_HUMAN_EARLY_UNARMED_ATTACK "human_early_unarmed_attack"
|
||||
///from mob/living/carbon/human/UnarmedAttack(): (atom/target, proximity)
|
||||
|
||||
@@ -71,9 +71,9 @@ GLOBAL_LIST_INIT(turfs_without_ground, typecacheof(list(
|
||||
#define isethereal(A) (is_species(A, /datum/species/ethereal))
|
||||
#define isvampire(A) (is_species(A,/datum/species/vampire))
|
||||
#define isdullahan(A) (is_species(A, /datum/species/dullahan))
|
||||
#define ismonkey(A) (is_species(A, /datum/species/monkey))
|
||||
|
||||
//more carbon mobs
|
||||
#define ismonkey(A) (istype(A, /mob/living/carbon/monkey))
|
||||
|
||||
#define isalien(A) (istype(A, /mob/living/carbon/alien))
|
||||
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
//Monkey defines, placed here so they can be read by other things!
|
||||
|
||||
/// below this health value the monkey starts to flee from enemies
|
||||
#define MONKEY_FLEE_HEALTH 50
|
||||
#define MONKEY_FLEE_HEALTH 40
|
||||
/// how close an enemy must be to trigger aggression
|
||||
#define MONKEY_ENEMY_VISION 9
|
||||
/// how close an enemy must be before it triggers flee
|
||||
@@ -21,7 +21,7 @@
|
||||
/// probability that monkey will get into mischief, i.e. finding/stealing items
|
||||
#define MONKEY_SHENANIGAN_PROB 20
|
||||
/// probability that monkey will disarm an armed attacker
|
||||
#define MONKEY_ATTACK_DISARM_PROB 50
|
||||
#define MONKEY_ATTACK_DISARM_PROB 20
|
||||
/// probability that monkey will get recruited when friend is attacked
|
||||
#define MONKEY_RECRUIT_PROB 25
|
||||
|
||||
|
||||
@@ -35,6 +35,7 @@
|
||||
init_sprite_accessory_subtypes(/datum/sprite_accessory/moth_wings, GLOB.moth_wings_list)
|
||||
init_sprite_accessory_subtypes(/datum/sprite_accessory/moth_antennae, GLOB.moth_antennae_list)
|
||||
init_sprite_accessory_subtypes(/datum/sprite_accessory/moth_markings, GLOB.moth_markings_list)
|
||||
init_sprite_accessory_subtypes(/datum/sprite_accessory/tails/monkey, GLOB.tails_list_monkey)
|
||||
*/
|
||||
//SKYRAT EDIT REMOVAL END
|
||||
|
||||
|
||||
@@ -80,7 +80,7 @@
|
||||
if(!GLOB.moth_markings_list.len)
|
||||
init_sprite_accessory_subtypes(/datum/sprite_accessory/moth_markings, GLOB.moth_markings_list)
|
||||
//For now we will always return none for tail_human and ears.
|
||||
return(list("mcolor" = pick("FFFFFF","7F7F7F", "7FFF7F", "7F7FFF", "FF7F7F", "7FFFFF", "FF7FFF", "FFFF7F"),"ethcolor" = GLOB.color_list_ethereal[pick(GLOB.color_list_ethereal)], "tail_lizard" = pick(GLOB.tails_list_lizard), "tail_human" = "None", "wings" = "None", "snout" = pick(GLOB.snouts_list), "horns" = pick(GLOB.horns_list), "ears" = "None", "frills" = pick(GLOB.frills_list), "spines" = pick(GLOB.spines_list), "body_markings" = pick(GLOB.body_markings_list), "legs" = "Normal Legs", "caps" = pick(GLOB.caps_list), "moth_wings" = pick(GLOB.moth_wings_list), "moth_antennae" = pick(GLOB.moth_antennae_list), "moth_markings" = pick(GLOB.moth_markings_list)))
|
||||
return(list("mcolor" = pick("FFFFFF","7F7F7F", "7FFF7F", "7F7FFF", "FF7F7F", "7FFFFF", "FF7FFF", "FFFF7F"),"ethcolor" = GLOB.color_list_ethereal[pick(GLOB.color_list_ethereal)], "tail_lizard" = pick(GLOB.tails_list_lizard), "tail_human" = "None", "wings" = "None", "snout" = pick(GLOB.snouts_list), "horns" = pick(GLOB.horns_list), "ears" = "None", "frills" = pick(GLOB.frills_list), "spines" = pick(GLOB.spines_list), "body_markings" = pick(GLOB.body_markings_list), "legs" = "Normal Legs", "caps" = pick(GLOB.caps_list), "moth_wings" = pick(GLOB.moth_wings_list), "moth_antennae" = pick(GLOB.moth_antennae_list), "moth_markings" = pick(GLOB.moth_markings_list), "tail_monkey" = "None"))
|
||||
*/
|
||||
//SKYRAT EDIT REMOVAL END
|
||||
|
||||
|
||||
@@ -286,8 +286,6 @@ Turf and target are separate in case you want to teleport some distance from a t
|
||||
moblist.Add(M)
|
||||
for(var/mob/dead/new_player/M in sortmob)
|
||||
moblist.Add(M)
|
||||
for(var/mob/living/carbon/monkey/M in sortmob)
|
||||
moblist.Add(M)
|
||||
for(var/mob/living/simple_animal/slime/M in sortmob)
|
||||
moblist.Add(M)
|
||||
for(var/mob/living/simple_animal/M in sortmob)
|
||||
|
||||
@@ -40,6 +40,7 @@ GLOBAL_LIST_EMPTY(moth_wings_list)
|
||||
GLOBAL_LIST_EMPTY(moth_antennae_list)
|
||||
GLOBAL_LIST_EMPTY(moth_markings_list)
|
||||
GLOBAL_LIST_EMPTY(caps_list)
|
||||
GLOBAL_LIST_EMPTY(tails_list_monkey)
|
||||
*/
|
||||
//SKYRAT EDIT REMOVAL END
|
||||
|
||||
|
||||
@@ -316,6 +316,7 @@
|
||||
|
||||
/atom/proc/CtrlClick(mob/user)
|
||||
SEND_SIGNAL(src, COMSIG_CLICK_CTRL, user)
|
||||
SEND_SIGNAL(user, COMSIG_MOB_CTRL_CLICKED, src)
|
||||
var/mob/living/ML = user
|
||||
if(istype(ML))
|
||||
ML.pulled(src)
|
||||
|
||||
@@ -1,169 +0,0 @@
|
||||
/datum/hud/monkey/New(mob/living/carbon/monkey/owner)
|
||||
..()
|
||||
var/atom/movable/screen/using
|
||||
var/atom/movable/screen/inventory/inv_box
|
||||
|
||||
action_intent = new /atom/movable/screen/act_intent()
|
||||
action_intent.icon = ui_style
|
||||
action_intent.icon_state = mymob.a_intent
|
||||
action_intent.screen_loc = ui_acti
|
||||
action_intent.hud = src
|
||||
static_inventory += action_intent
|
||||
|
||||
using = new /atom/movable/screen/mov_intent()
|
||||
using.icon = ui_style
|
||||
using.icon_state = (mymob.m_intent == MOVE_INTENT_RUN ? "running" : "walking")
|
||||
using.screen_loc = ui_movi
|
||||
using.hud = src
|
||||
static_inventory += using
|
||||
|
||||
using = new/atom/movable/screen/language_menu
|
||||
using.icon = ui_style
|
||||
using.hud = src
|
||||
static_inventory += using
|
||||
|
||||
using = new /atom/movable/screen/drop()
|
||||
using.icon = ui_style
|
||||
using.screen_loc = ui_drop_throw
|
||||
using.hud = src
|
||||
static_inventory += using
|
||||
|
||||
build_hand_slots()
|
||||
|
||||
using = new /atom/movable/screen/swap_hand()
|
||||
using.icon = ui_style
|
||||
using.icon_state = "swap_1_m" //extra wide!
|
||||
using.screen_loc = ui_swaphand_position(owner,1)
|
||||
using.hud = src
|
||||
static_inventory += using
|
||||
|
||||
using = new /atom/movable/screen/swap_hand()
|
||||
using.icon = ui_style
|
||||
using.icon_state = "swap_2"
|
||||
using.screen_loc = ui_swaphand_position(owner,2)
|
||||
using.hud = src
|
||||
static_inventory += using
|
||||
|
||||
inv_box = new /atom/movable/screen/inventory()
|
||||
inv_box.name = "mask"
|
||||
inv_box.icon = ui_style
|
||||
inv_box.icon_state = "mask"
|
||||
// inv_box.icon_full = "template"
|
||||
inv_box.screen_loc = ui_monkey_mask
|
||||
inv_box.slot_id = ITEM_SLOT_MASK
|
||||
inv_box.hud = src
|
||||
static_inventory += inv_box
|
||||
|
||||
inv_box = new /atom/movable/screen/inventory()
|
||||
inv_box.name = "neck"
|
||||
inv_box.icon = ui_style
|
||||
inv_box.icon_state = "neck"
|
||||
// inv_box.icon_full = "template"
|
||||
inv_box.screen_loc = ui_monkey_neck
|
||||
inv_box.slot_id = ITEM_SLOT_NECK
|
||||
inv_box.hud = src
|
||||
static_inventory += inv_box
|
||||
|
||||
inv_box = new /atom/movable/screen/inventory()
|
||||
inv_box.name = "head"
|
||||
inv_box.icon = ui_style
|
||||
inv_box.icon_state = "head"
|
||||
// inv_box.icon_full = "template"
|
||||
inv_box.screen_loc = ui_monkey_head
|
||||
inv_box.slot_id = ITEM_SLOT_HEAD
|
||||
inv_box.hud = src
|
||||
static_inventory += inv_box
|
||||
|
||||
inv_box = new /atom/movable/screen/inventory()
|
||||
inv_box.name = "back"
|
||||
inv_box.icon = ui_style
|
||||
inv_box.icon_state = "back"
|
||||
inv_box.screen_loc = ui_monkey_back
|
||||
inv_box.slot_id = ITEM_SLOT_BACK
|
||||
inv_box.hud = src
|
||||
static_inventory += inv_box
|
||||
|
||||
throw_icon = new /atom/movable/screen/throw_catch()
|
||||
throw_icon.icon = ui_style
|
||||
throw_icon.screen_loc = ui_drop_throw
|
||||
throw_icon.hud = src
|
||||
hotkeybuttons += throw_icon
|
||||
|
||||
internals = new /atom/movable/screen/internals()
|
||||
internals.hud = src
|
||||
infodisplay += internals
|
||||
|
||||
healths = new /atom/movable/screen/healths()
|
||||
healths.hud = src
|
||||
infodisplay += healths
|
||||
|
||||
pull_icon = new /atom/movable/screen/pull()
|
||||
pull_icon.icon = ui_style
|
||||
pull_icon.update_icon()
|
||||
pull_icon.screen_loc = ui_above_movement
|
||||
pull_icon.hud = src
|
||||
static_inventory += pull_icon
|
||||
|
||||
lingchemdisplay = new /atom/movable/screen/ling/chems()
|
||||
lingchemdisplay.hud = src
|
||||
infodisplay += lingchemdisplay
|
||||
|
||||
lingstingdisplay = new /atom/movable/screen/ling/sting()
|
||||
lingstingdisplay.hud = src
|
||||
infodisplay += lingstingdisplay
|
||||
|
||||
|
||||
zone_select = new /atom/movable/screen/zone_sel()
|
||||
zone_select.icon = ui_style
|
||||
zone_select.hud = src
|
||||
zone_select.update_icon()
|
||||
static_inventory += zone_select
|
||||
|
||||
mymob.client.screen = list()
|
||||
|
||||
using = new /atom/movable/screen/resist()
|
||||
using.icon = ui_style
|
||||
using.screen_loc = ui_above_intent
|
||||
using.hud = src
|
||||
hotkeybuttons += using
|
||||
|
||||
for(var/atom/movable/screen/inventory/inv in (static_inventory + toggleable_inventory))
|
||||
if(inv.slot_id)
|
||||
inv.hud = src
|
||||
inv_slots[TOBITSHIFT(inv.slot_id) + 1] = inv
|
||||
inv.update_icon()
|
||||
|
||||
/datum/hud/monkey/persistent_inventory_update()
|
||||
if(!mymob)
|
||||
return
|
||||
var/mob/living/carbon/monkey/M = mymob
|
||||
|
||||
if(hud_shown)
|
||||
if(M.back)
|
||||
M.back.screen_loc = ui_monkey_back
|
||||
M.client.screen += M.back
|
||||
if(M.wear_mask)
|
||||
M.wear_mask.screen_loc = ui_monkey_mask
|
||||
M.client.screen += M.wear_mask
|
||||
if(M.wear_neck)
|
||||
M.wear_neck.screen_loc = ui_monkey_neck
|
||||
M.client.screen += M.wear_neck
|
||||
if(M.head)
|
||||
M.head.screen_loc = ui_monkey_head
|
||||
M.client.screen += M.head
|
||||
else
|
||||
if(M.back)
|
||||
M.back.screen_loc = null
|
||||
if(M.wear_mask)
|
||||
M.wear_mask.screen_loc = null
|
||||
if(M.head)
|
||||
M.head.screen_loc = null
|
||||
|
||||
if(hud_version != HUD_STYLE_NOHUD)
|
||||
for(var/obj/item/I in M.held_items)
|
||||
I.screen_loc = ui_hand_position(M.get_held_index_of_item(I))
|
||||
M.client.screen += I
|
||||
else
|
||||
for(var/obj/item/I in M.held_items)
|
||||
I.screen_loc = null
|
||||
M.client.screen -= I
|
||||
@@ -28,6 +28,9 @@
|
||||
if(SEND_SIGNAL(src, COMSIG_HUMAN_EARLY_UNARMED_ATTACK, A, proximity) & COMPONENT_CANCEL_ATTACK_CHAIN)
|
||||
return
|
||||
SEND_SIGNAL(src, COMSIG_HUMAN_MELEE_UNARMED_ATTACK, A, proximity)
|
||||
|
||||
if(dna?.species?.spec_unarmedattack(src, A)) //Because species like monkeys dont use attack hand
|
||||
return
|
||||
A.attack_hand(src)
|
||||
|
||||
/// Return TRUE to cancel other attack hand effects that respect it.
|
||||
@@ -104,40 +107,7 @@
|
||||
/atom/proc/attack_animal(mob/user)
|
||||
SEND_SIGNAL(src, COMSIG_ATOM_ATTACK_ANIMAL, user)
|
||||
|
||||
|
||||
/*
|
||||
Monkeys
|
||||
*/
|
||||
/mob/living/carbon/monkey/UnarmedAttack(atom/A)
|
||||
if(HAS_TRAIT(src, TRAIT_HANDS_BLOCKED))
|
||||
if(a_intent != INTENT_HARM || is_muzzled())
|
||||
return
|
||||
if(!iscarbon(A))
|
||||
return
|
||||
var/mob/living/carbon/victim = A
|
||||
var/obj/item/bodypart/affecting = null
|
||||
if(ishuman(victim))
|
||||
var/mob/living/carbon/human/human_victim = victim
|
||||
affecting = human_victim.get_bodypart(pick(BODY_ZONE_CHEST, BODY_ZONE_PRECISE_L_HAND, BODY_ZONE_PRECISE_R_HAND, BODY_ZONE_L_LEG, BODY_ZONE_R_LEG))
|
||||
var/armor = victim.run_armor_check(affecting, MELEE)
|
||||
if(prob(25))
|
||||
victim.visible_message("<span class='danger'>[src]'s bite misses [victim]!</span>",
|
||||
"<span class='danger'>You avoid [src]'s bite!</span>", "<span class='hear'>You hear jaws snapping shut!</span>", COMBAT_MESSAGE_RANGE, src)
|
||||
to_chat(src, "<span class='danger'>Your bite misses [victim]!</span>")
|
||||
return
|
||||
victim.apply_damage(rand(1, 3), BRUTE, affecting, armor)
|
||||
victim.visible_message("<span class='danger'>[name] bites [victim]!</span>",
|
||||
"<span class='userdanger'>[name] bites you!</span>", "<span class='hear'>You hear a chomp!</span>", COMBAT_MESSAGE_RANGE, name)
|
||||
to_chat(name, "<span class='danger'>You bite [victim]!</span>")
|
||||
if(armor >= 2)
|
||||
return
|
||||
for(var/d in diseases)
|
||||
var/datum/disease/bite_infection = d
|
||||
victim.ForceContractDisease(bite_infection)
|
||||
return
|
||||
A.attack_paw(src)
|
||||
|
||||
|
||||
///Attacked by monkey
|
||||
/atom/proc/attack_paw(mob/user)
|
||||
if(SEND_SIGNAL(src, COMSIG_ATOM_ATTACK_PAW, user) & COMPONENT_CANCEL_ATTACK_CHAIN)
|
||||
return TRUE
|
||||
|
||||
@@ -269,8 +269,6 @@
|
||||
movedelay_type = /mob/living/carbon/human
|
||||
/datum/config_entry/number/outdated_movedelay/robot_delay
|
||||
movedelay_type = /mob/living/silicon/robot
|
||||
/datum/config_entry/number/outdated_movedelay/monkey_delay
|
||||
movedelay_type = /mob/living/carbon/monkey
|
||||
/datum/config_entry/number/outdated_movedelay/alien_delay
|
||||
movedelay_type = /mob/living/carbon/alien
|
||||
/datum/config_entry/number/outdated_movedelay/slime_delay
|
||||
|
||||
@@ -77,6 +77,8 @@ have ways of interacting with a specific atom and control it. They posses a blac
|
||||
/// Generates a plan and see if our existing one is still valid.
|
||||
/datum/ai_controller/process(delta_time)
|
||||
if(!able_to_run())
|
||||
var/atom/movable/movable_pawn = pawn
|
||||
walk(movable_pawn, 0) //stop moving
|
||||
return //this should remove them from processing in the future through event-based stuff.
|
||||
if(!current_behaviors?.len)
|
||||
SelectBehaviors(delta_time)
|
||||
@@ -101,10 +103,13 @@ have ways of interacting with a specific atom and control it. They posses a blac
|
||||
///Move somewhere using dumb movement (byond base)
|
||||
/datum/ai_controller/proc/MoveTo(delta_time)
|
||||
var/current_loc = get_turf(pawn)
|
||||
var/atom/movable/movable_pawn = pawn
|
||||
|
||||
if(!is_type_in_typecache(get_step(pawn, get_dir(pawn, current_movement_target)), GLOB.dangerous_turfs))
|
||||
step_towards(pawn, current_movement_target)
|
||||
if(current_loc == get_turf(pawn))
|
||||
var/turf/target_turf = get_step_towards(movable_pawn, current_movement_target)
|
||||
|
||||
if(!is_type_in_typecache(target_turf, GLOB.dangerous_turfs))
|
||||
movable_pawn.Move(target_turf, get_dir(current_loc, target_turf))
|
||||
if(current_loc == get_turf(movable_pawn))
|
||||
if(++pathing_attempts >= MAX_PATHING_ATTEMPTS)
|
||||
CancelActions()
|
||||
pathing_attempts = 0
|
||||
|
||||
@@ -156,6 +156,8 @@
|
||||
|
||||
/datum/ai_behavior/monkey_attack_mob/finish_action(datum/ai_controller/controller, succeeded)
|
||||
. = ..()
|
||||
var/mob/living/living_pawn = controller.pawn
|
||||
walk(living_pawn, 0)
|
||||
controller.blackboard[BB_MONKEY_CURRENT_ATTACK_TARGET] = null
|
||||
|
||||
/// attack using a held weapon otherwise bite the enemy, then if we are angry there is a chance we might calm down a little
|
||||
@@ -176,8 +178,7 @@
|
||||
if(weapon)
|
||||
weapon.melee_attack_chain(living_pawn, target)
|
||||
else
|
||||
target.attack_paw(living_pawn)
|
||||
|
||||
living_pawn.UnarmedAttack(target)
|
||||
// no de-aggro
|
||||
if(controller.blackboard[BB_MONKEY_AGRESSIVE])
|
||||
return
|
||||
|
||||
@@ -134,7 +134,8 @@ have ways of interacting with a specific mob and control it.
|
||||
var/mob/living/living_pawn = pawn
|
||||
|
||||
if(DT_PROB(25, delta_time) && (living_pawn.mobility_flags & MOBILITY_MOVE) && isturf(living_pawn.loc) && !living_pawn.pulledby)
|
||||
step(living_pawn, pick(GLOB.cardinals))
|
||||
var/move_dir = pick(GLOB.alldirs)
|
||||
living_pawn.Move(get_step(living_pawn, move_dir), move_dir)
|
||||
else if(DT_PROB(5, delta_time))
|
||||
INVOKE_ASYNC(living_pawn, /mob.proc/emote, pick("screech"))
|
||||
else if(DT_PROB(1, delta_time))
|
||||
|
||||
@@ -237,19 +237,17 @@
|
||||
|
||||
/datum/component/bloodysoles/feet/update_icon()
|
||||
if(ishuman(wielder))
|
||||
// Monkeys get no bloody feet :(
|
||||
var/mob/living/carbon/human/human = wielder
|
||||
if(NOBLOODOVERLAY in human.dna.species.species_traits)
|
||||
return
|
||||
if(bloody_shoes[BLOOD_STATE_HUMAN] > 0 && !is_obscured())
|
||||
wielder.remove_overlay(SHOES_LAYER)
|
||||
wielder.overlays_standing[SHOES_LAYER] = bloody_feet
|
||||
wielder.apply_overlay(SHOES_LAYER)
|
||||
human.remove_overlay(SHOES_LAYER)
|
||||
human.overlays_standing[SHOES_LAYER] = bloody_feet
|
||||
human.apply_overlay(SHOES_LAYER)
|
||||
else
|
||||
wielder.update_inv_shoes()
|
||||
human.update_inv_shoes()
|
||||
|
||||
/datum/component/bloodysoles/feet/add_parent_to_footprint(obj/effect/decal/cleanable/blood/footprints/FP)
|
||||
if(ismonkey(wielder))
|
||||
FP.species_types |= "monkey"
|
||||
return
|
||||
|
||||
if(!ishuman(wielder))
|
||||
FP.species_types |= "unknown"
|
||||
return
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
GLOBAL_LIST_INIT(creamable, typecacheof(list(
|
||||
/mob/living/carbon/human,
|
||||
/mob/living/carbon/monkey,
|
||||
/mob/living/simple_animal/pet/dog/corgi,
|
||||
/mob/living/silicon/ai)))
|
||||
|
||||
@@ -26,11 +25,11 @@ GLOBAL_LIST_INIT(creamable, typecacheof(list(
|
||||
var/mob/living/carbon/human/H = parent
|
||||
if(H.dna.species.limbs_id == "lizard")
|
||||
creamface.icon_state = "creampie_lizard"
|
||||
else if(H.dna.species.limbs_id == "monkey")
|
||||
creamface.icon_state = "creampie_monkey"
|
||||
else
|
||||
creamface.icon_state = "creampie_human"
|
||||
SEND_SIGNAL(H, COMSIG_ADD_MOOD_EVENT, "creampie", /datum/mood_event/creampie)
|
||||
else if(ismonkey(parent))
|
||||
creamface.icon_state = "creampie_monkey"
|
||||
else if(iscorgi(parent))
|
||||
creamface.icon_state = "creampie_corgi"
|
||||
else if(isAI(parent))
|
||||
|
||||
@@ -57,7 +57,17 @@
|
||||
else
|
||||
target_zone = check_zone(target_zone)
|
||||
|
||||
if(ishuman(src))
|
||||
|
||||
|
||||
if(ismonkey(src))
|
||||
var/mob/living/carbon/human/M = src
|
||||
switch(target_zone)
|
||||
if(BODY_ZONE_HEAD)
|
||||
if(M.wear_mask && isobj(M.wear_mask))
|
||||
Cl = M.wear_mask
|
||||
passed = prob((Cl.permeability_coefficient*100) - 1)
|
||||
|
||||
else if(ishuman(src))
|
||||
var/mob/living/carbon/human/H = src
|
||||
|
||||
switch(target_zone)
|
||||
@@ -95,14 +105,6 @@
|
||||
Cl = H.shoes
|
||||
passed = prob((Cl.permeability_coefficient*100) - 1)
|
||||
|
||||
else if(ismonkey(src))
|
||||
var/mob/living/carbon/monkey/M = src
|
||||
switch(target_zone)
|
||||
if(BODY_ZONE_HEAD)
|
||||
if(M.wear_mask && isobj(M.wear_mask))
|
||||
Cl = M.wear_mask
|
||||
passed = prob((Cl.permeability_coefficient*100) - 1)
|
||||
|
||||
if(passed)
|
||||
D.try_infect(src)
|
||||
|
||||
|
||||
@@ -23,7 +23,7 @@
|
||||
agent = "advance microbes"
|
||||
max_stages = 5
|
||||
spread_text = "Unknown"
|
||||
viable_mobtypes = list(/mob/living/carbon/human, /mob/living/carbon/monkey)
|
||||
viable_mobtypes = list(/mob/living/carbon/human)
|
||||
|
||||
// NEW VARS
|
||||
var/list/properties = list()
|
||||
|
||||
@@ -7,7 +7,7 @@
|
||||
cure_text = "Ethanol"
|
||||
cures = list(/datum/reagent/consumable/ethanol)
|
||||
agent = "Excess Lepidopticides"
|
||||
viable_mobtypes = list(/mob/living/carbon/human, /mob/living/carbon/monkey)
|
||||
viable_mobtypes = list(/mob/living/carbon/human)
|
||||
desc = "If left untreated subject will regurgitate butterflies."
|
||||
severity = DISEASE_SEVERITY_MINOR
|
||||
|
||||
|
||||
@@ -7,7 +7,7 @@
|
||||
cure_text = "Sugar"
|
||||
cures = list(/datum/reagent/consumable/sugar)
|
||||
agent = "Apidae Infection"
|
||||
viable_mobtypes = list(/mob/living/carbon/human, /mob/living/carbon/monkey)
|
||||
viable_mobtypes = list(/mob/living/carbon/human)
|
||||
desc = "If left untreated subject will regurgitate bees."
|
||||
severity = DISEASE_SEVERITY_MEDIUM
|
||||
infectable_biotypes = MOB_ORGANIC|MOB_UNDEAD //bees nesting in corpses
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
cure_text = "Rest & Spaceacillin"
|
||||
cures = list(/datum/reagent/medicine/spaceacillin)
|
||||
agent = "XY-rhinovirus"
|
||||
viable_mobtypes = list(/mob/living/carbon/human, /mob/living/carbon/monkey)
|
||||
viable_mobtypes = list(/mob/living/carbon/human)
|
||||
permeability_mod = 0.5
|
||||
desc = "If left untreated the subject will contract the flu."
|
||||
severity = DISEASE_SEVERITY_NONTHREAT
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
cure_text = "Synaptizine & Sulfur"
|
||||
cures = list(/datum/reagent/medicine/synaptizine,/datum/reagent/sulfur)
|
||||
agent = "Gravitokinetic Bipotential SADS-"
|
||||
viable_mobtypes = list(/mob/living/carbon/human, /mob/living/carbon/monkey)
|
||||
viable_mobtypes = list(/mob/living/carbon/human)
|
||||
desc = "If left untreated death will occur."
|
||||
severity = DISEASE_SEVERITY_BIOHAZARD
|
||||
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
cures = list(/datum/reagent/medicine/spaceacillin)
|
||||
cure_chance = 10
|
||||
agent = "H13N1 flu virion"
|
||||
viable_mobtypes = list(/mob/living/carbon/human, /mob/living/carbon/monkey)
|
||||
viable_mobtypes = list(/mob/living/carbon/human)
|
||||
permeability_mod = 0.75
|
||||
desc = "If left untreated the subject will feel quite unwell."
|
||||
severity = DISEASE_SEVERITY_MINOR
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
spread_flags = DISEASE_SPREAD_SPECIAL
|
||||
cure_text = "A coder's love (theoretical)."
|
||||
agent = "Shenanigans"
|
||||
viable_mobtypes = list(/mob/living/carbon/human, /mob/living/carbon/monkey, /mob/living/carbon/alien)
|
||||
viable_mobtypes = list(/mob/living/carbon/human, /mob/living/carbon/alien)
|
||||
severity = DISEASE_SEVERITY_BIOHAZARD
|
||||
stage_prob = 10
|
||||
visibility_flags = HIDDEN_SCANNER|HIDDEN_PANDEMIC
|
||||
@@ -103,7 +103,7 @@
|
||||
cures = list(/datum/reagent/medicine/adminordrazine)
|
||||
spread_text = "Monkey Bites"
|
||||
spread_flags = DISEASE_SPREAD_SPECIAL
|
||||
viable_mobtypes = list(/mob/living/carbon/monkey, /mob/living/carbon/human)
|
||||
viable_mobtypes = list(/mob/living/carbon/human)
|
||||
permeability_mod = 1
|
||||
cure_chance = 1
|
||||
disease_flags = CAN_CARRY|CAN_RESIST
|
||||
@@ -112,7 +112,7 @@
|
||||
stage_prob = 4
|
||||
visibility_flags = NONE
|
||||
agent = "Kongey Vibrion M-909"
|
||||
new_form = /mob/living/carbon/monkey
|
||||
new_form = /mob/living/carbon/human/species/monkey
|
||||
bantype = ROLE_MONKEY
|
||||
|
||||
|
||||
@@ -126,9 +126,8 @@
|
||||
/datum/disease/transformation/jungle_fever/do_disease_transformation(mob/living/carbon/affected_mob)
|
||||
if(affected_mob.mind && !is_monkey(affected_mob.mind))
|
||||
add_monkey(affected_mob.mind)
|
||||
if(ishuman(affected_mob))
|
||||
var/mob/living/carbon/monkey/M = affected_mob.monkeyize(TR_KEEPITEMS | TR_KEEPIMPLANTS | TR_KEEPORGANS | TR_KEEPDAMAGE | TR_KEEPVIRUS | TR_KEEPSTUNS | TR_KEEPREAGENTS | TR_KEEPSE)
|
||||
M.ventcrawler = VENTCRAWLER_ALWAYS
|
||||
affected_mob.monkeyize()
|
||||
affected_mob.ventcrawler = VENTCRAWLER_ALWAYS
|
||||
|
||||
|
||||
/datum/disease/transformation/jungle_fever/stage_act()
|
||||
|
||||
+2
-7
@@ -141,11 +141,7 @@
|
||||
mutation_index.Cut()
|
||||
default_mutation_genes.Cut()
|
||||
shuffle_inplace(mutations_temp)
|
||||
if(ismonkey(holder))
|
||||
mutations |= new RACEMUT(MUT_NORMAL)
|
||||
mutation_index[RACEMUT] = GET_SEQUENCE(RACEMUT)
|
||||
else
|
||||
mutation_index[RACEMUT] = create_sequence(RACEMUT, FALSE)
|
||||
mutation_index[RACEMUT] = create_sequence(RACEMUT, FALSE)
|
||||
default_mutation_genes[RACEMUT] = mutation_index[RACEMUT]
|
||||
for(var/i in 2 to DNA_MUTATION_BLOCKS)
|
||||
var/datum/mutation/human/M = mutations_temp[i]
|
||||
@@ -443,8 +439,7 @@
|
||||
return
|
||||
|
||||
for(var/mutation in dna.mutation_index)
|
||||
if(ismob(dna.check_block(mutation)))
|
||||
return //we got monkeyized/humanized, this mob will be deleted, no need to continue.
|
||||
dna.check_block(mutation)
|
||||
|
||||
update_mutations_overlay()
|
||||
|
||||
|
||||
@@ -180,11 +180,11 @@
|
||||
/datum/mutation/human/race/on_acquiring(mob/living/carbon/human/owner)
|
||||
if(..())
|
||||
return
|
||||
. = owner.monkeyize(TR_KEEPITEMS | TR_KEEPIMPLANTS | TR_KEEPORGANS | TR_KEEPDAMAGE | TR_KEEPVIRUS | TR_KEEPSTUNS | TR_KEEPREAGENTS | TR_KEEPSE | TR_KEEPAI)
|
||||
. = owner.monkeyize()
|
||||
|
||||
/datum/mutation/human/race/on_losing(mob/living/carbon/monkey/owner)
|
||||
if(owner && istype(owner) && owner.stat != DEAD && (owner.dna.mutations.Remove(src)))
|
||||
. = owner.humanize(TR_KEEPITEMS | TR_KEEPIMPLANTS | TR_KEEPORGANS | TR_KEEPDAMAGE | TR_KEEPVIRUS | TR_KEEPSTUNS | TR_KEEPREAGENTS | TR_KEEPSE | TR_KEEPAI)
|
||||
/datum/mutation/human/race/on_losing(mob/living/carbon/human/owner)
|
||||
if(owner && owner.stat != DEAD && (owner.dna.mutations.Remove(src)) && ismonkey(owner))
|
||||
. = owner.humanize()
|
||||
|
||||
/datum/mutation/human/glow
|
||||
name = "Glowy"
|
||||
|
||||
@@ -110,7 +110,7 @@
|
||||
return
|
||||
|
||||
var/mob/living/carbon/possible_throwable = user.pulling
|
||||
if(!possible_throwable.getorganslot(ORGAN_SLOT_TAIL) && !ismonkey(possible_throwable))
|
||||
if(!possible_throwable.getorganslot(ORGAN_SLOT_TAIL))
|
||||
return
|
||||
|
||||
if(ishuman(possible_throwable))
|
||||
|
||||
@@ -167,7 +167,7 @@
|
||||
for(var/datum/mind/rev_mind in revolution.head_revolutionaries())
|
||||
var/turf/T = get_turf(rev_mind.current)
|
||||
if(!considered_afk(rev_mind) && considered_alive(rev_mind) && is_station_level(T.z))
|
||||
if(ishuman(rev_mind.current) || ismonkey(rev_mind.current))
|
||||
if(ishuman(rev_mind.current))
|
||||
return FALSE
|
||||
return TRUE
|
||||
|
||||
|
||||
@@ -467,7 +467,7 @@
|
||||
for(var/datum/mind/rev_mind in revolution.head_revolutionaries())
|
||||
var/turf/T = get_turf(rev_mind.current)
|
||||
if(!considered_afk(rev_mind) && considered_alive(rev_mind) && is_station_level(T.z))
|
||||
if(ishuman(rev_mind.current) || ismonkey(rev_mind.current))
|
||||
if(ishuman(rev_mind.current))
|
||||
return FALSE
|
||||
return TRUE
|
||||
|
||||
@@ -618,7 +618,9 @@
|
||||
if(SSshuttle.emergency.mode != SHUTTLE_ENDGAME)
|
||||
return FALSE
|
||||
var/datum/disease/D = new /datum/disease/transformation/jungle_fever()
|
||||
for(var/mob/living/carbon/monkey/M in GLOB.alive_mob_list)
|
||||
for(var/mob/living/carbon/human/M in GLOB.alive_mob_list)
|
||||
if(!ismonkey(M))
|
||||
continue
|
||||
if (M.HasDisease(D))
|
||||
if(M.onCentCom() || M.onSyndieBase())
|
||||
escaped_monkeys++
|
||||
|
||||
@@ -79,7 +79,9 @@
|
||||
if(SSshuttle.emergency.mode != SHUTTLE_ENDGAME)
|
||||
return FALSE
|
||||
var/datum/disease/D = new /datum/disease/transformation/jungle_fever()
|
||||
for(var/mob/living/carbon/monkey/M in GLOB.alive_mob_list)
|
||||
for(var/mob/living/carbon/human/M in GLOB.alive_mob_list)
|
||||
if(!ismonkey(M))
|
||||
return
|
||||
if (M.HasDisease(D))
|
||||
if(M.onCentCom() || M.onSyndieBase())
|
||||
escaped_monkeys++
|
||||
|
||||
@@ -687,12 +687,13 @@ GLOBAL_LIST_EMPTY(possible_items_special)
|
||||
var/captured_amount = 0
|
||||
var/area/centcom/holding/A = GLOB.areas_by_type[/area/centcom/holding]
|
||||
for(var/mob/living/carbon/human/M in A)//Humans.
|
||||
if(ismonkey(M))
|
||||
captured_amount+=0.1
|
||||
continue
|
||||
if(M.stat == DEAD)//Dead folks are worth less.
|
||||
captured_amount+=0.5
|
||||
continue
|
||||
captured_amount+=1
|
||||
for(var/mob/living/carbon/monkey/M in A)//Monkeys are almost worthless, you failure.
|
||||
captured_amount+=0.1
|
||||
for(var/mob/living/carbon/alien/larva/M in A)//Larva are important for research.
|
||||
if(M.stat == DEAD)
|
||||
captured_amount+=0.5
|
||||
|
||||
@@ -149,7 +149,7 @@
|
||||
for(var/datum/mind/rev_mind in revolution.head_revolutionaries())
|
||||
var/turf/T = get_turf(rev_mind.current)
|
||||
if(!considered_afk(rev_mind) && considered_alive(rev_mind) && is_station_level(T.z))
|
||||
if(ishuman(rev_mind.current) || ismonkey(rev_mind.current))
|
||||
if(ishuman(rev_mind.current))
|
||||
return FALSE
|
||||
return TRUE
|
||||
|
||||
|
||||
@@ -95,7 +95,7 @@
|
||||
else
|
||||
if(sbed)
|
||||
data["table"] = sbed
|
||||
if(!ishuman(sbed.occupant) && !ismonkey(sbed.occupant))
|
||||
if(!ishuman(sbed.occupant))
|
||||
return data
|
||||
data["patient"] = list()
|
||||
patient = sbed.occupant
|
||||
|
||||
@@ -360,9 +360,6 @@
|
||||
L.adjustBruteLoss(DOOR_CRUSH_DAMAGE)
|
||||
L.emote("scream")
|
||||
L.Paralyze(100)
|
||||
else if(ismonkey(L)) //For monkeys
|
||||
L.adjustBruteLoss(DOOR_CRUSH_DAMAGE)
|
||||
L.Paralyze(100)
|
||||
else //for simple_animals & borgs
|
||||
L.adjustBruteLoss(DOOR_CRUSH_DAMAGE)
|
||||
var/turf/location = get_turf(src)
|
||||
|
||||
@@ -76,9 +76,6 @@
|
||||
else if(ispath(mobtype, /mob/living/simple_animal/slime))
|
||||
race = "Slime"
|
||||
|
||||
else if(ispath(mobtype, /mob/living/carbon/monkey))
|
||||
race = "Monkey"
|
||||
|
||||
// sometimes M gets deleted prematurely for AIs... just check the job
|
||||
else if(ispath(mobtype, /mob/living/silicon) || C.parameters["job"] == "AI")
|
||||
race = "Artificial Life"
|
||||
|
||||
@@ -447,7 +447,7 @@
|
||||
var/endtime = world.time+duration
|
||||
for(var/mutation in remove_mutations)
|
||||
if(mutation == RACEMUT)
|
||||
if(ishuman(M))
|
||||
if(!ismonkey(M))
|
||||
continue
|
||||
M = M.dna.remove_mutation(mutation)
|
||||
else
|
||||
@@ -455,7 +455,7 @@
|
||||
for(var/mutation in add_mutations)
|
||||
if(M.dna.get_mutation(mutation))
|
||||
continue //Skip permanent mutations we already have.
|
||||
if(mutation == RACEMUT && ishuman(M))
|
||||
if(mutation == RACEMUT && !ismonkey(M))
|
||||
message_admins("[ADMIN_LOOKUPFLW(user)] injected [key_name_admin(M)] with the [name] <span class='danger'>(MONKEY)</span>")
|
||||
log_msg += " (MONKEY)"
|
||||
M = M.dna.add_mutation(mutation, MUT_OTHER, endtime)
|
||||
|
||||
@@ -324,7 +324,7 @@
|
||||
foodtypes = MEAT | SUGAR
|
||||
w_class = WEIGHT_CLASS_TINY
|
||||
var/faction
|
||||
var/spawned_mob = /mob/living/carbon/monkey
|
||||
var/spawned_mob = /mob/living/carbon/human/species/monkey
|
||||
|
||||
/obj/item/food/monkeycube/proc/Expand()
|
||||
var/mob/spammer = get_mob_by_key(fingerprintslast)
|
||||
|
||||
@@ -113,7 +113,7 @@
|
||||
if(2)
|
||||
if(scooldown < world.time)
|
||||
if(M.health >= 0)
|
||||
if(ishuman(M)||ismonkey(M))
|
||||
if(ishuman(M))
|
||||
M.electrocute_act(5, "[user]", flags = SHOCK_NOGLOVES)
|
||||
user.visible_message("<span class='userdanger'>[user] electrocutes [M] with [user.p_their()] touch!</span>", \
|
||||
"<span class='danger'>You electrocute [M] with your touch!</span>")
|
||||
|
||||
@@ -314,11 +314,6 @@ GLOBAL_LIST_INIT(plastitaniumglass_recipes, list(
|
||||
if(!H.gloves && !HAS_TRAIT(H, TRAIT_PIERCEIMMUNE)) // golems, etc
|
||||
to_chat(H, "<span class='warning'>[src] cuts into your hand!</span>")
|
||||
H.apply_damage(force*0.5, BRUTE, hit_hand)
|
||||
else if(ismonkey(user))
|
||||
var/mob/living/carbon/monkey/M = user
|
||||
if(!HAS_TRAIT(M, TRAIT_PIERCEIMMUNE))
|
||||
to_chat(M, "<span class='warning'>[src] cuts into your hand!</span>")
|
||||
M.apply_damage(force*0.5, BRUTE, hit_hand)
|
||||
|
||||
/obj/item/shard/attackby(obj/item/I, mob/user, params)
|
||||
if(istype(I, /obj/item/lightreplacer))
|
||||
|
||||
@@ -346,7 +346,7 @@
|
||||
else
|
||||
playsound(M, 'sound/items/trayhit2.ogg', 50, TRUE)
|
||||
|
||||
if(ishuman(M) || ismonkey(M))
|
||||
if(ishuman(M))
|
||||
if(prob(10))
|
||||
M.Paralyze(40)
|
||||
update_icon()
|
||||
|
||||
@@ -86,14 +86,6 @@
|
||||
S.add_atom_colour(newcolor, FIXED_COLOUR_PRIORITY)
|
||||
return TRUE
|
||||
|
||||
/mob/living/carbon/monkey/petrify(statue_timer)
|
||||
if(!isturf(loc))
|
||||
return FALSE
|
||||
var/obj/structure/statue/petrified/S = new(loc, src, statue_timer)
|
||||
S.name = "statue of a monkey"
|
||||
S.icon_state = "monkey"
|
||||
return TRUE
|
||||
|
||||
/mob/living/simple_animal/pet/dog/corgi/petrify(statue_timer)
|
||||
if(!isturf(loc))
|
||||
return FALSE
|
||||
|
||||
@@ -594,7 +594,7 @@
|
||||
get_patient()
|
||||
if(!patient)
|
||||
return FALSE
|
||||
if(ishuman(patient) || ismonkey(patient))
|
||||
if(ishuman(patient))
|
||||
return TRUE
|
||||
return FALSE
|
||||
|
||||
|
||||
@@ -127,7 +127,7 @@
|
||||
body += "<br>"
|
||||
|
||||
//Human
|
||||
if(ishuman(M))
|
||||
if(ishuman(M) && !ismonkey(M))
|
||||
body += "<B>Human</B> | "
|
||||
else
|
||||
body += "<A href='?_src_=holder;[HrefToken()];humanone=[REF(M)]'>Humanize</A> | "
|
||||
|
||||
@@ -231,10 +231,10 @@
|
||||
if(isliving(M))
|
||||
|
||||
if(iscarbon(M)) //Carbon stuff
|
||||
if(ishuman(M))
|
||||
M_job = M.job
|
||||
else if(ismonkey(M))
|
||||
if(ismonkey(M))
|
||||
M_job = "Monkey"
|
||||
else if(ishuman(M))
|
||||
M_job = M.job
|
||||
else if(isalien(M)) //aliens
|
||||
if(islarva(M))
|
||||
M_job = "Alien larva"
|
||||
|
||||
@@ -409,7 +409,7 @@
|
||||
if("slime")
|
||||
M.change_mob_type( /mob/living/simple_animal/slime , null, null, delmob )
|
||||
if("monkey")
|
||||
M.change_mob_type( /mob/living/carbon/monkey , null, null, delmob )
|
||||
M.change_mob_type( /mob/living/carbon/human/species/monkey , null, null, delmob )
|
||||
if("robot")
|
||||
M.change_mob_type( /mob/living/silicon/robot , null, null, delmob )
|
||||
if("cat")
|
||||
@@ -894,9 +894,9 @@
|
||||
if(!check_rights(R_SPAWN))
|
||||
return
|
||||
|
||||
var/mob/living/carbon/monkey/Mo = locate(href_list["humanone"])
|
||||
if(!istype(Mo))
|
||||
to_chat(usr, "This can only be used on instances of type /mob/living/carbon/monkey.", confidential = TRUE)
|
||||
var/mob/living/carbon/human/Mo = locate(href_list["humanone"])
|
||||
if(!ismonkey(Mo))
|
||||
to_chat(usr, "This can only be used on monkeys.", confidential = TRUE)
|
||||
return
|
||||
|
||||
log_admin("[key_name(usr)] attempting to humanize [key_name(Mo)].")
|
||||
|
||||
@@ -99,7 +99,7 @@
|
||||
|
||||
Don't crash the server, OK?
|
||||
|
||||
"UPDATE /mob/living/carbon/monkey SET #null = forceMove(usr.loc)"
|
||||
"UPDATE /mob/living/carbon/human/species/monkey SET #null = forceMove(usr.loc)"
|
||||
|
||||
Writing "#null" in front of the "=" will call the proc and discard the return value.
|
||||
|
||||
|
||||
@@ -395,12 +395,12 @@ Traitors and the like can also be revived with the previous role mostly intact.
|
||||
//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
|
||||
var/mob/living/carbon/human/species/monkey/new_monkey = new
|
||||
SSjob.SendToLateJoin(new_monkey)
|
||||
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
|
||||
to_chat(new_monkey, "You have been fully respawned. Enjoy the game.", confidential = TRUE)
|
||||
var/msg = "<span class='adminnotice'>[key_name_admin(usr)] has respawned [new_monkey.key] as a filthy xeno.</span>"
|
||||
var/msg = "<span class='adminnotice'>[key_name_admin(usr)] has respawned [new_monkey.key] as a filthy monkey.</span>"
|
||||
message_admins(msg)
|
||||
admin_ticket_log(new_monkey, msg)
|
||||
return //all done. The ghost is auto-deleted
|
||||
|
||||
@@ -64,9 +64,9 @@
|
||||
if(!check_rights(R_SPAWN))
|
||||
return
|
||||
|
||||
var/mob/living/carbon/monkey/Mo = locate(href_list["makehuman"]) in GLOB.mob_list
|
||||
if(!istype(Mo))
|
||||
to_chat(usr, "This can only be done to instances of type /mob/living/carbon/monkey", confidential = TRUE)
|
||||
var/mob/living/carbon/human/Mo = locate(href_list["makehuman"]) in GLOB.mob_list
|
||||
if(!ismonkey(Mo))
|
||||
to_chat(usr, "This can only be done to monkeys", confidential = TRUE)
|
||||
return
|
||||
|
||||
if(alert("Confirm mob type change?",,"Transform","Cancel") != "Transform")
|
||||
|
||||
@@ -106,7 +106,7 @@
|
||||
mimicing = ""
|
||||
|
||||
/datum/antagonist/changeling/proc/remove_changeling_powers()
|
||||
if(ishuman(owner.current) || ismonkey(owner.current))
|
||||
if(ishuman(owner.current))
|
||||
reset_properties()
|
||||
for(var/datum/action/changeling/p in purchasedpowers)
|
||||
purchasedpowers -= p
|
||||
|
||||
@@ -66,10 +66,7 @@ the same goes for Remove(). if you override Remove(), call parent or else your p
|
||||
//Fairly important to remember to return 1 on success >.<
|
||||
|
||||
/datum/action/changeling/proc/can_sting(mob/living/user, mob/target)
|
||||
if(!ishuman(user) && !ismonkey(user)) //typecast everything from mob to carbon from this point onwards
|
||||
return FALSE
|
||||
if(req_human && !ishuman(user))
|
||||
to_chat(user, "<span class='warning'>We cannot do that in this form!</span>")
|
||||
if(!ishuman(user)) //typecast everything from mob to carbon from this point onwards
|
||||
return FALSE
|
||||
var/datum/antagonist/changeling/c = user.mind.has_antag_datum(/datum/antagonist/changeling)
|
||||
if(c.chem_charges < chemical_cost)
|
||||
@@ -92,7 +89,7 @@ the same goes for Remove(). if you override Remove(), call parent or else your p
|
||||
/datum/action/changeling/proc/can_be_used_by(mob/user)
|
||||
if(!user || QDELETED(user))
|
||||
return FALSE
|
||||
if(!ishuman(user) && !ismonkey(user))
|
||||
if(!ishuman(user))
|
||||
return FALSE
|
||||
if(req_human && !ishuman(user))
|
||||
return FALSE
|
||||
|
||||
@@ -28,7 +28,7 @@
|
||||
..()
|
||||
changeling.purchasedpowers -= src
|
||||
|
||||
var/newmob = user.humanize(TR_KEEPITEMS | TR_KEEPIMPLANTS | TR_KEEPORGANS | TR_KEEPDAMAGE | TR_KEEPVIRUS | TR_KEEPSTUNS | TR_KEEPREAGENTS | TR_KEEPSE)
|
||||
var/newmob = user.humanize()
|
||||
|
||||
changeling_transform(newmob, chosen_prof)
|
||||
return TRUE
|
||||
|
||||
@@ -14,6 +14,6 @@
|
||||
to_chat(user, "<span class='warning'>Our genes cry out!</span>")
|
||||
..()
|
||||
|
||||
user.monkeyize(TR_KEEPITEMS | TR_KEEPIMPLANTS | TR_KEEPORGANS | TR_KEEPDAMAGE | TR_KEEPVIRUS | TR_KEEPSTUNS | TR_KEEPREAGENTS | TR_KEEPSE | TR_KEEPSTAMINADAMAGE)
|
||||
user.monkeyize()
|
||||
|
||||
return TRUE
|
||||
|
||||
@@ -99,16 +99,12 @@
|
||||
/datum/action/changeling/sting/transformation/sting_action(mob/user, mob/target)
|
||||
log_combat(user, target, "stung", "transformation sting", " new identity is '[selected_dna.dna.real_name]'")
|
||||
var/datum/dna/NewDNA = selected_dna.dna
|
||||
if(ismonkey(target))
|
||||
to_chat(user, "<span class='notice'>Our genes cry out as we sting [target.name]!</span>")
|
||||
|
||||
var/mob/living/carbon/C = target
|
||||
. = TRUE
|
||||
if(istype(C))
|
||||
C.real_name = NewDNA.real_name
|
||||
NewDNA.transfer_identity(C)
|
||||
if(ismonkey(C))
|
||||
C.humanize(TR_KEEPITEMS | TR_KEEPIMPLANTS | TR_KEEPORGANS | TR_KEEPDAMAGE | TR_KEEPVIRUS | TR_KEEPSTUNS | TR_KEEPREAGENTS | TR_DEFAULTMSG | TR_KEEPAI)
|
||||
C.updateappearance(mutcolor_update=1)
|
||||
*/
|
||||
//SKYRAT EDIT REMOVAL END
|
||||
|
||||
@@ -77,14 +77,14 @@
|
||||
objectives |= monkey_team.objectives
|
||||
|
||||
/datum/antagonist/monkey/admin_remove(mob/admin)
|
||||
var/mob/living/carbon/monkey/M = owner.current
|
||||
if(istype(M))
|
||||
var/mob/living/carbon/human/M = owner.current
|
||||
if(ismonkey(M))
|
||||
switch(alert(admin, "Humanize?", "Humanize", "Yes", "No"))
|
||||
if("Yes")
|
||||
if(admin == M)
|
||||
admin = M.humanize(TR_KEEPITEMS | TR_KEEPIMPLANTS | TR_KEEPORGANS | TR_KEEPDAMAGE | TR_KEEPVIRUS | TR_KEEPSTUNS | TR_KEEPREAGENTS | TR_DEFAULTMSG)
|
||||
admin = M.humanize()
|
||||
else
|
||||
M.humanize(TR_KEEPITEMS | TR_KEEPIMPLANTS | TR_KEEPORGANS | TR_KEEPDAMAGE | TR_KEEPVIRUS | TR_KEEPSTUNS | TR_KEEPREAGENTS | TR_DEFAULTMSG)
|
||||
M.humanize()
|
||||
if("No")
|
||||
//nothing
|
||||
else
|
||||
@@ -144,7 +144,9 @@
|
||||
|
||||
/datum/objective/monkey/check_completion()
|
||||
var/datum/disease/D = new /datum/disease/transformation/jungle_fever()
|
||||
for(var/mob/living/carbon/monkey/M in GLOB.alive_mob_list)
|
||||
for(var/mob/living/carbon/human/M in GLOB.alive_mob_list)
|
||||
if(!ismonkey(M))
|
||||
continue
|
||||
if (M.HasDisease(D) && (M.onCentCom() || M.onSyndieBase()))
|
||||
escaped_monkeys++
|
||||
if(escaped_monkeys >= monkeys_to_win)
|
||||
@@ -162,14 +164,18 @@
|
||||
|
||||
/datum/team/monkey/proc/infected_monkeys_alive()
|
||||
var/datum/disease/D = new /datum/disease/transformation/jungle_fever()
|
||||
for(var/mob/living/carbon/monkey/M in GLOB.alive_mob_list)
|
||||
for(var/mob/living/carbon/human/M in GLOB.alive_mob_list)
|
||||
if(!ismonkey(M))
|
||||
continue
|
||||
if(M.HasDisease(D))
|
||||
return TRUE
|
||||
return FALSE
|
||||
|
||||
/datum/team/monkey/proc/infected_monkeys_escaped()
|
||||
var/datum/disease/D = new /datum/disease/transformation/jungle_fever()
|
||||
for(var/mob/living/carbon/monkey/M in GLOB.alive_mob_list)
|
||||
for(var/mob/living/carbon/human/M in GLOB.alive_mob_list)
|
||||
if(!ismonkey(M))
|
||||
continue
|
||||
if(M.HasDisease(D) && (M.onCentCom() || M.onSyndieBase()))
|
||||
return TRUE
|
||||
return FALSE
|
||||
|
||||
@@ -201,7 +201,7 @@
|
||||
to_chat(old_owner, "<span class='userdanger'>Revolution has been disappointed of your leader traits! You are a regular revolutionary now!</span>")
|
||||
|
||||
/datum/antagonist/rev/farewell()
|
||||
if(ishuman(owner.current) || ismonkey(owner.current))
|
||||
if(ishuman(owner.current))
|
||||
owner.current.visible_message("<span class='deconversion_message'>[owner.current] looks like [owner.current.p_theyve()] just remembered [owner.current.p_their()] real allegiance!</span>", null, null, null, owner.current)
|
||||
to_chat(owner, "<span class ='deconversion_message bold'>You are no longer a brainwashed revolutionary! Your memory is hazy from the time you were a rebel...the only thing you remember is the name of the one who brainwashed you....</span>")
|
||||
else if(issilicon(owner.current))
|
||||
@@ -209,7 +209,7 @@
|
||||
to_chat(owner, "<span class='userdanger'>The frame's firmware detects and deletes your neural reprogramming! You remember nothing but the name of the one who flashed you.</span>")
|
||||
|
||||
/datum/antagonist/rev/head/farewell()
|
||||
if((ishuman(owner.current) || ismonkey(owner.current)))
|
||||
if((ishuman(owner.current)))
|
||||
if(owner.current.stat != DEAD)
|
||||
owner.current.visible_message("<span class='deconversion_message'>[owner.current] looks like [owner.current.p_theyve()] just remembered [owner.current.p_their()] real allegiance!</span>", null, null, null, owner.current)
|
||||
to_chat(owner, "<span class ='deconversion_message bold'>You have given up your cause of overthrowing the command staff. You are no longer a Head Revolutionary.</span>")
|
||||
@@ -236,7 +236,7 @@
|
||||
|
||||
/datum/antagonist/rev/head/equip_rev()
|
||||
var/mob/living/carbon/C = owner.current
|
||||
if(!ishuman(C) && !ismonkey(C))
|
||||
if(!ishuman(C))
|
||||
return
|
||||
|
||||
if(give_flash)
|
||||
|
||||
@@ -135,24 +135,6 @@
|
||||
death(FALSE)
|
||||
ghostize(FALSE) // Disallows reentering body and disassociates mind
|
||||
|
||||
/mob/living/carbon/monkey/verb/suicide()
|
||||
set hidden = TRUE
|
||||
if(!canSuicide())
|
||||
return
|
||||
var/confirm = alert("Are you sure you want to commit suicide?", "Confirm Suicide", "Yes", "No")
|
||||
if(!canSuicide())
|
||||
return
|
||||
if(confirm == "Yes")
|
||||
set_suicide(TRUE)
|
||||
visible_message("<span class='danger'>[src] is attempting to bite [p_their()] tongue. It looks like [p_theyre()] trying to commit suicide.</span>", \
|
||||
"<span class='userdanger'>[src] is attempting to bite [p_their()] tongue. It looks like [p_theyre()] trying to commit suicide.</span>")
|
||||
|
||||
suicide_log()
|
||||
|
||||
adjustOxyLoss(max(200- getToxLoss() - getFireLoss() - getBruteLoss() - getOxyLoss(), 0))
|
||||
death(FALSE)
|
||||
ghostize(FALSE) // Disallows reentering body and disassociates mind
|
||||
|
||||
/mob/living/silicon/ai/verb/suicide()
|
||||
set hidden = TRUE
|
||||
if(!canSuicide())
|
||||
|
||||
@@ -390,7 +390,7 @@
|
||||
icon_state = "monkeymind"
|
||||
inhand_icon_state = "monkeymind"
|
||||
strip_delay = 100
|
||||
var/mob/living/carbon/monkey/magnification = null ///if the helmet is on a valid target (just works like a normal helmet if not (cargo please stop))
|
||||
var/mob/living/carbon/human/magnification = null ///if the helmet is on a valid target (just works like a normal helmet if not (cargo please stop))
|
||||
var/polling = FALSE///if the helmet is currently polling for targets (special code for removal)
|
||||
var/light_colors = 1 ///which icon state color this is (red, blue, yellow)
|
||||
|
||||
|
||||
@@ -172,9 +172,7 @@
|
||||
var/mob/living/carbon/C = occupant
|
||||
typeofmeat = C.type_of_meat
|
||||
gibtype = C.gib_type
|
||||
if(ismonkey(C))
|
||||
typeofskin = /obj/item/stack/sheet/animalhide/monkey
|
||||
else if(isalien(C))
|
||||
if(isalien(C))
|
||||
typeofskin = /obj/item/stack/sheet/animalhide/xeno
|
||||
var/occupant_volume
|
||||
if(occupant?.reagents)
|
||||
|
||||
@@ -66,7 +66,7 @@ GLOBAL_LIST_EMPTY(monkey_recyclers)
|
||||
if(ismonkey(target))
|
||||
stuff_monkey_in(target, user)
|
||||
|
||||
/obj/machinery/monkey_recycler/proc/stuff_monkey_in(mob/living/carbon/monkey/target, mob/living/user)
|
||||
/obj/machinery/monkey_recycler/proc/stuff_monkey_in(mob/living/carbon/human/target, mob/living/user)
|
||||
if(!istype(target))
|
||||
return
|
||||
if(target.stat == CONSCIOUS)
|
||||
|
||||
@@ -18,7 +18,7 @@
|
||||
//if they are holding or wearing a card that has access, that works
|
||||
if(check_access(H.get_active_held_item()) || src.check_access(H.wear_id))
|
||||
return TRUE
|
||||
else if(ismonkey(M) || isalienadult(M))
|
||||
else if(isalienadult(M))
|
||||
var/mob/living/carbon/george = M
|
||||
//they can only hold things :(
|
||||
if(check_access(george.get_active_held_item()))
|
||||
|
||||
@@ -1614,6 +1614,11 @@
|
||||
icon_state = "cat"
|
||||
color_src = HAIR
|
||||
|
||||
/datum/sprite_accessory/tails/monkey/default
|
||||
name = "Monkey"
|
||||
icon_state = "monkey"
|
||||
color_src = FALSE
|
||||
|
||||
/datum/sprite_accessory/snouts
|
||||
icon = 'icons/mob/mutant_bodyparts.dmi'
|
||||
|
||||
|
||||
@@ -4,23 +4,6 @@
|
||||
BLOOD SYSTEM
|
||||
****************************************************/
|
||||
|
||||
/mob/living/carbon/monkey/handle_blood()
|
||||
if(bodytemperature <= TCRYO || (HAS_TRAIT(src, TRAIT_HUSK))) //cryosleep or husked people do not pump the blood.
|
||||
return
|
||||
|
||||
var/temp_bleed = 0
|
||||
for(var/X in bodyparts)
|
||||
var/obj/item/bodypart/BP = X
|
||||
temp_bleed += BP.get_bleed_rate()
|
||||
BP.generic_bleedstacks = max(0, BP.generic_bleedstacks - 1)
|
||||
bleed(temp_bleed)
|
||||
|
||||
//Blood regeneration if there is some space
|
||||
if(blood_volume < BLOOD_VOLUME_NORMAL)
|
||||
blood_volume += 0.1 // regenerate blood VERY slowly
|
||||
if(blood_volume < BLOOD_VOLUME_OKAY)
|
||||
adjustOxyLoss(round((BLOOD_VOLUME_NORMAL - blood_volume) * 0.02, 1))
|
||||
|
||||
// Takes care blood loss and regeneration
|
||||
/mob/living/carbon/human/handle_blood()
|
||||
|
||||
@@ -207,10 +190,6 @@
|
||||
if(blood_volume)
|
||||
return /datum/reagent/blood
|
||||
|
||||
/mob/living/carbon/monkey/get_blood_id()
|
||||
if(!(HAS_TRAIT(src, TRAIT_HUSK)))
|
||||
return /datum/reagent/blood
|
||||
|
||||
/mob/living/carbon/human/get_blood_id()
|
||||
if(HAS_TRAIT(src, TRAIT_HUSK))
|
||||
return
|
||||
|
||||
@@ -72,7 +72,7 @@ In all, this is a lot like the monkey code. /N
|
||||
return FALSE
|
||||
|
||||
|
||||
/mob/living/carbon/alien/attack_paw(mob/living/carbon/monkey/M)
|
||||
/mob/living/carbon/alien/attack_paw(mob/living/carbon/human/M)
|
||||
if(..())
|
||||
if (stat != DEAD)
|
||||
var/obj/item/bodypart/affecting = get_bodypart(ran_zone(M.zone_selected))
|
||||
|
||||
@@ -250,10 +250,6 @@
|
||||
return FALSE
|
||||
if(M.getorgan(/obj/item/organ/alien/hivenode))
|
||||
return FALSE
|
||||
|
||||
if(ismonkey(M))
|
||||
return TRUE
|
||||
|
||||
var/mob/living/carbon/C = M
|
||||
if(ishuman(C) && !(ITEM_SLOT_MASK in C.dna.species.no_equip))
|
||||
var/mob/living/carbon/human/H = C
|
||||
|
||||
@@ -168,7 +168,7 @@
|
||||
return FALSE
|
||||
|
||||
|
||||
/mob/living/carbon/attack_paw(mob/living/carbon/monkey/M)
|
||||
/mob/living/carbon/attack_paw(mob/living/carbon/human/M)
|
||||
|
||||
if(can_inject(M, TRUE))
|
||||
for(var/thing in diseases)
|
||||
|
||||
@@ -49,13 +49,6 @@
|
||||
if(user.usable_hands < 2)
|
||||
return FALSE
|
||||
return ..()
|
||||
|
||||
/datum/emote/living/carbon/gnarl
|
||||
key = "gnarl"
|
||||
key_third_person = "gnarls"
|
||||
message = "gnarls and shows its teeth..."
|
||||
mob_type_allowed_typecache = list(/mob/living/carbon/monkey)
|
||||
|
||||
/datum/emote/living/carbon/moan
|
||||
key = "moan"
|
||||
key_third_person = "moans"
|
||||
@@ -67,46 +60,21 @@
|
||||
key = "roll"
|
||||
key_third_person = "rolls"
|
||||
message = "rolls."
|
||||
mob_type_allowed_typecache = list(/mob/living/carbon/monkey, /mob/living/carbon/alien)
|
||||
mob_type_allowed_typecache = list(/mob/living/carbon/alien)
|
||||
hands_use_check = TRUE
|
||||
|
||||
/datum/emote/living/carbon/scratch
|
||||
key = "scratch"
|
||||
key_third_person = "scratches"
|
||||
message = "scratches."
|
||||
mob_type_allowed_typecache = list(/mob/living/carbon/monkey, /mob/living/carbon/alien)
|
||||
mob_type_allowed_typecache = list(/mob/living/carbon/alien)
|
||||
hands_use_check = TRUE
|
||||
|
||||
/datum/emote/living/carbon/screech
|
||||
key = "screech"
|
||||
key_third_person = "screeches"
|
||||
message = "screeches."
|
||||
mob_type_allowed_typecache = list(/mob/living/carbon/monkey)
|
||||
emote_type = EMOTE_AUDIBLE
|
||||
|
||||
//SKYRAT EDIT REMOVAL BEGIN - EMOTES - begone with the annoying screech
|
||||
/*
|
||||
/datum/emote/living/carbon/screech/get_sound(mob/living/user)
|
||||
return pick('sound/creatures/monkey/monkey_screech_1.ogg',
|
||||
'sound/creatures/monkey/monkey_screech_2.ogg',
|
||||
'sound/creatures/monkey/monkey_screech_3.ogg',
|
||||
'sound/creatures/monkey/monkey_screech_4.ogg',
|
||||
'sound/creatures/monkey/monkey_screech_5.ogg',
|
||||
'sound/creatures/monkey/monkey_screech_6.ogg',
|
||||
'sound/creatures/monkey/monkey_screech_7.ogg')
|
||||
*/
|
||||
//SKYRAT EDIT REMOVAL END
|
||||
|
||||
/datum/emote/living/carbon/screech/roar
|
||||
key = "roar"
|
||||
key_third_person = "roars"
|
||||
message = "roars."
|
||||
|
||||
/datum/emote/living/carbon/sign
|
||||
key = "sign"
|
||||
key_third_person = "signs"
|
||||
message_param = "signs the number %t."
|
||||
mob_type_allowed_typecache = list(/mob/living/carbon/monkey, /mob/living/carbon/alien)
|
||||
mob_type_allowed_typecache = list(/mob/living/carbon/alien)
|
||||
hands_use_check = TRUE
|
||||
|
||||
/datum/emote/living/carbon/sign/select_param(mob/user, params)
|
||||
@@ -124,7 +92,7 @@
|
||||
/datum/emote/living/carbon/tail
|
||||
key = "tail"
|
||||
message = "waves their tail."
|
||||
mob_type_allowed_typecache = list(/mob/living/carbon/monkey, /mob/living/carbon/alien)
|
||||
mob_type_allowed_typecache = list(/mob/living/carbon/alien)
|
||||
|
||||
/datum/emote/living/carbon/wink
|
||||
key = "wink"
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
GLOBAL_LIST_EMPTY(dead_players_during_shift)
|
||||
/mob/living/carbon/human/gib_animation()
|
||||
new /obj/effect/temp_visual/gib_animation(loc, "gibbed-h")
|
||||
new /obj/effect/temp_visual/gib_animation(loc, dna.species.gib_anim)
|
||||
|
||||
/mob/living/carbon/human/dust_animation()
|
||||
new /obj/effect/temp_visual/dust_animation(loc, "dust-h")
|
||||
new /obj/effect/temp_visual/dust_animation(loc, dna.species.dust_anim)
|
||||
|
||||
/mob/living/carbon/human/spawn_gibs(with_bodyparts)
|
||||
if(with_bodyparts)
|
||||
|
||||
@@ -70,8 +70,23 @@
|
||||
return pick('sound/voice/human/malescream_1.ogg', 'sound/voice/human/malescream_2.ogg', 'sound/voice/human/malescream_3.ogg', 'sound/voice/human/malescream_4.ogg', 'sound/voice/human/malescream_5.ogg', 'sound/voice/human/malescream_6.ogg')
|
||||
else if(ismoth(H))
|
||||
return 'sound/voice/moth/scream_moth.ogg'
|
||||
else if(ismonkey(user)) //If its a monkey, override it.
|
||||
return pick('sound/creatures/monkey/monkey_screech_1.ogg',
|
||||
'sound/creatures/monkey/monkey_screech_2.ogg',
|
||||
'sound/creatures/monkey/monkey_screech_3.ogg',
|
||||
'sound/creatures/monkey/monkey_screech_4.ogg',
|
||||
'sound/creatures/monkey/monkey_screech_5.ogg',
|
||||
'sound/creatures/monkey/monkey_screech_6.ogg',
|
||||
'sound/creatures/monkey/monkey_screech_7.ogg')
|
||||
*/
|
||||
|
||||
/datum/emote/living/carbon/human/scream/screech //If a human tries to screech it'll just scream.
|
||||
key = "screech"
|
||||
key_third_person = "screeches"
|
||||
message = "screeches."
|
||||
emote_type = EMOTE_AUDIBLE
|
||||
vary = FALSE
|
||||
|
||||
/datum/emote/living/carbon/human/pale
|
||||
key = "pale"
|
||||
message = "goes pale for a second."
|
||||
@@ -176,3 +191,44 @@
|
||||
T.Entered(src)
|
||||
|
||||
//Ayy lmao
|
||||
|
||||
|
||||
///Snowflake emotes only for le epic chimp
|
||||
/datum/emote/living/carbon/human/monkey
|
||||
|
||||
/datum/emote/living/carbon/human/monkey/can_run_emote(mob/user, status_check = TRUE, intentional)
|
||||
if(ismonkey(user))
|
||||
return ..()
|
||||
return FALSE
|
||||
|
||||
/datum/emote/living/carbon/human/monkey/gnarl
|
||||
key = "gnarl"
|
||||
key_third_person = "gnarls"
|
||||
message = "gnarls and shows its teeth..."
|
||||
|
||||
/datum/emote/living/carbon/human/monkey/roll
|
||||
key = "roll"
|
||||
key_third_person = "rolls"
|
||||
message = "rolls."
|
||||
hands_use_check = TRUE
|
||||
|
||||
/datum/emote/living/carbon/human/monkey/scratch
|
||||
key = "scratch"
|
||||
key_third_person = "scratches"
|
||||
message = "scratches."
|
||||
hands_use_check = TRUE
|
||||
|
||||
/datum/emote/living/carbon/human/monkey/screech/roar
|
||||
key = "roar"
|
||||
key_third_person = "roars"
|
||||
message = "roars."
|
||||
|
||||
/datum/emote/living/carbon/human/monkey/tail
|
||||
key = "tail"
|
||||
message = "waves their tail."
|
||||
|
||||
/datum/emote/living/carbon/human/monkeysign
|
||||
key = "sign"
|
||||
key_third_person = "signs"
|
||||
message_param = "signs the number %t."
|
||||
hands_use_check = TRUE
|
||||
|
||||
@@ -23,7 +23,6 @@
|
||||
//AddComponent(/datum/component/footstep, FOOTSTEP_MOB_HUMAN, 1, -6) //ORIGINAL
|
||||
AddComponent(/datum/component/footstep, FOOTSTEP_MOB_HUMAN, 0.6, -6) //SKYRAT EDIT CHANGE - AESTHETICS
|
||||
AddComponent(/datum/component/bloodysoles/feet)
|
||||
ADD_TRAIT(src, TRAIT_ADVANCEDTOOLUSER, ROUNDSTART_TRAIT)
|
||||
AddElement(/datum/element/ridable, /datum/component/riding/creature/human)
|
||||
GLOB.human_list += src
|
||||
|
||||
@@ -1154,11 +1153,17 @@
|
||||
|
||||
/mob/living/carbon/human/species
|
||||
var/race = null
|
||||
var/use_random_name = TRUE
|
||||
|
||||
/mob/living/carbon/human/species/Initialize()
|
||||
. = ..()
|
||||
INVOKE_ASYNC(src, .proc/set_species, race)
|
||||
|
||||
/mob/living/carbon/human/species/set_species(datum/species/mrace, icon_update, pref_load)
|
||||
. = ..()
|
||||
if(use_random_name)
|
||||
fully_replace_character_name(real_name, dna.species.random_name())
|
||||
|
||||
/mob/living/carbon/human/species/abductor
|
||||
race = /datum/species/abductor
|
||||
|
||||
|
||||
@@ -213,7 +213,7 @@
|
||||
var/mob/living/carbon/human/H = user
|
||||
dna.species.spec_attack_hand(H, src)
|
||||
|
||||
/mob/living/carbon/human/attack_paw(mob/living/carbon/monkey/M)
|
||||
/mob/living/carbon/human/attack_paw(mob/living/carbon/human/M)
|
||||
var/dam_zone = pick(BODY_ZONE_CHEST, BODY_ZONE_PRECISE_L_HAND, BODY_ZONE_PRECISE_R_HAND, BODY_ZONE_L_LEG, BODY_ZONE_R_LEG)
|
||||
var/obj/item/bodypart/affecting = get_bodypart(ran_zone(dam_zone))
|
||||
if(!affecting)
|
||||
@@ -249,7 +249,7 @@
|
||||
|
||||
if(can_inject(M, 1, affecting))//Thick suits can stop monkey bites.
|
||||
if(..()) //successful monkey bite, this handles disease contraction.
|
||||
var/damage = rand(M.melee_damage_lower, M.melee_damage_upper)
|
||||
var/damage = rand(M.dna.species.punchdamagelow, M.dna.species.punchdamagehigh)
|
||||
if(!damage)
|
||||
return
|
||||
if(check_shields(M, damage, "the [M.name]"))
|
||||
|
||||
@@ -177,7 +177,7 @@ There are several things that need to be remembered:
|
||||
var/atom/movable/screen/inventory/inv = hud_used.inv_slots[TOBITSHIFT(ITEM_SLOT_GLOVES) + 1]
|
||||
inv.update_icon()
|
||||
|
||||
if(!gloves && blood_in_hands)
|
||||
if(!gloves && blood_in_hands && !(NOBLOODOVERLAY in dna.species.species_traits))
|
||||
var/mutable_appearance/bloody_overlay = mutable_appearance('icons/effects/blood.dmi', "bloodyhands", -GLOVES_LAYER)
|
||||
if(num_hands < 2)
|
||||
if(has_left_hand(FALSE))
|
||||
|
||||
+47
-11
@@ -1,6 +1,37 @@
|
||||
/mob/living/carbon/monkey/punpun //except for a few special persistence features, pun pun is just a normal monkey
|
||||
/mob/living/carbon/human/species/monkey
|
||||
race = /datum/species/monkey
|
||||
ai_controller = /datum/ai_controller/monkey
|
||||
faction = list("neutral", "monkey")
|
||||
|
||||
/mob/living/carbon/human/species/monkey/Initialize(mapload, cubespawned=FALSE, mob/spawner)
|
||||
if (cubespawned)
|
||||
var/cap = CONFIG_GET(number/monkeycap)
|
||||
if (LAZYLEN(SSmobs.cubemonkeys) > cap)
|
||||
if (spawner)
|
||||
to_chat(spawner, "<span class='warning'>Bluespace harmonics prevent the spawning of more than [cap] monkeys on the station at one time!</span>")
|
||||
return INITIALIZE_HINT_QDEL
|
||||
SSmobs.cubemonkeys += src
|
||||
return ..()
|
||||
|
||||
/mob/living/carbon/human/species/monkey/Destroy()
|
||||
SSmobs.cubemonkeys -= src
|
||||
return ..()
|
||||
|
||||
/mob/living/carbon/human/species/monkey/angry
|
||||
ai_controller = /datum/ai_controller/monkey/angry
|
||||
|
||||
/mob/living/carbon/human/species/monkey/angry/Initialize()
|
||||
. = ..()
|
||||
if(prob(10))
|
||||
var/obj/item/clothing/head/helmet/justice/escape/helmet = new(src)
|
||||
equip_to_slot_or_del(helmet,ITEM_SLOT_HEAD)
|
||||
helmet.attack_self(src) // todo encapsulate toggle
|
||||
|
||||
|
||||
/mob/living/carbon/human/species/monkey/punpun //except for a few special persistence features, pun pun is just a normal monkey
|
||||
name = "Pun Pun" //C A N O N
|
||||
unique_name = 0
|
||||
unique_name = FALSE
|
||||
use_random_name = FALSE
|
||||
/// If we had one of the rare names in a past life
|
||||
var/ancestor_name
|
||||
/// The number of times Pun Pun has died since he was last gibbed
|
||||
@@ -9,18 +40,23 @@
|
||||
var/relic_mask
|
||||
var/memory_saved = FALSE
|
||||
|
||||
/mob/living/carbon/monkey/punpun/Initialize()
|
||||
/mob/living/carbon/human/species/monkey/punpun/Initialize()
|
||||
Read_Memory()
|
||||
|
||||
var/name_to_use = name
|
||||
|
||||
if(ancestor_name)
|
||||
name = ancestor_name
|
||||
name_to_use = ancestor_name
|
||||
if(ancestor_chain > 1)
|
||||
name += " \Roman[ancestor_chain]"
|
||||
name_to_use += " \Roman[ancestor_chain]"
|
||||
else if(prob(10))
|
||||
name = pick(list("Professor Bobo", "Deempisi's Revenge", "Furious George", "King Louie", "Dr. Zaius", "Jimmy Rustles", "Dinner", "Lanky"))
|
||||
if(name == "Furious George")
|
||||
name_to_use = pick(list("Professor Bobo", "Deempisi's Revenge", "Furious George", "King Louie", "Dr. Zaius", "Jimmy Rustles", "Dinner", "Lanky"))
|
||||
if(name_to_use == "Furious George")
|
||||
ai_controller = /datum/ai_controller/monkey/angry //hes always mad
|
||||
. = ..()
|
||||
|
||||
fully_replace_character_name(real_name, name_to_use)
|
||||
|
||||
//These have to be after the parent new to ensure that the monkey
|
||||
//bodyparts are actually created before we try to equip things to
|
||||
//those slots
|
||||
@@ -31,18 +67,18 @@
|
||||
if(relic_mask)
|
||||
equip_to_slot_or_del(new relic_mask, ITEM_SLOT_MASK)
|
||||
|
||||
/mob/living/carbon/monkey/punpun/Life()
|
||||
/mob/living/carbon/human/species/monkey/punpun/Life()
|
||||
if(!stat && SSticker.current_state == GAME_STATE_FINISHED && !memory_saved)
|
||||
Write_Memory(FALSE, FALSE)
|
||||
memory_saved = TRUE
|
||||
..()
|
||||
|
||||
/mob/living/carbon/monkey/punpun/death(gibbed)
|
||||
/mob/living/carbon/human/species/monkey/punpun/death(gibbed)
|
||||
if(!memory_saved)
|
||||
Write_Memory(TRUE, gibbed)
|
||||
..()
|
||||
|
||||
/mob/living/carbon/monkey/punpun/proc/Read_Memory()
|
||||
/mob/living/carbon/human/species/monkey/punpun/proc/Read_Memory()
|
||||
if(fexists("data/npc_saves/Punpun.sav")) //legacy compatability to convert old format to new
|
||||
var/savefile/S = new /savefile("data/npc_saves/Punpun.sav")
|
||||
S["ancestor_name"] >> ancestor_name
|
||||
@@ -60,7 +96,7 @@
|
||||
relic_hat = json["relic_hat"]
|
||||
relic_mask = json["relic_hat"]
|
||||
|
||||
/mob/living/carbon/monkey/punpun/proc/Write_Memory(dead, gibbed)
|
||||
/mob/living/carbon/human/species/monkey/punpun/proc/Write_Memory(dead, gibbed)
|
||||
var/json_file = file("data/npc_saves/Punpun.json")
|
||||
var/list/file_data = list()
|
||||
if(gibbed)
|
||||
@@ -67,6 +67,14 @@ GLOBAL_LIST_EMPTY(roundstart_races)
|
||||
var/list/list/mutant_bodyparts = list() //SKYRAT EDIT CHANGE - CUSTOMIZATION (typed list)
|
||||
///Internal organs that are unique to this race, like a tail.
|
||||
var/list/mutant_organs = list()
|
||||
///The bodyparts this species uses. assoc of bodypart string - bodypart type. Make sure all the fucking entries are in or I'll skin you alive.
|
||||
var/list/bodypart_overides = list(
|
||||
BODY_ZONE_L_ARM = /obj/item/bodypart/l_arm,\
|
||||
BODY_ZONE_R_ARM = /obj/item/bodypart/r_arm,\
|
||||
BODY_ZONE_HEAD = /obj/item/bodypart/head,\
|
||||
BODY_ZONE_L_LEG = /obj/item/bodypart/l_leg,\
|
||||
BODY_ZONE_R_LEG = /obj/item/bodypart/r_leg,\
|
||||
BODY_ZONE_CHEST = /obj/item/bodypart/chest)
|
||||
///Multiplier for the race's speed. Positive numbers make it move slower, negative numbers make it move faster.
|
||||
var/speedmod = 0
|
||||
///Percentage modifier for overall defense of the race, or less defense, if it's negative.
|
||||
@@ -129,7 +137,7 @@ GLOBAL_LIST_EMPTY(roundstart_races)
|
||||
///Species-only traits. Can be found in [code/__DEFINES/DNA.dm]
|
||||
var/list/species_traits = list()
|
||||
///Generic traits tied to having the species.
|
||||
var/list/inherent_traits = list()
|
||||
var/list/inherent_traits = list(TRAIT_ADVANCEDTOOLUSER)
|
||||
/// List of biotypes the mob belongs to. Used by diseases.
|
||||
var/inherent_biotypes = MOB_ORGANIC|MOB_HUMANOID
|
||||
///List of factions the mob gain upon gaining this species.
|
||||
@@ -144,6 +152,11 @@ GLOBAL_LIST_EMPTY(roundstart_races)
|
||||
///What gas does this species breathe? Used by suffocation screen alerts, most of actual gas breathing is handled by mutantlungs. See [life.dm][code/modules/mob/living/carbon/human/life.dm]
|
||||
var/breathid = "o2"
|
||||
|
||||
///What anim to use for dusting
|
||||
var/dust_anim = "dust-h"
|
||||
///What anim to use for gibbing
|
||||
var/gib_anim = "gibbed-h"
|
||||
|
||||
|
||||
//Do NOT remove by setting to null. use OR make a RESPECTIVE TRAIT (removing stomach? add the NOSTOMACH trait to your species)
|
||||
//why does it work this way? because traits also disable the downsides of not having an organ, removing organs but not having the trait will make your species die
|
||||
@@ -175,6 +188,9 @@ GLOBAL_LIST_EMPTY(roundstart_races)
|
||||
///For custom overrides for species ass images
|
||||
var/icon/ass_image
|
||||
|
||||
///List of results you get from knife-butchering. null means you cant butcher it. Associated by resulting type - value of amount
|
||||
var/list/knife_butcher_results
|
||||
|
||||
///////////
|
||||
// PROCS //
|
||||
///////////
|
||||
@@ -349,6 +365,8 @@ GLOBAL_LIST_EMPTY(roundstart_races)
|
||||
if(DIGITIGRADE in species_traits)
|
||||
C.Digitigrade_Leg_Swap(FALSE)
|
||||
|
||||
fix_non_native_limbs(C)
|
||||
|
||||
C.mob_biotypes = inherent_biotypes
|
||||
|
||||
regenerate_organs(C,old_species)
|
||||
@@ -752,6 +770,10 @@ GLOBAL_LIST_EMPTY(roundstart_races)
|
||||
if(H.wear_suit && (H.wear_suit.flags_inv & HIDEJUMPSUIT))
|
||||
bodyparts_to_add -= "tail_human"
|
||||
|
||||
if("tail_monkey" in mutant_bodyparts)
|
||||
if(H.wear_suit && (H.wear_suit.flags_inv & HIDEJUMPSUIT))
|
||||
bodyparts_to_add -= "tail_monkey"
|
||||
|
||||
|
||||
if(mutant_bodyparts["waggingtail_human"])
|
||||
if(H.wear_suit && (H.wear_suit.flags_inv & HIDEJUMPSUIT))
|
||||
@@ -868,13 +890,15 @@ GLOBAL_LIST_EMPTY(roundstart_races)
|
||||
S = GLOB.moth_antennae_list[H.dna.features["moth_antennae"]]
|
||||
if("caps")
|
||||
S = GLOB.caps_list[H.dna.features["caps"]]
|
||||
if("tail_monkey")
|
||||
S = GLOB.tails_list_monkey[H.dna.features["tail_monkey"]]
|
||||
if(!S || S.icon_state == "none")
|
||||
continue
|
||||
|
||||
var/mutable_appearance/accessory_overlay = mutable_appearance(S.icon, layer = -layer)
|
||||
|
||||
//A little rename so we don't have to use tail_lizard or tail_human when naming the sprites.
|
||||
if(bodypart == "tail_lizard" || bodypart == "tail_human")
|
||||
if(bodypart == "tail_lizard" || bodypart == "tail_human" || bodypart == "tail_monkey")
|
||||
bodypart = "tail"
|
||||
else if(bodypart == "waggingtail_lizard" || bodypart == "waggingtail_human")
|
||||
bodypart = "waggingtail"
|
||||
@@ -1330,6 +1354,11 @@ GLOBAL_LIST_EMPTY(roundstart_races)
|
||||
user.do_attack_animation(target, ATTACK_EFFECT_CLAW)
|
||||
if(ATTACK_EFFECT_SMASH)
|
||||
user.do_attack_animation(target, ATTACK_EFFECT_SMASH)
|
||||
if(ATTACK_EFFECT_BITE)
|
||||
if(user.is_mouth_covered(FALSE, TRUE))
|
||||
to_chat(user, "<span class='warning'>You can't bite with your mouth covered!</span>")
|
||||
return FALSE
|
||||
user.do_attack_animation(target, ATTACK_EFFECT_BITE)
|
||||
else
|
||||
user.do_attack_animation(target, ATTACK_EFFECT_PUNCH)
|
||||
|
||||
@@ -2119,3 +2148,19 @@ GLOBAL_LIST_EMPTY(roundstart_races)
|
||||
. |= BIO_JUST_FLESH
|
||||
if(HAS_BONE in species_traits)
|
||||
. |= BIO_JUST_BONE
|
||||
|
||||
///Species override for unarmed attacks because the attack_hand proc was made by a mouth-breathing troglodyte on a tricycle. Also to whoever thought it would be a good idea to make it so the original spec_unarmedattack was not actually linked to unarmed attack needs to be checked by a doctor because they clearly have a vast empty space in their head.
|
||||
/datum/species/proc/spec_unarmedattack(mob/living/carbon/human/user, atom/target)
|
||||
return FALSE
|
||||
|
||||
|
||||
///Removes any non-native limbs from the mob
|
||||
/datum/species/proc/fix_non_native_limbs(mob/living/carbon/human/H)
|
||||
for(var/X in H.bodyparts)
|
||||
var/obj/item/bodypart/current_part = X
|
||||
var/obj/item/bodypart/species_part = bodypart_overides[current_part.body_zone]
|
||||
|
||||
if(current_part.type == species_part)
|
||||
continue
|
||||
|
||||
current_part.change_bodypart(species_part)
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
say_mod = "gibbers"
|
||||
sexes = FALSE
|
||||
species_traits = list(NOBLOOD,NOEYESPRITES)
|
||||
inherent_traits = list(TRAIT_VIRUSIMMUNE,TRAIT_CHUNKYFINGERS,TRAIT_NOHUNGER,TRAIT_NOBREATH)
|
||||
inherent_traits = list(TRAIT_ADVANCEDTOOLUSER,TRAIT_VIRUSIMMUNE,TRAIT_CHUNKYFINGERS,TRAIT_NOHUNGER,TRAIT_NOBREATH)
|
||||
mutanttongue = /obj/item/organ/tongue/abductor
|
||||
changesource_flags = MIRROR_BADMIN | WABBAJACK | MIRROR_PRIDE | MIRROR_MAGIC | RACE_SWAP | ERT_SPAWN | SLIME_EXTRACT
|
||||
ass_image = 'icons/ass/assgrey.png'
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
id = "android"
|
||||
say_mod = "states"
|
||||
species_traits = list(NOBLOOD)
|
||||
inherent_traits = list(TRAIT_NOMETABOLISM,TRAIT_TOXIMMUNE,TRAIT_RESISTHEAT,TRAIT_NOBREATH,TRAIT_RESISTCOLD,TRAIT_RESISTHIGHPRESSURE,TRAIT_RESISTLOWPRESSURE,TRAIT_RADIMMUNE,TRAIT_GENELESS,TRAIT_NOFIRE,TRAIT_PIERCEIMMUNE,TRAIT_NOHUNGER,TRAIT_LIMBATTACHMENT,TRAIT_NOCLONELOSS)
|
||||
inherent_traits = list(TRAIT_ADVANCEDTOOLUSER,TRAIT_NOMETABOLISM,TRAIT_TOXIMMUNE,TRAIT_RESISTHEAT,TRAIT_NOBREATH,TRAIT_RESISTCOLD,TRAIT_RESISTHIGHPRESSURE,TRAIT_RESISTLOWPRESSURE,TRAIT_RADIMMUNE,TRAIT_GENELESS,TRAIT_NOFIRE,TRAIT_PIERCEIMMUNE,TRAIT_NOHUNGER,TRAIT_LIMBATTACHMENT,TRAIT_NOCLONELOSS)
|
||||
inherent_biotypes = MOB_ROBOTIC|MOB_HUMANOID
|
||||
meat = null
|
||||
damage_overlay_type = "synth"
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
id = "dullahan"
|
||||
default_color = "FFFFFF"
|
||||
species_traits = list(EYECOLOR,HAIR,FACEHAIR,LIPS, HAS_FLESH, HAS_BONE)
|
||||
inherent_traits = list(TRAIT_NOHUNGER,TRAIT_NOBREATH)
|
||||
inherent_traits = list(TRAIT_ADVANCEDTOOLUSER,TRAIT_NOHUNGER,TRAIT_NOBREATH)
|
||||
mutant_bodyparts = list("tail_human" = "None", "ears" = "None", "wings" = "None")
|
||||
use_skintones = TRUE
|
||||
mutantbrain = /obj/item/organ/brain/dullahan
|
||||
|
||||
@@ -18,7 +18,7 @@
|
||||
species_traits = list(DYNCOLORS, AGENDER, NO_UNDERWEAR, HAIR, HAS_FLESH, HAS_BONE) // i mean i guess they have blood so they can have wounds too
|
||||
changesource_flags = MIRROR_BADMIN | WABBAJACK | MIRROR_PRIDE | MIRROR_MAGIC | RACE_SWAP | ERT_SPAWN | SLIME_EXTRACT
|
||||
species_language_holder = /datum/language_holder/ethereal
|
||||
inherent_traits = list(TRAIT_NOHUNGER)
|
||||
inherent_traits = list(TRAIT_ADVANCEDTOOLUSER,TRAIT_NOHUNGER)
|
||||
sexes = FALSE //no fetish content allowed
|
||||
toxic_food = NONE
|
||||
// Body temperature for ethereals is much higher then humans as they like hotter environments
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
name = "Golem"
|
||||
id = "iron golem"
|
||||
species_traits = list(NOBLOOD,MUTCOLORS,NO_UNDERWEAR)
|
||||
inherent_traits = list(TRAIT_RESISTHEAT,TRAIT_NOBREATH,TRAIT_RESISTCOLD,TRAIT_RESISTHIGHPRESSURE,TRAIT_RESISTLOWPRESSURE,TRAIT_NOFIRE,TRAIT_CHUNKYFINGERS,TRAIT_RADIMMUNE,TRAIT_GENELESS,TRAIT_PIERCEIMMUNE,TRAIT_NODISMEMBER)
|
||||
inherent_traits = list(TRAIT_ADVANCEDTOOLUSER,TRAIT_RESISTHEAT,TRAIT_NOBREATH,TRAIT_RESISTCOLD,TRAIT_RESISTHIGHPRESSURE,TRAIT_RESISTLOWPRESSURE,TRAIT_NOFIRE,TRAIT_CHUNKYFINGERS,TRAIT_RADIMMUNE,TRAIT_GENELESS,TRAIT_PIERCEIMMUNE,TRAIT_NODISMEMBER)
|
||||
inherent_biotypes = MOB_HUMANOID|MOB_MINERAL
|
||||
mutant_organs = list(/obj/item/organ/adamantine_resonator)
|
||||
speedmod = 2
|
||||
@@ -88,7 +88,7 @@
|
||||
fixed_mut_color = "a3d"
|
||||
meat = /obj/item/stack/ore/plasma
|
||||
//Can burn and takes damage from heat
|
||||
inherent_traits = list(TRAIT_NOBREATH, TRAIT_RESISTCOLD,TRAIT_RESISTHIGHPRESSURE,TRAIT_RESISTLOWPRESSURE,TRAIT_CHUNKYFINGERS,TRAIT_RADIMMUNE,TRAIT_GENELESS,TRAIT_PIERCEIMMUNE,TRAIT_NODISMEMBER) //no RESISTHEAT, NOFIRE
|
||||
inherent_traits = list(TRAIT_ADVANCEDTOOLUSER,TRAIT_NOBREATH, TRAIT_RESISTCOLD,TRAIT_RESISTHIGHPRESSURE,TRAIT_RESISTLOWPRESSURE,TRAIT_CHUNKYFINGERS,TRAIT_RADIMMUNE,TRAIT_GENELESS,TRAIT_PIERCEIMMUNE,TRAIT_NODISMEMBER) //no RESISTHEAT, NOFIRE
|
||||
info_text = "As a <span class='danger'>Plasma Golem</span>, you burn easily. Be careful, if you get hot enough while burning, you'll blow up!"
|
||||
heatmod = 0 //fine until they blow up
|
||||
prefix = "Plasma"
|
||||
@@ -277,7 +277,7 @@
|
||||
fixed_mut_color = "9E704B"
|
||||
meat = /obj/item/stack/sheet/mineral/wood
|
||||
//Can burn and take damage from heat
|
||||
inherent_traits = list(TRAIT_NOBREATH, TRAIT_RESISTCOLD,TRAIT_RESISTHIGHPRESSURE,TRAIT_RESISTLOWPRESSURE,TRAIT_CHUNKYFINGERS,TRAIT_RADIMMUNE,TRAIT_GENELESS,TRAIT_PIERCEIMMUNE,TRAIT_NODISMEMBER)
|
||||
inherent_traits = list(TRAIT_ADVANCEDTOOLUSER,TRAIT_NOBREATH, TRAIT_RESISTCOLD,TRAIT_RESISTHIGHPRESSURE,TRAIT_RESISTLOWPRESSURE,TRAIT_CHUNKYFINGERS,TRAIT_RADIMMUNE,TRAIT_GENELESS,TRAIT_PIERCEIMMUNE,TRAIT_NODISMEMBER)
|
||||
armor = 30
|
||||
burnmod = 1.25
|
||||
heatmod = 1.5
|
||||
@@ -615,7 +615,7 @@
|
||||
sexes = FALSE
|
||||
info_text = "As a <span class='danger'>Runic Golem</span>, you possess eldritch powers granted by the Elder Goddess Nar'Sie."
|
||||
species_traits = list(NOBLOOD,NO_UNDERWEAR,NOEYESPRITES) //no mutcolors
|
||||
inherent_traits = list(TRAIT_NOFLASH,TRAIT_RESISTHEAT,TRAIT_NOBREATH,TRAIT_RESISTCOLD,TRAIT_RESISTHIGHPRESSURE,TRAIT_RESISTLOWPRESSURE,TRAIT_NOFIRE,TRAIT_CHUNKYFINGERS,TRAIT_RADIMMUNE,TRAIT_GENELESS,TRAIT_PIERCEIMMUNE,TRAIT_NODISMEMBER)
|
||||
inherent_traits = list(TRAIT_ADVANCEDTOOLUSER,TRAIT_NOFLASH,TRAIT_RESISTHEAT,TRAIT_NOBREATH,TRAIT_RESISTCOLD,TRAIT_RESISTHIGHPRESSURE,TRAIT_RESISTLOWPRESSURE,TRAIT_NOFIRE,TRAIT_CHUNKYFINGERS,TRAIT_RADIMMUNE,TRAIT_GENELESS,TRAIT_PIERCEIMMUNE,TRAIT_NODISMEMBER)
|
||||
inherent_biotypes = MOB_HUMANOID|MOB_MINERAL
|
||||
prefix = "Runic"
|
||||
special_names = null
|
||||
@@ -670,7 +670,7 @@
|
||||
info_text = "As a <span class='danger'>Cloth Golem</span>, you are able to reform yourself after death, provided your remains aren't burned or destroyed. You are, of course, very flammable. \
|
||||
Being made of cloth, your body is magic resistant and faster than that of other golems, but weaker and less resilient."
|
||||
species_traits = list(NOBLOOD,NO_UNDERWEAR) //no mutcolors, and can burn
|
||||
inherent_traits = list(TRAIT_RESISTCOLD,TRAIT_NOBREATH,TRAIT_RESISTHIGHPRESSURE,TRAIT_RESISTLOWPRESSURE,TRAIT_RADIMMUNE,TRAIT_GENELESS,TRAIT_PIERCEIMMUNE,TRAIT_NODISMEMBER,TRAIT_CHUNKYFINGERS)
|
||||
inherent_traits = list(TRAIT_ADVANCEDTOOLUSER,TRAIT_RESISTCOLD,TRAIT_NOBREATH,TRAIT_RESISTHIGHPRESSURE,TRAIT_RESISTLOWPRESSURE,TRAIT_RADIMMUNE,TRAIT_GENELESS,TRAIT_PIERCEIMMUNE,TRAIT_NODISMEMBER,TRAIT_CHUNKYFINGERS)
|
||||
inherent_biotypes = MOB_UNDEAD|MOB_HUMANOID
|
||||
armor = 15 //feels no pain, but not too resistant
|
||||
burnmod = 2 // don't get burned
|
||||
@@ -869,7 +869,7 @@
|
||||
special_names = list("Box")
|
||||
info_text = "As a <span class='danger'>Cardboard Golem</span>, you aren't very strong, but you are a bit quicker and can easily create more brethren by using cardboard on yourself."
|
||||
species_traits = list(NOBLOOD,NO_UNDERWEAR,NOEYESPRITES)
|
||||
inherent_traits = list(TRAIT_NOBREATH, TRAIT_RESISTCOLD,TRAIT_RESISTHIGHPRESSURE,TRAIT_RESISTLOWPRESSURE,TRAIT_CHUNKYFINGERS,TRAIT_RADIMMUNE,TRAIT_GENELESS,TRAIT_PIERCEIMMUNE,TRAIT_NODISMEMBER, TRAIT_NOFLASH)
|
||||
inherent_traits = list(TRAIT_ADVANCEDTOOLUSER,TRAIT_NOBREATH, TRAIT_RESISTCOLD,TRAIT_RESISTHIGHPRESSURE,TRAIT_RESISTLOWPRESSURE,TRAIT_CHUNKYFINGERS,TRAIT_RADIMMUNE,TRAIT_GENELESS,TRAIT_PIERCEIMMUNE,TRAIT_NODISMEMBER, TRAIT_NOFLASH)
|
||||
limbs_id = "c_golem" //special sprites
|
||||
attack_verb = "whips"
|
||||
attack_sound = 'sound/weapons/whip.ogg'
|
||||
@@ -914,7 +914,7 @@
|
||||
name = "Leather Golem"
|
||||
id = "leather golem"
|
||||
special_names = list("Face", "Man", "Belt") //Ah dude 4 strength 4 stam leather belt AHHH
|
||||
inherent_traits = list(TRAIT_NOBREATH, TRAIT_RESISTCOLD,TRAIT_RESISTHIGHPRESSURE,TRAIT_RESISTLOWPRESSURE,TRAIT_CHUNKYFINGERS,TRAIT_RADIMMUNE,TRAIT_GENELESS,TRAIT_PIERCEIMMUNE,TRAIT_NODISMEMBER, TRAIT_STRONG_GRABBER)
|
||||
inherent_traits = list(TRAIT_ADVANCEDTOOLUSER,TRAIT_NOBREATH, TRAIT_RESISTCOLD,TRAIT_RESISTHIGHPRESSURE,TRAIT_RESISTLOWPRESSURE,TRAIT_CHUNKYFINGERS,TRAIT_RADIMMUNE,TRAIT_GENELESS,TRAIT_PIERCEIMMUNE,TRAIT_NODISMEMBER, TRAIT_STRONG_GRABBER)
|
||||
prefix = "Leather"
|
||||
fixed_mut_color = "624a2e"
|
||||
info_text = "As a <span class='danger'>Leather Golem</span>, you are flammable, but you can grab things with incredible ease, allowing all your grabs to start at a strong level."
|
||||
@@ -929,7 +929,7 @@
|
||||
special_names = list("Boll","Weave")
|
||||
species_traits = list(NOBLOOD,NO_UNDERWEAR,NOEYESPRITES)
|
||||
fixed_mut_color = null
|
||||
inherent_traits = list(TRAIT_NOBREATH, TRAIT_RESISTCOLD,TRAIT_RESISTHIGHPRESSURE,TRAIT_RESISTLOWPRESSURE,TRAIT_CHUNKYFINGERS,TRAIT_RADIMMUNE,TRAIT_GENELESS,TRAIT_PIERCEIMMUNE,TRAIT_NODISMEMBER, TRAIT_NOFLASH)
|
||||
inherent_traits = list(TRAIT_ADVANCEDTOOLUSER,TRAIT_NOBREATH, TRAIT_RESISTCOLD,TRAIT_RESISTHIGHPRESSURE,TRAIT_RESISTLOWPRESSURE,TRAIT_CHUNKYFINGERS,TRAIT_RADIMMUNE,TRAIT_GENELESS,TRAIT_PIERCEIMMUNE,TRAIT_NODISMEMBER, TRAIT_NOFLASH)
|
||||
info_text = "As a <span class='danger'>Durathread Golem</span>, your strikes will cause those your targets to start choking, but your woven body won't withstand fire as well."
|
||||
|
||||
/datum/species/golem/durathread/spec_unarmedattacked(mob/living/carbon/human/user, mob/living/carbon/human/target)
|
||||
@@ -951,7 +951,7 @@
|
||||
mutantstomach = /obj/item/organ/stomach/bone
|
||||
sexes = FALSE
|
||||
fixed_mut_color = null
|
||||
inherent_traits = list(TRAIT_NOFLASH,TRAIT_RESISTHEAT,TRAIT_NOBREATH,TRAIT_RESISTCOLD,TRAIT_RESISTHIGHPRESSURE,TRAIT_RESISTLOWPRESSURE,TRAIT_NOFIRE,TRAIT_CHUNKYFINGERS,TRAIT_RADIMMUNE,TRAIT_GENELESS,TRAIT_PIERCEIMMUNE,TRAIT_NODISMEMBER,TRAIT_FAKEDEATH)
|
||||
inherent_traits = list(TRAIT_ADVANCEDTOOLUSER,TRAIT_NOFLASH,TRAIT_RESISTHEAT,TRAIT_NOBREATH,TRAIT_RESISTCOLD,TRAIT_RESISTHIGHPRESSURE,TRAIT_RESISTLOWPRESSURE,TRAIT_NOFIRE,TRAIT_CHUNKYFINGERS,TRAIT_RADIMMUNE,TRAIT_GENELESS,TRAIT_PIERCEIMMUNE,TRAIT_NODISMEMBER,TRAIT_FAKEDEATH)
|
||||
species_language_holder = /datum/language_holder/golem/bone
|
||||
info_text = "As a <span class='danger'>Bone Golem</span>, You have a powerful spell that lets you chill your enemies with fear, and milk heals you! Just make sure to watch our for bone-hurting juice."
|
||||
var/datum/action/innate/bonechill/bonechill
|
||||
@@ -1041,7 +1041,7 @@
|
||||
prefix = "Snow"
|
||||
special_names = list("Flake", "Blizzard", "Storm")
|
||||
species_traits = list(NOBLOOD,NO_UNDERWEAR,NOEYESPRITES) //no mutcolors, no eye sprites
|
||||
inherent_traits = list(TRAIT_NOBREATH,TRAIT_RESISTCOLD,TRAIT_RESISTHIGHPRESSURE,TRAIT_RESISTLOWPRESSURE,TRAIT_CHUNKYFINGERS,TRAIT_RADIMMUNE,TRAIT_GENELESS,TRAIT_PIERCEIMMUNE,TRAIT_NODISMEMBER)
|
||||
inherent_traits = list(TRAIT_ADVANCEDTOOLUSER,TRAIT_NOBREATH,TRAIT_RESISTCOLD,TRAIT_RESISTHIGHPRESSURE,TRAIT_RESISTLOWPRESSURE,TRAIT_CHUNKYFINGERS,TRAIT_RADIMMUNE,TRAIT_GENELESS,TRAIT_PIERCEIMMUNE,TRAIT_NODISMEMBER)
|
||||
|
||||
var/obj/effect/proc_holder/spell/targeted/conjure_item/snowball/ball
|
||||
var/obj/effect/proc_holder/spell/aimed/cryo/cryo
|
||||
@@ -1088,7 +1088,7 @@
|
||||
info_text = "As a <span class='danger'>Metallic Hydrogen Golem</span>, you were forged in the highest pressures and the highest heats. Your unique mineral makeup makes you immune to most types of damages."
|
||||
prefix = "Metallic Hydrogen"
|
||||
special_names = null
|
||||
inherent_traits = list(TRAIT_NOFLASH, TRAIT_RESISTHEAT,TRAIT_NOBREATH,TRAIT_RESISTHIGHPRESSURE,TRAIT_NOFIRE,TRAIT_RADIMMUNE,TRAIT_GENELESS,TRAIT_NODISMEMBER,TRAIT_CHUNKYFINGERS)
|
||||
inherent_traits = list(TRAIT_ADVANCEDTOOLUSER,TRAIT_NOFLASH, TRAIT_RESISTHEAT,TRAIT_NOBREATH,TRAIT_RESISTHIGHPRESSURE,TRAIT_NOFIRE,TRAIT_RADIMMUNE,TRAIT_GENELESS,TRAIT_NODISMEMBER,TRAIT_CHUNKYFINGERS)
|
||||
|
||||
/datum/species/golem/mhydrogen/on_species_gain(mob/living/carbon/C, datum/species/old_species)
|
||||
. = ..()
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
default_color = "00FF90"
|
||||
say_mod = "chirps"
|
||||
species_traits = list(MUTCOLORS,EYECOLOR,NOBLOOD)
|
||||
inherent_traits = list(TRAIT_TOXINLOVER)
|
||||
inherent_traits = list(TRAIT_ADVANCEDTOOLUSER,TRAIT_TOXINLOVER)
|
||||
mutantlungs = /obj/item/organ/lungs/slime
|
||||
meat = /obj/item/food/meat/slab/human/mutant/slime
|
||||
exotic_blood = /datum/reagent/toxin/slimejelly
|
||||
|
||||
@@ -113,5 +113,5 @@ Lizard subspecies: ASHWALKERS
|
||||
id = "ashlizard"
|
||||
limbs_id = "lizard"
|
||||
species_traits = list(MUTCOLORS,EYECOLOR,LIPS,DIGITIGRADE,HAS_FLESH,HAS_BONE)
|
||||
inherent_traits = list(TRAIT_CHUNKYFINGERS,TRAIT_NOBREATH)
|
||||
inherent_traits = list(TRAIT_ADVANCEDTOOLUSER,TRAIT_CHUNKYFINGERS,TRAIT_NOBREATH)
|
||||
species_language_holder = /datum/language_holder/lizard/ash
|
||||
|
||||
@@ -0,0 +1,92 @@
|
||||
/datum/species/monkey
|
||||
name = "Monkey"
|
||||
id = "monkey"
|
||||
say_mod = "chimpers"
|
||||
attack_verb = "bite"
|
||||
attack_sound = 'sound/weapons/bite.ogg'
|
||||
miss_sound = 'sound/weapons/bite.ogg'
|
||||
mutant_organs = list(/obj/item/organ/tail/monkey)
|
||||
mutant_bodyparts = list("tail_monkey" = "Monkey")
|
||||
skinned_type = /obj/item/stack/sheet/animalhide/monkey
|
||||
meat = /obj/item/food/meat/slab/monkey
|
||||
knife_butcher_results = list(/obj/item/food/meat/slab/monkey = 5, /obj/item/stack/sheet/animalhide/monkey = 1)
|
||||
species_traits = list(HAS_FLESH,HAS_BONE,NO_UNDERWEAR,LIPS,NOEYESPRITES,NOBLOODOVERLAY,NOTRANSSTING, NOAUGMENTS)
|
||||
inherent_traits = list(TRAIT_MONKEYLIKE)
|
||||
no_equip = list(ITEM_SLOT_EARS, ITEM_SLOT_EYES, ITEM_SLOT_OCLOTHING, ITEM_SLOT_GLOVES, ITEM_SLOT_FEET, ITEM_SLOT_ICLOTHING, ITEM_SLOT_SUITSTORE)
|
||||
changesource_flags = MIRROR_BADMIN | WABBAJACK | MIRROR_PRIDE | MIRROR_MAGIC | ERT_SPAWN | SLIME_EXTRACT
|
||||
liked_food = MEAT | FRUIT
|
||||
limbs_id = "monkey"
|
||||
damage_overlay_type = "monkey"
|
||||
sexes = FALSE
|
||||
punchdamagelow = 1
|
||||
punchdamagehigh = 3
|
||||
punchstunthreshold = 4 // no stun punches
|
||||
species_language_holder = /datum/language_holder/monkey
|
||||
bodypart_overides = list(
|
||||
BODY_ZONE_L_ARM = /obj/item/bodypart/l_arm/monkey,\
|
||||
BODY_ZONE_R_ARM = /obj/item/bodypart/r_arm/monkey,\
|
||||
BODY_ZONE_HEAD = /obj/item/bodypart/head/monkey,\
|
||||
BODY_ZONE_L_LEG = /obj/item/bodypart/l_leg/monkey,\
|
||||
BODY_ZONE_R_LEG = /obj/item/bodypart/r_leg/monkey,\
|
||||
BODY_ZONE_CHEST = /obj/item/bodypart/chest/monkey)
|
||||
dust_anim = "dust-m"
|
||||
gib_anim = "gibbed-m"
|
||||
|
||||
payday_modifier = 1.5
|
||||
|
||||
|
||||
/datum/species/monkey/random_name(gender,unique,lastname)
|
||||
var/randname = "monkey ([rand(1,999)])"
|
||||
|
||||
return randname
|
||||
|
||||
/datum/species/monkey/on_species_gain(mob/living/carbon/human/H, datum/species/old_species)
|
||||
. = ..()
|
||||
H.ventcrawler = VENTCRAWLER_NUDE
|
||||
H.pass_flags |= PASSTABLE
|
||||
H.butcher_results = knife_butcher_results
|
||||
if(!H.dna.features["tail_monkey"] || H.dna.features["tail_monkey"] == "None")
|
||||
H.dna.features["tail_monkey"] = "Monkey"
|
||||
handle_mutant_bodyparts(H)
|
||||
|
||||
H.dna.add_mutation(RACEMUT, MUT_NORMAL)
|
||||
H.dna.activate_mutation(RACEMUT)
|
||||
|
||||
|
||||
/datum/species/monkey/on_species_loss(mob/living/carbon/C)
|
||||
. = ..()
|
||||
C.ventcrawler = initial(C.ventcrawler)
|
||||
C.pass_flags = initial(C.pass_flags)
|
||||
C.butcher_results = null
|
||||
C.dna.remove_mutation(RACEMUT)
|
||||
|
||||
/datum/species/monkey/spec_unarmedattack(mob/living/carbon/human/user, atom/target)
|
||||
. = ..()
|
||||
if(HAS_TRAIT(user, TRAIT_HANDS_BLOCKED))
|
||||
if(!iscarbon(target))
|
||||
return TRUE
|
||||
var/mob/living/carbon/victim = target
|
||||
if(user.a_intent != INTENT_HARM || user.is_muzzled())
|
||||
return TRUE
|
||||
var/obj/item/bodypart/affecting = null
|
||||
if(ishuman(victim))
|
||||
var/mob/living/carbon/human/human_victim = victim
|
||||
affecting = human_victim.get_bodypart(pick(BODY_ZONE_CHEST, BODY_ZONE_PRECISE_L_HAND, BODY_ZONE_PRECISE_R_HAND, BODY_ZONE_L_LEG, BODY_ZONE_R_LEG))
|
||||
var/armor = victim.run_armor_check(affecting, MELEE)
|
||||
if(prob(25))
|
||||
victim.visible_message("<span class='danger'>[user]'s bite misses [victim]!</span>",
|
||||
"<span class='danger'>You avoid [user]'s bite!</span>", "<span class='hear'>You hear jaws snapping shut!</span>", COMBAT_MESSAGE_RANGE, user)
|
||||
to_chat(user, "<span class='danger'>Your bite misses [victim]!</span>")
|
||||
return TRUE
|
||||
victim.apply_damage(rand(punchdamagelow, punchdamagehigh), BRUTE, affecting, armor)
|
||||
victim.visible_message("<span class='danger'>[name] bites [victim]!</span>",
|
||||
"<span class='userdanger'>[name] bites you!</span>", "<span class='hear'>You hear a chomp!</span>", COMBAT_MESSAGE_RANGE, name)
|
||||
to_chat(user, "<span class='danger'>You bite [victim]!</span>")
|
||||
if(armor >= 2)
|
||||
return TRUE
|
||||
for(var/d in user.diseases)
|
||||
var/datum/disease/bite_infection = d
|
||||
victim.ForceContractDisease(bite_infection)
|
||||
return TRUE
|
||||
target.attack_paw(user)
|
||||
return TRUE
|
||||
@@ -10,7 +10,7 @@
|
||||
|
||||
say_mod = "poofs" //what does a mushroom sound like
|
||||
species_traits = list(MUTCOLORS, NOEYESPRITES, NO_UNDERWEAR, HAS_FLESH, HAS_BONE)
|
||||
inherent_traits = list(TRAIT_NOBREATH, TRAIT_NOFLASH)
|
||||
inherent_traits = list(TRAIT_ADVANCEDTOOLUSER,TRAIT_NOBREATH, TRAIT_NOFLASH)
|
||||
inherent_factions = list("mushroom")
|
||||
speedmod = 1.5 //faster than golems but not by much
|
||||
|
||||
|
||||
@@ -6,7 +6,8 @@
|
||||
meat = /obj/item/stack/sheet/mineral/plasma
|
||||
species_traits = list(NOBLOOD,NOTRANSSTING, HAS_BONE)
|
||||
// plasmemes get hard to wound since they only need a severe bone wound to dismember, but unlike skellies, they can't pop their bones back into place
|
||||
inherent_traits = list(TRAIT_RESISTCOLD, TRAIT_RADIMMUNE, TRAIT_GENELESS, TRAIT_NOHUNGER, TRAIT_HARDLY_WOUNDED)
|
||||
inherent_traits = list(TRAIT_ADVANCEDTOOLUSER,TRAIT_RESISTCOLD, TRAIT_RADIMMUNE, TRAIT_GENELESS, TRAIT_NOHUNGER, TRAIT_HARDLY_WOUNDED)
|
||||
|
||||
inherent_biotypes = MOB_HUMANOID|MOB_MINERAL
|
||||
mutantlungs = /obj/item/organ/lungs/plasmaman
|
||||
mutanttongue = /obj/item/organ/tongue/bone/plasmaman
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
sexes = 0
|
||||
meat = /obj/item/food/meat/slab/human/mutant/shadow
|
||||
species_traits = list(NOBLOOD,NOEYESPRITES)
|
||||
inherent_traits = list(TRAIT_RADIMMUNE,TRAIT_VIRUSIMMUNE,TRAIT_NOBREATH)
|
||||
inherent_traits = list(TRAIT_ADVANCEDTOOLUSER,TRAIT_RADIMMUNE,TRAIT_VIRUSIMMUNE,TRAIT_NOBREATH)
|
||||
inherent_factions = list("faithless")
|
||||
changesource_flags = MIRROR_BADMIN | WABBAJACK | MIRROR_PRIDE | MIRROR_MAGIC
|
||||
mutanteyes = /obj/item/organ/eyes/night_vision
|
||||
@@ -37,7 +37,7 @@
|
||||
burnmod = 1.5
|
||||
no_equip = list(ITEM_SLOT_MASK, ITEM_SLOT_OCLOTHING, ITEM_SLOT_GLOVES, ITEM_SLOT_FEET, ITEM_SLOT_ICLOTHING, ITEM_SLOT_SUITSTORE)
|
||||
species_traits = list(NOBLOOD,NO_UNDERWEAR,NO_DNA_COPY,NOTRANSSTING,NOEYESPRITES)
|
||||
inherent_traits = list(TRAIT_RESISTCOLD,TRAIT_NOBREATH,TRAIT_RESISTHIGHPRESSURE,TRAIT_RESISTLOWPRESSURE,TRAIT_CHUNKYFINGERS,TRAIT_RADIMMUNE,TRAIT_VIRUSIMMUNE,TRAIT_PIERCEIMMUNE,TRAIT_NODISMEMBER,TRAIT_NOHUNGER)
|
||||
inherent_traits = list(TRAIT_ADVANCEDTOOLUSER,TRAIT_RESISTCOLD,TRAIT_NOBREATH,TRAIT_RESISTHIGHPRESSURE,TRAIT_RESISTLOWPRESSURE,TRAIT_CHUNKYFINGERS,TRAIT_RADIMMUNE,TRAIT_VIRUSIMMUNE,TRAIT_PIERCEIMMUNE,TRAIT_NODISMEMBER,TRAIT_NOHUNGER)
|
||||
mutanteyes = /obj/item/organ/eyes/night_vision/nightmare
|
||||
mutantheart = /obj/item/organ/heart/nightmare
|
||||
mutantbrain = /obj/item/organ/brain/nightmare
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
sexes = 0
|
||||
meat = /obj/item/food/meat/slab/human/mutant/skeleton
|
||||
species_traits = list(NOBLOOD, HAS_BONE, NOEYESPRITES)
|
||||
inherent_traits = list(TRAIT_NOMETABOLISM,TRAIT_TOXIMMUNE,TRAIT_RESISTHEAT,TRAIT_NOBREATH,TRAIT_RESISTCOLD,TRAIT_RESISTHIGHPRESSURE,TRAIT_RESISTLOWPRESSURE,TRAIT_RADIMMUNE,TRAIT_GENELESS,\
|
||||
inherent_traits = list(TRAIT_ADVANCEDTOOLUSER,TRAIT_NOMETABOLISM,TRAIT_TOXIMMUNE,TRAIT_RESISTHEAT,TRAIT_NOBREATH,TRAIT_RESISTCOLD,TRAIT_RESISTHIGHPRESSURE,TRAIT_RESISTLOWPRESSURE,TRAIT_RADIMMUNE,TRAIT_GENELESS,\
|
||||
TRAIT_PIERCEIMMUNE,TRAIT_NOHUNGER,TRAIT_EASYDISMEMBER,TRAIT_LIMBATTACHMENT,TRAIT_FAKEDEATH,TRAIT_XENO_IMMUNE,TRAIT_NOCLONELOSS)
|
||||
inherent_biotypes = MOB_UNDEAD|MOB_HUMANOID
|
||||
mutanttongue = /obj/item/organ/tongue/bone
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
offset_features = list(OFFSET_UNIFORM = list(0,0), OFFSET_ID = list(0,0), OFFSET_GLOVES = list(0,0), OFFSET_GLASSES = list(0,4), OFFSET_EARS = list(0,0), OFFSET_SHOES = list(0,0), OFFSET_S_STORE = list(0,0), OFFSET_FACEMASK = list(0,0), OFFSET_HEAD = list(0,0), OFFSET_FACE = list(0,0), OFFSET_BELT = list(0,0), OFFSET_BACK = list(0,0), OFFSET_SUIT = list(0,0), OFFSET_NECK = list(0,0))
|
||||
default_color = "336600" //vomit green
|
||||
species_traits = list(MUTCOLORS, NO_UNDERWEAR, HAS_FLESH, HAS_BONE)
|
||||
inherent_traits = list(TRAIT_NOSLIPALL)
|
||||
inherent_traits = list(TRAIT_ADVANCEDTOOLUSER, TRAIT_NOSLIPALL)
|
||||
attack_verb = "slap"
|
||||
say_mod = "slurs"
|
||||
coldmod = 0.5 //snails only come out when its cold and wet
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
say_mod = "beep boops" //inherited from a user's real species
|
||||
sexes = 0
|
||||
species_traits = list(NOTRANSSTING) //all of these + whatever we inherit from the real species
|
||||
inherent_traits = list(TRAIT_VIRUSIMMUNE,TRAIT_NODISMEMBER,TRAIT_NOLIMBDISABLE,TRAIT_NOHUNGER,TRAIT_NOBREATH)
|
||||
inherent_traits = list(TRAIT_ADVANCEDTOOLUSER,TRAIT_VIRUSIMMUNE,TRAIT_NODISMEMBER,TRAIT_NOLIMBDISABLE,TRAIT_NOHUNGER,TRAIT_NOBREATH)
|
||||
inherent_biotypes = MOB_ROBOTIC|MOB_HUMANOID
|
||||
meat = null
|
||||
damage_overlay_type = "synth"
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
id = "vampire"
|
||||
default_color = "FFFFFF"
|
||||
species_traits = list(EYECOLOR,HAIR,FACEHAIR,LIPS,DRINKSBLOOD, HAS_FLESH, HAS_BONE)
|
||||
inherent_traits = list(TRAIT_NOHUNGER,TRAIT_NOBREATH)
|
||||
inherent_traits = list(TRAIT_ADVANCEDTOOLUSER,TRAIT_NOHUNGER,TRAIT_NOBREATH)
|
||||
inherent_biotypes = MOB_UNDEAD|MOB_HUMANOID
|
||||
mutant_bodyparts = list("tail_human" = "None", "ears" = "None", "wings" = "None")
|
||||
changesource_flags = MIRROR_BADMIN | WABBAJACK | MIRROR_PRIDE | MIRROR_MAGIC | ERT_SPAWN
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
sexes = 0
|
||||
meat = /obj/item/food/meat/slab/human/mutant/zombie
|
||||
species_traits = list(NOBLOOD,NOZOMBIE,NOTRANSSTING, HAS_FLESH, HAS_BONE)
|
||||
inherent_traits = list(TRAIT_NOMETABOLISM,TRAIT_TOXIMMUNE,TRAIT_RESISTCOLD,TRAIT_RESISTHIGHPRESSURE,TRAIT_RESISTLOWPRESSURE,TRAIT_RADIMMUNE,TRAIT_EASYDISMEMBER,TRAIT_EASILY_WOUNDED,TRAIT_LIMBATTACHMENT,TRAIT_NOBREATH,TRAIT_NODEATH,TRAIT_FAKEDEATH,TRAIT_NOCLONELOSS)
|
||||
inherent_traits = list(TRAIT_ADVANCEDTOOLUSER,TRAIT_NOMETABOLISM,TRAIT_TOXIMMUNE,TRAIT_RESISTCOLD,TRAIT_RESISTHIGHPRESSURE,TRAIT_RESISTLOWPRESSURE,TRAIT_RADIMMUNE,TRAIT_EASYDISMEMBER,TRAIT_EASILY_WOUNDED,TRAIT_LIMBATTACHMENT,TRAIT_NOBREATH,TRAIT_NODEATH,TRAIT_FAKEDEATH,TRAIT_NOCLONELOSS)
|
||||
inherent_biotypes = MOB_UNDEAD|MOB_HUMANOID
|
||||
mutanttongue = /obj/item/organ/tongue/zombie
|
||||
var/static/list/spooks = list('sound/hallucinations/growl1.ogg','sound/hallucinations/growl2.ogg','sound/hallucinations/growl3.ogg','sound/hallucinations/veryfar_noise.ogg','sound/hallucinations/wail.ogg')
|
||||
@@ -100,6 +100,6 @@
|
||||
mutanttongue = /obj/item/organ/tongue/zombie
|
||||
changesource_flags = MIRROR_BADMIN | WABBAJACK | ERT_SPAWN
|
||||
species_traits = list(HAS_FLESH, HAS_BONE)
|
||||
inherent_traits = list(TRAIT_EASILY_WOUNDED)
|
||||
inherent_traits = list(TRAIT_ADVANCEDTOOLUSER,TRAIT_EASILY_WOUNDED)
|
||||
|
||||
#undef REGENERATION_DELAY
|
||||
|
||||
@@ -1,9 +0,0 @@
|
||||
/mob/living/carbon/monkey/gib_animation()
|
||||
new /obj/effect/temp_visual/gib_animation(loc, "gibbed-m")
|
||||
|
||||
/mob/living/carbon/monkey/dust_animation()
|
||||
new /obj/effect/temp_visual/dust_animation(loc, "dust-m")
|
||||
|
||||
/mob/living/carbon/monkey/death(gibbed)
|
||||
walk(src,0) // Stops dead monkeys from fleeing their attacker or climbing out from inside His Grace
|
||||
. = ..()
|
||||
@@ -1,34 +0,0 @@
|
||||
/mob/living/carbon/monkey/can_equip(obj/item/I, slot, disable_warning = FALSE, bypass_equip_delay_self = FALSE)
|
||||
switch(slot)
|
||||
if(ITEM_SLOT_HANDS)
|
||||
if(get_empty_held_indexes())
|
||||
return TRUE
|
||||
return FALSE
|
||||
if(ITEM_SLOT_MASK)
|
||||
if(wear_mask)
|
||||
return FALSE
|
||||
if( !(I.slot_flags & ITEM_SLOT_MASK) )
|
||||
return FALSE
|
||||
return TRUE
|
||||
if(ITEM_SLOT_NECK)
|
||||
if(wear_neck)
|
||||
return FALSE
|
||||
if( !(I.slot_flags & ITEM_SLOT_NECK) )
|
||||
return FALSE
|
||||
return TRUE
|
||||
if(ITEM_SLOT_HEAD)
|
||||
if(head)
|
||||
return FALSE
|
||||
if( !(I.slot_flags & ITEM_SLOT_HEAD) )
|
||||
return FALSE
|
||||
return TRUE
|
||||
if(ITEM_SLOT_BACK)
|
||||
if(back)
|
||||
return FALSE
|
||||
if( !(I.slot_flags & ITEM_SLOT_BACK) )
|
||||
return FALSE
|
||||
return TRUE
|
||||
return FALSE //Unsupported slot
|
||||
|
||||
|
||||
|
||||
@@ -1,135 +0,0 @@
|
||||
|
||||
|
||||
/mob/living/carbon/monkey
|
||||
|
||||
/mob/living/carbon/monkey/handle_mutations_and_radiation()
|
||||
if(radiation)
|
||||
if(radiation > RAD_MOB_KNOCKDOWN && prob(RAD_MOB_KNOCKDOWN_PROB))
|
||||
if(!IsParalyzed())
|
||||
emote("collapse")
|
||||
Paralyze(RAD_MOB_KNOCKDOWN_AMOUNT)
|
||||
to_chat(src, "<span class='danger'>You feel weak.</span>")
|
||||
if(radiation > RAD_MOB_MUTATE)
|
||||
if(prob(1))
|
||||
to_chat(src, "<span class='danger'>You mutate!</span>")
|
||||
easy_randmut(NEGATIVE+MINOR_NEGATIVE)
|
||||
emote("gasp")
|
||||
domutcheck()
|
||||
|
||||
if(radiation > RAD_MOB_MUTATE * 2 && prob(50))
|
||||
gorillize()
|
||||
return
|
||||
if(radiation > RAD_MOB_VOMIT && prob(RAD_MOB_VOMIT_PROB))
|
||||
vomit(10, TRUE)
|
||||
return ..()
|
||||
|
||||
/mob/living/carbon/monkey/handle_breath_temperature(datum/gas_mixture/breath)
|
||||
if(abs(get_body_temp_normal() - breath.temperature) > 50)
|
||||
switch(breath.temperature)
|
||||
if(-INFINITY to 120)
|
||||
adjustFireLoss(3)
|
||||
if(120 to 200)
|
||||
adjustFireLoss(1.5)
|
||||
if(200 to 260)
|
||||
adjustFireLoss(0.5)
|
||||
if(360 to 400)
|
||||
adjustFireLoss(2)
|
||||
if(400 to 1000)
|
||||
adjustFireLoss(3)
|
||||
if(1000 to INFINITY)
|
||||
adjustFireLoss(8)
|
||||
|
||||
. = ..() // interact with body heat after dealing with the hot air
|
||||
|
||||
/mob/living/carbon/monkey/handle_environment(datum/gas_mixture/environment)
|
||||
// Run base mob body temperature proc before taking damage
|
||||
// this balances body temp to the environment and natural stabilization
|
||||
. = ..()
|
||||
|
||||
if(bodytemperature > BODYTEMP_HEAT_DAMAGE_LIMIT && !HAS_TRAIT(src, TRAIT_RESISTHEAT))
|
||||
switch(bodytemperature)
|
||||
if(360 to 400)
|
||||
throw_alert("temp", /atom/movable/screen/alert/hot, 1)
|
||||
apply_damage(HEAT_DAMAGE_LEVEL_1, BURN)
|
||||
if(400 to 460)
|
||||
throw_alert("temp", /atom/movable/screen/alert/hot, 2)
|
||||
apply_damage(HEAT_DAMAGE_LEVEL_2, BURN)
|
||||
if(460 to INFINITY)
|
||||
throw_alert("temp", /atom/movable/screen/alert/hot, 3)
|
||||
if(on_fire)
|
||||
apply_damage(HEAT_DAMAGE_LEVEL_3, BURN)
|
||||
else
|
||||
apply_damage(HEAT_DAMAGE_LEVEL_2, BURN)
|
||||
|
||||
else if(bodytemperature < BODYTEMP_COLD_DAMAGE_LIMIT && !HAS_TRAIT(src, TRAIT_RESISTCOLD))
|
||||
if(!istype(loc, /obj/machinery/atmospherics/components/unary/cryo_cell))
|
||||
switch(bodytemperature)
|
||||
if(200 to 260)
|
||||
throw_alert("temp", /atom/movable/screen/alert/cold, 1)
|
||||
apply_damage(COLD_DAMAGE_LEVEL_1, BURN)
|
||||
if(120 to 200)
|
||||
throw_alert("temp", /atom/movable/screen/alert/cold, 2)
|
||||
apply_damage(COLD_DAMAGE_LEVEL_2, BURN)
|
||||
if(-INFINITY to 120)
|
||||
throw_alert("temp", /atom/movable/screen/alert/cold, 3)
|
||||
apply_damage(COLD_DAMAGE_LEVEL_3, BURN)
|
||||
else
|
||||
clear_alert("temp")
|
||||
|
||||
else
|
||||
clear_alert("temp")
|
||||
|
||||
//Account for massive pressure differences
|
||||
|
||||
var/pressure = environment.return_pressure()
|
||||
var/adjusted_pressure = calculate_affecting_pressure(pressure) //Returns how much pressure actually affects the mob.
|
||||
switch(adjusted_pressure)
|
||||
if(HAZARD_HIGH_PRESSURE to INFINITY)
|
||||
adjustBruteLoss( min( ( (adjusted_pressure / HAZARD_HIGH_PRESSURE) -1 )*PRESSURE_DAMAGE_COEFFICIENT , MAX_HIGH_PRESSURE_DAMAGE) )
|
||||
throw_alert("pressure", /atom/movable/screen/alert/highpressure, 2)
|
||||
if(WARNING_HIGH_PRESSURE to HAZARD_HIGH_PRESSURE)
|
||||
throw_alert("pressure", /atom/movable/screen/alert/highpressure, 1)
|
||||
if(WARNING_LOW_PRESSURE to WARNING_HIGH_PRESSURE)
|
||||
clear_alert("pressure")
|
||||
if(HAZARD_LOW_PRESSURE to WARNING_LOW_PRESSURE)
|
||||
throw_alert("pressure", /atom/movable/screen/alert/lowpressure, 1)
|
||||
else
|
||||
adjustBruteLoss( LOW_PRESSURE_DAMAGE )
|
||||
throw_alert("pressure", /atom/movable/screen/alert/lowpressure, 2)
|
||||
|
||||
return
|
||||
|
||||
/mob/living/carbon/monkey/handle_random_events()
|
||||
if (prob(1) && prob(2))
|
||||
emote("scratch")
|
||||
|
||||
/mob/living/carbon/monkey/has_smoke_protection()
|
||||
if(wear_mask)
|
||||
if(wear_mask.clothing_flags & BLOCK_GAS_SMOKE_EFFECT)
|
||||
return 1
|
||||
|
||||
/mob/living/carbon/monkey/handle_fire()
|
||||
. = ..()
|
||||
if(.) //if the mob isn't on fire anymore
|
||||
return
|
||||
|
||||
//the fire tries to damage the exposed clothes and items
|
||||
var/list/burning_items = list()
|
||||
//HEAD//
|
||||
var/obscured = check_obscured_slots(TRUE)
|
||||
if(wear_mask && !(obscured & ITEM_SLOT_MASK))
|
||||
burning_items += wear_mask
|
||||
if(wear_neck && !(obscured & ITEM_SLOT_NECK))
|
||||
burning_items += wear_neck
|
||||
if(head)
|
||||
burning_items += head
|
||||
|
||||
if(back)
|
||||
burning_items += back
|
||||
|
||||
for(var/X in burning_items)
|
||||
var/obj/item/I = X
|
||||
I.fire_act((fire_stacks * 50)) //damage taken is reduced to 2% of this value by fire_act()
|
||||
|
||||
adjust_bodytemperature(BODYTEMP_HEATING_MAX)
|
||||
SEND_SIGNAL(src, COMSIG_ADD_MOOD_EVENT, "on_fire", /datum/mood_event/on_fire)
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user