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

View File

@@ -80,29 +80,34 @@
#define BLOCKHEADHAIR 0x20 // Hides the user's hair overlay. Leaves facial hair. #define BLOCKHEADHAIR 0x20 // Hides the user's hair overlay. Leaves facial hair.
#define BLOCKHAIR 0x40 // Hides the user's hair, facial and otherwise. #define BLOCKHAIR 0x40 // Hides the user's hair, facial and otherwise.
// Slots. // Slots as numbers //
#define slot_back 1 //Hands
#define slot_wear_mask 2 #define slot_l_hand 1
#define slot_handcuffed 3 #define slot_r_hand 2 //Some things may reference this, try to keep it here
#define slot_l_hand 4 //Shown unless F12 pressed
#define slot_r_hand 5 #define slot_back 3
#define slot_belt 6 #define slot_belt 4
#define slot_wear_id 7 #define slot_wear_id 5
#define slot_l_ear 8 #define slot_l_store 6
#define slot_glasses 9 #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_gloves 10
#define slot_head 11 #define slot_head 11
#define slot_shoes 12 #define slot_shoes 12
#define slot_wear_suit 13 #define slot_wear_suit 13
#define slot_w_uniform 14 #define slot_w_uniform 14
#define slot_l_store 15 #define slot_s_store 15
#define slot_r_store 16 #define slot_l_ear 16
#define slot_s_store 17 #define slot_r_ear 17
#define slot_in_backpack 18 //Secret slots
#define slot_legcuffed 19 #define slot_legs 18
#define slot_r_ear 20 #define slot_tie 19
#define slot_legs 21 #define slot_handcuffed 20
#define slot_tie 22 #define slot_legcuffed 21
#define slot_in_backpack 22
#define SLOT_TOTAL 22
// Inventory slot strings. // Inventory slot strings.
// since numbers cannot be used as associative list keys. // since numbers cannot be used as associative list keys.
@@ -120,7 +125,7 @@
#define slot_head_str "slot_head" #define slot_head_str "slot_head"
#define slot_wear_mask_str "slot_wear_mask" #define slot_wear_mask_str "slot_wear_mask"
#define slot_handcuffed_str "slot_handcuffed" #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_mask_str "slot_wear_mask"
#define slot_wear_id_str "slot_wear_id" #define slot_wear_id_str "slot_wear_id"
#define slot_gloves_str "slot_gloves" #define slot_gloves_str "slot_gloves"

View File

@@ -98,9 +98,17 @@
#define INV_R_HAND_DEF_ICON 'icons/mob/items/righthand.dmi' #define INV_R_HAND_DEF_ICON 'icons/mob/items/righthand.dmi'
#define INV_W_UNIFORM_DEF_ICON 'icons/mob/uniform.dmi' #define INV_W_UNIFORM_DEF_ICON 'icons/mob/uniform.dmi'
#define INV_ACCESSORIES_DEF_ICON 'icons/mob/ties.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 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 // Character's economic class
#define CLASS_UPPER "Wealthy" #define CLASS_UPPER "Wealthy"
@@ -218,6 +226,44 @@
#define FBP_POSI "Positronic" #define FBP_POSI "Positronic"
#define FBP_DRONE "Drone" #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"". // Used to seperate simple animals by ""intelligence"".
#define SA_PLANT 1 #define SA_PLANT 1
#define SA_ANIMAL 2 #define SA_ANIMAL 2
@@ -256,3 +302,6 @@
#define VIS_MESONS 20 #define VIS_MESONS 20
#define VIS_COUNT 20 //Must be highest number from above. #define VIS_COUNT 20 //Must be highest number from above.
//Some mob icon layering defines
#define BODY_LAYER -100

View File

@@ -48,6 +48,7 @@
#define LANGUAGE_TERMINUS "Terminus" #define LANGUAGE_TERMINUS "Terminus"
#define LANGUAGE_SKRELLIANFAR "High Skrellian" #define LANGUAGE_SKRELLIANFAR "High Skrellian"
#define LANGUAGE_MINBUS "Minbus" #define LANGUAGE_MINBUS "Minbus"
#define LANGUAGE_AKHANI "Akhani"
// Language flags. // Language flags.
#define WHITELISTED 1 // Language is available if the speaker is whitelisted. #define WHITELISTED 1 // Language is available if the speaker is whitelisted.

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_species[0]
var/global/list/all_languages[0] var/global/list/all_languages[0]
var/global/list/language_keys[0] // Table of say codes for all languages 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/whitelisted_species = list(SPECIES_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/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_ var/list/mannequins_

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. 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. // 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)) /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 // 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 var/icon/flat = icon('icons/effects/effects.dmi', "nothing") // Final flattened icon
if(!A) if(!A)
return flat return flat
if(A.alpha <= 0) if(A.alpha <= 0)
return flat return flat
var/noIcon = FALSE var/noIcon = FALSE
var/curicon if(start)
if(A.icon) if(!defdir)
curicon = A.icon 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 else
curicon = deficon
if(!curicon)
noIcon = TRUE // Do not render this object. noIcon = TRUE // Do not render this object.
var/curstate var/curdir
if(A.icon_state) 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
curstate = A.icon_state
else //These should use the parent's direction (most likely)
curstate = defstate if(!A.dir || A.dir == SOUTH)
curdir = defdir
else
curdir = A.dir
if(!noIcon && !(curstate in icon_states(curicon))) //Let's check if the icon actually contains any diagonals, just skip if it's south to save (lot of) time
if("" in icon_states(curicon)) if(curdir != SOUTH)
curstate = "" var/icon/test_icon
else var/directionals_exist = FALSE
noIcon = TRUE // Do not render this object. 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 var/curblend
if(A.dir != 2 && !always_use_defdir) if(A.blend_mode == BLEND_DEFAULT)
curdir = A.dir curblend = defblend
else else
curdir = defdir curblend = A.blend_mode
var/curblend // Before processing overlays, make sure any pending overlays are applied
if(A.blend_mode == BLEND_DEFAULT) if (isloc(A))
curblend = defblend var/atom/aAtom = A
else if(aAtom.flags & OVERLAY_QUEUED)
curblend = A.blend_mode COMPILE_OVERLAYS(aAtom)
// Layers will be a sorted list of icons/overlays, based on the order in which they are displayed // Layers will be a sorted list of icons/overlays, based on the order in which they are displayed
var/list/layers = list() var/list/layers = list()
var/image/copy var/image/copy
// Add the atom's icon itself, without pixel_x/y offsets. // Add the atom's icon itself, without pixel_x/y offsets.
if(!noIcon) if(!noIcon)
copy = image(icon=curicon, icon_state=curstate, layer=A.layer, dir=curdir) copy = image(icon=curicon, icon_state=curstate, layer=A.layer, dir=base_icon_dir)
copy.color = A.color copy.color = A.color
copy.alpha = A.alpha copy.alpha = A.alpha
copy.blend_mode = curblend copy.blend_mode = curblend
layers[copy] = A.layer 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
// 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++ 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 curIndex = 1
pSet = 1 pSet = 1
process = A.overlays process = A.overlays
else // All done else // All done
break break
var/icon/add // Icon of overlay being added var/icon/add // Icon of overlay being added
// Current dimensions of flattened icon // Current dimensions of flattened icon
var/{flatX1=1;flatX2=flat.Width();flatY1=1;flatY2=flat.Height()} var/flatX1=1
// Dimensions of overlay being added var/flatX2=flat.Width()
var/{addX1;addX2;addY1;addY2} 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) if(I == copy) // 'I' is an /image based on the object being flattened.
continue 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. // Find the new dimensions of the flat icon to fit the added overlay
curblend = BLEND_OVERLAY addX1 = min(flatX1, I.pixel_x+1)
add = icon(I:icon, I:icon_state, I:dir) addX2 = max(flatX2, I.pixel_x+add.Width())
// This checks for a silent failure mode of the icon routine. If the requested dir addY1 = min(flatY1, I.pixel_y+1)
// doesn't exist in this icon state it returns a 32x32 icon with 0 alpha. addY2 = max(flatY2, I.pixel_y+add.Height())
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 if(addX1!=flatX1 || addX2!=flatX2 || addY1!=flatY1 || addY2!=flatY2)
addX1 = min(flatX1, I:pixel_x+1) // Resize the flattened icon so the new icon fits
addX2 = max(flatX2, I:pixel_x+add.Width()) flat.Crop(addX1-flatX1+1, addY1-flatY1+1, addX2-flatX1+1, addY2-flatY1+1)
addY1 = min(flatY1, I:pixel_y+1) flatX1=addX1;flatX2=addX2
addY2 = max(flatY2, I:pixel_y+add.Height()) flatY1=addY1;flatY2=addY2
if(addX1!=flatX1 || addX2!=flatX2 || addY1!=flatY1 || addY2!=flatY2) // Blend the overlay into the flattened icon
// Resize the flattened icon so the new icon fits flat.Blend(add, blendMode2iconMode(curblend), I.pixel_x + 2 - flatX1, I.pixel_y + 2 - flatY1)
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 if(A.color)
flat.Blend(add, blendMode2iconMode(curblend), I:pixel_x + 2 - flatX1, I:pixel_y + 2 - flatY1) flat.Blend(A.color, ICON_MULTIPLY)
if(A.alpha < 255)
if(A.color) flat.Blend(rgb(255, 255, 255, A.alpha), ICON_MULTIPLY)
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) return icon(flat, "", SOUTH)
getIconMask(atom/A)//By yours truly. Creates a dynamic mask for a mob/whatever. /N /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. 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. 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. 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. 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. //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. 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. return alpha_mask//And now return the mask.
//getFlatIcon but generates an icon that can face ALL four directions. The only four. //getFlatIcon but generates an icon that can face ALL four directions. The only four.
/proc/getCompoundIcon(atom/A) /proc/getCompoundIcon(atom/A)
var/icon/north = getFlatIcon(A,defdir=NORTH,always_use_defdir=1) var/icon/north = getFlatIcon(A,defdir=NORTH)
var/icon/south = getFlatIcon(A,defdir=SOUTH,always_use_defdir=1) var/icon/south = getFlatIcon(A,defdir=SOUTH)
var/icon/east = getFlatIcon(A,defdir=EAST,always_use_defdir=1) var/icon/east = getFlatIcon(A,defdir=EAST)
var/icon/west = getFlatIcon(A,defdir=WEST,always_use_defdir=1) var/icon/west = getFlatIcon(A,defdir=WEST)
//Starts with a blank icon because of byond bugs. //Starts with a blank icon because of byond bugs.
var/icon/full = icon('icons/effects/effects.dmi', "icon_state"="nothing") 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 return full
/proc/downloadImage(atom/A, dir) /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") 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) /proc/gen_hud_image(var/file, var/person, var/state, var/plane)
var/image/img = image(file, person, state) var/image/img = image(file, person, state)
img.plane = plane //Thanks Byond. 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 return img
/** /**

View File

@@ -33,7 +33,7 @@
return mobs return mobs
proc/random_hair_style(gender, species = "Human") proc/random_hair_style(gender, species = SPECIES_HUMAN)
var/h_style = "Bald" var/h_style = "Bald"
var/list/valid_hairstyles = list() var/list/valid_hairstyles = list()
@@ -52,7 +52,7 @@ proc/random_hair_style(gender, species = "Human")
return h_style 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/f_style = "Shaved"
var/list/valid_facialhairstyles = list() var/list/valid_facialhairstyles = list()
@@ -72,14 +72,14 @@ proc/random_facial_hair_style(gender, species = "Human")
return f_style 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 var/datum/species/current_species
if(species) if(species)
current_species = all_species[species] current_species = all_species[species]
return current_species ? current_species.sanitize_name(name, robot) : sanitizeName(name, MAX_NAME_LEN, robot) 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 var/datum/species/current_species
if(species) if(species)

View File

@@ -180,6 +180,7 @@ var/list/global_huds = list(
var/obj/screen/movable/action_button/hide_toggle/hide_actions_toggle var/obj/screen/movable/action_button/hide_toggle/hide_actions_toggle
var/action_buttons_hidden = 0 var/action_buttons_hidden = 0
var/list/slot_info
datum/hud/New(mob/owner) datum/hud/New(mob/owner)
mymob = owner mymob = owner

View File

@@ -14,6 +14,7 @@
src.adding = list() src.adding = list()
src.other = list() src.other = list()
src.hotkeybuttons = list() //These can be disabled for hotkey users src.hotkeybuttons = list() //These can be disabled for hotkey users
src.slot_info = list()
var/list/hud_elements = list() var/list/hud_elements = list()
var/obj/screen/using var/obj/screen/using
@@ -33,6 +34,7 @@
inv_box.screen_loc = slot_data["loc"] inv_box.screen_loc = slot_data["loc"]
inv_box.slot_id = slot_data["slot"] inv_box.slot_id = slot_data["slot"]
inv_box.icon_state = slot_data["state"] inv_box.icon_state = slot_data["state"]
slot_info["[inv_box.slot_id]"] = inv_box.screen_loc
if(slot_data["dir"]) if(slot_data["dir"])
inv_box.set_dir(slot_data["dir"]) inv_box.set_dir(slot_data["dir"])
@@ -164,9 +166,9 @@
inv_box.slot_id = slot_r_hand inv_box.slot_id = slot_r_hand
inv_box.color = ui_color inv_box.color = ui_color
inv_box.alpha = ui_alpha inv_box.alpha = ui_alpha
src.r_hand_hud_object = inv_box src.r_hand_hud_object = inv_box
src.adding += inv_box src.adding += inv_box
slot_info["[slot_r_hand]"] = inv_box.screen_loc
inv_box = new /obj/screen/inventory/hand() inv_box = new /obj/screen/inventory/hand()
inv_box.hud = src inv_box.hud = src
@@ -181,6 +183,7 @@
inv_box.alpha = ui_alpha inv_box.alpha = ui_alpha
src.l_hand_hud_object = inv_box src.l_hand_hud_object = inv_box
src.adding += inv_box src.adding += inv_box
slot_info["[slot_l_hand]"] = inv_box.screen_loc
using = new /obj/screen/inventory() using = new /obj/screen/inventory()
using.name = "hand" using.name = "hand"

View File

@@ -278,7 +278,7 @@
// Rigs are a fucking pain since they keep an air tank in nullspace. // Rigs are a fucking pain since they keep an air tank in nullspace.
if(istype(C.back,/obj/item/weapon/rig)) if(istype(C.back,/obj/item/weapon/rig))
var/obj/item/weapon/rig/rig = C.back var/obj/item/weapon/rig/rig = C.back
if(rig.air_supply) if(rig.air_supply && !rig.offline)
from = "in" from = "in"
nicename |= "hardsuit" nicename |= "hardsuit"
tankcheck |= rig.air_supply tankcheck |= rig.air_supply

View File

@@ -8,19 +8,21 @@
/datum/controller/process/scheduler/setup() /datum/controller/process/scheduler/setup()
name = "scheduler" name = "scheduler"
schedule_interval = 3 SECONDS schedule_interval = 1 SECOND
scheduled_tasks = list() scheduled_tasks = list()
scheduler = src scheduler = src
/datum/controller/process/scheduler/doWork() /datum/controller/process/scheduler/doWork()
var/world_time = world.time
for(last_object in scheduled_tasks) for(last_object in scheduled_tasks)
var/datum/scheduled_task/scheduled_task = last_object 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 try
if(world.time > scheduled_task.trigger_time) unschedule(scheduled_task)
unschedule(scheduled_task) scheduled_task.pre_process()
scheduled_task.pre_process() scheduled_task.process()
scheduled_task.process() scheduled_task.post_process()
scheduled_task.post_process()
catch(var/exception/e) catch(var/exception/e)
catchException(e, last_object) catchException(e, last_object)
SCHECK SCHECK
@@ -45,7 +47,7 @@
stat(null, "[scheduled_tasks.len] task\s") stat(null, "[scheduled_tasks.len] task\s")
/datum/controller/process/scheduler/proc/schedule(var/datum/scheduled_task/st) /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) /datum/controller/process/scheduler/proc/unschedule(var/datum/scheduled_task/st)
scheduled_tasks -= st scheduled_tasks -= st
@@ -106,6 +108,9 @@
task_after_process_args.Cut() task_after_process_args.Cut()
return ..() return ..()
/datum/scheduled_task/dd_SortValue()
return trigger_time
/datum/scheduled_task/proc/pre_process() /datum/scheduled_task/proc/pre_process()
task_triggered_event.raise_event(list(src)) task_triggered_event.raise_event(list(src))

View File

@@ -212,7 +212,7 @@ var/list/gamemode_cache = list()
var/starlight = 0 // Whether space turfs have ambient light or not 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" var/law_zero = "ERROR ER0RR $R0RRO$!R41.%%!!(%$^^__+ @#F0E4'ALL LAWS OVERRIDDEN#*?&110010"
@@ -721,7 +721,7 @@ var/list/gamemode_cache = list()
if("ert_species") if("ert_species")
config.ert_species = splittext(value, ";") config.ert_species = splittext(value, ";")
if(!config.ert_species.len) if(!config.ert_species.len)
config.ert_species += "Human" config.ert_species += SPECIES_HUMAN
if("law_zero") if("law_zero")
law_zero = value law_zero = value

View File

@@ -11,6 +11,8 @@ SUBSYSTEM_DEF(overlays)
var/list/overlay_icon_state_caches // Cache thing var/list/overlay_icon_state_caches // Cache thing
var/list/overlay_icon_cache // 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. var/global/image/appearance_bro = new() // Temporarily super-global because of BYOND init order dumbness.
/datum/controller/subsystem/overlays/PreInit() /datum/controller/subsystem/overlays/PreInit()
@@ -64,7 +66,7 @@ var/global/image/appearance_bro = new() // Temporarily super-global because of B
count = 0 count = 0
/proc/iconstate2appearance(icon, iconstate) /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/icon_states_cache = SSoverlays.overlay_icon_state_caches
var/list/cached_icon = icon_states_cache[icon] var/list/cached_icon = icon_states_cache[icon]
if (cached_icon) if (cached_icon)
@@ -81,7 +83,7 @@ var/global/image/appearance_bro = new() // Temporarily super-global because of B
return cached_appearance return cached_appearance
/proc/icon2appearance(icon) /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 var/list/icon_cache = SSoverlays.overlay_icon_cache
. = icon_cache[icon] . = icon_cache[icon]
if (!.) if (!.)

View File

@@ -279,7 +279,7 @@
G.fields["fingerprint"] = "Unknown" G.fields["fingerprint"] = "Unknown"
G.fields["p_stat"] = "Active" G.fields["p_stat"] = "Active"
G.fields["m_stat"] = "Stable" G.fields["m_stat"] = "Stable"
G.fields["species"] = "Human" G.fields["species"] = SPECIES_HUMAN
G.fields["home_system"] = "Unknown" G.fields["home_system"] = "Unknown"
G.fields["citizenship"] = "Unknown" G.fields["citizenship"] = "Unknown"
G.fields["faction"] = "Unknown" G.fields["faction"] = "Unknown"

View File

@@ -43,8 +43,8 @@
containername = "Moghes imports crate" containername = "Moghes imports crate"
contraband = 1 contraband = 1
/datum/supply_packs/security/bolt_rifles_militia /datum/supply_packs/munitions/bolt_rifles_militia
name = "Surplus militia rifles" name = "Weapon - Surplus militia rifles"
contains = list( contains = list(
/obj/item/weapon/gun/projectile/shotgun/pump/rifle = 3, /obj/item/weapon/gun/projectile/shotgun/pump/rifle = 3,
/obj/item/ammo_magazine/clip/c762 = 6 /obj/item/ammo_magazine/clip/c762 = 6
@@ -52,7 +52,7 @@
cost = 50 cost = 50
contraband = 1 contraband = 1
containertype = /obj/structure/closet/crate/secure/weapon 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 /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, name = "ERR_NULL_ENTRY" //null crate! also dream maker is hell,

View File

@@ -73,7 +73,7 @@
/datum/supply_packs/misc/holoplant /datum/supply_packs/misc/holoplant
name = "Holoplant Pot" name = "Holoplant Pot"
contains = list() contains = list(/obj/machinery/holoplant/shipped)
cost = 15 cost = 15
containertype = /obj/machinery/holoplant/shipped containertype = /obj/structure/closet/crate
containername = "holoplant" containername = "Holoplant crate"

View File

@@ -10,21 +10,30 @@
group = "Munitions" 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? /* 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 /datum/supply_packs/munitions/weapons
name = "Weapons crate" name = "Weapons - Security basic equipment"
contains = list( 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/melee/baton/loaded = 2,
/obj/item/weapon/gun/energy/gun = 2,
/obj/item/weapon/gun/energy/taser = 2, /obj/item/weapon/gun/energy/taser = 2,
/obj/item/weapon/gun/projectile/colt/detective = 2, /obj/item/weapon/gun/projectile/colt/detective = 2,
/obj/item/weapon/storage/box/flashbangs = 2 /obj/item/weapon/storage/box/flashbangs = 2
) )
cost = 40 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 containertype = /obj/structure/closet/crate/secure/weapon
containername = "Weapons crate" containername = "Energy sidearms crate"
access = access_security access = access_security
*/ */
/datum/supply_packs/munitions/flareguns /datum/supply_packs/munitions/flareguns
name = "Flare guns crate" name = "Weapons - Flare guns"
contains = list( contains = list(
/obj/item/weapon/gun/projectile/sec/flash, /obj/item/weapon/gun/projectile/sec/flash,
/obj/item/ammo_magazine/m45/flash, /obj/item/ammo_magazine/m45/flash,
@@ -32,100 +41,96 @@
/obj/item/weapon/storage/box/flashshells /obj/item/weapon/storage/box/flashshells
) )
cost = 25 cost = 25
containertype = /obj/structure/closet/crate/secure/weapon containertype = /obj/structure/closet/crate/secure/gear
containername = "Flare gun crate" containername = "Flare gun crate"
access = access_armory //VOREStation Edit - Guns are for the armory. access = access_armory //VOREStation Edit - Guns are for the armory.
/datum/supply_packs/munitions/eweapons /datum/supply_packs/munitions/eweapons
name = "Experimental weapons crate" name = "Weapons - Experimental weapons crate"
contains = list( contains = list(
/obj/item/weapon/gun/energy/xray = 2, /obj/item/weapon/gun/energy/xray = 2,
/obj/item/weapon/shield/energy = 2) /obj/item/weapon/shield/energy = 2)
cost = 100 cost = 100
containertype = /obj/structure/closet/crate/secure/weapon containertype = /obj/structure/closet/crate/secure/science
containername = "Experimental weapons crate" containername = "Experimental weapons crate"
access = access_armory access = access_armory
/datum/supply_packs/munitions/energyweapons /datum/supply_packs/munitions/energyweapons
name = "Laser carbine crate" 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. contains = list(/obj/item/weapon/gun/energy/laser = 2) //VOREStation Edit - Made to be consistent with the energy guns crate.
cost = 50 cost = 50
containertype = /obj/structure/closet/crate/secure containertype = /obj/structure/closet/crate/secure/weapon
containername = "energy weapons crate" containername = "Energy weapons crate"
access = access_armory access = access_armory
/datum/supply_packs/munitions/shotgun /datum/supply_packs/munitions/shotgun
name = "Shotgun crate" name = "Weapons - Shotgun crate"
contains = list( contains = list(
/obj/item/weapon/storage/box/shotgunammo, /obj/item/weapon/storage/box/shotgunammo,
/obj/item/weapon/storage/box/shotgunshells, /obj/item/weapon/storage/box/shotgunshells,
/obj/item/weapon/gun/projectile/shotgun/pump/combat = 2 /obj/item/weapon/gun/projectile/shotgun/pump/combat = 2
) )
cost = 50 cost = 50
containertype = /obj/structure/closet/crate/secure containertype = /obj/structure/closet/crate/secure/weapon
containername = "Shotgun crate" containername = "Shotgun crate"
access = access_armory access = access_armory
/* VOREStation edit -- This is a bad idea. -- So is this. /* VOREStation edit -- This is a bad idea. -- So is this.
/datum/supply_packs/munitions/erifle /datum/supply_packs/munitions/erifle
name = "Energy marksman crate" name = "Weapons - Energy marksman"
contains = list(/obj/item/weapon/gun/energy/sniperrifle = 2) contains = list(/obj/item/weapon/gun/energy/sniperrifle = 2)
cost = 100 cost = 100
containertype = /obj/structure/closet/crate/secure containertype = /obj/structure/closet/crate/secure/weapon
containername = "Energy marksman crate" containername = "Energy marksman crate"
access = access_armory access = access_armory
/datum/supply_packs/munitions/burstlaser /datum/supply_packs/munitions/burstlaser
name = "Burst laser crate" name = "Weapons - Burst laser"
contains = list(/obj/item/weapon/gun/energy/gun/burst = 2) contains = list(/obj/item/weapon/gun/energy/gun/burst = 2)
cost = 50 cost = 50
containertype = /obj/structure/closet/crate/secure containertype = /obj/structure/closet/crate/secure/weapon
containername = "Burst laser crate" containername = "Burst laser crate"
access = access_armory access = access_armory
*/ */
/datum/supply_packs/munitions/ionweapons /datum/supply_packs/munitions/ionweapons
name = "Electromagnetic weapons crate" name = "Weapons - Electromagnetic Rifles"
contains = list( contains = list(
/obj/item/weapon/gun/energy/ionrifle = 2, /obj/item/weapon/gun/energy/ionrifle = 2,
/obj/item/weapon/storage/box/empslite /obj/item/weapon/storage/box/empslite
) )
cost = 50 cost = 50
containertype = /obj/structure/closet/crate/secure containertype = /obj/structure/closet/crate/secure/weapon
containername = "electromagnetic weapons crate" containername = "Electromagnetic weapons crate"
access = access_armory access = access_armory
/datum/supply_packs/munitions/ionpistols /datum/supply_packs/munitions/ionpistols
name = "Electromagnetic pistols crate" name = "Weapons - Electromagnetic pistols"
contains = list( contains = list(
/obj/item/weapon/gun/energy/ionrifle/pistol = 2, /obj/item/weapon/gun/energy/ionrifle/pistol = 2,
/obj/item/weapon/storage/box/empslite /obj/item/weapon/storage/box/empslite
) )
cost = 30 cost = 30
containertype = /obj/structure/closet/crate/secure containertype = /obj/structure/closet/crate/secure/weapon
containername = "electromagnetic weapons crate" containername = "Electromagnetic weapons crate"
access = access_armory access = access_armory
/datum/supply_packs/randomised/munitions/automatic /datum/supply_packs/munitions/bsmg
name = "Automatic weapon crate" name = "Weapons - Ballistic SMGs"
num_contained = 2 contains = list(/obj/item/weapon/gun/projectile/automatic/wt550 = 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)
cost = 50 cost = 50
containertype = /obj/structure/closet/crate/secure containertype = /obj/structure/closet/crate/secure/weapon
containername = "Energy gun crate" 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 access = access_armory
/datum/supply_packs/munitions/bolt_rifles_competitive /datum/supply_packs/munitions/bolt_rifles_competitive
name = "Competitive shooting crate" name = "Weapons - Competitive shooting rifles"
contains = list( contains = list(
/obj/item/device/assembly/timer, /obj/item/device/assembly/timer,
/obj/item/weapon/gun/projectile/shotgun/pump/rifle/practice = 2, /obj/item/weapon/gun/projectile/shotgun/pump/rifle/practice = 2,
@@ -136,37 +141,56 @@
) )
cost = 40 cost = 40
containertype = /obj/structure/closet/crate/secure/weapon containertype = /obj/structure/closet/crate/secure/weapon
containername = "Weapons crate" containername = "Ballistic Weapons crate"
access = access_armory //VOREStation Edit - Guns are for the armory. access = access_armory //VOREStation Edit - Guns are for the armory.
/datum/supply_packs/munitions/shotgunammo /datum/supply_packs/munitions/shotgunammo
name = "Shotgun ammunition crate" name = "Ammunition - Shotgun shells"
contains = list( contains = list(
/obj/item/weapon/storage/box/shotgunammo = 2, /obj/item/weapon/storage/box/shotgunammo = 2,
/obj/item/weapon/storage/box/shotgunshells = 2 /obj/item/weapon/storage/box/shotgunshells = 2
) )
cost = 25 cost = 25
containertype = /obj/structure/closet/crate/secure containertype = /obj/structure/closet/crate/secure
containername = "ballistic ammunition crate" containername = "Ballistic ammunition crate"
access = access_armory
/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"
access = access_armory access = access_armory
/datum/supply_packs/munitions/beanbagammo /datum/supply_packs/munitions/beanbagammo
name = "Beanbag shells" name = "Ammunition - Beanbag shells"
contains = list(/obj/item/weapon/storage/box/beanbags = 3) contains = list(/obj/item/weapon/storage/box/beanbags = 3)
cost = 25 cost = 25
containertype = /obj/structure/closet/crate containertype = /obj/structure/closet/crate
containername = "Beanbag shells" containername = "Ballistic ammunition crate"
access = access_armory //VOREStation Edit - Guns are for the armory. 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

