mirror of
https://github.com/VOREStation/VOREStation.git
synced 2026-08-22 19:47:47 +01:00
Merge branch 'master' into upstream-merge-8298
This commit is contained in:
@@ -18,6 +18,7 @@
|
||||
#define DM_FLAG_THICKBELLY 0x8
|
||||
#define DM_FLAG_AFFECTWORN 0x10
|
||||
#define DM_FLAG_JAMSENSORS 0x20
|
||||
#define DM_FLAG_FORCEPSAY 0x40
|
||||
|
||||
//Item related modes
|
||||
#define IM_HOLD "Hold"
|
||||
|
||||
@@ -8,7 +8,8 @@
|
||||
#define BORG_MODULE_MEDICAL (1<<3)
|
||||
/// Module is compatible with Engineering Cyborg models
|
||||
#define BORG_MODULE_ENGINEERING (1<<4)
|
||||
|
||||
/// Module is compatible with Science Cyborg models
|
||||
#define BORG_MODULE_SCIENCE (1<<5)
|
||||
/// Module is compatible with Ripley Exosuit models
|
||||
#define EXOSUIT_MODULE_RIPLEY (1<<0)
|
||||
/// Module is compatible with Odyseeus Exosuit models
|
||||
|
||||
@@ -52,7 +52,7 @@ GLOBAL_LIST_INIT(custom_species_bases, new) // Species that can be used for a Cu
|
||||
var/datum/category_collection/underwear/global_underwear = new()
|
||||
|
||||
//Backpacks
|
||||
var/global/list/backbaglist = list("Nothing", "Backpack", "Satchel", "Satchel Alt", "Messenger Bag", "Sports Bag")
|
||||
var/global/list/backbaglist = list("Nothing", "Backpack", "Satchel", "Satchel Alt", "Messenger Bag", "Sports Bag", "Strapless Satchel") //VOREStation edit
|
||||
var/global/list/pdachoicelist = list("Default", "Slim", "Old", "Rugged", "Holographic", "Wrist-Bound", "Slider")
|
||||
var/global/list/exclude_jobs = list(/datum/job/ai,/datum/job/cyborg)
|
||||
|
||||
|
||||
@@ -453,6 +453,11 @@ Turf and target are seperate in case you want to teleport some distance from a t
|
||||
moblist.Add(M)
|
||||
for(var/mob/living/simple_mob/M in sortmob)
|
||||
moblist.Add(M)
|
||||
//VOREStation Addition Start
|
||||
for(var/mob/living/dominated_brain/M in sortmob)
|
||||
moblist.Add(M)
|
||||
//VOREStation Addition End
|
||||
|
||||
// for(var/mob/living/silicon/hivebot/M in sortmob)
|
||||
// mob_list.Add(M)
|
||||
// for(var/mob/living/silicon/hive_mainframe/M in sortmob)
|
||||
|
||||
@@ -56,3 +56,14 @@
|
||||
time = 120
|
||||
category = CAT_WEAPONRY
|
||||
subcategory = CAT_WEAPON
|
||||
|
||||
/datum/crafting_recipe/scopedrifle
|
||||
name = "Bolt scope to bolt-action (cannot be removed)"
|
||||
result = /obj/item/weapon/gun/projectile/shotgun/pump/rifle/scoped
|
||||
reqs = list(
|
||||
/obj/item/device/binoculars/scope = 1,
|
||||
/obj/item/weapon/gun/projectile/shotgun/pump/rifle = 1
|
||||
)
|
||||
time = 180
|
||||
category = CAT_WEAPONRY
|
||||
subcategory = CAT_WEAPON
|
||||
@@ -57,6 +57,7 @@ var/list/outfits_decls_by_type_
|
||||
var/satchel_two = /obj/item/weapon/storage/backpack/satchel
|
||||
var/messenger_bag = /obj/item/weapon/storage/backpack/messenger
|
||||
var/sports_bag = /obj/item/weapon/storage/backpack/sport
|
||||
var/satchel_three = /obj/item/weapon/storage/backpack/satchel/strapless
|
||||
|
||||
var/flags // Specific flags
|
||||
|
||||
@@ -78,6 +79,7 @@ var/list/outfits_decls_by_type_
|
||||
if(4) back = satchel_two
|
||||
if(5) back = messenger_bag
|
||||
if(6) back = sports_bag
|
||||
if(7) back = satchel_three
|
||||
else back = null
|
||||
|
||||
/decl/hierarchy/outfit/proc/post_equip(mob/living/carbon/human/H)
|
||||
@@ -183,4 +185,4 @@ var/list/outfits_decls_by_type_
|
||||
return pda
|
||||
|
||||
/decl/hierarchy/outfit/dd_SortValue()
|
||||
return name
|
||||
return name
|
||||
|
||||
@@ -134,7 +134,7 @@ Keep outfits simple. Spawn with basic uniforms and minimal gear. Gear instead go
|
||||
uniform_accessories = list(/obj/item/clothing/accessory/storage/webbing/pilot1 = 1)
|
||||
id_slot = slot_wear_id
|
||||
pda_slot = slot_belt
|
||||
pda_type = /obj/item/device/pda
|
||||
pda_type = /obj/item/device/pda/pilot
|
||||
id_type = /obj/item/weapon/card/id/civilian/pilot
|
||||
id_pda_assignment = "Pilot"
|
||||
flags = OUTFIT_HAS_BACKPACK|OUTFIT_COMPREHENSIVE_SURVIVAL
|
||||
|
||||
@@ -21,6 +21,10 @@ GLOBAL_VAR_INIT(items_sold_shift_roundstat, 0)
|
||||
GLOBAL_VAR_INIT(disposals_flush_shift_roundstat, 0)
|
||||
GLOBAL_VAR_INIT(rocks_drilled_roundstat, 0)
|
||||
GLOBAL_VAR_INIT(mech_destroyed_roundstat, 0)
|
||||
GLOBAL_VAR_INIT(prey_eaten_roundstat, 0) //VOREStation Edit - Obviously
|
||||
GLOBAL_VAR_INIT(prey_absorbed_roundstat, 0) //VOREStation Edit - Obviously
|
||||
GLOBAL_VAR_INIT(prey_digested_roundstat, 0) //VOREStation Edit - Obviously
|
||||
GLOBAL_VAR_INIT(items_digested_roundstat, 0) //VOREStation Edit - Obviously
|
||||
|
||||
/hook/roundend/proc/RoundTrivia()//bazinga
|
||||
var/list/valid_stats_list = list() //This is to be populated with the good shit
|
||||
@@ -50,6 +54,17 @@ GLOBAL_VAR_INIT(mech_destroyed_roundstat, 0)
|
||||
else if(GLOB.disposals_flush_shift_roundstat > 40)
|
||||
valid_stats_list.Add("The disposal system flushed a whole [GLOB.disposals_flush_shift_roundstat] times for this shift. We should really invest in waste treatement.")
|
||||
|
||||
//VOREStation Add Start - Vore stats lets gooooo
|
||||
if(GLOB.prey_eaten_roundstat > 0)
|
||||
valid_stats_list.Add("A total of [GLOB.prey_eaten_roundstat] individuals were eaten today!")
|
||||
if(GLOB.prey_digested_roundstat > 0)
|
||||
valid_stats_list.Add("A total of [GLOB.prey_digested_roundstat] individuals were digested today!")
|
||||
if(GLOB.prey_absorbed_roundstat > 0)
|
||||
valid_stats_list.Add("A total of [GLOB.prey_absorbed_roundstat] individuals were absorbed today!")
|
||||
if(GLOB.items_digested_roundstat > 0)
|
||||
valid_stats_list.Add("A total of [GLOB.items_digested_roundstat] items were digested today!")
|
||||
//VOREStation Add End
|
||||
|
||||
if(LAZYLEN(valid_stats_list))
|
||||
to_world("<B>Shift trivia!</B>")
|
||||
|
||||
|
||||
@@ -29,7 +29,7 @@
|
||||
/obj/item/weapon/reagent_containers/food/snacks/berrymuffin,
|
||||
/obj/item/weapon/reagent_containers/food/snacks/bunbun,
|
||||
/obj/item/weapon/reagent_containers/food/snacks/cherrypie,
|
||||
/obj/item/weapon/reagent_containers/food/snacks/cookiesnack,
|
||||
/obj/item/weapon/reagent_containers/food/snacks/cookie,
|
||||
/obj/item/weapon/reagent_containers/food/snacks/croissant,
|
||||
/obj/item/weapon/reagent_containers/food/snacks/donut/normal,
|
||||
/obj/item/weapon/reagent_containers/food/snacks/donut/jelly,
|
||||
|
||||
@@ -129,6 +129,17 @@
|
||||
containername = "Ballistic weapon crate"
|
||||
access = access_armory
|
||||
|
||||
/datum/supply_pack/munitions/bolt_rifles_lethal
|
||||
name = "Weapons - Bolt-Action Rifles"
|
||||
contains = list(
|
||||
/obj/item/weapon/gun/projectile/shotgun/pump/rifle = 2,
|
||||
/obj/item/ammo_magazine/ammo_box/b762 = 4,
|
||||
)
|
||||
cost = 60
|
||||
containertype = /obj/structure/closet/crate/secure/weapon
|
||||
containername = "Ballistic Weapons crate"
|
||||
access = access_armory
|
||||
|
||||
/datum/supply_pack/munitions/bolt_rifles_competitive
|
||||
name = "Weapons - Competitive shooting rifles"
|
||||
contains = list(
|
||||
|
||||
@@ -22,7 +22,8 @@
|
||||
"Security Cadet" = /datum/alt_title/intern_sec,
|
||||
"Jr. Cargo Tech" = /datum/alt_title/intern_crg,
|
||||
"Jr. Explorer" = /datum/alt_title/intern_exp,
|
||||
"Server" = /datum/alt_title/server)
|
||||
"Server" = /datum/alt_title/server,
|
||||
"Assistant" = /datum/alt_title/assistant)
|
||||
job_description = "An Intern does whatever is requested of them, often doing so in process of learning \
|
||||
another job. Though they are part of the crew, they have no real authority."
|
||||
timeoff_factor = 0 // Interns, noh
|
||||
@@ -68,6 +69,11 @@
|
||||
title_blurb = "A Server helps out kitchen and diner staff with various tasks, primarily food delivery. A Server has no real authority."
|
||||
title_outfit = /decl/hierarchy/outfit/job/service/server
|
||||
|
||||
/datum/alt_title/assistant
|
||||
title = "Assistant"
|
||||
title_blurb = "An assistant helps out wherever they might be needed. They have no authority, but can volunteer to help if help is needed."
|
||||
title_outfit = /decl/hierarchy/outfit/job/service/server
|
||||
|
||||
/datum/job/intern/New()
|
||||
..()
|
||||
if(config)
|
||||
|
||||
@@ -213,8 +213,8 @@
|
||||
economic_modifier = 5
|
||||
minimal_player_age = 3
|
||||
pto_type = PTO_CIVILIAN
|
||||
access = list(access_pilot)
|
||||
minimal_access = list(access_pilot)
|
||||
access = list(access_eva, access_maint_tunnels, access_external_airlocks, access_pilot)
|
||||
minimal_access = list(access_eva, access_maint_tunnels, access_external_airlocks, access_pilot)
|
||||
outfit_type = /decl/hierarchy/outfit/job/pilot
|
||||
job_description = "A Pilot flies the various shuttles in the Virgo-Erigone System."
|
||||
alt_titles = list("Co-Pilot" = /datum/alt_title/co_pilot, "Navigator" = /datum/alt_title/navigator, "Helmsman" = /datum/alt_title/helmsman)
|
||||
@@ -293,4 +293,4 @@
|
||||
|
||||
/datum/alt_title/artist
|
||||
title = "Artist"
|
||||
title_blurb = "An Artist's calling is to create beautiful arts! Whatever form may they take, create and have people astonished with your creativity."
|
||||
title_blurb = "An Artist's calling is to create beautiful arts! Whatever form may they take, create and have people astonished with your creativity."
|
||||
|
||||
@@ -528,9 +528,18 @@
|
||||
control_computer.frozen_crew += "[to_despawn.real_name], [to_despawn.mind.role_alt_title] - [stationtime2text()]"
|
||||
control_computer._admin_logs += "[key_name(to_despawn)] ([to_despawn.mind.role_alt_title]) at [stationtime2text()]"
|
||||
log_and_message_admins("[key_name(to_despawn)] ([to_despawn.mind.role_alt_title]) entered cryostorage.")
|
||||
|
||||
//VOREStation Edit Start
|
||||
var/depart_announce = TRUE
|
||||
|
||||
announce.autosay("[to_despawn.real_name], [to_despawn.mind.role_alt_title], [on_store_message]", "[on_store_name]", announce_channel, using_map.get_map_levels(z, TRUE, om_range = DEFAULT_OVERMAP_RANGE))
|
||||
visible_message("<span class='notice'>\The [initial(name)] [on_store_visible_message_1] [to_despawn.real_name] [on_store_visible_message_2]</span>", 3)
|
||||
if(istype(to_despawn, /mob/living/dominated_brain))
|
||||
depart_announce = FALSE
|
||||
|
||||
if(depart_announce)
|
||||
announce.autosay("[to_despawn.real_name], [to_despawn.mind.role_alt_title], [on_store_message]", "[on_store_name]", announce_channel, using_map.get_map_levels(z, TRUE, om_range = DEFAULT_OVERMAP_RANGE))
|
||||
visible_message("<span class='notice'>\The [initial(name)] [on_store_visible_message_1] [to_despawn.real_name] [on_store_visible_message_2]</span>", 3)
|
||||
|
||||
//VOREStation Edit End
|
||||
|
||||
//VOREStation Edit begin: Dont delete mobs-in-mobs
|
||||
if(to_despawn.client && to_despawn.stat<2)
|
||||
|
||||
@@ -31,7 +31,7 @@
|
||||
var/time_coeff = 1
|
||||
/// Coefficient for the efficiency of material usage in item building. Based on the installed parts.
|
||||
var/component_coeff = 1
|
||||
|
||||
|
||||
var/loading_icon_state = "mechfab-idle"
|
||||
|
||||
var/list/materials = list(
|
||||
@@ -148,6 +148,9 @@
|
||||
sub_category += "Medical"
|
||||
if(module_types & BORG_MODULE_ENGINEERING)
|
||||
sub_category += "Engineering"
|
||||
if(module_types & BORG_MODULE_SCIENCE)
|
||||
sub_category += "Science"
|
||||
|
||||
else
|
||||
sub_category += "All Cyborgs"
|
||||
// Else check if this design builds a piece of exosuit equipment.
|
||||
@@ -309,7 +312,7 @@
|
||||
atom_say("Obstruction cleared. \The [stored_part] is complete.")
|
||||
stored_part.forceMove(exit)
|
||||
stored_part = null
|
||||
|
||||
|
||||
// If there's nothing being built, try to build something
|
||||
if(!being_built)
|
||||
// If we're not processing the queue anymore or there's nothing to build, end processing.
|
||||
@@ -703,7 +706,7 @@
|
||||
|
||||
// Reduce our amount stored
|
||||
materials[matstring] -= ejected * S.perunit
|
||||
|
||||
|
||||
// Recurse if we have enough left for more sheets
|
||||
if(recursive && materials[matstring] >= S.perunit)
|
||||
eject_materials(matstring, -1)
|
||||
|
||||
@@ -18,4 +18,9 @@
|
||||
name = "spyglass"
|
||||
desc = "It's a hand-held telescope, useful for star-gazing, peeping, and recon."
|
||||
icon_state = "spyglass"
|
||||
slot_flags = SLOT_BELT
|
||||
slot_flags = SLOT_BELT
|
||||
|
||||
/obj/item/device/binoculars/scope
|
||||
name = "rifle scope"
|
||||
desc = "It's a rifle scope. Would be better if it were actually attached to a rifle."
|
||||
icon_state = "rifle_scope"
|
||||
@@ -1,15 +1,38 @@
|
||||
/*
|
||||
* Sidearm Lethal
|
||||
*/
|
||||
/obj/item/gunbox
|
||||
name = "detective's gun box"
|
||||
desc = "A secure box containing a Detective's sidearm."
|
||||
name = "sidearm box"
|
||||
desc = "A secure box containing a lethal sidearm."
|
||||
icon = 'icons/obj/storage.dmi'
|
||||
icon_state = "gunbox"
|
||||
w_class = ITEMSIZE_HUGE
|
||||
|
||||
/obj/item/gunbox/attack_self(mob/living/user)
|
||||
var/list/options = list()
|
||||
options[".45 Pistol"] = list(/obj/item/weapon/gun/projectile/colt/detective, /obj/item/ammo_magazine/m45/rubber, /obj/item/ammo_magazine/m45/rubber)
|
||||
options[".45 Revolver"] = list(/obj/item/weapon/gun/projectile/revolver/detective45, /obj/item/ammo_magazine/s45/rubber, /obj/item/ammo_magazine/s45/rubber)
|
||||
options["M1911 (.45)"] = list(/obj/item/weapon/gun/projectile/colt/detective, /obj/item/ammo_magazine/m45/rubber, /obj/item/ammo_magazine/m45/rubber)
|
||||
options["MT Mk58 (.45)"] = list(/obj/item/weapon/gun/projectile/sec, /obj/item/ammo_magazine/m45/rubber, /obj/item/ammo_magazine/m45/rubber)
|
||||
options["MarsTech R1 (.45)"] = list(/obj/item/weapon/gun/projectile/revolver/detective45, /obj/item/ammo_magazine/s45/rubber, /obj/item/ammo_magazine/s45/rubber)
|
||||
options["MarsTech P92X (9mm)"] = list(/obj/item/weapon/gun/projectile/p92x/rubber, /obj/item/ammo_magazine/m9mm/rubber, /obj/item/ammo_magazine/m9mm/rubber)
|
||||
var/choice = tgui_input_list(user,"Would you prefer a pistol or a revolver?", "Gun!", options)
|
||||
if(src && choice)
|
||||
var/list/things_to_spawn = options[choice]
|
||||
for(var/new_type in things_to_spawn) // Spawn all the things, the gun and the ammo.
|
||||
var/atom/movable/AM = new new_type(get_turf(src))
|
||||
if(istype(AM, /obj/item/weapon/gun))
|
||||
to_chat(user, "You have chosen \the [AM]. Say hello to your new friend.")
|
||||
qdel(src)
|
||||
|
||||
/*
|
||||
* Sidearm Stun
|
||||
*/
|
||||
/obj/item/gunbox/stun
|
||||
name = "non-lethal sidearm box"
|
||||
desc = "A secure box containing a non-lethal sidearm."
|
||||
/obj/item/gunbox/stun/attack_self(mob/living/user)
|
||||
var/list/options = list()
|
||||
options["Stun Revolver"] = list(/obj/item/weapon/gun/energy/stunrevolver/detective, /obj/item/weapon/cell/device/weapon, /obj/item/weapon/cell/device/weapon)
|
||||
options["Taser"] = list(/obj/item/weapon/gun/energy/taser, /obj/item/weapon/cell/device/weapon, /obj/item/weapon/cell/device/weapon)
|
||||
var/choice = tgui_input_list(user,"Please, select an option.", "Stun Gun!", options)
|
||||
if(src && choice)
|
||||
var/list/things_to_spawn = options[choice]
|
||||
for(var/new_type in things_to_spawn) // Spawn all the things, the gun and the ammo.
|
||||
|
||||
@@ -1,18 +1,21 @@
|
||||
/obj/item/gunbox
|
||||
name = "security sidearm box"
|
||||
desc = "A secure box containing a security sidearm."
|
||||
/*
|
||||
* Shotgun Box
|
||||
*/
|
||||
/obj/item/gunbox/warden
|
||||
name = "warden's shotgun case"
|
||||
desc = "A secure guncase containing the warden's beloved shotgun."
|
||||
icon = 'icons/obj/storage_vr.dmi'
|
||||
icon_state = "gunboxw"
|
||||
|
||||
/obj/item/gunbox/attack_self(mob/living/user)
|
||||
/obj/item/gunbox/warden/attack_self(mob/living/user)
|
||||
var/list/options = list()
|
||||
options["M1911 (.45)"] = list(/obj/item/weapon/gun/projectile/colt/detective, /obj/item/ammo_magazine/m45/rubber, /obj/item/ammo_magazine/m45/rubber)
|
||||
options["NT Mk58 (.45)"] = list(/obj/item/weapon/gun/projectile/sec, /obj/item/ammo_magazine/m45/rubber, /obj/item/ammo_magazine/m45/rubber)
|
||||
options["SW 625 Revolver (.45)"] = list(/obj/item/weapon/gun/projectile/revolver/detective45, /obj/item/ammo_magazine/s45/rubber, /obj/item/ammo_magazine/s45/rubber)
|
||||
options["P92X (9mm)"] = list(/obj/item/weapon/gun/projectile/p92x/sec, /obj/item/ammo_magazine/m9mm/rubber, /obj/item/ammo_magazine/m9mm/rubber)
|
||||
var/choice = tgui_input_list(user,"Would you prefer a pistol or a revolver?", "Gun!", options)
|
||||
options["Warden's combat shotgun"] = list(/obj/item/weapon/gun/projectile/shotgun/pump/combat/warden, /obj/item/ammo_magazine/ammo_box/b12g/beanbag)
|
||||
options["Warden's compact shotgun"] = list(/obj/item/weapon/gun/projectile/shotgun/compact/warden, /obj/item/ammo_magazine/ammo_box/b12g/beanbag)
|
||||
var/choice = tgui_input_list(user,"Choose your boomstick!", "Shotgun!", options)
|
||||
if(src && choice)
|
||||
var/list/things_to_spawn = options[choice]
|
||||
for(var/new_type in things_to_spawn) // Spawn all the things, the gun and the ammo.
|
||||
var/atom/movable/AM = new new_type(get_turf(src))
|
||||
if(istype(AM, /obj/item/weapon/gun))
|
||||
to_chat(user, "You have chosen \the [AM]. Say hello to your new friend.")
|
||||
qdel(src)
|
||||
to_chat(user, "You have chosen \the [AM]. Say hello to your new best friend.")
|
||||
qdel(src)
|
||||
|
||||
@@ -155,7 +155,7 @@
|
||||
|
||||
/obj/item/borg/upgrade/advhealth
|
||||
name = "advanced health analyzer module"
|
||||
desc = "A carbon dioxide jetpack suitable for low-gravity operations."
|
||||
desc = "An Advanced Health Analyzer, optimized for borg mounting."
|
||||
icon_state = "cyborg_upgrade3"
|
||||
item_state = "cyborg_upgrade"
|
||||
require_module = 1
|
||||
@@ -214,4 +214,4 @@
|
||||
R.add_language(LANGUAGE_TERMINUS, 1)
|
||||
R.add_language(LANGUAGE_ZADDAT, 1)
|
||||
|
||||
return 1
|
||||
return 1
|
||||
@@ -66,3 +66,93 @@
|
||||
to_chat(usr, "Internal capacity doubled.")
|
||||
T.upgraded_capacity = TRUE
|
||||
return 1
|
||||
|
||||
//Advanced RPED
|
||||
/obj/item/borg/upgrade/advrped
|
||||
name = "Advanced Rapid Part Exchange Device"
|
||||
desc = "An ARPED, now in borg size!"
|
||||
icon_state = "cyborg_upgrade3"
|
||||
item_state = "cyborg_upgrade"
|
||||
module_flags = BORG_MODULE_SCIENCE
|
||||
require_module = 1
|
||||
|
||||
/obj/item/borg/upgrade/advrped/action(var/mob/living/silicon/robot/R)
|
||||
if(..()) return 0
|
||||
|
||||
var/obj/item/weapon/storage/part_replacer/adv/T = locate() in R.module
|
||||
|
||||
if(!R.module || !(type in R.module.supported_upgrades))
|
||||
to_chat(R, "Upgrade mounting error! No suitable hardpoint detected!")
|
||||
to_chat(usr, "There's no mounting point for the module!")
|
||||
return 0
|
||||
if(!T)
|
||||
T = locate() in R.module.contents
|
||||
if(!T)
|
||||
T = locate() in R.module.modules
|
||||
if(!T)
|
||||
R.module.modules += new/obj/item/weapon/storage/part_replacer/adv(R.module)
|
||||
return 1
|
||||
if(T)
|
||||
to_chat(R, "Upgrade mounting error! No suitable hardpoint detected!")
|
||||
to_chat(usr, "There's no mounting point for the module!")
|
||||
return 0
|
||||
|
||||
//Diamond Drill
|
||||
/obj/item/borg/upgrade/diamonddrill
|
||||
name = "Mounted Diamond Drill"
|
||||
desc = "An advanced drill, optimized for borg use."
|
||||
icon_state = "cyborg_upgrade3"
|
||||
item_state = "cyborg_upgrade"
|
||||
module_flags = BORG_MODULE_MINER
|
||||
require_module = 1
|
||||
|
||||
/obj/item/borg/upgrade/diamonddrill/action(var/mob/living/silicon/robot/R)
|
||||
if(..()) return 0
|
||||
|
||||
var/obj/item/weapon/pickaxe/diamonddrill/T = locate() in R.module
|
||||
|
||||
if(!R.module || !(type in R.module.supported_upgrades))
|
||||
to_chat(R, "Upgrade mounting error! No suitable hardpoint detected!")
|
||||
to_chat(usr, "There's no mounting point for the module!")
|
||||
return 0
|
||||
if(!T)
|
||||
T = locate() in R.module.contents
|
||||
if(!T)
|
||||
T = locate() in R.module.modules
|
||||
if(!T)
|
||||
R.module.modules += new/obj/item/weapon/pickaxe/diamonddrill(R.module)
|
||||
return 1
|
||||
if(T)
|
||||
to_chat(R, "Upgrade mounting error! No suitable hardpoint detected!")
|
||||
to_chat(usr, "There's no mounting point for the module!")
|
||||
return 0
|
||||
|
||||
//PKA
|
||||
/obj/item/borg/upgrade/pka
|
||||
name = "Protokenetic Accelerator Upgrade"
|
||||
desc = "A borg mounted PKA Rifle for use in mining and wildlife defense."
|
||||
icon_state = "cyborg_upgrade3"
|
||||
item_state = "cyborg_upgrade"
|
||||
module_flags = BORG_MODULE_MINER
|
||||
require_module = 1
|
||||
|
||||
/obj/item/borg/upgrade/pka/action(var/mob/living/silicon/robot/R)
|
||||
if(..()) return 0
|
||||
|
||||
var/obj/item/weapon/gun/energy/kinetic_accelerator/cyborg/T = locate() in R.module
|
||||
|
||||
if(!R.module || !(type in R.module.supported_upgrades))
|
||||
to_chat(R, "Upgrade mounting error! No suitable hardpoint detected!")
|
||||
to_chat(usr, "There's no mounting point for the module!")
|
||||
return 0
|
||||
if(!T)
|
||||
T = locate() in R.module.contents
|
||||
if(!T)
|
||||
T = locate() in R.module.modules
|
||||
if(!T)
|
||||
R.module.modules += new/obj/item/weapon/gun/energy/kinetic_accelerator/cyborg(R.module)
|
||||
return 1
|
||||
if(T)
|
||||
to_chat(R, "Upgrade mounting error! No suitable hardpoint detected!")
|
||||
to_chat(usr, "There's no mounting point for the module!")
|
||||
return 0
|
||||
@@ -47,7 +47,7 @@
|
||||
force = 3.0
|
||||
max_water = 600
|
||||
spray_particles = 3
|
||||
sprite_name = "atmo_extinguisher"
|
||||
sprite_name = "atmos_extinguisher"
|
||||
rand_overlays = 0
|
||||
|
||||
/obj/item/weapon/extinguisher/Initialize()
|
||||
|
||||
@@ -72,7 +72,8 @@
|
||||
/obj/item/device/integrated_electronics/wirer,
|
||||
/obj/item/device/integrated_electronics/debugger, //Vorestation edit adding debugger to toolbelt can hold list
|
||||
/obj/item/weapon/shovel/spade, //VOREStation edit. If it can hold minihoes and hatchers, why not the gardening spade?
|
||||
/obj/item/stack/nanopaste //VOREStation edit. Think of it as a tube of superglue. Belts hold that all the time.
|
||||
/obj/item/stack/nanopaste, //VOREStation edit. Think of it as a tube of superglue. Belts hold that all the time.
|
||||
/obj/item/device/geiger //VOREStation edit. Engineers work with rad-slinging stuff sometimes too
|
||||
)
|
||||
|
||||
/obj/item/weapon/storage/belt/utility/full
|
||||
@@ -102,7 +103,9 @@
|
||||
/obj/item/weapon/tool/wrench,
|
||||
/obj/item/weapon/weldingtool,
|
||||
/obj/item/weapon/tool/crowbar,
|
||||
/obj/item/weapon/tool/wirecutters
|
||||
/obj/item/weapon/tool/wirecutters,
|
||||
/obj/item/device/analyzer, //Vorestation edit. Gives atmos techs a few extra tools fitting their job from the start
|
||||
/obj/item/weapon/extinguisher/mini //Vorestation edit. As above, the mini's much more handy to have rather than lugging a big one around
|
||||
)
|
||||
|
||||
/obj/item/weapon/storage/belt/utility/chief
|
||||
@@ -538,4 +541,4 @@
|
||||
storage_slots = 8
|
||||
can_hold = list(
|
||||
/obj/item/ammo_casing/afoam_dart
|
||||
)
|
||||
)
|
||||
|
||||
@@ -7,4 +7,5 @@
|
||||
max_storage_space = ITEMSIZE_COST_SMALL * 6
|
||||
|
||||
/obj/item/weapon/storage/toolbox/lunchbox/survival/zaddat
|
||||
starts_with = list(/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/glucose = 6)
|
||||
name = "zaddat survival lunchbox"
|
||||
starts_with = list(/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/glucose = 6)
|
||||
|
||||
@@ -12,7 +12,7 @@
|
||||
/obj/item/weapon/tape_roll/proc/can_place(var/mob/living/carbon/human/H, var/mob/user)
|
||||
if(istype(user, /mob/living/silicon/robot) || user == H)
|
||||
return TRUE
|
||||
|
||||
|
||||
for (var/obj/item/weapon/grab/G in H.grabbed_by)
|
||||
if (G.loc == user && G.state >= GRAB_AGGRESSIVE)
|
||||
return TRUE
|
||||
@@ -36,7 +36,7 @@
|
||||
to_chat(user, "<span class='warning'>\The [H] doesn't have any eyes.</span>")
|
||||
return
|
||||
if(H.glasses)
|
||||
to_chat(user, "<span class='warning'>\The [H] is already wearing somethign on their eyes.</span>")
|
||||
to_chat(user, "<span class='warning'>\The [H] is already wearing something on their eyes.</span>")
|
||||
return
|
||||
if(H.head && (H.head.body_parts_covered & FACE))
|
||||
to_chat(user, "<span class='warning'>Remove their [H.head] first.</span>")
|
||||
|
||||
@@ -460,9 +460,9 @@
|
||||
/obj/item/ammo_magazine/s44
|
||||
),
|
||||
prob(1);list(
|
||||
/obj/item/weapon/gun/projectile/revolver/webley/auto,
|
||||
/obj/item/ammo_magazine/s44,
|
||||
/obj/item/ammo_magazine/s44
|
||||
/obj/item/weapon/gun/projectile/revolver/consul,
|
||||
/obj/item/ammo_magazine/s44/rubber,
|
||||
/obj/item/ammo_magazine/s44/rubber
|
||||
)
|
||||
)
|
||||
|
||||
|
||||
@@ -848,7 +848,7 @@
|
||||
/obj/item/weapon/reagent_containers/food/snacks/donut/plain,
|
||||
/obj/item/weapon/reagent_containers/food/snacks/donut/plain/jelly,
|
||||
/obj/item/weapon/reagent_containers/food/snacks/chocolatebar,
|
||||
/obj/item/weapon/reagent_containers/food/snacks/cookiesnack)
|
||||
/obj/item/weapon/reagent_containers/food/snacks/cookie)
|
||||
|
||||
/obj/random/mre/dessert/vegan
|
||||
name = "random vegan MRE dessert"
|
||||
@@ -984,4 +984,41 @@
|
||||
prob(6);/obj/item/device/flashlight/color/orange,
|
||||
prob(6);/obj/item/device/flashlight/color/yellow,
|
||||
prob(2);/obj/item/device/flashlight/maglight
|
||||
)
|
||||
)
|
||||
|
||||
/obj/random/mug
|
||||
name = "Random Mug"
|
||||
desc = "This is a random coffee mug."
|
||||
icon = 'icons/obj/drinks_mugs.dmi'
|
||||
icon_state = "coffeecup_spawner"
|
||||
|
||||
/obj/random/mug/item_to_spawn()
|
||||
return pick(/obj/item/weapon/reagent_containers/food/drinks/glass2/coffeemug,
|
||||
/obj/item/weapon/reagent_containers/food/drinks/glass2/coffeemug/sol,
|
||||
/obj/item/weapon/reagent_containers/food/drinks/glass2/coffeemug/fleet,
|
||||
/obj/item/weapon/reagent_containers/food/drinks/glass2/coffeemug/fivearrows,
|
||||
/obj/item/weapon/reagent_containers/food/drinks/glass2/coffeemug/psc,
|
||||
/obj/item/weapon/reagent_containers/food/drinks/glass2/coffeemug/alma,
|
||||
/obj/item/weapon/reagent_containers/food/drinks/glass2/coffeemug/almp,
|
||||
/obj/item/weapon/reagent_containers/food/drinks/glass2/coffeemug/nt,
|
||||
/obj/item/weapon/reagent_containers/food/drinks/glass2/coffeemug/metal/wulf,
|
||||
/obj/item/weapon/reagent_containers/food/drinks/glass2/coffeemug/gilthari,
|
||||
/obj/item/weapon/reagent_containers/food/drinks/glass2/coffeemug/zeng,
|
||||
/obj/item/weapon/reagent_containers/food/drinks/glass2/coffeemug/wt,
|
||||
/obj/item/weapon/reagent_containers/food/drinks/glass2/coffeemug/aether,
|
||||
/obj/item/weapon/reagent_containers/food/drinks/glass2/coffeemug/bishop,
|
||||
/obj/item/weapon/reagent_containers/food/drinks/glass2/coffeemug/oculum,
|
||||
/obj/item/weapon/reagent_containers/food/drinks/glass2/coffeemug/one,
|
||||
/obj/item/weapon/reagent_containers/food/drinks/glass2/coffeemug/puni,
|
||||
/obj/item/weapon/reagent_containers/food/drinks/glass2/coffeemug/heart,
|
||||
/obj/item/weapon/reagent_containers/food/drinks/glass2/coffeemug/pawn,
|
||||
/obj/item/weapon/reagent_containers/food/drinks/glass2/coffeemug/diona,
|
||||
/obj/item/weapon/reagent_containers/food/drinks/glass2/coffeemug/britcup,
|
||||
/obj/item/weapon/reagent_containers/food/drinks/glass2/coffeemug/flame,
|
||||
/obj/item/weapon/reagent_containers/food/drinks/glass2/coffeemug/blue,
|
||||
/obj/item/weapon/reagent_containers/food/drinks/glass2/coffeemug/black,
|
||||
/obj/item/weapon/reagent_containers/food/drinks/glass2/coffeemug/green,
|
||||
/obj/item/weapon/reagent_containers/food/drinks/glass2/coffeemug/green/dark,
|
||||
/obj/item/weapon/reagent_containers/food/drinks/glass2/coffeemug/rainbow,
|
||||
/obj/item/weapon/reagent_containers/food/drinks/glass2/coffeemug/metal,
|
||||
/obj/item/weapon/reagent_containers/food/drinks/glass2/coffeemug/talon)
|
||||
@@ -111,14 +111,14 @@
|
||||
///obj/item/clamp, //VOREStation Removal: without leaks those are pointless,
|
||||
/obj/item/device/radio/headset/headset_eng,
|
||||
/obj/item/device/radio/headset/headset_eng/alt,
|
||||
/obj/item/clothing/suit/storage/hazardvest,
|
||||
/obj/item/clothing/suit/storage/hazardvest/atmos, //VOREStation edit. Eng locker gets regular haz-vest, atmos gets the themed one of their own
|
||||
/obj/item/clothing/mask/gas,
|
||||
/obj/item/weapon/cartridge/atmos,
|
||||
/obj/item/taperoll/atmos,
|
||||
/obj/item/clothing/suit/storage/hooded/wintercoat/engineering/atmos,
|
||||
/obj/item/clothing/shoes/boots/winter/atmos,
|
||||
/obj/item/weapon/tank/emergency/oxygen/engi,
|
||||
/obj/item/weapon/storage/belt/utility) //VOREStation Add
|
||||
/obj/item/weapon/storage/belt/utility/atmostech) //VOREStation edit. They don't get a toolbox to fill it from, so why not give a spare one that's full already?
|
||||
|
||||
/obj/structure/closet/secure_closet/atmos_personal/Initialize()
|
||||
if(prob(50))
|
||||
|
||||
@@ -236,7 +236,7 @@
|
||||
/obj/item/clothing/accessory/badge/holo/detective,
|
||||
/obj/item/clothing/gloves/black,
|
||||
///obj/item/gunbox, // VOREStation Removal
|
||||
/obj/item/weapon/gun/energy/stunrevolver/vintage,
|
||||
/obj/item/gunbox/stun,
|
||||
/obj/item/weapon/storage/belt/detective,
|
||||
/obj/item/weapon/storage/box/evidence,
|
||||
/obj/item/device/radio/headset/headset_sec,
|
||||
|
||||
+10
-10
@@ -554,7 +554,7 @@
|
||||
jobs += "</tr><tr align='center'>"
|
||||
counter = 0
|
||||
|
||||
jobs += "</tr></table>"
|
||||
jobs += "</tr></table>"
|
||||
|
||||
//VOREstation Edit End
|
||||
//Civilian (Grey)
|
||||
@@ -635,7 +635,7 @@
|
||||
jobs += "<td width='20%'><a href='?src=\ref[src];jobban3=[entry];jobban4=\ref[M]'><font color=red>[entry]</font></a></td>"
|
||||
else
|
||||
jobs += "<td width='20%'><a href='?src=\ref[src];jobban3=[entry];jobban4=\ref[M]'>[entry]</a></td>"
|
||||
|
||||
|
||||
if(++counter >= 5) //So things dont get squiiiiished!
|
||||
jobs += "</tr><tr align='center'>"
|
||||
counter = 0
|
||||
@@ -1417,10 +1417,10 @@
|
||||
to_chat(usr, "<span class='filter_adminlog'>This can only be used on instances of type /mob/living/carbon/human</span>")
|
||||
return
|
||||
|
||||
H.equip_to_slot_or_del( new /obj/item/weapon/reagent_containers/food/snacks/cookiesnack(H), slot_l_hand )
|
||||
if(!(istype(H.l_hand,/obj/item/weapon/reagent_containers/food/snacks/cookiesnack)))
|
||||
H.equip_to_slot_or_del( new /obj/item/weapon/reagent_containers/food/snacks/cookiesnack(H), slot_r_hand )
|
||||
if(!(istype(H.r_hand,/obj/item/weapon/reagent_containers/food/snacks/cookiesnack)))
|
||||
H.equip_to_slot_or_del( new /obj/item/weapon/reagent_containers/food/snacks/cookie(H), slot_l_hand )
|
||||
if(!(istype(H.l_hand,/obj/item/weapon/reagent_containers/food/snacks/cookie)))
|
||||
H.equip_to_slot_or_del( new /obj/item/weapon/reagent_containers/food/snacks/cookie(H), slot_r_hand )
|
||||
if(!(istype(H.r_hand,/obj/item/weapon/reagent_containers/food/snacks/cookie)))
|
||||
log_admin("[key_name(H)] has their hands full, so they did not receive their cookie, spawned by [key_name(src.owner)].")
|
||||
message_admins("[key_name(H)] has their hands full, so they did not receive their cookie, spawned by [key_name(src.owner)].")
|
||||
return
|
||||
@@ -1558,7 +1558,7 @@
|
||||
var/mob/M = locate(href_list["jumpto"])
|
||||
if(!M)
|
||||
return
|
||||
|
||||
|
||||
var/turf/T = get_turf(M)
|
||||
if(isturf(T))
|
||||
usr.on_mob_jump()
|
||||
@@ -1597,16 +1597,16 @@
|
||||
var/mob/M = locate(href_list["sendmob"])
|
||||
if(!M)
|
||||
return
|
||||
|
||||
|
||||
var/list/areachoices = return_sorted_areas()
|
||||
var/choice = tgui_input_list(usr, "Pick an area:", "Send Mob", areachoices)
|
||||
if(!choice)
|
||||
return
|
||||
|
||||
|
||||
var/area/A = areachoices[choice]
|
||||
if(!A)
|
||||
return
|
||||
|
||||
|
||||
M.on_mob_jump()
|
||||
M.forceMove(pick(get_area_turfs(A)))
|
||||
var/msg = "[key_name_admin(usr)] teleported [ADMIN_LOOKUPFLW(M)]"
|
||||
|
||||
@@ -267,7 +267,7 @@
|
||||
/obj/item/weapon/reagent_containers/food/drinks/dry_ramen, \
|
||||
/obj/item/weapon/reagent_containers/food/snacks/candiedapple, \
|
||||
/obj/item/weapon/reagent_containers/food/snacks/chocolatebar, \
|
||||
/obj/item/weapon/reagent_containers/food/snacks/cookiesnack, \
|
||||
/obj/item/weapon/reagent_containers/food/snacks/cookie, \
|
||||
/obj/item/weapon/reagent_containers/food/snacks/meatball, \
|
||||
/obj/item/weapon/reagent_containers/food/snacks/plump_pie, \
|
||||
/obj/item/weapon/reagent_containers/food/snacks/liquidfood)
|
||||
|
||||
@@ -306,4 +306,16 @@
|
||||
"Brown Vest" = /obj/item/clothing/accessory/cowboy_vest/brown,
|
||||
"Grey Vest" = /obj/item/clothing/accessory/cowboy_vest/grey
|
||||
)
|
||||
gear_tweaks += new/datum/gear_tweak/path(cowboy_vests)
|
||||
gear_tweaks += new/datum/gear_tweak/path(cowboy_vests)
|
||||
|
||||
/datum/gear/accessory/pride
|
||||
display_name = "pride pin selection"
|
||||
path = /obj/item/clothing/accessory/pride
|
||||
|
||||
/datum/gear/accessory/pride/New()
|
||||
..()
|
||||
var/list/pridepins = list()
|
||||
for(var/pridepin in typesof(/obj/item/clothing/accessory/pride))
|
||||
var/obj/item/clothing/accessory/pridepin_type = pridepin
|
||||
pridepins[initial(pridepin_type.name)] = pridepin_type
|
||||
gear_tweaks += new/datum/gear_tweak/path(sortAssoc(pridepins))
|
||||
@@ -81,9 +81,9 @@
|
||||
allowed_roles = list("Paramedic","Chief Medical Officer","Medical Doctor","Chemist","Field Medic","Talon Doctor")
|
||||
|
||||
/datum/gear/accessory/bluespace
|
||||
display_name = "bluespace badge (Eng, Sec, Med, Exploration, Miner)"
|
||||
display_name = "bluespace badge (Eng, Sec, Med, Exploration, Miner, Pilot)"
|
||||
path = /obj/item/clothing/accessory/storage/bluespace
|
||||
allowed_roles = list("Engineer","Atmospheric Technician","Chief Engineer","Security Officer","Detective","Head of Security","Warden","Paramedic","Chief Medical Officer","Medical Doctor","Chemist","Field Medic","Explorer","Pathfinder","Shaft Miner","Talon Captain","Talon Doctor","Talon Engineer","Talon Guard", "Talon Miner")
|
||||
allowed_roles = list("Engineer","Atmospheric Technician","Chief Engineer","Security Officer","Detective","Head of Security","Warden","Paramedic","Chief Medical Officer","Medical Doctor","Chemist","Field Medic","Explorer","Pathfinder","Shaft Miner","Talon Captain","Talon Doctor","Talon Engineer","Talon Guard","Talon Miner","Pilot")
|
||||
cost = 2
|
||||
|
||||
/datum/gear/accessory/webbing
|
||||
@@ -123,4 +123,4 @@ Talon pin
|
||||
/datum/gear/accessory/talonpin
|
||||
display_name = "Talon pin"
|
||||
description = "A small enamel pin of the Talon logo."
|
||||
path = /obj/item/clothing/accessory/talon
|
||||
path = /obj/item/clothing/accessory/talon
|
||||
|
||||
@@ -380,6 +380,12 @@
|
||||
ckeywhitelist = list("erikthedog")
|
||||
character_name = list("Erik Ramadwood")
|
||||
|
||||
/datum/gear/fluff/salvage_id
|
||||
path = /obj/item/weapon/card/id/event/polymorphic/itg
|
||||
display_name = "Salvage's ITG-ID card"
|
||||
ckeywhitelist = list("essbie")
|
||||
character_name = list("Savage")
|
||||
|
||||
// F CKEYS
|
||||
/datum/gear/fluff/yikatihaki_armor
|
||||
path = /obj/item/clothing/suit/armor/vox_scrap
|
||||
@@ -1344,6 +1350,12 @@
|
||||
|
||||
// Y CKEYS
|
||||
|
||||
/datum/gear/fluff/lemon_plush
|
||||
path = /obj/item/toy/plushie/fluff/lemonplush
|
||||
display_name = "yellow slime plushie"
|
||||
ckeywhitelist = list("yecrowbarman")
|
||||
character_name = list("Lemon Yellow", "Lemon Gettler Yellow", "Lemon Lee Yellow", "Lemon Jade Yellow") //different sleeves, same char
|
||||
|
||||
// Z CKEYS
|
||||
/datum/gear/fluff/tachika_medal
|
||||
path = /obj/item/clothing/accessory/medal/conduct
|
||||
|
||||
@@ -140,3 +140,58 @@
|
||||
display_name = "Cards Against The Galaxy (black deck)"
|
||||
path = /obj/item/weapon/deck/cah/black
|
||||
description = "The ever-popular Cards Against The Galaxy word game. Warning: may include traces of broken fourth wall. This is the black deck."
|
||||
|
||||
/datum/gear/wizoff
|
||||
display_name = "WizOff"
|
||||
path = /obj/item/weapon/deck/wizoff
|
||||
|
||||
/datum/gear/wizoffguide
|
||||
display_name = "WizOff Guide"
|
||||
path = /obj/item/weapon/book/manual/wizzoffguide
|
||||
description = "The guide to playing the ever popular card game: Wiz-Off!"
|
||||
|
||||
/datum/gear/coffeemug
|
||||
display_name = "coffee mugs"
|
||||
description = "A coffee mug in various designs."
|
||||
cost = 1
|
||||
path = /obj/item/weapon/reagent_containers/food/drinks/glass2/coffeemug
|
||||
|
||||
/datum/gear/coffeemug/New()
|
||||
..()
|
||||
var/list/coffeemugs = list()
|
||||
coffeemugs["plain coffee mug"] = /obj/item/weapon/reagent_containers/food/drinks/glass2/coffeemug
|
||||
coffeemugs["SCG coffee mug"] = /obj/item/weapon/reagent_containers/food/drinks/glass2/coffeemug/sol
|
||||
coffeemugs["Fleet coffee mug"] = /obj/item/weapon/reagent_containers/food/drinks/glass2/coffeemug/fleet
|
||||
coffeemugs["Five Arrows coffee mug"] = /obj/item/weapon/reagent_containers/food/drinks/glass2/coffeemug/fivearrows
|
||||
coffeemugs["Pearlshield coffee mug"] = /obj/item/weapon/reagent_containers/food/drinks/glass2/coffeemug/psc
|
||||
coffeemugs["Almach Association coffee mug"] = /obj/item/weapon/reagent_containers/food/drinks/glass2/coffeemug/alma
|
||||
coffeemugs["Almach Protectorate coffee mug"] = /obj/item/weapon/reagent_containers/food/drinks/glass2/coffeemug/almp
|
||||
coffeemugs["NT coffee mug"] = /obj/item/weapon/reagent_containers/food/drinks/glass2/coffeemug/nt
|
||||
coffeemugs["Wulf Aeronautics mug"] = /obj/item/weapon/reagent_containers/food/drinks/glass2/coffeemug/metal/wulf
|
||||
coffeemugs["Gilthari Exports coffee mug"] = /obj/item/weapon/reagent_containers/food/drinks/glass2/coffeemug/gilthari
|
||||
coffeemugs["Zeng-Hu coffee mug"] = /obj/item/weapon/reagent_containers/food/drinks/glass2/coffeemug/zeng
|
||||
coffeemugs["Ward-Takahashi coffee mug"] = /obj/item/weapon/reagent_containers/food/drinks/glass2/coffeemug/wt
|
||||
coffeemugs["Aether Atmospherics coffee mug"] = /obj/item/weapon/reagent_containers/food/drinks/glass2/coffeemug/aether
|
||||
coffeemugs["Bishop Cybernetics coffee mug"] = /obj/item/weapon/reagent_containers/food/drinks/glass2/coffeemug/bishop
|
||||
coffeemugs["Oculum Broadcast coffee mug"] = /obj/item/weapon/reagent_containers/food/drinks/glass2/coffeemug/oculum
|
||||
coffeemugs["#1 coffee mug"] = /obj/item/weapon/reagent_containers/food/drinks/glass2/coffeemug/one
|
||||
coffeemugs["#1 monkey coffee mug"] = /obj/item/weapon/reagent_containers/food/drinks/glass2/coffeemug/puni
|
||||
coffeemugs["heart coffee mug"] = /obj/item/weapon/reagent_containers/food/drinks/glass2/coffeemug/heart
|
||||
coffeemugs["pawn coffee mug"] = /obj/item/weapon/reagent_containers/food/drinks/glass2/coffeemug/pawn
|
||||
coffeemugs["diona coffee mug"] = /obj/item/weapon/reagent_containers/food/drinks/glass2/coffeemug/diona
|
||||
coffeemugs["british coffee mug"] = /obj/item/weapon/reagent_containers/food/drinks/glass2/coffeemug/britcup
|
||||
coffeemugs["flame coffee mug"] = /obj/item/weapon/reagent_containers/food/drinks/glass2/coffeemug/flame
|
||||
coffeemugs["blue coffee mug"] = /obj/item/weapon/reagent_containers/food/drinks/glass2/coffeemug/blue
|
||||
coffeemugs["black coffee mug"] = /obj/item/weapon/reagent_containers/food/drinks/glass2/coffeemug/black
|
||||
coffeemugs["green coffee mug"] = /obj/item/weapon/reagent_containers/food/drinks/glass2/coffeemug/green
|
||||
coffeemugs["dark green coffee mug"] = /obj/item/weapon/reagent_containers/food/drinks/glass2/coffeemug/green/dark
|
||||
coffeemugs["rainbow coffee mug"] = /obj/item/weapon/reagent_containers/food/drinks/glass2/coffeemug/rainbow
|
||||
coffeemugs["metal coffee mug"] = /obj/item/weapon/reagent_containers/food/drinks/glass2/coffeemug/metal
|
||||
coffeemugs["glass coffee mug"] = /obj/item/weapon/reagent_containers/food/drinks/glass2/coffeemug/glass
|
||||
coffeemugs["tall coffee mug"] = /obj/item/weapon/reagent_containers/food/drinks/glass2/coffeemug/tall
|
||||
coffeemugs["tall black coffee mug"] = /obj/item/weapon/reagent_containers/food/drinks/glass2/coffeemug/tall/black
|
||||
coffeemugs["tall metal coffee mug"] = /obj/item/weapon/reagent_containers/food/drinks/glass2/coffeemug/tall/metal
|
||||
coffeemugs["tall rainbow coffee mug"] = /obj/item/weapon/reagent_containers/food/drinks/glass2/coffeemug/tall/rainbow
|
||||
coffeemugs["Talon coffee mug"] = /obj/item/weapon/reagent_containers/food/drinks/glass2/coffeemug/talon
|
||||
gear_tweaks += new /datum/gear_tweak/path(coffeemugs)
|
||||
gear_tweaks += new /datum/gear_tweak/reagents(lunchables_drink_reagents())
|
||||
@@ -13,6 +13,18 @@
|
||||
display_name = "tourist, green"
|
||||
path = /obj/item/clothing/shoes/tourist_2
|
||||
|
||||
/datum/gear/shoes/sneakerspurple
|
||||
display_name = "sneakers, purple"
|
||||
path = /obj/item/clothing/shoes/sneakerspurple
|
||||
|
||||
/datum/gear/shoes/sneakersblue
|
||||
display_name = "sneakers, blue"
|
||||
path = /obj/item/clothing/shoes/sneakersblue
|
||||
|
||||
/datum/gear/shoes/sneakersred
|
||||
display_name = "sneakers, red"
|
||||
path = /obj/item/clothing/shoes/sneakersred
|
||||
|
||||
/datum/gear/shoes/jackboots
|
||||
display_name = "jackboots"
|
||||
path = /obj/item/clothing/shoes/boots/jackboots
|
||||
|
||||
@@ -197,6 +197,18 @@
|
||||
path = /obj/item/clothing/suit/cyberpunk
|
||||
cost = 2
|
||||
|
||||
/datum/gear/suit/puffycoat/blue
|
||||
display_name = "puffy coat, blue"
|
||||
path = /obj/item/clothing/suit/storage/puffyblue
|
||||
|
||||
/datum/gear/suit/puffycoat/red
|
||||
display_name = "puffy coat, red"
|
||||
path = /obj/item/clothing/suit/storage/puffyred
|
||||
|
||||
/datum/gear/suit/puffycoat/purple
|
||||
display_name = "puffy coat, purple"
|
||||
path = /obj/item/clothing/suit/storage/puffypurple
|
||||
|
||||
/datum/gear/suit/poncho
|
||||
display_name = "poncho selection"
|
||||
path = /obj/item/clothing/accessory/poncho
|
||||
@@ -226,7 +238,6 @@
|
||||
)
|
||||
gear_tweaks += new/datum/gear_tweak/path(ponchos)
|
||||
|
||||
|
||||
/datum/gear/suit/roles/cloak
|
||||
display_name = "cloak selection, departments"
|
||||
path = /obj/item/clothing/accessory/poncho/roles/cloak/cargo
|
||||
|
||||
@@ -119,3 +119,8 @@ Talon winter coat
|
||||
display_name = "knight, Field Medic"
|
||||
path = /obj/item/clothing/suit/armor/combat/crusader_explo/FM
|
||||
allowed_roles = list ("Field Medic")
|
||||
|
||||
//Atmos-coloured hazard vest
|
||||
display_name = "hazard vest, atmospherics"
|
||||
path = /obj/item/clothing/suit/storage/hazardvest/atmos
|
||||
allowed_roles = list("Chief Engineer","Atmospheric Technician", "Engineer")
|
||||
|
||||
@@ -699,6 +699,26 @@
|
||||
display_name = "heavy utility, galactic survey"
|
||||
path = /obj/item/clothing/under/gsa_work
|
||||
|
||||
/*
|
||||
* 80s
|
||||
*/
|
||||
|
||||
/datum/gear/uniform/tropical_outfit/black
|
||||
display_name = "tropical outfit, animal style"
|
||||
path = /obj/item/clothing/under/tropical
|
||||
|
||||
/datum/gear/uniform/tropical_outfit/green
|
||||
display_name = "tropical outfit, tropico-puke"
|
||||
path = /obj/item/clothing/under/tropical/green
|
||||
|
||||
/datum/gear/uniform/tropical_outfit/pink
|
||||
display_name = "tropical outfit, 3005 vintage"
|
||||
path = /obj/item/clothing/under/tropical/pink
|
||||
|
||||
/datum/gear/uniform/tropical_outfit/blue
|
||||
display_name = "tropical outfit, miami vice"
|
||||
path = /obj/item/clothing/under/tropical/blue
|
||||
|
||||
/*
|
||||
* Branded Uniforms
|
||||
*/
|
||||
|
||||
@@ -237,3 +237,42 @@ Talon jumpsuit
|
||||
"red and white" = /obj/item/clothing/under/summerdress/red
|
||||
)
|
||||
gear_tweaks += new/datum/gear_tweak/path(dresses)
|
||||
|
||||
// undersuits
|
||||
/datum/gear/uniform/undersuit
|
||||
display_name = "undersuit selection"
|
||||
path = /obj/item/clothing/under/undersuit/
|
||||
|
||||
/datum/gear/uniform/undersuit/New()
|
||||
..()
|
||||
var/list/suits = list()
|
||||
var/list/blacklisted_types = list(/obj/item/clothing/under/undersuit/sec,
|
||||
/obj/item/clothing/under/undersuit/sec/hos,
|
||||
/obj/item/clothing/under/undersuit/hazard,
|
||||
/obj/item/clothing/under/undersuit/command,
|
||||
/obj/item/clothing/under/undersuit/centcom)
|
||||
for(var/obj/item/clothing/under/undersuit/undersuit_type as anything in typesof(/obj/item/clothing/under/undersuit))
|
||||
if(undersuit_type in blacklisted_types)
|
||||
continue
|
||||
suits[initial(undersuit_type.name)] = undersuit_type
|
||||
gear_tweaks += new/datum/gear_tweak/path(sortAssoc(suits))
|
||||
|
||||
/datum/gear/uniform/undersuit_haz
|
||||
display_name = "undersuit, hazard (Engineering)"
|
||||
allowed_roles = list("Chief Engineer", "Atmospheric Technician", "Engineer")
|
||||
path = /obj/item/clothing/under/undersuit/hazard
|
||||
|
||||
/datum/gear/uniform/undersuit_sec
|
||||
display_name = "undersuit, security (Security)"
|
||||
allowed_roles = list("Head of Security", "Warden", "Detective", "Security Officer")
|
||||
path = /obj/item/clothing/under/undersuit/sec
|
||||
|
||||
/datum/gear/uniform/undersuit_hos
|
||||
display_name = "undersuit, security command (HoS)"
|
||||
allowed_roles = list("Head of Security")
|
||||
path = /obj/item/clothing/under/undersuit/sec/hos
|
||||
|
||||
/datum/gear/uniform/undersuit_com
|
||||
display_name = "undersuit, command (SM/HoP)"
|
||||
allowed_roles = list("Site Manager", "Head of Personnel")
|
||||
path = /obj/item/clothing/under/undersuit/command
|
||||
|
||||
@@ -74,10 +74,3 @@
|
||||
display_name = "bluespace bracelet"
|
||||
path = /obj/item/clothing/gloves/bluespace
|
||||
cost = 5
|
||||
|
||||
|
||||
/datum/gear/utility/satchel_strapless
|
||||
display_name = "satchel strapless"
|
||||
path = /obj/item/weapon/storage/backpack/satchel/strapless
|
||||
slot = slot_back
|
||||
cost = 1
|
||||
@@ -48,6 +48,7 @@ GLOBAL_DATUM(character_directory, /datum/character_directory)
|
||||
// These are the three vars we're trying to find
|
||||
// The approach differs based on the mob the client is controlling
|
||||
var/name = null
|
||||
var/species = null
|
||||
var/ooc_notes = null
|
||||
var/flavor_text = null
|
||||
var/tag = C.prefs.directory_tag || "Unset"
|
||||
@@ -61,12 +62,14 @@ GLOBAL_DATUM(character_directory, /datum/character_directory)
|
||||
if(!find_record("name", H.real_name, data_core.hidden_general))
|
||||
continue
|
||||
name = H.real_name
|
||||
species = "[H.custom_species ? H.custom_species : H.species.name]"
|
||||
ooc_notes = H.ooc_notes
|
||||
flavor_text = H.flavor_texts["general"]
|
||||
|
||||
if(isAI(C.mob))
|
||||
var/mob/living/silicon/ai/A = C.mob
|
||||
name = "[A.name] (Artificial Intelligence)"
|
||||
name = A.name
|
||||
species = "Artificial Intelligence"
|
||||
ooc_notes = A.ooc_notes
|
||||
flavor_text = null // No flavor text for AIs :c
|
||||
|
||||
@@ -74,7 +77,8 @@ GLOBAL_DATUM(character_directory, /datum/character_directory)
|
||||
var/mob/living/silicon/robot/R = C.mob
|
||||
if(R.scrambledcodes || (R.module && R.module.hide_on_manifest))
|
||||
continue
|
||||
name = "[R.name] ([R.modtype] [R.braintype])"
|
||||
name = R.name
|
||||
species = "[R.modtype] [R.braintype]"
|
||||
ooc_notes = R.ooc_notes
|
||||
flavor_text = R.flavor_text
|
||||
|
||||
@@ -85,6 +89,7 @@ GLOBAL_DATUM(character_directory, /datum/character_directory)
|
||||
|
||||
directory_mobs.Add(list(list(
|
||||
"name" = name,
|
||||
"species" = species,
|
||||
"ooc_notes" = ooc_notes,
|
||||
"tag" = tag,
|
||||
"erptag" = erptag,
|
||||
|
||||
@@ -86,11 +86,6 @@
|
||||
icon_state = "evening_gloves"
|
||||
addblends = "evening_gloves_a"
|
||||
|
||||
cold_protection = HANDS
|
||||
min_cold_protection_temperature = GLOVES_MIN_COLD_PROTECTION_TEMPERATURE
|
||||
heat_protection = HANDS
|
||||
max_heat_protection_temperature = GLOVES_MAX_HEAT_PROTECTION_TEMPERATURE
|
||||
|
||||
/obj/item/clothing/gloves/fingerless
|
||||
desc = "A pair of gloves that don't actually cover the fingers."
|
||||
name = "fingerless gloves"
|
||||
|
||||
@@ -47,11 +47,38 @@
|
||||
"worry about me",
|
||||
"gossip about me",
|
||||
"defame me",
|
||||
"disbelieve my existence",
|
||||
"conspire against me",
|
||||
"draw me as the soyjack",
|
||||
"put me in their tummies",
|
||||
"crunchatize me",
|
||||
"crunchatize me, cap'n!",
|
||||
"wreck me",
|
||||
"feed me",
|
||||
"beg to get in my stomach",
|
||||
"walk all over me",
|
||||
"drink me like a milkshake",
|
||||
"beg me to step on them",
|
||||
"call me Mommy",
|
||||
"call me Daddy",
|
||||
"step on me",
|
||||
"lay eggs down my throat",
|
||||
"dream about me",
|
||||
"choke me with their thighs",
|
||||
"steal my lunch money",
|
||||
"contact me about my spaceship's extended warranty",
|
||||
"envy me",
|
||||
"combo me",
|
||||
"want to kidnap me",
|
||||
"fold me in half",
|
||||
"think my spacetruck is hot",
|
||||
"hate my spacetruck",
|
||||
"are more into my spacetruck than me",
|
||||
"ask me for docking codes",
|
||||
"think of me while kneading dough",
|
||||
"gun me down in the streets of miami",
|
||||
"drop me off of inconveniently high places",
|
||||
"drop me into inconveniently tight places",
|
||||
"leave threatening messages on my voicemail",
|
||||
"write fanfiction about me",
|
||||
"attempt to approach me"
|
||||
@@ -71,6 +98,10 @@
|
||||
"pursue me to the ends of the earth, constantly thwarted by inconsequential setbacks, and when they catch up and I ask in an exasperated voice why they respond 'you owe me a dollar'",
|
||||
"call me just to 'chat' but actually mention they are moving and, obviously, since I'm the ONLY guy they know with a truck it would be great if I could help out, they said they'd buy me pizza but that doesn't really cover it",
|
||||
"shuffle uncomfortably as we continue to sit in near-total silence having exhausted all topics of conversation hours ago but neither of us having worked up the spirit to suggest that we part ways and go home",
|
||||
"shove me into their large gaping maw, covering me in drool as I descend into their warm depths, becoming covered by hot bubbling acids that dissolve my body while I play Animal Crossing New Leaf on my Nintendo 3DS",
|
||||
"promise me McDonalds but conveniently forget to pull into the drivethrough on the way home, leaving me burgerless",
|
||||
"leave me in the car all alone with my favorite music and a bottle of water in the summer",
|
||||
"create designs of particularly verbose hats describing extreme complexities and deep philosophical implications of their unusually specific feelings and often not particularly kind thoughts about me",
|
||||
"methodically place brick after agonising brick in the wall they are constructing to forever entomb me in the basement which they claimed contained a case of Amontillado wine"
|
||||
)
|
||||
|
||||
@@ -113,6 +144,9 @@
|
||||
desc = "A peaked cap with text reading '[slogan]'."
|
||||
name = "\improper '[slogan]' hat"
|
||||
|
||||
//pick a hue
|
||||
var/colourtype = pick("green", "red", "blue", "yellow", "purple", "orange", "grey")
|
||||
|
||||
//finally, take our hat size and pick the icon accordingly
|
||||
icon_state = "greensoft[hatsize]"
|
||||
item_state_slots = list(slot_r_hand_str = "greensoft", slot_l_hand_str = "greensoft", slot_head_str = "greensoft[hatsize]")
|
||||
icon_state = "[colourtype]soft[hatsize]"
|
||||
item_state_slots = list(slot_r_hand_str = "[colourtype]soft", slot_l_hand_str = "[colourtype]soft", slot_head_str = "[colourtype]soft[hatsize]")
|
||||
@@ -233,4 +233,26 @@
|
||||
icon_state = "rag"
|
||||
force = 0
|
||||
drop_sound = 'sound/items/drop/clothing.ogg'
|
||||
pickup_sound = 'sound/items/pickup/clothing.ogg'
|
||||
pickup_sound = 'sound/items/pickup/clothing.ogg'
|
||||
|
||||
/*
|
||||
* 80s
|
||||
*/
|
||||
|
||||
/obj/item/clothing/shoes/sneakerspurple
|
||||
name = "purple sneakers"
|
||||
desc = "A stylish, expensive pair of purple sneakers."
|
||||
icon_state = "sneakerspurple"
|
||||
item_state = "sneakerspurple"
|
||||
|
||||
/obj/item/clothing/shoes/sneakersblue
|
||||
name = "blue sneakers"
|
||||
desc = "A stylish, expensive pair of blue sneakers."
|
||||
icon_state = "sneakersblue"
|
||||
item_state = "sneakersblue"
|
||||
|
||||
/obj/item/clothing/shoes/sneakersred
|
||||
name = "red sneakers"
|
||||
desc = "A stylish, expensive pair of red sneakers."
|
||||
icon_state = "sneakersred"
|
||||
item_state = "sneakersred"
|
||||
@@ -173,7 +173,7 @@
|
||||
blood_overlay_type = "armor"
|
||||
allowed = list (/obj/item/device/analyzer, /obj/item/device/flashlight, /obj/item/device/multitool, /obj/item/device/pipe_painter, /obj/item/device/radio, /obj/item/device/t_scanner,
|
||||
/obj/item/weapon/tool/crowbar, /obj/item/weapon/tool/screwdriver, /obj/item/weapon/weldingtool, /obj/item/weapon/tool/wirecutters, /obj/item/weapon/tool/wrench, /obj/item/weapon/tank/emergency/oxygen,
|
||||
/obj/item/clothing/mask/gas, /obj/item/taperoll/engineering)
|
||||
/obj/item/clothing/mask/gas, /obj/item/taperoll/engineering, /obj/item/taperoll/atmos, /obj/item/device/analyzer, /obj/item/weapon/extinguisher/mini) //VOREStation edit. Few more tools that can be put on vests
|
||||
body_parts_covered = UPPER_TORSO
|
||||
|
||||
/obj/item/clothing/suit/storage/hazardvest/blue
|
||||
@@ -259,4 +259,4 @@
|
||||
|
||||
/obj/item/clothing/suit/suspenders/grey
|
||||
name = "grey suspenders"
|
||||
icon_state = "suspenders_grey"
|
||||
icon_state = "suspenders_grey"
|
||||
|
||||
@@ -15,4 +15,17 @@
|
||||
icon = 'icons/inventory/suit/item_vr.dmi'
|
||||
default_worn_icon = 'icons/inventory/suit/mob_vr.dmi'
|
||||
icon_state = "qm_coat"
|
||||
|
||||
|
||||
//Atmos-coloured hazard vest
|
||||
/obj/item/clothing/suit/storage/hazardvest/atmos
|
||||
name = "light blue hazard vest"
|
||||
desc = "A high-visibility vest used in work zones. This one is in the colors of atmospherics!"
|
||||
|
||||
icon = 'icons/inventory/suit/item_vr.dmi'
|
||||
default_worn_icon = 'icons/inventory/suit/mob_vr.dmi'
|
||||
icon_state = "hazard_a"
|
||||
item_state = "hazard_a"
|
||||
item_icons = list(
|
||||
slot_l_hand_str = 'icons/mob/items/lefthand_vr.dmi',
|
||||
slot_r_hand_str = 'icons/mob/items/righthand_vr.dmi',
|
||||
)
|
||||
|
||||
@@ -42,6 +42,46 @@
|
||||
desc = "Repilca rmor commonly worn by Dominion Of Mu'tu'bi soldiers from the hit series Spacer Trail. Modified for Laser Tag (Red Team)."
|
||||
icon_state = "redtag2"
|
||||
|
||||
/*
|
||||
* 80s
|
||||
*/
|
||||
|
||||
/obj/item/clothing/suit/storage/puffyblue
|
||||
name = "blue puffy coat"
|
||||
desc = "A stylish, shiny, very blue puffer coat."
|
||||
icon_state = "puffycoatblue"
|
||||
item_state = "puffycoatblue"
|
||||
body_parts_covered = UPPER_TORSO|LOWER_TORSO|ARMS
|
||||
flags_inv = HIDEHOLSTER
|
||||
cold_protection = UPPER_TORSO|LOWER_TORSO|ARMS|LEGS
|
||||
min_cold_protection_temperature = SPACE_SUIT_MIN_COLD_PROTECTION_TEMPERATURE
|
||||
siemens_coefficient = 0.7
|
||||
item_state_slots = list(slot_r_hand_str = "blue_labcoat", slot_l_hand_str = "blue_labcoat")
|
||||
|
||||
/obj/item/clothing/suit/storage/puffypurple
|
||||
name = "purple puffy coat"
|
||||
desc = "A stylish, shiny, very purple puffer coat."
|
||||
icon_state = "puffycoatpurple"
|
||||
item_state = "puffycoatpurple"
|
||||
body_parts_covered = UPPER_TORSO|LOWER_TORSO|ARMS
|
||||
flags_inv = HIDEHOLSTER
|
||||
cold_protection = UPPER_TORSO|LOWER_TORSO|ARMS|LEGS
|
||||
min_cold_protection_temperature = SPACE_SUIT_MIN_COLD_PROTECTION_TEMPERATURE
|
||||
siemens_coefficient = 0.7
|
||||
item_state_slots = list(slot_r_hand_str = "purple_labcoat", slot_l_hand_str = "purple_labcoat")
|
||||
|
||||
/obj/item/clothing/suit/storage/puffyred
|
||||
name = "crimson puffy coat"
|
||||
desc = "A stylish, shiny, very crimson puffer coat."
|
||||
icon_state = "puffycoatred"
|
||||
item_state = "puffycoatred"
|
||||
body_parts_covered = UPPER_TORSO|LOWER_TORSO|ARMS
|
||||
flags_inv = HIDEHOLSTER
|
||||
cold_protection = UPPER_TORSO|LOWER_TORSO|ARMS|LEGS
|
||||
min_cold_protection_temperature = SPACE_SUIT_MIN_COLD_PROTECTION_TEMPERATURE
|
||||
siemens_coefficient = 0.7
|
||||
item_state_slots = list(slot_r_hand_str = "red_labcoat", slot_l_hand_str = "red_labcoat")
|
||||
|
||||
/*
|
||||
* Costume
|
||||
*/
|
||||
|
||||
@@ -503,3 +503,44 @@
|
||||
/obj/item/clothing/accessory/gaiter/green
|
||||
name = "green neck gaiter"
|
||||
icon_state = "gaiter_green"
|
||||
|
||||
/*
|
||||
* Pride Pins
|
||||
*/
|
||||
/obj/item/clothing/accessory/pride
|
||||
name = "pride pin"
|
||||
desc = "A pin displaying pride in one's identity."
|
||||
icon_state = "pride"
|
||||
slot = ACCESSORY_SLOT_MEDAL
|
||||
|
||||
/obj/item/clothing/accessory/pride/bi
|
||||
name = "bisexual pride pin"
|
||||
icon_state = "pride_bi"
|
||||
|
||||
/obj/item/clothing/accessory/pride/trans
|
||||
name = "transgender pride pin"
|
||||
icon_state = "pride_trans"
|
||||
|
||||
/obj/item/clothing/accessory/pride/ace
|
||||
name = "asexual pride pin"
|
||||
icon_state = "pride_ace"
|
||||
|
||||
/obj/item/clothing/accessory/pride/enby
|
||||
name = "nonbinary pride pin"
|
||||
icon_state = "pride_enby"
|
||||
|
||||
/obj/item/clothing/accessory/pride/pan
|
||||
name = "pansexual pride pin"
|
||||
icon_state = "pride_pan"
|
||||
|
||||
/obj/item/clothing/accessory/pride/lesbian
|
||||
name = "lesbian pride pin"
|
||||
icon_state = "pride_lesbian"
|
||||
|
||||
/obj/item/clothing/accessory/pride/intersex
|
||||
name = "intersex pride pin"
|
||||
icon_state = "pride_intersex"
|
||||
|
||||
/obj/item/clothing/accessory/pride/vore
|
||||
name = "vore pride pin"
|
||||
icon_state = "pride_vore"
|
||||
@@ -103,6 +103,44 @@
|
||||
prob(2);/obj/item/clothing/accessory/hawaiian/yellow
|
||||
)
|
||||
|
||||
/*
|
||||
* 80s
|
||||
*/
|
||||
|
||||
/obj/item/clothing/accessory/tropical
|
||||
name = "black tropical shirt"
|
||||
desc = "A classic themed neosilk tropical shirt. This one makes you feel like an animal."
|
||||
icon_state = "animalstyle"
|
||||
armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 0)
|
||||
slot_flags = SLOT_OCLOTHING | SLOT_TIE
|
||||
body_parts_covered = UPPER_TORSO|LOWER_TORSO
|
||||
siemens_coefficient = 0.9
|
||||
w_class = ITEMSIZE_NORMAL
|
||||
slot = ACCESSORY_SLOT_OVER
|
||||
|
||||
/obj/item/clothing/accessory/tropical/green
|
||||
name = "puke-green tropical shirt"
|
||||
desc = "A classic themed neosilk tropical shirt. This one makes you look like puke."
|
||||
icon_state = "tropicopuke"
|
||||
|
||||
/obj/item/clothing/accessory/tropical/pink
|
||||
name = "pink tropical shirt"
|
||||
desc = "A classic themed neosilk tropical shirt. This one makes you feel nostalgic."
|
||||
icon_state = "3005vintage"
|
||||
|
||||
/obj/item/clothing/accessory/tropical/blue
|
||||
name = "blue tropical shirt"
|
||||
desc = "A classic themed neosilk tropical shirt. This one makes you feel out of touch."
|
||||
icon_state = "miamivice"
|
||||
|
||||
/obj/item/clothing/accessory/tropical_random/New()
|
||||
return pick(
|
||||
prob(2);/obj/item/clothing/accessory/tropical,
|
||||
prob(2);/obj/item/clothing/accessory/tropical/green,
|
||||
prob(2);/obj/item/clothing/accessory/tropical/pink,
|
||||
prob(2);/obj/item/clothing/accessory/tropical/blue
|
||||
)
|
||||
|
||||
/*
|
||||
* Chaps
|
||||
*/
|
||||
|
||||
@@ -1270,6 +1270,38 @@
|
||||
icon_state = "curator"
|
||||
worn_state = "curator"
|
||||
|
||||
/*
|
||||
* 80s
|
||||
*/
|
||||
|
||||
/obj/item/clothing/under/tropical
|
||||
name = "black tropical oufit"
|
||||
desc = "A classic themed outfit. This one makes you feel like an animal."
|
||||
icon_state = "animalstyle"
|
||||
worn_state = "animalstyle"
|
||||
starting_accessories = list(/obj/item/clothing/accessory/tropical)
|
||||
|
||||
/obj/item/clothing/under/tropical/green
|
||||
name = "puke-green tropical oufit"
|
||||
desc = "A classic themed outfit. This one makes you look like puke."
|
||||
icon_state = "tropicopuke"
|
||||
worn_state = "tropicopuke"
|
||||
starting_accessories = list(/obj/item/clothing/accessory/tropical/green)
|
||||
|
||||
/obj/item/clothing/under/tropical/pink
|
||||
name = "pink tropical oufit"
|
||||
desc = "A classic themed outfit. This one makes you feel nostalgic."
|
||||
icon_state = "3005vintage"
|
||||
worn_state = "3005vintage"
|
||||
starting_accessories = list(/obj/item/clothing/accessory/tropical/pink)
|
||||
|
||||
/obj/item/clothing/under/tropical/blue
|
||||
name = "pink tropical oufit"
|
||||
desc = "A classic themed outfit. This one makes you feel out of touch."
|
||||
icon_state = "miamivice"
|
||||
worn_state = "miamivice"
|
||||
starting_accessories = list(/obj/item/clothing/accessory/tropical/blue)
|
||||
|
||||
/*
|
||||
* Modern
|
||||
*/
|
||||
|
||||
@@ -308,4 +308,72 @@
|
||||
item_state = "lewdcap"
|
||||
rolled_sleeves = -1
|
||||
rolled_down = -1
|
||||
body_parts_covered = UPPER_TORSO // frankly this thing's a fucking embarassment
|
||||
body_parts_covered = UPPER_TORSO // frankly this thing's a fucking embarassment
|
||||
|
||||
/obj/item/clothing/under/undersuit // undersuits! intended for wearing under hardsuits or for being too lazy to not wear anything other than it
|
||||
name = "undersuit"
|
||||
desc = "A nondescript undersuit, intended for wearing under a voidsuit or other EVA equipment. Breathable, yet sleek."
|
||||
icon = 'icons/inventory/uniform/item_vr.dmi'
|
||||
default_worn_icon = 'icons/inventory/uniform/mob_vr.dmi'
|
||||
rolled_down_icon = 'icons/inventory/uniform/mob_vr_rolled_down.dmi'
|
||||
icon_state = "bodysuit"
|
||||
item_state = "bodysuit"
|
||||
rolled_sleeves = -1
|
||||
rolled_down_icon_override = FALSE
|
||||
|
||||
/obj/item/clothing/under/undersuit/eva
|
||||
name = "EVA undersuit"
|
||||
desc = "A nondescript undersuit, intended for wearing under a voidsuit or other EVA equipment. This one is specifically made for EVA usage, but differs little from the standard."
|
||||
icon_state = "bodysuit_eva"
|
||||
item_state = "bodysuit_eva"
|
||||
|
||||
/obj/item/clothing/under/undersuit/command
|
||||
name = "command undersuit"
|
||||
desc = "A fancy undersuit, intended for wearing under a voidsuit or other EVA equipment. This one is specifically made for those in Command, and comes with a swanky gold trim and navy blue inlay."
|
||||
icon_state = "bodysuit_com"
|
||||
item_state = "bodysuit_com"
|
||||
|
||||
/obj/item/clothing/under/undersuit/sec
|
||||
name = "security undersuit"
|
||||
desc = "A reinforced undersuit, intended for wearing under a voidsuit or other EVA equipment. This one is specifically made for those in Security, and has slight protective capabilities against simple melee attacks."
|
||||
armor = list(melee = 10, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 0)
|
||||
siemens_coefficient = 0.9
|
||||
icon_state = "bodysuit_sec"
|
||||
item_state = "bodysuit_sec"
|
||||
|
||||
/obj/item/clothing/under/undersuit/sec/hos
|
||||
name = "security command undersuit"
|
||||
desc = "A reinforced undersuit, intended for wearing under a voidsuit or other EVA equipment. This one is specifically made for the Head of Security or equivalent, and has slight protective capabilities against simple melee attacks."
|
||||
icon_state = "bodysuit_seccom"
|
||||
item_state = "bodysuit_seccom"
|
||||
|
||||
/obj/item/clothing/under/undersuit/hazard
|
||||
name = "hazard undersuit"
|
||||
desc = "An undersuit, intended for wearing under a voidsuit or other EVA equipment. This one is specifically made for Engineering crew, and comes with slight radiation absorption capabilities. Not a lot, but it's there."
|
||||
armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 10)
|
||||
icon_state = "bodysuit_haz"
|
||||
item_state = "bodysuit_haz"
|
||||
|
||||
/obj/item/clothing/under/undersuit/mining
|
||||
name = "mining undersuit"
|
||||
desc = "An undersuit, intended for wearing under a voidsuit or other EVA equipment. This one is specifically made for Mining crew, and comes with an interestingly colored trim."
|
||||
icon_state = "bodysuit_min"
|
||||
item_state = "bodysuit_min"
|
||||
|
||||
/obj/item/clothing/under/undersuit/emt
|
||||
name = "medical technician undersuit"
|
||||
desc = "An undersuit, intended for wearing under a voidsuit or other EVA equipment. This one is specifically made for Medical response crew, and comes with a distinctive coloring scheme."
|
||||
icon_state = "bodysuit_emt"
|
||||
item_state = "bodysuit_emt"
|
||||
|
||||
/obj/item/clothing/under/undersuit/explo
|
||||
name = "exploration undersuit"
|
||||
desc = "An undersuit, intended for wearing under a voidsuit or other EVA equipment. This one is specifically made for Exploration crew, for hazardous environments."
|
||||
icon_state = "bodysuit_exp"
|
||||
item_state = "bodysuit_exp"
|
||||
|
||||
/obj/item/clothing/under/undersuit/centcom
|
||||
name = "Central Command undersuit"
|
||||
desc = "A very descript undersuit, intended for wearing under a voidsuit or other EVA equipment. This one is specifically made for NanoTrasen Central Command officers, and comes with a swanky gold trim and other fancy markings."
|
||||
icon_state = "bodysuit_cent"
|
||||
item_state = "bodysuit_cent"
|
||||
@@ -615,7 +615,7 @@
|
||||
|
||||
// Cookies and Candies //
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/snacks/cookiesnack
|
||||
/obj/item/weapon/reagent_containers/food/snacks/cookie
|
||||
price_tag = 1
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/snacks/chocolatebar
|
||||
|
||||
@@ -1219,7 +1219,10 @@
|
||||
/obj/item/clothing/mask/bandana/red = 5,
|
||||
/obj/item/clothing/suit/storage/hooded/wintercoat/security = 5,
|
||||
/obj/item/clothing/accessory/armband = 5,
|
||||
/obj/item/clothing/accessory/holster/waist = 5
|
||||
/obj/item/clothing/accessory/holster/armpit = 2, //VOREStation edit - gives some variety of available holsters for those who forgot to bring their own
|
||||
/obj/item/clothing/accessory/holster/waist = 2, //VOREStation edit - But also reduces the number per type, so there's 8 overall rather than like, 20
|
||||
/obj/item/clothing/accessory/holster/hip = 2, //VOREStation edit
|
||||
/obj/item/clothing/accessory/holster/leg = 2 //VOREStation edit
|
||||
)
|
||||
req_log_access = access_hop
|
||||
has_logs = 1
|
||||
@@ -1624,4 +1627,4 @@
|
||||
/obj/item/clothing/under/clown/rainbow = 1
|
||||
)
|
||||
req_log_access = access_hop
|
||||
has_logs = 1
|
||||
has_logs = 1
|
||||
|
||||
@@ -218,7 +218,7 @@
|
||||
/obj/item/weapon/reagent_containers/food/snacks/sliceable/orangecake = 10,
|
||||
/obj/item/weapon/reagent_containers/food/snacks/sliceable/peanutcake = 10,
|
||||
/obj/item/weapon/reagent_containers/food/snacks/icecreamsandwich = 15,
|
||||
/obj/item/weapon/reagent_containers/food/snacks/cookiesnack = 15,
|
||||
/obj/item/weapon/reagent_containers/food/snacks/cookie = 15,
|
||||
/obj/item/weapon/reagent_containers/food/snacks/sliceable/brownies = 10,
|
||||
/obj/item/weapon/reagent_containers/food/snacks/chocolatebar = 10,
|
||||
/obj/item/weapon/reagent_containers/food/snacks/chocolatepiece = 20
|
||||
@@ -415,7 +415,10 @@
|
||||
/obj/item/clothing/shoes/boots/workboots/toeless = 5,
|
||||
/obj/item/clothing/shoes/boots/winter = 5,
|
||||
/obj/item/clothing/shoes/boots/workboots = 5,
|
||||
/obj/item/clothing/shoes/footwraps = 5)
|
||||
/obj/item/clothing/shoes/footwraps = 5,
|
||||
/obj/item/clothing/shoes/sneakerspurple = 5,
|
||||
/obj/item/clothing/shoes/sneakersblue = 5,
|
||||
/obj/item/clothing/shoes/sneakersred = 5)
|
||||
prices = list(/obj/item/clothing/gloves/evening = 50,
|
||||
/obj/item/clothing/gloves/fingerless = 50,
|
||||
/obj/item/clothing/gloves/black = 50,
|
||||
@@ -473,7 +476,10 @@
|
||||
/obj/item/clothing/shoes/boots/workboots/toeless = 50,
|
||||
/obj/item/clothing/shoes/boots/winter = 50,
|
||||
/obj/item/clothing/shoes/boots/workboots = 50,
|
||||
/obj/item/clothing/shoes/footwraps = 50)
|
||||
/obj/item/clothing/shoes/footwraps = 50,
|
||||
/obj/item/clothing/shoes/sneakerspurple = 50,
|
||||
/obj/item/clothing/shoes/sneakersblue = 50,
|
||||
/obj/item/clothing/shoes/sneakersred = 50)
|
||||
premium = list(/obj/item/clothing/gloves/rainbow = 1,
|
||||
/obj/item/clothing/shoes/rainbow = 1,)
|
||||
contraband = list(/obj/item/clothing/shoes/syndigaloshes = 1,
|
||||
@@ -539,6 +545,10 @@
|
||||
/obj/item/clothing/accessory/hawaiian/pink = 5,
|
||||
/obj/item/clothing/accessory/hawaiian/red = 5,
|
||||
/obj/item/clothing/accessory/hawaiian/yellow = 5,
|
||||
/obj/item/clothing/accessory/tropical = 5,
|
||||
/obj/item/clothing/accessory/tropical/green = 5,
|
||||
/obj/item/clothing/accessory/tropical/pink = 5,
|
||||
/obj/item/clothing/accessory/tropical/blue = 5,
|
||||
/obj/item/clothing/accessory/locket = 5,
|
||||
/obj/item/weapon/storage/backpack/purse = 1,
|
||||
/obj/item/clothing/accessory/sash = 5,
|
||||
@@ -652,6 +662,10 @@
|
||||
/obj/item/clothing/accessory/hawaiian/pink = 50,
|
||||
/obj/item/clothing/accessory/hawaiian/red = 50,
|
||||
/obj/item/clothing/accessory/hawaiian/yellow = 50,
|
||||
/obj/item/clothing/accessory/tropical = 50,
|
||||
/obj/item/clothing/accessory/tropical/green = 50,
|
||||
/obj/item/clothing/accessory/tropical/pink = 50,
|
||||
/obj/item/clothing/accessory/tropical/blue = 50,
|
||||
/obj/item/clothing/accessory/locket = 50,
|
||||
/obj/item/weapon/storage/backpack/purse = 50,
|
||||
/obj/item/clothing/accessory/sash = 50,
|
||||
@@ -918,7 +932,11 @@
|
||||
/obj/item/clothing/under/wedding/bride_white = 5,
|
||||
/obj/item/weapon/storage/backpack/ = 5,
|
||||
/obj/item/weapon/storage/backpack/messenger = 5,
|
||||
/obj/item/weapon/storage/backpack/satchel = 5)
|
||||
/obj/item/weapon/storage/backpack/satchel = 5,
|
||||
/obj/item/clothing/under/tropical = 5,
|
||||
/obj/item/clothing/under/tropical/green = 5,
|
||||
/obj/item/clothing/under/tropical/pink = 5,
|
||||
/obj/item/clothing/under/tropical/blue = 5)
|
||||
prices = list(/obj/item/clothing/under/bathrobe = 50,
|
||||
/obj/item/clothing/under/dress/black_corset = 50,
|
||||
/obj/item/clothing/under/blazer = 50,
|
||||
@@ -1089,7 +1107,11 @@
|
||||
/obj/item/clothing/under/wedding/bride_white = 50,
|
||||
/obj/item/weapon/storage/backpack/ = 50,
|
||||
/obj/item/weapon/storage/backpack/messenger = 50,
|
||||
/obj/item/weapon/storage/backpack/satchel = 50)
|
||||
/obj/item/weapon/storage/backpack/satchel = 50,
|
||||
/obj/item/clothing/under/tropical = 50,
|
||||
/obj/item/clothing/under/tropical/green = 50,
|
||||
/obj/item/clothing/under/tropical/pink = 50,
|
||||
/obj/item/clothing/under/tropical/blue = 50)
|
||||
premium = list(/obj/item/clothing/under/color/rainbow = 1)
|
||||
contraband = list(/obj/item/clothing/under/rank/clown = 1)
|
||||
|
||||
@@ -1217,7 +1239,10 @@
|
||||
/obj/item/clothing/suit/varsity/brown = 5,
|
||||
/obj/item/clothing/suit/storage/hooded/wintercoat = 5,
|
||||
/obj/item/clothing/suit/storage/hooded/wintercoat/aformal = 5,
|
||||
/obj/item/clothing/suit/storage/teshari/cloak/standard/white_grey = 5)
|
||||
/obj/item/clothing/suit/storage/teshari/cloak/standard/white_grey = 5,
|
||||
/obj/item/clothing/suit/storage/puffyred = 5,
|
||||
/obj/item/clothing/suit/storage/puffypurple = 5,
|
||||
/obj/item/clothing/suit/storage/puffyblue = 5)
|
||||
prices = list(/obj/item/clothing/suit/storage/apron = 100,
|
||||
/obj/item/clothing/suit/storage/flannel/aqua = 100,
|
||||
/obj/item/clothing/suit/storage/toggle/bomber = 100,
|
||||
@@ -1306,7 +1331,10 @@
|
||||
/obj/item/clothing/suit/varsity/brown = 100,
|
||||
/obj/item/clothing/suit/storage/hooded/wintercoat = 100,
|
||||
/obj/item/clothing/suit/storage/hooded/wintercoat/aformal = 100,
|
||||
/obj/item/clothing/suit/storage/teshari/cloak/standard/white_grey = 100)
|
||||
/obj/item/clothing/suit/storage/teshari/cloak/standard/white_grey = 100,
|
||||
/obj/item/clothing/suit/storage/puffyred = 100,
|
||||
/obj/item/clothing/suit/storage/puffypurple = 100,
|
||||
/obj/item/clothing/suit/storage/puffyblue = 100)
|
||||
premium = list(/obj/item/clothing/suit/imperium_monk = 3,
|
||||
/obj/item/clothing/suit/storage/hooded/wintercoat/cosmic = 1)
|
||||
contraband = list(/obj/item/toy/katana = 1)
|
||||
@@ -2516,6 +2544,7 @@
|
||||
/obj/item/weapon/reagent_containers/food/snacks/clownstears = 10,
|
||||
/obj/item/weapon/reagent_containers/food/snacks/coldchili = 10,
|
||||
/obj/item/weapon/reagent_containers/food/snacks/cookiesnack = 10,
|
||||
/obj/item/weapon/reagent_containers/food/snacks/cookie = 10,
|
||||
/obj/item/weapon/reagent_containers/food/snacks/corn_dog = 10,
|
||||
/obj/item/weapon/reagent_containers/food/snacks/cosmicbrowniesslice = 10,
|
||||
/obj/item/weapon/reagent_containers/food/snacks/cosmicbrowniesslice/filled = 10,
|
||||
@@ -3000,6 +3029,7 @@
|
||||
/obj/item/weapon/reagent_containers/food/snacks/clownstears = 10,
|
||||
/obj/item/weapon/reagent_containers/food/snacks/coldchili = 10,
|
||||
/obj/item/weapon/reagent_containers/food/snacks/cookiesnack = 10,
|
||||
/obj/item/weapon/reagent_containers/food/snacks/cookie = 10,
|
||||
/obj/item/weapon/reagent_containers/food/snacks/corn_dog = 10,
|
||||
/obj/item/weapon/reagent_containers/food/snacks/cosmicbrowniesslice = 10,
|
||||
/obj/item/weapon/reagent_containers/food/snacks/cosmicbrowniesslice/filled = 10,
|
||||
|
||||
@@ -27,6 +27,11 @@
|
||||
if(world.time < next_emote)
|
||||
to_chat(src, SPAN_WARNING("You cannot use another emote yet."))
|
||||
return
|
||||
//VOREStation Addition Start
|
||||
if(forced_psay)
|
||||
pme(message)
|
||||
return
|
||||
//VOREStation Addition End
|
||||
|
||||
if(act == "help")
|
||||
if(world.time >= next_emote_refresh)
|
||||
|
||||
@@ -9,9 +9,10 @@
|
||||
var/one_shot = 0 // If true, then the event will not be re-added to the list of available events
|
||||
var/add_to_queue= 1 // If true, add back to the queue of events upon finishing.
|
||||
var/list/role_weights = list()
|
||||
var/list/min_job_count = list()
|
||||
var/datum/event/event_type
|
||||
|
||||
/datum/event_meta/New(var/event_severity, var/event_name, var/datum/event/type, var/event_weight, var/list/job_weights, var/is_one_shot = 0, var/min_event_weight = 0, var/max_event_weight = 0, var/add_to_queue = 1)
|
||||
/datum/event_meta/New(var/event_severity, var/event_name, var/datum/event/type, var/event_weight, var/list/job_weights, var/is_one_shot = 0, var/min_event_weight = 0, var/max_event_weight = 0, var/add_to_queue = 1, var/list/min_jobs)
|
||||
name = event_name
|
||||
severity = event_severity
|
||||
event_type = type
|
||||
@@ -22,6 +23,9 @@
|
||||
src.add_to_queue = add_to_queue
|
||||
if(job_weights)
|
||||
role_weights = job_weights
|
||||
if(min_jobs)
|
||||
min_job_count = min_jobs
|
||||
|
||||
|
||||
/datum/event_meta/proc/get_weight(var/list/active_with_role)
|
||||
if(!enabled)
|
||||
@@ -40,6 +44,16 @@
|
||||
|
||||
return total_weight
|
||||
|
||||
/datum/event_meta/proc/minimum_active(var/list/active_with_role)
|
||||
var/can_fire = TRUE
|
||||
for(var/role in min_job_count)
|
||||
if(role in active_with_role)
|
||||
if(active_with_role[role] < min_job_count[role])
|
||||
can_fire = FALSE
|
||||
break
|
||||
|
||||
return can_fire
|
||||
|
||||
/datum/event_meta/no_overmap/get_weight() //these events have overmap equivalents, and shouldn't fire randomly if overmap is used
|
||||
return global.using_map.use_overmap ? 0 : ..()
|
||||
|
||||
|
||||
@@ -78,6 +78,9 @@ var/global/list/severity_to_string = list(EVENT_LEVEL_MUNDANE = "Mundane", EVENT
|
||||
if(!EM.enabled)
|
||||
return 0
|
||||
|
||||
if(!(EM.minimum_active(active_with_role)))
|
||||
return 0
|
||||
|
||||
var/weight = EM.get_weight(active_with_role)
|
||||
var/last_time = last_event_time[EM]
|
||||
if(last_time)
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
#define ASSIGNMENT_AI "AI"
|
||||
#define ASSIGNMENT_CYBORG "Cyborg"
|
||||
#define ASSIGNMENT_ENGINEER "Engineer"
|
||||
#define ASSIGNMENT_GARDENER "Gardener"
|
||||
#define ASSIGNMENT_GARDENER "Botanist"
|
||||
#define ASSIGNMENT_JANITOR "Janitor"
|
||||
#define ASSIGNMENT_MEDICAL "Medical"
|
||||
#define ASSIGNMENT_SCIENTIST "Scientist"
|
||||
@@ -30,13 +30,13 @@
|
||||
// Severity level, event name, even type, base weight, role weights, one shot, min weight, max weight. Last two only used if set and non-zero
|
||||
new /datum/event_meta(EVENT_LEVEL_MUNDANE, "Nothing", /datum/event/nothing, 400),
|
||||
// Bluescreens APCs, but they still work
|
||||
new /datum/event_meta(EVENT_LEVEL_MUNDANE, "APC Damage", /datum/event/apc_damage, 20, list(ASSIGNMENT_ENGINEER = 20)),
|
||||
new /datum/event_meta(EVENT_LEVEL_MUNDANE, "Brand Intelligence",/datum/event/brand_intelligence, 0, list(ASSIGNMENT_ENGINEER = 10), 1),
|
||||
new /datum/event_meta(EVENT_LEVEL_MUNDANE, "Camera Damage", /datum/event/camera_damage, 20, list(ASSIGNMENT_ENGINEER = 20)),
|
||||
new /datum/event_meta(EVENT_LEVEL_MUNDANE, "Canister Leak", /datum/event/canister_leak, 10, list(ASSIGNMENT_ENGINEER = 20)),
|
||||
new /datum/event_meta(EVENT_LEVEL_MUNDANE, "Space Dust", /datum/event/dust, 0, list(ASSIGNMENT_ENGINEER = 20), 0, 0, 50),
|
||||
new /datum/event_meta(EVENT_LEVEL_MUNDANE, "APC Damage", /datum/event/apc_damage, 20, list(ASSIGNMENT_ENGINEER = 20), min_jobs = list(ASSIGNMENT_ENGINEER = 1)),
|
||||
new /datum/event_meta(EVENT_LEVEL_MUNDANE, "Brand Intelligence",/datum/event/brand_intelligence, 0, list(ASSIGNMENT_ENGINEER = 10), 1, min_jobs = list(ASSIGNMENT_ENGINEER = 1)),
|
||||
new /datum/event_meta(EVENT_LEVEL_MUNDANE, "Camera Damage", /datum/event/camera_damage, 20, list(ASSIGNMENT_ENGINEER = 20), min_jobs = list(ASSIGNMENT_ENGINEER = 1)),
|
||||
new /datum/event_meta(EVENT_LEVEL_MUNDANE, "Canister Leak", /datum/event/canister_leak, 10, list(ASSIGNMENT_ENGINEER = 20), min_jobs = list(ASSIGNMENT_ENGINEER = 1)),
|
||||
new /datum/event_meta(EVENT_LEVEL_MUNDANE, "Space Dust", /datum/event/dust, 0, list(ASSIGNMENT_ENGINEER = 20), 0, 0, 50, min_jobs = list(ASSIGNMENT_ENGINEER = 2)),
|
||||
new /datum/event_meta(EVENT_LEVEL_MUNDANE, "Economic News", /datum/event/economic_event, 300),
|
||||
new /datum/event_meta(EVENT_LEVEL_MUNDANE, "Lost Carp", /datum/event/carp_migration, 0, list(ASSIGNMENT_SECURITY = 10), 1),
|
||||
new /datum/event_meta(EVENT_LEVEL_MUNDANE, "Lost Carp", /datum/event/carp_migration, 0, list(ASSIGNMENT_SECURITY = 10), 1, min_jobs = list(ASSIGNMENT_SECURITY = 3)),
|
||||
new /datum/event_meta(EVENT_LEVEL_MUNDANE, "Money Hacker", /datum/event/money_hacker, 0, list(ASSIGNMENT_ANY = 4), 1, 10, 25),
|
||||
new /datum/event_meta(EVENT_LEVEL_MUNDANE, "Money Lotto", /datum/event/money_lotto, 0, list(ASSIGNMENT_ANY = 1), 1, 5, 15),
|
||||
//new /datum/event_meta(EVENT_LEVEL_MUNDANE, "Mundane News", /datum/event/mundane_news, 300),
|
||||
@@ -47,7 +47,7 @@
|
||||
// Spawns mice, lizards, or dud spiderlings
|
||||
new /datum/event_meta(EVENT_LEVEL_MUNDANE, "Vermin Infestation",/datum/event/infestation, 50, list(ASSIGNMENT_JANITOR = 25), 1),
|
||||
// Rot only weakens walls, not destroy them
|
||||
new /datum/event_meta(EVENT_LEVEL_MUNDANE, "Wallrot", /datum/event/wallrot, 0, list(ASSIGNMENT_ENGINEER = 30), 1),
|
||||
new /datum/event_meta(EVENT_LEVEL_MUNDANE, "Wallrot", /datum/event/wallrot, 0, list(ASSIGNMENT_ENGINEER = 30), 1, min_jobs = list(ASSIGNMENT_ENGINEER = 1)),
|
||||
new /datum/event_meta(EVENT_LEVEL_MUNDANE, "Aurora Caelus", /datum/event/aurora_caelus, 2, list(), 1),
|
||||
)
|
||||
add_disabled_events(list(
|
||||
@@ -59,33 +59,33 @@
|
||||
available_events = list(
|
||||
new /datum/event_meta(EVENT_LEVEL_MODERATE, "Nothing", /datum/event/nothing, 1600),
|
||||
// Leaks gas into an unoccupied room.
|
||||
new /datum/event_meta(EVENT_LEVEL_MODERATE, "Atmos Leak", /datum/event/atmos_leak, 30, list(ASSIGNMENT_ENGINEER = 25), 1),
|
||||
new /datum/event_meta(EVENT_LEVEL_MODERATE, "Carp School", /datum/event/carp_migration, 0, list(ASSIGNMENT_SECURITY = 30), 1),
|
||||
new /datum/event_meta(EVENT_LEVEL_MODERATE, "Atmos Leak", /datum/event/atmos_leak, 30, list(ASSIGNMENT_ENGINEER = 25), 1, min_jobs = list(ASSIGNMENT_ENGINEER = 1)),
|
||||
new /datum/event_meta(EVENT_LEVEL_MODERATE, "Carp School", /datum/event/carp_migration, 0, list(ASSIGNMENT_SECURITY = 30), 1, min_jobs = list(ASSIGNMENT_SECURITY = 3)),
|
||||
// Just disables comms for a short while.
|
||||
new /datum/event_meta(EVENT_LEVEL_MODERATE, "Communication Blackout", /datum/event/communications_blackout, 500, list(ASSIGNMENT_AI = 150, ASSIGNMENT_SECURITY = 120), 1),
|
||||
new /datum/event_meta(EVENT_LEVEL_MODERATE, "Communication Blackout", /datum/event/communications_blackout, 500, list(ASSIGNMENT_AI = 100, ASSIGNMENT_SECURITY = 50), 1),
|
||||
// Just blows out a few lights
|
||||
new /datum/event_meta(EVENT_LEVEL_MODERATE, "Electrical Storm", /datum/event/electrical_storm, 70, list(ASSIGNMENT_ENGINEER = 20, ASSIGNMENT_JANITOR = 150), 1),
|
||||
// This one is just too fun.
|
||||
new /datum/event_meta(EVENT_LEVEL_MODERATE, "Gravity Failure", /datum/event/gravity, 75, list(ASSIGNMENT_ENGINEER = 60), 1),
|
||||
// Temporary power failure, but mitigatead by subgrids
|
||||
new /datum/event_meta(EVENT_LEVEL_MODERATE, "Grid Check", /datum/event/grid_check, 0, list(ASSIGNMENT_ENGINEER = 25), 1),
|
||||
new /datum/event_meta(EVENT_LEVEL_MODERATE, "Grid Check", /datum/event/grid_check, 0, list(ASSIGNMENT_ENGINEER = 25), 1, min_jobs = list(ASSIGNMENT_ENGINEER = 1)),
|
||||
// Pure RP fun, no mechanical effects.
|
||||
new /datum/event_meta(EVENT_LEVEL_MODERATE, "Ion Storm", /datum/event/ionstorm, 0, list(ASSIGNMENT_AI = 80, ASSIGNMENT_CYBORG = 50, ASSIGNMENT_ENGINEER = 15, ASSIGNMENT_SCIENTIST = 5)),
|
||||
new /datum/event_meta(EVENT_LEVEL_MODERATE, "Ion Storm", /datum/event/ionstorm, 0, list(ASSIGNMENT_AI = 80, ASSIGNMENT_CYBORG = 50, ASSIGNMENT_ENGINEER = 15, ASSIGNMENT_SCIENTIST = 5), min_jobs = list(ASSIGNMENT_AI = 1)),
|
||||
// Opens doors in brig. So just RP fun
|
||||
new /datum/event_meta(EVENT_LEVEL_MODERATE, "Prison Break", /datum/event/prison_break, 10, list(ASSIGNMENT_SECURITY = 100), 1),
|
||||
// Radiation, but only in space.
|
||||
new /datum/event_meta(EVENT_LEVEL_MODERATE, "Rogue Drones", /datum/event/rogue_drone, 0, list(ASSIGNMENT_SECURITY = 20), 1),
|
||||
new /datum/event_meta(EVENT_LEVEL_MODERATE, "Rogue Drones", /datum/event/rogue_drone, 0, list(ASSIGNMENT_SECURITY = 20), 1, min_jobs = list(ASSIGNMENT_SECURITY = 3)),
|
||||
new /datum/event_meta(EVENT_LEVEL_MODERATE, "Solar Storm", /datum/event/solar_storm, 30, list(ASSIGNMENT_ENGINEER = 40, ASSIGNMENT_SECURITY = 30), 1),
|
||||
new /datum/event_meta(EVENT_LEVEL_MODERATE, "Space Dust", /datum/event/dust, 0, list(ASSIGNMENT_ENGINEER = 20), 1, 0, 50),
|
||||
new /datum/event_meta(EVENT_LEVEL_MODERATE, "Space Dust", /datum/event/dust, 0, list(ASSIGNMENT_ENGINEER = 20), 1, 0, 50, min_jobs = list(ASSIGNMENT_ENGINEER = 3)),
|
||||
new /datum/event_meta(EVENT_LEVEL_MODERATE, "Virology Breach", /datum/event/prison_break/virology, 0, list(ASSIGNMENT_ENGINEER = 30), 1),
|
||||
new /datum/event_meta(EVENT_LEVEL_MODERATE, "Xenobiology Breach", /datum/event/prison_break/xenobiology, 0, list(ASSIGNMENT_ENGINEER = 30), 1),
|
||||
new /datum/event_meta(EVENT_LEVEL_MODERATE, "Spider Infestation", /datum/event/spider_infestation, 0, list(ASSIGNMENT_SECURITY = 30), 1),
|
||||
new /datum/event_meta(EVENT_LEVEL_MODERATE, "Spider Infestation", /datum/event/spider_infestation, 0, list(ASSIGNMENT_SECURITY = 30), 1, min_jobs = list(ASSIGNMENT_SECURITY = 2)),
|
||||
//Evil grubs that drain station power slightly
|
||||
new /datum/event_meta(EVENT_LEVEL_MODERATE, "Grub Infestation", /datum/event/grub_infestation, 0, list(ASSIGNMENT_SECURITY = 10, ASSIGNMENT_ENGINEER = 30), 1),
|
||||
new /datum/event_meta(EVENT_LEVEL_MODERATE, "Drone Pod Drop", /datum/event/drone_pod_drop, 10, list(ASSIGNMENT_SCIENTIST = 40), 1),
|
||||
new /datum/event_meta(EVENT_LEVEL_MODERATE, "Grub Infestation", /datum/event/grub_infestation, 0, list(ASSIGNMENT_SECURITY = 10, ASSIGNMENT_ENGINEER = 30), 1, min_jobs = list(ASSIGNMENT_SECURITY = 1, ASSIGNMENT_ENGINEER = 1)),
|
||||
new /datum/event_meta(EVENT_LEVEL_MODERATE, "Drone Pod Drop", /datum/event/drone_pod_drop, 25, list(ASSIGNMENT_SCIENTIST = 40), 1),
|
||||
new /datum/event_meta(EVENT_LEVEL_MODERATE, "Morph Spawn", /datum/event/morph_spawn, 75, list(ASSIGNMENT_ANY = 5), 0),
|
||||
new /datum/event_meta(EVENT_LEVEL_MODERATE, "Maintenance Predator", /datum/event/maintenance_predator, 100, list(ASSIGNMENT_ANY = 5), 0),
|
||||
new /datum/event_meta(EVENT_LEVEL_MODERATE, "Jellyfish School", /datum/event/jellyfish_migration, 0, list(ASSIGNMENT_ANY = 1, ASSIGNMENT_SECURITY = 15, ASSIGNMENT_MEDICAL = 3), 1),
|
||||
new /datum/event_meta(EVENT_LEVEL_MODERATE, "Jellyfish School", /datum/event/jellyfish_migration, 0, list(ASSIGNMENT_SECURITY = 15, ASSIGNMENT_MEDICAL = 3), 1, min_jobs = list(ASSIGNMENT_SECURITY = 2)),
|
||||
)
|
||||
add_disabled_events(list(
|
||||
new /datum/event_meta(EVENT_LEVEL_MODERATE, "Appendicitis", /datum/event/spontaneous_appendicitis, 0, list(ASSIGNMENT_MEDICAL = 30), 1),
|
||||
@@ -99,11 +99,11 @@
|
||||
/datum/event_container/major/New()
|
||||
available_events = list(
|
||||
new /datum/event_meta(EVENT_LEVEL_MAJOR, "Nothing", /datum/event/nothing, 3600),
|
||||
new /datum/event_meta(EVENT_LEVEL_MAJOR, "Atmos Leak", /datum/event/atmos_leak, 20, list(ASSIGNMENT_ENGINEER = 25), 1),
|
||||
new /datum/event_meta(EVENT_LEVEL_MAJOR, "Atmos Leak", /datum/event/atmos_leak, 20, list(ASSIGNMENT_ENGINEER = 25), 1, min_jobs = list(ASSIGNMENT_ENGINEER = 1)),
|
||||
new /datum/event_meta(EVENT_LEVEL_MAJOR, "Space Vines", /datum/event/spacevine, 10, list(ASSIGNMENT_ENGINEER = 7, ASSIGNMENT_GARDENER = 2), 1),
|
||||
new /datum/event_meta(EVENT_LEVEL_MAJOR, "Carp Migration", /datum/event/carp_migration, 10, list(ASSIGNMENT_SECURITY = 5), 1),
|
||||
new /datum/event_meta(EVENT_LEVEL_MAJOR, "Carp Migration", /datum/event/carp_migration, 10, list(ASSIGNMENT_SECURITY = 5), 1, min_jobs = list(ASSIGNMENT_SECURITY = 3)),
|
||||
new /datum/event_meta(EVENT_LEVEL_MAJOR, "Containment Breach", /datum/event/prison_break/station, 0, list(ASSIGNMENT_ANY = 5), 1),
|
||||
new /datum/event_meta(EVENT_LEVEL_MAJOR, "Jellyfish Migration", /datum/event/jellyfish_migration, 5, list(ASSIGNMENT_ANY = 1, ASSIGNMENT_SECURITY = 5, ASSIGNMENT_MEDICAL = 3), 1),
|
||||
new /datum/event_meta(EVENT_LEVEL_MAJOR, "Jellyfish Migration", /datum/event/jellyfish_migration, 5, list(ASSIGNMENT_ANY = 1, ASSIGNMENT_SECURITY = 5, ASSIGNMENT_MEDICAL = 3), 1, min_jobs = list(ASSIGNMENT_SECURITY = 2)),
|
||||
)
|
||||
add_disabled_events(list(
|
||||
new /datum/event_meta(EVENT_LEVEL_MAJOR, "Meteor Strike", /datum/event/meteor_strike, 10, list(ASSIGNMENT_ENGINEER = 15), 1),
|
||||
|
||||
@@ -186,7 +186,7 @@ var/list/event_last_fired = list()
|
||||
active_with_role["AI"] = 0
|
||||
active_with_role["Cyborg"] = 0
|
||||
active_with_role["Janitor"] = 0
|
||||
active_with_role["Gardener"] = 0
|
||||
active_with_role["Botanist"] = 0
|
||||
|
||||
for(var/mob/M in player_list)
|
||||
if(!M.mind || !M.client || M.client.is_afk(10 MINUTES)) // longer than 10 minutes AFK counts them as inactive
|
||||
@@ -227,7 +227,7 @@ var/list/event_last_fired = list()
|
||||
if(M.mind.assigned_role == "Janitor")
|
||||
active_with_role["Janitor"]++
|
||||
|
||||
if(M.mind.assigned_role == "Gardener")
|
||||
active_with_role["Gardener"]++
|
||||
if(M.mind.assigned_role == "Botanist")
|
||||
active_with_role["Botanist"]++
|
||||
|
||||
return active_with_role
|
||||
|
||||
@@ -41,4 +41,4 @@
|
||||
area_names |= grub_area.name
|
||||
if(area_names.len)
|
||||
var/english_list = english_list(area_names)
|
||||
command_announcement.Announce("Sensors have narrowed down remaining active solargrubs to the followng areas: [english_list]", "Lifesign Alert")
|
||||
command_announcement.Announce("Sensors have narrowed down remaining active solargrubs to the following areas: [english_list]", "Lifesign Alert")
|
||||
|
||||
@@ -81,4 +81,4 @@
|
||||
|
||||
/obj/item/weapon/storage/box/glasses/coffeemug
|
||||
name = "box of coffee mugs"
|
||||
starts_with = list(/obj/item/weapon/reagent_containers/food/drinks/britcup = 7)
|
||||
starts_with = list(/obj/item/weapon/reagent_containers/food/drinks/glass2/coffeemug = 7)
|
||||
@@ -0,0 +1,251 @@
|
||||
/* Warm Mugs!
|
||||
*
|
||||
* Contains:
|
||||
* Britcup
|
||||
* Text Mug
|
||||
* Coffee Mugs
|
||||
* Tall Mugs
|
||||
*/
|
||||
|
||||
/*
|
||||
* Britcup
|
||||
*/
|
||||
/obj/item/weapon/reagent_containers/food/drinks/britcup
|
||||
name = "cup"
|
||||
desc = "A cup with the British flag emblazoned on it."
|
||||
icon_state = "britcup"
|
||||
volume = 30
|
||||
center_of_mass = list("x"=15, "y"=13)
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/drinks/britcup/on_reagent_change()
|
||||
..()
|
||||
|
||||
/*
|
||||
* Text Mug
|
||||
*/
|
||||
/obj/item/weapon/reagent_containers/food/drinks/textmug
|
||||
name = "mug with text"
|
||||
desc = "A mug with something written on it."
|
||||
icon = 'icons/obj/drinks_vr.dmi'
|
||||
icon_state = "textmug"
|
||||
volume = 30
|
||||
center_of_mass = list("x"=15, "y"=13)
|
||||
|
||||
/*
|
||||
* Coffee Mugs
|
||||
*/
|
||||
/obj/item/weapon/reagent_containers/food/drinks/glass2/coffeemug
|
||||
name = "coffee mug"
|
||||
base_name = "mug"
|
||||
desc = "A plain white coffee mug."
|
||||
icon = 'icons/obj/drinks_mugs.dmi'
|
||||
base_icon = "coffeecup"
|
||||
volume = 30
|
||||
var/fillsource = "coffeecup"
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/drinks/glass2/coffeemug/update_icon()
|
||||
cut_overlays()
|
||||
|
||||
if(reagents.total_volume)
|
||||
var/image/filling = image('icons/obj/drinks_mugs.dmi', src, null)
|
||||
var/percent = round((reagents.total_volume / volume) * 100)
|
||||
switch(percent)
|
||||
if(0 to 39)
|
||||
filling.icon_state = null
|
||||
return
|
||||
if(40 to 79) filling.icon_state = "[fillsource]40"
|
||||
if(80 to 99) filling.icon_state = "[fillsource]80"
|
||||
if(100 to INFINITY) filling.icon_state = "[fillsource]100"
|
||||
filling.color = reagents.get_color()
|
||||
add_overlay(filling)
|
||||
|
||||
// Government
|
||||
/obj/item/weapon/reagent_containers/food/drinks/glass2/coffeemug/sol
|
||||
name = "\improper SCG coffee mug"
|
||||
desc = "A blue coffee mug emblazoned with the crest of the Solar Confederate Government."
|
||||
base_icon = "coffeecup_sol"
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/drinks/glass2/coffeemug/fleet
|
||||
name = "\improper SCG Fleet coffee cup"
|
||||
desc = "A coffee mug imprinted with the emblem of the Solar Confederate Fleet."
|
||||
base_icon = "coffeecup_fleet"
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/drinks/glass2/coffeemug/fivearrows
|
||||
name = "\improper Five Arrows coffee mug"
|
||||
desc = "A coffee mug with the flag of the Five Arrows proudly displayed on it."
|
||||
base_icon = "coffeecup_fivearrows"
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/drinks/glass2/coffeemug/alma
|
||||
name = "\improper Almach Association coffee cup"
|
||||
desc = "A grey coffee cup emblazoned with the star of the Almach Association."
|
||||
icon_state = "coffeecup_alma"
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/drinks/glass2/coffeemug/almp
|
||||
name = "\improper Almach Protectorate coffee cup"
|
||||
desc = "A purple coffee cup emblazoned with the star of the Almach Protectorate."
|
||||
icon_state = "coffeecup_almp"
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/drinks/glass2/coffeemug/psc
|
||||
name = "\improper Pearlshield coffee mug"
|
||||
desc = "A coffee mug bearing the symbol of the Pearlshield Coalition."
|
||||
base_icon = "coffeecup_psc"
|
||||
|
||||
// Corporations
|
||||
/obj/item/weapon/reagent_containers/food/drinks/glass2/coffeemug/nt
|
||||
name = "\improper NT coffee mug"
|
||||
desc = "A blue NanoTrasen coffee mug."
|
||||
base_icon = "coffeecup_NT"
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/drinks/glass2/coffeemug/metal/wulf
|
||||
name = "\improper Wulf Aeronautics coffee mug"
|
||||
desc = "A metal coffee mug bearing the livery of Wulf Aeronautics."
|
||||
base_icon = "coffeecup_wulf"
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/drinks/glass2/coffeemug/gilthari
|
||||
name = "\improper Gilthari Exports coffee mug"
|
||||
desc = "A coffee mug bearing golden G of Gilthari Exports."
|
||||
base_icon = "coffeecup_gilth"
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/drinks/glass2/coffeemug/wt
|
||||
name = "\improper Ward-Takahashi coffee mug"
|
||||
desc = "A coffee mug in a geometric Ward-Takahashi design."
|
||||
base_icon = "coffeecup_wt"
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/drinks/glass2/coffeemug/aether
|
||||
name = "\improper Aether Atmospherics coffee mug"
|
||||
desc = "A coffee mug in Aether Atmospherics colours."
|
||||
base_icon = "coffeecup_aether"
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/drinks/glass2/coffeemug/zeng
|
||||
name = "\improper Zeng-Hu coffee cup"
|
||||
desc = "A coffee cup bearing the Zeng-Hu logo."
|
||||
icon_state = "coffeecup_zeng"
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/drinks/glass2/coffeemug/bishop
|
||||
name = "\improper Bishop coffee mug"
|
||||
desc = "A black coffee mug adorned with Bishop's logo."
|
||||
base_icon = "coffeecup_bishop"
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/drinks/glass2/coffeemug/oculum
|
||||
name = "pawn coffee mug"
|
||||
desc = "A black and blue coffee mug decorated with the logo of Oculum Broadcast."
|
||||
base_icon = "coffeecup_oculum"
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/drinks/glass2/coffeemug/talon
|
||||
name = "\improper Talon coffee mug"
|
||||
desc = "A teal colored coffee mug with the Talon star logo on its face."
|
||||
base_icon = "coffeecup_talon"
|
||||
|
||||
// Symbols, markings
|
||||
/obj/item/weapon/reagent_containers/food/drinks/glass2/coffeemug/one
|
||||
name = "#1 coffee mug"
|
||||
desc = "A white coffee mug, prominently featuring a #1."
|
||||
base_icon = "coffeecup_one"
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/drinks/glass2/coffeemug/puni
|
||||
name = "#1 monkey coffee mug"
|
||||
desc = "A white coffee mug, prominently featuring a \"#1 monkey\" decal."
|
||||
base_icon = "coffeecup_puni"
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/drinks/glass2/coffeemug/heart
|
||||
name = "heart coffee mug"
|
||||
desc = "A white coffee mug, it prominently features a red heart."
|
||||
base_icon = "coffeecup_heart"
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/drinks/glass2/coffeemug/pawn
|
||||
name = "pawn coffee mug"
|
||||
desc = "A black coffee mug adorned with the image of a red chess pawn."
|
||||
base_icon = "coffeecup_pawn"
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/drinks/glass2/coffeemug/diona
|
||||
name = "diona nymph coffee mug"
|
||||
desc = "A green coffee mug featuring the image of a diona nymph."
|
||||
base_icon = "coffeecup_diona"
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/drinks/glass2/coffeemug/britcup
|
||||
name = "british coffee mug"
|
||||
desc = "A coffee mug with the British flag emblazoned on it."
|
||||
base_icon = "coffeecup_brit"
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/drinks/glass2/coffeemug/flame
|
||||
name = "flame coffee cup"
|
||||
desc = "A coffee cup with the a flame emblazoned on it."
|
||||
icon_state = "coffeecup_flame"
|
||||
|
||||
// Pure colors & other
|
||||
/obj/item/weapon/reagent_containers/food/drinks/glass2/coffeemug/black
|
||||
name = "black coffee mug"
|
||||
desc = "A sleek black coffee mug."
|
||||
base_icon = "coffeecup_black"
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/drinks/glass2/coffeemug/green
|
||||
name = "green coffee mug"
|
||||
desc = "A pale green and pink coffee mug."
|
||||
base_icon = "coffeecup_green"
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/drinks/glass2/coffeemug/green/dark
|
||||
desc = "A dark green coffee mug."
|
||||
base_icon = "coffeecup_corp"
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/drinks/glass2/coffeemug/blue
|
||||
name = "blue coffee mug"
|
||||
desc = "A blue coffee mug."
|
||||
base_icon = "coffeecup_blue"
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/drinks/glass2/coffeemug/rainbow
|
||||
name = "rainbow coffee mug"
|
||||
desc = "A rainbow coffee mug. The colors are almost as blinding as a welder."
|
||||
base_icon = "coffeecup_rainbow"
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/drinks/glass2/coffeemug/metal
|
||||
name = "metal coffee mug"
|
||||
desc = "A metal coffee mug. You're not sure which metal."
|
||||
base_icon = "coffeecup_metal"
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/drinks/glass2/coffeemug/glass
|
||||
name = "glass coffee mug"
|
||||
desc = "A glass coffee mug, using space age technology to keep it cool for use."
|
||||
base_icon = "glasscoffeecup"
|
||||
fillsource = "glasscoffeecup"
|
||||
|
||||
/*
|
||||
* Tall Mugs
|
||||
*/
|
||||
/obj/item/weapon/reagent_containers/food/drinks/glass2/coffeemug/tall
|
||||
name = "tall coffee mug"
|
||||
desc = "An unreasonably tall coffee mug, for when you really need to wake up in the morning."
|
||||
icon = 'icons/obj/drinks_mugs_tall.dmi'
|
||||
base_icon = "coffeecup_tall"
|
||||
fillsource = "coffeecup_tall"
|
||||
volume = 60
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/drinks/glass2/coffeemug/tall/update_icon()
|
||||
cut_overlays()
|
||||
|
||||
if(reagents.total_volume)
|
||||
var/image/filling = image('icons/obj/drinks_mugs_tall.dmi', src, null)
|
||||
var/percent = round((reagents.total_volume / volume) * 100)
|
||||
switch(percent)
|
||||
if(0 to 69)
|
||||
filling.icon_state = null
|
||||
return
|
||||
if(70 to 89) filling.icon_state = "[fillsource]70"
|
||||
if(90 to 99) filling.icon_state = "[fillsource]90"
|
||||
if(100 to INFINITY) filling.icon_state = "[fillsource]100"
|
||||
filling.color = reagents.get_color()
|
||||
add_overlay(filling)
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/drinks/glass2/coffeemug/tall/black
|
||||
name = "tall black coffee mug"
|
||||
desc = "An unreasonably tall coffee mug, for when you really need to wake up in the morning. This one is black."
|
||||
base_icon = "coffeecup_tall_black"
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/drinks/glass2/coffeemug/tall/metal
|
||||
name = "tall metal coffee mug"
|
||||
desc = "An unreasonably tall coffee mug, for when you really need to wake up in the morning. This one is made of metal."
|
||||
base_icon = "coffeecup_tall_metal"
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/drinks/glass2/coffeemug/tall/rainbow
|
||||
name = "tall rainbow coffee mug"
|
||||
desc = "An unreasonably tall coffee mug, for when you really need to wake up in the morning. This one is rainbow colored."
|
||||
base_icon = "coffeecup_tall_rainbow"
|
||||
@@ -420,10 +420,3 @@
|
||||
volume = 60
|
||||
center_of_mass = list("x"=15, "y"=4)
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/drinks/britcup
|
||||
name = "cup"
|
||||
desc = "A cup with the British flag emblazoned on it."
|
||||
icon_state = "britcup"
|
||||
volume = 30
|
||||
center_of_mass = list("x"=15, "y"=13)
|
||||
|
||||
|
||||
@@ -1,7 +0,0 @@
|
||||
/obj/item/weapon/reagent_containers/food/drinks/textmug
|
||||
name = "mug with text"
|
||||
desc = "A mug with something written on it."
|
||||
icon = 'icons/obj/drinks_vr.dmi'
|
||||
icon_state = "textmug"
|
||||
volume = 30
|
||||
center_of_mass = list("x"=15, "y"=13)
|
||||
@@ -65,7 +65,7 @@ var/list/lunchables_snacks_ = list(/obj/item/weapon/reagent_containers/food/snac
|
||||
/obj/item/weapon/reagent_containers/food/snacks/honeybun,
|
||||
/obj/item/weapon/reagent_containers/food/snacks/custardbun,
|
||||
/obj/item/weapon/reagent_containers/food/snacks/honeytoast,
|
||||
/obj/item/weapon/reagent_containers/food/snacks/cookiesnack,
|
||||
/obj/item/weapon/reagent_containers/food/snacks/cookie,
|
||||
/obj/item/weapon/reagent_containers/food/snacks/fruitbar,
|
||||
/obj/item/weapon/reagent_containers/food/snacks/semki,
|
||||
/obj/item/weapon/reagent_containers/food/snacks/salo,
|
||||
|
||||
@@ -1594,16 +1594,6 @@
|
||||
nutriment_desc = list("noodles" = 2)
|
||||
bitesize = 1
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/snacks/fortunecookie
|
||||
name = "Fortune cookie"
|
||||
desc = "A true prophecy in each cookie!"
|
||||
icon_state = "fortune_cookie"
|
||||
filling_color = "#E8E79E"
|
||||
center_of_mass = list("x"=15, "y"=14)
|
||||
nutriment_amt = 3
|
||||
nutriment_desc = list("fortune cookie" = 2)
|
||||
bitesize = 2
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/snacks/badrecipe
|
||||
name = "Burned mess"
|
||||
desc = "Someone should be demoted from chef for this."
|
||||
@@ -4224,6 +4214,15 @@
|
||||
. = ..()
|
||||
reagents.add_reagent("bean_protein", 6)
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/snacks/cookie
|
||||
name = "chocolate chip cookie"
|
||||
desc = "Just like your mother used to make."
|
||||
filling_color = "#DBC94F"
|
||||
icon_state = "cookie"
|
||||
nutriment_amt = 5
|
||||
nutriment_desc = list("sweetness" = 2, "cookie" = 1, "chocolate" = 2)
|
||||
bitesize = 1
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/snacks/sugarcookie
|
||||
name = "sugar cookie"
|
||||
desc = "Just like your little sister used to make."
|
||||
@@ -4233,6 +4232,16 @@
|
||||
nutriment_desc = list("sweetness" = 4, "cookie" = 1)
|
||||
bitesize = 1
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/snacks/fortunecookie
|
||||
name = "Fortune cookie"
|
||||
desc = "A true prophecy in each cookie!"
|
||||
icon_state = "fortune_cookie"
|
||||
filling_color = "#E8E79E"
|
||||
center_of_mass = list("x"=15, "y"=14)
|
||||
nutriment_amt = 3
|
||||
nutriment_desc = list("fortune cookie" = 2)
|
||||
bitesize = 2
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/snacks/berrymuffin
|
||||
name = "berry muffin"
|
||||
desc = "A delicious and spongy little cake, with berries."
|
||||
|
||||
@@ -631,11 +631,11 @@
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/snacks/grub_pink
|
||||
name = "pink candy grub"
|
||||
desc = "A thoroughly candied grub, it smells of raspberry."
|
||||
desc = "A thoroughly candied grub, it smells of cherry."
|
||||
icon = 'icons/obj/food_vr.dmi'
|
||||
icon_state = "grub_pink"
|
||||
nutriment_amt = 5
|
||||
nutriment_desc = list("raspberry" = 4, "goo" = 1)
|
||||
nutriment_desc = list("cherry" = 4, "goo" = 1)
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/snacks/grub_pink/Initialize()
|
||||
. = ..()
|
||||
|
||||
@@ -160,7 +160,7 @@
|
||||
result = /obj/item/weapon/storage/box/wings/bucket
|
||||
|
||||
/datum/recipe/grub_pink
|
||||
fruit = list("cherry" = 1)
|
||||
fruit = list("cherries" = 1)
|
||||
items = list(
|
||||
/obj/item/weapon/reagent_containers/food/snacks/grub
|
||||
)
|
||||
|
||||
@@ -299,7 +299,7 @@
|
||||
/obj/item/weapon/reagent_containers/food/snacks/dough,
|
||||
/obj/item/weapon/reagent_containers/food/snacks/chocolatebar
|
||||
)
|
||||
result = /obj/item/weapon/reagent_containers/food/snacks/cookiesnack
|
||||
result = /obj/item/weapon/reagent_containers/food/snacks/cookie
|
||||
result_quantity = 4
|
||||
reagent_mix = RECIPE_REAGENT_REPLACE
|
||||
|
||||
@@ -319,7 +319,6 @@
|
||||
result = /obj/item/weapon/reagent_containers/food/snacks/poppypretzel
|
||||
result_quantity = 2
|
||||
|
||||
|
||||
/datum/recipe/cracker
|
||||
appliance = OVEN
|
||||
reagents = list("sodiumchloride" = 1)
|
||||
|
||||
@@ -55,3 +55,49 @@
|
||||
"U9: Jaunt"
|
||||
)
|
||||
|
||||
/obj/item/weapon/book/manual/wizzoffguide
|
||||
name = "WizOff Guide"
|
||||
icon = 'icons/obj/playing_cards.dmi'
|
||||
icon_state ="wizoff_guide"
|
||||
item_state = "book16"
|
||||
author = "Donk Co."
|
||||
title = "WizOff Guide"
|
||||
drop_sound = 'sound/items/drop/paper.ogg'
|
||||
pickup_sound = 'sound/items/pickup/paper.ogg'
|
||||
|
||||
/obj/item/weapon/book/manual/wizzoffguide/New()
|
||||
..()
|
||||
dat = {"
|
||||
|
||||
<html>
|
||||
<head>
|
||||
<style>
|
||||
h1 {font-size: 18px; margin: 15px 0px 5px;}
|
||||
h2 {font-size: 15px; margin: 15px 0px 5px;}
|
||||
h3 {font-size: 13px; margin: 5px 0px 5px;}
|
||||
li {margin: 2px 0px 2px 15px;}
|
||||
ul {margin: 5px; padding: 0px;}
|
||||
ol {margin: 5px; padding: 0px 15px;}
|
||||
body {font-size: 13px; font-family: Verdana;}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<h1><u>Wiz-Off Player Guide</u></h1>
|
||||
<h2>How to play Wiz-Off!</h2>
|
||||
<h3>The wizard themed card game</h3>
|
||||
<p>Each player draws 5 cards. There are five rounds. Each round,<br>
|
||||
a player selects a card to play, and the winner is selected<br>
|
||||
based on the following rules:</p>
|
||||
<ol>
|
||||
<li>Offensive (O) beats Utility (U)!</li>
|
||||
<li>Defensive (D) beats Offensive (O)!</li>
|
||||
<li>Utility (U) beats Defensive (D)!</li>
|
||||
<li>If both players play the same type of spell, <br>
|
||||
the higher number wins!</li>
|
||||
</ol>
|
||||
<p>The player who wins the most of the 5 rounds wins the game!<br>
|
||||
Now get ready to battle for the fate of the universe: Wiz-Off!</p>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
"}
|
||||
@@ -317,6 +317,9 @@
|
||||
for(var/obj/effect/decal/cleanable/blood/B in linkedholodeck)
|
||||
qdel(B)
|
||||
|
||||
for(var/obj/effect/landmark/L in linkedholodeck)
|
||||
qdel(L)
|
||||
|
||||
holographic_objs = A.copy_contents_to(linkedholodeck , 1)
|
||||
for(var/obj/holo_obj in holographic_objs)
|
||||
holo_obj.alpha *= 0.8 //give holodeck objs a slight transparency
|
||||
|
||||
@@ -111,7 +111,7 @@
|
||||
return
|
||||
directional_opacity = NONE
|
||||
for(var/atom/movable/opacity_source as anything in opacity_sources)
|
||||
if(opacity_source.flags & ON_BORDER)
|
||||
if(opacity_source && opacity_source.flags & ON_BORDER)
|
||||
directional_opacity |= opacity_source.dir
|
||||
else //If fulltile and opaque, then the whole tile blocks view, no need to continue checking.
|
||||
directional_opacity = ALL_CARDINALS
|
||||
|
||||
@@ -335,11 +335,6 @@
|
||||
log_runtime(EXCEPTION("Warning: human/Topic was called with item [href_list["item"]], but the item Topic is deprecated!"))
|
||||
// handle_strip(href_list["item"],usr)
|
||||
|
||||
// VOREStation Start
|
||||
if(href_list["ooc_notes"])
|
||||
src.Examine_OOC()
|
||||
// VOREStation End
|
||||
|
||||
if (href_list["criminal"])
|
||||
if(hasHUD(usr,"security"))
|
||||
|
||||
|
||||
@@ -126,6 +126,11 @@
|
||||
if(!buckled && shoes) // Shoes can make you go faster.
|
||||
. += shoes.slowdown
|
||||
|
||||
//VOREStation Addition Start
|
||||
if(buckled && istype(buckled, /obj/machinery/power/rtg/d_type_reg))
|
||||
. += shoes.slowdown
|
||||
//VOREStation Addition End
|
||||
|
||||
// Loop through some slots, and add up their slowdowns.
|
||||
// Includes slots which can provide armor, the back slot, and suit storage.
|
||||
for(var/obj/item/I in list(wear_suit, w_uniform, back, gloves, head, s_store))
|
||||
|
||||
@@ -210,12 +210,13 @@ var/datum/species/shapeshifter/promethean/prometheans
|
||||
H.adjust_nutrition(rand(10, 20))
|
||||
if(H.clean_blood(1))
|
||||
H.adjust_nutrition(rand(5, 15))
|
||||
if(H.r_hand)
|
||||
if(H.r_hand.clean_blood())
|
||||
H.adjust_nutrition(rand(5, 15))
|
||||
if(H.l_hand)
|
||||
if(H.l_hand.clean_blood())
|
||||
H.adjust_nutrition(rand(5, 15))
|
||||
if(!(H.gloves || (H.wear_suit && (H.wear_suit.body_parts_covered & HANDS))))
|
||||
if(H.r_hand)
|
||||
if(H.r_hand.clean_blood())
|
||||
H.adjust_nutrition(rand(5, 15))
|
||||
if(H.l_hand)
|
||||
if(H.l_hand.clean_blood())
|
||||
H.adjust_nutrition(rand(5, 15))
|
||||
if(H.head)
|
||||
if(H.head.clean_blood())
|
||||
H.update_inv_head(0)
|
||||
|
||||
@@ -16,10 +16,9 @@
|
||||
spawn_flags = SPECIES_CAN_JOIN
|
||||
wikilink="https://wiki.vore-station.net/Promethean"
|
||||
genders = list(MALE, FEMALE, PLURAL, NEUTER)
|
||||
|
||||
color_mult = 1
|
||||
mob_size = MOB_MEDIUM //As of writing, original was MOB_SMALL - Allows normal swapping
|
||||
|
||||
//var/mob/living/simple_mob/slime/promethean/stored_blob = null
|
||||
appearance_flags = HAS_SKIN_COLOR | HAS_EYE_COLOR | HAS_HAIR_COLOR | RADIATION_GLOWS | HAS_UNDERWEAR
|
||||
|
||||
inherent_verbs = list(
|
||||
@@ -32,6 +31,48 @@
|
||||
/mob/living/carbon/human/proc/shapeshifter_select_wings,
|
||||
/mob/living/carbon/human/proc/shapeshifter_select_tail,
|
||||
/mob/living/carbon/human/proc/shapeshifter_select_ears,
|
||||
/mob/living/carbon/human/proc/prommie_blobform,
|
||||
/mob/living/proc/set_size,
|
||||
/mob/living/carbon/human/proc/promethean_select_opaqueness,
|
||||
)
|
||||
|
||||
/mob/living/carbon/human/proc/prommie_blobform()
|
||||
set name = "Toggle Blobform"
|
||||
set desc = "Switch between amorphous and humanoid forms."
|
||||
set category = "Abilities"
|
||||
set hidden = FALSE
|
||||
|
||||
var/atom/movable/to_locate = temporary_form || src
|
||||
if(!isturf(to_locate.loc))
|
||||
to_chat(to_locate,"<span class='warning'>You need more space to perform this action!</span>")
|
||||
return
|
||||
/*
|
||||
//Blob form
|
||||
if(temporary_form)
|
||||
if(temporary_form.stat)
|
||||
to_chat(temporary_form,"<span class='warning'>You can only do this while not stunned.</span>")
|
||||
else
|
||||
prommie_outofblob(temporary_form)
|
||||
*/
|
||||
//Human form
|
||||
else if(stat || paralysis || stunned || weakened || restrained())
|
||||
to_chat(src,"<span class='warning'>You can only do this while not stunned.</span>")
|
||||
return
|
||||
else
|
||||
prommie_intoblob()
|
||||
|
||||
/datum/species/shapeshifter/promethean/handle_death(var/mob/living/carbon/human/H)
|
||||
if(!H)
|
||||
return // Iono!
|
||||
|
||||
if(H.temporary_form)
|
||||
H.forceMove(H.temporary_form.drop_location())
|
||||
H.ckey = H.temporary_form.ckey
|
||||
QDEL_NULL(H.temporary_form)
|
||||
//else if(H.stored_blob) // Should prevent phantom blobs in the aether. I don't anticipate this being an issue, but if it is just uncomment.
|
||||
// qdel(stored_blob)
|
||||
// stored_blob = null
|
||||
|
||||
spawn(1)
|
||||
if(H)
|
||||
H.gib()
|
||||
@@ -0,0 +1,511 @@
|
||||
// Prommies are slimes, lets make them a subtype of slimes.
|
||||
/mob/living/simple_mob/slime/promethean
|
||||
name = "Promethean Blob"
|
||||
desc = "A promethean expressing their true form."
|
||||
//ai_holder_type = null
|
||||
color = null // Uses a special icon_state.
|
||||
slime_color = "rainbow"
|
||||
unity = TRUE
|
||||
water_resist = 100 // Lets not kill the prommies
|
||||
cores = 0
|
||||
movement_cooldown = 3
|
||||
//appearance_flags = RADIATION_GLOWS
|
||||
shock_resist = 0 // Lets not be immune to zaps.
|
||||
friendly = list("nuzzles", "glomps", "snuggles", "cuddles", "squishes") // lets be cute :3
|
||||
melee_damage_upper = 0
|
||||
melee_damage_lower = 0
|
||||
player_msg = "You're a little squisher! Your cuteness level has increased tenfold."
|
||||
heat_damage_per_tick = 20 // Hot and cold are bad, but cold is AS bad for prommies as it is for slimes.
|
||||
cold_damage_per_tick = 20
|
||||
//glow_range = 0
|
||||
//glow_intensity = 0
|
||||
|
||||
var/mob/living/carbon/human/humanform
|
||||
var/datum/modifier/healing
|
||||
|
||||
var/obj/prev_left_hand
|
||||
var/obj/prev_right_hand
|
||||
var/human_brute = 0
|
||||
var/human_burn = 0
|
||||
var/is_wide = FALSE
|
||||
var/rad_glow = 0
|
||||
|
||||
var/list/default_emotes = list(
|
||||
/decl/emote/audible/squish,
|
||||
/decl/emote/audible/chirp,
|
||||
/decl/emote/visible/bounce,
|
||||
/decl/emote/visible/jiggle,
|
||||
/decl/emote/visible/lightup,
|
||||
/decl/emote/visible/vibrate,
|
||||
/decl/emote/visible/flip,
|
||||
/decl/emote/visible/spin,
|
||||
/decl/emote/visible/floorspin
|
||||
)
|
||||
/mob/living/simple_mob/slime/promethean/Initialize(mapload, null)
|
||||
//verbs -= /mob/living/proc/ventcrawl
|
||||
verbs += /mob/living/simple_mob/slime/promethean/proc/prommie_blobform
|
||||
verbs += /mob/living/proc/set_size
|
||||
verbs += /mob/living/proc/hide
|
||||
verbs += /mob/living/simple_mob/proc/animal_nom
|
||||
verbs += /mob/living/proc/shred_limb
|
||||
verbs += /mob/living/simple_mob/slime/promethean/proc/toggle_expand
|
||||
verbs += /mob/living/simple_mob/slime/promethean/proc/prommie_select_colour
|
||||
verbs += /mob/living/simple_mob/slime/promethean/proc/toggle_shine
|
||||
update_mood()
|
||||
if(rad_glow)
|
||||
rad_glow = CLAMP(rad_glow,0,250)
|
||||
set_light(max(1,min(5,rad_glow/15)), max(1,min(10,rad_glow/25)), color)
|
||||
return ..()
|
||||
|
||||
/mob/living/simple_mob/slime/promethean/update_icon()
|
||||
icon_living = "[icon_state_override ? "[icon_state_override] slime" : "slime"] [is_wide ? "adult" : "baby"][""]"
|
||||
..()
|
||||
|
||||
/mob/living/simple_mob/slime/promethean/Destroy()
|
||||
humanform = null
|
||||
vore_organs = null
|
||||
vore_selected = null
|
||||
set_light(0)
|
||||
return ..()
|
||||
|
||||
/mob/living/carbon/human/Destroy()
|
||||
if(stored_blob)
|
||||
stored_blob = null
|
||||
qdel(stored_blob)
|
||||
return ..()
|
||||
|
||||
/mob/living/simple_mob/slime/promethean/Stat()
|
||||
..()
|
||||
if(humanform)
|
||||
humanform.species.Stat(humanform)
|
||||
|
||||
/mob/living/simple_mob/slime/promethean/handle_special() // Should disable default slime healing, we'll use nutrition based heals instead.
|
||||
if(rad_glow)
|
||||
rad_glow = CLAMP(rad_glow,0,250)
|
||||
set_light(max(1,min(5,rad_glow/15)), max(1,min(10,rad_glow/25)), color)
|
||||
else
|
||||
set_light(0)
|
||||
update_icon()
|
||||
|
||||
if(!humanform) // If we somehow have a blob with no human, lets just clean up.
|
||||
log_debug("Cleaning up blob with no prommie!")
|
||||
qdel(src)
|
||||
return
|
||||
|
||||
//Constructor allows passing the human to sync damages
|
||||
/mob/living/simple_mob/slime/promethean/New(var/newloc, var/mob/living/carbon/human/H)
|
||||
..()
|
||||
if(H)
|
||||
humanform = H
|
||||
updatehealth()
|
||||
|
||||
else
|
||||
qdel(src)
|
||||
|
||||
/mob/living/simple_mob/slime/promethean/updatehealth()
|
||||
if(!humanform)
|
||||
return ..()
|
||||
|
||||
//Set the max
|
||||
maxHealth = humanform.getMaxHealth()*2 //HUMANS, and their 'double health', bleh.
|
||||
//Set us to their health, but, human health ignores robolimbs so we do it 'the hard way'
|
||||
human_brute = humanform.getActualBruteLoss()
|
||||
human_burn = humanform.getActualFireLoss()
|
||||
health = maxHealth - humanform.getOxyLoss() - humanform.getToxLoss() - humanform.getCloneLoss() - human_brute - human_burn
|
||||
|
||||
//Alive, becoming dead
|
||||
if((stat < DEAD) && (health <= 0))
|
||||
death()
|
||||
|
||||
//Overhealth
|
||||
if(health > getMaxHealth())
|
||||
health = getMaxHealth()
|
||||
|
||||
//Grab any other interesting values
|
||||
confused = humanform.confused
|
||||
radiation = humanform.radiation
|
||||
paralysis = humanform.paralysis
|
||||
|
||||
//Update our hud if we have one
|
||||
if(healths)
|
||||
if(stat != DEAD)
|
||||
var/heal_per = (health / getMaxHealth()) * 100
|
||||
switch(heal_per)
|
||||
if(100 to INFINITY)
|
||||
healths.icon_state = "health0"
|
||||
if(80 to 100)
|
||||
healths.icon_state = "health1"
|
||||
if(60 to 80)
|
||||
healths.icon_state = "health2"
|
||||
if(40 to 60)
|
||||
healths.icon_state = "health3"
|
||||
if(20 to 40)
|
||||
healths.icon_state = "health4"
|
||||
if(0 to 20)
|
||||
healths.icon_state = "health5"
|
||||
else
|
||||
healths.icon_state = "health6"
|
||||
else
|
||||
healths.icon_state = "health7"
|
||||
|
||||
// All the damage and such to the blob translates to the human
|
||||
/mob/living/simple_mob/slime/promethean/apply_effect(var/effect = 0, var/effecttype = STUN, var/blocked = 0, var/check_protection = 1)
|
||||
if(humanform)
|
||||
return humanform.apply_effect(effect, effecttype, blocked, check_protection)
|
||||
else
|
||||
return ..()
|
||||
|
||||
/mob/living/simple_mob/slime/promethean/adjustBruteLoss(var/amount,var/include_robo)
|
||||
amount *= 0.75
|
||||
if(humanform)
|
||||
return humanform.adjustBruteLoss(amount)
|
||||
else
|
||||
return ..()
|
||||
|
||||
/mob/living/simple_mob/slime/promethean/adjustFireLoss(var/amount,var/include_robo)
|
||||
amount *= 2
|
||||
if(humanform)
|
||||
return humanform.adjustFireLoss(amount)
|
||||
else
|
||||
return ..()
|
||||
|
||||
/mob/living/simple_mob/slime/promethean/adjustToxLoss(amount)
|
||||
if(humanform)
|
||||
return humanform.adjustToxLoss(amount)
|
||||
else
|
||||
return ..()
|
||||
|
||||
/mob/living/simple_mob/slime/promethean/adjustOxyLoss(amount)
|
||||
if(humanform)
|
||||
return humanform.adjustOxyLoss(amount)
|
||||
else
|
||||
return ..()
|
||||
|
||||
/mob/living/simple_mob/slime/promethean/adjustHalLoss(amount)
|
||||
if(humanform)
|
||||
return humanform.adjustHalLoss(amount)
|
||||
else
|
||||
return ..()
|
||||
|
||||
/mob/living/simple_mob/slime/promethean/adjustCloneLoss(amount)
|
||||
if(humanform)
|
||||
return humanform.adjustCloneLoss(amount)
|
||||
else
|
||||
return ..()
|
||||
|
||||
/mob/living/simple_mob/slime/promethean/ex_act(severity)
|
||||
if(humanform)
|
||||
return humanform.ex_act(severity)
|
||||
else
|
||||
return ..()
|
||||
|
||||
/mob/living/simple_mob/slime/promethean/rad_act(severity)
|
||||
rad_glow += severity
|
||||
rad_glow = CLAMP(rad_glow,0,250)
|
||||
if(rad_glow > 1)
|
||||
set_light(max(1,min(5,rad_glow/15)), max(1,min(10,rad_glow/25)), color)
|
||||
update_icon()
|
||||
|
||||
/mob/living/simple_mob/slime/promethean/bullet_act(obj/item/projectile/P)
|
||||
if(humanform)
|
||||
return humanform.bullet_act(P)
|
||||
else
|
||||
return ..()
|
||||
|
||||
/mob/living/simple_mob/slime/promethean/death(gibbed, deathmessage = "rapidly loses cohesion, splattering across the ground...")
|
||||
if(humanform)
|
||||
humanform.death(gibbed, deathmessage)
|
||||
else
|
||||
animate(src, alpha = 0, time = 2 SECONDS)
|
||||
sleep(2 SECONDS)
|
||||
|
||||
if(!QDELETED(src)) // Human's handle death should have taken us, but maybe we were adminspawned or something without a human counterpart
|
||||
qdel(src)
|
||||
|
||||
/mob/living/simple_mob/slime/promethean/Login()
|
||||
. = ..()
|
||||
copy_from_prefs_vr(bellies = FALSE)
|
||||
|
||||
/mob/living/simple_mob/slime/promethean/proc/prommie_blobform()
|
||||
set name = "Toggle Blobform"
|
||||
set desc = "Switch between amorphous and humanoid forms."
|
||||
set category = "Abilities"
|
||||
set hidden = FALSE
|
||||
|
||||
var/atom/movable/to_locate = src
|
||||
if(!isturf(to_locate.loc))
|
||||
to_chat(src,"<span class='warning'>You need more space to perform this action!</span>")
|
||||
return
|
||||
|
||||
//Blob form
|
||||
if(!ishuman(src))
|
||||
if(humanform.temporary_form.stat || paralysis || stunned || weakened || restrained())
|
||||
to_chat(src,"<span class='warning'>You can only do this while not stunned.</span>")
|
||||
else
|
||||
humanform.prommie_outofblob(src)
|
||||
|
||||
/mob/living/simple_mob/slime/promethean/proc/toggle_expand()
|
||||
set name = "Toggle Width"
|
||||
set desc = "Switch between smole and lorge."
|
||||
set category = "Abilities"
|
||||
set hidden = FALSE
|
||||
|
||||
if(stat || world.time < last_special)
|
||||
return
|
||||
|
||||
last_special = world.time + 25
|
||||
|
||||
if(is_wide)
|
||||
is_wide = FALSE
|
||||
src.visible_message("<b>[src.name]</b> pulls together, compacting themselves into a small ball!")
|
||||
update_icon()
|
||||
else
|
||||
is_wide = TRUE
|
||||
src.visible_message("<b>[src.name]</b> flows outwards, their goop expanding!")
|
||||
update_icon()
|
||||
|
||||
/mob/living/simple_mob/slime/promethean/proc/toggle_shine()
|
||||
set name = "Toggle Shine"
|
||||
set desc = "Shine on you crazy diamond."
|
||||
set category = "Abilities"
|
||||
set hidden = FALSE
|
||||
|
||||
if(stat || world.time < last_special)
|
||||
return
|
||||
|
||||
last_special = world.time + 25
|
||||
|
||||
if(shiny)
|
||||
shiny = FALSE
|
||||
src.visible_message("<b>[src.name]</b> dulls their shine, becoming more translucent.")
|
||||
update_icon()
|
||||
else
|
||||
shiny = TRUE
|
||||
src.visible_message("<b>[src.name]</b> glistens and sparkles, shining brilliantly.")
|
||||
update_icon()
|
||||
|
||||
/mob/living/simple_mob/slime/promethean/proc/prommie_select_colour()
|
||||
|
||||
set name = "Select Body Colour"
|
||||
set category = "Abilities"
|
||||
|
||||
if(stat || world.time < last_special)
|
||||
return
|
||||
|
||||
last_special = world.time + 25
|
||||
|
||||
var/new_skin = input(usr, "Please select a new body color.", "Shapeshifter Colour", color) as null|color
|
||||
if(!new_skin)
|
||||
return
|
||||
color = new_skin
|
||||
update_icon()
|
||||
|
||||
/mob/living/simple_mob/slime/promethean/get_description_interaction()
|
||||
return
|
||||
|
||||
|
||||
/mob/living/simple_mob/slime/promethean/get_description_info()
|
||||
return
|
||||
|
||||
/mob/living/simple_mob/slime/promethean/init_vore()
|
||||
return
|
||||
|
||||
/mob/living/simple_mob/slime/promethean/get_available_emotes()
|
||||
var/list/fulllist = _slime_default_emotes
|
||||
fulllist += default_emotes
|
||||
return fulllist
|
||||
/mob/living/carbon/human
|
||||
var/mob/living/simple_mob/slime/promethean/stored_blob = null
|
||||
// Helpers - Unsafe, WILL perform change.
|
||||
/mob/living/carbon/human/proc/prommie_intoblob(force)
|
||||
if(!force && !isturf(loc))
|
||||
to_chat(src,"<span class='warning'>You can't change forms while inside something.</span>")
|
||||
return
|
||||
|
||||
handle_grasp() //It's possible to blob out before some key parts of the life loop. This results in things getting dropped at null. TODO: Fix the code so this can be done better.
|
||||
remove_micros(src, src) //Living things don't fare well in roblobs.
|
||||
if(buckled)
|
||||
buckled.unbuckle_mob()
|
||||
if(LAZYLEN(buckled_mobs))
|
||||
for(var/buckledmob in buckled_mobs)
|
||||
riding_datum.force_dismount(buckledmob)
|
||||
if(pulledby)
|
||||
pulledby.stop_pulling()
|
||||
stop_pulling()
|
||||
|
||||
//Record where they should go
|
||||
var/atom/creation_spot = drop_location()
|
||||
var/mob/living/simple_mob/slime/promethean/blob = null
|
||||
//Create our new blob
|
||||
if(!stored_blob)
|
||||
blob = new(creation_spot,src)
|
||||
blob.mood = ":3"
|
||||
qdel(blob.ai_holder)
|
||||
blob.ai_holder = null
|
||||
else
|
||||
blob = stored_blob
|
||||
blob.forceMove(creation_spot)
|
||||
|
||||
//Drop all our things
|
||||
var/list/things_to_drop = contents.Copy()
|
||||
var/list/things_to_not_drop = list(w_uniform,nif,l_store,r_store,wear_id,l_ear,r_ear) //And whatever else we decide for balancing.
|
||||
var/obj/item/clothing/head/new_hat
|
||||
var/has_hat = FALSE
|
||||
things_to_drop -= things_to_not_drop //Crunch the lists
|
||||
things_to_drop -= organs //Mah armbs
|
||||
things_to_drop -= internal_organs //Mah sqeedily spooch
|
||||
|
||||
for(var/obj/item/clothing/head/H in things_to_drop)
|
||||
if(H)
|
||||
new_hat = H
|
||||
has_hat = TRUE
|
||||
drop_from_inventory(H)
|
||||
things_to_drop -= H
|
||||
|
||||
for(var/obj/item/I in things_to_drop) //rip hoarders
|
||||
drop_from_inventory(I)
|
||||
|
||||
if(w_uniform && istype(w_uniform,/obj/item/clothing)) //No webbings tho. We do this after in case a suit was in the way
|
||||
var/obj/item/clothing/uniform = w_uniform
|
||||
if(LAZYLEN(uniform.accessories))
|
||||
for(var/obj/item/clothing/accessory/A in uniform.accessories)
|
||||
if(is_type_in_list(A, disallowed_protean_accessories))
|
||||
uniform.remove_accessory(null,A) //First param is user, but adds fingerprints and messages
|
||||
|
||||
//Size update
|
||||
blob.transform = matrix()*size_multiplier
|
||||
blob.size_multiplier = size_multiplier
|
||||
|
||||
if(l_hand) blob.prev_left_hand = l_hand //Won't save them if dropped above, but necessary if handdrop is disabled.
|
||||
if(r_hand) blob.prev_right_hand = r_hand
|
||||
|
||||
//Put our owner in it (don't transfer var/mind)
|
||||
blob.Weaken(2)
|
||||
blob.transforming = TRUE
|
||||
blob.ckey = ckey
|
||||
blob.transforming = FALSE
|
||||
blob.name = name
|
||||
blob.nutrition = nutrition
|
||||
blob.color = rgb(r_skin, g_skin, b_skin)
|
||||
playsound(src.loc, "sound/effects/slime_squish.ogg", 15)
|
||||
if(radiation > 0)
|
||||
blob.rad_glow = CLAMP(radiation,0,250)
|
||||
set_light(0)
|
||||
blob.set_light(max(1,min(5,radiation/15)), max(1,min(10,radiation/25)), blob.color)
|
||||
blob.handle_light()
|
||||
if(has_hat)
|
||||
blob.hat = new_hat
|
||||
new_hat.forceMove(src)
|
||||
|
||||
blob.update_icon()
|
||||
blob.verbs -= /mob/living/proc/ventcrawl // Absolutely not.
|
||||
blob.verbs -= /mob/living/simple_mob/proc/set_name // We already have a name.
|
||||
temporary_form = blob
|
||||
//Mail them to nullspace
|
||||
moveToNullspace()
|
||||
|
||||
//Message
|
||||
blob.visible_message("<b>[src.name]</b> squishes into their true form!")
|
||||
|
||||
//Transfer vore organs
|
||||
blob.vore_organs = vore_organs
|
||||
blob.vore_selected = vore_selected
|
||||
for(var/obj/belly/B as anything in vore_organs)
|
||||
B.forceMove(blob)
|
||||
B.owner = blob
|
||||
|
||||
//We can still speak our languages!
|
||||
blob.languages = languages.Copy()
|
||||
|
||||
//Return our blob in case someone wants it
|
||||
return blob
|
||||
|
||||
/mob/living/carbon/human/proc/prommie_outofblob(var/mob/living/simple_mob/slime/promethean/blob, force)
|
||||
if(!istype(blob))
|
||||
return
|
||||
|
||||
if(!force && !isturf(blob.loc))
|
||||
to_chat(blob,"<span class='warning'>You can't change forms while inside something.</span>")
|
||||
return
|
||||
|
||||
if(buckled)
|
||||
buckled.unbuckle_mob()
|
||||
if(LAZYLEN(buckled_mobs))
|
||||
for(var/buckledmob in buckled_mobs)
|
||||
riding_datum.force_dismount(buckledmob)
|
||||
if(pulledby)
|
||||
pulledby.stop_pulling()
|
||||
stop_pulling()
|
||||
|
||||
//Message
|
||||
blob.visible_message("<b>[src.name]</b> pulls together, forming a humanoid shape!")
|
||||
|
||||
//Record where they should go
|
||||
var/atom/reform_spot = blob.drop_location()
|
||||
|
||||
//Size update
|
||||
resize(blob.size_multiplier, FALSE, ignore_prefs = TRUE)
|
||||
|
||||
//Move them back where the blob was
|
||||
forceMove(reform_spot)
|
||||
|
||||
//Put our owner in it (don't transfer var/mind)
|
||||
Weaken(2)
|
||||
playsound(src.loc, "sound/effects/slime_squish.ogg", 15)
|
||||
transforming = TRUE
|
||||
ckey = blob.ckey
|
||||
transforming = FALSE
|
||||
blob.name = "Promethean Blob"
|
||||
var/obj/item/hat = blob.hat
|
||||
blob.drop_hat()
|
||||
drop_from_inventory(hat) // Hat me baby
|
||||
equip_to_slot_if_possible(hat, slot_head)
|
||||
nutrition = blob.nutrition // food good
|
||||
|
||||
|
||||
temporary_form = null
|
||||
var/blob_color = blob.color
|
||||
if(!blob_color)
|
||||
blob_color = rgb(255, 255, 255)
|
||||
shapeshifter_set_colour(blob_color)
|
||||
if(blob.rad_glow > 0)
|
||||
radiation = CLAMP(blob.rad_glow,0,250)
|
||||
set_light(max(1,min(5,radiation/15)), max(1,min(10,radiation/25)), species.get_flesh_colour(src))
|
||||
update_icon()
|
||||
|
||||
//Transfer vore organs
|
||||
vore_selected = blob.vore_selected
|
||||
for(var/obj/belly/B as anything in blob.vore_organs)
|
||||
B.forceMove(src)
|
||||
B.owner = src
|
||||
|
||||
//vore_organs.Cut()
|
||||
if(blob.prev_left_hand) put_in_l_hand(blob.prev_left_hand) //The restore for when reforming.
|
||||
if(blob.prev_right_hand) put_in_r_hand(blob.prev_right_hand)
|
||||
|
||||
Life(1) //Fix my blindness right meow //Has to be moved up here, there exists a circumstance where blob could be deleted without vore organs moving right.
|
||||
|
||||
//Get rid of friend blob
|
||||
stored_blob = blob
|
||||
blob.set_light(0)
|
||||
blob.moveToNullspace()
|
||||
//qdel(blob)
|
||||
|
||||
//Return ourselves in case someone wants it
|
||||
return src
|
||||
|
||||
/mob/living/simple_mob/slime/promethean/examine(mob/user)
|
||||
. = ..()
|
||||
if(hat)
|
||||
. += "They are wearing \a [hat]."
|
||||
|
||||
/mob/living/simple_mob/slime/promethean/say_understands(var/mob/other, var/datum/language/speaking = null)
|
||||
if(speaking?.name == LANGUAGE_PROMETHEAN) //Promethean and sign are both nonverbal, so won't work with the same trick as below, so let's check for them
|
||||
return TRUE
|
||||
else if(speaking?.name == LANGUAGE_SIGN)
|
||||
for(var/datum/language/L in humanform.languages)
|
||||
if(L.name == LANGUAGE_SIGN)
|
||||
return TRUE
|
||||
else if(humanform.say_understands(other, speaking)) //So they're speaking something other than promethean or sign, let's just ask our original mob if it understands
|
||||
return TRUE
|
||||
else return FALSE
|
||||
@@ -135,7 +135,7 @@
|
||||
O_LUNGS = /obj/item/organ/internal/lungs/unathi,
|
||||
O_LIVER = /obj/item/organ/internal/liver/unathi,
|
||||
O_BRAIN = /obj/item/organ/internal/brain/unathi,
|
||||
O_EYES = /obj/item/organ/internal/eyes,
|
||||
O_EYES = /obj/item/organ/internal/eyes/unathi,
|
||||
O_STOMACH = /obj/item/organ/internal/stomach/unathi,
|
||||
O_INTESTINE = /obj/item/organ/internal/intestine/unathi
|
||||
)
|
||||
@@ -250,13 +250,13 @@
|
||||
|
||||
has_organ = list( //No appendix.
|
||||
O_HEART = /obj/item/organ/internal/heart/tajaran,
|
||||
O_LUNGS = /obj/item/organ/internal/lungs,
|
||||
O_LUNGS = /obj/item/organ/internal/lungs/tajaran,
|
||||
O_VOICE = /obj/item/organ/internal/voicebox,
|
||||
O_LIVER = /obj/item/organ/internal/liver,
|
||||
O_LIVER = /obj/item/organ/internal/liver/tajaran,
|
||||
O_KIDNEYS = /obj/item/organ/internal/kidneys,
|
||||
O_BRAIN = /obj/item/organ/internal/brain,
|
||||
O_EYES = /obj/item/organ/internal/eyes/tajaran,
|
||||
O_STOMACH = /obj/item/organ/internal/stomach,
|
||||
O_STOMACH = /obj/item/organ/internal/stomach/tajaran,
|
||||
O_INTESTINE = /obj/item/organ/internal/intestine
|
||||
)
|
||||
|
||||
@@ -356,6 +356,23 @@
|
||||
BP_R_FOOT = list("path" = /obj/item/organ/external/foot/right)
|
||||
)
|
||||
|
||||
has_organ = list(
|
||||
O_HEART = /obj/item/organ/internal/heart/skrell,
|
||||
O_LUNGS = /obj/item/organ/internal/lungs/skrell,
|
||||
O_VOICE = /obj/item/organ/internal/voicebox/skrell,
|
||||
O_LIVER = /obj/item/organ/internal/liver/skrell,
|
||||
O_KIDNEYS = /obj/item/organ/internal/kidneys/skrell,
|
||||
O_BRAIN = /obj/item/organ/internal/brain/skrell,
|
||||
O_APPENDIX = /obj/item/organ/internal/appendix/skrell,
|
||||
O_SPLEEN = /obj/item/organ/internal/spleen/skrell,
|
||||
O_EYES = /obj/item/organ/internal/eyes/skrell,
|
||||
O_STOMACH = /obj/item/organ/internal/stomach/skrell,
|
||||
O_INTESTINE = /obj/item/organ/internal/intestine/skrell
|
||||
)
|
||||
|
||||
/datum/species/skrell/can_breathe_water()
|
||||
return TRUE
|
||||
|
||||
/datum/species/zaddat
|
||||
name = SPECIES_ZADDAT
|
||||
name_plural = "Zaddat"
|
||||
@@ -437,6 +454,11 @@
|
||||
/datum/mob_descriptor/height = 0,
|
||||
/datum/mob_descriptor/build = -1
|
||||
)
|
||||
|
||||
default_emotes = list(
|
||||
/decl/emote/audible/chirp
|
||||
)
|
||||
|
||||
/datum/species/zaddat/equip_survival_gear(var/mob/living/carbon/human/H)
|
||||
..()
|
||||
if(H.wear_suit) //get rid of job labcoats so they don't stop us from equipping the Shroud
|
||||
|
||||
@@ -480,3 +480,33 @@
|
||||
/datum/trait/neutral/thinner/apply(var/datum/species/S,var/mob/living/carbon/human/H)
|
||||
..(S,H)
|
||||
H.update_transform()
|
||||
|
||||
/datum/trait/neutral/dominate_predator
|
||||
name = "Dominate Predator"
|
||||
desc = "Allows you to attempt to take control of a predator while inside of their belly."
|
||||
cost = 0
|
||||
custom_only = FALSE
|
||||
|
||||
/datum/trait/neutral/dominate_predator/apply(var/datum/species/S,var/mob/living/carbon/human/H)
|
||||
..(S,H)
|
||||
H.verbs |= /mob/proc/dominate_predator
|
||||
|
||||
/datum/trait/neutral/dominate_prey
|
||||
name = "Dominate Prey"
|
||||
desc = "Connect to and dominate the brain of your prey."
|
||||
cost = 0
|
||||
custom_only = FALSE
|
||||
|
||||
/datum/trait/neutral/dominate_prey/apply(var/datum/species/S,var/mob/living/carbon/human/H)
|
||||
..(S,H)
|
||||
H.verbs |= /mob/living/proc/dominate_prey
|
||||
|
||||
/datum/trait/neutral/submit_to_prey
|
||||
name = "Submit To Prey"
|
||||
desc = "Allow prey's mind to control your own body."
|
||||
cost = 0
|
||||
custom_only = FALSE
|
||||
|
||||
/datum/trait/neutral/submit_to_prey/apply(var/datum/species/S,var/mob/living/carbon/human/H)
|
||||
..(S,H)
|
||||
H.verbs |= /mob/living/proc/lend_prey_control
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
/mob
|
||||
var/muffled = 0 // Used by muffling belly
|
||||
var/muffled = FALSE // Used by muffling belly
|
||||
var/forced_psay = FALSE // If true will prevent the user from speaking with normal say/emotes, and instead redirect these to a private speech mode with their predator.
|
||||
|
||||
/mob/living
|
||||
var/ooc_notes = null
|
||||
|
||||
@@ -155,7 +155,11 @@ var/list/channel_to_radio_key = new
|
||||
if(stat == DEAD && !forbid_seeing_deadchat)
|
||||
return say_dead(message)
|
||||
return
|
||||
|
||||
//VOREStation Addition Start
|
||||
if(forced_psay)
|
||||
psay(message)
|
||||
return
|
||||
//VOREStation Addition End
|
||||
//Parse the mode
|
||||
var/message_mode = parse_message_mode(message, "headset")
|
||||
|
||||
|
||||
@@ -32,8 +32,6 @@
|
||||
|
||||
// VOREStation Edit: Start
|
||||
. += attempt_vr(src,"examine_bellies_borg",args) //VOREStation Edit
|
||||
if(ooc_notes)
|
||||
. += "<span class = 'deptradio'>OOC Notes:</span> <a href='?src=\ref[src];ooc_notes=1'>\[View\]</a>"
|
||||
// VOREStation Edit: End
|
||||
|
||||
. += "*---------*"
|
||||
|
||||
@@ -783,6 +783,26 @@
|
||||
playsound(src.loc, 'sound/effects/clang2.ogg', 10, 1)
|
||||
visible_message("<span class='warning'>[H] taps [src].</span>")
|
||||
return
|
||||
if(I_GRAB)
|
||||
if(is_vore_predator(H) && H.devourable && src.feeding && src.devourable)
|
||||
var/switchy = tgui_alert(H, "Do you wish to eat [src] or feed yourself to them?", "Feed or Eat",list("Nevermind!", "Eat","Feed"))
|
||||
switch(switchy)
|
||||
if("Nevermind!")
|
||||
return
|
||||
if("Eat")
|
||||
feed_grabbed_to_self(H, src)
|
||||
return
|
||||
if("Feed")
|
||||
H.feed_self_to_grabbed(H, src)
|
||||
return
|
||||
if(is_vore_predator(H) && src.devourable)
|
||||
if(tgui_alert(H, "Do you wish to eat [src]?", "Eat?",list("Nevermind!", "Yes!")) == "Yes!")
|
||||
feed_grabbed_to_self(H, src)
|
||||
return
|
||||
if(H.devourable && src.feeding)
|
||||
if(tgui_alert(H, "Do you wish to feed yourself to [src]?", "Feed?",list("Nevermind!", "Yes!")) == "Yes!")
|
||||
H.feed_self_to_grabbed(H, src)
|
||||
return
|
||||
|
||||
//Robots take half damage from basic attacks.
|
||||
/mob/living/silicon/robot/attack_generic(var/mob/user, var/damage, var/attack_message)
|
||||
|
||||
@@ -768,6 +768,7 @@ var/global/list/robot_modules = list(
|
||||
"Pneuma" = "pneuma-Miner",
|
||||
"Tower" = "drider-Miner"
|
||||
)
|
||||
supported_upgrades = list(/obj/item/borg/upgrade/pka, /obj/item/borg/upgrade/diamonddrill)
|
||||
|
||||
/obj/item/weapon/robot_module/robot/miner/Initialize()
|
||||
|
||||
@@ -783,8 +784,12 @@ var/global/list/robot_modules = list(
|
||||
src.modules += new /obj/item/weapon/storage/bag/sheetsnatcher/borg(src)
|
||||
src.modules += new /obj/item/weapon/gripper/miner(src)
|
||||
src.modules += new /obj/item/weapon/mining_scanner(src)
|
||||
src.emag = new /obj/item/weapon/pickaxe/plasmacutter(src)
|
||||
src.emag = new /obj/item/weapon/pickaxe/diamonddrill(src)
|
||||
// New Emag gear for the minebots!
|
||||
src.emag = new /obj/item/weapon/kinetic_crusher/machete/dagger(src)
|
||||
|
||||
// No reason for these, upgrade modules replace them.
|
||||
//src.emag = new /obj/item/weapon/pickaxe/plasmacutter(src)
|
||||
//src.emag = new /obj/item/weapon/pickaxe/diamonddrill(src)
|
||||
|
||||
/obj/item/weapon/robot_module/robot/research
|
||||
name = "research module"
|
||||
@@ -805,6 +810,7 @@ var/global/list/robot_modules = list(
|
||||
"Pneuma" = "pneuma-Research",
|
||||
"Tower" = "drider-Research"
|
||||
)
|
||||
supported_upgrades = list(/obj/item/borg/upgrade/advrped)
|
||||
|
||||
/obj/item/weapon/robot_module/robot/research/Initialize()
|
||||
|
||||
|
||||
@@ -189,6 +189,7 @@
|
||||
networks = list(NETWORK_SECURITY)
|
||||
pto_type = PTO_SECURITY
|
||||
can_be_pushed = 0
|
||||
supported_upgrades = list(/obj/item/borg/upgrade/tasercooler)
|
||||
|
||||
/obj/item/weapon/robot_module/robot/knine/New(var/mob/living/silicon/robot/R)
|
||||
src.modules += new /obj/item/weapon/handcuffs/cyborg(src) //You need cuffs to be a proper sec borg!
|
||||
@@ -466,6 +467,7 @@
|
||||
channels = list("Science" = 1)
|
||||
pto_type = PTO_SCIENCE
|
||||
can_be_pushed = 0
|
||||
supported_upgrades = list(/obj/item/borg/upgrade/advrped)
|
||||
|
||||
/obj/item/weapon/robot_module/robot/science/New(var/mob/living/silicon/robot/R)
|
||||
src.modules += new /obj/item/weapon/dogborg/jaws/small(src)
|
||||
@@ -774,6 +776,7 @@
|
||||
channels = list("Supply" = 1)
|
||||
pto_type = PTO_CARGO
|
||||
can_be_pushed = 0
|
||||
supported_upgrades = list(/obj/item/borg/upgrade/pka, /obj/item/borg/upgrade/diamonddrill)
|
||||
|
||||
/obj/item/weapon/robot_module/robot/kmine/New(var/mob/living/silicon/robot/R)
|
||||
src.modules += new /obj/item/borg/sight/material(src)
|
||||
@@ -785,8 +788,12 @@
|
||||
src.modules += new /obj/item/weapon/gripper/miner(src)
|
||||
src.modules += new /obj/item/weapon/mining_scanner(src)
|
||||
src.modules += new /obj/item/weapon/dogborg/jaws/small(src)
|
||||
src.emag = new /obj/item/weapon/pickaxe/plasmacutter(src)
|
||||
src.emag = new /obj/item/weapon/pickaxe/diamonddrill(src)
|
||||
// New Emag gear for the minebots!
|
||||
src.emag = new /obj/item/weapon/kinetic_crusher/machete/dagger(src)
|
||||
|
||||
// No reason for these, upgrade modules replace them.
|
||||
//src.emag = new /obj/item/weapon/pickaxe/plasmacutter(src)
|
||||
//src.emag = new /obj/item/weapon/pickaxe/diamonddrill(src)
|
||||
|
||||
var/datum/matter_synth/water = new /datum/matter_synth(500)
|
||||
water.name = "Water reserves"
|
||||
|
||||
@@ -30,3 +30,12 @@
|
||||
. = ..()
|
||||
if(. == INITIALIZE_HINT_NORMAL)
|
||||
modules += new /obj/item/weapon/melee/energy/sword/ionic_rapier/lance(src)
|
||||
|
||||
//Swarm Disabler Module
|
||||
/obj/item/weapon/gun/energy/taser/mounted/cyborg/swarm
|
||||
name = "disabler"
|
||||
desc = "An archaic device which attacks the target's nervous-system or control circuits."
|
||||
icon_state = "disabler"
|
||||
projectile_type = /obj/item/projectile/beam/stun/disabler
|
||||
charge_cost = 800
|
||||
recharge_time = 0.5 SECONDS
|
||||
|
||||
@@ -137,7 +137,7 @@
|
||||
if(post_restless_tired)
|
||||
post_restless_tired--
|
||||
return
|
||||
if(!restless && prob(0.5))
|
||||
if(prob(0.5))
|
||||
handle_restless()
|
||||
|
||||
/mob/living/simple_mob/vore/overmap/spacewhale/proc/handle_restless()
|
||||
@@ -149,9 +149,7 @@
|
||||
ai_holder.base_wander_delay = initial(ai_holder.base_wander_delay)
|
||||
ai_holder.wander = FALSE
|
||||
post_restless_tired = 250
|
||||
if(child_om_marker.known == TRUE)
|
||||
child_om_marker.icon_state = "space_whale"
|
||||
visible_message("<span class='notice'>\The [child_om_marker.name] settles down.</span>")
|
||||
update_icon()
|
||||
else
|
||||
restless = TRUE
|
||||
hazard_pickup_chance *= 1.5
|
||||
@@ -159,9 +157,18 @@
|
||||
movement_cooldown = 1
|
||||
ai_holder.base_wander_delay = 2
|
||||
ai_holder.wander_delay = 2
|
||||
if(child_om_marker.known == TRUE)
|
||||
ai_holder.wander = TRUE
|
||||
update_icon()
|
||||
|
||||
/mob/living/simple_mob/vore/overmap/spacewhale/update_icon()
|
||||
. = ..()
|
||||
if(child_om_marker.known == TRUE)
|
||||
if(restless)
|
||||
child_om_marker.icon_state = "space_whale_restless"
|
||||
visible_message("<span class='notice'>\The [child_om_marker.name] ripples excitedly.</span>")
|
||||
else
|
||||
child_om_marker.icon_state = "space_whale"
|
||||
visible_message("<span class='notice'>\The [child_om_marker.name] settles down.</span>")
|
||||
|
||||
/datum/ai_holder/simple_mob/melee/spacewhale
|
||||
hostile = TRUE
|
||||
@@ -182,8 +189,6 @@
|
||||
if(stance == STANCE_IDLE)
|
||||
W.hazard_pickup_chance = initial(W.hazard_pickup_chance)
|
||||
W.hazard_drop_chance = initial(W.hazard_drop_chance)
|
||||
W.movement_cooldown = 50
|
||||
base_wander_delay = 50
|
||||
W.restless = FALSE
|
||||
W.handle_restless()
|
||||
W.movement_cooldown = initial(W.movement_cooldown)
|
||||
|
||||
@@ -140,7 +140,8 @@ var/list/_slime_default_emotes = list(
|
||||
var/hat_state = hat.item_state ? hat.item_state : hat.icon_state
|
||||
var/image/I = image('icons/inventory/head/mob.dmi', src, hat_state)
|
||||
I.pixel_y = -7 // Slimes are small.
|
||||
I.appearance_flags = RESET_COLOR
|
||||
I.appearance_flags = RESET_COLOR | KEEP_APART
|
||||
I.blend_mode = BLEND_OVERLAY
|
||||
add_overlay(I)
|
||||
|
||||
// Controls the 'mood' overlay. Overrided in subtypes for specific behaviour.
|
||||
|
||||
@@ -16,7 +16,7 @@
|
||||
melee_damage_upper = 5
|
||||
|
||||
meat_amount = 10
|
||||
meat_type = /obj/item/weapon/reagent_containers/food/snacks/cookiesnack
|
||||
meat_type = /obj/item/weapon/reagent_containers/food/snacks/cookie
|
||||
|
||||
say_list_type = /datum/say_list/cookiegirl
|
||||
ai_holder_type = /datum/ai_holder/simple_mob/passive/cookiegirl
|
||||
|
||||
@@ -0,0 +1,459 @@
|
||||
///// A mob that gets used when prey dominate predators. Will automatically delete itself if it's not inside a mob.
|
||||
|
||||
/mob/living/dominated_brain
|
||||
name = "dominated brain"
|
||||
desc = "Someone who has taken a back seat within their own body."
|
||||
icon = 'icons/obj/surgery.dmi'
|
||||
icon_state = "brain1"
|
||||
forced_psay = TRUE
|
||||
var/mob/living/prey_body //The body of the person who dominated the brain
|
||||
var/prey_ckey //The ckey of the person who dominated the brain
|
||||
var/prey_name //In case the body is missing. ;3c
|
||||
var/list/prey_langs = list()
|
||||
var/mob/living/pred_body //The body of the person who was dominated
|
||||
var/pred_ckey //The ckey of the person who was dominated
|
||||
var/pred_ooc_notes
|
||||
var/prey_ooc_notes
|
||||
|
||||
/mob/living/dominated_brain/New(loc, var/mob/living/pred, preyname, var/mob/living/prey)
|
||||
. = ..()
|
||||
prey_name = preyname
|
||||
if(prey)
|
||||
prey_body = prey
|
||||
pred_body = pred
|
||||
|
||||
/mob/living/dominated_brain/Initialize()
|
||||
if(!isliving(loc))
|
||||
qdel(src)
|
||||
return
|
||||
. = ..()
|
||||
lets_register_our_signals()
|
||||
verbs |= /mob/living/dominated_brain/proc/resist_control
|
||||
|
||||
/mob/living/dominated_brain/Life()
|
||||
. = ..()
|
||||
if(!isliving(loc))
|
||||
qdel(src)
|
||||
if(!ckey)
|
||||
qdel(src)
|
||||
|
||||
/mob/living/dominated_brain/say_understands(var/mob/other, var/datum/language/speaking = null)
|
||||
if(pred_body.say_understands(other, speaking))
|
||||
return TRUE
|
||||
else return FALSE
|
||||
|
||||
/mob/living/dominated_brain/proc/lets_register_our_signals()
|
||||
if(prey_body)
|
||||
RegisterSignal(prey_body, COMSIG_PARENT_QDELETING, .proc/prey_was_deleted, TRUE)
|
||||
RegisterSignal(pred_body, COMSIG_PARENT_QDELETING, .proc/pred_was_deleted, TRUE)
|
||||
|
||||
/mob/living/dominated_brain/proc/lets_unregister_our_signals()
|
||||
prey_was_deleted()
|
||||
pred_was_deleted()
|
||||
|
||||
/mob/living/dominated_brain/proc/prey_was_deleted()
|
||||
if(prey_body)
|
||||
UnregisterSignal(prey_body, COMSIG_PARENT_QDELETING)
|
||||
prey_body = null
|
||||
|
||||
/mob/living/dominated_brain/proc/pred_was_deleted()
|
||||
if(pred_body)
|
||||
UnregisterSignal(pred_body, COMSIG_PARENT_QDELETING)
|
||||
pred_body = null
|
||||
|
||||
/mob/living/dominated_brain/Destroy()
|
||||
lets_unregister_our_signals()
|
||||
. = ..()
|
||||
|
||||
/mob/living/dominated_brain/process_resist()
|
||||
//Resisting control by an alien mind.
|
||||
if(pred_body.ckey == pred_ckey)
|
||||
dominate_predator()
|
||||
return
|
||||
if(pred_ckey == ckey && pred_body.prey_controlled)
|
||||
if(tgui_alert(src, "Do you want to wrest control over your body back from \the [prey_name]?", "Regain Control",list("No","Yes")) != "Yes")
|
||||
return
|
||||
|
||||
to_chat(src, "<span class='danger'>You begin to resist \the [prey_name]'s control!!!</span>")
|
||||
to_chat(pred_body, "<span class='danger'>You feel the captive mind of [src] begin to resist your control.</span>")
|
||||
|
||||
if(do_after(src, 10 SECONDS, exclusive = TRUE))
|
||||
restore_control()
|
||||
else
|
||||
to_chat(src, "<span class='notice'>Your attempt to regain control has been interrupted...</span>")
|
||||
to_chat(pred_body, "<span class='notice'>The dominant sensation fades away...</span>")
|
||||
else
|
||||
to_chat(src, "<span class='warning'>\The [pred_body] is already dominated, and cannot be controlled at this time.</span>")
|
||||
..()
|
||||
|
||||
/mob/living/dominated_brain/proc/restore_control(ask = TRUE)
|
||||
|
||||
if(ask && disconnect_time || client && ((client.inactivity / 10) / 60 > 10))
|
||||
if(tgui_alert(src, "Your predator's mind does not seem to be active presently. Releasing control in this state may leave you stuck in whatever state you find yourself in. Are you sure?", "Release Control",list("No","Yes")) != "Yes")
|
||||
return
|
||||
var/mob/living/prey_goes_here
|
||||
|
||||
if(prey_body && prey_body.loc.loc == pred_body) //The prey body exists and is here, let's handle the prey!
|
||||
|
||||
prey_goes_here = prey_body
|
||||
|
||||
else if(prey_body) //It exists, but it's not here, let's spawn them a temporary home.
|
||||
var/mob/living/dominated_brain/ndb = new /mob/living/dominated_brain(pred_body, pred_body, prey_name, prey_body)
|
||||
ndb.name = prey_name
|
||||
ndb.prey_ckey = src.prey_ckey
|
||||
ndb.pred_ckey = src.pred_ckey
|
||||
|
||||
prey_goes_here = ndb
|
||||
prey_goes_here.real_name = src.prey_name
|
||||
src.languages -= src.temp_languages
|
||||
prey_goes_here.languages |= src.prey_langs
|
||||
prey_goes_here.ooc_notes = prey_ooc_notes
|
||||
prey_goes_here.verbs |= /mob/living/dominated_brain/proc/cease_this_foolishness
|
||||
|
||||
|
||||
else //The prey body does not exist, let's put them in the back seat instead!
|
||||
var/mob/living/dominated_brain/ndb = new /mob/living/dominated_brain(pred_body, pred_body, prey_name)
|
||||
ndb.name = prey_name
|
||||
ndb.prey_ckey = src.prey_ckey
|
||||
ndb.pred_ckey = src.pred_ckey
|
||||
|
||||
prey_goes_here = ndb
|
||||
src.languages -= src.temp_languages
|
||||
prey_goes_here.languages |= src.prey_langs
|
||||
prey_goes_here.real_name = src.prey_name
|
||||
prey_goes_here.ooc_notes = prey_ooc_notes
|
||||
|
||||
///////////////////
|
||||
|
||||
// Handle Pred
|
||||
pred_body.verbs -= /mob/proc/release_predator
|
||||
|
||||
//Now actually put the people in the mobs
|
||||
prey_goes_here.ckey = src.prey_ckey
|
||||
pred_body.ckey = src.pred_ckey
|
||||
pred_body.ooc_notes = pred_ooc_notes
|
||||
log_and_message_admins("[pred_body] is now controlled by [pred_body.ckey]. They were restored to control through prey domination, and had been controlled by [prey_ckey].")
|
||||
pred_body.absorb_langs()
|
||||
pred_body.prey_controlled = FALSE
|
||||
qdel(src)
|
||||
|
||||
/mob/living/proc/absorb_langs() //This should be called on the predator in the exchange
|
||||
var/list/langlist = list()
|
||||
|
||||
languages -= temp_languages
|
||||
LAZYCLEARLIST(src.temp_languages)
|
||||
src.temp_languages = list()
|
||||
for(var/mob/living/L in contents)
|
||||
if(istype(L,/mob/living/dominated_brain))
|
||||
if(L.ckey)
|
||||
langlist |= L.languages
|
||||
for(var/b in vore_organs)
|
||||
for(var/mob/living/L in b)
|
||||
if(isliving(L))
|
||||
if(L.ckey)
|
||||
langlist |= L.languages
|
||||
if(langlist.len)
|
||||
langlist -= languages
|
||||
temp_languages |= langlist
|
||||
languages |= langlist
|
||||
|
||||
//Welcome to the adapted borer code.
|
||||
/mob/proc/dominate_predator()
|
||||
set category = "Abilities"
|
||||
set name = "Dominate Predator"
|
||||
set desc = "Connect to and dominate the brain of your predator."
|
||||
|
||||
var/mob/living/pred
|
||||
var/mob/living/prey = src
|
||||
if(isbelly(prey.loc))
|
||||
pred = loc.loc
|
||||
else if(isliving(prey.loc))
|
||||
pred = loc
|
||||
else
|
||||
to_chat(prey, "<span class='notice'>You are not inside anyone.</span>")
|
||||
return
|
||||
|
||||
if(prey.stat == DEAD)
|
||||
to_chat(prey, "<span class='warning'>You cannot do that in your current state.</span>")
|
||||
return
|
||||
|
||||
if(!pred.ckey)
|
||||
to_chat(prey, "<span class='notice'>\The [pred] isn't able to be dominated.</span>")
|
||||
return
|
||||
if(prey.prey_controlled)
|
||||
to_chat(prey, "<span class='warning'>You are already controlling someone, you can't control anyone else at this time.</span>")
|
||||
return
|
||||
if(pred.prey_controlled)
|
||||
to_chat(prey, "<span class='warning'>\The [pred] is already dominated, and cannot be controlled at this time.</span>")
|
||||
return
|
||||
if(ishuman(pred))
|
||||
var/mob/living/carbon/human/h = pred
|
||||
if(h.resleeve_lock && ckey != h.resleeve_lock)
|
||||
to_chat(src, "<span class='warning'>\The [h] cannot be impersonated!</span>")
|
||||
return
|
||||
if(tgui_alert(prey, "You are attempting to take over [pred], are you sure? Ensure that their preferences align with this kind of play.", "Take Over Predator",list("No","Yes")) != "Yes")
|
||||
return
|
||||
to_chat(prey, "<span class='notice'>You attempt to exert your control over \the [pred]...</span>")
|
||||
log_admin("[key_name_admin(prey)] attempted to take over [pred].")
|
||||
if(tgui_alert(pred, "\The [prey] has elected to attempt to take control of you. Is this something you will allow to happen?", "Allow Prey Domination",list("No","Yes")) != "Yes")
|
||||
to_chat(prey, "<span class='warning'>\The [pred] declined your request for control.</span>")
|
||||
return
|
||||
if(tgui_alert(pred, "Are you sure? If you should decide to revoke this, you will have the ability to do so in your 'Abilities' tab.", "Allow Prey Domination",list("No","Yes")) != "Yes")
|
||||
return
|
||||
to_chat(pred, "<span class='warning'>You can feel the will of another overwriting your own, control of your body being sapped away from you...</span>")
|
||||
to_chat(prey, "<span class='warning'>You can feel the will of your host diminishing as you exert your will over them!</span>")
|
||||
if(!do_after(prey, 10 SECONDS, exclusive = TRUE))
|
||||
to_chat(prey, "<span class='notice'>Your attempt to regain control has been interrupted...</span>")
|
||||
to_chat(pred, "<span class='notice'>The dominant sensation fades away...</span>")
|
||||
return
|
||||
|
||||
to_chat(prey, "<span class='danger'>You plunge your conciousness into \the [pred], assuming control over their very body, leaving your own behind within \the [pred]'s [loc].</span>")
|
||||
to_chat(pred, "<span class='danger'>You feel your body move on its own, as you are pushed to the background, and an alien consciousness displaces yours.</span>")
|
||||
var/mob/living/dominated_brain/pred_brain
|
||||
var/delete_source = FALSE
|
||||
if(istype(prey, /mob/living/dominated_brain))
|
||||
var/mob/living/dominated_brain/punished_prey = prey
|
||||
if(punished_prey.prey_body)
|
||||
pred_brain = new /mob/living/dominated_brain(pred, pred, name, punished_prey.prey_body)
|
||||
else
|
||||
pred_brain = new /mob/living/dominated_brain(pred, pred, name) //We have to play musical chairs with 3 bodies, or everyone gets d/ced
|
||||
delete_source = TRUE
|
||||
else
|
||||
pred_brain = new /mob/living/dominated_brain(pred, pred, name, prey)
|
||||
|
||||
pred_brain.prey_ooc_notes = prey.ooc_notes
|
||||
pred_brain.pred_ooc_notes = pred.ooc_notes
|
||||
pred_brain.name = pred.name
|
||||
var/list/preylangs = list()
|
||||
preylangs |= prey.languages
|
||||
preylangs -= prey.temp_languages
|
||||
pred_brain.prey_langs |= preylangs
|
||||
pred_brain.prey_ckey = prey.ckey
|
||||
pred_brain.pred_ckey = pred.ckey
|
||||
pred_brain.pred_body.absorb_langs()
|
||||
pred.ooc_notes = pred_brain.prey_ooc_notes
|
||||
|
||||
pred.verbs |= /mob/proc/release_predator
|
||||
|
||||
//Now actually put the people in the mobs
|
||||
pred_brain.ckey = pred_brain.pred_ckey
|
||||
pred_brain.real_name = pred.real_name
|
||||
pred.ckey = pred_brain.prey_ckey
|
||||
pred.prey_controlled = TRUE
|
||||
log_and_message_admins("[pred] is now controlled by [pred.ckey], they were taken over via prey domination, and were originally controlled by [pred_brain.pred_ckey].")
|
||||
if(delete_source)
|
||||
qdel(prey)
|
||||
|
||||
/mob/proc/release_predator()
|
||||
set category = "Abilities"
|
||||
set name = "Restore Control"
|
||||
set desc = "Release control of your predator's body."
|
||||
|
||||
for(var/I in contents)
|
||||
if(istype(I, /mob/living/dominated_brain))
|
||||
var/mob/living/dominated_brain/db = I
|
||||
if(db.ckey == db.pred_ckey)
|
||||
to_chat(src, "<span class='notice'>You ease off of your control, releasing \the [db].</span>")
|
||||
to_chat(db, "<span class='notice'>You feel the alien presence fade, and restore control of your body to you of their own will...</span>")
|
||||
db.restore_control()
|
||||
return
|
||||
else
|
||||
continue
|
||||
to_chat(src, "<span class='danger'>You haven't been taken over, and shouldn't have this verb. I'll clean that up for you. Report this on the github, it is a bug.</span>")
|
||||
verbs -= /mob/proc/release_predator
|
||||
|
||||
/mob/living/dominated_brain/proc/resist_control()
|
||||
set category = "Abilities"
|
||||
set name = "Resist Control"
|
||||
set desc = "Attempt to resist control."
|
||||
if(pred_body.ckey == pred_ckey)
|
||||
dominate_predator()
|
||||
return
|
||||
if(pred_ckey == ckey && pred_body.prey_controlled)
|
||||
to_chat(src, "<span class='danger'>You begin to resist \the [prey_name]'s control!!!</span>")
|
||||
to_chat(pred_body, "<span class='danger'>You feel the captive mind of [src] begin to resist your control.</span>")
|
||||
|
||||
if(do_after(src, 10 SECONDS, exclusive = TRUE))
|
||||
restore_control()
|
||||
else
|
||||
to_chat(src, "<span class='notice'>Your attempt to regain control has been interrupted...</span>")
|
||||
to_chat(pred_body, "<span class='notice'>The dominant sensation fades away...</span>")
|
||||
else
|
||||
to_chat(src, "<span class='warning'>\The [pred_body] is already dominated, and cannot be controlled at this time.</span>")
|
||||
|
||||
/mob/living/proc/dominate_prey()
|
||||
set category = "Abilities"
|
||||
set name = "Dominate Prey"
|
||||
set desc = "Connect to and dominate the brain of your prey."
|
||||
|
||||
var/list/possible_mobs = list()
|
||||
for(var/obj/belly/B in src.vore_organs)
|
||||
for(var/mob/living/L in B)
|
||||
if(isliving(L) && L.ckey)
|
||||
possible_mobs |= L
|
||||
else
|
||||
continue
|
||||
if(!possible_mobs)
|
||||
to_chat(src, "<span class='warning'>There are no valid targets inside of you.</span>")
|
||||
return
|
||||
var/input = tgui_input_list(src, "Select a mob to dominate:", "Dominate Prey", possible_mobs)
|
||||
if(!input)
|
||||
return
|
||||
var/mob/living/M = input
|
||||
if(tgui_alert(src, "You selected [M] to attempt to dominate. Are you sure?", "Dominate Prey",list("No","Yes")) != "Yes")
|
||||
return
|
||||
log_admin("[key_name_admin(src)] offered to use dominate prey on [M] ([M.ckey]).")
|
||||
to_chat(src, "<span class='warning'>Attempting to dominate and gather \the [M]'s mind...</span>")
|
||||
if(tgui_alert(M, "\The [src] has elected collect your mind into their own. Is this something you will allow to happen?", "Allow Dominate Prey",list("No","Yes")) != "Yes")
|
||||
to_chat(src, "<span class='warning'>\The [M] has declined your Dominate Prey attempt.</span>")
|
||||
return
|
||||
if(tgui_alert(M, "Are you sure? You can only undo this while your body is inside of [src]. (You can resist, or use the resist verb in the abilities tab)", "Allow Dominate Prey",list("No","Yes")) != "Yes")
|
||||
to_chat(src, "<span class='warning'>\The [M] has declined your Dominate Prey attempt.</span>")
|
||||
return
|
||||
to_chat(M, "<span class='warning'>You can feel the will of another pulling you away from your body...</span>")
|
||||
to_chat(src, "<span class='warning'>You can feel the will of your prey diminishing as you gather them!</span>")
|
||||
|
||||
if(!do_after(src, 10 SECONDS, exclusive = TRUE))
|
||||
to_chat(M, "<span class='notice'>The alien presence fades, and you are left along in your body...</span>")
|
||||
to_chat(src, "<span class='notice'>Your attempt to gather [M]'s mind has been interrupted.</span>")
|
||||
return
|
||||
if(!isbelly(M.loc))
|
||||
to_chat(M, "<span class='notice'>The alien presence fades, and you are left along in your body...</span>")
|
||||
to_chat(src, "<span class='notice'>Your attempt to gather [M]'s mind has been interrupted.</span>")
|
||||
return
|
||||
|
||||
var/mob/living/dominated_brain/db = new /mob/living/dominated_brain(src, src, M.name, M)
|
||||
|
||||
|
||||
db.name = M.name
|
||||
db.prey_ckey = M.ckey
|
||||
db.pred_ckey = src.ckey
|
||||
|
||||
|
||||
db.real_name = M.real_name
|
||||
|
||||
M.languages -= M.temp_languages
|
||||
db.languages |= M.languages
|
||||
db.ooc_notes = M.ooc_notes
|
||||
db.verbs |= /mob/living/dominated_brain/proc/cease_this_foolishness
|
||||
|
||||
absorb_langs()
|
||||
|
||||
db.ckey = db.prey_ckey
|
||||
log_admin("[db] ([db.ckey]) has agreed to [src]'s dominate prey attempt, and so no longer occupies their original body.")
|
||||
to_chat(src, "<span class='notice'>You feel your mind expanded as [M] is incorporated into you.</span>")
|
||||
to_chat(M, "<span class='warning'>Your mind is gathered into \the [src], becoming part of them...</span>")
|
||||
|
||||
/mob/living/dominated_brain/proc/cease_this_foolishness()
|
||||
set category = "Abilities"
|
||||
set name = "Return to Body"
|
||||
set desc = "If your body is inside of your predator still, attempts to re-insert yourself into it."
|
||||
|
||||
if(prey_body && prey_body.loc.loc == pred_body)
|
||||
to_chat(src, "<span class='notice'>You exert your will and attempt to return to yout body!!!</span>")
|
||||
to_chat(pred_body, "<span class='warning'>\The [src] resists your hold and attempts to return to their body!</span>")
|
||||
if(do_after(src, 10 SECONDS, exclusive = TRUE))
|
||||
if(prey_body && prey_body.loc.loc == pred_body)
|
||||
|
||||
prey_body.ckey = prey_ckey
|
||||
pred_body.absorb_langs()
|
||||
to_chat(src, "<span class='warning'>Your connection to [pred_body] fades, and you awaken back in your own body!</span>")
|
||||
to_chat(pred_body, "<span class='warning'>You feel as though a piece of yourself is missing, as \the [src] returns to their body.</span>")
|
||||
log_admin("[src] ([src.ckey]) has returned to their body, [prey_body].")
|
||||
qdel(src)
|
||||
else
|
||||
to_chat(src, "<span class='warning'>Your attempt to regain your body has been interrupted...</span>")
|
||||
else
|
||||
to_chat(src, "<span class='warning'>Your attempt to regain your body has been interrupted...</span>")
|
||||
else if(prey_body)
|
||||
to_chat(src, "<span class='warning'>You can sense your body... but it is not contained within [pred_body]... You cannot return to it at this time.</span>")
|
||||
else
|
||||
to_chat(src, "<span class='warning'>Your body seems to no longer exist, so, you cannot return to it.</span>")
|
||||
verbs -= /mob/living/dominated_brain/proc/cease_this_foolishness
|
||||
|
||||
/mob/living/proc/lend_prey_control()
|
||||
set category = "Abilities"
|
||||
set name = "Give Prey Control"
|
||||
set desc = "Allow prey control of your body."
|
||||
|
||||
var/list/possible_mobs = list()
|
||||
for(var/obj/belly/B in src.vore_organs)
|
||||
for(var/mob/living/L in B)
|
||||
if(isliving(L) && L.ckey)
|
||||
possible_mobs |= L
|
||||
else
|
||||
continue
|
||||
if(!possible_mobs)
|
||||
to_chat(src, "<span class='warning'>There are no valid targets inside of you.</span>")
|
||||
return
|
||||
var/input = tgui_input_list(src, "Select a mob to give control:", "Give Prey Control", possible_mobs)
|
||||
if(!input)
|
||||
return
|
||||
var/mob/living/prey = input
|
||||
var/mob/living/pred = src
|
||||
|
||||
if(prey.stat == DEAD)
|
||||
to_chat(prey, "<span class='warning'>You cannot do that to this prey.</span>")
|
||||
return
|
||||
|
||||
if(!prey.ckey)
|
||||
to_chat(prey, "<span class='notice'>\The [prey] cannot take control.</span>")
|
||||
return
|
||||
if(prey.prey_controlled)
|
||||
to_chat(prey, "<span class='warning'>\The [prey] is already under someone's control and cannot be given control of your body.</span>")
|
||||
return
|
||||
if(pred.prey_controlled)
|
||||
to_chat(prey, "<span class='warning'>You are already controlling someone's body.</span>")
|
||||
return
|
||||
if(tgui_alert(pred, "You are attempting to give [prey] control over you, are you sure? Ensure that their preferences align with this kind of play.", "Give Prey Control",list("No","Yes")) != "Yes")
|
||||
return
|
||||
to_chat(pred, "<span class='notice'>You attempt to give your control over to \the [prey]...</span>")
|
||||
log_admin("[key_name_admin(pred)] attempted to give control to [prey].")
|
||||
if(tgui_alert(prey, "\The [pred] has elected to attempt to give you control of them. Is this something you will allow to happen?", "Allow Prey Domination",list("No","Yes")) != "Yes")
|
||||
to_chat(pred, "<span class='warning'>\The [prey] declined your request for control.</span>")
|
||||
return
|
||||
if(tgui_alert(prey, "Are you sure? If you should decide to revoke this, you will have the ability to do so in your 'Abilities' tab.", "Allow Prey Domination",list("No","Yes")) != "Yes")
|
||||
return
|
||||
to_chat(pred, "<span class='warning'>You diminish your will, reducing it and allowing will of your prey to take over...</span>")
|
||||
to_chat(prey, "<span class='warning'>You can feel the will of your host diminishing as you are given control over them!</span>")
|
||||
if(!do_after(pred, 10 SECONDS, exclusive = TRUE))
|
||||
to_chat(pred, "<span class='notice'>Your attempt to share control has been interrupted...</span>")
|
||||
to_chat(prey, "<span class='notice'>The dominant sensation fades away...</span>")
|
||||
return
|
||||
|
||||
to_chat(prey, "<span class='danger'>You plunge your conciousness into \the [pred], assuming control over their very body, leaving your own behind within \the [pred]'s [loc].</span>")
|
||||
to_chat(pred, "<span class='danger'>You feel your body move on its own, as you move to the background, and an alien consciousness displaces yours.</span>")
|
||||
var/mob/living/dominated_brain/pred_brain
|
||||
var/delete_source = FALSE
|
||||
if(istype(prey, /mob/living/dominated_brain))
|
||||
var/mob/living/dominated_brain/punished_prey = prey
|
||||
if(punished_prey.prey_body)
|
||||
pred_brain = new /mob/living/dominated_brain(pred, pred, name, punished_prey.prey_body)
|
||||
else
|
||||
pred_brain = new /mob/living/dominated_brain(pred, pred, name) //We have to play musical chairs with 3 bodies, or everyone gets d/ced
|
||||
delete_source = TRUE
|
||||
else
|
||||
pred_brain = new /mob/living/dominated_brain(pred, pred, name, prey)
|
||||
|
||||
pred_brain.prey_ooc_notes = prey.ooc_notes
|
||||
pred_brain.pred_ooc_notes = pred.ooc_notes
|
||||
pred_brain.name = pred.name
|
||||
var/list/preylangs = list()
|
||||
preylangs |= prey.languages
|
||||
preylangs -= prey.temp_languages
|
||||
pred_brain.prey_langs |= preylangs
|
||||
pred_brain.prey_ckey = prey.ckey
|
||||
pred_brain.pred_ckey = pred.ckey
|
||||
pred_brain.pred_body.absorb_langs()
|
||||
pred.ooc_notes = pred_brain.prey_ooc_notes
|
||||
|
||||
pred.verbs |= /mob/proc/release_predator
|
||||
|
||||
//Now actually put the people in the mobs
|
||||
pred_brain.ckey = pred_brain.pred_ckey
|
||||
pred_brain.real_name = pred.real_name
|
||||
pred.ckey = pred_brain.prey_ckey
|
||||
pred.prey_controlled = TRUE
|
||||
log_and_message_admins("[pred] is now controlled by [pred.ckey], they were taken over via pred submission, and were originally controlled by [pred_brain.pred_ckey].")
|
||||
if(delete_source)
|
||||
qdel(prey)
|
||||
@@ -264,8 +264,8 @@
|
||||
return
|
||||
var/list/possible_mobs = list()
|
||||
for(var/obj/belly/B in src.vore_organs)
|
||||
for(var/mob/living/carbon/human/H in B)
|
||||
if(ishuman(H) && H.ckey)
|
||||
for(var/mob/living/H in B)
|
||||
if( (ishuman(H) || isrobot(H)) && H.ckey )
|
||||
possible_mobs += H
|
||||
else
|
||||
continue
|
||||
@@ -276,9 +276,11 @@
|
||||
M = input
|
||||
if(!M)
|
||||
return
|
||||
if(M.resleeve_lock && ckey != M.resleeve_lock)
|
||||
to_chat(src, "<span class='warning'>\The [M] cannot be impersonated!</span>")
|
||||
return
|
||||
// Adding a ishuman check here, since silicon mobs don't have a resleeve_lock from what I can tell.
|
||||
if(ishuman(M))
|
||||
if(M.resleeve_lock && ckey != M.resleeve_lock)
|
||||
to_chat(src, "<span class='warning'>\The [M] cannot be impersonated!</span>")
|
||||
return
|
||||
if(tgui_alert(src, "You selected [M] to attempt to take over. Are you sure?", "Take Over Prey",list("No","Yes")) == "Yes")
|
||||
log_admin("[key_name_admin(src)] offered [M] to swap bodies as a morph.")
|
||||
if(tgui_alert(M, "\The [src] has elected to attempt to take over your body and control you. Is this something you will allow to happen?", "Allow Morph To Take Over",list("No","Yes")) == "Yes")
|
||||
|
||||
@@ -2605,6 +2605,18 @@ shaved
|
||||
species_allowed = list(SPECIES_DIONA)
|
||||
do_colouration = 0
|
||||
|
||||
//Skrell stuff.
|
||||
|
||||
/datum/sprite_accessory/marking/skrell
|
||||
name = "Countershading (Skrell)"
|
||||
icon_state = "skr_shade"
|
||||
body_parts = list(BP_TORSO, BP_GROIN, BP_HEAD)
|
||||
species_allowed = list(SPECIES_SKRELL)
|
||||
|
||||
/datum/sprite_accessory/marking/skrell/stripes
|
||||
name = "Poison Dart Stripes (Skrell)"
|
||||
icon_state = "skr_stripes"
|
||||
body_parts = list(BP_L_LEG, BP_R_LEG, BP_L_ARM, BP_R_ARM, BP_TORSO)
|
||||
|
||||
//Cybernetic Augments, some species-limited due to sprite misalignment. /aug/ types are excluded from dna.
|
||||
|
||||
|
||||
@@ -191,6 +191,11 @@
|
||||
suit_sprites = 'icons/mob/taursuits_horse.dmi'
|
||||
icon_sprite_tag = "horse"
|
||||
|
||||
/datum/sprite_accessory/tail/taur/horse/horse_2c
|
||||
name = "Horse & colorable tail (Taur)"
|
||||
extra_overlay = "horse_markings"
|
||||
//icon_sprite_tag = "wolf2c"
|
||||
|
||||
/datum/sprite_accessory/tail/taur/horse/synthhorse
|
||||
name = "SynthHorse dual-color (Taur)"
|
||||
icon_state = "synthhorse_s"
|
||||
|
||||
@@ -4,12 +4,22 @@
|
||||
/mob/verb/whisper(message as text)
|
||||
set name = "Whisper"
|
||||
set category = "IC"
|
||||
//VOREStation Addition Start
|
||||
if(forced_psay)
|
||||
psay(message)
|
||||
return
|
||||
//VOREStation Addition End
|
||||
|
||||
usr.say(message,whispering=1)
|
||||
|
||||
/mob/verb/say_verb(message as text)
|
||||
set name = "Say"
|
||||
set category = "IC"
|
||||
//VOREStation Addition Start
|
||||
if(forced_psay)
|
||||
psay(message)
|
||||
return
|
||||
//VOREStation Addition End
|
||||
|
||||
set_typing_indicator(FALSE)
|
||||
usr.say(message)
|
||||
@@ -21,6 +31,11 @@
|
||||
if(say_disabled) //This is here to try to identify lag problems
|
||||
to_chat(usr, "<font color='red'>Speech is currently admin-disabled.</font>")
|
||||
return
|
||||
//VOREStation Addition Start
|
||||
if(forced_psay)
|
||||
pme(message)
|
||||
return
|
||||
//VOREStation Addition End
|
||||
|
||||
//VOREStation Edit Start
|
||||
if(muffled)
|
||||
@@ -63,6 +78,15 @@
|
||||
else if(universal_speak || universal_understand)
|
||||
return TRUE
|
||||
|
||||
//VOREStation Addition Start
|
||||
if(isliving(src))
|
||||
var/mob/living/L = src
|
||||
if(isbelly(L.loc) && L.absorbed)
|
||||
var/mob/living/P = L.loc.loc
|
||||
if(P.say_understands(other, speaking))
|
||||
return TRUE
|
||||
//VOREStation Addition End
|
||||
|
||||
//Languages are handled after.
|
||||
if(!speaking)
|
||||
if(!other)
|
||||
|
||||
@@ -10,6 +10,11 @@
|
||||
if(say_disabled) //This is here to try to identify lag problems
|
||||
to_chat(usr, "Speech is currently admin-disabled.")
|
||||
return
|
||||
//VOREStation Addition Start
|
||||
if(forced_psay)
|
||||
pme(message)
|
||||
return
|
||||
//VOREStation Addition End
|
||||
|
||||
message = sanitize_or_reflect(message,src) //VOREStation Edit - Reflect too-long messages (within reason)
|
||||
if(!message)
|
||||
@@ -26,6 +31,12 @@
|
||||
to_chat(src, "You are unable to emote.")
|
||||
return
|
||||
|
||||
//VOREStation Addition Start
|
||||
if(forced_psay)
|
||||
pme(message)
|
||||
return
|
||||
//VOREStation Addition End
|
||||
|
||||
var/muzzled = is_muzzled()
|
||||
if(m_type == 2 && muzzled) return
|
||||
|
||||
@@ -99,3 +110,165 @@
|
||||
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
|
||||
|
||||
///// PSAY /////
|
||||
|
||||
/mob/verb/psay(message as text|null)
|
||||
set category = "IC"
|
||||
set name = "Psay"
|
||||
set desc = "Talk to people affected by complete absorbed or dominate predator/prey."
|
||||
|
||||
if (src.client)
|
||||
if(client.prefs.muted & MUTE_IC)
|
||||
to_chat(src, "<span class='warning'>You cannot speak in IC (muted).</span>")
|
||||
return
|
||||
if (!message)
|
||||
message = input(usr, "Type a message to say.","Psay") as text|null
|
||||
message = sanitize_or_reflect(message,src)
|
||||
if (!message)
|
||||
return
|
||||
message = capitalize(message)
|
||||
if (stat == DEAD)
|
||||
return say_dead(message)
|
||||
if(!isliving(src))
|
||||
forced_psay = FALSE
|
||||
say(message)
|
||||
var/f = FALSE //did we find someone to send the message to other than ourself?
|
||||
var/mob/living/pb //predator body
|
||||
var/mob/living/M = src
|
||||
if(istype(M, /mob/living/dominated_brain))
|
||||
var/mob/living/dominated_brain/db = M
|
||||
if(db.loc != db.pred_body)
|
||||
to_chat(db, "<span class='danger'>You aren't inside of a brain anymore!!!</span>")
|
||||
qdel(db) //Oh no, dominated brains shouldn't exist outside of the body, so if we got here something went very wrong.
|
||||
return
|
||||
else
|
||||
pb = db.pred_body
|
||||
to_chat(pb, "<span class='changeling'>The captive mind of \the [M] thinks, \"[message]\"</span>") //To our pred if dominated brain
|
||||
f = TRUE
|
||||
else if(M.absorbed && isbelly(M.loc))
|
||||
pb = M.loc.loc
|
||||
to_chat(pb, "<span class='changeling'>\The [M] thinks, \"[message]\"</span>") //To our pred if absorbed
|
||||
f = TRUE
|
||||
|
||||
if(pb) //We are prey, let's do the prey thing.
|
||||
|
||||
for(var/I in pb.contents)
|
||||
if(istype(I, /mob/living/dominated_brain) && I != M)
|
||||
var/mob/living/dominated_brain/db = I
|
||||
to_chat(db, "<span class='changeling'>The captive mind of \the [M] thinks, \"[message]\"</span>") //To any dominated brains in the pred
|
||||
f = TRUE
|
||||
for(var/B in pb.vore_organs)
|
||||
for(var/mob/living/L in B)
|
||||
if(L.absorbed && L != M && L.ckey)
|
||||
to_chat(L, "<span class='changeling'>\The [M] thinks, \"[message]\"</span>") //To any absorbed people in the pred
|
||||
f = TRUE
|
||||
|
||||
//Let's also check and see if there's anyone inside of us to send the message to.
|
||||
for(var/I in M.contents)
|
||||
if(istype(I, /mob/living/dominated_brain))
|
||||
var/mob/living/dominated_brain/db = I
|
||||
to_chat(db, "<span class='changeling'><b>\The [M] thinks, \"[message]\"</b></span>") //To any dominated brains inside us
|
||||
f = TRUE
|
||||
for(var/B in M.vore_organs)
|
||||
for(var/mob/living/L in B)
|
||||
if(L.absorbed)
|
||||
to_chat(L, "<span class='changeling'><b>\The [M] thinks, \"[message]\"</b></span>") //To any absorbed people inside us
|
||||
f = TRUE
|
||||
|
||||
if(f) //We found someone to send the message to
|
||||
if(pb)
|
||||
to_chat(M, "<span class='changeling'>You think \"[message]\"</span>") //To us if we are the prey
|
||||
else
|
||||
to_chat(M, "<span class='changeling'><b>You think \"[message]\"</b></span>") //To us if we are the pred
|
||||
for (var/mob/G in player_list)
|
||||
if (istype(G, /mob/new_player))
|
||||
continue
|
||||
else if(isobserver(G) && G.is_preference_enabled(/datum/client_preference/ghost_ears))
|
||||
if(is_preference_enabled(/datum/client_preference/whisubtle_vis) || G.client.holder)
|
||||
to_chat(G, "<span class='changeling'>\The [M] thinks, \"[message]\"</span>")
|
||||
log_say(message,M)
|
||||
else //There wasn't anyone to send the message to, pred or prey, so let's just say it instead and correct our psay just in case.
|
||||
M.forced_psay = FALSE
|
||||
M.say(message)
|
||||
|
||||
///// PME /////
|
||||
|
||||
/mob/verb/pme(message as text|null)
|
||||
set category = "IC"
|
||||
set name = "Pme"
|
||||
set desc = "Emote to people affected by complete absorbed or dominate predator/prey."
|
||||
|
||||
if (src.client)
|
||||
if(client.prefs.muted & MUTE_IC)
|
||||
to_chat(src, "<span class='warning'>You cannot speak in IC (muted).</span>")
|
||||
return
|
||||
if (!message)
|
||||
message = input(usr, "Type a message to emote.","Pme") as text|null
|
||||
message = sanitize_or_reflect(message,src)
|
||||
if (!message)
|
||||
return
|
||||
if (stat == DEAD)
|
||||
return say_dead(message)
|
||||
if(!isliving(src))
|
||||
forced_psay = FALSE
|
||||
me_verb(message)
|
||||
var/f = FALSE //did we find someone to send the message to other than ourself?
|
||||
var/mob/living/pb //predator body
|
||||
var/mob/living/M = src
|
||||
if(istype(M, /mob/living/dominated_brain))
|
||||
var/mob/living/dominated_brain/db = M
|
||||
if(db.loc != db.pred_body)
|
||||
to_chat(db, "<span class='danger'>You aren't inside of a brain anymore!!!</span>")
|
||||
qdel(db) //Oh no, dominated brains shouldn't exist outside of the body, so if we got here something went very wrong.
|
||||
return
|
||||
else
|
||||
pb = db.pred_body
|
||||
to_chat(pb, "<span class='changeling'>\The [M] [message]</span>") //To our pred if dominated brain
|
||||
f = TRUE
|
||||
|
||||
else if(M.absorbed && isbelly(M.loc))
|
||||
pb = M.loc.loc
|
||||
to_chat(pb, "<span class='changeling'>\The [M] [message]</span>") //To our pred if absorbed
|
||||
f = TRUE
|
||||
|
||||
if(pb) //We are prey, let's do the prey thing.
|
||||
|
||||
for(var/I in pb.contents)
|
||||
if(istype(I, /mob/living/dominated_brain) && I != M)
|
||||
var/mob/living/dominated_brain/db = I
|
||||
to_chat(db, "<span class='changeling'>\The [M] [message]</span>") //To any dominated brains in the pred
|
||||
f = TRUE
|
||||
for(var/B in pb.vore_organs)
|
||||
for(var/mob/living/L in B)
|
||||
if(L.absorbed && L != M && L.ckey)
|
||||
to_chat(L, "<span class='changeling'>\The [M] [message]</span>") //To any absorbed people in the pred
|
||||
f = TRUE
|
||||
|
||||
//Let's also check and see if there's anyone inside of us to send the message to.
|
||||
for(var/I in M.contents)
|
||||
if(istype(I, /mob/living/dominated_brain))
|
||||
var/mob/living/dominated_brain/db = I
|
||||
to_chat(db, "<span class='changeling'><b>\The [M] [message]</b></span>") //To any dominated brains inside us
|
||||
f = TRUE
|
||||
for(var/B in M.vore_organs)
|
||||
for(var/mob/living/L in B)
|
||||
if(L.absorbed)
|
||||
to_chat(L, "<span class='changeling'><b>\The [M] [message]</b></span>") //To any absorbed people inside us
|
||||
f = TRUE
|
||||
|
||||
if(f) //We found someone to send the message to
|
||||
if(pb)
|
||||
to_chat(M, "<span class='changeling'>\The [M] [message]</span>") //To us if we are the prey
|
||||
else
|
||||
to_chat(M, "<span class='changeling'><b>\The [M] [message]</b></span>") //To us if we are the pred
|
||||
for (var/mob/G in player_list)
|
||||
if (istype(G, /mob/new_player))
|
||||
continue
|
||||
else if(isobserver(G) && G.is_preference_enabled(/datum/client_preference/ghost_ears))
|
||||
if(is_preference_enabled(/datum/client_preference/whisubtle_vis) || G.client.holder)
|
||||
to_chat(G, "<span class='changeling'>\The [M] [message]</span>")
|
||||
log_say(message,M)
|
||||
else //There wasn't anyone to send the message to, pred or prey, so let's just emote it instead and correct our psay just in case.
|
||||
M.forced_psay = FALSE
|
||||
M.me_verb(message)
|
||||
|
||||
@@ -50,6 +50,6 @@
|
||||
|
||||
/obj/item/organ/internal/appendix/removed()
|
||||
if(inflamed)
|
||||
icon_state = "appendixinflamed"
|
||||
icon_state = "[initial(icon_state)]inflamed"
|
||||
name = "inflamed appendix"
|
||||
..()
|
||||
@@ -66,16 +66,6 @@
|
||||
owner.adjustToxLoss(15 * spleen_efficiency)
|
||||
Target.wounds += W
|
||||
|
||||
/obj/item/organ/internal/spleen/skrell
|
||||
name = "lymphatic hub"
|
||||
icon_state = "spleen"
|
||||
parent_organ = BP_HEAD
|
||||
spleen_efficiency = 0.5
|
||||
|
||||
/obj/item/organ/internal/spleen/skrell/Initialize()
|
||||
. = ..()
|
||||
adjust_scale(0.8,0.7)
|
||||
|
||||
/obj/item/organ/internal/spleen/minor
|
||||
name = "vestigial spleen"
|
||||
parent_organ = BP_GROIN
|
||||
|
||||
@@ -65,10 +65,11 @@
|
||||
if(owner && owner.stat != DEAD)
|
||||
owner.bodytemperature += round(owner.robobody_count * 0.25, 0.1)
|
||||
|
||||
/* //VOREStation Removal - normal chem processing
|
||||
if(ishuman(owner))
|
||||
var/mob/living/carbon/human/H = owner
|
||||
|
||||
if(H.ingested?.total_volume && H.bloodstr)
|
||||
H.ingested.trans_to_holder(H.bloodstr, rand(2,5))
|
||||
|
||||
*/
|
||||
return
|
||||
|
||||
@@ -90,8 +90,7 @@
|
||||
parent_organ = BP_TORSO
|
||||
vital = TRUE
|
||||
organ_verbs = list(
|
||||
/mob/living/carbon/human/proc/self_diagnostics,
|
||||
/mob/living/carbon/human/proc/reagent_purge
|
||||
/mob/living/carbon/human/proc/self_diagnostics
|
||||
)
|
||||
|
||||
/obj/item/organ/internal/nano/refactory
|
||||
@@ -104,6 +103,9 @@
|
||||
|
||||
var/list/materials = list(MAT_STEEL = 0)
|
||||
var/max_storage = 10000
|
||||
organ_verbs = list(
|
||||
/mob/living/carbon/human/proc/reagent_purge
|
||||
)
|
||||
|
||||
/obj/item/organ/internal/nano/refactory/proc/get_stored_material(var/material)
|
||||
if(status & ORGAN_DEAD)
|
||||
|
||||
@@ -0,0 +1,41 @@
|
||||
/obj/item/organ/internal/eyes/skrell
|
||||
icon_state = "skrell_eyes"
|
||||
|
||||
/obj/item/organ/internal/heart/skrell
|
||||
icon_state = "skrell_heart-on"
|
||||
dead_icon = "skrell_heart-off"
|
||||
|
||||
/obj/item/organ/internal/lungs/skrell
|
||||
icon_state = "skrell_lungs"
|
||||
|
||||
/obj/item/organ/internal/liver/skrell
|
||||
icon_state = "skrell_liver"
|
||||
|
||||
/obj/item/organ/internal/brain/skrell
|
||||
icon_state = "brain_skrell"
|
||||
|
||||
/obj/item/organ/internal/stomach/skrell
|
||||
icon_state = "skrell_stomach"
|
||||
|
||||
/obj/item/organ/internal/kidneys/skrell
|
||||
icon_state = "skrell_kidney"
|
||||
|
||||
/obj/item/organ/internal/intestine/skrell
|
||||
icon_state = "skrell_intestine"
|
||||
|
||||
/obj/item/organ/internal/voicebox/skrell
|
||||
icon_state = "skrell_larynx"
|
||||
will_assist_languages = list(LANGUAGE_SKRELLIAN, LANGUAGE_SKRELLIANFAR)
|
||||
|
||||
/obj/item/organ/internal/appendix/skrell
|
||||
icon_state = "skrell_appendix"
|
||||
|
||||
/obj/item/organ/internal/spleen/skrell
|
||||
name = "lymphatic hub"
|
||||
icon_state = "skrell_spleen"
|
||||
parent_organ = BP_HEAD
|
||||
spleen_efficiency = 0.5
|
||||
|
||||
/obj/item/organ/internal/spleen/skrell/Initialize()
|
||||
. = ..()
|
||||
adjust_scale(0.8,0.7)
|
||||
@@ -5,3 +5,11 @@
|
||||
icon_state = "tajaran_heart-on"
|
||||
dead_icon = "tajaran_heart-off"
|
||||
|
||||
/obj/item/organ/internal/lungs/tajaran
|
||||
icon_state = "tajaran_lungs"
|
||||
|
||||
/obj/item/organ/internal/liver/tajaran
|
||||
icon_state = "tajaran_liver"
|
||||
|
||||
/obj/item/organ/internal/stomach/tajaran
|
||||
icon_state = "tajaran_stomach"
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user