Merge branch 'bleeding-edge-freeze' of github.com:Baystation12/Baystation12 into feature
Conflicts: code/ZAS/ZAS_Zones.dm code/game/gamemodes/events.dm
@@ -397,6 +397,7 @@
|
|||||||
#include "code\defines\procs\icon_procs_readme.dm"
|
#include "code\defines\procs\icon_procs_readme.dm"
|
||||||
#include "code\defines\procs\logging.dm"
|
#include "code\defines\procs\logging.dm"
|
||||||
#include "code\defines\procs\religion_name.dm"
|
#include "code\defines\procs\religion_name.dm"
|
||||||
|
#include "code\defines\procs\sd_Alert.dm"
|
||||||
#include "code\defines\procs\station_name.dm"
|
#include "code\defines\procs\station_name.dm"
|
||||||
#include "code\defines\procs\statistics.dm"
|
#include "code\defines\procs\statistics.dm"
|
||||||
#include "code\defines\procs\syndicate_name.dm"
|
#include "code\defines\procs\syndicate_name.dm"
|
||||||
|
|||||||
@@ -133,15 +133,16 @@ proc/Airflow(zone/A, zone/B)
|
|||||||
else
|
else
|
||||||
connected_turfs |= C.B
|
connected_turfs |= C.B
|
||||||
|
|
||||||
//Get lists of things that can be thrown across the room for each zone.
|
//Get lists of things that can be thrown across the room for each zone (assumes air is moving from zone B to zone A)
|
||||||
var/list/pplz = B.movables()
|
var/list/air_sucked = B.movables()
|
||||||
var/list/otherpplz = A.movables()
|
var/list/air_repelled = A.movables()
|
||||||
if(n < 0)
|
if(n < 0)
|
||||||
var/list/temporary_pplz = pplz
|
//air is moving from zone A to zone B
|
||||||
pplz = otherpplz
|
var/list/temporary_pplz = air_sucked
|
||||||
otherpplz = temporary_pplz
|
air_sucked = air_repelled
|
||||||
|
air_repelled = temporary_pplz
|
||||||
|
|
||||||
for(var/atom/movable/M in pplz)
|
for(var/atom/movable/M in air_sucked)
|
||||||
|
|
||||||
if(M.last_airflow > world.time - vsc.airflow_delay) continue
|
if(M.last_airflow > world.time - vsc.airflow_delay) continue
|
||||||
|
|
||||||
@@ -166,7 +167,7 @@ proc/Airflow(zone/A, zone/B)
|
|||||||
spawn M.GotoAirflowDest(abs(n)/5)
|
spawn M.GotoAirflowDest(abs(n)/5)
|
||||||
|
|
||||||
//Do it again for the stuff in the other zone, making it fly away.
|
//Do it again for the stuff in the other zone, making it fly away.
|
||||||
for(var/atom/movable/M in otherpplz)
|
for(var/atom/movable/M in air_repelled)
|
||||||
|
|
||||||
if(M.last_airflow > world.time - vsc.airflow_delay) continue
|
if(M.last_airflow > world.time - vsc.airflow_delay) continue
|
||||||
|
|
||||||
@@ -240,12 +241,15 @@ atom/movable
|
|||||||
if(airflow_dest == loc)
|
if(airflow_dest == loc)
|
||||||
step_away(src,loc)
|
step_away(src,loc)
|
||||||
if(ismob(src))
|
if(ismob(src))
|
||||||
if(src:nodamage) return
|
if(src:nodamage)
|
||||||
|
return
|
||||||
if(istype(src, /mob/living/carbon/human))
|
if(istype(src, /mob/living/carbon/human))
|
||||||
if(istype(src, /mob/living/carbon/human))
|
if(src:buckled)
|
||||||
if(src:buckled) return
|
return
|
||||||
if(src:shoes)
|
if(src:shoes)
|
||||||
if(src:shoes.type == /obj/item/clothing/shoes/magboots && src:shoes.flags & NOSLIP) return
|
if(src:shoes.type == /obj/item/clothing/shoes/magboots)
|
||||||
|
if(src:shoes.flags & NOSLIP)
|
||||||
|
return
|
||||||
src << "\red You are sucked away by airflow!"
|
src << "\red You are sucked away by airflow!"
|
||||||
var/airflow_falloff = 9 - ul_FalloffAmount(airflow_dest) //It's a fast falloff calc. Very useful.
|
var/airflow_falloff = 9 - ul_FalloffAmount(airflow_dest) //It's a fast falloff calc. Very useful.
|
||||||
if(airflow_falloff < 1)
|
if(airflow_falloff < 1)
|
||||||
@@ -266,9 +270,15 @@ atom/movable
|
|||||||
airflow_speed -= vsc.airflow_speed_decay
|
airflow_speed -= vsc.airflow_speed_decay
|
||||||
if(airflow_speed > 7)
|
if(airflow_speed > 7)
|
||||||
if(airflow_time++ >= airflow_speed - 7)
|
if(airflow_time++ >= airflow_speed - 7)
|
||||||
|
if(od)
|
||||||
|
density = 0
|
||||||
sleep(1 * tick_multiplier)
|
sleep(1 * tick_multiplier)
|
||||||
else
|
else
|
||||||
|
if(od)
|
||||||
|
density = 0
|
||||||
sleep(max(1,10-(airflow_speed+3)) * tick_multiplier)
|
sleep(max(1,10-(airflow_speed+3)) * tick_multiplier)
|
||||||
|
if(od)
|
||||||
|
density = 1
|
||||||
if ((!( src.airflow_dest ) || src.loc == src.airflow_dest))
|
if ((!( src.airflow_dest ) || src.loc == src.airflow_dest))
|
||||||
src.airflow_dest = locate(min(max(src.x + xo, 1), world.maxx), min(max(src.y + yo, 1), world.maxy), src.z)
|
src.airflow_dest = locate(min(max(src.x + xo, 1), world.maxx), min(max(src.y + yo, 1), world.maxy), src.z)
|
||||||
if ((src.x == 1 || src.x == world.maxx || src.y == 1 || src.y == world.maxy))
|
if ((src.x == 1 || src.x == world.maxx || src.y == 1 || src.y == world.maxy))
|
||||||
@@ -276,7 +286,8 @@ atom/movable
|
|||||||
if(!istype(loc, /turf))
|
if(!istype(loc, /turf))
|
||||||
return
|
return
|
||||||
step_towards(src, src.airflow_dest)
|
step_towards(src, src.airflow_dest)
|
||||||
if(ismob(src) && src:client) src:client:move_delay = world.time + vsc.airflow_mob_slowdown
|
if(ismob(src) && src:client)
|
||||||
|
src:client:move_delay = world.time + vsc.airflow_mob_slowdown
|
||||||
airflow_dest = null
|
airflow_dest = null
|
||||||
airflow_speed = 0
|
airflow_speed = 0
|
||||||
airflow_time = 0
|
airflow_time = 0
|
||||||
@@ -295,12 +306,15 @@ atom/movable
|
|||||||
if(airflow_dest == loc)
|
if(airflow_dest == loc)
|
||||||
step_away(src,loc)
|
step_away(src,loc)
|
||||||
if(ismob(src))
|
if(ismob(src))
|
||||||
if(src:nodamage) return
|
if(src:nodamage)
|
||||||
|
return
|
||||||
if(istype(src, /mob/living/carbon/human))
|
if(istype(src, /mob/living/carbon/human))
|
||||||
if(istype(src, /mob/living/carbon/human))
|
if(src:buckled)
|
||||||
if(src:buckled) return
|
return
|
||||||
if(src:shoes)
|
if(src:shoes)
|
||||||
if(src:shoes.type == /obj/item/clothing/shoes/magboots && src:shoes.flags & NOSLIP) return
|
if(src:shoes.type == /obj/item/clothing/shoes/magboots)
|
||||||
|
if(src:shoes.flags & NOSLIP)
|
||||||
|
return
|
||||||
src << "\red You are pushed away by airflow!"
|
src << "\red You are pushed away by airflow!"
|
||||||
var/airflow_falloff = 9 - ul_FalloffAmount(airflow_dest) //It's a fast falloff calc. Very useful.
|
var/airflow_falloff = 9 - ul_FalloffAmount(airflow_dest) //It's a fast falloff calc. Very useful.
|
||||||
if(airflow_falloff < 1)
|
if(airflow_falloff < 1)
|
||||||
@@ -331,7 +345,8 @@ atom/movable
|
|||||||
if(!istype(loc, /turf))
|
if(!istype(loc, /turf))
|
||||||
return
|
return
|
||||||
step_towards(src, src.airflow_dest)
|
step_towards(src, src.airflow_dest)
|
||||||
if(ismob(src) && src:client) src:client:move_delay = world.time + vsc.airflow_mob_slowdown
|
if(ismob(src) && src:client)
|
||||||
|
src:client:move_delay = world.time + vsc.airflow_mob_slowdown
|
||||||
airflow_dest = null
|
airflow_dest = null
|
||||||
airflow_speed = 0
|
airflow_speed = 0
|
||||||
airflow_time = 0
|
airflow_time = 0
|
||||||
|
|||||||
@@ -36,7 +36,7 @@ zone
|
|||||||
if(!istype(T,/turf/simulated))
|
if(!istype(T,/turf/simulated))
|
||||||
AddTurf(T)
|
AddTurf(T)
|
||||||
|
|
||||||
//Generate the gas_mixture for use in this zone by using the average of the gases
|
//Generate the gas_mixture for use in txhis zone by using the average of the gases
|
||||||
//defined at startup.
|
//defined at startup.
|
||||||
air = new
|
air = new
|
||||||
var/members = contents.len
|
var/members = contents.len
|
||||||
@@ -304,6 +304,13 @@ proc/ShareRatio(datum/gas_mixture/A, datum/gas_mixture/B, connecting_tiles)
|
|||||||
|
|
||||||
temp_avg = (A.temperature * full_heat_capacity + B.temperature * s_full_heat_capacity) / (full_heat_capacity + s_full_heat_capacity)
|
temp_avg = (A.temperature * full_heat_capacity + B.temperature * s_full_heat_capacity) / (full_heat_capacity + s_full_heat_capacity)
|
||||||
|
|
||||||
|
<<<<<<< HEAD
|
||||||
|
=======
|
||||||
|
if(sharing_lookup_table.len >= connecting_tiles) //6 or more interconnecting tiles will max at 42% of air moved per tick.
|
||||||
|
ratio = sharing_lookup_table[connecting_tiles]
|
||||||
|
ratio *= 3
|
||||||
|
|
||||||
|
>>>>>>> bc318a3c8e40f9a2eed179318e17f56ce828ab1e
|
||||||
A.oxygen = max(0, (A.oxygen - oxy_avg) * (1-ratio) + oxy_avg )
|
A.oxygen = max(0, (A.oxygen - oxy_avg) * (1-ratio) + oxy_avg )
|
||||||
A.nitrogen = max(0, (A.nitrogen - nit_avg) * (1-ratio) + nit_avg )
|
A.nitrogen = max(0, (A.nitrogen - nit_avg) * (1-ratio) + nit_avg )
|
||||||
A.carbon_dioxide = max(0, (A.carbon_dioxide - co2_avg) * (1-ratio) + co2_avg )
|
A.carbon_dioxide = max(0, (A.carbon_dioxide - co2_avg) * (1-ratio) + co2_avg )
|
||||||
@@ -366,17 +373,30 @@ proc/ShareSpace(datum/gas_mixture/A, list/unsimulated_tiles)
|
|||||||
size = max(1,A.group_multiplier)
|
size = max(1,A.group_multiplier)
|
||||||
share_size = max(1,unsimulated_tiles.len)
|
share_size = max(1,unsimulated_tiles.len)
|
||||||
|
|
||||||
full_oxy = A.oxygen * size
|
//full_oxy = A.oxygen * size
|
||||||
full_nitro = A.nitrogen * size
|
//full_nitro = A.nitrogen * size
|
||||||
full_co2 = A.carbon_dioxide * size
|
//full_co2 = A.carbon_dioxide * size
|
||||||
full_plasma = A.toxins * size
|
//full_plasma = A.toxins * size
|
||||||
|
|
||||||
full_heat_capacity = A.heat_capacity() * size
|
//full_heat_capacity = A.heat_capacity() * size
|
||||||
|
|
||||||
|
<<<<<<< HEAD
|
||||||
oxy_avg = (full_oxy + unsim_oxygen * 4) / (size + share_size * 4)
|
oxy_avg = (full_oxy + unsim_oxygen * 4) / (size + share_size * 4)
|
||||||
nit_avg = (full_nitro + unsim_nitrogen * 4) / (size + share_size * 4)
|
nit_avg = (full_nitro + unsim_nitrogen * 4) / (size + share_size * 4)
|
||||||
co2_avg = (full_co2 + unsim_co2 * 4) / (size + share_size * 4)
|
co2_avg = (full_co2 + unsim_co2 * 4) / (size + share_size * 4)
|
||||||
plasma_avg = (full_plasma + unsim_plasma * 4) / (size + share_size * 4)
|
plasma_avg = (full_plasma + unsim_plasma * 4) / (size + share_size * 4)
|
||||||
|
=======
|
||||||
|
oxy_avg = unsim_oxygen//(full_oxy + unsim_oxygen) / (size + share_size)
|
||||||
|
nit_avg = unsim_nitrogen//(full_nitro + unsim_nitrogen) / (size + share_size)
|
||||||
|
co2_avg = unsim_co2//(full_co2 + unsim_co2) / (size + share_size)
|
||||||
|
plasma_avg = unsim_plasma//(full_plasma + unsim_plasma) / (size + share_size)
|
||||||
|
|
||||||
|
temp_avg = unsim_temperature//(A.temperature * full_heat_capacity + unsim_temperature * unsim_heat_capacity) / (full_heat_capacity + unsim_heat_capacity)
|
||||||
|
|
||||||
|
if(sharing_lookup_table.len >= unsimulated_tiles.len) //6 or more interconnecting tiles will max at 42% of air moved per tick.
|
||||||
|
ratio = sharing_lookup_table[unsimulated_tiles.len]
|
||||||
|
ratio *= 3
|
||||||
|
>>>>>>> bc318a3c8e40f9a2eed179318e17f56ce828ab1e
|
||||||
|
|
||||||
A.oxygen = max(0, (A.oxygen - oxy_avg) * (1-ratio) + oxy_avg )
|
A.oxygen = max(0, (A.oxygen - oxy_avg) * (1-ratio) + oxy_avg )
|
||||||
A.nitrogen = max(0, (A.nitrogen - nit_avg) * (1-ratio) + nit_avg )
|
A.nitrogen = max(0, (A.nitrogen - nit_avg) * (1-ratio) + nit_avg )
|
||||||
|
|||||||
@@ -288,6 +288,13 @@ datum/shuttle_controller
|
|||||||
|
|
||||||
if(1)
|
if(1)
|
||||||
|
|
||||||
|
// Just before it leaves, close the damn doors!
|
||||||
|
if(timeleft == 2 || timeleft == 1)
|
||||||
|
var/area/start_location = locate(/area/shuttle/escape/station)
|
||||||
|
for(var/obj/machinery/door/D in start_location)
|
||||||
|
spawn(0)
|
||||||
|
D.close()
|
||||||
|
|
||||||
if(timeleft>0)
|
if(timeleft>0)
|
||||||
return 0
|
return 0
|
||||||
|
|
||||||
|
|||||||
@@ -10,6 +10,7 @@ var/global/list/client_list = list() //List of all clients, based on ckey
|
|||||||
var/global/list/cable_list = list() //Index for all cables, so that powernets don't have to look through the entire world all the time
|
var/global/list/cable_list = list() //Index for all cables, so that powernets don't have to look through the entire world all the time
|
||||||
var/global/list/hair_styles_list = list() //stores /datum/sprite_accessory/hair indexed by name
|
var/global/list/hair_styles_list = list() //stores /datum/sprite_accessory/hair indexed by name
|
||||||
var/global/list/facial_hair_styles_list = list() //stores /datum/sprite_accessory/facial_hair indexed by name
|
var/global/list/facial_hair_styles_list = list() //stores /datum/sprite_accessory/facial_hair indexed by name
|
||||||
|
var/global/list/skin_styles_list = list() //stores /datum/sprite_accessory/skin indexed by name
|
||||||
var/global/list/chemical_reactions_list //list of all /datum/chemical_reaction datums. Used during chemical reactions
|
var/global/list/chemical_reactions_list //list of all /datum/chemical_reaction datums. Used during chemical reactions
|
||||||
var/global/list/chemical_reagents_list //list of all /datum/reagent datums indexed by reagent id. Used by chemistry stuff
|
var/global/list/chemical_reagents_list //list of all /datum/reagent datums indexed by reagent id. Used by chemistry stuff
|
||||||
var/global/list/landmarks_list = list() //list of all landmarks created
|
var/global/list/landmarks_list = list() //list of all landmarks created
|
||||||
@@ -26,12 +27,21 @@ var/global/list/landmarks_list = list() //list of all landmarks created
|
|||||||
for(var/path in paths)
|
for(var/path in paths)
|
||||||
var/datum/sprite_accessory/hair/H = new path()
|
var/datum/sprite_accessory/hair/H = new path()
|
||||||
hair_styles_list[H.name] = H
|
hair_styles_list[H.name] = H
|
||||||
|
|
||||||
//Facial Hair - Initialise all /datum/sprite_accessory/facial_hair into an list indexed by facialhair-style name
|
//Facial Hair - Initialise all /datum/sprite_accessory/facial_hair into an list indexed by facialhair-style name
|
||||||
paths = typesof(/datum/sprite_accessory/facial_hair) - /datum/sprite_accessory/facial_hair
|
paths = typesof(/datum/sprite_accessory/facial_hair) - /datum/sprite_accessory/facial_hair
|
||||||
for(var/path in paths)
|
for(var/path in paths)
|
||||||
var/datum/sprite_accessory/facial_hair/H = new path()
|
var/datum/sprite_accessory/facial_hair/H = new path()
|
||||||
facial_hair_styles_list[H.name] = H
|
facial_hair_styles_list[H.name] = H
|
||||||
|
|
||||||
|
//Skin Styles - Initialise all /datum/sprite_accessory/skin into a list indexed by the name
|
||||||
|
//Check to make sure the icon file exists first
|
||||||
|
paths = typesof(/datum/sprite_accessory/skin) - /datum/sprite_accessory/skin
|
||||||
|
for(var/path in paths)
|
||||||
|
var/datum/sprite_accessory/skin/S = new path()
|
||||||
|
if(fexists("[S.icon].dmi"))
|
||||||
|
skin_styles_list[S.name] = S
|
||||||
|
|
||||||
proc/make_player_list()//Global proc that rebuilds the player list
|
proc/make_player_list()//Global proc that rebuilds the player list
|
||||||
for(var/mob/p in player_list)//Clears out everyone that logged out
|
for(var/mob/p in player_list)//Clears out everyone that logged out
|
||||||
if(!(p.client))
|
if(!(p.client))
|
||||||
|
|||||||
168
code/defines/procs/sd_Alert.dm
Normal file
@@ -0,0 +1,168 @@
|
|||||||
|
/* sd_Alert library
|
||||||
|
by Shadowdarke (shadowdarke@byond.com)
|
||||||
|
|
||||||
|
sd_Alert() is a powerful and flexible alternative to the built in BYOND
|
||||||
|
alert() proc. sd_Alert offers timed popups, unlimited buttons, custom
|
||||||
|
appearance, and even the option to popup without stealing keyboard focus
|
||||||
|
from the map or command line.
|
||||||
|
|
||||||
|
Please see demo.dm for detailed examples.
|
||||||
|
|
||||||
|
FORMAT
|
||||||
|
sd_Alert(who, message, title, buttons, default, duration, unfocus, \
|
||||||
|
size, table, style, tag, select, flags)
|
||||||
|
|
||||||
|
ARGUMENTS
|
||||||
|
who - the client or mob to display the alert to.
|
||||||
|
message - text message to display
|
||||||
|
title - title of the alert box
|
||||||
|
buttons - list of buttons
|
||||||
|
Default Value: list("Ok")
|
||||||
|
default - default button selestion
|
||||||
|
Default Value: the first button in the list
|
||||||
|
duration - the number of ticks before this alert expires. If not
|
||||||
|
set, the alert lasts until a button is clicked.
|
||||||
|
Default Value: 0 (unlimited)
|
||||||
|
unfocus - if this value is set, the popup will not steal keyboard
|
||||||
|
focus from the map or command line.
|
||||||
|
Default Value: 1 (do not take focus)
|
||||||
|
size - size of the popup window in px
|
||||||
|
Default Value: "300x200"
|
||||||
|
table - optional parameters for the HTML table in the alert
|
||||||
|
Default Value: "width=100% height=100%" (fill the window)
|
||||||
|
style - optional style sheet information
|
||||||
|
tag - lets you specify a certain tag for this sd_Alert so you may manipulate it
|
||||||
|
externally. (i.e. force the alert to close, change options and redisplay,
|
||||||
|
reuse the same window, etc.)
|
||||||
|
select - if set, the buttons will be replaced with a selection box with a number of
|
||||||
|
lines displayed equal to this value.
|
||||||
|
Default value: 0 (use buttons)
|
||||||
|
flags - optional flags effecting the alert display. These flags may be ORed (|)
|
||||||
|
together for multiple effects.
|
||||||
|
SD_ALERT_SCROLL = display a scrollbar
|
||||||
|
SD_ALERT_SELECT_MULTI = forces selection box display (instead of
|
||||||
|
buttons) allows the user to select multiple
|
||||||
|
choices.
|
||||||
|
SD_ALERT_LINKS = display each choice as a plain text link.
|
||||||
|
Any selection box style overrides this flag.
|
||||||
|
SD_ALERT_NOVALIDATE = don't validate responses
|
||||||
|
Default value: SD_ALERT_SCROLL
|
||||||
|
(button display with scroll bar, validate responses)
|
||||||
|
RETURNS
|
||||||
|
The text of the selected button, or null if the alert duration expired
|
||||||
|
without a button click.
|
||||||
|
|
||||||
|
Version 1 changes (from version 0):
|
||||||
|
* Added the tag, select, and flags arguments, thanks to several suggestions from Foomer.
|
||||||
|
* Split the sd_Alert/Alert() proc into New(), Display(), and Response() to allow more
|
||||||
|
customization by developers. Primarily developers would want to use Display() to change
|
||||||
|
the display of active tagged windows
|
||||||
|
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
#define SD_ALERT_SCROLL 1
|
||||||
|
#define SD_ALERT_SELECT_MULTI 2
|
||||||
|
#define SD_ALERT_LINKS 4
|
||||||
|
#define SD_ALERT_NOVALIDATE 8
|
||||||
|
|
||||||
|
proc/sd_Alert(client/who, message, title, buttons = list("Ok"),\
|
||||||
|
default, duration = 0, unfocus = 1, size = "300x200", \
|
||||||
|
table = "width=100% height=100%", style, tag, select, flags = SD_ALERT_SCROLL)
|
||||||
|
|
||||||
|
if(ismob(who))
|
||||||
|
var/mob/M = who
|
||||||
|
who = M.client
|
||||||
|
if(!istype(who)) CRASH("sd_Alert: Invalid target:[who] (\ref[who])")
|
||||||
|
|
||||||
|
var/sd_alert/T = locate(tag)
|
||||||
|
if(T)
|
||||||
|
if(istype(T)) del(T)
|
||||||
|
else CRASH("sd_Alert: tag \"[tag]\" is already in use by datum '[T]' (type: [T.type])")
|
||||||
|
T = new(who, tag)
|
||||||
|
if(duration)
|
||||||
|
spawn(duration)
|
||||||
|
if(T) del(T)
|
||||||
|
return
|
||||||
|
T.Display(message,title,buttons,default,unfocus,size,table,style,select,flags)
|
||||||
|
. = T.Response()
|
||||||
|
|
||||||
|
sd_alert
|
||||||
|
var
|
||||||
|
client/target
|
||||||
|
response
|
||||||
|
list/validation
|
||||||
|
|
||||||
|
Del()
|
||||||
|
target << browse(null,"window=\ref[src]")
|
||||||
|
..()
|
||||||
|
|
||||||
|
New(who, tag)
|
||||||
|
..()
|
||||||
|
target = who
|
||||||
|
src.tag = tag
|
||||||
|
|
||||||
|
Topic(href,params[])
|
||||||
|
if(usr.client != target) return
|
||||||
|
response = params["clk"]
|
||||||
|
|
||||||
|
proc/Display(message,title,list/buttons,default,unfocus,size,table,style,select,flags)
|
||||||
|
if(unfocus) spawn() target << browse(null,null)
|
||||||
|
if(istext(buttons)) buttons = list(buttons)
|
||||||
|
if(!default) default = buttons[1]
|
||||||
|
if(!(flags & SD_ALERT_NOVALIDATE)) validation = buttons.Copy()
|
||||||
|
|
||||||
|
var/html = {"<head><title>[title]</title>[style]<script>\
|
||||||
|
function c(x) {document.location.href='BYOND://?src=\ref[src];'+x;}\
|
||||||
|
</script></head><body onLoad="fcs.focus();"\
|
||||||
|
[(flags&SD_ALERT_SCROLL)?"":" scroll=no"]><table [table]><tr>\
|
||||||
|
<td>[message]</td></tr><tr><th>"}
|
||||||
|
|
||||||
|
if(select || (flags & SD_ALERT_SELECT_MULTI)) // select style choices
|
||||||
|
html += {"<FORM ID=fcs ACTION='BYOND://?' METHOD=GET>\
|
||||||
|
<INPUT TYPE=HIDDEN NAME=src VALUE='\ref[src]'>
|
||||||
|
<SELECT NAME=clk SIZE=[select]\
|
||||||
|
[(flags & SD_ALERT_SELECT_MULTI)?" MULTIPLE":""]>"}
|
||||||
|
for(var/b in buttons)
|
||||||
|
html += "<OPTION[(b == default)?" SELECTED":""]>\
|
||||||
|
[html_encode(b)]</OPTION>"
|
||||||
|
html += "</SELECT><BR><INPUT TYPE=SUBMIT VALUE=Submit></FORM>"
|
||||||
|
else if(flags & SD_ALERT_LINKS) // text link style
|
||||||
|
for(var/b in buttons)
|
||||||
|
var/list/L = list()
|
||||||
|
L["clk"] = b
|
||||||
|
var/html_string=list2params(L)
|
||||||
|
var/focus
|
||||||
|
if(b == default) focus = " ID=fcs"
|
||||||
|
html += "<A[focus] href=# onClick=\"c('[html_string]')\">[html_encode(b)]</A>\
|
||||||
|
<BR>"
|
||||||
|
else // button style choices
|
||||||
|
for(var/b in buttons)
|
||||||
|
var/list/L = list()
|
||||||
|
L["clk"] = b
|
||||||
|
var/html_string=list2params(L)
|
||||||
|
var/focus
|
||||||
|
if(b == default) focus = " ID=fcs"
|
||||||
|
html += "<INPUT[focus] TYPE=button VALUE='[html_encode(b)]' \
|
||||||
|
onClick=\"c('[html_string]')\"> "
|
||||||
|
|
||||||
|
html += "</th></tr></table></body>"
|
||||||
|
|
||||||
|
target << browse(html,"window=\ref[src];size=[size];can_close=0")
|
||||||
|
|
||||||
|
proc/Response()
|
||||||
|
var/validated
|
||||||
|
while(!validated)
|
||||||
|
while(target && !response) // wait for a response
|
||||||
|
sleep(2)
|
||||||
|
|
||||||
|
if(response && validation)
|
||||||
|
if(istype(response, /list))
|
||||||
|
var/list/L = response - validation
|
||||||
|
if(L.len) response = null
|
||||||
|
else validated = 1
|
||||||
|
else if(response in validation) validated = 1
|
||||||
|
else response=null
|
||||||
|
else validated = 1
|
||||||
|
spawn(2) del(src)
|
||||||
|
return response
|
||||||
@@ -21,6 +21,9 @@
|
|||||||
// Doesn't necessarily trigger an event, but might. Returns 1 if it did.
|
// Doesn't necessarily trigger an event, but might. Returns 1 if it did.
|
||||||
/proc/event()
|
/proc/event()
|
||||||
event = 1
|
event = 1
|
||||||
|
if(!sent_ninja_to_station)
|
||||||
|
choose_space_ninja()
|
||||||
|
return
|
||||||
|
|
||||||
var/minutes_passed = world.time/600
|
var/minutes_passed = world.time/600
|
||||||
|
|
||||||
@@ -50,12 +53,28 @@
|
|||||||
possibleEvents["Appendicitis"] = medical_count * 50
|
possibleEvents["Appendicitis"] = medical_count * 50
|
||||||
if(security_count >= 1)
|
if(security_count >= 1)
|
||||||
possibleEvents["Prison Break"] = security_count * 50
|
possibleEvents["Prison Break"] = security_count * 50
|
||||||
|
possibleEvents["Space Ninja"] = security_count * 10 // very low chance for space ninja event
|
||||||
|
|
||||||
var/picked_event = pick(possibleEvents)
|
var/picked_event = pick(possibleEvents)
|
||||||
var/chance = possibleEvents[picked_event]
|
var/chance = possibleEvents[picked_event]
|
||||||
|
|
||||||
|
var/base_chance = 0.4
|
||||||
|
switch(player_list.len)
|
||||||
|
if(5 to 10)
|
||||||
|
base_chance = 0.6
|
||||||
|
if(11 to 15)
|
||||||
|
base_chance = 0.7
|
||||||
|
if(16 to 20)
|
||||||
|
base_chance = 0.8
|
||||||
|
if(21 to 25)
|
||||||
|
base_chance = 0.9
|
||||||
|
if(26 to 30)
|
||||||
|
base_chance = 1.0
|
||||||
|
if(30 to 100000)
|
||||||
|
base_chance = 1.1
|
||||||
|
|
||||||
// Trigger the event based on how likely it currently is.
|
// Trigger the event based on how likely it currently is.
|
||||||
if(!prob(chance * eventchance * player_list.len / 20)) // "normal" event chance at 20 players
|
if(!prob(chance * eventchance * base_chance)) // "normal" event chance at 20 players
|
||||||
return 0
|
return 0
|
||||||
|
|
||||||
switch(picked_event)
|
switch(picked_event)
|
||||||
@@ -70,6 +89,9 @@
|
|||||||
spawn_meteors()
|
spawn_meteors()
|
||||||
if("Blob")
|
if("Blob")
|
||||||
mini_blob_event()
|
mini_blob_event()
|
||||||
|
if("Space Ninja")
|
||||||
|
//Handled in space_ninja.dm. Doesn't announce arrival, all sneaky-like.
|
||||||
|
choose_space_ninja()
|
||||||
if("Radiation")
|
if("Radiation")
|
||||||
high_radiation_event()
|
high_radiation_event()
|
||||||
if("Virus")
|
if("Virus")
|
||||||
|
|||||||
@@ -93,7 +93,33 @@ When I already created about 4 new objectives, this doesn't seem terribly import
|
|||||||
/var/global/toggle_space_ninja = 1//If ninjas can spawn or not.
|
/var/global/toggle_space_ninja = 1//If ninjas can spawn or not.
|
||||||
/var/global/sent_ninja_to_station = 0//If a ninja is already on the station.
|
/var/global/sent_ninja_to_station = 0//If a ninja is already on the station.
|
||||||
|
|
||||||
/proc/space_ninja_arrival()
|
/proc/choose_space_ninja()
|
||||||
|
var/list/candidates = list() //list of candidate keys
|
||||||
|
for(var/mob/dead/observer/G in player_list)
|
||||||
|
if(G.client && ((G.client.inactivity/10)/60) <= 5 && G.client.be_spaceninja)
|
||||||
|
if(!(G.mind && G.mind.current && G.mind.current.stat != DEAD))
|
||||||
|
candidates += G
|
||||||
|
if(!candidates.len) return
|
||||||
|
candidates = shuffle(candidates)//Incorporating Donkie's list shuffle
|
||||||
|
|
||||||
|
//loop over all viable candidates, giving them a popup asking if they want to be space ninja
|
||||||
|
var/mob/dead/observer/accepted_ghost
|
||||||
|
while(candidates.len && !accepted_ghost)
|
||||||
|
//ask a different random candidate
|
||||||
|
var/mob/dead/observer/G = pick(candidates)
|
||||||
|
//give the popup a 30 second timeout in case the player is AFK
|
||||||
|
if(sd_Alert(G, "A space ninja is about to spawn. Would you like to play as the ninja?", "Space Ninja", list("Yes","No"), "Yes", 300, 1, "350x125") == "Yes")
|
||||||
|
accepted_ghost = G
|
||||||
|
else
|
||||||
|
candidates -= G
|
||||||
|
|
||||||
|
if(accepted_ghost)
|
||||||
|
//someone accepted
|
||||||
|
space_ninja_arrival(accepted_ghost)
|
||||||
|
|
||||||
|
/proc/space_ninja_arrival(var/mob/dead/observer/G)
|
||||||
|
if(!G)
|
||||||
|
return choose_space_ninja()
|
||||||
|
|
||||||
var/datum/game_mode/current_mode = ticker.mode
|
var/datum/game_mode/current_mode = ticker.mode
|
||||||
var/datum/mind/current_mind
|
var/datum/mind/current_mind
|
||||||
@@ -137,19 +163,9 @@ Malf AIs/silicons aren't added. Monkeys aren't added. Messes with objective comp
|
|||||||
if(L.name == "carpspawn")
|
if(L.name == "carpspawn")
|
||||||
spawn_list.Add(L)
|
spawn_list.Add(L)
|
||||||
|
|
||||||
|
|
||||||
var/list/candidates = list() //list of candidate keys
|
|
||||||
for(var/mob/dead/observer/G in player_list)
|
|
||||||
if(G.client && !G.client.holder && ((G.client.inactivity/10)/60) <= 5)
|
|
||||||
if(!(G.mind && G.mind.current && G.mind.current.stat != DEAD))
|
|
||||||
candidates += G.key
|
|
||||||
if(!candidates.len) return
|
|
||||||
candidates = shuffle(candidates)//Incorporating Donkie's list shuffle
|
|
||||||
|
|
||||||
|
|
||||||
//The ninja will be created on the right spawn point or at late join.
|
//The ninja will be created on the right spawn point or at late join.
|
||||||
var/mob/living/carbon/human/new_ninja = create_space_ninja(pick(spawn_list.len ? spawn_list : latejoin ))
|
var/mob/living/carbon/human/new_ninja = create_space_ninja(pick(spawn_list.len ? spawn_list : latejoin ))
|
||||||
new_ninja.key = pick(candidates)
|
new_ninja.key = G.ckey
|
||||||
new_ninja.wear_suit:randomize_param()//Give them a random set of suit parameters.
|
new_ninja.wear_suit:randomize_param()//Give them a random set of suit parameters.
|
||||||
new_ninja.internal = new_ninja.s_store //So the poor ninja has something to breath when they spawn in spess.
|
new_ninja.internal = new_ninja.s_store //So the poor ninja has something to breath when they spawn in spess.
|
||||||
new_ninja.internals.icon_state = "internal1"
|
new_ninja.internals.icon_state = "internal1"
|
||||||
|
|||||||
@@ -148,18 +148,6 @@ var/global/datum/controller/gameticker/ticker
|
|||||||
spawn(3000)
|
spawn(3000)
|
||||||
statistic_cycle() // Polls population totals regularly and stores them in an SQL DB -- TLE
|
statistic_cycle() // Polls population totals regularly and stores them in an SQL DB -- TLE
|
||||||
|
|
||||||
//setup vermin spawn areas
|
|
||||||
var/list/vermin_spawn_areas = list("/area/maintenance","/area/mine/maintenance","/area/crew_quarters/locker/locker_toilet","/area/crew_quarters/toilet")
|
|
||||||
vermin_spawn_turfs = new/list()
|
|
||||||
for(var/area_text in vermin_spawn_areas)
|
|
||||||
var/area_base_type = text2path(area_text)
|
|
||||||
for(var/area in typesof(area_base_type))
|
|
||||||
var/list/area_turfs = get_area_turfs(area)
|
|
||||||
for(var/turf/T in area_turfs)
|
|
||||||
if(T.density)
|
|
||||||
area_turfs -= T
|
|
||||||
vermin_spawn_turfs.Add(area_turfs)
|
|
||||||
|
|
||||||
return 1
|
return 1
|
||||||
|
|
||||||
/datum/controller/gameticker
|
/datum/controller/gameticker
|
||||||
|
|||||||
@@ -68,9 +68,6 @@
|
|||||||
else
|
else
|
||||||
H.equip_to_slot_or_del(new /obj/item/weapon/storage/box/survival(H.back), slot_in_backpack)
|
H.equip_to_slot_or_del(new /obj/item/weapon/storage/box/survival(H.back), slot_in_backpack)
|
||||||
H.equip_to_slot_or_del(new /obj/item/weapon/handcuffs(H), slot_in_backpack)
|
H.equip_to_slot_or_del(new /obj/item/weapon/handcuffs(H), slot_in_backpack)
|
||||||
var/obj/item/weapon/implant/loyalty/L = new/obj/item/weapon/implant/loyalty(H)
|
|
||||||
L.imp_in = H
|
|
||||||
L.implanted = 1
|
|
||||||
return 1
|
return 1
|
||||||
|
|
||||||
|
|
||||||
@@ -120,9 +117,6 @@
|
|||||||
H.equip_to_slot_or_del(new /obj/item/weapon/storage/box/evidence(H), slot_in_backpack)
|
H.equip_to_slot_or_del(new /obj/item/weapon/storage/box/evidence(H), slot_in_backpack)
|
||||||
H.equip_to_slot_or_del(new /obj/item/device/detective_scanner(H), slot_in_backpack)
|
H.equip_to_slot_or_del(new /obj/item/device/detective_scanner(H), slot_in_backpack)
|
||||||
|
|
||||||
var/obj/item/weapon/implant/loyalty/L = new/obj/item/weapon/implant/loyalty(H)
|
|
||||||
L.imp_in = H
|
|
||||||
L.implanted = 1
|
|
||||||
return 1
|
return 1
|
||||||
|
|
||||||
|
|
||||||
@@ -156,7 +150,4 @@
|
|||||||
else
|
else
|
||||||
H.equip_to_slot_or_del(new /obj/item/weapon/storage/box/survival(H.back), slot_in_backpack)
|
H.equip_to_slot_or_del(new /obj/item/weapon/storage/box/survival(H.back), slot_in_backpack)
|
||||||
H.equip_to_slot_or_del(new /obj/item/weapon/handcuffs(H), slot_in_backpack)
|
H.equip_to_slot_or_del(new /obj/item/weapon/handcuffs(H), slot_in_backpack)
|
||||||
var/obj/item/weapon/implant/loyalty/L = new/obj/item/weapon/implant/loyalty(H)
|
|
||||||
L.imp_in = H
|
|
||||||
L.implanted = 1
|
|
||||||
return 1
|
return 1
|
||||||
|
|||||||
@@ -154,7 +154,7 @@
|
|||||||
update_desc()
|
update_desc()
|
||||||
break
|
break
|
||||||
user << desc
|
user << desc
|
||||||
if(P.loc != src && !istype(P, /obj/item/weapon/cable_coil))
|
if(P && P.loc != src && !istype(P, /obj/item/weapon/cable_coil))
|
||||||
user << "\red You cannot add that component to the machine!"
|
user << "\red You cannot add that component to the machine!"
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -2,6 +2,7 @@
|
|||||||
desc = "An aging combat exosuit utilized by the Nanotrasen corporation. Originally developed to combat hostile alien lifeforms."
|
desc = "An aging combat exosuit utilized by the Nanotrasen corporation. Originally developed to combat hostile alien lifeforms."
|
||||||
name = "Durand"
|
name = "Durand"
|
||||||
icon_state = "durand"
|
icon_state = "durand"
|
||||||
|
initial_icon = "durand"
|
||||||
step_in = 4
|
step_in = 4
|
||||||
dir_in = 1 //Facing North.
|
dir_in = 1 //Facing North.
|
||||||
health = 400
|
health = 400
|
||||||
|
|||||||
@@ -2,6 +2,7 @@
|
|||||||
desc = "A lightweight, security exosuit. Popular among private and corporate security."
|
desc = "A lightweight, security exosuit. Popular among private and corporate security."
|
||||||
name = "Gygax"
|
name = "Gygax"
|
||||||
icon_state = "gygax"
|
icon_state = "gygax"
|
||||||
|
initial_icon = "gygax"
|
||||||
step_in = 3
|
step_in = 3
|
||||||
dir_in = 1 //Facing North.
|
dir_in = 1 //Facing North.
|
||||||
health = 300
|
health = 300
|
||||||
@@ -19,6 +20,7 @@
|
|||||||
desc = "A lightweight exosuit used by Nanotrasen Death Squads. A significantly upgraded Gygax security mech."
|
desc = "A lightweight exosuit used by Nanotrasen Death Squads. A significantly upgraded Gygax security mech."
|
||||||
name = "Dark Gygax"
|
name = "Dark Gygax"
|
||||||
icon_state = "darkgygax"
|
icon_state = "darkgygax"
|
||||||
|
initial_icon = "darkgygax"
|
||||||
health = 400
|
health = 400
|
||||||
deflect_chance = 25
|
deflect_chance = 25
|
||||||
damage_absorption = list("brute"=0.6,"fire"=0.8,"bullet"=0.6,"laser"=0.5,"energy"=0.65,"bomb"=0.8)
|
damage_absorption = list("brute"=0.6,"fire"=0.8,"bullet"=0.6,"laser"=0.5,"energy"=0.65,"bomb"=0.8)
|
||||||
|
|||||||
@@ -2,6 +2,7 @@
|
|||||||
desc = "Produced by \"Tyranny of Honk, INC\", this exosuit is designed as heavy clown-support. Used to spread the fun and joy of life. HONK!"
|
desc = "Produced by \"Tyranny of Honk, INC\", this exosuit is designed as heavy clown-support. Used to spread the fun and joy of life. HONK!"
|
||||||
name = "H.O.N.K"
|
name = "H.O.N.K"
|
||||||
icon_state = "honker"
|
icon_state = "honker"
|
||||||
|
initial_icon = "honker"
|
||||||
step_in = 2
|
step_in = 2
|
||||||
health = 140
|
health = 140
|
||||||
deflect_chance = 60
|
deflect_chance = 60
|
||||||
|
|||||||
@@ -2,6 +2,7 @@
|
|||||||
desc = "Heavy-duty, combat exosuit, developed after the Durand model. Rarely found among civilian populations."
|
desc = "Heavy-duty, combat exosuit, developed after the Durand model. Rarely found among civilian populations."
|
||||||
name = "Marauder"
|
name = "Marauder"
|
||||||
icon_state = "marauder"
|
icon_state = "marauder"
|
||||||
|
initial_icon = "marauder"
|
||||||
step_in = 5
|
step_in = 5
|
||||||
health = 500
|
health = 500
|
||||||
deflect_chance = 25
|
deflect_chance = 25
|
||||||
@@ -25,6 +26,7 @@
|
|||||||
desc = "Heavy-duty, command-type exosuit. This is a custom model, utilized only by high-ranking military personnel."
|
desc = "Heavy-duty, command-type exosuit. This is a custom model, utilized only by high-ranking military personnel."
|
||||||
name = "Seraph"
|
name = "Seraph"
|
||||||
icon_state = "seraph"
|
icon_state = "seraph"
|
||||||
|
initial_icon = "seraph"
|
||||||
operation_req_access = list(access_cent_creed)
|
operation_req_access = list(access_cent_creed)
|
||||||
step_in = 3
|
step_in = 3
|
||||||
health = 550
|
health = 550
|
||||||
@@ -37,6 +39,7 @@
|
|||||||
desc = "Heavy-duty, combat exosuit, developed off of the existing Marauder model."
|
desc = "Heavy-duty, combat exosuit, developed off of the existing Marauder model."
|
||||||
name = "Mauler"
|
name = "Mauler"
|
||||||
icon_state = "mauler"
|
icon_state = "mauler"
|
||||||
|
initial_icon = "mauler"
|
||||||
operation_req_access = list(access_syndicate)
|
operation_req_access = list(access_syndicate)
|
||||||
wreckage = /obj/effect/decal/mecha_wreckage/mauler
|
wreckage = /obj/effect/decal/mecha_wreckage/mauler
|
||||||
|
|
||||||
|
|||||||
@@ -2,6 +2,7 @@
|
|||||||
desc = "An exosuit which can only be described as 'WTF?'."
|
desc = "An exosuit which can only be described as 'WTF?'."
|
||||||
name = "Phazon"
|
name = "Phazon"
|
||||||
icon_state = "phazon"
|
icon_state = "phazon"
|
||||||
|
initial_icon = "phazon"
|
||||||
step_in = 1
|
step_in = 1
|
||||||
dir_in = 1 //Facing North.
|
dir_in = 1 //Facing North.
|
||||||
step_energy_drain = 3
|
step_energy_drain = 3
|
||||||
|
|||||||
@@ -18,6 +18,7 @@
|
|||||||
unacidable = 1 //and no deleting hoomans inside
|
unacidable = 1 //and no deleting hoomans inside
|
||||||
layer = MOB_LAYER //icon draw layer
|
layer = MOB_LAYER //icon draw layer
|
||||||
infra_luminosity = 15 //byond implementation is bugged.
|
infra_luminosity = 15 //byond implementation is bugged.
|
||||||
|
var/initial_icon = "" //Mech type for resetting icon.
|
||||||
var/can_move = 1
|
var/can_move = 1
|
||||||
var/mob/living/carbon/occupant = null
|
var/mob/living/carbon/occupant = null
|
||||||
var/step_in = 10 //make a step in step_in/10 sec.
|
var/step_in = 10 //make a step in step_in/10 sec.
|
||||||
@@ -678,6 +679,7 @@
|
|||||||
|
|
||||||
/obj/mecha/attackby(obj/item/weapon/W as obj, mob/user as mob)
|
/obj/mecha/attackby(obj/item/weapon/W as obj, mob/user as mob)
|
||||||
|
|
||||||
|
|
||||||
if(istype(W, /obj/item/device/mmi))
|
if(istype(W, /obj/item/device/mmi))
|
||||||
if(mmi_move_inside(W,user))
|
if(mmi_move_inside(W,user))
|
||||||
user << "[src]-MMI interface initialized successfuly"
|
user << "[src]-MMI interface initialized successfuly"
|
||||||
@@ -1025,7 +1027,7 @@
|
|||||||
src.add_fingerprint(H)
|
src.add_fingerprint(H)
|
||||||
src.forceMove(src.loc)
|
src.forceMove(src.loc)
|
||||||
src.log_append_to_last("[H] moved in as pilot.")
|
src.log_append_to_last("[H] moved in as pilot.")
|
||||||
src.icon_state = initial(icon_state)
|
src.icon_state = src.reset_icon()
|
||||||
dir = dir_in
|
dir = dir_in
|
||||||
playsound(src, 'sound/machines/windowdoor.ogg', 50, 1)
|
playsound(src, 'sound/machines/windowdoor.ogg', 50, 1)
|
||||||
if(!hasInternalDamage())
|
if(!hasInternalDamage())
|
||||||
@@ -1086,7 +1088,7 @@
|
|||||||
src.verbs -= /obj/mecha/verb/eject
|
src.verbs -= /obj/mecha/verb/eject
|
||||||
src.Entered(mmi_as_oc)
|
src.Entered(mmi_as_oc)
|
||||||
src.Move(src.loc)
|
src.Move(src.loc)
|
||||||
src.icon_state = initial(icon_state)
|
src.icon_state = src.reset_icon()
|
||||||
dir = dir_in
|
dir = dir_in
|
||||||
src.log_message("[mmi_as_oc] moved in as pilot.")
|
src.log_message("[mmi_as_oc] moved in as pilot.")
|
||||||
if(!hasInternalDamage())
|
if(!hasInternalDamage())
|
||||||
@@ -1175,7 +1177,7 @@
|
|||||||
src.occupant.canmove = 0
|
src.occupant.canmove = 0
|
||||||
src.verbs += /obj/mecha/verb/eject
|
src.verbs += /obj/mecha/verb/eject
|
||||||
src.occupant = null
|
src.occupant = null
|
||||||
src.icon_state = initial(icon_state)+"-open"
|
src.icon_state = src.reset_icon()+"-open"
|
||||||
src.dir = dir_in
|
src.dir = dir_in
|
||||||
return
|
return
|
||||||
|
|
||||||
@@ -1662,6 +1664,9 @@
|
|||||||
return 1
|
return 1
|
||||||
return 0
|
return 0
|
||||||
|
|
||||||
|
/obj/mecha/proc/reset_icon()
|
||||||
|
icon_state = initial_icon
|
||||||
|
return icon_state
|
||||||
|
|
||||||
//////////////////////////////////////////
|
//////////////////////////////////////////
|
||||||
//////// Mecha global iterators ////////
|
//////// Mecha global iterators ////////
|
||||||
|
|||||||
@@ -2,6 +2,7 @@
|
|||||||
desc = "These exosuits are developed and produced by Vey-Med. (© All rights reserved)."
|
desc = "These exosuits are developed and produced by Vey-Med. (© All rights reserved)."
|
||||||
name = "Odysseus"
|
name = "Odysseus"
|
||||||
icon_state = "odysseus"
|
icon_state = "odysseus"
|
||||||
|
initial_icon = "odysseus"
|
||||||
step_in = 2
|
step_in = 2
|
||||||
max_temperature = 1500
|
max_temperature = 1500
|
||||||
health = 120
|
health = 120
|
||||||
|
|||||||
@@ -2,6 +2,7 @@
|
|||||||
desc = "Autonomous Power Loader Unit. The workhorse of the exosuit world."
|
desc = "Autonomous Power Loader Unit. The workhorse of the exosuit world."
|
||||||
name = "APLU \"Ripley\""
|
name = "APLU \"Ripley\""
|
||||||
icon_state = "ripley"
|
icon_state = "ripley"
|
||||||
|
initial_icon = "ripley"
|
||||||
step_in = 6
|
step_in = 6
|
||||||
max_temperature = 1000
|
max_temperature = 1000
|
||||||
health = 200
|
health = 200
|
||||||
@@ -19,6 +20,7 @@
|
|||||||
desc = "Standart APLU chassis was refitted with additional thermal protection and cistern."
|
desc = "Standart APLU chassis was refitted with additional thermal protection and cistern."
|
||||||
name = "APLU \"Firefighter\""
|
name = "APLU \"Firefighter\""
|
||||||
icon_state = "firefighter"
|
icon_state = "firefighter"
|
||||||
|
initial_icon = "firefighter"
|
||||||
max_temperature = 2500
|
max_temperature = 2500
|
||||||
health = 250
|
health = 250
|
||||||
lights_power = 8
|
lights_power = 8
|
||||||
@@ -29,6 +31,7 @@
|
|||||||
desc = "OH SHIT IT'S THE DEATHSQUAD WE'RE ALL GONNA DIE"
|
desc = "OH SHIT IT'S THE DEATHSQUAD WE'RE ALL GONNA DIE"
|
||||||
name = "DEATH-RIPLEY"
|
name = "DEATH-RIPLEY"
|
||||||
icon_state = "deathripley"
|
icon_state = "deathripley"
|
||||||
|
initial_icon = "deathripley"
|
||||||
step_in = 2
|
step_in = 2
|
||||||
opacity=0
|
opacity=0
|
||||||
lights_power = 60
|
lights_power = 60
|
||||||
@@ -44,6 +47,7 @@
|
|||||||
/obj/mecha/working/ripley/mining
|
/obj/mecha/working/ripley/mining
|
||||||
desc = "An old, dusty mining ripley."
|
desc = "An old, dusty mining ripley."
|
||||||
name = "APLU \"Miner\""
|
name = "APLU \"Miner\""
|
||||||
|
initial_icon = "ripley"
|
||||||
|
|
||||||
/obj/mecha/working/ripley/mining/New()
|
/obj/mecha/working/ripley/mining/New()
|
||||||
..()
|
..()
|
||||||
@@ -110,4 +114,16 @@
|
|||||||
return
|
return
|
||||||
|
|
||||||
|
|
||||||
|
/obj/mecha/working/ripley/attackby(obj/item/weapon/W as obj, mob/user as mob)
|
||||||
|
|
||||||
|
if(istype(W, /obj/item/weapon/fluff/butcher_royce_1))
|
||||||
|
src.icon_state = "titan"
|
||||||
|
src.initial_icon = "titan"
|
||||||
|
src.name = "APLU \"Titan's Fist\""
|
||||||
|
src.desc = "This ordinary mining Ripley has been customized to look like a unit of the Titans Fist."
|
||||||
|
user << "You spend some quality time with the Ripley, customising it to look like a \"Titan's Fist\" APLU."
|
||||||
|
user.drop_item()
|
||||||
|
del(W)
|
||||||
|
return
|
||||||
|
else
|
||||||
|
..()
|
||||||
@@ -8,7 +8,7 @@
|
|||||||
..()
|
..()
|
||||||
|
|
||||||
human
|
human
|
||||||
gibtypes = list(/obj/effect/decal/cleanable/blood/gibs/up,/obj/effect/decal/cleanable/blood/gibs/down,/obj/effect/decal/cleanable/blood/gibs,/obj/effect/decal/cleanable/blood/gibs,/obj/effect/decal/cleanable/blood/gibs/body,/obj/effect/decal/cleanable/blood/gibs/limb,/obj/effect/decal/cleanable/blood/gibs/core)
|
gibtypes = list(/obj/effect/decal/cleanable/blood/gibs,/obj/effect/decal/cleanable/blood/gibs/down,/obj/effect/decal/cleanable/blood/gibs,/obj/effect/decal/cleanable/blood/gibs,/obj/effect/decal/cleanable/blood/gibs,/obj/effect/decal/cleanable/blood/gibs,/obj/effect/decal/cleanable/blood/gibs/core)
|
||||||
gibamounts = list(1,1,1,1,1,1,1)
|
gibamounts = list(1,1,1,1,1,1,1)
|
||||||
|
|
||||||
New()
|
New()
|
||||||
|
|||||||
@@ -95,7 +95,8 @@
|
|||||||
"/obj/item/stack/medical",
|
"/obj/item/stack/medical",
|
||||||
"/obj/item/device/flashlight/pen",
|
"/obj/item/device/flashlight/pen",
|
||||||
"/obj/item/clothing/mask/surgical",
|
"/obj/item/clothing/mask/surgical",
|
||||||
"/obj/item/clothing/gloves/latex"
|
"/obj/item/clothing/gloves/latex",
|
||||||
|
"/obj/item/weapon/reagent_containers/hypospray/autoinjector"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -26,6 +26,7 @@
|
|||||||
var/be_alien = 0 //Check if that guy wants to be an alien
|
var/be_alien = 0 //Check if that guy wants to be an alien
|
||||||
var/be_pai = 1 //Consider client when searching for players to recruit as a pAI
|
var/be_pai = 1 //Consider client when searching for players to recruit as a pAI
|
||||||
var/be_syndicate = 1 //Consider client for late-game autotraitor
|
var/be_syndicate = 1 //Consider client for late-game autotraitor
|
||||||
|
var/be_spaceninja = 0
|
||||||
var/activeslot = 1 //Default active slot!
|
var/activeslot = 1 //Default active slot!
|
||||||
var/STFU_ghosts //80+ people rounds are fun to admin when text flies faster than airport security
|
var/STFU_ghosts //80+ people rounds are fun to admin when text flies faster than airport security
|
||||||
var/STFU_radio //80+ people rounds are fun to admin when text flies faster than airport security
|
var/STFU_radio //80+ people rounds are fun to admin when text flies faster than airport security
|
||||||
|
|||||||
@@ -1,3 +1,4 @@
|
|||||||
|
hi
|
||||||
// Add custom items you give to people here, and put their icons in custom_items.dmi
|
// Add custom items you give to people here, and put their icons in custom_items.dmi
|
||||||
// Remember to change 'icon = 'custom_items.dmi'' for items not using /obj/item/fluff as a base
|
// Remember to change 'icon = 'custom_items.dmi'' for items not using /obj/item/fluff as a base
|
||||||
// Clothing item_state doesn't use custom_items.dmi. Just add them to the normal clothing files.
|
// Clothing item_state doesn't use custom_items.dmi. Just add them to the normal clothing files.
|
||||||
@@ -66,10 +67,20 @@
|
|||||||
desc = "A neatly folded handkerchief embroidered with a 'M'."
|
desc = "A neatly folded handkerchief embroidered with a 'M'."
|
||||||
icon_state = "maurice_bedford_1"
|
icon_state = "maurice_bedford_1"
|
||||||
|
|
||||||
|
/obj/item/weapon/book/fluff/johnathan_falcian_1
|
||||||
|
name = "sketchbook"
|
||||||
|
desc = "A small, well-used sketchbook."
|
||||||
|
icon = 'custom_items.dmi'
|
||||||
|
icon_state = "johnathan_notebook"
|
||||||
|
dat = "In the notebook there are numerous drawings of various crew-mates, locations, and scenes on the ship. They are of fairly good quality."
|
||||||
|
author = "Johnathan Falcian"
|
||||||
|
title = "Falcian's sketchbook"
|
||||||
|
|
||||||
//////////////////////////////////
|
//////////////////////////////////
|
||||||
////////// Usable Items //////////
|
////////// Usable Items //////////
|
||||||
//////////////////////////////////
|
//////////////////////////////////
|
||||||
|
|
||||||
|
|
||||||
/obj/item/weapon/pen/fluff/multi //spaceman96: Trenna Seber
|
/obj/item/weapon/pen/fluff/multi //spaceman96: Trenna Seber
|
||||||
name = "multicolor pen"
|
name = "multicolor pen"
|
||||||
desc = "It's a cool looking pen. Lots of colors!"
|
desc = "It's a cool looking pen. Lots of colors!"
|
||||||
@@ -330,10 +341,17 @@
|
|||||||
/obj/item/weapon/crowbar/fluff/zelda_creedy_1 //daaneesh: Zelda Creedy
|
/obj/item/weapon/crowbar/fluff/zelda_creedy_1 //daaneesh: Zelda Creedy
|
||||||
name = "Zelda's Crowbar"
|
name = "Zelda's Crowbar"
|
||||||
desc = "A pink crow bar that has an engraving that reads, 'To Zelda. Love always, Dawn'"
|
desc = "A pink crow bar that has an engraving that reads, 'To Zelda. Love always, Dawn'"
|
||||||
icon = 'icons/obj/custom_items.dmi'
|
icon = 'custom_items.dmi'
|
||||||
icon_state = "zeldacrowbar"
|
icon_state = "zeldacrowbar"
|
||||||
item_state = "crowbar"
|
item_state = "crowbar"
|
||||||
|
|
||||||
|
////// Ripley customisation kit - Butchery Royce - MayeDay
|
||||||
|
|
||||||
|
/obj/item/weapon/fluff/butcher_royce_1
|
||||||
|
name = "Ripley customisation kit"
|
||||||
|
desc = "A kit containing all the needed tools and parts to turn an APLU Ripley into a Titan's Fist worker mech."
|
||||||
|
icon = 'custom_items.dmi'
|
||||||
|
icon_state = "royce_kit"
|
||||||
|
|
||||||
//////////////////////////////////
|
//////////////////////////////////
|
||||||
//////////// Clothing ////////////
|
//////////// Clothing ////////////
|
||||||
@@ -384,6 +402,19 @@
|
|||||||
icon = 'custom_items.dmi'
|
icon = 'custom_items.dmi'
|
||||||
icon_state = "ian_colm_1"
|
icon_state = "ian_colm_1"
|
||||||
|
|
||||||
|
////// Medical eyepatch - Thysse Ezinwa - Jadepython
|
||||||
|
/obj/item/clothing/glasses/eyepatch/fluff/thysse_1
|
||||||
|
name = "medical eyepatch"
|
||||||
|
desc = "On the strap, EZINWA is written in white block letters."
|
||||||
|
|
||||||
|
////// Safety Goggles - Arjun Chopra - MindPhyre - APPROVED
|
||||||
|
/obj/item/clothing/glasses/fluff/arjun_chopra_1
|
||||||
|
name = "safety goggles"
|
||||||
|
desc = "A used pair of leather safety goggles."
|
||||||
|
icon = 'custom_items.dmi'
|
||||||
|
icon_state = "arjun_chopra"
|
||||||
|
item_state = "arjun_chopra"
|
||||||
|
|
||||||
//////////// Hats ////////////
|
//////////// Hats ////////////
|
||||||
|
|
||||||
/obj/item/clothing/head/secsoft/fluff/swatcap //deusdactyl: James Girard
|
/obj/item/clothing/head/secsoft/fluff/swatcap //deusdactyl: James Girard
|
||||||
@@ -500,6 +531,50 @@
|
|||||||
item_state = "ara_bar_uniform"
|
item_state = "ara_bar_uniform"
|
||||||
color = "ara_bar_uniform"
|
color = "ara_bar_uniform"
|
||||||
|
|
||||||
|
/////// NT-SID Suit //Zuhayr: Jane Doe
|
||||||
|
|
||||||
|
/obj/item/clothing/under/fluff/jane_sidsuit
|
||||||
|
name = "NT-SID jumpsuit"
|
||||||
|
desc = "A NanoTrasen Synthetic Intelligence Division jumpsuit, issued to 'volunteers'. On other people it looks fine, but right here a scientist has noted: on you it looks stupid."
|
||||||
|
|
||||||
|
icon = 'icons/obj/custom_items.dmi'
|
||||||
|
icon_state = "jane_sid_suit"
|
||||||
|
item_state = "jane_sid_suit"
|
||||||
|
color = "jane_sid_suit"
|
||||||
|
has_sensor = 2
|
||||||
|
sensor_mode = 3
|
||||||
|
flags = FPRINT | TABLEPASS
|
||||||
|
|
||||||
|
//Suit roll-down toggle.
|
||||||
|
/obj/item/clothing/under/fluff/jane_sidsuit/verb/toggle_zipper()
|
||||||
|
set name = "Toggle Jumpsuit Zipper"
|
||||||
|
set category = "Object"
|
||||||
|
set src in usr
|
||||||
|
|
||||||
|
if(!usr.canmove || usr.stat || usr.restrained())
|
||||||
|
return 0
|
||||||
|
|
||||||
|
if(src.icon_state == "jane_sid_suit_down")
|
||||||
|
src.color = "jane_sid_suit"
|
||||||
|
usr << "You zip up the [src]."
|
||||||
|
else
|
||||||
|
src.color = "jane_sid_suit_down"
|
||||||
|
usr << "You unzip and roll down the [src]."
|
||||||
|
|
||||||
|
src.icon_state = "[color]"
|
||||||
|
src.item_state = "[color]"
|
||||||
|
usr.update_inv_w_uniform()
|
||||||
|
|
||||||
|
////// Wyatt's Ex-Commander Jumpsuit - RawrTaicho
|
||||||
|
/obj/item/clothing/under/fluff/wyatt_1
|
||||||
|
|
||||||
|
name = "ex-commander jumpsuit"
|
||||||
|
desc = "A standard Central Command Engineering Commander jumpsuit tailored to fight the wearer tightly. It has a Medal of Service pinned onto the left side of it."
|
||||||
|
icon = 'custom_items.dmi'
|
||||||
|
icon_state = "wyatt_uniform"
|
||||||
|
item_state = "wyatt_uniform"
|
||||||
|
color = "wyatt_uniform"
|
||||||
|
|
||||||
//////////// Masks ////////////
|
//////////// Masks ////////////
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@@ -522,6 +597,41 @@
|
|||||||
flags = FPRINT|TABLEPASS
|
flags = FPRINT|TABLEPASS
|
||||||
w_class = 1
|
w_class = 1
|
||||||
|
|
||||||
|
////// Small locket - Altair An-Nasaqan - Serithi
|
||||||
|
|
||||||
|
/obj/item/clothing/tie/fluff/altair_locket
|
||||||
|
name = "small locket"
|
||||||
|
desc = "A small golden locket attached to an Ii'rka-reed string. Inside the locket is a holo-picture of a female Tajaran, and an inscription writtin in Siik'mas."
|
||||||
|
icon = 'custom_items.dmi'
|
||||||
|
icon_state = "altair_locket"
|
||||||
|
item_state = "altair_locket"
|
||||||
|
color = "altair_locket"
|
||||||
|
slot_flags = 0
|
||||||
|
flags = FPRINT|TABLEPASS
|
||||||
|
w_class = 1
|
||||||
|
slot_flags = SLOT_MASK
|
||||||
|
|
||||||
|
////// Medallion - Nasir Khayyam - Jamini
|
||||||
|
|
||||||
|
/obj/item/clothing/tie/fluff/nasir_khayyam_1
|
||||||
|
name = "medallion"
|
||||||
|
desc = "This silvered medallion bears the symbol of the Hadii Clan of the Tajaran."
|
||||||
|
icon = 'custom_items.dmi'
|
||||||
|
icon_state = "nasir_khayyam_1"
|
||||||
|
flags = FPRINT|TABLEPASS
|
||||||
|
w_class = 1
|
||||||
|
slot_flags = SLOT_MASK
|
||||||
|
|
||||||
|
////// Emerald necklace - Ty Foster - Nega
|
||||||
|
|
||||||
|
/obj/item/clothing/mask/mara_kilpatrick_1
|
||||||
|
name = "emerald necklace"
|
||||||
|
desc = "A brass necklace with a green emerald placed at the end. It has a small inscription on the top of the chain, saying \'Foster\'"
|
||||||
|
icon = 'custom_items.dmi'
|
||||||
|
icon_state = "ty_foster"
|
||||||
|
flags = FPRINT|TABLEPASS
|
||||||
|
w_class = 1
|
||||||
|
|
||||||
//////////// Shoes ////////////
|
//////////// Shoes ////////////
|
||||||
|
|
||||||
/obj/item/clothing/shoes/magboots/fluff/susan_harris_1 //sniperyeti: Susan Harris
|
/obj/item/clothing/shoes/magboots/fluff/susan_harris_1 //sniperyeti: Susan Harris
|
||||||
@@ -529,22 +639,6 @@
|
|||||||
desc = "A colorful pair of magboots with the name Susan Harris clearly written on the back."
|
desc = "A colorful pair of magboots with the name Susan Harris clearly written on the back."
|
||||||
icon = 'custom_items.dmi'
|
icon = 'custom_items.dmi'
|
||||||
icon_state = "atmosmagboots0"
|
icon_state = "atmosmagboots0"
|
||||||
toggle()
|
|
||||||
set name = "Toggle Magboots"
|
|
||||||
set category = "Object"
|
|
||||||
set src in usr
|
|
||||||
if(src.magpulse)
|
|
||||||
src.flags &= ~NOSLIP
|
|
||||||
src.slowdown = SHOES_SLOWDOWN
|
|
||||||
src.magpulse = 0
|
|
||||||
icon_state = "atmosmagboots0"
|
|
||||||
usr << "You disable the mag-pulse traction system."
|
|
||||||
else
|
|
||||||
src.flags |= NOSLIP
|
|
||||||
src.slowdown = 2
|
|
||||||
src.magpulse = 1
|
|
||||||
icon_state = "atmosmagboots1"
|
|
||||||
usr << "You enable the mag-pulse traction system."
|
|
||||||
|
|
||||||
//////////// Sets ////////////
|
//////////// Sets ////////////
|
||||||
|
|
||||||
@@ -593,3 +687,13 @@
|
|||||||
icon_state = "retpoluniform"
|
icon_state = "retpoluniform"
|
||||||
color = "retpoluniform"
|
color = "retpoluniform"
|
||||||
|
|
||||||
|
//////////// Weapons ////////////
|
||||||
|
|
||||||
|
///// Colt Peacemaker - Ana Ka'Rimah - SueTheCake
|
||||||
|
|
||||||
|
/obj/item/weapon/gun/energy/stunrevolver/fluff/ana_peacemaker
|
||||||
|
|
||||||
|
name = "Peacemaker"
|
||||||
|
desc = "A nickel-plated revolver with pearl grips. It has a certain Old West flair!"
|
||||||
|
icon = 'custom_items.dmi'
|
||||||
|
icon_state = "peacemaker"
|
||||||
|
|||||||
@@ -257,6 +257,17 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp
|
|||||||
client.be_pai = 1
|
client.be_pai = 1
|
||||||
src << "You will now be considered a viable candidate when a pAI device requests a new personality, effective until the end of this round."
|
src << "You will now be considered a viable candidate when a pAI device requests a new personality, effective until the end of this round."
|
||||||
|
|
||||||
|
/mob/dead/observer/verb/toggle_spaceninja_candidate()
|
||||||
|
set name = "Toggle Be Space Ninja Candidate"
|
||||||
|
set category = "Ghost"
|
||||||
|
set desc = "Determines whether you will be a candidate for when a new space ninja spawns. (toggle)"
|
||||||
|
if(client.be_spaceninja)
|
||||||
|
client.be_spaceninja = 0
|
||||||
|
src << "You are now excluded from space ninja candidate lists until end of round."
|
||||||
|
else
|
||||||
|
client.be_spaceninja = 1
|
||||||
|
src << "You are now included in space ninja candidate lists until end of round."
|
||||||
|
|
||||||
/mob/dead/observer/memory()
|
/mob/dead/observer/memory()
|
||||||
set hidden = 1
|
set hidden = 1
|
||||||
src << "\red You are dead! You have no mind to store memory!"
|
src << "\red You are dead! You have no mind to store memory!"
|
||||||
|
|||||||
@@ -21,7 +21,7 @@
|
|||||||
var/move_delay_add = 0 // movement delay to add
|
var/move_delay_add = 0 // movement delay to add
|
||||||
|
|
||||||
status_flags = CANPARALYSE
|
status_flags = CANPARALYSE
|
||||||
var/heal_rate = 5
|
var/heal_rate = 1
|
||||||
var/plasma_rate = 5
|
var/plasma_rate = 5
|
||||||
|
|
||||||
var/oxygen_alert = 0
|
var/oxygen_alert = 0
|
||||||
|
|||||||
@@ -106,7 +106,7 @@ I kind of like the right click only--the window version can get a little confusi
|
|||||||
|
|
||||||
/mob/living/carbon/alien/humanoid/proc/neurotoxin(mob/target as mob in oview())
|
/mob/living/carbon/alien/humanoid/proc/neurotoxin(mob/target as mob in oview())
|
||||||
set name = "Spit Neurotoxin (50)"
|
set name = "Spit Neurotoxin (50)"
|
||||||
set desc = "Spits neurotoxin at someone, paralyzing them for a short time."
|
set desc = "Spits neurotoxin at someone, paralyzing them for a short time if they are not wearing protective gear."
|
||||||
set category = "Alien"
|
set category = "Alien"
|
||||||
|
|
||||||
if(powerc(50))
|
if(powerc(50))
|
||||||
@@ -129,12 +129,12 @@ I kind of like the right click only--the window version can get a little confusi
|
|||||||
if(!istype(T, /turf))
|
if(!istype(T, /turf))
|
||||||
return
|
return
|
||||||
if (U == T)
|
if (U == T)
|
||||||
usr.bullet_act(src, get_organ_target())
|
usr.bullet_act(new /obj/item/projectile/neurotoxin(usr.loc), get_organ_target())
|
||||||
return
|
return
|
||||||
if(!istype(U, /turf))
|
if(!istype(U, /turf))
|
||||||
return
|
return
|
||||||
|
|
||||||
var/obj/item/projectile/energy/dart/A = new /obj/item/projectile/energy/dart(usr.loc)
|
var/obj/item/projectile/neurotoxin/A = new /obj/item/projectile/neurotoxin(usr.loc)
|
||||||
|
|
||||||
A.current = U
|
A.current = U
|
||||||
A.yo = U.y - T.y
|
A.yo = U.y - T.y
|
||||||
|
|||||||
@@ -89,6 +89,7 @@ var/const/MAX_ACTIVE_TIME = 400
|
|||||||
return
|
return
|
||||||
|
|
||||||
/obj/item/clothing/mask/facehugger/throw_impact(atom/hit_atom)
|
/obj/item/clothing/mask/facehugger/throw_impact(atom/hit_atom)
|
||||||
|
if(prob(25))
|
||||||
Attach(hit_atom)
|
Attach(hit_atom)
|
||||||
return
|
return
|
||||||
|
|
||||||
@@ -129,6 +130,7 @@ var/const/MAX_ACTIVE_TIME = 400
|
|||||||
for(var/mob/O in viewers(target, null))
|
for(var/mob/O in viewers(target, null))
|
||||||
O.show_message("\red \b [src] tears [W] off of [target]'s face!", 1)
|
O.show_message("\red \b [src] tears [W] off of [target]'s face!", 1)
|
||||||
|
|
||||||
|
if(prob(75))
|
||||||
loc = target
|
loc = target
|
||||||
layer = 20
|
layer = 20
|
||||||
target.wear_mask = src
|
target.wear_mask = src
|
||||||
@@ -140,6 +142,9 @@ var/const/MAX_ACTIVE_TIME = 400
|
|||||||
|
|
||||||
spawn(rand(MIN_IMPREGNATION_TIME,MAX_IMPREGNATION_TIME))
|
spawn(rand(MIN_IMPREGNATION_TIME,MAX_IMPREGNATION_TIME))
|
||||||
Impregnate(target)
|
Impregnate(target)
|
||||||
|
else
|
||||||
|
for(var/mob/O in viewers(target, null))
|
||||||
|
O.show_message("\red \b [src] misses [target]'s face!", 1)
|
||||||
|
|
||||||
return
|
return
|
||||||
|
|
||||||
|
|||||||
@@ -192,7 +192,7 @@
|
|||||||
swap_hand()
|
swap_hand()
|
||||||
|
|
||||||
/mob/living/carbon/proc/help_shake_act(mob/living/carbon/M)
|
/mob/living/carbon/proc/help_shake_act(mob/living/carbon/M)
|
||||||
if (src.health > 0)
|
if (src.health > config.health_threshold_crit)
|
||||||
if(src == M && istype(src, /mob/living/carbon/human))
|
if(src == M && istype(src, /mob/living/carbon/human))
|
||||||
var/mob/living/carbon/human/H = src
|
var/mob/living/carbon/human/H = src
|
||||||
src.visible_message( \
|
src.visible_message( \
|
||||||
|
|||||||
@@ -11,6 +11,14 @@
|
|||||||
animation.icon = 'icons/mob/mob.dmi'
|
animation.icon = 'icons/mob/mob.dmi'
|
||||||
animation.master = src
|
animation.master = src
|
||||||
|
|
||||||
|
for(var/datum/organ/external/E in src.organs)
|
||||||
|
if(istype(E, /datum/organ/external/chest))
|
||||||
|
continue
|
||||||
|
// Only make the limb drop if it's not too damaged
|
||||||
|
if(prob(100 - E.get_damage()))
|
||||||
|
// Override the current limb status and don't cause an explosion
|
||||||
|
E.droplimb(1,1)
|
||||||
|
|
||||||
flick("gibbed-h", animation)
|
flick("gibbed-h", animation)
|
||||||
hgibs(loc, viruses, dna)
|
hgibs(loc, viruses, dna)
|
||||||
|
|
||||||
|
|||||||
@@ -42,19 +42,20 @@
|
|||||||
apply_damage(damage, BRUTE, affecting, armor_block)
|
apply_damage(damage, BRUTE, affecting, armor_block)
|
||||||
if (damage >= 25)
|
if (damage >= 25)
|
||||||
visible_message("\red <B>[M] has wounded [src]!</B>")
|
visible_message("\red <B>[M] has wounded [src]!</B>")
|
||||||
apply_effect(4, WEAKEN, armor_block)
|
apply_effect(rand(0.5,3), WEAKEN, armor_block)
|
||||||
updatehealth()
|
updatehealth()
|
||||||
|
|
||||||
if("disarm")
|
if("disarm")
|
||||||
var/randn = rand(1, 100)
|
if (prob(80))
|
||||||
if (randn <= 90)
|
|
||||||
playsound(loc, 'sound/weapons/pierce.ogg', 25, 1, -1)
|
playsound(loc, 'sound/weapons/pierce.ogg', 25, 1, -1)
|
||||||
Weaken(rand(10,15))
|
Weaken(rand(0.5,3))
|
||||||
for(var/mob/O in viewers(src, null))
|
for(var/mob/O in viewers(src, null))
|
||||||
if ((O.client && !( O.blinded )))
|
if ((O.client && !( O.blinded )))
|
||||||
O.show_message(text("\red <B>[] has tackled down []!</B>", M, src), 1)
|
O.show_message(text("\red <B>[] has tackled down []!</B>", M, src), 1)
|
||||||
|
if (prob(25))
|
||||||
|
M.Weaken(rand(2,4))
|
||||||
else
|
else
|
||||||
if (randn <= 99)
|
if (prob(80))
|
||||||
playsound(loc, 'sound/weapons/slash.ogg', 25, 1, -1)
|
playsound(loc, 'sound/weapons/slash.ogg', 25, 1, -1)
|
||||||
drop_item()
|
drop_item()
|
||||||
for(var/mob/O in viewers(src, null))
|
for(var/mob/O in viewers(src, null))
|
||||||
|
|||||||
@@ -304,7 +304,7 @@
|
|||||||
/obj/effect/equip_e/human/process()
|
/obj/effect/equip_e/human/process()
|
||||||
if (item)
|
if (item)
|
||||||
item.add_fingerprint(source)
|
item.add_fingerprint(source)
|
||||||
if (!item)
|
else
|
||||||
switch(place)
|
switch(place)
|
||||||
if("mask")
|
if("mask")
|
||||||
if (!( target.wear_mask ))
|
if (!( target.wear_mask ))
|
||||||
@@ -541,7 +541,7 @@ It can still be worn/put on as normal.
|
|||||||
if (target.legcuffed)
|
if (target.legcuffed)
|
||||||
strip_item = target.legcuffed
|
strip_item = target.legcuffed
|
||||||
if("CPR")
|
if("CPR")
|
||||||
if ((target.health >= -99.0 && target.health <= 0))
|
if ((target.health > config.health_threshold_dead && target.health < config.health_threshold_crit))
|
||||||
var/suff = min(target.getOxyLoss(), 7)
|
var/suff = min(target.getOxyLoss(), 7)
|
||||||
target.adjustOxyLoss(-suff)
|
target.adjustOxyLoss(-suff)
|
||||||
target.updatehealth()
|
target.updatehealth()
|
||||||
|
|||||||
@@ -12,6 +12,7 @@ var/global/list/special_roles = list( //keep synced with the defines BE_* in set
|
|||||||
"pAI candidate" = 1, // -- TLE // 7
|
"pAI candidate" = 1, // -- TLE // 7
|
||||||
"cultist" = IS_MODE_COMPILED("cult"), // 8
|
"cultist" = IS_MODE_COMPILED("cult"), // 8
|
||||||
"infested monkey" = IS_MODE_COMPILED("monkey"), // 9
|
"infested monkey" = IS_MODE_COMPILED("monkey"), // 9
|
||||||
|
"space ninja" = "true", // 9
|
||||||
)
|
)
|
||||||
|
|
||||||
var/global/list/underwear_m = list("White", "Grey", "Green", "Blue", "Black", "Mankini", "Love-Hearts", "Black2", "Grey2", "Stripey", "Kinky", "None") //Curse whoever made male/female underwear diffrent colours
|
var/global/list/underwear_m = list("White", "Grey", "Green", "Blue", "Black", "Mankini", "Love-Hearts", "Black2", "Grey2", "Stripey", "Kinky", "None") //Curse whoever made male/female underwear diffrent colours
|
||||||
@@ -28,6 +29,7 @@ var/const/BE_ALIEN =(1<<6)
|
|||||||
var/const/BE_PAI =(1<<7)
|
var/const/BE_PAI =(1<<7)
|
||||||
var/const/BE_CULTIST =(1<<8)
|
var/const/BE_CULTIST =(1<<8)
|
||||||
var/const/BE_MONKEY =(1<<9)
|
var/const/BE_MONKEY =(1<<9)
|
||||||
|
var/const/BE_SPACENINJA=(1<<10)
|
||||||
|
|
||||||
|
|
||||||
var/const/MAX_SAVE_SLOTS = 10
|
var/const/MAX_SAVE_SLOTS = 10
|
||||||
@@ -236,8 +238,8 @@ datum/preferences
|
|||||||
dat += "<a href=\"byond://?src=\ref[user];preference=slotname;task=input\">Rename slot</a> - "
|
dat += "<a href=\"byond://?src=\ref[user];preference=slotname;task=input\">Rename slot</a> - "
|
||||||
dat += "<a href=\"byond://?src=\ref[user];preference=reload\">Reload slot</a>"
|
dat += "<a href=\"byond://?src=\ref[user];preference=reload\">Reload slot</a>"
|
||||||
|
|
||||||
//column 1
|
//COLUMN 1
|
||||||
dat += "</center><hr><table><tr><td width='310px'>"
|
dat += "</center><hr><table><tr><td width='285px'>"
|
||||||
|
|
||||||
dat += "<b>Name:</b> "
|
dat += "<b>Name:</b> "
|
||||||
dat += "<a href=\"byond://?src=\ref[user];preference=name;task=input\"><b>[real_name]</b></a> "
|
dat += "<a href=\"byond://?src=\ref[user];preference=name;task=input\"><b>[real_name]</b></a> "
|
||||||
@@ -263,41 +265,68 @@ datum/preferences
|
|||||||
dat += "[(sound_adminhelp)?"On":"Off"] <a href='byond://?src=\ref[user];preference=hear_adminhelps'>toggle</a><br>"
|
dat += "[(sound_adminhelp)?"On":"Off"] <a href='byond://?src=\ref[user];preference=hear_adminhelps'>toggle</a><br>"
|
||||||
|
|
||||||
if(user.client.holder.level >= 5)
|
if(user.client.holder.level >= 5)
|
||||||
dat += "<br><b>OOC</b><br>"
|
dat += "<br><a href='byond://?src=\ref[user];preference=ooccolor;task=input'><b>OOC color</b></a> <font face=\"fixedsys\" size=\"3\" color=\"[ooccolor]\"><table style='display:inline;' bgcolor=\"[ooccolor]\"><tr><td>__</td></tr></table></font><br>"
|
||||||
dat += "<a href='byond://?src=\ref[user];preference=ooccolor;task=input'>Change color</a> <font face=\"fixedsys\" size=\"3\" color=\"[ooccolor]\"><table style='display:inline;' bgcolor=\"[ooccolor]\"><tr><td>__</td></tr></table></font><br>"
|
|
||||||
|
|
||||||
dat += "<br><b>Occupation Choices</b><br>"
|
dat += "\t<a href=\"byond://?src=\ref[user];preference=job;task=menu\"><b>Occupation Preferences</b></a><br>"
|
||||||
dat += "\t<a href=\"byond://?src=\ref[user];preference=job;task=menu\"><b>Set Preferences</b></a><br><br>"
|
|
||||||
|
|
||||||
if(jobban_isbanned(user, "Records"))
|
if(jobban_isbanned(user, "Records"))
|
||||||
dat += "<b>You are banned from using character records.</b><br>"
|
dat += "<b>You are banned from using character records.</b><br>"
|
||||||
else
|
else
|
||||||
dat += "<b><a href=\"byond://?src=\ref[user];preference=records;record=1\">Character Records</a></b><br><br>"
|
dat += "<b><a href=\"byond://?src=\ref[user];preference=records;record=1\">Character Records</a></b><br>"
|
||||||
|
|
||||||
dat += "<b>Flavor Text</b><br>"
|
dat += "\t<a href=\"byond://?src=\ref[user];preference=skills\"><b>Set Skills</b> (<i>[GetSkillClass(used_skillpoints)][used_skillpoints > 0 ? " [used_skillpoints]" : "0"])</i></a><br>"
|
||||||
dat += "<a href='byond://?src=\ref[user];preference=flavor_text;task=input'>Change</a><br>"
|
|
||||||
|
dat += "<a href='byond://?src=\ref[user];preference=flavor_text;task=input'><b>Set Flavor Text</b></a><br>"
|
||||||
if(lentext(flavor_text) <= 40)
|
if(lentext(flavor_text) <= 40)
|
||||||
|
if(!lentext(flavor_text))
|
||||||
|
dat += "\[...\]"
|
||||||
|
else
|
||||||
dat += "[flavor_text]"
|
dat += "[flavor_text]"
|
||||||
else
|
else
|
||||||
dat += "[copytext(flavor_text, 1, 37)]...<br>"
|
dat += "[copytext(flavor_text, 1, 37)]...<br>"
|
||||||
dat += "<br>"
|
dat += "<br>"
|
||||||
|
|
||||||
dat += "<b>Skill Choices</b><br>"
|
//antag
|
||||||
dat += "\t<i>[GetSkillClass(used_skillpoints)]</i> ([used_skillpoints])<br>"
|
|
||||||
dat += "\t<a href=\"byond://?src=\ref[user];preference=skills\"><b>Set Skills</b></a><br><br>"
|
|
||||||
|
|
||||||
//column 2
|
|
||||||
dat += "</td><td width='310px'>" //height='300px'
|
|
||||||
|
|
||||||
dat += "<table><tr><td width=100><b>Body</b> "
|
|
||||||
dat += "(<a href=\"byond://?src=\ref[user];preference=all;task=random\">®</A>)"
|
|
||||||
dat += "<br>"
|
dat += "<br>"
|
||||||
|
if(jobban_isbanned(user, "Syndicate"))
|
||||||
|
dat += "<b>You are banned from antagonist roles.</b>"
|
||||||
|
src.be_special = 0
|
||||||
|
else
|
||||||
|
var/n = 0
|
||||||
|
for (var/i in special_roles)
|
||||||
|
if(special_roles[i]) //if mode is available on the server
|
||||||
|
if(jobban_isbanned(user, i))
|
||||||
|
dat += "<b>Be [i]:</b> <font color=red><b> \[BANNED]</b></font><br>"
|
||||||
|
else if(i == "pai candidate")
|
||||||
|
if(jobban_isbanned(user, "pAI"))
|
||||||
|
dat += "<b>Be [i]:</b> <font color=red><b> \[BANNED]</b></font><br>"
|
||||||
|
else
|
||||||
|
dat += "<b>Be [i]:</b> <a href=\"byond://?src=\ref[user];preference=be_special;num=[n]\"><b>[src.be_special&(1<<n) ? "Yes" : "No"]</b></a><br>"
|
||||||
|
n++
|
||||||
|
dat += "</td>"
|
||||||
|
|
||||||
|
//COLUMN 2
|
||||||
|
dat += "<td>"
|
||||||
|
dat += "<table><tr>"
|
||||||
|
|
||||||
|
dat += "<td width='142px'>"
|
||||||
|
dat += "<b>Body</b> (<a href=\"byond://?src=\ref[user];preference=all;task=random\">®</A>)<br>"
|
||||||
dat += "Species: <a href='byond://?src=\ref[user];preference=species;task=input'>[species]</a><br>"
|
dat += "Species: <a href='byond://?src=\ref[user];preference=species;task=input'>[species]</a><br>"
|
||||||
dat += "Blood Type: <a href='byond://?src=\ref[user];preference=b_type;task=input'>[b_type]</a><br>"
|
dat += "Blood Type: <a href='byond://?src=\ref[user];preference=b_type;task=input'>[b_type]</a><br>"
|
||||||
dat += "Skin Tone: <a href='byond://?src=\ref[user];preference=s_tone;task=input'>[-s_tone + 35]/220<br></a>"
|
dat += "Skin Tone: <a href='byond://?src=\ref[user];preference=s_tone;task=input'>[-s_tone + 35]/220</a><br>"
|
||||||
|
dat += "<a href='byond://?src=\ref[user];preference=skin_style;task=input'>Adjust Skin</a><br>"
|
||||||
|
dat += "<a href='byond://?src=\ref[user];preference=limbs;task=input'>Adjust Limbs</a><br>"
|
||||||
|
dat += "</td>"
|
||||||
|
|
||||||
dat += "Limbs: <a href='byond://?src=\ref[user];preference=limbs;task=input'>Adjust Limbs</a><br>"
|
dat += "<td><b>Preview</b></br>"
|
||||||
|
dat += "<img src=previewicon.png height=64 width=64><img src=previewicon2.png height=64 width=64></br></td>"
|
||||||
|
|
||||||
|
dat += "</tr></table>"
|
||||||
|
|
||||||
|
//display limbs below
|
||||||
|
var/ind = 0
|
||||||
for(var/name in organ_data)
|
for(var/name in organ_data)
|
||||||
|
//world << "[ind] \ [organ_data.len]"
|
||||||
var/status = organ_data[name]
|
var/status = organ_data[name]
|
||||||
var/organ_name = null
|
var/organ_name = null
|
||||||
switch(name)
|
switch(name)
|
||||||
@@ -319,11 +348,18 @@ datum/preferences
|
|||||||
organ_name = "right hand"
|
organ_name = "right hand"
|
||||||
|
|
||||||
if(status == "cyborg")
|
if(status == "cyborg")
|
||||||
dat += "\tRobotical [organ_name] prothesis<br>"
|
++ind
|
||||||
if(status == "amputated")
|
if(ind > 1)
|
||||||
dat += "\tAmputated [organ_name]<br>"
|
dat += ", "
|
||||||
dat+="<br>"
|
dat += "\tMechanical [organ_name] prothesis"
|
||||||
|
else if(status == "amputated")
|
||||||
|
++ind
|
||||||
|
if(ind > 1)
|
||||||
|
dat += ", "
|
||||||
|
dat += "\tAmputated [organ_name]"
|
||||||
|
if(ind)
|
||||||
|
dat += "\[...\]"
|
||||||
|
dat += "<br><br>"
|
||||||
|
|
||||||
if(gender == MALE)
|
if(gender == MALE)
|
||||||
dat += "Underwear: <a href =\"byond://?src=\ref[user];preference=underwear;task=input\"><b>[underwear_m[underwear]]</b></a><br>"
|
dat += "Underwear: <a href =\"byond://?src=\ref[user];preference=underwear;task=input\"><b>[underwear_m[underwear]]</b></a><br>"
|
||||||
@@ -332,8 +368,6 @@ datum/preferences
|
|||||||
|
|
||||||
dat += "Backpack Type:<br><a href =\"byond://?src=\ref[user];preference=bag;task=input\"><b>[backbaglist[backbag]]</b></a><br>"
|
dat += "Backpack Type:<br><a href =\"byond://?src=\ref[user];preference=bag;task=input\"><b>[backbaglist[backbag]]</b></a><br>"
|
||||||
|
|
||||||
dat += "</td><td><b>Preview</b><br><img src=previewicon.png height=64 width=64><img src=previewicon2.png height=64 width=64></td></tr></table>"
|
|
||||||
|
|
||||||
dat += "<br><b>Hair</b><br>"
|
dat += "<br><b>Hair</b><br>"
|
||||||
dat += "<a href='byond://?src=\ref[user];preference=hair;task=input'>Change Color</a> <font face=\"fixedsys\" size=\"3\" color=\"#[num2hex(r_hair, 2)][num2hex(g_hair, 2)][num2hex(b_hair, 2)]\"><table style='display:inline;' bgcolor=\"#[num2hex(r_hair, 2)][num2hex(g_hair, 2)][num2hex(b_hair)]\"><tr><td>__</td></tr></table></font><br>"
|
dat += "<a href='byond://?src=\ref[user];preference=hair;task=input'>Change Color</a> <font face=\"fixedsys\" size=\"3\" color=\"#[num2hex(r_hair, 2)][num2hex(g_hair, 2)][num2hex(b_hair, 2)]\"><table style='display:inline;' bgcolor=\"#[num2hex(r_hair, 2)][num2hex(g_hair, 2)][num2hex(b_hair)]\"><tr><td>__</td></tr></table></font><br>"
|
||||||
dat += "Style: <a href='byond://?src=\ref[user];preference=h_style;task=input'>[h_style]</a><br>"
|
dat += "Style: <a href='byond://?src=\ref[user];preference=h_style;task=input'>[h_style]</a><br>"
|
||||||
@@ -345,22 +379,7 @@ datum/preferences
|
|||||||
dat += "<br><b>Eyes</b><br>"
|
dat += "<br><b>Eyes</b><br>"
|
||||||
dat += "<a href='byond://?src=\ref[user];preference=eyes;task=input'>Change Color</a> <font face=\"fixedsys\" size=\"3\" color=\"#[num2hex(r_eyes, 2)][num2hex(g_eyes, 2)][num2hex(b_eyes, 2)]\"><table style='display:inline;' bgcolor=\"#[num2hex(r_eyes, 2)][num2hex(g_eyes, 2)][num2hex(b_eyes)]\"><tr><td>__</td></tr></table></font>"
|
dat += "<a href='byond://?src=\ref[user];preference=eyes;task=input'>Change Color</a> <font face=\"fixedsys\" size=\"3\" color=\"#[num2hex(r_eyes, 2)][num2hex(g_eyes, 2)][num2hex(b_eyes, 2)]\"><table style='display:inline;' bgcolor=\"#[num2hex(r_eyes, 2)][num2hex(g_eyes, 2)][num2hex(b_eyes)]\"><tr><td>__</td></tr></table></font>"
|
||||||
|
|
||||||
dat += "<br><br>"
|
dat += "<br>"
|
||||||
if(jobban_isbanned(user, "Syndicate"))
|
|
||||||
dat += "<b>You are banned from antagonist roles.</b>"
|
|
||||||
src.be_special = 0
|
|
||||||
else
|
|
||||||
var/n = 0
|
|
||||||
for (var/i in special_roles)
|
|
||||||
if(special_roles[i]) //if mode is available on the server
|
|
||||||
if(jobban_isbanned(user, i))
|
|
||||||
dat += "<b>Be [i]:</b> <font color=red><b> \[BANNED]</b></font><br>"
|
|
||||||
else if(i == "pai candidate")
|
|
||||||
if(jobban_isbanned(user, "pAI"))
|
|
||||||
dat += "<b>Be [i]:</b> <font color=red><b> \[BANNED]</b></font><br>"
|
|
||||||
else
|
|
||||||
dat += "<b>Be [i]:</b> <a href=\"byond://?src=\ref[user];preference=be_special;num=[n]\"><b>[src.be_special&(1<<n) ? "Yes" : "No"]</b></a><br>"
|
|
||||||
n++
|
|
||||||
dat += "</td></tr></table><center>"
|
dat += "</td></tr></table><center>"
|
||||||
|
|
||||||
dat += "<hr>"
|
dat += "<hr>"
|
||||||
@@ -1021,6 +1040,10 @@ datum/preferences
|
|||||||
if(second_limb)
|
if(second_limb)
|
||||||
organ_data[second_limb] = "cyborg"
|
organ_data[second_limb] = "cyborg"
|
||||||
|
|
||||||
|
if("skin_style")
|
||||||
|
var/skin_style_name = input(user, "Select a new skin style") as null|anything in list("default1", "default2", "default3")
|
||||||
|
if(!skin_style_name) return
|
||||||
|
|
||||||
|
|
||||||
else
|
else
|
||||||
switch(href_list["preference"])
|
switch(href_list["preference"])
|
||||||
@@ -1231,6 +1254,7 @@ datum/preferences
|
|||||||
C.be_alien = be_special & BE_ALIEN
|
C.be_alien = be_special & BE_ALIEN
|
||||||
C.be_pai = be_special & BE_PAI
|
C.be_pai = be_special & BE_PAI
|
||||||
C.be_syndicate = be_special & BE_TRAITOR
|
C.be_syndicate = be_special & BE_TRAITOR
|
||||||
|
C.be_spaceninja = be_special & BE_SPACENINJA
|
||||||
if(isnull(src.ghost_ears)) src.ghost_ears = 1 //There were problems where the default was null before someone saved their profile.
|
if(isnull(src.ghost_ears)) src.ghost_ears = 1 //There were problems where the default was null before someone saved their profile.
|
||||||
C.ghost_ears = src.ghost_ears
|
C.ghost_ears = src.ghost_ears
|
||||||
C.ghost_sight = src.ghost_sight
|
C.ghost_sight = src.ghost_sight
|
||||||
|
|||||||
@@ -331,3 +331,29 @@
|
|||||||
name = "Tajaran Ears"
|
name = "Tajaran Ears"
|
||||||
icon_state = "tajears"
|
icon_state = "tajears"
|
||||||
species_allowed = list("Tajaran")
|
species_allowed = list("Tajaran")
|
||||||
|
|
||||||
|
//skin styles - WIP
|
||||||
|
|
||||||
|
/datum/sprite_accessory/skin
|
||||||
|
human
|
||||||
|
name = "Default human skin"
|
||||||
|
icon = "human"
|
||||||
|
|
||||||
|
human_tatt01
|
||||||
|
name = "Tatt01 human skin"
|
||||||
|
icon = "human_tattoo1"
|
||||||
|
|
||||||
|
tajaran
|
||||||
|
name = "Default tajaran skin"
|
||||||
|
icon = "tajaran"
|
||||||
|
species_allowed = list("Tajaran")
|
||||||
|
|
||||||
|
soghun
|
||||||
|
name = "Default soghun skin"
|
||||||
|
icon = "soghun"
|
||||||
|
species_allowed = list("Soghun")
|
||||||
|
|
||||||
|
skrell
|
||||||
|
name = "Default skrell skin"
|
||||||
|
icon = "skrell"
|
||||||
|
species_allowed = list("Skrell")
|
||||||
|
|||||||
@@ -518,6 +518,7 @@
|
|||||||
if ((!( L.stat ) && L.canmove && !( L.restrained() )))
|
if ((!( L.stat ) && L.canmove && !( L.restrained() )))
|
||||||
var/resisting = 0
|
var/resisting = 0
|
||||||
for(var/obj/O in L.requests)
|
for(var/obj/O in L.requests)
|
||||||
|
L.requests.Remove(O)
|
||||||
del(O)
|
del(O)
|
||||||
resisting++
|
resisting++
|
||||||
for(var/obj/item/weapon/grab/G in usr.grabbed_by)
|
for(var/obj/item/weapon/grab/G in usr.grabbed_by)
|
||||||
|
|||||||
@@ -29,7 +29,7 @@
|
|||||||
dna = null
|
dna = null
|
||||||
O.dna.uni_identity = "00600200A00E0110148FC01300B009"
|
O.dna.uni_identity = "00600200A00E0110148FC01300B009"
|
||||||
//O.dna.struc_enzymes = "0983E840344C39F4B059D5145FC5785DC6406A4BB8"
|
//O.dna.struc_enzymes = "0983E840344C39F4B059D5145FC5785DC6406A4BB8"
|
||||||
O.dna.struc_enzymes = "[copytext(O.dna.struc_enzymes,1,1+3*13)]BB8"
|
O.dna.struc_enzymes = "[copytext(O.dna.struc_enzymes,1,1+3*(STRUCDNASIZE-1))]BB8"
|
||||||
O.loc = loc
|
O.loc = loc
|
||||||
O.viruses = viruses
|
O.viruses = viruses
|
||||||
viruses = list()
|
viruses = list()
|
||||||
|
|||||||
@@ -213,12 +213,22 @@ display round(lastgen) and plasmatank amount
|
|||||||
user << "\blue You open the access panel."
|
user << "\blue You open the access panel."
|
||||||
else
|
else
|
||||||
user << "\blue You close the access panel."
|
user << "\blue You close the access panel."
|
||||||
else if(istype(O, /obj/item/weapon/crowbar) && !open)
|
else if(istype(O, /obj/item/weapon/crowbar) && open)
|
||||||
var/obj/machinery/constructable_frame/machine_frame/new_frame = new /obj/machinery/constructable_frame/machine_frame(src.loc)
|
var/obj/machinery/constructable_frame/machine_frame/new_frame = new /obj/machinery/constructable_frame/machine_frame(src.loc)
|
||||||
for(var/obj/item/I in component_parts)
|
for(var/obj/item/I in component_parts)
|
||||||
if(I.reliability < 100)
|
if(I.reliability < 100)
|
||||||
I.crit_fail = 1
|
I.crit_fail = 1
|
||||||
I.loc = src.loc
|
I.loc = src.loc
|
||||||
|
while ( sheets > 0 )
|
||||||
|
var/obj/item/stack/sheet/G = new sheet_path(src.loc)
|
||||||
|
|
||||||
|
if ( sheets > 50 )
|
||||||
|
G.amount = 50
|
||||||
|
else
|
||||||
|
G.amount = sheets
|
||||||
|
|
||||||
|
sheets -= G.amount
|
||||||
|
|
||||||
new_frame.state = 2
|
new_frame.state = 2
|
||||||
new_frame.icon_state = "box_1"
|
new_frame.icon_state = "box_1"
|
||||||
del(src)
|
del(src)
|
||||||
|
|||||||
@@ -36,7 +36,7 @@
|
|||||||
var/damage = 10
|
var/damage = 10
|
||||||
var/damage_type = BRUTE //BRUTE, BURN, TOX, OXY, CLONE are the only things that should be in here
|
var/damage_type = BRUTE //BRUTE, BURN, TOX, OXY, CLONE are the only things that should be in here
|
||||||
var/nodamage = 0 //Determines if the projectile will skip any damage inflictions
|
var/nodamage = 0 //Determines if the projectile will skip any damage inflictions
|
||||||
var/flag = "bullet" //Defines what armor to use when it hits things. Must be set to bullet, laser, energy,or bomb
|
var/flag = "bullet" //Defines what armor to use when it hits things. Must be set to bullet, laser, energy,or bomb //Cael - bio and rad are also valid
|
||||||
var/projectile_type = "/obj/item/projectile"
|
var/projectile_type = "/obj/item/projectile"
|
||||||
var/kill_count = 50 //This will de-increment every process(). When 0, it will delete the projectile.
|
var/kill_count = 50 //This will de-increment every process(). When 0, it will delete the projectile.
|
||||||
//Effects
|
//Effects
|
||||||
|
|||||||
@@ -125,3 +125,11 @@
|
|||||||
M.show_message("\blue The radiation beam dissipates harmlessly through your body.")
|
M.show_message("\blue The radiation beam dissipates harmlessly through your body.")
|
||||||
else
|
else
|
||||||
return 1
|
return 1
|
||||||
|
|
||||||
|
/obj/item/projectile/neurotoxin
|
||||||
|
name = "neurotoxin"
|
||||||
|
icon_state = "toxin"
|
||||||
|
damage = 5
|
||||||
|
damage_type = TOX
|
||||||
|
weaken = 5
|
||||||
|
flag = "bio"
|
||||||
|
|||||||
@@ -6,8 +6,9 @@
|
|||||||
name = "hypospray"
|
name = "hypospray"
|
||||||
desc = "The DeForest Medical Corporation hypospray is a sterile, air-needle autoinjector for rapid administration of drugs to patients."
|
desc = "The DeForest Medical Corporation hypospray is a sterile, air-needle autoinjector for rapid administration of drugs to patients."
|
||||||
icon = 'icons/obj/syringe.dmi'
|
icon = 'icons/obj/syringe.dmi'
|
||||||
item_state = "hypo"
|
item_state = "hypo1"
|
||||||
icon_state = "hypo"
|
icon_state = "hypo"
|
||||||
|
var/original_icon_state = "hypo"
|
||||||
amount_per_transfer_from_this = 5
|
amount_per_transfer_from_this = 5
|
||||||
volume = 30
|
volume = 30
|
||||||
possible_transfer_amounts = null
|
possible_transfer_amounts = null
|
||||||
@@ -56,6 +57,7 @@
|
|||||||
name = "autoinjector"
|
name = "autoinjector"
|
||||||
desc = "A rapid and safe way to administer small amounts of drugs by untrained or trained personnel."
|
desc = "A rapid and safe way to administer small amounts of drugs by untrained or trained personnel."
|
||||||
icon_state = "autoinjector"
|
icon_state = "autoinjector"
|
||||||
|
original_icon_state = "autoinjector"
|
||||||
item_state = "autoinjector"
|
item_state = "autoinjector"
|
||||||
amount_per_transfer_from_this = 5
|
amount_per_transfer_from_this = 5
|
||||||
volume = 5
|
volume = 5
|
||||||
@@ -74,9 +76,9 @@
|
|||||||
|
|
||||||
/obj/item/weapon/reagent_containers/hypospray/autoinjector/update_icon()
|
/obj/item/weapon/reagent_containers/hypospray/autoinjector/update_icon()
|
||||||
if(reagents.total_volume > 0)
|
if(reagents.total_volume > 0)
|
||||||
icon_state = "[initial(icon_state)]1"
|
icon_state = "[original_icon_state]1"
|
||||||
else
|
else
|
||||||
icon_state = "[initial(icon_state)]0"
|
icon_state = "[original_icon_state]0"
|
||||||
|
|
||||||
/obj/item/weapon/reagent_containers/hypospray/autoinjector/examine()
|
/obj/item/weapon/reagent_containers/hypospray/autoinjector/examine()
|
||||||
..()
|
..()
|
||||||
|
|||||||
@@ -21,7 +21,10 @@ furohman: Fay Sullivan: /obj/item/weapon/lighter/zippo/fluff/fay_sullivan_1
|
|||||||
furlucis: Chal Appara: /obj/item/clothing/gloves/fluff/chal_appara_1
|
furlucis: Chal Appara: /obj/item/clothing/gloves/fluff/chal_appara_1
|
||||||
gvazdas: Sarah Carbrokes: /obj/item/fluff/sarah_carbrokes_1
|
gvazdas: Sarah Carbrokes: /obj/item/fluff/sarah_carbrokes_1
|
||||||
jamini: Edwin Atweeke: /obj/item/clothing/suit/labcoat/fluff/burnt
|
jamini: Edwin Atweeke: /obj/item/clothing/suit/labcoat/fluff/burnt
|
||||||
|
jamini: Nasir Khayyam: /obj/item/clothing/tie/fluff/nasir_khayyam_1
|
||||||
|
jadepython: Thysse Ezinwa: /obj/item/clothing/glasses/eyepatch/fluff/thysse_1
|
||||||
kirbyelder: John McKeever: /obj/item/paper/fluff/john_mckeever_1
|
kirbyelder: John McKeever: /obj/item/paper/fluff/john_mckeever_1
|
||||||
|
leon_the_killer: johnathan Falcian: /obj/item/weapon/clipboard/notebook/fluff/johnathan_falcian_1
|
||||||
leonheart11: Johann Erzatz: /obj/item/weapon/reagent_containers/food/drinks/flask/fluff/johann_erzatz_1
|
leonheart11: Johann Erzatz: /obj/item/weapon/reagent_containers/food/drinks/flask/fluff/johann_erzatz_1
|
||||||
lexusjjss: Lexus Langg: /obj/item/weapon/clipboard/fluff/smallnote, /obj/item/weapon/reagent_containers/food/drinks/flask/fluff/shinyflask
|
lexusjjss: Lexus Langg: /obj/item/weapon/clipboard/fluff/smallnote, /obj/item/weapon/reagent_containers/food/drinks/flask/fluff/shinyflask
|
||||||
lexusjjss: Zachary Tomlinson: /obj/item/weapon/clipboard/fluff/smallnote, /obj/item/weapon/reagent_containers/food/drinks/flask/fluff/shinyflask
|
lexusjjss: Zachary Tomlinson: /obj/item/weapon/clipboard/fluff/smallnote, /obj/item/weapon/reagent_containers/food/drinks/flask/fluff/shinyflask
|
||||||
@@ -29,10 +32,12 @@ madmalicemccrea: Alice McCrea: /obj/item/clothing/head/welding/fluff/alice_mccre
|
|||||||
mangled: Li Matsuda: /obj/item/weapon/lighter/zippo/fluff/li_matsuda_1
|
mangled: Li Matsuda: /obj/item/weapon/lighter/zippo/fluff/li_matsuda_1
|
||||||
maximumbob: Maurice Bedford: /obj/item/fluff/maurice_bedford_1
|
maximumbob: Maurice Bedford: /obj/item/fluff/maurice_bedford_1
|
||||||
mcgulliver: Wox Derax: /obj/item/weapon/reagent_containers/food/drinks/flask/fluff/lithiumflask
|
mcgulliver: Wox Derax: /obj/item/weapon/reagent_containers/food/drinks/flask/fluff/lithiumflask
|
||||||
|
mindphyre: Arjun Chopra: /obj/item/clothing/glasses/fluff/arjun_chopra_1
|
||||||
misterbook: Smoke Perkins: /obj/item/clothing/mask/cigarette/pipe
|
misterbook: Smoke Perkins: /obj/item/clothing/mask/cigarette/pipe
|
||||||
misterfox: Rashid Siraj: /obj/item/weapon/storage/bible/tajaran
|
misterfox: Rashid Siraj: /obj/item/weapon/storage/bible/tajaran
|
||||||
morrinn: Maye Day: /obj/item/weapon/storage/fluff/maye_daye_1
|
morrinn: Maye Day: /obj/item/weapon/storage/fluff/maye_daye_1
|
||||||
naples: Russell Vierson: /obj/item/weapon/lighter/zippo/fluff/naples_1
|
naples: Russell Vierson: /obj/item/weapon/lighter/zippo/fluff/naples_1
|
||||||
|
nega10: Ty Foster: /obj/item/clothing/mask/mara_kilpatrick_1
|
||||||
nerezza: Asher Spock: /obj/item/weapon/reagent_containers/hypospray/fluff/asher_spock_1
|
nerezza: Asher Spock: /obj/item/weapon/reagent_containers/hypospray/fluff/asher_spock_1
|
||||||
nerezza: Asher Spock: /obj/item/weapon/card/id/fluff/asher_spock_2
|
nerezza: Asher Spock: /obj/item/weapon/card/id/fluff/asher_spock_2
|
||||||
orangebottle: Lillian Levett: /obj/item/weapon/pen/fluff/fancypen
|
orangebottle: Lillian Levett: /obj/item/weapon/pen/fluff/fancypen
|
||||||
@@ -40,11 +45,13 @@ orangebottle: Lilliana Reade: /obj/item/weapon/pen/fluff/fancypen
|
|||||||
paththegreat: Eli Stevens: /obj/item/weapon/pen/fluff/fountainpen
|
paththegreat: Eli Stevens: /obj/item/weapon/pen/fluff/fountainpen
|
||||||
phaux: Tian Krieger: /obj/item/clothing/under/fluff/tian_dress
|
phaux: Tian Krieger: /obj/item/clothing/under/fluff/tian_dress
|
||||||
rawrtaicho: Riley Rohtin: /obj/item/weapon/lighter/zippo/fluff/riley_rohtin_1
|
rawrtaicho: Riley Rohtin: /obj/item/weapon/lighter/zippo/fluff/riley_rohtin_1
|
||||||
|
rawrtaicho: Wyatt Engstrom: /obj/item/clothing/under/fluff/wyatt_1
|
||||||
roaper: Ian Colm: /obj/item/weapon/card/id/fluff/ian_colm_1
|
roaper: Ian Colm: /obj/item/weapon/card/id/fluff/ian_colm_1
|
||||||
roaper: Ian Colm: /obj/item/clothing/glasses/welding/fluff/ian_colm_2
|
roaper: Ian Colm: /obj/item/clothing/glasses/welding/fluff/ian_colm_2
|
||||||
rukral: Nashida Bisha'ra: /obj/item/weapon/reagent_containers/glass/beaker/large/fluff/nashida_bishara_1
|
rukral: Nashida Bisha'ra: /obj/item/weapon/reagent_containers/glass/beaker/large/fluff/nashida_bishara_1
|
||||||
searif: Yuki Matsuda: /obj/item/clothing/under/fluff/jumpsuitdown, /obj/item/clothing/head/welding/fluff/yuki_matsuda_1
|
searif: Yuki Matsuda: /obj/item/clothing/under/fluff/jumpsuitdown, /obj/item/clothing/head/welding/fluff/yuki_matsuda_1
|
||||||
searif: Ara Al-Jazari: /obj/item/clothing/under/rank/bartender/fluff/classy
|
searif: Ara Al-Jazari: /obj/item/clothing/under/rank/bartender/fluff/classy
|
||||||
|
serithi: Altair An-Nasaqan: /obj/item/clothing/tie/fluff/altair_locket
|
||||||
sirribbit: /obj/item/weapon/clipboard/fluff/mcreary_journal
|
sirribbit: /obj/item/weapon/clipboard/fluff/mcreary_journal
|
||||||
sicktrigger: David Fanning: /obj/item/fluff/david_fanning_1
|
sicktrigger: David Fanning: /obj/item/fluff/david_fanning_1
|
||||||
silentthunder: Val McNeil: /obj/item/fluff/val_mcneil_1
|
silentthunder: Val McNeil: /obj/item/fluff/val_mcneil_1
|
||||||
@@ -52,6 +59,7 @@ sniperyeti: Susan Harris: /obj/item/clothing/shoes/magboots/fluff/susan_harris_1
|
|||||||
spaceman96: Trenna Seber: /obj/item/weapon/pen/fluff/multi, /obj/item/clothing/suit/labcoat/fluff/pink
|
spaceman96: Trenna Seber: /obj/item/weapon/pen/fluff/multi, /obj/item/clothing/suit/labcoat/fluff/pink
|
||||||
sparklysheep: Cado Keppel: /obj/item/weapon/fluff/cado_keppel_1
|
sparklysheep: Cado Keppel: /obj/item/weapon/fluff/cado_keppel_1
|
||||||
sparklysheep: Uzenwa Sissra: /obj/item/clothing/glasses/fluff/uzenwa_sissra_1
|
sparklysheep: Uzenwa Sissra: /obj/item/clothing/glasses/fluff/uzenwa_sissra_1
|
||||||
|
suethecake: Ana Ka'Rimah: /obj/item/weapon/gun/energy/stunrevolver/fluff/ana_peacemaker
|
||||||
staghorn: Mara Kilpatrick: /obj/item/clothing/mask/mara_kilpatrick_1
|
staghorn: Mara Kilpatrick: /obj/item/clothing/mask/mara_kilpatrick_1
|
||||||
tastyfish: Cindy Robertson: /obj/item/weapon/wrapping_paper
|
tastyfish: Cindy Robertson: /obj/item/weapon/wrapping_paper
|
||||||
thatoneguy: Hugo Cinderbatch: /obj/item/weapon/fluff/hugo_cinderbacth_1
|
thatoneguy: Hugo Cinderbatch: /obj/item/weapon/fluff/hugo_cinderbacth_1
|
||||||
@@ -62,3 +70,4 @@ tzefa: Wes Solari: /obj/item/fluff/wes_solari_1
|
|||||||
vinceluk: Seth Sealis: /obj/item/clothing/suit/det_suit/fluff/graycoat
|
vinceluk: Seth Sealis: /obj/item/clothing/suit/det_suit/fluff/graycoat
|
||||||
whitellama: Ethan Way: /obj/item/fluff/ethan_way_1
|
whitellama: Ethan Way: /obj/item/fluff/ethan_way_1
|
||||||
whitewolf41: Jeremy Wolf: /obj/item/clothing/under/rank/security/fluff/jeremy_wolf_1
|
whitewolf41: Jeremy Wolf: /obj/item/clothing/under/rank/security/fluff/jeremy_wolf_1
|
||||||
|
zuhayr: Jane Doe: /obj/item/clothing/under/fluff/jane_sidsuit
|
||||||
@@ -56,6 +56,14 @@ Stuff which is in development and not yet visible to players or just code relate
|
|||||||
should be listed in the changelog upon commit though. Thanks. -->
|
should be listed in the changelog upon commit though. Thanks. -->
|
||||||
|
|
||||||
<!-- To take advantage of the pretty new format (well it was new when I wrote this anyway), open the "add-to-changelog.html" file in any browser and add the stuff and then generate the html code and paste it here -->
|
<!-- To take advantage of the pretty new format (well it was new when I wrote this anyway), open the "add-to-changelog.html" file in any browser and add the stuff and then generate the html code and paste it here -->
|
||||||
|
<div class="commit sansserif">
|
||||||
|
<h2 class="date">December 3rd</h2>
|
||||||
|
<h3 class="author">Cael_Aislinn updated:</h3>
|
||||||
|
<ul class="changes bgimages16">
|
||||||
|
<li class="tweak">Aliens have been significantly nerfed: neurotoxin is affected by bio protection suits, tackle stuns for much shorter time and facehuggers have a chance to fail when leaping.</li>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
|
||||||
<div class="commit sansserif">
|
<div class="commit sansserif">
|
||||||
<h2 class="date">23.11.12</h2>
|
<h2 class="date">23.11.12</h2>
|
||||||
<h3 class="author">CIB updated:</h3>
|
<h3 class="author">CIB updated:</h3>
|
||||||
|
|||||||
|
Before Width: | Height: | Size: 134 KiB After Width: | Height: | Size: 137 KiB |
|
Before Width: | Height: | Size: 7.9 KiB After Width: | Height: | Size: 8.3 KiB |
|
Before Width: | Height: | Size: 122 KiB After Width: | Height: | Size: 122 KiB |
|
Before Width: | Height: | Size: 122 KiB After Width: | Height: | Size: 122 KiB |
|
Before Width: | Height: | Size: 21 KiB After Width: | Height: | Size: 21 KiB |
|
Before Width: | Height: | Size: 119 KiB After Width: | Height: | Size: 132 KiB |
|
Before Width: | Height: | Size: 2.7 KiB After Width: | Height: | Size: 3.0 KiB |
|
Before Width: | Height: | Size: 198 KiB After Width: | Height: | Size: 203 KiB |
|
Before Width: | Height: | Size: 35 KiB After Width: | Height: | Size: 39 KiB |