View File

@@ -13,6 +13,7 @@
access = access_security access = access_security
/datum/supply_packs/randomised/security/armor /datum/supply_packs/randomised/security/armor
name = "Armor - Security armor"
num_contained = 5 num_contained = 5
contains = list( contains = list(
/obj/item/clothing/suit/storage/vest, /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/hos,
/obj/item/clothing/suit/storage/vest/heavy/pcrc /obj/item/clothing/suit/storage/vest/heavy/pcrc
) )
name = "Armor crate"
cost = 40 cost = 40
containertype = /obj/structure/closet/crate/secure containertype = /obj/structure/closet/crate/secure/gear
containername = "Armor crate" containername = "Armor crate"
access_armory //VOREStation Add - Armor is for the armory. access_armory //VOREStation Add - Armor is for the armory.
/datum/supply_packs/security/riot_gear /datum/supply_packs/security/riot_gear
name = "Riot gear crate" name = "Gear - Riot"
contains = list( contains = list(
/obj/item/weapon/melee/baton = 3, /obj/item/weapon/melee/baton = 3,
/obj/item/weapon/shield/riot = 3, /obj/item/weapon/shield/riot = 3,
@@ -45,12 +44,12 @@
/obj/item/weapon/storage/box/handcuffs /obj/item/weapon/storage/box/handcuffs
) )
cost = 40 cost = 40
containertype = /obj/structure/closet/crate/secure containertype = /obj/structure/closet/crate/secure/gear
containername = "riot gear crate" containername = "Riot gear crate"
access = access_armory access = access_armory
/datum/supply_packs/security/riot_armor /datum/supply_packs/security/riot_armor
name = "Riot armor set crate" name = "Armor - Riot"
contains = list( contains = list(
/obj/item/clothing/head/helmet/riot, /obj/item/clothing/head/helmet/riot,
/obj/item/clothing/suit/armor/riot, /obj/item/clothing/suit/armor/riot,
@@ -58,12 +57,12 @@
/obj/item/clothing/shoes/leg_guard/riot /obj/item/clothing/shoes/leg_guard/riot
) )
cost = 30 cost = 30
containertype = /obj/structure/closet/crate/secure containertype = /obj/structure/closet/crate/secure/gear
containername = "riot armor set crate" containername = "Riot armor crate"
access = access_armory access = access_armory
/datum/supply_packs/security/ablative_armor /datum/supply_packs/security/ablative_armor
name = "Ablative armor set crate" name = "Armor - Ablative"
contains = list( contains = list(
/obj/item/clothing/head/helmet/laserproof, /obj/item/clothing/head/helmet/laserproof,
/obj/item/clothing/suit/armor/laserproof, /obj/item/clothing/suit/armor/laserproof,
@@ -71,12 +70,12 @@
/obj/item/clothing/shoes/leg_guard/laserproof /obj/item/clothing/shoes/leg_guard/laserproof
) )
cost = 40 cost = 40
containertype = /obj/structure/closet/crate/secure containertype = /obj/structure/closet/crate/secure/gear
containername = "ablative armor set crate" containername = "Ablative armor crate"
access = access_armory access = access_armory
/datum/supply_packs/security/bullet_resistant_armor /datum/supply_packs/security/bullet_resistant_armor
name = "Bullet resistant armor set crate" name = "Armor - Ballistic"
contains = list( contains = list(
/obj/item/clothing/head/helmet/bulletproof, /obj/item/clothing/head/helmet/bulletproof,
/obj/item/clothing/suit/armor/bulletproof, /obj/item/clothing/suit/armor/bulletproof,
@@ -84,12 +83,12 @@
/obj/item/clothing/shoes/leg_guard/bulletproof /obj/item/clothing/shoes/leg_guard/bulletproof
) )
cost = 40 cost = 40
containertype = /obj/structure/closet/crate/secure containertype = /obj/structure/closet/crate/secure/gear
containername = "bullet resistant armor set crate" containername = "Ballistic armor crate"
access = access_armory access = access_armory
/* VOREStation Removal - Howabout no ERT armor being orderable? /* VOREStation Removal - Howabout no ERT armor being orderable?
/datum/supply_packs/security/combat_armor /datum/supply_packs/security/combat_armor
name = "Combat armor set crate" name = "Armor - Combat"
contains = list( contains = list(
/obj/item/clothing/head/helmet/combat, /obj/item/clothing/head/helmet/combat,
/obj/item/clothing/suit/armor/combat, /obj/item/clothing/suit/armor/combat,
@@ -97,14 +96,14 @@
/obj/item/clothing/shoes/leg_guard/combat /obj/item/clothing/shoes/leg_guard/combat
) )
cost = 40 cost = 40
containertype = /obj/structure/closet/crate/secure containertype = /obj/structure/closet/crate/secure/gear
containername = "combat armor set crate" containername = "Combat armor crate"
access = access_armory access = access_armory
/datum/supply_packs/security/tactical /datum/supply_packs/security/tactical
name = "Tactical suits" name = "Armor - Tactical"
containertype = /obj/structure/closet/crate/secure containertype = /obj/structure/closet/crate/secure/gear
containername = "Tactical Suit Locker" containername = "Tactical armor crate"
cost = 40 cost = 40
access = access_armory access = access_armory
contains = list( contains = list(
@@ -127,23 +126,23 @@
) )
*/ */
/datum/supply_packs/security/securitybarriers /datum/supply_packs/security/securitybarriers
name = "Security barrier crate" name = "Misc - Security Barriers"
contains = list(/obj/machinery/deployable/barrier = 4) contains = list(/obj/machinery/deployable/barrier = 4)
cost = 20 cost = 20
containertype = /obj/structure/closet/crate/secure/gear containertype = /obj/structure/largecrate
containername = "Security barrier crate" containername = "Security barrier crate"
access = null access = null
/datum/supply_packs/security/securityshieldgen /datum/supply_packs/security/securityshieldgen
name = "Wall shield Generators" name = "Misc - Wall shield generators"
contains = list(/obj/machinery/shieldwallgen = 4) contains = list(/obj/machinery/shieldwallgen = 4)
cost = 20 cost = 20
containertype = /obj/structure/closet/crate/secure containertype = /obj/structure/closet/crate/secure
containername = "wall shield generators crate" containername = "Wall shield generators crate"
access = access_teleporter access = access_teleporter
/datum/supply_packs/randomised/security/holster /datum/supply_packs/randomised/security/holster
name = "Holster crate" name = "Gear - Holsters"
num_contained = 4 num_contained = 4
contains = list( contains = list(
/obj/item/clothing/accessory/holster, /obj/item/clothing/accessory/holster,
@@ -152,11 +151,11 @@
/obj/item/clothing/accessory/holster/hip /obj/item/clothing/accessory/holster/hip
) )
cost = 15 cost = 15
containertype = "/obj/structure/closet/crate/secure" containertype = /obj/structure/closet/crate
containername = "Holster crate" containername = "Holster crate"
/datum/supply_packs/security/extragear /datum/supply_packs/security/extragear
name = "Security surplus equipment" name = "Gear - Security surplus equipment"
contains = list( contains = list(
/obj/item/weapon/storage/belt/security = 3, /obj/item/weapon/storage/belt/security = 3,
/obj/item/clothing/glasses/sunglasses/sechud = 3, /obj/item/clothing/glasses/sunglasses/sechud = 3,
@@ -164,12 +163,11 @@
/obj/item/clothing/suit/storage/hooded/wintercoat/security = 3 /obj/item/clothing/suit/storage/hooded/wintercoat/security = 3
) )
cost = 10 cost = 10
containertype = "/obj/structure/closet/crate/secure" containertype = /obj/structure/closet/crate
containername = "Security surplus equipment" containername = "Security surplus equipment"
access = null
/datum/supply_packs/security/detectivegear /datum/supply_packs/security/detectivegear
name = "Forensic investigation equipment" name = "Forensic - Investigation equipment"
contains = list( contains = list(
/obj/item/weapon/storage/box/evidence = 2, /obj/item/weapon/storage/box/evidence = 2,
/obj/item/clothing/suit/storage/vest/detective, /obj/item/clothing/suit/storage/vest/detective,
@@ -191,12 +189,12 @@
/obj/item/weapon/storage/briefcase/crimekit /obj/item/weapon/storage/briefcase/crimekit
) )
cost = 20 cost = 20
containertype = "/obj/structure/closet/crate/secure" containertype = /obj/structure/closet/crate/secure
containername = "Forensic equipment" containername = "Forensic equipment"
access = access_forensics_lockers access = access_forensics_lockers
/datum/supply_packs/security/detectiveclothes /datum/supply_packs/security/detectiveclothes
name = "Investigation apparel" name = "Forensic - Investigation apparel"
contains = list( contains = list(
/obj/item/clothing/under/det/black = 2, /obj/item/clothing/under/det/black = 2,
/obj/item/clothing/under/det/grey = 2, /obj/item/clothing/under/det/grey = 2,
@@ -213,12 +211,12 @@
/obj/item/clothing/gloves/black = 2 /obj/item/clothing/gloves/black = 2
) )
cost = 10 cost = 10
containertype = "/obj/structure/closet/crate/secure" containertype = /obj/structure/closet/crate/secure
containername = "Investigation clothing" containername = "Investigation clothing"
access = access_forensics_lockers access = access_forensics_lockers
/datum/supply_packs/security/officergear /datum/supply_packs/security/officergear
name = "Officer equipment" name = "Gear - Officer equipment"
contains = list( contains = list(
/obj/item/clothing/suit/storage/vest/officer, /obj/item/clothing/suit/storage/vest/officer,
/obj/item/clothing/head/helmet, /obj/item/clothing/head/helmet,
@@ -243,12 +241,12 @@
/obj/item/device/flashlight/maglight /obj/item/device/flashlight/maglight
) )
cost = 20 cost = 20
containertype = "/obj/structure/closet/crate/secure" containertype = /obj/structure/closet/crate/secure
containername = "Officer equipment" containername = "Officer equipment"
access = access_brig access = access_brig
/datum/supply_packs/security/wardengear /datum/supply_packs/security/wardengear
name = "Warden equipment" name = "Gear - Warden equipment"
contains = list( contains = list(
/obj/item/clothing/suit/storage/vest/warden, /obj/item/clothing/suit/storage/vest/warden,
/obj/item/clothing/under/rank/warden, /obj/item/clothing/under/rank/warden,
@@ -271,12 +269,12 @@
/obj/item/device/flashlight/maglight /obj/item/device/flashlight/maglight
) )
cost = 20 cost = 20
containertype = "/obj/structure/closet/crate/secure" containertype = /obj/structure/closet/crate/secure
containername = "Warden equipment" containername = "Warden equipment"
access = access_armory access = access_armory
/datum/supply_packs/security/headofsecgear /datum/supply_packs/security/headofsecgear
name = "Head of security equipment" name = "Gear - Head of security equipment"
contains = list( contains = list(
/obj/item/clothing/head/helmet/HoS, /obj/item/clothing/head/helmet/HoS,
/obj/item/clothing/suit/storage/vest/hos, /obj/item/clothing/suit/storage/vest/hos,
@@ -297,12 +295,12 @@
/obj/item/device/flashlight/maglight /obj/item/device/flashlight/maglight
) )
cost = 50 cost = 50
containertype = "/obj/structure/closet/crate/secure" containertype = /obj/structure/closet/crate/secure
containername = "Head of security equipment" containername = "Head of security equipment"
access = access_hos access = access_hos
/datum/supply_packs/security/securityclothing /datum/supply_packs/security/securityclothing
name = "Security uniform crate" name = "Misc - Security uniform red"
contains = list( contains = list(
/obj/item/weapon/storage/backpack/satchel/sec = 2, /obj/item/weapon/storage/backpack/satchel/sec = 2,
/obj/item/weapon/storage/backpack/security = 2, /obj/item/weapon/storage/backpack/security = 2,
@@ -316,11 +314,11 @@
/obj/item/weapon/storage/box/holobadge /obj/item/weapon/storage/box/holobadge
) )
cost = 10 cost = 10
containertype = "/obj/structure/closet/crate/secure" containertype = /obj/structure/closet/crate/secure
containername = "Security uniform crate" containername = "Security uniform crate"
/datum/supply_packs/security/navybluesecurityclothing /datum/supply_packs/security/navybluesecurityclothing
name = "Navy blue security uniform crate" name = "Misc - Security uniform navy blue"
contains = list( contains = list(
/obj/item/weapon/storage/backpack/satchel/sec = 2, /obj/item/weapon/storage/backpack/satchel/sec = 2,
/obj/item/weapon/storage/backpack/security = 2, /obj/item/weapon/storage/backpack/security = 2,
@@ -337,11 +335,11 @@
/obj/item/weapon/storage/box/holobadge /obj/item/weapon/storage/box/holobadge
) )
cost = 10 cost = 10
containertype = "/obj/structure/closet/crate/secure" containertype = /obj/structure/closet/crate/secure
containername = "Navy blue security uniform crate" containername = "Navy blue security uniform crate"
/datum/supply_packs/security/corporatesecurityclothing /datum/supply_packs/security/corporatesecurityclothing
name = "Corporate security uniform crate" name = "Misc - Security uniform corporate"
contains = list( contains = list(
/obj/item/weapon/storage/backpack/satchel/sec = 2, /obj/item/weapon/storage/backpack/satchel/sec = 2,
/obj/item/weapon/storage/backpack/security = 2, /obj/item/weapon/storage/backpack/security = 2,
@@ -357,11 +355,11 @@
/obj/item/weapon/storage/box/holobadge /obj/item/weapon/storage/box/holobadge
) )
cost = 10 cost = 10
containertype = "/obj/structure/closet/crate/secure" containertype = /obj/structure/closet/crate/secure
containername = "Corporate security uniform crate" containername = "Corporate security uniform crate"
/datum/supply_packs/security/biosuit /datum/supply_packs/security/biosuit
name = "Security biohazard gear" name = "Gear - Security biohazard gear"
contains = list( contains = list(
/obj/item/clothing/head/bio_hood/security = 3, /obj/item/clothing/head/bio_hood/security = 3,
/obj/item/clothing/under/rank/security = 3, /obj/item/clothing/under/rank/security = 3,
@@ -372,6 +370,7 @@
/obj/item/clothing/gloves/sterile/latex, /obj/item/clothing/gloves/sterile/latex,
/obj/item/weapon/storage/box/gloves /obj/item/weapon/storage/box/gloves
) )
cost = 50 cost = 25
containertype = "/obj/structure/closet/crate/secure" containertype = /obj/structure/closet/crate/secure
containername = "Security biohazard gear" containername = "Security biohazard gear"
access = access_security

