Merge pull request #1235 from Erthilo/TGUpdates
TG Updates r3695 to r3712
@@ -648,6 +648,7 @@
|
||||
#include "code\game\objects\washing_machine.dm"
|
||||
#include "code\game\objects\watercloset.dm"
|
||||
#include "code\game\objects\weapons.dm"
|
||||
#include "code\game\objects\windoor_assembly.dm"
|
||||
#include "code\game\objects\window.dm"
|
||||
#include "code\game\objects\alien\acid.dm"
|
||||
#include "code\game\objects\alien\defines.dm"
|
||||
@@ -661,6 +662,7 @@
|
||||
#include "code\game\objects\closets\extinguisher.dm"
|
||||
#include "code\game\objects\closets\fireaxe.dm"
|
||||
#include "code\game\objects\closets\firecloset.dm"
|
||||
#include "code\game\objects\closets\fitnesscloset.dm"
|
||||
#include "code\game\objects\closets\gimmick.dm"
|
||||
#include "code\game\objects\closets\gmcloset.dm"
|
||||
#include "code\game\objects\closets\janitor.dm"
|
||||
|
||||
@@ -127,14 +127,14 @@
|
||||
if (lying)
|
||||
icon = lying_icon
|
||||
|
||||
overlays += body_lying
|
||||
overlays += damageicon_lying
|
||||
|
||||
if (face_lying)
|
||||
overlays += face_lying
|
||||
else
|
||||
icon = stand_icon
|
||||
|
||||
overlays += body_standing
|
||||
overlays += damageicon_standing
|
||||
|
||||
if (face_standing)
|
||||
overlays += face_standing
|
||||
|
||||
@@ -17,8 +17,8 @@
|
||||
var/image/face_standing = null
|
||||
var/image/face_lying = null
|
||||
|
||||
var/list/body_standing = list( )
|
||||
var/list/body_lying = list( )
|
||||
var/image/damageicon_standing = null
|
||||
var/image/damageicon_lying = null
|
||||
|
||||
/mob/living/carbon/alien/humanoid/hunter
|
||||
name = "alien hunter"
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
//This file was auto-corrected by findeclaration.exe on 29/05/2012 15:03:04
|
||||
//This file was auto-corrected by findeclaration.exe on 25.5.2012 20:42:31
|
||||
|
||||
/obj
|
||||
//var/datum/module/mod //not used
|
||||
@@ -444,6 +444,40 @@
|
||||
var/armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 0)
|
||||
var/list/allowed = null //suit storage stuff.
|
||||
|
||||
/obj/item/verb/verb_pickup()
|
||||
set src in view(1)
|
||||
set category = "Object"
|
||||
set name = "Pickup"
|
||||
|
||||
if(!(usr))
|
||||
return
|
||||
if((!istype(usr, /mob/living/carbon)) || (istype(usr, /mob/living/carbon/brain)))//Is humanoid, and is not a brain
|
||||
usr << "\red You can't pick things up!"
|
||||
return
|
||||
if( usr.stat || usr.restrained() )//Is not asleep/dead and is not restrained
|
||||
usr << "\red You can't pick things up!"
|
||||
return
|
||||
if(src.anchored) //Object isn't anchored
|
||||
usr << "\red You can't pick that up!"
|
||||
return
|
||||
if(!usr.hand && usr.r_hand) //Right hand is not full
|
||||
usr << "\red Your right hand is full."
|
||||
return
|
||||
if(usr.hand && usr.l_hand) //Left hand is not full
|
||||
usr << "\red Your left hand is full."
|
||||
return
|
||||
if(!istype(src.loc, /turf)) //Object is on a turf
|
||||
usr << "\red You can't pick that up!"
|
||||
return
|
||||
//All checks are done, time to pick it up!
|
||||
if(istype(usr, /mob/living/carbon/human))
|
||||
src.attack_hand(usr)
|
||||
if(istype(usr, /mob/living/carbon/alien))
|
||||
src.attack_alien(usr)
|
||||
if(istype(usr, /mob/living/carbon/monkey))
|
||||
src.attack_paw(usr)
|
||||
return
|
||||
|
||||
/obj/item/device
|
||||
icon = 'device.dmi'
|
||||
|
||||
|
||||
@@ -15,33 +15,6 @@
|
||||
var/lasttry = 0
|
||||
layer = 2.98
|
||||
|
||||
/obj/structure/closet/verb/open_close()
|
||||
set name = "Open/Close"
|
||||
set category = "Object"
|
||||
set src in view(1)
|
||||
|
||||
if(!(usr))
|
||||
return
|
||||
if(!istype(src.loc, /turf) || usr.stat || usr.restrained() )
|
||||
usr << "\red You can't interact with this!"
|
||||
return
|
||||
if(src.anchored)
|
||||
usr << "\red You can't interact with this!"
|
||||
return
|
||||
if(istype(usr, /mob/living/silicon/robot))
|
||||
src.attack_hand(usr)
|
||||
return
|
||||
if((!istype(usr, /mob/living/carbon)) || (istype(usr, /mob/living/carbon/brain)))
|
||||
usr << "\red You can't interact with this!"
|
||||
return
|
||||
if(istype(usr, /mob/living/carbon/human))
|
||||
src.attack_hand(usr)
|
||||
if(istype(usr, /mob/living/carbon/alien))
|
||||
src.attack_alien(usr)
|
||||
if(istype(usr, /mob/living/carbon/monkey))
|
||||
src.attack_paw(usr)
|
||||
return
|
||||
|
||||
/obj/structure/closet/detective
|
||||
name = "detective's closet"
|
||||
desc = "Holds the detective's clothes while his coat rack is being repaired."
|
||||
@@ -142,6 +115,32 @@
|
||||
icon_state = "blue"
|
||||
icon_closed = "blue"
|
||||
|
||||
/obj/structure/closet/boxinggloves
|
||||
name = "boxing gloves"
|
||||
desc = "It's a storage unit for gloves for use in the boxing ring."
|
||||
|
||||
/obj/structure/closet/masks
|
||||
name = "mask closet"
|
||||
desc = "IT'S A STORAGE UNIT FOR FIGHTER MASKS OLE!"
|
||||
|
||||
/obj/structure/closet/lasertag/red
|
||||
name = "red laser tag equipment"
|
||||
desc = "It's a storage unit for laser tag equipment."
|
||||
icon_state = "red"
|
||||
icon_closed = "red"
|
||||
|
||||
/obj/structure/closet/lasertag/blue
|
||||
name = "blue laser tag equipment"
|
||||
desc = "It's a storage unit for laser tag equipment."
|
||||
icon_state = "blue"
|
||||
icon_closed = "blue"
|
||||
|
||||
/obj/structure/closet/athletic_mixed
|
||||
name = "athletic wardrobe"
|
||||
desc = "It's a storage unit for athletic wear."
|
||||
icon_state = "mixed"
|
||||
icon_closed = "mixed"
|
||||
|
||||
/obj/structure/closet/coffin
|
||||
name = "coffin"
|
||||
desc = "It's a burial receptacle for the dearly departed."
|
||||
|
||||
@@ -603,39 +603,61 @@
|
||||
|
||||
|
||||
/obj/structure/closet/syndicate/resources/
|
||||
desc = "It's an emergency storage closet for repairs."
|
||||
desc = "An old, dusty locker."
|
||||
|
||||
/obj/structure/closet/syndicate/resources/New()
|
||||
..()
|
||||
var/common_min = 30 //Minimum amount of minerals in the stack for common minerals
|
||||
var/common_max = 50 //Maximum amount of HONK in the stack for HONK common minerals
|
||||
var/rare_min = 5 //Minimum HONK of HONK in the stack HONK HONK rare minerals
|
||||
var/rare_max = 20 //Maximum HONK HONK HONK in the HONK for HONK rare HONK
|
||||
|
||||
var/list/resources_common = list(
|
||||
|
||||
/obj/item/stack/sheet/metal,
|
||||
/obj/item/stack/sheet/glass,
|
||||
/obj/item/stack/sheet/plasteel,
|
||||
/obj/item/stack/rods
|
||||
)
|
||||
|
||||
var/list/resources_rare = list(
|
||||
|
||||
/obj/item/stack/sheet/gold,
|
||||
/obj/item/stack/sheet/silver,
|
||||
/obj/item/stack/sheet/plasma,
|
||||
/obj/item/stack/sheet/uranium,
|
||||
/obj/item/stack/sheet/diamond
|
||||
|
||||
)
|
||||
|
||||
sleep(2)
|
||||
|
||||
for(var/i = 0, i<2, i++)
|
||||
for(var/res in resources_common)
|
||||
var/obj/item/stack/R = new res(src)
|
||||
R.amount = rand(40,R.max_amount)
|
||||
var/pickednum = rand(1, 50)
|
||||
|
||||
for(var/res in resources_rare)
|
||||
var/obj/item/stack/R = new res(src)
|
||||
R.amount = rand(10,25)
|
||||
//Sad trombone
|
||||
if(pickednum == 1)
|
||||
var/obj/item/weapon/paper/P = new /obj/item/weapon/paper(src)
|
||||
P.name = "IOU"
|
||||
P.info = "Sorry man, we needed the money so we sold your stash. It's ok, we'll double our money for sure this time!"
|
||||
|
||||
//Metal (common ore)
|
||||
if(pickednum >= 2)
|
||||
new /obj/item/stack/sheet/metal(src, rand(common_min, common_max))
|
||||
|
||||
//Glass (common ore)
|
||||
if(pickednum >= 5)
|
||||
new /obj/item/stack/sheet/glass(src, rand(common_min, common_max))
|
||||
|
||||
//Plasteel (common ore) Because it has a million more uses then plasma
|
||||
if(pickednum >= 10)
|
||||
new /obj/item/stack/sheet/plasteel(src, rand(common_min, common_max))
|
||||
|
||||
//Plasma (rare ore)
|
||||
if(pickednum >= 15)
|
||||
new /obj/item/stack/sheet/plasma(src, rand(rare_min, rare_max))
|
||||
|
||||
//Silver (rare ore)
|
||||
if(pickednum >= 20)
|
||||
new /obj/item/stack/sheet/silver(src, rand(rare_min, rare_max))
|
||||
|
||||
//Gold (rare ore)
|
||||
if(pickednum >= 30)
|
||||
new /obj/item/stack/sheet/gold(src, rand(rare_min, rare_max))
|
||||
|
||||
//Uranium (rare ore)
|
||||
if(pickednum >= 40)
|
||||
new /obj/item/stack/sheet/uranium(src, rand(rare_min, rare_max))
|
||||
|
||||
//Diamond (rare HONK)
|
||||
if(pickednum >= 45)
|
||||
new /obj/item/stack/sheet/diamond(src, rand(rare_min, rare_max))
|
||||
|
||||
//Jetpack (You hit the jackpot!)
|
||||
if(pickednum == 50)
|
||||
new /obj/item/weapon/tank/jetpack/carbondioxide(src)
|
||||
|
||||
return
|
||||
|
||||
|
||||
@@ -824,7 +824,7 @@
|
||||
slot_flags = SLOT_BELT
|
||||
force = 5.0
|
||||
throwforce = 7.0
|
||||
item_state = "wrench"
|
||||
item_state = "crowbar"
|
||||
w_class = 2.0
|
||||
m_amt = 50
|
||||
origin_tech = "engineering=1"
|
||||
@@ -832,6 +832,7 @@
|
||||
/obj/item/weapon/crowbar/red
|
||||
icon = 'items.dmi'
|
||||
icon_state = "red_crowbar"
|
||||
item_state = "crowbar_red"
|
||||
|
||||
/obj/item/weapon/cane
|
||||
name = "cane"
|
||||
@@ -2067,11 +2068,13 @@ eternal248: Found broken and buggy Z-levels 7-12, ended up leading to my discove
|
||||
/obj/item/weapon/appendix
|
||||
name = "appendix"
|
||||
desc = "An appendix which looks perfectly healthy."
|
||||
icon = 'food.dmi'
|
||||
icon_state = "appendix"
|
||||
|
||||
/obj/item/weapon/appendixinflamed
|
||||
name = "inflamed appendix"
|
||||
desc = "An appendix which appears to be inflamed."
|
||||
icon = 'food.dmi'
|
||||
icon_state = "appendixinflamed"
|
||||
|
||||
/obj/item/weapon/megaphone
|
||||
|
||||
@@ -12,7 +12,7 @@ var/global/list/space_surprises = list( /obj/item/clothing/mask/facehugger/angr
|
||||
/obj/item/weapon/pickaxe/plasmacutter =2,
|
||||
/obj/structure/closet/syndicate/resources =2,
|
||||
/obj/item/weapon/melee/energy/sword/pirate =1,
|
||||
// /obj/mecha/working/ripley/mining =1
|
||||
/obj/mecha/working/ripley/mining =1
|
||||
|
||||
// /obj/creature =0,
|
||||
// /obj/item/weapon/rcd =0,
|
||||
|
||||
@@ -84,11 +84,13 @@
|
||||
req_access = list(access_heads) //Only used for record deletion right now.
|
||||
var/obj/machinery/dna_scannernew/scanner = null //Linked scanner. For scanning.
|
||||
var/obj/machinery/clonepod/pod1 = null //Linked cloning pod.
|
||||
var/temp = "Initializing System..."
|
||||
var/temp = ""
|
||||
var/scantemp = "Scanner unoccupied"
|
||||
var/menu = 1 //Which menu screen to display
|
||||
var/list/records = list()
|
||||
var/datum/data/record/active_record = null
|
||||
var/obj/item/weapon/disk/data/diskette = null //Mostly so the geneticist can steal everything.
|
||||
var/loading = 0 // Nice loading text
|
||||
var/wantsscan = 1
|
||||
var/wantspod = 1
|
||||
var/list/message = list()
|
||||
@@ -97,64 +99,43 @@
|
||||
..()
|
||||
spawn(5)
|
||||
updatemodules()
|
||||
/*src.scanner = locate(/obj/machinery/dna_scannernew, get_step(src, scandir))
|
||||
src.pod1 = locate(/obj/machinery/clonepod, get_step(src, poddir))
|
||||
|
||||
src.temp = ""
|
||||
if (isnull(src.scanner) && wantsscan)
|
||||
src.temp += " <font color=red>SCNR-ERROR</font>"
|
||||
if (isnull(src.pod1) && wantspod)
|
||||
src.temp += " <font color=red>POD1-ERROR</font>"
|
||||
else if (wantspod)
|
||||
src.pod1.connected = src
|
||||
|
||||
if (src.temp == "")
|
||||
src.temp = "System ready."*/
|
||||
return
|
||||
return
|
||||
|
||||
/obj/machinery/computer/cloning/proc/updatemodules()
|
||||
//world << "UPDATING MODULES"
|
||||
src.scanner = findscanner()//locate(/obj/machinery/dna_scannernew, get_step(src, WEST))
|
||||
src.pod1 = findcloner()//locate(/obj/machinery/clonepod, get_step(src, EAST))
|
||||
//world << "SEARCHING FOR MACHEIN"
|
||||
//src.temp = ""
|
||||
//if (isnull(src.scanner))
|
||||
// src.temp += " <font color=red>SCNR-ERROR</font>"
|
||||
if (!isnull(src.pod1) && !wantspod)
|
||||
src.pod1.connected = src
|
||||
// src.temp += " <font color=red>POD1-ERROR</font>"
|
||||
//else
|
||||
src.scanner = findscanner()
|
||||
src.pod1 = findcloner()
|
||||
|
||||
//if (src.temp == "")
|
||||
// src.temp = "System ready."
|
||||
if (!isnull(src.pod1) && !wantspod)
|
||||
src.pod1.connected = src // Some variable the pod needs
|
||||
|
||||
/obj/machinery/computer/cloning/proc/findscanner()
|
||||
//..()
|
||||
//world << "SEARCHING FOR SCANNER"
|
||||
var/obj/machinery/dna_scannernew/scannerf = null
|
||||
|
||||
// Loop through every direction
|
||||
for(dir in list(1,2,4,8,5,6,9,10))
|
||||
//world << "SEARCHING IN [dir]"
|
||||
|
||||
// Try to find a scanner in that direction
|
||||
scannerf = locate(/obj/machinery/dna_scannernew, get_step(src, dir))
|
||||
|
||||
// If found, then we break, and return the scanner
|
||||
if (!isnull(scannerf))
|
||||
//world << "FOUND"
|
||||
break
|
||||
if(isnull(scannerf) && wantsscan)
|
||||
src.temp += " <font color=red>SCNR-ERROR</font>"
|
||||
|
||||
|
||||
// If no scanner was found, it will return null
|
||||
return scannerf
|
||||
|
||||
/obj/machinery/computer/cloning/proc/findcloner()
|
||||
//..()
|
||||
//world << "SEARCHING FOR POD"
|
||||
var/obj/machinery/clonepod/podf = null
|
||||
|
||||
for(dir in list(1,2,4,8,5,6,9,10))
|
||||
//world << "SEARCHING IN [dir]"
|
||||
|
||||
podf = locate(/obj/machinery/clonepod, get_step(src, dir))
|
||||
|
||||
if (!isnull(podf))
|
||||
//world << "FOUND"
|
||||
break
|
||||
if(isnull(podf) && wantspod)
|
||||
src.temp += " <font color=red>POD1-ERROR</font>"
|
||||
|
||||
return podf
|
||||
|
||||
/obj/machinery/computer/cloning/attackby(obj/item/W as obj, mob/user as mob)
|
||||
@@ -199,19 +180,22 @@
|
||||
dat += "<h4>Scanner Functions</h4>"
|
||||
|
||||
if (isnull(src.scanner))
|
||||
dat += "No scanner connected!"
|
||||
dat += "No scanner connected!<br>"
|
||||
else
|
||||
if (src.scanner.occupant)
|
||||
dat += "<a href='byond://?src=\ref[src];scan=1'>Scan - [src.scanner.occupant]</a>"
|
||||
if(scantemp == "Scanner unoccupied") scantemp = "" // Stupid check to remove the text
|
||||
|
||||
dat += "<a href='byond://?src=\ref[src];scan=1'>Scan - [src.scanner.occupant]</a><br>"
|
||||
else
|
||||
dat += "Scanner unoccupied"
|
||||
|
||||
dat += "<br>Lock status: <a href='byond://?src=\ref[src];lock=1'>[src.scanner.locked ? "Locked" : "Unlocked"]</a>"
|
||||
dat += "Lock status: <a href='byond://?src=\ref[src];lock=1'>[src.scanner.locked ? "Locked" : "Unlocked"]</a><br>"
|
||||
|
||||
dat += "<h4>Database Functions</h4>"
|
||||
dat += "<a href='byond://?src=\ref[src];menu=2'>View Records</a><br>"
|
||||
if (src.diskette)
|
||||
dat += "<a href='byond://?src=\ref[src];disk=eject'>Eject Disk</a>"
|
||||
// Database
|
||||
dat += "<h4>Database Functions</h4>"
|
||||
dat += "<a href='byond://?src=\ref[src];menu=2'>View Records</a><br>"
|
||||
if (src.diskette)
|
||||
dat += "<a href='byond://?src=\ref[src];disk=eject'>Eject Disk</a>"
|
||||
|
||||
|
||||
if(2)
|
||||
@@ -271,8 +255,21 @@
|
||||
if(..())
|
||||
return
|
||||
|
||||
if(loading)
|
||||
return
|
||||
|
||||
if ((href_list["scan"]) && (!isnull(src.scanner)))
|
||||
src.scan_mob(src.scanner.occupant)
|
||||
scantemp = ""
|
||||
|
||||
loading = 1
|
||||
src.updateUsrDialog()
|
||||
|
||||
spawn(20)
|
||||
src.scan_mob(src.scanner.occupant)
|
||||
|
||||
loading = 0
|
||||
src.updateUsrDialog()
|
||||
|
||||
|
||||
//No locking an open scanner.
|
||||
else if ((href_list["lock"]) && (!isnull(src.scanner)))
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
//This file was auto-corrected by findeclaration.exe on 29/05/2012 15:03:04
|
||||
//This file was auto-corrected by findeclaration.exe on 25.5.2012 20:42:31
|
||||
|
||||
/obj/item/weapon/airlock_electronics
|
||||
name = "Airlock Electronics"
|
||||
@@ -58,15 +58,12 @@
|
||||
|
||||
Topic(href, href_list)
|
||||
..()
|
||||
if (usr.stat || usr.restrained())
|
||||
if (usr.stat || usr.restrained() || !ishuman(usr))
|
||||
return
|
||||
if (href_list["close"])
|
||||
usr << browse(null, "window=airlock")
|
||||
return
|
||||
|
||||
if (!ishuman(usr))
|
||||
return
|
||||
|
||||
if (href_list["login"])
|
||||
var/obj/item/I = usr.equipped()
|
||||
if (istype(I, /obj/item/device/pda))
|
||||
|
||||
@@ -1,9 +1,10 @@
|
||||
/obj/machinery/door/window
|
||||
name = "interior door"
|
||||
desc = "A door made from a window, yet it can not break nor be depowered."
|
||||
desc = "A strong door."
|
||||
icon = 'windoor.dmi'
|
||||
icon_state = "left"
|
||||
var/base_state = "left"
|
||||
var/health = 200.0 //If you change this, consiter changing ../door/window/brigdoor/ health at the bottom of this .dm file
|
||||
visible = 0.0
|
||||
flags = ON_BORDER
|
||||
opacity = 0
|
||||
@@ -28,6 +29,11 @@
|
||||
src.base_state = src.icon_state
|
||||
return
|
||||
|
||||
/obj/machinery/door/window/Del()
|
||||
density = 0
|
||||
playsound(src, "shatter", 70, 1)
|
||||
..()
|
||||
|
||||
/obj/machinery/door/window/Bumped(atom/movable/AM as mob|obj)
|
||||
if (!( ismob(AM) ))
|
||||
var/obj/machinery/bot/bot = AM
|
||||
@@ -112,13 +118,49 @@
|
||||
src.operating = 0
|
||||
return 1
|
||||
|
||||
/obj/machinery/door/window/attackby(obj/item/I as obj, mob/user as mob)
|
||||
//When an object is thrown at the window
|
||||
/obj/machinery/door/window/hitby(AM as mob|obj)
|
||||
|
||||
..()
|
||||
for(var/mob/O in viewers(src, null))
|
||||
O.show_message("\red <B>The glass door was hit by [AM].</B>", 1)
|
||||
var/tforce = 0
|
||||
if(ismob(AM))
|
||||
tforce = 40
|
||||
else
|
||||
tforce = AM:throwforce
|
||||
playsound(src.loc, 'Glasshit.ogg', 100, 1)
|
||||
src.health = max(0, src.health - tforce)
|
||||
if (src.health <= 0)
|
||||
new /obj/item/weapon/shard(src.loc)
|
||||
var/obj/item/weapon/cable_coil/CC = new /obj/item/weapon/cable_coil(src.loc)
|
||||
CC.amount = 2
|
||||
src.density = 0
|
||||
del(src)
|
||||
return
|
||||
//..() //Does this really need to be here twice? The parent proc doesn't even do anything yet. - Nodrak
|
||||
return
|
||||
|
||||
|
||||
/obj/machinery/door/window/attack_ai(mob/user as mob)
|
||||
return src.attack_hand(user)
|
||||
|
||||
|
||||
/obj/machinery/door/window/attack_paw(mob/user as mob)
|
||||
return src.attack_hand(user)
|
||||
|
||||
|
||||
/obj/machinery/door/window/attack_hand(mob/user as mob)
|
||||
return src.attackby(user, user)
|
||||
|
||||
|
||||
/obj/machinery/door/window/attackby(obj/item/weapon/I as obj, mob/user as mob)
|
||||
|
||||
//If it's in the process of opening/closing, ignore the click
|
||||
if (src.operating)
|
||||
return
|
||||
src.add_fingerprint(user)
|
||||
if (!src.requiresID())
|
||||
//don't care who they are or what they have, act as if they're NOTHING
|
||||
user = null
|
||||
|
||||
//Emags and ninja swords? You may pass.
|
||||
if (src.density && (istype(I, /obj/item/weapon/card/emag)||istype(I, /obj/item/weapon/melee/energy/blade)))
|
||||
if(istype(I, /obj/item/weapon/card/emag))
|
||||
var/obj/item/weapon/card/emag/E = I
|
||||
@@ -139,24 +181,49 @@
|
||||
sleep(6)
|
||||
open()
|
||||
return 1
|
||||
|
||||
//If it's a weapon, smash windoor. Unless it's an id card, agent card, ect.. then ignore it (Cards really shouldnt damage a door anyway)
|
||||
if(src.density && istype(I, /obj/item/weapon) && !istype(I, /obj/item/weapon/card))
|
||||
var/aforce = I.force
|
||||
if(I.damtype == BRUTE || I.damtype == BURN)
|
||||
src.health = max(0, src.health - aforce)
|
||||
playsound(src.loc, 'Glasshit.ogg', 75, 1)
|
||||
user.visible_message("\red <B>\The [src] was hit with \a [I] by \the [user]!</B>", "\red <B>You hit \the [src] with \the [I]!</B>", "You hear an object hitting glass.")
|
||||
if (src.health <= 0)
|
||||
new /obj/item/weapon/shard(src.loc)
|
||||
var/obj/item/weapon/cable_coil/CC = new /obj/item/weapon/cable_coil(src.loc)
|
||||
CC.amount = 2
|
||||
src.density = 0
|
||||
del(src)
|
||||
return
|
||||
|
||||
|
||||
src.add_fingerprint(user)
|
||||
if (!src.requiresID())
|
||||
//don't care who they are or what they have, act as if they're NOTHING
|
||||
user = null
|
||||
|
||||
if (src.allowed(user) || istype(I, /obj/item/device/hacktool))
|
||||
if (src.density)
|
||||
open()
|
||||
else
|
||||
close()
|
||||
|
||||
else if (src.density)
|
||||
flick(text("[]deny", src.base_state), src)
|
||||
|
||||
return
|
||||
|
||||
|
||||
|
||||
/obj/machinery/door/window/brigdoor
|
||||
name = "Brig Door"
|
||||
name = "Secure Door"
|
||||
icon = 'windoor.dmi'
|
||||
icon_state = "leftsecure"
|
||||
base_state = "leftsecure"
|
||||
req_access = list(access_security)
|
||||
var/id = null
|
||||
health = 500.0 //Stronger doors for prison (regular window door health is 200)
|
||||
|
||||
|
||||
/obj/machinery/door/window/northleft
|
||||
@@ -191,7 +258,6 @@
|
||||
icon_state = "right"
|
||||
base_state = "right"
|
||||
|
||||
|
||||
/obj/machinery/door/window/brigdoor/northleft
|
||||
dir = NORTH
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
//This file was auto-corrected by findeclaration.exe on 29/05/2012 15:03:04
|
||||
//This file was auto-corrected by findeclaration.exe on 25.5.2012 20:42:31
|
||||
|
||||
/obj/machinery/computer/telecomms/server
|
||||
name = "Telecommunications Server Monitor"
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
//This file was auto-corrected by findeclaration.exe on 29/05/2012 15:03:04
|
||||
//This file was auto-corrected by findeclaration.exe on 25.5.2012 20:42:32
|
||||
|
||||
|
||||
/*
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
//This file was auto-corrected by findeclaration.exe on 29/05/2012 15:03:05
|
||||
//This file was auto-corrected by findeclaration.exe on 25.5.2012 20:42:32
|
||||
|
||||
|
||||
|
||||
@@ -492,9 +492,11 @@ var/engwords = list("travel", "blood", "join", "hell", "destroy", "technology",
|
||||
M << "\red You feel searing heat inside!"
|
||||
|
||||
|
||||
|
||||
attack_self(mob/living/user as mob)
|
||||
usr = user
|
||||
if(!usr.canmove || usr.stat || usr.restrained())
|
||||
return
|
||||
|
||||
if(!wordtravel)
|
||||
runerandom()
|
||||
if(iscultist(user))
|
||||
@@ -504,6 +506,10 @@ var/engwords = list("travel", "blood", "join", "hell", "destroy", "technology",
|
||||
if (!istype(user.loc,/turf))
|
||||
user << "\red You do not have enough space to write a proper rune."
|
||||
return
|
||||
|
||||
|
||||
|
||||
|
||||
if (C>=26+runedec+ticker.mode.cult.len) //including the useless rune at the secret room, shouldn't count against the limit of 25 runes - Urist
|
||||
switch(alert("Too many runes are already in the vicinity.. The cloth of reality can't take that much of a strain. By creating another rune, you risk locally tearing reality apart, which would prove fatal to you. Do you still wish to scribe the rune?",,"Yes","No"))
|
||||
if("Yes")
|
||||
@@ -519,9 +525,13 @@ var/engwords = list("travel", "blood", "join", "hell", "destroy", "technology",
|
||||
if("Cancel")
|
||||
return
|
||||
if("Read it")
|
||||
if(usr.equipped() != src)
|
||||
return
|
||||
user << browse("[tomedat]", "window=Arcane Tome")
|
||||
return
|
||||
if("Notes")
|
||||
if(usr.equipped() != src)
|
||||
return
|
||||
notedat = {"
|
||||
<br><b>Word translation notes</b> <br>
|
||||
[words[1]] is <a href='byond://?src=\ref[src];number=1;action=change'>[words[words[1]]]</A> <A href='byond://?src=\ref[src];number=1;action=clear'>Clear</A><BR>
|
||||
@@ -538,6 +548,9 @@ var/engwords = list("travel", "blood", "join", "hell", "destroy", "technology",
|
||||
// call(/obj/item/weapon/tome/proc/edit_notes)()
|
||||
user << browse("[notedat]", "window=notes")
|
||||
return
|
||||
if(usr.equipped() != src)
|
||||
return
|
||||
|
||||
var/w1
|
||||
var/w2
|
||||
var/w3
|
||||
@@ -559,11 +572,17 @@ var/engwords = list("travel", "blood", "join", "hell", "destroy", "technology",
|
||||
for (var/w in words)
|
||||
if (words[w] == w3)
|
||||
w3 = w
|
||||
|
||||
if(usr.equipped() != src)
|
||||
return
|
||||
|
||||
for (var/mob/V in viewers(src))
|
||||
V.show_message("\red [user] slices open a finger and begins to chant and paint symbols on the floor.", 3, "\red You hear chanting.", 2)
|
||||
user << "\red You slice open one of your fingers and begin drawing a rune on the floor whilst chanting the ritual that binds your life essence with the dark arcane energies flowing through the surrounding world."
|
||||
user.take_overall_damage(1)
|
||||
if(do_after(user, 50))
|
||||
if(usr.equipped() != src)
|
||||
return
|
||||
var/mob/living/carbon/human/H = user
|
||||
var/obj/effect/rune/R = new /obj/effect/rune(user.loc)
|
||||
user << "\red You finish drawing the arcane markings of the Geometer."
|
||||
|
||||
@@ -41,6 +41,24 @@
|
||||
ME.attach(src)
|
||||
return
|
||||
|
||||
/obj/mecha/working/ripley/mining
|
||||
desc = "An old, dusty mining ripley."
|
||||
name = "APLU \"Miner\""
|
||||
|
||||
/obj/mecha/working/ripley/mining/New()
|
||||
..()
|
||||
//Attach drill
|
||||
if(prob(25)) //Possible diamond drill... Feeling lucky?
|
||||
var/obj/item/mecha_parts/mecha_equipment/tool/drill/diamonddrill/D = new /obj/item/mecha_parts/mecha_equipment/tool/drill/diamonddrill
|
||||
D.attach(src)
|
||||
else
|
||||
var/obj/item/mecha_parts/mecha_equipment/tool/drill/D = new /obj/item/mecha_parts/mecha_equipment/tool/drill
|
||||
D.attach(src)
|
||||
|
||||
//Attach hydrolic clamp
|
||||
var/obj/item/mecha_parts/mecha_equipment/tool/hydraulic_clamp/HC = new /obj/item/mecha_parts/mecha_equipment/tool/hydraulic_clamp
|
||||
HC.attach(src)
|
||||
|
||||
/obj/mecha/working/ripley/Exit(atom/movable/O)
|
||||
if(O in cargo)
|
||||
return 0
|
||||
|
||||
@@ -232,3 +232,30 @@
|
||||
|
||||
if(!src.toggle())
|
||||
usr << "\blue It won't budge!"
|
||||
|
||||
/obj/structure/closet/verb/verb_toggleopen()
|
||||
set src in view(1)
|
||||
set category = "Object"
|
||||
set name = "Toggle Open"
|
||||
|
||||
if(!(usr))
|
||||
return
|
||||
if(!istype(src.loc, /turf) || usr.stat || usr.restrained() )
|
||||
usr << "\red You can't interact with this!"
|
||||
return
|
||||
if(src.anchored)
|
||||
usr << "\red You can't interact with this!"
|
||||
return
|
||||
if(istype(usr, /mob/living/silicon/robot))
|
||||
src.attack_hand(usr)
|
||||
return
|
||||
if((!istype(usr, /mob/living/carbon)) || (istype(usr, /mob/living/carbon/brain)))
|
||||
usr << "\red You can't interact with this!"
|
||||
return
|
||||
if(istype(usr, /mob/living/carbon/human))
|
||||
src.attack_hand(usr)
|
||||
if(istype(usr, /mob/living/carbon/alien))
|
||||
src.attack_alien(usr)
|
||||
if(istype(usr, /mob/living/carbon/monkey))
|
||||
src.attack_paw(usr)
|
||||
return
|
||||
|
||||
@@ -0,0 +1,39 @@
|
||||
/obj/structure/closet/athletic_mixed/New()
|
||||
..()
|
||||
sleep(2)
|
||||
new /obj/item/clothing/under/shorts/grey(src)
|
||||
new /obj/item/clothing/under/shorts/black(src)
|
||||
new /obj/item/clothing/under/shorts/red(src)
|
||||
new /obj/item/clothing/under/shorts/blue(src)
|
||||
new /obj/item/clothing/under/shorts/green(src)
|
||||
|
||||
/obj/structure/closet/boxinggloves/New()
|
||||
..()
|
||||
sleep(2)
|
||||
new /obj/item/clothing/gloves/boxing/blue(src)
|
||||
new /obj/item/clothing/gloves/boxing/green(src)
|
||||
new /obj/item/clothing/gloves/boxing/yellow(src)
|
||||
new /obj/item/clothing/gloves/boxing(src)
|
||||
|
||||
/obj/structure/closet/masks/New()
|
||||
..()
|
||||
sleep(2)
|
||||
new /obj/item/clothing/mask/luchador(src)
|
||||
new /obj/item/clothing/mask/luchador/rudos(src)
|
||||
new /obj/item/clothing/mask/luchador/tecnicos(src)
|
||||
|
||||
/obj/structure/closet/lasertag/red/New()
|
||||
..()
|
||||
sleep(2)
|
||||
new /obj/item/clothing/suit/redtag(src)
|
||||
new /obj/item/clothing/suit/redtag(src)
|
||||
new /obj/item/weapon/gun/energy/laser/redtag(src)
|
||||
new /obj/item/weapon/gun/energy/laser/redtag(src)
|
||||
|
||||
/obj/structure/closet/lasertag/blue/New()
|
||||
..()
|
||||
sleep(2)
|
||||
new /obj/item/clothing/suit/bluetag(src)
|
||||
new /obj/item/clothing/suit/bluetag(src)
|
||||
new /obj/item/weapon/gun/energy/laser/bluetag(src)
|
||||
new /obj/item/weapon/gun/energy/laser/bluetag(src)
|
||||
@@ -24,6 +24,19 @@
|
||||
src.req_access += pick(get_all_accesses())
|
||||
..()
|
||||
|
||||
/obj/structure/closet/secure_closet/proc/togglelock(mob/user as mob)
|
||||
if(src.allowed(user))
|
||||
src.locked = !src.locked
|
||||
for(var/mob/O in viewers(user, 3))
|
||||
if((O.client && !( O.blinded )))
|
||||
O << "\blue The locker has been [src.locked ? null : "un"]locked by [user]."
|
||||
if(src.locked)
|
||||
src.icon_state = src.icon_locked
|
||||
else
|
||||
src.icon_state = src.icon_closed
|
||||
else
|
||||
user << "\red Access Denied"
|
||||
|
||||
/obj/structure/closet/secure_closet/attackby(obj/item/W as obj, mob/user as mob)
|
||||
if(src.opened)
|
||||
if(istype(W, /obj/item/weapon/grab))
|
||||
@@ -83,8 +96,7 @@
|
||||
else
|
||||
user << "You need to stay still!"
|
||||
else
|
||||
user << "\red Access Denied"
|
||||
return
|
||||
togglelock(user)
|
||||
|
||||
/obj/structure/closet/secure_closet/relaymove(mob/user as mob)
|
||||
if(user.stat)
|
||||
@@ -114,4 +126,16 @@
|
||||
return src.attackby(null, user)
|
||||
|
||||
/obj/structure/closet/secure_closet/attack_paw(mob/user as mob)
|
||||
return src.attack_hand(user)
|
||||
return src.attack_hand(user)
|
||||
|
||||
/obj/structure/closet/secure_closet/verb/verb_togglelock()
|
||||
set src in oview(1) // Can only use it from one square distance
|
||||
set category = "Object"
|
||||
set name = "Toggle Lock"
|
||||
|
||||
if(!usr.canmove || usr.stat || usr.restrained()) // Don't use it if you're not able to! Checks for stuns, ghost and restrain
|
||||
return
|
||||
|
||||
if(!opened) // If we let him lock it while it's open, it will close without the items inside going with it
|
||||
togglelock(usr)
|
||||
|
||||
|
||||
@@ -74,12 +74,15 @@ obj/structure/closet/wardrobe/hop/New()
|
||||
|
||||
/obj/structure/closet/wardrobe/chaplain_black/New()
|
||||
//new /obj/item/clothing/suit/imperium_monk(src) //No. -- Urist
|
||||
new /obj/item/clothing/under/rank/chaplain(src)
|
||||
new /obj/item/clothing/shoes/black(src)
|
||||
new /obj/item/clothing/suit/nun(src)
|
||||
new /obj/item/clothing/head/nun_hood(src)
|
||||
new /obj/item/clothing/suit/storage/chaplain_hoodie(src)
|
||||
new /obj/item/clothing/head/chaplain_hood(src)
|
||||
new /obj/item/clothing/suit/holidaypriest(src)
|
||||
new /obj/item/clothing/suit/hastur (src)
|
||||
new /obj/item/clothing/head/hasturhood (src)
|
||||
//new /obj/item/clothing/suit/hastur (src) //No. -- Urist
|
||||
//new /obj/item/clothing/head/hasturhood (src) //No. -- Urist
|
||||
return
|
||||
|
||||
/obj/structure/closet/wardrobe/green/New()
|
||||
|
||||
@@ -126,6 +126,7 @@
|
||||
ttone = "holy"
|
||||
|
||||
/obj/item/device/pda/lawyer
|
||||
default_cartridge = /obj/item/weapon/cartridge/lawyer
|
||||
icon_state = "pda-lawyer"
|
||||
ttone = "objection"
|
||||
|
||||
@@ -1034,15 +1035,15 @@
|
||||
var/newcart = pick(1,2,3,4)
|
||||
switch(newcart)
|
||||
if(1)
|
||||
new /obj/item/weapon/cartridge/janitor(src)
|
||||
new /obj/item/weapon/cartridge/engineering(src)
|
||||
if(2)
|
||||
new /obj/item/weapon/cartridge/security(src)
|
||||
if(3)
|
||||
new /obj/item/weapon/cartridge/medical(src)
|
||||
if(4)
|
||||
new /obj/item/weapon/cartridge/head(src)
|
||||
new /obj/item/weapon/cartridge/signal/toxins(src)
|
||||
|
||||
new /obj/item/weapon/cartridge/signal/toxins(src)
|
||||
new /obj/item/weapon/cartridge/head(src)
|
||||
|
||||
|
||||
// Pass along the pulse to atoms in contents, largely added so pAIs are vulnerable to EMP
|
||||
|
||||
@@ -56,7 +56,6 @@
|
||||
spawn(5)
|
||||
radio = new /obj/item/radio/integrated/beepsky(src)
|
||||
|
||||
|
||||
detective
|
||||
name = "D.E.T.E.C.T. Cartridge"
|
||||
icon_state = "cart-s"
|
||||
@@ -70,6 +69,11 @@
|
||||
icon_state = "cart-j"
|
||||
access_janitor = 1
|
||||
|
||||
lawyer
|
||||
name = "P.R.O.V.E. Cartridge"
|
||||
icon_state = "cart-s"
|
||||
access_security = 1
|
||||
|
||||
clown
|
||||
name = "Honkworks 5.0"
|
||||
icon_state = "cart-clown"
|
||||
@@ -153,6 +157,7 @@
|
||||
name = "Med-U DELUXE"
|
||||
icon_state = "cart-cmo"
|
||||
access_status_display = 1
|
||||
access_reagent_scanner = 1
|
||||
access_medical = 1
|
||||
|
||||
rd
|
||||
|
||||
@@ -184,7 +184,9 @@ obj/structure/door_assembly
|
||||
W:welding = 2
|
||||
user.visible_message("[user] dissassembles the airlock assembly.", "You start to dissassemble the airlock assembly.")
|
||||
playsound(src.loc, 'Welder2.ogg', 50, 1)
|
||||
|
||||
if(do_after(user, 40))
|
||||
if(!src) return
|
||||
user << "\blue You dissasembled the airlock assembly!"
|
||||
new /obj/item/stack/sheet/metal(get_turf(src), 4)
|
||||
if(src.glass==1)
|
||||
@@ -194,52 +196,55 @@ obj/structure/door_assembly
|
||||
else
|
||||
user << "\blue You need more welding fuel to dissassemble the airlock assembly."
|
||||
return
|
||||
|
||||
else if(istype(W, /obj/item/weapon/wrench) && !anchored )
|
||||
playsound(src.loc, 'Ratchet.ogg', 100, 1)
|
||||
var/turf/T = get_turf(user)
|
||||
user.visible_message("[user] secures the airlock assembly to the floor.", "You start to secure the airlock assembly to the floor.")
|
||||
sleep(40)
|
||||
if(get_turf(user) == T)
|
||||
|
||||
if(do_after(user, 40))
|
||||
if(!src) return
|
||||
user << "\blue You secured the airlock assembly!"
|
||||
src.name = "Secured Airlock Assembly"
|
||||
src.anchored = 1
|
||||
|
||||
else if(istype(W, /obj/item/weapon/wrench) && anchored )
|
||||
playsound(src.loc, 'Ratchet.ogg', 100, 1)
|
||||
var/turf/T = get_turf(user)
|
||||
user.visible_message("[user] unsecures the airlock assembly from the floor.", "You start to unsecure the airlock assembly from the floor.")
|
||||
sleep(40)
|
||||
if(get_turf(user) == T)
|
||||
if(do_after(user, 40))
|
||||
if(!src) return
|
||||
user << "\blue You unsecured the airlock assembly!"
|
||||
src.name = "Airlock Assembly"
|
||||
src.anchored = 0
|
||||
|
||||
else if(istype(W, /obj/item/weapon/cable_coil) && state == 0 && anchored )
|
||||
var/obj/item/weapon/cable_coil/coil = W
|
||||
var/turf/T = get_turf(user)
|
||||
user.visible_message("[user] wires the airlock assembly.", "You start to wire the airlock assembly.")
|
||||
sleep(40)
|
||||
if(get_turf(user) == T)
|
||||
if(do_after(user, 40))
|
||||
if(!src) return
|
||||
coil.use(1)
|
||||
src.state = 1
|
||||
user << "\blue You wire the Airlock!"
|
||||
src.name = "Wired Airlock Assembly"
|
||||
|
||||
else if(istype(W, /obj/item/weapon/wirecutters) && state == 1 )
|
||||
playsound(src.loc, 'Wirecutter.ogg', 100, 1)
|
||||
var/turf/T = get_turf(user)
|
||||
user.visible_message("[user] cuts the wires from the airlock assembly.", "You start to cut the wires from airlock assembly.")
|
||||
sleep(40)
|
||||
if(get_turf(user) == T)
|
||||
|
||||
if(do_after(user, 40))
|
||||
if(!src) return
|
||||
user << "\blue You cut the airlock wires.!"
|
||||
new/obj/item/weapon/cable_coil(T, 1)
|
||||
new/obj/item/weapon/cable_coil(get_turf(user), 1)
|
||||
src.state = 0
|
||||
src.name = "Secured Airlock Assembly"
|
||||
|
||||
else if(istype(W, /obj/item/weapon/airlock_electronics) && state == 1 )
|
||||
playsound(src.loc, 'Screwdriver.ogg', 100, 1)
|
||||
var/turf/T = get_turf(user)
|
||||
user.visible_message("[user] installs the electronics into the airlock assembly.", "You start to install electronics into the airlock assembly.")
|
||||
user.drop_item()
|
||||
W.loc = src
|
||||
sleep(40)
|
||||
if(get_turf(user) == T)
|
||||
|
||||
if(do_after(user, 40))
|
||||
if(!src) return
|
||||
user << "\blue You installed the airlock electronics!"
|
||||
|
||||
var/obj/item/weapon/airlock_electronics/E = W
|
||||
@@ -263,12 +268,13 @@ obj/structure/door_assembly
|
||||
W.loc = src.loc
|
||||
|
||||
//del(W)
|
||||
|
||||
else if(istype(W, /obj/item/weapon/crowbar) && state == 2 )
|
||||
playsound(src.loc, 'Crowbar.ogg', 100, 1)
|
||||
var/turf/T = get_turf(user)
|
||||
user.visible_message("[user] removes the electronics from the airlock assembly.", "You start to install electronics into the airlock assembly.")
|
||||
sleep(40)
|
||||
if(get_turf(user) == T)
|
||||
|
||||
if(do_after(user, 40))
|
||||
if(!src) return
|
||||
user << "\blue You removed the airlock electronics!"
|
||||
src.state = 1
|
||||
src.name = "Wired Airlock Assembly"
|
||||
@@ -279,6 +285,7 @@ obj/structure/door_assembly
|
||||
ae = electronics
|
||||
electronics = null
|
||||
ae.loc = src.loc
|
||||
|
||||
else if(istype(W, /obj/item/stack/sheet/rglass) && glass == 0 && ispath(glass_type))
|
||||
playsound(src.loc, 'Crowbar.ogg', 100, 1)
|
||||
user.visible_message("[user] adds reinforced glass windows to the airlock assembly.", "You start to install reinforced glass windows into the airlock assembly.")
|
||||
@@ -293,10 +300,10 @@ obj/structure/door_assembly
|
||||
src.airlock_type = glass_type
|
||||
else if(istype(W, /obj/item/weapon/screwdriver) && state == 2 )
|
||||
playsound(src.loc, 'Screwdriver.ogg', 100, 1)
|
||||
var/turf/T = get_turf(user)
|
||||
user << "\blue Now finishing the airlock."
|
||||
sleep(40)
|
||||
if(get_turf(user) == T)
|
||||
|
||||
if(do_after(user, 40))
|
||||
if(!src) return
|
||||
user << "\blue You finish the airlock!"
|
||||
var/obj/machinery/door/airlock/door
|
||||
if(glass)
|
||||
|
||||
@@ -70,41 +70,6 @@
|
||||
|
||||
src.loc = T
|
||||
|
||||
|
||||
obj/item/verb/pick_up()
|
||||
set name = "Pick Up"
|
||||
set category = "Object"
|
||||
set src in view(1)
|
||||
|
||||
if(!(usr))
|
||||
return
|
||||
if((!istype(usr, /mob/living/carbon)) || (istype(usr, /mob/living/carbon/brain)))//Is humanoid, and is not a brain
|
||||
usr << "\red You can't pick things up!"
|
||||
return
|
||||
if( usr.stat || usr.restrained() )//Is not asleep/dead and is not restrained
|
||||
usr << "\red You can't pick things up!"
|
||||
return
|
||||
if(src.anchored) //Object isn't anchored
|
||||
usr << "\red You can't pick that up!"
|
||||
return
|
||||
if(!usr.hand && usr.r_hand) //Right hand is not full
|
||||
usr << "\red Your right hand is full."
|
||||
return
|
||||
if(usr.hand && usr.l_hand) //Left hand is not full
|
||||
usr << "\red Your left hand is full."
|
||||
return
|
||||
if(!istype(src.loc, /turf)) //Object is on a turf
|
||||
usr << "\red You can't pick that up!"
|
||||
return
|
||||
//All checks are done, time to pick it up!
|
||||
if(istype(usr, /mob/living/carbon/human))
|
||||
src.attack_hand(usr)
|
||||
if(istype(usr, /mob/living/carbon/alien))
|
||||
src.attack_alien(usr)
|
||||
if(istype(usr, /mob/living/carbon/monkey))
|
||||
src.attack_paw(usr)
|
||||
return
|
||||
|
||||
/obj/item/examine()
|
||||
set src in view()
|
||||
|
||||
|
||||
@@ -27,7 +27,29 @@ WELDINGTOOOL
|
||||
|
||||
// SCREWDRIVER
|
||||
/obj/item/weapon/screwdriver/New()
|
||||
icon_state = pick("screwdriver","screwdriver2","screwdriver3","screwdriver4","screwdriver5","screwdriver6","screwdriver7")
|
||||
switch(pick("red","blue","purple","brown","green","cyan","yellow"))
|
||||
if ("red")
|
||||
icon_state = "screwdriver2"
|
||||
item_state = "screwdriver"
|
||||
if ("blue")
|
||||
icon_state = "screwdriver"
|
||||
item_state = "screwdriver_blue"
|
||||
if ("purple")
|
||||
icon_state = "screwdriver3"
|
||||
item_state = "screwdriver_purple"
|
||||
if ("brown")
|
||||
icon_state = "screwdriver4"
|
||||
item_state = "screwdriver_brown"
|
||||
if ("green")
|
||||
icon_state = "screwdriver5"
|
||||
item_state = "screwdriver_green"
|
||||
if ("cyan")
|
||||
icon_state = "screwdriver6"
|
||||
item_state = "screwdriver_cyan"
|
||||
if ("yellow")
|
||||
icon_state = "screwdriver7"
|
||||
item_state = "screwdriver_yellow"
|
||||
|
||||
if (prob(75))
|
||||
src.pixel_y = rand(0, 16)
|
||||
return
|
||||
@@ -327,6 +349,7 @@ WELDINGTOOOL
|
||||
New()
|
||||
if(prob(50))
|
||||
icon_state = "cutters-y"
|
||||
item_state = "cutters_yellow"
|
||||
|
||||
/obj/item/weapon/wirecutters/attack(mob/M as mob, mob/user as mob)
|
||||
if((M.handcuffed) && (istype(M:handcuffed, /obj/item/weapon/handcuffs/cable)))
|
||||
|
||||
@@ -17,8 +17,8 @@ SHARDS
|
||||
var/obj/item/weapon/cable_coil/CC = W
|
||||
if(CC.amount < 5)
|
||||
user << "\b There is not enough wire in this coil. You need 5 lengths."
|
||||
CC.amount -= 5
|
||||
amount -= 1
|
||||
CC.use(5)
|
||||
src.use(1)
|
||||
user << "\blue You attach wire to the [name]."
|
||||
new/obj/item/stack/light_w(user.loc)
|
||||
if(CC.amount <= 0)
|
||||
@@ -50,37 +50,39 @@ SHARDS
|
||||
return 0
|
||||
var/title = "Sheet-Glass"
|
||||
title += " ([src.amount] sheet\s left)"
|
||||
switch(alert(title, "Would you like full tile glass or one direction?", "one direct", "full (2 sheets)", "cancel", null))
|
||||
if("one direct")
|
||||
switch(alert(title, "Would you like full tile glass or one direction?", "One Direction", "Full Window", "Cancel", null))
|
||||
if("One Direction")
|
||||
if(!src) return 1
|
||||
if(src.loc != user) return 1
|
||||
|
||||
var/list/directions = new/list(cardinal)
|
||||
var/i = 0
|
||||
for (var/obj/structure/window/win in user.loc)
|
||||
i++
|
||||
if(i >= 4)
|
||||
user << "\red There are too many windows in this location."
|
||||
return 1
|
||||
directions-=win.dir
|
||||
if(!(win.ini_dir in cardinal))
|
||||
user << "\red Can't let you do that."
|
||||
return 1
|
||||
var/dir_to_set = 2
|
||||
//yes, this could probably be done better but hey... it works...
|
||||
|
||||
var/dir_to_set = NORTH
|
||||
for(var/obj/structure/window/WT in user.loc)
|
||||
if (WT.dir == dir_to_set)
|
||||
dir_to_set = 4
|
||||
for(var/obj/structure/window/WT in user.loc)
|
||||
if (WT.dir == dir_to_set)
|
||||
dir_to_set = 1
|
||||
for(var/obj/structure/window/WT in user.loc)
|
||||
if (WT.dir == dir_to_set)
|
||||
dir_to_set = 8
|
||||
for(var/obj/structure/window/WT in user.loc)
|
||||
if (WT.dir == dir_to_set)
|
||||
dir_to_set = 2
|
||||
if (WT.dir == SOUTH)
|
||||
dir_to_set = EAST
|
||||
if (WT.dir == WEST)
|
||||
dir_to_set = SOUTH
|
||||
if (WT.dir == NORTH)
|
||||
dir_to_set = WEST
|
||||
|
||||
var/obj/structure/window/W
|
||||
W = new /obj/structure/window/basic( user.loc, 0 )
|
||||
W.dir = dir_to_set
|
||||
W.ini_dir = W.dir
|
||||
W.anchored = 0
|
||||
src.use(1)
|
||||
if("full (2 sheets)")
|
||||
if("Full Window")
|
||||
if(!src) return 1
|
||||
if(src.loc != user) return 1
|
||||
if(src.amount < 2)
|
||||
@@ -111,30 +113,32 @@ SHARDS
|
||||
return 0
|
||||
var/title = "Sheet Reinf. Glass"
|
||||
title += " ([src.amount] sheet\s left)"
|
||||
switch(alert(title, "Would you like full tile glass or one direction?", "one direct", "full (2 sheets)", "cancel", null))
|
||||
if("one direct")
|
||||
switch(input(title, "Would you like full tile glass a one direction glass pane or a windoor?") in list("One Direction", "Full Window", "Windoor", "Cancel"))
|
||||
if("One Direction")
|
||||
if(!src) return 1
|
||||
if(src.loc != user) return 1
|
||||
var/list/directions = new/list(cardinal)
|
||||
var/i = 0
|
||||
for (var/obj/structure/window/win in user.loc)
|
||||
i++
|
||||
if(i >= 4)
|
||||
user << "\red There are too many windows in this location."
|
||||
return 1
|
||||
directions-=win.dir
|
||||
if(!(win.ini_dir in cardinal))
|
||||
user << "\red Can't let you do that."
|
||||
return 1
|
||||
var/dir_to_set = 2
|
||||
//yes, this could probably be done better but hey... it works...
|
||||
var/dir_to_set = NORTH
|
||||
for(var/obj/structure/window/WT in user.loc)
|
||||
if (WT.dir == dir_to_set)
|
||||
dir_to_set = 4
|
||||
for(var/obj/structure/window/WT in user.loc)
|
||||
if (WT.dir == dir_to_set)
|
||||
dir_to_set = 1
|
||||
for(var/obj/structure/window/WT in user.loc)
|
||||
if (WT.dir == dir_to_set)
|
||||
dir_to_set = 8
|
||||
for(var/obj/structure/window/WT in user.loc)
|
||||
if (WT.dir == dir_to_set)
|
||||
dir_to_set = 2
|
||||
if (WT.dir == SOUTH)
|
||||
dir_to_set = EAST
|
||||
if (WT.dir == WEST)
|
||||
dir_to_set = SOUTH
|
||||
if (WT.dir == NORTH)
|
||||
dir_to_set = WEST
|
||||
/*else
|
||||
dir_to_set stays NORTH*/
|
||||
|
||||
var/obj/structure/window/W
|
||||
W = new /obj/structure/window/reinforced( user.loc, 1 )
|
||||
W.state = 0
|
||||
@@ -142,7 +146,8 @@ SHARDS
|
||||
W.ini_dir = W.dir
|
||||
W.anchored = 0
|
||||
src.use(1)
|
||||
if("full (2 sheets)")
|
||||
|
||||
if("Full Window")
|
||||
if(!src) return 1
|
||||
if(src.loc != user) return 1
|
||||
if(src.amount < 2)
|
||||
@@ -158,6 +163,44 @@ SHARDS
|
||||
W.ini_dir = SOUTHWEST
|
||||
W.anchored = 0
|
||||
src.use(2)
|
||||
|
||||
if("Windoor")
|
||||
if(!src || src.loc != user) return 1
|
||||
|
||||
if(isturf(user.loc) && locate(/obj/structure/windoor_assembly/, user.loc))
|
||||
user << "\red There is already a windoor assembly in that location."
|
||||
return 1
|
||||
|
||||
if(isturf(user.loc) && locate(/obj/machinery/door/window/, user.loc))
|
||||
user << "\red There is already a windoor in that location."
|
||||
return 1
|
||||
|
||||
if(src.amount < 5)
|
||||
user << "\red You need more glass to do that."
|
||||
return 1
|
||||
|
||||
var/obj/structure/windoor_assembly/WD
|
||||
WD = new /obj/structure/windoor_assembly(user.loc)
|
||||
WD.state = "01"
|
||||
WD.anchored = 0
|
||||
src.use(5)
|
||||
switch(user.dir)
|
||||
if(SOUTH)
|
||||
WD.dir = SOUTH
|
||||
WD.ini_dir = SOUTH
|
||||
if(EAST)
|
||||
WD.dir = EAST
|
||||
WD.ini_dir = EAST
|
||||
if(WEST)
|
||||
WD.dir = WEST
|
||||
WD.ini_dir = WEST
|
||||
else//If the user is facing northeast. northwest, southeast, southwest or north, default to north
|
||||
WD.dir = NORTH
|
||||
WD.ini_dir = NORTH
|
||||
else
|
||||
return 1
|
||||
|
||||
|
||||
return 0
|
||||
|
||||
// SHARDS
|
||||
|
||||
@@ -0,0 +1,297 @@
|
||||
/* Windoor (window door) assembly -Nodrak
|
||||
* Step 1: Create a windoor out of rglass
|
||||
* Step 2: Add r-glass to the assembly to make a secure windoor (Optional)
|
||||
* Step 3: Rotate or Flip the assembly to face and open the way you want
|
||||
* Step 4: Wrench the assembly in place
|
||||
* Step 5: Add cables to the assembly
|
||||
* Step 6: Set access for the door.
|
||||
* Step 7: Screwdriver the door to complete
|
||||
*/
|
||||
|
||||
|
||||
obj/structure/windoor_assembly
|
||||
icon = 'windoor.dmi'
|
||||
|
||||
name = "Windoor Assembly"
|
||||
icon_state = "l_windoor_assembly01"
|
||||
anchored = 0
|
||||
density = 0
|
||||
dir = NORTH
|
||||
|
||||
var/ini_dir
|
||||
var/list/conf_access = null //configuring access, step 6
|
||||
|
||||
//Vars to help with the icon's name
|
||||
var/facing = "l" //Does the windoor open to the left or right?
|
||||
var/secure = "" //Whether or not this creates a secure windoor
|
||||
var/state = "01" //How far the door assembly has progressed in terms of sprites
|
||||
|
||||
obj/structure/windoor_assembly/New(dir=NORTH)
|
||||
..()
|
||||
src.ini_dir = src.dir
|
||||
update_nearby_tiles(need_rebuild=1)
|
||||
|
||||
obj/structure/windoor_assembly/Del()
|
||||
density = 0
|
||||
update_nearby_tiles()
|
||||
..()
|
||||
|
||||
/obj/structure/windoor_assembly/update_icon()
|
||||
icon_state = "[facing]_[secure]windoor_assembly[state]"
|
||||
|
||||
/obj/structure/windoor_assembly/CanPass(atom/movable/mover, turf/target, height=0, air_group=0)
|
||||
if(istype(mover) && mover.pass_flags & PASSGLASS)
|
||||
return 1
|
||||
if(get_dir(loc, target) == dir) //Make sure looking at appropriate border
|
||||
if(air_group) return 0
|
||||
return !density
|
||||
else
|
||||
return 1
|
||||
|
||||
/obj/structure/windoor_assembly/CheckExit(atom/movable/mover as mob|obj, turf/target as turf)
|
||||
if(istype(mover) && mover.pass_flags & PASSGLASS)
|
||||
return 1
|
||||
if(get_dir(loc, target) == dir)
|
||||
return !density
|
||||
else
|
||||
return 1
|
||||
|
||||
|
||||
/obj/structure/windoor_assembly/attackby(obj/item/W as obj, mob/user as mob)
|
||||
switch(state)
|
||||
if("01")
|
||||
//Wrenching an unsecure assembly anchors it in place. Step 4 complete
|
||||
if(istype(W, /obj/item/weapon/wrench) && !anchored)
|
||||
playsound(src.loc, 'Ratchet.ogg', 100, 1)
|
||||
user.visible_message("[user] secures the windoor assembly to the floor.", "You start to secure the windoor assembly to the floor.")
|
||||
|
||||
if(do_after(user, 40))
|
||||
if(!src) return
|
||||
user << "\blue You've secured the windoor assembly!"
|
||||
src.anchored = 1
|
||||
if(src.secure)
|
||||
src.name = "Secure Anchored Windoor Assembly"
|
||||
else
|
||||
src.name = "Anchored Windoor Assembly"
|
||||
|
||||
//Unwrenching an unsecure assembly un-anchors it. Step 4 undone
|
||||
else if(istype(W, /obj/item/weapon/wrench) && anchored)
|
||||
playsound(src.loc, 'Ratchet.ogg', 100, 1)
|
||||
user.visible_message("[user] unsecures the windoor assembly to the floor.", "You start to unsecure the windoor assembly to the floor.")
|
||||
|
||||
if(do_after(user, 40))
|
||||
if(!src) return
|
||||
user << "\blue You've unsecured the windoor assembly!"
|
||||
src.anchored = 0
|
||||
if(src.secure)
|
||||
src.name = "Secure Windoor Assembly"
|
||||
else
|
||||
src.name = "Windoor Assembly"
|
||||
|
||||
//Adding r-glass makes the assembly a secure windoor assembly. Step 2 (optional) complete.
|
||||
else if(istype(W, /obj/item/stack/rods) && !secure)
|
||||
var/obj/item/stack/rods/R = W
|
||||
if(R.amount < 4)
|
||||
user << "\red You need more rods to do this."
|
||||
return
|
||||
user << "\blue You start to reinforce the windoor with rods."
|
||||
|
||||
if(do_after(user,40))
|
||||
if(!src) return
|
||||
|
||||
R.use(4)
|
||||
user << "\blue You reinforce the windoor."
|
||||
src.secure = "secure_"
|
||||
if(src.anchored)
|
||||
src.name = "Secure Anchored Windoor Assembly"
|
||||
else
|
||||
src.name = "Secure Windoor Assembly"
|
||||
|
||||
//Adding cable to the assembly. Step 5 complete.
|
||||
else if(istype(W, /obj/item/weapon/cable_coil) && anchored)
|
||||
user.visible_message("[user] wires the windoor assembly.", "You start to wire the windoor assembly.")
|
||||
|
||||
if(do_after(user, 40))
|
||||
if(!src) return
|
||||
var/obj/item/weapon/cable_coil/CC = W
|
||||
CC.use(1)
|
||||
user << "\blue You wire the windoor!"
|
||||
src.state = "02"
|
||||
if(src.secure)
|
||||
src.name = "Secure Wired Windoor Assembly"
|
||||
else
|
||||
src.name = "Wired Windoor Assembly"
|
||||
else
|
||||
..()
|
||||
|
||||
if("02")
|
||||
|
||||
//Removing wire from the assembly. Step 5 undone.
|
||||
if(istype(W, /obj/item/weapon/wirecutters))
|
||||
playsound(src.loc, 'Wirecutter.ogg', 100, 1)
|
||||
user.visible_message("[user] cuts the wires from the airlock assembly.", "You start to cut the wires from airlock assembly.")
|
||||
|
||||
if(do_after(user, 40))
|
||||
if(!src) return
|
||||
|
||||
user << "\blue You cut the windoor wires.!"
|
||||
new/obj/item/weapon/cable_coil(get_turf(user), 1)
|
||||
src.state = "01"
|
||||
if(src.secure)
|
||||
src.name = "Secure Wired Windoor Assembly"
|
||||
else
|
||||
src.name = "Wired Windoor Assembly"
|
||||
|
||||
//Screwdrivering the wires in place (setting door access). Step 6 in progress.
|
||||
else if(istype(W, /obj/item/weapon/screwdriver))
|
||||
playsound(src.loc, 'Screwdriver.ogg', 100, 1)
|
||||
user.visible_message("[user] adjusts the access wires of the windoor assembly.", "You start to adjust the access wires of the windoor assembly.")
|
||||
configure_access()
|
||||
|
||||
|
||||
//Crowbar to complete the assembly, Step 7 complete.
|
||||
if(istype(W, /obj/item/weapon/crowbar))
|
||||
usr << browse(null, "window=windoor_access")
|
||||
playsound(src.loc, 'Crowbar.ogg', 100, 1)
|
||||
user.visible_message("[user] pries the windoor into the frame.", "You start prying the windoor into the frame.")
|
||||
|
||||
if(do_after(user, 40))
|
||||
|
||||
if(!src) return
|
||||
|
||||
density = 1 //Shouldn't matter but just incase
|
||||
user << "\blue You finish the windoor!"
|
||||
|
||||
if(secure)
|
||||
var/obj/machinery/door/window/brigdoor/windoor = new /obj/machinery/door/window/brigdoor(src.loc)
|
||||
if(src.facing == "l")
|
||||
windoor.icon_state = "leftsecureopen"
|
||||
windoor.base_state = "leftsecure"
|
||||
else
|
||||
windoor.icon_state = "rightsecureopen"
|
||||
windoor.base_state = "rightsecure"
|
||||
windoor.dir = src.dir
|
||||
windoor.req_access = src.conf_access
|
||||
|
||||
else
|
||||
var/obj/machinery/door/window/windoor = new /obj/machinery/door/window(src.loc)
|
||||
if(src.facing == "l")
|
||||
windoor.icon_state = "leftopen"
|
||||
windoor.base_state = "left"
|
||||
else
|
||||
windoor.icon_state = "rightopen"
|
||||
windoor.base_state = "right"
|
||||
windoor.dir = src.dir
|
||||
windoor.req_access = src.conf_access
|
||||
|
||||
del(src)
|
||||
|
||||
|
||||
else
|
||||
..()
|
||||
|
||||
//Update to reflect changes(if applicable)
|
||||
update_icon()
|
||||
|
||||
//Adjust the access of the door and pass it to Topic
|
||||
/obj/structure/windoor_assembly/proc/configure_access()
|
||||
if(!src || !usr.canmove || usr.stat || usr.restrained() || !in_range(loc, usr))
|
||||
return
|
||||
|
||||
var/t1 = "<B>Access control</B><br>\n"
|
||||
|
||||
if(!conf_access)
|
||||
t1 += "<font color=red>All</font><br>"
|
||||
else
|
||||
t1 += "<a href='?src=\ref[src];access=all'>All</a><br>"
|
||||
|
||||
t1 += "<br>"
|
||||
|
||||
var/list/accesses = get_all_accesses()
|
||||
for (var/acc in accesses)
|
||||
var/aname = get_access_desc(acc)
|
||||
|
||||
if (!conf_access || !conf_access.len || !(acc in conf_access))
|
||||
t1 += "<a href='?src=\ref[src];access=[acc]'>[aname]</a><br>"
|
||||
else
|
||||
t1 += "<a style='color: red' href='?src=\ref[src];access=[acc]'>[aname]</a><br>"
|
||||
|
||||
t1 += text("<p><a href='?src=\ref[];close=1'>Close</a></p>\n", src)
|
||||
|
||||
usr << browse(t1, "window=windoor_access")
|
||||
|
||||
|
||||
//Finalize door accesses. Step 6 complete.
|
||||
/obj/structure/windoor_assembly/Topic(href, href_list)
|
||||
if(!usr.canmove || usr.stat || usr.restrained() || !in_range(loc, usr) || href_list["close"])
|
||||
usr << browse(null, "window=windoor_access")
|
||||
return
|
||||
|
||||
if(href_list["access"])
|
||||
var/acc = href_list["access"]
|
||||
|
||||
if (acc == "all")
|
||||
conf_access = null
|
||||
else
|
||||
var/req = text2num(acc)
|
||||
|
||||
if(conf_access == null)
|
||||
conf_access = list()
|
||||
|
||||
if(!(req in conf_access))
|
||||
conf_access += req
|
||||
else
|
||||
conf_access -= req
|
||||
if (!conf_access.len)
|
||||
conf_access = null
|
||||
|
||||
//Refresh the window.
|
||||
configure_access()
|
||||
|
||||
|
||||
//Rotates the windoor assembly clockwise
|
||||
/obj/structure/windoor_assembly/verb/revrotate()
|
||||
set name = "Rotate Windoor Assembly"
|
||||
set category = "Object"
|
||||
set src in oview(1)
|
||||
|
||||
if (src.anchored)
|
||||
usr << "It is fastened to the floor; therefore, you can't rotate it!"
|
||||
return 0
|
||||
if(src.state != "01")
|
||||
update_nearby_tiles(need_rebuild=1) //Compel updates before
|
||||
|
||||
src.dir = turn(src.dir, 270)
|
||||
|
||||
if(src.state != "01")
|
||||
update_nearby_tiles(need_rebuild=1)
|
||||
|
||||
src.ini_dir = src.dir
|
||||
return
|
||||
|
||||
//Flips the windoor assembly, determines whather the door opens to the left or the right
|
||||
/obj/structure/windoor_assembly/verb/flip()
|
||||
set name = "Flip Windoor Assembly"
|
||||
set category = "Object"
|
||||
set src in oview(1)
|
||||
|
||||
if(src.facing == "l")
|
||||
usr << "The windoor will now slide to the right."
|
||||
src.facing = "r"
|
||||
else
|
||||
src.facing = "l"
|
||||
usr << "The windoor will now slide to the left."
|
||||
|
||||
|
||||
return
|
||||
|
||||
/obj/structure/windoor_assembly/proc/update_nearby_tiles(need_rebuild)
|
||||
if(!air_master) return 0
|
||||
|
||||
var/turf/simulated/source = loc
|
||||
var/turf/simulated/target = get_step(source,dir)
|
||||
|
||||
if(istype(source)) air_master.tiles_to_update += source
|
||||
if(istype(target)) air_master.tiles_to_update += target
|
||||
|
||||
return 1
|
||||
@@ -87,7 +87,7 @@
|
||||
src.density = 0
|
||||
del(src)
|
||||
return
|
||||
..()
|
||||
//..() //Does this really need to be here twice? The parent proc doesn't even do anything yet. - Nodrak
|
||||
return
|
||||
|
||||
//These all need to be rewritten to use visiblemessage()
|
||||
|
||||
@@ -1,8 +1,11 @@
|
||||
/client/proc/restartcontroller()
|
||||
set category = "Debug"
|
||||
set name = "Restart Master Controller"
|
||||
if(!holder) return
|
||||
switch(alert("Are you sure? If the control is still running it will now be running twice.",,"Yes","No"))
|
||||
if("Yes")
|
||||
src = null
|
||||
usr = null //weird things were happening after restarting MC.
|
||||
spawn(0)
|
||||
master_controller.process()
|
||||
if("No")
|
||||
|
||||
@@ -4,33 +4,29 @@
|
||||
set category = "Debug"
|
||||
set name = "Set Ticklag"
|
||||
set desc = "Sets a new tick lag. Recommend you don't mess with this too much! Stable, time-tested ticklag value is 0.9"
|
||||
if(Debug2)
|
||||
if(src.holder)
|
||||
if(!src.mob) return
|
||||
|
||||
if(src.holder.rank in list("Game Admin", "Game Master"))
|
||||
var/newtick = input("Sets a new tick lag. Please don't mess with this too much! The stable, time-tested ticklag value is 0.9","Lag of Tick", world.tick_lag) as num|null
|
||||
//I've used ticks of 2 before to help with serious singulo lags
|
||||
if(newtick && newtick <= 2 && newtick > 0)
|
||||
log_admin("[key_name(src)] has modified world.tick_lag to [newtick]", 0)
|
||||
message_admins("[key_name(src)] has modified world.tick_lag to [newtick]", 0)
|
||||
world.tick_lag = newtick
|
||||
//feedback_add_details("admin_verb","TICKLAG") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
|
||||
if(src.holder)
|
||||
if(!src.mob) return
|
||||
|
||||
switch(alert("Enable Tick Compensation?","Tick Comp is currently: [config.Tickcomp]","Yes","No"))
|
||||
if("Yes")
|
||||
config.Tickcomp = 1
|
||||
else
|
||||
config.Tickcomp = 0
|
||||
if(src.holder.rank in list("Game Admin", "Game Master"))
|
||||
var/newtick = input("Sets a new tick lag. Please don't mess with this too much! The stable, time-tested ticklag value is 0.9","Lag of Tick", world.tick_lag) as num|null
|
||||
//I've used ticks of 2 before to help with serious singulo lags
|
||||
if(newtick && newtick <= 2 && newtick > 0)
|
||||
log_admin("[key_name(src)] has modified world.tick_lag to [newtick]", 0)
|
||||
message_admins("[key_name(src)] has modified world.tick_lag to [newtick]", 0)
|
||||
world.tick_lag = newtick
|
||||
feedback_add_details("admin_verb","TICKLAG") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
|
||||
|
||||
return
|
||||
switch(alert("Enable Tick Compensation?","Tick Comp is currently: [config.Tickcomp]","Yes","No"))
|
||||
if("Yes")
|
||||
config.Tickcomp = 1
|
||||
else
|
||||
config.Tickcomp = 0
|
||||
|
||||
|
||||
src << "\red Error: ticklag(): Invalid world.ticklag value. No changes made."
|
||||
return
|
||||
|
||||
src << "\red Error: ticklag(): You are not authorised to use this. Game Admins and higher only."
|
||||
src << "\red Error: ticklag(): Invalid world.ticklag value. No changes made."
|
||||
return
|
||||
else
|
||||
src << "\red Error: ticklag(): You must first enable Debugging mode."
|
||||
return
|
||||
|
||||
src << "\red Error: ticklag(): You are not authorised to use this. Game Admins and higher only."
|
||||
return
|
||||
|
||||
@@ -89,6 +89,12 @@
|
||||
icon_state = "chaplain_hood"
|
||||
flags = FPRINT|TABLEPASS|HEADSPACE|HEADCOVERSEYES|BLOCKHAIR
|
||||
|
||||
/obj/item/clothing/head/nun_hood
|
||||
name = "nun hood"
|
||||
desc = "Maximum piety in this star system."
|
||||
icon_state = "nun_hood"
|
||||
flags = FPRINT|TABLEPASS|HEADSPACE|HEADCOVERSEYES|BLOCKHAIR
|
||||
|
||||
/obj/item/clothing/head/hasturhood
|
||||
name = "hastur's hood"
|
||||
desc = "It's unspeakably stylish"
|
||||
|
||||
@@ -19,7 +19,7 @@
|
||||
name = "\improper SWAT helmet"
|
||||
desc = "They're often used by highly trained Swat Members."
|
||||
icon_state = "swat"
|
||||
flags = FPRINT | TABLEPASS | SUITSPACE | HEADSPACE | HEADCOVERSEYES | BLOCKHAIR
|
||||
flags = FPRINT | TABLEPASS | SUITSPACE | HEADSPACE | HEADCOVERSEYES
|
||||
item_state = "swat"
|
||||
armor = list(melee = 80, bullet = 60, laser = 50,energy = 25, bomb = 50, bio = 10, rad = 0)
|
||||
flags_inv = HIDEEARS|HIDEEYES
|
||||
@@ -28,7 +28,7 @@
|
||||
name = "\improper Thunderdome helmet"
|
||||
desc = "<i>'Let the battle commence!'</i>"
|
||||
icon_state = "thunderdome"
|
||||
flags = FPRINT | TABLEPASS | SUITSPACE | HEADSPACE | HEADCOVERSEYES | BLOCKHAIR
|
||||
flags = FPRINT | TABLEPASS | SUITSPACE | HEADSPACE | HEADCOVERSEYES
|
||||
item_state = "thunderdome"
|
||||
armor = list(melee = 80, bullet = 60, laser = 50,energy = 10, bomb = 25, bio = 10, rad = 0)
|
||||
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
icon_state = "capspace"
|
||||
item_state = "capspacehelmet"
|
||||
desc = "A special helmet for the most fashionable of military figureheads."
|
||||
flags = FPRINT | TABLEPASS | HEADCOVERSEYES
|
||||
flags = FPRINT | TABLEPASS | HEADCOVERSEYES | BLOCKHAIR
|
||||
see_face = 0.0
|
||||
permeability_coefficient = 0.01
|
||||
armor = list(melee = 65, bullet = 50, laser = 50,energy = 25, bomb = 50, bio = 100, rad = 50)
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
/obj/item/clothing/head/helmet/space/engineer
|
||||
name = "environment suit helmet"
|
||||
desc = "A special helmet designed for work in a hazardous, low-pressure environment. Has radiation shielding and a visor that can be toggled on and off."
|
||||
flags = FPRINT | TABLEPASS | HEADSPACE | HEADCOVERSEYES
|
||||
flags = FPRINT | TABLEPASS | HEADSPACE | HEADCOVERSEYES | BLOCKHAIR
|
||||
see_face = 0.0
|
||||
flags_inv = HIDEEARS
|
||||
icon_state = "engspace_helmet"
|
||||
|
||||
@@ -327,7 +327,7 @@
|
||||
// Automatically drop anything in store / id / belt if you're not wearing a uniform.
|
||||
if (zone_sel)
|
||||
zone_sel.overlays = null
|
||||
zone_sel.overlays += body_standing
|
||||
zone_sel.overlays += damageicon_standing
|
||||
zone_sel.overlays += image("icon" = 'zone_sel.dmi', "icon_state" = text("[]", zone_sel.selecting))
|
||||
|
||||
if (lying)
|
||||
@@ -344,7 +344,7 @@
|
||||
else
|
||||
icon = stand_icon
|
||||
|
||||
overlays += body_lying
|
||||
overlays += damageicon_lying
|
||||
|
||||
if (face_lying)
|
||||
overlays += face_lying
|
||||
@@ -352,7 +352,7 @@
|
||||
if(update_icon)
|
||||
icon = stand_icon
|
||||
|
||||
overlays += body_standing
|
||||
overlays += damageicon_standing
|
||||
|
||||
if (face_standing)
|
||||
overlays += face_standing
|
||||
@@ -392,12 +392,12 @@
|
||||
var/t1 = wear_suit.item_state
|
||||
if (!t1)
|
||||
t1 = wear_suit.icon_state
|
||||
overlays += image("icon" = 'mob.dmi', "icon_state" = text("[][]", t1, (!( lying ) ? null : "2")), "layer" = MOB_LAYER)
|
||||
overlays += image("icon" = 'mob.dmi', "icon_state" = text("[][]", t1, (!( lying ) ? null : "2")), "layer" = SUIT_LAYER)
|
||||
if (wear_suit.blood_DNA)
|
||||
if (istype(wear_suit, /obj/item/clothing/suit/armor))
|
||||
overlays += image("icon" = 'blood.dmi', "icon_state" = "armorblood[!lying ? "" : "2"]", "layer" = MOB_LAYER)
|
||||
overlays += image("icon" = 'blood.dmi', "icon_state" = "armorblood[!lying ? "" : "2"]", "layer" = B_SUIT_LAYER)
|
||||
else
|
||||
overlays += image("icon" = 'blood.dmi', "icon_state" = "suitblood[!lying ? "" : "2"]", "layer" = MOB_LAYER)
|
||||
overlays += image("icon" = 'blood.dmi', "icon_state" = "suitblood[!lying ? "" : "2"]", "layer" = B_SUIT_LAYER)
|
||||
wear_suit.screen_loc = ui_alien_oclothing
|
||||
if (istype(wear_suit, /obj/item/clothing/suit/straight_jacket))
|
||||
if (handcuffed)
|
||||
@@ -417,9 +417,9 @@
|
||||
var/t1 = head.item_state
|
||||
if (!t1)
|
||||
t1 = head.icon_state
|
||||
overlays += image("icon" = 'mob.dmi', "icon_state" = text("[][]", t1, (!( lying ) ? null : "2")), "layer" = MOB_LAYER)
|
||||
overlays += image("icon" = 'mob.dmi', "icon_state" = text("[][]", t1, (!( lying ) ? null : "2")), "layer" = HEAD_LAYER)
|
||||
if (head.blood_DNA)
|
||||
overlays += image("icon" = 'blood.dmi', "icon_state" = "helmetblood[!lying ? "" : "2"]", "layer" = MOB_LAYER)
|
||||
overlays += image("icon" = 'blood.dmi', "icon_state" = "helmetblood[!lying ? "" : "2"]", "layer" = B_HEAD_LAYER)
|
||||
head.screen_loc = ui_alien_head
|
||||
|
||||
if (l_store)
|
||||
@@ -433,12 +433,12 @@
|
||||
client.screen += contents
|
||||
|
||||
if (r_hand)
|
||||
overlays += image("icon" = 'items_righthand.dmi', "icon_state" = r_hand.item_state ? r_hand.item_state : r_hand.icon_state, "layer" = MOB_LAYER+1)
|
||||
overlays += image("icon" = 'items_righthand.dmi', "icon_state" = r_hand.item_state ? r_hand.item_state : r_hand.icon_state, "layer" = INHANDS_LAYER)
|
||||
|
||||
r_hand.screen_loc = ui_rhand
|
||||
|
||||
if (l_hand)
|
||||
overlays += image("icon" = 'items_lefthand.dmi', "icon_state" = l_hand.item_state ? l_hand.item_state : l_hand.icon_state, "layer" = MOB_LAYER+1)
|
||||
overlays += image("icon" = 'items_lefthand.dmi', "icon_state" = l_hand.item_state ? l_hand.item_state : l_hand.icon_state, "layer" = INHANDS_LAYER)
|
||||
|
||||
l_hand.screen_loc = ui_lhand
|
||||
|
||||
|
||||
@@ -52,8 +52,8 @@
|
||||
var/hair_icon_state = "hair_a"
|
||||
var/face_icon_state = "bald"
|
||||
|
||||
var/list/body_standing = list()
|
||||
var/list/body_lying = list()
|
||||
var/image/damageicon_standing
|
||||
var/image/damageicon_lying
|
||||
|
||||
var/mutantrace = null
|
||||
|
||||
@@ -291,7 +291,7 @@
|
||||
if(shoes)
|
||||
tally += shoes.slowdown
|
||||
|
||||
if(bodytemperature < 283.222)
|
||||
if (bodytemperature < 283.222)
|
||||
tally += (283.222 - bodytemperature) / 10 * 1.75
|
||||
if (stuttering < 10)
|
||||
stuttering = 10
|
||||
@@ -579,6 +579,7 @@
|
||||
return
|
||||
if (!istype(W, /obj/item))
|
||||
return
|
||||
|
||||
if (!( W.slot_flags & SLOT_OCLOTHING ))
|
||||
return
|
||||
return
|
||||
@@ -935,8 +936,8 @@
|
||||
|
||||
// Other procs(probably update_face() and update_body() ) also rebuild their own
|
||||
// kinds of overlay lists. Think about merging those procs into this proc.
|
||||
body_overlays_lying += body_lying
|
||||
body_overlays_standing += body_standing
|
||||
body_overlays_lying += damageicon_lying
|
||||
body_overlays_standing += damageicon_standing
|
||||
|
||||
// face_lying and face_standing are the face icons, not a flag
|
||||
body_overlays_lying += face_lying
|
||||
@@ -960,21 +961,20 @@
|
||||
|
||||
// Uniform
|
||||
if(w_uniform)
|
||||
// What is screen_loc stuff doing here?!
|
||||
w_uniform.screen_loc = ui_iclothing
|
||||
|
||||
if(w_uniform)//I should really not need these
|
||||
w_uniform.screen_loc = ui_iclothing
|
||||
if(istype(w_uniform, /obj/item/clothing/under))
|
||||
var/t1 = w_uniform.color
|
||||
if (!t1)
|
||||
t1 = icon_state
|
||||
clothing_overlays += image("icon" = 'uniform.dmi', "icon_state" = text("[][]",t1, (!(lying) ? "_s" : "_l")), "layer" = MOB_LAYER)
|
||||
clothing_overlays += image("icon" = 'uniform.dmi', "icon_state" = text("[][]",t1, (!(lying) ? "_s" : "_l")), "layer" = UNIFORM_LAYER)
|
||||
if (w_uniform.blood_DNA)
|
||||
var/icon/stain_icon = icon('blood.dmi', "uniformblood[!lying ? "" : "2"]")
|
||||
clothing_overlays += image("icon" = stain_icon, "layer" = MOB_LAYER)
|
||||
clothing_overlays += image("icon" = stain_icon, "layer" = B_UNIFORM_LAYER)
|
||||
|
||||
if (wear_id)
|
||||
if(wear_id.over_jumpsuit)
|
||||
clothing_overlays += image("icon" = 'mob.dmi', "icon_state" = "id[!lying ? null : "2"]", "layer" = MOB_LAYER)
|
||||
clothing_overlays += image("icon" = 'mob.dmi', "icon_state" = "id[!lying ? null : "2"]", "layer" = ID_LAYER)
|
||||
|
||||
if (client)
|
||||
client.screen -= hud_used.intents
|
||||
@@ -997,34 +997,34 @@
|
||||
gloves_icon.Blend(new /icon('limb_mask.dmi', "right_[lying?"l":"s"]"), ICON_MULTIPLY)
|
||||
if(ro.destroyed)
|
||||
gloves_icon.Blend(new /icon('limb_mask.dmi', "left_[lying?"l":"s"]"), ICON_MULTIPLY)
|
||||
clothing_overlays += image(gloves_icon, "layer" = MOB_LAYER)
|
||||
clothing_overlays += image(gloves_icon, "layer" = GLOVES_LAYER)
|
||||
if (gloves.blood_DNA)
|
||||
var/icon/stain_icon = icon('blood.dmi', "bloodyhands[!lying ? "" : "2"]")
|
||||
if(lo.destroyed)
|
||||
stain_icon.Blend(new /icon('limb_mask.dmi', "right_[lying?"l":"s"]"), ICON_MULTIPLY)
|
||||
else if(ro.destroyed)
|
||||
stain_icon.Blend(new /icon('limb_mask.dmi', "left_[lying?"l":"s"]"), ICON_MULTIPLY)
|
||||
clothing_overlays += image("icon" = stain_icon, "layer" = MOB_LAYER)
|
||||
clothing_overlays += image("icon" = stain_icon, "layer" = B_GLOVES_LAYER)
|
||||
else if (blood_DNA)
|
||||
var/icon/stain_icon = icon('blood.dmi', "bloodyhands[!lying ? "" : "2"]")
|
||||
if(lo.destroyed)
|
||||
stain_icon.Blend(new /icon('limb_mask.dmi', "right_[lying?"l":"s"]"), ICON_MULTIPLY)
|
||||
else if(ro.destroyed)
|
||||
stain_icon.Blend(new /icon('limb_mask.dmi', "left_[lying?"l":"s"]"), ICON_MULTIPLY)
|
||||
clothing_overlays += image("icon" = stain_icon, "layer" = MOB_LAYER)
|
||||
clothing_overlays += image("icon" = stain_icon, "layer" = B_GLOVES_LAYER)
|
||||
|
||||
// Glasses
|
||||
if (glasses)
|
||||
var/t1 = glasses.icon_state
|
||||
clothing_overlays += image("icon" = 'eyes.dmi', "icon_state" = text("[][]", t1, (!( lying ) ? null : "2")), "layer" = MOB_LAYER)
|
||||
clothing_overlays += image("icon" = 'eyes.dmi', "icon_state" = text("[][]", t1, (!( lying ) ? null : "2")), "layer" = GLASSES_LAYER)
|
||||
|
||||
// Ears
|
||||
if (l_ear)
|
||||
var/t1 = l_ear.icon_state
|
||||
clothing_overlays += image("icon" = 'ears.dmi', "icon_state" = text("[][]", t1, (!( lying ) ? null : "2")), "layer" = MOB_LAYER)
|
||||
clothing_overlays += image("icon" = 'ears.dmi', "icon_state" = text("[][]", t1, (!( lying ) ? null : "2")), "layer" = EARS_LAYER)
|
||||
if (r_ear)
|
||||
var/t1 = r_ear.icon_state
|
||||
clothing_overlays += image("icon" = 'ears.dmi', "icon_state" = text("[][]", t1, (!( lying ) ? null : "2")), "layer" = MOB_LAYER)
|
||||
clothing_overlays += image("icon" = 'ears.dmi', "icon_state" = text("[][]", t1, (!( lying ) ? null : "2")), "layer" = EARS_LAYER)
|
||||
|
||||
// Shoes
|
||||
lo = organs["l_foot"]
|
||||
@@ -1036,63 +1036,34 @@
|
||||
shoes_icon.Blend(new /icon('limb_mask.dmi', "right[lying?"_l":""]"), ICON_MULTIPLY)
|
||||
else if(ro.destroyed && !lying)
|
||||
shoes_icon.Blend(new /icon('limb_mask.dmi', "left[lying?"_l":""]"), ICON_MULTIPLY)
|
||||
clothing_overlays += image(shoes_icon, "layer" = MOB_LAYER)
|
||||
clothing_overlays += image(shoes_icon, "layer" = SHOES_LAYER)
|
||||
if (shoes.blood_DNA)
|
||||
var/icon/stain_icon = icon('blood.dmi', "shoeblood[!lying ? "" : "2"]")
|
||||
if(lo.destroyed)
|
||||
stain_icon.Blend(new /icon('limb_mask.dmi', "right_[lying?"l":"s"]"), ICON_MULTIPLY)
|
||||
else if(ro.destroyed)
|
||||
stain_icon.Blend(new /icon('limb_mask.dmi', "left_[lying?"l":"s"]"), ICON_MULTIPLY)
|
||||
clothing_overlays += image("icon" = stain_icon, "layer" = MOB_LAYER) // Radio
|
||||
clothing_overlays += image("icon" = stain_icon, "layer" = B_SHOES_LAYER) // Radio
|
||||
|
||||
if (s_store)
|
||||
var/t1 = s_store.item_state
|
||||
if (!t1)
|
||||
t1 = s_store.icon_state
|
||||
if(!istype(wear_suit, /obj/item/clothing/suit/storage/armoredundersuit))
|
||||
clothing_overlays += image("icon" = 'belt_mirror.dmi', "icon_state" = text("[][]", t1, (!( lying ) ? null : "2")), "layer" = MOB_LAYER)
|
||||
clothing_overlays += image("icon" = 'belt_mirror.dmi', "icon_state" = text("[][]", t1, (!( lying ) ? null : "2")), "layer" = SUIT_STORE_LAYER)
|
||||
s_store.screen_loc = ui_sstore1
|
||||
|
||||
|
||||
if (wear_suit)
|
||||
if (istype(wear_suit, /obj/item/clothing/suit))
|
||||
var/t1 = wear_suit.icon_state
|
||||
clothing_overlays += image("icon" = 'suit.dmi', "icon_state" = text("[][]", t1, (!( lying ) ? null : "2")), "layer" = MOB_LAYER)
|
||||
|
||||
if (wear_suit)
|
||||
if (wear_suit.blood_DNA)
|
||||
var/icon/stain_icon = null
|
||||
if (istype(wear_suit, /obj/item/clothing/suit/armor/vest || /obj/item/clothing/suit/storage/wcoat))
|
||||
stain_icon = icon('blood.dmi', "armorblood[!lying ? "" : "2"]")
|
||||
else if (istype(wear_suit, /obj/item/clothing/suit/storage/det_suit || /obj/item/clothing/suit/storage/labcoat))
|
||||
stain_icon = icon('blood.dmi', "coatblood[!lying ? "" : "2"]")
|
||||
else
|
||||
stain_icon = icon('blood.dmi', "suitblood[!lying ? "" : "2"]")
|
||||
clothing_overlays += image("icon" = stain_icon, "layer" = MOB_LAYER)
|
||||
wear_suit.screen_loc = ui_oclothing
|
||||
|
||||
if (istype(wear_suit, /obj/item/clothing/suit/straight_jacket))
|
||||
if (handcuffed)
|
||||
handcuffed.loc = loc
|
||||
handcuffed.layer = initial(handcuffed.layer)
|
||||
handcuffed = null
|
||||
if ((l_hand || r_hand))
|
||||
// I don't know what this does, but it looks horrible
|
||||
var/h = hand
|
||||
hand = 1
|
||||
drop_item()
|
||||
hand = 0
|
||||
drop_item()
|
||||
hand = h
|
||||
|
||||
if (wear_mask)
|
||||
if (istype(wear_mask, /obj/item/clothing/mask))
|
||||
var/t1 = wear_mask.icon_state
|
||||
clothing_overlays += image("icon" = 'mask.dmi', "icon_state" = text("[][]", t1, (!( lying ) ? null : "2")), "layer" = MOB_LAYER)
|
||||
clothing_overlays += image("icon" = 'mask.dmi', "icon_state" = text("[][]", t1, (!( lying ) ? null : "2")), "layer" = FACEMASK_LAYER)
|
||||
if (!istype(wear_mask, /obj/item/clothing/mask/cigarette))
|
||||
if (wear_mask.blood_DNA)
|
||||
var/icon/stain_icon = icon('blood.dmi', "maskblood[!lying ? "" : "2"]")
|
||||
clothing_overlays += image("icon" = stain_icon, "layer" = MOB_LAYER)
|
||||
clothing_overlays += image("icon" = stain_icon, "layer" = B_FACEMASK_LAYER)
|
||||
wear_mask.screen_loc = ui_mask
|
||||
|
||||
// Head
|
||||
@@ -1101,12 +1072,12 @@
|
||||
var/icon/head_icon = icon('head.dmi', text("[][]", t1, (!( lying ) ? null : "2")))
|
||||
if(istype(head,/obj/item/clothing/head/kitty))
|
||||
head_icon = (( lying ) ? head:mob2 : head:mob)
|
||||
clothing_overlays += image("icon" = head_icon, "layer" = MOB_LAYER)
|
||||
clothing_overlays += image("icon" = head_icon, "layer" = HEAD_LAYER)
|
||||
if(gimmick_hat)
|
||||
clothing_overlays += image("icon" = icon('gimmick_head.dmi', "[gimmick_hat][!lying ? "" : "2"]"), "layer" = MOB_LAYER)
|
||||
clothing_overlays += image("icon" = icon('gimmick_head.dmi', "[gimmick_hat][!lying ? "" : "2"]"), "layer" = HEAD_LAYER)
|
||||
if (head.blood_DNA)
|
||||
var/icon/stain_icon = icon('blood.dmi', "helmetblood[!lying ? "" : "2"]")
|
||||
clothing_overlays += image("icon" = stain_icon, "layer" = MOB_LAYER)
|
||||
clothing_overlays += image("icon" = stain_icon, "layer" = B_HEAD_LAYER)
|
||||
head.screen_loc = ui_head
|
||||
|
||||
// Belt
|
||||
@@ -1114,9 +1085,12 @@
|
||||
var/t1 = belt.item_state
|
||||
if (!t1)
|
||||
t1 = belt.icon_state
|
||||
clothing_overlays += image("icon" = 'belt.dmi', "icon_state" = text("[][]", t1, (!( lying ) ? null : "2")), "layer" = MOB_LAYER)
|
||||
clothing_overlays += image("icon" = 'belt.dmi', "icon_state" = text("[][]", t1, (!( lying ) ? null : "2")), "layer" = BELT_LAYER)
|
||||
belt.screen_loc = ui_belt
|
||||
|
||||
|
||||
name = get_visible_name()
|
||||
|
||||
if (wear_id)
|
||||
wear_id.screen_loc = ui_id
|
||||
|
||||
@@ -1128,7 +1102,7 @@
|
||||
|
||||
if (back)
|
||||
var/t1 = back.icon_state
|
||||
clothing_overlays += image("icon" = 'back.dmi', "icon_state" = text("[][]", t1, (!( lying ) ? null : "2")), "layer" = MOB_LAYER)
|
||||
clothing_overlays += image("icon" = 'back.dmi', "icon_state" = text("[][]", t1, (!( lying ) ? null : "2")), "layer" = BACK_LAYER)
|
||||
back.screen_loc = ui_back
|
||||
|
||||
if(client) hud_used.other_update() //Update the screenloc of the items on the 'other' inventory bar
|
||||
@@ -1138,33 +1112,25 @@
|
||||
pulling = null
|
||||
var/h1 = handcuffed.icon_state
|
||||
if (!lying)
|
||||
clothing_overlays += image("icon" = 'mob.dmi', "icon_state" = "[h1]1", "layer" = MOB_LAYER)
|
||||
clothing_overlays += image("icon" = 'mob.dmi', "icon_state" = "[h1]1", "layer" = CUFFED_LAYER)
|
||||
else
|
||||
clothing_overlays += image("icon" = 'mob.dmi', "icon_state" = "[h1]2", "layer" = MOB_LAYER)
|
||||
|
||||
clothing_overlays += image("icon" = 'mob.dmi', "icon_state" = "[h1]2", "layer" = CUFFED_LAYER)
|
||||
|
||||
if (r_hand)
|
||||
clothing_overlays += image("icon" = 'items_righthand.dmi', "icon_state" = r_hand.item_state ? r_hand.item_state : r_hand.icon_state, "layer" = MOB_LAYER+1)
|
||||
|
||||
clothing_overlays += image("icon" = 'items_righthand.dmi', "icon_state" = r_hand.item_state ? r_hand.item_state : r_hand.icon_state, "layer" = INHANDS_LAYER)
|
||||
r_hand.screen_loc = ui_rhand
|
||||
|
||||
if (l_hand)
|
||||
clothing_overlays += image("icon" = 'items_lefthand.dmi', "icon_state" = l_hand.item_state ? l_hand.item_state : l_hand.icon_state, "layer" = MOB_LAYER+1)
|
||||
|
||||
clothing_overlays += image("icon" = 'items_lefthand.dmi', "icon_state" = l_hand.item_state ? l_hand.item_state : l_hand.icon_state, "layer" = INHANDS_LAYER)
|
||||
l_hand.screen_loc = ui_lhand
|
||||
|
||||
|
||||
var/shielded = 0
|
||||
for (var/obj/item/weapon/cloaking_device/S in src)
|
||||
if (S.active)
|
||||
shielded = 2
|
||||
break
|
||||
|
||||
if(istype(wear_suit, /obj/item/clothing/suit/space/space_ninja)&&wear_suit:s_active)
|
||||
shielded = 3
|
||||
|
||||
if(shielded == 1)
|
||||
clothing_overlays += image("icon" = 'effects.dmi', "icon_state" = "shield", "layer" = MOB_LAYER+1)
|
||||
|
||||
|
||||
if(client && client.admin_invis)
|
||||
invisibility = 100
|
||||
@@ -1180,6 +1146,64 @@
|
||||
else if(!targeted_by && target_locked)
|
||||
del(target_locked)
|
||||
|
||||
if (wear_suit)
|
||||
|
||||
|
||||
|
||||
if (wear_suit)
|
||||
if (istype(wear_suit, /obj/item/clothing/suit))
|
||||
var/t1 = wear_suit.icon_state
|
||||
clothing_overlays += image("icon" = 'suit.dmi', "icon_state" = text("[][]", t1, (!( lying ) ? null : "2")), "layer" = SUIT_LAYER)
|
||||
if (istype(wear_suit, /obj/item/clothing/suit/straight_jacket))
|
||||
if (handcuffed)
|
||||
handcuffed.loc = loc
|
||||
handcuffed.layer = initial(handcuffed.layer)
|
||||
handcuffed = null
|
||||
if ((l_hand || r_hand))
|
||||
// I don't know what this does, but it looks horrible
|
||||
var/h = hand
|
||||
hand = 1
|
||||
drop_item()
|
||||
hand = 0
|
||||
drop_item()
|
||||
hand = h
|
||||
else if(istype(wear_suit, /obj/item/clothing/suit/space/space_ninja)&&wear_suit:s_active)
|
||||
shielded = 3
|
||||
if (wear_suit.blood_DNA)
|
||||
var/icon/stain_icon = null
|
||||
if (istype(wear_suit, /obj/item/clothing/suit/armor/vest || /obj/item/clothing/suit/storage/wcoat))
|
||||
stain_icon = icon('blood.dmi', "armorblood[!lying ? "" : "2"]")
|
||||
else if (istype(wear_suit, /obj/item/clothing/suit/storage/det_suit || /obj/item/clothing/suit/storage/labcoat))
|
||||
stain_icon = icon('blood.dmi', "coatblood[!lying ? "" : "2"]")
|
||||
else
|
||||
stain_icon = icon('blood.dmi', "suitblood[!lying ? "" : "2"]")
|
||||
clothing_overlays += image("icon" = stain_icon, "layer" = B_SUIT_LAYER)
|
||||
wear_suit.screen_loc = ui_oclothing
|
||||
|
||||
switch(shielded)
|
||||
if(1)
|
||||
overlays += image("icon" = 'effects.dmi', "icon_state" = "shield", "layer" = SHIELD_LAYER)
|
||||
if(2)
|
||||
invisibility = 2
|
||||
//New stealth. Hopefully doesn't lag too much. /N
|
||||
if(istype(loc, /turf))//If they are standing on a turf.
|
||||
AddCamoOverlay(loc)//Overlay camo.
|
||||
if(3)
|
||||
if(istype(loc, /turf))
|
||||
//Ninjas may flick into view once in a while if they are stealthed.
|
||||
if(prob(90))
|
||||
NinjaStealthActive(loc)
|
||||
else
|
||||
NinjaStealthMalf()
|
||||
else
|
||||
invisibility = 0
|
||||
/*
|
||||
for (var/mob/M in viewers(1, src))//For the love of god DO NOT REFRESH EVERY SECOND - Mport
|
||||
if ((M.client && M.machine == src))
|
||||
spawn (0)
|
||||
show_inv(M)
|
||||
return
|
||||
*/
|
||||
last_b_state = stat
|
||||
|
||||
/mob/living/carbon/human/proc/misc_clothing_updates()
|
||||
@@ -1193,7 +1217,7 @@
|
||||
|
||||
var/list/L = dd_text2list(intent, ",")
|
||||
L[1] += ":-11"
|
||||
i_select.screen_loc = dd_list2text(L,",") //ICONS4, FUCKING SHIT
|
||||
i_select.screen_loc = dd_list2text(L,",") //ICONS4
|
||||
else
|
||||
i_select.screen_loc = null
|
||||
if (m_select)
|
||||
@@ -1202,7 +1226,7 @@
|
||||
|
||||
var/list/L = dd_text2list(m_int, ",")
|
||||
L[1] += ":-11"
|
||||
m_select.screen_loc = dd_list2text(L,",") //ICONS4, FUCKING SHIT
|
||||
m_select.screen_loc = dd_list2text(L,",") //ICONS4
|
||||
else
|
||||
m_select.screen_loc = null
|
||||
|
||||
@@ -1379,25 +1403,19 @@
|
||||
return 0
|
||||
|
||||
/mob/living/carbon/human/proc/update_body()
|
||||
if(stand_icon)
|
||||
del(stand_icon)
|
||||
if(lying_icon)
|
||||
del(lying_icon)
|
||||
|
||||
if (mutantrace)
|
||||
return
|
||||
if(stand_icon) del(stand_icon)
|
||||
if(lying_icon) del(lying_icon)
|
||||
if(mutantrace) return
|
||||
|
||||
var/g = "m"
|
||||
if (gender == MALE)
|
||||
g = "m"
|
||||
else if (gender == FEMALE)
|
||||
g = "f"
|
||||
if(gender == FEMALE) g = "f"
|
||||
var/husk = (HUSK in src.mutations)
|
||||
// var/obese = (FAT in src.mutations)
|
||||
|
||||
//Base mob icon
|
||||
stand_icon = new /icon('human.dmi', "torso_[g]_s")
|
||||
lying_icon = new /icon('human.dmi', "torso_[g]_l")
|
||||
|
||||
var/husk = (HUSK in mutations)
|
||||
|
||||
stand_icon.Blend(new /icon('human.dmi', "chest_[g]_s"), ICON_OVERLAY)
|
||||
lying_icon.Blend(new /icon('human.dmi', "chest_[g]_l"), ICON_OVERLAY)
|
||||
|
||||
@@ -1438,8 +1456,8 @@
|
||||
stand_icon.Blend(husk_s, ICON_OVERLAY)
|
||||
lying_icon.Blend(husk_l, ICON_OVERLAY)
|
||||
|
||||
// Skin tone
|
||||
if (s_tone >= 0)
|
||||
//Skin tone
|
||||
if(s_tone >= 0)
|
||||
stand_icon.Blend(rgb(s_tone, s_tone, s_tone), ICON_ADD)
|
||||
lying_icon.Blend(rgb(s_tone, s_tone, s_tone), ICON_ADD)
|
||||
else
|
||||
@@ -1449,11 +1467,14 @@
|
||||
stand_icon.Blend(rgb(100,100,100))
|
||||
lying_icon.Blend(rgb(100,100,100))
|
||||
|
||||
if (underwear < 6 && underwear > 0)
|
||||
//Underwear
|
||||
if(underwear < 6 && underwear > 0)
|
||||
// if(!obese)
|
||||
stand_icon.Blend(new /icon('human.dmi', "underwear[underwear]_[g]_s"), ICON_OVERLAY)
|
||||
lying_icon.Blend(new /icon('human.dmi', "underwear[underwear]_[g]_l"), ICON_OVERLAY)
|
||||
|
||||
|
||||
|
||||
/mob/living/carbon/human/proc/update_face()
|
||||
if(organs)
|
||||
var/datum/organ/external/head = organs["head"]
|
||||
@@ -1463,17 +1484,12 @@
|
||||
del(face_lying)
|
||||
return
|
||||
if(!facial_hair_style || !hair_style) return//Seems people like to lose their icons, this should stop the runtimes for now
|
||||
del(face_standing)
|
||||
del(face_lying)
|
||||
|
||||
if (mutantrace)
|
||||
return
|
||||
if(face_standing) del(face_standing)
|
||||
if(face_lying) del(face_lying)
|
||||
if(mutantrace) return
|
||||
|
||||
var/g = "m"
|
||||
if (gender == MALE)
|
||||
g = "m"
|
||||
else if (gender == FEMALE)
|
||||
g = "f"
|
||||
if (gender == FEMALE) g = "f"
|
||||
|
||||
var/icon/eyes_s = new/icon("icon" = 'human_face.dmi', "icon_state" = "eyes_s")
|
||||
var/icon/eyes_l = new/icon("icon" = 'human_face.dmi', "icon_state" = "eyes_l")
|
||||
@@ -1510,9 +1526,9 @@
|
||||
face_standing = new /image()
|
||||
face_lying = new /image()
|
||||
face_standing.icon = eyes_s
|
||||
face_standing.layer = MOB_LAYER
|
||||
face_standing.layer = FACE_LAYER
|
||||
face_lying.icon = eyes_l
|
||||
face_lying.layer = MOB_LAYER
|
||||
face_lying.layer = FACE_LAYER
|
||||
|
||||
del(mouth_l)
|
||||
del(mouth_s)
|
||||
@@ -1850,7 +1866,7 @@ It can still be worn/put on as normal.
|
||||
W.add_fingerprint(source)
|
||||
else
|
||||
if(!item) return
|
||||
if ((istype(item, /obj) && item.flags & 128 && target.w_uniform))
|
||||
if ((istype(item, /obj) && (item.slot_flags & SLOT_BELT) && target.w_uniform))
|
||||
source.drop_item()
|
||||
loc = target
|
||||
item.layer = 20
|
||||
@@ -2144,7 +2160,7 @@ It can still be worn/put on as normal.
|
||||
W.add_fingerprint(source)
|
||||
else
|
||||
if(!item) return
|
||||
if ((istype(item, /obj/item) && item.flags & 1))
|
||||
if ((istype(item, /obj/item) && (item.slot_flags & SLOT_BACK)))
|
||||
source.drop_item()
|
||||
loc = target
|
||||
item.layer = 20
|
||||
|
||||
@@ -21,11 +21,8 @@
|
||||
// now constructs damage icon for each organ from mask * damage field
|
||||
|
||||
/mob/living/carbon/human/UpdateDamageIcon()
|
||||
del(body_standing)
|
||||
body_standing = list()
|
||||
del(body_lying)
|
||||
body_lying = list()
|
||||
|
||||
var/icon/standing = new /icon('dam_human.dmi', "00")
|
||||
var/icon/lying = new /icon('dam_human.dmi', "00-2")
|
||||
for(var/name in organs)
|
||||
var/datum/organ/external/O = organs[name]
|
||||
if(!O.destroyed)
|
||||
@@ -33,11 +30,13 @@
|
||||
var/icon/DI = new /icon('dam_human.dmi', O.damage_state) // the damage icon for whole human
|
||||
DI.Blend(new /icon('dam_mask.dmi', O.icon_name), ICON_MULTIPLY) // mask with this organ's pixels
|
||||
// world << "[O.icon_name] [O.damage_state] \icon[DI]"
|
||||
body_standing += DI
|
||||
standing.Blend(DI,ICON_OVERLAY)
|
||||
DI = new /icon('dam_human.dmi', "[O.damage_state]-2") // repeat for lying icons
|
||||
DI.Blend(new /icon('dam_mask.dmi', "[O.icon_name]2"), ICON_MULTIPLY)
|
||||
// world << "[O.r_name]2 [O.d_i_state]-2 \icon[DI]"
|
||||
body_lying += DI
|
||||
lying.Blend(DI,ICON_OVERLAY)
|
||||
damageicon_standing = new /image("icon" = standing, "layer" = DAMAGE_LAYER)
|
||||
damageicon_lying = new /image("icon" = lying, "layer" = DAMAGE_LAYER)
|
||||
|
||||
|
||||
/mob/living/carbon/human/apply_damage(var/damage = 0,var/damagetype = BRUTE, var/def_zone = null, var/blocked = 0, var/sharp = 0, var/used_weapon = null)
|
||||
|
||||
@@ -204,10 +204,7 @@ datum/preferences
|
||||
del(preview_icon)
|
||||
|
||||
var/g = "m"
|
||||
if (gender == MALE)
|
||||
g = "m"
|
||||
else if (gender == FEMALE)
|
||||
g = "f"
|
||||
if (gender == FEMALE) g = "f"
|
||||
|
||||
if(species == "Tajaran")
|
||||
preview_icon = new /icon('tajaran.dmi', "body_[g]_s", "dir" = preview_dir)
|
||||
@@ -271,4 +268,4 @@ datum/preferences
|
||||
if(H.name == f_style)
|
||||
facial_hair_style = H
|
||||
else
|
||||
del(H)
|
||||
del(H)
|
||||
@@ -284,7 +284,7 @@
|
||||
return
|
||||
|
||||
else
|
||||
user << "You transfer [MAXCOIL - src.amount ] length\s of cable from one coil to the other."
|
||||
user << "You transfer [MAXCOIL - C.amount ] length\s of cable from one coil to the other."
|
||||
src.amount -= (MAXCOIL-C.amount)
|
||||
src.updateicon()
|
||||
C.amount = MAXCOIL
|
||||
|
||||
@@ -185,6 +185,33 @@ var/MAX_EXPLOSION_RANGE = 14
|
||||
#define HIDEEARS 2 //APPLIES ONLY TO HELMETS!!
|
||||
#define HIDEEYES 4 //APPLIES ONLY TO HELMETS!!
|
||||
|
||||
//clothing-overlay layers. They are floats so they always appear above the Mob
|
||||
#define DAMAGE_LAYER -23
|
||||
#define UNIFORM_LAYER -22
|
||||
#define B_UNIFORM_LAYER -21
|
||||
#define SHOES_LAYER -20
|
||||
#define B_SHOES_LAYER -19
|
||||
#define ID_LAYER -18
|
||||
#define GLOVES_LAYER -17
|
||||
#define B_GLOVES_LAYER -16
|
||||
#define EARS_LAYER -15
|
||||
#define SUIT_LAYER -14
|
||||
#define B_SUIT_LAYER -13
|
||||
#define FACE_LAYER -12
|
||||
#define GLASSES_LAYER -11
|
||||
#define FACEMASK_LAYER -10
|
||||
#define B_FACEMASK_LAYER -9
|
||||
#define HEAD_LAYER -8
|
||||
#define B_HEAD_LAYER -7
|
||||
#define SUIT_STORE_LAYER -6
|
||||
#define BELT_LAYER -5
|
||||
#define BACK_LAYER -4
|
||||
#define CUFFED_LAYER -3
|
||||
#define SHIELD_LAYER -2
|
||||
#define INHANDS_LAYER -1
|
||||
|
||||
|
||||
|
||||
|
||||
//Cant seem to find a mob bitflags area other than the powers one
|
||||
|
||||
@@ -288,9 +315,9 @@ var/MAX_EXPLOSION_RANGE = 14
|
||||
#define mSmallsize 110 // table climbing
|
||||
|
||||
//mob/var/stat things
|
||||
var/const/CONSCIOUS = 0
|
||||
var/const/UNCONSCIOUS = 1
|
||||
var/const/DEAD = 2
|
||||
#define CONSCIOUS 0
|
||||
#define UNCONSCIOUS 1
|
||||
#define DEAD 2
|
||||
|
||||
// channel numbers for power
|
||||
#define EQUIP 1
|
||||
@@ -319,11 +346,11 @@ var/const/DEAD = 2
|
||||
#define MAX_STACK_AMOUNT_GLASS 50
|
||||
#define MAX_STACK_AMOUNT_RODS 60
|
||||
|
||||
var/const/GAS_O2 = 1 << 0
|
||||
var/const/GAS_N2 = 1 << 1
|
||||
var/const/GAS_PL = 1 << 2
|
||||
var/const/GAS_CO2 = 1 << 3
|
||||
var/const/GAS_N2O = 1 << 4
|
||||
#define GAS_O2 (1 << 0)
|
||||
#define GAS_N2 (1 << 1)
|
||||
#define GAS_PL (1 << 2)
|
||||
#define GAS_CO2 (1 << 3)
|
||||
#define GAS_N2O (1 << 4)
|
||||
|
||||
|
||||
var/list/accessable_z_levels = list("3" = 15, "4" = 35, "6" = 50)
|
||||
|
||||
@@ -82,7 +82,8 @@ TRAITOR_SCALING
|
||||
## If security is prohibited from being most antagonists
|
||||
#PROTECT_ROLES_FROM_ANTAGONIST
|
||||
|
||||
## If the auto-tensioner is active by default. It creates more tratiors/other antagonists if it consideers the round slowing down.
|
||||
## If the TG auto-tensioner is active by default. It creates more traitors/other antagonists if it consideers the round slowing down.
|
||||
## On BS12 we use Traitor-among-us.
|
||||
#TENSIONER_ACTIVE
|
||||
|
||||
## If metadata is supported
|
||||
@@ -131,13 +132,13 @@ GUEST_JOBBAN 1
|
||||
# SERVER ss13.example.com:2506
|
||||
|
||||
## forum address
|
||||
# FORUMURL http://baystation12.net/forums/
|
||||
# FORUMURL http://example.com
|
||||
|
||||
## Wiki address
|
||||
# WIKIURL http://baystation12.net/wiki/index.php
|
||||
# WIKIURL http://example.com
|
||||
|
||||
## Ban appeals URL - usually for a forum or wherever people should go to contact your admins.
|
||||
# BANAPPEALS http://justanotherday.example.com
|
||||
# BANAPPEALS http://example.com
|
||||
|
||||
## In-game features
|
||||
## spawns a spellbook which gives object-type spells instead of verb-type spells for the wizard
|
||||
@@ -154,7 +155,7 @@ GUEST_JOBBAN 1
|
||||
#POPUP_ADMIN_PM
|
||||
|
||||
##What address should banned people appeal ther ban at? Remember to escape the characters, if needed!
|
||||
# APPEAL_ADDRESS http://baystation12.net/forums/viewforum.php?f=2
|
||||
# APPEAL_ADDRESS http://example.com
|
||||
|
||||
##Defines the ticklag for the world. 0.9 is the normal one, 0.5 is smoother.
|
||||
TICKLAG 0.9
|
||||
|
||||
@@ -9,7 +9,6 @@ deusdactyl: Greg Anderson: /obj/item/clothing/head/helmet/hardhat/fluff/greg_and
|
||||
deusdactyl: Roger Wiles: /obj/item/clothing/under/rank/virologist/fluff/cdc_jumpsuit, /obj/item/clothing/suit/storage/labcoat/fluff/cdc_labcoat
|
||||
deusdactyl: James Girard: /obj/item/clothing/head/secsoft/fluff/swatcap
|
||||
eternal248: Maximilian Haynes: /obj/item/weapon/paper/certificate
|
||||
erthilo: Farah Lants: /obj/item/clothing/under/rank/medical/fluff/short, /obj/item/clothing/suit/storage/labcoat/fluff/red
|
||||
fastler: Fastler Greay: /obj/item/weapon/card/id/fluff/lifetime
|
||||
fniff: Sarah Calvera: /obj/item/fluff/sarah_calvera_1
|
||||
fniff: Angleo Wilkerson: /obj/item/fluff/angelo_wilkerson_1
|
||||
|
||||
@@ -42,7 +42,7 @@ Header Section
|
||||
<td valign='top'>
|
||||
<font size='2'><b>Code:</b> Abi79, Aryn, Cael_Aislinn, Chinsky, cib, CompactNinja, DopeGhoti, Erthilo, Hawk_v3, Head, Ispil, Lexusjjss, Melonstorm, Miniature, Mloc, SkyMarshal, Spectre, Strumpetplaya, Sunfall, Tastyfish, Uristqwerty<br></font>
|
||||
<font size='2'><b>Sprites:</b> Apple_Master, Arcalane, Chinsky, CompactNinja, Deus Dactyl, Erthilo, Flashkirby, Miniature, Xenone<br></font>
|
||||
<font size='2'><b>Thanks To:</b> /tg/ station devs, Goonstation devs, and the original Spacestation 13 devs.</font>
|
||||
<font size='2'><b>Thanks To:</b> /tg/ station devs, Goonstation devs, and the original Spacestation 13 devs. Skibiliano for the IRC bot.</font>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
@@ -56,6 +56,30 @@ Stuff which is in development and not yet visible to players or just code relate
|
||||
should be listed in the changelog upon commit though. Thanks. -->
|
||||
|
||||
<!-- To take advantage of the pretty new format (well it was new when I wrote this anyway), open the "add-to-changelog.html" file in any browser and add the stuff and then generate the html code and paste it here -->
|
||||
<div class="commit sansserif">
|
||||
<h2 class="date">04 June 2012</h2>
|
||||
<h3 class="author">TG updated:</h3>
|
||||
<ul class="changes bgimages16">
|
||||
<li class="rscadd">Added "Toggle Open" verb to all closets and crates</li>
|
||||
<li class="rscadd">Added "Toggle Lock" verb to all lockable closets</li>
|
||||
<li class="rscadd">Window doors are now breakable. They can still be emagged and hacktooled, and they have fairly high health.</li>
|
||||
<li class="rscadd">Windoors are now constructable. See here for how to build them: http://baystation12.net/wiki/index.php/Construction#Window-door_.28Windoor.29</li>
|
||||
<li class="rscadd">Lawyers can now access security records with their PDAs (read-only)</li>
|
||||
<li class="tweak">RIG suits have been renamed to hardsuits. </li>
|
||||
</ul>
|
||||
<h3 class="author">SkyMarshal updated:</h3>
|
||||
<ul class="changes bgimages16">
|
||||
<li class="rscadd">Added the capability for the security PDA to scan items in like the detectives scanner, and for it to be loaded into the database in the same manner.</li>
|
||||
</ul>
|
||||
<h3 class="author">Erthilo updated:</h3>
|
||||
<ul class="changes bgimages16">
|
||||
<li class="tweak">You can now only build 2 cleanbots.</li>
|
||||
<li class="bugfix">Fixed flavour text, it should now be possible to have it longer than 40 characters, and should stay properly formatted.</li>
|
||||
<li class="bugfix">Fixes AI's not being able to talk through holopads.</li>
|
||||
</ul>
|
||||
|
||||
</div>
|
||||
|
||||
<div class="commit sansserif">
|
||||
<h2 class="date">01 June 2012</h2>
|
||||
<h3 class="author">Erthilo updated:</h3>
|
||||
|
||||
|
Before Width: | Height: | Size: 9.5 KiB After Width: | Height: | Size: 9.5 KiB |
|
Before Width: | Height: | Size: 7.1 KiB After Width: | Height: | Size: 7.0 KiB |
|
Before Width: | Height: | Size: 106 KiB After Width: | Height: | Size: 107 KiB |
|
Before Width: | Height: | Size: 264 KiB After Width: | Height: | Size: 264 KiB |
|
Before Width: | Height: | Size: 37 KiB After Width: | Height: | Size: 37 KiB |
|
Before Width: | Height: | Size: 19 KiB After Width: | Height: | Size: 19 KiB |
|
Before Width: | Height: | Size: 29 KiB After Width: | Height: | Size: 51 KiB |
|
Before Width: | Height: | Size: 10 KiB After Width: | Height: | Size: 2.8 KiB |