Merge remote-tracking branch 'refs/remotes/Citadel-Station-13/master'
@@ -71,6 +71,8 @@
|
||||
#define EASYDISMEMBER 20
|
||||
#define EASYLIMBATTACHMENT 21
|
||||
#define TOXINLOVER 22
|
||||
#define MUTCOLORS2 23
|
||||
#define MUTCOLORS3 24
|
||||
|
||||
#define FLYING 65536
|
||||
|
||||
|
||||
@@ -23,24 +23,23 @@
|
||||
#define FRIDAY_13TH "Friday the 13th"
|
||||
|
||||
//Human Overlays Indexes/////////
|
||||
#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 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 HAIR_LAYER 9 //TODO: make part of head layer?
|
||||
#define FACEMASK_LAYER 8
|
||||
#define HEAD_LAYER 7
|
||||
@@ -50,7 +49,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 27 //KEEP THIS UP-TO-DATE OR SHIT WILL BREAK ;_;
|
||||
#define TOTAL_LAYERS 26 //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"
|
||||
@@ -146,6 +145,7 @@
|
||||
|
||||
#define CLICK_CD_MELEE 8
|
||||
#define CLICK_CD_RANGE 4
|
||||
#define CLICK_CD_CLICK_ABILITY 6
|
||||
#define CLICK_CD_BREAKOUT 100
|
||||
#define CLICK_CD_HANDCUFFED 10
|
||||
#define CLICK_CD_RESIST 20
|
||||
@@ -255,6 +255,8 @@
|
||||
#define MAT_URANIUM "$uranium"
|
||||
#define MAT_PLASMA "$plasma"
|
||||
#define MAT_BANANIUM "$bananium"
|
||||
#define MAT_TITANIUM "$titanium"
|
||||
#define MAT_BIOMASS "$biomass"
|
||||
|
||||
|
||||
//check_target_facings() return defines
|
||||
@@ -303,6 +305,9 @@ var/list/bloody_footprints_cache = list()
|
||||
#define POLLTYPE_TEXT "TEXT"
|
||||
#define POLLTYPE_RATING "NUMVAL"
|
||||
#define POLLTYPE_MULTI "MULTICHOICE"
|
||||
#define POLLTYPE_IRV "IRV"
|
||||
|
||||
|
||||
|
||||
//lighting area defines
|
||||
#define DYNAMIC_LIGHTING_DISABLED 0 //dynamic lighting disabled (area stays at full brightness)
|
||||
@@ -313,6 +318,9 @@ var/list/bloody_footprints_cache = list()
|
||||
//subtypesof(), typesof() without the parent path
|
||||
#define subtypesof(typepath) ( typesof(typepath) - typepath )
|
||||
|
||||
//Gets the turf this atom inhabits
|
||||
#define get_turf(A) (get_step(A, 0))
|
||||
|
||||
//Bot types
|
||||
#define SEC_BOT 1 // Secutritrons (Beepsky) and ED-209s
|
||||
#define MULE_BOT 2 // MULEbots
|
||||
@@ -459,3 +467,28 @@ var/global/list/ghost_others_options = list(GHOST_OTHERS_SIMPLE, GHOST_OTHERS_DE
|
||||
#define debug_world(msg) if (Debug2) world << "DEBUG: [msg]"
|
||||
#define debug_admins(msg) if (Debug2) admins << "DEBUG: [msg]"
|
||||
#define debug_world_log(msg) if (Debug2) world.log << "DEBUG: [msg]"
|
||||
|
||||
#define COORD(A) "([A.x],[A.y],[A.z])"
|
||||
#define INCREMENT_TALLY(L, stat) if(L[stat]){L[stat]++}else{L[stat] = 1}
|
||||
|
||||
// Inventory depth: limits how many nested storage items you can access directly.
|
||||
// 1: stuff in mob, 2: stuff in backpack, 3: stuff in box in backpack, etc
|
||||
#define INVENTORY_DEPTH 3
|
||||
#define STORAGE_VIEW_DEPTH 2
|
||||
|
||||
|
||||
|
||||
// Medal names
|
||||
|
||||
#define BOSS_KILL_MEDAL "Killer"
|
||||
|
||||
#define ALL_KILL_MEDAL "Exterminator" //Killing all of x type
|
||||
|
||||
// Score names
|
||||
|
||||
#define LEGION_SCORE "Legion Killed"
|
||||
#define COLOSSUS_SCORE "Colossus Killed"
|
||||
#define BUBBLEGUM_SCORE "Bubblegum Killed"
|
||||
#define DRAKE_SCORE "Drakes Killed"
|
||||
#define BOSS_SCORE "Bosses Killed"
|
||||
#define TENDRIL_CLEAR_SCORE "Tendrils Killed"
|
||||
|
||||
@@ -28,6 +28,7 @@
|
||||
#define CHAT_GHOSTWHISPER 128
|
||||
#define CHAT_GHOSTPDA 256
|
||||
#define CHAT_GHOSTRADIO 512
|
||||
#define CHAT_LOOC 1024
|
||||
|
||||
#define TOGGLES_DEFAULT_CHAT (CHAT_OOC|CHAT_DEAD|CHAT_GHOSTEARS|CHAT_GHOSTSIGHT|CHAT_PRAYER|CHAT_RADIO|CHAT_PULLR|CHAT_GHOSTWHISPER|CHAT_GHOSTPDA|CHAT_GHOSTRADIO)
|
||||
|
||||
|
||||
@@ -28,7 +28,11 @@
|
||||
init_sprite_accessory_subtypes(/datum/sprite_accessory/spines, spines_list)
|
||||
init_sprite_accessory_subtypes(/datum/sprite_accessory/spines_animated, animated_spines_list)
|
||||
init_sprite_accessory_subtypes(/datum/sprite_accessory/wings, r_wings_list,roundstart = TRUE)
|
||||
|
||||
//mammal bodyparts (fucking furries)
|
||||
init_sprite_accessory_subtypes(/datum/sprite_accessory/mam_body_markings, mam_body_markings_list)
|
||||
init_sprite_accessory_subtypes(/datum/sprite_accessory/mam_tails, mam_tails_list)
|
||||
init_sprite_accessory_subtypes(/datum/sprite_accessory/mam_ears, mam_ears_list)
|
||||
init_sprite_accessory_subtypes(/datum/sprite_accessory/mam_tails_animated, mam_tails_animated_list)
|
||||
|
||||
//Species
|
||||
for(var/spath in subtypesof(/datum/species))
|
||||
|
||||
@@ -720,29 +720,16 @@ Turf and target are seperate in case you want to teleport some distance from a t
|
||||
else
|
||||
return zone
|
||||
|
||||
|
||||
//Gets the turf this atom inhabits
|
||||
|
||||
/proc/get_turf(atom/A)
|
||||
if (!istype(A))
|
||||
return
|
||||
for(A, A && !isturf(A), A=A.loc); //semicolon is for the empty statement
|
||||
return A
|
||||
|
||||
|
||||
/*
|
||||
|
||||
Gets the turf this atom's *ICON* appears to inhabit
|
||||
It takes into account:
|
||||
* Pixel_x/y
|
||||
* Matrix x/y
|
||||
|
||||
NOTE: if your atom has non-standard bounds then this proc
|
||||
will handle it, but:
|
||||
* if the bounds are even, then there are an even amount of "middle" turfs, the one to the EAST, NORTH, or BOTH is picked
|
||||
(this may seem bad, but you're atleast as close to the center of the atom as possible, better than byond's default loc being all the way off)
|
||||
* if the bounds are odd, the true middle turf of the atom is returned
|
||||
|
||||
*/
|
||||
|
||||
/proc/get_turf_pixel(atom/movable/AM)
|
||||
@@ -1015,7 +1002,6 @@ var/list/WALLITEMS_INVERSE = list(
|
||||
|
||||
/*
|
||||
rough example of the "cone" made by the 3 dirs checked
|
||||
|
||||
B
|
||||
\
|
||||
\
|
||||
@@ -1031,7 +1017,6 @@ B --><-- A
|
||||
/
|
||||
/
|
||||
B
|
||||
|
||||
*/
|
||||
|
||||
|
||||
@@ -1409,4 +1394,11 @@ proc/pick_closest_path(value)
|
||||
admins_warned = 1
|
||||
spawn(25)
|
||||
message_admins(msg)
|
||||
stack_trace(msg)
|
||||
stack_trace(msg)
|
||||
|
||||
/proc/random_nukecode()
|
||||
var/val = rand(0, 99999)
|
||||
var/str = "[val]"
|
||||
while(length(str) < 5)
|
||||
str = "0" + str
|
||||
. = str
|
||||
@@ -34,6 +34,12 @@ var/global/list/wings_list = list()
|
||||
var/global/list/wings_open_list = list()
|
||||
var/global/list/r_wings_list = list()
|
||||
|
||||
//Mammal Specific Mutant Human Bits
|
||||
var/global/list/mam_body_markings_list = list()
|
||||
var/global/list/mam_ears_list = list()
|
||||
var/global/list/mam_tails_list = list()
|
||||
var/global/list/mam_tails_animated_list = list()
|
||||
|
||||
var/global/list/ghost_forms_with_directions_list = list("ghost") //stores the ghost forms that support directional sprites
|
||||
var/global/list/ghost_forms_with_accessories_list = list("ghost") //stores the ghost forms that support hair and other such things
|
||||
|
||||
|
||||
114
code/citadel/_helpers.dm
Normal file
@@ -0,0 +1,114 @@
|
||||
//THIS FOLDER CONTAINS CONSTANTS, PROCS, DEFINES, AND OTHER THINGS//
|
||||
////////////////////////////////////////////////////////////////////
|
||||
|
||||
var/const/SIZEPLAY_TINY=1
|
||||
var/const/SIZEPLAY_MICRO=2
|
||||
var/const/SIZEPLAY_NORMAL=3
|
||||
var/const/SIZEPLAY_MACRO=4
|
||||
var/const/SIZEPLAY_HUGE=5
|
||||
|
||||
/proc/get_matrix_largest()
|
||||
var/matrix/mtrx=new()
|
||||
return mtrx.Scale(2)
|
||||
/proc/get_matrix_large()
|
||||
var/matrix/mtrx=new()
|
||||
return mtrx.Scale(1.5)
|
||||
/proc/get_matrix_norm()
|
||||
var/matrix/mtrx=new()
|
||||
return mtrx
|
||||
/proc/get_matrix_small()
|
||||
var/matrix/mtrx=new()
|
||||
return mtrx.Scale(0.7)
|
||||
/proc/get_matrix_smallest()
|
||||
var/matrix/mtrx=new()
|
||||
return mtrx.Scale(0.5)
|
||||
|
||||
proc/kpcode_race_getlist(var/restrict=0)
|
||||
var/list/race_options = list()
|
||||
for(var/r_id in species_list)
|
||||
var/datum/species/R = kpcode_race_get(r_id)
|
||||
if(!R.restricted||R.restricted==restrict)
|
||||
race_options[r_id]=kpcode_race_get(r_id)
|
||||
return race_options
|
||||
|
||||
proc/kpcode_race_get(var/name="human")
|
||||
name=kpcode_race_san(name)
|
||||
if(!name||name=="") name="human"
|
||||
if(species_list[name])
|
||||
var/type_to_use=species_list[name]
|
||||
var/datum/species/return_this=new type_to_use()
|
||||
return return_this
|
||||
else
|
||||
return kpcode_race_get()
|
||||
|
||||
proc/kpcode_race_san(var/input)
|
||||
if(!input)input="human"
|
||||
if(istype(input,/datum/species))
|
||||
input=input:id
|
||||
return input
|
||||
|
||||
proc/kpcode_race_restricted(var/name="human")
|
||||
name=kpcode_race_san(name)
|
||||
if(kpcode_race_get(name))
|
||||
var/datum/species/D=kpcode_race_get(name)
|
||||
return D.restricted
|
||||
return 2
|
||||
/*
|
||||
proc/kpcode_race_tail(var/name="human")
|
||||
name=kpcode_race_san(name)
|
||||
if(kpcode_race_get(name))
|
||||
var/datum/species/D=kpcode_race_get(name)
|
||||
return D.tail
|
||||
return 0
|
||||
|
||||
proc/kpcode_race_taur(var/name="human")
|
||||
name=kpcode_race_san(name)
|
||||
if(kpcode_race_get(name))
|
||||
var/datum/species/D=kpcode_race_get(name)
|
||||
if(D.taur==1)
|
||||
return D.id
|
||||
return D.taur
|
||||
return 0
|
||||
|
||||
proc/kpcode_race_generic(var/name="human")
|
||||
name=kpcode_race_san(name)
|
||||
if(kpcode_race_get(name))
|
||||
var/datum/species/D=kpcode_race_get(name)
|
||||
return D.generic
|
||||
return 0
|
||||
|
||||
proc/kpcode_race_adjective(var/name="human")
|
||||
name=kpcode_race_san(name)
|
||||
if(kpcode_race_get(name))
|
||||
var/datum/species/D=kpcode_race_get(name)
|
||||
return D.adjective
|
||||
return 0
|
||||
|
||||
proc/kpcode_get_generic(var/mob/living/M)
|
||||
if(istype(M,/mob/living/carbon/human))
|
||||
if(M:dna)
|
||||
return kpcode_race_generic(M:dna:mutantrace())
|
||||
else
|
||||
return kpcode_race_generic("human")
|
||||
if(istype(M,/mob/living/carbon/monkey))
|
||||
return "monkey"
|
||||
if(istype(M,/mob/living/carbon/alien))
|
||||
return "xeno"
|
||||
if(istype(M,/mob/living/simple_animal))
|
||||
return M.name
|
||||
return "something"
|
||||
|
||||
proc/kpcode_get_adjective(var/mob/living/M)
|
||||
if(istype(M,/mob/living/carbon/human))
|
||||
if(M:dna)
|
||||
return kpcode_race_adjective(M:dna:mutantrace())
|
||||
else
|
||||
return kpcode_race_adjective("human")
|
||||
if(istype(M,/mob/living/carbon/monkey))
|
||||
return "cranky"
|
||||
if(istype(M,/mob/living/carbon/alien))
|
||||
return "alien"
|
||||
if(istype(M,/mob/living/simple_animal))
|
||||
return "beastly"
|
||||
return "something"
|
||||
*/
|
||||
47
code/citadel/organs.dm
Normal file
@@ -0,0 +1,47 @@
|
||||
|
||||
/obj/item/organ/stomach
|
||||
name = "stomach"
|
||||
icon_state = "stomach"
|
||||
zone = "chest"
|
||||
slot = "stomach"
|
||||
w_class = 3
|
||||
|
||||
/obj/item/organ/stomach/prepare_eat()
|
||||
var/obj/S = ..()
|
||||
S.reagents.add_reagent("sacid", 2)
|
||||
return S
|
||||
|
||||
/obj/item/organ/penis
|
||||
name = "penis"
|
||||
icon_state = "penis"
|
||||
zone = "groin"
|
||||
slot = "penis"
|
||||
w_class = 3
|
||||
var/shape = "human"
|
||||
var/size = "normal"
|
||||
var/testicles
|
||||
|
||||
/obj/item/organ/testicles
|
||||
name = "testicles"
|
||||
icon_state = "testicles"
|
||||
zone = "groin"
|
||||
slot = "testicles"
|
||||
w_class = 3
|
||||
var/size = "normal"
|
||||
|
||||
/obj/item/organ/vagina
|
||||
name = "vagina"
|
||||
icon_state = "vagina"
|
||||
zone = "groin"
|
||||
slot = "vagina"
|
||||
w_class = 3
|
||||
var/shape = "human"
|
||||
var/ovaries
|
||||
|
||||
/obj/item/organ/womb
|
||||
name = "womb"
|
||||
icon_state = "womb"
|
||||
zone = "groin"
|
||||
slot = "womb"
|
||||
w_class = 3
|
||||
|
||||
@@ -206,7 +206,7 @@ var/const/VORE_SIZEDIFF_ANY=5
|
||||
owner.nutrition+=400
|
||||
digestion_count+=1
|
||||
//owner.updateappearance
|
||||
owner.update_body()
|
||||
//owner.update_body()
|
||||
continue //hopefully won't break much
|
||||
if(oxygen)
|
||||
M.oxyloss=0//Temp fix
|
||||
@@ -307,7 +307,7 @@ var/const/VORE_SIZEDIFF_ANY=5
|
||||
if(istype(A, /obj/item/weapon/reagent_containers/food/snacks))
|
||||
qdel(A)
|
||||
//owner.updateappearance()
|
||||
owner.update_body()
|
||||
//owner.update_body()
|
||||
return 1
|
||||
|
||||
proc/add(var/mob/living/addit)
|
||||
@@ -322,7 +322,7 @@ var/const/VORE_SIZEDIFF_ANY=5
|
||||
if(M)
|
||||
M.last_organ_in=src
|
||||
//updateappearance(owner)
|
||||
owner.update_body()
|
||||
//owner.update_body()
|
||||
proc/flavour_text(var/source, var/mob/living/prey, var/extra_info=0)
|
||||
if(extra_info==VORE_EXTRA_FULLTOUR&&(remembered_bans&VORE_EXTRA_FULLTOUR))
|
||||
extra_info=0
|
||||
@@ -476,7 +476,7 @@ var/const/VORE_SIZEDIFF_ANY=5
|
||||
mprey.vore_transform_index=0
|
||||
mprey.vore_transfer_index=0
|
||||
//updateappearance(owner)
|
||||
owner.update_body()
|
||||
//owner.update_body()
|
||||
|
||||
/* proc/refresh_list()
|
||||
for(var/mob/living/M in contents)
|
||||
@@ -1336,22 +1336,6 @@ var/const/VORE_SIZEDIFF_ANY=5
|
||||
body_parts_covered = CHEST|GROIN|ARMS
|
||||
fitted = 0
|
||||
|
||||
/obj/item/clothing/under/maid/narky
|
||||
name = "narky outfit"
|
||||
desc = "How cute~"
|
||||
icon_state = "narkymaid"
|
||||
item_state = "narkymaid"
|
||||
item_color = "narkymaid"
|
||||
|
||||
/obj/item/clothing/under/diaper
|
||||
name = "space diaper"
|
||||
desc = "Oh, my."
|
||||
icon_state = "diaper"
|
||||
item_state = "diaper"
|
||||
item_color = "diaper"
|
||||
body_parts_covered = GROIN
|
||||
fitted = 0
|
||||
|
||||
/obj/item/clothing/under/schoolgirl/red
|
||||
icon_state = "schoolgirlred"
|
||||
item_state = "schoolgirlred"
|
||||
@@ -1374,34 +1358,6 @@ var/const/VORE_SIZEDIFF_ANY=5
|
||||
desc = "Foxcom Special Edition"
|
||||
icon_state = "pooj"
|
||||
|
||||
/obj/item/clothing/shoes/sandal/pavi
|
||||
desc = "A pair of rather amazing, purple sandals"
|
||||
name = "pavi sandals"
|
||||
icon_state = "pavi"
|
||||
|
||||
/obj/item/clothing/suit/narkycuff
|
||||
name = "cuffs"
|
||||
desc = "For when a Narky feels stylish or kinky."
|
||||
icon_state = "narkycuff"
|
||||
item_state = "narkycuff"
|
||||
gender=PLURAL
|
||||
body_parts_covered = ARMS
|
||||
allowed = list(/obj/item/weapon/gun/energy/laser/sizeray)
|
||||
|
||||
/obj/item/clothing/shoes/narkyanklet
|
||||
name = "anklets"
|
||||
desc = "For when a Narky wants to tie people to his paws without string."
|
||||
icon_state = "narkyanklet"
|
||||
item_state = "narkyanklet"
|
||||
body_parts_covered = LEGS
|
||||
|
||||
/obj/item/weapon/storage/backpack/kittypack
|
||||
name = "kitty backpack"
|
||||
desc = "Mr. Noodles!"
|
||||
icon_state = "kittypack"
|
||||
item_state = "kittypack"
|
||||
|
||||
|
||||
//Sppoky stuffs!
|
||||
/obj/item/clothing/suit/costume/spooky_spook
|
||||
name = "spooky ghost costume"
|
||||
@@ -1409,60 +1365,6 @@ var/const/VORE_SIZEDIFF_ANY=5
|
||||
icon_state = "spooky_spook"
|
||||
item_state = "spooky_spook"
|
||||
|
||||
/obj/item/clothing/suit/costume/narky_fursuit
|
||||
name = "\improper Narky fursuit"
|
||||
desc = "Dress up like a Narky! Narky is terrified of these."
|
||||
icon_state = "narky_fursuit"
|
||||
item_state = "narky_fursuit"
|
||||
allowed = list(/obj/item/weapon/gun/energy/laser/sizeray)
|
||||
|
||||
/obj/item/clothing/head/costume/narky_fursuit
|
||||
name = "\improper Narky fursuit head"
|
||||
desc = "Dress up like a Narky! Narky is terrified of these."
|
||||
icon_state = "narky_fursuit"
|
||||
|
||||
/obj/item/clothing/suit/costume/clone
|
||||
name = "sharpshooter costume"
|
||||
desc = "Best shot at the academy!"
|
||||
icon_state = "clone"
|
||||
item_state = "clone"
|
||||
|
||||
/obj/item/clothing/head/costume/clone
|
||||
name = "sharpshooter helmet"
|
||||
desc = "Best shot at the academy!"
|
||||
icon_state = "clone"
|
||||
|
||||
/obj/item/clothing/suit/costume/batman
|
||||
name = "\improper Dark West costume"
|
||||
desc = "You're not safe, and neither is this bomb."
|
||||
icon_state = "batman"
|
||||
item_state = "batman"
|
||||
|
||||
/obj/item/clothing/head/costume/batman
|
||||
name = "\improper Dark West mask"
|
||||
desc = "You're not safe, and neither is this bomb."
|
||||
icon_state = "batman"
|
||||
|
||||
/obj/item/clothing/under/costume/spiderman
|
||||
name = "\improper Human Spider costume"
|
||||
desc = "Does whatever he does."
|
||||
icon_state = "spiderman"
|
||||
item_state = "spiderman"
|
||||
item_color = "spiderman"
|
||||
|
||||
/obj/item/clothing/mask/costume/spiderman
|
||||
name = "\improper Human Spider mask"
|
||||
desc = "Does whatever he does."
|
||||
icon_state = "spiderman"
|
||||
item_state = "spiderman"
|
||||
|
||||
/obj/item/clothing/under/costume/zeerust
|
||||
name = "zeerust captain costume"
|
||||
desc = "In a game of chess, you must never let your opponent see your pieces."
|
||||
icon_state = "zeerust"
|
||||
item_state = "zeerust"
|
||||
item_color = "zeerust"
|
||||
|
||||
|
||||
/obj/structure/sign/portrait
|
||||
name = "portrait"
|
||||
@@ -1897,7 +1799,7 @@ var/list/traitor_test_list = null
|
||||
var/mob/living/carbon/human/humz=src
|
||||
humz.underwear_active=!humz.underwear_active
|
||||
//updateappearance(src)
|
||||
src.update_body()
|
||||
//src.update_body()
|
||||
else
|
||||
src<<"Humans only."
|
||||
|
||||
@@ -2106,6 +2008,7 @@ var/list/traitor_test_list = null
|
||||
|
||||
/mob/proc/kpcode_mob_offset()
|
||||
return
|
||||
/*
|
||||
/mob/proc/update_body()
|
||||
if(istype(src,/mob/living/carbon/human))
|
||||
//updateappearance(mutcolor_update=0)
|
||||
@@ -2113,7 +2016,7 @@ var/list/traitor_test_list = null
|
||||
/*if(istype(src,/mob/living/carbon)) //Endless loop for nonhuman mobs. base proc is /human only so nonhumans would get stuck with this being their only option.
|
||||
//updateappearance(mutcolor_update=0)
|
||||
src.update_body()*/
|
||||
|
||||
*/
|
||||
/mob/living/kpcode_mob_offset()
|
||||
if(istype(src,/mob/living/carbon/human))
|
||||
var/mob/living/carbon/human/H=src
|
||||
|
||||
@@ -1,5 +1,3 @@
|
||||
|
||||
/////////////////////////// DNA DATUM
|
||||
/datum/dna
|
||||
var/unique_enzymes
|
||||
var/struc_enzymes
|
||||
@@ -76,51 +74,6 @@
|
||||
L[DNA_FACIAL_HAIR_COLOR_BLOCK] = sanitize_hexcolor(H.facial_hair_color)
|
||||
L[DNA_SKIN_TONE_BLOCK] = construct_block(skin_tones.Find(H.skin_tone), skin_tones.len)
|
||||
L[DNA_EYE_COLOR_BLOCK] = sanitize_hexcolor(H.eye_color)
|
||||
if(H.heterochromia)
|
||||
L[DNA_EYE_COLOR_TWO_BLOCK] = sanitize_hexcolor(H.heterochromia)
|
||||
L[DNA_EYE_COLOR_SWITCH_BLOCK] = construct_block(2,2)
|
||||
else
|
||||
L[DNA_EYE_COLOR_TWO_BLOCK] = sanitize_hexcolor(H.eye_color)
|
||||
L[DNA_EYE_COLOR_SWITCH_BLOCK] = construct_block(1,2)
|
||||
var/colour_switch=0
|
||||
if(special_color[1])
|
||||
L[DNA_COLOR_ONE_BLOCK] = sanitize_hexcolor(special_color[1])
|
||||
colour_switch+=1
|
||||
else
|
||||
L[DNA_COLOR_ONE_BLOCK] = random_string(DNA_BLOCK_SIZE,hex_characters)
|
||||
if(special_color[2])
|
||||
L[DNA_COLOR_TWO_BLOCK] = sanitize_hexcolor(special_color[2])
|
||||
colour_switch+=2
|
||||
else
|
||||
L[DNA_COLOR_TWO_BLOCK] = random_string(DNA_BLOCK_SIZE,hex_characters)
|
||||
if(special_color[3])
|
||||
L[DNA_COLOR_THR_BLOCK] = sanitize_hexcolor(special_color[3])
|
||||
colour_switch+=4
|
||||
else
|
||||
L[DNA_COLOR_THR_BLOCK] = random_string(DNA_BLOCK_SIZE,hex_characters)
|
||||
L[DNA_COLOR_SWITCH_BLOCK] = construct_block(colour_switch+1,DNA_COLOR_SWITCH_MAX+1)
|
||||
/*if(species_list[mutantrace])
|
||||
L[DNA_MUTANTRACE_BLOCK] = construct_block(species_list.Find(mutantrace), species_list.len+1)
|
||||
else
|
||||
L[DNA_MUTANTRACE_BLOCK] = construct_block(species_list.len+1, species_list.len+1)*/
|
||||
L[DNA_MUTANTRACE_BLOCK] = generate_race_block()
|
||||
if(mutant_tails.Find(mutanttail))
|
||||
L[DNA_MUTANTTAIL_BLOCK] = construct_block(mutant_tails.Find(mutanttail), mutant_tails.len+1)
|
||||
else
|
||||
L[DNA_MUTANTTAIL_BLOCK] = construct_block(mutant_tails.len+1, mutant_tails.len+1)
|
||||
if(mutant_wings.Find(mutantwing))
|
||||
L[DNA_MUTANTWING_BLOCK] = construct_block(mutant_wings.Find(mutantwing), mutant_wings.len+1)
|
||||
else
|
||||
L[DNA_MUTANTWING_BLOCK] = construct_block(mutant_wings.len+1, mutant_wings.len+1)
|
||||
L[DNA_WINGCOLOR_BLOCK] = sanitize_hexcolor(wingcolor)
|
||||
L[DNA_TAUR_BLOCK] = construct_block(taur+1, 2)
|
||||
|
||||
var/cock_block=0
|
||||
if(cock["has"])
|
||||
cock_block+=1
|
||||
if(vagina)
|
||||
cock_block+=2
|
||||
L[DNA_COCK_BLOCK] = construct_block(cock_block+1, 4)
|
||||
|
||||
for(var/i=1, i<=DNA_UNI_IDENTITY_BLOCKS, i++)
|
||||
if(L[i])
|
||||
@@ -294,49 +247,6 @@ mob/living/carbon/human/updateappearance(icon_update=1, mutcolor_update=0, mutat
|
||||
eye_color = sanitize_hexcolor(getblock(structure, DNA_EYE_COLOR_BLOCK))
|
||||
facial_hair_style = facial_hair_styles_list[deconstruct_block(getblock(structure, DNA_FACIAL_HAIR_STYLE_BLOCK), facial_hair_styles_list.len)]
|
||||
hair_style = hair_styles_list[deconstruct_block(getblock(structure, DNA_HAIR_STYLE_BLOCK), hair_styles_list.len)]
|
||||
var/mutantrace_c = deconstruct_block(getblock(structure, DNA_MUTANTRACE_BLOCK), species_list.len+1)
|
||||
if(mutantrace_c<=species_list.len && kpcode_race_restricted(species_list[mutantrace_c])!=2)
|
||||
dna.species=kpcode_race_get(species_list[mutantrace_c])
|
||||
var/mutanttail_c = deconstruct_block(getblock(structure, DNA_MUTANTTAIL_BLOCK), mutant_tails.len+1)
|
||||
if(mutanttail_c<=mutant_tails.len)
|
||||
dna.mutanttail=mutant_tails[mutanttail_c]
|
||||
else
|
||||
dna.mutanttail=null
|
||||
var/mutantwing_c = deconstruct_block(getblock(structure, DNA_MUTANTWING_BLOCK), mutant_wings.len+1)
|
||||
if(mutantwing_c<=mutant_wings.len)
|
||||
dna.mutantwing=mutant_wings[mutantwing_c]
|
||||
else
|
||||
dna.mutantwing=null
|
||||
|
||||
dna.wingcolor = sanitize_hexcolor(getblock(structure, DNA_WINGCOLOR_BLOCK))
|
||||
var/colour_switch=deconstruct_block(getblock(structure, DNA_COLOR_SWITCH_BLOCK), DNA_COLOR_SWITCH_MAX+1)
|
||||
colour_switch-=1
|
||||
if(colour_switch&1)
|
||||
dna.special_color[1]=sanitize_hexcolor(getblock(structure, DNA_COLOR_ONE_BLOCK))
|
||||
else
|
||||
dna.special_color[1]=null
|
||||
if(colour_switch&2)
|
||||
dna.special_color[2]=sanitize_hexcolor(getblock(structure, DNA_COLOR_TWO_BLOCK))
|
||||
else
|
||||
dna.special_color[2]=null
|
||||
if(colour_switch&4)
|
||||
dna.special_color[3]=sanitize_hexcolor(getblock(structure, DNA_COLOR_THR_BLOCK))
|
||||
else
|
||||
dna.special_color[3]=null
|
||||
|
||||
var/cock_block=deconstruct_block(getblock(structure, DNA_COCK_BLOCK), 4)
|
||||
cock_block-=1
|
||||
if(!(cock_block&1))
|
||||
dna.cock["has"]=0
|
||||
else if(!dna.cock["has"]&&(cock_block&1))
|
||||
dna.cock["has"]=1
|
||||
|
||||
if(cock_block&2)
|
||||
dna.vagina=1
|
||||
else
|
||||
dna.vagina=0
|
||||
|
||||
dna.taur=deconstruct_block(getblock(structure, DNA_TAUR_BLOCK), 2)-1
|
||||
if(icon_update)
|
||||
update_body()
|
||||
update_hair()
|
||||
@@ -446,4 +356,4 @@ mob/living/carbon/human/updateappearance(icon_update=1, mutcolor_update=0, mutat
|
||||
value = values
|
||||
return value
|
||||
|
||||
/////////////////////////// DNA HELPER-PROCS
|
||||
/////////////////////////// DNA HELPER-PROCS
|
||||
@@ -87,7 +87,7 @@
|
||||
attacktext = "shocks"
|
||||
attack_sound = 'sound/effects/EMPulse.ogg'
|
||||
friendly = "pinches"
|
||||
speed = 0
|
||||
speed = 1
|
||||
faction = list("swarmer")
|
||||
AIStatus = AI_OFF
|
||||
pass_flags = PASSTABLE
|
||||
|
||||
@@ -10,10 +10,13 @@
|
||||
icon_state = "xfloor1"
|
||||
random_icon_states = list("xfloor1", "xfloor2", "xfloor3", "xfloor4", "xfloor5", "xfloor6", "xfloor7")
|
||||
var/list/viruses = list()
|
||||
blood_DNA = list("UNKNOWN DNA" = "X*")
|
||||
blood_DNA = list("UNKNOWN DNA" = "X")
|
||||
bloodiness = MAX_SHOE_BLOODINESS
|
||||
blood_state = BLOOD_STATE_XENO
|
||||
|
||||
/obj/effect/decal/cleanable/xenoblood/can_bloodcrawl_in()
|
||||
return 1
|
||||
|
||||
/obj/effect/decal/cleanable/xenoblood/Destroy()
|
||||
for(var/datum/disease/D in viruses)
|
||||
D.cure(0)
|
||||
@@ -37,6 +40,9 @@
|
||||
/obj/effect/decal/cleanable/xenoblood/xsplatter
|
||||
random_icon_states = list("xgibbl1", "xgibbl2", "xgibbl3", "xgibbl4", "xgibbl5")
|
||||
|
||||
/obj/effect/decal/cleanable/xsplatter/can_bloodcrawl_in()
|
||||
return 1
|
||||
|
||||
/obj/effect/decal/cleanable/xenoblood/xgibs
|
||||
name = "xeno gibs"
|
||||
desc = "Gnarly..."
|
||||
@@ -45,6 +51,10 @@
|
||||
icon_state = "xgib1"
|
||||
random_icon_states = list("xgib1", "xgib2", "xgib3", "xgib4", "xgib5", "xgib6")
|
||||
|
||||
/obj/effect/decal/cleanable/xgibs/can_bloodcrawl_in()
|
||||
return 1
|
||||
|
||||
|
||||
/obj/effect/decal/cleanable/xenoblood/xgibs/ex_act()
|
||||
return
|
||||
|
||||
@@ -66,4 +76,18 @@
|
||||
/obj/effect/decal/cleanable/blood/xtracks
|
||||
icon_state = "xtracks"
|
||||
random_icon_states = null
|
||||
blood_DNA = list("UNKNOWN DNA" = "X*")
|
||||
blood_DNA = list("UNKNOWN DNA" = "X")
|
||||
|
||||
/obj/effect/decal/cleanable/xdrip
|
||||
name = "drips of blood"
|
||||
desc = "It's green."
|
||||
gender = PLURAL
|
||||
icon = 'icons/effects/blood.dmi'
|
||||
icon_state = "1"
|
||||
random_icon_states = list("xdrip1","xdrip2","xdrip3","xdrip4","xdrip5")
|
||||
bloodiness = 0
|
||||
var/drips = 1
|
||||
blood_DNA = list("UNKNOWN DNA" = "X")
|
||||
|
||||
/obj/effect/decal/cleanable/xdrip/can_bloodcrawl_in()
|
||||
return 1
|
||||
@@ -145,6 +145,9 @@
|
||||
walltype = "shuttle"
|
||||
smooth = SMOOTH_FALSE
|
||||
|
||||
/turf/closed/wall/shuttle/proc/update_icon()
|
||||
..()
|
||||
|
||||
/turf/closed/wall/shuttle/smooth
|
||||
name = "wall"
|
||||
icon = 'icons/turf/walls/shuttle_wall.dmi'
|
||||
|
||||
@@ -41,13 +41,6 @@ var/list/preferences_datums = list()
|
||||
var/allow_midround_antag = 1
|
||||
var/preferred_map = null
|
||||
|
||||
//vore code
|
||||
var/mutant_tail = "none"
|
||||
var/mutant_wing = "none"
|
||||
var/wingcolor = "FFF"
|
||||
//var/special_color[COLOUR_LIST_SIZE]
|
||||
//var/special_color_one = null
|
||||
//var/special_color_two = null
|
||||
var/vore_banned_methods = 0
|
||||
var/vore_extra_bans = 65535
|
||||
var/list/vore_ability = list(
|
||||
@@ -83,7 +76,7 @@ var/list/preferences_datums = list()
|
||||
var/skin_tone = "caucasian1" //Skin color
|
||||
var/eye_color = "000" //Eye color
|
||||
var/datum/species/pref_species = new /datum/species/human() //Mutant race
|
||||
var/list/features = list("mcolor" = "FFF", "tail_lizard" = "Smooth", "tail_human" = "None", "snout" = "Round", "horns" = "None", "ears" = "None", "wings" = "None", "frills" = "None", "spines" = "None", "body_markings" = "None")
|
||||
var/list/features = list("mcolor" = "FFF","mcolor2" = "FFF","mcolor3" = "FFF", "tail_lizard" = "Smooth", "tail_human" = "None", "snout" = "Round", "horns" = "None", "ears" = "None", "wings" = "None", "frills" = "None", "spines" = "None", "body_markings" = "None", "mam_body_markings" = "None", "mam_ears" = "None", "mam_tail" = "None", "mam_tail_animated" = "None")
|
||||
|
||||
var/list/custom_names = list("clown", "mime", "ai", "cyborg", "religion", "deity")
|
||||
//Mob preview
|
||||
@@ -211,23 +204,7 @@ var/list/preferences_datums = list()
|
||||
|
||||
if(config.mutant_races)
|
||||
dat += "<b>Species:</b><BR><a href='?_src_=prefs;preference=species;task=input'>[pref_species.id]</a><BR>"
|
||||
dat += "<b>Human Tail:</b><a href='?_src_=prefs;preference=mutant_tail;task=input'>[mutant_tail]</a><BR>"
|
||||
dat += "<b>Taur:</b><a href='?_src_=prefs;preference=be_taur;task=input'>[be_taur ? "Yes" : "No"]</a>"
|
||||
if(!kpcode_cantaur(pref_species.id))
|
||||
dat += " (not available for [pref_species.id])"
|
||||
dat += "<BR>"
|
||||
/*if(special_color[1])
|
||||
dat += "<span style='border:1px solid #161616; background-color: #[special_color[1]];'> </span> <a href='?_src_=prefs;preference=special_color;which=1;task=input'>Primary</a><BR>"
|
||||
else
|
||||
dat += "<a href='?_src_=prefs;preference=special_color;which=1;task=input'>Primary?</a><BR>"
|
||||
if(special_color[2])
|
||||
dat += "<span style='border:1px solid #161616; background-color: #[special_color[2]];'> </span> <a href='?_src_=prefs;preference=special_color;which=2;task=input'>Secondary</a><BR>"
|
||||
else
|
||||
dat += "<a href='?_src_=prefs;preference=special_color;which=2;task=input'>Secondary?</a><BR>"
|
||||
if(special_color[3])
|
||||
dat += "<span style='border:1px solid #161616; background-color: #[special_color[3]];'> </span> <a href='?_src_=prefs;preference=special_color;which=3;task=input'>Tertiary</a><BR>"
|
||||
else
|
||||
dat += "<a href='?_src_=prefs;preference=special_color;which=3;task=input'>Tertiary?</a><BR>"*/
|
||||
else
|
||||
dat += "<b>Species:</b> Human<BR>"
|
||||
|
||||
@@ -236,13 +213,7 @@ var/list/preferences_datums = list()
|
||||
dat += "<b>Socks:</b><BR><a href ='?_src_=prefs;preference=socks;task=input'>[socks]</a><BR>"
|
||||
dat += "<b>Backpack:</b><BR><a href ='?_src_=prefs;preference=bag;task=input'>[backbag]</a><BR></td>"
|
||||
|
||||
dat += "<b>Size:</b> <a href='?_src_=prefs;preference=character_size;task=input'>[character_size]</a><BR>"
|
||||
dat += "<b>Vore Preferences:</b> <a href='?_src_=prefs;preference=vore_panel;task=input'>Open</a><BR>"
|
||||
/*dat += "<h3>Wings</h3>"
|
||||
|
||||
dat += "<a href='?_src_=prefs;preference=mutant_wing;task=input'>[mutant_wing]</a><BR>"
|
||||
dat += "<span style='border: 1px solid #161616; background-color: #[wingcolor];'> </span> <a href='?_src_=prefs;preference=wingcolor;task=input'>Change</a><BR>"*/
|
||||
|
||||
// dat += "<b>Size:</b> <a href='?_src_=prefs;preference=character_size;task=input'>[character_size]</a><BR>"
|
||||
dat += "<a href='byond://?src=\ref[user];preference=flavor_text;task=input'><b>Set Flavor Text</b></a><br>"
|
||||
if(lentext(flavor_text) <= 40)
|
||||
if(!lentext(flavor_text))
|
||||
@@ -294,18 +265,22 @@ var/list/preferences_datums = list()
|
||||
|
||||
dat += "</td>"
|
||||
|
||||
/*if(config.mutant_races) //We don't allow mutant bodyparts for humans either unless this is true.
|
||||
if(config.mutant_races) //We don't allow mutant bodyparts for humans either unless this is true.
|
||||
|
||||
if((MUTCOLORS in pref_species.specflags) || (MUTCOLORS_PARTSONLY in pref_species.specflags))
|
||||
|
||||
dat += "<td valign='top' width='21%'>"
|
||||
|
||||
dat += "<h3>Alien/Mutant Color</h3>"
|
||||
dat += "<h3>Alien/Mutant Colors</h3>"
|
||||
|
||||
dat += "<span style='border: 1px solid #161616; background-color: #[features["mcolor"]];'> </span> <a href='?_src_=prefs;preference=mutant_color;task=input'>Change</a><BR>"
|
||||
|
||||
dat += "</td>"
|
||||
dat += "<span style='border: 1px solid #161616; background-color: #[features["mcolor2"]];'> </span> <a href='?_src_=prefs;preference=mutant_color2;task=input'>Change</a><BR>"
|
||||
|
||||
dat += "<span style='border: 1px solid #161616; background-color: #[features["mcolor3"]];'> </span> <a href='?_src_=prefs;preference=mutant_color3;task=input'>Change</a><BR>"
|
||||
|
||||
dat += "</td>"
|
||||
//lizard bodyparts
|
||||
if("tail_lizard" in pref_species.mutant_bodyparts)
|
||||
dat += "<td valign='top' width='7%'>"
|
||||
|
||||
@@ -358,6 +333,33 @@ var/list/preferences_datums = list()
|
||||
|
||||
dat += "<a href='?_src_=prefs;preference=body_markings;task=input'>[features["body_markings"]]</a><BR>"
|
||||
|
||||
dat += "</td>"
|
||||
//mammal bodyparts
|
||||
if("mam_body_markings" in pref_species.mutant_bodyparts)
|
||||
dat += "<td valign='top' width='7%'>"
|
||||
|
||||
dat += "<h3>Mammal Body Markings</h3>"
|
||||
|
||||
dat += "<a href='?_src_=prefs;preference=mam_body_markings;task=input'>[features["mam_body_markings"]]</a><BR>"
|
||||
|
||||
dat += "</td>"
|
||||
|
||||
if("mam_tail" in pref_species.mutant_bodyparts)
|
||||
dat += "<td valign='top' width='7%'>"
|
||||
|
||||
dat += "<h3>Tail</h3>"
|
||||
|
||||
dat += "<a href='?_src_=prefs;preference=mam_tail;task=input'>[features["mam_tail"]]</a><BR>"
|
||||
|
||||
dat += "</td>"
|
||||
|
||||
if("mam_ears" in pref_species.mutant_bodyparts)
|
||||
dat += "<td valign='top' width='7%'>"
|
||||
|
||||
dat += "<h3>Ears</h3>"
|
||||
|
||||
dat += "<a href='?_src_=prefs;preference=mam_ears;task=input'>[features["mam_ears"]]</a><BR>"
|
||||
|
||||
dat += "</td>"
|
||||
|
||||
if(config.mutant_humans)
|
||||
@@ -387,7 +389,7 @@ var/list/preferences_datums = list()
|
||||
|
||||
dat += "<a href='?_src_=prefs;preference=wings;task=input'>[features["wings"]]</a><BR>"
|
||||
|
||||
dat += "</td>"*/
|
||||
dat += "</td>"
|
||||
|
||||
dat += "</tr></table>"
|
||||
|
||||
@@ -968,63 +970,54 @@ var/list/preferences_datums = list()
|
||||
eye_color = sanitize_hexcolor(new_eyes)
|
||||
|
||||
if("species")
|
||||
var/result = input(user, "Select a species", "Species Selection") as null|anything in kpcode_race_getlist(user.ckey)
|
||||
|
||||
var/result = input(user, "Select a species", "Species Selection") as null|anything in roundstart_species
|
||||
|
||||
if(result)
|
||||
var/newtype = species_list[result]
|
||||
var/newtype = roundstart_species[result]
|
||||
pref_species = new newtype()
|
||||
//if(mutant_color == "#000")
|
||||
// mutant_color = pref_species.default_color
|
||||
//Now that we changed our species, we must verify that the mutant colour is still allowed.
|
||||
var/temp_hsv = RGBtoHSV(features["mcolor"])
|
||||
if(features["mcolor"] == "#000" || (!(MUTCOLORS_PARTSONLY in pref_species.specflags) && ReadHSV(temp_hsv)[3] < ReadHSV("#7F7F7F")[3]))
|
||||
features["mcolor"] = pref_species.default_color
|
||||
if(features["mcolor2"] == "#000" || (!(MUTCOLORS_PARTSONLY in pref_species.specflags) && ReadHSV(temp_hsv)[3] < ReadHSV("#7F7F7F")[3]))
|
||||
features["mcolor2"] = pref_species.default_color
|
||||
if(features["mcolor3"] == "#000" || (!(MUTCOLORS_PARTSONLY in pref_species.specflags) && ReadHSV(temp_hsv)[3] < ReadHSV("#7F7F7F")[3]))
|
||||
features["mcolor3"] = pref_species.default_color
|
||||
|
||||
if("mutant_color")
|
||||
var/new_mutantcolor = input(user, "Choose your character's alien/mutant color:", "Character Preference") as color|null
|
||||
var/new_mutantcolor = input(user, "Choose your character's primary alien/mutant color:", "Character Preference") as color|null
|
||||
if(new_mutantcolor)
|
||||
var/temp_hsv = RGBtoHSV(new_mutantcolor)
|
||||
if(new_mutantcolor == "#000000")
|
||||
features["mcolor"] = pref_species.default_color
|
||||
else if((MUTCOLORS_PARTSONLY in pref_species.specflags) || ReadHSV(temp_hsv)[3] >= ReadHSV("#7F7F7F")[3]) // mutantcolors must be bright, but only if they affect the skin
|
||||
else if((MUTCOLORS_PARTSONLY in pref_species.specflags) || ReadHSV(temp_hsv)[3] >= ReadHSV("#202020")[3]) // mutantcolors must be bright, but only if they affect the skin
|
||||
features["mcolor"] = sanitize_hexcolor(new_mutantcolor)
|
||||
else
|
||||
user << "<span class='danger'>Invalid color. Your color is not bright enough.</span>"
|
||||
|
||||
if("mutant_tail")
|
||||
var/new_mutant_tail = input(user, "Choose your character's tail for when they are human:", "Character Preference") as null|anything in mutant_tails
|
||||
if(new_mutant_tail)
|
||||
mutant_tail = new_mutant_tail
|
||||
if("mutant_color2")
|
||||
var/new_mutantcolor = input(user, "Choose your character's secondary alien/mutant color:", "Character Preference") as color|null
|
||||
if(new_mutantcolor)
|
||||
var/temp_hsv = RGBtoHSV(new_mutantcolor)
|
||||
if(new_mutantcolor == "#000000")
|
||||
features["mcolor2"] = pref_species.default_color
|
||||
else if((MUTCOLORS_PARTSONLY in pref_species.specflags) || ReadHSV(temp_hsv)[3] >= ReadHSV("#202020")[3]) // mutantcolors must be bright, but only if they affect the skin
|
||||
features["mcolor2"] = sanitize_hexcolor(new_mutantcolor)
|
||||
else
|
||||
user << "<span class='danger'>Invalid color. Your color is not bright enough.</span>"
|
||||
|
||||
if("mutant_wing")
|
||||
var/new_mutant_wing = input(user, "Choose your character's wings:", "Character Preference") as null|anything in mutant_wings
|
||||
if(new_mutant_wing)
|
||||
mutant_wing = new_mutant_wing
|
||||
if("mutant_color3")
|
||||
var/new_mutantcolor = input(user, "Choose your character's tertiary alien/mutant color:", "Character Preference") as color|null
|
||||
if(new_mutantcolor)
|
||||
var/temp_hsv = RGBtoHSV(new_mutantcolor)
|
||||
if(new_mutantcolor == "#000000")
|
||||
features["mcolor3"] = pref_species.default_color
|
||||
else if((MUTCOLORS_PARTSONLY in pref_species.specflags) || ReadHSV(temp_hsv)[3] >= ReadHSV("#202020")[3]) // mutantcolors must be bright, but only if they affect the skin
|
||||
features["mcolor3"] = sanitize_hexcolor(new_mutantcolor)
|
||||
else
|
||||
user << "<span class='danger'>Invalid color. Your color is not bright enough.</span>"
|
||||
|
||||
if("wingcolor")
|
||||
var/new_wingcolor = input(user, "Choose your character's wing colour:", "Character Preference") as color|null
|
||||
if(new_wingcolor)
|
||||
wingcolor = sanitize_hexcolor(new_wingcolor)
|
||||
|
||||
/*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")
|
||||
var/new_color = input(user, "Choose colour #[index_tc]:", "Character Preference") as null|color
|
||||
if(new_color)
|
||||
special_color[text2num(index_tc)] = sanitize_hexcolor(new_color)
|
||||
if("No")
|
||||
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")
|
||||
if(new_size)
|
||||
character_size=new_size
|
||||
|
||||
if("vore_panel")
|
||||
var/obj/vore_preferences/VP=new()
|
||||
VP.target=src
|
||||
VP.ShowChoices(user)
|
||||
|
||||
if("be_taur")
|
||||
be_taur = !be_taur
|
||||
|
||||
/*
|
||||
if("tail_lizard")
|
||||
var/new_tail
|
||||
new_tail = input(user, "Choose your character's tail:", "Character Preference") as null|anything in tails_list_lizard
|
||||
@@ -1037,6 +1030,12 @@ var/list/preferences_datums = list()
|
||||
if(new_tail)
|
||||
features["tail_human"] = new_tail
|
||||
|
||||
if("mam_tail")
|
||||
var/new_tail
|
||||
new_tail = input(user, "Choose your character's tail:", "Character Preference") as null|anything in mam_tails_list
|
||||
if(new_tail)
|
||||
features["mam_tail"] = new_tail
|
||||
|
||||
if("snout")
|
||||
var/new_snout
|
||||
new_snout = input(user, "Choose your character's snout:", "Character Preference") as null|anything in snouts_list
|
||||
@@ -1049,6 +1048,12 @@ var/list/preferences_datums = list()
|
||||
if(new_horns)
|
||||
features["horns"] = new_horns
|
||||
|
||||
if("mam_ears")
|
||||
var/new_ears
|
||||
new_ears = input(user, "Choose your character's ears:", "Character Preference") as null|anything in mam_ears_list
|
||||
if(new_ears)
|
||||
features["mam_ears"] = new_ears
|
||||
|
||||
if("ears")
|
||||
var/new_ears
|
||||
new_ears = input(user, "Choose your character's ears:", "Character Preference") as null|anything in ears_list
|
||||
@@ -1078,7 +1083,12 @@ var/list/preferences_datums = list()
|
||||
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
|
||||
*/
|
||||
|
||||
if("mam_body_markings")
|
||||
var/new_mam_body_markings
|
||||
new_mam_body_markings = input(user, "Choose your character's body markings:", "Character Preference") as null|anything in mam_body_markings_list
|
||||
if(new_mam_body_markings)
|
||||
features["mam_body_markings"] = new_mam_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
|
||||
@@ -1086,7 +1096,7 @@ var/list/preferences_datums = list()
|
||||
skin_tone = new_s_tone
|
||||
|
||||
if("ooccolor")
|
||||
var/new_ooccolor = input(user, "Choose your OOC colour:", "Game Preference") as color|null
|
||||
var/new_ooccolor = input(user, "Choose your OOC color:", "Game Preference") as color|null
|
||||
if(new_ooccolor)
|
||||
ooccolor = sanitize_ooccolor(new_ooccolor)
|
||||
|
||||
@@ -1281,30 +1291,6 @@ var/list/preferences_datums = list()
|
||||
character.gender = gender
|
||||
character.age = age
|
||||
|
||||
if(mutant_tail != "none" && config.mutant_races)
|
||||
character.dna.mutanttail = mutant_tail
|
||||
/*(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.cock=p_cock
|
||||
character.dna.vagina=p_vagina
|
||||
|
||||
character.vore_banned_methods=vore_banned_methods
|
||||
character.vore_extra_bans=vore_extra_bans
|
||||
character.vore_ability=vore_ability
|
||||
if(character_size!="normal")
|
||||
if(character_size=="small")
|
||||
character.sizeplay_set(SIZEPLAY_MICRO)
|
||||
else if(character_size=="tiny")
|
||||
character.sizeplay_set(SIZEPLAY_TINY)
|
||||
else if(character_size=="large")
|
||||
character.sizeplay_set(SIZEPLAY_MACRO)
|
||||
else
|
||||
character.sizeplay_set(SIZEPLAY_HUGE)
|
||||
|
||||
character.eye_color = eye_color
|
||||
character.hair_color = hair_color
|
||||
character.facial_hair_color = facial_hair_color
|
||||
@@ -1330,4 +1316,4 @@ var/list/preferences_datums = list()
|
||||
if(icon_updates)
|
||||
character.update_body()
|
||||
character.update_hair()
|
||||
character.update_body_parts()
|
||||
character.update_body_parts()
|
||||
@@ -1,4 +1,4 @@
|
||||
//This is the lowest supported version, anything below this is completely obsolete and the entire savefile will be wiped.
|
||||
//This is the lowest supported version, anything below this is completely obsolete and the entire savefile will be wiped.
|
||||
#define SAVEFILE_VERSION_MIN 8
|
||||
|
||||
//This is the current version, anything below this will attempt to update (if it's not obsolete)
|
||||
@@ -8,14 +8,11 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car
|
||||
This proc checks if the current directory of the savefile S needs updating
|
||||
It is to be used by the load_character and load_preferences procs.
|
||||
(S.cd=="/" is preferences, S.cd=="/character[integer]" is a character slot, etc)
|
||||
|
||||
if the current directory's version is below SAVEFILE_VERSION_MIN it will simply wipe everything in that directory
|
||||
(if we're at root "/" then it'll just wipe the entire savefile, for instance.)
|
||||
|
||||
if its version is below SAVEFILE_VERSION_MAX but above the minimum, it will load data but later call the
|
||||
respective update_preferences() or update_character() proc.
|
||||
Those procs allow coders to specify format changes so users do not lose their setups and have to redo them again.
|
||||
|
||||
Failing all that, the standard sanity checks are performed. They simply check the data is suitable, reverting to
|
||||
initial() values if necessary.
|
||||
*/
|
||||
@@ -195,9 +192,6 @@ 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
|
||||
@@ -299,46 +293,52 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car
|
||||
return 0
|
||||
|
||||
//Species
|
||||
/*var/species_name
|
||||
S["species"] >> species_name
|
||||
if(config.mutant_races && species_name && (species_name in roundstart_species))
|
||||
var/newtype = roundstart_species[species_name]
|
||||
var/species_id
|
||||
S["species"] >> species_id
|
||||
if(config.mutant_races && species_id && (species_id in roundstart_species))
|
||||
var/newtype = roundstart_species[species_id]
|
||||
pref_species = new newtype()
|
||||
else
|
||||
pref_species = new /datum/species/human()
|
||||
var/rando_race = pick(config.roundstart_races)
|
||||
pref_species = new rando_race()
|
||||
|
||||
if(!S["features["mcolor"]"] || S["features["mcolor"]"] == "#000")
|
||||
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"
|
||||
S["features["mcolor"]"] << "#FFF"
|
||||
if(!S["features["mcolor2"]"] || S["features["mcolor2"]"] == "#000")
|
||||
S["features["mcolor2"]"] << "#FFF"
|
||||
if(!S["features["mcolor3"]"] || S["features["mcolor3"]"] == "#000")
|
||||
S["features["mcolor3"]"] << "#FFF"
|
||||
|
||||
//Character
|
||||
S["Flavor_Text"] >> flavor_text
|
||||
S["real_name"] >> real_name
|
||||
S["name_is_always_random"] >> be_random_name
|
||||
S["body_is_always_random"] >> be_random_body
|
||||
S["gender"] >> gender
|
||||
S["age"] >> age
|
||||
S["hair_color"] >> hair_color
|
||||
S["facial_hair_color"] >> facial_hair_color
|
||||
S["eye_color"] >> eye_color
|
||||
S["skin_tone"] >> skin_tone
|
||||
S["hair_style_name"] >> hair_style
|
||||
S["facial_style_name"] >> facial_hair_style
|
||||
S["underwear"] >> underwear
|
||||
S["undershirt"] >> undershirt
|
||||
S["socks"] >> socks
|
||||
S["backbag"] >> backbag
|
||||
S["Flavor_Text"] >> flavor_text
|
||||
S["real_name"] >> real_name
|
||||
S["name_is_always_random"] >> be_random_name
|
||||
S["body_is_always_random"] >> be_random_body
|
||||
S["gender"] >> gender
|
||||
S["age"] >> age
|
||||
S["hair_color"] >> hair_color
|
||||
S["facial_hair_color"] >> facial_hair_color
|
||||
S["eye_color"] >> eye_color
|
||||
S["skin_tone"] >> skin_tone
|
||||
S["hair_style_name"] >> hair_style
|
||||
S["facial_style_name"] >> facial_hair_style
|
||||
S["underwear"] >> underwear
|
||||
S["undershirt"] >> undershirt
|
||||
S["socks"] >> socks
|
||||
S["backbag"] >> backbag
|
||||
S["feature_mcolor"] >> features["mcolor"]
|
||||
S["feature_mcolor2"] >> features["mcolor2"]
|
||||
S["feature_mcolor3"] >> features["mcolor3"]
|
||||
S["feature_lizard_tail"] >> features["tail_lizard"]
|
||||
S["feature_lizard_snout"] >> features["snout"]
|
||||
S["feature_lizard_horns"] >> features["horns"]
|
||||
S["feature_lizard_frills"] >> features["frills"]
|
||||
S["feature_lizard_spines"] >> features["spines"]
|
||||
S["feature_lizard_body_markings"] >> features["body_markings"]
|
||||
S["feature_mam_body_markings"] >> features["mam_body_markings"]
|
||||
S["feature_mam_tail"] >> features["mam_tail"]
|
||||
S["feature_mam_ears"] >> features["mam_ears"]
|
||||
S["feature_mam_tail_animated"] >> features["mam_tail_animated"]
|
||||
if(!config.mutant_humans)
|
||||
features["tail_human"] = "none"
|
||||
features["ears"] = "none"
|
||||
@@ -351,22 +351,6 @@ 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
|
||||
@@ -387,12 +371,14 @@ 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(!(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)
|
||||
if(!features["mcolor"] || features["mcolor"] == "#000")
|
||||
features["mcolor"] = pick("FFFFFF","7F7F7F", "7FFF7F", "7F7FFF", "FF7F7F", "7FFFFF", "FF7FFF", "FFFF7F")
|
||||
if(!features["mcolor2"] || features["mcolor"] == "#000")
|
||||
features["mcolor2"] = pick("FFFFFF","7F7F7F", "7FFF7F", "7F7FFF", "FF7F7F", "7FFFFF", "FF7FFF", "FFFF7F")
|
||||
if(!features["mcolor3"] || features["mcolor"] == "#000")
|
||||
features["mcolor3"] = pick("FFFFFF","7F7F7F", "7FFF7F", "7F7FFF", "FF7F7F", "7FFFFF", "FF7FFF", "FFFF7F")
|
||||
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)
|
||||
@@ -413,8 +399,9 @@ 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["mcolor2"] = sanitize_hexcolor(features["mcolor2"], 3, 0)
|
||||
features["mcolor3"] = sanitize_hexcolor(features["mcolor3"], 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")
|
||||
features["snout"] = sanitize_inlist(features["snout"], snouts_list)
|
||||
@@ -422,20 +409,10 @@ 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)*/
|
||||
|
||||
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")
|
||||
features["body_markings"] = sanitize_inlist(features["body_markings"], body_markings_list)
|
||||
features["mam_body_markings"] = sanitize_inlist(features["mam_body_markings"], mam_body_markings_list)
|
||||
features["mam_ears"] = sanitize_inlist(features["mam_ears"], mam_ears_list)
|
||||
features["mam_tail"] = sanitize_inlist(features["mam_tail"], mam_tails_list)
|
||||
|
||||
userandomjob = sanitize_integer(userandomjob, 0, 1, initial(userandomjob))
|
||||
job_civilian_high = sanitize_integer(job_civilian_high, 0, 65535, initial(job_civilian_high))
|
||||
@@ -461,7 +438,7 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car
|
||||
S["version"] << SAVEFILE_VERSION_MAX //load_character will sanitize any bad data, so assume up-to-date.
|
||||
|
||||
//Character
|
||||
S["Flavor_Text"] << flavor_text
|
||||
S["Flavor_Text"] >> flavor_text
|
||||
S["real_name"] << real_name
|
||||
S["name_is_always_random"] << be_random_name
|
||||
S["body_is_always_random"] << be_random_body
|
||||
@@ -487,25 +464,16 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car
|
||||
S["feature_lizard_frills"] << features["frills"]
|
||||
S["feature_lizard_spines"] << features["spines"]
|
||||
S["feature_lizard_body_markings"] << features["body_markings"]
|
||||
S["feature_mam_body_markings"] << features["mam_body_markings"]
|
||||
S["feature_mam_tail"] << features["mam_tail"]
|
||||
S["feature_mam_ears"] << features["mam_ears"]
|
||||
S["feature_mam_tail_animated"] << features["mam_tail_animated"]
|
||||
S["clown_name"] << custom_names["clown"]
|
||||
S["mime_name"] << custom_names["mime"]
|
||||
S["ai_name"] << custom_names["ai"]
|
||||
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
|
||||
@@ -535,4 +503,4 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car
|
||||
/client/verb/savefile_import(path as text)
|
||||
var/savefile/S = new /savefile(path)
|
||||
S.ImportText("/",file("[path].txt"))
|
||||
*/
|
||||
*/
|
||||
@@ -216,37 +216,64 @@
|
||||
return list("O-", "O+")
|
||||
if("L")
|
||||
return list("L")
|
||||
if("X")
|
||||
return list("X")
|
||||
|
||||
//to add a splatter of blood or other mob liquid.
|
||||
/mob/living/proc/add_splatter_floor(turf/T, small_drip)
|
||||
if(get_blood_id() != "blood")
|
||||
if(get_blood_id() != "blood" && get_blood_id() != "xblood")
|
||||
return
|
||||
if(!T)
|
||||
T = get_turf(src)
|
||||
|
||||
var/list/temp_blood_DNA
|
||||
if(small_drip)
|
||||
// Only a certain number of drips (or one large splatter) can be on a given turf.
|
||||
var/obj/effect/decal/cleanable/blood/drip/drop = locate() in T
|
||||
if(drop)
|
||||
if(drop.drips < 3)
|
||||
drop.drips++
|
||||
drop.overlays |= pick(drop.random_icon_states)
|
||||
if(ishuman(src))
|
||||
var/mob/living/carbon/human/H = src
|
||||
if(H.dna.species.id == "xeno")
|
||||
var/obj/effect/decal/cleanable/xdrip/xdrop = locate() in T
|
||||
if(xdrop)
|
||||
if(xdrop.drips < 3)
|
||||
xdrop.drips++
|
||||
xdrop.overlays |= pick(xdrop.random_icon_states)
|
||||
xdrop.transfer_mob_blood_dna(src)
|
||||
return
|
||||
else
|
||||
temp_blood_DNA = list()
|
||||
temp_blood_DNA |= xdrop.blood_DNA.Copy()
|
||||
qdel(xdrop)//the drip is replaced by a bigger splatter
|
||||
else
|
||||
xdrop = new(T)
|
||||
xdrop.transfer_mob_blood_dna(src)
|
||||
return
|
||||
else
|
||||
var/obj/effect/decal/cleanable/blood/drip/drop = locate() in T
|
||||
if(drop)
|
||||
if(drop.drips < 3)
|
||||
drop.drips++
|
||||
drop.overlays |= pick(drop.random_icon_states)
|
||||
drop.transfer_mob_blood_dna(src)
|
||||
return
|
||||
else
|
||||
temp_blood_DNA = list()
|
||||
temp_blood_DNA |= drop.blood_DNA.Copy() //we transfer the dna from the drip to the splatter
|
||||
qdel(drop)//the drip is replaced by a bigger splatter
|
||||
else
|
||||
drop = new(T)
|
||||
drop.transfer_mob_blood_dna(src)
|
||||
return
|
||||
else
|
||||
temp_blood_DNA = list()
|
||||
temp_blood_DNA |= drop.blood_DNA.Copy() //we transfer the dna from the drip to the splatter
|
||||
qdel(drop)//the drip is replaced by a bigger splatter
|
||||
else
|
||||
drop = new(T)
|
||||
drop.transfer_mob_blood_dna(src)
|
||||
return
|
||||
|
||||
// Find a blood decal or create a new one.
|
||||
var/obj/effect/decal/cleanable/blood/B = locate() in T
|
||||
if(!B)
|
||||
B = new /obj/effect/decal/cleanable/blood/splatter(T)
|
||||
if(ishuman(src))
|
||||
var/mob/living/carbon/human/H = src
|
||||
if(H.dna.species.id == "xeno")
|
||||
B = new /obj/effect/decal/cleanable/xenoblood(T)
|
||||
else
|
||||
B = new /obj/effect/decal/cleanable/blood/splatter(T)
|
||||
else
|
||||
B = new /obj/effect/decal/cleanable/blood/splatter(T)
|
||||
B.transfer_mob_blood_dna(src) //give blood info to the blood decal.
|
||||
if(temp_blood_DNA)
|
||||
B.blood_DNA |= temp_blood_DNA
|
||||
@@ -268,4 +295,4 @@
|
||||
T = get_turf(src)
|
||||
var/obj/effect/decal/cleanable/oil/B = locate() in T.contents
|
||||
if(!B)
|
||||
B = new(T)
|
||||
B = new(T)
|
||||
|
||||
@@ -7,7 +7,7 @@
|
||||
name = "alien"
|
||||
voice_name = "alien"
|
||||
icon = 'icons/mob/alien.dmi'
|
||||
gender = NEUTER
|
||||
gender = FEMALE
|
||||
dna = null
|
||||
faction = list("alien")
|
||||
ventcrawler = 2
|
||||
|
||||
@@ -333,10 +333,10 @@
|
||||
m_type = 2
|
||||
|
||||
if("wag","wags")
|
||||
if(dna && dna.species && (("tail_lizard" in dna.species.mutant_bodyparts) || ((dna.features["tail_human"] != "None") && !("waggingtail_human" in dna.species.mutant_bodyparts))))
|
||||
if(dna && dna.species && (("tail_lizard" in dna.species.mutant_bodyparts) || ((dna.features["mam_tail"] != "None") && !("mam_waggingtail" in dna.species.mutant_bodyparts)) || ((dna.features["tail_human"] != "None") && !("waggingtail_human" in dna.species.mutant_bodyparts))))
|
||||
message = "<B>[src]</B> wags \his tail."
|
||||
startTailWag()
|
||||
else if(dna && dna.species && (("waggingtail_lizard" in dna.species.mutant_bodyparts) || ("waggingtail_human" in dna.species.mutant_bodyparts)))
|
||||
else if(dna && dna.species && (("waggingtail_lizard" in dna.species.mutant_bodyparts) || ("mam_waggingtail" in dna.species.mutant_bodyparts) || ("waggingtail_human" in dna.species.mutant_bodyparts)))
|
||||
endTailWag()
|
||||
else
|
||||
src << "<span class='notice'>Unusable emote '[act]'. Say *help for a list.</span>"
|
||||
@@ -384,6 +384,9 @@
|
||||
if("tail_human" in dna.species.mutant_bodyparts)
|
||||
dna.species.mutant_bodyparts -= "tail_human"
|
||||
dna.species.mutant_bodyparts |= "waggingtail_human"
|
||||
if("mam_tail" in dna.species.mutant_bodyparts)
|
||||
dna.species.mutant_bodyparts -= "mam_tail"
|
||||
dna.species.mutant_bodyparts |= "mam_waggingtail"
|
||||
update_body()
|
||||
|
||||
|
||||
@@ -398,6 +401,9 @@
|
||||
if("waggingtail_human" in dna.species.mutant_bodyparts)
|
||||
dna.species.mutant_bodyparts -= "waggingtail_human"
|
||||
dna.species.mutant_bodyparts |= "tail_human"
|
||||
if("mam_waggingtail" in dna.species.mutant_bodyparts)
|
||||
dna.species.mutant_bodyparts -= "mam_waggingtail"
|
||||
dna.species.mutant_bodyparts |= "mam_tail"
|
||||
update_body()
|
||||
|
||||
/mob/living/carbon/human/proc/OpenWings()
|
||||
|
||||
@@ -31,8 +31,6 @@
|
||||
|
||||
msg += "<EM>[src.name]</EM>!\n"
|
||||
|
||||
var/insuit_handled=0
|
||||
|
||||
//uniform
|
||||
if(w_uniform && !(slot_w_uniform in obscured))
|
||||
//Ties
|
||||
@@ -46,10 +44,6 @@
|
||||
msg += "<span class='warning'>[t_He] [t_is] wearing \icon[w_uniform] [w_uniform.gender==PLURAL?"some":"a"] blood-stained [w_uniform.name][tie_msg]!</span>\n"
|
||||
else
|
||||
msg += "[t_He] [t_is] wearing \icon[w_uniform] \a [w_uniform][tie_msg].\n"
|
||||
if(vore_insuit_datum.has_people())
|
||||
msg += "<span class='warning'>There is a person-shaped bulge under the fabric!</span>\n"
|
||||
insuit_handled=1
|
||||
|
||||
|
||||
//head
|
||||
if(head)
|
||||
@@ -71,8 +65,6 @@
|
||||
msg += "<span class='warning'>[t_He] [t_is] carrying \icon[s_store] [s_store.gender==PLURAL?"some":"a"] blood-stained [s_store.name] on [t_his] [wear_suit.name]!</span>\n"
|
||||
else
|
||||
msg += "[t_He] [t_is] carrying \icon[s_store] \a [s_store] on [t_his] [wear_suit.name].\n"
|
||||
if(vore_insuit_datum.has_people()&&!insuit_handled)
|
||||
msg += "<span class='warning'>The fabric is moving!</span>\n"
|
||||
|
||||
//back
|
||||
if(back)
|
||||
@@ -254,6 +246,7 @@
|
||||
msg += "[t_He] [t_is] plump and delicious looking - Like a fat little piggy. A tasty piggy.\n"
|
||||
else
|
||||
msg += "[t_He] [t_is] quite chubby.\n"
|
||||
/*
|
||||
if( (vore_womb_datum.has_people()||vore_stomach_datum.has_people()) && !(slot_w_uniform in obscured) )
|
||||
msg += "It seems [t_his] belly is shifting around slighty.\n"
|
||||
if( (vore_breast_datum.has_people()||vore_breast_datum.digestion_count) && !(slot_w_uniform in obscured) )
|
||||
@@ -268,7 +261,7 @@
|
||||
if(vore_tail_datum.transfer_factor)
|
||||
msg += " It moves slowly toward the base."
|
||||
msg += "\n"
|
||||
|
||||
*/
|
||||
if(blood_volume < BLOOD_VOLUME_SAFE)
|
||||
msg += "[t_He] [t_has] pale skin.\n"
|
||||
|
||||
|
||||
@@ -56,6 +56,13 @@
|
||||
var/siemens_coeff = 1 //base electrocution coefficient
|
||||
var/exotic_damage_overlay = ""
|
||||
var/fixed_mut_color = "" //to use MUTCOLOR with a fixed color that's independent of dna.feature["mcolor"]
|
||||
var/fixed_mut_color2 = ""
|
||||
var/fixed_mut_color3 = ""
|
||||
var/generic = "something"
|
||||
var/adjective = "unknown"
|
||||
var/restricted = 0 //Set to 1 to not allow anyone to choose it, 2 to hide it from the DNA scanner, and text to restrict it to one person
|
||||
// var/tail=0
|
||||
// var/taur=0
|
||||
|
||||
var/invis_sight = SEE_INVISIBLE_LIVING
|
||||
var/darksight = 2
|
||||
@@ -293,52 +300,14 @@
|
||||
var/datum/sprite_accessory/socks/U3 = socks_list[H.socks]
|
||||
if(U3)
|
||||
standing += image("icon"=U3.icon, "icon_state"="[U3.icon_state]_s", "layer"=-BODY_LAYER)
|
||||
|
||||
//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)
|
||||
if(standing.len)
|
||||
H.overlays_standing[BODY_LAYER] = standing
|
||||
|
||||
if(standing.len)
|
||||
H.overlays_standing[BODY_LAYER] = standing
|
||||
|
||||
H.apply_overlay(BODY_LAYER)
|
||||
|
||||
|
||||
/datum/species/proc/handle_mutant_bodyparts(mob/living/carbon/human/H, forced_colour)
|
||||
var/list/bodyparts_to_add = mutant_bodyparts.Copy()
|
||||
var/list/relevent_layers = list(BODY_BEHIND_LAYER, BODY_ADJ_LAYER, BODY_FRONT_LAYER)
|
||||
@@ -367,13 +336,26 @@
|
||||
if(H.wear_suit && (H.wear_suit.flags_inv & HIDEJUMPSUIT))
|
||||
bodyparts_to_add -= "tail_human"
|
||||
|
||||
|
||||
if("waggingtail_human" in mutant_bodyparts)
|
||||
if(H.wear_suit && (H.wear_suit.flags_inv & HIDEJUMPSUIT))
|
||||
bodyparts_to_add -= "waggingtail_human"
|
||||
else if ("tail_human" in mutant_bodyparts)
|
||||
bodyparts_to_add -= "waggingtail_human"
|
||||
|
||||
if("mam_tail" in mutant_bodyparts)
|
||||
if(H.wear_suit && (H.wear_suit.flags_inv & HIDEJUMPSUIT))
|
||||
bodyparts_to_add -= "mam_tail"
|
||||
|
||||
if("mam_waggingtail" in mutant_bodyparts)
|
||||
if(H.wear_suit && (H.wear_suit.flags_inv & HIDEJUMPSUIT))
|
||||
bodyparts_to_add -= "mam_waggingtail"
|
||||
else if ("mam_tail" in mutant_bodyparts)
|
||||
bodyparts_to_add -= "mam_waggingtail"
|
||||
|
||||
if("mam_ears" in mutant_bodyparts)
|
||||
if(!H.dna.features["mam_ears"] || H.dna.features["mam_ears"] == "None" || H.head && (H.head.flags_inv & HIDEHAIR) || (H.wear_mask && (H.wear_mask.flags_inv & HIDEHAIR)) || !HD || HD.status == ORGAN_ROBOTIC)
|
||||
bodyparts_to_add -= "mam_ears"
|
||||
|
||||
if("spines" in mutant_bodyparts)
|
||||
if(!H.dna.features["spines"] || H.dna.features["spines"] == "None" || H.wear_suit && (H.wear_suit.flags_inv & HIDEJUMPSUIT))
|
||||
bodyparts_to_add -= "spines"
|
||||
@@ -448,16 +430,26 @@
|
||||
S = wings_list[H.dna.features["wings"]]
|
||||
if("wingsopen")
|
||||
S = wings_open_list[H.dna.features["wings"]]
|
||||
//mammal bodyparts
|
||||
if("mam_tail")
|
||||
S = mam_tails_list[H.dna.features["mam_tail"]]
|
||||
if("mam_waggingtail")
|
||||
S.= mam_tails_animated_list[H.dna.features["mam_tail"]]
|
||||
if("mam_body_markings")
|
||||
S = mam_body_markings_list[H.dna.features["mam_body_markings"]]
|
||||
if("mam_ears")
|
||||
S = mam_ears_list[H.dna.features["mam_ears"]]
|
||||
|
||||
if(!S || S.icon_state == "none")
|
||||
continue
|
||||
|
||||
//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 == "mam_tail")
|
||||
bodypart = "tail"
|
||||
else if(bodypart == "waggingtail_lizard" || bodypart == "waggingtail_human")
|
||||
else if(bodypart == "waggingtail_lizard" || bodypart == "waggingtail_human" || bodypart == "mam_waggingtail")
|
||||
bodypart = "waggingtail"
|
||||
|
||||
if(bodypart == "mam_ears")
|
||||
bodypart = "ears"
|
||||
|
||||
var/icon_string
|
||||
|
||||
@@ -479,6 +471,16 @@
|
||||
I.color = "#[fixed_mut_color]"
|
||||
else
|
||||
I.color = "#[H.dna.features["mcolor"]]"
|
||||
if(MUTCOLORS2)
|
||||
if(fixed_mut_color2)
|
||||
I.color = "#[fixed_mut_color2]"
|
||||
else
|
||||
I.color = "#[H.dna.features["mcolor2"]]"
|
||||
if(MUTCOLORS3)
|
||||
if(fixed_mut_color3)
|
||||
I.color = "#[fixed_mut_color3]"
|
||||
else
|
||||
I.color = "#[H.dna.features["mcolor3"]]"
|
||||
if(HAIR)
|
||||
if(hair_color == "mutcolor")
|
||||
I.color = "#[H.dna.features["mcolor"]]"
|
||||
@@ -490,6 +492,7 @@
|
||||
I.color = "#[H.eye_color]"
|
||||
else
|
||||
I.color = forced_colour
|
||||
|
||||
standing += I
|
||||
|
||||
if(S.hasinner)
|
||||
@@ -505,6 +508,44 @@
|
||||
|
||||
standing += I
|
||||
|
||||
if(S.extra)
|
||||
if(S.gender_specific)
|
||||
icon_string = "[g]_[bodypart]_extra_[S.icon_state]_[layer]"
|
||||
else
|
||||
icon_string = "m_[bodypart]_extra_[S.icon_state]_[layer]"
|
||||
|
||||
I = image("icon" = S.icon, "icon_state" = icon_string, "layer" =- layer)
|
||||
|
||||
if(S.center)
|
||||
I = center_image(I,S.dimension_x,S.dimension_y)
|
||||
|
||||
switch(S.extra_color_src)
|
||||
if(MUTCOLORS)
|
||||
if(fixed_mut_color)
|
||||
I.color = "#[fixed_mut_color]"
|
||||
else
|
||||
I.color = "#[H.dna.features["mcolor"]]"
|
||||
if(MUTCOLORS2)
|
||||
if(fixed_mut_color2)
|
||||
I.color = "#[fixed_mut_color2]"
|
||||
else
|
||||
I.color = "#[H.dna.features["mcolor2"]]"
|
||||
if(MUTCOLORS3)
|
||||
if(fixed_mut_color3)
|
||||
I.color = "#[fixed_mut_color3]"
|
||||
else
|
||||
I.color = "#[H.dna.features["mcolor3"]]"
|
||||
if(HAIR)
|
||||
if(hair_color == "mutcolor")
|
||||
I.color = "#[H.dna.features["mcolor"]]"
|
||||
else
|
||||
I.color = "#[H.hair_color]"
|
||||
if(FACEHAIR)
|
||||
I.color = "#[H.facial_hair_color]"
|
||||
if(EYECOLOR)
|
||||
I.color = "#[H.eye_color]"
|
||||
standing += I
|
||||
|
||||
H.overlays_standing[layer] = standing.Copy()
|
||||
standing = list()
|
||||
|
||||
|
||||
@@ -6,9 +6,9 @@
|
||||
name = "Human"
|
||||
id = "human"
|
||||
default_color = "FFFFFF"
|
||||
//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")
|
||||
specflags = list(MUTCOLORS_PARTSONLY,EYECOLOR,HAIR,FACEHAIR,LIPS)
|
||||
mutant_bodyparts = list("tail_human", "ears")
|
||||
default_features = list("tail_human" = "None", "ears" = "None")
|
||||
use_skintones = 1
|
||||
skinned_type = /obj/item/stack/sheet/animalhide/human
|
||||
|
||||
@@ -57,7 +57,7 @@
|
||||
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")
|
||||
default_features = list("mcolor" = "0F0","mcolor2" = "0F0","mcolor3" = "0F0", "tail" = "Smooth", "snout" = "Round", "horns" = "None", "frills" = "None", "spines" = "None", "body_markings" = "None")
|
||||
attack_verb = "slash"
|
||||
attack_sound = 'sound/weapons/slash.ogg'
|
||||
miss_sound = 'sound/weapons/slashmiss.ogg'
|
||||
@@ -166,6 +166,7 @@
|
||||
meat = /obj/item/weapon/reagent_containers/food/snacks/meat/slab/human/mutant/shadow
|
||||
specflags = list(NOBREATH,NOBLOOD,RADIMMUNE,VIRUSIMMUNE)
|
||||
dangerous_existence = 1
|
||||
restricted = 2
|
||||
|
||||
/datum/species/shadow/spec_life(mob/living/carbon/human/H)
|
||||
var/light_amount = 0
|
||||
@@ -193,6 +194,7 @@
|
||||
meat = /obj/item/weapon/reagent_containers/food/snacks/meat/slab/human/mutant/slime
|
||||
exotic_blood = "slimejelly"
|
||||
var/datum/action/innate/regenerate_limbs/regenerate_limbs
|
||||
restricted = 2
|
||||
|
||||
/datum/species/jelly/on_species_loss(mob/living/carbon/C)
|
||||
if(regenerate_limbs)
|
||||
@@ -261,17 +263,17 @@
|
||||
H << "<span class='notice'>You feel intact enough as it is.</span>"
|
||||
return
|
||||
H << "<span class='notice'>You focus intently on your missing [limbs_to_heal.len >= 2 ? "limbs" : "limb"]...</span>"
|
||||
if(H.blood_volume >= 40*limbs_to_heal.len+BLOOD_VOLUME_OKAY)
|
||||
if(H.blood_volume >= 150*limbs_to_heal.len+BLOOD_VOLUME_OKAY)
|
||||
H.regenerate_limbs()
|
||||
H.blood_volume -= 40*limbs_to_heal.len
|
||||
H.blood_volume -= 150*limbs_to_heal.len
|
||||
H << "<span class='notice'>...and after a moment you finish reforming!</span>"
|
||||
return
|
||||
else if(H.blood_volume >= 40)//We can partially heal some limbs
|
||||
while(H.blood_volume >= BLOOD_VOLUME_OKAY+40)
|
||||
else if(H.blood_volume >= 150)//We can partially heal some limbs
|
||||
while(H.blood_volume >= BLOOD_VOLUME_OKAY+150)
|
||||
var/healed_limb = pick(limbs_to_heal)
|
||||
H.regenerate_limb(healed_limb)
|
||||
limbs_to_heal -= healed_limb
|
||||
H.blood_volume -= 40
|
||||
H.blood_volume -= 150
|
||||
H << "<span class='warning'>...but there is not enough of you to fix everything! You must attain more mass to heal completely!</span>"
|
||||
return
|
||||
H << "<span class='warning'>...but there is not enough of you to go around! You must attain more mass to heal!</span>"
|
||||
@@ -281,7 +283,7 @@
|
||||
*/
|
||||
|
||||
/datum/species/jelly/slime
|
||||
// Humans mutated by slime mutagen, produced from green slimes. They are not targetted by slimes.
|
||||
// Humans mutated by slime mutagen, produced from green slimes. They are not targeted by slimes.
|
||||
name = "Slimeperson"
|
||||
id = "slime"
|
||||
default_color = "00FFFF"
|
||||
@@ -290,14 +292,15 @@
|
||||
say_mod = "says"
|
||||
eyes = "eyes"
|
||||
hair_color = "mutcolor"
|
||||
hair_alpha = 150
|
||||
hair_alpha = 192
|
||||
ignored_by = list(/mob/living/simple_animal/slime)
|
||||
burnmod = 0.5
|
||||
burnmod = 0.9
|
||||
coldmod = 2
|
||||
heatmod = 0.5
|
||||
heatmod = 0.9
|
||||
var/datum/action/innate/split_body/slime_split
|
||||
var/list/mob/living/carbon/bodies
|
||||
var/datum/action/innate/swap_body/swap_body
|
||||
roundstart = 1
|
||||
|
||||
/datum/species/jelly/slime/on_species_loss(mob/living/carbon/C)
|
||||
if(slime_split)
|
||||
@@ -314,11 +317,6 @@
|
||||
/datum/species/jelly/slime/on_species_gain(mob/living/carbon/C, datum/species/old_species)
|
||||
..()
|
||||
if(ishuman(C))
|
||||
slime_split = new
|
||||
slime_split.Grant(C)
|
||||
swap_body = new
|
||||
swap_body.Grant(C)
|
||||
|
||||
if(!bodies || !bodies.len)
|
||||
bodies = list(C)
|
||||
else
|
||||
@@ -530,7 +528,7 @@
|
||||
siemens_coeff = 0
|
||||
punchdamagelow = 5
|
||||
punchdamagehigh = 14
|
||||
punchstunthreshold = 11 //about 40% chance to stun
|
||||
punchstunthreshold = 12 //about 15% chance to stun
|
||||
no_equip = list(slot_wear_mask, slot_wear_suit, slot_gloves, slot_shoes, slot_w_uniform)
|
||||
nojumpsuit = 1
|
||||
sexes = 1
|
||||
@@ -541,6 +539,7 @@
|
||||
dangerous_existence = TRUE
|
||||
limbs_id = "golem"
|
||||
fixed_mut_color = "aaa"
|
||||
restricted = 2
|
||||
|
||||
/datum/species/golem/random
|
||||
name = "Random Golem"
|
||||
@@ -631,6 +630,7 @@
|
||||
meat = /obj/item/weapon/reagent_containers/food/snacks/meat/slab/human/mutant/skeleton
|
||||
specflags = list(NOBREATH,RESISTTEMP,NOBLOOD,RADIMMUNE,VIRUSIMMUNE,PIERCEIMMUNE,NOHUNGER,EASYDISMEMBER,EASYLIMBATTACHMENT)
|
||||
mutant_organs = list(/obj/item/organ/tongue/bone)
|
||||
restricted = 2
|
||||
|
||||
/*
|
||||
ZOMBIES
|
||||
@@ -647,6 +647,7 @@
|
||||
specflags = list(NOBREATH,RESISTTEMP,NOBLOOD,RADIMMUNE,NOZOMBIE,EASYDISMEMBER,EASYLIMBATTACHMENT, TOXINLOVER)
|
||||
mutant_organs = list(/obj/item/organ/tongue/zombie)
|
||||
speedmod = 2
|
||||
restricted = 2
|
||||
|
||||
/datum/species/zombie/infectious
|
||||
name = "Infectious Zombie"
|
||||
@@ -693,6 +694,7 @@
|
||||
sexes = 0
|
||||
meat = /obj/item/weapon/reagent_containers/food/snacks/meat/slab/human/mutant/zombie
|
||||
mutant_organs = list(/obj/item/organ/tongue/zombie)
|
||||
restricted = 2
|
||||
|
||||
/datum/species/abductor
|
||||
name = "Abductor"
|
||||
@@ -705,6 +707,7 @@
|
||||
var/scientist = 0 // vars to not pollute spieces list with castes
|
||||
var/agent = 0
|
||||
var/team = 1
|
||||
restricted = 2
|
||||
|
||||
var/global/image/plasmaman_on_fire = image("icon"='icons/mob/OnFire.dmi', "icon_state"="plasmaman")
|
||||
|
||||
@@ -779,6 +782,8 @@ var/global/image/plasmaman_on_fire = image("icon"='icons/mob/OnFire.dmi', "icon_
|
||||
var/list/initial_specflags = list(NOTRANSSTING,NOBREATH,VIRUSIMMUNE,NODISMEMBER,NOHUNGER) //for getting these values back for assume_disguise()
|
||||
var/disguise_fail_health = 75 //When their health gets to this level their synthflesh partially falls off
|
||||
var/datum/species/fake_species = null //a species to do most of our work for us, unless we're damaged
|
||||
restricted = 2
|
||||
roundstart = 0
|
||||
|
||||
/datum/species/synth/military
|
||||
name = "Military Synth"
|
||||
@@ -788,6 +793,7 @@ var/global/image/plasmaman_on_fire = image("icon"='icons/mob/OnFire.dmi', "icon_
|
||||
punchdamagehigh = 19
|
||||
punchstunthreshold = 14 //about 50% chance to stun
|
||||
disguise_fail_health = 50
|
||||
restricted = 2
|
||||
|
||||
/datum/species/synth/on_species_gain(mob/living/carbon/human/H, datum/species/old_species)
|
||||
..()
|
||||
@@ -908,6 +914,7 @@ SYNDICATE BLACK OPS
|
||||
use_skintones = 0
|
||||
specflags = list(RADIMMUNE,VIRUSIMMUNE,NOBLOOD,PIERCEIMMUNE,EYECOLOR,NODISMEMBER,NOHUNGER)
|
||||
sexes = 0
|
||||
restricted = 2
|
||||
|
||||
/datum/species/angel
|
||||
name = "Angel"
|
||||
@@ -919,6 +926,7 @@ SYNDICATE BLACK OPS
|
||||
use_skintones = 1
|
||||
no_equip = list(slot_back)
|
||||
blacklisted = 1
|
||||
restricted = 2
|
||||
limbs_id = "human"
|
||||
skinned_type = /obj/item/stack/sheet/animalhide/human
|
||||
|
||||
@@ -1052,3 +1060,101 @@ SYNDICATE BLACK OPS
|
||||
override_float = 0
|
||||
H.pass_flags &= ~PASSTABLE
|
||||
H.CloseWings()
|
||||
|
||||
|
||||
//CANID//
|
||||
datum/species/canid
|
||||
name = "Canid"
|
||||
id = "canid"
|
||||
default_color = "4B4B4B"
|
||||
specflags = list(MUTCOLORS,EYECOLOR,LIPS,HAIR)
|
||||
mutant_bodyparts = list("mam_tail", "mam_ears", "mam_body_markings", "snout")
|
||||
default_features = list("mcolor" = "FFF","mcolor2" = "FFF","mcolor3" = "FFF", "body_markings" = "None", "mam_tail" = "None", "mam_ears" = "None", "mam_body_markings" = "None")
|
||||
attack_verb = "claw"
|
||||
attack_sound = 'sound/weapons/slash.ogg'
|
||||
miss_sound = 'sound/weapons/slashmiss.ogg'
|
||||
roundstart = 1
|
||||
|
||||
/datum/species/canid/spec_death(gibbed, mob/living/carbon/human/H)
|
||||
if(H)
|
||||
H.endTailWag()
|
||||
|
||||
//FELID//
|
||||
|
||||
/datum/species/felid
|
||||
name = "Felid"
|
||||
id = "felid"
|
||||
default_color = "BCAC9B"
|
||||
specflags = list(MUTCOLORS,EYECOLOR,LIPS,HAIR)
|
||||
mutant_bodyparts = list("mam_body_markings", "mam_ears", "mam_tail", "snout")
|
||||
default_features = list("mcolor" = "FFF","mcolor2" = "FFF","mcolor3" = "FFF", "mam_body_markings" = "Belly", "mam_ears" = "Big Cat", "mam_tail" = "Big Cat")
|
||||
attack_verb = "claw"
|
||||
attack_sound = 'sound/weapons/slash.ogg'
|
||||
miss_sound = 'sound/weapons/slashmiss.ogg'
|
||||
roundstart = 1 //no sprites yet
|
||||
|
||||
/datum/species/tajaran/spec_death(gibbed, mob/living/carbon/human/H)
|
||||
if(H)
|
||||
H.endTailWag()
|
||||
|
||||
//AVIAN//
|
||||
/datum/species/ave
|
||||
name = "Avian"
|
||||
id = "avian"
|
||||
default_color = "BCAC9B"
|
||||
specflags = list(MUTCOLORS,EYECOLOR,LIPS,HAIR)
|
||||
mutant_bodyparts = list("beak", "wings", "avian_tail")
|
||||
default_features = list("beak" = "None", "wings" = "None")
|
||||
attack_verb = "peck"
|
||||
attack_sound = 'sound/weapons/slash.ogg'
|
||||
miss_sound = 'sound/weapons/slashmiss.ogg'
|
||||
roundstart = 0 //no sprites yet
|
||||
blacklisted = 1
|
||||
|
||||
//HERBIVOROUS//
|
||||
|
||||
//EXOTIC//
|
||||
/datum/species/xeno
|
||||
name = "Xenomorph"
|
||||
id = "xeno"
|
||||
default_color = "BCAC9B"
|
||||
say_mod = "hisses"
|
||||
eyes = "eyes_xeno"
|
||||
specflags = list(NOGUNS,MUTCOLORS)
|
||||
mutant_bodyparts = list("xeno_head", "dorsal_tubes")
|
||||
default_features = list("xeno_head" = "None", "dorsal_tubes" = "None")
|
||||
attack_verb = "slash"
|
||||
attack_sound = 'sound/weapons/slash.ogg'
|
||||
miss_sound = 'sound/weapons/slashmiss.ogg'
|
||||
burnmod = 1.5
|
||||
heatmod = 1.5
|
||||
safe_toxins_max = 9999999
|
||||
exotic_blood = "xblood"
|
||||
exotic_damage_overlay = "xeno"
|
||||
roundstart = 0 //wip
|
||||
blacklisted = 1 //so xenobio can't steal the broken races
|
||||
no_equip = list(slot_glasses) //MY EYES, THEY'RE GONE
|
||||
meat = /obj/item/weapon/reagent_containers/food/snacks/meat/slab/xeno
|
||||
skinned_type = /obj/item/stack/sheet/animalhide/xeno
|
||||
|
||||
/datum/species/xeno/on_species_gain(mob/living/carbon/C, datum/species/old_species)
|
||||
var/obj/effect/decal/cleanable/xenoblood/xgibs/XG
|
||||
if(istype(C.gib_type, XG))
|
||||
return
|
||||
else
|
||||
C.gib_type = XG
|
||||
/datum/species/xeno/on_species_loss(mob/living/carbon/C)
|
||||
var/obj/effect/decal/cleanable/xenoblood/xgibs/XG
|
||||
var/obj/effect/decal/cleanable/blood/gibs/HG
|
||||
if(istype(C.gib_type, XG))
|
||||
C.gib_type = HG
|
||||
else
|
||||
return
|
||||
|
||||
/datum/reagent/toxin/acid/xenoblood
|
||||
name = "acid blood"
|
||||
id = "xblood"
|
||||
description = "A highly corrosive substance, it is capable of burning through most natural or man-made materials in short order."
|
||||
color = "#66CC00"
|
||||
toxpwr = 0.5
|
||||
acidpwr = 12
|
||||
|
||||
@@ -4,10 +4,8 @@
|
||||
/* Keep these comments up-to-date if you -insist- on hurting my code-baby ;_;
|
||||
This system allows you to update individual mob-overlays, without regenerating them all each time.
|
||||
When we generate overlays we generate the standing version and then rotate the mob as necessary..
|
||||
|
||||
As of the time of writing there are 20 layers within this list. Please try to keep this from increasing. //22 and counting, good job guys
|
||||
var/overlays_standing[20] //For the standing stance
|
||||
|
||||
Most of the time we only wish to update one overlay:
|
||||
e.g. - we dropped the fireaxe out of our left hand and need to remove its icon from our mob
|
||||
e.g.2 - our hair colour has changed, so we need to update our hair icons on our mob
|
||||
@@ -15,28 +13,21 @@ In these cases, instead of updating every overlay using the old behaviour (regen
|
||||
the appropriate update_X proc.
|
||||
e.g. - update_l_hand()
|
||||
e.g.2 - update_hair()
|
||||
|
||||
Note: Recent changes by aranclanos+carn:
|
||||
update_icons() no longer needs to be called.
|
||||
the system is easier to use. update_icons() should not be called unless you absolutely -know- you need it.
|
||||
IN ALL OTHER CASES it's better to just call the specific update_X procs.
|
||||
|
||||
Note: The defines for layer numbers is now kept exclusvely in __DEFINES/misc.dm instead of being defined there,
|
||||
then redefined and undefiend everywhere else. If you need to change the layering of sprites (or add a new layer)
|
||||
that's where you should start.
|
||||
|
||||
All of this means that this code is more maintainable, faster and still fairly easy to use.
|
||||
|
||||
There are several things that need to be remembered:
|
||||
> Whenever we do something that should cause an overlay to update (which doesn't use standard procs
|
||||
( i.e. you do something like l_hand = /obj/item/something new(src), rather than using the helper procs)
|
||||
You will need to call the relevant update_inv_* proc
|
||||
|
||||
All of these are named after the variable they update from. They are defined at the mob/ level like
|
||||
update_clothing was, so you won't cause undefined proc runtimes with usr.update_inv_wear_id() if the usr is a
|
||||
slime etc. Instead, it'll just return without doing any work. So no harm in calling it for slimes and such.
|
||||
|
||||
|
||||
> There are also these special cases:
|
||||
update_damage_overlays() //handles damage overlays for brute/burn damage
|
||||
update_body() //Handles updating your mob's body layer and mutant bodyparts
|
||||
@@ -44,8 +35,6 @@ There are several things that need to be remembered:
|
||||
//NOTE: update_mutantrace() is now merged into this!
|
||||
update_hair() //Handles updating your hair overlay (used to be update_face, but mouth and
|
||||
eyes were merged into update_body())
|
||||
|
||||
|
||||
*/
|
||||
|
||||
//DAMAGE OVERLAYS
|
||||
@@ -79,59 +68,11 @@ There are several things that need to be remembered:
|
||||
dna.species.handle_mutant_bodyparts(src)
|
||||
|
||||
|
||||
//mob/living/carbon/human/proc/update_body()
|
||||
/mob/living/carbon/human/update_body()
|
||||
/mob/living/carbon/human/proc/update_body()
|
||||
remove_overlay(BODY_LAYER)
|
||||
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")
|
||||
|
||||
@@ -536,23 +477,15 @@ covers:
|
||||
centering large images
|
||||
layering images on custom layers
|
||||
building images from custom icon files
|
||||
|
||||
By Remie Richards (yes I'm taking credit because this just removed 90% of the copypaste in update_icons())
|
||||
|
||||
state: A string to use as the state, this is FAR too complex to solve in this proc thanks to shitty old code
|
||||
so it's specified as an argument instead.
|
||||
|
||||
default_layer: The layer to draw this on if no other layer is specified
|
||||
|
||||
default_icon_file: The icon file to draw states from if no other icon file is specified
|
||||
|
||||
isinhands: If true then alternate_worn_icon is skipped so that default_icon_file is used,
|
||||
in this situation default_icon_file is expected to match either the lefthand_ or righthand_ file var
|
||||
|
||||
femalueuniform: A value matching a uniform item's fitted var, if this is anything but NO_FEMALE_UNIFORM, we
|
||||
generate/load female uniform sprites matching all previously decided variables
|
||||
|
||||
|
||||
*/
|
||||
/obj/item/proc/build_worn_icon(var/state = "", var/default_layer = 0, var/default_icon_file = null, var/isinhands = FALSE, var/femaleuniform = NO_FEMALE_UNIFORM)
|
||||
|
||||
@@ -629,6 +562,8 @@ var/global/list/limb_icon_cache = list()
|
||||
. += "-coloured-[dna.species.fixed_mut_color]"
|
||||
else if(dna.features["mcolor"])
|
||||
. += "-coloured-[dna.features["mcolor"]]"
|
||||
else if(dna.features["mcolor"] && dna.species.use_skintones)
|
||||
. += "-coloured-[skin_tone]"
|
||||
else
|
||||
. += "-not_coloured"
|
||||
|
||||
@@ -651,4 +586,4 @@ var/global/list/limb_icon_cache = list()
|
||||
if(limb_icon_cache[icon_render_key])
|
||||
remove_overlay(BODYPARTS_LAYER)
|
||||
overlays_standing[BODYPARTS_LAYER] = limb_icon_cache[icon_render_key]
|
||||
apply_overlay(BODYPARTS_LAYER)
|
||||
apply_overlay(BODYPARTS_LAYER)
|
||||
@@ -212,11 +212,11 @@
|
||||
take_organ_damage(min(10*toxpwr, acid_volume * toxpwr))
|
||||
|
||||
/mob/living/proc/grabbedby(mob/living/carbon/user, supress_message = 0)
|
||||
if(user == src)
|
||||
var/mob/living/target
|
||||
if(pulling && !pulling.anchored && grab_state >= GRAB_AGGRESSIVE && isliving(pulling))
|
||||
target = pulling
|
||||
user.vore_initiate(target,user)
|
||||
// if(user == src)
|
||||
// var/mob/living/target
|
||||
// if(pulling && !pulling.anchored && grab_state >= GRAB_AGGRESSIVE && isliving(pulling))
|
||||
// target = pulling
|
||||
// user.vore_initiate(target,user)
|
||||
if(anchored)
|
||||
return 0
|
||||
if(!user.pulling || user.pulling != src)
|
||||
|
||||
@@ -20,7 +20,7 @@
|
||||
ventcrawler = 2
|
||||
var/datum/mind/origin
|
||||
var/egg_lain = 0
|
||||
gold_core_spawnable = 1 //are you sure about this??
|
||||
// gold_core_spawnable = 1 //are you sure about this?? (NO, THEY WEREN'T. THIS WAS AN AWFUL DECISION)
|
||||
|
||||
/mob/living/simple_animal/hostile/headcrab/proc/Infect(mob/living/carbon/victim)
|
||||
var/obj/item/organ/body_egg/changeling_egg/egg = new(victim)
|
||||
|
||||
@@ -60,13 +60,19 @@
|
||||
var/dimension_x = 32
|
||||
var/dimension_y = 32
|
||||
var/center = FALSE //Should we center the sprite?
|
||||
|
||||
var/extra = 0 //Used for extra overlays on top of the bodypart that may be colored seperately. Uses the secondary mutant color as default. See species.dm for the actual overlay code.
|
||||
var/extra_icon = 'icons/mob/mam_bodyparts.dmi'
|
||||
var/extra_color_src = MUTCOLORS2 //The color source for the extra overlay.
|
||||
//////////////////////
|
||||
// Hair Definitions //
|
||||
//////////////////////
|
||||
/datum/sprite_accessory/hair
|
||||
icon = 'icons/mob/human_face.dmi' // default icon for all hairs
|
||||
|
||||
/datum/sprite_accessory/hair/bald //Moved to the top so we can all stop scrolling all the way down.
|
||||
name = "Bald"
|
||||
icon_state = null
|
||||
|
||||
/datum/sprite_accessory/hair/short
|
||||
name = "Short Hair" // try to capatilize the names please~
|
||||
icon_state = "hair_a" // you do not need to define _s or _l sub-states, game automatically does this for you
|
||||
@@ -392,10 +398,6 @@
|
||||
name = "Balding Hair"
|
||||
icon_state = "hair_e"
|
||||
|
||||
/datum/sprite_accessory/hair/bald
|
||||
name = "Bald"
|
||||
icon_state = null
|
||||
|
||||
/datum/sprite_accessory/hair/parted
|
||||
name = "Side Part"
|
||||
icon_state = "hair_part"
|
||||
@@ -1125,6 +1127,7 @@
|
||||
|
||||
/datum/sprite_accessory/body_markings
|
||||
icon = 'icons/mob/mutant_bodyparts.dmi'
|
||||
color_src = MUTCOLORS2
|
||||
|
||||
/datum/sprite_accessory/body_markings/none
|
||||
name = "None"
|
||||
@@ -1229,6 +1232,8 @@
|
||||
name = "Aquatic"
|
||||
icon_state = "aqua"
|
||||
|
||||
/datum/sprite_accessory/tails/human
|
||||
|
||||
/datum/sprite_accessory/tails/human/none
|
||||
name = "None"
|
||||
icon_state = "none"
|
||||
@@ -1240,12 +1245,10 @@
|
||||
/datum/sprite_accessory/tails/human/cat
|
||||
name = "Cat"
|
||||
icon_state = "cat"
|
||||
color_src = HAIR
|
||||
|
||||
/datum/sprite_accessory/tails_animated/human/cat
|
||||
name = "Cat"
|
||||
icon_state = "cat"
|
||||
color_src = HAIR
|
||||
|
||||
/datum/sprite_accessory/snouts
|
||||
icon = 'icons/mob/mutant_bodyparts.dmi'
|
||||
@@ -1304,7 +1307,6 @@
|
||||
name = "Cat"
|
||||
icon_state = "cat"
|
||||
hasinner = 1
|
||||
color_src = HAIR
|
||||
|
||||
/datum/sprite_accessory/wings/none
|
||||
name = "None"
|
||||
@@ -1405,3 +1407,216 @@
|
||||
/datum/sprite_accessory/spines_animated/aqautic
|
||||
name = "Aquatic"
|
||||
icon_state = "aqua"
|
||||
|
||||
//Human Ears/Tails
|
||||
|
||||
/datum/sprite_accessory/ears/fox
|
||||
name = "Fox"
|
||||
icon_state = "fox"
|
||||
hasinner = 0
|
||||
icon = 'icons/mob/mam_bodyparts.dmi'
|
||||
|
||||
/datum/sprite_accessory/ears/wolf
|
||||
name = "Wolf"
|
||||
icon_state = "wolf"
|
||||
hasinner = 0
|
||||
icon = 'icons/mob/mam_bodyparts.dmi'
|
||||
|
||||
/datum/sprite_accessory/tails/human/fox
|
||||
name = "Fox"
|
||||
icon_state = "fox"
|
||||
icon = 'icons/mob/mam_bodyparts.dmi'
|
||||
extra = 1
|
||||
|
||||
/datum/sprite_accessory/tails_animated/human/fox
|
||||
name = "Fox"
|
||||
icon_state = "fox"
|
||||
icon = 'icons/mob/mam_bodyparts.dmi'
|
||||
extra = 1
|
||||
|
||||
/datum/sprite_accessory/tails/human/wolf
|
||||
name = "Wolf"
|
||||
icon_state = "wolf"
|
||||
icon = 'icons/mob/mam_bodyparts.dmi'
|
||||
|
||||
/datum/sprite_accessory/tails_animated/human/wolf
|
||||
name = "Wolf"
|
||||
icon_state = "wolf"
|
||||
icon = 'icons/mob/mam_bodyparts.dmi'
|
||||
|
||||
/datum/sprite_accessory/tails/human/catbig
|
||||
name = "Cat, Big"
|
||||
icon_state = "catbig"
|
||||
icon = 'icons/mob/mam_bodyparts.dmi'
|
||||
|
||||
/datum/sprite_accessory/tails_animated/human/catbig
|
||||
name = "Cat, Big"
|
||||
icon_state = "catbig"
|
||||
icon = 'icons/mob/mam_bodyparts.dmi'
|
||||
|
||||
/datum/sprite_accessory/ears/fennec
|
||||
name = "Fennec"
|
||||
icon_state = "fennec"
|
||||
icon = 'icons/mob/mam_bodyparts.dmi'
|
||||
|
||||
/datum/sprite_accessory/tails/human/fennec
|
||||
name = "Fennec"
|
||||
icon_state = "fennec"
|
||||
icon = 'icons/mob/mam_bodyparts.dmi'
|
||||
|
||||
/datum/sprite_accessory/tails_animated/human/fennec
|
||||
name = "Fennec"
|
||||
icon_state = "fennec"
|
||||
icon = 'icons/mob/mam_bodyparts.dmi'
|
||||
|
||||
/datum/sprite_accessory/ears/lab
|
||||
name = "Dog, Floppy"
|
||||
icon_state = "lab"
|
||||
hasinner = 0
|
||||
icon = 'icons/mob/mam_bodyparts.dmi'
|
||||
|
||||
/datum/sprite_accessory/tails/human/husky
|
||||
name = "Husky"
|
||||
icon_state = "husky"
|
||||
icon = 'icons/mob/mam_bodyparts.dmi'
|
||||
extra = 1
|
||||
|
||||
/datum/sprite_accessory/tails_animated/human/husky
|
||||
name = "Husky"
|
||||
icon_state = "husky"
|
||||
icon = 'icons/mob/mam_bodyparts.dmi'
|
||||
extra = 1
|
||||
|
||||
//Mammal Bodyparts
|
||||
/datum/sprite_accessory/mam_ears
|
||||
icon = 'icons/mob/mam_bodyparts.dmi'
|
||||
|
||||
/datum/sprite_accessory/mam_tails
|
||||
icon = 'icons/mob/mam_bodyparts.dmi'
|
||||
|
||||
/datum/sprite_accessory/mam_tails_animated
|
||||
icon = 'icons/mob/mam_bodyparts.dmi'
|
||||
|
||||
//Snouts
|
||||
/datum/sprite_accessory/snouts/lcanid
|
||||
name = "Long, Thin"
|
||||
icon_state = "lcanid"
|
||||
|
||||
/datum/sprite_accessory/snouts/scanid
|
||||
name = "Short, Thin"
|
||||
icon_state = "scanid"
|
||||
|
||||
//Cat, Big
|
||||
/datum/sprite_accessory/mam_ears/catbig
|
||||
name = "Cat, Big"
|
||||
icon_state = "cat"
|
||||
hasinner = 1
|
||||
icon = 'icons/mob/mutant_bodyparts.dmi'
|
||||
|
||||
/datum/sprite_accessory/mam_tails/catbig
|
||||
name = "Cat, Big"
|
||||
icon_state = "catbig"
|
||||
|
||||
/datum/sprite_accessory/mam_tails_animated/catbig
|
||||
name = "Cat, Big"
|
||||
icon_state = "catbig"
|
||||
|
||||
//Wolf
|
||||
/datum/sprite_accessory/mam_ears/wolf
|
||||
name = "Wolf"
|
||||
icon_state = "wolf"
|
||||
hasinner = 1
|
||||
|
||||
/datum/sprite_accessory/mam_tails/wolf
|
||||
name = "Wolf"
|
||||
icon_state = "wolf"
|
||||
|
||||
/datum/sprite_accessory/mam_tails_animated/wolf
|
||||
name = "Wolf"
|
||||
icon_state = "wolf"
|
||||
|
||||
//Fox
|
||||
/datum/sprite_accessory/mam_ears/fox
|
||||
name = "Fox"
|
||||
icon_state = "fox"
|
||||
hasinner = 0
|
||||
|
||||
/datum/sprite_accessory/mam_tails/fox
|
||||
name = "Fox"
|
||||
icon_state = "fox"
|
||||
extra = 1
|
||||
extra_color_src = MUTCOLORS2
|
||||
|
||||
/datum/sprite_accessory/mam_tails_animated/fox
|
||||
name = "Fox"
|
||||
icon_state = "fox"
|
||||
extra = 1
|
||||
extra_color_src = MUTCOLORS2
|
||||
|
||||
//Fennec
|
||||
/datum/sprite_accessory/mam_ears/fennec
|
||||
name = "Fennec"
|
||||
icon_state = "fennec"
|
||||
hasinner = 1
|
||||
|
||||
/datum/sprite_accessory/mam_tails/fennec
|
||||
name = "Fennec"
|
||||
icon_state = "fennec"
|
||||
|
||||
/datum/sprite_accessory/mam_tails_animated/fennec
|
||||
name = "Fennec"
|
||||
icon_state = "fennec"
|
||||
|
||||
//Lab
|
||||
/datum/sprite_accessory/mam_ears/lab
|
||||
name = "Dog, Long"
|
||||
icon_state = "lab"
|
||||
hasinner = 0
|
||||
|
||||
/datum/sprite_accessory/mam_tails/lab
|
||||
name = "Lab"
|
||||
icon_state = "lab"
|
||||
|
||||
/datum/sprite_accessory/mam_tails_animated/lab
|
||||
name = "Lab"
|
||||
icon_state = "lab"
|
||||
|
||||
//Husky
|
||||
/datum/sprite_accessory/mam_tails/husky
|
||||
name = "Husky"
|
||||
icon_state = "husky"
|
||||
extra = 1
|
||||
|
||||
//Mammal Specific Body Markings
|
||||
/datum/sprite_accessory/mam_body_markings
|
||||
color_src = MUTCOLORS2
|
||||
icon = 'icons/mob/mam_bodyparts.dmi'
|
||||
|
||||
/datum/sprite_accessory/mam_body_markings/none
|
||||
name = "None"
|
||||
icon_state = "none"
|
||||
|
||||
/datum/sprite_accessory/mam_body_markings/belly
|
||||
name = "Belly"
|
||||
icon_state = "belly"
|
||||
gender_specific = 1
|
||||
/*
|
||||
/datum/sprite_accessory/mam_body_markings/bellyhandsfeet
|
||||
name = "Belly, Hands, & Feet"
|
||||
icon_state = "bellyhandsfeet"
|
||||
gender_specific = 1
|
||||
extra = 1
|
||||
extra_color_src = MUTCOLORS3
|
||||
*/
|
||||
|
||||
//Exotic Bodyparts
|
||||
/*
|
||||
/datum/sprite_accessory/xeno_dorsal
|
||||
locked = 1
|
||||
name = "Dorsal Tubes"
|
||||
icon_state "dortubes"
|
||||
/datum/sprite_accessory/tails/xeno
|
||||
locked = 1
|
||||
name = "Xenomorph Tail"
|
||||
icon_state = "xenotail"
|
||||
*/
|
||||
@@ -41,7 +41,7 @@ EMOJIS
|
||||
## To speed things up make the number negative, to slow things down, make the number positive.
|
||||
|
||||
## These modify the run/walk speed of all mobs before the mob-specific modifiers are applied.
|
||||
RUN_DELAY 1
|
||||
RUN_DELAY 2
|
||||
WALK_DELAY 4
|
||||
|
||||
## The variables below affect the movement of specific mob types.
|
||||
@@ -277,16 +277,16 @@ JOIN_WITH_MUTANT_RACE
|
||||
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
|
||||
ROUNDSTART_RACES canid
|
||||
ROUNDSTART_RACES felid
|
||||
#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
|
||||
ROUNDSTART_RACES fly
|
||||
ROUNDSTART_RACES plasmaman
|
||||
#ROUNDSTART_RACES shadow
|
||||
#ROUNDSTART_RACES shadowling
|
||||
@@ -306,7 +306,7 @@ ROUNDSTART_RACES plasmaman
|
||||
## Races that are straight upgrades. If these are on expect powergamers to always pick them
|
||||
#ROUNDSTART_RACES skeleton
|
||||
#ROUNDSTART_RACES zombie
|
||||
#ROUNDSTART_RACES slime
|
||||
ROUNDSTART_RACES slime
|
||||
#ROUNDSTART_RACES pod
|
||||
#ROUNDSTART_RACES military_synth
|
||||
#ROUNDSTART_RACES agent
|
||||
@@ -314,7 +314,7 @@ ROUNDSTART_RACES plasmaman
|
||||
##-------------------------------------------------------------------------------------------
|
||||
|
||||
## Uncomment to give players the choice of joining as a human with mutant bodyparts before they join the game
|
||||
#JOIN_WITH_MUTANT_HUMANS
|
||||
JOIN_WITH_MUTANT_HUMANS
|
||||
|
||||
## Assistant slot cap. Set to -1 for unlimited.
|
||||
ASSISTANT_CAP -1
|
||||
@@ -354,9 +354,9 @@ REACTIONARY_EXPLOSIONS
|
||||
## Small (3, 7, 14)
|
||||
#BOMBCAP 14
|
||||
## Default (5, 10, 20) (recommended if you enable REACTIONARY_EXPLOSIONS above)
|
||||
BOMBCAP 20
|
||||
#BOMBCAP 20
|
||||
## LagHell (7, 14, 28)
|
||||
#BOMBCAP 28
|
||||
BOMBCAP 28
|
||||
|
||||
|
||||
## Lavaland "Budget"
|
||||
|
||||
|
Before Width: | Height: | Size: 101 KiB After Width: | Height: | Size: 101 KiB |
|
Before Width: | Height: | Size: 8.7 KiB After Width: | Height: | Size: 12 KiB |
|
Before Width: | Height: | Size: 287 KiB After Width: | Height: | Size: 290 KiB |
|
Before Width: | Height: | Size: 48 KiB After Width: | Height: | Size: 48 KiB |
|
Before Width: | Height: | Size: 42 KiB After Width: | Height: | Size: 43 KiB |
|
Before Width: | Height: | Size: 28 KiB After Width: | Height: | Size: 33 KiB |
BIN
icons/mob/mam_bodyparts.dmi
Normal file
|
After Width: | Height: | Size: 7.8 KiB |
|
Before Width: | Height: | Size: 44 KiB After Width: | Height: | Size: 45 KiB |
|
Before Width: | Height: | Size: 137 KiB After Width: | Height: | Size: 140 KiB |
|
Before Width: | Height: | Size: 82 KiB After Width: | Height: | Size: 82 KiB |
|
Before Width: | Height: | Size: 14 KiB After Width: | Height: | Size: 23 KiB |
|
Before Width: | Height: | Size: 381 KiB After Width: | Height: | Size: 426 KiB |
|
Before Width: | Height: | Size: 49 KiB After Width: | Height: | Size: 64 KiB |
@@ -126,17 +126,8 @@
|
||||
#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\citadel\_helpers.dm"
|
||||
#include "code\citadel\organs.dm"
|
||||
#include "code\controllers\admin.dm"
|
||||
#include "code\controllers\configuration.dm"
|
||||
#include "code\controllers\controller.dm"
|
||||
|
||||