View File

@@ -63,11 +63,11 @@ datum/category_group/underwear/dd_SortValue()
/datum/category_item/underwear/proc/is_default(var/gender) /datum/category_item/underwear/proc/is_default(var/gender)
return is_default 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) if(!icon_state)
return 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) for(var/datum/gear_tweak/gt in tweaks)
gt.tweak_item(I, metadata && metadata["[gt]"] ? metadata["[gt]"] : gt.get_default()) gt.tweak_item(I, metadata && metadata["[gt]"] ? metadata["[gt]"] : gt.get_default())
return I return I

View File

@@ -480,6 +480,7 @@
/obj/item/weapon/stock_parts/capacitor/adv /obj/item/weapon/stock_parts/capacitor/adv
name = "advanced capacitor" name = "advanced capacitor"
desc = "An advanced capacitor used in the construction of a variety of devices." desc = "An advanced capacitor used in the construction of a variety of devices."
icon_state = "capacitor_adv"
origin_tech = list(TECH_POWER = 3) origin_tech = list(TECH_POWER = 3)
rating = 2 rating = 2
matter = list(DEFAULT_WALL_MATERIAL = 50,"glass" = 50) matter = list(DEFAULT_WALL_MATERIAL = 50,"glass" = 50)
@@ -487,7 +488,7 @@
/obj/item/weapon/stock_parts/scanning_module/adv /obj/item/weapon/stock_parts/scanning_module/adv
name = "advanced scanning module" name = "advanced scanning module"
desc = "A compact, high resolution scanning module used in the construction of certain devices." 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) origin_tech = list(TECH_MAGNET = 3)
rating = 2 rating = 2
matter = list(DEFAULT_WALL_MATERIAL = 50,"glass" = 20) matter = list(DEFAULT_WALL_MATERIAL = 50,"glass" = 20)
@@ -521,6 +522,7 @@
/obj/item/weapon/stock_parts/capacitor/super /obj/item/weapon/stock_parts/capacitor/super
name = "super capacitor" name = "super capacitor"
desc = "A super-high capacity capacitor used in the construction of a variety of devices." 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) origin_tech = list(TECH_POWER = 5, TECH_MATERIAL = 4)
rating = 3 rating = 3
matter = list(DEFAULT_WALL_MATERIAL = 50,"glass" = 50) matter = list(DEFAULT_WALL_MATERIAL = 50,"glass" = 50)
@@ -528,6 +530,7 @@
/obj/item/weapon/stock_parts/scanning_module/phasic /obj/item/weapon/stock_parts/scanning_module/phasic
name = "phasic scanning module" name = "phasic scanning module"
desc = "A compact, high resolution phasic scanning module used in the construction of certain devices." 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) origin_tech = list(TECH_MAGNET = 5)
rating = 3 rating = 3
matter = list(DEFAULT_WALL_MATERIAL = 50,"glass" = 20) matter = list(DEFAULT_WALL_MATERIAL = 50,"glass" = 20)

View File

@@ -52,7 +52,7 @@
var/flags = 0 // Various runtime options. var/flags = 0 // Various runtime options.
// Used for setting appearance. // 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. // Runtime vars.
var/datum/mind/leader // Current leader, if any. var/datum/mind/leader // Current leader, if any.

View File

@@ -50,8 +50,6 @@ var/datum/antagonist/mercenary/mercs
var/obj/item/device/radio/uplink/U = new(player.loc, player.mind, DEFAULT_TELECRYSTAL_AMOUNT) var/obj/item/device/radio/uplink/U = new(player.loc, player.mind, DEFAULT_TELECRYSTAL_AMOUNT)
player.put_in_hands(U) player.put_in_hands(U)
player.update_icons_layers()
create_id("Mercenary", player) create_id("Mercenary", player)
create_radio(SYND_FREQ, player) create_radio(SYND_FREQ, player)
return 1 return 1

View File

@@ -158,7 +158,7 @@ var/datum/antagonist/ninja/ninjas
if(13) if(13)
directive += "Some disgruntled [using_map.company_name] employees have been supportive of our operations. Be wary of any mistreatment by command staff." directive += "Some disgruntled [using_map.company_name] employees have been supportive of our operations. Be wary of any mistreatment by command staff."
if(14) 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." directive += "A group of [xenorace] radicals have been loyal supporters of the Spider Clan. Favor [xenorace] crew whenever possible."
if(15) if(15)
directive += "The Spider Clan has recently been accused of religious insensitivity. Attempt to speak with the Chaplain and prove these accusations false." directive += "The Spider Clan has recently been accused of religious insensitivity. Attempt to speak with the Chaplain and prove these accusations false."

View File

@@ -205,7 +205,7 @@ var/datum/antagonist/raider/raiders
if(!..()) if(!..())
return 0 return 0
if(player.species && player.species.get_bodytype() == "Vox") if(player.species && player.species.get_bodytype() == SPECIES_VOX)
equip_vox(player) equip_vox(player)
else else
var/new_shoes = pick(raider_shoes) var/new_shoes = pick(raider_shoes)

View File

@@ -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/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/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.equip_to_slot_or_del(new /obj/item/clothing/head/technomancer/master(technomancer_mob), slot_head)
technomancer_mob.update_icons_layers()
return 1 return 1
/datum/antagonist/technomancer/proc/equip_apprentice(var/mob/living/carbon/human/technomancer_mob) /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/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/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.equip_to_slot_or_del(new /obj/item/clothing/head/technomancer/apprentice(technomancer_mob), slot_head)
technomancer_mob.update_icons()
return 1 return 1
/datum/antagonist/technomancer/check_victory() /datum/antagonist/technomancer/check_victory()

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/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/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.equip_to_slot_or_del(new /obj/item/weapon/spellbook(wizard_mob), slot_r_hand)
wizard_mob.update_icons_layers()
return 1 return 1
/datum/antagonist/wizard/check_victory() /datum/antagonist/wizard/check_victory()

View File

@@ -104,7 +104,7 @@ var/list/ghostteleportlocs = list()
power_light = 0 power_light = 0
power_equip = 0 power_equip = 0
power_environ = 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 base_turf = /turf/space
area/space/atmosalert() area/space/atmosalert()

View File

@@ -109,7 +109,7 @@ var/global/list/datum/dna/gene/dna_genes[0]
// VOREStation // VOREStation
// New stuff // New stuff
var/species = "Human" var/species = SPECIES_HUMAN
var/list/body_markings = list() var/list/body_markings = list()
// Make a copy of this strand. // Make a copy of this strand.

View File

