Merge branch 'master' into findnreplace

This commit is contained in:
Mark van Alphen
2017-04-19 20:41:05 +02:00
committed by GitHub
64 changed files with 973 additions and 502 deletions
+87
View File
@@ -0,0 +1,87 @@
/mob/living/carbon/human/virtual_reality
var/mob/living/carbon/human/real_me //The human controlling us, can be any human (including virtual ones... inception...)
var/datum/action/quit_vr/quit_action
var/datum/action/back_to_lobby/back_to_lobby
var/datum/action/detach_from_avatar/detach_from_avatar
/mob/living/carbon/human/virtual_reality/New()
quit_action = new()
quit_action.Grant(src)
back_to_lobby = new()
back_to_lobby.Grant(src)
detach_from_avatar = new()
detach_from_avatar.Grant(src)
..()
/mob/living/carbon/human/virtual_reality/death()
return_to_lobby()
return ..()
/mob/living/carbon/human/virtual_reality/Destroy()
return_to_lobby()
return ..()
/mob/living/carbon/human/virtual_reality/ghost()
set category = "OOC"
set name = "Ghost"
set desc = "Relinquish your life and enter the land of the dead."
var/mob/living/carbon/human/H = real_me
revert_to_reality(FALSE)
if(H)
H.ghost()
qdel(src)
/mob/living/carbon/human/virtual_reality/proc/revert_to_reality(remove = 0)
if(real_me && mind)
mind.transfer_to(real_me)
real_me.EyeBlind(2)
real_me.Confused(2)
if(remove)
qdel(src)
else
return src
/mob/living/carbon/human/virtual_reality/proc/return_to_lobby()
if(real_me && mind)
var/mob/living/carbon/human/virtual_reality/new_vr
new_vr = spawn_vr_avatar(src, "Lobby")
var/obj/item/clothing/glasses/vr_goggles/g = new_vr.real_me.glasses
g.vr_human = new_vr
qdel(src)
/datum/action/quit_vr
name = "Quit Virtual Reality"
/datum/action/quit_vr/Trigger()
if(..())
if(istype(owner, /mob/living/carbon/human/virtual_reality))
var/mob/living/carbon/human/virtual_reality/vr = owner
vr.revert_to_reality(1)
else
Remove(owner)
/datum/action/back_to_lobby
name = "Return To Lobby"
/datum/action/back_to_lobby/Trigger()
if(..())
if(istype(owner, /mob/living/carbon/human/virtual_reality))
var/mob/living/carbon/human/virtual_reality/vr = owner
vr.return_to_lobby()
else
Remove(owner)
/datum/action/detach_from_avatar
name = "Detach From Avatar"
/datum/action/detach_from_avatar/Trigger()
if(..())
if(istype(owner, /mob/living/carbon/human/virtual_reality))
var/mob/living/carbon/human/virtual_reality/vr = owner
var/obj/item/clothing/glasses/vr_goggles/g = vr.real_me.glasses
g.vr_human = vr
vr.revert_to_reality(0)
else
Remove(owner)
+41
View File
@@ -0,0 +1,41 @@
//Glorified teleporter that puts you in a new human body.
// it's """VR"""
/obj/item/clothing/glasses/vr_goggles
desc = "A long time ago, people used these glasses to makes images from screens threedimensional."
name = "3D glasses"
icon_state = "3d"
item_state = "3d"
prescription_upgradable = 0
species_fit = list("Vox")
sprite_sheets = list(
"Vox" = 'icons/mob/species/vox/eyes.dmi'
)
var/you_die_in_the_game_you_die_for_real = FALSE
var/mob/living/carbon/human/virtual_reality/vr_human
/obj/item/clothing/glasses/vr_goggles/Destroy()
..()
vr_human.revert_to_reality(1)
cleanup_vr_avatar()
/obj/item/clothing/glasses/vr_goggles/dropped()
..()
if(vr_human)
vr_human.revert_to_reality(0)
/obj/item/clothing/glasses/vr_goggles/proc/cleanup_vr_avatar()
if(vr_human)
vr_human = null
/obj/item/clothing/glasses/vr_goggles/equipped()
..()
var/mob/living/carbon/human/H = loc
spawn(1)
if(H.glasses == src)
if(vr_human == null)
vr_human = spawn_vr_avatar(H, "Lobby")
else
control_remote(H, vr_human)
@@ -118,6 +118,11 @@
path = /obj/item/clothing/head/beret/sci
allowed_roles = list("Research Director", "Scientist")
/datum/gear/hat/med_beret
display_name = "medical beret"
path = /obj/item/clothing/head/beret/med
allowed_roles = list("Chief Medical Officer", "Medical Doctor" , "Virologist", "Brig Physician")
/datum/gear/hat/surgicalcap_purple
display_name = "surgical cap, purple"
path = /obj/item/clothing/head/surgery/purple
@@ -50,7 +50,7 @@
/datum/gear/uniform/skirt/job/cmo
display_name = "skirt, cmo"
path = /obj/item/clothing/under/rank/chief_medical_officer
path = /obj/item/clothing/under/rank/chief_medical_officer/skirt
allowed_roles = list("Chief Medical Officer")
/datum/gear/uniform/skirt/job/chem
+5
View File
@@ -129,6 +129,11 @@
icon_state = "beret_sci"
//Medical
/obj/item/clothing/head/beret/med
name = "medical beret"
desc = "A white beret with a green cross finely threaded into it. It has that sterile smell about it."
icon_state = "beret_med"
/obj/item/clothing/head/surgery
name = "surgical cap"
desc = "A cap surgeons wear during operations. Keeps their hair from tickling your internal organs."
-3
View File
@@ -379,9 +379,6 @@
flags_inv = HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE
actions_types = list(/datum/action/item_action/caw)
/obj/item/clothing/head/griffin/super_hero
flags = BLOCKHAIR|NODROP
/obj/item/clothing/head/griffin/attack_self()
caw()
@@ -167,8 +167,6 @@
icon_state = "griffinboots"
item_state = "griffinboots"
/obj/item/clothing/shoes/griffin/super_hero
flags = NODROP
/obj/item/clothing/shoes/fluff/noble_boot
name = "noble boots"
@@ -817,8 +817,6 @@
allowed = list(/obj/item/weapon/gun/energy,/obj/item/weapon/reagent_containers/spray/pepper,/obj/item/weapon/gun/projectile,/obj/item/ammo_box,/obj/item/ammo_casing,/obj/item/weapon/melee/baton,/obj/item/weapon/restraints/handcuffs,/obj/item/device/flashlight/seclite)
actions_types = list(/datum/action/item_action/toggle_wings)
/obj/item/clothing/suit/toggle/owlwings/super_hero
flags = NODROP
/obj/item/clothing/suit/toggle/owlwings/griffinwings
name = "griffon cloak"
@@ -826,9 +824,6 @@
icon_state = "griffin_wings"
item_state = "griffin_wings"
/obj/item/clothing/suit/toggle/owlwings/griffinwings/super_hero
flags = NODROP
/obj/item/clothing/suit/toggle/attack_self()
if(icon_state == initial(icon_state))
icon_state = icon_state + "_t"
@@ -729,18 +729,12 @@
icon_state = "owl"
item_color = "owl"
/obj/item/clothing/under/owl/super_hero
flags = NODROP
/obj/item/clothing/under/griffin
name = "griffon uniform"
desc = "A soft brown jumpsuit with a white feather collar made of synthetic feathers and a lust for mayhem."
icon_state = "griffin"
item_color = "griffin"
/obj/item/clothing/under/griffin/super_hero
flags = NODROP
/obj/item/clothing/under/noble_clothes
name = "noble clothes"
desc = "They fall just short of majestic."
+69 -10
View File
@@ -129,6 +129,12 @@
icon_state = "zeldacrowbar"
item_state = "crowbar"
/obj/item/clothing/glasses/monocle/fluff/trubus //Trubus: Wolf O'Shaw
name = "Gold Thermal Eyepatch"
desc = "Wolf's non-functional thermal eyepatch."
icon = 'icons/obj/custom_items.dmi'
icon_state = "wolf_eyepatch"
/obj/item/clothing/glasses/meson/fluff/book_berner_1 // Adrkiller59: Adam Cooper
name = "bespectacled mesonic surveyors"
desc = "One of the older meson scanner models retrofitted to perform like its modern counterparts."
@@ -140,6 +146,28 @@
desc = "A weathered Vox thermonocle, doesn't seem to work anymore."
icon_state = "thermoncle"
/obj/item/device/fluff/rapid_wheelchair_kit //Rapidvalj: Hakikarahiti
name = "wheelchair conversion kit"
desc = "An assorted set of exchangable parts for a wheelchair."
icon_state = "modkit"
/obj/item/device/fluff/rapid_wheelchair_kit/afterattack(atom/target, mob/user, proximity)
if(!proximity || !ishuman(user) || user.incapacitated())
return
if(istype(target, /obj/structure/stool/bed/chair/wheelchair) && !istype(target, /obj/structure/stool/bed/chair/wheelchair/bike))
to_chat(user, "<span class='notice'>You modify the appearance of [target].</span>")
var/obj/structure/stool/bed/chair/wheelchair/chair = target
chair.icon = 'icons/obj/custom_items.dmi'
chair.icon_state = "vox_wheelchair"
chair.name = "vox wheelchair"
chair.desc = "A luxurious Vox Wheelchair, weathered from use."
chair.handle_rotation()
qdel(src)
return
to_chat(user, "<span class='warning'>You can't modify [target]!</span>")
/obj/item/weapon/lighter/zippo/fluff/purple // GodOfOreos: Jason Conrad
name = "purple engraved zippo"
desc = "All craftsspacemanship is of the highest quality. It is encrusted with refined plasma sheets. On the item is an image of a dwarf and the words 'Strike the Earth!' etched onto the side."
@@ -248,7 +276,6 @@
if(istype(target, /obj/item/weapon/melee/baton) && !istype(target, /obj/item/weapon/melee/baton/cattleprod))
to_chat(user, "<span class='notice'>You modify the appearance of [target].</span>")
//because batons use the initial() proc, we can't just swap the icon state, sadly
var/obj/item/weapon/melee/baton/the_baton = target
the_baton.base_icon = "desolate_baton"
the_baton.item_state = "desolate_baton"
@@ -353,6 +380,7 @@
/obj/item/clothing/glasses/hud/security/sunglasses/fluff/voxxyhud //LP Spartan: Kaskreyarawkta
name = "VoxxyHUD"
desc = "A worn down visor from a vox raider's gear, crudely ripped from its helmet and linked into the security systems of the station. The word 'Kask' is scratched into the side."
icon = 'icons/obj/custom_items.dmi'
icon_state = "hud-spartan"
//////////// Hats ////////////
@@ -368,13 +396,12 @@
desc = "Fuzzy, and also stained with blood."
icon = 'icons/obj/custom_items.dmi'
icon_state = "polarbearpelt"
item_state = "polarbearpelt"
/obj/item/clothing/head/fluff/sparkyninja_beret // Sparkyninja: Neil Wilkinson
name = "royal marines commando beret"
desc = "Dark Green beret with an old insignia on it."
icon = 'icons/obj/custom_items.dmi'
icon_state = "sparkyninja_beret"
item_state = "sparkyninja_beret"
/obj/item/clothing/head/beret/fluff/sigholt //sigholtstarsong: Sigholt Starsong
name = "Lieutenant Starsong's beret"
@@ -405,25 +432,29 @@
/obj/item/clothing/head/beret/fluff/linda //Epic_Charger: Linda Clark
name = "Green beret"
desc = "A beret, an artist's favorite headwear. This one has two holes cut on the edges."
icon = 'icons/obj/custom_items.dmi'
icon_state = "linda_beret"
/obj/item/clothing/head/fluff/kaki //Rapidvalj: Kakicharakiti
name = "sleek fancy leader hat"
desc = "A uniquely colored vox leader hat. Has some signs of wear."
icon = 'icons/obj/custom_items.dmi'
icon_state = "kakicharakiti"
//////////// Suits ////////////
/obj/item/clothing/suit/fluff
icon = 'icons/obj/custom_items.dmi'
actions_types = list()
ignore_suitadjust = 1
adjust_flavour = null
species_fit = null
sprite_sheets = null
/obj/item/clothing/suit/fluff/dusty_jacket //ComputerlessCitizen: Screech
name = "Dusty Jacket"
desc = "A worn leather jacket. Some burn holes have been patched."
body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|ARMS
icon = 'icons/obj/custom_items.dmi'
icon_state = "dusty_jacket"
ignore_suitadjust = 1
actions_types = list()
adjust_flavour = null
species_fit = null
sprite_sheets = null
/obj/item/clothing/suit/storage/labcoat/fluff/aeneas_rinil //Socialsystem: Lynn Fea
name = "Robotics labcoat"
@@ -448,6 +479,7 @@
/obj/item/clothing/suit/fluff/kluys // Kluys: Cripty Pandaen
name = "Nano Fibre Jacket"
desc = "A Black Suit made out of nanofibre. The newest of cyberpunk fashion using hightech liquid to solid materials."
icon = 'icons/obj/custom_items.dmi'
icon_state = "Kluysfluff1"
item_state = "Kluysfluff1"
blood_overlay_type = "coat"
@@ -494,15 +526,29 @@
/obj/item/clothing/suit/hooded/hoodie/fluff/linda // Epic_Charger: Linda Clark
name = "Green Nanotrasen Hoodie"
desc = "A green hoodie with the Nanotrasen logo on the back. It looks weathered."
icon = 'icons/obj/custom_items.dmi'
icon_state = "linda_hoodie"
hoodtype = /obj/item/clothing/head/hood/fluff/linda
/obj/item/clothing/head/hood/fluff/linda //Epic_Charger: Linda Clark
icon_state = "greenhood"
/obj/item/clothing/suit/hooded/fluff/bone //Doru7: Jack Bone
name = "skeleton suit"
desc = "A spooky full-body suit! This one doesn't glow in the dark."
body_parts_covered = HEAD|UPPER_TORSO|LOWER_TORSO|LEGS|ARMS
icon = 'icons/obj/custom_items.dmi'
icon_state = "skeleton_suit"
hoodtype = /obj/item/clothing/head/hood/fluff/skeleton
/obj/item/clothing/head/hood/fluff/skeleton
icon = 'icons/obj/custom_items.dmi'
icon_state = "skeleton_hood"
/obj/item/clothing/suit/armor/shodanscoat // RazekPraxis: SHODAN
name = "SHODAN's Captain's Coat"
desc = "A black coat with gold trim and an old US Chevron printed on the back. Edgy."
icon = 'icons/obj/custom_items.dmi'
icon_state = "shodancoat"
//////////// Uniforms ////////////
@@ -523,6 +569,15 @@
item_color = "elishirt"
displays_id = 0
/obj/item/clothing/under/fluff/jay_turtleneck // Jayfeather: Jay Wingler
name = "Mar's Pattern Custom Turtleneck"
desc = "It seems to be lightly dusted in orange fuzz, and damp with the smell of anti-freeze. It has a strange symbol in the middle."
icon = 'icons/obj/custom_items.dmi'
icon_state = "jaywingler"
item_state = "jaywingler"
item_color = "jaywingler"
displays_id = 0
/obj/item/clothing/under/psysuit/fluff/isaca_sirius_1 // Xilia: Isaca Sirius
name = "Isaca's suit"
desc = "Black, comfortable and nicely fitting suit. Made not to hinder the wearer in any way. Made of some exotic fabric. And some strange glowing jewel at the waist. Name labels says; Property of Isaca Sirius; The Seeder."
@@ -569,6 +624,9 @@
/obj/item/clothing/under/fluff/aegis //PlagueWalker: A.E.G.I.S.
name = "gilded waistcoat"
desc = "This black, gold-trimmed, rather expensive-looking uniform laced with fine materials appears comfortable despite its stiffness."
icon = 'icons/obj/custom_items.dmi'
lefthand_file = 'icons/mob/inhands/fluff_lefthand.dmi'
righthand_file = 'icons/mob/inhands/fluff_righthand.dmi'
icon_state = "aegisuniform"
item_state = "aegisuniform"
item_color = "aegisuniform"
@@ -579,9 +637,9 @@
/obj/item/clothing/mask/bandana/fluff/dar //sasanek12: Dar'Konr
name = "camo bandana"
desc = "It's a worn-out bandana in camo paint"
icon = 'icons/obj/custom_items.dmi'
icon_state = "bandcamo"
/obj/item/clothing/mask/gas/sechailer/fluff/spartan //LP Spartan: Kaskreyarawkta
name = "minimal gasmask"
desc = "Designed to cover as little of face as possible while still being a functional gasmask."
@@ -723,6 +781,7 @@
/obj/item/weapon/storage/backpack/fluff/krich_back //lizardzsi: Krichahka
name = "Voxcaster"
desc = "Battered, Sol-made military radio backpack that had its speakers fried from playing Vox opera. The words 'Swift-Talon' are crudely scratched onto its side."
icon = 'icons/obj/custom_items.dmi'
icon_state = "voxcaster_fluff"
/obj/item/clothing/head/wizard/fake/fluff/dreamy //phantasmicdream : Dreamy Rockwall
+10
View File
@@ -13,6 +13,16 @@
return 0 // Proceed with emote
//--FalseIncarnate
/mob/proc/handle_emote_param(var/target, var/not_self, var/vicinity, var/return_mob) //Only returns not null if the target param is valid.
var/view_vicinity = vicinity ? vicinity : null //not_self means we'll only return if target is valid and not us
if(target) //vicinity is the distance passed to the view proc.
for(var/mob/A in view(view_vicinity, null)) //if set, return_mob will cause this proc to return the mob instead of just its name if the target is valid.
if(target == A.name && (!not_self || (not_self && target != name)))
if(return_mob)
return A
else
return target
// All mobs should have custom emote, really..
/mob/proc/custom_emote(var/m_type=1,var/message = null)
+77 -226
View File
@@ -85,162 +85,73 @@
if("me") //OKAY SO RANT TIME, THIS FUCKING HAS TO BE HERE OR A SHITLOAD OF THINGS BREAK
return custom_emote(m_type, message) //DO YOU KNOW WHY SHIT BREAKS? BECAUSE SO MUCH OLDCODE CALLS mob.emote("me",1,"whatever_the_fuck_it_wants_to_emote")
//WHO THE FUCK THOUGHT THAT WAS A GOOD FUCKING IDEA!?!?
if("ping", "pings")
var/M = null
if(param)
for(var/mob/A in view(null, null))
if(param == A.name)
M = A
break
if(!M)
param = null
var/M = handle_emote_param(param) //Check to see if the param is valid (mob with the param name is in view).
if(param)
message = "<B>[src]</B> pings at [param]."
else
message = "<B>[src]</B> pings."
message = "<B>[src]</B> pings[M ? " at [M]" : ""]."
playsound(loc, 'sound/machines/ping.ogg', 50, 0)
m_type = 2
if("buzz2")
message = "<B>[src]</B> emits an irritated buzzing sound."
var/M = handle_emote_param(param)
message = "<B>[src]</B> emits an irritated buzzing sound[M ? " at [M]" : ""]."
playsound(loc, 'sound/machines/buzz-two.ogg', 50, 0)
m_type = 2
if("buzz", "buzzes")
var/M = null
if(param)
for(var/mob/A in view(null, null))
if(param == A.name)
M = A
break
if(!M)
param = null
var/M = handle_emote_param(param)
if(param)
message = "<B>[src]</B> buzzes at [param]."
else
message = "<B>[src]</B> buzzes."
message = "<B>[src]</B> buzzes[M ? " at [M]" : ""]."
playsound(loc, 'sound/machines/buzz-sigh.ogg', 50, 0)
m_type = 2
if("beep", "beeps")
var/M = null
if(param)
for(var/mob/A in view(null, null))
if(param == A.name)
M = A
break
if(!M)
param = null
var/M = handle_emote_param(param)
if(param)
message = "<B>[src]</B> beeps at [param]."
else
message = "<B>[src]</B> beeps."
message = "<B>[src]</B> beeps[M ? " at [M]" : ""]."
playsound(loc, 'sound/machines/twobeep.ogg', 50, 0)
m_type = 2
if("drone", "drones", "hum", "hums", "rumble", "rumbles")
var/M = null
if(param)
for(var/mob/A in view(null, null))
if(param == A.name)
M = A
break
if(!M)
param = null
var/M = handle_emote_param(param)
if(param)
message = "<B>[src]</B> drones at [param]."
else
message = "<B>[src]</B> rumbles."
message = "<B>[src]</B> [M ? "drones at [M]" : "rumbles"]."
playsound(loc, 'sound/voice/DraskTalk.ogg', 50, 0)
m_type = 2
if("squish", "squishes")
var/M = null
if(param)
for(var/mob/A in view(null, null))
if(param == A.name)
M = A
break
if(!M)
param = null
var/M = handle_emote_param(param)
if(param)
message = "<B>[src]</B> squishes at [param]."
else
message = "<B>[src]</B> squishes."
message = "<B>[src]</B> squishes[M ? " at [M]" : ""]."
playsound(loc, 'sound/effects/slime_squish.ogg', 50, 0) //Credit to DrMinky (freesound.org) for the sound.
m_type = 2
if("clack", "clacks")
var/M = null
if(param)
for(var/mob/A in view(null, null))
if(param == A.name)
M = A
break
if(!M)
param = null
var/M = handle_emote_param(param)
if(param)
message = "<B>[src]</B> clacks their mandibles at [param]."
else
message = "<B>[src]</B> clacks their mandibles."
message = "<B>[src]</B> clacks their mandibles[M ? " at [M]" : ""]."
playsound(loc, 'sound/effects/Kidanclack.ogg', 50, 0) //Credit to DrMinky (freesound.org) for the sound.
m_type = 2
if("click", "clicks")
var/M = null
if(param)
for(var/mob/A in view(null, null))
if(param == A.name)
M = A
break
if(!M)
param = null
var/M = handle_emote_param(param)
if(param)
message = "<B>[src]</B> clicks their mandibles at [param]."
else
message = "<B>[src]</B> clicks their mandibles."
message = "<B>[src]</B> clicks their mandibles[M ? " at [M]" : ""]."
playsound(loc, 'sound/effects/Kidanclack2.ogg', 50, 0) //Credit to DrMinky (freesound.org) for the sound.
m_type = 2
if("yes")
var/M = null
if(param)
for(var/mob/A in view(null, null))
if(param == A.name)
M = A
break
if(!M)
param = null
var/M = handle_emote_param(param)
if(param)
message = "<B>[src]</B> emits an affirmative blip at [param]."
else
message = "<B>[src]</B> emits an affirmative blip."
message = "<B>[src]</B> emits an affirmative blip[M ? " at [M]" : ""]."
playsound(loc, 'sound/machines/synth_yes.ogg', 50, 0)
m_type = 2
if("no")
var/M = null
if(param)
for(var/mob/A in view(null, null))
if(param == A.name)
M = A
break
if(!M)
param = null
var/M = handle_emote_param(param)
if(param)
message = "<B>[src]</B> emits a negative blip at [param]."
else
message = "<B>[src]</B> emits a negative blip."
message = "<B>[src]</B> emits a negative blip[M ? " at [M]" : ""]."
playsound(loc, 'sound/machines/synth_no.ogg', 50, 0)
m_type = 2
@@ -293,36 +204,16 @@
if("bow", "bows")
if(!buckled)
var/M = null
if(param)
for(var/mob/A in view(null, null))
if(param == A.name)
M = A
break
if(!M)
param = null
var/M = handle_emote_param(param)
if(param)
message = "<B>[src]</B> bows to [param]."
else
message = "<B>[src]</B> bows."
message = "<B>[src]</B> bows[M ? " to [M]" : ""]."
m_type = 1
if("salute", "salutes")
if(!buckled)
var/M = null
if(param)
for(var/mob/A in view(null, null))
if(param == A.name)
M = A
break
if(!M)
param = null
var/M = handle_emote_param(param)
if(param)
message = "<B>[src]</B> salutes to [param]."
else
message = "<B>[src]</b> salutes."
message = "<B>[src]</B> salutes[M ? " to [M]" : ""]."
m_type = 1
if("choke", "chokes")
@@ -461,11 +352,15 @@
m_type = 2
if("frown", "frowns")
message = "<B>[src]</B> frowns."
var/M = handle_emote_param(param)
message = "<B>[src]</B> frowns[M ? " at [M]" : ""]."
m_type = 1
if("nod", "nods")
message = "<B>[src]</B> nods."
var/M = handle_emote_param(param)
message = "<B>[src]</B> nods[M ? " at [M]" : ""]."
m_type = 1
if("blush", "blushes")
@@ -473,7 +368,9 @@
m_type = 1
if("wave", "waves")
message = "<B>[src]</B> waves."
var/M = handle_emote_param(param)
message = "<B>[src]</B> waves[M ? " at [M]" : ""]."
m_type = 1
if("quiver", "quivers")
@@ -509,56 +406,27 @@
m_type = 2
if("glare", "glares")
var/M = null
if(param)
for(var/mob/A in view(null, null))
if(param == A.name)
M = A
break
if(!M)
param = null
var/M = handle_emote_param(param)
if(param)
message = "<B>[src]</B> glares at [param]."
else
message = "<B>[src]</B> glares."
message = "<B>[src]</B> glares[M ? " at [M]" : ""]."
m_type = 1
if("stare", "stares")
var/M = null
if(param)
for(var/mob/A in view(null, null))
if(param == A.name)
M = A
break
if(!M)
param = null
var/M = handle_emote_param(param)
if(param)
message = "<B>[src]</B> stares at [param]."
else
message = "<B>[src]</B> stares."
message = "<B>[src]</B> stares[M ? " at [M]" : ""]."
m_type = 1
if("look", "looks")
var/M = null
if(param)
for(var/mob/A in view(null, null))
if(param == A.name)
M = A
break
var/M = handle_emote_param(param)
if(!M)
param = null
if(param)
message = "<B>[src]</B> looks at [param]."
else
message = "<B>[src]</B> looks."
message = "<B>[src]</B> looks[M ? " at [M]" : ""]."
m_type = 1
if("grin", "grins")
message = "<B>[src]</B> grins."
var/M = handle_emote_param(param)
message = "<B>[src]</B> grins[M ? " at [M]" : ""]."
m_type = 1
if("cry", "cries")
@@ -574,24 +442,26 @@
m_type = 2
if("sigh", "sighs")
var/M = handle_emote_param(param)
if(miming)
message = "<B>[src]</B> sighs."
message = "<B>[src]</B> sighs[M ? " at [M]" : ""]."
m_type = 1
else
if(!muzzled)
message = "<B>[src]</B> sighs."
message = "<B>[src]</B> sighs[M ? " at [M]" : ""]."
m_type = 2
else
message = "<B>[src]</B> makes a weak noise."
message = "<B>[src]</B> makes a weak noise"
m_type = 2
if("laugh", "laughs")
var/M = handle_emote_param(param)
if(miming)
message = "<B>[src]</B> acts out a laugh."
message = "<B>[src]</B> acts out a laugh[M ? " at [M]" : ""]."
m_type = 1
else
if(!muzzled)
message = "<B>[src]</B> laughs."
message = "<B>[src]</B> laughs[M ? " at [M]" : ""]."
m_type = 2
else
message = "<B>[src]</B> makes a noise."
@@ -604,11 +474,12 @@
m_type = 1
if("grumble", "grumbles")
var/M = handle_emote_param(param)
if(miming)
message = "<B>[src]</B> grumbles!"
message = "<B>[src]</B> grumbles[M ? " at [M]" : ""]!"
m_type = 1
if(!muzzled)
message = "<B>[src]</B> grumbles!"
message = "<B>[src]</B> grumbles[M ? " at [M]" : ""]!"
m_type = 2
else
message = "<B>[src]</B> makes a noise."
@@ -669,7 +540,9 @@
m_type = 1
if("shake", "shakes")
message = "<B>[src]</B> shakes \his head."
var/M = handle_emote_param(param, 1) //Check to see if the param is valid (mob with the param name is in view) but exclude ourselves.
message = "<B>[src]</B> shakes \his head[M ? " at [M]" : ""]."
m_type = 1
if("shrug", "shrugs")
@@ -687,7 +560,9 @@
m_type = 1
if("smile", "smiles")
message = "<B>[src]</B> smiles."
var/M = handle_emote_param(param, 1)
message = "<B>[src]</B> smiles[M ? " at [M]" : ""]."
m_type = 1
if("shiver", "shivers")
@@ -751,7 +626,9 @@
m_type = 2
if("wink", "winks")
message = "<B>[src]</B> winks."
var/M = handle_emote_param(param, 1)
message = "<B>[src]</B> winks[M ? " at [M]" : ""]."
m_type = 1
if("yawn", "yawns")
@@ -771,14 +648,7 @@
if("hug", "hugs")
m_type = 1
if(!restrained())
var/M = null
if(param)
for(var/mob/A in view(1, null))
if(param == A.name)
M = A
break
if(M == src)
M = null
var/M = handle_emote_param(param, 1, 1) //Check to see if the param is valid (mob with the param name is in view) but exclude ourselves and only check mobs in our immediate vicinity (1 tile distance).
if(M)
message = "<B>[src]</B> hugs [M]."
@@ -788,14 +658,7 @@
if("handshake")
m_type = 1
if(!restrained() && !r_hand)
var/mob/M = null
if(param)
for(var/mob/A in view(1, null))
if(param == A.name)
M = A
break
if(M == src)
M = null
var/mob/M = handle_emote_param(param, 1, 1, 1) //Check to see if the param is valid (mob with the param name is in view) but exclude ourselves, only check mobs in our immediate vicinity (1 tile distance) and return the whole mob instead of just its name.
if(M)
if(M.canmove && !M.r_hand && !M.restrained())
@@ -806,12 +669,8 @@
if("dap", "daps")
m_type = 1
if(!restrained())
var/M = null
if(param)
for(var/mob/A in view(1, null))
if(param == A.name)
M = A
break
var/M = handle_emote_param(param, null, 1)
if(M)
message = "<B>[src]</B> gives daps to [M]."
else
@@ -820,27 +679,23 @@
if("slap", "slaps")
m_type = 1
if(!restrained())
var/M = null
if(param)
for(var/mob/A in view(1, null))
if(param == A.name)
M = A
break
var/M = handle_emote_param(param, null, 1)
if(M)
message = "<span class='danger'>[src] slaps [M] across the face. Ouch!</span>"
playsound(loc, 'sound/effects/snap.ogg', 50, 1)
else
message = "<span class='danger'>[src] slaps \himself!</span>"
playsound(loc, 'sound/effects/snap.ogg', 50, 1)
adjustFireLoss(4)
playsound(loc, 'sound/effects/snap.ogg', 50, 1)
if("scream", "screams")
var/M = handle_emote_param(param)
if(miming)
message = "<B>[src]</B> acts out a scream!"
message = "<B>[src]</B> acts out a scream[M ? " at [M]" : ""]!"
m_type = 1
else
if(!muzzled)
message = "<B>[src]</B> [species.scream_verb]!"
message = "<B>[src]</B> [species.scream_verb][M ? " at [M]" : ""]!"
m_type = 2
if(gender == FEMALE)
playsound(loc, "[species.female_scream_sound]", 80, 1, 0, pitch = get_age_pitch())
@@ -848,10 +703,9 @@
playsound(loc, "[species.male_scream_sound]", 80, 1, 0, pitch = get_age_pitch()) //default to male screams if no gender is present.
else
message = "<B>[src]</B> makes a very loud noise."
message = "<B>[src]</B> makes a very loud noise[M ? " at [M]" : ""]."
m_type = 2
if("snap", "snaps")
if(prob(95))
m_type = 2
@@ -869,13 +723,14 @@
to_chat(usr, "You need at least one hand in good working order to snap your fingers.")
return
message = "<b>[src]</b> snaps \his fingers."
var/M = handle_emote_param(param)
message = "<b>[src]</b> snaps \his fingers[M ? " at [M]" : ""]."
playsound(loc, 'sound/effects/fingersnap.ogg', 50, 1, -3)
else
message = "<span class='danger'><b>[src]</b> snaps \his fingers right off!</span>"
playsound(loc, 'sound/effects/snap.ogg', 50, 1)
// Needed for M_TOXIC_FART
if("fart", "farts")
if(reagents.has_reagent("simethicone"))
@@ -926,11 +781,7 @@
else
to_chat(src, "<span class='notice'>Unusable emote '[act]'. Say *help for a list.</span>")
if(message) //Humans are special fucking snowflakes and have 735 lines of emotes, they get to handle their own emotes, not call the parent
if(message) //Humans are special fucking snowflakes and have 800 lines of emotes, they get to handle their own emotes, not call the parent.
log_emote("[name]/[key] : [message]")
//Hearing gasp and such every five seconds is not good emotes were not global for a reason.
+29 -22
View File
@@ -14,15 +14,19 @@
assign_genes(H)
assign_spells(H)
equip(H)
fixflags(H)
assign_id(H)
/datum/superheroes/proc/equip(var/mob/living/carbon/human/H)
H.rename_character(H.real_name, name)
for(var/obj/item/W in H)
if(istype(W,/obj/item/organ)) continue
for(var/obj/item/W in H.get_all_slots())
H.unEquip(W)
H.equip_to_slot_or_del(new /obj/item/device/radio/headset(H), slot_l_ear)
/datum/superheroes/proc/fixflags(var/mob/living/carbon/human/H)
for(var/obj/item/W in H.get_all_slots())
W.flags |= NODROP
/datum/superheroes/proc/assign_genes(var/mob/living/carbon/human/H)
if(default_genes.len)
for(var/gene in default_genes)
@@ -42,14 +46,17 @@
W.registered_name = H.real_name
W.access = list(access_maint_tunnels)
if(class == "Superhero")
W.name = "[H.real_name]'s ID Card (Superhero)"
W.assignment = "Superhero"
W.rank = "Superhero"
ticker.mode.superheroes += H.mind
else if(class == "Supervillain")
W.name = "[H.real_name]'s ID Card (Supervillain)"
W.assignment = "Supervillain"
W.rank = "Supervillain"
ticker.mode.supervillains += H.mind
W.icon_state = "lifetimeid"
W.SetOwnerInfo(H)
W.UpdateName()
W.flags |= NODROP
H.equip_to_slot_or_del(W, slot_wear_id)
H.regenerate_icons()
@@ -66,8 +73,8 @@
..()
H.equip_to_slot_or_del(new /obj/item/clothing/shoes/black/greytide(H), slot_shoes)
H.equip_to_slot_or_del(new /obj/item/clothing/under/owl/super_hero(H), slot_w_uniform)
H.equip_to_slot_or_del(new /obj/item/clothing/suit/toggle/owlwings/super_hero(H), slot_wear_suit)
H.equip_to_slot_or_del(new /obj/item/clothing/under/owl(H), slot_w_uniform)
H.equip_to_slot_or_del(new /obj/item/clothing/suit/toggle/owlwings(H), slot_wear_suit)
H.equip_to_slot_or_del(new /obj/item/clothing/mask/gas/owl_mask/super_hero(H), slot_wear_mask)
H.equip_to_slot_or_del(new /obj/item/weapon/storage/belt/bluespace/owlman(H), slot_belt)
H.equip_to_slot_or_del(new /obj/item/clothing/glasses/night(H), slot_glasses)
@@ -84,15 +91,13 @@
/datum/superheroes/griffin/equip(var/mob/living/carbon/human/H)
..()
H.equip_to_slot_or_del(new /obj/item/clothing/shoes/griffin/super_hero(H), slot_shoes)
H.equip_to_slot_or_del(new /obj/item/clothing/under/griffin/super_hero(H), slot_w_uniform)
H.equip_to_slot_or_del(new /obj/item/clothing/suit/toggle/owlwings/griffinwings/super_hero(H), slot_wear_suit)
H.equip_to_slot_or_del(new /obj/item/clothing/head/griffin/super_hero(H), slot_head)
H.equip_to_slot_or_del(new /obj/item/clothing/shoes/griffin(H), slot_shoes)
H.equip_to_slot_or_del(new /obj/item/clothing/under/griffin(H), slot_w_uniform)
H.equip_to_slot_or_del(new /obj/item/clothing/suit/toggle/owlwings/griffinwings(H), slot_wear_suit)
H.equip_to_slot_or_del(new /obj/item/clothing/head/griffin/(H), slot_head)
var/obj/item/weapon/implant/freedom/L = new/obj/item/weapon/implant/freedom(H)
L.imp_in = H
L.implanted = 1
return 1
L.implant(H, H)
/datum/superheroes/lightnian
@@ -217,18 +222,20 @@
target.s_tone = 35
// No `update_dna=0` here because the character is being over-written
target.change_eye_color(1,1,1)
for(var/obj/item/W in target)
if(istype(W,/obj/item/organ)) continue
for(var/obj/item/W in target.get_all_slots())
target.unEquip(W)
target.rename_character(target.real_name, "Generic Henchman ([rand(1, 1000)])")
target.equip_to_slot_or_del(new /obj/item/clothing/under/color/grey/greytide(target), slot_w_uniform)
target.equip_to_slot_or_del(new /obj/item/clothing/shoes/black/greytide(target), slot_shoes)
target.equip_to_slot_or_del(new /obj/item/weapon/storage/toolbox/mechanical/greytide(target), slot_l_hand)
var/obj/item/weapon/card/id/syndicate/W = new(target)
W.registered_name = target.real_name
W.access = list(access_maint_tunnels)
W.name = "[target.real_name]'s ID Card (Greyshirt)"
W.assignment = "Greyshirt"
target.equip_to_slot_or_del(W, slot_wear_id)
target.equip_to_slot_or_del(new /obj/item/device/radio/headset(target), slot_l_ear)
var/obj/item/weapon/card/id/syndicate/W = new(target)
W.icon_state = "lifetimeid"
W.access = list(access_maint_tunnels)
W.assignment = "Greyshirt"
W.rank = "Greyshirt"
W.flags |= NODROP
W.SetOwnerInfo(target)
W.UpdateName()
target.equip_to_slot_or_del(W, slot_wear_id)
target.regenerate_icons()
+17 -63
View File
@@ -26,97 +26,51 @@
switch(act)
if("ping","pings")
var/M = null
if(param)
for(var/mob/A in view(null, null))
if(param == A.name)
M = A
break
if(!M)
param = null
var/M = handle_emote_param(param)
if(param)
message = "<B>[src]</B> pings at [param]."
else
message = "<B>[src]</B> pings."
message = "<B>[src]</B> pings[M ? " at [M]" : ""]."
playsound(src.loc, 'sound/machines/ping.ogg', 50, 0)
m_type = 2
if("buzz","buzzs","buzzes")
var/M = null
if(param)
for(var/mob/A in view(null, null))
if(param == A.name)
M = A
break
if(!M)
param = null
var/M = handle_emote_param(param)
if(param)
message = "<B>[src]</B> buzzes at [param]."
else
message = "<B>[src]</B> buzzes."
message = "<B>[src]</B> buzzes[M ? " at [M]" : ""]."
playsound(src.loc, 'sound/machines/buzz-sigh.ogg', 50, 0)
m_type = 2
if("beep","beeps")
var/M = null
if(param)
for(var/mob/A in view(null, null))
if(param == A.name)
M = A
break
if(!M)
param = null
var/M = handle_emote_param(param)
if(param)
message = "<B>[src]</B> beeps at [param]."
else
message = "<B>[src]</B> beeps."
message = "<B>[src]</B> beeps[M ? " at [M]" : ""]."
playsound(src.loc, 'sound/machines/twobeep.ogg', 50, 0)
m_type = 2
if("yes")
var/M = null
if(param)
for(var/mob/A in view(null, null))
if(param == A.name)
M = A
break
if(!M)
param = null
var/M = handle_emote_param(param)
if(param)
message = "<B>[src]</B> emits an affirmative blip at [param]."
else
message = "<B>[src]</B> emits an affirmative blip."
message = "<B>[src]</B> emits an affirmative blip[M ? " at [M]" : ""]."
playsound(src.loc, 'sound/machines/synth_yes.ogg', 50, 0)
m_type = 2
if("no")
var/M = null
if(param)
for(var/mob/A in view(null, null))
if(param == A.name)
M = A
break
if(!M)
param = null
var/M = handle_emote_param(param)
if(param)
message = "<B>[src]</B> emits a negative blip at [param]."
else
message = "<B>[src]</B> emits a negative blip."
message = "<B>[src]</B> emits a negative blip[M ? " at [M]" : ""]."
playsound(src.loc, 'sound/machines/synth_no.ogg', 50, 0)
m_type = 2
if("scream", "screams")
message = "<B>[src]</B> screams!"
var/M = handle_emote_param(param)
message = "<B>[src]</B> screams[M ? " at [M]" : ""]!"
playsound(src.loc, 'sound/goonstation/voice/robot_scream.ogg', 80, 0)
m_type = 2
if("buzz2")
message = "<B>[src]</B> emits an irritated buzzing sound."
var/M = handle_emote_param(param)
message = "<B>[src]</B> emits an irritated buzzing sound[M ? " at [M]" : ""]."
playsound(src.loc, 'sound/machines/buzz-two.ogg', 50, 0)
m_type = 2
@@ -124,4 +78,4 @@
if("help")
to_chat(src, "yes, no, beep, ping, buzz, scream, buzz2")
..(act, m_type, message)
..(act, m_type, message)
@@ -28,92 +28,44 @@
switch(act)
if("ping")
var/M = null
if(param)
for(var/mob/A in view(null, null))
if(param == A.name)
M = A
break
if(!M)
param = null
var/M = handle_emote_param(param)
if(param)
message = "<B>[src]</B> pings at [param]."
else
message = "<B>[src]</B> pings."
message = "<B>[src]</B> pings[M ? " at [M]" : ""]."
playsound(src.loc, 'sound/machines/ping.ogg', 50, 0)
m_type = 2
if("buzz")
var/M = null
if(param)
for(var/mob/A in view(null, null))
if(param == A.name)
M = A
break
if(!M)
param = null
var/M = handle_emote_param(param)
if(param)
message = "<B>[src]</B> buzzes at [param]."
else
message = "<B>[src]</B> buzzes."
message = "<B>[src]</B> buzzes[M ? " at [M]" : ""]."
playsound(src.loc, 'sound/machines/buzz-sigh.ogg', 50, 0)
m_type = 2
if("beep")
var/M = null
if(param)
for(var/mob/A in view(null, null))
if(param == A.name)
M = A
break
if(!M)
param = null
var/M = handle_emote_param(param)
if(param)
message = "<B>[src]</B> beeps at [param]."
else
message = "<B>[src]</B> beeps."
message = "<B>[src]</B> beeps[M ? " at [M]" : ""]."
playsound(src.loc, 'sound/machines/twobeep.ogg', 50, 0)
m_type = 2
if("yes")
var/M = null
if(param)
for(var/mob/A in view(null, null))
if(param == A.name)
M = A
break
if(!M)
param = null
var/M = handle_emote_param(param)
if(param)
message = "<B>[src]</B> emits an affirmative blip at [param]."
else
message = "<B>[src]</B> emits an affirmative blip."
message = "<B>[src]</B> emits an affirmative blip[M ? " at [M]" : ""]."
playsound(src.loc, 'sound/machines/synth_yes.ogg', 50, 0)
m_type = 2
if("no")
var/M = null
if(param)
for(var/mob/A in view(null, null))
if(param == A.name)
M = A
break
if(!M)
param = null
var/M = handle_emote_param(param)
if(param)
message = "<B>[src]</B> emits a negative blip at [param]."
else
message = "<B>[src]</B> emits a negative blip."
message = "<B>[src]</B> emits an negative blip[M ? " at [M]" : ""]."
playsound(src.loc, 'sound/machines/synth_no.ogg', 50, 0)
m_type = 2
if("scream", "screams")
message = "<B>[src]</B> screams!"
var/M = handle_emote_param(param)
message = "<B>[src]</B> screams[M ? " at [M]" : ""]!"
playsound(src.loc, 'sound/goonstation/voice/robot_scream.ogg', 80, 0)
m_type = 2
@@ -287,15 +287,6 @@
C.adjustPlasma(20)
..()
/datum/reagent/plasma_dust/reaction_obj(obj/O, volume)
if((!O) || (!volume))
return 0
O.atmos_spawn_air(SPAWN_TOXINS|SPAWN_20C, volume)
/datum/reagent/plasma_dust/reaction_turf(turf/simulated/T, volume)
if(istype(T))
T.atmos_spawn_air(SPAWN_TOXINS|SPAWN_20C, volume)
/datum/reagent/plasma_dust/reaction_mob(mob/living/M, method=TOUCH, volume)//Splashing people with plasma dust is stronger than fuel!
if(method == TOUCH)
M.adjust_fire_stacks(volume / 5)
@@ -96,6 +96,13 @@
/datum/space_chunk/proc/return_turfs()
return
/datum/space_chunk/proc/search_chunk(object_list)
var/list/located = list()
for(var/atom/object in object_list)
if(((object.x >= x) && (object.x <= (x + width))) && ((object.y >= y) && (object.y <= (y + height))) && (object.z == zpos))
located.Add(object)
return located
#undef BOTTOM_LEFT_CHUNK
#undef BOTTOM_RIGHT_CHUNK
#undef TOP_LEFT_CHUNK
+63
View File
@@ -0,0 +1,63 @@
//Control file with the backbone for the vr rooms and avatars
var/datum/vr_rooms = list()
var/roomcap = 20
/datum/vr_room
var/name = null
var/datum/map_template/vr/template = null
var/datum/space_chunk/chunk = null
var/list/spawn_points = list()
var/expires = 1
proc/make_vr_room(name, template, expires)
var/datum/vr_room/R = new
R.name = name
R.template = template
R.template = vr_templates[R.template]
R.chunk = space_manager.allocate_space(R.template.width, R.template.height)
R.expires = expires
vr_rooms[R.name] = R
R.template.load(locate(R.chunk.x,R.chunk.y,R.chunk.zpos), centered = FALSE)
for(var/atom/landmark in R.chunk.search_chunk(landmarks_list))
if(landmark.name == "avatarspawn")
R.spawn_points.Add(landmark)
//Control code for the avatars
proc/build_virtual_avatar(mob/living/carbon/human/H, location, datum/map_template/vr/level/template)
if(!location)
return
var/mob/living/carbon/human/virtual_reality/vr_avatar
location = get_turf(location)
vr_avatar = new /mob/living/carbon/human/virtual_reality(location)
vr_avatar.set_species(H.species.name)
if(istype(H, /mob/living/carbon/human/virtual_reality))
var/mob/living/carbon/human/virtual_reality/V = H
vr_avatar.real_me = V.real_me
else
vr_avatar.real_me = H
vr_avatar.dna = H.dna.Clone()
vr_avatar.name = H.name
vr_avatar.real_name = H.real_name
vr_avatar.undershirt = H.undershirt
vr_avatar.underwear = H.underwear
vr_avatar.UpdateAppearance()
vr_avatar.equipOutfit(template.outfit)
return vr_avatar
proc/control_remote(mob/living/carbon/human/H, mob/living/carbon/human/virtual_reality/vr_avatar)
if(H.mind)
H.mind.transfer_to(vr_avatar)
proc/spawn_vr_avatar(mob/living/carbon/human/H, datum/vr_room/room)
room = vr_rooms[room]
var/mob/living/carbon/human/virtual_reality/vr_human
vr_human = build_virtual_avatar(H, pick(room.spawn_points), room.template)
control_remote(H, vr_human)
return vr_human
//Preloaded rooms
/hook/roundstart/proc/starting_levels()
make_vr_room("Lobby", "lobby", 0)
return 1
+15
View File
@@ -0,0 +1,15 @@
//place all the outfits for your levels in here.
/datum/outfit/vr/vr_basic
name = "basic vr"
uniform = /obj/item/clothing/under/psysuit
shoes = /obj/item/clothing/shoes/black
/datum/outfit/vr/roman
name = "roman"
uniform = /obj/item/clothing/under/roman
shoes = /obj/item/clothing/shoes/roman
l_hand = /obj/item/weapon/shield/riot/roman
r_hand = /obj/item/weapon/twohanded/spear
head = /obj/item/clothing/head/helmet/roman
back = /obj/item/weapon/twohanded/spear