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:
SinTwo
2016-07-27 16:11:55 -04:00
601 changed files with 16156 additions and 7173 deletions

View File

@@ -5,7 +5,7 @@ sudo: false
env: env:
BYOND_MAJOR="510" BYOND_MAJOR="510"
BYOND_MINOR="1346" BYOND_MINOR="1346"
MACRO_COUNT=987 MACRO_COUNT=986
cache: cache:
directories: directories:

View File

@@ -37,5 +37,5 @@
// Chemistry lists. // Chemistry lists.
var/list/tachycardics = list("coffee", "inaprovaline", "hyperzine", "nitroglycerin", "thirteenloko", "nicotine") // Increase heart rate. 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/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 var/list/cheartstopper = list("potassium_chloride") // This stops the heart when overdose is met. -- c = conditional

View File

@@ -68,10 +68,12 @@ var/list/be_special_flags = list(
#define MODE_COMMANDO "commando" #define MODE_COMMANDO "commando"
#define MODE_DEATHSQUAD "deathsquad" #define MODE_DEATHSQUAD "deathsquad"
#define MODE_ERT "ert" #define MODE_ERT "ert"
#define MODE_TRADE "trader"
#define MODE_MERCENARY "mercenary" #define MODE_MERCENARY "mercenary"
#define MODE_NINJA "ninja" #define MODE_NINJA "ninja"
#define MODE_RAIDER "raider" #define MODE_RAIDER "raider"
#define MODE_WIZARD "wizard" #define MODE_WIZARD "wizard"
#define MODE_TECHNOMANCER "technomancer"
#define MODE_CHANGELING "changeling" #define MODE_CHANGELING "changeling"
#define MODE_CULTIST "cultist" #define MODE_CULTIST "cultist"
#define MODE_HIGHLANDER "highlander" #define MODE_HIGHLANDER "highlander"
@@ -83,7 +85,7 @@ var/list/be_special_flags = list(
#define MODE_TRAITOR "traitor" #define MODE_TRAITOR "traitor"
#define MODE_AUTOTRAITOR "autotraitor" #define MODE_AUTOTRAITOR "autotraitor"
#define DEFAULT_TELECRYSTAL_AMOUNT 12 #define DEFAULT_TELECRYSTAL_AMOUNT 120
///////////////// /////////////////
////WIZARD ////// ////WIZARD //////

View File

@@ -92,7 +92,8 @@
// Setting this much higher than 1024 could allow spammers to DOS the server easily. // Setting this much higher than 1024 could allow spammers to DOS the server easily.
#define MAX_MESSAGE_LEN 1024 #define MAX_MESSAGE_LEN 1024
#define MAX_PAPER_MESSAGE_LEN 6144 #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_LNAME_LEN 64
#define MAX_NAME_LEN 52 #define MAX_NAME_LEN 52
@@ -161,3 +162,8 @@
#define CAT_NORMAL 1 #define CAT_NORMAL 1
#define CAT_HIDDEN 2 #define CAT_HIDDEN 2
#define CAT_COIN 4 #define CAT_COIN 4
//Antag Faction Visbility
#define ANTAG_HIDDEN "Hidden"
#define ANTAG_SHARED "Shared"
#define ANTAG_KNOWN "Known"

View File

@@ -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, // 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. // 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) if(!recursion_limit)
return L return L
@@ -176,7 +176,7 @@
else if(istype(I,/obj/)) else if(istype(I,/obj/))
var/obj/check_obj = I var/obj/check_obj = I
if(check_obj.show_messages) if(ignore_show_messages || check_obj.show_messages)
if(!sight_check || isInSight(I, O)) if(!sight_check || isInSight(I, O))
L |= recursive_content_check(I, L, recursion_limit - 1, client_check, sight_check, include_mobs, include_objects) L |= recursive_content_check(I, L, recursion_limit - 1, client_check, sight_check, include_mobs, include_objects)
if(include_objects) if(include_objects)

View File

@@ -119,27 +119,12 @@ proc/age2agedescription(age)
if(70 to INFINITY) return "elderly" if(70 to INFINITY) return "elderly"
else return "unknown" else return "unknown"
proc/RoundHealth(health) /proc/RoundHealth(health)
switch(health) var/list/icon_states = icon_states('icons/mob/hud_med.dmi')
if(100 to INFINITY) for(var/icon_state in icon_states)
return "health100" if(health >= text2num(icon_state))
if(70 to 100) return icon_state
return "health80" return icon_states[icon_states.len] // If we had no match, return the last element
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 for attack log creation, because really why not Proc for attack log creation, because really why not

View File

@@ -1037,12 +1037,6 @@ proc/get_mob_with_client_list()
else if (zone == "r_foot") return "right foot" else if (zone == "r_foot") return "right foot"
else return zone 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) /proc/get(atom/loc, type)
while(loc) while(loc)
if(istype(loc, type)) if(istype(loc, type))

View File

@@ -1,6 +1,8 @@
#define Clamp(x, y, z) (x <= y ? y : (x >= z ? z : x)) #define Clamp(x, y, z) (x <= y ? y : (x >= z ? z : x))
#define CLAMP01(x) (Clamp(x, 0, 1)) #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 isAI(A) istype(A, /mob/living/silicon/ai)
#define isalien(A) istype(A, /mob/living/carbon/alien) #define isalien(A) istype(A, /mob/living/carbon/alien)

View File

@@ -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_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_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 //Pop-up inventory
#define ui_shoes "WEST+1:8,SOUTH:5" #define ui_shoes "WEST+1:8,SOUTH:5"
@@ -137,5 +140,5 @@
#define ui_iarrowleft "SOUTH-1,EAST-4" #define ui_iarrowleft "SOUTH-1,EAST-4"
#define ui_iarrowright "SOUTH-1,EAST-2" #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" #define ui_genetic_master "EAST-1:16,NORTH-3:16"

View 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

View File

@@ -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/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/lingchemdisplay
var/obj/screen/wiz_instability_display
var/obj/screen/wiz_energy_display
var/obj/screen/blobpwrdisplay var/obj/screen/blobpwrdisplay
var/obj/screen/blobhealthdisplay var/obj/screen/blobhealthdisplay
var/obj/screen/r_hand_hud_object var/obj/screen/r_hand_hud_object
@@ -159,6 +161,8 @@ datum/hud/New(mob/owner)
disarm_intent = null disarm_intent = null
help_intent = null help_intent = null
lingchemdisplay = null lingchemdisplay = null
wiz_instability_display = null
wiz_energy_display = null
blobpwrdisplay = null blobpwrdisplay = null
blobhealthdisplay = null blobhealthdisplay = null
r_hand_hud_object = null r_hand_hud_object = null

View File

@@ -303,6 +303,17 @@
mymob.ling_chem_display.icon_state = "ling_chems" mymob.ling_chem_display.icon_state = "ling_chems"
hud_elements |= mymob.ling_chem_display 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.pain = new /obj/screen( null )
mymob.zone_sel = new /obj/screen/zone_sel( null ) mymob.zone_sel = new /obj/screen/zone_sel( null )
@@ -371,3 +382,15 @@
/obj/screen/ling/chems /obj/screen/ling/chems
name = "chemical storage" name = "chemical storage"
icon_state = "power_display" 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"

View File

@@ -15,7 +15,7 @@ mob/attacked_with_item() should then do mob-type specific stuff (like determinin
Item Hit Effects: 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). 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 //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) /obj/item/proc/apply_hit_effect(mob/living/target, mob/living/user, var/hit_zone)
user.break_cloak()
if(hitsound) if(hitsound)
playsound(loc, hitsound, 50, 1, -1) playsound(loc, hitsound, 50, 1, -1)
var/power = force var/power = force
if(HULK in user.mutations) if(HULK in user.mutations)
power *= 2 power *= 2

View File

@@ -65,6 +65,7 @@ var/list/gamemode_cache = list()
var/usewhitelist = 0 var/usewhitelist = 0
var/kick_inactive = 0 //force disconnect for inactive players after this many minutes, if non-0 var/kick_inactive = 0 //force disconnect for inactive players after this many minutes, if non-0
var/show_mods = 0 var/show_mods = 0
var/show_devs = 0
var/show_mentors = 0 var/show_mentors = 0
var/mods_can_tempban = 0 var/mods_can_tempban = 0
var/mods_can_job_tempban = 0 var/mods_can_job_tempban = 0
@@ -505,6 +506,9 @@ var/list/gamemode_cache = list()
if("show_mods") if("show_mods")
config.show_mods = 1 config.show_mods = 1
if("show_devs")
config.show_devs = 1
if("show_mentors") if("show_mentors")
config.show_mentors = 1 config.show_mentors = 1

View File

@@ -223,6 +223,17 @@ var/global/datum/shuttle_controller/shuttle_controller
shuttles["Administration"] = shuttle shuttles["Administration"] = shuttle
process_shuttles += 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 = new()
shuttle.area_offsite = locate(/area/shuttle/alien/base) shuttle.area_offsite = locate(/area/shuttle/alien/base)
shuttle.area_station = locate(/area/shuttle/alien/mine) shuttle.area_station = locate(/area/shuttle/alien/mine)

View File

@@ -102,6 +102,15 @@ var/global/list/all_exonet_connections = list()
return exonet.address return exonet.address
return null 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() // 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") // 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. // Description: Sends the message to target_address, by calling receive_message() on the desired datum.

View 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

View 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

View 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

View 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

View 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

View 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

View 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

View File

@@ -228,6 +228,8 @@
L.fields["faction"] = H.personal_faction L.fields["faction"] = H.personal_faction
L.fields["religion"] = H.religion L.fields["religion"] = H.religion
L.fields["image"] = getFlatIcon(H) //This is god-awful 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")) if(H.exploit_record && !jobban_isbanned(H, "Records"))
L.fields["exploit_record"] = H.exploit_record L.fields["exploit_record"] = H.exploit_record
else else

30
code/datums/hierarchy.dm Normal file
View 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

View File

@@ -52,7 +52,7 @@
/datum/supply_packs/atmos/canister_sleeping_agent /datum/supply_packs/atmos/canister_sleeping_agent
name = "N2O gas canister" name = "N2O gas canister"
cost = 40 cost = 15
containername = "N2O gas canister crate" containername = "N2O gas canister crate"
containertype = /obj/structure/closet/crate/secure/large containertype = /obj/structure/closet/crate/secure/large
access = access_atmospherics access = access_atmospherics
@@ -60,7 +60,7 @@
/datum/supply_packs/atmos/canister_carbon_dioxide /datum/supply_packs/atmos/canister_carbon_dioxide
name = "Carbon dioxide gas canister" name = "Carbon dioxide gas canister"
cost = 40 cost = 15
containername = "CO2 canister crate" containername = "CO2 canister crate"
containertype = /obj/structure/closet/crate/secure/large containertype = /obj/structure/closet/crate/secure/large
access = access_atmospherics access = access_atmospherics
@@ -69,7 +69,7 @@
/datum/supply_packs/atmos/air_dispenser /datum/supply_packs/atmos/air_dispenser
contains = list(/obj/machinery/pipedispenser/orderable) contains = list(/obj/machinery/pipedispenser/orderable)
name = "Pipe Dispenser" name = "Pipe Dispenser"
cost = 35 cost = 25
containertype = /obj/structure/closet/crate/secure/large containertype = /obj/structure/closet/crate/secure/large
containername = "Pipe Dispenser Crate" containername = "Pipe Dispenser Crate"
access = access_atmospherics access = access_atmospherics
@@ -77,7 +77,32 @@
/datum/supply_packs/atmos/disposals_dispenser /datum/supply_packs/atmos/disposals_dispenser
contains = list(/obj/machinery/pipedispenser/disposal/orderable) contains = list(/obj/machinery/pipedispenser/disposal/orderable)
name = "Disposals Pipe Dispenser" name = "Disposals Pipe Dispenser"
cost = 35 cost = 25
containertype = /obj/structure/closet/crate/secure/large containertype = /obj/structure/closet/crate/secure/large
containername = "Disposal Dispenser Crate" 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"

View File

@@ -14,7 +14,7 @@
) )
name = "Contraband crate" name = "Contraband crate"
cost = 30 cost = 25
containertype = /obj/structure/closet/crate containertype = /obj/structure/closet/crate
containername = "Unlabeled crate" containername = "Unlabeled crate"
contraband = 1 contraband = 1
@@ -28,10 +28,10 @@
/obj/item/weapon/pen/reagent/paralysis, /obj/item/weapon/pen/reagent/paralysis,
/obj/item/weapon/grenade/chem_grenade/incendiary /obj/item/weapon/grenade/chem_grenade/incendiary
) )
cost = 20 cost = 25
containertype = /obj/structure/closet/crate containertype = /obj/structure/closet/crate
containername = "Special Ops crate" containername = "Special Ops crate"
hidden = 1 contraband = 1
/datum/supply_packs/security/bolt_rifles_mosin /datum/supply_packs/security/bolt_rifles_mosin
name = "Surplus militia rifles" name = "Surplus militia rifles"
@@ -40,6 +40,6 @@
/obj/item/ammo_magazine/clip/a762 = 6 /obj/item/ammo_magazine/clip/a762 = 6
) )
cost = 50 cost = 50
hidden = 1 contraband = 1
containertype = /obj/structure/closet/crate/secure/weapon containertype = /obj/structure/closet/crate/secure/weapon
containername = "Weapons crate" containername = "Weapons crate"