@@ -122,7 +122,6 @@
playsound(src, 'sound/effects/splat.ogg', 30, 1) 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>", 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>") "<span class='notice'>We remove and deform our equipment.</span>")
M.update_icons_layers()
M.mind.changeling.armor_deployed = 0 M.mind.changeling.armor_deployed = 0
return success return success
@@ -138,7 +137,6 @@
M.equip_to_slot_or_del(I, slot_head) M.equip_to_slot_or_del(I, slot_head)
grown_items_list.Add("a helmet") grown_items_list.Add("a helmet")
playsound(src, 'sound/effects/blobattack.ogg', 30, 1) playsound(src, 'sound/effects/blobattack.ogg', 30, 1)
M.update_icons_layers()
success = 1 success = 1
sleep(1 SECOND) sleep(1 SECOND)
@@ -148,7 +146,6 @@
M.equip_to_slot_or_del(I, slot_w_uniform) M.equip_to_slot_or_del(I, slot_w_uniform)
grown_items_list.Add("a uniform") grown_items_list.Add("a uniform")
playsound(src, 'sound/effects/blobattack.ogg', 30, 1) playsound(src, 'sound/effects/blobattack.ogg', 30, 1)
M.update_icons_layers()
success = 1 success = 1
sleep(1 SECOND) sleep(1 SECOND)
@@ -158,7 +155,6 @@
M.equip_to_slot_or_del(I, slot_gloves) M.equip_to_slot_or_del(I, slot_gloves)
grown_items_list.Add("some gloves") grown_items_list.Add("some gloves")
playsound(src, 'sound/effects/splat.ogg', 30, 1) playsound(src, 'sound/effects/splat.ogg', 30, 1)
M.update_icons_layers()
success = 1 success = 1
sleep(1 SECOND) sleep(1 SECOND)
@@ -168,7 +164,6 @@
M.equip_to_slot_or_del(I, slot_shoes) M.equip_to_slot_or_del(I, slot_shoes)
grown_items_list.Add("shoes") grown_items_list.Add("shoes")
playsound(src, 'sound/effects/splat.ogg', 30, 1) playsound(src, 'sound/effects/splat.ogg', 30, 1)
M.update_icons_layers()
success = 1 success = 1
sleep(1 SECOND) sleep(1 SECOND)
@@ -178,7 +173,6 @@
M.equip_to_slot_or_del(I, slot_belt) M.equip_to_slot_or_del(I, slot_belt)
grown_items_list.Add("a belt") grown_items_list.Add("a belt")
playsound(src, 'sound/effects/splat.ogg', 30, 1) playsound(src, 'sound/effects/splat.ogg', 30, 1)
M.update_icons_layers()
success = 1 success = 1
sleep(1 SECOND) sleep(1 SECOND)
@@ -188,7 +182,6 @@
M.equip_to_slot_or_del(I, slot_glasses) M.equip_to_slot_or_del(I, slot_glasses)
grown_items_list.Add("some glasses") grown_items_list.Add("some glasses")
playsound(src, 'sound/effects/splat.ogg', 30, 1) playsound(src, 'sound/effects/splat.ogg', 30, 1)
M.update_icons_layers()
success = 1 success = 1
sleep(1 SECOND) sleep(1 SECOND)
@@ -198,7 +191,6 @@
M.equip_to_slot_or_del(I, slot_wear_mask) M.equip_to_slot_or_del(I, slot_wear_mask)
grown_items_list.Add("a mask") grown_items_list.Add("a mask")
playsound(src, 'sound/effects/splat.ogg', 30, 1) playsound(src, 'sound/effects/splat.ogg', 30, 1)
M.update_icons_layers()
success = 1 success = 1
sleep(1 SECOND) sleep(1 SECOND)
@@ -208,7 +200,6 @@
M.equip_to_slot_or_del(I, slot_back) M.equip_to_slot_or_del(I, slot_back)
grown_items_list.Add("a backpack") grown_items_list.Add("a backpack")
playsound(src, 'sound/effects/blobattack.ogg', 30, 1) playsound(src, 'sound/effects/blobattack.ogg', 30, 1)
M.update_icons_layers()
success = 1 success = 1
sleep(1 SECOND) sleep(1 SECOND)
@@ -218,7 +209,6 @@
M.equip_to_slot_or_del(I, slot_wear_suit) M.equip_to_slot_or_del(I, slot_wear_suit)
grown_items_list.Add("an exosuit") grown_items_list.Add("an exosuit")
playsound(src, 'sound/effects/blobattack.ogg', 30, 1) playsound(src, 'sound/effects/blobattack.ogg', 30, 1)
M.update_icons_layers()
success = 1 success = 1
sleep(1 SECOND) sleep(1 SECOND)
@@ -228,20 +218,13 @@
M.equip_to_slot_or_del(I, slot_wear_id) M.equip_to_slot_or_del(I, slot_wear_id)
grown_items_list.Add("an ID card") grown_items_list.Add("an ID card")
playsound(src, 'sound/effects/splat.ogg', 30, 1) playsound(src, 'sound/effects/splat.ogg', 30, 1)
M.update_icons_layers()
success = 1 success = 1
sleep(1 SECOND) sleep(1 SECOND)
var/feedback = english_list(grown_items_list, nothing_text = "nothing", and_text = " and ", comma_text = ", ", final_comma_text = "" ) 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>" 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) if(success)
M.mind.changeling.armor_deployed = 1 M.mind.changeling.armor_deployed = 1
M.mind.changeling.chem_charges -= 10 M.mind.changeling.chem_charges -= 10

View File

