mirror of
https://github.com/Bubberstation/Bubberstation.git
synced 2026-07-20 12:35:33 +01:00
Merge branch 'master' of https://github.com/tgstation/-tg-station into parahats
Conflicts: code/modules/clothing/head/soft_caps.dm icons/mob/head.dmi icons/obj/clothing/hats.dmi
This commit is contained in:
@@ -348,7 +348,7 @@ atom/proc/generate_female_clothing(index,t_color,icon)
|
||||
flags |= (visor_flags)
|
||||
flags_inv |= (visor_flags_inv)
|
||||
icon_state = initial(icon_state)
|
||||
usr << "You pull the [src] down."
|
||||
usr << "You pull \the [src] down."
|
||||
flash_protect = initial(flash_protect)
|
||||
tint = initial(tint)
|
||||
else
|
||||
@@ -356,7 +356,7 @@ atom/proc/generate_female_clothing(index,t_color,icon)
|
||||
flags &= ~(visor_flags)
|
||||
flags_inv &= ~(visor_flags_inv)
|
||||
icon_state = "[initial(icon_state)]up"
|
||||
usr << "You push the [src] up."
|
||||
usr << "You push \the [src] up."
|
||||
flash_protect = 0
|
||||
tint = 0
|
||||
|
||||
|
||||
@@ -32,14 +32,14 @@
|
||||
flags |= (visor_flags)
|
||||
flags_inv |= (visor_flags_inv)
|
||||
icon_state = initial(icon_state)
|
||||
usr << "You pull the [src] down."
|
||||
usr << "You pull \the [src] down."
|
||||
usr.update_inv_head(0)
|
||||
else
|
||||
up = !up
|
||||
flags &= ~(visor_flags)
|
||||
flags_inv &= ~(visor_flags_inv)
|
||||
icon_state = "[initial(icon_state)]up"
|
||||
usr << "You push the [src] up."
|
||||
usr << "You push \the [src] up."
|
||||
usr.update_inv_head(0)
|
||||
|
||||
/obj/item/clothing/head/helmet/swat
|
||||
|
||||
@@ -74,16 +74,11 @@
|
||||
armor = list(melee = 60, bullet = 5, laser = 25, energy = 10, bomb = 25, bio = 0, rad = 0)
|
||||
strip_delay = 60
|
||||
|
||||
/obj/item/clothing/head/warden/drill
|
||||
name = "warden's drill hat"
|
||||
desc = "A robust drill hat for the Warden. For keeping the officers and prisoners in line."
|
||||
icon_state = "wardendrill"
|
||||
|
||||
/obj/item/clothing/head/beret/sec
|
||||
name = "security beret"
|
||||
desc = "A robust beret with the security insignia emblazoned on it. For officers that are more inclined towards style than safety."
|
||||
desc = "A robust beret with the security insignia emblazoned on it. Uses reinforced fabric to offer sufficent protection."
|
||||
icon_state = "beret_badge"
|
||||
armor = list(melee = 30, bullet = 5, laser = 15, energy = 10, bomb = 0, bio = 0, rad = 0)
|
||||
armor = list(melee = 30, bullet = 25, laser = 25, energy = 10, bomb = 0, bio = 0, rad = 0)
|
||||
strip_delay = 60
|
||||
|
||||
/obj/item/clothing/head/beret/sec/navyhos
|
||||
@@ -95,6 +90,8 @@
|
||||
name = "warden's beret"
|
||||
desc = "A special beret with the Warden's insignia emblazoned on it. For wardens with class."
|
||||
icon_state = "wardenberet"
|
||||
armor = list(melee = 60, bullet = 5, laser = 25, energy = 10, bomb = 25, bio = 0, rad = 0)
|
||||
strip_delay = 60
|
||||
|
||||
/obj/item/clothing/head/beret/sec/navyofficer
|
||||
desc = "A special beret with the security insignia emblazoned on it. For officers with class."
|
||||
|
||||
@@ -90,7 +90,7 @@
|
||||
desc = "It's a robust baseball hat in tasteful red colour."
|
||||
icon_state = "secsoft"
|
||||
item_color = "sec"
|
||||
armor = list(melee = 30, bullet = 5, laser = 5, energy = 15, bomb = 0, bio = 0, rad = 0)
|
||||
armor = list(melee = 30, bullet = 25, laser = 25, energy = 10, bomb = 0, bio = 0, rad = 0)
|
||||
strip_delay = 60
|
||||
|
||||
/obj/item/clothing/head/soft/emt
|
||||
|
||||
@@ -10,12 +10,20 @@
|
||||
|
||||
/obj/item/clothing/suit/armor/vest
|
||||
name = "armor"
|
||||
desc = "An armored vest that protects against most types of damage."
|
||||
desc = "A slim armored vest that protects against most types of damage."
|
||||
icon_state = "armor"
|
||||
item_state = "armor"
|
||||
blood_overlay_type = "armor"
|
||||
armor = list(melee = 50, bullet = 15, laser = 50, energy = 10, bomb = 25, bio = 0, rad = 0)
|
||||
|
||||
/obj/item/clothing/suit/armor/vest/alt
|
||||
name = "armor"
|
||||
desc = "An armored vest that protects against most types of damage. This is a civilian variant."
|
||||
icon_state = "armoralt"
|
||||
item_state = "armoralt"
|
||||
blood_overlay_type = "armor"
|
||||
armor = list(melee = 50, bullet = 15, laser = 50, energy = 10, bomb = 25, bio = 0, rad = 0)
|
||||
|
||||
/obj/item/clothing/suit/armor/hos
|
||||
name = "armored greatcoat"
|
||||
desc = "A greatcoat enchanced with a special alloy for some protection and style for those with a commanding presence."
|
||||
@@ -38,7 +46,7 @@
|
||||
|
||||
/obj/item/clothing/suit/armor/vest/warden
|
||||
name = "warden's jacket"
|
||||
desc = "An armored jacket with silver rank pips and livery."
|
||||
desc = "A navy-blue armored jacket with blue shoulder designations and '/Warden/' stitched into one of the chest pockets."
|
||||
icon_state = "warden_jacket"
|
||||
item_state = "armor"
|
||||
body_parts_covered = CHEST|GROIN|ARMS
|
||||
@@ -46,6 +54,11 @@
|
||||
heat_protection = CHEST|GROIN|ARMS|HANDS
|
||||
strip_delay = 70
|
||||
|
||||
/obj/item/clothing/suit/armor/vest/warden/alt
|
||||
name = "warden's armored jacket"
|
||||
desc = "A red jacket with silver rank pips and body armor strapped on top."
|
||||
icon_state = "warden_alt"
|
||||
|
||||
/obj/item/clothing/suit/armor/vest/capcarapace
|
||||
name = "captain's carapace"
|
||||
desc = "An armored vest reinforced with ceramic plates and pauldrons to provide additional protection whilst still offering maximum mobility and flexibility. Issued only to the station's finest, although it does chafe your nipples."
|
||||
@@ -70,12 +83,12 @@
|
||||
put_on_delay = 60
|
||||
|
||||
/obj/item/clothing/suit/armor/bulletproof
|
||||
name = "tactical armor"
|
||||
desc = "A kevlar vest that excels in protecting the wearer against traditional projectile weaponry and explosives."
|
||||
name = "bulletproof armor"
|
||||
desc = "A bulletproof vest that excels in protecting the wearer against traditional projectile weaponry and explosives to a minor extent."
|
||||
icon_state = "bulletproof"
|
||||
item_state = "armor"
|
||||
blood_overlay_type = "armor"
|
||||
armor = list(melee = 25, bullet = 60, laser = 25, energy = 10, bomb = 40, bio = 0, rad = 0)
|
||||
armor = list(melee = 25, bullet = 80, laser = 10, energy = 10, bomb = 40, bio = 0, rad = 0)
|
||||
strip_delay = 70
|
||||
put_on_delay = 50
|
||||
|
||||
|
||||
@@ -10,29 +10,23 @@
|
||||
*/
|
||||
|
||||
/obj/item/clothing/under/rank/security
|
||||
name = "security jumpsuit"
|
||||
desc = "A security jumpsuit for officers complete with nanotrasen waistbuckle."
|
||||
name = "security suit"
|
||||
desc = "A formal security suit for officers complete with nanotrasen belt buckle."
|
||||
icon_state = "security"
|
||||
item_state = "r_suit"
|
||||
item_state = "gy_suit"
|
||||
item_color = "security"
|
||||
armor = list(melee = 10, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 0)
|
||||
strip_delay = 50
|
||||
|
||||
/obj/item/clothing/under/rank/warden
|
||||
name = "warden's jumpsuit"
|
||||
desc = "A security jumpsuit suit with decorative silver pips and 'warden' written on the shoulders."
|
||||
icon_state = "wardenformal"
|
||||
item_state = "r_suit"
|
||||
name = "warden's suit"
|
||||
desc = "A formal security suit for the warden with blue desginations and '/Warden/' stiched into the shoulders."
|
||||
icon_state = "warden"
|
||||
item_state = "gy_suit"
|
||||
item_color = "warden"
|
||||
armor = list(melee = 10, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 0)
|
||||
strip_delay = 50
|
||||
|
||||
/obj/item/clothing/under/rank/warden/formal
|
||||
name = "warden's formal suit"
|
||||
desc = "A security formal suit with silver shoulder pips, a striped red tie, and tan slacks - the universal sign of bureaucracy.="
|
||||
icon_state = "wardenformal"
|
||||
item_color = "wardenformal"
|
||||
|
||||
/*
|
||||
* Detective
|
||||
*/
|
||||
@@ -57,19 +51,13 @@
|
||||
*/
|
||||
/obj/item/clothing/under/rank/head_of_security
|
||||
name = "head of security's suit"
|
||||
desc = "The jumpsuit worn by those few with the dedication to achieve the position of Head of Security."
|
||||
desc = "A security suit decorated for those few with the dedication to achieve the position of Head of Security."
|
||||
icon_state = "hos"
|
||||
item_state = "r_suit"
|
||||
item_state = "gy_suit"
|
||||
item_color = "hos"
|
||||
armor = list(melee = 10, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 0)
|
||||
strip_delay = 60
|
||||
|
||||
/obj/item/clothing/under/rank/head_of_security/formal
|
||||
name = "head of security's formal suit"
|
||||
desc = "The formal suit for a Head of Security with a superior sense of style."
|
||||
icon_state = "hosformal"
|
||||
item_color = "hosformal"
|
||||
|
||||
/*
|
||||
* Navy uniforms
|
||||
*/
|
||||
|
||||
@@ -195,4 +195,85 @@
|
||||
name = "medical guard armband"
|
||||
desc = "An armband, worn by the station's security forces to display which department they're assigned to. This one is white and blue."
|
||||
icon_state = "medblueband"
|
||||
item_color = "medblueband"
|
||||
item_color = "medblueband"
|
||||
|
||||
///////////
|
||||
//SCARVES//
|
||||
///////////
|
||||
|
||||
/obj/item/clothing/tie/scarf
|
||||
name = "scarf"
|
||||
desc = "A stylish scarf. The perfect winter accessory for those with a keen fashion sense, and those who just can't handle a cold breeze on their necks."
|
||||
|
||||
/obj/item/clothing/tie/scarf/red
|
||||
name = "red scarf"
|
||||
icon_state = "redscarf"
|
||||
item_color = "redscarf"
|
||||
|
||||
/obj/item/clothing/tie/scarf/green
|
||||
name = "green scarf"
|
||||
icon_state = "greenscarf"
|
||||
item_color = "greenscarf"
|
||||
|
||||
/obj/item/clothing/tie/scarf/darkblue
|
||||
name = "dark blue scarf"
|
||||
icon_state = "darkbluescarf"
|
||||
item_color = "darkbluescarf"
|
||||
|
||||
/obj/item/clothing/tie/scarf/purple
|
||||
name = "purple scarf"
|
||||
icon_state = "purplescarf"
|
||||
item_color = "purplescarf"
|
||||
|
||||
/obj/item/clothing/tie/scarf/yellow
|
||||
name = "yellow scarf"
|
||||
icon_state = "yellowscarf"
|
||||
item_color = "yellowscarf"
|
||||
|
||||
/obj/item/clothing/tie/scarf/orange
|
||||
name = "orange scarf"
|
||||
icon_state = "orangescarf"
|
||||
item_color = "orangescarf"
|
||||
|
||||
/obj/item/clothing/tie/scarf/lightblue
|
||||
name = "light blue scarf"
|
||||
icon_state = "lightbluescarf"
|
||||
item_color = "lightbluescarf"
|
||||
|
||||
/obj/item/clothing/tie/scarf/white
|
||||
name = "white scarf"
|
||||
icon_state = "whitescarf"
|
||||
item_color = "whitescarf"
|
||||
|
||||
/obj/item/clothing/tie/scarf/black
|
||||
name = "black scarf"
|
||||
icon_state = "blackscarf"
|
||||
item_color = "blackscarf"
|
||||
|
||||
/obj/item/clothing/tie/scarf/zebra
|
||||
name = "zebra scarf"
|
||||
icon_state = "zebrascarf"
|
||||
item_color = "zebrascarf"
|
||||
|
||||
/obj/item/clothing/tie/scarf/christmas
|
||||
name = "christmas scarf"
|
||||
icon_state = "christmasscarf"
|
||||
item_color = "christmasscarf"
|
||||
|
||||
//The three following scarves don't have the scarf subtype
|
||||
//This is because Ian can equip anything from that subtype
|
||||
//However, these 3 don't have corgi versions of their sprites
|
||||
/obj/item/clothing/tie/stripedredscarf
|
||||
name = "striped red scarf"
|
||||
icon_state = "stripedredscarf"
|
||||
item_color = "stripedredscarf"
|
||||
|
||||
/obj/item/clothing/tie/stripedgreenscarf
|
||||
name = "striped green scarf"
|
||||
icon_state = "stripedgreenscarf"
|
||||
item_color = "stripedgreenscarf"
|
||||
|
||||
/obj/item/clothing/tie/stripedbluescarf
|
||||
name = "striped blue scarf"
|
||||
icon_state = "stripedbluescarf"
|
||||
item_color = "stripedbluescarf"
|
||||
|
||||
@@ -101,7 +101,7 @@
|
||||
//The reagents in the bottle splash all over the target, thanks for the idea Nodrak
|
||||
if(src.reagents)
|
||||
for(var/mob/O in viewers(user, null))
|
||||
O.show_message(text("<span class='danger'>The contents of the [src] splashes all over [target]!</span>"), 1)
|
||||
O.show_message(text("<span class='danger'>The contents of \the [src] splashes all over [target]!</span>"), 1)
|
||||
src.reagents.reaction(target, TOUCH)
|
||||
|
||||
//Finally, smash the bottle. This kills (del) the bottle.
|
||||
|
||||
@@ -45,7 +45,7 @@
|
||||
if(src.reagents.has_reagent("sugar") && M.satiety < -150 && M.nutrition > NUTRITION_LEVEL_STARVING + 50 )
|
||||
M << "<span class='notice'>You don't feel like drinking any more sugary food at the moment.</span>"
|
||||
return 0
|
||||
M << "<span class='notice'>You swallow some of contents of the [src].</span>"
|
||||
M << "<span class='notice'>You swallow some of contents of \the [src].</span>"
|
||||
if(reagents.total_volume)
|
||||
reagents.reaction(M, INGEST)
|
||||
spawn(5)
|
||||
|
||||
@@ -189,10 +189,10 @@
|
||||
if(isanimal(M))
|
||||
if(iscorgi(M))
|
||||
if(bitecount == 0 || prob(50))
|
||||
M.emote("me", 1, "nibbles away at the [src]")
|
||||
M.emote("me", 1, "nibbles away at \the [src]")
|
||||
bitecount++
|
||||
if(bitecount >= 5)
|
||||
var/sattisfaction_text = pick("burps from enjoyment", "yaps for more", "woofs twice", "looks at the area where the [src] was")
|
||||
var/sattisfaction_text = pick("burps from enjoyment", "yaps for more", "woofs twice", "looks at the area where \the [src] was")
|
||||
if(sattisfaction_text)
|
||||
M.emote("me", 1, "[sattisfaction_text]")
|
||||
qdel(src)
|
||||
|
||||
@@ -67,7 +67,7 @@
|
||||
/obj/item/weapon/grown/log/attackby(obj/item/weapon/W as obj, mob/user as mob)
|
||||
..()
|
||||
if(istype(W, /obj/item/weapon/circular_saw) || istype(W, /obj/item/weapon/hatchet) || (istype(W, /obj/item/weapon/twohanded/fireaxe) && W:wielded) || istype(W, /obj/item/weapon/melee/energy))
|
||||
user.show_message("<span class='notice'>You make planks out of the [src]!</span>", 1)
|
||||
user.show_message("<span class='notice'>You make planks out of \the [src]!</span>", 1)
|
||||
for(var/i = 0,i < 2,i++)
|
||||
var/obj/item/stack/sheet/mineral/wood/NG = new (user.loc)
|
||||
for (var/obj/item/stack/sheet/mineral/wood/G in user.loc)
|
||||
@@ -83,7 +83,7 @@
|
||||
if(is_type_in_list(W,accepted))
|
||||
var/obj/item/weapon/reagent_containers/food/snacks/grown/leaf = W
|
||||
if(leaf.dry)
|
||||
user.show_message("<span class='notice'>You wrap the [W] around the log, turning it into a torch!</span>")
|
||||
user.show_message("<span class='notice'>You wrap \the [W] around the log, turning it into a torch!</span>")
|
||||
var/obj/item/device/flashlight/flare/torch/T = new /obj/item/device/flashlight/flare/torch(user.loc)
|
||||
usr.unEquip(W)
|
||||
usr.put_in_active_hand(T)
|
||||
|
||||
@@ -721,12 +721,12 @@ obj/machinery/hydroponics/attackby(var/obj/item/O as obj, var/mob/user as mob)
|
||||
if(anchored == 2)
|
||||
playsound(src.loc, 'sound/items/Screwdriver.ogg', 50, 1)
|
||||
anchored = 1
|
||||
user << "You unscrew the [src]'s hoses."
|
||||
user << "You unscrew \the [src]'s hoses."
|
||||
|
||||
else if(anchored == 1)
|
||||
playsound(src.loc, 'sound/items/Screwdriver.ogg', 50, 1)
|
||||
anchored = 2
|
||||
user << "You screw in the [src]'s hoses."
|
||||
user << "You screw in \the [src]'s hoses."
|
||||
|
||||
for(var/obj/machinery/hydroponics/h in range(1,src))
|
||||
spawn()
|
||||
|
||||
@@ -152,7 +152,7 @@
|
||||
if(triggered_by_explosive)
|
||||
log_game("An explosion has primed a [name] for detonation at [A.name]([bombturf.x],[bombturf.y],[bombturf.z])")
|
||||
else
|
||||
user.visible_message("<span class='warning'>[user] strikes the [src], causing a chain reaction!</span>")
|
||||
user.visible_message("<span class='warning'>[user] strikes \the [src], causing a chain reaction!</span>")
|
||||
log_game("[key_name(usr)] has primed a [name] for detonation at [A.name]([bombturf.x],[bombturf.y],[bombturf.z])")
|
||||
spawn(det_time)
|
||||
if(primed)
|
||||
|
||||
@@ -25,7 +25,15 @@
|
||||
var/obj/item/inventory_back
|
||||
var/facehugger
|
||||
|
||||
/mob/living/simple_animal/corgi/Life()
|
||||
/mob/living/simple_animal/corgi/New()
|
||||
..()
|
||||
regenerate_icons()
|
||||
|
||||
/mob/living/simple_animal/corgi/Die()
|
||||
..()
|
||||
regenerate_icons()
|
||||
|
||||
/mob/living/simple_animal/corgi/revive()
|
||||
..()
|
||||
regenerate_icons()
|
||||
|
||||
@@ -141,7 +149,7 @@
|
||||
|
||||
//The objects that corgis can wear on their backs.
|
||||
var/list/allowed_types = list(
|
||||
/obj/item/clothing/suit/armor/vest,
|
||||
/obj/item/clothing/suit/armor/vest/alt,
|
||||
/obj/item/device/radio,
|
||||
/obj/item/device/radio/off,
|
||||
/obj/item/clothing/suit/cardborg,
|
||||
@@ -192,134 +200,138 @@
|
||||
var/valid = 0
|
||||
|
||||
//Various hats and items (worn on his head) change Ian's behaviour. His attributes are reset when a hat is removed.
|
||||
switch(item_to_add.type)
|
||||
if( /obj/item/clothing/glasses/sunglasses, /obj/item/clothing/head/that, /obj/item/clothing/head/collectable/paper,
|
||||
/obj/item/clothing/head/hardhat, /obj/item/clothing/head/collectable/hardhat,/obj/item/clothing/head/hardhat/white, /obj/item/weapon/paper )
|
||||
valid = 1
|
||||
if(istype(item_to_add, /obj/item/clothing/tie/scarf))
|
||||
valid = 1
|
||||
else
|
||||
switch(item_to_add.type)
|
||||
if( /obj/item/clothing/glasses/sunglasses, /obj/item/clothing/head/that, /obj/item/clothing/head/collectable/paper,
|
||||
/obj/item/clothing/head/hardhat, /obj/item/clothing/head/collectable/hardhat, /obj/item/clothing/head/hardhat/white,
|
||||
/obj/item/weapon/paper)
|
||||
valid = 1
|
||||
|
||||
if(/obj/item/clothing/head/helmet)
|
||||
name = "Sergeant [real_name]"
|
||||
desc = "The ever-loyal, the ever-vigilant."
|
||||
valid = 1
|
||||
if(/obj/item/clothing/head/helmet)
|
||||
name = "Sergeant [real_name]"
|
||||
desc = "The ever-loyal, the ever-vigilant."
|
||||
valid = 1
|
||||
|
||||
if(/obj/item/clothing/head/chefhat, /obj/item/clothing/head/collectable/chef)
|
||||
name = "Sous chef [real_name]"
|
||||
desc = "Your food will be taste-tested. All of it."
|
||||
valid = 1
|
||||
if(/obj/item/clothing/head/chefhat, /obj/item/clothing/head/collectable/chef)
|
||||
name = "Sous chef [real_name]"
|
||||
desc = "Your food will be taste-tested. All of it."
|
||||
valid = 1
|
||||
|
||||
if(/obj/item/clothing/head/caphat, /obj/item/clothing/head/collectable/captain)
|
||||
name = "Captain [real_name]"
|
||||
desc = "Probably better than the last captain."
|
||||
valid = 1
|
||||
if(/obj/item/clothing/head/caphat, /obj/item/clothing/head/collectable/captain)
|
||||
name = "Captain [real_name]"
|
||||
desc = "Probably better than the last captain."
|
||||
valid = 1
|
||||
|
||||
if(/obj/item/clothing/head/kitty, /obj/item/clothing/head/collectable/kitty)
|
||||
name = "Runtime"
|
||||
emote_see = list("coughs up a furball", "stretches")
|
||||
emote_hear = list("purrs")
|
||||
speak = list("Purrr", "Meow!", "MAOOOOOW!", "HISSSSS", "MEEEEEEW")
|
||||
desc = "It's a cute little kitty-cat! ... wait ... what the hell?"
|
||||
valid = 1
|
||||
if(/obj/item/clothing/head/kitty, /obj/item/clothing/head/collectable/kitty)
|
||||
name = "Runtime"
|
||||
emote_see = list("coughs up a furball", "stretches")
|
||||
emote_hear = list("purrs")
|
||||
speak = list("Purrr", "Meow!", "MAOOOOOW!", "HISSSSS", "MEEEEEEW")
|
||||
desc = "It's a cute little kitty-cat! ... wait ... what the hell?"
|
||||
valid = 1
|
||||
|
||||
if(/obj/item/clothing/head/rabbitears, /obj/item/clothing/head/collectable/rabbitears)
|
||||
name = "Hoppy"
|
||||
emote_see = list("twitches its nose", "hops around a bit")
|
||||
desc = "This is Hoppy. It's a corgi-...urmm... bunny rabbit"
|
||||
valid = 1
|
||||
if(/obj/item/clothing/head/rabbitears, /obj/item/clothing/head/collectable/rabbitears)
|
||||
name = "Hoppy"
|
||||
emote_see = list("twitches its nose", "hops around a bit")
|
||||
desc = "This is Hoppy. It's a corgi-...urmm... bunny rabbit"
|
||||
valid = 1
|
||||
|
||||
if(/obj/item/clothing/head/beret, /obj/item/clothing/head/collectable/beret)
|
||||
name = "Yann"
|
||||
desc = "Mon dieu! C'est un chien!"
|
||||
speak = list("le woof!", "le bark!", "JAPPE!!")
|
||||
emote_see = list("cowers in fear.", "surrenders.", "plays dead.","looks as though there is a wall in front of him.")
|
||||
valid = 1
|
||||
if(/obj/item/clothing/head/beret, /obj/item/clothing/head/collectable/beret)
|
||||
name = "Yann"
|
||||
desc = "Mon dieu! C'est un chien!"
|
||||
speak = list("le woof!", "le bark!", "JAPPE!!")
|
||||
emote_see = list("cowers in fear.", "surrenders.", "plays dead.","looks as though there is a wall in front of him.")
|
||||
valid = 1
|
||||
|
||||
if(/obj/item/clothing/head/det_hat)
|
||||
name = "Detective [real_name]"
|
||||
desc = "[name] sees through your lies..."
|
||||
emote_see = list("investigates the area.","sniffs around for clues.","searches for scooby snacks.")
|
||||
valid = 1
|
||||
if(/obj/item/clothing/head/det_hat)
|
||||
name = "Detective [real_name]"
|
||||
desc = "[name] sees through your lies..."
|
||||
emote_see = list("investigates the area.","sniffs around for clues.","searches for scooby snacks.")
|
||||
valid = 1
|
||||
|
||||
if(/obj/item/clothing/head/nursehat)
|
||||
name = "Nurse [real_name]"
|
||||
desc = "[name] needs 100cc of beef jerky...STAT!"
|
||||
valid = 1
|
||||
if(/obj/item/clothing/head/nursehat)
|
||||
name = "Nurse [real_name]"
|
||||
desc = "[name] needs 100cc of beef jerky...STAT!"
|
||||
valid = 1
|
||||
|
||||
if(/obj/item/clothing/head/pirate, /obj/item/clothing/head/collectable/pirate)
|
||||
name = "[pick("Ol'","Scurvy","Black","Rum","Gammy","Bloody","Gangrene","Death","Long-John")] [pick("kibble","leg","beard","tooth","poop-deck","Threepwood","Le Chuck","corsair","Silver","Crusoe")]"
|
||||
desc = "Yaarghh!! Thar' be a scurvy dog!"
|
||||
emote_see = list("hunts for treasure.","stares coldly...","gnashes his tiny corgi teeth!")
|
||||
emote_hear = list("growls ferociously!", "snarls.")
|
||||
speak = list("Arrrrgh!!","Grrrrrr!")
|
||||
valid = 1
|
||||
if(/obj/item/clothing/head/pirate, /obj/item/clothing/head/collectable/pirate)
|
||||
name = "[pick("Ol'","Scurvy","Black","Rum","Gammy","Bloody","Gangrene","Death","Long-John")] [pick("kibble","leg","beard","tooth","poop-deck","Threepwood","Le Chuck","corsair","Silver","Crusoe")]"
|
||||
desc = "Yaarghh!! Thar' be a scurvy dog!"
|
||||
emote_see = list("hunts for treasure.","stares coldly...","gnashes his tiny corgi teeth!")
|
||||
emote_hear = list("growls ferociously!", "snarls.")
|
||||
speak = list("Arrrrgh!!","Grrrrrr!")
|
||||
valid = 1
|
||||
|
||||
if(/obj/item/clothing/head/ushanka)
|
||||
name = "[pick("Comrade","Commissar","Glorious Leader")] [real_name]"
|
||||
desc = "A follower of Karl Barx."
|
||||
emote_see = list("contemplates the failings of the capitalist economic model.", "ponders the pros and cons of vangaurdism.")
|
||||
valid = 1
|
||||
if(/obj/item/clothing/head/ushanka)
|
||||
name = "[pick("Comrade","Commissar","Glorious Leader")] [real_name]"
|
||||
desc = "A follower of Karl Barx."
|
||||
emote_see = list("contemplates the failings of the capitalist economic model.", "ponders the pros and cons of vangaurdism.")
|
||||
valid = 1
|
||||
|
||||
if(/obj/item/clothing/head/collectable/police)
|
||||
name = "Officer [real_name]"
|
||||
emote_see = list("drools.","looks for donuts.")
|
||||
desc = "Stop right there criminal scum!"
|
||||
valid = 1
|
||||
if(/obj/item/clothing/head/collectable/police)
|
||||
name = "Officer [real_name]"
|
||||
emote_see = list("drools.","looks for donuts.")
|
||||
desc = "Stop right there criminal scum!"
|
||||
valid = 1
|
||||
|
||||
if(/obj/item/clothing/head/wizard/fake, /obj/item/clothing/head/wizard, /obj/item/clothing/head/collectable/wizard)
|
||||
name = "Grandwizard [real_name]"
|
||||
speak = list("YAP", "Woof!", "Bark!", "AUUUUUU", "EI NATH!")
|
||||
valid = 1
|
||||
if(/obj/item/clothing/head/wizard/fake, /obj/item/clothing/head/wizard, /obj/item/clothing/head/collectable/wizard)
|
||||
name = "Grandwizard [real_name]"
|
||||
speak = list("YAP", "Woof!", "Bark!", "AUUUUUU", "EI NATH!")
|
||||
valid = 1
|
||||
|
||||
if(/obj/item/clothing/head/cardborg)
|
||||
name = "Borgi"
|
||||
speak = list("Ping!","Beep!","Woof!")
|
||||
emote_see = list("goes rogue.", "sniffs out non-humans.")
|
||||
desc = "Result of robotics budget cuts."
|
||||
valid = 1
|
||||
if(/obj/item/clothing/head/cardborg)
|
||||
name = "Borgi"
|
||||
speak = list("Ping!","Beep!","Woof!")
|
||||
emote_see = list("goes rogue.", "sniffs out non-humans.")
|
||||
desc = "Result of robotics budget cuts."
|
||||
valid = 1
|
||||
|
||||
if(/obj/item/weapon/bedsheet)
|
||||
name = "\improper Ghost"
|
||||
speak = list("WoooOOOooo~","AUUUUUUUUUUUUUUUUUU")
|
||||
emote_see = list("stumbles around.", "shivers.")
|
||||
emote_hear = list("howls!","groans.")
|
||||
desc = "Spooky!"
|
||||
valid = 1
|
||||
if(/obj/item/weapon/bedsheet)
|
||||
name = "\improper Ghost"
|
||||
speak = list("WoooOOOooo~","AUUUUUUUUUUUUUUUUUU")
|
||||
emote_see = list("stumbles around.", "shivers.")
|
||||
emote_hear = list("howls!","groans.")
|
||||
desc = "Spooky!"
|
||||
valid = 1
|
||||
|
||||
if(/obj/item/clothing/head/helmet/space/santahat)
|
||||
name = "Santa's Corgi Helper"
|
||||
emote_hear = list("barks christmas songs.", "yaps merrily!")
|
||||
emote_see = list("looks for presents.", "checks his list.")
|
||||
desc = "He's very fond of milk and cookies."
|
||||
valid = 1
|
||||
if(/obj/item/clothing/head/helmet/space/santahat)
|
||||
name = "Santa's Corgi Helper"
|
||||
emote_hear = list("barks christmas songs.", "yaps merrily!")
|
||||
emote_see = list("looks for presents.", "checks his list.")
|
||||
desc = "He's very fond of milk and cookies."
|
||||
valid = 1
|
||||
|
||||
if(/obj/item/clothing/head/soft)
|
||||
name = "Corgi Tech [real_name]"
|
||||
desc = "The reason your yellow gloves have chew-marks."
|
||||
valid = 1
|
||||
if(/obj/item/clothing/head/soft)
|
||||
name = "Corgi Tech [real_name]"
|
||||
desc = "The reason your yellow gloves have chew-marks."
|
||||
valid = 1
|
||||
|
||||
if(/obj/item/clothing/head/hardhat/reindeer)
|
||||
name = "[real_name] the red-nosed Corgi"
|
||||
emote_hear = list("lights the way!", "illuminates.", "yaps!")
|
||||
desc = "He has a very shiny nose."
|
||||
SetLuminosity(1)
|
||||
valid = 1
|
||||
if(/obj/item/clothing/head/hardhat/reindeer)
|
||||
name = "[real_name] the red-nosed Corgi"
|
||||
emote_hear = list("lights the way!", "illuminates.", "yaps!")
|
||||
desc = "He has a very shiny nose."
|
||||
SetLuminosity(1)
|
||||
valid = 1
|
||||
|
||||
if(/obj/item/clothing/head/sombrero)
|
||||
name = "Segnor [real_name]"
|
||||
desc = "You must respect elder [real_name]"
|
||||
valid = 1
|
||||
if(/obj/item/clothing/head/sombrero)
|
||||
name = "Segnor [real_name]"
|
||||
desc = "You must respect elder [real_name]"
|
||||
valid = 1
|
||||
|
||||
if(/obj/item/clothing/head/hopcap)
|
||||
name = "Lieutenant [real_name]"
|
||||
desc = "Can actually be trusted to not run off on his own."
|
||||
valid = 1
|
||||
if(/obj/item/clothing/head/hopcap)
|
||||
name = "Lieutenant [real_name]"
|
||||
desc = "Can actually be trusted to not run off on his own."
|
||||
valid = 1
|
||||
|
||||
if(valid)
|
||||
if(!usr.drop_item())
|
||||
usr << "<span class='notice'>\The [item_to_add] is stuck to your hand, you cannot put it on [src]'s head!</span>"
|
||||
return 0
|
||||
if(health <= 0)
|
||||
usr << "<span class ='notice'>There is merely a dull, lifeless look in [real_name]'s eyes as you put the [item_to_add] on \him.</span>"
|
||||
else if(usr)
|
||||
if(!usr.drop_item())
|
||||
usr << "<span class='notice'>\The [item_to_add] is stuck to your hand, you cannot put it on [src]'s head!</span>"
|
||||
return 0
|
||||
usr.visible_message("[usr] puts [item_to_add] on [real_name]'s head. [src] looks at [usr] and barks once.",
|
||||
"You put [item_to_add] on [real_name]'s head. [src] gives you a peculiar look, then wags \his tail once and barks.",
|
||||
"You hear a friendly-sounding bark.")
|
||||
@@ -411,25 +423,27 @@
|
||||
|
||||
|
||||
/mob/living/simple_animal/corgi/regenerate_icons()
|
||||
overlays = list()
|
||||
overlays.Cut()
|
||||
|
||||
if(inventory_head)
|
||||
var/head_icon_state = inventory_head.icon_state
|
||||
var/image/head_icon
|
||||
if(health <= 0)
|
||||
head_icon_state += "2"
|
||||
|
||||
var/icon/head_icon = image('icons/mob/corgi_head.dmi',head_icon_state)
|
||||
if(head_icon)
|
||||
overlays += head_icon
|
||||
head_icon = image('icons/mob/corgi_head.dmi', icon_state = inventory_head.icon_state, dir = EAST)
|
||||
head_icon.pixel_y = -8
|
||||
head_icon.transform = turn(head_icon.transform, 180)
|
||||
else
|
||||
head_icon = image('icons/mob/corgi_head.dmi', icon_state = inventory_head.icon_state)
|
||||
overlays += head_icon
|
||||
|
||||
if(inventory_back)
|
||||
var/back_icon_state = inventory_back.icon_state
|
||||
var/image/back_icon
|
||||
if(health <= 0)
|
||||
back_icon_state += "2"
|
||||
|
||||
var/icon/back_icon = image('icons/mob/corgi_back.dmi',back_icon_state)
|
||||
if(back_icon)
|
||||
overlays += back_icon
|
||||
back_icon = image('icons/mob/corgi_back.dmi', icon_state = inventory_back.icon_state, dir = EAST)
|
||||
back_icon.pixel_y = -11
|
||||
back_icon.transform = turn(back_icon.transform, 180)
|
||||
else
|
||||
back_icon = image('icons/mob/corgi_back.dmi', icon_state = inventory_back.icon_state)
|
||||
overlays += back_icon
|
||||
|
||||
if(facehugger)
|
||||
if(istype(src, /mob/living/simple_animal/corgi/puppy))
|
||||
|
||||
@@ -81,7 +81,7 @@
|
||||
if(BARTENDER)
|
||||
clothes_s = new /icon('icons/mob/uniform.dmi', "ba_suit_s")
|
||||
clothes_s.Blend(new /icon('icons/mob/feet.dmi', "black"), ICON_UNDERLAY)
|
||||
clothes_s.Blend(new /icon('icons/mob/suit.dmi', "armor"), ICON_OVERLAY)
|
||||
clothes_s.Blend(new /icon('icons/mob/suit.dmi', "armoralt"), ICON_OVERLAY)
|
||||
if(backbag == 2)
|
||||
clothes_s.Blend(new /icon('icons/mob/back.dmi', "backpack"), ICON_OVERLAY)
|
||||
else if(backbag == 3)
|
||||
@@ -260,12 +260,12 @@
|
||||
if(backbag == 3)
|
||||
clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel-cap"), ICON_OVERLAY)
|
||||
if(HOS)
|
||||
clothes_s = new /icon('icons/mob/uniform.dmi', "hosred_s")
|
||||
clothes_s = new /icon('icons/mob/uniform.dmi', "hos_s")
|
||||
clothes_s.Blend(new /icon('icons/mob/feet.dmi', "jackboots"), ICON_UNDERLAY)
|
||||
clothes_s.Blend(new /icon('icons/mob/hands.dmi', "bgloves"), ICON_UNDERLAY)
|
||||
clothes_s.Blend(new /icon('icons/mob/head.dmi', "hoscap"), ICON_OVERLAY)
|
||||
clothes_s.Blend(new /icon('icons/mob/head.dmi', "hosberetblack"), ICON_OVERLAY)
|
||||
clothes_s.Blend(new /icon('icons/mob/eyes.dmi', "sunhud"), ICON_OVERLAY)
|
||||
clothes_s.Blend(new /icon('icons/mob/suit.dmi', "hos"), ICON_OVERLAY)
|
||||
clothes_s.Blend(new /icon('icons/mob/suit.dmi', "hostrench"), ICON_OVERLAY)
|
||||
if(backbag == 2)
|
||||
clothes_s.Blend(new /icon('icons/mob/back.dmi', "securitypack"), ICON_OVERLAY)
|
||||
if(backbag == 3)
|
||||
@@ -293,9 +293,10 @@
|
||||
if(backbag == 3)
|
||||
clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel-norm"), ICON_OVERLAY)
|
||||
if(OFFICER)
|
||||
clothes_s = new /icon('icons/mob/uniform.dmi', "secred_s")
|
||||
clothes_s = new /icon('icons/mob/uniform.dmi', "security_s")
|
||||
clothes_s.Blend(new /icon('icons/mob/feet.dmi', "jackboots"), ICON_UNDERLAY)
|
||||
clothes_s.Blend(new /icon('icons/mob/head.dmi', "helmet"), ICON_OVERLAY)
|
||||
clothes_s.Blend(new /icon('icons/mob/hands.dmi', "bgloves"), ICON_UNDERLAY)
|
||||
clothes_s.Blend(new /icon('icons/mob/head.dmi', "beret_badge"), ICON_OVERLAY)
|
||||
clothes_s.Blend(new /icon('icons/mob/suit.dmi', "armor"), ICON_OVERLAY)
|
||||
if(backbag == 2)
|
||||
clothes_s.Blend(new /icon('icons/mob/back.dmi', "securitypack"), ICON_OVERLAY)
|
||||
|
||||
@@ -55,7 +55,7 @@
|
||||
|
||||
P.loc = user.loc
|
||||
user.put_in_hands(P)
|
||||
user << "<span class='notice'>You take [P] out of the [src].</span>"
|
||||
user << "<span class='notice'>You take [P] out of \the [src].</span>"
|
||||
else
|
||||
user << "<span class='notice'>[src] is empty!</span>"
|
||||
|
||||
|
||||
@@ -679,7 +679,7 @@
|
||||
if(istype(I, /obj/item/weapon/reagent_containers/syringe))
|
||||
var/obj/item/weapon/reagent_containers/syringe/S = I
|
||||
|
||||
user << "You inject the solution into the [src]."
|
||||
user << "You inject the solution into \the [src]."
|
||||
|
||||
if(S.reagents.has_reagent("plasma", 5))
|
||||
|
||||
|
||||
@@ -97,7 +97,7 @@ var/global/list/rad_collectors = list()
|
||||
user << "The controls are now [src.locked ? "locked." : "unlocked."]"
|
||||
else
|
||||
src.locked = 0 //just in case it somehow gets locked
|
||||
user << "<span class='danger'>The controls can only be locked when the [src] is active.</span>"
|
||||
user << "<span class='danger'>The controls can only be locked when \the [src] is active.</span>"
|
||||
else
|
||||
user << "<span class='danger'>Access denied!</span>"
|
||||
return 1
|
||||
|
||||
@@ -63,13 +63,13 @@
|
||||
if(!src.locked)
|
||||
if(src.active==1)
|
||||
src.active = 0
|
||||
user << "You turn off the [src]."
|
||||
user << "You turn off \the [src]."
|
||||
message_admins("Emitter turned off by [key_name(user, user.client)](<A HREF='?_src_=holder;adminmoreinfo=\ref[user]'>?</A>) in ([x],[y],[z] - <A HREF='?_src_=holder;adminplayerobservecoodjump=1;X=[x];Y=[y];Z=[z]'>JMP</a>)",0,1)
|
||||
log_game("Emitter turned off by [user.ckey]([user]) in ([x],[y],[z])")
|
||||
investigate_log("turned <font color='red'>off</font> by [user.key]","singulo")
|
||||
else
|
||||
src.active = 1
|
||||
user << "You turn on the [src]."
|
||||
user << "You turn on \the [src]."
|
||||
src.shot_number = 0
|
||||
src.fire_delay = 100
|
||||
investigate_log("turned <font color='green'>on</font> by [user.key]","singulo")
|
||||
@@ -152,7 +152,7 @@
|
||||
|
||||
if(istype(W, /obj/item/weapon/wrench))
|
||||
if(active)
|
||||
user << "Turn off the [src] first."
|
||||
user << "Turn off \the [src] first."
|
||||
return
|
||||
switch(state)
|
||||
if(0 && !isinspace())
|
||||
@@ -176,7 +176,7 @@
|
||||
if(istype(W, /obj/item/weapon/weldingtool))
|
||||
var/obj/item/weapon/weldingtool/WT = W
|
||||
if(active)
|
||||
user << "Turn off the [src] first."
|
||||
user << "Turn off \the [src] first."
|
||||
return
|
||||
switch(state)
|
||||
if(0)
|
||||
@@ -185,23 +185,23 @@
|
||||
if (WT.remove_fuel(0,user))
|
||||
playsound(src.loc, 'sound/items/Welder2.ogg', 50, 1)
|
||||
user.visible_message("[user.name] starts to weld the [src.name] to the floor.", \
|
||||
"You start to weld the [src] to the floor.", \
|
||||
"You start to weld \the [src] to the floor.", \
|
||||
"You hear welding")
|
||||
if (do_after(user,20))
|
||||
if(!src || !WT.isOn()) return
|
||||
state = 2
|
||||
user << "You weld the [src] to the floor."
|
||||
user << "You weld \the [src] to the floor."
|
||||
connect_to_network()
|
||||
if(2)
|
||||
if (WT.remove_fuel(0,user))
|
||||
playsound(src.loc, 'sound/items/Welder2.ogg', 50, 1)
|
||||
user.visible_message("[user.name] starts to cut the [src.name] free from the floor.", \
|
||||
"You start to cut the [src] free from the floor.", \
|
||||
"You start to cut \the [src] free from the floor.", \
|
||||
"You hear welding")
|
||||
if (do_after(user,20))
|
||||
if(!src || !WT.isOn()) return
|
||||
state = 1
|
||||
user << "You cut the [src] free from the floor."
|
||||
user << "You cut \the [src] free from the floor."
|
||||
disconnect_from_network()
|
||||
return
|
||||
|
||||
@@ -215,7 +215,7 @@
|
||||
user << "The controls are now [src.locked ? "locked." : "unlocked."]"
|
||||
else
|
||||
src.locked = 0 //just in case it somehow gets locked
|
||||
user << "<span class='danger'>The controls can only be locked when the [src] is online.</span>"
|
||||
user << "<span class='danger'>The controls can only be locked when \the [src] is online.</span>"
|
||||
else
|
||||
user << "<span class='danger'>Access denied.</span>"
|
||||
return
|
||||
@@ -227,4 +227,4 @@
|
||||
if(!emagged)
|
||||
locked = 0
|
||||
emagged = 1
|
||||
user.visible_message("[user.name] emags the [src.name].","<span class='danger'>You short out the lock.</span>")
|
||||
user.visible_message("[user.name] emags the [src.name].","<span class='danger'>You short out the lock.</span>")
|
||||
|
||||
@@ -127,7 +127,7 @@ field_generator power level display
|
||||
if (WT.remove_fuel(0,user))
|
||||
playsound(src.loc, 'sound/items/Welder2.ogg', 50, 1)
|
||||
user.visible_message("[user.name] starts to weld the [src.name] to the floor.", \
|
||||
"You start to weld the [src] to the floor.", \
|
||||
"You start to weld \the [src] to the floor.", \
|
||||
"You hear welding")
|
||||
if (do_after(user,20))
|
||||
if(!src || !WT.isOn()) return
|
||||
@@ -139,12 +139,12 @@ field_generator power level display
|
||||
if (WT.remove_fuel(0,user))
|
||||
playsound(src.loc, 'sound/items/Welder2.ogg', 50, 1)
|
||||
user.visible_message("[user.name] starts to cut the [src.name] free from the floor.", \
|
||||
"You start to cut the [src] free from the floor.", \
|
||||
"You start to cut \the [src] free from the floor.", \
|
||||
"You hear welding")
|
||||
if (do_after(user,20))
|
||||
if(!src || !WT.isOn()) return
|
||||
state = 1
|
||||
user << "You cut the [src] free from the floor."
|
||||
user << "You cut \the [src] free from the floor."
|
||||
else
|
||||
return
|
||||
else
|
||||
|
||||
@@ -33,9 +33,10 @@ var/list/solars_list = list()
|
||||
|
||||
//set the control of the panel to a given computer if closer than SOLAR_MAX_DIST
|
||||
/obj/machinery/power/solar/proc/set_control(var/obj/machinery/power/solar_control/SC)
|
||||
if(SC && (get_dist(src, SC) > SOLAR_MAX_DIST))
|
||||
if(!SC || (get_dist(src, SC) > SOLAR_MAX_DIST))
|
||||
return 0
|
||||
control = SC
|
||||
SC.connected_panels |= src
|
||||
return 1
|
||||
|
||||
//set the control of the panel to null and removes it from the control list of the previous control computer if needed
|
||||
@@ -323,12 +324,10 @@ var/list/solars_list = list()
|
||||
var/obj/machinery/power/solar/S = M
|
||||
if(!S.control) //i.e unconnected
|
||||
S.set_control(src)
|
||||
connected_panels |= S
|
||||
else if(istype(M, /obj/machinery/power/tracker))
|
||||
if(!connected_tracker) //if there's already a tracker connected to the computer don't add another
|
||||
var/obj/machinery/power/tracker/T = M
|
||||
if(!T.control) //i.e unconnected
|
||||
connected_tracker = T
|
||||
T.set_control(src)
|
||||
|
||||
//called by the sun controller, update the facing angle (either manually or via tracking) and rotates the panels accordingly
|
||||
@@ -484,10 +483,10 @@ var/list/solars_list = list()
|
||||
set_panels(targetdir)
|
||||
|
||||
if(href_list["search_connected"])
|
||||
src.search_for_connected()
|
||||
search_for_connected()
|
||||
if(connected_tracker && track == 2)
|
||||
connected_tracker.set_angle(sun.angle)
|
||||
src.set_panels(cdir)
|
||||
set_panels(cdir)
|
||||
|
||||
src.updateUsrDialog()
|
||||
return
|
||||
|
||||
@@ -0,0 +1,271 @@
|
||||
//Ported from /vg/station13, which was in turn forked from baystation12;
|
||||
//Please do not bother them with bugs from this port, however, as it has been modified quite a bit.
|
||||
//Modifications include removing the world-ending full supermatter variation, and leaving only the shard.
|
||||
|
||||
#define NITROGEN_RETARDATION_FACTOR 4 //Higher == N2 slows reaction more
|
||||
#define THERMAL_RELEASE_MODIFIER 10 //Higher == less heat released during reaction
|
||||
#define PLASMA_RELEASE_MODIFIER 1500 //Higher == less plasma released by reaction
|
||||
#define OXYGEN_RELEASE_MODIFIER 750 //Higher == less oxygen released at high temperature/power
|
||||
#define REACTION_POWER_MODIFIER 1.1 //Higher == more overall power
|
||||
|
||||
|
||||
//These would be what you would get at point blank, decreases with distance
|
||||
#define DETONATION_RADS 200
|
||||
#define DETONATION_HALLUCINATION 600
|
||||
|
||||
|
||||
#define WARNING_DELAY 30 //seconds between warnings.
|
||||
|
||||
/obj/machinery/power/supermatter_shard
|
||||
name = "supermatter shard"
|
||||
desc = "A strangely translucent and iridescent crystal that looks like it used to be part of a larger structure. <span class='danger'> You get headaches just from looking at it.</span>"
|
||||
icon = 'icons/obj/supermatter.dmi'
|
||||
icon_state = "darkmatter_shard"
|
||||
density = 1
|
||||
anchored = 0
|
||||
luminosity = 4
|
||||
|
||||
|
||||
var/gasefficency = 0.125
|
||||
|
||||
var/base_icon_state = "darkmatter_shard"
|
||||
|
||||
var/damage = 0
|
||||
var/damage_archived = 0
|
||||
var/safe_alert = "Crystalline hyperstructure returning to safe operating levels."
|
||||
var/warning_point = 50
|
||||
var/warning_alert = "Danger! Crystal hyperstructure instability!"
|
||||
var/emergency_point = 500
|
||||
var/emergency_alert = "CRYSTAL DELAMINATION IMMINENT."
|
||||
var/explosion_point = 900
|
||||
|
||||
var/emergency_issued = 0
|
||||
|
||||
var/explosion_power = 8
|
||||
|
||||
var/lastwarning = 0 // Time in 1/10th of seconds since the last sent warning
|
||||
var/power = 0
|
||||
|
||||
var/oxygen = 0 // Moving this up here for easier debugging.
|
||||
|
||||
//Temporary values so that we can optimize this
|
||||
//How much the bullets damage should be multiplied by when it is added to the internal variables
|
||||
var/config_bullet_energy = 2
|
||||
//How much of the power is left after processing is finished?
|
||||
// var/config_power_reduction_per_tick = 0.5
|
||||
//How much hallucination should it produce per unit of power?
|
||||
var/config_hallucination_power = 0.1
|
||||
|
||||
var/obj/item/device/radio/radio
|
||||
|
||||
|
||||
/obj/machinery/power/supermatter_shard/New()
|
||||
. = ..()
|
||||
radio = new(src)
|
||||
radio.listening = 0
|
||||
|
||||
|
||||
/obj/machinery/power/supermatter_shard/Destroy()
|
||||
qdel(radio)
|
||||
. = ..()
|
||||
|
||||
/obj/machinery/power/supermatter_shard/proc/explode()
|
||||
explosion(get_turf(src), explosion_power, explosion_power * 2, explosion_power * 3, explosion_power * 4, 1)
|
||||
qdel(src)
|
||||
return
|
||||
|
||||
/obj/machinery/power/supermatter_shard/process()
|
||||
var/turf/L = loc
|
||||
|
||||
if(isnull(L)) // We have a null turf...something is wrong, stop processing this entity.
|
||||
return PROCESS_KILL
|
||||
|
||||
if(!istype(L)) //We are in a crate or somewhere that isn't turf, if we return to turf resume processing but for now.
|
||||
return //Yeah just stop.
|
||||
|
||||
if(istype(L, /turf/space)) // Stop processing this stuff if we've been ejected.
|
||||
return
|
||||
|
||||
if(damage > warning_point) // while the core is still damaged and it's still worth noting its status
|
||||
if((world.timeofday - lastwarning) / 10 >= WARNING_DELAY)
|
||||
var/stability = num2text(round((damage / explosion_point) * 100))
|
||||
|
||||
if(damage > emergency_point)
|
||||
radio.talk_into(src, "[emergency_alert] Instability: [stability]%")
|
||||
lastwarning = world.timeofday
|
||||
|
||||
else if(damage >= damage_archived) // The damage is still going up
|
||||
radio.talk_into(src, "[warning_alert] Instability: [stability]%")
|
||||
lastwarning = world.timeofday - 150
|
||||
|
||||
else // Phew, we're safe
|
||||
radio.talk_into(src, "[safe_alert]")
|
||||
lastwarning = world.timeofday
|
||||
|
||||
if(damage > explosion_point)
|
||||
for(var/mob/living/mob in living_mob_list)
|
||||
if(istype(mob, /mob/living/carbon/human))
|
||||
//Hilariously enough, running into a closet should make you get hit the hardest.
|
||||
var/mob/living/carbon/human/H = mob
|
||||
H.hallucination += max(50, min(300, DETONATION_HALLUCINATION * sqrt(1 / (get_dist(mob, src) + 1)) ) )
|
||||
var/rads = DETONATION_RADS * sqrt( 1 / (get_dist(mob, src) + 1) )
|
||||
mob.apply_effect(rads, IRRADIATE)
|
||||
|
||||
explode()
|
||||
|
||||
//Ok, get the air from the turf
|
||||
var/datum/gas_mixture/env = L.return_air()
|
||||
|
||||
//Remove gas from surrounding area
|
||||
var/datum/gas_mixture/removed = env.remove(gasefficency * env.total_moles())
|
||||
|
||||
if(!removed || !removed.total_moles())
|
||||
damage += max((power-1600)/10, 0)
|
||||
power = min(power, 1600)
|
||||
return 1
|
||||
|
||||
if (!removed)
|
||||
return 1
|
||||
|
||||
damage_archived = damage
|
||||
damage = max( damage + ( (removed.temperature - 800) / 150 ) , 0 )
|
||||
//Ok, 100% oxygen atmosphere = best reaction
|
||||
//Maxes out at 100% oxygen pressure
|
||||
oxygen = max(min((removed.oxygen - (removed.nitrogen * NITROGEN_RETARDATION_FACTOR)) / MOLES_CELLSTANDARD, 1), 0)
|
||||
|
||||
var/temp_factor = 100
|
||||
|
||||
if(oxygen > 0.8)
|
||||
// with a perfect gas mix, make the power less based on heat
|
||||
icon_state = "[base_icon_state]_glow"
|
||||
else
|
||||
// in normal mode, base the produced energy around the heat
|
||||
temp_factor = 60
|
||||
icon_state = base_icon_state
|
||||
|
||||
power = max( (removed.temperature * temp_factor / T0C) * oxygen + power, 0) //Total laser power plus an overload
|
||||
|
||||
//We've generated power, now let's transfer it to the collectors for storing/usage
|
||||
transfer_energy()
|
||||
|
||||
var/device_energy = power * REACTION_POWER_MODIFIER
|
||||
|
||||
//To figure out how much temperature to add each tick, consider that at one atmosphere's worth
|
||||
//of pure oxygen, with all four lasers firing at standard energy and no N2 present, at room temperature
|
||||
//that the device energy is around 2140. At that stage, we don't want too much heat to be put out
|
||||
//Since the core is effectively "cold"
|
||||
|
||||
//Also keep in mind we are only adding this temperature to (efficiency)% of the one tile the rock
|
||||
//is on. An increase of 4*C @ 25% efficiency here results in an increase of 1*C / (#tilesincore) overall.
|
||||
removed.temperature += (device_energy / THERMAL_RELEASE_MODIFIER)
|
||||
|
||||
removed.temperature = max(0, min(removed.temperature, 2500))
|
||||
|
||||
//Calculate how much gas to release
|
||||
removed.toxins += max(device_energy / PLASMA_RELEASE_MODIFIER, 0)
|
||||
|
||||
removed.oxygen += max((device_energy + removed.temperature - T0C) / OXYGEN_RELEASE_MODIFIER, 0)
|
||||
|
||||
env.merge(removed)
|
||||
|
||||
for(var/mob/living/carbon/human/l in view(src, min(7, round(power ** 0.25)))) // If they can see it without mesons on. Bad on them.
|
||||
if(!istype(l.glasses, /obj/item/clothing/glasses/meson))
|
||||
l.hallucination = max(0, min(200, l.hallucination + power * config_hallucination_power * sqrt( 1 / max(1,get_dist(l, src)) ) ) )
|
||||
|
||||
for(var/mob/living/l in range(src, round((power / 100) ** 0.25)))
|
||||
var/rads = (power / 10) * sqrt( 1 / get_dist(l, src) )
|
||||
l.apply_effect(rads, IRRADIATE)
|
||||
|
||||
power -= (power/500)**3
|
||||
|
||||
return 1
|
||||
|
||||
|
||||
/obj/machinery/power/supermatter_shard/bullet_act(var/obj/item/projectile/Proj)
|
||||
var/turf/L = loc
|
||||
if(!istype(L)) // We don't run process() when we are in space
|
||||
return 0 // This stops people from being able to really power up the supermatter
|
||||
// Then bring it inside to explode instantly upon landing on a valid turf.
|
||||
|
||||
|
||||
if(Proj.flag != "bullet")
|
||||
power += Proj.damage * config_bullet_energy
|
||||
else
|
||||
damage += Proj.damage * config_bullet_energy
|
||||
return 0
|
||||
|
||||
|
||||
/obj/machinery/power/supermatter_shard/attack_paw(mob/user as mob)
|
||||
return attack_hand(user)
|
||||
|
||||
|
||||
/obj/machinery/power/supermatter_shard/attack_robot(mob/user as mob)
|
||||
if(Adjacent(user))
|
||||
return attack_hand(user)
|
||||
else
|
||||
user << "<span class = \"warning\">You attempt to interface with the control circuits but find they are not connected to your network. Maybe in a future firmware update.</span>"
|
||||
return
|
||||
|
||||
/obj/machinery/power/supermatter_shard/attack_ai(mob/user as mob)
|
||||
user << "<span class = \"warning\">You attempt to interface with the control circuits but find they are not connected to your network. Maybe in a future firmware update.</span>"
|
||||
|
||||
/obj/machinery/power/supermatter_shard/attack_hand(mob/user as mob)
|
||||
user.visible_message("<span class=\"warning\">\The [user] reaches out and touches \the [src], inducing a resonance... \his body starts to glow and bursts into flames before flashing into ash.</span>",\
|
||||
"<span class=\"danger\">You reach out and touch \the [src]. Everything starts burning and all you can hear is ringing. Your last thought is \"That was not a wise decision.\"</span>",\
|
||||
"<span class=\"warning\">You hear an unearthly noise as a wave of heat washes over you.</span>")
|
||||
|
||||
playsound(get_turf(src), 'sound/effects/supermatter.ogg', 50, 1)
|
||||
|
||||
Consume(user)
|
||||
|
||||
/obj/machinery/power/supermatter_shard/proc/transfer_energy()
|
||||
for(var/obj/machinery/power/rad_collector/R in rad_collectors)
|
||||
if(get_dist(R, src) <= 15) // Better than using orange() every process
|
||||
R.receive_pulse(power)
|
||||
return
|
||||
|
||||
/obj/machinery/power/supermatter_shard/attackby(obj/item/weapon/W as obj, mob/living/user as mob)
|
||||
if(user.drop_item(W))
|
||||
Consume(W)
|
||||
user.visible_message("<span class=\"warning\">As [user] touches \the [src] with \a [W], silence fills the room...</span>",\
|
||||
"<span class=\"danger\">You touch \the [src] with \the [W], and everything suddenly goes silent.\"</span>\n<span class=\"notice\">\The [W] flashes into dust as you flinch away from \the [src].</span>",\
|
||||
"<span class=\"warning\">Everything suddenly goes silent.</span>")
|
||||
|
||||
playsound(get_turf(src), 'sound/effects/supermatter.ogg', 50, 1)
|
||||
|
||||
user.apply_effect(150, IRRADIATE)
|
||||
|
||||
|
||||
/obj/machinery/power/supermatter_shard/Bumped(atom/AM as mob|obj)
|
||||
if(istype(AM, /mob/living))
|
||||
AM.visible_message("<span class=\"warning\">\The [AM] slams into \the [src] inducing a resonance... \his body starts to glow and catch flame before flashing into ash.</span>",\
|
||||
"<span class=\"danger\">You slam into \the [src] as your ears are filled with unearthly ringing. Your last thought is \"Oh, fuck.\"</span>",\
|
||||
"<span class=\"warning\">You hear an unearthly noise as a wave of heat washes over you.</span>")
|
||||
else
|
||||
AM.visible_message("<span class=\"warning\">\The [AM] smacks into \the [src] and rapidly flashes to ash.</span>",\
|
||||
"<span class=\"warning\">You hear a loud crack as you are washed with a wave of heat.</span>")
|
||||
|
||||
playsound(get_turf(src), 'sound/effects/supermatter.ogg', 50, 1)
|
||||
|
||||
Consume(AM)
|
||||
|
||||
|
||||
/obj/machinery/power/supermatter_shard/proc/Consume(atom/movable/AM)
|
||||
if(istype(AM, /mob/living))
|
||||
var/mob/living/user = AM
|
||||
user.dust()
|
||||
power += 200
|
||||
else
|
||||
qdel(AM)
|
||||
|
||||
power += 200
|
||||
|
||||
//Some poor sod got eaten, go ahead and irradiate people nearby.
|
||||
for(var/mob/living/L in range(10))
|
||||
var/rads = 500 * sqrt( 1 / (get_dist(L, src) + 1) )
|
||||
L.apply_effect(rads, IRRADIATE)
|
||||
if(L in view())
|
||||
L.show_message("<span class=\"warning\">As \the [src] slowly stops resonating, you find your skin covered in new radiation burns.</span>", 1,\
|
||||
"<span class=\"warning\">The unearthly ringing subsides and you notice you have new radiation burns.</span>", 2)
|
||||
else
|
||||
L.show_message("<span class=\"warning\">You hear an uneartly ringing and notice your skin is covered in fresh radiation burns.</span>", 2)
|
||||
@@ -0,0 +1,7 @@
|
||||
/datum/supply_packs/engineering/engine/supermatter_shard
|
||||
name = "Supermatter Shard Crate"
|
||||
contains = list(/obj/machinery/power/supermatter_shard)
|
||||
cost = 100 //So cargo thinks twice before killing themselves with it
|
||||
containertype = /obj/structure/closet/crate/secure
|
||||
containername = "supermatter shard crate"
|
||||
access = access_ce
|
||||
@@ -27,9 +27,10 @@
|
||||
|
||||
//set the control of the tracker to a given computer if closer than SOLAR_MAX_DIST
|
||||
/obj/machinery/power/tracker/proc/set_control(var/obj/machinery/power/solar_control/SC)
|
||||
if(SC && (get_dist(src, SC) > SOLAR_MAX_DIST))
|
||||
if(!SC || (get_dist(src, SC) > SOLAR_MAX_DIST))
|
||||
return 0
|
||||
control = SC
|
||||
SC.connected_tracker = src
|
||||
return 1
|
||||
|
||||
//set the control of the tracker to null and removes it from the previous control computer if needed
|
||||
|
||||
@@ -60,10 +60,10 @@
|
||||
playsound(src, 'sound/items/Ratchet.ogg', 50, 1)
|
||||
if(anchored)
|
||||
anchored = 0
|
||||
user << "<span class = 'caution'> The [src] can now be moved.</span>"
|
||||
user << "<span class = 'caution'> \The [src] can now be moved.</span>"
|
||||
else if(!anchored)
|
||||
anchored = 1
|
||||
user << "<span class = 'caution'> The [src] is now secured.</span>"
|
||||
user << "<span class = 'caution'> \The [src] is now secured.</span>"
|
||||
if(istype(W, /obj/item/weapon/screwdriver))
|
||||
if(stage == 0)
|
||||
playsound(src, 'sound/items/Screwdriver.ogg', 50, 1)
|
||||
|
||||
Reference in New Issue
Block a user