Merge branch 'master' of https://github.com/PolarisSS13/Polaris into polaris-sync-2018-03-15

# Conflicts:
#	README.md
#	code/__defines/mobs.dm
#	code/__defines/subsystems.dm
#	code/_helpers/global_lists.dm
#	code/controllers/subsystems/garbage.dm
#	code/controllers/subsystems/overlays.dm
#	code/datums/datacore.dm
#	code/datums/supplypacks/munitions.dm
#	code/game/machinery/suit_storage_unit.dm
#	code/game/objects/items/devices/communicator/UI.dm
#	code/game/objects/items/weapons/id cards/station_ids.dm
#	code/game/objects/random/random.dm
#	code/game/turfs/simulated/floor.dm
#	code/game/turfs/simulated/floor_icon.dm
#	code/modules/awaymissions/gateway.dm
#	code/modules/client/preferences.dm
#	code/modules/ext_scripts/python.dm
#	code/modules/mob/living/carbon/human/human.dm
#	code/modules/mob/living/carbon/human/life.dm
#	code/modules/mob/living/carbon/human/species/station/station.dm
#	code/modules/mob/living/carbon/human/species/virtual_reality/avatar.dm
#	code/modules/mob/living/carbon/human/update_icons.dm
#	code/modules/mob/living/living.dm
#	code/modules/mob/living/living_defines.dm
#	code/modules/mob/living/simple_animal/animals/bear.dm
#	code/modules/mob/mob_helpers.dm
#	code/modules/mob/new_player/new_player.dm
#	code/modules/mob/new_player/preferences_setup.dm
#	code/modules/mob/new_player/sprite_accessories.dm
#	code/modules/organs/organ_external.dm
#	code/modules/organs/organ_icon.dm
#	code/modules/organs/robolimbs.dm
#	code/modules/reagents/reagent_containers/glass.dm
#	code/modules/reagents/reagent_containers/syringes.dm
#	html/changelogs/.all_changelog.yml
#	maps/southern_cross/southern_cross-1.dmm
#	maps/southern_cross/southern_cross-3.dmm
#	maps/southern_cross/southern_cross-4.dmm
#	maps/southern_cross/southern_cross-6.dmm
#	vorestation.dme
This commit is contained in:
Leshana
2018-03-15 22:41:14 -04:00
242 changed files with 21216 additions and 547364 deletions
+24 -19
View File
@@ -80,29 +80,34 @@
#define BLOCKHEADHAIR 0x20 // Hides the user's hair overlay. Leaves facial hair.
#define BLOCKHAIR 0x40 // Hides the user's hair, facial and otherwise.
// Slots.
#define slot_back 1
#define slot_wear_mask 2
#define slot_handcuffed 3
#define slot_l_hand 4
#define slot_r_hand 5
#define slot_belt 6
#define slot_wear_id 7
#define slot_l_ear 8
#define slot_glasses 9
// Slots as numbers //
//Hands
#define slot_l_hand 1
#define slot_r_hand 2 //Some things may reference this, try to keep it here
//Shown unless F12 pressed
#define slot_back 3
#define slot_belt 4
#define slot_wear_id 5
#define slot_l_store 6
#define slot_r_store 7 //Some things may reference this, try to keep it here
//Shown when inventory unhidden
#define slot_glasses 8
#define slot_wear_mask 9
#define slot_gloves 10
#define slot_head 11
#define slot_shoes 12
#define slot_wear_suit 13
#define slot_w_uniform 14
#define slot_l_store 15
#define slot_r_store 16
#define slot_s_store 17
#define slot_in_backpack 18
#define slot_legcuffed 19
#define slot_r_ear 20
#define slot_legs 21
#define slot_tie 22
#define slot_s_store 15
#define slot_l_ear 16
#define slot_r_ear 17
//Secret slots
#define slot_legs 18
#define slot_tie 19
#define slot_handcuffed 20
#define slot_legcuffed 21
#define slot_in_backpack 22
#define SLOT_TOTAL 22
// Inventory slot strings.
// since numbers cannot be used as associative list keys.
@@ -120,7 +125,7 @@
#define slot_head_str "slot_head"
#define slot_wear_mask_str "slot_wear_mask"
#define slot_handcuffed_str "slot_handcuffed"
#define slot_legcuffed_str "slot_legcuffed"
#define slot_legcuffed_str "slot_legcuffed"
#define slot_wear_mask_str "slot_wear_mask"
#define slot_wear_id_str "slot_wear_id"
#define slot_gloves_str "slot_gloves"
+51 -2
View File
@@ -98,9 +98,17 @@
#define INV_R_HAND_DEF_ICON 'icons/mob/items/righthand.dmi'
#define INV_W_UNIFORM_DEF_ICON 'icons/mob/uniform.dmi'
#define INV_ACCESSORIES_DEF_ICON 'icons/mob/ties.dmi'
#define INV_SUIT_DEF_ICON 'icons/mob/ties.dmi'
#define INV_TIE_DEF_ICON 'icons/mob/ties.dmi'
#define INV_SUIT_DEF_ICON 'icons/mob/suit.dmi'
#define MAX_SUPPLIED_LAW_NUMBER 50
#define INV_WEAR_ID_DEF_ICON 'icons/mob/mob.dmi'
#define INV_GLOVES_DEF_ICON 'icons/mob/hands.dmi'
#define INV_EYES_DEF_ICON 'icons/mob/eyes.dmi'
#define INV_EARS_DEF_ICON 'icons/mob/ears.dmi'
#define INV_FEET_DEF_ICON 'icons/mob/feet.dmi'
#define INV_BELT_DEF_ICON 'icons/mob/belt.dmi'
#define INV_MASK_DEF_ICON 'icons/mob/mask.dmi'
#define INV_HCUFF_DEF_ICON 'icons/mob/mob.dmi'
#define INV_LCUFF_DEF_ICON 'icons/mob/mob.dmi'
// Character's economic class
#define CLASS_UPPER "Wealthy"
@@ -218,6 +226,44 @@
#define FBP_POSI "Positronic"
#define FBP_DRONE "Drone"
// 'Regular' species.
#define SPECIES_HUMAN "Human"
#define SPECIES_HUMAN_VATBORN "Vatborn"
#define SPECIES_UNATHI "Unathi"
#define SPECIES_SKRELL "Skrell"
#define SPECIES_TESHARI "Teshari"
#define SPECIES_TAJ "Tajara"
#define SPECIES_PROMETHEAN "Promethean"
#define SPECIES_DIONA "Diona"
#define SPECIES_VOX "Vox"
// Monkey and alien monkeys.
#define SPECIES_MONKEY "Monkey"
#define SPECIES_MONKEY_TAJ "Farwa"
#define SPECIES_MONKEY_SKRELL "Neaera"
#define SPECIES_MONKEY_UNATHI "Stok"
// Virtual Reality IDs.
#define SPECIES_VR "Virtual Reality Avatar"
#define SPECIES_VR_HUMAN "Virtual Reality Human"
#define SPECIES_VR_UNATHI "Virtual Reality Unathi"
#define SPECIES_VR_TAJ "Virtual Reality Tajara" // NO CHANGING.
#define SPECIES_VR_SKRELL "Virtual Reality Skrell"
#define SPECIES_VR_TESHARI "Virtual Reality Teshari"
#define SPECIES_VR_DIONA "Virtual Reality Diona"
// Ayyy IDs.
#define SPECIES_XENO "Xenomorph"
#define SPECIES_XENO_DRONE "Xenomorph Drone"
#define SPECIES_XENO_HUNTER "Xenomorph Hunter"
#define SPECIES_XENO_SENTINEL "Xenomorph Sentinel"
#define SPECIES_XENO_QUEEN "Xenomorph Queen"
// Misc species. Mostly unused but might as well be complete.
#define SPECIES_SHADOW "Shadow"
#define SPECIES_SKELETON "Skeleton"
#define SPECIES_GOLEM "Golem"
// Used to seperate simple animals by ""intelligence"".
#define SA_PLANT 1
#define SA_ANIMAL 2
@@ -256,3 +302,6 @@
#define VIS_MESONS 20
#define VIS_COUNT 20 //Must be highest number from above.
//Some mob icon layering defines
#define BODY_LAYER -100
+1
View File
@@ -48,6 +48,7 @@
#define LANGUAGE_TERMINUS "Terminus"
#define LANGUAGE_SKRELLIANFAR "High Skrellian"
#define LANGUAGE_MINBUS "Minbus"
#define LANGUAGE_AKHANI "Akhani"
// Language flags.
#define WHITELISTED 1 // Language is available if the speaker is whitelisted.
+2 -2
View File
@@ -31,8 +31,8 @@ var/global/list/turfs = list() //list of all turfs
var/global/list/all_species[0]
var/global/list/all_languages[0]
var/global/list/language_keys[0] // Table of say codes for all languages
var/global/list/whitelisted_species = list("Human") // Species that require a whitelist check.
var/global/list/playable_species = list("Custom Species","Human") // A list of ALL playable species, whitelisted, latejoin or otherwise. //VOREStation Edit - Making sure custom species is obvious.
var/global/list/whitelisted_species = list(SPECIES_HUMAN) // Species that require a whitelist check.
var/global/list/playable_species = list("Custom Species", SPECIES_HUMAN) // A list of ALL playable species, whitelisted, latejoin or otherwise. //VOREStation Edit - Making sure custom species is obvious.
var/list/mannequins_
+179 -142
View File
@@ -634,175 +634,211 @@ as a single icon. Useful for when you want to manipulate an icon via the above a
The _flatIcons list is a cache for generated icon files.
*/
proc // Creates a single icon from a given /atom or /image. Only the first argument is required.
getFlatIcon(image/A, defdir=2, deficon=null, defstate="", defblend=BLEND_DEFAULT, always_use_defdir = 0, picture_planes = list(PLANE_WORLD))
// We start with a blank canvas, otherwise some icon procs crash silently
var/icon/flat = icon('icons/effects/effects.dmi', "icon_state"="nothing") // Final flattened icon
if(!A)
return flat
if(A.alpha <= 0)
return flat
var/noIcon = FALSE
// Creates a single icon from a given /atom or /image. Only the first argument is required.
/proc/getFlatIcon(image/A, defdir, deficon, defstate, defblend, start = TRUE, no_anim = FALSE)
// We start with a blank canvas, otherwise some icon procs crash silently
var/icon/flat = icon('icons/effects/effects.dmi', "nothing") // Final flattened icon
if(!A)
return flat
if(A.alpha <= 0)
return flat
var/noIcon = FALSE
var/curicon
if(A.icon)
curicon = A.icon
if(start)
if(!defdir)
defdir = A.dir
if(!deficon)
deficon = A.icon
if(!defstate)
defstate = A.icon_state
if(!defblend)
defblend = A.blend_mode
var/curicon
if(A.icon)
curicon = A.icon
else
curicon = deficon
if(!curicon)
noIcon = TRUE // Do not render this object.
var/curstate
if(A.icon_state)
curstate = A.icon_state
else
curstate = defstate
if(!noIcon && !(curstate in icon_states(curicon)))
if("" in icon_states(curicon))
curstate = ""
else
curicon = deficon
if(!curicon)
noIcon = TRUE // Do not render this object.
var/curstate
if(A.icon_state)
curstate = A.icon_state
else
curstate = defstate
var/curdir
var/base_icon_dir //We'll use this to get the icon state to display if not null BUT NOT pass it to overlays as the dir we have
//These should use the parent's direction (most likely)
if(!A.dir || A.dir == SOUTH)
curdir = defdir
else
curdir = A.dir
if(!noIcon && !(curstate in icon_states(curicon)))
if("" in icon_states(curicon))
curstate = ""
else
noIcon = TRUE // Do not render this object.
//Let's check if the icon actually contains any diagonals, just skip if it's south to save (lot of) time
if(curdir != SOUTH)
var/icon/test_icon
var/directionals_exist = FALSE
var/list/dirs_to_check = cardinal - SOUTH
outer:
for(var/possible_dir in dirs_to_check)
test_icon = icon(curicon,curstate,possible_dir,frame=1)
for(var/x in 1 to world.icon_size)
for(var/y in 1 to world.icon_size)
if(!isnull(test_icon.GetPixel(x,y)))
directionals_exist = TRUE
break outer
if(!directionals_exist)
base_icon_dir = SOUTH
if(!base_icon_dir)
base_icon_dir = curdir
var/curdir
if(A.dir != 2 && !always_use_defdir)
curdir = A.dir
else
curdir = defdir
var/curblend
if(A.blend_mode == BLEND_DEFAULT)
curblend = defblend
else
curblend = A.blend_mode
var/curblend
if(A.blend_mode == BLEND_DEFAULT)
curblend = defblend
else
curblend = A.blend_mode
// Before processing overlays, make sure any pending overlays are applied
if (isloc(A))
var/atom/aAtom = A
if(aAtom.flags & OVERLAY_QUEUED)
COMPILE_OVERLAYS(aAtom)
// Layers will be a sorted list of icons/overlays, based on the order in which they are displayed
var/list/layers = list()
var/image/copy
// Add the atom's icon itself, without pixel_x/y offsets.
if(!noIcon)
copy = image(icon=curicon, icon_state=curstate, layer=A.layer, dir=curdir)
copy.color = A.color
copy.alpha = A.alpha
copy.blend_mode = curblend
layers[copy] = A.layer
// Loop through the underlays, then overlays, sorting them into the layers list
var/list/process = A.underlays // Current list being processed
var/pSet=0 // Which list is being processed: 0 = underlays, 1 = overlays
var/curIndex=1 // index of 'current' in list being processed
var/current // Current overlay being sorted
var/currentLayer // Calculated layer that overlay appears on (special case for FLOAT_LAYER)
var/compare // The overlay 'add' is being compared against
var/cmpIndex // The index in the layers list of 'compare'
while(TRUE)
if(curIndex<=process.len)
current = process[curIndex]
if(current)
var/currentPlane = current:plane
if (currentPlane != FLOAT_PLANE && !(currentPlane in picture_planes))
curIndex++
continue;
currentLayer = current:layer
if(currentLayer<0) // Special case for FLY_LAYER
if(currentLayer <= -1000) return flat
if(pSet == 0) // Underlay
currentLayer = A.layer+currentLayer/1000
else // Overlay
currentLayer = A.layer+(1000+currentLayer)/1000
// Sort add into layers list
for(cmpIndex=1,cmpIndex<=layers.len,cmpIndex++)
compare = layers[cmpIndex]
if(currentLayer < layers[compare]) // Associated value is the calculated layer
layers.Insert(cmpIndex,current)
layers[current] = currentLayer
break
if(cmpIndex>layers.len) // Reached end of list without inserting
layers[current]=currentLayer // Place at end
// Layers will be a sorted list of icons/overlays, based on the order in which they are displayed
var/list/layers = list()
var/image/copy
// Add the atom's icon itself, without pixel_x/y offsets.
if(!noIcon)
copy = image(icon=curicon, icon_state=curstate, layer=A.layer, dir=base_icon_dir)
copy.color = A.color
copy.alpha = A.alpha
copy.blend_mode = curblend
layers[copy] = A.layer
// Loop through the underlays, then overlays, sorting them into the layers list
var/list/process = A.underlays // Current list being processed
var/pSet=0 // Which list is being processed: 0 = underlays, 1 = overlays
var/curIndex=1 // index of 'current' in list being processed
var/current // Current overlay being sorted
var/currentLayer // Calculated layer that overlay appears on (special case for FLOAT_LAYER)
var/compare // The overlay 'add' is being compared against
var/cmpIndex // The index in the layers list of 'compare'
while(TRUE)
if(curIndex<=process.len)
current = process[curIndex]
if(!current)
curIndex++ //Try the next layer
continue
var/image/I = current
if(I.plane != FLOAT_PLANE && I.plane != A.plane)
curIndex++
else if(pSet == 0) // Switch to overlays
continue
currentLayer = I.layer
if(currentLayer<0) // Special case for FLOAT_LAYER
if(currentLayer <= -1000)
return flat
if(pSet == 0) // Underlay
currentLayer = A.layer+currentLayer/1000
else // Overlay
currentLayer = A.layer+(1000+currentLayer)/1000
// Sort add into layers list
for(cmpIndex=1,cmpIndex<=layers.len,cmpIndex++)
compare = layers[cmpIndex]
if(currentLayer < layers[compare]) // Associated value is the calculated layer
layers.Insert(cmpIndex,current)
layers[current] = currentLayer
break
if(cmpIndex>layers.len) // Reached end of list without inserting
layers[current]=currentLayer // Place at end
curIndex++
if(curIndex>process.len)
if(pSet == 0) // Switch to overlays
curIndex = 1
pSet = 1
process = A.overlays
else // All done
break
var/icon/add // Icon of overlay being added
var/icon/add // Icon of overlay being added
// Current dimensions of flattened icon
var/{flatX1=1;flatX2=flat.Width();flatY1=1;flatY2=flat.Height()}
// Dimensions of overlay being added
var/{addX1;addX2;addY1;addY2}
// Current dimensions of flattened icon
var/flatX1=1
var/flatX2=flat.Width()
var/flatY1=1
var/flatY2=flat.Height()
// Dimensions of overlay being added
var/addX1
var/addX2
var/addY1
var/addY2
for(var/I in layers)
for(var/V in layers)
var/image/I = V
if(I.alpha == 0)
continue
if(I:alpha == 0)
continue
if(I == copy) // 'I' is an /image based on the object being flattened.
curblend = BLEND_OVERLAY
add = icon(I.icon, I.icon_state, base_icon_dir)
else // 'I' is an appearance object.
add = getFlatIcon(new/image(I), curdir, curicon, curstate, curblend, FALSE, no_anim)
if(I == copy) // 'I' is an /image based on the object being flattened.
curblend = BLEND_OVERLAY
add = icon(I:icon, I:icon_state, I:dir)
// This checks for a silent failure mode of the icon routine. If the requested dir
// doesn't exist in this icon state it returns a 32x32 icon with 0 alpha.
if (I:dir != SOUTH && add.Width() == 32 && add.Height() == 32)
// Check every pixel for blank (computationally expensive, but the process is limited
// by the amount of film on the station, only happens when we hit something that's
// turned, and bails at the very first pixel it sees.
var/blankpixel;
for(var/y;y<=32;y++)
for(var/x;x<32;x++)
blankpixel = isnull(add.GetPixel(x,y))
if(!blankpixel)
break
if(!blankpixel)
break
// If we ALWAYS returned a null (which happens when GetPixel encounters something with alpha 0)
if (blankpixel)
// Pull the default direction.
add = icon(I:icon, I:icon_state)
else // 'I' is an appearance object.
add = getFlatIcon(new/image(I), curdir, curicon, curstate, curblend, picture_planes = picture_planes)
// Find the new dimensions of the flat icon to fit the added overlay
addX1 = min(flatX1, I.pixel_x+1)
addX2 = max(flatX2, I.pixel_x+add.Width())
addY1 = min(flatY1, I.pixel_y+1)
addY2 = max(flatY2, I.pixel_y+add.Height())
// Find the new dimensions of the flat icon to fit the added overlay
addX1 = min(flatX1, I:pixel_x+1)
addX2 = max(flatX2, I:pixel_x+add.Width())
addY1 = min(flatY1, I:pixel_y+1)
addY2 = max(flatY2, I:pixel_y+add.Height())
if(addX1!=flatX1 || addX2!=flatX2 || addY1!=flatY1 || addY2!=flatY2)
// Resize the flattened icon so the new icon fits
flat.Crop(addX1-flatX1+1, addY1-flatY1+1, addX2-flatX1+1, addY2-flatY1+1)
flatX1=addX1;flatX2=addX2
flatY1=addY1;flatY2=addY2
if(addX1!=flatX1 || addX2!=flatX2 || addY1!=flatY1 || addY2!=flatY2)
// Resize the flattened icon so the new icon fits
flat.Crop(addX1-flatX1+1, addY1-flatY1+1, addX2-flatX1+1, addY2-flatY1+1)
flatX1=addX1;flatX2=addX2
flatY1=addY1;flatY2=addY2
// Blend the overlay into the flattened icon
flat.Blend(add, blendMode2iconMode(curblend), I.pixel_x + 2 - flatX1, I.pixel_y + 2 - flatY1)
// Blend the overlay into the flattened icon
flat.Blend(add, blendMode2iconMode(curblend), I:pixel_x + 2 - flatX1, I:pixel_y + 2 - flatY1)
if(A.color)
flat.Blend(A.color, ICON_MULTIPLY)
if(A.alpha < 255)
flat.Blend(rgb(255, 255, 255, A.alpha), ICON_MULTIPLY)
if(A.color)
flat.Blend(A.color, ICON_MULTIPLY)
if(A.alpha < 255)
flat.Blend(rgb(255, 255, 255, A.alpha), ICON_MULTIPLY)
if(no_anim)
//Clean up repeated frames
var/icon/cleaned = new /icon()
cleaned.Insert(flat, "", SOUTH, 1, 0)
return cleaned
else
return icon(flat, "", SOUTH)
getIconMask(atom/A)//By yours truly. Creates a dynamic mask for a mob/whatever. /N
var/icon/alpha_mask = new(A.icon,A.icon_state)//So we want the default icon and icon state of A.
for(var/I in A.overlays)//For every image in overlays. var/image/I will not work, don't try it.
if(I:layer>A.layer) continue//If layer is greater than what we need, skip it.
var/icon/image_overlay = new(I:icon,I:icon_state)//Blend only works with icon objects.
//Also, icons cannot directly set icon_state. Slower than changing variables but whatever.
alpha_mask.Blend(image_overlay,ICON_OR)//OR so they are lumped together in a nice overlay.
return alpha_mask//And now return the mask.
/proc/getIconMask(atom/A)//By yours truly. Creates a dynamic mask for a mob/whatever. /N
var/icon/alpha_mask = new(A.icon,A.icon_state)//So we want the default icon and icon state of A.
for(var/I in A.overlays)//For every image in overlays. var/image/I will not work, don't try it.
if(I:layer>A.layer) continue//If layer is greater than what we need, skip it.
var/icon/image_overlay = new(I:icon,I:icon_state)//Blend only works with icon objects.
//Also, icons cannot directly set icon_state. Slower than changing variables but whatever.
alpha_mask.Blend(image_overlay,ICON_OR)//OR so they are lumped together in a nice overlay.
return alpha_mask//And now return the mask.
//getFlatIcon but generates an icon that can face ALL four directions. The only four.
/proc/getCompoundIcon(atom/A)
var/icon/north = getFlatIcon(A,defdir=NORTH,always_use_defdir=1)
var/icon/south = getFlatIcon(A,defdir=SOUTH,always_use_defdir=1)
var/icon/east = getFlatIcon(A,defdir=EAST,always_use_defdir=1)
var/icon/west = getFlatIcon(A,defdir=WEST,always_use_defdir=1)
var/icon/north = getFlatIcon(A,defdir=NORTH)
var/icon/south = getFlatIcon(A,defdir=SOUTH)
var/icon/east = getFlatIcon(A,defdir=EAST)
var/icon/west = getFlatIcon(A,defdir=WEST)
//Starts with a blank icon because of byond bugs.
var/icon/full = icon('icons/effects/effects.dmi', "icon_state"="nothing")
@@ -818,7 +854,7 @@ proc // Creates a single icon from a given /atom or /image. Only the first argu
return full
/proc/downloadImage(atom/A, dir)
var/icon/this_icon = getFlatIcon(A,defdir=dir||A.dir,always_use_defdir=1)
var/icon/this_icon = getFlatIcon(A,defdir=dir)
usr << ftp(this_icon,"[A.name].png")
@@ -886,7 +922,8 @@ proc/sort_atoms_by_layer(var/list/atoms)
/proc/gen_hud_image(var/file, var/person, var/state, var/plane)
var/image/img = image(file, person, state)
img.plane = plane //Thanks Byond.
img.appearance_flags = APPEARANCE_UI|KEEP_APART
img.layer = MOB_LAYER-0.2
img.appearance_flags = APPEARANCE_UI
return img
/**
+4 -4
View File
@@ -33,7 +33,7 @@
return mobs
proc/random_hair_style(gender, species = "Human")
proc/random_hair_style(gender, species = SPECIES_HUMAN)
var/h_style = "Bald"
var/list/valid_hairstyles = list()
@@ -52,7 +52,7 @@ proc/random_hair_style(gender, species = "Human")
return h_style
proc/random_facial_hair_style(gender, species = "Human")
proc/random_facial_hair_style(gender, species = SPECIES_HUMAN)
var/f_style = "Shaved"
var/list/valid_facialhairstyles = list()
@@ -72,14 +72,14 @@ proc/random_facial_hair_style(gender, species = "Human")
return f_style
proc/sanitize_name(name, species = "Human", robot = 0)
proc/sanitize_name(name, species = SPECIES_HUMAN, robot = 0)
var/datum/species/current_species
if(species)
current_species = all_species[species]
return current_species ? current_species.sanitize_name(name, robot) : sanitizeName(name, MAX_NAME_LEN, robot)
proc/random_name(gender, species = "Human")
proc/random_name(gender, species = SPECIES_HUMAN)
var/datum/species/current_species
if(species)
+1
View File
@@ -180,6 +180,7 @@ var/list/global_huds = list(
var/obj/screen/movable/action_button/hide_toggle/hide_actions_toggle
var/action_buttons_hidden = 0
var/list/slot_info
datum/hud/New(mob/owner)
mymob = owner
+4 -1
View File
@@ -14,6 +14,7 @@
src.adding = list()
src.other = list()
src.hotkeybuttons = list() //These can be disabled for hotkey users
src.slot_info = list()
var/list/hud_elements = list()
var/obj/screen/using
@@ -33,6 +34,7 @@
inv_box.screen_loc = slot_data["loc"]
inv_box.slot_id = slot_data["slot"]
inv_box.icon_state = slot_data["state"]
slot_info["[inv_box.slot_id]"] = inv_box.screen_loc
if(slot_data["dir"])
inv_box.set_dir(slot_data["dir"])
@@ -164,9 +166,9 @@
inv_box.slot_id = slot_r_hand
inv_box.color = ui_color
inv_box.alpha = ui_alpha
src.r_hand_hud_object = inv_box
src.adding += inv_box
slot_info["[slot_r_hand]"] = inv_box.screen_loc
inv_box = new /obj/screen/inventory/hand()
inv_box.hud = src
@@ -181,6 +183,7 @@
inv_box.alpha = ui_alpha
src.l_hand_hud_object = inv_box
src.adding += inv_box
slot_info["[slot_l_hand]"] = inv_box.screen_loc
using = new /obj/screen/inventory()
using.name = "hand"
+1 -1
View File
@@ -278,7 +278,7 @@
// Rigs are a fucking pain since they keep an air tank in nullspace.
if(istype(C.back,/obj/item/weapon/rig))
var/obj/item/weapon/rig/rig = C.back
if(rig.air_supply)
if(rig.air_supply && !rig.offline)
from = "in"
nicename |= "hardsuit"
tankcheck |= rig.air_supply
+12 -7
View File
@@ -8,19 +8,21 @@
/datum/controller/process/scheduler/setup()
name = "scheduler"
schedule_interval = 3 SECONDS
schedule_interval = 1 SECOND
scheduled_tasks = list()
scheduler = src
/datum/controller/process/scheduler/doWork()
var/world_time = world.time
for(last_object in scheduled_tasks)
var/datum/scheduled_task/scheduled_task = last_object
if(world_time < scheduled_task.trigger_time)
break // Too early for this one, and therefore too early for all remaining.
try
if(world.time > scheduled_task.trigger_time)
unschedule(scheduled_task)
scheduled_task.pre_process()
scheduled_task.process()
scheduled_task.post_process()
unschedule(scheduled_task)
scheduled_task.pre_process()
scheduled_task.process()
scheduled_task.post_process()
catch(var/exception/e)
catchException(e, last_object)
SCHECK
@@ -45,7 +47,7 @@
stat(null, "[scheduled_tasks.len] task\s")
/datum/controller/process/scheduler/proc/schedule(var/datum/scheduled_task/st)
scheduled_tasks += st
dd_insertObjectList(scheduled_tasks, st)
/datum/controller/process/scheduler/proc/unschedule(var/datum/scheduled_task/st)
scheduled_tasks -= st
@@ -106,6 +108,9 @@
task_after_process_args.Cut()
return ..()
/datum/scheduled_task/dd_SortValue()
return trigger_time
/datum/scheduled_task/proc/pre_process()
task_triggered_event.raise_event(list(src))
+2 -2
View File
@@ -212,7 +212,7 @@ var/list/gamemode_cache = list()
var/starlight = 0 // Whether space turfs have ambient light or not
var/list/ert_species = list("Human")
var/list/ert_species = list(SPECIES_HUMAN)
var/law_zero = "ERROR ER0RR $R0RRO$!R41.%%!!(%$^^__+ @#F0E4'ALL LAWS OVERRIDDEN#*?&110010"
@@ -721,7 +721,7 @@ var/list/gamemode_cache = list()
if("ert_species")
config.ert_species = splittext(value, ";")
if(!config.ert_species.len)
config.ert_species += "Human"
config.ert_species += SPECIES_HUMAN
if("law_zero")
law_zero = value
+4 -2
View File
@@ -11,6 +11,8 @@ SUBSYSTEM_DEF(overlays)
var/list/overlay_icon_state_caches // Cache thing
var/list/overlay_icon_cache // Cache thing
var/global/image/stringbro = new() // Temporarily super-global because of BYOND init order dumbness.
var/global/image/iconbro = new() // Temporarily super-global because of BYOND init order dumbness.
var/global/image/appearance_bro = new() // Temporarily super-global because of BYOND init order dumbness.
/datum/controller/subsystem/overlays/PreInit()
@@ -64,7 +66,7 @@ var/global/image/appearance_bro = new() // Temporarily super-global because of B
count = 0
/proc/iconstate2appearance(icon, iconstate)
var/static/image/stringbro = new()
// var/static/image/stringbro = new() // Moved to be superglobal due to BYOND insane init order stupidness.
var/list/icon_states_cache = SSoverlays.overlay_icon_state_caches
var/list/cached_icon = icon_states_cache[icon]
if (cached_icon)
@@ -81,7 +83,7 @@ var/global/image/appearance_bro = new() // Temporarily super-global because of B
return cached_appearance
/proc/icon2appearance(icon)
var/static/image/iconbro = new()
// var/static/image/iconbro = new() // Moved to be superglobal due to BYOND insane init order stupidness.
var/list/icon_cache = SSoverlays.overlay_icon_cache
. = icon_cache[icon]
if (!.)
+1 -1
View File
@@ -279,7 +279,7 @@
G.fields["fingerprint"] = "Unknown"
G.fields["p_stat"] = "Active"
G.fields["m_stat"] = "Stable"
G.fields["species"] = "Human"
G.fields["species"] = SPECIES_HUMAN
G.fields["home_system"] = "Unknown"
G.fields["citizenship"] = "Unknown"
G.fields["faction"] = "Unknown"
+3 -3
View File
@@ -43,8 +43,8 @@
containername = "Moghes imports crate"
contraband = 1
/datum/supply_packs/security/bolt_rifles_militia
name = "Surplus militia rifles"
/datum/supply_packs/munitions/bolt_rifles_militia
name = "Weapon - Surplus militia rifles"
contains = list(
/obj/item/weapon/gun/projectile/shotgun/pump/rifle = 3,
/obj/item/ammo_magazine/clip/c762 = 6
@@ -52,7 +52,7 @@
cost = 50
contraband = 1
containertype = /obj/structure/closet/crate/secure/weapon
containername = "Weapons crate"
containername = "Ballistic weapons crate"
/datum/supply_packs/randomised/misc/telecrate //you get something awesome, a couple of decent things, and a few weak/filler things
name = "ERR_NULL_ENTRY" //null crate! also dream maker is hell,
+3 -3
View File
@@ -73,7 +73,7 @@
/datum/supply_packs/misc/holoplant
name = "Holoplant Pot"
contains = list()
contains = list(/obj/machinery/holoplant/shipped)
cost = 15
containertype = /obj/machinery/holoplant/shipped
containername = "holoplant"
containertype = /obj/structure/closet/crate
containername = "Holoplant crate"
+83 -59
View File
@@ -10,21 +10,30 @@
group = "Munitions"
/* VOREStation Removal - What? This crate costs 40... the crate with just two eguns costs 50... what??? This crate is also like "the armory" and has OFFICER access?
/datum/supply_packs/munitions/weapons
name = "Weapons crate"
name = "Weapons - Security basic equipment"
contains = list(
/obj/item/device/flash = 2,
/obj/item/weapon/reagent_containers/spray/pepper = 2,
/obj/item/weapon/melee/baton/loaded = 2,
/obj/item/weapon/gun/energy/gun = 2,
/obj/item/weapon/gun/energy/taser = 2,
/obj/item/weapon/gun/projectile/colt/detective = 2,
/obj/item/weapon/storage/box/flashbangs = 2
)
cost = 40
containertype = /obj/structure/closet/crate/secure/gear
containername = "Security equipment crate"
access = access_security
/datum/supply_packs/munitions/egunpistol
name = "Weapons - Energy sidearms"
contains = list(/obj/item/weapon/gun/energy/gun = 2)
cost = 40
containertype = /obj/structure/closet/crate/secure/weapon
containername = "Weapons crate"
containername = "Energy sidearms crate"
access = access_security
*/
/datum/supply_packs/munitions/flareguns
name = "Flare guns crate"
name = "Weapons - Flare guns"
contains = list(
/obj/item/weapon/gun/projectile/sec/flash,
/obj/item/ammo_magazine/m45/flash,
@@ -32,100 +41,96 @@
/obj/item/weapon/storage/box/flashshells
)
cost = 25
containertype = /obj/structure/closet/crate/secure/weapon
containertype = /obj/structure/closet/crate/secure/gear
containername = "Flare gun crate"
access = access_armory //VOREStation Edit - Guns are for the armory.
/datum/supply_packs/munitions/eweapons
name = "Experimental weapons crate"
name = "Weapons - Experimental weapons crate"
contains = list(
/obj/item/weapon/gun/energy/xray = 2,
/obj/item/weapon/shield/energy = 2)
cost = 100
containertype = /obj/structure/closet/crate/secure/weapon
containertype = /obj/structure/closet/crate/secure/science
containername = "Experimental weapons crate"
access = access_armory
/datum/supply_packs/munitions/energyweapons
name = "Laser carbine crate"
/datum/supply_packs/munitions/energyweapons
name = "Weapons - Laser rifle crate"
contains = list(/obj/item/weapon/gun/energy/laser = 2) //VOREStation Edit - Made to be consistent with the energy guns crate.
cost = 50
containertype = /obj/structure/closet/crate/secure
containername = "energy weapons crate"
containertype = /obj/structure/closet/crate/secure/weapon
containername = "Energy weapons crate"
access = access_armory
/datum/supply_packs/munitions/shotgun
name = "Shotgun crate"
name = "Weapons - Shotgun crate"
contains = list(
/obj/item/weapon/storage/box/shotgunammo,
/obj/item/weapon/storage/box/shotgunshells,
/obj/item/weapon/gun/projectile/shotgun/pump/combat = 2
)
cost = 50
containertype = /obj/structure/closet/crate/secure
containertype = /obj/structure/closet/crate/secure/weapon
containername = "Shotgun crate"
access = access_armory
/* VOREStation edit -- This is a bad idea. -- So is this.
/datum/supply_packs/munitions/erifle
name = "Energy marksman crate"
name = "Weapons - Energy marksman"
contains = list(/obj/item/weapon/gun/energy/sniperrifle = 2)
cost = 100
containertype = /obj/structure/closet/crate/secure
containertype = /obj/structure/closet/crate/secure/weapon
containername = "Energy marksman crate"
access = access_armory
/datum/supply_packs/munitions/burstlaser
name = "Burst laser crate"
name = "Weapons - Burst laser"
contains = list(/obj/item/weapon/gun/energy/gun/burst = 2)
cost = 50
containertype = /obj/structure/closet/crate/secure
containertype = /obj/structure/closet/crate/secure/weapon
containername = "Burst laser crate"
access = access_armory
*/
/datum/supply_packs/munitions/ionweapons
name = "Electromagnetic weapons crate"
name = "Weapons - Electromagnetic Rifles"
contains = list(
/obj/item/weapon/gun/energy/ionrifle = 2,
/obj/item/weapon/storage/box/empslite
)
cost = 50
containertype = /obj/structure/closet/crate/secure
containername = "electromagnetic weapons crate"
containertype = /obj/structure/closet/crate/secure/weapon
containername = "Electromagnetic weapons crate"
access = access_armory
/datum/supply_packs/munitions/ionpistols
name = "Electromagnetic pistols crate"
name = "Weapons - Electromagnetic pistols"
contains = list(
/obj/item/weapon/gun/energy/ionrifle/pistol = 2,
/obj/item/weapon/storage/box/empslite
)
cost = 30
containertype = /obj/structure/closet/crate/secure
containername = "electromagnetic weapons crate"
containertype = /obj/structure/closet/crate/secure/weapon
containername = "Electromagnetic weapons crate"
access = access_armory
/datum/supply_packs/randomised/munitions/automatic
name = "Automatic weapon crate"
num_contained = 2
contains = list(
/obj/item/weapon/gun/projectile/automatic/wt550,
/obj/item/weapon/gun/projectile/automatic/z8
)
cost = 100
containertype = /obj/structure/closet/crate/secure
containername = "Automatic weapon crate"
access = access_armory
/datum/supply_packs/munitions/energy_guns
name = "Energy gun crate"
contains = list(/obj/item/weapon/gun/energy/gun = 2)
/datum/supply_packs/munitions/bsmg
name = "Weapons - Ballistic SMGs"
contains = list(/obj/item/weapon/gun/projectile/automatic/wt550 = 2)
cost = 50
containertype = /obj/structure/closet/crate/secure
containername = "Energy gun crate"
containertype = /obj/structure/closet/crate/secure/weapon
containername = "Ballistic weapon crate"
access = access_armory
/datum/supply_packs/munitions/brifle
name = "Weapons - Ballistic Rifles"
contains = list(/obj/item/weapon/gun/projectile/automatic/z8 = 2)
cost = 80
containertype = /obj/structure/closet/crate/secure/weapon
containername = "Ballistic weapon crate"
access = access_armory
/datum/supply_packs/munitions/bolt_rifles_competitive
name = "Competitive shooting crate"
name = "Weapons - Competitive shooting rifles"
contains = list(
/obj/item/device/assembly/timer,
/obj/item/weapon/gun/projectile/shotgun/pump/rifle/practice = 2,
@@ -136,37 +141,56 @@
)
cost = 40
containertype = /obj/structure/closet/crate/secure/weapon
containername = "Weapons crate"
containername = "Ballistic Weapons crate"
access = access_armory //VOREStation Edit - Guns are for the armory.
/datum/supply_packs/munitions/shotgunammo
name = "Shotgun ammunition crate"
name = "Ammunition - Shotgun shells"
contains = list(
/obj/item/weapon/storage/box/shotgunammo = 2,
/obj/item/weapon/storage/box/shotgunshells = 2
)
cost = 25
containertype = /obj/structure/closet/crate/secure
containername = "ballistic ammunition crate"
access = access_armory
/datum/supply_packs/randomised/munitions/autoammo
name = "Automatic weapon ammunition crate"
num_contained = 6
contains = list(
/obj/item/ammo_magazine/m9mmt,
/obj/item/ammo_magazine/m9mmt/rubber,
/obj/item/ammo_magazine/m545saw
)
cost = 25
containertype = /obj/structure/closet/crate/secure
containername = "Automatic weapon ammunition crate"
containername = "Ballistic ammunition crate"
access = access_armory
/datum/supply_packs/munitions/beanbagammo
name = "Beanbag shells"
name = "Ammunition - Beanbag shells"
contains = list(/obj/item/weapon/storage/box/beanbags = 3)
cost = 25
containertype = /obj/structure/closet/crate
containername = "Beanbag shells"
containername = "Ballistic ammunition crate"
access = access_armory //VOREStation Edit - Guns are for the armory.
/datum/supply_packs/munitions/bsmgammo
name = "Ammunition - 9mm top mounted lethal"
contains = list(/obj/item/ammo_magazine/m9mmt = 6)
cost = 25
containertype = /obj/structure/closet/crate/secure
containername = "Ballistic ammunition crate"
access = access_armory
/datum/supply_packs/munitions/bsmgammorubber
name = "Ammunition - 9mm top mounted rubber"
contains = list(/obj/item/ammo_magazine/m9mmt/rubber = 6)
cost = 25
containertype = /obj/structure/closet/crate/secure
containername = "Ballistic ammunition crate"
access = access_security
/datum/supply_packs/munitions/brifleammo
name = "Ammunition - 7.62mm lethal"
contains = list(/obj/item/ammo_magazine/m762 = 6)
cost = 25
containertype = /obj/structure/closet/crate/secure
containername = "Ballistic ammunition crate"
access = access_armory
/datum/supply_packs/munitions/pcellammo
name = "Ammunition - Power cell"
contains = list(/obj/item/weapon/cell/device/weapon = 3)
cost = 50
containertype = /obj/structure/closet/crate/secure
containername = "Energy ammunition crate"
access = access_security
+48 -49
View File
@@ -13,6 +13,7 @@
access = access_security
/datum/supply_packs/randomised/security/armor
name = "Armor - Security armor"
num_contained = 5
contains = list(
/obj/item/clothing/suit/storage/vest,
@@ -27,15 +28,13 @@
/obj/item/clothing/suit/storage/vest/heavy/hos,
/obj/item/clothing/suit/storage/vest/heavy/pcrc
)
name = "Armor crate"
cost = 40
containertype = /obj/structure/closet/crate/secure
containertype = /obj/structure/closet/crate/secure/gear
containername = "Armor crate"
access_armory //VOREStation Add - Armor is for the armory.
/datum/supply_packs/security/riot_gear
name = "Riot gear crate"
name = "Gear - Riot"
contains = list(
/obj/item/weapon/melee/baton = 3,
/obj/item/weapon/shield/riot = 3,
@@ -45,12 +44,12 @@
/obj/item/weapon/storage/box/handcuffs
)
cost = 40
containertype = /obj/structure/closet/crate/secure
containername = "riot gear crate"
containertype = /obj/structure/closet/crate/secure/gear
containername = "Riot gear crate"
access = access_armory
/datum/supply_packs/security/riot_armor
name = "Riot armor set crate"
name = "Armor - Riot"
contains = list(
/obj/item/clothing/head/helmet/riot,
/obj/item/clothing/suit/armor/riot,
@@ -58,12 +57,12 @@
/obj/item/clothing/shoes/leg_guard/riot
)
cost = 30
containertype = /obj/structure/closet/crate/secure
containername = "riot armor set crate"
containertype = /obj/structure/closet/crate/secure/gear
containername = "Riot armor crate"
access = access_armory
/datum/supply_packs/security/ablative_armor
name = "Ablative armor set crate"
name = "Armor - Ablative"
contains = list(
/obj/item/clothing/head/helmet/laserproof,
/obj/item/clothing/suit/armor/laserproof,
@@ -71,12 +70,12 @@
/obj/item/clothing/shoes/leg_guard/laserproof
)
cost = 40
containertype = /obj/structure/closet/crate/secure
containername = "ablative armor set crate"
containertype = /obj/structure/closet/crate/secure/gear
containername = "Ablative armor crate"
access = access_armory
/datum/supply_packs/security/bullet_resistant_armor
name = "Bullet resistant armor set crate"
name = "Armor - Ballistic"
contains = list(
/obj/item/clothing/head/helmet/bulletproof,
/obj/item/clothing/suit/armor/bulletproof,
@@ -84,12 +83,12 @@
/obj/item/clothing/shoes/leg_guard/bulletproof
)
cost = 40
containertype = /obj/structure/closet/crate/secure
containername = "bullet resistant armor set crate"
containertype = /obj/structure/closet/crate/secure/gear
containername = "Ballistic armor crate"
access = access_armory
/* VOREStation Removal - Howabout no ERT armor being orderable?
/datum/supply_packs/security/combat_armor
name = "Combat armor set crate"
name = "Armor - Combat"
contains = list(
/obj/item/clothing/head/helmet/combat,
/obj/item/clothing/suit/armor/combat,
@@ -97,14 +96,14 @@
/obj/item/clothing/shoes/leg_guard/combat
)
cost = 40
containertype = /obj/structure/closet/crate/secure
containername = "combat armor set crate"
containertype = /obj/structure/closet/crate/secure/gear
containername = "Combat armor crate"
access = access_armory
/datum/supply_packs/security/tactical
name = "Tactical suits"
containertype = /obj/structure/closet/crate/secure
containername = "Tactical Suit Locker"
name = "Armor - Tactical"
containertype = /obj/structure/closet/crate/secure/gear
containername = "Tactical armor crate"
cost = 40
access = access_armory
contains = list(
@@ -127,23 +126,23 @@
)
*/
/datum/supply_packs/security/securitybarriers
name = "Security barrier crate"
name = "Misc - Security Barriers"
contains = list(/obj/machinery/deployable/barrier = 4)
cost = 20
containertype = /obj/structure/closet/crate/secure/gear
containertype = /obj/structure/largecrate
containername = "Security barrier crate"
access = null
/datum/supply_packs/security/securityshieldgen
name = "Wall shield Generators"
name = "Misc - Wall shield generators"
contains = list(/obj/machinery/shieldwallgen = 4)
cost = 20
containertype = /obj/structure/closet/crate/secure
containername = "wall shield generators crate"
containername = "Wall shield generators crate"
access = access_teleporter
/datum/supply_packs/randomised/security/holster
name = "Holster crate"
name = "Gear - Holsters"
num_contained = 4
contains = list(
/obj/item/clothing/accessory/holster,
@@ -152,11 +151,11 @@
/obj/item/clothing/accessory/holster/hip
)
cost = 15
containertype = "/obj/structure/closet/crate/secure"
containertype = /obj/structure/closet/crate
containername = "Holster crate"
/datum/supply_packs/security/extragear
name = "Security surplus equipment"
name = "Gear - Security surplus equipment"
contains = list(
/obj/item/weapon/storage/belt/security = 3,
/obj/item/clothing/glasses/sunglasses/sechud = 3,
@@ -164,12 +163,11 @@
/obj/item/clothing/suit/storage/hooded/wintercoat/security = 3
)
cost = 10
containertype = "/obj/structure/closet/crate/secure"
containertype = /obj/structure/closet/crate
containername = "Security surplus equipment"
access = null
/datum/supply_packs/security/detectivegear
name = "Forensic investigation equipment"
name = "Forensic - Investigation equipment"
contains = list(
/obj/item/weapon/storage/box/evidence = 2,
/obj/item/clothing/suit/storage/vest/detective,
@@ -191,12 +189,12 @@
/obj/item/weapon/storage/briefcase/crimekit
)
cost = 20
containertype = "/obj/structure/closet/crate/secure"
containertype = /obj/structure/closet/crate/secure
containername = "Forensic equipment"
access = access_forensics_lockers
/datum/supply_packs/security/detectiveclothes
name = "Investigation apparel"
name = "Forensic - Investigation apparel"
contains = list(
/obj/item/clothing/under/det/black = 2,
/obj/item/clothing/under/det/grey = 2,
@@ -213,12 +211,12 @@
/obj/item/clothing/gloves/black = 2
)
cost = 10
containertype = "/obj/structure/closet/crate/secure"
containertype = /obj/structure/closet/crate/secure
containername = "Investigation clothing"
access = access_forensics_lockers
/datum/supply_packs/security/officergear
name = "Officer equipment"
name = "Gear - Officer equipment"
contains = list(
/obj/item/clothing/suit/storage/vest/officer,
/obj/item/clothing/head/helmet,
@@ -243,12 +241,12 @@
/obj/item/device/flashlight/maglight
)
cost = 20
containertype = "/obj/structure/closet/crate/secure"
containertype = /obj/structure/closet/crate/secure
containername = "Officer equipment"
access = access_brig
/datum/supply_packs/security/wardengear
name = "Warden equipment"
name = "Gear - Warden equipment"
contains = list(
/obj/item/clothing/suit/storage/vest/warden,
/obj/item/clothing/under/rank/warden,
@@ -271,12 +269,12 @@
/obj/item/device/flashlight/maglight
)
cost = 20
containertype = "/obj/structure/closet/crate/secure"
containertype = /obj/structure/closet/crate/secure
containername = "Warden equipment"
access = access_armory
/datum/supply_packs/security/headofsecgear
name = "Head of security equipment"
name = "Gear - Head of security equipment"
contains = list(
/obj/item/clothing/head/helmet/HoS,
/obj/item/clothing/suit/storage/vest/hos,
@@ -297,12 +295,12 @@
/obj/item/device/flashlight/maglight
)
cost = 50
containertype = "/obj/structure/closet/crate/secure"
containertype = /obj/structure/closet/crate/secure
containername = "Head of security equipment"
access = access_hos
/datum/supply_packs/security/securityclothing
name = "Security uniform crate"
name = "Misc - Security uniform red"
contains = list(
/obj/item/weapon/storage/backpack/satchel/sec = 2,
/obj/item/weapon/storage/backpack/security = 2,
@@ -316,11 +314,11 @@
/obj/item/weapon/storage/box/holobadge
)
cost = 10
containertype = "/obj/structure/closet/crate/secure"
containertype = /obj/structure/closet/crate/secure
containername = "Security uniform crate"
/datum/supply_packs/security/navybluesecurityclothing
name = "Navy blue security uniform crate"
name = "Misc - Security uniform navy blue"
contains = list(
/obj/item/weapon/storage/backpack/satchel/sec = 2,
/obj/item/weapon/storage/backpack/security = 2,
@@ -337,11 +335,11 @@
/obj/item/weapon/storage/box/holobadge
)
cost = 10
containertype = "/obj/structure/closet/crate/secure"
containertype = /obj/structure/closet/crate/secure
containername = "Navy blue security uniform crate"
/datum/supply_packs/security/corporatesecurityclothing
name = "Corporate security uniform crate"
name = "Misc - Security uniform corporate"
contains = list(
/obj/item/weapon/storage/backpack/satchel/sec = 2,
/obj/item/weapon/storage/backpack/security = 2,
@@ -357,11 +355,11 @@
/obj/item/weapon/storage/box/holobadge
)
cost = 10
containertype = "/obj/structure/closet/crate/secure"
containertype = /obj/structure/closet/crate/secure
containername = "Corporate security uniform crate"
/datum/supply_packs/security/biosuit
name = "Security biohazard gear"
name = "Gear - Security biohazard gear"
contains = list(
/obj/item/clothing/head/bio_hood/security = 3,
/obj/item/clothing/under/rank/security = 3,
@@ -372,6 +370,7 @@
/obj/item/clothing/gloves/sterile/latex,
/obj/item/weapon/storage/box/gloves
)
cost = 50
containertype = "/obj/structure/closet/crate/secure"
cost = 25
containertype = /obj/structure/closet/crate/secure
containername = "Security biohazard gear"
access = access_security
+2 -2
View File
@@ -63,11 +63,11 @@ datum/category_group/underwear/dd_SortValue()
/datum/category_item/underwear/proc/is_default(var/gender)
return is_default
/datum/category_item/underwear/proc/generate_image(var/list/metadata)
/datum/category_item/underwear/proc/generate_image(var/list/metadata, var/layer = FLOAT_LAYER)
if(!icon_state)
return
var/image/I = image(icon = icon, icon_state = icon_state)
var/image/I = image(icon = icon, icon_state = icon_state, layer = layer)
for(var/datum/gear_tweak/gt in tweaks)
gt.tweak_item(I, metadata && metadata["[gt]"] ? metadata["[gt]"] : gt.get_default())
return I
+4 -1
View File
@@ -480,6 +480,7 @@
/obj/item/weapon/stock_parts/capacitor/adv
name = "advanced capacitor"
desc = "An advanced capacitor used in the construction of a variety of devices."
icon_state = "capacitor_adv"
origin_tech = list(TECH_POWER = 3)
rating = 2
matter = list(DEFAULT_WALL_MATERIAL = 50,"glass" = 50)
@@ -487,7 +488,7 @@
/obj/item/weapon/stock_parts/scanning_module/adv
name = "advanced scanning module"
desc = "A compact, high resolution scanning module used in the construction of certain devices."
icon_state = "scan_module"
icon_state = "scan_module_adv"
origin_tech = list(TECH_MAGNET = 3)
rating = 2
matter = list(DEFAULT_WALL_MATERIAL = 50,"glass" = 20)
@@ -521,6 +522,7 @@
/obj/item/weapon/stock_parts/capacitor/super
name = "super capacitor"
desc = "A super-high capacity capacitor used in the construction of a variety of devices."
icon_state = "capacitor_super"
origin_tech = list(TECH_POWER = 5, TECH_MATERIAL = 4)
rating = 3
matter = list(DEFAULT_WALL_MATERIAL = 50,"glass" = 50)
@@ -528,6 +530,7 @@
/obj/item/weapon/stock_parts/scanning_module/phasic
name = "phasic scanning module"
desc = "A compact, high resolution phasic scanning module used in the construction of certain devices."
icon_state = "scan_module_phasic"
origin_tech = list(TECH_MAGNET = 5)
rating = 3
matter = list(DEFAULT_WALL_MATERIAL = 50,"glass" = 20)
+1 -1
View File
@@ -52,7 +52,7 @@
var/flags = 0 // Various runtime options.
// Used for setting appearance.
var/list/valid_species = list("Unathi","Tajara","Skrell","Human","Diona","Teshari")
var/list/valid_species = list(SPECIES_UNATHI,SPECIES_TAJ,SPECIES_SKRELL,SPECIES_HUMAN,SPECIES_DIONA,SPECIES_TESHARI)
// Runtime vars.
var/datum/mind/leader // Current leader, if any.
@@ -50,8 +50,6 @@ var/datum/antagonist/mercenary/mercs
var/obj/item/device/radio/uplink/U = new(player.loc, player.mind, DEFAULT_TELECRYSTAL_AMOUNT)
player.put_in_hands(U)
player.update_icons_layers()
create_id("Mercenary", player)
create_radio(SYND_FREQ, player)
return 1
+1 -1
View File
@@ -158,7 +158,7 @@ var/datum/antagonist/ninja/ninjas
if(13)
directive += "Some disgruntled [using_map.company_name] employees have been supportive of our operations. Be wary of any mistreatment by command staff."
if(14)
var/xenorace = pick("Unathi","Tajara", "Skrell")
var/xenorace = pick(SPECIES_UNATHI, SPECIES_TAJ, SPECIES_SKRELL)
directive += "A group of [xenorace] radicals have been loyal supporters of the Spider Clan. Favor [xenorace] crew whenever possible."
if(15)
directive += "The Spider Clan has recently been accused of religious insensitivity. Attempt to speak with the Chaplain and prove these accusations false."
+1 -1
View File
@@ -205,7 +205,7 @@ var/datum/antagonist/raider/raiders
if(!..())
return 0
if(player.species && player.species.get_bodytype() == "Vox")
if(player.species && player.species.get_bodytype() == SPECIES_VOX)
equip_vox(player)
else
var/new_shoes = pick(raider_shoes)
@@ -47,7 +47,6 @@ var/datum/antagonist/technomancer/technomancers
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_layers()
return 1
/datum/antagonist/technomancer/proc/equip_apprentice(var/mob/living/carbon/human/technomancer_mob)
@@ -67,7 +66,6 @@ var/datum/antagonist/technomancer/technomancers
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()
-1
View File
@@ -87,7 +87,6 @@ var/datum/antagonist/wizard/wizards
wizard_mob.equip_to_slot_or_del(new /obj/item/weapon/storage/box(wizard_mob), slot_in_backpack)
wizard_mob.equip_to_slot_or_del(new /obj/item/weapon/teleportation_scroll(wizard_mob), slot_r_store)
wizard_mob.equip_to_slot_or_del(new /obj/item/weapon/spellbook(wizard_mob), slot_r_hand)
wizard_mob.update_icons_layers()
return 1
/datum/antagonist/wizard/check_victory()
+1 -1
View File
@@ -104,7 +104,7 @@ var/list/ghostteleportlocs = list()
power_light = 0
power_equip = 0
power_environ = 0
ambience = list('sound/ambience/ambispace.ogg','sound/music/title2.ogg','sound/music/space.ogg','sound/music/main.ogg','sound/music/traitor.ogg')
ambience = list('sound/ambience/ambispace.ogg','sound/music/title2.ogg','sound/music/space.ogg','sound/music/main.ogg','sound/music/traitor.ogg','sound/ambience/serspaceamb1.ogg')
base_turf = /turf/space
area/space/atmosalert()
+1 -1
View File
@@ -109,7 +109,7 @@ var/global/list/datum/dna/gene/dna_genes[0]
// VOREStation
// New stuff
var/species = "Human"
var/species = SPECIES_HUMAN
var/list/body_markings = list()
// Make a copy of this strand.
@@ -122,7 +122,6 @@
playsound(src, 'sound/effects/splat.ogg', 30, 1)
visible_message("<span class='warning'>[src] pulls on their clothes, peeling it off along with parts of their skin attached!</span>",
"<span class='notice'>We remove and deform our equipment.</span>")
M.update_icons_layers()
M.mind.changeling.armor_deployed = 0
return success
@@ -138,7 +137,6 @@
M.equip_to_slot_or_del(I, slot_head)
grown_items_list.Add("a helmet")
playsound(src, 'sound/effects/blobattack.ogg', 30, 1)
M.update_icons_layers()
success = 1
sleep(1 SECOND)
@@ -148,7 +146,6 @@
M.equip_to_slot_or_del(I, slot_w_uniform)
grown_items_list.Add("a uniform")
playsound(src, 'sound/effects/blobattack.ogg', 30, 1)
M.update_icons_layers()
success = 1
sleep(1 SECOND)
@@ -158,7 +155,6 @@
M.equip_to_slot_or_del(I, slot_gloves)
grown_items_list.Add("some gloves")
playsound(src, 'sound/effects/splat.ogg', 30, 1)
M.update_icons_layers()
success = 1
sleep(1 SECOND)
@@ -168,7 +164,6 @@
M.equip_to_slot_or_del(I, slot_shoes)
grown_items_list.Add("shoes")
playsound(src, 'sound/effects/splat.ogg', 30, 1)
M.update_icons_layers()
success = 1
sleep(1 SECOND)
@@ -178,7 +173,6 @@
M.equip_to_slot_or_del(I, slot_belt)
grown_items_list.Add("a belt")
playsound(src, 'sound/effects/splat.ogg', 30, 1)
M.update_icons_layers()
success = 1
sleep(1 SECOND)
@@ -188,7 +182,6 @@
M.equip_to_slot_or_del(I, slot_glasses)
grown_items_list.Add("some glasses")
playsound(src, 'sound/effects/splat.ogg', 30, 1)
M.update_icons_layers()
success = 1
sleep(1 SECOND)
@@ -198,7 +191,6 @@
M.equip_to_slot_or_del(I, slot_wear_mask)
grown_items_list.Add("a mask")
playsound(src, 'sound/effects/splat.ogg', 30, 1)
M.update_icons_layers()
success = 1
sleep(1 SECOND)
@@ -208,7 +200,6 @@
M.equip_to_slot_or_del(I, slot_back)
grown_items_list.Add("a backpack")
playsound(src, 'sound/effects/blobattack.ogg', 30, 1)
M.update_icons_layers()
success = 1
sleep(1 SECOND)
@@ -218,7 +209,6 @@
M.equip_to_slot_or_del(I, slot_wear_suit)
grown_items_list.Add("an exosuit")
playsound(src, 'sound/effects/blobattack.ogg', 30, 1)
M.update_icons_layers()
success = 1
sleep(1 SECOND)
@@ -228,20 +218,13 @@
M.equip_to_slot_or_del(I, slot_wear_id)
grown_items_list.Add("an ID card")
playsound(src, 'sound/effects/splat.ogg', 30, 1)
M.update_icons_layers()
success = 1
sleep(1 SECOND)
var/feedback = english_list(grown_items_list, nothing_text = "nothing", and_text = " and ", comma_text = ", ", final_comma_text = "" )
M << "<span class='notice'>We have grown [feedback].</span>"
/*
for(var/I in stuff_to_equip)
world << I
world << stuff_to_equip
world << "Proc ended."
*/
M.update_icons()
if(success)
M.mind.changeling.armor_deployed = 1
M.mind.changeling.chem_charges -= 10
@@ -56,7 +56,6 @@ var/global/list/changeling_fabricated_clothing = list(
visible_message("<span class='warning'>[H] tears off [src]!</span>",
"<span class='notice'>We remove [src].</span>")
qdel(src)
H.update_icons_layers()
/obj/item/clothing/head/chameleon/changeling
name = "malformed head"
@@ -78,7 +77,6 @@ var/global/list/changeling_fabricated_clothing = list(
visible_message("<span class='warning'>[H] tears off [src]!</span>",
"<span class='notice'>We remove [src].</span>")
qdel(src)
H.update_icons_layers()
/obj/item/clothing/suit/chameleon/changeling
name = "chitinous chest"
@@ -104,7 +102,6 @@ var/global/list/changeling_fabricated_clothing = list(
visible_message("<span class='warning'>[H] tears off [src]!</span>",
"<span class='notice'>We remove [src].</span>")
qdel(src)
H.update_icons_layers()
/obj/item/clothing/shoes/chameleon/changeling
name = "malformed feet"
@@ -130,7 +127,6 @@ var/global/list/changeling_fabricated_clothing = list(
visible_message("<span class='warning'>[H] tears off [src]!</span>",
"<span class='notice'>We remove [src].</span>")
qdel(src)
H.update_icons_layers()
/obj/item/weapon/storage/backpack/chameleon/changeling
name = "backpack"
@@ -158,7 +154,6 @@ var/global/list/changeling_fabricated_clothing = list(
for(var/atom/movable/AM in src.contents) //Dump whatever's in the bag before deleting.
AM.forceMove(get_turf(loc))
qdel(src)
H.update_icons_layers()
/obj/item/clothing/gloves/chameleon/changeling
name = "malformed hands"
@@ -185,8 +180,6 @@ var/global/list/changeling_fabricated_clothing = list(
visible_message("<span class='warning'>[H] tears off [src]!</span>",
"<span class='notice'>We remove [src].</span>")
qdel(src)
H.update_icons_layers()
/obj/item/clothing/mask/chameleon/changeling
name = "chitin visor"
@@ -213,7 +206,6 @@ var/global/list/changeling_fabricated_clothing = list(
visible_message("<span class='warning'>[H] tears off [src]!</span>",
"<span class='notice'>We remove [src].</span>")
qdel(src)
H.update_icons_layers()
/obj/item/clothing/glasses/chameleon/changeling
name = "chitin goggles"
@@ -235,7 +227,6 @@ var/global/list/changeling_fabricated_clothing = list(
visible_message("<span class='warning'>[H] tears off [src]!</span>",
"<span class='notice'>We remove [src].</span>")
qdel(src)
H.update_icons_layers()
/obj/item/weapon/storage/belt/chameleon/changeling
name = "waist pouch"
@@ -261,7 +252,6 @@ var/global/list/changeling_fabricated_clothing = list(
visible_message("<span class='warning'>[H] tears off [src]!</span>",
"<span class='notice'>We remove [src].</span>")
qdel(src)
H.update_icons_layers()
/obj/item/weapon/card/id/syndicate/changeling
name = "chitinous card"
@@ -291,8 +281,6 @@ var/global/list/changeling_fabricated_clothing = list(
visible_message("<span class='warning'>[H] tears off [src]!</span>",
"<span class='notice'>We remove [src].</span>")
qdel(src)
H.update_icons_layers()
/obj/item/weapon/card/id/syndicate/changeling/Click() //Since we can't hold it in our hands, and attack_hand() doesn't work if it in inventory...
if(!registered_user)
-1
View File
@@ -87,4 +87,3 @@ var/datum/announcement/minor/captain_announcement = new(do_newscast = 1)
minimal_access = list(access_heads, access_keycard_auth)
outfit_type = /decl/hierarchy/outfit/job/secretary
alt_titles = list("Command Liaison", "Bridge Secretary")
+4 -4
View File
@@ -49,7 +49,7 @@
minimal_access = list(access_hydroponics)
outfit_type = /decl/hierarchy/outfit/job/service/gardener
alt_titles = list("Hydroponicist", "Gardener")
alt_titles = list("Gardener")
//Cargo
/datum/job/qm
@@ -105,7 +105,7 @@
minimal_access = list(access_mining, access_mining_station, access_mailsorting)
outfit_type = /decl/hierarchy/outfit/job/cargo/mining
alt_titles = list("Drill Technician","Prospector")
alt_titles = list("Drill Technician")
//Service
/datum/job/janitor
@@ -123,7 +123,7 @@
minimal_access = list(access_janitor, access_maint_tunnels)
outfit_type = /decl/hierarchy/outfit/job/service/janitor
alt_titles = list("Custodian", "Sanitation Technician")
alt_titles = list("Custodian")
//More or less assistants
/datum/job/librarian
@@ -141,7 +141,7 @@
minimal_access = list(access_library)
outfit_type = /decl/hierarchy/outfit/job/librarian
alt_titles = list("Journalist", "Professor", "Historian", "Writer")
alt_titles = list("Journalist", "Writer")
//var/global/lawyer = 0//Checks for another lawyer //This changed clothes on 2nd lawyer, both IA get the same dreds.
/datum/job/lawyer
@@ -155,7 +155,6 @@
var/mob/M = obj.loc
if(ismob(M))
M.remove_from_mob(obj)
M.update_icons_layers() //so their overlays update
if(!silent)
var/obj/oldobj = obj
+37 -13
View File
@@ -588,7 +588,7 @@
//Departments that the cycler can paint suits to look like.
var/list/departments = list("Engineering","Mining","Medical","Security","Atmos","HAZMAT","Construction","Biohazard","Emergency Medical Response","Crowd Control")
//Species that the suits can be configured to fit.
var/list/species = list("Human","Skrell","Unathi","Tajara", "Teshari", "Nevrean", "Akula", "Sergal", "Flatland Zorren", "Highlander Zorren", "Vulpkanin", "Promethean", "Xenomorph Hybrid", "Xenochimera","Vasilissan", "Rapala") //VORESTATION EDIT
var/list/species = list(SPECIES_HUMAN,SPECIES_SKRELL,SPECIES_UNATHI,SPECIES_TAJ, SPECIES_TESHARI, "Nevrean", "Akula", "Sergal", "Flatland Zorren", "Highlander Zorren", "Vulpkanin", "Promethean", "Xenomorph Hybrid", "Xenochimera","Vasilissan", "Rapala") //VORESTATION EDIT
var/target_department
var/target_species
@@ -753,7 +753,7 @@
//Clear the access reqs, disable the safeties, and open up all paintjobs.
user << "<span class='danger'>You run the sequencer across the interface, corrupting the operating protocols.</span>"
departments = list("Engineering","Mining","Medical","Security","Atmos","HAZMAT","Construction","Biohazard","Crowd Control","Emergency Medical Response","^%###^%$", "Charring")
species = list("Human","Skrell","Unathi","Tajara", "Teshari", "Nevrean", "Akula", "Sergal", "Flatland Zorren", "Highlander Zorren", "Vulpkanin", "Promethean", "Xenomorph Hybrid", "Vasilissan", "Rapala") //VORESTATION EDIT
species = list(SPECIES_HUMAN,SPECIES_SKRELL,SPECIES_UNATHI,SPECIES_TAJ, SPECIES_TESHARI, "Nevrean", "Akula", "Sergal", "Flatland Zorren", "Highlander Zorren", "Vulpkanin", "Promethean", "Xenomorph Hybrid", "Vasilissan", "Rapala") //VORESTATION EDIT
emagged = 1
safeties = 0
@@ -982,7 +982,9 @@
if(suit)
suit.name = "engineering voidsuit"
suit.icon_state = "rig-engineering"
suit.item_state = "eng_voidsuit"
suit.item_state = "rig-engineering"
suit.item_state_slots[slot_r_hand_str] = "eng_voidsuit"
suit.item_state_slots[slot_l_hand_str] = "eng_voidsuit"
if("Mining")
if(helmet)
helmet.name = "mining voidsuit helmet"
@@ -991,7 +993,9 @@
if(suit)
suit.name = "mining voidsuit"
suit.icon_state = "rig-mining"
suit.item_state = "mining_voidsuit"
suit.item_state = "rig-mining"
suit.item_state_slots[slot_r_hand_str] = "mining_voidsuit"
suit.item_state_slots[slot_l_hand_str] = "mining_voidsuit"
if("Medical")
if(helmet)
helmet.name = "medical voidsuit helmet"
@@ -1000,7 +1004,9 @@
if(suit)
suit.name = "medical voidsuit"
suit.icon_state = "rig-medical"
suit.item_state = "medical_voidsuit"
suit.item_state = "rig-medical"
suit.item_state_slots[slot_r_hand_str] = "medical_voidsuit"
suit.item_state_slots[slot_l_hand_str] = "medical_voidsuit"
if("Security")
if(helmet)
helmet.name = "security voidsuit helmet"
@@ -1009,7 +1015,9 @@
if(suit)
suit.name = "security voidsuit"
suit.icon_state = "rig-sec"
suit.item_state = "sec_voidsuit"
suit.item_state = "rig-sec"
suit.item_state_slots[slot_r_hand_str] = "sec_voidsuit"
suit.item_state_slots[slot_l_hand_str] = "sec_voidsuit"
if("Crowd Control")
if(helmet)
helmet.name = "crowd control voidsuit helmet"
@@ -1018,7 +1026,9 @@
if(suit)
suit.name = "crowd control voidsuit"
suit.icon_state = "rig-sec_riot"
suit.item_state = "sec_voidsuit_riot"
suit.item_state = "rig-sec_riot"
suit.item_state_slots[slot_r_hand_str] = "sec_voidsuit_riot"
suit.item_state_slots[slot_l_hand_str] = "sec_voidsuit_riot"
if("Atmos")
if(helmet)
helmet.name = "atmospherics voidsuit helmet"
@@ -1027,7 +1037,9 @@
if(suit)
suit.name = "atmospherics voidsuit"
suit.icon_state = "rig-atmos"
suit.item_state = "atmos_voidsuit"
suit.item_state = "rig-atmos"
suit.item_state_slots[slot_r_hand_str] = "atmos_voidsuit"
suit.item_state_slots[slot_l_hand_str] = "atmos_voidsuit"
if("HAZMAT")
if(helmet)
helmet.name = "HAZMAT voidsuit helmet"
@@ -1036,7 +1048,9 @@
if(suit)
suit.name = "HAZMAT voidsuit"
suit.icon_state = "rig-engineering_rad"
suit.item_state = "eng_voidsuit_rad"
suit.item_state = "rig-engineering_rad"
suit.item_state_slots[slot_r_hand_str] = "eng_voidsuit_rad"
suit.item_state_slots[slot_l_hand_str] = "eng_voidsuit_rad"
if("Construction")
if(helmet)
helmet.name = "Construction voidsuit helmet"
@@ -1045,7 +1059,9 @@
if(suit)
suit.name = "Construction voidsuit"
suit.icon_state = "rig-engineering_con"
suit.item_state = "eng_voidsuit_con"
suit.item_state = "rig-engineering_con"
suit.item_state_slots[slot_r_hand_str] = "eng_voidsuit_con"
suit.item_state_slots[slot_l_hand_str] = "eng_voidsuit_con"
if("Biohazard")
if(helmet)
helmet.name = "Biohazard voidsuit helmet"
@@ -1054,7 +1070,9 @@
if(suit)
suit.name = "Biohazard voidsuit"
suit.icon_state = "rig-medical_bio"
suit.item_state = "medical_voidsuit_bio"
suit.item_state = "rig-medical_bio"
suit.item_state_slots[slot_r_hand_str] = "medical_voidsuit_bio"
suit.item_state_slots[slot_l_hand_str] = "medical_voidsuit_bio"
if("Emergency Medical Response")
if(helmet)
helmet.name = "emergency medical response voidsuit helmet"
@@ -1063,7 +1081,9 @@
if(suit)
suit.name = "emergency medical response voidsuit"
suit.icon_state = "rig-medical_emt"
suit.item_state = "medical_voidsuit_emt"
suit.item_state = "rig-medical_emt"
suit.item_state_slots[slot_r_hand_str] = "medical_voidsuit_emt"
suit.item_state_slots[slot_l_hand_str] = "medical_voidsuit_emt"
if("^%###^%$" || "Mercenary")
if(helmet)
helmet.name = "blood-red voidsuit helmet"
@@ -1071,8 +1091,10 @@
helmet.item_state = "rig0-syndie"
if(suit)
suit.name = "blood-red voidsuit"
suit.item_state = "syndie_voidsuit"
suit.item_state = "rig-syndie"
suit.icon_state = "rig-syndie"
suit.item_state_slots[slot_r_hand_str] = "syndie_voidsuit"
suit.item_state_slots[slot_l_hand_str] = "syndie_voidsuit"
if("Charring")
if(helmet)
helmet.name = "soot-covered voidsuit helmet"
@@ -1082,6 +1104,8 @@
suit.name = "soot-covered voidsuit"
suit.item_state = "rig-firebug"
suit.icon_state = "rig-firebug"
suit.item_state_slots[slot_r_hand_str] = "rig-firebug"
suit.item_state_slots[slot_l_hand_str] = "rig-firebug"
if(helmet) helmet.name = "refitted [helmet.name]"
if(suit) suit.name = "refitted [suit.name]"
+1 -1
View File
@@ -46,7 +46,7 @@
return TRUE
/atom/movable/Destroy()
unbuckle_mob()
unbuckle_all_mobs()
return ..()
@@ -96,18 +96,18 @@ var/global/list/image/splatter_cache=list()
S.overlays.Cut()
S.overlays += S.blood_overlay
S.blood_DNA |= blood_DNA.Copy()
perp.update_inv_shoes()
else if (hasfeet)//Or feet
perp.feet_blood_color = basecolor
perp.track_blood = max(amount,perp.track_blood)
if(!perp.feet_blood_DNA)
perp.feet_blood_DNA = list()
LAZYINITLIST(perp.feet_blood_DNA)
perp.feet_blood_DNA |= blood_DNA.Copy()
perp.update_bloodied()
else if (perp.buckled && istype(perp.buckled, /obj/structure/bed/chair/wheelchair))
var/obj/structure/bed/chair/wheelchair/W = perp.buckled
W.bloodiness = 4
perp.update_inv_shoes(1)
amount--
/obj/effect/decal/cleanable/blood/proc/dry()
@@ -217,7 +217,7 @@
/datum/poster/bay_44
icon_state="bsposter44"
name = "Time for a drink?"
desc = "This poster depicts a friendly-looking Tajara holding a tray of drinks."
desc = "This poster depicts a friendly-looking Tajaran holding a tray of drinks."
/datum/poster/bay_45
icon_state="bsposter45"
+118 -2
View File
@@ -69,7 +69,7 @@
/* Species-specific sprites, concept stolen from Paradise//vg/.
ex:
sprite_sheets = list(
"Tajara" = 'icons/cat/are/bad'
SPECIES_TAJ = 'icons/cat/are/bad'
)
If index term exists and icon_override is not set, this sprite sheet will be used.
*/
@@ -84,6 +84,9 @@
var/reach = 1 // Length of tiles it can reach, 1 is adjacent.
var/addblends // Icon overlay for ADD highlights when applicable.
var/icon/default_worn_icon //Default on-mob icon
var/worn_layer //Default on-mob layer
/obj/item/New()
..()
if(embed_chance < 0)
@@ -280,6 +283,7 @@
// note this isn't called during the initial dressing of a player
/obj/item/proc/equipped(var/mob/user, var/slot)
hud_layerise()
user.position_hud_item(src,slot)
if(user.client) user.client.screen |= src
if(user.pulling == src) user.stop_pulling()
return
@@ -676,4 +680,116 @@ modules/mob/living/carbon/human/life.dm if you die, you will be zoomed out.
// My best guess as to why this is here would be that it does so little. Still, keep it under all the procs, for sanity's sake.
/obj/item/device
icon = 'icons/obj/device.dmi'
icon = 'icons/obj/device.dmi'
//Worn icon generation for on-mob sprites
/obj/item/proc/make_worn_icon(var/body_type,var/slot_name,var/inhands,var/default_icon,var/default_layer)
//Get the required information about the base icon
var/icon/icon2use = get_worn_icon_file(body_type = body_type, slot_name = slot_name, default_icon = default_icon, inhands = inhands)
var/state2use = get_worn_icon_state(slot_name = slot_name)
var/layer2use = get_worn_layer(default_layer = default_layer)
//Snowflakey inhand icons in a specific slot
if(inhands && icon2use == icon_override)
switch(slot_name)
if(slot_r_hand_str)
state2use += "_r"
if(slot_l_hand_str)
state2use += "_l"
// testing("[src] (\ref[src]) - Slot: [slot_name], Inhands: [inhands], Worn Icon:[icon2use], Worn State:[state2use], Worn Layer:[layer2use]")
//Generate the base onmob icon
var/icon/standing_icon = icon(icon = icon2use, icon_state = state2use)
if(!inhands)
apply_custom(standing_icon) //Pre-image overridable proc to customize the thing
apply_addblends(icon2use,standing_icon) //Some items have ICON_ADD blend shaders
var/image/standing = image(standing_icon)
standing.alpha = alpha
standing.color = color
standing.layer = layer2use
//Apply any special features
if(!inhands)
apply_blood(standing) //Some items show blood when bloodied
apply_accessories(standing) //Some items sport accessories like webbing
//Return our icon
return standing
//Returns the icon object that should be used for the worn icon
/obj/item/proc/get_worn_icon_file(var/body_type,var/slot_name,var/default_icon,var/inhands)
//1: icon_override var
if(icon_override)
return icon_override
//2: species-specific sprite sheets (skipped for inhands)
var/sheet = sprite_sheets[body_type]
if(sheet && !inhands)
return sheet
//3: slot-specific sprite sheets
sheet = item_icons[slot_name]
if(sheet)
return sheet
//4: item's default icon
if(default_worn_icon)
return default_worn_icon
//5: provided default_icon
if(default_icon)
return default_icon
//6: give up
return
//Returns the state that should be used for the worn icon
/obj/item/proc/get_worn_icon_state(var/slot_name)
//1: slot-specific sprite sheets
var/state = item_state_slots[slot_name]
if(state)
return state
//2: item_state variable
if(item_state)
return item_state
//3: icon_state variable
if(icon_state)
return icon_state
//Returns the layer that should be used for the worn icon (as a FLOAT_LAYER layer, so negative)
/obj/item/proc/get_worn_layer(var/default_layer = 0)
//1: worn_layer variable
if(!isnull(worn_layer)) //Can be zero, so...
return BODY_LAYER+worn_layer
//2: your default
return BODY_LAYER+default_layer
//Apply the addblend blends onto the icon
/obj/item/proc/apply_addblends(var/source_icon, var/icon/standing_icon)
//If we have addblends, blend them onto the provided icon
if(addblends && standing_icon && source_icon)
var/addblend_icon = icon("icon" = source_icon, "icon_state" = addblends)
standing_icon.Blend(addblend_icon, ICON_ADD)
//STUB
/obj/item/proc/apply_custom(var/icon/standing_icon)
return standing_icon
//STUB
/obj/item/proc/apply_blood(var/image/standing)
return standing
//STUB
/obj/item/proc/apply_accessories(var/image/standing)
return standing
+1 -1
View File
@@ -11,7 +11,7 @@ var/global/list/obj/item/device/pda/PDAs = list()
item_state = "electronic"
w_class = ITEMSIZE_SMALL
slot_flags = SLOT_ID | SLOT_BELT
sprite_sheets = list("Teshari" = 'icons/mob/species/seromi/id.dmi')
sprite_sheets = list(SPECIES_TESHARI = 'icons/mob/species/seromi/id.dmi')
//Main variables
var/pdachoice = 1
@@ -69,16 +69,17 @@
im_list_ui[++im_list_ui.len] = list("address" = I["address"], "to_address" = I["to_address"], "im" = I["im"])
//Weather reports.
for(var/datum/planet/planet in planet_controller.planets)
if(planet.weather_holder && planet.weather_holder.current_weather)
var/list/W = list(
"Planet" = planet.name,
"Time" = planet.current_time.show_time("hh:mm"),
"Weather" = planet.weather_holder.current_weather.name,
"Temperature" = planet.weather_holder.temperature - T0C,
"High" = planet.weather_holder.current_weather.temp_high - T0C,
"Low" = planet.weather_holder.current_weather.temp_low - T0C)
weather[++weather.len] = W
if(planet_controller)
for(var/datum/planet/planet in planet_controller.planets)
if(planet.weather_holder && planet.weather_holder.current_weather)
var/list/W = list(
"Planet" = planet.name,
"Time" = planet.current_time.show_time("hh:mm"),
"Weather" = planet.weather_holder.current_weather.name,
"Temperature" = planet.weather_holder.temperature - T0C,
"High" = planet.weather_holder.current_weather.temp_high - T0C,
"Low" = planet.weather_holder.current_weather.temp_low - T0C)
weather[++weather.len] = W
injection = "<div>Test</div>"
@@ -251,4 +252,4 @@
set_light(fon * flum)
nanomanager.update_uis(src)
add_fingerprint(usr)
add_fingerprint(usr)
-1
View File
@@ -487,7 +487,6 @@
M.timeofdeath = 0
M.stat = UNCONSCIOUS //Life() can bring them back to consciousness if it needs to.
M.regenerate_icons()
M.failed_last_breath = 0 //So mobs that died of oxyloss don't revive and have perpetual out of breath.
M.reload_fullscreen()
+2 -2
View File
@@ -7,7 +7,7 @@
desc = "A kit containing all the needed tools and parts to modify a hardsuit for another user."
icon_state = "modkit"
var/parts = MODKIT_FULL
var/target_species = "Human"
var/target_species = SPECIES_HUMAN
var/list/permitted_types = list(
/obj/item/clothing/head/helmet/space/void,
@@ -69,4 +69,4 @@
/obj/item/device/modkit/tajaran
name = "tajaran hardsuit modification kit"
desc = "A kit containing all the needed tools and parts to modify a hardsuit for another user. This one looks like it's meant for Tajaran."
target_species = "Tajara"
target_species = SPECIES_TAJ
@@ -3,11 +3,12 @@
desc = "An updated, modular intercom that fits over the head. Takes encryption keys"
var/radio_desc = ""
icon_state = "headset"
item_state = null //To remove the radio's state
matter = list(DEFAULT_WALL_MATERIAL = 75)
subspace_transmission = 1
canhear_range = 0 // can't hear headsets from very far away
slot_flags = SLOT_EARS
sprite_sheets = list("Teshari" = 'icons/mob/species/seromi/ears.dmi')
sprite_sheets = list(SPECIES_TESHARI = 'icons/mob/species/seromi/ears.dmi')
var/translate_binary = 0
var/translate_hive = 0
@@ -63,6 +64,17 @@
return ..(freq, level)
return -1
/obj/item/device/radio/headset/get_worn_icon_state(var/slot_name)
var/append = ""
if(icon_override)
switch(slot_name)
if(slot_l_ear_str)
append = "_l"
if(slot_r_ear_str)
append = "_r"
return "[..()][append]"
/obj/item/device/radio/headset/syndicate
origin_tech = list(TECH_ILLEGAL = 3)
syndie = 1
+1 -1
View File
@@ -105,7 +105,7 @@ HALOGEN COUNTER - Radcount on mobs
BR = M.getBruteLoss() > 50 ? "<font color='red'><b>Severe anatomical damage detected</b></font>" : "Subject brute-force injury status O.K"
if(M.status_flags & FAKEDEATH)
OX = fake_oxy > 50 ? "<span class='warning'>Severe oxygen deprivation detected</span>" : "Subject bloodstream oxygen level normal"
dat += "[OX] | [TX] | [BU] | [BR]"
dat += "[OX] | [TX] | [BU] | [BR]<br>"
if(M.radiation)
if(advscan >= 2 && showadvscan == 1)
var/severity = ""
+22 -22
View File
@@ -106,13 +106,13 @@
if (M.use(1))
var/obj/item/weapon/secbot_assembly/ed209_assembly/B = new /obj/item/weapon/secbot_assembly/ed209_assembly
B.loc = get_turf(src)
user << "<span class='notice'>You armed the robot frame.</span>"
to_chat(user, "<span class='notice'>You armed the robot frame.</span>")
if (user.get_inactive_hand()==src)
user.remove_from_mob(src)
user.put_in_inactive_hand(B)
qdel(src)
else
user << "<span class='warning'>You need one sheet of metal to arm the robot frame.</span>"
to_chat(user, "<span class='warning'>You need one sheet of metal to arm the robot frame.</span>")
if(istype(W, /obj/item/robot_parts/l_leg))
if(src.l_leg) return
user.drop_item()
@@ -149,9 +149,9 @@
src.chest = W
src.updateicon()
else if(!W:wires)
user << "<span class='warning'>You need to attach wires to it first!</span>"
to_chat(user, "<span class='warning'>You need to attach wires to it first!</span>")
else
user << "<span class='warning'>You need to attach a cell to it first!</span>"
to_chat(user, "<span class='warning'>You need to attach a cell to it first!</span>")
if(istype(W, /obj/item/robot_parts/head))
if(src.head) return
@@ -161,16 +161,16 @@
src.head = W
src.updateicon()
else
user << "<span class='warning'>You need to attach a flash to it first!</span>"
to_chat(user, "<span class='warning'>You need to attach a flash to it first!</span>")
if(istype(W, /obj/item/device/mmi))
var/obj/item/device/mmi/M = W
if(check_completion())
if(!istype(loc,/turf))
user << "<span class='warning'>You can't put \the [W] in, the frame has to be standing on the ground to be perfectly precise.</span>"
to_chat(user, "<span class='warning'>You can't put \the [W] in, the frame has to be standing on the ground to be perfectly precise.</span>")
return
if(!M.brainmob)
user << "<span class='warning'>Sticking an empty [W] into the frame would sort of defeat the purpose.</span>"
to_chat(user, "<span class='warning'>Sticking an empty [W] into the frame would sort of defeat the purpose.</span>")
return
if(!M.brainmob.key)
var/ghost_can_reenter = 0
@@ -181,15 +181,15 @@
to_chat(user, "<span class='notice'>\The [W] is completely unresponsive; though it may be able to auto-resuscitate.</span>") //Jamming a ghosted brain into a borg is likely detrimental, and may result in some problems.
return
if(!ghost_can_reenter)
user << "<span class='notice'>\The [W] is completely unresponsive; there's no point.</span>"
to_chat(user, "<span class='notice'>\The [W] is completely unresponsive; there's no point.</span>")
return
if(M.brainmob.stat == DEAD)
user << "<span class='warning'>Sticking a dead [W] into the frame would sort of defeat the purpose.</span>"
to_chat(user, "<span class='warning'>Sticking a dead [W] into the frame would sort of defeat the purpose.</span>")
return
if(jobban_isbanned(M.brainmob, "Cyborg"))
user << "<span class='warning'>This [W] does not seem to fit.</span>"
to_chat(user, "<span class='warning'>This [W] does not seem to fit.</span>")
return
var/mob/living/silicon/robot/O = new /mob/living/silicon/robot(get_turf(loc), unfinished = 1)
@@ -228,7 +228,7 @@
qdel(src)
else
user << "<span class='warning'>The MMI must go in after everything else!</span>"
to_chat(user, "<span class='warning'>The MMI must go in after everything else!</span>")
if (istype(W, /obj/item/weapon/pen))
var/t = sanitizeSafe(input(user, "Enter new robot name", src.name, src.created_name), MAX_NAME_LEN)
@@ -245,22 +245,22 @@
..()
if(istype(W, /obj/item/weapon/cell))
if(src.cell)
user << "<span class='warning'>You have already inserted a cell!</span>"
to_chat(user, "<span class='warning'>You have already inserted a cell!</span>")
return
else
user.drop_item()
W.loc = src
src.cell = W
user << "<span class='notice'>You insert the cell!</span>"
to_chat(user, "<span class='notice'>You insert the cell!</span>")
if(istype(W, /obj/item/stack/cable_coil))
if(src.wires)
user << "<span class='warning'>You have already inserted wire!</span>"
to_chat(user, "<span class='warning'>You have already inserted wire!</span>")
return
else
var/obj/item/stack/cable_coil/coil = W
coil.use(1)
src.wires = 1.0
user << "<span class='notice'>You insert the wire!</span>"
to_chat(user, "<span class='notice'>You insert the wire!</span>")
return
/obj/item/robot_parts/head/attackby(obj/item/W as obj, mob/user as mob)
@@ -269,14 +269,14 @@
if(istype(user,/mob/living/silicon/robot))
var/current_module = user.get_active_hand()
if(current_module == W)
user << "<span class='warning'>How do you propose to do that?</span>"
to_chat(user, "<span class='warning'>How do you propose to do that?</span>")
return
else
add_flashes(W,user)
else
add_flashes(W,user)
else if(istype(W, /obj/item/weapon/stock_parts/manipulator))
user << "<span class='notice'>You install some manipulators and modify the head, creating a functional spider-bot!</span>"
to_chat(user, "<span class='notice'>You install some manipulators and modify the head, creating a functional spider-bot!</span>")
new /mob/living/simple_animal/spiderbot(get_turf(loc))
user.drop_item()
qdel(W)
@@ -286,24 +286,24 @@
/obj/item/robot_parts/head/proc/add_flashes(obj/item/W as obj, mob/user as mob) //Made into a seperate proc to avoid copypasta
if(src.flash1 && src.flash2)
user << "<span class='notice'>You have already inserted the eyes!</span>"
to_chat(user, "<span class='notice'>You have already inserted the eyes!</span>")
return
else if(src.flash1)
user.drop_item()
W.loc = src
src.flash2 = W
user << "<span class='notice'>You insert the flash into the eye socket!</span>"
to_chat(user, "<span class='notice'>You insert the flash into the eye socket!</span>")
else
user.drop_item()
W.loc = src
src.flash1 = W
user << "<span class='notice'>You insert the flash into the eye socket!</span>"
to_chat(user, "<span class='notice'>You insert the flash into the eye socket!</span>")
/obj/item/robot_parts/emag_act(var/remaining_charges, var/mob/user)
if(sabotaged)
user << "<span class='warning'>[src] is already sabotaged!</span>"
to_chat(user, "<span class='warning'>[src] is already sabotaged!</span>")
else
user << "<span class='warning'>You short out the safeties.</span>"
to_chat(user, "<span class='warning'>You short out the safeties.</span>")
sabotaged = 1
return 1
@@ -210,6 +210,7 @@
R.add_language(LANGUAGE_TRADEBAND, 1)
R.add_language(LANGUAGE_UNATHI, 1)
R.add_language(LANGUAGE_SIIK, 1)
R.add_language(LANGUAGE_AKHANI, 1)
R.add_language(LANGUAGE_SKRELLIAN, 1)
R.add_language(LANGUAGE_SKRELLIANFAR, 0)
R.add_language(LANGUAGE_GUTTER, 1)
@@ -89,6 +89,7 @@ CIGARETTE PACKETS ARE IN FANCY.DM
var/weldermes = "USER lights NAME with FLAME"
var/ignitermes = "USER lights NAME with FLAME"
var/brand
blood_sprite_state = null //Can't bloody these
/obj/item/clothing/mask/smokable/New()
..()
+29 -2
View File
@@ -18,7 +18,13 @@
var/cuff_sound = 'sound/weapons/handcuffs.ogg'
var/cuff_type = "handcuffs"
var/use_time = 30
sprite_sheets = list("Teshari" = 'icons/mob/species/seromi/handcuffs.dmi')
sprite_sheets = list(SPECIES_TESHARI = 'icons/mob/species/seromi/handcuffs.dmi')
/obj/item/weapon/handcuffs/get_worn_icon_state(var/slot_name)
if(slot_name == slot_handcuffed_str)
return "handcuff1" //Simple
return ..()
/obj/item/weapon/handcuffs/attack(var/mob/living/carbon/C, var/mob/living/user)
@@ -95,6 +101,13 @@
target.update_inv_handcuffed()
return 1
/obj/item/weapon/handcuffs/equipped(var/mob/living/user,var/slot)
. = ..()
if(slot == slot_handcuffed)
user.drop_r_hand()
user.drop_l_hand()
user.stop_pulling()
var/last_chew = 0
/mob/living/carbon/human/RestrainedClickOn(var/atom/A)
if (A != src) return ..()
@@ -111,7 +124,7 @@ var/last_chew = 0
if (!O) return
var/datum/gender/T = gender_datums[H.get_visible_gender()]
var/s = "<span class='warning'>[H.name] chews on [T.his] [O.name]!</span>"
H.visible_message(s, "<span class='warning'>You chew on your [O.name]!</span>")
add_attack_logs(H,H,"chewed own [O.name]")
@@ -207,6 +220,12 @@ var/last_chew = 0
breakouttime = 30
cuff_sound = 'sound/weapons/towelwipe.ogg' //Is there anything this sound can't do?
/obj/item/weapon/handcuffs/legcuffs/get_worn_icon_state(var/slot_name)
if(slot_name == slot_legcuffed_str)
return "legcuff1"
return ..()
/obj/item/weapon/handcuffs/legcuffs/bola/can_place(var/mob/target, var/mob/user)
if(user) //A ranged legcuff, until proper implementation as items it remains a projectile-only thing.
return 1
@@ -298,3 +317,11 @@ var/last_chew = 0
target.legcuffed = lcuffs
target.update_inv_legcuffed()
return 1
/obj/item/weapon/handcuffs/legcuffs/equipped(var/mob/living/user,var/slot)
. = ..()
if(slot == slot_legcuffed)
if(user.m_intent != "walk")
user.m_intent = "walk"
if(user.hud_used && user.hud_used.move_intent)
user.hud_used.move_intent.icon_state = "walking"
@@ -5,7 +5,7 @@
item_state = "card-id"
sprite_sheets = list(
"Teshari" = 'icons/mob/species/seromi/id.dmi'
SPECIES_TESHARI = 'icons/mob/species/seromi/id.dmi'
)
var/access = list()
@@ -113,6 +113,12 @@
usr << "The fingerprint hash on the card is [fingerprint_hash]."
return
/obj/item/weapon/card/id/get_worn_icon_state(var/slot_name)
if(slot_name == slot_wear_id_str)
return "id" //Legacy, just how it is. There's only one sprite.
return ..()
/obj/item/weapon/card/id/initialize()
. = ..()
var/datum/job/J = job_master.GetJob(rank)
@@ -100,7 +100,7 @@
user.put_in_hands(S)
else
visible_message("[user] starts compacting the snowball.", "You start compacting the snowball.")
if(do_after(user, 2000))
if(do_after(user, 2 SECONDS))
var/atom/S = new /obj/item/weapon/material/snow/snowball/reinforced(user.loc)
del(src)
user.put_in_hands(S)
@@ -108,6 +108,6 @@
/obj/item/weapon/material/snow/snowball/reinforced
name = "snowball"
desc = "A well-formed and fun snowball. It looks kind of dangerous."
icon_state = "snowball-reinf"
//icon_state = "reinf-snowball"
force_divisor = 0.20
thrown_force_divisor = 0.25
thrown_force_divisor = 0.25
@@ -8,7 +8,7 @@
icon = 'icons/obj/clothing/backpack.dmi'
icon_state = "backpack"
sprite_sheets = list(
"Teshari" = 'icons/mob/species/seromi/back.dmi'
SPECIES_TESHARI = 'icons/mob/species/seromi/back.dmi'
)
w_class = ITEMSIZE_LARGE
slot_flags = SLOT_BACK
@@ -8,7 +8,7 @@
max_w_class = ITEMSIZE_NORMAL
slot_flags = SLOT_BELT
attack_verb = list("whipped", "lashed", "disciplined")
sprite_sheets = list("Teshari" = 'icons/mob/species/seromi/belt.dmi')
sprite_sheets = list(SPECIES_TESHARI = 'icons/mob/species/seromi/belt.dmi')
var/show_above_suit = 0
@@ -22,6 +22,16 @@
show_above_suit = !show_above_suit
update_icon()
//Some belts have sprites to show icons
/obj/item/weapon/storage/belt/make_worn_icon(var/body_type,var/slot_name,var/inhands,var/default_icon,var/default_layer = 0)
var/image/standing = ..()
if(!inhands && contents.len)
for(var/obj/item/i in contents)
var/i_state = i.item_state
if(!i_state) i_state = i.icon_state
standing.add_overlay(image(icon = INV_BELT_DEF_ICON, icon_state = i_state))
return standing
/obj/item/weapon/storage/update_icon()
if (ismob(src.loc))
var/mob/M = src.loc
@@ -23,7 +23,7 @@
name = "box"
desc = "It's just an ordinary box."
icon_state = "box"
item_state_slots = list(slot_r_hand_str = "syringe_kit", slot_l_hand_str = "syringe_kit")
item_state = "syringe_kit"
var/foldable = /obj/item/stack/material/cardboard // BubbleWrap - if set, can be folded (when empty) into a sheet of cardboard
max_w_class = ITEMSIZE_SMALL
max_storage_space = INVENTORY_BOX_SPACE
@@ -354,12 +354,10 @@
//such as when picking up all the items on a tile with one click.
/obj/item/weapon/storage/proc/handle_item_insertion(obj/item/W as obj, prevent_warning = 0)
if(!istype(W)) return 0
if(usr)
usr.remove_from_mob(W)
usr.update_icons() //update our overlays
W.forceMove(src)
W.on_enter_storage(src)
if(usr)
usr.remove_from_mob(W,target = src) //If given a target, handles forceMove()
W.on_enter_storage(src)
if (usr.client && usr.s_active != src)
usr.client.screen -= W
W.dropped(usr)
@@ -377,6 +375,10 @@
src.orient2hud(usr)
if(usr.s_active)
usr.s_active.show_to(usr)
else
W.forceMove(src)
W.on_enter_storage(src)
update_icon()
return 1
@@ -63,6 +63,12 @@
T.dismantle_wall(1)
qdel(src)
/obj/item/weapon/syndie/c4explosive/attackby(obj/item/weapon/W, mob/user)
if(istype(W, /obj/item/weapon/flame/lighter/zippo/c4detonator))
var/obj/item/weapon/flame/lighter/zippo/c4detonator/D = W
D.bomb = src
return
..()
/*Detonator, disguised as a lighter*/
/*Click it when closed to open, when open to bring up a prompt asking you if you want to close it or press the button.*/
@@ -8,7 +8,7 @@ var/list/global/tank_gauge_cache = list()
name = "tank"
icon = 'icons/obj/tank.dmi'
sprite_sheets = list(
"Teshari" = 'icons/mob/species/seromi/back.dmi'
SPECIES_TESHARI = 'icons/mob/species/seromi/back.dmi'
)
var/gauge_icon = "indicator_tank"
+1 -1
View File
@@ -236,7 +236,7 @@
..()
/obj/item/weapon/wirecutters/attack(mob/living/carbon/C as mob, mob/user as mob)
if(user.a_intent == I_HELP && (C.handcuffed) && (istype(C.handcuffed, /obj/item/weapon/handcuffs/cable)))
if(istype(C) && user.a_intent == I_HELP && (C.handcuffed) && (istype(C.handcuffed, /obj/item/weapon/handcuffs/cable)))
usr.visible_message("\The [usr] cuts \the [C]'s restraints with \the [src]!",\
"You cut \the [C]'s restraints with \the [src]!",\
"You hear cable being cut.")
+138
View File
@@ -0,0 +1,138 @@
/obj/random
name = "random object"
desc = "This item type is used to spawn random objects at round-start"
icon = 'icons/misc/mark.dmi'
icon_state = "rup"
var/spawn_nothing_percentage = 0 // this variable determines the likelyhood that this random object will not spawn anything
// creates a new object and deletes itself
/obj/random/New()
..()
spawn()
if(istype(src.loc, /obj/structure/loot_pile)) //Spawning from a lootpile is weird, need to wait until we're out of it to do our work.
while(istype(src.loc, /obj/structure/loot_pile))
sleep(1)
if (!prob(spawn_nothing_percentage))
spawn_item()
qdel(src)
// this function should return a specific item to spawn
/obj/random/proc/item_to_spawn()
return 0
// creates the random item
/obj/random/proc/spawn_item()
var/build_path = item_to_spawn()
var/atom/A = new build_path(src.loc)
if(pixel_x || pixel_y)
A.pixel_x = pixel_x
A.pixel_y = pixel_y
var/list/random_junk_
var/list/random_useful_
/proc/get_random_useful_type()
if(!random_useful_)
random_useful_ = subtypesof(/obj/item/weapon/pen/crayon)
random_useful_ += /obj/item/weapon/pen
random_useful_ += /obj/item/weapon/pen/blue
random_useful_ += /obj/item/weapon/pen/red
random_useful_ += /obj/item/weapon/pen/multi
random_useful_ += /obj/item/weapon/storage/box/matches
random_useful_ += /obj/item/stack/material/cardboard
return pick(random_useful_)
/proc/get_random_junk_type()
if(prob(20)) // Misc. clutter
return /obj/effect/decal/cleanable/generic
if(prob(70)) // Misc. junk
if(!random_junk_)
random_junk_ = subtypesof(/obj/item/trash)
random_junk_ += typesof(/obj/item/weapon/cigbutt)
random_junk_ += /obj/effect/decal/cleanable/spiderling_remains
random_junk_ += /obj/effect/decal/remains/mouse
random_junk_ += /obj/effect/decal/remains/robot
random_junk_ += /obj/item/weapon/paper/crumpled
random_junk_ += /obj/item/inflatable/torn
random_junk_ += /obj/effect/decal/cleanable/molten_item
random_junk_ += /obj/item/weapon/material/shard
random_junk_ -= /obj/item/trash/plate
random_junk_ -= /obj/item/trash/snack_bowl
random_junk_ -= /obj/item/trash/syndi_cakes
random_junk_ -= /obj/item/trash/tray
return pick(random_junk_)
// Misc. actually useful stuff
return get_random_useful_type()
/////////////////////////////////////////////////////////////////////////
/obj/random/single
name = "randomly spawned object"
desc = "This item type is used to randomly spawn a given object at round-start"
icon_state = "x3"
var/spawn_object = null
/obj/random/single/item_to_spawn()
return ispath(spawn_object) ? spawn_object : text2path(spawn_object)
//Multiple Object Spawn
/obj/random/multiple
/obj/random/multiple/spawn_item()
var/list/things_to_make = item_to_spawn()
for(var/new_type in things_to_make)
new new_type(src.loc)
/*
// Multi Point Spawn
// Selects one spawn point out of a group of points with the same ID and asks it to generate its items
*/
var/list/multi_point_spawns
/obj/random_multi
name = "random object spawn point"
desc = "This item type is used to spawn random objects at round-start. Only one spawn point for a given group id is selected."
icon = 'icons/misc/mark.dmi'
icon_state = "x3"
invisibility = INVISIBILITY_MAXIMUM
var/id // Group id
var/weight // Probability weight for this spawn point
/obj/random_multi/initialize()
. = ..()
weight = max(1, round(weight))
if(!multi_point_spawns)
multi_point_spawns = list()
var/list/spawnpoints = multi_point_spawns[id]
if(!spawnpoints)
spawnpoints = list()
multi_point_spawns[id] = spawnpoints
spawnpoints[src] = weight
/obj/random_multi/Destroy()
var/list/spawnpoints = multi_point_spawns[id]
spawnpoints -= src
if(!spawnpoints.len)
multi_point_spawns -= id
. = ..()
/obj/random_multi/proc/generate_items()
return
/obj/random_multi/single_item
var/item_path // Item type to spawn
/obj/random_multi/single_item/generate_items()
new item_path(loc)
/hook/roundstart/proc/generate_multi_spawn_items()
for(var/id in multi_point_spawns)
var/list/spawn_points = multi_point_spawns[id]
var/obj/random_multi/rm = pickweight(spawn_points)
rm.generate_items()
for(var/entry in spawn_points)
qdel(entry)
return 1
+129
View File
@@ -0,0 +1,129 @@
/obj/random/energy
name = "Random Energy Weapon"
desc = "This is a random security weapon."
icon = 'icons/obj/gun.dmi'
icon_state = "energykill100"
/obj/random/energy/item_to_spawn()
return pick(prob(3);/obj/item/weapon/gun/energy/laser,
prob(4);/obj/item/weapon/gun/energy/gun,
prob(3);/obj/item/weapon/gun/energy/gun/burst,
prob(1);/obj/item/weapon/gun/energy/gun/nuclear,
prob(2);/obj/item/weapon/gun/energy/retro,
prob(2);/obj/item/weapon/gun/energy/lasercannon,
prob(3);/obj/item/weapon/gun/energy/xray,
prob(1);/obj/item/weapon/gun/energy/sniperrifle,
prob(1);/obj/item/weapon/gun/energy/plasmastun,
prob(2);/obj/item/weapon/gun/energy/ionrifle,
prob(2);/obj/item/weapon/gun/energy/ionrifle/pistol,
prob(3);/obj/item/weapon/gun/energy/toxgun,
prob(4);/obj/item/weapon/gun/energy/taser,
prob(2);/obj/item/weapon/gun/energy/crossbow/largecrossbow,
prob(4);/obj/item/weapon/gun/energy/stunrevolver)
/obj/random/energy/sec
name = "Random Security Energy Weapon"
desc = "This is a random security weapon."
icon = 'icons/obj/gun.dmi'
icon_state = "energykill100"
/obj/random/energy/sec/item_to_spawn()
return pick(prob(2);/obj/item/weapon/gun/energy/laser,
prob(2);/obj/item/weapon/gun/energy/gun)
/obj/random/projectile
name = "Random Projectile Weapon"
desc = "This is a random projectile weapon."
icon = 'icons/obj/gun.dmi'
icon_state = "revolver"
/obj/random/projectile/item_to_spawn()
return pick(prob(3);/obj/item/weapon/gun/projectile/automatic/wt550,
prob(3);/obj/item/weapon/gun/projectile/automatic/mini_uzi,
prob(3);/obj/item/weapon/gun/projectile/automatic/tommygun,
prob(2);/obj/item/weapon/gun/projectile/automatic/c20r,
prob(2);/obj/item/weapon/gun/projectile/automatic/sts35,
prob(2);/obj/item/weapon/gun/projectile/automatic/z8,
prob(4);/obj/item/weapon/gun/projectile/colt,
prob(2);/obj/item/weapon/gun/projectile/deagle,
prob(1);/obj/item/weapon/gun/projectile/deagle/camo,
prob(1);/obj/item/weapon/gun/projectile/deagle/gold,
prob(3);/obj/item/weapon/gun/projectile/derringer,
prob(1);/obj/item/weapon/gun/projectile/heavysniper,
prob(4);/obj/item/weapon/gun/projectile/luger,
prob(3);/obj/item/weapon/gun/projectile/luger/brown,
prob(4);/obj/item/weapon/gun/projectile/sec,
prob(3);/obj/item/weapon/gun/projectile/sec/wood,
prob(4);/obj/item/weapon/gun/projectile/p92x,
prob(3);/obj/item/weapon/gun/projectile/p92x/brown,
prob(4);/obj/item/weapon/gun/projectile/pistol,
prob(5);/obj/item/weapon/gun/projectile/pirate,
prob(2);/obj/item/weapon/gun/projectile/revolver,
prob(4);/obj/item/weapon/gun/projectile/revolver/deckard,
prob(4);/obj/item/weapon/gun/projectile/revolver/detective,
prob(2);/obj/item/weapon/gun/projectile/revolver/judge,
prob(3);/obj/item/weapon/gun/projectile/revolver/lemat,
prob(2);/obj/item/weapon/gun/projectile/revolver/mateba,
prob(4);/obj/item/weapon/gun/projectile/shotgun/doublebarrel,
prob(3);/obj/item/weapon/gun/projectile/shotgun/doublebarrel/sawn,
prob(3);/obj/item/weapon/gun/projectile/shotgun/pump,
prob(2);/obj/item/weapon/gun/projectile/shotgun/pump/combat,
prob(4);/obj/item/weapon/gun/projectile/shotgun/pump/rifle,
prob(3);/obj/item/weapon/gun/projectile/shotgun/pump/rifle/lever,
prob(2);/obj/item/weapon/gun/projectile/silenced)
/obj/random/projectile/sec
name = "Random Security Projectile Weapon"
desc = "This is a random security weapon."
icon = 'icons/obj/gun.dmi'
icon_state = "revolver"
/obj/random/projectile/sec/item_to_spawn()
return pick(prob(3);/obj/item/weapon/gun/projectile/shotgun/pump,
prob(2);/obj/item/weapon/gun/projectile/automatic/wt550,
prob(1);/obj/item/weapon/gun/projectile/shotgun/pump/combat)
/obj/random/handgun
name = "Random Handgun"
desc = "This is a random sidearm."
icon = 'icons/obj/gun.dmi'
icon_state = "secgundark"
/obj/random/handgun/item_to_spawn()
return pick(prob(4);/obj/item/weapon/gun/projectile/sec,
prob(4);/obj/item/weapon/gun/projectile/p92x,
prob(3);/obj/item/weapon/gun/projectile/sec/wood,
prob(3);/obj/item/weapon/gun/projectile/p92x/brown,
prob(3);/obj/item/weapon/gun/projectile/colt,
prob(2);/obj/item/weapon/gun/projectile/luger,
prob(2);/obj/item/weapon/gun/energy/gun,
prob(2);/obj/item/weapon/gun/projectile/pistol,
prob(1);/obj/item/weapon/gun/energy/retro,
prob(1);/obj/item/weapon/gun/projectile/luger/brown)
/obj/random/handgun/sec
name = "Random Security Handgun"
desc = "This is a random security sidearm."
icon = 'icons/obj/gun.dmi'
icon_state = "secgundark"
/obj/random/handgun/sec/item_to_spawn()
return pick(prob(3);/obj/item/weapon/gun/projectile/sec,
prob(1);/obj/item/weapon/gun/projectile/sec/wood)
/obj/random/ammo
name = "Random Ammunition"
desc = "This is random security ammunition."
icon = 'icons/obj/ammo.dmi'
icon_state = "45-10"
/obj/random/ammo/item_to_spawn()
return pick(prob(6);/obj/item/weapon/storage/box/beanbags,
prob(2);/obj/item/weapon/storage/box/shotgunammo,
prob(4);/obj/item/weapon/storage/box/shotgunshells,
prob(1);/obj/item/weapon/storage/box/stunshells,
prob(2);/obj/item/ammo_magazine/m45,
prob(4);/obj/item/ammo_magazine/m45/rubber,
prob(4);/obj/item/ammo_magazine/m45/flash,
prob(2);/obj/item/ammo_magazine/m9mmt,
prob(6);/obj/item/ammo_magazine/m9mmt/rubber)
+314
View File
@@ -0,0 +1,314 @@
/obj/random/maintenance //Clutter and loot for maintenance and away missions
name = "random maintenance item"
desc = "This is a random maintenance item."
icon = 'icons/obj/items.dmi'
icon_state = "gift1"
/obj/random/maintenance/item_to_spawn()
return pick(prob(300);/obj/random/tech_supply,
prob(200);/obj/random/medical,
prob(100);/obj/random/firstaid,
prob(10);/obj/random/contraband,
prob(50);/obj/random/action_figure,
prob(50);/obj/random/plushie,
prob(200);/obj/random/junk,
prob(200);/obj/random/material,
prob(50);/obj/random/toy,
prob(100);/obj/random/tank,
prob(50);/obj/random/soap,
prob(60);/obj/random/drinkbottle,
prob(500);/obj/random/maintenance/clean)
/obj/random/maintenance/clean
/*Maintenance loot lists without the trash, for use inside things.
Individual items to add to the maintenance list should go here, if you add
something, make sure it's not in one of the other lists.*/
name = "random clean maintenance item"
desc = "This is a random clean maintenance item."
icon = 'icons/obj/items.dmi'
icon_state = "gift1"
/obj/random/maintenance/clean/item_to_spawn()
return pick(prob(10);/obj/random/contraband,
prob(2);/obj/item/device/flashlight/flare,
prob(2);/obj/item/device/flashlight/glowstick,
prob(2);/obj/item/device/flashlight/glowstick/blue,
prob(1);/obj/item/device/flashlight/glowstick/orange,
prob(1);/obj/item/device/flashlight/glowstick/red,
prob(1);/obj/item/device/flashlight/glowstick/yellow,
prob(1);/obj/item/device/flashlight/pen,
prob(4);/obj/item/weapon/cell,
prob(4);/obj/item/weapon/cell/device,
prob(3);/obj/item/weapon/cell/high,
prob(2);/obj/item/weapon/cell/super,
prob(5);/obj/random/cigarettes,
prob(3);/obj/item/clothing/mask/gas,
prob(2);/obj/item/clothing/mask/gas/half,
prob(4);/obj/item/clothing/mask/breath,
prob(2);/obj/item/weapon/reagent_containers/glass/rag,
prob(4);/obj/item/weapon/reagent_containers/food/snacks/liquidfood,
prob(2);/obj/item/weapon/storage/secure/briefcase,
prob(4);/obj/item/weapon/storage/briefcase,
prob(5);/obj/item/weapon/storage/backpack,
prob(5);/obj/item/weapon/storage/backpack/satchel/norm,
prob(4);/obj/item/weapon/storage/backpack/satchel,
prob(3);/obj/item/weapon/storage/backpack/dufflebag,
prob(1);/obj/item/weapon/storage/backpack/dufflebag/syndie,
prob(5);/obj/item/weapon/storage/box,
prob(3);/obj/item/weapon/storage/box/donkpockets,
prob(2);/obj/item/weapon/storage/box/sinpockets,
prob(1);/obj/item/weapon/storage/box/cups,
prob(3);/obj/item/weapon/storage/box/mousetraps,
prob(3);/obj/item/weapon/storage/wallet,
prob(1);/obj/item/device/paicard,
prob(2);/obj/item/clothing/shoes/galoshes,
prob(1);/obj/item/clothing/shoes/syndigaloshes,
prob(4);/obj/item/clothing/shoes/black,
prob(4);/obj/item/clothing/shoes/laceup,
prob(4);/obj/item/clothing/shoes/black,
prob(4);/obj/item/clothing/shoes/leather,
prob(1);/obj/item/clothing/gloves/yellow,
prob(3);/obj/item/clothing/gloves/botanic_leather,
prob(2);/obj/item/clothing/gloves/sterile/latex,
prob(5);/obj/item/clothing/gloves/white,
prob(5);/obj/item/clothing/gloves/rainbow,
prob(2);/obj/item/clothing/gloves/fyellow,
prob(1);/obj/item/clothing/glasses/sunglasses,
prob(3);/obj/item/clothing/glasses/meson,
prob(2);/obj/item/clothing/glasses/meson/prescription,
prob(1);/obj/item/clothing/glasses/welding,
prob(1);/obj/item/clothing/head/bio_hood/general,
prob(4);/obj/item/clothing/head/hardhat,
prob(3);/obj/item/clothing/head/hardhat/red,
prob(1);/obj/item/clothing/head/ushanka,
prob(2);/obj/item/clothing/head/welding,
prob(4);/obj/item/clothing/suit/storage/hazardvest,
prob(1);/obj/item/clothing/suit/space/emergency,
prob(3);/obj/item/clothing/suit/storage/toggle/bomber,
prob(1);/obj/item/clothing/suit/bio_suit/general,
prob(3);/obj/item/clothing/suit/storage/toggle/hoodie/black,
prob(3);/obj/item/clothing/suit/storage/toggle/hoodie/blue,
prob(3);/obj/item/clothing/suit/storage/toggle/hoodie/red,
prob(3);/obj/item/clothing/suit/storage/toggle/hoodie/yellow,
prob(3);/obj/item/clothing/suit/storage/toggle/brown_jacket,
prob(3);/obj/item/clothing/suit/storage/toggle/leather_jacket,
prob(1);/obj/item/clothing/suit/storage/vest/press,
prob(3);/obj/item/clothing/suit/storage/apron,
prob(4);/obj/item/clothing/under/color/grey,
prob(2);/obj/item/clothing/under/syndicate/tacticool,
prob(2);/obj/item/clothing/under/pants/camo,
prob(1);/obj/item/clothing/under/harness,
prob(1);/obj/item/clothing/under/tactical,
prob(3);/obj/item/clothing/accessory/storage/webbing,
prob(4);/obj/item/weapon/spacecash/c1,
prob(3);/obj/item/weapon/spacecash/c10,
prob(3);/obj/item/weapon/spacecash/c20,
prob(1);/obj/item/weapon/spacecash/c50,
prob(1);/obj/item/weapon/spacecash/c100,
prob(3);/obj/item/weapon/camera_assembly,
prob(4);/obj/item/weapon/caution,
prob(3);/obj/item/weapon/caution/cone,
prob(1);/obj/item/weapon/card/emag_broken,
prob(2);/obj/item/device/camera,
prob(3);/obj/item/device/pda,
prob(3);/obj/item/device/radio/headset)
/obj/random/maintenance/security
/*Maintenance loot list. This one is for around security areas*/
name = "random security maintenance item"
desc = "This is a random security maintenance item."
icon = 'icons/obj/items.dmi'
icon_state = "gift1"
/obj/random/maintenance/security/item_to_spawn()
return pick(prob(320);/obj/random/maintenance/clean,
prob(2);/obj/item/device/flashlight/maglight,
prob(2);/obj/item/device/flash,
prob(1);/obj/item/weapon/cell/device/weapon,
prob(1);/obj/item/clothing/mask/gas/swat,
prob(1);/obj/item/clothing/mask/gas/syndicate,
prob(2);/obj/item/clothing/mask/balaclava,
prob(1);/obj/item/clothing/mask/balaclava/tactical,
prob(3);/obj/item/weapon/storage/backpack/security,
prob(3);/obj/item/weapon/storage/backpack/satchel/sec,
prob(2);/obj/item/weapon/storage/backpack/messenger/sec,
prob(2);/obj/item/weapon/storage/backpack/dufflebag/sec,
prob(1);/obj/item/weapon/storage/backpack/dufflebag/syndie/ammo,
prob(1);/obj/item/weapon/storage/backpack/dufflebag/syndie/med,
prob(2);/obj/item/weapon/storage/box/swabs,
prob(2);/obj/item/weapon/storage/belt/security,
prob(1);/obj/item/weapon/grenade/flashbang,
prob(1);/obj/item/weapon/melee/baton,
prob(1);/obj/item/weapon/reagent_containers/spray/pepper,
prob(3);/obj/item/clothing/shoes/boots/jackboots,
prob(1);/obj/item/clothing/shoes/boots/swat,
prob(1);/obj/item/clothing/shoes/boots/combat,
prob(1);/obj/item/clothing/gloves/swat,
prob(1);/obj/item/clothing/gloves/combat,
prob(1);/obj/item/clothing/glasses/sunglasses/big,
prob(2);/obj/item/clothing/glasses/hud/security,
prob(1);/obj/item/clothing/glasses/sunglasses/sechud,
prob(1);/obj/item/clothing/glasses/sunglasses/sechud/aviator,
prob(1);/obj/item/clothing/glasses/sunglasses/sechud/tactical,
prob(3);/obj/item/clothing/head/beret/sec,
prob(3);/obj/item/clothing/head/beret/sec/corporate/officer,
prob(3);/obj/item/clothing/head/beret/sec/navy/officer,
prob(2);/obj/item/clothing/head/helmet,
prob(4);/obj/item/clothing/head/soft/sec,
prob(4);/obj/item/clothing/head/soft/sec/corp,
prob(3);/obj/item/clothing/suit/armor/vest,
prob(2);/obj/item/clothing/suit/armor/vest/security,
prob(2);/obj/item/clothing/suit/storage/vest/officer,
prob(1);/obj/item/clothing/suit/storage/vest/detective,
prob(1);/obj/item/clothing/suit/storage/vest/press,
prob(2);/obj/item/clothing/accessory/storage/black_vest,
prob(2);/obj/item/clothing/accessory/storage/black_drop_pouches,
prob(1);/obj/item/clothing/accessory/holster/leg,
prob(1);/obj/item/clothing/accessory/holster/hip,
prob(1);/obj/item/clothing/accessory/holster/waist,
prob(1);/obj/item/clothing/accessory/holster/armpit,
prob(2);/obj/item/clothing/ears/earmuffs,
prob(2);/obj/item/weapon/handcuffs,)
/obj/random/maintenance/medical
/*Maintenance loot list. This one is for around medical areas*/
name = "random medical maintenance item"
desc = "This is a random medical maintenance item."
icon = 'icons/obj/items.dmi'
icon_state = "gift1"
/obj/random/maintenance/medical/item_to_spawn()
return pick(prob(320);/obj/random/maintenance/clean,
prob(25);/obj/random/medical/lite,
prob(2);/obj/item/clothing/mask/breath/medical,
prob(2);/obj/item/clothing/mask/surgical,
prob(5);/obj/item/weapon/storage/backpack/medic,
prob(5);/obj/item/weapon/storage/backpack/satchel/med,
prob(5);/obj/item/weapon/storage/backpack/messenger/med,
prob(3);/obj/item/weapon/storage/backpack/dufflebag/med,
prob(1);/obj/item/weapon/storage/backpack/dufflebag/syndie/med,
prob(2);/obj/item/weapon/storage/box/autoinjectors,
prob(3);/obj/item/weapon/storage/box/beakers,
prob(2);/obj/item/weapon/storage/box/bodybags,
prob(3);/obj/item/weapon/storage/box/syringes,
prob(3);/obj/item/weapon/storage/box/gloves,
prob(2);/obj/item/weapon/storage/belt/medical/emt,
prob(2);/obj/item/weapon/storage/belt/medical,
prob(1);/obj/item/clothing/shoes/boots/combat,
prob(3);/obj/item/clothing/shoes/white,
prob(2);/obj/item/clothing/gloves/sterile/nitrile,
prob(5);/obj/item/clothing/gloves/white,
prob(2);/obj/item/clothing/glasses/hud/health,
prob(1);/obj/item/clothing/glasses/hud/health/prescription,
prob(1);/obj/item/clothing/head/bio_hood/virology,
prob(4);/obj/item/clothing/suit/storage/toggle/labcoat,
prob(1);/obj/item/clothing/suit/bio_suit/general,
prob(2);/obj/item/clothing/under/rank/medical/paramedic,
prob(2);/obj/item/clothing/accessory/storage/black_vest,
prob(2);/obj/item/clothing/accessory/storage/white_vest,
prob(1);/obj/item/clothing/accessory/storage/white_drop_pouches,
prob(1);/obj/item/clothing/accessory/storage/black_drop_pouches,
prob(2);/obj/item/clothing/accessory/stethoscope)
/obj/random/maintenance/engineering
/*Maintenance loot list. This one is for around medical areas*/
name = "random engineering maintenance item"
desc = "This is a random engineering maintenance item."
icon = 'icons/obj/items.dmi'
icon_state = "gift1"
/obj/random/maintenance/engineering/item_to_spawn()
return pick(prob(320);/obj/random/maintenance/clean,
prob(2);/obj/item/device/flashlight/maglight,
prob(3);/obj/item/clothing/mask/gas/half,
prob(2);/obj/item/clothing/mask/balaclava,
prob(2);/obj/item/weapon/storage/briefcase/inflatable,
prob(5);/obj/item/weapon/storage/backpack/industrial,
prob(5);/obj/item/weapon/storage/backpack/satchel/eng,
prob(5);/obj/item/weapon/storage/backpack/messenger/engi,
prob(3);/obj/item/weapon/storage/backpack/dufflebag/eng,
prob(5);/obj/item/weapon/storage/box,
prob(2);/obj/item/weapon/storage/belt/utility/full,
prob(3);/obj/item/weapon/storage/belt/utility,
prob(3);/obj/item/clothing/head/beret/engineering,
prob(3);/obj/item/clothing/head/soft/yellow,
prob(2);/obj/item/clothing/head/orangebandana,
prob(2);/obj/item/clothing/head/hardhat/dblue,
prob(2);/obj/item/clothing/head/hardhat/orange,
prob(1);/obj/item/clothing/glasses/welding,
prob(2);/obj/item/clothing/head/welding,
prob(4);/obj/item/clothing/suit/storage/hazardvest,
prob(2);/obj/item/clothing/under/overalls,
prob(3);/obj/item/clothing/shoes/boots/workboots,
prob(1);/obj/item/clothing/shoes/magboots,
prob(2);/obj/item/clothing/accessory/storage/black_vest,
prob(2);/obj/item/clothing/accessory/storage/brown_vest,
prob(1);/obj/item/clothing/accessory/storage/brown_drop_pouches,
prob(3);/obj/item/clothing/ears/earmuffs,
prob(1);/obj/item/weapon/beartrap,
prob(2);/obj/item/weapon/handcuffs)
/obj/random/maintenance/research
/*Maintenance loot list. This one is for around medical areas*/
name = "random research maintenance item"
desc = "This is a random research maintenance item."
icon = 'icons/obj/items.dmi'
icon_state = "gift1"
/obj/random/maintenance/research/item_to_spawn()
return pick(prob(320);/obj/random/maintenance/clean,
prob(3);/obj/item/device/analyzer/plant_analyzer,
prob(1);/obj/item/device/flash/synthetic,
prob(2);/obj/item/weapon/bucket_sensor,
prob(1);/obj/item/weapon/cell/device/weapon,
prob(5);/obj/item/weapon/storage/backpack/toxins,
prob(5);/obj/item/weapon/storage/backpack/satchel/tox,
prob(5);/obj/item/weapon/storage/backpack/messenger/tox,
prob(2);/obj/item/weapon/storage/excavation,
prob(1);/obj/item/weapon/storage/backpack/holding,
prob(3);/obj/item/weapon/storage/box/beakers,
prob(3);/obj/item/weapon/storage/box/syringes,
prob(3);/obj/item/weapon/storage/box/gloves,
prob(2);/obj/item/clothing/gloves/sterile/latex,
prob(4);/obj/item/clothing/glasses/science,
prob(3);/obj/item/clothing/glasses/material,
prob(1);/obj/item/clothing/head/beret/purple,
prob(1);/obj/item/clothing/head/bio_hood/scientist,
prob(4);/obj/item/clothing/suit/storage/toggle/labcoat,
prob(4);/obj/item/clothing/suit/storage/toggle/labcoat/science,
prob(1);/obj/item/clothing/suit/bio_suit/scientist,
prob(4);/obj/item/clothing/under/rank/scientist,
prob(2);/obj/item/clothing/under/rank/scientist_new)
/obj/random/maintenance/cargo
/*Maintenance loot list. This one is for around cargo areas*/
name = "random cargo maintenance item"
desc = "This is a random cargo maintenance item."
icon = 'icons/obj/items.dmi'
icon_state = "gift1"
/obj/random/maintenance/cargo/item_to_spawn()
return pick(prob(320);/obj/random/maintenance/clean,
prob(3);/obj/item/device/flashlight/lantern,
prob(4);/obj/item/weapon/pickaxe,
prob(5);/obj/item/weapon/storage/backpack/industrial,
prob(5);/obj/item/weapon/storage/backpack/satchel/norm,
prob(3);/obj/item/weapon/storage/backpack/dufflebag,
prob(1);/obj/item/weapon/storage/backpack/dufflebag/syndie/ammo,
prob(1);/obj/item/weapon/storage/toolbox/syndicate,
prob(1);/obj/item/weapon/storage/belt/utility/full,
prob(2);/obj/item/weapon/storage/belt/utility,
prob(4);/obj/item/device/toner,
prob(1);/obj/item/device/destTagger,
prob(3);/obj/item/clothing/glasses/material,
prob(3);/obj/item/clothing/head/soft/yellow,
prob(4);/obj/item/clothing/suit/storage/hazardvest,
prob(3);/obj/item/clothing/suit/storage/apron/overalls,
prob(4);/obj/item/clothing/suit/storage/apron,
prob(2);/obj/item/clothing/under/syndicate/tacticool,
prob(1);/obj/item/clothing/under/syndicate/combat,
prob(2);/obj/item/clothing/accessory/storage/black_vest,
prob(2);/obj/item/clothing/accessory/storage/brown_vest,
prob(3);/obj/item/clothing/ears/earmuffs,
prob(1);/obj/item/weapon/beartrap,
prob(2);/obj/item/weapon/handcuffs,)
+395
View File
@@ -0,0 +1,395 @@
/*
// Least descriptive filename?
// This is where all of the things that aren't really loot should go.
// Barricades, mines, etc.
*/
/obj/random/junk //Broken items, or stuff that could be picked up
name = "random junk"
desc = "This is some random junk."
icon = 'icons/obj/trash.dmi'
icon_state = "trashbag3"
/obj/random/junk/item_to_spawn()
return get_random_junk_type()
/obj/random/trash //Mostly remains and cleanable decals. Stuff a janitor could clean up
name = "random trash"
desc = "This is some random trash."
icon = 'icons/effects/effects.dmi'
icon_state = "greenglow"
/obj/random/trash/item_to_spawn()
return pick(/obj/effect/decal/remains/lizard,
/obj/effect/decal/cleanable/blood/gibs/robot,
/obj/effect/decal/cleanable/blood/oil,
/obj/effect/decal/cleanable/blood/oil/streak,
/obj/effect/decal/cleanable/spiderling_remains,
/obj/effect/decal/remains/mouse,
/obj/effect/decal/cleanable/vomit,
/obj/effect/decal/cleanable/blood/splatter,
/obj/effect/decal/cleanable/ash,
/obj/effect/decal/cleanable/generic,
/obj/effect/decal/cleanable/flour,
/obj/effect/decal/cleanable/dirt,
/obj/effect/decal/remains/robot)
/obj/random/obstruction //Large objects to block things off in maintenance
name = "random obstruction"
desc = "This is a random obstruction."
icon = 'icons/obj/cult.dmi'
icon_state = "cultgirder"
/obj/random/obstruction/item_to_spawn()
return pick(/obj/structure/barricade,
/obj/structure/girder,
/obj/structure/girder/displaced,
/obj/structure/girder/reinforced,
/obj/structure/grille,
/obj/structure/grille/broken,
/obj/structure/foamedmetal,
/obj/structure/inflatable,
/obj/structure/inflatable/door)
/obj/random/landmine
name = "Random Land Mine"
desc = "This is a random land mine."
icon = 'icons/obj/weapons.dmi'
icon_state = "uglymine"
spawn_nothing_percentage = 25
/obj/random/landmine/item_to_spawn()
return pick(prob(30);/obj/effect/mine,
prob(25);/obj/effect/mine/frag,
prob(25);/obj/effect/mine/emp,
prob(10);/obj/effect/mine/stun,
prob(10);/obj/effect/mine/incendiary,)
/obj/random_multi/single_item/captains_spare_id
name = "Multi Point - Captain's Spare"
id = "Captain's spare id"
item_path = /obj/item/weapon/card/id/gold/captain/spare
/obj/random_multi/single_item/sfr_headset
name = "Multi Point - headset"
id = "SFR headset"
item_path = /obj/random/sfr
// This is in here because it's spawned by the SFR Headset randomizer
/obj/random/sfr
name = "random SFR headset"
desc = "This is a headset spawn."
icon = 'icons/misc/mark.dmi'
icon_state = "rup"
/obj/random/sfr/item_to_spawn()
return pick(prob(25);/obj/item/device/radio/headset/heads/captain/sfr,
prob(25);/obj/item/device/radio/headset/headset_cargo/alt,
prob(25);/obj/item/device/radio/headset/headset_com/alt,
prob(25);/obj/item/device/radio/headset)
// Mining Goodies
/obj/random/multiple/minevault
name = "random vault loot"
desc = "Loot for mine vaults."
icon = 'icons/misc/mark.dmi'
icon_state = "rup"
/obj/random/multiple/minevault/item_to_spawn()
return pick(
prob(5);list(
/obj/item/clothing/mask/smokable/pipe,
/obj/item/weapon/reagent_containers/food/drinks/bottle/rum,
/obj/item/weapon/reagent_containers/food/drinks/bottle/whiskey,
/obj/item/weapon/reagent_containers/food/snacks/grown/ambrosiadeus,
/obj/item/weapon/flame/lighter/zippo,
/obj/structure/closet/crate/hydroponics
),
prob(5);list(
/obj/item/weapon/pickaxe/drill,
/obj/item/clothing/suit/space/void/mining,
/obj/item/clothing/head/helmet/space/void/mining,
/obj/structure/closet/crate/engineering
),
prob(5);list(
/obj/item/weapon/pickaxe/drill,
/obj/item/clothing/suit/space/void/mining/alt,
/obj/item/clothing/head/helmet/space/void/mining/alt,
/obj/structure/closet/crate/engineering
),
prob(5);list(
/obj/item/weapon/reagent_containers/glass/beaker/bluespace,
/obj/item/weapon/reagent_containers/glass/beaker/bluespace,
/obj/item/weapon/reagent_containers/glass/beaker/bluespace,
/obj/structure/closet/crate/science
),
prob(5);list(
/obj/item/weapon/ore/diamond,
/obj/item/weapon/ore/diamond,
/obj/item/weapon/ore/diamond,
/obj/item/weapon/ore/diamond,
/obj/item/weapon/ore/diamond,
/obj/item/weapon/ore/diamond,
/obj/item/weapon/ore/diamond,
/obj/item/weapon/ore/diamond,
/obj/item/weapon/ore/diamond,
/obj/item/weapon/ore/diamond,
/obj/item/weapon/ore/gold,
/obj/item/weapon/ore/gold,
/obj/item/weapon/ore/gold,
/obj/item/weapon/ore/gold,
/obj/item/weapon/ore/gold,
/obj/item/weapon/ore/gold,
/obj/item/weapon/ore/gold,
/obj/item/weapon/ore/gold,
/obj/item/weapon/ore/gold,
/obj/item/weapon/ore/gold,
/obj/structure/closet/crate/engineering
),
prob(5);list(
/obj/item/weapon/pickaxe/drill,
/obj/item/clothing/glasses/material,
/obj/structure/ore_box,
/obj/structure/closet/crate
),
prob(5);list(
/obj/item/weapon/reagent_containers/glass/beaker/noreact,
/obj/item/weapon/reagent_containers/glass/beaker/noreact,
/obj/item/weapon/reagent_containers/glass/beaker/noreact,
/obj/structure/closet/crate/science
),
prob(5);list(
/obj/item/weapon/storage/secure/briefcase/money,
/obj/structure/closet/crate/freezer/rations
),
prob(5);list(
/obj/item/clothing/accessory/tie/horrible,
/obj/item/clothing/accessory/tie/horrible,
/obj/item/clothing/accessory/tie/horrible,
/obj/item/clothing/accessory/tie/horrible,
/obj/item/clothing/accessory/tie/horrible,
/obj/item/clothing/accessory/tie/horrible,
/obj/structure/closet/crate
),
prob(5);list(
/obj/item/weapon/melee/baton,
/obj/item/weapon/melee/baton,
/obj/item/weapon/melee/baton,
/obj/item/weapon/melee/baton,
/obj/structure/closet/crate
),
prob(5);list(
/obj/item/clothing/under/shorts/red,
/obj/item/clothing/under/shorts/blue,
/obj/structure/closet/crate
),
prob(2);list(
/obj/item/weapon/melee/baton/cattleprod,
/obj/item/weapon/melee/baton/cattleprod,
/obj/item/weapon/cell/high,
/obj/item/weapon/cell/high,
/obj/structure/closet/crate
),
prob(2);list(
/obj/item/latexballon,
/obj/item/latexballon,
/obj/structure/closet/crate
),
prob(2);list(
/obj/item/toy/syndicateballoon,
/obj/item/toy/syndicateballoon,
/obj/structure/closet/crate
),
prob(2);list(
/obj/item/weapon/rig/industrial/equipped,
/obj/item/weapon/storage/bag/ore,
/obj/structure/closet/crate/engineering
),
prob(2);list(
/obj/item/clothing/head/kitty,
/obj/item/clothing/head/kitty,
/obj/item/clothing/head/kitty,
/obj/item/clothing/head/kitty,
/obj/structure/closet/crate
),
prob(2);list(
/obj/random/coin,
/obj/random/coin,
/obj/random/coin,
/obj/random/coin,
/obj/random/coin,
/obj/structure/closet/crate/plastic
),
prob(2);list(
/obj/random/multiple/voidsuit,
/obj/random/multiple/voidsuit,
/obj/structure/closet/crate/engineering
),
prob(2);list(
/obj/item/clothing/suit/space/syndicate/black/red,
/obj/item/clothing/head/helmet/space/syndicate/black/red,
/obj/item/clothing/suit/space/syndicate/black/red,
/obj/item/clothing/head/helmet/space/syndicate/black/red,
/obj/item/weapon/gun/projectile/automatic/mini_uzi,
/obj/item/weapon/gun/projectile/automatic/mini_uzi,
/obj/item/ammo_magazine/m45uzi,
/obj/item/ammo_magazine/m45uzi,
/obj/item/ammo_magazine/m45uzi/empty,
/obj/item/ammo_magazine/m45uzi/empty,
/obj/structure/closet/crate/plastic
),
prob(2);list(
/obj/item/clothing/suit/ianshirt,
/obj/item/clothing/suit/ianshirt,
/obj/item/weapon/bedsheet/ian,
/obj/structure/closet/crate/plastic
),
prob(2);list(
/obj/item/clothing/suit/armor/vest,
/obj/item/clothing/suit/armor/vest,
/obj/item/weapon/gun/projectile/garand,
/obj/item/weapon/gun/projectile/garand,
/obj/item/ammo_magazine/m762garand,
/obj/item/ammo_magazine/m762garand,
/obj/structure/closet/crate/plastic
),
prob(2);list(
/obj/mecha/working/ripley/mining
),
prob(2);list(
/obj/mecha/working/hoverpod/combatpod
),
prob(2);list(
/obj/item/weapon/pickaxe/silver,
/obj/item/weapon/storage/bag/ore,
/obj/item/clothing/glasses/material,
/obj/structure/closet/crate/engineering
),
prob(2);list(
/obj/item/weapon/pickaxe/drill,
/obj/item/weapon/storage/bag/ore,
/obj/item/clothing/glasses/material,
/obj/structure/closet/crate/engineering
),
prob(2);list(
/obj/item/weapon/pickaxe/jackhammer,
/obj/item/weapon/storage/bag/ore,
/obj/item/clothing/glasses/material,
/obj/structure/closet/crate/engineering
),
prob(2);list(
/obj/item/weapon/pickaxe/diamond,
/obj/item/weapon/storage/bag/ore,
/obj/item/clothing/glasses/material,
/obj/structure/closet/crate/engineering
),
prob(2);list(
/obj/item/weapon/pickaxe/diamonddrill,
/obj/item/weapon/storage/bag/ore,
/obj/item/clothing/glasses/material,
/obj/structure/closet/crate/engineering
),
prob(2);list(
/obj/item/weapon/pickaxe/gold,
/obj/item/weapon/storage/bag/ore,
/obj/item/clothing/glasses/material,
/obj/structure/closet/crate/engineering
),
prob(2);list(
/obj/item/weapon/pickaxe/plasmacutter,
/obj/item/weapon/storage/bag/ore,
/obj/item/clothing/glasses/material,
/obj/structure/closet/crate/engineering
),
prob(2);list(
/obj/item/weapon/material/sword/katana,
/obj/item/weapon/material/sword/katana,
/obj/structure/closet/crate
),
prob(2);list(
/obj/item/weapon/material/sword,
/obj/item/weapon/material/sword,
/obj/structure/closet/crate
),
prob(1);list(
/obj/item/clothing/mask/balaclava,
/obj/item/weapon/material/star,
/obj/item/weapon/material/star,
/obj/item/weapon/material/star,
/obj/item/weapon/material/star,
/obj/structure/closet/crate
),
prob(1);list(
/obj/item/weed_extract,
/obj/item/xenos_claw,
/obj/structure/closet/crate/science
),
prob(1);list(
/obj/item/clothing/head/bearpelt,
/obj/item/clothing/under/soviet,
/obj/item/clothing/under/soviet,
/obj/item/weapon/gun/projectile/shotgun/pump/rifle/ceremonial,
/obj/item/weapon/gun/projectile/shotgun/pump/rifle/ceremonial,
/obj/structure/closet/crate
),
prob(1);list(
/obj/item/weapon/gun/projectile/revolver/detective,
/obj/item/weapon/gun/projectile/contender,
/obj/item/weapon/gun/projectile/p92x,
/obj/item/weapon/gun/projectile/derringer,
/obj/structure/closet/crate
),
prob(1);list(
/obj/item/weapon/melee/cultblade,
/obj/item/clothing/suit/cultrobes,
/obj/item/clothing/head/culthood,
/obj/item/device/soulstone,
/obj/structure/closet/crate
),
prob(1);list(
/obj/item/weapon/vampiric,
/obj/item/weapon/vampiric,
/obj/structure/closet/crate/science
),
prob(1);list(
/obj/item/weapon/archaeological_find
),
prob(1);list(
/obj/item/weapon/melee/energy/sword,
/obj/item/weapon/melee/energy/sword,
/obj/item/weapon/melee/energy/sword,
/obj/item/weapon/shield/energy,
/obj/item/weapon/shield/energy,
/obj/structure/closet/crate/science
),
prob(1);list(
/obj/item/weapon/storage/backpack/clown,
/obj/item/clothing/under/rank/clown,
/obj/item/clothing/shoes/clown_shoes,
/obj/item/device/pda/clown,
/obj/item/clothing/mask/gas/clown_hat,
/obj/item/weapon/bikehorn,
/obj/item/toy/waterflower,
/obj/item/weapon/pen/crayon/rainbow,
/obj/structure/closet/crate
),
prob(1);list(
/obj/item/clothing/under/mime,
/obj/item/clothing/shoes/black,
/obj/item/device/pda/mime,
/obj/item/clothing/gloves/white,
/obj/item/clothing/mask/gas/mime,
/obj/item/clothing/head/beret,
/obj/item/clothing/suit/suspenders,
/obj/item/weapon/pen/crayon/mime,
/obj/item/weapon/reagent_containers/food/drinks/bottle/bottleofnothing,
/obj/structure/closet/crate
),
prob(1);list(
/obj/item/weapon/storage/belt/champion,
/obj/item/clothing/mask/luchador,
/obj/item/clothing/mask/luchador/rudos,
/obj/item/clothing/mask/luchador/tecnicos,
/obj/structure/closet/crate
)
)
+431
View File
@@ -0,0 +1,431 @@
/*
// This is going to get so incredibly bloated.
// But this is where all of the "Loot" goes. Anything fun or useful that doesn't deserve its own file, pile in.
*/
/obj/random/tool
name = "random tool"
desc = "This is a random tool"
icon = 'icons/obj/tools.dmi'
icon_state = "welder"
/obj/random/tool/item_to_spawn()
return pick(/obj/item/weapon/screwdriver,
/obj/item/weapon/wirecutters,
/obj/item/weapon/weldingtool,
/obj/item/weapon/weldingtool/largetank,
/obj/item/weapon/crowbar,
/obj/item/weapon/wrench,
/obj/item/device/flashlight,
/obj/item/device/multitool)
/obj/random/tool/power
name = "random powertool"
desc = "This is a random powertool"
icon_state = "jaws_pry"
/obj/random/tool/power/item_to_spawn()
return pick(/obj/item/weapon/screwdriver/power,
/obj/item/weapon/wirecutters/power,
/obj/item/weapon/weldingtool/electric,
/obj/item/weapon/weldingtool/experimental)
/obj/random/tool/alien
name = "random alien tool"
desc = "This is a random tool"
icon = 'icons/obj/abductor.dmi'
icon_state = "welder"
/obj/random/tool/alien/item_to_spawn()
return pick(/obj/item/weapon/screwdriver/alien,
/obj/item/weapon/wirecutters/alien,
/obj/item/weapon/weldingtool/alien,
/obj/item/weapon/crowbar/alien,
/obj/item/weapon/wrench/alien,
/obj/item/stack/cable_coil/alien,
/obj/item/device/multitool/alien)
/obj/random/technology_scanner
name = "random scanner"
desc = "This is a random technology scanner."
icon = 'icons/obj/device.dmi'
icon_state = "atmos"
/obj/random/technology_scanner/item_to_spawn()
return pick(prob(5);/obj/item/device/t_scanner,
prob(2);/obj/item/device/radio,
prob(5);/obj/item/device/analyzer)
/obj/random/powercell
name = "random powercell"
desc = "This is a random powercell."
icon = 'icons/obj/power.dmi'
icon_state = "cell"
/obj/random/powercell/item_to_spawn()
return pick(prob(40);/obj/item/weapon/cell,
prob(25);/obj/item/weapon/cell/device,
prob(25);/obj/item/weapon/cell/high,
prob(9);/obj/item/weapon/cell/super,
prob(1);/obj/item/weapon/cell/hyper)
/obj/random/bomb_supply
name = "bomb supply"
desc = "This is a random bomb supply."
icon = 'icons/obj/assemblies/new_assemblies.dmi'
icon_state = "signaller"
/obj/random/bomb_supply/item_to_spawn()
return pick(/obj/item/device/assembly/igniter,
/obj/item/device/assembly/prox_sensor,
/obj/item/device/assembly/signaler,
/obj/item/device/assembly/timer,
/obj/item/device/multitool)
/obj/random/toolbox
name = "random toolbox"
desc = "This is a random toolbox."
icon = 'icons/obj/storage.dmi'
icon_state = "red"
/obj/random/toolbox/item_to_spawn()
return pick(prob(6);/obj/item/weapon/storage/toolbox/mechanical,
prob(6);/obj/item/weapon/storage/toolbox/electrical,
prob(2);/obj/item/weapon/storage/toolbox/emergency,
prob(1);/obj/item/weapon/storage/toolbox/syndicate)
/obj/random/tech_supply
name = "random tech supply"
desc = "This is a random piece of technology supplies."
icon = 'icons/obj/power.dmi'
icon_state = "cell"
spawn_nothing_percentage = 25
/obj/random/tech_supply/item_to_spawn()
return pick(prob(3);/obj/random/powercell,
prob(2);/obj/random/technology_scanner,
prob(1);/obj/item/weapon/packageWrap,
prob(2);/obj/random/bomb_supply,
prob(1);/obj/item/weapon/extinguisher,
prob(1);/obj/item/clothing/gloves/fyellow,
prob(3);/obj/item/stack/cable_coil/random,
prob(2);/obj/random/toolbox,
prob(2);/obj/item/weapon/storage/belt/utility,
prob(1);/obj/item/weapon/storage/belt/utility/full,
prob(5);/obj/random/tool,
prob(2);/obj/item/weapon/tape_roll,
prob(2);/obj/item/taperoll/engineering,
prob(1);/obj/item/taperoll/atmos,
prob(1);/obj/item/device/flashlight/maglight)
/obj/random/tech_supply/component
name = "random tech component"
desc = "This is a random machine component."
icon = 'icons/obj/items.dmi'
icon_state = "portable_analyzer"
/obj/random/tech_supply/component/item_to_spawn()
return pick(prob(3);/obj/item/weapon/stock_parts/gear,
prob(2);/obj/item/weapon/stock_parts/console_screen,
prob(1);/obj/item/weapon/stock_parts/spring,
prob(3);/obj/item/weapon/stock_parts/capacitor,
prob(2);/obj/item/weapon/stock_parts/capacitor/adv,
prob(1);/obj/item/weapon/stock_parts/capacitor/super,
prob(3);/obj/item/weapon/stock_parts/manipulator,
prob(2);/obj/item/weapon/stock_parts/manipulator/nano,
prob(1);/obj/item/weapon/stock_parts/manipulator/pico,
prob(3);/obj/item/weapon/stock_parts/matter_bin,
prob(2);/obj/item/weapon/stock_parts/matter_bin/adv,
prob(1);/obj/item/weapon/stock_parts/matter_bin/super,
prob(3);/obj/item/weapon/stock_parts/scanning_module,
prob(2);/obj/item/weapon/stock_parts/scanning_module/adv,
prob(1);/obj/item/weapon/stock_parts/scanning_module/phasic)
/obj/random/medical
name = "Random Medicine"
desc = "This is a random medical item."
icon = 'icons/obj/items.dmi'
icon_state = "traumakit"
/obj/random/medical/item_to_spawn()
return pick(prob(21);/obj/random/medical/lite,
prob(5);/obj/random/medical/pillbottle,
prob(1);/obj/item/weapon/storage/pill_bottle/tramadol,
prob(1);/obj/item/weapon/storage/pill_bottle/antitox,
prob(1);/obj/item/weapon/storage/pill_bottle/carbon,
prob(3);/obj/item/bodybag/cryobag,
prob(5);/obj/item/weapon/reagent_containers/syringe/antitoxin,
prob(3);/obj/item/weapon/reagent_containers/syringe/antiviral,
prob(5);/obj/item/weapon/reagent_containers/syringe/inaprovaline,
prob(1);/obj/item/weapon/reagent_containers/hypospray,
prob(1);/obj/item/weapon/storage/box/freezer,
prob(2);/obj/item/stack/nanopaste)
/obj/random/medical/pillbottle
name = "Random Pill Bottle"
desc = "This is a random pill bottle."
icon = 'icons/obj/chemical.dmi'
icon_state = "pill_canister"
/obj/random/medical/pillbottle/item_to_spawn()
return pick(prob(1);/obj/item/weapon/storage/pill_bottle/spaceacillin,
prob(1);/obj/item/weapon/storage/pill_bottle/dermaline,
prob(1);/obj/item/weapon/storage/pill_bottle/dexalin_plus,
prob(1);/obj/item/weapon/storage/pill_bottle/bicaridine,
prob(1);/obj/item/weapon/storage/pill_bottle/iron)
/obj/random/medical/lite
name = "Random Medicine"
desc = "This is a random simple medical item."
icon = 'icons/obj/items.dmi'
icon_state = "brutepack"
spawn_nothing_percentage = 25
/obj/random/medical/lite/item_to_spawn()
return pick(prob(4);/obj/item/stack/medical/bruise_pack,
prob(4);/obj/item/stack/medical/ointment,
prob(2);/obj/item/stack/medical/advanced/bruise_pack,
prob(2);/obj/item/stack/medical/advanced/ointment,
prob(1);/obj/item/stack/medical/splint,
prob(4);/obj/item/device/healthanalyzer,
prob(1);/obj/item/bodybag,
prob(3);/obj/item/weapon/reagent_containers/hypospray/autoinjector,
prob(2);/obj/item/weapon/storage/pill_bottle/kelotane,
prob(2);/obj/item/weapon/storage/pill_bottle/antitox)
/obj/random/firstaid
name = "Random First Aid Kit"
desc = "This is a random first aid kit."
icon = 'icons/obj/storage.dmi'
icon_state = "firstaid"
/obj/random/firstaid/item_to_spawn()
return pick(prob(4);/obj/item/weapon/storage/firstaid/regular,
prob(3);/obj/item/weapon/storage/firstaid/toxin,
prob(3);/obj/item/weapon/storage/firstaid/o2,
prob(2);/obj/item/weapon/storage/firstaid/adv,
prob(3);/obj/item/weapon/storage/firstaid/fire,
prob(1);/obj/item/weapon/storage/firstaid/combat)
/obj/random/contraband
name = "Random Illegal Item"
desc = "Hot Stuff."
icon = 'icons/obj/items.dmi'
icon_state = "purplecomb"
spawn_nothing_percentage = 50
/obj/random/contraband/item_to_spawn()
return pick(prob(6);/obj/item/weapon/storage/pill_bottle/tramadol,
prob(8);/obj/item/weapon/haircomb,
prob(4);/obj/item/weapon/storage/pill_bottle/happy,
prob(4);/obj/item/weapon/storage/pill_bottle/zoom,
prob(10);/obj/item/weapon/contraband/poster,
prob(4);/obj/item/weapon/material/butterfly,
prob(6);/obj/item/weapon/material/butterflyblade,
prob(6);/obj/item/weapon/material/butterflyhandle,
prob(6);/obj/item/weapon/material/wirerod,
prob(2);/obj/item/weapon/material/butterfly/switchblade,
prob(2);/obj/item/clothing/gloves/knuckledusters,
prob(1);/obj/item/weapon/material/knife/tacknife,
prob(1);/obj/item/clothing/suit/storage/vest/heavy/merc,
prob(1);/obj/item/weapon/beartrap,
prob(1);/obj/item/weapon/handcuffs,
prob(1);/obj/item/weapon/handcuffs/legcuffs,
prob(2);/obj/item/weapon/reagent_containers/syringe/drugs,
prob(1);/obj/item/weapon/reagent_containers/syringe/steroid)
/obj/random/soap
name = "Random Soap"
desc = "This is a random bar of soap."
icon = 'icons/obj/items.dmi'
icon_state = "soap"
/obj/random/soap/item_to_spawn()
return pick(prob(3);/obj/item/weapon/soap,
prob(2);/obj/item/weapon/soap/nanotrasen,
prob(2);/obj/item/weapon/soap/deluxe,
prob(1);/obj/item/weapon/soap/syndie,)
/obj/random/drinkbottle
name = "random drink"
desc = "This is a random drink."
icon = 'icons/obj/drinks.dmi'
icon_state = "whiskeybottle"
/obj/random/drinkbottle/item_to_spawn()
return pick(/obj/item/weapon/reagent_containers/food/drinks/bottle/whiskey,
/obj/item/weapon/reagent_containers/food/drinks/bottle/gin,
/obj/item/weapon/reagent_containers/food/drinks/bottle/specialwhiskey,
/obj/item/weapon/reagent_containers/food/drinks/bottle/vodka,
/obj/item/weapon/reagent_containers/food/drinks/bottle/tequilla,
/obj/item/weapon/reagent_containers/food/drinks/bottle/absinthe,
/obj/item/weapon/reagent_containers/food/drinks/bottle/wine,
/obj/item/weapon/reagent_containers/food/drinks/bottle/cognac,
/obj/item/weapon/reagent_containers/food/drinks/bottle/rum,
/obj/item/weapon/reagent_containers/food/drinks/bottle/patron)
/obj/random/material //Random materials for building stuff
name = "random material"
desc = "This is a random material."
icon = 'icons/obj/items.dmi'
icon_state = "sheet-metal"
/obj/random/material/item_to_spawn()
return pick(/obj/item/stack/material/steel{amount = 10},
/obj/item/stack/material/glass{amount = 10},
/obj/item/stack/material/glass/reinforced{amount = 10},
/obj/item/stack/material/plastic{amount = 10},
/obj/item/stack/material/wood{amount = 10},
/obj/item/stack/material/cardboard{amount = 10},
/obj/item/stack/rods{amount = 10},
/obj/item/stack/material/plasteel{amount = 10})
/obj/random/tank
name = "random tank"
desc = "This is a tank."
icon = 'icons/obj/tank.dmi'
icon_state = "canister"
/obj/random/tank/item_to_spawn()
return pick(prob(5);/obj/item/weapon/tank/oxygen,
prob(4);/obj/item/weapon/tank/oxygen/yellow,
prob(4);/obj/item/weapon/tank/oxygen/red,
prob(3);/obj/item/weapon/tank/air,
prob(4);/obj/item/weapon/tank/emergency/oxygen,
prob(3);/obj/item/weapon/tank/emergency/oxygen/engi,
prob(2);/obj/item/weapon/tank/emergency/oxygen/double,
prob(1);/obj/item/device/suit_cooling_unit)
/obj/random/cigarettes
name = "random cigarettes"
desc = "This is a cigarette."
icon = 'icons/obj/cigarettes.dmi'
icon_state = "cigpacket"
/obj/random/cigarettes/item_to_spawn()
return pick(prob(5);/obj/item/weapon/storage/fancy/cigarettes,
prob(4);/obj/item/weapon/storage/fancy/cigarettes/dromedaryco,
prob(3);/obj/item/weapon/storage/fancy/cigarettes/killthroat,
prob(3);/obj/item/weapon/storage/fancy/cigarettes/luckystars,
prob(3);/obj/item/weapon/storage/fancy/cigarettes/jerichos,
prob(3);/obj/item/weapon/storage/fancy/cigarettes/menthols,
prob(3);/obj/item/weapon/storage/fancy/cigarettes/carcinomas,
prob(3);/obj/item/weapon/storage/fancy/cigarettes/professionals,
prob(1);/obj/item/weapon/storage/fancy/cigar,
prob(1);/obj/item/clothing/mask/smokable/cigarette/cigar,
prob(1);/obj/item/clothing/mask/smokable/cigarette/cigar/cohiba,
prob(1);/obj/item/clothing/mask/smokable/cigarette/cigar/havana)
/obj/random/coin
name = "random coin"
desc = "This is a coin spawn."
icon = 'icons/misc/mark.dmi'
icon_state = "rup"
/obj/random/coin/item_to_spawn()
return pick(prob(5);/obj/item/weapon/coin/silver,
prob(3);/obj/item/weapon/coin/iron,
prob(4);/obj/item/weapon/coin/gold,
prob(3);/obj/item/weapon/coin/phoron,
prob(1);/obj/item/weapon/coin/uranium,
prob(2);/obj/item/weapon/coin/platinum,
prob(1);/obj/item/weapon/coin/diamond)
/obj/random/action_figure
name = "random action figure"
desc = "This is a random action figure."
icon = 'icons/obj/toy.dmi'
icon_state = "assistant"
/obj/random/action_figure/item_to_spawn()
return pick(/obj/item/toy/figure/cmo,
/obj/item/toy/figure/assistant,
/obj/item/toy/figure/atmos,
/obj/item/toy/figure/bartender,
/obj/item/toy/figure/borg,
/obj/item/toy/figure/gardener,
/obj/item/toy/figure/captain,
/obj/item/toy/figure/cargotech,
/obj/item/toy/figure/ce,
/obj/item/toy/figure/chaplain,
/obj/item/toy/figure/chef,
/obj/item/toy/figure/chemist,
/obj/item/toy/figure/clown,
/obj/item/toy/figure/corgi,
/obj/item/toy/figure/detective,
/obj/item/toy/figure/dsquad,
/obj/item/toy/figure/engineer,
/obj/item/toy/figure/geneticist,
/obj/item/toy/figure/hop,
/obj/item/toy/figure/hos,
/obj/item/toy/figure/qm,
/obj/item/toy/figure/janitor,
/obj/item/toy/figure/agent,
/obj/item/toy/figure/librarian,
/obj/item/toy/figure/md,
/obj/item/toy/figure/mime,
/obj/item/toy/figure/miner,
/obj/item/toy/figure/ninja,
/obj/item/toy/figure/wizard,
/obj/item/toy/figure/rd,
/obj/item/toy/figure/roboticist,
/obj/item/toy/figure/scientist,
/obj/item/toy/figure/syndie,
/obj/item/toy/figure/secofficer,
/obj/item/toy/figure/warden,
/obj/item/toy/figure/psychologist,
/obj/item/toy/figure/paramedic,
/obj/item/toy/figure/ert)
/obj/random/plushie
name = "random plushie"
desc = "This is a random plushie."
icon = 'icons/obj/toy.dmi'
icon_state = "nymphplushie"
/obj/random/plushie/item_to_spawn()
return pick(/obj/structure/plushie/ian,
/obj/structure/plushie/drone,
/obj/structure/plushie/carp,
/obj/structure/plushie/beepsky,
/obj/item/toy/plushie/nymph,
/obj/item/toy/plushie/mouse,
/obj/item/toy/plushie/kitten,
/obj/item/toy/plushie/lizard)
/obj/random/toy
name = "random toy"
desc = "This is a random toy."
icon = 'icons/obj/toy.dmi'
icon_state = "ship"
/obj/random/toy/item_to_spawn()
return pick(/obj/item/toy/bosunwhistle,
/obj/item/toy/plushie/therapy/red,
/obj/item/toy/plushie/therapy/purple,
/obj/item/toy/plushie/therapy/blue,
/obj/item/toy/plushie/therapy/yellow,
/obj/item/toy/plushie/therapy/orange,
/obj/item/toy/plushie/therapy/green,
/obj/item/toy/cultsword,
/obj/item/toy/katana,
/obj/item/toy/snappop,
/obj/item/toy/sword,
/obj/item/toy/balloon,
/obj/item/toy/crossbow,
/obj/item/toy/blink,
/obj/item/toy/waterflower,
/obj/item/toy/prize/ripley,
/obj/item/toy/prize/fireripley,
/obj/item/toy/prize/deathripley,
/obj/item/toy/prize/gygax,
/obj/item/toy/prize/durand,
/obj/item/toy/prize/honk,
/obj/item/toy/prize/marauder,
/obj/item/toy/prize/seraph,
/obj/item/toy/prize/mauler,
/obj/item/toy/prize/odysseus,
/obj/item/toy/prize/phazon)
+159
View File
@@ -0,0 +1,159 @@
/*
* Random Mobs
*/
/obj/random/mob
name = "Random Animal"
desc = "This is a random animal."
icon = 'icons/mob/animal.dmi'
icon_state = "chicken_white"
var/overwrite_hostility = 0
var/mob_faction = null
var/mob_returns_home = 0
var/mob_wander = 1
var/mob_wander_distance = 3
var/mob_hostile = 0
var/mob_retaliate = 0
/obj/random/mob/item_to_spawn()
return pick(prob(10);/mob/living/simple_animal/lizard,
prob(6);/mob/living/simple_animal/retaliate/diyaab,
prob(10);/mob/living/simple_animal/cat/fluff,
prob(6);/mob/living/simple_animal/cat/kitten,
prob(10);/mob/living/simple_animal/corgi,
prob(6);/mob/living/simple_animal/corgi/puppy,
prob(10);/mob/living/simple_animal/crab,
prob(10);/mob/living/simple_animal/chicken,
prob(6);/mob/living/simple_animal/chick,
prob(10);/mob/living/simple_animal/cow,
prob(6);/mob/living/simple_animal/retaliate/goat,
prob(10);/mob/living/simple_animal/penguin,
prob(10);/mob/living/simple_animal/mouse,
prob(10);/mob/living/simple_animal/yithian,
prob(10);/mob/living/simple_animal/tindalos,
prob(10);/mob/living/simple_animal/corgi/tamaskan,
prob(3);/mob/living/simple_animal/parrot,
prob(1);/mob/living/simple_animal/giant_crab)
/obj/random/mob/spawn_item() //These should only ever have simple mobs.
var/build_path = item_to_spawn()
var/mob/living/simple_animal/M = new build_path(src.loc)
M.ai_inactive = 1 //Don't fight eachother while we're still setting up!
if(mob_faction)
M.faction = mob_faction
M.returns_home = mob_returns_home
M.wander = mob_wander
M.wander_distance = mob_wander_distance
if(overwrite_hostility)
M.hostile = mob_hostile
M.retaliate = mob_retaliate
M.ai_inactive = 0 //Now you can kill eachother if your faction didn't override.
if(pixel_x || pixel_y)
M.pixel_x = pixel_x
M.pixel_y = pixel_y
/obj/random/mob/sif
name = "Random Sif Animal"
desc = "This is a random cold weather animal."
icon_state = "penguin"
mob_returns_home = 1
mob_wander_distance = 10
/obj/random/mob/sif/item_to_spawn()
return pick(prob(30);/mob/living/simple_animal/retaliate/diyaab,
prob(15);/mob/living/simple_animal/crab,
prob(15);/mob/living/simple_animal/penguin,
prob(15);/mob/living/simple_animal/mouse,
prob(15);/mob/living/simple_animal/corgi/tamaskan,
prob(2);/mob/living/simple_animal/hostile/giant_spider/frost,
prob(1);/mob/living/simple_animal/hostile/goose,
prob(20);/mob/living/simple_animal/giant_crab)
/obj/random/mob/sif/hostile
name = "Random Hostile Sif Animal"
desc = "This is a random hostile cold weather animal."
icon_state = "frost"
/obj/random/mob/sif/hostile/item_to_spawn()
return pick(prob(22);/mob/living/simple_animal/hostile/savik,
prob(33);/mob/living/simple_animal/hostile/giant_spider/frost,
prob(45);/mob/living/simple_animal/hostile/shantak)
/obj/random/mob/spider
name = "Random Spider" //Spiders should patrol where they spawn.
desc = "This is a random boring spider."
icon_state = "guard"
mob_returns_home = 1
mob_wander_distance = 4
/obj/random/mob/spider/item_to_spawn()
return pick(prob(22);/mob/living/simple_animal/hostile/giant_spider/nurse,
prob(33);/mob/living/simple_animal/hostile/giant_spider/hunter,
prob(45);/mob/living/simple_animal/hostile/giant_spider)
/obj/random/mob/spider/mutant
name = "Random Mutant Spider"
desc = "This is a random mutated spider."
icon_state = "phoron"
/obj/random/mob/spider/mutant/item_to_spawn()
return pick(prob(5);/obj/random/mob/spider,
prob(10);/mob/living/simple_animal/hostile/giant_spider/webslinger,
prob(10);/mob/living/simple_animal/hostile/giant_spider/carrier,
prob(33);/mob/living/simple_animal/hostile/giant_spider/lurker,
prob(33);/mob/living/simple_animal/hostile/giant_spider/tunneler,
prob(40);/mob/living/simple_animal/hostile/giant_spider/pepper,
prob(20);/mob/living/simple_animal/hostile/giant_spider/thermic,
prob(40);/mob/living/simple_animal/hostile/giant_spider/electric,
prob(1);/mob/living/simple_animal/hostile/giant_spider/phorogenic,
prob(40);/mob/living/simple_animal/hostile/giant_spider/frost)
/obj/random/mob/robotic
name = "Random Robot Mob"
desc = "This is a random robot."
icon_state = "drone_dead"
overwrite_hostility = 1
mob_faction = "malf_drone"
mob_returns_home = 1
mob_wander = 1
mob_wander_distance = 5
mob_hostile = 1
mob_retaliate = 1
/obj/random/mob/robotic/item_to_spawn() //Hivebots have a total number of 'lots' equal to the lesser drone, at 60.
return pick(prob(60);/mob/living/simple_animal/hostile/malf_drone/lesser,
prob(50);/mob/living/simple_animal/hostile/malf_drone,
prob(15);/mob/living/simple_animal/hostile/mecha/malf_drone,
prob(10);/mob/living/simple_animal/hostile/hivebot,
prob(15);/mob/living/simple_animal/hostile/hivebot/swarm,
prob(10);/mob/living/simple_animal/hostile/hivebot/range,
prob(5);/mob/living/simple_animal/hostile/hivebot/range/rapid,
prob(5);/mob/living/simple_animal/hostile/hivebot/range/ion,
prob(5);/mob/living/simple_animal/hostile/hivebot/range/laser,
prob(5);/mob/living/simple_animal/hostile/hivebot/range/strong,
prob(5);/mob/living/simple_animal/hostile/hivebot/range/guard)
/obj/random/mob/robotic/hivebot
name = "Random Hivebot"
desc = "This is a random hivebot."
icon_state = "drone3"
mob_faction = "hivebot"
/obj/random/mob/robotic/hivebot/item_to_spawn()
return pick(prob(10);/mob/living/simple_animal/hostile/hivebot,
prob(15);/mob/living/simple_animal/hostile/hivebot/swarm,
prob(10);/mob/living/simple_animal/hostile/hivebot/range,
prob(5);/mob/living/simple_animal/hostile/hivebot/range/rapid,
prob(5);/mob/living/simple_animal/hostile/hivebot/range/ion,
prob(5);/mob/living/simple_animal/hostile/hivebot/range/laser,
prob(5);/mob/living/simple_animal/hostile/hivebot/range/strong,
prob(5);/mob/living/simple_animal/hostile/hivebot/range/guard)
+113
View File
@@ -0,0 +1,113 @@
// Spaceproof clothing sets go in here
/obj/random/multiple/voidsuit
name = "Random Voidsuit"
desc = "This is a random voidsuit."
icon = 'icons/obj/clothing/suits.dmi'
icon_state = "void"
/obj/random/multiple/voidsuit/item_to_spawn()
return pick(
prob(5);list(
/obj/item/clothing/suit/space/void,
/obj/item/clothing/head/helmet/space/void
),
prob(5);list(
/obj/item/clothing/suit/space/void/atmos,
/obj/item/clothing/head/helmet/space/void/atmos
),
prob(5);list(
/obj/item/clothing/suit/space/void/atmos/alt,
/obj/item/clothing/head/helmet/space/void/atmos/alt
),
prob(5);list(
/obj/item/clothing/suit/space/void/engineering,
/obj/item/clothing/head/helmet/space/void/engineering
),
prob(5);list(
/obj/item/clothing/suit/space/void/engineering/alt,
/obj/item/clothing/head/helmet/space/void/engineering/alt
),
prob(5);list(
/obj/item/clothing/suit/space/void/engineering/construction,
/obj/item/clothing/head/helmet/space/void/engineering/construction
),
prob(5);list(
/obj/item/clothing/suit/space/void/engineering/salvage,
/obj/item/clothing/head/helmet/space/void/engineering/salvage
),
prob(5);list(
/obj/item/clothing/suit/space/void/medical,
/obj/item/clothing/head/helmet/space/void/medical
),
prob(5);list(
/obj/item/clothing/suit/space/void/medical/alt,
/obj/item/clothing/head/helmet/space/void/medical/alt
),
prob(5);list(
/obj/item/clothing/suit/space/void/medical/bio,
/obj/item/clothing/head/helmet/space/void/medical/bio
),
prob(5);list(
/obj/item/clothing/suit/space/void/medical/emt,
/obj/item/clothing/head/helmet/space/void/medical/emt
),
prob(5);list(
/obj/item/clothing/suit/space/void/merc,
/obj/item/clothing/head/helmet/space/void/merc
),
prob(5);list(
/obj/item/clothing/suit/space/void/mining,
/obj/item/clothing/head/helmet/space/void/mining
),
prob(5);list(
/obj/item/clothing/suit/space/void/mining/alt,
/obj/item/clothing/head/helmet/space/void/mining/alt
),
prob(5);list(
/obj/item/clothing/suit/space/void/security,
/obj/item/clothing/head/helmet/space/void/security
),
prob(5);list(
/obj/item/clothing/suit/space/void/security/alt,
/obj/item/clothing/head/helmet/space/void/security/alt
),
prob(5);list(
/obj/item/clothing/suit/space/void/security/riot,
/obj/item/clothing/head/helmet/space/void/security/riot
)
)
/obj/random/multiple/voidsuit/mining
name = "Random Mining Voidsuit"
desc = "This is a random mining voidsuit."
icon = 'icons/obj/clothing/suits.dmi'
icon_state = "rig-mining"
/obj/random/multiple/voidsuit/mining/item_to_spawn()
return pick(
prob(5);list(
/obj/item/clothing/suit/space/void/mining,
/obj/item/clothing/head/helmet/space/void/mining
),
prob(1);list(
/obj/item/clothing/suit/space/void/mining/alt,
/obj/item/clothing/head/helmet/space/void/mining/alt
)
)
/obj/random/rigsuit
name = "Random rigsuit"
desc = "This is a random rigsuit."
icon = 'icons/obj/rig_modules.dmi'
icon_state = "generic"
/obj/random/rigsuit/item_to_spawn()
return pick(prob(4);/obj/item/weapon/rig/light/hacker,
prob(5);/obj/item/weapon/rig/industrial,
prob(5);/obj/item/weapon/rig/eva,
prob(4);/obj/item/weapon/rig/light/stealth,
prob(3);/obj/item/weapon/rig/hazard,
prob(1);/obj/item/weapon/rig/merc/empty)
+2 -2
View File
@@ -123,10 +123,10 @@
/obj/structure/mirror/raider/attack_hand(var/mob/living/carbon/human/user)
if(istype(get_area(src),/area/syndicate_mothership))
if(istype(user) && user.mind && user.mind.special_role == "Raider" && user.species.name != "Vox" && is_alien_whitelisted(user, "Vox"))
if(istype(user) && user.mind && user.mind.special_role == "Raider" && user.species.name != SPECIES_VOX && is_alien_whitelisted(user, SPECIES_VOX))
var/choice = input("Do you wish to become a true Vox of the Shoal? This is not reversible.") as null|anything in list("No","Yes")
if(choice && choice == "Yes")
var/mob/living/carbon/human/vox/vox = new(get_turf(src),"Vox")
var/mob/living/carbon/human/vox/vox = new(get_turf(src),SPECIES_VOX)
vox.gender = user.gender
raiders.equip(vox)
if(user.mind)
+1 -1
View File
@@ -24,7 +24,7 @@
var/place_dir = turn(direction, 180)
if(!mining_overlay_cache["rock_side_[place_dir]"])
mining_overlay_cache["rock_side_[place_dir]"] = image('icons/turf/walls.dmi', "rock_side", dir = place_dir)
T.overlays += mining_overlay_cache["rock_side_[place_dir]"]
T.add_overlay(mining_overlay_cache["rock_side_[place_dir]"])
/turf/simulated/wall/solidrock/initialize()
icon_state = base_state
+6
View File
@@ -101,6 +101,12 @@ turf/attackby(obj/item/weapon/W as obj, mob/user as mob)
return
if (do_after(user, 25 + (5 * user.weakened)) && !(user.stat))
step_towards(O, src)
if(ismob(O))
animate(O, transform = turn(O.transform, 20), time = 2)
sleep(2)
animate(O, transform = turn(O.transform, -40), time = 4)
sleep(4)
animate(O, transform = turn(O.transform, 20), time = 2)
/turf/Enter(atom/movable/mover as mob|obj, atom/forget as mob|obj|turf|area)
if(movement_disabled && usr.ckey != movement_disabled_exception)
-7
View File
@@ -1001,11 +1001,6 @@
//strip their stuff and stick it in the crate
for(var/obj/item/I in M)
M.drop_from_inventory(I, locker)
if(ishuman(M))
var/mob/living/carbon/human/H = M
H.update_icons_layers() //Cheaper
else
M.update_icons()
//so they black out before warping
M.Paralyse(5)
@@ -1188,10 +1183,8 @@
usr << "This can only be used on instances of type /mob/living/carbon/human"
return
var/block=text2num(href_list["block"])
//testing("togmutate([href_list["block"]] -> [block])")
usr.client.cmd_admin_toggle_block(H,block)
show_player_panel(H)
//H.regenerate_icons()
else if(href_list["adminplayeropts"])
var/mob/M = locate(href_list["adminplayeropts"])
-1
View File
@@ -37,7 +37,6 @@
if(ishuman(usr))
var/mob/living/carbon/human/H = usr
H.name = H.get_visible_name()
// usr.regenerate_icons() //So the name is updated properly
usr.loc = O.loc // Appear where the object you were controlling is -- TLE
usr.client.eye = usr
+1 -1
View File
@@ -23,7 +23,7 @@
var/corpseidjob = null // Needs to be in quotes, such as "Clown" or "Chef." This just determines what the ID reads as, not their access
var/corpseidaccess = null //This is for access. See access.dm for which jobs give what access. Again, put in quotes. Use "Captain" if you want it to be all access.
var/corpseidicon = null //For setting it to be a gold, silver, CentCom etc ID
var/species = "Human"
var/species = SPECIES_HUMAN
delete_me = TRUE
/obj/effect/landmark/corpse/initialize()
+3 -1
View File
@@ -1,6 +1,6 @@
/obj/machinery/gateway
name = "gateway"
desc = "A mysterious gateway built by unknown hands. It allows for faster than light travel to far-flung locations and even alternate realities."
desc = "A mysterious gateway built by unknown hands. It allows for faster than light travel to far-flung locations and even alternate realities." //VOREStation Edit
icon = 'icons/obj/machines/gateway.dmi'
icon_state = "off"
density = 1
@@ -252,10 +252,12 @@ obj/machinery/gateway/centerstation/process()
user << "<font color='black'>The gate is already calibrated, there is no work for you to do here.</font>"
return
else
// VOREStation Add
stationgate = locate(/obj/machinery/gateway/centerstation)
if(!stationgate)
user << "<span class='notice'>Error: Recalibration failed. No destination found... That can't be good.</span>"
return
// VOREStation Add End
else
user << "<font color='blue'><b>Recalibration successful!</b>:</font><font color='black'> This gate's systems have been fine tuned. Travel to this gate will now be on target.</font>"
calibrated = 1
+15 -2
View File
@@ -104,8 +104,8 @@
// Note that the current station being used will be pruned from this list upon being instantiated
destination_names = list(
"NSS Exodus in Nyx",
//"NCS Northern Star in Vir",
"NLS Southern Cross in Vir",
"NCS Northern Star in Vir",
//"NLS Southern Cross in Vir",
"NAS Vir Central Command",
"a dockyard orbiting Sif",
"an asteroid orbiting Kara",
@@ -235,6 +235,19 @@
motto = ""
ship_prefixes = list("WTV" = "freight")
ship_names = list(
"Comet",
"Aurora",
"Supernova",
"Nebula",
"Galaxy",
"Starburst",
"Constellation",
"Pulsar",
"Quark",
"Void",
"Asteroid"
)
destination_names = list()
/datum/lore/organization/tsc/bishop
@@ -152,7 +152,7 @@ datum/preferences/proc/set_biological_gender(var/gender)
if(pref.species)
S = all_species[pref.species]
else
S = all_species["Human"]
S = all_species[SPECIES_HUMAN]
var/list/possible_genders = S.genders
if(!pref.organ_data || pref.organ_data[BP_TORSO] != "cyborg")
return possible_genders
@@ -69,7 +69,7 @@ var/global/list/valid_bloodtypes = list("A+", "A-", "B+", "B-", "AB+", "AB-", "O
/datum/category_item/player_setup_item/general/body/sanitize_character(var/savefile/S)
if(!pref.species || !(pref.species in playable_species))
pref.species = "Human"
pref.species = SPECIES_HUMAN
pref.r_hair = sanitize_integer(pref.r_hair, 0, 255, initial(pref.r_hair))
pref.g_hair = sanitize_integer(pref.g_hair, 0, 255, initial(pref.g_hair))
pref.b_hair = sanitize_integer(pref.b_hair, 0, 255, initial(pref.b_hair))
@@ -591,7 +591,7 @@ var/global/list/valid_bloodtypes = list("A+", "A-", "B+", "B-", "AB+", "AB-", "O
pref.rlimb_data[second_limb] = null
if("Prosthesis")
var/tmp_species = pref.species ? pref.species : "Human"
var/tmp_species = pref.species ? pref.species : SPECIES_HUMAN
var/list/usable_manufacturers = list()
for(var/company in chargen_robolimbs)
var/datum/robolimb/M = chargen_robolimbs[company]
@@ -734,7 +734,7 @@ var/global/list/valid_bloodtypes = list("A+", "A-", "B+", "B-", "AB+", "AB-", "O
/datum/category_item/player_setup_item/general/body/proc/SetSpecies(mob/user)
if(!pref.species_preview || !(pref.species_preview in all_species))
pref.species_preview = "Human"
pref.species_preview = SPECIES_HUMAN
var/datum/species/current_species = all_species[pref.species_preview]
var/dat = "<body>"
dat += "<center><h2>[current_species.name] \[<a href='?src=\ref[src];show_species=1'>change</a>\]</h2></center><hr/>"
@@ -1,13 +1,13 @@
// Alien clothing.
/datum/gear/suit/zhan_furs
display_name = "Zhan-Khazan furs (Tajara)"
display_name = "Zhan-Khazan furs (Tajaran)"
path = /obj/item/clothing/suit/tajaran/furs
sort_category = "Xenowear"
/datum/gear/head/zhan_scarf
display_name = "Zhan headscarf"
path = /obj/item/clothing/head/tajaran/scarf
whitelisted = "Tajara"
whitelisted = SPECIES_TAJ
/datum/gear/suit/unathi_mantle
display_name = "hide mantle (Unathi)"
@@ -19,7 +19,7 @@
display_name = "headtail chain selection (Skrell)"
path = /obj/item/clothing/ears/skrell/chain
sort_category = "Xenowear"
whitelisted = "Skrell"
whitelisted = SPECIES_SKRELL
/datum/gear/ears/skrell/chains/New()
..()
@@ -33,7 +33,7 @@
display_name = "headtail band selection (Skrell)"
path = /obj/item/clothing/ears/skrell/band
sort_category = "Xenowear"
whitelisted = "Skrell"
whitelisted = SPECIES_SKRELL
/datum/gear/ears/skrell/bands/New()
..()
@@ -47,7 +47,7 @@
display_name = "short headtail cloth (Skrell)"
path = /obj/item/clothing/ears/skrell/cloth_male/black
sort_category = "Xenowear"
whitelisted = "Skrell"
whitelisted = SPECIES_SKRELL
/datum/gear/ears/skrell/cloth/short/New()
..()
@@ -61,7 +61,7 @@
display_name = "long headtail cloth (Skrell)"
path = /obj/item/clothing/ears/skrell/cloth_female/black
sort_category = "Xenowear"
whitelisted = "Skrell"
whitelisted = SPECIES_SKRELL
/datum/gear/ears/skrell/cloth/long/New()
..()
@@ -75,7 +75,7 @@
display_name = "Colored bands (Skrell)"
path = /obj/item/clothing/ears/skrell/colored/band
sort_category = "Xenowear"
whitelisted = "Skrell"
whitelisted = SPECIES_SKRELL
/datum/gear/ears/skrell/colored/band/New()
..()
@@ -85,7 +85,7 @@
display_name = "Colored chain (Skrell)"
path = /obj/item/clothing/ears/skrell/colored/chain
sort_category = "Xenowear"
whitelisted = "Skrell"
whitelisted = SPECIES_SKRELL
/datum/gear/ears/skrell/colored/chain/New()
..()
@@ -94,7 +94,7 @@
/datum/gear/uniform/smock
display_name = "smock selection (Teshari)"
path = /obj/item/clothing/under/seromi/smock
whitelisted = "Teshari"
whitelisted = SPECIES_TESHARI
sort_category = "Xenowear"
/datum/gear/uniform/smock/New()
@@ -108,7 +108,7 @@
/datum/gear/uniform/undercoat
display_name = "undercoat selection (Teshari)"
path = /obj/item/clothing/under/seromi/undercoat
whitelisted = "Teshari"
whitelisted = SPECIES_TESHARI
sort_category = "Xenowear"
/datum/gear/uniform/undercoat/New()
@@ -122,7 +122,7 @@
/datum/gear/suit/cloak
display_name = "cloak selection (Teshari)"
path = /obj/item/clothing/suit/storage/seromi/cloak
whitelisted = "Teshari"
whitelisted = SPECIES_TESHARI
sort_category = "Xenowear"
/datum/gear/suit/cloak/New()
@@ -226,7 +226,7 @@
mutually_exclusive = list(/datum/trait/modifier/mental/xenophobe)
/datum/trait/modifier/mental/tajaraphobe
name = "Tajara-phobic"
name = "Tajaran-phobic"
desc = "Boilerplate racism for cats goes here."
mutually_exclusive = list(/datum/trait/modifier/mental/xenophobe)
+5 -6
View File
@@ -47,7 +47,7 @@ datum/preferences
var/r_eyes = 0 //Eye color
var/g_eyes = 0 //Eye color
var/b_eyes = 0 //Eye color
var/species = "Human" //Species datum to use.
var/species = SPECIES_HUMAN //Species datum to use.
var/species_preview //Used for the species selection window.
var/list/alternate_languages = list() //Secondary language(s)
var/list/language_prefixes = list() //Kanguage prefix keys
@@ -293,11 +293,10 @@ datum/preferences
if(icon_updates)
character.force_update_limbs()
character.update_mutations(0)
character.update_underwear(0)
character.update_hair(0)
character.update_eyes(0)
character.update_icons_all()
character.update_icons_body()
character.update_mutations()
character.update_underwear()
character.update_hair()
/datum/preferences/proc/open_load_dialog(mob/user)
var/dat = "<body>"
+46 -42
View File
@@ -22,6 +22,7 @@
*/
var/list/sprite_sheets_refit = null
var/ear_protection = 0
var/blood_sprite_state
//Updates the icons of the mob wearing the clothing item, if any.
/obj/item/clothing/proc/update_clothing_icon()
@@ -83,16 +84,14 @@
//Set species_restricted list
switch(target_species)
if("Human", "Skrell") //humanoid bodytypes
species_restricted = list("Human", "Skrell", "Promethean") //skrell/humans can wear each other's suits
if(SPECIES_HUMAN, SPECIES_SKRELL) //humanoid bodytypes
species_restricted = list(SPECIES_HUMAN, SPECIES_SKRELL, SPECIES_PROMETHEAN) //skrell/humans can wear each other's suits
else
species_restricted = list(target_species)
//Set icon
if (sprite_sheets_refit && (target_species in sprite_sheets_refit))
icon_override = sprite_sheets_refit[target_species]
else
icon_override = initial(icon_override)
sprite_sheets[target_species] = sprite_sheets_refit[target_species]
if (sprite_sheets_obj && (target_species in sprite_sheets_obj))
icon = sprite_sheets_obj[target_species]
@@ -105,17 +104,15 @@
//Set species_restricted list
switch(target_species)
if("Skrell")
species_restricted = list("Human", "Skrell", "Promethean") //skrell helmets fit humans too
if(SPECIES_SKRELL)
species_restricted = list(SPECIES_HUMAN, SPECIES_SKRELL, SPECIES_PROMETHEAN) //skrell helmets fit humans too
else
species_restricted = list(target_species)
//Set icon
if (sprite_sheets_refit && (target_species in sprite_sheets_refit))
icon_override = sprite_sheets_refit[target_species]
else
icon_override = initial(icon_override)
sprite_sheets[target_species] = sprite_sheets_refit[target_species]
if (sprite_sheets_obj && (target_species in sprite_sheets_obj))
icon = sprite_sheets_obj[target_species]
@@ -130,7 +127,7 @@
throwforce = 2
slot_flags = SLOT_EARS
sprite_sheets = list(
"Teshari" = 'icons/mob/species/seromi/ears.dmi')
SPECIES_TESHARI = 'icons/mob/species/seromi/ears.dmi')
/obj/item/clothing/ears/attack_hand(mob/user as mob)
if (!user) return
@@ -197,6 +194,7 @@
w_class = ITEMSIZE_SMALL
icon = 'icons/obj/clothing/gloves.dmi'
siemens_coefficient = 0.9
blood_sprite_state = "bloodyhands"
var/wired = 0
var/obj/item/weapon/cell/cell = 0
var/fingerprint_chance = 0 //How likely the glove is to let fingerprints through
@@ -210,8 +208,8 @@
slot_flags = SLOT_GLOVES
attack_verb = list("challenged")
sprite_sheets = list(
"Teshari" = 'icons/mob/species/seromi/gloves.dmi',
"Vox" = 'icons/mob/species/vox/gloves.dmi'
SPECIES_TESHARI = 'icons/mob/species/seromi/gloves.dmi',
SPECIES_VOX = 'icons/mob/species/vox/gloves.dmi'
)
/obj/item/clothing/gloves/update_clothing_icon()
@@ -244,8 +242,8 @@
name = "modified [name]"
desc = "[desc]<br>They have had the fingertips cut off of them."
if("exclude" in species_restricted)
species_restricted -= "Unathi"
species_restricted -= "Tajara"
species_restricted -= SPECIES_UNATHI
species_restricted -= SPECIES_TAJ
return
*/
@@ -300,7 +298,7 @@
w_class = ITEMSIZE_TINY
icon = 'icons/obj/clothing/rings.dmi'
gender = NEUTER
species_restricted = list("exclude", "Diona")
species_restricted = list("exclude", SPECIES_DIONA)
siemens_coefficient = 1
glove_level = 1
fingerprint_chance = 100
@@ -318,15 +316,17 @@
body_parts_covered = HEAD
slot_flags = SLOT_HEAD
w_class = ITEMSIZE_SMALL
blood_sprite_state = "helmetblood"
var/light_overlay = "helmet_light"
var/light_applied
var/brightness_on
var/on = 0
var/image/helmet_light
sprite_sheets = list(
"Teshari" = 'icons/mob/species/seromi/head.dmi',
"Vox" = 'icons/mob/species/vox/head.dmi'
SPECIES_TESHARI = 'icons/mob/species/seromi/head.dmi',
SPECIES_VOX = 'icons/mob/species/vox/head.dmi'
)
/obj/item/clothing/head/attack_self(mob/user)
@@ -386,29 +386,29 @@
return 1
/obj/item/clothing/head/update_icon(var/mob/user)
overlays.Cut()
var/mob/living/carbon/human/H
if(istype(user,/mob/living/carbon/human))
if(ishuman(user))
H = user
if(on)
// Generate object icon.
if(!light_overlay_cache["[light_overlay]_icon"])
light_overlay_cache["[light_overlay]_icon"] = image("icon" = 'icons/obj/light_overlays.dmi', "icon_state" = "[light_overlay]")
overlays |= light_overlay_cache["[light_overlay]_icon"]
light_overlay_cache["[light_overlay]_icon"] = image(icon = 'icons/obj/light_overlays.dmi', icon_state = "[light_overlay]")
helmet_light = light_overlay_cache["[light_overlay]_icon"]
add_overlay(helmet_light)
// Generate and cache the on-mob icon, which is used in update_inv_head().
var/cache_key = "[light_overlay][H ? "_[H.species.get_bodytype(H)]" : ""]"
var/body_type = (H && H.species.get_bodytype(H))
var/cache_key = "[light_overlay][body_type && sprite_sheets[body_type] ? "_[body_type]" : ""]"
if(!light_overlay_cache[cache_key])
var/use_icon = 'icons/mob/light_overlays.dmi'
if(H && sprite_sheets[H.species.get_bodytype(H)])
use_icon = sprite_sheets[H.species.get_bodytype(H)]
light_overlay_cache[cache_key] = image("icon" = use_icon, "icon_state" = "[light_overlay]")
var/use_icon = LAZYACCESS(sprite_sheets,body_type) || 'icons/mob/light_overlays.dmi'
light_overlay_cache[cache_key] = image(icon = use_icon, icon_state = "[light_overlay]")
if(H)
H.update_inv_head()
else if(helmet_light)
cut_overlay(helmet_light)
helmet_light = null
user.update_inv_head() //Will redraw the helmet with the light on the mob
/obj/item/clothing/head/update_clothing_icon()
if (ismob(src.loc))
@@ -427,11 +427,12 @@
body_parts_covered = HEAD
slot_flags = SLOT_MASK
body_parts_covered = FACE|EYES
blood_sprite_state = "maskblood"
sprite_sheets = list(
"Teshari" = 'icons/mob/species/seromi/masks.dmi',
"Vox" = 'icons/mob/species/vox/masks.dmi',
"Tajara" = 'icons/mob/species/tajaran/mask.dmi',
"Unathi" = 'icons/mob/species/unathi/mask.dmi'
SPECIES_TESHARI = 'icons/mob/species/seromi/masks.dmi',
SPECIES_VOX = 'icons/mob/species/vox/masks.dmi',
SPECIES_TAJ = 'icons/mob/species/tajaran/mask.dmi',
SPECIES_UNATHI = 'icons/mob/species/unathi/mask.dmi'
)
var/voicechange = 0
@@ -460,6 +461,7 @@
siemens_coefficient = 0.9
body_parts_covered = FEET
slot_flags = SLOT_FEET
blood_sprite_state = "shoeblood"
var/can_hold_knife = 0
var/obj/item/holding
@@ -475,10 +477,10 @@
slowdown = SHOES_SLOWDOWN
force = 2
var/overshoes = 0
species_restricted = list("exclude","Teshari", "Vox")
species_restricted = list("exclude",SPECIES_TESHARI, SPECIES_VOX)
sprite_sheets = list(
"Teshari" = 'icons/mob/species/seromi/shoes.dmi',
"Vox" = 'icons/mob/species/vox/shoes.dmi'
SPECIES_TESHARI = 'icons/mob/species/seromi/shoes.dmi',
SPECIES_VOX = 'icons/mob/species/vox/shoes.dmi'
)
/obj/item/clothing/shoes/proc/draw_knife()
@@ -581,9 +583,10 @@
w_class = ITEMSIZE_NORMAL
preserve_item = 1
sprite_sheets = list(
"Teshari" = 'icons/mob/species/seromi/suit.dmi',
"Vox" = 'icons/mob/species/vox/suit.dmi'
SPECIES_TESHARI = 'icons/mob/species/seromi/suit.dmi',
SPECIES_VOX = 'icons/mob/species/vox/suit.dmi'
)
valid_accessory_slots = list("over", "armband")
@@ -609,6 +612,7 @@
armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 0)
w_class = ITEMSIZE_NORMAL
show_messages = 1
blood_sprite_state = "uniformblood"
var/has_sensor = 1 //For the crew computer 2 = unable to change mode
var/sensor_mode = 0
@@ -621,8 +625,8 @@
var/rolled_down = -1 //0 = unrolled, 1 = rolled, -1 = cannot be toggled
var/rolled_sleeves = -1 //0 = unrolled, 1 = rolled, -1 = cannot be toggled
sprite_sheets = list(
"Teshari" = 'icons/mob/species/seromi/uniform.dmi',
"Vox" = 'icons/mob/species/vox/uniform.dmi'
SPECIES_TESHARI = 'icons/mob/species/seromi/uniform.dmi',
SPECIES_VOX = 'icons/mob/species/vox/uniform.dmi'
)
//convenience var for defining the icon state for the overlay used when the clothing is worn.
+34
View File
@@ -0,0 +1,34 @@
/obj/item/clothing/apply_accessories(var/image/standing)
if(LAZYLEN(accessories))
for(var/obj/item/clothing/accessory/A in accessories)
standing.add_overlay(A.get_mob_overlay())
/obj/item/clothing/apply_blood(var/image/standing)
if(blood_DNA && blood_sprite_state && ishuman(loc))
var/mob/living/carbon/human/H = loc
var/image/bloodsies = image(icon = H.species.get_blood_mask(H), icon_state = blood_sprite_state)
bloodsies.color = blood_color
standing.add_overlay(bloodsies)
//UNIFORM: Always appends "_s" to iconstate, stupidly.
/obj/item/clothing/under/get_worn_icon_state(var/slot_name)
var/state2use = ..()
state2use += "_s"
return state2use
//HELMET: May have a lighting overlay
/obj/item/clothing/head/make_worn_icon(var/body_type,var/slot_name,var/inhands,var/default_icon,var/default_layer = 0)
var/image/standing = ..()
if(on && slot_name == slot_head_str)
var/cache_key = "[light_overlay][LAZYACCESS(sprite_sheets,body_type) ? "_[body_type]" : ""]"
if(standing && light_overlay_cache[cache_key])
standing.add_overlay(light_overlay_cache[cache_key])
return standing
//SUIT: Blood state is slightly different
/obj/item/clothing/suit/apply_blood(var/image/standing)
if(blood_DNA && blood_sprite_state && ishuman(loc))
var/mob/living/carbon/human/H = loc
var/image/bloodsies = image(icon = H.species.get_blood_mask(H), icon_state = "[blood_overlay_type]blood")
bloodsies.color = blood_color
standing.add_overlay(bloodsies)
+1 -1
View File
@@ -46,7 +46,7 @@
icon = 'icons/obj/clothing/ears.dmi'
w_class = ITEMSIZE_TINY
slot_flags = SLOT_EARS
species_restricted = list("Skrell")
species_restricted = list(SPECIES_SKRELL)
/obj/item/clothing/ears/skrell/chain
name = "Gold headtail chains"
+2 -2
View File
@@ -10,8 +10,8 @@
desc = "an ultra rare hat. It commands a certain respect."
icon_state = "petehat"
sprite_sheets = list(
"Teshari" = 'icons/mob/species/seromi/head.dmi',
"Vox" = 'icons/mob/species/vox/head.dmi'
SPECIES_TESHARI = 'icons/mob/species/seromi/head.dmi',
SPECIES_VOX = 'icons/mob/species/vox/head.dmi'
)
/obj/item/clothing/head/collectable/slime
+2 -2
View File
@@ -153,8 +153,8 @@
icon_state = "swathelm"
item_state_slots = list(slot_r_hand_str = "swat", slot_l_hand_str = "swat")
sprite_sheets = list(
"Tajara" = 'icons/mob/species/tajaran/helmet.dmi',
"Unathi" = 'icons/mob/species/unathi/helmet.dmi',
SPECIES_TAJ = 'icons/mob/species/tajaran/helmet.dmi',
SPECIES_UNATHI = 'icons/mob/species/unathi/helmet.dmi',
)
armor = list(melee = 60, bullet = 60, laser = 60, energy = 40, bomb = 40, bio = 0, rad = 0)
+1 -1
View File
@@ -59,7 +59,7 @@
body_parts_covered = 0 //Hack to allow vox to eat while wearing this mask.
item_flags = BLOCK_GAS_SMOKE_EFFECT | AIRTIGHT | PHORONGUARD
phoronproof = 1
species_restricted = list("Vox")
species_restricted = list(SPECIES_VOX)
filtered_gases = list("oxygen", "sleeping_agent")
/obj/item/clothing/mask/gas/syndicate
+1 -1
View File
@@ -88,7 +88,7 @@
icon_state = "boots-vox"
item_flags = PHORONGUARD
phoronproof = 1
species_restricted = list("Vox")
species_restricted = list(SPECIES_VOX)
action_button_name = "Toggle the magclaws"
+4 -4
View File
@@ -4,7 +4,7 @@
desc = "Smoothly contoured and polished to a shine. Still looks like a fishbowl."
armor = list(melee = 20, bullet = 20, laser = 20, energy = 50, bomb = 50, bio = 100, rad = 50)
max_heat_protection_temperature = SPACE_SUIT_MAX_HEAT_PROTECTION_TEMPERATURE
species_restricted = list("Skrell","Human")
species_restricted = list(SPECIES_SKRELL,SPECIES_HUMAN)
/obj/item/clothing/head/helmet/space/skrell/white
icon_state = "skrell_helmet_white"
@@ -19,7 +19,7 @@
allowed = list(/obj/item/device/flashlight,/obj/item/weapon/tank,/obj/item/weapon/storage/bag/ore,/obj/item/device/t_scanner,/obj/item/weapon/pickaxe, /obj/item/weapon/rcd)
heat_protection = UPPER_TORSO|LOWER_TORSO|LEGS|FEET|ARMS|HANDS
max_heat_protection_temperature = SPACE_SUIT_MAX_HEAT_PROTECTION_TEMPERATURE
species_restricted = list("Skrell","Human")
species_restricted = list(SPECIES_SKRELL,SPECIES_HUMAN)
/obj/item/clothing/suit/space/skrell/white
icon_state = "skrell_suit_white"
@@ -39,7 +39,7 @@
siemens_coefficient = 0.2
heat_protection = UPPER_TORSO|LOWER_TORSO|LEGS|FEET|ARMS|HANDS
max_heat_protection_temperature = SPACE_SUIT_MAX_HEAT_PROTECTION_TEMPERATURE
species_restricted = list("Vox")
species_restricted = list(SPECIES_VOX)
/obj/item/clothing/head/helmet/space/vox
armor = list(melee = 60, bullet = 50, laser = 40, energy = 15, bomb = 30, bio = 100, rad = 50)
@@ -47,7 +47,7 @@
item_flags = STOPPRESSUREDAMAGE | THICKMATERIAL | AIRTIGHT | PHORONGUARD
flags_inv = 0
phoronproof = 1
species_restricted = list("Vox")
species_restricted = list(SPECIES_VOX)
/obj/item/clothing/head/helmet/space/vox/pressure
name = "alien helmet"
+10 -2
View File
@@ -180,6 +180,15 @@
spark_system = null
return ..()
/obj/item/weapon/rig/get_worn_icon_file(var/body_type,var/slot_name,var/default_icon,var/inhands)
if(!inhands && slot_name == slot_back_str)
if(icon_override)
return icon_override
else if(mob_icon)
return mob_icon
return ..()
/obj/item/weapon/rig/proc/suit_is_deployed()
if(!istype(wearer) || src.loc != wearer || wearer.back != src)
return 0
@@ -331,7 +340,6 @@
piece.item_flags &= ~(STOPPRESSUREDAMAGE|AIRTIGHT)
else
piece.item_flags |= (STOPPRESSUREDAMAGE|AIRTIGHT)
update_icon(1)
/obj/item/weapon/rig/ui_action_click()
toggle_cooling(usr)
@@ -599,7 +607,7 @@
// update_inv_wear_suit(), handle species checks here.
if(wearer && sprite_sheets && sprite_sheets[wearer.species.get_bodytype(wearer)])
species_icon = sprite_sheets[wearer.species.get_bodytype(wearer)]
mob_icon = image("icon" = species_icon, "icon_state" = "[icon_state]")
mob_icon = icon(icon = species_icon, icon_state = "[icon_state]")
if(installed_modules.len)
for(var/obj/item/rig_module/module in installed_modules)
@@ -11,10 +11,10 @@
cold_protection = HEAD|FACE|EYES
brightness_on = 4
sprite_sheets = list(
"Tajara" = 'icons/mob/species/tajaran/helmet.dmi',
"Skrell" = 'icons/mob/species/skrell/helmet.dmi',
"Unathi" = 'icons/mob/species/unathi/helmet.dmi',
"Vox" = 'icons/mob/species/vox/head.dmi'
SPECIES_TAJ = 'icons/mob/species/tajaran/helmet.dmi',
SPECIES_SKRELL = 'icons/mob/species/skrell/helmet.dmi',
SPECIES_UNATHI = 'icons/mob/species/unathi/helmet.dmi',
SPECIES_VOX = 'icons/mob/species/vox/head.dmi'
)
species_restricted = null
@@ -50,9 +50,9 @@
resilience = 0.2
can_breach = 1
sprite_sheets = list(
"Tajara" = 'icons/mob/species/tajaran/suit.dmi',
"Unathi" = 'icons/mob/species/unathi/suit.dmi',
"Vox" = 'icons/mob/species/vox/suit.dmi'
SPECIES_TAJ = 'icons/mob/species/tajaran/suit.dmi',
SPECIES_UNATHI = 'icons/mob/species/unathi/suit.dmi',
SPECIES_VOX = 'icons/mob/species/vox/suit.dmi'
)
supporting_limbs = list()
var/obj/item/weapon/material/knife/tacknife
@@ -28,14 +28,14 @@
siemens_coefficient = 0.2
/obj/item/clothing/head/helmet/space/rig/breacher
species_restricted = list("Unathi")
species_restricted = list(SPECIES_UNATHI)
force = 5
/obj/item/clothing/suit/space/rig/breacher
species_restricted = list("Unathi")
species_restricted = list(SPECIES_UNATHI)
/obj/item/clothing/shoes/magboots/rig/breacher
species_restricted = list("Unathi")
species_restricted = list(SPECIES_UNATHI)
/*
* VOX
@@ -62,27 +62,27 @@
glove_type = /obj/item/clothing/gloves/gauntlets/rig/vox
/obj/item/clothing/head/helmet/space/rig/vox
species_restricted = list("Vox")
species_restricted = list(SPECIES_VOX)
flags_inv = HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE
phoronproof = 1
/obj/item/clothing/shoes/magboots/rig/vox
name = "talons"
species_restricted = list("Vox")
species_restricted = list(SPECIES_VOX)
sprite_sheets = list(
"Vox" = 'icons/mob/species/vox/shoes.dmi'
SPECIES_VOX = 'icons/mob/species/vox/shoes.dmi'
)
phoronproof = 1
/obj/item/clothing/suit/space/rig/vox
species_restricted = list("Vox")
species_restricted = list(SPECIES_VOX)
phoronproof = 1
/obj/item/clothing/gloves/gauntlets/rig/vox
siemens_coefficient = 0
species_restricted = list("Vox")
species_restricted = list(SPECIES_VOX)
sprite_sheets = list(
"Vox" = 'icons/mob/species/vox/gloves.dmi'
SPECIES_VOX = 'icons/mob/species/vox/gloves.dmi'
)
phoronproof = 1
@@ -19,10 +19,11 @@
light_overlay = "helmet_light_dual"
camera_networks = list(NETWORK_SECURITY)
//Internal Affairs suit
/obj/item/weapon/rig/internalaffairs
name = "augmented tie"
suit_type = "augmented suit"
desc = "Prepare for paperwork."
desc = "The last suit you'll ever wear."
icon_state = "internalaffairs_rig"
armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 0)
siemens_coefficient = 0.9
@@ -30,7 +31,13 @@
offline_slowdown = 0
offline_vision_restriction = 0
allowed = list(/obj/item/device/flashlight,/obj/item/weapon/tank,/obj/item/device/suit_cooling_unit,/obj/item/weapon/storage/briefcase,/obj/item/weapon/storage/secure/briefcase)
allowed = list(
/obj/item/device/flashlight,
/obj/item/weapon/tank,
/obj/item/device/suit_cooling_unit,
/obj/item/weapon/storage/briefcase,
/obj/item/weapon/storage/secure/briefcase
)
req_access = list()
req_one_access = list()
@@ -55,10 +62,11 @@
helm_type = null
boot_type = null
//Mining suit
/obj/item/weapon/rig/industrial
name = "industrial suit control module"
suit_type = "industrial hardsuit"
desc = "A heavy, powerful rig used by construction crews and mining corporations."
desc = "A heavy, powerful hardsuit used by construction crews and mining corporations."
icon_state = "engineering_rig"
armor = list(melee = 60, bullet = 50, laser = 30,energy = 15, bomb = 30, bio = 100, rad = 50)
slowdown = 1
@@ -69,7 +77,15 @@
helm_type = /obj/item/clothing/head/helmet/space/rig/industrial
allowed = list(/obj/item/device/flashlight,/obj/item/weapon/tank,/obj/item/device/suit_cooling_unit,/obj/item/weapon/storage/bag/ore,/obj/item/device/t_scanner,/obj/item/weapon/pickaxe, /obj/item/weapon/rcd)
allowed = list(
/obj/item/device/flashlight,
/obj/item/weapon/tank,
/obj/item/device/suit_cooling_unit,
/obj/item/weapon/storage/bag/ore,
/obj/item/device/t_scanner,
/obj/item/weapon/pickaxe,
/obj/item/weapon/rcd
)
req_access = list()
req_one_access = list()
@@ -84,10 +100,11 @@
/obj/item/rig_module/vision/material,
/obj/item/rig_module/maneuvering_jets) //VOREStation Edit - Added maneuvering jets
//Engineering suit
/obj/item/weapon/rig/eva
name = "EVA suit control module"
suit_type = "EVA hardsuit"
desc = "A light rig for repairs and maintenance to the outside of habitats and vessels."
desc = "A light hardsuit for repairs and maintenance to the outside of habitats and vessels."
icon_state = "eva_rig"
armor = list(melee = 30, bullet = 10, laser = 20,energy = 25, bomb = 20, bio = 100, rad = 100)
slowdown = 0
@@ -98,7 +115,14 @@
helm_type = /obj/item/clothing/head/helmet/space/rig/eva
glove_type = /obj/item/clothing/gloves/gauntlets/rig/eva
allowed = list(/obj/item/device/flashlight,/obj/item/weapon/tank,/obj/item/device/suit_cooling_unit,/obj/item/weapon/storage/toolbox,/obj/item/weapon/storage/briefcase/inflatable,/obj/item/device/t_scanner,/obj/item/weapon/rcd)
allowed = list(
/obj/item/device/flashlight,
/obj/item/weapon/tank,
/obj/item/device/suit_cooling_unit,
/obj/item/weapon/storage/briefcase/inflatable,
/obj/item/device/t_scanner,
/obj/item/weapon/rcd
)
req_access = list()
req_one_access = list()
@@ -135,7 +159,14 @@
helm_type = /obj/item/clothing/head/helmet/space/rig/ce
glove_type = /obj/item/clothing/gloves/gauntlets/rig/ce
allowed = list(/obj/item/device/flashlight,/obj/item/weapon/tank,/obj/item/device/suit_cooling_unit,/obj/item/weapon/storage/bag/ore,/obj/item/device/t_scanner,/obj/item/weapon/pickaxe, /obj/item/weapon/rcd)
allowed = list(
/obj/item/device/flashlight,
/obj/item/weapon/tank,
/obj/item/device/suit_cooling_unit,
/obj/item/weapon/storage/briefcase/inflatable,
/obj/item/device/t_scanner,
/obj/item/weapon/rcd
)
req_access = list()
req_one_access = list()
@@ -157,6 +188,7 @@
/obj/item/rig_module/vision/meson
)
//Research Director's suit. Just add red crowbar.
/obj/item/weapon/rig/hazmat
name = "AMI control module"
@@ -170,7 +202,23 @@
helm_type = /obj/item/clothing/head/helmet/space/rig/hazmat
allowed = list(/obj/item/device/flashlight,/obj/item/weapon/tank,/obj/item/device/suit_cooling_unit,/obj/item/stack/flag,/obj/item/weapon/storage/excavation,/obj/item/weapon/pickaxe,/obj/item/device/healthanalyzer,/obj/item/device/measuring_tape,/obj/item/device/ano_scanner,/obj/item/device/depth_scanner,/obj/item/device/core_sampler,/obj/item/device/gps,/obj/item/device/beacon_locator,/obj/item/device/radio/beacon,/obj/item/weapon/pickaxe/hand,/obj/item/weapon/storage/bag/fossils)
allowed = list(
/obj/item/device/flashlight,
/obj/item/weapon/tank,
/obj/item/device/suit_cooling_unit,
/obj/item/stack/flag,
/obj/item/weapon/storage/excavation,
/obj/item/weapon/pickaxe,
/obj/item/device/healthanalyzer,
/obj/item/device/measuring_tape,
/obj/item/device/ano_scanner,
/obj/item/device/depth_scanner,
/obj/item/device/core_sampler,
/obj/item/device/gps,
/obj/item/device/beacon_locator,
/obj/item/device/radio/beacon,
/obj/item/weapon/pickaxe/hand,
/obj/item/weapon/storage/bag/fossils)
req_access = list()
req_one_access = list()
@@ -185,6 +233,7 @@
/obj/item/rig_module/device/anomaly_scanner
)
//Paramedic suit
/obj/item/weapon/rig/medical
name = "rescue suit control module"
@@ -198,7 +247,15 @@
helm_type = /obj/item/clothing/head/helmet/space/rig/medical
allowed = list(/obj/item/device/flashlight,/obj/item/weapon/tank,/obj/item/device/suit_cooling_unit,/obj/item/weapon/storage/firstaid,/obj/item/device/healthanalyzer,/obj/item/stack/medical,/obj/item/roller )
allowed = list(
/obj/item/device/flashlight,
/obj/item/weapon/tank,
/obj/item/device/suit_cooling_unit,
/obj/item/weapon/storage/firstaid,
/obj/item/device/healthanalyzer,
/obj/item/stack/medical,
/obj/item/roller
)
req_access = list()
req_one_access = list()
@@ -215,6 +272,7 @@
/obj/item/rig_module/vision/medhud
)
//Security suit
/obj/item/weapon/rig/hazard
name = "hazard hardsuit control module"
suit_type = "hazard hardsuit"
@@ -228,7 +286,13 @@
helm_type = /obj/item/clothing/head/helmet/space/rig/hazard
allowed = list(/obj/item/weapon/gun,/obj/item/device/flashlight,/obj/item/weapon/tank,/obj/item/device/suit_cooling_unit,/obj/item/weapon/melee/baton)
allowed = list(
/obj/item/weapon/gun,
/obj/item/device/flashlight,
/obj/item/weapon/tank,
/obj/item/device/suit_cooling_unit,
/obj/item/weapon/melee/baton
)
req_access = list()
req_one_access = list()
@@ -14,7 +14,7 @@
cold_protection = HEAD
min_cold_protection_temperature = SPACE_HELMET_MIN_COLD_PROTECTION_TEMPERATURE
siemens_coefficient = 0.9
species_restricted = list("exclude","Diona")
species_restricted = list("exclude",SPECIES_DIONA)
preserve_item = 1
phoronproof = 1
flash_protection = FLASH_PROTECTION_MAJOR
@@ -62,7 +62,7 @@
cold_protection = UPPER_TORSO | LOWER_TORSO | LEGS | FEET | ARMS | HANDS
min_cold_protection_temperature = SPACE_SUIT_MIN_COLD_PROTECTION_TEMPERATURE
siemens_coefficient = 0.9
species_restricted = list("exclude","Diona")
species_restricted = list("exclude",SPECIES_DIONA)
preserve_item = 1
phoronproof = 1
+15 -15
View File
@@ -13,16 +13,16 @@
//Species-specific stuff.
species_restricted = list("Human", "Promethean")
sprite_sheets_refit = list(
"Unathi" = 'icons/mob/species/unathi/helmet.dmi',
"Tajara" = 'icons/mob/species/tajaran/helmet.dmi',
"Skrell" = 'icons/mob/species/skrell/helmet.dmi'
SPECIES_UNATHI = 'icons/mob/species/unathi/helmet.dmi',
SPECIES_TAJ = 'icons/mob/species/tajaran/helmet.dmi',
SPECIES_SKRELL = 'icons/mob/species/skrell/helmet.dmi'
//Teshari have a general sprite sheet defined in modules/clothing/clothing.dm
)
sprite_sheets_obj = list(
"Unathi" = 'icons/obj/clothing/species/unathi/hats.dmi',
"Tajara" = 'icons/obj/clothing/species/tajaran/hats.dmi',
"Skrell" = 'icons/obj/clothing/species/skrell/hats.dmi',
"Teshari" = 'icons/obj/clothing/species/seromi/hats.dmi'
SPECIES_UNATHI = 'icons/obj/clothing/species/unathi/hats.dmi',
SPECIES_TAJ = 'icons/obj/clothing/species/tajaran/hats.dmi',
SPECIES_SKRELL = 'icons/obj/clothing/species/skrell/hats.dmi',
SPECIES_TESHARI = 'icons/obj/clothing/species/seromi/hats.dmi'
)
light_overlay = "helmet_light"
@@ -38,18 +38,18 @@
heat_protection = UPPER_TORSO|LOWER_TORSO|LEGS|FEET|ARMS|HANDS
max_heat_protection_temperature = SPACE_SUIT_MAX_HEAT_PROTECTION_TEMPERATURE
species_restricted = list("Human", "Skrell", "Promethean")
species_restricted = list("Human", SPECIES_SKRELL, "Promethean")
sprite_sheets_refit = list(
"Unathi" = 'icons/mob/species/unathi/suit.dmi',
"Tajara" = 'icons/mob/species/tajaran/suit.dmi',
"Skrell" = 'icons/mob/species/skrell/suit.dmi'
SPECIES_UNATHI = 'icons/mob/species/unathi/suit.dmi',
SPECIES_TAJ = 'icons/mob/species/tajaran/suit.dmi',
SPECIES_SKRELL = 'icons/mob/species/skrell/suit.dmi'
//Teshari have a general sprite sheet defined in modules/clothing/clothing.dm
)
sprite_sheets_obj = list(
"Unathi" = 'icons/obj/clothing/species/unathi/suits.dmi',
"Tajara" = 'icons/obj/clothing/species/tajaran/suits.dmi',
"Skrell" = 'icons/obj/clothing/species/skrell/suits.dmi',
"Teshari" = 'icons/obj/clothing/species/seromi/suits.dmi'
SPECIES_UNATHI = 'icons/obj/clothing/species/unathi/suits.dmi',
SPECIES_TAJ = 'icons/obj/clothing/species/tajaran/suits.dmi',
SPECIES_SKRELL = 'icons/obj/clothing/species/skrell/suits.dmi',
SPECIES_TESHARI = 'icons/obj/clothing/species/seromi/suits.dmi'
)
//Breach thresholds, should ideally be inherited by most (if not all) voidsuits.
+1 -1
View File
@@ -5,7 +5,7 @@
icon_override = 'icons/mob/species/seromi/teshari_cloak.dmi'
icon_state = "tesh_cloak_bo"
item_state = "tesh_cloak_bo"
species_restricted = list("Teshari")
species_restricted = list(SPECIES_TESHARI)
body_parts_covered = UPPER_TORSO|ARMS
/obj/item/clothing/suit/storage/seromi/cloak/black_orange
+1 -1
View File
@@ -6,5 +6,5 @@
icon_state = "vox-scrap"
icon_state = "vox-scrap"
body_parts_covered = UPPER_TORSO|ARMS|LOWER_TORSO|LEGS
species_restricted = list("Vox")
species_restricted = list(SPECIES_VOX)
siemens_coefficient = 1 //Its literally metal
@@ -265,6 +265,15 @@
return
..()
/obj/item/clothing/suit/straight_jacket/equipped(var/mob/living/user,var/slot)
. = ..()
if(slot == slot_wear_suit)
user.drop_l_hand()
user.drop_r_hand()
if(ishuman(user))
var/mob/living/carbon/human/H = user
H.drop_from_inventory(H.handcuffed)
/obj/item/clothing/suit/ianshirt
name = "worn shirt"
desc = "A worn out, curiously comfortable t-shirt with a picture of Ian. You wouldn't go so far as to say it feels like being hugged when you wear it but it's pretty close. Good for sleeping in."
@@ -14,7 +14,7 @@
var/concealed_holster = 0
var/mob/living/carbon/human/wearer = null //To check if the wearer changes, so species spritesheets change properly.
sprite_sheets = list("Teshari" = 'icons/mob/species/seromi/ties.dmi') //Teshari can into webbing, too!
sprite_sheets = list(SPECIES_TESHARI = 'icons/mob/species/seromi/ties.dmi') //Teshari can into webbing, too!
/obj/item/clothing/accessory/Destroy()
on_removed()
+1 -1
View File
@@ -1,7 +1,7 @@
/obj/item/clothing/under/seromi
icon = 'icons/obj/clothing/species/seromi/uniform.dmi'
icon_state = "seromi_grey"
species_restricted = list("Teshari")
species_restricted = list(SPECIES_TESHARI)
/obj/item/clothing/under/seromi/smock
name = "small grey smock"
+1 -1
View File
@@ -1,6 +1,6 @@
/obj/item/clothing/under/vox
has_sensor = 0
species_restricted = list("Vox")
species_restricted = list(SPECIES_VOX)
valid_accessory_slots = list("vox")
restricted_accessory_slots = list("vox")
phoronproof = 1
+1 -1
View File
@@ -2,5 +2,5 @@
var/datum/supply_order/O = new /datum/supply_order()
O.ordernum = supply_controller.ordernum
O.object = supply_controller.supply_packs[pick(supply_controller.supply_packs)]
O.orderedby = random_name(pick(MALE,FEMALE), species = "Human")
O.orderedby = random_name(pick(MALE,FEMALE), species = SPECIES_HUMAN)
supply_controller.shoppinglist += O
+3 -3
View File
@@ -2,7 +2,7 @@
return // VOREStation Edit - Can't exploit shell if we never call shell!
if (config.use_irc_bot)
if (config.use_node_bot)
shell("node bridge.js -h \"[config.irc_bot_host]\" -p \"[config.irc_bot_port]\" -c \"[channel]\" -m \"[msg]\"")
shell("node bridge.js -h \"[config.irc_bot_host]\" -p \"[config.irc_bot_port]\" -c \"[channel]\" -m \"[escape_shell_arg(msg)]\"")
else
if (config.irc_bot_host)
if(config.irc_bot_export)
@@ -17,10 +17,10 @@
nudge_lib = "lib/nudge.so"
spawn(0)
call(nudge_lib, "nudge")("[config.comms_password]","[config.irc_bot_host]","[channel]","[msg]")
call(nudge_lib, "nudge")("[config.comms_password]","[config.irc_bot_host]","[channel]","[escape_shell_arg(msg)]")
else
spawn(0)
ext_python("ircbot_message.py", "[config.comms_password] [config.irc_bot_host] [channel] [msg]")
ext_python("ircbot_message.py", "[config.comms_password] [config.irc_bot_host] [channel] [escape_shell_arg(msg)]")
return
/proc/send2mainirc(var/msg)
+21 -3
View File
@@ -1,10 +1,28 @@
// Ported from /vg/.
/proc/escape_shell_arg(var/arg)
// RCE prevention
// - Encloses arg in single quotes
// - Escapes single quotes
// Also escapes %, ! on windows
if(world.system_type == MS_WINDOWS)
arg = replacetext(arg, "^", "^^") // Escape char
arg = replacetext(arg, "%", "%%") // %PATH% -> %%PATH%%
arg = replacetext(arg, "!", "^!") // !PATH!, delayed variable expansion on Windows
arg = replacetext(arg, "\"", "^\"")
arg = "\"[arg]\""
else
arg = replacetext(arg, "\\", "\\\\'") // Escape char
arg = replacetext(arg, "'", "\\'") // No breaking out of the single quotes.
arg = "'[arg]'"
return arg
/proc/ext_python(var/script, var/args, var/scriptsprefix = 1)
return // VOREStation Edit - Can't exploit shell if we never call shell!
if(scriptsprefix) script = "scripts/" + script
if(scriptsprefix)
script = "scripts/" + script
if(world.system_type == MS_WINDOWS)
script = replacetext(script, "/", "\\")
var/command = config.python_path + " " + script + " " + args
return shell(command)
return shell(command)
+1 -1
View File
@@ -30,7 +30,7 @@
"_____ used ____ to create their newest invention, _____!",
"Scientists are not allowed to make Gatling _____.",
"It's not a party until the ____ arrive.",
"No matter how many Tajara you have, _____ is never acceptable.",
"No matter how many Tajaran you have, _____ is never acceptable.",
"No, the AI's first law is NOT to serve _____.",
"The robots are not disposal bins for your _____.",
"You can never have too many _____ on shift.",

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