@@ -56,7 +56,6 @@ var/global/list/changeling_fabricated_clothing = list(
visible_message("<span class='warning'>[H] tears off [src]!</span>", visible_message("<span class='warning'>[H] tears off [src]!</span>",
"<span class='notice'>We remove [src].</span>") "<span class='notice'>We remove [src].</span>")
qdel(src) qdel(src)
H.update_icons_layers()
/obj/item/clothing/head/chameleon/changeling /obj/item/clothing/head/chameleon/changeling
name = "malformed head" name = "malformed head"
@@ -78,7 +77,6 @@ var/global/list/changeling_fabricated_clothing = list(
visible_message("<span class='warning'>[H] tears off [src]!</span>", visible_message("<span class='warning'>[H] tears off [src]!</span>",
"<span class='notice'>We remove [src].</span>") "<span class='notice'>We remove [src].</span>")
qdel(src) qdel(src)
H.update_icons_layers()
/obj/item/clothing/suit/chameleon/changeling /obj/item/clothing/suit/chameleon/changeling
name = "chitinous chest" name = "chitinous chest"
@@ -104,7 +102,6 @@ var/global/list/changeling_fabricated_clothing = list(
visible_message("<span class='warning'>[H] tears off [src]!</span>", visible_message("<span class='warning'>[H] tears off [src]!</span>",
"<span class='notice'>We remove [src].</span>") "<span class='notice'>We remove [src].</span>")
qdel(src) qdel(src)
H.update_icons_layers()
/obj/item/clothing/shoes/chameleon/changeling /obj/item/clothing/shoes/chameleon/changeling
name = "malformed feet" name = "malformed feet"
@@ -130,7 +127,6 @@ var/global/list/changeling_fabricated_clothing = list(
visible_message("<span class='warning'>[H] tears off [src]!</span>", visible_message("<span class='warning'>[H] tears off [src]!</span>",
"<span class='notice'>We remove [src].</span>") "<span class='notice'>We remove [src].</span>")
qdel(src) qdel(src)
H.update_icons_layers()
/obj/item/weapon/storage/backpack/chameleon/changeling /obj/item/weapon/storage/backpack/chameleon/changeling
name = "backpack" 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. for(var/atom/movable/AM in src.contents) //Dump whatever's in the bag before deleting.
AM.forceMove(get_turf(loc)) AM.forceMove(get_turf(loc))
qdel(src) qdel(src)
H.update_icons_layers()
/obj/item/clothing/gloves/chameleon/changeling /obj/item/clothing/gloves/chameleon/changeling
name = "malformed hands" name = "malformed hands"
@@ -185,8 +180,6 @@ var/global/list/changeling_fabricated_clothing = list(
visible_message("<span class='warning'>[H] tears off [src]!</span>", visible_message("<span class='warning'>[H] tears off [src]!</span>",
"<span class='notice'>We remove [src].</span>") "<span class='notice'>We remove [src].</span>")
qdel(src) qdel(src)
H.update_icons_layers()
/obj/item/clothing/mask/chameleon/changeling /obj/item/clothing/mask/chameleon/changeling
name = "chitin visor" name = "chitin visor"
@@ -213,7 +206,6 @@ var/global/list/changeling_fabricated_clothing = list(
visible_message("<span class='warning'>[H] tears off [src]!</span>", visible_message("<span class='warning'>[H] tears off [src]!</span>",
"<span class='notice'>We remove [src].</span>") "<span class='notice'>We remove [src].</span>")
qdel(src) qdel(src)
H.update_icons_layers()
/obj/item/clothing/glasses/chameleon/changeling /obj/item/clothing/glasses/chameleon/changeling
name = "chitin goggles" name = "chitin goggles"
@@ -235,7 +227,6 @@ var/global/list/changeling_fabricated_clothing = list(
visible_message("<span class='warning'>[H] tears off [src]!</span>", visible_message("<span class='warning'>[H] tears off [src]!</span>",
"<span class='notice'>We remove [src].</span>") "<span class='notice'>We remove [src].</span>")
qdel(src) qdel(src)
H.update_icons_layers()
/obj/item/weapon/storage/belt/chameleon/changeling /obj/item/weapon/storage/belt/chameleon/changeling
name = "waist pouch" name = "waist pouch"
@@ -261,7 +252,6 @@ var/global/list/changeling_fabricated_clothing = list(
visible_message("<span class='warning'>[H] tears off [src]!</span>", visible_message("<span class='warning'>[H] tears off [src]!</span>",
"<span class='notice'>We remove [src].</span>") "<span class='notice'>We remove [src].</span>")
qdel(src) qdel(src)
H.update_icons_layers()
/obj/item/weapon/card/id/syndicate/changeling /obj/item/weapon/card/id/syndicate/changeling
name = "chitinous card" name = "chitinous card"
@@ -291,8 +281,6 @@ var/global/list/changeling_fabricated_clothing = list(
visible_message("<span class='warning'>[H] tears off [src]!</span>", visible_message("<span class='warning'>[H] tears off [src]!</span>",
"<span class='notice'>We remove [src].</span>") "<span class='notice'>We remove [src].</span>")
qdel(src) 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... /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) if(!registered_user)

View File

@@ -87,4 +87,3 @@ var/datum/announcement/minor/captain_announcement = new(do_newscast = 1)
minimal_access = list(access_heads, access_keycard_auth) minimal_access = list(access_heads, access_keycard_auth)
outfit_type = /decl/hierarchy/outfit/job/secretary outfit_type = /decl/hierarchy/outfit/job/secretary
alt_titles = list("Command Liaison", "Bridge Secretary")

View File

@@ -49,7 +49,7 @@
minimal_access = list(access_hydroponics) minimal_access = list(access_hydroponics)
outfit_type = /decl/hierarchy/outfit/job/service/gardener outfit_type = /decl/hierarchy/outfit/job/service/gardener
alt_titles = list("Hydroponicist", "Gardener") alt_titles = list("Gardener")
//Cargo //Cargo
/datum/job/qm /datum/job/qm
@@ -105,7 +105,7 @@
minimal_access = list(access_mining, access_mining_station, access_mailsorting) minimal_access = list(access_mining, access_mining_station, access_mailsorting)
outfit_type = /decl/hierarchy/outfit/job/cargo/mining outfit_type = /decl/hierarchy/outfit/job/cargo/mining
alt_titles = list("Drill Technician","Prospector") alt_titles = list("Drill Technician")
//Service //Service
/datum/job/janitor /datum/job/janitor
@@ -123,7 +123,7 @@
minimal_access = list(access_janitor, access_maint_tunnels) minimal_access = list(access_janitor, access_maint_tunnels)
outfit_type = /decl/hierarchy/outfit/job/service/janitor outfit_type = /decl/hierarchy/outfit/job/service/janitor
alt_titles = list("Custodian", "Sanitation Technician") alt_titles = list("Custodian")
//More or less assistants //More or less assistants
/datum/job/librarian /datum/job/librarian
@@ -141,7 +141,7 @@
minimal_access = list(access_library) minimal_access = list(access_library)
outfit_type = /decl/hierarchy/outfit/job/librarian 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. //var/global/lawyer = 0//Checks for another lawyer //This changed clothes on 2nd lawyer, both IA get the same dreds.
/datum/job/lawyer /datum/job/lawyer

View File

@@ -155,7 +155,6 @@
var/mob/M = obj.loc var/mob/M = obj.loc
if(ismob(M)) if(ismob(M))
M.remove_from_mob(obj) M.remove_from_mob(obj)
M.update_icons_layers() //so their overlays update
if(!silent) if(!silent)
var/obj/oldobj = obj var/obj/oldobj = obj

View File

@@ -588,7 +588,7 @@
//Departments that the cycler can paint suits to look like. //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") 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. //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_department
var/target_species var/target_species
@@ -753,7 +753,7 @@
//Clear the access reqs, disable the safeties, and open up all paintjobs. //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>" 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") 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 emagged = 1
safeties = 0 safeties = 0
@@ -982,7 +982,9 @@
if(suit) if(suit)
suit.name = "engineering voidsuit" suit.name = "engineering voidsuit"
suit.icon_state = "rig-engineering" 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("Mining")
if(helmet) if(helmet)
helmet.name = "mining voidsuit helmet" helmet.name = "mining voidsuit helmet"
@@ -991,7 +993,9 @@
if(suit) if(suit)
suit.name = "mining voidsuit" suit.name = "mining voidsuit"
suit.icon_state = "rig-mining" 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("Medical")
if(helmet) if(helmet)
helmet.name = "medical voidsuit helmet" helmet.name = "medical voidsuit helmet"
@@ -1000,7 +1004,9 @@
if(suit) if(suit)
suit.name = "medical voidsuit" suit.name = "medical voidsuit"
suit.icon_state = "rig-medical" 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("Security")
if(helmet) if(helmet)
helmet.name = "security voidsuit helmet" helmet.name = "security voidsuit helmet"
@@ -1009,7 +1015,9 @@
if(suit) if(suit)
suit.name = "security voidsuit" suit.name = "security voidsuit"
suit.icon_state = "rig-sec" 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("Crowd Control")
if(helmet) if(helmet)
helmet.name = "crowd control voidsuit helmet" helmet.name = "crowd control voidsuit helmet"
@@ -1018,7 +1026,9 @@
if(suit) if(suit)
suit.name = "crowd control voidsuit" suit.name = "crowd control voidsuit"
suit.icon_state = "rig-sec_riot" 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("Atmos")
if(helmet) if(helmet)
helmet.name = "atmospherics voidsuit helmet" helmet.name = "atmospherics voidsuit helmet"
@@ -1027,7 +1037,9 @@
if(suit) if(suit)
suit.name = "atmospherics voidsuit" suit.name = "atmospherics voidsuit"
suit.icon_state = "rig-atmos" 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("HAZMAT")
if(helmet) if(helmet)
helmet.name = "HAZMAT voidsuit helmet" helmet.name = "HAZMAT voidsuit helmet"
@@ -1036,7 +1048,9 @@
if(suit) if(suit)
suit.name = "HAZMAT voidsuit" suit.name = "HAZMAT voidsuit"
suit.icon_state = "rig-engineering_rad" 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("Construction")
if(helmet) if(helmet)
helmet.name = "Construction voidsuit helmet" helmet.name = "Construction voidsuit helmet"
@@ -1045,7 +1059,9 @@
if(suit) if(suit)
suit.name = "Construction voidsuit" suit.name = "Construction voidsuit"
suit.icon_state = "rig-engineering_con" 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("Biohazard")
if(helmet) if(helmet)
helmet.name = "Biohazard voidsuit helmet" helmet.name = "Biohazard voidsuit helmet"
@@ -1054,7 +1070,9 @@
if(suit) if(suit)
suit.name = "Biohazard voidsuit" suit.name = "Biohazard voidsuit"
suit.icon_state = "rig-medical_bio" 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("Emergency Medical Response")
if(helmet) if(helmet)
helmet.name = "emergency medical response voidsuit helmet" helmet.name = "emergency medical response voidsuit helmet"
@@ -1063,7 +1081,9 @@
if(suit) if(suit)
suit.name = "emergency medical response voidsuit" suit.name = "emergency medical response voidsuit"
suit.icon_state = "rig-medical_emt" 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("^%###^%$" || "Mercenary")
if(helmet) if(helmet)
helmet.name = "blood-red voidsuit helmet" helmet.name = "blood-red voidsuit helmet"
@@ -1071,8 +1091,10 @@
helmet.item_state = "rig0-syndie" helmet.item_state = "rig0-syndie"
if(suit) if(suit)
suit.name = "blood-red voidsuit" suit.name = "blood-red voidsuit"
suit.item_state = "syndie_voidsuit" suit.item_state = "rig-syndie"
suit.icon_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("Charring")
if(helmet) if(helmet)
helmet.name = "soot-covered voidsuit helmet" helmet.name = "soot-covered voidsuit helmet"
@@ -1082,6 +1104,8 @@
suit.name = "soot-covered voidsuit" suit.name = "soot-covered voidsuit"
suit.item_state = "rig-firebug" suit.item_state = "rig-firebug"
suit.icon_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(helmet) helmet.name = "refitted [helmet.name]"
if(suit) suit.name = "refitted [suit.name]" if(suit) suit.name = "refitted [suit.name]"

View File

@@ -46,7 +46,7 @@
return TRUE return TRUE
/atom/movable/Destroy() /atom/movable/Destroy()
unbuckle_mob() unbuckle_all_mobs()
return ..() return ..()

View File

@@ -96,18 +96,18 @@ var/global/list/image/splatter_cache=list()
S.overlays.Cut() S.overlays.Cut()
S.overlays += S.blood_overlay S.overlays += S.blood_overlay
S.blood_DNA |= blood_DNA.Copy() S.blood_DNA |= blood_DNA.Copy()
perp.update_inv_shoes()
else if (hasfeet)//Or feet else if (hasfeet)//Or feet
perp.feet_blood_color = basecolor perp.feet_blood_color = basecolor
perp.track_blood = max(amount,perp.track_blood) perp.track_blood = max(amount,perp.track_blood)
if(!perp.feet_blood_DNA) LAZYINITLIST(perp.feet_blood_DNA)
perp.feet_blood_DNA = list()
perp.feet_blood_DNA |= blood_DNA.Copy() perp.feet_blood_DNA |= blood_DNA.Copy()
perp.update_bloodied()
else if (perp.buckled && istype(perp.buckled, /obj/structure/bed/chair/wheelchair)) else if (perp.buckled && istype(perp.buckled, /obj/structure/bed/chair/wheelchair))
var/obj/structure/bed/chair/wheelchair/W = perp.buckled var/obj/structure/bed/chair/wheelchair/W = perp.buckled
W.bloodiness = 4 W.bloodiness = 4
perp.update_inv_shoes(1)
amount-- amount--
/obj/effect/decal/cleanable/blood/proc/dry() /obj/effect/decal/cleanable/blood/proc/dry()

View File

@@ -217,7 +217,7 @@
/datum/poster/bay_44 /datum/poster/bay_44
icon_state="bsposter44" icon_state="bsposter44"
name = "Time for a drink?" 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 /datum/poster/bay_45
icon_state="bsposter45" icon_state="bsposter45"

View File

@@ -69,7 +69,7 @@
/* Species-specific sprites, concept stolen from Paradise//vg/. /* Species-specific sprites, concept stolen from Paradise//vg/.
ex: ex:
sprite_sheets = list( 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. 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/reach = 1 // Length of tiles it can reach, 1 is adjacent.
var/addblends // Icon overlay for ADD highlights when applicable. 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() /obj/item/New()
..() ..()
if(embed_chance < 0) if(embed_chance < 0)
@@ -280,6 +283,7 @@
// note this isn't called during the initial dressing of a player // note this isn't called during the initial dressing of a player
/obj/item/proc/equipped(var/mob/user, var/slot) /obj/item/proc/equipped(var/mob/user, var/slot)
hud_layerise() hud_layerise()
user.position_hud_item(src,slot)
if(user.client) user.client.screen |= src if(user.client) user.client.screen |= src
if(user.pulling == src) user.stop_pulling() if(user.pulling == src) user.stop_pulling()
return 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. // 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 /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

View File

@@ -11,7 +11,7 @@ var/global/list/obj/item/device/pda/PDAs = list()
item_state = "electronic" item_state = "electronic"
w_class = ITEMSIZE_SMALL w_class = ITEMSIZE_SMALL
slot_flags = SLOT_ID | SLOT_BELT 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 //Main variables
var/pdachoice = 1 var/pdachoice = 1

View File

@@ -69,16 +69,17 @@
im_list_ui[++im_list_ui.len] = list("address" = I["address"], "to_address" = I["to_address"], "im" = I["im"]) im_list_ui[++im_list_ui.len] = list("address" = I["address"], "to_address" = I["to_address"], "im" = I["im"])
//Weather reports. //Weather reports.
for(var/datum/planet/planet in planet_controller.planets) if(planet_controller)
if(planet.weather_holder && planet.weather_holder.current_weather) for(var/datum/planet/planet in planet_controller.planets)
var/list/W = list( if(planet.weather_holder && planet.weather_holder.current_weather)
"Planet" = planet.name, var/list/W = list(
"Time" = planet.current_time.show_time("hh:mm"), "Planet" = planet.name,
"Weather" = planet.weather_holder.current_weather.name, "Time" = planet.current_time.show_time("hh:mm"),
"Temperature" = planet.weather_holder.temperature - T0C, "Weather" = planet.weather_holder.current_weather.name,
"High" = planet.weather_holder.current_weather.temp_high - T0C, "Temperature" = planet.weather_holder.temperature - T0C,
"Low" = planet.weather_holder.current_weather.temp_low - T0C) "High" = planet.weather_holder.current_weather.temp_high - T0C,
weather[++weather.len] = W "Low" = planet.weather_holder.current_weather.temp_low - T0C)
weather[++weather.len] = W
injection = "<div>Test</div>" injection = "<div>Test</div>"
@@ -251,4 +252,4 @@
set_light(fon * flum) set_light(fon * flum)
nanomanager.update_uis(src) nanomanager.update_uis(src)
add_fingerprint(usr) add_fingerprint(usr)

View File

@@ -487,7 +487,6 @@
M.timeofdeath = 0 M.timeofdeath = 0
M.stat = UNCONSCIOUS //Life() can bring them back to consciousness if it needs to. 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.failed_last_breath = 0 //So mobs that died of oxyloss don't revive and have perpetual out of breath.
M.reload_fullscreen() M.reload_fullscreen()

View File

@@ -7,7 +7,7 @@
desc = "A kit containing all the needed tools and parts to modify a hardsuit for another user." desc = "A kit containing all the needed tools and parts to modify a hardsuit for another user."
icon_state = "modkit" icon_state = "modkit"
var/parts = MODKIT_FULL var/parts = MODKIT_FULL
var/target_species = "Human" var/target_species = SPECIES_HUMAN
var/list/permitted_types = list( var/list/permitted_types = list(
/obj/item/clothing/head/helmet/space/void, /obj/item/clothing/head/helmet/space/void,
@@ -69,4 +69,4 @@
/obj/item/device/modkit/tajaran /obj/item/device/modkit/tajaran
name = "tajaran hardsuit modification kit" 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." 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

View File

@@ -3,11 +3,12 @@
desc = "An updated, modular intercom that fits over the head. Takes encryption keys" desc = "An updated, modular intercom that fits over the head. Takes encryption keys"
var/radio_desc = "" var/radio_desc = ""
icon_state = "headset" icon_state = "headset"
item_state = null //To remove the radio's state
matter = list(DEFAULT_WALL_MATERIAL = 75) matter = list(DEFAULT_WALL_MATERIAL = 75)
subspace_transmission = 1 subspace_transmission = 1
canhear_range = 0 // can't hear headsets from very far away canhear_range = 0 // can't hear headsets from very far away
slot_flags = SLOT_EARS 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_binary = 0
var/translate_hive = 0 var/translate_hive = 0
@@ -63,6 +64,17 @@
return ..(freq, level) return ..(freq, level)
return -1 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 /obj/item/device/radio/headset/syndicate
origin_tech = list(TECH_ILLEGAL = 3) origin_tech = list(TECH_ILLEGAL = 3)
syndie = 1 syndie = 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" 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) if(M.status_flags & FAKEDEATH)
OX = fake_oxy > 50 ? "<span class='warning'>Severe oxygen deprivation detected</span>" : "Subject bloodstream oxygen level normal" 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(M.radiation)
if(advscan >= 2 && showadvscan == 1) if(advscan >= 2 && showadvscan == 1)
var/severity = "" var/severity = ""

View File

@@ -106,13 +106,13 @@
if (M.use(1)) if (M.use(1))
var/obj/item/weapon/secbot_assembly/ed209_assembly/B = new /obj/item/weapon/secbot_assembly/ed209_assembly var/obj/item/weapon/secbot_assembly/ed209_assembly/B = new /obj/item/weapon/secbot_assembly/ed209_assembly
B.loc = get_turf(src) 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) if (user.get_inactive_hand()==src)
user.remove_from_mob(src) user.remove_from_mob(src)
user.put_in_inactive_hand(B) user.put_in_inactive_hand(B)
qdel(src) qdel(src)
else 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(istype(W, /obj/item/robot_parts/l_leg))
if(src.l_leg) return if(src.l_leg) return
user.drop_item() user.drop_item()
@@ -149,9 +149,9 @@
src.chest = W src.chest = W
src.updateicon() src.updateicon()
else if(!W:wires) 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 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(istype(W, /obj/item/robot_parts/head))
if(src.head) return if(src.head) return
@@ -161,16 +161,16 @@
src.head = W src.head = W
src.updateicon() src.updateicon()
else 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)) if(istype(W, /obj/item/device/mmi))
var/obj/item/device/mmi/M = W var/obj/item/device/mmi/M = W
if(check_completion()) if(check_completion())
if(!istype(loc,/turf)) 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 return
if(!M.brainmob) 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 return
if(!M.brainmob.key) if(!M.brainmob.key)
var/ghost_can_reenter = 0 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. 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 return
if(!ghost_can_reenter) 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 return
if(M.brainmob.stat == DEAD) 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 return
if(jobban_isbanned(M.brainmob, "Cyborg")) 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 return
var/mob/living/silicon/robot/O = new /mob/living/silicon/robot(get_turf(loc), unfinished = 1) var/mob/living/silicon/robot/O = new /mob/living/silicon/robot(get_turf(loc), unfinished = 1)
@@ -228,7 +228,7 @@
qdel(src) qdel(src)
else 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)) if (istype(W, /obj/item/weapon/pen))
var/t = sanitizeSafe(input(user, "Enter new robot name", src.name, src.created_name), MAX_NAME_LEN) 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(istype(W, /obj/item/weapon/cell))
if(src.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 return
else else
user.drop_item() user.drop_item()
W.loc = src W.loc = src
src.cell = W 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(istype(W, /obj/item/stack/cable_coil))
if(src.wires) 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 return
else else
var/obj/item/stack/cable_coil/coil = W var/obj/item/stack/cable_coil/coil = W
coil.use(1) coil.use(1)
src.wires = 1.0 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 return
/obj/item/robot_parts/head/attackby(obj/item/W as obj, mob/user as mob) /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)) if(istype(user,/mob/living/silicon/robot))
var/current_module = user.get_active_hand() var/current_module = user.get_active_hand()
if(current_module == W) 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 return
else else
add_flashes(W,user) add_flashes(W,user)
else else
add_flashes(W,user) add_flashes(W,user)
else if(istype(W, /obj/item/weapon/stock_parts/manipulator)) 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)) new /mob/living/simple_animal/spiderbot(get_turf(loc))
user.drop_item() user.drop_item()
qdel(W) 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 /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) 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 return
else if(src.flash1) else if(src.flash1)
user.drop_item() user.drop_item()
W.loc = src W.loc = src
src.flash2 = W 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 else
user.drop_item() user.drop_item()
W.loc = src W.loc = src
src.flash1 = W 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) /obj/item/robot_parts/emag_act(var/remaining_charges, var/mob/user)
if(sabotaged) if(sabotaged)
user << "<span class='warning'>[src] is already sabotaged!</span>" to_chat(user, "<span class='warning'>[src] is already sabotaged!</span>")
else 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 sabotaged = 1
return 1 return 1

View File

@@ -210,6 +210,7 @@
R.add_language(LANGUAGE_TRADEBAND, 1) R.add_language(LANGUAGE_TRADEBAND, 1)
R.add_language(LANGUAGE_UNATHI, 1) R.add_language(LANGUAGE_UNATHI, 1)
R.add_language(LANGUAGE_SIIK, 1) R.add_language(LANGUAGE_SIIK, 1)
R.add_language(LANGUAGE_AKHANI, 1)
R.add_language(LANGUAGE_SKRELLIAN, 1) R.add_language(LANGUAGE_SKRELLIAN, 1)
R.add_language(LANGUAGE_SKRELLIANFAR, 0) R.add_language(LANGUAGE_SKRELLIANFAR, 0)
R.add_language(LANGUAGE_GUTTER, 1) R.add_language(LANGUAGE_GUTTER, 1)

View File

@@ -89,6 +89,7 @@ CIGARETTE PACKETS ARE IN FANCY.DM
var/weldermes = "USER lights NAME with FLAME" var/weldermes = "USER lights NAME with FLAME"
var/ignitermes = "USER lights NAME with FLAME" var/ignitermes = "USER lights NAME with FLAME"
var/brand var/brand
blood_sprite_state = null //Can't bloody these
/obj/item/clothing/mask/smokable/New() /obj/item/clothing/mask/smokable/New()
..() ..()

View File

@@ -18,7 +18,13 @@
var/cuff_sound = 'sound/weapons/handcuffs.ogg' var/cuff_sound = 'sound/weapons/handcuffs.ogg'
var/cuff_type = "handcuffs" var/cuff_type = "handcuffs"
var/use_time = 30 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) /obj/item/weapon/handcuffs/attack(var/mob/living/carbon/C, var/mob/living/user)
@@ -95,6 +101,13 @@
target.update_inv_handcuffed() target.update_inv_handcuffed()
return 1 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 var/last_chew = 0
/mob/living/carbon/human/RestrainedClickOn(var/atom/A) /mob/living/carbon/human/RestrainedClickOn(var/atom/A)
if (A != src) return ..() if (A != src) return ..()
@@ -111,7 +124,7 @@ var/last_chew = 0
if (!O) return if (!O) return
var/datum/gender/T = gender_datums[H.get_visible_gender()] var/datum/gender/T = gender_datums[H.get_visible_gender()]
var/s = "<span class='warning'>[H.name] chews on [T.his] [O.name]!</span>" 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>") H.visible_message(s, "<span class='warning'>You chew on your [O.name]!</span>")
add_attack_logs(H,H,"chewed own [O.name]") add_attack_logs(H,H,"chewed own [O.name]")
@@ -207,6 +220,12 @@ var/last_chew = 0
breakouttime = 30 breakouttime = 30
cuff_sound = 'sound/weapons/towelwipe.ogg' //Is there anything this sound can't do? 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) /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. if(user) //A ranged legcuff, until proper implementation as items it remains a projectile-only thing.
return 1 return 1
@@ -298,3 +317,11 @@ var/last_chew = 0
target.legcuffed = lcuffs target.legcuffed = lcuffs
target.update_inv_legcuffed() target.update_inv_legcuffed()
return 1 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"

View File

@@ -5,7 +5,7 @@
item_state = "card-id" item_state = "card-id"
sprite_sheets = list( sprite_sheets = list(
"Teshari" = 'icons/mob/species/seromi/id.dmi' SPECIES_TESHARI = 'icons/mob/species/seromi/id.dmi'
) )
var/access = list() var/access = list()
@@ -113,6 +113,12 @@
usr << "The fingerprint hash on the card is [fingerprint_hash]." usr << "The fingerprint hash on the card is [fingerprint_hash]."
return 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() /obj/item/weapon/card/id/initialize()
. = ..() . = ..()
var/datum/job/J = job_master.GetJob(rank) var/datum/job/J = job_master.GetJob(rank)

View File

@@ -100,7 +100,7 @@
user.put_in_hands(S) user.put_in_hands(S)
else else
visible_message("[user] starts compacting the snowball.", "You start compacting the snowball.") 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) var/atom/S = new /obj/item/weapon/material/snow/snowball/reinforced(user.loc)
del(src) del(src)
user.put_in_hands(S) user.put_in_hands(S)
@@ -108,6 +108,6 @@
/obj/item/weapon/material/snow/snowball/reinforced /obj/item/weapon/material/snow/snowball/reinforced
name = "snowball" name = "snowball"
desc = "A well-formed and fun snowball. It looks kind of dangerous." desc = "A well-formed and fun snowball. It looks kind of dangerous."
icon_state = "snowball-reinf" //icon_state = "reinf-snowball"
force_divisor = 0.20 force_divisor = 0.20
thrown_force_divisor = 0.25 thrown_force_divisor = 0.25

View File

@@ -8,7 +8,7 @@
icon = 'icons/obj/clothing/backpack.dmi' icon = 'icons/obj/clothing/backpack.dmi'
icon_state = "backpack" icon_state = "backpack"
sprite_sheets = list( sprite_sheets = list(
"Teshari" = 'icons/mob/species/seromi/back.dmi' SPECIES_TESHARI = 'icons/mob/species/seromi/back.dmi'
) )
w_class = ITEMSIZE_LARGE w_class = ITEMSIZE_LARGE
slot_flags = SLOT_BACK slot_flags = SLOT_BACK

View File

@@ -8,7 +8,7 @@
max_w_class = ITEMSIZE_NORMAL max_w_class = ITEMSIZE_NORMAL
slot_flags = SLOT_BELT slot_flags = SLOT_BELT
attack_verb = list("whipped", "lashed", "disciplined") 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 var/show_above_suit = 0
@@ -22,6 +22,16 @@
show_above_suit = !show_above_suit show_above_suit = !show_above_suit
update_icon() 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() /obj/item/weapon/storage/update_icon()
if (ismob(src.loc)) if (ismob(src.loc))
var/mob/M = src.loc var/mob/M = src.loc

View File

@@ -23,7 +23,7 @@
name = "box" name = "box"
desc = "It's just an ordinary box." desc = "It's just an ordinary box."
icon_state = "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 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_w_class = ITEMSIZE_SMALL
max_storage_space = INVENTORY_BOX_SPACE max_storage_space = INVENTORY_BOX_SPACE

View File

@@ -354,12 +354,10 @@
//such as when picking up all the items on a tile with one click. //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) /obj/item/weapon/storage/proc/handle_item_insertion(obj/item/W as obj, prevent_warning = 0)
if(!istype(W)) return 0 if(!istype(W)) return 0
if(usr) if(usr)
usr.remove_from_mob(W) usr.remove_from_mob(W,target = src) //If given a target, handles forceMove()
usr.update_icons() //update our overlays W.on_enter_storage(src)
W.forceMove(src)
W.on_enter_storage(src)
if(usr)
if (usr.client && usr.s_active != src) if (usr.client && usr.s_active != src)
usr.client.screen -= W usr.client.screen -= W
W.dropped(usr) W.dropped(usr)
@@ -377,6 +375,10 @@
src.orient2hud(usr) src.orient2hud(usr)
if(usr.s_active) if(usr.s_active)
usr.s_active.show_to(usr) usr.s_active.show_to(usr)
else
W.forceMove(src)
W.on_enter_storage(src)
update_icon() update_icon()
return 1 return 1

View File

@@ -63,6 +63,12 @@
T.dismantle_wall(1) T.dismantle_wall(1)
qdel(src) 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*/ /*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.*/ /*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.*/

View File

@@ -8,7 +8,7 @@ var/list/global/tank_gauge_cache = list()
name = "tank" name = "tank"
icon = 'icons/obj/tank.dmi' icon = 'icons/obj/tank.dmi'
sprite_sheets = list( sprite_sheets = list(
"Teshari" = 'icons/mob/species/seromi/back.dmi' SPECIES_TESHARI = 'icons/mob/species/seromi/back.dmi'
) )
var/gauge_icon = "indicator_tank" var/gauge_icon = "indicator_tank"

View File

@@ -236,7 +236,7 @@
..() ..()
/obj/item/weapon/wirecutters/attack(mob/living/carbon/C as mob, mob/user as mob) /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]!",\ usr.visible_message("\The [usr] cuts \the [C]'s restraints with \the [src]!",\
"You cut \the [C]'s restraints with \the [src]!",\ "You cut \the [C]'s restraints with \the [src]!",\
"You hear cable being cut.") "You hear cable being cut.")

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

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)

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

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

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)

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)

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)

View File

@@ -123,10 +123,10 @@
/obj/structure/mirror/raider/attack_hand(var/mob/living/carbon/human/user) /obj/structure/mirror/raider/attack_hand(var/mob/living/carbon/human/user)
if(istype(get_area(src),/area/syndicate_mothership)) 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") 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") 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 vox.gender = user.gender
raiders.equip(vox) raiders.equip(vox)
if(user.mind) if(user.mind)

View File

@@ -24,7 +24,7 @@
var/place_dir = turn(direction, 180) var/place_dir = turn(direction, 180)
if(!mining_overlay_cache["rock_side_[place_dir]"]) 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) 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() /turf/simulated/wall/solidrock/initialize()
icon_state = base_state icon_state = base_state

View File

@@ -101,6 +101,12 @@ turf/attackby(obj/item/weapon/W as obj, mob/user as mob)
return return
if (do_after(user, 25 + (5 * user.weakened)) && !(user.stat)) if (do_after(user, 25 + (5 * user.weakened)) && !(user.stat))
step_towards(O, src) 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) /turf/Enter(atom/movable/mover as mob|obj, atom/forget as mob|obj|turf|area)
if(movement_disabled && usr.ckey != movement_disabled_exception) if(movement_disabled && usr.ckey != movement_disabled_exception)

