mirror of
https://github.com/Bubberstation/Bubberstation.git
synced 2026-08-26 14:39:58 +01:00
Merge upstream
This commit is contained in:
@@ -19,6 +19,8 @@
|
||||
|
||||
#define ismineralturf(A) (istype(A, /turf/closed/mineral))
|
||||
|
||||
#define islava(A) (istype(A, /turf/open/floor/plating/lava))
|
||||
|
||||
//Mobs
|
||||
#define isliving(A) (istype(A, /mob/living))
|
||||
|
||||
|
||||
@@ -1313,7 +1313,7 @@ proc/pick_closest_path(value, list/matches = get_fancy_list_of_atom_types())
|
||||
else
|
||||
. = ""
|
||||
|
||||
var/mob/dead/dview/dview_mob = new
|
||||
var/mob/dview/dview_mob = new
|
||||
|
||||
//Version of view() which ignores darkness, because BYOND doesn't have it (I actually suggested it but it was tagged redundant, BUT HEARERS IS A T- /rant).
|
||||
/proc/dview(var/range = world.view, var/center, var/invis_flags = 0)
|
||||
@@ -1327,7 +1327,7 @@ var/mob/dead/dview/dview_mob = new
|
||||
. = view(range, dview_mob)
|
||||
dview_mob.loc = null
|
||||
|
||||
/mob/dead/dview
|
||||
/mob/dview
|
||||
name = "INTERNAL DVIEW MOB"
|
||||
invisibility = 101
|
||||
density = FALSE
|
||||
@@ -1335,7 +1335,7 @@ var/mob/dead/dview/dview_mob = new
|
||||
anchored = TRUE
|
||||
var/ready_to_die = FALSE
|
||||
|
||||
/mob/dead/dview/Destroy(force = FALSE)
|
||||
/mob/dview/Destroy(force = FALSE)
|
||||
if(!ready_to_die)
|
||||
stack_trace("ALRIGHT WHICH FUCKER TRIED TO DELETE *MY* DVIEW?")
|
||||
|
||||
|
||||
@@ -1,21 +0,0 @@
|
||||
/*
|
||||
|
||||
This is a smart+stupid method of maintaining paths during refactors.
|
||||
At this point in time we have more maps than ever, and our tools just aren't that great.
|
||||
So instead of repathing all the maps...
|
||||
|
||||
Keep the old path defined, just as an empty type with that path, and then define it's
|
||||
parent_type as the new path, effectively maintaining the object/mob w/e without having
|
||||
to touch all the maps, avoiding all those nasty conflicts!
|
||||
|
||||
Ideally the old paths would be cleaned out as mappers go about their usual routine of
|
||||
updating old maps.
|
||||
|
||||
tl;dr TYPEFUCKERY, because fuck updating all these maps
|
||||
|
||||
Example:
|
||||
|
||||
/obj/structure/bed/chair/janicart/secway
|
||||
parent_type = /obj/vehicle/secway
|
||||
|
||||
*/
|
||||
@@ -30,7 +30,6 @@ var/list/start_landmarks_list = list() //list of all spawn points created
|
||||
var/list/department_security_spawns = list() //list of all department security spawns
|
||||
var/list/generic_event_spawns = list() //list of all spawns for events
|
||||
|
||||
var/list/monkeystart = list()
|
||||
var/list/wizardstart = list()
|
||||
var/list/newplayer_start = list()
|
||||
var/list/latejoin = list()
|
||||
@@ -41,7 +40,6 @@ var/list/tdome1 = list()
|
||||
var/list/tdome2 = list()
|
||||
var/list/tdomeobserve = list()
|
||||
var/list/tdomeadmin = list()
|
||||
var/list/prisonsecuritywarp = list() //prison security goes to these
|
||||
var/list/prisonwarped = list() //list of players already warped
|
||||
var/list/blobstart = list()
|
||||
var/list/secequipment = list()
|
||||
|
||||
@@ -117,7 +117,7 @@
|
||||
if(A.ClickAccessible(src, depth=INVENTORY_DEPTH))
|
||||
// No adjacency needed
|
||||
if(W)
|
||||
melee_item_attack_chain(src, W, A)
|
||||
melee_item_attack_chain(src, W, A, params)
|
||||
else
|
||||
if(ismob(A))
|
||||
changeNext_move(CLICK_CD_MELEE)
|
||||
@@ -131,7 +131,7 @@
|
||||
if(isturf(A) || isturf(A.loc) || (A.loc && isturf(A.loc.loc)))
|
||||
if(Adjacent(A) || (W && CheckReach(src, A, W.reach))) //Adjacent or reaching attacks
|
||||
if(W)
|
||||
melee_item_attack_chain(src, W, A)
|
||||
melee_item_attack_chain(src, W, A, params)
|
||||
else
|
||||
if(ismob(A))
|
||||
changeNext_move(CLICK_CD_MELEE)
|
||||
|
||||
@@ -68,7 +68,7 @@
|
||||
|
||||
// cyborgs are prohibited from using storage items so we can I think safely remove (A.loc in contents)
|
||||
if(A == loc || (A in loc) || (A in contents))
|
||||
melee_item_attack_chain(src, W, A)
|
||||
melee_item_attack_chain(src, W, A, params)
|
||||
return
|
||||
|
||||
if(!isturf(loc))
|
||||
@@ -77,7 +77,7 @@
|
||||
// cyborgs are prohibited from using storage items so we can I think safely remove (A.loc && isturf(A.loc.loc))
|
||||
if(isturf(A) || isturf(A.loc))
|
||||
if(A.Adjacent(src)) // see adjacent.dm
|
||||
melee_item_attack_chain(src, W, A)
|
||||
melee_item_attack_chain(src, W, A, params)
|
||||
return
|
||||
else
|
||||
W.afterattack(A, src, 0, params)
|
||||
|
||||
@@ -684,14 +684,18 @@
|
||||
if(SStitle.icon)
|
||||
icon = SStitle.icon
|
||||
else
|
||||
if(SStitle.previous_icon)
|
||||
icon = SStitle.previous_icon
|
||||
if(!SStitle.previous_icon)
|
||||
qdel(src)
|
||||
return
|
||||
icon = SStitle.previous_icon
|
||||
|
||||
holder.screen += src
|
||||
|
||||
..()
|
||||
|
||||
/obj/screen/splash/proc/Fade(out, qdel_after = TRUE)
|
||||
if(QDELETED(src))
|
||||
return
|
||||
if(out)
|
||||
animate(src, alpha = 0, time = 30)
|
||||
else
|
||||
@@ -704,4 +708,4 @@
|
||||
if(holder)
|
||||
holder.screen -= src
|
||||
holder = null
|
||||
return ..()
|
||||
return ..()
|
||||
|
||||
@@ -125,7 +125,7 @@ var/const/tk_maxrange = 15
|
||||
|
||||
if(!isturf(target) && istype(focus,/obj/item) && target.Adjacent(focus))
|
||||
apply_focus_overlay()
|
||||
melee_item_attack_chain(tk_user, focus, target) //isn't copying the attack chain fun. we should do it more often.
|
||||
melee_item_attack_chain(tk_user, focus, target, params) //isn't copying the attack chain fun. we should do it more often.
|
||||
if(check_if_focusable(focus))
|
||||
focus.do_attack_animation(target, null, focus)
|
||||
else
|
||||
|
||||
@@ -523,7 +523,6 @@ SUBSYSTEM_DEF(garbage)
|
||||
SearchVar(start_landmarks_list)
|
||||
SearchVar(department_security_spawns)
|
||||
SearchVar(generic_event_spawns)
|
||||
SearchVar(monkeystart)
|
||||
SearchVar(wizardstart)
|
||||
SearchVar(newplayer_start)
|
||||
SearchVar(latejoin)
|
||||
@@ -534,7 +533,6 @@ SUBSYSTEM_DEF(garbage)
|
||||
SearchVar(tdome2)
|
||||
SearchVar(tdomeobserve)
|
||||
SearchVar(tdomeadmin)
|
||||
SearchVar(prisonsecuritywarp)
|
||||
SearchVar(prisonwarped)
|
||||
SearchVar(blobstart)
|
||||
SearchVar(secequipment)
|
||||
@@ -927,10 +925,6 @@ SUBSYSTEM_DEF(garbage)
|
||||
SearchVar(GALOSHES_DONT_HELP)
|
||||
SearchVar(SLIDE_ICE)
|
||||
SearchVar(limb_icon_cache)
|
||||
SearchVar(MIN_IMPREGNATION_TIME)
|
||||
SearchVar(MAX_IMPREGNATION_TIME)
|
||||
SearchVar(MIN_ACTIVE_TIME)
|
||||
SearchVar(MAX_ACTIVE_TIME)
|
||||
SearchVar(default_martial_art)
|
||||
SearchVar(plasmaman_on_fire)
|
||||
SearchVar(ai_list)
|
||||
|
||||
@@ -168,7 +168,7 @@ PROCESSING_SUBSYSTEM_DEF(overlays)
|
||||
|
||||
var/list/cached_other = other.our_overlays
|
||||
if(cached_other)
|
||||
if(cut_old)
|
||||
if(cut_old || !LAZYLEN(our_overlays))
|
||||
our_overlays = cached_other.Copy()
|
||||
else
|
||||
our_overlays |= cached_other
|
||||
|
||||
@@ -56,6 +56,8 @@ SUBSYSTEM_DEF(ticker)
|
||||
|
||||
var/late_join_disabled
|
||||
|
||||
var/list/round_start_events
|
||||
|
||||
/datum/controller/subsystem/ticker/Initialize(timeofday)
|
||||
var/list/music = file2list(ROUND_START_MUSIC_LIST, "\n")
|
||||
login_music = pick(music)
|
||||
@@ -197,6 +199,11 @@ SUBSYSTEM_DEF(ticker)
|
||||
transfer_characters() //transfer keys to the new mobs
|
||||
|
||||
Master.RoundStart() //let the party begin...
|
||||
|
||||
for(var/I in round_start_events)
|
||||
var/datum/callback/cb = I
|
||||
cb.InvokeAsync()
|
||||
LAZYCLEARLIST(round_start_events)
|
||||
|
||||
log_world("Game start took [(world.timeofday - init_start)/10]s")
|
||||
round_start_time = world.time
|
||||
@@ -229,6 +236,12 @@ SUBSYSTEM_DEF(ticker)
|
||||
var/list/allmins = adm["present"]
|
||||
send2irc("Server", "Round of [hide_mode ? "secret":"[mode.name]"] has started[allmins.len ? ".":" with no active admins online!"]")
|
||||
|
||||
/datum/controller/subsystem/ticker/proc/OnRoundstart(datum/callback/cb)
|
||||
if(current_state < GAME_STATE_PLAYING)
|
||||
LAZYADD(round_start_events, cb)
|
||||
else
|
||||
cb.InvokeAsync()
|
||||
|
||||
/datum/controller/subsystem/ticker/proc/station_explosion_detonation(atom/bomb)
|
||||
if(bomb) //BOOM
|
||||
var/turf/epi = bomb.loc
|
||||
|
||||
@@ -12,8 +12,10 @@ SUBSYSTEM_DEF(title)
|
||||
return
|
||||
|
||||
if(fexists("data/previous_title.dat"))
|
||||
previous_icon = new("data/previous_title.dat")
|
||||
fdel("data/previous_title.dat") //linger not
|
||||
var/previous_path = file2text("data/previous_title.dat")
|
||||
if(istext(previous_path))
|
||||
previous_icon = new(previous_icon)
|
||||
fdel("data/previous_title.dat")
|
||||
|
||||
var/list/provisional_title_screens = flist("config/title_screens/images/")
|
||||
var/list/title_screens = list()
|
||||
@@ -41,7 +43,8 @@ SUBSYSTEM_DEF(title)
|
||||
|
||||
/datum/controller/subsystem/title/Shutdown()
|
||||
if(file_path)
|
||||
fcopy(file_path, "data/previous_title.dat")
|
||||
var/F = "data/previous_title.dat"
|
||||
F << file_path
|
||||
|
||||
/datum/controller/subsystem/title/Recover()
|
||||
icon = SStitle.icon
|
||||
|
||||
+2
-1
@@ -78,6 +78,7 @@
|
||||
/datum/beam/proc/Reset()
|
||||
for(var/obj/effect/ebeam/B in elements)
|
||||
qdel(B)
|
||||
elements.Cut()
|
||||
|
||||
/datum/beam/Destroy()
|
||||
Reset()
|
||||
@@ -99,7 +100,7 @@
|
||||
for(N in 0 to length-1 step 32)//-1 as we want < not <=, but we want the speed of X in Y to Z and step X
|
||||
var/obj/effect/ebeam/X = new beam_type(origin_oldloc)
|
||||
X.owner = src
|
||||
elements |= X
|
||||
elements += X
|
||||
|
||||
//Assign icon, for main segments it's base_icon, for the end, it's icon+icon_state
|
||||
//cropped by a transparent box of length-N pixel size
|
||||
|
||||
@@ -45,7 +45,7 @@ Bonus
|
||||
return
|
||||
|
||||
/datum/symptom/fire/proc/Firestacks_stage_4(mob/living/M, datum/disease/advance/A)
|
||||
var/get_stacks = (sqrt(20+A.totalStageSpeed()*2))-(sqrt(16+A.totalStealth()))
|
||||
var/get_stacks = (sqrt(20+A.totalStageSpeed()*2))-(sqrt(max(0, 16+A.totalStealth())))
|
||||
M.adjust_fire_stacks(get_stacks)
|
||||
M.adjustFireLoss(get_stacks/2)
|
||||
return 1
|
||||
|
||||
@@ -203,7 +203,7 @@ var/list/teleportlocs = list()
|
||||
if(A.fire)
|
||||
cont = FALSE
|
||||
break
|
||||
if(cont)
|
||||
if(cont && D.is_operational())
|
||||
if(D.operating)
|
||||
D.nextstate = opening ? OPEN : CLOSED
|
||||
else if(!(D.density ^ opening))
|
||||
|
||||
@@ -457,6 +457,12 @@ var/list/blood_splatter_icons = list()
|
||||
//This proc is called on the location of an atom when the atom is Destroy()'d
|
||||
/atom/proc/handle_atom_del(atom/A)
|
||||
|
||||
//called when the turf the atom resides on is ChangeTurfed
|
||||
/atom/proc/HandleTurfChange(turf/T)
|
||||
for(var/a in src)
|
||||
var/atom/A = a
|
||||
A.HandleTurfChange(T)
|
||||
|
||||
// Byond seemingly calls stat, each tick.
|
||||
// Calling things each tick can get expensive real quick.
|
||||
// So we slow this down a little.
|
||||
|
||||
@@ -136,9 +136,9 @@
|
||||
icon_state = "zombie"
|
||||
H.hair_style = null
|
||||
H.update_hair()
|
||||
update_icons()
|
||||
H.forceMove(src)
|
||||
oldguy = H
|
||||
update_icons()
|
||||
visible_message("<span class='warning'>The corpse of [H.name] suddenly rises!</span>")
|
||||
|
||||
/mob/living/simple_animal/hostile/blob/blobspore/death(gibbed)
|
||||
|
||||
@@ -37,8 +37,6 @@
|
||||
return "Replicant Alloy"
|
||||
if(HIEROPHANT_ANSIBLE)
|
||||
return "Hierophant Ansible"
|
||||
else
|
||||
return null
|
||||
|
||||
//returns a component acronym from a component id
|
||||
/proc/get_component_acronym(id)
|
||||
@@ -53,8 +51,6 @@
|
||||
return "RA"
|
||||
if(HIEROPHANT_ANSIBLE)
|
||||
return "HA"
|
||||
else
|
||||
return null
|
||||
|
||||
//returns a component id from a component name
|
||||
/proc/get_component_id(name)
|
||||
@@ -69,8 +65,6 @@
|
||||
return REPLICANT_ALLOY
|
||||
if("Hierophant Ansible")
|
||||
return HIEROPHANT_ANSIBLE
|
||||
else
|
||||
return null
|
||||
|
||||
//returns a component spanclass from a component id
|
||||
/proc/get_component_span(id)
|
||||
@@ -127,8 +121,6 @@
|
||||
return /obj/effect/overlay/temp/ratvar/component/alloy
|
||||
if(HIEROPHANT_ANSIBLE)
|
||||
return /obj/effect/overlay/temp/ratvar/component/ansible
|
||||
else
|
||||
return null
|
||||
|
||||
//returns a type for a component from a component id
|
||||
/proc/get_component_type(id)
|
||||
@@ -142,6 +134,4 @@
|
||||
if(REPLICANT_ALLOY)
|
||||
return /obj/item/clockwork/component/replicant_alloy
|
||||
if(HIEROPHANT_ANSIBLE)
|
||||
return /obj/item/clockwork/component/hierophant_ansible
|
||||
else
|
||||
return null
|
||||
return /obj/item/clockwork/component/hierophant_ansible
|
||||
@@ -19,9 +19,9 @@
|
||||
var/interdiction_range = 14 //how large an area it drains and disables in
|
||||
var/static/list/rage_messages = list("...", "Disgusting.", "Die.", "Foul.", "Worthless.", "Mortal.", "Unfit.", "Weak.", "Fragile.", "Useless.", "Leave my sight!")
|
||||
|
||||
/obj/structure/destructible/clockwork/powered/interdiction_lens/New()
|
||||
/obj/structure/destructible/clockwork/powered/interdiction_lens/Initialize()
|
||||
..()
|
||||
set_light(1.4, 0.8, "#F42B9D")
|
||||
update_current_glow()
|
||||
|
||||
/obj/structure/destructible/clockwork/powered/interdiction_lens/examine(mob/user)
|
||||
..()
|
||||
@@ -30,12 +30,25 @@
|
||||
if(is_servant_of_ratvar(user) || isobserver(user))
|
||||
to_chat(user, "<span class='neovgre_small'>If it fails to drain any electronics or has nothing to return power to, it will disable itself for <b>[round(recharge_time/600, 1)]</b> minutes.</span>")
|
||||
|
||||
/obj/structure/destructible/clockwork/powered/interdiction_lens/update_anchored(mob/user, do_damage)
|
||||
..()
|
||||
update_current_glow()
|
||||
|
||||
/obj/structure/destructible/clockwork/powered/interdiction_lens/toggle(fast_process, mob/living/user)
|
||||
. = ..()
|
||||
update_current_glow()
|
||||
|
||||
/obj/structure/destructible/clockwork/powered/interdiction_lens/proc/update_current_glow()
|
||||
if(active)
|
||||
set_light(2, 1.6, "#EE54EE")
|
||||
if(disabled)
|
||||
set_light(2, 1.6, "#151200")
|
||||
else
|
||||
set_light(2, 1.6, "#EE54EE")
|
||||
else
|
||||
set_light(1.4, 0.8, "#F42B9D")
|
||||
if(anchored)
|
||||
set_light(1.4, 0.8, "#F42B9D")
|
||||
else
|
||||
set_light(0)
|
||||
|
||||
/obj/structure/destructible/clockwork/powered/interdiction_lens/attack_hand(mob/living/user)
|
||||
if(user.canUseTopic(src, !issilicon(user), NO_DEXTERY))
|
||||
@@ -45,7 +58,7 @@
|
||||
toggle(0, user)
|
||||
|
||||
/obj/structure/destructible/clockwork/powered/interdiction_lens/forced_disable(bad_effects)
|
||||
if(disabled)
|
||||
if(disabled || !anchored)
|
||||
return FALSE
|
||||
if(!active)
|
||||
toggle(0)
|
||||
@@ -53,8 +66,8 @@
|
||||
recharging = world.time + recharge_time
|
||||
flick("interdiction_lens_discharged", src)
|
||||
icon_state = "interdiction_lens_inactive"
|
||||
set_light(2, 1.6, "#151200")
|
||||
disabled = TRUE
|
||||
update_current_glow()
|
||||
return TRUE
|
||||
|
||||
/obj/structure/destructible/clockwork/powered/interdiction_lens/process()
|
||||
|
||||
@@ -17,7 +17,6 @@
|
||||
return
|
||||
|
||||
cultist_commune(usr, input)
|
||||
return
|
||||
|
||||
/proc/cultist_commune(mob/living/user, message)
|
||||
if(!message)
|
||||
|
||||
@@ -403,5 +403,4 @@
|
||||
else
|
||||
..()
|
||||
to_chat(user, "<span class='warning'>\The [src] can only transport items!</span>")
|
||||
return
|
||||
|
||||
|
||||
@@ -58,13 +58,10 @@ To draw a rune, use an arcane tome.
|
||||
if(istype(I, /obj/item/weapon/tome) && iscultist(user))
|
||||
to_chat(user, "<span class='notice'>You carefully erase the [lowertext(cultist_name)] rune.</span>")
|
||||
qdel(src)
|
||||
return
|
||||
else if(istype(I, /obj/item/weapon/nullrod))
|
||||
user.say("BEGONE FOUL MAGIKS!!")
|
||||
to_chat(user, "<span class='danger'>You disrupt the magic of [src] with [I].</span>")
|
||||
qdel(src)
|
||||
return
|
||||
return
|
||||
|
||||
/obj/effect/rune/attack_hand(mob/living/user)
|
||||
if(!iscultist(user))
|
||||
@@ -510,13 +507,11 @@ var/list/teleport_runes = list()
|
||||
log_game("Summon Narsie rune erased by [user.mind.key] (ckey) with a tome")
|
||||
message_admins("[key_name_admin(user)] erased a Narsie rune with a tome")
|
||||
..()
|
||||
return
|
||||
else
|
||||
if(istype(I, /obj/item/weapon/nullrod)) //Begone foul magiks. You cannot hinder me.
|
||||
log_game("Summon Narsie rune erased by [user.mind.key] (ckey) using a null rod")
|
||||
message_admins("[key_name_admin(user)] erased a Narsie rune with a null rod")
|
||||
..()
|
||||
return
|
||||
|
||||
//Rite of Resurrection: Requires the corpse of a cultist and that there have been less revives than the number of people sacrificed
|
||||
/obj/effect/rune/raise_dead
|
||||
|
||||
@@ -421,7 +421,6 @@
|
||||
if(uses <= 0)
|
||||
user.drop_item()
|
||||
qdel(src)
|
||||
return
|
||||
|
||||
/obj/item/weapon/restraints/handcuffs/energy/cult //For the talisman of shackling
|
||||
name = "cult shackles"
|
||||
|
||||
@@ -153,7 +153,6 @@
|
||||
S.mind.objectives += newobjective
|
||||
to_chat(S, S.playstyle_string)
|
||||
to_chat(S, "<B>Objective #[1]</B>: [newobjective.explanation_text]")
|
||||
return
|
||||
else
|
||||
return ..()
|
||||
|
||||
|
||||
@@ -16,7 +16,8 @@
|
||||
var/free_pen = 0
|
||||
var/promotable = 0
|
||||
|
||||
/obj/item/device/gangtool/New() //Initialize supply point income if it hasn't already been started
|
||||
/obj/item/device/gangtool/Initialize() //Initialize supply point income if it hasn't already been started
|
||||
..()
|
||||
if(!SSticker.mode.gang_points)
|
||||
SSticker.mode.gang_points = new /datum/gang_points(SSticker.mode)
|
||||
|
||||
|
||||
@@ -133,6 +133,28 @@ var/total_borer_hosts_needed = 10
|
||||
|
||||
GrantBorerActions()
|
||||
|
||||
/mob/living/simple_animal/borer/Destroy()
|
||||
borers -= src
|
||||
|
||||
host_brain = null
|
||||
victim = null
|
||||
|
||||
QDEL_NULL(talk_to_host_action)
|
||||
QDEL_NULL(infest_host_action)
|
||||
QDEL_NULL(toggle_hide_action)
|
||||
QDEL_NULL(talk_to_borer_action)
|
||||
QDEL_NULL(talk_to_brain_action)
|
||||
QDEL_NULL(take_control_action)
|
||||
QDEL_NULL(give_back_control_action)
|
||||
QDEL_NULL(leave_body_action)
|
||||
QDEL_NULL(make_chems_action)
|
||||
QDEL_NULL(make_larvae_action)
|
||||
QDEL_NULL(freeze_victim_action)
|
||||
QDEL_NULL(punish_victim_action)
|
||||
QDEL_NULL(jumpstart_host_action)
|
||||
|
||||
return ..()
|
||||
|
||||
/mob/living/simple_animal/borer/Topic(href, href_list)//not entirely sure if this is even required
|
||||
if(href_list["ghostjoin"])
|
||||
var/mob/dead/observer/ghost = usr
|
||||
|
||||
@@ -483,9 +483,7 @@ var/global/list/possible_items = list()
|
||||
if (new_target == "custom") //Can set custom items.
|
||||
var/obj/item/custom_target = input("Select type:","Type") as null|anything in typesof(/obj/item)
|
||||
if (!custom_target) return
|
||||
var/tmp_obj = new custom_target
|
||||
var/custom_name = tmp_obj:name
|
||||
qdel(tmp_obj)
|
||||
var/custom_name = initial(custom_target.name)
|
||||
custom_name = stripped_input("Enter target name:", "Objective target", custom_name)
|
||||
if (!custom_name) return
|
||||
steal_target = custom_target
|
||||
@@ -530,8 +528,8 @@ var/global/list/possible_items_special = list()
|
||||
/datum/objective/steal/special/New()
|
||||
..()
|
||||
if(!possible_items_special.len)
|
||||
init_subtypes(/datum/objective_item/special,possible_items)
|
||||
init_subtypes(/datum/objective_item/stack,possible_items)
|
||||
init_subtypes(/datum/objective_item/special,possible_items_special)
|
||||
init_subtypes(/datum/objective_item/stack,possible_items_special)
|
||||
|
||||
/datum/objective/steal/special/find_target()
|
||||
return set_target(pick(possible_items_special))
|
||||
|
||||
@@ -10,6 +10,7 @@
|
||||
light_color = LIGHT_COLOR_BLUE
|
||||
|
||||
/obj/machinery/computer/operating/Initialize()
|
||||
..()
|
||||
find_table()
|
||||
|
||||
/obj/machinery/computer/operating/proc/find_table()
|
||||
|
||||
@@ -211,7 +211,7 @@
|
||||
signal.data += list("tag" = output_tag, "power_toggle" = TRUE)
|
||||
. = TRUE
|
||||
if("pressure")
|
||||
var/target = input("New target pressure:", name, output_info["internal"]) as num|null
|
||||
var/target = input("New target pressure:", name, output_info ? output_info["internal"] : 0) as num|null
|
||||
if(!isnull(target) && !..())
|
||||
target = Clamp(target, 0, 50 * ONE_ATMOSPHERE)
|
||||
signal.data += list("tag" = output_tag, "set_internal_pressure" = target)
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
/obj/machinery/computer/secure_data//TODO:SANITY
|
||||
name = "security records console"
|
||||
desc = "Used to view and edit personnel's security records"
|
||||
desc = "Used to view and edit personnel's security records."
|
||||
icon_screen = "security"
|
||||
icon_keyboard = "security_key"
|
||||
req_one_access = list(access_security, access_forensics_lockers)
|
||||
|
||||
@@ -21,16 +21,13 @@ var/list/possible_uplinker_IDs = list("Alfa","Bravo","Charlie","Delta","Echo","F
|
||||
var/obj/item/uplinkholder = null
|
||||
var/obj/machinery/computer/telecrystals/boss/linkedboss = null
|
||||
|
||||
/obj/machinery/computer/telecrystals/uplinker/New()
|
||||
/obj/machinery/computer/telecrystals/uplinker/Initialize()
|
||||
..()
|
||||
|
||||
var/ID
|
||||
if(possible_uplinker_IDs.len)
|
||||
ID = pick(possible_uplinker_IDs)
|
||||
possible_uplinker_IDs -= ID
|
||||
name = "[name] [ID]"
|
||||
else
|
||||
name = "[name] [rand(1,999)]"
|
||||
var/ID = pick_n_take(possible_uplinker_IDs)
|
||||
if(!ID)
|
||||
ID = rand(1,999)
|
||||
name = "[name] [ID]"
|
||||
|
||||
/obj/machinery/computer/telecrystals/uplinker/attackby(obj/item/O, mob/user, params)
|
||||
if(uplinkholder)
|
||||
|
||||
@@ -311,9 +311,11 @@
|
||||
if(prob(30))
|
||||
spark_system.start()
|
||||
if(on && !attacked && !emagged)
|
||||
attacked = 1
|
||||
spawn(60)
|
||||
attacked = 0
|
||||
attacked = TRUE
|
||||
addtimer(CALLBACK(src, .proc/reset_attacked), 60)
|
||||
|
||||
/obj/machinery/porta_turret/proc/reset_attacked()
|
||||
attacked = FALSE
|
||||
|
||||
/obj/machinery/porta_turret/deconstruct(disassembled = TRUE)
|
||||
qdel(src)
|
||||
@@ -911,4 +913,4 @@
|
||||
if(istype(P, /obj/item/projectile/beam/lasertag/bluetag))
|
||||
on = 0
|
||||
spawn(100)
|
||||
on = 1
|
||||
on = 1
|
||||
|
||||
@@ -375,18 +375,13 @@
|
||||
if("dispense")
|
||||
if(!state_open)
|
||||
return
|
||||
switch(params["item"])
|
||||
if("helmet")
|
||||
helmet.loc = loc
|
||||
helmet = null
|
||||
if("suit")
|
||||
suit.loc = loc
|
||||
suit = null
|
||||
if("mask")
|
||||
mask.loc = loc
|
||||
mask = null
|
||||
if("storage")
|
||||
storage.loc = loc
|
||||
storage = null
|
||||
|
||||
var/static/list/valid_items = list("helmet", "suit", "mask", "storage")
|
||||
var/item_name = params["item"]
|
||||
if(item_name in valid_items)
|
||||
var/obj/item/I = vars[item_name]
|
||||
vars[item_name] = null
|
||||
if(I)
|
||||
I.forceMove(loc)
|
||||
. = TRUE
|
||||
update_icon()
|
||||
|
||||
@@ -57,7 +57,7 @@
|
||||
|
||||
var/obj/item/weapon/vending_refill/refill_canister = null //The type of refill canisters used by this machine.
|
||||
|
||||
/obj/machinery/vending/New()
|
||||
/obj/machinery/vending/Initialize()
|
||||
..()
|
||||
wires = new /datum/wires/vending(src)
|
||||
if(refill_canister) //constructable vending machine
|
||||
@@ -691,7 +691,7 @@ IF YOU MODIFY THE PRODUCTS LIST OF A MACHINE, MAKE SURE TO UPDATE ITS RESUPPLY C
|
||||
|
||||
/obj/machinery/vending/snack
|
||||
name = "\improper Getmore Chocolate Corp"
|
||||
desc = "A snack machine courtesy of the Getmore Chocolate Corporation, based out of Mars"
|
||||
desc = "A snack machine courtesy of the Getmore Chocolate Corporation, based out of Mars."
|
||||
product_slogans = "Try our new nougat bar!;Twice the calories for half the price!"
|
||||
product_ads = "The healthiest!;Award-winning chocolate bars!;Mmm! So good!;Oh my god it's so juicy!;Have a snack.;Snacks are good for you!;Have some more Getmore!;Best quality snacks straight from mars.;We love chocolate!;Try our new jerky!"
|
||||
icon_state = "snack"
|
||||
@@ -706,7 +706,7 @@ IF YOU MODIFY THE PRODUCTS LIST OF A MACHINE, MAKE SURE TO UPDATE ITS RESUPPLY C
|
||||
name = "\improper Random Snackies"
|
||||
desc = "Uh oh!"
|
||||
|
||||
/obj/machinery/vending/snack/random/New()
|
||||
/obj/machinery/vending/snack/random/Initialize()
|
||||
..()
|
||||
var/T = pick(subtypesof(/obj/machinery/vending/snack) - /obj/machinery/vending/snack/random)
|
||||
new T(get_turf(src))
|
||||
@@ -758,7 +758,7 @@ IF YOU MODIFY THE PRODUCTS LIST OF A MACHINE, MAKE SURE TO UPDATE ITS RESUPPLY C
|
||||
name = "\improper Random Drinkies"
|
||||
desc = "Uh oh!"
|
||||
|
||||
/obj/machinery/vending/cola/random/New()
|
||||
/obj/machinery/vending/cola/random/Initialize()
|
||||
..()
|
||||
var/T = pick(subtypesof(/obj/machinery/vending/cola) - /obj/machinery/vending/cola/random)
|
||||
new T(get_turf(src))
|
||||
@@ -912,7 +912,7 @@ IF YOU MODIFY THE PRODUCTS LIST OF A MACHINE, MAKE SURE TO UPDATE ITS RESUPPLY C
|
||||
|
||||
/obj/machinery/vending/hydronutrients
|
||||
name = "\improper NutriMax"
|
||||
desc = "A plant nutrients vendor"
|
||||
desc = "A plant nutrients vendor."
|
||||
product_slogans = "Aren't you glad you don't have to fertilize the natural way?;Now with 50% less stink!;Plants are people too!"
|
||||
product_ads = "We like plants!;Don't you want some?;The greenest thumbs ever.;We like big plants.;Soft soil..."
|
||||
icon_state = "nutri"
|
||||
|
||||
@@ -50,7 +50,7 @@
|
||||
random_icon_states = list("gib1", "gib2", "gib3", "gib4", "gib5", "gib6")
|
||||
mergeable_decal = 0
|
||||
|
||||
/obj/effect/decal/cleanable/blood/gibs/New()
|
||||
/obj/effect/decal/cleanable/blood/gibs/Initialize()
|
||||
..()
|
||||
reagents.add_reagent("liquidgibs", 5)
|
||||
|
||||
|
||||
@@ -11,7 +11,7 @@
|
||||
icon_state = "ash"
|
||||
mergeable_decal = 0
|
||||
|
||||
/obj/effect/decal/cleanable/ash/New()
|
||||
/obj/effect/decal/cleanable/ash/Initialize()
|
||||
..()
|
||||
reagents.add_reagent("ash", 30)
|
||||
pixel_x = rand(-5, 5)
|
||||
@@ -21,7 +21,7 @@
|
||||
name = "large pile of ashes"
|
||||
icon_state = "big_ash"
|
||||
|
||||
/obj/effect/decal/cleanable/ash/large/New()
|
||||
/obj/effect/decal/cleanable/ash/large/Initialize()
|
||||
..()
|
||||
reagents.add_reagent("ash", 30) //double the amount of ash.
|
||||
|
||||
@@ -149,7 +149,7 @@
|
||||
if(severity == 1) //so shreds created during an explosion aren't deleted by the explosion.
|
||||
qdel(src)
|
||||
|
||||
/obj/effect/decal/cleanable/shreds/New()
|
||||
/obj/effect/decal/cleanable/shreds/Initialize()
|
||||
pixel_x = rand(-10, 10)
|
||||
pixel_y = rand(-10, 10)
|
||||
..()
|
||||
|
||||
@@ -48,7 +48,7 @@
|
||||
blood_state = BLOOD_STATE_OIL
|
||||
bloodiness = MAX_SHOE_BLOODINESS
|
||||
|
||||
/obj/effect/decal/cleanable/oil/New()
|
||||
/obj/effect/decal/cleanable/oil/Initialize()
|
||||
..()
|
||||
reagents.add_reagent("oil", 30)
|
||||
|
||||
|
||||
@@ -6,10 +6,9 @@
|
||||
gender = NEUTER
|
||||
var/do_icon_rotate = TRUE
|
||||
|
||||
/obj/effect/decal/cleanable/crayon/New(location, main = "#FFFFFF", var/type = "rune1", var/e_name = "rune", var/rotation = 0, var/alt_icon = null)
|
||||
/obj/effect/decal/cleanable/crayon/Initialize(mapload, main = "#FFFFFF", var/type = "rune1", var/e_name = "rune", var/rotation = 0, var/alt_icon = null)
|
||||
..()
|
||||
loc = location
|
||||
|
||||
|
||||
name = e_name
|
||||
desc = "A [name] vandalizing the station."
|
||||
if(type == "poseur tag")
|
||||
@@ -32,17 +31,17 @@
|
||||
do_icon_rotate = FALSE //These are designed to always face south, so no rotation please.
|
||||
var/datum/gang/gang
|
||||
|
||||
/obj/effect/decal/cleanable/crayon/gang/New(location, var/datum/gang/G, var/e_name = "gang tag", var/rotation = 0)
|
||||
/obj/effect/decal/cleanable/crayon/gang/Initialize(mapload, var/datum/gang/G, var/e_name = "gang tag", var/rotation = 0)
|
||||
if(!type || !G)
|
||||
qdel(src)
|
||||
|
||||
var/area/territory = get_area(location)
|
||||
var/area/territory = get_area(src)
|
||||
gang = G
|
||||
var/newcolor = G.color_hex
|
||||
icon_state = G.name
|
||||
G.territory_new |= list(territory.type = territory.name)
|
||||
|
||||
..(location, newcolor, icon_state, e_name, rotation)
|
||||
..(mapload, newcolor, icon_state, e_name, rotation)
|
||||
|
||||
/obj/effect/decal/cleanable/crayon/gang/Destroy()
|
||||
var/area/territory = get_area(src)
|
||||
|
||||
@@ -10,6 +10,10 @@
|
||||
if(!(resistance_flags & FIRE_PROOF)) //non fire proof decal or being burned by lava
|
||||
qdel(src)
|
||||
|
||||
/obj/effect/decal/HandleTurfChange(turf/T)
|
||||
..()
|
||||
if(T == loc && (isspaceturf(T) || isclosedturf(T) || islava(T) || istype(T, /turf/open/water) || istype(T, /turf/open/chasm)))
|
||||
qdel(src)
|
||||
|
||||
/obj/effect/turf_decal
|
||||
var/group = TURF_DECAL_PAINT
|
||||
|
||||
@@ -5,11 +5,12 @@
|
||||
layer = POINT_LAYER
|
||||
duration = 25
|
||||
|
||||
/obj/effect/overlay/temp/point/New(atom/target, set_invis = 0)
|
||||
/obj/effect/overlay/temp/point/Initialize(mapload, set_invis = 0)
|
||||
..()
|
||||
loc = get_turf(target)
|
||||
pixel_x = target.pixel_x
|
||||
pixel_y = target.pixel_y
|
||||
var/atom/old_loc = loc
|
||||
loc = get_turf(src)
|
||||
pixel_x = old_loc.pixel_x
|
||||
pixel_y = old_loc.pixel_y
|
||||
invisibility = set_invis
|
||||
|
||||
//Used by spraybottles.
|
||||
@@ -30,4 +31,4 @@
|
||||
desc = "A lightweight support lattice."
|
||||
icon = 'icons/obj/smooth_structures/lattice.dmi'
|
||||
icon_state = "lattice"
|
||||
density = 1
|
||||
density = 1
|
||||
|
||||
@@ -10,59 +10,6 @@
|
||||
tag = text("landmark*[]", name)
|
||||
landmarks_list += src
|
||||
|
||||
switch(name) //some of these are probably obsolete
|
||||
if("monkey")
|
||||
monkeystart += loc
|
||||
qdel(src)
|
||||
return
|
||||
if("start")
|
||||
newplayer_start += loc
|
||||
qdel(src)
|
||||
return
|
||||
if("wizard")
|
||||
wizardstart += loc
|
||||
qdel(src)
|
||||
return
|
||||
if("JoinLate")
|
||||
latejoin += loc
|
||||
qdel(src)
|
||||
return
|
||||
if("prisonwarp")
|
||||
prisonwarp += loc
|
||||
qdel(src)
|
||||
return
|
||||
if("Holding Facility")
|
||||
holdingfacility += loc
|
||||
if("tdome1")
|
||||
tdome1 += loc
|
||||
if("tdome2")
|
||||
tdome2 += loc
|
||||
if("tdomeadmin")
|
||||
tdomeadmin += loc
|
||||
if("tdomeobserve")
|
||||
tdomeobserve += loc
|
||||
if("prisonsecuritywarp")
|
||||
prisonsecuritywarp += loc
|
||||
qdel(src)
|
||||
return
|
||||
if("blobstart")
|
||||
blobstart += loc
|
||||
qdel(src)
|
||||
return
|
||||
if("secequipment")
|
||||
secequipment += loc
|
||||
qdel(src)
|
||||
return
|
||||
if("Emergencyresponseteam")
|
||||
emergencyresponseteamspawn += loc
|
||||
qdel(src)
|
||||
return
|
||||
if("xeno_spawn")
|
||||
xeno_spawn += loc
|
||||
qdel(src)
|
||||
return
|
||||
return 1
|
||||
|
||||
/obj/effect/landmark/Destroy()
|
||||
landmarks_list -= src
|
||||
return ..()
|
||||
@@ -76,14 +23,112 @@
|
||||
/obj/effect/landmark/start/New()
|
||||
start_landmarks_list += src
|
||||
..()
|
||||
if(name != initial(name))
|
||||
if(name != "start")
|
||||
tag = "start*[name]"
|
||||
return 1
|
||||
|
||||
/obj/effect/landmark/start/Destroy()
|
||||
start_landmarks_list -= src
|
||||
return ..()
|
||||
|
||||
// START LANDMARKS FOLLOW. Don't change the names unless
|
||||
// you are refactoring shitty landmark code.
|
||||
|
||||
/obj/effect/landmark/start/assistant
|
||||
name = "Assistant"
|
||||
|
||||
/obj/effect/landmark/start/janitor
|
||||
name = "Janitor"
|
||||
|
||||
/obj/effect/landmark/start/cargo_technician
|
||||
name = "Cargo Technician"
|
||||
|
||||
/obj/effect/landmark/start/bartender
|
||||
name = "Bartender"
|
||||
|
||||
/obj/effect/landmark/start/clown
|
||||
name = "Clown"
|
||||
|
||||
/obj/effect/landmark/start/mime
|
||||
name = "Mime"
|
||||
|
||||
/obj/effect/landmark/start/quartermaster
|
||||
name = "Quartermaster"
|
||||
|
||||
/obj/effect/landmark/start/atmospheric_technician
|
||||
name = "Atmospheric Technician"
|
||||
|
||||
/obj/effect/landmark/start/cook
|
||||
name = "Cook"
|
||||
|
||||
/obj/effect/landmark/start/shaft_miner
|
||||
name = "Shaft Miner"
|
||||
|
||||
/obj/effect/landmark/start/security_officer
|
||||
name = "Security Officer"
|
||||
|
||||
/obj/effect/landmark/start/botanist
|
||||
name = "Botanist"
|
||||
|
||||
/obj/effect/landmark/start/head_of_security
|
||||
name = "Head of Security"
|
||||
|
||||
/obj/effect/landmark/start/ai
|
||||
name = "AI"
|
||||
|
||||
/obj/effect/landmark/start/captain
|
||||
name = "Captain"
|
||||
|
||||
/obj/effect/landmark/start/detective
|
||||
name = "Detective"
|
||||
|
||||
/obj/effect/landmark/start/warden
|
||||
name = "Warden"
|
||||
|
||||
/obj/effect/landmark/start/chief_engineer
|
||||
name = "Chief Engineer"
|
||||
|
||||
/obj/effect/landmark/start/cyborg
|
||||
name = "Cyborg"
|
||||
|
||||
/obj/effect/landmark/start/head_of_personnel
|
||||
name = "Head of Personnel"
|
||||
|
||||
/obj/effect/landmark/start/librarian
|
||||
name = "Librarian"
|
||||
|
||||
/obj/effect/landmark/start/lawyer
|
||||
name = "Lawyer"
|
||||
|
||||
/obj/effect/landmark/start/station_engineer
|
||||
name = "Station Engineer"
|
||||
|
||||
/obj/effect/landmark/start/medical_doctor
|
||||
name = "Medical Doctor"
|
||||
|
||||
/obj/effect/landmark/start/scientist
|
||||
name = "Scientist"
|
||||
|
||||
/obj/effect/landmark/start/chemist
|
||||
name = "Chemist"
|
||||
|
||||
/obj/effect/landmark/start/roboticist
|
||||
name = "Roboticist"
|
||||
|
||||
/obj/effect/landmark/start/research_director
|
||||
name = "Research Director"
|
||||
|
||||
/obj/effect/landmark/start/geneticist
|
||||
name = "Geneticist"
|
||||
|
||||
/obj/effect/landmark/start/chief_medical_officer
|
||||
name = "Chief Medical Officer"
|
||||
|
||||
/obj/effect/landmark/start/virologist
|
||||
name = "Virologist"
|
||||
|
||||
/obj/effect/landmark/start/chaplain
|
||||
name = "Chaplain"
|
||||
|
||||
//Department Security spawns
|
||||
|
||||
/obj/effect/landmark/start/depsec
|
||||
@@ -109,14 +154,162 @@
|
||||
/obj/effect/landmark/start/depsec/science
|
||||
name = "science_sec"
|
||||
|
||||
/obj/effect/landmark/start/wizard
|
||||
name = "wizard"
|
||||
|
||||
/obj/effect/landmark/start/wizard/Initialize(mapload)
|
||||
..()
|
||||
wizardstart += loc
|
||||
qdel(src)
|
||||
|
||||
/obj/effect/landmark/start/new_player
|
||||
name = "New Player"
|
||||
|
||||
// Must be on New() rather than Initialize, because players will
|
||||
// join before SSatom initializes everything.
|
||||
/obj/effect/landmark/start/new_player/New(loc)
|
||||
..()
|
||||
newplayer_start += loc
|
||||
|
||||
/obj/effect/landmark/start/new_player/Initialize(mapload)
|
||||
..()
|
||||
qdel(src)
|
||||
|
||||
|
||||
|
||||
/obj/effect/landmark/latejoin
|
||||
name = "JoinLate"
|
||||
|
||||
/obj/effect/landmark/latejoin/Initialize(mapload)
|
||||
..()
|
||||
latejoin += loc
|
||||
qdel(src)
|
||||
|
||||
// carp.
|
||||
/obj/effect/landmark/carpspawn
|
||||
name = "carpspawn"
|
||||
|
||||
// lightsout.
|
||||
/obj/effect/landmark/lightsout
|
||||
name = "lightsout"
|
||||
|
||||
// observer-start.
|
||||
/obj/effect/landmark/observer_start
|
||||
name = "Observer-Start"
|
||||
|
||||
// revenant spawn.
|
||||
/obj/effect/landmark/revenantspawn
|
||||
name = "revnantspawn"
|
||||
|
||||
// triple ais.
|
||||
/obj/effect/landmark/tripai
|
||||
name = "tripai"
|
||||
|
||||
// marauder entry (XXX WTF IS MAURADER ENTRY???)
|
||||
|
||||
/obj/effect/landmark/marauder_entry
|
||||
name = "Marauder Entry"
|
||||
|
||||
// syndicate breach area (XXX I DON'T KNOW WHAT THIS IS EITHER)
|
||||
|
||||
/obj/effect/landmark/syndicate_breach_area
|
||||
name = "Syndicate Breach Area"
|
||||
|
||||
// teleport scroll landmark, XXX DOES THIS DO ANYTHING?
|
||||
/obj/effect/landmark/teleport_scroll
|
||||
name = "Teleport-Scroll"
|
||||
|
||||
/obj/effect/landmark/syndicate_spawn
|
||||
name = "Syndicate-Spawn"
|
||||
|
||||
// xenos.
|
||||
/obj/effect/landmark/xeno_spawn
|
||||
name = "xeno_spawn"
|
||||
|
||||
/obj/effect/landmark/xeno_spawn/Initialize(mapload)
|
||||
..()
|
||||
xeno_spawn += loc
|
||||
qdel(src)
|
||||
|
||||
// blobs.
|
||||
/obj/effect/landmark/blobstart
|
||||
name = "blobstart"
|
||||
|
||||
/obj/effect/landmark/blobstart/Initialize(mapload)
|
||||
..()
|
||||
blobstart += loc
|
||||
qdel(src)
|
||||
|
||||
/obj/effect/landmark/secequipment
|
||||
name = "secequipment"
|
||||
|
||||
/obj/effect/landmark/secequipment/Initialize(mapload)
|
||||
..()
|
||||
secequipment += loc
|
||||
qdel(src)
|
||||
|
||||
/obj/effect/landmark/prisonwarp
|
||||
name = "prisonwarp"
|
||||
|
||||
/obj/effect/landmark/prisonwarp/Initialize(mapload)
|
||||
..()
|
||||
prisonwarp += loc
|
||||
qdel(src)
|
||||
|
||||
/obj/effect/landmark/ert_spawn
|
||||
name = "Emergencyresponseteam"
|
||||
|
||||
/obj/effect/landmark/ert_spawn/Initialize(mapload)
|
||||
..()
|
||||
emergencyresponseteamspawn += loc
|
||||
qdel(src)
|
||||
|
||||
/obj/effect/landmark/holding_facility
|
||||
name = "Holding Facility"
|
||||
|
||||
/obj/effect/landmark/holding_facility/Initialize(mapload)
|
||||
..()
|
||||
holdingfacility += loc
|
||||
qdel(src)
|
||||
|
||||
/obj/effect/landmark/thunderdome/observe
|
||||
name = "tdomeobserve"
|
||||
|
||||
/obj/effect/landmark/thunderdome/observe/Initialize(mapload)
|
||||
..()
|
||||
tdomeobserve += loc
|
||||
qdel(src)
|
||||
|
||||
/obj/effect/landmark/thunderdome/one
|
||||
name = "tdome1"
|
||||
|
||||
/obj/effect/landmark/thunderdome/one/Initialize(mapload)
|
||||
..()
|
||||
tdome1 += loc
|
||||
qdel(src)
|
||||
|
||||
/obj/effect/landmark/thunderdome/two
|
||||
name = "tdome2"
|
||||
|
||||
/obj/effect/landmark/thunderdome/two/Initialize(mapload)
|
||||
..()
|
||||
tdome2 += loc
|
||||
qdel(src)
|
||||
|
||||
/obj/effect/landmark/thunderdome/admin
|
||||
name = "tdomeadmin"
|
||||
|
||||
/obj/effect/landmark/thunderdome/admin/Initialize(mapload)
|
||||
..()
|
||||
tdomeadmin += loc
|
||||
qdel(src)
|
||||
|
||||
//generic event spawns
|
||||
/obj/effect/landmark/event_spawn
|
||||
name = "generic event spawn"
|
||||
icon_state = "x4"
|
||||
|
||||
|
||||
/obj/effect/landmark/event_spawn/New()
|
||||
..()
|
||||
generic_event_spawns += src
|
||||
|
||||
@@ -16,5 +16,5 @@
|
||||
message_admins("An alien egg has been delivered to [A] at [ADMIN_COORDJMP(T)].")
|
||||
log_game("An alien egg has been delivered to [A] at [COORD(T)]")
|
||||
var/message = "Attention [station_name()], we have entrusted you with a research specimen in [A]. Remember to follow all safety precautions when dealing with the specimen."
|
||||
addtimer(CALLBACK(GLOBAL_PROC, /.proc/print_command_report, message), announcement_time)
|
||||
SSticker.OnRoundstart(CALLBACK(GLOBAL_PROC, /proc/addtimer, CALLBACK(GLOBAL_PROC, /.proc/print_command_report, message), announcement_time))
|
||||
qdel(src)
|
||||
|
||||
@@ -51,6 +51,7 @@ var/explosionid = 1
|
||||
|
||||
if(!silent)
|
||||
var/frequency = get_rand_frequency()
|
||||
var/ex_sound = get_sfx("explosion")
|
||||
for(var/mob/M in player_list)
|
||||
// Double check for client
|
||||
if(M && M.client)
|
||||
@@ -59,7 +60,7 @@ var/explosionid = 1
|
||||
var/dist = get_dist(M_turf, epicenter)
|
||||
// If inside the blast radius + world.view - 2
|
||||
if(dist <= round(max_range + world.view - 2, 1))
|
||||
M.playsound_local(epicenter, get_sfx("explosion"), 100, 1, frequency, falloff = 5) // get_sfx() is so that everyone gets the same sound
|
||||
M.playsound_local(epicenter, ex_sound, 100, 1, frequency, falloff = 5)
|
||||
// You hear a far explosion if you're outside the blast radius. Small bombs shouldn't be heard all over the station.
|
||||
else if(dist <= far_dist)
|
||||
var/far_volume = Clamp(far_dist, 30, 50) // Volume is based on explosion size and dist
|
||||
|
||||
@@ -6,7 +6,7 @@ var/global/list/datum/stack_recipe/rod_recipes = list ( \
|
||||
|
||||
/obj/item/stack/rods
|
||||
name = "metal rod"
|
||||
desc = "Some rods. Can be used for building, or something."
|
||||
desc = "Some rods. Can be used for building or something."
|
||||
singular_name = "metal rod"
|
||||
icon_state = "rods"
|
||||
item_state = "rods"
|
||||
|
||||
@@ -57,7 +57,7 @@
|
||||
|
||||
/obj/item/weapon/implantcase/chem/attackby(obj/item/weapon/W, mob/user, params)
|
||||
if(istype(W,/obj/item/weapon/reagent_containers/syringe) && imp)
|
||||
W.afterattack(imp, user, params)
|
||||
W.afterattack(imp, user, TRUE, params)
|
||||
return TRUE
|
||||
else
|
||||
return ..()
|
||||
|
||||
@@ -238,9 +238,6 @@
|
||||
icon_state_on = "cutlass1"
|
||||
light_color = "#ff0000"
|
||||
|
||||
/obj/item/weapon/melee/energy/sword/pirate/New()
|
||||
return
|
||||
|
||||
/obj/item/weapon/melee/energy/blade
|
||||
name = "energy blade"
|
||||
desc = "A concentrated beam of energy in the shape of a blade. Very stylish... and lethal."
|
||||
|
||||
@@ -1,12 +1,12 @@
|
||||
/obj
|
||||
languages_spoken = HUMAN
|
||||
languages_understood = HUMAN
|
||||
var/crit_fail = 0
|
||||
var/crit_fail = FALSE
|
||||
animate_movement = 2
|
||||
var/throwforce = 0
|
||||
var/in_use = 0 // If we have a user using us, this will be set on. We will check if the user has stopped using us, and thus stop updating and LAGGING EVERYTHING!
|
||||
|
||||
var/damtype = "brute"
|
||||
var/damtype = BRUTE
|
||||
var/force = 0
|
||||
|
||||
var/list/armor
|
||||
@@ -18,13 +18,13 @@
|
||||
|
||||
var/acid_level = 0 //how much acid is on that obj
|
||||
|
||||
var/being_shocked = 0
|
||||
var/being_shocked = FALSE
|
||||
|
||||
var/on_blueprints = FALSE //Are we visible on the station blueprints at roundstart?
|
||||
var/force_blueprints = FALSE //forces the obj to be on the blueprints, regardless of when it was created.
|
||||
|
||||
var/persistence_replacement = null //have something WAY too amazing to live to the next round? Set a new path here. Overuse of this var will make me upset.
|
||||
var/unique_rename = 0 // can you customize the description/name of the thing?
|
||||
var/persistence_replacement //have something WAY too amazing to live to the next round? Set a new path here. Overuse of this var will make me upset.
|
||||
var/unique_rename = FALSE // can you customize the description/name of the thing?
|
||||
|
||||
var/dangerous_possession = FALSE //Admin possession yes/no
|
||||
|
||||
|
||||
@@ -50,4 +50,7 @@
|
||||
. = ..(amount, TRUE)
|
||||
|
||||
/mob/living/simple_animal/bot/rad_act(amount)
|
||||
. = ..(amount, TRUE)
|
||||
. = ..(amount, TRUE)
|
||||
|
||||
/mob/living/simple_animal/drone/rad_act(amount)
|
||||
. = ..(amount, TRUE)
|
||||
|
||||
@@ -37,11 +37,7 @@
|
||||
|
||||
/obj/structure/closet/Initialize(mapload)
|
||||
if(mapload && !opened) // if closed, any item at the crate's loc is put in the contents
|
||||
. = TRUE //late initialize so we come back here
|
||||
else if(initialized)
|
||||
//we were late initialized, so now it's time to...
|
||||
take_contents()
|
||||
return
|
||||
addtimer(CALLBACK(src, .proc/take_contents), 0)
|
||||
..()
|
||||
update_icon()
|
||||
|
||||
@@ -122,7 +118,7 @@
|
||||
/obj/structure/closet/proc/take_contents()
|
||||
var/turf/T = get_turf(src)
|
||||
for(var/atom/movable/AM in T)
|
||||
if(insert(AM) == -1) // limit reached
|
||||
if(AM != src && insert(AM) == -1) // limit reached
|
||||
break
|
||||
|
||||
/obj/structure/closet/proc/open(mob/living/user)
|
||||
|
||||
@@ -82,9 +82,7 @@
|
||||
var/obj/structure/statue/petrified/S = new(loc, src, statue_timer)
|
||||
S.name = "statue of [name]"
|
||||
bleedsuppress = 1
|
||||
S.icon = icon
|
||||
S.icon_state = icon_state
|
||||
S.copy_overlays(overlays)
|
||||
S.copy_overlays(src)
|
||||
var/newcolor = list(rgb(77,77,77), rgb(150,150,150), rgb(28,28,28), rgb(0,0,0))
|
||||
S.add_atom_colour(newcolor, FIXED_COLOUR_PRIORITY)
|
||||
return 1
|
||||
|
||||
@@ -21,7 +21,7 @@
|
||||
..()
|
||||
for(var/obj/structure/lattice/LAT in loc)
|
||||
if(LAT != src)
|
||||
qdel(LAT)
|
||||
QDEL_IN(LAT, 0)
|
||||
|
||||
/obj/structure/lattice/blob_act(obj/structure/blob/B)
|
||||
return
|
||||
|
||||
@@ -182,6 +182,27 @@
|
||||
popup.set_title_image(user.browse_rsc_icon(instrumentObj.icon, instrumentObj.icon_state))
|
||||
popup.open()
|
||||
|
||||
/datum/song/proc/ParseSong(text)
|
||||
set waitfor = FALSE
|
||||
//split into lines
|
||||
lines = splittext(text, "\n")
|
||||
if(lines.len)
|
||||
if(copytext(lines[1],1,6) == "BPM: ")
|
||||
tempo = sanitize_tempo(600 / text2num(copytext(lines[1],6)))
|
||||
lines.Cut(1,2)
|
||||
else
|
||||
tempo = sanitize_tempo(5) // default 120 BPM
|
||||
if(lines.len > 50)
|
||||
to_chat(usr, "Too many lines!")
|
||||
lines.Cut(51)
|
||||
var/linenum = 1
|
||||
for(var/l in lines)
|
||||
if(lentext(l) > 50)
|
||||
to_chat(usr, "Line [linenum] too long!")
|
||||
lines.Remove(l)
|
||||
else
|
||||
linenum++
|
||||
updateDialog(usr) // make sure updates when complete
|
||||
|
||||
/datum/song/Topic(href, href_list)
|
||||
if(!usr.canUseTopic(instrumentObj))
|
||||
@@ -208,26 +229,7 @@
|
||||
if(cont == "no")
|
||||
break
|
||||
while(lentext(t) > 3072)
|
||||
|
||||
//split into lines
|
||||
spawn()
|
||||
lines = splittext(t, "\n")
|
||||
if(copytext(lines[1],1,6) == "BPM: ")
|
||||
tempo = sanitize_tempo(600 / text2num(copytext(lines[1],6)))
|
||||
lines.Cut(1,2)
|
||||
else
|
||||
tempo = sanitize_tempo(5) // default 120 BPM
|
||||
if(lines.len > 50)
|
||||
to_chat(usr, "Too many lines!")
|
||||
lines.Cut(51)
|
||||
var/linenum = 1
|
||||
for(var/l in lines)
|
||||
if(lentext(l) > 50)
|
||||
to_chat(usr, "Line [linenum] too long!")
|
||||
lines.Remove(l)
|
||||
else
|
||||
linenum++
|
||||
updateDialog(usr) // make sure updates when complete
|
||||
ParseSong(t)
|
||||
|
||||
else if(href_list["help"])
|
||||
help = text2num(href_list["help"]) - 1
|
||||
|
||||
@@ -16,6 +16,11 @@
|
||||
..()
|
||||
update_icon()
|
||||
|
||||
/turf/open/floor/light/break_tile()
|
||||
..()
|
||||
light_range = 0
|
||||
update_light()
|
||||
|
||||
/turf/open/floor/light/update_icon()
|
||||
..()
|
||||
if(on)
|
||||
|
||||
@@ -76,11 +76,14 @@
|
||||
/turf/open/space/attack_paw(mob/user)
|
||||
return src.attack_hand(user)
|
||||
|
||||
/turf/open/space/attackby(obj/item/C, mob/user, params, area/area_restriction)
|
||||
/turf/open/space/proc/CanBuildHere()
|
||||
return TRUE
|
||||
|
||||
/turf/open/space/attackby(obj/item/C, mob/user, params)
|
||||
..()
|
||||
if(!CanBuildHere())
|
||||
return
|
||||
if(istype(C, /obj/item/stack/rods))
|
||||
if(istype(area_restriction) && !istype(get_area(src), area_restriction))
|
||||
return
|
||||
var/obj/item/stack/rods/R = C
|
||||
var/obj/structure/lattice/L = locate(/obj/structure/lattice, src)
|
||||
var/obj/structure/lattice/catwalk/W = locate(/obj/structure/lattice/catwalk, src)
|
||||
@@ -194,6 +197,8 @@
|
||||
|
||||
|
||||
/turf/open/space/rcd_vals(mob/user, obj/item/weapon/rcd/the_rcd)
|
||||
if(!CanBuildHere())
|
||||
return FALSE
|
||||
switch(the_rcd.mode)
|
||||
if(RCD_FLOORWALL)
|
||||
return list("mode" = RCD_FLOORWALL, "delay" = 0, "cost" = 2)
|
||||
|
||||
@@ -58,9 +58,8 @@
|
||||
AM.loc = T
|
||||
AM.newtonian_move(dir)
|
||||
|
||||
//Overwrite because we dont want people building rods
|
||||
/turf/open/space/transit/attackby(obj/item/C, mob/user, params)
|
||||
..(C, user, params, /area/shuttle)
|
||||
/turf/open/space/transit/CanBuildHere()
|
||||
return istype(get_area(src), /area/shuttle)
|
||||
|
||||
/turf/open/space/transit/Initialize()
|
||||
..()
|
||||
@@ -90,4 +89,4 @@
|
||||
state = ((p*x+y) % 15) + 1
|
||||
|
||||
icon_state = "speedspace_ns_[state]"
|
||||
transform = turn(matrix(), angle)
|
||||
transform = turn(matrix(), angle)
|
||||
@@ -249,6 +249,8 @@
|
||||
|
||||
queue_smooth_neighbors(src)
|
||||
|
||||
HandleTurfChange(src)
|
||||
|
||||
/turf/open/AfterChange(ignore_air)
|
||||
..()
|
||||
RemoveLattice()
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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
@@ -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"
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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))
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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 ..()
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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()
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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>.")
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user