Merge upstream

This commit is contained in:
Cyberboss
2017-04-01 23:33:23 -04:00
121 changed files with 2258 additions and 4320 deletions
@@ -23,8 +23,9 @@
else
dat += "<center>[type] of [key_name(M)]</center><br>"
var/list/reversed = M.logging[type]
reversed = reverseRange(reversed.Copy())
for(var/entry in reversed)
dat += "<font size=2px>[entry]: [reversed[entry]]</font><hr>"
if(reversed)
reversed = reverseRange(reversed.Copy())
for(var/entry in reversed)
dat += "<font size=2px>[entry]: [reversed[entry]]</font><hr>"
usr << browse(dat, "window=invidual_logging;size=600x480")
@@ -91,7 +91,7 @@
/turf/open/archive()
air.archive()
archived_cycle = SSair.times_fired
..()
temperature_archived = temperature
/////////////////////////GAS OVERLAYS//////////////////////////////
@@ -117,11 +117,23 @@
var/list/gases = air.gases
for(var/id in gases)
var/gas = gases[id]
if(gas[GAS_META][META_GAS_OVERLAY] && gas[MOLES] > gas[GAS_META][META_GAS_MOLES_VISIBLE])
. += gas[GAS_META][META_GAS_OVERLAY]
var/gas_meta = gas[GAS_META]
var/gas_overlay = gas_meta[META_GAS_OVERLAY]
if(gas_overlay && gas[MOLES] > gas_meta[META_GAS_MOLES_VISIBLE])
. += gas_overlay
/////////////////////////////SIMULATION///////////////////////////////////
#define LAST_SHARE_CHECK \
var/last_share = our_air.last_share;\
if(last_share > MINIMUM_AIR_TO_SUSPEND){\
our_excited_group.reset_cooldowns();\
cached_atmos_cooldown = 0;\
} else if(last_share > MINIMUM_MOLES_DELTA_TO_MOVE) {\
our_excited_group.dismantle_cooldown = 0;\
cached_atmos_cooldown = 0;\
}
/turf/proc/process_cell(fire_count)
SSair.remove_from_active(src)
@@ -130,15 +142,18 @@
archive()
current_cycle = fire_count
var/remove = 1 //set by non simulated turfs who are sharing with this turf
//cache for sanic speed
var/list/adjacent_turfs = atmos_adjacent_turfs
var/datum/excited_group/our_excited_group = excited_group
var/adjacent_turfs_length = LAZYLEN(adjacent_turfs)
atmos_cooldown++
if (planetary_atmos)
var/cached_atmos_cooldown = atmos_cooldown + 1
var/planet_atmos = planetary_atmos
if (planet_atmos)
adjacent_turfs_length++
var/datum/gas_mixture/our_air = air
for(var/t in adjacent_turfs)
var/turf/open/enemy_tile = t
@@ -148,6 +163,8 @@
/******************* GROUP HANDLING START *****************************************************************/
var/should_share_air = FALSE
var/datum/gas_mixture/enemy_air = enemy_tile.air
if(enemy_tile.excited)
//cache for sanic speed
var/datum/excited_group/enemy_excited_group = enemy_tile.excited_group
@@ -157,26 +174,26 @@
//combine groups (this also handles updating the excited_group var of all involved turfs)
our_excited_group.merge_groups(enemy_excited_group)
our_excited_group = excited_group //update our cache
share_air(enemy_tile, fire_count, adjacent_turfs_length) //share
should_share_air = TRUE
else
if((recently_active == 1 && enemy_tile.recently_active == 1) || air.compare(enemy_tile.air))
if((recently_active == 1 && enemy_tile.recently_active == 1) || our_air.compare(enemy_air))
our_excited_group.add_turf(enemy_tile) //add enemy to our group
share_air(enemy_tile, fire_count, adjacent_turfs_length) //share
should_share_air = TRUE
else
if(enemy_excited_group)
if((recently_active == 1 && enemy_tile.recently_active == 1) || air.compare(enemy_tile.air))
if((recently_active == 1 && enemy_tile.recently_active == 1) || our_air.compare(enemy_air))
enemy_excited_group.add_turf(src) //join self to enemy group
our_excited_group = excited_group //update our cache
share_air(enemy_tile, fire_count, adjacent_turfs_length) //share
should_share_air = TRUE
else
if((recently_active == 1 && enemy_tile.recently_active == 1) || air.compare(enemy_tile.air))
if((recently_active == 1 && enemy_tile.recently_active == 1) || our_air.compare(enemy_air))
var/datum/excited_group/EG = new //generate new group
EG.add_turf(src)
EG.add_turf(enemy_tile)
our_excited_group = excited_group //update our cache
share_air(enemy_tile, fire_count, adjacent_turfs_length) //share
should_share_air = TRUE
else
if(air.compare(enemy_tile.air)) //compare if
if(our_air.compare(enemy_air)) //compare if
SSair.add_to_active(enemy_tile) //excite enemy
if(our_excited_group)
our_excited_group.add_turf(enemy_tile) //add enemy to group
@@ -185,51 +202,55 @@
EG.add_turf(src)
EG.add_turf(enemy_tile)
our_excited_group = excited_group //update our cache
share_air(enemy_tile, fire_count, adjacent_turfs_length) //share
should_share_air = TRUE
//air sharing
if(should_share_air)
var/difference = our_air.share(enemy_air, adjacent_turfs_length)
if(difference)
if(difference > 0)
consider_pressure_difference(enemy_tile, difference)
else
enemy_tile.consider_pressure_difference(src, -difference)
LAST_SHARE_CHECK
/******************* GROUP HANDLING FINISH *********************************************************************/
if (planetary_atmos) //share our air with the "atmosphere" "above" the turf
if (planet_atmos) //share our air with the "atmosphere" "above" the turf
var/datum/gas_mixture/G = new
G.copy_from_turf(src)
G.archive()
if(air.compare(G))
if(our_air.compare(G))
if(!our_excited_group)
var/datum/excited_group/EG = new
EG.add_turf(src)
our_excited_group = excited_group
air.share(G, adjacent_turfs_length)
last_share_check()
our_air.share(G, adjacent_turfs_length)
LAST_SHARE_CHECK
air.react()
our_air.react()
update_visuals()
if(air.temperature > FIRE_MINIMUM_TEMPERATURE_TO_EXIST)
hotspot_expose(air.temperature, CELL_VOLUME)
for(var/atom/movable/item in src)
item.temperature_expose(air, air.temperature, CELL_VOLUME)
temperature_expose(air, air.temperature, CELL_VOLUME)
var/our_temperature = our_air.temperature
if(air.temperature > MINIMUM_TEMPERATURE_START_SUPERCONDUCTION)
var/remove = TRUE
if(our_temperature > FIRE_MINIMUM_TEMPERATURE_TO_EXIST)
hotspot_expose(our_temperature, CELL_VOLUME)
for(var/I in src)
var/atom/movable/item = I
item.temperature_expose(our_air, our_temperature, CELL_VOLUME)
temperature_expose(our_air, our_temperature, CELL_VOLUME)
if(our_temperature > MINIMUM_TEMPERATURE_START_SUPERCONDUCTION)
if(consider_superconductivity(starting = 1))
remove = 0
remove = FALSE
if (atmos_cooldown > EXCITED_GROUP_DISMANTLE_CYCLES*2)
if ((!our_excited_group && remove) || (cached_atmos_cooldown > (EXCITED_GROUP_DISMANTLE_CYCLES * 2)))
SSair.remove_from_active(src)
if(!our_excited_group && remove == 1)
SSair.remove_from_active(src)
/turf/open/proc/share_air(turf/open/T, fire_count, adjacent_turfs_length)
if(T.current_cycle < fire_count)
var/difference = air.share(T.air, adjacent_turfs_length)
if(difference)
if(difference > 0)
consider_pressure_difference(T, difference)
else
T.consider_pressure_difference(src, -difference)
last_share_check()
atmos_cooldown = cached_atmos_cooldown
//////////////////////////SPACEWIND/////////////////////////////
@@ -239,14 +260,6 @@
pressure_direction = get_dir(src, T)
pressure_difference = difference
/turf/open/proc/last_share_check()
if(air.last_share > MINIMUM_AIR_TO_SUSPEND)
excited_group.reset_cooldowns()
atmos_cooldown = 0
else if(air.last_share > MINIMUM_MOLES_DELTA_TO_MOVE)
excited_group.dismantle_cooldown = 0
atmos_cooldown = 0
/turf/open/proc/high_pressure_movements()
for(var/atom/movable/M in src)
M.experience_pressure_difference(pressure_difference, pressure_direction)
@@ -6,30 +6,24 @@ What are the archived variables for?
#define MINIMUM_HEAT_CAPACITY 0.0003
#define QUANTIZE(variable) (round(variable,0.0000001))/*I feel the need to document what happens here. Basically this is used to catch most rounding errors, however it's previous value made it so that
once gases got hot enough, most procedures wouldnt occur due to the fact that the mole counts would get rounded away. Thus, we lowered it a few orders of magnititude */
var/list/meta_gas_info = meta_gas_list() //see ATMOSPHERICS/gas_types.dm
var/list/gaslist_cache = init_gaslist_cache()
var/list/gaslist_cache = null
/proc/gaslist(id)
var/list/cached_gas
/proc/init_gaslist_cache()
. = list()
for(var/id in meta_gas_info)
var/list/cached_gas = new(3)
//only instantiate the first time it's needed
if(!gaslist_cache)
gaslist_cache = new(meta_gas_info.len)
//only setup the individual lists the first time they're needed
if(!gaslist_cache[id])
if(!meta_gas_info[id])
CRASH("Gas [id] does not exist!")
cached_gas = new(3)
gaslist_cache[id] = cached_gas
.[id] = cached_gas
cached_gas[MOLES] = 0
cached_gas[ARCHIVE] = 0
cached_gas[GAS_META] = meta_gas_info[id]
else
cached_gas = gaslist_cache[id]
//Copy() it because only GAS_META is static
return cached_gas.Copy()
#define GASLIST(id, out_list)\
var/list/tmp_gaslist = gaslist_cache[id];\
out_list = tmp_gaslist.Copy();
/datum/gas_mixture
var/list/gases
@@ -57,7 +51,7 @@ var/list/gaslist_cache = null
var/cached_gases = gases
if(cached_gases[gas_id])
return
cached_gases[gas_id] = gaslist(gas_id)
GASLIST(gas_id, cached_gases[gas_id])
//assert_gases(args) - shorthand for calling assert_gas() once for each gas type.
/datum/gas_mixture/proc/assert_gases()
@@ -68,12 +62,13 @@ var/list/gaslist_cache = null
//gas list for this id. This can clobber existing gases.
//Used instead of assert_gas() when you know the gas does not exist. Faster than assert_gas().
/datum/gas_mixture/proc/add_gas(gas_id)
gases[gas_id] = gaslist(gas_id)
GASLIST(gas_id, gases[gas_id])
//add_gases(args) - shorthand for calling add_gas() once for each gas_type.
/datum/gas_mixture/proc/add_gases()
var/cached_gases = gases
for(var/id in args)
add_gas(id)
GASLIST(id, cached_gases[id])
//garbage_collect() - removes any gas list which is empty.
//If called with a list as an argument, only removes gas lists with IDs from that list.
@@ -91,23 +86,33 @@ var/list/gaslist_cache = null
var/list/cached_gases = gases
. = 0
for(var/id in cached_gases)
. += cached_gases[id][MOLES] * cached_gases[id][GAS_META][META_GAS_SPECIFIC_HEAT]
var/gas_data = cached_gases[id]
. += gas_data[MOLES] * gas_data[GAS_META][META_GAS_SPECIFIC_HEAT]
/datum/gas_mixture/proc/heat_capacity_archived() //joules per kelvin
var/list/cached_gases = gases
. = 0
for(var/id in cached_gases)
. += cached_gases[id][ARCHIVE] * cached_gases[id][GAS_META][META_GAS_SPECIFIC_HEAT]
var/gas_data = cached_gases[id]
. += gas_data[ARCHIVE] * gas_data[GAS_META][META_GAS_SPECIFIC_HEAT]
/datum/gas_mixture/proc/total_moles() //moles
var/list/cached_gases = gases
. = 0
for(var/id in cached_gases)
. += cached_gases[id][MOLES]
//prefer this in performance critical areas
#define TOTAL_MOLES(cached_gases, out_var)\
out_var = 0;\
for(var/total_moles_id in cached_gases){\
out_var += cached_gases[total_moles_id][MOLES];\
}
/datum/gas_mixture/proc/total_moles()
var/cached_gases = gases
TOTAL_MOLES(cached_gases, .)
/datum/gas_mixture/proc/return_pressure() //kilopascals
if(volume > 0) // to prevent division by zero
return total_moles() * R_IDEAL_GAS_EQUATION * temperature / volume
var/cached_gases = gases
TOTAL_MOLES(cached_gases, .)
. *= R_IDEAL_GAS_EQUATION * temperature / volume
return
return 0
/datum/gas_mixture/proc/return_temperature() //kelvins
@@ -340,11 +345,12 @@ var/list/gaslist_cache = null
return 1
/datum/gas_mixture/remove(amount)
var/sum = total_moles()
var/sum
var/list/cached_gases = gases
TOTAL_MOLES(cached_gases, sum)
amount = min(amount, sum) //Can not take more air than tile has!
if(amount <= 0)
return null
var/list/cached_gases = gases
var/datum/gas_mixture/removed = new
var/list/removed_gases = removed.gases //accessing datum vars is slower than proc vars
@@ -495,7 +501,11 @@ var/list/gaslist_cache = null
sharer.garbage_collect(sharer_gases - cached_gases) //the reverse is equally true
sharer.after_share(src, atmos_adjacent_turfs)
if(temperature_delta > MINIMUM_TEMPERATURE_TO_MOVE || abs(moved_moles) > MINIMUM_MOLES_DELTA_TO_MOVE)
var/delta_pressure = temperature_archived*(total_moles() + moved_moles) - sharer.temperature_archived*(sharer.total_moles() - moved_moles)
var/our_moles
TOTAL_MOLES(cached_gases,our_moles)
var/their_moles
TOTAL_MOLES(sharer_gases,their_moles)
var/delta_pressure = temperature_archived*(our_moles + moved_moles) - sharer.temperature_archived*(their_moles - moved_moles)
return delta_pressure * R_IDEAL_GAS_EQUATION / volume
/datum/gas_mixture/after_share(datum/gas_mixture/sharer, atmos_adjacent_turfs = 4)
@@ -521,33 +531,28 @@ var/list/gaslist_cache = null
return sharer_temperature
//thermal energy of the system (self and sharer) is unchanged
/datum/gas_mixture/compare(datum/gas_mixture/sample, datatype = MOLES, adjacents = 0)
/datum/gas_mixture/compare(datum/gas_mixture/sample)
var/list/sample_gases = sample.gases //accessing datum vars is slower than proc vars
var/list/cached_gases = gases
for(var/id in cached_gases | sample_gases) // compare gases from either mixture
var/gas_moles = cached_gases[id] ? cached_gases[id][datatype] : 0
var/sample_moles = sample_gases[id] ? sample_gases[id][datatype] : 0
var/delta = abs(gas_moles - sample_moles)/(adjacents+1)
var/gas_moles = cached_gases[id]
gas_moles = gas_moles ? gas_moles[MOLES] : 0
var/sample_moles = sample_gases[id]
sample_moles = sample_moles ? sample_moles[MOLES] : 0
var/delta = abs(gas_moles - sample_moles)
if(delta > MINIMUM_MOLES_DELTA_TO_MOVE && \
delta > gas_moles * MINIMUM_AIR_RATIO_TO_MOVE)
return id
if(total_moles() > MINIMUM_MOLES_DELTA_TO_MOVE)
var/temp
var/sample_temp
switch(datatype)
if(MOLES)
temp = temperature
sample_temp = sample.temperature
if(ARCHIVE)
temp = temperature_archived
sample_temp = sample.temperature_archived
var/our_moles
TOTAL_MOLES(cached_gases, our_moles)
if(our_moles > MINIMUM_MOLES_DELTA_TO_MOVE)
var/temp = temperature
var/sample_temp = sample.temperature
var/temperature_delta = abs(temp - sample_temp)
if((temperature_delta > MINIMUM_TEMPERATURE_DELTA_TO_SUSPEND) && \
temperature_delta > MINIMUM_TEMPERATURE_DELTA_TO_SUSPEND * temp)
if(temperature_delta > MINIMUM_TEMPERATURE_DELTA_TO_SUSPEND)
return "temp"
return ""
@@ -7,7 +7,7 @@
/obj/machinery/atmospherics/components/unary/vent_pump
name = "air vent"
desc = "Has a valve and pump attached to it"
desc = "Has a valve and pump attached to it."
icon_state = "vent_map"
use_power = 1
can_unwrench = 1
@@ -3,7 +3,7 @@
/obj/machinery/atmospherics/components/unary/vent_scrubber
name = "air scrubber"
desc = "Has a valve and pump attached to it"
desc = "Has a valve and pump attached to it."
icon_state = "scrub_map"
use_power = 1
idle_power_usage = 10
@@ -8,7 +8,7 @@ The regular pipe you see everywhere, including bent ones.
icon_state = "intact"
name = "pipe"
desc = "A one meter section of regular pipe"
desc = "A one meter section of regular pipe."
dir = SOUTH
initialize_directions = SOUTH|NORTH
@@ -117,3 +117,7 @@
/obj/effect/landmark/mapGenerator/snowy
mapGeneratorType = /datum/mapGenerator/snowy
endTurfX = 159
endTurfY = 157
startTurfX = 37
startTurfY = 35
+6
View File
@@ -79,6 +79,12 @@
material_id = MAT_TITANIUM
message = "cm3 of titanium"
// Plastitanium.
/datum/export/material/plastitanium
cost = 750
material_id = MAT_TITANIUM // code can only check for one material_id; plastitanium is half plasma, half titanium, so ((250 x 250) + (250 x 500)) / 250
message = "cm3 of plastitanium"
// Metal. Common building material.
/datum/export/material/metal
message = "cm3 of metal"
+7
View File
@@ -79,6 +79,13 @@
message = "of reinforced glass"
export_types = list(/obj/item/stack/sheet/rglass)
// Bluespace Polycrystals. About as common on the asteroid as
/datum/export/stack/bscrystal
cost = 750
message = "of bluespace crystals"
export_types = list(/obj/item/stack/sheet/bluespace_crystal)
// Wood. Quite expensive in the grim and dark 26 century.
/datum/export/stack/wood
cost = 25
+13 -12
View File
@@ -37,6 +37,19 @@
/datum/supply_pack/emergency
group = "Emergency"
/datum/supply_pack/emergency/spacesuit
name = "Space Suit Crate"
cost = 3000
access = access_eva
contains = list(/obj/item/clothing/suit/space,
/obj/item/clothing/suit/space,
/obj/item/clothing/head/helmet/space,
/obj/item/clothing/head/helmet/space,
/obj/item/clothing/mask/breath,
/obj/item/clothing/mask/breath)
crate_name = "space suit crate"
crate_type = /obj/structure/closet/crate/secure
/datum/supply_pack/emergency/vehicle
name = "Biker Gang Kit" //TUNNEL SNAKES OWN THIS TOWN
cost = 2000
@@ -549,18 +562,6 @@
/obj/item/clothing/glasses/meson/engine)
crate_name = "engineering gear crate"
/datum/supply_pack/engineering/engine/spacesuit
name = "Space Suit Crate"
cost = 3000
access = access_eva
contains = list(/obj/item/clothing/suit/space,
/obj/item/clothing/suit/space,
/obj/item/clothing/head/helmet/space,
/obj/item/clothing/head/helmet/space,
/obj/item/clothing/mask/breath,
/obj/item/clothing/mask/breath)
crate_name = "space suit crate"
crate_type = /obj/structure/closet/crate/secure
/datum/supply_pack/engineering/shieldgen
name = "Anti-breach Shield Projector Crate"
+29
View File
@@ -194,8 +194,36 @@ var/next_external_rsc = 0
vars["fps"] = prefs.clientfps
sethotkeys(1) //set hoykeys from preferences (from_pref = 1)
log_access("Login: [key_name(src)] from [address ? address : "localhost"]-[computer_id] || BYOND v[byond_version]")
var/alert_mob_dupe_login = FALSE
if(config.log_access)
for(var/I in clients)
if(I == src)
continue
var/client/C = I
if(C.key && (C.key != key) )
var/matches
if( (C.address == address) )
matches += "IP ([address])"
if( (C.computer_id == computer_id) )
if(matches)
matches += " and "
matches += "ID ([computer_id])"
alert_mob_dupe_login = TRUE
if(matches)
if(C)
message_admins("<font color='red'><B>Notice: </B><font color='blue'>[key_name_admin(src)] has the same [matches] as [key_name_admin(C)].</font>")
log_access("Notice: [key_name(src)] has the same [matches] as [key_name(C)].")
else
message_admins("<font color='red'><B>Notice: </B><font color='blue'>[key_name_admin(src)] has the same [matches] as [key_name_admin(C)] (no longer logged in). </font>")
log_access("Notice: [key_name(src)] has the same [matches] as [key_name(C)] (no longer logged in).")
. = ..() //calls mob.Login()
if(alert_mob_dupe_login)
set waitfor = FALSE
alert(mob, "You have logged in already with another key this round, please log out of this one NOW or risk being banned!")
connection_time = world.time
connection_realtime = world.realtime
connection_timeofday = world.timeofday
@@ -307,6 +335,7 @@ var/next_external_rsc = 0
//////////////
/client/Del()
log_access("Logout: [key_name(src)]")
if(holder)
adminGreet(1)
holder.owner = null
+11 -16
View File
@@ -79,47 +79,42 @@
if(button)
button.name = "Change [chameleon_name] Appearance"
chameleon_blacklist |= typecacheof(target.type)
for(var/V in typesof(chameleon_type))
if(ispath(V, /obj/item))
if(ispath(V) && ispath(V, /obj/item))
var/obj/item/I = V
if(chameleon_blacklist[V] || (initial(I.flags) & ABSTRACT))
continue
chameleon_list += I
if(!initial(I.icon_state) || !initial(I.item_state))
continue
var/chameleon_item_name = "[initial(I.name)] ([initial(I.icon_state)])"
chameleon_list[chameleon_item_name] = I
/datum/action/item_action/chameleon/change/proc/select_look(mob/user)
var/list/item_names = list()
var/obj/item/picked_item
for(var/U in chameleon_list)
var/obj/item/I = U
item_names += initial(I.name)
var/picked_name
picked_name = input("Select [chameleon_name] to change into", "Chameleon [chameleon_name]", picked_name) in item_names
picked_name = input("Select [chameleon_name] to change into", "Chameleon [chameleon_name]", picked_name) as null|anything in chameleon_list
if(!picked_name)
return
for(var/V in chameleon_list)
var/obj/item/I = V
if(initial(I.name) == picked_name)
picked_item = V
break
picked_item = chameleon_list[picked_name]
if(!picked_item)
return
update_look(user, picked_item)
/datum/action/item_action/chameleon/change/proc/random_look(mob/user)
var/picked_item = pick(chameleon_list)
var/picked_name = pick(chameleon_list)
// If a user is provided, then this item is in use, and we
// need to update our icons and stuff
if(user)
update_look(user, picked_item)
update_look(user, chameleon_list[picked_name])
// Otherwise, it's likely a random initialisation, so we
// don't have to worry
else
update_item(picked_item)
update_item(chameleon_list[picked_name])
/datum/action/item_action/chameleon/change/proc/update_look(mob/user, obj/item/picked_item)
if(istype(target, /obj/item/weapon/gun/energy/laser/chameleon))
+13 -11
View File
@@ -4,25 +4,18 @@
weight = 20
max_occurrences = 5
/datum/round_event_control/canSpawnEvent(players_amt, gamemode)
return ..() && length(gather_false_events())
/datum/round_event/falsealarm
announceWhen = 0
endWhen = 1
/datum/round_event/falsealarm/announce()
var/list/events_list = list()
var/players_amt = get_active_player_count(alive_check = 1, afk_check = 1, human_check = 1)
var/gamemode = SSticker.mode.config_tag
for(var/datum/round_event_control/E in SSevents.control)
if(!E.canSpawnEvent(players_amt, gamemode))
continue
var/datum/round_event/event = E.typepath
if(initial(event.announceWhen) <= 0)
continue
events_list += E
var/events_list = gather_false_events(players_amt, gamemode)
var/datum/round_event_control/event_control = pick(events_list)
if(event_control)
var/datum/round_event/Event = new event_control.typepath()
@@ -30,4 +23,13 @@
Event.kill() //do not process this event - no starts, no ticks, no ends
Event.announce() //just announce it like it's happening
/proc/gather_false_events(players_amt, gamemode)
. = list()
for(var/datum/round_event_control/E in SSevents.control)
if(!E.canSpawnEvent(players_amt, gamemode))
continue
var/datum/round_event/event = E.typepath
if(initial(event.announceWhen) <= 0)
continue
. += E
@@ -15,528 +15,20 @@
/obj/item/weapon/reagent_containers/food/drinks/drinkingglass/on_reagent_change()
cut_overlays()
if (reagents.reagent_list.len > 0)
switch(reagents.get_master_reagent_id())
if("beer")
icon_state = "beerglass"
name = "glass of beer"
desc = "A freezing pint of beer."
if("beer2")
icon_state = "beerglass"
name = "glass of beer"
desc = "A freezing pint of beer."
if("greenbeer")
icon_state = "greenbeerglass"
name = "glass of green beer"
desc = "A freezing pint of green beer. Festive."
if("ale")
icon_state = "aleglass"
name = "glass of ale"
desc = "A freezing pint of delicious Ale."
if("milk")
icon_state = "glass_white"
name = "glass of milk"
desc = "White and nutritious goodness!"
if("cream")
icon_state = "glass_white"
name = "glass of cream"
desc = "Ewwww..."
if("hot_coco")
icon_state = "chocolateglass"
name = "glass of chocolate"
desc = "Tasty."
if("lemonjuice")
icon_state = "lemonglass"
name = "glass of lemon juice"
desc = "Sour..."
if("holywater")
icon_state = "glass_clear"
name = "glass of Holy Water"
desc = "A glass of holy water."
if("potato")
icon_state = "glass_brown"
name = "glass of potato juice"
desc = "Bleh..."
if("watermelonjuice")
icon_state = "glass_red"
name = "glass of watermelon juice"
desc = "A glass of watermelon juice."
if("cola")
icon_state = "glass_brown"
name = "glass of space Cola"
desc = "A glass of refreshing Space Cola."
if("nuka_cola")
icon_state = "nuka_colaglass"
name = "Nuka Cola"
desc = "Don't cry, Don't raise your eye, It's only nuclear wasteland."
if("orangejuice")
icon_state = "glass_orange"
name = "glass of orange juice"
desc = "Vitamins! Yay!"
if("tomatojuice")
icon_state = "glass_red"
name = "glass of tomato juice"
desc = "Are you sure this is tomato juice?"
if("blood")
icon_state = "glass_red"
name = "glass of tomato juice"
desc = "Are you sure this is tomato juice?"
if("limejuice")
icon_state = "glass_green"
name = "glass of lime juice"
desc = "A glass of sweet-sour lime juice."
if("whiskey")
icon_state = "whiskeyglass"
name = "glass of whiskey"
desc = "The silky, smokey whiskey goodness inside the glass makes the drink look very classy."
if("gin")
icon_state = "ginvodkaglass"
name = "glass of gin"
desc = "A crystal clear glass of Griffeater gin."
if("vodka")
icon_state = "ginvodkaglass"
name = "glass of vodka"
desc = "The glass contain wodka. Xynta."
if("goldschlager")
icon_state = "goldschlagerglass"
name = "glass of Goldschlager"
desc = "100% proof that teen girls will drink anything with gold in it."
if("wine")
icon_state = "wineglass"
name = "glass of wine"
desc = "A very classy looking drink."
if("cognac")
icon_state = "cognacglass"
name = "glass of cognac"
desc = "Damn, you feel like some kind of French aristocrat just by holding this."
if ("kahlua")
icon_state = "kahluaglass"
name = "glass of RR Coffee Liquor"
desc = "DAMN, THIS THING LOOKS ROBUST!"
if("vermouth")
icon_state = "vermouthglass"
name = "glass of vermouth"
desc = "You wonder why you're even drinking this straight."
if("tequila")
icon_state = "tequilaglass"
name = "glass of tequila"
desc = "Now all that's missing is the weird colored shades!"
if("patron")
icon_state = "patronglass"
name = "glass of patron"
desc = "Drinking patron in the bar, with all the subpar ladies."
if("rum")
icon_state = "rumglass"
name = "glass of rum"
desc = "Now you want to Pray for a pirate suit, don't you?"
if("gintonic")
icon_state = "gintonicglass"
name = "Gin and Tonic"
desc = "A mild but still great cocktail. Drink up, like a true Englishman."
if("whiskeycola")
icon_state = "whiskeycolaglass"
name = "Whiskey Cola"
desc = "An innocent-looking mixture of cola and Whiskey. Delicious."
if("whiterussian")
icon_state = "whiterussianglass"
name = "White Russian"
desc = "A very nice looking drink. But that's just, like, your opinion, man."
if("screwdrivercocktail")
icon_state = "screwdriverglass"
name = "Screwdriver"
desc = "A simple, yet superb mixture of Vodka and orange juice. Just the thing for the tired engineer."
if("bloodymary")
icon_state = "bloodymaryglass"
name = "Bloody Mary"
desc = "Tomato juice, mixed with Vodka and a lil' bit of lime. Tastes like liquid murder."
if("martini")
icon_state = "martiniglass"
name = "Classic Martini"
desc = "Damn, the bartender even stirred it, not shook it."
if("vodkamartini")
icon_state = "martiniglass"
name = "Vodka martini"
desc ="A bastardisation of the classic martini. Still great."
if("gargleblaster")
icon_state = "gargleblasterglass"
name = "Pan-Galactic Gargle Blaster"
desc = "Like having your brain smashed out by a slice of lemon wrapped around a large gold brick."
if("bravebull")
icon_state = "bravebullglass"
name = "Brave Bull"
desc = "Tequila and Coffee liqueur, brought together in a mouthwatering mixture. Drink up."
if("tequilasunrise")
icon_state = "tequilasunriseglass"
name = "tequila Sunrise"
desc = "Oh great, now you feel nostalgic about sunrises back on Terra..."
if("beepskysmash")
icon_state = "beepskysmashglass"
name = "Beepsky Smash"
desc = "Heavy, hot and strong. Just like the Iron fist of the LAW."
if("doctorsdelight")
icon_state = "doctorsdelightglass"
name = "Doctor's Delight"
desc = "The space doctor's favorite. Guaranteed to restore bodily injury; side effects include cravings and hunger."
if("manlydorf")
icon_state = "manlydorfglass"
name = "The Manly Dorf"
desc = "A manly concoction made from Ale and Beer. Intended for true men only."
if("irishcream")
icon_state = "irishcreamglass"
name = "Irish Cream"
desc = "It's cream, mixed with whiskey. What else would you expect from the Irish?"
if("cubalibre")
icon_state = "cubalibreglass"
name = "Cuba Libre"
desc = "A classic mix of rum and cola."
if("atomicbomb")
icon_state = "atomicbombglass"
name = "Atomic Bomb"
desc = "Nanotrasen cannot take legal responsibility for your actions after imbibing."
if("longislandicedtea")
icon_state = "longislandicedteaglass"
name = "Long Island Iced Tea"
desc = "The liquor cabinet, brought together in a delicious mix. Intended for middle-aged alcoholic women only."
if("threemileisland")
icon_state = "threemileislandglass"
name = "Three Mile Island Ice Tea"
desc = "A glass of this is sure to prevent a meltdown."
if("margarita")
icon_state = "margaritaglass"
name = "Margarita"
desc = "On the rocks with salt on the rim. Arriba~!"
if("blackrussian")
icon_state = "blackrussianglass"
name = "Black Russian"
desc = "For the lactose-intolerant. Still as classy as a White Russian."
if("vodkatonic")
icon_state = "vodkatonicglass"
name = "Vodka and Tonic"
desc = "For when a gin and tonic isn't Russian enough."
if("manhattan")
icon_state = "manhattanglass"
name = "Manhattan"
desc = "The Detective's undercover drink of choice. He never could stomach gin..."
if("manhattan_proj")
icon_state = "proj_manhattanglass"
name = "Manhattan Project"
desc = "A scientist's drink of choice, for thinking how to blow up the station."
if("ginfizz")
icon_state = "ginfizzglass"
name = "Gin Fizz"
desc = "Refreshingly lemony, deliciously dry."
if("irishcoffee")
icon_state = "irishcoffeeglass"
name = "Irish Coffee"
desc = "Coffee and alcohol. More fun than a Mimosa to drink in the morning."
if("hooch")
icon_state = "glass_brown2"
name = "Hooch"
desc = "You've really hit rock bottom now... your liver packed its bags and left last night."
if("whiskeysoda")
icon_state = "whiskeysodaglass2"
name = "Whiskey Soda"
desc = "Ultimate refreshment."
if("tonic")
icon_state = "glass_clear"
name = "glass of Tonic Water"
desc = "Quinine tastes funny, but at least it'll keep that Space Malaria away."
if("sodawater")
icon_state = "glass_clear"
name = "glass of Soda Water"
desc = "Soda water. Why not make a scotch and soda?"
if("water")
icon_state = "glass_clear"
name = "glass of Water"
desc = "The father of all refreshments."
if("spacemountainwind")
icon_state = "Space_mountain_wind_glass"
name = "glass of Space Mountain Wind"
desc = "Space Mountain Wind. As you know, there are no mountains in space, only wind."
if("thirteenloko")
icon_state = "thirteen_loko_glass"
name = "glass of Thirteen Loko"
desc = "This is a glass of Thirteen Loko, it appears to be of the highest quality. The drink, not the glass."
if("dr_gibb")
icon_state = "dr_gibb_glass"
name = "glass of Dr. Gibb"
desc = "Dr. Gibb. Not as dangerous as the name might imply."
if("space_up")
icon_state = "space-up_glass"
name = "glass of Space-up"
desc = "Space-up. It helps you keep your cool."
if("pwr_game")
icon_state = "glass_red"
name = "glass of Pwr Game"
desc = "Goes well with a Vlad's salad."
if("shamblers")
icon_state = "glass_red"
name = "glass of Shambler's Juice"
desc = "Mmm mm, shambly."
if("lemon_lime")
icon_state = "glass_yellow"
name = "glass of Lemon-Lime"
desc = "You're pretty certain a real fruit has never actually touched this."
if("moonshine")
icon_state = "glass_clear"
name = "Moonshine"
desc = "You've really hit rock bottom now... your liver packed its bags and left last night."
if("soymilk")
icon_state = "glass_white"
name = "glass of soy milk"
desc = "White and nutritious soy goodness!"
if("berryjuice")
icon_state = "berryjuice"
name = "glass of berry juice"
desc = "Berry juice. Or maybe it's jam. Who cares?"
if("poisonberryjuice")
icon_state = "poisonberryjuice"
name = "glass of berry juice"
desc = "Berry juice. Or maybe it's poison. Who cares?"
if("carrotjuice")
icon_state = "carrotjuice"
name = "glass of carrot juice"
desc = "It's just like a carrot but without crunching."
if("banana")
icon_state = "banana"
name = "glass of banana juice"
desc = "The raw essence of a banana. HONK."
if("bahama_mama")
icon_state = "bahama_mama"
name = "Bahama Mama"
desc = "Tropical cocktail."
if("singulo")
icon_state = "singulo"
name = "Singulo"
desc = "A blue-space beverage."
if("alliescocktail")
icon_state = "alliescocktail"
name = "Allies cocktail"
desc = "A drink made from your allies."
if("antifreeze")
icon_state = "antifreeze"
name = "Anti-freeze"
desc = "The ultimate refreshment."
if("barefoot")
icon_state = "b&p"
name = "Barefoot"
desc = "Barefoot and pregnant."
if("demonsblood")
icon_state = "demonsblood"
name = "Demons Blood"
desc = "Just looking at this thing makes the hair at the back of your neck stand up."
if("booger")
icon_state = "booger"
name = "Booger"
desc = "Ewww..."
if("snowwhite")
icon_state = "snowwhite"
name = "Snow White"
desc = "A cold refreshment."
if("aloe")
icon_state = "aloe"
name = "Aloe"
desc = "Very, very, very good."
if("andalusia")
icon_state = "andalusia"
name = "Andalusia"
desc = "A nice, strangely named drink."
if("sbiten")
icon_state = "sbitenglass"
name = "Sbiten"
desc = "A spicy mix of Vodka and Spice. Very hot."
if("red_mead")
icon_state = "red_meadglass"
name = "Red Mead"
desc = "A True Viking's Beverage, though its color is strange."
if("mead")
icon_state = "meadglass"
name = "Mead"
desc = "A Viking's Beverage, though a cheap one."
if("iced_beer")
icon_state = "iced_beerglass"
name = "Iced Beer"
desc = "A beer so frosty, the air around it freezes."
if("grog")
icon_state = "grogglass"
name = "Grog"
desc = "A fine and cepa drink for Space."
if("soy_latte")
icon_state = "soy_latte"
name = "Soy Latte"
desc = "A nice and refreshing beverage while you're reading."
if("cafe_latte")
icon_state = "cafe_latte"
name = "Cafe Latte"
desc = "A nice, strong and refreshing beverage while you're reading."
if("acidspit")
icon_state = "acidspitglass"
name = "Acid Spit"
desc = "A drink from Nanotrasen. Made from live aliens."
if("amasec")
icon_state = "amasecglass"
name = "Amasec"
desc = "Always handy before COMBAT!!!"
if("neurotoxin")
icon_state = "neurotoxinglass"
name = "Neurotoxin"
desc = "A drink that is guaranteed to knock you silly."
if("hippiesdelight")
icon_state = "hippiesdelightglass"
name = "Hippie's Delight"
desc = "A drink enjoyed by people during the 1960's."
if("bananahonk")
icon_state = "bananahonkglass"
name = "Banana Honk"
desc = "A drink from Clown Heaven."
if("silencer")
icon_state = "silencerglass"
name = "Silencer"
desc = "A drink from Mime Heaven."
if("nothing")
icon_state = "nothing"
name = "Nothing"
desc = "Absolutely nothing."
if("devilskiss")
icon_state = "devilskiss"
name = "Devils Kiss"
desc = "Creepy time!"
if("changelingsting")
icon_state = "changelingsting"
name = "Changeling Sting"
desc = "A stingy drink."
if("irishcarbomb")
icon_state = "irishcarbomb"
name = "Irish Car Bomb"
desc = "An Irish car bomb."
if("syndicatebomb")
icon_state = "syndicatebomb"
name = "Syndicate Bomb"
desc = "A syndicate bomb."
if("erikasurprise")
icon_state = "erikasurprise"
name = "Erika Surprise"
desc = "The surprise is, it's green!"
if("driestmartini")
icon_state = "driestmartiniglass"
name = "Driest Martini"
desc = "Only for the experienced. You think you see sand floating in the glass."
if("ice")
icon_state = "iceglass"
name = "glass of ice"
desc = "Generally, you're supposed to put something else in there too..."
if("icecoffee")
icon_state = "icedcoffeeglass"
name = "Iced Coffee"
desc = "A drink to perk you up and refresh you!"
if("icetea")
icon_state = "icedteaglass"
name = "Iced Tea"
desc = "All natural, antioxidant-rich flavour sensation."
if("coffee")
icon_state = "glass_brown"
name = "glass of coffee"
desc = "Don't drop it, or you'll send scalding liquid and glass shards everywhere."
if("tea")
icon_state = "teaglass"
name = "glass of tea"
desc = "Drinking it from here would not seem right."
if("bilk")
icon_state = "glass_brown"
name = "glass of bilk"
desc = "A brew of milk and beer. For those alcoholics who fear osteoporosis."
if("welding_fuel")
icon_state = "dr_gibb_glass"
name = "glass of welder fuel"
desc = "Unless you're an industrial tool, this is probably not safe for consumption."
if("b52")
icon_state = "b52glass"
name = "B-52"
desc = "Kahlua, Irish Cream, and cognac. You will get bombed."
if("toxinsspecial")
icon_state = "toxinsspecialglass"
name = "Toxins Special"
desc = "Whoah, this thing is on FIRE!"
if("chocolatepudding")
icon_state = "chocolatepudding"
name = "Chocolate Pudding"
desc = "Tasty."
if("vanillapudding")
icon_state = "vanillapudding"
name = "Vanilla Pudding"
desc = "Tasty."
if("cherryshake")
icon_state = "cherryshake"
name = "Cherry Shake"
desc = "A cherry flavored milkshake."
if("bluecherryshake")
icon_state = "bluecherryshake"
name = "Blue Cherry Shake"
desc = "An exotic blue milkshake."
if("drunkenblumpkin")
icon_state = "drunkenblumpkin"
name = "Drunken Blumpkin"
desc = "A drink for the drunks."
if("pumpkin_latte")
icon_state = "pumpkin_latte"
name = "Pumpkin Latte"
desc = "A mix of coffee and pumpkin juice."
if("gibbfloats")
icon_state = "gibbfloats"
name = "Gibbfloat"
desc = "Dr. Gibb with ice cream on top."
if("whiskey_sour")
icon_state = "whiskey_sour"
name = "Whiskey Sour"
desc = "Lemon juice mixed with whiskey and a dash of sugar. Surprisingly satisfying."
if("fetching_fizz")
icon_state = "fetching_fizz"
name = "Fetching Fizz"
desc = "Induces magnetism in the imbiber. Started as a barroom prank but evolved to become popular with miners and scrappers. Metallic aftertaste."
if("hearty_punch")
icon_state = "hearty_punch"
name = "Hearty Punch"
desc = "Aromatic beverage served piping hot. According to folk tales it can almost wake the dead."
if("absinthe")
icon_state = "absinthe"
name = "glass of absinthe"
desc = "It's as strong as it smells."
if("bacchus_blessing")
icon_state = "glass_brown2"
name = "Bacchus' Blessing"
desc = "You didn't think it was possible for a liquid to be so utterly revolting. Are you sure about this...?"
if("arnold_palmer")
icon_state = "arnold_palmer"
name = "Arnold Palmer"
desc = "You feel like taking a few golf swings after a few swigs of this."
if("hcider")
icon_state = "whiskeyglass"
name = "Hard Cider"
desc = "Tastes like autumn."
if("triple_citrus")
icon_state = "triplecitrus" //needs own sprite mine are trash
name = "glass of triple citrus"
desc = "A mixture of citrus juices. Tangy, yet smooth."
if("grappa")
icon_state = "grappa"
name = "glass of grappa"
desc = "A fine drink originally made to prevent waste by using the leftovers from winemaking."
if("eggnog")
icon_state = "glass_yellow"
name = "Eggnog"
desc = "For enjoying the most wonderful time of the year."
else
icon_state ="glass_brown"
var/image/I = image(icon, "glassoverlay")
I.color = mix_color_from_reagents(reagents.reagent_list)
add_overlay(I)
name = "glass of ..what?"
desc = "You can't really tell what this is."
if(reagents.reagent_list.len)
var/datum/reagent/R = reagents.get_master_reagent()
name = R.glass_name
desc = R.glass_desc
if(R.glass_icon_state)
icon_state = R.glass_icon_state
else
var/image/I = image(icon, "glassoverlay")
I.color = mix_color_from_reagents(reagents.reagent_list)
add_overlay(I)
else
icon_state = "glass_empty"
name = "drinking glass"
desc = "Your standard drinking glass."
return
//Shot glasses!//
// This lets us add shots in here instead of lumping them in with drinks because >logic //
@@ -556,89 +48,27 @@
materials = list(MAT_GLASS=100)
/obj/item/weapon/reagent_containers/food/drinks/drinkingglass/shotglass/on_reagent_change()
cut_overlays()
if (gulp_size < 15)
gulp_size = 15
else
gulp_size = max(round(reagents.total_volume / 15), 15)
if (reagents.reagent_list.len > 0)
switch(reagents.get_master_reagent_id())
if("vodka")
icon_state = "shotglassclear"
name = "shot of vodka"
desc = "Good for cold weather."
if("water")
icon_state = "shotglassclear"
name = "shot of water"
desc = "You're not sure why someone would drink this from a shot glass."
if("whiskey")
icon_state = "shotglassbrown"
name = "shot of whiskey"
desc = "Just like the old west."
if("hcider")
icon_state = "shotglassbrown"
name = "shot of hard cider"
desc = "Not meant to be drunk from a shot glass."
if("rum")
icon_state = "shotglassbrown"
name = "shot of rum"
desc = "You dirty pirate."
if("b52")
icon_state = "b52glass"
name = "B-52"
desc = "Kahlua, Irish Cream, and cognac. You will get bombed."
if("toxinsspecial")
icon_state = "toxinsspecialglass"
name = "Toxins Special"
desc = "Whoah, this thing is on FIRE!"
if ("vermouth")
icon_state = "shotglassclear"
name = "shot of vermouth"
desc = "This better be going in a martini."
if ("tequila")
icon_state = "shotglassgold"
name = "shot of tequila"
desc = "Bad decisions ahead!"
if ("patron")
icon_state = "shotglassclear"
name = "shot of patron"
desc = "The good stuff. Goes great with a lime wedge."
if ("kahlua")
icon_state = "shotglasscream"
name = "shot of coffee liqueur"
desc = "Doesn't look too appetizing..."
if ("nothing")
icon_state = "shotglass"
name = "shot of nothing"
desc = "The mime insists there's booze in the glass. You're not so sure."
if ("goldschlager")
icon_state = "shotglassgold"
name = "shot of goldschlager"
desc = "Yup. You're officially a college girl."
if ("cognac")
icon_state = "shotglassbrown"
name = "shot of cognac"
desc = "You get the feeling this would piss off a rich person somewhere."
if ("wine")
icon_state = "shotglassred"
name = "shot of wine"
desc = "What kind of craven oaf would drink wine from a shot glass?"
if ("blood")
icon_state = "shotglassred"
name = "shot of blood"
desc = "If you close your eyes it sort of tastes like wine..."
if ("liquidgibs")
icon_state = "shotglassred"
name = "shot of gibs"
desc = "...Let's not talk about this."
if ("absinthe")
icon_state = "shotglassgreen"
name = "shot of absinthe"
desc = "I am stuck in the cycles of my guilt..."
else
icon_state = "shotglassbrown"
name = "shot of... what?"
desc = "You can't really tell what's in the glass."
var/datum/reagent/largest_reagent = reagents.get_master_reagent()
name = "filled shot glass"
desc = "The challenge is not taking as many as you can, but guessing what it is before you pass out."
if(largest_reagent.shot_glass_icon_state)
icon_state = largest_reagent.shot_glass_icon_state
else
icon_state = "shotglassclear"
var/image/I = image(icon, "shotglassoverlay")
I.color = mix_color_from_reagents(reagents.reagent_list)
add_overlay(I)
else
icon_state = "shotglass"
name = "shot glass"
@@ -16,7 +16,7 @@
var/icon_on = "smartfridge"
var/icon_off = "smartfridge-off"
/obj/machinery/smartfridge/New()
/obj/machinery/smartfridge/Initialize()
..()
create_reagents()
reagents.set_reacting(FALSE)
+3 -3
View File
@@ -124,10 +124,10 @@
if(istype(I, /obj/item/projectile))
return
if(prob(50))
I.loc = src.loc
visible_message("<span class='warning'> Swish! \the [I] lands in \the [src].</span>")
I.forceMove(get_turf(src))
visible_message("<span class='warning'>Swish! [I] lands in [src].</span>")
else
visible_message("<span class='danger'> \the [I] bounces off of \the [src]'s rim!</span>")
visible_message("<span class='danger'>[I] bounces off of [src]'s rim!</span>")
return 0
else
return ..()
+5 -3
View File
@@ -389,16 +389,18 @@
name = "dusty survival pod storage"
desc = "A heated storage unit. This one's seen better days."
/obj/machinery/smartfridge/survival_pod/empty/New()
return()
/obj/machinery/smartfridge/survival_pod/empty/Initialize(mapload)
..(mapload, TRUE)
/obj/machinery/smartfridge/survival_pod/accept_check(obj/item/O)
if(istype(O, /obj/item))
return 1
return 0
/obj/machinery/smartfridge/survival_pod/New()
/obj/machinery/smartfridge/survival_pod/Initialize(mapload, empty)
..()
if(empty)
return
for(var/i in 1 to 5)
var/obj/item/weapon/reagent_containers/food/snacks/donkpocket/warm/W = new(src)
load(W)
+1 -1
View File
@@ -595,7 +595,7 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp
to_chat(src, "<span class='warning'>This creature is too powerful for you to possess!</span>")
return 0
if(can_reenter_corpse || (mind && mind.current))
if(can_reenter_corpse && mind && mind.current)
if(alert(src, "Your soul is still tied to your former life as [mind.current.name], if you go forward there is no going back to that life. Are you sure you wish to continue?", "Move On", "Yes", "No") == "No")
return 0
if(target.key)
@@ -2,11 +2,11 @@
//TODO: Make these simple_animals
var/const/MIN_IMPREGNATION_TIME = 100 //time it takes to impregnate someone
var/const/MAX_IMPREGNATION_TIME = 150
#define MIN_IMPREGNATION_TIME 100 //time it takes to impregnate someone
#define MAX_IMPREGNATION_TIME 150
var/const/MIN_ACTIVE_TIME = 200 //time between being dropped and going idle
var/const/MAX_ACTIVE_TIME = 400
#define MIN_ACTIVE_TIME 200 //time between being dropped and going idle
#define MAX_ACTIVE_TIME 400
/obj/item/clothing/mask/facehugger
name = "alien"
@@ -152,14 +152,6 @@ var/const/MAX_ACTIVE_TIME = 400
// probiscis-blocker handling
if(iscarbon(M))
var/mob/living/carbon/target = M
if(target.wear_mask)
var/obj/item/clothing/W = target.wear_mask
if(W.flags & NODROP)
return FALSE
if(!istype(W,/obj/item/clothing/mask/facehugger))
target.dropItemToGround(W)
target.visible_message("<span class='danger'>[src] tears [W] off of [target]'s face!</span>", \
"<span class='userdanger'>[src] tears [W] off of [target]'s face!</span>")
if(ishuman(M))
var/mob/living/carbon/human/H = M
@@ -168,6 +160,12 @@ var/const/MAX_ACTIVE_TIME = 400
"<span class='userdanger'>[src] smashes against [H]'s [H.head]!</span>")
Die()
return FALSE
if(target.wear_mask)
var/obj/item/clothing/W = target.wear_mask
if(!istype(W,/obj/item/clothing/mask/facehugger) && target.dropItemToGround(W))
target.visible_message("<span class='danger'>[src] tears [W] off of [target]'s face!</span>", \
"<span class='userdanger'>[src] tears [W] off of [target]'s face!</span>")
forceMove(target)
target.equip_to_slot_if_possible(src, slot_wear_mask, 0, 1, 1)
// early returns and validity checks done: attach.
@@ -17,6 +17,9 @@
args[1] = FALSE
Initialize(arglist(args))
/mob/living/carbon/human/dummy/Life()
return
/mob/living/carbon/human/Initialize()
verbs += /mob/living/proc/mob_sleep
verbs += /mob/living/proc/lay_down
@@ -885,6 +885,8 @@
return 1
/datum/species/proc/go_bald(mob/living/carbon/human/H)
if(QDELETED(H)) //may be called from a timer
return
H.facial_hair_style = "Shaved"
H.hair_style = "Bald"
H.update_hair()
@@ -44,6 +44,8 @@
message = Ellipsis(message, 10, 1)
message = treat_message(message)
if(!message)
return
var/list/listening_dead = list()
for(var/mob/M in player_list)
+2
View File
@@ -112,6 +112,8 @@ var/list/crit_allowed_modes = list(MODE_WHISPER,MODE_CHANGELING,MODE_ALIEN)
if(message_mode != MODE_WHISPER) //whisper() calls treat_message(); double process results in "hisspering"
message = treat_message(message)
if(!message)
return
spans += get_spans()
@@ -4,6 +4,8 @@
stat = DEAD
canmove = 0
card.removePersonality()
if(holoform)
card.forceMove(loc)
update_sight()
clear_fullscreens()
@@ -419,8 +419,7 @@
return
build_step++
to_chat(user, "<span class='notice'>You complete the Securitron! Beep boop.</span>")
var/mob/living/simple_animal/bot/secbot/S = new /mob/living/simple_animal/bot/secbot
S.loc = get_turf(src)
var/mob/living/simple_animal/bot/secbot/S = new /mob/living/simple_animal/bot/secbot(get_turf(src))
S.name = created_name
S.baton_type = I.type
qdel(I)
@@ -198,7 +198,7 @@
if(!cocoon_target)
var/list/choices = list()
for(var/mob/living/L in view(1,src))
if(L == src | L.anchored)
if(L == src || L.anchored)
continue
if(Adjacent(L))
choices += L
+3 -28
View File
@@ -1,33 +1,8 @@
//handles setting lastKnownIP and computer_id for use by the ban systems as well as checking for multikeying
/mob/proc/update_Login_details()
//Multikey checks and logging
lastKnownIP = client.address
computer_id = client.computer_id
log_access("Login: [key_name(src)] from [lastKnownIP ? lastKnownIP : "localhost"]-[computer_id] || BYOND v[client.byond_version]")
if(config.log_access)
for(var/mob/M in player_list)
if(M == src)
continue
if( M.key && (M.key != key) )
var/matches
if( (M.lastKnownIP == client.address) )
matches += "IP ([client.address])"
if( (M.computer_id == client.computer_id) )
if(matches)
matches += " and "
matches += "ID ([client.computer_id])"
spawn() alert("You have logged in already with another key this round, please log out of this one NOW or risk being banned!")
if(matches)
if(M.client)
message_admins("<font color='red'><B>Notice: </B><font color='blue'>[key_name_admin(src)] has the same [matches] as [key_name_admin(M)].</font>")
log_access("Notice: [key_name(src)] has the same [matches] as [key_name(M)].")
else
message_admins("<font color='red'><B>Notice: </B><font color='blue'>[key_name_admin(src)] has the same [matches] as [key_name_admin(M)] (no longer logged in). </font>")
log_access("Notice: [key_name(src)] has the same [matches] as [key_name(M)] (no longer logged in).")
/mob/Login()
player_list |= src
update_Login_details()
lastKnownIP = client.address
computer_id = client.computer_id
log_access("Mob Login: [key_name(src)] was assigned to a [type]")
world.update_status()
client.screen = list() //remove hud items just in case
client.images = list()
-1
View File
@@ -2,7 +2,6 @@
SStgui.on_logout(src)
unset_machine()
player_list -= src
log_access("Logout: [key_name(src)]")
if(admin_datums[src.ckey])
if (SSticker && SSticker.current_state == GAME_STATE_PLAYING) //Only report this stuff if we are currently playing.
var/admins_number = admins.len
+4 -2
View File
@@ -131,7 +131,8 @@ They *could* go in their appropriate files, but this is supposed to be modular
for(var/datum/tech/current_data in S.stored_research)
to_chat(H, "<span class='notice'>Checking \the [current_data.name] database.</span>")
if(do_after(H, S.s_delay, target = src) && G.candrain && src)
for(var/datum/tech/analyzing_data in files.known_tech)
for(var/id in files.known_tech)
var/datum/tech/analyzing_data = files.known_tech[id]
if(current_data.id == analyzing_data.id)
if(analyzing_data.level > current_data.level)
to_chat(H, "<span class='notice'>Database:</span> <b>UPDATED</b>.")
@@ -162,7 +163,8 @@ They *could* go in their appropriate files, but this is supposed to be modular
for(var/datum/tech/current_data in S.stored_research)
to_chat(H, "<span class='notice'>Checking \the [current_data.name] database.</span>")
if(do_after(H, S.s_delay, target = src) && G.candrain && src)
for(var/datum/tech/analyzing_data in files.known_tech)
for(var/id in files.known_tech)
var/datum/tech/analyzing_data = files.known_tech[id]
if(current_data.id == analyzing_data.id)
if(analyzing_data.level > current_data.level)
to_chat(H, "<span class='notice'>Database:</span> <b>UPDATED</b>.")
+3 -1
View File
@@ -46,7 +46,9 @@ var/global/list/rad_collectors = list()
toggle_power()
user.visible_message("[user.name] turns the [src.name] [active? "on":"off"].", \
"<span class='notice'>You turn the [src.name] [active? "on":"off"].</span>")
investigate_log("turned [active?"<font color='green'>on</font>":"<font color='red'>off</font>"] by [user.key]. [loaded_tank?"Fuel: [round(loaded_tank.air_contents.gases["plasma"][MOLES]/0.29)]%":"<font color='red'>It is empty</font>"].","singulo")
var/fuel = loaded_tank.air_contents.gases["plasma"]
fuel = fuel ? fuel[MOLES] : 0
investigate_log("turned [active?"<font color='green'>on</font>":"<font color='red'>off</font>"] by [user.key]. [loaded_tank?"Fuel: [round(fuel/0.29)]%":"<font color='red'>It is empty</font>"].","singulo")
return
else
to_chat(user, "<span class='warning'>The controls are locked!</span>")
@@ -127,7 +127,7 @@
icon_state = "wt550[magazine ? "-[Ceiling(get_ammo(0)/4)*4]" : ""]"
/obj/item/weapon/gun/ballistic/automatic/mini_uzi
name = "\improper 'Type U3' Uzi"
name = "\improper Type U3 Uzi"
desc = "A lightweight, burst-fire submachine gun, for when you really want someone dead. Uses 9mm rounds."
icon_state = "mini-uzi"
origin_tech = "combat=4;materials=2;syndicate=4"
@@ -240,7 +240,7 @@
// Bulldog shotgun //
/obj/item/weapon/gun/ballistic/automatic/shotgun/bulldog
name = "\improper 'Bulldog' Shotgun"
name = "\improper Bulldog Shotgun"
desc = "A semi-auto, mag-fed shotgun for combat in narrow corridors, nicknamed 'Bulldog' by boarding parties. Compatible only with specialized 8-round drum magazines."
icon_state = "bulldog"
item_state = "bulldog"
+12
View File
@@ -132,6 +132,18 @@ var/const/INJECT = 5 //injection
return id
/datum/reagents/proc/get_master_reagent()
var/list/cached_reagents = reagent_list
var/datum/reagent/master
var/max_volume = 0
for(var/reagent in cached_reagents)
var/datum/reagent/R = reagent
if(R.volume > max_volume)
max_volume = R.volume
master = R
return master
/datum/reagents/proc/trans_to(obj/target, amount=1, multiplier=1, preserve_data=1, no_react = 0)//if preserve_data=0, the reagents data will be lost. Usefull if you use data for some strange stuff and don't want it to be transferred.
var/list/cached_reagents = reagent_list
if(!target || !total_volume)
@@ -14,6 +14,10 @@
var/description = ""
var/taste_description = "metaphorical salt"
var/taste_mult = 1 //how this taste compares to others. Higher values means it is more noticable
var/glass_name = "glass of ...what?" // use for specialty drinks.
var/glass_desc = "You can't really tell what this is."
var/glass_icon_state = null // Otherwise just sets the icon to a normal glass with the mixture of the reagents in the glass.
var/shot_glass_icon_state = null
var/datum/reagents/holder = null
var/reagent_state = LIQUID
var/list/data
@@ -79,6 +79,8 @@ All effects don't start immediately, but rather get worse over time; the rate is
nutriment_factor = 1 * REAGENTS_METABOLISM
boozepwr = 25
taste_description = "piss water"
glass_name = "glass of beer"
glass_desc = "A freezing pint of beer."
/datum/reagent/consumable/ethanol/beer/green
name = "Green Beer"
@@ -86,6 +88,9 @@ All effects don't start immediately, but rather get worse over time; the rate is
description = "An alcoholic beverage brewed since ancient times on Old Earth. This variety is dyed a festive green."
color = "#A8E61D"
taste_description = "green piss water"
glass_icon_state = "greenbeerglass"
glass_name = "glass of green beer"
glass_desc = "A freezing pint of green beer. Festive."
/datum/reagent/consumable/ethanol/beer/green/on_mob_life(mob/living/M)
if(M.color != color)
@@ -101,6 +106,10 @@ All effects don't start immediately, but rather get worse over time; the rate is
description = "A widely known, Mexican coffee-flavoured liqueur. In production since 1936!"
color = "#664300" // rgb: 102, 67, 0
boozepwr = 45
glass_icon_state = "kahluaglass"
glass_name = "glass of RR Coffee Liquor"
glass_desc = "DAMN, THIS THING LOOKS ROBUST!"
shot_glass_icon_state = "shotglasscream"
/datum/reagent/consumable/ethanol/kahlua/on_mob_life(mob/living/M)
M.dizziness = max(0,M.dizziness-5)
@@ -116,6 +125,10 @@ All effects don't start immediately, but rather get worse over time; the rate is
color = "#664300" // rgb: 102, 67, 0
boozepwr = 75
taste_description = "molasses"
glass_icon_state = "whiskeyglass"
glass_name = "glass of whiskey"
glass_desc = "The silky, smokey whiskey goodness inside the glass makes the drink look very classy."
shot_glass_icon_state = "shotglassbrown"
/datum/reagent/consumable/ethanol/thirteenloko
name = "Thirteen Loko"
@@ -125,6 +138,10 @@ All effects don't start immediately, but rather get worse over time; the rate is
nutriment_factor = 1 * REAGENTS_METABOLISM
boozepwr = 80
taste_description = "jitters and death"
glass_icon_state = "thirteen_loko_glass"
glass_name = "glass of Thirteen Loko"
glass_desc = "This is a glass of Thirteen Loko, it appears to be of the highest quality. The drink, not the glass."
/datum/reagent/consumable/ethanol/thirteenloko/on_mob_life(mob/living/M)
M.drowsyness = max(0,M.drowsyness-7)
@@ -141,6 +158,10 @@ All effects don't start immediately, but rather get worse over time; the rate is
color = "#0064C8" // rgb: 0, 100, 200
boozepwr = 65
taste_description = "grain alcohol"
glass_icon_state = "ginvodkaglass"
glass_name = "glass of vodka"
glass_desc = "The glass contain wodka. Xynta."
shot_glass_icon_state = "shotglassclear"
/datum/reagent/consumable/ethanol/vodka/on_mob_life(mob/living/M)
M.radiation = max(M.radiation-2,0)
@@ -154,6 +175,9 @@ All effects don't start immediately, but rather get worse over time; the rate is
nutriment_factor = 2 * REAGENTS_METABOLISM
boozepwr = 15
taste_description = "desperation and lactate"
glass_icon_state = "glass_brown"
glass_name = "glass of bilk"
glass_desc = "A brew of milk and beer. For those alcoholics who fear osteoporosis."
/datum/reagent/consumable/ethanol/bilk/on_mob_life(mob/living/M)
if(M.getBruteLoss() && prob(10))
@@ -168,6 +192,9 @@ All effects don't start immediately, but rather get worse over time; the rate is
color = "#666340" // rgb: 102, 99, 64
boozepwr = 10
taste_description = "dryness"
glass_icon_state = "threemileislandglass"
glass_name = "Three Mile Island Ice Tea"
glass_desc = "A glass of this is sure to prevent a meltdown."
/datum/reagent/consumable/ethanol/threemileisland/on_mob_life(mob/living/M)
M.set_drugginess(50)
@@ -180,6 +207,9 @@ All effects don't start immediately, but rather get worse over time; the rate is
color = "#664300" // rgb: 102, 67, 0
boozepwr = 45
taste_description = "an alcoholic christmas tree"
glass_icon_state = "ginvodkaglass"
glass_name = "glass of gin"
glass_desc = "A crystal clear glass of Griffeater gin."
/datum/reagent/consumable/ethanol/rum
name = "Rum"
@@ -188,6 +218,10 @@ All effects don't start immediately, but rather get worse over time; the rate is
color = "#664300" // rgb: 102, 67, 0
boozepwr = 60
taste_description = "spiked butterscotch"
glass_icon_state = "rumglass"
glass_name = "glass of rum"
glass_desc = "Now you want to Pray for a pirate suit, don't you?"
shot_glass_icon_state = "shotglassbrown"
/datum/reagent/consumable/ethanol/tequila
name = "Tequila"
@@ -196,6 +230,10 @@ All effects don't start immediately, but rather get worse over time; the rate is
color = "#FFFF91" // rgb: 255, 255, 145
boozepwr = 70
taste_description = "paint stripper"
glass_icon_state = "tequilaglass"
glass_name = "glass of tequila"
glass_desc = "Now all that's missing is the weird colored shades!"
shot_glass_icon_state = "shotglassgold"
/datum/reagent/consumable/ethanol/vermouth
name = "Vermouth"
@@ -204,6 +242,10 @@ All effects don't start immediately, but rather get worse over time; the rate is
color = "#91FF91" // rgb: 145, 255, 145
boozepwr = 45
taste_description = "dry alcohol"
glass_icon_state = "vermouthglass"
glass_name = "glass of vermouth"
glass_desc = "You wonder why you're even drinking this straight."
shot_glass_icon_state = "shotglassclear"
/datum/reagent/consumable/ethanol/wine
name = "Wine"
@@ -212,6 +254,10 @@ All effects don't start immediately, but rather get worse over time; the rate is
color = "#7E4043" // rgb: 126, 64, 67
boozepwr = 35
taste_description = "bitter sweetness"
glass_icon_state = "wineglass"
glass_name = "glass of wine"
glass_desc = "A very classy looking drink."
shot_glass_icon_state = "shotglassred"
/datum/reagent/consumable/ethanol/lizardwine
name = "Lizard wine"
@@ -228,6 +274,9 @@ All effects don't start immediately, but rather get worse over time; the rate is
color = "#F8EBF1"
boozepwr = 45
taste_description = "classy bitter sweetness"
glass_icon_state = "grappa"
glass_name = "glass of grappa"
glass_desc = "A fine drink originally made to prevent waste by using the leftovers from winemaking."
/datum/reagent/consumable/ethanol/cognac
name = "Cognac"
@@ -236,6 +285,10 @@ All effects don't start immediately, but rather get worse over time; the rate is
color = "#AB3C05" // rgb: 171, 60, 5
boozepwr = 75
taste_description = "angry and irish"
glass_icon_state = "cognacglass"
glass_name = "glass of cognac"
glass_desc = "Damn, you feel like some kind of French aristocrat just by holding this."
shot_glass_icon_state = "shotglassbrown"
/datum/reagent/consumable/ethanol/absinthe
name = "Absinthe"
@@ -244,6 +297,10 @@ All effects don't start immediately, but rather get worse over time; the rate is
color = rgb(10, 206, 0)
boozepwr = 80 //Very strong even by default
taste_description = "death and licorice"
glass_icon_state = "absinthe"
glass_name = "glass of absinthe"
glass_desc = "It's as strong as it smells."
shot_glass_icon_state = "shotglassgreen"
/datum/reagent/consumable/ethanol/absinthe/on_mob_life(mob/living/M)
if(prob(10))
@@ -257,6 +314,10 @@ All effects don't start immediately, but rather get worse over time; the rate is
color = "#664300" // rgb: 102, 67, 0
boozepwr = 100
taste_description = "pure resignation"
glass_icon_state = "glass_brown2"
glass_name = "Hooch"
glass_desc = "You've really hit rock bottom now... your liver packed its bags and left last night."
/datum/reagent/consumable/ethanol/ale
name = "Ale"
@@ -265,6 +326,9 @@ All effects don't start immediately, but rather get worse over time; the rate is
color = "#664300" // rgb: 102, 67, 0
boozepwr = 65
taste_description = "hearty barley ale"
glass_icon_state = "aleglass"
glass_name = "glass of ale"
glass_desc = "A freezing pint of delicious Ale."
/datum/reagent/consumable/ethanol/goldschlager
name = "Goldschlager"
@@ -273,6 +337,10 @@ All effects don't start immediately, but rather get worse over time; the rate is
color = "#FFFF91" // rgb: 255, 255, 145
boozepwr = 25
taste_description = "burning cinnamon"
glass_icon_state = "goldschlagerglass"
glass_name = "glass of Goldschlager"
glass_desc = "100% proof that teen girls will drink anything with gold in it."
shot_glass_icon_state = "shotglassgold"
/datum/reagent/consumable/ethanol/patron
name = "Patron"
@@ -281,6 +349,10 @@ All effects don't start immediately, but rather get worse over time; the rate is
color = "#585840" // rgb: 88, 88, 64
boozepwr = 60
taste_description = "metallic and expensive"
glass_icon_state = "patronglass"
glass_name = "glass of patron"
glass_desc = "Drinking patron in the bar, with all the subpar ladies."
shot_glass_icon_state = "shotglassclear"
/datum/reagent/consumable/ethanol/gintonic
name = "Gin and Tonic"
@@ -289,6 +361,9 @@ All effects don't start immediately, but rather get worse over time; the rate is
color = "#664300" // rgb: 102, 67, 0
boozepwr = 25
taste_description = "mild and tart"
glass_icon_state = "gintonicglass"
glass_name = "Gin and Tonic"
glass_desc = "A mild but still great cocktail. Drink up, like a true Englishman."
/datum/reagent/consumable/ethanol/cuba_libre
name = "Cuba Libre"
@@ -297,6 +372,9 @@ All effects don't start immediately, but rather get worse over time; the rate is
color = "#3E1B00" // rgb: 62, 27, 0
boozepwr = 50
taste_description = "cola"
glass_icon_state = "cubalibreglass"
glass_name = "Cuba Libre"
glass_desc = "A classic mix of rum and cola."
/datum/reagent/consumable/ethanol/cuba_libre/on_mob_life(mob/living/M)
if(M.mind && M.mind.special_role in list("Revolutionary", "Head Revolutionary")) //Cuba Libre, the traditional drink of revolutions! Heals revolutionaries.
@@ -314,6 +392,9 @@ All effects don't start immediately, but rather get worse over time; the rate is
color = "#3E1B00" // rgb: 62, 27, 0
boozepwr = 70
taste_description = "cola"
glass_icon_state = "whiskeycolaglass"
glass_name = "Whiskey Cola"
glass_desc = "An innocent-looking mixture of cola and Whiskey. Delicious."
/datum/reagent/consumable/ethanol/martini
name = "Classic Martini"
@@ -322,6 +403,9 @@ All effects don't start immediately, but rather get worse over time; the rate is
color = "#664300" // rgb: 102, 67, 0
boozepwr = 60
taste_description = "dry class"
glass_icon_state = "martiniglass"
glass_name = "Classic Martini"
glass_desc = "Damn, the bartender even stirred it, not shook it."
/datum/reagent/consumable/ethanol/vodkamartini
name = "Vodka Martini"
@@ -330,6 +414,9 @@ All effects don't start immediately, but rather get worse over time; the rate is
color = "#664300" // rgb: 102, 67, 0
boozepwr = 65
taste_description = "shaken, not stirred"
glass_icon_state = "martiniglass"
glass_name = "Vodka martini"
glass_desc ="A bastardisation of the classic martini. Still great."
/datum/reagent/consumable/ethanol/white_russian
name = "White Russian"
@@ -338,6 +425,9 @@ All effects don't start immediately, but rather get worse over time; the rate is
color = "#A68340" // rgb: 166, 131, 64
boozepwr = 50
taste_description = "bitter cream"
glass_icon_state = "whiterussianglass"
glass_name = "White Russian"
glass_desc = "A very nice looking drink. But that's just, like, your opinion, man."
/datum/reagent/consumable/ethanol/screwdrivercocktail
name = "Screwdriver"
@@ -346,6 +436,9 @@ All effects don't start immediately, but rather get worse over time; the rate is
color = "#A68310" // rgb: 166, 131, 16
boozepwr = 55
taste_description = "oranges"
glass_icon_state = "screwdriverglass"
glass_name = "Screwdriver"
glass_desc = "A simple, yet superb mixture of Vodka and orange juice. Just the thing for the tired engineer."
/datum/reagent/consumable/ethanol/screwdrivercocktail/on_mob_life(mob/living/M)
if(M.mind && M.mind.assigned_role in list("Station Engineer", "Atmospheric Technician", "Chief Engineer")) //Engineers lose radiation poisoning at a massive rate.
@@ -359,6 +452,9 @@ All effects don't start immediately, but rather get worse over time; the rate is
color = "#8CFF8C" // rgb: 140, 255, 140
boozepwr = 45
taste_description = "sweet 'n creamy"
glass_icon_state = "booger"
glass_name = "Booger"
glass_desc = "Ewww..."
/datum/reagent/consumable/ethanol/bloody_mary
name = "Bloody Mary"
@@ -367,6 +463,9 @@ All effects don't start immediately, but rather get worse over time; the rate is
color = "#664300" // rgb: 102, 67, 0
boozepwr = 55
taste_description = "tomatoes with a hint of lime"
glass_icon_state = "bloodymaryglass"
glass_name = "Bloody Mary"
glass_desc = "Tomato juice, mixed with Vodka and a lil' bit of lime. Tastes like liquid murder."
/datum/reagent/consumable/ethanol/brave_bull
name = "Brave Bull"
@@ -375,6 +474,9 @@ All effects don't start immediately, but rather get worse over time; the rate is
color = "#664300" // rgb: 102, 67, 0
boozepwr = 80
taste_description = "alcoholic bravery"
glass_icon_state = "bravebullglass"
glass_name = "Brave Bull"
glass_desc = "Tequila and Coffee liqueur, brought together in a mouthwatering mixture. Drink up."
/datum/reagent/consumable/ethanol/brave_bull/on_mob_life(mob/living/M)
if(M.maxHealth == initial(M.maxHealth)) //Brave Bull makes you sturdier, and thus capable of withstanding a tiny bit more punishment.
@@ -393,6 +495,9 @@ All effects don't start immediately, but rather get worse over time; the rate is
color = "#FFE48C" // rgb: 255, 228, 140
boozepwr = 45
taste_description = "oranges"
glass_icon_state = "tequilasunriseglass"
glass_name = "tequila Sunrise"
glass_desc = "Oh great, now you feel nostalgic about sunrises back on Terra..."
/datum/reagent/consumable/ethanol/toxins_special
name = "Toxins Special"
@@ -401,6 +506,10 @@ All effects don't start immediately, but rather get worse over time; the rate is
color = "#664300" // rgb: 102, 67, 0
boozepwr = 25
taste_description = "spicy toxins"
glass_icon_state = "toxinsspecialglass"
glass_name = "Toxins Special"
glass_desc = "Whoah, this thing is on FIRE!"
shot_glass_icon_state = "toxinsspecialglass"
/datum/reagent/consumable/ethanol/toxins_special/on_mob_life(var/mob/living/M as mob)
if (M.bodytemperature < 330)
@@ -415,6 +524,9 @@ All effects don't start immediately, but rather get worse over time; the rate is
boozepwr = 90 //THE FIST OF THE LAW IS STRONG AND HARD
metabolization_rate = 0.8
taste_description = "JUSTICE"
glass_icon_state = "beepskysmashglass"
glass_name = "Beepsky Smash"
glass_desc = "Heavy, hot and strong. Just like the Iron fist of the LAW."
/datum/reagent/consumable/ethanol/beepsky_smash/on_mob_life(mob/living/M)
M.Stun(2, 0)
@@ -427,6 +539,9 @@ All effects don't start immediately, but rather get worse over time; the rate is
color = "#664300" // rgb: 102, 67, 0
boozepwr = 70
taste_description = "creamy alcohol"
glass_icon_state = "irishcreamglass"
glass_name = "Irish Cream"
glass_desc = "It's cream, mixed with whiskey. What else would you expect from the Irish?"
/datum/reagent/consumable/ethanol/manly_dorf
name = "The Manly Dorf"
@@ -435,6 +550,9 @@ All effects don't start immediately, but rather get worse over time; the rate is
color = "#664300" // rgb: 102, 67, 0
boozepwr = 100 //For the manly only
taste_description = "hair on your chest and your chin"
glass_icon_state = "manlydorfglass"
glass_name = "The Manly Dorf"
glass_desc = "A manly concoction made from Ale and Beer. Intended for true men only."
/datum/reagent/consumable/ethanol/longislandicedtea
name = "Long Island Iced Tea"
@@ -443,6 +561,10 @@ All effects don't start immediately, but rather get worse over time; the rate is
color = "#664300" // rgb: 102, 67, 0
boozepwr = 35
taste_description = "a mixture of cola and alcohol"
glass_icon_state = "longislandicedteaglass"
glass_name = "Long Island Iced Tea"
glass_desc = "The liquor cabinet, brought together in a delicious mix. Intended for middle-aged alcoholic women only."
/datum/reagent/consumable/ethanol/moonshine
name = "Moonshine"
@@ -451,6 +573,9 @@ All effects don't start immediately, but rather get worse over time; the rate is
color = "#664300" // rgb: 102, 67, 0
boozepwr = 95
taste_description = "bitterness"
glass_icon_state = "glass_clear"
glass_name = "Moonshine"
glass_desc = "You've really hit rock bottom now... your liver packed its bags and left last night."
/datum/reagent/consumable/ethanol/b52
name = "B-52"
@@ -459,6 +584,10 @@ All effects don't start immediately, but rather get worse over time; the rate is
color = "#664300" // rgb: 102, 67, 0
boozepwr = 85
taste_description = "angry and irish"
glass_icon_state = "b52glass"
glass_name = "B-52"
glass_desc = "Kahlua, Irish Cream, and cognac. You will get bombed."
shot_glass_icon_state = "b52glass"
/datum/reagent/consumable/ethanol/irishcoffee
name = "Irish Coffee"
@@ -467,6 +596,9 @@ All effects don't start immediately, but rather get worse over time; the rate is
color = "#664300" // rgb: 102, 67, 0
boozepwr = 35
taste_description = "giving up on the day"
glass_icon_state = "irishcoffeeglass"
glass_name = "Irish Coffee"
glass_desc = "Coffee and alcohol. More fun than a Mimosa to drink in the morning."
/datum/reagent/consumable/ethanol/margarita
name = "Margarita"
@@ -475,6 +607,9 @@ All effects don't start immediately, but rather get worse over time; the rate is
color = "#8CFF8C" // rgb: 140, 255, 140
boozepwr = 35
taste_description = "dry and salty"
glass_icon_state = "margaritaglass"
glass_name = "Margarita"
glass_desc = "On the rocks with salt on the rim. Arriba~!"
/datum/reagent/consumable/ethanol/black_russian
name = "Black Russian"
@@ -483,6 +618,10 @@ All effects don't start immediately, but rather get worse over time; the rate is
color = "#360000" // rgb: 54, 0, 0
boozepwr = 70
taste_description = "bitterness"
glass_icon_state = "blackrussianglass"
glass_name = "Black Russian"
glass_desc = "For the lactose-intolerant. Still as classy as a White Russian."
/datum/reagent/consumable/ethanol/manhattan
name = "Manhattan"
@@ -491,6 +630,10 @@ All effects don't start immediately, but rather get worse over time; the rate is
color = "#664300" // rgb: 102, 67, 0
boozepwr = 30
taste_description = "mild dryness"
glass_icon_state = "manhattanglass"
glass_name = "Manhattan"
glass_desc = "The Detective's undercover drink of choice. He never could stomach gin..."
/datum/reagent/consumable/ethanol/manhattan_proj
name = "Manhattan Project"
@@ -499,6 +642,10 @@ All effects don't start immediately, but rather get worse over time; the rate is
color = "#664300" // rgb: 102, 67, 0
boozepwr = 45
taste_description = "death, the destroyer of worlds"
glass_icon_state = "proj_manhattanglass"
glass_name = "Manhattan Project"
glass_desc = "A scientist's drink of choice, for thinking how to blow up the station."
/datum/reagent/consumable/ethanol/manhattan_proj/on_mob_life(mob/living/M)
M.set_drugginess(30)
@@ -511,6 +658,9 @@ All effects don't start immediately, but rather get worse over time; the rate is
color = "#664300" // rgb: 102, 67, 0
boozepwr = 70
taste_description = "soda"
glass_icon_state = "whiskeysodaglass2"
glass_name = "Whiskey Soda"
glass_desc = "Ultimate refreshment."
/datum/reagent/consumable/ethanol/antifreeze
name = "Anti-freeze"
@@ -519,6 +669,9 @@ All effects don't start immediately, but rather get worse over time; the rate is
color = "#664300" // rgb: 102, 67, 0
boozepwr = 35
taste_description = "Jack Frost's piss"
glass_icon_state = "antifreeze"
glass_name = "Anti-freeze"
glass_desc = "The ultimate refreshment."
/datum/reagent/consumable/ethanol/antifreeze/on_mob_life(mob/living/M)
if (M.bodytemperature < 330)
@@ -532,6 +685,9 @@ All effects don't start immediately, but rather get worse over time; the rate is
color = "#664300" // rgb: 102, 67, 0
boozepwr = 45
taste_description = "creamy berries"
glass_icon_state = "b&p"
glass_name = "Barefoot"
glass_desc = "Barefoot and pregnant."
/datum/reagent/consumable/ethanol/barefoot/on_mob_life(mob/living/M)
if(ishuman(M)) //Barefoot causes the imbiber to quickly regenerate brute trauma if they're not wearing shoes.
@@ -548,6 +704,9 @@ All effects don't start immediately, but rather get worse over time; the rate is
color = "#FFFFFF" // rgb: 255, 255, 255
boozepwr = 35
taste_description = "refreshing cold"
glass_icon_state = "snowwhite"
glass_name = "Snow White"
glass_desc = "A cold refreshment."
/datum/reagent/consumable/ethanol/demonsblood //Prevents the imbiber from being dragged into a pool of blood by a slaughter demon.
name = "Demon's Blood"
@@ -556,6 +715,9 @@ All effects don't start immediately, but rather get worse over time; the rate is
color = "#820000" // rgb: 130, 0, 0
boozepwr = 75
taste_description = "sweet tasting iron"
glass_icon_state = "demonsblood"
glass_name = "Demons Blood"
glass_desc = "Just looking at this thing makes the hair at the back of your neck stand up."
/datum/reagent/consumable/ethanol/devilskiss //If eaten by a slaughter demon, the demon will regret it.
name = "Devil's Kiss"
@@ -564,6 +726,9 @@ All effects don't start immediately, but rather get worse over time; the rate is
color = "#A68310" // rgb: 166, 131, 16
boozepwr = 70
taste_description = "bitter iron"
glass_icon_state = "devilskiss"
glass_name = "Devils Kiss"
glass_desc = "Creepy time!"
/datum/reagent/consumable/ethanol/vodkatonic
name = "Vodka and Tonic"
@@ -572,6 +737,10 @@ All effects don't start immediately, but rather get worse over time; the rate is
color = "#0064C8" // rgb: 0, 100, 200
boozepwr = 70
taste_description = "tart bitterness"
glass_icon_state = "vodkatonicglass"
glass_name = "Vodka and Tonic"
glass_desc = "For when a gin and tonic isn't Russian enough."
/datum/reagent/consumable/ethanol/ginfizz
name = "Gin Fizz"
@@ -580,6 +749,10 @@ All effects don't start immediately, but rather get worse over time; the rate is
color = "#664300" // rgb: 102, 67, 0
boozepwr = 45
taste_description = "dry, tart lemons"
glass_icon_state = "ginfizzglass"
glass_name = "Gin Fizz"
glass_desc = "Refreshingly lemony, deliciously dry."
/datum/reagent/consumable/ethanol/bahama_mama
name = "Bahama Mama"
@@ -588,6 +761,9 @@ All effects don't start immediately, but rather get worse over time; the rate is
color = "#FF7F3B" // rgb: 255, 127, 59
boozepwr = 35
taste_description = "lime and orange"
glass_icon_state = "bahama_mama"
glass_name = "Bahama Mama"
glass_desc = "Tropical cocktail."
/datum/reagent/consumable/ethanol/singulo
name = "Singulo"
@@ -596,6 +772,9 @@ All effects don't start immediately, but rather get worse over time; the rate is
color = "#2E6671" // rgb: 46, 102, 113
boozepwr = 35
taste_description = "concentrated matter"
glass_icon_state = "singulo"
glass_name = "Singulo"
glass_desc = "A blue-space beverage."
/datum/reagent/consumable/ethanol/sbiten
name = "Sbiten"
@@ -604,6 +783,9 @@ All effects don't start immediately, but rather get worse over time; the rate is
color = "#664300" // rgb: 102, 67, 0
boozepwr = 70
taste_description = "hot and spice"
glass_icon_state = "sbitenglass"
glass_name = "Sbiten"
glass_desc = "A spicy mix of Vodka and Spice. Very hot."
/datum/reagent/consumable/ethanol/sbiten/on_mob_life(mob/living/M)
if (M.bodytemperature < 360)
@@ -617,6 +799,9 @@ All effects don't start immediately, but rather get worse over time; the rate is
color = "#C73C00" // rgb: 199, 60, 0
boozepwr = 51 //Red drinks are stronger
taste_description = "sweet and salty alcohol"
glass_icon_state = "red_meadglass"
glass_name = "Red Mead"
glass_desc = "A True Viking's Beverage, though its color is strange."
/datum/reagent/consumable/ethanol/mead
name = "Mead"
@@ -626,6 +811,9 @@ All effects don't start immediately, but rather get worse over time; the rate is
nutriment_factor = 1 * REAGENTS_METABOLISM
boozepwr = 50
taste_description = "sweet, sweet alcohol"
glass_icon_state = "meadglass"
glass_name = "Mead"
glass_desc = "A Viking's Beverage, though a cheap one."
/datum/reagent/consumable/ethanol/iced_beer
name = "Iced Beer"
@@ -634,6 +822,9 @@ All effects don't start immediately, but rather get worse over time; the rate is
color = "#664300" // rgb: 102, 67, 0
boozepwr = 15
taste_description = "refreshingly cold"
glass_icon_state = "iced_beerglass"
glass_name = "Iced Beer"
glass_desc = "A beer so frosty, the air around it freezes."
/datum/reagent/consumable/ethanol/iced_beer/on_mob_life(mob/living/M)
if(M.bodytemperature > 270)
@@ -647,6 +838,10 @@ All effects don't start immediately, but rather get worse over time; the rate is
color = "#664300" // rgb: 102, 67, 0
boozepwr = 1 //Basically nothing
taste_description = "a poor excuse for alcohol"
glass_icon_state = "grogglass"
glass_name = "Grog"
glass_desc = "A fine and cepa drink for Space."
/datum/reagent/consumable/ethanol/aloe
name = "Aloe"
@@ -655,6 +850,9 @@ All effects don't start immediately, but rather get worse over time; the rate is
color = "#664300" // rgb: 102, 67, 0
boozepwr = 35
taste_description = "sweet 'n creamy"
glass_icon_state = "aloe"
glass_name = "Aloe"
glass_desc = "Very, very, very good."
/datum/reagent/consumable/ethanol/andalusia
name = "Andalusia"
@@ -663,6 +861,9 @@ All effects don't start immediately, but rather get worse over time; the rate is
color = "#664300" // rgb: 102, 67, 0
boozepwr = 40
taste_description = "lemons"
glass_icon_state = "andalusia"
glass_name = "Andalusia"
glass_desc = "A nice, strangely named drink."
/datum/reagent/consumable/ethanol/alliescocktail
name = "Allies Cocktail"
@@ -671,6 +872,9 @@ All effects don't start immediately, but rather get worse over time; the rate is
color = "#664300" // rgb: 102, 67, 0
boozepwr = 45
taste_description = "bitter yet free"
glass_icon_state = "alliescocktail"
glass_name = "Allies cocktail"
glass_desc = "A drink made from your allies."
/datum/reagent/consumable/ethanol/acid_spit
name = "Acid Spit"
@@ -679,6 +883,9 @@ All effects don't start immediately, but rather get worse over time; the rate is
color = "#365000" // rgb: 54, 80, 0
boozepwr = 80
taste_description = "stomach acid"
glass_icon_state = "acidspitglass"
glass_name = "Acid Spit"
glass_desc = "A drink from Nanotrasen. Made from live aliens."
/datum/reagent/consumable/ethanol/amasec
name = "Amasec"
@@ -687,6 +894,9 @@ All effects don't start immediately, but rather get worse over time; the rate is
color = "#664300" // rgb: 102, 67, 0
boozepwr = 35
taste_description = "dark and metallic"
glass_icon_state = "amasecglass"
glass_name = "Amasec"
glass_desc = "Always handy before COMBAT!!!"
/datum/reagent/consumable/ethanol/changelingsting
name = "Changeling Sting"
@@ -695,6 +905,9 @@ All effects don't start immediately, but rather get worse over time; the rate is
color = "#2E6671" // rgb: 46, 102, 113
boozepwr = 95
taste_description = "your brain coming out your nose"
glass_icon_state = "changelingsting"
glass_name = "Changeling Sting"
glass_desc = "A stingy drink."
/datum/reagent/consumable/ethanol/changelingsting/on_mob_life(mob/living/M)
if(M.mind && M.mind.changeling) //Changeling Sting assists in the recharging of changeling chemicals.
@@ -709,6 +922,9 @@ All effects don't start immediately, but rather get worse over time; the rate is
color = "#2E6671" // rgb: 46, 102, 113
boozepwr = 25
taste_description = "delicious anger"
glass_icon_state = "irishcarbomb"
glass_name = "Irish Car Bomb"
glass_desc = "An Irish car bomb."
/datum/reagent/consumable/ethanol/syndicatebomb
name = "Syndicate Bomb"
@@ -717,6 +933,9 @@ All effects don't start immediately, but rather get worse over time; the rate is
color = "#2E6671" // rgb: 46, 102, 113
boozepwr = 90
taste_description = "purified antagonism"
glass_icon_state = "syndicatebomb"
glass_name = "Syndicate Bomb"
glass_desc = "A syndicate bomb."
/datum/reagent/consumable/ethanol/syndicatebomb/on_mob_life(mob/living/M)
if(prob(5))
@@ -730,6 +949,9 @@ All effects don't start immediately, but rather get worse over time; the rate is
color = "#2E6671" // rgb: 46, 102, 113
boozepwr = 35
taste_description = "tartness and bananas"
glass_icon_state = "erikasurprise"
glass_name = "Erika Surprise"
glass_desc = "The surprise is, it's green!"
/datum/reagent/consumable/ethanol/driestmartini
name = "Driest Martini"
@@ -739,6 +961,9 @@ All effects don't start immediately, but rather get worse over time; the rate is
color = "#2E6671" // rgb: 46, 102, 113
boozepwr = 65
taste_description = "a beach"
glass_icon_state = "driestmartiniglass"
glass_name = "Driest Martini"
glass_desc = "Only for the experienced. You think you see sand floating in the glass."
/datum/reagent/consumable/ethanol/bananahonk
name = "Banana Mama"
@@ -748,6 +973,9 @@ All effects don't start immediately, but rather get worse over time; the rate is
color = "#FFFF91" // rgb: 255, 255, 140
boozepwr = 60
taste_description = "a bad joke"
glass_icon_state = "bananahonkglass"
glass_name = "Banana Honk"
glass_desc = "A drink from Clown Heaven."
/datum/reagent/consumable/ethanol/bananahonk/on_mob_life(mob/living/M)
if((ishuman(M) && M.job in list("Clown") ) || ismonkey(M))
@@ -763,6 +991,9 @@ All effects don't start immediately, but rather get worse over time; the rate is
color = "#664300" // rgb: 102, 67, 0
boozepwr = 59 //Proof that clowns are better than mimes right here
taste_description = "a pencil eraser"
glass_icon_state = "silencerglass"
glass_name = "Silencer"
glass_desc = "A drink from Mime Heaven."
/datum/reagent/consumable/ethanol/silencer/on_mob_life(mob/living/M)
if(ishuman(M) && M.job in list("Mime"))
@@ -777,6 +1008,9 @@ All effects don't start immediately, but rather get worse over time; the rate is
color = "#1EA0FF" // rgb: 102, 67, 0
boozepwr = 50
taste_description = "molasses and a mouthful of pool water"
glass_icon_state = "drunkenblumpkin"
glass_name = "Drunken Blumpkin"
glass_desc = "A drink for the drunks."
/datum/reagent/consumable/ethanol/whiskey_sour //Requested since we had whiskey cola and soda but not sour.
name = "Whiskey Sour"
@@ -785,6 +1019,9 @@ All effects don't start immediately, but rather get worse over time; the rate is
color = rgb(255, 201, 49)
boozepwr = 35
taste_description = "sour lemons"
glass_icon_state = "whiskey_sour"
glass_name = "Whiskey Sour"
glass_desc = "Lemon juice mixed with whiskey and a dash of sugar. Surprisingly satisfying."
/datum/reagent/consumable/ethanol/hcider
name = "Hard Cider"
@@ -794,6 +1031,10 @@ All effects don't start immediately, but rather get worse over time; the rate is
nutriment_factor = 1 * REAGENTS_METABOLISM
boozepwr = 25
taste_description = "apples"
glass_icon_state = "whiskeyglass"
glass_name = "Hard Cider"
glass_desc = "Tastes like autumn."
shot_glass_icon_state = "shotglassbrown"
/datum/reagent/consumable/ethanol/fetching_fizz //A reference to one of my favorite games of all time. Pulls nearby ores to the imbiber!
@@ -804,6 +1045,10 @@ All effects don't start immediately, but rather get worse over time; the rate is
boozepwr = 10
metabolization_rate = 0.1 * REAGENTS_METABOLISM
taste_description = "charged metal" // the same as teslium, honk honk.
glass_icon_state = "fetching_fizz"
glass_name = "Fetching Fizz"
glass_desc = "Induces magnetism in the imbiber. Started as a barroom prank but evolved to become popular with miners and scrappers. Metallic aftertaste."
/datum/reagent/consumable/ethanol/fetching_fizz/on_mob_life(mob/living/M)
for(var/obj/item/weapon/ore/O in orange(3, M))
@@ -819,6 +1064,9 @@ All effects don't start immediately, but rather get worse over time; the rate is
boozepwr = 10
metabolization_rate = 0.1 * REAGENTS_METABOLISM
taste_description = "bravado in the face of disaster"
glass_icon_state = "hearty_punch"
glass_name = "Hearty Punch"
glass_desc = "Aromatic beverage served piping hot. According to folk tales it can almost wake the dead."
/datum/reagent/consumable/ethanol/hearty_punch/on_mob_life(mob/living/M)
if(M.stat == UNCONSCIOUS && M.health <= 0)
@@ -837,6 +1085,10 @@ All effects don't start immediately, but rather get worse over time; the rate is
color = rgb(51, 19, 3) //Sickly brown
boozepwr = 300 //I warned you
taste_description = "a wall of bricks"
glass_icon_state = "glass_brown2"
glass_name = "Bacchus' Blessing"
glass_desc = "You didn't think it was possible for a liquid to be so utterly revolting. Are you sure about this...?"
/datum/reagent/consumable/ethanol/atomicbomb
@@ -846,6 +1098,9 @@ All effects don't start immediately, but rather get worse over time; the rate is
color = "#666300" // rgb: 102, 99, 0
boozepwr = 0 //custom drunk effect
taste_description = "da bomb"
glass_icon_state = "atomicbombglass"
glass_name = "Atomic Bomb"
glass_desc = "Nanotrasen cannot take legal responsibility for your actions after imbibing."
/datum/reagent/consumable/ethanol/atomicbomb/on_mob_life(mob/living/M)
M.set_drugginess(50)
@@ -871,6 +1126,9 @@ All effects don't start immediately, but rather get worse over time; the rate is
color = "#664300" // rgb: 102, 67, 0
boozepwr = 0 //custom drunk effect
taste_description = "your brains smashed out by a lemon wrapped around a gold brick"
glass_icon_state = "gargleblasterglass"
glass_name = "Pan-Galactic Gargle Blaster"
glass_desc = "Like having your brain smashed out by a slice of lemon wrapped around a large gold brick."
/datum/reagent/consumable/ethanol/gargle_blaster/on_mob_life(mob/living/M)
M.dizziness +=6
@@ -896,6 +1154,9 @@ All effects don't start immediately, but rather get worse over time; the rate is
color = "#2E2E61" // rgb: 46, 46, 97
boozepwr = 0 //custom drunk effect
taste_description = "a numbing sensation"
glass_icon_state = "neurotoxinglass"
glass_name = "Neurotoxin"
glass_desc = "A drink that is guaranteed to knock you silly."
/datum/reagent/consumable/ethanol/neurotoxin/on_mob_life(mob/living/carbon/M)
M.Weaken(3, 1, 0)
@@ -924,6 +1185,9 @@ All effects don't start immediately, but rather get worse over time; the rate is
boozepwr = 0 //custom drunk effect
metabolization_rate = 0.2 * REAGENTS_METABOLISM
taste_description = "giving peace a chance"
glass_icon_state = "hippiesdelightglass"
glass_name = "Hippie's Delight"
glass_desc = "A drink enjoyed by people during the 1960's."
/datum/reagent/consumable/ethanol/hippies_delight/on_mob_life(mob/living/M)
if (!M.slurring)
@@ -965,3 +1229,6 @@ All effects don't start immediately, but rather get worse over time; the rate is
nutriment_factor = 2 * REAGENTS_METABOLISM
boozepwr = 1
taste_description = "custard and alcohol"
glass_icon_state = "glass_yellow"
glass_name = "Eggnog"
glass_desc = "For enjoying the most wonderful time of the year."
@@ -10,6 +10,9 @@
description = "Both delicious AND rich in Vitamin C, what more do you need?"
color = "#E78108" // rgb: 231, 129, 8
taste_description = "oranges"
glass_icon_state = "glass_orange"
glass_name = "glass of orange juice"
glass_desc = "Vitamins! Yay!"
/datum/reagent/consumable/orangejuice/on_mob_life(mob/living/M)
if(M.getOxyLoss() && prob(30))
@@ -23,6 +26,9 @@
description = "Tomatoes made into juice. What a waste of big, juicy tomatoes, huh?"
color = "#731008" // rgb: 115, 16, 8
taste_description = "tomatoes"
glass_icon_state = "glass_red"
glass_name = "glass of tomato juice"
glass_desc = "Are you sure this is tomato juice?"
/datum/reagent/consumable/tomatojuice/on_mob_life(mob/living/M)
if(M.getFireLoss() && prob(20))
@@ -36,6 +42,9 @@
description = "The sweet-sour juice of limes."
color = "#365E30" // rgb: 54, 94, 48
taste_description = "unbearable sourness"
glass_icon_state = "glass_green"
glass_name = "glass of lime juice"
glass_desc = "A glass of sweet-sour lime juice."
/datum/reagent/consumable/limejuice/on_mob_life(mob/living/M)
if(M.getToxLoss() && prob(20))
@@ -49,6 +58,9 @@
description = "It is just like a carrot but without crunching."
color = "#973800" // rgb: 151, 56, 0
taste_description = "carrots"
glass_icon_state = "carrotjuice"
glass_name = "glass of carrot juice"
glass_desc = "It's just like a carrot but without crunching."
/datum/reagent/consumable/carrotjuice/on_mob_life(mob/living/M)
M.adjust_blurriness(-1)
@@ -68,6 +80,9 @@
description = "A delicious blend of several different kinds of berries."
color = "#863333" // rgb: 134, 51, 51
taste_description = "berries"
glass_icon_state = "berryjuice"
glass_name = "glass of berry juice"
glass_desc = "Berry juice. Or maybe it's jam. Who cares?"
/datum/reagent/consumable/applejuice
name = "Apple Juice"
@@ -82,6 +97,9 @@
description = "A tasty juice blended from various kinds of very deadly and toxic berries."
color = "#863353" // rgb: 134, 51, 83
taste_description = "berries"
glass_icon_state = "poisonberryjuice"
glass_name = "glass of berry juice"
glass_desc = "Berry juice. Or maybe it's poison. Who cares?"
/datum/reagent/consumable/poisonberryjuice/on_mob_life(mob/living/M)
M.adjustToxLoss(1, 0)
@@ -94,6 +112,9 @@
description = "Delicious juice made from watermelon."
color = "#863333" // rgb: 134, 51, 51
taste_description = "juicy watermelon"
glass_icon_state = "glass_red"
glass_name = "glass of watermelon juice"
glass_desc = "A glass of watermelon juice."
/datum/reagent/consumable/lemonjuice
name = "Lemon Juice"
@@ -101,6 +122,9 @@
description = "This juice is VERY sour."
color = "#863333" // rgb: 175, 175, 0
taste_description = "sourness"
glass_icon_state = "lemonglass"
glass_name = "glass of lemon juice"
glass_desc = "Sour..."
/datum/reagent/consumable/banana
name = "Banana Juice"
@@ -108,6 +132,9 @@
description = "The raw essence of a banana. HONK"
color = "#863333" // rgb: 175, 175, 0
taste_description = "banana"
glass_icon_state = "banana"
glass_name = "glass of banana juice"
glass_desc = "The raw essence of a banana. HONK."
/datum/reagent/consumable/banana/on_mob_life(mob/living/M)
if((ishuman(M) && M.job in list("Clown") ) || ismonkey(M))
@@ -120,6 +147,10 @@
id = "nothing"
description = "Absolutely nothing."
taste_description = "nothing"
glass_icon_state = "nothing"
glass_name = "Nothing"
glass_desc = "Absolutely nothing."
shot_glass_icon_state = "shotglass"
/datum/reagent/consumable/nothing/on_mob_life(mob/living/M)
if(ishuman(M) && M.job in list("Mime"))
@@ -159,6 +190,9 @@
nutriment_factor = 2 * REAGENTS_METABOLISM
color = "#302000" // rgb: 48, 32, 0
taste_description = "irish sadness"
glass_icon_state = "glass_brown"
glass_name = "glass of potato juice"
glass_desc = "Bleh..."
/datum/reagent/consumable/grapejuice
name = "Grape Juice"
@@ -173,6 +207,9 @@
description = "An opaque white liquid produced by the mammary glands of mammals."
color = "#DFDFDF" // rgb: 223, 223, 223
taste_description = "milk"
glass_icon_state = "glass_white"
glass_name = "glass of milk"
glass_desc = "White and nutritious goodness!"
/datum/reagent/consumable/milk/on_mob_life(mob/living/M)
if(M.getBruteLoss() && prob(20))
@@ -192,6 +229,9 @@
description = "An opaque white liquid made from soybeans."
color = "#DFDFC7" // rgb: 223, 223, 199
taste_description = "soy milk"
glass_icon_state = "glass_white"
glass_name = "glass of soy milk"
glass_desc = "White and nutritious soy goodness!"
/datum/reagent/consumable/soymilk/on_mob_life(mob/living/M)
if(M.getBruteLoss() && prob(20))
@@ -205,6 +245,9 @@
description = "The fatty, still liquid part of milk. Why don't you mix this with sum scotch, eh?"
color = "#DFD7AF" // rgb: 223, 215, 175
taste_description = "creamy milk"
glass_icon_state = "glass_white"
glass_name = "glass of cream"
glass_desc = "Ewwww..."
/datum/reagent/consumable/cream/on_mob_life(mob/living/M)
if(M.getBruteLoss() && prob(20))
@@ -220,6 +263,9 @@
nutriment_factor = 0
overdose_threshold = 80
taste_description = "bitterness"
glass_icon_state = "glass_brown"
glass_name = "glass of coffee"
glass_desc = "Don't drop it, or you'll send scalding liquid and glass shards everywhere."
/datum/reagent/consumable/coffee/overdose_process(mob/living/M)
M.Jitter(5)
@@ -243,6 +289,9 @@
color = "#101000" // rgb: 16, 16, 0
nutriment_factor = 0
taste_description = "tart black tea"
glass_icon_state = "teaglass"
glass_name = "glass of tea"
glass_desc = "Drinking it from here would not seem right."
/datum/reagent/consumable/tea/on_mob_life(mob/living/M)
M.dizziness = max(0,M.dizziness-2)
@@ -263,6 +312,9 @@
color = "#FFB766"
nutriment_factor = 2
taste_description = "bitter tea"
glass_icon_state = "arnold_palmer"
glass_name = "Arnold Palmer"
glass_desc = "You feel like taking a few golf swings after a few swigs of this."
/datum/reagent/consumable/tea/arnold_palmer/on_mob_life(mob/living/M)
if(prob(5))
@@ -277,6 +329,9 @@
color = "#102838" // rgb: 16, 40, 56
nutriment_factor = 0
taste_description = "bitter coldness"
glass_icon_state = "icedcoffeeglass"
glass_name = "Iced Coffee"
glass_desc = "A drink to perk you up and refresh you!"
/datum/reagent/consumable/icecoffee/on_mob_life(mob/living/M)
M.dizziness = max(0,M.dizziness-5)
@@ -295,6 +350,9 @@
color = "#104038" // rgb: 16, 64, 56
nutriment_factor = 0
taste_description = "sweet tea"
glass_icon_state = "icedteaglass"
glass_name = "Iced Tea"
glass_desc = "All natural, antioxidant-rich flavour sensation."
/datum/reagent/consumable/icetea/on_mob_life(mob/living/M)
M.dizziness = max(0,M.dizziness-2)
@@ -313,6 +371,9 @@
description = "A refreshing beverage."
color = "#100800" // rgb: 16, 8, 0
taste_description = "cola"
glass_icon_state = "glass_brown"
glass_name = "glass of space Cola"
glass_desc = "A glass of refreshing Space Cola."
/datum/reagent/consumable/space_cola/on_mob_life(mob/living/M)
M.drowsyness = max(0,M.drowsyness-5)
@@ -326,6 +387,9 @@
description = "Cola, cola never changes."
color = "#100800" // rgb: 16, 8, 0
taste_description = "the future"
glass_icon_state = "nuka_colaglass"
glass_name = "Nuka Cola"
glass_desc = "Don't cry, Don't raise your eye, It's only nuclear wasteland."
/datum/reagent/consumable/nuka_cola/on_mob_life(mob/living/M)
M.Jitter(20)
@@ -345,6 +409,9 @@
description = "Blows right through you like a space wind."
color = "#102000" // rgb: 16, 32, 0
taste_description = "sweet citrus soda"
glass_icon_state = "Space_mountain_wind_glass"
glass_name = "glass of Space Mountain Wind"
glass_desc = "Space Mountain Wind. As you know, there are no mountains in space, only wind."
/datum/reagent/consumable/spacemountainwind/on_mob_life(mob/living/M)
M.drowsyness = max(0,M.drowsyness-7)
@@ -361,6 +428,9 @@
description = "A delicious blend of 42 different flavours."
color = "#102000" // rgb: 16, 32, 0
taste_description = "cherry soda" // FALSE ADVERTISING
glass_icon_state = "dr_gibb_glass"
glass_name = "glass of Dr. Gibb"
glass_desc = "Dr. Gibb. Not as dangerous as the glass_name might imply."
/datum/reagent/consumable/dr_gibb/on_mob_life(mob/living/M)
M.drowsyness = max(0,M.drowsyness-6)
@@ -374,6 +444,10 @@
description = "Tastes like a hull breach in your mouth."
color = "#00FF00" // rgb: 0, 255, 0
taste_description = "cherry soda"
glass_icon_state = "space-up_glass"
glass_name = "glass of Space-up"
glass_desc = "Space-up. It helps you keep your cool."
/datum/reagent/consumable/space_up/on_mob_life(mob/living/M)
if (M.bodytemperature > 310)
@@ -386,6 +460,10 @@
id = "lemon_lime"
color = "#8CFF00" // rgb: 135, 255, 0
taste_description = "tangy lime and lemon soda"
glass_icon_state = "glass_yellow"
glass_name = "glass of Lemon-Lime"
glass_desc = "You're pretty certain a real fruit has never actually touched this."
/datum/reagent/consumable/lemon_lime/on_mob_life(mob/living/M)
if (M.bodytemperature > 310)
@@ -398,6 +476,9 @@
id = "pwr_game"
color = "#9385bf" // rgb: 58, 52, 75
taste_description = "sweet and salty tang"
glass_icon_state = "glass_red"
glass_name = "glass of Pwr Game"
glass_desc = "Goes well with a Vlad's salad."
/datum/reagent/consumable/pwr_game/on_mob_life(mob/living/M)
if (M.bodytemperature > 310)
@@ -410,6 +491,9 @@
id = "shamblers"
color = "#f00060" // rgb: 94, 0, 38
taste_description = "carbonated metallic soda"
glass_icon_state = "glass_red"
glass_name = "glass of Shambler's Juice"
glass_desc = "Mmm mm, shambly."
/datum/reagent/consumable/shamblers/on_mob_life(mob/living/M)
if (M.bodytemperature > 310)
@@ -421,6 +505,9 @@
description = "A can of club soda. Why not make a scotch and soda?"
color = "#619494" // rgb: 97, 148, 148
taste_description = "carbonated water"
glass_icon_state = "glass_clear"
glass_name = "glass of Soda Water"
glass_desc = "Soda water. Why not make a scotch and soda?"
/datum/reagent/consumable/sodawater/on_mob_life(mob/living/M)
M.dizziness = max(0,M.dizziness-5)
@@ -435,6 +522,9 @@
description = "It tastes strange but at least the quinine keeps the Space Malaria at bay."
color = "#0064C8" // rgb: 0, 100, 200
taste_description = "tart and fresh"
glass_icon_state = "glass_clear"
glass_name = "glass of Tonic Water"
glass_desc = "Quinine tastes funny, but at least it'll keep that Space Malaria away."
/datum/reagent/consumable/tonic/on_mob_life(mob/living/M)
M.dizziness = max(0,M.dizziness-5)
@@ -452,6 +542,9 @@
reagent_state = SOLID
color = "#619494" // rgb: 97, 148, 148
taste_description = "ice"
glass_icon_state = "iceglass"
glass_name = "glass of ice"
glass_desc = "Generally, you're supposed to put something else in there too..."
/datum/reagent/consumable/ice/on_mob_life(mob/living/M)
M.bodytemperature = max( M.bodytemperature - 5 * TEMPERATURE_DAMAGE_COEFFICIENT, 0)
@@ -463,6 +556,9 @@
description = "A nice and tasty beverage while you are reading your hippie books."
color = "#664300" // rgb: 102, 67, 0
taste_description = "creamy coffee"
glass_icon_state = "soy_latte"
glass_name = "Soy Latte"
glass_desc = "A nice and refreshing beverage while you're reading."
/datum/reagent/consumable/soy_latte/on_mob_life(mob/living/M)
M.dizziness = max(0,M.dizziness-5)
@@ -482,6 +578,9 @@
description = "A nice, strong and tasty beverage while you are reading."
color = "#664300" // rgb: 102, 67, 0
taste_description = "bitter cream"
glass_icon_state = "cafe_latte"
glass_name = "Cafe Latte"
glass_desc = "A nice, strong and refreshing beverage while you're reading."
/datum/reagent/consumable/cafe_latte/on_mob_life(mob/living/M)
M.dizziness = max(0,M.dizziness-5)
@@ -501,6 +600,9 @@
description = "A gulp a day keeps the Medibot away! A mixture of juices that heals most damage types fairly quickly at the cost of hunger."
color = "#FF8CFF" // rgb: 255, 140, 255
taste_description = "homely fruit"
glass_icon_state = "doctorsdelightglass"
glass_name = "Doctor's Delight"
glass_desc = "The space doctor's favorite. Guaranteed to restore bodily injury; side effects include cravings and hunger."
/datum/reagent/consumable/doctor_delight/on_mob_life(mob/living/M)
M.adjustBruteLoss(-0.5, 0)
@@ -520,6 +622,9 @@
color = "#800000"
nutriment_factor = 4 * REAGENTS_METABOLISM
taste_description = "sweet chocolate"
glass_icon_state = "chocolatepudding"
glass_name = "Chocolate Pudding"
glass_desc = "Tasty."
/datum/reagent/consumable/vanillapudding
name = "Vanilla Pudding"
@@ -528,6 +633,9 @@
color = "#FAFAD2"
nutriment_factor = 4 * REAGENTS_METABOLISM
taste_description = "sweet vanilla"
glass_icon_state = "vanillapudding"
glass_name = "Vanilla Pudding"
glass_desc = "Tasty."
/datum/reagent/consumable/cherryshake
name = "Cherry Shake"
@@ -536,6 +644,9 @@
color = "#FFB6C1"
nutriment_factor = 4 * REAGENTS_METABOLISM
taste_description = "creamy cherry"
glass_icon_state = "cherryshake"
glass_name = "Cherry Shake"
glass_desc = "A cherry flavored milkshake."
/datum/reagent/consumable/bluecherryshake
name = "Blue Cherry Shake"
@@ -544,6 +655,9 @@
color = "#00F1FF"
nutriment_factor = 4 * REAGENTS_METABOLISM
taste_description = "creamy blue cherry"
glass_icon_state = "bluecherryshake"
glass_name = "Blue Cherry Shake"
glass_desc = "An exotic blue milkshake."
/datum/reagent/consumable/pumpkin_latte
name = "Pumpkin Latte"
@@ -552,6 +666,9 @@
color = "#F4A460"
nutriment_factor = 3 * REAGENTS_METABOLISM
taste_description = "creamy pumpkin"
glass_icon_state = "pumpkin_latte"
glass_name = "Pumpkin Latte"
glass_desc = "A mix of coffee and pumpkin juice."
/datum/reagent/consumable/gibbfloats
name = "Gibb Floats"
@@ -560,6 +677,9 @@
color = "#B22222"
nutriment_factor = 3 * REAGENTS_METABOLISM
taste_description = "creamy cherry"
glass_icon_state = "gibbfloats"
glass_name = "Gibbfloat"
glass_desc = "Dr. Gibb with ice cream on top."
/datum/reagent/consumable/pumpkinjuice
name = "Pumpkin Juice"
@@ -581,6 +701,9 @@
description = "A solution."
color = "#C8A5DC"
taste_description = "extreme bitterness"
glass_icon_state = "triplecitrus" //needs own sprite mine are trash
glass_name = "glass of triple citrus"
glass_desc = "A mixture of citrus juices. Tangy, yet smooth."
/datum/reagent/consumable/grape_soda
name = "Grape soda"
@@ -588,6 +711,8 @@
description = "Beloved of children and teetotalers."
color = "#E6CDFF"
taste_description = "grape soda"
glass_name = "glass of grape juice"
glass_desc = "It's grape (soda)!"
/datum/reagent/consumable/milk/chocolate_milk
name = "Chocolate Milk"
@@ -326,6 +326,9 @@
nutriment_factor = 3 * REAGENTS_METABOLISM
color = "#403010" // rgb: 64, 48, 16
taste_description = "creamy chocolate"
glass_icon_state = "chocolateglass"
glass_name = "glass of chocolate"
glass_desc = "Tasty."
/datum/reagent/consumable/hot_coco/on_mob_life(mob/living/M)
if (M.bodytemperature < 310)//310 is the normal bodytemp. 310.055
@@ -6,6 +6,10 @@
metabolization_rate = 5 //fast rate so it disappears fast.
taste_description = "iron"
taste_mult = 1.3
glass_icon_state = "glass_red"
glass_name = "glass of tomato juice"
glass_desc = "Are you sure this is tomato juice?"
shot_glass_icon_state = "shotglassred"
/datum/reagent/blood/reaction_mob(mob/M, method=TOUCH, reac_volume)
if(data && data["viruses"])
@@ -81,6 +85,7 @@
color = "#FF9966"
description = "You don't even want to think about what's in here."
taste_description = "gross iron"
shot_glass_icon_state = "shotglassred"
/datum/reagent/vaccine
//data must contain virus type
@@ -107,6 +112,10 @@
color = "#AAAAAA77" // rgb: 170, 170, 170, 77 (alpha)
taste_description = "water"
var/cooling_temperature = 2
glass_icon_state = "glass_clear"
glass_name = "glass of Water"
glass_desc = "The father of all refreshments."
shot_glass_icon_state = "shotglassclear"
/*
* Water reaction to turf
@@ -168,6 +177,9 @@
id = "holywater"
description = "Water blessed by some deity."
color = "#E0E8EF" // rgb: 224, 232, 239
glass_icon_state = "glass_clear"
glass_name = "glass of Holy Water"
glass_desc = "A glass of holy water."
/datum/reagent/water/holywater/reaction_mob(mob/living/M, method=TOUCH, reac_volume)
if(is_servant_of_ratvar(M))
@@ -858,7 +870,7 @@
to_chat(M, "<span class='warning'>You feel unstable...</span>")
M.Jitter(2)
current_cycle = 1
addtimer(CALLBACK(GLOBAL_PROC, .proc/do_teleport, M, get_turf(M), 5, asoundin = 'sound/effects/phasein.ogg'), 30)
addtimer(CALLBACK(GLOBAL_PROC, .proc/do_teleport, M, get_turf(M), 5, null, null, null, 'sound/effects/phasein.ogg'), 30)
..()
/datum/reagent/aluminium
@@ -883,6 +895,9 @@
description = "Required for welders. Flamable."
color = "#660000" // rgb: 102, 0, 0
taste_description = "gross metal"
glass_icon_state = "dr_gibb_glass"
glass_name = "glass of welder fuel"
glass_desc = "Unless you're an industrial tool, this is probably not safe for consumption."
/datum/reagent/fuel/reaction_mob(mob/living/M, method=TOUCH, reac_volume)//Splashing people with welding fuel to make them easy to ignite!
if(!isliving(M))
@@ -304,6 +304,9 @@
color = "#664300" // rgb: 102, 67, 0
metabolization_rate = 1.5 * REAGENTS_METABOLISM
taste_description = "piss water"
glass_icon_state = "beerglass"
glass_name = "glass of beer"
glass_desc = "A freezing pint of beer."
/datum/reagent/toxin/beer2/on_mob_life(mob/living/M)
switch(current_cycle)
+3 -3
View File
@@ -340,11 +340,11 @@
if(istype(I, /obj/item/projectile))
return
if(prob(75))
I.loc = src
visible_message("<span class='notice'>\the [I] lands in \the [src].</span>")
I.forceMove(src)
visible_message("<span class='notice'>[I] lands in [src].</span>")
update_icon()
else
visible_message("<span class='notice'>\the [I] bounces off of \the [src]'s rim!</span>")
visible_message("<span class='notice'>[I] bounces off of [src]'s rim!</span>")
return 0
else
return ..(mover, target, height)