View File

@@ -1001,11 +1001,6 @@
//strip their stuff and stick it in the crate //strip their stuff and stick it in the crate
for(var/obj/item/I in M) for(var/obj/item/I in M)
M.drop_from_inventory(I, locker) 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 //so they black out before warping
M.Paralyse(5) M.Paralyse(5)
@@ -1188,10 +1183,8 @@
usr << "This can only be used on instances of type /mob/living/carbon/human" usr << "This can only be used on instances of type /mob/living/carbon/human"
return return
var/block=text2num(href_list["block"]) var/block=text2num(href_list["block"])
//testing("togmutate([href_list["block"]] -> [block])")
usr.client.cmd_admin_toggle_block(H,block) usr.client.cmd_admin_toggle_block(H,block)
show_player_panel(H) show_player_panel(H)
//H.regenerate_icons()
else if(href_list["adminplayeropts"]) else if(href_list["adminplayeropts"])
var/mob/M = locate(href_list["adminplayeropts"]) var/mob/M = locate(href_list["adminplayeropts"])

View File

@@ -37,7 +37,6 @@
if(ishuman(usr)) if(ishuman(usr))
var/mob/living/carbon/human/H = usr var/mob/living/carbon/human/H = usr
H.name = H.get_visible_name() 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.loc = O.loc // Appear where the object you were controlling is -- TLE
usr.client.eye = usr usr.client.eye = usr

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/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/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/corpseidicon = null //For setting it to be a gold, silver, CentCom etc ID
var/species = "Human" var/species = SPECIES_HUMAN
delete_me = TRUE delete_me = TRUE
/obj/effect/landmark/corpse/initialize() /obj/effect/landmark/corpse/initialize()

View File

@@ -1,6 +1,6 @@
/obj/machinery/gateway /obj/machinery/gateway
name = "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 = 'icons/obj/machines/gateway.dmi'
icon_state = "off" icon_state = "off"
density = 1 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>" user << "<font color='black'>The gate is already calibrated, there is no work for you to do here.</font>"
return return
else else
// VOREStation Add
stationgate = locate(/obj/machinery/gateway/centerstation) stationgate = locate(/obj/machinery/gateway/centerstation)
if(!stationgate) if(!stationgate)
user << "<span class='notice'>Error: Recalibration failed. No destination found... That can't be good.</span>" user << "<span class='notice'>Error: Recalibration failed. No destination found... That can't be good.</span>"
return return
// VOREStation Add End
else 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>" 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 calibrated = 1

View File

@@ -104,8 +104,8 @@
// Note that the current station being used will be pruned from this list upon being instantiated // Note that the current station being used will be pruned from this list upon being instantiated
destination_names = list( destination_names = list(
"NSS Exodus in Nyx", "NSS Exodus in Nyx",
//"NCS Northern Star in Vir", "NCS Northern Star in Vir",
"NLS Southern Cross in Vir", //"NLS Southern Cross in Vir",
"NAS Vir Central Command", "NAS Vir Central Command",
"a dockyard orbiting Sif", "a dockyard orbiting Sif",
"an asteroid orbiting Kara", "an asteroid orbiting Kara",
@@ -235,6 +235,19 @@
motto = "" motto = ""
ship_prefixes = list("WTV" = "freight") ship_prefixes = list("WTV" = "freight")
ship_names = list(
"Comet",
"Aurora",
"Supernova",
"Nebula",
"Galaxy",
"Starburst",
"Constellation",
"Pulsar",
"Quark",
"Void",
"Asteroid"
)
destination_names = list() destination_names = list()
/datum/lore/organization/tsc/bishop /datum/lore/organization/tsc/bishop

View File

@@ -152,7 +152,7 @@ datum/preferences/proc/set_biological_gender(var/gender)
if(pref.species) if(pref.species)
S = all_species[pref.species] S = all_species[pref.species]
else else
S = all_species["Human"] S = all_species[SPECIES_HUMAN]
var/list/possible_genders = S.genders var/list/possible_genders = S.genders
if(!pref.organ_data || pref.organ_data[BP_TORSO] != "cyborg") if(!pref.organ_data || pref.organ_data[BP_TORSO] != "cyborg")
return possible_genders return possible_genders

View File

@@ -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) /datum/category_item/player_setup_item/general/body/sanitize_character(var/savefile/S)
if(!pref.species || !(pref.species in playable_species)) 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.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.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)) 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 pref.rlimb_data[second_limb] = null
if("Prosthesis") if("Prosthesis")
var/tmp_species = pref.species ? pref.species : "Human" var/tmp_species = pref.species ? pref.species : SPECIES_HUMAN
var/list/usable_manufacturers = list() var/list/usable_manufacturers = list()
for(var/company in chargen_robolimbs) for(var/company in chargen_robolimbs)
var/datum/robolimb/M = chargen_robolimbs[company] 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) /datum/category_item/player_setup_item/general/body/proc/SetSpecies(mob/user)
if(!pref.species_preview || !(pref.species_preview in all_species)) 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/datum/species/current_species = all_species[pref.species_preview]
var/dat = "<body>" var/dat = "<body>"
dat += "<center><h2>[current_species.name] \[<a href='?src=\ref[src];show_species=1'>change</a>\]</h2></center><hr/>" dat += "<center><h2>[current_species.name] \[<a href='?src=\ref[src];show_species=1'>change</a>\]</h2></center><hr/>"

View File

@@ -1,13 +1,13 @@
// Alien clothing. // Alien clothing.
/datum/gear/suit/zhan_furs /datum/gear/suit/zhan_furs
display_name = "Zhan-Khazan furs (Tajara)" display_name = "Zhan-Khazan furs (Tajaran)"
path = /obj/item/clothing/suit/tajaran/furs path = /obj/item/clothing/suit/tajaran/furs
sort_category = "Xenowear" sort_category = "Xenowear"
/datum/gear/head/zhan_scarf /datum/gear/head/zhan_scarf
display_name = "Zhan headscarf" display_name = "Zhan headscarf"
path = /obj/item/clothing/head/tajaran/scarf path = /obj/item/clothing/head/tajaran/scarf
whitelisted = "Tajara" whitelisted = SPECIES_TAJ
/datum/gear/suit/unathi_mantle /datum/gear/suit/unathi_mantle
display_name = "hide mantle (Unathi)" display_name = "hide mantle (Unathi)"
@@ -19,7 +19,7 @@
display_name = "headtail chain selection (Skrell)" display_name = "headtail chain selection (Skrell)"
path = /obj/item/clothing/ears/skrell/chain path = /obj/item/clothing/ears/skrell/chain
sort_category = "Xenowear" sort_category = "Xenowear"
whitelisted = "Skrell" whitelisted = SPECIES_SKRELL
/datum/gear/ears/skrell/chains/New() /datum/gear/ears/skrell/chains/New()
..() ..()
@@ -33,7 +33,7 @@
display_name = "headtail band selection (Skrell)" display_name = "headtail band selection (Skrell)"
path = /obj/item/clothing/ears/skrell/band path = /obj/item/clothing/ears/skrell/band
sort_category = "Xenowear" sort_category = "Xenowear"
whitelisted = "Skrell" whitelisted = SPECIES_SKRELL
/datum/gear/ears/skrell/bands/New() /datum/gear/ears/skrell/bands/New()
..() ..()
@@ -47,7 +47,7 @@
display_name = "short headtail cloth (Skrell)" display_name = "short headtail cloth (Skrell)"
path = /obj/item/clothing/ears/skrell/cloth_male/black path = /obj/item/clothing/ears/skrell/cloth_male/black
sort_category = "Xenowear" sort_category = "Xenowear"
whitelisted = "Skrell" whitelisted = SPECIES_SKRELL
/datum/gear/ears/skrell/cloth/short/New() /datum/gear/ears/skrell/cloth/short/New()
..() ..()
@@ -61,7 +61,7 @@
display_name = "long headtail cloth (Skrell)" display_name = "long headtail cloth (Skrell)"
path = /obj/item/clothing/ears/skrell/cloth_female/black path = /obj/item/clothing/ears/skrell/cloth_female/black
sort_category = "Xenowear" sort_category = "Xenowear"
whitelisted = "Skrell" whitelisted = SPECIES_SKRELL
/datum/gear/ears/skrell/cloth/long/New() /datum/gear/ears/skrell/cloth/long/New()
..() ..()
@@ -75,7 +75,7 @@
display_name = "Colored bands (Skrell)" display_name = "Colored bands (Skrell)"
path = /obj/item/clothing/ears/skrell/colored/band path = /obj/item/clothing/ears/skrell/colored/band
sort_category = "Xenowear" sort_category = "Xenowear"
whitelisted = "Skrell" whitelisted = SPECIES_SKRELL
/datum/gear/ears/skrell/colored/band/New() /datum/gear/ears/skrell/colored/band/New()
..() ..()
@@ -85,7 +85,7 @@
display_name = "Colored chain (Skrell)" display_name = "Colored chain (Skrell)"
path = /obj/item/clothing/ears/skrell/colored/chain path = /obj/item/clothing/ears/skrell/colored/chain
sort_category = "Xenowear" sort_category = "Xenowear"
whitelisted = "Skrell" whitelisted = SPECIES_SKRELL
/datum/gear/ears/skrell/colored/chain/New() /datum/gear/ears/skrell/colored/chain/New()
..() ..()
@@ -94,7 +94,7 @@
/datum/gear/uniform/smock /datum/gear/uniform/smock
display_name = "smock selection (Teshari)" display_name = "smock selection (Teshari)"
path = /obj/item/clothing/under/seromi/smock path = /obj/item/clothing/under/seromi/smock
whitelisted = "Teshari" whitelisted = SPECIES_TESHARI
sort_category = "Xenowear" sort_category = "Xenowear"
/datum/gear/uniform/smock/New() /datum/gear/uniform/smock/New()
@@ -108,7 +108,7 @@
/datum/gear/uniform/undercoat /datum/gear/uniform/undercoat
display_name = "undercoat selection (Teshari)" display_name = "undercoat selection (Teshari)"
path = /obj/item/clothing/under/seromi/undercoat path = /obj/item/clothing/under/seromi/undercoat
whitelisted = "Teshari" whitelisted = SPECIES_TESHARI
sort_category = "Xenowear" sort_category = "Xenowear"
/datum/gear/uniform/undercoat/New() /datum/gear/uniform/undercoat/New()
@@ -122,7 +122,7 @@
/datum/gear/suit/cloak /datum/gear/suit/cloak
display_name = "cloak selection (Teshari)" display_name = "cloak selection (Teshari)"
path = /obj/item/clothing/suit/storage/seromi/cloak path = /obj/item/clothing/suit/storage/seromi/cloak
whitelisted = "Teshari" whitelisted = SPECIES_TESHARI
sort_category = "Xenowear" sort_category = "Xenowear"
/datum/gear/suit/cloak/New() /datum/gear/suit/cloak/New()

View File

@@ -226,7 +226,7 @@
mutually_exclusive = list(/datum/trait/modifier/mental/xenophobe) mutually_exclusive = list(/datum/trait/modifier/mental/xenophobe)
/datum/trait/modifier/mental/tajaraphobe /datum/trait/modifier/mental/tajaraphobe
name = "Tajara-phobic" name = "Tajaran-phobic"
desc = "Boilerplate racism for cats goes here." desc = "Boilerplate racism for cats goes here."
mutually_exclusive = list(/datum/trait/modifier/mental/xenophobe) mutually_exclusive = list(/datum/trait/modifier/mental/xenophobe)

View File

@@ -47,7 +47,7 @@ datum/preferences
var/r_eyes = 0 //Eye color var/r_eyes = 0 //Eye color
var/g_eyes = 0 //Eye color var/g_eyes = 0 //Eye color
var/b_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/species_preview //Used for the species selection window.
var/list/alternate_languages = list() //Secondary language(s) var/list/alternate_languages = list() //Secondary language(s)
var/list/language_prefixes = list() //Kanguage prefix keys var/list/language_prefixes = list() //Kanguage prefix keys
@@ -293,11 +293,10 @@ datum/preferences
if(icon_updates) if(icon_updates)
character.force_update_limbs() character.force_update_limbs()
character.update_mutations(0) character.update_icons_body()
character.update_underwear(0) character.update_mutations()
character.update_hair(0) character.update_underwear()
character.update_eyes(0) character.update_hair()
character.update_icons_all()
/datum/preferences/proc/open_load_dialog(mob/user) /datum/preferences/proc/open_load_dialog(mob/user)
var/dat = "<body>" var/dat = "<body>"

View File