View File

@@ -124,7 +124,7 @@ datum/supply_packs/costumes/witch
/datum/supply_packs/randomised/costumes/costume_hats /datum/supply_packs/randomised/costumes/costume_hats
name = "Costume hats" name = "Costume hats"
containername = "Actor hats crate" containername = "Actor hats crate"
containertype = /obj/structure/closet containertype = /obj/structure/closet/crate
cost = 10 cost = 10
num_contained = 3 num_contained = 3
contains = list( contains = list(

View File

@@ -29,7 +29,7 @@
/obj/item/weapon/cell = 2, /obj/item/weapon/cell = 2,
/obj/item/weapon/cell/high = 2 /obj/item/weapon/cell/high = 2
) )
cost = 15 cost = 10
containertype = /obj/structure/closet/crate containertype = /obj/structure/closet/crate
containername = "Electrical maintenance crate" containername = "Electrical maintenance crate"
@@ -48,7 +48,7 @@
/datum/supply_packs/eng/fueltank /datum/supply_packs/eng/fueltank
name = "Fuel tank crate" name = "Fuel tank crate"
contains = list(/obj/structure/reagent_dispensers/fueltank) contains = list(/obj/structure/reagent_dispensers/fueltank)
cost = 8 cost = 10
containertype = /obj/structure/largecrate containertype = /obj/structure/largecrate
containername = "fuel tank crate" containername = "fuel tank crate"
@@ -72,7 +72,7 @@
containername = "Emitter crate" containername = "Emitter crate"
access = access_ce access = access_ce
/datum/supply_packs/engine/eng/field_gen /datum/supply_packs/eng/engine/field_gen
name = "Field Generator crate" name = "Field Generator crate"
contains = list(/obj/machinery/field_generator = 2) contains = list(/obj/machinery/field_generator = 2)
containertype = /obj/structure/closet/crate/secure containertype = /obj/structure/closet/crate/secure
@@ -110,7 +110,7 @@
/datum/supply_packs/eng/shield_gen /datum/supply_packs/eng/shield_gen
contains = list(/obj/item/weapon/circuitboard/shield_gen) contains = list(/obj/item/weapon/circuitboard/shield_gen)
name = "Bubble shield generator circuitry" name = "Bubble shield generator circuitry"
cost = 50 cost = 30
containertype = /obj/structure/closet/crate/secure containertype = /obj/structure/closet/crate/secure
containername = "bubble shield generator circuitry crate" containername = "bubble shield generator circuitry crate"
access = access_ce access = access_ce
@@ -118,7 +118,7 @@
/datum/supply_packs/eng/shield_gen_ex /datum/supply_packs/eng/shield_gen_ex
contains = list(/obj/item/weapon/circuitboard/shield_gen_ex) contains = list(/obj/item/weapon/circuitboard/shield_gen_ex)
name = "Hull shield generator circuitry" name = "Hull shield generator circuitry"
cost = 50 cost = 30
containertype = /obj/structure/closet/crate/secure containertype = /obj/structure/closet/crate/secure
containername = "hull shield generator circuitry crate" containername = "hull shield generator circuitry crate"
access = access_ce access = access_ce
@@ -126,7 +126,7 @@
/datum/supply_packs/eng/shield_cap /datum/supply_packs/eng/shield_cap
contains = list(/obj/item/weapon/circuitboard/shield_cap) contains = list(/obj/item/weapon/circuitboard/shield_cap)
name = "Bubble shield capacitor circuitry" name = "Bubble shield capacitor circuitry"
cost = 50 cost = 30
containertype = /obj/structure/closet/crate/secure containertype = /obj/structure/closet/crate/secure
containername = "shield capacitor circuitry crate" containername = "shield capacitor circuitry crate"
access = access_ce access = access_ce
@@ -142,7 +142,7 @@
/datum/supply_packs/eng/teg /datum/supply_packs/eng/teg
contains = list(/obj/machinery/power/generator) contains = list(/obj/machinery/power/generator)
name = "Mark I Thermoelectric Generator" name = "Mark I Thermoelectric Generator"
cost = 75 cost = 50
containertype = /obj/structure/closet/crate/secure/large containertype = /obj/structure/closet/crate/secure/large
containername = "Mk1 TEG crate" containername = "Mk1 TEG crate"
access = access_engine access = access_engine
@@ -150,7 +150,7 @@
/datum/supply_packs/eng/circulator /datum/supply_packs/eng/circulator
contains = list(/obj/machinery/atmospherics/binary/circulator) contains = list(/obj/machinery/atmospherics/binary/circulator)
name = "Binary atmospheric circulator" name = "Binary atmospheric circulator"
cost = 60 cost = 50
containertype = /obj/structure/closet/crate/secure/large containertype = /obj/structure/closet/crate/secure/large
containername = "Atmospheric circulator crate" containername = "Atmospheric circulator crate"
access = access_engine access = access_engine
@@ -167,7 +167,7 @@
/datum/supply_packs/eng/pacman_parts /datum/supply_packs/eng/pacman_parts
name = "P.A.C.M.A.N. portable generator 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" containername = "P.A.C.M.A.N. Portable Generator Construction Kit"
containertype = /obj/structure/closet/crate/secure containertype = /obj/structure/closet/crate/secure
access = access_tech_storage access = access_tech_storage
@@ -180,7 +180,7 @@
/datum/supply_packs/eng/super_pacman_parts /datum/supply_packs/eng/super_pacman_parts
name = "Super P.A.C.M.A.N. portable generator 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" containername = "Super P.A.C.M.A.N. portable generator construction kit"
containertype = /obj/structure/closet/crate/secure containertype = /obj/structure/closet/crate/secure
access = access_tech_storage access = access_tech_storage

View File

@@ -22,7 +22,7 @@
/obj/item/weapon/reagent_containers/food/drinks/bottle/small/ale = 2, /obj/item/weapon/reagent_containers/food/drinks/bottle/small/ale = 2,
/obj/item/weapon/reagent_containers/food/drinks/bottle/small/beer = 4, /obj/item/weapon/reagent_containers/food/drinks/bottle/small/beer = 4,
) )
cost = 20 cost = 10
containertype = /obj/structure/closet/crate containertype = /obj/structure/closet/crate
containername = "Party equipment" containername = "Party equipment"

View File

@@ -17,21 +17,21 @@
/datum/supply_packs/hydro/farwa /datum/supply_packs/hydro/farwa
name = "Farwa crate" name = "Farwa crate"
contains = list (/obj/item/weapon/storage/box/monkeycubes/farwacubes) contains = list (/obj/item/weapon/storage/box/monkeycubes/farwacubes)
cost = 30 cost = 20
containertype = /obj/structure/closet/crate/freezer containertype = /obj/structure/closet/crate/freezer
containername = "Farwa crate" containername = "Farwa crate"
/datum/supply_packs/hydro/neara /datum/supply_packs/hydro/neara
name = "Neaera crate" name = "Neaera crate"
contains = list (/obj/item/weapon/storage/box/monkeycubes/neaeracubes) contains = list (/obj/item/weapon/storage/box/monkeycubes/neaeracubes)
cost = 30 cost = 20
containertype = /obj/structure/closet/crate/freezer containertype = /obj/structure/closet/crate/freezer
containername = "Neaera crate" containername = "Neaera crate"
/datum/supply_packs/hydro/stok /datum/supply_packs/hydro/stok
name = "Stok crate" name = "Stok crate"
contains = list (/obj/item/weapon/storage/box/monkeycubes/stokcubes) contains = list (/obj/item/weapon/storage/box/monkeycubes/stokcubes)
cost = 30 cost = 20
containertype = /obj/structure/closet/crate/freezer containertype = /obj/structure/closet/crate/freezer
containername = "Stok crate" containername = "Stok crate"
@@ -55,14 +55,14 @@
/obj/item/weapon/material/minihoe, /obj/item/weapon/material/minihoe,
/obj/item/weapon/storage/box/botanydisk /obj/item/weapon/storage/box/botanydisk
) )
cost = 15 cost = 20
containertype = /obj/structure/closet/crate/hydroponics containertype = /obj/structure/closet/crate/hydroponics
containername = "Hydroponics crate" containername = "Hydroponics crate"
access = access_hydroponics access = access_hydroponics
/datum/supply_packs/hydro/cow /datum/supply_packs/hydro/cow
name = "Cow crate" name = "Cow crate"
cost = 30 cost = 25
containertype = /obj/structure/largecrate/animal/cow containertype = /obj/structure/largecrate/animal/cow
containername = "Cow crate" containername = "Cow crate"
access = access_hydroponics access = access_hydroponics
@@ -76,7 +76,7 @@
/datum/supply_packs/hydro/chicken /datum/supply_packs/hydro/chicken
name = "Chicken crate" name = "Chicken crate"
cost = 20 cost = 25
containertype = /obj/structure/largecrate/animal/chick containertype = /obj/structure/largecrate/animal/chick
containername = "Chicken crate" containername = "Chicken crate"
access = access_hydroponics access = access_hydroponics
@@ -123,7 +123,7 @@
/datum/supply_packs/hydro/watertank /datum/supply_packs/hydro/watertank
name = "Water tank crate" name = "Water tank crate"
contains = list(/obj/structure/reagent_dispensers/watertank) contains = list(/obj/structure/reagent_dispensers/watertank)
cost = 8 cost = 10
containertype = /obj/structure/largecrate containertype = /obj/structure/largecrate
containername = "water tank crate" containername = "water tank crate"
@@ -142,7 +142,7 @@
/datum/supply_packs/hydro/tray /datum/supply_packs/hydro/tray
name = "Empty hydroponics tray" name = "Empty hydroponics tray"
cost = 30 cost = 20
containertype = /obj/structure/closet/crate/hydroponics containertype = /obj/structure/closet/crate/hydroponics
containername = "Hydroponics tray crate" containername = "Hydroponics tray crate"
contains = list(/obj/machinery/portable_atmospherics/hydroponics{anchored = 0}) contains = list(/obj/machinery/portable_atmospherics/hydroponics{anchored = 0})

View File

@@ -9,40 +9,35 @@
/datum/supply_packs/materials/metal50 /datum/supply_packs/materials/metal50
name = "50 metal sheets" name = "50 metal sheets"
contains = list(/obj/item/stack/material/steel) contains = list(/obj/item/stack/material/steel/fifty)
amount = 50
cost = 10 cost = 10
containertype = /obj/structure/closet/crate containertype = /obj/structure/closet/crate
containername = "Metal sheets crate" containername = "Metal sheets crate"
/datum/supply_packs/materials/glass50 /datum/supply_packs/materials/glass50
name = "50 glass sheets" name = "50 glass sheets"
contains = list(/obj/item/stack/material/glass) contains = list(/obj/item/stack/material/glass/fifty)
amount = 50
cost = 10 cost = 10
containertype = /obj/structure/closet/crate containertype = /obj/structure/closet/crate
containername = "Glass sheets crate" containername = "Glass sheets crate"
/datum/supply_packs/materials/wood50 /datum/supply_packs/materials/wood50
name = "50 wooden planks" name = "50 wooden planks"
contains = list(/obj/item/stack/material/wood) contains = list(/obj/item/stack/material/wood/fifty)
amount = 50
cost = 10 cost = 10
containertype = /obj/structure/closet/crate containertype = /obj/structure/closet/crate
containername = "Wooden planks crate" containername = "Wooden planks crate"
/datum/supply_packs/materials/plastic50 /datum/supply_packs/materials/plastic50
name = "50 plastic sheets" name = "50 plastic sheets"
contains = list(/obj/item/stack/material/plastic) contains = list(/obj/item/stack/material/plastic/fifty)
amount = 50
cost = 10 cost = 10
containertype = /obj/structure/closet/crate containertype = /obj/structure/closet/crate
containername = "Plastic sheets crate" containername = "Plastic sheets crate"
/datum/supply_packs/materials/cardboard_sheets /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" name = "50 cardboard sheets"
amount = 50
cost = 10 cost = 10
containertype = /obj/structure/closet/crate containertype = /obj/structure/closet/crate
containername = "Cardboard sheets crate" containername = "Cardboard sheets crate"
@@ -53,10 +48,9 @@
containername = "Imported carpet crate" containername = "Imported carpet crate"
cost = 15 cost = 15
contains = list( contains = list(
/obj/item/stack/tile/carpet, /obj/item/stack/tile/carpet/fifty,
/obj/item/stack/tile/carpet/blue /obj/item/stack/tile/carpet/blue/fifty
) )
amount = 50
/datum/supply_packs/misc/linoleum /datum/supply_packs/misc/linoleum
@@ -64,5 +58,4 @@
containertype = /obj/structure/closet/crate containertype = /obj/structure/closet/crate
containername = "Linoleum crate" containername = "Linoleum crate"
cost = 15 cost = 15
contains = list(/obj/item/stack/tile/linoleum) contains = list(/obj/item/stack/tile/linoleum/fifty)
amount = 50

View File

