mirror of
https://github.com/ParadiseSS13/Paradise.git
synced 2026-08-25 13:07:46 +01:00
Fixes merge conflict in event_container
This commit is contained in:
@@ -614,6 +614,19 @@ var/global/nologevent = 0
|
||||
message_admins("[key_name_admin(usr)] toggled Dead OOC.", 1)
|
||||
feedback_add_details("admin_verb","TDOOC") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
|
||||
|
||||
/datum/admins/proc/toggleemoji()
|
||||
set category = "Server"
|
||||
set desc = "Toggle OOC Emoji"
|
||||
set name = "Toggle OOC Emoji"
|
||||
|
||||
if(!check_rights(R_ADMIN))
|
||||
return
|
||||
|
||||
config.disable_ooc_emoji = !(config.disable_ooc_emoji)
|
||||
log_admin("[key_name(usr)] toggled OOC Emoji.")
|
||||
message_admins("[key_name_admin(usr)] toggled OOC Emoji.", 1)
|
||||
feedback_add_details("admin_verb", "TEMOJ")
|
||||
|
||||
/datum/admins/proc/startnow()
|
||||
set category = "Server"
|
||||
set desc="Start the round RIGHT NOW"
|
||||
@@ -794,7 +807,8 @@ var/global/nologevent = 0
|
||||
var/turf/T = get_turf(usr.loc)
|
||||
T.ChangeTurf(chosen)
|
||||
else
|
||||
new chosen(usr.loc)
|
||||
var/atom/A = new chosen(usr.loc)
|
||||
A.admin_spawned = TRUE
|
||||
|
||||
log_admin("[key_name(usr)] spawned [chosen] at ([usr.x],[usr.y],[usr.z])")
|
||||
feedback_add_details("admin_verb","SA") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
|
||||
|
||||
@@ -48,6 +48,7 @@ var/list/admin_verbs_admin = list(
|
||||
/datum/admins/proc/togglelooc, /*toggles looc on/off for everyone*/
|
||||
/datum/admins/proc/toggleoocdead, /*toggles ooc on/off for everyone who is dead*/
|
||||
/datum/admins/proc/toggledsay, /*toggles dsay on/off for everyone*/
|
||||
/datum/admins/proc/toggleemoji, /*toggles using emoji in ooc for everyone*/
|
||||
/client/proc/game_panel, /*game panel, allows to change game-mode etc*/
|
||||
/client/proc/cmd_admin_say, /*admin-only ooc chat*/
|
||||
/datum/admins/proc/PlayerNotes,
|
||||
@@ -163,7 +164,9 @@ var/list/admin_verbs_debug = list(
|
||||
/client/proc/map_template_upload,
|
||||
/client/proc/view_runtimes,
|
||||
/client/proc/admin_serialize,
|
||||
/client/proc/admin_deserialize
|
||||
/client/proc/admin_deserialize,
|
||||
/client/proc/jump_to_ruin,
|
||||
/client/proc/toggle_medal_disable
|
||||
)
|
||||
var/list/admin_verbs_possess = list(
|
||||
/proc/possess,
|
||||
|
||||
@@ -446,22 +446,8 @@
|
||||
log_admin("Build Mode: [key_name(user)] built an airlock at ([object.x],[object.y],[object.z])")
|
||||
new/obj/machinery/door/airlock(get_turf(object))
|
||||
else if(istype(object,/turf) && ctrl_click && left_click)
|
||||
switch(build_dir)
|
||||
if(NORTH)
|
||||
var/obj/structure/window/reinforced/WIN = new/obj/structure/window/reinforced(get_turf(object))
|
||||
WIN.dir = NORTH
|
||||
if(SOUTH)
|
||||
var/obj/structure/window/reinforced/WIN = new/obj/structure/window/reinforced(get_turf(object))
|
||||
WIN.dir = SOUTH
|
||||
if(EAST)
|
||||
var/obj/structure/window/reinforced/WIN = new/obj/structure/window/reinforced(get_turf(object))
|
||||
WIN.dir = EAST
|
||||
if(WEST)
|
||||
var/obj/structure/window/reinforced/WIN = new/obj/structure/window/reinforced(get_turf(object))
|
||||
WIN.dir = WEST
|
||||
if(NORTHWEST)
|
||||
var/obj/structure/window/reinforced/WIN = new/obj/structure/window/reinforced(get_turf(object))
|
||||
WIN.dir = NORTHWEST
|
||||
var/obj/structure/window/reinforced/WIN = new/obj/structure/window/reinforced(get_turf(object))
|
||||
WIN.setDir(build_dir)
|
||||
log_admin("Build Mode: [key_name(user)] built a window at ([object.x],[object.y],[object.z])")
|
||||
|
||||
if(ADV_BUILDMODE)
|
||||
@@ -472,7 +458,7 @@
|
||||
T.ChangeTurf(objholder)
|
||||
else
|
||||
var/obj/A = new objholder (get_turf(object))
|
||||
A.dir = build_dir
|
||||
A.setDir(build_dir)
|
||||
log_admin("Build Mode: [key_name(user)] modified [A]'s ([A.x],[A.y],[A.z]) dir to [build_dir]")
|
||||
else if(right_click)
|
||||
if(isobj(object))
|
||||
@@ -561,7 +547,7 @@
|
||||
T.ChangeTurf(objholder)
|
||||
else
|
||||
var/obj/A = new objholder(T)
|
||||
A.dir = build_dir
|
||||
A.setDir(build_dir)
|
||||
deselect_region()
|
||||
return
|
||||
|
||||
|
||||
@@ -393,8 +393,11 @@
|
||||
logout_status = " <i>(snpc)</i>"
|
||||
else
|
||||
logout_status = M.client ? "" : " <i>(logged out)</i>"
|
||||
var/dname = M.real_name
|
||||
if(!dname)
|
||||
dname = M
|
||||
|
||||
return {"<tr><td><a href='?src=[UID()];adminplayeropts=\ref[M]'>[M.real_name]</a><b>[caption]</b>[logout_status][M.stat == 2 ? " <b><font color=red>(DEAD)</font></b>" : ""]</td>
|
||||
return {"<tr><td><a href='?src=[UID()];adminplayeropts=\ref[M]'>[dname]</a><b>[caption]</b>[logout_status][M.stat == 2 ? " <b><font color=red>(DEAD)</font></b>" : ""]</td>
|
||||
<td><A href='?src=[usr.UID()];priv_msg=\ref[M]'>PM</A></td>[close ? "</tr>" : ""]"}
|
||||
|
||||
/datum/admins/proc/check_antagonists()
|
||||
@@ -424,7 +427,7 @@
|
||||
else
|
||||
dat += "<tr><td><i>Nuclear Operative not found!</i></td></tr>"
|
||||
dat += "</table><br><table><tr><td><B>Nuclear Disk(s)</B></td></tr>"
|
||||
for(var/obj/item/weapon/disk/nuclear/N in world)
|
||||
for(var/obj/item/weapon/disk/nuclear/N in poi_list)
|
||||
dat += "<tr><td>[N.name], "
|
||||
var/atom/disk_loc = N.loc
|
||||
while(!istype(disk_loc, /turf))
|
||||
@@ -489,6 +492,11 @@
|
||||
|
||||
if(ticker.mode.cult.len)
|
||||
dat += check_role_table("Cultists", ticker.mode.cult, 0)
|
||||
dat += "<br> use <a href='?src=[UID()];cult_mindspeak=[UID()]'>Cult Mindspeak</a>"
|
||||
if(GAMEMODE_IS_CULT)
|
||||
var/datum/game_mode/cult/cult_round = ticker.mode
|
||||
if(!cult_round.narsie_condition_cleared)
|
||||
dat += "<br><a href='?src=[UID()];cult_nextobj=[UID()]'>complete objective (debug)</a>"
|
||||
|
||||
if(ticker.mode.traitors.len)
|
||||
dat += check_role_table("Traitors", ticker.mode.traitors)
|
||||
|
||||
@@ -1533,6 +1533,34 @@
|
||||
else if(href_list["check_antagonist"])
|
||||
check_antagonists()
|
||||
|
||||
else if(href_list["cult_nextobj"])
|
||||
if(alert(usr, "Validate the current Cult objective and unlock the next one?", "Cult Cheat Code", "Yes", "No") != "Yes")
|
||||
return
|
||||
|
||||
if(!GAMEMODE_IS_CULT)
|
||||
alert("Couldn't locate cult mode datum! This shouldn't ever happen, tell a coder!")
|
||||
return
|
||||
|
||||
var/datum/game_mode/cult/cult_round = ticker.mode
|
||||
cult_round.bypass_phase()
|
||||
message_admins("Admin [key_name_admin(usr)] has unlocked the Cult's next objective.")
|
||||
log_admin("Admin [key_name_admin(usr)] has unlocked the Cult's next objective.")
|
||||
|
||||
else if(href_list["cult_mindspeak"])
|
||||
var/input = stripped_input(usr, "Communicate to all the cultists with the voice of [ticker.mode.cultdat.entity_name]", "Voice of [ticker.mode.cultdat.entity_name]", "")
|
||||
if(!input)
|
||||
return
|
||||
|
||||
for(var/datum/mind/H in ticker.mode.cult)
|
||||
if (H.current)
|
||||
to_chat(H.current, "<span class='danger'>[ticker.mode.cultdat.entity_name]</span> murmurs, <span class='cultlarge'>[input]</span></span>")
|
||||
|
||||
for(var/mob/dead/observer/O in player_list)
|
||||
to_chat(O, "<span class='danger'>[ticker.mode.cultdat.entity_name]</span> murmurs, <span class='cultlarge'>[input]</span></span>")
|
||||
|
||||
message_admins("Admin [key_name_admin(usr)] has talked with the Voice of [ticker.mode.cultdat.entity_name].")
|
||||
log_admin("[key_name(usr)] Voice of [ticker.mode.cultdat.entity_name]: [input]")
|
||||
|
||||
else if(href_list["adminplayerobservecoodjump"])
|
||||
if(!check_rights(R_ADMIN)) return
|
||||
|
||||
@@ -2145,6 +2173,7 @@
|
||||
else
|
||||
var/atom/O = new path(target)
|
||||
if(O)
|
||||
O.admin_spawned = TRUE
|
||||
O.dir = obj_dir
|
||||
if(obj_name)
|
||||
O.name = obj_name
|
||||
@@ -2277,11 +2306,11 @@
|
||||
if(gravity_is_on)
|
||||
log_admin("[key_name(usr)] toggled gravity on.", 1)
|
||||
message_admins("\blue [key_name_admin(usr)] toggled gravity on.", 1)
|
||||
command_announcement.Announce("Gravity generators are again functioning within normal parameters. Sorry for any inconvenience.")
|
||||
event_announcement.Announce("Gravity generators are again functioning within normal parameters. Sorry for any inconvenience.")
|
||||
else
|
||||
log_admin("[key_name(usr)] toggled gravity off.", 1)
|
||||
message_admins("\blue [key_name_admin(usr)] toggled gravity off.", 1)
|
||||
command_announcement.Announce("Feedback surge detected in mass-distributions systems. Artifical gravity has been disabled whilst the system reinitializes. Further failures may result in a gravitational collapse and formation of blackholes. Have a nice day.")
|
||||
event_announcement.Announce("Feedback surge detected in mass-distributions systems. Artifical gravity has been disabled whilst the system reinitializes. Further failures may result in a gravitational collapse and formation of blackholes. Have a nice day.")
|
||||
|
||||
if("power")
|
||||
feedback_inc("admin_secrets_fun_used",1)
|
||||
@@ -2553,7 +2582,7 @@
|
||||
if(is_station_level(W.z) && !istype(get_area(W), /area/bridge) && !istype(get_area(W), /area/crew_quarters) && !istype(get_area(W), /area/security/prison))
|
||||
W.req_access = list()
|
||||
message_admins("[key_name_admin(usr)] activated Egalitarian Station mode")
|
||||
command_announcement.Announce("Centcomm airlock control override activated. Please take this time to get acquainted with your coworkers.", new_sound = 'sound/AI/commandreport.ogg')
|
||||
event_announcement.Announce("Centcomm airlock control override activated. Please take this time to get acquainted with your coworkers.", new_sound = 'sound/AI/commandreport.ogg')
|
||||
if("onlyone")
|
||||
feedback_inc("admin_secrets_fun_used",1)
|
||||
feedback_add_details("admin_secrets_fun_used","OO")
|
||||
|
||||
@@ -119,6 +119,7 @@ var/list/adminhelp_ignored_words = list("unknown","the","a","an","of","monkey","
|
||||
for(var/client/X in modholders + adminholders)
|
||||
if(X.prefs.sound & SOUND_ADMINHELP)
|
||||
X << 'sound/effects/adminhelp.ogg'
|
||||
window_flash(X)
|
||||
to_chat(X, msg)
|
||||
|
||||
//show it to the person adminhelping too
|
||||
|
||||
@@ -133,6 +133,7 @@
|
||||
if(holder && !C.holder)
|
||||
recieve_message = "<span class='[recieve_span]' size='3'>-- Click the [recieve_pm_type]'s name to reply --</span>\n"
|
||||
if(C.adminhelped)
|
||||
window_flash(C)
|
||||
to_chat(C, recieve_message)
|
||||
C.adminhelped = 0
|
||||
|
||||
@@ -149,6 +150,9 @@
|
||||
adminhelp(reply) //sender has left, adminhelp instead
|
||||
return
|
||||
|
||||
// for emoji, we have to define a specific span for jquery to look for
|
||||
msg = "<span class='emoji_enabled'>[msg]</span>"
|
||||
|
||||
recieve_message = "<span class='[recieve_span]'>[type] from-<b>[recieve_pm_type][key_name(src, C, C.holder ? 1 : 0, type)]</b>: [msg]</span>"
|
||||
to_chat(C, recieve_message)
|
||||
to_chat(src, "<font color='blue'>[send_pm_type][type] to-<b>[key_name(C, src, holder ? 1 : 0, type)]</b>: [msg]</font>")
|
||||
|
||||
@@ -1474,3 +1474,57 @@ But you can call procs that are of type /mob/living/carbon/human/proc/ for that
|
||||
return
|
||||
|
||||
error_cache.showTo(usr)
|
||||
|
||||
/client/proc/jump_to_ruin()
|
||||
set category = "Debug"
|
||||
set name = "Jump to Ruin"
|
||||
set desc = "Displays a list of all placed ruins to teleport to."
|
||||
|
||||
if(!check_rights(R_DEBUG))
|
||||
return
|
||||
|
||||
var/list/names = list()
|
||||
for(var/i in ruin_landmarks)
|
||||
var/obj/effect/landmark/ruin/ruin_landmark = i
|
||||
var/datum/map_template/ruin/template = ruin_landmark.ruin_template
|
||||
|
||||
var/count = 1
|
||||
var/name = template.name
|
||||
var/original_name = name
|
||||
|
||||
while(name in names)
|
||||
count++
|
||||
name = "[original_name] ([count])"
|
||||
|
||||
names[name] = ruin_landmark
|
||||
|
||||
var/ruinname = input("Select ruin", "Jump to Ruin") as null|anything in names
|
||||
|
||||
var/obj/effect/landmark/ruin/landmark = names[ruinname]
|
||||
|
||||
if(istype(landmark))
|
||||
var/datum/map_template/ruin/template = landmark.ruin_template
|
||||
admin_forcemove(usr, get_turf(landmark))
|
||||
|
||||
to_chat(usr, "<span class='name'>[template.name]</span>")
|
||||
to_chat(usr, "<span class='italics'>[template.description]</span>")
|
||||
|
||||
log_admin("[key_name(usr)] jumped to ruin [ruinname]")
|
||||
if(!isobserver(usr))
|
||||
message_admins("[key_name_admin(usr)] jumped to ruin [ruinname]", 1)
|
||||
|
||||
feedback_add_details("admin_verb","JT") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
|
||||
|
||||
/client/proc/toggle_medal_disable()
|
||||
set category = "Debug"
|
||||
set name = "Toggle Medal Disable"
|
||||
set desc = "Toggles the safety lock on trying to contact the medal hub."
|
||||
|
||||
if(!check_rights(R_DEBUG))
|
||||
return
|
||||
|
||||
global.medals_enabled = !global.medals_enabled
|
||||
|
||||
message_admins("<span class='adminnotice'>[key_name_admin(src)] [global.medals_enabled ? "disabled" : "enabled"] the medal hub lockout.</span>")
|
||||
feedback_add_details("admin_verb","TMH") // If...
|
||||
log_admin("[key_name(src)] [global.medals_enabled ? "disabled" : "enabled"] the medal hub lockout.")
|
||||
|
||||
@@ -30,6 +30,12 @@ var/intercom_range_display_status = 0
|
||||
src.pixel_x = -224
|
||||
src.pixel_y = -224
|
||||
|
||||
/obj/effect/debugging/mapfix_marker
|
||||
name = "map fix marker"
|
||||
icon = 'icons/mob/screen_gen.dmi'
|
||||
icon_state = "mapfixmarker"
|
||||
desc = "I am a mappers mistake."
|
||||
|
||||
/obj/effect/debugging/marker
|
||||
icon = 'icons/turf/areas.dmi'
|
||||
icon_state = "yellow"
|
||||
|
||||
@@ -137,32 +137,38 @@
|
||||
for(var/mob/M in mob_list)
|
||||
if( istype(M , O.type) )
|
||||
M.vars[variable] = O.vars[variable]
|
||||
M.on_varedit(variable)
|
||||
|
||||
else if(istype(O, /obj))
|
||||
for(var/obj/A in world)
|
||||
if( istype(A , O.type) )
|
||||
A.vars[variable] = O.vars[variable]
|
||||
A.on_varedit(variable)
|
||||
|
||||
else if(istype(O, /turf))
|
||||
for(var/turf/A in world)
|
||||
if( istype(A , O.type) )
|
||||
A.vars[variable] = O.vars[variable]
|
||||
A.on_varedit(variable)
|
||||
|
||||
else
|
||||
if(istype(O, /mob))
|
||||
for(var/mob/M in mob_list)
|
||||
if(M.type == O.type)
|
||||
M.vars[variable] = O.vars[variable]
|
||||
M.on_varedit(variable)
|
||||
|
||||
else if(istype(O, /obj))
|
||||
for(var/obj/A in world)
|
||||
if(A.type == O.type)
|
||||
A.vars[variable] = O.vars[variable]
|
||||
A.on_varedit(variable)
|
||||
|
||||
else if(istype(O, /turf))
|
||||
for(var/turf/A in world)
|
||||
if(A.type == O.type)
|
||||
A.vars[variable] = O.vars[variable]
|
||||
A.on_varedit(variable)
|
||||
|
||||
if("edit referenced object")
|
||||
return .(O.vars[variable])
|
||||
|
||||
@@ -131,7 +131,7 @@ var/list/forbidden_varedit_object_types = list(
|
||||
L[var_value] = mod_list_add_ass() //haha
|
||||
if("No")
|
||||
L += var_value
|
||||
|
||||
|
||||
/client/proc/mod_list(var/list/L)
|
||||
if(!check_rights(R_VAREDIT)) return
|
||||
|
||||
@@ -440,6 +440,7 @@ var/list/forbidden_varedit_object_types = list(
|
||||
|
||||
if(var_as_text == null)
|
||||
var_as_text = "[O.vars[variable]]"
|
||||
O.on_varedit(variable)
|
||||
log_to_dd("### VarEdit by [src]: [O.type] [variable]=[html_encode("[var_as_text]")]")
|
||||
log_admin("[key_name(src)] modified [original_name]'s [variable] to [var_as_text]")
|
||||
message_admins("[key_name_admin(src)] modified [original_name]'s [variable] to [var_as_text]", 1)
|
||||
|
||||
@@ -58,7 +58,7 @@
|
||||
if(reload_cooldown > delta)
|
||||
return 1
|
||||
|
||||
command_announcement.Announce("Bluespace artillery fire detected. Brace for impact.")
|
||||
event_announcement.Announce("Bluespace artillery fire detected. Brace for impact.")
|
||||
message_admins("[key_name_admin(usr)] has launched an artillery strike.", 1)
|
||||
var/list/L = list()
|
||||
for(var/turf/T in get_area_turfs(targetarea.type))
|
||||
|
||||
@@ -26,6 +26,8 @@
|
||||
var/corpseidicon = null //For setting it to be a gold, silver, centcomm etc ID
|
||||
var/timeofdeath = null
|
||||
var/coffin = 0
|
||||
var/brute_damage = 0
|
||||
var/oxy_damage = 0
|
||||
|
||||
/obj/effect/landmark/corpse/initialize()
|
||||
if(istype(src,/obj/effect/landmark/corpse/clown))
|
||||
@@ -37,34 +39,36 @@
|
||||
var/mob/living/carbon/human/human/M = new /mob/living/carbon/human/human (src.loc)
|
||||
M.real_name = src.name
|
||||
M.death(1) //Kills the new mob
|
||||
M.adjustOxyLoss(oxy_damage)
|
||||
M.adjustBruteLoss(brute_damage)
|
||||
M.timeofdeath = timeofdeath
|
||||
if(src.mob_species)
|
||||
M.set_species(src.mob_species)
|
||||
if(src.corpseuniform)
|
||||
M.equip_to_slot_or_del(new src.corpseuniform(M), slot_w_uniform)
|
||||
if(src.corpsesuit)
|
||||
M.equip_to_slot_or_del(new src.corpsesuit(M), slot_wear_suit)
|
||||
if(src.corpseshoes)
|
||||
M.equip_to_slot_or_del(new src.corpseshoes(M), slot_shoes)
|
||||
if(src.corpsegloves)
|
||||
M.equip_to_slot_or_del(new src.corpsegloves(M), slot_gloves)
|
||||
if(src.corpseradio)
|
||||
M.equip_to_slot_or_del(new src.corpseradio(M), slot_l_ear)
|
||||
if(src.corpseglasses)
|
||||
M.equip_to_slot_or_del(new src.corpseglasses(M), slot_glasses)
|
||||
if(src.corpsemask)
|
||||
M.equip_to_slot_or_del(new src.corpsemask(M), slot_wear_mask)
|
||||
if(src.corpsehelmet)
|
||||
M.equip_to_slot_or_del(new src.corpsehelmet(M), slot_head)
|
||||
if(src.corpsebelt)
|
||||
M.equip_to_slot_or_del(new src.corpsebelt(M), slot_belt)
|
||||
if(src.corpsepocket1)
|
||||
M.equip_to_slot_or_del(new src.corpsepocket1(M), slot_r_store)
|
||||
if(src.corpsepocket2)
|
||||
M.equip_to_slot_or_del(new src.corpsepocket2(M), slot_l_store)
|
||||
if(src.corpseback)
|
||||
M.equip_to_slot_or_del(new src.corpseback(M), slot_back)
|
||||
if(src.corpseid == 1)
|
||||
if(mob_species)
|
||||
M.set_species(mob_species)
|
||||
if(corpseuniform)
|
||||
M.equip_to_slot_or_del(new corpseuniform(M), slot_w_uniform)
|
||||
if(corpsesuit)
|
||||
M.equip_to_slot_or_del(new corpsesuit(M), slot_wear_suit)
|
||||
if(corpseshoes)
|
||||
M.equip_to_slot_or_del(new corpseshoes(M), slot_shoes)
|
||||
if(corpsegloves)
|
||||
M.equip_to_slot_or_del(new corpsegloves(M), slot_gloves)
|
||||
if(corpseradio)
|
||||
M.equip_to_slot_or_del(new corpseradio(M), slot_l_ear)
|
||||
if(corpseglasses)
|
||||
M.equip_to_slot_or_del(new corpseglasses(M), slot_glasses)
|
||||
if(corpsemask)
|
||||
M.equip_to_slot_or_del(new corpsemask(M), slot_wear_mask)
|
||||
if(corpsehelmet)
|
||||
M.equip_to_slot_or_del(new corpsehelmet(M), slot_head)
|
||||
if(corpsebelt)
|
||||
M.equip_to_slot_or_del(new corpsebelt(M), slot_belt)
|
||||
if(corpsepocket1)
|
||||
M.equip_to_slot_or_del(new corpsepocket1(M), slot_r_store)
|
||||
if(corpsepocket2)
|
||||
M.equip_to_slot_or_del(new corpsepocket2(M), slot_l_store)
|
||||
if(corpseback)
|
||||
M.equip_to_slot_or_del(new corpseback(M), slot_back)
|
||||
if(corpseid == 1)
|
||||
var/obj/item/weapon/card/id/W = new(M)
|
||||
W.name = "[M.real_name]'s ID Card"
|
||||
var/datum/job/jobdatum
|
||||
@@ -73,9 +77,9 @@
|
||||
if(J.title == corpseidaccess)
|
||||
jobdatum = J
|
||||
break
|
||||
if(src.corpseidicon)
|
||||
if(corpseidicon)
|
||||
W.icon_state = corpseidicon
|
||||
if(src.corpseidaccess)
|
||||
if(corpseidaccess)
|
||||
if(jobdatum)
|
||||
W.access = jobdatum.get_access()
|
||||
else
|
||||
@@ -84,18 +88,14 @@
|
||||
W.assignment = corpseidjob
|
||||
W.registered_name = M.real_name
|
||||
M.equip_to_slot_or_del(W, slot_wear_id)
|
||||
if(src.coffin == 1)
|
||||
if(coffin == 1)
|
||||
var/obj/structure/closet/coffin/sarcophagus/sarc = locate(/obj/structure/closet/coffin/sarcophagus) in loc
|
||||
if(sarc) M.loc = sarc
|
||||
qdel(src)
|
||||
|
||||
|
||||
|
||||
// I'll work on making a list of corpses people request for maps, or that I think will be commonly used. Syndicate operatives for example.
|
||||
|
||||
|
||||
|
||||
|
||||
/obj/effect/landmark/corpse/damaged
|
||||
brute_damage = 1000
|
||||
|
||||
/obj/effect/landmark/corpse/syndicatesoldier
|
||||
name = "Syndicate Operative"
|
||||
|
||||
@@ -4,10 +4,10 @@
|
||||
name = "\improper Clown Planet"
|
||||
icon_state = "honk"
|
||||
luminosity = 1
|
||||
lighting_use_dynamic = 0
|
||||
dynamic_lighting = 0
|
||||
requires_power = 0
|
||||
report_alerts = 0
|
||||
|
||||
|
||||
/area/awaymission/clownplanet/miningtown
|
||||
name = "\improper Clown Planet - Bananium-o-Rama"
|
||||
icon_state = "away1"
|
||||
|
||||
@@ -13,13 +13,6 @@ var/global/list/potentialRandomZlevels = generateMapList(filename = "config/away
|
||||
air_master.setup_allturfs(turfs)
|
||||
log_debug("\tTook [stop_watch(subtimer)]s")
|
||||
|
||||
subtimer = start_watch()
|
||||
log_debug("Initializing lighting")
|
||||
for(var/turf/T in turfs)
|
||||
if(T.dynamic_lighting)
|
||||
T.lighting_build_overlays()
|
||||
log_debug("\tTook [stop_watch(subtimer)]s")
|
||||
|
||||
subtimer = start_watch()
|
||||
log_debug("Smoothing tiles")
|
||||
for(var/turf/T in smoothTurfs)
|
||||
@@ -205,7 +198,17 @@ var/global/list/potentialRandomZlevels = generateMapList(filename = "config/away
|
||||
template = safepick(possible_ruins)
|
||||
if(!template)
|
||||
return 0
|
||||
var/turf/central_turf = get_turf(src)
|
||||
for(var/i in template.get_affected_turfs(central_turf, 1))
|
||||
var/turf/T = i
|
||||
for(var/mob/living/simple_animal/monster in T)
|
||||
qdel(monster)
|
||||
for(var/obj/structure/flora/ash/plant in T)
|
||||
qdel(plant)
|
||||
template.load(get_turf(src),centered = 1)
|
||||
template.loaded++
|
||||
var/datum/map_template/ruin = template
|
||||
if(istype(ruin))
|
||||
new /obj/effect/landmark/ruin(central_turf, ruin)
|
||||
qdel(src)
|
||||
return 1
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
/area/awaymission/upperlevel
|
||||
name = "Open Space"
|
||||
color = "#888"
|
||||
lighting_use_dynamic = 0
|
||||
dynamic_lighting = 0
|
||||
requires_power = 0
|
||||
|
||||
// Used by /turf/unsimulated/floor/upperlevel as a reference for where the other floor is
|
||||
|
||||
@@ -232,6 +232,10 @@
|
||||
to_chat(src, "Become a BYOND member to access member-perks and features, as well as support the engine that makes this game possible. <a href='http://www.byond.com/membership'>Click here to find out more</a>.")
|
||||
return 0
|
||||
return 1
|
||||
|
||||
//Like for /atoms, but clients are their own snowflake FUCK
|
||||
/client/proc/setDir(newdir)
|
||||
dir = newdir
|
||||
|
||||
/client/proc/handle_spam_prevention(var/message, var/mute_type, var/throttle = 0)
|
||||
if(throttle)
|
||||
@@ -621,3 +625,6 @@
|
||||
if(lang.flags & RESTRICTED)
|
||||
message += " (RESTRICTED)"
|
||||
to_chat(world, "[message]")
|
||||
|
||||
/client/proc/colour_transition(var/list/colour_to = null, var/time = 10) //Call this with no parameters to reset to default.
|
||||
animate(src, color=colour_to, time=time, easing=SINE_EASING)
|
||||
|
||||
@@ -117,3 +117,13 @@
|
||||
display_name = "science beret"
|
||||
path = /obj/item/clothing/head/beret/sci
|
||||
allowed_roles = list("Research Director", "Scientist")
|
||||
|
||||
/datum/gear/hat/surgicalcap_purple
|
||||
display_name = "surgical cap, purple"
|
||||
path = /obj/item/clothing/head/surgery/purple
|
||||
allowed_roles = list("Chief Medical Officer", "Medical Doctor")
|
||||
|
||||
/datum/gear/hat/surgicalcap_green
|
||||
display_name = "surgical cap, green"
|
||||
path = /obj/item/clothing/head/surgery/green
|
||||
allowed_roles = list("Chief Medical Officer", "Medical Doctor")
|
||||
@@ -98,6 +98,19 @@
|
||||
path = /obj/item/clothing/under/rank/head_of_security/skirt
|
||||
allowed_roles = list("Head of Security")
|
||||
|
||||
/datum/gear/uniform/medical
|
||||
subtype_path = /datum/gear/uniform/medical
|
||||
|
||||
/datum/gear/uniform/medical/pscrubs
|
||||
display_name = "medical scrubs, purple"
|
||||
path = /obj/item/clothing/under/rank/medical/purple
|
||||
allowed_roles = list("Chief Medical Officer", "Medical Doctor")
|
||||
|
||||
/datum/gear/uniform/medical/gscrubs
|
||||
display_name = "medical scrubs, green"
|
||||
path = /obj/item/clothing/under/rank/medical/green
|
||||
allowed_roles = list("Chief Medical Officer", "Medical Doctor")
|
||||
|
||||
/datum/gear/uniform/sec
|
||||
subtype_path = /datum/gear/uniform/sec
|
||||
|
||||
|
||||
@@ -23,6 +23,7 @@ var/global/list/special_role_times = list( //minimum age (in days) for accounts
|
||||
// ROLE_GANG = 21,
|
||||
ROLE_BORER = 21,
|
||||
ROLE_NINJA = 21,
|
||||
ROLE_GSPIDER = 21,
|
||||
ROLE_ABDUCTOR = 30,
|
||||
)
|
||||
|
||||
@@ -92,6 +93,7 @@ var/global/list/special_role_times = list( //minimum age (in days) for accounts
|
||||
var/show_ghostitem_attack = TRUE
|
||||
var/UI_style_color = "#ffffff"
|
||||
var/UI_style_alpha = 255
|
||||
var/windowflashing = TRUE
|
||||
|
||||
|
||||
//character preferences
|
||||
@@ -417,6 +419,7 @@ var/global/list/special_role_times = list( //minimum age (in days) for accounts
|
||||
dat += "<h2>General Settings</h2>"
|
||||
dat += "<b>Fancy NanoUI:</b> <a href='?_src_=prefs;preference=nanoui'>[(nanoui_fancy) ? "Yes" : "No"]</a><br>"
|
||||
dat += "<b>Ghost-Item Attack Animation:</b> <a href='?_src_=prefs;preference=ghost_att_anim'>[(show_ghostitem_attack) ? "Yes" : "No"]</a><br>"
|
||||
dat += "<b>Window Flashing:</b> <a href='?_src_=prefs;preference=winflash'>[(windowflashing) ? "Yes" : "No"]</a><br>"
|
||||
dat += "<b>Custom UI settings:</b><br>"
|
||||
dat += " - <b>UI Style:</b> <a href='?_src_=prefs;preference=ui'><b>[UI_style]</b></a><br>"
|
||||
dat += " - <b>Color:</b> <a href='?_src_=prefs;preference=UIcolor'><b>[UI_style_color]</b></a> <table style='display:inline;' bgcolor='[UI_style_color]'<tr><td>__</td></tr></table><br>"
|
||||
@@ -814,6 +817,7 @@ var/global/list/special_role_times = list( //minimum age (in days) for accounts
|
||||
HTML += ShowDisabilityState(user,DISABILITY_FLAG_EPILEPTIC,"Seizures")
|
||||
HTML += ShowDisabilityState(user,DISABILITY_FLAG_DEAF,"Deaf")
|
||||
HTML += ShowDisabilityState(user,DISABILITY_FLAG_BLIND,"Blind")
|
||||
HTML += ShowDisabilityState(user,DISABILITY_FLAG_COLOURBLIND,"Colourblind")
|
||||
HTML += ShowDisabilityState(user,DISABILITY_FLAG_MUTE,"Mute")
|
||||
|
||||
|
||||
@@ -1336,9 +1340,8 @@ var/global/list/special_role_times = list( //minimum age (in days) for accounts
|
||||
//Reset prosthetics.
|
||||
organ_data = list()
|
||||
rlimb_data = list()
|
||||
if("speciesprefs")//oldvox code
|
||||
speciesprefs = !speciesprefs
|
||||
|
||||
if("speciesprefs")
|
||||
speciesprefs = !speciesprefs //Starts 0, so if someone clicks the button up top there, this won't be 0 anymore. If they click it again, it'll go back to 0.
|
||||
if("language")
|
||||
// var/languages_available
|
||||
var/list/new_languages = list("None")
|
||||
@@ -1934,6 +1937,9 @@ var/global/list/special_role_times = list( //minimum age (in days) for accounts
|
||||
if("ghost_att_anim")
|
||||
show_ghostitem_attack = !show_ghostitem_attack
|
||||
|
||||
if("winflash")
|
||||
windowflashing = !windowflashing
|
||||
|
||||
if("UIcolor")
|
||||
var/UI_style_color_new = input(user, "Choose your UI color, dark colors are not recommended!", UI_style_color) as color|null
|
||||
if(!UI_style_color_new) return
|
||||
@@ -1962,6 +1968,9 @@ var/global/list/special_role_times = list( //minimum age (in days) for accounts
|
||||
|
||||
if("randomslot")
|
||||
randomslot = !randomslot
|
||||
if(isnewplayer(usr))
|
||||
var/mob/new_player/N = usr
|
||||
N.new_player_panel_proc()
|
||||
|
||||
if("hear_midis")
|
||||
sound ^= SOUND_MIDI
|
||||
@@ -2145,35 +2154,31 @@ var/global/list/special_role_times = list( //minimum age (in days) for accounts
|
||||
|
||||
if(disabilities & DISABILITY_FLAG_FAT && character.species.flags & CAN_BE_FAT)
|
||||
character.dna.SetSEState(FATBLOCK,1,1)
|
||||
character.mutations += FAT
|
||||
character.mutations += OBESITY
|
||||
character.overeatduration = 600
|
||||
|
||||
if(disabilities & DISABILITY_FLAG_NEARSIGHTED)
|
||||
character.dna.SetSEState(GLASSESBLOCK,1,1)
|
||||
character.disabilities |= NEARSIGHTED
|
||||
|
||||
if(disabilities & DISABILITY_FLAG_EPILEPTIC)
|
||||
character.dna.SetSEState(EPILEPSYBLOCK,1,1)
|
||||
character.disabilities |= EPILEPSY
|
||||
|
||||
if(disabilities & DISABILITY_FLAG_DEAF)
|
||||
character.dna.SetSEState(DEAFBLOCK,1,1)
|
||||
character.disabilities |= DEAF
|
||||
|
||||
if(disabilities & DISABILITY_FLAG_BLIND)
|
||||
character.dna.SetSEState(BLINDBLOCK,1,1)
|
||||
character.disabilities |= BLIND
|
||||
|
||||
if(disabilities & DISABILITY_FLAG_COLOURBLIND)
|
||||
character.dna.SetSEState(COLOURBLINDBLOCK,1,1)
|
||||
|
||||
if(disabilities & DISABILITY_FLAG_MUTE)
|
||||
character.dna.SetSEState(MUTEBLOCK,1,1)
|
||||
character.disabilities |= MUTE
|
||||
|
||||
S.handle_dna(character)
|
||||
|
||||
if(character.dna.dirtySE)
|
||||
character.dna.UpdateSE()
|
||||
domutcheck(character, null, MUTCHK_FORCED)
|
||||
domutcheck(character, null, MUTCHK_FORCED) //'Activates' all the above disabilities.
|
||||
|
||||
character.dna.ready_dna(character, flatten_SE = 0)
|
||||
character.sync_organ_dna(assimilate=1)
|
||||
@@ -2187,26 +2192,26 @@ var/global/list/special_role_times = list( //minimum age (in days) for accounts
|
||||
/datum/preferences/proc/open_load_dialog(mob/user)
|
||||
|
||||
var/DBQuery/query = dbcon.NewQuery("SELECT slot,real_name FROM [format_table_name("characters")] WHERE ckey='[user.ckey]' ORDER BY slot")
|
||||
var/list/slotnames[max_save_slots]
|
||||
|
||||
if(!query.Execute())
|
||||
var/err = query.ErrorMsg()
|
||||
log_game("SQL ERROR during character slot loading. Error : \[[err]\]\n")
|
||||
message_admins("SQL ERROR during character slot loading. Error : \[[err]\]\n")
|
||||
return
|
||||
while(query.NextRow())
|
||||
slotnames[text2num(query.item[1])] = query.item[2]
|
||||
|
||||
var/dat = "<body>"
|
||||
dat += "<tt><center>"
|
||||
dat += "<b>Select a character slot to load</b><hr>"
|
||||
var/name
|
||||
|
||||
for(var/i=1, i<=max_save_slots, i++)
|
||||
if(!query.Execute())
|
||||
var/err = query.ErrorMsg()
|
||||
log_game("SQL ERROR during character slot loading. Error : \[[err]\]\n")
|
||||
message_admins("SQL ERROR during character slot loading. Error : \[[err]\]\n")
|
||||
return
|
||||
while(query.NextRow())
|
||||
if(i==text2num(query.item[1]))
|
||||
name = query.item[2]
|
||||
if(!name) name = "Character[i]"
|
||||
if(i==default_slot)
|
||||
for(var/i in 1 to max_save_slots)
|
||||
name = slotnames[i] || "Character [i]"
|
||||
if(i == default_slot)
|
||||
name = "<b>[name]</b>"
|
||||
dat += "<a href='?_src_=prefs;preference=changeslot;num=[i];'>[name]</a><br>"
|
||||
name = null
|
||||
|
||||
dat += "<hr>"
|
||||
dat += "<a href='byond://?src=[user.UID()];preference=close_load_dialog'>Close</a><br>"
|
||||
|
||||
@@ -14,7 +14,8 @@
|
||||
nanoui_fancy,
|
||||
show_ghostitem_attack,
|
||||
lastchangelog,
|
||||
exp
|
||||
exp,
|
||||
windowflashing
|
||||
FROM [format_table_name("player")]
|
||||
WHERE ckey='[C.ckey]'"}
|
||||
)
|
||||
@@ -42,6 +43,7 @@
|
||||
show_ghostitem_attack = text2num(query.item[12])
|
||||
lastchangelog = query.item[13]
|
||||
exp = query.item[14]
|
||||
windowflashing = text2num(query.item[15])
|
||||
|
||||
//Sanitize
|
||||
ooccolor = sanitize_hexcolor(ooccolor, initial(ooccolor))
|
||||
@@ -57,6 +59,7 @@
|
||||
show_ghostitem_attack = sanitize_integer(show_ghostitem_attack, 0, 1, initial(show_ghostitem_attack))
|
||||
lastchangelog = sanitize_text(lastchangelog, initial(lastchangelog))
|
||||
exp = sanitize_text(exp, initial(exp))
|
||||
windowflashing = sanitize_integer(windowflashing, 0, 1, initial(windowflashing))
|
||||
return 1
|
||||
|
||||
/datum/preferences/proc/save_preferences(client/C)
|
||||
@@ -263,7 +266,7 @@
|
||||
|
||||
//Sanitize
|
||||
metadata = sanitize_text(metadata, initial(metadata))
|
||||
real_name = reject_bad_name(real_name)
|
||||
real_name = reject_bad_name(real_name, 1)
|
||||
if(isnull(species)) species = "Human"
|
||||
if(isnull(language)) language = "None"
|
||||
if(isnull(nanotrasen_relation)) nanotrasen_relation = initial(nanotrasen_relation)
|
||||
@@ -500,21 +503,24 @@
|
||||
return
|
||||
return 1
|
||||
|
||||
/*
|
||||
/datum/preferences/proc/random_character(client/C)
|
||||
/datum/preferences/proc/load_random_character_slot(client/C)
|
||||
var/DBQuery/query = dbcon.NewQuery("SELECT slot FROM [format_table_name("characters")] WHERE ckey='[C.ckey]' ORDER BY slot")
|
||||
var/list/saves = list()
|
||||
|
||||
if(!query.Execute())
|
||||
var/err = query.ErrorMsg()
|
||||
log_game("SQL ERROR during random character slot picking. Error : \[[err]\]\n")
|
||||
message_admins("SQL ERROR during random character slot picking. Error : \[[err]\]\n")
|
||||
return
|
||||
|
||||
while(query.NextRow())
|
||||
var/list/saves = list()
|
||||
for(var/i=1, i<=MAX_SAVE_SLOTS, i++)
|
||||
if(i==text2num(query.item[1]))
|
||||
saves += i
|
||||
saves += text2num(query.item[1])
|
||||
|
||||
if(!saves.len)
|
||||
load_character(C)
|
||||
return 0
|
||||
load_character(C,pick(saves))
|
||||
return 1*/
|
||||
return 1
|
||||
|
||||
/datum/preferences/proc/SetChangelog(client/C,hash)
|
||||
lastchangelog=hash
|
||||
|
||||
@@ -193,8 +193,9 @@ BLIND // can't see anything
|
||||
"Drask" = 'icons/mob/species/drask/gloves.dmi'
|
||||
)
|
||||
|
||||
/obj/item/clothing/gloves/proc/Touch()
|
||||
return
|
||||
// Called just before an attack_hand(), in mob/UnarmedAttack()
|
||||
/obj/item/clothing/gloves/proc/Touch(atom/A, proximity)
|
||||
return 0 // return 1 to cancel attack_hand()
|
||||
|
||||
/obj/item/clothing/gloves/attackby(obj/item/weapon/W, mob/user, params)
|
||||
if(istype(W, /obj/item/weapon/wirecutters))
|
||||
|
||||
@@ -232,8 +232,6 @@
|
||||
name = "noir sunglasses"
|
||||
desc = "Somehow these seem even more out-of-date than normal sunglasses."
|
||||
actions_types = list(/datum/action/item_action/noir)
|
||||
var/noir_mode = 0
|
||||
color_view = MATRIX_GREYSCALE
|
||||
|
||||
/obj/item/clothing/glasses/sunglasses/noir/attack_self()
|
||||
toggle_noir()
|
||||
@@ -243,36 +241,8 @@
|
||||
return 1
|
||||
|
||||
/obj/item/clothing/glasses/sunglasses/noir/proc/toggle_noir()
|
||||
var/list/difference = difflist(usr.client.color, color_view)
|
||||
|
||||
if(!noir_mode)
|
||||
if(color_view && usr.client && (!usr.client.color || difference))
|
||||
animate(usr.client, color = color_view, time = 10)
|
||||
noir_mode = 1
|
||||
else
|
||||
if(usr.client && usr.client.color && !difference)
|
||||
animate(usr.client, color = initial(usr.client.color), time = 10)
|
||||
noir_mode = 0
|
||||
|
||||
/obj/item/clothing/glasses/sunglasses/noir/equipped(mob/user, slot)
|
||||
var/list/difference = difflist(user.client.color, color_view)
|
||||
|
||||
if(slot == slot_glasses)
|
||||
if(noir_mode)
|
||||
if(color_view && user.client && (!user.client.color || difference.len))
|
||||
animate(user.client, color = color_view, time = 10)
|
||||
else
|
||||
if(user.client && user.client.color && !difference.len)
|
||||
animate(user.client, color = initial(user.client.color), time = 10)
|
||||
..(user, slot)
|
||||
|
||||
/obj/item/clothing/glasses/sunglasses/noir/dropped(mob/living/carbon/human/user)
|
||||
var/list/difference = difflist(user.client.color, color_view)
|
||||
|
||||
if(istype(user) && user.glasses == src)
|
||||
if(user.client && user.client.color && !difference.len)
|
||||
animate(user.client, color = initial(user.client.color), time = 10)
|
||||
..(user)
|
||||
color_view = color_view ? null : MATRIX_GREYSCALE //Toggles between null and grayscale, with null being the default option.
|
||||
usr.update_client_colour()
|
||||
|
||||
/obj/item/clothing/glasses/sunglasses/yeah
|
||||
name = "agreeable glasses"
|
||||
@@ -498,3 +468,28 @@
|
||||
name = "gar glasses"
|
||||
icon_state = "gar"
|
||||
item_state = "gar"
|
||||
|
||||
/obj/item/clothing/glasses/godeye
|
||||
name = "eye of god"
|
||||
desc = "A strange eye, said to have been torn from an omniscient creature that used to roam the wastes."
|
||||
icon_state = "godeye"
|
||||
item_state = "godeye"
|
||||
vision_flags = SEE_TURFS|SEE_MOBS|SEE_OBJS
|
||||
darkness_view = 8
|
||||
scan_reagents = 1
|
||||
flags = NODROP
|
||||
invis_view = SEE_INVISIBLE_MINIMUM
|
||||
|
||||
/obj/item/clothing/glasses/godeye/attackby(obj/item/weapon/W as obj, mob/user as mob, params)
|
||||
if(istype(W, src) && W != src && W.loc == user)
|
||||
if(W.icon_state == "godeye")
|
||||
W.icon_state = "doublegodeye"
|
||||
W.item_state = "doublegodeye"
|
||||
W.desc = "A pair of strange eyes, said to have been torn from an omniscient creature that used to roam the wastes. There's no real reason to have two, but that isn't stopping you."
|
||||
if(iscarbon(user))
|
||||
var/mob/living/carbon/C = user
|
||||
C.update_inv_wear_mask()
|
||||
else
|
||||
to_chat(user, "<span class='notice'>The eye winks at you and vanishes into the abyss, you feel really unlucky.</span>")
|
||||
qdel(src)
|
||||
..()
|
||||
@@ -56,3 +56,74 @@
|
||||
icon_state = "latex"
|
||||
item_state = "lgloves"
|
||||
flags = NODROP
|
||||
|
||||
|
||||
/obj/item/clothing/gloves/color/yellow/stun
|
||||
name = "stun gloves"
|
||||
desc = "Horrendous and awful. It smells like cancer. The fact it has wires attached to it is incidental."
|
||||
var/obj/item/weapon/stock_parts/cell/cell = null
|
||||
var/stun_strength = 5
|
||||
var/stun_cost = 3750
|
||||
|
||||
/obj/item/clothing/gloves/color/yellow/stun/New()
|
||||
..()
|
||||
update_icon()
|
||||
|
||||
/obj/item/clothing/gloves/color/yellow/stun/Destroy()
|
||||
if(cell)
|
||||
qdel(cell)
|
||||
cell = null
|
||||
return ..()
|
||||
|
||||
/obj/item/clothing/gloves/color/yellow/stun/Touch(atom/A, proximity)
|
||||
if(!ishuman(loc))
|
||||
return FALSE //Only works while worn
|
||||
if(!iscarbon(A))
|
||||
return FALSE
|
||||
if(!proximity)
|
||||
return FALSE
|
||||
if(cell)
|
||||
var/mob/living/carbon/human/H = loc
|
||||
if(H.a_intent == I_HARM)
|
||||
var/mob/living/carbon/C = A
|
||||
if(cell.use(stun_cost))
|
||||
var/datum/effect/system/spark_spread/s = new /datum/effect/system/spark_spread
|
||||
s.set_up(5, 0, loc)
|
||||
s.start()
|
||||
playsound(loc, 'sound/weapons/Egloves.ogg', 50, 1, -1)
|
||||
H.do_attack_animation(C)
|
||||
visible_message("<span class='danger'>[C] has been touched with [src] by [H]!</span>")
|
||||
C.Stun(stun_strength)
|
||||
C.Weaken(stun_strength)
|
||||
C.apply_effect(STUTTER, stun_strength)
|
||||
else
|
||||
to_chat(H, "<span class='notice'>Not enough charge!</span>")
|
||||
return TRUE
|
||||
return FALSE
|
||||
|
||||
/obj/item/clothing/gloves/color/yellow/stun/update_icon()
|
||||
..()
|
||||
overlays.Cut()
|
||||
overlays += "gloves_wire"
|
||||
if(cell)
|
||||
overlays += "gloves_cell"
|
||||
|
||||
/obj/item/clothing/gloves/color/yellow/stun/attackby(obj/item/weapon/W, mob/living/user, params)
|
||||
if(istype(W, /obj/item/weapon/stock_parts/cell))
|
||||
if(!cell)
|
||||
if(!user.drop_item())
|
||||
to_chat(user, "<span class='warning'>[W] is stuck to you!</span>")
|
||||
return
|
||||
W.forceMove(src)
|
||||
cell = W
|
||||
to_chat(user, "<span class='notice'>You attach [W] to [src].</span>")
|
||||
update_icon()
|
||||
else
|
||||
to_chat(user, "<span class='notice'>[src] already has a cell.</span>")
|
||||
|
||||
else if(iswirecutter(W))
|
||||
if(cell)
|
||||
to_chat(user, "<span class='notice'>You cut [cell] away from [src].</span>")
|
||||
cell.forceMove(get_turf(loc))
|
||||
cell = null
|
||||
update_icon()
|
||||
@@ -79,9 +79,17 @@
|
||||
name = "cueball helmet"
|
||||
desc = "A large, featureless white orb meant to be worn on your head. How do you even see out of this thing?"
|
||||
icon_state = "cueball"
|
||||
item_state = "cueball"
|
||||
flags = HEADCOVERSEYES | HEADCOVERSMOUTH | BLOCKHAIR
|
||||
item_state="cueball"
|
||||
flags_inv = 0
|
||||
flags_inv = HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE
|
||||
|
||||
/obj/item/clothing/head/snowman
|
||||
name = "snowman head"
|
||||
desc = "A ball of white styrofoam. So festive."
|
||||
icon_state = "snowman_h"
|
||||
item_state = "snowman_h"
|
||||
flags = HEADCOVERSEYES | HEADCOVERSMOUTH | BLOCKHAIR
|
||||
flags_inv = HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE
|
||||
|
||||
/obj/item/clothing/head/that
|
||||
name = "sturdy top-hat"
|
||||
@@ -348,6 +356,16 @@
|
||||
attack_verb = list("warned", "cautioned", "smashed")
|
||||
burn_state = FIRE_PROOF
|
||||
|
||||
/obj/item/clothing/head/jester
|
||||
name = "jester hat"
|
||||
desc = "A hat with bells, to add some merryness to the suit."
|
||||
icon_state = "jester_hat"
|
||||
|
||||
/obj/item/clothing/head/rice_hat
|
||||
name = "rice hat"
|
||||
desc = "Welcome to the rice fields, motherfucker."
|
||||
icon_state = "rice_hat"
|
||||
|
||||
/obj/item/clothing/head/griffin
|
||||
name = "griffon head"
|
||||
desc = "Why not 'eagle head'? Who knows."
|
||||
|
||||
@@ -139,6 +139,7 @@
|
||||
w_class = 2
|
||||
gas_transfer_coefficient = 0.90
|
||||
|
||||
|
||||
/obj/item/clothing/mask/pig
|
||||
name = "pig mask"
|
||||
desc = "A rubber pig mask."
|
||||
@@ -188,6 +189,58 @@
|
||||
if(user.real_name == "[originalname][temporaryname]" || user.real_name == "A Horse With No Name") //if it's somehow changed while the mask is on it doesn't revert
|
||||
user.real_name = originalname
|
||||
|
||||
/obj/item/clothing/mask/face
|
||||
flags = MASKCOVERSMOUTH
|
||||
flags_inv = HIDEFACE
|
||||
|
||||
/obj/item/clothing/mask/face/rat
|
||||
name = "rat mask"
|
||||
desc = "A mask made of soft vinyl and latex, representing the head of a rat."
|
||||
icon_state = "rat"
|
||||
item_state = "rat"
|
||||
|
||||
/obj/item/clothing/mask/face/fox
|
||||
name = "fox mask"
|
||||
desc = "A mask made of soft vinyl and latex, representing the head of a fox."
|
||||
icon_state = "fox"
|
||||
item_state = "fox"
|
||||
|
||||
/obj/item/clothing/mask/face/bee
|
||||
name = "bee mask"
|
||||
desc = "A mask made of soft vinyl and latex, representing the head of a bee."
|
||||
icon_state = "bee"
|
||||
item_state = "bee"
|
||||
|
||||
/obj/item/clothing/mask/face/bear
|
||||
name = "bear mask"
|
||||
desc = "A mask made of soft vinyl and latex, representing the head of a bear."
|
||||
icon_state = "bear"
|
||||
item_state = "bear"
|
||||
|
||||
/obj/item/clothing/mask/face/bat
|
||||
name = "bat mask"
|
||||
desc = "A mask made of soft vinyl and latex, representing the head of a bat."
|
||||
icon_state = "bat"
|
||||
item_state = "bat"
|
||||
|
||||
/obj/item/clothing/mask/face/raven
|
||||
name = "raven mask"
|
||||
desc = "A mask made of soft vinyl and latex, representing the head of a raven."
|
||||
icon_state = "raven"
|
||||
item_state = "raven"
|
||||
|
||||
/obj/item/clothing/mask/face/jackal
|
||||
name = "jackal mask"
|
||||
desc = "A mask made of soft vinyl and latex, representing the head of a jackal."
|
||||
icon_state = "jackal"
|
||||
item_state = "jackal"
|
||||
|
||||
/obj/item/clothing/mask/face/tribal
|
||||
name = "tribal mask"
|
||||
desc = "A mask carved out of wood, detailed carefully by hand."
|
||||
icon_state = "bumba"
|
||||
item_state = "bumba"
|
||||
|
||||
/obj/item/clothing/mask/fawkes
|
||||
name = "Guy Fawkes mask"
|
||||
desc = "A mask designed to help you remember a specific date."
|
||||
@@ -287,7 +340,7 @@
|
||||
icon_override = 'icons/goonstation/mob/clothing/mask.dmi'
|
||||
lefthand_file = 'icons/goonstation/mob/inhands/clothing_lefthand.dmi'
|
||||
righthand_file = 'icons/goonstation/mob/inhands/clothing_righthand.dmi'
|
||||
flags = NODROP
|
||||
flags = NODROP | AIRTIGHT | MASKCOVERSMOUTH
|
||||
|
||||
/obj/item/clothing/mask/cursedclown/equipped(mob/user, slot)
|
||||
..()
|
||||
|
||||
@@ -212,3 +212,15 @@
|
||||
righthand_file = 'icons/goonstation/mob/inhands/clothing_righthand.dmi'
|
||||
flags = NODROP
|
||||
shoe_sound = "clownstep"
|
||||
|
||||
/obj/item/clothing/shoes/singery
|
||||
name = "yellow performer's boots"
|
||||
desc = "These boots were made for dancing."
|
||||
icon_state = "ysing"
|
||||
put_on_delay = 50
|
||||
|
||||
/obj/item/clothing/shoes/singerb
|
||||
name = "blue performer's boots"
|
||||
desc = "These boots were made for dancing."
|
||||
icon_state = "bsing"
|
||||
put_on_delay = 50
|
||||
|
||||
@@ -92,7 +92,7 @@ var/global/list/breach_burn_descriptors = list(
|
||||
if(!breaches)
|
||||
breaches = list()
|
||||
|
||||
if(damage > 25) return //We don't need to keep tracking it when it's at 250% pressure loss, really.
|
||||
if(damage >= 25) return //We don't need to keep tracking it when it's at 250% pressure loss, really.
|
||||
|
||||
if(!loc) return
|
||||
var/turf/T = get_turf(src)
|
||||
@@ -125,7 +125,7 @@ var/global/list/breach_burn_descriptors = list(
|
||||
var/datum/breach/B = new()
|
||||
breaches += B
|
||||
|
||||
B.class = min(amount,5)
|
||||
B.class = min(amount,(5 - max(damage - 20,0))) //We cap the check at 25, this line could overshoot without the calculation if it gets enough dammage in one shot.
|
||||
|
||||
B.damtype = damtype
|
||||
B.update_descriptor()
|
||||
|
||||
@@ -7,20 +7,21 @@
|
||||
armor = list(melee = 45, bullet = 25, laser = 30, energy = 10, bomb = 25, bio = 100, rad = 50)
|
||||
rig_restrict_helmet = 0 // ERT helmets can be taken on and off at will.
|
||||
var/obj/machinery/camera/camera
|
||||
var/has_camera = TRUE
|
||||
strip_delay = 130
|
||||
|
||||
/obj/item/clothing/head/helmet/space/rig/ert/attack_self(mob/user)
|
||||
if(camera)
|
||||
if(camera || !has_camera)
|
||||
..(user)
|
||||
else
|
||||
camera = new /obj/machinery/camera(src)
|
||||
camera.network = list("ERT")
|
||||
cameranet.removeCamera(camera)
|
||||
camera.c_tag = user.name
|
||||
to_chat(user, "\blue User scanned as [camera.c_tag]. Camera activated.")
|
||||
to_chat(user, "<span class='notice'>User scanned as [camera.c_tag]. Camera activated.</span>")
|
||||
|
||||
/obj/item/clothing/head/helmet/space/rig/ert/examine(mob/user)
|
||||
if(..(user, 1))
|
||||
if(..(user, 1) && has_camera)
|
||||
to_chat(user, "This helmet has a built-in camera. It's [camera ? "" : "in"]active.")
|
||||
|
||||
/obj/item/clothing/suit/space/rig/ert
|
||||
@@ -101,6 +102,7 @@
|
||||
desc = "A suit worn by the janitorial of a Nanotrasen Emergency Response Team. Has purple highlights. Armoured, space ready, and fire resistant."
|
||||
icon_state = "ert_janitor"
|
||||
|
||||
//Paranormal
|
||||
/obj/item/clothing/head/helmet/space/rig/ert/paranormal
|
||||
name = "paranormal response unit helmet"
|
||||
desc = "A helmet worn by those who deal with paranormal threats for a living."
|
||||
@@ -108,16 +110,39 @@
|
||||
item_color = "ert_paranormal"
|
||||
max_heat_protection_temperature = FIRE_IMMUNITY_HELM_MAX_TEMP_PROTECT
|
||||
sprite_sheets = null
|
||||
icon_override = 'icons/mob/clothing/paranormal_hardsuit.dmi'
|
||||
actions_types = list()
|
||||
has_camera = 0
|
||||
|
||||
/obj/item/clothing/suit/space/rig/ert/paranormal
|
||||
name = "paranormal response team suit"
|
||||
desc = "Powerful wards are built into this hardsuit, protecting the user from all manner of paranormal threats."
|
||||
icon_state = "knight_grey"
|
||||
item_state = "knight_grey"
|
||||
icon_state = "rig-paranormal"
|
||||
max_heat_protection_temperature = FIRE_IMMUNITY_SUIT_MAX_TEMP_PROTECT
|
||||
sprite_sheets = null
|
||||
|
||||
icon_override = 'icons/mob/clothing/paranormal_hardsuit.dmi'
|
||||
actions_types = list()
|
||||
|
||||
/obj/item/clothing/suit/space/rig/ert/paranormal/New()
|
||||
..()
|
||||
new /obj/item/weapon/nullrod(src)
|
||||
|
||||
/obj/item/clothing/head/helmet/space/rig/ert/paranormal/inquisitor
|
||||
name = "inquisitor's helmet"
|
||||
icon_state = "rig0-inquisitor"
|
||||
item_color = "inquisitor"
|
||||
|
||||
/obj/item/clothing/suit/space/rig/ert/paranormal/inquisitor
|
||||
name = "inquisitor's hardsuit"
|
||||
icon_state = "rig-inquisitor"
|
||||
|
||||
/obj/item/clothing/head/helmet/space/rig/ert/paranormal/berserker
|
||||
name = "champion's helmet"
|
||||
desc = "Peering into the eyes of the helmet is enough to seal damnation."
|
||||
icon_state = "rig0-berserker"
|
||||
item_color = "berserker"
|
||||
|
||||
/obj/item/clothing/suit/space/rig/ert/paranormal/berserker
|
||||
name = "champion's hardsuit"
|
||||
desc = "Voices echo from the hardsuit, driving the user insane."
|
||||
icon_state = "rig-berserker"
|
||||
@@ -10,10 +10,10 @@
|
||||
species_restricted = list("exclude", "Diona", "Wryn")
|
||||
species_fit = list("Vox")
|
||||
sprite_sheets = list(
|
||||
"Vox" = 'icons/mob/species/vox/helmet.dmi',
|
||||
"Drask" = 'icons/mob/species/drask/helmet.dmi'
|
||||
"Vox" = 'icons/mob/species/vox/helmet.dmi'
|
||||
)
|
||||
/obj/item/clothing/head/helmet/space/capspace/equipped(var/mob/living/carbon/human/user, var/slot)
|
||||
|
||||
/obj/item/clothing/head/helmet/space/capspace/equipped(mob/living/carbon/human/user, slot)
|
||||
if(ishuman(user) && slot == slot_head)
|
||||
if(user.species.name == "Vox")
|
||||
if(flags & BLOCKHAIR)
|
||||
@@ -33,11 +33,9 @@
|
||||
species_restricted = list("exclude", "Diona", "Wryn")
|
||||
species_fit = list("Vox")
|
||||
sprite_sheets = list(
|
||||
"Vox" = 'icons/mob/species/vox/suit.dmi',
|
||||
"Drask" = 'icons/mob/species/drask/suit.dmi'
|
||||
"Vox" = 'icons/mob/species/vox/suit.dmi'
|
||||
)
|
||||
|
||||
|
||||
//Deathsquad space suit, not hardsuits because no flashlight!
|
||||
/obj/item/clothing/head/helmet/space/deathsquad
|
||||
name = "deathsquad helmet"
|
||||
@@ -106,7 +104,6 @@
|
||||
flags_size = ONESIZEFITSALL
|
||||
allowed = list(/obj/item) //for stuffing exta special presents
|
||||
|
||||
|
||||
//Space pirate outfit
|
||||
/obj/item/clothing/head/helmet/space/pirate
|
||||
name = "pirate hat"
|
||||
@@ -136,12 +133,22 @@
|
||||
desc = "A paramedic EVA helmet. Used in the recovery of bodies from space."
|
||||
icon_state = "paramedic-eva-helmet"
|
||||
item_state = "paramedic-eva-helmet"
|
||||
species_restricted = list("exclude","Diona","Wryn")
|
||||
species_fit = list("Vox")
|
||||
sprite_sheets = list(
|
||||
"Vox" = 'icons/mob/species/vox/helmet.dmi'
|
||||
)
|
||||
|
||||
/obj/item/clothing/suit/space/eva/paramedic
|
||||
name = "Paramedic EVA suit"
|
||||
icon_state = "paramedic-eva"
|
||||
item_state = "paramedic-eva"
|
||||
desc = "A paramedic EVA suit. Used in the recovery of bodies from space."
|
||||
species_restricted = list("exclude","Diona","Wryn")
|
||||
species_fit = list("Vox")
|
||||
sprite_sheets = list(
|
||||
"Vox" = 'icons/mob/species/vox/suit.dmi'
|
||||
)
|
||||
|
||||
/obj/item/clothing/suit/space/eva
|
||||
name = "EVA suit"
|
||||
@@ -207,4 +214,4 @@
|
||||
armor = list(melee = 20, bullet = 40, laser = 30, energy = 25, bomb = 100, bio = 100, rad = 100)
|
||||
max_heat_protection_temperature = FIRE_IMMUNITY_HELM_MAX_TEMP_PROTECT
|
||||
unacidable = 1
|
||||
strip_delay = 130
|
||||
strip_delay = 130
|
||||
|
||||
@@ -69,15 +69,6 @@
|
||||
A.UpdateButtonIcon()
|
||||
|
||||
// ENGINEERING
|
||||
/obj/item/clothing/suit/space/eva/plasmaman/assistant
|
||||
name = "plasmaman assistant suit"
|
||||
icon_state = "plasmamanAssistant_suit"
|
||||
|
||||
/obj/item/clothing/head/helmet/space/eva/plasmaman/assistant
|
||||
name = "plasmaman assistant helmet"
|
||||
icon_state = "plasmamanAssistant_helmet0"
|
||||
base_state = "plasmamanAssistant_helmet"
|
||||
|
||||
/obj/item/clothing/suit/space/eva/plasmaman/atmostech
|
||||
name = "plasmaman atmospheric suit"
|
||||
icon_state = "plasmamanAtmos_suit"
|
||||
@@ -115,6 +106,14 @@
|
||||
|
||||
|
||||
//SERVICE
|
||||
/obj/item/clothing/suit/space/eva/plasmaman/assistant
|
||||
name = "plasmaman assistant suit"
|
||||
icon_state = "plasmamanAssistant_suit"
|
||||
|
||||
/obj/item/clothing/head/helmet/space/eva/plasmaman/assistant
|
||||
name = "plasmaman assistant helmet"
|
||||
icon_state = "plasmamanAssistant_helmet0"
|
||||
base_state = "plasmamanAssistant_helmet"
|
||||
|
||||
/obj/item/clothing/suit/space/eva/plasmaman/botanist
|
||||
name = "plasmaman botanist suit"
|
||||
@@ -301,6 +300,17 @@
|
||||
icon_state = "plasmaman_Captain_helmet0"
|
||||
base_state = "plasmaman_Captain_helmet"
|
||||
|
||||
|
||||
//IAA/LAWYER
|
||||
/obj/item/clothing/suit/space/eva/plasmaman/lawyer
|
||||
name = "plasmaman lawyer suit"
|
||||
icon_state = "plasmamanlawyer_suit"
|
||||
|
||||
/obj/item/clothing/head/helmet/space/eva/plasmaman/lawyer
|
||||
name = "plasmaman lawyer helmet"
|
||||
icon_state = "plasmamanlawyer_helmet0"
|
||||
base_state = "plasmamanlawyer_helmet"
|
||||
|
||||
//NUKEOPS
|
||||
|
||||
/obj/item/clothing/suit/space/eva/plasmaman/nuclear
|
||||
|
||||
@@ -119,7 +119,7 @@
|
||||
gun.attack_self(holder.wearer)
|
||||
return 1
|
||||
|
||||
gun.process_fire(target,holder.wearer)
|
||||
gun.afterattack(target,holder.wearer)
|
||||
return 1
|
||||
|
||||
/obj/item/rig_module/mounted/egun
|
||||
|
||||
@@ -0,0 +1,50 @@
|
||||
|
||||
/obj/item/rig_module/handheld
|
||||
name = "mounted device"
|
||||
desc = "Some kind of hardsuit extension."
|
||||
usable = 0
|
||||
selectable = 0
|
||||
toggleable = 1
|
||||
disruptive = 0
|
||||
activate_string = "Deploy"
|
||||
deactivate_string = "Retract"
|
||||
|
||||
var/device_type
|
||||
var/obj/item/device
|
||||
|
||||
/obj/item/rig_module/handheld/activate()
|
||||
if(!..())
|
||||
return
|
||||
|
||||
if(!holder.wearer.put_in_hands(device))
|
||||
to_chat(holder.wearer, "<span class='notice'>You need a free hand to hold \the [device].</span>")
|
||||
active = 0
|
||||
return
|
||||
|
||||
to_chat(holder.wearer, "<span class='notice'>You deploy \the [device].</span>")
|
||||
|
||||
|
||||
/obj/item/rig_module/handheld/deactivate()
|
||||
if(!..())
|
||||
return
|
||||
if(ismob(device.loc)) //Better check for the holder, instead of assuming the rigwearer has it.
|
||||
var/mob/M = device.loc //Helps in case the code fails to keep the module in one place, this should still return it.
|
||||
M.unEquip(device, 1)
|
||||
|
||||
device.loc = src
|
||||
to_chat(holder.wearer, "<span class='notice'>You retract \the [device].</span>")
|
||||
|
||||
/obj/item/rig_module/handheld/New()
|
||||
..()
|
||||
if(device_type)
|
||||
device = new device_type(src)
|
||||
device.flags |= NODROP //We don't want to drop it while it's active/inhand.
|
||||
activate_string += " [device]"
|
||||
deactivate_string += " [device]"
|
||||
|
||||
/obj/item/rig_module/handheld/horn
|
||||
name = "mounted bikehorn"
|
||||
desc = "For tactical honking"
|
||||
interface_name = "mounted bikehorn"
|
||||
interface_desc = "Honks"
|
||||
device_type = /obj/item/weapon/bikehorn
|
||||
@@ -94,7 +94,9 @@
|
||||
*/
|
||||
/obj/item/rig_module/device/New()
|
||||
..()
|
||||
if(device_type) device = new device_type(src)
|
||||
if(device_type)
|
||||
device = new device_type(src)
|
||||
device.flags |= ABSTRACT //Abstract in the sense that it's not an item that stands alone, but rather is just there to let the module act like it.
|
||||
|
||||
/obj/item/rig_module/device/engage(atom/target)
|
||||
if(!..() || !device)
|
||||
@@ -417,13 +419,15 @@
|
||||
interface_desc = "Leave your mark."
|
||||
engage_string = "Toggle stamp type"
|
||||
usable = 1
|
||||
var/iastamp
|
||||
var/deniedstamp
|
||||
var/obj/iastamp //Theese were just vars, but any device would need to be an object
|
||||
var/obj/deniedstamp //Stops assigning non-objects to theese vars, which probably would break quite a bit.
|
||||
|
||||
/obj/item/rig_module/device/stamp/New()
|
||||
..()
|
||||
iastamp = new /obj/item/weapon/stamp/law(src)
|
||||
deniedstamp = new /obj/item/weapon/stamp/denied(src)
|
||||
iastamp.flags |= ABSTRACT
|
||||
deniedstamp.flags |= ABSTRACT
|
||||
device = iastamp
|
||||
|
||||
/obj/item/rig_module/device/stamp/engage(atom/target)
|
||||
@@ -488,4 +492,4 @@
|
||||
W.update_icon()
|
||||
|
||||
/obj/item/rig_module/welding_tank/proc/get_fuel()
|
||||
return reagents.get_reagent_amount("fuel")
|
||||
return reagents.get_reagent_amount("fuel")
|
||||
|
||||
@@ -42,7 +42,7 @@
|
||||
|
||||
//Component/device holders.
|
||||
var/obj/item/weapon/tank/air_supply // Air tank, if any.
|
||||
var/obj/item/clothing/shoes/boots = null // Deployable boots, if any.
|
||||
var/obj/item/clothing/shoes/magboots/boots = null // Deployable boots, if any.
|
||||
var/obj/item/clothing/suit/space/new_rig/chest // Deployable chestpiece, if any.
|
||||
var/obj/item/clothing/head/helmet/space/new_rig/helmet = null // Deployable helmet, if any.
|
||||
var/obj/item/clothing/gloves/rig/gloves = null // Deployable gauntlets, if any.
|
||||
@@ -76,6 +76,7 @@
|
||||
var/airtight = 1 //If set, will adjust AIRTIGHT and STOPSPRESSUREDMAGE flags on components. Otherwise it should leave them untouched.
|
||||
|
||||
var/emp_protection = 0
|
||||
var/has_emergency_release = 1 //Allows suit to be removed from outside.
|
||||
|
||||
// Wiring! How exciting.
|
||||
var/datum/wires/rig/wires
|
||||
@@ -126,14 +127,17 @@
|
||||
if(helm_type)
|
||||
helmet = new helm_type(src)
|
||||
verbs |= /obj/item/weapon/rig/proc/toggle_helmet
|
||||
helmet.item_color="[initial(icon_state)]_sealed" //For the lightswitching to know the correct string to manipulate
|
||||
if(boot_type)
|
||||
boots = new boot_type(src)
|
||||
verbs |= /obj/item/weapon/rig/proc/toggle_boots
|
||||
boots.magboot_state="[initial(icon_state)]_sealed" //For the magboot (de)activation to know the correct string to manipulate
|
||||
if(chest_type)
|
||||
chest = new chest_type(src)
|
||||
if(allowed)
|
||||
chest.allowed = allowed
|
||||
chest.slowdown = offline_slowdown
|
||||
chest.holder = src
|
||||
verbs |= /obj/item/weapon/rig/proc/toggle_chest
|
||||
|
||||
for(var/obj/item/piece in list(gloves,helmet,boots,chest))
|
||||
@@ -183,6 +187,10 @@
|
||||
/obj/item/weapon/rig/proc/reset()
|
||||
offline = 2
|
||||
flags &= ~NODROP
|
||||
if(helmet && helmet.on)
|
||||
helmet.toggle_light(wearer)
|
||||
if(boots && boots.magpulse)
|
||||
boots.attack_self(wearer)
|
||||
for(var/obj/item/piece in list(helmet,boots,gloves,chest))
|
||||
if(!piece) continue
|
||||
piece.icon_state = "[initial(icon_state)]"
|
||||
@@ -254,6 +262,7 @@
|
||||
switch(msg_type)
|
||||
if("boots")
|
||||
to_chat(wearer, "<font color='blue'>\The [correct_piece] seal around your feet.</font>")
|
||||
correct_piece.icon_state = "[initial(icon_state)]_sealed0" //Solution to not need a sprite for off, on, and unused magboots.
|
||||
if(user != wearer)
|
||||
to_chat(user, "<span class='notice'>\The [correct_piece] has been sealed.</span>")
|
||||
wearer.update_inv_shoes()
|
||||
@@ -269,6 +278,7 @@
|
||||
wearer.update_inv_wear_suit()
|
||||
if("helmet")
|
||||
to_chat(wearer, "<font color='blue'>\The [correct_piece] hisses closed.</font>")
|
||||
correct_piece.icon_state = "[initial(icon_state)]_sealed0" //Solution to not need a sprite for off, on, and unused helmet light.
|
||||
if(user != wearer)
|
||||
to_chat(user, "<span class='notice'>\The [correct_piece] has been sealed.</span>")
|
||||
wearer.update_inv_head()
|
||||
@@ -383,10 +393,14 @@
|
||||
sealing = FALSE
|
||||
|
||||
if(failed_to_seal)
|
||||
for(var/obj/item/piece in list(helmet, boots, gloves, chest))
|
||||
for(var/obj/item/piece in list(gloves, chest))
|
||||
if(!piece)
|
||||
continue
|
||||
piece.icon_state = "[initial(icon_state)]_sealed"
|
||||
if(helmet)
|
||||
helmet.icon_state = "[initial(icon_state)]_sealed[helmet.on]"
|
||||
if(boots)
|
||||
boots.icon_state = "[initial(icon_state)]_sealed[boots.magpulse]"
|
||||
if(airtight)
|
||||
update_component_sealed()
|
||||
update_icon(1)
|
||||
@@ -406,6 +420,10 @@
|
||||
update_icon(1)
|
||||
|
||||
/obj/item/weapon/rig/proc/update_component_sealed()
|
||||
if(istype(boots) && !(flags & NODROP) && boots.magpulse) //If we have (active) boots and unsealed the suit, we deactivate the magboots.
|
||||
boots.attack_self(wearer)
|
||||
if(istype(helmet) && !(flags & NODROP) && helmet.on) //If we have an (active) headlamp and unsealed the suit, we deactivate the headlamp.
|
||||
helmet.toggle_light(wearer)
|
||||
for(var/obj/item/piece in list(helmet,boots,gloves,chest))
|
||||
if(!(flags & NODROP))
|
||||
piece.flags &= ~STOPSPRESSUREDMAGE
|
||||
@@ -695,6 +713,8 @@
|
||||
M.visible_message("<font color='blue'><b>[M] struggles into \the [src].</b></font>", "<font color='blue'><b>You struggle into \the [src].</b></font>")
|
||||
wearer = M
|
||||
wearer.wearing_rig = src
|
||||
if(has_emergency_release)
|
||||
M.verbs |= /obj/item/weapon/rig/proc/emergency_release
|
||||
update_icon()
|
||||
|
||||
/obj/item/weapon/rig/proc/toggle_piece(var/piece, var/mob/living/user, var/deploy_mode, var/force)
|
||||
@@ -705,15 +725,15 @@
|
||||
if(isliving(uneq_piece.loc))
|
||||
var/mob/living/L = uneq_piece.loc
|
||||
L.unEquip(uneq_piece, 1)
|
||||
uneq_piece.flags &= ~NODROP
|
||||
uneq_piece.forceMove(src)
|
||||
return 0
|
||||
|
||||
if(sealing || !cell || !cell.charge)
|
||||
return 0
|
||||
|
||||
if(user == wearer && user.incapacitated()) // If the user isn't wearing the suit it's probably an AI.
|
||||
return 0
|
||||
if(!(deploy_mode == ONLY_RETRACT && force)) //This should be the case while stripping, stripping does trigger the if statement below.
|
||||
if(user == wearer && user.incapacitated()) // If the user isn't wearing the suit it's probably an AI.
|
||||
return 0
|
||||
|
||||
var/obj/item/check_slot
|
||||
var/equip_to
|
||||
@@ -752,7 +772,6 @@
|
||||
if(to_strip)
|
||||
to_strip.unEquip(use_obj, 1)
|
||||
|
||||
use_obj.flags &= ~NODROP
|
||||
use_obj.forceMove(src)
|
||||
if(wearer)
|
||||
to_chat(wearer, "<span class='notice'>Your [use_obj] [use_obj.gender == PLURAL ? "retract" : "retracts"] swiftly.")
|
||||
@@ -762,13 +781,11 @@
|
||||
to_chat(wearer, "<span class='danger'>You are unable to deploy \the [piece] as \the [check_slot] [check_slot.gender == PLURAL ? "are" : "is"] in the way.</span>")
|
||||
return
|
||||
use_obj.forceMove(wearer)
|
||||
use_obj.flags &= ~NODROP
|
||||
if(!wearer.equip_to_slot_if_possible(use_obj, equip_to, 0, 1))
|
||||
use_obj.forceMove(src)
|
||||
else
|
||||
if(wearer)
|
||||
to_chat(wearer, "<span class='notice'>Your [use_obj.name] [use_obj.gender == PLURAL ? "deploy" : "deploys"] swiftly.</span>")
|
||||
use_obj.flags |= NODROP
|
||||
|
||||
if(piece == "helmet" && helmet)
|
||||
helmet.update_light(wearer)
|
||||
@@ -777,17 +794,17 @@
|
||||
if(!wearer || !user)
|
||||
return 0
|
||||
|
||||
if(flags & NODROP)
|
||||
if(wearer.head && wearer.head != helmet)
|
||||
if(flags & NODROP) //We need to check if we have the part, the person is wearing something in the parts slot, and if yes, are they the same.
|
||||
if(helmet && wearer.head && wearer.head != helmet)
|
||||
to_chat(user, "<span class='danger'>\The [wearer.head] is blocking \the [src] from deploying!</span>")
|
||||
return 0
|
||||
if(wearer.gloves && wearer.gloves != gloves)
|
||||
if(gloves && wearer.gloves && wearer.gloves != gloves)
|
||||
to_chat(user, "<span class='danger'>\The [wearer.gloves] is preventing \the [src] from deploying!</span>")
|
||||
return 0
|
||||
if(wearer.shoes && wearer.shoes != boots)
|
||||
if(boots && wearer.shoes && wearer.shoes != boots)
|
||||
to_chat(user, "<span class='danger'>\The [wearer.shoes] is preventing \the [src] from deploying!</span>")
|
||||
return 0
|
||||
if(wearer.wear_suit && wearer.wear_suit != chest)
|
||||
if(chest && wearer.wear_suit && wearer.wear_suit != chest)
|
||||
to_chat(user, "<span class='danger'>\The [wearer.wear_suit] is preventing \the [src] from deploying!</span>")
|
||||
return 0
|
||||
|
||||
@@ -797,6 +814,7 @@
|
||||
|
||||
/obj/item/weapon/rig/dropped(var/mob/user)
|
||||
..()
|
||||
user.verbs -= /obj/item/weapon/rig/proc/emergency_release
|
||||
for(var/piece in list("helmet","gauntlets","chest","boots"))
|
||||
toggle_piece(piece, user, ONLY_RETRACT, 1)
|
||||
if(wearer)
|
||||
@@ -996,6 +1014,38 @@
|
||||
else
|
||||
return null
|
||||
|
||||
/obj/item/weapon/rig/proc/emergency_release()
|
||||
set name = "Suit Emergency Release"
|
||||
set desc = "Activate the suits emergency release system."
|
||||
set category = "Object"
|
||||
set src in oview(1)
|
||||
var/obj/item/weapon/rig/T = get_rig()
|
||||
return T.do_emergency_release(usr)
|
||||
|
||||
/obj/item/weapon/rig/proc/do_emergency_release(var/mob/living/user)
|
||||
if(!can_touch(user, wearer) || !has_emergency_release)
|
||||
return can_touch(user,wearer)
|
||||
usr.visible_message("<span class='warning'>[user] starts activating \the [src] emergency seals release!</span>")
|
||||
if(!do_after(user,240, target = wearer))
|
||||
to_chat(user, "<span class='notice'>You need to focus on activating the emergency release.</span>")
|
||||
return 0
|
||||
usr.visible_message("<span class='warning'>[user] activated \the [src] emergency seals release!</span>")
|
||||
malfunctioning += 1
|
||||
malfunction_delay = 30
|
||||
unseal(user)
|
||||
return 1
|
||||
|
||||
/obj/item/weapon/rig/proc/can_touch(var/mob/user, var/mob/wearer)
|
||||
if(!user)
|
||||
return 0
|
||||
if(!wearer.Adjacent(user))
|
||||
return 0
|
||||
if(user.restrained())
|
||||
to_chat(user, "<span class='notice'>You need your hands free for this.</span>")
|
||||
return 0
|
||||
if(user.stat || user.paralysis || user.sleeping || user.lying || user.weakened)
|
||||
return 0
|
||||
return 1
|
||||
#undef ONLY_DEPLOY
|
||||
#undef ONLY_RETRACT
|
||||
#undef SEAL_DELAY
|
||||
|
||||
@@ -0,0 +1,21 @@
|
||||
/obj/item/clothing/suit/space/new_rig/calc_breach_damage()
|
||||
..()
|
||||
holder.update_armor() //New dammage, new armormultiplikator.
|
||||
return damage
|
||||
|
||||
/obj/item/weapon/rig/proc/update_armor()
|
||||
var/multi = 1 //Multiplicative modification to the armor, maybe add an additive later on
|
||||
if(chest)
|
||||
multi *= (100 - chest.damage) / 100 //If we have some breaches, lower the armor value.
|
||||
|
||||
//TODO check for other armor mods, likely modules, which need to be coded.
|
||||
|
||||
for(var/obj/item/piece in list(gloves, helmet, boots, chest))
|
||||
if(!istype(piece)) //Do we have the piece
|
||||
continue
|
||||
if(islist(armor)) //Did we even give them some armor, if this is the case, the list should be initialized from New()
|
||||
var/list/L = armor
|
||||
for(var/armortype in L)
|
||||
piece.armor[armortype] = L[armortype]*multi
|
||||
|
||||
//Perfect place to also add something like shield modules, or any other hit_reaction modules check.
|
||||
@@ -141,7 +141,7 @@
|
||||
if(user.r_hand && user.l_hand)
|
||||
cell.forceMove(get_turf(user))
|
||||
else
|
||||
cell.forceMove(user.put_in_hands(cell))
|
||||
user.put_in_hands(cell)
|
||||
cell = null
|
||||
else
|
||||
to_chat(user, "There is nothing loaded in that mount.")
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
|
||||
/obj/item/clothing/head/helmet/space/new_rig
|
||||
name = "helmet"
|
||||
flags = HEADCOVERSEYES | BLOCKHAIR | HEADCOVERSMOUTH | THICKMATERIAL
|
||||
flags = HEADCOVERSEYES | BLOCKHAIR | HEADCOVERSMOUTH | THICKMATERIAL | NODROP
|
||||
flags_inv = HIDEEARS|HIDEEYES|HIDEFACE|HIDEMASK
|
||||
body_parts_covered = HEAD
|
||||
heat_protection = HEAD
|
||||
@@ -12,11 +12,12 @@
|
||||
var/brightness_on = 4
|
||||
var/on = 0
|
||||
sprite_sheets = list(
|
||||
"Tajara" = 'icons/mob/species/tajaran/helmet.dmi',
|
||||
"Tajaran" = 'icons/mob/species/tajaran/helmet.dmi',
|
||||
"Skrell" = 'icons/mob/species/skrell/helmet.dmi',
|
||||
"Unathi" = 'icons/mob/species/unathi/helmet.dmi'
|
||||
)
|
||||
species_restricted = null
|
||||
actions_types = list(/datum/action/item_action/toggle_helmet_light)
|
||||
|
||||
flash_protect = 2
|
||||
|
||||
@@ -28,13 +29,17 @@
|
||||
toggle_light(user)
|
||||
|
||||
/obj/item/clothing/head/helmet/space/new_rig/proc/toggle_light(mob/user)
|
||||
on = !on
|
||||
icon_state = "rig[on]-[item_color]"
|
||||
if(flags & AIRTIGHT) //Could also check for STOPSPRESSUREDMAGE, but one is enough, both get toggled when the seal gets toggled.
|
||||
|
||||
if(on)
|
||||
set_light(brightness_on)
|
||||
on = !on
|
||||
icon_state = "[item_color][on]"
|
||||
|
||||
if(on)
|
||||
set_light(brightness_on)
|
||||
else
|
||||
set_light(0)
|
||||
else
|
||||
set_light(0)
|
||||
to_chat(user, "<span class='warning'>You cannot turn the light on while the suit isn't sealed.</span>")
|
||||
|
||||
if(istype(user,/mob/living/carbon/human))
|
||||
var/mob/living/carbon/human/H = user
|
||||
@@ -42,7 +47,7 @@
|
||||
|
||||
/obj/item/clothing/gloves/rig
|
||||
name = "gauntlets"
|
||||
flags = THICKMATERIAL
|
||||
flags = THICKMATERIAL | NODROP
|
||||
body_parts_covered = HANDS
|
||||
heat_protection = HANDS
|
||||
cold_protection = HANDS
|
||||
@@ -51,12 +56,19 @@
|
||||
|
||||
/obj/item/clothing/shoes/magboots/rig
|
||||
name = "boots"
|
||||
flags = NODROP
|
||||
body_parts_covered = FEET
|
||||
cold_protection = FEET
|
||||
heat_protection = FEET
|
||||
species_restricted = null
|
||||
gender = PLURAL
|
||||
|
||||
/obj/item/clothing/shoes/magboots/rig/attack_self(mob/user)
|
||||
if(flags & AIRTIGHT) //Could also check for STOPSPRESSUREDMAGE, but one is enough, both get toggled when the seal gets toggled.
|
||||
..(user)
|
||||
else
|
||||
to_chat(user, "<span class='warning'>You cannot activate mag-pulse traction system while the suit is not sealed.</span>")
|
||||
|
||||
/obj/item/clothing/suit/space/new_rig
|
||||
name = "chestpiece"
|
||||
allowed = list(/obj/item/device/flashlight,/obj/item/weapon/tank)
|
||||
@@ -64,14 +76,14 @@
|
||||
heat_protection = UPPER_TORSO|LOWER_TORSO|LEGS|ARMS
|
||||
cold_protection = UPPER_TORSO|LOWER_TORSO|LEGS|ARMS
|
||||
flags_inv = HIDEJUMPSUIT|HIDETAIL
|
||||
flags = STOPSPRESSUREDMAGE | THICKMATERIAL | AIRTIGHT
|
||||
flags = STOPSPRESSUREDMAGE | THICKMATERIAL | AIRTIGHT | NODROP
|
||||
slowdown = 0
|
||||
//will reach 10 breach damage after 25 laser carbine blasts, 3 revolver hits, or ~1 PTR hit. Completely immune to smg or sts hits.
|
||||
breach_threshold = 38
|
||||
breach_threshold = 20
|
||||
resilience = 0.2
|
||||
can_breach = 1
|
||||
var/obj/item/weapon/rig/holder
|
||||
sprite_sheets = list(
|
||||
"Tajara" = 'icons/mob/species/tajaran/suit.dmi',
|
||||
"Tajaran" = 'icons/mob/species/tajaran/suit.dmi',
|
||||
"Unathi" = 'icons/mob/species/unathi/suit.dmi'
|
||||
)
|
||||
|
||||
|
||||
@@ -112,7 +112,7 @@
|
||||
name = "stealth suit control module"
|
||||
suit_type = "stealth"
|
||||
desc = "A highly advanced and expensive suit designed for covert operations."
|
||||
icon_state = "stealth_rig"
|
||||
icon_state = "ninja_rig" //supposed to be "stealth_rig", but as it currently only has a semi-copied ninja rig sprite, we can just use them directly.
|
||||
|
||||
req_access = list(access_syndicate)
|
||||
|
||||
|
||||
@@ -38,7 +38,7 @@
|
||||
item_state = "apron"
|
||||
blood_overlay_type = "armor"
|
||||
body_parts_covered = UPPER_TORSO|LOWER_TORSO
|
||||
allowed = list (/obj/item/weapon/reagent_containers/spray/plantbgone,/obj/item/device/analyzer/plant_analyzer,/obj/item/seeds,/obj/item/weapon/reagent_containers/glass/bottle/fertilizer,/obj/item/weapon/minihoe)
|
||||
allowed = list(/obj/item/weapon/reagent_containers/spray/plantbgone,/obj/item/device/plant_analyzer,/obj/item/seeds,/obj/item/weapon/reagent_containers/glass/bottle, /obj/item/weapon/reagent_containers/glass/beaker, /obj/item/weapon/cultivator,/obj/item/weapon/reagent_containers/spray/pestspray,/obj/item/weapon/hatchet,/obj/item/weapon/storage/bag/plants)
|
||||
species_fit = list("Vox")
|
||||
sprite_sheets = list(
|
||||
"Vox" = 'icons/mob/species/vox/suit.dmi'
|
||||
|
||||
@@ -249,6 +249,13 @@
|
||||
I.overlays += image(icon = 'icons/mob/robots.dmi' , icon_state = "eyes-robot") //gotta look realistic
|
||||
H.add_alt_appearance("standard_borg_disguise", I, silicon_mob_list+H) //you look like a robot to robots! (including yourself because you're totally a robot)
|
||||
|
||||
/obj/item/clothing/suit/snowman
|
||||
name = "snowman outfit"
|
||||
desc = "Two white spheres covered in white glitter. 'Tis the season."
|
||||
icon_state = "snowman"
|
||||
item_state = "snowman"
|
||||
body_parts_covered = UPPER_TORSO|LOWER_TORSO
|
||||
flags_inv = HIDEJUMPSUIT
|
||||
|
||||
/obj/item/clothing/suit/poncho
|
||||
name = "poncho"
|
||||
@@ -279,6 +286,44 @@
|
||||
item_state = "ponchoshame"
|
||||
flags = NODROP
|
||||
|
||||
/obj/item/clothing/suit/hooded/carp_costume
|
||||
name = "carp costume"
|
||||
desc = "A costume made from 'synthetic' carp scales, it smells."
|
||||
icon_state = "carp_casual"
|
||||
item_state = "labcoat"
|
||||
body_parts_covered = UPPER_TORSO|LOWER_TORSO|ARMS
|
||||
cold_protection = UPPER_TORSO|LOWER_TORSO|ARMS
|
||||
min_cold_protection_temperature = FIRE_SUIT_MIN_TEMP_PROTECT //Space carp like space, so you should too
|
||||
allowed = list(/obj/item/weapon/tank/emergency_oxygen)
|
||||
hoodtype = /obj/item/clothing/head/hooded/carp_hood
|
||||
|
||||
/obj/item/clothing/head/hooded/carp_hood
|
||||
name = "carp hood"
|
||||
desc = "A hood attached to a carp costume."
|
||||
icon_state = "carp_casual"
|
||||
body_parts_covered = HEAD
|
||||
cold_protection = HEAD
|
||||
min_cold_protection_temperature = FIRE_SUIT_MIN_TEMP_PROTECT
|
||||
flags = NODROP|BLOCKHAIR
|
||||
flags_inv = HIDEEARS
|
||||
|
||||
/obj/item/clothing/suit/hooded/bee_costume // It's Hip!
|
||||
name = "bee costume"
|
||||
desc = "Bee the true Queen!"
|
||||
icon_state = "bee"
|
||||
item_state = "labcoat"
|
||||
body_parts_covered = UPPER_TORSO|LOWER_TORSO|ARMS
|
||||
flags = THICKMATERIAL
|
||||
hoodtype = /obj/item/clothing/head/hooded/bee_hood
|
||||
|
||||
/obj/item/clothing/head/hooded/bee_hood
|
||||
name = "bee hood"
|
||||
desc = "A hood attached to a bee costume."
|
||||
icon_state = "bee"
|
||||
body_parts_covered = HEAD
|
||||
flags = THICKMATERIAL|NODROP|BLOCKHAIR
|
||||
flags_inv = HIDEEARS
|
||||
|
||||
/obj/item/clothing/suit/bloated_human //OH MY GOD WHAT HAVE YOU DONE!?!?!?
|
||||
name = "bloated human suit"
|
||||
desc = "A horribly bloated suit made from human skins."
|
||||
@@ -376,7 +421,7 @@
|
||||
/obj/item/clothing/suit/hooded/wintercoat/hydro
|
||||
name = "hydroponics winter coat"
|
||||
icon_state = "wintercoat_hydro"
|
||||
allowed = list(/obj/item/weapon/reagent_containers/spray, /obj/item/device/analyzer/plant_analyzer, /obj/item/seeds, /obj/item/weapon/reagent_containers/glass/bottle, /obj/item/weapon/hatchet, /obj/item/weapon/storage/bag/plants)
|
||||
allowed = list(/obj/item/weapon/reagent_containers/spray, /obj/item/device/plant_analyzer, /obj/item/seeds, /obj/item/weapon/reagent_containers/glass/bottle, /obj/item/weapon/hatchet, /obj/item/weapon/storage/bag/plants)
|
||||
hoodtype = /obj/item/clothing/head/winterhood/hydro
|
||||
|
||||
/obj/item/clothing/head/winterhood/hydro
|
||||
@@ -728,6 +773,13 @@
|
||||
adjust_flavour = null
|
||||
burn_state = FIRE_PROOF
|
||||
|
||||
/obj/item/clothing/suit/jacket/leather/overcoat
|
||||
name = "leather overcoat"
|
||||
desc = "That's a damn fine coat."
|
||||
icon_state = "leathercoat"
|
||||
body_parts_covered = UPPER_TORSO|LOWER_TORSO|ARMS|LEGS
|
||||
cold_protection = UPPER_TORSO|LOWER_TORSO|ARMS|LEGS
|
||||
|
||||
/obj/item/clothing/suit/officercoat
|
||||
name = "Clown Officer's Coat"
|
||||
desc = "A classy clown officer's overcoat, also designed by Hugo Boss."
|
||||
|
||||
@@ -74,6 +74,10 @@
|
||||
strip_delay = 70
|
||||
put_on_delay = 70
|
||||
burn_state = FIRE_PROOF
|
||||
species_fit = list("Vox")
|
||||
sprite_sheets = list(
|
||||
"Vox" = 'icons/mob/species/vox/head.dmi'
|
||||
)
|
||||
|
||||
/obj/item/clothing/suit/bomb_suit
|
||||
name = "bomb suit"
|
||||
@@ -99,17 +103,20 @@
|
||||
sprite_sheets = list(
|
||||
"Vox" = 'icons/mob/species/vox/suit.dmi'
|
||||
)
|
||||
hide_tail_by_species = list("Vox")
|
||||
|
||||
/obj/item/clothing/head/bomb_hood/security
|
||||
icon_state = "bombsuitsec"
|
||||
item_state = "bombsuitsec"
|
||||
species_fit = null
|
||||
sprite_sheets = null
|
||||
|
||||
|
||||
/obj/item/clothing/suit/bomb_suit/security
|
||||
icon_state = "bombsuitsec"
|
||||
item_state = "bombsuitsec"
|
||||
allowed = list(/obj/item/weapon/gun/energy,/obj/item/weapon/melee/baton,/obj/item/weapon/restraints/handcuffs)
|
||||
species_fit = null
|
||||
sprite_sheets = null
|
||||
|
||||
/*
|
||||
* Radiation protection
|
||||
@@ -123,6 +130,10 @@
|
||||
strip_delay = 60
|
||||
put_on_delay = 60
|
||||
burn_state = FIRE_PROOF
|
||||
species_fit = list("Vox")
|
||||
sprite_sheets = list(
|
||||
"Vox" = 'icons/mob/species/vox/head.dmi'
|
||||
)
|
||||
|
||||
/obj/item/clothing/suit/radiation
|
||||
name = "Radiation suit"
|
||||
@@ -140,4 +151,8 @@
|
||||
flags_inv = HIDEJUMPSUIT|HIDETAIL
|
||||
strip_delay = 60
|
||||
put_on_delay = 60
|
||||
burn_state = FIRE_PROOF
|
||||
burn_state = FIRE_PROOF
|
||||
species_fit = list("Vox")
|
||||
sprite_sheets = list(
|
||||
"Vox" = 'icons/mob/species/vox/suit.dmi'
|
||||
)
|
||||
@@ -495,6 +495,26 @@
|
||||
item_color = "janimaid"
|
||||
body_parts_covered = UPPER_TORSO|LOWER_TORSO
|
||||
|
||||
/obj/item/clothing/under/singery
|
||||
name = "yellow performer's outfit"
|
||||
desc = "Just looking at this makes you want to sing."
|
||||
icon_state = "ysing"
|
||||
item_state = "ysing"
|
||||
item_color = "ysing"
|
||||
|
||||
/obj/item/clothing/under/singerb
|
||||
name = "blue performer's outfit"
|
||||
desc = "Just looking at this makes you want to sing."
|
||||
icon_state = "bsing"
|
||||
item_state = "bsing"
|
||||
item_color = "bsing"
|
||||
|
||||
/obj/item/clothing/under/jester
|
||||
name = "jester suit"
|
||||
desc = "A jolly dress, well suited to entertain your master, nuncle."
|
||||
icon_state = "jester"
|
||||
item_color = "jester"
|
||||
|
||||
/obj/item/clothing/under/flappers
|
||||
name = "flappers"
|
||||
desc = "Nothing like the roarin' '20s, flapping the night away on the dance floor."
|
||||
|
||||
@@ -47,7 +47,7 @@
|
||||
|
||||
New()
|
||||
..()
|
||||
crew_announcement.newscast = 1
|
||||
crew_announcement.newscast = 0
|
||||
|
||||
Reset()
|
||||
..()
|
||||
|
||||
@@ -1,44 +1,30 @@
|
||||
|
||||
|
||||
/obj/item/weapon/disk/file/arcade
|
||||
name = "Arcade game grab pack"
|
||||
desc = "A program install disk."
|
||||
icon = 'icons/obj/stock_parts.dmi'
|
||||
icon_state = "datadisk_arcade"
|
||||
spawn_files = list(/datum/file/program/arcade,/datum/file/program/arcade,/datum/file/program/arcade,/datum/file/program/arcade)
|
||||
|
||||
/*/obj/item/weapon/disk/file/aifixer
|
||||
name = "AI System Integrity Restorer"
|
||||
desc = "A program install disk."
|
||||
icon = 'icons/obj/stock_parts.dmi'
|
||||
icon_state = "datadisk_arcade"
|
||||
spawn_files = list(/datum/file/program/aifixer)*/
|
||||
|
||||
/obj/item/weapon/disk/file/atmos_alert
|
||||
name = "Atmospheric Alert Notifier"
|
||||
desc = "A program install disk."
|
||||
icon = 'icons/obj/stock_parts.dmi'
|
||||
icon_state = "datadisk_arcade"
|
||||
spawn_files = list(/datum/file/program/atmos_alert)
|
||||
|
||||
/obj/item/weapon/disk/file/cameras
|
||||
name = "Camera Viewer"
|
||||
desc = "A program install disk."
|
||||
icon = 'icons/obj/stock_parts.dmi'
|
||||
icon_state = "datadisk_arcade"
|
||||
spawn_files = list(/datum/file/program/security)
|
||||
|
||||
/obj/item/weapon/disk/file/card
|
||||
name = "ID Card Modifier"
|
||||
desc = "A program install disk."
|
||||
icon = 'icons/obj/stock_parts.dmi'
|
||||
icon_state = "datadisk_arcade"
|
||||
spawn_files = list(/datum/file/program/card_comp)
|
||||
/*
|
||||
/obj/item/weapon/disk/file/genetics
|
||||
name = "Genetics & Cloning"
|
||||
desc = "A program install disk."
|
||||
icon = 'icons/obj/stock_parts.dmi'
|
||||
icon_state = "datadisk_arcade"
|
||||
spawn_files = list(/datum/file/program/cloning,/datum/file/program/dnascanner)
|
||||
*/
|
||||
|
||||
@@ -163,6 +163,7 @@
|
||||
//parent_type = /obj/item/part/computer/storage // todon't: do this
|
||||
name = "Data Disk"
|
||||
desc = "A device that can be inserted and removed into computers easily as a form of portable data storage. This one stores 1 Megabyte"
|
||||
icon_state = "datadisk_arcade"
|
||||
var/list/files
|
||||
var/list/spawn_files = list()
|
||||
var/writeprotect = 0
|
||||
|
||||
@@ -6,7 +6,6 @@
|
||||
var/time = 30 //time in deciseconds
|
||||
var/parts[] = list() //type paths of items that will be placed in the result
|
||||
var/chem_catalists[] = list() //like tools but for reagents
|
||||
var/fruit[] = list() //grown products required by the recipe
|
||||
var/category = CAT_MISC // Recipe category
|
||||
|
||||
/datum/crafting_recipe/proc/AdjustChems(var/obj/resultobj as obj)
|
||||
@@ -49,10 +48,8 @@
|
||||
result = /obj/item/weapon/melee/baton/cattleprod
|
||||
reqs = list(/obj/item/weapon/restraints/handcuffs/cable = 1,
|
||||
/obj/item/stack/rods = 1,
|
||||
/obj/item/weapon/wirecutters = 1,
|
||||
/obj/item/weapon/stock_parts/cell = 1)
|
||||
/obj/item/device/assembly/igniter = 1)
|
||||
time = 40
|
||||
parts = list(/obj/item/weapon/stock_parts/cell = 1)
|
||||
category = CAT_WEAPON
|
||||
|
||||
/datum/crafting_recipe/bola
|
||||
@@ -308,4 +305,11 @@
|
||||
time = 20
|
||||
reqs = list(/obj/item/stack/sheet/mineral/bananium = 5,
|
||||
/obj/item/weapon/bikehorn)
|
||||
category = CAT_MISC
|
||||
category = CAT_MISC
|
||||
|
||||
/datum/crafting_recipe/bonfire
|
||||
name = "Bonfire"
|
||||
time = 60
|
||||
reqs = list(/obj/item/weapon/grown/log = 5)
|
||||
result = /obj/structure/bonfire
|
||||
category = CAT_PRIMAL
|
||||
@@ -154,6 +154,14 @@
|
||||
icon_on = "guessipon"
|
||||
icon_off = "guessip"
|
||||
|
||||
/obj/item/weapon/lighter/zippo/fluff/duckchan // Duckchan: Rybys Romney
|
||||
name = "Monogrammed Zippo"
|
||||
desc = " A shiny purple zippo lighter, engraved with Rybys Romney and BuzzPing's name, with a festive green flame."
|
||||
icon = 'icons/obj/custom_items.dmi'
|
||||
icon_state = "rybysfluff"
|
||||
icon_on = "rybysfluffopen"
|
||||
icon_off = "rybysfluff"
|
||||
|
||||
/obj/item/weapon/fluff/dogwhistle //phantasmicdream: Zeke Varloss
|
||||
name = "Sax's whistle"
|
||||
desc = "This whistle seems to have a strange aura about it. Maybe you should blow on it?"
|
||||
@@ -376,6 +384,18 @@
|
||||
icon_state = "kakicharakiti"
|
||||
|
||||
//////////// Suits ////////////
|
||||
/obj/item/clothing/suit/fluff/dusty_jacket //ComputerlessCitizen: Screech
|
||||
name = "Dusty Jacket"
|
||||
desc = "A worn leather jacket. Some burn holes have been patched."
|
||||
body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|ARMS
|
||||
icon = 'icons/obj/custom_items.dmi'
|
||||
icon_state = "dusty_jacket"
|
||||
ignore_suitadjust = 1
|
||||
actions_types = list()
|
||||
adjust_flavour = null
|
||||
species_fit = null
|
||||
sprite_sheets = null
|
||||
|
||||
/obj/item/clothing/suit/storage/labcoat/fluff/aeneas_rinil //Socialsystem: Lynn Fea
|
||||
name = "Robotics labcoat"
|
||||
desc = "A labcoat with a few markings denoting it as the labcoat of roboticist."
|
||||
|
||||
@@ -10,7 +10,7 @@
|
||||
|
||||
/datum/event/alien_infestation/announce()
|
||||
if(successSpawn)
|
||||
command_announcement.Announce("Unidentified lifesigns detected coming aboard [station_name()]. Secure any exterior access, including ducting and ventilation.", "Lifesign Alert", new_sound = 'sound/AI/aliens.ogg')
|
||||
event_announcement.Announce("Unidentified lifesigns detected coming aboard [station_name()]. Secure any exterior access, including ducting and ventilation.", "Lifesign Alert", new_sound = 'sound/AI/aliens.ogg')
|
||||
|
||||
/datum/event/alien_infestation/start()
|
||||
var/list/vents = list()
|
||||
@@ -29,6 +29,8 @@
|
||||
respawnable_list -= C.client
|
||||
var/mob/living/carbon/alien/larva/new_xeno = new(vent.loc)
|
||||
new_xeno.key = C.key
|
||||
if(ticker && ticker.mode)
|
||||
ticker.mode.xenos += new_xeno.mind
|
||||
|
||||
spawncount--
|
||||
successSpawn = 1
|
||||
|
||||
@@ -15,7 +15,7 @@
|
||||
setup(safety_loop)
|
||||
|
||||
/datum/event/anomaly/announce()
|
||||
command_announcement.Announce("Localized hyper-energetic flux wave detected on long range scanners. Expected location of impact: [impact_area.name].", "Anomaly Alert")
|
||||
event_announcement.Announce("Localized hyper-energetic flux wave detected on long range scanners. Expected location of impact: [impact_area.name].", "Anomaly Alert")
|
||||
|
||||
/datum/event/anomaly/start()
|
||||
var/turf/T = pick(get_area_turfs(impact_area))
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
endWhen = 160
|
||||
|
||||
/datum/event/anomaly/anomaly_bluespace/announce()
|
||||
command_announcement.Announce("Unstable bluespace anomaly detected on long range scanners. Expected location: [impact_area.name].", "Anomaly Alert")
|
||||
event_announcement.Announce("Unstable bluespace anomaly detected on long range scanners. Expected location: [impact_area.name].", "Anomaly Alert")
|
||||
|
||||
/datum/event/anomaly/anomaly_bluespace/start()
|
||||
var/turf/T = pick(get_area_turfs(impact_area))
|
||||
@@ -33,7 +33,7 @@
|
||||
var/turf/TO = get_turf(chosen) // the turf of origin we're travelling TO
|
||||
|
||||
playsound(TO, 'sound/effects/phasein.ogg', 100, 1)
|
||||
command_announcement.Announce("Massive bluespace translocation detected.", "Anomaly Alert")
|
||||
event_announcement.Announce("Massive bluespace translocation detected.", "Anomaly Alert")
|
||||
|
||||
var/list/flashers = list()
|
||||
for(var/mob/living/carbon/C in viewers(TO, null))
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
endWhen = 180
|
||||
|
||||
/datum/event/anomaly/anomaly_flux/announce()
|
||||
command_announcement.Announce("Localized hyper-energetic flux wave detected on long range scanners. Expected location: [impact_area.name].", "Anomaly Alert")
|
||||
event_announcement.Announce("Localized hyper-energetic flux wave detected on long range scanners. Expected location: [impact_area.name].", "Anomaly Alert")
|
||||
|
||||
/datum/event/anomaly/anomaly_flux/start()
|
||||
var/turf/T = pick(get_area_turfs(impact_area))
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
endWhen = 70
|
||||
|
||||
/datum/event/anomaly/anomaly_grav/announce()
|
||||
command_announcement.Announce("Gravitational anomaly detected on long range scanners. Expected location: [impact_area.name].", "Anomaly Alert")
|
||||
event_announcement.Announce("Gravitational anomaly detected on long range scanners. Expected location: [impact_area.name].", "Anomaly Alert")
|
||||
|
||||
/datum/event/anomaly/anomaly_grav/start()
|
||||
var/turf/T = pick(get_area_turfs(impact_area))
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
endWhen = 110
|
||||
|
||||
/datum/event/anomaly/anomaly_pyro/announce()
|
||||
command_announcement.Announce("Atmospheric anomaly detected on long range scanners. Expected location: [impact_area.name].", "Anomaly Alert")
|
||||
event_announcement.Announce("Atmospheric anomaly detected on long range scanners. Expected location: [impact_area.name].", "Anomaly Alert")
|
||||
|
||||
/datum/event/anomaly/anomaly_pyro/start()
|
||||
var/turf/T = pick(get_area_turfs(impact_area))
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
endWhen = 80
|
||||
|
||||
/datum/event/anomaly/anomaly_vortex/announce()
|
||||
command_announcement.Announce("Localized high-intensity vortex anomaly detected on long range scanners. Expected location: [impact_area.name]", "Anomaly Alert")
|
||||
event_announcement.Announce("Localized high-intensity vortex anomaly detected on long range scanners. Expected location: [impact_area.name]", "Anomaly Alert")
|
||||
|
||||
/datum/event/anomaly/anomaly_vortex/start()
|
||||
var/turf/T = pick(get_area_turfs(impact_area))
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
var/obj/effect/blob/core/Blob
|
||||
|
||||
/datum/event/blob/announce()
|
||||
command_announcement.Announce("Confirmed outbreak of level 5 biohazard aboard [station_name()]. All personnel must contain the outbreak.", "Biohazard Alert", 'sound/AI/outbreak5.ogg')
|
||||
event_announcement.Announce("Confirmed outbreak of level 5 biohazard aboard [station_name()]. All personnel must contain the outbreak.", "Biohazard Alert", 'sound/AI/outbreak5.ogg')
|
||||
|
||||
/datum/event/blob/start()
|
||||
var/turf/T = pick(blobstart)
|
||||
|
||||
@@ -14,7 +14,7 @@
|
||||
"You don't want to buy anything? Yeah, well I didn't want to buy your mom either.")
|
||||
|
||||
/datum/event/brand_intelligence/announce()
|
||||
command_announcement.Announce("Rampant brand intelligence has been detected aboard [station_name()], please stand-by. The origin is believed to be \a [originMachine.name].", "Machine Learning Alert")
|
||||
event_announcement.Announce("Rampant brand intelligence has been detected aboard [station_name()], please stand-by. The origin is believed to be \a [originMachine.name].", "Machine Learning Alert")
|
||||
|
||||
/datum/event/brand_intelligence/start()
|
||||
for(var/obj/machinery/vending/V in machines)
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
announceWhen = 5
|
||||
|
||||
/datum/event/cargo_bonus/announce()
|
||||
command_announcement.Announce("Congratulations! [station_name()] was chosen for a supply limit increase. Please contact the local cargo department for details!", "Supply Alert")
|
||||
event_announcement.Announce("Congratulations! [station_name()] was chosen for a supply limit increase. Please contact the local cargo department for details!", "Supply Alert")
|
||||
|
||||
/datum/event/cargo_bonus/start()
|
||||
supply_controller.points += rand(100,500)
|
||||
@@ -14,7 +14,7 @@
|
||||
announcement = "Massive migration of unknown biological entities has been detected near [station_name()], please stand-by."
|
||||
else
|
||||
announcement = "Unknown biological [spawned_carp.len == 1 ? "entity has" : "entities have"] been detected near [station_name()], please stand-by."
|
||||
command_announcement.Announce(announcement, "Lifesign Alert")
|
||||
event_announcement.Announce(announcement, "Lifesign Alert")
|
||||
|
||||
/datum/event/carp_migration/start()
|
||||
if(severity == EVENT_LEVEL_MAJOR)
|
||||
|
||||
@@ -12,7 +12,7 @@
|
||||
to_chat(A, "<br>")
|
||||
|
||||
if(prob(30)) //most of the time, we don't want an announcement, so as to allow AIs to fake blackouts.
|
||||
command_announcement.Announce(alert)
|
||||
event_announcement.Announce(alert)
|
||||
|
||||
/datum/event/communications_blackout/start()
|
||||
for(var/obj/machinery/telecomms/T in telecomms_list)
|
||||
@@ -20,7 +20,7 @@
|
||||
|
||||
/proc/communications_blackout(var/silent = 1)
|
||||
if(!silent)
|
||||
command_announcement.Announce("Ionospheric anomalies detected. Temporary telecommunication failure imminent. Please contact you-BZZT", new_sound = 'sound/misc/interference.ogg')
|
||||
event_announcement.Announce("Ionospheric anomalies detected. Temporary telecommunication failure imminent. Please contact you-BZZT", new_sound = 'sound/misc/interference.ogg')
|
||||
else // AIs will always know if there's a comm blackout, rogue AIs could then lie about comm blackouts in the future while they shutdown comms
|
||||
for(var/mob/living/silicon/ai/A in player_list)
|
||||
to_chat(A, "<br>")
|
||||
|
||||
@@ -7,7 +7,7 @@
|
||||
announceWhen = rand(15, 30)
|
||||
|
||||
/datum/event/disease_outbreak/announce()
|
||||
command_announcement.Announce("Confirmed outbreak of level 7 major viral biohazard aboard [station_name()]. All personnel must contain the outbreak.", "Biohazard Alert", new_sound = 'sound/AI/outbreak7.ogg')
|
||||
event_announcement.Announce("Confirmed outbreak of level 7 major viral biohazard aboard [station_name()]. All personnel must contain the outbreak.", "Biohazard Alert", new_sound = 'sound/AI/outbreak7.ogg')
|
||||
|
||||
/datum/event/disease_outbreak/start()
|
||||
if(!virus_type)
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
var/lightsoutRange = 25
|
||||
|
||||
/datum/event/electrical_storm/announce()
|
||||
command_announcement.Announce("An electrical storm has been detected in your area, please repair potential electronic overloads.", "Electrical Storm Alert")
|
||||
event_announcement.Announce("An electrical storm has been detected in your area, please repair potential electronic overloads.", "Electrical Storm Alert")
|
||||
|
||||
/datum/event/electrical_storm/start()
|
||||
var/list/epicentreList = list()
|
||||
|
||||
@@ -101,8 +101,13 @@ var/list/event_last_fired = list()
|
||||
playercount_modifier = 1
|
||||
if(26 to 35)
|
||||
playercount_modifier = 0.9
|
||||
if(36 to 100000)
|
||||
if(36 to 50)
|
||||
playercount_modifier = 0.8
|
||||
if(50 to 80)
|
||||
playercount_modifier = 0.7
|
||||
if(80 to 10000)
|
||||
playercount_modifier = 0.6
|
||||
|
||||
playercount_modifier = playercount_modifier * delay_modifier
|
||||
|
||||
var/event_delay = rand(config.event_delay_lower[severity], config.event_delay_upper[severity]) * playercount_modifier
|
||||
@@ -155,6 +160,7 @@ var/list/event_last_fired = list()
|
||||
new /datum/event_meta(EVENT_LEVEL_MODERATE, "Spider Infestation", /datum/event/spider_infestation, 100, list(ASSIGNMENT_SECURITY = 30), 1),
|
||||
new /datum/event_meta(EVENT_LEVEL_MODERATE, "Ion Storm", /datum/event/ion_storm, 0, list(ASSIGNMENT_AI = 50, ASSIGNMENT_CYBORG = 50, ASSIGNMENT_ENGINEER = 15, ASSIGNMENT_SCIENTIST = 5)),
|
||||
new /datum/event_meta(EVENT_LEVEL_MODERATE, "Borer Infestation", /datum/event/borer_infestation, 40, list(ASSIGNMENT_SECURITY = 30), 1),
|
||||
new /datum/event_meta(EVENT_LEVEL_MODERATE, "Immovable Rod", /datum/event/immovable_rod, 0, list(ASSIGNMENT_ENGINEER = 30), 1),
|
||||
//new /datum/event_meta/ninja(EVENT_LEVEL_MODERATE, "Space Ninja", /datum/event/space_ninja, 0, list(ASSIGNMENT_SECURITY = 15), 1),
|
||||
// NON-BAY EVENTS
|
||||
new /datum/event_meta(EVENT_LEVEL_MODERATE, "Mass Hallucination", /datum/event/mass_hallucination, 300),
|
||||
@@ -170,7 +176,7 @@ var/list/event_last_fired = list()
|
||||
new /datum/event_meta(EVENT_LEVEL_MODERATE, "Gravitational Anomaly", /datum/event/anomaly/anomaly_grav, 200),
|
||||
new /datum/event_meta(EVENT_LEVEL_MODERATE, "Revenant", /datum/event/revenant, 150),
|
||||
new /datum/event_meta(EVENT_LEVEL_MODERATE, "Swarmer Spawn", /datum/event/spawn_swarmer, 150, is_one_shot = 1),
|
||||
new /datum/event_meta(EVENT_LEVEL_MODERATE, "Morph Spawn", /datum/event/spawn_morph, 0, is_one_shot = 1),
|
||||
new /datum/event_meta(EVENT_LEVEL_MODERATE, "Morph Spawn", /datum/event/spawn_morph, 40, is_one_shot = 1),
|
||||
new /datum/event_meta(EVENT_LEVEL_MODERATE, "Disease Outbreak", /datum/event/disease_outbreak, 0, list(ASSIGNMENT_MEDICAL = 150), 1)
|
||||
)
|
||||
|
||||
@@ -185,7 +191,8 @@ var/list/event_last_fired = list()
|
||||
new /datum/event_meta(EVENT_LEVEL_MAJOR, "Abductor Visit", /datum/event/abductor, 80, is_one_shot = 1),
|
||||
new /datum/event_meta/alien(EVENT_LEVEL_MAJOR, "Alien Infestation", /datum/event/alien_infestation, 0, list(ASSIGNMENT_SECURITY = 30), 1),
|
||||
new /datum/event_meta(EVENT_LEVEL_MAJOR, "Traders", /datum/event/traders, 0, is_one_shot = 1),
|
||||
new /datum/event_meta(EVENT_LEVEL_MAJOR, "Terror Spiders", /datum/event/spider_terror, 0, is_one_shot = 1)
|
||||
new /datum/event_meta(EVENT_LEVEL_MAJOR, "Terror Spiders", /datum/event/spider_terror, 0, is_one_shot = 1),
|
||||
new /datum/event_meta(EVENT_LEVEL_MAJOR, "Slaughter Demon", /datum/event/spawn_slaughter, 15, is_one_shot = 1)
|
||||
)
|
||||
|
||||
|
||||
|
||||
@@ -8,14 +8,14 @@
|
||||
power_failure(0)
|
||||
|
||||
/datum/event/grid_check/announce()
|
||||
command_announcement.Announce("Abnormal activity detected in [station_name()]'s powernet. As a precautionary measure, the station's power will be shut off for an indeterminate duration.", "Automated Grid Check", new_sound = 'sound/AI/poweroff.ogg')
|
||||
event_announcement.Announce("Abnormal activity detected in [station_name()]'s powernet. As a precautionary measure, the station's power will be shut off for an indeterminate duration.", "Automated Grid Check", new_sound = 'sound/AI/poweroff.ogg')
|
||||
|
||||
/datum/event/grid_check/end()
|
||||
power_restore()
|
||||
|
||||
/proc/power_failure(var/announce = 1)
|
||||
if(announce)
|
||||
command_announcement.Announce("Abnormal activity detected in [station_name()]'s powernet. As a precautionary measure, the station's power will be shut off for an indeterminate duration.", "Critical Power Failure", new_sound = 'sound/AI/poweroff.ogg')
|
||||
event_announcement.Announce("Abnormal activity detected in [station_name()]'s powernet. As a precautionary measure, the station's power will be shut off for an indeterminate duration.", "Critical Power Failure", new_sound = 'sound/AI/poweroff.ogg')
|
||||
|
||||
var/list/skipped_areas = list(/area/turret_protected/ai)
|
||||
var/list/skipped_areas_apc = list(/area/engine/engineering)
|
||||
@@ -45,7 +45,7 @@
|
||||
var/list/skipped_areas_apc = list(/area/engine/engineering)
|
||||
|
||||
if(announce)
|
||||
command_announcement.Announce("Power has been restored to [station_name()]. We apologize for the inconvenience.", "Power Systems Nominal", new_sound = 'sound/AI/poweron.ogg')
|
||||
event_announcement.Announce("Power has been restored to [station_name()]. We apologize for the inconvenience.", "Power Systems Nominal", new_sound = 'sound/AI/poweron.ogg')
|
||||
for(var/obj/machinery/power/apc/C in apcs)
|
||||
var/area/current_area = get_area(C)
|
||||
if(current_area.type in skipped_areas_apc || !is_station_level(C.z))
|
||||
@@ -64,7 +64,7 @@
|
||||
|
||||
/proc/power_restore_quick(var/announce = 1)
|
||||
if(announce)
|
||||
command_announcement.Announce("All SMESs on [station_name()] have been recharged. We apologize for the inconvenience.", "Power Systems Nominal", new_sound = 'sound/AI/poweron.ogg')
|
||||
event_announcement.Announce("All SMESs on [station_name()] have been recharged. We apologize for the inconvenience.", "Power Systems Nominal", new_sound = 'sound/AI/poweron.ogg')
|
||||
for(var/obj/machinery/power/smes/S in machines)
|
||||
if(!is_station_level(S.z))
|
||||
continue
|
||||
|
||||
@@ -11,7 +11,7 @@ In my current plan for it, 'solid' will be defined as anything with density == 1
|
||||
announceWhen = 5
|
||||
|
||||
/datum/event/immovable_rod/announce()
|
||||
command_announcement.Announce("What the fuck was that?!", "General Alert")
|
||||
event_announcement.Announce("What the fuck was that?!", "General Alert")
|
||||
|
||||
/datum/event/immovable_rod/start()
|
||||
var/startside = pick(cardinal)
|
||||
@@ -34,9 +34,23 @@ In my current plan for it, 'solid' will be defined as anything with density == 1
|
||||
loc = start
|
||||
z_original = z
|
||||
destination = end
|
||||
notify_ghosts("\A [src] is inbound!",
|
||||
enter_link="<a href=?src=[UID()];follow=1>(Click to follow)</a>",
|
||||
source=src, action=NOTIFY_FOLLOW)
|
||||
poi_list |= src
|
||||
if(end && end.z==z_original)
|
||||
walk_towards(src, destination, 1)
|
||||
|
||||
/obj/effect/immovablerod/Topic(href, href_list)
|
||||
if(href_list["follow"])
|
||||
var/mob/dead/observer/ghost = usr
|
||||
if(istype(ghost))
|
||||
ghost.ManualFollow(src)
|
||||
|
||||
/obj/effect/immovablerod/Destroy()
|
||||
poi_list.Remove(src)
|
||||
return ..()
|
||||
|
||||
/obj/effect/immovablerod/Move()
|
||||
if(z != z_original || loc == destination)
|
||||
qdel(src)
|
||||
@@ -65,4 +79,4 @@ In my current plan for it, 'solid' will be defined as anything with density == 1
|
||||
H.adjustBruteLoss(160)
|
||||
if(clong.density || prob(10))
|
||||
clong.ex_act(2)
|
||||
return
|
||||
return
|
||||
@@ -97,7 +97,7 @@
|
||||
|
||||
|
||||
/datum/event/infestation/announce()
|
||||
command_announcement.Announce("Bioscans indicate that [vermstring] have been breeding in [locstring]. Clear them out, before this starts to affect productivity.", "Lifesign Alert")
|
||||
event_announcement.Announce("Bioscans indicate that [vermstring] have been breeding in [locstring]. Clear them out, before this starts to affect productivity.", "Lifesign Alert")
|
||||
|
||||
#undef LOC_KITCHEN
|
||||
#undef LOC_ATMOS
|
||||
|
||||
@@ -17,7 +17,7 @@
|
||||
|
||||
/datum/event/ion_storm/announce()
|
||||
if(announceEvent == ION_ANNOUNCE || (announceEvent == ION_RANDOM && prob(ionAnnounceChance)))
|
||||
command_announcement.Announce("Ion storm detected near the station. Please check all AI-controlled equipment for errors.", "Anomaly Alert", 'sound/AI/ionstorm.ogg')
|
||||
event_announcement.Announce("Ion storm detected near the station. Please check all AI-controlled equipment for errors.", "Anomaly Alert", 'sound/AI/ionstorm.ogg')
|
||||
|
||||
|
||||
/datum/event/ion_storm/start()
|
||||
|
||||
@@ -9,4 +9,4 @@
|
||||
H.AdjustHallucinate(rand(50, 100))
|
||||
|
||||
/datum/event/mass_hallucination/announce()
|
||||
command_announcement.Announce("It seems that station [station_name()] is passing through a minor radiation field, this may cause some hallucination, but no further damage")
|
||||
event_announcement.Announce("It seems that station [station_name()] is passing through a minor radiation field, this may cause some hallucination, but no further damage")
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/datum/event/meteor_wave/gore/announce()
|
||||
command_announcement.Announce("Unknown biological debris have been detected near [station_name()], please stand-by.", "Debris Alert")
|
||||
event_announcement.Announce("Unknown biological debris have been detected near [station_name()], please stand-by.", "Debris Alert")
|
||||
|
||||
/datum/event/meteor_wave/gore/setup()
|
||||
waves = 3
|
||||
@@ -14,4 +14,4 @@
|
||||
|
||||
|
||||
/datum/event/meteor_wave/gore/end()
|
||||
command_announcement.Announce("The station has cleared the debris.", "Debris Alert")
|
||||
event_announcement.Announce("The station has cleared the debris.", "Debris Alert")
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
/datum/event/meteor_wave/goreop/announce()
|
||||
var/meteor_declaration = "MeteorOps have declared their intent to utterly destroy [station_name()] with their own bodies, and dares the crew to try and stop them."
|
||||
command_announcement.Announce(meteor_declaration, "Declaration of 'War'", 'sound/effects/siren.ogg')
|
||||
event_announcement.Announce(meteor_declaration, "Declaration of 'War'", 'sound/effects/siren.ogg')
|
||||
|
||||
/datum/event/meteor_wave/goreop/setup()
|
||||
waves = 3
|
||||
@@ -16,4 +16,4 @@
|
||||
|
||||
|
||||
/datum/event/meteor_wave/goreops/end()
|
||||
command_announcement.Announce("All MeteorOps are dead. Major Station Victory.", "MeteorOps")
|
||||
event_announcement.Announce("All MeteorOps are dead. Major Station Victory.", "MeteorOps")
|
||||
@@ -1,8 +1,8 @@
|
||||
/datum/event/dust/meaty/announce()
|
||||
if(prob(16))
|
||||
command_announcement.Announce("Unknown biological entities have been detected near [station_name()], please stand-by.", "Lifesign Alert")
|
||||
event_announcement.Announce("Unknown biological entities have been detected near [station_name()], please stand-by.", "Lifesign Alert")
|
||||
else
|
||||
command_announcement.Announce("Meaty ores have been detected on collision course with the station.", "Meaty Ore Alert", new_sound = 'sound/AI/meteors.ogg')
|
||||
event_announcement.Announce("Meaty ores have been detected on collision course with the station.", "Meaty Ore Alert", new_sound = 'sound/AI/meteors.ogg')
|
||||
|
||||
/datum/event/dust/meaty/setup()
|
||||
qnty = rand(45,125)
|
||||
|
||||
@@ -10,9 +10,9 @@
|
||||
/datum/event/meteor_wave/announce()
|
||||
switch(severity)
|
||||
if(EVENT_LEVEL_MAJOR)
|
||||
command_announcement.Announce("Meteors have been detected on collision course with the station.", "Meteor Alert", new_sound = 'sound/AI/meteors.ogg')
|
||||
event_announcement.Announce("Meteors have been detected on collision course with the station.", "Meteor Alert", new_sound = 'sound/AI/meteors.ogg')
|
||||
else
|
||||
command_announcement.Announce("The station is now in a meteor shower.", "Meteor Alert")
|
||||
event_announcement.Announce("The station is now in a meteor shower.", "Meteor Alert")
|
||||
|
||||
//meteor showers are lighter and more common,
|
||||
/datum/event/meteor_wave/tick()
|
||||
@@ -25,9 +25,9 @@
|
||||
/datum/event/meteor_wave/end()
|
||||
switch(severity)
|
||||
if(EVENT_LEVEL_MAJOR)
|
||||
command_announcement.Announce("The station has cleared the meteor storm.", "Meteor Alert")
|
||||
event_announcement.Announce("The station has cleared the meteor storm.", "Meteor Alert")
|
||||
else
|
||||
command_announcement.Announce("The station has cleared the meteor shower", "Meteor Alert")
|
||||
event_announcement.Announce("The station has cleared the meteor shower", "Meteor Alert")
|
||||
|
||||
/datum/event/meteor_wave/proc/get_meteors()
|
||||
switch(severity)
|
||||
|
||||
@@ -37,7 +37,7 @@
|
||||
|
||||
/datum/event/prison_break/announce()
|
||||
if(areas && areas.len > 0)
|
||||
command_announcement.Announce("[pick("Gr3y.T1d3 virus","Malignant trojan")] detected in [station_name()] [(eventDept == "Security")? "imprisonment":"containment"] subroutines. Secure any compromised areas immediately. Station AI involvement is recommended.", "[eventDept] Alert")
|
||||
event_announcement.Announce("[pick("Gr3y.T1d3 virus","Malignant trojan")] detected in [station_name()] [(eventDept == "Security")? "imprisonment":"containment"] subroutines. Secure any compromised areas immediately. Station AI involvement is recommended.", "[eventDept] Alert")
|
||||
|
||||
/datum/event/prison_break/start()
|
||||
for(var/area/A in world)
|
||||
|
||||
@@ -21,7 +21,7 @@
|
||||
|
||||
/datum/event/radiation_storm/start()
|
||||
spawn()
|
||||
command_announcement.Announce("High levels of radiation detected near the station. Please evacuate into one of the shielded maintenance tunnels.", "Anomaly Alert", new_sound = 'sound/AI/radiation.ogg')
|
||||
event_announcement.Announce("High levels of radiation detected near the station. Please evacuate into one of the shielded maintenance tunnels.", "Anomaly Alert", new_sound = 'sound/AI/radiation.ogg')
|
||||
|
||||
for(var/area/A in world)
|
||||
if(!is_station_level(A.z) || is_safe_zone(A))
|
||||
@@ -32,7 +32,7 @@
|
||||
|
||||
sleep(600)
|
||||
|
||||
command_announcement.Announce("The station has entered the radiation belt. Please remain in a sheltered area until we have passed the radiation belt.", "Anomaly Alert")
|
||||
event_announcement.Announce("The station has entered the radiation belt. Please remain in a sheltered area until we have passed the radiation belt.", "Anomaly Alert")
|
||||
|
||||
for(var/i = 0, i < 10, i++)
|
||||
for(var/mob/living/carbon/human/H in living_mob_list)
|
||||
@@ -58,7 +58,7 @@
|
||||
|
||||
sleep(100)
|
||||
|
||||
command_announcement.Announce("The station has passed the radiation belt. Please report to medbay if you experience any unusual symptoms. Maintenance will lose all access again shortly.", "Anomaly Alert")
|
||||
event_announcement.Announce("The station has passed the radiation belt. Please report to medbay if you experience any unusual symptoms. Maintenance will lose all access again shortly.", "Anomaly Alert")
|
||||
|
||||
for(var/area/A in world)
|
||||
if(!is_station_level(A.z) || is_safe_zone(A))
|
||||
|
||||
@@ -30,7 +30,7 @@
|
||||
msg = "Contact has been lost with a combat drone wing operating out of the NSV Icarus. If any are sighted in the area, approach with caution."
|
||||
else
|
||||
msg = "Unidentified hackers have targetted a combat drone wing deployed from the NSV Icarus. If any are sighted in the area, approach with caution."
|
||||
command_announcement.Announce(msg, "Rogue drone alert")
|
||||
event_announcement.Announce(msg, "Rogue drone alert")
|
||||
|
||||
/datum/event/rogue_drone/tick()
|
||||
return
|
||||
@@ -48,6 +48,6 @@
|
||||
num_recovered++
|
||||
|
||||
if(num_recovered > drones_list.len * 0.75)
|
||||
command_announcement.Announce("Icarus drone control reports the malfunctioning wing has been recovered safely.", "Rogue drone alert")
|
||||
event_announcement.Announce("Icarus drone control reports the malfunctioning wing has been recovered safely.", "Rogue drone alert")
|
||||
else
|
||||
command_announcement.Announce("Icarus drone control registers disappointment at the loss of the drones, but the survivors have been recovered.", "Rogue drone alert")
|
||||
event_announcement.Announce("Icarus drone control registers disappointment at the loss of the drones, but the survivors have been recovered.", "Rogue drone alert")
|
||||
|
||||
@@ -37,8 +37,8 @@
|
||||
player_mind.transfer_to(S)
|
||||
player_mind.assigned_role = "Slaughter Demon"
|
||||
player_mind.special_role = SPECIAL_ROLE_SLAUGHTER_DEMON
|
||||
message_admins("[key_of_slaughter] has been made into a Slaughter Demon by an event.")
|
||||
log_game("[key_of_slaughter] was spawned as a Slaughter Demon by an event.")
|
||||
message_admins("[key_name_admin(S)] has been made into a Slaughter Demon by an event.")
|
||||
log_game("[key_name_admin(S)] was spawned as a Slaughter Demon by an event.")
|
||||
return 1
|
||||
|
||||
/datum/event/spawn_slaughter/start()
|
||||
|
||||
@@ -1,11 +1,570 @@
|
||||
/var/global/spacevines_spawned = 0
|
||||
|
||||
/datum/event/spacevine
|
||||
announceWhen = 10
|
||||
//Types of usual mutations
|
||||
#define POSITIVE 1
|
||||
#define NEGATIVE 2
|
||||
#define MINOR_NEGATIVE 3
|
||||
|
||||
/datum/event/spacevine/start()
|
||||
spacevine_infestation()
|
||||
spacevines_spawned = 1
|
||||
var/list/turfs = list() //list of all the empty floor turfs in the hallway areas
|
||||
|
||||
/datum/event/spacevine/announce()
|
||||
command_announcement.Announce("Confirmed outbreak of level 7 biohazard aboard [station_name()]. All personnel must contain the outbreak.", "Biohazard Alert", new_sound = 'sound/AI/outbreak7.ogg')
|
||||
var/obj/effect/spacevine/SV = new()
|
||||
|
||||
for(var/area/hallway/A in world)
|
||||
for(var/turf/F in A)
|
||||
if(F.Enter(SV))
|
||||
turfs += F
|
||||
|
||||
qdel(SV)
|
||||
|
||||
if(turfs.len) //Pick a turf to spawn at if we can
|
||||
var/turf/T = pick(turfs)
|
||||
new/obj/effect/spacevine_controller(T) //spawn a controller at turf
|
||||
|
||||
|
||||
/datum/spacevine_mutation
|
||||
var/name = ""
|
||||
var/severity = 1
|
||||
var/hue
|
||||
var/quality
|
||||
|
||||
/datum/spacevine_mutation/proc/add_mutation_to_vinepiece(obj/effect/spacevine/holder)
|
||||
holder.mutations |= src
|
||||
holder.color = hue
|
||||
|
||||
/datum/spacevine_mutation/proc/process_mutation(obj/effect/spacevine/holder)
|
||||
return
|
||||
|
||||
/datum/spacevine_mutation/proc/process_temperature(obj/effect/spacevine/holder, temp, volume)
|
||||
return
|
||||
|
||||
/datum/spacevine_mutation/proc/on_birth(obj/effect/spacevine/holder)
|
||||
return
|
||||
|
||||
/datum/spacevine_mutation/proc/on_grow(obj/effect/spacevine/holder)
|
||||
return
|
||||
|
||||
/datum/spacevine_mutation/proc/on_death(obj/effect/spacevine/holder)
|
||||
return
|
||||
|
||||
/datum/spacevine_mutation/proc/on_hit(obj/effect/spacevine/holder, mob/hitter, obj/item/I, expected_damage)
|
||||
. = expected_damage
|
||||
|
||||
/datum/spacevine_mutation/proc/on_cross(obj/effect/spacevine/holder, mob/crosser)
|
||||
return
|
||||
|
||||
/datum/spacevine_mutation/proc/on_chem(obj/effect/spacevine/holder, datum/reagent/R)
|
||||
return
|
||||
|
||||
/datum/spacevine_mutation/proc/on_eat(obj/effect/spacevine/holder, mob/living/eater)
|
||||
return
|
||||
|
||||
/datum/spacevine_mutation/proc/on_spread(obj/effect/spacevine/holder, turf/target)
|
||||
return
|
||||
|
||||
/datum/spacevine_mutation/proc/on_buckle(obj/effect/spacevine/holder, mob/living/buckled)
|
||||
return
|
||||
|
||||
/datum/spacevine_mutation/proc/on_explosion(severity, obj/effect/spacevine/holder)
|
||||
return
|
||||
|
||||
|
||||
/datum/spacevine_mutation/space_covering
|
||||
name = "space protective"
|
||||
hue = "#aa77aa"
|
||||
quality = POSITIVE
|
||||
|
||||
/turf/simulated/floor/vines
|
||||
color = "#aa77aa"
|
||||
icon_state = "vinefloor"
|
||||
broken_states = list()
|
||||
|
||||
|
||||
//All of this shit is useless for vines
|
||||
|
||||
/turf/simulated/floor/vines/attackby()
|
||||
return
|
||||
|
||||
/turf/simulated/floor/vines/burn_tile()
|
||||
return
|
||||
|
||||
/turf/simulated/floor/vines/break_tile()
|
||||
return
|
||||
|
||||
/turf/simulated/floor/vines/make_plating()
|
||||
return
|
||||
|
||||
/turf/simulated/floor/vines/break_tile_to_plating()
|
||||
return
|
||||
|
||||
/turf/simulated/floor/vines/ex_act(severity)
|
||||
if(severity < 3)
|
||||
ChangeTurf(baseturf)
|
||||
|
||||
/turf/simulated/floor/vines/narsie_act()
|
||||
if(prob(20))
|
||||
ChangeTurf(baseturf) //nar sie eats this shit
|
||||
|
||||
/turf/simulated/floor/vines/singularity_pull(S, current_size)
|
||||
if(current_size >= STAGE_FIVE)
|
||||
if(prob(50))
|
||||
ChangeTurf(baseturf)
|
||||
|
||||
/turf/simulated/floor/vines/ChangeTurf(turf/open/floor/T)
|
||||
. = ..()
|
||||
//Do this *after* the turf has changed as qdel in spacevines will call changeturf again if it hasn't
|
||||
for(var/obj/effect/spacevine/SV in src)
|
||||
qdel(SV)
|
||||
|
||||
/datum/spacevine_mutation/space_covering
|
||||
var/static/list/coverable_turfs
|
||||
|
||||
/datum/spacevine_mutation/space_covering/New()
|
||||
. = ..()
|
||||
if(!coverable_turfs)
|
||||
coverable_turfs = typecacheof(list(
|
||||
/turf/space
|
||||
))
|
||||
coverable_turfs -= typecacheof(list(
|
||||
/turf/space/transit
|
||||
))
|
||||
|
||||
/datum/spacevine_mutation/space_covering/on_grow(obj/effect/spacevine/holder)
|
||||
process_mutation(holder)
|
||||
|
||||
/datum/spacevine_mutation/space_covering/process_mutation(obj/effect/spacevine/holder)
|
||||
var/turf/T = get_turf(holder)
|
||||
if(is_type_in_typecache(T, coverable_turfs))
|
||||
var/currtype = T.type
|
||||
T.ChangeTurf(/turf/simulated/floor/vines)
|
||||
T.baseturf = currtype
|
||||
|
||||
/datum/spacevine_mutation/space_covering/on_death(obj/effect/spacevine/holder)
|
||||
var/turf/T = get_turf(holder)
|
||||
if(istype(T, /turf/simulated/floor/vines))
|
||||
T.ChangeTurf(T.baseturf)
|
||||
|
||||
/datum/spacevine_mutation/bluespace
|
||||
name = "bluespace"
|
||||
hue = "#3333ff"
|
||||
quality = MINOR_NEGATIVE
|
||||
|
||||
/datum/spacevine_mutation/bluespace/on_spread(obj/effect/spacevine/holder, turf/target)
|
||||
if(holder.energy > 1 && !locate(/obj/effect/spacevine) in target)
|
||||
holder.master.spawn_spacevine_piece(target, holder)
|
||||
|
||||
/datum/spacevine_mutation/light
|
||||
name = "light"
|
||||
hue = "#ffff00"
|
||||
quality = POSITIVE
|
||||
severity = 4
|
||||
|
||||
/datum/spacevine_mutation/light/on_grow(obj/effect/spacevine/holder)
|
||||
if(holder.energy)
|
||||
holder.set_light(severity)
|
||||
|
||||
/datum/spacevine_mutation/toxicity
|
||||
name = "toxic"
|
||||
hue = "#ff00ff"
|
||||
severity = 10
|
||||
quality = NEGATIVE
|
||||
|
||||
/datum/spacevine_mutation/toxicity/on_cross(obj/effect/spacevine/holder, mob/living/crosser)
|
||||
if(issilicon(crosser))
|
||||
return
|
||||
if(prob(severity) && istype(crosser) && !isvineimmune(crosser))
|
||||
to_chat(crosser, "<span class='alert'>You accidently touch the vine and feel a strange sensation.</span>")
|
||||
crosser.adjustToxLoss(5)
|
||||
|
||||
/datum/spacevine_mutation/toxicity/on_eat(obj/effect/spacevine/holder, mob/living/eater)
|
||||
if(!isvineimmune(eater))
|
||||
eater.adjustToxLoss(5)
|
||||
|
||||
/datum/spacevine_mutation/explosive //OH SHIT IT CAN CHAINREACT RUN!!!
|
||||
name = "explosive"
|
||||
hue = "#ff0000"
|
||||
quality = NEGATIVE
|
||||
severity = 2
|
||||
|
||||
/datum/spacevine_mutation/explosive/on_explosion(explosion_severity, obj/effect/spacevine/holder)
|
||||
if(explosion_severity < 3)
|
||||
qdel(holder)
|
||||
else
|
||||
. = 1
|
||||
spawn(5)
|
||||
qdel(holder)
|
||||
|
||||
/datum/spacevine_mutation/explosive/on_death(obj/effect/spacevine/holder, mob/hitter, obj/item/I)
|
||||
explosion(holder.loc, 0, 0, severity, 0, 0)
|
||||
|
||||
/datum/spacevine_mutation/fire_proof
|
||||
name = "fire proof"
|
||||
hue = "#ff8888"
|
||||
quality = MINOR_NEGATIVE
|
||||
|
||||
/datum/spacevine_mutation/fire_proof/process_temperature(obj/effect/spacevine/holder, temp, volume)
|
||||
return 1
|
||||
|
||||
/datum/spacevine_mutation/fire_proof/on_hit(obj/effect/spacevine/holder, mob/hitter, obj/item/I, expected_damage)
|
||||
if(I && I.damtype == "fire")
|
||||
. = 0
|
||||
else
|
||||
. = expected_damage
|
||||
|
||||
/datum/spacevine_mutation/vine_eating
|
||||
name = "vine eating"
|
||||
hue = "#ff7700"
|
||||
quality = MINOR_NEGATIVE
|
||||
|
||||
/datum/spacevine_mutation/vine_eating/on_spread(obj/effect/spacevine/holder, turf/target)
|
||||
var/obj/effect/spacevine/prey = locate() in target
|
||||
if(prey && !prey.mutations.Find(src)) //Eat all vines that are not of the same origin
|
||||
qdel(prey)
|
||||
|
||||
/datum/spacevine_mutation/aggressive_spread //very OP, but im out of other ideas currently
|
||||
name = "aggressive spreading"
|
||||
hue = "#333333"
|
||||
severity = 3
|
||||
quality = NEGATIVE
|
||||
|
||||
/datum/spacevine_mutation/aggressive_spread/on_spread(obj/effect/spacevine/holder, turf/target)
|
||||
target.ex_act(severity) // vine immunity handled at /mob/ex_act
|
||||
|
||||
/datum/spacevine_mutation/aggressive_spread/on_buckle(obj/effect/spacevine/holder, mob/living/buckled)
|
||||
buckled.ex_act(severity)
|
||||
|
||||
/datum/spacevine_mutation/transparency
|
||||
name = "transparent"
|
||||
hue = ""
|
||||
quality = POSITIVE
|
||||
|
||||
/datum/spacevine_mutation/transparency/on_grow(obj/effect/spacevine/holder)
|
||||
holder.set_opacity(0)
|
||||
holder.alpha = 125
|
||||
|
||||
/datum/spacevine_mutation/thorns
|
||||
name = "thorny"
|
||||
hue = "#666666"
|
||||
severity = 10
|
||||
quality = NEGATIVE
|
||||
|
||||
/datum/spacevine_mutation/thorns/on_cross(obj/effect/spacevine/holder, mob/living/crosser)
|
||||
if(prob(severity) && istype(crosser) && !isvineimmune(holder))
|
||||
var/mob/living/M = crosser
|
||||
M.adjustBruteLoss(5)
|
||||
to_chat(M, "<span class='alert'>You cut yourself on the thorny vines.</span>")
|
||||
|
||||
/datum/spacevine_mutation/thorns/on_hit(obj/effect/spacevine/holder, mob/living/hitter, obj/item/I, expected_damage)
|
||||
if(prob(severity) && istype(hitter) && !isvineimmune(holder))
|
||||
var/mob/living/M = hitter
|
||||
M.adjustBruteLoss(5)
|
||||
to_chat(M, "<span class='alert'>You cut yourself on the thorny vines.</span>")
|
||||
. = expected_damage
|
||||
|
||||
/datum/spacevine_mutation/woodening
|
||||
name = "hardened"
|
||||
hue = "#997700"
|
||||
quality = NEGATIVE
|
||||
|
||||
/datum/spacevine_mutation/woodening/on_grow(obj/effect/spacevine/holder)
|
||||
if(holder.energy)
|
||||
holder.density = 1
|
||||
holder.maxhealth = 100
|
||||
holder.health = holder.maxhealth
|
||||
|
||||
/datum/spacevine_mutation/woodening/on_hit(obj/effect/spacevine/holder, mob/living/hitter, obj/item/I, expected_damage)
|
||||
if(!is_sharp(I))
|
||||
. = expected_damage * 0.5
|
||||
else
|
||||
. = expected_damage
|
||||
|
||||
/datum/spacevine_mutation/flowering
|
||||
name = "flowering"
|
||||
hue = "#0A480D"
|
||||
quality = NEGATIVE
|
||||
severity = 10
|
||||
|
||||
/datum/spacevine_mutation/flowering/on_grow(obj/effect/spacevine/holder)
|
||||
if(holder.energy == 2 && prob(severity) && !locate(/obj/structure/alien/resin/flower_bud_enemy) in range(5,holder))
|
||||
new /obj/structure/alien/resin/flower_bud_enemy(get_turf(holder))
|
||||
|
||||
/datum/spacevine_mutation/flowering/on_cross(obj/effect/spacevine/holder, mob/living/crosser)
|
||||
if(prob(25))
|
||||
holder.entangle(crosser)
|
||||
|
||||
|
||||
// SPACE VINES (Note that this code is very similar to Biomass code)
|
||||
/obj/effect/spacevine
|
||||
name = "space vines"
|
||||
desc = "An extremely expansionistic species of vine."
|
||||
icon = 'icons/effects/spacevines.dmi'
|
||||
icon_state = "Light1"
|
||||
anchored = 1
|
||||
density = 0
|
||||
layer = MOB_LAYER + 0.8
|
||||
mouse_opacity = 2 //Clicking anywhere on the turf is good enough
|
||||
pass_flags = PASSTABLE | PASSGRILLE
|
||||
var/health = 50
|
||||
var/maxhealth = 50
|
||||
var/energy = 0
|
||||
var/obj/effect/spacevine_controller/master = null
|
||||
var/list/mutations = list()
|
||||
|
||||
/obj/effect/spacevine/New()
|
||||
..()
|
||||
color = "#ffffff"
|
||||
|
||||
/obj/effect/spacevine/examine(mob/user)
|
||||
..()
|
||||
var/text = "This one is a"
|
||||
if(mutations.len)
|
||||
for(var/A in mutations)
|
||||
var/datum/spacevine_mutation/SM = A
|
||||
text += " [SM.name]"
|
||||
else
|
||||
text += " normal"
|
||||
text += " vine."
|
||||
to_chat(user, text)
|
||||
|
||||
/obj/effect/spacevine/Destroy()
|
||||
for(var/datum/spacevine_mutation/SM in mutations)
|
||||
SM.on_death(src)
|
||||
if(master)
|
||||
master.vines -= src
|
||||
master.growth_queue -= src
|
||||
if(!master.vines.len)
|
||||
var/obj/item/seeds/kudzu/KZ = new(loc)
|
||||
KZ.mutations |= mutations
|
||||
KZ.set_potency(master.mutativeness * 10)
|
||||
KZ.set_production((master.spread_cap / initial(master.spread_cap)) * 5)
|
||||
master = null
|
||||
mutations.Cut()
|
||||
set_opacity(0)
|
||||
if(buckled_mob)
|
||||
unbuckle_mob()
|
||||
return ..()
|
||||
|
||||
/obj/effect/spacevine/proc/add_mutation(datum/spacevine_mutation/mutation)
|
||||
mutations |= mutation
|
||||
color = mutation.hue
|
||||
|
||||
/obj/effect/spacevine/proc/on_chem_effect(datum/reagent/R)
|
||||
var/override = 0
|
||||
for(var/datum/spacevine_mutation/SM in mutations)
|
||||
override += SM.on_chem(src, R)
|
||||
if(!override && istype(R, /datum/reagent/glyphosate))
|
||||
if(prob(50))
|
||||
qdel(src)
|
||||
|
||||
/obj/effect/spacevine/proc/eat(mob/eater)
|
||||
var/override = 0
|
||||
for(var/datum/spacevine_mutation/SM in mutations)
|
||||
override += SM.on_eat(src, eater)
|
||||
if(!override)
|
||||
if(prob(10))
|
||||
eater.say("Nom")
|
||||
qdel(src)
|
||||
|
||||
/obj/effect/spacevine/attackby(obj/item/weapon/W, mob/user, params)
|
||||
if (!W || !user || !W.type)
|
||||
return
|
||||
user.changeNext_move(CLICK_CD_MELEE)
|
||||
var/force = W.force
|
||||
|
||||
if(istype(W, /obj/item/weapon/scythe))
|
||||
force = force * 4
|
||||
for(var/obj/effect/spacevine/B in orange(1,src))
|
||||
B.health = health - force
|
||||
if(B.health < 1)
|
||||
qdel(B)
|
||||
|
||||
health = health - force
|
||||
|
||||
if(health < 1)
|
||||
qdel(src)
|
||||
|
||||
return
|
||||
|
||||
if(is_sharp(W))
|
||||
force = force * 4
|
||||
|
||||
if(W && W.damtype == "fire")
|
||||
force = force * 4
|
||||
|
||||
for(var/datum/spacevine_mutation/SM in mutations)
|
||||
force = SM.on_hit(src, user, W, force) //on_hit now takes override damage as arg and returns new value for other mutations to permutate further
|
||||
|
||||
health = health - force
|
||||
if(health < 1)
|
||||
qdel(src)
|
||||
|
||||
..()
|
||||
|
||||
/obj/effect/spacevine/Crossed(mob/crosser)
|
||||
if(isliving(crosser))
|
||||
for(var/datum/spacevine_mutation/SM in mutations)
|
||||
SM.on_cross(src, crosser)
|
||||
|
||||
/obj/effect/spacevine/attack_hand(mob/user)
|
||||
for(var/datum/spacevine_mutation/SM in mutations)
|
||||
SM.on_hit(src, user)
|
||||
user_unbuckle_mob(user, user)
|
||||
|
||||
/obj/effect/spacevine/attack_alien(mob/living/user)
|
||||
eat(user)
|
||||
|
||||
/obj/effect/spacevine_controller
|
||||
invisibility = 101
|
||||
var/list/obj/effect/spacevine/vines = list()
|
||||
var/list/growth_queue = list()
|
||||
var/spread_multiplier = 5
|
||||
var/spread_cap = 30
|
||||
var/list/mutations_list = list()
|
||||
var/mutativeness = 1
|
||||
|
||||
/obj/effect/spacevine_controller/New(loc, list/muts, potency, production)
|
||||
color = "#ffffff"
|
||||
spawn_spacevine_piece(loc, , muts)
|
||||
processing_objects.Add(src)
|
||||
init_subtypes(/datum/spacevine_mutation/, mutations_list)
|
||||
if(potency != null)
|
||||
mutativeness = potency / 10
|
||||
if(production != null)
|
||||
spread_cap *= production / 5
|
||||
spread_multiplier /= production / 5
|
||||
..()
|
||||
|
||||
|
||||
/obj/effect/spacevine_controller/ex_act() //only killing all vines will end this suffering
|
||||
return
|
||||
|
||||
/obj/effect/spacevine_controller/singularity_act()
|
||||
return
|
||||
|
||||
/obj/effect/spacevine_controller/singularity_pull()
|
||||
return
|
||||
|
||||
/obj/effect/spacevine_controller/Destroy()
|
||||
processing_objects.Remove(src)
|
||||
return ..()
|
||||
|
||||
/obj/effect/spacevine_controller/proc/spawn_spacevine_piece(turf/location, obj/effect/spacevine/parent, list/muts)
|
||||
var/obj/effect/spacevine/SV = new(location)
|
||||
growth_queue += SV
|
||||
vines += SV
|
||||
SV.master = src
|
||||
if(muts && muts.len)
|
||||
for(var/datum/spacevine_mutation/M in muts)
|
||||
M.add_mutation_to_vinepiece(SV)
|
||||
return
|
||||
if(parent)
|
||||
SV.mutations |= parent.mutations
|
||||
SV.color = parent.color
|
||||
if(prob(mutativeness))
|
||||
var/list/random_mutations_picked = mutations_list - SV.mutations
|
||||
if(random_mutations_picked.len)
|
||||
var/datum/spacevine_mutation/randmut = pick(random_mutations_picked)
|
||||
randmut.add_mutation_to_vinepiece(SV)
|
||||
|
||||
for(var/datum/spacevine_mutation/SM in SV.mutations)
|
||||
SM.on_birth(SV)
|
||||
|
||||
/obj/effect/spacevine_controller/process()
|
||||
if(!vines)
|
||||
qdel(src) //space vines exterminated. Remove the controller
|
||||
return
|
||||
if(!growth_queue)
|
||||
qdel(src) //Sanity check
|
||||
return
|
||||
|
||||
var/length = 0
|
||||
|
||||
length = min( spread_cap , max( 1 , vines.len / spread_multiplier ) )
|
||||
var/i = 0
|
||||
var/list/obj/effect/spacevine/queue_end = list()
|
||||
|
||||
for(var/obj/effect/spacevine/SV in growth_queue)
|
||||
if(qdeleted(SV))
|
||||
continue
|
||||
i++
|
||||
queue_end += SV
|
||||
growth_queue -= SV
|
||||
for(var/datum/spacevine_mutation/SM in SV.mutations)
|
||||
SM.process_mutation(SV)
|
||||
if(SV.energy < 2) //If tile isn't fully grown
|
||||
if(prob(20))
|
||||
SV.grow()
|
||||
else //If tile is fully grown
|
||||
SV.entangle_mob()
|
||||
|
||||
//if(prob(25))
|
||||
SV.spread()
|
||||
if(i >= length)
|
||||
break
|
||||
|
||||
growth_queue = growth_queue + queue_end
|
||||
|
||||
/obj/effect/spacevine/proc/grow()
|
||||
if(!energy)
|
||||
icon_state = pick("Med1", "Med2", "Med3")
|
||||
energy = 1
|
||||
set_opacity(1)
|
||||
else
|
||||
icon_state = pick("Hvy1", "Hvy2", "Hvy3")
|
||||
energy = 2
|
||||
|
||||
for(var/datum/spacevine_mutation/SM in mutations)
|
||||
SM.on_grow(src)
|
||||
|
||||
/obj/effect/spacevine/proc/entangle_mob()
|
||||
if(!buckled_mob && prob(25))
|
||||
for(var/mob/living/V in loc)
|
||||
entangle(V)
|
||||
if(has_buckled_mobs())
|
||||
break //only capture one mob at a time
|
||||
|
||||
|
||||
/obj/effect/spacevine/proc/entangle(mob/living/V)
|
||||
if(!V || isvineimmune(V))
|
||||
return
|
||||
for(var/datum/spacevine_mutation/SM in mutations)
|
||||
SM.on_buckle(src, V)
|
||||
if((V.stat != DEAD) && (V.buckled != src)) //not dead or captured
|
||||
to_chat(V, "<span class='danger'>The vines [pick("wind", "tangle", "tighten")] around you!</span>")
|
||||
buckle_mob(V, 1)
|
||||
|
||||
/obj/effect/spacevine/proc/spread()
|
||||
var/direction = pick(cardinal)
|
||||
var/turf/stepturf = get_step(src,direction)
|
||||
for(var/datum/spacevine_mutation/SM in mutations)
|
||||
SM.on_spread(src, stepturf)
|
||||
stepturf = get_step(src,direction) //in case turf changes, to make sure no runtimes happen
|
||||
if(!locate(/obj/effect/spacevine, stepturf))
|
||||
if(stepturf.Enter(src))
|
||||
if(master)
|
||||
master.spawn_spacevine_piece(stepturf, src)
|
||||
|
||||
/obj/effect/spacevine/ex_act(severity)
|
||||
var/i
|
||||
for(var/datum/spacevine_mutation/SM in mutations)
|
||||
i += SM.on_explosion(severity, src)
|
||||
if(!i && prob(100/severity))
|
||||
qdel(src)
|
||||
|
||||
/obj/effect/spacevine/temperature_expose(null, temp, volume)
|
||||
var/override = 0
|
||||
for(var/datum/spacevine_mutation/SM in mutations)
|
||||
override += SM.process_temperature(src, temp, volume)
|
||||
if(!override)
|
||||
qdel(src)
|
||||
|
||||
/obj/effect/spacevine/CanPass(atom/movable/mover, turf/target, height=0)
|
||||
if(isvineimmune(mover))
|
||||
. = TRUE
|
||||
else
|
||||
. = ..()
|
||||
|
||||
/proc/isvineimmune(atom/A)
|
||||
. = FALSE
|
||||
if(isliving(A))
|
||||
var/mob/living/M = A
|
||||
if(("vines" in M.faction) || ("plants" in M.faction))
|
||||
. = TRUE
|
||||
@@ -10,7 +10,7 @@
|
||||
sent_spiders_to_station = 1
|
||||
|
||||
/datum/event/spider_infestation/announce()
|
||||
command_announcement.Announce("Unidentified lifesigns detected coming aboard [station_name()]. Secure any exterior access, including ducting and ventilation.", "Lifesign Alert", new_sound = 'sound/AI/aliens.ogg')
|
||||
event_announcement.Announce("Unidentified lifesigns detected coming aboard [station_name()]. Secure any exterior access, including ducting and ventilation.", "Lifesign Alert", new_sound = 'sound/AI/aliens.ogg')
|
||||
|
||||
/datum/event/spider_infestation/start()
|
||||
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
var/obj/effect/tear/TE
|
||||
|
||||
/datum/event/tear/announce()
|
||||
command_announcement.Announce("A tear in the fabric of space and time has opened. Expected location: [impact_area.name].", "Anomaly Alert")
|
||||
event_announcement.Announce("A tear in the fabric of space and time has opened. Expected location: [impact_area.name].", "Anomaly Alert")
|
||||
|
||||
/datum/event/tear/start()
|
||||
var/turf/T = pick(get_area_turfs(impact_area))
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
var/list/vents = list()
|
||||
|
||||
/datum/event/vent_clog/announce()
|
||||
command_announcement.Announce("The scrubbers network is experiencing a backpressure surge. Some ejection of contents may occur.", "Atmospherics alert")
|
||||
event_announcement.Announce("The scrubbers network is experiencing a backpressure surge. Some ejection of contents may occur.", "Atmospherics alert")
|
||||
|
||||
/datum/event/vent_clog/setup()
|
||||
endWhen = rand(25, 100)
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
endWhen = announceWhen + 1
|
||||
|
||||
/datum/event/wallrot/announce()
|
||||
command_announcement.Announce("Harmful fungi detected on station. Station structures may be contaminated.", "Biohazard Alert")
|
||||
event_announcement.Announce("Harmful fungi detected on station. Station structures may be contaminated.", "Biohazard Alert")
|
||||
|
||||
/datum/event/wallrot/start()
|
||||
spawn()
|
||||
|
||||
@@ -21,7 +21,7 @@
|
||||
wormholes += new /obj/effect/portal/wormhole(T, null, null, -1)
|
||||
|
||||
/datum/event/wormholes/announce()
|
||||
command_announcement.Announce("Space-time anomalies detected on the station. There is no additional data.", "Anomaly Alert", new_sound = 'sound/AI/spanomalies.ogg')
|
||||
event_announcement.Announce("Space-time anomalies detected on the station. There is no additional data.", "Anomaly Alert", new_sound = 'sound/AI/spanomalies.ogg')
|
||||
|
||||
/datum/event/wormholes/tick()
|
||||
if(activeFor % shift_frequency == 0)
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
|
||||
var/global/list/fish_items_list = list("goldfish" = /obj/item/weapon/fish/goldfish,
|
||||
"clownfish" = /obj/item/weapon/bananapeel/clownfish,
|
||||
"clownfish" = /obj/item/weapon/grown/bananapeel/clownfish,
|
||||
"shark" = /obj/item/weapon/fish/shark,
|
||||
"baby space carp" = /obj/item/weapon/fish/babycarp,
|
||||
"catfish" = /obj/item/weapon/fish/catfish,
|
||||
@@ -208,7 +208,7 @@ var/global/list/fish_items_list = list("goldfish" = /obj/item/weapon/fish/goldfi
|
||||
..()
|
||||
|
||||
|
||||
/obj/item/weapon/bananapeel/clownfish
|
||||
/obj/item/weapon/grown/bananapeel/clownfish
|
||||
name = "clown fish"
|
||||
desc = "Even underwater, you cannot escape HONKing."
|
||||
icon = 'icons/obj/fish_items.dmi'
|
||||
|
||||
@@ -213,12 +213,7 @@
|
||||
for(var/i = 1, i <= slots.len, i++)
|
||||
var/obj/item/O = slots[i]
|
||||
if(istype(O, recipe.ingredients[i]))
|
||||
if(istype(O, /obj/item/weapon/reagent_containers/food/snacks/grown))
|
||||
var/obj/item/weapon/reagent_containers/food/snacks/grown/G = O
|
||||
if(G.seed && G.seed.kitchen_tag == recipe.tags[i])
|
||||
number_matches++
|
||||
else
|
||||
number_matches++
|
||||
number_matches++
|
||||
if(number_matches == 3)
|
||||
return recipe
|
||||
return null
|
||||
|
||||
@@ -3,7 +3,6 @@
|
||||
var/name = ""
|
||||
var/description = ""
|
||||
var/list/ingredients[3]
|
||||
var/list/tags[3]
|
||||
var/datum/reagent/result = null
|
||||
|
||||
|
||||
@@ -12,12 +11,10 @@
|
||||
name = "Example"
|
||||
description = "This is an example."
|
||||
ingredients = list(thing_1, thing_2, thing_3)
|
||||
tags = list(null, "tag_2", null)
|
||||
result = "water"
|
||||
|
||||
The ingredients list must have 3 non-null entries.
|
||||
The tags list must have 3 entries, using null where a tag is unused.
|
||||
Failing to ensure both lists have EXACTLY 3 entries (unless the system is updated in the future to use a different number) will result in runtimes.
|
||||
Failing to ensure the list has EXACTLY 3 entries (unless the system is updated in the future to use a different number) will result in runtimes.
|
||||
There is no excuse to do this wrong now that there is an example for you. --FalseIncarnate
|
||||
*/
|
||||
|
||||
@@ -25,62 +22,55 @@ There is no excuse to do this wrong now that there is an example for you. --Fals
|
||||
/datum/bottler_recipe/Paradise_Punch
|
||||
name = "Paradise Punch"
|
||||
description = "Tastes just how you'd think Paradise would if you could bottle it."
|
||||
ingredients = list(/obj/item/weapon/reagent_containers/food/snacks/grown,
|
||||
/obj/item/weapon/reagent_containers/food/snacks/grown,
|
||||
/obj/item/weapon/reagent_containers/food/snacks/grown)
|
||||
tags = list("grapes", "banana", "cherries")
|
||||
ingredients = list(/obj/item/weapon/reagent_containers/food/snacks/grown/grapes,
|
||||
/obj/item/weapon/reagent_containers/food/snacks/grown/banana,
|
||||
/obj/item/weapon/reagent_containers/food/snacks/grown/cherries)
|
||||
result = "paradise_punch"
|
||||
|
||||
/datum/bottler_recipe/Applepocalypse
|
||||
name = "Apple-pocalypse"
|
||||
description = "If doomsday came in fruit form, it'd probably be apples."
|
||||
ingredients = list(/obj/item/weapon/reagent_containers/food/snacks/grown,
|
||||
/obj/item/weapon/reagent_containers/food/snacks/grown,
|
||||
/obj/item/weapon/reagent_containers/food/snacks/grown)
|
||||
tags = list("apple", "apple", "apple")
|
||||
ingredients = list(/obj/item/weapon/reagent_containers/food/snacks/grown/apple,
|
||||
/obj/item/weapon/reagent_containers/food/snacks/grown/apple,
|
||||
/obj/item/weapon/reagent_containers/food/snacks/grown/apple)
|
||||
result = "apple-pocalypse"
|
||||
|
||||
/datum/bottler_recipe/Berry_Banned
|
||||
name = "Berry Banned"
|
||||
description = "Reason for ban: Excessive Flavor."
|
||||
ingredients = list(/obj/item/weapon/reagent_containers/food/snacks/grown,
|
||||
/obj/item/weapon/reagent_containers/food/snacks/grown,
|
||||
/obj/item/weapon/reagent_containers/food/snacks/grown)
|
||||
tags = list("berries", "berries", "berries")
|
||||
ingredients = list(/obj/item/weapon/reagent_containers/food/snacks/grown/berries,
|
||||
/obj/item/weapon/reagent_containers/food/snacks/grown/berries,
|
||||
/obj/item/weapon/reagent_containers/food/snacks/grown/berries)
|
||||
result = "berry_banned"
|
||||
|
||||
/datum/bottler_recipe/Berry_Banned2
|
||||
name = "Berry Banned"
|
||||
description = "Reason for ban: Excessive Flavor."
|
||||
ingredients = list(/obj/item/weapon/reagent_containers/food/snacks/grown,
|
||||
/obj/item/weapon/reagent_containers/food/snacks/grown,
|
||||
/obj/item/weapon/reagent_containers/food/snacks/grown)
|
||||
tags = list("poisonberries", "poisonberries", "poisonberries")
|
||||
ingredients = list(/obj/item/weapon/reagent_containers/food/snacks/grown/berries/poison,
|
||||
/obj/item/weapon/reagent_containers/food/snacks/grown/berries/poison,
|
||||
/obj/item/weapon/reagent_containers/food/snacks/grown/berries/poison)
|
||||
result = "berry_banned2"
|
||||
|
||||
/datum/bottler_recipe/Blackeye_Brew
|
||||
name = "Blackeye Brew"
|
||||
description = "Creamy, smooth flavor, just like the bald heads of the masses. Supposedly aged for 30 years."
|
||||
ingredients = list(/obj/item/weapon/reagent_containers/food/drinks/cans/cola,
|
||||
/obj/item/weapon/reagent_containers/food/snacks/grown,
|
||||
/obj/item/weapon/reagent_containers/food/snacks/grown/sugarcane,
|
||||
/obj/item/weapon/reagent_containers/food/snacks/icecream)
|
||||
tags = list(null, "sugarcane", null)
|
||||
result = "blackeye_brew"
|
||||
|
||||
/datum/bottler_recipe/Grape_Granade
|
||||
name = "Grape Granade"
|
||||
description = "Exploding with grape flavor and a favorite among ERT members system-wide."
|
||||
ingredients = list(/obj/item/weapon/reagent_containers/food/drinks/cans/grape_juice,
|
||||
/obj/item/weapon/reagent_containers/food/snacks/grown,
|
||||
/obj/item/weapon/reagent_containers/food/snacks/grown/grapes,
|
||||
/obj/item/device/flash)
|
||||
tags = list(null, "grapes", null)
|
||||
result = "grape_granade"
|
||||
|
||||
/datum/bottler_recipe/Meteor_Malt
|
||||
name = "Meteor Malt"
|
||||
description = "Soft drinks have been detected on collision course with your tastebuds."
|
||||
ingredients = list(/obj/item/weapon/ore,
|
||||
/obj/item/weapon/reagent_containers/food/snacks/grown,
|
||||
/obj/item/weapon/reagent_containers/food/snacks/grown/wheat,
|
||||
/obj/item/weapon/ore)
|
||||
tags = list(null, "wheat", null)
|
||||
result = "meteor_malt"
|
||||
|
||||
@@ -61,7 +61,7 @@
|
||||
to_chat(user, "<span class='warning'> [src] is full.</span>")
|
||||
return
|
||||
|
||||
var/trans = target.reagents.trans_to(src, target:amount_per_transfer_from_this)
|
||||
var/trans = target.reagents.trans_to(src, amount_per_transfer_from_this)
|
||||
to_chat(user, "<span class='notice'> You fill [src] with [trans] units of the contents of [target].</span>")
|
||||
|
||||
else if(target.is_open_container()) //Something like a glass. Player probably wants to transfer TO it.
|
||||
@@ -331,4 +331,11 @@
|
||||
name = "cup"
|
||||
desc = "A cup with the british flag emblazoned on it."
|
||||
icon_state = "britcup"
|
||||
volume = 30
|
||||
volume = 30
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/drinks/mushroom_bowl
|
||||
name = "mushroom bowl"
|
||||
desc = "A bowl made out of mushrooms. Not food, though it might have contained some at some point."
|
||||
icon = 'icons/obj/lavaland/ash_flora.dmi'
|
||||
icon_state = "mushroom_bowl"
|
||||
w_class = 2
|
||||
@@ -5,7 +5,8 @@
|
||||
possible_transfer_amounts = null
|
||||
volume = 50 //Sets the default container amount for all food items.
|
||||
var/filling_color = "#FFFFFF" //Used by sandwiches.
|
||||
var/bitesize = 1
|
||||
var/junkiness = 0 //for junk food. used to lower human satiety.
|
||||
var/bitesize = 2
|
||||
var/consume_sound = 'sound/items/eatfood.ogg'
|
||||
var/apply_type = INGEST
|
||||
var/apply_method = "swallow"
|
||||
@@ -15,5 +16,5 @@
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/New()
|
||||
..()
|
||||
pixel_x = rand(-10, 10) //Randomizes postion
|
||||
pixel_y = rand(-10, 10)
|
||||
pixel_x = rand(-5, 5) //Randomizes postion
|
||||
pixel_y = rand(-5, 5)
|
||||
@@ -22,7 +22,6 @@
|
||||
desc = "Such sweet, fattening food."
|
||||
icon_state = "chocolatebar"
|
||||
filling_color = "#7D5F46"
|
||||
bitesize = 2
|
||||
list_reagents = list("nutriment" = 2, "chocolate" = 4)
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/snacks/candy/caramel
|
||||
@@ -30,7 +29,6 @@
|
||||
desc = "Chewy and dense, yet it practically melts in your mouth!"
|
||||
icon_state = "caramel"
|
||||
filling_color = "#DB944D"
|
||||
bitesize = 2
|
||||
list_reagents = list("cream" = 2, "sugar" = 2)
|
||||
|
||||
|
||||
@@ -39,7 +37,6 @@
|
||||
desc = "A hard, brittle candy with a distinctive taste."
|
||||
icon_state = "toffee"
|
||||
filling_color = "#7D5F46"
|
||||
bitesize = 2
|
||||
list_reagents = list("nutriment" = 3, "sugar" = 3)
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/snacks/candy/nougat
|
||||
@@ -47,7 +44,6 @@
|
||||
desc = "A soft, chewy candy commonly found in candybars."
|
||||
icon_state = "nougat"
|
||||
filling_color = "#7D5F46"
|
||||
bitesize = 2
|
||||
list_reagents = list("nutriment" = 3, "sugar" = 3)
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/snacks/candy/taffy
|
||||
@@ -55,7 +51,6 @@
|
||||
desc = "Old fashioned saltwater taffy. Chewy!"
|
||||
icon_state = "candy1"
|
||||
filling_color = "#7D5F46"
|
||||
bitesize = 2
|
||||
list_reagents = list("nutriment" = 3, "sugar" = 3)
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/snacks/candy/taffy/New()
|
||||
@@ -111,7 +106,6 @@
|
||||
desc = "It's a handful of candy corn. Cannot be stored in a detective's hat, alas."
|
||||
icon_state = "candycorn"
|
||||
filling_color = "#FFFCB0"
|
||||
bitesize = 2
|
||||
list_reagents = list("nutriment" = 4, "sugar" = 2)
|
||||
|
||||
// ***********************************************************
|
||||
@@ -134,14 +128,15 @@
|
||||
trash = /obj/item/trash/candy
|
||||
filling_color = "#7D5F46"
|
||||
bitesize = 3
|
||||
list_reagents = list("nutriment" = 2, "chocolate" = 5)
|
||||
junkiness = 25
|
||||
list_reagents = list("nutriment" = 1, "chocolate" = 1)
|
||||
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/snacks/candy/candycane
|
||||
name = "candy cane"
|
||||
desc = "A festive mint candy cane."
|
||||
icon_state = "candycane"
|
||||
filling_color = "#F2F2F2"
|
||||
bitesize = 2
|
||||
list_reagents = list("minttoxin" = 1, "sugar" = 5)
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/snacks/candy/gummybear
|
||||
@@ -181,7 +176,6 @@
|
||||
desc = "Not legal tender. Tasty though."
|
||||
icon_state = "candy_cash"
|
||||
filling_color = "#302000"
|
||||
bitesize = 2
|
||||
list_reagents = list("nutriment" = 2, "chocolate" = 4)
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/snacks/candy/coin
|
||||
@@ -511,32 +505,35 @@
|
||||
// Candybar Flavors
|
||||
// ***********************************************************
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/snacks/candy/candybar/rice
|
||||
/obj/item/weapon/reagent_containers/food/snacks/candy/confectionery
|
||||
list_reagents = list("nutriment" = 1, "chocolate" = 1)
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/snacks/candy/confectionery/rice
|
||||
name = "Asteroid Crunch Bar"
|
||||
desc = "Crunchy rice deposits in delicious chocolate! A favorite of miners galaxy-wide."
|
||||
icon_state = "asteroidcrunch"
|
||||
trash = /obj/item/trash/candy
|
||||
filling_color = "#7D5F46"
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/snacks/candy/candybar/toffee
|
||||
/obj/item/weapon/reagent_containers/food/snacks/candy/confectionery/toffee
|
||||
name = "Yum-baton Bar"
|
||||
desc = "Chocolate and toffee in the shape of a baton. Security sure knows how to pound these down!"
|
||||
icon_state = "yumbaton"
|
||||
filling_color = "#7D5F46"
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/snacks/candy/candybar/caramel
|
||||
/obj/item/weapon/reagent_containers/food/snacks/candy/confectionery/caramel
|
||||
name = "Malper Bar"
|
||||
desc = "A chocolate syringe filled with a caramel injection. Just what the doctor ordered!"
|
||||
icon_state = "malper"
|
||||
filling_color = "#7D5F46"
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/snacks/candy/candybar/caramel_nougat
|
||||
/obj/item/weapon/reagent_containers/food/snacks/candy/confectionery/caramel_nougat
|
||||
name = "Toxins Test Bar"
|
||||
desc = "An explosive combination of chocolate, caramel, and nougat. Research has never been so tasty!"
|
||||
icon_state = "toxinstest"
|
||||
filling_color = "#7D5F46"
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/snacks/candy/candybar/nougat
|
||||
/obj/item/weapon/reagent_containers/food/snacks/candy/confectionery/nougat
|
||||
name = "Tool-erone Bar"
|
||||
desc = "Chocolate-covered nougat, shaped like a wrench. Great for an engineer on the go!"
|
||||
icon_state = "toolerone"
|
||||
|
||||
@@ -69,6 +69,7 @@
|
||||
icon_state = "breadslice"
|
||||
var/baseicon = "sandwich"
|
||||
var/basename = "sandwich"
|
||||
bitesize = 4
|
||||
var/top = 1 //Do we have a top?
|
||||
var/obj/item/toptype
|
||||
var/add_overlays = 1 //Do we stack?
|
||||
@@ -76,7 +77,6 @@
|
||||
var/sandwich_limit = 40
|
||||
var/fullycustom = 0
|
||||
trash = /obj/item/trash/plate
|
||||
bitesize = 2
|
||||
var/list/ingredients = list()
|
||||
list_reagents = list("nutriment" = 8)
|
||||
|
||||
|
||||
@@ -44,4 +44,12 @@
|
||||
/obj/item/weapon/reagent_containers/food/snacks/meat/ham
|
||||
name = "Ham"
|
||||
desc = "Taste like bacon."
|
||||
list_reagents = list("protein" = 3, "porktonium" = 10)
|
||||
list_reagents = list("protein" = 3, "porktonium" = 10)
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/snacks/meat/meatwheat
|
||||
name = "meatwheat clump"
|
||||
desc = "This doesn't look like meat, but your standards aren't <i>that</i> high to begin with."
|
||||
list_reagents = list("nutriment" = 3, "vitamin" = 2, "blood" = 5)
|
||||
filling_color = rgb(150, 0, 0)
|
||||
icon_state = "meatwheat_clump"
|
||||
bitesize = 4
|
||||
@@ -6,7 +6,7 @@
|
||||
icon_state = "fishfillet"
|
||||
filling_color = "#FFDEFE"
|
||||
bitesize = 6
|
||||
list_reagents = list("protein" = 3, "carpotoxin" = 3)
|
||||
list_reagents = list("protein" = 3, "carpotoxin" = 2, "vitamin" = 2)
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/snacks/salmonmeat
|
||||
name = "raw salmon"
|
||||
@@ -14,8 +14,8 @@
|
||||
icon = 'icons/obj/food/seafood.dmi'
|
||||
icon_state = "fishfillet"
|
||||
filling_color = "#FFDEFE"
|
||||
bitesize = 3
|
||||
list_reagents = list("protein" = 3)
|
||||
bitesize = 6
|
||||
list_reagents = list("protein" = 3, "vitamin" = 2)
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/snacks/salmonsteak
|
||||
name = "Salmon steak"
|
||||
@@ -25,7 +25,7 @@
|
||||
trash = /obj/item/trash/plate
|
||||
filling_color = "#7A3D11"
|
||||
bitesize = 3
|
||||
list_reagents = list("nutriment" = 4, "sodiumchloride" = 1, "blackpepper" = 1)
|
||||
list_reagents = list("nutriment" = 4, "vitamin" = 2)
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/snacks/catfishmeat
|
||||
name = "raw catfish"
|
||||
@@ -33,8 +33,8 @@
|
||||
icon = 'icons/obj/food/seafood.dmi'
|
||||
icon_state = "fishfillet"
|
||||
filling_color = "#FFDEFE"
|
||||
bitesize = 3
|
||||
list_reagents = list("protein" = 3)
|
||||
bitesize = 6
|
||||
list_reagents = list("protein" = 3, "vitamin" = 2)
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/snacks/fishfingers
|
||||
name = "Fish Fingers"
|
||||
@@ -42,8 +42,8 @@
|
||||
icon = 'icons/obj/food/seafood.dmi'
|
||||
icon_state = "fishfingers"
|
||||
filling_color = "#FFDEFE"
|
||||
bitesize = 3
|
||||
list_reagents = list("nutriment" = 4, "carpotoxin" = 3)
|
||||
bitesize = 1
|
||||
list_reagents = list("nutriment" = 4)
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/snacks/fishburger
|
||||
name = "Fillet -o- Carp Sandwich"
|
||||
@@ -52,7 +52,7 @@
|
||||
icon_state = "fishburger"
|
||||
filling_color = "#FFDEFE"
|
||||
bitesize = 3
|
||||
list_reagents = list("nutriment" = 6, "carpotoxin" = 3)
|
||||
list_reagents = list("nutriment" = 6, "vitamin" = 1)
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/snacks/cubancarp
|
||||
name = "Cuban Carp"
|
||||
@@ -62,7 +62,7 @@
|
||||
trash = /obj/item/trash/plate
|
||||
filling_color = "#E9ADFF"
|
||||
bitesize = 3
|
||||
list_reagents = list("nutriment" = 6, "carpotoxin" = 3, "capsaicin" = 3)
|
||||
list_reagents = list("nutriment" = 6, "capsaicin" = 1)
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/snacks/fishandchips
|
||||
name = "Fish and Chips"
|
||||
@@ -71,7 +71,7 @@
|
||||
icon_state = "fishandchips"
|
||||
filling_color = "#E3D796"
|
||||
bitesize = 3
|
||||
list_reagents = list("nutriment" = 6, "carpotoxin" = 3)
|
||||
list_reagents = list("nutriment" = 6)
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/snacks/sashimi
|
||||
name = "carp sashimi"
|
||||
@@ -79,7 +79,7 @@
|
||||
icon = 'icons/obj/food/seafood.dmi'
|
||||
icon_state = "sashimi"
|
||||
bitesize = 3
|
||||
list_reagents = list("nutriment" = 6, "toxin" = 5)
|
||||
list_reagents = list("nutriment" = 6, "capsaicin" = 5)
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/snacks/fried_shrimp
|
||||
name = "fried shrimp"
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -48,11 +48,7 @@
|
||||
return 0
|
||||
for(var/Type in subtypesof(/datum/deepfryer_special))
|
||||
var/datum/deepfryer_special/P = new Type()
|
||||
if(istype(I, /obj/item/weapon/reagent_containers/food/snacks/grown))
|
||||
var/obj/item/weapon/reagent_containers/food/snacks/grown/G = I
|
||||
if(G.seed.kitchen_tag != P.input)
|
||||
continue
|
||||
else if(!istype(I, P.input))
|
||||
if(!istype(I, P.input))
|
||||
continue
|
||||
return P
|
||||
return 0
|
||||
|
||||
@@ -12,8 +12,12 @@
|
||||
var/locked = 0 //Used to prevent mobs from breaking the feedin anim
|
||||
|
||||
var/gib_throw_dir = WEST // Direction to spit meat and gibs in. Defaults to west.
|
||||
var/gibtime = 40 // Time from starting until meat appears
|
||||
|
||||
var/gibtime = 40 // Time from starting until meat appears
|
||||
var/animation_delay = GIBBER_ANIMATION_DELAY
|
||||
|
||||
// For hiding gibs, making an even more devious trap (invisible autogibbers)
|
||||
var/stealthmode = FALSE
|
||||
var/list/victims = list()
|
||||
|
||||
use_power = 1
|
||||
@@ -110,25 +114,25 @@
|
||||
|
||||
/obj/machinery/gibber/proc/move_into_gibber(var/mob/user,var/mob/living/victim)
|
||||
if(occupant)
|
||||
to_chat(user, "<span class='danger'>The gibber is full, empty it first!</span>")
|
||||
to_chat(user, "<span class='danger'>The [src] is full, empty it first!</span>")
|
||||
return
|
||||
|
||||
if(operating)
|
||||
to_chat(user, "<span class='danger'>The gibber is locked and running, wait for it to finish.</span>")
|
||||
to_chat(user, "<span class='danger'>The [src] is locked and running, wait for it to finish.</span>")
|
||||
return
|
||||
|
||||
if(!ishuman(victim) || issmall(victim))
|
||||
to_chat(user, "<span class='danger'>This is not suitable for the gibber!</span>")
|
||||
to_chat(user, "<span class='danger'>This is not suitable for the [src]]!</span>")
|
||||
return
|
||||
|
||||
if(victim.abiotic(1))
|
||||
to_chat(user, "<span class='danger'>Subject may not have abiotic items on.</span>")
|
||||
return
|
||||
|
||||
user.visible_message("<span class='danger'>[user] starts to put [victim] into the gibber!</span>")
|
||||
user.visible_message("<span class='danger'>[user] starts to put [victim] into the [src]!</span>")
|
||||
add_fingerprint(user)
|
||||
if(do_after(user, 30, target = victim) && user.Adjacent(src) && victim.Adjacent(user) && !occupant)
|
||||
user.visible_message("<span class='danger'>[user] stuffs [victim] into the gibber!</span>")
|
||||
user.visible_message("<span class='danger'>[user] stuffs [victim] into the [src]]!</span>")
|
||||
|
||||
victim.forceMove(src)
|
||||
occupant = victim
|
||||
@@ -195,16 +199,16 @@
|
||||
holder2.layer = MOB_LAYER + 0.1 //3D, it's above the mob, rest of the gibber is behind
|
||||
holder2.anchored = 1
|
||||
|
||||
animate(holder, pixel_y = 16, time = GIBBER_ANIMATION_DELAY) //animate going down
|
||||
animate(holder, pixel_y = 16, time = animation_delay) //animate going down
|
||||
|
||||
sleep(GIBBER_ANIMATION_DELAY)
|
||||
sleep(animation_delay)
|
||||
|
||||
holder.overlays -= feedee //reset static icon
|
||||
feedee.icon += icon('icons/obj/kitchen.dmi', "footicon") //this is some byond magic; += to the icon var with a black and white image will mask it
|
||||
holder.overlays += feedee
|
||||
animate(holder, pixel_y = -3, time = GIBBER_ANIMATION_DELAY) //animate going down further
|
||||
animate(holder, pixel_y = -3, time = animation_delay) //animate going down further
|
||||
|
||||
sleep(GIBBER_ANIMATION_DELAY) //time everything right, animate doesn't prevent proc from continuing
|
||||
sleep(animation_delay) //time everything right, animate doesn't prevent proc from continuing
|
||||
|
||||
qdel(holder) //get rid of holder object
|
||||
qdel(holder2) //get rid of holder object
|
||||
@@ -231,7 +235,7 @@
|
||||
operating = 1
|
||||
update_icon()
|
||||
var/offset = prob(50) ? -2 : 2
|
||||
animate(src, pixel_x = pixel_x + offset, time = 0.2, loop = 200) //start shaking
|
||||
animate(src, pixel_x = pixel_x + offset, time = 0.2, loop = gibtime * 5) //start shaking
|
||||
|
||||
var/slab_name = occupant.name
|
||||
var/slab_count = 3
|
||||
@@ -254,8 +258,8 @@
|
||||
new /obj/effect/decal/cleanable/blood/gibs(src)
|
||||
|
||||
if(!UserOverride)
|
||||
occupant.attack_log += "\[[time_stamp()]\] Was gibbed by [key_name(user)]" //One shall not simply gib a mob unnoticed!
|
||||
user.attack_log += "\[[time_stamp()]\] Gibbed [key_name(occupant)]"
|
||||
occupant.create_attack_log("Was gibbed by [key_name(user)]") //One shall not simply gib a mob unnoticed!)
|
||||
user.create_attack_log("Gibbed [key_name(occupant)]")
|
||||
|
||||
if(occupant.ckey)
|
||||
msg_admin_attack("[key_name_admin(user)] gibbed [key_name_admin(occupant)]")
|
||||
@@ -266,11 +270,10 @@
|
||||
occupant.LAssailant = user
|
||||
|
||||
else //this looks ugly but it's better than a copy-pasted startgibbing proc override
|
||||
occupant.attack_log += "\[[time_stamp()]\] Was gibbed by <b>an autogibber (\the [src])</b>"
|
||||
occupant.create_attack_log("Was gibbed by <b>an autogibber (\the [src])</b>")
|
||||
|
||||
occupant.emote("scream")
|
||||
playsound(get_turf(src), 'sound/goonstation/effects/gib.ogg', 50, 1)
|
||||
|
||||
victims += "\[[time_stamp()]\] [occupant.name] ([occupant.ckey]) killed by [UserOverride ? "Autogibbing" : "[user] ([user.ckey])"]" //have to do this before ghostizing
|
||||
occupant.death(1)
|
||||
occupant.ghostize()
|
||||
@@ -281,15 +284,20 @@
|
||||
playsound(get_turf(src), 'sound/effects/splat.ogg', 50, 1)
|
||||
operating = 0
|
||||
|
||||
for(var/obj/item/thing in contents) //Meat is spawned inside the gibber and thrown out afterwards.
|
||||
thing.loc = get_turf(thing) // Drop it onto the turf for throwing.
|
||||
thing.throw_at(get_edge_target_turf(src,gib_throw_dir),rand(1,5),15) // Being pelted with bits of meat and bone would hurt.
|
||||
sleep(1)
|
||||
if(stealthmode)
|
||||
for(var/atom/movable/AM in contents)
|
||||
qdel(AM)
|
||||
sleep(1)
|
||||
else
|
||||
for(var/obj/item/thing in contents) //Meat is spawned inside the gibber and thrown out afterwards.
|
||||
thing.loc = get_turf(thing) // Drop it onto the turf for throwing.
|
||||
thing.throw_at(get_edge_target_turf(src,gib_throw_dir),rand(1,5),15) // Being pelted with bits of meat and bone would hurt.
|
||||
sleep(1)
|
||||
|
||||
for(var/obj/effect/gibs in contents) //throw out the gibs too
|
||||
gibs.loc = get_turf(gibs) //drop onto turf for throwing
|
||||
gibs.throw_at(get_edge_target_turf(src,gib_throw_dir),rand(1,5),15)
|
||||
sleep(1)
|
||||
for(var/obj/effect/gibs in contents) //throw out the gibs too
|
||||
gibs.loc = get_turf(gibs) //drop onto turf for throwing
|
||||
gibs.throw_at(get_edge_target_turf(src,gib_throw_dir),rand(1,5),15)
|
||||
sleep(1)
|
||||
|
||||
pixel_x = initial(pixel_x) //return to it's spot after shaking
|
||||
operating = 0
|
||||
@@ -306,6 +314,8 @@
|
||||
var/acceptdir = NORTH
|
||||
var/lastacceptdir = NORTH
|
||||
var/turf/lturf
|
||||
var/consumption_delay = 3 SECONDS
|
||||
var/list/victim_targets = list()
|
||||
|
||||
/obj/machinery/gibber/autogibber/New()
|
||||
..()
|
||||
@@ -320,7 +330,7 @@
|
||||
RefreshParts()
|
||||
|
||||
/obj/machinery/gibber/autogibber/process()
|
||||
if(!lturf || occupant || locked || dirty || operating)
|
||||
if(!lturf || occupant || locked || dirty || operating || victim_targets.len)
|
||||
return
|
||||
|
||||
if(acceptdir != lastacceptdir)
|
||||
@@ -331,15 +341,21 @@
|
||||
lturf = T
|
||||
|
||||
for(var/mob/living/carbon/human/H in lturf)
|
||||
if(istype(H) && H.loc == lturf)
|
||||
visible_message({"<span class='danger'>\The [src] states, "Food detected!"</span>"})
|
||||
sleep(30)
|
||||
victim_targets += H
|
||||
|
||||
if(victim_targets.len)
|
||||
visible_message({"<span class='danger'>\The [src] states, "Food detected!"</span>"})
|
||||
sleep(consumption_delay)
|
||||
for(var/mob/living/carbon/H in victim_targets)
|
||||
if(H.loc == lturf) //still standing there
|
||||
if(force_move_into_gibber(H))
|
||||
locked = 1 // no escape
|
||||
ejectclothes(occupant)
|
||||
cleanbay()
|
||||
startgibbing(null, 1)
|
||||
locked = 0
|
||||
break
|
||||
victim_targets.Cut()
|
||||
|
||||
/obj/machinery/gibber/autogibber/proc/force_move_into_gibber(var/mob/living/carbon/human/victim)
|
||||
if(!istype(victim)) return 0
|
||||
@@ -364,7 +380,7 @@
|
||||
continue
|
||||
if(istype(O,/obj/item/organ))
|
||||
continue
|
||||
if(O.flags & NODROP)
|
||||
if(O.flags & NODROP || stealthmode)
|
||||
qdel(O) //they are already dead by now
|
||||
H.unEquip(O)
|
||||
O.loc = loc
|
||||
@@ -372,7 +388,7 @@
|
||||
sleep(1)
|
||||
|
||||
for(var/obj/item/clothing/C in H)
|
||||
if(C.flags & NODROP)
|
||||
if(C.flags & NODROP || stealthmode)
|
||||
qdel(C)
|
||||
H.unEquip(C)
|
||||
C.loc = loc
|
||||
@@ -384,7 +400,9 @@
|
||||
/obj/machinery/gibber/autogibber/proc/cleanbay()
|
||||
var/spats = 0 //keeps track of how many items get spit out. Don't show a message if none are found.
|
||||
for(var/obj/O in src)
|
||||
if(istype(O))
|
||||
if(stealthmode)
|
||||
qdel(O)
|
||||
else if(istype(O))
|
||||
O.loc = loc
|
||||
O.throw_at(get_edge_target_turf(src,gib_throw_dir),rand(1,5),15)
|
||||
spats++
|
||||
|
||||
@@ -4,27 +4,29 @@
|
||||
icon = 'icons/obj/kitchen.dmi'
|
||||
icon_state = "juicer1"
|
||||
layer = 2.9
|
||||
density = 0
|
||||
density = 1
|
||||
anchored = 0
|
||||
use_power = 1
|
||||
idle_power_usage = 5
|
||||
active_power_usage = 100
|
||||
pass_flags = PASSTABLE
|
||||
var/obj/item/weapon/reagent_containers/beaker = null
|
||||
var/global/list/allowed_items = list(
|
||||
var/global/list/allowed_items = list (
|
||||
/obj/item/weapon/reagent_containers/food/snacks/grown/tomato = "tomatojuice",
|
||||
/obj/item/weapon/reagent_containers/food/snacks/grown/carrot = "carrotjuice",
|
||||
/obj/item/weapon/reagent_containers/food/snacks/grown/grapes = "grapejuice",
|
||||
/obj/item/weapon/reagent_containers/food/snacks/grown/grapes/green = "grapejuice",
|
||||
/obj/item/weapon/reagent_containers/food/snacks/grown/banana = "banana",
|
||||
/obj/item/weapon/reagent_containers/food/snacks/grown/potato = "potato",
|
||||
/obj/item/weapon/reagent_containers/food/snacks/grown/citrus/lemon = "lemonjuice",
|
||||
/obj/item/weapon/reagent_containers/food/snacks/grown/citrus/orange = "orangejuice",
|
||||
/obj/item/weapon/reagent_containers/food/snacks/grown/citrus/lime = "limejuice",
|
||||
/obj/item/weapon/reagent_containers/food/snacks/grown/watermelon = "watermelonjuice",
|
||||
/obj/item/weapon/reagent_containers/food/snacks/watermelonslice = "watermelonjuice",
|
||||
/obj/item/weapon/reagent_containers/food/snacks/grown = "water",
|
||||
)
|
||||
|
||||
var/global/list/allowed_tags = list (
|
||||
"tomato" = "tomatojuice",
|
||||
"carrot" = "carrotjuice",
|
||||
"berries" = "berryjuice",
|
||||
"banana" = "banana",
|
||||
"potato" = "potato",
|
||||
"lemon" = "lemonjuice",
|
||||
"orange" = "orangejuice",
|
||||
"lime" = "limejuice",
|
||||
"poisonberries" = "poisonberryjuice",
|
||||
/obj/item/weapon/reagent_containers/food/snacks/grown/berries/poison = "poisonberryjuice",
|
||||
/obj/item/weapon/reagent_containers/food/snacks/grown/berries = "berryjuice",
|
||||
/obj/item/weapon/reagent_containers/food/snacks/grown/pumpkin = "pumpkinjuice",
|
||||
/obj/item/weapon/reagent_containers/food/snacks/grown/blumpkin = "blumpkinjuice",
|
||||
)
|
||||
|
||||
/obj/machinery/juicer/New()
|
||||
@@ -135,23 +137,18 @@
|
||||
beaker = null
|
||||
update_icon()
|
||||
|
||||
/obj/machinery/juicer/proc/get_juice_id(var/obj/item/weapon/reagent_containers/food/snacks/O)
|
||||
if(istype(O, /obj/item/weapon/reagent_containers/food/snacks/watermelonslice))
|
||||
return "watermelonjuice"
|
||||
else if(istype(O, /obj.item/weapon/reagent_containers/food/snacks/grown))
|
||||
var/obj/item/weapon/reagent_containers/food/snacks/grown/G = O
|
||||
for(var/i in allowed_tags)
|
||||
if(G.seed.kitchen_tag == allowed_tags[i])
|
||||
return allowed_tags[i]
|
||||
return "water"
|
||||
/obj/machinery/juicer/proc/get_juice_id(obj/item/weapon/reagent_containers/food/snacks/grown/O)
|
||||
for (var/i in allowed_items)
|
||||
if (istype(O, i))
|
||||
return allowed_items[i]
|
||||
|
||||
/obj/machinery/juicer/proc/get_juice_amount(var/obj/item/weapon/reagent_containers/food/snacks/grown/O)
|
||||
if(!istype(O))
|
||||
/obj/machinery/juicer/proc/get_juice_amount(obj/item/weapon/reagent_containers/food/snacks/grown/O)
|
||||
if(!istype(O) || !O.seed)
|
||||
return 5
|
||||
else if(O.potency == -1)
|
||||
else if (O.seed.potency == -1)
|
||||
return 5
|
||||
else
|
||||
return round(5*sqrt(O.potency))
|
||||
return round(5*sqrt(O.seed.potency))
|
||||
|
||||
/obj/machinery/juicer/proc/juice()
|
||||
power_change() //it is a portable machine
|
||||
@@ -167,19 +164,21 @@
|
||||
if(beaker.reagents.total_volume >= beaker.reagents.maximum_volume)
|
||||
break
|
||||
|
||||
/obj/structure/closet/crate/juice
|
||||
New()
|
||||
..()
|
||||
new/obj/machinery/juicer(src)
|
||||
new/obj/item/weapon/reagent_containers/food/snacks/grown/tomato(src)
|
||||
new/obj/item/weapon/reagent_containers/food/snacks/grown/carrot(src)
|
||||
new/obj/item/weapon/reagent_containers/food/snacks/grown/berries(src)
|
||||
new/obj/item/weapon/reagent_containers/food/snacks/grown/banana(src)
|
||||
new/obj/item/weapon/reagent_containers/food/snacks/grown/tomato(src)
|
||||
new/obj/item/weapon/reagent_containers/food/snacks/grown/carrot(src)
|
||||
new/obj/item/weapon/reagent_containers/food/snacks/grown/berries(src)
|
||||
new/obj/item/weapon/reagent_containers/food/snacks/grown/banana(src)
|
||||
new/obj/item/weapon/reagent_containers/food/snacks/grown/tomato(src)
|
||||
new/obj/item/weapon/reagent_containers/food/snacks/grown/carrot(src)
|
||||
new/obj/item/weapon/reagent_containers/food/snacks/grown/berries(src)
|
||||
new/obj/item/weapon/reagent_containers/food/snacks/grown/banana(src)
|
||||
/obj/structure/closet/crate/juice/New()
|
||||
..()
|
||||
new/obj/machinery/juicer(src)
|
||||
new/obj/item/weapon/reagent_containers/food/snacks/grown/tomato(src)
|
||||
new/obj/item/weapon/reagent_containers/food/snacks/grown/carrot(src)
|
||||
new/obj/item/weapon/reagent_containers/food/snacks/grown/berries(src)
|
||||
new/obj/item/weapon/reagent_containers/food/snacks/grown/banana(src)
|
||||
new/obj/item/weapon/reagent_containers/food/snacks/grown/grapes(src)
|
||||
new/obj/item/weapon/reagent_containers/food/snacks/grown/tomato(src)
|
||||
new/obj/item/weapon/reagent_containers/food/snacks/grown/carrot(src)
|
||||
new/obj/item/weapon/reagent_containers/food/snacks/grown/berries(src)
|
||||
new/obj/item/weapon/reagent_containers/food/snacks/grown/banana(src)
|
||||
new/obj/item/weapon/reagent_containers/food/snacks/grown/grapes(src)
|
||||
new/obj/item/weapon/reagent_containers/food/snacks/grown/tomato(src)
|
||||
new/obj/item/weapon/reagent_containers/food/snacks/grown/carrot(src)
|
||||
new/obj/item/weapon/reagent_containers/food/snacks/grown/berries(src)
|
||||
new/obj/item/weapon/reagent_containers/food/snacks/grown/banana(src)
|
||||
new/obj/item/weapon/reagent_containers/food/snacks/grown/grapes(src)
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
use_power = 1
|
||||
idle_power_usage = 5
|
||||
active_power_usage = 100
|
||||
flags = OPENCONTAINER | NOREACT
|
||||
flags = OPENCONTAINER
|
||||
var/operating = 0 // Is it on?
|
||||
var/dirty = 0 // = {0..100} Does it need cleaning?
|
||||
var/broken = 0 // ={0,1,2} How broken is it???
|
||||
@@ -33,6 +33,7 @@
|
||||
|
||||
/obj/machinery/kitchen_machine/New()
|
||||
create_reagents(100)
|
||||
reagents.set_reacting(FALSE)
|
||||
if(!available_recipes)
|
||||
available_recipes = new
|
||||
acceptable_items = new
|
||||
@@ -45,7 +46,7 @@
|
||||
acceptable_items |= item
|
||||
for(var/reagent in recipe.reagents)
|
||||
acceptable_reagents |= reagent
|
||||
if(recipe.items || recipe.fruit)
|
||||
if(recipe.items)
|
||||
max_n_of_items = max(max_n_of_items,recipe.count_n_items())
|
||||
else
|
||||
qdel(recipe)
|
||||
|
||||
@@ -71,21 +71,34 @@
|
||||
input = /obj/item/weapon/reagent_containers/food/snacks/meat
|
||||
output = /obj/item/weapon/reagent_containers/food/snacks/meatball
|
||||
|
||||
/datum/food_processor_process/potato
|
||||
input = "potato"
|
||||
/datum/food_processor_process/potatowedges
|
||||
input = /obj/item/weapon/reagent_containers/food/snacks/grown/potato/wedges
|
||||
output = /obj/item/weapon/reagent_containers/food/snacks/fries
|
||||
|
||||
/datum/food_processor_process/sweetpotato
|
||||
input = /obj/item/weapon/reagent_containers/food/snacks/grown/potato/sweet
|
||||
output = /obj/item/weapon/reagent_containers/food/snacks/yakiimo
|
||||
|
||||
/datum/food_processor_process/potato
|
||||
input = /obj/item/weapon/reagent_containers/food/snacks/grown/potato
|
||||
output = /obj/item/weapon/reagent_containers/food/snacks/tatortot
|
||||
|
||||
/datum/food_processor_process/carrot
|
||||
input = "carrot"
|
||||
input = /obj/item/weapon/reagent_containers/food/snacks/grown/carrot
|
||||
output = /obj/item/weapon/reagent_containers/food/snacks/carrotfries
|
||||
|
||||
/datum/food_processor_process/soybeans
|
||||
input = "soybeans"
|
||||
input = /obj/item/weapon/reagent_containers/food/snacks/grown/soybeans
|
||||
output = /obj/item/weapon/reagent_containers/food/snacks/soydope
|
||||
|
||||
/datum/food_processor_process/spaghetti
|
||||
input = /obj/item/weapon/reagent_containers/food/snacks/doughslice
|
||||
output = /obj/item/weapon/reagent_containers/food/snacks/spagetti
|
||||
|
||||
/datum/food_processor_process/parsnip
|
||||
input = /obj/item/weapon/reagent_containers/food/snacks/grown/parsnip
|
||||
output = /obj/item/weapon/reagent_containers/food/snacks/roastparsnip
|
||||
|
||||
/////////////////////////
|
||||
///END OBJECT RECIPIES///
|
||||
/////////////////////////
|
||||
@@ -142,14 +155,10 @@
|
||||
|
||||
//END RECIPE DATUMS
|
||||
|
||||
/obj/machinery/processor/proc/select_recipe(var/X)
|
||||
/obj/machinery/processor/proc/select_recipe(X)
|
||||
for(var/Type in subtypesof(/datum/food_processor_process) - /datum/food_processor_process/mob)
|
||||
var/datum/food_processor_process/P = new Type()
|
||||
if(istype(X, /obj/item/weapon/reagent_containers/food/snacks/grown))
|
||||
var/obj/item/weapon/reagent_containers/food/snacks/grown/G = X
|
||||
if(G.seed.kitchen_tag != P.input)
|
||||
continue
|
||||
else if(!istype(X, P.input))
|
||||
if(!istype(X, P.input))
|
||||
continue
|
||||
return P
|
||||
return 0
|
||||
|
||||
@@ -10,7 +10,6 @@
|
||||
use_power = 1
|
||||
idle_power_usage = 5
|
||||
active_power_usage = 100
|
||||
flags = NOREACT
|
||||
var/max_n_of_items = 1500
|
||||
var/icon_on = "smartfridge"
|
||||
var/icon_off = "smartfridge-off"
|
||||
@@ -21,10 +20,14 @@
|
||||
var/locked = 0
|
||||
var/scan_id = 1
|
||||
var/is_secure = 0
|
||||
var/can_dry = FALSE
|
||||
var/drying = FALSE
|
||||
var/datum/wires/smartfridge/wires = null
|
||||
|
||||
/obj/machinery/smartfridge/New()
|
||||
..()
|
||||
create_reagents()
|
||||
reagents.set_reacting(FALSE)
|
||||
component_parts = list()
|
||||
var/obj/item/weapon/circuitboard/smartfridge/board = new(null)
|
||||
board.set_type(type)
|
||||
@@ -54,7 +57,7 @@
|
||||
return ..()
|
||||
|
||||
/obj/machinery/smartfridge/proc/accept_check(obj/item/O)
|
||||
if(istype(O,/obj/item/weapon/reagent_containers/food/snacks/grown/) || istype(O,/obj/item/seeds/))
|
||||
if(istype(O,/obj/item/weapon/reagent_containers/food/snacks/grown/) || istype(O,/obj/item/seeds/) || istype(O,/obj/item/weapon/grown/))
|
||||
return 1
|
||||
return 0
|
||||
|
||||
@@ -82,7 +85,7 @@
|
||||
return 1
|
||||
if(istype(O,/obj/item/weapon/storage/pill_bottle/))
|
||||
return 1
|
||||
if(istype(O,/obj/item/weapon/reagent_containers/food/pill/))
|
||||
if(ispill(O))
|
||||
return 1
|
||||
return 0
|
||||
|
||||
@@ -108,7 +111,7 @@
|
||||
return 1
|
||||
if(istype(O,/obj/item/weapon/storage/pill_bottle/))
|
||||
return 1
|
||||
if(istype(O,/obj/item/weapon/reagent_containers/food/pill/))
|
||||
if(ispill(O))
|
||||
return 1
|
||||
return 0
|
||||
|
||||
@@ -192,14 +195,15 @@
|
||||
* Item Adding
|
||||
********************/
|
||||
|
||||
/obj/machinery/smartfridge/attackby(obj/item/O, mob/user)
|
||||
if(istype(O, /obj/item/weapon/screwdriver) && anchored)
|
||||
playsound(loc, 'sound/items/Screwdriver.ogg', 50, 1)
|
||||
panel_open = !panel_open
|
||||
to_chat(user, "You [panel_open ? "open" : "close"] the maintenance panel.")
|
||||
overlays.Cut()
|
||||
if(panel_open)
|
||||
overlays += image(icon, "[initial(icon_state)]-panel")
|
||||
/obj/machinery/smartfridge/default_deconstruction_screwdriver(mob/user, obj/item/weapon/screwdriver/S)
|
||||
. = ..(user, icon_state, icon_state, S)
|
||||
|
||||
overlays.Cut()
|
||||
if(panel_open)
|
||||
overlays += image(icon, "[initial(icon_state)]-panel")
|
||||
|
||||
/obj/machinery/smartfridge/attackby(obj/item/O, var/mob/user)
|
||||
if(default_deconstruction_screwdriver(user, O))
|
||||
return
|
||||
|
||||
if(exchange_parts(user, O))
|
||||
@@ -305,7 +309,7 @@
|
||||
to_chat(user, "<span class='notice'>Some items are refused.</span>")
|
||||
nanomanager.update_uis(src)
|
||||
|
||||
/obj/machinery/smartfridge/secure/emag_act(user)
|
||||
/obj/machinery/smartfridge/secure/emag_act(mob/user)
|
||||
emagged = 1
|
||||
locked = -1
|
||||
to_chat(user, "You short out the product lock on [src].")
|
||||
@@ -330,6 +334,8 @@
|
||||
data["shoot_inventory"] = shoot_inventory
|
||||
data["locked"] = locked
|
||||
data["secure"] = is_secure
|
||||
data["can_dry"] = can_dry
|
||||
data["drying"] = drying
|
||||
|
||||
var/list/items[0]
|
||||
for(var/i=1 to length(item_quants))
|
||||
@@ -370,6 +376,7 @@
|
||||
for(var/obj/O in contents)
|
||||
if(O.name == K)
|
||||
O.forceMove(loc)
|
||||
update_icon()
|
||||
i--
|
||||
if(i <= 0)
|
||||
return 1
|
||||
@@ -392,6 +399,7 @@
|
||||
if(T.name == O)
|
||||
T.forceMove(loc)
|
||||
throw_item = T
|
||||
update_icon()
|
||||
break
|
||||
break
|
||||
if(!throw_item)
|
||||
@@ -401,6 +409,134 @@
|
||||
visible_message("<span class='warning'>[src] launches [throw_item.name] at [target.name]!</span>")
|
||||
return 1
|
||||
|
||||
// ----------------------------
|
||||
// Drying Rack 'smartfridge'
|
||||
// ----------------------------
|
||||
/obj/machinery/smartfridge/drying_rack
|
||||
name = "drying rack"
|
||||
desc = "A wooden contraption, used to dry plant products, food and leather."
|
||||
icon = 'icons/obj/hydroponics/equipment.dmi'
|
||||
icon_state = "drying_rack_on"
|
||||
use_power = 1
|
||||
idle_power_usage = 5
|
||||
active_power_usage = 200
|
||||
icon_on = "drying_rack_on"
|
||||
icon_off = "drying_rack"
|
||||
can_dry = TRUE
|
||||
|
||||
/obj/machinery/smartfridge/drying_rack/New()
|
||||
..()
|
||||
if(component_parts && component_parts.len)
|
||||
component_parts.Cut()
|
||||
component_parts = null
|
||||
|
||||
/obj/machinery/smartfridge/drying_rack/Destroy()
|
||||
new /obj/item/stack/sheet/wood(loc, 10)
|
||||
return ..()
|
||||
|
||||
/obj/machinery/smartfridge/drying_rack/RefreshParts()
|
||||
return
|
||||
|
||||
/obj/machinery/smartfridge/drying_rack/default_deconstruction_screwdriver()
|
||||
return
|
||||
|
||||
/obj/machinery/smartfridge/drying_rack/exchange_parts()
|
||||
return
|
||||
|
||||
/obj/machinery/smartfridge/drying_rack/spawn_frame()
|
||||
return
|
||||
|
||||
/obj/machinery/smartfridge/drying_rack/default_deconstruction_crowbar(obj/item/weapon/crowbar/C, ignore_panel = 1)
|
||||
..()
|
||||
|
||||
/obj/machinery/smartfridge/drying_rack/Topic(href, href_list)
|
||||
if(..())
|
||||
return 1
|
||||
if(href_list["dryingOn"])
|
||||
drying = TRUE
|
||||
use_power = 2
|
||||
update_icon()
|
||||
return 1
|
||||
|
||||
if(href_list["dryingOff"])
|
||||
drying = FALSE
|
||||
use_power = 1
|
||||
update_icon()
|
||||
return 1
|
||||
return 0
|
||||
|
||||
/obj/machinery/smartfridge/drying_rack/power_change()
|
||||
if(powered() && anchored)
|
||||
stat &= ~NOPOWER
|
||||
else
|
||||
stat |= NOPOWER
|
||||
toggle_drying(TRUE)
|
||||
update_icon()
|
||||
|
||||
/obj/machinery/smartfridge/drying_rack/load(obj/I, mob/user) //For updating the filled overlay
|
||||
if(..())
|
||||
update_icon()
|
||||
return 1
|
||||
|
||||
/obj/machinery/smartfridge/drying_rack/update_icon()
|
||||
..()
|
||||
overlays.Cut()
|
||||
if(drying)
|
||||
overlays += "drying_rack_drying"
|
||||
if(contents.len)
|
||||
overlays += "drying_rack_filled"
|
||||
|
||||
/obj/machinery/smartfridge/drying_rack/process()
|
||||
..()
|
||||
if(drying)
|
||||
if(rack_dry())//no need to update unless something got dried
|
||||
update_icon()
|
||||
|
||||
/obj/machinery/smartfridge/drying_rack/accept_check(obj/item/O)
|
||||
if(istype(O, /obj/item/weapon/reagent_containers/food/snacks))
|
||||
var/obj/item/weapon/reagent_containers/food/snacks/S = O
|
||||
if(S.dried_type)
|
||||
return TRUE
|
||||
if(istype(O, /obj/item/stack/sheet/wetleather))
|
||||
return TRUE
|
||||
return FALSE
|
||||
|
||||
/obj/machinery/smartfridge/drying_rack/proc/toggle_drying(forceoff)
|
||||
if(drying || forceoff)
|
||||
drying = FALSE
|
||||
use_power = 1
|
||||
else
|
||||
drying = TRUE
|
||||
use_power = 2
|
||||
update_icon()
|
||||
|
||||
/obj/machinery/smartfridge/drying_rack/proc/rack_dry()
|
||||
for(var/obj/item/weapon/reagent_containers/food/snacks/S in contents)
|
||||
if(S.dried_type == S.type)//if the dried type is the same as the object's type, don't bother creating a whole new item...
|
||||
S.color = "#ad7257"
|
||||
S.dry = TRUE
|
||||
item_quants[S.name]--
|
||||
S.forceMove(get_turf(src))
|
||||
else
|
||||
var/dried = S.dried_type
|
||||
new dried(loc)
|
||||
item_quants[S.name]--
|
||||
qdel(S)
|
||||
nanomanager.update_uis(src)
|
||||
return TRUE
|
||||
for(var/obj/item/stack/sheet/wetleather/WL in contents)
|
||||
var/obj/item/stack/sheet/leather/L = new(loc)
|
||||
L.amount = WL.amount
|
||||
item_quants[WL.name]--
|
||||
qdel(WL)
|
||||
nanomanager.update_uis(src)
|
||||
return TRUE
|
||||
return FALSE
|
||||
|
||||
/obj/machinery/smartfridge/drying_rack/emp_act(severity)
|
||||
..()
|
||||
atmos_spawn_air(SPAWN_HEAT)
|
||||
|
||||
/************************
|
||||
* Secure SmartFridges
|
||||
*************************/
|
||||
@@ -413,4 +549,4 @@
|
||||
to_chat(usr, "<span class='warning'>Access denied.</span>")
|
||||
nanomanager.update_uis(src)
|
||||
return 0
|
||||
return ..()
|
||||
return ..()
|
||||
@@ -27,14 +27,14 @@
|
||||
|
||||
/datum/recipe/candy/fudge_peanut
|
||||
reagents = list("sugar" = 5, "milk" = 5)
|
||||
items = list(/obj/item/weapon/reagent_containers/food/snacks/chocolatebar)
|
||||
fruit = list("peanuts" = 3)
|
||||
items = list(/obj/item/weapon/reagent_containers/food/snacks/chocolatebar, /obj/item/weapon/reagent_containers/food/snacks/grown/peanuts,
|
||||
/obj/item/weapon/reagent_containers/food/snacks/grown/peanuts, /obj/item/weapon/reagent_containers/food/snacks/grown/peanuts)
|
||||
result = /obj/item/weapon/reagent_containers/food/snacks/candy/fudge/peanut
|
||||
|
||||
/datum/recipe/candy/fudge_cherry
|
||||
reagents = list("sugar" = 5, "milk" = 5)
|
||||
items = list(/obj/item/weapon/reagent_containers/food/snacks/chocolatebar)
|
||||
fruit = list("cherries" = 3)
|
||||
items = list(/obj/item/weapon/reagent_containers/food/snacks/chocolatebar, /obj/item/weapon/reagent_containers/food/snacks/grown/cherries,
|
||||
/obj/item/weapon/reagent_containers/food/snacks/grown/cherries, /obj/item/weapon/reagent_containers/food/snacks/grown/cherries)
|
||||
result = /obj/item/weapon/reagent_containers/food/snacks/candy/fudge/cherry
|
||||
|
||||
/datum/recipe/candy/fudge_cookies_n_cream
|
||||
@@ -50,8 +50,8 @@
|
||||
items = list(
|
||||
/obj/item/weapon/reagent_containers/food/snacks/chocolatebar,
|
||||
/obj/item/weapon/reagent_containers/food/snacks/candy/caramel,
|
||||
/obj/item/weapon/reagent_containers/food/snacks/grown/peanuts
|
||||
)
|
||||
fruit = list("peanuts" = 1)
|
||||
result = /obj/item/weapon/reagent_containers/food/snacks/candy/fudge/turtle
|
||||
|
||||
/datum/recipe/candy/fudge
|
||||
@@ -319,10 +319,7 @@
|
||||
|
||||
/datum/recipe/candy/gummybear_wtf2
|
||||
reagents = list()
|
||||
fruit = list("ambrosia" = 1)
|
||||
items = list(
|
||||
/obj/item/weapon/reagent_containers/food/snacks/candy/gummybear
|
||||
)
|
||||
items = list(/obj/item/weapon/reagent_containers/food/snacks/candy/gummybear, /obj/item/weapon/reagent_containers/food/snacks/grown/ambrosia/vulgaris)
|
||||
result = /obj/item/weapon/reagent_containers/food/snacks/candy/gummybear/wtf
|
||||
|
||||
// ***********************************************************
|
||||
@@ -386,10 +383,7 @@
|
||||
result = /obj/item/weapon/reagent_containers/food/snacks/candy/gummyworm/wtf
|
||||
|
||||
/datum/recipe/candy/gummyworm_wtf2
|
||||
fruit = list("ambrosia" = 1)
|
||||
items = list(
|
||||
/obj/item/weapon/reagent_containers/food/snacks/candy/gummyworm
|
||||
)
|
||||
items = list(/obj/item/weapon/reagent_containers/food/snacks/candy/gummyworm, /obj/item/weapon/reagent_containers/food/snacks/grown/ambrosia/vulgaris)
|
||||
result = /obj/item/weapon/reagent_containers/food/snacks/candy/gummyworm/wtf
|
||||
|
||||
// ***********************************************************
|
||||
@@ -489,10 +483,7 @@
|
||||
result = /obj/item/weapon/reagent_containers/food/snacks/candy/jellybean/wtf
|
||||
|
||||
/datum/recipe/candy/jellybean_wtf2
|
||||
fruit = list("ambrosia" = 1)
|
||||
items = list(
|
||||
/obj/item/weapon/reagent_containers/food/snacks/candy/jellybean
|
||||
)
|
||||
items = list(/obj/item/weapon/reagent_containers/food/snacks/candy/jellybean, /obj/item/weapon/reagent_containers/food/snacks/grown/ambrosia/vulgaris)
|
||||
result = /obj/item/weapon/reagent_containers/food/snacks/candy/jellybean/wtf
|
||||
|
||||
// ***********************************************************
|
||||
@@ -505,7 +496,7 @@
|
||||
/obj/item/weapon/reagent_containers/food/snacks/candy/candybar,
|
||||
/obj/item/weapon/reagent_containers/food/snacks/candy/caramel,
|
||||
)
|
||||
result = /obj/item/weapon/reagent_containers/food/snacks/candy/candybar/caramel
|
||||
result = /obj/item/weapon/reagent_containers/food/snacks/candy/confectionery/caramel
|
||||
|
||||
/datum/recipe/candy/toolerone
|
||||
reagents = list()
|
||||
@@ -513,7 +504,7 @@
|
||||
/obj/item/weapon/reagent_containers/food/snacks/candy/candybar,
|
||||
/obj/item/weapon/reagent_containers/food/snacks/candy/nougat,
|
||||
)
|
||||
result = /obj/item/weapon/reagent_containers/food/snacks/candy/candybar/nougat
|
||||
result = /obj/item/weapon/reagent_containers/food/snacks/candy/confectionery/nougat
|
||||
|
||||
/datum/recipe/candy/yumbaton
|
||||
reagents = list()
|
||||
@@ -521,14 +512,14 @@
|
||||
/obj/item/weapon/reagent_containers/food/snacks/candy/candybar,
|
||||
/obj/item/weapon/reagent_containers/food/snacks/candy/toffee,
|
||||
)
|
||||
result = /obj/item/weapon/reagent_containers/food/snacks/candy/candybar/toffee
|
||||
result = /obj/item/weapon/reagent_containers/food/snacks/candy/confectionery/toffee
|
||||
|
||||
/datum/recipe/candy/crunch
|
||||
reagents = list("rice" = 5)
|
||||
items = list(
|
||||
/obj/item/weapon/reagent_containers/food/snacks/candy/candybar,
|
||||
)
|
||||
result = /obj/item/weapon/reagent_containers/food/snacks/candy/candybar/rice
|
||||
result = /obj/item/weapon/reagent_containers/food/snacks/candy/confectionery/rice
|
||||
|
||||
/datum/recipe/candy/toxinstest
|
||||
reagents = list()
|
||||
@@ -537,4 +528,4 @@
|
||||
/obj/item/weapon/reagent_containers/food/snacks/candy/caramel,
|
||||
/obj/item/weapon/reagent_containers/food/snacks/candy/nougat,
|
||||
)
|
||||
result = /obj/item/weapon/reagent_containers/food/snacks/candy/candybar/caramel_nougat
|
||||
result = /obj/item/weapon/reagent_containers/food/snacks/candy/confectionery/caramel_nougat
|
||||
|
||||
@@ -10,11 +10,8 @@
|
||||
result = /obj/item/weapon/reagent_containers/food/snacks/boiledegg
|
||||
|
||||
/datum/recipe/microwave/dionaroast
|
||||
fruit = list("apple" = 1)
|
||||
reagents = list("facid" = 5) //It dissolves the carapace. Still poisonous, though.
|
||||
items = list(
|
||||
/obj/item/weapon/holder/diona,
|
||||
)
|
||||
items = list(/obj/item/weapon/holder/diona, /obj/item/weapon/reagent_containers/food/snacks/grown/apple)
|
||||
result = /obj/item/weapon/reagent_containers/food/snacks/dionaroast
|
||||
|
||||
/datum/recipe/microwave/jellydonut
|
||||
@@ -29,24 +26,24 @@
|
||||
items = list(
|
||||
/obj/item/weapon/reagent_containers/food/snacks/dough
|
||||
)
|
||||
result = /obj/item/weapon/reagent_containers/food/snacks/donut/slimejelly
|
||||
result = /obj/item/weapon/reagent_containers/food/snacks/donut/jelly/slimejelly
|
||||
|
||||
/datum/recipe/microwave/jellydonut/cherry
|
||||
reagents = list("cherryjelly" = 5, "sugar" = 5)
|
||||
items = list(
|
||||
/obj/item/weapon/reagent_containers/food/snacks/dough
|
||||
)
|
||||
result = /obj/item/weapon/reagent_containers/food/snacks/donut/cherryjelly
|
||||
result = /obj/item/weapon/reagent_containers/food/snacks/donut/jelly/cherryjelly
|
||||
|
||||
/datum/recipe/microwave/donut
|
||||
reagents = list("sugar" = 5)
|
||||
items = list(
|
||||
/obj/item/weapon/reagent_containers/food/snacks/dough
|
||||
)
|
||||
result = /obj/item/weapon/reagent_containers/food/snacks/donut/normal
|
||||
result = /obj/item/weapon/reagent_containers/food/snacks/donut
|
||||
|
||||
/datum/recipe/microwave/donut/sprinkles
|
||||
reagents = list("sugar" = 5, "sprinkles" = 3)
|
||||
reagents = list("sugar" = 5, "sprinkles" = 2)
|
||||
items = list(
|
||||
/obj/item/weapon/reagent_containers/food/snacks/dough
|
||||
)
|
||||
@@ -150,16 +147,16 @@
|
||||
result = /obj/item/weapon/reagent_containers/food/snacks/warmdonkpocket
|
||||
|
||||
/datum/recipe/microwave/eggplantparm
|
||||
fruit = list("eggplant" = 1)
|
||||
items = list(
|
||||
/obj/item/weapon/reagent_containers/food/snacks/cheesewedge,
|
||||
/obj/item/weapon/reagent_containers/food/snacks/cheesewedge,
|
||||
/obj/item/weapon/reagent_containers/food/snacks/grown/eggplant
|
||||
)
|
||||
result = /obj/item/weapon/reagent_containers/food/snacks/eggplantparm
|
||||
|
||||
/datum/recipe/microwave/soylenviridians
|
||||
fruit = list("soybeans" = 1)
|
||||
reagents = list("flour" = 10)
|
||||
items = list(/obj/item/weapon/reagent_containers/food/snacks/grown/soybeans)
|
||||
result = /obj/item/weapon/reagent_containers/food/snacks/soylenviridians
|
||||
|
||||
/datum/recipe/microwave/soylentgreen
|
||||
@@ -185,25 +182,27 @@
|
||||
result = /obj/item/weapon/reagent_containers/food/snacks/cheesyfries
|
||||
|
||||
/datum/recipe/microwave/cubancarp
|
||||
fruit = list("chili" = 1)
|
||||
items = list(
|
||||
/obj/item/weapon/reagent_containers/food/snacks/dough,
|
||||
/obj/item/weapon/reagent_containers/food/snacks/carpmeat,
|
||||
/obj/item/weapon/reagent_containers/food/snacks/grown/chili
|
||||
)
|
||||
result = /obj/item/weapon/reagent_containers/food/snacks/cubancarp
|
||||
|
||||
/datum/recipe/microwave/popcorn
|
||||
fruit = list("corn" = 1)
|
||||
items = list(/obj/item/weapon/reagent_containers/food/snacks/grown/corn)
|
||||
result = /obj/item/weapon/reagent_containers/food/snacks/popcorn
|
||||
|
||||
/datum/recipe/microwave/spacylibertyduff
|
||||
reagents = list("water" = 5, "vodka" = 5)
|
||||
fruit = list("libertycap" = 3)
|
||||
items = list(/obj/item/weapon/reagent_containers/food/snacks/grown/mushroom/libertycap, /obj/item/weapon/reagent_containers/food/snacks/grown/mushroom/libertycap,
|
||||
/obj/item/weapon/reagent_containers/food/snacks/grown/mushroom/libertycap)
|
||||
result = /obj/item/weapon/reagent_containers/food/snacks/spacylibertyduff
|
||||
|
||||
/datum/recipe/microwave/amanitajelly
|
||||
reagents = list("water" = 5, "vodka" = 5)
|
||||
fruit = list("amanita" = 3)
|
||||
items = list(/obj/item/weapon/reagent_containers/food/snacks/grown/mushroom/amanita, /obj/item/weapon/reagent_containers/food/snacks/grown/mushroom/amanita,
|
||||
/obj/item/weapon/reagent_containers/food/snacks/grown/mushroom/amanita)
|
||||
result = /obj/item/weapon/reagent_containers/food/snacks/amanitajelly
|
||||
|
||||
/datum/recipe/microwave/amanitajelly/make_food(obj/container)
|
||||
@@ -213,23 +212,18 @@
|
||||
|
||||
/datum/recipe/microwave/meatballsoup
|
||||
reagents = list("water" = 10)
|
||||
fruit = list("potato" = 1, "carrot" = 1)
|
||||
items = list(
|
||||
/obj/item/weapon/reagent_containers/food/snacks/meatball ,
|
||||
)
|
||||
items = list(/obj/item/weapon/reagent_containers/food/snacks/meatball, /obj/item/weapon/reagent_containers/food/snacks/grown/potato, /obj/item/weapon/reagent_containers/food/snacks/grown/carrot)
|
||||
result = /obj/item/weapon/reagent_containers/food/snacks/meatballsoup
|
||||
|
||||
/datum/recipe/microwave/vegetablesoup
|
||||
reagents = list("water" = 10)
|
||||
fruit = list("carrot" = 1, "corn" = 1, "eggplant" = 1, "potato" = 1)
|
||||
items = list(/obj/item/weapon/reagent_containers/food/snacks/grown/potato, /obj/item/weapon/reagent_containers/food/snacks/grown/carrot,
|
||||
/obj/item/weapon/reagent_containers/food/snacks/grown/corn, /obj/item/weapon/reagent_containers/food/snacks/grown/eggplant)
|
||||
result = /obj/item/weapon/reagent_containers/food/snacks/vegetablesoup
|
||||
|
||||
/datum/recipe/microwave/nettlesoup
|
||||
reagents = list("water" = 10)
|
||||
fruit = list("nettle" = 1, "potato" = 1)
|
||||
items = list(
|
||||
/obj/item/weapon/reagent_containers/food/snacks/egg,
|
||||
)
|
||||
items = list(/obj/item/weapon/reagent_containers/food/snacks/egg, /obj/item/weapon/grown/nettle/basic, /obj/item/weapon/reagent_containers/food/snacks/grown/potato)
|
||||
result = /obj/item/weapon/reagent_containers/food/snacks/nettlesoup
|
||||
|
||||
/datum/recipe/microwave/wishsoup
|
||||
@@ -237,17 +231,11 @@
|
||||
result= /obj/item/weapon/reagent_containers/food/snacks/wishsoup
|
||||
|
||||
/datum/recipe/microwave/hotchili
|
||||
fruit = list("chili" = 1, "tomato" = 1)
|
||||
items = list(
|
||||
/obj/item/weapon/reagent_containers/food/snacks/meat,
|
||||
)
|
||||
items = list(/obj/item/weapon/reagent_containers/food/snacks/meat, /obj/item/weapon/reagent_containers/food/snacks/grown/chili, /obj/item/weapon/reagent_containers/food/snacks/grown/tomato)
|
||||
result = /obj/item/weapon/reagent_containers/food/snacks/hotchili
|
||||
|
||||
/datum/recipe/microwave/coldchili
|
||||
fruit = list("icechili" = 1, "tomato" = 1)
|
||||
items = list(
|
||||
/obj/item/weapon/reagent_containers/food/snacks/meat,
|
||||
)
|
||||
items = list(/obj/item/weapon/reagent_containers/food/snacks/meat, /obj/item/weapon/reagent_containers/food/snacks/grown/icepepper, /obj/item/weapon/reagent_containers/food/snacks/grown/tomato)
|
||||
result = /obj/item/weapon/reagent_containers/food/snacks/coldchili
|
||||
|
||||
/datum/recipe/microwave/spellburger
|
||||
@@ -275,10 +263,7 @@
|
||||
result = /obj/item/weapon/reagent_containers/food/snacks/bigbiteburger
|
||||
|
||||
/datum/recipe/microwave/enchiladas
|
||||
fruit = list("chili" = 2, "corn" = 1)
|
||||
items = list(
|
||||
/obj/item/weapon/reagent_containers/food/snacks/cutlet,
|
||||
)
|
||||
items = list(/obj/item/weapon/reagent_containers/food/snacks/cutlet, /obj/item/weapon/reagent_containers/food/snacks/grown/chili, /obj/item/weapon/reagent_containers/food/snacks/grown/corn)
|
||||
result = /obj/item/weapon/reagent_containers/food/snacks/enchiladas
|
||||
|
||||
/datum/recipe/microwave/burrito
|
||||
@@ -292,11 +277,8 @@
|
||||
result = /obj/item/weapon/reagent_containers/food/snacks/burrito
|
||||
|
||||
/datum/recipe/microwave/monkeysdelight
|
||||
fruit = list("banana" = 1)
|
||||
reagents = list("sodiumchloride" = 1, "blackpepper" = 1, "flour" = 10)
|
||||
items = list(
|
||||
/obj/item/weapon/reagent_containers/food/snacks/monkeycube
|
||||
)
|
||||
items = list(/obj/item/weapon/reagent_containers/food/snacks/monkeycube, /obj/item/weapon/reagent_containers/food/snacks/grown/banana)
|
||||
result = /obj/item/weapon/reagent_containers/food/snacks/monkeysdelight
|
||||
|
||||
/datum/recipe/microwave/fishandchips
|
||||
@@ -323,15 +305,14 @@
|
||||
|
||||
/datum/recipe/microwave/tomatosoup
|
||||
reagents = list("water" = 10)
|
||||
fruit = list("tomato" = 2)
|
||||
items = list(/obj/item/weapon/reagent_containers/food/snacks/grown/tomato, /obj/item/weapon/reagent_containers/food/snacks/grown/tomato)
|
||||
result = /obj/item/weapon/reagent_containers/food/snacks/tomatosoup
|
||||
|
||||
/datum/recipe/microwave/stew
|
||||
reagents = list("water" = 10)
|
||||
fruit = list("tomato" = 1, "potato" = 1, "carrot" = 1, "eggplant" = 1, "mushroom" = 1)
|
||||
items = list(
|
||||
/obj/item/weapon/reagent_containers/food/snacks/meat,
|
||||
)
|
||||
items= list(/obj/item/weapon/reagent_containers/food/snacks/grown/tomato, /obj/item/weapon/reagent_containers/food/snacks/grown/potato,
|
||||
/obj/item/weapon/reagent_containers/food/snacks/grown/carrot, /obj/item/weapon/reagent_containers/food/snacks/grown/eggplant,
|
||||
/obj/item/weapon/reagent_containers/food/snacks/grown/mushroom, /obj/item/weapon/reagent_containers/food/snacks/meat)
|
||||
result = /obj/item/weapon/reagent_containers/food/snacks/stew
|
||||
|
||||
/datum/recipe/microwave/slimetoast
|
||||
@@ -359,11 +340,8 @@
|
||||
result = /obj/item/weapon/reagent_containers/food/snacks/milosoup
|
||||
|
||||
/datum/recipe/microwave/stewedsoymeat
|
||||
fruit = list("carrot" = 1, "tomato" = 1)
|
||||
items = list(
|
||||
/obj/item/weapon/reagent_containers/food/snacks/soydope,
|
||||
/obj/item/weapon/reagent_containers/food/snacks/soydope,
|
||||
)
|
||||
items = list(/obj/item/weapon/reagent_containers/food/snacks/soydope, /obj/item/weapon/reagent_containers/food/snacks/soydope,
|
||||
/obj/item/weapon/reagent_containers/food/snacks/grown/carrot, /obj/item/weapon/reagent_containers/food/snacks/grown/tomato)
|
||||
result = /obj/item/weapon/reagent_containers/food/snacks/stewedsoymeat
|
||||
|
||||
/datum/recipe/microwave/boiledspagetti
|
||||
@@ -383,17 +361,12 @@
|
||||
|
||||
/datum/recipe/microwave/pastatomato
|
||||
reagents = list("water" = 5)
|
||||
fruit = list("tomato" = 2)
|
||||
items = list(
|
||||
/obj/item/weapon/reagent_containers/food/snacks/spagetti,
|
||||
)
|
||||
items = list(/obj/item/weapon/reagent_containers/food/snacks/spagetti, /obj/item/weapon/reagent_containers/food/snacks/grown/tomato,
|
||||
/obj/item/weapon/reagent_containers/food/snacks/grown/tomato)
|
||||
result = /obj/item/weapon/reagent_containers/food/snacks/pastatomato
|
||||
|
||||
/datum/recipe/microwave/poppypretzel
|
||||
items = list(
|
||||
/obj/item/seeds/poppyseed,
|
||||
/obj/item/weapon/reagent_containers/food/snacks/dough,
|
||||
)
|
||||
items = list(/obj/item/seeds/poppy, /obj/item/weapon/reagent_containers/food/snacks/dough)
|
||||
result = /obj/item/weapon/reagent_containers/food/snacks/poppypretzel
|
||||
|
||||
/datum/recipe/microwave/meatballspagetti
|
||||
@@ -418,19 +391,19 @@
|
||||
|
||||
/datum/recipe/microwave/superbiteburger
|
||||
reagents = list("sodiumchloride" = 5, "blackpepper" = 5)
|
||||
fruit = list("tomato" = 1)
|
||||
items = list(
|
||||
/obj/item/weapon/reagent_containers/food/snacks/bigbiteburger,
|
||||
/obj/item/weapon/reagent_containers/food/snacks/dough,
|
||||
/obj/item/weapon/reagent_containers/food/snacks/meat,
|
||||
/obj/item/weapon/reagent_containers/food/snacks/cheesewedge,
|
||||
/obj/item/weapon/reagent_containers/food/snacks/boiledegg,
|
||||
/obj/item/weapon/reagent_containers/food/snacks/grown/tomato
|
||||
)
|
||||
result = /obj/item/weapon/reagent_containers/food/snacks/superbiteburger
|
||||
|
||||
/datum/recipe/microwave/candiedapple
|
||||
reagents = list("water" = 5, "sugar" = 5)
|
||||
fruit = list("apple" = 1)
|
||||
items = list(/obj/item/weapon/reagent_containers/food/snacks/grown/apple)
|
||||
result = /obj/item/weapon/reagent_containers/food/snacks/candiedapple
|
||||
|
||||
/datum/recipe/microwave/slimeburger
|
||||
@@ -473,19 +446,18 @@ datum/recipe/microwave/slimesandwich
|
||||
|
||||
/datum/recipe/microwave/bloodsoup
|
||||
reagents = list("blood" = 10)
|
||||
fruit = list("bloodtomato" = 2)
|
||||
items = list(/obj/item/weapon/reagent_containers/food/snacks/grown/tomato/blood, /obj/item/weapon/reagent_containers/food/snacks/grown/tomato/blood)
|
||||
result = /obj/item/weapon/reagent_containers/food/snacks/bloodsoup
|
||||
|
||||
/datum/recipe/microwave/slimesoup
|
||||
reagents = list("water" = 10, "slimejelly" = 5)
|
||||
items = list()
|
||||
result = /obj/item/weapon/reagent_containers/food/snacks/slimesoup
|
||||
|
||||
/datum/recipe/microwave/clownstears
|
||||
reagents = list("water" = 10)
|
||||
fruit = list("banana" = 1)
|
||||
items = list(
|
||||
/obj/item/weapon/ore/bananium,
|
||||
/obj/item/weapon/reagent_containers/food/snacks/grown/banana
|
||||
)
|
||||
result = /obj/item/weapon/reagent_containers/food/snacks/clownstears
|
||||
|
||||
@@ -519,25 +491,26 @@ datum/recipe/microwave/slimesandwich
|
||||
|
||||
/datum/recipe/microwave/mushroomsoup
|
||||
reagents = list("water" = 5, "milk" = 5)
|
||||
fruit = list("mushroom" = 1)
|
||||
items = list(/obj/item/weapon/reagent_containers/food/snacks/grown/mushroom)
|
||||
result = /obj/item/weapon/reagent_containers/food/snacks/mushroomsoup
|
||||
|
||||
/datum/recipe/microwave/chawanmushi
|
||||
reagents = list("water" = 5, "soysauce" = 5)
|
||||
fruit = list("mushroom" = 1)
|
||||
items = list(
|
||||
/obj/item/weapon/reagent_containers/food/snacks/egg,
|
||||
/obj/item/weapon/reagent_containers/food/snacks/egg,
|
||||
/obj/item/weapon/reagent_containers/food/snacks/grown/mushroom
|
||||
)
|
||||
result = /obj/item/weapon/reagent_containers/food/snacks/chawanmushi
|
||||
|
||||
/datum/recipe/microwave/beetsoup
|
||||
reagents = list("water" = 10)
|
||||
fruit = list("whitebeet" = 1, "cabbage" = 1)
|
||||
items = list(/obj/item/weapon/reagent_containers/food/snacks/grown/whitebeet, /obj/item/weapon/reagent_containers/food/snacks/grown/cabbage)
|
||||
result = /obj/item/weapon/reagent_containers/food/snacks/beetsoup
|
||||
|
||||
/datum/recipe/microwave/herbsalad
|
||||
fruit = list("ambrosia" = 3, "apple" = 1)
|
||||
items = list(/obj/item/weapon/reagent_containers/food/snacks/grown/ambrosia/vulgaris, /obj/item/weapon/reagent_containers/food/snacks/grown/ambrosia/vulgaris,
|
||||
/obj/item/weapon/reagent_containers/food/snacks/grown/ambrosia/vulgaris, /obj/item/weapon/reagent_containers/food/snacks/grown/apple)
|
||||
result = /obj/item/weapon/reagent_containers/food/snacks/herbsalad
|
||||
|
||||
/datum/recipe/microwave/herbsalad/make_food(obj/container)
|
||||
@@ -546,14 +519,14 @@ datum/recipe/microwave/slimesandwich
|
||||
return being_cooked
|
||||
|
||||
/datum/recipe/microwave/aesirsalad
|
||||
fruit = list("ambrosiadeus" = 3, "goldapple" = 1)
|
||||
items = list(/obj/item/weapon/reagent_containers/food/snacks/grown/ambrosia/deus, /obj/item/weapon/reagent_containers/food/snacks/grown/ambrosia/deus,
|
||||
/obj/item/weapon/reagent_containers/food/snacks/grown/ambrosia/deus, /obj/item/weapon/reagent_containers/food/snacks/grown/apple/gold)
|
||||
result = /obj/item/weapon/reagent_containers/food/snacks/aesirsalad
|
||||
|
||||
/datum/recipe/microwave/validsalad
|
||||
fruit = list("ambrosia" = 3, "potato" = 1)
|
||||
items = list(
|
||||
/obj/item/weapon/reagent_containers/food/snacks/meatball,
|
||||
)
|
||||
items = list(/obj/item/weapon/reagent_containers/food/snacks/grown/ambrosia/vulgaris, /obj/item/weapon/reagent_containers/food/snacks/grown/ambrosia/vulgaris,
|
||||
/obj/item/weapon/reagent_containers/food/snacks/grown/ambrosia/vulgaris, /obj/item/weapon/reagent_containers/food/snacks/grown/potato,
|
||||
/obj/item/weapon/reagent_containers/food/snacks/meatball)
|
||||
result = /obj/item/weapon/reagent_containers/food/snacks/validsalad
|
||||
|
||||
/datum/recipe/microwave/validsalad/make_food(obj/container)
|
||||
@@ -565,15 +538,12 @@ datum/recipe/microwave/slimesandwich
|
||||
|
||||
/datum/recipe/microwave/wrap
|
||||
reagents = list("soysauce" = 10)
|
||||
fruit = list("cabbage" = 1)
|
||||
items = list(
|
||||
/obj/item/weapon/reagent_containers/food/snacks/friedegg,
|
||||
)
|
||||
items = list(/obj/item/weapon/reagent_containers/food/snacks/friedegg, /obj/item/weapon/reagent_containers/food/snacks/grown/cabbage )
|
||||
result = /obj/item/weapon/reagent_containers/food/snacks/wrap
|
||||
|
||||
/datum/recipe/microwave/beans
|
||||
reagents = list("ketchup" = 5)
|
||||
fruit = list("soybeans" = 2)
|
||||
items = list(/obj/item/weapon/reagent_containers/food/snacks/grown/soybeans, /obj/item/weapon/reagent_containers/food/snacks/grown/soybeans)
|
||||
result = /obj/item/weapon/reagent_containers/food/snacks/beans
|
||||
|
||||
/datum/recipe/microwave/benedict
|
||||
@@ -586,10 +556,10 @@ datum/recipe/microwave/slimesandwich
|
||||
|
||||
/datum/recipe/microwave/meatbun
|
||||
reagents = list("soysauce" = 5)
|
||||
fruit = list("cabbage" = 1)
|
||||
items = list(
|
||||
/obj/item/weapon/reagent_containers/food/snacks/dough,
|
||||
/obj/item/weapon/reagent_containers/food/snacks/meatball,
|
||||
/obj/item/weapon/reagent_containers/food/snacks/grown/cabbage
|
||||
)
|
||||
result = /obj/item/weapon/reagent_containers/food/snacks/meatbun
|
||||
|
||||
@@ -610,9 +580,9 @@ datum/recipe/microwave/slimesandwich
|
||||
|
||||
/datum/recipe/microwave/friedbanana
|
||||
reagents = list("sugar" = 10, "cornoil" = 5)
|
||||
fruit = list("banana" = 1)
|
||||
items = list(
|
||||
/obj/item/weapon/reagent_containers/food/snacks/dough,
|
||||
/obj/item/weapon/reagent_containers/food/snacks/grown/banana
|
||||
)
|
||||
result = /obj/item/weapon/reagent_containers/food/snacks/friedbanana
|
||||
|
||||
@@ -655,8 +625,8 @@ datum/recipe/microwave/slimesandwich
|
||||
result = /obj/item/weapon/reagent_containers/food/snacks/sashimi
|
||||
|
||||
/datum/recipe/microwave/mashedtaters
|
||||
fruit = list("potato" = 1)
|
||||
reagents = list("gravy" = 5)
|
||||
items = list(/obj/item/weapon/reagent_containers/food/snacks/grown/potato)
|
||||
result = /obj/item/weapon/reagent_containers/food/snacks/mashed_potatoes
|
||||
|
||||
//////////////////////////////////////////
|
||||
@@ -671,12 +641,6 @@ datum/recipe/microwave/slimesandwich
|
||||
)
|
||||
result = /obj/item/weapon/reagent_containers/food/snacks/taco
|
||||
|
||||
/datum/recipe/microwave/meatball
|
||||
items = list(
|
||||
/obj/item/weapon/reagent_containers/food/snacks/rawmeatball
|
||||
)
|
||||
result = /obj/item/weapon/reagent_containers/food/snacks/meatball
|
||||
|
||||
/datum/recipe/microwave/fries
|
||||
items = list(
|
||||
/obj/item/weapon/reagent_containers/food/snacks/rawsticks
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user