Merge branch 'master' into upstream-merge-27773

This commit is contained in:
LetterJay
2017-06-06 09:05:26 -05:00
committed by GitHub
359 changed files with 404750 additions and 231336 deletions
+1 -1
View File
@@ -122,7 +122,7 @@
computerid = "0"
if(!ip)
ip = "0.0.0.0"
var/sql = "INSERT INTO [format_table_name("ban")] (`bantime`,`server_ip`,`server_port`,`bantype`,`reason`,`job`,`duration`,`expiration_time`,`ckey`,`computerid`,`ip`,`a_ckey`,`a_computerid`,`a_ip`,`who`,`adminwho`) VALUES (Now(), INET_ATON('[world.internet_address]'), '[world.port]', '[bantype_str]', '[reason]', '[job]', [(duration)?"[duration]":"0"], Now() + INTERVAL [(duration>0) ? duration : 0] MINUTE, '[ckey]', '[computerid]', INET_ATON('[ip]'), '[a_ckey]', '[a_computerid]', INET_ATON('[a_ip]'), '[who]', '[adminwho]')"
var/sql = "INSERT INTO [format_table_name("ban")] (`bantime`,`server_ip`,`server_port`,`round_id`,`bantype`,`reason`,`job`,`duration`,`expiration_time`,`ckey`,`computerid`,`ip`,`a_ckey`,`a_computerid`,`a_ip`,`who`,`adminwho`) VALUES (Now(), INET_ATON(IF('[world.internet_address]' LIKE '', '0', '[world.internet_address]')), '[world.port]', '[GLOB.round_id]', '[bantype_str]', '[reason]', '[job]', [(duration)?"[duration]":"0"], Now() + INTERVAL [(duration>0) ? duration : 0] MINUTE, '[ckey]', '[computerid]', INET_ATON('[ip]'), '[a_ckey]', '[a_computerid]', INET_ATON('[a_ip]'), '[who]', '[adminwho]')"
var/datum/DBQuery/query_add_ban = SSdbcore.NewQuery(sql)
if(!query_add_ban.warn_execute())
return
File diff suppressed because it is too large Load Diff
+8 -7
View File
@@ -183,7 +183,7 @@ GLOBAL_DATUM_INIT(ahelp_tickets, /datum/admin_help_tickets, new)
to_chat(C, "<span class='adminnotice'>PM to-<b>Admins</b>: [name]</span>")
//send it to irc if nobody is on and tell us how many were on
var/admin_number_present = send2irc_adminless_only(initiator_ckey, name)
var/admin_number_present = send2irc_adminless_only("#[id] [initiator_ckey]", name)
log_admin_private("Ticket #[id]: [key_name(initiator)]: [name] - heard by [admin_number_present] non-AFK admins who have +BAN.")
if(admin_number_present <= 0)
to_chat(C, "<span class='notice'>No active admins are online, your adminhelp was sent to the admin irc.</span>")
@@ -431,9 +431,9 @@ GLOBAL_DATUM_INIT(ahelp_tickets, /datum/admin_help_tickets, new)
/obj/effect/statclick/ahelp
var/datum/admin_help/ahelp_datum
/obj/effect/statclick/ahelp/Initialize(mapload, datum/admin_help/AH)
/obj/effect/statclick/ahelp/Initialize(mapload, datum/admin_help/AH)
ahelp_datum = AH
. = ..()
. = ..()
/obj/effect/statclick/ahelp/update()
return ..(ahelp_datum.name)
@@ -479,7 +479,7 @@ GLOBAL_DATUM_INIT(ahelp_tickets, /datum/admin_help_tickets, new)
current_ticket.MessageNoRecipient(msg)
current_ticket.TimeoutVerb()
return
else
else
to_chat(usr, "<span class='warning'>Ticket not found, creating new one...</span>")
else
current_ticket.AddInteraction("[key_name_admin(usr)] opened a new ticket.")
@@ -567,9 +567,10 @@ GLOBAL_DATUM_INIT(ahelp_tickets, /datum/admin_help_tickets, new)
/proc/send2irc(msg,msg2)
if(config.useircbot)
if(world.RunningService())
world.ExportService("[SERVICE_REQUEST_IRC_ADMIN_CHANNEL_MESSAGE] [msg] | [msg2]")
else if(config.useircbot)
shell("python nudge.py [msg] [msg2]")
return
/proc/send2otherserver(source,msg,type = "Ahelp")
if(config.cross_allowed)
@@ -591,7 +592,7 @@ GLOBAL_DATUM_INIT(ahelp_tickets, /datum/admin_help_tickets, new)
admin_keys += "[C][C.holder.fakekey ? "(Stealth)" : ""][C.is_afk() ? "(AFK)" : ""]"
for(var/admin in admin_keys)
if(LAZYLEN(message) > 1)
if(LAZYLEN(message) > 1)
message += ", [admin]"
else
message += "[admin]"
+33 -31
View File
@@ -11,7 +11,7 @@
if( !ismob(M) || !M.client )
return
cmd_admin_pm(M.client,null)
SSblackbox.add_details("admin_verb","Admin PM Mob") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
SSblackbox.add_details("admin_verb","Admin PM Mob") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
//shows a list of clients we could send PMs to, then forwards our choice to cmd_admin_pm
/client/proc/cmd_admin_pm_panel()
@@ -33,7 +33,7 @@
targets["(No Mob) - [T]"] = T
var/target = input(src,"To whom shall we send a message?","Admin PM",null) as null|anything in sortList(targets)
cmd_admin_pm(targets[target],null)
SSblackbox.add_details("admin_verb","Admin PM") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
SSblackbox.add_details("admin_verb","Admin PM") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
/client/proc/cmd_ahelp_reply(whom)
if(prefs.muted & MUTE_ADMINHELP)
@@ -59,11 +59,11 @@
if (!msg)
message_admins("[key_name_admin(src)] has cancelled their reply to [key_name(C, 0, 0)]'s admin help.")
return
cmd_admin_pm(whom, msg, AH)
cmd_admin_pm(whom, msg)
//takes input from cmd_admin_pm_context, cmd_admin_pm_panel or /client/Topic and sends them a PM.
//Fetching a message if needed. src is the sender and C is the target client
/client/proc/cmd_admin_pm(whom, msg, datum/admin_help/AH)
/client/proc/cmd_admin_pm(whom, msg)
if(prefs.muted & MUTE_ADMINHELP)
to_chat(src, "<font color='red'>Error: Admin-PM: You are unable to use admin PM-s (muted).</font>")
return
@@ -103,7 +103,7 @@
if(!recipient)
if(holder)
to_chat(src, "<font color='red'>Error: Admin-PM: Client not found.</font>")
to_chat(src, msg)
to_chat(src, msg)
else
current_ticket.MessageNoRecipient(msg)
return
@@ -144,9 +144,9 @@
if(irc)
to_chat(src, "<font color='blue'>PM to-<b>Admins</b>: [rawmsg]</font>")
admin_ticket_log(src, "<font color='red'>Reply PM from-<b>[key_name(src, TRUE, TRUE)] to <i>IRC</i>: [keywordparsedmsg]</font>")
var/datum/admin_help/AH = admin_ticket_log(src, "<font color='red'>Reply PM from-<b>[key_name(src, TRUE, TRUE)] to <i>IRC</i>: [keywordparsedmsg]</font>")
ircreplyamount--
send2irc("Reply: [ckey]",rawmsg)
send2irc("[AH ? "#[AH.id] " : ""]Reply: [ckey]", rawmsg)
else
if(recipient.holder)
if(holder) //both are admins
@@ -221,42 +221,44 @@
var/datum/admin_help/ticket = C ? C.current_ticket : GLOB.ahelp_tickets.CKey2ActiveTicket(target)
var/compliant_msg = trim(lowertext(msg))
var/unhandled = FALSE
var/irc_tagged = "[sender](IRC)"
switch(compliant_msg)
if("ticket close")
if(ticket)
ticket.Close(irc_tagged)
return "Ticket #[ticket.id] successfully closed"
if("ticket resolve")
if(ticket)
ticket.Resolve(irc_tagged)
return "Ticket #[ticket.id] successfully resolved"
if("ticket ic")
if(ticket)
ticket.ICIssue(irc_tagged)
return "Ticket #[ticket.id] successfully marked as IC issue"
if("ticket reject")
if(ticket)
ticket.Reject(irc_tagged)
return "Ticket #[ticket.id] successfully rejected"
else
unhandled = TRUE
if(!unhandled)
return "Ticket could not be found"
var/list/splits = splittext(compliant_msg, " ")
if(splits.len && splits[1] == "ticket")
if(splits.len < 2)
return "Usage: ticket <close|resolve|icissue|reject>"
switch(splits[2])
if("close")
if(ticket)
ticket.Close(irc_tagged)
return "Ticket #[ticket.id] successfully closed"
if("resolve")
if(ticket)
ticket.Resolve(irc_tagged)
return "Ticket #[ticket.id] successfully resolved"
if("icissue")
if(ticket)
ticket.ICIssue(irc_tagged)
return "Ticket #[ticket.id] successfully marked as IC issue"
if("reject")
if(ticket)
ticket.Reject(irc_tagged)
return "Ticket #[ticket.id] successfully rejected"
else
return "Usage: ticket <close|resolve|icissue|reject>"
return "Error: Ticket could not be found"
var/static/stealthkey
var/adminname = config.showircname ? irc_tagged : "Administrator"
if(!C)
return "No client"
return "Error: No client"
if(!stealthkey)
stealthkey = GenIrcStealthKey()
msg = sanitize(copytext(msg,1,MAX_MESSAGE_LEN))
if(!msg)
return "No message"
return "Error: No message"
message_admins("IRC message from [sender] to [key_name_admin(C)] : [msg]")
log_admin_private("IRC PM: [sender] -> [key_name(C)] : [msg]")
+18 -3
View File
@@ -52,7 +52,20 @@ But you can call procs that are of type /mob/living/carbon/human/proc/ for that
if(!procname)
return
if(targetselected && !hascall(target,procname))
//hascall() doesn't support proc paths (eg: /proc/gib(), it only supports "gib")
var/testname = procname
if(targetselected)
//Find one of the 3 possible ways they could have written /proc/PROCNAME
if(findtext(procname, "/proc/"))
testname = replacetext(procname, "/proc/", "")
else if(findtext(procname, "/proc"))
testname = replacetext(procname, "/proc", "")
else if(findtext(procname, "proc/"))
testname = replacetext(procname, "proc/", "")
//Clear out any parenthesis if they're a dummy
testname = replacetext(testname, "()", "")
if(targetselected && !hascall(target,testname))
to_chat(usr, "<font color='red'>Error: callproc(): type [target.type] has no proc named [procname].</font>")
return
else
@@ -581,7 +594,8 @@ GLOBAL_PROTECT(AdminProcCallCount)
var/list/paths = subtypesof(/datum/outfit) - typesof(/datum/outfit/job)
for(var/path in paths)
var/datum/outfit/O = path //not much to initalize here but whatever
outfits[initial(O.name)] = path
if(initial(O.can_be_admin_equipped))
outfits[initial(O.name)] = path
var/dresscode = input("Select dress for [M]", "Robust quick dress shop") as null|anything in outfits
@@ -596,7 +610,8 @@ GLOBAL_PROTECT(AdminProcCallCount)
var/list/job_outfits = list()
for(var/path in job_paths)
var/datum/outfit/O = path
job_outfits[initial(O.name)] = path
if(initial(O.can_be_admin_equipped))
job_outfits[initial(O.name)] = path
dresscode = input("Select job equipment", "Robust quick dress shop") as null|anything in job_outfits
dresscode = job_outfits[dresscode]
@@ -16,7 +16,7 @@
for(var/log_type in M.logging)
var/list/reversed = M.logging[log_type]
reversed = reverseRange(reversed.Copy())
dat += "<center>[log_type]</center><br>"
dat += "<center><b>[log_type]</b></center><br>"
for(var/entry in reversed)
dat += "<font size=2px>[entry]: [reversed[entry]]</font><br>"
dat += "<hr>"
@@ -26,6 +26,6 @@
if(reversed)
reversed = reverseRange(reversed.Copy())
for(var/entry in reversed)
dat += "<font size=2px>[entry]: [reversed[entry]]</font><hr>"
dat += "<font size=2px>[entry]: [reversed[entry]]</font><br>"
usr << browse(dat, "window=invidual_logging;size=600x480")
+12 -6
View File
@@ -227,7 +227,7 @@
return 0
var/alien_caste = input(usr, "Please choose which caste to spawn.","Pick a caste",null) as null|anything in list("Queen","Praetorian","Hunter","Sentinel","Drone","Larva")
var/obj/effect/landmark/spawn_here = GLOB.xeno_spawn.len ? pick(GLOB.xeno_spawn) : pick(GLOB.latejoin)
var/obj/effect/landmark/spawn_here = GLOB.xeno_spawn.len ? pick(GLOB.xeno_spawn) : null
var/mob/living/carbon/alien/new_xeno
switch(alien_caste)
if("Queen")
@@ -244,6 +244,8 @@
new_xeno = new /mob/living/carbon/alien/larva(spawn_here)
else
return 0
if(!spawn_here)
SSjob.SendToLateJoin(new_xeno, FALSE)
new_xeno.ckey = ckey
var/msg = "<span class='notice'>[key_name_admin(usr)] has spawned [ckey] as a filthy xeno [alien_caste].</span>"
@@ -284,8 +286,6 @@ Traitors and the like can also be revived with the previous role mostly intact.
var/turf/T
if(GLOB.xeno_spawn.len)
T = pick(GLOB.xeno_spawn)
else
T = pick(GLOB.latejoin)
var/mob/living/carbon/alien/new_xeno
switch(G_found.mind.special_role)//If they have a mind, we can determine which caste they were.
@@ -302,6 +302,9 @@ Traitors and the like can also be revived with the previous role mostly intact.
else//If we don't know what special role they have, for whatever reason, or they're a larva.
create_xeno(G_found.ckey)
return
if(!T)
SSjob.SendToLateJoin(new_xeno, FALSE)
//Now to give them their mind back.
G_found.mind.transfer_to(new_xeno) //be careful when doing stuff like this! I've already checked the mind isn't in use
@@ -315,7 +318,8 @@ Traitors and the like can also be revived with the previous role mostly intact.
//check if they were a monkey
else if(findtext(G_found.real_name,"monkey"))
if(alert("This character appears to have been a monkey. Would you like to respawn them as such?",,"Yes","No")=="Yes")
var/mob/living/carbon/monkey/new_monkey = new(pick(GLOB.latejoin))
var/mob/living/carbon/monkey/new_monkey = new
SSjob.SendToLateJoin(new_monkey)
G_found.mind.transfer_to(new_monkey) //be careful when doing stuff like this! I've already checked the mind isn't in use
new_monkey.key = G_found.key
to_chat(new_monkey, "You have been fully respawned. Enjoy the game.")
@@ -326,7 +330,8 @@ Traitors and the like can also be revived with the previous role mostly intact.
//Ok, it's not a xeno or a monkey. So, spawn a human.
var/mob/living/carbon/human/new_character = new(pick(GLOB.latejoin))//The mob being spawned.
var/mob/living/carbon/human/new_character = new//The mob being spawned.
SSjob.SendToLateJoin(new_character)
var/datum/data/record/record_found //Referenced to later to either randomize or not randomize the character.
if(G_found.mind && !G_found.mind.active) //mind isn't currently in use by someone/something
@@ -1206,4 +1211,5 @@ GLOBAL_LIST_EMPTY(custom_outfits) //Admin created outfits
return
message_admins("[key_name_admin(usr)] triggered a Centcom recall, with the admiral message of: [message]")
log_game("[key_name(usr)] triggered a Centcom recall, with the message of: [message]")
log_game("[key_name(usr)] triggered a Centcom recall, with the message of: [message]")
SSshuttle.centcom_recall(SSshuttle.emergency.timer, message)
@@ -1,6 +1,6 @@
#define PUMP_OUT "out"
#define PUMP_IN "in"
#define PUMP_MAX_PRESSURE (ONE_ATMOSPHERE * 30)
#define PUMP_MAX_PRESSURE (ONE_ATMOSPHERE * 10)
#define PUMP_MIN_PRESSURE (ONE_ATMOSPHERE / 10)
#define PUMP_DEFAULT_PRESSURE (ONE_ATMOSPHERE)
@@ -53,18 +53,5 @@
for(var/turf/T in get_area_turfs(thearea.type))
L+=T
var/loc = pick(L)
explosion(loc,explosiondev,explosionmed,explosionlight)
explosion(loc,explosiondev,explosionmed,explosionlight)
reload = 0
/*/mob/proc/openfire()
var/A
A = input("Area to jump bombard", "Open Fire", A) in GLOB.teleportlocs
var/area/thearea = GLOB.teleportlocs[A]
priority_announce("Bluespace artillery fire detected. Brace for impact.")
spawn(30)
var/list/L = list()
for(var/turf/T in get_area_turfs(thearea.type))
L+=T
var/loc = pick(L)
explosion(loc,2,5,11)*/
+143 -144
View File
@@ -18,6 +18,8 @@
var/uses = 1 //how many times can we spawn from it. set to -1 for infinite.
var/brute_damage = 0
var/oxy_damage = 0
var/burn_damage = 0
var/mob_color //Change the mob's color
density = 1
anchored = 1
var/banType = "lavaland"
@@ -38,7 +40,7 @@
create(ckey = user.ckey)
/obj/effect/mob_spawn/Initialize(mapload)
..()
. = ..()
if(instant || (roundstart && (mapload || (SSticker && SSticker.current_state > GAME_STATE_SETTING_UP))))
create()
else
@@ -68,6 +70,8 @@
M.adjustOxyLoss(oxy_damage)
M.adjustBruteLoss(brute_damage)
M.adjustFireLoss(burn_damage)
M.color = mob_color
equip(M)
if(ckey)
@@ -90,78 +94,66 @@
mob_type = /mob/living/carbon/human
//Human specific stuff.
var/mob_species = null //Set to make them a mutant race such as lizard or skeleton. Uses the datum typepath instead of the ID.
var/outfit_type = null //Will start with this if exists then apply specific slots. Job outfits are generated with IDs and disabled PDAs.
var/uniform = null //Set this to an object path to have the slot filled with said object on the corpse.
var/r_hand = null
var/l_hand = null
var/suit = null
var/shoes = null
var/gloves = null
var/radio = null
var/glasses = null
var/mask = null
var/neck = null
var/helmet = null
var/belt = null
var/pocket1 = null
var/pocket2 = null
var/back = null
var/has_id = FALSE //Set to TRUE if you want them to have an ID
var/datum/outfit/outfit = /datum/outfit //If this is a path, it will be instanced in Initialize()
var/disable_pda = TRUE
//All of these only affect the ID that the outfit has placed in the ID slot
var/id_job = null //Such as "Clown" or "Chef." This just determines what the ID reads as, not their access
var/id_access = null //This is for access. See access.dm for which jobs give what access. Use "Captain" if you want it to be all access.
var/id_access_list = null //Allows you to manually add access to an ID card.
var/id_icon = null //For setting it to be a gold, silver, centcom etc ID
var/husk = null
var/list/implants = list()
//these vars are for lazy mappers to override parts of the outfit
//these cannot be null by default, or mappers cannot set them to null if they want nothing in that slot
var/uniform = -1
var/r_hand = -1
var/l_hand = -1
var/suit = -1
var/shoes = -1
var/gloves = -1
var/ears = -1
var/glasses = -1
var/mask = -1
var/head = -1
var/belt = -1
var/r_pocket = -1
var/l_pocket = -1
var/back = -1
var/id = -1
var/neck = -1
var/backpack_contents = -1
var/suit_store = -1
/obj/effect/mob_spawn/human/Initialize()
if(ispath(outfit))
outfit = new outfit()
if(!outfit)
outfit = new /datum/outfit
return ..()
/obj/effect/mob_spawn/human/equip(mob/living/carbon/human/H)
if(mob_species)
H.set_species(mob_species)
if(husk)
H.Drain()
if(outfit_type)
H.equipOutfit(outfit_type)
// We don't want corpse PDAs to show up in the messenger list.
var/obj/item/device/pda/PDA = locate(/obj/item/device/pda) in H
if(PDA)
PDA.toff = TRUE
if(uniform)
H.equip_to_slot_or_del(new uniform(H), slot_w_uniform)
if(suit)
H.equip_to_slot_or_del(new suit(H), slot_wear_suit)
if(shoes)
H.equip_to_slot_or_del(new shoes(H), slot_shoes)
if(gloves)
H.equip_to_slot_or_del(new gloves(H), slot_gloves)
if(radio)
H.equip_to_slot_or_del(new radio(H), slot_ears)
if(glasses)
H.equip_to_slot_or_del(new glasses(H), slot_glasses)
if(mask)
H.equip_to_slot_or_del(new mask(H), slot_wear_mask)
if(neck)
H.equip_to_slot_or_del(new neck(H), slot_neck)
if(helmet)
H.equip_to_slot_or_del(new helmet(H), slot_head)
if(belt)
H.equip_to_slot_or_del(new belt(H), slot_belt)
if(pocket1)
H.equip_to_slot_or_del(new pocket1(H), slot_r_store)
if(pocket2)
H.equip_to_slot_or_del(new pocket2(H), slot_l_store)
if(back)
H.equip_to_slot_or_del(new back(H), slot_back)
if(l_hand)
H.put_in_hands_or_del(new l_hand(H))
if(r_hand)
H.put_in_hands_or_del(new r_hand(H))
if(has_id)
var/obj/item/weapon/card/id/W = new(H)
if(id_icon)
W.icon_state = id_icon
else //Because for some reason I can't track down, things are getting turned into husks even if husk = false. It's in some damage proc somewhere.
H.cure_husk()
H.underwear = "Nude"
H.undershirt = "Nude"
H.socks = "Nude"
if(outfit)
var/static/list/slots = list("uniform", "r_hand", "l_hand", "suit", "shoes", "gloves", "ears", "glasses", "mask", "head", "belt", "r_pocket", "l_pocket", "back", "id", "neck", "backpack_contents", "suit_store")
for(var/slot in slots)
var/T = vars[slot]
if(!isnum(T))
outfit.vars[slot] = T
H.equipOutfit(outfit)
if(disable_pda)
// We don't want corpse PDAs to show up in the messenger list.
var/obj/item/device/pda/PDA = locate(/obj/item/device/pda) in H
if(PDA)
PDA.toff = TRUE
var/obj/item/weapon/card/id/W = H.wear_id
if(W)
if(id_access)
for(var/jobtype in typesof(/datum/job))
var/datum/job/J = new jobtype
@@ -176,15 +168,6 @@
W.assignment = id_job
W.registered_name = H.real_name
W.update_label()
H.equip_to_slot_or_del(W, slot_wear_id)
for(var/I in implants)
var/obj/item/weapon/implant/X = new I
X.implant(H)
if(!H.head && istype(H.wear_suit, /obj/item/clothing/suit/space/hardsuit))
var/obj/item/clothing/suit/space/hardsuit/HS = H.wear_suit
HS.ToggleHelmet()
//Instant version - use when spawning corpses during runtime
/obj/effect/mob_spawn/human/corpse
@@ -248,52 +231,22 @@
// 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/mob_spawn/human/syndicatesoldier
name = "Syndicate Operative"
uniform = /obj/item/clothing/under/syndicate
suit = /obj/item/clothing/suit/armor/vest
shoes = /obj/item/clothing/shoes/combat
gloves = /obj/item/clothing/gloves/combat
radio = /obj/item/device/radio/headset
mask = /obj/item/clothing/mask/gas
helmet = /obj/item/clothing/head/helmet/swat
back = /obj/item/weapon/storage/backpack
has_id = 1
id_job = "Operative"
id_access_list = list(GLOB.access_syndicate)
/obj/effect/mob_spawn/human/syndicatecommando
name = "Syndicate Commando"
uniform = /obj/item/clothing/under/syndicate
suit = /obj/item/clothing/suit/space/hardsuit/syndi
shoes = /obj/item/clothing/shoes/combat
gloves = /obj/item/clothing/gloves/combat
radio = /obj/item/device/radio/headset
mask = /obj/item/clothing/mask/gas/syndicate
back = /obj/item/weapon/tank/jetpack/oxygen
pocket1 = /obj/item/weapon/tank/internals/emergency_oxygen
has_id = 1
id_job = "Operative"
id_access_list = list(GLOB.access_syndicate)
///////////Civilians//////////////////////
/obj/effect/mob_spawn/human/cook
name = "Cook"
outfit_type = /datum/outfit/job/cook
outfit = /datum/outfit/job/cook
/obj/effect/mob_spawn/human/doctor
name = "Doctor"
outfit_type = /datum/outfit/job/doctor
outfit = /datum/outfit/job/doctor
/obj/effect/mob_spawn/human/doctor/alive
death = FALSE
roundstart = FALSE
random = TRUE
radio = null
back = null
name = "sleeper"
icon = 'icons/obj/Cryogenic2.dmi'
icon_state = "sleeper"
@@ -309,49 +262,40 @@
/obj/effect/mob_spawn/human/engineer
name = "Engineer"
outfit_type = /datum/outfit/job/engineer
gloves = /obj/item/clothing/gloves/color/yellow
outfit = /datum/outfit/job/engineer/gloved
/obj/effect/mob_spawn/human/engineer/rig
outfit_type = /datum/outfit/job/engineer/rig
outfit = /datum/outfit/job/engineer/gloved/rig
/obj/effect/mob_spawn/human/clown
name = "Clown"
outfit_type = /datum/outfit/job/clown
outfit = /datum/outfit/job/clown
/obj/effect/mob_spawn/human/scientist
name = "Scientist"
outfit_type = /datum/outfit/job/scientist
outfit = /datum/outfit/job/scientist
/obj/effect/mob_spawn/human/miner
name = "Shaft Miner"
outfit_type = /datum/outfit/job/miner/asteroid
outfit = /datum/outfit/job/miner/asteroid
/obj/effect/mob_spawn/human/miner/rig
outfit_type = /datum/outfit/job/miner/equipped/asteroid
outfit = /datum/outfit/job/miner/equipped/asteroid
/obj/effect/mob_spawn/human/miner/explorer
outfit_type = /datum/outfit/job/miner/equipped
outfit = /datum/outfit/job/miner/equipped
/obj/effect/mob_spawn/human/plasmaman
mob_species = /datum/species/plasmaman
helmet = /obj/item/clothing/head/helmet/space/plasmaman
uniform = /obj/item/clothing/under/plasmaman
back = /obj/item/weapon/tank/internals/plasmaman/full
mask = /obj/item/clothing/mask/breath
outfit = /datum/outfit/plasmaman
/obj/effect/mob_spawn/human/bartender
name = "Space Bartender"
uniform = /obj/item/clothing/under/rank/bartender
back = /obj/item/weapon/storage/backpack
shoes = /obj/item/clothing/shoes/sneakers/black
suit = /obj/item/clothing/suit/armor/vest
glasses = /obj/item/clothing/glasses/sunglasses/reagent
has_id = 1
id_job = "Bartender"
id_access_list = list(GLOB.access_bar)
outfit = /datum/outfit/spacebartender
/obj/effect/mob_spawn/human/bartender/alive
death = FALSE
@@ -362,10 +306,18 @@
icon_state = "sleeper"
flavour_text = "You are a space bartender!"
/datum/outfit/spacebartender
name = "Space Bartender"
uniform = /obj/item/clothing/under/rank/bartender
back = /obj/item/weapon/storage/backpack
shoes = /obj/item/clothing/shoes/sneakers/black
suit = /obj/item/clothing/suit/armor/vest
glasses = /obj/item/clothing/glasses/sunglasses/reagent
id = /obj/item/weapon/card/id
/obj/effect/mob_spawn/human/beach
glasses = /obj/item/clothing/glasses/sunglasses
uniform = /obj/item/clothing/under/shorts/red
pocket1 = /obj/item/weapon/storage/wallet/random
outfit = /datum/outfit/beachbum
/obj/effect/mob_spawn/human/beach/alive
death = FALSE
@@ -377,46 +329,73 @@
icon_state = "sleeper"
flavour_text = "You are a beach bum!"
/datum/outfit/beachbum
name = "Beach Bum"
glasses = /obj/item/clothing/glasses/sunglasses
uniform = /obj/item/clothing/under/shorts/red
r_pocket = /obj/item/weapon/storage/wallet/random
/datum/outfit/beachbum/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE)
..()
if(visualsOnly)
return
H.dna.add_mutation(STONER)
/////////////////Officers+Nanotrasen Security//////////////////////
/obj/effect/mob_spawn/human/bridgeofficer
name = "Bridge Officer"
radio = /obj/item/device/radio/headset/heads/hop
id_job = "Bridge Officer"
id_access_list = list(GLOB.access_cent_captain)
outfit = /datum/outfit/nanotrasenbridgeofficercorpse
/datum/outfit/nanotrasenbridgeofficercorpse
name = "Bridge Officer Corpse"
ears = /obj/item/device/radio/headset/heads/hop
uniform = /obj/item/clothing/under/rank/centcom_officer
suit = /obj/item/clothing/suit/armor/bulletproof
shoes = /obj/item/clothing/shoes/sneakers/black
glasses = /obj/item/clothing/glasses/sunglasses
has_id = 1
id_job = "Bridge Officer"
id_access_list = list(GLOB.access_cent_captain)
id = /obj/item/weapon/card/id
/obj/effect/mob_spawn/human/commander
name = "Commander"
id_job = "Commander"
id_access_list = list(GLOB.access_cent_captain, GLOB.access_cent_general, GLOB.access_cent_specops, GLOB.access_cent_medical, GLOB.access_cent_storage)
outfit = /datum/outfit/nanotrasencommandercorpse
/datum/outfit/nanotrasencommandercorpse
name = "Nanotrasen Private Security Commander"
uniform = /obj/item/clothing/under/rank/centcom_commander
suit = /obj/item/clothing/suit/armor/bulletproof
radio = /obj/item/device/radio/headset/heads/captain
ears = /obj/item/device/radio/headset/heads/captain
glasses = /obj/item/clothing/glasses/eyepatch
mask = /obj/item/clothing/mask/cigarette/cigar/cohiba
helmet = /obj/item/clothing/head/centhat
head = /obj/item/clothing/head/centhat
gloves = /obj/item/clothing/gloves/combat
shoes = /obj/item/clothing/shoes/combat/swat
pocket1 = /obj/item/weapon/lighter
has_id = 1
id_job = "Commander"
id_access_list = list(GLOB.access_cent_captain)
r_pocket = /obj/item/weapon/lighter
id = /obj/item/weapon/card/id
/obj/effect/mob_spawn/human/nanotrasensoldier
name = "Nanotrasen Private Security Officer"
id_job = "Private Security Force"
id_access_list = list(GLOB.access_cent_captain, GLOB.access_cent_general, GLOB.access_cent_specops, GLOB.access_cent_medical, GLOB.access_cent_storage, GLOB.access_security)
outfit = /datum/outfit/nanotrasensoldiercorpse
/datum/outfit/nanotrasensoldiercorpse
name = "NT Private Security Officer Corpse"
uniform = /obj/item/clothing/under/rank/security
suit = /obj/item/clothing/suit/armor/vest
shoes = /obj/item/clothing/shoes/combat
gloves = /obj/item/clothing/gloves/combat
mask = /obj/item/clothing/mask/gas/sechailer/swat
helmet = /obj/item/clothing/head/helmet/swat/nanotrasen
head = /obj/item/clothing/head/helmet/swat/nanotrasen
back = /obj/item/weapon/storage/backpack/security
has_id = 1
id_job = "Private Security Force"
id_access_list = list(GLOB.access_cent_specops)
id = /obj/item/weapon/card/id
/obj/effect/mob_spawn/human/commander/alive
death = FALSE
@@ -427,6 +406,17 @@
icon_state = "sleeper"
flavour_text = "You are a Nanotrasen Commander!"
/obj/effect/mob_spawn/human/nanotrasensoldier/alive
death = FALSE
roundstart = FALSE
mob_name = "Private Security Officer"
name = "sleeper"
icon = 'icons/obj/Cryogenic2.dmi'
icon_state = "sleeper"
faction = "nanotrasenprivate"
flavour_text = "You are a Nanotrasen Private Security Officer!"
/////////////////Spooky Undead//////////////////////
/obj/effect/mob_spawn/human/skeleton
@@ -459,9 +449,14 @@
name = "abductor"
mob_name = "alien"
mob_species = /datum/species/abductor
outfit = /datum/outfit/abductorcorpse
/datum/outfit/abductorcorpse
name = "Abductor Corpse"
uniform = /obj/item/clothing/under/color/grey
shoes = /obj/item/clothing/shoes/combat
//For ghost bar.
/obj/effect/mob_spawn/human/alive/space_bar_patron
name = "Bar cryogenics"
@@ -469,11 +464,7 @@
random = TRUE
permanent = TRUE
uses = -1
uniform = /obj/item/clothing/under/rank/bartender
back = /obj/item/weapon/storage/backpack
shoes = /obj/item/clothing/shoes/sneakers/black
suit = /obj/item/clothing/suit/armor/vest
glasses = /obj/item/clothing/glasses/sunglasses/reagent
outfit = /datum/outfit/spacebartender
/obj/effect/mob_spawn/human/alive/space_bar_patron/attack_hand(mob/user)
var/despawn = alert("Return to cryosleep? (Warning, Your mob will be deleted!)",,"Yes","No")
@@ -481,3 +472,11 @@
return
user.visible_message("<span class='notice'>[user.name] climbs back into cryosleep...</span>")
qdel(user)
/datum/outfit/cryobartender
name = "Cryogenic Bartender"
uniform = /obj/item/clothing/under/rank/bartender
back = /obj/item/weapon/storage/backpack
shoes = /obj/item/clothing/shoes/sneakers/black
suit = /obj/item/clothing/suit/armor/vest
glasses = /obj/item/clothing/glasses/sunglasses/reagent
@@ -186,12 +186,11 @@
/obj/effect/mob_spawn/human/syndicatesoldier/coldres
name = "Syndicate Snow Operative"
uniform = /obj/item/clothing/under/syndicate/coldres
shoes = /obj/item/clothing/shoes/combat/coldres
radio = /obj/item/device/radio/headset/syndicate/alt
pocket1 = /obj/item/weapon/gun/ballistic/automatic/pistol
pocket2 = /obj/item/weapon/card/id/syndicate
has_id = 0
outfit = /datum/outfit/snowsyndie/corpse
/datum/outfit/snowsyndie/corpse
name = "Syndicate Snow Operative Corpse"
implants = null
/obj/effect/mob_spawn/human/syndicatesoldier/coldres/alive
name = "sleeper"
@@ -200,11 +199,20 @@
icon_state = "sleeper"
roundstart = FALSE
death = FALSE
implants = list(/obj/item/weapon/implant/exile)
faction = "syndicate"
outfit = /datum/outfit/snowsyndie
flavour_text = {"You are a syndicate operative recently awoken from cyrostatis in an underground outpost. Monitor Nanotrasen communications and record infomation. All intruders should be
disposed of swirfly to assure no gathered infomation is stolen or lost. Try not to wander too far from the outpost as the caves can be a deadly place even for a trained operative such as yourself."}
/datum/outfit/snowsyndie
name = "Syndicate Snow Operative"
uniform = /obj/item/clothing/under/syndicate/coldres
shoes = /obj/item/clothing/shoes/combat/coldres
ears = /obj/item/device/radio/headset/syndicate/alt
r_pocket = /obj/item/weapon/gun/ballistic/automatic/pistol
l_pocket = /obj/item/weapon/card/id/syndicate
implants = list(/obj/item/weapon/implant/exile)
/obj/effect/mob_spawn/human/syndicatesoldier/coldres/alive/female
mob_gender = FEMALE
@@ -107,7 +107,7 @@
var/datum/effect_system/spark_spread/s = new /datum/effect_system/spark_spread
s.set_up(3, 1, src)
s.start()
explosion(M, 1, 0, 0, 0)
explosion(M, 1, 0, 0, 0)
qdel(src)
/////For the Wishgranter///////////
+2 -2
View File
@@ -46,7 +46,7 @@
// Plasma. The oil of 26 century. The reason why you are here.
/datum/export/material/plasma
cost = 500
cost = 300
material_id = MAT_PLASMA
message = "cm3 of plasma"
@@ -76,7 +76,7 @@
// Plastitanium.
/datum/export/material/plastitanium
cost = 750
cost = 550
material_id = MAT_TITANIUM // code can only check for one material_id; plastitanium is half plasma, half titanium, so ((250 x 250) + (250 x 500)) / 250
message = "cm3 of plastitanium"
+1 -1
View File
@@ -488,7 +488,7 @@ GLOBAL_LIST(external_rsc_urls)
return
if(!account_join_date)
account_join_date = "Error"
var/datum/DBQuery/query_log_connection = SSdbcore.NewQuery("INSERT INTO `[format_table_name("connection_log")]` (`id`,`datetime`,`server_ip`,`server_port`,`ckey`,`ip`,`computerid`) VALUES(null,Now(),INET_ATON('[world.internet_address]'),'[world.port]','[sql_ckey]',INET_ATON('[sql_ip]'),'[sql_computerid]')")
var/datum/DBQuery/query_log_connection = SSdbcore.NewQuery("INSERT INTO `[format_table_name("connection_log")]` (`id`,`datetime`,`server_ip`,`server_port`,`ckey`,`ip`,`computerid`) VALUES(null,Now(),COALESCE(INET_ATON('[world.internet_address]'), 0),'[world.port]','[sql_ckey]',INET_ATON('[sql_ip]'),'[sql_computerid]')")
query_log_connection.Execute()
/client/proc/findJoinDate()
+4 -3
View File
@@ -39,8 +39,9 @@
vision_flags = SEE_TURFS
lighting_alpha = LIGHTING_PLANE_ALPHA_MOSTLY_VISIBLE
glass_colour_type = /datum/client_colour/glass_colour/lightgreen
var/static/list/meson_mining_failure_excuses = list("seismic activity", "excessive lava", "ambient radiation", "electromagnetic storms", "bluespace disruption", \
"gravity", "dust", "dense rock", "ash", "badly understood science", "radiant heat")
var/static/list/meson_mining_failure_excuses = list("badly understood science", "damaged meson generators", "electromagnetic storms", "bluespace disruption", "ancient structures", \
"ambient radiation", "seismic activity", "extreme weather", "strange signals", "excessive lava", "giant monsters", "a loose wire", "lens warping", "radiant heat", "volcanic ash", \
"budget cuts","alien life","dense rock", "gravity", "dust")
var/picked_excuse
var/mesons_on = TRUE
@@ -65,7 +66,7 @@
if(iscarbon(user)) //only carbons can wear glasses
var/mob/living/carbon/C = user
if(!mesons_on)
if(mesons_on)
to_chat(C, "<span class='notice'>Your Meson Scanners have reactivated.</span>")
else if(picked_excuse)
to_chat(C, "<span class='warning'>Due to [picked_excuse], your Meson Scanners will not be able to display terrain layouts in this area.</span>")
-1
View File
@@ -100,7 +100,6 @@
cold_protection = CHEST|GROIN|LEGS|FEET|ARMS|HANDS
heat_protection = CHEST|GROIN|LEGS|FEET|ARMS|HANDS
armor = list(melee = 50, bullet = 10, laser = 10, energy = 10, bomb = 0, bio = 0, rad = 0, fire = 80, acid = 80)
flags_inv = HIDEJUMPSUIT
strip_delay = 80
put_on_delay = 60
+67 -24
View File
@@ -1,24 +1,35 @@
/datum/personal_crafting
var/busy
var/viewing_category = 1 //typical powergamer starting on the Weapons tab
var/list/categories = list(CAT_WEAPON,
CAT_AMMO,
var/viewing_subcategory = 1
var/list/categories = list(
CAT_WEAPONRY,
CAT_ROBOT,
CAT_MISC,
CAT_PRIMAL,
CAT_BREAD,
CAT_BURGER,
CAT_CAKE,
CAT_EGG,
CAT_MEAT,
CAT_MISCFOOD,
CAT_PASTRY,
CAT_PIE,
CAT_PIZZA,
CAT_SALAD,
CAT_SANDWICH,
CAT_SOUP,
CAT_SPAGHETTI)
CAT_FOOD)
var/list/subcategories = list(
list( //Weapon subcategories
CAT_WEAPON,
CAT_AMMO),
CAT_NONE, //Robot subcategories
CAT_NONE, //Misc subcategories
CAT_NONE, //Tribal subcategories
list( //Food subcategories
CAT_BREAD,
CAT_BURGER,
CAT_CAKE,
CAT_EGG,
CAT_MEAT,
CAT_MISCFOOD,
CAT_PASTRY,
CAT_PIE,
CAT_PIZZA,
CAT_SALAD,
CAT_SANDWICH,
CAT_SOUP,
CAT_SPAGHETTI))
var/datum/action/innate/crafting/button
var/display_craftable_only = FALSE
var/display_compact = TRUE
@@ -262,11 +273,19 @@
/datum/personal_crafting/ui_data(mob/user)
var/list/data = list()
var/list/subs = list()
var/cur_subcategory = CAT_NONE
var/cur_category = categories[viewing_category]
if (islist(subcategories[viewing_category]))
subs = subcategories[viewing_category]
cur_subcategory = subs[viewing_subcategory]
data["busy"] = busy
data["prev_cat"] = categories[prev_cat()]
data["prev_subcat"] = subs[prev_subcat()]
data["category"] = cur_category
data["subcategory"] = cur_subcategory
data["next_cat"] = categories[next_cat()]
data["next_subcat"] = subs[next_subcat()]
data["display_craftable_only"] = display_craftable_only
data["display_compact"] = display_compact
@@ -275,7 +294,7 @@
var/list/cant_craft = list()
for(var/rec in GLOB.crafting_recipes)
var/datum/crafting_recipe/R = rec
if(R.category != cur_category)
if((R.category != cur_category) || (R.subcategory != cur_subcategory))
continue
if(check_contents(R, surroundings))
can_craft += list(build_recipe_data(R))
@@ -302,29 +321,41 @@
busy = 0
ui_interact(usr)
if("forwardCat") //Meow
viewing_category = next_cat()
to_chat(usr, "<span class='notice'>Category is now [categories[viewing_category]].</span>")
viewing_category = next_cat(FALSE)
. = TRUE
if("backwardCat")
viewing_category = prev_cat()
to_chat(usr, "<span class='notice'>Category is now [categories[viewing_category]].</span>")
viewing_category = prev_cat(FALSE)
. = TRUE
if("forwardSubCat")
viewing_subcategory = next_subcat()
. = TRUE
if("backwardSubCat")
viewing_subcategory = prev_subcat()
. = TRUE
if("toggle_recipes")
display_craftable_only = !display_craftable_only
to_chat(usr, "<span class='notice'>You will now [display_craftable_only ? "only see recipes you can craft":"see all recipes"].</span>")
. = TRUE
if("toggle_compact")
display_compact = !display_compact
to_chat(usr, "<span class='notice'>Crafting menu is now [display_compact? "compact" : "full size"].</span>")
. = TRUE
//Next works nicely with modular arithmetic
/datum/personal_crafting/proc/next_cat()
/datum/personal_crafting/proc/next_cat(readonly = TRUE)
if (!readonly)
viewing_subcategory = 1
. = viewing_category % categories.len + 1
/datum/personal_crafting/proc/next_subcat()
if(islist(subcategories[viewing_category]))
var/list/subs = subcategories[viewing_category]
. = viewing_subcategory % subs.len + 1
//Previous can go fuck itself
/datum/personal_crafting/proc/prev_cat()
/datum/personal_crafting/proc/prev_cat(readonly = TRUE)
if (!readonly)
viewing_subcategory = 1
if(viewing_category == categories.len)
. = viewing_category-1
else
@@ -332,6 +363,18 @@
if(. <= 0)
. = categories.len
/datum/personal_crafting/proc/prev_subcat()
if(islist(subcategories[viewing_category]))
var/list/subs = subcategories[viewing_category]
if(viewing_subcategory == subs.len)
. = viewing_subcategory-1
else
. = viewing_subcategory % subs.len - 1
if(. <= 0)
. = subs.len
else
. = null
/datum/personal_crafting/proc/build_recipe_data(datum/crafting_recipe/R)
var/list/data = list()
+60 -23
View File
@@ -8,6 +8,7 @@
var/parts[] = list() //type paths of items that will be placed in the result
var/chem_catalysts[] = list() //like tools but for reagents
var/category = CAT_NONE //where it shows up in the crafting UI
var/subcategory = CAT_NONE
/datum/crafting_recipe/pin_removal
@@ -17,7 +18,8 @@
parts = list(/obj/item/weapon/gun = 1)
tools = list(/obj/item/weapon/weldingtool, /obj/item/weapon/screwdriver, /obj/item/weapon/wirecutters)
time = 50
category = CAT_WEAPON
category = CAT_WEAPONRY
subcategory = CAT_WEAPON
/datum/crafting_recipe/IED
name = "IED"
@@ -28,7 +30,8 @@
/obj/item/weapon/reagent_containers/food/drinks/soda_cans = 1)
parts = list(/obj/item/weapon/reagent_containers/food/drinks/soda_cans = 1)
time = 15
category = CAT_WEAPON
category = CAT_WEAPONRY
subcategory = CAT_WEAPON
/datum/crafting_recipe/lance
name = "explosive lance (grenade)"
@@ -38,7 +41,8 @@
parts = list(/obj/item/weapon/twohanded/spear = 1,
/obj/item/weapon/grenade = 1)
time = 15
category = CAT_WEAPON
category = CAT_WEAPONRY
subcategory = CAT_WEAPON
/datum/crafting_recipe/strobeshield
name = "strobe shield"
@@ -47,7 +51,8 @@
/obj/item/device/assembly/flash/handheld = 1,
/obj/item/weapon/shield/riot = 1)
time = 40
category = CAT_WEAPON
category = CAT_WEAPONRY
subcategory = CAT_WEAPON
/datum/crafting_recipe/molotov
name = "Molotov"
@@ -56,7 +61,8 @@
/obj/item/weapon/reagent_containers/food/drinks/bottle = 1)
parts = list(/obj/item/weapon/reagent_containers/food/drinks/bottle = 1)
time = 40
category = CAT_WEAPON
category = CAT_WEAPONRY
subcategory = CAT_WEAPON
/datum/crafting_recipe/stunprod
name = "Stunprod"
@@ -65,7 +71,8 @@
/obj/item/stack/rods = 1,
/obj/item/device/assembly/igniter = 1)
time = 40
category = CAT_WEAPON
category = CAT_WEAPONRY
subcategory = CAT_WEAPON
/datum/crafting_recipe/teleprod
name = "Teleprod"
@@ -75,7 +82,8 @@
/obj/item/device/assembly/igniter = 1,
/obj/item/weapon/ore/bluespace_crystal = 1)
time = 40
category = CAT_WEAPON
category = CAT_WEAPONRY
subcategory = CAT_WEAPON
/datum/crafting_recipe/bola
name = "Bola"
@@ -84,6 +92,7 @@
/obj/item/stack/sheet/metal = 6)
time = 20//15 faster than crafting them by hand!
category= CAT_WEAPON
subcategory = CAT_WEAPON
/datum/crafting_recipe/tailclub
name = "Tail Club"
@@ -91,7 +100,8 @@
reqs = list(/obj/item/severedtail = 1,
/obj/item/stack/sheet/metal = 1)
time = 40
category = CAT_WEAPON
category = CAT_WEAPONRY
subcategory = CAT_WEAPON
/datum/crafting_recipe/tailwhip
name = "Liz O' Nine Tails"
@@ -99,7 +109,8 @@
reqs = list(/obj/item/severedtail = 1,
/obj/item/stack/cable_coil = 1)
time = 40
category = CAT_WEAPON
category = CAT_WEAPONRY
subcategory = CAT_WEAPON
/datum/crafting_recipe/ed209
name = "ED209"
@@ -159,6 +170,18 @@
time = 40
category = CAT_ROBOT
/datum/crafting_recipe/improvised_pneumatic_cannon //Pretty easy to obtain but
name = "Pneumatic Cannon"
result = /obj/item/weapon/pneumatic_cannon/ghetto
tools = list(/obj/item/weapon/weldingtool,
/obj/item/weapon/wrench)
reqs = list(/obj/item/stack/sheet/metal = 4,
/obj/item/stack/packageWrap = 8,
/obj/item/pipe = 2)
time = 300
category = CAT_WEAPONRY
subcategory = CAT_WEAPON
/datum/crafting_recipe/flamethrower
name = "Flamethrower"
result = /obj/item/weapon/flamethrower
@@ -169,7 +192,8 @@
/obj/item/weapon/weldingtool = 1)
tools = list(/obj/item/weapon/screwdriver)
time = 10
category = CAT_WEAPON
category = CAT_WEAPONRY
subcategory = CAT_WEAPON
/datum/crafting_recipe/meteorshot
name = "Meteorshot Shell"
@@ -179,7 +203,8 @@
/obj/item/weapon/stock_parts/manipulator = 2)
tools = list(/obj/item/weapon/screwdriver)
time = 5
category = CAT_AMMO
category = CAT_WEAPONRY
subcategory = CAT_AMMO
/datum/crafting_recipe/pulseslug
name = "Pulse Slug Shell"
@@ -189,7 +214,8 @@
/obj/item/weapon/stock_parts/micro_laser/ultra = 1)
tools = list(/obj/item/weapon/screwdriver)
time = 5
category = CAT_AMMO
category = CAT_WEAPONRY
subcategory = CAT_AMMO
/datum/crafting_recipe/dragonsbreath
name = "Dragonsbreath Shell"
@@ -197,7 +223,8 @@
reqs = list(/obj/item/ammo_casing/shotgun/techshell = 1,/datum/reagent/phosphorus = 5)
tools = list(/obj/item/weapon/screwdriver)
time = 5
category = CAT_AMMO
category = CAT_WEAPONRY
subcategory = CAT_AMMO
/datum/crafting_recipe/frag12
name = "FRAG-12 Shell"
@@ -208,7 +235,8 @@
/datum/reagent/toxin/acid/fluacid = 5)
tools = list(/obj/item/weapon/screwdriver)
time = 5
category = CAT_AMMO
category = CAT_WEAPONRY
subcategory = CAT_AMMO
/datum/crafting_recipe/ionslug
name = "Ion Scatter Shell"
@@ -218,7 +246,8 @@
/obj/item/weapon/stock_parts/subspace/crystal = 1)
tools = list(/obj/item/weapon/screwdriver)
time = 5
category = CAT_AMMO
category = CAT_WEAPONRY
subcategory = CAT_AMMO
/datum/crafting_recipe/improvisedslug
name = "Improvised Shotgun Shell"
@@ -229,7 +258,8 @@
/datum/reagent/fuel = 10)
tools = list(/obj/item/weapon/screwdriver)
time = 5
category = CAT_AMMO
category = CAT_WEAPONRY
subcategory = CAT_AMMO
/datum/crafting_recipe/improvisedslugoverload
name = "Overload Improvised Shell"
@@ -239,7 +269,8 @@
/datum/reagent/toxin/plasma = 20)
tools = list(/obj/item/weapon/screwdriver)
time = 5
category = CAT_AMMO
category = CAT_WEAPONRY
subcategory = CAT_AMMO
/datum/crafting_recipe/laserslug
name = "Laser Slug Shell"
@@ -249,7 +280,8 @@
/obj/item/weapon/stock_parts/micro_laser/high = 1)
tools = list(/obj/item/weapon/screwdriver)
time = 5
category = CAT_AMMO
category = CAT_WEAPONRY
subcategory = CAT_AMMO
/datum/crafting_recipe/ishotgun
name = "Improvised Shotgun"
@@ -260,7 +292,8 @@
/obj/item/stack/packageWrap = 5)
tools = list(/obj/item/weapon/screwdriver)
time = 100
category = CAT_WEAPON
category = CAT_WEAPONRY
subcategory = CAT_WEAPON
/datum/crafting_recipe/chainsaw
name = "Chainsaw"
@@ -270,7 +303,8 @@
/obj/item/stack/sheet/plasteel = 1)
tools = list(/obj/item/weapon/weldingtool)
time = 50
category = CAT_WEAPON
category = CAT_WEAPONRY
subcategory = CAT_WEAPON
/datum/crafting_recipe/spear
name = "Spear"
@@ -279,7 +313,8 @@
/obj/item/weapon/shard = 1,
/obj/item/stack/rods = 1)
time = 40
category = CAT_WEAPON
category = CAT_WEAPONRY
subcategory = CAT_WEAPON
/datum/crafting_recipe/spooky_camera
name = "Camera Obscura"
@@ -354,7 +389,8 @@
)
parts = list(/obj/item/weapon/stock_parts/matter_bin = 1, /obj/item/weapon/grenade/chem_grenade = 2)
time = 30
category = CAT_WEAPON
category = CAT_WEAPONRY
subcategory = CAT_WEAPON
/datum/crafting_recipe/chemical_payload2
name = "Chemical Payload (gibtonite)"
@@ -366,7 +402,8 @@
)
parts = list(/obj/item/weapon/stock_parts/matter_bin = 1, /obj/item/weapon/grenade/chem_grenade = 2)
time = 50
category = CAT_WEAPON
category = CAT_WEAPONRY
subcategory = CAT_WEAPON
/datum/crafting_recipe/bonearmor
name = "Bone Armor"
+2 -2
View File
@@ -27,7 +27,7 @@
/datum/round_event/brand_intelligence/start()
for(var/obj/machinery/vending/V in GLOB.machines)
if(V.z != 1)
if(V.z != ZLEVEL_STATION)
continue
vendingMachines.Add(V)
if(!vendingMachines.len)
@@ -57,7 +57,7 @@
M.speak = rampant_speeches.Copy()
M.speak_chance = 7
else
explosion(upriser.loc, -1, 1, 2, 4, 0)
explosion(upriser.loc, -1, 1, 2, 4, 0)
qdel(upriser)
kill()
+4 -4
View File
@@ -14,9 +14,7 @@
/datum/round_event/ghost_role/devil/spawn_role()
//selecting a spawn_loc
var/list/spawn_locs = GLOB.latejoin
var/spawn_loc = pick(spawn_locs)
if(!spawn_loc)
if(!SSjob.latejoin_trackers.len)
return MAP_ERROR
//selecting a candidate player
@@ -30,7 +28,7 @@
var/datum/mind/Mind = create_devil_mind(key)
Mind.active = 1
var/mob/living/carbon/human/devil = create_event_devil(spawn_loc)
var/mob/living/carbon/human/devil = create_event_devil()
Mind.transfer_to(devil)
add_devil(devil, ascendable = FALSE)
@@ -45,6 +43,8 @@
/proc/create_event_devil(spawn_loc)
var/mob/living/carbon/human/new_devil = new(spawn_loc)
if(!spawn_loc)
SSjob.SendToLateJoin(new_devil)
var/datum/preferences/A = new() //Randomize appearance for the devil.
A.copy_to(new_devil)
new_devil.dna.update_dna_identity()
+1 -1
View File
@@ -25,7 +25,7 @@
var/turf/T = get_turf(H)
if(!T)
continue
if(T.z != 1)
if(T.z != ZLEVEL_STATION)
continue
var/foundAlready = 0 // don't infect someone that already has the virus
for(var/datum/disease/D in H.viruses)
+1 -1
View File
@@ -25,7 +25,7 @@
/datum/round_event/presents/start()
for(var/obj/structure/flora/tree/pine/xmas in world)
if(xmas.z != 1)
if(xmas.z != ZLEVEL_STATION)
continue
for(var/turf/open/floor/T in orange(1,xmas))
for(var/i=1,i<=rand(1,5),i++)
+2 -2
View File
@@ -21,8 +21,8 @@ In my current plan for it, 'solid' will be defined as anything with density == 1
/datum/round_event/immovable_rod/start()
var/startside = pick(GLOB.cardinal)
var/turf/startT = spaceDebrisStartLoc(startside, 1)
var/turf/endT = spaceDebrisFinishLoc(startside, 1)
var/turf/startT = spaceDebrisStartLoc(startside, ZLEVEL_STATION)
var/turf/endT = spaceDebrisFinishLoc(startside, ZLEVEL_STATION)
new /obj/effect/immovablerod(startT, endT)
/obj/effect/immovablerod
+2 -3
View File
@@ -8,13 +8,12 @@
announceWhen = 50
endWhen = 20
var/list/area/areasToOpen = list()
var/list/potential_areas = list(/area/atmos,
/area/bridge,
var/list/potential_areas = list(/area/bridge,
/area/engine,
/area/medical,
/area/security,
/area/quartermaster,
/area/toxins)
/area/science)
var/severity = 1
+1 -1
View File
@@ -32,7 +32,7 @@
var/obj/machinery/telecomms/processor/P = T
if(prob(10))
// Damage the surrounding area to indicate that it popped
explosion(get_turf(P), 0, 0, 2)
explosion(get_turf(P), 0, 0, 2)
// Only a level 1 explosion actually damages the machine
// at all
P.ex_act(1)
+1 -1
View File
@@ -38,7 +38,7 @@
ruins_wizard_loadout = 1
for(var/mob/living/carbon/human/H in GLOB.living_mob_list)
if(ruins_spaceworthiness && (H.z != 1 || isspaceturf(H.loc) || isplasmaman(H)))
if(ruins_spaceworthiness && (H.z != ZLEVEL_STATION || isspaceturf(H.loc) || isplasmaman(H)))
continue //#savetheminers
if(ruins_wizard_loadout && H.mind && ((H.mind in SSticker.mode.wizards) || (H.mind in SSticker.mode.apprentices)))
continue
+1 -1
View File
@@ -13,7 +13,7 @@
var/list/mobs = list()
for(var/mob/living/carbon/human/H in GLOB.living_mob_list)
if(H.z != 1)
if(H.z != ZLEVEL_STATION)
continue //lets not try to strand people in space or stuck in the wizards den
moblocs += H.loc
mobs += H
@@ -54,6 +54,7 @@
var/obj/effect/abstract/proximity_checker/advanced/F = edge_turfs[T]
F.appearance = I.appearance
F.invisibility = 0
F.mouse_opacity = 0
F.layer = 5
/datum/proximity_monitor/advanced/peaceborg_dampener/cleanup_edge_turf(turf/T)
+1 -1
View File
@@ -437,7 +437,7 @@ Gunshots/explosions/opening doors/less rare audio (done)
var/list/image/delusions = list()
/obj/effect/hallucination/delusion/Initialize(mapload, mob/living/carbon/T,force_kind = null , duration = 300,skip_nearby = 1, custom_icon = null, custom_icon_file = null)
..()
. = ..()
target = T
var/image/A = null
var/kind = force_kind ? force_kind : pick("clown","corgi","carp","skeleton","demon","zombie")
@@ -1,5 +1,6 @@
/datum/crafting_recipe/food
var/real_parts
category = CAT_FOOD
/datum/crafting_recipe/food/New()
real_parts = parts.Copy()
@@ -11,7 +11,7 @@
/obj/item/weapon/reagent_containers/food/snacks/cheesewedge = 3
)
result = /obj/item/weapon/reagent_containers/food/snacks/store/bread/meat
category = CAT_BREAD
subcategory = CAT_BREAD
/datum/crafting_recipe/food/xenomeatbread
name = "Xenomeat bread"
@@ -21,7 +21,7 @@
/obj/item/weapon/reagent_containers/food/snacks/cheesewedge = 3
)
result = /obj/item/weapon/reagent_containers/food/snacks/store/bread/xenomeat
category = CAT_BREAD
subcategory = CAT_BREAD
/datum/crafting_recipe/food/spidermeatbread
name = "Spidermeat bread"
@@ -31,7 +31,7 @@
/obj/item/weapon/reagent_containers/food/snacks/cheesewedge = 3
)
result = /obj/item/weapon/reagent_containers/food/snacks/store/bread/spidermeat
category = CAT_BREAD
subcategory = CAT_BREAD
/datum/crafting_recipe/food/banananutbread
name = "Banana nut bread"
@@ -42,7 +42,7 @@
/obj/item/weapon/reagent_containers/food/snacks/grown/banana = 1
)
result = /obj/item/weapon/reagent_containers/food/snacks/store/bread/banana
category = CAT_BREAD
subcategory = CAT_BREAD
/datum/crafting_recipe/food/tofubread
name = "Tofu bread"
@@ -52,7 +52,7 @@
/obj/item/weapon/reagent_containers/food/snacks/cheesewedge = 3
)
result = /obj/item/weapon/reagent_containers/food/snacks/store/bread/tofu
category = CAT_BREAD
subcategory = CAT_BREAD
/datum/crafting_recipe/food/creamcheesebread
name = "Cream cheese bread"
@@ -62,7 +62,7 @@
/obj/item/weapon/reagent_containers/food/snacks/cheesewedge = 2
)
result = /obj/item/weapon/reagent_containers/food/snacks/store/bread/creamcheese
category = CAT_BREAD
subcategory = CAT_BREAD
/datum/crafting_recipe/food/mimanabread
name = "Mimana bread"
@@ -73,7 +73,7 @@
/obj/item/weapon/reagent_containers/food/snacks/grown/banana/mime = 1
)
result = /obj/item/weapon/reagent_containers/food/snacks/store/bread/mimana
category = CAT_BREAD
subcategory = CAT_BREAD
/datum/crafting_recipe/food/butteredtoast
name = "Buttered Toast"
@@ -82,7 +82,7 @@
/obj/item/weapon/reagent_containers/food/snacks/butter = 1
)
result = /obj/item/weapon/reagent_containers/food/snacks/butteredtoast
category = CAT_BREAD
subcategory = CAT_BREAD
/datum/crafting_recipe/food/butterbiscuit
name = "Butter Biscuit"
@@ -91,5 +91,5 @@
/obj/item/weapon/reagent_containers/food/snacks/butter = 1
)
result = /obj/item/weapon/reagent_containers/food/snacks/butterbiscuit
category = CAT_BREAD
subcategory = CAT_BREAD
@@ -14,7 +14,7 @@
/obj/item/weapon/reagent_containers/food/snacks/meat/steak/plain/human = 1
)
result = /obj/item/weapon/reagent_containers/food/snacks/burger/human
category = CAT_BURGER
subcategory = CAT_BURGER
/datum/crafting_recipe/food/burger
name = "Burger"
@@ -24,7 +24,7 @@
)
result = /obj/item/weapon/reagent_containers/food/snacks/burger/plain
category = CAT_BURGER
subcategory = CAT_BURGER
/datum/crafting_recipe/food/corgiburger
name = "Corgi burger"
@@ -34,7 +34,7 @@
)
result = /obj/item/weapon/reagent_containers/food/snacks/burger/corgi
category = CAT_BURGER
subcategory = CAT_BURGER
/datum/crafting_recipe/food/appendixburger
name = "Appendix burger"
@@ -43,7 +43,7 @@
/obj/item/weapon/reagent_containers/food/snacks/bun = 1
)
result = /obj/item/weapon/reagent_containers/food/snacks/burger/appendix
category = CAT_BURGER
subcategory = CAT_BURGER
/datum/crafting_recipe/food/brainburger
name = "Brain burger"
@@ -52,7 +52,7 @@
/obj/item/weapon/reagent_containers/food/snacks/bun = 1
)
result = /obj/item/weapon/reagent_containers/food/snacks/burger/brain
category = CAT_BURGER
subcategory = CAT_BURGER
/datum/crafting_recipe/food/xenoburger
name = "Xeno burger"
@@ -61,7 +61,7 @@
/obj/item/weapon/reagent_containers/food/snacks/bun = 1
)
result = /obj/item/weapon/reagent_containers/food/snacks/burger/xeno
category = CAT_BURGER
subcategory = CAT_BURGER
/datum/crafting_recipe/food/bearger
name = "Bearger"
@@ -70,7 +70,7 @@
/obj/item/weapon/reagent_containers/food/snacks/bun = 1
)
result = /obj/item/weapon/reagent_containers/food/snacks/burger/bearger
category = CAT_BURGER
subcategory = CAT_BURGER
/datum/crafting_recipe/food/fishburger
name = "Fish burger"
@@ -79,7 +79,7 @@
/obj/item/weapon/reagent_containers/food/snacks/bun = 1
)
result = /obj/item/weapon/reagent_containers/food/snacks/burger/fish
category = CAT_BURGER
subcategory = CAT_BURGER
/datum/crafting_recipe/food/tofuburger
name = "Tofu burger"
@@ -88,7 +88,7 @@
/obj/item/weapon/reagent_containers/food/snacks/bun = 1
)
result = /obj/item/weapon/reagent_containers/food/snacks/burger/tofu
category = CAT_BURGER
subcategory = CAT_BURGER
/datum/crafting_recipe/food/ghostburger
name = "Ghost burger"
@@ -97,7 +97,7 @@
/obj/item/weapon/reagent_containers/food/snacks/bun = 1
)
result = /obj/item/weapon/reagent_containers/food/snacks/burger/ghost
category = CAT_BURGER
subcategory = CAT_BURGER
/datum/crafting_recipe/food/clownburger
name = "Clown burger"
@@ -106,7 +106,7 @@
/obj/item/weapon/reagent_containers/food/snacks/bun = 1
)
result = /obj/item/weapon/reagent_containers/food/snacks/burger/clown
category = CAT_BURGER
subcategory = CAT_BURGER
/datum/crafting_recipe/food/mimeburger
name = "Mime burger"
@@ -115,7 +115,7 @@
/obj/item/weapon/reagent_containers/food/snacks/bun = 1
)
result = /obj/item/weapon/reagent_containers/food/snacks/burger/mime
category = CAT_BURGER
subcategory = CAT_BURGER
/datum/crafting_recipe/food/redburger
name = "Red burger"
@@ -125,7 +125,7 @@
/obj/item/weapon/reagent_containers/food/snacks/bun = 1
)
result = /obj/item/weapon/reagent_containers/food/snacks/burger/red
category = CAT_BURGER
subcategory = CAT_BURGER
/datum/crafting_recipe/food/orangeburger
name = "Orange burger"
@@ -135,7 +135,7 @@
/obj/item/weapon/reagent_containers/food/snacks/bun = 1
)
result = /obj/item/weapon/reagent_containers/food/snacks/burger/orange
category = CAT_BURGER
subcategory = CAT_BURGER
/datum/crafting_recipe/food/yellowburger
name = "Yellow burger"
@@ -145,7 +145,7 @@
/obj/item/weapon/reagent_containers/food/snacks/bun = 1
)
result = /obj/item/weapon/reagent_containers/food/snacks/burger/yellow
category = CAT_BURGER
subcategory = CAT_BURGER
/datum/crafting_recipe/food/greenburger
name = "Green burger"
@@ -155,7 +155,7 @@
/obj/item/weapon/reagent_containers/food/snacks/bun = 1
)
result = /obj/item/weapon/reagent_containers/food/snacks/burger/green
category = CAT_BURGER
subcategory = CAT_BURGER
/datum/crafting_recipe/food/blueburger
name = "Blue burger"
@@ -165,7 +165,7 @@
/obj/item/weapon/reagent_containers/food/snacks/bun = 1
)
result = /obj/item/weapon/reagent_containers/food/snacks/burger/blue
category = CAT_BURGER
subcategory = CAT_BURGER
/datum/crafting_recipe/food/purpleburger
name = "Purple burger"
@@ -175,7 +175,7 @@
/obj/item/weapon/reagent_containers/food/snacks/bun = 1
)
result = /obj/item/weapon/reagent_containers/food/snacks/burger/purple
category = CAT_BURGER
subcategory = CAT_BURGER
/datum/crafting_recipe/food/spellburger
name = "Spell burger"
@@ -183,7 +183,7 @@
/obj/item/clothing/head/wizard/fake = 1,
)
result = /obj/item/weapon/reagent_containers/food/snacks/burger/spell
category = CAT_BURGER
subcategory = CAT_BURGER
/datum/crafting_recipe/food/spellburger2
name = "Spell burger"
@@ -192,7 +192,7 @@
/obj/item/weapon/reagent_containers/food/snacks/bun = 1
)
result = /obj/item/weapon/reagent_containers/food/snacks/burger/spell
category = CAT_BURGER
subcategory = CAT_BURGER
/datum/crafting_recipe/food/bigbiteburger
name = "Big bite burger"
@@ -201,7 +201,7 @@
/obj/item/weapon/reagent_containers/food/snacks/bun = 1
)
result = /obj/item/weapon/reagent_containers/food/snacks/burger/bigbite
category = CAT_BURGER
subcategory = CAT_BURGER
/datum/crafting_recipe/food/superbiteburger
name = "Super bite burger"
@@ -216,7 +216,7 @@
)
result = /obj/item/weapon/reagent_containers/food/snacks/burger/superbite
category = CAT_BURGER
subcategory = CAT_BURGER
/datum/crafting_recipe/food/slimeburger
name = "Jelly burger"
@@ -225,7 +225,7 @@
/obj/item/weapon/reagent_containers/food/snacks/bun = 1
)
result = /obj/item/weapon/reagent_containers/food/snacks/burger/jelly/slime
category = CAT_BURGER
subcategory = CAT_BURGER
/datum/crafting_recipe/food/jellyburger
name = "Jelly burger"
@@ -234,7 +234,7 @@
/obj/item/weapon/reagent_containers/food/snacks/bun = 1
)
result = /obj/item/weapon/reagent_containers/food/snacks/burger/jelly/cherry
category = CAT_BURGER
subcategory = CAT_BURGER
/datum/crafting_recipe/food/fivealarmburger
name = "Five alarm burger"
@@ -243,7 +243,7 @@
/obj/item/weapon/reagent_containers/food/snacks/bun = 1
)
result = /obj/item/weapon/reagent_containers/food/snacks/burger/fivealarm
category = CAT_BURGER
subcategory = CAT_BURGER
/datum/crafting_recipe/food/ratburger
name = "Rat burger"
@@ -252,7 +252,7 @@
/obj/item/weapon/reagent_containers/food/snacks/bun = 1
)
result = /obj/item/weapon/reagent_containers/food/snacks/burger/rat
category = CAT_BURGER
subcategory = CAT_BURGER
/datum/crafting_recipe/food/baseballburger
name = "Home run baseball burger"
@@ -261,7 +261,7 @@
/obj/item/weapon/reagent_containers/food/snacks/bun = 1
)
result = /obj/item/weapon/reagent_containers/food/snacks/burger/baseball
category = CAT_BURGER
subcategory = CAT_BURGER
/datum/crafting_recipe/food/baconburger
name = "Bacon Burger"
@@ -272,4 +272,4 @@
)
result = /obj/item/weapon/reagent_containers/food/snacks/burger/baconburger
category = CAT_BURGER
subcategory = CAT_BURGER
@@ -10,7 +10,7 @@
/obj/item/weapon/reagent_containers/food/snacks/grown/carrot = 2
)
result = /obj/item/weapon/reagent_containers/food/snacks/store/cake/carrot
category = CAT_CAKE
subcategory = CAT_CAKE
/datum/crafting_recipe/food/cheesecake
name = "Cheese cake"
@@ -19,7 +19,7 @@
/obj/item/weapon/reagent_containers/food/snacks/cheesewedge = 2
)
result = /obj/item/weapon/reagent_containers/food/snacks/store/cake/cheese
category = CAT_CAKE
subcategory = CAT_CAKE
/datum/crafting_recipe/food/applecake
name = "Apple cake"
@@ -28,7 +28,7 @@
/obj/item/weapon/reagent_containers/food/snacks/grown/apple = 2
)
result = /obj/item/weapon/reagent_containers/food/snacks/store/cake/apple
category = CAT_CAKE
subcategory = CAT_CAKE
/datum/crafting_recipe/food/orangecake
name = "Orange cake"
@@ -37,7 +37,7 @@
/obj/item/weapon/reagent_containers/food/snacks/grown/citrus/orange = 2
)
result = /obj/item/weapon/reagent_containers/food/snacks/store/cake/orange
category = CAT_CAKE
subcategory = CAT_CAKE
/datum/crafting_recipe/food/limecake
name = "Lime cake"
@@ -46,7 +46,7 @@
/obj/item/weapon/reagent_containers/food/snacks/grown/citrus/lime = 2
)
result = /obj/item/weapon/reagent_containers/food/snacks/store/cake/lime
category = CAT_CAKE
subcategory = CAT_CAKE
/datum/crafting_recipe/food/lemoncake
name = "Lemon cake"
@@ -55,7 +55,7 @@
/obj/item/weapon/reagent_containers/food/snacks/grown/citrus/lemon = 2
)
result = /obj/item/weapon/reagent_containers/food/snacks/store/cake/lemon
category = CAT_CAKE
subcategory = CAT_CAKE
/datum/crafting_recipe/food/chocolatecake
name = "Chocolate cake"
@@ -64,7 +64,7 @@
/obj/item/weapon/reagent_containers/food/snacks/chocolatebar = 2
)
result = /obj/item/weapon/reagent_containers/food/snacks/store/cake/chocolate
category = CAT_CAKE
subcategory = CAT_CAKE
/datum/crafting_recipe/food/birthdaycake
name = "Birthday cake"
@@ -73,7 +73,7 @@
/obj/item/weapon/reagent_containers/food/snacks/store/cake/plain = 1
)
result = /obj/item/weapon/reagent_containers/food/snacks/store/cake/birthday
category = CAT_CAKE
subcategory = CAT_CAKE
/datum/crafting_recipe/food/braincake
name = "Brain cake"
@@ -82,7 +82,7 @@
/obj/item/weapon/reagent_containers/food/snacks/store/cake/plain = 1
)
result = /obj/item/weapon/reagent_containers/food/snacks/store/cake/brain
category = CAT_CAKE
subcategory = CAT_CAKE
/datum/crafting_recipe/food/slimecake
name = "Slime cake"
@@ -91,7 +91,7 @@
/obj/item/weapon/reagent_containers/food/snacks/store/cake/plain = 1
)
result = /obj/item/weapon/reagent_containers/food/snacks/store/cake/slimecake
category = CAT_CAKE
subcategory = CAT_CAKE
/datum/crafting_recipe/food/pumpkinspicecake
name = "Pumpkin spice cake"
@@ -100,7 +100,7 @@
/obj/item/weapon/reagent_containers/food/snacks/grown/pumpkin = 2
)
result = /obj/item/weapon/reagent_containers/food/snacks/store/cake/pumpkinspice
category = CAT_CAKE
subcategory = CAT_CAKE
/datum/crafting_recipe/food/cak
name = "Living cat/cake hybrid"
@@ -114,4 +114,4 @@
/datum/reagent/teslium = 1 //To shock the whole thing into life
)
result = /mob/living/simple_animal/pet/cat/cak
category = CAT_CAKE //Cat! Haha, get it? CAT? GET IT???
subcategory = CAT_CAKE //Cat! Haha, get it? CAT? GET IT???
@@ -11,7 +11,7 @@
/obj/item/weapon/reagent_containers/food/snacks/boiledegg = 1
)
result = /obj/item/weapon/reagent_containers/food/snacks/friedegg
category = CAT_EGG
subcategory = CAT_EGG
/datum/crafting_recipe/food/omelette
name = "omelette"
@@ -20,7 +20,7 @@
/obj/item/weapon/reagent_containers/food/snacks/cheesewedge = 2
)
result = /obj/item/weapon/reagent_containers/food/snacks/omelette
category = CAT_EGG
subcategory = CAT_EGG
/datum/crafting_recipe/food/chocolateegg
name = "Chocolate egg"
@@ -29,7 +29,7 @@
/obj/item/weapon/reagent_containers/food/snacks/chocolatebar = 1
)
result = /obj/item/weapon/reagent_containers/food/snacks/chocolateegg
category = CAT_EGG
subcategory = CAT_EGG
/datum/crafting_recipe/food/eggsbenedict
name = "Eggs benedict"
@@ -39,4 +39,4 @@
/obj/item/weapon/reagent_containers/food/snacks/breadslice/plain = 1,
)
result = /obj/item/weapon/reagent_containers/food/snacks/benedict
category = CAT_EGG
subcategory = CAT_EGG
@@ -9,7 +9,7 @@
/obj/item/weapon/reagent_containers/food/snacks/meat/steak/plain/human = 2
)
result = /obj/item/weapon/reagent_containers/food/snacks/kebab/human
category = CAT_MEAT
subcategory = CAT_MEAT
/datum/crafting_recipe/food/kebab
name = "Kebab"
@@ -18,7 +18,7 @@
/obj/item/weapon/reagent_containers/food/snacks/meat/steak = 2
)
result = /obj/item/weapon/reagent_containers/food/snacks/kebab/monkey
category = CAT_MEAT
subcategory = CAT_MEAT
/datum/crafting_recipe/food/tofukebab
name = "Tofu kebab"
@@ -27,7 +27,7 @@
/obj/item/weapon/reagent_containers/food/snacks/tofu = 2
)
result = /obj/item/weapon/reagent_containers/food/snacks/kebab/tofu
category = CAT_MEAT
subcategory = CAT_MEAT
/datum/crafting_recipe/food/tailkebab
name = "Lizard tail kebab"
@@ -36,7 +36,7 @@
/obj/item/severedtail = 1
)
result = /obj/item/weapon/reagent_containers/food/snacks/kebab/tail
category = CAT_MEAT
subcategory = CAT_MEAT
// see code/module/crafting/table.dm
@@ -50,7 +50,7 @@
/obj/item/weapon/reagent_containers/food/snacks/carpmeat = 1
)
result = /obj/item/weapon/reagent_containers/food/snacks/cubancarp
category = CAT_MEAT
subcategory = CAT_MEAT
/datum/crafting_recipe/food/fishandchips
name = "Fish and chips"
@@ -59,7 +59,7 @@
/obj/item/weapon/reagent_containers/food/snacks/carpmeat = 1
)
result = /obj/item/weapon/reagent_containers/food/snacks/fishandchips
category = CAT_MEAT
subcategory = CAT_MEAT
/datum/crafting_recipe/food/fishfingers
name = "Fish fingers"
@@ -69,7 +69,7 @@
/obj/item/weapon/reagent_containers/food/snacks/carpmeat = 1
)
result = /obj/item/weapon/reagent_containers/food/snacks/fishfingers
category = CAT_MEAT
subcategory = CAT_MEAT
/datum/crafting_recipe/food/sashimi
name = "Sashimi"
@@ -79,7 +79,7 @@
/obj/item/weapon/reagent_containers/food/snacks/carpmeat = 1
)
result = /obj/item/weapon/reagent_containers/food/snacks/sashimi
category = CAT_MEAT
subcategory = CAT_MEAT
////////////////////////////////////////////////MR SPIDER////////////////////////////////////////////////
@@ -91,7 +91,7 @@
/obj/item/weapon/reagent_containers/food/snacks/meat/cutlet/spider = 2
)
result = /obj/item/weapon/reagent_containers/food/snacks/spidereggsham
category = CAT_MEAT
subcategory = CAT_MEAT
////////////////////////////////////////////////MISC RECIPE's////////////////////////////////////////////////
@@ -103,7 +103,7 @@
/obj/item/weapon/reagent_containers/food/snacks/grown/cabbage = 2
)
result = /obj/item/weapon/reagent_containers/food/snacks/cornedbeef
category = CAT_MEAT
subcategory = CAT_MEAT
/datum/crafting_recipe/food/bearsteak
name = "Filet migrawr"
@@ -113,7 +113,7 @@
)
tools = list(/obj/item/weapon/lighter)
result = /obj/item/weapon/reagent_containers/food/snacks/bearsteak
category = CAT_MEAT
subcategory = CAT_MEAT
/datum/crafting_recipe/food/enchiladas
name = "Enchiladas"
@@ -123,7 +123,7 @@
/obj/item/weapon/reagent_containers/food/snacks/tortilla = 2
)
result = /obj/item/weapon/reagent_containers/food/snacks/enchiladas
category = CAT_MEAT
subcategory = CAT_MEAT
/datum/crafting_recipe/food/stewedsoymeat
name = "Stewed soymeat"
@@ -133,7 +133,7 @@
/obj/item/weapon/reagent_containers/food/snacks/grown/tomato = 1
)
result = /obj/item/weapon/reagent_containers/food/snacks/stewedsoymeat
category = CAT_MEAT
subcategory = CAT_MEAT
/datum/crafting_recipe/food/sausage
name = "Sausage"
@@ -142,7 +142,7 @@
/obj/item/weapon/reagent_containers/food/snacks/meat/cutlet = 2
)
result = /obj/item/weapon/reagent_containers/food/snacks/sausage
category = CAT_MEAT
subcategory = CAT_MEAT
/datum/crafting_recipe/food/nugget
name = "Chicken nugget"
@@ -150,7 +150,7 @@
/obj/item/weapon/reagent_containers/food/snacks/meat/cutlet = 1
)
result = /obj/item/weapon/reagent_containers/food/snacks/nugget
category = CAT_MEAT
subcategory = CAT_MEAT
/datum/crafting_recipe/food/rawkhinkali
name = "Raw Khinkali"
@@ -159,7 +159,7 @@
/obj/item/weapon/reagent_containers/food/snacks/faggot = 1
)
result = /obj/item/weapon/reagent_containers/food/snacks/rawkhinkali
category = CAT_MEAT
subcategory = CAT_MEAT
/datum/crafting_recipe/food/pigblanket
name = "Pig in a Blanket"
@@ -169,4 +169,4 @@
/obj/item/weapon/reagent_containers/food/snacks/meat/cutlet = 1
)
result = /obj/item/weapon/reagent_containers/food/snacks/pigblanket
category = CAT_MEAT
subcategory = CAT_MEAT
@@ -10,7 +10,7 @@
/obj/item/weapon/reagent_containers/food/snacks/grown/apple = 1
)
result = /obj/item/weapon/reagent_containers/food/snacks/candiedapple
category = CAT_MISCFOOD
subcategory = CAT_MISCFOOD
/datum/crafting_recipe/food/chococoin
name = "Choco coin"
@@ -19,7 +19,7 @@
/obj/item/weapon/reagent_containers/food/snacks/chocolatebar = 1,
)
result = /obj/item/weapon/reagent_containers/food/snacks/chococoin
category = CAT_MISCFOOD
subcategory = CAT_MISCFOOD
/datum/crafting_recipe/food/fudgedice
name = "Fudge dice"
@@ -28,7 +28,7 @@
/obj/item/weapon/reagent_containers/food/snacks/chocolatebar = 1,
)
result = /obj/item/weapon/reagent_containers/food/snacks/fudgedice
category = CAT_MISCFOOD
subcategory = CAT_MISCFOOD
/datum/crafting_recipe/food/chocoorange
name = "Choco orange"
@@ -37,7 +37,7 @@
/obj/item/weapon/reagent_containers/food/snacks/chocolatebar = 1,
)
result = /obj/item/weapon/reagent_containers/food/snacks/chocoorange
category = CAT_MISCFOOD
subcategory = CAT_MISCFOOD
/datum/crafting_recipe/food/loadedbakedpotato
name = "Loaded baked potato"
@@ -47,7 +47,7 @@
/obj/item/weapon/reagent_containers/food/snacks/cheesewedge = 1
)
result = /obj/item/weapon/reagent_containers/food/snacks/loadedbakedpotato
category = CAT_MISCFOOD
subcategory = CAT_MISCFOOD
/datum/crafting_recipe/food/cheesyfries
name = "Cheesy fries"
@@ -56,7 +56,7 @@
/obj/item/weapon/reagent_containers/food/snacks/cheesewedge = 1
)
result = /obj/item/weapon/reagent_containers/food/snacks/cheesyfries
category = CAT_MISCFOOD
subcategory = CAT_MISCFOOD
/datum/crafting_recipe/food/wrap
name = "Wrap"
@@ -65,7 +65,7 @@
/obj/item/weapon/reagent_containers/food/snacks/grown/cabbage = 1,
)
result = /obj/item/weapon/reagent_containers/food/snacks/eggwrap
category = CAT_MISCFOOD
subcategory = CAT_MISCFOOD
/datum/crafting_recipe/food/beans
name = "Beans"
@@ -74,7 +74,7 @@
/obj/item/weapon/reagent_containers/food/snacks/grown/soybeans = 2
)
result = /obj/item/weapon/reagent_containers/food/snacks/beans
category = CAT_MISCFOOD
subcategory = CAT_MISCFOOD
/datum/crafting_recipe/food/eggplantparm
name ="Eggplant parmigiana"
@@ -83,7 +83,7 @@
/obj/item/weapon/reagent_containers/food/snacks/grown/eggplant = 1
)
result = /obj/item/weapon/reagent_containers/food/snacks/eggplantparm
category = CAT_MISCFOOD
subcategory = CAT_MISCFOOD
/datum/crafting_recipe/food/baguette
name = "Baguette"
@@ -93,7 +93,7 @@
/obj/item/weapon/reagent_containers/food/snacks/pastrybase = 2
)
result = /obj/item/weapon/reagent_containers/food/snacks/baguette
category = CAT_MISCFOOD
subcategory = CAT_MISCFOOD
////////////////////////////////////////////////TOAST////////////////////////////////////////////////
@@ -104,7 +104,7 @@
/obj/item/weapon/reagent_containers/food/snacks/breadslice/plain = 1
)
result = /obj/item/weapon/reagent_containers/food/snacks/jelliedtoast/slime
category = CAT_MISCFOOD
subcategory = CAT_MISCFOOD
/datum/crafting_recipe/food/jelliedyoast
name = "Jellied toast"
@@ -113,7 +113,7 @@
/obj/item/weapon/reagent_containers/food/snacks/breadslice/plain = 1
)
result = /obj/item/weapon/reagent_containers/food/snacks/jelliedtoast/cherry
category = CAT_MISCFOOD
subcategory = CAT_MISCFOOD
/datum/crafting_recipe/food/twobread
name = "Two bread"
@@ -122,7 +122,7 @@
/obj/item/weapon/reagent_containers/food/snacks/breadslice/plain = 2
)
result = /obj/item/weapon/reagent_containers/food/snacks/twobread
category = CAT_MISCFOOD
subcategory = CAT_MISCFOOD
/datum/crafting_recipe/food/burrito
name ="Burrito"
@@ -131,7 +131,7 @@
/obj/item/weapon/reagent_containers/food/snacks/grown/soybeans = 2
)
result = /obj/item/weapon/reagent_containers/food/snacks/burrito
category = CAT_MISCFOOD
subcategory = CAT_MISCFOOD
/datum/crafting_recipe/food/cheesyburrito
name ="Cheesy burrito"
@@ -141,7 +141,7 @@
/obj/item/weapon/reagent_containers/food/snacks/grown/soybeans = 1
)
result = /obj/item/weapon/reagent_containers/food/snacks/cheesyburrito
category = CAT_MISCFOOD
subcategory = CAT_MISCFOOD
/datum/crafting_recipe/food/carneburrito
name ="Carne de asada burrito"
@@ -151,7 +151,7 @@
/obj/item/weapon/reagent_containers/food/snacks/grown/soybeans = 1
)
result = /obj/item/weapon/reagent_containers/food/snacks/carneburrito
category = CAT_MISCFOOD
subcategory = CAT_MISCFOOD
/datum/crafting_recipe/food/fuegoburrito
name ="Fuego plasma burrito"
@@ -161,7 +161,7 @@
/obj/item/weapon/reagent_containers/food/snacks/grown/soybeans = 1
)
result = /obj/item/weapon/reagent_containers/food/snacks/fuegoburrito
category = CAT_MISCFOOD
subcategory = CAT_MISCFOOD
/datum/crafting_recipe/food/melonfruitbowl
name ="Melon fruit bowl"
@@ -174,7 +174,7 @@
/obj/item/weapon/reagent_containers/food/snacks/grown/ambrosia = 1
)
result = /obj/item/weapon/reagent_containers/food/snacks/melonfruitbowl
category = CAT_MISCFOOD
subcategory = CAT_MISCFOOD
/datum/crafting_recipe/food/spacefreezy
name ="Space freezy"
@@ -184,7 +184,7 @@
/obj/item/weapon/reagent_containers/food/snacks/icecream = 1
)
result = /obj/item/weapon/reagent_containers/food/snacks/spacefreezy
category = CAT_MISCFOOD
subcategory = CAT_MISCFOOD
/datum/crafting_recipe/food/sundae
name ="Sundae"
@@ -195,7 +195,7 @@
/obj/item/weapon/reagent_containers/food/snacks/icecream = 1
)
result = /obj/item/weapon/reagent_containers/food/snacks/sundae
category = CAT_MISCFOOD
subcategory = CAT_MISCFOOD
/datum/crafting_recipe/food/honkdae
name ="Honkdae"
@@ -207,7 +207,7 @@
/obj/item/weapon/reagent_containers/food/snacks/icecream = 1
)
result = /obj/item/weapon/reagent_containers/food/snacks/honkdae
category = CAT_MISCFOOD
subcategory = CAT_MISCFOOD
/datum/crafting_recipe/food/nachos
name ="Nachos"
@@ -216,7 +216,7 @@
/obj/item/weapon/reagent_containers/food/snacks/tortilla = 1
)
result = /obj/item/weapon/reagent_containers/food/snacks/nachos
category = CAT_MISCFOOD
subcategory = CAT_MISCFOOD
/datum/crafting_recipe/food/cheesynachos
name ="Cheesy nachos"
@@ -226,7 +226,7 @@
/obj/item/weapon/reagent_containers/food/snacks/tortilla = 1
)
result = /obj/item/weapon/reagent_containers/food/snacks/cheesynachos
category = CAT_MISCFOOD
subcategory = CAT_MISCFOOD
/datum/crafting_recipe/food/cubannachos
name ="Cuban nachos"
@@ -236,7 +236,7 @@
/obj/item/weapon/reagent_containers/food/snacks/tortilla = 1
)
result = /obj/item/weapon/reagent_containers/food/snacks/cubannachos
category = CAT_MISCFOOD
subcategory = CAT_MISCFOOD
/datum/crafting_recipe/food/melonkeg
name ="Melon keg"
@@ -247,7 +247,7 @@
)
parts = list(/obj/item/weapon/reagent_containers/food/drinks/bottle/vodka = 1)
result = /obj/item/weapon/reagent_containers/food/snacks/melonkeg
category = CAT_MISCFOOD
subcategory = CAT_MISCFOOD
/datum/crafting_recipe/food/honeybar
name = "Honey nut bar"
@@ -256,7 +256,7 @@
/datum/reagent/consumable/honey = 5
)
result = /obj/item/weapon/reagent_containers/food/snacks/honeybar
category = CAT_MISCFOOD
subcategory = CAT_MISCFOOD
/datum/crafting_recipe/food/stuffedlegion
@@ -269,7 +269,7 @@
/datum/reagent/consumable/capsaicin = 2
)
result = /obj/item/weapon/reagent_containers/food/snacks/stuffedlegion
category = CAT_MISCFOOD
subcategory = CAT_MISCFOOD
/datum/crafting_recipe/food/lizardwine
@@ -280,7 +280,7 @@
/datum/reagent/consumable/ethanol = 100
)
result = /obj/item/weapon/reagent_containers/food/drinks/bottle/lizardwine
category = CAT_MISCFOOD
subcategory = CAT_MISCFOOD
/datum/crafting_recipe/food/powercrepe
@@ -294,7 +294,7 @@
/obj/item/weapon/melee/sabre = 1
)
result = /obj/item/weapon/reagent_containers/food/snacks/powercrepe
category = CAT_MISCFOOD
subcategory = CAT_MISCFOOD
/datum/crafting_recipe/food/taco
name ="Classic Taco"
@@ -305,7 +305,7 @@
/obj/item/weapon/reagent_containers/food/snacks/grown/cabbage = 1,
)
result = /obj/item/weapon/reagent_containers/food/snacks/taco
category = CAT_MISCFOOD
subcategory = CAT_MISCFOOD
/datum/crafting_recipe/food/tacoplain
name ="Plain Taco"
@@ -315,7 +315,7 @@
/obj/item/weapon/reagent_containers/food/snacks/meat/cutlet = 1,
)
result = /obj/item/weapon/reagent_containers/food/snacks/taco/plain
category = CAT_MISCFOOD
subcategory = CAT_MISCFOOD
/datum/crafting_recipe/food/branrequests
name = "Bran Requests Cereal"
@@ -11,7 +11,7 @@
/obj/item/weapon/reagent_containers/food/snacks/pastrybase = 1
)
result = /obj/item/weapon/reagent_containers/food/snacks/donut/chaos
category = CAT_PASTRY
subcategory = CAT_PASTRY
/datum/crafting_recipe/food/donut
time = 15
@@ -21,7 +21,7 @@
/obj/item/weapon/reagent_containers/food/snacks/pastrybase = 1
)
result = /obj/item/weapon/reagent_containers/food/snacks/donut
category = CAT_PASTRY
subcategory = CAT_PASTRY
/datum/crafting_recipe/food/jellydonut
name = "Jelly donut"
@@ -30,7 +30,7 @@
/obj/item/weapon/reagent_containers/food/snacks/pastrybase = 1
)
result = /obj/item/weapon/reagent_containers/food/snacks/donut/jelly
category = CAT_PASTRY
subcategory = CAT_PASTRY
/datum/crafting_recipe/food/cherryjellydonut
name = "Cherry jelly donut"
@@ -39,7 +39,7 @@
/obj/item/weapon/reagent_containers/food/snacks/pastrybase = 1
)
result = /obj/item/weapon/reagent_containers/food/snacks/donut/jelly/cherryjelly
category = CAT_PASTRY
subcategory = CAT_PASTRY
/datum/crafting_recipe/food/slimejellydonut
name = "Slime jelly donut"
@@ -48,7 +48,7 @@
/obj/item/weapon/reagent_containers/food/snacks/pastrybase = 1
)
result = /obj/item/weapon/reagent_containers/food/snacks/donut/jelly/slimejelly
category = CAT_PASTRY
subcategory = CAT_PASTRY
////////////////////////////////////////////////WAFFLES////////////////////////////////////////////////
@@ -59,7 +59,7 @@
/obj/item/weapon/reagent_containers/food/snacks/pastrybase = 2
)
result = /obj/item/weapon/reagent_containers/food/snacks/waffles
category = CAT_PASTRY
subcategory = CAT_PASTRY
/datum/crafting_recipe/food/soylenviridians
@@ -69,7 +69,7 @@
/obj/item/weapon/reagent_containers/food/snacks/grown/soybeans = 1
)
result = /obj/item/weapon/reagent_containers/food/snacks/soylenviridians
category = CAT_PASTRY
subcategory = CAT_PASTRY
/datum/crafting_recipe/food/soylentgreen
name = "Soylent green"
@@ -78,7 +78,7 @@
/obj/item/weapon/reagent_containers/food/snacks/meat/slab/human = 2
)
result = /obj/item/weapon/reagent_containers/food/snacks/soylentgreen
category = CAT_PASTRY
subcategory = CAT_PASTRY
/datum/crafting_recipe/food/rofflewaffles
@@ -88,7 +88,7 @@
/obj/item/weapon/reagent_containers/food/snacks/pastrybase = 2
)
result = /obj/item/weapon/reagent_containers/food/snacks/rofflewaffles
category = CAT_PASTRY
subcategory = CAT_PASTRY
////////////////////////////////////////////////DONKPOCCKETS////////////////////////////////////////////////
@@ -100,7 +100,7 @@
/obj/item/weapon/reagent_containers/food/snacks/faggot = 1
)
result = /obj/item/weapon/reagent_containers/food/snacks/donkpocket
category = CAT_PASTRY
subcategory = CAT_PASTRY
/datum/crafting_recipe/food/dankpocket
time = 15
@@ -110,7 +110,7 @@
/obj/item/weapon/reagent_containers/food/snacks/grown/cannabis = 1
)
result = /obj/item/weapon/reagent_containers/food/snacks/dankpocket
category = CAT_PASTRY
subcategory = CAT_PASTRY
////////////////////////////////////////////////MUFFINS////////////////////////////////////////////////
@@ -122,7 +122,7 @@
/obj/item/weapon/reagent_containers/food/snacks/pastrybase = 1
)
result = /obj/item/weapon/reagent_containers/food/snacks/muffin
category = CAT_PASTRY
subcategory = CAT_PASTRY
/datum/crafting_recipe/food/berrymuffin
name = "Berry muffin"
@@ -132,7 +132,7 @@
/obj/item/weapon/reagent_containers/food/snacks/grown/berries = 1
)
result = /obj/item/weapon/reagent_containers/food/snacks/muffin/berry
category = CAT_PASTRY
subcategory = CAT_PASTRY
/datum/crafting_recipe/food/booberrymuffin
name = "Booberry muffin"
@@ -143,7 +143,7 @@
/obj/item/weapon/ectoplasm = 1
)
result = /obj/item/weapon/reagent_containers/food/snacks/muffin/booberry
category = CAT_PASTRY
subcategory = CAT_PASTRY
/datum/crafting_recipe/food/chawanmushi
name = "Chawanmushi"
@@ -154,7 +154,7 @@
/obj/item/weapon/reagent_containers/food/snacks/grown/mushroom/chanterelle = 1
)
result = /obj/item/weapon/reagent_containers/food/snacks/chawanmushi
category = CAT_PASTRY
subcategory = CAT_PASTRY
////////////////////////////////////////////OTHER////////////////////////////////////////////
@@ -166,7 +166,7 @@
/obj/item/weapon/reagent_containers/food/snacks/sausage = 1
)
result = /obj/item/weapon/reagent_containers/food/snacks/hotdog
category = CAT_PASTRY
subcategory = CAT_PASTRY
/datum/crafting_recipe/food/meatbun
name = "Meat bun"
@@ -177,7 +177,7 @@
/obj/item/weapon/reagent_containers/food/snacks/grown/cabbage = 1
)
result = /obj/item/weapon/reagent_containers/food/snacks/meatbun
category = CAT_PASTRY
subcategory = CAT_PASTRY
/datum/crafting_recipe/food/khachapuri
name = "Khachapuri"
@@ -187,7 +187,7 @@
/obj/item/weapon/reagent_containers/food/snacks/store/bread/plain = 1
)
result = /obj/item/weapon/reagent_containers/food/snacks/khachapuri
category = CAT_PASTRY
subcategory = CAT_PASTRY
/datum/crafting_recipe/food/sugarcookie
time = 15
@@ -197,7 +197,7 @@
/obj/item/weapon/reagent_containers/food/snacks/pastrybase = 1
)
result = /obj/item/weapon/reagent_containers/food/snacks/sugarcookie
category = CAT_PASTRY
subcategory = CAT_PASTRY
/datum/crafting_recipe/food/fortunecookie
time = 15
@@ -210,7 +210,7 @@
/obj/item/weapon/paper = 1
)
result = /obj/item/weapon/reagent_containers/food/snacks/fortunecookie
category = CAT_PASTRY
subcategory = CAT_PASTRY
/datum/crafting_recipe/food/poppypretzel
time = 15
@@ -220,7 +220,7 @@
/obj/item/weapon/reagent_containers/food/snacks/pastrybase = 1
)
result = /obj/item/weapon/reagent_containers/food/snacks/poppypretzel
category = CAT_PASTRY
subcategory = CAT_PASTRY
/datum/crafting_recipe/food/plumphelmetbiscuit
time = 15
@@ -230,7 +230,7 @@
/obj/item/weapon/reagent_containers/food/snacks/grown/mushroom/plumphelmet = 1
)
result = /obj/item/weapon/reagent_containers/food/snacks/plumphelmetbiscuit
category = CAT_PASTRY
subcategory = CAT_PASTRY
/datum/crafting_recipe/food/cracker
time = 15
@@ -240,7 +240,7 @@
/obj/item/weapon/reagent_containers/food/snacks/pastrybase = 1,
)
result = /obj/item/weapon/reagent_containers/food/snacks/cracker
category = CAT_PASTRY
subcategory = CAT_PASTRY
/datum/crafting_recipe/food/chococornet
name = "Choco cornet"
@@ -250,7 +250,7 @@
/obj/item/weapon/reagent_containers/food/snacks/chocolatebar = 1
)
result = /obj/item/weapon/reagent_containers/food/snacks/chococornet
category = CAT_PASTRY
subcategory = CAT_PASTRY
/datum/crafting_recipe/food/oatmealcookie
name = "Oatmeal cookie"
@@ -268,7 +268,7 @@
/obj/item/weapon/reagent_containers/food/snacks/grown/oat = 1
)
result = /obj/item/weapon/reagent_containers/food/snacks/raisincookie
category = CAT_PASTRY
subcategory = CAT_PASTRY
/datum/crafting_recipe/food/cherrycupcake
name = "Cherry cupcake"
@@ -277,7 +277,7 @@
/obj/item/weapon/reagent_containers/food/snacks/grown/cherries = 1
)
result = /obj/item/weapon/reagent_containers/food/snacks/cherrycupcake
category = CAT_PASTRY
subcategory = CAT_PASTRY
/datum/crafting_recipe/food/bluecherrycupcake
name = "Blue cherry cupcake"
@@ -286,7 +286,7 @@
/obj/item/weapon/reagent_containers/food/snacks/grown/bluecherries = 1
)
result = /obj/item/weapon/reagent_containers/food/snacks/bluecherrycupcake
category = CAT_PASTRY
subcategory = CAT_PASTRY
/datum/crafting_recipe/food/honeybun
name = "Honey bun"
@@ -295,4 +295,4 @@
/datum/reagent/consumable/honey = 5
)
result = /obj/item/weapon/reagent_containers/food/snacks/honeybun
category = CAT_PASTRY
subcategory = CAT_PASTRY
@@ -11,7 +11,7 @@
/obj/item/weapon/reagent_containers/food/snacks/grown/banana = 1
)
result = /obj/item/weapon/reagent_containers/food/snacks/pie/cream
category = CAT_PIE
subcategory = CAT_PIE
/datum/crafting_recipe/food/meatpie
name = "Meat pie"
@@ -22,7 +22,7 @@
/obj/item/weapon/reagent_containers/food/snacks/meat/steak/plain = 1
)
result = /obj/item/weapon/reagent_containers/food/snacks/pie/meatpie
category = CAT_PIE
subcategory = CAT_PIE
/datum/crafting_recipe/food/tofupie
name = "Tofu pie"
@@ -31,7 +31,7 @@
/obj/item/weapon/reagent_containers/food/snacks/tofu = 1
)
result = /obj/item/weapon/reagent_containers/food/snacks/pie/tofupie
category = CAT_PIE
subcategory = CAT_PIE
/datum/crafting_recipe/food/xenopie
name = "Xeno pie"
@@ -40,7 +40,7 @@
/obj/item/weapon/reagent_containers/food/snacks/meat/cutlet/xeno = 1
)
result = /obj/item/weapon/reagent_containers/food/snacks/pie/xemeatpie
category = CAT_PIE
subcategory = CAT_PIE
/datum/crafting_recipe/food/cherrypie
name = "Cherry pie"
@@ -49,7 +49,7 @@
/obj/item/weapon/reagent_containers/food/snacks/grown/cherries = 1
)
result = /obj/item/weapon/reagent_containers/food/snacks/pie/cherrypie
category = CAT_PIE
subcategory = CAT_PIE
/datum/crafting_recipe/food/berryclafoutis
name = "Berry clafoutis"
@@ -58,7 +58,7 @@
/obj/item/weapon/reagent_containers/food/snacks/grown/berries = 1
)
result = /obj/item/weapon/reagent_containers/food/snacks/pie/berryclafoutis
category = CAT_PIE
subcategory = CAT_PIE
/datum/crafting_recipe/food/bearypie
name = "Beary Pie"
@@ -68,7 +68,7 @@
/obj/item/weapon/reagent_containers/food/snacks/meat/steak/bear = 1
)
result = /obj/item/weapon/reagent_containers/food/snacks/pie/bearypie
category = CAT_PIE
subcategory = CAT_PIE
/datum/crafting_recipe/food/amanitapie
name = "Amanita pie"
@@ -77,7 +77,7 @@
/obj/item/weapon/reagent_containers/food/snacks/grown/mushroom/amanita = 1
)
result = /obj/item/weapon/reagent_containers/food/snacks/pie/amanita_pie
category = CAT_PIE
subcategory = CAT_PIE
/datum/crafting_recipe/food/plumppie
name = "Plump pie"
@@ -86,7 +86,7 @@
/obj/item/weapon/reagent_containers/food/snacks/grown/mushroom/plumphelmet = 1
)
result = /obj/item/weapon/reagent_containers/food/snacks/pie/plump_pie
category = CAT_PIE
subcategory = CAT_PIE
/datum/crafting_recipe/food/applepie
name = "Apple pie"
@@ -95,7 +95,7 @@
/obj/item/weapon/reagent_containers/food/snacks/grown/apple = 1
)
result = /obj/item/weapon/reagent_containers/food/snacks/pie/applepie
category = CAT_PIE
subcategory = CAT_PIE
/datum/crafting_recipe/food/pumpkinpie
name = "Pumpkin pie"
@@ -106,7 +106,7 @@
/obj/item/weapon/reagent_containers/food/snacks/grown/pumpkin = 1
)
result = /obj/item/weapon/reagent_containers/food/snacks/pie/pumpkinpie
category = CAT_PIE
subcategory = CAT_PIE
/datum/crafting_recipe/food/goldenappletart
name = "Golden apple tart"
@@ -117,7 +117,7 @@
/obj/item/weapon/reagent_containers/food/snacks/grown/apple/gold = 1
)
result = /obj/item/weapon/reagent_containers/food/snacks/pie/appletart
category = CAT_PIE
subcategory = CAT_PIE
/datum/crafting_recipe/food/grapetart
name = "Grape tart"
@@ -128,7 +128,7 @@
/obj/item/weapon/reagent_containers/food/snacks/grown/grapes = 3
)
result = /obj/item/weapon/reagent_containers/food/snacks/pie/grapetart
category = CAT_PIE
subcategory = CAT_PIE
/datum/crafting_recipe/food/blumpkinpie
name = "Blumpkin pie"
@@ -139,7 +139,7 @@
/obj/item/weapon/reagent_containers/food/snacks/grown/blumpkin = 1
)
result = /obj/item/weapon/reagent_containers/food/snacks/pie/blumpkinpie
category = CAT_PIE
subcategory = CAT_PIE
/datum/crafting_recipe/food/dulcedebatata
name = "Dulce de batata"
@@ -149,7 +149,7 @@
/obj/item/weapon/reagent_containers/food/snacks/grown/potato/sweet = 2
)
result = /obj/item/weapon/reagent_containers/food/snacks/pie/dulcedebatata
category = CAT_PIE
subcategory = CAT_PIE
/datum/crafting_recipe/food/frostypie
name = "Frosty pie"
@@ -158,4 +158,4 @@
/obj/item/weapon/reagent_containers/food/snacks/grown/bluecherries = 1
)
result = /obj/item/weapon/reagent_containers/food/snacks/pie/frostypie
category = CAT_PIE
subcategory = CAT_PIE
@@ -11,7 +11,7 @@
/obj/item/weapon/reagent_containers/food/snacks/grown/tomato = 1
)
result = /obj/item/weapon/reagent_containers/food/snacks/pizza/margherita
category = CAT_PIZZA
subcategory = CAT_PIZZA
/datum/crafting_recipe/food/meatpizza
name = "Meat pizza"
@@ -22,7 +22,7 @@
/obj/item/weapon/reagent_containers/food/snacks/grown/tomato = 1
)
result = /obj/item/weapon/reagent_containers/food/snacks/pizza/meat
category = CAT_PIZZA
subcategory = CAT_PIZZA
/datum/crafting_recipe/food/mushroompizza
name = "Mushroom pizza"
@@ -31,7 +31,7 @@
/obj/item/weapon/reagent_containers/food/snacks/grown/mushroom = 5
)
result = /obj/item/weapon/reagent_containers/food/snacks/pizza/mushroom
category = CAT_PIZZA
subcategory = CAT_PIZZA
/datum/crafting_recipe/food/vegetablepizza
name = "Vegetable pizza"
@@ -43,7 +43,7 @@
/obj/item/weapon/reagent_containers/food/snacks/grown/tomato = 1
)
result = /obj/item/weapon/reagent_containers/food/snacks/pizza/vegetable
category = CAT_PIZZA
subcategory = CAT_PIZZA
/datum/crafting_recipe/food/donpocketpizza
name = "Donkpocket pizza"
@@ -54,7 +54,7 @@
/obj/item/weapon/reagent_containers/food/snacks/grown/tomato = 1
)
result = /obj/item/weapon/reagent_containers/food/snacks/pizza/donkpocket
category = CAT_PIZZA
subcategory = CAT_PIZZA
/datum/crafting_recipe/food/dankpizza
name = "Dank pizza"
@@ -65,7 +65,7 @@
/obj/item/weapon/reagent_containers/food/snacks/grown/tomato = 1
)
result = /obj/item/weapon/reagent_containers/food/snacks/pizza/dank
category = CAT_PIZZA
subcategory = CAT_PIZZA
/datum/crafting_recipe/food/sassysagepizza
name = "Sassysage pizza"
@@ -76,4 +76,4 @@
/obj/item/weapon/reagent_containers/food/snacks/grown/tomato = 1
)
result = /obj/item/weapon/reagent_containers/food/snacks/pizza/sassysage
category = CAT_PIZZA
subcategory = CAT_PIZZA
@@ -11,7 +11,7 @@
/obj/item/weapon/reagent_containers/food/snacks/grown/apple = 1
)
result = /obj/item/weapon/reagent_containers/food/snacks/salad/herbsalad
category = CAT_SALAD
subcategory = CAT_SALAD
/datum/crafting_recipe/food/aesirsalad
name = "Aesir salad"
@@ -21,7 +21,7 @@
/obj/item/weapon/reagent_containers/food/snacks/grown/apple/gold = 1
)
result = /obj/item/weapon/reagent_containers/food/snacks/salad/aesirsalad
category = CAT_SALAD
subcategory = CAT_SALAD
/datum/crafting_recipe/food/validsalad
name = "Valid salad"
@@ -32,7 +32,7 @@
/obj/item/weapon/reagent_containers/food/snacks/faggot = 1
)
result = /obj/item/weapon/reagent_containers/food/snacks/salad/validsalad
category = CAT_SALAD
subcategory = CAT_SALAD
/datum/crafting_recipe/food/monkeysdelight
name = "Monkeys delight"
@@ -45,7 +45,7 @@
/obj/item/weapon/reagent_containers/food/snacks/grown/banana = 1
)
result = /obj/item/weapon/reagent_containers/food/snacks/soup/monkeysdelight
category = CAT_SALAD
subcategory = CAT_SALAD
/datum/crafting_recipe/food/oatmeal
name = "Oatmeal"
@@ -55,7 +55,7 @@
/obj/item/weapon/reagent_containers/food/snacks/grown/oat = 1
)
result = /obj/item/weapon/reagent_containers/food/snacks/salad/oatmeal
category = CAT_SALAD
subcategory = CAT_SALAD
/datum/crafting_recipe/food/fruitsalad
name = "Fruit salad"
@@ -68,7 +68,7 @@
)
result = /obj/item/weapon/reagent_containers/food/snacks/salad/fruit
category = CAT_SALAD
subcategory = CAT_SALAD
/datum/crafting_recipe/food/junglesalad
name = "Jungle salad"
@@ -81,7 +81,7 @@
)
result = /obj/item/weapon/reagent_containers/food/snacks/salad/jungle
category = CAT_SALAD
subcategory = CAT_SALAD
/datum/crafting_recipe/food/citrusdelight
name = "Citrus delight"
@@ -93,7 +93,7 @@
)
result = /obj/item/weapon/reagent_containers/food/snacks/salad/citrusdelight
category = CAT_SALAD
subcategory = CAT_SALAD
/datum/crafting_recipe/food/ricepork
name = "Rice and pork"
@@ -102,7 +102,7 @@
/obj/item/weapon/reagent_containers/food/snacks/meat/cutlet = 2
)
result = /obj/item/weapon/reagent_containers/food/snacks/salad/ricepork
category = CAT_SALAD
subcategory = CAT_SALAD
/datum/crafting_recipe/food/eggbowl
name = "Egg bowl"
@@ -113,7 +113,7 @@
/obj/item/weapon/reagent_containers/food/snacks/grown/corn = 1
)
result = /obj/item/weapon/reagent_containers/food/snacks/salad/eggbowl
category = CAT_SALAD
subcategory = CAT_SALAD
/datum/crafting_recipe/food/ricepudding
name = "Rice pudding"
@@ -123,4 +123,4 @@
/obj/item/weapon/reagent_containers/food/snacks/salad/boiledrice = 1
)
result = /obj/item/weapon/reagent_containers/food/snacks/salad/ricepudding
category = CAT_SALAD
subcategory = CAT_SALAD
@@ -14,7 +14,7 @@
/obj/item/weapon/reagent_containers/food/snacks/cheesewedge = 1
)
result = /obj/item/weapon/reagent_containers/food/snacks/sandwich
category = CAT_SANDWICH
subcategory = CAT_SANDWICH
/datum/crafting_recipe/food/grilledcheesesandwich
name = "Grilled cheese sandwich"
@@ -23,7 +23,7 @@
/obj/item/weapon/reagent_containers/food/snacks/cheesewedge = 2
)
result = /obj/item/weapon/reagent_containers/food/snacks/grilledcheese
category = CAT_SANDWICH
subcategory = CAT_SANDWICH
/datum/crafting_recipe/food/slimesandwich
name = "Jelly sandwich"
@@ -32,7 +32,7 @@
/obj/item/weapon/reagent_containers/food/snacks/breadslice/plain = 2,
)
result = /obj/item/weapon/reagent_containers/food/snacks/jellysandwich/slime
category = CAT_SANDWICH
subcategory = CAT_SANDWICH
/datum/crafting_recipe/food/cherrysandwich
name = "Jelly sandwich"
@@ -41,7 +41,7 @@
/obj/item/weapon/reagent_containers/food/snacks/breadslice/plain = 2,
)
result = /obj/item/weapon/reagent_containers/food/snacks/jellysandwich/cherry
category = CAT_SANDWICH
subcategory = CAT_SANDWICH
/datum/crafting_recipe/food/icecreamsandwich
name = "Icecream sandwich"
@@ -51,7 +51,7 @@
/obj/item/weapon/reagent_containers/food/snacks/icecream = 1
)
result = /obj/item/weapon/reagent_containers/food/snacks/icecreamsandwich
category = CAT_SANDWICH
subcategory = CAT_SANDWICH
/datum/crafting_recipe/food/notasandwich
name = "Not a sandwich"
@@ -60,7 +60,7 @@
/obj/item/clothing/mask/fakemoustache = 1
)
result = /obj/item/weapon/reagent_containers/food/snacks/notasandwich
category = CAT_SANDWICH
subcategory = CAT_SANDWICH
@@ -13,7 +13,7 @@
/obj/item/weapon/reagent_containers/food/snacks/grown/potato = 1
)
result = /obj/item/weapon/reagent_containers/food/snacks/soup/meatball
category = CAT_SOUP
subcategory = CAT_SOUP
/datum/crafting_recipe/food/vegetablesoup
name = "Vegetable soup"
@@ -26,7 +26,7 @@
/obj/item/weapon/reagent_containers/food/snacks/grown/potato = 1
)
result = /obj/item/weapon/reagent_containers/food/snacks/soup/vegetable
category = CAT_SOUP
subcategory = CAT_SOUP
/datum/crafting_recipe/food/nettlesoup
name = "Nettle soup"
@@ -38,7 +38,7 @@
/obj/item/weapon/reagent_containers/food/snacks/boiledegg = 1
)
result = /obj/item/weapon/reagent_containers/food/snacks/soup/nettle
category = CAT_SOUP
subcategory = CAT_SOUP
/datum/crafting_recipe/food/wingfangchu
name = "Wingfangchu"
@@ -48,7 +48,7 @@
/obj/item/weapon/reagent_containers/food/snacks/meat/cutlet/xeno = 2
)
result = /obj/item/weapon/reagent_containers/food/snacks/soup/wingfangchu
category = CAT_SOUP
subcategory = CAT_SOUP
/datum/crafting_recipe/food/wishsoup
name = "Wish soup"
@@ -57,7 +57,7 @@
/obj/item/weapon/reagent_containers/glass/bowl = 1
)
result= /obj/item/weapon/reagent_containers/food/snacks/soup/wish
category = CAT_SOUP
subcategory = CAT_SOUP
/datum/crafting_recipe/food/hotchili
name = "Hot chili"
@@ -68,7 +68,7 @@
/obj/item/weapon/reagent_containers/food/snacks/grown/tomato = 1
)
result = /obj/item/weapon/reagent_containers/food/snacks/soup/hotchili
category = CAT_SOUP
subcategory = CAT_SOUP
/datum/crafting_recipe/food/coldchili
name = "Cold chili"
@@ -79,7 +79,7 @@
/obj/item/weapon/reagent_containers/food/snacks/grown/tomato = 1
)
result = /obj/item/weapon/reagent_containers/food/snacks/soup/coldchili
category = CAT_SOUP
subcategory = CAT_SOUP
/datum/crafting_recipe/food/tomatosoup
name = "Tomato soup"
@@ -89,7 +89,7 @@
/obj/item/weapon/reagent_containers/food/snacks/grown/tomato = 2
)
result = /obj/item/weapon/reagent_containers/food/snacks/soup/tomato
category = CAT_SOUP
subcategory = CAT_SOUP
/datum/crafting_recipe/food/eyeballsoup
name = "Eyeball soup"
@@ -100,7 +100,7 @@
/obj/item/organ/eyes = 1
)
result = /obj/item/weapon/reagent_containers/food/snacks/soup/tomato/eyeball
category = CAT_SOUP
subcategory = CAT_SOUP
/datum/crafting_recipe/food/milosoup
@@ -112,7 +112,7 @@
/obj/item/weapon/reagent_containers/food/snacks/tofu = 2
)
result = /obj/item/weapon/reagent_containers/food/snacks/soup/milo
category = CAT_SOUP
subcategory = CAT_SOUP
/datum/crafting_recipe/food/bloodsoup
name = "Blood soup"
@@ -122,7 +122,7 @@
/obj/item/weapon/reagent_containers/food/snacks/grown/tomato/blood = 2
)
result = /obj/item/weapon/reagent_containers/food/snacks/soup/blood
category = CAT_SOUP
subcategory = CAT_SOUP
/datum/crafting_recipe/food/slimesoup
name = "Slime soup"
@@ -132,7 +132,7 @@
/obj/item/weapon/reagent_containers/glass/bowl = 1
)
result = /obj/item/weapon/reagent_containers/food/snacks/soup/slime
category = CAT_SOUP
subcategory = CAT_SOUP
/datum/crafting_recipe/food/clownstears
name = "Clowns tears"
@@ -143,7 +143,7 @@
/obj/item/weapon/ore/bananium = 1
)
result = /obj/item/weapon/reagent_containers/food/snacks/soup/clownstears
category = CAT_SOUP
subcategory = CAT_SOUP
/datum/crafting_recipe/food/mysterysoup
name = "Mystery soup"
@@ -156,7 +156,7 @@
/obj/item/weapon/reagent_containers/food/snacks/cheesewedge = 1,
)
result = /obj/item/weapon/reagent_containers/food/snacks/soup/mystery
category = CAT_SOUP
subcategory = CAT_SOUP
/datum/crafting_recipe/food/mushroomsoup
name = "Mushroom soup"
@@ -167,7 +167,7 @@
/obj/item/weapon/reagent_containers/food/snacks/grown/mushroom/chanterelle = 1
)
result = /obj/item/weapon/reagent_containers/food/snacks/soup/mushroom
category = CAT_SOUP
subcategory = CAT_SOUP
/datum/crafting_recipe/food/beetsoup
name = "Beet soup"
@@ -178,7 +178,7 @@
/obj/item/weapon/reagent_containers/food/snacks/grown/cabbage = 1,
)
result = /obj/item/weapon/reagent_containers/food/snacks/soup/beet
category = CAT_SOUP
subcategory = CAT_SOUP
/datum/crafting_recipe/food/stew
name = "Stew"
@@ -193,7 +193,7 @@
/obj/item/weapon/reagent_containers/food/snacks/grown/mushroom = 1
)
result = /obj/item/weapon/reagent_containers/food/snacks/soup/stew
category = CAT_SOUP
subcategory = CAT_SOUP
/datum/crafting_recipe/food/spacylibertyduff
name = "Spacy liberty duff"
@@ -203,7 +203,7 @@
/obj/item/weapon/reagent_containers/food/snacks/grown/mushroom/libertycap = 3
)
result = /obj/item/weapon/reagent_containers/food/snacks/soup/spacylibertyduff
category = CAT_SOUP
subcategory = CAT_SOUP
/datum/crafting_recipe/food/amanitajelly
name = "Amanita jelly"
@@ -213,7 +213,7 @@
/obj/item/weapon/reagent_containers/food/snacks/grown/mushroom/amanita = 3
)
result = /obj/item/weapon/reagent_containers/food/snacks/soup/amanitajelly
category = CAT_SOUP
subcategory = CAT_SOUP
/datum/crafting_recipe/food/sweetpotatosoup
name = "Sweet potato soup"
@@ -224,7 +224,7 @@
/obj/item/weapon/reagent_containers/food/snacks/grown/potato/sweet = 2
)
result = /obj/item/weapon/reagent_containers/food/snacks/soup/sweetpotato
category = CAT_SOUP
subcategory = CAT_SOUP
/datum/crafting_recipe/food/redbeetsoup
name = "Red beet soup"
@@ -235,4 +235,4 @@
/obj/item/weapon/reagent_containers/food/snacks/grown/cabbage = 1
)
result = /obj/item/weapon/reagent_containers/food/snacks/soup/beet/red
category = CAT_SOUP
subcategory = CAT_SOUP
@@ -10,7 +10,7 @@
/obj/item/weapon/reagent_containers/food/snacks/grown/tomato = 2
)
result = /obj/item/weapon/reagent_containers/food/snacks/pastatomato
category = CAT_SPAGHETTI
subcategory = CAT_SPAGHETTI
/datum/crafting_recipe/food/copypasta
name = "Copypasta"
@@ -18,7 +18,7 @@
/obj/item/weapon/reagent_containers/food/snacks/pastatomato = 2
)
result = /obj/item/weapon/reagent_containers/food/snacks/copypasta
category = CAT_SPAGHETTI
subcategory = CAT_SPAGHETTI
/datum/crafting_recipe/food/spaghettimeatball
name = "Spaghetti meatball"
@@ -27,7 +27,7 @@
/obj/item/weapon/reagent_containers/food/snacks/faggot = 2
)
result = /obj/item/weapon/reagent_containers/food/snacks/meatballspaghetti
category = CAT_SPAGHETTI
subcategory = CAT_SPAGHETTI
/datum/crafting_recipe/food/spesslaw
name = "Spesslaw"
@@ -36,7 +36,7 @@
/obj/item/weapon/reagent_containers/food/snacks/faggot = 4
)
result = /obj/item/weapon/reagent_containers/food/snacks/spesslaw
category = CAT_SPAGHETTI
subcategory = CAT_SPAGHETTI
/datum/crafting_recipe/food/beefnoodle
name = "Beef noodle"
@@ -47,7 +47,7 @@
/obj/item/weapon/reagent_containers/food/snacks/grown/cabbage = 1
)
result = /obj/item/weapon/reagent_containers/food/snacks/beefnoodle
category = CAT_SPAGHETTI
subcategory = CAT_SPAGHETTI
/datum/crafting_recipe/food/chowmein
name = "Chowmein"
@@ -58,7 +58,7 @@
/obj/item/weapon/reagent_containers/food/snacks/grown/carrot = 1
)
result = /obj/item/weapon/reagent_containers/food/snacks/chowmein
category = CAT_SPAGHETTI
subcategory = CAT_SPAGHETTI
/datum/crafting_recipe/food/butternoodles
name = "Butter Noodles"
@@ -67,4 +67,4 @@
/obj/item/weapon/reagent_containers/food/snacks/butter = 1
)
result = /obj/item/weapon/reagent_containers/food/snacks/butternoodles
category = CAT_SPAGHETTI
subcategory = CAT_SPAGHETTI
+10 -6
View File
@@ -98,9 +98,9 @@ GLOBAL_VAR_CONST(access_away_generic3, 207)
GLOBAL_VAR_CONST(access_away_generic4, 208)
/obj/var/list/req_access = null
/obj/var/req_access_txt = "0"
/obj/var/req_access_txt = "0" as text
/obj/var/list/req_one_access = null
/obj/var/req_one_access_txt = "0"
/obj/var/req_one_access_txt = "0" as text
//returns 1 if this mob has sufficient access to use this object
/obj/proc/allowed(mob/M)
@@ -149,10 +149,14 @@ GLOBAL_VAR_CONST(access_away_generic4, 208)
//Call this before using req_access or req_one_access directly
/obj/proc/gen_access()
//These generations have been moved out of /obj/New() because they were slowing down the creation of objects that never even used the access system.
for(var/a in text2access(req_access_txt))
req_access += a
for(var/b in text2access(req_one_access_txt))
req_one_access += b
if(!req_access)
req_access = list()
for(var/a in text2access(req_access_txt))
req_access += a
if(!req_one_access)
req_one_access = list()
for(var/b in text2access(req_one_access_txt))
req_one_access += b
/obj/proc/check_access(obj/item/I)
gen_access()
+4 -2
View File
@@ -89,7 +89,8 @@ Shaft Miner
backpack_contents = list(
/obj/item/weapon/storage/bag/ore=1,\
/obj/item/weapon/kitchen/knife/combat/survival=1,\
/obj/item/weapon/mining_voucher=1)
/obj/item/weapon/mining_voucher=1,\
/obj/item/stack/marker_beacon/ten=1)
backpack = /obj/item/weapon/storage/backpack/explorer
satchel = /obj/item/weapon/storage/backpack/satchel/explorer
@@ -113,7 +114,8 @@ Shaft Miner
/obj/item/weapon/kitchen/knife/combat/survival=1,
/obj/item/weapon/mining_voucher=1,
/obj/item/device/t_scanner/adv_mining_scanner/lesser=1,
/obj/item/weapon/gun/energy/kinetic_accelerator=1)
/obj/item/weapon/gun/energy/kinetic_accelerator=1,\
/obj/item/stack/marker_beacon/ten=1)
/datum/outfit/job/miner/equipped/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE)
..()
+5 -2
View File
@@ -98,13 +98,16 @@ Station Engineer
pda_slot = slot_l_store
backpack_contents = list(/obj/item/device/modular_computer/tablet/preset/advanced=1)
/datum/outfit/job/engineer/rig
/datum/outfit/job/engineer/gloved
name = "Station Engineer (Gloves)"
gloves = /obj/item/clothing/gloves/color/yellow
/datum/outfit/job/engineer/gloved/rig
name = "Station Engineer (Hardsuit)"
mask = /obj/item/clothing/mask/breath
suit = /obj/item/clothing/suit/space/hardsuit/engine
suit_store = /obj/item/weapon/tank/internals/oxygen
gloves = /obj/item/clothing/gloves/color/yellow
head = null
internals_slot = slot_s_store
+185 -190
View File
@@ -1,190 +1,185 @@
/datum/job
//The name of the job
var/title = "NOPE"
//Job access. The use of minimal_access or access is determined by a config setting: config.jobs_have_minimal_access
var/list/minimal_access = list() //Useful for servers which prefer to only have access given to the places a job absolutely needs (Larger server population)
var/list/access = list() //Useful for servers which either have fewer players, so each person needs to fill more than one role, or servers which like to give more access, so players can't hide forever in their super secure departments (I'm looking at you, chemistry!)
//Determines who can demote this position
var/department_head = list()
//Tells the given channels that the given mob is the new department head. See communications.dm for valid channels.
var/list/head_announce = null
//Bitflags for the job
var/flag = 0
var/department_flag = 0
//Players will be allowed to spawn in as jobs that are set to "Station"
var/faction = "None"
//How many players can be this job
var/total_positions = 0
//How many players can spawn in as this job
var/spawn_positions = 0
//How many players have this job
var/current_positions = 0
//Supervisors, who this person answers to directly
var/supervisors = ""
//Sellection screen color
var/selection_color = "#ffffff"
//If this is set to 1, a text is printed to the player when jobs are assigned, telling him that he should let admins know that he has to disconnect.
var/req_admin_notify
//If you have the use_age_restriction_for_jobs config option enabled and the database set up, this option will add a requirement for players to be at least minimal_player_age days old. (meaning they first signed in at least that many days before.)
var/minimal_player_age = 0
var/outfit = null
//Only override this proc
//H is usually a human unless an /equip override transformed it
/datum/job/proc/after_spawn(mob/living/H, mob/M)
//do actions on H but send messages to M as the key may not have been transferred_yet
/datum/job/proc/announce(mob/living/carbon/human/H)
if(head_announce)
announce_head(H, head_announce)
//Don't override this unless the job transforms into a non-human (Silicons do this for example)
/datum/job/proc/equip(mob/living/carbon/human/H, visualsOnly = FALSE, announce = TRUE)
if(!H)
return 0
//Equip the rest of the gear
H.dna.species.before_equip_job(src, H, visualsOnly)
if(outfit)
H.equipOutfit(outfit, visualsOnly)
H.dna.species.after_equip_job(src, H, visualsOnly)
if(!visualsOnly && announce)
announce(H)
if(config.enforce_human_authority && (title in GLOB.command_positions))
H.dna.features["tail_human"] = "None"
H.dna.features["ears"] = "None"
H.regenerate_icons()
/datum/job/proc/get_access()
if(!config) //Needed for robots.
return src.minimal_access.Copy()
. = list()
if(config.jobs_have_minimal_access)
. = src.minimal_access.Copy()
else
. = src.access.Copy()
if(config.jobs_have_maint_access & EVERYONE_HAS_MAINT_ACCESS) //Config has global maint access set
. |= list(GLOB.access_maint_tunnels)
/datum/job/proc/announce_head(var/mob/living/carbon/human/H, var/channels) //tells the given channel that the given mob is the new department head. See communications.dm for valid channels.
if(H && GLOB.announcement_systems.len)
//timer because these should come after the captain announcement
SSticker.OnRoundstart(CALLBACK(GLOBAL_PROC, .proc/addtimer, CALLBACK(pick(GLOB.announcement_systems), /obj/machinery/announcement_system/proc/announce, "NEWHEAD", H.real_name, H.job, channels), 1))
//If the configuration option is set to require players to be logged as old enough to play certain jobs, then this proc checks that they are, otherwise it just returns 1
/datum/job/proc/player_old_enough(client/C)
if(available_in_days(C) == 0)
return 1 //Available in 0 days = available right now = player is old enough to play.
return 0
/datum/job/proc/available_in_days(client/C)
if(!C)
return 0
if(!config.use_age_restriction_for_jobs)
return 0
if(!isnum(C.player_age))
return 0 //This is only a number if the db connection is established, otherwise it is text: "Requires database", meaning these restrictions cannot be enforced
if(!isnum(minimal_player_age))
return 0
return max(0, minimal_player_age - C.player_age)
/datum/job/proc/config_check()
return 1
/datum/job/proc/map_check()
return TRUE
/datum/outfit/job
name = "Standard Gear"
var/jobtype = null
uniform = /obj/item/clothing/under/color/grey
id = /obj/item/weapon/card/id
ears = /obj/item/device/radio/headset
belt = /obj/item/device/pda
back = /obj/item/weapon/storage/backpack
shoes = /obj/item/clothing/shoes/sneakers/black
var/list/implants = null
var/backpack = /obj/item/weapon/storage/backpack
var/satchel = /obj/item/weapon/storage/backpack/satchel
var/dufflebag = /obj/item/weapon/storage/backpack/dufflebag
var/box = /obj/item/weapon/storage/box/survival
var/pda_slot = slot_belt
/datum/outfit/job/pre_equip(mob/living/carbon/human/H, visualsOnly = FALSE)
switch(H.backbag)
if(GBACKPACK)
back = /obj/item/weapon/storage/backpack //Grey backpack
if(GSATCHEL)
back = /obj/item/weapon/storage/backpack/satchel //Grey satchel
if(GDUFFLEBAG)
back = /obj/item/weapon/storage/backpack/dufflebag //Grey Dufflebag
if(LSATCHEL)
back = /obj/item/weapon/storage/backpack/satchel/leather //Leather Satchel
if(DSATCHEL)
back = satchel //Department satchel
if(DDUFFLEBAG)
back = dufflebag //Department dufflebag
else
back = backpack //Department backpack
if(box)
backpack_contents.Insert(1, box) // Box always takes a first slot in backpack
backpack_contents[box] = 1
/datum/outfit/job/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE)
if(visualsOnly)
return
var/datum/job/J = SSjob.GetJobType(jobtype)
if(!J)
J = SSjob.GetJob(H.job)
var/obj/item/weapon/card/id/C = H.wear_id
if(istype(C))
C.access = J.get_access()
C.registered_name = H.real_name
C.assignment = J.title
C.update_label()
H.sec_hud_set_ID()
var/obj/item/device/pda/PDA = H.get_item_by_slot(pda_slot)
if(istype(PDA))
PDA.owner = H.real_name
PDA.ownjob = J.title
PDA.update_label()
if(implants)
for(var/implant_type in implants)
var/obj/item/weapon/implant/I = new implant_type(H)
I.implant(H, null, silent=TRUE)
/datum/job
//The name of the job
var/title = "NOPE"
//Job access. The use of minimal_access or access is determined by a config setting: config.jobs_have_minimal_access
var/list/minimal_access = list() //Useful for servers which prefer to only have access given to the places a job absolutely needs (Larger server population)
var/list/access = list() //Useful for servers which either have fewer players, so each person needs to fill more than one role, or servers which like to give more access, so players can't hide forever in their super secure departments (I'm looking at you, chemistry!)
//Determines who can demote this position
var/department_head = list()
//Tells the given channels that the given mob is the new department head. See communications.dm for valid channels.
var/list/head_announce = null
//Bitflags for the job
var/flag = 0
var/department_flag = 0
//Players will be allowed to spawn in as jobs that are set to "Station"
var/faction = "None"
//How many players can be this job
var/total_positions = 0
//How many players can spawn in as this job
var/spawn_positions = 0
//How many players have this job
var/current_positions = 0
//Supervisors, who this person answers to directly
var/supervisors = ""
//Sellection screen color
var/selection_color = "#ffffff"
//If this is set to 1, a text is printed to the player when jobs are assigned, telling him that he should let admins know that he has to disconnect.
var/req_admin_notify
//If you have the use_age_restriction_for_jobs config option enabled and the database set up, this option will add a requirement for players to be at least minimal_player_age days old. (meaning they first signed in at least that many days before.)
var/minimal_player_age = 0
var/outfit = null
//Only override this proc
//H is usually a human unless an /equip override transformed it
/datum/job/proc/after_spawn(mob/living/H, mob/M)
//do actions on H but send messages to M as the key may not have been transferred_yet
/datum/job/proc/announce(mob/living/carbon/human/H)
if(head_announce)
announce_head(H, head_announce)
//Don't override this unless the job transforms into a non-human (Silicons do this for example)
/datum/job/proc/equip(mob/living/carbon/human/H, visualsOnly = FALSE, announce = TRUE)
if(!H)
return 0
//Equip the rest of the gear
H.dna.species.before_equip_job(src, H, visualsOnly)
if(outfit)
H.equipOutfit(outfit, visualsOnly)
H.dna.species.after_equip_job(src, H, visualsOnly)
if(!visualsOnly && announce)
announce(H)
if(config.enforce_human_authority && (title in GLOB.command_positions))
H.dna.features["tail_human"] = "None"
H.dna.features["ears"] = "None"
H.regenerate_icons()
/datum/job/proc/get_access()
if(!config) //Needed for robots.
return src.minimal_access.Copy()
. = list()
if(config.jobs_have_minimal_access)
. = src.minimal_access.Copy()
else
. = src.access.Copy()
if(config.jobs_have_maint_access & EVERYONE_HAS_MAINT_ACCESS) //Config has global maint access set
. |= list(GLOB.access_maint_tunnels)
/datum/job/proc/announce_head(var/mob/living/carbon/human/H, var/channels) //tells the given channel that the given mob is the new department head. See communications.dm for valid channels.
if(H && GLOB.announcement_systems.len)
//timer because these should come after the captain announcement
SSticker.OnRoundstart(CALLBACK(GLOBAL_PROC, .proc/addtimer, CALLBACK(pick(GLOB.announcement_systems), /obj/machinery/announcement_system/proc/announce, "NEWHEAD", H.real_name, H.job, channels), 1))
//If the configuration option is set to require players to be logged as old enough to play certain jobs, then this proc checks that they are, otherwise it just returns 1
/datum/job/proc/player_old_enough(client/C)
if(available_in_days(C) == 0)
return 1 //Available in 0 days = available right now = player is old enough to play.
return 0
/datum/job/proc/available_in_days(client/C)
if(!C)
return 0
if(!config.use_age_restriction_for_jobs)
return 0
if(!isnum(C.player_age))
return 0 //This is only a number if the db connection is established, otherwise it is text: "Requires database", meaning these restrictions cannot be enforced
if(!isnum(minimal_player_age))
return 0
return max(0, minimal_player_age - C.player_age)
/datum/job/proc/config_check()
return 1
/datum/job/proc/map_check()
return TRUE
/datum/outfit/job
name = "Standard Gear"
var/jobtype = null
uniform = /obj/item/clothing/under/color/grey
id = /obj/item/weapon/card/id
ears = /obj/item/device/radio/headset
belt = /obj/item/device/pda
back = /obj/item/weapon/storage/backpack
shoes = /obj/item/clothing/shoes/sneakers/black
var/backpack = /obj/item/weapon/storage/backpack
var/satchel = /obj/item/weapon/storage/backpack/satchel
var/dufflebag = /obj/item/weapon/storage/backpack/dufflebag
var/box = /obj/item/weapon/storage/box/survival
var/pda_slot = slot_belt
/datum/outfit/job/pre_equip(mob/living/carbon/human/H, visualsOnly = FALSE)
switch(H.backbag)
if(GBACKPACK)
back = /obj/item/weapon/storage/backpack //Grey backpack
if(GSATCHEL)
back = /obj/item/weapon/storage/backpack/satchel //Grey satchel
if(GDUFFLEBAG)
back = /obj/item/weapon/storage/backpack/dufflebag //Grey Dufflebag
if(LSATCHEL)
back = /obj/item/weapon/storage/backpack/satchel/leather //Leather Satchel
if(DSATCHEL)
back = satchel //Department satchel
if(DDUFFLEBAG)
back = dufflebag //Department dufflebag
else
back = backpack //Department backpack
if(box)
if(!backpack_contents)
backpack_contents = list()
backpack_contents.Insert(1, box) // Box always takes a first slot in backpack
backpack_contents[box] = 1
/datum/outfit/job/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE)
if(visualsOnly)
return
var/datum/job/J = SSjob.GetJobType(jobtype)
if(!J)
J = SSjob.GetJob(H.job)
var/obj/item/weapon/card/id/C = H.wear_id
if(istype(C))
C.access = J.get_access()
C.registered_name = H.real_name
C.assignment = J.title
C.update_label()
H.sec_hud_set_ID()
var/obj/item/device/pda/PDA = H.get_item_by_slot(pda_slot)
if(istype(PDA))
PDA.owner = H.real_name
PDA.ownjob = J.title
PDA.update_label()
+22
View File
@@ -0,0 +1,22 @@
/datum/language/beachbum
name = "Beach Bumbian"
desc = "For when you're too toasted to speak normally."
speech_verb = "mumbles"
ask_verb = "grills"
exclaim_verb = "hollers"
key = "u"
space_chance = 85
default_priority = 90
syllables = list("cowabunga", "rad", "radical", "dudes", "bogus", "weeed", "every",
"dee", "dah", "woah", "surf", "blazed", "high", "heinous", "day",
"brah", "bro", "blown", "catch", "body", "beach", "oooo", "twenty",
"shiz", "phiz", "wizz", "pop", "chill", "awesome", "dude", "it",
"wax", "stoked", "yes", "ding", "way", "no", "wicked", "aaaa",
"cool", "hoo", "wah", "wee", "man", "maaaaaan", "mate", "wick",
"oh", "ocean", "up", "out", "rip", "slide", "big", "stomp",
"weed", "pot", "smoke", "four-twenty", "shove", "wacky", "hah",
"sick", "slash", "spit", "stoked", "shallow", "gun", "party",
"heavy", "stellar", "excellent", "triumphant", "babe", "four",
"tail", "trim", "tube", "wobble", "roll", "gnarly", "epic")
icon_state = "beach"
+244 -36
View File
@@ -5,9 +5,7 @@
item_state = "mining_hammer1"
name = "proto-kinetic crusher"
desc = "An early design of the proto-kinetic accelerator, it is little more than an combination of various mining tools cobbled together, forming a high-tech club. \
While it is an effective mining tool, it did little to aid any but the most skilled and/or suicidal miners against local fauna.\
\n<span class='info'>Mark a mob with the destabilizing force, then hit them in melee to activate it for extra damage. Extra damage if backstabbed in this fashion. \
This weapon is only particularly effective against large creatures.</span>"
While it is an effective mining tool, it did little to aid any but the most skilled and/or suicidal miners against local fauna."
force = 20 //As much as a bone spear, but this is significantly more annoying to carry around due to requiring the use of both hands at all times
w_class = WEIGHT_CLASS_BULKY
slot_flags = SLOT_BACK
@@ -21,9 +19,97 @@
hitsound = 'sound/weapons/bladeslice.ogg'
attack_verb = list("smashed", "crushed", "cleaved", "chopped", "pulped")
sharpness = IS_SHARP
var/list/trophies = list()
var/charged = TRUE
var/charge_time = 14
/obj/item/weapon/twohanded/required/mining_hammer/Destroy()
for(var/a in trophies)
qdel(a)
trophies = null
return ..()
/obj/item/weapon/twohanded/required/mining_hammer/examine(mob/living/user)
..()
to_chat(user, "<span class='notice'>Mark a large creature with the destabilizing force, then hit them in melee to do <b>50</b> damage.</span>")
to_chat(user, "<span class='notice'>Does <b>80</b> damage if the target is backstabbed, instead of <b>50</b>.</span>")
for(var/t in trophies)
var/obj/item/crusher_trophy/T = t
to_chat(user, "<span class='notice'>It has \a [T] attached, which causes [T.effect_desc()].</span>")
/obj/item/weapon/twohanded/required/mining_hammer/attackby(obj/item/A, mob/living/user)
if(istype(A, /obj/item/weapon/crowbar))
if(LAZYLEN(trophies))
to_chat(user, "<span class='notice'>You remove [src]'s trophies.</span>")
playsound(loc, A.usesound, 100, 1)
for(var/t in trophies)
var/obj/item/crusher_trophy/T = t
T.remove_from(src, user)
else
to_chat(user, "<span class='warning'>There are no trophies on [src].</span>")
else if(istype(A, /obj/item/crusher_trophy))
var/obj/item/crusher_trophy/T = A
T.add_to(src, user)
else
return ..()
/obj/item/weapon/twohanded/required/mining_hammer/attack(mob/living/target, mob/living/carbon/user)
var/datum/status_effect/crusher_damage/C = target.has_status_effect(STATUS_EFFECT_CRUSHERDAMAGETRACKING)
var/target_health = target.health
..()
for(var/t in trophies)
if(!QDELETED(target))
var/obj/item/crusher_trophy/T = t
T.on_melee_hit(target, user)
if(!QDELETED(C) && !QDELETED(target))
C.total_damage += target_health - target.health //we did some damage, but let's not assume how much we did
/obj/item/weapon/twohanded/required/mining_hammer/afterattack(atom/target, mob/living/user, proximity_flag)
if(!proximity_flag && charged)//Mark a target, or mine a tile.
var/turf/proj_turf = user.loc
if(!isturf(proj_turf))
return
var/obj/item/projectile/destabilizer/D = new /obj/item/projectile/destabilizer(proj_turf)
for(var/t in trophies)
var/obj/item/crusher_trophy/T = t
T.on_projectile_fire(D, user)
D.preparePixelProjectile(target, get_turf(target), user)
D.firer = user
D.hammer_synced = src
playsound(user, 'sound/weapons/plasma_cutter.ogg', 100, 1)
D.fire()
charged = FALSE
icon_state = "mining_hammer1_uncharged"
addtimer(CALLBACK(src, .proc/Recharge), charge_time)
return
if(proximity_flag && isliving(target))
var/mob/living/L = target
var/datum/status_effect/crusher_mark/CM = L.has_status_effect(STATUS_EFFECT_CRUSHERMARK)
if(!CM || CM.hammer_synced != src || !L.remove_status_effect(STATUS_EFFECT_CRUSHERMARK))
return
var/datum/status_effect/crusher_damage/C = L.has_status_effect(STATUS_EFFECT_CRUSHERDAMAGETRACKING)
var/target_health = L.health
for(var/t in trophies)
var/obj/item/crusher_trophy/T = t
T.on_mark_detonation(target, user)
new /obj/effect/temp_visual/kinetic_blast(get_turf(L))
var/backstab_dir = get_dir(user, L)
var/def_check = L.getarmor(type = "bomb")
if((user.dir & backstab_dir) && (L.dir & backstab_dir))
L.apply_damage(80, BRUTE, blocked = def_check)
playsound(user, 'sound/weapons/Kenetic_accel.ogg', 100, 1) //Seriously who spelled it wrong
else
L.apply_damage(50, BRUTE, blocked = def_check)
if(!QDELETED(C) && !QDELETED(L))
C.total_damage += target_health - L.health //we did some damage, but let's not assume how much we did
/obj/item/weapon/twohanded/required/mining_hammer/proc/Recharge()
if(!charged)
charged = TRUE
icon_state = "mining_hammer1"
playsound(src.loc, 'sound/weapons/kenetic_reload.ogg', 60, 1)
//destablizing force
/obj/item/projectile/destabilizer
name = "destabilizing force"
icon_state = "pulse1"
@@ -42,8 +128,13 @@
/obj/item/projectile/destabilizer/on_hit(atom/target, blocked = 0)
if(isliving(target))
var/mob/living/L = target
var/had_effect = (L.has_status_effect(STATUS_EFFECT_CRUSHERMARK)) //used as a boolean
var/datum/status_effect/crusher_mark/CM = L.apply_status_effect(STATUS_EFFECT_CRUSHERMARK)
CM.hammer_synced = hammer_synced
if(hammer_synced)
CM.hammer_synced = hammer_synced
for(var/t in hammer_synced.trophies)
var/obj/item/crusher_trophy/T = t
T.on_mark_application(target, CM, had_effect)
var/target_turf = get_turf(target)
if(ismineralturf(target_turf))
var/turf/closed/mineral/M = target_turf
@@ -51,36 +142,153 @@
M.gets_drilled(firer)
..()
/obj/item/weapon/twohanded/required/mining_hammer/afterattack(atom/target, mob/user, proximity_flag)
if(!proximity_flag && charged)//Mark a target, or mine a tile.
var/turf/proj_turf = user.loc
if(!isturf(proj_turf))
return
var/obj/item/projectile/destabilizer/D = new /obj/item/projectile/destabilizer(proj_turf)
D.preparePixelProjectile(target, get_turf(target), user)
D.hammer_synced = src
playsound(user, 'sound/weapons/plasma_cutter.ogg', 100, 1)
D.fire()
charged = FALSE
icon_state = "mining_hammer1_uncharged"
addtimer(CALLBACK(src, .proc/Recharge), charge_time)
return
if(proximity_flag && isliving(target))
var/mob/living/L = target
var/datum/status_effect/crusher_mark/CM = L.has_status_effect(STATUS_EFFECT_CRUSHERMARK)
if(!CM || CM.hammer_synced != src || !L.remove_status_effect(STATUS_EFFECT_CRUSHERMARK))
return
new /obj/effect/temp_visual/kinetic_blast(get_turf(L))
var/backstab_dir = get_dir(user, L)
var/def_check = L.getarmor(type = "bomb")
if((user.dir & backstab_dir) && (L.dir & backstab_dir))
L.apply_damage(80, BRUTE, blocked = def_check)
playsound(user, 'sound/weapons/Kenetic_accel.ogg', 100, 1) //Seriously who spelled it wrong
else
L.apply_damage(50, BRUTE, blocked = def_check)
//trophies
/obj/item/crusher_trophy
name = "tail spike"
desc = "A strange spike with no usage."
icon = 'icons/obj/lavaland/artefacts.dmi'
icon_state = "tail_spike"
var/bonus_value = 10 //if it has a bonus effect, this is how much that effect is
var/denied_type = /obj/item/crusher_trophy
/obj/item/weapon/twohanded/required/mining_hammer/proc/Recharge()
if(!charged)
charged = TRUE
icon_state = "mining_hammer1"
playsound(src.loc, 'sound/weapons/kenetic_reload.ogg', 60, 1)
/obj/item/crusher_trophy/examine(mob/living/user)
..()
to_chat(user, "<span class='notice'>Causes [effect_desc()] when attached to a kinetic crusher.</span>")
/obj/item/crusher_trophy/proc/effect_desc()
return "errors"
/obj/item/crusher_trophy/attackby(obj/item/A, mob/living/user)
if(istype(A, /obj/item/weapon/twohanded/required/mining_hammer))
add_to(A, user)
else
..()
/obj/item/crusher_trophy/proc/add_to(obj/item/weapon/twohanded/required/mining_hammer/H, mob/living/user)
for(var/t in H.trophies)
var/obj/item/crusher_trophy/T = t
if(istype(T, denied_type) || istype(src, T.denied_type))
to_chat(user, "<span class='warning'>You can't seem to attach [src] to [H]. Maybe remove a few trophies?</span>")
return FALSE
H.trophies += src
forceMove(H)
to_chat(user, "<span class='notice'>You attach [src] to [H].</span>")
return TRUE
/obj/item/crusher_trophy/proc/remove_from(obj/item/weapon/twohanded/required/mining_hammer/H, mob/living/user)
forceMove(get_turf(H))
H.trophies -= src
return TRUE
/obj/item/crusher_trophy/proc/on_melee_hit(mob/living/target, mob/living/user) //the target and the user
/obj/item/crusher_trophy/proc/on_projectile_fire(obj/item/projectile/destabilizer/marker, mob/living/user) //the projectile fired and the user
/obj/item/crusher_trophy/proc/on_mark_application(mob/living/target, datum/status_effect/crusher_mark/mark, had_mark) //the target, the mark applied, and if the target had a mark before
/obj/item/crusher_trophy/proc/on_mark_detonation(mob/living/target, mob/living/user) //the target and the user
//ash drake
/obj/item/crusher_trophy/tail_spike
desc = "A spike taken from a ash drake's tail."
denied_type = /obj/item/crusher_trophy/tail_spike
bonus_value = 5
/obj/item/crusher_trophy/tail_spike/effect_desc()
return "mark detonation to do <b>[bonus_value]</b> damage to nearby creatures and push them back"
/obj/item/crusher_trophy/tail_spike/on_mark_detonation(mob/living/target, mob/living/user)
for(var/mob/living/L in oview(2, user))
if(L.stat == DEAD)
continue
playsound(L, 'sound/magic/Fireball.ogg', 20, 1)
new /obj/effect/temp_visual/fire(L.loc)
addtimer(CALLBACK(src, .proc/pushback, L, user), 1) //no free backstabs, we push AFTER module stuff is done
L.adjustBruteLoss(bonus_value)
/obj/item/crusher_trophy/tail_spike/proc/pushback(mob/living/target, mob/living/user)
if(!target.anchored || ismegafauna(target)) //megafauna will always be pushed
step(target, get_dir(user, target))
//bubblegum
/obj/item/crusher_trophy/demon_claws
name = "demon claws"
desc = "A set of blood-drenched claws from a massive demon's hand."
icon_state = "demon_claws"
gender = PLURAL
denied_type = /obj/item/crusher_trophy/demon_claws
bonus_value = 10
var/static/list/damage_heal_order = list(BRUTE, BURN, OXY)
/obj/item/crusher_trophy/demon_claws/effect_desc()
return "melee hits to do <b>[bonus_value * 0.2]</b> more damage and heal you for <b>[bonus_value * 0.1]</b>; this effect is increased by <b>500%</b> during mark detonation"
/obj/item/crusher_trophy/demon_claws/add_to(obj/item/weapon/twohanded/required/mining_hammer/H, mob/living/user)
. = ..()
if(.)
H.force += bonus_value * 0.2
H.force_unwielded += bonus_value * 0.2
H.force_wielded += bonus_value * 0.2
/obj/item/crusher_trophy/demon_claws/remove_from(obj/item/weapon/twohanded/required/mining_hammer/H, mob/living/user)
. = ..()
if(.)
H.force -= bonus_value * 0.2
H.force_unwielded -= bonus_value * 0.2
H.force_wielded -= bonus_value * 0.2
/obj/item/crusher_trophy/demon_claws/on_melee_hit(mob/living/target, mob/living/user)
user.heal_ordered_damage(bonus_value * 0.1, damage_heal_order)
/obj/item/crusher_trophy/demon_claws/on_mark_detonation(mob/living/target, mob/living/user)
target.adjustBruteLoss(bonus_value * 0.8)
user.heal_ordered_damage(bonus_value * 0.4, damage_heal_order)
//colossus
/obj/item/crusher_trophy/blaster_tubes
name = "blaster tubes"
desc = "The blaster tubes from a colossus's arm."
icon_state = "blaster_tubes"
gender = PLURAL
denied_type = /obj/item/crusher_trophy/blaster_tubes
bonus_value = 15
var/deadly_shot = FALSE
/obj/item/crusher_trophy/blaster_tubes/effect_desc()
return "mark detonation to make the next destabilizer shot deal <b>[bonus_value]</b> damage but move slower"
/obj/item/crusher_trophy/blaster_tubes/on_projectile_fire(obj/item/projectile/destabilizer/marker, mob/living/user)
if(deadly_shot)
marker.name = "deadly [marker.name]"
marker.icon_state = "chronobolt"
marker.damage = bonus_value
marker.nodamage = FALSE
marker.speed = 2
deadly_shot = FALSE
/obj/item/crusher_trophy/blaster_tubes/on_mark_detonation(mob/living/target, mob/living/user)
deadly_shot = TRUE
addtimer(CALLBACK(src, .proc/reset_deadly_shot), 300, TIMER_OVERRIDE)
/obj/item/crusher_trophy/blaster_tubes/proc/reset_deadly_shot()
deadly_shot = FALSE
//hierophant
/obj/item/crusher_trophy/vortex_talisman
name = "vortex talisman"
desc = "A glowing trinket that was originally the Hierophant's beacon."
icon_state = "vortex_talisman"
denied_type = /obj/item/crusher_trophy/vortex_talisman
/obj/item/crusher_trophy/vortex_talisman/effect_desc()
return "mark detonation to create a barrier you can pass"
/obj/item/crusher_trophy/vortex_talisman/on_mark_detonation(mob/living/target, mob/living/user)
var/turf/T = get_turf(user)
new /obj/effect/temp_visual/hierophant/wall/crusher(T, user) //a wall only you can pass!
var/turf/otherT = get_step(T, turn(user.dir, 90))
if(otherT)
new /obj/effect/temp_visual/hierophant/wall/crusher(otherT, user)
otherT = get_step(T, turn(user.dir, -90))
if(otherT)
new /obj/effect/temp_visual/hierophant/wall/crusher(otherT, user)
/obj/effect/temp_visual/hierophant/wall/crusher
duration = 75
@@ -0,0 +1,143 @@
/*****************Marker Beacons**************************/
GLOBAL_LIST_INIT(marker_beacon_colors, list(
"Random" = FALSE,//not a true color, will pick a random color
"Burgundy" = LIGHT_COLOR_FLARE,
"Bronze" = LIGHT_COLOR_ORANGE,
"Yellow" = LIGHT_COLOR_YELLOW,
"Lime" = LIGHT_COLOR_SLIME_LAMP,
"Olive" = LIGHT_COLOR_GREEN,
"Jade" = LIGHT_COLOR_BLUEGREEN,
"Teal" = LIGHT_COLOR_LIGHT_CYAN,
"Cerulean" = LIGHT_COLOR_BLUE,
"Indigo" = LIGHT_COLOR_DARK_BLUE,
"Purple" = LIGHT_COLOR_PURPLE,
"Violet" = LIGHT_COLOR_LAVENDER,
"Fuchsia" = LIGHT_COLOR_PINK))
/obj/item/stack/marker_beacon
name = "marker beacon"
singular_name = "marker beacon"
desc = "Prism-brand path illumination devices. Used by miners to mark paths and warn of danger."
icon = 'icons/obj/lighting.dmi'
icon_state = "marker"
merge_type = /obj/item/stack/marker_beacon
max_amount = 100
novariants = TRUE
var/picked_color = "random"
/obj/item/stack/marker_beacon/ten //miners start with 10 of these
amount = 10
/obj/item/stack/marker_beacon/thirty //and they're bought in stacks of 1, 10, or 30
amount = 30
/obj/item/stack/marker_beacon/Initialize(mapload)
. = ..()
update_icon()
/obj/item/stack/marker_beacon/examine(mob/user)
..()
to_chat(user, "<span class='notice'>Use in-hand to place a [singular_name].</span>")
to_chat(user, "<span class='notice'>Alt-click to select a color. Current color is [picked_color].</span>")
/obj/item/stack/marker_beacon/update_icon()
icon_state = "[initial(icon_state)][lowertext(picked_color)]"
/obj/item/stack/marker_beacon/attack_self(mob/user)
if(!isturf(user.loc))
to_chat(user, "<span class='warning'>You need more space to place a [singular_name] here.</span>")
return
if(locate(/obj/structure/marker_beacon) in user.loc)
to_chat(user, "<span class='warning'>There is already a [singular_name] here.</span>")
return
if(use(1))
to_chat(user, "<span class='notice'>You activate and anchor [amount ? "a":"the"] [singular_name] in place.</span>")
playsound(user, 'sound/machines/click.ogg', 50, 1)
var/obj/structure/marker_beacon/M = new(user.loc, picked_color)
transfer_fingerprints_to(M)
/obj/item/stack/marker_beacon/AltClick(mob/user)
if(user.incapacitated())
to_chat(user, "<span class='warning'>You can't do that right now!</span>")
return
if(!in_range(src, user))
return
var/input_color = input(user, "Choose a color.", "Beacon Color") as null|anything in GLOB.marker_beacon_colors
if(user.incapacitated() || !in_range(src, user))
return
if(input_color)
picked_color = input_color
update_icon()
/obj/structure/marker_beacon
name = "marker beacon"
desc = "A Prism-brand path illumination device. It is anchored in place and glowing steadily."
icon = 'icons/obj/lighting.dmi'
icon_state = "marker"
layer = BELOW_OPEN_DOOR_LAYER
armor = list(melee = 50, bullet = 75, laser = 75, energy = 75, bomb = 25, bio = 100, rad = 100, fire = 25, acid = 0)
obj_integrity = 50
max_integrity = 50
anchored = TRUE
light_range = 2
light_power = 3
var/remove_speed = 15
var/picked_color
/obj/structure/marker_beacon/Initialize(mapload, set_color)
. = ..()
picked_color = set_color
update_icon()
/obj/structure/marker_beacon/deconstruct(disassembled = TRUE)
if(!(flags & NODECONSTRUCT))
var/obj/item/stack/marker_beacon/M = new(loc)
M.picked_color = picked_color
M.update_icon()
qdel(src)
/obj/structure/marker_beacon/examine(mob/user)
..()
to_chat(user, "<span class='notice'>Alt-click to select a color. Current color is [picked_color].</span>")
/obj/structure/marker_beacon/update_icon()
while(!picked_color || !GLOB.marker_beacon_colors[picked_color])
picked_color = pick(GLOB.marker_beacon_colors)
icon_state = "[initial(icon_state)][lowertext(picked_color)]-on"
set_light(light_range, light_power, GLOB.marker_beacon_colors[picked_color])
/obj/structure/marker_beacon/attack_hand(mob/living/user)
to_chat(user, "<span class='notice'>You start picking [src] up...</span>")
if(do_after(user, remove_speed, target = src))
var/obj/item/stack/marker_beacon/M = new(loc)
M.picked_color = picked_color
M.update_icon()
transfer_fingerprints_to(M)
if(user.put_in_hands(M, TRUE)) //delete the beacon if it fails
playsound(src, 'sound/items/Deconstruct.ogg', 50, 1)
qdel(src) //otherwise delete us
/obj/structure/marker_beacon/attackby(obj/item/I, mob/user, params)
if(istype(I, /obj/item/stack/marker_beacon))
var/obj/item/stack/marker_beacon/M = I
to_chat(user, "<span class='notice'>You start picking [src] up...</span>")
if(do_after(user, remove_speed, target = src) && M.amount + 1 <= M.max_amount)
M.add(1)
playsound(src, 'sound/items/Deconstruct.ogg', 50, 1)
qdel(src)
else
return ..()
/obj/structure/marker_beacon/AltClick(mob/user)
..()
if(user.incapacitated())
to_chat(user, "<span class='warning'>You can't do that right now!</span>")
return
if(!in_range(src, user))
return
var/input_color = input(user, "Choose a color.", "Beacon Color") as null|anything in GLOB.marker_beacon_colors
if(user.incapacitated() || !in_range(src, user))
return
if(input_color)
picked_color = input_color
update_icon()
@@ -0,0 +1,111 @@
/*****************Pickaxes & Drills & Shovels****************/
/obj/item/weapon/pickaxe
name = "pickaxe"
icon = 'icons/obj/mining.dmi'
icon_state = "pickaxe"
flags = CONDUCT
slot_flags = SLOT_BELT | SLOT_BACK
force = 15
throwforce = 10
item_state = "pickaxe"
w_class = WEIGHT_CLASS_BULKY
materials = list(MAT_METAL=2000) //one sheet, but where can you make them?
var/digspeed = 40
var/list/digsound = list('sound/effects/picaxe1.ogg','sound/effects/picaxe2.ogg','sound/effects/picaxe3.ogg')
origin_tech = "materials=2;engineering=3"
attack_verb = list("hit", "pierced", "sliced", "attacked")
/obj/item/weapon/pickaxe/mini
name = "compact pickaxe"
desc = "A smaller, compact version of the standard pickaxe."
icon_state = "minipick"
force = 10
throwforce = 7
slot_flags = SLOT_BELT
w_class = WEIGHT_CLASS_NORMAL
materials = list(MAT_METAL=1000)
/obj/item/weapon/pickaxe/proc/playDigSound()
playsound(src, pick(digsound),50,1)
/obj/item/weapon/pickaxe/silver
name = "silver-plated pickaxe"
icon_state = "spickaxe"
item_state = "spickaxe"
digspeed = 20 //mines faster than a normal pickaxe, bought from mining vendor
origin_tech = "materials=3;engineering=4"
desc = "A silver-plated pickaxe that mines slightly faster than standard-issue."
force = 17
/obj/item/weapon/pickaxe/diamond
name = "diamond-tipped pickaxe"
icon_state = "dpickaxe"
item_state = "dpickaxe"
digspeed = 14
origin_tech = "materials=5;engineering=4"
desc = "A pickaxe with a diamond pick head. Extremely robust at cracking rock walls and digging up dirt."
force = 19
/obj/item/weapon/pickaxe/drill
name = "mining drill"
icon_state = "handdrill"
item_state = "jackhammer"
slot_flags = SLOT_BELT
digspeed = 25 //available from roundstart, faster than a pickaxe.
digsound = list('sound/weapons/drill.ogg')
hitsound = 'sound/weapons/drill.ogg'
origin_tech = "materials=2;powerstorage=2;engineering=3"
desc = "An electric mining drill for the especially scrawny."
/obj/item/weapon/pickaxe/drill/cyborg
name = "cyborg mining drill"
desc = "An integrated electric mining drill."
flags = NODROP
/obj/item/weapon/pickaxe/drill/diamonddrill
name = "diamond-tipped mining drill"
icon_state = "diamonddrill"
digspeed = 7
origin_tech = "materials=6;powerstorage=4;engineering=4"
desc = "Yours is the drill that will pierce the heavens!"
/obj/item/weapon/pickaxe/drill/cyborg/diamond //This is the BORG version!
name = "diamond-tipped cyborg mining drill" //To inherit the NODROP flag, and easier to change borg specific drill mechanics.
icon_state = "diamonddrill"
digspeed = 7
/obj/item/weapon/pickaxe/drill/jackhammer
name = "sonic jackhammer"
icon_state = "jackhammer"
item_state = "jackhammer"
digspeed = 5 //the epitome of powertools. extremely fast mining, laughs at puny walls
origin_tech = "materials=6;powerstorage=4;engineering=5;magnets=4"
digsound = list('sound/weapons/sonic_jackhammer.ogg')
hitsound = 'sound/weapons/sonic_jackhammer.ogg'
desc = "Cracks rocks with sonic blasts, and doubles as a demolition power tool for smashing walls."
/obj/item/weapon/shovel
name = "shovel"
desc = "A large tool for digging and moving dirt."
icon = 'icons/obj/mining.dmi'
icon_state = "shovel"
flags = CONDUCT
slot_flags = SLOT_BELT
force = 8
var/digspeed = 20
throwforce = 4
item_state = "shovel"
w_class = WEIGHT_CLASS_NORMAL
materials = list(MAT_METAL=50)
origin_tech = "materials=2;engineering=2"
attack_verb = list("bashed", "bludgeoned", "thrashed", "whacked")
sharpness = IS_SHARP
/obj/item/weapon/shovel/spade
name = "spade"
desc = "A small tool for digging and moving dirt."
icon_state = "spade"
item_state = "spade"
force = 5
throwforce = 7
w_class = WEIGHT_CLASS_SMALL
@@ -0,0 +1,333 @@
/*****************************Survival Pod********************************/
/area/survivalpod
name = "\improper Emergency Shelter"
icon_state = "away"
dynamic_lighting = DYNAMIC_LIGHTING_FORCED
requires_power = FALSE
has_gravity = TRUE
//Survival Capsule
/obj/item/weapon/survivalcapsule
name = "bluespace shelter capsule"
desc = "An emergency shelter stored within a pocket of bluespace."
icon_state = "capsule"
icon = 'icons/obj/mining.dmi'
w_class = WEIGHT_CLASS_TINY
origin_tech = "engineering=3;bluespace=3"
var/template_id = "shelter_alpha"
var/datum/map_template/shelter/template
var/used = FALSE
/obj/item/weapon/survivalcapsule/proc/get_template()
if(template)
return
template = SSmapping.shelter_templates[template_id]
if(!template)
throw EXCEPTION("Shelter template ([template_id]) not found!")
qdel(src)
/obj/item/weapon/survivalcapsule/Destroy()
template = null // without this, capsules would be one use. per round.
. = ..()
/obj/item/weapon/survivalcapsule/examine(mob/user)
. = ..()
get_template()
to_chat(user, "This capsule has the [template.name] stored.")
to_chat(user, template.description)
/obj/item/weapon/survivalcapsule/attack_self()
//Can't grab when capsule is New() because templates aren't loaded then
get_template()
if(!used)
loc.visible_message("<span class='warning'>\The [src] begins to shake. Stand back!</span>")
used = TRUE
sleep(50)
var/turf/deploy_location = get_turf(src)
var/status = template.check_deploy(deploy_location)
switch(status)
if(SHELTER_DEPLOY_BAD_AREA)
src.loc.visible_message("<span class='warning'>\The [src] will not function in this area.</span>")
if(SHELTER_DEPLOY_BAD_TURFS, SHELTER_DEPLOY_ANCHORED_OBJECTS)
var/width = template.width
var/height = template.height
src.loc.visible_message("<span class='warning'>\The [src] doesn't have room to deploy! You need to clear a [width]x[height] area!</span>")
if(status != SHELTER_DEPLOY_ALLOWED)
used = FALSE
return
playsound(get_turf(src), 'sound/effects/phasein.ogg', 100, 1)
var/turf/T = deploy_location
if(T.z != ZLEVEL_MINING && T.z != ZLEVEL_LAVALAND)//only report capsules away from the mining/lavaland level
message_admins("[ADMIN_LOOKUPFLW(usr)] activated a bluespace capsule away from the mining level! [ADMIN_JMP(T)]")
log_admin("[key_name(usr)] activated a bluespace capsule away from the mining level at [get_area(T)][COORD(T)]")
template.load(deploy_location, centered = TRUE)
new /obj/effect/particle_effect/smoke(get_turf(src))
qdel(src)
/obj/item/weapon/survivalcapsule/luxury
name = "luxury bluespace shelter capsule"
desc = "An exorbitantly expensive luxury suite stored within a pocket of bluespace."
origin_tech = "engineering=3;bluespace=4"
template_id = "shelter_beta"
//Pod objects
//Window
/obj/structure/window/shuttle/survival_pod
name = "pod window"
icon = 'icons/obj/smooth_structures/pod_window.dmi'
icon_state = "smooth"
smooth = SMOOTH_MORE
canSmoothWith = list(/turf/closed/wall/mineral/titanium/survival, /obj/machinery/door/airlock/survival_pod, /obj/structure/window/shuttle/survival_pod)
/obj/structure/window/reinforced/survival_pod
name = "pod window"
icon = 'icons/obj/lavaland/survival_pod.dmi'
icon_state = "pwindow"
//Door
/obj/machinery/door/airlock/survival_pod
name = "airlock"
icon = 'icons/obj/doors/airlocks/survival/survival.dmi'
overlays_file = 'icons/obj/doors/airlocks/survival/survival_overlays.dmi'
assemblytype = /obj/structure/door_assembly/door_assembly_pod
opacity = FALSE
glass = TRUE
var/expected_dir = SOUTH //we visually turn when shuttle rotated, but need to not turn for any other reason
/obj/machinery/door/airlock/survival_pod/setDir(direction)
direction = expected_dir
..()
/obj/machinery/door/airlock/survival_pod/shuttleRotate(rotation)
expected_dir = angle2dir(rotation+dir2angle(dir))
..()
/obj/machinery/door/airlock/survival_pod/vertical
dir = EAST
expected_dir = EAST
/obj/structure/door_assembly/door_assembly_pod
name = "pod airlock assembly"
icon = 'icons/obj/doors/airlocks/survival/survival.dmi'
overlays_file = 'icons/obj/doors/airlocks/survival/survival_overlays.dmi'
airlock_type = /obj/machinery/door/airlock/survival_pod
anchored = TRUE
state = 1
mineral = "glass"
material = "glass"
var/expected_dir = SOUTH
/obj/structure/door_assembly/door_assembly_pod/setDir(direction)
direction = expected_dir
..()
/obj/structure/door_assembly/door_assembly_pod/shuttleRotate(rotation)
expected_dir = angle2dir(rotation+dir2angle(dir))
..()
/obj/structure/door_assembly/door_assembly_pod/vertical
dir = EAST
expected_dir = EAST
//Windoor
/obj/machinery/door/window/survival_pod
icon = 'icons/obj/lavaland/survival_pod.dmi'
icon_state = "windoor"
base_state = "windoor"
//Table
/obj/structure/table/survival_pod
icon = 'icons/obj/lavaland/survival_pod.dmi'
icon_state = "table"
smooth = SMOOTH_FALSE
//Sleeper
/obj/machinery/sleeper/survival_pod
icon = 'icons/obj/lavaland/survival_pod.dmi'
icon_state = "sleeper"
/obj/machinery/sleeper/survival_pod/update_icon()
if(state_open)
cut_overlays()
else
add_overlay("sleeper_cover")
//Computer
/obj/item/device/gps/computer
name = "pod computer"
icon_state = "pod_computer"
icon = 'icons/obj/lavaland/pod_computer.dmi'
anchored = TRUE
density = TRUE
pixel_y = -32
/obj/item/device/gps/computer/attackby(obj/item/weapon/W, mob/user, params)
if(istype(W, /obj/item/weapon/wrench) && !(flags&NODECONSTRUCT))
playsound(src.loc, W.usesound, 50, 1)
user.visible_message("<span class='warning'>[user] disassembles the gps.</span>", \
"<span class='notice'>You start to disassemble the gps...</span>", "You hear clanking and banging noises.")
if(do_after(user, 20*W.toolspeed, target = src))
new /obj/item/device/gps(loc)
qdel(src)
return
return ..()
/obj/item/device/gps/computer/attack_hand(mob/user)
attack_self(user)
//Bed
/obj/structure/bed/pod
icon = 'icons/obj/lavaland/survival_pod.dmi'
icon_state = "bed"
//Survival Storage Unit
/obj/machinery/smartfridge/survival_pod
name = "survival pod storage"
desc = "A heated storage unit."
icon_state = "donkvendor"
icon = 'icons/obj/lavaland/donkvendor.dmi'
icon_on = "donkvendor"
icon_off = "donkvendor"
light_range = 5
light_power = 1.2
light_color = "#DDFFD3"
max_n_of_items = 10
pixel_y = -4
flags = NODECONSTRUCT
/obj/machinery/smartfridge/survival_pod/empty
name = "dusty survival pod storage"
desc = "A heated storage unit. This one's seen better days."
/obj/machinery/smartfridge/survival_pod/empty/Initialize(mapload)
..(mapload, TRUE)
/obj/machinery/smartfridge/survival_pod/accept_check(obj/item/O)
if(istype(O, /obj/item))
return 1
return 0
/obj/machinery/smartfridge/survival_pod/Initialize(mapload, empty)
. = ..()
if(empty)
return
for(var/i in 1 to 5)
var/obj/item/weapon/reagent_containers/food/snacks/donkpocket/warm/W = new(src)
load(W)
if(prob(50))
var/obj/item/weapon/storage/pill_bottle/dice/D = new(src)
load(D)
else
var/obj/item/device/instrument/guitar/G = new(src)
load(G)
//Fans
/obj/structure/fans
icon = 'icons/obj/lavaland/survival_pod.dmi'
icon_state = "fans"
name = "environmental regulation system"
desc = "A large machine releasing a constant gust of air."
anchored = TRUE
density = TRUE
var/arbitraryatmosblockingvar = TRUE
var/buildstacktype = /obj/item/stack/sheet/metal
var/buildstackamount = 5
CanAtmosPass = ATMOS_PASS_NO
/obj/structure/fans/deconstruct()
if(!(flags & NODECONSTRUCT))
if(buildstacktype)
new buildstacktype(loc,buildstackamount)
qdel(src)
/obj/structure/fans/attackby(obj/item/weapon/W, mob/user, params)
if(istype(W, /obj/item/weapon/wrench) && !(flags&NODECONSTRUCT))
playsound(src.loc, W.usesound, 50, 1)
user.visible_message("<span class='warning'>[user] disassembles the fan.</span>", \
"<span class='notice'>You start to disassemble the fan...</span>", "You hear clanking and banging noises.")
if(do_after(user, 20*W.toolspeed, target = src))
deconstruct()
return ..()
/obj/structure/fans/tiny
name = "tiny fan"
desc = "A tiny fan, releasing a thin gust of air."
layer = ABOVE_NORMAL_TURF_LAYER
density = FALSE
icon_state = "fan_tiny"
buildstackamount = 2
/obj/structure/fans/Initialize(mapload)
. = ..()
air_update_turf(1)
/obj/structure/fans/Destroy()
var/turf/T = loc
. = ..()
T.air_update_turf(1)
//Inivisible, indestructible fans
/obj/structure/fans/tiny/invisible
name = "air flow blocker"
resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | UNACIDABLE | ACID_PROOF
invisibility = INVISIBILITY_ABSTRACT
//Signs
/obj/structure/sign/mining
name = "nanotrasen mining corps sign"
desc = "A sign of relief for weary miners, and a warning for would-be competitors to Nanotrasen's mining claims."
icon = 'icons/turf/walls/survival_pod_walls.dmi'
icon_state = "ntpod"
/obj/structure/sign/mining/survival
name = "shelter sign"
desc = "A high visibility sign designating a safe shelter."
icon = 'icons/turf/walls/survival_pod_walls.dmi'
icon_state = "survival"
//Fluff
/obj/structure/tubes
icon_state = "tubes"
icon = 'icons/obj/lavaland/survival_pod.dmi'
name = "tubes"
anchored = TRUE
layer = BELOW_MOB_LAYER
density = FALSE
/obj/item/fakeartefact
name = "expensive forgery"
icon = 'icons/mob/screen_gen.dmi'
icon_state = "x2"
var/possible = list(/obj/item/ship_in_a_bottle,
/obj/item/weapon/gun/energy/pulse,
/obj/item/weapon/sleeping_carp_scroll,
/obj/item/weapon/melee/supermatter_sword,
/obj/item/weapon/shield/changeling,
/obj/item/weapon/lava_staff,
/obj/item/weapon/katana/energy,
/obj/item/weapon/hierophant_club,
/obj/item/weapon/his_grace,
/obj/item/weapon/gun/ballistic/minigun,
/obj/item/weapon/gun/ballistic/automatic/l6_saw,
/obj/item/weapon/gun/magic/staff/chaos,
/obj/item/weapon/gun/magic/staff/spellblade,
/obj/item/weapon/gun/magic/wand/death,
/obj/item/weapon/gun/magic/wand/fireball,
/obj/item/stack/telecrystal/twenty,
/obj/item/nuke_core,
/obj/item/phylactery,
/obj/item/riding_offhand,
/obj/item/weapon/banhammer)
/obj/item/fakeartefact/Initialize()
. = ..()
var/obj/item/I = pick(possible)
name = initial(I.name)
icon = initial(I.icon)
desc = initial(I.desc)
icon_state = initial(I.icon_state)
item_state = initial(I.item_state)
@@ -11,7 +11,7 @@
desc = "It's watching you suspiciously."
/obj/structure/closet/crate/necropolis/tendril/PopulateContents()
var/loot = rand(1,26)
var/loot = rand(1,27)
switch(loot)
if(1)
new /obj/item/device/shared_storage/red(src)
@@ -28,9 +28,7 @@
if(7)
new /obj/item/weapon/pickaxe/diamond(src)
if(8)
new /obj/item/clothing/head/culthood(src)
new /obj/item/clothing/suit/cultrobes(src)
new /obj/item/weapon/bedsheet/cult(src)
new /obj/item/borg/upgrade/modkit/resonator_blasts(src)
if(9)
new /obj/item/organ/brain/alien(src)
if(10)
@@ -40,7 +38,7 @@
if(12)
new /obj/item/clothing/suit/space/hardsuit/ert/paranormal/beserker(src)
if(13)
new /obj/item/weapon/sord(src)
new /obj/item/borg/upgrade/modkit/cooldown/repeater(src)
if(14)
new /obj/item/weapon/nullrod/scythe/talking(src)
if(15)
@@ -68,6 +66,9 @@
new /obj/item/weapon/spellbook/oneuse/summonitem(src)
if(26)
new /obj/item/book_of_babel(src)
if(27)
new /obj/item/borg/upgrade/modkit/lifesteal(src)
new /obj/item/weapon/bedsheet/cult(src)
@@ -488,6 +489,13 @@
if(4)
new /obj/item/weapon/dragons_blood(src)
/obj/structure/closet/crate/necropolis/dragon/crusher
name = "firey dragon chest"
/obj/structure/closet/crate/necropolis/dragon/crusher/PopulateContents()
..()
new /obj/item/crusher_trophy/tail_spike(src)
/obj/item/weapon/melee/ghost_sword
name = "\improper spectral blade"
desc = "A rusted and dulled blade. It doesn't look like it'd do much damage. It glows weakly."
@@ -700,7 +708,26 @@
icon_state = "lavastaff_warn"
duration = 50
///Bubblegum
//Bubblegum
/obj/structure/closet/crate/necropolis/bubblegum
name = "bubblegum chest"
/obj/structure/closet/crate/necropolis/bubblegum/PopulateContents()
var/loot = rand(1,3)
switch(loot)
if(1)
new /obj/item/mayhem(src)
if(2)
new /obj/item/blood_contract(src)
if(3)
new /obj/item/weapon/gun/magic/staff/spellblade(src)
/obj/structure/closet/crate/necropolis/bubblegum/crusher
name = "bloody bubblegum chest"
/obj/structure/closet/crate/necropolis/bubblegum/crusher/PopulateContents()
..()
new /obj/item/crusher_trophy/demon_claws(src)
/obj/item/mayhem
name = "mayhem in a bottle"
@@ -716,19 +743,6 @@
playsound(user.loc, 'sound/effects/Glassbr1.ogg', 100, 1)
qdel(src)
/obj/structure/closet/crate/necropolis/bubblegum
name = "bubblegum chest"
/obj/structure/closet/crate/necropolis/bubblegum/PopulateContents()
var/loot = rand(1,3)
switch(loot)
if(1)
new /obj/item/mayhem(src)
if(2)
new /obj/item/blood_contract(src)
if(3)
new /obj/item/weapon/gun/magic/staff/spellblade(src)
/obj/item/blood_contract
name = "blood contract"
icon = 'icons/obj/wizard.dmi'
@@ -773,6 +787,23 @@
qdel(src)
//Colossus
/obj/structure/closet/crate/necropolis/colossus
name = "colossus chest"
/obj/structure/closet/crate/necropolis/colossus/PopulateContents()
var/list/choices = subtypesof(/obj/machinery/anomalous_crystal)
var/random_crystal = pick(choices)
new random_crystal(src)
new /obj/item/organ/vocal_cords/colossus(src)
/obj/structure/closet/crate/necropolis/colossus/crusher
name = "angelic colossus chest"
/obj/structure/closet/crate/necropolis/colossus/crusher/PopulateContents()
..()
new /obj/item/crusher_trophy/blaster_tubes(src)
//Hierophant
/obj/item/weapon/hierophant_club
name = "hierophant club"
+4
View File
@@ -9,6 +9,9 @@
anchored = 1
var/obj/item/weapon/card/id/inserted_id
var/list/prize_list = list( //if you add something to this, please, for the love of god, use tabs and not spaces.
new /datum/data/mining_equipment("1 Marker Beacon", /obj/item/stack/marker_beacon, 10),
new /datum/data/mining_equipment("10 Marker Beacons", /obj/item/stack/marker_beacon/ten, 100),
new /datum/data/mining_equipment("30 Marker Beacons", /obj/item/stack/marker_beacon/thirty, 300),
new /datum/data/mining_equipment("Whiskey", /obj/item/weapon/reagent_containers/food/drinks/bottle/whiskey, 100),
new /datum/data/mining_equipment("Absinthe", /obj/item/weapon/reagent_containers/food/drinks/bottle/absinthe/premium,100),
new /datum/data/mining_equipment("Cigar", /obj/item/clothing/mask/cigarette/cigar/havana, 150),
@@ -182,6 +185,7 @@
if("Extraction and Rescue Kit")
new /obj/item/weapon/extraction_pack(loc)
new /obj/item/fulton_core(loc)
new /obj/item/stack/marker_beacon/thirty(loc)
if("Crusher Kit")
new /obj/item/weapon/twohanded/required/mining_hammer(loc)
new /obj/item/weapon/storage/belt/mining/alt(loc)
-423
View File
@@ -72,432 +72,9 @@
return
..()
/*********************Pickaxe & Drills**************************/
/obj/item/weapon/pickaxe
name = "pickaxe"
icon = 'icons/obj/mining.dmi'
icon_state = "pickaxe"
flags = CONDUCT
slot_flags = SLOT_BELT | SLOT_BACK
force = 15
throwforce = 10
item_state = "pickaxe"
w_class = WEIGHT_CLASS_BULKY
materials = list(MAT_METAL=2000) //one sheet, but where can you make them?
var/digspeed = 40
var/list/digsound = list('sound/effects/picaxe1.ogg','sound/effects/picaxe2.ogg','sound/effects/picaxe3.ogg')
origin_tech = "materials=2;engineering=3"
attack_verb = list("hit", "pierced", "sliced", "attacked")
/obj/item/weapon/pickaxe/mini
name = "compact pickaxe"
desc = "A smaller, compact version of the standard pickaxe."
icon_state = "minipick"
force = 10
throwforce = 7
slot_flags = SLOT_BELT
w_class = WEIGHT_CLASS_NORMAL
materials = list(MAT_METAL=1000)
/obj/item/weapon/pickaxe/proc/playDigSound()
playsound(src, pick(digsound),50,1)
/obj/item/weapon/pickaxe/silver
name = "silver-plated pickaxe"
icon_state = "spickaxe"
item_state = "spickaxe"
digspeed = 20 //mines faster than a normal pickaxe, bought from mining vendor
origin_tech = "materials=3;engineering=4"
desc = "A silver-plated pickaxe that mines slightly faster than standard-issue."
force = 17
/obj/item/weapon/pickaxe/diamond
name = "diamond-tipped pickaxe"
icon_state = "dpickaxe"
item_state = "dpickaxe"
digspeed = 14
origin_tech = "materials=5;engineering=4"
desc = "A pickaxe with a diamond pick head. Extremely robust at cracking rock walls and digging up dirt."
force = 19
/obj/item/weapon/pickaxe/drill
name = "mining drill"
icon_state = "handdrill"
item_state = "jackhammer"
slot_flags = SLOT_BELT
digspeed = 25 //available from roundstart, faster than a pickaxe.
digsound = list('sound/weapons/drill.ogg')
hitsound = 'sound/weapons/drill.ogg'
origin_tech = "materials=2;powerstorage=2;engineering=3"
desc = "An electric mining drill for the especially scrawny."
/obj/item/weapon/pickaxe/drill/cyborg
name = "cyborg mining drill"
desc = "An integrated electric mining drill."
flags = NODROP
/obj/item/weapon/pickaxe/drill/diamonddrill
name = "diamond-tipped mining drill"
icon_state = "diamonddrill"
digspeed = 7
origin_tech = "materials=6;powerstorage=4;engineering=4"
desc = "Yours is the drill that will pierce the heavens!"
/obj/item/weapon/pickaxe/drill/cyborg/diamond //This is the BORG version!
name = "diamond-tipped cyborg mining drill" //To inherit the NODROP flag, and easier to change borg specific drill mechanics.
icon_state = "diamonddrill"
digspeed = 7
/obj/item/weapon/pickaxe/drill/jackhammer
name = "sonic jackhammer"
icon_state = "jackhammer"
item_state = "jackhammer"
digspeed = 5 //the epitome of powertools. extremely fast mining, laughs at puny walls
origin_tech = "materials=6;powerstorage=4;engineering=5;magnets=4"
digsound = list('sound/weapons/sonic_jackhammer.ogg')
hitsound = 'sound/weapons/sonic_jackhammer.ogg'
desc = "Cracks rocks with sonic blasts, and doubles as a demolition power tool for smashing walls."
/*****************************Shovel********************************/
/obj/item/weapon/shovel
name = "shovel"
desc = "A large tool for digging and moving dirt."
icon = 'icons/obj/mining.dmi'
icon_state = "shovel"
flags = CONDUCT
slot_flags = SLOT_BELT
force = 8
var/digspeed = 20
throwforce = 4
item_state = "shovel"
w_class = WEIGHT_CLASS_NORMAL
materials = list(MAT_METAL=50)
origin_tech = "materials=2;engineering=2"
attack_verb = list("bashed", "bludgeoned", "thrashed", "whacked")
sharpness = IS_SHARP
/obj/item/weapon/shovel/spade
name = "spade"
desc = "A small tool for digging and moving dirt."
icon_state = "spade"
item_state = "spade"
force = 5
throwforce = 7
w_class = WEIGHT_CLASS_SMALL
/obj/item/weapon/emptysandbag
name = "empty sandbag"
desc = "A bag to be filled with sand."
icon = 'icons/obj/items.dmi'
icon_state = "sandbag"
w_class = WEIGHT_CLASS_TINY
/obj/item/weapon/emptysandbag/attackby(obj/item/W, mob/user, params)
if(istype(W,/obj/item/weapon/ore/glass))
to_chat(user, "<span class='notice'>You fill the sandbag.</span>")
var/obj/item/stack/sheet/mineral/sandbags/I = new /obj/item/stack/sheet/mineral/sandbags
qdel(src)
user.put_in_hands(I)
qdel(W)
else
return ..()
/**********************Mining car (Crate like thing, not the rail car)**************************/
/obj/structure/closet/crate/miningcar
desc = "A mining car. This one doesn't work on rails, but has to be dragged."
name = "Mining car (not for rails)"
icon_state = "miningcar"
/*****************************Survival Pod********************************/
/area/survivalpod
name = "\improper Emergency Shelter"
icon_state = "away"
dynamic_lighting = DYNAMIC_LIGHTING_FORCED
requires_power = 0
has_gravity = 1
/obj/item/weapon/survivalcapsule
name = "bluespace shelter capsule"
desc = "An emergency shelter stored within a pocket of bluespace."
icon_state = "capsule"
icon = 'icons/obj/mining.dmi'
w_class = WEIGHT_CLASS_TINY
origin_tech = "engineering=3;bluespace=3"
var/template_id = "shelter_alpha"
var/datum/map_template/shelter/template
var/used = FALSE
/obj/item/weapon/survivalcapsule/proc/get_template()
if(template)
return
template = SSmapping.shelter_templates[template_id]
if(!template)
throw EXCEPTION("Shelter template ([template_id]) not found!")
qdel(src)
/obj/item/weapon/survivalcapsule/Destroy()
template = null // without this, capsules would be one use. per round.
. = ..()
/obj/item/weapon/survivalcapsule/examine(mob/user)
. = ..()
get_template()
to_chat(user, "This capsule has the [template.name] stored.")
to_chat(user, template.description)
/obj/item/weapon/survivalcapsule/attack_self()
// Can't grab when capsule is New() because templates aren't loaded then
get_template()
if(used == FALSE)
src.loc.visible_message("<span class='warning'>\The [src] begins \
to shake. Stand back!</span>")
used = TRUE
sleep(50)
var/turf/deploy_location = get_turf(src)
var/status = template.check_deploy(deploy_location)
switch(status)
if(SHELTER_DEPLOY_BAD_AREA)
src.loc.visible_message("<span class='warning'>\The [src] \
will not function in this area.</span>")
if(SHELTER_DEPLOY_BAD_TURFS, SHELTER_DEPLOY_ANCHORED_OBJECTS)
var/width = template.width
var/height = template.height
src.loc.visible_message("<span class='warning'>\The [src] \
doesn't have room to deploy! You need to clear a \
[width]x[height] area!</span>")
if(status != SHELTER_DEPLOY_ALLOWED)
used = FALSE
return
playsound(get_turf(src), 'sound/effects/phasein.ogg', 100, 1)
var/turf/T = deploy_location
if(T.z != ZLEVEL_MINING && T.z != ZLEVEL_LAVALAND)//only report capsules away from the mining/lavaland level
message_admins("[ADMIN_LOOKUPFLW(usr)] activated a bluespace capsule away from the mining level! [ADMIN_JMP(T)]")
log_admin("[key_name(usr)] activated a bluespace capsule away from the mining level at [get_area(T)][COORD(T)]")
template.load(deploy_location, centered = TRUE)
new /obj/effect/particle_effect/smoke(get_turf(src))
qdel(src)
//Pod turfs and objects
//Window
/obj/structure/window/shuttle/survival_pod
name = "pod window"
icon = 'icons/obj/smooth_structures/pod_window.dmi'
icon_state = "smooth"
smooth = SMOOTH_MORE
canSmoothWith = list(/turf/closed/wall/mineral/titanium/survival, /obj/machinery/door/airlock/survival_pod, /obj/structure/window/shuttle/survival_pod)
//Door
/obj/machinery/door/airlock/survival_pod
name = "airlock"
icon = 'icons/obj/doors/airlocks/survival/survival.dmi'
overlays_file = 'icons/obj/doors/airlocks/survival/survival_overlays.dmi'
assemblytype = /obj/structure/door_assembly/door_assembly_pod
opacity = 0
glass = 1
var/expected_dir = SOUTH //we visually turn when shuttle rotated, but need to not turn for any other reason
/obj/machinery/door/airlock/survival_pod/setDir(direction)
direction = expected_dir
..()
/obj/machinery/door/airlock/survival_pod/shuttleRotate(rotation)
expected_dir = angle2dir(rotation+dir2angle(dir))
..()
/obj/machinery/door/airlock/survival_pod/vertical
dir = EAST
expected_dir = EAST
/obj/structure/door_assembly/door_assembly_pod
name = "pod airlock assembly"
icon = 'icons/obj/doors/airlocks/survival/survival.dmi'
overlays_file = 'icons/obj/doors/airlocks/survival/survival_overlays.dmi'
airlock_type = /obj/machinery/door/airlock/survival_pod
anchored = 1
state = 1
mineral = "glass"
material = "glass"
var/expected_dir = SOUTH
/obj/structure/door_assembly/door_assembly_pod/setDir(direction)
direction = expected_dir
..()
/obj/structure/door_assembly/door_assembly_pod/shuttleRotate(rotation)
expected_dir = angle2dir(rotation+dir2angle(dir))
..()
/obj/structure/door_assembly/door_assembly_pod/vertical
dir = EAST
expected_dir = EAST
//Table
/obj/structure/table/survival_pod
icon = 'icons/obj/lavaland/survival_pod.dmi'
icon_state = "table"
smooth = SMOOTH_FALSE
//Sleeper
/obj/machinery/sleeper/survival_pod
icon = 'icons/obj/lavaland/survival_pod.dmi'
icon_state = "sleeper"
/obj/machinery/sleeper/survival_pod/update_icon()
if(state_open)
cut_overlays()
else
add_overlay("sleeper_cover")
//Computer
/obj/item/device/gps/computer
name = "pod computer"
icon_state = "pod_computer"
icon = 'icons/obj/lavaland/pod_computer.dmi'
anchored = 1
density = 1
pixel_y = -32
/obj/item/device/gps/computer/attackby(obj/item/weapon/W, mob/user, params)
if(istype(W, /obj/item/weapon/wrench) && !(flags&NODECONSTRUCT))
playsound(src.loc, W.usesound, 50, 1)
user.visible_message("<span class='warning'>[user] disassembles the gps.</span>", \
"<span class='notice'>You start to disassemble the gps...</span>", "You hear clanking and banging noises.")
if(do_after(user, 20*W.toolspeed, target = src))
new /obj/item/device/gps(src.loc)
qdel(src)
return ..()
/obj/item/device/gps/computer/attack_hand(mob/user)
attack_self(user)
//Bed
/obj/structure/bed/pod
icon = 'icons/obj/lavaland/survival_pod.dmi'
icon_state = "bed"
//Survival Storage Unit
/obj/machinery/smartfridge/survival_pod
name = "survival pod storage"
desc = "A heated storage unit."
icon_state = "donkvendor"
icon = 'icons/obj/lavaland/donkvendor.dmi'
icon_on = "donkvendor"
icon_off = "donkvendor"
light_range = 5
light_power = 1.2
light_color = "#DDFFD3"
max_n_of_items = 10
pixel_y = -4
flags = NODECONSTRUCT
/obj/machinery/smartfridge/survival_pod/empty
name = "dusty survival pod storage"
desc = "A heated storage unit. This one's seen better days."
/obj/machinery/smartfridge/survival_pod/empty/Initialize(mapload)
..(mapload, TRUE)
/obj/machinery/smartfridge/survival_pod/accept_check(obj/item/O)
if(istype(O, /obj/item))
return 1
return 0
/obj/machinery/smartfridge/survival_pod/Initialize(mapload, empty)
..()
if(empty)
return
for(var/i in 1 to 5)
var/obj/item/weapon/reagent_containers/food/snacks/donkpocket/warm/W = new(src)
load(W)
if(prob(50))
var/obj/item/weapon/storage/pill_bottle/dice/D = new(src)
load(D)
else
var/obj/item/device/instrument/guitar/G = new(src)
load(G)
//Fans
/obj/structure/fans
icon = 'icons/obj/lavaland/survival_pod.dmi'
icon_state = "fans"
name = "environmental regulation system"
desc = "A large machine releasing a constant gust of air."
anchored = 1
density = 1
var/arbitraryatmosblockingvar = TRUE
var/buildstacktype = /obj/item/stack/sheet/metal
var/buildstackamount = 5
CanAtmosPass = ATMOS_PASS_NO
/obj/structure/fans/deconstruct()
if(!(flags & NODECONSTRUCT))
if(buildstacktype)
new buildstacktype(loc,buildstackamount)
qdel(src)
/obj/structure/fans/attackby(obj/item/weapon/W, mob/user, params)
if(istype(W, /obj/item/weapon/wrench) && !(flags&NODECONSTRUCT))
playsound(src.loc, W.usesound, 50, 1)
user.visible_message("<span class='warning'>[user] disassembles the fan.</span>", \
"<span class='notice'>You start to disassemble the fan...</span>", "You hear clanking and banging noises.")
if(do_after(user, 20*W.toolspeed, target = src))
deconstruct()
return ..()
/obj/structure/fans/tiny
name = "tiny fan"
desc = "A tiny fan, releasing a thin gust of air."
layer = ABOVE_NORMAL_TURF_LAYER
density = 0
icon_state = "fan_tiny"
buildstackamount = 2
/obj/structure/fans/New(loc)
..()
air_update_turf(1)
/obj/structure/fans/Destroy()
var/turf/T = loc
. = ..()
T.air_update_turf(1)
//Inivisible, indestructible fans
/obj/structure/fans/tiny/invisible
name = "air flow blocker"
resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | UNACIDABLE | ACID_PROOF
invisibility = INVISIBILITY_ABSTRACT
//Signs
/obj/structure/sign/mining
name = "nanotrasen mining corps sign"
desc = "A sign of relief for weary miners, and a warning for would-be competitors to Nanotrasen's mining claims."
icon = 'icons/turf/walls/survival_pod_walls.dmi'
icon_state = "ntpod"
/obj/structure/sign/mining/survival
name = "shelter sign"
desc = "A high visibility sign designating a safe shelter."
icon = 'icons/turf/walls/survival_pod_walls.dmi'
icon_state = "survival"
//Fluff
/obj/structure/tubes
icon_state = "tubes"
icon = 'icons/obj/lavaland/survival_pod.dmi'
name = "tubes"
anchored = 1
layer = BELOW_MOB_LAYER
density = 0
+3 -4
View File
@@ -260,14 +260,13 @@
else
user.visible_message("<span class='warning'>[user] strikes \the [src], causing a chain reaction!</span>", "<span class='danger'>You strike \the [src], causing a chain reaction.</span>")
log_game("[key_name(user)] has primed a [name] for detonation at [A][COORD(bombturf)]")
spawn(det_time)
if(primed)
if(quality == 3)
explosion(src.loc,2,4,9,adminlog = notify_admins)
explosion(src.loc,2,4,9,adminlog = notify_admins)
if(quality == 2)
explosion(src.loc,1,2,5,adminlog = notify_admins)
explosion(src.loc,1,2,5,adminlog = notify_admins)
if(quality == 1)
explosion(src.loc,-1,1,3,adminlog = notify_admins)
explosion(src.loc,-1,1,3,adminlog = notify_admins)
qdel(src)
/obj/item/weapon/ore/Initialize()
+7 -1
View File
@@ -29,4 +29,10 @@
new_player_panel()
client.playtitlemusic()
if(SSticker.current_state < GAME_STATE_SETTING_UP)
to_chat(src, "Please set up your character and select \"Ready\". The game will start in about [round(SSticker.GetTimeLeft(), 1)/10] seconds.")
var/tl = round(SSticker.GetTimeLeft(), 1)/10
var/postfix
if(tl >= 0)
postfix = "in about [tl] seconds"
else
postfix = "soon"
to_chat(src, "Please set up your character and select \"Ready\". The game will start [postfix].")
+1 -20
View File
@@ -322,28 +322,9 @@
if(isliving(equip)) //Borgs get borged in the equip, so we need to make sure we handle the new mob.
character = equip
var/D
if(GLOB.latejoin.len)
D = get_turf(pick(GLOB.latejoin))
if(!D)
for(var/turf/T in get_area_turfs(/area/shuttle/arrival))
if(!T.density)
var/clear = 1
for(var/obj/O in T)
if(O.density)
clear = 0
break
if(clear)
D = T
continue
character.loc = D
SSjob.SendToLateJoin(character)
character.update_parallax_teleport()
var/atom/movable/chair = locate(/obj/structure/chair) in character.loc
if(chair)
chair.buckle_mob(character)
SSticker.minds += character.mind
var/mob/living/carbon/human/humanc
+12 -2
View File
@@ -65,12 +65,22 @@ GLOBAL_VAR(posibrain_notify_cooldown)
/obj/item/device/mmi/posibrain/attack_ghost(mob/user)
activate(user)
/obj/item/device/mmi/posibrain/proc/is_occupied()
if(brainmob.key)
return TRUE
if(iscyborg(loc))
var/mob/living/silicon/robot/R = loc
if(R.mmi == src)
return TRUE
return FALSE
//Two ways to activate a positronic brain. A clickable link in the ghost notif, or simply clicking the object itself.
/obj/item/device/mmi/posibrain/proc/activate(mob/user)
if(QDELETED(brainmob))
return
if(brainmob.key || jobban_isbanned(user,"posibrain"))
if(is_occupied() || jobban_isbanned(user,"posibrain"))
return
var/posi_ask = alert("Become a [name]? (Warning, You can no longer be cloned, and all past lives will be forgotten!)","Are you positive?","Yes","No")
if(posi_ask == "No" || QDELETED(src))
return
@@ -98,7 +108,7 @@ GLOBAL_VAR(posibrain_notify_cooldown)
/obj/item/device/mmi/posibrain/proc/transfer_personality(mob/candidate)
if(QDELETED(brainmob))
return
if(brainmob.key) //Prevents hostile takeover if two ghosts get the prompt or link for the same brain.
if(is_occupied()) //Prevents hostile takeover if two ghosts get the prompt or link for the same brain.
to_chat(candidate, "This brain has already been taken! Please try your possession again later!")
return FALSE
if(candidate.mind && !isobserver(candidate))
@@ -38,7 +38,7 @@
#define MAX_ALIEN_LEAP_DIST 7
/mob/living/carbon/alien/humanoid/hunter/proc/leap_at(atom/A)
if(pounce_cooldown)
if(pounce_cooldown > world.time)
to_chat(src, "<span class='alertalien'>You are too fatigued to pounce right now!</span>")
return
@@ -83,9 +83,7 @@
Weaken(2, 1, 1)
toggle_leap(0)
pounce_cooldown = !pounce_cooldown
spawn(pounce_cooldown_time) //3s by default
pounce_cooldown = !pounce_cooldown
pounce_cooldown = world.time + pounce_cooldown_time
else if(A.density && !A.CanPass(src))
visible_message("<span class ='danger'>[src] smashes into [A]!</span>", "<span class ='alertalien'>[src] smashes into [A]!</span>")
Weaken(2, 1, 1)
@@ -36,9 +36,6 @@
//initialise organs
create_internal_organs()
if(mind)
mind.martial_art = mind.default_martial_art
handcrafting = new()
..()
@@ -809,13 +809,13 @@
if(T.title == "Chief Medical Officer" || T.title == "Medical Doctor" || T.title == "Chemist" || T.title == "Virologist" || T.title == "Geneticist")
return /area/medical
if(T.title == "Research Director" || T.title == "Scientist" || T.title == "Roboticist")
return /area/toxins
return /area/science
if(T.title == "Head of Security" || T.title == "Warden" || T.title == "Security Officer" || T.title == "Detective")
return /area/security
if(T.title == "Botanist")
return /area/hydroponics
else
return pick(/area/hallway,/area/crew_quarters)
return pick(/area/hallway,/area/crew_quarters/locker)
/mob/living/carbon/human/interactive/proc/target_filter(target)
var/list/filtered_targets = list(/area, /turf, /obj/machinery/door, /atom/movable/light, /obj/structure/cable, /obj/machinery/atmospherics)
@@ -20,3 +20,16 @@
. = ..()
if(.)
update_hair()
/mob/living/carbon/human/set_drugginess(amount)
..()
if(!amount)
remove_language(/datum/language/beachbum)
/mob/living/carbon/human/adjust_drugginess(amount)
..()
if(!dna.check_mutation(STONER))
if(druggy)
grant_language(/datum/language/beachbum)
else
remove_language(/datum/language/beachbum)
+3
View File
@@ -420,6 +420,9 @@
message = null
emote_type = EMOTE_VISIBLE
/datum/emote/living/custom/replace_pronoun(mob/user, message)
return message
/datum/emote/living/help
key = "help"
+1 -1
View File
@@ -53,7 +53,7 @@
var/control_disabled = 0 // Set to 1 to stop AI from interacting via Click()
var/malfhacking = 0 // More or less a copy of the above var, so that malf AIs can hack and still get new cyborgs -- NeoFite
var/malf_cooldown = 0 //Cooldown var for malf modules
var/malf_cooldown = 0 //Cooldown var for malf modules, stores a worldtime + cooldown
var/obj/machinery/power/apc/malfhack = null
var/explosive = 0 //does the AI explode when it dies?
+3 -3
View File
@@ -23,9 +23,9 @@
if(explosive)
spawn(10)
explosion(src.loc, 3, 6, 12, 15)
explosion(src.loc, 3, 6, 12, 15)
for(var/obj/machinery/ai_status_display/O in world) //change status
for(var/obj/machinery/ai_status_display/O in GLOB.ai_status_displays) //change status
if(src.key)
O.mode = 2
if(istype(loc, /obj/item/device/aicard))
@@ -42,4 +42,4 @@
if(doomsday_device)
doomsday_device.timing = FALSE
SSshuttle.clearHostileEnvironment(doomsday_device)
qdel(doomsday_device)
qdel(doomsday_device)
+1 -1
View File
@@ -6,7 +6,7 @@
client.images += blood
if(stat != DEAD)
for(var/obj/machinery/ai_status_display/O in GLOB.machines) //change status
for(var/obj/machinery/ai_status_display/O in GLOB.ai_status_displays) //change status
O.mode = 1
O.emotion = "Neutral"
view_core()
+1 -1
View File
@@ -1,5 +1,5 @@
/mob/living/silicon/ai/Logout()
..()
for(var/obj/machinery/ai_status_display/O in world) //change status
for(var/obj/machinery/ai_status_display/O in GLOB.ai_status_displays) //change status
O.mode = 0
view_core()
+1 -1
View File
@@ -79,7 +79,7 @@
/mob/living/silicon/pai/Destroy()
GLOB.pai_list -= src
..()
return ..()
/mob/living/silicon/pai/Initialize()
var/obj/item/device/paicard/P = loc
@@ -195,6 +195,10 @@
if(module.type != /obj/item/weapon/robot_module)
return
if(wires.is_cut(WIRE_RESET_MODULE))
to_chat(src,"<span class='userdanger'>ERROR: Module installer reply timeout. Please check internal connections.</span>")
return
var/list/modulelist = list("Standard" = /obj/item/weapon/robot_module/standard, \
"Engineering" = /obj/item/weapon/robot_module/engineering, \
"Medical" = /obj/item/weapon/robot_module/medical, \
@@ -104,6 +104,10 @@
S.cost = 1
S.source = get_or_create_estorage(/datum/robot_energy_storage/wire)
else if(istype(S, /obj/item/stack/marker_beacon))
S.cost = 1
S.source = get_or_create_estorage(/datum/robot_energy_storage/beacon)
if(S && S.source)
S.materials = list()
S.is_cyborg = 1
@@ -535,7 +539,8 @@
/obj/item/weapon/storage/bag/sheetsnatcher/borg,
/obj/item/device/t_scanner/adv_mining_scanner,
/obj/item/weapon/gun/energy/kinetic_accelerator/cyborg,
/obj/item/device/gps/cyborg)
/obj/item/device/gps/cyborg,
/obj/item/stack/marker_beacon)
emag_modules = list(/obj/item/borg/stun)
ratvar_modules = list(
/obj/item/clockwork/slab/cyborg/miner,
@@ -631,3 +636,8 @@
max_energy = 2500
recharge_rate = 250
name = "Medical Synthesizer"
/datum/robot_energy_storage/beacon
max_energy = 30
recharge_rate = 1
name = "Marker Beacon Storage"
+1
View File
@@ -4,6 +4,7 @@
/mob/living/proc/robot_talk(message)
log_say("[key_name(src)] : [message]")
log_message(message, INDIVIDUAL_SAY_LOG)
var/desig = "Default Cyborg" //ezmode for taters
if(issilicon(src))
var/mob/living/silicon/S = src
+79 -31
View File
@@ -10,45 +10,58 @@
/obj/effect/mob_spawn/human/corpse/syndicatesoldier
name = "Syndicate Operative"
id_job = "Operative"
id_access_list = list(GLOB.access_syndicate)
outfit = /datum/outfit/syndicatesoldiercorpse
/datum/outfit/syndicatesoldiercorpse
name = "Syndicate Operative Corpse"
uniform = /obj/item/clothing/under/syndicate
suit = /obj/item/clothing/suit/armor/vest
shoes = /obj/item/clothing/shoes/combat
gloves = /obj/item/clothing/gloves/combat
radio = /obj/item/device/radio/headset
ears = /obj/item/device/radio/headset
mask = /obj/item/clothing/mask/gas
helmet = /obj/item/clothing/head/helmet/swat
head = /obj/item/clothing/head/helmet/swat
back = /obj/item/weapon/storage/backpack
has_id = 1
id_job = "Operative"
id_access_list = list(GLOB.access_syndicate)
id = /obj/item/weapon/card/id
/obj/effect/mob_spawn/human/corpse/syndicatecommando
name = "Syndicate Commando"
id_job = "Operative"
id_access_list = list(GLOB.access_syndicate)
outfit = /datum/outfit/syndicatecommandocorpse
/datum/outfit/syndicatecommandocorpse
name = "Syndicate Commando Corpse"
uniform = /obj/item/clothing/under/syndicate
suit = /obj/item/clothing/suit/space/hardsuit/syndi
shoes = /obj/item/clothing/shoes/combat
gloves = /obj/item/clothing/gloves/combat
radio = /obj/item/device/radio/headset
ears = /obj/item/device/radio/headset
mask = /obj/item/clothing/mask/gas/syndicate
back = /obj/item/weapon/tank/jetpack/oxygen
pocket1 = /obj/item/weapon/tank/internals/emergency_oxygen
has_id = 1
id_job = "Operative"
id_access_list = list(GLOB.access_syndicate)
r_pocket = /obj/item/weapon/tank/internals/emergency_oxygen
id = /obj/item/weapon/card/id
/obj/effect/mob_spawn/human/corpse/syndicatestormtrooper
name = "Syndicate Stormtrooper"
id_job = "Operative"
id_access_list = list(GLOB.access_syndicate)
outfit = /datum/outfit/syndicatestormtroopercorpse
/datum/outfit/syndicatestormtroopercorpse
name = "Syndicate Stormtrooper Corpse"
uniform = /obj/item/clothing/under/syndicate
suit = /obj/item/clothing/suit/space/hardsuit/syndi/elite
shoes = /obj/item/clothing/shoes/combat
gloves = /obj/item/clothing/gloves/combat
radio = /obj/item/device/radio/headset
ears = /obj/item/device/radio/headset
mask = /obj/item/clothing/mask/gas/syndicate
back = /obj/item/weapon/tank/jetpack/oxygen/harness
has_id = 1
id_job = "Operative"
id_access_list = list(GLOB.access_syndicate)
id = /obj/item/weapon/card/id
/obj/effect/mob_spawn/human/clown/corpse
@@ -58,62 +71,97 @@
/obj/effect/mob_spawn/human/corpse/pirate
name = "Pirate"
outfit = /datum/outfit/piratecorpse
/datum/outfit/piratecorpse
name = "Pirate Corpse"
uniform = /obj/item/clothing/under/pirate
shoes = /obj/item/clothing/shoes/jackboots
glasses = /obj/item/clothing/glasses/eyepatch
helmet = /obj/item/clothing/head/bandana
head = /obj/item/clothing/head/bandana
/obj/effect/mob_spawn/human/corpse/pirate/ranged
name = "Pirate Gunner"
outfit = /datum/outfit/piratecorpse/ranged
/datum/outfit/piratecorpse/ranged
name = "Pirate Gunner Corpse"
suit = /obj/item/clothing/suit/pirate
helmet = /obj/item/clothing/head/pirate
head = /obj/item/clothing/head/pirate
/obj/effect/mob_spawn/human/corpse/russian
name = "Russian"
outfit = /datum/outfit/russiancorpse
/datum/outfit/russiancorpse
name = "Russian Corpse"
uniform = /obj/item/clothing/under/soviet
shoes = /obj/item/clothing/shoes/jackboots
helmet = /obj/item/clothing/head/bearpelt
head = /obj/item/clothing/head/bearpelt
/obj/effect/mob_spawn/human/corpse/russian/ranged
helmet = /obj/item/clothing/head/ushanka
outfit = /datum/outfit/russiancorpse/ranged
/datum/outfit/russiancorpse/ranged
name = "Ranged Russian Corpse"
head = /obj/item/clothing/head/ushanka
/obj/effect/mob_spawn/human/corpse/russian/ranged/trooper
outfit = /datum/outfit/russiancorpse/ranged/trooper
/datum/outfit/russiancorpse/ranged/trooper
name = "Ranged Russian Trooper Corpse"
uniform = /obj/item/clothing/under/syndicate/camo
suit = /obj/item/clothing/suit/armor/bulletproof
shoes = /obj/item/clothing/shoes/combat
gloves = /obj/item/clothing/gloves/combat
radio = /obj/item/device/radio/headset
ears = /obj/item/device/radio/headset
mask = /obj/item/clothing/mask/balaclava
helmet = /obj/item/clothing/head/helmet/alt
head = /obj/item/clothing/head/helmet/alt
/obj/effect/mob_spawn/human/corpse/russian/ranged/officer
name = "Russian Officer"
outfit = /datum/outfit/russiancorpse/officer
/datum/outfit/russiancorpse/officer
name = "Russian Officer Corpse"
uniform = /obj/item/clothing/under/rank/security/navyblue/russian
suit = /obj/item/clothing/suit/security/officer/russian
shoes = /obj/item/clothing/shoes/laceup
radio = /obj/item/device/radio/headset
helmet = /obj/item/clothing/head/ushanka
ears = /obj/item/device/radio/headset
head = /obj/item/clothing/head/ushanka
/obj/effect/mob_spawn/human/corpse/wizard
name = "Space Wizard"
name = "Space Wizard Corpse"
outfit = /datum/outfit/wizardcorpse
/datum/outfit/wizardcorpse
name = "Space Wizard Corpse"
uniform = /obj/item/clothing/under/color/lightpurple
suit = /obj/item/clothing/suit/wizrobe
shoes = /obj/item/clothing/shoes/sandal/magic
helmet = /obj/item/clothing/head/wizard
head = /obj/item/clothing/head/wizard
/obj/effect/mob_spawn/human/corpse/nanotrasensoldier
name = "Nanotrasen Private Security Officer"
id_job = "Private Security Force"
id_access = "Security Officer"
outfit = /datum/outfit/nanotrasensoldiercorpse2
/datum/outfit/nanotrasensoldiercorpse2
name = "NT Private Security Officer Corpse"
uniform = /obj/item/clothing/under/rank/security
suit = /obj/item/clothing/suit/armor/vest
shoes = /obj/item/clothing/shoes/combat
gloves = /obj/item/clothing/gloves/combat
radio = /obj/item/device/radio/headset
ears = /obj/item/device/radio/headset
mask = /obj/item/clothing/mask/gas/sechailer/swat
helmet = /obj/item/clothing/head/helmet/swat/nanotrasen
head = /obj/item/clothing/head/helmet/swat/nanotrasen
back = /obj/item/weapon/storage/backpack/security
has_id = 1
id_job = "Private Security Force"
id_access = "Security Officer"
id = /obj/item/weapon/card/id
@@ -45,6 +45,7 @@
gold_core_spawnable = 2
/mob/living/simple_animal/pet/dog/Initialize()
. = ..()
var/dog_area = get_area(src)
for(var/obj/structure/bed/dogbed/D in dog_area)
if(!D.owner)
@@ -21,7 +21,7 @@
/mob/living/simple_animal/hostile/guardian/fire/AttackingTarget()
. = ..()
if(. && ishuman(target) && target != summoner)
new /obj/effect/hallucination/delusion(target.loc,target,force_kind="custom",duration=200,skip_nearby=0, custom_icon = src.icon_state, custom_icon_file = src.icon)
new /obj/effect/hallucination/delusion(target.loc,target,"custom",200,0, icon_state,icon)
/mob/living/simple_animal/hostile/guardian/fire/Crossed(AM as mob|obj)
..()
@@ -1,89 +0,0 @@
//Will probably eventually be expanded to fit multiple types of Flan because I am a nerd.
/mob/living/simple_animal/hostile/flan
name = "Flan"
desc = "Definitely not a dessert."
var/casting = 0
icon_state = "flan" //Required for the inheritance of casting animations.
icon_living = "flan"
icon_dead = "flan_dead"
turns_per_move = 5
environment_smash = ENVIRONMENT_SMASH_NONE
speed = -2
maxHealth = 50
health = 50
harm_intent_damage = 5
damage_coeff = list(BRUTE = 0.75, BURN = 1.5, TOX = 0, CLONE = 0, STAMINA = 0, OXY = 0)
melee_damage_lower = 5
melee_damage_upper = 10
attacktext = "headbutts"
attack_sound = 'sound/weapons/punch1.ogg'
a_intent = INTENT_HARM
atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0)
unsuitable_atmos_damage = 0
ranged = 1
retreat_distance = 2
minimum_distance = 4
AIStatus = AI_IDLE
ranged_message = "begins to cast something"
ranged_cooldown_time = 15
var/spellname = "a generic spell!"
var/spellsound = 'sound/effects/spray3.ogg'
var/spellanimation = ATTACK_EFFECT_SMASH //More in defines/misc.dm
var/spelldamagetype = BRUTE
var/spelldamage = 15
var/spellcasttime = 15 //if you varedit this also varedit ranged_cooldown_time else the mob will attack again before the spell hits, looking weird but still working
/mob/living/simple_animal/hostile/flan/Initialize() //Required for the inheritance of casting animations.
..()
casting = 0
icon_state = "[initial(icon_state)][casting]"
/mob/living/simple_animal/hostile/flan/proc/spellaftereffects(mob/living/A) //Inherit and override. Allows for spells that stun and do basically anything you'd want.
return
/mob/living/simple_animal/hostile/flan/OpenFire(mob/living/A) //Spellcasting!
if(isliving(A)) //A is originally an atom, this is here to prevent that from fucking this up.
visible_message("<span class='danger'><b>[src]</b> [ranged_message] at [A]!</span>")
casting = 1
icon_state = "[initial(icon_state)][casting]"
if(do_after_mob(src, A, spellcasttime, uninterruptible = 1, progress = 0)) //Break LOS to dodge.
if(QDELETED(src))
return
if((A in view(src)))
A.do_attack_animation(A, spellanimation)
playsound(A, spellsound, 20, 1)
A.apply_damage(damage = spelldamage,damagetype = spelldamagetype, def_zone = null, blocked = 0)
visible_message("<span class='danger'><b>[A]</b> has been hit by [spellname]</span>")
spellaftereffects(A,src)
ranged_cooldown = world.time + ranged_cooldown_time
casting = 0
icon_state = "[initial(icon_state)][casting]"
/mob/living/simple_animal/hostile/flan/fire
name = "Flame Flan"
desc = "You'd think they'd be spicy, but nobody has ever tried."
icon_state = "fireflan"
icon_living = "fireflan"
icon_dead = "fireflan_dead"
damage_coeff = list(BRUTE = 1.5, BURN = 0.75, TOX = 0, CLONE = 0, STAMINA = 0, OXY = 0)
spellname = "a Fire spell!"
spellsound = 'sound/effects/fuse.ogg'
spelldamagetype = BURN
spellcasttime = 20
/mob/living/simple_animal/hostile/flan/fire/spellaftereffects(mob/living/A)
A.adjust_fire_stacks(2)
A.IgniteMob()
/mob/living/simple_animal/hostile/flan/water
name = "Water Flan"
desc = "Is pretty likely to dampen your spirits."
icon_state = "flan"
icon_living = "flan"
icon_dead = "flan_dead"
spellname = "a Water spell!"
spelldamage = 10 //Basic flan, learn the dance with em.
/mob/living/simple_animal/hostile/flan/water/spellaftereffects(mob/living/A)
A.ExtinguishMob()
@@ -44,6 +44,7 @@ Difficulty: Hard
ranged = 1
pixel_x = -32
del_on_death = 1
crusher_loot = list(/obj/structure/closet/crate/necropolis/bubblegum/crusher)
loot = list(/obj/structure/closet/crate/necropolis/bubblegum)
blood_volume = BLOOD_VOLUME_MAXIMUM //BLEED FOR ME
var/charging = FALSE
@@ -46,7 +46,8 @@ Difficulty: Very Hard
del_on_death = 1
medal_type = MEDAL_PREFIX
score_type = COLOSSUS_SCORE
loot = list(/obj/effect/spawner/lootdrop/anomalous_crystal, /obj/item/organ/vocal_cords/colossus)
crusher_loot = list(/obj/structure/closet/crate/necropolis/colossus/crusher)
loot = list(/obj/structure/closet/crate/necropolis/colossus)
butcher_results = list(/obj/item/weapon/ore/diamond = 5, /obj/item/stack/sheet/sinew = 5, /obj/item/stack/sheet/animalhide/ashdrake = 10, /obj/item/stack/sheet/bone = 30)
deathmessage = "disintegrates, leaving a glowing core in its wake."
death_sound = 'sound/magic/demon_dies.ogg'
@@ -444,13 +445,6 @@ Difficulty: Very Hard
/obj/machinery/anomalous_crystal/ex_act()
ActivationReaction(null, ACTIVATE_BOMB)
/obj/effect/spawner/lootdrop/anomalous_crystal
name = "anomalous crystal spawner"
/obj/effect/spawner/lootdrop/anomalous_crystal/Initialize()
loot = subtypesof(/obj/machinery/anomalous_crystal)
. = ..()
/obj/machinery/anomalous_crystal/honk //Strips and equips you as a clown. I apologize for nothing
observer_desc = "This crystal strips and equips its targets as clowns."
possible_methods = list(ACTIVATE_MOB_BUMP, ACTIVATE_SPEECH)
@@ -51,6 +51,7 @@ Difficulty: Medium
move_to_delay = 10
ranged = 1
pixel_x = -16
crusher_loot = list(/obj/structure/closet/crate/necropolis/dragon/crusher)
loot = list(/obj/structure/closet/crate/necropolis/dragon)
butcher_results = list(/obj/item/weapon/ore/diamond = 5, /obj/item/stack/sheet/sinew = 5, /obj/item/stack/sheet/animalhide/ashdrake = 10, /obj/item/stack/sheet/bone = 30)
var/swooping = NONE
@@ -78,6 +78,9 @@ Difficulty: Hard
internal = new/obj/item/device/gps/internal/hierophant(src)
spawned_beacon = new(loc)
/mob/living/simple_animal/hostile/megafauna/hierophant/spawn_crusher_loot()
new /obj/item/crusher_trophy/vortex_talisman(get_turf(spawned_beacon))
/mob/living/simple_animal/hostile/megafauna/hierophant/Life()
. = ..()
if(. && spawned_beacon && !QDELETED(spawned_beacon) && !client)
@@ -461,6 +464,12 @@ Difficulty: Hard
return ..()
/obj/effect/temp_visual/hierophant/wall/CanPass(atom/movable/mover, turf/target, height = 0)
if(mover == caster.pulledby)
return TRUE
if(istype(mover, /obj/item/projectile))
var/obj/item/projectile/P = mover
if(P.firer == caster)
return TRUE
if(mover == caster)
return TRUE
return FALSE
@@ -589,6 +598,8 @@ Difficulty: Hard
do_damage(get_turf(src))
/obj/effect/temp_visual/hierophant/blast/proc/do_damage(turf/T)
if(!damage)
return
for(var/mob/living/L in T.contents - hit_things) //find and damage mobs...
hit_things += L
if((friendly_fire_check && caster && caster.faction_check_mob(L)) || L.stat == DEAD)
@@ -34,6 +34,7 @@
/obj/structure/barricade,
/obj/machinery/field,
/obj/machinery/power/emitter)
var/list/crusher_loot
var/medal_type = MEDAL_PREFIX
var/score_type = BOSS_SCORE
var/elimination = 0
@@ -44,6 +45,10 @@
layer = LARGE_MOB_LAYER //Looks weird with them slipping under mineral walls and cameras and shit otherwise
mouse_opacity = 2 // Easier to click on in melee, they're giant targets anyway
/mob/living/simple_animal/hostile/megafauna/Initialize(mapload)
. = ..()
apply_status_effect(STATUS_EFFECT_CRUSHERDAMAGETRACKING)
/mob/living/simple_animal/hostile/megafauna/Destroy()
QDEL_NULL(internal)
. = ..()
@@ -52,12 +57,19 @@
if(health > 0)
return
else
var/datum/status_effect/crusher_damage/C = has_status_effect(STATUS_EFFECT_CRUSHERDAMAGETRACKING)
if(C && crusher_loot)
if(C.total_damage >= maxHealth * 0.60) //if you do at least 60% of its health with the crusher, you'll get the item
spawn_crusher_loot()
if(!admin_spawned)
SSblackbox.set_details("megafauna_kills","[initial(name)]")
if(!elimination) //used so the achievment only occurs for the last legion to die.
grant_achievement(medal_type,score_type)
..()
/mob/living/simple_animal/hostile/megafauna/proc/spawn_crusher_loot()
loot = crusher_loot
/mob/living/simple_animal/hostile/megafauna/gib()
if(health > 0)
return
@@ -23,3 +23,51 @@
environment_smash = ENVIRONMENT_SMASH_NONE
del_on_death = 0
/mob/living/simple_animal/hostile/retaliate/nanotrasenpeace
name = "Nanotrasen Private Security Officer"
desc = "An officer part of Nanotrasen's private security force."
icon = 'icons/mob/simple_human.dmi'
icon_state = "nanotrasen"
icon_living = "nanotrasen"
icon_dead = null
icon_gib = "syndicate_gib"
turns_per_move = 5
response_help = "pokes"
response_disarm = "shoves"
response_harm = "hits"
speed = 0
stat_attack = 1
robust_searching = 1
vision_range = 3
maxHealth = 100
health = 100
harm_intent_damage = 5
melee_damage_lower = 10
melee_damage_upper = 15
attacktext = "punches"
attack_sound = 'sound/weapons/punch1.ogg'
faction = list("nanotrasenprivate")
a_intent = INTENT_HARM
loot = list(/obj/effect/mob_spawn/human/corpse/nanotrasensoldier)
atmos_requirements = list("min_oxy" = 5, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 1, "min_co2" = 0, "max_co2" = 5, "min_n2" = 0, "max_n2" = 0)
unsuitable_atmos_damage = 15
status_flags = CANPUSH
search_objects = 1
/mob/living/simple_animal/hostile/retaliate/nanotrasenpeace/Aggro()
..()
summon_backup(15)
say("411 in progress, requesting backup!")
/mob/living/simple_animal/hostile/retaliate/nanotrasenpeace/ranged
icon_state = "nanotrasenrangedsmg"
icon_living = "nanotrasenrangedsmg"
vision_range = 9
rapid = 1
ranged = 1
retreat_distance = 3
minimum_distance = 5
casingtype = /obj/item/ammo_casing/c46x30mm
projectilesound = 'sound/weapons/Gunshot_smg.ogg'
loot = list(/obj/item/weapon/gun/ballistic/automatic/wt550,
/obj/effect/mob_spawn/human/corpse/nanotrasensoldier)
@@ -309,11 +309,11 @@
if(Target)
--target_patience
if (target_patience <= 0 || SStun || Discipline || attacked || docile) // Tired of chasing or something draws out attention
if (target_patience <= 0 || SStun > world.time || Discipline || attacked || docile) // Tired of chasing or something draws out attention
target_patience = 0
Target = null
if(AIproc && SStun)
if(AIproc && SStun > world.time)
return
var/hungry = 0 // determines if the slime is hungry
@@ -394,11 +394,7 @@
if(buckled)
Feedstop(silent=1) //we unbuckle the slime from the mob it latched onto.
spawn(0)
SStun = 1
sleep(rand(20,60))
SStun = 0
SStun = world.time + rand(20,60)
spawn(0)
canmove = 0
if(user)
+6 -1
View File
@@ -39,4 +39,9 @@
if(client)
client.click_intercept = null
client.view = world.view // Resets the client.view in case it was changed.
client.view = world.view // Resets the client.view in case it was changed.
if(!GLOB.individual_log_list[ckey])
GLOB.individual_log_list[ckey] = logging
else
logging = GLOB.individual_log_list[ckey]
+1 -1
View File
@@ -473,7 +473,7 @@ It's fairly easy to fix if dealing with single letters but not so much with comp
ClickOn(T)
/mob/proc/log_message(message, message_type)
if(!LAZYLEN(message) || !message_type)
if(!LAZYLEN(message) || !message_type)
return
if(!islist(logging[message_type]))
@@ -19,7 +19,7 @@
var/list/region_access = null
var/list/head_subordinates = null
var/target_dept = 0 //Which department this computer has access to. 0=all departments
var/change_position_cooldown = 60
var/change_position_cooldown = 30
//Jobs you cannot open new positions for
var/list/blacklisted = list(
"AI",
@@ -39,6 +39,10 @@
//Assoc array: "JobName" = (int)<Opened Positions>
var/list/opened_positions = list();
/datum/computer_file/program/card_mod/New()
..()
change_position_cooldown = config.id_console_jobslot_delay
/datum/computer_file/program/card_mod/event_idremoved(background, slot)
if(!slot || slot == 2)// slot being false means both are removed
-1
View File
@@ -304,7 +304,6 @@
else
info += t // Oh, he wants to edit to the end of the file, let him.
updateinfolinks()
i.on_write(src,usr)
usr << browse("<HTML><HEAD><TITLE>[name]</TITLE></HEAD><BODY>[info_links]<HR>[stamps]</BODY><div align='right'style='position:fixed;bottom:0;font-style:bold;'><A href='?src=\ref[src];help=1'>\[?\]</A></div></HTML>", "window=[name]") // Update the window
update_icon()
-9
View File
@@ -197,12 +197,3 @@
else
icon_state = initial(icon_state) //looks like a normal pen when off.
item_state = initial(item_state)
//Crayons path disambiguity sigh.
/obj/item/proc/on_write(obj/item/weapon/paper/P, mob/user)
return
/obj/item/weapon/pen/poison/on_write(obj/item/weapon/paper/P, mob/user)
P.contact_poison = "delayed_toxin"
P.contact_poison_volume = 10
add_logs(user,P,"used poison pen on")
@@ -18,12 +18,12 @@
/obj/item/weapon/am_containment/ex_act(severity, target)
switch(severity)
if(1)
explosion(get_turf(src), 1, 2, 3, 5)//Should likely be larger but this works fine for now I guess
explosion(get_turf(src), 1, 2, 3, 5)//Should likely be larger but this works fine for now I guess
if(src)
qdel(src)
if(2)
if(prob((fuel/10)-stability))
explosion(get_turf(src), 1, 2, 3, 5)
explosion(get_turf(src), 1, 2, 3, 5)
if(src)
qdel(src)
return
+1 -1
View File
@@ -46,7 +46,7 @@
/obj/machinery/power/am_control_unit/process()
if(exploding)
explosion(get_turf(src),8,12,18,12)
explosion(get_turf(src),8,12,18,12)
if(src)
qdel(src)
+14 -10
View File
@@ -27,8 +27,6 @@
#define APC_UPOVERLAY_OPERATING 8192
#define APC_UPDATE_ICON_COOLDOWN 200 // 20 seconds
// the Area Power Controller (APC), formerly Power Distribution Unit (PDU)
// one per area, needs wire conection to power network through a terminal
@@ -93,13 +91,11 @@
var/force_update = 0
var/update_state = -1
var/update_overlay = -1
var/icon_update_needed = FALSE
/obj/machinery/power/apc/connect_to_network()
//Override because the APC does not directly connect to the network; it goes through a terminal.
//The terminal is what the power computer looks for anyway.
if(!terminal)
make_terminal()
if(terminal)
terminal.connect_to_network()
@@ -212,11 +208,11 @@
// update the APC icon to show the three base states
// also add overlays for indicator lights
/obj/machinery/power/apc/update_icon()
var/update = check_updates() //returns 0 if no need to update icons.
// 1 if we need to update the icon_state
// 2 if we need to update the overlays
if(!update)
icon_update_needed = FALSE
return
if(update & 1) // Updating the icon state
@@ -240,6 +236,8 @@
icon_state = "apcemag"
else if(update_state & UPSTATE_WIREEXP)
icon_state = "apcewires"
else if(update_state & UPSTATE_MAINT)
icon_state = "apc0"
if(!(update_state & UPSTATE_ALLGOOD))
cut_overlays()
@@ -272,8 +270,9 @@
else
set_light(0)
/obj/machinery/power/apc/proc/check_updates()
icon_update_needed = FALSE
/obj/machinery/power/apc/proc/check_updates()
var/last_update_state = update_state
var/last_update_overlay = update_overlay
update_state = 0
@@ -344,7 +343,7 @@
// Used in process so it doesn't update the icon too much
/obj/machinery/power/apc/proc/queue_icon_update()
addtimer(CALLBACK(src, .proc/update_icon), APC_UPDATE_ICON_COOLDOWN, TIMER_UNIQUE)
icon_update_needed = TRUE
//attack with an item - open/close cover, insert cell, or (un)lock interface
@@ -446,6 +445,8 @@
update_icon()
else if(emagged)
to_chat(user, "<span class='warning'>The interface is broken!</span>")
else if((stat & MAINT) && !opened)
..() //its an empty closed frame... theres no wires to expose!
else
panel_open = !panel_open
to_chat(user, "The wires have been [panel_open ? "exposed" : "unexposed"]")
@@ -632,6 +633,8 @@
charging = 0
src.update_icon()
return
if((stat & MAINT) && !opened) //no board; no interface
return
..()
/obj/machinery/power/apc/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = 0, \
@@ -828,7 +831,7 @@
if(!malf.can_shunt)
to_chat(malf, "<span class='warning'>You cannot shunt!</span>")
return
if(src.z != 1)
if(src.z != ZLEVEL_STATION)
return
occupier = new /mob/living/silicon/ai(src, malf.laws, malf) //DEAR GOD WHY? //IKR????
occupier.adjustOxyLoss(malf.getOxyLoss())
@@ -937,7 +940,8 @@
return 0
/obj/machinery/power/apc/process()
if(icon_update_needed)
update_icon()
if(stat & (BROKEN|MAINT))
return
if(!area.requires_power)
+8 -6
View File
@@ -509,6 +509,7 @@ GLOBAL_LIST_INIT(cable_coil_recipes, list (new/datum/stack_recipe("cable restrai
slot_flags = SLOT_BELT
attack_verb = list("whipped", "lashed", "disciplined", "flogged")
singular_name = "cable piece"
full_w_class = WEIGHT_CLASS_SMALL
/obj/item/stack/cable_coil/cyborg
is_cyborg = 1
@@ -527,7 +528,7 @@ GLOBAL_LIST_INIT(cable_coil_recipes, list (new/datum/stack_recipe("cable restrai
user.visible_message("<span class='suicide'>[user] is strangling [user.p_them()]self with [src]! It looks like [user.p_theyre()] trying to commit suicide!</span>")
return(OXYLOSS)
/obj/item/stack/cable_coil/New(loc, new_amount = null, var/param_color = null)
/obj/item/stack/cable_coil/Initialize(mapload, new_amount = null, param_color = null)
. = ..()
if(new_amount) // MAXCOIL by default
amount = new_amount
@@ -779,9 +780,9 @@ GLOBAL_LIST_INIT(cable_coil_recipes, list (new/datum/stack_recipe("cable restrai
/obj/item/stack/cable_coil/cut
item_state = "coil_red2"
/obj/item/stack/cable_coil/cut/New(loc)
..()
src.amount = rand(1,2)
/obj/item/stack/cable_coil/cut/Initialize(mapload)
. =..()
amount = rand(1,2)
pixel_x = rand(-2,2)
pixel_y = rand(-2,2)
update_icon()
@@ -819,10 +820,11 @@ GLOBAL_LIST_INIT(cable_coil_recipes, list (new/datum/stack_recipe("cable restrai
item_color = "white"
icon_state = "coil_white"
/obj/item/stack/cable_coil/random/New()
/obj/item/stack/cable_coil/random/Initialize(mapload)
. = ..()
item_color = pick("red","orange","yellow","green","cyan","blue","pink","white")
icon_state = "coil_[item_color]"
..()
/obj/item/stack/cable_coil/random/five
amount = 5
+1 -1
View File
@@ -123,7 +123,7 @@
corrupt()
return
//explosion(T, 0, 1, 2, 2)
explosion(T, devastation_range, heavy_impact_range, light_impact_range, flash_range)
explosion(T, devastation_range, heavy_impact_range, light_impact_range, flash_range)
qdel(src)
/obj/item/weapon/stock_parts/cell/proc/corrupt()
+3 -3
View File
@@ -167,7 +167,7 @@
src.updateDialog()
/obj/machinery/power/port_gen/pacman/proc/overheat()
explosion(src.loc, 2, 5, 2, -1)
explosion(src.loc, 2, 5, 2, -1)
/obj/machinery/power/port_gen/pacman/attackby(obj/item/O, mob/user, params)
if(istype(O, sheet_path))
@@ -294,7 +294,7 @@
board_path = /obj/item/weapon/circuitboard/machine/pacman/super
/obj/machinery/power/port_gen/pacman/super/overheat()
explosion(src.loc, 3, 3, 3, -1)
explosion(src.loc, 3, 3, 3, -1)
/obj/machinery/power/port_gen/pacman/mrs
name = "\improper M.R.S.P.A.C.M.A.N.-type portable generator"
@@ -305,4 +305,4 @@
board_path = /obj/item/weapon/circuitboard/machine/pacman/mrs
/obj/machinery/power/port_gen/pacman/mrs/overheat()
explosion(src.loc, 4, 4, 4, -1)
explosion(src.loc, 4, 4, 4, -1)
@@ -23,7 +23,8 @@
#define SEVERE_POWER_PENALTY_THRESHOLD 7000 //Same as above, but causes more dangerous effects
#define CRITICAL_POWER_PENALTY_THRESHOLD 9000 //Even more dangerous effects, threshold for tesla delamination
#define HEAT_PENALTY_THRESHOLD 40 //Higher == Crystal safe operational temperature is higher.
#define DAMAGE_HARDCAP 0.01
#define DAMAGE_HARDCAP 0.0025
#define DAMAGE_INCREASE_MULTIPLIER 0.25
#define THERMAL_RELEASE_MODIFIER 5 //Higher == less heat released during reaction, not to be confused with the above values
@@ -214,9 +215,9 @@
damage_archived = damage
if(takes_damage)
//causing damage
damage = max(damage + (max(removed.temperature - ((T0C + HEAT_PENALTY_THRESHOLD)*dynamic_heat_resistance), 0) * mole_heat_penalty / 150 ), 0)
damage = max(damage + (max(power - POWER_PENALTY_THRESHOLD, 0)/500), 0)
damage = max(damage + (max(combined_gas - MOLE_PENALTY_THRESHOLD, 0)/80), 0)
damage = max(damage + (max(removed.temperature - ((T0C + HEAT_PENALTY_THRESHOLD)*dynamic_heat_resistance), 0) * mole_heat_penalty / 150 ) * DAMAGE_INCREASE_MULTIPLIER, 0)
damage = max(damage + (max(power - POWER_PENALTY_THRESHOLD, 0)/500) * DAMAGE_INCREASE_MULTIPLIER, 0)
damage = max(damage + (max(combined_gas - MOLE_PENALTY_THRESHOLD, 0)/80) * DAMAGE_INCREASE_MULTIPLIER, 0)
//healing damage
if(combined_gas < MOLE_PENALTY_THRESHOLD)
@@ -0,0 +1,30 @@
/datum/mapGeneratorModule/bottomLayer/lavaland_default
spawnableTurfs = list(/turf/open/floor/plating/asteroid/basalt/lava_land_surface = 100)
/datum/mapGeneratorModule/bottomLayer/lavaland_mineral
spawnableTurfs = list(/turf/closed/mineral/random/volcanic = 100)
/datum/mapGeneratorModule/bottomLayer/lavaland_mineral/dense
spawnableTurfs = list(/turf/closed/mineral/random/high_chance/volcanic = 100)
/datum/mapGeneratorModule/splatterLayer/lavalandMonsters
spawnableTurfs = list()
spawnableAtoms = list(/mob/living/simple_animal/hostile/asteroid/goliath/beast = 10,
/mob/living/simple_animal/hostile/asteroid/hivelord/legion = 10,
/mob/living/simple_animal/hostile/asteroid/basilisk/watcher = 10)
/datum/mapGeneratorModule/splatterLayer/lavalandTendrils
spawnableTurfs = list()
spawnableAtoms = list(/mob/living/simple_animal/hostile/spawner/lavaland = 5,
/mob/living/simple_animal/hostile/spawner/lavaland/legion = 5,
/mob/living/simple_animal/hostile/spawner/lavaland/goliath = 5)
/datum/mapGenerator/lavaland/ground_only
modules = list(/datum/mapGeneratorModule/bottomLayer/lavaland_default)
/datum/mapGenerator/lavaland/dense_ores
modules = list(/datum/mapGeneratorModule/bottomLayer/lavaland_mineral/dense)
/datum/mapGenerator/lavaland/normal_ores
modules = list(/datum/mapGeneratorModule/bottomLayer/lavaland_mineral)
@@ -0,0 +1,29 @@
/datum/mapGeneratorModule/bottomLayer/repairFloorPlasteel
spawnableTurfs = list(/turf/open/floor/plasteel = 100)
var/ignore_wall = FALSE
/datum/mapGeneratorModule/bottomLayer/repairFloorPlasteel/place(turf/T)
if(isclosedturf(T))
return FALSE
return TRUE
/datum/mapGeneratorModule/bottomLayer/repairFloorPlasteel/flatten
ignore_wall = TRUE
/datum/mapGeneratorModule/border/normalWalls
spawnableAtoms = list()
spawnableTurfs = list(/turf/closed/wall = 100)
/datum/mapGenerator/repair
modules = list(/datum/mapGeneratorModule/bottomLayer/repairFloorPlasteel,
/datum/mapGeneratorModule/bottomLayer/repressurize)
/datum/mapGenerator/repair/delete_walls
modules = list(/datum/mapGeneratorModule/bottomLayer/repairFloorPlasteel/flatten,
/datum/mapGeneratorModule/bottomLayer/repressurize)
/datum/mapGenerator/repair/enclose_room
modules = list(/datum/mapGeneratorModule/bottomLayer/repairFloorPlasteel/flatten,
/datum/mapGeneratorModule/border/normalWalls,
/datum/mapGeneratorModule/bottomLayer/repressurize)
@@ -117,7 +117,7 @@
desc = "A .50 bullet casing, specialised in sending the target to sleep, instead of hell."
caliber = ".50"
projectile_type = /obj/item/projectile/bullet/sniper/soporific
icon_state = ".50"
icon_state = "sleeper"
/obj/item/ammo_casing/haemorrhage
desc = "A .50 bullet casing, specialised in causing massive bloodloss"
@@ -131,7 +131,14 @@
projectile_type = /obj/item/projectile/bullet/sniper/penetrator
icon_state = ".50"
/obj/item/ammo_casing/point50/gang
desc = "A black market .50 bullet casing."
projectile_type = /obj/item/projectile/bullet/sniper/gang
/obj/item/ammo_casing/point50/gang/sleeper
desc = "Am illegally modified tranquilizer round."
projectile_type = /obj/item/projectile/bullet/sniper/gang/sleeper
icon_state = "sleeper"
/// SAW ROUNDS
@@ -264,6 +264,17 @@
origin_tech = "combat=6;syndicate=3"
max_ammo = 5
/obj/item/ammo_box/magazine/sniper_rounds/gang
name = "black market sniper rounds (.50)"
icon_state = ".50mag"
origin_tech = "combat=6"
ammo_type = /obj/item/ammo_casing/point50/gang
/obj/item/ammo_box/magazine/sniper_rounds/gang/sleeper
name = "illegally modified tranquilizer round"
icon_state = "soporific"
origin_tech = "combat=6"
ammo_type = /obj/item/ammo_casing/point50/gang/sleeper
//// SAW MAGAZINES
@@ -371,4 +382,4 @@
icon_state = "oldrifle-[round(ammo_count(),4)]"
/obj/item/ammo_box/magazine/recharge/attack_self() //No popping out the "bullets"
return
return

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