mirror of
https://github.com/CHOMPstation/CHOMPstation.git
synced 2026-08-26 21:46:51 +01:00
Merge branch 'virgoMaster' into virgoPull
This commit is contained in:
@@ -31,7 +31,6 @@ var/datum/admin_secrets/admin_secrets = new()
|
||||
var/list/datum/admin_secret_item/items
|
||||
|
||||
/datum/admin_secret_category
|
||||
..()
|
||||
items = list()
|
||||
|
||||
/datum/admin_secret_category/proc/can_view(var/mob/user)
|
||||
|
||||
@@ -365,7 +365,7 @@
|
||||
icon_state = "da"
|
||||
|
||||
/obj/structure/symbol/em
|
||||
desc = "It looks like the letter 'Y' with an underline."
|
||||
desc = "It looks kind of like a cup. Specifically, a martini glass."
|
||||
icon_state = "em"
|
||||
|
||||
/obj/structure/symbol/es
|
||||
@@ -381,7 +381,7 @@
|
||||
icon_state = "gu"
|
||||
|
||||
/obj/structure/symbol/lo
|
||||
desc = "It looks kind of like a cup. Specifically, a martini glass."
|
||||
desc = "It looks like the letter 'Y' with an underline."
|
||||
icon_state = "lo"
|
||||
|
||||
/obj/structure/symbol/pr
|
||||
|
||||
@@ -64,7 +64,7 @@
|
||||
|
||||
//Logs all hrefs
|
||||
if(config && config.log_hrefs && href_logfile)
|
||||
href_logfile << "<small>[time2text(world.timeofday,"hh:mm")] [src] (usr:[usr])</small> || [hsrc ? "[hsrc] " : ""][href]<br>"
|
||||
href_logfile << "[src] (usr:[usr])</small> || [hsrc ? "[hsrc] " : ""][href]"
|
||||
|
||||
switch(href_list["_src_"])
|
||||
if("holder") hsrc = holder
|
||||
|
||||
@@ -8,6 +8,7 @@
|
||||
S["UI_style_alpha"] >> pref.UI_style_alpha
|
||||
S["ooccolor"] >> pref.ooccolor
|
||||
S["tooltipstyle"] >> pref.tooltipstyle
|
||||
S["client_fps"] >> pref.client_fps
|
||||
|
||||
/datum/category_item/player_setup_item/player_global/ui/save_preferences(var/savefile/S)
|
||||
S["UI_style"] << pref.UI_style
|
||||
@@ -15,6 +16,7 @@
|
||||
S["UI_style_alpha"] << pref.UI_style_alpha
|
||||
S["ooccolor"] << pref.ooccolor
|
||||
S["tooltipstyle"] << pref.tooltipstyle
|
||||
S["client_fps"] << pref.client_fps
|
||||
|
||||
/datum/category_item/player_setup_item/player_global/ui/sanitize_preferences()
|
||||
pref.UI_style = sanitize_inlist(pref.UI_style, all_ui_styles, initial(pref.UI_style))
|
||||
@@ -22,6 +24,7 @@
|
||||
pref.UI_style_alpha = sanitize_integer(pref.UI_style_alpha, 0, 255, initial(pref.UI_style_alpha))
|
||||
pref.ooccolor = sanitize_hexcolor(pref.ooccolor, initial(pref.ooccolor))
|
||||
pref.tooltipstyle = sanitize_inlist(pref.tooltipstyle, all_tooltip_styles, initial(pref.tooltipstyle))
|
||||
pref.client_fps = sanitize_integer(pref.client_fps, 0, MAX_CLIENT_FPS, initial(pref.client_fps))
|
||||
|
||||
/datum/category_item/player_setup_item/player_global/ui/content(var/mob/user)
|
||||
. = "<b>UI Style:</b> <a href='?src=\ref[src];select_style=1'><b>[pref.UI_style]</b></a><br>"
|
||||
@@ -29,6 +32,7 @@
|
||||
. += "-Color: <a href='?src=\ref[src];select_color=1'><b>[pref.UI_style_color]</b></a> <table style='display:inline;' bgcolor='[pref.UI_style_color]'><tr><td>__</td></tr></table> <a href='?src=\ref[src];reset=ui'>reset</a><br>"
|
||||
. += "-Alpha(transparency): <a href='?src=\ref[src];select_alpha=1'><b>[pref.UI_style_alpha]</b></a> <a href='?src=\ref[src];reset=alpha'>reset</a><br>"
|
||||
. += "<b>Tooltip Style:</b> <a href='?src=\ref[src];select_tooltip_style=1'><b>[pref.tooltipstyle]</b></a><br>"
|
||||
. += "<b>Client FPS:</b> <a href='?src=\ref[src];select_client_fps=1'><b>[pref.client_fps]</b></a><br>"
|
||||
if(can_select_ooc_color(user))
|
||||
. += "<b>OOC Color:</b> "
|
||||
if(pref.ooccolor == initial(pref.ooccolor))
|
||||
@@ -62,11 +66,20 @@
|
||||
return TOPIC_REFRESH
|
||||
|
||||
else if(href_list["select_tooltip_style"])
|
||||
var/tooltip_style_new = input(user, "Choose tooltip style.", "Character Preference", pref.tooltipstyle) as null|anything in all_tooltip_styles
|
||||
var/tooltip_style_new = input(user, "Choose tooltip style.", "Global Preference", pref.tooltipstyle) as null|anything in all_tooltip_styles
|
||||
if(!tooltip_style_new || !CanUseTopic(user)) return TOPIC_NOACTION
|
||||
pref.tooltipstyle = tooltip_style_new
|
||||
return TOPIC_REFRESH
|
||||
|
||||
else if(href_list["select_client_fps"])
|
||||
var/fps_new = input(user, "Input Client FPS (1-200, 0 uses server FPS)", "Global Preference", pref.client_fps) as null|num
|
||||
if(isnull(fps_new) || !CanUseTopic(user)) return TOPIC_NOACTION
|
||||
if(fps_new < 0 || fps_new > MAX_CLIENT_FPS) return TOPIC_NOACTION
|
||||
pref.client_fps = fps_new
|
||||
if(pref.client)
|
||||
pref.client.fps = fps_new
|
||||
return TOPIC_REFRESH
|
||||
|
||||
else if(href_list["reset"])
|
||||
switch(href_list["reset"])
|
||||
if("ui")
|
||||
|
||||
@@ -193,6 +193,20 @@ var/list/_client_preferences_by_type
|
||||
enabled_description = "Fancy"
|
||||
disabled_description = "Plain"
|
||||
|
||||
/datum/client_preference/ambient_occlusion
|
||||
description = "Fake Ambient Occlusion"
|
||||
key = "AMBIENT_OCCLUSION_PREF"
|
||||
enabled_by_default = FALSE
|
||||
enabled_description = "On"
|
||||
disabled_description = "Off"
|
||||
|
||||
/datum/client_preference/ambient_occlusion/toggled(var/mob/preference_mob, var/enabled)
|
||||
. = ..()
|
||||
if(preference_mob && preference_mob.plane_holder)
|
||||
var/datum/plane_holder/PH = preference_mob.plane_holder
|
||||
PH.set_ao(VIS_OBJS, enabled)
|
||||
PH.set_ao(VIS_MOBS, enabled)
|
||||
|
||||
/********************
|
||||
* Staff Preferences *
|
||||
********************/
|
||||
|
||||
@@ -455,4 +455,4 @@ datum/gear/suit/duster
|
||||
/datum/gear/suit/snowsuit/cargo
|
||||
display_name = "snowsuit, supply"
|
||||
path = /obj/item/clothing/suit/storage/snowsuit/cargo
|
||||
allowed_roles = list("Quartermaster","shaft Miner","Cargo Technician","Head of Personnel")
|
||||
allowed_roles = list("Quartermaster","Shaft Miner","Cargo Technician","Head of Personnel")
|
||||
@@ -22,6 +22,7 @@ datum/preferences
|
||||
var/UI_style_color = "#ffffff"
|
||||
var/UI_style_alpha = 255
|
||||
var/tooltipstyle = "Midnight" //Style for popup tooltips
|
||||
var/client_fps = 0
|
||||
|
||||
//character preferences
|
||||
var/real_name //our character's name
|
||||
|
||||
@@ -99,11 +99,33 @@
|
||||
)
|
||||
//"Spider" = 'icons/mob/species/spider/mask_vr.dmi' Add this later when they have custom mask sprites and everything.
|
||||
|
||||
//Switch to taur sprites if a taur equips
|
||||
/obj/item/clothing/suit
|
||||
var/taurized = FALSE //Easier than trying to 'compare icons' to see if it's a taur suit
|
||||
|
||||
/obj/item/clothing/suit/equipped(var/mob/user, var/slot)
|
||||
var/normalize = TRUE
|
||||
|
||||
//Pyramid of doom-y. Improve somehow?
|
||||
if(!taurized && slot == slot_wear_suit && ishuman(user))
|
||||
var/mob/living/carbon/human/H = user
|
||||
if(isTaurTail(H.tail_style))
|
||||
var/datum/sprite_accessory/tail/taur/taurtail = H.tail_style
|
||||
if(taurtail.suit_sprites && (get_worn_icon_state(slot_wear_suit_str) in icon_states(taurtail.suit_sprites)))
|
||||
icon_override = taurtail.suit_sprites
|
||||
normalize = FALSE
|
||||
taurized = TRUE
|
||||
|
||||
if(normalize && taurized)
|
||||
icon_override = initial(icon_override)
|
||||
taurized = FALSE
|
||||
|
||||
return ..()
|
||||
|
||||
// Taur suits need to be shifted so its centered on their taur half.
|
||||
// TODO - Instead of just assuming this junk, shift some of the data onto the taur tail datum.
|
||||
/obj/item/clothing/suit/make_worn_icon(var/body_type,var/slot_name,var/inhands,var/default_icon,var/default_layer = 0)
|
||||
var/image/standing = ..()
|
||||
if(icon_override && icon_override == 'icons/mob/taursuits_vr.dmi')
|
||||
if(taurized) //Special snowflake var on suits
|
||||
standing.pixel_x = -16
|
||||
standing.layer = BODY_LAYER + 15 // 15 is above tail layer, so will not be covered by taurbody.
|
||||
return standing
|
||||
|
||||
@@ -99,7 +99,7 @@
|
||||
slot_l_hand_str = "engiewelding",
|
||||
slot_r_hand_str = "engiewelding",
|
||||
)
|
||||
.
|
||||
|
||||
|
||||
/*
|
||||
* Cakehat
|
||||
@@ -272,4 +272,4 @@
|
||||
|
||||
/obj/item/clothing/head/psy_crown/wrath/activate_ability(var/mob/living/wearer)
|
||||
..()
|
||||
wearer.add_modifier(/datum/modifier/berserk, 30 SECONDS)
|
||||
wearer.add_modifier(/datum/modifier/berserk, 30 SECONDS)
|
||||
|
||||
@@ -32,300 +32,6 @@
|
||||
SPECIES_VOX = 'icons/mob/species/vox/suit.dmi'
|
||||
)
|
||||
|
||||
/obj/item/clothing/suit/space/rig
|
||||
mob_can_equip(var/mob/living/carbon/human/H, slot, disable_warning = 0)
|
||||
if(icon_state == "security_rig_sealed")
|
||||
if(istype(H) && istype(H.tail_style, /datum/sprite_accessory/tail/taur/horse))
|
||||
icon = 'icons/mob/taursuits_vr.dmi'
|
||||
icon_override = 'icons/mob/taursuits_vr.dmi'
|
||||
icon_state = "breacher_rig_cheap-horse_sealed" //They have to toggle the chest piece off then on again for this to show up.
|
||||
pixel_x = -16
|
||||
update_icon()
|
||||
return 1
|
||||
else if(istype(H) && istype(H.tail_style, /datum/sprite_accessory/tail/taur/wolf))
|
||||
icon = 'icons/mob/taursuits_vr.dmi'
|
||||
icon_override = 'icons/mob/taursuits_vr.dmi'
|
||||
icon_state = "breacher_rig_cheap-wolf_sealed"
|
||||
pixel_x = -16
|
||||
update_icon()
|
||||
return 1
|
||||
else if(istype(H) && istype(H.tail_style, /datum/sprite_accessory/tail/taur/naga))
|
||||
icon = 'icons/mob/taursuits_vr.dmi'
|
||||
icon_override = 'icons/mob/taursuits_vr.dmi'
|
||||
icon_state = "breacher_rig_cheap-naga_sealed"
|
||||
pixel_x = -16
|
||||
update_icon()
|
||||
return 1
|
||||
else
|
||||
icon = 'icons/obj/clothing/suits.dmi'
|
||||
icon_override = null
|
||||
icon_state = "security_rig_sealed"
|
||||
pixel_x = 0
|
||||
update_icon()
|
||||
return 1
|
||||
else if(icon_state == "engineering_rig_sealed")
|
||||
if(istype(H) && istype(H.tail_style, /datum/sprite_accessory/tail/taur/horse))
|
||||
icon = 'icons/mob/taursuits_vr.dmi'
|
||||
icon_override = 'icons/mob/taursuits_vr.dmi'
|
||||
icon_state = "industrial_rig-horse_sealed"
|
||||
pixel_x = -16
|
||||
update_icon()
|
||||
return 1
|
||||
else if(istype(H) && istype(H.tail_style, /datum/sprite_accessory/tail/taur/wolf))
|
||||
icon = 'icons/mob/taursuits_vr.dmi'
|
||||
icon_override = 'icons/mob/taursuits_vr.dmi'
|
||||
icon_state = "industrial_rig-wolf_sealed"
|
||||
pixel_x = -16
|
||||
update_icon()
|
||||
return 1
|
||||
else if(istype(H) && istype(H.tail_style, /datum/sprite_accessory/tail/taur/naga))
|
||||
icon = 'icons/mob/taursuits_vr.dmi'
|
||||
icon_override = 'icons/mob/taursuits_vr.dmi'
|
||||
icon_state = "industrial_rig-naga_sealed"
|
||||
pixel_x = -16
|
||||
update_icon()
|
||||
return 1
|
||||
else
|
||||
icon = 'icons/obj/clothing/suits.dmi'
|
||||
icon_override = null
|
||||
icon_state = "engineering_rig_sealed"
|
||||
pixel_x = 0
|
||||
update_icon()
|
||||
return 1
|
||||
else if(icon_state == "science_rig_sealed")
|
||||
if(istype(H) && istype(H.tail_style, /datum/sprite_accessory/tail/taur/horse))
|
||||
icon = 'icons/mob/taursuits_vr.dmi'
|
||||
icon_override = 'icons/mob/taursuits_vr.dmi'
|
||||
icon_state = "science_rig-horse_sealed"
|
||||
pixel_x = -16
|
||||
update_icon()
|
||||
return 1
|
||||
else if(istype(H) && istype(H.tail_style, /datum/sprite_accessory/tail/taur/wolf))
|
||||
icon = 'icons/mob/taursuits_vr.dmi'
|
||||
icon_override = 'icons/mob/taursuits_vr.dmi'
|
||||
icon_state = "science_rig-wolf_sealed"
|
||||
pixel_x = -16
|
||||
update_icon()
|
||||
return 1
|
||||
else if(istype(H) && istype(H.tail_style, /datum/sprite_accessory/tail/taur/naga))
|
||||
icon = 'icons/mob/taursuits_vr.dmi'
|
||||
icon_override = 'icons/mob/taursuits_vr.dmi'
|
||||
icon_state = "science_rig-naga_sealed"
|
||||
pixel_x = -16
|
||||
update_icon()
|
||||
return 1
|
||||
else
|
||||
icon = 'icons/obj/clothing/suits.dmi'
|
||||
icon_override = null
|
||||
icon_state = "science_rig_sealed"
|
||||
pixel_x = 0
|
||||
update_icon()
|
||||
return 1
|
||||
else if(icon_state == "medical_rig_sealed")
|
||||
if(istype(H) && istype(H.tail_style, /datum/sprite_accessory/tail/taur/horse))
|
||||
icon = 'icons/mob/taursuits_vr.dmi'
|
||||
icon_override = 'icons/mob/taursuits_vr.dmi'
|
||||
icon_state = "medical_rig-horse_sealed"
|
||||
pixel_x = -16
|
||||
update_icon()
|
||||
return 1
|
||||
else if(istype(H) && istype(H.tail_style, /datum/sprite_accessory/tail/taur/wolf))
|
||||
icon = 'icons/mob/taursuits_vr.dmi'
|
||||
icon_override = 'icons/mob/taursuits_vr.dmi'
|
||||
icon_state = "medical_rig-wolf_sealed"
|
||||
pixel_x = -16
|
||||
update_icon()
|
||||
return 1
|
||||
else if(istype(H) && istype(H.tail_style, /datum/sprite_accessory/tail/taur/naga))
|
||||
icon = 'icons/mob/taursuits_vr.dmi'
|
||||
icon_override = 'icons/mob/taursuits_vr.dmi'
|
||||
icon_state = "medical_rig-naga_sealed"
|
||||
pixel_x = -16
|
||||
update_icon()
|
||||
return 1
|
||||
else
|
||||
icon = 'icons/obj/clothing/suits.dmi'
|
||||
icon_override = null
|
||||
icon_state = "medical_rig_sealed"
|
||||
pixel_x = 0
|
||||
update_icon()
|
||||
return 1
|
||||
else if(icon_state == "security_rig")
|
||||
if(istype(H) && istype(H.tail_style, /datum/sprite_accessory/tail/taur/horse))
|
||||
icon = 'icons/mob/taursuits_vr.dmi'
|
||||
icon_override = 'icons/mob/taursuits_vr.dmi'
|
||||
icon_state = "breacher_rig_cheap-horse_sealed"
|
||||
pixel_x = -16
|
||||
update_icon()
|
||||
return 1
|
||||
else if(istype(H) && istype(H.tail_style, /datum/sprite_accessory/tail/taur/wolf))
|
||||
icon = 'icons/mob/taursuits_vr.dmi'
|
||||
icon_override = 'icons/mob/taursuits_vr.dmi'
|
||||
icon_state = "breacher_rig_cheap-wolf_sealed"
|
||||
pixel_x = -16
|
||||
update_icon()
|
||||
return 1
|
||||
else if(istype(H) && istype(H.tail_style, /datum/sprite_accessory/tail/taur/naga))
|
||||
icon = 'icons/mob/taursuits_vr.dmi'
|
||||
icon_override = 'icons/mob/taursuits_vr.dmi'
|
||||
icon_state = "breacher_rig_cheap-naga_sealed"
|
||||
pixel_x = -16
|
||||
update_icon()
|
||||
return 1
|
||||
else
|
||||
icon = 'icons/obj/clothing/suits.dmi'
|
||||
icon_override = null
|
||||
icon_state = "security_rig"
|
||||
pixel_x = 0
|
||||
update_icon()
|
||||
return 1
|
||||
else if(icon_state == "engineering_rig")
|
||||
if(istype(H) && istype(H.tail_style, /datum/sprite_accessory/tail/taur/horse))
|
||||
icon = 'icons/mob/taursuits_vr.dmi'
|
||||
icon_override = 'icons/mob/taursuits_vr.dmi'
|
||||
icon_state = "industrial_rig-horse_sealed"
|
||||
pixel_x = -16
|
||||
update_icon()
|
||||
return 1
|
||||
else if(istype(H) && istype(H.tail_style, /datum/sprite_accessory/tail/taur/wolf))
|
||||
icon = 'icons/mob/taursuits_vr.dmi'
|
||||
icon_override = 'icons/mob/taursuits_vr.dmi'
|
||||
icon_state = "industrial_rig-wolf_sealed"
|
||||
pixel_x = -16
|
||||
update_icon()
|
||||
return 1
|
||||
else if(istype(H) && istype(H.tail_style, /datum/sprite_accessory/tail/taur/naga))
|
||||
icon = 'icons/mob/taursuits_vr.dmi'
|
||||
icon_override = 'icons/mob/taursuits_vr.dmi'
|
||||
icon_state = "industrial_rig-naga_sealed"
|
||||
pixel_x = -16
|
||||
update_icon()
|
||||
return 1
|
||||
else
|
||||
icon = 'icons/obj/clothing/suits.dmi'
|
||||
icon_override = null
|
||||
icon_state = "engineering_rig"
|
||||
pixel_x = 0
|
||||
update_icon()
|
||||
return 1
|
||||
else if(icon_state == "science_rig")
|
||||
if(istype(H) && istype(H.tail_style, /datum/sprite_accessory/tail/taur/horse))
|
||||
icon = 'icons/mob/taursuits_vr.dmi'
|
||||
icon_override = 'icons/mob/taursuits_vr.dmi'
|
||||
icon_state = "science_rig-horse_sealed"
|
||||
pixel_x = -16
|
||||
update_icon()
|
||||
return 1
|
||||
else if(istype(H) && istype(H.tail_style, /datum/sprite_accessory/tail/taur/wolf))
|
||||
icon = 'icons/mob/taursuits_vr.dmi'
|
||||
icon_override = 'icons/mob/taursuits_vr.dmi'
|
||||
icon_state = "science_rig-wolf_sealed"
|
||||
return 1
|
||||
else if(istype(H) && istype(H.tail_style, /datum/sprite_accessory/tail/taur/naga))
|
||||
icon = 'icons/mob/taursuits_vr.dmi'
|
||||
icon_override = 'icons/mob/taursuits_vr.dmi'
|
||||
icon_state = "science_rig-naga_sealed"
|
||||
pixel_x = -16
|
||||
update_icon()
|
||||
return 1
|
||||
else
|
||||
icon = 'icons/obj/clothing/suits.dmi'
|
||||
icon_override = null
|
||||
icon_state = "science_rig"
|
||||
pixel_x = 0
|
||||
update_icon()
|
||||
return 1
|
||||
else if(icon_state == "medical_rig")
|
||||
if(istype(H) && istype(H.tail_style, /datum/sprite_accessory/tail/taur/horse))
|
||||
icon = 'icons/mob/taursuits_vr.dmi'
|
||||
icon_override = 'icons/mob/taursuits_vr.dmi'
|
||||
icon_state = "medical_rig-horse_sealed"
|
||||
pixel_x = -16
|
||||
update_icon()
|
||||
return 1
|
||||
else if(istype(H) && istype(H.tail_style, /datum/sprite_accessory/tail/taur/wolf))
|
||||
icon = 'icons/mob/taursuits_vr.dmi'
|
||||
icon_override = 'icons/mob/taursuits_vr.dmi'
|
||||
icon_state = "medical_rig-wolf_sealed"
|
||||
pixel_x = -16
|
||||
update_icon()
|
||||
return 1
|
||||
else if(istype(H) && istype(H.tail_style, /datum/sprite_accessory/tail/taur/naga))
|
||||
icon = 'icons/mob/taursuits_vr.dmi'
|
||||
icon_override = 'icons/mob/taursuits_vr.dmi'
|
||||
icon_state = "medical_rig-naga_sealed"
|
||||
pixel_x = -16
|
||||
update_icon()
|
||||
return 1
|
||||
else
|
||||
icon = 'icons/obj/clothing/suits.dmi'
|
||||
icon_override = null
|
||||
icon_state = "medical_rig"
|
||||
pixel_x = 0
|
||||
update_icon()
|
||||
return 1
|
||||
else
|
||||
return 1
|
||||
|
||||
|
||||
|
||||
/obj/item/clothing/suit/space/rig/ce
|
||||
mob_can_equip(var/mob/living/carbon/human/H, slot, disable_warning = 0)
|
||||
if(icon_state == "ce_rig")
|
||||
if(istype(H) && istype(H.tail_style, /datum/sprite_accessory/tail/taur/horse))
|
||||
icon_override = 'icons/mob/taursuits_vr.dmi'
|
||||
icon_state = "ce_rig-horse"
|
||||
pixel_x = -16
|
||||
update_icon()
|
||||
return 1
|
||||
else if(istype(H) && istype(H.tail_style, /datum/sprite_accessory/tail/taur/wolf))
|
||||
icon_override = 'icons/mob/taursuits_vr.dmi'
|
||||
icon_state = "ce_rig-wolf"
|
||||
pixel_x = -16
|
||||
update_icon()
|
||||
return 1
|
||||
else if(istype(H) && istype(H.tail_style, /datum/sprite_accessory/tail/taur/naga))
|
||||
icon_override = 'icons/mob/taursuits_vr.dmi'
|
||||
icon_state = "ce_rig-naga"
|
||||
pixel_x = -16
|
||||
update_icon()
|
||||
return 1
|
||||
else
|
||||
icon = 'icons/obj/clothing/suits.dmi'
|
||||
icon_override = null
|
||||
icon_state = "ce_rig"
|
||||
pixel_x = 0
|
||||
update_icon()
|
||||
return 1
|
||||
else if(icon_state == "ce_rig_sealed")
|
||||
if(istype(H) && istype(H.tail_style, /datum/sprite_accessory/tail/taur/horse))
|
||||
icon_override = 'icons/mob/taursuits_vr.dmi'
|
||||
icon_state = "ce_rig-horse_sealed"
|
||||
pixel_x = -16
|
||||
update_icon()
|
||||
return 1
|
||||
else if(istype(H) && istype(H.tail_style, /datum/sprite_accessory/tail/taur/wolf))
|
||||
icon_override = 'icons/mob/taursuits_vr.dmi'
|
||||
icon_state = "ce_rig-wolf_sealed"
|
||||
pixel_x = -16
|
||||
update_icon()
|
||||
return 1
|
||||
else if(istype(H) && istype(H.tail_style, /datum/sprite_accessory/tail/taur/naga))
|
||||
icon_override = 'icons/mob/taursuits_vr.dmi'
|
||||
icon_state = "ce_rig-naga_sealed"
|
||||
pixel_x = -16
|
||||
update_icon()
|
||||
return 1
|
||||
else
|
||||
icon = 'icons/obj/clothing/suits.dmi'
|
||||
icon_override = null
|
||||
icon_state = "ce_rig_sealed"
|
||||
pixel_x = 0
|
||||
update_icon()
|
||||
return 1
|
||||
else
|
||||
return 1
|
||||
|
||||
/obj/item/clothing/head/helmet/space/rig
|
||||
phoronproof = 1
|
||||
/obj/item/clothing/gloves/gauntlets/rig
|
||||
|
||||
@@ -103,7 +103,6 @@
|
||||
/obj/item/rig_module/self_destruct
|
||||
)
|
||||
|
||||
..()
|
||||
|
||||
/obj/item/clothing/gloves/gauntlets/rig/light/ninja
|
||||
name = "insulated gloves"
|
||||
|
||||
@@ -74,297 +74,50 @@
|
||||
// however the species spritesheet now means we no longer need that anyway!
|
||||
sprite_sheets_refit = list()
|
||||
|
||||
/obj/item/clothing/suit/space/void/explorer
|
||||
desc = "A classy red voidsuit for the needs of any semi-retro-futuristic spaceperson! This one is rather loose fitting."
|
||||
species_restricted = list(
|
||||
SPECIES_HUMAN,
|
||||
SPECIES_SKRELL,
|
||||
SPECIES_UNATHI,
|
||||
SPECIES_TAJ,
|
||||
SPECIES_TESHARI,
|
||||
SPECIES_AKULA,
|
||||
SPECIES_ALRAUNE,
|
||||
SPECIES_NEVREAN,
|
||||
SPECIES_RAPALA,
|
||||
SPECIES_SERGAL,
|
||||
SPECIES_VASILISSAN,
|
||||
SPECIES_VULPKANIN,
|
||||
SPECIES_XENOCHIMERA,
|
||||
SPECIES_XENOHYBRID,
|
||||
SPECIES_ZORREN_FLAT,
|
||||
SPECIES_ZORREN_HIGH
|
||||
)
|
||||
/obj/item/clothing/suit/space/void/explorer/initialize()
|
||||
. = ..()
|
||||
sprite_sheets += sprite_sheets_refit
|
||||
|
||||
|
||||
/obj/item/clothing/suit/space/void/merc/taur
|
||||
name = "taur specific blood-red voidsuit"
|
||||
desc = "A high-tech space suit. It says has a sticker saying one size fits all taurs on it. Below the sticker, it states that it only fits horses, wolves, and naga taurs."
|
||||
species_restricted = null //Species restricted since all it cares about is a taur half
|
||||
mob_can_equip(var/mob/living/carbon/human/H, slot, disable_warning = 0)
|
||||
if(..())
|
||||
if(istype(H) && istype(H.tail_style, /datum/sprite_accessory/tail/taur/horse))
|
||||
icon_override = 'icons/mob/taursuits_vr.dmi'
|
||||
icon_state = "syndie-horse"
|
||||
item_state = "syndie-horse"
|
||||
pixel_x = -16
|
||||
return 1
|
||||
else if(istype(H) && istype(H.tail_style, /datum/sprite_accessory/tail/taur/wolf))
|
||||
icon_override = 'icons/mob/taursuits_vr.dmi'
|
||||
icon_state = "syndie-wolf"
|
||||
item_state = "syndie-wolf"
|
||||
pixel_x = -16
|
||||
return 1
|
||||
else if(istype(H) && istype(H.tail_style, /datum/sprite_accessory/tail/taur/naga))
|
||||
icon_override = 'icons/mob/taursuits_vr.dmi'
|
||||
icon_state = "syndie-naga"
|
||||
item_state = "syndie-naga"
|
||||
pixel_x = -16
|
||||
return 1
|
||||
else
|
||||
H << "<span class='warning'>You need to have a horse, wolf, or naga half to wear this.</span>"
|
||||
return 0
|
||||
|
||||
/obj/item/clothing/suit/space/void/medical/taur
|
||||
name = "taur specific medical voidsuit"
|
||||
desc = "A high-tech space suit. It says has a sticker saying one size fits all taurs on it. Below the sticker, it states that it only fits horses, wolves, and naga taurs."
|
||||
species_restricted = null
|
||||
mob_can_equip(var/mob/living/carbon/human/H, slot, disable_warning = 0)
|
||||
if(..())
|
||||
if(istype(H) && istype(H.tail_style, /datum/sprite_accessory/tail/taur/horse))
|
||||
icon = 'icons/mob/taursuits_vr.dmi'
|
||||
icon_override = 'icons/mob/taursuits_vr.dmi'
|
||||
icon_state = "medical-horse"
|
||||
item_state = "medical-horse"
|
||||
pixel_x = -16
|
||||
return 1
|
||||
else if(istype(H) && istype(H.tail_style, /datum/sprite_accessory/tail/taur/wolf))
|
||||
icon = 'icons/mob/taursuits_vr.dmi'
|
||||
icon_override = 'icons/mob/taursuits_vr.dmi'
|
||||
icon_state = "medical-wolf"
|
||||
item_state = "medical-wolf"
|
||||
pixel_x = -16
|
||||
return 1
|
||||
else if(istype(H) && istype(H.tail_style, /datum/sprite_accessory/tail/taur/naga))
|
||||
icon = 'icons/mob/taursuits_vr.dmi'
|
||||
icon_override = 'icons/mob/taursuits_vr.dmi'
|
||||
icon_state = "medical-naga"
|
||||
item_state = "medical-naga"
|
||||
pixel_x = -16
|
||||
return 1
|
||||
else
|
||||
H << "<span class='warning'>You need to have a horse, wolf, or naga half to wear this.</span>"
|
||||
return 0
|
||||
|
||||
/obj/item/clothing/suit/space/void/medical/alt/taur
|
||||
name = "taur specific streamlined medical voidsuit"
|
||||
desc = "A more recent model of Vey-Med voidsuit, featuring the latest in radiation shielding technology. It has a sticker saying one size fits all taurs on it. Below the sticker, it states that it only fits horses, wolves, and naga taurs."
|
||||
species_restricted = null
|
||||
mob_can_equip(var/mob/living/carbon/human/H, slot, disable_warning = 0)
|
||||
if(..())
|
||||
if(istype(H) && istype(H.tail_style, /datum/sprite_accessory/tail/taur/horse))
|
||||
icon = 'icons/mob/taursuits_vr.dmi'
|
||||
icon_override = 'icons/mob/taursuits_vr.dmi'
|
||||
icon_state = "medicalalt-horse"
|
||||
item_state = "medicalalt-horse"
|
||||
pixel_x = -16
|
||||
return 1
|
||||
else if(istype(H) && istype(H.tail_style, /datum/sprite_accessory/tail/taur/wolf))
|
||||
icon = 'icons/mob/taursuits_vr.dmi'
|
||||
icon_override = 'icons/mob/taursuits_vr.dmi'
|
||||
icon_state = "medicalalt-wolf"
|
||||
item_state = "medicalalt-wolf"
|
||||
pixel_x = -16
|
||||
return 1
|
||||
else if(istype(H) && istype(H.tail_style, /datum/sprite_accessory/tail/taur/naga))
|
||||
icon = 'icons/mob/taursuits_vr.dmi'
|
||||
icon_override = 'icons/mob/taursuits_vr.dmi'
|
||||
icon_state = "medicalalt-naga"
|
||||
item_state = "medicalalt-naga"
|
||||
pixel_x = -16
|
||||
return 1
|
||||
else
|
||||
H << "<span class='warning'>You need to have a horse, wolf, or naga half to wear this.</span>"
|
||||
return 0
|
||||
|
||||
/obj/item/clothing/suit/space/void/engineering/taur
|
||||
name = "taur specific engineering voidsuit"
|
||||
desc = "A high-tech space suit. It says has a sticker saying one size fits all taurs on it. Below the sticker, it states that it only fits horses, wolves, and naga taurs."
|
||||
species_restricted = null
|
||||
mob_can_equip(var/mob/living/carbon/human/H, slot, disable_warning = 0)
|
||||
if(..())
|
||||
if(istype(H) && istype(H.tail_style, /datum/sprite_accessory/tail/taur/horse))
|
||||
icon = 'icons/mob/taursuits_vr.dmi'
|
||||
icon_override = 'icons/mob/taursuits_vr.dmi'
|
||||
icon_state = "engineering-horse"
|
||||
item_state = "engineering-horse"
|
||||
pixel_x = -16
|
||||
return 1
|
||||
else if(istype(H) && istype(H.tail_style, /datum/sprite_accessory/tail/taur/wolf))
|
||||
icon = 'icons/mob/taursuits_vr.dmi'
|
||||
icon_override = 'icons/mob/taursuits_vr.dmi'
|
||||
icon_state = "engineering-wolf"
|
||||
item_state = "engineering-wolf"
|
||||
pixel_x = -16
|
||||
return 1
|
||||
else if(istype(H) && istype(H.tail_style, /datum/sprite_accessory/tail/taur/naga))
|
||||
icon = 'icons/mob/taursuits_vr.dmi'
|
||||
icon_override = 'icons/mob/taursuits_vr.dmi'
|
||||
icon_state = "engineering-naga"
|
||||
item_state = "engineering-naga"
|
||||
pixel_x = -16
|
||||
return 1
|
||||
else
|
||||
H << "<span class='warning'>You need to have a horse, wolf, or naga half to wear this.</span>"
|
||||
return 0
|
||||
|
||||
|
||||
/obj/item/clothing/suit/space/void/security/taur
|
||||
name = "taur specific security voidsuit"
|
||||
desc = "A high-tech space suit. It says has a sticker saying one size fits all taurs on it. Below the sticker, it states that it only fits horses, wolves, and naga taurs."
|
||||
species_restricted = null
|
||||
mob_can_equip(var/mob/living/carbon/human/H, slot, disable_warning = 0)
|
||||
if(..())
|
||||
if(istype(H) && istype(H.tail_style, /datum/sprite_accessory/tail/taur/horse))
|
||||
icon = 'icons/mob/taursuits_vr.dmi'
|
||||
icon_override = 'icons/mob/taursuits_vr.dmi'
|
||||
icon_state = "security-horse"
|
||||
item_state = "security-horse"
|
||||
pixel_x = -16
|
||||
update_icon()
|
||||
return 1
|
||||
else if(istype(H) && istype(H.tail_style, /datum/sprite_accessory/tail/taur/wolf))
|
||||
icon = 'icons/mob/taursuits_vr.dmi'
|
||||
icon_override = 'icons/mob/taursuits_vr.dmi'
|
||||
icon_state = "security-wolf"
|
||||
item_state = "security-wolf"
|
||||
pixel_x = -16
|
||||
update_icon()
|
||||
return 1
|
||||
else if(istype(H) && istype(H.tail_style, /datum/sprite_accessory/tail/taur/naga))
|
||||
icon = 'icons/mob/taursuits_vr.dmi'
|
||||
icon_override = 'icons/mob/taursuits_vr.dmi'
|
||||
icon_state = "security-naga"
|
||||
item_state = "security-naga"
|
||||
pixel_x = -16
|
||||
update_icon()
|
||||
return 1
|
||||
else
|
||||
H << "<span class='warning'>You need to have a horse, wolf, or naga half to wear this.</span>"
|
||||
return 0
|
||||
|
||||
/obj/item/clothing/suit/space/void/security/alt/taur
|
||||
name = "taur specific riot security voidsuit"
|
||||
desc = "A heavily armored voidsuit. It has a sticker saying one size fits all taurs on it. Below the sticker, it states that it only fits horses, wolves, and naga taurs."
|
||||
armor = list(melee = 70, bullet = 20, laser = 30, energy = 5, bomb = 35, bio = 100, rad = 10)
|
||||
species_restricted = null
|
||||
mob_can_equip(var/mob/living/carbon/human/H, slot, disable_warning = 0)
|
||||
if(..())
|
||||
if(istype(H) && istype(H.tail_style, /datum/sprite_accessory/tail/taur/horse))
|
||||
icon = 'icons/mob/taursuits_vr.dmi'
|
||||
icon_override = 'icons/mob/taursuits_vr.dmi'
|
||||
icon_state = "securityalt-horse"
|
||||
item_state = "securityalt-horse"
|
||||
pixel_x = -16
|
||||
update_icon()
|
||||
return 1
|
||||
else if(istype(H) && istype(H.tail_style, /datum/sprite_accessory/tail/taur/wolf))
|
||||
icon = 'icons/mob/taursuits_vr.dmi'
|
||||
icon_override = 'icons/mob/taursuits_vr.dmi'
|
||||
icon_state = "securityalt-wolf"
|
||||
item_state = "securityalt-wolf"
|
||||
pixel_x = -16
|
||||
update_icon()
|
||||
return 1
|
||||
else if(istype(H) && istype(H.tail_style, /datum/sprite_accessory/tail/taur/naga))
|
||||
icon = 'icons/mob/taursuits_vr.dmi'
|
||||
icon_override = 'icons/mob/taursuits_vr.dmi'
|
||||
icon_state = "securityalt-naga"
|
||||
item_state = "securityalt-naga"
|
||||
pixel_x = -16
|
||||
update_icon()
|
||||
return 1
|
||||
else
|
||||
H << "<span class='warning'>You need to have a horse, wolf, or naga half to wear this.</span>"
|
||||
return 0
|
||||
|
||||
/obj/item/clothing/suit/space/void/security/riot/taur
|
||||
name = "taur specific crowd control voidsuit"
|
||||
desc = "A high-tech space suit. It has a sticker saying one size fits all taurs on it. Below the sticker, it states that it only fits horses, wolves, and naga taurs."
|
||||
species_restricted = null
|
||||
mob_can_equip(var/mob/living/carbon/human/H, slot, disable_warning = 0)
|
||||
if(..())
|
||||
if(istype(H) && istype(H.tail_style, /datum/sprite_accessory/tail/taur/horse))
|
||||
icon = 'icons/mob/taursuits_vr.dmi'
|
||||
icon_override = 'icons/mob/taursuits_vr.dmi'
|
||||
icon_state = "securityriot-horse"
|
||||
item_state = "securityriot-horse"
|
||||
pixel_x = -16
|
||||
update_icon()
|
||||
return 1
|
||||
else if(istype(H) && istype(H.tail_style, /datum/sprite_accessory/tail/taur/wolf))
|
||||
icon = 'icons/mob/taursuits_vr.dmi'
|
||||
icon_override = 'icons/mob/taursuits_vr.dmi'
|
||||
icon_state = "securityriot-wolf"
|
||||
item_state = "securityriot-wolf"
|
||||
pixel_x = -16
|
||||
update_icon()
|
||||
return 1
|
||||
else if(istype(H) && istype(H.tail_style, /datum/sprite_accessory/tail/taur/naga))
|
||||
icon = 'icons/mob/taursuits_vr.dmi'
|
||||
icon_override = 'icons/mob/taursuits_vr.dmi'
|
||||
icon_state = "securityriot-naga"
|
||||
item_state = "securityriot-naga"
|
||||
pixel_x = -16
|
||||
update_icon()
|
||||
return 1
|
||||
else
|
||||
H << "<span class='warning'>You need to have a horse, wolf, or naga half to wear this.</span>"
|
||||
return 0
|
||||
|
||||
/obj/item/clothing/suit/space/void/atmos/taur
|
||||
name = "taur specific atmospherics voidsuit"
|
||||
desc = "A high-tech space suit. It says has a sticker saying one size fits all taurs on it. Below the sticker, it states that it only fits horses, wolves, and naga taurs."
|
||||
species_restricted = null
|
||||
mob_can_equip(var/mob/living/carbon/human/H, slot, disable_warning = 0)
|
||||
if(..())
|
||||
if(istype(H) && istype(H.tail_style, /datum/sprite_accessory/tail/taur/horse))
|
||||
icon = 'icons/mob/taursuits_vr.dmi'
|
||||
icon_override = 'icons/mob/taursuits_vr.dmi'
|
||||
icon_state = "atmos-horse"
|
||||
item_state = "atmos-horse"
|
||||
pixel_x = -16
|
||||
update_icon()
|
||||
return 1
|
||||
else if(istype(H) && istype(H.tail_style, /datum/sprite_accessory/tail/taur/wolf))
|
||||
icon = 'icons/mob/taursuits_vr.dmi'
|
||||
icon_override = 'icons/mob/taursuits_vr.dmi'
|
||||
icon_state = "atmos-wolf"
|
||||
item_state = "atmos-wolf"
|
||||
pixel_x = -16
|
||||
update_icon()
|
||||
return 1
|
||||
else if(istype(H) && istype(H.tail_style, /datum/sprite_accessory/tail/taur/naga))
|
||||
icon = 'icons/mob/taursuits_vr.dmi'
|
||||
icon_override = 'icons/mob/taursuits_vr.dmi'
|
||||
icon_state = "atmos-naga"
|
||||
item_state = "atmos-naga"
|
||||
pixel_x = -16
|
||||
update_icon()
|
||||
return 1
|
||||
else
|
||||
H << "<span class='warning'>You need to have a horse, wolf, or naga half to wear this.</span>"
|
||||
return 0
|
||||
|
||||
/obj/item/clothing/suit/space/void/mining/taur
|
||||
name = "taur specific mining voidsuit"
|
||||
desc = "A high-tech space suit. It says has a sticker saying one size fits all taurs on it. Below the sticker, it states that it only fits horses, wolves, and naga taurs."
|
||||
species_restricted = null
|
||||
mob_can_equip(var/mob/living/carbon/human/H, slot, disable_warning = 0)
|
||||
if(..())
|
||||
if(istype(H) && istype(H.tail_style, /datum/sprite_accessory/tail/taur/horse))
|
||||
icon = 'icons/mob/taursuits_vr.dmi'
|
||||
icon_override = 'icons/mob/taursuits_vr.dmi'
|
||||
icon_state = "mining-horse"
|
||||
item_state = "mining-horse"
|
||||
pixel_x = -16
|
||||
update_icon()
|
||||
return 1
|
||||
else if(istype(H) && istype(H.tail_style, /datum/sprite_accessory/tail/taur/wolf))
|
||||
icon = 'icons/mob/taursuits_vr.dmi'
|
||||
icon_override = 'icons/mob/taursuits_vr.dmi'
|
||||
icon_state = "mining-wolf"
|
||||
item_state = "mining-wolf"
|
||||
pixel_x = -16
|
||||
update_icon()
|
||||
return 1
|
||||
else if(istype(H) && istype(H.tail_style, /datum/sprite_accessory/tail/taur/naga))
|
||||
icon = 'icons/mob/taursuits_vr.dmi'
|
||||
icon_override = 'icons/mob/taursuits_vr.dmi'
|
||||
icon_state = "mining-naga"
|
||||
item_state = "mining-naga"
|
||||
pixel_x = -16
|
||||
update_icon()
|
||||
return 1
|
||||
else
|
||||
H << "<span class='warning'>You need to have a horse, wolf, or naga half to wear this.</span>"
|
||||
return 0
|
||||
/obj/item/clothing/head/helmet/space/void/explorer
|
||||
desc = "A helmet that matches a red voidsuit! So classy."
|
||||
species_restricted = list(
|
||||
SPECIES_HUMAN,
|
||||
SPECIES_SKRELL,
|
||||
SPECIES_UNATHI,
|
||||
SPECIES_TAJ,
|
||||
SPECIES_TESHARI,
|
||||
SPECIES_AKULA,
|
||||
SPECIES_ALRAUNE,
|
||||
SPECIES_NEVREAN,
|
||||
SPECIES_RAPALA,
|
||||
SPECIES_SERGAL,
|
||||
SPECIES_VASILISSAN,
|
||||
SPECIES_VULPKANIN,
|
||||
SPECIES_XENOCHIMERA,
|
||||
SPECIES_XENOHYBRID,
|
||||
SPECIES_ZORREN_FLAT,
|
||||
SPECIES_ZORREN_HIGH
|
||||
)
|
||||
/obj/item/clothing/head/helmet/space/void/explorer/initialize()
|
||||
. = ..()
|
||||
sprite_sheets += sprite_sheets_refit
|
||||
|
||||
@@ -16,20 +16,15 @@
|
||||
name = "wolf-taur armor vest"
|
||||
desc = "An armored vest that protects against some damage. It appears to be created for a wolf-taur."
|
||||
species_restricted = null //Species restricted since all it cares about is a taur half
|
||||
icon = 'icons/mob/taursuits_vr.dmi'
|
||||
icon_override = 'icons/mob/taursuits_vr.dmi'
|
||||
icon = 'icons/mob/taursuits_wolf_vr.dmi'
|
||||
icon_state = "heavy_wolf_armor"
|
||||
item_state = "heavy_wolf_armor"
|
||||
mob_can_equip(var/mob/living/carbon/human/H, slot, disable_warning = 0)
|
||||
if(..())
|
||||
if(istype(H) && istype(H.tail_style, /datum/sprite_accessory/tail/taur/wolf))
|
||||
if(icon_state == "serdy_armor") //This is to prevent Serdy's custom armor from turning into heavy_wolf_armor
|
||||
return ..()
|
||||
icon_override = 'icons/mob/taursuits_vr.dmi' //Just in case
|
||||
icon_state = "heavy_wolf_armor" //Just in case
|
||||
pixel_x = -16
|
||||
return ..()
|
||||
else
|
||||
H << "<span class='warning'>You need to have a wolf-taur half to wear this.</span>"
|
||||
to_chat(H,"<span class='warning'>You need to have a wolf-taur half to wear this.</span>")
|
||||
return 0
|
||||
|
||||
// HoS armor improved by Vorestation to be slightly better than normal security stuff.
|
||||
|
||||
@@ -1,101 +0,0 @@
|
||||
//Biosuits for use with taurs (Currently only nagas)
|
||||
|
||||
//Virology biosuit, green stripe
|
||||
/obj/item/clothing/suit/bio_suit/virology/taur
|
||||
name = "taur specific bio suit"
|
||||
desc = "A suit that protects against biological contamination. It has a sticker saying one size fits all taurs on it. Below the sticker, it states that it only fits horses, wolves, and naga taurs."
|
||||
body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|FEET|ARMS
|
||||
flags_inv = HIDEGLOVES|HIDEJUMPSUIT|HIDETAIL|HIDETIE|HIDEHOLSTER
|
||||
species_restricted = null //Species restricted since all it cares about is a taur half
|
||||
mob_can_equip(var/mob/living/carbon/human/H, slot, disable_warning = 0)
|
||||
if(..())
|
||||
if(istype(H) && istype(H.tail_style, /datum/sprite_accessory/tail/taur/naga))
|
||||
icon = 'icons/mob/taursuits_vr.dmi'
|
||||
icon_override = 'icons/mob/taursuits_vr.dmi'
|
||||
icon_state = "bioviro-naga"
|
||||
item_state = "bioviro-naga"
|
||||
pixel_x = -16
|
||||
return 1
|
||||
else
|
||||
H << "<span class='warning'>You need to have a horse, wolf, or naga half to wear this.</span>"
|
||||
return 0
|
||||
|
||||
//Security biosuit, grey with red stripe across the chest
|
||||
/obj/item/clothing/suit/bio_suit/security/taur
|
||||
name = "taur specific bio suit"
|
||||
desc = "A suit that protects against biological contamination. It has a sticker saying one size fits all taurs on it. Below the sticker, it states that it only fits horses, wolves, and naga taurs."
|
||||
body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|FEET|ARMS
|
||||
flags_inv = HIDEGLOVES|HIDEJUMPSUIT|HIDETAIL|HIDETIE|HIDEHOLSTER
|
||||
species_restricted = null //Species restricted since all it cares about is a taur half
|
||||
mob_can_equip(var/mob/living/carbon/human/H, slot, disable_warning = 0)
|
||||
if(..())
|
||||
if(istype(H) && istype(H.tail_style, /datum/sprite_accessory/tail/taur/naga))
|
||||
icon = 'icons/mob/taursuits_vr.dmi'
|
||||
icon_override = 'icons/mob/taursuits_vr.dmi'
|
||||
icon_state = "biosec-naga"
|
||||
item_state = "biosec-naga"
|
||||
pixel_x = -16
|
||||
return 1
|
||||
else
|
||||
H << "<span class='warning'>You need to have a horse, wolf, or naga half to wear this.</span>"
|
||||
return 0
|
||||
|
||||
//Janitor's biosuit, grey with purple arms
|
||||
/obj/item/clothing/suit/bio_suit/janitor/taur
|
||||
name = "taur specific bio suit"
|
||||
desc = "A suit that protects against biological contamination. It has a sticker saying one size fits all taurs on it. Below the sticker, it states that it only fits horses, wolves, and naga taurs."
|
||||
body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|FEET|ARMS
|
||||
flags_inv = HIDEGLOVES|HIDEJUMPSUIT|HIDETAIL|HIDETIE|HIDEHOLSTER
|
||||
species_restricted = null //Species restricted since all it cares about is a taur half
|
||||
mob_can_equip(var/mob/living/carbon/human/H, slot, disable_warning = 0)
|
||||
if(..())
|
||||
if(istype(H) && istype(H.tail_style, /datum/sprite_accessory/tail/taur/naga))
|
||||
icon = 'icons/mob/taursuits_vr.dmi'
|
||||
icon_override = 'icons/mob/taursuits_vr.dmi'
|
||||
icon_state = "biojan-naga"
|
||||
item_state = "biojan-naga"
|
||||
pixel_x = -16
|
||||
return 1
|
||||
else
|
||||
H << "<span class='warning'>You need to have a horse, wolf, or naga half to wear this.</span>"
|
||||
return 0
|
||||
|
||||
//Scientist's biosuit, white with a pink-ish hue
|
||||
/obj/item/clothing/suit/bio_suit/scientist/taur
|
||||
name = "taur specific bio suit"
|
||||
desc = "A suit that protects against biological contamination. It has a sticker saying one size fits all taurs on it. Below the sticker, it states that it only fits horses, wolves, and naga taurs."
|
||||
body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|FEET|ARMS
|
||||
flags_inv = HIDEGLOVES|HIDEJUMPSUIT|HIDETAIL|HIDETIE|HIDEHOLSTER
|
||||
species_restricted = null //Species restricted since all it cares about is a taur half
|
||||
mob_can_equip(var/mob/living/carbon/human/H, slot, disable_warning = 0)
|
||||
if(..())
|
||||
if(istype(H) && istype(H.tail_style, /datum/sprite_accessory/tail/taur/naga))
|
||||
icon = 'icons/mob/taursuits_vr.dmi'
|
||||
icon_override = 'icons/mob/taursuits_vr.dmi'
|
||||
icon_state = "biosci-naga"
|
||||
item_state = "biosci-naga"
|
||||
pixel_x = -16
|
||||
return 1
|
||||
else
|
||||
H << "<span class='warning'>You need to have a horse, wolf, or naga half to wear this.</span>"
|
||||
return 0
|
||||
|
||||
//CMO's biosuit, blue stripe
|
||||
/obj/item/clothing/suit/bio_suit/cmo/taur
|
||||
name = "taur specific bio suit"
|
||||
desc = "A suit that protects against biological contamination. It has a sticker saying one size fits all taurs on it. Below the sticker, it states that it only fits horses, wolves, and naga taurs."
|
||||
body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|FEET|ARMS
|
||||
flags_inv = HIDEGLOVES|HIDEJUMPSUIT|HIDETAIL|HIDETIE|HIDEHOLSTER
|
||||
species_restricted = null //Species restricted since all it cares about is a taur half
|
||||
mob_can_equip(var/mob/living/carbon/human/H, slot, disable_warning = 0)
|
||||
if(..())
|
||||
if(istype(H) && istype(H.tail_style, /datum/sprite_accessory/tail/taur/naga))
|
||||
icon = 'icons/mob/taursuits_vr.dmi'
|
||||
icon_override = 'icons/mob/taursuits_vr.dmi'
|
||||
icon_state = "biocmo-naga"
|
||||
item_state = "biocmo-naga"
|
||||
pixel_x = -16
|
||||
return 1
|
||||
else
|
||||
H << "<span class='warning'>You need to have a horse, wolf, or naga half to wear this.</span>"
|
||||
return 0
|
||||
@@ -1,130 +1,3 @@
|
||||
/*
|
||||
* Contains:
|
||||
* Bomb protection
|
||||
* Radiation protection
|
||||
*/
|
||||
|
||||
/*
|
||||
* Bomb protection
|
||||
*/
|
||||
|
||||
/obj/item/clothing/suit/bomb_suit/taur
|
||||
name = "taur specific bomb suit"
|
||||
desc = "A suit designed for safety when handling explosives. It has a sticker saying one size fits all taurs on it. Below the sticker, it states that it only fits horses, wolves, and naga taurs."
|
||||
w_class = ITEMSIZE_LARGE//bulky item
|
||||
gas_transfer_coefficient = 0.01
|
||||
permeability_coefficient = 0.01
|
||||
slowdown = 2
|
||||
armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 100, bio = 0, rad = 0)
|
||||
flags_inv = HIDEJUMPSUIT|HIDETAIL|HIDETIE|HIDEHOLSTER
|
||||
heat_protection = UPPER_TORSO|LOWER_TORSO
|
||||
max_heat_protection_temperature = ARMOR_MAX_HEAT_PROTECTION_TEMPERATURE
|
||||
siemens_coefficient = 0
|
||||
|
||||
species_restricted = null
|
||||
mob_can_equip(var/mob/living/carbon/human/H, slot, disable_warning = 0)
|
||||
if(..())
|
||||
if(istype(H) && istype(H.tail_style, /datum/sprite_accessory/tail/taur/horse))
|
||||
icon = 'icons/mob/taursuits_vr.dmi'
|
||||
icon_override = 'icons/mob/taursuits_vr.dmi'
|
||||
icon_state = "bombsuit-horse"
|
||||
item_state = "bombsuit-horse"
|
||||
pixel_x = -16
|
||||
return 1
|
||||
else if(istype(H) && istype(H.tail_style, /datum/sprite_accessory/tail/taur/wolf))
|
||||
icon = 'icons/mob/taursuits_vr.dmi'
|
||||
icon_override = 'icons/mob/taursuits_vr.dmi'
|
||||
icon_state = "bombsuit-wolf"
|
||||
item_state = "bombsuit-wolf"
|
||||
pixel_x = -16
|
||||
return 1
|
||||
else if(istype(H) && istype(H.tail_style, /datum/sprite_accessory/tail/taur/naga))
|
||||
icon = 'icons/mob/taursuits_vr.dmi'
|
||||
icon_override = 'icons/mob/taursuits_vr.dmi'
|
||||
icon_state = "bombsuit-naga"
|
||||
item_state = "bombsuit-naga"
|
||||
pixel_x = -16
|
||||
return 1
|
||||
else
|
||||
H << "<span class='warning'>You need to have a horse, wolf, or naga half to wear this.</span>"
|
||||
return 0
|
||||
|
||||
|
||||
/obj/item/clothing/head/bomb_hood/security
|
||||
icon_state = "bombsuitsec"
|
||||
body_parts_covered = HEAD
|
||||
|
||||
/obj/item/clothing/suit/bomb_suit/taur/security
|
||||
allowed = list(/obj/item/weapon/gun/energy,/obj/item/weapon/melee/baton,/obj/item/weapon/handcuffs)
|
||||
body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|FEET|ARMS|HANDS
|
||||
species_restricted = null
|
||||
mob_can_equip(var/mob/living/carbon/human/H, slot, disable_warning = 0)
|
||||
if(..())
|
||||
if(istype(H) && istype(H.tail_style, /datum/sprite_accessory/tail/taur/horse))
|
||||
icon = 'icons/mob/taursuits_vr.dmi'
|
||||
icon_override = 'icons/mob/taursuits_vr.dmi'
|
||||
icon_state = "bombsuit-horse"
|
||||
item_state = "bombsuit-horse"
|
||||
pixel_x = -16
|
||||
return 1
|
||||
else if(istype(H) && istype(H.tail_style, /datum/sprite_accessory/tail/taur/wolf))
|
||||
icon = 'icons/mob/taursuits_vr.dmi'
|
||||
icon_override = 'icons/mob/taursuits_vr.dmi'
|
||||
icon_state = "bombsuit-wolf"
|
||||
item_state = "bombsuit-wolf"
|
||||
pixel_x = -16
|
||||
return 1
|
||||
else if(istype(H) && istype(H.tail_style, /datum/sprite_accessory/tail/taur/naga))
|
||||
icon = 'icons/mob/taursuits_vr.dmi'
|
||||
icon_override = 'icons/mob/taursuits_vr.dmi'
|
||||
icon_state = "bombsuit-naga"
|
||||
item_state = "bombsuit-naga"
|
||||
pixel_x = -16
|
||||
return 1
|
||||
else
|
||||
H << "<span class='warning'>You need to have a horse, wolf, or naga half to wear this.</span>"
|
||||
return 0
|
||||
|
||||
/*
|
||||
* Radiation protection
|
||||
*/
|
||||
|
||||
/obj/item/clothing/suit/radiation/taur
|
||||
name = "taur specific radiation suit"
|
||||
desc = "A suit that protects against radiation. Label: Made with lead, do not eat insulation. It has a sticker saying one size fits all taurs on it. Below the sticker, it states that it only fits horses, wolves, and naga taurs."
|
||||
w_class = ITEMSIZE_LARGE//bulky item
|
||||
gas_transfer_coefficient = 0.90
|
||||
permeability_coefficient = 0.50
|
||||
body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|ARMS|HANDS|FEET
|
||||
allowed = list(/obj/item/device/flashlight,/obj/item/weapon/tank/emergency/oxygen,/obj/item/clothing/head/radiation,/obj/item/clothing/mask/gas)
|
||||
slowdown = 1.5
|
||||
armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 60, rad = 100)
|
||||
flags_inv = HIDEJUMPSUIT|HIDETAIL|HIDETIE|HIDEHOLSTER
|
||||
|
||||
species_restricted = null
|
||||
mob_can_equip(var/mob/living/carbon/human/H, slot, disable_warning = 0)
|
||||
if(..())
|
||||
if(istype(H) && istype(H.tail_style, /datum/sprite_accessory/tail/taur/horse))
|
||||
icon = 'icons/mob/taursuits_vr.dmi'
|
||||
icon_override = 'icons/mob/taursuits_vr.dmi'
|
||||
icon_state = "radsuit-horse"
|
||||
item_state = "radsuit-horse"
|
||||
pixel_x = -16
|
||||
return 1
|
||||
else if(istype(H) && istype(H.tail_style, /datum/sprite_accessory/tail/taur/wolf))
|
||||
icon = 'icons/mob/taursuits_vr.dmi'
|
||||
icon_override = 'icons/mob/taursuits_vr.dmi'
|
||||
icon_state = "radsuit-wolf"
|
||||
item_state = "radsuit-wolf"
|
||||
pixel_x = -16
|
||||
return 1
|
||||
else if(istype(H) && istype(H.tail_style, /datum/sprite_accessory/tail/taur/naga))
|
||||
icon = 'icons/mob/taursuits_vr.dmi'
|
||||
icon_override = 'icons/mob/taursuits_vr.dmi'
|
||||
icon_state = "radsuit-naga"
|
||||
item_state = "radsuit-naga"
|
||||
pixel_x = -16
|
||||
return 1
|
||||
else
|
||||
H << "<span class='warning'>You need to have a horse, wolf, or naga half to wear this.</span>"
|
||||
return 0
|
||||
@@ -519,28 +519,21 @@
|
||||
|
||||
/obj/machinery/cash_register/command
|
||||
account_to_connect = "Command"
|
||||
..()
|
||||
|
||||
/obj/machinery/cash_register/medical
|
||||
account_to_connect = "Medical"
|
||||
..()
|
||||
|
||||
/obj/machinery/cash_register/engineering
|
||||
account_to_connect = "Engineering"
|
||||
..()
|
||||
|
||||
/obj/machinery/cash_register/science
|
||||
account_to_connect = "Science"
|
||||
..()
|
||||
|
||||
/obj/machinery/cash_register/security
|
||||
account_to_connect = "Security"
|
||||
..()
|
||||
|
||||
/obj/machinery/cash_register/cargo
|
||||
account_to_connect = "Cargo"
|
||||
..()
|
||||
|
||||
/obj/machinery/cash_register/civilian
|
||||
account_to_connect = "Civilian"
|
||||
..()
|
||||
@@ -401,28 +401,21 @@
|
||||
|
||||
/obj/item/device/retail_scanner/command
|
||||
account_to_connect = "Command"
|
||||
..()
|
||||
|
||||
/obj/item/device/retail_scanner/medical
|
||||
account_to_connect = "Medical"
|
||||
..()
|
||||
|
||||
/obj/item/device/retail_scanner/engineering
|
||||
account_to_connect = "Engineering"
|
||||
..()
|
||||
|
||||
/obj/item/device/retail_scanner/science
|
||||
account_to_connect = "Science"
|
||||
..()
|
||||
|
||||
/obj/item/device/retail_scanner/security
|
||||
account_to_connect = "Security"
|
||||
..()
|
||||
|
||||
/obj/item/device/retail_scanner/cargo
|
||||
account_to_connect = "Cargo"
|
||||
..()
|
||||
|
||||
/obj/item/device/retail_scanner/civilian
|
||||
account_to_connect = "Civilian"
|
||||
..()
|
||||
@@ -19,7 +19,8 @@
|
||||
var/light_range_on = 2
|
||||
light_color = "#64C864"
|
||||
|
||||
layer = ABOVE_WINDOW_LAYER
|
||||
plane = TURF_PLANE
|
||||
layer = ABOVE_TURF_LAYER
|
||||
|
||||
var/mob/watching_mob = null
|
||||
var/image/small_station_map = null
|
||||
|
||||
@@ -20,7 +20,7 @@
|
||||
|
||||
|
||||
/obj/item/integrated_circuit/input/button/ask_for_input(mob/user) //Bit misleading name for this specific use.
|
||||
to_chat(user, "<span class='notice'>You press the button labeled '[src.name]'.</span>")
|
||||
to_chat(user, "<span class='notice'>You press the button labeled '[src.displayed_name]'.</span>")
|
||||
activate_pin(1)
|
||||
|
||||
/obj/item/integrated_circuit/input/toggle_button
|
||||
@@ -38,7 +38,7 @@
|
||||
set_pin_data(IC_OUTPUT, 1, !get_pin_data(IC_OUTPUT, 1))
|
||||
push_data()
|
||||
activate_pin(1)
|
||||
to_chat(user, "<span class='notice'>You toggle the button labeled '[src.name]' [get_pin_data(IC_OUTPUT, 1) ? "on" : "off"].</span>")
|
||||
to_chat(user, "<span class='notice'>You toggle the button labeled '[src.displayed_name]' [get_pin_data(IC_OUTPUT, 1) ? "on" : "off"].</span>")
|
||||
|
||||
/obj/item/integrated_circuit/input/numberpad
|
||||
name = "number pad"
|
||||
|
||||
@@ -563,7 +563,7 @@ var/list/mining_overlay_cache = list()
|
||||
new /obj/item/stack/material/uranium(src, rand(5,25))
|
||||
|
||||
/turf/simulated/mineral/proc/make_ore(var/rare_ore)
|
||||
if(mineral)
|
||||
if(mineral || ignore_mapgen) //VOREStation Edit - Makes sense, doesn't it?
|
||||
return
|
||||
|
||||
var/mineral_name
|
||||
|
||||
@@ -15,12 +15,14 @@
|
||||
w_class = ITEMSIZE_TINY
|
||||
var/template_id = "shelter_alpha"
|
||||
var/datum/map_template/shelter/template
|
||||
var/datum/map_template/shelter/template_roof
|
||||
var/used = FALSE
|
||||
|
||||
/obj/item/device/survivalcapsule/proc/get_template()
|
||||
if(template)
|
||||
return
|
||||
template = SSmapping.shelter_templates[template_id]
|
||||
template_roof = SSmapping.shelter_templates[template.roof]
|
||||
if(!template)
|
||||
throw EXCEPTION("Shelter template ([template_id]) not found!")
|
||||
qdel(src)
|
||||
@@ -41,19 +43,26 @@
|
||||
if(!used)
|
||||
loc.visible_message("<span class='warning'>\The [src] begins to shake. Stand back!</span>")
|
||||
used = TRUE
|
||||
|
||||
|
||||
sleep(5 SECONDS)
|
||||
|
||||
|
||||
var/turf/deploy_location = get_turf(src)
|
||||
var/status = template.check_deploy(deploy_location)
|
||||
var/turf/above_location = GetAbove(deploy_location)
|
||||
if(above_location && status == SHELTER_DEPLOY_ALLOWED)
|
||||
status = template.check_deploy(above_location)
|
||||
|
||||
switch(status)
|
||||
//Not allowed due to /area technical reasons
|
||||
if(SHELTER_DEPLOY_BAD_AREA)
|
||||
src.loc.visible_message("<span class='warning'>\The [src] will not function in this area.</span>")
|
||||
|
||||
//Anchored objects or no space
|
||||
if(SHELTER_DEPLOY_BAD_TURFS, SHELTER_DEPLOY_ANCHORED_OBJECTS)
|
||||
var/width = template.width
|
||||
var/height = template.height
|
||||
src.loc.visible_message("<span class='warning'>\The [src] doesn't have room to deploy! You need to clear a [width]x[height] area!</span>")
|
||||
|
||||
|
||||
if(status != SHELTER_DEPLOY_ALLOWED)
|
||||
used = FALSE
|
||||
return
|
||||
@@ -68,6 +77,8 @@
|
||||
playsound(get_turf(src), 'sound/effects/phasein.ogg', 100, 1)
|
||||
|
||||
log_and_message_admins("[key_name_admin(usr)] activated a bluespace capsule at [get_area(T)]!")
|
||||
if(above_location && template_roof)
|
||||
template_roof.load(above_location, centered = TRUE)
|
||||
template.load(deploy_location, centered = TRUE)
|
||||
qdel(src)
|
||||
|
||||
@@ -87,6 +98,23 @@
|
||||
name = "survival airlock"
|
||||
block_air_zones = 1
|
||||
|
||||
//Door access setter button
|
||||
/obj/machinery/button/remote/airlock/survival_pod
|
||||
name = "shelter privacy control"
|
||||
desc = "You can secure yourself inside the shelter here."
|
||||
specialfunctions = 4 // 4 is bolts
|
||||
id = "placeholder_id_do_not_use" //This has to be this way, otherwise it will control ALL doors if left blank.
|
||||
var/obj/machinery/door/airlock/voidcraft/survival_pod/door
|
||||
|
||||
/obj/machinery/button/remote/airlock/survival_pod/attack_hand(obj/item/weapon/W, mob/user as mob)
|
||||
if(..()) return 1 //1 is failure on machines (for whatever reason)
|
||||
if(!door)
|
||||
var/turf/dT = get_step(src,dir)
|
||||
door = locate() in dT
|
||||
if(door)
|
||||
door.glass = !door.glass
|
||||
door.opacity = !door.opacity
|
||||
|
||||
//Windows
|
||||
/obj/structure/window/reinforced/survival_pod
|
||||
name = "pod window"
|
||||
@@ -112,12 +140,25 @@
|
||||
name = "table"
|
||||
icon = 'icons/obj/survival_pod.dmi'
|
||||
icon_state = "table"
|
||||
can_reinforce = FALSE
|
||||
can_plate = FALSE
|
||||
|
||||
/obj/structure/table/survival_pod/update_icon()
|
||||
icon_state = "table"
|
||||
|
||||
/obj/structure/table/survival_pod/New()
|
||||
material = get_material_by_name(DEFAULT_WALL_MATERIAL)
|
||||
verbs -= /obj/structure/table/verb/do_flip
|
||||
verbs -= /obj/structure/table/proc/do_put
|
||||
..()
|
||||
|
||||
/obj/structure/table/survival_pod/dismantle(obj/item/weapon/wrench/W, mob/user)
|
||||
to_chat(user, "<span class='warning'>You cannot dismantle \the [src].</span>")
|
||||
return
|
||||
|
||||
//Sleeper
|
||||
/obj/machinery/sleeper/survival_pod
|
||||
desc = "A limited functionality sleeper, all it can do is put patients into stasis. It lacks the medication and configuration of the larger units."
|
||||
icon = 'icons/obj/survival_pod.dmi'
|
||||
icon_state = "sleeper"
|
||||
stasis_level = 100 //Just one setting
|
||||
@@ -178,6 +219,9 @@
|
||||
for(var/i in 1 to 5)
|
||||
var/obj/item/weapon/reagent_containers/food/snacks/liquidfood/W = new(src)
|
||||
stock(W)
|
||||
for(var/i in 1 to 2)
|
||||
var/obj/item/device/fbp_backup_cell/W = new(src)
|
||||
stock(W)
|
||||
if(prob(50))
|
||||
var/obj/item/weapon/storage/pill_bottle/dice/D = new(src)
|
||||
stock(D)
|
||||
|
||||
@@ -5,6 +5,7 @@
|
||||
var/whitelisted_turfs
|
||||
var/banned_areas
|
||||
var/banned_objects
|
||||
var/roof
|
||||
|
||||
/datum/map_template/shelter/New()
|
||||
. = ..()
|
||||
@@ -38,6 +39,11 @@
|
||||
sleeping area! Order now, and we'll throw in a TINY FAN, \
|
||||
absolutely free!"
|
||||
mappath = "maps/submaps/shelters/shelter_1.dmm"
|
||||
roof = "roof_alpha"
|
||||
|
||||
/datum/map_template/shelter/alpha_roof
|
||||
shelter_id = "roof_alpha"
|
||||
mappath = "maps/submaps/shelters/shelter_1_roof.dmm"
|
||||
|
||||
/datum/map_template/shelter/alpha/New()
|
||||
. = ..()
|
||||
@@ -53,8 +59,14 @@
|
||||
and a deluxe companion to keep you from getting lonely during \
|
||||
an ash storm."
|
||||
mappath = "maps/submaps/shelters/shelter_2.dmm"
|
||||
roof = "roof_beta"
|
||||
|
||||
/datum/map_template/shelter/beta_roof
|
||||
shelter_id = "roof_beta"
|
||||
mappath = "maps/submaps/shelters/shelter_2_roof.dmm"
|
||||
|
||||
/datum/map_template/shelter/beta/New()
|
||||
. = ..()
|
||||
whitelisted_turfs = typecacheof(/turf/simulated/mineral)
|
||||
banned_objects = list()
|
||||
|
||||
|
||||
@@ -82,4 +82,22 @@
|
||||
name = "Smaller"
|
||||
desc = "Your body is smaller than average."
|
||||
|
||||
icon_scale_percent = 0.9
|
||||
icon_scale_percent = 0.9
|
||||
|
||||
/datum/modifier/trait/colorblind_taj
|
||||
name = "Colorblind - B+R"
|
||||
desc = "You are colorblind. You have a minor issue with blue colors and have difficulty recognizing them from red colors."
|
||||
|
||||
client_color = MATRIX_Taj_Colorblind
|
||||
|
||||
/datum/modifier/trait/colorblind_vulp
|
||||
name = "Colorblind - G+R"
|
||||
desc = "You are colorblind. You have a severe issue with green colors and have difficulty recognizing them from red colors."
|
||||
|
||||
client_color = MATRIX_Vulp_Colorblind
|
||||
|
||||
/datum/modifier/trait/colorblind_mono
|
||||
name = "Colorblind - Mono"
|
||||
desc = "You are colorblind. Your condition is rare, but you can see no colors at all."
|
||||
|
||||
client_color = MATRIX_Monochromia
|
||||
|
||||
@@ -11,7 +11,7 @@
|
||||
|
||||
var/input
|
||||
if(!message)
|
||||
input = sanitize(input(src,"Choose an emote to display.") as text|null)
|
||||
input = sanitize_or_reflect(input(src,"Choose an emote to display.") as text|null, src) //VOREStation Edit - Reflect too long messages, within reason
|
||||
else
|
||||
input = message
|
||||
if(input)
|
||||
@@ -70,7 +70,7 @@
|
||||
|
||||
var/input
|
||||
if(!message)
|
||||
input = sanitize(input(src, "Choose an emote to display.") as text|null)
|
||||
input = sanitize_or_reflect(input(src, "Choose an emote to display.") as text|null, src) //VOREStation Edit - Reflect too long messages, within reason
|
||||
else
|
||||
input = message
|
||||
|
||||
|
||||
@@ -0,0 +1,14 @@
|
||||
/datum/gender/herm
|
||||
key = "herm"
|
||||
|
||||
He = "Shi"
|
||||
he = "shi"
|
||||
His = "Hir"
|
||||
his = "hir"
|
||||
him = "hir"
|
||||
has = "has"
|
||||
is = "is"
|
||||
does = "does"
|
||||
himself = "hirself"
|
||||
s = "s"
|
||||
hes = "shi's"
|
||||
@@ -99,7 +99,7 @@
|
||||
set name = "Set Gender Identity"
|
||||
set desc = "Sets the pronouns when examined and performing an emote."
|
||||
set category = "IC"
|
||||
var/new_gender_identity = input("Please select a gender Identity.") as null|anything in list(FEMALE, MALE, NEUTER, PLURAL)
|
||||
var/new_gender_identity = input("Please select a gender Identity.") as null|anything in list(FEMALE, MALE, NEUTER, PLURAL, HERM)
|
||||
if(!new_gender_identity)
|
||||
return 0
|
||||
change_gender_identity(new_gender_identity)
|
||||
@@ -110,4 +110,4 @@
|
||||
set category = "IC"
|
||||
set desc = "Switch tail layer on top."
|
||||
tail_alt = !tail_alt
|
||||
update_tail_showing()
|
||||
update_tail_showing()
|
||||
|
||||
@@ -35,6 +35,12 @@
|
||||
t_he = "it"
|
||||
t_His = "Its"
|
||||
t_his = "its"
|
||||
if(HERM)
|
||||
t_He = "Shi"
|
||||
t_he = "shi"
|
||||
t_His = "Hir"
|
||||
t_his = "hir"
|
||||
t_heavy = "curvy"
|
||||
|
||||
switch(weight_examine)
|
||||
if(0 to 74)
|
||||
@@ -88,6 +94,10 @@
|
||||
t_He = "It"
|
||||
t_his = "its"
|
||||
t_His = "Its"
|
||||
if(HERM)
|
||||
t_He = "Shi"
|
||||
t_his = "hir"
|
||||
t_His = "Hir"
|
||||
switch(nutrition_examine)
|
||||
if(0 to 49)
|
||||
message = "<span class='warning'>[t_He] [t_is] starving! You can hear [t_his] stomach snarling from across the room!</span>\n"
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
if(name != GetVoice())
|
||||
alt_name = "(as [get_id_name("Unknown")])"
|
||||
|
||||
message = sanitize(message)
|
||||
message = sanitize_or_reflect(message,src) //VOREStation Edit - Reflect too-long messages, within reason
|
||||
..(message, alt_name = alt_name, whispering = whispering)
|
||||
|
||||
/mob/living/carbon/human/proc/forcesay(list/append)
|
||||
|
||||
@@ -130,7 +130,7 @@ var/list/wrapped_species_by_ref = list()
|
||||
if(!new_gender)
|
||||
return
|
||||
|
||||
var/new_gender_identity = input("Please select a gender Identity.", "Shapeshifter Gender Identity") as null|anything in list(FEMALE, MALE, NEUTER, PLURAL)
|
||||
var/new_gender_identity = input("Please select a gender Identity.", "Shapeshifter Gender Identity") as null|anything in list(FEMALE, MALE, NEUTER, PLURAL, HERM) //VOREStation Edit
|
||||
if(!new_gender_identity)
|
||||
return
|
||||
|
||||
|
||||
@@ -33,9 +33,10 @@
|
||||
var/type = H.nif.type
|
||||
var/durability = H.nif.durability
|
||||
var/list/nifsofts = H.nif.nifsofts
|
||||
var/list/nif_savedata = H.nif.save_data.Copy()
|
||||
..()
|
||||
|
||||
var/obj/item/device/nif/nif = new type(H,durability)
|
||||
var/obj/item/device/nif/nif = new type(H,durability,nif_savedata)
|
||||
nif.nifsofts = nifsofts
|
||||
else
|
||||
..()
|
||||
|
||||
@@ -184,6 +184,8 @@ VOREStation Removal End */
|
||||
t_she = "They are"
|
||||
else if(H.identifying_gender == NEUTER)
|
||||
t_she = "It is"
|
||||
else if(H.identifying_gender == HERM) //VOREStation Edit
|
||||
t_she = "Shi is"
|
||||
|
||||
switch(stored_shock_by_ref["\ref[H]"])
|
||||
if(1 to 10)
|
||||
|
||||
+117
-97
@@ -1,137 +1,151 @@
|
||||
/mob/living/carbon/human/proc/begin_reconstitute_form() //Scree's race ability.in exchange for: No cloning.
|
||||
/mob/living/carbon/human/proc/reconstitute_form() //Scree's race ability.in exchange for: No cloning.
|
||||
set name = "Reconstitute Form"
|
||||
set category = "Abilities"
|
||||
|
||||
if(world.time < last_special)
|
||||
return
|
||||
|
||||
last_special = world.time + 50 //To prevent button spam.
|
||||
|
||||
// Sanity is mostly handled in chimera_regenerate()
|
||||
|
||||
var/confirm = alert(usr, "Are you sure you want to completely reconstruct your form? This process can take up to twenty minutes, depending on how hungry you are, and you will be unable to move.", "Confirm Regeneration", "Yes", "No")
|
||||
if(confirm == "Yes")
|
||||
chimera_regenerate()
|
||||
|
||||
/mob/living/carbon/human/proc/chimera_regenerate()
|
||||
var/nutrition_used = nutrition/2
|
||||
|
||||
if(reviving == TRUE) //If they're already unable to
|
||||
to_chat(src, "You are already reconstructing, or your body is currently recovering from the intense process of your previous reconstitution.")
|
||||
return
|
||||
|
||||
if(stat == DEAD) //Uh oh, you died!
|
||||
if(hasnutriment()) //Let's hope you have nutriment in you.... If not
|
||||
var/time = (240+960/(1 + nutrition_used/75))
|
||||
reviving = TRUE
|
||||
to_chat(src, "You begin to reconstruct your form. You will not be able to move during this time. It should take aproximately [round(time)] seconds.")
|
||||
//don't need all the weakened, does_not_breathe, canmove, heal IB crap here like you do for live ones'cause they're DEAD.
|
||||
|
||||
spawn(time SECONDS)
|
||||
if(src) //Runtime prevention.
|
||||
if (stat == DEAD) // let's make sure they've not been defibbed or whatever
|
||||
to_chat(src, "<span class='notice'>Consciousness begins to stir as your new body awakens, ready to hatch.</span>")
|
||||
verbs += /mob/living/carbon/human/proc/hatch
|
||||
return
|
||||
else // their revive got aborted by being made not-dead. Remove their cooldown.
|
||||
to_chat(src, "<span class='notice'>Your body has recovered from its ordeal, ready to regenerate itself again.</span>")
|
||||
reviving = FALSE
|
||||
return
|
||||
else
|
||||
return //Something went wrong.
|
||||
else //Dead until nutrition injected.
|
||||
to_chat(src, "Your body is too damaged to regenerate without additional nutrients to feed what few living cells remain.")
|
||||
//If they're already regenerating
|
||||
switch(reviving)
|
||||
if(REVIVING_NOW)
|
||||
to_chat(src, "You are already reconstructing, just wait for the reconstruction to finish!")
|
||||
return
|
||||
if(REVIVING_DONE)
|
||||
to_chat(src, "Your reconstruction is done, but you need to hatch now.")
|
||||
return
|
||||
if(REVIVING_COOLDOWN)
|
||||
to_chat(src, "You can't use that ability again so soon!")
|
||||
return
|
||||
|
||||
else if(stat != DEAD) //If they're alive at the time of regenerating.
|
||||
var/time = (240+960/(1 + nutrition_used/75))
|
||||
weakened = 10000 //Since it takes 1 tick to lose one weaken. Due to prior rounding errors, you'd sometimes unweaken before regenning. This fixes that.
|
||||
reviving = TRUE
|
||||
canmove = 0 //Make them unable to move. In case they somehow get up before the delay.
|
||||
to_chat(src, "You begin to reconstruct your form. You will not be able to move during this time. It should take aproximately [round(time)] seconds.")
|
||||
does_not_breathe = 1 //effectively makes them spaceworthy while regenning
|
||||
var/nutrition_used = nutrition * 0.5
|
||||
var/time = (240+960/(1 + nutrition_used/75))
|
||||
|
||||
spawn(time SECONDS)
|
||||
if(stat != DEAD) //If they're still alive after regenning.
|
||||
to_chat(src, "<span class='notice'>Consciousness begins to stir as your new body awakens, ready to hatch..</span>")
|
||||
verbs += /mob/living/carbon/human/proc/hatch
|
||||
return
|
||||
else if(stat == DEAD)
|
||||
if(hasnutriment()) //Let's hope you have nutriment in you.... If not
|
||||
to_chat(src, "<span class='notice'>Consciousness begins to stir as your new body awakens, ready to hatch..</span>")
|
||||
verbs += /mob/living/carbon/human/proc/hatch
|
||||
return
|
||||
else //Dead until nutrition injected.
|
||||
to_chat(src, "Your body was unable to regenerate, what few living cells remain require additional nutrients to complete the process.")
|
||||
reviving = FALSE // so they can try again when they're given a kickstart
|
||||
return
|
||||
else
|
||||
return //Something went wrong
|
||||
//Clicked regen while dead.
|
||||
if(stat == DEAD)
|
||||
|
||||
//Has nutrition and dead, allow regen.
|
||||
if(hasnutriment())
|
||||
to_chat(src, "You begin to reconstruct your form. You will not be able to move during this time. It should take aproximately [round(time)] seconds.")
|
||||
|
||||
//Scary spawnerization.
|
||||
reviving = REVIVING_NOW
|
||||
spawn(time SECONDS)
|
||||
// Was dead, now not dead.
|
||||
if(stat != DEAD)
|
||||
to_chat(src, "<span class='notice'>Your body has recovered from its ordeal, ready to regenerate itself again.</span>")
|
||||
reviving = 0 //Not bool
|
||||
|
||||
// Was dead, still dead.
|
||||
else
|
||||
to_chat(src, "<span class='notice'>Consciousness begins to stir as your new body awakens, ready to hatch.</span>")
|
||||
verbs |= /mob/living/carbon/human/proc/hatch
|
||||
reviving = REVIVING_DONE
|
||||
|
||||
//Dead until nutrition injected.
|
||||
else
|
||||
to_chat(src, "<span class='warning'>Your body is too damaged to regenerate without additional nutrients to feed what few living cells remain.</span>")
|
||||
|
||||
//Clicked regen while NOT dead
|
||||
else
|
||||
return //Something went wrong
|
||||
to_chat(src, "You begin to reconstruct your form. You will not be able to move during this time. It should take aproximately [round(time)] seconds.")
|
||||
|
||||
//Waiting for regen after being alive
|
||||
reviving = REVIVING_NOW
|
||||
spawn(time SECONDS)
|
||||
|
||||
//If they're still alive after regenning.
|
||||
if(stat != DEAD)
|
||||
to_chat(src, "<span class='notice'>Consciousness begins to stir as your new body awakens, ready to hatch..</span>")
|
||||
verbs |= /mob/living/carbon/human/proc/hatch
|
||||
reviving = REVIVING_DONE
|
||||
|
||||
//Was alive, now dead
|
||||
else if(hasnutriment())
|
||||
to_chat(src, "<span class='notice'>Consciousness begins to stir as your new body awakens, ready to hatch..</span>")
|
||||
verbs |= /mob/living/carbon/human/proc/hatch
|
||||
reviving = REVIVING_DONE
|
||||
|
||||
//Dead until nutrition injected.
|
||||
else
|
||||
to_chat(src, "<span class='warning'>Your body was unable to regenerate, what few living cells remain require additional nutrients to complete the process.</span>")
|
||||
reviving = 0 //Not boolean
|
||||
|
||||
/mob/living/carbon/human/proc/hasnutriment()
|
||||
if (bloodstr.has_reagent("nutriment", 30) || src.bloodstr.has_reagent("protein", 15)) //protein needs half as much. For reference, a steak contains 9u protein.
|
||||
return 1
|
||||
return TRUE
|
||||
else if (ingested.has_reagent("nutriment", 60) || src.ingested.has_reagent("protein", 30)) //try forcefeeding them, why not. Less effective.
|
||||
return 1
|
||||
else return 0
|
||||
return TRUE
|
||||
else return FALSE
|
||||
|
||||
|
||||
/mob/living/carbon/human/proc/hatch()
|
||||
set name = "Hatch"
|
||||
set category = "Abilities"
|
||||
|
||||
if(world.time < last_special)
|
||||
if(reviving != REVIVING_DONE)
|
||||
//Hwhat?
|
||||
verbs -= /mob/living/carbon/human/proc/hatch
|
||||
return
|
||||
|
||||
last_special = world.time + 50 //To prevent button spam.
|
||||
|
||||
var/confirm = alert(usr, "Are you sure you want to hatch right now? This will be very obvious to anyone in view.", "Confirm Regeneration", "Yes", "No")
|
||||
if(confirm == "Yes")
|
||||
if(stat == DEAD) //Uh oh, you died!
|
||||
if(hasnutriment()) //Let's hope you have nutriment in you.... If not
|
||||
if(src) //Runtime prevention.
|
||||
chimera_hatch()
|
||||
visible_message("<span class='danger'><p><font size=4>The lifeless husk of [src] bursts open, revealing a new, intact copy in the pool of viscera.</font></p></span>") //Bloody hell...
|
||||
brainloss += 10 //Reviving from dead means you take a lil' brainloss on top of whatever was healed in the revive.
|
||||
return
|
||||
else
|
||||
return //Runtime prevention
|
||||
else //don't have nutriment to hatch! Or you somehow died in between completing your revive and hitting hatch.
|
||||
to_chat(src, "Your body was unable to regenerate, what few living cells remain require additional nutrients to complete the process.")
|
||||
reviving = FALSE // so they can try again when they're given a kickstart
|
||||
|
||||
//Dead when hatching
|
||||
if(stat == DEAD)
|
||||
//Check again for nutriment (necessary?)
|
||||
if(hasnutriment())
|
||||
chimera_hatch()
|
||||
adjustBrainLoss(10) // if they're reviving from dead, they come back with 10 brainloss on top of whatever's unhealed.
|
||||
visible_message("<span class='danger'><p><font size=4>The lifeless husk of [src] bursts open, revealing a new, intact copy in the pool of viscera.</font></p></span>") //Bloody hell...
|
||||
return
|
||||
|
||||
else if(stat != DEAD) //If they're alive at the time of regenerating.
|
||||
//Don't have nutriment to hatch! Or you somehow died in between completing your revive and hitting hatch.
|
||||
else
|
||||
to_chat(src, "Your body was unable to regenerate, what few living cells remain require additional nutrients to complete the process.")
|
||||
verbs -= /mob/living/carbon/human/proc/hatch
|
||||
reviving = 0 //So they can try again when they're given a kickstart
|
||||
|
||||
//Alive when hatching
|
||||
else
|
||||
chimera_hatch()
|
||||
visible_message("<span class='danger'><p><font size=4>The dormant husk of [src] bursts open, revealing a new, intact copy in the pool of viscera.</font></p></span>") //Bloody hell...
|
||||
return
|
||||
else
|
||||
return //Runtime prevention.
|
||||
|
||||
/mob/living/carbon/human/proc/chimera_hatch()
|
||||
nutrition -= nutrition/2 //Cut their nutrition in half.
|
||||
var/old_nutrition = nutrition //Since the game is being annoying.
|
||||
verbs -= /mob/living/carbon/human/proc/hatch
|
||||
to_chat(src, "<span class='notice'>Your new body awakens, bursting free from your old skin.</span>")
|
||||
var/T = get_turf(src)
|
||||
new /obj/effect/gibspawner/human/scree(T)
|
||||
var/braindamage = brainloss/2 //If you have 100 brainloss, it gives you 50.
|
||||
does_not_breathe = 0 //start breathing again
|
||||
revive() // I did have special snowflake code, but this is easier.
|
||||
weakened = 2 //Not going to let you get up immediately. 2 ticks before you get up. Overrides the above 10000 weaken.
|
||||
|
||||
//Modify and record values (half nutrition and braindamage)
|
||||
var/old_nutrition = nutrition * 0.5
|
||||
var/braindamage = (brainloss * 0.5) //Can only heal half brain damage.
|
||||
|
||||
//I did have special snowflake code, but this is easier.
|
||||
revive()
|
||||
mutations.Remove(HUSK)
|
||||
nutrition = old_nutrition
|
||||
brainloss = braindamage //Gives them half their prior brain damage.
|
||||
update_canmove()
|
||||
setBrainLoss(braindamage)
|
||||
|
||||
//Drop everything
|
||||
for(var/obj/item/W in src)
|
||||
drop_from_inventory(W)
|
||||
spawn(3600 SECONDS) //1 hour wait until you can revive.
|
||||
reviving = FALSE
|
||||
to_chat(src, "Your body has recovered from the strenuous effort of rebuilding itself.")
|
||||
verbs -= /mob/living/carbon/human/proc/hatch
|
||||
return
|
||||
|
||||
/obj/effect/gibspawner/human/scree
|
||||
fleshcolor = "#14AD8B" //Scree blood.
|
||||
//Unfreeze some things
|
||||
does_not_breathe = FALSE
|
||||
update_canmove()
|
||||
weakened = 2
|
||||
|
||||
//Visual effects
|
||||
var/T = get_turf(src)
|
||||
new /obj/effect/gibspawner/human/xenochimera(T)
|
||||
|
||||
reviving = REVIVING_COOLDOWN
|
||||
schedule_callback_in(1 HOUR, VARSET_CALLBACK(src, reviving, 0))
|
||||
|
||||
/obj/effect/gibspawner/human/xenochimera
|
||||
fleshcolor = "#14AD8B"
|
||||
bloodcolor = "#14AD8B"
|
||||
|
||||
/mob/living/carbon/human/proc/getlightlevel() //easier than having the same code in like three places
|
||||
@@ -141,7 +155,7 @@
|
||||
else return 0
|
||||
|
||||
/mob/living/carbon/human/proc/handle_feral()
|
||||
if(handling_hal) return //avoid conflict with actual hallucinations
|
||||
if(handling_hal) return
|
||||
handling_hal = 1
|
||||
|
||||
if(client && feral >= 10) // largely a copy of handle_hallucinations() without the fake attackers. Unlike hallucinations, only fires once - if they're still feral they'll get hit again anyway.
|
||||
@@ -734,6 +748,12 @@
|
||||
|
||||
add_attack_logs(src,T,"Shredded (hardvore)")
|
||||
|
||||
/mob/living/proc/shred_limb_temp()
|
||||
set name = "Damage/Remove Prey's Organ (beartrap)"
|
||||
set desc = "Severely damages prey's organ. If the limb is already severely damaged, it will be torn off."
|
||||
set category = "Abilities"
|
||||
shred_limb()
|
||||
|
||||
/mob/living/proc/flying_toggle()
|
||||
set name = "Toggle Flight"
|
||||
set desc = "While flying over open spaces, you will use up some nutrition. If you run out nutrition, you will fall. Additionally, you can't fly if you are too heavy."
|
||||
|
||||
@@ -22,7 +22,7 @@
|
||||
tail = "tail" //Scree's tail. Can be disabled in the vore tab by choosing "hide species specific tail sprite"
|
||||
icobase_tail = 1
|
||||
inherent_verbs = list(
|
||||
/mob/living/carbon/human/proc/begin_reconstitute_form,
|
||||
/mob/living/carbon/human/proc/reconstitute_form,
|
||||
/mob/living/carbon/human/proc/sonar_ping,
|
||||
/mob/living/carbon/human/proc/succubus_drain,
|
||||
/mob/living/carbon/human/proc/succubus_drain_finalize,
|
||||
@@ -40,9 +40,9 @@
|
||||
Most, if not all chimeras possess the ability to undergo some type of regeneration process, at the cost of energy."
|
||||
|
||||
hazard_low_pressure = -1 //Prevents them from dying normally in space. Special code handled below.
|
||||
cold_level_1 = -5000 // All cold debuffs are handled below in handle_environment_special
|
||||
cold_level_2 = -5000
|
||||
cold_level_3 = -5000
|
||||
cold_level_1 = -1 // All cold debuffs are handled below in handle_environment_special
|
||||
cold_level_2 = -1
|
||||
cold_level_3 = -1
|
||||
|
||||
//primitive_form = "Farwa"
|
||||
|
||||
@@ -56,142 +56,198 @@
|
||||
|
||||
|
||||
/datum/species/xenochimera/handle_environment_special(var/mob/living/carbon/human/H)
|
||||
if(H.stat == 2) // If they're dead they won't think about being all feral and won't need all the code below.
|
||||
return
|
||||
//If they're KO'd/dead, they're probably not thinking a lot about much of anything.
|
||||
if(!H.stat)
|
||||
handle_feralness(H)
|
||||
|
||||
//handle feral triggers
|
||||
|
||||
if(H.nutrition <= 200||H.traumatic_shock > min(60, H.nutrition/10)) // Stress factors are in play
|
||||
// If they're hungry, give nag messages.
|
||||
if (!istype(H.loc, /mob)) // if they're in a mob, skip the hunger stuff so it doesn't mess with drain/absorption modes.
|
||||
if(H.nutrition < 200 && H.nutrition > 150)
|
||||
if(prob(0.5)) //A bit of an issue, not too bad.
|
||||
H << "<span class='info'>You feel rather hungry. It might be a good idea to find some some food...</span>"
|
||||
|
||||
else if(H.nutrition <= 150 && H.nutrition > 100)
|
||||
if(prob(0.5)) //Getting closer, should probably eat some food about now...
|
||||
H << "<span class='warning'>You feel like you're going to snap and give in to your hunger soon... It would be for the best to find some [pick("food","prey")] to eat...</span>"
|
||||
|
||||
else if(H.nutrition <= 100) //Should've eaten sooner!
|
||||
if(H.feral == 0)
|
||||
H << "<span class='danger'><big>Something in your mind flips, your instincts taking over, no longer able to fully comprehend your surroundings as survival becomes your primary concern - you must feed, survive, there is nothing else. Hunt. Eat. Hide. Repeat.</big></span>"
|
||||
log_and_message_admins("has gone feral due to hunger.", H)
|
||||
H.feral += 5 //just put them over the threshold by a decent amount for the first chunk.
|
||||
if(H.stat == CONSCIOUS)
|
||||
H.emote("twitch")
|
||||
if(H.feral + H.nutrition < 150) //Feralness increases while this hungry, capped at 50-150 depending on hunger.
|
||||
H.feral += 1
|
||||
|
||||
// If they're hurt, chance of snapping. Not if they're straight-up KO'd though.
|
||||
if (H.stat == CONSCIOUS && H.traumatic_shock >=min(60, H.nutrition/10)) //at 360 nutrition, this is 30 brute/burn, or 18 halloss. Capped at 50 brute/30 halloss - if they take THAT much, no amount of satiation will help them. Also they're fat.
|
||||
if (2.5*H.halloss >= H.traumatic_shock) //If the majority of their shock is due to halloss, greater chance of snapping.
|
||||
if(prob(min(10,(0.2 * H.traumatic_shock))))
|
||||
if(H.feral == 0)
|
||||
H << "<span class='danger'><big>The pain! It stings! Got to get away! Your instincts take over, urging you to flee, to hide, to go to ground, get away from here...</big></span>"
|
||||
log_and_message_admins("has gone feral due to halloss.", H)
|
||||
H.feral = max(H.feral, H.halloss) //if already more feral than their halloss justifies, don't increase it.
|
||||
H.emote("twitch")
|
||||
else if(prob(min(10,(0.1 * H.traumatic_shock))))
|
||||
H.emote("twitch")
|
||||
if(H.feral == 0)
|
||||
H << "<span class='danger'><big>Your fight-or-flight response kicks in, your injuries too much to simply ignore - you need to flee, to hide, survive at all costs - or destroy whatever is threatening you.</big></span>"
|
||||
H.feral = 2*H.traumatic_shock //Make 'em snap.
|
||||
log_and_message_admins("has gone feral due to injury.", H)
|
||||
else
|
||||
H.feral = max(H.feral, H.traumatic_shock * 2) //keep feralness up to match the current injury state.
|
||||
|
||||
else if (H.jitteriness >= 100) //No stress factors, but there's coffee. Keeps them mildly feral while they're all jittery.
|
||||
if(H.feral == 0)
|
||||
H << "<span class='warning'><big>Suddenly, something flips - everything that moves is... potential prey. A plaything. This is great! Time to hunt!</big></span>"
|
||||
log_and_message_admins("has gone feral due to jitteriness.", H)
|
||||
if(H.stat == CONSCIOUS)
|
||||
H.emote("twitch")
|
||||
H.feral = max(H.feral, H.jitteriness-100) //they'll be twitchy and pouncy while they're under the influence, and feralness won't wear off until they're calm.
|
||||
//While regenerating
|
||||
if(H.reviving && H.reviving != REVIVING_COOLDOWN)
|
||||
H.weakened = 5
|
||||
H.canmove = 0
|
||||
H.does_not_breathe = TRUE
|
||||
|
||||
//Cold/pressure effects when not regenerating
|
||||
else
|
||||
if (H.feral > 0) //still feral, but all stress factors are gone. Calm them down.
|
||||
H.feral -= 1
|
||||
if (H.feral <=0) //check if they're unferalled
|
||||
H.feral = 0
|
||||
H << "<span class='info'>Your thoughts start clearing, your feral urges having passed - for the time being, at least.</span>"
|
||||
log_and_message_admins("is no longer feral.", H)
|
||||
var/datum/gas_mixture/environment = H.loc.return_air()
|
||||
var/pressure2 = environment.return_pressure()
|
||||
var/adjusted_pressure2 = H.calculate_affecting_pressure(pressure2)
|
||||
|
||||
// handle what happens while feral
|
||||
//Very low pressure damage
|
||||
if(adjusted_pressure2 <= 20)
|
||||
H.take_overall_damage(brute=LOW_PRESSURE_DAMAGE, used_weapon = "Low Pressure")
|
||||
|
||||
if(H.feral > 0) //do the following if feral, otherwise no effects.
|
||||
var/light_amount = H.getlightlevel() //how much light there is in the place
|
||||
//Cold hurts and gives them pain messages, eventually weakening and paralysing, but doesn't damage or trigger feral.
|
||||
//NB: 'body_temperature' used here is the 'setpoint' species var
|
||||
var/temp_diff = body_temperature - H.bodytemperature
|
||||
if(temp_diff >= 50)
|
||||
H.shock_stage = min(H.shock_stage + (temp_diff/20), 160) // Divided by 20 is the same as previous numbers, but a full scale
|
||||
H.eye_blurry = max(5,H.eye_blurry)
|
||||
|
||||
H.shock_stage = max(H.shock_stage-(H.feral/20), 0) //if they lose enough health to hit softcrit, handle_shock() will keep resetting this. Otherwise, pissed off critters will lose shock faster than they gain it.
|
||||
|
||||
if(light_amount <= 0.5) // in the darkness. No need for custom scene-protection checks as it's just an occational infomessage.
|
||||
if(prob(2)) //periodic nagmessages just to remind 'em they're still feral
|
||||
if (H.traumatic_shock >=min(60, H.nutrition/10)) // if hurt, tell 'em to heal up
|
||||
H << "<span class='info'> This place seems safe, secure, hidden, a place to lick your wounds and recover...</span>"
|
||||
else if(H.nutrition <= 100) //If hungry, nag them to go and find someone or something to eat.
|
||||
H << "<span class='info'> Secure in your hiding place, your hunger still gnaws at you. You need to catch some food...</span>"
|
||||
else if(H.jitteriness >= 100)
|
||||
H << "<span class='info'> sneakysneakyyesyesyescleverhidingfindthingsyessssss</span>"
|
||||
else //otherwise, just tell them to keep hiding.
|
||||
H << "<span class='info'> ...safe...</span>"
|
||||
else // must be in a lit area
|
||||
var/list/nearby = oviewers(H)
|
||||
if (nearby.len) // someone's nearby
|
||||
if(prob(1)) // 1 in 100 chance of doing something so as not to interrupt scenes
|
||||
var/mob/M = pick(nearby)
|
||||
if (H.traumatic_shock >=min(60, H.nutrition/10)) //tell 'em to be wary of a random person
|
||||
H << "<span class='danger'> You're hurt, in danger, exposed, and [M] looks to be a little too close for comfort...</span>"
|
||||
else if(H.nutrition <= 250 || H.jitteriness > 0) //tell them a random person in view looks like food. It CAN happen when you're not hungry enough to be feral, especially if coffee is involved.
|
||||
H << "<span class='danger'> Every movement, every flick, every sight and sound has your full attention, your hunting instincts on high alert... In fact, [M] looks extremely appetizing...</span>"
|
||||
if(H.stat == CONSCIOUS)
|
||||
/datum/species/xenochimera/proc/handle_feralness(var/mob/living/carbon/human/H)
|
||||
|
||||
//Low-ish nutrition has messages and eventually feral
|
||||
var/hungry = H.nutrition <= 200
|
||||
|
||||
//At 360 nutrition, this is 30 brute/burn, or 18 halloss. Capped at 50 brute/30 halloss - if they take THAT much, no amount of satiation will help them. Also they're fat.
|
||||
var/shock = H.traumatic_shock > min(60, H.nutrition/10)
|
||||
|
||||
//Caffeinated xenochimera can become feral and have special messages
|
||||
var/jittery = H.jitteriness >= 100
|
||||
|
||||
//To reduce distant object references
|
||||
var/feral = H.feral
|
||||
|
||||
//Handle feral triggers and pre-feral messages
|
||||
if(!feral && (hungry || shock || jittery))
|
||||
|
||||
// If they're hungry, give nag messages (when not bellied)
|
||||
if(H.nutrition >= 100 && prob(0.5) && !isbelly(H.loc))
|
||||
switch(H.nutrition)
|
||||
if(150 to 200)
|
||||
to_chat(H,"<span class='info'>You feel rather hungry. It might be a good idea to find some some food...</span>")
|
||||
if(100 to 150)
|
||||
to_chat(H,"<span class='warning'>You feel like you're going to snap and give in to your hunger soon... It would be for the best to find some [pick("food","prey")] to eat...</span>")
|
||||
|
||||
// Going feral due to hunger
|
||||
else if(H.nutrition < 100 && !isbelly(H.loc))
|
||||
to_chat(H,"<span class='danger'><big>Something in your mind flips, your instincts taking over, no longer able to fully comprehend your surroundings as survival becomes your primary concern - you must feed, survive, there is nothing else. Hunt. Eat. Hide. Repeat.</big></span>")
|
||||
log_and_message_admins("has gone feral due to hunger.", H)
|
||||
feral = 5
|
||||
if(!H.stat)
|
||||
H.emote("twitch")
|
||||
|
||||
// If they're hurt, chance of snapping.
|
||||
else if(shock)
|
||||
|
||||
//If the majority of their shock is due to halloss, greater chance of snapping.
|
||||
if(2.5*H.halloss >= H.traumatic_shock)
|
||||
if(prob(min(10,(0.2 * H.traumatic_shock))))
|
||||
to_chat(H,"<span class='danger'><big>The pain! It stings! Got to get away! Your instincts take over, urging you to flee, to hide, to go to ground, get away from here...</big></span>")
|
||||
log_and_message_admins("has gone feral due to halloss.", H)
|
||||
feral = 5
|
||||
if(!H.stat)
|
||||
H.emote("twitch")
|
||||
|
||||
//Majority due to other damage sources
|
||||
else if(prob(min(10,(0.1 * H.traumatic_shock))))
|
||||
to_chat(H,"<span class='danger'><big>Your fight-or-flight response kicks in, your injuries too much to simply ignore - you need to flee, to hide, survive at all costs - or destroy whatever is threatening you.</big></span>")
|
||||
feral = 5
|
||||
log_and_message_admins("has gone feral due to injury.", H)
|
||||
if(!H.stat)
|
||||
H.emote("twitch")
|
||||
|
||||
//No hungry or shock, but jittery
|
||||
else if(jittery)
|
||||
to_chat(H,"<span class='warning'><big>Suddenly, something flips - everything that moves is... potential prey. A plaything. This is great! Time to hunt!</big></span>")
|
||||
feral = 5
|
||||
log_and_message_admins("has gone feral due to jitteriness.", H)
|
||||
if(!H.stat)
|
||||
H.emote("twitch")
|
||||
|
||||
// Handle being feral
|
||||
if(feral)
|
||||
|
||||
//Shock due to mostly halloss. More feral.
|
||||
if(shock && 2.5*H.halloss >= H.traumatic_shock)
|
||||
feral = max(feral, H.halloss)
|
||||
|
||||
//Shock due to mostly injury. More feral.
|
||||
else if(shock)
|
||||
feral = max(feral, H.traumatic_shock * 2)
|
||||
|
||||
//Still jittery? More feral.
|
||||
if(jittery)
|
||||
feral = max(feral, H.jitteriness-100)
|
||||
|
||||
//Still hungry? More feral.
|
||||
if(H.feral + H.nutrition < 150)
|
||||
feral++
|
||||
else
|
||||
feral = max(0,--feral)
|
||||
|
||||
//Set our real mob's var to our temp var
|
||||
H.feral = feral
|
||||
|
||||
//Did we just finish being feral?
|
||||
if(!feral)
|
||||
to_chat(H,"<span class='info'>Your thoughts start clearing, your feral urges having passed - for the time being, at least.</span>")
|
||||
log_and_message_admins("is no longer feral.", H)
|
||||
return
|
||||
|
||||
//If they lose enough health to hit softcrit, handle_shock() will keep resetting this. Otherwise, pissed off critters will lose shock faster than they gain it.
|
||||
H.shock_stage = max(H.shock_stage-(feral/20), 0)
|
||||
|
||||
//Handle light/dark areas
|
||||
var/turf/T = get_turf(H)
|
||||
if(!T)
|
||||
return //Nullspace
|
||||
var/darkish = T.get_lumcount() <= 0.1
|
||||
|
||||
//Don't bother doing heavy lifting if we weren't going to give emotes anyway.
|
||||
if(!prob(1))
|
||||
|
||||
//This is basically the 'lite' version of the below block.
|
||||
var/list/nearby = H.living_mobs(world.view)
|
||||
|
||||
//Not in the dark and out in the open.
|
||||
if(!darkish && isturf(H.loc))
|
||||
|
||||
//Always handle feral if nobody's around and not in the dark.
|
||||
if(!nearby.len)
|
||||
H.handle_feral()
|
||||
else // nobody around
|
||||
H.handle_feral()
|
||||
if(prob(2)) //periodic nagmessages
|
||||
if(H.nutrition <= 100) //If hungry, nag them to go and find someone or something to eat.
|
||||
H << "<span class='danger'> Confusing sights and sounds and smells surround you - scary and disorienting it may be, but the drive to hunt, to feed, to survive, compels you.</span>"
|
||||
if(H.stat == CONSCIOUS)
|
||||
H.emote("twitch")
|
||||
else if(H.jitteriness >= 100)
|
||||
H << "<span class='danger'> yesyesyesyesyesyesgetthethingGETTHETHINGfindfoodsfindpreypounceyesyesyes</span>"
|
||||
if(H.stat == CONSCIOUS)
|
||||
H.emote("twitch")
|
||||
else //otherwise, just tell them to hide.
|
||||
H << "<span class='danger'> Confusing sights and sounds and smells surround you, this place is wrong, confusing, frightening. You need to hide, go to ground...</span>"
|
||||
if(H.stat == CONSCIOUS)
|
||||
H.emote("twitch")
|
||||
|
||||
//Rarely handle feral if someone is around
|
||||
else if(prob(1))
|
||||
H.handle_feral()
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////////////////////
|
||||
///////////WIP CODE TO MAKE XENOCHIMERAS NOT DIE IN SPACE WHILE REGENNING BELOW/////////// //I put WIP, but what I really meant to put was "Finished"
|
||||
//////////////////////////////////////////////////////////////////////////////////////////
|
||||
//And bail
|
||||
return
|
||||
|
||||
var/datum/gas_mixture/environment = H.loc.return_air()
|
||||
var/pressure2 = environment.return_pressure()
|
||||
var/adjusted_pressure2 = H.calculate_affecting_pressure(pressure2)
|
||||
// In the darkness or "hidden". No need for custom scene-protection checks as it's just an occational infomessage.
|
||||
if(darkish || !isturf(H.loc))
|
||||
// If hurt, tell 'em to heal up
|
||||
if (shock)
|
||||
to_chat(H,"<span class='info'>This place seems safe, secure, hidden, a place to lick your wounds and recover...</span>")
|
||||
|
||||
if(adjusted_pressure2 <= 20 && H.does_not_breathe) //If they're in a enviroment with no pressure and are not breathing (See: regenerating), don't kill them.
|
||||
//This is just to prevent them from taking damage if they're in stasis.
|
||||
//If hungry, nag them to go and find someone or something to eat.
|
||||
else if(hungry)
|
||||
to_chat(H,"<span class='info'>Secure in your hiding place, your hunger still gnaws at you. You need to catch some food...</span>")
|
||||
|
||||
else if(adjusted_pressure2 <= 20) //If they're in an enviroment with no pressure and are NOT in stasis, damage them.
|
||||
H.take_overall_damage(brute=LOW_PRESSURE_DAMAGE, used_weapon = "Low Pressure")
|
||||
//If jittery, etc
|
||||
else if(jittery)
|
||||
to_chat(H,"<span class='info'>sneakysneakyyesyesyescleverhidingfindthingsyessssss</span>")
|
||||
|
||||
if(H.bodytemperature <= 260 && H.does_not_breathe) //If they're regenerating, don't give them them the negative cold effects
|
||||
//This is just here to prevent them from getting cold effects
|
||||
//Otherwise, just tell them to keep hiding.
|
||||
else
|
||||
to_chat(H,"<span class='info'>...safe...</span>")
|
||||
|
||||
// NOT in the darkness
|
||||
else
|
||||
|
||||
//Twitch twitch
|
||||
if(!H.stat)
|
||||
H.emote("twitch")
|
||||
|
||||
var/list/nearby = H.living_mobs(world.view)
|
||||
|
||||
// Someone/something nearby
|
||||
if(nearby.len)
|
||||
var/M = pick(nearby)
|
||||
if(shock)
|
||||
to_chat(H,"<span class='danger'>You're hurt, in danger, exposed, and [M] looks to be a little too close for comfort...</span>")
|
||||
else if(hungry || jittery)
|
||||
to_chat(H,"<span class='danger'>Every movement, every flick, every sight and sound has your full attention, your hunting instincts on high alert... In fact, [M] looks extremely appetizing...</span>")
|
||||
|
||||
// Nobody around
|
||||
else
|
||||
if(hungry)
|
||||
to_chat(H,"<span class='danger'>Confusing sights and sounds and smells surround you - scary and disorienting it may be, but the drive to hunt, to feed, to survive, compels you.</span>")
|
||||
else if(jittery)
|
||||
to_chat(H,"<span class='danger'>yesyesyesyesyesyesgetthethingGETTHETHINGfindfoodsfindpreypounceyesyesyes</span>")
|
||||
else
|
||||
to_chat(H,"<span class='danger'>Confusing sights and sounds and smells surround you, this place is wrong, confusing, frightening. You need to hide, go to ground...</span>")
|
||||
|
||||
else if(H.bodytemperature <= 260) //If they're not in stasis and are cold. Don't really have to add in an exception to cryo cells, as the effects aren't anything /too/ horrible.
|
||||
var/coldshock = 0
|
||||
if(H.bodytemperature <= 260 && H.bodytemperature >= 200) //Chilly.
|
||||
coldshock = 4 //This will begin to knock them out until they run out of oxygen and suffocate or until someone finds them.
|
||||
H.eye_blurry = 5 //Blurry vision in the cold.
|
||||
if(H.bodytemperature <= 199 && H.bodytemperature >= 100) //Extremely cold. Even in somewhere like the server room it takes a while for bodytemp to drop this low.
|
||||
coldshock = 8
|
||||
H.eye_blurry = 5
|
||||
if(H.bodytemperature <= 99) //Insanely cold.
|
||||
coldshock = 16
|
||||
H.eye_blurry = 5
|
||||
H.shock_stage = min(H.shock_stage + coldshock, 160) //cold hurts and gives them pain messages, eventually weakening and paralysing, but doesn't damage or trigger feral.
|
||||
return
|
||||
|
||||
/datum/species/xenochimera/proc/produceCopy(var/datum/species/to_copy,var/list/traits,var/mob/living/carbon/human/H)
|
||||
ASSERT(to_copy)
|
||||
@@ -272,10 +328,10 @@
|
||||
Before they were found they built great cities out of their silk, being united and subjugated in warring factions under great Star Queens \
|
||||
Who forced the working class to build huge, towering cities to attempt to reach the stars, which they worship as gems of great spiritual and magical significance."
|
||||
|
||||
hazard_low_pressure = -1 //Prevents them from dying normally in space. Special code handled below.
|
||||
cold_level_1 = -5000 // All cold debuffs are handled below in handle_environment_special
|
||||
cold_level_2 = -5000
|
||||
cold_level_3 = -5000
|
||||
hazard_low_pressure = 20 //Prevents them from dying normally in space. Special code handled below.
|
||||
cold_level_1 = -1 // All cold debuffs are handled below in handle_environment_special
|
||||
cold_level_2 = -1
|
||||
cold_level_3 = -1
|
||||
|
||||
//primitive_form = "Monkey" //I dunno. Replace this in the future.
|
||||
|
||||
@@ -288,16 +344,9 @@
|
||||
blood_color = "#0952EF" //Spiders have blue blood.
|
||||
|
||||
/datum/species/spider/handle_environment_special(var/mob/living/carbon/human/H)
|
||||
if(H.stat == 2) // If they're dead they won't need anything.
|
||||
if(H.stat == DEAD) // If they're dead they won't need anything.
|
||||
return
|
||||
|
||||
var/datum/gas_mixture/environment = H.loc.return_air()
|
||||
var/pressure2 = environment.return_pressure()
|
||||
var/adjusted_pressure2 = H.calculate_affecting_pressure(pressure2)
|
||||
|
||||
if(adjusted_pressure2 <= 20) //If they're in an enviroment with no pressure and are NOT in stasis, like a stasis bodybag, damage them.
|
||||
H.take_overall_damage(brute=LOW_PRESSURE_DAMAGE, used_weapon = "Low Pressure")
|
||||
|
||||
if(H.bodytemperature <= 260) //If they're really cold, they go into stasis.
|
||||
var/coldshock = 0
|
||||
if(H.bodytemperature <= 260 && H.bodytemperature >= 200) //Chilly.
|
||||
|
||||
@@ -118,11 +118,13 @@
|
||||
desc = "You simply can't see colors at all, period. You are 100% colorblind."
|
||||
cost = -1
|
||||
|
||||
/datum/modifier/colorblindness_mono
|
||||
name = "Colorblindness (Monochromancy)"
|
||||
desc = "You simply can't see colors at all, period. You are 100% colorblind."
|
||||
|
||||
/datum/trait/colorblind/apply(var/datum/species/S,var/mob/living/carbon/human/H)
|
||||
..(S,H)
|
||||
if(!H.plane_holder)
|
||||
H.plane_holder = new(H)
|
||||
H.plane_holder.set_vis(VIS_D_COLORBLIND,TRUE) //The default is monocrhomia, no need to set values
|
||||
H.add_modifier(/datum/modifier/trait/colorblind_mono)
|
||||
|
||||
/datum/trait/colorblind/para_vulp
|
||||
name = "Colorblindness (Para Vulp)"
|
||||
@@ -131,7 +133,7 @@
|
||||
|
||||
/datum/trait/colorblind/para_vulp/apply(var/datum/species/S,var/mob/living/carbon/human/H)
|
||||
..(S,H)
|
||||
H.plane_holder.alter_values(VIS_D_COLORBLIND,list("variety" = "Paradise Vulp"))
|
||||
H.add_modifier(/datum/modifier/trait/colorblind_vulp)
|
||||
|
||||
/datum/trait/colorblind/para_taj
|
||||
name = "Colorblindness (Para Taj)"
|
||||
@@ -140,4 +142,4 @@
|
||||
|
||||
/datum/trait/colorblind/para_taj/apply(var/datum/species/S,var/mob/living/carbon/human/H)
|
||||
..(S,H)
|
||||
H.plane_holder.alter_values(VIS_D_COLORBLIND,list("variety" = "Paradise Taj"))
|
||||
H.add_modifier(/datum/modifier/trait/colorblind_taj)
|
||||
|
||||
@@ -1124,6 +1124,9 @@ default behaviour is:
|
||||
var/list/colors_to_blend = list()
|
||||
for(var/datum/modifier/M in modifiers)
|
||||
if(!isnull(M.client_color))
|
||||
if(islist(M.client_color)) //It's a color matrix! Forget it. Just use that one.
|
||||
animate(client, color = M.client_color, time = 10)
|
||||
return
|
||||
colors_to_blend += M.client_color
|
||||
|
||||
if(colors_to_blend.len)
|
||||
|
||||
@@ -23,6 +23,8 @@
|
||||
var/startdrain = 500
|
||||
var/max_item_count = 1
|
||||
var/gulpsound = 'sound/vore/gulp.ogg'
|
||||
var/digest_brute = 2
|
||||
var/digest_burn = 3
|
||||
|
||||
/obj/item/device/dogborg/sleeper/New()
|
||||
..()
|
||||
@@ -504,9 +506,14 @@
|
||||
if((T.status_flags & GODMODE) || !T.digestable)
|
||||
items_preserved += T
|
||||
else
|
||||
T.adjustBruteLoss(2)
|
||||
T.adjustFireLoss(3)
|
||||
drain(-100) //20*total loss as with voreorgan stats.
|
||||
var/old_brute = T.getBruteLoss()
|
||||
var/old_burn = T.getFireLoss()
|
||||
T.adjustBruteLoss(digest_brute)
|
||||
T.adjustFireLoss(digest_burn)
|
||||
var/actual_brute = T.getBruteLoss() - old_brute
|
||||
var/actual_burn = T.getFireLoss() - old_burn
|
||||
var/damage_gain = actual_brute + actual_burn
|
||||
drain(-25 * damage_gain) //25*total loss as with voreorgan stats.
|
||||
update_patient()
|
||||
|
||||
//Pick a random item to deal with (if there are any)
|
||||
|
||||
@@ -1,9 +0,0 @@
|
||||
/mob/living/silicon/robot/drone
|
||||
can_enter_vent_with = list(
|
||||
/obj/item/device/radio/borg,
|
||||
/obj/machinery/camera,
|
||||
/obj/item/device/camera/siliconcam/drone_camera,
|
||||
/obj/item/weapon/robot_module/drone,
|
||||
/obj/item/weapon/cell,
|
||||
/obj/screen/movable/ability_master,
|
||||
/obj/item/weapon/card/id/synthetic)
|
||||
@@ -49,10 +49,7 @@
|
||||
qdel(src)
|
||||
|
||||
/mob/living/simple_animal/hostile/mimic/MouseEntered(location, control, params)
|
||||
..()
|
||||
closeToolTip(usr)
|
||||
// ideally, we'd remove the code in ..() that opens the tooltip,
|
||||
// but then we'd need to duplicate all the other code in ..()
|
||||
return // Do not call parent: Mimics shouldn't have tooltips!
|
||||
|
||||
//
|
||||
// Crate Mimic
|
||||
|
||||
@@ -84,13 +84,16 @@ Nurse Family
|
||||
var/atom/cocoon_target
|
||||
var/egg_inject_chance = 5
|
||||
|
||||
// VOREStation Edit - Keep Nurse Hat Spiders
|
||||
/mob/living/simple_animal/hostile/giant_spider/nurse/medical
|
||||
/mob/living/simple_animal/hostile/giant_spider/nurse/hat
|
||||
desc = "Furry and beige, it makes you shudder to look at it. This one has brilliant green eyes and a tiny nurse hat."
|
||||
icon_state = "nursemed"
|
||||
icon_living = "nursemed"
|
||||
icon_dead = "nursemed_dead"
|
||||
|
||||
maxHealth = 50
|
||||
health = 50
|
||||
|
||||
// VOREStation Edit
|
||||
melee_damage_lower = 8
|
||||
melee_damage_upper = 16
|
||||
poison_type = "tramadol"
|
||||
|
||||
+28
-6
@@ -1,4 +1,4 @@
|
||||
/mob/living/simple_animal/hostile/badboi
|
||||
/mob/living/simple_animal/hostile/corrupthound
|
||||
name = "corrupt hound"
|
||||
desc = "Good boy machine broke. This is definitely no good news for the organic lifeforms in vicinity."
|
||||
icon = 'icons/mob/vore64x32.dmi'
|
||||
@@ -48,6 +48,9 @@
|
||||
minbodytemp = 150
|
||||
maxbodytemp = 900
|
||||
|
||||
var/image/eye_layer = null
|
||||
|
||||
|
||||
vore_active = TRUE
|
||||
vore_capacity = 1
|
||||
vore_pounce_chance = 15
|
||||
@@ -57,7 +60,7 @@
|
||||
|
||||
loot_list = list(/obj/item/borg/upgrade/syndicate = 6, /obj/item/borg/upgrade/vtec = 6, /obj/item/weapon/material/knife/ritual = 6, /obj/item/weapon/disk/nifsoft/compliance = 6)
|
||||
|
||||
/mob/living/simple_animal/hostile/badboi/prettyboi
|
||||
/mob/living/simple_animal/hostile/corrupthound/prettyboi
|
||||
name = "corrupt corrupt hound"
|
||||
desc = "Bad boy machine broke as well. Seems an attempt was made to achieve a less threatening look, and this one is definitely having some conflicting feelings about it."
|
||||
icon_state = "prettyboi"
|
||||
@@ -76,18 +79,37 @@
|
||||
say_got_target = list("HERE COMES BIG MEAN HUG MACHINE!", "I'LL BE GENTLE!", "FUEL ME FRIEND!", "I*M SO SORRY!", "YUMMY TREAT DETECTED!", "LOVE ME!", "Not again. NOT AGAIN!")
|
||||
|
||||
|
||||
/mob/living/simple_animal/hostile/badboi/isSynthetic()
|
||||
/mob/living/simple_animal/hostile/corrupthound/isSynthetic()
|
||||
return TRUE
|
||||
|
||||
/mob/living/simple_animal/hostile/badboi/speech_bubble_appearance()
|
||||
/mob/living/simple_animal/hostile/corrupthound/speech_bubble_appearance()
|
||||
return "synthetic_evil"
|
||||
|
||||
/mob/living/simple_animal/hostile/badboi/PunchTarget()
|
||||
/mob/living/simple_animal/hostile/corrupthound/PunchTarget()
|
||||
if(istype(target_mob,/mob/living/simple_animal/mouse))
|
||||
return EatTarget()
|
||||
else ..()
|
||||
|
||||
/mob/living/simple_animal/hostile/badboi/death(gibbed, deathmessage = "shudders and collapses!")
|
||||
/mob/living/simple_animal/hostile/corrupthound/proc/add_eyes()
|
||||
if(!eye_layer)
|
||||
eye_layer = image(icon, "badboi-eyes")
|
||||
eye_layer.plane = PLANE_LIGHTING_ABOVE
|
||||
add_overlay(eye_layer)
|
||||
|
||||
/mob/living/simple_animal/hostile/corrupthound/proc/remove_eyes()
|
||||
cut_overlay(eye_layer)
|
||||
|
||||
/mob/living/simple_animal/hostile/corrupthound/New()
|
||||
add_eyes()
|
||||
..()
|
||||
|
||||
/mob/living/simple_animal/hostile/corrupthound/death(gibbed, deathmessage = "shudders and collapses!")
|
||||
.=..()
|
||||
resting = 0
|
||||
icon_state = icon_dead
|
||||
|
||||
/mob/living/simple_animal/hostile/corrupthound/update_icon()
|
||||
. = ..()
|
||||
remove_eyes()
|
||||
if(stat == CONSCIOUS && !resting)
|
||||
add_eyes()
|
||||
@@ -46,6 +46,9 @@
|
||||
pixel_x = -16
|
||||
pixel_y = 0
|
||||
|
||||
var/glowyeyes = FALSE
|
||||
var/image/eye_layer = null
|
||||
var/eyetype
|
||||
var/mob/living/carbon/human/friend
|
||||
var/tamed = 0
|
||||
var/tame_chance = 50 //It's a fiddy-fiddy default you may get a buddy pal or you may get mauled and ate. Win-win!
|
||||
@@ -78,6 +81,8 @@
|
||||
max_co2 = 0
|
||||
min_n2 = 0
|
||||
max_n2 = 0
|
||||
glowyeyes = TRUE
|
||||
eyetype = "photie"
|
||||
|
||||
/mob/living/simple_animal/otie/friendly //gets the pet2tame feature and doesn't kill you right away
|
||||
name = "otie"
|
||||
@@ -116,6 +121,8 @@
|
||||
max_co2 = 0
|
||||
min_n2 = 0
|
||||
max_n2 = 0
|
||||
glowyeyes = TRUE
|
||||
eyetype = "photie"
|
||||
|
||||
/mob/living/simple_animal/otie/security //tame by default unless you're a marked crimester. can be befriended to follow with pets tho.
|
||||
name = "guard otie"
|
||||
@@ -128,6 +135,8 @@
|
||||
maxHealth = 200 //armored or something
|
||||
health = 200
|
||||
tamed = 1
|
||||
glowyeyes = TRUE
|
||||
eyetype = "sotie"
|
||||
loot_list = list(/obj/item/clothing/glasses/sunglasses/sechud,/obj/item/clothing/suit/armor/vest/alt)
|
||||
vore_pounce_chance = 60 // Good boys don't do too much police brutality.
|
||||
|
||||
@@ -151,6 +160,8 @@
|
||||
max_co2 = 0
|
||||
min_n2 = 0
|
||||
max_n2 = 0
|
||||
glowyeyes = TRUE
|
||||
eyetype = "sotie"
|
||||
|
||||
/mob/living/simple_animal/otie/PunchTarget()
|
||||
if(istype(target_mob,/mob/living/simple_animal/mouse))
|
||||
@@ -322,8 +333,27 @@
|
||||
else
|
||||
..()
|
||||
|
||||
/mob/living/simple_animal/otie/death(gibbed, deathmessage = "dies!")
|
||||
resting = 0
|
||||
icon_state = icon_dead
|
||||
update_icon()
|
||||
/mob/living/simple_animal/otie/proc/add_eyes()
|
||||
if(!eye_layer)
|
||||
eye_layer = image(icon, "[eyetype]-eyes")
|
||||
eye_layer.plane = PLANE_LIGHTING_ABOVE
|
||||
add_overlay(eye_layer)
|
||||
|
||||
/mob/living/simple_animal/otie/proc/remove_eyes()
|
||||
cut_overlay(eye_layer)
|
||||
|
||||
/mob/living/simple_animal/otie/New()
|
||||
if(glowyeyes)
|
||||
add_eyes()
|
||||
..()
|
||||
|
||||
/mob/living/simple_animal/otie/update_icon()
|
||||
. = ..()
|
||||
remove_eyes()
|
||||
if(glowyeyes && stat == CONSCIOUS && !resting)
|
||||
add_eyes()
|
||||
|
||||
/mob/living/simple_animal/otie/death(gibbed, deathmessage = "dies!")
|
||||
.=..()
|
||||
resting = 0
|
||||
icon_state = icon_dead
|
||||
+2
-2
@@ -1,4 +1,4 @@
|
||||
/mob/living/simple_animal/hostile/rous
|
||||
/mob/living/simple_animal/hostile/rat
|
||||
name = "giant rat"
|
||||
desc = "In what passes for a hierarchy among verminous rodents, this one is king."
|
||||
tt_desc = "Mus muscular"
|
||||
@@ -41,6 +41,6 @@
|
||||
vore_pounce_chance = 45
|
||||
vore_icons = SA_ICON_LIVING | SA_ICON_REST
|
||||
|
||||
/mob/living/simple_animal/hostile/rous/death()
|
||||
/mob/living/simple_animal/hostile/rat/death()
|
||||
playsound(src, 'sound/effects/mouse_squeak_loud.ogg', 50, 1)
|
||||
..()
|
||||
+3
-3
@@ -1,4 +1,4 @@
|
||||
/mob/living/simple_animal/wah
|
||||
/mob/living/simple_animal/redpanda
|
||||
name = "red panda"
|
||||
desc = "It's a wah! Beware of doom pounce!"
|
||||
tt_desc = "Ailurus fulgens"
|
||||
@@ -29,7 +29,7 @@
|
||||
emote_see = list("trundles around","rears up onto their hind legs and pounces a bug")
|
||||
|
||||
// Activate Noms!
|
||||
/mob/living/simple_animal/wah
|
||||
/mob/living/simple_animal/redpanda
|
||||
vore_active = 1
|
||||
vore_bump_chance = 10
|
||||
vore_bump_emote = "playfully lunges at"
|
||||
@@ -37,7 +37,7 @@
|
||||
vore_default_mode = DM_HOLD // above will only matter if someone toggles it anyway
|
||||
vore_icons = SA_ICON_LIVING
|
||||
|
||||
/mob/living/simple_animal/wah/fae
|
||||
/mob/living/simple_animal/redpanda/fae
|
||||
name = "dark wah"
|
||||
desc = "Ominous, but still cute!"
|
||||
tt_desc = "Ailurus brattus"
|
||||
@@ -1,4 +1,4 @@
|
||||
/mob/living/simple_animal/hostile/snake
|
||||
/mob/living/simple_animal/hostile/giant_snake
|
||||
name = "giant snake"
|
||||
desc = "Snakes. Why did it have to be snakes?"
|
||||
icon = 'icons/mob/vore64x64.dmi'
|
||||
@@ -21,7 +21,7 @@
|
||||
pixel_y = -16
|
||||
|
||||
// Activate Noms!
|
||||
/mob/living/simple_animal/hostile/snake
|
||||
/mob/living/simple_animal/hostile/giant_snake
|
||||
vore_active = 1
|
||||
vore_pounce_chance = 25
|
||||
vore_icons = SA_ICON_LIVING
|
||||
|
||||
@@ -34,6 +34,11 @@
|
||||
if(hud_used) qdel(hud_used) //remove the hud objects
|
||||
hud_used = new /datum/hud(src)
|
||||
|
||||
if(client.prefs && client.prefs.client_fps)
|
||||
client.fps = client.prefs.client_fps
|
||||
else
|
||||
client.fps = 0 // Results in using the server FPS
|
||||
|
||||
next_move = 1
|
||||
disconnect_time = null //clear the disconnect time
|
||||
sight |= SEE_SELF
|
||||
@@ -56,6 +61,11 @@
|
||||
client.screen += plane_holder.plane_masters
|
||||
recalculate_vis()
|
||||
|
||||
// AO support
|
||||
var/ao_enabled = client.is_preference_enabled(/datum/client_preference/ambient_occlusion)
|
||||
plane_holder.set_ao(VIS_OBJS, ao_enabled)
|
||||
plane_holder.set_ao(VIS_MOBS, ao_enabled)
|
||||
|
||||
//set macro to normal incase it was overriden (like cyborg currently does)
|
||||
client.set_hotkeys_macro("macro", "hotkeymode")
|
||||
|
||||
|
||||
@@ -11,6 +11,8 @@
|
||||
my_mob = this_guy
|
||||
|
||||
//It'd be nice to lazy init these but some of them are important to just EXIST. Like without ghost planemaster, you can see ghosts. Go figure.
|
||||
|
||||
// 'Utility' planes
|
||||
plane_masters[VIS_FULLBRIGHT] = new /obj/screen/plane_master/fullbright //Lighting system (lighting_overlay objects)
|
||||
plane_masters[VIS_LIGHTING] = new /obj/screen/plane_master/lighting //Lighting system (but different!)
|
||||
plane_masters[VIS_GHOSTS] = new /obj/screen/plane_master/ghosts //Ghosts!
|
||||
@@ -31,11 +33,13 @@
|
||||
plane_masters[VIS_ADMIN2] = new /obj/screen/plane_master{plane = PLANE_ADMIN2} //For admin use
|
||||
plane_masters[VIS_ADMIN3] = new /obj/screen/plane_master{plane = PLANE_ADMIN3} //For admin use
|
||||
|
||||
plane_masters[VIS_D_COLORBLIND] = new /obj/screen/plane_master/colorblindness //Colorblindness (affects world)
|
||||
plane_masters[VIS_D_COLORBLINDI]= new /obj/screen/plane_master/colorblindness/items //Colorblindness (items in HUD, subplane of above, don't toggle)
|
||||
|
||||
plane_masters[VIS_MESONS] = new /obj/screen/plane_master{plane = PLANE_MESONS} //Meson-specific things like open ceilings.
|
||||
|
||||
// Real tangible stuff planes
|
||||
plane_masters[VIS_TURFS] = new /obj/screen/plane_master/main{plane = TURF_PLANE}
|
||||
plane_masters[VIS_OBJS] = new /obj/screen/plane_master/main{plane = OBJ_PLANE}
|
||||
plane_masters[VIS_MOBS] = new /obj/screen/plane_master/main{plane = MOB_PLANE}
|
||||
|
||||
..()
|
||||
|
||||
/datum/plane_holder/Destroy()
|
||||
@@ -70,6 +74,17 @@
|
||||
for(var/SP in subplanes)
|
||||
set_vis(which = SP, new_alpha = new_alpha)
|
||||
|
||||
/datum/plane_holder/proc/set_ao(var/which = null, var/enabled = FALSE)
|
||||
ASSERT(which)
|
||||
var/obj/screen/plane_master/PM = plane_masters[which]
|
||||
if(!PM)
|
||||
crash_with("Tried to set_ao [which] in plane_holder on [my_mob]!")
|
||||
PM.set_ambient_occlusion(enabled)
|
||||
if(PM.sub_planes)
|
||||
var/list/subplanes = PM.sub_planes
|
||||
for(var/SP in subplanes)
|
||||
set_ao(SP, enabled)
|
||||
|
||||
/datum/plane_holder/proc/alter_values(var/which = null, var/list/values = null)
|
||||
ASSERT(which)
|
||||
var/obj/screen/plane_master/PM = plane_masters[which]
|
||||
@@ -124,6 +139,11 @@
|
||||
new_alpha = sanitize_integer(new_alpha, 0, 255, 255)
|
||||
alpha = new_alpha
|
||||
|
||||
/obj/screen/plane_master/proc/set_ambient_occlusion(var/enabled = FALSE)
|
||||
filters -= AMBIENT_OCCLUSION
|
||||
if(enabled)
|
||||
filters += AMBIENT_OCCLUSION
|
||||
|
||||
/obj/screen/plane_master/proc/alter_plane_values()
|
||||
return //Stub
|
||||
|
||||
@@ -152,55 +172,8 @@
|
||||
plane = PLANE_GHOSTS
|
||||
desired_alpha = 127 //When enabled, they're like half-transparent
|
||||
|
||||
//'Normal'ness v v v
|
||||
//Various types of colorblindness R2R R2G R2B G2R G2G G2B B2R B2G B2B
|
||||
#define MATRIX_Monochromia list(0.33, 0.33, 0.33, 0.59, 0.59, 0.59, 0.11, 0.11, 0.11)
|
||||
#define MATRIX_Protanopia list(0.57, 0.43, 0, 0.56, 0.44, 0, 0, 0.24, 0.76)
|
||||
#define MATRIX_Protanomaly list(0.82, 0.18, 0, 0.33, 0.67, 0, 0, 0.13, 0.88)
|
||||
#define MATRIX_Deuteranopia list(0.63, 0.38, 0, 0.70, 0.30, 0, 0, 0.30, 0.70)
|
||||
#define MATRIX_Deuteranomaly list(0.80, 0.20, 0, 0.26, 0.74, 0, 0, 0.14, 0.86)
|
||||
#define MATRIX_Tritanopia list(0.95, 0.05, 0, 0, 0.43, 0.57, 0, 0.48, 0.53)
|
||||
#define MATRIX_Tritanomaly list(0.97, 0.03, 0, 0, 0.73, 0.27, 0, 0.18, 0.82)
|
||||
#define MATRIX_Achromatopsia list(0.30, 0.59, 0.11, 0.30, 0.59, 0.11, 0.30, 0.59, 0.11)
|
||||
#define MATRIX_Achromatomaly list(0.62, 0.32, 0.06, 0.16, 0.78, 0.06, 0.16, 0.32, 0.52)
|
||||
#define MATRIX_Vulp_Colorblind list(0.50, 0.40, 0.10, 0.50, 0.40, 0.10, 0, 0.20, 0.80)
|
||||
#define MATRIX_Taj_Colorblind list(0.40, 0.20, 0.40, 0.40, 0.60, 0, 0.20, 0.20, 0.60)
|
||||
|
||||
/////////////////
|
||||
//Colorblindness uses special color shenanigans
|
||||
/obj/screen/plane_master/colorblindness
|
||||
plane = PLANE_WORLD //Affects the main game world
|
||||
color = MATRIX_Monochromia
|
||||
alpha = 255 //Starts out nice and opaque
|
||||
invisibility = 101 //Can't see it usually
|
||||
mouse_opacity = 1 //Don't make entire world not visible pls
|
||||
invis_toggle = TRUE
|
||||
sub_planes = list(VIS_D_COLORBLINDI)
|
||||
var/list/varieties = list(
|
||||
"Monochromia" = MATRIX_Monochromia,
|
||||
"Protanopia" = MATRIX_Protanopia,
|
||||
"Protanomaly" = MATRIX_Protanomaly,
|
||||
"Deuteranopia" = MATRIX_Deuteranopia,
|
||||
"Deuteranomaly" = MATRIX_Deuteranomaly,
|
||||
"Tritanopia" = MATRIX_Tritanopia,
|
||||
"Tritanomaly" = MATRIX_Tritanomaly,
|
||||
"Achromatopsia" = MATRIX_Achromatopsia,
|
||||
"Achromatomaly" = MATRIX_Achromatomaly,
|
||||
"Paradise Vulp" = MATRIX_Vulp_Colorblind,
|
||||
"Paradise Taj" = MATRIX_Taj_Colorblind
|
||||
)
|
||||
|
||||
/obj/screen/plane_master/colorblindness/alter_plane_values(var/variety = null)
|
||||
var/new_matrix = varieties[variety]
|
||||
if(!new_matrix) return
|
||||
|
||||
color = new_matrix
|
||||
|
||||
/obj/screen/plane_master/colorblindness/proc/debug_variety()
|
||||
var/choice = input(usr,"Pick a type of colorblindness","Which?") as null|anything in varieties
|
||||
if(choice)
|
||||
color = varieties[choice]
|
||||
|
||||
/obj/screen/plane_master/colorblindness/items
|
||||
plane = PLANE_PLAYER_HUD_ITEMS
|
||||
sub_planes = null
|
||||
//The main game planes start normal and visible
|
||||
/obj/screen/plane_master/main
|
||||
alpha = 255
|
||||
mouse_opacity = 1
|
||||
|
||||
@@ -2,9 +2,10 @@
|
||||
|
||||
/mob/new_player
|
||||
var/ready = 0
|
||||
var/spawning = 0//Referenced when you want to delete the new_player later on in the code.
|
||||
var/totalPlayers = 0 //Player counts for the Lobby tab
|
||||
var/spawning = 0 //Referenced when you want to delete the new_player later on in the code.
|
||||
var/totalPlayers = 0 //Player counts for the Lobby tab
|
||||
var/totalPlayersReady = 0
|
||||
var/show_hidden_jobs = 0 //Show jobs that are set to "Never" in preferences
|
||||
var/datum/browser/panel
|
||||
universal_speak = 1
|
||||
|
||||
@@ -115,7 +116,7 @@
|
||||
|
||||
if(alert(src,"Are you sure you wish to observe? You will have to wait 1 minute before being able to respawn!","Player Setup","Yes","No") == "Yes")
|
||||
if(!client) return 1
|
||||
|
||||
|
||||
//Make a new mannequin quickly, and allow the observer to take the appearance
|
||||
var/mob/living/carbon/human/dummy/mannequin = new()
|
||||
client.prefs.dress_preview_mob(mannequin)
|
||||
@@ -291,6 +292,10 @@
|
||||
handle_server_news()
|
||||
return
|
||||
|
||||
if(href_list["hidden_jobs"])
|
||||
show_hidden_jobs = !show_hidden_jobs
|
||||
LateChoices()
|
||||
|
||||
/mob/new_player/proc/handle_server_news()
|
||||
if(!client)
|
||||
return
|
||||
@@ -421,10 +426,18 @@
|
||||
dat += "<font color='red'>The station is currently undergoing crew transfer procedures.</font><br>"
|
||||
|
||||
dat += "Choose from the following open/valid positions:<br>"
|
||||
dat += "<a href='byond://?src=\ref[src];hidden_jobs=1'>[show_hidden_jobs ? "Hide":"Show"] Hidden Jobs.</a><br>"
|
||||
for(var/datum/job/job in job_master.occupations)
|
||||
if(job && IsJobAvailable(job.title))
|
||||
// Checks for jobs with minimum age requirements
|
||||
if(job.minimum_character_age && (client.prefs.age < job.minimum_character_age))
|
||||
continue
|
||||
// Checks for jobs set to "Never" in preferences //TODO: Figure out a better way to check for this
|
||||
if(!(client.prefs.GetJobDepartment(job, 1) & job.flag))
|
||||
if(!(client.prefs.GetJobDepartment(job, 2) & job.flag))
|
||||
if(!(client.prefs.GetJobDepartment(job, 3) & job.flag))
|
||||
if(!show_hidden_jobs && job.title != "Assistant") // Assistant is always an option
|
||||
continue
|
||||
var/active = 0
|
||||
// Only players with the job assigned and AFK for less than 10 minutes count as active
|
||||
for(var/mob/M in player_list) if(M.mind && M.client && M.mind.assigned_role == job.title && M.client.inactivity <= 10 * 60 * 10)
|
||||
|
||||
@@ -21,8 +21,8 @@
|
||||
if(say_disabled) //This is here to try to identify lag problems
|
||||
usr << "<font color='red'>Speech is currently admin-disabled.</font>"
|
||||
return
|
||||
|
||||
message = sanitize(message)
|
||||
|
||||
message = sanitize_or_reflect(message,src) //VOREStation Edit - Reflect too-long messages (within reason)
|
||||
|
||||
set_typing_indicator(FALSE)
|
||||
if(use_me)
|
||||
|
||||
@@ -11,7 +11,7 @@
|
||||
usr << "Speech is currently admin-disabled."
|
||||
return
|
||||
|
||||
message = sanitize(message)
|
||||
message = sanitize_or_reflect(message,src) //VOREStation Edit - Reflect too-long messages (within reason)
|
||||
if(!message)
|
||||
return
|
||||
|
||||
@@ -31,7 +31,7 @@
|
||||
|
||||
var/input
|
||||
if(!message)
|
||||
input = sanitize(input(src,"Choose an emote to display.") as text|null)
|
||||
input = sanitize_or_reflect(input(src,"Choose an emote to display.") as text|null, src)
|
||||
else
|
||||
input = message
|
||||
|
||||
@@ -42,6 +42,8 @@
|
||||
return
|
||||
|
||||
if (message)
|
||||
message = say_emphasis(message)
|
||||
|
||||
var/list/vis = get_mobs_and_objs_in_view_fast(get_turf(src),1,2) //Turf, Range, and type 2 is emote
|
||||
var/list/vis_mobs = vis["mobs"]
|
||||
var/list/vis_objs = vis["objs"]
|
||||
@@ -59,3 +61,31 @@
|
||||
/mob/proc/emote_vr(var/act, var/type, var/message) //This would normally go in say.dm
|
||||
if(act == "me")
|
||||
return custom_emote_vr(type, message)
|
||||
|
||||
#define MAX_HUGE_MESSAGE_LEN 8192
|
||||
#define POST_DELIMITER_STR "\<\>"
|
||||
/proc/sanitize_or_reflect(message,user)
|
||||
//Way too long to send
|
||||
if(length(message) > MAX_HUGE_MESSAGE_LEN)
|
||||
fail_to_chat(user)
|
||||
return
|
||||
|
||||
message = sanitize(message, max_length = MAX_HUGE_MESSAGE_LEN)
|
||||
|
||||
//Came back still too long to send
|
||||
if(length(message) > MAX_MESSAGE_LEN)
|
||||
fail_to_chat(user,message)
|
||||
return null
|
||||
else
|
||||
return message
|
||||
|
||||
/proc/fail_to_chat(user,message)
|
||||
if(!message)
|
||||
to_chat(user,"<span class='danger'>Your message was NOT SENT, either because it was FAR too long, or sanitized to nothing at all.</span>")
|
||||
return
|
||||
|
||||
var/length = length(message)
|
||||
var/posts = Ceiling(length/MAX_MESSAGE_LEN)
|
||||
to_chat(user,message)
|
||||
to_chat(user,"<span class='danger'>^ This message was NOT SENT ^ -- It was [length] characters, and the limit is [MAX_MESSAGE_LEN]. It would fit in [posts] separate messages.</span>")
|
||||
#undef MAX_HUGE_MESSAGE_LEN
|
||||
|
||||
@@ -230,6 +230,7 @@
|
||||
if(ishuman(M))
|
||||
var/mob/living/carbon/human/H = M
|
||||
brainmob.dna = H.dna
|
||||
brainmob.ooc_notes = H.ooc_notes
|
||||
brainmob.timeofhostdeath = H.timeofdeath
|
||||
SStranscore.m_backup(brainmob.mind,0) //It does ONE, so medical will hear about it.
|
||||
|
||||
@@ -356,12 +357,10 @@
|
||||
return ..(direction)
|
||||
|
||||
/mob/living/carbon/brain/caught_soul/say(var/message)
|
||||
if(parent_mob) return ..()
|
||||
if(silent) return FALSE
|
||||
soulcatcher.say_into(message,src,eyeobj)
|
||||
|
||||
/mob/living/carbon/brain/caught_soul/emote(var/act,var/m_type=1,var/message = null)
|
||||
if(parent_mob) return ..()
|
||||
if(silent) return FALSE
|
||||
if (act == "me")
|
||||
if(silent)
|
||||
|
||||
@@ -42,7 +42,7 @@ var/const/standard_monitor_styles = "blank=ipc_blank;\
|
||||
var/lifelike // If set, appears organic.
|
||||
var/skin_tone // If set, applies skin tone rather than part color
|
||||
var/blood_color = "#030303"
|
||||
var/list/species_cannot_use = list(SPECIES_TESHARI, SPECIES_PROMETHEAN) //VOREStation Edit
|
||||
var/list/species_cannot_use = list(SPECIES_TESHARI, SPECIES_PROMETHEAN, SPECIES_XENOCHIMERA) //VOREStation Edit
|
||||
var/list/monitor_styles //If empty, the model of limbs offers a head compatible with monitors.
|
||||
var/parts = BP_ALL //Defines what parts said brand can replace on a body.
|
||||
var/health_hud_intensity = 1 // Intensity modifier for the health GUI indicator.
|
||||
|
||||
@@ -2,8 +2,8 @@
|
||||
name = "paper"
|
||||
icon_state = "paper_stack"
|
||||
item_state = "paper"
|
||||
var copied = 0
|
||||
var iscopy = 0
|
||||
var/copied = 0
|
||||
var/iscopy = 0
|
||||
|
||||
|
||||
/obj/item/weapon/paper/carbon/update_icon()
|
||||
@@ -48,4 +48,4 @@
|
||||
copy.update_icon()
|
||||
c.update_icon()
|
||||
else
|
||||
usr << "There are no more carbon copies attached to this paper!"
|
||||
usr << "There are no more carbon copies attached to this paper!"
|
||||
|
||||
@@ -131,7 +131,7 @@ var/global/photo_count = 0
|
||||
var/icon_on = "camera"
|
||||
var/icon_off = "camera_off"
|
||||
var/size = 3
|
||||
var/picture_planes = list(PLANE_WORLD)
|
||||
var/picture_planes = list()
|
||||
|
||||
/obj/item/device/camera/verb/change_size()
|
||||
set name = "Set Photo Focus"
|
||||
@@ -182,7 +182,7 @@ var/global/photo_count = 0
|
||||
// As well as anything that isn't invisible.
|
||||
for(var/atom/A in the_turf)
|
||||
if(A.invisibility) continue
|
||||
if(!(A.plane in picture_planes)) continue
|
||||
if(A.plane > 0 && !(A.plane in picture_planes)) continue
|
||||
atoms.Add(A)
|
||||
|
||||
// Sort the atoms into their layers
|
||||
|
||||
@@ -64,6 +64,8 @@
|
||||
desc = "A control terminal for the area electrical systems."
|
||||
icon = 'icons/obj/power_vr.dmi' //VOREStation Edit - New Icon
|
||||
icon_state = "apc0"
|
||||
plane = TURF_PLANE
|
||||
layer = ABOVE_TURF_LAYER
|
||||
anchored = 1
|
||||
use_power = 0
|
||||
req_access = list(access_engine_equip)
|
||||
|
||||
@@ -161,7 +161,7 @@
|
||||
layer = ABOVE_MOB_LAYER
|
||||
use_power = 2
|
||||
idle_power_usage = 2
|
||||
active_power_usage = 20
|
||||
active_power_usage = 20 // VOREStation Edit - Keep lights at 20 power
|
||||
power_channel = LIGHT //Lights are calc'd via area so they dont need to be in the machine list
|
||||
var/on = 0 // 1 if on, 0 if off
|
||||
var/brightness_range = 10 // luminosity when on, also used in power calculation // VOREStation Edit - Put light range back how it was for now.
|
||||
|
||||
@@ -56,7 +56,6 @@ var/global/list/rad_collectors = list()
|
||||
else
|
||||
user << "<font color='red'>The controls are locked!</font>"
|
||||
return
|
||||
..()
|
||||
|
||||
|
||||
/obj/machinery/power/rad_collector/attackby(obj/item/W, mob/user)
|
||||
|
||||
@@ -472,7 +472,7 @@
|
||||
|
||||
/obj/item/ammo_magazine/m44
|
||||
name = "magazine (.44)"
|
||||
icon_state = "44"
|
||||
icon_state = "m44"
|
||||
origin_tech = list(TECH_COMBAT = 2)
|
||||
mag_type = MAGAZINE
|
||||
caliber = ".44"
|
||||
|
||||
@@ -41,6 +41,9 @@
|
||||
|
||||
update_icon()
|
||||
|
||||
/obj/item/weapon/gun/projectile/shotgun/pump/slug
|
||||
ammo_type = /obj/item/ammo_casing/a12g
|
||||
|
||||
/obj/item/weapon/gun/projectile/shotgun/pump/combat
|
||||
name = "combat shotgun"
|
||||
desc = "Built for close quarters combat, the Hephaestus Industries KS-40 is widely regarded as a weapon of choice for repelling boarders. Uses 12g rounds."
|
||||
|
||||
@@ -327,6 +327,12 @@
|
||||
if(default_deconstruction_crowbar(user, O))
|
||||
return
|
||||
|
||||
//vorestation edit start - for solargrubs
|
||||
if (istype(O, /obj/item/device/multitool))
|
||||
return ..()
|
||||
//vorestation edit end
|
||||
|
||||
|
||||
if (istype(O,/obj/item/weapon/reagent_containers/glass) || \
|
||||
istype(O,/obj/item/weapon/reagent_containers/food/drinks/glass2) || \
|
||||
istype(O,/obj/item/weapon/reagent_containers/food/drinks/shaker))
|
||||
|
||||
@@ -56,7 +56,7 @@
|
||||
/datum/chemical_reaction/xenolazarus/on_reaction(var/datum/reagents/holder, var/created_volume) //literally all this does is mash the regenerate button
|
||||
if(ishuman(holder.my_atom))
|
||||
var/mob/living/carbon/human/H = holder.my_atom
|
||||
if(H.stat == DEAD && (/mob/living/carbon/human/proc/begin_reconstitute_form in H.verbs)) //no magical regen for non-regenners, and can't force the reaction on live ones
|
||||
if(H.stat == DEAD && (/mob/living/carbon/human/proc/reconstitute_form in H.verbs)) //no magical regen for non-regenners, and can't force the reaction on live ones
|
||||
if(H.hasnutriment()) // make sure it actually has the conditions to revive
|
||||
if(!H.reviving) // if it's not reviving, start doing so
|
||||
H.visible_message("<span class='info'>[H] shudders briefly, then relaxes, faint movements stirring within.</span>")
|
||||
@@ -320,7 +320,8 @@
|
||||
var/mob_path = /mob/living/simple_animal
|
||||
var/blocked = list(
|
||||
/mob/living/simple_animal/hostile/mimic,
|
||||
/mob/living/simple_animal/hostile/alien/queen
|
||||
/mob/living/simple_animal/hostile/alien/queen,
|
||||
/mob/living/simple_animal/shadekin
|
||||
)//exclusion list for things you don't want the reaction to create.
|
||||
var/list/voremobs = typesof(mob_path) - mob_path - blocked // list of possible hostile mobs
|
||||
|
||||
|
||||
@@ -5,6 +5,8 @@
|
||||
desc = "..."
|
||||
icon = 'icons/obj/objects.dmi'
|
||||
icon_state = "watertank"
|
||||
plane = TURF_PLANE
|
||||
layer = ABOVE_TURF_LAYER
|
||||
density = 1
|
||||
anchored = 0
|
||||
pressure_resistance = 2*ONE_ATMOSPHERE
|
||||
|
||||
@@ -180,6 +180,61 @@
|
||||
build_path = /obj/item/weapon/circuitboard/quantumpad
|
||||
sort_string = "HABAH"
|
||||
|
||||
//////Micro mech stuff
|
||||
/datum/design/circuit/mecha/gopher_main
|
||||
name = "'Gopher' central control"
|
||||
id = "gopher_main"
|
||||
build_path = /obj/item/weapon/circuitboard/mecha/gopher/main
|
||||
sort_string = "NAAEA"
|
||||
|
||||
/datum/design/circuit/mecha/gopher_peri
|
||||
name = "'Gopher' peripherals control"
|
||||
id = "gopher_peri"
|
||||
build_path = /obj/item/weapon/circuitboard/mecha/gopher/peripherals
|
||||
sort_string = "NAAEB"
|
||||
|
||||
/datum/design/circuit/mecha/polecat_main
|
||||
name = "'Polecat' central control"
|
||||
id = "polecat_main"
|
||||
req_tech = list(TECH_DATA = 4)
|
||||
build_path = /obj/item/weapon/circuitboard/mecha/polecat/main
|
||||
sort_string = "NAAFA"
|
||||
|
||||
/datum/design/circuit/mecha/polecat_peri
|
||||
name = "'Polecat' peripherals control"
|
||||
id = "polecat_peri"
|
||||
req_tech = list(TECH_DATA = 4)
|
||||
build_path = /obj/item/weapon/circuitboard/mecha/polecat/peripherals
|
||||
sort_string = "NAAFB"
|
||||
|
||||
/datum/design/circuit/mecha/polecat_targ
|
||||
name = "'Polecat' weapon control and targeting"
|
||||
id = "polecat_targ"
|
||||
req_tech = list(TECH_DATA = 4, TECH_COMBAT = 2)
|
||||
build_path = /obj/item/weapon/circuitboard/mecha/polecat/targeting
|
||||
sort_string = "NAAFC"
|
||||
|
||||
/datum/design/circuit/mecha/weasel_main
|
||||
name = "'Weasel' central control"
|
||||
id = "weasel_main"
|
||||
req_tech = list(TECH_DATA = 4)
|
||||
build_path = /obj/item/weapon/circuitboard/mecha/weasel/main
|
||||
sort_string = "NAAGA"
|
||||
|
||||
/datum/design/circuit/mecha/weasel_peri
|
||||
name = "'Weasel' peripherals control"
|
||||
id = "weasel_peri"
|
||||
req_tech = list(TECH_DATA = 4)
|
||||
build_path = /obj/item/weapon/circuitboard/mecha/weasel/peripherals
|
||||
sort_string = "NAAGB"
|
||||
|
||||
/datum/design/circuit/mecha/weasel_targ
|
||||
name = "'Weasel' weapon control and targeting"
|
||||
id = "weasel_targ"
|
||||
req_tech = list(TECH_DATA = 4, TECH_COMBAT = 2)
|
||||
build_path = /obj/item/weapon/circuitboard/mecha/weasel/targeting
|
||||
sort_string = "NAAGC"
|
||||
|
||||
////// RIGSuit Stuff
|
||||
/*
|
||||
/datum/design/item/rig
|
||||
|
||||
@@ -26,6 +26,7 @@
|
||||
var/nif_path
|
||||
var/nif_durability
|
||||
var/list/nif_software
|
||||
var/list/nif_savedata = list()
|
||||
|
||||
var/one_time = FALSE
|
||||
|
||||
@@ -42,7 +43,7 @@
|
||||
cryo_at = 0
|
||||
|
||||
//Mental stuff the game doesn't keep mentally
|
||||
if(istype(M))
|
||||
if(istype(M) || istype(M,/mob/living/carbon/brain/caught_soul))
|
||||
id_gender = M.identifying_gender
|
||||
languages = M.languages.Copy()
|
||||
mind_oocnotes = M.ooc_notes
|
||||
@@ -55,6 +56,7 @@
|
||||
var/datum/nifsoft/nifsoft = N
|
||||
nifsofts += nifsoft.type
|
||||
nif_software = nifsofts
|
||||
nif_savedata = M.nif.save_data.Copy()
|
||||
|
||||
last_update = world.time
|
||||
|
||||
@@ -76,6 +78,7 @@
|
||||
var/body_oocnotes
|
||||
var/list/limb_data = list(BP_HEAD, BP_L_HAND, BP_R_HAND, BP_L_ARM, BP_R_ARM, BP_L_FOOT, BP_R_FOOT, BP_L_LEG, BP_R_LEG, BP_GROIN, BP_TORSO)
|
||||
var/list/organ_data = list(O_HEART, O_EYES, O_LUNGS, O_BRAIN)
|
||||
var/list/genetic_modifiers = list()
|
||||
var/toocomplex
|
||||
var/sizemult
|
||||
var/weight
|
||||
@@ -174,6 +177,12 @@
|
||||
//Just set the data to this. 0:normal, 1:assisted, 2:mechanical, 3:digital
|
||||
organ_data[org] = I.robotic
|
||||
|
||||
//Genetic modifiers
|
||||
for(var/modifier in M.modifiers)
|
||||
var/datum/modifier/mod = modifier
|
||||
if(mod.flags & MODIFIER_GENETIC)
|
||||
genetic_modifiers.Add(mod.type)
|
||||
|
||||
if(add_to_db)
|
||||
SStranscore.add_body(src)
|
||||
|
||||
@@ -204,6 +213,7 @@
|
||||
src.body_oocnotes = orig.body_oocnotes
|
||||
src.limb_data = orig.limb_data.Copy()
|
||||
src.organ_data = orig.organ_data.Copy()
|
||||
src.genetic_modifiers = orig.genetic_modifiers.Copy()
|
||||
src.toocomplex = orig.toocomplex
|
||||
src.sizemult = orig.sizemult
|
||||
src.aflags = orig.aflags
|
||||
|
||||
@@ -69,6 +69,10 @@
|
||||
H.dna = R.dna.Clone()
|
||||
H.original_player = current_project.ckey
|
||||
|
||||
//Apply genetic modifiers
|
||||
for(var/modifier_type in R.genetic_modifiers)
|
||||
H.add_modifier(modifier_type)
|
||||
|
||||
//Apply damage
|
||||
H.adjustCloneLoss((H.getMaxHealth() - config.health_threshold_dead)*0.75)
|
||||
H.Paralyse(4)
|
||||
@@ -522,9 +526,10 @@
|
||||
|
||||
//Re-supply a NIF if one was backed up with them.
|
||||
if(MR.nif_path)
|
||||
var/obj/item/device/nif/nif = new MR.nif_path(occupant,MR.nif_durability)
|
||||
var/obj/item/device/nif/nif = new MR.nif_path(occupant,null,MR.nif_savedata)
|
||||
for(var/path in MR.nif_software)
|
||||
new path(nif)
|
||||
nif.durability = MR.nif_durability //Restore backed up durability after restoring the softs.
|
||||
|
||||
// If it was a custom sleeve (not owned by anyone), update namification sequences
|
||||
if(!occupant.original_player)
|
||||
|
||||
@@ -5,8 +5,8 @@
|
||||
icon = 'icons/obj/machines/shielding.dmi'
|
||||
icon_state = "fdiffuser_on"
|
||||
use_power = 2
|
||||
idle_power_usage = 100
|
||||
active_power_usage = 2000
|
||||
idle_power_usage = 25 // Previously 100.
|
||||
active_power_usage = 500 // Previously 2000
|
||||
anchored = 1
|
||||
density = 0
|
||||
level = 1
|
||||
|
||||
@@ -47,7 +47,7 @@
|
||||
req_tech = list(TECH_DATA = 4, TECH_ENGINEERING = 4, TECH_PHORON = 4, TECH_BLUESPACE = 5)
|
||||
build_path = /obj/item/weapon/circuitboard/telesci_pad
|
||||
sort_string = "HAAEB"
|
||||
|
||||
/* Normal GPS has all the fancy features now
|
||||
/datum/design/item/telesci_gps
|
||||
name = "GPS device"
|
||||
id = "telesci_gps"
|
||||
@@ -55,7 +55,7 @@
|
||||
materials = list(DEFAULT_WALL_MATERIAL = 500, "glass" = 1000)
|
||||
build_path = /obj/item/device/gps/advanced
|
||||
sort_string = "HAAEB"
|
||||
|
||||
*/
|
||||
/datum/design/circuit/quantum_pad
|
||||
name = "Quantum Pad"
|
||||
id = "quantum_pad"
|
||||
|
||||
@@ -1,3 +1,6 @@
|
||||
|
||||
// DEPRECATED - The normal GPS has the advanced features, now. This is obsolete.
|
||||
|
||||
// These are distinguished from the ordinary "Relay Position Devices" that just print your location
|
||||
// In that they are also all networked with each other to show each other's locations.
|
||||
/obj/item/device/gps/advanced
|
||||
|
||||
@@ -28,9 +28,9 @@
|
||||
/datum/riding/taur/get_offsets(pass_index) // list(dir = x, y, layer)
|
||||
var/mob/living/L = ridden
|
||||
var/scale = L.size_multiplier
|
||||
|
||||
|
||||
var/list/values = list(
|
||||
"[NORTH]" = list(0, 8*scale, ABOVE_MOB_LAYER),
|
||||
"[NORTH]" = list(0, 8*scale, ABOVE_MOB_LAYER),
|
||||
"[SOUTH]" = list(0, 8*scale, BELOW_MOB_LAYER),
|
||||
"[EAST]" = list(-10*scale, 8*scale, BELOW_MOB_LAYER),
|
||||
"[WEST]" = list(10*scale, 8*scale, BELOW_MOB_LAYER))
|
||||
@@ -53,6 +53,10 @@
|
||||
return ..() // Skip our checks
|
||||
if(!isTaurTail(tail_style))
|
||||
return FALSE
|
||||
else
|
||||
var/datum/sprite_accessory/tail/taur/taurtype = tail_style
|
||||
if(!taurtype.can_ride)
|
||||
return FALSE
|
||||
if(lying)
|
||||
return FALSE
|
||||
if(!ishuman(M))
|
||||
@@ -60,13 +64,13 @@
|
||||
if(M.size_multiplier > size_multiplier)
|
||||
to_chat(M,"<span class='warning'>This isn't a pony show! They need to be bigger to ride.</span>")
|
||||
return FALSE
|
||||
|
||||
|
||||
var/mob/living/carbon/human/H = M
|
||||
|
||||
if(isTaurTail(H.tail_style))
|
||||
to_chat(H,"<span class='warning'>Too many legs. TOO MANY LEGS!!</span>")
|
||||
return FALSE
|
||||
|
||||
|
||||
. = ..()
|
||||
if(.)
|
||||
buckled_mobs[M] = "riding"
|
||||
@@ -105,6 +109,9 @@
|
||||
do_colouration = 1 // Yes color, using tail color
|
||||
color_blend_mode = ICON_MULTIPLY // The sprites for taurs are designed for ICON_MULTIPLY
|
||||
|
||||
var/icon/suit_sprites = null //File for suit sprites, if any.
|
||||
|
||||
var/can_ride = 1 //whether we're real rideable taur or just in that category
|
||||
|
||||
//Could do nested lists but it started becoming a nightmare. It'd be more fun for lookups of a_intent and m_intent, but then subtypes need to
|
||||
//duplicate all the messages, and it starts getting awkward. These are singletons, anyway!
|
||||
@@ -142,6 +149,7 @@
|
||||
/datum/sprite_accessory/tail/taur/wolf
|
||||
name = "Wolf (Taur)"
|
||||
icon_state = "wolf_s"
|
||||
suit_sprites = 'icons/mob/taursuits_wolf_vr.dmi'
|
||||
|
||||
/datum/sprite_accessory/tail/taur/wolf/wolf_2c
|
||||
name = "Wolf dual-color (Taur)"
|
||||
@@ -156,6 +164,7 @@
|
||||
/datum/sprite_accessory/tail/taur/naga
|
||||
name = "Naga (Taur)"
|
||||
icon_state = "naga_s"
|
||||
suit_sprites = 'icons/mob/taursuits_naga_vr.dmi'
|
||||
|
||||
msg_owner_help_walk = "You carefully slither around %prey."
|
||||
msg_prey_help_walk = "%owner's huge tail slithers past beside you!"
|
||||
@@ -192,6 +201,7 @@
|
||||
/datum/sprite_accessory/tail/taur/horse
|
||||
name = "Horse (Taur)"
|
||||
icon_state = "horse_s"
|
||||
suit_sprites = 'icons/mob/taursuits_horse_vr.dmi'
|
||||
|
||||
msg_owner_disarm_run = "You quickly push %prey to the ground with your hoof!"
|
||||
msg_prey_disarm_run = "%owner pushes you down to the ground with their hoof!"
|
||||
@@ -216,6 +226,7 @@
|
||||
/datum/sprite_accessory/tail/taur/cow
|
||||
name = "Cow (Taur)"
|
||||
icon_state = "cow_s"
|
||||
suit_sprites = 'icons/mob/taursuits_cow_vr.dmi'
|
||||
|
||||
msg_owner_disarm_run = "You quickly push %prey to the ground with your hoof!"
|
||||
msg_prey_disarm_run = "%owner pushes you down to the ground with their hoof!"
|
||||
@@ -255,6 +266,7 @@
|
||||
/datum/sprite_accessory/tail/taur/lizard
|
||||
name = "Lizard (Taur)"
|
||||
icon_state = "lizard_s"
|
||||
suit_sprites = 'icons/mob/taursuits_lizard_vr.dmi'
|
||||
|
||||
/datum/sprite_accessory/tail/taur/lizard/lizard_2c
|
||||
name = "Lizard dual-color (Taur)"
|
||||
@@ -288,6 +300,7 @@
|
||||
/datum/sprite_accessory/tail/taur/tents
|
||||
name = "Tentacles (Taur)"
|
||||
icon_state = "tent_s"
|
||||
can_ride = 0
|
||||
|
||||
msg_prey_stepunder = "You run between %prey's tentacles."
|
||||
msg_owner_stepunder = "%owner runs between your tentacles."
|
||||
@@ -410,18 +423,26 @@
|
||||
ani_state = "alraune_closed_s"
|
||||
ckeys_allowed = list("natje")
|
||||
do_colouration = 0
|
||||
can_ride = 0
|
||||
|
||||
msg_owner_disarm_run = "You quickly push %prey to the ground with your leg!"
|
||||
msg_prey_disarm_run = "%owner pushes you down to the ground with their leg!"
|
||||
|
||||
msg_owner_disarm_walk = "You firmly push your leg down on %prey, painfully but harmlessly pinning them to the ground!"
|
||||
msg_prey_disarm_walk = "%owner firmly pushes their leg down on you, quite painfully but harmlessly pinning you to the ground!"
|
||||
msg_prey_stepunder = "You run between %prey's vines."
|
||||
msg_owner_stepunder = "%owner runs between your vines."
|
||||
|
||||
msg_owner_harm_walk = "You methodically place your leg down upon %prey's body, slowly applying pressure, crushing them against the floor below!"
|
||||
msg_prey_harm_walk = "%owner methodically places their leg upon your body, slowly applying pressure, crushing you against the floor below!"
|
||||
msg_owner_disarm_run = "You quickly push %prey to the ground with some of your vines!"
|
||||
msg_prey_disarm_run = "%owner pushes you down to the ground with some of their vines!"
|
||||
|
||||
msg_owner_grab_success = "You pin %prey down on the ground with your front leg before using your other leg to pick them up, trapping them between two of your front legs!"
|
||||
msg_prey_grab_success = "%owner pins you down on the ground with their front leg before using their other leg to pick you up, trapping you between two of their front legs!"
|
||||
msg_owner_disarm_walk = "You push down on %prey with some of your vines, pinning them down firmly under you!"
|
||||
msg_prey_disarm_walk = "%owner pushes down on you with some of their vines, pinning you down firmly below them!"
|
||||
|
||||
msg_owner_grab_fail = "You step down onto %prey, squishing them and forcing them down to the ground!"
|
||||
msg_prey_grab_fail = "%owner steps down and squishes you with their leg, forcing you down to the ground!"
|
||||
msg_owner_harm_run = "Your vines carelessly slide past %prey, crushing them!"
|
||||
msg_prey_harm_run = "%owner quickly goes over your body, carelessly crushing you with their vines!"
|
||||
|
||||
msg_owner_harm_walk = "Your vines methodically apply pressure on %prey's body, crushing them against the floor below!"
|
||||
msg_prey_harm_walk = "%owner's thick vines methodically apply pressure on your body, crushing you into the floor below!"
|
||||
|
||||
msg_owner_grab_success = "You slide over %prey with your vines, smushing them against the ground before wrapping one up around them, trapping them within the tight confines of your vines!"
|
||||
msg_prey_grab_success = "%owner slides over you with their vines, smushing you against the ground before wrapping one up around you, trapping you within the tight confines of their vines!"
|
||||
|
||||
msg_owner_grab_fail = "You step down onto %prey with one of your vines, forcing them onto the ground!"
|
||||
msg_prey_grab_fail = "%owner steps down onto you with one of their vines, squishing you and forcing you onto the ground!"
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
/*
|
||||
Hello and welcome to VOREStation sprite_accessories: For a more general overview
|
||||
please read sprite_accessories.dm. This file is for ears, tails, and taur bodies!
|
||||
please read sprite_accessories.dm. This file is for ears and tails.
|
||||
This is intended to be friendly for people with little to no actual coding experience.
|
||||
!!WARNING!!: changing existing accessory information can be VERY hazardous to savefiles,
|
||||
to the point where you may completely corrupt a server's savefiles. Please refrain
|
||||
@@ -815,6 +815,13 @@
|
||||
icon_state = "tigresstail"
|
||||
ckeys_allowed = list("hoodoo")
|
||||
|
||||
/datum/sprite_accessory/tail/satyr
|
||||
name = "goat legs, colorable"
|
||||
desc = ""
|
||||
icon_state = "satyr"
|
||||
color_blend_mode = ICON_MULTIPLY
|
||||
do_colouration = 1
|
||||
|
||||
/datum/sprite_accessory/tail/tailmaw
|
||||
name = "tailmaw, colorable"
|
||||
desc = ""
|
||||
|
||||
@@ -32,7 +32,8 @@
|
||||
var/shrink_grow_size = 1 // This horribly named variable determines the minimum/maximum size it will shrink/grow prey to.
|
||||
var/transferlocation // Location that the prey is released if they struggle and get dropped off.
|
||||
var/release_sound = TRUE // Boolean for now, maybe replace with something else later
|
||||
var/mode_flags = DM_FLAG_ITEMWEAK // Stripping, numbing, etc.
|
||||
var/mode_flags = DM_FLAG_ITEMWEAK // Stripping, numbing, etc.
|
||||
var/cont_flavor = "Generic" // Selected contamination mode.
|
||||
|
||||
//I don't think we've ever altered these lists. making them static until someone actually overrides them somewhere.
|
||||
//Actual full digest modes
|
||||
@@ -41,7 +42,7 @@
|
||||
var/tmp/static/list/mode_flag_list = list("Numbing" = DM_FLAG_NUMBING, "Itemweak" = DM_FLAG_ITEMWEAK, "Stripping" = DM_FLAG_STRIPPING)
|
||||
//Transformation modes
|
||||
var/tmp/static/list/transform_modes = list(DM_TRANSFORM_MALE,DM_TRANSFORM_FEMALE,DM_TRANSFORM_KEEP_GENDER,DM_TRANSFORM_CHANGE_SPECIES_AND_TAUR,DM_TRANSFORM_CHANGE_SPECIES_AND_TAUR_EGG,DM_TRANSFORM_REPLICA,DM_TRANSFORM_REPLICA_EGG,DM_TRANSFORM_KEEP_GENDER_EGG,DM_TRANSFORM_MALE_EGG,DM_TRANSFORM_FEMALE_EGG, DM_EGG)
|
||||
|
||||
|
||||
//List of slots that stripping handles strips
|
||||
var/tmp/static/list/slots = list(slot_back,slot_handcuffed,slot_l_store,slot_r_store,slot_wear_mask,slot_l_hand,slot_r_hand,slot_wear_id,slot_glasses,slot_gloves,slot_head,slot_shoes,slot_belt,slot_wear_suit,slot_w_uniform,slot_s_store,slot_l_ear,slot_r_ear)
|
||||
|
||||
@@ -136,7 +137,8 @@
|
||||
"digest_messages_prey",
|
||||
"examine_messages",
|
||||
"emote_lists",
|
||||
"mode_flags"
|
||||
"mode_flags",
|
||||
"cont_flavor"
|
||||
)
|
||||
|
||||
/obj/belly/New(var/newloc)
|
||||
@@ -371,7 +373,7 @@
|
||||
var/obj/item/I = M.get_equipped_item(slot = slot)
|
||||
if(I)
|
||||
M.unEquip(I,force = TRUE)
|
||||
I.gurgle_contaminate(contents, owner) //We do an initial contamination pass to get stuff like IDs wet.
|
||||
I.gurgle_contaminate(contents, cont_flavor) //We do an initial contamination pass to get stuff like IDs wet.
|
||||
if(mode_flags & DM_FLAG_ITEMWEAK)
|
||||
items_preserved |= I
|
||||
|
||||
@@ -576,6 +578,7 @@
|
||||
if(!(content in src) || !istype(target))
|
||||
return
|
||||
content.forceMove(target)
|
||||
items_preserved -= content
|
||||
if(!silent && target.vore_sound && !recent_sound)
|
||||
var/soundfile = vore_sounds[target.vore_sound]
|
||||
if(soundfile)
|
||||
@@ -611,6 +614,7 @@
|
||||
dupe.bulge_size = bulge_size
|
||||
dupe.shrink_grow_size = shrink_grow_size
|
||||
dupe.mode_flags = mode_flags
|
||||
dupe.cont_flavor = cont_flavor
|
||||
|
||||
//// Object-holding variables
|
||||
//struggle_messages_outside - strings
|
||||
|
||||
@@ -38,8 +38,9 @@
|
||||
if(isitem(A) && !did_an_item)
|
||||
var/obj/item/I = A
|
||||
if(mode_flags & DM_FLAG_ITEMWEAK)
|
||||
I.gurgle_contaminate(contents, owner)
|
||||
I.gurgle_contaminate(contents, cont_flavor)
|
||||
items_preserved |= I
|
||||
to_update = TRUE
|
||||
else
|
||||
digest_item(I)
|
||||
to_update = TRUE
|
||||
@@ -52,11 +53,11 @@
|
||||
|
||||
if(L.absorbed)
|
||||
L.Weaken(5)
|
||||
|
||||
|
||||
//Handle 'human'
|
||||
if(ishuman(L))
|
||||
var/mob/living/carbon/human/H = L
|
||||
|
||||
|
||||
//Numbing flag
|
||||
if(mode_flags & DM_FLAG_NUMBING)
|
||||
if(H.bloodstr.get_reagent_amount("numbenzyme") < 2)
|
||||
@@ -69,7 +70,7 @@
|
||||
if(I)
|
||||
H.unEquip(I,force = TRUE)
|
||||
if(mode_flags & DM_FLAG_ITEMWEAK)
|
||||
I.gurgle_contaminate(contents, owner)
|
||||
I.gurgle_contaminate(contents, cont_flavor)
|
||||
items_preserved |= I
|
||||
else
|
||||
digest_item(I)
|
||||
@@ -96,6 +97,7 @@
|
||||
if(M.stat == DEAD)
|
||||
var/digest_alert_owner = pick(digest_messages_owner)
|
||||
var/digest_alert_prey = pick(digest_messages_prey)
|
||||
var/compensation = M.getOxyLoss() //How much of the prey's damage was caused by passive crit oxyloss to compensate the lost nutrition.
|
||||
|
||||
//Replace placeholder vars
|
||||
digest_alert_owner = replacetext(digest_alert_owner,"%pred",owner)
|
||||
@@ -113,22 +115,35 @@
|
||||
play_sound = pick(death_sounds)
|
||||
digestion_death(M)
|
||||
owner.update_icons()
|
||||
if(compensation > 0)
|
||||
if(isrobot(owner))
|
||||
var/mob/living/silicon/robot/R = owner
|
||||
R.cell.charge += 25*compensation
|
||||
else
|
||||
owner.nutrition += 4.5*compensation
|
||||
to_update = TRUE
|
||||
|
||||
continue
|
||||
|
||||
// Deal digestion damage (and feed the pred)
|
||||
var/old_brute = M.getBruteLoss()
|
||||
var/old_burn = M.getFireLoss()
|
||||
M.adjustBruteLoss(digest_brute)
|
||||
M.adjustFireLoss(digest_burn)
|
||||
var/actual_brute = M.getBruteLoss() - old_brute
|
||||
var/actual_burn = M.getFireLoss() - old_burn
|
||||
var/damage_gain = actual_brute + actual_burn
|
||||
|
||||
var/offset = (1 + ((M.weight - 137) / 137)) // 130 pounds = .95 140 pounds = 1.02
|
||||
var/difference = owner.size_multiplier / M.size_multiplier
|
||||
if(isrobot(owner))
|
||||
var/mob/living/silicon/robot/R = owner
|
||||
R.cell.charge += 20*(digest_brute+digest_burn)
|
||||
R.cell.charge += 25*damage_gain
|
||||
if(offset) // If any different than default weight, multiply the % of offset.
|
||||
owner.nutrition += offset*(2*(digest_brute+digest_burn)/difference) // 9.5 nutrition per digestion tick if they're 130 pounds and it's same size. 10.2 per digestion tick if they're 140 and it's same size. Etc etc.
|
||||
owner.nutrition += offset*(4.5*(damage_gain)/difference) //4.5 nutrition points per health point. Normal same size 100+100 health prey with average weight would give 900 points if the digestion was instant. With all the size/weight offset taxes plus over time oxyloss+hunger taxes deducted with non-instant digestion, this should be enough to not leave the pred starved.
|
||||
else
|
||||
owner.nutrition += 2*(digest_brute+digest_burn)/difference
|
||||
owner.nutrition += 4.5*(damage_gain)/difference
|
||||
|
||||
|
||||
//////////////////////////// DM_ABSORB ////////////////////////////
|
||||
else if(digest_mode == DM_ABSORB)
|
||||
@@ -154,7 +169,7 @@
|
||||
|
||||
for (var/target in touchable_mobs)
|
||||
var/mob/living/M = target
|
||||
|
||||
|
||||
if(M.absorbed && owner.nutrition >= 100)
|
||||
M.absorbed = 0
|
||||
to_chat(M,"<span class='notice'>You suddenly feel solid again </span>")
|
||||
@@ -167,7 +182,7 @@
|
||||
|
||||
for (var/target in touchable_mobs)
|
||||
var/mob/living/M = target
|
||||
|
||||
|
||||
if(prob(10)) //Less often than gurgles. People might leave this on forever.
|
||||
play_sound = pick(digestion_sounds)
|
||||
|
||||
@@ -181,13 +196,13 @@
|
||||
|
||||
for (var/target in touchable_mobs)
|
||||
var/mob/living/M = target
|
||||
|
||||
|
||||
if(prob(10)) //Infinite gurgles!
|
||||
play_sound = pick(digestion_sounds)
|
||||
|
||||
if(M.size_multiplier > shrink_grow_size) //Shrink until smol.
|
||||
M.resize(M.size_multiplier-0.01) //Shrink by 1% per tick.
|
||||
|
||||
|
||||
if(M.nutrition >= 100) //Absorbing bodymass results in nutrition if possible.
|
||||
var/oldnutrition = (M.nutrition * 0.05)
|
||||
M.nutrition = (M.nutrition * 0.95)
|
||||
@@ -198,7 +213,7 @@
|
||||
|
||||
for (var/target in touchable_mobs)
|
||||
var/mob/living/M = target
|
||||
|
||||
|
||||
if(prob(10))
|
||||
play_sound = pick(digestion_sounds)
|
||||
|
||||
@@ -212,14 +227,14 @@
|
||||
|
||||
for (var/target in touchable_mobs)
|
||||
var/mob/living/M = target
|
||||
|
||||
|
||||
if(prob(10))
|
||||
play_sound = pick(digestion_sounds)
|
||||
|
||||
if(M.size_multiplier > shrink_grow_size && owner.size_multiplier < 2) //Grow until either pred is large or prey is small.
|
||||
owner.resize(owner.size_multiplier+0.01) //Grow by 1% per tick.
|
||||
M.resize(M.size_multiplier-0.01) //Shrink by 1% per tick
|
||||
|
||||
|
||||
if(M.nutrition >= 100)
|
||||
var/oldnutrition = (M.nutrition * 0.05)
|
||||
M.nutrition = (M.nutrition * 0.95)
|
||||
@@ -227,7 +242,7 @@
|
||||
|
||||
///////////////////////////// DM_HEAL /////////////////////////////
|
||||
else if(digest_mode == DM_HEAL)
|
||||
|
||||
|
||||
if(prob(50)) //Wet heals! The secret is you can leave this on for gurgle noises for fun.
|
||||
play_sound = pick(digestion_sounds)
|
||||
|
||||
@@ -260,5 +275,5 @@
|
||||
M.updateVRPanel()
|
||||
if(owner.client)
|
||||
owner.updateVRPanel()
|
||||
|
||||
|
||||
return SSBELLIES_PROCESSED
|
||||
|
||||
@@ -5,20 +5,21 @@ var/image/gurgled_overlay = image('icons/effects/sludgeoverlay_vr.dmi')
|
||||
var/cleanname
|
||||
var/cleandesc
|
||||
|
||||
/obj/item/proc/gurgle_contaminate(var/atom/movable/item_storage = null)
|
||||
/obj/item/proc/gurgle_contaminate(var/atom/movable/item_storage = null, var/cont_flavor = "Generic")
|
||||
if(!can_gurgle())
|
||||
return FALSE
|
||||
|
||||
if(!gurgled)
|
||||
gurgled = TRUE
|
||||
overlays += gurgled_overlay
|
||||
var/gurgleflavor = pick("soggy","soaked","dirty","nasty","slimy","drenched","sloppy","grimy","sludgy","stinky","mucky","stained","soiled","filthy","saucy","foul","icky","tarnished","unsanitary","messy","begrimed","cruddy","funky","disgusting","repulsive","noxious","gruesome","gross","putrid","yucky","tainted","putrescent","unsavory","smelly","smutty","acrid","pungent","unclean","contaminated","gunky","gooey","sticky","drippy","oozing","sloshed","digested","sopping","damp","gloppy","begraggled","churned")
|
||||
var/list/pickfrom = cont_flavors[cont_flavor]
|
||||
var/gurgleflavor = pick(pickfrom)
|
||||
cleanname = src.name
|
||||
cleandesc = src.desc
|
||||
name = "[gurgleflavor] [cleanname]"
|
||||
desc = "[cleandesc] It seems to be covered in ominously foul residue and needs a wash."
|
||||
for(var/obj/item/O in contents)
|
||||
O.gurgle_contaminate(item_storage)
|
||||
O.gurgle_contaminate(item_storage, cont_flavor)
|
||||
return TRUE
|
||||
|
||||
/obj/item/proc/can_gurgle()
|
||||
@@ -102,8 +103,10 @@ var/image/gurgled_overlay = image('icons/effects/sludgeoverlay_vr.dmi')
|
||||
return TRUE
|
||||
|
||||
/obj/item/weapon/holder/gurgle_contaminate(var/atom/movable/item_storage = null)
|
||||
digest_act(item_storage)
|
||||
return TRUE
|
||||
if(isbelly(loc))
|
||||
digest_act(item_storage)
|
||||
return TRUE
|
||||
return FALSE
|
||||
|
||||
/obj/item/organ/gurgle_contaminate(var/atom/movable/item_storage = null)
|
||||
digest_act(item_storage)
|
||||
|
||||
@@ -111,7 +111,7 @@ V::::::V V::::::VO:::::::OOO:::::::ORR:::::R R:::::REE::::::EEEEEE
|
||||
allowmobvore = json_from_file["allowmobvore"]
|
||||
vore_taste = json_from_file["vore_taste"]
|
||||
can_be_drop_prey = json_from_file["can_be_drop_prey"]
|
||||
can_be_drop_prey = json_from_file["can_be_drop_pred"]
|
||||
can_be_drop_pred = json_from_file["can_be_drop_pred"]
|
||||
belly_prefs = json_from_file["belly_prefs"]
|
||||
|
||||
//Quick sanitize
|
||||
|
||||
@@ -204,6 +204,9 @@
|
||||
dat += " [english_list(flag_list)]"
|
||||
else
|
||||
dat += " None"
|
||||
if(selected.mode_flags & DM_FLAG_ITEMWEAK)
|
||||
dat += "<br><a href='?src=\ref[src];b_cont_flavor=\ref[selected]'>Contamination Mode:</a>"
|
||||
dat += "[selected.cont_flavor]"
|
||||
|
||||
//Belly verb
|
||||
dat += "<br><a href='?src=\ref[src];b_verb=\ref[selected]'>Vore Verb:</a>"
|
||||
@@ -514,14 +517,14 @@
|
||||
var/new_mode = input("Choose Mode (currently [selected.digest_mode])") as null|anything in menu_list
|
||||
if(!new_mode)
|
||||
return 0
|
||||
|
||||
|
||||
if(new_mode == DM_TRANSFORM) //Snowflek submenu
|
||||
var/list/tf_list = selected.transform_modes
|
||||
var/new_tf_mode = input("Choose TF Mode (currently [selected.tf_mode])") as null|anything in tf_list
|
||||
if(!new_tf_mode)
|
||||
return 0
|
||||
selected.tf_mode = new_tf_mode
|
||||
|
||||
|
||||
selected.digest_mode = new_mode
|
||||
selected.items_preserved.Cut() //Re-evaltuate all items in belly on belly-mode change
|
||||
|
||||
@@ -533,6 +536,13 @@
|
||||
selected.mode_flags ^= selected.mode_flag_list[toggle_addon]
|
||||
selected.items_preserved.Cut() //Re-evaltuate all items in belly on addon toggle
|
||||
|
||||
if(href_list["b_cont_flavor"])
|
||||
var/list/menu_list = cont_flavors.Copy()
|
||||
var/new_flavor = input("Choose Contamination Mode (currently [selected.cont_flavor])") as null|anything in menu_list
|
||||
if(!new_flavor)
|
||||
return 0
|
||||
selected.cont_flavor = new_flavor
|
||||
|
||||
if(href_list["b_desc"])
|
||||
var/new_desc = html_encode(input(usr,"Belly Description ([BELLIES_DESC_MAX] char limit):","New Description",selected.desc) as message|null)
|
||||
|
||||
|
||||
@@ -1313,18 +1313,13 @@ Departamental Swimsuits, for general use
|
||||
/obj/item/clothing/suit/storage/hooded/wintercoat/jessie
|
||||
name = "Handmade Winter Suit"
|
||||
desc = "A durable, but somewhat ragged lower portion of a snow suit fitted for a wolftaur."
|
||||
icon = 'icons/mob/taursuits_vr.dmi'
|
||||
icon_override = 'icons/mob/taursuits_vr.dmi'
|
||||
icon = 'icons/mob/taursuits_wolf_vr.dmi'
|
||||
icon_state = "jessiecoat"
|
||||
item_state = "jessiecoat"
|
||||
|
||||
/obj/item/clothing/suit/storage/hooded/wintercoat/jessie/mob_can_equip(var/mob/living/carbon/human/H, slot, disable_warning = 0)
|
||||
if(..())
|
||||
if(istype(H) && istype(H.tail_style, /datum/sprite_accessory/tail/taur/wolf))
|
||||
if(icon_state == "jessiecoat")
|
||||
return ..()
|
||||
icon_override = 'icons/mob/taursuits_vr.dmi'
|
||||
icon_state = "jessiecoat"
|
||||
pixel_x = -16
|
||||
return ..()
|
||||
else
|
||||
to_chat(H, "<span class='warning'>You need to have a wolf-taur half to wear this.</span>")
|
||||
@@ -1335,19 +1330,13 @@ Departamental Swimsuits, for general use
|
||||
name = "Kat's Fox Taur Armor"
|
||||
desc = "A set of security armor, light weight and easy to run in for a Taur, this item protects the \
|
||||
entire body."
|
||||
icon = 'icons/mob/taursuits_vr.dmi'
|
||||
icon_override = 'icons/mob/taursuits_vr.dmi'
|
||||
icon = 'icons/mob/taursuits_wolf_vr.dmi'
|
||||
icon_state = "katesuit"
|
||||
item_state_slots = null
|
||||
|
||||
/obj/item/clothing/suit/armor/vest/wolftaur/kate/mob_can_equip(var/mob/living/carbon/human/H, slot, disable_warning = 0)
|
||||
if(..())
|
||||
if(istype(H) && istype(H.tail_style, /datum/sprite_accessory/tail/taur/wolf))
|
||||
if(icon_state == "katesuit")
|
||||
return ..()
|
||||
icon_override = 'icons/mob/taursuits_vr.dmi'
|
||||
icon_state = "katesuit"
|
||||
pixel_x = -16
|
||||
return ..()
|
||||
else
|
||||
to_chat(H, "<span class='warning'>You need to have a wolf-taur half to wear this.</span>")
|
||||
@@ -1359,25 +1348,12 @@ Departamental Swimsuits, for general use
|
||||
desc = "Taur engineering voidsuit. Recolored navy blue and white. Slightly tweaked as well to \
|
||||
get close to having security voidsuit protection as possible with a slight reduction in movement \
|
||||
speed to compensate for custom padding and armor Kateryna made herself."
|
||||
icon = 'icons/mob/taursuits_vr.dmi'
|
||||
icon_override = 'icons/mob/taursuits_vr.dmi'
|
||||
icon = 'icons/mob/taursuits_wolf_vr.dmi'
|
||||
icon_state = "lilithsuit"
|
||||
item_state = "lilithsuit"
|
||||
species_restricted = null
|
||||
armor = list(melee = 40, bullet = 20, laser = 20,energy = 5, bomb = 35, bio = 100, rad = 20)
|
||||
|
||||
/obj/item/clothing/suit/space/void/engineering/kate/mob_can_equip(var/mob/living/carbon/human/H, slot, disable_warning = 0)
|
||||
if(..())
|
||||
if(istype(H) && istype(H.tail_style, /datum/sprite_accessory/tail/taur/wolf))
|
||||
if(icon_state == "lilithsuit")
|
||||
return ..()
|
||||
icon_override = 'icons/mob/taursuits_vr.dmi'
|
||||
icon_state = "lilithsuit"
|
||||
pixel_x = -16
|
||||
return ..()
|
||||
else
|
||||
to_chat(H, "<span class='warning'>You need to have a wolf-taur half to wear this.</span>")
|
||||
return 0
|
||||
|
||||
//samanthafyre:Kateryna Petrovitch
|
||||
/obj/item/clothing/head/helmet/space/fluff/kate
|
||||
name = "Kat's Navy Engineer Helmet"
|
||||
@@ -1807,17 +1783,16 @@ Departamental Swimsuits, for general use
|
||||
armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0)
|
||||
desc = "A series of armor plates painted black, deployed from a back-mounted module. They fit smoothly over the unit's armor plates and projects a skintight bubble shield over the unit's uncovered parts. Faceplate and coolant unit not included."
|
||||
species_restricted = null
|
||||
icon = 'icons/mob/taursuits_vr.dmi'
|
||||
icon_override = 'icons/mob/taursuits_vr.dmi'
|
||||
icon = 'icons/mob/taursuits_lizard_vr.dmi'
|
||||
icon_state = "hasd_suit"
|
||||
item_state = "hasd_suit"
|
||||
pixel_x = -16
|
||||
|
||||
mob_can_equip(var/mob/living/carbon/human/H, slot, disable_warning = 0)
|
||||
if(..() && istype(H) && H.ckey == "silencedmp5a5" && istype(H.tail_style, /datum/sprite_accessory/tail/taur/lizard/synthlizard))
|
||||
if(..() && istype(H) && H.ckey == "silencedmp5a5")
|
||||
return 1
|
||||
else
|
||||
H << "<span class='warning'>This suit is not designed for you.</span>"
|
||||
to_chat(H,"<span class='warning'>This suit is not designed for you.</span>")
|
||||
return 0
|
||||
|
||||
//Zigfe:Zaoozaoo Xrimxuqmqixzix
|
||||
|
||||
@@ -355,15 +355,13 @@
|
||||
name = "KSS-8 security armor"
|
||||
desc = "A set of armor made from pieces of many other armors. There are two orange holobadges on it, one on the chestplate, one on the steel flank plates. The holobadges appear to be russian in origin. 'Kosmicheskaya Stantsiya-8' is printed in faded white letters on one side, along the spine. It smells strongly of dog."
|
||||
species_restricted = null //Species restricted since all it cares about is a taur half
|
||||
icon_override = 'icons/mob/taursuits_vr.dmi' //Needs to be this since it's 64*32
|
||||
icon = 'icons/mob/taursuits_wolf_vr.dmi'
|
||||
icon_state = "serdy_armor"
|
||||
item_state = "serdy_armor"
|
||||
body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|ARMS //It's a full body suit, minus hands and feet. Arms and legs should be protected, not just the torso. Retains normal security armor values still.
|
||||
|
||||
/obj/item/clothing/suit/armor/vest/wolftaur/serdy/mob_can_equip(var/mob/living/carbon/human/H, slot, disable_warning = 0)
|
||||
if(istype(H) && istype(H.tail_style, /datum/sprite_accessory/tail/taur/wolf))
|
||||
icon_override = 'icons/mob/taursuits_vr.dmi' //Just in case
|
||||
icon_state = "serdy_armor" //Just in case
|
||||
pixel_x = -16
|
||||
return ..()
|
||||
else
|
||||
to_chat(H, "<span class='warning'>You need to have a wolf-taur half to wear this.</span>")
|
||||
@@ -1995,7 +1993,26 @@
|
||||
icon_state = "modkit"
|
||||
|
||||
from_helmet = /obj/item/clothing/head/helmet/space/void/security
|
||||
from_suit = /obj/item/clothing/suit/space/void/security/taur
|
||||
from_suit = /obj/item/clothing/suit/space/void/security
|
||||
to_helmet = /obj/item/clothing/head/helmet/space/void/security/hasd
|
||||
to_suit = /obj/item/clothing/suit/space/void/security/hasd
|
||||
|
||||
//InterroLouis - Kai Highlands
|
||||
/obj/item/borg/upgrade/modkit/chassis_mod/kai
|
||||
name = "kai chassis"
|
||||
desc = "Makes your KA green. All the fun of having a more powerful KA without actually having a more powerful KA."
|
||||
cost = 0
|
||||
denied_type = /obj/item/borg/upgrade/modkit/chassis_mod
|
||||
chassis_icon = "kineticgun_K"
|
||||
chassis_name = "Kai-netic Accelerator"
|
||||
var/chassis_desc = "A self recharging, ranged mining tool that does increased damage in low temperature. Capable of holding up to six slots worth of mod kits. It seems to have been painted an ugly green, and has a small image of a bird scratched crudely into the stock."
|
||||
var/chassis_icon_file = 'icons/vore/custom_guns_vr.dmi'
|
||||
|
||||
/obj/item/borg/upgrade/modkit/chassis_mod/kai/install(obj/item/weapon/gun/energy/kinetic_accelerator/KA, mob/user)
|
||||
KA.desc = chassis_desc
|
||||
KA.icon = chassis_icon_file
|
||||
..()
|
||||
/obj/item/borg/upgrade/modkit/chassis_mod/kai/uninstall(obj/item/weapon/gun/energy/kinetic_accelerator/KA)
|
||||
KA.desc = initial(KA.desc)
|
||||
KA.icon = initial(KA.icon)
|
||||
..()
|
||||
|
||||
@@ -242,14 +242,14 @@ var/const/RESIZE_A_SMALLTINY = (RESIZE_SMALL + RESIZE_TINY) / 2
|
||||
|
||||
//Not a human, or not a taur, generic message only
|
||||
if(!H || !isTaurTail(H.tail_style))
|
||||
to_chat(src,"You quickly push [tmob] to the ground with your foot!")
|
||||
to_chat(tmob,"[src] pushes you down to the ground with their foot!")
|
||||
to_chat(src,"<span class='danger'>You quickly push [tmob] to the ground with your foot!</span>")
|
||||
to_chat(tmob,"<span class='danger'>[src] pushes you down to the ground with their foot!</span>")
|
||||
|
||||
//Human with taur tail, special messages are sent
|
||||
else
|
||||
var/datum/sprite_accessory/tail/taur/tail = H.tail_style
|
||||
to_chat(src,STEP_TEXT_OWNER(tail.msg_owner_disarm_run))
|
||||
to_chat(tmob,STEP_TEXT_PREY(tail.msg_prey_disarm_run))
|
||||
to_chat(src,STEP_TEXT_OWNER("<span class='danger'>[tail.msg_owner_disarm_run]</span>"))
|
||||
to_chat(tmob,STEP_TEXT_PREY("<span class='danger'>[tail.msg_prey_disarm_run]</span>"))
|
||||
|
||||
//Walking on I_DISARM
|
||||
else
|
||||
@@ -264,14 +264,14 @@ var/const/RESIZE_A_SMALLTINY = (RESIZE_SMALL + RESIZE_TINY) / 2
|
||||
|
||||
//Not a human, or not a taur, generic message only
|
||||
if(!H || !isTaurTail(H.tail_style))
|
||||
to_chat(src,"You firmly push your foot down on [tmob], painfully but harmlessly pinning them to the ground!")
|
||||
to_chat(tmob,"[src] firmly pushes their foot down on you, quite painfully but harmlessly pinning you to the ground!")
|
||||
to_chat(src,"<span class='danger'>You firmly push your foot down on [tmob], painfully but harmlessly pinning them to the ground!</span>")
|
||||
to_chat(tmob,"<span class='danger'>[src] firmly pushes their foot down on you, quite painfully but harmlessly pinning you to the ground!</span>")
|
||||
|
||||
//Human with taur tail, special messages are sent
|
||||
else
|
||||
var/datum/sprite_accessory/tail/taur/tail = H.tail_style
|
||||
to_chat(src,STEP_TEXT_OWNER(tail.msg_owner_disarm_walk))
|
||||
to_chat(tmob,STEP_TEXT_PREY(tail.msg_prey_disarm_walk))
|
||||
to_chat(src,STEP_TEXT_OWNER("<span class='danger'>[tail.msg_owner_disarm_walk]</span>"))
|
||||
to_chat(tmob,STEP_TEXT_PREY("<span class='danger'>[tail.msg_prey_disarm_walk]</span>"))
|
||||
|
||||
//Return true, the sizediff was enough that we handled it.
|
||||
return TRUE
|
||||
@@ -297,14 +297,14 @@ var/const/RESIZE_A_SMALLTINY = (RESIZE_SMALL + RESIZE_TINY) / 2
|
||||
|
||||
//Not a human, or not a taur, generic message only
|
||||
if(!H || !isTaurTail(H.tail_style))
|
||||
to_chat(src,"You carelessly step down onto [tmob], crushing them!")
|
||||
to_chat(tmob,"[src] steps carelessly on your body, crushing you!")
|
||||
to_chat(src,"<span class='danger'>You carelessly step down onto [tmob], crushing them!</span>")
|
||||
to_chat(tmob,"<span class='danger'>[src] steps carelessly on your body, crushing you!</span>")
|
||||
|
||||
//Human with taur tail, special messages are sent
|
||||
else
|
||||
var/datum/sprite_accessory/tail/taur/tail = H.tail_style
|
||||
to_chat(src,STEP_TEXT_OWNER(tail.msg_owner_harm_run))
|
||||
to_chat(tmob,STEP_TEXT_PREY(tail.msg_prey_harm_run))
|
||||
to_chat(src,STEP_TEXT_OWNER("<span class='danger'>[tail.msg_owner_harm_run]</span>"))
|
||||
to_chat(tmob,STEP_TEXT_PREY("<span class='danger'>[tail.msg_prey_harm_run]</span>"))
|
||||
|
||||
//If they are a human, do damage (doesn't hurt other mobs...?)
|
||||
if(Ht)
|
||||
@@ -327,14 +327,14 @@ var/const/RESIZE_A_SMALLTINY = (RESIZE_SMALL + RESIZE_TINY) / 2
|
||||
|
||||
//Not a human, or not a taur, generic message only
|
||||
if(!H || !isTaurTail(H.tail_style))
|
||||
to_chat(src,"You methodically place your foot down upon [tmob]'s body, slowly applying pressure, crushing them against the floor below!")
|
||||
to_chat(tmob,"[src] methodically places their foot upon your body, slowly applying pressure, crushing you against the floor below!")
|
||||
to_chat(src,"<span class='danger'>You methodically place your foot down upon [tmob]'s body, slowly applying pressure, crushing them against the floor below!</span>")
|
||||
to_chat(tmob,"<span class='danger'>[src] methodically places their foot upon your body, slowly applying pressure, crushing you against the floor below!</span>")
|
||||
|
||||
//Human with taur tail, special messages are sent
|
||||
else
|
||||
var/datum/sprite_accessory/tail/taur/tail = H.tail_style
|
||||
to_chat(src,STEP_TEXT_OWNER(tail.msg_owner_harm_walk))
|
||||
to_chat(tmob,STEP_TEXT_PREY(tail.msg_prey_harm_walk))
|
||||
to_chat(src,STEP_TEXT_OWNER("<span class='danger'>[tail.msg_owner_harm_walk]</span>"))
|
||||
to_chat(tmob,STEP_TEXT_PREY("<span class='danger'>[tail.msg_prey_harm_walk]</span>"))
|
||||
|
||||
//Return true, the sizediff was enough that we handled it.
|
||||
return TRUE
|
||||
@@ -353,29 +353,29 @@ var/const/RESIZE_A_SMALLTINY = (RESIZE_SMALL + RESIZE_TINY) / 2
|
||||
|
||||
//Not a human, or not a taur while wearing shoes = no grab
|
||||
if(!H || (!isTaurTail(H.tail_style) && H.shoes))
|
||||
to_chat(src,"You step down onto [tmob], squishing them and forcing them down to the ground!")
|
||||
to_chat(tmob,"[src] steps down and squishes you with their foot, forcing you down to the ground!")
|
||||
to_chat(src,"<span class='danger'>You step down onto [tmob], squishing them and forcing them down to the ground!</span>")
|
||||
to_chat(tmob,"<span class='danger'>[src] steps down and squishes you with their foot, forcing you down to the ground!</span>")
|
||||
add_attack_logs(src,tmob,"Grabbed underfoot (nontaur, shoes)")
|
||||
|
||||
//Human, not a taur, but not wearing shoes = yes grab
|
||||
else if(H && (!isTaurTail(H.tail_style) && !H.shoes))
|
||||
to_chat(src,"You pin [tmob] down onto the floor with your foot and curl your toes up around their body, trapping them inbetween them!")
|
||||
to_chat(tmob,"[src] pins you down to the floor with their foot and curls their toes up around your body, trapping you inbetween them!")
|
||||
to_chat(src,"<span class='danger'>You pin [tmob] down onto the floor with your foot and curl your toes up around their body, trapping them inbetween them!</span>")
|
||||
to_chat(tmob,"<span class='danger'>[src] pins you down to the floor with their foot and curls their toes up around your body, trapping you inbetween them!</span>")
|
||||
equip_to_slot_if_possible(tmob.get_scooped(H), slot_shoes, 0, 1)
|
||||
add_attack_logs(src,tmob,"Grabbed underfoot (nontaur, no shoes)")
|
||||
|
||||
//Human, taur, shoes = no grab, special message
|
||||
else if(H.shoes)
|
||||
var/datum/sprite_accessory/tail/taur/tail = H.tail_style
|
||||
to_chat(src,STEP_TEXT_OWNER(tail.msg_owner_grab_fail))
|
||||
to_chat(tmob,STEP_TEXT_PREY(tail.msg_prey_grab_fail))
|
||||
to_chat(src,STEP_TEXT_OWNER("<span class='danger'>[tail.msg_owner_grab_fail]</span>"))
|
||||
to_chat(tmob,STEP_TEXT_PREY("<span class='danger'>[tail.msg_prey_grab_fail]</span>"))
|
||||
add_attack_logs(src,tmob,"Grabbed underfoot (taur, shoes)")
|
||||
|
||||
//Human, taur, no shoes = yes grab, special message
|
||||
else
|
||||
var/datum/sprite_accessory/tail/taur/tail = H.tail_style
|
||||
to_chat(src,STEP_TEXT_OWNER(tail.msg_owner_grab_success))
|
||||
to_chat(tmob,STEP_TEXT_PREY(tail.msg_prey_grab_success))
|
||||
to_chat(src,STEP_TEXT_OWNER("<span class='danger'>[tail.msg_owner_grab_success]</span>"))
|
||||
to_chat(tmob,STEP_TEXT_PREY("<span class='danger'>[tail.msg_prey_grab_success]</span>"))
|
||||
equip_to_slot_if_possible(tmob.get_scooped(H), slot_shoes, 0, 1)
|
||||
add_attack_logs(src,tmob,"Grabbed underfoot (taur, no shoes)")
|
||||
|
||||
|
||||
@@ -19,6 +19,20 @@
|
||||
else
|
||||
set_light(3, 3, "#33CC33")
|
||||
|
||||
/obj/machinery/crystal/alt
|
||||
name = "Crystal"
|
||||
icon = 'icons/obj/mining.dmi'
|
||||
icon_state = "crystal"
|
||||
density = TRUE
|
||||
anchored = TRUE
|
||||
|
||||
/obj/machinery/crystal/alt/New()
|
||||
if(prob(50))
|
||||
icon_state = "crystal2"
|
||||
set_light(3, 3, "#CC00CC")
|
||||
else
|
||||
set_light(3, 3, "#33CC33")
|
||||
|
||||
/obj/machinery/crystal/ice //slightly more thematic crystals
|
||||
name = "ice crystal"
|
||||
desc = "A large crystalline ice formation."
|
||||
|
||||
Reference in New Issue
Block a user