Merge remote-tracking branch 'refs/remotes/ParadiseSS13/master' into navconsoles2

# Conflicts:
#	code/modules/shuttle/shuttle.dm
This commit is contained in:
datlo
2019-02-11 13:31:37 +00:00
112 changed files with 2304 additions and 570 deletions
+25
View File
@@ -1067,3 +1067,28 @@ var/gamma_ship_location = 1 // 0 = station , 1 = space
continue
result[1]++
return result
//Discord duplications
/datum/admins/proc/discord_duplicates()
if(!usr.client.holder)
return
var/dat = "<html><head><title>Discord Duplicates</title></head>"
dat += "<body><p><i>Discord IDs with more than one ckey linked are shown below</i></i><table border=1 cellspacing=5><B><tr><th>Discord ID</th><th>CKEYs</th><th>Unlink</th></B>"
// If anyone reads this, I spent a whole 30 minutes writing just this fucking query. It is the messiest SQL statement I have ever written
// If anyone even thinks about touching this I will impale you on a railroad spike
// It hurts to wake up in the morning, -aa07
var/DBQuery/discord_ids = dbcon.NewQuery("SELECT a.* FROM [format_table_name("discord")] a JOIN (SELECT discord_id, ckey, COUNT(*) FROM [format_table_name("discord")] GROUP BY discord_id HAVING count(*) > 1 ) b ON a.discord_id = b.discord_id ORDER BY a.discord_id")
if(!discord_ids.Execute())
var/err = discord_ids.ErrorMsg()
log_game("SQL ERROR while selecting discord accounts. Error : \[[err]\]\n")
return
while(discord_ids.NextRow())
var/ckey = discord_ids.item[1]
var/id = discord_ids.item[2]
dat += "<tr><td><b>" + id + "</b></td>"
dat += "<td>" + ckey + "</td>"
dat += "<td><a href='?src=[UID()];force_discord_unlink=[ckey]'>Unlink</td></tr>"
dat += "</table></body></html>"
usr << browse(dat, "window=duplicates;size=500x480")
+10
View File
@@ -79,6 +79,7 @@ var/list/admin_verbs_admin = list(
/client/proc/list_ssds,
/client/proc/cmd_admin_headset_message,
/client/proc/spawn_floor_cluwne,
/client/proc/show_discord_duplicates,
)
var/list/admin_verbs_ban = list(
/client/proc/unban_panel,
@@ -1045,3 +1046,12 @@ var/list/admin_verbs_ticket = list(
log_admin("[key_name(usr)] has [advanced_admin_interaction ? "activated" : "deactivated"] their advanced admin interaction.")
message_admins("[key_name_admin(usr)] has [advanced_admin_interaction ? "activated" : "deactivated"] their advanced admin interaction.")
/client/proc/show_discord_duplicates()
set name = "Show Duplicate Discord Links"
set category = "Admin"
if(!check_rights(R_ADMIN))
return
holder.discord_duplicates()
+14
View File
@@ -3349,6 +3349,20 @@
// Refresh the page
src.view_flagged_books()
// Force unlink a discord key
else if(href_list["force_discord_unlink"])
if(!check_rights(R_ADMIN))
return
var/target_ckey = href_list["force_discord_unlink"]
var/DBQuery/admin_unlink_discord_id = dbcon.NewQuery("DELETE FROM [format_table_name("discord")] WHERE ckey = '[target_ckey]'")
if(!admin_unlink_discord_id.Execute())
var/err = admin_unlink_discord_id.ErrorMsg()
log_game("SQL ERROR while admin-unlinking discord account. Error : \[[err]\]\n")
return
to_chat(src, "<span class='notice'>Successfully forcefully unlinked discord account from [target_ckey]</span>")
message_admins("[key_name_admin(usr)] forcefully unlinked the discord account belonging to [target_ckey]")
log_admin("[key_name_admin(usr)] forcefully unlinked the discord account belonging to [target_ckey]")
/client/proc/create_eventmob_for(var/mob/living/carbon/human/H, var/killthem = 0)
if(!check_rights(R_EVENT))
return
@@ -0,0 +1,136 @@
//Golem shells: Spawns in Free Golem ships in lavaland, or through xenobiology adamantine extract.
//Xenobiology golems are slaved to their creator.
/obj/item/golem_shell
name = "incomplete free golem shell"
icon = 'icons/obj/wizard.dmi'
icon_state = "construct"
desc = "The incomplete body of a golem. Add ten sheets of any mineral to finish."
var/shell_type = /obj/effect/mob_spawn/human/golem
w_class = WEIGHT_CLASS_BULKY
/obj/item/golem_shell/servant
name = "incomplete servant golem shell"
shell_type = /obj/effect/mob_spawn/human/golem/servant
/obj/item/golem_shell/attackby(obj/item/I, mob/user, params)
..()
var/static/list/golem_shell_species_types = list(
/obj/item/stack/sheet/metal = /datum/species/golem,
/obj/item/stack/sheet/glass = /datum/species/golem/glass,
/obj/item/stack/sheet/plasteel = /datum/species/golem/plasteel,
/obj/item/stack/ore/glass = /datum/species/golem/sand,
/obj/item/stack/sheet/mineral/sandstone = /datum/species/golem/sand,
/obj/item/stack/sheet/mineral/plasma = /datum/species/golem/plasma,
/obj/item/stack/sheet/mineral/diamond = /datum/species/golem/diamond,
/obj/item/stack/sheet/mineral/gold = /datum/species/golem/gold,
/obj/item/stack/sheet/mineral/silver = /datum/species/golem/silver,
/obj/item/stack/sheet/mineral/uranium = /datum/species/golem/uranium,
/obj/item/stack/sheet/mineral/bananium = /datum/species/golem/bananium,
/obj/item/stack/sheet/mineral/tranquillite = /datum/species/golem/tranquillite,
/obj/item/stack/sheet/mineral/titanium = /datum/species/golem/titanium,
/obj/item/stack/sheet/mineral/plastitanium = /datum/species/golem/plastitanium,
/obj/item/stack/sheet/mineral/abductor = /datum/species/golem/alloy,
/obj/item/stack/sheet/wood = /datum/species/golem/wood,
/obj/item/stack/sheet/bluespace_crystal = /datum/species/golem/bluespace,
/obj/item/stack/sheet/mineral/adamantine = /datum/species/golem/adamantine,
/obj/item/stack/sheet/plastic = /datum/species/golem/plastic)
if(istype(I, /obj/item/stack))
var/obj/item/stack/O = I
var/species = golem_shell_species_types[O.merge_type]
if(species)
if(O.use(10))
to_chat(user, "You finish up the golem shell with ten sheets of [O].")
new shell_type(get_turf(src), species, user)
qdel(src)
else
to_chat(user, "You need at least ten sheets to finish a golem.")
else
to_chat(user, "You can't build a golem out of this kind of material.")
/obj/effect/mob_spawn/human/golem
name = "inert free golem shell"
desc = "A humanoid shape, empty, lifeless, and full of potential."
mob_name = "a free golem"
icon = 'icons/obj/wizard.dmi'
icon_state = "construct"
mob_species = /datum/species/golem
roundstart = FALSE
death = FALSE
anchored = FALSE
move_resist = MOVE_FORCE_NORMAL
density = FALSE
var/has_owner = FALSE
var/can_transfer = TRUE //if golems can switch bodies to this new shell
var/mob/living/owner = null //golem's owner if it has one
flavour_text = "<span class='big bold'>You are a Free Golem.</span><b> Your family worships <span class='danger'>The Liberator</span>. In his infinite and divine wisdom, he set your clan free to \
travel the stars with a single declaration: \"Yeah go do whatever.\" Though you are bound to the one who created you, it is customary in your society to repeat those same words to newborn \
golems, so that no golem may ever be forced to serve again.</b>"
/obj/effect/mob_spawn/human/golem/Initialize(mapload, datum/species/golem/species = null, mob/creator = null)
if(species) //spawners list uses object name to register so this goes before ..()
name += " ([initial(species.prefix)])"
mob_species = species
. = ..()
var/area/A = get_area(src)
if(!mapload && A)
notify_ghosts("\A [initial(species.prefix)] golem shell has been completed in [A.name].", source = src)
if(has_owner && creator)
flavour_text = "<span class='big bold'>You are a Golem.</span><b> You move slowly, but are highly resistant to heat and cold as well as blunt trauma. You are unable to wear clothes, but can still use most tools. \
Serve [creator], and assist [creator.p_them()] in completing [creator.p_their()] goals at any cost.</b>"
owner = creator
/obj/effect/mob_spawn/human/golem/special(mob/living/new_spawn, name)
var/datum/species/golem/X = mob_species
to_chat(new_spawn, "[initial(X.info_text)]")
if(!owner)
to_chat(new_spawn, "Build golem shells in the autolathe, and feed refined mineral sheets to the shells to bring them to life! You are generally a peaceful group unless provoked.")
to_chat(new_spawn, "<span class='warning'>You are not an antagonist, but you are not a crewmember either. \
You may interact or trade with crew you come across, aswell as defend yourself and your ship \
but avoid actively interfering with the station unless you have a valid roleplay reason to do so, such as an invitation by crewmembers.</span>")
else
new_spawn.mind.store_memory("<b>Serve [owner.real_name], your creator.</b>")
log_game("[key_name(new_spawn)] possessed a golem shell enslaved to [key_name(owner)].")
log_admin("[key_name(new_spawn)] possessed a golem shell enslaved to [key_name(owner)].")
if(ishuman(new_spawn))
var/mob/living/carbon/human/H = new_spawn
if(has_owner)
var/datum/species/golem/G = H.dna.species
G.owner = owner
if(!name)
H.rename_character(null, H.dna.species.get_random_name())
else
H.rename_character(null, name)
if(has_owner)
new_spawn.mind.assigned_role = "Servant Golem"
else
new_spawn.mind.assigned_role = "Free Golem"
/obj/effect/mob_spawn/human/golem/attack_hand(mob/user)
. = ..()
if(.)
return
if(isgolem(user) && can_transfer)
var/transfer_choice = alert("Transfer your soul to [src]? (Warning, your old body will die!)",,"Yes","No")
if(transfer_choice != "Yes")
return
if(QDELETED(src) || uses <= 0)
return
log_game("[key_name(user)] golem-swapped into [src]")
user.visible_message("<span class='notice'>A faint light leaves [user], moving to [src] and animating it!</span>","<span class='notice'>You leave your old body behind, and transfer into [src]!</span>")
create(ckey = user.ckey, name = user.real_name)
user.death()
return
/obj/effect/mob_spawn/human/golem/servant
has_owner = TRUE
name = "inert servant golem shell"
mob_name = "a servant golem"
/obj/effect/mob_spawn/human/golem/adamantine
name = "dust-caked free golem shell"
desc = "A humanoid shape, empty, lifeless, and full of potential."
mob_name = "a free golem"
can_transfer = FALSE
mob_species = /datum/species/golem/adamantine
@@ -0,0 +1,110 @@
//Ancient cryogenic sleepers. Players become NT crewmen from a hundred year old space station, now on the verge of collapse.
/obj/effect/mob_spawn/human/oldsec
name = "old cryogenics pod"
desc = "A humming cryo pod. You can barely recognise a security uniform underneath the built up ice. The machine is attempting to wake up its occupant."
mob_name = "a security officer"
icon = 'icons/obj/cryogenic2.dmi'
icon_state = "sleeper"
roundstart = FALSE
death = FALSE
random = TRUE
mob_species = /datum/species/human
flavour_text = "<span class='big bold'>You are a security officer working for Nanotrasen,</span><b> stationed onboard a state of the art research station. You vaguely recall rushing into a \
cryogenics pod due to an oncoming radiation storm. The last thing you remember is the station's Artificial Program telling you that you would only be asleep for eight hours. As you open \
your eyes, everything seems rusted and broken, a dark feeling swells in your gut as you climb out of your pod. \
Work as a team with your fellow survivors and do not abandon them.</b>"
uniform = /obj/item/clothing/under/retro/security
shoes = /obj/item/clothing/shoes/jackboots
id = /obj/item/card/id/away/old/sec
r_pocket = /obj/item/restraints/handcuffs
l_pocket = /obj/item/flash
assignedrole = "Ancient Crew"
/obj/effect/mob_spawn/human/oldsec/Destroy()
new /obj/structure/showcase/machinery/oldpod/used(drop_location())
return ..()
/obj/effect/mob_spawn/human/oldmed
name = "old cryogenics pod"
desc = "A humming cryo pod. You can barely recognise a medical uniform underneath the built up ice. The machine is attempting to wake up its occupant."
mob_name = "a medical doctor"
icon = 'icons/obj/cryogenic2.dmi'
icon_state = "sleeper"
roundstart = FALSE
death = FALSE
random = TRUE
mob_species = /datum/species/human
flavour_text = "<span class='big bold'>You are a medical working for Nanotrasen,</span><b> stationed onboard a state of the art research station. You vaguely recall rushing into a \
cryogenics pod due to an oncoming radiation storm. The last thing you remember is the station's Artificial Program telling you that you would only be asleep for eight hours. As you open \
your eyes, everything seems rusted and broken, a dark feeling swells in your gut as you climb out of your pod. \
Work as a team with your fellow survivors and do not abandon them.</b>"
uniform = /obj/item/clothing/under/retro/medical
shoes = /obj/item/clothing/shoes/black
id = /obj/item/card/id/away/old/med
l_pocket = /obj/item/stack/medical/ointment
r_pocket = /obj/item/stack/medical/ointment
assignedrole = "Ancient Crew"
/obj/effect/mob_spawn/human/oldmed/Destroy()
new /obj/structure/showcase/machinery/oldpod/used(drop_location())
return ..()
/obj/effect/mob_spawn/human/oldeng
name = "old cryogenics pod"
desc = "A humming cryo pod. You can barely recognise an engineering uniform underneath the built up ice. The machine is attempting to wake up its occupant."
mob_name = "an engineer"
icon = 'icons/obj/cryogenic2.dmi'
icon_state = "sleeper"
roundstart = FALSE
death = FALSE
random = TRUE
mob_species = /datum/species/human
flavour_text = "<span class='big bold'>You are an engineer working for Nanotrasen,</span><b> stationed onboard a state of the art research station. You vaguely recall rushing into a \
cryogenics pod due to an oncoming radiation storm. The last thing you remember is the station's Artificial Program telling you that you would only be asleep for eight hours. As you open \
your eyes, everything seems rusted and broken, a dark feeling swells in your gut as you climb out of your pod. \
Work as a team with your fellow survivors and do not abandon them.</b>"
uniform = /obj/item/clothing/under/retro/engineering
shoes = /obj/item/clothing/shoes/workboots
id = /obj/item/card/id/away/old/eng
gloves = /obj/item/clothing/gloves/color/fyellow/old
l_pocket = /obj/item/tank/emergency_oxygen
assignedrole = "Ancient Crew"
/obj/effect/mob_spawn/human/oldeng/Destroy()
new /obj/structure/showcase/machinery/oldpod/used(drop_location())
return ..()
/obj/effect/mob_spawn/human/oldsci
name = "old cryogenics pod"
desc = "A humming cryo pod. You can barely recognise a science uniform underneath the built up ice. The machine is attempting to wake up its occupant."
mob_name = "a scientist"
icon = 'icons/obj/cryogenic2.dmi'
icon_state = "sleeper"
roundstart = FALSE
death = FALSE
random = TRUE
mob_species = /datum/species/human
flavour_text = "<span class='big bold'>You are a scientist working for Nanotrasen,</span><b> stationed onboard a state of the art research station. You vaguely recall rushing into a \
cryogenics pod due to an oncoming radiation storm. The last thing you remember is the station's Artificial Program telling you that you would only be asleep for eight hours. As you open \
your eyes, everything seems rusted and broken, a dark feeling swells in your gut as you climb out of your pod. \
Work as a team with your fellow survivors and do not abandon them.</b>"
uniform = /obj/item/clothing/under/retro/science
shoes = /obj/item/clothing/shoes/laceup
id = /obj/item/card/id/away/old/sci
l_pocket = /obj/item/stack/medical/bruise_pack
assignedrole = "Ancient Crew"
/obj/effect/mob_spawn/human/oldsci/Destroy()
new /obj/structure/showcase/machinery/oldpod/used(drop_location())
return ..()
/obj/structure/showcase/machinery/oldpod
name = "damaged cryogenic pod"
desc = "A damaged cryogenic pod long since lost to time, including its former occupant..."
icon = 'icons/obj/cryogenic2.dmi'
icon_state = "sleeper-open"
/obj/structure/showcase/machinery/oldpod/used
name = "opened cryogenic pod"
desc = "A cryogenic pod that has recently discharged its occupant. The pod appears non-functional."
@@ -360,116 +360,4 @@
/area/ruin/space/ancientstation/hivebot
name = "Hivebot Mothership"
icon_state = "teleporter"
// Mob Spawners
//Ancient cryogenic sleepers. Players become NT crewmen from a hundred year old space station, now on the verge of collapse.
/obj/effect/mob_spawn/human/oldsec
name = "old cryogenics pod"
desc = "A humming cryo pod. You can barely recognise a security uniform underneath the built up ice. The machine is attempting to wake up its occupant."
mob_name = "a security officer"
icon = 'icons/obj/cryogenic2.dmi'
icon_state = "sleeper"
roundstart = FALSE
death = FALSE
random = TRUE
mob_species = /datum/species/human
flavour_text = "<span class='big bold'>You are a security officer working for Nanotrasen,</span><b> stationed onboard a state of the art research station. You vaguely recall rushing into a \
cryogenics pod due to an oncoming radiation storm. The last thing you remember is the station's Artificial Program telling you that you would only be asleep for eight hours. As you open \
your eyes, everything seems rusted and broken, a dark feeling swells in your gut as you climb out of your pod. \
Work as a team with your fellow survivors and do not abandon them.</b>"
uniform = /obj/item/clothing/under/retro/security
shoes = /obj/item/clothing/shoes/jackboots
id = /obj/item/card/id/away/old/sec
r_pocket = /obj/item/restraints/handcuffs
l_pocket = /obj/item/flash
assignedrole = "Ancient Crew"
/obj/effect/mob_spawn/human/oldsec/Destroy()
new /obj/structure/showcase/machinery/oldpod/used(drop_location())
return ..()
/obj/effect/mob_spawn/human/oldmed
name = "old cryogenics pod"
desc = "A humming cryo pod. You can barely recognise a medical uniform underneath the built up ice. The machine is attempting to wake up its occupant."
mob_name = "a medical doctor"
icon = 'icons/obj/cryogenic2.dmi'
icon_state = "sleeper"
roundstart = FALSE
death = FALSE
random = TRUE
mob_species = /datum/species/human
flavour_text = "<span class='big bold'>You are a medical working for Nanotrasen,</span><b> stationed onboard a state of the art research station. You vaguely recall rushing into a \
cryogenics pod due to an oncoming radiation storm. The last thing you remember is the station's Artificial Program telling you that you would only be asleep for eight hours. As you open \
your eyes, everything seems rusted and broken, a dark feeling swells in your gut as you climb out of your pod. \
Work as a team with your fellow survivors and do not abandon them.</b>"
uniform = /obj/item/clothing/under/retro/medical
shoes = /obj/item/clothing/shoes/black
id = /obj/item/card/id/away/old/med
l_pocket = /obj/item/stack/medical/ointment
r_pocket = /obj/item/stack/medical/ointment
assignedrole = "Ancient Crew"
/obj/effect/mob_spawn/human/oldmed/Destroy()
new /obj/structure/showcase/machinery/oldpod/used(drop_location())
return ..()
/obj/effect/mob_spawn/human/oldeng
name = "old cryogenics pod"
desc = "A humming cryo pod. You can barely recognise an engineering uniform underneath the built up ice. The machine is attempting to wake up its occupant."
mob_name = "an engineer"
icon = 'icons/obj/cryogenic2.dmi'
icon_state = "sleeper"
roundstart = FALSE
death = FALSE
random = TRUE
mob_species = /datum/species/human
flavour_text = "<span class='big bold'>You are an engineer working for Nanotrasen,</span><b> stationed onboard a state of the art research station. You vaguely recall rushing into a \
cryogenics pod due to an oncoming radiation storm. The last thing you remember is the station's Artificial Program telling you that you would only be asleep for eight hours. As you open \
your eyes, everything seems rusted and broken, a dark feeling swells in your gut as you climb out of your pod. \
Work as a team with your fellow survivors and do not abandon them.</b>"
uniform = /obj/item/clothing/under/retro/engineering
shoes = /obj/item/clothing/shoes/workboots
id = /obj/item/card/id/away/old/eng
gloves = /obj/item/clothing/gloves/color/fyellow/old
l_pocket = /obj/item/tank/emergency_oxygen
assignedrole = "Ancient Crew"
/obj/effect/mob_spawn/human/oldeng/Destroy()
new /obj/structure/showcase/machinery/oldpod/used(drop_location())
return ..()
/obj/effect/mob_spawn/human/oldsci
name = "old cryogenics pod"
desc = "A humming cryo pod. You can barely recognise a science uniform underneath the built up ice. The machine is attempting to wake up its occupant."
mob_name = "a scientist"
icon = 'icons/obj/cryogenic2.dmi'
icon_state = "sleeper"
roundstart = FALSE
death = FALSE
random = TRUE
mob_species = /datum/species/human
flavour_text = "<span class='big bold'>You are a scientist working for Nanotrasen,</span><b> stationed onboard a state of the art research station. You vaguely recall rushing into a \
cryogenics pod due to an oncoming radiation storm. The last thing you remember is the station's Artificial Program telling you that you would only be asleep for eight hours. As you open \
your eyes, everything seems rusted and broken, a dark feeling swells in your gut as you climb out of your pod. \
Work as a team with your fellow survivors and do not abandon them.</b>"
uniform = /obj/item/clothing/under/retro/science
shoes = /obj/item/clothing/shoes/laceup
id = /obj/item/card/id/away/old/sci
l_pocket = /obj/item/stack/medical/bruise_pack
assignedrole = "Ancient Crew"
/obj/effect/mob_spawn/human/oldsci/Destroy()
new /obj/structure/showcase/machinery/oldpod/used(drop_location())
return ..()
/obj/structure/showcase/machinery/oldpod
name = "damaged cryogenic pod"
desc = "A damaged cryogenic pod long since lost to time, including its former occupant..."
icon = 'icons/obj/cryogenic2.dmi'
icon_state = "sleeper-open"
/obj/structure/showcase/machinery/oldpod/used
name = "opened cryogenic pod"
desc = "A cryogenic pod that has recently discharged its occupant. The pod appears non-functional."
icon_state = "teleporter"
@@ -0,0 +1,17 @@
//stuff for the crashed wizard shuttle space ruin (wizardcrash.dmm)
/obj/item/paper/fluff/ruins/wizardcrash
name = "Mission Briefing"
info = "To the Magnificent Z.A.P.<BR>A small mining base has been created within our territory by wandless scum. Send them a message from the wizard federation they will not forget. I know your kind is rather fragile, but a group of lightly armed miners should not pose any threat to you at all. Just be warned they have a security cyborg for self defence, you might want to tune your spells to that threat. I look forward to hearing of your success.<BR>Grand Magus Abra the Wonderous"
/obj/effect/spawner/lootdrop/wizardcrash
loot = list(
/obj/item/guardiancreator = 1, //jackpot.
/obj/item/spellbook/oneuse/knock = 1, //tresspassing charges incoming
/obj/item/gun/magic/wand/resurrection = 1, //medbay's best friend
/obj/item/spellbook/oneuse/charge = 20, //and now for less useful stuff to dilute the good loot chances
/obj/item/spellbook/oneuse/summonitem = 20,
/obj/item/spellbook/oneuse/forcewall = 10,
/obj/item/soulstone = 15 //spooky wizard stuff
)
+21 -2
View File
@@ -373,7 +373,8 @@
if(prefs.lastchangelog != changelog_hash) //bolds the changelog button on the interface so we know there are updates. -CP
if(establish_db_connection())
to_chat(src, "<span class='info'>Changelog has changed since your last visit.</span>")
winset(src, "rpane.changelog", "background-color=#bb7700;text-color=#FFFFFF;font-style=bold")
update_changelog_button()
if(!void)
void = new()
@@ -671,6 +672,7 @@
// IF YOU CHANGE ANYTHING IN ACTIVATE, MAKE SURE IT HAS A DEACTIVATE METHOD, -AA07
/client/proc/activate_darkmode()
///// BUTTONS /////
update_changelog_button()
/* Rpane */
winset(src, "rpane.textb", "background-color=#40628a;text-color=#FFFFFF")
winset(src, "rpane.infob", "background-color=#40628a;text-color=#FFFFFF")
@@ -705,6 +707,7 @@
/client/proc/deactivate_darkmode()
///// BUTTONS /////
update_changelog_button()
/* Rpane */
winset(src, "rpane.textb", "background-color=none;text-color=#000000")
winset(src, "rpane.infob", "background-color=none;text-color=#000000")
@@ -735,4 +738,20 @@
winset(src, "infowindow", "background-color=none;text-color=#000000")
winset(src, "infowindow.info", "background-color=none;text-color=#000000;highlight-color=#007700;tab-text-color=#000000;tab-background-color=none")
///// NOTIFY USER /////
to_chat(src, "<span class='notice'>Darkmode Disabled</span>") // what a sick fuck
to_chat(src, "<span class='notice'>Darkmode Disabled</span>") // what a sick fuck
// Better changelog button handling
/client/proc/update_changelog_button()
if(establish_db_connection())
if(prefs.lastchangelog != changelog_hash)
winset(src, "rpane.changelog", "background-color=#bb7700;text-color=#FFFFFF;font-style=bold")
else
if(prefs.toggles & UI_DARKMODE)
winset(src, "rpane.changelog", "background-color=#40628a;text-color=#FFFFFF")
else
winset(src, "rpane.changelog", "background-color=none;text-color=#000000")
else
if(prefs.toggles & UI_DARKMODE)
winset(src, "rpane.changelog", "background-color=#40628a;text-color=#FFFFFF")
else
winset(src, "rpane.changelog", "background-color=none;text-color=#000000")
+11 -25
View File
@@ -842,19 +842,17 @@ var/global/list/special_role_times = list( //minimum age (in days) for accounts
if(CAN_WINGDINGS in S.species_traits)
HTML += ShowDisabilityState(user, DISABILITY_FLAG_WINGDINGS, "Speak in Wingdings")
HTML += ShowDisabilityState(user, DISABILITY_FLAG_NEARSIGHTED, "Needs glasses")
HTML += ShowDisabilityState(user, DISABILITY_FLAG_FAT, "Obese")
HTML += ShowDisabilityState(user, DISABILITY_FLAG_EPILEPTIC, "Seizures")
HTML += ShowDisabilityState(user, DISABILITY_FLAG_DEAF, "Deaf")
HTML += ShowDisabilityState(user, DISABILITY_FLAG_BLIND, "Blind")
HTML += ShowDisabilityState(user, DISABILITY_FLAG_NEARSIGHTED, "Nearsighted")
HTML += ShowDisabilityState(user, DISABILITY_FLAG_COLOURBLIND, "Colourblind")
HTML += ShowDisabilityState(user, DISABILITY_FLAG_BLIND, "Blind")
HTML += ShowDisabilityState(user, DISABILITY_FLAG_DEAF, "Deaf")
HTML += ShowDisabilityState(user, DISABILITY_FLAG_MUTE, "Mute")
HTML += ShowDisabilityState(user, DISABILITY_FLAG_TOURETTES, "Tourettes syndrome") // this will / can not be abused. It also SEVERELY stuns. It's just for fun.
HTML += ShowDisabilityState(user, DISABILITY_FLAG_FAT, "Obese")
HTML += ShowDisabilityState(user, DISABILITY_FLAG_NERVOUS, "Stutter")
HTML += ShowDisabilityState(user, DISABILITY_FLAG_SWEDISH, "Swedish accent")
HTML += ShowDisabilityState(user, DISABILITY_FLAG_CHAV, "Chav accent")
HTML += ShowDisabilityState(user, DISABILITY_FLAG_LISP, "Lisp")
HTML += ShowDisabilityState(user, DISABILITY_FLAG_DIZZY, "Dizziness")
HTML += ShowDisabilityState(user, DISABILITY_FLAG_SCRAMBLED, "Can't speak properly")
HTML += {"</ul>
@@ -2204,18 +2202,14 @@ var/global/list/special_role_times = list( //minimum age (in days) for accounts
character.dna.SetSEState(GLASSESBLOCK, TRUE, TRUE)
character.dna.default_blocks.Add(GLASSESBLOCK)
if(disabilities & DISABILITY_FLAG_EPILEPTIC)
character.dna.SetSEState(EPILEPSYBLOCK, TRUE, TRUE)
character.dna.default_blocks.Add(EPILEPSYBLOCK)
if(disabilities & DISABILITY_FLAG_BLIND)
character.dna.SetSEState(BLINDBLOCK, TRUE, TRUE)
character.dna.default_blocks.Add(BLINDBLOCK)
if(disabilities & DISABILITY_FLAG_DEAF)
character.dna.SetSEState(DEAFBLOCK, TRUE, TRUE)
character.dna.default_blocks.Add(DEAFBLOCK)
if(disabilities & DISABILITY_FLAG_BLIND)
character.dna.SetSEState(BLINDBLOCK, TRUE, TRUE)
character.dna.default_blocks.Add(BLINDBLOCK)
if(disabilities & DISABILITY_FLAG_COLOURBLIND)
character.dna.SetSEState(COLOURBLINDBLOCK, TRUE, TRUE)
character.dna.default_blocks.Add(COLOURBLINDBLOCK)
@@ -2224,10 +2218,6 @@ var/global/list/special_role_times = list( //minimum age (in days) for accounts
character.dna.SetSEState(MUTEBLOCK, TRUE, TRUE)
character.dna.default_blocks.Add(MUTEBLOCK)
if(disabilities & DISABILITY_FLAG_TOURETTES)
character.dna.SetSEState(TWITCHBLOCK, TRUE, TRUE)
character.dna.default_blocks.Add(TWITCHBLOCK)
if(disabilities & DISABILITY_FLAG_NERVOUS)
character.dna.SetSEState(NERVOUSBLOCK, TRUE, TRUE)
character.dna.default_blocks.Add(NERVOUSBLOCK)
@@ -2236,9 +2226,9 @@ var/global/list/special_role_times = list( //minimum age (in days) for accounts
character.dna.SetSEState(SWEDEBLOCK, TRUE, TRUE)
character.dna.default_blocks.Add(SWEDEBLOCK)
if(disabilities & DISABILITY_FLAG_SCRAMBLED)
character.dna.SetSEState(SCRAMBLEBLOCK, TRUE, TRUE)
character.dna.default_blocks.Add(SCRAMBLEBLOCK)
if(disabilities & DISABILITY_FLAG_CHAV)
character.dna.SetSEState(CHAVBLOCK, TRUE, TRUE)
character.dna.default_blocks.Add(CHAVBLOCK)
if(disabilities & DISABILITY_FLAG_LISP)
character.dna.SetSEState(LISPBLOCK, TRUE, TRUE)
@@ -2248,10 +2238,6 @@ var/global/list/special_role_times = list( //minimum age (in days) for accounts
character.dna.SetSEState(DIZZYBLOCK, TRUE, TRUE)
character.dna.default_blocks.Add(DIZZYBLOCK)
if(disabilities & DISABILITY_FLAG_SCRAMBLED)
character.dna.SetSEState(SCRAMBLEBLOCK, TRUE, TRUE)
character.dna.default_blocks.Add(SCRAMBLEBLOCK)
if(disabilities & DISABILITY_FLAG_WINGDINGS && (CAN_WINGDINGS in character.dna.species.species_traits))
character.dna.SetSEState(WINGDINGSBLOCK, TRUE, TRUE)
character.dna.default_blocks.Add(WINGDINGSBLOCK)
@@ -494,9 +494,3 @@
to_chat(C, "Couldn't update your last seen changelog, please try again later.")
return
return 1
/datum/preferences/proc/UpdateChangelogButton(client/C)
if(preferences_datums[C.ckey].toggles & UI_DARKMODE)
winset(C, "rpane.changelog", "background-color=#40628a;text-color=#ffffff;font-style=none")
else
winset(C, "rpane.changelog", "background-color=none;text-color=#000000;font-style=none")
+30
View File
@@ -847,6 +847,15 @@
species_fit = null
sprite_sheets = null
/obj/item/clothing/suit/storage/labcoat/fluff/pulsecoat //ozewse : Daniel Harper : Donated to them by Runemeds, who is the original donor.
name = "EMT pulse coat"
desc = "An EMT labcoat modified to track the wearer's heartbeat. It's so worn out that it doesn't seem to accurately track heartbeat anymore. Also, the zipper is stuck."
icon = 'icons/obj/custom_items.dmi'
icon_state = "pulsecoat"
item_state = "pulsecoat"
ignore_suitadjust = 1
actions_types = list()
/obj/item/clothing/suit/jacket/miljacket/patch // sniper_fairy : P.A.T.C.H.
name = "custom purple military jacket"
desc = "A canvas jacket styled after classical American military garb. Feels sturdy, yet comfortable. This one has a medical patch on it."
@@ -1115,6 +1124,20 @@
flags = NODROP|BLOCKHAIR
flags_inv = HIDEEARS
/obj/item/clothing/suit/fluff/pineapple //Pineapple Salad: Dan Jello
name = "red trench coat"
desc = "A red coat with cheaply made plastic accessories."
icon_state = "pineapple_trench"
/obj/item/clothing/suit/hooded/wintercoat/fluff/shesi //MrSynnester : Shesi Skaklas
name = "custom made winter coat"
desc = "A custom made winter coat with the arms removed. Looks comfy."
icon = 'icons/obj/custom_items.dmi'
icon_state = "shesicoat"
item_state = "shesicoat"
body_parts_covered = UPPER_TORSO|LOWER_TORSO
cold_protection = UPPER_TORSO|LOWER_TORSO
//////////// Uniforms ////////////
/obj/item/clothing/under/fluff/counterfeitguise_uniform // thatdanguy23 : Rissa Williams
icon = 'icons/obj/custom_items.dmi'
@@ -1313,6 +1336,13 @@
/obj/item/toy/plushie/fluff/fox/ui_action_click()
change_color()
/obj/item/clothing/suit/jacket/miljacket/desert/fox
name = "rugged military jacket"
desc = "A rugged brown military jacket with a stylized 'A' embroidered on the back. It seems very old, yet is in near mint condition. Has a tag on the inside collar signed 'Fox McCloud'."
icon = 'icons/obj/custom_items.dmi'
icon_state = "fox_coat"
item_color = "fox_coat"
// TheFlagbearer: Willow Walker
/obj/item/clothing/under/fluff/arachno_suit
name = "Arachno-Man costume"
+52
View File
@@ -0,0 +1,52 @@
// DONT TOUCH ANYTHING IN HERE UNLESS YOU KNOW WHAT YOU ARE DOING -affected
/client/verb/linkdiscord()
set category = "OOC"
set name = "Link Discord Account"
set desc = "Link your discord account to your BYOND account."
var/user_ckey = sanitizeSQL(usr.ckey) // Probably not neccassary but better safe than sorry
if(!config.sql_enabled)
to_chat(src, "<span class='warning'>This is feature requires the SQL backend</span>")
return
var/DBQuery/db_discord_id = dbcon.NewQuery("SELECT discord_id FROM [format_table_name("discord")] WHERE ckey = '[user_ckey]'")
if(!db_discord_id.Execute())
var/err = db_discord_id.ErrorMsg()
log_game("SQL ERROR while selecting discord account. Error : \[[err]\]\n")
to_chat(src, "<span class='warning'>Error checking Discord account. Please inform an administrator</span>")
return
var/stored_id
while(db_discord_id.NextRow())
stored_id = db_discord_id.item[1]
if(!stored_id) // Not linked
var/know_how = alert("Do you know how to get a discord user ID?","Question","Yes","No")
if(know_how == "No") // Opens discord support on how to collect IDs
src << link("https://support.discordapp.com/hc/en-us/articles/206346498-Where-can-I-find-my-User-Server-Message-ID")
var/entered_id = input("Please enter your Discord ID.", "Enter Discord ID", null, null) as text|null
var/sql_id = sanitizeSQL(entered_id)
var/DBQuery/store_discord_id = dbcon.NewQuery("INSERT INTO [format_table_name("discord")] (ckey, discord_id, notify) VALUES ('[user_ckey]', [sql_id], 0)")
if(!store_discord_id.Execute())
var/err = db_discord_id.ErrorMsg()
log_game("SQL ERROR while linking discord account. Error : \[[err]\]\n")
to_chat(src, "<span class='warning'>Error linking Discord account. Please inform an administrator</span>")
return
to_chat(src, "<span class='notice'>Successfully linked discord account [entered_id] to [user_ckey]</span>")
else // Linked
var/choice = alert("You already have the Discord Account [stored_id] linked to [user_ckey]. Would you like to unlink or replace","Already Linked","Unlink","Replace")
switch(choice)
if("Unlink")
var/DBQuery/unlink_discord_id = dbcon.NewQuery("DELETE FROM [format_table_name("discord")] WHERE ckey = '[user_ckey]'")
if(!unlink_discord_id.Execute())
var/err = unlink_discord_id.ErrorMsg()
log_game("SQL ERROR while unlinking discord account. Error : \[[err]\]\n")
to_chat(src, "<span class='warning'>Error unlinking Discord account. Please inform an administrator</span>")
return
to_chat(src, "<span class='notice'>Successfully unlinked discord account</span>")
if("Replace")
var/entered_id = input("Please enter your Discord ID. Instructions can be found at https://bit.ly/2AfUu40", "Enter Discord ID", null, null) as text|null
var/sql_id = sanitizeSQL(entered_id)
var/DBQuery/store_discord_id = dbcon.NewQuery("UPDATE [format_table_name("discord")] SET discord_id = '[sql_id]' WHERE ckey='[user_ckey]'")
if(!store_discord_id.Execute())
var/err = db_discord_id.ErrorMsg()
to_chat(src, "<span class='warning'>Error replacing Discord account. Please inform an administrator</span>")
log_game("SQL ERROR while linking discord account. Error : \[[err]\]\n")
return
to_chat(src, "<span class='notice'>Successfully linked discord account [entered_id] to [user_ckey]</span>")
+48
View File
@@ -0,0 +1,48 @@
// DONT TOUCH ANYTHING IN HERE UNLESS YOU KNOW WHAT YOU ARE DOING -affected
/client/verb/notify_restart()
set category = "OOC"
set name = "Notify Restart"
set desc = "Notifies you on Discord when the server restarts."
if(!config.sql_enabled)
to_chat(src, "<span class='warning'>This is feature requires the SQL backend</span>")
return
var/DBQuery/db_discord_id = dbcon.NewQuery("SELECT discord_id FROM [format_table_name("discord")] WHERE ckey = '[ckey]'")
if(!db_discord_id.Execute())
var/err = db_discord_id.ErrorMsg()
log_game("SQL ERROR while selecting discord account. Error : \[[err]\]\n")
to_chat(src, "<span class='warning'>Error checking Discord account. Please inform an administrator</span>")
return
var/stored_id
while(db_discord_id.NextRow())
stored_id = db_discord_id.item[1]
if(!stored_id) // Not linked
to_chat(src, "<span class='warning'>This requires you to link your Discord account with the \"Link Discord Account\" verb.</span>")
return
else // Linked
var/DBQuery/toggle_status = dbcon.NewQuery("SELECT notify FROM [format_table_name("discord")] WHERE ckey = '[ckey]'")
if(!toggle_status.Execute())
var/err = toggle_status.ErrorMsg()
log_game("SQL ERROR while getting discord account. Error : \[[err]\]\n")
var/notify_status
while(toggle_status.NextRow())
notify_status = toggle_status.item[1]
if(notify_status) // Data is there
switch(notify_status)
if("0")
var/DBQuery/update_notify = dbcon.NewQuery("UPDATE [format_table_name("discord")] SET notify = 1 WHERE ckey='[ckey]'")
if(!update_notify.Execute())
var/err = db_discord_id.ErrorMsg()
to_chat(src, "<span class='warning'>Error updating notify status. Please inform an administrator</span>")
log_game("SQL ERROR while updating notify status. Error : \[[err]\]\n")
return
to_chat(src, "<span class='notice'>You will now be notified on discord when the next round is starting</span>")
if("1")
var/DBQuery/update_notify = dbcon.NewQuery("UPDATE [format_table_name("discord")] SET notify = 0 WHERE ckey='[ckey]'")
if(!update_notify.Execute())
var/err = db_discord_id.ErrorMsg()
to_chat(src, "<span class='warning'>Error updating notify status. Please inform an administrator</span>")
log_game("SQL ERROR while updating notify status. Error : \[[err]\]\n")
return
to_chat(src, "<span class='notice'>You will no longer be notified on discord when the next round is starting</span>")
else // Oh fuck what the hell happened
to_chat(src, "<span class='danger'>Something has gone VERY wrong, or affected cant code.</span>")
+23 -6
View File
@@ -1,14 +1,18 @@
/proc/send2irc(var/channel, var/msg)
/proc/send2irc(var/channel, var/msg, var/lesser_sanitize = FALSE)
if(config.use_irc_bot && config.irc_bot_host.len)
for(var/IP in config.irc_bot_host)
spawn(0)
// I have no means of trusting you, cmd
ext_python("ircbot_message.py", "[config.comms_password] [IP] [channel] [paranoid_sanitize(msg)]")
if(lesser_sanitize == 7355608) // Super random number because this could be bad if done accidentally
// Runs sanitization but allows <> and // (Needed for discord)
ext_python("ircbot_message.py", "[config.comms_password] [IP] [channel] [not_as_paranoid_sanitize(msg)]")
else
// I have no means of trusting you, cmd
ext_python("ircbot_message.py", "[config.comms_password] [IP] [channel] [paranoid_sanitize(msg)]")
return
/proc/send2mainirc(var/msg)
/proc/send2mainirc(var/msg, var/lesser_sanitize = FALSE)
if(config.main_irc)
send2irc(config.main_irc, msg)
send2irc(config.main_irc, msg, lesser_sanitize)
return
/proc/send2adminirc(var/msg)
@@ -17,5 +21,18 @@
return
/hook/startup/proc/ircNotify()
send2mainirc("Server starting up on [station_name()]. Connect to: [config.server? "[config.server]" : "[world.address]:[world.port]"]")
var/people_to_ping = ""
var/DBQuery/pull_notify = dbcon.NewQuery("SELECT discord_id FROM [format_table_name("discord")] WHERE notify = 1")
if(!pull_notify.Execute())
var/err = pull_notify.ErrorMsg()
log_game("SQL ERROR while pulling notify people. Error : \[[err]\]\n")
else
while(pull_notify.NextRow())
people_to_ping += "<@" + pull_notify.item[1] + "> "
send2mainirc("Server starting up on [station_name()]. Connect to: <byond://[config.server? "[config.server]" : "[world.address]:[world.port]"]> "+people_to_ping, 7355608)
// Set notify to 0 so people arent pinged round after round
var/DBQuery/reset_notify = dbcon.NewQuery("UPDATE [format_table_name("discord")] SET notify = 0 WHERE notify = 1")
if(!reset_notify.Execute())
var/err = reset_notify.ErrorMsg()
log_game("SQL ERROR while resetting notify status. Error : \[[err]\]\n")
return 1
+11 -11
View File
@@ -197,13 +197,13 @@
list_reagents = list("coffee" = 30)
/obj/item/reagent_containers/food/drinks/ice
name = "Ice Cup"
name = "ice cup"
desc = "Careful, cold ice, do not chew."
icon_state = "icecup"
list_reagents = list("ice" = 30)
/obj/item/reagent_containers/food/drinks/tea
name = "Duke Purple Tea"
name = "Duke Purple tea"
desc = "An insult to Duke Purple is an insult to the Space Queen! Any proper gentleman will fight you, if you sully this tea."
icon_state = "teacup"
item_state = "coffee"
@@ -215,34 +215,34 @@
reagents.add_reagent("mugwort", 3)
/obj/item/reagent_containers/food/drinks/mugwort
name = "Mugwort Tea"
name = "mugwort tea"
desc = "A bitter herbal tea."
icon_state = "manlydorfglass"
item_state = "coffee"
list_reagents = list("mugwort" = 30)
/obj/item/reagent_containers/food/drinks/h_chocolate
name = "Dutch Hot Coco"
name = "Dutch hot coco"
desc = "Made in Space South America."
icon_state = "hot_coco"
item_state = "coffee"
list_reagents = list("hot_coco" = 30, "sugar" = 5)
/obj/item/reagent_containers/food/drinks/chocolate
name = "Hot Chocolate"
name = "hot chocolate"
desc = "Made in Space Switzerland."
icon_state = "hot_coco"
item_state = "coffee"
list_reagents = list("chocolate" = 30)
/obj/item/reagent_containers/food/drinks/weightloss
name = "Weight-Loss Shake"
name = "weight-loss shake"
desc = "A shake designed to cause weight loss. The package proudly proclaims that it is 'tapeworm free.'"
icon_state = "weightshake"
list_reagents = list("lipolicide" = 30, "chocolate" = 5)
/obj/item/reagent_containers/food/drinks/dry_ramen
name = "Cup Ramen"
name = "cup ramen"
desc = "Just add 10ml of water, self heats! A taste that reminds you of your school years."
icon_state = "ramen"
item_state = "ramen"
@@ -254,7 +254,7 @@
reagents.add_reagent("enzyme", 3)
/obj/item/reagent_containers/food/drinks/chicken_soup
name = "Canned Chicken Soup"
name = "canned chicken soup"
desc = "A delicious and soothing can of chicken noodle soup; just like spessmom used to microwave it."
icon_state = "soupcan"
item_state = "soupcan"
@@ -331,7 +331,7 @@
volume = 50
/obj/item/reagent_containers/food/drinks/flask/lithium
name = "Lithium Flask"
name = "lithium flask"
desc = "A flask with a Lithium Atom symbol on it."
icon = 'icons/obj/custom_items.dmi'
icon_state = "lithiumflask"
@@ -353,13 +353,13 @@
/obj/item/reagent_containers/food/drinks/bag
name = "Drink bag"
name = "drink bag"
desc = "Normally put in wine boxes, or down pants at stadium events."
icon_state = "goonbag"
volume = 70
/obj/item/reagent_containers/food/drinks/bag/goonbag
name = "Goon from a Blue Toolbox special edition"
name = "goon from a Blue Toolbox special edition"
desc = "Wine from the land down under, where the dingos roam and the roos do wander."
icon_state = "goonbag"
list_reagents = list("wine" = 70)
@@ -192,7 +192,7 @@
list_reagents = list("rum" = 100)
/obj/item/reagent_containers/food/drinks/bottle/holywater
name = "Flask of Holy Water"
name = "flask of holy water"
desc = "A flask of the chaplain's holy water."
icon_state = "holyflask"
list_reagents = list("holywater" = 100)
@@ -232,8 +232,8 @@
list_reagents = list("wine" = 100)
/obj/item/reagent_containers/food/drinks/bottle/absinthe
name = "Extra-Strong Absinthe"
desc = "A strong alcoholic drink brewed and distributed by REDACTED."
name = "Yellow Marquee Absinthe"
desc = "A strong alcoholic drink brewed and distributed by Yellow Marquee."
icon_state = "absinthebottle"
list_reagents = list("absinthe" = 100)
@@ -252,7 +252,7 @@
//////////////////////////JUICES AND STUFF ///////////////////////
/obj/item/reagent_containers/food/drinks/bottle/orangejuice
name = "Orange Juice"
name = "orange juice"
desc = "Full of vitamins and deliciousness!"
icon_state = "orangejuice"
item_state = "carton"
@@ -260,7 +260,7 @@
list_reagents = list("orangejuice" = 100)
/obj/item/reagent_containers/food/drinks/bottle/cream
name = "Milk Cream"
name = "milk cream"
desc = "It's cream. Made from milk. What else did you think you'd find in there?"
icon_state = "cream"
item_state = "carton"
@@ -268,7 +268,7 @@
list_reagents = list("cream" = 100)
/obj/item/reagent_containers/food/drinks/bottle/tomatojuice
name = "Tomato Juice"
name = "tomato juice"
desc = "Well, at least it LOOKS like tomato juice. You can't tell with all that redness."
icon_state = "tomatojuice"
item_state = "carton"
@@ -276,7 +276,7 @@
list_reagents = list("tomatojuice" = 100)
/obj/item/reagent_containers/food/drinks/bottle/limejuice
name = "Lime Juice"
name = "lime juice"
desc = "Sweet-sour goodness."
icon_state = "limejuice"
item_state = "carton"
@@ -284,7 +284,7 @@
list_reagents = list("limejuice" = 100)
/obj/item/reagent_containers/food/drinks/bottle/milk
name = "Milk"
name = "milk"
desc = "Soothing milk."
icon_state = "milk"
item_state = "carton"
@@ -59,34 +59,34 @@
return ..(target, user, proximity)
/obj/item/reagent_containers/food/drinks/cans/cola
name = "Space Cola"
name = "space cola"
desc = "Cola. in space."
icon_state = "cola"
list_reagents = list("cola" = 30)
/obj/item/reagent_containers/food/drinks/cans/beer
name = "Space Beer"
name = "space beer"
desc = "Contains only water, malt and hops."
icon_state = "beer"
is_glass = 1
list_reagents = list("beer" = 30)
/obj/item/reagent_containers/food/drinks/cans/adminbooze
name = "Admin Booze"
name = "admin booze"
desc = "Bottled Griffon tears. Drink with caution."
icon_state = "adminbooze"
is_glass = 1
list_reagents = list("adminordrazine" = 5, "capsaicin" = 5, "methamphetamine"= 20, "thirteenloko" = 20)
/obj/item/reagent_containers/food/drinks/cans/madminmalt
name = "Madmin Malt"
name = "madmin malt"
desc = "Bottled essence of angry admins. Drink with <i>EXTREME</i> caution."
icon_state = "madminmalt"
is_glass = 1
list_reagents = list("hell_water" = 20, "neurotoxin" = 15, "thirteenloko" = 15)
/obj/item/reagent_containers/food/drinks/cans/badminbrew
name = "Badmin Brew"
name = "badmin brew"
desc = "Bottled trickery and terrible admin work. Probably shouldn't drink this one at all."
icon_state = "badminbrew"
is_glass = 1
@@ -156,7 +156,7 @@
list_reagents = list("tonic" = 50)
/obj/item/reagent_containers/food/drinks/cans/sodawater
name = "Soda Water"
name = "soda water"
desc = "A can of soda water. Still water's more refreshing cousin."
icon_state = "sodawater"
list_reagents = list("sodawater" = 50)
@@ -18,14 +18,14 @@
// ***********************************************************
/obj/item/reagent_containers/food/snacks/chocolatebar
name = "Chocolate Bar"
name = "chocolate bar"
desc = "Such sweet, fattening food."
icon_state = "chocolatebar"
filling_color = "#7D5F46"
list_reagents = list("nutriment" = 2, "chocolate" = 4)
/obj/item/reagent_containers/food/snacks/candy/caramel
name = "Caramel"
name = "caramel"
desc = "Chewy and dense, yet it practically melts in your mouth!"
icon_state = "caramel"
filling_color = "#DB944D"
@@ -33,21 +33,21 @@
/obj/item/reagent_containers/food/snacks/candy/toffee
name = "Toffee"
name = "toffee"
desc = "A hard, brittle candy with a distinctive taste."
icon_state = "toffee"
filling_color = "#7D5F46"
list_reagents = list("nutriment" = 3, "sugar" = 3)
/obj/item/reagent_containers/food/snacks/candy/nougat
name = "Nougat"
name = "nougat"
desc = "A soft, chewy candy commonly found in candybars."
icon_state = "nougat"
filling_color = "#7D5F46"
list_reagents = list("nutriment" = 3, "sugar" = 3)
/obj/item/reagent_containers/food/snacks/candy/taffy
name = "Saltwater Taffy"
name = "saltwater taffy"
desc = "Old fashioned saltwater taffy. Chewy!"
icon_state = "candy1"
filling_color = "#7D5F46"
@@ -58,7 +58,7 @@
icon_state = pick("candy1", "candy2", "candy3", "candy4", "candy5")
/obj/item/reagent_containers/food/snacks/candy/fudge
name = "Fudge"
name = "fudge"
desc = "Chocolate fudge, a timeless classic treat."
icon_state = "fudge"
filling_color = "#7D5F46"
@@ -66,26 +66,26 @@
list_reagents = list("cream" = 3, "chocolate" = 6)
/obj/item/reagent_containers/food/snacks/candy/fudge/peanut
name = "Peanut Fudge"
name = "peanut fudge"
desc = "Chocolate fudge, with bits of peanuts mixed in. People with nut allergies shouldn't eat this."
icon_state = "fudge_peanut"
filling_color = "#7D5F46"
/obj/item/reagent_containers/food/snacks/candy/fudge/cherry
name = "Chocolate Cherry Fudge"
name = "chocolate cherry fudge"
desc = "Chocolate fudge surrounding sweet cherries. Good for tricking kids into eating some fruit."
icon_state = "fudge_cherry"
filling_color = "#7D5F46"
/obj/item/reagent_containers/food/snacks/candy/fudge/cookies_n_cream
name = "Cookies 'n' Cream Fudge"
name = "cookies 'n' cream fudge"
desc = "An extra creamy fudge with bits of real chocolate cookie mixed in. Crunchy!"
icon_state = "fudge_cookies_n_cream"
filling_color = "#7D5F46"
list_reagents = list("cream" = 6, "chocolate" = 6)
/obj/item/reagent_containers/food/snacks/candy/fudge/turtle
name = "Turtle Fudge"
name = "turtle fudge"
desc = "Chocolate fudge with caramel and nuts. It doesn't contain real turtles, thankfully."
icon_state = "fudge_turtle"
filling_color = "#7D5F46"
@@ -95,7 +95,7 @@
// ***********************************************************
/obj/item/reagent_containers/food/snacks/candy/donor
name = "Donor Candy"
name = "donor candy"
desc = "A little treat for blood donors."
trash = /obj/item/trash/candy
bitesize = 5
@@ -516,7 +516,7 @@
filling_color = "#7D5F46"
/obj/item/reagent_containers/food/snacks/candy/confectionery/toffee
name = "Yum-baton Bar"
name = "Yum-Baton Bar"
desc = "Chocolate and toffee in the shape of a baton. Security sure knows how to pound these down!"
icon_state = "yumbaton"
filling_color = "#7D5F46"
@@ -11,7 +11,7 @@
list_reagents = list("nutriment" = 7, "vitamin" = 1)
/obj/item/reagent_containers/food/snacks/burrito
name = "Burrito"
name = "burrito"
desc = "Meat, beans, cheese, and rice wrapped up as an easy-to-hold meal."
icon_state = "burrito"
trash = /obj/item/trash/plate
@@ -19,7 +19,7 @@
list_reagents = list("nutriment" = 4, "vitamin" = 1)
/obj/item/reagent_containers/food/snacks/chimichanga
name = "Chimichanga"
name = "chimichanga"
desc = "Time to eat a chimi-f***ing-changa."
icon_state = "chimichanga"
trash = /obj/item/trash/plate
@@ -27,8 +27,8 @@
list_reagents = list("omnizine" = 4, "cheese" = 2) //Deadpool reference. Deal with it.
/obj/item/reagent_containers/food/snacks/enchiladas
name = "Enchiladas"
desc = "Viva La Mexico!"
name = "enchiladas"
desc = "Viva la Mexico!"
icon_state = "enchiladas"
trash = /obj/item/trash/tray
filling_color = "#A36A1F"
@@ -57,7 +57,7 @@
list_reagents = list("nutriment" = 1, "beans" = 3, "msg" = 4, "sugar" = 2)
/obj/item/reagent_containers/food/snacks/chinese/sweetsourchickenball
name = "Sweet & Sour Chicken Balls"
name = "sweet & sour chicken balls"
desc = "Is this chicken cooked? The odds are better than wok paper scissors."
icon_state = "chickenball"
junkiness = 25
@@ -113,13 +113,13 @@
/obj/item/reagent_containers/food/snacks/human/kabob
name = "-kabob"
icon_state = "kabob"
desc = "A human meat, on a stick."
desc = "Human meat, on a stick."
trash = /obj/item/stack/rods
filling_color = "#A85340"
list_reagents = list("nutriment" = 8)
/obj/item/reagent_containers/food/snacks/monkeykabob
name = "Meat-kabob"
name = "meat-kabob"
icon_state = "kabob"
desc = "Delicious meat, on a stick."
trash = /obj/item/stack/rods
@@ -127,7 +127,7 @@
list_reagents = list("nutriment" = 8)
/obj/item/reagent_containers/food/snacks/tofukabob
name = "Tofu-kabob"
name = "tofu-kabob"
icon_state = "kabob"
desc = "Vegan meat, on a stick."
trash = /obj/item/stack/rods
@@ -4,7 +4,7 @@
//////////////////////
/obj/item/reagent_containers/food/snacks/tofu
name = "Tofu"
name = "tofu"
icon_state = "tofu"
desc = "We all love tofu."
filling_color = "#FFFEE0"
@@ -12,7 +12,7 @@
list_reagents = list("plantmatter" = 2)
/obj/item/reagent_containers/food/snacks/fried_tofu
name = "Fried Tofu"
name = "fried tofu"
icon_state = "tofu"
desc = "Proof that even vegetarians crave unhealthy foods."
filling_color = "#FFFEE0"
@@ -20,8 +20,8 @@
list_reagents = list("plantmatter" = 3)
/obj/item/reagent_containers/food/snacks/soydope
name = "Soy Dope"
desc = "Dope from a soy."
name = "soy dope"
desc = "Like regular dope, but for the health concious consumer."
icon_state = "soydope"
trash = /obj/item/trash/plate
filling_color = "#C4BF76"
@@ -33,7 +33,7 @@
//////////////////////
/obj/item/reagent_containers/food/snacks/sliceable/cheesewheel
name = "Cheese wheel"
name = "cheese wheel"
desc = "A big wheel of delicious Cheddar."
icon_state = "cheesewheel"
slice_path = /obj/item/reagent_containers/food/snacks/cheesewedge
@@ -42,14 +42,14 @@
list_reagents = list("nutriment" = 15, "vitamin" = 5, "cheese" = 20)
/obj/item/reagent_containers/food/snacks/cheesewedge
name = "Cheese wedge"
name = "cheese wedge"
desc = "A wedge of delicious Cheddar. The cheese wheel it was cut from can't have gone far."
icon_state = "cheesewedge"
filling_color = "#FFF700"
/obj/item/reagent_containers/food/snacks/weirdcheesewedge
name = "Weird Cheese"
desc = "Some kind of... gooey, messy, gloopy thing. Similar to cheese, but only in the looser sense of the word."
name = "weird cheese"
desc = "Some kind of... gooey, messy, gloopy thing. Similar to cheese, but only in the broad sense of the word."
icon_state = "weirdcheesewedge"
filling_color = "#00FF33"
list_reagents = list("mercury" = 5, "lsd" = 5, "ethanol" = 5, "weird_cheese" = 5)
@@ -76,13 +76,13 @@
list_reagents = list("protein" = 2)
/obj/item/reagent_containers/food/snacks/watermelonslice
name = "Watermelon Slice"
name = "watermelon slice"
desc = "A slice of watery goodness."
icon_state = "watermelonslice"
filling_color = "#FF3867"
/obj/item/reagent_containers/food/snacks/pineappleslice
name = "Pineapple Slices"
name = "pineapple slices"
desc = "Rings of pineapple."
icon_state = "pineappleslice"
filling_color = "#e5b437"
@@ -134,14 +134,14 @@
//////////////////////
/obj/item/reagent_containers/food/snacks/chocolatebar
name = "Chocolate Bar"
name = "chocolate bar"
desc = "Such sweet, fattening food."
icon_state = "chocolatebar"
filling_color = "#7D5F46"
list_reagents = list("nutriment" = 2, "sugar" = 2, "cocoa" = 2)
/obj/item/reagent_containers/food/snacks/choc_pile //for reagent chocolate being spilled on turfs
name = "Pile of Chocolate"
name = "pile of chocolate"
desc = "A pile of pure chocolate pieces."
icon_state = "cocoa"
filling_color = "#7D5F46"
@@ -23,9 +23,9 @@
list_reagents = list("protein" = 1, "sugar" = 3)
/obj/item/reagent_containers/food/snacks/pistachios
name = "Pistachios"
name = "pistachios"
icon_state = "pistachios"
desc = "A snack of deliciously salted pistachios. A perfectly valid choice..."
desc = "Deliciously salted pistachios. A perfectly valid choice..."
trash = /obj/item/trash/pistachios
filling_color = "#BAD145"
junkiness = 20
@@ -68,7 +68,7 @@
/obj/item/reagent_containers/food/snacks/tastybread
name = "bread tube"
desc = "Bread in a tube. Chewy...and surprisingly tasty."
desc = "Bread in a tube. Chewy and surprisingly tasty."
icon_state = "tastybread"
trash = /obj/item/trash/tastybread
filling_color = "#A66829"
+30 -30
View File
@@ -33,22 +33,22 @@
/obj/item/reagent_containers/food/snacks/meat/slab/meatproduct
name = "meat product"
desc = "A slab of station reclaimed and chemically processed meat product."
desc = "A slab of reclaimed and chemically processed meat product."
/obj/item/reagent_containers/food/snacks/meat/monkey
//same as plain meat
/obj/item/reagent_containers/food/snacks/meat/corgi
name = "Corgi meat"
desc = "Tastes like... well you know..."
name = "corgi meat"
desc = "Tastes like the Head of Personnel's hopes and dreams"
/obj/item/reagent_containers/food/snacks/meat/pug
name = "Pug meat"
desc = "Tastes like... well you know..."
name = "pug meat"
desc = "Slightly less adorable in sliced form."
/obj/item/reagent_containers/food/snacks/meat/ham
name = "Ham"
desc = "Taste like bacon."
name = "ham"
desc = "For when you need to go ham."
list_reagents = list("protein" = 3, "porktonium" = 10)
/obj/item/reagent_containers/food/snacks/meat/meatwheat
@@ -61,7 +61,7 @@
/obj/item/reagent_containers/food/snacks/rawcutlet
name = "raw cutlet"
desc = "A thin piece of raw meat."
desc = "A thin strip of raw meat."
icon = 'icons/obj/food/food_ingredients.dmi'
icon_state = "rawcutlet"
bitesize = 1
@@ -86,7 +86,7 @@
/obj/item/reagent_containers/food/snacks/xenomeat
name = "meat"
desc = "A slab of meat."
desc = "A slab of meat. It's green!"
icon_state = "xenomeat"
filling_color = "#43DE18"
bitesize = 6
@@ -94,14 +94,14 @@
/obj/item/reagent_containers/food/snacks/spidermeat
name = "spider meat"
desc = "A slab of spider meat."
desc = "A slab of spider meat. Not very appetizing."
icon_state = "spidermeat"
bitesize = 3
list_reagents = list("protein" = 3, "toxin" = 3, "vitamin" = 1)
/obj/item/reagent_containers/food/snacks/lizardmeat
name = "mutant lizard meat"
desc = "Seems to be a slab of meat from some mutant lizard thing?"
desc = "A peculiar slab of meat. It looks scaly and radioactive."
icon_state = "xenomeat"
filling_color = "#43DE18"
bitesize = 3
@@ -109,19 +109,19 @@
/obj/item/reagent_containers/food/snacks/spiderleg
name = "spider leg"
desc = "A still twitching leg of a giant spider... you don't really want to eat this, do you?"
desc = "A still twitching leg of a giant spider. You don't really want to eat this, do you?"
icon_state = "spiderleg"
list_reagents = list("protein" = 2, "toxin" = 2)
/obj/item/reagent_containers/food/snacks/raw_bacon
name = "raw bacon"
desc = "It's fleshy and pink!"
desc = "God's gift to man in uncooked form."
icon_state = "raw_bacon"
list_reagents = list("nutriment" = 1, "porktonium" = 10)
/obj/item/reagent_containers/food/snacks/spidereggs
name = "spider eggs"
desc = "A cluster of juicy spider eggs. A great side dish for when you care not for your health."
desc = "A cluster of juicy spider eggs. A great side dish for when you don't care about your health."
icon_state = "spidereggs"
list_reagents = list("protein" = 2, "toxin" = 2)
@@ -130,7 +130,7 @@
//////////////////////
/obj/item/reagent_containers/food/snacks/meatsteak
name = "Meat steak"
name = "meat steak"
desc = "A piece of hot spicy meat."
icon_state = "meatstake"
trash = /obj/item/trash/plate
@@ -140,13 +140,13 @@
/obj/item/reagent_containers/food/snacks/bacon
name = "bacon"
desc = "It looks juicy and tastes amazing!"
desc = "It looks crispy and tastes amazing! Mmm... Bacon."
icon_state = "bacon2"
list_reagents = list("nutriment" = 4, "porktonium" = 10, "msg" = 4)
/obj/item/reagent_containers/food/snacks/telebacon
name = "Tele Bacon"
desc = "It tastes a little odd but it is still delicious."
name = "tele bacon"
desc = "It tastes a little odd but it's still delicious."
icon_state = "bacon"
var/obj/item/radio/beacon/bacon/baconbeacon
list_reagents = list("nutriment" = 4, "porktonium" = 10)
@@ -161,15 +161,15 @@
baconbeacon.digest_delay()
/obj/item/reagent_containers/food/snacks/meatball
name = "Meatball"
name = "meatball"
desc = "A great meal all round."
icon_state = "meatball"
filling_color = "#DB0000"
list_reagents = list("protein" = 4, "vitamin" = 1)
/obj/item/reagent_containers/food/snacks/sausage
name = "Sausage"
desc = "A piece of mixed, long meat."
name = "sausage"
desc = "A piece of mixed and cased meat."
icon_state = "sausage"
filling_color = "#DB0000"
list_reagents = list("protein" = 6, "vitamin" = 1, "porktonium" = 10)
@@ -198,8 +198,8 @@
list_reagents = list("nutriment" = 3, "capsaicin" = 2)
/obj/item/reagent_containers/food/snacks/wingfangchu
name = "Wing Fang Chu"
desc = "A savory dish of alien wing wang in soy."
name = "wing fang chu"
desc = "A savory dish of alien wing wang in soy. Wait, what?"
icon_state = "wingfangchu"
trash = /obj/item/trash/snack_bowl
filling_color = "#43DE18"
@@ -335,7 +335,7 @@
color = reagent_color
/obj/item/reagent_containers/food/snacks/friedegg
name = "Fried egg"
name = "fried egg"
desc = "A fried egg, with a touch of salt and pepper."
icon_state = "friedegg"
filling_color = "#FFDF78"
@@ -343,21 +343,21 @@
list_reagents = list("nutriment" = 3, "egg" = 5)
/obj/item/reagent_containers/food/snacks/boiledegg
name = "Boiled egg"
name = "boiled egg"
desc = "A hard boiled egg."
icon_state = "egg"
filling_color = "#FFFFFF"
list_reagents = list("nutriment" = 2, "egg" = 5, "vitamin" = 1)
/obj/item/reagent_containers/food/snacks/chocolateegg
name = "Chocolate Egg"
name = "chocolate egg"
desc = "Such sweet, fattening food."
icon_state = "chocolateegg"
filling_color = "#7D5F46"
list_reagents = list("nutriment" = 4, "sugar" = 2, "cocoa" = 2)
/obj/item/reagent_containers/food/snacks/omelette
name = "Omelette Du Fromage"
name = "omelette du fromage"
desc = "That's all you can say!"
icon_state = "omelette"
trash = /obj/item/trash/plate
@@ -379,7 +379,7 @@
/obj/item/reagent_containers/food/snacks/hotdog
name = "hotdog"
desc = "Fresh footlong ready to go down on."
desc = "Not made with actual dogs. Hopefully."
icon_state = "hotdog"
bitesize = 3
list_reagents = list("nutriment" = 6, "ketchup" = 3, "vitamin" = 3)
@@ -392,7 +392,7 @@
list_reagents = list("nutriment" = 6, "vitamin" = 2)
/obj/item/reagent_containers/food/snacks/sliceable/turkey
name = "Turkey"
name = "turkey"
desc = "A traditional turkey served with stuffing."
icon_state = "turkey"
slice_path = /obj/item/reagent_containers/food/snacks/turkeyslice
@@ -408,7 +408,7 @@
/obj/item/reagent_containers/food/snacks/organ
name = "organ"
desc = "It's good for you."
desc = "Technically qualifies as organic."
icon = 'icons/obj/surgery.dmi'
icon_state = "appendix"
filling_color = "#E00D34"
+10 -10
View File
@@ -4,7 +4,7 @@
//////////////////////
/obj/item/reagent_containers/food/snacks/eggplantparm
name = "Eggplant Parmigiana"
name = "eggplant parmigiana"
desc = "The only good recipe for eggplant."
icon_state = "eggplantparm"
trash = /obj/item/trash/plate
@@ -12,7 +12,7 @@
list_reagents = list("nutriment" = 6, "vitamin" = 2)
/obj/item/reagent_containers/food/snacks/soylentgreen
name = "Soylent Green"
name = "soylent green"
desc = "Not made of people. Honest." //Totally people.
icon_state = "soylent_green"
trash = /obj/item/trash/waffles
@@ -20,7 +20,7 @@
list_reagents = list("nutriment" = 10, "vitamin" = 1)
/obj/item/reagent_containers/food/snacks/soylentviridians
name = "Soylent Virdians"
name = "soylent virdians"
desc = "Not made of people. Honest." //Actually honest for once.
icon_state = "soylent_yellow"
trash = /obj/item/trash/waffles
@@ -28,7 +28,7 @@
list_reagents = list("nutriment" = 10, "vitamin" = 1)
/obj/item/reagent_containers/food/snacks/monkeysdelight
name = "monkey's Delight"
name = "monkey's delight"
desc = "Eeee Eee!"
icon_state = "monkeysdelight"
trash = /obj/item/trash/tray
@@ -38,14 +38,14 @@
/obj/item/reagent_containers/food/snacks/dionaroast
name = "roast diona"
desc = "It's like an enormous, leathery carrot. With an eye."
desc = "It's like an enormous leathery carrot... With an eye."
icon_state = "dionaroast"
trash = /obj/item/trash/plate
filling_color = "#75754B"
list_reagents = list("plantmatter" = 4, "nutriment" = 2, "radium" = 2, "vitamin" = 4)
/obj/item/reagent_containers/food/snacks/tofurkey
name = "Tofurkey"
name = "tofurkey"
desc = "A fake turkey made from tofu."
icon_state = "tofurkey"
filling_color = "#FFFEE0"
@@ -97,7 +97,7 @@
list_reagents = list("nutriment" = 4)
/obj/item/reagent_containers/food/snacks/warmdonkpocket
name = "Warm Donk-pocket"
name = "warm Donk-pocket"
desc = "The food of choice for the seasoned traitor."
icon_state = "donkpocket"
filling_color = "#DEDEAB"
@@ -107,7 +107,7 @@
M.reagents.add_reagent("omnizine", 15)
/obj/item/reagent_containers/food/snacks/warmdonkpocket_weak
name = "Lightly Warm Donk-pocket"
name = "lukewarm Donk-pocket"
desc = "The food of choice for the seasoned traitor. This one is lukewarm."
icon_state = "donkpocket"
filling_color = "#DEDEAB"
@@ -135,7 +135,7 @@
//////////////////////
/obj/item/reagent_containers/food/snacks/boiledslimecore
name = "Boiled Slime Core"
name = "boiled slime core"
desc = "A boiled red thing."
icon_state = "boiledrorocore"
bitesize = 3
@@ -162,7 +162,7 @@
..()
/obj/item/reagent_containers/food/snacks/liquidfood
name = "\improper LiquidFood Ration"
name = "\improper LiquidFood ration"
desc = "A prepackaged grey slurry of all the essential nutrients for a spacefarer on the go. Should this be crunchy?"
icon_state = "liquidfood"
trash = /obj/item/trash/liquidfood
@@ -4,7 +4,7 @@
//////////////////////
/obj/item/reagent_containers/food/snacks/spaghetti
name = "Spaghetti"
name = "spaghetti"
desc = "A bundle of raw spaghetti."
icon = 'icons/obj/food/pasta.dmi'
icon_state = "spaghetti"
@@ -12,7 +12,7 @@
list_reagents = list("nutriment" = 1, "vitamin" = 1)
/obj/item/reagent_containers/food/snacks/macaroni
name = "Macaroni twists"
name = "macaroni twists"
desc = "These are little twists of raw macaroni."
icon = 'icons/obj/food/pasta.dmi'
icon_state = "macaroni"
@@ -25,8 +25,8 @@
//////////////////////
/obj/item/reagent_containers/food/snacks/boiledspaghetti
name = "Boiled Spaghetti"
desc = "A plain dish of noodles, this sucks."
name = "boiled spaghetti"
desc = "A plain dish of noodles. This sucks."
icon = 'icons/obj/food/pasta.dmi'
icon_state = "spaghettiboiled"
trash = /obj/item/trash/plate
@@ -44,8 +44,8 @@
list_reagents = list("nutriment" = 6, "tomatojuice" = 10, "vitamin" = 4)
/obj/item/reagent_containers/food/snacks/meatballspaghetti
name = "spaghetti & Meatballs"
desc = "Now thats a nic'e meatball!"
name = "spaghetti & meatballs"
desc = "Now thats a nice'a meatball!"
icon = 'icons/obj/food/pasta.dmi'
icon_state = "meatballspaghetti"
trash = /obj/item/trash/plate
@@ -61,7 +61,7 @@
list_reagents = list("nutriment" = 8, "synaptizine" = 10, "vitamin" = 6)
/obj/item/reagent_containers/food/snacks/macncheese
name = "Macaroni cheese"
name = "mac n cheese"
desc = "One of the most comforting foods in the world. Apparently."
trash = /obj/item/trash/snack_bowl
icon = 'icons/obj/food/pasta.dmi'
@@ -9,14 +9,14 @@
filling_color = "#BAA14C"
/obj/item/reagent_containers/food/snacks/sliceable/pizza/margherita
name = "Margherita"
name = "margherita pizza"
desc = "The golden standard of pizzas."
icon_state = "pizzamargherita"
slice_path = /obj/item/reagent_containers/food/snacks/margheritaslice
list_reagents = list("nutriment" = 30, "tomatojuice" = 6, "vitamin" = 5)
/obj/item/reagent_containers/food/snacks/margheritaslice
name = "Margherita slice"
name = "margherita slice"
desc = "A slice of the classic pizza."
icon = 'icons/obj/food/pizza.dmi'
icon_state = "pizzamargheritaslice"
@@ -24,49 +24,49 @@
list_reagents = list("nutriment" = 5)
/obj/item/reagent_containers/food/snacks/sliceable/pizza/meatpizza
name = "Meatpizza"
name = "meat pizza"
desc = "A pizza with meat topping."
icon_state = "meatpizza"
slice_path = /obj/item/reagent_containers/food/snacks/meatpizzaslice
list_reagents = list("protein" = 30, "tomatojuice" = 6, "vitamin" = 8)
/obj/item/reagent_containers/food/snacks/meatpizzaslice
name = "Meatpizza slice"
name = "meat pizza slice"
desc = "A slice of a meaty pizza."
icon = 'icons/obj/food/pizza.dmi'
icon_state = "meatpizzaslice"
filling_color = "#BAA14C"
/obj/item/reagent_containers/food/snacks/sliceable/pizza/mushroompizza
name = "Mushroompizza"
name = "mushroom pizza"
desc = "Very special pizza."
icon_state = "mushroompizza"
slice_path = /obj/item/reagent_containers/food/snacks/mushroompizzaslice
list_reagents = list("plantmatter" = 30, "vitamin" = 5)
/obj/item/reagent_containers/food/snacks/mushroompizzaslice
name = "Mushroompizza slice"
name = "mushroom pizza slice"
desc = "Maybe it is the last slice of pizza in your life."
icon = 'icons/obj/food/pizza.dmi'
icon_state = "mushroompizzaslice"
filling_color = "#BAA14C"
/obj/item/reagent_containers/food/snacks/sliceable/pizza/vegetablepizza
name = "Vegetable pizza"
desc = "No one of Tomato Sapiens were harmed during making this pizza."
name = "vegetable pizza"
desc = "No Tomato Sapiens were harmed during the making of this pizza."
icon_state = "vegetablepizza"
slice_path = /obj/item/reagent_containers/food/snacks/vegetablepizzaslice
list_reagents = list("plantmatter" = 25, "tomatojuice" = 6, "oculine" = 12, "vitamin" = 5)
/obj/item/reagent_containers/food/snacks/vegetablepizzaslice
name = "Vegetable pizza slice"
name = "vegetable pizza slice"
desc = "A slice of the most green pizza of all pizzas not containing green ingredients."
icon = 'icons/obj/food/pizza.dmi'
icon_state = "vegetablepizzaslice"
filling_color = "#BAA14C"
/obj/item/reagent_containers/food/snacks/sliceable/pizza/hawaiianpizza
name = "Hawaiian Pizza"
name = "Hawaiian pizza"
desc = "Love it or hate it, this pizza divides opinions. Complete with juicy pineapple."
icon_state = "hawaiianpizza" //NEEDED
slice_path = /obj/item/reagent_containers/food/snacks/hawaiianpizzaslice
@@ -80,7 +80,7 @@
filling_color = "#e5b437"
/obj/item/reagent_containers/food/snacks/sliceable/pizza/macpizza
name = "Macaroni cheese pizza"
name = "mac n cheese pizza"
desc = "Gastronomists have yet to classify this dish as 'pizza'."
icon_state = "macpizza"
slice_path = /obj/item/reagent_containers/food/snacks/macpizzaslice
@@ -88,7 +88,7 @@
filling_color = "#ffe45d"
/obj/item/reagent_containers/food/snacks/macpizzaslice
name = "Macaroni cheese pizza slice"
name = "mac n cheese pizza slice"
desc = "A delicious slice of pizza topped with macaroni cheese... wait, what the hell? Who would do this?!"
icon = 'icons/obj/food/pizza.dmi'
icon_state = "macpizzaslice"
@@ -235,20 +235,20 @@
/obj/item/pizzabox/margherita/New()
pizza = new /obj/item/reagent_containers/food/snacks/sliceable/pizza/margherita(src)
boxtag = "Margherita Deluxe"
boxtag = "margherita deluxe"
/obj/item/pizzabox/vegetable/New()
pizza = new /obj/item/reagent_containers/food/snacks/sliceable/pizza/vegetablepizza(src)
boxtag = "Gourmet Vegatable"
boxtag = "gourmet vegatable"
/obj/item/pizzabox/mushroom/New()
pizza = new /obj/item/reagent_containers/food/snacks/sliceable/pizza/mushroompizza(src)
boxtag = "Mushroom Special"
boxtag = "mushroom special"
/obj/item/pizzabox/meat/New()
pizza = new /obj/item/reagent_containers/food/snacks/sliceable/pizza/meatpizza(src)
boxtag = "Meatlover's Supreme"
boxtag = "meatlover's supreme"
/obj/item/pizzabox/hawaiian/New()
pizza = new /obj/item/reagent_containers/food/snacks/sliceable/pizza/hawaiianpizza(src)
boxtag = "Hawaiian Feast"
boxtag = "Hawaiian feast"
@@ -5,14 +5,14 @@
/obj/item/reagent_containers/food/snacks/brainburger
name = "brainburger"
desc = "A strange looking burger. It looks almost sentient."
desc = "A strange looking burger. It appears almost sentient."
icon_state = "brainburger"
filling_color = "#F2B6EA"
bitesize = 3
list_reagents = list("nutriment" = 6, "prions" = 10, "vitamin" = 1)
/obj/item/reagent_containers/food/snacks/ghostburger
name = "Ghost Burger"
name = "ghost burger"
desc = "Spooky! It doesn't look very filling."
icon_state = "ghostburger"
filling_color = "#FFF2FF"
@@ -47,8 +47,8 @@
list_reagents = list("nutriment" = 6, "vitamin" = 1)
/obj/item/reagent_containers/food/snacks/tofuburger
name = "Tofu Burger"
desc = "What.. is that meat?"
name = "tofu burger"
desc = "Making this should probably be a criminal offense."
icon_state = "tofuburger"
filling_color = "#FFFEE0"
bitesize = 3
@@ -73,14 +73,14 @@
/obj/item/reagent_containers/food/snacks/xenoburger
name = "xenoburger"
desc = "Smells caustic. Tastes like heresy."
desc = "Smells caustic and tastes like heresy."
icon_state = "xburger"
filling_color = "#43DE18"
bitesize = 3
list_reagents = list("nutriment" = 6, "vitamin" = 1)
/obj/item/reagent_containers/food/snacks/clownburger
name = "Clown Burger"
name = "clown burger"
desc = "This tastes funny..."
icon_state = "clownburger"
filling_color = "#FF00FF"
@@ -88,7 +88,7 @@
list_reagents = list("nutriment" = 6, "vitamin" = 1)
/obj/item/reagent_containers/food/snacks/mimeburger
name = "Mime Burger"
name = "mime burger"
desc = "Its taste defies language."
icon_state = "mimeburger"
filling_color = "#FFFFFF"
@@ -97,14 +97,14 @@
/obj/item/reagent_containers/food/snacks/baseballburger
name = "home run baseball burger"
desc = "It's still warm. The steam coming off of it looks like baseball."
desc = "It's still warm. Batter up!"
icon_state = "baseball"
filling_color = "#CD853F"
bitesize = 3
list_reagents = list("nutriment" = 6, "vitamin" = 1)
/obj/item/reagent_containers/food/snacks/spellburger
name = "Spell Burger"
name = "spell burger"
desc = "This is absolutely Ei Nath."
icon_state = "spellburger"
filling_color = "#D505FF"
@@ -112,15 +112,15 @@
list_reagents = list("nutriment" = 6, "vitamin" = 1)
/obj/item/reagent_containers/food/snacks/bigbiteburger
name = "Big Bite Burger"
desc = "Forget the Big Mac. THIS is the future!"
name = "BigBite burger"
desc = "Forget the Big Mac, THIS is the future!"
icon_state = "bigbiteburger"
filling_color = "#E3D681"
bitesize = 3
list_reagents = list("nutriment" = 10, "vitamin" = 2)
/obj/item/reagent_containers/food/snacks/superbiteburger
name = "Super Bite Burger"
name = "SuperBite burger"
desc = "This is a mountain of a burger. FOOD!"
icon_state = "superbiteburger"
filling_color = "#CCA26A"
@@ -128,8 +128,8 @@
list_reagents = list("nutriment" = 40, "vitamin" = 5)
/obj/item/reagent_containers/food/snacks/jellyburger
name = "Jelly Burger"
desc = "Culinary delight..?"
name = "jelly burger"
desc = "Culinary delight...?"
icon_state = "jellyburger"
filling_color = "#B572AB"
bitesize = 3
@@ -146,7 +146,7 @@
//////////////////////
/obj/item/reagent_containers/food/snacks/sandwich
name = "Sandwich"
name = "sandwich"
desc = "A grand creation of meat, cheese, bread, and several leaves of lettuce! Arthur Dent would be proud."
icon_state = "sandwich"
trash = /obj/item/trash/plate
@@ -154,7 +154,7 @@
list_reagents = list("nutriment" = 6, "vitamin" = 1)
/obj/item/reagent_containers/food/snacks/toastedsandwich
name = "Toasted Sandwich"
name = "toasted sandwich"
desc = "Now if you only had a pepper bar."
icon_state = "toastedsandwich"
trash = /obj/item/trash/plate
@@ -162,15 +162,15 @@
list_reagents = list("nutriment" = 6, "carbon" = 2)
/obj/item/reagent_containers/food/snacks/grilledcheese
name = "Grilled Cheese Sandwich"
desc = "Goes great with Tomato soup!"
name = "grilled cheese sandwich"
desc = "Goes great with tomato soup!"
icon_state = "toastedsandwich"
trash = /obj/item/trash/plate
filling_color = "#D9BE29"
list_reagents = list("nutriment" = 7, "vitamin" = 1) //why make a regualr sandwhich when you can make grilled cheese, with this nutriment value?
/obj/item/reagent_containers/food/snacks/jellysandwich
name = "Jelly Sandwich"
name = "jelly sandwich"
desc = "You wish you had some peanut butter to go with this..."
icon_state = "jellysandwich"
trash = /obj/item/trash/plate
@@ -18,8 +18,8 @@
list_reagents = list("protein" = 3, "vitamin" = 2)
/obj/item/reagent_containers/food/snacks/salmonsteak
name = "Salmon steak"
desc = "A piece of freshly-grilled salmon meat."
name = "salmon steak"
desc = "A fillet of freshly-grilled salmon meat."
icon = 'icons/obj/food/seafood.dmi'
icon_state = "salmonsteak"
trash = /obj/item/trash/plate
@@ -37,7 +37,7 @@
list_reagents = list("protein" = 3, "vitamin" = 2)
/obj/item/reagent_containers/food/snacks/fishfingers
name = "Fish Fingers"
name = "fish fingers"
desc = "A finger of fish."
icon = 'icons/obj/food/seafood.dmi'
icon_state = "fishfingers"
@@ -46,7 +46,7 @@
list_reagents = list("nutriment" = 4)
/obj/item/reagent_containers/food/snacks/fishburger
name = "Fillet -o- Carp Sandwich"
name = "Fillet-O-Carp sandwich"
desc = "Almost like a carp is yelling somewhere... Give me back that fillet -o- carp, give me that carp."
icon = 'icons/obj/food/seafood.dmi'
icon_state = "fishburger"
@@ -55,7 +55,7 @@
list_reagents = list("nutriment" = 6, "vitamin" = 1)
/obj/item/reagent_containers/food/snacks/cubancarp
name = "Cuban Carp"
name = "Cuban carp"
desc = "A grifftastic sandwich that burns your tongue and then leaves it numb!"
icon = 'icons/obj/food/seafood.dmi'
icon_state = "cubancarp"
@@ -65,8 +65,8 @@
list_reagents = list("nutriment" = 6, "capsaicin" = 1)
/obj/item/reagent_containers/food/snacks/fishandchips
name = "Fish and Chips"
desc = "I do say so myself chap."
name = "fish and chips"
desc = "I do say so myself old chap. Indubitably!"
icon = 'icons/obj/food/seafood.dmi'
icon_state = "fishandchips"
filling_color = "#E3D796"
@@ -98,7 +98,7 @@
list_reagents = list("nutriment" = 2)
/obj/item/reagent_containers/food/snacks/sliceable/Ebi_maki
name = "Ebi Makiroll"
name = "ebi makiroll"
desc = "A large unsliced roll of Ebi Sushi."
icon = 'icons/obj/food/seafood.dmi'
icon_state = "Ebi_maki"
@@ -108,7 +108,7 @@
list_reagents = list("nutriment" = 8)
/obj/item/reagent_containers/food/snacks/sushi_Ebi
name = "Ebi Sushi"
name = "ebi sushi"
desc = "A simple sushi consisting of cooked shrimp and rice."
icon = 'icons/obj/food/seafood.dmi'
icon_state = "sushi_Ebi"
@@ -116,7 +116,7 @@
list_reagents = list("nutriment" = 2)
/obj/item/reagent_containers/food/snacks/sliceable/Ikura_maki
name = "Ikura Makiroll"
name = "ikura makiroll"
desc = "A large unsliced roll of Ikura Sushi."
icon = 'icons/obj/food/seafood.dmi'
icon_state = "Ikura_maki"
@@ -126,7 +126,7 @@
list_reagents = list("nutriment" = 8, "protein" = 4)
/obj/item/reagent_containers/food/snacks/sushi_Ikura
name = "Ikura Sushi"
name = "ikura sushi"
desc = "A simple sushi consisting of salmon roe."
icon = 'icons/obj/food/seafood.dmi'
icon_state = "sushi_Ikura"
@@ -134,7 +134,7 @@
list_reagents = list("nutriment" = 2, "protein" = 1)
/obj/item/reagent_containers/food/snacks/sliceable/Sake_maki
name = "Sake Makiroll"
name = "sake makiroll"
desc = "A large unsliced roll of Ebi Sushi."
icon = 'icons/obj/food/seafood.dmi'
icon_state = "Sake_maki"
@@ -144,7 +144,7 @@
list_reagents = list("nutriment" = 8)
/obj/item/reagent_containers/food/snacks/sushi_Sake
name = "Sake Sushi"
name = "sake sushi"
desc = "A simple sushi consisting of raw salmon and rice."
icon = 'icons/obj/food/seafood.dmi'
icon_state = "sushi_Sake"
@@ -152,7 +152,7 @@
list_reagents = list("nutriment" = 2)
/obj/item/reagent_containers/food/snacks/sliceable/SmokedSalmon_maki
name = "Smoked Salmon Makiroll"
name = "smoked salmon makiroll"
desc = "A large unsliced roll of Smoked Salmon Sushi."
icon = 'icons/obj/food/seafood.dmi'
icon_state = "SmokedSalmon_maki"
@@ -162,7 +162,7 @@
list_reagents = list("nutriment" = 8)
/obj/item/reagent_containers/food/snacks/sushi_SmokedSalmon
name = "Smoked Salmon Sushi"
name = "smoked salmon sushi"
desc = "A simple sushi consisting of cooked salmon and rice."
icon = 'icons/obj/food/seafood.dmi'
icon_state = "sushi_SmokedSalmon"
@@ -170,7 +170,7 @@
list_reagents = list("nutriment" = 2)
/obj/item/reagent_containers/food/snacks/sliceable/Tamago_maki
name = "Tamago Makiroll"
name = "tamago makiroll"
desc = "A large unsliced roll of Tamago Sushi."
icon = 'icons/obj/food/seafood.dmi'
icon_state = "Tamago_maki"
@@ -180,7 +180,7 @@
list_reagents = list("nutriment" = 8)
/obj/item/reagent_containers/food/snacks/sushi_Tamago
name = "Tamago Sushi"
name = "tamago sushi"
desc = "A simple sushi consisting of egg and rice."
icon = 'icons/obj/food/seafood.dmi'
icon_state = "sushi_Tamago"
@@ -188,7 +188,7 @@
list_reagents = list("nutriment" = 2)
/obj/item/reagent_containers/food/snacks/sliceable/Inari_maki
name = "Inari Makiroll"
name = "inari makiroll"
desc = "A large unsliced roll of Inari Sushi."
icon = 'icons/obj/food/seafood.dmi'
icon_state = "Inari_maki"
@@ -198,7 +198,7 @@
list_reagents = list("nutriment" = 8)
/obj/item/reagent_containers/food/snacks/sushi_Inari
name = "Inari Sushi"
name = "inari sushi"
desc = "A piece of fried tofu stuffed with rice."
icon = 'icons/obj/food/seafood.dmi'
icon_state = "sushi_Inari"
@@ -206,7 +206,7 @@
list_reagents = list("nutriment" = 2)
/obj/item/reagent_containers/food/snacks/sliceable/Masago_maki
name = "Masago Makiroll"
name = "masago makiroll"
desc = "A large unsliced roll of Masago Sushi."
icon = 'icons/obj/food/seafood.dmi'
icon_state = "Masago_maki"
@@ -216,7 +216,7 @@
list_reagents = list("nutriment" = 8, "protein" = 4)
/obj/item/reagent_containers/food/snacks/sushi_Masago
name = "Masago Sushi"
name = "masago sushi"
desc = "A simple sushi consisting of goldfish roe."
icon = 'icons/obj/food/seafood.dmi'
icon_state = "sushi_Masago"
@@ -224,7 +224,7 @@
list_reagents = list("nutriment" = 2, "protein" = 1)
/obj/item/reagent_containers/food/snacks/sliceable/Tobiko_maki
name = "Tobiko Makiroll"
name = "tobiko makiroll"
desc = "A large unsliced roll of Tobkio Sushi."
icon = 'icons/obj/food/seafood.dmi'
icon_state = "Tobiko_maki"
@@ -234,7 +234,7 @@
list_reagents = list("nutriment" = 8, "protein" = 4)
/obj/item/reagent_containers/food/snacks/sushi_Tobiko
name = "Tobiko Sushi"
name = "tobiko sushi"
desc = "A simple sushi consisting of shark roe."
icon = 'icons/obj/food/seafood.dmi'
icon_state = "sushi_Masago"
@@ -242,7 +242,7 @@
list_reagents = list("nutriment" = 2, "protein" = 1)
/obj/item/reagent_containers/food/snacks/sliceable/TobikoEgg_maki
name = "Tobiko and Egg Makiroll"
name = "tobiko and egg makiroll"
desc = "A large unsliced roll of Tobkio and Egg Sushi."
icon = 'icons/obj/food/seafood.dmi'
icon_state = "TobikoEgg_maki"
@@ -252,7 +252,7 @@
list_reagents = list("nutriment" = 8, "protein" = 4)
/obj/item/reagent_containers/food/snacks/sushi_TobikoEgg
name = "Tobiko and Egg Sushi"
name = "tobiko and egg sushi"
desc = "A sushi consisting of shark roe and an egg."
icon = 'icons/obj/food/seafood.dmi'
icon_state = "sushi_TobikoEgg"
@@ -260,7 +260,7 @@
list_reagents = list("nutriment" = 2, "protein" = 1)
/obj/item/reagent_containers/food/snacks/sliceable/Tai_maki
name = "Tai Makiroll"
name = "tai makiroll"
desc = "A large unsliced roll of Tai Sushi."
icon = 'icons/obj/food/seafood.dmi'
icon_state = "Tai_maki"
@@ -270,7 +270,7 @@
list_reagents = list("nutriment" = 8)
/obj/item/reagent_containers/food/snacks/sushi_Tai
name = "Tai Sushi"
name = "tai sushi"
desc = "A simple sushi consisting of catfish and rice."
icon = 'icons/obj/food/seafood.dmi'
icon_state = "sushi_Tai"
@@ -278,7 +278,7 @@
list_reagents = list("nutriment" = 2)
/obj/item/reagent_containers/food/snacks/sushi_Unagi
name = "Unagi Sushi"
name = "unagi sushi"
desc = "A simple sushi consisting of eel and rice."
icon = 'icons/obj/food/seafood.dmi'
icon_state = "sushi_Hokki"
@@ -74,7 +74,7 @@
list_reagents = list("nutriment" = 5, "gravy" = 5, "mashedpotatoes" = 10, "vitamin" = 2)
/obj/item/reagent_containers/food/snacks/stuffing
name = "Stuffing"
name = "stuffing"
desc = "Moist, peppery breadcrumbs for filling the body cavities of dead birds. Dig in!"
icon_state = "stuffing"
filling_color = "#C9AC83"
@@ -88,7 +88,7 @@
list_reagents = list("nutriment" = 6)
/obj/item/reagent_containers/food/snacks/boiledrice
name = "Boiled Rice"
name = "boiled rice"
desc = "A boring dish of boring rice."
icon_state = "boiledrice"
trash = /obj/item/trash/snack_bowl
@@ -4,7 +4,7 @@
//////////////////////
/obj/item/reagent_containers/food/snacks/meatballsoup
name = "Meatball soup"
name = "meatball soup"
desc = "You've got balls kid, BALLS!"
icon_state = "meatballsoup"
trash = /obj/item/trash/snack_bowl
@@ -21,7 +21,7 @@
list_reagents = list("nutriment" = 5, "slimejelly" = 5, "water" = 5, "vitamin" = 4)
/obj/item/reagent_containers/food/snacks/bloodsoup
name = "Tomato soup"
name = "tomato soup"
desc = "Smells like copper."
icon_state = "tomatosoup"
filling_color = "#FF0000"
@@ -29,7 +29,7 @@
list_reagents = list("nutriment" = 2, "blood" = 10, "water" = 5, "vitamin" = 4)
/obj/item/reagent_containers/food/snacks/clownstears
name = "Clown's Tears"
name = "clown's tears"
desc = "Not very funny."
icon_state = "clownstears"
filling_color = "#C4FBFF"
@@ -37,7 +37,7 @@
list_reagents = list("nutriment" = 4, "banana" = 5, "water" = 5, "vitamin" = 8)
/obj/item/reagent_containers/food/snacks/vegetablesoup
name = "Vegetable soup"
name = "vegetable soup"
desc = "A true vegan meal." //TODO
icon_state = "vegetablesoup"
trash = /obj/item/trash/snack_bowl
@@ -46,8 +46,8 @@
list_reagents = list("nutriment" = 8, "water" = 5, "vitamin" = 4)
/obj/item/reagent_containers/food/snacks/nettlesoup
name = "Nettle soup"
desc = "To think, the botanist would've beat you to death with one of these."
name = "nettle soup"
desc = "To think, the botanist would've beaten you to death with one of these."
icon_state = "nettlesoup"
trash = /obj/item/trash/snack_bowl
filling_color = "#AFC4B5"
@@ -84,7 +84,7 @@
reagents.add_reagent("vitamin", 1)
/obj/item/reagent_containers/food/snacks/tomatosoup
name = "Tomato Soup"
name = "tomato soup"
desc = "Drinking this feels like being a vampire! A tomato vampire..."
icon_state = "tomatosoup"
trash = /obj/item/trash/snack_bowl
@@ -93,7 +93,7 @@
list_reagents = list("nutriment" = 5, "tomatojuice" = 10, "vitamin" = 3)
/obj/item/reagent_containers/food/snacks/milosoup
name = "Milosoup"
name = "milosoup"
desc = "The universe's best soup! Yum!!!"
icon_state = "milosoup"
trash = /obj/item/trash/snack_bowl
@@ -128,7 +128,7 @@
//////////////////////
/obj/item/reagent_containers/food/snacks/stew
name = "Stew"
name = "stew"
desc = "A nice and warm stew. Healthy and strong."
icon_state = "stew"
filling_color = "#9E673A"
@@ -136,7 +136,7 @@
list_reagents = list("nutriment" = 10, "oculine" = 5, "tomatojuice" = 5, "vitamin" = 5)
/obj/item/reagent_containers/food/snacks/stewedsoymeat
name = "Stewed Soy Meat"
name = "stewed soy meat"
desc = "Even non-vegetarians will LOVE this!"
icon_state = "stewedsoymeat"
trash = /obj/item/trash/plate
@@ -148,7 +148,7 @@
//////////////////////
/obj/item/reagent_containers/food/snacks/hotchili
name = "Hot Chili"
name = "hot chili"
desc = "A five alarm Texan Chili!"
icon_state = "hotchili"
trash = /obj/item/trash/snack_bowl
@@ -157,7 +157,7 @@
list_reagents = list("nutriment" = 5, "capsaicin" = 1, "tomatojuice" = 2, "vitamin" = 2)
/obj/item/reagent_containers/food/snacks/coldchili
name = "Cold Chili"
name = "cold chili"
desc = "This slush is barely a liquid!"
icon_state = "coldchili"
filling_color = "#2B00FF"
+1 -1
View File
@@ -264,7 +264,7 @@
/obj/item/reagent_containers/food/snacks/badrecipe
name = "Burned mess"
name = "burned mess"
desc = "Someone should be demoted from chef for this."
icon_state = "badrecipe"
filling_color = "#211F02"
+41
View File
@@ -50,6 +50,21 @@
component_parts += new /obj/item/stock_parts/console_screen(null)
RefreshParts()
/obj/machinery/mineral/ore_redemption/golem
req_access = list(access_free_golems)
req_access_reclaim = access_free_golems
/obj/machinery/mineral/ore_redemption/golem/New()
..()
component_parts = list()
component_parts += new /obj/item/circuitboard/ore_redemption/golem(null)
component_parts += new /obj/item/stock_parts/matter_bin(null)
component_parts += new /obj/item/stock_parts/manipulator(null)
component_parts += new /obj/item/stock_parts/micro_laser(null)
component_parts += new /obj/item/assembly/igniter(null)
component_parts += new /obj/item/stock_parts/console_screen(null)
RefreshParts()
/obj/machinery/mineral/ore_redemption/Destroy()
QDEL_NULL(files)
GET_COMPONENT(materials, /datum/component/material_container)
@@ -426,6 +441,32 @@
new /datum/data/mining_equipment("Point Transfer Card", /obj/item/card/mining_point_card, 500),
)
/obj/machinery/mineral/equipment_vendor/golem
name = "golem ship equipment vendor"
/obj/machinery/mineral/equipment_vendor/golem/New()
..()
component_parts = list()
component_parts += new /obj/item/circuitboard/mining_equipment_vendor/golem(null)
component_parts += new /obj/item/stock_parts/matter_bin(null)
component_parts += new /obj/item/stock_parts/matter_bin(null)
component_parts += new /obj/item/stock_parts/matter_bin(null)
component_parts += new /obj/item/stock_parts/console_screen(null)
RefreshParts()
/obj/machinery/mineral/equipment_vendor/golem/Initialize()
. = ..()
desc += "\nIt seems a few selections have been added."
prize_list += list(
new /datum/data/mining_equipment("Extra Id", /obj/item/card/id/golem, 250),
new /datum/data/mining_equipment("Science Backpack", /obj/item/storage/backpack/science, 250),
new /datum/data/mining_equipment("Toolbelt", /obj/item/storage/belt/utility/full/multitool, 250),
new /datum/data/mining_equipment("Monkey Cube", /obj/item/reagent_containers/food/snacks/monkeycube, 250),
new /datum/data/mining_equipment("Royal Cape of the Liberator", /obj/item/bedsheet/rd/royal_cape, 500),
new /datum/data/mining_equipment("Grey Slime Extract", /obj/item/slime_extract/grey, 1000),
new /datum/data/mining_equipment("KA Trigger Modification Kit", /obj/item/borg/upgrade/modkit/trigger_guard, 1000),
new /datum/data/mining_equipment("The Liberator's Legacy", /obj/item/storage/box/rndboards, 1500)
)
/datum/data/mining_equipment/
var/equipment_name = "generic"
+3
View File
@@ -16,6 +16,9 @@
outdoors = 1
ambientsounds = list('sound/ambience/ambimine.ogg')
/area/mine/dangerous/explored/golem
name = "Small Asteroid"
/area/mine/dangerous/unexplored
name = "Mine"
icon_state = "unexplored"
+11
View File
@@ -522,6 +522,17 @@ var/global/list/rockTurfEdgeCache = list(
O.attackby(W,user)
return
if(istype(W, /obj/item/stack/tile/plasteel) && isarea(loc))
var/area/A = loc
if(A.outdoors)
to_chat(user, "<span class='warning'>You must define a room as part of the station using blueprints or an equivalent item first.</span>")
return
playsound(src, 'sound/weapons/genhit.ogg', 50, 1)
make_plating()
icon_plating = "plating"
icon_state = "plating"
update_icon()
/turf/simulated/floor/plating/airless/asteroid/gets_drilled()
if(!dug)
gets_dug()
+7
View File
@@ -529,6 +529,13 @@
return TRUE
return FALSE
/datum/language/abductor/golem
name = "Golem Mindlink"
desc = "Communicate with other alien alloy golems through a psychic link."
/datum/language/abductor/golem/check_special_condition(mob/living/carbon/human/other, mob/living/carbon/human/speaker)
return TRUE
/datum/language/corticalborer
name = "Cortical Link"
desc = "Cortical borers possess a strange link between their tiny minds."
+2
View File
@@ -451,6 +451,8 @@ var/list/ventcrawl_machinery = list(/obj/machinery/atmospherics/unary/vent_pump,
continue
if(istype(I, /obj/item/organ))
continue
if(I.flags & ABSTRACT)
continue
else
failed++
@@ -10,7 +10,8 @@ emp_act
/mob/living/carbon/human/bullet_act(obj/item/projectile/P, def_zone)
if(!dna.species.bullet_act(P, src))
return FALSE
if(P.is_reflectable)
if(check_reflect(def_zone)) // Checks if you've passed a reflection% check
visible_message("<span class='danger'>The [P.name] gets reflected by [src]!</span>", \
@@ -295,6 +296,8 @@ emp_act
if(Iforce > 10 || Iforce >= 5 && prob(33))
forcesay(GLOB.hit_appends) //forcesay checks stat already
dna.species.spec_attacked_by(I, user, affecting, user.a_intent, src)
//this proc handles being hit by a thrown atom
/mob/living/carbon/human/hitby(atom/movable/AM, skipcatch = 0, hitpush = 1, blocked = 0)
var/obj/item/I
@@ -321,6 +324,8 @@ emp_act
visible_message("<span class='danger'>[I] embeds itself in [src]'s [L.name]!</span>","<span class='userdanger'>[I] embeds itself in your [L.name]!</span>")
hitpush = 0
skipcatch = 1 //can't catch the now embedded item
if(!blocked)
dna.species.spec_hitby(AM, src)
return ..()
/mob/living/carbon/human/proc/bloody_hands(var/mob/living/source, var/amount = 2)
@@ -360,6 +360,10 @@
var/datum/unarmed_attack/attack = user.dna.species.unarmed
user.do_attack_animation(target, attack.animation_type)
if(attack.harmless)
playsound(target.loc, attack.attack_sound, 25, 1, -1)
target.visible_message("<span class='danger'>[user] [pick(attack.attack_verb)]ed [target]!</span>")
return FALSE
add_attack_logs(user, target, "Melee attacked with fists", target.ckey ? null : ATKLOG_ALL)
if(!iscarbon(user))
@@ -509,6 +513,7 @@
var/miss_sound = 'sound/weapons/punchmiss.ogg'
var/sharp = FALSE
var/animation_type = ATTACK_EFFECT_PUNCH
var/harmless = FALSE //if set to true, attacks won't be admin logged and punches will "hit" for no damage
/datum/unarmed_attack/diona
attack_verb = list("lash", "bludgeon")
@@ -719,6 +724,13 @@ It'll return null if the organ doesn't correspond, so include null checks when u
if(abs(temperature - M.bodytemperature) > 10) //If our water and mob temperature varies by more than 10K, cool or/ heat them appropriately
M.bodytemperature = (temperature + M.bodytemperature) * 0.5 //Approximation for gradual heating or cooling
/datum/species/proc/bullet_act(obj/item/projectile/P, mob/living/carbon/human/H) //return TRUE if hit, FALSE if stopped/reflected/etc
return TRUE
/datum/species/proc/spec_hitby(atom/movable/AM, mob/living/carbon/human/H)
/datum/species/proc/spec_attacked_by(obj/item/I, mob/living/user, obj/item/bodypart/affecting, intent, mob/living/carbon/human/H)
/proc/get_random_species(species_name = FALSE) // Returns a random non black-listed or hazardous species, either as a string or datum
var/static/list/random_species = list()
if(!random_species.len)
@@ -5,8 +5,10 @@
icobase = 'icons/mob/human_races/r_golem.dmi'
deform = 'icons/mob/human_races/r_golem.dmi'
species_traits = list(NO_BREATHE, NO_BLOOD, RADIMMUNE, VIRUSIMMUNE, NOGUNS)
species_traits = list(NO_BREATHE, NO_BLOOD, NO_PAIN, RADIMMUNE, VIRUSIMMUNE, NOGUNS)
brute_mod = 0.45 //55% damage reduction
burn_mod = 0.45
tox_mod = 0.45
oxy_mod = 0
dietflags = DIET_OMNI //golems can eat anything because they are magic or something
@@ -31,35 +33,654 @@
blood_color = "#515573"
flesh_color = "#137E8F"
skinned_type = /obj/item/stack/sheet/metal
slowdown = 3
siemens_coeff = 0
blacklisted = TRUE // To prevent golem subtypes from overwhelming the odds when random species changes, only the Random Golem type can be chosen
dangerous_existence = TRUE
has_organ = list(
"brain" = /obj/item/organ/internal/brain/golem
"brain" = /obj/item/organ/internal/brain/golem,
"adamantine_resonator" = /obj/item/organ/internal/adamantine_resonator
) //Has standard darksight of 2.
suicide_messages = list(
"is crumbling into dust!",
"is smashing their body apart!")
var/golem_colour = rgb(170, 170, 170)
var/info_text = "As an <span class='danger'>Iron Golem</span>, you don't have any special traits."
var/random_eligible = TRUE
var/prefix = "Iron"
var/list/special_names = list("Tarkus")
var/human_surname_chance = 3
var/special_name_chance = 5
var/owner //dobby is a free golem
/datum/species/golem/get_random_name()
var/golem_surname = pick(GLOB.golem_names)
// 3% chance that our golem has a human surname, because cultural contamination
if(prob(human_surname_chance))
golem_surname = pick(GLOB.last_names)
else if(special_names && special_names.len && prob(special_name_chance))
golem_surname = pick(special_names)
var/golem_name = "[prefix] [golem_surname]"
return golem_name
/datum/species/golem/on_species_gain(mob/living/carbon/human/H)
..()
if(H.mind)
H.mind.assigned_role = "Golem"
H.mind.special_role = SPECIAL_ROLE_GOLEM
H.real_name = "adamantine golem ([rand(1, 1000)])"
if(owner)
H.mind.special_role = SPECIAL_ROLE_GOLEM
else
H.mind.special_role = SPECIAL_ROLE_FREE_GOLEM
H.real_name = get_random_name()
H.name = H.real_name
H.equip_to_slot_or_del(new /obj/item/clothing/under/golem(H), slot_w_uniform)
H.equip_to_slot_or_del(new /obj/item/clothing/suit/golem(H), slot_wear_suit)
H.equip_to_slot_or_del(new /obj/item/clothing/shoes/golem(H), slot_shoes)
H.equip_to_slot_or_del(new /obj/item/clothing/mask/gas/golem(H), slot_wear_mask)
H.equip_to_slot_or_del(new /obj/item/clothing/gloves/golem(H), slot_gloves)
H.regenerate_icons()
to_chat(H, info_text)
//Random Golem
////////Adamantine Golem stuff I dunno where else to put it
/datum/species/golem/random
name = "Random Golem"
blacklisted = FALSE
dangerous_existence = FALSE
var/static/list/random_golem_types
/datum/species/golem/random/on_species_gain(mob/living/carbon/C, datum/species/old_species)
..()
if(!random_golem_types)
random_golem_types = subtypesof(/datum/species/golem) - type
for(var/V in random_golem_types)
var/datum/species/golem/G = V
if(!initial(G.random_eligible))
random_golem_types -= G
var/datum/species/golem/golem_type = pick(random_golem_types)
var/mob/living/carbon/human/H = C
H.set_species(golem_type)
//Golem subtypes
//Leader golems, can resonate to communicate with all other golems
/datum/species/golem/adamantine
name = "Adamantine Golem"
skinned_type = /obj/item/stack/sheet/mineral/adamantine
has_organ = list(
"brain" = /obj/item/organ/internal/brain/golem,
"adamantine_resonator" = /obj/item/organ/internal/adamantine_resonator,
"vocal_cords" = /obj/item/organ/internal/vocal_cords/adamantine
)
golem_colour = rgb(68, 238, 221)
info_text = "As an <span class='danger'>Adamantine Golem</span>, you possess special vocal cords allowing you to \"resonate\" messages to all golems."
prefix = "Adamantine"
special_names = null
//The suicide bombers of golemkind
/datum/species/golem/plasma
name = "Plasma Golem"
skinned_type = /obj/item/stack/ore/plasma
golem_colour = rgb(170, 51, 221)
heat_level_1 = 360
heat_level_2 = 400
heat_level_3 = 460
info_text = "As a <span class='danger'>Plasma Golem</span>, you burn easily. Be careful, if you get hot enough while burning, you'll blow up!"
heatmod = 0 //fine until they blow up
prefix = "Plasma"
special_names = list("Flood", "Fire", "Bar", "Man")
var/boom_warning = FALSE
var/datum/action/innate/ignite/ignite
/datum/species/golem/plasma/handle_life(mob/living/carbon/human/H)
if(H.bodytemperature > 750)
if(!boom_warning && H.on_fire)
to_chat(H, "<span class='userdanger'>You feel like you could blow up at any moment!</span>")
boom_warning = TRUE
else
if(boom_warning)
to_chat(H, "<span class='notice'>You feel more stable.</span>")
boom_warning = FALSE
if(H.bodytemperature > 850 && H.on_fire && prob(25))
explosion(get_turf(H), 1, 2, 4, flame_range = 5)
if(H)
H.gib()
if(H.fire_stacks < 2) //flammable
H.adjust_fire_stacks(1)
..()
/datum/species/golem/plasma/on_species_gain(mob/living/carbon/C, datum/species/old_species)
..()
if(ishuman(C))
ignite = new
ignite.Grant(C)
/datum/species/golem/plasma/on_species_loss(mob/living/carbon/C)
if(ignite)
ignite.Remove(C)
..()
/datum/action/innate/ignite
name = "Ignite"
desc = "Set yourself aflame, bringing yourself closer to exploding!"
check_flags = AB_CHECK_CONSCIOUS
button_icon_state = "sacredflame"
/datum/action/innate/ignite/Activate()
if(ishuman(owner))
var/mob/living/carbon/human/H = owner
if(H.fire_stacks)
to_chat(owner, "<span class='notice'>You ignite yourself!</span>")
else
to_chat(owner, "<span class='warning'>You try to ignite yourself, but fail!</span>")
H.IgniteMob() //firestacks are already there passively
//Harder to hurt
/datum/species/golem/diamond
name = "Diamond Golem"
golem_colour = rgb(0, 255, 255)
brute_mod = 0.3 //70% damage reduction up from 55%
burn_mod = 0.3
tox_mod = 0.3
skinned_type = /obj/item/stack/ore/diamond
info_text = "As a <span class='danger'>Diamond Golem</span>, you are more resistant than the average golem."
prefix = "Diamond"
special_names = list("Back")
//Faster but softer and less armoured
/datum/species/golem/gold
name = "Gold Golem"
golem_colour = rgb(204, 204, 0)
slowdown = 2
brute_mod = 0.75 //25% damage reduction down from 55%
burn_mod = 0.75
tox_mod = 0.75
skinned_type = /obj/item/stack/ore/gold
info_text = "As a <span class='danger'>Gold Golem</span>, you are faster but less resistant than the average golem."
prefix = "Golden"
special_names = list("Boy")
//Heavier, thus higher chance of stunning when punching
/datum/species/golem/silver
name = "Silver Golem"
golem_colour = rgb(221, 221, 221)
punchstunthreshold = 9 //60% chance, from 40%
skinned_type = /obj/item/stack/ore/silver
info_text = "As a <span class='danger'>Silver Golem</span>, your attacks have a higher chance of stunning."
prefix = "Silver"
special_names = list("Surfer", "Chariot", "Lining")
//Harder to stun, deals more damage, but it's even slower
/datum/species/golem/plasteel
name = "Plasteel Golem"
golem_colour = rgb(187, 187, 187)
stun_mod = 0.4
punchdamagelow = 12
punchdamagehigh = 21
punchstunthreshold = 18 //still 40% stun chance
slowdown = 5 //diona speed
skinned_type = /obj/item/stack/ore/iron
info_text = "As a <span class='danger'>Plasteel Golem</span>, you are slower, but harder to stun, and hit very hard when punching."
prefix = "Plasteel"
special_names = null
unarmed_type = /datum/unarmed_attack/golem/plasteel
/datum/unarmed_attack/golem/plasteel
attack_verb = list("smash")
attack_sound = 'sound/effects/meteorimpact.ogg'
//More resistant to burn damage
//Add ashstorm resistance if we ever port lavaland
/datum/species/golem/titanium
name = "Titanium Golem"
golem_colour = rgb(255, 255, 255)
skinned_type = /obj/item/stack/ore/titanium
info_text = "As a <span class='danger'>Titanium Golem</span>, you are resistant to burn damage."
burn_mod = 0.3
prefix = "Titanium"
special_names = list("Dioxide")
//Even more resistant to burn damage
//Add ashstorm and lava resistance if we ever port lavaland
/datum/species/golem/plastitanium
name = "Plastitanium Golem"
golem_colour = rgb(136, 136, 136)
skinned_type = /obj/item/stack/ore/titanium
info_text = "As a <span class='danger'>Plastitanium Golem</span>, you are very resistant to burn damage."
burn_mod = 0.15
prefix = "Plastitanium"
special_names = null
//Fast and regenerates... but can only speak like an abductor
/datum/species/golem/alloy
name = "Alien Alloy Golem"
golem_colour = rgb(51, 51, 51)
skinned_type = /obj/item/stack/sheet/mineral/abductor
language = "Golem Mindlink"
default_language = "Golem Mindlink"
slowdown = 2 //faster
info_text = "As an <span class='danger'>Alloy Golem</span>, you are made of advanced alien materials: you are faster and regenerate over time. You are, however, only able to speak telepathically to other alloy golems."
prefix = "Alien"
special_names = list("Outsider", "Technology", "Watcher", "Stranger") //ominous and unknown
//Regenerates because self-repairing super-advanced alien tech
/datum/species/golem/alloy/handle_life(mob/living/carbon/human/H)
if(H.stat == DEAD)
return
H.adjustBruteLoss(-2)
H.adjustFireLoss(-2)
H.adjustToxLoss(-2)
H.adjustOxyLoss(-2)
/datum/species/golem/alloy/can_understand(mob/other) //Can understand everyone, but they can only speak over their mindlink
return TRUE
/datum/species/golem/alloy/on_species_gain(mob/living/carbon/human/H)
..()
H.languages.Cut()
H.add_language("Golem Mindlink")
//Regenerates like dionas, less resistant
/datum/species/golem/wood
name = "Wood Golem"
golem_colour = rgb(158, 112, 75)
skinned_type = /obj/item/stack/sheet/wood
species_traits = list(NO_BREATHE, NO_BLOOD, NO_PAIN, RADIMMUNE, VIRUSIMMUNE, NOGUNS, IS_PLANT)
//Can burn and take damage from heat
brute_mod = 0.7 //30% damage reduction down from 55%
burn_mod = 1
heatmod = 1.5
heat_level_1 = 300
heat_level_2 = 340
heat_level_3 = 400
dietflags = 0 //Regenerate nutrition in light, no diet necessary
taste_sensitivity = TASTE_SENSITIVITY_NO_TASTE
info_text = "As a <span class='danger'>Wooden Golem</span>, you have plant-like traits: you take damage from extreme temperatures, can be set on fire, and have lower armor than a normal golem. You regenerate when in the light and wither in the darkness."
prefix = "Wooden"
special_names = list("Bark", "Willow", "Catalpa", "Oak", "Sap", "Twig", "Branch", "Maple", "Birch", "Elm", "Basswood", "Cottonwood", "Larch", "Aspen", "Ash", "Beech", "Buckeye", "Cedar", "Chestnut", "Cypress", "Fir", "Hawthorn", "Hazel", "Hickory", "Ironwood", "Juniper", "Leaf", "Mangrove", "Palm", "Pawpaw", "Pine", "Poplar", "Redwood", "Redbud", "Sassafras", "Spruce", "Sumac", "Trunk", "Walnut", "Yew")
human_surname_chance = 0
special_name_chance = 100
/datum/species/golem/wood/handle_life(mob/living/carbon/human/H)
var/light_amount = 0 //how much light there is in the place, affects receiving nutrition and healing
if(isturf(H.loc)) //else, there's considered to be no light
var/turf/T = H.loc
light_amount = min(T.get_lumcount() * 10, 5) //hardcapped so it's not abused by having a ton of flashlights
H.nutrition = min(H.nutrition+light_amount, NUTRITION_LEVEL_WELL_FED+10)
if(light_amount > 0)
H.clear_alert("nolight")
else
H.throw_alert("nolight", /obj/screen/alert/nolight)
if((light_amount >= 5) && !H.suiciding) //if there's enough light, heal
H.adjustBruteLoss(-(light_amount/2))
H.adjustFireLoss(-(light_amount/4))
if(H.nutrition < NUTRITION_LEVEL_STARVING+50)
H.take_overall_damage(10,0)
..()
//Radioactive
/datum/species/golem/uranium
name = "Uranium Golem"
golem_colour = rgb(119, 255, 0)
skinned_type = /obj/item/stack/ore/uranium
info_text = "As an <span class='danger'>Uranium Golem</span>, you emit radiation. It won't harm fellow golems, but organic lifeforms will be affected."
prefix = "Uranium"
special_names = list("Oxide", "Rod", "Meltdown")
/datum/species/golem/uranium/handle_life(mob/living/carbon/human/H)
for(var/mob/living/L in range(2, H))
if(isgolem(H))
continue
to_chat(L, "<span class='danger'>You are enveloped by a soft green glow emanating from [H].</span>")
L.apply_effect(10, IRRADIATE)
..()
//Ventcrawler
/datum/species/golem/plastic
name = "Plastic Golem"
prefix = "Plastic"
special_names = null
golem_colour = rgb(255, 255, 255)
skinned_type = /obj/item/stack/sheet/plastic
info_text = "As a <span class='danger'>Plastic Golem</span>, you are capable of ventcrawling if you're naked."
/datum/species/golem/plastic/on_species_gain(mob/living/carbon/C, datum/species/old_species)
. = ..()
C.ventcrawler = 1
/datum/species/golem/plastic/on_species_loss(mob/living/carbon/C)
. = ..()
C.ventcrawler = initial(C.ventcrawler)
//Immune to physical bullets and resistant to brute, but very vulnerable to burn damage. Dusts on death.
/datum/species/golem/sand
name = "Sand Golem"
golem_colour = rgb(255, 220, 143)
skinned_type = /obj/item/stack/ore/glass //this is sand
brute_mod = 0.25
burn_mod = 3
info_text = "As a <span class='danger'>Sand Golem</span>, you are immune to physical bullets and take very little brute damage, but are extremely vulnerable to burn damage and energy weapons. You will also turn to sand when dying, preventing any form of recovery."
unarmed_type = /datum/unarmed_attack/golem/sand
prefix = "Sand"
special_names = list("Castle", "Bag", "Dune", "Worm", "Storm")
/datum/species/golem/sand/handle_death(mob/living/carbon/human/H)
H.visible_message("<span class='danger'>[H] turns into a pile of sand!</span>")
for(var/obj/item/W in H)
H.unEquip(W)
for(var/i=1, i <= rand(3, 5), i++)
new /obj/item/stack/ore/glass(get_turf(H))
qdel(H)
/datum/species/golem/sand/bullet_act(obj/item/projectile/P, mob/living/carbon/human/H)
if(!(P.original == H && P.firer == H))
if(P.flag == "bullet" || P.flag == "bomb")
playsound(H, 'sound/effects/shovel_dig.ogg', 70, 1)
H.visible_message("<span class='danger'>The [P.name] sinks harmlessly in [H]'s sandy body!</span>", \
"<span class='userdanger'>The [P.name] sinks harmlessly in [H]'s sandy body!</span>")
return FALSE
return TRUE
/datum/unarmed_attack/golem/sand
attack_sound = 'sound/effects/shovel_dig.ogg'
//Reflects lasers and resistant to burn damage, but very vulnerable to brute damage. Shatters on death.
/datum/species/golem/glass
name = "Glass Golem"
golem_colour = rgb(90, 150, 180)
skinned_type = /obj/item/shard
brute_mod = 3 //very fragile
burn_mod = 0.25
info_text = "As a <span class='danger'>Glass Golem</span>, you reflect lasers and energy weapons, and are very resistant to burn damage. However, you are extremely vulnerable to brute damage. On death, you'll shatter beyond any hope of recovery."
unarmed_type = /datum/unarmed_attack/golem/glass
prefix = "Glass"
special_names = list("Lens", "Prism", "Fiber", "Bead")
/datum/species/golem/glass/handle_death(mob/living/carbon/human/H)
playsound(H, "shatter", 70, 1)
H.visible_message("<span class='danger'>[H] shatters!</span>")
for(var/obj/item/W in H)
H.unEquip(W)
for(var/i=1, i <= rand(3, 5), i++)
new /obj/item/shard(get_turf(H))
qdel(H)
/datum/species/golem/glass/bullet_act(obj/item/projectile/P, mob/living/carbon/human/H)
if(!(P.original == H && P.firer == H)) //self-shots don't reflect
if(P.is_reflectable)
H.visible_message("<span class='danger'>The [P.name] gets reflected by [H]'s glass skin!</span>", \
"<span class='userdanger'>The [P.name] gets reflected by [H]'s glass skin!</span>")
if(P.starting)
var/new_x = P.starting.x + pick(0, 0, 0, 0, 0, -1, 1, -2, 2)
var/new_y = P.starting.y + pick(0, 0, 0, 0, 0, -1, 1, -2, 2)
var/turf/curloc = get_turf(H)
// redirect the projectile
P.firer = src
P.original = locate(new_x, new_y, P.z)
P.starting = curloc
P.current = curloc
P.yo = new_y - curloc.y
P.xo = new_x - curloc.x
P.Angle = null
return FALSE
return TRUE
/datum/unarmed_attack/golem/glass
attack_sound = 'sound/effects/glassbr2.ogg'
//Teleports when hit or when it wants to
/datum/species/golem/bluespace
name = "Bluespace Golem"
golem_colour = rgb(51, 51, 255)
skinned_type = /obj/item/stack/ore/bluespace_crystal
info_text = "As a <span class='danger'>Bluespace Golem</span>, you are spatially unstable: You will teleport when hit, and you can teleport manually at a long distance."
prefix = "Bluespace"
special_names = list("Crystal", "Polycrystal")
unarmed_type = /datum/unarmed_attack/golem/bluespace
var/datum/action/innate/unstable_teleport/unstable_teleport
var/teleport_cooldown = 100
var/last_teleport = 0
var/tele_range = 6
/datum/species/golem/bluespace/proc/reactive_teleport(mob/living/carbon/human/H)
H.visible_message("<span class='warning'>[H] teleports!</span>", "<span class='danger'>You destabilize and teleport!</span>")
var/list/turfs = new/list()
for(var/turf/T in orange(tele_range, H))
if(T.density)
continue
if(T.x>world.maxx-tele_range || T.x<tele_range)
continue
if(T.y>world.maxy-tele_range || T.y<tele_range)
continue
turfs += T
if(!turfs.len)
turfs += pick(/turf in orange(tele_range, H))
var/turf/picked = pick(turfs)
if(!isturf(picked))
return
if(H.buckled)
H.buckled.unbuckle_mob()
do_teleport(H, picked)
return TRUE
/datum/species/golem/bluespace/spec_hitby(atom/movable/AM, mob/living/carbon/human/H)
..()
var/obj/item/I
if(istype(AM, /obj/item))
I = AM
if(I.thrownby == H) //No throwing stuff at yourself to trigger the teleport
return 0
else
reactive_teleport(H)
/datum/species/golem/bluespace/spec_attack_hand(mob/living/carbon/human/M, mob/living/carbon/human/H, datum/martial_art/attacker_style)
..()
if(world.time > last_teleport + teleport_cooldown && M != H && M.a_intent != INTENT_HELP)
reactive_teleport(H)
/datum/species/golem/bluespace/spec_attacked_by(obj/item/I, mob/living/user, obj/item/bodypart/affecting, intent, mob/living/carbon/human/H)
..()
if(world.time > last_teleport + teleport_cooldown && user != H)
reactive_teleport(H)
/datum/species/golem/bluespace/bullet_act(obj/item/projectile/P, mob/living/carbon/human/H)
if(world.time > last_teleport + teleport_cooldown)
reactive_teleport(H)
return TRUE
/datum/species/golem/bluespace/on_species_gain(mob/living/carbon/C, datum/species/old_species)
..()
if(ishuman(C))
unstable_teleport = new
unstable_teleport.Grant(C)
last_teleport = world.time
/datum/species/golem/bluespace/on_species_loss(mob/living/carbon/C)
if(unstable_teleport)
unstable_teleport.Remove(C)
..()
/datum/action/innate/unstable_teleport
name = "Unstable Teleport"
check_flags = AB_CHECK_CONSCIOUS
button_icon_state = "blink"
icon_icon = 'icons/mob/actions/actions.dmi'
var/cooldown = 150
var/last_teleport = 0
var/tele_range = 6
/datum/action/innate/unstable_teleport/IsAvailable()
if(..())
if(world.time > last_teleport + cooldown)
return 1
return 0
/datum/action/innate/unstable_teleport/Activate()
var/mob/living/carbon/human/H = owner
H.visible_message("<span class='warning'>[H] starts vibrating!</span>", "<span class='danger'>You start charging your bluespace core...</span>")
playsound(get_turf(H), 'sound/weapons/flash.ogg', 25, 1)
addtimer(CALLBACK(src, .proc/teleport, H), 15)
/datum/action/innate/unstable_teleport/proc/teleport(mob/living/carbon/human/H)
H.visible_message("<span class='warning'>[H] teleports!</span>", "<span class='danger'>You teleport!</span>")
var/list/turfs = new/list()
for(var/turf/T in orange(tele_range, H))
if(istype(T, /turf/space))
continue
if(T.density)
continue
if(T.x>world.maxx-tele_range || T.x<tele_range)
continue
if(T.y>world.maxy-tele_range || T.y<tele_range)
continue
turfs += T
if(!turfs.len)
turfs += pick(/turf in orange(tele_range, H))
var/turf/picked = pick(turfs)
if(!isturf(picked))
return
if(H.buckled)
H.buckled.unbuckle_mob()
do_teleport(H, picked)
last_teleport = world.time
UpdateButtonIcon() //action icon looks unavailable
sleep(cooldown + 5)
UpdateButtonIcon() //action icon looks available again
/datum/unarmed_attack/golem/bluespace
attack_verb = "bluespace punch"
attack_sound = 'sound/effects/phasein.ogg'
//honk
/datum/species/golem/bananium
name = "Bananium Golem"
golem_colour = rgb(255, 255, 0)
punchdamagelow = 0
punchdamagehigh = 0
punchstunthreshold = 1 //Harmless and can't stun
skinned_type = /obj/item/stack/ore/bananium
info_text = "As a <span class='danger'>Bananium Golem</span>, you are made for pranking. Your body emits natural honks, and you can barely even hurt people when punching them. Your skin also bleeds banana peels when damaged."
prefix = "Bananium"
special_names = null
unarmed_type = /datum/unarmed_attack/golem/bananium
var/last_honk = 0
var/honkooldown = 0
var/last_banana = 0
var/banana_cooldown = 100
var/active = null
/datum/species/golem/bananium/on_species_gain(mob/living/carbon/human/H)
..()
last_banana = world.time
last_honk = world.time
H.job = "Clown"
H.mutations.Add(COMIC)
H.equip_to_slot_or_del(new /obj/item/reagent_containers/food/drinks/bottle/bottleofbanana(H), slot_r_store)
H.equip_to_slot_or_del(new /obj/item/bikehorn(H), slot_l_store)
/datum/species/golem/bananium/get_random_name()
var/clown_name = pick(GLOB.clown_names)
var/golem_name = "[prefix] [clown_name]"
return golem_name
/datum/species/golem/bananium/spec_attack_hand(mob/living/carbon/human/M, mob/living/carbon/human/H, datum/martial_art/attacker_style)
..()
if(world.time > last_banana + banana_cooldown && M != H && M.a_intent != INTENT_HELP)
new/obj/item/grown/bananapeel/specialpeel(get_turf(H))
last_banana = world.time
/datum/species/golem/bananium/spec_attacked_by(obj/item/I, mob/living/user, obj/item/bodypart/affecting, intent, mob/living/carbon/human/H)
..()
if(world.time > last_banana + banana_cooldown && user != H)
new/obj/item/grown/bananapeel/specialpeel(get_turf(H))
last_banana = world.time
/datum/species/golem/bananium/bullet_act(obj/item/projectile/P, mob/living/carbon/human/H)
if(world.time > last_banana + banana_cooldown)
new/obj/item/grown/bananapeel/specialpeel(get_turf(H))
last_banana = world.time
return TRUE
/datum/species/golem/bananium/spec_hitby(atom/movable/AM, mob/living/carbon/human/H)
..()
var/obj/item/I
if(istype(AM, /obj/item))
I = AM
if(I.thrownby == H) //No throwing stuff at yourself to make bananas
return 0
else
new/obj/item/grown/bananapeel/specialpeel(get_turf(H))
last_banana = world.time
/datum/species/golem/bananium/handle_life(mob/living/carbon/human/H)
if(!active)
if(world.time > last_honk + honkooldown)
active = 1
playsound(get_turf(H), 'sound/items/bikehorn.ogg', 50, 1)
last_honk = world.time
honkooldown = rand(20, 80)
active = null
..()
/datum/species/golem/bananium/handle_death(mob/living/carbon/human/H)
playsound(get_turf(H), 'sound/misc/sadtrombone.ogg', 70, 0)
/datum/unarmed_attack/golem/bananium
attack_verb = list("HONK")
attack_sound = 'sound/items/airhorn2.ogg'
animation_type = ATTACK_EFFECT_DISARM
harmless = TRUE
//...
/datum/species/golem/tranquillite
name = "Tranquillite Golem"
prefix = "Tranquillite"
special_names = null
golem_colour = rgb(255, 255, 255)
skinned_type = /obj/item/stack/ore/tranquillite
info_text = "As a <span class='danger'>Tranquillite Golem</span>, you are capable of creating invisible walls, and can regenerate by drinking your bottle of Nothing."
unarmed_type = /datum/unarmed_attack/golem/tranquillite
/datum/species/golem/tranquillite/get_random_name()
var/mime_name = pick(GLOB.mime_names)
var/golem_name = "[prefix] [mime_name]"
return golem_name
/datum/species/golem/tranquillite/on_species_gain(mob/living/carbon/human/H)
..()
H.job = "Mime"
H.equip_to_slot_or_del(new /obj/item/clothing/head/beret(H), slot_head)
H.equip_to_slot_or_del(new /obj/item/reagent_containers/food/drinks/bottle/bottleofnothing(H), slot_r_store)
H.equip_to_slot_or_del(new /obj/item/cane(H), slot_l_hand)
if(H.mind)
H.mind.AddSpell(new /obj/effect/proc_holder/spell/aoe_turf/conjure/mime_wall(null))
H.mind.AddSpell(new /obj/effect/proc_holder/spell/targeted/mime/speak(null))
H.mind.miming = TRUE
/datum/unarmed_attack/golem/tranquillite
attack_sound = null
miss_sound = null
//Golem abstract items
/obj/item/clothing/under/golem
name = "adamantine skin"
name = "golem skin"
desc = "a golem's skin"
icon_state = "golem"
item_state = "golem"
@@ -69,34 +690,39 @@
armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0)
/obj/item/clothing/suit/golem
name = "adamantine shell"
name = "golem shell"
desc = "a golem's thick outter shell"
icon_state = "golem"
item_state = "golem"
body_parts_covered = HEAD|UPPER_TORSO|LOWER_TORSO|LEGS|FEET|ARMS|HANDS
flags_inv = HIDEGLOVES|HIDESHOES
flags = ABSTRACT | NODROP | THICKMATERIAL
gas_transfer_coefficient = 0.01
permeability_coefficient = 0.02
body_parts_covered = HEAD | UPPER_TORSO | LOWER_TORSO | LEGS | FEET | ARMS | HANDS
flags_inv = HIDEGLOVES | HIDESHOES
flags = STOPSPRESSUREDMAGE | ABSTRACT | NODROP | THICKMATERIAL
flags_size = ONESIZEFITSALL
armor = list(melee = 55, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0)
cold_protection = HEAD | UPPER_TORSO | LOWER_TORSO | LEGS | FEET | ARMS | HANDS
min_cold_protection_temperature = SPACE_SUIT_MIN_TEMP_PROTECT
armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 100, rad = 0)
/obj/item/clothing/shoes/golem
name = "golem's feet"
desc = "sturdy adamantine feet"
desc = "sturdy golem feet"
icon_state = "golem"
item_state = "golem"
flags = ABSTRACT | NODROP
/obj/item/clothing/mask/gas/golem
name = "golem's face"
desc = "the imposing face of an adamantine golem"
desc = "the imposing face of a golem"
icon_state = "golem"
item_state = "golem"
unacidable = 1
flags = ABSTRACT | NODROP
flags_inv = HIDEEARS | HIDEEYES
/obj/item/clothing/gloves/golem
name = "golem's hands"
desc = "strong adamantine hands"
desc = "strong golem hands"
icon_state = "golem"
item_state = null
flags = ABSTRACT | NODROP
@@ -222,6 +222,10 @@ var/global/list/damage_icon_parts = list()
base_icon.Blend(temp, ICON_OVERLAY)
if(!skeleton)
if(isgolem(src))
var/datum/species/golem/G = src.dna.species
if(G.golem_colour)
base_icon.ColorTone(G.golem_colour)
if(husk)
base_icon.ColorTone(husk_color_mod)
else if(hulk)
@@ -239,6 +243,7 @@ var/global/list/damage_icon_parts = list()
var/mutable_appearance/new_base = mutable_appearance(base_icon, layer = -LIMBS_LAYER)
human_icon_cache[icon_key] = new_base
standing += new_base
//END CACHED ICON GENERATION.
overlays_standing[LIMBS_LAYER] = standing
+2
View File
@@ -67,6 +67,8 @@
med_hud_set_health()
med_hud_set_status()
if(!gibbed && !QDELETED(src))
addtimer(CALLBACK(src, .proc/med_hud_set_status), (DEFIB_TIME_LIMIT * 10) + 1)
callHook("death", list(src, gibbed))
for(var/s in ownedSoullinks)
@@ -99,7 +99,7 @@
/mob/living/silicon/robot/drone/update_icons()
overlays.Cut()
if(stat == 0)
if(stat == CONSCIOUS)
overlays += "eyes-[icon_state]"
else
overlays -= "eyes"
@@ -124,7 +124,7 @@
else if(istype(W, /obj/item/card/id)||istype(W, /obj/item/pda))
if(stat == 2)
if(stat == DEAD)
if(!config.allow_drone_spawn || emagged || health < -35) //It's dead, Dave.
to_chat(user, "<span class='warning'>The interface is fried, and a distressing burned smell wafts from the robot's interior. You're not rebooting this one.</span>")
@@ -166,7 +166,7 @@
..()
/mob/living/silicon/robot/drone/emag_act(user as mob)
if(!client || stat == 2)
if(!client || stat == DEAD)
to_chat(user, "<span class='warning'>There's not much point subverting this heap of junk.</span>")
return
@@ -223,12 +223,12 @@
/mob/living/silicon/robot/drone/death(gibbed)
. = ..(gibbed)
ghostize(can_reenter_corpse = 0)
adjustBruteLoss(health)
//CONSOLE PROCS
/mob/living/silicon/robot/drone/proc/law_resync()
if(stat != 2)
if(stat != DEAD)
if(emagged)
to_chat(src, "<span class='warning'>You feel something attempting to modify your programming, but your hacked subroutines are unaffected.</span>")
else
@@ -237,7 +237,7 @@
show_laws()
/mob/living/silicon/robot/drone/proc/shut_down(force=FALSE)
if(stat == 2)
if(stat == DEAD)
return
if(emagged && !force)
@@ -19,6 +19,7 @@
var/dissipate_strength = 1 //How much energy do we lose?
var/move_self = 1 //Do we move on our own?
var/grav_pull = 4 //How many tiles out do we pull?
move_resist = INFINITY //no, you don't get to push the singulo. Not even you OP wizard gateway statues
var/consume_range = 0 //How many tiles out do we eat
var/event_chance = 15 //Prob for event each tick
var/target = null //its target. moves towards the target if it has one
@@ -531,9 +531,7 @@
/datum/chemical_reaction/slimegolem/on_reaction(datum/reagents/holder)
feedback_add_details("slime_cores_used","[type]")
var/obj/effect/golemrune/Z = new /obj/effect/golemrune
Z.forceMove(get_turf(holder.my_atom))
notify_ghosts("Golem rune created in [get_area(Z)].", source = Z)
new /obj/item/stack/sheet/mineral/adamantine(get_turf(holder.my_atom))
//Bluespace
/datum/chemical_reaction/slimefloor2
@@ -889,3 +889,13 @@
materials = list(MAT_METAL = 1000)
build_path = /obj/item/safe_internals
category = list("initial", "Construction")
/datum/design/golem_shell
name = "Golem Shell Construction"
desc = "Allows for the construction of a Golem Shell."
id = "golem"
build_type = AUTOLATHE
materials = list(MAT_METAL = 40000)
build_path = /obj/item/golem_shell
category = list("Imported")
+10
View File
@@ -386,3 +386,13 @@ datum/tech/robotics
name = default_name
desc = default_desc
blueprint = null
/obj/item/disk/design_disk/golem_shell
name = "golem creation disk"
desc = "A gift from the Liberator."
icon_state = "datadisk1"
/obj/item/disk/design_disk/golem_shell/Initialize()
. = ..()
var/datum/design/golem_shell/G = new
blueprint = G
@@ -389,84 +389,6 @@
if(!uses)
qdel(src)
////////Adamantine Golem stuff I dunno where else to put it
/obj/effect/golemrune
anchored = 1
desc = "a strange rune used to create golems. It glows when spirits are nearby."
name = "rune"
icon = 'icons/obj/rune.dmi'
icon_state = "golem"
unacidable = 1
layer = TURF_LAYER
var/list/mob/dead/observer/ghosts[0]
/obj/effect/golemrune/New()
..()
processing_objects.Add(src)
/obj/effect/golemrune/process()
if(ghosts.len>0)
icon_state = "golem2"
else
icon_state = "golem"
/obj/effect/golemrune/attack_hand(mob/living/user)
var/mob/dead/observer/ghost
for(var/mob/dead/observer/O in loc)
if(!check_observer(O))
to_chat(O, "<span class='warning'>You are not eligible to become a golem.</span>")
continue
ghost = O
break
if(!ghost)
to_chat(user, "The rune fizzles uselessly. There is no spirit nearby.")
return
var/mob/living/carbon/human/golem/G = new /mob/living/carbon/human/golem
G.change_gender(pick(MALE,FEMALE))
G.loc = src.loc
G.key = ghost.key
add_attack_logs(user, G, "Summoned as a golem")
to_chat(G, "You are an adamantine golem. You move slowly, but are highly resistant to heat and cold as well as blunt trauma. You are unable to wear clothes, but can still use most tools. Serve [user], and assist [user.p_them()] in completing [user.p_their()] goals at any cost.")
qdel(src)
/obj/effect/golemrune/Topic(href,href_list)
if("signup" in href_list)
var/mob/dead/observer/O = locate(href_list["signup"])
volunteer(O)
/obj/effect/golemrune/attack_ghost(var/mob/dead/observer/O)
if(!O)
return
volunteer(O)
/obj/effect/golemrune/proc/check_observer(var/mob/dead/observer/O)
if(!O)
return FALSE
if(!O.client)
return FALSE
if(O.mind && O.mind.current && O.mind.current.stat != DEAD)
return FALSE
if(!O.can_reenter_corpse)
return FALSE
if(cannotPossess(O))
return FALSE
return TRUE
/obj/effect/golemrune/proc/volunteer(var/mob/dead/observer/O)
if(O in ghosts)
ghosts.Remove(O)
to_chat(O, "<span class='warning'>You are no longer signed up to be a golem.</span>")
else
if(!check_observer(O))
to_chat(O, "<span class='warning'>You are not eligible to become a golem.</span>")
return
ghosts.Add(O)
to_chat(O, "<span class='notice'>You are signed up to be a golem.</span>")
/obj/effect/timestop
anchored = 1
name = "chronofield"
+3
View File
@@ -837,7 +837,10 @@
req_access = list(access_cent_general)
shuttleId = "specops"
possible_destinations = "specops_home;specops_away"
<<<<<<< HEAD
resistance_flags = INDESTRUCTIBLE
=======
>>>>>>> refs/remotes/ParadiseSS13/master
/obj/machinery/computer/shuttle/white_ship
name = "White Ship Console"
@@ -261,7 +261,7 @@
/obj/item/organ/internal/cyberimp/chest/reviver/on_life()
if(reviving)
if(owner.stat == UNCONSCIOUS)
if(owner.stat == UNCONSCIOUS && (owner.sleeping == 0)) //!owner.sleeping didn't work for whatever dumb reason
spawn(30)
if(prob(90) && owner.getOxyLoss())
owner.adjustOxyLoss(-3)
@@ -51,6 +51,35 @@ var/static/regex/multispin_words = regex("like a record baby")
/obj/item/organ/internal/vocal_cords/proc/handle_speech(message) //change the message
return message
/obj/item/organ/internal/adamantine_resonator
name = "adamantine resonator"
desc = "Fragments of adamantine exist in all golems, stemming from their origins as purely magical constructs. These are used to \"hear\" messages from their leaders."
parent_organ = "head"
slot = "adamantine_resonator"
icon_state = "adamantine_resonator"
/obj/item/organ/internal/vocal_cords/adamantine
name = "adamantine vocal cords"
desc = "When adamantine resonates, it causes all nearby pieces of adamantine to resonate as well. Adamantine golems use this to broadcast messages to nearby golems."
actions_types = list(/datum/action/item_action/organ_action/use/adamantine_vocal_cords)
icon_state = "adamantine_cords"
/datum/action/item_action/organ_action/use/adamantine_vocal_cords/Trigger()
if(!IsAvailable())
return
var/message = input(owner, "Resonate a message to all nearby golems.", "Resonate")
if(QDELETED(src) || QDELETED(owner) || !message)
return
owner.say(".x[message]")
/obj/item/organ/internal/vocal_cords/adamantine/handle_speech(message)
var/msg = "<span class='resonate'><span class='name'>[owner.real_name]</span> <span class='message'>resonates, \"[message]\"</span></span>"
for(var/m in GLOB.player_list)
if(iscarbon(m))
var/mob/living/carbon/C = m
if(C.get_organ_slot("adamantine_resonator"))
to_chat(C, msg)
//Colossus drop, forces the listeners to obey certain commands
/obj/item/organ/internal/vocal_cords/colossus
name = "divine vocal cords"