@@ -42,7 +42,7 @@
/datum/supply_packs/med/cryobag /datum/supply_packs/med/cryobag
name = "Stasis bag crate" name = "Stasis bag crate"
contains = list(/obj/item/bodybag/cryobag = 3) contains = list(/obj/item/bodybag/cryobag = 3)
cost = 50 cost = 40
containertype = /obj/structure/closet/crate/medical containertype = /obj/structure/closet/crate/medical
containername = "Stasis bag crate" containername = "Stasis bag crate"
@@ -75,7 +75,7 @@
/obj/item/weapon/storage/box/gloves, /obj/item/weapon/storage/box/gloves,
/obj/item/weapon/storage/belt/medical = 3 /obj/item/weapon/storage/belt/medical = 3
) )
cost = 15 cost = 10
containertype = "/obj/structure/closet/crate" containertype = "/obj/structure/closet/crate"
containername = "Sterile equipment crate" containername = "Sterile equipment crate"
@@ -87,7 +87,7 @@
/obj/item/device/radio/headset/headset_med/alt = 3, /obj/item/device/radio/headset/headset_med/alt = 3,
/obj/item/clothing/suit/storage/hooded/wintercoat/medical = 3 /obj/item/clothing/suit/storage/hooded/wintercoat/medical = 3
) )
cost = 15 cost = 10
containertype = "/obj/structure/closet/crate/secure" containertype = "/obj/structure/closet/crate/secure"
containername = "Medical surplus equipment" containername = "Medical surplus equipment"
access = access_medical access = access_medical
@@ -111,7 +111,7 @@
/obj/item/device/flashlight/pen, /obj/item/device/flashlight/pen,
/obj/item/weapon/reagent_containers/syringe /obj/item/weapon/reagent_containers/syringe
) )
cost = 60 cost = 50
containertype = "/obj/structure/closet/crate/secure" containertype = "/obj/structure/closet/crate/secure"
containername = "Chief medical officer equipment" containername = "Chief medical officer equipment"
access = access_cmo access = access_cmo
@@ -157,7 +157,7 @@
/obj/item/weapon/storage/box/pillbottles, /obj/item/weapon/storage/box/pillbottles,
/obj/item/weapon/reagent_containers/syringe /obj/item/weapon/reagent_containers/syringe
) )
cost = 15 cost = 20
containertype = "/obj/structure/closet/crate/secure" containertype = "/obj/structure/closet/crate/secure"
containername = "Chemist equipment" containername = "Chemist equipment"
access = access_chemistry access = access_chemistry
@@ -204,7 +204,7 @@
/obj/item/weapon/pen, /obj/item/weapon/pen,
/obj/item/weapon/cartridge/medical /obj/item/weapon/cartridge/medical
) )
cost = 15 cost = 20
containertype = "/obj/structure/closet/crate/secure" containertype = "/obj/structure/closet/crate/secure"
containername = "Psychiatrist equipment" containername = "Psychiatrist equipment"
access = access_psychiatrist access = access_psychiatrist
@@ -225,7 +225,7 @@
/obj/item/weapon/storage/box/masks, /obj/item/weapon/storage/box/masks,
/obj/item/weapon/storage/box/gloves /obj/item/weapon/storage/box/gloves
) )
cost = 15 cost = 10
containertype = "/obj/structure/closet/crate/secure" containertype = "/obj/structure/closet/crate/secure"
containername = "Medical scrubs crate" containername = "Medical scrubs crate"
access = access_medical_equip access = access_medical_equip
@@ -269,7 +269,7 @@
/obj/item/weapon/storage/box/masks, /obj/item/weapon/storage/box/masks,
/obj/item/weapon/storage/box/gloves /obj/item/weapon/storage/box/gloves
) )
cost = 15 cost = 10
containertype = "/obj/structure/closet/crate/secure" containertype = "/obj/structure/closet/crate/secure"
containername = "Medical uniform crate" containername = "Medical uniform crate"
access = access_medical_equip access = access_medical_equip

View File

@@ -67,31 +67,6 @@
/obj/item/clothing/accessory/storage/white_drop_pouches, /obj/item/clothing/accessory/storage/white_drop_pouches,
/obj/item/clothing/accessory/storage/webbing /obj/item/clothing/accessory/storage/webbing
) )
cost = 15 cost = 10
containertype = "/obj/structure/closet/crate" containertype = "/obj/structure/closet/crate"
containername = "Webbing 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"

View File

@@ -40,7 +40,7 @@
contains = list( contains = list(
/obj/item/weapon/gun/energy/xray = 2, /obj/item/weapon/gun/energy/xray = 2,
/obj/item/weapon/shield/energy = 2) /obj/item/weapon/shield/energy = 2)
cost = 125 cost = 100
containertype = /obj/structure/closet/crate/secure/weapon containertype = /obj/structure/closet/crate/secure/weapon
containername = "Experimental weapons crate" containername = "Experimental weapons crate"
access = access_armory access = access_armory
@@ -60,7 +60,7 @@
/obj/item/weapon/storage/box/shotgunshells, /obj/item/weapon/storage/box/shotgunshells,
/obj/item/weapon/gun/projectile/shotgun/pump/combat = 2 /obj/item/weapon/gun/projectile/shotgun/pump/combat = 2
) )
cost = 65 cost = 50
containertype = /obj/structure/closet/crate/secure containertype = /obj/structure/closet/crate/secure
containername = "Shotgun crate" containername = "Shotgun crate"
access = access_armory access = access_armory
@@ -68,7 +68,7 @@
/datum/supply_packs/munitions/erifle /datum/supply_packs/munitions/erifle
name = "Energy marksman crate" name = "Energy marksman crate"
contains = list(/obj/item/weapon/gun/energy/sniperrifle = 2) contains = list(/obj/item/weapon/gun/energy/sniperrifle = 2)
cost = 90 cost = 100
containertype = /obj/structure/closet/crate/secure containertype = /obj/structure/closet/crate/secure
containername = "Energy marksman crate" containername = "Energy marksman crate"
access = access_armory access = access_armory
@@ -91,7 +91,7 @@
/obj/item/weapon/gun/projectile/automatic/wt550, /obj/item/weapon/gun/projectile/automatic/wt550,
/obj/item/weapon/gun/projectile/automatic/z8 /obj/item/weapon/gun/projectile/automatic/z8
) )
cost = 90 cost = 100
containertype = /obj/structure/closet/crate/secure containertype = /obj/structure/closet/crate/secure
containername = "Automatic weapon crate" containername = "Automatic weapon crate"
access = access_armory access = access_armory
@@ -119,12 +119,12 @@
containername = "Weapons crate" containername = "Weapons crate"
/datum/supply_packs/munitions/shotgunammo /datum/supply_packs/munitions/shotgunammo
name = "Ballistic ammunition crate" name = "Shotgun ammunition crate"
contains = list( contains = list(
/obj/item/weapon/storage/box/shotgunammo = 2, /obj/item/weapon/storage/box/shotgunammo = 2,
/obj/item/weapon/storage/box/shotgunshells = 2 /obj/item/weapon/storage/box/shotgunshells = 2
) )
cost = 60 cost = 25
containertype = /obj/structure/closet/crate/secure containertype = /obj/structure/closet/crate/secure
containername = "ballistic ammunition crate" containername = "ballistic ammunition crate"
access = access_armory access = access_armory
@@ -137,7 +137,7 @@
/obj/item/ammo_magazine/mc9mmt/rubber, /obj/item/ammo_magazine/mc9mmt/rubber,
/obj/item/ammo_magazine/a556 /obj/item/ammo_magazine/a556
) )
cost = 20 cost = 25
containertype = /obj/structure/closet/crate/secure containertype = /obj/structure/closet/crate/secure
containername = "Automatic weapon ammunition crate" containername = "Automatic weapon ammunition crate"
access = access_armory access = access_armory
@@ -145,7 +145,7 @@
/datum/supply_packs/munitions/beanbagammo /datum/supply_packs/munitions/beanbagammo
name = "Beanbag shells" name = "Beanbag shells"
contains = list(/obj/item/weapon/storage/box/beanbags = 3) contains = list(/obj/item/weapon/storage/box/beanbags = 3)
cost = 30 cost = 25
containertype = /obj/structure/closet/crate containertype = /obj/structure/closet/crate
containername = "Beanbag shells" containername = "Beanbag shells"
access = null access = null

View File

@@ -19,7 +19,7 @@
/obj/item/weapon/material/twohanded/spear/foam = 2, /obj/item/weapon/material/twohanded/spear/foam = 2,
/obj/item/weapon/material/twohanded/fireaxe/foam = 2 /obj/item/weapon/material/twohanded/fireaxe/foam = 2
) )
cost = 80 cost = 50
containertype = /obj/structure/closet/crate containertype = /obj/structure/closet/crate
containername = "foam weapon crate" containername = "foam weapon crate"
@@ -33,7 +33,7 @@
) )
containertype = /obj/structure/closet containertype = /obj/structure/closet
containername = "Lasertag Closet" containername = "Lasertag Closet"
cost = 20 cost = 10
/datum/supply_packs/recreation/artscrafts /datum/supply_packs/recreation/artscrafts
name = "Arts and Crafts supplies" name = "Arts and Crafts supplies"

View File

@@ -11,7 +11,7 @@
group = "Robotics" group = "Robotics"
access = access_robotics access = access_robotics
/datum/supply_packs/eng/robotics /datum/supply_packs/robotics/robotics_assembly
name = "Robotics assembly crate" name = "Robotics assembly crate"
contains = list( contains = list(
/obj/item/device/assembly/prox_sensor = 3, /obj/item/device/assembly/prox_sensor = 3,
@@ -58,7 +58,7 @@
/obj/item/weapon/circuitboard/mecha/ripley/main, /obj/item/weapon/circuitboard/mecha/ripley/main,
/obj/item/weapon/circuitboard/mecha/ripley/peripherals /obj/item/weapon/circuitboard/mecha/ripley/peripherals
) )
cost = 30 cost = 25
containertype = /obj/structure/closet/crate/secure containertype = /obj/structure/closet/crate/secure
containername = "APLU \"Ripley\" Circuit Crate" containername = "APLU \"Ripley\" Circuit Crate"
access = access_robotics access = access_robotics

View File