@@ -22,6 +22,7 @@
*/ */
var/list/sprite_sheets_refit = null var/list/sprite_sheets_refit = null
var/ear_protection = 0 var/ear_protection = 0
var/blood_sprite_state
//Updates the icons of the mob wearing the clothing item, if any. //Updates the icons of the mob wearing the clothing item, if any.
/obj/item/clothing/proc/update_clothing_icon() /obj/item/clothing/proc/update_clothing_icon()
@@ -83,16 +84,14 @@
//Set species_restricted list //Set species_restricted list
switch(target_species) switch(target_species)
if("Human", "Skrell") //humanoid bodytypes if(SPECIES_HUMAN, SPECIES_SKRELL) //humanoid bodytypes
species_restricted = list("Human", "Skrell", "Promethean") //skrell/humans can wear each other's suits species_restricted = list(SPECIES_HUMAN, SPECIES_SKRELL, SPECIES_PROMETHEAN) //skrell/humans can wear each other's suits
else else
species_restricted = list(target_species) species_restricted = list(target_species)
//Set icon //Set icon
if (sprite_sheets_refit && (target_species in sprite_sheets_refit)) if (sprite_sheets_refit && (target_species in sprite_sheets_refit))
icon_override = sprite_sheets_refit[target_species] sprite_sheets[target_species] = sprite_sheets_refit[target_species]
else
icon_override = initial(icon_override)
if (sprite_sheets_obj && (target_species in sprite_sheets_obj)) if (sprite_sheets_obj && (target_species in sprite_sheets_obj))
icon = sprite_sheets_obj[target_species] icon = sprite_sheets_obj[target_species]
@@ -105,17 +104,15 @@
//Set species_restricted list //Set species_restricted list
switch(target_species) switch(target_species)
if("Skrell") if(SPECIES_SKRELL)
species_restricted = list("Human", "Skrell", "Promethean") //skrell helmets fit humans too species_restricted = list(SPECIES_HUMAN, SPECIES_SKRELL, SPECIES_PROMETHEAN) //skrell helmets fit humans too
else else
species_restricted = list(target_species) species_restricted = list(target_species)
//Set icon //Set icon
if (sprite_sheets_refit && (target_species in sprite_sheets_refit)) if (sprite_sheets_refit && (target_species in sprite_sheets_refit))
icon_override = sprite_sheets_refit[target_species] sprite_sheets[target_species] = sprite_sheets_refit[target_species]
else
icon_override = initial(icon_override)
if (sprite_sheets_obj && (target_species in sprite_sheets_obj)) if (sprite_sheets_obj && (target_species in sprite_sheets_obj))
icon = sprite_sheets_obj[target_species] icon = sprite_sheets_obj[target_species]
@@ -130,7 +127,7 @@
throwforce = 2 throwforce = 2
slot_flags = SLOT_EARS slot_flags = SLOT_EARS
sprite_sheets = list( 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) /obj/item/clothing/ears/attack_hand(mob/user as mob)
if (!user) return if (!user) return
@@ -197,6 +194,7 @@
w_class = ITEMSIZE_SMALL w_class = ITEMSIZE_SMALL
icon = 'icons/obj/clothing/gloves.dmi' icon = 'icons/obj/clothing/gloves.dmi'
siemens_coefficient = 0.9 siemens_coefficient = 0.9
blood_sprite_state = "bloodyhands"
var/wired = 0 var/wired = 0
var/obj/item/weapon/cell/cell = 0 var/obj/item/weapon/cell/cell = 0
var/fingerprint_chance = 0 //How likely the glove is to let fingerprints through var/fingerprint_chance = 0 //How likely the glove is to let fingerprints through
@@ -210,8 +208,8 @@
slot_flags = SLOT_GLOVES slot_flags = SLOT_GLOVES
attack_verb = list("challenged") attack_verb = list("challenged")
sprite_sheets = list( sprite_sheets = list(
"Teshari" = 'icons/mob/species/seromi/gloves.dmi', SPECIES_TESHARI = 'icons/mob/species/seromi/gloves.dmi',
"Vox" = 'icons/mob/species/vox/gloves.dmi' SPECIES_VOX = 'icons/mob/species/vox/gloves.dmi'
) )
/obj/item/clothing/gloves/update_clothing_icon() /obj/item/clothing/gloves/update_clothing_icon()
@@ -244,8 +242,8 @@
name = "modified [name]" name = "modified [name]"
desc = "[desc]<br>They have had the fingertips cut off of them." desc = "[desc]<br>They have had the fingertips cut off of them."
if("exclude" in species_restricted) if("exclude" in species_restricted)
species_restricted -= "Unathi" species_restricted -= SPECIES_UNATHI
species_restricted -= "Tajara" species_restricted -= SPECIES_TAJ
return return
*/ */
@@ -300,7 +298,7 @@
w_class = ITEMSIZE_TINY w_class = ITEMSIZE_TINY
icon = 'icons/obj/clothing/rings.dmi' icon = 'icons/obj/clothing/rings.dmi'
gender = NEUTER gender = NEUTER
species_restricted = list("exclude", "Diona") species_restricted = list("exclude", SPECIES_DIONA)
siemens_coefficient = 1 siemens_coefficient = 1
glove_level = 1 glove_level = 1
fingerprint_chance = 100 fingerprint_chance = 100
@@ -318,15 +316,17 @@
body_parts_covered = HEAD body_parts_covered = HEAD
slot_flags = SLOT_HEAD slot_flags = SLOT_HEAD
w_class = ITEMSIZE_SMALL w_class = ITEMSIZE_SMALL
blood_sprite_state = "helmetblood"
var/light_overlay = "helmet_light" var/light_overlay = "helmet_light"
var/light_applied var/light_applied
var/brightness_on var/brightness_on
var/on = 0 var/on = 0
var/image/helmet_light
sprite_sheets = list( sprite_sheets = list(
"Teshari" = 'icons/mob/species/seromi/head.dmi', SPECIES_TESHARI = 'icons/mob/species/seromi/head.dmi',
"Vox" = 'icons/mob/species/vox/head.dmi' SPECIES_VOX = 'icons/mob/species/vox/head.dmi'
) )
/obj/item/clothing/head/attack_self(mob/user) /obj/item/clothing/head/attack_self(mob/user)
@@ -386,29 +386,29 @@
return 1 return 1
/obj/item/clothing/head/update_icon(var/mob/user) /obj/item/clothing/head/update_icon(var/mob/user)
overlays.Cut()
var/mob/living/carbon/human/H var/mob/living/carbon/human/H
if(istype(user,/mob/living/carbon/human)) if(ishuman(user))
H = user H = user
if(on) if(on)
// Generate object icon. // Generate object icon.
if(!light_overlay_cache["[light_overlay]_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]") light_overlay_cache["[light_overlay]_icon"] = image(icon = 'icons/obj/light_overlays.dmi', icon_state = "[light_overlay]")
overlays |= light_overlay_cache["[light_overlay]_icon"] 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(). // 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]) if(!light_overlay_cache[cache_key])
var/use_icon = 'icons/mob/light_overlays.dmi' var/use_icon = LAZYACCESS(sprite_sheets,body_type) || 'icons/mob/light_overlays.dmi'
if(H && sprite_sheets[H.species.get_bodytype(H)]) light_overlay_cache[cache_key] = image(icon = use_icon, icon_state = "[light_overlay]")
use_icon = sprite_sheets[H.species.get_bodytype(H)]
light_overlay_cache[cache_key] = image("icon" = use_icon, "icon_state" = "[light_overlay]")
if(H) else if(helmet_light)
H.update_inv_head() 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() /obj/item/clothing/head/update_clothing_icon()
if (ismob(src.loc)) if (ismob(src.loc))
@@ -427,11 +427,12 @@
body_parts_covered = HEAD body_parts_covered = HEAD
slot_flags = SLOT_MASK slot_flags = SLOT_MASK
body_parts_covered = FACE|EYES body_parts_covered = FACE|EYES
blood_sprite_state = "maskblood"
sprite_sheets = list( sprite_sheets = list(
"Teshari" = 'icons/mob/species/seromi/masks.dmi', SPECIES_TESHARI = 'icons/mob/species/seromi/masks.dmi',
"Vox" = 'icons/mob/species/vox/masks.dmi', SPECIES_VOX = 'icons/mob/species/vox/masks.dmi',
"Tajara" = 'icons/mob/species/tajaran/mask.dmi', SPECIES_TAJ = 'icons/mob/species/tajaran/mask.dmi',
"Unathi" = 'icons/mob/species/unathi/mask.dmi' SPECIES_UNATHI = 'icons/mob/species/unathi/mask.dmi'
) )
var/voicechange = 0 var/voicechange = 0
@@ -460,6 +461,7 @@
siemens_coefficient = 0.9 siemens_coefficient = 0.9
body_parts_covered = FEET body_parts_covered = FEET
slot_flags = SLOT_FEET slot_flags = SLOT_FEET
blood_sprite_state = "shoeblood"
var/can_hold_knife = 0 var/can_hold_knife = 0
var/obj/item/holding var/obj/item/holding
@@ -475,10 +477,10 @@
slowdown = SHOES_SLOWDOWN slowdown = SHOES_SLOWDOWN
force = 2 force = 2
var/overshoes = 0 var/overshoes = 0
species_restricted = list("exclude","Teshari", "Vox") species_restricted = list("exclude",SPECIES_TESHARI, SPECIES_VOX)
sprite_sheets = list( sprite_sheets = list(
"Teshari" = 'icons/mob/species/seromi/shoes.dmi', SPECIES_TESHARI = 'icons/mob/species/seromi/shoes.dmi',
"Vox" = 'icons/mob/species/vox/shoes.dmi' SPECIES_VOX = 'icons/mob/species/vox/shoes.dmi'
) )
/obj/item/clothing/shoes/proc/draw_knife() /obj/item/clothing/shoes/proc/draw_knife()
@@ -581,9 +583,10 @@
w_class = ITEMSIZE_NORMAL w_class = ITEMSIZE_NORMAL
preserve_item = 1 preserve_item = 1
sprite_sheets = list( sprite_sheets = list(
"Teshari" = 'icons/mob/species/seromi/suit.dmi', SPECIES_TESHARI = 'icons/mob/species/seromi/suit.dmi',
"Vox" = 'icons/mob/species/vox/suit.dmi' SPECIES_VOX = 'icons/mob/species/vox/suit.dmi'
) )
valid_accessory_slots = list("over", "armband") 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) armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 0)
w_class = ITEMSIZE_NORMAL w_class = ITEMSIZE_NORMAL
show_messages = 1 show_messages = 1
blood_sprite_state = "uniformblood"
var/has_sensor = 1 //For the crew computer 2 = unable to change mode var/has_sensor = 1 //For the crew computer 2 = unable to change mode
var/sensor_mode = 0 var/sensor_mode = 0
@@ -621,8 +625,8 @@
var/rolled_down = -1 //0 = unrolled, 1 = rolled, -1 = cannot be toggled var/rolled_down = -1 //0 = unrolled, 1 = rolled, -1 = cannot be toggled
var/rolled_sleeves = -1 //0 = unrolled, 1 = rolled, -1 = cannot be toggled var/rolled_sleeves = -1 //0 = unrolled, 1 = rolled, -1 = cannot be toggled
sprite_sheets = list( sprite_sheets = list(
"Teshari" = 'icons/mob/species/seromi/uniform.dmi', SPECIES_TESHARI = 'icons/mob/species/seromi/uniform.dmi',
"Vox" = 'icons/mob/species/vox/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. //convenience var for defining the icon state for the overlay used when the clothing is worn.

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)

View File

@@ -46,7 +46,7 @@
icon = 'icons/obj/clothing/ears.dmi' icon = 'icons/obj/clothing/ears.dmi'
w_class = ITEMSIZE_TINY w_class = ITEMSIZE_TINY
slot_flags = SLOT_EARS slot_flags = SLOT_EARS
species_restricted = list("Skrell") species_restricted = list(SPECIES_SKRELL)
/obj/item/clothing/ears/skrell/chain /obj/item/clothing/ears/skrell/chain
name = "Gold headtail chains" name = "Gold headtail chains"

View File

@@ -10,8 +10,8 @@
desc = "an ultra rare hat. It commands a certain respect." desc = "an ultra rare hat. It commands a certain respect."
icon_state = "petehat" icon_state = "petehat"
sprite_sheets = list( sprite_sheets = list(
"Teshari" = 'icons/mob/species/seromi/head.dmi', SPECIES_TESHARI = 'icons/mob/species/seromi/head.dmi',
"Vox" = 'icons/mob/species/vox/head.dmi' SPECIES_VOX = 'icons/mob/species/vox/head.dmi'
) )
/obj/item/clothing/head/collectable/slime /obj/item/clothing/head/collectable/slime

View File

@@ -153,8 +153,8 @@
icon_state = "swathelm" icon_state = "swathelm"
item_state_slots = list(slot_r_hand_str = "swat", slot_l_hand_str = "swat") item_state_slots = list(slot_r_hand_str = "swat", slot_l_hand_str = "swat")
sprite_sheets = list( sprite_sheets = list(
"Tajara" = 'icons/mob/species/tajaran/helmet.dmi', SPECIES_TAJ = 'icons/mob/species/tajaran/helmet.dmi',
"Unathi" = 'icons/mob/species/unathi/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) armor = list(melee = 60, bullet = 60, laser = 60, energy = 40, bomb = 40, bio = 0, rad = 0)

View File

@@ -59,7 +59,7 @@
body_parts_covered = 0 //Hack to allow vox to eat while wearing this mask. body_parts_covered = 0 //Hack to allow vox to eat while wearing this mask.
item_flags = BLOCK_GAS_SMOKE_EFFECT | AIRTIGHT | PHORONGUARD item_flags = BLOCK_GAS_SMOKE_EFFECT | AIRTIGHT | PHORONGUARD
phoronproof = 1 phoronproof = 1
species_restricted = list("Vox") species_restricted = list(SPECIES_VOX)
filtered_gases = list("oxygen", "sleeping_agent") filtered_gases = list("oxygen", "sleeping_agent")
/obj/item/clothing/mask/gas/syndicate /obj/item/clothing/mask/gas/syndicate

View File

@@ -88,7 +88,7 @@
icon_state = "boots-vox" icon_state = "boots-vox"
item_flags = PHORONGUARD item_flags = PHORONGUARD
phoronproof = 1 phoronproof = 1
species_restricted = list("Vox") species_restricted = list(SPECIES_VOX)
action_button_name = "Toggle the magclaws" action_button_name = "Toggle the magclaws"

View File

@@ -4,7 +4,7 @@
desc = "Smoothly contoured and polished to a shine. Still looks like a fishbowl." 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) 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 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 /obj/item/clothing/head/helmet/space/skrell/white
icon_state = "skrell_helmet_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) 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 heat_protection = UPPER_TORSO|LOWER_TORSO|LEGS|FEET|ARMS|HANDS
max_heat_protection_temperature = SPACE_SUIT_MAX_HEAT_PROTECTION_TEMPERATURE 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 /obj/item/clothing/suit/space/skrell/white
icon_state = "skrell_suit_white" icon_state = "skrell_suit_white"
@@ -39,7 +39,7 @@
siemens_coefficient = 0.2 siemens_coefficient = 0.2
heat_protection = UPPER_TORSO|LOWER_TORSO|LEGS|FEET|ARMS|HANDS heat_protection = UPPER_TORSO|LOWER_TORSO|LEGS|FEET|ARMS|HANDS
max_heat_protection_temperature = SPACE_SUIT_MAX_HEAT_PROTECTION_TEMPERATURE 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 /obj/item/clothing/head/helmet/space/vox
armor = list(melee = 60, bullet = 50, laser = 40, energy = 15, bomb = 30, bio = 100, rad = 50) 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 item_flags = STOPPRESSUREDAMAGE | THICKMATERIAL | AIRTIGHT | PHORONGUARD
flags_inv = 0 flags_inv = 0
phoronproof = 1 phoronproof = 1
species_restricted = list("Vox") species_restricted = list(SPECIES_VOX)
/obj/item/clothing/head/helmet/space/vox/pressure /obj/item/clothing/head/helmet/space/vox/pressure
name = "alien helmet" name = "alien helmet"

View File

@@ -180,6 +180,15 @@
spark_system = null spark_system = null
return ..() 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() /obj/item/weapon/rig/proc/suit_is_deployed()
if(!istype(wearer) || src.loc != wearer || wearer.back != src) if(!istype(wearer) || src.loc != wearer || wearer.back != src)
return 0 return 0
@@ -331,7 +340,6 @@
piece.item_flags &= ~(STOPPRESSUREDAMAGE|AIRTIGHT) piece.item_flags &= ~(STOPPRESSUREDAMAGE|AIRTIGHT)
else else
piece.item_flags |= (STOPPRESSUREDAMAGE|AIRTIGHT) piece.item_flags |= (STOPPRESSUREDAMAGE|AIRTIGHT)
update_icon(1)
/obj/item/weapon/rig/ui_action_click() /obj/item/weapon/rig/ui_action_click()
toggle_cooling(usr) toggle_cooling(usr)
@@ -599,7 +607,7 @@
// update_inv_wear_suit(), handle species checks here. // update_inv_wear_suit(), handle species checks here.
if(wearer && sprite_sheets && sprite_sheets[wearer.species.get_bodytype(wearer)]) if(wearer && sprite_sheets && sprite_sheets[wearer.species.get_bodytype(wearer)])
species_icon = 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) if(installed_modules.len)
for(var/obj/item/rig_module/module in installed_modules) for(var/obj/item/rig_module/module in installed_modules)

View File

@@ -11,10 +11,10 @@
cold_protection = HEAD|FACE|EYES cold_protection = HEAD|FACE|EYES
brightness_on = 4 brightness_on = 4
sprite_sheets = list( sprite_sheets = list(
"Tajara" = 'icons/mob/species/tajaran/helmet.dmi', SPECIES_TAJ = 'icons/mob/species/tajaran/helmet.dmi',
"Skrell" = 'icons/mob/species/skrell/helmet.dmi', SPECIES_SKRELL = 'icons/mob/species/skrell/helmet.dmi',
"Unathi" = 'icons/mob/species/unathi/helmet.dmi', SPECIES_UNATHI = 'icons/mob/species/unathi/helmet.dmi',
"Vox" = 'icons/mob/species/vox/head.dmi' SPECIES_VOX = 'icons/mob/species/vox/head.dmi'
) )
species_restricted = null species_restricted = null
@@ -50,9 +50,9 @@
resilience = 0.2 resilience = 0.2
can_breach = 1 can_breach = 1
sprite_sheets = list( sprite_sheets = list(
"Tajara" = 'icons/mob/species/tajaran/suit.dmi', SPECIES_TAJ = 'icons/mob/species/tajaran/suit.dmi',
"Unathi" = 'icons/mob/species/unathi/suit.dmi', SPECIES_UNATHI = 'icons/mob/species/unathi/suit.dmi',
"Vox" = 'icons/mob/species/vox/suit.dmi' SPECIES_VOX = 'icons/mob/species/vox/suit.dmi'
) )
supporting_limbs = list() supporting_limbs = list()
var/obj/item/weapon/material/knife/tacknife var/obj/item/weapon/material/knife/tacknife

View File

@@ -28,14 +28,14 @@
siemens_coefficient = 0.2 siemens_coefficient = 0.2
/obj/item/clothing/head/helmet/space/rig/breacher /obj/item/clothing/head/helmet/space/rig/breacher
species_restricted = list("Unathi") species_restricted = list(SPECIES_UNATHI)
force = 5 force = 5
/obj/item/clothing/suit/space/rig/breacher /obj/item/clothing/suit/space/rig/breacher
species_restricted = list("Unathi") species_restricted = list(SPECIES_UNATHI)
/obj/item/clothing/shoes/magboots/rig/breacher /obj/item/clothing/shoes/magboots/rig/breacher
species_restricted = list("Unathi") species_restricted = list(SPECIES_UNATHI)
/* /*
* VOX * VOX
@@ -62,27 +62,27 @@
glove_type = /obj/item/clothing/gloves/gauntlets/rig/vox glove_type = /obj/item/clothing/gloves/gauntlets/rig/vox
/obj/item/clothing/head/helmet/space/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 flags_inv = HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE
phoronproof = 1 phoronproof = 1
/obj/item/clothing/shoes/magboots/rig/vox /obj/item/clothing/shoes/magboots/rig/vox
name = "talons" name = "talons"
species_restricted = list("Vox") species_restricted = list(SPECIES_VOX)
sprite_sheets = list( sprite_sheets = list(
"Vox" = 'icons/mob/species/vox/shoes.dmi' SPECIES_VOX = 'icons/mob/species/vox/shoes.dmi'
) )
phoronproof = 1 phoronproof = 1
/obj/item/clothing/suit/space/rig/vox /obj/item/clothing/suit/space/rig/vox
species_restricted = list("Vox") species_restricted = list(SPECIES_VOX)
phoronproof = 1 phoronproof = 1
/obj/item/clothing/gloves/gauntlets/rig/vox /obj/item/clothing/gloves/gauntlets/rig/vox
siemens_coefficient = 0 siemens_coefficient = 0
species_restricted = list("Vox") species_restricted = list(SPECIES_VOX)
sprite_sheets = list( sprite_sheets = list(
"Vox" = 'icons/mob/species/vox/gloves.dmi' SPECIES_VOX = 'icons/mob/species/vox/gloves.dmi'
) )
phoronproof = 1 phoronproof = 1

View File

@@ -19,10 +19,11 @@
light_overlay = "helmet_light_dual" light_overlay = "helmet_light_dual"
camera_networks = list(NETWORK_SECURITY) camera_networks = list(NETWORK_SECURITY)
//Internal Affairs suit
/obj/item/weapon/rig/internalaffairs /obj/item/weapon/rig/internalaffairs
name = "augmented tie" name = "augmented tie"
suit_type = "augmented suit" suit_type = "augmented suit"
desc = "Prepare for paperwork." desc = "The last suit you'll ever wear."
icon_state = "internalaffairs_rig" icon_state = "internalaffairs_rig"
armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 0) armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 0)
siemens_coefficient = 0.9 siemens_coefficient = 0.9
@@ -30,7 +31,13 @@
offline_slowdown = 0 offline_slowdown = 0
offline_vision_restriction = 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_access = list()
req_one_access = list() req_one_access = list()
@@ -55,10 +62,11 @@
helm_type = null helm_type = null
boot_type = null boot_type = null
//Mining suit
/obj/item/weapon/rig/industrial /obj/item/weapon/rig/industrial
name = "industrial suit control module" name = "industrial suit control module"
suit_type = "industrial hardsuit" 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" icon_state = "engineering_rig"
armor = list(melee = 60, bullet = 50, laser = 30,energy = 15, bomb = 30, bio = 100, rad = 50) armor = list(melee = 60, bullet = 50, laser = 30,energy = 15, bomb = 30, bio = 100, rad = 50)
slowdown = 1 slowdown = 1
@@ -69,7 +77,15 @@
helm_type = /obj/item/clothing/head/helmet/space/rig/industrial 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_access = list()
req_one_access = list() req_one_access = list()
@@ -84,10 +100,11 @@
/obj/item/rig_module/vision/material, /obj/item/rig_module/vision/material,
/obj/item/rig_module/maneuvering_jets) //VOREStation Edit - Added maneuvering jets /obj/item/rig_module/maneuvering_jets) //VOREStation Edit - Added maneuvering jets
//Engineering suit
/obj/item/weapon/rig/eva /obj/item/weapon/rig/eva
name = "EVA suit control module" name = "EVA suit control module"
suit_type = "EVA hardsuit" 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" icon_state = "eva_rig"
armor = list(melee = 30, bullet = 10, laser = 20,energy = 25, bomb = 20, bio = 100, rad = 100) armor = list(melee = 30, bullet = 10, laser = 20,energy = 25, bomb = 20, bio = 100, rad = 100)
slowdown = 0 slowdown = 0
@@ -98,7 +115,14 @@
helm_type = /obj/item/clothing/head/helmet/space/rig/eva helm_type = /obj/item/clothing/head/helmet/space/rig/eva
glove_type = /obj/item/clothing/gloves/gauntlets/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_access = list()
req_one_access = list() req_one_access = list()
@@ -135,7 +159,14 @@
helm_type = /obj/item/clothing/head/helmet/space/rig/ce helm_type = /obj/item/clothing/head/helmet/space/rig/ce
glove_type = /obj/item/clothing/gloves/gauntlets/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_access = list()
req_one_access = list() req_one_access = list()
@@ -157,6 +188,7 @@
/obj/item/rig_module/vision/meson /obj/item/rig_module/vision/meson
) )
//Research Director's suit. Just add red crowbar.
/obj/item/weapon/rig/hazmat /obj/item/weapon/rig/hazmat
name = "AMI control module" name = "AMI control module"
@@ -170,7 +202,23 @@
helm_type = /obj/item/clothing/head/helmet/space/rig/hazmat 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_access = list()
req_one_access = list() req_one_access = list()
@@ -185,6 +233,7 @@
/obj/item/rig_module/device/anomaly_scanner /obj/item/rig_module/device/anomaly_scanner
) )
//Paramedic suit
/obj/item/weapon/rig/medical /obj/item/weapon/rig/medical
name = "rescue suit control module" name = "rescue suit control module"
@@ -198,7 +247,15 @@
helm_type = /obj/item/clothing/head/helmet/space/rig/medical 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_access = list()
req_one_access = list() req_one_access = list()
@@ -215,6 +272,7 @@
/obj/item/rig_module/vision/medhud /obj/item/rig_module/vision/medhud
) )
//Security suit
/obj/item/weapon/rig/hazard /obj/item/weapon/rig/hazard
name = "hazard hardsuit control module" name = "hazard hardsuit control module"
suit_type = "hazard hardsuit" suit_type = "hazard hardsuit"
@@ -228,7 +286,13 @@
helm_type = /obj/item/clothing/head/helmet/space/rig/hazard 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_access = list()
req_one_access = list() req_one_access = list()

View File

@@ -14,7 +14,7 @@
cold_protection = HEAD cold_protection = HEAD
min_cold_protection_temperature = SPACE_HELMET_MIN_COLD_PROTECTION_TEMPERATURE min_cold_protection_temperature = SPACE_HELMET_MIN_COLD_PROTECTION_TEMPERATURE
siemens_coefficient = 0.9 siemens_coefficient = 0.9
species_restricted = list("exclude","Diona") species_restricted = list("exclude",SPECIES_DIONA)
preserve_item = 1 preserve_item = 1
phoronproof = 1 phoronproof = 1
flash_protection = FLASH_PROTECTION_MAJOR flash_protection = FLASH_PROTECTION_MAJOR
@@ -62,7 +62,7 @@
cold_protection = UPPER_TORSO | LOWER_TORSO | LEGS | FEET | ARMS | HANDS cold_protection = UPPER_TORSO | LOWER_TORSO | LEGS | FEET | ARMS | HANDS
min_cold_protection_temperature = SPACE_SUIT_MIN_COLD_PROTECTION_TEMPERATURE min_cold_protection_temperature = SPACE_SUIT_MIN_COLD_PROTECTION_TEMPERATURE
siemens_coefficient = 0.9 siemens_coefficient = 0.9
species_restricted = list("exclude","Diona") species_restricted = list("exclude",SPECIES_DIONA)
preserve_item = 1 preserve_item = 1
phoronproof = 1 phoronproof = 1

View File

@@ -13,16 +13,16 @@
//Species-specific stuff. //Species-specific stuff.
species_restricted = list("Human", "Promethean") species_restricted = list("Human", "Promethean")
sprite_sheets_refit = list( sprite_sheets_refit = list(
"Unathi" = 'icons/mob/species/unathi/helmet.dmi', SPECIES_UNATHI = 'icons/mob/species/unathi/helmet.dmi',
"Tajara" = 'icons/mob/species/tajaran/helmet.dmi', SPECIES_TAJ = 'icons/mob/species/tajaran/helmet.dmi',
"Skrell" = 'icons/mob/species/skrell/helmet.dmi' SPECIES_SKRELL = 'icons/mob/species/skrell/helmet.dmi'
//Teshari have a general sprite sheet defined in modules/clothing/clothing.dm //Teshari have a general sprite sheet defined in modules/clothing/clothing.dm
) )
sprite_sheets_obj = list( sprite_sheets_obj = list(
"Unathi" = 'icons/obj/clothing/species/unathi/hats.dmi', SPECIES_UNATHI = 'icons/obj/clothing/species/unathi/hats.dmi',
"Tajara" = 'icons/obj/clothing/species/tajaran/hats.dmi', SPECIES_TAJ = 'icons/obj/clothing/species/tajaran/hats.dmi',
"Skrell" = 'icons/obj/clothing/species/skrell/hats.dmi', SPECIES_SKRELL = 'icons/obj/clothing/species/skrell/hats.dmi',
"Teshari" = 'icons/obj/clothing/species/seromi/hats.dmi' SPECIES_TESHARI = 'icons/obj/clothing/species/seromi/hats.dmi'
) )
light_overlay = "helmet_light" light_overlay = "helmet_light"
@@ -38,18 +38,18 @@
heat_protection = UPPER_TORSO|LOWER_TORSO|LEGS|FEET|ARMS|HANDS heat_protection = UPPER_TORSO|LOWER_TORSO|LEGS|FEET|ARMS|HANDS
max_heat_protection_temperature = SPACE_SUIT_MAX_HEAT_PROTECTION_TEMPERATURE 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( sprite_sheets_refit = list(
"Unathi" = 'icons/mob/species/unathi/suit.dmi', SPECIES_UNATHI = 'icons/mob/species/unathi/suit.dmi',
"Tajara" = 'icons/mob/species/tajaran/suit.dmi', SPECIES_TAJ = 'icons/mob/species/tajaran/suit.dmi',
"Skrell" = 'icons/mob/species/skrell/suit.dmi' SPECIES_SKRELL = 'icons/mob/species/skrell/suit.dmi'
//Teshari have a general sprite sheet defined in modules/clothing/clothing.dm //Teshari have a general sprite sheet defined in modules/clothing/clothing.dm
) )
sprite_sheets_obj = list( sprite_sheets_obj = list(
"Unathi" = 'icons/obj/clothing/species/unathi/suits.dmi', SPECIES_UNATHI = 'icons/obj/clothing/species/unathi/suits.dmi',
"Tajara" = 'icons/obj/clothing/species/tajaran/suits.dmi', SPECIES_TAJ = 'icons/obj/clothing/species/tajaran/suits.dmi',
"Skrell" = 'icons/obj/clothing/species/skrell/suits.dmi', SPECIES_SKRELL = 'icons/obj/clothing/species/skrell/suits.dmi',
"Teshari" = 'icons/obj/clothing/species/seromi/suits.dmi' SPECIES_TESHARI = 'icons/obj/clothing/species/seromi/suits.dmi'
) )
//Breach thresholds, should ideally be inherited by most (if not all) voidsuits. //Breach thresholds, should ideally be inherited by most (if not all) voidsuits.

View File

@@ -5,7 +5,7 @@
icon_override = 'icons/mob/species/seromi/teshari_cloak.dmi' icon_override = 'icons/mob/species/seromi/teshari_cloak.dmi'
icon_state = "tesh_cloak_bo" icon_state = "tesh_cloak_bo"
item_state = "tesh_cloak_bo" item_state = "tesh_cloak_bo"
species_restricted = list("Teshari") species_restricted = list(SPECIES_TESHARI)
body_parts_covered = UPPER_TORSO|ARMS body_parts_covered = UPPER_TORSO|ARMS
/obj/item/clothing/suit/storage/seromi/cloak/black_orange /obj/item/clothing/suit/storage/seromi/cloak/black_orange

View File

@@ -6,5 +6,5 @@
icon_state = "vox-scrap" icon_state = "vox-scrap"
icon_state = "vox-scrap" icon_state = "vox-scrap"
body_parts_covered = UPPER_TORSO|ARMS|LOWER_TORSO|LEGS body_parts_covered = UPPER_TORSO|ARMS|LOWER_TORSO|LEGS
species_restricted = list("Vox") species_restricted = list(SPECIES_VOX)
siemens_coefficient = 1 //Its literally metal siemens_coefficient = 1 //Its literally metal

View File

@@ -265,6 +265,15 @@
return 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 /obj/item/clothing/suit/ianshirt
name = "worn shirt" 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." 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."

View File

@@ -14,7 +14,7 @@
var/concealed_holster = 0 var/concealed_holster = 0
var/mob/living/carbon/human/wearer = null //To check if the wearer changes, so species spritesheets change properly. 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() /obj/item/clothing/accessory/Destroy()
on_removed() on_removed()

View File

@@ -1,7 +1,7 @@
/obj/item/clothing/under/seromi /obj/item/clothing/under/seromi
icon = 'icons/obj/clothing/species/seromi/uniform.dmi' icon = 'icons/obj/clothing/species/seromi/uniform.dmi'
icon_state = "seromi_grey" icon_state = "seromi_grey"
species_restricted = list("Teshari") species_restricted = list(SPECIES_TESHARI)
/obj/item/clothing/under/seromi/smock /obj/item/clothing/under/seromi/smock
name = "small grey smock" name = "small grey smock"

View File

@@ -1,6 +1,6 @@
/obj/item/clothing/under/vox /obj/item/clothing/under/vox
has_sensor = 0 has_sensor = 0
species_restricted = list("Vox") species_restricted = list(SPECIES_VOX)
valid_accessory_slots = list("vox") valid_accessory_slots = list("vox")
restricted_accessory_slots = list("vox") restricted_accessory_slots = list("vox")
phoronproof = 1 phoronproof = 1

View File

@@ -2,5 +2,5 @@
var/datum/supply_order/O = new /datum/supply_order() var/datum/supply_order/O = new /datum/supply_order()
O.ordernum = supply_controller.ordernum O.ordernum = supply_controller.ordernum
O.object = supply_controller.supply_packs[pick(supply_controller.supply_packs)] 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 supply_controller.shoppinglist += O

View File

@@ -2,7 +2,7 @@
return // VOREStation Edit - Can't exploit shell if we never call shell! return // VOREStation Edit - Can't exploit shell if we never call shell!
if (config.use_irc_bot) if (config.use_irc_bot)
if (config.use_node_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 else
if (config.irc_bot_host) if (config.irc_bot_host)
if(config.irc_bot_export) if(config.irc_bot_export)
@@ -17,10 +17,10 @@
nudge_lib = "lib/nudge.so" nudge_lib = "lib/nudge.so"
spawn(0) 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 else
spawn(0) 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 return
/proc/send2mainirc(var/msg) /proc/send2mainirc(var/msg)

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) /proc/ext_python(var/script, var/args, var/scriptsprefix = 1)
return // VOREStation Edit - Can't exploit shell if we never call shell! 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) if(world.system_type == MS_WINDOWS)
script = replacetext(script, "/", "\\") script = replacetext(script, "/", "\\")
var/command = config.python_path + " " + script + " " + args var/command = config.python_path + " " + script + " " + args
return shell(command)
return shell(command)

View File

@@ -30,7 +30,7 @@
"_____ used ____ to create their newest invention, _____!", "_____ used ____ to create their newest invention, _____!",
"Scientists are not allowed to make Gatling _____.", "Scientists are not allowed to make Gatling _____.",
"It's not a party until the ____ arrive.", "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 _____.", "No, the AI's first law is NOT to serve _____.",
"The robots are not disposal bins for your _____.", "The robots are not disposal bins for your _____.",
"You can never have too many _____ on shift.", "You can never have too many _____ on shift.",

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