Merge pull request #860 from Erthilo/TGUpdates

TG Updates up to r3000
This commit is contained in:
SkyMarshal
2012-04-16 16:32:08 -07:00
61 changed files with 636 additions and 160 deletions
+3 -1
View File
@@ -447,7 +447,7 @@
#include "code\game\jobs\jobs.dm"
#include "code\game\jobs\whitelist.dm"
#include "code\game\jobs\job\assistant.dm"
#include "code\game\jobs\job\captian.dm"
#include "code\game\jobs\job\captain.dm"
#include "code\game\jobs\job\civilian.dm"
#include "code\game\jobs\job\civilian_chaplain.dm"
#include "code\game\jobs\job\engineering.dm"
@@ -462,6 +462,7 @@
#include "code\game\machinery\alarm.dm"
#include "code\game\machinery\atmo_control.dm"
#include "code\game\machinery\autolathe.dm"
#include "code\game\machinery\Beacon.dm"
#include "code\game\machinery\biogenerator.dm"
#include "code\game\machinery\camera.dm"
#include "code\game\machinery\camera_circuit.dm"
@@ -995,6 +996,7 @@
#include "code\modules\mob\organ\organ_internal.dm"
#include "code\modules\mob\organ\pain.dm"
#include "code\modules\mob\simple_animal\cat.dm"
#include "code\modules\mob\simple_animal\constructs.dm"
#include "code\modules\mob\simple_animal\corgi.dm"
#include "code\modules\mob\simple_animal\crab.dm"
#include "code\modules\mob\simple_animal\life.dm"
-1
View File
@@ -169,7 +169,6 @@ obj
src.m_flag = 1
if ((A != src.loc && A && A.z == src.z))
src.last_move = get_dir(A, src.loc)
src.moved_recently = 1
return
/*
+27
View File
@@ -40,6 +40,33 @@
var/wires = 15
var/obj/item/weapon/coin/coin
var/charge_type
/*
/obj/machinery/vending/[vendors name here] // --vending machine template :)
name = ""
desc = ""
icon = ''
icon_state = ""
product_paths = ""
product_amounts = ""
vend_delay = 15
product_hidden = ""
product_hideamt = ""
product_slogans = ""
product_ads = ""
*/
/*
/obj/machinery/vending/atmospherics //Commenting this out until someone ponies up some actual working, broken, and unpowered sprites - Quarxink
name = "Tank Vendor"
desc = "A vendor with a wide variety of masks and gas tanks."
icon = 'objects.dmi'
icon_state = "dispenser"
product_paths = "/obj/item/weapon/tank/oxygen;/obj/item/weapon/tank/plasma;/obj/item/weapon/tank/emergency_oxygen;/obj/item/weapon/tank/emergency_oxygen/engi;/obj/item/clothing/mask/breath"
product_amounts = "10;10;10;5;25"
vend_delay = 0
*/
/obj/machinery/vending/boozeomat
name = "Booze-O-Mat"
+11
View File
@@ -936,6 +936,16 @@
var/text_underline = 0
var/text_break = 0
/obj/item/weapon/pen/blue
desc = "It's a normal blue ink pen."
icon_state = "pen_blue"
text_color = "#00000F"
/obj/item/weapon/pen/red
desc = "It's a normal red ink pen."
icon_state = "pen_red"
text_color = "#FF0000"
/obj/item/weapon/pen/multi
desc = "It's a cool looking pen. Lots of colors!"
name = "multicolor pen"
@@ -1591,6 +1601,7 @@
sides = 12
icon_state = "d20"
item_state = "dice"
/obj/item/weapon/pai_cable
desc = "A flexible coated cable with a universal jack on one end."
desc = "Some spacey cable."
+1 -1
View File
@@ -291,4 +291,4 @@ datum/signal
else
. = "signal = {source = '[source]' ()\n"
for (var/i in data)
. += "data\[\"[i]\"\] = \"[data[i]]\"\n"
. += "data\[\"[i]\"\] = \"[data[i]]\"\n"
+1 -1
View File
@@ -170,7 +170,6 @@
return 1
if(special_action())
return 1
return 0
proc/consume_air()
@@ -184,6 +183,7 @@
if(temperature > T0C+200)
health -= 0.01 * temperature
update()
proc/expand(var/turf/T = null)
if(!prob(health)) return//TODO: Change this to prob(health + o2 mols or such)
if(!T)
+1 -1
View File
@@ -237,7 +237,7 @@ datum/objective/block
datum/objective/escape
explanation_text = "Escape on the shuttle alive."
explanation_text = "Escape on the shuttle or an escape pod alive."
check_completion()
+18 -2
View File
@@ -50,7 +50,7 @@
if ((usr.contents.Find(src) || (in_range(src,usr) && istype(src.loc, /turf))))
usr.machine = src
if(href_list["spell_choice"])
if(src.uses >= 1 && href_list["spell_choice"] != 14)
if(src.uses >= 1 && href_list["spell_choice"] != 16)
src.uses--
if(spell_type == "verb")
switch(href_list["spell_choice"])
@@ -125,49 +125,64 @@
if(!already_knows)
switch(href_list["spell_choice"])
if ("1")
feedback_add_details("wizard_spell_learned","MM") //please do not change the abbreviation to keep data processing consistent. Add a unique id to any new spells
usr.spell_list += new /obj/effect/proc_holder/spell/targeted/projectile/magic_missile(usr)
src.temp = "This spell fires several, slow moving, magic projectiles at nearby targets. If they hit a target, it is paralyzed and takes minor damage."
if ("2")
feedback_add_details("wizard_spell_learned","FB") //please do not change the abbreviation to keep data processing consistent. Add a unique id to any new spells
usr.spell_list += new /obj/effect/proc_holder/spell/targeted/projectile/fireball(usr)
src.temp = "This spell fires a fireball at a target and does not require wizard garb. Be careful not to fire it at people that are standing next to you."
// if ("3")
// usr.spell_list += new /obj/effect/proc_holder/spell/targeted/inflict_handler/disintegrate(usr)
// src.temp = "This spell instantly kills somebody adjacent to you with the vilest of magick. It has a long cooldown."
src.temp = "This spell instantly kills somebody adjacent to you with the vilest of magick. It has a long cooldown."
if ("4")
feedback_add_details("wizard_spell_learned","DT") //please do not change the abbreviation to keep data processing consistent. Add a unique id to any new spells
usr.spell_list += new /obj/effect/proc_holder/spell/targeted/emplosion/disable_tech(usr)
src.temp = "This spell disables all weapons, cameras and most other technology in range."
if ("5")
feedback_add_details("wizard_spell_learned","SM") //please do not change the abbreviation to keep data processing consistent. Add a unique id to any new spells
usr.spell_list += new /obj/effect/proc_holder/spell/targeted/smoke(usr)
src.temp = "This spell spawns a cloud of choking smoke at your location and does not require wizard garb."
if ("6")
feedback_add_details("wizard_spell_learned","BD") //please do not change the abbreviation to keep data processing consistent. Add a unique id to any new spells
usr.spell_list += new /obj/effect/proc_holder/spell/targeted/trigger/blind(usr)
src.temp = "This spell temporarly blinds a single person and does not require wizard garb."
if ("7")
feedback_add_details("wizard_spell_learned","MT") //please do not change the abbreviation to keep data processing consistent. Add a unique id to any new spells
usr.spell_list += new /obj/effect/proc_holder/spell/targeted/mind_transfer(usr)
src.temp = "This spell allows the user to switch bodies with a target. Careful to not lose your memory in the process."
if ("8")
feedback_add_details("wizard_spell_learned","FW") //please do not change the abbreviation to keep data processing consistent. Add a unique id to any new spells
usr.spell_list += new /obj/effect/proc_holder/spell/aoe_turf/conjure/forcewall(usr)
src.temp = "This spell creates an unbreakable wall that lasts for 30 seconds and does not need wizard garb."
if ("9")
feedback_add_details("wizard_spell_learned","BL") //please do not change the abbreviation to keep data processing consistent. Add a unique id to any new spells
usr.spell_list += new /obj/effect/proc_holder/spell/targeted/turf_teleport/blink(usr)
src.temp = "This spell randomly teleports you a short distance. Useful for evasion or getting into areas if you have patience."
if ("10")
feedback_add_details("wizard_spell_learned","TP") //please do not change the abbreviation to keep data processing consistent. Add a unique id to any new spells
usr.spell_list += new /obj/effect/proc_holder/spell/targeted/area_teleport/teleport(usr)
src.temp = "This spell teleports you to a type of area of your selection. Very useful if you are in danger, but has a decent cooldown, and is unpredictable."
if ("11")
feedback_add_details("wizard_spell_learned","MU") //please do not change the abbreviation to keep data processing consistent. Add a unique id to any new spells
usr.spell_list += new /obj/effect/proc_holder/spell/targeted/genetic/mutate(usr)
src.temp = "This spell causes you to turn into a hulk and gain telekinesis for a short while."
if ("12")
feedback_add_details("wizard_spell_learned","EJ") //please do not change the abbreviation to keep data processing consistent. Add a unique id to any new spells
usr.spell_list += new /obj/effect/proc_holder/spell/targeted/ethereal_jaunt(usr)
src.temp = "This spell creates your ethereal form, temporarily making you invisible and able to pass through walls."
if ("13")
feedback_add_details("wizard_spell_learned","KN") //please do not change the abbreviation to keep data processing consistent. Add a unique id to any new spells
usr.spell_list += new /obj/effect/proc_holder/spell/aoe_turf/knock(usr)
src.temp = "This spell opens nearby doors and does not require wizard garb."
if ("14")
feedback_add_details("wizard_spell_learned","ST") //please do not change the abbreviation to keep data processing consistent. Add a unique id to any new spells
new /obj/item/weapon/gun/energy/staff(get_turf(usr))
src.temp = "An artefact that spits bolts of coruscating energy which cause the target's very form to reshape itself"
src.max_uses--
if ("15")
feedback_add_details("wizard_spell_learned","SS") //please do not change the abbreviation to keep data processing consistent. Add a unique id to any new spells
new /obj/item/weapon/storage/belt/soulstone/full(get_turf(usr))
src.temp = "Soul Stone Shards are ancient tools capable of capturing and harnessing the spirits of the dead and dying"
src.max_uses--
@@ -177,6 +192,7 @@
src.uses = src.max_uses
usr.spellremove(usr,spell_type)
src.temp = "All spells have been removed. You may now memorize a new set of spells."
feedback_add_details("wizard_spell_learned","UM") //please do not change the abbreviation to keep data processing consistent. Add a unique id to any new spells
else
src.temp = "You may only re-memorize spells whilst located inside the wizard sanctuary."
else
@@ -362,4 +378,4 @@
del(src.master)
del(src)
return
return
@@ -1,52 +1,52 @@
/datum/job/captain
title = "Captain"
flag = CAPTAIN
department_flag = ENGSEC
faction = "Station"
total_positions = 1
spawn_positions = 1
supervisors = "Nanotrasen officials and Space law"
equip(var/mob/living/carbon/human/H)
if(!H) return 0
H.equip_if_possible(new /obj/item/device/radio/headset/heads/captain(H), H.slot_ears)
H.equip_if_possible(new /obj/item/weapon/storage/backpack(H), H.slot_back)
H.equip_if_possible(new /obj/item/clothing/under/rank/captain(H), H.slot_w_uniform)
H.equip_if_possible(new /obj/item/device/pda/captain(H), H.slot_belt)
H.equip_if_possible(new /obj/item/clothing/shoes/brown(H), H.slot_shoes)
H.equip_if_possible(new /obj/item/clothing/head/caphat(H), H.slot_head)
H.equip_if_possible(new /obj/item/clothing/glasses/sunglasses(H), H.slot_glasses)
H.equip_if_possible(new /obj/item/weapon/storage/id_kit(H), H.slot_in_backpack)
var/datum/organ/external/O = H.organs[pick(H.organs)]
var/obj/item/weapon/implant/loyalty/L = new/obj/item/weapon/implant/loyalty(O)
O.implant += L
L.imp_in = H
L.implanted = 1
world << "<b>[H.real_name] is the captain!</b>"
return 1
/datum/job/hop
title = "Head of Personnel"
flag = HOP
department_flag = CIVILIAN
faction = "Station"
total_positions = 1
spawn_positions = 1
supervisors = "the captain"
equip(var/mob/living/carbon/human/H)
if(!H) return 0
H.equip_if_possible(new /obj/item/device/radio/headset/heads/hop(H), H.slot_ears)
H.equip_if_possible(new /obj/item/weapon/storage/backpack(H), H.slot_back)
H.equip_if_possible(new /obj/item/clothing/under/rank/head_of_personnel(H), H.slot_w_uniform)
H.equip_if_possible(new /obj/item/clothing/shoes/brown(H), H.slot_shoes)
H.equip_if_possible(new /obj/item/device/pda/heads/hop(H), H.slot_belt)
H.equip_if_possible(new /obj/item/clothing/suit/armor/vest(H), H.slot_wear_suit)
H.equip_if_possible(new /obj/item/clothing/head/helmet(H), H.slot_head)
H.equip_if_possible(new /obj/item/weapon/storage/id_kit(H), H.slot_in_backpack)
H.equip_if_possible(new /obj/item/clothing/gloves/blue(H), H.slot_gloves)
return 1
/datum/job/captain
title = "Captain"
flag = CAPTAIN
department_flag = ENGSEC
faction = "Station"
total_positions = 1
spawn_positions = 1
supervisors = "Nanotrasen officials and Space law"
equip(var/mob/living/carbon/human/H)
if(!H) return 0
H.equip_if_possible(new /obj/item/device/radio/headset/heads/captain(H), H.slot_ears)
H.equip_if_possible(new /obj/item/weapon/storage/backpack(H), H.slot_back)
H.equip_if_possible(new /obj/item/clothing/under/rank/captain(H), H.slot_w_uniform)
H.equip_if_possible(new /obj/item/device/pda/captain(H), H.slot_belt)
H.equip_if_possible(new /obj/item/clothing/shoes/brown(H), H.slot_shoes)
H.equip_if_possible(new /obj/item/clothing/head/caphat(H), H.slot_head)
H.equip_if_possible(new /obj/item/clothing/glasses/sunglasses(H), H.slot_glasses)
H.equip_if_possible(new /obj/item/weapon/storage/id_kit(H), H.slot_in_backpack)
var/datum/organ/external/O = H.organs[pick(H.organs)]
var/obj/item/weapon/implant/loyalty/L = new/obj/item/weapon/implant/loyalty(O)
O.implant += L
L.imp_in = H
L.implanted = 1
world << "<b>[H.real_name] is the captain!</b>"
return 1
/datum/job/hop
title = "Head of Personnel"
flag = HOP
department_flag = CIVILIAN
faction = "Station"
total_positions = 1
spawn_positions = 1
supervisors = "the captain"
equip(var/mob/living/carbon/human/H)
if(!H) return 0
H.equip_if_possible(new /obj/item/device/radio/headset/heads/hop(H), H.slot_ears)
H.equip_if_possible(new /obj/item/weapon/storage/backpack(H), H.slot_back)
H.equip_if_possible(new /obj/item/clothing/under/rank/head_of_personnel(H), H.slot_w_uniform)
H.equip_if_possible(new /obj/item/clothing/shoes/brown(H), H.slot_shoes)
H.equip_if_possible(new /obj/item/device/pda/heads/hop(H), H.slot_belt)
H.equip_if_possible(new /obj/item/clothing/suit/armor/vest(H), H.slot_wear_suit)
H.equip_if_possible(new /obj/item/clothing/head/helmet(H), H.slot_head)
H.equip_if_possible(new /obj/item/weapon/storage/id_kit(H), H.slot_in_backpack)
H.equip_if_possible(new /obj/item/clothing/gloves/blue(H), H.slot_gloves)
return 1
+1 -1
View File
@@ -49,7 +49,7 @@
H.equip_if_possible(new /obj/item/clothing/under/rank/warden(H), H.slot_w_uniform)
H.equip_if_possible(new /obj/item/clothing/shoes/jackboots(H), H.slot_shoes)
H.equip_if_possible(new /obj/item/device/pda/security(H), H.slot_belt)
H.equip_if_possible(new /obj/item/clothing/suit/armor/vest(H), H.slot_wear_suit)
H.equip_if_possible(new /obj/item/clothing/suit/armor/vest/warden(H), H.slot_wear_suit)
H.equip_if_possible(new /obj/item/clothing/head/helmet/warden(H), H.slot_head)
H.equip_if_possible(new /obj/item/clothing/gloves/red(H), H.slot_gloves)
H.equip_if_possible(new /obj/item/clothing/glasses/sunglasses/sechud(H), H.slot_glasses)
+1 -1
View File
@@ -20,7 +20,7 @@
faction = "Station"
total_positions = 0
spawn_positions = 1
supervisors = "your laws and the AI" //Nodrak
equip(var/mob/living/carbon/human/H)
if(!H) return 0
+55
View File
@@ -0,0 +1,55 @@
/obj/machinery/bluespace_beacon
icon = 'objects.dmi'
icon_state = "floor_beaconf"
name = "Bluespace Gigabeacon"
desc = "A device that draws power from bluespace and creates a permanent tracking beacon."
level = 1 // underfloor
layer = 2.5
anchored = 1
use_power = 1
idle_power_usage = 0
var/obj/item/device/radio/beacon/Beacon
New()
..()
var/turf/T = loc
Beacon = new /obj/item/device/radio/beacon
Beacon.invisibility = 100
Beacon.loc = T
hide(T.intact)
Del()
if(Beacon)
del(Beacon)
..()
// update the invisibility and icon
hide(var/intact)
invisibility = intact ? 101 : 0
updateicon()
// update the icon_state
proc/updateicon()
var/state="floor_beacon"
if(invisibility)
icon_state = "[state]f"
else
icon_state = "[state]"
process()
if(!Beacon)
var/turf/T = loc
Beacon = new /obj/item/device/radio/beacon
Beacon.invisibility = 100
Beacon.loc = T
if(Beacon)
if(Beacon.loc != loc)
Beacon.loc = loc
updateicon()
+5 -5
View File
@@ -565,13 +565,13 @@
process_bot()
sleep(2)
process_bot()
sleep(2)
process_bot()
sleep(2)
process_bot()
if(2)
process_bot()
spawn(2)
process_bot()
sleep(2)
process_bot()
sleep(2)
spawn(4)
process_bot()
if(3)
process_bot()
+1 -1
View File
@@ -51,7 +51,7 @@
if(!charging || (stat & (BROKEN|NOPOWER)) )
return
var/added = charging.give(50)
var/added = charging.give(500)
use_power(added / CELLRATE)
updateicon()
+3 -3
View File
@@ -7,10 +7,10 @@
var/name_part1
var/name_part2
name_action = pick("Defeat ", "Annihilate ", "Save ", "Strike ", "Stop ", "Destroy ", "Robust ", "Romance ", "Rape ", "Pwn ", "Own ")
name_action = pick("Defeat ", "Annihilate ", "Save ", "Strike ", "Stop ", "Destroy ", "Robust ", "Romance ", "Pwn ", "Own ")
name_part1 = pick("the Automatic ", "Farmer ", "Lord ", "Professor ", "the Cuban ", "the Evil ", "the Dread King ", "the Space ", "Lord ", "the Faggot ", "Duke ", "General ")
name_part2 = pick("Melonoid", "Murdertron", "Sorcerer", "Ruin", "Jeff", "Ectoplasm", "Crushulon", "Uhangoid", "Vhakoid", "Peteoid", "Metroid", "Griefer", "ERPer", "Homosexual", "Lizard Man", "Unicorn")
name_part1 = pick("the Automatic ", "Farmer ", "Lord ", "Professor ", "the Cuban ", "the Evil ", "the Dread King ", "the Space ", "Lord ", "the Great ", "Duke ", "General ")
name_part2 = pick("Melonoid", "Murdertron", "Sorcerer", "Ruin", "Jeff", "Ectoplasm", "Crushulon", "Uhangoid", "Vhakoid", "Peteoid", "Metroid", "Griefer", "ERPer", "Lizard Man", "Unicorn")
src.enemy_name = dd_replacetext((name_part1 + name_part2), "the ", "")
src.name = (name_action + name_part1 + name_part2)
+1 -1
View File
@@ -163,7 +163,7 @@ to destroy them and players will be able to make replacements.
build_path = "/obj/machinery/r_n_d/destructive_analyzer"
board_type = "machine"
origin_tech = "magnets=2;engineering=2;programming=2"
frame_desc = "Requires 2 Scanning Modules, 1 Manipulator, and 1 Micro-Laser."
frame_desc = "Requires 1 Scanning Module, 1 Manipulator, and 1 Micro-Laser."
req_components = list(
"/obj/item/weapon/stock_parts/scanning_module" = 1,
"/obj/item/weapon/stock_parts/manipulator" = 1,
+2 -1
View File
@@ -70,6 +70,7 @@ Airlock index -> wire color are { 9, 4, 6, 7, 5, 8, 1, 2, 3 }.
var
aiControlDisabled = 0 //If 1, AI control is disabled until the AI hacks back in and disables the lock. If 2, the AI has bypassed the lock. If -1, the control is enabled but the AI had bypassed it earlier, so if it is disabled again the AI would have no trouble getting back in.
hackProof = 0 // if 1, this door can't be hacked by the AI
synDoorHacked = 0 // Has it been hacked? bool 1 = yes / 0 = no
synHacking = 0 // Is hack in process y/n?
secondsMainPowerLost = 0 //The number of seconds until power is restored.
@@ -812,7 +813,7 @@ Airlock index -> wire color are { 9, 4, 6, 7, 5, 8, 1, 2, 3 }.
canAIHack()
return ((src.aiControlDisabled==1) && (!src.isAllPowerCut()));
return ((src.aiControlDisabled==1) && (!hackProof) && (!src.isAllPowerCut()));
canSynControl()
+10
View File
@@ -113,6 +113,10 @@
"Misc"=list(/obj/item/mecha_parts/mecha_tracking)
)
New()
..()
component_parts = list()
@@ -408,6 +412,12 @@
proc/sync(silent=null)
if(queue.len)
if(!silent)
temp = "Error. Please clear processing queue before updating!"
src.updateUsrDialog()
return
if(!silent)
temp = "Updating local R&D database..."
src.updateUsrDialog()
+6
View File
@@ -20,6 +20,9 @@
for(var/obj/item/I in src)
I.loc = src.loc
for(var/obj/mecha/working/ripley/deathripley/I in src)
I.loc = src.loc
for(var/mob/M in src)
M.loc = src.loc
if(M.client)
@@ -54,6 +57,9 @@
if(!I.anchored)
I.loc = src
for(var/obj/mecha/working/ripley/deathripley/I in src.loc)
I.loc = src
for(var/mob/M in src.loc)
if(istype (M, /mob/dead/observer))
continue
+21
View File
@@ -1,3 +1,24 @@
/obj/structure/closet/secure_closet/cargotech
name = "Cargo Technician's Locker"
req_access = list(access_cargo)
//icon_state = "secureeng1"
//icon_closed = "secureeng"
//icon_locked = "secureeng1"
//icon_opened = "toolclosetopen"
//icon_broken = "secureengbroken"
//icon_off = "secureengoff"
//Needs proper sprites
New()
..()
sleep(2)
new /obj/item/clothing/under/rank/cargo(src)
new /obj/item/clothing/shoes/brown(src)
new /obj/item/device/radio/headset/headset_cargo(src)
new /obj/item/clothing/gloves/black(src)
new /obj/item/weapon/cartridge/quartermaster(src)
return
/obj/structure/closet/secure_closet/qm_personal
name = "Quartermaster's Locker"
+22 -1
View File
@@ -278,6 +278,7 @@ MASS SPECTROMETER
throw_range = 10
m_amt = 200
origin_tech = "magnets=1;biotech=1"
var/mode = 1;
proc/analyze_health_less_info(mob/living/carbon/M as mob, mob/user as mob)
var/fake_oxy = max(rand(1,40), M.getOxyLoss(), (300 - (M.getToxLoss() + M.getFireLoss() + M.getBruteLoss())))
@@ -285,10 +286,19 @@ proc/analyze_health_less_info(mob/living/carbon/M as mob, mob/user as mob)
user.show_message(text("\blue Analyzing Results for []:\n\t Overall Status: []", M, "dead"), 1)
user.show_message(text("\blue \t Damage Specifics: []-[]-[]-[]", fake_oxy < 50 ? "\red [fake_oxy]" : fake_oxy , M.getToxLoss() > 50 ? "\red [M.getToxLoss()]" : M.getToxLoss(), M.getFireLoss() > 50 ? "\red[M.getFireLoss()]" : M.getFireLoss(), M.getBruteLoss() > 50 ? "\red[M.getBruteLoss()]" : M.getBruteLoss()), 1)
else
user.show_message(text("\blue Analyzing Results for []:\n\t Overall Status: []", M, (M.stat > 1 ? "dead" : text("[]% healthy", M.health))), 1)
user.show_message(text("\blue Analyzing Results for []:\n\t Overall Status: []", M, (M.stat > 1 ? "dead" : text("[]% healthy", M.health - M.halloss))), 1)
user.show_message(text("\blue \t Damage Specifics: []-[]-[]-[]", M.getOxyLoss() > 50 ? "\red [M.getOxyLoss()]" : M.getOxyLoss(), M.getToxLoss() > 50 ? "\red [M.getToxLoss()]" : M.getToxLoss(), M.getFireLoss() > 50 ? "\red[M.getFireLoss()]" : M.getFireLoss(), M.getBruteLoss() > 50 ? "\red[M.getBruteLoss()]" : M.getBruteLoss()), 1)
user.show_message("\blue Key: Suffocation/Toxin/Burns/Brute", 1)
user.show_message("\blue Body Temperature: [M.bodytemperature-T0C]&deg;C ([M.bodytemperature*1.8-459.67]&deg;F)", 1)
if(istype(M, /mob/living/carbon/human))
var/mob/living/carbon/human/H = M
var/list/damaged = H.get_damaged_organs(1,1)
user.show_message("\blue Localized Damage, Brute/Burn:",1)
if(length(damaged)>0)
for(var/datum/organ/external/org in damaged)
user.show_message(text("\blue \t []: []\blue-[]",capitalize(org.getDisplayName()),(org.brute_dam > 0)?"\red [org.brute_dam]":0,(org.burn_dam > 0)?"\red [org.burn_dam]":0),1)
else
user.show_message("\blue \t Limbs are OK.",1)
if((M.changeling && M.changeling.changeling_fakedeath) || (M.reagents && M.reagents.has_reagent("zombiepowder")))
user.show_message(text("\blue [] | [] | [] | []", fake_oxy > 50 ? "\red Severe oxygen deprivation detected\blue" : "Subject bloodstream oxygen level normal", M.getToxLoss() > 50 ? "\red Dangerous amount of toxins detected\blue" : "Subject bloodstream toxin level minimal", M.getFireLoss() > 50 ? "\red Severe burn damage detected\blue" : "Subject burn injury status O.K", M.getBruteLoss() > 50 ? "\red Severe anatomical damage detected\blue" : "Subject brute-force injury status O.K"), 1)
else
@@ -348,6 +358,17 @@ proc/analyze_health_less_info(mob/living/carbon/M as mob, mob/user as mob)
src.add_fingerprint(user)
return
/obj/item/device/healthanalyzer/verb/toggle_mode()
set name = "Switch Verbosity"
set category = "Object"
mode = !mode
switch (mode)
if(1)
usr << "The scanner now shows specific limb damage."
if(0)
usr << "The scanner no longer shows limb damage."
/obj/item/device/analyzer
desc = "A hand-held environmental scanner which reports current gas levels."
+9
View File
@@ -81,6 +81,15 @@
healthcheck()
return
attack_animal(var/mob/living/simple_animal/M as mob)
if(M.melee_damage_upper == 0) return
playsound(src.loc, 'grillehit.ogg', 80, 1)
M.visible_message("[M.name] smashes against the [src.name].", \
"You smash against the [src.name].", \
"You hear a noise")
src.health -= rand(4)
healthcheck()
return
CanPass(atom/movable/mover, turf/target, height=0, air_group=0)
if(air_group || (height==0)) return 1
+1
View File
@@ -405,6 +405,7 @@
else if(temp_sides == 20 && result == 1)
comment = "Ouch, bad luck."
user << text("\red You throw a [src]. It lands on a [result]. [comment]")
icon_state = "[name][result]"
for(var/mob/O in viewers(user, null))
if(O == (user))
continue
+15 -16
View File
@@ -181,21 +181,22 @@
force = 5.0
w_class = 3.0
var
datum/effect/effect/system/spark_spread/spark_system
// datum/effect/effect/system/spark_spread/spark_system
working = 0
mode = 1
disabled = 0
/*
New()
src.spark_system = new /datum/effect/effect/system/spark_spread
spark_system.set_up(5, 0, src)
spark_system.attach(src)
return
*/
proc/activate()
spark_system.set_up(5, 0, src)
src.spark_system.start()
// spark_system.set_up(5, 0, src)
// src.spark_system.start()
playsound(src.loc, 'Deconstruct.ogg', 50, 1)
@@ -205,22 +206,26 @@
if(mode == 1)
mode = 2
user << "Changed mode to 'Airlock'"
src.spark_system.start()
// src.spark_system.start()
return
if(mode == 2)
mode = 3
user << "Changed mode to 'Deconstruct'"
src.spark_system.start()
// src.spark_system.start()
return
if(mode == 3)
mode = 1
user << "Changed mode to 'Floor & Walls'"
src.spark_system.start()
// src.spark_system.start()
return
afterattack(atom/A, mob/user as mob)
if(!isrobot(user)) return
if(istype(A,/area/shuttle))//||istype(A,/turf/space/transit))//No RCDs on the shuttles -Sieve
disabled = 1
else
disabled = 0
if(!isrobot(user)|| disabled == 1) return
if(!(istype(A, /turf) || istype(A, /obj/machinery/door/airlock))) return
var/mob/living/silicon/robot/R = user
@@ -268,13 +273,7 @@
A:ReplaceWithPlating()
return
if(istype(A, /turf/simulated/wall/r_wall))
if(!cell.use(300)) return
user << "Deconstructing RWall..."
playsound(src.loc, 'click.ogg', 50, 1)
if(do_after(user, 60))
activate()
A:ReplaceWithWall()
if(istype(A, /turf/simulated/wall/r_wall)) //by order of muskets -pete
return
if(istype(A, /turf/simulated/floor))
+44 -36
View File
@@ -306,6 +306,14 @@ It is caused by the unexpected circumstances after awakening in cryo (if cloned
<li>Install the external reinforced armor plating (Not included due to NanoTrasen regulations. Can be made using 5 reinforced metal sheets.)</li>
<li>Secure the external reinforced armor plating with a wrench</li>
<li>Weld the external reinforced armor plating to the chassis</li>
<li></li>
<li>Additional Information:</li>
<li>The firefighting variation is made in a similar fashion.</li>
<li>A firesuit must be connected to the Firefighter chassis for heat shielding.</li>
<li>Internal armor is plasteel for additional strength.</li>
<li>External armor must be installed in 2 parts, totaling 10 sheets.</li>
<li>Completed mech is more resiliant against fire, and is a bit more durable overall</li>
<li>Nanotrasen is determined to the safety of its <s>investments</s> employees.</li>
</ol>
</body>
</html>
@@ -343,7 +351,7 @@ It is caused by the unexpected circumstances after awakening in cryo (if cloned
Those are the basic steps to furthing science. What do you do science with, however? Well, you have four major tools: R&D Console, the Destructive Analyzer, the Protolathe, and the Circuit Imprinter.
<h2>The R&D Console</h2>
The R&D console is the cornerstone of any research lab. It is the central system from which the Destructive Analyzer, Protolathe, and Circuit Imprinter (your R&D systems) are controled. More on those systems in their own sections. On it's own, the R&D console acts as a database for all your technological gains and new devices you discover. So long as the R&D console remains intact, you'll retain all that SCIENCE you've discovered. Protect it though, because if it gets damaged, you'll lose your data! In addition to this important purpose, the R&D console has a disk menu that lets you transfer data from the database onto disk or from the disk into the database. It also has a settings menu that lets you re-sync with nearby R&D devices (if they've become disconnected), lock the console from the unworthy, upload the data to all other R&D consoles in the network (all R&D consoles are networked by default), connect/disconnect from the network, and purge all data from the database.
The R&D console is the cornerstone of any research lab. It is the central system from which the Destructive Analyzer, Protolathe, and Circuit Imprinter (your R&D systems) are controled. More on those systems in their own sections. On its own, the R&D console acts as a database for all your technological gains and new devices you discover. So long as the R&D console remains intact, you'll retain all that SCIENCE you've discovered. Protect it though, because if it gets damaged, you'll lose your data! In addition to this important purpose, the R&D console has a disk menu that lets you transfer data from the database onto disk or from the disk into the database. It also has a settings menu that lets you re-sync with nearby R&D devices (if they've become disconnected), lock the console from the unworthy, upload the data to all other R&D consoles in the network (all R&D consoles are networked by default), connect/disconnect from the network, and purge all data from the database.
<b>NOTE:</b> The technology list screen, circuit imprinter, and protolathe menus are accessible by non-scientists. This is intended to allow 'public' systems for the plebians to utilize some new devices.
<h2>Destructive Analyzer</h2>
@@ -359,7 +367,7 @@ It is caused by the unexpected circumstances after awakening in cryo (if cloned
As it has been stated, many devices when they're first discovered do not have a 100% reliablity when you first discover them. Instead, the reliablity of the device is dependent upon a base reliability value, whatever improvements to the design you've discovered through the Destructive Analyzer, and any advancements you've made with the device's source technologies. To be able to improve the reliability of a device, you have to use the device until it breaks beyond repair. Once that happens, you can analyze it in a Destructive Analyzer. Once the device reachs a certain minimum reliability, you'll gain tech advancements from it.
<h1>Building a Better Machine</h1>
Many machines produces from circuit boards and inserted into a machine frame require a variety of parts to construct. These are parts like capacitors, batteries, matter bins, and so forth. As your knowledge of science improves, more advanced versions are unlocked. If you use these parts when constructing something, it's attributes may be improved. For example, if you use an advanced matter bin when constructing an autolathe (rather then a regular one), it'll hold more materials. Experiment around with stock parts of various qualities to see how they affect the end results! Be warned, however: Tier 3 and higher stock parts don't have 100% reliability and their low reliability may affect the reliability of the end machine.
Many machines produces from circuit boards and inserted into a machine frame require a variety of parts to construct. These are parts like capacitors, batteries, matter bins, and so forth. As your knowledge of science improves, more advanced versions are unlocked. If you use these parts when constructing something, its attributes may be improved. For example, if you use an advanced matter bin when constructing an autolathe (rather then a regular one), it'll hold more materials. Experiment around with stock parts of various qualities to see how they affect the end results! Be warned, however: Tier 3 and higher stock parts don't have 100% reliability and their low reliability may affect the reliability of the end machine.
</body>
</html>
"}
@@ -410,7 +418,7 @@ It is caused by the unexpected circumstances after awakening in cryo (if cloned
<h2><a name="Modules">Cyborg Modules</h2>
When a cyborg is created it picks out of an array of modules to designate it's purpose. There are 6 different cyborg modules.
When a cyborg is created it picks out of an array of modules to designate its purpose. There are 6 different cyborg modules.
<h3>Standard Cyborg</h3>
The standard cyborg module is a multi-purpose cyborg. It is equipped with various modules, allowing it to do basic tasks.<br>A Standard Cyborg comes with:
@@ -584,7 +592,7 @@ It is caused by the unexpected circumstances after awakening in cryo (if cloned
</html>
"}
"}
/obj/item/weapon/book/manual/engineering_guide
name = "Engineering Textbook"
@@ -680,37 +688,37 @@ It is caused by the unexpected circumstances after awakening in cryo (if cloned
author = "NanoTrasen"
dat = {"<html>
<head>
<style>
h1 {font-size: 18px; margin: 15px 0px 5px;}
h2 {font-size: 15px; margin: 15px 0px 5px;}
li {margin: 2px 0px 2px 15px;}
ul {list-style: none; margin: 5px; padding: 0px;}
ol {margin: 5px; padding: 0px 15px;}
</style>
</head>
<body>
<h3>Detective Work</h3>
<head>
<style>
h1 {font-size: 18px; margin: 15px 0px 5px;}
h2 {font-size: 15px; margin: 15px 0px 5px;}
li {margin: 2px 0px 2px 15px;}
ul {list-style: none; margin: 5px; padding: 0px;}
ol {margin: 5px; padding: 0px 15px;}
</style>
</head>
<body>
<h3>Detective Work</h3>
Between your bouts of self-narration, and drinking whiskey on the rocks, you might get a case or two to solve.<br>
To have the best chance to solve your case, follow these directions:
<p>
<ol>
<li>Go to the crime scene. </li>
<li>Take your scanner and scan EVERYTHING (Yes, the doors, the tables, even the dog.) </li>
<li>Once you are reasonably certain you have every scrap of evidence you can use, find all possible entry points and scan them, too. </li>
<li>Return to your office. </li>
<li>Using your forensic scanning computer, scan your Scanner to upload all of your evidence into the database.</li>
<li>Browse through the resulting dossiers, looking for the one that either has the most complete set of prints, or the most suspicious items handled. </li>
<li>If you have 80% or more of the print (The print is displayed) go to step 10, otherwise continue to step 8.</li>
<li>Look for clues from the suit fibres you found on your perp, and go about looking for more evidence with this new information, scanning as you go. </li>
<li>Try to get a fingerprint card of your perp, as if used in the computer, the prints will be completed on their dossier.</li>
<li>Assuming you have enough of a print to see it, grab the biggest complete piece of the print and search the security records for it. </li>
<li>Since you now have both your dossier and the name of the person, print both out as evidence, and get security to nab your baddie.</li>
<li>Give yourself a pat on the back and a bottle of the ships finest vodka, you did it!. </li>
</ol>
<p>
It really is that easy! Good luck!
Between your bouts of self-narration, and drinking whiskey on the rocks, you might get a case or two to solve.<br>
To have the best chance to solve your case, follow these directions:
<p>
<ol>
<li>Go to the crime scene. </li>
<li>Take your scanner and scan EVERYTHING (Yes, the doors, the tables, even the dog.) </li>
<li>Once you are reasonably certain you have every scrap of evidence you can use, find all possible entry points and scan them, too. </li>
<li>Return to your office. </li>
<li>Using your forensic scanning computer, scan your Scanner to upload all of your evidence into the database.</li>
<li>Browse through the resulting dossiers, looking for the one that either has the most complete set of prints, or the most suspicious items handled. </li>
<li>If you have 80% or more of the print (The print is displayed) go to step 10, otherwise continue to step 8.</li>
<li>Look for clues from the suit fibres you found on your perp, and go about looking for more evidence with this new information, scanning as you go. </li>
<li>Try to get a fingerprint card of your perp, as if used in the computer, the prints will be completed on their dossier.</li>
<li>Assuming you have enough of a print to see it, grab the biggest complete piece of the print and search the security records for it. </li>
<li>Since you now have both your dossier and the name of the person, print both out as evidence, and get security to nab your baddie.</li>
<li>Give yourself a pat on the back and a bottle of the ships finest vodka, you did it!. </li>
</ol>
<p>
It really is that easy! Good luck!
</body>
</html>"}
</body>
</html>"}
+1 -1
View File
@@ -6,7 +6,7 @@
icon_state = "plantbag"
name = "Plant Bag"
var/mode = 1; //0 = pick one at a time, 1 = pick all on tile
var/capacity = 10; //the number of plant pieces it can carry.
var/capacity = 50; //the number of plant pieces it can carry.
flags = FPRINT | TABLEPASS | ONBELT
w_class = 1
+5 -1
View File
@@ -130,8 +130,12 @@
var/mob/M = src.loc
var/turf/T = M.loc
if ((istype(T, /turf)))
if (M.moved_recently && M.last_move)
if (!M.moved_recently && M.last_move)
M.moved_recently = 1
step(M, M.last_move)
sleep 50
if(M)
M.moved_recently = 0
M.show_message("\red <B>You feel a sharp shock!</B>")
var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread
s.set_up(3, 1, M)
+24
View File
@@ -138,6 +138,30 @@
return
return
/obj/structure/window/attack_animal(mob/living/simple_animal/M as mob)
if (M.melee_damage_upper == 0)
return
M << text("\green You smash against the window.")
for(var/mob/O in viewers(src, null))
if ((O.client && !( O.blinded )))
O << text("\red [] smashes against the window.", M)
playsound(src.loc, 'Glasshit.ogg', 100, 1)
src.health -= M.melee_damage_upper
if(src.health <= 0)
M << text("\green You smash through the window.")
for(var/mob/O in viewers(src, null))
if ((O.client && !( O.blinded )))
O << text("\red [] smashes through the window!", M)
src.health = 0
new /obj/item/weapon/shard(src.loc)
if(reinf)
new /obj/item/stack/rods(src.loc)
src.density = 0
del(src)
return
return
/obj/structure/window/attack_metroid()
if(!istype(usr, /mob/living/carbon/metroid/adult))
return
+17
View File
@@ -65,6 +65,23 @@ var/list/supply_groups = new()
if (prob(5))
del(src)
/obj/structure/plasticflaps/mining //A specific type for mining that doesn't allow airflow because of them damn crates
name = "\improper Airtight plastic flaps"
desc = "Heavy duty, airtight, plastic flaps."
New() //set the turf below the flaps to block air
var/turf/T = get_turf(src.loc)
if(T)
T.blocks_air = 1
..()
Del() //lazy hack to set the turf to allow air to pass if it's a simulated floor
var/turf/T = get_turf(src.loc)
if(T)
if(istype(T, /turf/simulated/floor))
T.blocks_air = 0
..()
/area/supplyshuttle
name = "Supply Shuttle"
icon_state = "supply"
+26
View File
@@ -136,6 +136,12 @@
if(O.level == 1)
O.hide(0)
// Removes all signs of lattice on the pos of the turf -Donkieyo
/turf/proc/RemoveLattice()
var/obj/structure/lattice/L = locate(/obj/structure/lattice, src)
if(L)
del L
/turf/proc/ReplaceWithFloor(explode=0)
var/prior_icon = icon_old
var/old_dir = dir
@@ -144,6 +150,7 @@
del(L)
var/turf/simulated/floor/W = new /turf/simulated/floor( locate(src.x, src.y, src.z) )
W.RemoveLattice()
W.dir = old_dir
if(prior_icon) W.icon_state = prior_icon
else W.icon_state = "floor"
@@ -164,6 +171,7 @@
del(L)
var/turf/simulated/floor/plating/W = new /turf/simulated/floor/plating( locate(src.x, src.y, src.z) )
W.RemoveLattice()
W.dir = old_dir
if(prior_icon) W.icon_state = prior_icon
else W.icon_state = "plating"
@@ -347,6 +355,24 @@
return src.attack_hand(user)
/turf/simulated/wall/attack_animal(mob/living/simple_animal/M as mob)
if(M.wall_smash)
if (istype(src, /turf/simulated/wall/r_wall))
M << text("\blue This wall is far too strong for you to destroy.")
return
else
if (prob(40))
M << text("\blue You smash through the wall.")
dismantle_wall(1)
return
else
M << text("\blue You smash against the wall.")
return
M << "\blue You push the wall but nothing happens!"
return
/turf/simulated/wall/attack_hand(mob/user as mob)
if ((user.mutations & HULK))
if (prob(40))
+25
View File
@@ -562,6 +562,20 @@ var/global/BSACooldown = 0
alert("The AI can't be monkeyized!", null, null, null, null, null)
return
if (href_list["corgione"])
if ((src.rank in list( "Admin Candidate", "Trial Admin", "Badmin", "Game Admin", "Game Master" )))
var/mob/M = locate(href_list["corgione"])
if(!ismob(M))
return
if(istype(M, /mob/living/carbon/human))
var/mob/living/carbon/human/N = M
log_admin("[key_name(usr)] attempting to corgize [key_name(M)]")
message_admins("\blue [key_name_admin(usr)] attempting to corgize [key_name_admin(M)]", 1)
N.corgize()
if(istype(M, /mob/living/silicon))
alert("The AI can't be corgized!", null, null, null, null, null)
return
if (href_list["forcespeech"])
if ((src.rank in list( "Trial Admin", "Badmin", "Game Admin", "Game Master" )))
var/mob/M = locate(href_list["forcespeech"])
@@ -1287,6 +1301,13 @@ var/global/BSACooldown = 0
spawn(0)
H.monkeyize()
ok = 1
if("corgi")
feedback_inc("admin_secrets_fun_used",1)
feedback_add_details("admin_secrets_fun_used","M")
for(var/mob/living/carbon/human/H in world)
spawn(0)
H.corgize()
ok = 1
if("power")
log_admin("[key_name(usr)] made all areas powered", 1)
message_admins("\blue [key_name_admin(usr)] made all areas powered", 1)
@@ -1927,6 +1948,10 @@ var/global/BSACooldown = 0
foo += text("<A HREF='?src=\ref[src];monkeyone=\ref[M]'>Monkeyize</A> | ")
else
foo += text("<B>Monkeyized</B> | ")
if(!iscorgi(M))
foo += text("<A HREF='?src=\ref[src];corgione=\ref[M]'>Corgize</A> | ")
else
foo += text("<B>Corgized</B> | ")
if(isAI(M))
foo += text("<B>Is an AI</B> | ")
else if(ishuman(M))
+3 -2
View File
@@ -80,7 +80,7 @@
verbs += /client/proc/jumptokey
verbs += /client/proc/jumptomob
verbs += /client/proc/jumptoturf
verbs += /client/proc/jumptocoord
verbs += /client/proc/cmd_admin_add_freeform_ai_law
verbs += /client/proc/cmd_admin_rejuvenate
verbs += /client/proc/cmd_admin_drop_everything
@@ -213,6 +213,7 @@
verbs += /client/proc/togglebuildmodeself
verbs += /client/proc/hide_most_verbs
verbs += /client/proc/tension_report
verbs += /client/proc/jumptocoord
if (holder.level >= 3)//Trial Admin********************************************************************
verbs += /obj/admins/proc/toggleaban //abandon mob
@@ -921,4 +922,4 @@
C.CarbonCopy2(NewObj)
else
NewObj.vars[V] = vars[V]
return NewObj
return NewObj
+18
View File
@@ -51,6 +51,24 @@
message_admins("[key_name_admin(usr)] jumped to [key_name_admin(M)]", 1)
else
A << "This mob is not located in the game world."
/client/proc/jumptocoord(tx as num, ty as num, tz as num)
set category = "Admin"
set name = "Jump to Coordinate"
if (!holder)
src << "Only administrators may use this command."
return
if (config.allow_admin_jump)
if(src.mob)
var/mob/A = src.mob
A.x = tx
A.y = ty
A.z = tz
feedback_add_details("admin_verb","JC") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
message_admins("[key_name_admin(usr)] jumped to coordinates [tx], [ty], [tz]")
else
alert("Admin jumping disabled")
@@ -42,6 +42,13 @@ datum
required_reagents = list("aluminum" = 1, "silicon" = 1, "oxygen" = 1)
result_amount = 3
stoxin
name = "Sleep Toxin"
id = "stoxin"
result = "stoxin"
required_reagents = list("chloralhydrate" = 1, "sugar" = 4)
result_amount = 5
sterilizine
name = "Sterilizine"
id = "sterilizine"
+3 -3
View File
@@ -3003,13 +3003,13 @@
..()
reagents.add_reagent("dexalin", 15)
/obj/item/weapon/reagent_containers/pill/bicardine
name = "Bicardine pill"
/obj/item/weapon/reagent_containers/pill/bicaridine
name = "Bicaridine pill"
desc = "Used to treat physical injuries."
icon_state = "pill18"
New()
..()
reagents.add_reagent("bicardine", 15)
reagents.add_reagent("bicaridine", 15)
//Dispensers
/obj/structure/reagent_dispensers/watertank
+15
View File
@@ -548,6 +548,21 @@ obj/item/clothing/suit/justice
item_state = "justice"
flags = FPRINT | TABLEPASS
/obj/item/clothing/under/gladiator
name = "gladiator uniform"
desc = "Are you not entertained? Is that not why you are here?"
icon_state = "gladiator"
item_state = "gladiator"
color = "gladiator"
body_parts_covered = UPPER_TORSO|LOWER_TORSO|ARMS
/obj/item/clothing/head/helmet/gladiator
name = "gladiator helmet"
desc = "Ave, Imperator, morituri te salutant."
icon_state = "gladiator"
flags = FPRINT|TABLEPASS|SUITSPACE|HEADCOVERSEYES|HEADCOVERSMOUTH|BLOCKHAIR
item_state="gladiator"
//stylish new hats
/obj/item/clothing/head/bowlerhat
+5
View File
@@ -13,6 +13,11 @@
flags = FPRINT | TABLEPASS | ONESIZEFITSALL
armor = list(melee = 50, bullet = 15, laser = 50, energy = 10, bomb = 25, bio = 0, rad = 0)
/obj/item/clothing/suit/armor/vest/warden
name = "Warden's jacket"
desc = "An armoured jacket with silver rank pips and livery."
icon_state = "warden_jacket"
item_state = "armor"
/obj/item/clothing/suit/armor/riot
name = "Riot Suit"
+13
View File
@@ -415,6 +415,19 @@
name = "brainburger"
desc = "A strange looking burger. It looks almost sentient."
icon_state = "brainburger"
New()
..()
bitesize = 2
/obj/item/weapon/reagent_containers/food/snacks/ghostburger
name = "Ghost Burger"
desc = "Spooky! It doesn't look very filling."
icon_state = "ghostburger"
New()
..()
reagents.add_reagent("nutriment", 2)
bitesize = 2
/obj/item/weapon/reagent_containers/food/snacks/human
var/hname = ""
+6
View File
@@ -109,6 +109,12 @@
/obj/item/weapon/reagent_containers/food/snacks/tofu
)
result = /obj/item/weapon/reagent_containers/food/snacks/burger/tofu
/datum/recipe/ghostburger
items = list(
/obj/item/weapon/reagent_containers/food/snacks/flour,
/obj/item/weapon/ectoplasm
)
result = /obj/item/weapon/reagent_containers/food/snacks/ghostburger
/datum/recipe/clownburger
items = list(
+56 -19
View File
@@ -181,25 +181,62 @@
/mob/living/carbon/proc/help_shake_act(mob/living/carbon/M)
if (src.health > 0)
var/t_him = "it"
if (src.gender == MALE)
t_him = "him"
else if (src.gender == FEMALE)
t_him = "her"
if (istype(src,/mob/living/carbon/human) && src:w_uniform)
var/mob/living/carbon/human/H = src
H.w_uniform.add_fingerprint(M)
if(!src.sleeping_willingly)
src.sleeping = 0
src.resting = 0
AdjustParalysis(-3)
AdjustStunned(-3)
AdjustWeakened(-3)
playsound(src.loc, 'thudswoosh.ogg', 50, 1, -1)
M.visible_message( \
"\blue [M] shakes [src] trying to wake [t_him] up!", \
"\blue You shake [src] trying to wake [t_him] up!", \
)
if(src == M && istype(src, /mob/living/carbon/human))
var/mob/living/carbon/human/H = M
var/list/damaged = H.get_damaged_organs(1,1)
src.visible_message( \
text("\blue [src] examines [].",src.gender==MALE?"himself":"herself"), \
"\blue You check yourself for injuries." \
)
for(var/datum/organ/external/org in damaged)
var/status = ""
var/brutedamage = org.brute_dam
var/burndamage = org.burn_dam
if(halloss > 0)
if(prob(30))
brutedamage += halloss
if(prob(30))
burndamage += halloss
if(brutedamage > 0)
status = "bruised"
if(brutedamage > 20)
status = "bleeding"
if(brutedamage > 40)
status = "mangled"
if(brutedamage > 0 && burndamage > 0)
status += " and "
if(burndamage > 40)
status += "peeling away"
else if(burndamage > 10)
status += "blistered"
else if(burndamage > 0)
status += "numb"
if(status == "")
status = "OK"
src.show_message(text("\t []My [] is [].",status=="OK"?"\blue ":"\red ",org.getDisplayName(),status),1)
src.show_message(text("\blue You finish checking yourself."),1)
else
var/t_him = "it"
if (src.gender == MALE)
t_him = "him"
else if (src.gender == FEMALE)
t_him = "her"
if (istype(src,/mob/living/carbon/human) && src:w_uniform)
var/mob/living/carbon/human/H = src
H.w_uniform.add_fingerprint(M)
src.sleeping = max(0,src.sleeping-5)
if(!src.sleeping_willingly)
src.sleeping = 0
src.resting = 0
AdjustParalysis(-3)
AdjustStunned(-3)
AdjustWeakened(-3)
playsound(src.loc, 'thudswoosh.ogg', 50, 1, -1)
M.visible_message( \
"\blue [M] shakes [src] trying to wake [t_him] up!", \
"\blue You shake [src] trying to wake [t_him] up!", \
)
/mob/living/carbon/proc/eyecheck()
return 0
@@ -142,15 +142,40 @@
visible_message("\red <B>[M] has pushed [src]!</B>")
return
var/talked = 0 // BubbleWrap
if(randn <= 60)
drop_item()
//BubbleWrap: Disarming breaks a pull
if(pulling)
visible_message("\red <b>[M] has broken [src]'s grip on [pulling]!</B>")
talked = 1
pulling = null
//BubbleWrap: Disarming also breaks a grab - this will also stop someone being choked, won't it?
if(istype(l_hand, /obj/item/weapon/grab))
var/obj/item/weapon/grab/lgrab = l_hand
if(lgrab.affecting)
visible_message("\red <b>[M] has broken [src]'s grip on [lgrab.affecting]!</B>")
talked = 1
spawn(1)
del(lgrab)
if(istype(r_hand, /obj/item/weapon/grab))
var/obj/item/weapon/grab/rgrab = r_hand
if(rgrab.affecting)
visible_message("\red <b>[M] has broken [src]'s grip on [rgrab.affecting]!</B>")
talked = 1
spawn(1)
del(rgrab)
//End BubbleWrap
if(!talked) //BubbleWrap
drop_item()
visible_message("\red <B>[M] has disarmed [src]!</B>")
playsound(loc, 'thudswoosh.ogg', 50, 1, -1)
visible_message("\red <B>[M] has disarmed [src]!</B>")
return
playsound(loc, 'punchmiss.ogg', 25, 1, -1)
visible_message("\red <B>[M] attempted to disarm [src]!</B>")
update_clothing()
return
return
@@ -69,7 +69,7 @@
src.modules += new /obj/item/weapon/reagent_containers/pill/dexalin(src)
src.modules += new /obj/item/weapon/reagent_containers/pill/antitox(src)
src.modules += new /obj/item/weapon/reagent_containers/pill/kelotane(src)
src.modules += new /obj/item/weapon/reagent_containers/pill/bicardine(src)
src.modules += new /obj/item/weapon/reagent_containers/pill/bicaridine(src)
return
@@ -78,7 +78,7 @@
/obj/item/weapon/reagent_containers/pill/dexalin,
/obj/item/weapon/reagent_containers/pill/antitox,
/obj/item/weapon/reagent_containers/pill/kelotane,
/obj/item/weapon/reagent_containers/pill/bicardine
/obj/item/weapon/reagent_containers/pill/bicaridine
)
for (var/T in what)
if (!(locate(T) in src.modules))
+23
View File
@@ -440,6 +440,27 @@
else
droplimb(1)
proc/getDisplayName()
switch(src.name)
if("l_leg")
return "left leg"
if("r_leg")
return "right leg"
if("l_arm")
return "left arm"
if("r_arm")
return "right arm"
if("l_foot")
return "left foot"
if("r_foot")
return "right foot"
if("l_hand")
return "left hand"
if("r_hand")
return "right hand"
else
return src.name
/datum/organ/wound
name = "wound"
var/wound_type = 0 //0 = cut, 1 = bruise, 2 = burn
@@ -564,6 +585,8 @@
parent.owner.updatehealth()
/****************************************************
INTERNAL ORGANS
****************************************************/
+7
View File
@@ -367,6 +367,13 @@
now_pushing = null
return
return
//PC stuff-Sieve
/mob/living/simple_animal/corgi/proc/mind_initialize(mob/G)
mind = new
mind.current = src
mind.assigned_role = "Corgi"
mind.key = G.key
/obj/item/weapon/reagent_containers/food/snacks/sliceable/meat/corgi
name = "Corgi meat"
+9 -1
View File
@@ -47,7 +47,9 @@
var/attacktext = "attacks"
var/attack_sound = null
var/friendly = "nuzzles" //If the mob does no damage with it's attack
var/wall_smash = 0 //if they can smash walls
var/speed = 0 //LETS SEE IF I CAN SET SPEEDS FOR SIMPLE MOBS WITHOUT DESTROYING EVERYTHING. Higher speed is slower, negative speed is faster
/mob/living/simple_animal/New()
..()
verbs -= /mob/verb/observe
@@ -286,4 +288,10 @@
usr << "\red This weapon is ineffective, it does no damage."
for(var/mob/M in viewers(src, null))
if ((M.client && !( M.blinded )))
M.show_message("\red [user] gently taps [src] with the [O]. ")
M.show_message("\red [user] gently taps [src] with the [O]. ")
/mob/living/simple_animal/movement_delay()
var/tally = 0 //Incase I need to add stuff other than "speed" later
tally = speed
return tally
+1
View File
@@ -20,6 +20,7 @@
min_oxy = 0
max_co2 = 0
max_tox = 0
speed = -1
Life()
+24
View File
@@ -308,6 +308,30 @@
new_metroid.a_intent = "hurt"
new_metroid << "<B>You are now a baby Metroid.</B>"
spawn(0)//To prevent the proc from returning null.
del(src)
return
/mob/living/carbon/human/proc/corgize()
if (monkeyizing)
return
for(var/obj/item/W in src)
drop_from_slot(W)
update_clothing()
monkeyizing = 1
canmove = 0
icon = null
invisibility = 101
for(var/t in organs)
del(t)
var/mob/living/simple_animal/corgi/new_corgi = new /mob/living/simple_animal/corgi (loc)
new_corgi.mind_initialize(src)
new_corgi.key = key
new_corgi.a_intent = "hurt"
new_corgi << "<B>You are now a Corgi!.</B>"
spawn(0)//To prevent the proc from returning null.
del(src)
return
+5 -1
View File
@@ -690,6 +690,7 @@ datum
materials = list("$glass" = 2000, "acid" = 20)
build_path = "/obj/item/weapon/circuitboard/mecha/durand/targeting"
honker_main
name = "Circuit Design (\"H.O.N.K\" Central Control module)"
desc = "Allows for the construction of a \"H.O.N.K\" Central Control module."
@@ -849,6 +850,7 @@ datum
req_tech = list("powerstorage"= 3, "engineering" = 3, "materials" = 3)
build_path = "/obj/item/mecha_parts/mecha_equipment/generator/nuclear"
////////////////////////////////////////
//////////Disk Construction Disks///////
////////////////////////////////////////
@@ -1014,6 +1016,8 @@ datum
reliability_base = 75
build_path = "/obj/item/weapon/stock_parts/matter_bin/super"
subspace_ansible
name = "Subspace Ansible"
desc = "A compact module capable of sensing extradimensional activity."
@@ -1113,7 +1117,7 @@ datum
name = "Hyper-Capacity Power Cell"
desc = "A power cell that holds 30000 units of energy"
id = "hyper_cell"
req_tech = list("powerstorage" = 6, "materials" = 4)
req_tech = list("powerstorage" = 5, "materials" = 4)
reliability_base = 85
build_type = PROTOLATHE
materials = list("$metal" = 400, "$gold" = 150, "$silver" = 150, "$glass" = 70)
Binary file not shown.

Before

Width:  |  Height:  |  Size: 238 KiB

After

Width:  |  Height:  |  Size: 244 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 168 KiB

After

Width:  |  Height:  |  Size: 174 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 31 KiB

After

Width:  |  Height:  |  Size: 32 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 35 KiB

After

Width:  |  Height:  |  Size: 36 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 20 KiB

After

Width:  |  Height:  |  Size: 20 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 78 KiB

After

Width:  |  Height:  |  Size: 80 KiB

BIN
View File
Binary file not shown.

Before

Width:  |  Height:  |  Size: 39 KiB

After

Width:  |  Height:  |  Size: 41 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 22 KiB

After

Width:  |  Height:  |  Size: 17 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 101 KiB

After

Width:  |  Height:  |  Size: 108 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.9 KiB

After

Width:  |  Height:  |  Size: 2.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 18 KiB

After

Width:  |  Height:  |  Size: 21 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 321 KiB

After

Width:  |  Height:  |  Size: 336 KiB

Binary file not shown.