@@ -8,17 +8,20 @@
/datum/supply_packs/sci/coolanttank /datum/supply_packs/sci/coolanttank
name = "Coolant tank crate" name = "Coolant tank crate"
contains = list(/obj/structure/reagent_dispensers/coolanttank) contains = list(/obj/structure/reagent_dispensers/coolanttank)
cost = 16 cost = 15
containertype = /obj/structure/largecrate containertype = /obj/structure/largecrate
containername = "coolant tank crate" containername = "coolant tank crate"
/datum/supply_packs/sci/phoron /datum/supply_packs/sci/phoron
name = "Phoron assembly crate" name = "Phoron research crate"
contains = list( contains = list(
/obj/item/weapon/tank/phoron = 3, /obj/item/weapon/tank/phoron = 3,
/obj/item/weapon/tank/oxygen = 3,
/obj/item/device/assembly/igniter = 3, /obj/item/device/assembly/igniter = 3,
/obj/item/device/assembly/prox_sensor = 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 cost = 10
containertype = /obj/structure/closet/crate/secure/phoron containertype = /obj/structure/closet/crate/secure/phoron

View File

@@ -82,7 +82,7 @@
/obj/item/clothing/gloves/arm_guard/bulletproof, /obj/item/clothing/gloves/arm_guard/bulletproof,
/obj/item/clothing/shoes/leg_guard/bulletproof /obj/item/clothing/shoes/leg_guard/bulletproof
) )
cost = 35 cost = 40
containertype = /obj/structure/closet/crate/secure containertype = /obj/structure/closet/crate/secure
containername = "bullet resistant armor set crate" containername = "bullet resistant armor set crate"
access = access_armory access = access_armory
@@ -104,7 +104,7 @@
name = "Tactical suits" name = "Tactical suits"
containertype = /obj/structure/closet/crate/secure containertype = /obj/structure/closet/crate/secure
containername = "Tactical Suit Locker" containername = "Tactical Suit Locker"
cost = 60 cost = 40
access = access_armory access = access_armory
contains = list( contains = list(
/obj/item/clothing/under/tactical, /obj/item/clothing/under/tactical,
@@ -162,7 +162,7 @@
/obj/item/device/radio/headset/headset_sec/alt = 3, /obj/item/device/radio/headset/headset_sec/alt = 3,
/obj/item/clothing/suit/storage/hooded/wintercoat/security = 3 /obj/item/clothing/suit/storage/hooded/wintercoat/security = 3
) )
cost = 25 cost = 10
containertype = "/obj/structure/closet/crate/secure" containertype = "/obj/structure/closet/crate/secure"
containername = "Security surplus equipment" containername = "Security surplus equipment"
access = null access = null
@@ -189,7 +189,7 @@
/obj/item/device/flashlight/maglight, /obj/item/device/flashlight/maglight,
/obj/item/weapon/storage/briefcase/crimekit /obj/item/weapon/storage/briefcase/crimekit
) )
cost = 40 cost = 20
containertype = "/obj/structure/closet/crate/secure" containertype = "/obj/structure/closet/crate/secure"
containername = "Forensic equipment" containername = "Forensic equipment"
access = access_forensics_lockers access = access_forensics_lockers
@@ -210,7 +210,7 @@
/obj/item/clothing/accessory/badge/holo/detective = 2, /obj/item/clothing/accessory/badge/holo/detective = 2,
/obj/item/clothing/gloves/black = 2 /obj/item/clothing/gloves/black = 2
) )
cost = 20 cost = 10
containertype = "/obj/structure/closet/crate/secure" containertype = "/obj/structure/closet/crate/secure"
containername = "Investigation clothing" containername = "Investigation clothing"
access = access_forensics_lockers access = access_forensics_lockers
@@ -240,7 +240,7 @@
/obj/item/weapon/gun/energy/taser, /obj/item/weapon/gun/energy/taser,
/obj/item/device/flashlight/maglight /obj/item/device/flashlight/maglight
) )
cost = 30 cost = 20
containertype = "/obj/structure/closet/crate/secure" containertype = "/obj/structure/closet/crate/secure"
containername = "Officer equipment" containername = "Officer equipment"
access = access_brig access = access_brig
@@ -251,8 +251,8 @@
/obj/item/clothing/suit/storage/vest/warden, /obj/item/clothing/suit/storage/vest/warden,
/obj/item/clothing/under/rank/warden, /obj/item/clothing/under/rank/warden,
/obj/item/clothing/under/rank/warden/corp, /obj/item/clothing/under/rank/warden/corp,
/obj/item/clothing/suit/armor/vest/warden, /obj/item/clothing/suit/storage/vest/wardencoat,
/obj/item/clothing/suit/armor/vest/warden/alt, /obj/item/clothing/suit/storage/vest/wardencoat/alt,
/obj/item/clothing/head/helmet/warden, /obj/item/clothing/head/helmet/warden,
/obj/item/weapon/cartridge/security, /obj/item/weapon/cartridge/security,
/obj/item/device/radio/headset/headset_sec, /obj/item/device/radio/headset/headset_sec,
@@ -268,7 +268,7 @@
/obj/item/clothing/head/beret/sec/corporate/warden, /obj/item/clothing/head/beret/sec/corporate/warden,
/obj/item/device/flashlight/maglight /obj/item/device/flashlight/maglight
) )
cost = 45 cost = 20
containertype = "/obj/structure/closet/crate/secure" containertype = "/obj/structure/closet/crate/secure"
containername = "Warden equipment" containername = "Warden equipment"
access = access_armory access = access_armory
@@ -279,7 +279,7 @@
/obj/item/clothing/head/helmet/HoS, /obj/item/clothing/head/helmet/HoS,
/obj/item/clothing/suit/storage/vest/hos, /obj/item/clothing/suit/storage/vest/hos,
/obj/item/clothing/under/rank/head_of_security/corp, /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/clothing/head/helmet/HoS/dermal,
/obj/item/weapon/cartridge/hos, /obj/item/weapon/cartridge/hos,
/obj/item/device/radio/headset/heads/hos, /obj/item/device/radio/headset/heads/hos,
@@ -294,7 +294,7 @@
/obj/item/clothing/head/beret/sec/corporate/hos, /obj/item/clothing/head/beret/sec/corporate/hos,
/obj/item/device/flashlight/maglight /obj/item/device/flashlight/maglight
) )
cost = 65 cost = 50
containertype = "/obj/structure/closet/crate/secure" containertype = "/obj/structure/closet/crate/secure"
containername = "Head of security equipment" containername = "Head of security equipment"
access = access_hos access = access_hos
@@ -309,12 +309,11 @@
/obj/item/clothing/under/rank/security2 = 4, /obj/item/clothing/under/rank/security2 = 4,
/obj/item/clothing/under/rank/warden, /obj/item/clothing/under/rank/warden,
/obj/item/clothing/under/rank/head_of_security, /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/head/soft/sec = 4,
/obj/item/clothing/gloves/black = 4, /obj/item/clothing/gloves/black = 4,
/obj/item/weapon/storage/box/holobadge /obj/item/weapon/storage/box/holobadge
) )
cost = 20 cost = 10
containertype = "/obj/structure/closet/crate/secure" containertype = "/obj/structure/closet/crate/secure"
containername = "Security uniform crate" containername = "Security uniform crate"
@@ -335,7 +334,7 @@
/obj/item/clothing/gloves/black = 4, /obj/item/clothing/gloves/black = 4,
/obj/item/weapon/storage/box/holobadge /obj/item/weapon/storage/box/holobadge
) )
cost = 20 cost = 10
containertype = "/obj/structure/closet/crate/secure" containertype = "/obj/structure/closet/crate/secure"
containername = "Navy blue security uniform crate" containername = "Navy blue security uniform crate"
@@ -355,21 +354,22 @@
/obj/item/clothing/gloves/black = 4, /obj/item/clothing/gloves/black = 4,
/obj/item/weapon/storage/box/holobadge /obj/item/weapon/storage/box/holobadge
) )
cost = 20 cost = 10
containertype = "/obj/structure/closet/crate/secure" containertype = "/obj/structure/closet/crate/secure"
containername = "Corporate security uniform crate" containername = "Corporate security uniform crate"
/datum/supply_packs/security/biosuit /datum/supply_packs/security/biosuit
name = "Security biohazard gear" name = "Security biohazard gear"
contains = list( contains = list(
/obj/item/clothing/head/bio_hood/security, /obj/item/clothing/head/bio_hood/security = 3,
/obj/item/clothing/under/rank/security, /obj/item/clothing/under/rank/security = 3,
/obj/item/clothing/suit/bio_suit/security, /obj/item/clothing/suit/bio_suit/security = 3,
/obj/item/clothing/shoes/white, /obj/item/clothing/shoes/white = 3,
/obj/item/clothing/mask/gas, /obj/item/clothing/mask/gas = 3,
/obj/item/weapon/tank/oxygen, /obj/item/weapon/tank/oxygen = 3,
/obj/item/clothing/gloves/latex /obj/item/clothing/gloves/latex,
/obj/item/weapon/storage/box/gloves
) )
cost = 35 cost = 50
containertype = "/obj/structure/closet/crate/secure" containertype = "/obj/structure/closet/crate/secure"
containername = "Security biohazard gear" containername = "Security biohazard gear"

View File

@@ -50,12 +50,19 @@
containertype = /obj/structure/closet/crate containertype = /obj/structure/closet/crate
containername = "Janitorial supplies" containername = "Janitorial supplies"
/datum/supply_packs/supply/boxes /datum/supply_packs/supply/shipping
name = "Empty boxes" name = "Shipping supplies"
contains = list(/obj/item/weapon/storage/box = 10) 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 cost = 10
containertype = "/obj/structure/closet/crate" containertype = "/obj/structure/closet/crate"
containername = "Empty box crate" containername = "Shipping supplies crate"
/datum/supply_packs/supply/bureaucracy /datum/supply_packs/supply/bureaucracy
contains = list( contains = list(
@@ -103,7 +110,7 @@
/obj/item/clothing/glasses/material, /obj/item/clothing/glasses/material,
/obj/item/clothing/glasses/meson /obj/item/clothing/glasses/meson
) )
cost = 15 cost = 10
containertype = "/obj/structure/closet/crate/secure" containertype = "/obj/structure/closet/crate/secure"
containername = "Shaft miner equipment" containername = "Shaft miner equipment"
access = access_mining access = access_mining
@@ -118,7 +125,7 @@
/datum/supply_packs/supply/cargotrain /datum/supply_packs/supply/cargotrain
name = "Cargo Train Tug" name = "Cargo Train Tug"
contains = list(/obj/vehicle/train/cargo/engine) contains = list(/obj/vehicle/train/cargo/engine)
cost = 45 cost = 35
containertype = /obj/structure/largecrate containertype = /obj/structure/largecrate
containername = "Cargo Train Tug Crate" containername = "Cargo Train Tug Crate"

View File

@@ -28,7 +28,6 @@ var/list/all_supply_groups = list("Atmospherics",
var/name = null var/name = null
var/list/contains = list() var/list/contains = list()
var/manifest = "" var/manifest = ""
var/amount = null
var/cost = null var/cost = null
var/containertype = null var/containertype = null
var/containername = null var/containername = null

View File

@@ -16,7 +16,7 @@
/obj/item/clothing/shoes/magboots = 2, /obj/item/clothing/shoes/magboots = 2,
/obj/item/weapon/tank/oxygen = 2, /obj/item/weapon/tank/oxygen = 2,
) )
cost = 45 cost = 40
containertype = "/obj/structure/closet/crate/secure" containertype = "/obj/structure/closet/crate/secure"
containername = "Atmospheric voidsuit crate" containername = "Atmospheric voidsuit crate"
access = access_atmospherics access = access_atmospherics
@@ -58,7 +58,7 @@
/obj/item/clothing/shoes/magboots = 2, /obj/item/clothing/shoes/magboots = 2,
/obj/item/weapon/tank/oxygen = 2 /obj/item/weapon/tank/oxygen = 2
) )
cost = 55 cost = 40
containertype = "/obj/structure/closet/crate/secure" containertype = "/obj/structure/closet/crate/secure"
containername = "Security voidsuit crate" containername = "Security voidsuit crate"
@@ -70,7 +70,7 @@
/obj/item/clothing/mask/breath = 2, /obj/item/clothing/mask/breath = 2,
/obj/item/weapon/tank/oxygen = 2 /obj/item/weapon/tank/oxygen = 2
) )
cost = 35 cost = 40
containertype = "/obj/structure/closet/crate/secure" containertype = "/obj/structure/closet/crate/secure"
containername = "Mining voidsuit crate" containername = "Mining voidsuit crate"
access = access_mining access = access_mining

View File

@@ -2,8 +2,9 @@
* Ammunition * * Ammunition *
*************/ *************/
/datum/uplink_item/item/ammo /datum/uplink_item/item/ammo
item_cost = 2 item_cost = 20
category = /datum/uplink_category/ammunition category = /datum/uplink_category/ammunition
blacklisted = 1
/datum/uplink_item/item/ammo/a357 /datum/uplink_item/item/ammo/a357
name = ".357 Speedloader" name = ".357 Speedloader"
@@ -41,7 +42,7 @@
/datum/uplink_item/item/ammo/a556/ap /datum/uplink_item/item/ammo/a556/ap
name = "10rnd Rifle Magazine (5.56mm AP)" name = "10rnd Rifle Magazine (5.56mm AP)"
path = /obj/item/ammo_magazine/a556/ap path = /obj/item/ammo_magazine/a556/ap
/*
/datum/uplink_item/item/ammo/a556m /datum/uplink_item/item/ammo/a556m
name = "20rnd Rifle Magazine (5.56mm)" name = "20rnd Rifle Magazine (5.56mm)"
path = /obj/item/ammo_magazine/a556m path = /obj/item/ammo_magazine/a556m
@@ -51,7 +52,7 @@
name = "20rnd Rifle Magazine (5.56mm AP)" name = "20rnd Rifle Magazine (5.56mm AP)"
path = /obj/item/ammo_magazine/a556m/ap path = /obj/item/ammo_magazine/a556m/ap
item_cost = 4 item_cost = 4
*/
/datum/uplink_item/item/ammo/c762 /datum/uplink_item/item/ammo/c762
name = "20rnd Rifle Magazine (7.62mm)" name = "20rnd Rifle Magazine (7.62mm)"
path = /obj/item/ammo_magazine/c762 path = /obj/item/ammo_magazine/c762
@@ -63,7 +64,7 @@
/datum/uplink_item/item/ammo/s762 /datum/uplink_item/item/ammo/s762
name = "10rnd Rifle Magazine (7.62mm)" name = "10rnd Rifle Magazine (7.62mm)"
path = /obj/item/ammo_magazine/s762 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 /datum/uplink_item/item/ammo/s762/ap
name = "10rnd Rifle Magazine (7.62mm AP)" name = "10rnd Rifle Magazine (7.62mm AP)"
@@ -88,7 +89,7 @@
/datum/uplink_item/item/ammo/g12/beanbag /datum/uplink_item/item/ammo/g12/beanbag
name = "12g Auto-Shotgun Magazine (Beanbag)" name = "12g Auto-Shotgun Magazine (Beanbag)"
path = /obj/item/ammo_magazine/g12/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 /datum/uplink_item/item/ammo/g12/pellet
name = "12g Auto-Shotgun Magazine (Pellet)" name = "12g Auto-Shotgun Magazine (Pellet)"

View File

@@ -3,6 +3,7 @@
*****************/ *****************/
/datum/uplink_item/abstract/announcements /datum/uplink_item/abstract/announcements
category = /datum/uplink_category/services category = /datum/uplink_category/services
blacklisted = 1
/datum/uplink_item/abstract/announcements/buy(var/obj/item/device/uplink/U, var/mob/user) /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) log_and_message_admins("has triggered a falsified [src]", user)
/datum/uplink_item/abstract/announcements/fake_centcom /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() /datum/uplink_item/abstract/announcements/fake_centcom/New()
..() ..()
@@ -33,7 +34,7 @@
/datum/uplink_item/abstract/announcements/fake_crew_arrival /datum/uplink_item/abstract/announcements/fake_crew_arrival
name = "Crew Arrival Announcement/Records" 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!" 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) /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) if(!user)
@@ -91,7 +92,7 @@
/datum/uplink_item/abstract/announcements/fake_ion_storm /datum/uplink_item/abstract/announcements/fake_ion_storm
name = "Ion Storm Announcement" name = "Ion Storm Announcement"
desc = "Interferes with the station's ion sensors. Triggers immediately upon investment." 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) /datum/uplink_item/abstract/announcements/fake_ion_storm/get_goods(var/obj/item/device/uplink/U, var/loc)
ion_storm_announcement() ion_storm_announcement()
@@ -100,7 +101,7 @@
/datum/uplink_item/abstract/announcements/fake_radiation /datum/uplink_item/abstract/announcements/fake_radiation
name = "Radiation Storm Announcement" name = "Radiation Storm Announcement"
desc = "Interferes with the station's radiation sensors. Triggers immediately upon investment." 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) /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) var/datum/event_meta/EM = new(EVENT_LEVEL_MUNDANE, "Fake Radiation Storm", add_to_queue = 0)

