mirror of
https://github.com/CHOMPStation2/CHOMPStation2.git
synced 2025-12-11 18:53:06 +00:00
Merge branch 'master' of https://github.com/PolarisSS13/Polaris into NanoGrade
Conflicts: code/modules/client/client procs.dm nano/templates/robot_control.tmpl
This commit is contained in:
@@ -5,7 +5,7 @@ sudo: false
|
||||
env:
|
||||
BYOND_MAJOR="510"
|
||||
BYOND_MINOR="1346"
|
||||
MACRO_COUNT=987
|
||||
MACRO_COUNT=986
|
||||
|
||||
cache:
|
||||
directories:
|
||||
|
||||
@@ -37,5 +37,5 @@
|
||||
// Chemistry lists.
|
||||
var/list/tachycardics = list("coffee", "inaprovaline", "hyperzine", "nitroglycerin", "thirteenloko", "nicotine") // Increase heart rate.
|
||||
var/list/bradycardics = list("neurotoxin", "cryoxadone", "clonexadone", "space_drugs", "stoxin") // Decrease heart rate.
|
||||
var/list/heartstopper = list("potassium_phorochloride", "zombie_powder") // This stops the heart.
|
||||
var/list/heartstopper = list("potassium_chlorophoride", "zombie_powder") // This stops the heart.
|
||||
var/list/cheartstopper = list("potassium_chloride") // This stops the heart when overdose is met. -- c = conditional
|
||||
|
||||
@@ -68,10 +68,12 @@ var/list/be_special_flags = list(
|
||||
#define MODE_COMMANDO "commando"
|
||||
#define MODE_DEATHSQUAD "deathsquad"
|
||||
#define MODE_ERT "ert"
|
||||
#define MODE_TRADE "trader"
|
||||
#define MODE_MERCENARY "mercenary"
|
||||
#define MODE_NINJA "ninja"
|
||||
#define MODE_RAIDER "raider"
|
||||
#define MODE_WIZARD "wizard"
|
||||
#define MODE_TECHNOMANCER "technomancer"
|
||||
#define MODE_CHANGELING "changeling"
|
||||
#define MODE_CULTIST "cultist"
|
||||
#define MODE_HIGHLANDER "highlander"
|
||||
@@ -83,7 +85,7 @@ var/list/be_special_flags = list(
|
||||
#define MODE_TRAITOR "traitor"
|
||||
#define MODE_AUTOTRAITOR "autotraitor"
|
||||
|
||||
#define DEFAULT_TELECRYSTAL_AMOUNT 12
|
||||
#define DEFAULT_TELECRYSTAL_AMOUNT 120
|
||||
|
||||
/////////////////
|
||||
////WIZARD //////
|
||||
|
||||
@@ -92,7 +92,8 @@
|
||||
// Setting this much higher than 1024 could allow spammers to DOS the server easily.
|
||||
#define MAX_MESSAGE_LEN 1024
|
||||
#define MAX_PAPER_MESSAGE_LEN 6144
|
||||
#define MAX_BOOK_MESSAGE_LEN 12288
|
||||
#define MAX_BOOK_MESSAGE_LEN 24576
|
||||
#define MAX_RECORD_LENGTH 24576
|
||||
#define MAX_LNAME_LEN 64
|
||||
#define MAX_NAME_LEN 52
|
||||
|
||||
@@ -161,3 +162,8 @@
|
||||
#define CAT_NORMAL 1
|
||||
#define CAT_HIDDEN 2
|
||||
#define CAT_COIN 4
|
||||
|
||||
//Antag Faction Visbility
|
||||
#define ANTAG_HIDDEN "Hidden"
|
||||
#define ANTAG_SHARED "Shared"
|
||||
#define ANTAG_KNOWN "Known"
|
||||
|
||||
@@ -156,7 +156,7 @@
|
||||
// It will keep doing this until it checks every content possible. This will fix any problems with mobs, that are inside objects,
|
||||
// being unable to hear people due to being in a box within a bag.
|
||||
|
||||
/proc/recursive_content_check(var/atom/O, var/list/L = list(), var/recursion_limit = 3, var/client_check = 1, var/sight_check = 1, var/include_mobs = 1, var/include_objects = 1)
|
||||
/proc/recursive_content_check(var/atom/O, var/list/L = list(), var/recursion_limit = 3, var/client_check = 1, var/sight_check = 1, var/include_mobs = 1, var/include_objects = 1, var/ignore_show_messages = 0)
|
||||
|
||||
if(!recursion_limit)
|
||||
return L
|
||||
@@ -176,7 +176,7 @@
|
||||
|
||||
else if(istype(I,/obj/))
|
||||
var/obj/check_obj = I
|
||||
if(check_obj.show_messages)
|
||||
if(ignore_show_messages || check_obj.show_messages)
|
||||
if(!sight_check || isInSight(I, O))
|
||||
L |= recursive_content_check(I, L, recursion_limit - 1, client_check, sight_check, include_mobs, include_objects)
|
||||
if(include_objects)
|
||||
|
||||
@@ -119,27 +119,12 @@ proc/age2agedescription(age)
|
||||
if(70 to INFINITY) return "elderly"
|
||||
else return "unknown"
|
||||
|
||||
proc/RoundHealth(health)
|
||||
switch(health)
|
||||
if(100 to INFINITY)
|
||||
return "health100"
|
||||
if(70 to 100)
|
||||
return "health80"
|
||||
if(50 to 70)
|
||||
return "health60"
|
||||
if(30 to 50)
|
||||
return "health40"
|
||||
if(18 to 30)
|
||||
return "health25"
|
||||
if(5 to 18)
|
||||
return "health10"
|
||||
if(1 to 5)
|
||||
return "health1"
|
||||
if(-99 to 0)
|
||||
return "health0"
|
||||
else
|
||||
return "health-100"
|
||||
return "0"
|
||||
/proc/RoundHealth(health)
|
||||
var/list/icon_states = icon_states('icons/mob/hud_med.dmi')
|
||||
for(var/icon_state in icon_states)
|
||||
if(health >= text2num(icon_state))
|
||||
return icon_state
|
||||
return icon_states[icon_states.len] // If we had no match, return the last element
|
||||
|
||||
/*
|
||||
Proc for attack log creation, because really why not
|
||||
|
||||
@@ -1037,12 +1037,6 @@ proc/get_mob_with_client_list()
|
||||
else if (zone == "r_foot") return "right foot"
|
||||
else return zone
|
||||
|
||||
//gets the turf the atom is located in (or itself, if it is a turf).
|
||||
//returns null if the atom is not in a turf.
|
||||
/proc/get_turf(atom/movable/A)
|
||||
if(isturf(A)) return A
|
||||
if(A && A.locs.len) return A.locs[1]
|
||||
|
||||
/proc/get(atom/loc, type)
|
||||
while(loc)
|
||||
if(istype(loc, type))
|
||||
|
||||
@@ -1,6 +1,8 @@
|
||||
#define Clamp(x, y, z) (x <= y ? y : (x >= z ? z : x))
|
||||
#define CLAMP01(x) (Clamp(x, 0, 1))
|
||||
|
||||
#define get_turf(A) get_step(A,0)
|
||||
|
||||
#define isAI(A) istype(A, /mob/living/silicon/ai)
|
||||
|
||||
#define isalien(A) istype(A, /mob/living/carbon/alien)
|
||||
|
||||
@@ -103,6 +103,9 @@
|
||||
#define ui_alien_health "EAST-1:28,CENTER-1:13" //aliens have the health display where humans have the pressure damage indicator.
|
||||
|
||||
#define ui_ling_chemical_display "EAST-1:28,CENTER-3:15"
|
||||
#define ui_wiz_energy_display "EAST-1:28,CENTER-3:15"
|
||||
//#define ui_wiz_instability_display "EAST-2:28,CENTER-3:15"
|
||||
#define ui_wiz_instability_display "EAST-1:28,NORTH-2:27"
|
||||
|
||||
//Pop-up inventory
|
||||
#define ui_shoes "WEST+1:8,SOUTH:5"
|
||||
@@ -137,5 +140,5 @@
|
||||
#define ui_iarrowleft "SOUTH-1,EAST-4"
|
||||
#define ui_iarrowright "SOUTH-1,EAST-2"
|
||||
|
||||
#define ui_spell_master "EAST-1:16,NORTH-1:16"
|
||||
#define ui_spell_master "EAST-2:16,NORTH-1:26"
|
||||
#define ui_genetic_master "EAST-1:16,NORTH-3:16"
|
||||
|
||||
378
code/_onclick/hud/ability_screen_objects.dm
Normal file
378
code/_onclick/hud/ability_screen_objects.dm
Normal file
@@ -0,0 +1,378 @@
|
||||
/obj/screen/movable/ability_master
|
||||
name = "Abilities"
|
||||
icon = 'icons/mob/screen_spells.dmi'
|
||||
icon_state = "grey_spell_ready"
|
||||
var/list/obj/screen/ability/ability_objects = list()
|
||||
var/showing = 0 // If we're 'open' or not.
|
||||
|
||||
var/open_state = "master_open" // What the button looks like when it's 'open', showing the other buttons.
|
||||
var/closed_state = "master_closed" // Button when it's 'closed', hiding everything else.
|
||||
|
||||
screen_loc = ui_spell_master // TODO: Rename
|
||||
|
||||
var/mob/my_mob = null // The mob that possesses this hud object.
|
||||
|
||||
/obj/screen/movable/ability_master/New(owner)
|
||||
if(owner)
|
||||
my_mob = owner
|
||||
update_abilities(0, owner)
|
||||
else
|
||||
message_admins("ERROR: ability_master's New() was not given an owner argument. This is a bug.")
|
||||
|
||||
/obj/screen/movable/ability_master/Destroy()
|
||||
..()
|
||||
//Get rid of the ability objects.
|
||||
remove_all_abilities()
|
||||
ability_objects.Cut()
|
||||
|
||||
// After that, remove ourselves from the mob seeing us, so we can qdel cleanly.
|
||||
if(my_mob)
|
||||
my_mob.ability_master = null
|
||||
if(my_mob.client && my_mob.client.screen)
|
||||
my_mob.client.screen -= src
|
||||
my_mob = null
|
||||
|
||||
/obj/screen/movable/ability_master/ResetVars()
|
||||
..("ability_objects", args)
|
||||
remove_all_abilities()
|
||||
// ability_objects = list()
|
||||
|
||||
/obj/screen/movable/ability_master/MouseDrop()
|
||||
if(showing)
|
||||
return
|
||||
|
||||
return ..()
|
||||
|
||||
/obj/screen/movable/ability_master/Click()
|
||||
if(!ability_objects.len) // If we're empty for some reason.
|
||||
// qdel(src)
|
||||
return
|
||||
|
||||
toggle_open()
|
||||
|
||||
/obj/screen/movable/ability_master/proc/toggle_open(var/forced_state = 0)
|
||||
if(showing && (forced_state != 2)) // We are closing the ability master, hide the abilities.
|
||||
for(var/obj/screen/ability/O in ability_objects)
|
||||
if(my_mob && my_mob.client)
|
||||
my_mob.client.screen -= O
|
||||
// O.handle_icon_updates = 0
|
||||
showing = 0
|
||||
overlays.len = 0
|
||||
overlays.Add(closed_state)
|
||||
else if(forced_state != 1) // We're opening it, show the icons.
|
||||
open_ability_master()
|
||||
update_abilities(1)
|
||||
showing = 1
|
||||
overlays.len = 0
|
||||
overlays.Add(open_state)
|
||||
update_icon()
|
||||
|
||||
/obj/screen/movable/ability_master/proc/open_ability_master()
|
||||
var/list/screen_loc_xy = splittext(screen_loc,",")
|
||||
|
||||
//Create list of X offsets
|
||||
var/list/screen_loc_X = splittext(screen_loc_xy[1],":")
|
||||
var/x_position = decode_screen_X(screen_loc_X[1])
|
||||
var/x_pix = screen_loc_X[2]
|
||||
|
||||
//Create list of Y offsets
|
||||
var/list/screen_loc_Y = splittext(screen_loc_xy[2],":")
|
||||
var/y_position = decode_screen_Y(screen_loc_Y[1])
|
||||
var/y_pix = screen_loc_Y[2]
|
||||
|
||||
for(var/i = 1; i <= ability_objects.len; i++)
|
||||
var/obj/screen/ability/A = ability_objects[i]
|
||||
var/xpos = x_position + (x_position < 8 ? 1 : -1)*(i%7)
|
||||
var/ypos = y_position + (y_position < 8 ? round(i/7) : -round(i/7))
|
||||
A.screen_loc = "[encode_screen_X(xpos)]:[x_pix],[encode_screen_Y(ypos)]:[y_pix]"
|
||||
if(my_mob && my_mob.client)
|
||||
my_mob.client.screen += A
|
||||
// A.handle_icon_updates = 1
|
||||
|
||||
/obj/screen/movable/ability_master/proc/update_abilities(forced = 0, mob/user)
|
||||
update_icon()
|
||||
if(user && user.client)
|
||||
if(!(src in user.client.screen))
|
||||
user.client.screen += src
|
||||
var/i = 1
|
||||
for(var/obj/screen/ability/ability in ability_objects)
|
||||
ability.update_icon(forced)
|
||||
ability.maptext = "[i]" // Slot number
|
||||
i++
|
||||
|
||||
/obj/screen/movable/ability_master/update_icon()
|
||||
if(ability_objects.len)
|
||||
invisibility = 0
|
||||
else
|
||||
invisibility = 101
|
||||
|
||||
/obj/screen/movable/ability_master/proc/add_ability(var/name_given)
|
||||
if(!name) return
|
||||
|
||||
// if(spell.connected_button) //we have one already, for some reason
|
||||
// if(spell.connected_button in spell_objects)
|
||||
// return
|
||||
// else
|
||||
// spell_objects.Add(spell.connected_button)
|
||||
// if(spell_holder.client)
|
||||
// toggle_open(2)
|
||||
// return
|
||||
|
||||
// if(spell.spell_flags & NO_BUTTON) //no button to add if we don't get one
|
||||
// return
|
||||
|
||||
var/obj/screen/ability/new_button = new /obj/screen/ability
|
||||
new_button.ability_master = src
|
||||
// new_button.spell = spell
|
||||
|
||||
// spell.connected_button = newscreen
|
||||
|
||||
// if(!spell.override_base) //if it's not set, we do basic checks
|
||||
// if(spell.spell_flags & CONSTRUCT_CHECK)
|
||||
// newscreen.spell_base = "const" //construct spells
|
||||
// else
|
||||
// newscreen.spell_base = "wiz" //wizard spells
|
||||
// else
|
||||
// newscreen.spell_base = spell.override_base
|
||||
new_button.name = name_given
|
||||
new_button.ability_icon_state = name_given
|
||||
new_button.update_icon(1)
|
||||
ability_objects.Add(new_button)
|
||||
if(my_mob.client)
|
||||
toggle_open(2) //forces the icons to refresh on screen
|
||||
|
||||
/obj/screen/movable/ability_master/proc/remove_ability(var/obj/screen/ability/ability)
|
||||
if(!ability)
|
||||
return
|
||||
ability_objects.Remove(ability)
|
||||
qdel(ability)
|
||||
|
||||
|
||||
if(ability_objects.len)
|
||||
toggle_open(showing + 1)
|
||||
update_icon()
|
||||
// else
|
||||
// qdel(src)
|
||||
|
||||
/obj/screen/movable/ability_master/proc/remove_all_abilities()
|
||||
for(var/obj/screen/ability/A in ability_objects)
|
||||
remove_ability(A)
|
||||
|
||||
/obj/screen/movable/ability_master/proc/get_ability_by_name(name_to_search)
|
||||
for(var/obj/screen/ability/A in ability_objects)
|
||||
if(A.name == name_to_search)
|
||||
return A
|
||||
return null
|
||||
|
||||
/obj/screen/movable/ability_master/proc/get_ability_by_proc_ref(proc_ref)
|
||||
for(var/obj/screen/ability/verb_based/V in ability_objects)
|
||||
if(V.verb_to_call == proc_ref)
|
||||
return V
|
||||
return null
|
||||
|
||||
/obj/screen/movable/ability_master/proc/get_ability_by_instance(var/obj/instance/)
|
||||
for(var/obj/screen/ability/obj_based/O in ability_objects)
|
||||
if(O.object == instance)
|
||||
return O
|
||||
return null
|
||||
|
||||
/mob/Login()
|
||||
..()
|
||||
if(ability_master)
|
||||
ability_master.toggle_open(1)
|
||||
client.screen -= ability_master
|
||||
|
||||
/mob/New()
|
||||
..()
|
||||
ability_master = new /obj/screen/movable/ability_master(src)
|
||||
|
||||
///////////ACTUAL ABILITIES////////////
|
||||
//This is what you click to do things//
|
||||
///////////////////////////////////////
|
||||
/obj/screen/ability
|
||||
icon = 'icons/mob/screen_spells.dmi'
|
||||
icon_state = "grey_spell_base"
|
||||
maptext_x = 3
|
||||
var/background_base_state = "grey"
|
||||
var/ability_icon_state = null
|
||||
|
||||
// var/spell/spell = null
|
||||
var/obj/screen/movable/ability_master/ability_master
|
||||
|
||||
// var/icon/last_charged_icon
|
||||
|
||||
/obj/screen/ability/Destroy()
|
||||
if(ability_master)
|
||||
ability_master.ability_objects -= src
|
||||
if(ability_master.my_mob && ability_master.my_mob.client)
|
||||
ability_master.my_mob.client.screen -= src
|
||||
if(ability_master && !ability_master.ability_objects.len)
|
||||
ability_master.update_icon()
|
||||
// qdel(ability_master)
|
||||
ability_master = null
|
||||
..()
|
||||
|
||||
/obj/screen/ability/update_icon()
|
||||
// if(!spell)
|
||||
// qdel(src)
|
||||
// return
|
||||
|
||||
// if((last_charge == spell.charge_counter || !handle_icon_updates) && !forced_update)
|
||||
// return //nothing to see here
|
||||
|
||||
// overlays -= spell.hud_state
|
||||
|
||||
// if(spell.charge_type == Sp_RECHARGE || spell.charge_type == Sp_CHARGES)
|
||||
// if(spell.charge_counter < spell.charge_max)
|
||||
// icon_state = "[background_base_state]_spell_base"
|
||||
// if(spell.charge_counter > 0)
|
||||
// var/icon/partial_charge = icon(src.icon, "[spell_base]_spell_ready")
|
||||
// partial_charge.Crop(1, 1, partial_charge.Width(), round(partial_charge.Height() * spell.charge_counter / spell.charge_max))
|
||||
// overlays += partial_charge
|
||||
// if(last_charged_icon)
|
||||
// overlays -= last_charged_icon
|
||||
// last_charged_icon = partial_charge
|
||||
// else if(last_charged_icon)
|
||||
// overlays -= last_charged_icon
|
||||
// last_charged_icon = null
|
||||
// else
|
||||
// icon_state = "[spell_base]_spell_ready"
|
||||
// if(last_charged_icon)
|
||||
// overlays -= last_charged_icon
|
||||
// else
|
||||
// icon_state = "[spell_base]_spell_ready"
|
||||
overlays.Cut()
|
||||
icon_state = "[background_base_state]_spell_base"
|
||||
|
||||
overlays += ability_icon_state
|
||||
|
||||
// last_charge = spell.charge_counter
|
||||
|
||||
// overlays -= "silence"
|
||||
// if(spell.silenced)
|
||||
// overlays += "silence"
|
||||
|
||||
/obj/screen/ability/Click()
|
||||
if(!usr)
|
||||
// qdel(src)
|
||||
return
|
||||
|
||||
// spell.perform(usr)
|
||||
activate()
|
||||
|
||||
// Makes the ability be triggered. The subclasses of this are responsible for carrying it out in whatever way it needs to.
|
||||
/obj/screen/ability/proc/activate()
|
||||
world << "[src] had activate() called."
|
||||
return
|
||||
|
||||
// This checks if the ability can be used.
|
||||
/obj/screen/ability/proc/can_activate()
|
||||
return 1
|
||||
|
||||
/client/verb/activate_ability(var/slot as num)
|
||||
set name = ".activate_ability"
|
||||
// set hidden = 1
|
||||
if(!mob)
|
||||
return // Paranoid.
|
||||
if(isnull(slot) || !isnum(slot))
|
||||
src << "<span class='warning'>.activate_ability requires a number as input, corrisponding to the slot you wish to use.</span>"
|
||||
return // Bad input.
|
||||
if(!mob.ability_master)
|
||||
return // No abilities.
|
||||
if(slot > mob.ability_master.ability_objects.len || slot <= 0)
|
||||
return // Out of bounds.
|
||||
var/obj/screen/ability/A = mob.ability_master.ability_objects[slot]
|
||||
A.activate()
|
||||
|
||||
//////////Verb Abilities//////////
|
||||
//Buttons to trigger verbs/procs//
|
||||
//////////////////////////////////
|
||||
|
||||
/obj/screen/ability/verb_based
|
||||
var/verb_to_call = null
|
||||
var/object_used = null
|
||||
var/arguments_to_use = list()
|
||||
|
||||
/obj/screen/ability/verb_based/activate()
|
||||
if(object_used && verb_to_call)
|
||||
call(object_used,verb_to_call)(arguments_to_use)
|
||||
// call(object_used,verb_to_call)(arguments_to_use)
|
||||
// world << "Attempted to call([object_used],[verb_to_call])([arguments_to_use])"
|
||||
// if(hascall(object_used, verb_to_call))
|
||||
// call(object_used,verb_to_call)(arguments_to_use)
|
||||
// else
|
||||
// message_admins("ERROR: activate() on [ability_master.my_mob]'s [src] failed the hascall([object_used],[verb_to_call]) check.")
|
||||
|
||||
/obj/screen/movable/ability_master/proc/add_verb_ability(var/object_given, var/verb_given, var/name_given, var/ability_icon_given, var/arguments)
|
||||
if(!object_given)
|
||||
message_admins("ERROR: add_verb_ability() was not given an object in its arguments.")
|
||||
if(!verb_given)
|
||||
message_admins("ERROR: add_verb_ability() was not given a verb/proc in its arguments.")
|
||||
if(get_ability_by_proc_ref(verb_given))
|
||||
return // Duplicate
|
||||
var/obj/screen/ability/verb_based/A = new /obj/screen/ability/verb_based()
|
||||
A.ability_master = src
|
||||
A.object_used = object_given
|
||||
A.verb_to_call = verb_given
|
||||
A.ability_icon_state = ability_icon_given
|
||||
A.name = name_given
|
||||
if(arguments)
|
||||
A.arguments_to_use = arguments
|
||||
ability_objects.Add(A)
|
||||
if(my_mob.client)
|
||||
toggle_open(2) //forces the icons to refresh on screen
|
||||
|
||||
//Changeling Abilities
|
||||
/obj/screen/ability/verb_based/changeling
|
||||
icon_state = "ling_spell_base"
|
||||
background_base_state = "ling"
|
||||
|
||||
/obj/screen/movable/ability_master/proc/add_ling_ability(var/object_given, var/verb_given, var/name_given, var/ability_icon_given, var/arguments)
|
||||
if(!object_given)
|
||||
message_admins("ERROR: add_ling_ability() was not given an object in its arguments.")
|
||||
if(!verb_given)
|
||||
message_admins("ERROR: add_ling_ability() was not given a verb/proc in its arguments.")
|
||||
if(get_ability_by_proc_ref(verb_given))
|
||||
return // Duplicate
|
||||
var/obj/screen/ability/verb_based/changeling/A = new /obj/screen/ability/verb_based/changeling()
|
||||
A.ability_master = src
|
||||
A.object_used = object_given
|
||||
A.verb_to_call = verb_given
|
||||
A.ability_icon_state = ability_icon_given
|
||||
A.name = name_given
|
||||
if(arguments)
|
||||
A.arguments_to_use = arguments
|
||||
ability_objects.Add(A)
|
||||
if(my_mob.client)
|
||||
toggle_open(2) //forces the icons to refresh on screen
|
||||
|
||||
|
||||
/////////Obj Abilities////////
|
||||
//Buttons to trigger objects//
|
||||
//////////////////////////////
|
||||
|
||||
/obj/screen/ability/obj_based
|
||||
var/obj/object = null
|
||||
|
||||
/obj/screen/ability/obj_based/activate()
|
||||
if(object)
|
||||
object.Click()
|
||||
|
||||
// Technomancer
|
||||
/obj/screen/ability/obj_based/technomancer
|
||||
icon_state = "wiz_spell_base"
|
||||
background_base_state = "wiz"
|
||||
|
||||
/obj/screen/movable/ability_master/proc/add_technomancer_ability(var/obj/object_given, var/ability_icon_given)
|
||||
if(!object_given)
|
||||
message_admins("ERROR: add_technomancer_ability() was not given an object in its arguments.")
|
||||
if(get_ability_by_instance(object_given))
|
||||
return // Duplicate
|
||||
var/obj/screen/ability/obj_based/technomancer/A = new /obj/screen/ability/obj_based/technomancer()
|
||||
A.ability_master = src
|
||||
A.object = object_given
|
||||
A.ability_icon_state = ability_icon_given
|
||||
A.name = object_given.name
|
||||
ability_objects.Add(A)
|
||||
if(my_mob.client)
|
||||
toggle_open(2) //forces the icons to refresh on screen
|
||||
@@ -133,6 +133,8 @@ var/list/global_huds = list(
|
||||
var/hotkey_ui_hidden = 0 //This is to hide the buttons that can be used via hotkeys. (hotkeybuttons list of buttons)
|
||||
|
||||
var/obj/screen/lingchemdisplay
|
||||
var/obj/screen/wiz_instability_display
|
||||
var/obj/screen/wiz_energy_display
|
||||
var/obj/screen/blobpwrdisplay
|
||||
var/obj/screen/blobhealthdisplay
|
||||
var/obj/screen/r_hand_hud_object
|
||||
@@ -159,6 +161,8 @@ datum/hud/New(mob/owner)
|
||||
disarm_intent = null
|
||||
help_intent = null
|
||||
lingchemdisplay = null
|
||||
wiz_instability_display = null
|
||||
wiz_energy_display = null
|
||||
blobpwrdisplay = null
|
||||
blobhealthdisplay = null
|
||||
r_hand_hud_object = null
|
||||
|
||||
@@ -303,6 +303,17 @@
|
||||
mymob.ling_chem_display.icon_state = "ling_chems"
|
||||
hud_elements |= mymob.ling_chem_display
|
||||
|
||||
mymob.wiz_instability_display = new /obj/screen/wizard/instability()
|
||||
mymob.wiz_instability_display.screen_loc = ui_wiz_instability_display
|
||||
mymob.wiz_instability_display.icon_state = "wiz_instability_none"
|
||||
hud_elements |= mymob.wiz_instability_display
|
||||
|
||||
mymob.wiz_energy_display = new/obj/screen/wizard/energy()
|
||||
mymob.wiz_energy_display.screen_loc = ui_wiz_energy_display
|
||||
mymob.wiz_energy_display.icon_state = "wiz_energy"
|
||||
hud_elements |= mymob.wiz_energy_display
|
||||
|
||||
|
||||
mymob.pain = new /obj/screen( null )
|
||||
|
||||
mymob.zone_sel = new /obj/screen/zone_sel( null )
|
||||
@@ -371,3 +382,15 @@
|
||||
/obj/screen/ling/chems
|
||||
name = "chemical storage"
|
||||
icon_state = "power_display"
|
||||
|
||||
/obj/screen/wizard
|
||||
invisibility = 101
|
||||
|
||||
/obj/screen/wizard/instability
|
||||
name = "instability"
|
||||
icon_state = "instability-1"
|
||||
invisibility = 0
|
||||
|
||||
/obj/screen/wizard/energy
|
||||
name = "energy"
|
||||
icon_state = "wiz_energy"
|
||||
@@ -15,7 +15,7 @@ mob/attacked_with_item() should then do mob-type specific stuff (like determinin
|
||||
|
||||
Item Hit Effects:
|
||||
|
||||
item/apply_hit_effect() can be overriden to do whatever you want. However "standard" physical damage based weapons should make use of the target mob's hit_with_weapon() proc to
|
||||
item/apply_hit_effect() can be overriden to do whatever you want. However "standard" physical damage based weapons should make use of the target mob's hit_with_weapon() proc to
|
||||
avoid code duplication. This includes items that may sometimes act as a standard weapon in addition to having other effects (e.g. stunbatons on harm intent).
|
||||
*/
|
||||
|
||||
@@ -76,9 +76,10 @@ avoid code duplication. This includes items that may sometimes act as a standard
|
||||
|
||||
//Called when a weapon is used to make a successful melee attack on a mob. Returns the blocked result
|
||||
/obj/item/proc/apply_hit_effect(mob/living/target, mob/living/user, var/hit_zone)
|
||||
user.break_cloak()
|
||||
if(hitsound)
|
||||
playsound(loc, hitsound, 50, 1, -1)
|
||||
|
||||
|
||||
var/power = force
|
||||
if(HULK in user.mutations)
|
||||
power *= 2
|
||||
|
||||
@@ -65,6 +65,7 @@ var/list/gamemode_cache = list()
|
||||
var/usewhitelist = 0
|
||||
var/kick_inactive = 0 //force disconnect for inactive players after this many minutes, if non-0
|
||||
var/show_mods = 0
|
||||
var/show_devs = 0
|
||||
var/show_mentors = 0
|
||||
var/mods_can_tempban = 0
|
||||
var/mods_can_job_tempban = 0
|
||||
@@ -505,6 +506,9 @@ var/list/gamemode_cache = list()
|
||||
if("show_mods")
|
||||
config.show_mods = 1
|
||||
|
||||
if("show_devs")
|
||||
config.show_devs = 1
|
||||
|
||||
if("show_mentors")
|
||||
config.show_mentors = 1
|
||||
|
||||
|
||||
@@ -223,6 +223,17 @@ var/global/datum/shuttle_controller/shuttle_controller
|
||||
shuttles["Administration"] = shuttle
|
||||
process_shuttles += shuttle
|
||||
|
||||
shuttle = new()
|
||||
shuttle.location = 1
|
||||
shuttle.warmup_time = 10 //want some warmup time so people can cancel.
|
||||
shuttle.area_offsite = locate(/area/shuttle/trade/centcom)
|
||||
shuttle.area_station = locate(/area/shuttle/trade/station)
|
||||
shuttle.docking_controller_tag = "trade_shuttle"
|
||||
shuttle.dock_target_station = "trade_shuttle_dock_airlock"
|
||||
shuttle.dock_target_offsite = "trade_shuttle_bay"
|
||||
shuttles["Trade"] = shuttle
|
||||
process_shuttles += shuttle
|
||||
|
||||
shuttle = new()
|
||||
shuttle.area_offsite = locate(/area/shuttle/alien/base)
|
||||
shuttle.area_station = locate(/area/shuttle/alien/mine)
|
||||
|
||||
@@ -102,6 +102,15 @@ var/global/list/all_exonet_connections = list()
|
||||
return exonet.address
|
||||
return null
|
||||
|
||||
// Proc: get_atom_from_address()
|
||||
// Parameters: 1 (target_address - the desired address to find)
|
||||
// Description: Searches an address for the atom it is attached for, otherwise returns null.
|
||||
/datum/exonet_protocol/proc/get_atom_from_address(var/target_address)
|
||||
for(var/datum/exonet_protocol/exonet in all_exonet_connections)
|
||||
if(exonet.address == target_address)
|
||||
return exonet.holder
|
||||
return null
|
||||
|
||||
// Proc: send_message()
|
||||
// Parameters: 3 (target_address - the desired address to send the message to, message - the message to send, text - the message text if message is of type "text")
|
||||
// Description: Sends the message to target_address, by calling receive_message() on the desired datum.
|
||||
|
||||
389
code/datums/autolathe/arms.dm
Normal file
389
code/datums/autolathe/arms.dm
Normal file
@@ -0,0 +1,389 @@
|
||||
/datum/category_item/autolathe/arms/syringegun_ammo
|
||||
name = "syringe gun cartridge"
|
||||
path =/obj/item/weapon/syringe_cartridge
|
||||
|
||||
////////////////
|
||||
/*Ammo casings*/
|
||||
////////////////
|
||||
|
||||
/datum/category_item/autolathe/arms/shotgun_blanks
|
||||
name = "ammunition (12g, blank)"
|
||||
path =/obj/item/ammo_casing/shotgun/blank
|
||||
|
||||
/datum/category_item/autolathe/arms/shotgun_beanbag
|
||||
name = "ammunition (12g, beanbag)"
|
||||
path =/obj/item/ammo_casing/shotgun/beanbag
|
||||
|
||||
/datum/category_item/autolathe/arms/shotgun_flash
|
||||
name = "ammunition (12g, flash)"
|
||||
path =/obj/item/ammo_casing/shotgun/flash
|
||||
|
||||
/datum/category_item/autolathe/arms/shotgun
|
||||
name = "ammunition (12g, slug)"
|
||||
path =/obj/item/ammo_casing/shotgun
|
||||
hidden = 1
|
||||
|
||||
/datum/category_item/autolathe/arms/shotgun_pellet
|
||||
name = "ammunition (12g, pellet)"
|
||||
path =/obj/item/ammo_casing/shotgun/pellet
|
||||
hidden = 1
|
||||
|
||||
/datum/category_item/autolathe/arms/stunshell
|
||||
name = "ammunition (stun cartridge, shotgun)"
|
||||
path =/obj/item/ammo_casing/shotgun/stunshell
|
||||
hidden = 1
|
||||
|
||||
//////////////////
|
||||
/*Ammo magazines*/
|
||||
//////////////////
|
||||
|
||||
/////// 5mm
|
||||
/*
|
||||
/datum/category_item/autolathe/arms/pistol_5mm
|
||||
name = "pistol magazine (5mm)"
|
||||
path =/obj/item/ammo_magazine/c5mm
|
||||
category = "Arms and Ammunition"
|
||||
hidden = 1
|
||||
*/
|
||||
|
||||
/////// .45
|
||||
/datum/category_item/autolathe/arms/pistol_45
|
||||
name = "pistol magazine (.45)"
|
||||
path =/obj/item/ammo_magazine/c45m
|
||||
hidden = 1
|
||||
|
||||
/datum/category_item/autolathe/arms/pistol_45p
|
||||
name = "pistol magazine (.45 practice)"
|
||||
path =/obj/item/ammo_magazine/c45m/practice
|
||||
|
||||
/datum/category_item/autolathe/arms/pistol_45r
|
||||
name = "pistol magazine (.45 rubber)"
|
||||
path =/obj/item/ammo_magazine/c45m/rubber
|
||||
|
||||
/datum/category_item/autolathe/arms/pistol_45f
|
||||
name = "pistol magazine (.45 flash)"
|
||||
path =/obj/item/ammo_magazine/c45m/flash
|
||||
|
||||
/datum/category_item/autolathe/arms/pistol_45uzi
|
||||
name = "uzi magazine (.45)"
|
||||
path =/obj/item/ammo_magazine/c45uzi
|
||||
hidden = 1
|
||||
|
||||
/datum/category_item/autolathe/arms/tommymag
|
||||
name = "Tommygun magazine (.45)"
|
||||
path =/obj/item/ammo_magazine/tommymag
|
||||
hidden = 1
|
||||
|
||||
/datum/category_item/autolathe/arms/tommydrum
|
||||
name = "Tommygun drum magazine (.45)"
|
||||
path =/obj/item/ammo_magazine/tommydrum
|
||||
hidden = 1
|
||||
|
||||
/////// 9mm
|
||||
|
||||
/obj/item/ammo_magazine/mc9mm/flash
|
||||
ammo_type =/obj/item/ammo_casing/c9mmf
|
||||
|
||||
/obj/item/ammo_magazine/mc9mm/rubber
|
||||
name = "magazine (9mm rubber)"
|
||||
ammo_type =/obj/item/ammo_casing/c9mmr
|
||||
|
||||
/obj/item/ammo_magazine/mc9mm/practice
|
||||
name = "magazine (9mm practice)"
|
||||
ammo_type =/obj/item/ammo_casing/c9mmp
|
||||
|
||||
/datum/category_item/autolathe/arms/pistol_9mm
|
||||
name = "pistol magazine (9mm)"
|
||||
path =/obj/item/ammo_magazine/mc9mm
|
||||
hidden = 1
|
||||
|
||||
/datum/category_item/autolathe/arms/pistol_9mmr
|
||||
name = "pistol magazine (9mm rubber)"
|
||||
path =/obj/item/ammo_magazine/mc9mm/rubber
|
||||
|
||||
/datum/category_item/autolathe/arms/pistol_9mmp
|
||||
name = "pistol magazine (9mm practice)"
|
||||
path =/obj/item/ammo_magazine/mc9mm/practice
|
||||
|
||||
/datum/category_item/autolathe/arms/pistol_9mmf
|
||||
name = "pistol magazine (9mm flash)"
|
||||
path =/obj/item/ammo_magazine/mc9mm/flash
|
||||
|
||||
/datum/category_item/autolathe/arms/smg_9mm
|
||||
name = "top-mounted SMG magazine (9mm)"
|
||||
path =/obj/item/ammo_magazine/mc9mmt
|
||||
hidden = 1
|
||||
|
||||
/datum/category_item/autolathe/arms/smg_9mmr
|
||||
name = "top-mounted SMG magazine (9mm rubber)"
|
||||
path =/obj/item/ammo_magazine/mc9mmt/rubber
|
||||
|
||||
/datum/category_item/autolathe/arms/smg_9mmp
|
||||
name = "top-mounted SMG magazine (9mm practice)"
|
||||
path =/obj/item/ammo_magazine/mc9mmt/practice
|
||||
|
||||
/datum/category_item/autolathe/arms/smg_9mmf
|
||||
name = "top-mounted SMG magazine (9mm flash)"
|
||||
path =/obj/item/ammo_magazine/mc9mmt/flash
|
||||
|
||||
/////// 10mm
|
||||
/datum/category_item/autolathe/arms/smg_10mm
|
||||
name = "SMG magazine (10mm)"
|
||||
path =/obj/item/ammo_magazine/a10mm
|
||||
hidden = 1
|
||||
|
||||
/datum/category_item/autolathe/arms/pistol_50
|
||||
name = "pistol magazine (.50AE)"
|
||||
path =/obj/item/ammo_magazine/a50
|
||||
hidden = 1
|
||||
|
||||
/////// 5.56mm
|
||||
/datum/category_item/autolathe/arms/rifle_556
|
||||
name = "10rnd rifle magazine (5.56mm)"
|
||||
path =/obj/item/ammo_magazine/a556
|
||||
hidden = 1
|
||||
|
||||
/datum/category_item/autolathe/arms/rifle_556p
|
||||
name = "10rnd rifle magazine (5.56mm practice)"
|
||||
path =/obj/item/ammo_magazine/a556/practice
|
||||
|
||||
/datum/category_item/autolathe/arms/rifle_556m
|
||||
name = "20rnd rifle magazine (5.56mm)"
|
||||
path =/obj/item/ammo_magazine/a556m
|
||||
hidden = 1
|
||||
|
||||
/datum/category_item/autolathe/arms/rifle_556mp
|
||||
name = "20rnd rifle magazine (5.56mm practice)"
|
||||
path =/obj/item/ammo_magazine/a556m/practice
|
||||
hidden = 1
|
||||
|
||||
/////// 7.62
|
||||
/datum/category_item/autolathe/arms/rifle_small_762
|
||||
name = "10rnd rifle magazine (7.62mm)"
|
||||
path =/obj/item/ammo_magazine/s762
|
||||
hidden = 1
|
||||
|
||||
/datum/category_item/autolathe/arms/rifle_762
|
||||
name = "20rnd rifle magazine (7.62mm)"
|
||||
path =/obj/item/ammo_magazine/c762
|
||||
hidden = 1
|
||||
|
||||
/datum/category_item/autolathe/arms/machinegun_762
|
||||
name = "machinegun box magazine (7.62)"
|
||||
path =/obj/item/ammo_magazine/a762
|
||||
hidden = 1
|
||||
|
||||
/datum/category_item/autolathe/arms/shotgun_magazine
|
||||
name = "24rnd shotgun magazine (12g)"
|
||||
path =/obj/item/ammo_magazine/g12
|
||||
hidden = 1
|
||||
|
||||
/* Commented out until autolathe stuff is decided/fixed. Will probably remove these entirely. -Spades
|
||||
// These should always be/empty! The idea is to fill them up manually with ammo clips.
|
||||
|
||||
/datum/category_item/autolathe/arms/pistol_5mm
|
||||
name = "pistol magazine (5mm)"
|
||||
path =/obj/item/ammo_magazine/c5mm/empty
|
||||
category = "Arms and Ammunition"
|
||||
hidden = 1
|
||||
|
||||
/datum/category_item/autolathe/arms/smg_5mm
|
||||
name = "top-mounted SMG magazine (5mm)"
|
||||
path =/obj/item/ammo_magazine/c5mmt/empty
|
||||
category = "Arms and Ammunition"
|
||||
hidden = 1
|
||||
|
||||
/datum/category_item/autolathe/arms/pistol_45
|
||||
name = "pistol magazine (.45)"
|
||||
path =/obj/item/ammo_magazine/c45m/empty
|
||||
category = "Arms and Ammunition"
|
||||
|
||||
/datum/category_item/autolathe/arms/pistol_45uzi
|
||||
name = "uzi magazine (.45)"
|
||||
path =/obj/item/ammo_magazine/c45uzi/empty
|
||||
category = "Arms and Ammunition"
|
||||
hidden = 1
|
||||
|
||||
/datum/category_item/autolathe/arms/tommymag
|
||||
name = "Tommygun magazine (.45)"
|
||||
path =/obj/item/ammo_magazine/tommymag/empty
|
||||
category = "Arms and Ammunition"
|
||||
hidden = 1
|
||||
|
||||
/datum/category_item/autolathe/arms/tommydrum
|
||||
name = "Tommygun drum magazine (.45)"
|
||||
path =/obj/item/ammo_magazine/tommydrum/empty
|
||||
category = "Arms and Ammunition"
|
||||
hidden = 1
|
||||
|
||||
/datum/category_item/autolathe/arms/pistol_9mm
|
||||
name = "pistol magazine (9mm)"
|
||||
path =/obj/item/ammo_magazine/mc9mm/empty
|
||||
category = "Arms and Ammunition"
|
||||
|
||||
/datum/category_item/autolathe/arms/smg_9mm
|
||||
name = "top-mounted SMG magazine (9mm)"
|
||||
path =/obj/item/ammo_magazine/mc9mmt/empty
|
||||
category = "Arms and Ammunition"
|
||||
|
||||
/datum/category_item/autolathe/arms/smg_10mm
|
||||
name = "SMG magazine (10mm)"
|
||||
path =/obj/item/ammo_magazine/a10mm/empty
|
||||
category = "Arms and Ammunition"
|
||||
hidden = 1
|
||||
|
||||
/datum/category_item/autolathe/arms/pistol_50
|
||||
name = "pistol magazine (.50AE)"
|
||||
path =/obj/item/ammo_magazine/a50/empty
|
||||
category = "Arms and Ammunition"
|
||||
hidden = 1
|
||||
|
||||
/datum/category_item/autolathe/arms/rifle_556
|
||||
name = "10rnd rifle magazine (5.56mm)"
|
||||
path =/obj/item/ammo_magazine/a556/empty
|
||||
category = "Arms and Ammunition"
|
||||
|
||||
/datum/category_item/autolathe/arms/rifle_556m
|
||||
name = "20rnd rifle magazine (5.56mm)"
|
||||
path =/obj/item/ammo_magazine/a556m/empty
|
||||
category = "Arms and Ammunition"
|
||||
hidden = 1
|
||||
|
||||
/datum/category_item/autolathe/arms/rifle_SVD
|
||||
name = "10rnd rifle magazine (7.62mm)"
|
||||
path =/obj/item/ammo_magazine/SVD/empty
|
||||
category = "Arms and Ammunition"
|
||||
hidden = 1
|
||||
|
||||
/datum/category_item/autolathe/arms/rifle_762
|
||||
name = "20rnd rifle magazine (7.62mm)"
|
||||
path =/obj/item/ammo_magazine/c762/empty
|
||||
category = "Arms and Ammunition"
|
||||
hidden = 1
|
||||
|
||||
/datum/category_item/autolathe/arms/machinegun_762
|
||||
name = "machinegun box magazine (7.62)"
|
||||
path =/obj/item/ammo_magazine/a762/empty
|
||||
category = "Arms and Ammunition"
|
||||
hidden = 1
|
||||
|
||||
/datum/category_item/autolathe/arms/shotgun_magazine
|
||||
name = "24rnd shotgun magazine (12g)"
|
||||
path =/obj/item/ammo_magazine/g12/empty
|
||||
category = "Arms and Ammunition"
|
||||
hidden = 1*/
|
||||
|
||||
///////////////////////////////
|
||||
/*Ammo clips and Speedloaders*/
|
||||
///////////////////////////////
|
||||
|
||||
/datum/category_item/autolathe/arms/speedloader_357
|
||||
name = "speedloader (.357)"
|
||||
path =/obj/item/ammo_magazine/a357
|
||||
hidden = 1
|
||||
|
||||
/datum/category_item/autolathe/arms/speedloader_38
|
||||
name = "speedloader (.38)"
|
||||
path =/obj/item/ammo_magazine/c38
|
||||
hidden = 1
|
||||
|
||||
/datum/category_item/autolathe/arms/speedloader_38r
|
||||
name = "speedloader (.38 rubber)"
|
||||
path =/obj/item/ammo_magazine/c38/rubber
|
||||
|
||||
// Commented out until metal exploits with autolathe is fixed.
|
||||
/*/datum/category_item/autolathe/arms/pistol_clip_45
|
||||
name = "ammo clip (.45)"
|
||||
path =/obj/item/ammo_magazine/clip/c45
|
||||
category = "Arms and Ammunition"
|
||||
hidden = 1
|
||||
|
||||
/datum/category_item/autolathe/arms/pistol_clip_45r
|
||||
name = "ammo clip (.45 rubber)"
|
||||
path =/obj/item/ammo_magazine/clip/c45/rubber
|
||||
category = "Arms and Ammunition"
|
||||
|
||||
/datum/category_item/autolathe/arms/pistol_clip_45f
|
||||
name = "ammo clip (.45 flash)"
|
||||
path =/obj/item/ammo_magazine/clip/c45/flash
|
||||
category = "Arms and Ammunition"
|
||||
|
||||
/datum/category_item/autolathe/arms/pistol_clip_45p
|
||||
name = "ammo clip (.45 practice)"
|
||||
path =/obj/item/ammo_magazine/clip/c45/practice
|
||||
category = "Arms and Ammunition"
|
||||
|
||||
/datum/category_item/autolathe/arms/pistol_clip_9mm
|
||||
name = "ammo clip (9mm)"
|
||||
path =/obj/item/ammo_magazine/clip/c9mm
|
||||
category = "Arms and Ammunition"
|
||||
hidden = 1
|
||||
|
||||
/datum/category_item/autolathe/arms/pistol_clip_9mmr
|
||||
name = "ammo clip (9mm rubber)"
|
||||
path =/obj/item/ammo_magazine/clip/c9mm/rubber
|
||||
category = "Arms and Ammunition"
|
||||
|
||||
/datum/category_item/autolathe/arms/pistol_clip_9mmp
|
||||
name = "ammo clip (9mm practice)"
|
||||
path =/obj/item/ammo_magazine/clip/c9mm/practice
|
||||
category = "Arms and Ammunition"
|
||||
|
||||
/datum/category_item/autolathe/arms/pistol_clip_9mmf
|
||||
name = "ammo clip (9mm flash)"
|
||||
path =/obj/item/ammo_magazine/clip/c9mm/flash
|
||||
category = "Arms and Ammunition"
|
||||
|
||||
/datum/category_item/autolathe/arms/pistol_clip_5mm
|
||||
name = "ammo clip (5mm)"
|
||||
path =/obj/item/ammo_magazine/clip/c5mm
|
||||
category = "Arms and Ammunition"
|
||||
hidden = 1
|
||||
|
||||
/datum/category_item/autolathe/arms/pistol_clip_10mm
|
||||
name = "ammo clip (10mm)"
|
||||
path =/obj/item/ammo_magazine/clip/a10mm
|
||||
category = "Arms and Ammunition"
|
||||
hidden = 1
|
||||
|
||||
/datum/category_item/autolathe/arms/pistol_clip_50
|
||||
name = "ammo clip (.50AE)"
|
||||
path =/obj/item/ammo_magazine/clip/a50
|
||||
category = "Arms and Ammunition"
|
||||
hidden = 1
|
||||
|
||||
/datum/category_item/autolathe/arms/rifle_clip_556
|
||||
name = "ammo clip (5.56mm)"
|
||||
path =/obj/item/ammo_magazine/clip/a556
|
||||
category = "Arms and Ammunition"
|
||||
hidden = 1
|
||||
|
||||
/datum/category_item/autolathe/arms/rifle_clip_556_practice
|
||||
name = "ammo clip (5.56mm practice)"
|
||||
path =/obj/item/ammo_magazine/clip/a556/practice
|
||||
category = "Arms and Ammunition"
|
||||
*/
|
||||
|
||||
/datum/category_item/autolathe/arms/rifle_clip_762
|
||||
name = "ammo clip (7.62mm)"
|
||||
path =/obj/item/ammo_magazine/clip/a762
|
||||
hidden = 1
|
||||
|
||||
/datum/category_item/autolathe/arms/rifle_clip_762_practice
|
||||
name = "ammo clip (7.62mm practice)"
|
||||
path =/obj/item/ammo_magazine/clip/a762/practice
|
||||
|
||||
/datum/category_item/autolathe/arms/knuckledusters
|
||||
name = "knuckle dusters"
|
||||
path =/obj/item/weapon/material/knuckledusters
|
||||
hidden = 1
|
||||
|
||||
/datum/category_item/autolathe/arms/tacknife
|
||||
name = "tactical knife"
|
||||
path =/obj/item/weapon/material/hatchet/tacknife
|
||||
hidden = 1
|
||||
|
||||
/datum/category_item/autolathe/arms/flamethrower
|
||||
name = "flamethrower"
|
||||
path =/obj/item/weapon/flamethrower/full
|
||||
hidden = 1
|
||||
71
code/datums/autolathe/autolathe.dm
Normal file
71
code/datums/autolathe/autolathe.dm
Normal file
@@ -0,0 +1,71 @@
|
||||
var/datum/category_collection/autolathe/autolathe_recipes
|
||||
|
||||
/datum/category_item/autolathe/New()
|
||||
..()
|
||||
var/obj/item/I = new path()
|
||||
if(I.matter && !resources)
|
||||
resources = list()
|
||||
for(var/material in I.matter)
|
||||
resources[material] = I.matter[material]*1.25 // More expensive to produce than they are to recycle.
|
||||
if(is_stack && istype(I, /obj/item/stack))
|
||||
var/obj/item/stack/IS = I
|
||||
max_stack = IS.max_amount
|
||||
qdel(I)
|
||||
|
||||
/****************************
|
||||
* Category Collection Setup *
|
||||
****************************/
|
||||
|
||||
/datum/category_collection/autolathe
|
||||
category_group_type = /datum/category_group/autolathe
|
||||
|
||||
/*************
|
||||
* Categories *
|
||||
*************/
|
||||
|
||||
/datum/category_group/autolathe
|
||||
|
||||
/datum/category_group/autolathe/all
|
||||
name = "All"
|
||||
category_item_type = /datum/category_item/autolathe
|
||||
|
||||
///datum/category_group/autolathe/all/New()
|
||||
|
||||
/datum/category_group/autolathe/arms
|
||||
name = "Arms and Ammunition"
|
||||
category_item_type = /datum/category_item/autolathe/arms
|
||||
|
||||
/datum/category_group/autolathe/devices
|
||||
name = "Devices and Components"
|
||||
category_item_type = /datum/category_item/autolathe/devices
|
||||
|
||||
/datum/category_group/autolathe/engineering
|
||||
name = "Engineering"
|
||||
category_item_type = /datum/category_item/autolathe/engineering
|
||||
|
||||
/datum/category_group/autolathe/general
|
||||
name = "General"
|
||||
category_item_type = /datum/category_item/autolathe/general
|
||||
|
||||
/datum/category_group/autolathe/medical
|
||||
name = "Medical"
|
||||
category_item_type = /datum/category_item/autolathe/medical
|
||||
|
||||
/datum/category_group/autolathe/tools
|
||||
name = "Tools"
|
||||
category_item_type = /datum/category_item/autolathe/tools
|
||||
|
||||
/*******************
|
||||
* Category entries *
|
||||
*******************/
|
||||
|
||||
/datum/category_item/autolathe
|
||||
var/path
|
||||
var/list/resources
|
||||
var/hidden
|
||||
var/power_use = 0
|
||||
var/is_stack
|
||||
var/max_stack
|
||||
|
||||
/datum/category_item/autolathe/dd_SortValue()
|
||||
return name
|
||||
32
code/datums/autolathe/devices.dm
Normal file
32
code/datums/autolathe/devices.dm
Normal file
@@ -0,0 +1,32 @@
|
||||
/datum/category_item/autolathe/devices/consolescreen
|
||||
name = "console screen"
|
||||
path =/obj/item/weapon/stock_parts/console_screen
|
||||
|
||||
/datum/category_item/autolathe/devices/igniter
|
||||
name = "igniter"
|
||||
path =/obj/item/device/assembly/igniter
|
||||
|
||||
/datum/category_item/autolathe/devices/signaler
|
||||
name = "signaler"
|
||||
path =/obj/item/device/assembly/signaler
|
||||
|
||||
/datum/category_item/autolathe/devices/sensor_infra
|
||||
name = "infrared sensor"
|
||||
path =/obj/item/device/assembly/infra
|
||||
|
||||
/datum/category_item/autolathe/devices/timer
|
||||
name = "timer"
|
||||
path =/obj/item/device/assembly/timer
|
||||
|
||||
/datum/category_item/autolathe/devices/sensor_prox
|
||||
name = "proximity sensor"
|
||||
path =/obj/item/device/assembly/prox_sensor
|
||||
|
||||
/datum/category_item/autolathe/devices/beartrap
|
||||
name = "mechanical trap"
|
||||
path =/obj/item/weapon/beartrap
|
||||
|
||||
/datum/category_item/autolathe/devices/electropack
|
||||
name = "electropack"
|
||||
path =/obj/item/device/radio/electropack
|
||||
hidden = 1
|
||||
95
code/datums/autolathe/engineering.dm
Normal file
95
code/datums/autolathe/engineering.dm
Normal file
@@ -0,0 +1,95 @@
|
||||
/datum/category_item/autolathe/engineering/airlockmodule
|
||||
name = "airlock electronics"
|
||||
path =/obj/item/weapon/airlock_electronics
|
||||
|
||||
/datum/category_item/autolathe/engineering/airalarm
|
||||
name = "air alarm electronics"
|
||||
path =/obj/item/weapon/circuitboard/airalarm
|
||||
|
||||
/datum/category_item/autolathe/engineering/firealarm
|
||||
name = "fire alarm electronics"
|
||||
path =/obj/item/weapon/circuitboard/firealarm
|
||||
|
||||
/datum/category_item/autolathe/engineering/powermodule
|
||||
name = "power control module"
|
||||
path =/obj/item/weapon/module/power_control
|
||||
|
||||
/datum/category_item/autolathe/engineering/statusdisplay
|
||||
name = "status display electronics"
|
||||
path =/obj/item/weapon/circuitboard/status_display
|
||||
|
||||
/datum/category_item/autolathe/engineering/aistatusdisplay
|
||||
name = "ai status display electronics"
|
||||
path =/obj/item/weapon/circuitboard/ai_status_display
|
||||
|
||||
/datum/category_item/autolathe/engineering/newscaster
|
||||
name = "newscaster electronics"
|
||||
path =/obj/item/weapon/circuitboard/newscaster
|
||||
|
||||
/datum/category_item/autolathe/engineering/atm
|
||||
name = "atm electronics"
|
||||
path =/obj/item/weapon/circuitboard/atm
|
||||
|
||||
/datum/category_item/autolathe/engineering/intercom
|
||||
name = "intercom electronics"
|
||||
path =/obj/item/weapon/circuitboard/intercom
|
||||
|
||||
/datum/category_item/autolathe/engineering/holopad
|
||||
name = "holopad electronics"
|
||||
path =/obj/item/weapon/circuitboard/holopad
|
||||
|
||||
/datum/category_item/autolathe/engineering/guestpass
|
||||
name = "guestpass console electronics"
|
||||
path =/obj/item/weapon/circuitboard/guestpass
|
||||
|
||||
/datum/category_item/autolathe/engineering/entertainment
|
||||
name = "entertainment camera electronics"
|
||||
path =/obj/item/weapon/circuitboard/security/telescreen/entertainment
|
||||
|
||||
/datum/category_item/autolathe/engineering/keycard
|
||||
name = "keycard authenticator electronics"
|
||||
path =/obj/item/weapon/circuitboard/keycard_auth
|
||||
|
||||
/datum/category_item/autolathe/engineering/photocopier
|
||||
name = "photocopier electronics"
|
||||
path =/obj/item/weapon/circuitboard/photocopier
|
||||
|
||||
/datum/category_item/autolathe/engineering/fax
|
||||
name = "fax machine electronics"
|
||||
path =/obj/item/weapon/circuitboard/fax
|
||||
|
||||
/datum/category_item/autolathe/engineering/microwave
|
||||
name = "microwave electronics"
|
||||
path =/obj/item/weapon/circuitboard/microwave
|
||||
|
||||
/datum/category_item/autolathe/engineering/washing
|
||||
name = "washing machine electronics"
|
||||
path =/obj/item/weapon/circuitboard/washing
|
||||
|
||||
/datum/category_item/autolathe/engineering/request
|
||||
name = "request console electronics"
|
||||
path =/obj/item/weapon/circuitboard/request
|
||||
|
||||
/datum/category_item/autolathe/engineering/motor
|
||||
name = "motor"
|
||||
path =/obj/item/weapon/stock_parts/motor
|
||||
|
||||
/datum/category_item/autolathe/engineering/gear
|
||||
name = "gear"
|
||||
path =/obj/item/weapon/stock_parts/gear
|
||||
|
||||
/datum/category_item/autolathe/engineering/spring
|
||||
name = "spring"
|
||||
path =/obj/item/weapon/stock_parts/spring
|
||||
|
||||
/datum/category_item/autolathe/engineering/rcd_ammo
|
||||
name = "matter cartridge"
|
||||
path =/obj/item/weapon/rcd_ammo
|
||||
|
||||
/datum/category_item/autolathe/engineering/rcd
|
||||
name = "rapid construction device"
|
||||
path =/obj/item/weapon/rcd
|
||||
|
||||
/datum/category_item/autolathe/engineering/camera_assembly
|
||||
name = "camera assembly"
|
||||
path =/obj/item/weapon/camera_assembly
|
||||
124
code/datums/autolathe/general.dm
Normal file
124
code/datums/autolathe/general.dm
Normal file
@@ -0,0 +1,124 @@
|
||||
/datum/category_item/autolathe/general/bucket
|
||||
name = "bucket"
|
||||
path =/obj/item/weapon/reagent_containers/glass/bucket
|
||||
|
||||
/datum/category_item/autolathe/general/cooler_bottle
|
||||
name = "water-cooler bottle"
|
||||
path =/obj/item/weapon/reagent_containers/glass/cooler_bottle
|
||||
|
||||
/datum/category_item/autolathe/general/drinkingglass_square
|
||||
name = "half-pint glass"
|
||||
path =/obj/item/weapon/reagent_containers/food/drinks/glass2/square
|
||||
|
||||
/datum/category_item/autolathe/general/drinkingglass_rocks
|
||||
name = "rocks glass"
|
||||
path =/obj/item/weapon/reagent_containers/food/drinks/glass2/rocks
|
||||
|
||||
/datum/category_item/autolathe/general/drinkingglass_shake
|
||||
name = "milkshake glass"
|
||||
path =/obj/item/weapon/reagent_containers/food/drinks/glass2/shake
|
||||
|
||||
/datum/category_item/autolathe/general/drinkingglass_cocktail
|
||||
name = "cocktail glass"
|
||||
path =/obj/item/weapon/reagent_containers/food/drinks/glass2/cocktail
|
||||
|
||||
/datum/category_item/autolathe/general/drinkingglass_shot
|
||||
name = "shot glass"
|
||||
path =/obj/item/weapon/reagent_containers/food/drinks/glass2/shot
|
||||
|
||||
/datum/category_item/autolathe/general/drinkingglass_pint
|
||||
name = "pint glass"
|
||||
path =/obj/item/weapon/reagent_containers/food/drinks/glass2/pint
|
||||
|
||||
/datum/category_item/autolathe/general/drinkingglass_mug
|
||||
name = "glass mug"
|
||||
path =/obj/item/weapon/reagent_containers/food/drinks/glass2/mug
|
||||
|
||||
/datum/category_item/autolathe/general/drinkingglass_wine
|
||||
name = "wine glass"
|
||||
path =/obj/item/weapon/reagent_containers/food/drinks/glass2/wine
|
||||
|
||||
/datum/category_item/autolathe/general/flashlight
|
||||
name = "flashlight"
|
||||
path =/obj/item/device/flashlight
|
||||
|
||||
/datum/category_item/autolathe/general/floor_light
|
||||
name = "floor light"
|
||||
path =/obj/machinery/floor_light
|
||||
|
||||
/datum/category_item/autolathe/general/extinguisher
|
||||
name = "extinguisher"
|
||||
path =/obj/item/weapon/extinguisher
|
||||
|
||||
/datum/category_item/autolathe/general/jar
|
||||
name = "jar"
|
||||
path =/obj/item/glass_jar
|
||||
|
||||
/datum/category_item/autolathe/general/radio_headset
|
||||
name = "radio headset"
|
||||
path =/obj/item/device/radio/headset
|
||||
|
||||
/datum/category_item/autolathe/general/radio_bounced
|
||||
name = "station bounced radio"
|
||||
path =/obj/item/device/radio/off
|
||||
|
||||
/datum/category_item/autolathe/general/suit_cooler
|
||||
name = "suit cooling unit"
|
||||
path =/obj/item/device/suit_cooling_unit
|
||||
|
||||
/datum/category_item/autolathe/general/weldermask
|
||||
name = "welding mask"
|
||||
path =/obj/item/clothing/head/welding
|
||||
|
||||
/datum/category_item/autolathe/general/metal
|
||||
name = "steel sheets"
|
||||
path =/obj/item/stack/material/steel
|
||||
is_stack = 1
|
||||
|
||||
/datum/category_item/autolathe/general/glass
|
||||
name = "glass sheets"
|
||||
path =/obj/item/stack/material/glass
|
||||
is_stack = 1
|
||||
|
||||
/datum/category_item/autolathe/general/rglass
|
||||
name = "reinforced glass sheets"
|
||||
path =/obj/item/stack/material/glass/reinforced
|
||||
is_stack = 1
|
||||
|
||||
/datum/category_item/autolathe/general/rods
|
||||
name = "metal rods"
|
||||
path =/obj/item/stack/rods
|
||||
is_stack = 1
|
||||
|
||||
/datum/category_item/autolathe/general/knife
|
||||
name = "kitchen knife"
|
||||
path =/obj/item/weapon/material/knife
|
||||
|
||||
/datum/category_item/autolathe/general/taperecorder
|
||||
name = "tape recorder"
|
||||
path =/obj/item/device/taperecorder
|
||||
|
||||
/datum/category_item/autolathe/general/tube
|
||||
name = "light tube"
|
||||
path =/obj/item/weapon/light/tube
|
||||
|
||||
/datum/category_item/autolathe/general/bulb
|
||||
name = "light bulb"
|
||||
path =/obj/item/weapon/light/bulb
|
||||
|
||||
/datum/category_item/autolathe/general/ashtray_glass
|
||||
name = "glass ashtray"
|
||||
path =/obj/item/weapon/material/ashtray/glass
|
||||
|
||||
/datum/category_item/autolathe/general/weldinggoggles
|
||||
name = "welding goggles"
|
||||
path =/obj/item/clothing/glasses/welding
|
||||
|
||||
/datum/category_item/autolathe/general/maglight
|
||||
name = "maglight"
|
||||
path =/obj/item/device/flashlight/maglight
|
||||
|
||||
/datum/category_item/autolathe/general/handcuffs
|
||||
name = "handcuffs"
|
||||
path =/obj/item/weapon/handcuffs
|
||||
hidden = 1
|
||||
39
code/datums/autolathe/medical.dm
Normal file
39
code/datums/autolathe/medical.dm
Normal file
@@ -0,0 +1,39 @@
|
||||
/datum/category_item/autolathe/medical/scalpel
|
||||
name = "scalpel"
|
||||
path =/obj/item/weapon/scalpel
|
||||
|
||||
/datum/category_item/autolathe/medical/circularsaw
|
||||
name = "circular saw"
|
||||
path =/obj/item/weapon/circular_saw
|
||||
|
||||
/datum/category_item/autolathe/medical/surgicaldrill
|
||||
name = "surgical drill"
|
||||
path =/obj/item/weapon/surgicaldrill
|
||||
|
||||
/datum/category_item/autolathe/medical/retractor
|
||||
name = "retractor"
|
||||
path =/obj/item/weapon/retractor
|
||||
|
||||
/datum/category_item/autolathe/medical/cautery
|
||||
name = "cautery"
|
||||
path =/obj/item/weapon/cautery
|
||||
|
||||
/datum/category_item/autolathe/medical/hemostat
|
||||
name = "hemostat"
|
||||
path =/obj/item/weapon/hemostat
|
||||
|
||||
/datum/category_item/autolathe/medical/beaker
|
||||
name = "glass beaker"
|
||||
path =/obj/item/weapon/reagent_containers/glass/beaker
|
||||
|
||||
/datum/category_item/autolathe/medical/beaker_large
|
||||
name = "large glass beaker"
|
||||
path =/obj/item/weapon/reagent_containers/glass/beaker/large
|
||||
|
||||
/datum/category_item/autolathe/medical/vial
|
||||
name = "glass vial"
|
||||
path =/obj/item/weapon/reagent_containers/glass/beaker/vial
|
||||
|
||||
/datum/category_item/autolathe/medical/syringe
|
||||
name = "syringe"
|
||||
path =/obj/item/weapon/reagent_containers/syringe
|
||||
39
code/datums/autolathe/tools.dm
Normal file
39
code/datums/autolathe/tools.dm
Normal file
@@ -0,0 +1,39 @@
|
||||
/datum/category_item/autolathe/tools/crowbar
|
||||
name = "crowbar"
|
||||
path =/obj/item/weapon/crowbar
|
||||
|
||||
/datum/category_item/autolathe/tools/multitool
|
||||
name = "multitool"
|
||||
path =/obj/item/device/multitool
|
||||
|
||||
/datum/category_item/autolathe/tools/t_scanner
|
||||
name = "T-ray scanner"
|
||||
path =/obj/item/device/t_scanner
|
||||
|
||||
/datum/category_item/autolathe/tools/weldertool
|
||||
name = "welding tool"
|
||||
path =/obj/item/weapon/weldingtool
|
||||
|
||||
/datum/category_item/autolathe/tools/screwdriver
|
||||
name = "screwdriver"
|
||||
path =/obj/item/weapon/screwdriver
|
||||
|
||||
/datum/category_item/autolathe/tools/wirecutters
|
||||
name = "wirecutters"
|
||||
path =/obj/item/weapon/wirecutters
|
||||
|
||||
/datum/category_item/autolathe/tools/wrench
|
||||
name = "wrench"
|
||||
path =/obj/item/weapon/wrench
|
||||
|
||||
/datum/category_item/autolathe/tools/hatchet
|
||||
name = "hatchet"
|
||||
path =/obj/item/weapon/material/hatchet
|
||||
|
||||
/datum/category_item/autolathe/tools/minihoe
|
||||
name = "mini hoe"
|
||||
path =/obj/item/weapon/material/minihoe
|
||||
|
||||
/datum/category_item/autolathe/tools/welder_industrial
|
||||
name = "industrial welding tool"
|
||||
path =/obj/item/weapon/weldingtool/largetank
|
||||
@@ -228,6 +228,8 @@
|
||||
L.fields["faction"] = H.personal_faction
|
||||
L.fields["religion"] = H.religion
|
||||
L.fields["image"] = getFlatIcon(H) //This is god-awful
|
||||
L.fields["antagfac"] = H.antag_faction
|
||||
L.fields["antagvis"] = H.antag_vis
|
||||
if(H.exploit_record && !jobban_isbanned(H, "Records"))
|
||||
L.fields["exploit_record"] = H.exploit_record
|
||||
else
|
||||
|
||||
30
code/datums/hierarchy.dm
Normal file
30
code/datums/hierarchy.dm
Normal file
@@ -0,0 +1,30 @@
|
||||
/decl/hierarchy
|
||||
var/name = "Hierarchy"
|
||||
var/hierarchy_type
|
||||
var/decl/hierarchy/parent
|
||||
var/list/decl/hierarchy/children
|
||||
|
||||
/decl/hierarchy/New(var/full_init = TRUE)
|
||||
children = list()
|
||||
if(!full_init)
|
||||
return
|
||||
|
||||
var/list/all_subtypes = list()
|
||||
all_subtypes[type] = src
|
||||
for(var/subtype in subtypesof(type))
|
||||
all_subtypes[subtype] = new subtype(FALSE)
|
||||
|
||||
for(var/subtype in (all_subtypes - type))
|
||||
var/decl/hierarchy/subtype_instance = all_subtypes[subtype]
|
||||
var/decl/hierarchy/subtype_parent = all_subtypes[subtype_instance.parent_type]
|
||||
subtype_instance.parent = subtype_parent
|
||||
dd_insertObjectList(subtype_parent.children, subtype_instance)
|
||||
|
||||
/decl/hierarchy/proc/is_category()
|
||||
return hierarchy_type == type || children.len
|
||||
|
||||
/decl/hierarchy/proc/is_hidden_category()
|
||||
return hierarchy_type == type
|
||||
|
||||
/decl/hierarchy/dd_SortValue()
|
||||
return name
|
||||
@@ -52,7 +52,7 @@
|
||||
|
||||
/datum/supply_packs/atmos/canister_sleeping_agent
|
||||
name = "N2O gas canister"
|
||||
cost = 40
|
||||
cost = 15
|
||||
containername = "N2O gas canister crate"
|
||||
containertype = /obj/structure/closet/crate/secure/large
|
||||
access = access_atmospherics
|
||||
@@ -60,7 +60,7 @@
|
||||
|
||||
/datum/supply_packs/atmos/canister_carbon_dioxide
|
||||
name = "Carbon dioxide gas canister"
|
||||
cost = 40
|
||||
cost = 15
|
||||
containername = "CO2 canister crate"
|
||||
containertype = /obj/structure/closet/crate/secure/large
|
||||
access = access_atmospherics
|
||||
@@ -69,7 +69,7 @@
|
||||
/datum/supply_packs/atmos/air_dispenser
|
||||
contains = list(/obj/machinery/pipedispenser/orderable)
|
||||
name = "Pipe Dispenser"
|
||||
cost = 35
|
||||
cost = 25
|
||||
containertype = /obj/structure/closet/crate/secure/large
|
||||
containername = "Pipe Dispenser Crate"
|
||||
access = access_atmospherics
|
||||
@@ -77,7 +77,32 @@
|
||||
/datum/supply_packs/atmos/disposals_dispenser
|
||||
contains = list(/obj/machinery/pipedispenser/disposal/orderable)
|
||||
name = "Disposals Pipe Dispenser"
|
||||
cost = 35
|
||||
cost = 25
|
||||
containertype = /obj/structure/closet/crate/secure/large
|
||||
containername = "Disposal Dispenser Crate"
|
||||
access = access_atmospherics
|
||||
access = access_atmospherics
|
||||
|
||||
/datum/supply_packs/atmos/internals
|
||||
name = "Internals crate"
|
||||
contains = list(
|
||||
/obj/item/clothing/mask/gas = 3,
|
||||
/obj/item/weapon/tank/air = 3
|
||||
)
|
||||
cost = 10
|
||||
containertype = /obj/structure/closet/crate/internals
|
||||
containername = "Internals crate"
|
||||
|
||||
/datum/supply_packs/atmos/evacuation
|
||||
name = "Emergency equipment"
|
||||
contains = list(
|
||||
/obj/item/weapon/storage/toolbox/emergency = 2,
|
||||
/obj/item/clothing/suit/storage/hazardvest = 2,
|
||||
/obj/item/clothing/suit/storage/vest = 2,
|
||||
/obj/item/weapon/tank/emergency_oxygen/engi = 4,
|
||||
/obj/item/clothing/suit/space/emergency = 4,
|
||||
/obj/item/clothing/head/helmet/space/emergency = 4,
|
||||
/obj/item/clothing/mask/gas = 4
|
||||
)
|
||||
cost = 35
|
||||
containertype = /obj/structure/closet/crate/internals
|
||||
containername = "Emergency crate"
|
||||
|
||||
@@ -14,7 +14,7 @@
|
||||
)
|
||||
|
||||
name = "Contraband crate"
|
||||
cost = 30
|
||||
cost = 25
|
||||
containertype = /obj/structure/closet/crate
|
||||
containername = "Unlabeled crate"
|
||||
contraband = 1
|
||||
@@ -28,10 +28,10 @@
|
||||
/obj/item/weapon/pen/reagent/paralysis,
|
||||
/obj/item/weapon/grenade/chem_grenade/incendiary
|
||||
)
|
||||
cost = 20
|
||||
cost = 25
|
||||
containertype = /obj/structure/closet/crate
|
||||
containername = "Special Ops crate"
|
||||
hidden = 1
|
||||
contraband = 1
|
||||
|
||||
/datum/supply_packs/security/bolt_rifles_mosin
|
||||
name = "Surplus militia rifles"
|
||||
@@ -40,6 +40,6 @@
|
||||
/obj/item/ammo_magazine/clip/a762 = 6
|
||||
)
|
||||
cost = 50
|
||||
hidden = 1
|
||||
contraband = 1
|
||||
containertype = /obj/structure/closet/crate/secure/weapon
|
||||
containername = "Weapons crate"
|
||||
@@ -124,7 +124,7 @@ datum/supply_packs/costumes/witch
|
||||
/datum/supply_packs/randomised/costumes/costume_hats
|
||||
name = "Costume hats"
|
||||
containername = "Actor hats crate"
|
||||
containertype = /obj/structure/closet
|
||||
containertype = /obj/structure/closet/crate
|
||||
cost = 10
|
||||
num_contained = 3
|
||||
contains = list(
|
||||
|
||||
@@ -29,7 +29,7 @@
|
||||
/obj/item/weapon/cell = 2,
|
||||
/obj/item/weapon/cell/high = 2
|
||||
)
|
||||
cost = 15
|
||||
cost = 10
|
||||
containertype = /obj/structure/closet/crate
|
||||
containername = "Electrical maintenance crate"
|
||||
|
||||
@@ -48,7 +48,7 @@
|
||||
/datum/supply_packs/eng/fueltank
|
||||
name = "Fuel tank crate"
|
||||
contains = list(/obj/structure/reagent_dispensers/fueltank)
|
||||
cost = 8
|
||||
cost = 10
|
||||
containertype = /obj/structure/largecrate
|
||||
containername = "fuel tank crate"
|
||||
|
||||
@@ -72,7 +72,7 @@
|
||||
containername = "Emitter crate"
|
||||
access = access_ce
|
||||
|
||||
/datum/supply_packs/engine/eng/field_gen
|
||||
/datum/supply_packs/eng/engine/field_gen
|
||||
name = "Field Generator crate"
|
||||
contains = list(/obj/machinery/field_generator = 2)
|
||||
containertype = /obj/structure/closet/crate/secure
|
||||
@@ -110,7 +110,7 @@
|
||||
/datum/supply_packs/eng/shield_gen
|
||||
contains = list(/obj/item/weapon/circuitboard/shield_gen)
|
||||
name = "Bubble shield generator circuitry"
|
||||
cost = 50
|
||||
cost = 30
|
||||
containertype = /obj/structure/closet/crate/secure
|
||||
containername = "bubble shield generator circuitry crate"
|
||||
access = access_ce
|
||||
@@ -118,7 +118,7 @@
|
||||
/datum/supply_packs/eng/shield_gen_ex
|
||||
contains = list(/obj/item/weapon/circuitboard/shield_gen_ex)
|
||||
name = "Hull shield generator circuitry"
|
||||
cost = 50
|
||||
cost = 30
|
||||
containertype = /obj/structure/closet/crate/secure
|
||||
containername = "hull shield generator circuitry crate"
|
||||
access = access_ce
|
||||
@@ -126,7 +126,7 @@
|
||||
/datum/supply_packs/eng/shield_cap
|
||||
contains = list(/obj/item/weapon/circuitboard/shield_cap)
|
||||
name = "Bubble shield capacitor circuitry"
|
||||
cost = 50
|
||||
cost = 30
|
||||
containertype = /obj/structure/closet/crate/secure
|
||||
containername = "shield capacitor circuitry crate"
|
||||
access = access_ce
|
||||
@@ -142,7 +142,7 @@
|
||||
/datum/supply_packs/eng/teg
|
||||
contains = list(/obj/machinery/power/generator)
|
||||
name = "Mark I Thermoelectric Generator"
|
||||
cost = 75
|
||||
cost = 50
|
||||
containertype = /obj/structure/closet/crate/secure/large
|
||||
containername = "Mk1 TEG crate"
|
||||
access = access_engine
|
||||
@@ -150,7 +150,7 @@
|
||||
/datum/supply_packs/eng/circulator
|
||||
contains = list(/obj/machinery/atmospherics/binary/circulator)
|
||||
name = "Binary atmospheric circulator"
|
||||
cost = 60
|
||||
cost = 50
|
||||
containertype = /obj/structure/closet/crate/secure/large
|
||||
containername = "Atmospheric circulator crate"
|
||||
access = access_engine
|
||||
@@ -167,7 +167,7 @@
|
||||
|
||||
/datum/supply_packs/eng/pacman_parts
|
||||
name = "P.A.C.M.A.N. portable generator parts"
|
||||
cost = 45
|
||||
cost = 25
|
||||
containername = "P.A.C.M.A.N. Portable Generator Construction Kit"
|
||||
containertype = /obj/structure/closet/crate/secure
|
||||
access = access_tech_storage
|
||||
@@ -180,7 +180,7 @@
|
||||
|
||||
/datum/supply_packs/eng/super_pacman_parts
|
||||
name = "Super P.A.C.M.A.N. portable generator parts"
|
||||
cost = 55
|
||||
cost = 35
|
||||
containername = "Super P.A.C.M.A.N. portable generator construction kit"
|
||||
containertype = /obj/structure/closet/crate/secure
|
||||
access = access_tech_storage
|
||||
|
||||
@@ -22,7 +22,7 @@
|
||||
/obj/item/weapon/reagent_containers/food/drinks/bottle/small/ale = 2,
|
||||
/obj/item/weapon/reagent_containers/food/drinks/bottle/small/beer = 4,
|
||||
)
|
||||
cost = 20
|
||||
cost = 10
|
||||
containertype = /obj/structure/closet/crate
|
||||
containername = "Party equipment"
|
||||
|
||||
|
||||
@@ -17,21 +17,21 @@
|
||||
/datum/supply_packs/hydro/farwa
|
||||
name = "Farwa crate"
|
||||
contains = list (/obj/item/weapon/storage/box/monkeycubes/farwacubes)
|
||||
cost = 30
|
||||
cost = 20
|
||||
containertype = /obj/structure/closet/crate/freezer
|
||||
containername = "Farwa crate"
|
||||
|
||||
/datum/supply_packs/hydro/neara
|
||||
name = "Neaera crate"
|
||||
contains = list (/obj/item/weapon/storage/box/monkeycubes/neaeracubes)
|
||||
cost = 30
|
||||
cost = 20
|
||||
containertype = /obj/structure/closet/crate/freezer
|
||||
containername = "Neaera crate"
|
||||
|
||||
/datum/supply_packs/hydro/stok
|
||||
name = "Stok crate"
|
||||
contains = list (/obj/item/weapon/storage/box/monkeycubes/stokcubes)
|
||||
cost = 30
|
||||
cost = 20
|
||||
containertype = /obj/structure/closet/crate/freezer
|
||||
containername = "Stok crate"
|
||||
|
||||
@@ -55,14 +55,14 @@
|
||||
/obj/item/weapon/material/minihoe,
|
||||
/obj/item/weapon/storage/box/botanydisk
|
||||
)
|
||||
cost = 15
|
||||
cost = 20
|
||||
containertype = /obj/structure/closet/crate/hydroponics
|
||||
containername = "Hydroponics crate"
|
||||
access = access_hydroponics
|
||||
|
||||
/datum/supply_packs/hydro/cow
|
||||
name = "Cow crate"
|
||||
cost = 30
|
||||
cost = 25
|
||||
containertype = /obj/structure/largecrate/animal/cow
|
||||
containername = "Cow crate"
|
||||
access = access_hydroponics
|
||||
@@ -76,7 +76,7 @@
|
||||
|
||||
/datum/supply_packs/hydro/chicken
|
||||
name = "Chicken crate"
|
||||
cost = 20
|
||||
cost = 25
|
||||
containertype = /obj/structure/largecrate/animal/chick
|
||||
containername = "Chicken crate"
|
||||
access = access_hydroponics
|
||||
@@ -123,7 +123,7 @@
|
||||
/datum/supply_packs/hydro/watertank
|
||||
name = "Water tank crate"
|
||||
contains = list(/obj/structure/reagent_dispensers/watertank)
|
||||
cost = 8
|
||||
cost = 10
|
||||
containertype = /obj/structure/largecrate
|
||||
containername = "water tank crate"
|
||||
|
||||
@@ -142,7 +142,7 @@
|
||||
|
||||
/datum/supply_packs/hydro/tray
|
||||
name = "Empty hydroponics tray"
|
||||
cost = 30
|
||||
cost = 20
|
||||
containertype = /obj/structure/closet/crate/hydroponics
|
||||
containername = "Hydroponics tray crate"
|
||||
contains = list(/obj/machinery/portable_atmospherics/hydroponics{anchored = 0})
|
||||
|
||||
@@ -9,40 +9,35 @@
|
||||
|
||||
/datum/supply_packs/materials/metal50
|
||||
name = "50 metal sheets"
|
||||
contains = list(/obj/item/stack/material/steel)
|
||||
amount = 50
|
||||
contains = list(/obj/item/stack/material/steel/fifty)
|
||||
cost = 10
|
||||
containertype = /obj/structure/closet/crate
|
||||
containername = "Metal sheets crate"
|
||||
|
||||
/datum/supply_packs/materials/glass50
|
||||
name = "50 glass sheets"
|
||||
contains = list(/obj/item/stack/material/glass)
|
||||
amount = 50
|
||||
contains = list(/obj/item/stack/material/glass/fifty)
|
||||
cost = 10
|
||||
containertype = /obj/structure/closet/crate
|
||||
containername = "Glass sheets crate"
|
||||
|
||||
/datum/supply_packs/materials/wood50
|
||||
name = "50 wooden planks"
|
||||
contains = list(/obj/item/stack/material/wood)
|
||||
amount = 50
|
||||
contains = list(/obj/item/stack/material/wood/fifty)
|
||||
cost = 10
|
||||
containertype = /obj/structure/closet/crate
|
||||
containername = "Wooden planks crate"
|
||||
|
||||
/datum/supply_packs/materials/plastic50
|
||||
name = "50 plastic sheets"
|
||||
contains = list(/obj/item/stack/material/plastic)
|
||||
amount = 50
|
||||
contains = list(/obj/item/stack/material/plastic/fifty)
|
||||
cost = 10
|
||||
containertype = /obj/structure/closet/crate
|
||||
containername = "Plastic sheets crate"
|
||||
|
||||
/datum/supply_packs/materials/cardboard_sheets
|
||||
contains = list(/obj/item/stack/material/cardboard)
|
||||
contains = list(/obj/item/stack/material/cardboard/fifty)
|
||||
name = "50 cardboard sheets"
|
||||
amount = 50
|
||||
cost = 10
|
||||
containertype = /obj/structure/closet/crate
|
||||
containername = "Cardboard sheets crate"
|
||||
@@ -53,10 +48,9 @@
|
||||
containername = "Imported carpet crate"
|
||||
cost = 15
|
||||
contains = list(
|
||||
/obj/item/stack/tile/carpet,
|
||||
/obj/item/stack/tile/carpet/blue
|
||||
/obj/item/stack/tile/carpet/fifty,
|
||||
/obj/item/stack/tile/carpet/blue/fifty
|
||||
)
|
||||
amount = 50
|
||||
|
||||
|
||||
/datum/supply_packs/misc/linoleum
|
||||
@@ -64,5 +58,4 @@
|
||||
containertype = /obj/structure/closet/crate
|
||||
containername = "Linoleum crate"
|
||||
cost = 15
|
||||
contains = list(/obj/item/stack/tile/linoleum)
|
||||
amount = 50
|
||||
contains = list(/obj/item/stack/tile/linoleum/fifty)
|
||||
@@ -42,7 +42,7 @@
|
||||
/datum/supply_packs/med/cryobag
|
||||
name = "Stasis bag crate"
|
||||
contains = list(/obj/item/bodybag/cryobag = 3)
|
||||
cost = 50
|
||||
cost = 40
|
||||
containertype = /obj/structure/closet/crate/medical
|
||||
containername = "Stasis bag crate"
|
||||
|
||||
@@ -75,7 +75,7 @@
|
||||
/obj/item/weapon/storage/box/gloves,
|
||||
/obj/item/weapon/storage/belt/medical = 3
|
||||
)
|
||||
cost = 15
|
||||
cost = 10
|
||||
containertype = "/obj/structure/closet/crate"
|
||||
containername = "Sterile equipment crate"
|
||||
|
||||
@@ -87,7 +87,7 @@
|
||||
/obj/item/device/radio/headset/headset_med/alt = 3,
|
||||
/obj/item/clothing/suit/storage/hooded/wintercoat/medical = 3
|
||||
)
|
||||
cost = 15
|
||||
cost = 10
|
||||
containertype = "/obj/structure/closet/crate/secure"
|
||||
containername = "Medical surplus equipment"
|
||||
access = access_medical
|
||||
@@ -111,7 +111,7 @@
|
||||
/obj/item/device/flashlight/pen,
|
||||
/obj/item/weapon/reagent_containers/syringe
|
||||
)
|
||||
cost = 60
|
||||
cost = 50
|
||||
containertype = "/obj/structure/closet/crate/secure"
|
||||
containername = "Chief medical officer equipment"
|
||||
access = access_cmo
|
||||
@@ -157,7 +157,7 @@
|
||||
/obj/item/weapon/storage/box/pillbottles,
|
||||
/obj/item/weapon/reagent_containers/syringe
|
||||
)
|
||||
cost = 15
|
||||
cost = 20
|
||||
containertype = "/obj/structure/closet/crate/secure"
|
||||
containername = "Chemist equipment"
|
||||
access = access_chemistry
|
||||
@@ -204,7 +204,7 @@
|
||||
/obj/item/weapon/pen,
|
||||
/obj/item/weapon/cartridge/medical
|
||||
)
|
||||
cost = 15
|
||||
cost = 20
|
||||
containertype = "/obj/structure/closet/crate/secure"
|
||||
containername = "Psychiatrist equipment"
|
||||
access = access_psychiatrist
|
||||
@@ -225,7 +225,7 @@
|
||||
/obj/item/weapon/storage/box/masks,
|
||||
/obj/item/weapon/storage/box/gloves
|
||||
)
|
||||
cost = 15
|
||||
cost = 10
|
||||
containertype = "/obj/structure/closet/crate/secure"
|
||||
containername = "Medical scrubs crate"
|
||||
access = access_medical_equip
|
||||
@@ -269,7 +269,7 @@
|
||||
/obj/item/weapon/storage/box/masks,
|
||||
/obj/item/weapon/storage/box/gloves
|
||||
)
|
||||
cost = 15
|
||||
cost = 10
|
||||
containertype = "/obj/structure/closet/crate/secure"
|
||||
containername = "Medical uniform crate"
|
||||
access = access_medical_equip
|
||||
|
||||
@@ -67,31 +67,6 @@
|
||||
/obj/item/clothing/accessory/storage/white_drop_pouches,
|
||||
/obj/item/clothing/accessory/storage/webbing
|
||||
)
|
||||
cost = 15
|
||||
cost = 10
|
||||
containertype = "/obj/structure/closet/crate"
|
||||
containername = "Webbing crate"
|
||||
|
||||
/datum/supply_packs/atmos/internals
|
||||
name = "Internals crate"
|
||||
contains = list(
|
||||
/obj/item/clothing/mask/gas = 3,
|
||||
/obj/item/weapon/tank/air = 3
|
||||
)
|
||||
cost = 10
|
||||
containertype = /obj/structure/closet/crate/internals
|
||||
containername = "Internals crate"
|
||||
|
||||
/datum/supply_packs/atmos/evacuation
|
||||
name = "Emergency equipment"
|
||||
contains = list(
|
||||
/obj/item/weapon/storage/toolbox/emergency = 2,
|
||||
/obj/item/clothing/suit/storage/hazardvest = 2,
|
||||
/obj/item/clothing/suit/storage/vest = 2,
|
||||
/obj/item/weapon/tank/emergency_oxygen/engi = 4,
|
||||
/obj/item/clothing/suit/space/emergency = 4,
|
||||
/obj/item/clothing/head/helmet/space/emergency = 4,
|
||||
/obj/item/clothing/mask/gas = 4
|
||||
)
|
||||
cost = 45
|
||||
containertype = /obj/structure/closet/crate/internals
|
||||
containername = "Emergency crate"
|
||||
@@ -40,7 +40,7 @@
|
||||
contains = list(
|
||||
/obj/item/weapon/gun/energy/xray = 2,
|
||||
/obj/item/weapon/shield/energy = 2)
|
||||
cost = 125
|
||||
cost = 100
|
||||
containertype = /obj/structure/closet/crate/secure/weapon
|
||||
containername = "Experimental weapons crate"
|
||||
access = access_armory
|
||||
@@ -60,7 +60,7 @@
|
||||
/obj/item/weapon/storage/box/shotgunshells,
|
||||
/obj/item/weapon/gun/projectile/shotgun/pump/combat = 2
|
||||
)
|
||||
cost = 65
|
||||
cost = 50
|
||||
containertype = /obj/structure/closet/crate/secure
|
||||
containername = "Shotgun crate"
|
||||
access = access_armory
|
||||
@@ -68,7 +68,7 @@
|
||||
/datum/supply_packs/munitions/erifle
|
||||
name = "Energy marksman crate"
|
||||
contains = list(/obj/item/weapon/gun/energy/sniperrifle = 2)
|
||||
cost = 90
|
||||
cost = 100
|
||||
containertype = /obj/structure/closet/crate/secure
|
||||
containername = "Energy marksman crate"
|
||||
access = access_armory
|
||||
@@ -91,7 +91,7 @@
|
||||
/obj/item/weapon/gun/projectile/automatic/wt550,
|
||||
/obj/item/weapon/gun/projectile/automatic/z8
|
||||
)
|
||||
cost = 90
|
||||
cost = 100
|
||||
containertype = /obj/structure/closet/crate/secure
|
||||
containername = "Automatic weapon crate"
|
||||
access = access_armory
|
||||
@@ -119,12 +119,12 @@
|
||||
containername = "Weapons crate"
|
||||
|
||||
/datum/supply_packs/munitions/shotgunammo
|
||||
name = "Ballistic ammunition crate"
|
||||
name = "Shotgun ammunition crate"
|
||||
contains = list(
|
||||
/obj/item/weapon/storage/box/shotgunammo = 2,
|
||||
/obj/item/weapon/storage/box/shotgunshells = 2
|
||||
)
|
||||
cost = 60
|
||||
cost = 25
|
||||
containertype = /obj/structure/closet/crate/secure
|
||||
containername = "ballistic ammunition crate"
|
||||
access = access_armory
|
||||
@@ -137,7 +137,7 @@
|
||||
/obj/item/ammo_magazine/mc9mmt/rubber,
|
||||
/obj/item/ammo_magazine/a556
|
||||
)
|
||||
cost = 20
|
||||
cost = 25
|
||||
containertype = /obj/structure/closet/crate/secure
|
||||
containername = "Automatic weapon ammunition crate"
|
||||
access = access_armory
|
||||
@@ -145,7 +145,7 @@
|
||||
/datum/supply_packs/munitions/beanbagammo
|
||||
name = "Beanbag shells"
|
||||
contains = list(/obj/item/weapon/storage/box/beanbags = 3)
|
||||
cost = 30
|
||||
cost = 25
|
||||
containertype = /obj/structure/closet/crate
|
||||
containername = "Beanbag shells"
|
||||
access = null
|
||||
|
||||
@@ -19,7 +19,7 @@
|
||||
/obj/item/weapon/material/twohanded/spear/foam = 2,
|
||||
/obj/item/weapon/material/twohanded/fireaxe/foam = 2
|
||||
)
|
||||
cost = 80
|
||||
cost = 50
|
||||
containertype = /obj/structure/closet/crate
|
||||
containername = "foam weapon crate"
|
||||
|
||||
@@ -33,7 +33,7 @@
|
||||
)
|
||||
containertype = /obj/structure/closet
|
||||
containername = "Lasertag Closet"
|
||||
cost = 20
|
||||
cost = 10
|
||||
|
||||
/datum/supply_packs/recreation/artscrafts
|
||||
name = "Arts and Crafts supplies"
|
||||
|
||||
@@ -11,7 +11,7 @@
|
||||
group = "Robotics"
|
||||
access = access_robotics
|
||||
|
||||
/datum/supply_packs/eng/robotics
|
||||
/datum/supply_packs/robotics/robotics_assembly
|
||||
name = "Robotics assembly crate"
|
||||
contains = list(
|
||||
/obj/item/device/assembly/prox_sensor = 3,
|
||||
@@ -58,7 +58,7 @@
|
||||
/obj/item/weapon/circuitboard/mecha/ripley/main,
|
||||
/obj/item/weapon/circuitboard/mecha/ripley/peripherals
|
||||
)
|
||||
cost = 30
|
||||
cost = 25
|
||||
containertype = /obj/structure/closet/crate/secure
|
||||
containername = "APLU \"Ripley\" Circuit Crate"
|
||||
access = access_robotics
|
||||
|
||||
@@ -8,17 +8,20 @@
|
||||
/datum/supply_packs/sci/coolanttank
|
||||
name = "Coolant tank crate"
|
||||
contains = list(/obj/structure/reagent_dispensers/coolanttank)
|
||||
cost = 16
|
||||
cost = 15
|
||||
containertype = /obj/structure/largecrate
|
||||
containername = "coolant tank crate"
|
||||
|
||||
/datum/supply_packs/sci/phoron
|
||||
name = "Phoron assembly crate"
|
||||
name = "Phoron research crate"
|
||||
contains = list(
|
||||
/obj/item/weapon/tank/phoron = 3,
|
||||
/obj/item/weapon/tank/oxygen = 3,
|
||||
/obj/item/device/assembly/igniter = 3,
|
||||
/obj/item/device/assembly/prox_sensor = 3,
|
||||
/obj/item/device/assembly/timer = 3
|
||||
/obj/item/device/assembly/timer = 3,
|
||||
/obj/item/device/assembly/signaler = 3,
|
||||
/obj/item/device/transfer_valve = 3
|
||||
)
|
||||
cost = 10
|
||||
containertype = /obj/structure/closet/crate/secure/phoron
|
||||
|
||||
@@ -82,7 +82,7 @@
|
||||
/obj/item/clothing/gloves/arm_guard/bulletproof,
|
||||
/obj/item/clothing/shoes/leg_guard/bulletproof
|
||||
)
|
||||
cost = 35
|
||||
cost = 40
|
||||
containertype = /obj/structure/closet/crate/secure
|
||||
containername = "bullet resistant armor set crate"
|
||||
access = access_armory
|
||||
@@ -104,7 +104,7 @@
|
||||
name = "Tactical suits"
|
||||
containertype = /obj/structure/closet/crate/secure
|
||||
containername = "Tactical Suit Locker"
|
||||
cost = 60
|
||||
cost = 40
|
||||
access = access_armory
|
||||
contains = list(
|
||||
/obj/item/clothing/under/tactical,
|
||||
@@ -162,7 +162,7 @@
|
||||
/obj/item/device/radio/headset/headset_sec/alt = 3,
|
||||
/obj/item/clothing/suit/storage/hooded/wintercoat/security = 3
|
||||
)
|
||||
cost = 25
|
||||
cost = 10
|
||||
containertype = "/obj/structure/closet/crate/secure"
|
||||
containername = "Security surplus equipment"
|
||||
access = null
|
||||
@@ -189,7 +189,7 @@
|
||||
/obj/item/device/flashlight/maglight,
|
||||
/obj/item/weapon/storage/briefcase/crimekit
|
||||
)
|
||||
cost = 40
|
||||
cost = 20
|
||||
containertype = "/obj/structure/closet/crate/secure"
|
||||
containername = "Forensic equipment"
|
||||
access = access_forensics_lockers
|
||||
@@ -210,7 +210,7 @@
|
||||
/obj/item/clothing/accessory/badge/holo/detective = 2,
|
||||
/obj/item/clothing/gloves/black = 2
|
||||
)
|
||||
cost = 20
|
||||
cost = 10
|
||||
containertype = "/obj/structure/closet/crate/secure"
|
||||
containername = "Investigation clothing"
|
||||
access = access_forensics_lockers
|
||||
@@ -240,7 +240,7 @@
|
||||
/obj/item/weapon/gun/energy/taser,
|
||||
/obj/item/device/flashlight/maglight
|
||||
)
|
||||
cost = 30
|
||||
cost = 20
|
||||
containertype = "/obj/structure/closet/crate/secure"
|
||||
containername = "Officer equipment"
|
||||
access = access_brig
|
||||
@@ -251,8 +251,8 @@
|
||||
/obj/item/clothing/suit/storage/vest/warden,
|
||||
/obj/item/clothing/under/rank/warden,
|
||||
/obj/item/clothing/under/rank/warden/corp,
|
||||
/obj/item/clothing/suit/armor/vest/warden,
|
||||
/obj/item/clothing/suit/armor/vest/warden/alt,
|
||||
/obj/item/clothing/suit/storage/vest/wardencoat,
|
||||
/obj/item/clothing/suit/storage/vest/wardencoat/alt,
|
||||
/obj/item/clothing/head/helmet/warden,
|
||||
/obj/item/weapon/cartridge/security,
|
||||
/obj/item/device/radio/headset/headset_sec,
|
||||
@@ -268,7 +268,7 @@
|
||||
/obj/item/clothing/head/beret/sec/corporate/warden,
|
||||
/obj/item/device/flashlight/maglight
|
||||
)
|
||||
cost = 45
|
||||
cost = 20
|
||||
containertype = "/obj/structure/closet/crate/secure"
|
||||
containername = "Warden equipment"
|
||||
access = access_armory
|
||||
@@ -279,7 +279,7 @@
|
||||
/obj/item/clothing/head/helmet/HoS,
|
||||
/obj/item/clothing/suit/storage/vest/hos,
|
||||
/obj/item/clothing/under/rank/head_of_security/corp,
|
||||
/obj/item/clothing/suit/armor/hos,
|
||||
/obj/item/clothing/suit/storage/vest/hoscoat,
|
||||
/obj/item/clothing/head/helmet/HoS/dermal,
|
||||
/obj/item/weapon/cartridge/hos,
|
||||
/obj/item/device/radio/headset/heads/hos,
|
||||
@@ -294,7 +294,7 @@
|
||||
/obj/item/clothing/head/beret/sec/corporate/hos,
|
||||
/obj/item/device/flashlight/maglight
|
||||
)
|
||||
cost = 65
|
||||
cost = 50
|
||||
containertype = "/obj/structure/closet/crate/secure"
|
||||
containername = "Head of security equipment"
|
||||
access = access_hos
|
||||
@@ -309,12 +309,11 @@
|
||||
/obj/item/clothing/under/rank/security2 = 4,
|
||||
/obj/item/clothing/under/rank/warden,
|
||||
/obj/item/clothing/under/rank/head_of_security,
|
||||
/obj/item/clothing/suit/armor/hos/jensen,
|
||||
/obj/item/clothing/head/soft/sec = 4,
|
||||
/obj/item/clothing/gloves/black = 4,
|
||||
/obj/item/weapon/storage/box/holobadge
|
||||
)
|
||||
cost = 20
|
||||
cost = 10
|
||||
containertype = "/obj/structure/closet/crate/secure"
|
||||
containername = "Security uniform crate"
|
||||
|
||||
@@ -335,7 +334,7 @@
|
||||
/obj/item/clothing/gloves/black = 4,
|
||||
/obj/item/weapon/storage/box/holobadge
|
||||
)
|
||||
cost = 20
|
||||
cost = 10
|
||||
containertype = "/obj/structure/closet/crate/secure"
|
||||
containername = "Navy blue security uniform crate"
|
||||
|
||||
@@ -355,21 +354,22 @@
|
||||
/obj/item/clothing/gloves/black = 4,
|
||||
/obj/item/weapon/storage/box/holobadge
|
||||
)
|
||||
cost = 20
|
||||
cost = 10
|
||||
containertype = "/obj/structure/closet/crate/secure"
|
||||
containername = "Corporate security uniform crate"
|
||||
|
||||
/datum/supply_packs/security/biosuit
|
||||
name = "Security biohazard gear"
|
||||
contains = list(
|
||||
/obj/item/clothing/head/bio_hood/security,
|
||||
/obj/item/clothing/under/rank/security,
|
||||
/obj/item/clothing/suit/bio_suit/security,
|
||||
/obj/item/clothing/shoes/white,
|
||||
/obj/item/clothing/mask/gas,
|
||||
/obj/item/weapon/tank/oxygen,
|
||||
/obj/item/clothing/gloves/latex
|
||||
/obj/item/clothing/head/bio_hood/security = 3,
|
||||
/obj/item/clothing/under/rank/security = 3,
|
||||
/obj/item/clothing/suit/bio_suit/security = 3,
|
||||
/obj/item/clothing/shoes/white = 3,
|
||||
/obj/item/clothing/mask/gas = 3,
|
||||
/obj/item/weapon/tank/oxygen = 3,
|
||||
/obj/item/clothing/gloves/latex,
|
||||
/obj/item/weapon/storage/box/gloves
|
||||
)
|
||||
cost = 35
|
||||
cost = 50
|
||||
containertype = "/obj/structure/closet/crate/secure"
|
||||
containername = "Security biohazard gear"
|
||||
|
||||
@@ -50,12 +50,19 @@
|
||||
containertype = /obj/structure/closet/crate
|
||||
containername = "Janitorial supplies"
|
||||
|
||||
/datum/supply_packs/supply/boxes
|
||||
name = "Empty boxes"
|
||||
contains = list(/obj/item/weapon/storage/box = 10)
|
||||
/datum/supply_packs/supply/shipping
|
||||
name = "Shipping supplies"
|
||||
contains = list(
|
||||
/obj/item/stack/material/cardboard/fifty,
|
||||
/obj/item/weapon/packageWrap = 4,
|
||||
/obj/item/weapon/wrapping_paper = 2,
|
||||
/obj/item/device/destTagger,
|
||||
/obj/item/weapon/hand_labeler,
|
||||
/obj/item/weapon/wirecutters,
|
||||
/obj/item/weapon/tape_roll = 2)
|
||||
cost = 10
|
||||
containertype = "/obj/structure/closet/crate"
|
||||
containername = "Empty box crate"
|
||||
containername = "Shipping supplies crate"
|
||||
|
||||
/datum/supply_packs/supply/bureaucracy
|
||||
contains = list(
|
||||
@@ -103,7 +110,7 @@
|
||||
/obj/item/clothing/glasses/material,
|
||||
/obj/item/clothing/glasses/meson
|
||||
)
|
||||
cost = 15
|
||||
cost = 10
|
||||
containertype = "/obj/structure/closet/crate/secure"
|
||||
containername = "Shaft miner equipment"
|
||||
access = access_mining
|
||||
@@ -118,7 +125,7 @@
|
||||
/datum/supply_packs/supply/cargotrain
|
||||
name = "Cargo Train Tug"
|
||||
contains = list(/obj/vehicle/train/cargo/engine)
|
||||
cost = 45
|
||||
cost = 35
|
||||
containertype = /obj/structure/largecrate
|
||||
containername = "Cargo Train Tug Crate"
|
||||
|
||||
|
||||
@@ -28,7 +28,6 @@ var/list/all_supply_groups = list("Atmospherics",
|
||||
var/name = null
|
||||
var/list/contains = list()
|
||||
var/manifest = ""
|
||||
var/amount = null
|
||||
var/cost = null
|
||||
var/containertype = null
|
||||
var/containername = null
|
||||
|
||||
@@ -16,7 +16,7 @@
|
||||
/obj/item/clothing/shoes/magboots = 2,
|
||||
/obj/item/weapon/tank/oxygen = 2,
|
||||
)
|
||||
cost = 45
|
||||
cost = 40
|
||||
containertype = "/obj/structure/closet/crate/secure"
|
||||
containername = "Atmospheric voidsuit crate"
|
||||
access = access_atmospherics
|
||||
@@ -58,7 +58,7 @@
|
||||
/obj/item/clothing/shoes/magboots = 2,
|
||||
/obj/item/weapon/tank/oxygen = 2
|
||||
)
|
||||
cost = 55
|
||||
cost = 40
|
||||
containertype = "/obj/structure/closet/crate/secure"
|
||||
containername = "Security voidsuit crate"
|
||||
|
||||
@@ -70,7 +70,7 @@
|
||||
/obj/item/clothing/mask/breath = 2,
|
||||
/obj/item/weapon/tank/oxygen = 2
|
||||
)
|
||||
cost = 35
|
||||
cost = 40
|
||||
containertype = "/obj/structure/closet/crate/secure"
|
||||
containername = "Mining voidsuit crate"
|
||||
access = access_mining
|
||||
@@ -2,8 +2,9 @@
|
||||
* Ammunition *
|
||||
*************/
|
||||
/datum/uplink_item/item/ammo
|
||||
item_cost = 2
|
||||
item_cost = 20
|
||||
category = /datum/uplink_category/ammunition
|
||||
blacklisted = 1
|
||||
|
||||
/datum/uplink_item/item/ammo/a357
|
||||
name = ".357 Speedloader"
|
||||
@@ -41,7 +42,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
|
||||
@@ -51,7 +52,7 @@
|
||||
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
|
||||
@@ -63,7 +64,7 @@
|
||||
/datum/uplink_item/item/ammo/s762
|
||||
name = "10rnd Rifle Magazine (7.62mm)"
|
||||
path = /obj/item/ammo_magazine/s762
|
||||
item_cost = 1 // Half the capacity.
|
||||
item_cost = 10 // Half the capacity.
|
||||
|
||||
/datum/uplink_item/item/ammo/s762/ap
|
||||
name = "10rnd Rifle Magazine (7.62mm AP)"
|
||||
@@ -88,7 +89,7 @@
|
||||
/datum/uplink_item/item/ammo/g12/beanbag
|
||||
name = "12g Auto-Shotgun Magazine (Beanbag)"
|
||||
path = /obj/item/ammo_magazine/g12/beanbag
|
||||
item_cost = 1 // Discount due to it being LTL.
|
||||
item_cost = 10 // Discount due to it being LTL.
|
||||
|
||||
/datum/uplink_item/item/ammo/g12/pellet
|
||||
name = "12g Auto-Shotgun Magazine (Pellet)"
|
||||
|
||||
@@ -3,6 +3,7 @@
|
||||
*****************/
|
||||
/datum/uplink_item/abstract/announcements
|
||||
category = /datum/uplink_category/services
|
||||
blacklisted = 1
|
||||
|
||||
/datum/uplink_item/abstract/announcements/buy(var/obj/item/device/uplink/U, var/mob/user)
|
||||
. = ..()
|
||||
@@ -10,7 +11,7 @@
|
||||
log_and_message_admins("has triggered a falsified [src]", user)
|
||||
|
||||
/datum/uplink_item/abstract/announcements/fake_centcom
|
||||
item_cost = DEFAULT_TELECRYSTAL_AMOUNT / 2
|
||||
item_cost = DEFAULT_TELECRYSTAL_AMOUNT / 3
|
||||
|
||||
/datum/uplink_item/abstract/announcements/fake_centcom/New()
|
||||
..()
|
||||
@@ -33,7 +34,7 @@
|
||||
/datum/uplink_item/abstract/announcements/fake_crew_arrival
|
||||
name = "Crew Arrival Announcement/Records"
|
||||
desc = "Creates a fake crew arrival announcement as well as fake crew records, using your current appearance (including held items!) and worn id card. Trigger with care!"
|
||||
item_cost = 4
|
||||
item_cost = 30
|
||||
|
||||
/datum/uplink_item/abstract/announcements/fake_crew_arrival/get_goods(var/obj/item/device/uplink/U, var/loc, var/mob/user, var/list/args)
|
||||
if(!user)
|
||||
@@ -91,7 +92,7 @@
|
||||
/datum/uplink_item/abstract/announcements/fake_ion_storm
|
||||
name = "Ion Storm Announcement"
|
||||
desc = "Interferes with the station's ion sensors. Triggers immediately upon investment."
|
||||
item_cost = 1
|
||||
item_cost = 10
|
||||
|
||||
/datum/uplink_item/abstract/announcements/fake_ion_storm/get_goods(var/obj/item/device/uplink/U, var/loc)
|
||||
ion_storm_announcement()
|
||||
@@ -100,7 +101,7 @@
|
||||
/datum/uplink_item/abstract/announcements/fake_radiation
|
||||
name = "Radiation Storm Announcement"
|
||||
desc = "Interferes with the station's radiation sensors. Triggers immediately upon investment."
|
||||
item_cost = 3
|
||||
item_cost = 15
|
||||
|
||||
/datum/uplink_item/abstract/announcements/fake_radiation/get_goods(var/obj/item/device/uplink/U, var/loc)
|
||||
var/datum/event_meta/EM = new(EVENT_LEVEL_MUNDANE, "Fake Radiation Storm", add_to_queue = 0)
|
||||
|
||||
@@ -6,10 +6,10 @@
|
||||
|
||||
/datum/uplink_item/item/armor/combat
|
||||
name = "Combat Armor Set"
|
||||
item_cost = 5
|
||||
item_cost = 60
|
||||
path = /obj/item/weapon/storage/box/syndie_kit/combat_armor
|
||||
|
||||
/datum/uplink_item/item/armor/heavy_vest
|
||||
name = "Heavy Armor Vest"
|
||||
item_cost = 4
|
||||
item_cost = 40
|
||||
path = /obj/item/clothing/suit/storage/vest/heavy/merc
|
||||
|
||||
@@ -19,6 +19,7 @@
|
||||
/datum/uplink_item/item/badassery/random_one
|
||||
name = "Random Item"
|
||||
desc = "Buys you one random item."
|
||||
blacklisted = 1
|
||||
|
||||
/datum/uplink_item/item/badassery/random_one/buy(var/obj/item/device/uplink/U, var/mob/user)
|
||||
var/datum/uplink_item/item = default_uplink_selection.get_random_item(U.uses)
|
||||
@@ -53,17 +54,32 @@
|
||||
****************/
|
||||
/datum/uplink_item/item/badassery/surplus
|
||||
name = "Surplus Crate"
|
||||
item_cost = 40
|
||||
var/item_worth = 60
|
||||
item_cost = DEFAULT_TELECRYSTAL_AMOUNT
|
||||
var/item_worth = 240
|
||||
var/icon
|
||||
|
||||
/datum/uplink_item/item/badassery/surplus/merc2
|
||||
name = "Surplus Crate - 240 TC"
|
||||
item_cost = DEFAULT_TELECRYSTAL_AMOUNT * 2
|
||||
item_worth = 360
|
||||
|
||||
/datum/uplink_item/item/badassery/surplus/merc4
|
||||
name = "Surplus Crate - 480 TC"
|
||||
item_cost = DEFAULT_TELECRYSTAL_AMOUNT * 4
|
||||
item_worth = 720
|
||||
|
||||
/datum/uplink_item/item/badassery/surplus/merc6
|
||||
name = "Surplus Crate - 720 TC"
|
||||
item_cost = DEFAULT_TELECRYSTAL_AMOUNT * 6
|
||||
item_worth = 1440
|
||||
|
||||
/datum/uplink_item/item/badassery/surplus/New()
|
||||
..()
|
||||
desc = "A crate containing [item_worth] telecrystal\s worth of surplus leftovers."
|
||||
|
||||
/datum/uplink_item/item/badassery/surplus/get_goods(var/obj/item/device/uplink/U, var/loc)
|
||||
var/obj/structure/largecrate/C = new(loc)
|
||||
var/random_items = get_random_uplink_items(null, item_worth, C)
|
||||
var/random_items = get_surplus_items(null, item_worth, C)
|
||||
for(var/datum/uplink_item/I in random_items)
|
||||
I.purchase_log(U)
|
||||
I.get_goods(U, C)
|
||||
|
||||
@@ -5,31 +5,65 @@
|
||||
category = /datum/uplink_category/grenades
|
||||
|
||||
/datum/uplink_item/item/grenades/anti_photon
|
||||
name = "5xPhoton Disruption Grenades"
|
||||
item_cost = 2
|
||||
name = "7xPhoton Disruption Grenades"
|
||||
item_cost = 10
|
||||
path = /obj/item/weapon/storage/box/anti_photons
|
||||
|
||||
/datum/uplink_item/item/grenades/emp
|
||||
name = "5xEMP Grenades"
|
||||
item_cost = 3
|
||||
path = /obj/item/weapon/storage/box/emps
|
||||
|
||||
/datum/uplink_item/item/grenades/smoke
|
||||
name = "7xSmoke Grenades"
|
||||
/datum/uplink_item/item/grenades/anti_photon_singular
|
||||
name = "1xPhoton Disruption Grenade"
|
||||
item_cost = 2
|
||||
path = /obj/item/weapon/storage/box/smokes
|
||||
|
||||
/datum/uplink_item/item/grenades/frags
|
||||
name = "5xFrag Grenades"
|
||||
item_cost = 6
|
||||
path = /obj/item/weapon/storage/box/frags
|
||||
|
||||
/datum/uplink_item/item/grenades/flashbnags
|
||||
name = "7xFlashbangs"
|
||||
item_cost = 4
|
||||
path = /obj/item/weapon/storage/box/flashbangs
|
||||
path = /obj/item/weapon/grenade/anti_photon
|
||||
|
||||
/datum/uplink_item/item/grenades/metalfoam
|
||||
name = "7xMetal Foam Grenades"
|
||||
item_cost = 3
|
||||
path = /obj/item/weapon/storage/box/metalfoam
|
||||
item_cost = 10
|
||||
path = /obj/item/weapon/storage/box/metalfoam
|
||||
|
||||
/datum/uplink_item/item/grenades/metalfoam_singular
|
||||
name = "1xMetal Foam Grenade"
|
||||
item_cost = 2
|
||||
path = /obj/item/weapon/grenade/chem_grenade/metalfoam
|
||||
|
||||
/datum/uplink_item/item/grenades/smoke
|
||||
name = "7xSmoke Grenades"
|
||||
item_cost = 10
|
||||
path = /obj/item/weapon/storage/box/smokes
|
||||
|
||||
/datum/uplink_item/item/grenades/smoke_singular
|
||||
name = "1xSmoke Grenade"
|
||||
item_cost = 2
|
||||
path = /obj/item/weapon/grenade/smokebomb
|
||||
|
||||
/datum/uplink_item/item/grenades/emp
|
||||
name = "7xEMP Grenades"
|
||||
item_cost = 50
|
||||
path = /obj/item/weapon/storage/box/emps
|
||||
|
||||
/datum/uplink_item/item/grenades/emp_singular
|
||||
name = "1xEMP Grenade"
|
||||
item_cost = 10
|
||||
path = /obj/item/weapon/grenade/empgrenade
|
||||
|
||||
/datum/uplink_item/item/grenades/frags
|
||||
name = "7xFrag Grenades"
|
||||
item_cost = 80
|
||||
path = /obj/item/weapon/storage/box/frags
|
||||
|
||||
/datum/uplink_item/item/grenades/frags_half
|
||||
name = "4x Frag Grenade"
|
||||
item_cost = 50
|
||||
path = /obj/item/weapon/storage/box/frags_half_box
|
||||
|
||||
/datum/uplink_item/item/grenades/frags_singular
|
||||
name = "1x Frag Grenade"
|
||||
item_cost = 15
|
||||
path = /obj/item/weapon/grenade/explosive
|
||||
|
||||
/datum/uplink_item/item/grenades/flashbangs
|
||||
name = "7xFlashbangs"
|
||||
item_cost = 40
|
||||
path = /obj/item/weapon/storage/box/flashbangs
|
||||
|
||||
/datum/uplink_item/item/grenades/flashbangs_singular
|
||||
name = "1xFlashbang"
|
||||
item_cost = 8
|
||||
@@ -3,38 +3,54 @@
|
||||
*******************/
|
||||
/datum/uplink_item/item/hardsuit_modules
|
||||
category = /datum/uplink_category/hardsuit_modules
|
||||
blacklisted = 1
|
||||
|
||||
/datum/uplink_item/item/hardsuit_modules/thermal
|
||||
name = "Thermal Scanner"
|
||||
item_cost = 2
|
||||
item_cost = 15
|
||||
path = /obj/item/rig_module/vision/thermal
|
||||
|
||||
/datum/uplink_item/item/hardsuit_modules/energy_net
|
||||
name = "Net Projector"
|
||||
item_cost = 3
|
||||
item_cost = 20
|
||||
path = /obj/item/rig_module/fabricator/energy_net
|
||||
|
||||
/datum/uplink_item/item/ewar_voice
|
||||
/datum/uplink_item/item/hardsuit_modules/plasma_cutter
|
||||
name = "Plasma Cutter"
|
||||
item_cost = 20
|
||||
path = /obj/item/rig_module/device/plasmacutter
|
||||
|
||||
/datum/uplink_item/item/hardsuit_modules/ewar_voice
|
||||
name = "Electrowarfare Suite and Voice Synthesiser"
|
||||
item_cost = 4
|
||||
item_cost = 30
|
||||
path = /obj/item/weapon/storage/box/syndie_kit/ewar_voice
|
||||
|
||||
/datum/uplink_item/item/hardsuit_modules/maneuvering_jets
|
||||
name = "Maneuvering Jets"
|
||||
item_cost = 4
|
||||
item_cost = 30
|
||||
path = /obj/item/rig_module/maneuvering_jets
|
||||
|
||||
/datum/uplink_item/item/hardsuit_modules/egun
|
||||
name = "Mounted Energy Gun"
|
||||
item_cost = 6
|
||||
path = /obj/item/rig_module/mounted/egun
|
||||
/datum/uplink_item/item/hardsuit_modules/grenade_launcher
|
||||
name = "Grenade Launcher"
|
||||
item_cost = 40
|
||||
path = /obj/item/rig_module/grenade_launcher
|
||||
|
||||
/datum/uplink_item/item/hardsuit_modules/chem_dispenser
|
||||
name = "Chemical Injector"
|
||||
item_cost = 40
|
||||
path = /obj/item/rig_module/chem_dispenser/injector
|
||||
|
||||
/datum/uplink_item/item/hardsuit_modules/power_sink
|
||||
name = "Power Sink"
|
||||
item_cost = 6
|
||||
item_cost = 45
|
||||
path = /obj/item/rig_module/power_sink
|
||||
|
||||
/datum/uplink_item/item/hardsuit_modules/egun
|
||||
name = "Mounted Energy Gun"
|
||||
item_cost = 60
|
||||
path = /obj/item/rig_module/mounted/egun
|
||||
|
||||
/datum/uplink_item/item/hardsuit_modules/laser_canon
|
||||
name = "Mounted Laser Cannon"
|
||||
item_cost = 8
|
||||
path = /obj/item/rig_module/mounted
|
||||
item_cost = 80
|
||||
path = /obj/item/rig_module/mounted
|
||||
@@ -6,20 +6,20 @@
|
||||
|
||||
/datum/uplink_item/item/implants/imp_freedom
|
||||
name = "Freedom Implant"
|
||||
item_cost = 3
|
||||
item_cost = 30
|
||||
path = /obj/item/weapon/storage/box/syndie_kit/imp_freedom
|
||||
|
||||
/datum/uplink_item/item/implants/imp_compress
|
||||
name = "Compressed Matter Implant"
|
||||
item_cost = 4
|
||||
item_cost = 30
|
||||
path = /obj/item/weapon/storage/box/syndie_kit/imp_compress
|
||||
|
||||
/datum/uplink_item/item/implants/imp_explosive
|
||||
name = "Explosive Implant (DANGER!)"
|
||||
item_cost = 6
|
||||
item_cost = 60
|
||||
path = /obj/item/weapon/storage/box/syndie_kit/imp_explosive
|
||||
|
||||
/datum/uplink_item/item/implants/imp_uplink
|
||||
name = "Uplink Implant" //Original name: "Uplink Implant (Contains 5 Telecrystals)"
|
||||
item_cost = 5 //Original cost: 10
|
||||
item_cost = 50 //Original cost: 10
|
||||
path = /obj/item/weapon/storage/box/syndie_kit/imp_uplink
|
||||
|
||||
@@ -4,33 +4,37 @@
|
||||
/datum/uplink_item/item/medical
|
||||
category = /datum/uplink_category/medical
|
||||
|
||||
/datum/uplink_item/item/medical/onegativeblood
|
||||
name = "O- Blood Pack"
|
||||
item_cost = 5
|
||||
path = /obj/item/weapon/reagent_containers/blood/OMinus
|
||||
|
||||
/datum/uplink_item/item/medical/sinpockets
|
||||
name = "Box of Sin-Pockets"
|
||||
item_cost = 1
|
||||
item_cost = 5
|
||||
path = /obj/item/weapon/storage/box/sinpockets
|
||||
|
||||
/datum/uplink_item/item/medical/surgery
|
||||
name = "Surgery kit"
|
||||
item_cost = 6
|
||||
path = /obj/item/weapon/storage/firstaid/surgery
|
||||
|
||||
/datum/uplink_item/item/medical/combat
|
||||
name = "Combat medical kit"
|
||||
item_cost = 6
|
||||
path = /obj/item/weapon/storage/firstaid/combat
|
||||
|
||||
/datum/uplink_item/item/medical/freezer
|
||||
name = "Portable Freezer"
|
||||
item_cost = 2
|
||||
path = /obj/item/weapon/storage/box/freezer
|
||||
|
||||
/datum/uplink_item/item/medical/ambrosiaseeds
|
||||
name = "Box of 7x ambrosia seed packets"
|
||||
item_cost = 1
|
||||
item_cost = 5
|
||||
path = /obj/item/weapon/storage/box/ambrosia
|
||||
|
||||
/datum/uplink_item/item/medical/ambrosiadeusseeds
|
||||
name = "Box of 7x ambrosia deus seed packets"
|
||||
item_cost = 2
|
||||
item_cost = 10
|
||||
path = /obj/item/weapon/storage/box/ambrosiadeus
|
||||
|
||||
/datum/uplink_item/item/medical/freezer
|
||||
name = "Portable Freezer"
|
||||
item_cost = 10
|
||||
path = /obj/item/weapon/storage/box/freezer
|
||||
|
||||
/datum/uplink_item/item/medical/surgery
|
||||
name = "Surgery kit"
|
||||
item_cost = 45
|
||||
path = /obj/item/weapon/storage/firstaid/surgery
|
||||
|
||||
/datum/uplink_item/item/medical/combat
|
||||
name = "Combat medical kit"
|
||||
item_cost = 60
|
||||
path = /obj/item/weapon/storage/firstaid/combat
|
||||
|
||||
@@ -6,40 +6,35 @@
|
||||
|
||||
/datum/uplink_item/item/stealth_items/id
|
||||
name = "Agent ID card"
|
||||
item_cost = 2
|
||||
item_cost = 10
|
||||
path = /obj/item/weapon/card/id/syndicate
|
||||
|
||||
/datum/uplink_item/item/stealth_items/syndigaloshes
|
||||
name = "No-Slip Shoes"
|
||||
item_cost = 2
|
||||
item_cost = 10
|
||||
path = /obj/item/clothing/shoes/syndigaloshes
|
||||
|
||||
/datum/uplink_item/item/stealth_items/spy
|
||||
name = "Bug Kit"
|
||||
item_cost = 2
|
||||
item_cost = 10
|
||||
path = /obj/item/weapon/storage/box/syndie_kit/spy
|
||||
|
||||
/datum/uplink_item/item/stealth_items/chameleon_kit
|
||||
name = "Chameleon Kit"
|
||||
item_cost = 3
|
||||
item_cost = 15
|
||||
path = /obj/item/weapon/storage/box/syndie_kit/chameleon
|
||||
|
||||
/datum/uplink_item/item/stealth_items/chameleon_projector
|
||||
name = "Chameleon-Projector"
|
||||
item_cost = 4
|
||||
path = /obj/item/device/chameleon
|
||||
|
||||
/datum/uplink_item/item/stealth_items/chameleon_projector
|
||||
name = "Chameleon-Projector"
|
||||
item_cost = 4
|
||||
item_cost = 30
|
||||
path = /obj/item/device/chameleon
|
||||
|
||||
/datum/uplink_item/item/stealth_items/voice
|
||||
name = "Voice Changer"
|
||||
item_cost = 4
|
||||
item_cost = 30
|
||||
path = /obj/item/clothing/mask/gas/voice
|
||||
|
||||
/datum/uplink_item/item/stealth_items/camera_floppy
|
||||
name = "Camera Network Access - Floppy"
|
||||
item_cost = 6
|
||||
item_cost = 30
|
||||
path = /obj/item/weapon/disk/file/cameras/syndicate
|
||||
|
||||
@@ -6,30 +6,30 @@
|
||||
|
||||
/datum/uplink_item/item/stealthy_weapons/soap
|
||||
name = "Subversive Soap"
|
||||
item_cost = 1
|
||||
item_cost = 5
|
||||
path = /obj/item/weapon/soap/syndie
|
||||
|
||||
/datum/uplink_item/item/stealthy_weapons/concealed_cane
|
||||
name = "Concealed Cane Sword"
|
||||
item_cost = 1
|
||||
item_cost = 10
|
||||
path = /obj/item/weapon/cane/concealed
|
||||
|
||||
/datum/uplink_item/item/stealthy_weapons/detomatix
|
||||
name = "Detomatix PDA Cartridge"
|
||||
item_cost = 3
|
||||
item_cost = 30
|
||||
path = /obj/item/weapon/cartridge/syndicate
|
||||
|
||||
/datum/uplink_item/item/stealthy_weapons/parapen
|
||||
name = "Paralysis Pen"
|
||||
item_cost = 3
|
||||
item_cost = 40
|
||||
path = /obj/item/weapon/pen/reagent/paralysis
|
||||
|
||||
/datum/uplink_item/item/stealthy_weapons/cigarette_kit
|
||||
name = "Cigarette Kit"
|
||||
item_cost = 3
|
||||
item_cost = 15
|
||||
path = /obj/item/weapon/storage/box/syndie_kit/cigarette
|
||||
|
||||
/datum/uplink_item/item/stealthy_weapons/random_toxin
|
||||
name = "Random Toxin - Beaker"
|
||||
item_cost = 3
|
||||
item_cost = 15
|
||||
path = /obj/item/weapon/storage/box/syndie_kit/toxin
|
||||
|
||||
39
code/datums/uplink/telecrystals.dm
Normal file
39
code/datums/uplink/telecrystals.dm
Normal file
@@ -0,0 +1,39 @@
|
||||
/***************
|
||||
* Telecrystals *
|
||||
***************/
|
||||
/datum/uplink_item/item/telecrystal
|
||||
category = /datum/uplink_category/telecrystals
|
||||
blacklisted = 1
|
||||
|
||||
/datum/uplink_item/item/telecrystal/get_goods(var/obj/item/device/uplink/U, var/loc)
|
||||
return new /obj/item/stack/telecrystal(loc, cost(U.uses))
|
||||
|
||||
/datum/uplink_item/item/telecrystal/one
|
||||
name = "Telecrystal - 01"
|
||||
item_cost = 1
|
||||
|
||||
/datum/uplink_item/item/telecrystal/five
|
||||
name = "Telecrystals - 05"
|
||||
item_cost = 5
|
||||
|
||||
/datum/uplink_item/item/telecrystal/ten
|
||||
name = "Telecrystals - 10"
|
||||
item_cost = 10
|
||||
|
||||
/datum/uplink_item/item/telecrystal/twentyfive
|
||||
name = "Telecrystals - 25"
|
||||
item_cost = 25
|
||||
|
||||
/datum/uplink_item/item/telecrystal/fifty
|
||||
name = "Telecrystals - 50"
|
||||
item_cost = 50
|
||||
|
||||
/datum/uplink_item/item/telecrystal/onehundred
|
||||
name = "Telecrystals - 100"
|
||||
item_cost = 100
|
||||
|
||||
/datum/uplink_item/item/telecrystal/all
|
||||
name = "Telecrystals - Empty Uplink"
|
||||
|
||||
/datum/uplink_item/item/telecrystal/all/cost(var/telecrystals)
|
||||
return max(1, telecrystals)
|
||||
@@ -4,82 +4,82 @@
|
||||
/datum/uplink_item/item/tools
|
||||
category = /datum/uplink_category/tools
|
||||
|
||||
/datum/uplink_item/item/tools/binoculars
|
||||
name = "Binoculars"
|
||||
item_cost = 5
|
||||
path = /obj/item/device/binoculars
|
||||
|
||||
/datum/uplink_item/item/tools/toolbox
|
||||
name = "Fully Loaded Toolbox"
|
||||
item_cost = 1
|
||||
item_cost = 10
|
||||
path = /obj/item/weapon/storage/toolbox/syndicate
|
||||
|
||||
/datum/uplink_item/item/tools/plastique
|
||||
name = "C-4 (Destroys walls)"
|
||||
item_cost = 2
|
||||
item_cost = 20
|
||||
path = /obj/item/weapon/plastique
|
||||
|
||||
/datum/uplink_item/item/tools/encryptionkey_radio
|
||||
name = "Encrypted Radio Channel Key"
|
||||
item_cost = 2
|
||||
item_cost = 20
|
||||
path = /obj/item/device/encryptionkey/syndicate
|
||||
|
||||
/datum/uplink_item/item/tools/hacking_tool
|
||||
name = "Door Hacking Tool"
|
||||
item_cost = 20
|
||||
path = /obj/item/device/multitool/hacktool
|
||||
desc = "Appears and functions as a standard multitool until the mode is toggled by applying a screwdriver appropriately. \
|
||||
When in hacking mode this device will grant full access to any standard airlock within 20 to 40 seconds. \
|
||||
This device will also be able to immediately access the last 6 to 8 hacked airlocks."
|
||||
|
||||
/datum/uplink_item/item/tools/encryptionkey_binary
|
||||
name = "Binary Translator Key"
|
||||
item_cost = 3
|
||||
item_cost = 20
|
||||
path = /obj/item/device/encryptionkey/binary
|
||||
|
||||
/datum/uplink_item/item/tools/emag
|
||||
name = "Cryptographic Sequencer"
|
||||
item_cost = 3
|
||||
item_cost = 30
|
||||
path = /obj/item/weapon/card/emag
|
||||
|
||||
/datum/uplink_item/item/tools/clerical
|
||||
name = "Morphic Clerical Kit"
|
||||
item_cost = 3
|
||||
item_cost = 15
|
||||
path = /obj/item/weapon/storage/box/syndie_kit/clerical
|
||||
|
||||
/datum/uplink_item/item/tools/money
|
||||
name = "Operations Funding"
|
||||
item_cost = 15
|
||||
path = /obj/item/weapon/storage/secure/briefcase/money
|
||||
desc = "A briefcase with 10,000 untraceable thalers for funding your sneaky activities."
|
||||
|
||||
/datum/uplink_item/item/tools/space_suit
|
||||
name = "Space Suit"
|
||||
item_cost = 3
|
||||
item_cost = 15
|
||||
path = /obj/item/weapon/storage/box/syndie_kit/space
|
||||
|
||||
/datum/uplink_item/item/tools/thermal
|
||||
name = "Thermal Imaging Glasses"
|
||||
item_cost = 3
|
||||
item_cost = 30
|
||||
path = /obj/item/clothing/glasses/thermal/syndi
|
||||
|
||||
/datum/uplink_item/item/tools/powersink
|
||||
name = "Powersink (DANGER!)"
|
||||
item_cost = 5
|
||||
item_cost = 50
|
||||
path = /obj/item/device/powersink
|
||||
|
||||
/datum/uplink_item/item/tools/ai_module
|
||||
name = "Hacked AI Upload Module"
|
||||
item_cost = 7
|
||||
item_cost = 60
|
||||
path = /obj/item/weapon/aiModule/syndicate
|
||||
|
||||
/datum/uplink_item/item/tools/supply_beacon
|
||||
name = "Hacked Supply Beacon (DANGER!)"
|
||||
item_cost = 7
|
||||
item_cost = 60
|
||||
path = /obj/item/supply_beacon
|
||||
|
||||
/datum/uplink_item/item/tools/teleporter
|
||||
name = "Teleporter Circuit Board"
|
||||
item_cost = 20
|
||||
item_cost = DEFAULT_TELECRYSTAL_AMOUNT * 1.5
|
||||
path = /obj/item/weapon/circuitboard/teleporter
|
||||
|
||||
/datum/uplink_item/item/tools/money
|
||||
name = "Operations Funding"
|
||||
item_cost = 3
|
||||
path = /obj/item/weapon/storage/secure/briefcase/money
|
||||
desc = "A briefcase with 10,000 untraceable thalers for funding your sneaky activities."
|
||||
|
||||
/datum/uplink_item/item/tools/crystal
|
||||
name = "Tradable Crystal"
|
||||
item_cost = 1
|
||||
path = /obj/item/device/telecrystal
|
||||
desc = "A telecrystal that can be transferred from one user to another. Be sure not to give it to just anyone."
|
||||
|
||||
/datum/uplink_item/item/tools/hacking_tool
|
||||
name = "Door Hacking Tool"
|
||||
item_cost = 2
|
||||
path = /obj/item/device/multitool/hacktool
|
||||
desc = "Appears and functions as a standard multitool until the mode is toggled by applying a screwdriver appropriately. \
|
||||
When in hacking mode this device will grant full access to any standard airlock within 20 to 40 seconds. \
|
||||
This device will also be able to immediately access the last 6 to 8 hacked airlocks."
|
||||
blacklisted = 1
|
||||
@@ -46,4 +46,7 @@ datum/uplink_category/ammunition
|
||||
name = "Devices and Tools"
|
||||
|
||||
/datum/uplink_category/visible_weapons
|
||||
name = "Highly Visible and Dangerous Weapons"
|
||||
name = "Highly Visible and Dangerous Weapons"
|
||||
|
||||
/datum/uplink_category/telecrystals
|
||||
name = "Telecrystals"
|
||||
@@ -31,6 +31,7 @@ var/datum/uplink/uplink = new()
|
||||
var/item_cost = 0
|
||||
var/datum/uplink_category/category // Item category
|
||||
var/list/datum/antagonist/antag_roles // Antag roles this item is displayed to. If empty, display to all.
|
||||
var/blacklisted = 0
|
||||
|
||||
/datum/uplink_item/item
|
||||
var/path = null
|
||||
@@ -172,3 +173,15 @@ datum/uplink_item/dd_SortValue()
|
||||
remaining_TC -= I.cost(remaining_TC, U)
|
||||
|
||||
return bought_items
|
||||
|
||||
/proc/get_surplus_items(var/obj/item/device/uplink/U, var/remaining_TC, var/loc)
|
||||
var/list/bought_items = list()
|
||||
var/override = 1
|
||||
while(remaining_TC)
|
||||
var/datum/uplink_item/I = all_uplink_selection.get_random_item(remaining_TC, U, bought_items, override)
|
||||
if(!I)
|
||||
break
|
||||
bought_items += I
|
||||
remaining_TC -= I.cost(remaining_TC, U)
|
||||
|
||||
return bought_items
|
||||
|
||||
@@ -4,39 +4,49 @@
|
||||
/datum/uplink_item/item/visible_weapons
|
||||
category = /datum/uplink_category/visible_weapons
|
||||
|
||||
/datum/uplink_item/item/visible_weapons/tactknife
|
||||
name = "Tactical Knife"
|
||||
item_cost = 10
|
||||
path = /obj/item/weapon/material/hatchet/tacknife
|
||||
|
||||
/datum/uplink_item/item/visible_weapons/combatknife
|
||||
name = "Combat Knife"
|
||||
item_cost = 30
|
||||
path = /obj/item/weapon/material/hatchet/tacknife/combatknife
|
||||
|
||||
/datum/uplink_item/item/visible_weapons/energy_sword
|
||||
name = "Energy Sword"
|
||||
item_cost = 4
|
||||
item_cost = 40
|
||||
path = /obj/item/weapon/melee/energy/sword
|
||||
|
||||
/datum/uplink_item/item/visible_weapons/dartgun
|
||||
name = "Dart Gun"
|
||||
item_cost = 5
|
||||
item_cost = 30
|
||||
path = /obj/item/weapon/gun/projectile/dartgun
|
||||
|
||||
/datum/uplink_item/item/visible_weapons/crossbow
|
||||
name = "Energy Crossbow"
|
||||
item_cost = 5
|
||||
item_cost = 40
|
||||
path = /obj/item/weapon/gun/energy/crossbow
|
||||
|
||||
/datum/uplink_item/item/visible_weapons/silenced_45
|
||||
name = "Silenced .45"
|
||||
item_cost = 5
|
||||
item_cost = 40
|
||||
path = /obj/item/weapon/gun/projectile/silenced
|
||||
|
||||
/datum/uplink_item/item/visible_weapons/riggedlaser
|
||||
name = "Exosuit Rigged Laser"
|
||||
item_cost = 6
|
||||
item_cost = 60
|
||||
path = /obj/item/mecha_parts/mecha_equipment/weapon/energy/riggedlaser
|
||||
|
||||
/datum/uplink_item/item/visible_weapons/revolver
|
||||
name = "Revolver"
|
||||
item_cost = 6
|
||||
item_cost = 70
|
||||
path = /obj/item/weapon/gun/projectile/revolver
|
||||
|
||||
/datum/uplink_item/item/visible_weapons/Derringer
|
||||
name = ".357 Derringer Pistol"
|
||||
item_cost = 5
|
||||
item_cost = 40
|
||||
path = /obj/item/weapon/gun/projectile/derringer
|
||||
|
||||
/datum/uplink_item/item/visible_weapons/heavysniper
|
||||
@@ -46,61 +56,51 @@
|
||||
|
||||
/datum/uplink_item/item/visible_weapons/tommygun
|
||||
name = "Tommygun (.45)" // We're keeping this because it's CLASSY. -Spades
|
||||
item_cost = 7
|
||||
item_cost = 60
|
||||
path = /obj/item/weapon/gun/projectile/automatic/tommygun
|
||||
|
||||
//These are for traitors (or other antags, perhaps) to have the option of purchasing some merc gear.
|
||||
/datum/uplink_item/item/visible_weapons/submachinegun
|
||||
name = "Submachine Gun (10mm)"
|
||||
item_cost = 6
|
||||
item_cost = 60
|
||||
path = /obj/item/weapon/gun/projectile/automatic/c20r
|
||||
|
||||
/datum/uplink_item/item/visible_weapons/assaultrifle
|
||||
name = "Assault Rifle (7.62mm)"
|
||||
item_cost = 7
|
||||
item_cost = 75
|
||||
path = /obj/item/weapon/gun/projectile/automatic/sts35
|
||||
|
||||
/datum/uplink_item/item/visible_weapons/bullpuprifle
|
||||
/*/datum/uplink_item/item/visible_weapons/bullpuprifle
|
||||
name = "Assault Rifle (5.56mm)"
|
||||
item_cost = 7
|
||||
path = /obj/item/weapon/gun/projectile/automatic/carbine
|
||||
|
||||
*/
|
||||
/datum/uplink_item/item/visible_weapons/combatshotgun
|
||||
name = "Combat Shotgun"
|
||||
item_cost = 7
|
||||
item_cost = 75
|
||||
path = /obj/item/weapon/gun/projectile/shotgun/pump/combat
|
||||
|
||||
/datum/uplink_item/item/visible_weapons/egun
|
||||
name = "Energy Gun"
|
||||
item_cost = 5
|
||||
item_cost = 60
|
||||
path = /obj/item/weapon/gun/energy/gun
|
||||
|
||||
/datum/uplink_item/item/visible_weapons/lasercannon
|
||||
name = "Laser Cannon"
|
||||
item_cost = 6
|
||||
item_cost = 60
|
||||
path = /obj/item/weapon/gun/energy/lasercannon
|
||||
|
||||
/datum/uplink_item/item/visible_weapons/lasercarbine
|
||||
name = "Laser Carbine"
|
||||
item_cost = 7
|
||||
item_cost = 75
|
||||
path = /obj/item/weapon/gun/energy/laser
|
||||
|
||||
/datum/uplink_item/item/visible_weapons/ionrifle
|
||||
name = "Ion Rifle"
|
||||
item_cost = 5
|
||||
item_cost = 40
|
||||
path = /obj/item/weapon/gun/energy/ionrifle
|
||||
|
||||
/datum/uplink_item/item/visible_weapons/xray
|
||||
name = "Xray Gun"
|
||||
item_cost = 7
|
||||
path = /obj/item/weapon/gun/energy/xray
|
||||
|
||||
/datum/uplink_item/item/visible_weapons/tactknife
|
||||
name = "Tactical Knife"
|
||||
item_cost = 1
|
||||
path = /obj/item/weapon/material/hatchet/tacknife
|
||||
|
||||
/datum/uplink_item/item/visible_weapons/combatknife
|
||||
name = "Combat Knife"
|
||||
item_cost = 3
|
||||
path = /obj/item/weapon/material/hatchet/tacknife/combatknife
|
||||
item_cost = 85
|
||||
path = /obj/item/weapon/gun/energy/xray
|
||||
@@ -190,9 +190,8 @@ var/global/list/PDA_Manifest = list()
|
||||
|
||||
/obj/item/weapon/beach_ball
|
||||
icon = 'icons/misc/beach.dmi'
|
||||
icon_state = "ball"
|
||||
icon_state = "beachball"
|
||||
name = "beach ball"
|
||||
item_state = "beachball"
|
||||
density = 0
|
||||
anchored = 0
|
||||
w_class = 4
|
||||
|
||||
@@ -79,7 +79,10 @@
|
||||
desc = "A cane used by a true gentlemen. Or a clown."
|
||||
icon = 'icons/obj/weapons.dmi'
|
||||
icon_state = "cane"
|
||||
item_state = "stick"
|
||||
item_icons = list(
|
||||
slot_l_hand_str = 'icons/mob/items/lefthand_melee.dmi',
|
||||
slot_r_hand_str = 'icons/mob/items/righthand_melee.dmi',
|
||||
)
|
||||
flags = CONDUCT
|
||||
force = 5.0
|
||||
throwforce = 7.0
|
||||
@@ -135,7 +138,6 @@
|
||||
desc = "A cane used by the blind."
|
||||
icon = 'icons/obj/weapons.dmi'
|
||||
icon_state = "whitecane"
|
||||
item_state = "whitecane"
|
||||
|
||||
/obj/item/weapon/disk
|
||||
name = "disk"
|
||||
@@ -245,6 +247,10 @@
|
||||
desc = "Apparently a staff used by the wizard."
|
||||
icon = 'icons/obj/wizard.dmi'
|
||||
icon_state = "staff"
|
||||
item_icons = list(
|
||||
slot_l_hand_str = 'icons/mob/items/lefthand_melee.dmi',
|
||||
slot_r_hand_str = 'icons/mob/items/righthand_melee.dmi',
|
||||
)
|
||||
force = 3.0
|
||||
throwforce = 5.0
|
||||
throw_speed = 1
|
||||
@@ -263,14 +269,13 @@
|
||||
desc = "An ebony can with an ivory tip."
|
||||
icon = 'icons/obj/weapons.dmi'
|
||||
icon_state = "cane"
|
||||
item_state = "stick"
|
||||
|
||||
/obj/item/weapon/staff/stick
|
||||
name = "stick"
|
||||
desc = "A great tool to drag someone else's drinks across the bar."
|
||||
icon = 'icons/obj/weapons.dmi'
|
||||
icon_state = "stick"
|
||||
item_state = "stick"
|
||||
item_state = "cane"
|
||||
force = 3.0
|
||||
throwforce = 5.0
|
||||
throw_speed = 1
|
||||
@@ -380,7 +385,6 @@
|
||||
name = "rapid part exchange device"
|
||||
desc = "Special mechanical module made to store, sort, and apply standard machine parts."
|
||||
icon_state = "RPED"
|
||||
item_state = "RPED"
|
||||
w_class = 5
|
||||
can_hold = list(/obj/item/weapon/stock_parts)
|
||||
storage_slots = 50
|
||||
|
||||
@@ -2,6 +2,9 @@
|
||||
Use the regular_hud_updates() proc before process_med_hud(mob) or process_sec_hud(mob) so
|
||||
the HUD updates properly! */
|
||||
|
||||
// hud overlay image type, used for clearing client.images precisely
|
||||
/image/hud_overlay
|
||||
|
||||
//Medical HUD outputs. Called by the Life() proc of the mob using it, usually.
|
||||
proc/process_med_hud(var/mob/M, var/local_scanner, var/mob/Alt)
|
||||
if(!can_process_hud(M))
|
||||
@@ -63,9 +66,8 @@ proc/can_process_hud(var/mob/M)
|
||||
//Deletes the current HUD images so they can be refreshed with new ones.
|
||||
mob/proc/handle_regular_hud_updates() //Used in the life.dm of mobs that can use HUDs.
|
||||
if(client)
|
||||
for(var/image/hud in client.images)
|
||||
if(copytext(hud.icon_state,1,4) == "hud")
|
||||
client.images -= hud
|
||||
for(var/image/hud_overlay/hud in client.images)
|
||||
client.images -= hud
|
||||
med_hud_users -= src
|
||||
sec_hud_users -= src
|
||||
|
||||
|
||||
@@ -99,19 +99,26 @@
|
||||
|
||||
// Prune restricted status. Broke it up for readability.
|
||||
// Note that this is done before jobs are handed out.
|
||||
for(var/datum/mind/player in ticker.mode.get_players_for_role(role_type, id))
|
||||
candidates = ticker.mode.get_players_for_role(role_type, id, ghosts_only)
|
||||
for(var/datum/mind/player in candidates)
|
||||
if(ghosts_only && !istype(player.current, /mob/observer/dead))
|
||||
log_debug("[key_name(player)] is not eligible to become a [role_text]: Only ghosts may join as this role!")
|
||||
candidates -= player
|
||||
log_debug("[key_name(player)] is not eligible to become a [role_text]: Only ghosts may join as this role! They have been removed from the draft.")
|
||||
else if(istype(player.current, /mob/living/voice))
|
||||
candidates -= player
|
||||
log_debug("[key_name(player)] is not eligible to become a [role_text]: They are only a communicator voice. They have been removed from the draft.")
|
||||
else if(player.special_role)
|
||||
log_debug("[key_name(player)] is not eligible to become a [role_text]: They already have a special role ([player.special_role])!")
|
||||
candidates -= player
|
||||
log_debug("[key_name(player)] is not eligible to become a [role_text]: They already have a special role ([player.special_role])! They have been removed from the draft.")
|
||||
else if (player in pending_antagonists)
|
||||
log_debug("[key_name(player)] is not eligible to become a [role_text]: They have already been selected for this role!")
|
||||
candidates -= player
|
||||
log_debug("[key_name(player)] is not eligible to become a [role_text]: They have already been selected for this role! They have been removed from the draft.")
|
||||
else if(!can_become_antag(player))
|
||||
log_debug("[key_name(player)] is not eligible to become a [role_text]: They are blacklisted for this role!")
|
||||
candidates -= player
|
||||
log_debug("[key_name(player)] is not eligible to become a [role_text]: They are blacklisted for this role! They have been removed from the draft.")
|
||||
else if(player_is_antag(player))
|
||||
log_debug("[key_name(player)] is not eligible to become a [role_text]: They are already an antagonist!")
|
||||
else
|
||||
candidates += player
|
||||
candidates -= player
|
||||
log_debug("[key_name(player)] is not eligible to become a [role_text]: They are already an antagonist! They have been removed from the draft.")
|
||||
|
||||
return candidates
|
||||
|
||||
|
||||
79
code/game/antagonist/outsider/technomancer.dm
Normal file
79
code/game/antagonist/outsider/technomancer.dm
Normal file
@@ -0,0 +1,79 @@
|
||||
var/datum/antagonist/technomancer/technomancers
|
||||
|
||||
/datum/antagonist/technomancer
|
||||
id = MODE_TECHNOMANCER
|
||||
role_type = BE_WIZARD
|
||||
role_text = "Technomancer"
|
||||
role_text_plural = "Technomancers"
|
||||
bantype = "wizard"
|
||||
landmark_id = "wizard"
|
||||
welcome_text = "You will need to purchase <b>functions</b> and perhaps some <b>equipment</b> from the various machines around your \
|
||||
base. Choose your technological arsenal carefully. Remember that without the <b>core</b> on your back, your functions are \
|
||||
powerless, and therefore you will be as well.<br>\
|
||||
In your pockets you will find a one-time use teleport device. Use it to leave the base and go to the colony, when you are ready."
|
||||
flags = ANTAG_OVERRIDE_JOB | ANTAG_CLEAR_EQUIPMENT | ANTAG_CHOOSE_NAME | ANTAG_SET_APPEARANCE | ANTAG_VOTABLE
|
||||
antaghud_indicator = "hudwizard"
|
||||
|
||||
hard_cap = 1
|
||||
hard_cap_round = 3
|
||||
initial_spawn_req = 1
|
||||
initial_spawn_target = 1
|
||||
|
||||
id_type = /obj/item/weapon/card/id/syndicate
|
||||
|
||||
/datum/antagonist/technomancer/New()
|
||||
..()
|
||||
technomancers = src
|
||||
|
||||
/datum/antagonist/technomancer/update_antag_mob(var/datum/mind/technomancer)
|
||||
..()
|
||||
technomancer.store_memory("<B>Remember:</B> Do not forget to purchase the functions and equipment you need.")
|
||||
technomancer.current.real_name = "[pick(wizard_first)] [pick(wizard_second)]"
|
||||
technomancer.current.name = technomancer.current.real_name
|
||||
|
||||
/datum/antagonist/technomancer/equip(var/mob/living/carbon/human/technomancer_mob)
|
||||
|
||||
if(!..())
|
||||
return 0
|
||||
|
||||
technomancer_mob.equip_to_slot_or_del(new /obj/item/clothing/under/technomancer/master(technomancer_mob), slot_w_uniform)
|
||||
create_id("Technomagus", technomancer_mob)
|
||||
technomancer_mob.equip_to_slot_or_del(new /obj/item/weapon/disposable_teleporter/free(technomancer_mob), slot_r_store)
|
||||
technomancer_mob.equip_to_slot_or_del(new /obj/item/weapon/technomancer_catalog(technomancer_mob), slot_l_store)
|
||||
technomancer_mob.equip_to_slot_or_del(new /obj/item/device/radio/headset(technomancer_mob), slot_l_ear)
|
||||
technomancer_mob.equip_to_slot_or_del(new /obj/item/weapon/technomancer_core(technomancer_mob), slot_back)
|
||||
technomancer_mob.equip_to_slot_or_del(new /obj/item/device/flashlight(technomancer_mob), slot_belt)
|
||||
technomancer_mob.equip_to_slot_or_del(new /obj/item/clothing/shoes/laceup(technomancer_mob), slot_shoes)
|
||||
technomancer_mob.equip_to_slot_or_del(new /obj/item/clothing/head/technomancer/master(technomancer_mob), slot_head)
|
||||
technomancer_mob.update_icons()
|
||||
return 1
|
||||
|
||||
/datum/antagonist/technomancer/proc/equip_apprentice(var/mob/living/carbon/human/technomancer_mob)
|
||||
|
||||
technomancer_mob.equip_to_slot_or_del(new /obj/item/clothing/under/technomancer/apprentice(technomancer_mob), slot_w_uniform)
|
||||
create_id("Techno-apprentice", technomancer_mob)
|
||||
technomancer_mob.equip_to_slot_or_del(new /obj/item/weapon/disposable_teleporter/free(technomancer_mob), slot_r_store)
|
||||
|
||||
var/obj/item/weapon/technomancer_catalog/apprentice/catalog = new /obj/item/weapon/technomancer_catalog/apprentice()
|
||||
catalog.bind_to_owner(technomancer_mob)
|
||||
technomancer_mob.equip_to_slot_or_del(catalog, slot_l_store)
|
||||
|
||||
technomancer_mob.equip_to_slot_or_del(new /obj/item/device/radio/headset(technomancer_mob), slot_l_ear)
|
||||
technomancer_mob.equip_to_slot_or_del(new /obj/item/weapon/technomancer_core(technomancer_mob), slot_back)
|
||||
technomancer_mob.equip_to_slot_or_del(new /obj/item/device/flashlight(technomancer_mob), slot_belt)
|
||||
technomancer_mob.equip_to_slot_or_del(new /obj/item/clothing/shoes/laceup(technomancer_mob), slot_shoes)
|
||||
technomancer_mob.equip_to_slot_or_del(new /obj/item/clothing/head/technomancer/apprentice(technomancer_mob), slot_head)
|
||||
technomancer_mob.update_icons()
|
||||
return 1
|
||||
|
||||
/datum/antagonist/technomancer/check_victory()
|
||||
var/survivor
|
||||
for(var/datum/mind/player in current_antagonists)
|
||||
if(!player.current || player.current.stat == DEAD)
|
||||
continue
|
||||
survivor = 1
|
||||
break
|
||||
if(!survivor)
|
||||
feedback_set_details("round_end_result","loss - technomancer killed")
|
||||
world << "<span class='danger'><font size = 3>The [(current_antagonists.len>1)?"[role_text_plural] have":"[role_text] has"] been \
|
||||
killed!</font></span>"
|
||||
65
code/game/antagonist/outsider/trader.dm
Normal file
65
code/game/antagonist/outsider/trader.dm
Normal file
@@ -0,0 +1,65 @@
|
||||
var/datum/antagonist/trader/traders
|
||||
|
||||
/datum/antagonist/trader
|
||||
id = MODE_TRADE
|
||||
role_type = BE_OPERATIVE
|
||||
role_text = "Trader"
|
||||
role_text_plural = "Traders"
|
||||
welcome_text = "As a crewmember of the Beruang, you answer to your captain and international laws of space."
|
||||
antag_text = "You are an <b>non-antagonist</b> visitor! Within the rules, \
|
||||
try to provide interesting interaction for the crew. \
|
||||
Try to make sure other players have <i>fun</i>! If you are confused or at a loss, always adminhelp, \
|
||||
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 apply to you.</b>"
|
||||
leader_welcome_text = "As Captain of the Beruang, you have control over your crew and cargo. It may be worth briefly discussing a consistent shared backstory with your crew."
|
||||
landmark_id = "Trader"
|
||||
|
||||
id_type = /obj/item/weapon/card/id/external
|
||||
|
||||
flags = ANTAG_OVERRIDE_JOB | ANTAG_SET_APPEARANCE | ANTAG_HAS_LEADER | ANTAG_CHOOSE_NAME
|
||||
|
||||
hard_cap = 5
|
||||
hard_cap_round = 7
|
||||
initial_spawn_req = 5
|
||||
initial_spawn_target = 7
|
||||
|
||||
/datum/antagonist/trader/create_default(var/mob/source)
|
||||
var/mob/living/carbon/human/M = ..()
|
||||
if(istype(M)) M.age = rand(25,45)
|
||||
|
||||
/datum/antagonist/trader/New()
|
||||
..()
|
||||
traders = src
|
||||
|
||||
/datum/antagonist/trader/greet(var/datum/mind/player)
|
||||
if(!..())
|
||||
return
|
||||
player.current << "The Beruang is an independent cargo hauler, unless you decide otherwise. You're on your way to [station_name()]."
|
||||
player.current << "You may want to discuss a collective story with the rest of your crew. More members may be joining, so don't move out straight away!"
|
||||
|
||||
/datum/antagonist/trader/equip(var/mob/living/carbon/human/player)
|
||||
player.equip_to_slot_or_del(new /obj/item/clothing/under/rank/cargotech(src), slot_w_uniform)
|
||||
player.equip_to_slot_or_del(new /obj/item/clothing/shoes/black(src), slot_shoes)
|
||||
player.equip_to_slot_or_del(new /obj/item/clothing/gloves/brown(src), slot_gloves)
|
||||
player.equip_to_slot_or_del(new /obj/item/clothing/glasses/sunglasses(src), slot_glasses)
|
||||
|
||||
create_radio(PUB_FREQ, player) //Assume they tune their headsets into the station's public radio as they approach
|
||||
|
||||
var/obj/item/weapon/card/id/id = create_id("Trader", player, equip = 0)
|
||||
id.name = "[player.real_name]'s Passport"
|
||||
id.assignment = "Trader"
|
||||
id.access |= access_trader
|
||||
var/obj/item/weapon/storage/wallet/W = new(player)
|
||||
W.handle_item_insertion(id)
|
||||
player.equip_to_slot_or_del(W, slot_wear_id)
|
||||
spawn_money(rand(50,150)*10,W)
|
||||
|
||||
return 1
|
||||
|
||||
/datum/antagonist/trader/update_access(var/mob/living/player)
|
||||
for(var/obj/item/weapon/storage/wallet/W in player.contents)
|
||||
for(var/obj/item/weapon/card/id/id in W.contents)
|
||||
id.name = "[player.real_name]'s Passport"
|
||||
id.registered_name = player.real_name
|
||||
W.name = "[initial(W.name)] ([id.name])"
|
||||
@@ -351,6 +351,14 @@ area/space/atmosalert()
|
||||
name = "\improper Administration Shuttle"
|
||||
icon_state = "shuttlered2"
|
||||
|
||||
/area/shuttle/trade/centcom
|
||||
name = "\improper Trade Shuttle Centcom"
|
||||
icon_state = "shuttlered"
|
||||
|
||||
/area/shuttle/trade/station
|
||||
name = "\improper Trade Shuttle"
|
||||
icon_state = "shuttlered"
|
||||
|
||||
/area/shuttle/thunderdome
|
||||
name = "honk"
|
||||
|
||||
@@ -838,7 +846,7 @@ area/space/atmosalert()
|
||||
/area/maintenance/engineering
|
||||
name = "Engineering Maintenance"
|
||||
icon_state = "maint_engineering"
|
||||
|
||||
|
||||
/area/maintenance/engineering/pumpstation
|
||||
name = "Engineering Pump Station"
|
||||
icon_state = "maint_pumpstation"
|
||||
@@ -2763,10 +2771,10 @@ var/list/the_station_areas = list (
|
||||
/area/construction,
|
||||
/area/ai_monitored/storage/eva,
|
||||
/area/ai_monitored/storage/secure,
|
||||
/area/ai_monitored/storage/emergency,
|
||||
/area/ai_monitored/storage/emergency,
|
||||
/area/ai_upload,
|
||||
/area/ai_upload_foyer,
|
||||
/area/ai
|
||||
/area/ai
|
||||
)
|
||||
|
||||
|
||||
|
||||
@@ -230,6 +230,11 @@ its easier to just keep the beam vertical.
|
||||
/atom/proc/melt()
|
||||
return
|
||||
|
||||
// Previously this was defined both on /obj/ and /turf/ seperately. And that's bad.
|
||||
/atom/proc/update_icon()
|
||||
return
|
||||
|
||||
|
||||
/atom/proc/hitby(atom/movable/AM as mob|obj)
|
||||
if (density)
|
||||
AM.throwing = 0
|
||||
|
||||
@@ -79,6 +79,16 @@ var/global/list/possible_changeling_IDs = list("Alpha","Beta","Gamma","Delta","E
|
||||
if(lesser_form && !P.allowduringlesserform) continue
|
||||
if(!(P in src.verbs))
|
||||
src.verbs += P.verbpath
|
||||
if(P.make_hud_button)
|
||||
if(!src.ability_master)
|
||||
src.ability_master = new /obj/screen/movable/ability_master(src)
|
||||
src.ability_master.add_ling_ability(
|
||||
object_given = src,
|
||||
verb_given = P.verbpath,
|
||||
name_given = P.name,
|
||||
ability_icon_given = P.ability_icon_state,
|
||||
arguments = list()
|
||||
)
|
||||
|
||||
for(var/language in languages)
|
||||
mind.changeling.absorbed_languages |= language
|
||||
@@ -96,6 +106,9 @@ var/global/list/possible_changeling_IDs = list("Alpha","Beta","Gamma","Delta","E
|
||||
for(var/datum/power/changeling/P in mind.changeling.purchased_powers)
|
||||
if(P.isVerb)
|
||||
verbs -= P.verbpath
|
||||
var/obj/screen/ability/verb_based/changeling/C = ability_master.get_ability_by_proc_ref(P.verbpath)
|
||||
if(C)
|
||||
ability_master.remove_ability(C)
|
||||
|
||||
|
||||
//Helper proc. Does all the checks and stuff for us to avoid copypasta
|
||||
|
||||
@@ -12,6 +12,8 @@ var/list/datum/power/changeling/powerinstances = list()
|
||||
var/enhancedtext = ""
|
||||
var/isVerb = 1 // Is it an active power, or passive?
|
||||
var/verbpath // Path to a verb that contains the effects.
|
||||
var/make_hud_button = 1 // Is this ability significant enough to dedicate screen space for a HUD button?
|
||||
var/ability_icon_state = null // icon_state for icons for the ability HUD. Must be in screen_spells.dmi.
|
||||
|
||||
/datum/power/changeling
|
||||
var/allowduringlesserform = 0
|
||||
@@ -340,6 +342,17 @@ var/list/datum/power/changeling/powerinstances = list()
|
||||
if(Thepower.genomecost > 0)
|
||||
purchased_powers_history.Add("[Pname] ([Thepower.genomecost] points)")
|
||||
|
||||
if(Thepower.make_hud_button && Thepower.isVerb)
|
||||
if(!M.current.ability_master)
|
||||
M.current.ability_master = new /obj/screen/movable/ability_master(M.current)
|
||||
M.current.ability_master.add_ling_ability(
|
||||
object_given = M.current,
|
||||
verb_given = Thepower.verbpath,
|
||||
name_given = Thepower.name,
|
||||
ability_icon_given = Thepower.ability_icon_state,
|
||||
arguments = list()
|
||||
)
|
||||
|
||||
if(!Thepower.isVerb && Thepower.verbpath)
|
||||
call(M.current, Thepower.verbpath)()
|
||||
else if(remake_verbs)
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
/datum/power/changeling/absorb_dna
|
||||
name = "Absorb DNA"
|
||||
desc = "Permits us to syphon the DNA from a human. They become one with us, and we become stronger if they were of our kind."
|
||||
ability_icon_state = "ling_absorb_dna"
|
||||
genomecost = 0
|
||||
verbpath = /mob/proc/changeling_absorb_dna
|
||||
|
||||
|
||||
@@ -3,6 +3,7 @@
|
||||
desc = "We reform one of our arms into a deadly blade."
|
||||
helptext = "We may retract our armblade by dropping it. It can deflect projectiles."
|
||||
enhancedtext = "The blade will have armor peneratration."
|
||||
ability_icon_state = "ling_armblade"
|
||||
genomecost = 2
|
||||
verbpath = /mob/proc/changeling_arm_blade
|
||||
|
||||
@@ -27,11 +28,11 @@
|
||||
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"
|
||||
item_state = "arm_blade"
|
||||
w_class = 5.0
|
||||
force = 40
|
||||
sharp = 1
|
||||
edge = 1
|
||||
pry = 1
|
||||
anchored = 1
|
||||
throwforce = 0 //Just to be on the safe side
|
||||
throw_range = 0
|
||||
|
||||
@@ -2,13 +2,13 @@
|
||||
name = "Organic Space Suit"
|
||||
desc = "We grow an organic suit to protect ourselves from space exposure."
|
||||
helptext = "To remove the suit, use the ability again."
|
||||
ability_icon_state = "ling_space_suit"
|
||||
genomecost = 1
|
||||
verbpath = /mob/proc/changeling_spacesuit
|
||||
|
||||
/mob/proc/changeling_spacesuit()
|
||||
set category = "Changeling"
|
||||
set name = "Organic Space Suit (20)"
|
||||
|
||||
if(changeling_generic_armor(/obj/item/clothing/suit/space/changeling,/obj/item/clothing/head/helmet/space/changeling))
|
||||
return 1
|
||||
return 0
|
||||
@@ -17,6 +17,7 @@
|
||||
name = "Chitinous Spacearmor"
|
||||
desc = "We turn our skin into tough chitin to protect us from damage and space exposure."
|
||||
helptext = "To remove the armor, use the ability again."
|
||||
ability_icon_state = "ling_armor"
|
||||
genomecost = 3
|
||||
verbpath = /mob/proc/changeling_spacearmor
|
||||
|
||||
@@ -70,7 +71,6 @@
|
||||
name = "chitinous mass"
|
||||
desc = "A tough, hard covering of black chitin."
|
||||
icon_state = "lingarmor"
|
||||
item_state = "lingarmor"
|
||||
body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|FEET|ARMS|HANDS
|
||||
armor = list(melee = 75, bullet = 60, laser = 60, energy = 60, bomb = 60, bio = 0, rad = 0) //It costs 3 points, so it should be very protective.
|
||||
siemens_coefficient = 0.3
|
||||
@@ -91,7 +91,6 @@
|
||||
name = "chitinous mass"
|
||||
desc = "A tough, hard covering of black chitin with transparent chitin in front."
|
||||
icon_state = "lingarmorhelmet"
|
||||
item_state = "lingarmorhelmet"
|
||||
armor = list(melee = 75, bullet = 60, laser = 60,energy = 60, bomb = 60, bio = 0, rad = 0)
|
||||
siemens_coefficient = 0.3
|
||||
max_heat_protection_temperature = FIRE_HELMET_MAX_HEAT_PROTECTION_TEMPERATURE
|
||||
|
||||
@@ -4,6 +4,7 @@
|
||||
name = "Augmented Eyesight"
|
||||
desc = "Creates heat receptors in our eyes and dramatically increases light sensing ability."
|
||||
helptext = "Grants us night vision and thermal vision. It may be toggled on or off. We will become more vulnerable to flash-based devices while active."
|
||||
ability_icon_state = "ling_augmented_eyesight"
|
||||
genomecost = 2
|
||||
var/active = 0 //Whether or not vision is enhanced
|
||||
verbpath = /mob/proc/changeling_augmented_eyesight
|
||||
|
||||
@@ -5,6 +5,7 @@
|
||||
helptext = "We can shock someone by grabbing them and using this ability, or using the ability with an empty hand and touching them. \
|
||||
Shocking someone costs ten chemicals per use."
|
||||
enhancedtext = "Shocking biologicals without grabbing only requires five chemicals, and has more disabling power."
|
||||
ability_icon_state = "ling_bioelectrogenesis"
|
||||
genomecost = 2
|
||||
verbpath = /mob/living/carbon/human/proc/changeling_bioelectrogenesis
|
||||
|
||||
|
||||
@@ -2,6 +2,7 @@
|
||||
name = "Blind Sting"
|
||||
desc = "We silently sting a human, completely blinding them for a short time."
|
||||
enhancedtext = "Duration is extended."
|
||||
ability_icon_state = " ling_sting_blind"
|
||||
genomecost = 2
|
||||
allowduringlesserform = 1
|
||||
verbpath = /mob/proc/changeling_blind_sting
|
||||
|
||||
@@ -3,6 +3,7 @@
|
||||
desc = "We evolve the ability to shoot our stingers at humans, with some preperation."
|
||||
helptext = "Allows us to prepare the next sting to have a range of two tiles."
|
||||
enhancedtext = "The range is extended to five tiles."
|
||||
ability_icon_state = "ling_sting_boost_range"
|
||||
genomecost = 1
|
||||
allowduringlesserform = 1
|
||||
verbpath = /mob/proc/changeling_boost_range
|
||||
|
||||
@@ -4,6 +4,7 @@
|
||||
helptext = "Does not provide a warning to the victim, though they will likely realize they are suddenly freezing. Has \
|
||||
a three minute cooldown between uses."
|
||||
enhancedtext = "Increases the amount of chemicals injected."
|
||||
ability_icon_state = "ling_sting_cryo"
|
||||
genomecost = 1
|
||||
verbpath = /mob/proc/changeling_cryo_sting
|
||||
|
||||
|
||||
@@ -2,6 +2,7 @@
|
||||
name = "Deaf Sting"
|
||||
desc = "We silently sting a human, completely deafening them for a short time."
|
||||
enhancedtext = "Deafness duration is extended."
|
||||
ability_icon_state = "ling_sting_deafen"
|
||||
genomecost = 1
|
||||
allowduringlesserform = 1
|
||||
verbpath = /mob/proc/changeling_deaf_sting
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
/datum/power/changeling/DeathSting
|
||||
name = "Death Sting"
|
||||
desc = "We silently sting a human, filling him with potent chemicals. His rapid death is all but assured."
|
||||
ability_icon_state = "ling_sting_death"
|
||||
genomecost = 10
|
||||
verbpath = /mob/proc/changeling_DEATHsting
|
||||
|
||||
|
||||
@@ -4,6 +4,7 @@
|
||||
implicate ourselves."
|
||||
helptext = "The toxin takes effect in about two minutes. The sting has a three minute cooldown between uses."
|
||||
enhancedtext = "The toxic damage is doubled."
|
||||
ability_icon_state = "ling_sting_del_toxin"
|
||||
genomecost = 1
|
||||
verbpath = /mob/proc/changeling_delayed_toxic_sting
|
||||
|
||||
|
||||
@@ -2,6 +2,7 @@
|
||||
name = "Digital Camoflauge"
|
||||
desc = "We evolve the ability to distort our form and proprtions, defeating common altgorthms used to detect lifeforms on cameras."
|
||||
helptext = "We cannot be tracked by camera while using this skill. However, humans looking at us will find us.. uncanny. We must constantly expend chemicals to maintain our form like this."
|
||||
ability_icon_state = "ling_digital_camo"
|
||||
genomecost = 1
|
||||
allowduringlesserform = 1
|
||||
verbpath = /mob/proc/changeling_digitalcamo
|
||||
|
||||
@@ -3,6 +3,7 @@
|
||||
desc = "We discreetly evolve a finger to be able to send a small electric charge. \
|
||||
We can open most electrical locks, but it will be obvious when we do so."
|
||||
helptext = "Use the ability, then touch something that utilizes an electrical locking system, to open it. Each use costs 10 chemicals."
|
||||
ability_icon_state = "ling_electric_lockpick"
|
||||
genomecost = 3
|
||||
verbpath = /mob/proc/changeling_electric_lockpick
|
||||
|
||||
|
||||
@@ -4,6 +4,7 @@
|
||||
helptext = "Lowers the maximum health of the victim for a few minutes. This sting will also warn them of this. Has a \
|
||||
five minute coodown between uses."
|
||||
enhancedtext = "Maximum health is lowered further."
|
||||
ability_icon_state = "ling_sting_enfeeble"
|
||||
genomecost = 1
|
||||
verbpath = /mob/proc/changeling_enfeebling_string
|
||||
|
||||
|
||||
@@ -3,6 +3,7 @@
|
||||
desc = "We evolve additional sacs of adrenaline throughout our body."
|
||||
helptext = "We can instantly recover from stuns and reduce the effect of future stuns, but we will suffer toxicity in the long term. Can be used while unconscious."
|
||||
enhancedtext = "Constant recovery from stuns for thirty seconds."
|
||||
ability_icon_state = "ling_epinepherine_overdose"
|
||||
genomecost = 2
|
||||
verbpath = /mob/proc/changeling_epinephrine_overdose
|
||||
|
||||
|
||||
@@ -2,6 +2,7 @@
|
||||
name = "Extract DNA"
|
||||
desc = "We stealthily sting a target and extract the DNA from them."
|
||||
helptext = "Will give you the DNA of your target, allowing you to transform into them. Does not count towards absorb objectives."
|
||||
ability_icon_state = "ling_sting_extract"
|
||||
genomecost = 0
|
||||
allowduringlesserform = 1
|
||||
verbpath = /mob/proc/changeling_extract_dna_sting
|
||||
|
||||
@@ -17,6 +17,7 @@ var/global/list/changeling_fabricated_clothing = list(
|
||||
We cannot be relieved of this clothing by others."
|
||||
helptext = "The disguise we create offers no defensive ability. Each equipment slot that is empty will be filled with fabricated equipment. \
|
||||
To remove our new fabricated clothing, use this ability again."
|
||||
ability_icon_state = "ling_fabricate_clothing"
|
||||
genomecost = 2
|
||||
verbpath = /mob/proc/changeling_fabricate_clothing
|
||||
|
||||
@@ -32,6 +33,10 @@ var/global/list/changeling_fabricated_clothing = list(
|
||||
/obj/item/clothing/under/chameleon/changeling
|
||||
name = "malformed flesh"
|
||||
icon_state = "lingchameleon"
|
||||
item_icons = list(
|
||||
slot_l_hand_str = 'icons/mob/items/lefthand_uniforms.dmi',
|
||||
slot_r_hand_str = 'icons/mob/items/righthand_uniforms.dmi',
|
||||
)
|
||||
item_state = "lingchameleon"
|
||||
worn_state = "lingchameleon"
|
||||
desc = "The flesh all around us has grown a new layer of cells that can shift appearance and create a biological fabric that cannot be distinguished from \
|
||||
@@ -78,6 +83,10 @@ var/global/list/changeling_fabricated_clothing = list(
|
||||
/obj/item/clothing/suit/chameleon/changeling
|
||||
name = "chitinous chest"
|
||||
icon_state = "lingchameleon"
|
||||
item_icons = list(
|
||||
slot_l_hand_str = 'icons/mob/items/lefthand_suits.dmi',
|
||||
slot_r_hand_str = 'icons/mob/items/righthand_suits.dmi',
|
||||
)
|
||||
item_state = "armor"
|
||||
desc = "The cells in our chest are rapidly shifting, ready to reform into material that can resemble most pieces of clothing."
|
||||
origin_tech = list()
|
||||
@@ -100,6 +109,10 @@ var/global/list/changeling_fabricated_clothing = list(
|
||||
/obj/item/clothing/shoes/chameleon/changeling
|
||||
name = "malformed feet"
|
||||
icon_state = "lingchameleon"
|
||||
item_icons = list(
|
||||
slot_l_hand_str = 'icons/mob/items/lefthand_shoes.dmi',
|
||||
slot_r_hand_str = 'icons/mob/items/righthand_shoes.dmi',
|
||||
)
|
||||
item_state = "black"
|
||||
desc = "Our feet are overlayed with another layer of flesh and bone on top. We can reform our feet to resemble various boots and shoes."
|
||||
origin_tech = list()
|
||||
@@ -122,6 +135,10 @@ var/global/list/changeling_fabricated_clothing = list(
|
||||
/obj/item/weapon/storage/backpack/chameleon/changeling
|
||||
name = "backpack"
|
||||
icon_state = "backpack"
|
||||
item_icons = list(
|
||||
slot_l_hand_str = 'icons/mob/items/lefthand_storage.dmi',
|
||||
slot_r_hand_str = 'icons/mob/items/righthand_storage.dmi',
|
||||
)
|
||||
item_state = "backpack"
|
||||
desc = "A large pouch imbedded in our back, it can shift form to resemble many common backpacks that other biologicals are fond of using."
|
||||
origin_tech = list()
|
||||
@@ -146,6 +163,10 @@ var/global/list/changeling_fabricated_clothing = list(
|
||||
/obj/item/clothing/gloves/chameleon/changeling
|
||||
name = "malformed hands"
|
||||
icon_state = "lingchameleon"
|
||||
item_icons = list(
|
||||
slot_l_hand_str = 'icons/mob/items/lefthand_gloves.dmi',
|
||||
slot_r_hand_str = 'icons/mob/items/righthand_gloves.dmi',
|
||||
)
|
||||
item_state = "lingchameleon"
|
||||
desc = "Our hands have a second layer of flesh on top. We can reform our hands to resemble a large variety of fabrics and materials that biologicals \
|
||||
tend to wear on their hands. Remember that these won't protect your hands from harm."
|
||||
@@ -170,6 +191,10 @@ var/global/list/changeling_fabricated_clothing = list(
|
||||
/obj/item/clothing/mask/chameleon/changeling
|
||||
name = "chitin visor"
|
||||
icon_state = "lingchameleon"
|
||||
item_icons = list(
|
||||
slot_l_hand_str = 'icons/mob/items/lefthand_masks.dmi',
|
||||
slot_r_hand_str = 'icons/mob/items/righthand_masks.dmi',
|
||||
)
|
||||
item_state = "gas_alt"
|
||||
desc = "A transparent visor of brittle chitin covers our face. We can reform it to resemble various masks that biologicals use. It can also utilize internal \
|
||||
tanks.."
|
||||
@@ -216,6 +241,10 @@ var/global/list/changeling_fabricated_clothing = list(
|
||||
name = "waist pouch"
|
||||
desc = "We can store objects in this, as well as shift it's appearance, so that it resembles various common belts."
|
||||
icon_state = "lingchameleon"
|
||||
item_icons = list(
|
||||
slot_l_hand_str = 'icons/mob/items/lefthand_storage.dmi',
|
||||
slot_r_hand_str = 'icons/mob/items/righthand_storage.dmi',
|
||||
)
|
||||
item_state = "utility"
|
||||
origin_tech = list()
|
||||
canremove = 0
|
||||
|
||||
@@ -2,6 +2,7 @@
|
||||
name = "Regenerative Stasis"
|
||||
desc = "We become weakened to a death-like state, where we will rise again from death."
|
||||
helptext = "Can be used before or after death. Duration varies greatly."
|
||||
ability_icon_state = "ling_regenerative_stasis"
|
||||
genomecost = 0
|
||||
allowduringlesserform = 1
|
||||
verbpath = /mob/proc/changeling_fakedeath
|
||||
|
||||
@@ -3,6 +3,7 @@
|
||||
desc = "Begins a slow rengeration of our form. Does not effect stuns or chemicals."
|
||||
helptext = "Can be used while unconscious."
|
||||
enhancedtext = "Healing is twice as effective."
|
||||
ability_icon_state = "ling_fleshmend"
|
||||
genomecost = 1
|
||||
verbpath = /mob/proc/changeling_fleshmend
|
||||
|
||||
|
||||
@@ -5,6 +5,7 @@
|
||||
desc = "We can channel a DNA into the airwaves, allowing our fellow changelings to absorb it and transform into it as if they acquired the DNA themselves."
|
||||
helptext = "Allows other changelings to absorb the DNA you channel from the airwaves. Will not help them towards their absorb objectives."
|
||||
genomecost = 0
|
||||
make_hud_button = 0
|
||||
verbpath = /mob/proc/changeling_hiveupload
|
||||
|
||||
/datum/power/changeling/hive_download
|
||||
@@ -12,6 +13,7 @@
|
||||
desc = "We can absorb a single DNA from the airwaves, allowing us to use more disguises with help from our fellow changelings."
|
||||
helptext = "Allows you to absorb a single DNA and use it. Does not count towards your absorb objective."
|
||||
genomecost = 0
|
||||
make_hud_button = 0
|
||||
verbpath = /mob/proc/changeling_hivedownload
|
||||
|
||||
// HIVE MIND UPLOAD/DOWNLOAD DNA
|
||||
|
||||
@@ -2,6 +2,7 @@
|
||||
name = "Mimic Voice"
|
||||
desc = "We shape our vocal glands to sound like a desired voice."
|
||||
helptext = "Will turn your voice into the name that you enter. We must constantly expend chemicals to maintain our form like this"
|
||||
ability_icon_state = "ling_mimic_voice"
|
||||
genomecost = 1
|
||||
verbpath = /mob/proc/changeling_mimicvoice
|
||||
|
||||
|
||||
@@ -3,6 +3,7 @@
|
||||
desc = "Expels impurifications from our form; curing diseases, removing toxins, chemicals, radiation, and resetting our genetic code completely."
|
||||
helptext = "Can be used while unconscious. This will also purge any reagents inside ourselves, both harmful and beneficial."
|
||||
enhancedtext = "We heal more toxins."
|
||||
ability_icon_state = "ling_anatomic_panacea"
|
||||
genomecost = 1
|
||||
verbpath = /mob/proc/changeling_panacea
|
||||
|
||||
@@ -25,6 +26,7 @@
|
||||
C.sdisabilities = 0
|
||||
C.disabilities = 0
|
||||
C.reagents.clear_reagents()
|
||||
C.ingested.clear_reagents()
|
||||
|
||||
var/heal_amount = 5
|
||||
if(src.mind.changeling.recursive_enhancement)
|
||||
|
||||
@@ -4,6 +4,7 @@
|
||||
helptext = "This will heal a significant amount of brute, fire, oxy, clone, and brain damage, and heal broken bones, internal bleeding, low blood, \
|
||||
and organ damage. The process is fast, but anyone who sees us do this will likely realize we are not what we seem."
|
||||
enhancedtext = "Healing increased to heal up to maximum health."
|
||||
ability_icon_state = "ling_rapid_regeneration"
|
||||
genomecost = 2
|
||||
verbpath = /mob/proc/changeling_rapid_regen
|
||||
|
||||
|
||||
@@ -2,6 +2,7 @@
|
||||
name = "Recursive Enhancement"
|
||||
desc = "We cause our next ability use to have increased or additional effects."
|
||||
helptext = "To check the effects for each ability, check the blue text underneath the ability in the evolution menu."
|
||||
ability_icon_state = "ling_recursive_enhancement"
|
||||
genomecost = 3
|
||||
verbpath = /mob/proc/changeling_recursive_enhancement
|
||||
|
||||
|
||||
@@ -45,6 +45,7 @@
|
||||
C.mind.changeling.purchased_powers -= C
|
||||
feedback_add_details("changeling_powers","CR")
|
||||
C.stat = CONSCIOUS
|
||||
C.timeofdeath = null
|
||||
src.verbs -= /mob/proc/changeling_revive
|
||||
// re-add our changeling powers
|
||||
C.make_changeling()
|
||||
|
||||
@@ -3,6 +3,7 @@
|
||||
desc = "Our lungs and vocal chords shift, allowing us to briefly emit a noise that deafens and confuses the weak-minded biologicals and synthetics."
|
||||
helptext = "Lights are blown, organics are disoriented, and synthetics act as if they were flashed."
|
||||
enhancedtext = "Range is doubled."
|
||||
ability_icon_state = "ling_resonant_shriek"
|
||||
genomecost = 2
|
||||
verbpath = /mob/proc/changeling_resonant_shriek
|
||||
|
||||
@@ -11,6 +12,7 @@
|
||||
desc = "We shift our vocal cords to release a high-frequency sound that overloads nearby electronics."
|
||||
helptext = "Creates a moderate sized EMP."
|
||||
enhancedtext = "Range is doubled."
|
||||
ability_icon_state = "ling_dissonant_shriek"
|
||||
genomecost = 2
|
||||
verbpath = /mob/proc/changeling_dissonant_shriek
|
||||
|
||||
|
||||
@@ -3,6 +3,7 @@
|
||||
desc = "We silently sting a human, completely silencing them for a short time."
|
||||
helptext = "Does not provide a warning to a victim that they have been stung, until they try to speak and cannot."
|
||||
enhancedtext = "Silence duration is extended."
|
||||
ability_icon_state = "ling_sting_mute"
|
||||
genomecost = 2
|
||||
allowduringlesserform = 1
|
||||
verbpath = /mob/proc/changeling_silence_sting
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
/datum/power/changeling/transform
|
||||
name = "Transform"
|
||||
desc = "We take on the apperance and voice of one we have absorbed."
|
||||
ability_icon_state = "ling_transform"
|
||||
genomecost = 0
|
||||
verbpath = /mob/proc/changeling_transform
|
||||
|
||||
|
||||
@@ -3,6 +3,7 @@
|
||||
name = "Transformation Sting"
|
||||
desc = "We silently sting a human, injecting a retrovirus that forces them to transform into another."
|
||||
helptext = "Does not provide a warning to others. The victim will transform much like a changeling would."
|
||||
ability_icon_state = "ling_sting_transform"
|
||||
genomecost = 3
|
||||
verbpath = /mob/proc/changeling_transformation_sting
|
||||
|
||||
|
||||
@@ -4,6 +4,7 @@
|
||||
We are undetectable, so long as we move slowly.(Toggle)"
|
||||
helptext = "Running, and performing most acts will reveal us. Our chemical regeneration is halted while we are hidden."
|
||||
enhancedtext = "True invisiblity while cloaked."
|
||||
ability_icon_state = "ling_camoflage"
|
||||
genomecost = 3
|
||||
verbpath = /mob/proc/changeling_visible_camouflage
|
||||
|
||||
|
||||
@@ -2,7 +2,6 @@
|
||||
name = "cult blade"
|
||||
desc = "An arcane weapon wielded by the followers of Nar-Sie."
|
||||
icon_state = "cultblade"
|
||||
item_state = "cultblade"
|
||||
w_class = 4
|
||||
force = 30
|
||||
throwforce = 10
|
||||
@@ -72,7 +71,6 @@
|
||||
name = "cult robes"
|
||||
desc = "A set of armored robes worn by the followers of Nar-Sie."
|
||||
icon_state = "cultrobes"
|
||||
item_state = "cultrobes"
|
||||
body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|ARMS
|
||||
allowed = list(/obj/item/weapon/book/tome,/obj/item/weapon/melee/cultblade)
|
||||
armor = list(melee = 50, bullet = 30, laser = 50, energy = 20, bomb = 25, bio = 10, rad = 0)
|
||||
@@ -84,13 +82,12 @@
|
||||
|
||||
/obj/item/clothing/suit/cultrobes/alt
|
||||
icon_state = "cultrobesalt"
|
||||
item_state = "cultrobesalt"
|
||||
item_state = "cultrobes"
|
||||
|
||||
/obj/item/clothing/suit/cultrobes/magusred
|
||||
name = "magus robes"
|
||||
desc = "A set of armored robes worn by the followers of Nar-Sie."
|
||||
icon_state = "magusred"
|
||||
item_state = "magusred"
|
||||
body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|FEET|ARMS|HANDS
|
||||
flags_inv = HIDEGLOVES|HIDESHOES|HIDEJUMPSUIT
|
||||
|
||||
@@ -107,7 +104,6 @@
|
||||
/obj/item/clothing/suit/space/cult
|
||||
name = "cult armour"
|
||||
icon_state = "cult_armour"
|
||||
item_state = "cult_armour"
|
||||
desc = "A bulky suit of armour, bristling with spikes. It looks space-worthy."
|
||||
w_class = 3
|
||||
allowed = list(/obj/item/weapon/book/tome,/obj/item/weapon/melee/cultblade,/obj/item/weapon/tank/emergency_oxygen,/obj/item/device/suit_cooling_unit)
|
||||
|
||||
@@ -50,7 +50,7 @@
|
||||
src.invisibility = INVISIBILITY_MAXIMUM
|
||||
density = 0
|
||||
|
||||
/obj/machinery/cooking/cultify()
|
||||
/obj/machinery/cooker/cultify()
|
||||
new /obj/structure/cult/talisman(loc)
|
||||
qdel(src)
|
||||
|
||||
|
||||
@@ -372,7 +372,7 @@ var/global/list/additional_antag_types = list()
|
||||
/datum/game_mode/proc/check_win() //universal trigger to be called at mob death, nuke explosion, etc. To be called from everywhere.
|
||||
return 0
|
||||
|
||||
/datum/game_mode/proc/get_players_for_role(var/role, var/antag_id)
|
||||
/datum/game_mode/proc/get_players_for_role(var/role, var/antag_id, var/ghosts_only)
|
||||
var/list/players = list()
|
||||
var/list/candidates = list()
|
||||
|
||||
@@ -387,6 +387,8 @@ var/global/list/additional_antag_types = list()
|
||||
continue
|
||||
if(istype(player, /mob/new_player))
|
||||
continue
|
||||
if(istype(player, /mob/observer/dead) && !ghosts_only)
|
||||
continue
|
||||
if(!role || (player.client.prefs.be_special & role))
|
||||
log_debug("[player.key] had [antag_id] enabled, so we are drafting them.")
|
||||
candidates |= player.mind
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user