mirror of
https://github.com/CHOMPstation/CHOMPstation.git
synced 2026-08-27 14:06:43 +01:00
Merge branch 'master' of https://github.com/VOREStation/VOREStation into Fluff_Items_worshop
This commit is contained in:
@@ -0,0 +1,25 @@
|
||||
// The below should be used to define an item's w_class variable.
|
||||
// Example: w_class = ITENSIZE_LARGE
|
||||
// This allows the addition of future w_classes without needing to change every file.
|
||||
#define ITEMSIZE_TINY 1
|
||||
#define ITEMSIZE_SMALL 2
|
||||
#define ITEMSIZE_NORMAL 3
|
||||
#define ITEMSIZE_LARGE 4
|
||||
#define ITEMSIZE_HUGE 5
|
||||
#define ITEMSIZE_NO_CONTAINER 100 // Use this to forbid item from being placed in a container.
|
||||
|
||||
// Tweak these to determine how much space an item takes in a container.
|
||||
// Look in storage.dm for get_storage_cost(), which uses these. Containers also use these as a reference for size.
|
||||
// ITEMSIZE_COST_NORMAL is equivalent to one slot using the old inventory system. As such, it is a nice reference to use for
|
||||
// defining how much space there is in a container.
|
||||
#define ITEMSIZE_COST_TINY 1
|
||||
#define ITEMSIZE_COST_SMALL 2
|
||||
#define ITEMSIZE_COST_NORMAL 4
|
||||
#define ITEMSIZE_COST_LARGE 8
|
||||
#define ITEMSIZE_COST_HUGE 16
|
||||
#define ITEMSIZE_COST_NO_CONTAINER 1000
|
||||
|
||||
// Container sizes. Note that different containers can hold a maximum ITEMSIZE.
|
||||
#define INVENTORY_STANDARD_SPACE ITEMSIZE_COST_NORMAL * 7 // 28
|
||||
#define INVENTORY_DUFFLEBAG_SPACE ITEMSIZE_COST_NORMAL * 9 // 36
|
||||
#define INVENTORY_BOX_SPACE ITEMSIZE_COST_SMALL * 4 // 8
|
||||
@@ -167,3 +167,15 @@
|
||||
#define ANTAG_HIDDEN "Hidden"
|
||||
#define ANTAG_SHARED "Shared"
|
||||
#define ANTAG_KNOWN "Known"
|
||||
|
||||
// Job groups
|
||||
#define ROLE_COMMAND "command"
|
||||
#define ROLE_SECURITY "security"
|
||||
#define ROLE_ENGINEERING "engineering"
|
||||
#define ROLE_MEDICAL "medical"
|
||||
#define ROLE_RESEARCH "research"
|
||||
#define ROLE_CARGO "cargo"
|
||||
#define ROLE_CIVILIAN "civilian"
|
||||
#define ROLE_SYNTHETIC "synthetic"
|
||||
#define ROLE_UNKNOWN "unknown"
|
||||
#define ROLE_EVERYONE "everyone"
|
||||
|
||||
@@ -42,6 +42,10 @@
|
||||
|
||||
#define isxeno(A) istype(A, /mob/living/simple_animal/xeno)
|
||||
|
||||
#define isweakref(A) istype(A, /weakref)
|
||||
|
||||
#define RANDOM_BLOOD_TYPE pick(4;"O-", 36;"O+", 3;"A-", 28;"A+", 1;"B-", 20;"B+", 1;"AB-", 5;"AB+")
|
||||
|
||||
#define to_chat(target, message) target << message
|
||||
|
||||
#define CanInteract(user, state) (CanUseTopic(user, state) == STATUS_INTERACTIVE)
|
||||
|
||||
@@ -67,7 +67,7 @@ var/const/tk_maxrange = 15
|
||||
icon_state = "2"
|
||||
flags = NOBLUDGEON
|
||||
//item_state = null
|
||||
w_class = 10.0
|
||||
w_class = ITEMSIZE_NO_CONTAINER
|
||||
layer = 20
|
||||
|
||||
var/last_throw = 0
|
||||
|
||||
@@ -0,0 +1,6 @@
|
||||
/datum/controller/process/game_master/setup()
|
||||
name = "\improper GM controller"
|
||||
schedule_interval = 600 // every 60 seconds
|
||||
|
||||
/datum/controller/process/game_master/doWork()
|
||||
game_master.process()
|
||||
@@ -361,7 +361,7 @@
|
||||
clothes_s = new /icon('icons/mob/uniform.dmi', "virologywhite_s")
|
||||
clothes_s.Blend(new /icon('icons/mob/feet.dmi', "white"), ICON_UNDERLAY)
|
||||
clothes_s.Blend(new /icon('icons/mob/suit.dmi', "labcoat_vir_open"), ICON_OVERLAY)
|
||||
if("Station Administrator")
|
||||
if("Colony Director")
|
||||
clothes_s = new /icon('icons/mob/uniform.dmi', "captain_s")
|
||||
clothes_s.Blend(new /icon('icons/mob/feet.dmi', "brown"), ICON_UNDERLAY)
|
||||
if("Head of Security")
|
||||
|
||||
@@ -24,8 +24,7 @@
|
||||
name = "Special Ops supplies"
|
||||
contains = list(
|
||||
/obj/item/weapon/storage/box/emps,
|
||||
/obj/item/weapon/grenade/smokebomb = 3,
|
||||
/obj/item/weapon/pen/reagent/paralysis,
|
||||
/obj/item/weapon/grenade/smokebomb = 4,
|
||||
/obj/item/weapon/grenade/chem_grenade/incendiary
|
||||
)
|
||||
cost = 25
|
||||
|
||||
@@ -34,7 +34,7 @@ var/list/all_supply_groups = list("Atmospherics",
|
||||
var/access = null
|
||||
var/hidden = 0
|
||||
var/contraband = 0
|
||||
var/group = "Operations"
|
||||
var/group = "Miscellaneous"
|
||||
|
||||
/datum/supply_packs/New()
|
||||
manifest += "<ul>"
|
||||
|
||||
@@ -43,17 +43,7 @@
|
||||
/datum/uplink_item/item/ammo/a556/ap
|
||||
name = "10rnd Rifle Magazine (5.56mm AP)"
|
||||
path = /obj/item/ammo_magazine/a556/ap
|
||||
/*
|
||||
/datum/uplink_item/item/ammo/a556m
|
||||
name = "20rnd Rifle Magazine (5.56mm)"
|
||||
path = /obj/item/ammo_magazine/a556m
|
||||
item_cost = 4
|
||||
|
||||
/datum/uplink_item/item/ammo/a556m/ap
|
||||
name = "20rnd Rifle Magazine (5.56mm AP)"
|
||||
path = /obj/item/ammo_magazine/a556m/ap
|
||||
item_cost = 4
|
||||
*/
|
||||
/datum/uplink_item/item/ammo/c762
|
||||
name = "20rnd Rifle Magazine (7.62mm)"
|
||||
path = /obj/item/ammo_magazine/c762
|
||||
@@ -84,24 +74,28 @@
|
||||
path = /obj/item/ammo_magazine/a762/ap
|
||||
|
||||
/datum/uplink_item/item/ammo/g12
|
||||
name = "12g Auto-Shotgun Magazine (Slug)"
|
||||
path = /obj/item/ammo_magazine/g12
|
||||
name = "12g Shotgun Ammo Box (Slug)"
|
||||
path = /obj/item/weapon/storage/box/shotgunammo
|
||||
|
||||
/datum/uplink_item/item/ammo/g12/beanbag
|
||||
name = "12g Auto-Shotgun Magazine (Beanbag)"
|
||||
path = /obj/item/ammo_magazine/g12/beanbag
|
||||
name = "12g Shotgun Ammo Box (Beanbag)"
|
||||
path = /obj/item/weapon/storage/box/beanbags
|
||||
item_cost = 10 // Discount due to it being LTL.
|
||||
|
||||
/datum/uplink_item/item/ammo/g12/pellet
|
||||
name = "12g Auto-Shotgun Magazine (Pellet)"
|
||||
path = /obj/item/ammo_magazine/g12/pellet
|
||||
name = "12g Shotgun Ammo Box (Pellet)"
|
||||
path = /obj/item/weapon/storage/box/shotgunshells
|
||||
|
||||
/datum/uplink_item/item/ammo/g12/stun
|
||||
name = "12g Auto-Shotgun Magazine (Stun)"
|
||||
name = "12g Shotgun Ammo Box (Stun)"
|
||||
path = /obj/item/weapon/storage/box/stunshells
|
||||
item_cost = 10 // Discount due to it being LTL.
|
||||
|
||||
/datum/uplink_item/item/ammo/g12/flash
|
||||
name = "12g Auto-Shotgun Magazine (Flash)"
|
||||
name = "12g Shotgun Ammo Box (Flash)"
|
||||
path = /obj/item/weapon/storage/box/flashshells
|
||||
item_cost = 10 // Discount due to it being LTL.
|
||||
item_cost = 10 // Discount due to it being LTL.
|
||||
|
||||
/datum/uplink_item/item/ammo/cell
|
||||
name = "weapon cell"
|
||||
path = /obj/item/weapon/cell/device
|
||||
@@ -0,0 +1,31 @@
|
||||
/datum
|
||||
var/weakref/weakref
|
||||
|
||||
/datum/Destroy()
|
||||
weakref = null // Clear this reference to ensure it's kept for as brief duration as possible.
|
||||
. = ..()
|
||||
|
||||
//obtain a weak reference to a datum
|
||||
/proc/weakref(datum/D)
|
||||
if(D.gcDestroyed)
|
||||
return
|
||||
if(!D.weakref)
|
||||
D.weakref = new/weakref(D)
|
||||
return D.weakref
|
||||
|
||||
/weakref
|
||||
var/ref
|
||||
|
||||
/weakref/New(datum/D)
|
||||
ref = "\ref[D]"
|
||||
|
||||
/weakref/Destroy()
|
||||
// A weakref datum should not be manually destroyed as it is a shared resource,
|
||||
// rather it should be automatically collected by the BYOND GC when all references are gone.
|
||||
return 0
|
||||
|
||||
/weakref/proc/resolve()
|
||||
var/datum/D = locate(ref)
|
||||
if(D && D.weakref == src)
|
||||
return D
|
||||
return null
|
||||
@@ -0,0 +1,66 @@
|
||||
/datum/wires/grid_checker
|
||||
holder_type = /obj/machinery/power/grid_checker
|
||||
wire_count = 8
|
||||
|
||||
var/const/GRID_CHECKER_WIRE_REBOOT = 1 // This wire causes the grid-check to end, if pulsed.
|
||||
var/const/GRID_CHECKER_WIRE_LOCKOUT = 2 // If cut or pulsed, locks the user out for half a minute.
|
||||
var/const/GRID_CHECKER_WIRE_ALLOW_MANUAL_1 = 4 // Needs to be cut for REBOOT to be possible.
|
||||
var/const/GRID_CHECKER_WIRE_ALLOW_MANUAL_2 = 8 // Needs to be cut for REBOOT to be possible.
|
||||
var/const/GRID_CHECKER_WIRE_ALLOW_MANUAL_3 = 16 // Needs to be cut for REBOOT to be possible.
|
||||
var/const/GRID_CHECKER_WIRE_SHOCK = 32 // Shocks the user if not wearing gloves.
|
||||
var/const/GRID_CHECKER_WIRE_NOTHING_1 = 64 // Does nothing, but makes it a bit harder.
|
||||
var/const/GRID_CHECKER_WIRE_NOTHING_2 = 128 // Does nothing, but makes it a bit harder.
|
||||
|
||||
|
||||
/datum/wires/grid_checker/CanUse(var/mob/living/L)
|
||||
var/obj/machinery/power/grid_checker/G = holder
|
||||
if(G.opened)
|
||||
return TRUE
|
||||
return FALSE
|
||||
|
||||
|
||||
/datum/wires/grid_checker/GetInteractWindow()
|
||||
var/obj/machinery/power/grid_checker/G = holder
|
||||
. += ..()
|
||||
. += "The green light is [G.power_failing ? "off" : "on"].<br>"
|
||||
. += "The red light is [G.wire_locked_out ? "on" : "off"].<br>"
|
||||
. += "The blue light is [G.wire_allow_manual_1 && G.wire_allow_manual_2 && G.wire_allow_manual_3 ? "on" : "off"]."
|
||||
|
||||
|
||||
/datum/wires/grid_checker/UpdateCut(var/index, var/mended)
|
||||
var/obj/machinery/power/grid_checker/G = holder
|
||||
switch(index)
|
||||
if(GRID_CHECKER_WIRE_LOCKOUT)
|
||||
G.wire_locked_out = !mended
|
||||
if(GRID_CHECKER_WIRE_ALLOW_MANUAL_1)
|
||||
G.wire_allow_manual_1 = !mended
|
||||
if(GRID_CHECKER_WIRE_ALLOW_MANUAL_2)
|
||||
G.wire_allow_manual_2 = !mended
|
||||
if(GRID_CHECKER_WIRE_ALLOW_MANUAL_3)
|
||||
G.wire_allow_manual_3 = !mended
|
||||
if(GRID_CHECKER_WIRE_SHOCK)
|
||||
if(G.wire_locked_out)
|
||||
return
|
||||
G.shock(usr, 70)
|
||||
|
||||
|
||||
/datum/wires/grid_checker/UpdatePulsed(var/index)
|
||||
var/obj/machinery/power/grid_checker/G = holder
|
||||
switch(index)
|
||||
if(GRID_CHECKER_WIRE_REBOOT)
|
||||
if(G.wire_locked_out)
|
||||
return
|
||||
|
||||
if(G.power_failing && G.wire_allow_manual_1 && G.wire_allow_manual_2 && G.wire_allow_manual_3)
|
||||
G.end_power_failure(TRUE)
|
||||
if(GRID_CHECKER_WIRE_LOCKOUT)
|
||||
if(G.wire_locked_out)
|
||||
return
|
||||
|
||||
G.wire_locked_out = TRUE
|
||||
spawn(30 SECONDS)
|
||||
G.wire_locked_out = FALSE
|
||||
if(GRID_CHECKER_WIRE_SHOCK)
|
||||
if(G.wire_locked_out)
|
||||
return
|
||||
G.shock(usr, 70)
|
||||
@@ -1,6 +1,6 @@
|
||||
/datum/wires/jukebox
|
||||
random = 1
|
||||
holder_type = /obj/machinery/media/jukebox/vore
|
||||
holder_type = /obj/machinery/media/jukebox
|
||||
wire_count = 7
|
||||
|
||||
var/const/WIRE_POWER = 1
|
||||
@@ -19,7 +19,7 @@ var/const/WIRE_NOTHING2 = 64
|
||||
|
||||
// Show the status of lights as a hint to the current state
|
||||
/datum/wires/jukebox/GetInteractWindow()
|
||||
var/obj/machinery/media/jukebox/vore/A = holder
|
||||
var/obj/machinery/media/jukebox/A = holder
|
||||
. += ..()
|
||||
. += "<BR>The power light is [(A.stat & (BROKEN|NOPOWER)) ? "off" : "on"].<BR>"
|
||||
. += "The parental guidance light is [A.hacked ? "off" : "on"].<BR>"
|
||||
@@ -27,7 +27,7 @@ var/const/WIRE_NOTHING2 = 64
|
||||
|
||||
// Give a hint as to what each wire does
|
||||
/datum/wires/jukebox/UpdatePulsed(var/index)
|
||||
var/obj/machinery/media/jukebox/vore/A = holder
|
||||
var/obj/machinery/media/jukebox/A = holder
|
||||
switch(index)
|
||||
if(WIRE_POWER)
|
||||
holder.visible_message("<span class='notice'>\icon[holder] The power light flickers.</span>")
|
||||
@@ -44,7 +44,7 @@ var/const/WIRE_NOTHING2 = 64
|
||||
A.shock(usr, 10) // The nothing wires give a chance to shock just for fun
|
||||
|
||||
/datum/wires/jukebox/UpdateCut(var/index, var/mended)
|
||||
var/obj/machinery/media/jukebox/vore/A = holder
|
||||
var/obj/machinery/media/jukebox/A = holder
|
||||
|
||||
switch(index)
|
||||
if(WIRE_POWER)
|
||||
+2
-2
@@ -87,7 +87,7 @@ var/global/list/PDA_Manifest = list()
|
||||
heads[++heads.len] = list("name" = name, "rank" = rank, "active" = isactive)
|
||||
department = 1
|
||||
depthead = 1
|
||||
if(rank=="Station Administrator" && heads.len != 1)
|
||||
if(rank=="Colony Director" && heads.len != 1)
|
||||
heads.Swap(1,heads.len)
|
||||
|
||||
if(real_rank in security_positions)
|
||||
@@ -194,7 +194,7 @@ var/global/list/PDA_Manifest = list()
|
||||
name = "beach ball"
|
||||
density = 0
|
||||
anchored = 0
|
||||
w_class = 4
|
||||
w_class = ITEMSIZE_LARGE
|
||||
force = 0.0
|
||||
throwforce = 0.0
|
||||
throw_speed = 1
|
||||
|
||||
+26
-21
@@ -8,7 +8,7 @@
|
||||
throwforce = 2.0
|
||||
throw_speed = 1
|
||||
throw_range = 4
|
||||
w_class = 2
|
||||
w_class = ITEMSIZE_SMALL
|
||||
attack_verb = list("called", "rang")
|
||||
hitsound = 'sound/weapons/ring.ogg'
|
||||
|
||||
@@ -22,7 +22,7 @@
|
||||
anchored = 0.0
|
||||
var/stored_matter = 0
|
||||
var/mode = 1
|
||||
w_class = 3.0
|
||||
w_class = ITEMSIZE_NORMAL
|
||||
|
||||
/obj/item/weapon/soap
|
||||
name = "soap"
|
||||
@@ -30,7 +30,7 @@
|
||||
gender = PLURAL
|
||||
icon = 'icons/obj/items.dmi'
|
||||
icon_state = "soap"
|
||||
w_class = 2.0
|
||||
w_class = ITEMSIZE_SMALL
|
||||
throwforce = 0
|
||||
throw_speed = 4
|
||||
throw_range = 20
|
||||
@@ -57,7 +57,7 @@
|
||||
icon_state = "bike_horn"
|
||||
item_state = "bike_horn"
|
||||
throwforce = 3
|
||||
w_class = 2
|
||||
w_class = ITEMSIZE_SMALL
|
||||
throw_speed = 3
|
||||
throw_range = 15
|
||||
attack_verb = list("HONKED")
|
||||
@@ -70,7 +70,7 @@
|
||||
icon = 'icons/obj/items.dmi'
|
||||
icon_state = "c_tube"
|
||||
throwforce = 1
|
||||
w_class = 2.0
|
||||
w_class = ITEMSIZE_SMALL
|
||||
throw_speed = 4
|
||||
throw_range = 5
|
||||
|
||||
@@ -86,7 +86,7 @@
|
||||
flags = CONDUCT
|
||||
force = 5.0
|
||||
throwforce = 7.0
|
||||
w_class = 2.0
|
||||
w_class = ITEMSIZE_SMALL
|
||||
matter = list(DEFAULT_WALL_MATERIAL = 50)
|
||||
attack_verb = list("bludgeoned", "whacked", "disciplined", "thrashed")
|
||||
|
||||
@@ -148,7 +148,7 @@
|
||||
desc = "Better keep this safe."
|
||||
icon_state = "nucleardisk"
|
||||
item_state = "card-id"
|
||||
w_class = 2.0
|
||||
w_class = ITEMSIZE_SMALL
|
||||
|
||||
/*
|
||||
/obj/item/weapon/game_kit
|
||||
@@ -160,7 +160,7 @@
|
||||
var/data = ""
|
||||
var/base_url = "http://svn.slurm.us/public/spacestation13/misc/game_kit"
|
||||
item_state = "sheet-metal"
|
||||
w_class = 5.0
|
||||
w_class = ITEMSIZE_HUGE
|
||||
*/
|
||||
|
||||
/obj/item/weapon/gift
|
||||
@@ -171,7 +171,7 @@
|
||||
var/size = 3.0
|
||||
var/obj/item/gift = null
|
||||
item_state = "gift"
|
||||
w_class = 4.0
|
||||
w_class = ITEMSIZE_LARGE
|
||||
|
||||
/obj/item/weapon/legcuffs
|
||||
name = "legcuffs"
|
||||
@@ -181,7 +181,7 @@
|
||||
icon_state = "handcuff"
|
||||
flags = CONDUCT
|
||||
throwforce = 0
|
||||
w_class = 3.0
|
||||
w_class = ITEMSIZE_NORMAL
|
||||
origin_tech = list(TECH_MATERIAL = 1)
|
||||
var/breakouttime = 300 //Deciseconds = 30s = 0.5 minute
|
||||
sprite_sheets = list("Teshari" = 'icons/mob/species/seromi/handcuffs.dmi')
|
||||
@@ -195,7 +195,7 @@
|
||||
throwforce = 3.0
|
||||
throw_speed = 1
|
||||
throw_range = 5
|
||||
w_class = 2.0
|
||||
w_class = ITEMSIZE_SMALL
|
||||
attack_verb = list("warned", "cautioned", "smashed")
|
||||
|
||||
/obj/item/weapon/caution/cone
|
||||
@@ -203,6 +203,11 @@
|
||||
name = "warning cone"
|
||||
icon_state = "cone"
|
||||
|
||||
/obj/item/weapon/caution/cone/candy
|
||||
desc = "This cone is trying to warn you of something! It has been painted to look like candy corn."
|
||||
name = "candy cone"
|
||||
icon_state = "candycone"
|
||||
|
||||
/*/obj/item/weapon/syndicate_uplink
|
||||
name = "station bounced radio"
|
||||
desc = "Remain silent about this..."
|
||||
@@ -215,7 +220,7 @@
|
||||
var/mob/currentUser = null
|
||||
var/obj/item/device/radio/origradio = null
|
||||
flags = CONDUCT | ONBELT
|
||||
w_class = 2.0
|
||||
w_class = ITEMSIZE_SMALL
|
||||
item_state = "radio"
|
||||
throw_speed = 4
|
||||
throw_range = 20
|
||||
@@ -236,7 +241,7 @@
|
||||
slot_flags = SLOT_BELT
|
||||
item_state = "radio"
|
||||
throwforce = 5
|
||||
w_class = 2.0
|
||||
w_class = ITEMSIZE_SMALL
|
||||
throw_speed = 4
|
||||
throw_range = 20
|
||||
matter = list(DEFAULT_WALL_MATERIAL = 100)
|
||||
@@ -255,7 +260,7 @@
|
||||
throwforce = 5.0
|
||||
throw_speed = 1
|
||||
throw_range = 5
|
||||
w_class = 2.0
|
||||
w_class = ITEMSIZE_SMALL
|
||||
attack_verb = list("bludgeoned", "whacked", "disciplined")
|
||||
|
||||
/obj/item/weapon/staff/broom
|
||||
@@ -280,12 +285,12 @@
|
||||
throwforce = 5.0
|
||||
throw_speed = 1
|
||||
throw_range = 5
|
||||
w_class = 2.0
|
||||
w_class = ITEMSIZE_SMALL
|
||||
|
||||
/obj/item/weapon/module
|
||||
icon = 'icons/obj/module.dmi'
|
||||
icon_state = "std_module"
|
||||
w_class = 2.0
|
||||
w_class = ITEMSIZE_SMALL
|
||||
item_state = "electronic"
|
||||
flags = CONDUCT
|
||||
var/mtype = 1 // 1=electronic 2=hardware
|
||||
@@ -328,7 +333,7 @@
|
||||
name = "camera bug"
|
||||
icon = 'icons/obj/device.dmi'
|
||||
icon_state = "flash"
|
||||
w_class = 1.0
|
||||
w_class = ITEMSIZE_TINY
|
||||
item_state = "electronic"
|
||||
throw_speed = 4
|
||||
throw_range = 20
|
||||
@@ -365,7 +370,7 @@
|
||||
icon = 'icons/obj/cigarettes.dmi'
|
||||
icon_state = "cigarpacket"
|
||||
item_state = "cigarpacket"
|
||||
w_class = 1
|
||||
w_class = ITEMSIZE_TINY
|
||||
throwforce = 2
|
||||
var/cigarcount = 6
|
||||
flags = ONBELT
|
||||
@@ -385,7 +390,7 @@
|
||||
name = "rapid part exchange device"
|
||||
desc = "Special mechanical module made to store, sort, and apply standard machine parts."
|
||||
icon_state = "RPED"
|
||||
w_class = 5
|
||||
w_class = ITEMSIZE_HUGE
|
||||
can_hold = list(/obj/item/weapon/stock_parts)
|
||||
storage_slots = 50
|
||||
use_to_pickup = 1
|
||||
@@ -393,7 +398,7 @@
|
||||
allow_quick_empty = 1
|
||||
collection_mode = 1
|
||||
display_contents_with_number = 1
|
||||
max_w_class = 3
|
||||
max_w_class = ITEMSIZE_NORMAL
|
||||
max_storage_space = 100
|
||||
|
||||
/obj/item/weapon/stock_parts
|
||||
@@ -401,7 +406,7 @@
|
||||
desc = "What?"
|
||||
gender = PLURAL
|
||||
icon = 'icons/obj/stock_parts.dmi'
|
||||
w_class = 2.0
|
||||
w_class = ITEMSIZE_SMALL
|
||||
var/rating = 1
|
||||
|
||||
/obj/item/weapon/stock_parts/New()
|
||||
|
||||
@@ -6,7 +6,7 @@ var/datum/antagonist/mutineer/mutineers
|
||||
role_text_plural = "Mutineers"
|
||||
id = MODE_MUTINEER
|
||||
antag_indicator = "mutineer"
|
||||
restricted_jobs = list("Station Administrator")
|
||||
restricted_jobs = list("Colony Director")
|
||||
|
||||
/datum/antagonist/mutineer/New(var/no_reference)
|
||||
..()
|
||||
@@ -39,7 +39,7 @@ var/datum/antagonist/mutineer/mutineers
|
||||
proc/get_head_loyalist_candidates()
|
||||
var/list/candidates[0]
|
||||
for(var/mob/loyalist in player_list)
|
||||
if(loyalist.mind && loyalist.mind.assigned_role == "Station Administrator")
|
||||
if(loyalist.mind && loyalist.mind.assigned_role == "Colony Director")
|
||||
candidates.Add(loyalist.mind)
|
||||
return candidates
|
||||
|
||||
@@ -47,7 +47,7 @@ var/datum/antagonist/mutineer/mutineers
|
||||
var/list/candidates[0]
|
||||
for(var/mob/mutineer in player_list)
|
||||
if(mutineer.client.prefs.be_special & BE_MUTINEER)
|
||||
for(var/job in command_positions - "Station Administrator")
|
||||
for(var/job in command_positions - "Colony Director")
|
||||
if(mutineer.mind && mutineer.mind.assigned_role == job)
|
||||
candidates.Add(mutineer.mind)
|
||||
return candidates
|
||||
|
||||
@@ -13,7 +13,7 @@ var/datum/antagonist/ert/ert
|
||||
and before taking extreme actions, please try to also contact the administration! \
|
||||
Think through your actions and make the roleplay immersive! <b>Please remember all \
|
||||
rules aside from those without explicit exceptions apply to the ERT.</b>"
|
||||
leader_welcome_text = "As leader of the Emergency Response Team, you answer only to the Company, and have authority to override the Station Administrator where it is necessary to achieve your mission goals. It is recommended that you attempt to cooperate with the Station Administrator where possible, however."
|
||||
leader_welcome_text = "As leader of the Emergency Response Team, you answer only to the Company, and have authority to override the Colony Director where it is necessary to achieve your mission goals. It is recommended that you attempt to cooperate with the Colony Director where possible, however."
|
||||
landmark_id = "Response Team"
|
||||
id_type = /obj/item/weapon/card/id/centcom/ERT
|
||||
|
||||
|
||||
@@ -55,7 +55,7 @@ var/datum/antagonist/raider/raiders
|
||||
/obj/item/clothing/suit/pirate,
|
||||
/obj/item/clothing/suit/hgpirate,
|
||||
/obj/item/clothing/suit/storage/toggle/bomber,
|
||||
/obj/item/clothing/suit/storage/leather_jacket,
|
||||
/obj/item/clothing/suit/storage/toggle/leather_jacket,
|
||||
/obj/item/clothing/suit/storage/toggle/brown_jacket,
|
||||
/obj/item/clothing/suit/storage/toggle/hoodie,
|
||||
/obj/item/clothing/suit/storage/toggle/hoodie/black,
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
bantype = "changeling"
|
||||
feedback_tag = "changeling_objective"
|
||||
restricted_jobs = list("AI", "Cyborg")
|
||||
protected_jobs = list("Security Officer", "Warden", "Detective", "Head of Security", "Station Administrator")
|
||||
protected_jobs = list("Security Officer", "Warden", "Detective", "Head of Security", "Colony Director")
|
||||
welcome_text = "Use say \"#g message\" to communicate with your fellow changelings. Remember: you get all of their absorbed DNA if you absorb them."
|
||||
flags = ANTAG_SUSPICIOUS | ANTAG_RANDSPAWN | ANTAG_VOTABLE
|
||||
antaghud_indicator = "hudchangeling"
|
||||
|
||||
@@ -11,7 +11,7 @@ var/datum/antagonist/cultist/cult
|
||||
role_text = "Cultist"
|
||||
role_text_plural = "Cultists"
|
||||
bantype = "cultist"
|
||||
restricted_jobs = list("Chaplain","AI", "Cyborg", "Internal Affairs Agent", "Head of Security", "Station Administrator")
|
||||
restricted_jobs = list("Chaplain","AI", "Cyborg", "Internal Affairs Agent", "Head of Security", "Colony Director")
|
||||
protected_jobs = list("Security Officer", "Warden", "Detective")
|
||||
role_type = BE_CULTIST
|
||||
feedback_tag = "cult_objective"
|
||||
@@ -110,13 +110,13 @@ var/datum/antagonist/cultist/cult
|
||||
. = ..()
|
||||
if(.)
|
||||
player << "You catch a glimpse of the Realm of Nar-Sie, the Geometer of Blood. You now see how flimsy the world is, you see that it should be open to the knowledge of That Which Waits. Assist your new compatriots in their dark dealings. Their goals are yours, and yours are theirs. You serve the Dark One above all else. Bring It back."
|
||||
if(player.current && !istype(player.current, /mob/living/simple_animal/construct))
|
||||
player.current.add_language(LANGUAGE_CULT)
|
||||
|
||||
/datum/antagonist/cultist/remove_antagonist(var/datum/mind/player, var/show_message, var/implanted)
|
||||
. = ..()
|
||||
if(. && player.current && !istype(player.current, /mob/living/simple_animal/construct))
|
||||
player.current.remove_language(LANGUAGE_CULT)
|
||||
if(player.current && !istype(player.current, /mob/living/simple_animal/construct))
|
||||
player.current.add_language(LANGUAGE_CULT)
|
||||
|
||||
/datum/antagonist/cultist/remove_antagonist(var/datum/mind/player, var/show_message, var/implanted)
|
||||
. = ..()
|
||||
if(. && player.current && !istype(player.current, /mob/living/simple_animal/construct))
|
||||
player.current.remove_language(LANGUAGE_CULT)
|
||||
|
||||
/datum/antagonist/cultist/can_become_antag(var/datum/mind/player)
|
||||
if(!..())
|
||||
|
||||
@@ -29,7 +29,7 @@ var/datum/antagonist/revolutionary/revs
|
||||
faction_indicator = "rev"
|
||||
faction_invisible = 1
|
||||
|
||||
restricted_jobs = list("Internal Affairs Agent", "AI", "Cyborg", "Station Administrator", "Head of Personnel", "Head of Security", "Chief Engineer", "Research Director", "Chief Medical Officer")
|
||||
restricted_jobs = list("Internal Affairs Agent", "AI", "Cyborg", "Colony Director", "Head of Personnel", "Head of Security", "Chief Engineer", "Research Director", "Chief Medical Officer")
|
||||
protected_jobs = list("Security Officer", "Warden", "Detective")
|
||||
|
||||
/datum/antagonist/revolutionary/New()
|
||||
|
||||
@@ -3,9 +3,9 @@ var/datum/antagonist/traitor/traitors
|
||||
// Inherits most of its vars from the base datum.
|
||||
/datum/antagonist/traitor
|
||||
id = MODE_TRAITOR
|
||||
protected_jobs = list("Security Officer", "Warden", "Detective", "Internal Affairs Agent", "Head of Security", "Station Administrator")
|
||||
protected_jobs = list("Security Officer", "Warden", "Detective", "Internal Affairs Agent", "Head of Security", "Colony Director")
|
||||
flags = ANTAG_SUSPICIOUS | ANTAG_RANDSPAWN | ANTAG_VOTABLE
|
||||
|
||||
|
||||
/datum/antagonist/traitor/auto
|
||||
id = MODE_AUTOTRAITOR
|
||||
allow_latejoin = 1
|
||||
|
||||
@@ -1140,7 +1140,7 @@ area/space/atmosalert()
|
||||
sound_env = MEDIUM_SOFTFLOOR
|
||||
|
||||
/area/crew_quarters/captain
|
||||
name = "\improper Command - Station Administrator's Office"
|
||||
name = "\improper Command - Colony Director's Office"
|
||||
icon_state = "captain"
|
||||
sound_env = MEDIUM_SOFTFLOOR
|
||||
|
||||
@@ -2845,4 +2845,4 @@ var/list/the_station_areas = list (
|
||||
H << S
|
||||
|
||||
spawn(60) .()
|
||||
*/
|
||||
*/
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
/atom/movable
|
||||
layer = 3
|
||||
appearance_flags = TILE_BOUND
|
||||
var/last_move = null
|
||||
var/anchored = 0
|
||||
// var/elevation = 2 - not used anywhere
|
||||
|
||||
@@ -27,7 +27,7 @@
|
||||
desc = "A grotesque blade made out of bone and flesh that cleaves through people as a hot knife through butter."
|
||||
icon = 'icons/obj/weapons.dmi'
|
||||
icon_state = "arm_blade"
|
||||
w_class = 5.0
|
||||
w_class = ITEMSIZE_HUGE
|
||||
force = 40
|
||||
sharp = 1
|
||||
edge = 1
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
name = "cult blade"
|
||||
desc = "An arcane weapon wielded by the followers of Nar-Sie."
|
||||
icon_state = "cultblade"
|
||||
w_class = 4
|
||||
w_class = ITEMSIZE_LARGE
|
||||
force = 30
|
||||
throwforce = 10
|
||||
hitsound = 'sound/weapons/bladeslice.ogg'
|
||||
@@ -105,7 +105,7 @@
|
||||
name = "cult armour"
|
||||
icon_state = "cult_armour"
|
||||
desc = "A bulky suit of armour, bristling with spikes. It looks space-worthy."
|
||||
w_class = 3
|
||||
w_class = ITEMSIZE_NORMAL
|
||||
allowed = list(/obj/item/weapon/book/tome,/obj/item/weapon/melee/cultblade,/obj/item/weapon/tank/emergency_oxygen,/obj/item/device/suit_cooling_unit)
|
||||
slowdown = 1
|
||||
armor = list(melee = 60, bullet = 50, laser = 30, energy = 15, bomb = 30, bio = 30, rad = 30)
|
||||
|
||||
@@ -183,7 +183,7 @@ var/global/list/rnwords = list("ire","ego","nahlizet","certum","veri","jatkaa","
|
||||
icon_state ="tome"
|
||||
throw_speed = 1
|
||||
throw_range = 5
|
||||
w_class = 2.0
|
||||
w_class = ITEMSIZE_SMALL
|
||||
unique = 1
|
||||
var/tomedat = ""
|
||||
var/list/words = list("ire" = "ire", "ego" = "ego", "nahlizet" = "nahlizet", "certum" = "certum", "veri" = "veri", "jatkaa" = "jatkaa", "balaq" = "balaq", "mgar" = "mgar", "karazet" = "karazet", "geeri" = "geeri")
|
||||
@@ -434,7 +434,7 @@ var/global/list/rnwords = list("ire","ego","nahlizet","certum","veri","jatkaa","
|
||||
return
|
||||
|
||||
/obj/item/weapon/book/tome/imbued //admin tome, spawns working runes without waiting
|
||||
w_class = 2.0
|
||||
w_class = ITEMSIZE_SMALL
|
||||
var/cultistsonly = 1
|
||||
attack_self(mob/user as mob)
|
||||
if(src.cultistsonly && !iscultist(usr))
|
||||
|
||||
@@ -301,9 +301,9 @@ Would like to add a law like "Law x is _______" where x = a number, and _____ is
|
||||
M.add_ion_law("HUMANS NEED TO EAT [what2pref] [what2] TO SURVIVE")
|
||||
if(5)
|
||||
M << "<br>"
|
||||
M << "<span class='danger'>THE STATION ADMINISTRATOR, HOP AND HOS ARE [who2]...LAWS UPDATED</span>"
|
||||
M << "<span class='danger'>THE COLONY DIRECTOR, HOP AND HOS ARE [who2]...LAWS UPDATED</span>"
|
||||
M << "<br>"
|
||||
M.add_ion_law("THE STATION ADMINISTRATOR, HOP AND HOS ARE [who2]")
|
||||
M.add_ion_law("THE COLONY DIRECTOR, HOP AND HOS ARE [who2]")
|
||||
if(6)
|
||||
M << "<br>"
|
||||
M << "<span class='danger'>THE STATION IS BUILT FOR [who2]...LAWS UPDATED</span>"
|
||||
|
||||
@@ -274,8 +274,8 @@ var/global/datum/controller/gameticker/ticker
|
||||
else if(!player.mind.assigned_role)
|
||||
continue
|
||||
else
|
||||
player.create_character()
|
||||
qdel(player)
|
||||
if (player.create_character()) // VOREStation Edit
|
||||
qdel(player)
|
||||
|
||||
|
||||
proc/collect_minds()
|
||||
@@ -288,7 +288,7 @@ var/global/datum/controller/gameticker/ticker
|
||||
var/captainless=1
|
||||
for(var/mob/living/carbon/human/player in player_list)
|
||||
if(player && player.mind && player.mind.assigned_role)
|
||||
if(player.mind.assigned_role == "Station Administrator")
|
||||
if(player.mind.assigned_role == "Colony Director")
|
||||
captainless=0
|
||||
if(!player_is_antag(player.mind, only_offstation_roles = 1))
|
||||
job_master.EquipRank(player, player.mind.assigned_role, 0)
|
||||
@@ -297,7 +297,7 @@ var/global/datum/controller/gameticker/ticker
|
||||
if(captainless)
|
||||
for(var/mob/M in player_list)
|
||||
if(!istype(M,/mob/new_player))
|
||||
M << "Station Administratorship not forced on anyone."
|
||||
M << "Colony Directorship not forced on anyone."
|
||||
|
||||
|
||||
proc/process()
|
||||
|
||||
@@ -10,3 +10,4 @@
|
||||
auto_recall_shuttle = 0
|
||||
antag_tags = list(MODE_MALFUNCTION)
|
||||
disabled_jobs = list("AI")
|
||||
votable = 0
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/datum/game_mode/conflux
|
||||
name = "Technomancer & Cult"
|
||||
name = "Technomancers & Cult"
|
||||
round_description = "A space wizard and a cult have invaded the station!"
|
||||
extended_round_description = "Cultists and wizards spawn during this round."
|
||||
config_tag = "conflux"
|
||||
@@ -9,4 +9,4 @@
|
||||
end_on_antag_death = 1
|
||||
antag_tags = list(MODE_TECHNOMANCER, MODE_CULTIST)
|
||||
require_all_templates = 1
|
||||
votable = 0
|
||||
votable = 1
|
||||
@@ -1,5 +1,5 @@
|
||||
/datum/game_mode/lizard
|
||||
name = "Technomancer & Changelings"
|
||||
name = "Technomancers & Changelings"
|
||||
round_description = "A space wizard and changelings have invaded the station!"
|
||||
extended_round_description = "Changelings and a wizard spawn during this round."
|
||||
config_tag = "lizard"
|
||||
@@ -9,4 +9,4 @@
|
||||
end_on_antag_death = 0
|
||||
antag_tags = list(MODE_TECHNOMANCER, MODE_CHANGELING)
|
||||
require_all_templates = 1
|
||||
votable = 0
|
||||
votable = 1
|
||||
@@ -1,5 +1,5 @@
|
||||
/datum/game_mode/visitors
|
||||
name = "Technomancer & Ninja"
|
||||
name = "Technomancers & Ninja"
|
||||
round_description = "A space wizard and a ninja have invaded the station!"
|
||||
extended_round_description = "A ninja and wizard spawn during this round."
|
||||
config_tag = "visitors"
|
||||
@@ -9,4 +9,4 @@
|
||||
end_on_antag_death = 0
|
||||
antag_tags = list(MODE_TECHNOMANCER, MODE_NINJA)
|
||||
require_all_templates = 1
|
||||
votable = 0
|
||||
votable = 1
|
||||
@@ -564,7 +564,7 @@ datum
|
||||
|
||||
captainslaser
|
||||
steal_target = /obj/item/weapon/gun/energy/captain
|
||||
explanation_text = "Steal the captain's antique laser gun."
|
||||
explanation_text = "Steal the Colony Director's antique laser gun."
|
||||
weight = 20
|
||||
|
||||
get_points(var/job)
|
||||
|
||||
@@ -13,4 +13,5 @@
|
||||
required_players_secret = 5
|
||||
required_enemies = 1
|
||||
end_on_antag_death = 0
|
||||
antag_tags = list(MODE_NINJA)
|
||||
antag_tags = list(MODE_NINJA)
|
||||
votable = 0
|
||||
@@ -4,7 +4,7 @@
|
||||
icon_state = "pinoff"
|
||||
flags = CONDUCT
|
||||
slot_flags = SLOT_BELT
|
||||
w_class = 2.0
|
||||
w_class = ITEMSIZE_SMALL
|
||||
item_state = "electronic"
|
||||
throw_speed = 4
|
||||
throw_range = 20
|
||||
|
||||
@@ -423,11 +423,11 @@ datum/objective/steal
|
||||
var/target_name
|
||||
|
||||
var/global/possible_items[] = list(
|
||||
"the captain's antique laser gun" = /obj/item/weapon/gun/energy/captain,
|
||||
"the Colony Director's antique laser gun" = /obj/item/weapon/gun/energy/captain,
|
||||
"a hand teleporter" = /obj/item/weapon/hand_tele,
|
||||
"an RCD" = /obj/item/weapon/rcd,
|
||||
"a jetpack" = /obj/item/weapon/tank/jetpack,
|
||||
"a captain's jumpsuit" = /obj/item/clothing/under/rank/captain,
|
||||
"a colony director's jumpsuit" = /obj/item/clothing/under/rank/captain,
|
||||
"a functional AI" = /obj/item/device/aicard,
|
||||
"a pair of magboots" = /obj/item/clothing/shoes/magboots,
|
||||
"the station blueprints" = /obj/item/blueprints,
|
||||
@@ -441,7 +441,7 @@ datum/objective/steal
|
||||
"a head of security's jumpsuit" = /obj/item/clothing/under/rank/head_of_security,
|
||||
"a head of personnel's jumpsuit" = /obj/item/clothing/under/rank/head_of_personnel,
|
||||
"the hypospray" = /obj/item/weapon/reagent_containers/hypospray,
|
||||
"the captain's pinpointer" = /obj/item/weapon/pinpointer,
|
||||
"the colony director's pinpointer" = /obj/item/weapon/pinpointer,
|
||||
"an ablative armor vest" = /obj/item/clothing/suit/armor/laserproof,
|
||||
)
|
||||
|
||||
|
||||
@@ -11,7 +11,7 @@
|
||||
obj_path = /obj/item/weapon/antag_spawner/technomancer_apprentice
|
||||
|
||||
/obj/item/weapon/antag_spawner
|
||||
w_class = 1
|
||||
w_class = ITEMSIZE_TINY
|
||||
var/used = 0
|
||||
|
||||
/obj/item/weapon/antag_spawner/proc/spawn_antag(client/C, turf/T)
|
||||
|
||||
@@ -27,7 +27,7 @@ var/list/all_technomancer_assistance = typesof(/datum/technomancer/assistance) -
|
||||
requisition various things from.. where ever they came from."
|
||||
icon = 'icons/obj/storage.dmi'
|
||||
icon_state ="scientology" //placeholder
|
||||
w_class = 2
|
||||
w_class = ITEMSIZE_SMALL
|
||||
var/budget = 1000
|
||||
var/max_budget = 1000
|
||||
var/mob/living/carbon/human/owner = null
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
icon = 'icons/obj/technomancer.dmi'
|
||||
icon_state = "technomancer_core"
|
||||
item_state = "technomancer_core"
|
||||
w_class = 5
|
||||
w_class = ITEMSIZE_HUGE
|
||||
slot_flags = SLOT_BACK
|
||||
unacidable = 1
|
||||
origin_tech = list(
|
||||
@@ -86,6 +86,8 @@
|
||||
if(wearer && wearer.mind)
|
||||
if(!(technomancers.is_antagonist(wearer.mind))) // In case someone tries to wear a stolen core.
|
||||
wearer.adjust_instability(20)
|
||||
if(!wearer || wearer.stat == DEAD) // Unlock if we're dead or not worn.
|
||||
canremove = TRUE
|
||||
|
||||
/obj/item/weapon/technomancer_core/proc/regenerate()
|
||||
energy = min(max(energy + regen_rate, 0), max_energy)
|
||||
@@ -287,4 +289,12 @@
|
||||
|
||||
/obj/item/weapon/technomancer_core/summoner/pay_dues()
|
||||
if(summoned_mobs.len)
|
||||
pay_energy( round(summoned_mobs.len) )
|
||||
pay_energy( round(summoned_mobs.len) )
|
||||
|
||||
/obj/item/weapon/technomancer_core/verb/toggle_lock()
|
||||
set name = "Toggle Core Lock"
|
||||
set category = "Object"
|
||||
set desc = "Toggles the locking mechanism on your manipulation core."
|
||||
|
||||
canremove = !canremove
|
||||
to_chat(usr, "<span class='notice'>You [canremove ? "de" : ""]activate the locking mechanism on \the [src].</span>")
|
||||
@@ -11,7 +11,7 @@
|
||||
icon = 'icons/obj/device.dmi'
|
||||
icon_state = "hand_tele" //temporary
|
||||
var/uses = 3.0
|
||||
w_class = 1
|
||||
w_class = ITEMSIZE_TINY
|
||||
item_state = "paper"
|
||||
origin_tech = list(TECH_BLUESPACE = 4, TECH_POWER = 3)
|
||||
|
||||
|
||||
@@ -83,9 +83,9 @@
|
||||
name = "Belt of Holding"
|
||||
desc = "Can hold more than you'd expect."
|
||||
icon_state = "ems"
|
||||
max_w_class = 3 // Can hold normal sized items.
|
||||
max_w_class = ITEMSIZE_NORMAL // Can hold normal sized items.
|
||||
storage_slots = 14 // Twice the capacity of a typical belt.
|
||||
max_storage_space = 42
|
||||
max_storage_space = ITEMSIZE_COST_NORMAL * 14
|
||||
|
||||
/datum/technomancer/equipment/thermals
|
||||
name = "Thermoncle"
|
||||
@@ -139,6 +139,7 @@
|
||||
icon = 'icons/obj/technomancer.dmi'
|
||||
icon_state = "scepter"
|
||||
force = 15
|
||||
slot_flags = SLOT_BELT
|
||||
|
||||
/obj/item/weapon/scepter/attack_self(mob/living/carbon/human/user)
|
||||
var/obj/item/item_to_test = user.get_other_hand(src)
|
||||
|
||||
@@ -5,15 +5,15 @@
|
||||
// Proc: adjust_instability()
|
||||
// Parameters: 0
|
||||
// Description: Does nothing, because inheritence.
|
||||
/mob/living/proc/adjust_instability()
|
||||
return
|
||||
/mob/living/proc/adjust_instability(var/amount)
|
||||
instability = min(max(instability + amount, 0), 200)
|
||||
|
||||
// Proc: adjust_instability()
|
||||
// Parameters: 1 (amount - how much instability to give)
|
||||
// Description: Adds or subtracks instability to the mob, then updates the hud.
|
||||
/mob/living/carbon/human/adjust_instability(var/amount)
|
||||
instability = min(max(instability + amount, 0), 200)
|
||||
instability_update_hud()
|
||||
..()
|
||||
|
||||
// Proc: instability_update_hud()
|
||||
// Parameters: 0
|
||||
@@ -35,7 +35,7 @@
|
||||
// Proc: Life()
|
||||
// Parameters: 0
|
||||
// Description: Makes instability tick along with Life().
|
||||
/mob/living/carbon/human/Life()
|
||||
/mob/living/Life()
|
||||
. = ..()
|
||||
handle_instability()
|
||||
|
||||
@@ -43,9 +43,8 @@
|
||||
// Parameters: 0
|
||||
// Description: Makes instability decay. instability_effects() handles the bad effects for having instability. It will also hold back
|
||||
// from causing bad effects more than one every ten seconds, to prevent sudden death from angry RNG.
|
||||
/mob/living/carbon/human/proc/handle_instability()
|
||||
/mob/living/proc/handle_instability()
|
||||
instability = round(Clamp(instability, 0, 200))
|
||||
instability_update_hud()
|
||||
//This should cushon against really bad luck.
|
||||
if(instability && last_instability_event < (world.time - 10 SECONDS) && prob(20))
|
||||
instability_effects()
|
||||
@@ -65,6 +64,10 @@
|
||||
if(101 to 200)
|
||||
adjust_instability(-40)
|
||||
|
||||
/mob/living/carbon/human/handle_instability()
|
||||
..()
|
||||
instability_update_hud()
|
||||
|
||||
/*
|
||||
[16:18:08] <PsiOmegaDelta> Sparks
|
||||
[16:18:10] <PsiOmegaDelta> Wormholes
|
||||
@@ -78,17 +81,85 @@
|
||||
// Parameters: 0
|
||||
// Description: Does a variety of bad effects to the entity holding onto the instability, with more severe effects occuring if they have
|
||||
// a lot of instability.
|
||||
/mob/living/carbon/human/proc/instability_effects()
|
||||
/mob/living/proc/instability_effects()
|
||||
last_instability_event = world.time
|
||||
spawn(1)
|
||||
var/image/instability_flash = image('icons/obj/spells.dmi',"instability")
|
||||
overlays |= instability_flash
|
||||
sleep(4)
|
||||
overlays.Remove(instability_flash)
|
||||
qdel(instability_flash)
|
||||
radiate_instability()
|
||||
|
||||
/mob/living/silicon/instability_effects()
|
||||
if(instability)
|
||||
var/rng = 0
|
||||
last_instability_event = world.time
|
||||
spawn(1)
|
||||
var/image/instability_flash = image('icons/obj/spells.dmi',"instability")
|
||||
overlays |= instability_flash
|
||||
sleep(4)
|
||||
overlays.Remove(instability_flash)
|
||||
qdel(instability_flash)
|
||||
radiate_instability()
|
||||
..()
|
||||
switch(instability)
|
||||
if(1 to 10) //Harmless
|
||||
return
|
||||
if(11 to 30) //Minor
|
||||
rng = rand(0,1)
|
||||
switch(rng)
|
||||
if(0)
|
||||
var/datum/effect/effect/system/spark_spread/sparks = PoolOrNew(/datum/effect/effect/system/spark_spread)
|
||||
sparks.set_up(5, 0, src)
|
||||
sparks.attach(loc)
|
||||
sparks.start()
|
||||
visible_message("<span class='warning'>Electrical sparks manifest from nowhere around \the [src]!</span>")
|
||||
qdel(sparks)
|
||||
if(1)
|
||||
return
|
||||
|
||||
if(31 to 50) //Moderate
|
||||
rng = rand(0,4)
|
||||
switch(rng)
|
||||
if(0)
|
||||
electrocute_act(instability * 0.3, "unstable energies")
|
||||
if(1)
|
||||
adjustFireLoss(instability * 0.15) //7.5 burn @ 50 instability
|
||||
src << "<span class='danger'>Your chassis alerts you to overheating from an unknown external force!</span>"
|
||||
if(2)
|
||||
adjustBruteLoss(instability * 0.15) //7.5 brute @ 50 instability
|
||||
src << "<span class='danger'>Your chassis makes the sound of metal groaning!</span>"
|
||||
if(3)
|
||||
safe_blink(src, range = 6)
|
||||
src << "<span class='warning'>You're teleported against your will!</span>"
|
||||
if(4)
|
||||
emp_act(2)
|
||||
|
||||
if(51 to 100) //Severe
|
||||
rng = rand(0,3)
|
||||
switch(rng)
|
||||
if(0)
|
||||
electrocute_act(instability * 0.5, "extremely unstable energies")
|
||||
if(1)
|
||||
emp_act(2)
|
||||
if(2)
|
||||
adjustFireLoss(instability * 0.3) //30 burn @ 100 instability
|
||||
src << "<span class='danger'>Your chassis alerts you to extreme overheating from an unknown external force!</span>"
|
||||
if(3)
|
||||
adjustBruteLoss(instability * 0.3) //30 brute @ 100 instability
|
||||
src << "<span class='danger'>Your chassis makes the sound of metal groaning and tearing!</span>"
|
||||
|
||||
if(101 to 200) //Lethal
|
||||
rng = rand(0,4)
|
||||
switch(rng)
|
||||
if(0)
|
||||
electrocute_act(instability, "extremely unstable energies")
|
||||
if(1)
|
||||
emp_act(1)
|
||||
if(2)
|
||||
adjustFireLoss(instability * 0.4) //40 burn @ 100 instability
|
||||
src << "<span class='danger'>Your chassis alerts you to extreme overheating from an unknown external force!</span>"
|
||||
if(3)
|
||||
adjustBruteLoss(instability * 0.4) //40 brute @ 100 instability
|
||||
src << "<span class='danger'>Your chassis makes the sound of metal groaning and tearing!</span>"
|
||||
|
||||
/mob/living/carbon/human/instability_effects()
|
||||
if(instability)
|
||||
var/rng = 0
|
||||
..()
|
||||
switch(instability)
|
||||
if(1 to 10) //Harmless
|
||||
return
|
||||
@@ -194,7 +265,7 @@
|
||||
if(7)
|
||||
adjustToxLoss(instability * 0.40) //25 tox @ 100 instability
|
||||
|
||||
/mob/living/carbon/human/proc/radiate_instability()
|
||||
/mob/living/proc/radiate_instability()
|
||||
var/distance = round(sqrt(instability / 2))
|
||||
if(instability <= 30)
|
||||
distance = 0
|
||||
@@ -210,6 +281,8 @@
|
||||
var/armor = getarmor(null, "energy")
|
||||
var/armor_factor = abs( (armor - 100) / 100)
|
||||
outgoing_instability = outgoing_instability * armor_factor
|
||||
if(outgoing_instability)
|
||||
to_chat(H, "<span class='warning'>The purple glow makes you feel strange...</span>")
|
||||
H.adjust_instability(outgoing_instability)
|
||||
|
||||
set_light(distance, distance * 2, l_color = "#C26DDE")
|
||||
|
||||
@@ -73,7 +73,7 @@
|
||||
var/turf/location = get_turf(H)
|
||||
location.hotspot_expose(1000, 50, 1)
|
||||
|
||||
owner.adjust_instability(1)
|
||||
adjust_instability(1)
|
||||
|
||||
/obj/item/weapon/spell/aura/frost
|
||||
name = "chilling aura"
|
||||
@@ -95,7 +95,7 @@
|
||||
var/turf/location = get_turf(H)
|
||||
location.hotspot_expose(1, 50, 1)
|
||||
|
||||
owner.adjust_instability(1)
|
||||
adjust_instability(1)
|
||||
|
||||
|
||||
|
||||
@@ -128,7 +128,7 @@
|
||||
for(var/mob/living/L in mobs_to_heal)
|
||||
L.adjustBruteLoss(-5)
|
||||
L.adjustFireLoss(-5)
|
||||
owner.adjust_instability(2)
|
||||
adjust_instability(2)
|
||||
|
||||
/obj/item/weapon/spell/aura/biomed/on_use_cast(mob/living/user)
|
||||
heal_allies_only = !heal_allies_only
|
||||
|
||||
@@ -60,6 +60,7 @@
|
||||
"Nymph Chirping" = 'sound/misc/nymphchirp.ogg',
|
||||
"Sad Trombone" = 'sound/misc/sadtrombone.ogg',
|
||||
"Honk" = 'sound/items/bikehorn.ogg',
|
||||
"Bone Fracture" = "fracture",
|
||||
)
|
||||
var/selected_sound = null
|
||||
|
||||
@@ -75,10 +76,10 @@
|
||||
var/turf/T = get_turf(hit_atom)
|
||||
if(selected_sound && pay_energy(200))
|
||||
playsound(T, selected_sound, 80, 1, -1)
|
||||
owner.adjust_instability(1)
|
||||
adjust_instability(1)
|
||||
// Air Horn time.
|
||||
if(selected_sound == 'sound/items/AirHorn.ogg' && pay_energy(3800))
|
||||
owner.adjust_instability(49) // Pay for your sins.
|
||||
adjust_instability(49) // Pay for your sins.
|
||||
for(var/mob/living/carbon/M in ohearers(6, T))
|
||||
if(M.get_ear_protection() >= 2)
|
||||
continue
|
||||
|
||||
@@ -12,7 +12,7 @@
|
||||
icon_state = "generic"
|
||||
cast_methods = null
|
||||
aspect = ASPECT_BIOMED
|
||||
glow_color = "#0000FF"
|
||||
glow_color = "#33CC33"
|
||||
var/regen_tick = 0
|
||||
var/heal_allies_only = 1
|
||||
|
||||
@@ -23,16 +23,16 @@
|
||||
if(regen_tick % 5 == 0)
|
||||
var/list/nearby_mobs = range(4,owner)
|
||||
var/list/mobs_to_heal = list()
|
||||
if(heal_allies_only)
|
||||
for(var/mob/living/L in nearby_mobs)
|
||||
for(var/mob/living/L in nearby_mobs)
|
||||
if(heal_allies_only)
|
||||
if(is_ally(L))
|
||||
mobs_to_heal |= L
|
||||
else
|
||||
mobs_to_heal = nearby_mobs //Heal everyone!
|
||||
else
|
||||
mobs_to_heal |= L // Heal everyone!
|
||||
for(var/mob/living/L in mobs_to_heal)
|
||||
L.adjustBruteLoss(-2)
|
||||
L.adjustFireLoss(-2)
|
||||
owner.adjust_instability(2)
|
||||
adjust_instability(2)
|
||||
|
||||
/obj/item/weapon/spell/aura/biomed/on_use_cast(mob/living/user)
|
||||
heal_allies_only = !heal_allies_only
|
||||
|
||||
@@ -47,4 +47,4 @@
|
||||
T.hotspot_expose(1000, 50, 1)
|
||||
T.create_fire(fire_power)
|
||||
|
||||
owner.adjust_instability(1)
|
||||
adjust_instability(1)
|
||||
|
||||
@@ -36,4 +36,4 @@
|
||||
var/cold_factor = abs(protection - 1)
|
||||
H.bodytemperature = max( (H.bodytemperature - temp_change) * cold_factor, temp_cap)
|
||||
|
||||
owner.adjust_instability(1)
|
||||
adjust_instability(1)
|
||||
|
||||
@@ -39,4 +39,4 @@
|
||||
L.electrocute_act(power, src, 1.0, BP_TORSO)
|
||||
|
||||
|
||||
owner.adjust_instability(3)
|
||||
adjust_instability(3)
|
||||
@@ -40,4 +40,4 @@
|
||||
L << "<span class='danger'>You feel almost like you're melting from the inside!</span>"
|
||||
|
||||
|
||||
owner.adjust_instability(2)
|
||||
adjust_instability(2)
|
||||
@@ -150,7 +150,7 @@
|
||||
attack \the [L].</span>"
|
||||
//This is to stop someone from controlling beepsky and getting him to stun someone 5 times a second.
|
||||
user.setClickCooldown(8)
|
||||
owner.adjust_instability(controlled_mobs.len)
|
||||
adjust_instability(controlled_mobs.len)
|
||||
|
||||
else if(isturf(hit_atom))
|
||||
var/turf/T = hit_atom
|
||||
@@ -159,7 +159,7 @@
|
||||
return 0
|
||||
if(pay_energy(50 * controlled_mobs.len))
|
||||
move_all(T)
|
||||
owner.adjust_instability(controlled_mobs.len)
|
||||
adjust_instability(controlled_mobs.len)
|
||||
user << "<span class='notice'>You command your [controlled_mobs.len > 1 ? "entities" : "[controlled_mobs[1]]"] to move \
|
||||
towards \the [T].</span>"
|
||||
|
||||
|
||||
@@ -46,7 +46,7 @@
|
||||
visible_message("<span class='danger'>\The [user] reaches out towards \the [L] with the flaming hand, and they ignite!</span>")
|
||||
L << "<span class='danger'>You ignite!</span>"
|
||||
L.fire_act()
|
||||
owner.adjust_instability(12)
|
||||
adjust_instability(12)
|
||||
else
|
||||
//This is needed in order for the welder to work, and works similarly to grippers.
|
||||
welder.loc = user
|
||||
@@ -54,7 +54,7 @@
|
||||
if(!resolved && welder && hit_atom)
|
||||
if(pay_energy(500))
|
||||
welder.attack(hit_atom, user, def_zone)
|
||||
owner.adjust_instability(4)
|
||||
adjust_instability(4)
|
||||
if(welder && user && (welder.loc == user))
|
||||
welder.loc = src
|
||||
else
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
/datum/technomancer/spell/mend_burns
|
||||
name = "Mend Burns"
|
||||
desc = "Heals minor burns, such as from exposure to flame, electric shock, or lasers. \
|
||||
Instability is split between the target and technomancer, if seperate."
|
||||
desc = "Heals minor burns, such as from exposure to flame, electric shock, or lasers."
|
||||
cost = 50
|
||||
obj_path = /obj/item/weapon/spell/insert/mend_burns
|
||||
ability_icon_state = "tech_mendburns"
|
||||
@@ -20,10 +19,10 @@
|
||||
spawn(1)
|
||||
if(ishuman(host))
|
||||
var/mob/living/carbon/human/H = host
|
||||
var/heal_power = host == origin ? 10 : 30
|
||||
origin.adjust_instability(10)
|
||||
for(var/i = 0, i<5,i++)
|
||||
if(H)
|
||||
H.adjustFireLoss(-5)
|
||||
H.adjust_instability(2.5)
|
||||
origin.adjust_instability(2.5)
|
||||
sleep(10)
|
||||
on_expire()
|
||||
H.adjustFireLoss(-heal_power / 5)
|
||||
sleep(1 SECOND)
|
||||
on_expire()
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
/datum/technomancer/spell/mend_metal
|
||||
name = "Mend Metal"
|
||||
desc = "Restores integrity to external robotic components. Instability is split between the target and technomancer, if seperate."
|
||||
desc = "Restores integrity to external robotic components."
|
||||
cost = 50
|
||||
obj_path = /obj/item/weapon/spell/insert/mend_metal
|
||||
ability_icon_state = "tech_mendwounds"
|
||||
@@ -19,14 +19,13 @@
|
||||
spawn(1)
|
||||
if(ishuman(host))
|
||||
var/mob/living/carbon/human/H = host
|
||||
var/heal_power = host == origin ? 10 : 30
|
||||
origin.adjust_instability(10)
|
||||
for(var/i = 0, i<5,i++)
|
||||
if(H)
|
||||
for(var/obj/item/organ/external/O in H.organs)
|
||||
if(O.robotic < ORGAN_ROBOT) // Robot parts only.
|
||||
continue
|
||||
O.heal_damage(5, 0, internal = 1, robo_repair = 1)
|
||||
|
||||
H.adjust_instability(2.5)
|
||||
origin.adjust_instability(2.5)
|
||||
O.heal_damage(heal_power / 5, 0, internal = 1, robo_repair = 1)
|
||||
sleep(1 SECOND)
|
||||
on_expire()
|
||||
on_expire()
|
||||
|
||||
@@ -1,15 +1,15 @@
|
||||
/datum/technomancer/spell/mend_organs
|
||||
name = "Mend Organs"
|
||||
desc = "Heals the target's internal organs, both organic and robotic. Instability is split between the target \
|
||||
and technomancer, if seperate."
|
||||
cost = 50
|
||||
name = "Great Mend Wounds"
|
||||
desc = "Greatly heals the target's wounds, both external and internal. Restores internal organs to functioning states, even if \
|
||||
robotic, reforms bones, patches internal bleeding, and restores missing blood."
|
||||
cost = 100
|
||||
obj_path = /obj/item/weapon/spell/insert/mend_organs
|
||||
ability_icon_state = "tech_mendwounds"
|
||||
category = SUPPORT_SPELLS
|
||||
|
||||
/obj/item/weapon/spell/insert/mend_organs
|
||||
name = "mend organs"
|
||||
desc = "Now nobody will ever need surgery."
|
||||
name = "great mend wounds"
|
||||
desc = "A walking medbay is now you!"
|
||||
icon_state = "mend_wounds"
|
||||
cast_methods = CAST_MELEE
|
||||
aspect = ASPECT_BIOMED
|
||||
@@ -20,13 +20,33 @@
|
||||
spawn(1)
|
||||
if(ishuman(host))
|
||||
var/mob/living/carbon/human/H = host
|
||||
var/heal_power = host == origin ? 2 : 5
|
||||
origin.adjust_instability(15)
|
||||
|
||||
for(var/i = 0, i<5,i++)
|
||||
if(H)
|
||||
for(var/obj/item/organ/O in H.internal_organs)
|
||||
if(O.damage > 0)
|
||||
O.damage = max(O.damage - 1, 0)
|
||||
if(O.damage > 0) // Fix internal damage
|
||||
O.damage = max(O.damage - (heal_power / 5), 0)
|
||||
if(O.damage <= 5 && O.organ_tag == O_EYES) // Fix eyes
|
||||
H.sdisabilities &= ~BLIND
|
||||
|
||||
for(var/obj/item/organ/external/O in H.organs) // Fix limbs
|
||||
if(!O.robotic < ORGAN_ROBOT) // No robot parts for this.
|
||||
continue
|
||||
O.heal_damage(0, heal_power / 5, internal = 1, robo_repair = 0)
|
||||
|
||||
for(var/obj/item/organ/E in H.bad_external_organs) // Fix bones
|
||||
var/obj/item/organ/external/affected = E
|
||||
if((affected.damage < affected.min_broken_damage * config.organ_health_multiplier) && (affected.status & ORGAN_BROKEN))
|
||||
affected.status &= ~ORGAN_BROKEN
|
||||
|
||||
for(var/datum/wound/W in affected.wounds) // Fix IB
|
||||
if(istype(W, /datum/wound/internal_bleeding))
|
||||
affected.wounds -= W
|
||||
affected.update_damages()
|
||||
|
||||
H.restore_blood() // Fix bloodloss
|
||||
|
||||
H.adjust_instability(2.5)
|
||||
origin.adjust_instability(2.5)
|
||||
sleep(1 SECOND)
|
||||
on_expire()
|
||||
on_expire()
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
/datum/technomancer/spell/mend_wires
|
||||
name = "Mend Wires"
|
||||
desc = "Binds the internal wiring of robotic limbs and components over time. \
|
||||
Instability is split between the target and technomancer, if seperate."
|
||||
desc = "Binds the internal wiring of robotic limbs and components over time."
|
||||
cost = 50
|
||||
obj_path = /obj/item/weapon/spell/insert/mend_wires
|
||||
ability_icon_state = "tech_mendwounds"
|
||||
@@ -20,14 +19,13 @@
|
||||
spawn(1)
|
||||
if(ishuman(host))
|
||||
var/mob/living/carbon/human/H = host
|
||||
var/heal_power = host == origin ? 10 : 30
|
||||
origin.adjust_instability(10)
|
||||
for(var/i = 0, i<5,i++)
|
||||
if(H)
|
||||
for(var/obj/item/organ/external/O in H.organs)
|
||||
if(O.robotic < ORGAN_ROBOT) // Robot parts only.
|
||||
continue
|
||||
O.heal_damage(0, 5, internal = 1, robo_repair = 1)
|
||||
|
||||
H.adjust_instability(2.5)
|
||||
origin.adjust_instability(2.5)
|
||||
sleep(10)
|
||||
on_expire()
|
||||
O.heal_damage(0, heal_power / 5, internal = 1, robo_repair = 1)
|
||||
sleep(1 SECOND)
|
||||
on_expire()
|
||||
|
||||
@@ -20,10 +20,10 @@
|
||||
spawn(1)
|
||||
if(ishuman(host))
|
||||
var/mob/living/carbon/human/H = host
|
||||
var/heal_power = host == origin ? 10 : 30
|
||||
origin.adjust_instability(10)
|
||||
for(var/i = 0, i<5,i++)
|
||||
if(H)
|
||||
H.adjustBruteLoss(-5)
|
||||
H.adjust_instability(2.5)
|
||||
origin.adjust_instability(2.5)
|
||||
H.adjustBruteLoss(-heal_power / 5)
|
||||
sleep(1 SECOND)
|
||||
on_expire()
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
/datum/technomancer/spell/purify
|
||||
name = "Purify"
|
||||
desc = "Clenses the body of harmful impurities, such as toxins, radiation, viruses, genetic damage, and such. \
|
||||
Instability is split between the target and technomancer, if seperate."
|
||||
desc = "Clenses the body of harmful impurities, such as toxins, radiation, viruses, genetic damage, and such."
|
||||
cost = 25
|
||||
obj_path = /obj/item/weapon/spell/insert/purify
|
||||
ability_icon_state = "tech_purify"
|
||||
@@ -24,12 +23,12 @@
|
||||
H.disabilities = 0
|
||||
// for(var/datum/disease/D in H.viruses)
|
||||
// D.cure()
|
||||
var/heal_power = host == origin ? 10 : 30
|
||||
origin.adjust_instability(10)
|
||||
for(var/i = 0, i<5,i++)
|
||||
if(H)
|
||||
H.adjustToxLoss(-5)
|
||||
H.adjustCloneLoss(-5)
|
||||
H.radiation = max(host.radiation - 10, 0)
|
||||
H.adjust_instability(2.5)
|
||||
origin.adjust_instability(2.5)
|
||||
H.adjustToxLoss(-heal_power / 5)
|
||||
H.adjustCloneLoss(-heal_power / 5)
|
||||
H.radiation = max(host.radiation - ( (heal_power * 2) / 5), 0)
|
||||
sleep(1 SECOND)
|
||||
on_expire()
|
||||
|
||||
@@ -20,8 +20,8 @@
|
||||
/obj/item/weapon/spell/instability_tap/on_use_cast(mob/user)
|
||||
if(check_for_scepter())
|
||||
core.give_energy(7500)
|
||||
owner.adjust_instability(40)
|
||||
adjust_instability(40)
|
||||
else
|
||||
core.give_energy(5000)
|
||||
owner.adjust_instability(50)
|
||||
adjust_instability(50)
|
||||
qdel(src)
|
||||
@@ -37,7 +37,7 @@
|
||||
else
|
||||
mark_spell_ref.forceMove(get_turf(user))
|
||||
user << "<span class='notice'>Your mark is moved from its old position to \the [get_turf(user)] under you.</span>"
|
||||
owner.adjust_instability(5)
|
||||
adjust_instability(5)
|
||||
return 1
|
||||
else
|
||||
user << "<span class='warning'>You can't afford the energy cost!</span>"
|
||||
@@ -99,7 +99,7 @@
|
||||
|
||||
playsound(old_turf, 'sound/effects/sparks2.ogg', 50, 1)
|
||||
|
||||
owner.adjust_instability(25)
|
||||
adjust_instability(25)
|
||||
qdel(src)
|
||||
return 1
|
||||
else
|
||||
|
||||
@@ -20,7 +20,7 @@
|
||||
var/mob/living/carbon/human/H = hit_atom
|
||||
if(pay_energy(1500))
|
||||
H.adjustOxyLoss(-35)
|
||||
owner.adjust_instability(10)
|
||||
adjust_instability(10)
|
||||
return
|
||||
else if(isturf(hit_atom))
|
||||
var/turf/T = hit_atom
|
||||
@@ -28,4 +28,4 @@
|
||||
T.assume_gas("oxygen", 200)
|
||||
T.assume_gas("nitrogen", 800)
|
||||
playsound(src.loc, 'sound/effects/spray.ogg', 50, 1, -3)
|
||||
owner.adjust_instability(10)
|
||||
adjust_instability(10)
|
||||
@@ -15,6 +15,7 @@
|
||||
/obj/item/weapon/spell/phase_shift/New()
|
||||
..()
|
||||
set_light(3, 2, l_color = "#FA58F4")
|
||||
processing_objects |= src
|
||||
|
||||
/obj/effect/phase_shift
|
||||
name = "rift"
|
||||
@@ -32,8 +33,13 @@
|
||||
/obj/effect/phase_shift/Destroy()
|
||||
for(var/atom/movable/AM in contents) //Eject everything out.
|
||||
AM.forceMove(get_turf(src))
|
||||
processing_objects -= src
|
||||
..()
|
||||
|
||||
/obj/effect/phase_shift/process()
|
||||
for(var/mob/living/L in contents)
|
||||
L.adjust_instability(2)
|
||||
|
||||
/obj/effect/phase_shift/relaymove(mob/user as mob)
|
||||
if(user.stat)
|
||||
return
|
||||
|
||||
@@ -36,10 +36,10 @@
|
||||
P.damage = round(energy_before_firing * 0.004) // 4% of their current energy pool.
|
||||
else
|
||||
P.damage = round(energy_before_firing * 0.003) // 3% of their current energy pool.
|
||||
owner.adjust_instability(instability_per_shot)
|
||||
adjust_instability(instability_per_shot)
|
||||
return 1
|
||||
|
||||
|
||||
// muzzle_type = /obj/effect/projectile/lightning/muzzle
|
||||
// tracer_type = /obj/effect/projectile/lightning/tracer
|
||||
// impact_type = /obj/effect/projectile/lightning/impact
|
||||
// impact_type = /obj/effect/projectile/lightning/impact
|
||||
|
||||
@@ -13,9 +13,10 @@
|
||||
if(set_up(hit_atom, user))
|
||||
var/obj/item/projectile/new_projectile = new spell_projectile(get_turf(user))
|
||||
new_projectile.launch(hit_atom)
|
||||
log_and_message_admins("has casted [src] at \the [hit_atom].")
|
||||
if(fire_sound)
|
||||
playsound(get_turf(src), fire_sound, 75, 1)
|
||||
owner.adjust_instability(instability_per_shot)
|
||||
adjust_instability(instability_per_shot)
|
||||
return 1
|
||||
return 0
|
||||
|
||||
@@ -28,5 +29,8 @@
|
||||
user.Stun(pre_shot_delay / 10)
|
||||
sleep(pre_shot_delay)
|
||||
qdel(target_image)
|
||||
return 1
|
||||
return 0
|
||||
if(owner)
|
||||
return TRUE
|
||||
return FALSE // We got dropped before the firing occured.
|
||||
return TRUE // No delay, no need to check.
|
||||
return FALSE
|
||||
|
||||
@@ -42,4 +42,4 @@
|
||||
var/radius = max(get_dist(L, src), 1)
|
||||
var/rads = (power / 10) * ( 1 / (radius**2) )
|
||||
L.apply_effect(rads, IRRADIATE)
|
||||
owner.adjust_instability(2)
|
||||
adjust_instability(2)
|
||||
|
||||
@@ -37,7 +37,7 @@
|
||||
dead_mob_list -= SM
|
||||
living_mob_list += SM
|
||||
SM.icon_state = SM.icon_living
|
||||
owner.adjust_instability(30)
|
||||
adjust_instability(30)
|
||||
else if(ishuman(L))
|
||||
var/mob/living/carbon/human/H = L
|
||||
|
||||
@@ -57,7 +57,7 @@
|
||||
H.timeofdeath = null
|
||||
visible_message("<span class='danger'>\The [H]'s eyes open!</span>")
|
||||
user << "<span class='notice'>It's alive!</span>"
|
||||
owner.adjust_instability(100)
|
||||
adjust_instability(100)
|
||||
else
|
||||
user << "<span class='warning'>The body of \the [H] doesn't seem to respond, perhaps you could try again?</span>"
|
||||
owner.adjust_instability(10)
|
||||
adjust_instability(10)
|
||||
@@ -24,5 +24,5 @@
|
||||
if(pay_energy(500))
|
||||
var/instability_to_drain = min(H.instability, 25)
|
||||
user << "<span class='notice'>You draw instability away from \the [H] and towards you.</span>"
|
||||
owner.adjust_instability(instability_to_drain)
|
||||
adjust_instability(instability_to_drain)
|
||||
H.adjust_instability(-instability_to_drain)
|
||||
@@ -15,7 +15,7 @@
|
||||
|
||||
/obj/item/weapon/spell/spawner/darkness/on_ranged_cast(atom/hit_atom, mob/user)
|
||||
if(pay_energy(500))
|
||||
owner.adjust_instability(4)
|
||||
adjust_instability(4)
|
||||
..()
|
||||
|
||||
/obj/item/weapon/spell/spawner/darkness/New()
|
||||
|
||||
@@ -16,7 +16,7 @@
|
||||
|
||||
/obj/item/weapon/spell/spawner/fire_blast/on_ranged_cast(atom/hit_atom, mob/user)
|
||||
if(pay_energy(2000))
|
||||
owner.adjust_instability(12)
|
||||
adjust_instability(12)
|
||||
..() // Makes the booms happen.
|
||||
|
||||
/obj/effect/temporary_effect/fire_blast
|
||||
|
||||
@@ -19,7 +19,7 @@
|
||||
|
||||
/obj/item/weapon/spell/spawner/pulsar/on_ranged_cast(atom/hit_atom, mob/user)
|
||||
if(pay_energy(4000))
|
||||
owner.adjust_instability(8)
|
||||
adjust_instability(8)
|
||||
..()
|
||||
|
||||
/obj/item/weapon/spell/spawner/pulsar/on_throw_cast(atom/hit_atom, mob/user)
|
||||
|
||||
@@ -19,16 +19,17 @@
|
||||
E.icon_state = "anom"
|
||||
sleep(5 SECONDS)
|
||||
qdel(E)
|
||||
var/mob/living/L = new summoned_mob_type(T)
|
||||
core.summoned_mobs |= L
|
||||
L.summoned = 1
|
||||
var/image/summon_underlay = image('icons/obj/objects.dmi',"anom")
|
||||
summon_underlay.alpha = 127
|
||||
L.underlays |= summon_underlay
|
||||
on_summon(L)
|
||||
user << "<span class='notice'>You've successfully teleported \a [L] to you!</span>"
|
||||
visible_message("<span class='warning'>\A [L] appears from no-where!</span>")
|
||||
user.adjust_instability(instability_cost)
|
||||
if(owner) // We might've been dropped.
|
||||
var/mob/living/L = new summoned_mob_type(T)
|
||||
core.summoned_mobs |= L
|
||||
L.summoned = 1
|
||||
var/image/summon_underlay = image('icons/obj/objects.dmi',"anom")
|
||||
summon_underlay.alpha = 127
|
||||
L.underlays |= summon_underlay
|
||||
on_summon(L)
|
||||
user << "<span class='notice'>You've successfully teleported \a [L] to you!</span>"
|
||||
visible_message("<span class='warning'>\A [L] appears from no-where!</span>")
|
||||
user.adjust_instability(instability_cost)
|
||||
|
||||
/obj/item/weapon/spell/summon/on_use_cast(mob/living/user)
|
||||
if(summon_options.len)
|
||||
|
||||
@@ -32,15 +32,24 @@
|
||||
response_help = "pets the"
|
||||
response_disarm = "swats away"
|
||||
response_harm = "punches"
|
||||
min_oxy = 0
|
||||
max_oxy = 0
|
||||
min_tox = 0
|
||||
max_tox = 0
|
||||
min_co2 = 0
|
||||
max_co2 = 0
|
||||
min_n2 = 0
|
||||
max_n2 = 0
|
||||
minbodytemp = 0
|
||||
maxbodytemp = 0
|
||||
unsuitable_atoms_damage = 0
|
||||
heat_damage_per_tick = 0
|
||||
cold_damage_per_tick = 0
|
||||
|
||||
var/true_sight = 0 // If true, detects more than what the Technomancer normally can't.
|
||||
var/mob/living/carbon/human/creator = null
|
||||
var/list/seen_mobs = list()
|
||||
|
||||
/mob/living/simple_animal/ward/New()
|
||||
..()
|
||||
spawn(6 MINUTES)
|
||||
expire()
|
||||
|
||||
/mob/living/simple_animal/ward/death()
|
||||
if(creator)
|
||||
creator << "<span class='danger'>Your ward inside [get_area(src)] was killed!</span>"
|
||||
|
||||
@@ -49,7 +49,7 @@
|
||||
var/new_dir = get_dir(user, chosen_target)
|
||||
user.dir = new_dir
|
||||
sparks.start()
|
||||
owner.adjust_instability(12)
|
||||
adjust_instability(12)
|
||||
|
||||
//Finally, we handle striking the victim with whatever's in the user's offhand.
|
||||
var/obj/item/I = user.get_inactive_hand()
|
||||
|
||||
@@ -6,9 +6,9 @@
|
||||
fear and excitement. Ultimately, their purpose is unknown. However, it is up to you and your crew to decide if \
|
||||
their powers can be used for good or if their arrival foreshadows the destruction of the entire colony, or worse."
|
||||
config_tag = "technomancer"
|
||||
votable = 0
|
||||
votable = 1
|
||||
required_players = 5
|
||||
required_players_secret = 5
|
||||
required_enemies = 1
|
||||
end_on_antag_death = 0
|
||||
antag_tags = list(MODE_TECHNOMANCER)
|
||||
antag_tags = list(MODE_TECHNOMANCER)
|
||||
|
||||
@@ -127,7 +127,7 @@
|
||||
/var/const/access_captain = 20
|
||||
/datum/access/captain
|
||||
id = access_captain
|
||||
desc = "Captain"
|
||||
desc = "Colony Director"
|
||||
region = ACCESS_REGION_COMMAND
|
||||
|
||||
/var/const/access_all_personal_lockers = 21
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
var/datum/announcement/minor/captain_announcement = new(do_newscast = 1)
|
||||
|
||||
/datum/job/captain
|
||||
title = "Station Administrator"
|
||||
title = "Colony Director"
|
||||
flag = CAPTAIN
|
||||
department = "Command"
|
||||
head_position = 1
|
||||
@@ -11,7 +11,7 @@ var/datum/announcement/minor/captain_announcement = new(do_newscast = 1)
|
||||
spawn_positions = 1
|
||||
supervisors = "company officials and Corporate Regulations"
|
||||
selection_color = "#1D1D4F"
|
||||
alt_titles = list("Site Manager")
|
||||
alt_titles = list("Site Manager", "Overseer")
|
||||
idtype = /obj/item/weapon/card/id/gold
|
||||
req_admin_notify = 1
|
||||
access = list() //See get_access()
|
||||
@@ -70,7 +70,7 @@ var/datum/announcement/minor/captain_announcement = new(do_newscast = 1)
|
||||
faction = "Station"
|
||||
total_positions = 1
|
||||
spawn_positions = 1
|
||||
supervisors = "the station administrator"
|
||||
supervisors = "the Colony Director"
|
||||
selection_color = "#2F2F7F"
|
||||
idtype = /obj/item/weapon/card/id/silver
|
||||
alt_titles = list("Crew Resources Officer")
|
||||
@@ -145,4 +145,4 @@ var/datum/announcement/minor/captain_announcement = new(do_newscast = 1)
|
||||
H.equip_to_slot_or_del(new /obj/item/clothing/under/suit_jacket/female/skirt(H), slot_w_uniform)
|
||||
else
|
||||
H.equip_to_slot_or_del(new /obj/item/clothing/under/suit_jacket/charcoal(H), slot_w_uniform)
|
||||
return 1
|
||||
return 1
|
||||
|
||||
@@ -231,7 +231,7 @@
|
||||
idtype = /obj/item/weapon/card/id/civilian
|
||||
access = list(access_library, access_maint_tunnels)
|
||||
minimal_access = list(access_library)
|
||||
alt_titles = list("Journalist", "Professor", "Historian")
|
||||
alt_titles = list("Journalist", "Professor", "Historian", "Writer")
|
||||
|
||||
|
||||
equip(var/mob/living/carbon/human/H)
|
||||
|
||||
@@ -7,7 +7,7 @@
|
||||
faction = "Station"
|
||||
total_positions = 1
|
||||
spawn_positions = 1
|
||||
supervisors = "the station administrator"
|
||||
supervisors = "the Colony Director"
|
||||
selection_color = "#7F6E2C"
|
||||
idtype = /obj/item/weapon/card/id/engineering/head
|
||||
req_admin_notify = 1
|
||||
|
||||
@@ -7,7 +7,7 @@
|
||||
faction = "Station"
|
||||
total_positions = 1
|
||||
spawn_positions = 1
|
||||
supervisors = "the station administrator"
|
||||
supervisors = "the Colony Director"
|
||||
selection_color = "#026865"
|
||||
idtype = /obj/item/weapon/card/id/medical/head
|
||||
req_admin_notify = 1
|
||||
|
||||
@@ -7,7 +7,7 @@
|
||||
faction = "Station"
|
||||
total_positions = 1
|
||||
spawn_positions = 1
|
||||
supervisors = "the station administrator"
|
||||
supervisors = "the Colony Director"
|
||||
selection_color = "#AD6BAD"
|
||||
idtype = /obj/item/weapon/card/id/science/head
|
||||
req_admin_notify = 1
|
||||
|
||||
@@ -7,7 +7,7 @@
|
||||
faction = "Station"
|
||||
total_positions = 1
|
||||
spawn_positions = 1
|
||||
supervisors = "the station administrator"
|
||||
supervisors = "the Colony Director"
|
||||
selection_color = "#8E2929"
|
||||
idtype = /obj/item/weapon/card/id/security/head
|
||||
req_admin_notify = 1
|
||||
|
||||
@@ -442,9 +442,9 @@ var/global/datum/controller/occupations/job_master
|
||||
return H.Robotize()
|
||||
if("AI")
|
||||
return H
|
||||
if("Station Administrator")
|
||||
if("Colony Director")
|
||||
var/sound/announce_sound = (ticker.current_state <= GAME_STATE_SETTING_UP)? null : sound('sound/misc/boatswain.ogg', volume=20)
|
||||
captain_announcement.Announce("All hands, [alt_title ? alt_title : "Station Administrator"] [H.real_name] on deck!", new_sound=announce_sound)
|
||||
captain_announcement.Announce("All hands, [alt_title ? alt_title : "Colony Director"] [H.real_name] on deck!", new_sound=announce_sound)
|
||||
|
||||
//Deferred item spawning.
|
||||
if(spawn_in_storage && spawn_in_storage.len)
|
||||
|
||||
@@ -52,7 +52,7 @@ var/list/assistant_occupations = list(
|
||||
|
||||
|
||||
var/list/command_positions = list(
|
||||
"Station Administrator",
|
||||
"Colony Director",
|
||||
"Head of Personnel",
|
||||
"Head of Security",
|
||||
"Chief Engineer",
|
||||
|
||||
@@ -775,7 +775,7 @@ Just a object used in constructing air alarms
|
||||
icon = 'icons/obj/doors/door_assembly.dmi'
|
||||
icon_state = "door_electronics"
|
||||
desc = "Looks like a circuit. Probably is."
|
||||
w_class = 2.0
|
||||
w_class = ITEMSIZE_SMALL
|
||||
matter = list(DEFAULT_WALL_MATERIAL = 50, "glass" = 50)
|
||||
*/
|
||||
/*
|
||||
@@ -991,7 +991,7 @@ Just a object used in constructing fire alarms
|
||||
icon = 'icons/obj/doors/door_assembly.dmi'
|
||||
icon_state = "door_electronics"
|
||||
desc = "A circuit. It has a label on it, it says \"Can handle heat levels up to 40 degrees celsius!\""
|
||||
w_class = 2.0
|
||||
w_class = ITEMSIZE_SMALL
|
||||
matter = list(DEFAULT_WALL_MATERIAL = 50, "glass" = 50)
|
||||
*/
|
||||
/obj/machinery/partyalarm
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
density = 1
|
||||
var/health = 100.0
|
||||
flags = CONDUCT
|
||||
w_class = 5
|
||||
w_class = ITEMSIZE_HUGE
|
||||
|
||||
var/valve_open = 0
|
||||
var/release_pressure = ONE_ATMOSPHERE
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
icon = 'icons/obj/atmos.dmi'
|
||||
icon_state = "psiphon:0"
|
||||
density = 1
|
||||
w_class = 3
|
||||
w_class = ITEMSIZE_NORMAL
|
||||
|
||||
var/on = 0
|
||||
var/direction_out = 0 //0 = siphoning, 1 = releasing
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
icon = 'icons/obj/atmos.dmi'
|
||||
icon_state = "pscrubber:0"
|
||||
density = 1
|
||||
w_class = 3
|
||||
w_class = ITEMSIZE_NORMAL
|
||||
|
||||
var/on = 0
|
||||
var/volume_rate = 800
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
desc = "A pre-fabricated security camera kit, ready to be assembled and mounted to a surface."
|
||||
icon = 'icons/obj/monitors.dmi'
|
||||
icon_state = "cameracase"
|
||||
w_class = 2
|
||||
w_class = ITEMSIZE_SMALL
|
||||
anchored = 0
|
||||
|
||||
matter = list(DEFAULT_WALL_MATERIAL = 700,"glass" = 300)
|
||||
|
||||
@@ -41,6 +41,9 @@
|
||||
return
|
||||
|
||||
if(istype(W, /obj/item/weapon/cell) && anchored)
|
||||
if(istype(W, /obj/item/weapon/cell/device))
|
||||
user << "<span class='warning'> The charger isn't fitted for that type of cell.</span>"
|
||||
return
|
||||
if(charging)
|
||||
user << "<span class='warning'>There is already a cell in the charger.</span>"
|
||||
return
|
||||
|
||||
@@ -395,7 +395,7 @@
|
||||
icon = 'icons/obj/cloning.dmi'
|
||||
icon_state = "datadisk0" //Gosh I hope syndies don't mistake them for the nuke disk.
|
||||
item_state = "card-id"
|
||||
w_class = 2.0
|
||||
w_class = ITEMSIZE_SMALL
|
||||
var/datum/dna2/record/buf = null
|
||||
var/read_only = 0 //Well,it's still a floppy disk
|
||||
|
||||
|
||||
@@ -1005,7 +1005,7 @@
|
||||
desc = "A model spaceship, it looks like those used back in the day when travelling to Orion! It even has a miniature FX-293 reactor, which was renowned for its instability and tendency to explode..."
|
||||
icon = 'icons/obj/toy.dmi'
|
||||
icon_state = "ship"
|
||||
w_class = 2
|
||||
w_class = ITEMSIZE_SMALL
|
||||
var/active = 0 //if the ship is on
|
||||
|
||||
/obj/item/weapon/orion_ship/examine(mob/user)
|
||||
|
||||
@@ -314,7 +314,7 @@
|
||||
src.active2.fields["cdi_d"] = t1
|
||||
if("notes")
|
||||
if (istype(src.active2, /datum/data/record))
|
||||
var/t1 = sanitize(input("Please summarize notes:", "Med. records", html_decode(src.active2.fields["notes"]), null) as message, extra = 0)
|
||||
var/t1 = sanitize(input("Please summarize notes:", "Med. records", html_decode(src.active2.fields["notes"]), null) as message, extra = 0, max_length = MAX_RECORD_LENGTH)
|
||||
if ((!( t1 ) || !( src.authenticated ) || usr.stat || usr.restrained() || (!in_range(src, usr) && (!istype(usr, /mob/living/silicon))) || src.active2 != a2))
|
||||
return
|
||||
src.active2.fields["notes"] = t1
|
||||
|
||||
@@ -481,7 +481,7 @@ What a mess.*/
|
||||
active2.fields["ma_crim_d"] = t1
|
||||
if("notes")
|
||||
if (istype(active2, /datum/data/record))
|
||||
var/t1 = sanitize(input("Please summarize notes:", "Secure. records", html_decode(active2.fields["notes"]), null) as message, extra = 0)
|
||||
var/t1 = sanitize(input("Please summarize notes:", "Secure. records", html_decode(active2.fields["notes"]), null) as message, extra = 0, max_length = MAX_RECORD_LENGTH)
|
||||
if (!t1 || active2 != a2)
|
||||
return
|
||||
active2.fields["notes"] = t1
|
||||
@@ -496,7 +496,7 @@ What a mess.*/
|
||||
temp += "<li><a href='?src=\ref[src];choice=Change Criminal Status;criminal2=released'>Released</a></li>"
|
||||
temp += "</ul>"
|
||||
if("rank")
|
||||
var/list/L = list( "Head of Personnel", "Station Administrator", "AI" )
|
||||
var/list/L = list( "Head of Personnel", "Colony Director", "AI" )
|
||||
//This was so silly before the change. Now it actually works without beating your head against the keyboard. /N
|
||||
if ((istype(active1, /datum/data/record) && L.Find(rank)))
|
||||
temp = "<h5>Rank:</h5>"
|
||||
|
||||
@@ -343,7 +343,7 @@ What a mess.*/
|
||||
return
|
||||
active1.fields["age"] = t1
|
||||
if("rank")
|
||||
var/list/L = list( "Head of Personnel", "Station Administrator", "AI" )
|
||||
var/list/L = list( "Head of Personnel", "Colony Director", "AI" )
|
||||
//This was so silly before the change. Now it actually works without beating your head against the keyboard. /N
|
||||
if ((istype(active1, /datum/data/record) && L.Find(rank)))
|
||||
temp = "<h5>Rank:</h5>"
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
/obj/item/part/computer/circuitboard
|
||||
density = 0
|
||||
anchored = 0
|
||||
w_class = 2.0
|
||||
w_class = ITEMSIZE_SMALL
|
||||
name = "Circuit board"
|
||||
icon = 'icons/obj/module.dmi'
|
||||
icon_state = "id_mod"
|
||||
|
||||
@@ -14,7 +14,7 @@
|
||||
gender = PLURAL
|
||||
icon = 'icons/obj/stock_parts.dmi'
|
||||
icon_state = "hdd1"
|
||||
w_class = 2.0
|
||||
w_class = ITEMSIZE_SMALL
|
||||
|
||||
var/emagged = 0
|
||||
|
||||
|
||||
@@ -35,8 +35,8 @@
|
||||
var jobs_all = ""
|
||||
jobs_all += "<table><tr><td></td><td><b>Command</b></td>"
|
||||
|
||||
jobs_all += "</tr><tr height='20'><td><b>Special</b></td>"//Station Administrator in special because he is head of heads ~Intercross21
|
||||
jobs_all += "<td weight='100'><a href='?src=\ref[src];;assign=Station Administrator'>Station Administrator</a></td>"
|
||||
jobs_all += "</tr><tr height='20'><td><b>Special</b></td>"//Colony Director in special because he is head of heads ~Intercross21
|
||||
jobs_all += "<td weight='100'><a href='?src=\ref[src];;assign=Colony Director'>Colony Director</a></td>"
|
||||
jobs_all += "<td weight='100'><a href='?src=\ref[src];;assign=Custom'>Custom</a></td>"
|
||||
|
||||
counter = 0
|
||||
@@ -348,4 +348,4 @@
|
||||
authenticate()
|
||||
if(access_cent_captain in reader.access)
|
||||
return 1
|
||||
return 0
|
||||
return 0
|
||||
|
||||
@@ -513,7 +513,7 @@ What a mess.*/
|
||||
temp += "<li><a href='?src=\ref[src];choice=Change Criminal Status;criminal2=released'>Released</a></li>"
|
||||
temp += "</ul>"
|
||||
if("rank")
|
||||
var/list/L = list( "Head of Personnel", "Station Administrator", "AI" )
|
||||
var/list/L = list( "Head of Personnel", "Colony Director", "AI" )
|
||||
//This was so silly before the change. Now it actually works without beating your head against the keyboard. /N
|
||||
if ((istype(active1, /datum/data/record) && L.Find(rank)))
|
||||
temp = "<h5>Rank:</h5>"
|
||||
|
||||
@@ -24,7 +24,7 @@
|
||||
icon_state = "laptop-closed"
|
||||
pixel_x = 2
|
||||
pixel_y = -3
|
||||
w_class = 3
|
||||
w_class = ITEMSIZE_NORMAL
|
||||
|
||||
var/obj/machinery/computer3/laptop/stored_computer = null
|
||||
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
name = "airlock electronics"
|
||||
icon = 'icons/obj/doors/door_assembly.dmi'
|
||||
icon_state = "door_electronics"
|
||||
w_class = 2.0 //It should be tiny! -Agouri
|
||||
w_class = ITEMSIZE_SMALL //It should be tiny! -Agouri
|
||||
|
||||
matter = list(DEFAULT_WALL_MATERIAL = 50,"glass" = 50)
|
||||
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
//Terribly sorry for the code doubling, but things go derpy otherwise.
|
||||
/obj/machinery/door/airlock/multi_tile
|
||||
width = 2
|
||||
appearance_flags = 0
|
||||
|
||||
/obj/machinery/door/airlock/multi_tile/New()
|
||||
..()
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user