View File

@@ -6,10 +6,10 @@
/datum/uplink_item/item/armor/combat /datum/uplink_item/item/armor/combat
name = "Combat Armor Set" name = "Combat Armor Set"
item_cost = 5 item_cost = 60
path = /obj/item/weapon/storage/box/syndie_kit/combat_armor path = /obj/item/weapon/storage/box/syndie_kit/combat_armor
/datum/uplink_item/item/armor/heavy_vest /datum/uplink_item/item/armor/heavy_vest
name = "Heavy Armor Vest" name = "Heavy Armor Vest"
item_cost = 4 item_cost = 40
path = /obj/item/clothing/suit/storage/vest/heavy/merc path = /obj/item/clothing/suit/storage/vest/heavy/merc

View File

@@ -19,6 +19,7 @@
/datum/uplink_item/item/badassery/random_one /datum/uplink_item/item/badassery/random_one
name = "Random Item" name = "Random Item"
desc = "Buys you one 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) /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) var/datum/uplink_item/item = default_uplink_selection.get_random_item(U.uses)
@@ -53,17 +54,32 @@
****************/ ****************/
/datum/uplink_item/item/badassery/surplus /datum/uplink_item/item/badassery/surplus
name = "Surplus Crate" name = "Surplus Crate"
item_cost = 40 item_cost = DEFAULT_TELECRYSTAL_AMOUNT
var/item_worth = 60 var/item_worth = 240
var/icon 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() /datum/uplink_item/item/badassery/surplus/New()
..() ..()
desc = "A crate containing [item_worth] telecrystal\s worth of surplus leftovers." 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) /datum/uplink_item/item/badassery/surplus/get_goods(var/obj/item/device/uplink/U, var/loc)
var/obj/structure/largecrate/C = new(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) for(var/datum/uplink_item/I in random_items)
I.purchase_log(U) I.purchase_log(U)
I.get_goods(U, C) I.get_goods(U, C)

View File

@@ -5,31 +5,65 @@
category = /datum/uplink_category/grenades category = /datum/uplink_category/grenades
/datum/uplink_item/item/grenades/anti_photon /datum/uplink_item/item/grenades/anti_photon
name = "5xPhoton Disruption Grenades" name = "7xPhoton Disruption Grenades"
item_cost = 2 item_cost = 10
path = /obj/item/weapon/storage/box/anti_photons path = /obj/item/weapon/storage/box/anti_photons
/datum/uplink_item/item/grenades/emp /datum/uplink_item/item/grenades/anti_photon_singular
name = "5xEMP Grenades" name = "1xPhoton Disruption Grenade"
item_cost = 3
path = /obj/item/weapon/storage/box/emps
/datum/uplink_item/item/grenades/smoke
name = "7xSmoke Grenades"
item_cost = 2 item_cost = 2
path = /obj/item/weapon/storage/box/smokes path = /obj/item/weapon/grenade/anti_photon
/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
/datum/uplink_item/item/grenades/metalfoam /datum/uplink_item/item/grenades/metalfoam
name = "7xMetal Foam Grenades" name = "7xMetal Foam Grenades"
item_cost = 3 item_cost = 10
path = /obj/item/weapon/storage/box/metalfoam 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

View File

@@ -3,38 +3,54 @@
*******************/ *******************/
/datum/uplink_item/item/hardsuit_modules /datum/uplink_item/item/hardsuit_modules
category = /datum/uplink_category/hardsuit_modules category = /datum/uplink_category/hardsuit_modules
blacklisted = 1
/datum/uplink_item/item/hardsuit_modules/thermal /datum/uplink_item/item/hardsuit_modules/thermal
name = "Thermal Scanner" name = "Thermal Scanner"
item_cost = 2 item_cost = 15
path = /obj/item/rig_module/vision/thermal path = /obj/item/rig_module/vision/thermal
/datum/uplink_item/item/hardsuit_modules/energy_net /datum/uplink_item/item/hardsuit_modules/energy_net
name = "Net Projector" name = "Net Projector"
item_cost = 3 item_cost = 20
path = /obj/item/rig_module/fabricator/energy_net 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" name = "Electrowarfare Suite and Voice Synthesiser"
item_cost = 4 item_cost = 30
path = /obj/item/weapon/storage/box/syndie_kit/ewar_voice path = /obj/item/weapon/storage/box/syndie_kit/ewar_voice
/datum/uplink_item/item/hardsuit_modules/maneuvering_jets /datum/uplink_item/item/hardsuit_modules/maneuvering_jets
name = "Maneuvering Jets" name = "Maneuvering Jets"
item_cost = 4 item_cost = 30
path = /obj/item/rig_module/maneuvering_jets path = /obj/item/rig_module/maneuvering_jets
/datum/uplink_item/item/hardsuit_modules/egun /datum/uplink_item/item/hardsuit_modules/grenade_launcher
name = "Mounted Energy Gun" name = "Grenade Launcher"
item_cost = 6 item_cost = 40
path = /obj/item/rig_module/mounted/egun 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 /datum/uplink_item/item/hardsuit_modules/power_sink
name = "Power Sink" name = "Power Sink"
item_cost = 6 item_cost = 45
path = /obj/item/rig_module/power_sink 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 /datum/uplink_item/item/hardsuit_modules/laser_canon
name = "Mounted Laser Cannon" name = "Mounted Laser Cannon"
item_cost = 8 item_cost = 80
path = /obj/item/rig_module/mounted path = /obj/item/rig_module/mounted

View File

@@ -6,20 +6,20 @@
/datum/uplink_item/item/implants/imp_freedom /datum/uplink_item/item/implants/imp_freedom
name = "Freedom Implant" name = "Freedom Implant"
item_cost = 3 item_cost = 30
path = /obj/item/weapon/storage/box/syndie_kit/imp_freedom path = /obj/item/weapon/storage/box/syndie_kit/imp_freedom
/datum/uplink_item/item/implants/imp_compress /datum/uplink_item/item/implants/imp_compress
name = "Compressed Matter Implant" name = "Compressed Matter Implant"
item_cost = 4 item_cost = 30
path = /obj/item/weapon/storage/box/syndie_kit/imp_compress path = /obj/item/weapon/storage/box/syndie_kit/imp_compress
/datum/uplink_item/item/implants/imp_explosive /datum/uplink_item/item/implants/imp_explosive
name = "Explosive Implant (DANGER!)" name = "Explosive Implant (DANGER!)"
item_cost = 6 item_cost = 60
path = /obj/item/weapon/storage/box/syndie_kit/imp_explosive path = /obj/item/weapon/storage/box/syndie_kit/imp_explosive
/datum/uplink_item/item/implants/imp_uplink /datum/uplink_item/item/implants/imp_uplink
name = "Uplink Implant" //Original name: "Uplink Implant (Contains 5 Telecrystals)" 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 path = /obj/item/weapon/storage/box/syndie_kit/imp_uplink

View File

@@ -4,33 +4,37 @@
/datum/uplink_item/item/medical /datum/uplink_item/item/medical
category = /datum/uplink_category/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 /datum/uplink_item/item/medical/sinpockets
name = "Box of Sin-Pockets" name = "Box of Sin-Pockets"
item_cost = 1 item_cost = 5
path = /obj/item/weapon/storage/box/sinpockets 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 /datum/uplink_item/item/medical/ambrosiaseeds
name = "Box of 7x ambrosia seed packets" name = "Box of 7x ambrosia seed packets"
item_cost = 1 item_cost = 5
path = /obj/item/weapon/storage/box/ambrosia path = /obj/item/weapon/storage/box/ambrosia
/datum/uplink_item/item/medical/ambrosiadeusseeds /datum/uplink_item/item/medical/ambrosiadeusseeds
name = "Box of 7x ambrosia deus seed packets" name = "Box of 7x ambrosia deus seed packets"
item_cost = 2 item_cost = 10
path = /obj/item/weapon/storage/box/ambrosiadeus 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

View File

@@ -6,40 +6,35 @@
/datum/uplink_item/item/stealth_items/id /datum/uplink_item/item/stealth_items/id
name = "Agent ID card" name = "Agent ID card"
item_cost = 2 item_cost = 10
path = /obj/item/weapon/card/id/syndicate path = /obj/item/weapon/card/id/syndicate
/datum/uplink_item/item/stealth_items/syndigaloshes /datum/uplink_item/item/stealth_items/syndigaloshes
name = "No-Slip Shoes" name = "No-Slip Shoes"
item_cost = 2 item_cost = 10
path = /obj/item/clothing/shoes/syndigaloshes path = /obj/item/clothing/shoes/syndigaloshes
/datum/uplink_item/item/stealth_items/spy /datum/uplink_item/item/stealth_items/spy
name = "Bug Kit" name = "Bug Kit"
item_cost = 2 item_cost = 10
path = /obj/item/weapon/storage/box/syndie_kit/spy path = /obj/item/weapon/storage/box/syndie_kit/spy
/datum/uplink_item/item/stealth_items/chameleon_kit /datum/uplink_item/item/stealth_items/chameleon_kit
name = "Chameleon Kit" name = "Chameleon Kit"
item_cost = 3 item_cost = 15
path = /obj/item/weapon/storage/box/syndie_kit/chameleon path = /obj/item/weapon/storage/box/syndie_kit/chameleon
/datum/uplink_item/item/stealth_items/chameleon_projector /datum/uplink_item/item/stealth_items/chameleon_projector
name = "Chameleon-Projector" name = "Chameleon-Projector"
item_cost = 4 item_cost = 30
path = /obj/item/device/chameleon
/datum/uplink_item/item/stealth_items/chameleon_projector
name = "Chameleon-Projector"
item_cost = 4
path = /obj/item/device/chameleon path = /obj/item/device/chameleon
/datum/uplink_item/item/stealth_items/voice /datum/uplink_item/item/stealth_items/voice
name = "Voice Changer" name = "Voice Changer"
item_cost = 4 item_cost = 30
path = /obj/item/clothing/mask/gas/voice path = /obj/item/clothing/mask/gas/voice
/datum/uplink_item/item/stealth_items/camera_floppy /datum/uplink_item/item/stealth_items/camera_floppy
name = "Camera Network Access - Floppy" name = "Camera Network Access - Floppy"
item_cost = 6 item_cost = 30
path = /obj/item/weapon/disk/file/cameras/syndicate path = /obj/item/weapon/disk/file/cameras/syndicate

View File

@@ -6,30 +6,30 @@
/datum/uplink_item/item/stealthy_weapons/soap /datum/uplink_item/item/stealthy_weapons/soap
name = "Subversive Soap" name = "Subversive Soap"
item_cost = 1 item_cost = 5
path = /obj/item/weapon/soap/syndie path = /obj/item/weapon/soap/syndie
/datum/uplink_item/item/stealthy_weapons/concealed_cane /datum/uplink_item/item/stealthy_weapons/concealed_cane
name = "Concealed Cane Sword" name = "Concealed Cane Sword"
item_cost = 1 item_cost = 10
path = /obj/item/weapon/cane/concealed path = /obj/item/weapon/cane/concealed
/datum/uplink_item/item/stealthy_weapons/detomatix /datum/uplink_item/item/stealthy_weapons/detomatix
name = "Detomatix PDA Cartridge" name = "Detomatix PDA Cartridge"
item_cost = 3 item_cost = 30
path = /obj/item/weapon/cartridge/syndicate path = /obj/item/weapon/cartridge/syndicate
/datum/uplink_item/item/stealthy_weapons/parapen /datum/uplink_item/item/stealthy_weapons/parapen
name = "Paralysis Pen" name = "Paralysis Pen"
item_cost = 3 item_cost = 40
path = /obj/item/weapon/pen/reagent/paralysis path = /obj/item/weapon/pen/reagent/paralysis
/datum/uplink_item/item/stealthy_weapons/cigarette_kit /datum/uplink_item/item/stealthy_weapons/cigarette_kit
name = "Cigarette Kit" name = "Cigarette Kit"
item_cost = 3 item_cost = 15
path = /obj/item/weapon/storage/box/syndie_kit/cigarette path = /obj/item/weapon/storage/box/syndie_kit/cigarette
/datum/uplink_item/item/stealthy_weapons/random_toxin /datum/uplink_item/item/stealthy_weapons/random_toxin
name = "Random Toxin - Beaker" name = "Random Toxin - Beaker"
item_cost = 3 item_cost = 15
path = /obj/item/weapon/storage/box/syndie_kit/toxin path = /obj/item/weapon/storage/box/syndie_kit/toxin

View 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)

View File

