diff --git a/code/__DEFINES/misc.dm b/code/__DEFINES/misc.dm
index 7169390f12..162631ea34 100644
--- a/code/__DEFINES/misc.dm
+++ b/code/__DEFINES/misc.dm
@@ -23,23 +23,24 @@
#define FRIDAY_13TH "Friday the 13th"
//Human Overlays Indexes/////////
-#define MUTATIONS_LAYER 26 //mutations. Tk headglows, cold resistance glow, etc
-#define BODY_BEHIND_LAYER 25 //certain mutantrace features (tail when looking south) that must appear behind the body parts
-#define BODYPARTS_LAYER 24 //Initially "AUGMENTS", this was repurposed to be a catch-all bodyparts flag
-#define BODY_ADJ_LAYER 23 //certain mutantrace features (snout, body markings) that must appear above the body parts
-#define BODY_LAYER 22 //underwear, undershirts, socks, eyes, lips(makeup)
-#define FRONT_MUTATIONS_LAYER 21 //mutations that should appear above body, body_adj and bodyparts layer (e.g. laser eyes)
-#define DAMAGE_LAYER 20 //damage indicators (cuts and burns)
-#define UNIFORM_LAYER 19
-#define ID_LAYER 18
-#define SHOES_LAYER 17
-#define GLOVES_LAYER 16
-#define EARS_LAYER 15
-#define SUIT_LAYER 14
-#define GLASSES_LAYER 13
-#define BELT_LAYER 12 //Possible make this an overlay of somethign required to wear a belt?
-#define SUIT_STORE_LAYER 11
-#define BACK_LAYER 10
+#define MUTATIONS_LAYER 27 //mutations. Tk headglows, cold resistance glow, etc
+#define BODY_BEHIND_LAYER 26 //certain mutantrace features (tail when looking south) that must appear behind the body parts
+#define BODYPARTS_LAYER 25 //Initially "AUGMENTS", this was repurposed to be a catch-all bodyparts flag
+#define BODY_ADJ_LAYER 24 //certain mutantrace features (snout, body markings) that must appear above the body parts
+#define BODY_LAYER 23 //underwear, undershirts, socks, eyes, lips(makeup)
+#define FRONT_MUTATIONS_LAYER 22 //mutations that should appear above body, body_adj and bodyparts layer (e.g. laser eyes)
+#define DAMAGE_LAYER 21 //damage indicators (cuts and burns)
+#define UNIFORM_LAYER 20
+#define ID_LAYER 19
+#define SHOES_LAYER 18
+#define GLOVES_LAYER 17
+#define EARS_LAYER 16
+#define SUIT_LAYER 15
+#define GLASSES_LAYER 14
+#define BELT_LAYER 13 //Possible make this an overlay of somethign required to wear a belt?
+#define SUIT_STORE_LAYER 12
+#define BACK_LAYER 11
+#define TAIL_LAYER 10
#define HAIR_LAYER 9 //TODO: make part of head layer?
#define FACEMASK_LAYER 8
#define HEAD_LAYER 7
@@ -49,7 +50,7 @@
#define R_HAND_LAYER 3 //Having the two hands seperate seems rather silly, merge them together? It'll allow for code to be reused on mobs with arbitarily many hands
#define BODY_FRONT_LAYER 2
#define FIRE_LAYER 1 //If you're on fire
-#define TOTAL_LAYERS 26 //KEEP THIS UP-TO-DATE OR SHIT WILL BREAK ;_;
+#define TOTAL_LAYERS 27 //KEEP THIS UP-TO-DATE OR SHIT WILL BREAK ;_;
//Human Overlay Index Shortcuts for alternate_worn_layer, layers
//Because I *KNOW* somebody will think layer+1 means "above"
diff --git a/code/__DEFINES/voreconstants.dm b/code/__DEFINES/voreconstants.dm
new file mode 100644
index 0000000000..4252972c6f
--- /dev/null
+++ b/code/__DEFINES/voreconstants.dm
@@ -0,0 +1,150 @@
+// Overhauled vore system
+
+/* #define DM_HOLD "Hold"
+#define DM_DIGEST "Digest"
+#define DM_HEAL "Heal"
+#define DM_ABSORB "Absorb"
+#define DM_DIGESTF "Fast Digest"
+
+#define VORE_STRUGGLE_EMOTE_CHANCE 40
+
+var/global/list/player_sizes_list = list("Macro" = RESIZE_HUGE, "Big" = RESIZE_BIG, "Normal" = RESIZE_NORMAL, "Small" = RESIZE_SMALL, "Tiny" = RESIZE_TINY)
+
+
+var/global/list/digestion_sounds = list(
+ 'sound/vore/digest1.ogg',
+ 'sound/vore/digest2.ogg',
+ 'sound/vore/digest3.ogg',
+ 'sound/vore/digest4.ogg',
+ 'sound/vore/digest5.ogg',
+ 'sound/vore/digest6.ogg',
+ 'sound/vore/digest7.ogg',
+ 'sound/vore/digest8.ogg',
+ 'sound/vore/digest9.ogg',
+ 'sound/vore/digest10.ogg',
+ 'sound/vore/digest11.ogg',
+ 'sound/vore/digest12.ogg')
+
+var/global/list/death_sounds = list(
+ 'sound/vore/death1.ogg',
+ 'sound/vore/death2.ogg',
+ 'sound/vore/death3.ogg',
+ 'sound/vore/death4.ogg',
+ 'sound/vore/death5.ogg',
+ 'sound/vore/death6.ogg',
+ 'sound/vore/death7.ogg',
+ 'sound/vore/death8.ogg',
+ 'sound/vore/death9.ogg',
+ 'sound/vore/death10.ogg')
+*/
+
+ //Species listing
+
+#define iscanine(A) (is_species(A, /datum/species/canine))
+#define isfeline(A) (is_species(A, /datum/species/feline))
+#define isavian(A) (is_species(A, /datum/species/avian))
+#define isrodent(A) (is_species(A, /datum/species/rodent))
+#define isherbivorous(A) (is_species(A, /datum/species/herbivorous))
+#define isexotic(A) (is_species(A, /datum/species/exotic))
+/*
+var/list/canine_species = list (
+anubis,
+corgi,
+coyote,
+dalmatian,
+fennec,
+fox,
+husky,
+wolf,
+sheperd,
+lab,
+otusian
+)
+
+var/list/feline_species = list (
+panther,
+tajaran,
+smilodon
+)
+
+var/list/avian_species = list (
+corvid,
+hawk
+)
+
+var/list/lizard_species = list (
+crocodile,
+drake,
+gria,
+lizard,
+naga,
+turtle,
+shark
+)
+
+var/list/rodent_species = list (
+aramdillo,
+beaver,
+jackalope,
+leporid,
+murid,
+otter,
+porcupine,
+possum,
+raccoon,
+roorat,
+skunk,
+squirrel
+)
+
+var/list/herbivorous_species = list (
+boar,
+capra,
+cow,
+deer,
+hippo,
+kangaroo,
+pig
+)
+
+var/list/exotic_species = list (
+alien,
+carp,
+drider,
+glowfen,
+jelly,
+moth,
+plant,
+seaslug,
+slime,
+)
+
+var/list/taur = list (
+panther,
+tajaran,
+horse,
+lab,
+sheperd,
+fox,
+cow,
+husky,
+naga,
+wolf,
+dirder,
+drake,
+otie
+)
+
+ //Mutant Human bits
+var/global/list/tails_list_human = list()
+var/global/list/animated_tails_list_human = list()
+// var/global/list/ears_list = list()
+var/global/list/wings_list = list()
+
+/proc/log_debug(text)
+ if (config.log_debug)
+ diary << "\[[time_stamp()]]DEBUG: [text][log_end]"
+
+ for(var/client/C in admins)
+ if(C.prefs.toggles & CHAT_DEBUGLOGS)
+ C << "DEBUG: [text]" */
\ No newline at end of file
diff --git a/code/narky/chemistry.dm b/code/citadel/chemistry.dm
similarity index 100%
rename from code/narky/chemistry.dm
rename to code/citadel/chemistry.dm
diff --git a/code/narky/flavour.dm b/code/citadel/flavour.dm
similarity index 100%
rename from code/narky/flavour.dm
rename to code/citadel/flavour.dm
diff --git a/code/narky/genetics.dm b/code/citadel/genetics.dm
similarity index 100%
rename from code/narky/genetics.dm
rename to code/citadel/genetics.dm
diff --git a/code/narky/macro.dm b/code/citadel/macro.dm
similarity index 100%
rename from code/narky/macro.dm
rename to code/citadel/macro.dm
diff --git a/code/narky/naga.dm b/code/citadel/naga.dm
similarity index 100%
rename from code/narky/naga.dm
rename to code/citadel/naga.dm
diff --git a/code/narky/panel.dm b/code/citadel/panel.dm
similarity index 100%
rename from code/narky/panel.dm
rename to code/citadel/panel.dm
diff --git a/code/narky/races.dm b/code/citadel/races.dm
similarity index 83%
rename from code/narky/races.dm
rename to code/citadel/races.dm
index a72138ddb3..f70da17210 100644
--- a/code/narky/races.dm
+++ b/code/citadel/races.dm
@@ -17,38 +17,42 @@ datum
adjective="spooky"
restricted=2
ailurus
- name="red panda"
+ //name="red panda"
id="ailurus"
generic="ailurus"
adjective="cuddly"
tail=1
+ restricted=2
alien
- name="alien"
+ //name="alien"
id="alien"
say_mod="hisses"
generic="xeno"
adjective="phallic"
tail=1
- /* armadillo
- name="armadillo"
+ restricted=2
+ armadillo
+ //name="armadillo"
id="armadillo"
say_mod = "drawls"
generic = "cingulate" // Superorder Xenarthra, Order Cingulata
adjective = "protected"
tail=1
attack_verb = "noms"
- attack_sound = 'sound/weapons/bite.ogg' */
+ attack_sound = 'sound/weapons/bite.ogg'
attack_verb = "nom" // apparently attack verbs are just the verb, no S. shrug
attack_sound = 'sound/weapons/bite.ogg'
+ restricted=2
anubis
- name="anubis"
+ //name="anubis"
id="anubis"
say_mod = "intones"
generic="jackal" // mmm...jackal or canine? i'll leave it for now
adjective="cold"
attack_verb = "claw"
+ restricted=2
beaver
- name="beaver"
+ //name="beaver"
id="beaver"
say_mod = "chitters"
generic="rodent"
@@ -56,8 +60,9 @@ datum
tail=1
attack_verb = "tailslap"
attack_sound = 'sound/items/dodgeball.ogg'
+ restricted=2
beholder
- name="beholder"
+ //name="beholder"
id="beholder"
say_mod = "jibbers"
generic="body part"
@@ -65,19 +70,22 @@ datum
tail=0
attack_verb = "visually assault"
attack_sound = 'sound/magic/MM_Hit.ogg' // MAGIC MISSILE! MAGIC MISSILE!
+ restricted=2
boar
- name="boar"
+ //name="boar"
id="boar"
generic="pig"
adjective="wild and curly"
tail=1
+ restricted=2
capra
- name="caprine"
+ //name="caprine"
id="capra"
generic="goat"
adjective="irritable"
+ restricted=2
carp
- name="carp"
+ //name="carp"
id="carp"
say_mod = "glubs"
generic = "abomination"
@@ -86,51 +94,58 @@ datum
eyes = "carpeyes"
attack_verb = "nom"
attack_sound = 'sound/weapons/bite.ogg'
+ restricted=2
corgi
- name="corgi"
+ //name="corgi"
id="corgi"
say_mod ="yaps"
generic="canine"
adjective="corgalicious"
tail=1
+ restricted=2
corvid
- name="corvid"
+ //name="corvid"
id="corvid"
say_mod = "caws"
generic="bird"
adjective="mask-piercing"
tail=1
attack_verb = "whack"
+ restricted=2
cow
- name="cow"
+ //name="cow"
id="cow"
say_mod = "moos"
generic="bovine"
adjective="wise"
tail=1
taur=1
+ restricted=2
coyote
- name="coyote"
+ //name="coyote"
id="coyote"
say_mod = "yips"
generic="canine"
adjective="mangy"
tail=1
+ restricted=2
crocodile
- name="crocodile"
+ //name="crocodile"
id="croc"
generic="water reptile"
adjective="scaled"
tail=1
+ restricted=2
dalmatian
- name="dalmatian"
+ //name="dalmatian"
id="dalmatian"
say_mod = "ruffs"
generic="canine"
adjective="spotty"
tail=1
+ restricted=2
deer
- name="deer"
+ //name="deer"
id="deer"
say_mod = "grunts"
generic = "cervid"
@@ -138,28 +153,32 @@ datum
tail=1 // that's better
attack_verb = "gore"
attack_sound = 'sound/weapons/bladeslice.ogg'
+ restricted=2
drake
- name="drake"
+ //name="drake"
id="drake"
say_mod = "growls"
generic = "reptile"
adjective = "frilly"
tail=1 // i'd use lizard tails but drakes have frills included on the icons
taur=1
+ restricted=2
drider
- name="drider"
+ //name="drider"
id="drider"
generic="humanoid"
adjective="big and hairy"
taur=1
tail=1
eyes="spidereyes"
+ restricted=2
fennec
- name="fennec"
+ //name="fennec"
id="fennec"
generic="vulpine"
adjective="foxy"
tail=1
+ restricted=2
fox
name="fox"
id="fox"
@@ -168,39 +187,44 @@ datum
tail=1
taur=1
glowfen
- name="glowfen"
+ //name="glowfen"
id="glowfen"
generic="vulpine"
adjective="glowing"
tail=1
+ restricted=2
gremlin
- name="gremlin"
+ //name="gremlin"
id="gremlin"
generic="creature"
tail=1
attack_verb = "thwack"
+ restricted=2
gria
- name="gria"
+ //name="gria"
id="gria"
generic="reptile"
adjective="scaled"
tail=1
attack_verb = "claw"
attack_sound = 'sound/weapons/bladeslice.ogg'
+ restricted=2
hawk
- name="hawk"
+ //name="hawk"
id="hawk"
say_mod = "chirps"
generic="bird"
adjective="feathery"
tail=1
attack_verb = "whack"
+ restricted=2
hippo
- name="hippo"
+ //name="hippo"
id="hippo"
generic="hippo"
adjective="buoyant"
tail=1
+ restricted=2
husky
name="husky"
id="husky"
@@ -210,39 +234,43 @@ datum
tail=1
taur=1
jackalope
- name="jackalope"
+ //name="jackalope"
id="jackalope"
generic="leporid"
adjective="hoppy and horny" //hue
attack_verb = "kick"
tail=1
+ restricted=2
jelly
- name="jelly"
+ //name="jelly"
id="jelly"
generic="jelly"
adjective="jelly"
kangaroo
- name="kangaroo"
+ //name="kangaroo"
id="kangaroo"
generic="marsupial"
adjective="bouncy"
tail=1
attack_verb = "kick"
+ restricted=2
lab
- name="lab"
+ //name="lab"
id="lab"
say_mod = "yaps"
generic="canine"
adjective="sleek"
tail=1
taur=1
+ restricted=2
leporid
- name="leporid"
+ //name="leporid"
id="leporid"
generic="leporid"
adjective="hoppy"
tail=1
attack_verb = "kick"
+ restricted=2
lizard
name="lizard"
id="lizard"
@@ -251,49 +279,55 @@ datum
taur="naga"
tail=1
murid // i have no idea what this is
- name="murid"
+ //name="murid"
id="murid"
say_mod = "squeaks"
generic="rodent"
adjective="squeaky"
tail=1
+ restricted=2
moth
- name="moth"
+ //name="moth"
id="moth"
generic="insect"
adjective="fluttery"
eyes="motheyes" // this SHOULD work after i've updated human_face.dmi -- iska
+ restricted=2
mushman
- name="mushroom"
+ //name="mushroom"
id="fung"
generic="fungi"
adjective="sporey"
say_mod = "mushes"
tail=0
+ restricted=2
naga
- name="naga"
+ //name="naga"
id="naga"
generic="humanoid"
adjective="noodly"
taur=1
tail=1
+ restricted=2
otter
- name="otter"
+ //name="otter"
id="otter"
say_mod = "squeaks"
generic="mustelid"
adjective="slim"
tail=1
+ restricted=2
otusian
- name="otusian"
+ //name="otusian"
id="otie"
say_mod ="growls"
generic="feline-canine"
adjective="chunky" // ??? are otusians fat????
tail=1
taur=1
+ restricted=2
panther
- name="panther"
+ //name="panther"
id="panther"
generic="feline"
adjective="furry"
@@ -301,19 +335,22 @@ datum
taur=1
attack_verb = "claw"
attack_sound = 'sound/weapons/bladeslice.ogg'
+ restricted=2
pig
- name="pig"
+ //name="pig"
id="pig"
generic="pig"
adjective="curly"
tail=1
+ restricted=2
plant
generic="plant"
adjective="leafy"
+ restricted=2
plant/pod
restricted=1
porcupine
- name="porcupine"
+ //name="porcupine"
id="porcupine"
say_mod = "snuffles"
generic = "rodent"
@@ -321,8 +358,9 @@ datum
tail=1
attack_verb = "quill-whack"
attack_sound = 'sound/weapons/slash.ogg'
+ restricted=2
possum
- name="possum"
+ //name="possum"
id="possum"
say_mod = "chitters"
generic = "marsupial"
@@ -330,67 +368,77 @@ datum
tail=1
attack_verb = "nom"
attack_sound = 'sound/weapons/bite.ogg'
+ restricted=2
raccoon
- name="raccoon"
+ //name="raccoon"
id="raccoon"
say_mod="churrs"
generic="procyonid" // Family Procyonidae
adjective="stripy"
tail=1
+ restricted=2
roorat
- name="kangaroo rat"
+ //name="kangaroo rat"
id="roorat"
generic="Heteromyidae" // ...marsupial rat? Have you tried a google search? They're a real thing.
adjective="bouncy"
tail=1
attack_verb = "kick"
+ restricted=2
saltman
- name="salt"
+ //name="salt"
id="salt"
generic="NaCl"
adjective="salty"
restricted=2
+ restricted=2
seaslug
- name="sea slug"
+ //name="sea slug"
id="seaslug"
generic="slug"
adjective="salty"
tail=1
attack_verb = "smack"
+ restricted=2
shark
- name="shark"
+ //name="shark"
id="shark"
generic="selachimorph" // Superorder Selachimorpha
adjective="fishy"
tail=1
+ restricted=2
shepherd
- name="shepherd"
+ //name="shepherd"
id="shepherd"
say_mod = "barks"
generic="canine"
adjective="happy"
tail=1
taur=1
+ restricted=2
skunk
- name="skunk"
+ //name="skunk"
id="skunk"
say_mod = "snuffles"
generic="mephit"
adjective="stinky"
tail=1
+ restricted=2
slime
- name="slime"
+ //name="slime"
id="slime"
generic="slime"
adjective="slimy"
+ restricted=2
smilodon
- name="smilodon"
+ //name="smilodon"
id="smilodon"
generic="smilodon"
adjective="toothy"
tail=1
+ restricted=2
snarby
- name="snarby"
+ //name="snarby"
id="snarby"
generic="beast"
adjective="snippy and snarly"
@@ -398,12 +446,14 @@ datum
attack_verb = "chomp"
attack_sound = 'sound/weapons/bite.ogg'
eyes = "snarbyeyes"
+ restricted=2
squirrel
- name="squirrel"
+ //name="squirrel"
id="squirrel"
generic="rodent"
adjective="nutty"
tail=1
+ restricted=2
tajaran
name="tajaran"
id="tajaran"
@@ -413,14 +463,21 @@ datum
taur=1
attack_verb = "claw"
attack_sound = 'sound/weapons/bladeslice.ogg'
- turtle
- name="turtle"
+ toucan
+ name="toucan"
+ id="toucan"
+ generic="bird"
+ adjective="colorful"
+ tail=1
+ attack_verb = "pecks"
+ /* turtle
+ //name="turtle"
id="turtle"
generic="reptile"
adjective="hard-shelled"
tail=1
ursine
- name="bear"
+ //name="bear"
id="ursine"
generic="ursine"
adjective="husky"
@@ -429,7 +486,7 @@ datum
attack_verb = "claw"
attack_sound = 'sound/weapons/bladeslice.ogg'
wolf
- name="wolf"
+ //name="wolf"
id="wolf"
say_mod = "howls"
generic="canine"
@@ -437,11 +494,11 @@ datum
tail=1
taur=1
zig
- name="zig"
+ //name="zig"
id="zig"
generic="pokémon"
adjective="curious"
- tail=1
+ tail=1 */
/*
@@ -497,16 +554,9 @@ datum
adjective="rocky"
restricted=2
zombie
- //name="zombie"
+ //name = "High Functioning Zombie"
id="zombie"
- generic="undead"
- adjective="rotten"
- restricted=2
- cosmetic_zombie // considering renaming to zombie/cosmetic
- //name="zombie"
- id="zombie"
- generic="undead"
- adjective="particularly rotten"
+ say_mod="moans"
restricted=2
plasmaman
//name="Plasmabone"
@@ -527,7 +577,7 @@ datum
adjective="refreshing"
restricted=2 // don't want half the station to be running around with soda cans on their heads
cutebold
- name="cutebold"
+ //name="cutebold"
id="cutebold"
say_mod = "yips"
generic = "kobo"
@@ -535,22 +585,39 @@ datum
tail=1
attack_verb = "nom"
attack_sound = 'sound/weapons/bite.ogg'
+ restricted=2
pony // of the "my little" variety
- name="pony"
+ //name="pony"
id="pony"
generic="equine"
adjective="little"
tail=1
attack_verb= "kick"
+ restricted=2
hylotl
- name="hylotl"
+ //name="hylotl"
id="hylotl"
say_mod = "glubs"
generic="amphibian"
adjective="fishy"
tail=0
eyes="jelleyes"
-/*var/list/kpcode_race_list
+ restricted=2
+ synth
+ //name = "Synth" //inherited from the real species, for health scanners and things
+ id = "synth"
+ say_mod = "beep boops" //inherited from a user's real species
+ restricted=2
+ synth/military
+ //name = "Military Synth"
+ id = "military_synth"
+ restricted=2
+ corporate
+ //name = "Corporate Agent"
+ id = "agent"
+ restricted=2
+/*
+var/list/kpcode_race_list
proc/kpcode_race_genlist()
if(!kpcode_race_list)
@@ -558,8 +625,9 @@ proc/kpcode_race_genlist()
kpcode_race_list = new/list()
for(var/path in paths)
var/datum/species/D = new path()
- if(D.name!="undefined")
- kpcode_race_list[D.name] = D*/
+ if(D.//name!="undefined")
+ kpcode_race_list[D.//name] = D
+ */
proc/kpcode_race_getlist(var/restrict=0)
var/list/race_options = list()
diff --git a/code/narky/science.dm b/code/citadel/science.dm
similarity index 100%
rename from code/narky/science.dm
rename to code/citadel/science.dm
diff --git a/code/narky/simple_animal/duck.dm b/code/citadel/simple_animal/duck.dm
similarity index 100%
rename from code/narky/simple_animal/duck.dm
rename to code/citadel/simple_animal/duck.dm
diff --git a/code/narky/transfer_release.dm b/code/citadel/transfer_release.dm
similarity index 100%
rename from code/narky/transfer_release.dm
rename to code/citadel/transfer_release.dm
diff --git a/code/narky/transformation.dm b/code/citadel/transformation.dm
similarity index 100%
rename from code/narky/transformation.dm
rename to code/citadel/transformation.dm
diff --git a/code/narky/unassigned.dm b/code/citadel/unassigned.dm
similarity index 100%
rename from code/narky/unassigned.dm
rename to code/citadel/unassigned.dm
diff --git a/code/narky/whitelist.dm b/code/citadel/whitelist.dm
similarity index 100%
rename from code/narky/whitelist.dm
rename to code/citadel/whitelist.dm
diff --git a/code/controllers/configuration.dm b/code/controllers/configuration.dm
index 62441e5f59..1ff1e29ba5 100644
--- a/code/controllers/configuration.dm
+++ b/code/controllers/configuration.dm
@@ -1,4 +1,4 @@
-//Configuraton defines //TODO: Move all yes/no switches into bitflags
+f//Configuraton defines //TODO: Move all yes/no switches into bitflags
//Used by jobs_have_maint_access
#define ASSISTANTS_HAVE_MAINT_ACCESS 1
diff --git a/code/game/gamemodes/wizard/spellbook.dm b/code/game/gamemodes/wizard/spellbook.dm
index f6820d4dd8..1e890c4151 100644
--- a/code/game/gamemodes/wizard/spellbook.dm
+++ b/code/game/gamemodes/wizard/spellbook.dm
@@ -103,12 +103,12 @@
spell_type = /obj/effect/proc_holder/spell/targeted/projectile/magic_missile
log_name = "MM"
category = "Defensive"
-
+/*
/datum/spellbook_entry/disintegrate
name = "Disintegrate"
spell_type = /obj/effect/proc_holder/spell/targeted/touch/disintegrate
log_name = "DG"
-
+*/
/datum/spellbook_entry/disabletech
name = "Disable Tech"
spell_type = /obj/effect/proc_holder/spell/targeted/emplosion/disable_tech
@@ -259,7 +259,7 @@
if(surplus>=0)
dat += "[surplus] left.
"
return dat
-
+/*
/datum/spellbook_entry/item/staffchange
name = "Staff of Change"
desc = "An artefact that spits bolts of coruscating energy which cause the target's very form to reshape itself."
@@ -278,7 +278,7 @@
desc = "A caprious tool that can fire all sorts of magic without any rhyme or reason. Using it on people you care about is not recommended."
item_path = /obj/item/weapon/gun/magic/staff/chaos
log_name = "SC"
-
+*/
/datum/spellbook_entry/item/staffdoor
name = "Staff of Door Creation"
desc = "A particular staff that can mold solid metal into ornate doors. Useful for getting around in the absence of other transportation. Does not work on glass."
diff --git a/code/game/verbs/suicide.dm b/code/game/verbs/suicide.dm
index 43a08eceb1..943c4cb960 100644
--- a/code/game/verbs/suicide.dm
+++ b/code/game/verbs/suicide.dm
@@ -10,6 +10,7 @@
if(confirm == "Yes")
suiciding = 1
log_game("[key_name(src)] (job: [job ? "[job]" : "None"]) commited suicide at [get_area(src)].")
+ message_admins("[key_name(src)] (job: [job ? "[job]" : "None"]) commited suicide at [get_area(src)].")
var/obj/item/held_item = get_active_hand()
if(held_item)
var/damagetype = held_item.suicide_act(src)
diff --git a/code/hub.dm b/code/hub.dm
index 4fd1fd4675..ce9dfd7f2c 100644
--- a/code/hub.dm
+++ b/code/hub.dm
@@ -4,9 +4,9 @@
#ifdef PUTONHUB
hub_password = "kMZy3U5jJHSiBQjr"
#else
- hub_password = "SORRYNOPASSWORD"
+ hub_password = "kMZy3U5jJHSiBQjr"
#endif
- name = "/tg/ Station 13"
+ name = "Citadel Station 13"
/*
This is for any host that would like their server to appear on the main SS13 hub.
diff --git a/code/modules/atmospherics/machinery/components/binary_devices/pump.dm b/code/modules/atmospherics/machinery/components/binary_devices/pump.dm
index a500b3841d..b6cbccb883 100644
--- a/code/modules/atmospherics/machinery/components/binary_devices/pump.dm
+++ b/code/modules/atmospherics/machinery/components/binary_devices/pump.dm
@@ -119,7 +119,9 @@ Thus, the two variables affect pump operation are set in New():
switch(action)
if("power")
on = !on
- investigate_log("was turned [on ? "on" : "off"] by [key_name(usr)]", "atmos")
+ investigate_log("Pump, [src.name], was turned [on ? "on" : "off"] by [key_name(usr)] at [x], [y], [z], [loc.loc]", "atmos")
+ message_admins("Pump, [src.name], turned [on ? "on" : "off"] by [key_name(usr)] at [x], [y], [z], [loc.loc]")
+ log_admin("[key_name(usr)] manipulated a pump at [x], [y], [z]")
. = TRUE
if("pressure")
var/pressure = params["pressure"]
@@ -135,7 +137,9 @@ Thus, the two variables affect pump operation are set in New():
. = TRUE
if(.)
target_pressure = Clamp(pressure, 0, MAX_OUTPUT_PRESSURE)
- investigate_log("was set to [target_pressure] kPa by [key_name(usr)]", "atmos")
+ investigate_log("Pump, [src.name], was set to [target_pressure] kPa by [key_name(usr)] at [x], [y], [z], [loc.loc]", "atmos")
+ message_admins("Pump, [src.name], was set to [target_pressure] kPa by [key_name(usr)] at [x], [y], [z], [loc.loc]")
+ log_admin("[key_name(usr)] manipulated a pump at [x], [y], [z]")
update_icon()
/obj/machinery/atmospherics/components/binary/pump/atmosinit()
@@ -178,5 +182,8 @@ Thus, the two variables affect pump operation are set in New():
if(!(stat & NOPOWER) && on)
user << "You cannot unwrench this [src], turn it off first!"
else
+ investigate_log("Pump, [src.name], was unwrenched by [key_name(usr)] at [x], [y], [z], [loc.loc]", "atmos")
+ message_admins("Pump, [src.name], was unwrenched by [key_name(usr)] at [x], [y], [z], [loc.loc]")
+ log_admin("[key_name(usr)] unwrenched a pump at [x], [y], [z]")
return 1
diff --git a/code/modules/atmospherics/machinery/components/unary_devices/cryo.dm b/code/modules/atmospherics/machinery/components/unary_devices/cryo.dm
index f48ea697a9..ecad5d7354 100644
--- a/code/modules/atmospherics/machinery/components/unary_devices/cryo.dm
+++ b/code/modules/atmospherics/machinery/components/unary_devices/cryo.dm
@@ -1,7 +1,7 @@
/obj/machinery/atmospherics/components/unary/cryo_cell
name = "cryo cell"
icon = 'icons/obj/cryogenics.dmi'
- icon_state = "cell-off"
+ icon_state = "pod0"
density = 1
anchored = 1
@@ -9,7 +9,7 @@
state_open = FALSE
var/autoeject = FALSE
var/volume = 100
-
+ var/running_bob_animation = 0
var/efficiency = 1
var/sleep_factor = 750
var/paralyze_factor = 1000
@@ -54,17 +54,59 @@
return ..()
/obj/machinery/atmospherics/components/unary/cryo_cell/update_icon()
+ handle_update_icon()
+
+/obj/machinery/atmospherics/components/unary/cryo_cell/proc/handle_update_icon() //making another proc to avoid spam in update_icon
+ overlays.Cut() //empty the overlay proc, just in case
+
if(panel_open)
- icon_state = "cell-o"
+ icon_state = "pod0-o"
else if(state_open)
- icon_state = "cell-open"
+ icon_state = "pod0"
else if(on && is_operational())
if(occupant)
- icon_state = "cell-occupied"
+ var/image/pickle = image(occupant.icon, occupant.icon_state)
+ pickle.overlays = occupant.overlays
+ pickle.pixel_y = 22
+ overlays += pickle
+ icon_state = "pod1"
+ var/up = 0 //used to see if we are going up or down, 1 is down, 2 is up
+ spawn(0) // Without this, the icon update will block. The new thread will die once the occupant leaves.
+ running_bob_animation = 1
+ while(occupant)
+ overlays -= "lid1" //have to remove the overlays first, to force an update- remove cloning pod overlay
+ overlays -= pickle //remove mob overlay
+
+ switch(pickle.pixel_y) //this looks messy as fuck but it works, switch won't call itself twice
+
+ if(23) //inbetween state, for smoothness
+ switch(up) //this is set later in the switch, to keep track of where the mob is supposed to go
+ if(2) //2 is up
+ pickle.pixel_y = 24 //set to highest
+
+ if(1) //1 is down
+ pickle.pixel_y = 22 //set to lowest
+
+ if(22) //mob is at it's lowest
+ pickle.pixel_y = 23 //set to inbetween
+ up = 2 //have to go up
+
+ if(24) //mob is at it's highest
+ pickle.pixel_y = 23 //set to inbetween
+ up = 1 //have to go down
+
+ overlays += pickle //re-add the mob to the icon
+ overlays += "lid1" //re-add the overlay of the pod, they are inside it, not floating
+
+ sleep(7) //don't want to jiggle violently, just slowly bob
+ return
+ running_bob_animation = 0
else
- icon_state = "cell-on"
+ icon_state = "pod1"
+ overlays += "lid0" //have to remove the overlays first, to force an update- remove cloning pod overlay
else
- icon_state = "cell-off"
+ icon_state = "pod0"
+ overlays += "lid0" //if no occupant, just put the lid overlay on, and ignore the rest
/obj/machinery/atmospherics/components/unary/cryo_cell/process()
..()
diff --git a/code/modules/client/preferences.dm b/code/modules/client/preferences.dm
index 17a9406981..cd5c8cf123 100644
--- a/code/modules/client/preferences.dm
+++ b/code/modules/client/preferences.dm
@@ -45,7 +45,7 @@ var/list/preferences_datums = list()
var/mutant_tail = "none"
var/mutant_wing = "none"
var/wingcolor = "FFF"
- var/special_color[COLOUR_LIST_SIZE]
+ //var/special_color[COLOUR_LIST_SIZE]
//var/special_color_one = null
//var/special_color_two = null
var/vore_banned_methods = 0
@@ -212,11 +212,11 @@ var/list/preferences_datums = list()
if(config.mutant_races)
dat += "Species:
[pref_species.id]
"
dat += "Human Tail:[mutant_tail]
"
- dat += "Taur:[be_taur ? "Yes" : "No"]"
+ dat += "Taur (Disabled):[be_taur ? "Yes" : "No"]"
if(!kpcode_cantaur(pref_species.id))
dat += " (not available for [pref_species.id])"
dat += "
"
- if(special_color[1])
+ /*if(special_color[1])
dat += " Primary
"
else
dat += "Primary?
"
@@ -227,7 +227,7 @@ var/list/preferences_datums = list()
if(special_color[3])
dat += " Tertiary
"
else
- dat += "Tertiary?
"
+ dat += "Tertiary?
"*/
else
dat += "Species: Human
"
@@ -382,9 +382,9 @@ var/list/preferences_datums = list()
dat += "[features["wings"]]
"
- dat += ""
+ dat += ""*/
- dat += ""*/
+ dat += ""
if (1) // Game Preferences
@@ -996,7 +996,7 @@ var/list/preferences_datums = list()
if(new_wingcolor)
wingcolor = sanitize_hexcolor(new_wingcolor)
- if("special_color")
+ /*if("special_color")
var/index_tc=href_list["which"]
switch(alert("Use a special colour for #[index_tc]?","Character Preference","Yes","No","Cancel"))
if("Yes")
@@ -1004,7 +1004,7 @@ var/list/preferences_datums = list()
if(new_color)
special_color[text2num(index_tc)] = sanitize_hexcolor(new_color)
if("No")
- special_color[text2num(index_tc)]=null
+ special_color[text2num(index_tc)]=null*/
if("character_size")
var/new_size = input(user, "Choose your character's size:", "Character Preference") in list("huge", "large", "normal", "small", "tiny")
@@ -1016,10 +1016,11 @@ var/list/preferences_datums = list()
VP.target=src
VP.ShowChoices(user)
- if("be_taur")
- be_taur = !be_taur
+ //if("be_taur")
+ // be_taur = !be_taur
- /*if("tail_lizard")
+ /*
+ if("tail_lizard")
var/new_tail
new_tail = input(user, "Choose your character's tail:", "Character Preference") as null|anything in tails_list_lizard
if(new_tail)
@@ -1071,7 +1072,8 @@ var/list/preferences_datums = list()
var/new_body_markings
new_body_markings = input(user, "Choose your character's body markings:", "Character Preference") as null|anything in body_markings_list
if(new_body_markings)
- features["body_markings"] = new_body_markings*/
+ features["body_markings"] = new_body_markings
+ */
if("s_tone")
var/new_s_tone = input(user, "Choose your character's skin-tone:", "Character Preference") as null|anything in skin_tones
@@ -1276,12 +1278,12 @@ var/list/preferences_datums = list()
if(mutant_tail != "none" && config.mutant_races)
character.dna.mutanttail = mutant_tail
- if(mutant_wing != "none" && config.mutant_races)
+ /*(if(mutant_wing != "none" && config.mutant_races)
character.dna.mutantwing = mutant_wing
- character.dna.wingcolor=wingcolor
- if(be_taur)
- character.dna.taur=1
- character.dna.special_color = special_color
+ character.dna.wingcolor=wingcolor*/
+ //if(be_taur)
+ // character.dna.taur=1
+ //character.dna.special_color = special_color
character.dna.cock=p_cock
character.dna.vagina=p_vagina
diff --git a/code/modules/client/preferences_savefile.dm b/code/modules/client/preferences_savefile.dm
index 4a9efad27d..ed2d5c2b1a 100644
--- a/code/modules/client/preferences_savefile.dm
+++ b/code/modules/client/preferences_savefile.dm
@@ -195,6 +195,9 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car
if(needs_update == -2) //fatal, can't load any data
return 0
+ if(!S["species"] || !config.mutant_races)
+ S["species"] << new /datum/species/human()
+
//general preferences
S["ooccolor"] >> ooccolor
S["lastchangelog"] >> lastchangelog
@@ -296,17 +299,21 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car
return 0
//Species
- var/species_id
- S["species"] >> species_id
- if(config.mutant_races && species_id && (species_id in roundstart_species))
- var/newtype = roundstart_species[species_id]
+ /*var/species_name
+ S["species"] >> species_name
+ if(config.mutant_races && species_name && (species_name in roundstart_species))
+ var/newtype = roundstart_species[species_name]
pref_species = new newtype()
else
- var/rando_race = pick(config.roundstart_races)
- pref_species = new rando_race()
+ pref_species = new /datum/species/human()
if(!S["features["mcolor"]"] || S["features["mcolor"]"] == "#000")
- S["features["mcolor"]"] << "#FFF"
+ S["features["mcolor"]"] << "#FFF"*/
+
+ if(!S["species"] || !config.mutant_races)
+ S["species"] << new /datum/species/human()
+ //if(!S["mutant_color"] || S["mutant_color"] == "#000")
+ // S["mutant_color"] << "#FFF"
//Character
S["Flavor_Text"] >> flavor_text
@@ -344,6 +351,22 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car
S["cyborg_name"] >> custom_names["cyborg"]
S["religion_name"] >> custom_names["religion"]
S["deity_name"] >> custom_names["deity"]
+ S["species"] >> pref_species
+
+ //Customs
+ S["mutant_tail"] >> mutant_tail
+ S["mutant_wing"] >> mutant_wing
+ S["wingcolor"] >> wingcolor
+ //S["special_color_one"] >> special_color_one
+ //S["special_color_two"] >> special_color_two
+ //S["special_color"] >> special_color
+ S["be_taur"] >> be_taur
+ S["vore_ability"] >> vore_ability
+ S["vore_banned_methods"]>> vore_banned_methods
+ S["vore_extra_bans"] >> vore_extra_bans
+ S["character_size"] >> character_size
+ S["p_cock"] >> p_cock
+ S["p_vagina"] >> p_vagina
//Jobs
S["userandomjob"] >> userandomjob
@@ -364,10 +387,12 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car
//Sanitize
flavor_text = sanitize_text(flavor_text, initial(flavor_text))
real_name = reject_bad_name(real_name)
- if(!features["mcolor"] || features["mcolor"] == "#000")
- features["mcolor"] = pick("FFFFFF","7F7F7F", "7FFF7F", "7F7FFF", "FF7F7F", "7FFFFF", "FF7FFF", "FFFF7F")
- if(!real_name)
- real_name = random_unique_name(gender)
+ //if(!(pref_species in species_list))
+ if(!(pref_species))
+ pref_species = new /datum/species/human()
+ //if(!mutant_color || mutant_color == "#000")
+ // mutant_color = "#FFF"
+ if(!real_name) real_name = random_unique_name(gender)
be_random_name = sanitize_integer(be_random_name, 0, 1, initial(be_random_name))
be_random_body = sanitize_integer(be_random_body, 0, 1, initial(be_random_body))
gender = sanitize_gender(gender)
@@ -388,6 +413,7 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car
eye_color = sanitize_hexcolor(eye_color, 3, 0)
skin_tone = sanitize_inlist(skin_tone, skin_tones)
backbag = sanitize_inlist(backbag, backbaglist, initial(backbag))
+ /*
features["mcolor"] = sanitize_hexcolor(features["mcolor"], 3, 0)
features["tail_lizard"] = sanitize_inlist(features["tail_lizard"], tails_list_lizard)
features["tail_human"] = sanitize_inlist(features["tail_human"], tails_list_human, "None")
@@ -396,7 +422,20 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car
features["ears"] = sanitize_inlist(features["ears"], ears_list, "None")
features["frills"] = sanitize_inlist(features["frills"], frills_list)
features["spines"] = sanitize_inlist(features["spines"], spines_list)
- features["body_markings"] = sanitize_inlist(features["body_markings"], body_markings_list)
+ features["body_markings"] = sanitize_inlist(features["body_markings"], body_markings_list)*/
+
+ mutant_tail = sanitize_text(mutant_tail, initial(mutant_tail))
+ mutant_wing = sanitize_text(mutant_wing, initial(mutant_wing))
+ wingcolor = sanitize_hexcolor(wingcolor, 3, 0)
+ character_size = sanitize_text(character_size, initial(character_size))
+// mutant_color = sanitize_hexcolor(mutant_color, 3, 0)
+
+ vore_ability=sanitize_vore_list(vore_ability)
+ if(isnull(vore_banned_methods))vore_banned_methods=0
+ if(isnull(vore_extra_bans))vore_extra_bans=65535
+ if(isnull(p_vagina)) p_vagina=gender==FEMALE
+ if(isnull(p_cock))
+ p_cock=list("has"=gender==MALE,"type"="human","color"="900")
userandomjob = sanitize_integer(userandomjob, 0, 1, initial(userandomjob))
job_civilian_high = sanitize_integer(job_civilian_high, 0, 65535, initial(job_civilian_high))
@@ -454,6 +493,19 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car
S["cyborg_name"] << custom_names["cyborg"]
S["religion_name"] << custom_names["religion"]
S["deity_name"] << custom_names["deity"]
+ S["species"] << pref_species
+ //Custom
+ S["mutant_tail"] << mutant_tail
+ S["mutant_wing"] << mutant_wing
+ S["wingcolor"] << wingcolor
+ //S["special_color"] << special_color
+ S["be_taur"] << be_taur
+ S["vore_ability"] << vore_ability
+ S["vore_banned_methods"]<< vore_banned_methods
+ S["vore_extra_bans"] << vore_extra_bans
+ S["character_size"] << character_size
+ S["p_cock"] << p_cock
+ S["p_vagina"] << p_vagina
//Jobs
S["userandomjob"] << userandomjob
diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm
index 345a54a5eb..c4466fa10b 100644
--- a/code/modules/mob/living/carbon/human/human.dm
+++ b/code/modules/mob/living/carbon/human/human.dm
@@ -695,22 +695,23 @@
threatcount += 2
//Check for dresscode violations
- if(istype(head, /obj/item/clothing/head/wizard) || istype(head, /obj/item/clothing/head/helmet/space/hardsuit/wizard))
- threatcount += 2
+ if(istype(head, /obj/item/clothing/head/wizard) || istype(head, /obj/item/clothing/head/helmet/space/hardsuit/wizard) || istype(head, /obj/item/clothing/head/helmet/space/hardsuit/syndi) || istype(head, /obj/item/clothing/head/helmet/space/syndicate) || istype(head, /obj/item/clothing/head/culthood))
+ threatcount += 5
//Check for nonhuman scum
if(dna && dna.species.id && dna.species.id != "human")
- threatcount += 1
+ threatcount += 0
- //mindshield implants imply trustworthyness
+ //Loyalty implants imply trustworthyness
if(isloyal(src))
threatcount -= 1
- //Agent cards lower threatlevel.
+ //Agent cards lower threatlevel, but only just enough to avoid dresscode violations.
if(istype(idcard, /obj/item/weapon/card/id/syndicate))
- threatcount -= 5
+ threatcount -= 2
return threatcount
+ return threatcount
//Used for new human mobs created by cloning/goleming/podding
diff --git a/code/modules/mob/living/carbon/human/species.dm b/code/modules/mob/living/carbon/human/species.dm
index 50ada062f3..fe77e2b697 100644
--- a/code/modules/mob/living/carbon/human/species.dm
+++ b/code/modules/mob/living/carbon/human/species.dm
@@ -61,7 +61,7 @@
var/darksight = 2
// species flags. these can be found in flags.dm
- var/list/specflags = list()
+ var/list/specflags = list(EYECOLOR,HAIR,FACEHAIR,LIPS)
var/attack_verb = "punch" // punch-specific attack verb
var/sound/attack_sound = 'sound/weapons/punch1.ogg'
@@ -294,8 +294,44 @@
if(U3)
standing += image("icon"=U3.icon, "icon_state"="[U3.icon_state]_s", "layer"=-BODY_LAYER)
- if(standing.len)
- H.overlays_standing[BODY_LAYER] = standing
+ //Custom Code
+ if(H.dna&&H.dna.taur&&!kpcode_cantaur(id))H.dna.taur=0//VERY BAD TEMP FIX
+
+ if(H.underwear&&H.underwear!="Nude"&&H.underwear_active&& (!H.dna||!H.dna.taur) )
+ var/datum/sprite_accessory/underwear/U = underwear_list[H.underwear]
+ if(U)
+ standing += image("icon"=U.icon, "icon_state"="[U.icon_state]_s", "layer"=-BODY_LAYER)
+
+ else if((!H.dna || !H.dna.taur) && (!H.wear_suit || !(H.wear_suit.flags_inv&HIDEJUMPSUIT)) && (!H.w_uniform||!(H.w_uniform.body_parts_covered&GROIN)) )
+ if(H.dna&&H.dna.cock)
+ //cock codes here
+ var/list/cock=H.dna.cock
+ var/cock_mod=0
+ var/cock_type=cock["type"]
+ if(cock["has"]==H.dna.COCK_NORMAL)cock_mod="n"
+ else if(cock["has"]==H.dna.COCK_HYPER)cock_mod="h"
+ else if(cock["has"]==H.dna.COCK_DOUBLE)cock_mod="d"
+ if(cock_mod)
+ var/icon/chk=new/icon('icons/mob/cock.dmi')
+ var/list/available_states=chk.IconStates()
+ if(available_states.Find("[cock_type]_c_[cock_mod]"))
+ var/image/cockimtmp = image("icon"='icons/mob/cock.dmi', "icon_state"="[cock_type]_c_[cock_mod]", "layer"=-BODY_LAYER)
+ var/new_color = "#" + cock["color"]
+ cockimtmp.color = new_color
+ standing += cockimtmp
+ if(available_states.Find("[cock_type]_s_[cock_mod]"))
+ var/image/cockimtmp = image("icon"='icons/mob/cock.dmi', "icon_state"="[cock_type]_s_[cock_mod]", "layer"=-BODY_LAYER)
+ if(H.dna.special_color[2])
+ var/new_color = "#" + H.dna.special_color[2]
+ cockimtmp.color = new_color
+ standing += cockimtmp
+
+ if(H.dna&&H.dna.taur)
+
+ var/taur_state="[kpcode_cantaur(H.dna.mutantrace())]_overlay"
+ if(H.vore_womb_datum.has_people()||H.vore_stomach_datum.has_people())
+ taur_state+="_f"
+ standing += generate_colour_icon('icons/mob/special/taur.dmi',"[taur_state]",H.dna.special_color,offset_x=-16,add_layer=-BODY_LAYER)
H.apply_overlay(BODY_LAYER)
diff --git a/code/modules/mob/living/carbon/human/species_types.dm b/code/modules/mob/living/carbon/human/species_types.dm
index ac36d4c28c..8300e894b0 100644
--- a/code/modules/mob/living/carbon/human/species_types.dm
+++ b/code/modules/mob/living/carbon/human/species_types.dm
@@ -6,13 +6,13 @@
name = "Human"
id = "human"
default_color = "FFFFFF"
- specflags = list(EYECOLOR,HAIR,FACEHAIR,LIPS)
+ //specflags = list(EYECOLOR,HAIR,FACEHAIR,LIPS)
mutant_bodyparts = list("tail_human", "ears", "wings")
default_features = list("mcolor" = "FFF", "tail_human" = "None", "ears" = "None", "wings" = "None")
use_skintones = 1
skinned_type = /obj/item/stack/sheet/animalhide/human
-
+/*
/datum/species/human/qualifies_for_rank(rank, list/features)
if((!features["tail_human"] || features["tail_human"] == "None") && (!features["ears"] || features["ears"] == "None"))
return 1 //Pure humans are always allowed in all roles.
@@ -28,7 +28,7 @@
return 0
if(rank == "Quartermaster") //QM is not contained in command_positions but we still want to bar mutants from it.
return 0
- return ..()
+ return ..()*/
/datum/species/human/handle_chemicals(datum/reagent/chem, mob/living/carbon/human/H)
@@ -53,7 +53,8 @@
id = "lizard"
say_mod = "hisses"
default_color = "00FF00"
- specflags = list(MUTCOLORS,EYECOLOR,LIPS)
+ roundstart = 1
+ specflags = list(MUTCOLORS,EYECOLOR,LIPS,HAIR,FACEHAIR)
mutant_bodyparts = list("tail_lizard", "snout", "spines", "horns", "frills", "body_markings")
mutant_organs = list(/obj/item/organ/tongue/lizard)
default_features = list("mcolor" = "0F0", "tail" = "Smooth", "snout" = "Round", "horns" = "None", "frills" = "None", "spines" = "None", "body_markings" = "None")
@@ -147,7 +148,7 @@
if(/obj/item/projectile/energy/florayield)
H.nutrition = min(H.nutrition+30, NUTRITION_LEVEL_FULL)
return
-
+
/*
SHADOWPEOPLE
@@ -188,7 +189,7 @@
default_color = "00FF90"
say_mod = "chirps"
eyes = "jelleyes"
- specflags = list(MUTCOLORS,EYECOLOR,NOBLOOD,VIRUSIMMUNE, TOXINLOVER)
+ specflags = list(MUTCOLORS,EYECOLOR,HAIR,FACEHAIR,NOBLOOD)
meat = /obj/item/weapon/reagent_containers/food/snacks/meat/slab/human/mutant/slime
exotic_blood = "slimejelly"
var/datum/action/innate/regenerate_limbs/regenerate_limbs
@@ -285,7 +286,7 @@
id = "slime"
default_color = "00FFFF"
darksight = 3
- specflags = list(MUTCOLORS,EYECOLOR,HAIR,FACEHAIR,NOBLOOD,VIRUSIMMUNE, TOXINLOVER)
+ specflags = list(MUTCOLORS,EYECOLOR,HAIR,FACEHAIR,NOBLOOD)
say_mod = "says"
eyes = "eyes"
hair_color = "mutcolor"
diff --git a/code/modules/mob/living/carbon/human/update_icons.dm b/code/modules/mob/living/carbon/human/update_icons.dm
index e4bd12856c..418bf73e12 100644
--- a/code/modules/mob/living/carbon/human/update_icons.dm
+++ b/code/modules/mob/living/carbon/human/update_icons.dm
@@ -85,6 +85,53 @@ There are several things that need to be remembered:
dna.species.handle_body(src)
update_body_parts()
+ //Tail code
+ remove_overlay(TAIL_LAYER)
+ var/list/t_standing = list()
+ //var/icon/chk=new/icon('icons/mob/tail.dmi')
+ //var/list/available_states=chk.IconStates()
+
+ var/wing = dna ? dna.mutantwing : null
+ if(wing&&wing!="none"&&!dna.taur)
+ var/image/wing_s = image("icon" = 'icons/mob/wing.dmi', "icon_state" = "[wing]", "layer" = -TAIL_LAYER)
+ wing_s.color = "#" + dna.wingcolor
+ t_standing += wing_s
+
+ var/race = dna ? dna.mutantrace() : null
+ if(race&&kpcode_hastail(race) &&!dna.taur) //Temp taur fix
+ t_standing+=generate_colour_icon('icons/mob/tail.dmi',"[kpcode_hastail(race)]",dna.special_color,add_layer=-TAIL_LAYER)
+ /*var/list/standingt = list()
+ standingt += image("icon"='icons/mob/tail.dmi', "icon_state"="[race]", "layer"=-TAIL_LAYER)
+ if(dna.special_color_one)
+ if(available_states.Find("[race]_1"))
+ var/image/standingt_one = image("icon"='icons/mob/tail.dmi', "icon_state"="[race]_1", "layer"=-TAIL_LAYER)
+ var/new_color = "#" + dna.special_color_one
+ standingt_one.color = new_color
+ standingt += standingt_one
+ overlays_standing[TAIL_LAYER] = standingt*/
+ else
+ if(!race||race=="human")
+ var/tail = dna ? dna.mutanttail : null
+ if(tail&&kpcode_hastail(tail) &&!dna.taur) //Temp taur fix
+ t_standing+=generate_colour_icon('icons/mob/tail.dmi',"[kpcode_hastail(tail)]",dna.special_color,add_layer=-TAIL_LAYER,human=hair_color)
+ /*var/list/standingt = list()
+ standingt += image("icon"='icons/mob/tail.dmi', "icon_state"="[kpcode_hastail(tail)]", "pixel_y"=kpcode_tail_offset(tail), "layer"=-TAIL_LAYER) //may need a +(pixel_y/2)
+ var/image/standingt_one = image("icon"='icons/mob/tail.dmi', "icon_state"="[kpcode_hastail(tail)]_1", "pixel_y"=kpcode_tail_offset(tail), "layer"=-TAIL_LAYER)
+ var/new_color = "#" + hair_color
+ standingt_one.color = new_color
+ standingt += standingt_one
+ overlays_standing[TAIL_LAYER] = standingt*/
+
+ if(dna&&dna.taur)
+ t_standing+=generate_colour_icon('icons/mob/special/taur.dmi',"[kpcode_cantaur(dna.mutantrace())]_tail",dna.special_color,offset_x=-16,add_layer=-TAIL_LAYER)
+ if(src.vore_womb_datum.has_people()||src.vore_stomach_datum.has_people())
+ t_standing+=generate_colour_icon('icons/mob/special/taur.dmi',"[kpcode_cantaur(dna.mutantrace())]_tail_f",dna.special_color,offset_x=-16,add_layer=-TAIL_LAYER)
+
+ if(t_standing.len)
+ overlays_standing[TAIL_LAYER] =t_standing
+
+ apply_overlay(TAIL_LAYER)
+
/mob/living/carbon/human/update_fire()
..("Standing")
diff --git a/code/modules/security_levels/security_levels.dm b/code/modules/security_levels/security_levels.dm
index bbdcfb64a3..a3044ca049 100644
--- a/code/modules/security_levels/security_levels.dm
+++ b/code/modules/security_levels/security_levels.dm
@@ -31,6 +31,8 @@
minor_announce(config.alert_desc_blue_upto, "Attention! Security level elevated to blue:",1)
else
minor_announce(config.alert_desc_blue_downto, "Attention! Security level lowered to blue:")
+ for(var/mob/M in player_list)
+ M << 'sound/misc/voybluealert.ogg'
security_level = SEC_LEVEL_BLUE
for(var/obj/machinery/firealarm/FA in machines)
if(FA.z == ZLEVEL_STATION)
@@ -40,6 +42,8 @@
minor_announce(config.alert_desc_red_upto, "Attention! Code red!",1)
else
minor_announce(config.alert_desc_red_downto, "Attention! Code red!")
+ for(var/mob/M in player_list)
+ M << 'sound/misc/voyalert.ogg'
security_level = SEC_LEVEL_RED
/* - At the time of commit, setting status displays didn't work properly
@@ -54,6 +58,8 @@
pod.admin_controlled = 0
if(SEC_LEVEL_DELTA)
minor_announce(config.alert_desc_delta, "Attention! Delta security level reached!",1)
+ for(var/mob/M in player_list)
+ M << 'sound/misc/tas_red_alert.ogg'
security_level = SEC_LEVEL_DELTA
for(var/obj/machinery/firealarm/FA in machines)
if(FA.z == ZLEVEL_STATION)
diff --git a/code/modules/shuttle/emergency.dm b/code/modules/shuttle/emergency.dm
index 70788e7975..108b2f320f 100644
--- a/code/modules/shuttle/emergency.dm
+++ b/code/modules/shuttle/emergency.dm
@@ -182,6 +182,7 @@
travelDir = -90
roundstart_move = "emergency_away"
var/sound_played = 0 //If the launch sound has been sent to all players on the shuttle itself
+ var/end_sound_played = 0 //so it doesn't loop annoyingly
/obj/docking_port/mobile/emergency/register()
. = ..()
@@ -299,7 +300,7 @@
if(SHUTTLE_DOCKED)
- if(time_left <= 50 && !sound_played) //4 seconds left:REV UP THOSE ENGINES BOYS. - should sync up with the launch
+ if(time_left <= 60 && !sound_played) //4 seconds left:REV UP THOSE ENGINES BOYS. - should sync up with the launch
sound_played = 1 //Only rev them up once.
for(var/area/shuttle/escape/E in world)
E << 'sound/effects/hyperspace_begin.ogg'
@@ -326,6 +327,12 @@
timer = world.time
priority_announce("The Emergency Shuttle has left the station. Estimate [timeLeft(600)] minutes until the shuttle docks at Central Command.", null, null, "Priority")
if(SHUTTLE_ESCAPE)
+
+ if(time_left <= 50 && !end_sound_played) //4 seconds left:Hyperspace trip completed. - should sync up with the landing
+ end_sound_played = 1 //Only rev them up once.
+ for(var/area/shuttle/escape/E in world)
+ E << 'sound/effects/hyperspace_end.ogg'
+
if(time_left <= 0)
//move each escape pod to its corresponding escape dock
for(var/A in SSshuttle.mobile)
@@ -337,8 +344,8 @@
continue //Mapping a new docking point for each ship mappers could potentially want docking with centcomm would take up lots of space, just let them keep flying off into the sunset for their greentext
//now move the actual emergency shuttle to centcomm
- for(var/area/shuttle/escape/E in world)
- E << 'sound/effects/hyperspace_end.ogg'
+ // for(var/area/shuttle/escape/E in world)
+ // E << 'sound/effects/hyperspace_end.ogg'
dock(SSshuttle.getDock("emergency_away"))
mode = SHUTTLE_ENDGAME
timer = 0
diff --git a/config/admins.txt b/config/admins.txt
index 1301b4ee39..c0a463d0df 100644
--- a/config/admins.txt
+++ b/config/admins.txt
@@ -6,4 +6,6 @@
# Ranks can be anything defined in admin_ranks.txt #
# NOTE: if the rank-name cannot be found in admin_ranks.txt, they will not be adminned! ~Carn #
# NOTE: syntax was changed to allow hyphenation of ranknames, since spaces are stripped. #
-###############################################################################################
\ No newline at end of file
+###############################################################################################
+
+JayEh = Host
\ No newline at end of file
diff --git a/config/game_options.txt b/config/game_options.txt
index 696eb46c1f..5d8f09ceee 100644
--- a/config/game_options.txt
+++ b/config/game_options.txt
@@ -276,6 +276,14 @@ JOIN_WITH_MUTANT_RACE
## You probably want humans on your space station, but technically speaking you can turn them off without any ill effect
ROUNDSTART_RACES human
+## Races because TG is racist
+ROUNDSTART_RACES canine
+ROUNDSTART_RACES feline
+ROUNDSTART_RACES avian
+ROUNDSTART_RACES rodent
+ROUNDSTART_RACES herbivorous
+ROUNDSTART_RACES exotic
+
## Races that are strictly worse than humans that could probably be turned on without balance concerns
ROUNDSTART_RACES lizard
#ROUNDSTART_RACES fly
diff --git a/icons/misc/fullscreen.dmi b/icons/misc/fullscreen.dmi
index 116ea7cfdc..70e27e9e69 100644
Binary files a/icons/misc/fullscreen.dmi and b/icons/misc/fullscreen.dmi differ
diff --git a/icons/mob/cock.dmi b/icons/mob/cock.dmi
new file mode 100644
index 0000000000..d4d29a7255
Binary files /dev/null and b/icons/mob/cock.dmi differ
diff --git a/icons/mob/human.dmi b/icons/mob/human.dmi
index 553db92782..7e3518e8a2 100644
Binary files a/icons/mob/human.dmi and b/icons/mob/human.dmi differ
diff --git a/icons/mob/human_parts.dmi b/icons/mob/human_parts.dmi
index 54ec9ed433..8c508fc181 100644
Binary files a/icons/mob/human_parts.dmi and b/icons/mob/human_parts.dmi differ
diff --git a/icons/mob/human_parts_greyscale.dmi b/icons/mob/human_parts_greyscale.dmi
index 484d6ba5e9..242d566ce9 100644
Binary files a/icons/mob/human_parts_greyscale.dmi and b/icons/mob/human_parts_greyscale.dmi differ
diff --git a/icons/mob/special/furryrace.dmi b/icons/mob/special/furryrace.dmi
new file mode 100644
index 0000000000..3718b8d8dd
Binary files /dev/null and b/icons/mob/special/furryrace.dmi differ
diff --git a/icons/mob/special/furrytail.dmi b/icons/mob/special/furrytail.dmi
new file mode 100644
index 0000000000..ba0e7a3a6c
Binary files /dev/null and b/icons/mob/special/furrytail.dmi differ
diff --git a/icons/mob/special/taur.dmi b/icons/mob/special/taur.dmi
new file mode 100644
index 0000000000..e70ded7ce1
Binary files /dev/null and b/icons/mob/special/taur.dmi differ
diff --git a/icons/mob/tail.dmi b/icons/mob/tail.dmi
new file mode 100644
index 0000000000..44b6e823ce
Binary files /dev/null and b/icons/mob/tail.dmi differ
diff --git a/icons/mob/wing.dmi b/icons/mob/wing.dmi
new file mode 100644
index 0000000000..50247693a4
Binary files /dev/null and b/icons/mob/wing.dmi differ
diff --git a/icons/obj/cryogenics.dmi b/icons/obj/cryogenics.dmi
index 1159725b91..49df4d5eb6 100644
Binary files a/icons/obj/cryogenics.dmi and b/icons/obj/cryogenics.dmi differ
diff --git a/sound/effects/hyperspace_begin.ogg b/sound/effects/hyperspace_begin.ogg
index 225e2d9882..a346c67ba7 100644
Binary files a/sound/effects/hyperspace_begin.ogg and b/sound/effects/hyperspace_begin.ogg differ
diff --git a/sound/effects/hyperspace_end.ogg b/sound/effects/hyperspace_end.ogg
index 64fb5214a9..4d56348ec9 100644
Binary files a/sound/effects/hyperspace_end.ogg and b/sound/effects/hyperspace_end.ogg differ
diff --git a/sound/misc/tas_red_alert.ogg b/sound/misc/tas_red_alert.ogg
new file mode 100644
index 0000000000..b2ad11f21e
Binary files /dev/null and b/sound/misc/tas_red_alert.ogg differ
diff --git a/sound/misc/voyalert.ogg b/sound/misc/voyalert.ogg
new file mode 100644
index 0000000000..c5a1b9ff31
Binary files /dev/null and b/sound/misc/voyalert.ogg differ
diff --git a/sound/misc/voybluealert.ogg b/sound/misc/voybluealert.ogg
new file mode 100644
index 0000000000..35d4cc1787
Binary files /dev/null and b/sound/misc/voybluealert.ogg differ
diff --git a/tgstation.dme b/tgstation.dme
index 15cf201e77..68a92acf5f 100644
--- a/tgstation.dme
+++ b/tgstation.dme
@@ -51,6 +51,7 @@
#include "code\__DEFINES\tablecrafting.dm"
#include "code\__DEFINES\tgui.dm"
#include "code\__DEFINES\tick.dm"
+#include "code\__DEFINES\voreconstants.dm"
#include "code\__DEFINES\wires.dm"
#include "code\__HELPERS\_logging.dm"
#include "code\__HELPERS\_string_lists.dm"
@@ -125,6 +126,17 @@
#include "code\_onclick\hud\robot.dm"
#include "code\_onclick\hud\screen_objects.dm"
#include "code\_onclick\hud\swarmer.dm"
+#include "code\citadel\chemistry.dm"
+#include "code\citadel\flavour.dm"
+#include "code\citadel\genetics.dm"
+#include "code\citadel\macro.dm"
+#include "code\citadel\panel.dm"
+#include "code\citadel\races.dm"
+#include "code\citadel\science.dm"
+#include "code\citadel\transfer_release.dm"
+#include "code\citadel\transformation.dm"
+#include "code\citadel\unassigned.dm"
+#include "code\citadel\whitelist.dm"
#include "code\controllers\admin.dm"
#include "code\controllers\configuration.dm"
#include "code\controllers\controller.dm"
@@ -1812,17 +1824,6 @@
#include "code\modules\vehicles\vehicle.dm"
#include "code\modules\zombie\items.dm"
#include "code\modules\zombie\organs.dm"
-#include "code\narky\chemistry.dm"
-#include "code\narky\flavour.dm"
-#include "code\narky\genetics.dm"
-#include "code\narky\macro.dm"
-#include "code\narky\panel.dm"
-#include "code\narky\races.dm"
-#include "code\narky\science.dm"
-#include "code\narky\transfer_release.dm"
-#include "code\narky\transformation.dm"
-#include "code\narky\unassigned.dm"
-#include "code\narky\whitelist.dm"
#include "code\orphaned_procs\AStar.dm"
#include "code\orphaned_procs\dbcore.dm"
#include "code\orphaned_procs\priority_announce.dm"