CHANGELOG && Dangercon Update:
•Fireaxes, extinguishers and fireaxe closets placed around the station. Functionality described in changelog. Airlock modifying is because you can use the fireaxe to crank open doors. •Piano? Being able to be smashed? What are you talking about? •The two handed system is purely experimental and subject to much cleaning up/proc making to enable it for other objects as well. The mob modifications is because of the two handed system making it unable for you to switch hands. git-svn-id: http://tgstation13.googlecode.com/svn/trunk@1543 316c924e-a436-60f5-8080-3fe189b3f50e
@@ -1066,7 +1066,7 @@ proc/move_mining_shuttle()
|
||||
if(1)
|
||||
usr << "The satchel now picks up all ore in a tile at once."
|
||||
if(0)
|
||||
usr << "The satchel now picks up ore one at a time."
|
||||
usr << "The satchel now picks up one ore at a time."
|
||||
|
||||
|
||||
/**********************Ore box**************************/
|
||||
@@ -2634,11 +2634,11 @@ var/list/datum/material_recipe/MATERIAL_RECIPES = list(
|
||||
..()
|
||||
pixel_x = rand(0,4)-4
|
||||
pixel_y = rand(0,4)-4
|
||||
recipes = gold_recipes
|
||||
/* recipes = gold_recipes //Commenting out until there's a proper sprite. The golden plaque is supposed to be a special item dedicated to a really good player. -Agouri
|
||||
|
||||
var/global/list/datum/stack_recipe/gold_recipes = list ( \
|
||||
var/global/list/datum/stack_recipe/gold_recipes = list ( \
|
||||
new/datum/stack_recipe("Plaque", /obj/item/weapon/plaque_assembly, 2), \
|
||||
)
|
||||
)*/
|
||||
|
||||
|
||||
/obj/item/stack/sheet/silver
|
||||
|
||||
@@ -275,7 +275,7 @@
|
||||
opacity = 0
|
||||
density = 0
|
||||
|
||||
/obj/item/weapon/plaque_assembly
|
||||
/*/obj/item/weapon/plaque_assembly //commenting this out until there's a better rework
|
||||
desc = "Put this on a wall and engrave an epitaph"
|
||||
name = "Plaque Assembly"
|
||||
icon = 'decals.dmi'
|
||||
@@ -288,7 +288,7 @@
|
||||
var/obj/sign/goldenplaque/gp = new/obj/sign/goldenplaque(A)
|
||||
gp.name = epitaph
|
||||
gp.layer = 2.9
|
||||
del(src)
|
||||
del(src)*/
|
||||
|
||||
/obj/sign/maltesefalcon1 //The sign is 64x32, so it needs two tiles. ;3
|
||||
desc = "The Maltese Falcon, Space Bar and Grill"
|
||||
@@ -343,6 +343,8 @@
|
||||
var/burning = null
|
||||
var/hitsound = null
|
||||
var/w_class = 3.0
|
||||
var/wielded = 0
|
||||
var/twohanded = 0 ///Two handed and wielded off by default, nyoro~n -Agouri
|
||||
flags = FPRINT | TABLEPASS
|
||||
pressure_resistance = 50
|
||||
var/obj/item/master = null
|
||||
|
||||
@@ -36,6 +36,215 @@
|
||||
icon_closed = "firecloset"
|
||||
icon_opened = "fireclosetopen"
|
||||
|
||||
/obj/closet/hydrant //wall mounted fire closet
|
||||
desc = "A wall mounted closet which comes with supplies to fight fire."
|
||||
name = "Fire Closet"
|
||||
icon_state = "hydrant"
|
||||
icon_closed = "hydrant"
|
||||
icon_opened = "hydrant_open"
|
||||
|
||||
/obj/closet/fireaxecabinet
|
||||
name = "Fire Axe Cabinet"
|
||||
desc = "There is small label that reads \"For Emergency use only\" along with details for safe use of the axe. As if."
|
||||
var/obj/item/weapon/fireaxe/FIREAXE = new/obj/item/weapon/fireaxe
|
||||
icon_state = "fireaxe1000"
|
||||
icon_closed = "fireaxe1000"
|
||||
icon_opened = "fireaxe1100"
|
||||
anchored = 1
|
||||
var/localopened = 0 //Setting this to keep it from behaviouring like a normal closet and obstructing movement in the map. -Agouri
|
||||
opened = 1
|
||||
var/hitstaken = 0
|
||||
var/locked = 1
|
||||
var/smashed = 0
|
||||
|
||||
attackby(var/obj/item/O as obj, var/mob/user as mob) //Marker -Agouri
|
||||
//..() //That's very useful, Erro
|
||||
|
||||
var/hasaxe = 0 //gonna come in handy later~
|
||||
if(FIREAXE)
|
||||
hasaxe = 1
|
||||
|
||||
if (isrobot(usr) || src.locked)
|
||||
if(istype(O, /obj/item/device/multitool))
|
||||
user << "\red Resetting circuitry..."
|
||||
playsound(user, 'lockreset.wav', 50, 1)
|
||||
sleep(50) // Sleeping time~
|
||||
src.locked = 0
|
||||
user << "\blue You disable the locking modules."
|
||||
update_icon()
|
||||
return
|
||||
if(istype(O, /obj/item/weapon))
|
||||
var/obj/item/weapon/W = O
|
||||
if(src.smashed)
|
||||
return
|
||||
else
|
||||
playsound(user, 'Glasshit.ogg', 100, 1) //We don't want this playing every time
|
||||
if(W.force < 15)
|
||||
user << "\blue The cabinet's protective glass glances off the hit."
|
||||
else
|
||||
src.hitstaken++
|
||||
if(src.hitstaken == 4)
|
||||
playsound(user, 'Glassbr3.ogg', 100, 1) //Break cabinet, receive goodies. Cabinet's fucked for life after that.
|
||||
src.smashed = 1
|
||||
src.locked = 0
|
||||
src.localopened = 1
|
||||
update_icon()
|
||||
return
|
||||
if (istype(O, /obj/item/weapon/fireaxe) && src.localopened)
|
||||
if(!FIREAXE)
|
||||
if(O.wielded)
|
||||
user << "\red Unwield the axe first."
|
||||
return
|
||||
FIREAXE = O
|
||||
user.drop_item(O)
|
||||
src.contents += O
|
||||
user << "\blue You place the fire axe back in the [src.name]."
|
||||
update_icon()
|
||||
else
|
||||
if(src.smashed)
|
||||
return
|
||||
else
|
||||
localopened = !localopened
|
||||
if(localopened)
|
||||
icon_state = text("fireaxe[][][][]opening",hasaxe,src.localopened,src.hitstaken,src.smashed)
|
||||
spawn(10) update_icon()
|
||||
else
|
||||
icon_state = text("fireaxe[][][][]closing",hasaxe,src.localopened,src.hitstaken,src.smashed)
|
||||
spawn(10) update_icon()
|
||||
else
|
||||
if(src.smashed)
|
||||
return
|
||||
if(istype(O, /obj/item/device/multitool))
|
||||
if(localopened)
|
||||
localopened = 0
|
||||
icon_state = text("fireaxe[][][][]closing",hasaxe,src.localopened,src.hitstaken,src.smashed)
|
||||
spawn(10) update_icon()
|
||||
return
|
||||
else
|
||||
user << "\red Resetting circuitry..."
|
||||
sleep(50)
|
||||
src.locked = 1
|
||||
user << "\blue You re-enable the locking modules."
|
||||
playsound(user, 'lockenable.wav', 50, 1)
|
||||
return
|
||||
else
|
||||
localopened = !localopened
|
||||
if(localopened)
|
||||
icon_state = text("fireaxe[][][][]opening",hasaxe,src.localopened,src.hitstaken,src.smashed)
|
||||
spawn(10) update_icon()
|
||||
else
|
||||
icon_state = text("fireaxe[][][][]closing",hasaxe,src.localopened,src.hitstaken,src.smashed)
|
||||
spawn(10) update_icon()
|
||||
|
||||
|
||||
|
||||
|
||||
attack_hand(mob/user as mob)
|
||||
|
||||
var/hasaxe = 0
|
||||
if(FIREAXE)
|
||||
hasaxe = 1
|
||||
|
||||
if(src.locked)
|
||||
user <<"\red The cabinet won't budge!"
|
||||
return
|
||||
if(localopened)
|
||||
if(FIREAXE)
|
||||
user.put_in_hand(FIREAXE)
|
||||
FIREAXE = null
|
||||
user << "\blue You take the fire axe from the [name]."
|
||||
src.add_fingerprint(user)
|
||||
update_icon()
|
||||
else
|
||||
if(src.smashed)
|
||||
return
|
||||
else
|
||||
localopened = !localopened
|
||||
if(localopened)
|
||||
src.icon_state = text("fireaxe[][][][]opening",hasaxe,src.localopened,src.hitstaken,src.smashed)
|
||||
spawn(10) update_icon()
|
||||
else
|
||||
src.icon_state = text("fireaxe[][][][]closing",hasaxe,src.localopened,src.hitstaken,src.smashed)
|
||||
spawn(10) update_icon()
|
||||
|
||||
else
|
||||
localopened = !localopened //I'm pretty sure we don't need an if(src.smashed) in here. In case I'm wrong and it fucks up teh cabinet, **MARKER**. -Agouri
|
||||
if(localopened)
|
||||
src.icon_state = text("fireaxe[][][][]opening",hasaxe,src.localopened,src.hitstaken,src.smashed)
|
||||
spawn(10) update_icon()
|
||||
else
|
||||
src.icon_state = text("fireaxe[][][][]closing",hasaxe,src.localopened,src.hitstaken,src.smashed)
|
||||
spawn(10) update_icon()
|
||||
|
||||
verb/toggle_openness() //nice name, huh? HUH?! -Erro //YEAH -Agouri
|
||||
set name = "Open/Close"
|
||||
set category = "Object"
|
||||
|
||||
if (isrobot(usr) || src.locked || src.smashed)
|
||||
if(src.locked)
|
||||
usr << "\red The cabinet won't budge!"
|
||||
else if(src.smashed)
|
||||
usr << "\blue The protective glass is broken!"
|
||||
return
|
||||
|
||||
localopened = !localopened
|
||||
update_icon()
|
||||
|
||||
verb/remove_fire_axe()
|
||||
set name = "Remove Fire Axe"
|
||||
set category = "Object"
|
||||
|
||||
if (isrobot(usr))
|
||||
return
|
||||
|
||||
if (localopened)
|
||||
if(FIREAXE)
|
||||
usr.put_in_hand(FIREAXE)
|
||||
FIREAXE = null
|
||||
usr << "\blue You take the Fire axe from the [name]."
|
||||
else
|
||||
usr << "\blue The [src.name] is empty."
|
||||
else
|
||||
usr << "\blue The [src.name] is closed."
|
||||
update_icon()
|
||||
|
||||
attack_paw(mob/user as mob)
|
||||
attack_hand(user)
|
||||
return
|
||||
|
||||
attack_ai(mob/user as mob)
|
||||
if(src.smashed)
|
||||
user << "\red The security of the cabinet is compromised."
|
||||
return
|
||||
else
|
||||
locked = !locked
|
||||
if(locked)
|
||||
user << "\red Cabinet locked."
|
||||
else
|
||||
user << "\blue Cabinet unlocked."
|
||||
return
|
||||
|
||||
update_icon() //Template: fireaxe[has fireaxe][is opened][hits taken][is smashed]. If you want the opening or closing animations, add "opening" or "closing" right after the numbers
|
||||
var/hasaxe = 0
|
||||
if(FIREAXE)
|
||||
hasaxe = 1
|
||||
icon_state = text("fireaxe[][][][]",hasaxe,src.localopened,src.hitstaken,src.smashed)
|
||||
|
||||
open()
|
||||
return
|
||||
|
||||
close()
|
||||
return
|
||||
|
||||
|
||||
|
||||
/obj/closet/toolcloset
|
||||
desc = "A bulky (yet mobile) closet. Contains tools."
|
||||
name = "Tool Closet"
|
||||
icon_state = "toolcloset"
|
||||
icon_closed = "toolcloset"
|
||||
icon_opened = "toolclosetopen"
|
||||
|
||||
/obj/closet/jcloset
|
||||
desc = "A bulky (yet mobile) closet. Comes with janitor's clothes and biohazard gear."
|
||||
name = "Custodial Closet"
|
||||
@@ -112,8 +321,97 @@
|
||||
|
||||
// Inserting the gimmick clothing stuff here for generic items, IE Tacticool stuff
|
||||
|
||||
/obj/closet/extinguisher
|
||||
name = "Extinguisher closet"
|
||||
var/obj/item/weapon/extinguisher/EXTINGUISHER = new/obj/item/weapon/extinguisher
|
||||
icon_state = "extinguisher10"
|
||||
icon_opened = "extinguisher11"
|
||||
icon_closed = "extinguisher10"
|
||||
opened = 1
|
||||
var/localopened = 1
|
||||
desc = "Sure was nice of CentCom to install these everywhere."
|
||||
anchored = 1
|
||||
|
||||
open()
|
||||
return
|
||||
|
||||
close()
|
||||
return
|
||||
|
||||
attackby(var/obj/item/O as obj, var/mob/user as mob)
|
||||
//..() don't want it to behave like a normal closet.
|
||||
|
||||
if (isrobot(usr))
|
||||
return
|
||||
if (istype(O, /obj/item/weapon/extinguisher))
|
||||
if(!EXTINGUISHER)
|
||||
user.drop_item(O)
|
||||
src.contents += O
|
||||
EXTINGUISHER = O
|
||||
user << "\blue You place the extinguisher in the [src.name]."
|
||||
else
|
||||
localopened = !localopened
|
||||
else
|
||||
localopened = !localopened
|
||||
update_icon()
|
||||
|
||||
attack_hand(mob/user as mob)
|
||||
if(localopened)
|
||||
if(EXTINGUISHER)
|
||||
user.put_in_hand(EXTINGUISHER)
|
||||
EXTINGUISHER = null
|
||||
user << "\blue You take the extinguisher from the [name]."
|
||||
else
|
||||
localopened = !localopened
|
||||
|
||||
else
|
||||
localopened = !localopened
|
||||
update_icon()
|
||||
|
||||
verb/toggle_openness() //nice name, huh? HUH?!
|
||||
set name = "Open/Close"
|
||||
set category = "Object"
|
||||
|
||||
if (isrobot(usr))
|
||||
return
|
||||
|
||||
localopened = !localopened
|
||||
update_icon()
|
||||
|
||||
verb/remove_extinguisher()
|
||||
set name = "Remove Extinguisher"
|
||||
set category = "Object"
|
||||
|
||||
if (isrobot(usr))
|
||||
return
|
||||
|
||||
if (localopened)
|
||||
if(EXTINGUISHER)
|
||||
usr.put_in_hand(EXTINGUISHER)
|
||||
EXTINGUISHER = null
|
||||
usr << "\blue You take the extinguisher from the [name]."
|
||||
else
|
||||
usr << "\blue The [name] is empty."
|
||||
else
|
||||
usr << "\blue The [name] is closed."
|
||||
update_icon()
|
||||
|
||||
attack_paw(mob/user as mob)
|
||||
attack_hand(user)
|
||||
return
|
||||
|
||||
attack_ai(mob/user as mob)
|
||||
return
|
||||
|
||||
update_icon()
|
||||
var/hasextinguisher = 0
|
||||
if(EXTINGUISHER)
|
||||
hasextinguisher = 1
|
||||
icon_state = text("extinguisher[][]",hasextinguisher,src.localopened)
|
||||
|
||||
|
||||
/obj/closet/gimmick
|
||||
desc = "Administrative Supply Closet"
|
||||
name = "Administrative Supply Closet"
|
||||
icon_state = "syndicate1"
|
||||
icon_closed = "syndicate1"
|
||||
icon_opened = "syndicate1open"
|
||||
@@ -121,14 +419,14 @@
|
||||
anchored = 0
|
||||
|
||||
/obj/closet/gimmick/russian
|
||||
desc = "Russian Surplus"
|
||||
name = "Russian Surplus"
|
||||
icon_state = "syndicate1"
|
||||
icon_closed = "syndicate1"
|
||||
icon_opened = "syndicate1open"
|
||||
desc = "Russian Surplus Closet"
|
||||
|
||||
/obj/closet/gimmick/tacticool
|
||||
desc = "Tacticool Gear"
|
||||
name = "Tacticool Gear"
|
||||
icon_state = "syndicate1"
|
||||
icon_closed = "syndicate1"
|
||||
icon_opened = "syndicate1open"
|
||||
@@ -141,7 +439,7 @@
|
||||
icon_state = "syndicate"
|
||||
icon_closed = "syndicate"
|
||||
icon_opened = "syndicateopen"
|
||||
desc = "Thunderdome closet."
|
||||
name = "Thunderdome closet."
|
||||
anchored = 1
|
||||
|
||||
/obj/closet/thunderdome/tdred
|
||||
@@ -149,14 +447,14 @@
|
||||
icon_state = "syndicate"
|
||||
icon_closed = "syndicate"
|
||||
icon_opened = "syndicateopen"
|
||||
desc = "Thunderdome closet."
|
||||
name = "Thunderdome closet."
|
||||
|
||||
/obj/closet/thunderdome/tdgreen
|
||||
desc = "Everything you need!"
|
||||
icon_state = "syndicate1"
|
||||
icon_closed = "syndicate1"
|
||||
icon_opened = "syndicate1open"
|
||||
desc = "Thunderdome closet."
|
||||
name = "Thunderdome closet."
|
||||
|
||||
/obj/closet/malf/suits
|
||||
desc = "Gear preparations closet."
|
||||
|
||||
@@ -2,6 +2,12 @@
|
||||
name = "weapon"
|
||||
icon = 'weapons.dmi'
|
||||
|
||||
/obj/item/weapon/offhand
|
||||
name = "Offhand"
|
||||
var/linked_weapon_name = ""
|
||||
w_class = 5.0
|
||||
icon_state = "offhand"
|
||||
|
||||
/obj/item/weapon/shield
|
||||
name = "shield"
|
||||
|
||||
@@ -490,6 +496,15 @@
|
||||
icon = 'items.dmi'
|
||||
icon_state = "red_crowbar"
|
||||
|
||||
/obj/item/weapon/fireaxe // DEM AXES MAN, marker -Agouri
|
||||
icon_state = "fireaxe0"
|
||||
name = "Fire axe"
|
||||
desc = "Truly, the tool of a madman. Who would possibly think to fight fire with an axe?"
|
||||
force = 5
|
||||
w_class = 4.0
|
||||
twohanded = 1
|
||||
|
||||
|
||||
/obj/item/weapon/disk
|
||||
name = "disk"
|
||||
icon = 'items.dmi'
|
||||
|
||||
@@ -867,8 +867,13 @@ About the new airlock wires panel:
|
||||
return src.attack_hand(user)
|
||||
else if (istype(C, /obj/item/device/radio/signaler))
|
||||
return src.attack_hand(user)
|
||||
else if (istype(C, /obj/item/weapon/crowbar))
|
||||
if ((src.density) && ( src.welded ) && !( src.operating ) && src.p_open && (!src.arePowerSystemsOn() || (stat & NOPOWER)) && !src.locked)
|
||||
else if (istype(C, /obj/item/weapon/crowbar) || istype(C, /obj/item/weapon/fireaxe) )
|
||||
var/beingcrowbarred = null
|
||||
if(istype(C, /obj/item/weapon/crowbar) )
|
||||
beingcrowbarred = 1 //derp, Agouri
|
||||
else
|
||||
beingcrowbarred = 0
|
||||
if ( ((src.density) && ( src.welded ) && !( src.operating ) && src.p_open && (!src.arePowerSystemsOn() || (stat & NOPOWER)) && !src.locked) && beingcrowbarred == 1 )
|
||||
playsound(src.loc, 'Crowbar.ogg', 100, 1)
|
||||
user.visible_message("[user] removes the electronics from the airlock assembly.", "You start to remove electronics into the airlock assembly.")
|
||||
if(do_after(user,40))
|
||||
@@ -898,32 +903,70 @@ About the new airlock wires panel:
|
||||
else if (src.locked)
|
||||
user << "\blue The airlock's bolts prevent it from being pried open."
|
||||
if ((src.density) && (!( src.welded ) && !( src.operating ) && ((!src.arePowerSystemsOn()) || (stat & NOPOWER)) && !( src.locked )))
|
||||
spawn( 0 )
|
||||
src.operating = 1
|
||||
animate("opening")
|
||||
|
||||
sleep(15)
|
||||
if(beingcrowbarred == 0) //being fireaxe'd
|
||||
var/obj/item/weapon/fireaxe/F = C
|
||||
if(F.wielded == 1)
|
||||
spawn( 0 )
|
||||
src.operating = 1
|
||||
animate("opening")
|
||||
|
||||
src.density = 0
|
||||
update_icon()
|
||||
sleep(15)
|
||||
|
||||
if (!istype(src, /obj/machinery/door/airlock/glass))
|
||||
src.sd_SetOpacity(0)
|
||||
src.operating = 0
|
||||
src.density = 0
|
||||
update_icon()
|
||||
|
||||
if (!istype(src, /obj/machinery/door/airlock/glass))
|
||||
src.sd_SetOpacity(0)
|
||||
src.operating = 0
|
||||
return
|
||||
user << "\red You need to be wielding the Fire axe to do that."
|
||||
return
|
||||
else
|
||||
if ((!src.density) && (!( src.welded ) && !( src.operating ) && !( src.locked )))
|
||||
else
|
||||
spawn( 0 )
|
||||
src.operating = 1
|
||||
animate("closing")
|
||||
animate("opening")
|
||||
|
||||
src.density = 1
|
||||
sleep(15)
|
||||
|
||||
src.density = 0
|
||||
update_icon()
|
||||
|
||||
if ((src.visible) && (!istype(src, /obj/machinery/door/airlock/glass)))
|
||||
src.sd_SetOpacity(1)
|
||||
if (!istype(src, /obj/machinery/door/airlock/glass))
|
||||
src.sd_SetOpacity(0)
|
||||
src.operating = 0
|
||||
return
|
||||
|
||||
else
|
||||
if ((!src.density) && (!( src.welded ) && !( src.operating ) && !( src.locked )))
|
||||
if(beingcrowbarred == 0)
|
||||
var/obj/item/weapon/fireaxe/F = C
|
||||
if(F.wielded == 1)
|
||||
spawn( 0 )
|
||||
src.operating = 1
|
||||
animate("closing")
|
||||
|
||||
src.density = 1
|
||||
sleep(15)
|
||||
update_icon()
|
||||
|
||||
if ((src.visible) && (!istype(src, /obj/machinery/door/airlock/glass)))
|
||||
src.sd_SetOpacity(1)
|
||||
src.operating = 0
|
||||
else
|
||||
user << "\red You need to be wielding the Fire axe to do that."
|
||||
else
|
||||
spawn( 0 )
|
||||
src.operating = 1
|
||||
animate("closing")
|
||||
|
||||
src.density = 1
|
||||
sleep(15)
|
||||
update_icon()
|
||||
|
||||
if ((src.visible) && (!istype(src, /obj/machinery/door/airlock/glass)))
|
||||
src.sd_SetOpacity(1)
|
||||
src.operating = 0
|
||||
|
||||
else
|
||||
..()
|
||||
|
||||
@@ -25,7 +25,7 @@
|
||||
user << text("\red You [blocked?"welded":"unwelded"] the [src]")
|
||||
update_icon()
|
||||
return
|
||||
if (istype(C, /obj/item/weapon/crowbar))
|
||||
if (istype(C, /obj/item/weapon/crowbar) || (istype(C,/obj/item/weapon/fireaxe) && C.wielded == 1) )
|
||||
if (!src.blocked && !src.operating)
|
||||
if(src.density)
|
||||
spawn( 0 )
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
|
||||
/obj/machinery/door/poddoor/attackby(obj/item/weapon/C as obj, mob/user as mob)
|
||||
src.add_fingerprint(user)
|
||||
if (!( istype(C, /obj/item/weapon/crowbar) ))
|
||||
if (!( istype(C, /obj/item/weapon/crowbar || istype(C, /obj/item/weapon/fireaxe) && C.wielded == 1) ))
|
||||
return
|
||||
if ((src.density && (stat & NOPOWER) && !( src.operating )))
|
||||
spawn( 0 )
|
||||
|
||||
@@ -4,12 +4,15 @@ datum/song
|
||||
var/list/lines = list()
|
||||
|
||||
|
||||
|
||||
/obj/device/piano
|
||||
name = "space piano"
|
||||
icon = 'musician.dmi'
|
||||
icon_state = "piano"
|
||||
anchored = 1
|
||||
density = 1
|
||||
var/hitstaken = 0
|
||||
var/broken = 0
|
||||
var
|
||||
datum/song/song
|
||||
playing = 0
|
||||
@@ -52,25 +55,28 @@ datum/song
|
||||
src.playing = 0
|
||||
|
||||
attack_hand(var/mob/user as mob)
|
||||
usr.machine = src
|
||||
//var/dat = "<HEAD><TITLE>Piano</TITLE></HEAD><BODY>\n <META HTTP-EQUIV='Refresh' CONTENT='10'>"
|
||||
var/dat
|
||||
var/calctempo = (10/tempo)*60
|
||||
dat += "Tempo : [calctempo] BPM (<A href='?src=\ref[src];lowertempo=1'>-</A>/<A href='?src=\ref[src];raisetempo=1'>+</A>)"
|
||||
dat += "<A href='?src=\ref[src];newsong=1'>(Start a New Song)</A><BR>"
|
||||
if(src.song)
|
||||
var/linecount = 0
|
||||
for(var/line in song.lines)
|
||||
linecount += 1
|
||||
dat += "Bar [linecount]: [line]<BR>"//<A href='?src=\ref[src];deletebar=[linecount]'>(Delete bar)</A><BR>" // TODO: Replace delimeters with spaces, clean up display
|
||||
dat += "<A href='?src=\ref[src];newbar=1'>(Write a new bar)</A><BR>"
|
||||
if(src.song.lines.len > 0 && !(src.playing))
|
||||
dat += "<A href='?src=\ref[src];play=1'>(Play song)</A><BR>"
|
||||
if(src.playing)
|
||||
dat += "<A href='?src=\ref[src];stop=1'>(Stop playing)</A><BR>"
|
||||
dat += "<I><BR><BR><BR>Bars are a series of notes separated by asterisks (*)<BR><BR>Example: A*B*C*D*E*F*G will play a scale<BR>Chords can be played simply by listing more than one note before a pause : AB*CD*EF*GA<BR><BR>Bars may be up to 30 characters (including pauses)<BR>A song may only contain up to 10 bars<BR></I>"
|
||||
user << browse(dat, "window=piano")
|
||||
onclose(user, "piano")
|
||||
if(src.broken)
|
||||
return
|
||||
else
|
||||
usr.machine = src
|
||||
//var/dat = "<HEAD><TITLE>Piano</TITLE></HEAD><BODY>\n <META HTTP-EQUIV='Refresh' CONTENT='10'>"
|
||||
var/dat
|
||||
var/calctempo = (10/tempo)*60
|
||||
dat += "Tempo : [calctempo] BPM (<A href='?src=\ref[src];lowertempo=1'>-</A>/<A href='?src=\ref[src];raisetempo=1'>+</A>)"
|
||||
dat += "<A href='?src=\ref[src];newsong=1'>(Start a New Song)</A><BR>"
|
||||
if(src.song)
|
||||
var/linecount = 0
|
||||
for(var/line in song.lines)
|
||||
linecount += 1
|
||||
dat += "Bar [linecount]: [line]<BR>"//<A href='?src=\ref[src];deletebar=[linecount]'>(Delete bar)</A><BR>" // TODO: Replace delimeters with spaces, clean up display
|
||||
dat += "<A href='?src=\ref[src];newbar=1'>(Write a new bar)</A><BR>"
|
||||
if(src.song.lines.len > 0 && !(src.playing))
|
||||
dat += "<A href='?src=\ref[src];play=1'>(Play song)</A><BR>"
|
||||
if(src.playing)
|
||||
dat += "<A href='?src=\ref[src];stop=1'>(Stop playing)</A><BR>"
|
||||
dat += "<I><BR><BR><BR>Bars are a series of notes separated by asterisks (*)<BR><BR>Example: A*B*C*D*E*F*G will play a scale<BR>Chords can be played simply by listing more than one note before a pause : AB*CD*EF*GA<BR><BR>Bars may be up to 30 characters (including pauses)<BR>A song may only contain up to 10 bars<BR></I>"
|
||||
user << browse(dat, "window=piano")
|
||||
onclose(user, "piano")
|
||||
|
||||
Topic(href, href_list)
|
||||
if(href_list["lowertempo"])
|
||||
@@ -108,6 +114,20 @@ datum/song
|
||||
src.updateUsrDialog()
|
||||
return
|
||||
|
||||
attackby(obj/item/weapon/W as obj, mob/user as mob)
|
||||
if(istype(W, /obj/item/weapon/fireaxe) && W.wielded == 1)
|
||||
playsound(src.loc, 'woodhit.ogg', 50, 0)
|
||||
for(var/mob/O in viewers(user, null))
|
||||
O.show_message(text("\red <B> [] forcefully slams the [] with the Fire axe!</B>", user, src), 1)
|
||||
if(!src.broken) //we don't want an already damaged piano to be more damageable
|
||||
src.hitstaken++
|
||||
if(prob(src.hitstaken*8))
|
||||
src.broken = 1
|
||||
src.icon_state = "pianobroken"
|
||||
playsound(src.loc, 'pianocrash.ogg', 50, 0)
|
||||
return
|
||||
return
|
||||
return
|
||||
|
||||
|
||||
/* src.playing = 1
|
||||
|
||||
@@ -1,10 +1,18 @@
|
||||
/obj/closet/firecloset/full/New()
|
||||
..()
|
||||
sleep(4)
|
||||
contents = list()
|
||||
|
||||
new /obj/item/clothing/suit/fire/firefighter(src)
|
||||
new /obj/item/clothing/mask/gas(src)
|
||||
new /obj/item/device/flashlight(src)
|
||||
new /obj/item/weapon/tank/emergency_oxygen(src)
|
||||
new /obj/item/weapon/extinguisher(src)
|
||||
new /obj/item/clothing/head/helmet/hardhat(src)
|
||||
|
||||
/obj/closet/firecloset/New()
|
||||
..()
|
||||
|
||||
if (prob (1))
|
||||
del(src)
|
||||
return
|
||||
|
||||
new /obj/item/clothing/mask/gas(src)
|
||||
new /obj/item/weapon/tank/emergency_oxygen(src)
|
||||
new /obj/item/weapon/extinguisher(src)
|
||||
@@ -29,4 +37,36 @@
|
||||
new /obj/item/weapon/tank/oxygen(src)
|
||||
new /obj/item/weapon/extinguisher(src)
|
||||
new /obj/item/clothing/suit/fire/firefighter(src)
|
||||
new /obj/item/clothing/head/helmet/hardhat(src)*/
|
||||
new /obj/item/clothing/head/helmet/hardhat(src)*/
|
||||
|
||||
/obj/closet/toolcloset/New()
|
||||
if(prob(60))
|
||||
new /obj/item/clothing/suit/hazardvest(src)
|
||||
if(prob(70))
|
||||
new /obj/item/device/flashlight(src)
|
||||
if(prob(70))
|
||||
new /obj/item/weapon/screwdriver(src)
|
||||
if(prob(70))
|
||||
new /obj/item/weapon/wrench(src)
|
||||
if(prob(70))
|
||||
new /obj/item/weapon/weldingtool(src)
|
||||
if(prob(70))
|
||||
new /obj/item/weapon/crowbar(src)
|
||||
if(prob(70))
|
||||
new /obj/item/weapon/wirecutters(src)
|
||||
if(prob(70))
|
||||
new /obj/item/device/t_scanner(src)
|
||||
if(prob(50))
|
||||
new /obj/item/weapon/storage/utilitybelt(src)
|
||||
if(prob(30))
|
||||
new /obj/item/weapon/cable_coil(src)
|
||||
if(prob(30))
|
||||
new /obj/item/weapon/cable_coil(src)
|
||||
if(prob(30))
|
||||
new /obj/item/weapon/cable_coil(src)
|
||||
if(prob(30))
|
||||
new /obj/item/device/multitool(src)
|
||||
if(prob(10))
|
||||
new /obj/item/clothing/gloves/yellow(src)
|
||||
if(prob(60))
|
||||
new /obj/item/clothing/head/helmet/hardhat(src)
|
||||
@@ -101,6 +101,12 @@
|
||||
|
||||
|
||||
/mob/living/carbon/proc/swap_hand()
|
||||
var/obj/item/item_in_hand = src.get_active_hand()
|
||||
if(item_in_hand) //this segment checks if the item in your hand is twohanded.
|
||||
if(item_in_hand.twohanded == 1)
|
||||
if(item_in_hand.wielded == 1)
|
||||
usr << text("Your other hand is too busy holding the []",item_in_hand.name)
|
||||
return
|
||||
src.hand = !( src.hand )
|
||||
if (!( src.hand ))
|
||||
src.hands.dir = NORTH
|
||||
|
||||
@@ -1101,6 +1101,18 @@
|
||||
|
||||
/mob/proc/drop_item()
|
||||
var/obj/item/W = src.equipped()
|
||||
if(istype(W,/obj/item/weapon/fireaxe))
|
||||
if(W.wielded)
|
||||
if(src.hand)
|
||||
var/obj/item/weapon/offhand/O = src.r_hand
|
||||
del O
|
||||
else
|
||||
var/obj/item/weapon/offhand/O = src.l_hand
|
||||
del O
|
||||
W.wielded = 0 //Kinda crude, but gets the job done with minimal pain -Agouri
|
||||
W.name = "Fire axe" //name reset so people don't see world fireaxes with (unwielded) or (wielded) tags
|
||||
W.update_icon()
|
||||
|
||||
if (W)
|
||||
u_equip(W)
|
||||
if (src.client)
|
||||
@@ -1202,6 +1214,7 @@
|
||||
|
||||
update_clothing()
|
||||
|
||||
|
||||
/mob/proc/ret_grab(obj/list_container/mobl/L as obj, flag)
|
||||
if ((!( istype(src.l_hand, /obj/item/weapon/grab) ) && !( istype(src.r_hand, /obj/item/weapon/grab) )))
|
||||
if (!( L ))
|
||||
|
||||
@@ -45,6 +45,50 @@ Stuff which is in development and not yet visible to players or just code relate
|
||||
(is. code improvements for expandability, etc.) should not be listed here. They
|
||||
should be listed in the changelog upon commit tho. Thanks. -->
|
||||
|
||||
<b><font color='blue'>6 May 2011, AMURRICA FUCK YEAH day</font><b>
|
||||
<li><b><font color='red'>DANGERCON UPDATE:</font color><font color='blue'>Agouri and Erro updated(I'm in the DangerCon team now, nyoro~n :3):</font color></b>
|
||||
<ul>
|
||||
<li>Backpacks removed from all players. It was unrealistic. You can now had to the living quarters to get one from the personal closets there.</li>
|
||||
<li>Any firearms now send you to critical in 1-2 shots. Doctors need to get the wounded man to surgery to provide good treatment. Guide for bullet removal is up on the wiki.</li>
|
||||
<li>Brute packs and kelotane removed altogether to encourage use of surgery for heavy injury.</li>
|
||||
<li>Just kidding</li>
|
||||
<li>Fireaxe cabinets and Extinguisher wall-mounted closets now added around the station, thank Nanotransen for that.</li>
|
||||
<li>Because of Nanotransen being Nanotransen, the fire cabinets are electrically operated. AIs can lock them and you can hack them if you want the precious axe inside and it's locked. The axe itself uses an experimental two-handed system, so while it's <u><font color='red'>FUCKING ROBUST</u></font color> you need to wield it to fully unlock its capabilities. Pick up axe and click it in your hand to wield it, click it again or drop to unwield and carry it.You can also use it as a crowbar for cranking doors and firedoors open when wielded, utilising the lever on the back of the blade. And I didn't lie to you. It's fucking robust.</li>
|
||||
<li>Fireaxe, when wielded, fully takes up your other hand as well. You can't switch hands and the fireaxe itself is unwieldy and won't fit anywhere.
|
||||
<li>A fireaxe cabinet can also be smashed if you've got a strong enough object in your hand.<li>
|
||||
<li><b>EXTINGUISHER CLOSETS</b>, made by dear Erro, can be found in abundance around the station. Click once to open them, again to retrieve the extinguisher, attack with extinguisher to place it back. Limited uses, but we've got plans for our little friend.
|
||||
<li><font color ='blue'><u>Sprite kudos go to: Cheridan for most of them, Khodoque for the fantastic fireaxe head. I merged those two. Also thanks to matty and Arcalane for giving it a shot.</font color></u></li>
|
||||
<li><font size = '2'><i>Has the piano got TOO annoying? Try the fire axe...</font size></i></li>
|
||||
<li>Oh, and tou can now construct Light floors! To do it: Use wires on glass, then metal on the produced assembly, then place it on an uncovered floor like you would when replacing broken floor tiles. To deconstruct: Crowbar on light floor, use crowbar on produced assembly to remove metal, wirecutters to seperate the wires from the glass. Sprites by delicious <font color ='blue'>Hempuli.</font color></li>
|
||||
<li>Got something to bitch about? Got a bug to report? Want to create drama? Did the clown destroy your piano while you were playing an amazing space remix of the moonlight sonata? Give it <a href="http://code.google.com/p/tgstation13/source/detail?r=1543">here</a>
|
||||
|
||||
</ul>
|
||||
</li>
|
||||
|
||||
<li><b>Rastaf.Zero updated:</b>
|
||||
<ul>
|
||||
<li>New uniforms added for captain and chaplain, in their respective lockers. Credits to <font color='blue'>Farart</font color>.</li>
|
||||
</ul>
|
||||
</li>
|
||||
|
||||
<li><b>Urist McDorf updated:</b>
|
||||
<ul>
|
||||
<li>Mime and Clown now spawn with Crayons. You can eat those crayons. And use them for other nefarious purposes.</li>
|
||||
<li>Health Scanners (A new type of Goggles) now spawn in medbay. Use them, doctors!</li>
|
||||
<li>New Arcade toy.</li>
|
||||
<li>Glowshrooms! What other lifeform will threaten the welfare of the station now?!</li>
|
||||
<li>Bananas growable in hydroponics. Also soap is now on-board.</li>
|
||||
<li>Added new "Lights out!" random event.</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li><b>ConstantA updated:</b>
|
||||
<ul>
|
||||
<li>Mech pilots are now immune to zapping, thank you very much.</li>
|
||||
</ul>
|
||||
</li>
|
||||
|
||||
</br>
|
||||
|
||||
<b><font color='blue'>17 April 2011, World Hemophilia Day</font><b>
|
||||
<li><b>Microwave updated:</b>
|
||||
<ul>
|
||||
|
||||
|
Before Width: | Height: | Size: 8.9 KiB After Width: | Height: | Size: 9.5 KiB |
|
Before Width: | Height: | Size: 84 KiB After Width: | Height: | Size: 85 KiB |
|
Before Width: | Height: | Size: 84 KiB After Width: | Height: | Size: 85 KiB |
|
Before Width: | Height: | Size: 19 KiB After Width: | Height: | Size: 33 KiB |
|
Before Width: | Height: | Size: 793 B After Width: | Height: | Size: 4.5 KiB |
|
Before Width: | Height: | Size: 15 KiB After Width: | Height: | Size: 17 KiB |