@@ -4,82 +4,82 @@
/datum/uplink_item/item/tools /datum/uplink_item/item/tools
category = /datum/uplink_category/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 /datum/uplink_item/item/tools/toolbox
name = "Fully Loaded Toolbox" name = "Fully Loaded Toolbox"
item_cost = 1 item_cost = 10
path = /obj/item/weapon/storage/toolbox/syndicate path = /obj/item/weapon/storage/toolbox/syndicate
/datum/uplink_item/item/tools/plastique /datum/uplink_item/item/tools/plastique
name = "C-4 (Destroys walls)" name = "C-4 (Destroys walls)"
item_cost = 2 item_cost = 20
path = /obj/item/weapon/plastique path = /obj/item/weapon/plastique
/datum/uplink_item/item/tools/encryptionkey_radio /datum/uplink_item/item/tools/encryptionkey_radio
name = "Encrypted Radio Channel Key" name = "Encrypted Radio Channel Key"
item_cost = 2 item_cost = 20
path = /obj/item/device/encryptionkey/syndicate 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 /datum/uplink_item/item/tools/encryptionkey_binary
name = "Binary Translator Key" name = "Binary Translator Key"
item_cost = 3 item_cost = 20
path = /obj/item/device/encryptionkey/binary path = /obj/item/device/encryptionkey/binary
/datum/uplink_item/item/tools/emag /datum/uplink_item/item/tools/emag
name = "Cryptographic Sequencer" name = "Cryptographic Sequencer"
item_cost = 3 item_cost = 30
path = /obj/item/weapon/card/emag path = /obj/item/weapon/card/emag
/datum/uplink_item/item/tools/clerical /datum/uplink_item/item/tools/clerical
name = "Morphic Clerical Kit" name = "Morphic Clerical Kit"
item_cost = 3 item_cost = 15
path = /obj/item/weapon/storage/box/syndie_kit/clerical 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 /datum/uplink_item/item/tools/space_suit
name = "Space Suit" name = "Space Suit"
item_cost = 3 item_cost = 15
path = /obj/item/weapon/storage/box/syndie_kit/space path = /obj/item/weapon/storage/box/syndie_kit/space
/datum/uplink_item/item/tools/thermal /datum/uplink_item/item/tools/thermal
name = "Thermal Imaging Glasses" name = "Thermal Imaging Glasses"
item_cost = 3 item_cost = 30
path = /obj/item/clothing/glasses/thermal/syndi path = /obj/item/clothing/glasses/thermal/syndi
/datum/uplink_item/item/tools/powersink /datum/uplink_item/item/tools/powersink
name = "Powersink (DANGER!)" name = "Powersink (DANGER!)"
item_cost = 5 item_cost = 50
path = /obj/item/device/powersink path = /obj/item/device/powersink
/datum/uplink_item/item/tools/ai_module /datum/uplink_item/item/tools/ai_module
name = "Hacked AI Upload Module" name = "Hacked AI Upload Module"
item_cost = 7 item_cost = 60
path = /obj/item/weapon/aiModule/syndicate path = /obj/item/weapon/aiModule/syndicate
/datum/uplink_item/item/tools/supply_beacon /datum/uplink_item/item/tools/supply_beacon
name = "Hacked Supply Beacon (DANGER!)" name = "Hacked Supply Beacon (DANGER!)"
item_cost = 7 item_cost = 60
path = /obj/item/supply_beacon path = /obj/item/supply_beacon
/datum/uplink_item/item/tools/teleporter /datum/uplink_item/item/tools/teleporter
name = "Teleporter Circuit Board" name = "Teleporter Circuit Board"
item_cost = 20 item_cost = DEFAULT_TELECRYSTAL_AMOUNT * 1.5
path = /obj/item/weapon/circuitboard/teleporter path = /obj/item/weapon/circuitboard/teleporter
blacklisted = 1
/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."

View File

@@ -46,4 +46,7 @@ datum/uplink_category/ammunition
name = "Devices and Tools" name = "Devices and Tools"
/datum/uplink_category/visible_weapons /datum/uplink_category/visible_weapons
name = "Highly Visible and Dangerous Weapons" name = "Highly Visible and Dangerous Weapons"
/datum/uplink_category/telecrystals
name = "Telecrystals"

View File

@@ -31,6 +31,7 @@ var/datum/uplink/uplink = new()
var/item_cost = 0 var/item_cost = 0
var/datum/uplink_category/category // Item category 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/list/datum/antagonist/antag_roles // Antag roles this item is displayed to. If empty, display to all.
var/blacklisted = 0
/datum/uplink_item/item /datum/uplink_item/item
var/path = null var/path = null
@@ -172,3 +173,15 @@ datum/uplink_item/dd_SortValue()
remaining_TC -= I.cost(remaining_TC, U) remaining_TC -= I.cost(remaining_TC, U)
return bought_items 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

View File

@@ -4,39 +4,49 @@
/datum/uplink_item/item/visible_weapons /datum/uplink_item/item/visible_weapons
category = /datum/uplink_category/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 /datum/uplink_item/item/visible_weapons/energy_sword
name = "Energy Sword" name = "Energy Sword"
item_cost = 4 item_cost = 40
path = /obj/item/weapon/melee/energy/sword path = /obj/item/weapon/melee/energy/sword
/datum/uplink_item/item/visible_weapons/dartgun /datum/uplink_item/item/visible_weapons/dartgun
name = "Dart Gun" name = "Dart Gun"
item_cost = 5 item_cost = 30
path = /obj/item/weapon/gun/projectile/dartgun path = /obj/item/weapon/gun/projectile/dartgun
/datum/uplink_item/item/visible_weapons/crossbow /datum/uplink_item/item/visible_weapons/crossbow
name = "Energy Crossbow" name = "Energy Crossbow"
item_cost = 5 item_cost = 40
path = /obj/item/weapon/gun/energy/crossbow path = /obj/item/weapon/gun/energy/crossbow
/datum/uplink_item/item/visible_weapons/silenced_45 /datum/uplink_item/item/visible_weapons/silenced_45
name = "Silenced .45" name = "Silenced .45"
item_cost = 5 item_cost = 40
path = /obj/item/weapon/gun/projectile/silenced path = /obj/item/weapon/gun/projectile/silenced
/datum/uplink_item/item/visible_weapons/riggedlaser /datum/uplink_item/item/visible_weapons/riggedlaser
name = "Exosuit Rigged Laser" name = "Exosuit Rigged Laser"
item_cost = 6 item_cost = 60
path = /obj/item/mecha_parts/mecha_equipment/weapon/energy/riggedlaser path = /obj/item/mecha_parts/mecha_equipment/weapon/energy/riggedlaser
/datum/uplink_item/item/visible_weapons/revolver /datum/uplink_item/item/visible_weapons/revolver
name = "Revolver" name = "Revolver"
item_cost = 6 item_cost = 70
path = /obj/item/weapon/gun/projectile/revolver path = /obj/item/weapon/gun/projectile/revolver
/datum/uplink_item/item/visible_weapons/Derringer /datum/uplink_item/item/visible_weapons/Derringer
name = ".357 Derringer Pistol" name = ".357 Derringer Pistol"
item_cost = 5 item_cost = 40
path = /obj/item/weapon/gun/projectile/derringer path = /obj/item/weapon/gun/projectile/derringer
/datum/uplink_item/item/visible_weapons/heavysniper /datum/uplink_item/item/visible_weapons/heavysniper
@@ -46,61 +56,51 @@
/datum/uplink_item/item/visible_weapons/tommygun /datum/uplink_item/item/visible_weapons/tommygun
name = "Tommygun (.45)" // We're keeping this because it's CLASSY. -Spades 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 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. //These are for traitors (or other antags, perhaps) to have the option of purchasing some merc gear.
/datum/uplink_item/item/visible_weapons/submachinegun /datum/uplink_item/item/visible_weapons/submachinegun
name = "Submachine Gun (10mm)" name = "Submachine Gun (10mm)"
item_cost = 6 item_cost = 60
path = /obj/item/weapon/gun/projectile/automatic/c20r path = /obj/item/weapon/gun/projectile/automatic/c20r
/datum/uplink_item/item/visible_weapons/assaultrifle /datum/uplink_item/item/visible_weapons/assaultrifle
name = "Assault Rifle (7.62mm)" name = "Assault Rifle (7.62mm)"
item_cost = 7 item_cost = 75
path = /obj/item/weapon/gun/projectile/automatic/sts35 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)" name = "Assault Rifle (5.56mm)"
item_cost = 7 item_cost = 7
path = /obj/item/weapon/gun/projectile/automatic/carbine path = /obj/item/weapon/gun/projectile/automatic/carbine
*/
/datum/uplink_item/item/visible_weapons/combatshotgun /datum/uplink_item/item/visible_weapons/combatshotgun
name = "Combat Shotgun" name = "Combat Shotgun"
item_cost = 7 item_cost = 75
path = /obj/item/weapon/gun/projectile/shotgun/pump/combat path = /obj/item/weapon/gun/projectile/shotgun/pump/combat
/datum/uplink_item/item/visible_weapons/egun /datum/uplink_item/item/visible_weapons/egun
name = "Energy Gun" name = "Energy Gun"
item_cost = 5 item_cost = 60
path = /obj/item/weapon/gun/energy/gun path = /obj/item/weapon/gun/energy/gun
/datum/uplink_item/item/visible_weapons/lasercannon /datum/uplink_item/item/visible_weapons/lasercannon
name = "Laser Cannon" name = "Laser Cannon"
item_cost = 6 item_cost = 60
path = /obj/item/weapon/gun/energy/lasercannon path = /obj/item/weapon/gun/energy/lasercannon
/datum/uplink_item/item/visible_weapons/lasercarbine /datum/uplink_item/item/visible_weapons/lasercarbine
name = "Laser Carbine" name = "Laser Carbine"
item_cost = 7 item_cost = 75
path = /obj/item/weapon/gun/energy/laser path = /obj/item/weapon/gun/energy/laser
/datum/uplink_item/item/visible_weapons/ionrifle /datum/uplink_item/item/visible_weapons/ionrifle
name = "Ion Rifle" name = "Ion Rifle"
item_cost = 5 item_cost = 40
path = /obj/item/weapon/gun/energy/ionrifle path = /obj/item/weapon/gun/energy/ionrifle
/datum/uplink_item/item/visible_weapons/xray /datum/uplink_item/item/visible_weapons/xray
name = "Xray Gun" name = "Xray Gun"
item_cost = 7 item_cost = 85
path = /obj/item/weapon/gun/energy/xray 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

View File

@@ -190,9 +190,8 @@ var/global/list/PDA_Manifest = list()
/obj/item/weapon/beach_ball /obj/item/weapon/beach_ball
icon = 'icons/misc/beach.dmi' icon = 'icons/misc/beach.dmi'
icon_state = "ball" icon_state = "beachball"
name = "beach ball" name = "beach ball"
item_state = "beachball"
density = 0 density = 0
anchored = 0 anchored = 0
w_class = 4 w_class = 4

View File

@@ -79,7 +79,10 @@
desc = "A cane used by a true gentlemen. Or a clown." desc = "A cane used by a true gentlemen. Or a clown."
icon = 'icons/obj/weapons.dmi' icon = 'icons/obj/weapons.dmi'
icon_state = "cane" 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 flags = CONDUCT
force = 5.0 force = 5.0
throwforce = 7.0 throwforce = 7.0
@@ -135,7 +138,6 @@
desc = "A cane used by the blind." desc = "A cane used by the blind."
icon = 'icons/obj/weapons.dmi' icon = 'icons/obj/weapons.dmi'
icon_state = "whitecane" icon_state = "whitecane"
item_state = "whitecane"
/obj/item/weapon/disk /obj/item/weapon/disk
name = "disk" name = "disk"
@@ -245,6 +247,10 @@
desc = "Apparently a staff used by the wizard." desc = "Apparently a staff used by the wizard."
icon = 'icons/obj/wizard.dmi' icon = 'icons/obj/wizard.dmi'
icon_state = "staff" 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 force = 3.0
throwforce = 5.0 throwforce = 5.0
throw_speed = 1 throw_speed = 1
@@ -263,14 +269,13 @@
desc = "An ebony can with an ivory tip." desc = "An ebony can with an ivory tip."
icon = 'icons/obj/weapons.dmi' icon = 'icons/obj/weapons.dmi'
icon_state = "cane" icon_state = "cane"
item_state = "stick"
/obj/item/weapon/staff/stick /obj/item/weapon/staff/stick
name = "stick" name = "stick"
desc = "A great tool to drag someone else's drinks across the bar." desc = "A great tool to drag someone else's drinks across the bar."
icon = 'icons/obj/weapons.dmi' icon = 'icons/obj/weapons.dmi'
icon_state = "stick" icon_state = "stick"
item_state = "stick" item_state = "cane"
force = 3.0 force = 3.0
throwforce = 5.0 throwforce = 5.0
throw_speed = 1 throw_speed = 1
@@ -380,7 +385,6 @@
name = "rapid part exchange device" name = "rapid part exchange device"
desc = "Special mechanical module made to store, sort, and apply standard machine parts." desc = "Special mechanical module made to store, sort, and apply standard machine parts."
icon_state = "RPED" icon_state = "RPED"
item_state = "RPED"
w_class = 5 w_class = 5
can_hold = list(/obj/item/weapon/stock_parts) can_hold = list(/obj/item/weapon/stock_parts)
storage_slots = 50 storage_slots = 50

View File

@@ -2,6 +2,9 @@
Use the regular_hud_updates() proc before process_med_hud(mob) or process_sec_hud(mob) so Use the regular_hud_updates() proc before process_med_hud(mob) or process_sec_hud(mob) so
the HUD updates properly! */ 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. //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) proc/process_med_hud(var/mob/M, var/local_scanner, var/mob/Alt)
if(!can_process_hud(M)) 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. //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. mob/proc/handle_regular_hud_updates() //Used in the life.dm of mobs that can use HUDs.
if(client) if(client)
for(var/image/hud in client.images) for(var/image/hud_overlay/hud in client.images)
if(copytext(hud.icon_state,1,4) == "hud") client.images -= hud
client.images -= hud
med_hud_users -= src med_hud_users -= src
sec_hud_users -= src sec_hud_users -= src

View File

@@ -99,19 +99,26 @@
// Prune restricted status. Broke it up for readability. // Prune restricted status. Broke it up for readability.
// Note that this is done before jobs are handed out. // 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)) 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) 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) 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)) 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)) else if(player_is_antag(player))
log_debug("[key_name(player)] is not eligible to become a [role_text]: They are already an antagonist!") candidates -= player
else 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.")
candidates += player
return candidates return candidates

View 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>"

View 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])"

View File

@@ -351,6 +351,14 @@ area/space/atmosalert()
name = "\improper Administration Shuttle" name = "\improper Administration Shuttle"
icon_state = "shuttlered2" 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 /area/shuttle/thunderdome
name = "honk" name = "honk"
@@ -838,7 +846,7 @@ area/space/atmosalert()
/area/maintenance/engineering /area/maintenance/engineering
name = "Engineering Maintenance" name = "Engineering Maintenance"
icon_state = "maint_engineering" icon_state = "maint_engineering"
/area/maintenance/engineering/pumpstation /area/maintenance/engineering/pumpstation
name = "Engineering Pump Station" name = "Engineering Pump Station"
icon_state = "maint_pumpstation" icon_state = "maint_pumpstation"
@@ -2763,10 +2771,10 @@ var/list/the_station_areas = list (
/area/construction, /area/construction,
/area/ai_monitored/storage/eva, /area/ai_monitored/storage/eva,
/area/ai_monitored/storage/secure, /area/ai_monitored/storage/secure,
/area/ai_monitored/storage/emergency, /area/ai_monitored/storage/emergency,
/area/ai_upload, /area/ai_upload,
/area/ai_upload_foyer, /area/ai_upload_foyer,
/area/ai /area/ai
) )

View File

@@ -230,6 +230,11 @@ its easier to just keep the beam vertical.
/atom/proc/melt() /atom/proc/melt()
return 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) /atom/proc/hitby(atom/movable/AM as mob|obj)
if (density) if (density)
AM.throwing = 0 AM.throwing = 0

View File

@@ -79,6 +79,16 @@ var/global/list/possible_changeling_IDs = list("Alpha","Beta","Gamma","Delta","E
if(lesser_form && !P.allowduringlesserform) continue if(lesser_form && !P.allowduringlesserform) continue
if(!(P in src.verbs)) if(!(P in src.verbs))
src.verbs += P.verbpath 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) for(var/language in languages)
mind.changeling.absorbed_languages |= language 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) for(var/datum/power/changeling/P in mind.changeling.purchased_powers)
if(P.isVerb) if(P.isVerb)
verbs -= P.verbpath 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 //Helper proc. Does all the checks and stuff for us to avoid copypasta

View File

@@ -12,6 +12,8 @@ var/list/datum/power/changeling/powerinstances = list()
var/enhancedtext = "" var/enhancedtext = ""
var/isVerb = 1 // Is it an active power, or passive? var/isVerb = 1 // Is it an active power, or passive?
var/verbpath // Path to a verb that contains the effects. 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 /datum/power/changeling
var/allowduringlesserform = 0 var/allowduringlesserform = 0
@@ -340,6 +342,17 @@ var/list/datum/power/changeling/powerinstances = list()
if(Thepower.genomecost > 0) if(Thepower.genomecost > 0)
purchased_powers_history.Add("[Pname] ([Thepower.genomecost] points)") 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) if(!Thepower.isVerb && Thepower.verbpath)
call(M.current, Thepower.verbpath)() call(M.current, Thepower.verbpath)()
else if(remake_verbs) else if(remake_verbs)

View File

@@ -1,6 +1,7 @@
/datum/power/changeling/absorb_dna /datum/power/changeling/absorb_dna
name = "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." 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 genomecost = 0
verbpath = /mob/proc/changeling_absorb_dna verbpath = /mob/proc/changeling_absorb_dna

View File

@@ -3,6 +3,7 @@
desc = "We reform one of our arms into a deadly blade." desc = "We reform one of our arms into a deadly blade."
helptext = "We may retract our armblade by dropping it. It can deflect projectiles." helptext = "We may retract our armblade by dropping it. It can deflect projectiles."
enhancedtext = "The blade will have armor peneratration." enhancedtext = "The blade will have armor peneratration."
ability_icon_state = "ling_armblade"
genomecost = 2 genomecost = 2
verbpath = /mob/proc/changeling_arm_blade 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." 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 = 'icons/obj/weapons.dmi'
icon_state = "arm_blade" icon_state = "arm_blade"
item_state = "arm_blade"
w_class = 5.0 w_class = 5.0
force = 40 force = 40
sharp = 1 sharp = 1
edge = 1 edge = 1
pry = 1
anchored = 1 anchored = 1
throwforce = 0 //Just to be on the safe side throwforce = 0 //Just to be on the safe side
throw_range = 0 throw_range = 0

View File

@@ -2,13 +2,13 @@
name = "Organic Space Suit" name = "Organic Space Suit"
desc = "We grow an organic suit to protect ourselves from space exposure." desc = "We grow an organic suit to protect ourselves from space exposure."
helptext = "To remove the suit, use the ability again." helptext = "To remove the suit, use the ability again."
ability_icon_state = "ling_space_suit"
genomecost = 1 genomecost = 1
verbpath = /mob/proc/changeling_spacesuit verbpath = /mob/proc/changeling_spacesuit
/mob/proc/changeling_spacesuit() /mob/proc/changeling_spacesuit()
set category = "Changeling" set category = "Changeling"
set name = "Organic Space Suit (20)" set name = "Organic Space Suit (20)"
if(changeling_generic_armor(/obj/item/clothing/suit/space/changeling,/obj/item/clothing/head/helmet/space/changeling)) if(changeling_generic_armor(/obj/item/clothing/suit/space/changeling,/obj/item/clothing/head/helmet/space/changeling))
return 1 return 1
return 0 return 0
@@ -17,6 +17,7 @@
name = "Chitinous Spacearmor" name = "Chitinous Spacearmor"
desc = "We turn our skin into tough chitin to protect us from damage and space exposure." 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." helptext = "To remove the armor, use the ability again."
ability_icon_state = "ling_armor"
genomecost = 3 genomecost = 3
verbpath = /mob/proc/changeling_spacearmor verbpath = /mob/proc/changeling_spacearmor
@@ -70,7 +71,6 @@
name = "chitinous mass" name = "chitinous mass"
desc = "A tough, hard covering of black chitin." desc = "A tough, hard covering of black chitin."
icon_state = "lingarmor" icon_state = "lingarmor"
item_state = "lingarmor"
body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|FEET|ARMS|HANDS 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. 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 siemens_coefficient = 0.3
@@ -91,7 +91,6 @@
name = "chitinous mass" name = "chitinous mass"
desc = "A tough, hard covering of black chitin with transparent chitin in front." desc = "A tough, hard covering of black chitin with transparent chitin in front."
icon_state = "lingarmorhelmet" icon_state = "lingarmorhelmet"
item_state = "lingarmorhelmet"
armor = list(melee = 75, bullet = 60, laser = 60,energy = 60, bomb = 60, bio = 0, rad = 0) armor = list(melee = 75, bullet = 60, laser = 60,energy = 60, bomb = 60, bio = 0, rad = 0)
siemens_coefficient = 0.3 siemens_coefficient = 0.3
max_heat_protection_temperature = FIRE_HELMET_MAX_HEAT_PROTECTION_TEMPERATURE max_heat_protection_temperature = FIRE_HELMET_MAX_HEAT_PROTECTION_TEMPERATURE

View File

@@ -4,6 +4,7 @@
name = "Augmented Eyesight" name = "Augmented Eyesight"
desc = "Creates heat receptors in our eyes and dramatically increases light sensing ability." 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." 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 genomecost = 2
var/active = 0 //Whether or not vision is enhanced var/active = 0 //Whether or not vision is enhanced
verbpath = /mob/proc/changeling_augmented_eyesight verbpath = /mob/proc/changeling_augmented_eyesight

View File

@@ -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. \ 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." Shocking someone costs ten chemicals per use."
enhancedtext = "Shocking biologicals without grabbing only requires five chemicals, and has more disabling power." enhancedtext = "Shocking biologicals without grabbing only requires five chemicals, and has more disabling power."
ability_icon_state = "ling_bioelectrogenesis"
genomecost = 2 genomecost = 2
verbpath = /mob/living/carbon/human/proc/changeling_bioelectrogenesis verbpath = /mob/living/carbon/human/proc/changeling_bioelectrogenesis

View File

@@ -2,6 +2,7 @@
name = "Blind Sting" name = "Blind Sting"
desc = "We silently sting a human, completely blinding them for a short time." desc = "We silently sting a human, completely blinding them for a short time."
enhancedtext = "Duration is extended." enhancedtext = "Duration is extended."
ability_icon_state = " ling_sting_blind"
genomecost = 2 genomecost = 2
allowduringlesserform = 1 allowduringlesserform = 1
verbpath = /mob/proc/changeling_blind_sting verbpath = /mob/proc/changeling_blind_sting

View File

@@ -3,6 +3,7 @@
desc = "We evolve the ability to shoot our stingers at humans, with some preperation." 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." helptext = "Allows us to prepare the next sting to have a range of two tiles."
enhancedtext = "The range is extended to five tiles." enhancedtext = "The range is extended to five tiles."
ability_icon_state = "ling_sting_boost_range"
genomecost = 1 genomecost = 1
allowduringlesserform = 1 allowduringlesserform = 1
verbpath = /mob/proc/changeling_boost_range verbpath = /mob/proc/changeling_boost_range

View File

@@ -4,6 +4,7 @@
helptext = "Does not provide a warning to the victim, though they will likely realize they are suddenly freezing. Has \ 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." a three minute cooldown between uses."
enhancedtext = "Increases the amount of chemicals injected." enhancedtext = "Increases the amount of chemicals injected."
ability_icon_state = "ling_sting_cryo"
genomecost = 1 genomecost = 1
verbpath = /mob/proc/changeling_cryo_sting verbpath = /mob/proc/changeling_cryo_sting

View File

@@ -2,6 +2,7 @@
name = "Deaf Sting" name = "Deaf Sting"
desc = "We silently sting a human, completely deafening them for a short time." desc = "We silently sting a human, completely deafening them for a short time."
enhancedtext = "Deafness duration is extended." enhancedtext = "Deafness duration is extended."
ability_icon_state = "ling_sting_deafen"
genomecost = 1 genomecost = 1
allowduringlesserform = 1 allowduringlesserform = 1
verbpath = /mob/proc/changeling_deaf_sting verbpath = /mob/proc/changeling_deaf_sting

View File

@@ -1,6 +1,7 @@
/datum/power/changeling/DeathSting /datum/power/changeling/DeathSting
name = "Death Sting" name = "Death Sting"
desc = "We silently sting a human, filling him with potent chemicals. His rapid death is all but assured." 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 genomecost = 10
verbpath = /mob/proc/changeling_DEATHsting verbpath = /mob/proc/changeling_DEATHsting

View File

@@ -4,6 +4,7 @@
implicate ourselves." implicate ourselves."
helptext = "The toxin takes effect in about two minutes. The sting has a three minute cooldown between uses." helptext = "The toxin takes effect in about two minutes. The sting has a three minute cooldown between uses."
enhancedtext = "The toxic damage is doubled." enhancedtext = "The toxic damage is doubled."
ability_icon_state = "ling_sting_del_toxin"
genomecost = 1 genomecost = 1
verbpath = /mob/proc/changeling_delayed_toxic_sting verbpath = /mob/proc/changeling_delayed_toxic_sting

View File

@@ -2,6 +2,7 @@
name = "Digital Camoflauge" name = "Digital Camoflauge"
desc = "We evolve the ability to distort our form and proprtions, defeating common altgorthms used to detect lifeforms on cameras." 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." 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 genomecost = 1
allowduringlesserform = 1 allowduringlesserform = 1
verbpath = /mob/proc/changeling_digitalcamo verbpath = /mob/proc/changeling_digitalcamo

View File

@@ -3,6 +3,7 @@
desc = "We discreetly evolve a finger to be able to send a small electric charge. \ 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." 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." 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 genomecost = 3
verbpath = /mob/proc/changeling_electric_lockpick verbpath = /mob/proc/changeling_electric_lockpick

View File

@@ -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 \ 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." five minute coodown between uses."
enhancedtext = "Maximum health is lowered further." enhancedtext = "Maximum health is lowered further."
ability_icon_state = "ling_sting_enfeeble"
genomecost = 1 genomecost = 1
verbpath = /mob/proc/changeling_enfeebling_string verbpath = /mob/proc/changeling_enfeebling_string

View File

@@ -3,6 +3,7 @@
desc = "We evolve additional sacs of adrenaline throughout our body." 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." 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." enhancedtext = "Constant recovery from stuns for thirty seconds."
ability_icon_state = "ling_epinepherine_overdose"
genomecost = 2 genomecost = 2
verbpath = /mob/proc/changeling_epinephrine_overdose verbpath = /mob/proc/changeling_epinephrine_overdose

View File

@@ -2,6 +2,7 @@
name = "Extract DNA" name = "Extract DNA"
desc = "We stealthily sting a target and extract the DNA from them." 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." 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 genomecost = 0
allowduringlesserform = 1 allowduringlesserform = 1
verbpath = /mob/proc/changeling_extract_dna_sting verbpath = /mob/proc/changeling_extract_dna_sting

View File

@@ -17,6 +17,7 @@ var/global/list/changeling_fabricated_clothing = list(
We cannot be relieved of this clothing by others." 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. \ 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." To remove our new fabricated clothing, use this ability again."
ability_icon_state = "ling_fabricate_clothing"
genomecost = 2 genomecost = 2
verbpath = /mob/proc/changeling_fabricate_clothing verbpath = /mob/proc/changeling_fabricate_clothing
@@ -32,6 +33,10 @@ var/global/list/changeling_fabricated_clothing = list(
/obj/item/clothing/under/chameleon/changeling /obj/item/clothing/under/chameleon/changeling
name = "malformed flesh" name = "malformed flesh"
icon_state = "lingchameleon" 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" item_state = "lingchameleon"
worn_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 \ 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 /obj/item/clothing/suit/chameleon/changeling
name = "chitinous chest" name = "chitinous chest"
icon_state = "lingchameleon" 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" item_state = "armor"
desc = "The cells in our chest are rapidly shifting, ready to reform into material that can resemble most pieces of clothing." desc = "The cells in our chest are rapidly shifting, ready to reform into material that can resemble most pieces of clothing."
origin_tech = list() origin_tech = list()
@@ -100,6 +109,10 @@ var/global/list/changeling_fabricated_clothing = list(
/obj/item/clothing/shoes/chameleon/changeling /obj/item/clothing/shoes/chameleon/changeling
name = "malformed feet" name = "malformed feet"
icon_state = "lingchameleon" 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" 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." 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() origin_tech = list()
@@ -122,6 +135,10 @@ var/global/list/changeling_fabricated_clothing = list(
/obj/item/weapon/storage/backpack/chameleon/changeling /obj/item/weapon/storage/backpack/chameleon/changeling
name = "backpack" name = "backpack"
icon_state = "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" 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." 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() origin_tech = list()
@@ -146,6 +163,10 @@ var/global/list/changeling_fabricated_clothing = list(
/obj/item/clothing/gloves/chameleon/changeling /obj/item/clothing/gloves/chameleon/changeling
name = "malformed hands" name = "malformed hands"
icon_state = "lingchameleon" 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" 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 \ 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." 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 /obj/item/clothing/mask/chameleon/changeling
name = "chitin visor" name = "chitin visor"
icon_state = "lingchameleon" 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" 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 \ 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.." tanks.."
@@ -216,6 +241,10 @@ var/global/list/changeling_fabricated_clothing = list(
name = "waist pouch" name = "waist pouch"
desc = "We can store objects in this, as well as shift it's appearance, so that it resembles various common belts." desc = "We can store objects in this, as well as shift it's appearance, so that it resembles various common belts."
icon_state = "lingchameleon" 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" item_state = "utility"
origin_tech = list() origin_tech = list()
canremove = 0 canremove = 0

View File

@@ -2,6 +2,7 @@
name = "Regenerative Stasis" name = "Regenerative Stasis"
desc = "We become weakened to a death-like state, where we will rise again from death." 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." helptext = "Can be used before or after death. Duration varies greatly."
ability_icon_state = "ling_regenerative_stasis"
genomecost = 0 genomecost = 0
allowduringlesserform = 1 allowduringlesserform = 1
verbpath = /mob/proc/changeling_fakedeath verbpath = /mob/proc/changeling_fakedeath

View File

@@ -3,6 +3,7 @@
desc = "Begins a slow rengeration of our form. Does not effect stuns or chemicals." desc = "Begins a slow rengeration of our form. Does not effect stuns or chemicals."
helptext = "Can be used while unconscious." helptext = "Can be used while unconscious."
enhancedtext = "Healing is twice as effective." enhancedtext = "Healing is twice as effective."
ability_icon_state = "ling_fleshmend"
genomecost = 1 genomecost = 1
verbpath = /mob/proc/changeling_fleshmend verbpath = /mob/proc/changeling_fleshmend

View File

@@ -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." 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." helptext = "Allows other changelings to absorb the DNA you channel from the airwaves. Will not help them towards their absorb objectives."
genomecost = 0 genomecost = 0
make_hud_button = 0
verbpath = /mob/proc/changeling_hiveupload verbpath = /mob/proc/changeling_hiveupload
/datum/power/changeling/hive_download /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." 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." helptext = "Allows you to absorb a single DNA and use it. Does not count towards your absorb objective."
genomecost = 0 genomecost = 0
make_hud_button = 0
verbpath = /mob/proc/changeling_hivedownload verbpath = /mob/proc/changeling_hivedownload
// HIVE MIND UPLOAD/DOWNLOAD DNA // HIVE MIND UPLOAD/DOWNLOAD DNA

View File

@@ -2,6 +2,7 @@
name = "Mimic Voice" name = "Mimic Voice"
desc = "We shape our vocal glands to sound like a desired 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" 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 genomecost = 1
verbpath = /mob/proc/changeling_mimicvoice verbpath = /mob/proc/changeling_mimicvoice

View File

@@ -3,6 +3,7 @@
desc = "Expels impurifications from our form; curing diseases, removing toxins, chemicals, radiation, and resetting our genetic code completely." 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." helptext = "Can be used while unconscious. This will also purge any reagents inside ourselves, both harmful and beneficial."
enhancedtext = "We heal more toxins." enhancedtext = "We heal more toxins."
ability_icon_state = "ling_anatomic_panacea"
genomecost = 1 genomecost = 1
verbpath = /mob/proc/changeling_panacea verbpath = /mob/proc/changeling_panacea
@@ -25,6 +26,7 @@
C.sdisabilities = 0 C.sdisabilities = 0
C.disabilities = 0 C.disabilities = 0
C.reagents.clear_reagents() C.reagents.clear_reagents()
C.ingested.clear_reagents()
var/heal_amount = 5 var/heal_amount = 5
if(src.mind.changeling.recursive_enhancement) if(src.mind.changeling.recursive_enhancement)

View File

@@ -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, \ 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." 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." enhancedtext = "Healing increased to heal up to maximum health."
ability_icon_state = "ling_rapid_regeneration"
genomecost = 2 genomecost = 2
verbpath = /mob/proc/changeling_rapid_regen verbpath = /mob/proc/changeling_rapid_regen

View File

@@ -2,6 +2,7 @@
name = "Recursive Enhancement" name = "Recursive Enhancement"
desc = "We cause our next ability use to have increased or additional effects." 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." 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 genomecost = 3
verbpath = /mob/proc/changeling_recursive_enhancement verbpath = /mob/proc/changeling_recursive_enhancement

View File

@@ -45,6 +45,7 @@
C.mind.changeling.purchased_powers -= C C.mind.changeling.purchased_powers -= C
feedback_add_details("changeling_powers","CR") feedback_add_details("changeling_powers","CR")
C.stat = CONSCIOUS C.stat = CONSCIOUS
C.timeofdeath = null
src.verbs -= /mob/proc/changeling_revive src.verbs -= /mob/proc/changeling_revive
// re-add our changeling powers // re-add our changeling powers
C.make_changeling() C.make_changeling()

View File

@@ -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." 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." helptext = "Lights are blown, organics are disoriented, and synthetics act as if they were flashed."
enhancedtext = "Range is doubled." enhancedtext = "Range is doubled."
ability_icon_state = "ling_resonant_shriek"
genomecost = 2 genomecost = 2
verbpath = /mob/proc/changeling_resonant_shriek 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." desc = "We shift our vocal cords to release a high-frequency sound that overloads nearby electronics."
helptext = "Creates a moderate sized EMP." helptext = "Creates a moderate sized EMP."
enhancedtext = "Range is doubled." enhancedtext = "Range is doubled."
ability_icon_state = "ling_dissonant_shriek"
genomecost = 2 genomecost = 2
verbpath = /mob/proc/changeling_dissonant_shriek verbpath = /mob/proc/changeling_dissonant_shriek

View File

@@ -3,6 +3,7 @@
desc = "We silently sting a human, completely silencing them for a short time." 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." 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." enhancedtext = "Silence duration is extended."
ability_icon_state = "ling_sting_mute"
genomecost = 2 genomecost = 2
allowduringlesserform = 1 allowduringlesserform = 1
verbpath = /mob/proc/changeling_silence_sting verbpath = /mob/proc/changeling_silence_sting

View File

@@ -1,6 +1,7 @@
/datum/power/changeling/transform /datum/power/changeling/transform
name = "Transform" name = "Transform"
desc = "We take on the apperance and voice of one we have absorbed." desc = "We take on the apperance and voice of one we have absorbed."
ability_icon_state = "ling_transform"
genomecost = 0 genomecost = 0
verbpath = /mob/proc/changeling_transform verbpath = /mob/proc/changeling_transform

View File

@@ -3,6 +3,7 @@
name = "Transformation Sting" name = "Transformation Sting"
desc = "We silently sting a human, injecting a retrovirus that forces them to transform into another." 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." 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 genomecost = 3
verbpath = /mob/proc/changeling_transformation_sting verbpath = /mob/proc/changeling_transformation_sting

View File

@@ -4,6 +4,7 @@
We are undetectable, so long as we move slowly.(Toggle)" 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." helptext = "Running, and performing most acts will reveal us. Our chemical regeneration is halted while we are hidden."
enhancedtext = "True invisiblity while cloaked." enhancedtext = "True invisiblity while cloaked."
ability_icon_state = "ling_camoflage"
genomecost = 3 genomecost = 3
verbpath = /mob/proc/changeling_visible_camouflage verbpath = /mob/proc/changeling_visible_camouflage

View File

@@ -2,7 +2,6 @@
name = "cult blade" name = "cult blade"
desc = "An arcane weapon wielded by the followers of Nar-Sie." desc = "An arcane weapon wielded by the followers of Nar-Sie."
icon_state = "cultblade" icon_state = "cultblade"
item_state = "cultblade"
w_class = 4 w_class = 4
force = 30 force = 30
throwforce = 10 throwforce = 10
@@ -72,7 +71,6 @@
name = "cult robes" name = "cult robes"
desc = "A set of armored robes worn by the followers of Nar-Sie." desc = "A set of armored robes worn by the followers of Nar-Sie."
icon_state = "cultrobes" icon_state = "cultrobes"
item_state = "cultrobes"
body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|ARMS body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|ARMS
allowed = list(/obj/item/weapon/book/tome,/obj/item/weapon/melee/cultblade) 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) 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 /obj/item/clothing/suit/cultrobes/alt
icon_state = "cultrobesalt" icon_state = "cultrobesalt"
item_state = "cultrobesalt" item_state = "cultrobes"
/obj/item/clothing/suit/cultrobes/magusred /obj/item/clothing/suit/cultrobes/magusred
name = "magus robes" name = "magus robes"
desc = "A set of armored robes worn by the followers of Nar-Sie." desc = "A set of armored robes worn by the followers of Nar-Sie."
icon_state = "magusred" icon_state = "magusred"
item_state = "magusred"
body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|FEET|ARMS|HANDS body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|FEET|ARMS|HANDS
flags_inv = HIDEGLOVES|HIDESHOES|HIDEJUMPSUIT flags_inv = HIDEGLOVES|HIDESHOES|HIDEJUMPSUIT
@@ -107,7 +104,6 @@
/obj/item/clothing/suit/space/cult /obj/item/clothing/suit/space/cult
name = "cult armour" name = "cult armour"
icon_state = "cult_armour" icon_state = "cult_armour"
item_state = "cult_armour"
desc = "A bulky suit of armour, bristling with spikes. It looks space-worthy." desc = "A bulky suit of armour, bristling with spikes. It looks space-worthy."
w_class = 3 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) allowed = list(/obj/item/weapon/book/tome,/obj/item/weapon/melee/cultblade,/obj/item/weapon/tank/emergency_oxygen,/obj/item/device/suit_cooling_unit)

View File

@@ -50,7 +50,7 @@
src.invisibility = INVISIBILITY_MAXIMUM src.invisibility = INVISIBILITY_MAXIMUM
density = 0 density = 0
/obj/machinery/cooking/cultify() /obj/machinery/cooker/cultify()
new /obj/structure/cult/talisman(loc) new /obj/structure/cult/talisman(loc)
qdel(src) qdel(src)

View File

@@ -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. /datum/game_mode/proc/check_win() //universal trigger to be called at mob death, nuke explosion, etc. To be called from everywhere.
return 0 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/players = list()
var/list/candidates = list() var/list/candidates = list()
@@ -387,6 +387,8 @@ var/global/list/additional_antag_types = list()
continue continue
if(istype(player, /mob/new_player)) if(istype(player, /mob/new_player))
continue continue
if(istype(player, /mob/observer/dead) && !ghosts_only)
continue
if(!role || (player.client.prefs.be_special & role)) if(!role || (player.client.prefs.be_special & role))
log_debug("[player.key] had [antag_id] enabled, so we are drafting them.") log_debug("[player.key] had [antag_id] enabled, so we are drafting them.")
candidates |= player.mind candidates |= player.mind

Some files were not shown because too many files have changed in this diff Show More