diff --git a/code/_onclick/hud/alert.dm b/code/_onclick/hud/alert.dm
index a5f4a566878..b25c4d69b44 100644
--- a/code/_onclick/hud/alert.dm
+++ b/code/_onclick/hud/alert.dm
@@ -162,6 +162,10 @@ The box in your backpack has an oxygen tank and gas mask in it."
name = "Too Cold"
desc = "You're freezing cold! Get somewhere warmer and take off any insulating clothing like a space suit."
icon_state = "cold"
+
+/obj/screen/alert/cold/drask
+ name = "Cold"
+ desc = "You're breathing supercooled gas! It's stimulating your metabolism to regenerate damaged tissue."
/obj/screen/alert/cold/robot
desc = "The air around you is too cold for a humanoid. Be careful to avoid exposing them to this enviroment."
@@ -397,4 +401,4 @@ so as to remain in compliance with the most up-to-date laws."
severity = 0
master = null
screen_loc = ""
- return QDEL_HINT_QUEUE
\ No newline at end of file
+ return QDEL_HINT_QUEUE
diff --git a/code/game/gamemodes/mutiny/mutiny_admin.dm b/code/game/gamemodes/mutiny/mutiny_admin.dm
index 2ba08def2d9..e4b2cca1c63 100644
--- a/code/game/gamemodes/mutiny/mutiny_admin.dm
+++ b/code/game/gamemodes/mutiny/mutiny_admin.dm
@@ -1,4 +1,4 @@
-/datum/game_mode/mutiny/proc/check_antagonists_ui(admins)
+/datum/game_mode/mutiny/proc/check_antagonists_ui(datum/admins/admins)
var/turf/captains_key_loc = captains_key ? captains_key.get_loc_turf() : "Lost or Destroyed"
var/turf/secondary_key_loc = secondary_key ? secondary_key.get_loc_turf() : "Lost or Destroyed"
var/remaining_objectives = current_directive.get_remaining_orders()
@@ -29,22 +29,22 @@
txt += "Reassign Head Loyalist
"
if(head_loyalist)
- txt += check_role_table("Head Loyalist", list(head_loyalist), admins, 0)
+ txt += admins.check_role_table("Head Loyalist", list(head_loyalist), 0)
var/list/loyal_crew = loyalists - head_loyalist
if(loyal_crew.len)
- txt += check_role_table("Loyalists", loyal_crew, admins, 0)
+ txt += admins.check_role_table("Loyalists", loyal_crew, 0)
txt += "Reassign Head Mutineer
"
if(head_mutineer)
- txt += check_role_table("Head Mutineer", list(head_mutineer), admins, 0)
+ txt += admins.check_role_table("Head Mutineer", list(head_mutineer), 0)
var/list/mutiny_crew = mutineers - head_mutineer
if(mutiny_crew.len)
- txt += check_role_table("Mutineers", mutiny_crew, admins, 0)
+ txt += admins.check_role_table("Mutineers", mutiny_crew, 0)
if(body_count.len)
- txt += check_role_table("Casualties", body_count, admins, 0)
+ txt += admins.check_role_table("Casualties", body_count, 0)
return txt
diff --git a/code/game/jobs/job/security.dm b/code/game/jobs/job/security.dm
index cc8caa6284e..3b13ceb6b64 100644
--- a/code/game/jobs/job/security.dm
+++ b/code/game/jobs/job/security.dm
@@ -249,7 +249,7 @@
H.equip_or_collect(new /obj/item/clothing/shoes/jackboots(H), slot_shoes)
H.equip_or_collect(new /obj/item/device/pda/security(H), slot_wear_pda)
H.equip_or_collect(new /obj/item/clothing/gloves/color/black(H), slot_gloves)
- H.equip_or_collect(new /obj/item/weapon/gun/energy/advtaser(H), slot_belt)
+ H.equip_or_collect(new /obj/item/weapon/gun/energy/advtaser(H), slot_s_store)
H.equip_or_collect(new /obj/item/device/flash(H), slot_l_store)
if(H.backbag == 1)
H.equip_or_collect(new /obj/item/weapon/storage/box/survival(H), slot_r_hand)
diff --git a/code/game/objects/items/devices/radio/radio.dm b/code/game/objects/items/devices/radio/radio.dm
index ae8c888831d..415f604758a 100644
--- a/code/game/objects/items/devices/radio/radio.dm
+++ b/code/game/objects/items/devices/radio/radio.dm
@@ -234,7 +234,7 @@ var/global/list/default_medbay_channels = list(
add_fingerprint(usr)
-/obj/item/device/radio/proc/autosay(var/message, var/from, var/channel, var/zlevel = config.contact_levels) //BS12 EDIT
+/obj/item/device/radio/proc/autosay(var/message, var/from, var/channel, var/zlevel = config.contact_levels, var/role = "Unknown") //BS12 EDIT
var/datum/radio_frequency/connection = null
if(channel && channels && channels.len > 0)
if (channel == "department")
@@ -248,9 +248,9 @@ var/global/list/default_medbay_channels = list(
return
if (!connection)
return
-
- var/mob/living/silicon/ai/A = new /mob/living/silicon/ai(src, null, null, 1)
- A.rename_character(A.real_name, from)
+ var/mob/living/automatedannouncer/A = new /mob/living/automatedannouncer(src)
+ A.name = from
+ A.role = role
Broadcast_Message(connection, A,
0, "*garbled automated announcement*", src,
message, from, "Automated Announcement", from, "synthesized voice",
@@ -258,6 +258,12 @@ var/global/list/default_medbay_channels = list(
qdel(A)
return
+// Just a dummy mob used for making announcements, so we don't create AIs to do this
+// I'm not sure who thought that was a good idea. -- Crazylemon
+/mob/living/automatedannouncer
+ var/role = ""
+ universal_speak = 1
+
// Interprets the message mode when talking into a radio, possibly returning a connection datum
/obj/item/device/radio/proc/handle_message_mode(mob/living/M as mob, message, message_mode)
// If a channel isn't specified, send to common.
diff --git a/code/game/objects/items/weapons/lighters.dm b/code/game/objects/items/weapons/lighters.dm
index 3f19d6a494b..27f103177c8 100644
--- a/code/game/objects/items/weapons/lighters.dm
+++ b/code/game/objects/items/weapons/lighters.dm
@@ -46,7 +46,13 @@
user.visible_message("After a few attempts, [user] manages to light the [src].")
else
to_chat(user, "You burn yourself while lighting the lighter.")
- user.adjustFireLoss(5)
+ var/mob/living/M = user
+ if(ishuman(M))
+ var/mob/living/carbon/human/H = M
+ var/obj/item/organ/external/affecting = H.get_organ("[user.hand ? "l" : "r" ]_hand")
+ if(affecting.take_damage( 0, 5 )) //INFERNO
+ H.UpdateDamageIcon()
+ H.updatehealth()
user.visible_message("After a few attempts, [user] manages to light the [src], they however burn their finger in the process.")
set_light(2)
diff --git a/code/modules/admin/player_panel.dm b/code/modules/admin/player_panel.dm
index 766cee622a0..3802c7c7432 100644
--- a/code/modules/admin/player_panel.dm
+++ b/code/modules/admin/player_panel.dm
@@ -394,7 +394,7 @@
-/proc/check_antagonists_line(mob/M, caption = "", close = 1)
+/datum/admins/proc/check_antagonists_line(mob/M, caption = "", close = 1)
var/logout_status
if(istype(M, /mob/living/carbon/human/interactive))
logout_status = " (snpc)"
@@ -483,52 +483,52 @@
dat += ""
if(ticker.mode.changelings.len)
- dat += check_role_table("Changelings", ticker.mode.changelings, src)
+ dat += check_role_table("Changelings", ticker.mode.changelings)
if(ticker.mode.wizards.len)
- dat += check_role_table("Wizards", ticker.mode.wizards, src)
+ dat += check_role_table("Wizards", ticker.mode.wizards)
if(ticker.mode.raiders.len)
- dat += check_role_table("Raiders", ticker.mode.raiders, src)
+ dat += check_role_table("Raiders", ticker.mode.raiders)
/*if(ticker.mode.ninjas.len)
- dat += check_role_table("Ninjas", ticker.mode.ninjas, src)*/
+ dat += check_role_table("Ninjas", ticker.mode.ninjas)*/
if(ticker.mode.cult.len)
- dat += check_role_table("Cultists", ticker.mode.cult, src, 0)
+ dat += check_role_table("Cultists", ticker.mode.cult, 0)
if(ticker.mode.traitors.len)
- dat += check_role_table("Traitors", ticker.mode.traitors, src)
+ dat += check_role_table("Traitors", ticker.mode.traitors)
if(ticker.mode.shadows.len)
- dat += check_role_table("Shadowlings", ticker.mode.shadows, src)
+ dat += check_role_table("Shadowlings", ticker.mode.shadows)
if(ticker.mode.shadowling_thralls.len)
- dat += check_role_table("Shadowling Thralls", ticker.mode.shadowling_thralls, src)
+ dat += check_role_table("Shadowling Thralls", ticker.mode.shadowling_thralls)
if(ticker.mode.abductors.len)
- dat += check_role_table("Abductors", ticker.mode.abductors, src)
+ dat += check_role_table("Abductors", ticker.mode.abductors)
if(ticker.mode.abductees.len)
- dat += check_role_table("Abductees", ticker.mode.abductees, src)
+ dat += check_role_table("Abductees", ticker.mode.abductees)
if(ticker.mode.vampires.len)
- dat += check_role_table("Vampires", ticker.mode.vampires, src)
+ dat += check_role_table("Vampires", ticker.mode.vampires)
if(ticker.mode.vampire_enthralled.len)
- dat += check_role_table("Vampire Thralls", ticker.mode.vampire_enthralled, src)
+ dat += check_role_table("Vampire Thralls", ticker.mode.vampire_enthralled)
if(ticker.mode.xenos.len)
- dat += check_role_table("Xenos", ticker.mode.xenos, src)
+ dat += check_role_table("Xenos", ticker.mode.xenos)
if(ticker.mode.superheroes.len)
- dat += check_role_table("Superheroes", ticker.mode.superheroes, src)
+ dat += check_role_table("Superheroes", ticker.mode.superheroes)
if(ticker.mode.supervillains.len)
- dat += check_role_table("Supervillains", ticker.mode.supervillains, src)
+ dat += check_role_table("Supervillains", ticker.mode.supervillains)
if(ticker.mode.greyshirts.len)
- dat += check_role_table("Greyshirts", ticker.mode.greyshirts, src)
+ dat += check_role_table("Greyshirts", ticker.mode.greyshirts)
var/datum/game_mode/mutiny/mutiny = get_mutiny_mode()
if(mutiny)
@@ -539,14 +539,14 @@
else
alert("The game hasn't started yet!")
-/proc/check_role_table(name, list/members, admins, show_objectives=1)
+/datum/admins/proc/check_role_table(name, list/members, show_objectives=1)
var/txt = "
| [name] | |
"
for(var/datum/mind/M in members)
- txt += check_role_table_row(M.current, admins, show_objectives)
+ txt += check_role_table_row(M.current, show_objectives)
txt += "
"
return txt
-/proc/check_role_table_row(mob/M, admins=src, show_objectives)
+/datum/admins/proc/check_role_table_row(mob/M, show_objectives)
if (!istype(M))
return "| Not found! |
"
@@ -555,7 +555,7 @@
if (show_objectives)
txt += {"
- Show Objective
+ Show Objective
|
"}
diff --git a/code/modules/client/client procs.dm b/code/modules/client/client procs.dm
index 57b7487cbe5..9575002bc88 100644
--- a/code/modules/client/client procs.dm
+++ b/code/modules/client/client procs.dm
@@ -183,6 +183,13 @@
else
src.DB_species_unlock("Plasmaman",100)
return
+ if("7")
+ if(karma <30)
+ to_chat(usr, "You do not have enough karma!")
+ return
+ else
+ src.DB_species_unlock("Drask",30)
+ return
if(href_list["KarmaRefund"])
var/type = href_list["KarmaRefundType"]
var/job = href_list["KarmaRefund"]
diff --git a/code/modules/client/preferences.dm b/code/modules/client/preferences.dm
index 3ece1b8f059..e53af9a5014 100644
--- a/code/modules/client/preferences.dm
+++ b/code/modules/client/preferences.dm
@@ -251,7 +251,7 @@ var/global/list/special_role_times = list( //minimum age (in days) for accounts
dat += "N2 Tank: [speciesprefs ? "Large N2 Tank" : "Specialized N2 Tank"]
"
dat += "Secondary Language:
[language]
"
dat += "Blood Type: [b_type]
"
- if(species == "Human")
+ if(species in list("Human", "Drask"))
dat += "Skin Tone: [-s_tone + 35]/220
"
// dat += "Skin pattern: Adjust
"
@@ -1038,7 +1038,7 @@ var/global/list/special_role_times = list( //minimum age (in days) for accounts
g_eyes = rand(0,255)
b_eyes = rand(0,255)
if("s_tone")
- if(species == "Human")
+ if(species in list("Human", "Drask"))
s_tone = random_skin_tone()
if("s_color")
if(species in list("Unathi", "Tajaran", "Skrell", "Slime People", "Wyrn", "Vulpkanin", "Machine"))
@@ -1395,7 +1395,7 @@ var/global/list/special_role_times = list( //minimum age (in days) for accounts
b_eyes = hex2num(copytext(new_eyes, 6, 8))
if("s_tone")
- if(species != "Human")
+ if(species != "Human" && species != "Drask")
return
var/new_s_tone = input(user, "Choose your character's skin-tone:\n(Light 1 - 220 Dark)", "Character Preference") as num|null
if(new_s_tone)
diff --git a/code/modules/clothing/clothing.dm b/code/modules/clothing/clothing.dm
index 369a8543691..04f0f3ed42d 100644
--- a/code/modules/clothing/clothing.dm
+++ b/code/modules/clothing/clothing.dm
@@ -60,7 +60,7 @@
//Set species_restricted list
switch(target_species)
if("Human", "Skrell") //humanoid bodytypes
- species_restricted = list("exclude","Unathi","Tajaran","Diona","Vox","Wryn")
+ species_restricted = list("exclude","Unathi","Tajaran","Diona","Vox","Wryn","Drask")
else
species_restricted = list(target_species)
@@ -184,7 +184,8 @@ BLIND // can't see anything
species_restricted = list("exclude","Unathi","Tajaran","Wryn")
species_fit = list("Vox")
sprite_sheets = list(
- "Vox" = 'icons/mob/species/vox/gloves.dmi'
+ "Vox" = 'icons/mob/species/vox/gloves.dmi',
+ "Drask" = 'icons/mob/species/drask/gloves.dmi'
)
/obj/item/clothing/gloves/attackby(obj/item/weapon/W, mob/user, params)
@@ -562,7 +563,8 @@ BLIND // can't see anything
armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 0)
species_fit = list("Vox")
sprite_sheets = list(
- "Vox" = 'icons/mob/species/vox/uniform.dmi'
+ "Vox" = 'icons/mob/species/vox/uniform.dmi',
+ "Drask" = 'icons/mob/species/drask/uniform.dmi'
)
var/has_sensor = 1//For the crew computer 2 = unable to change mode
var/sensor_mode = 0
diff --git a/code/modules/clothing/glasses/glasses.dm b/code/modules/clothing/glasses/glasses.dm
index eaf5df014df..1654198d9c9 100644
--- a/code/modules/clothing/glasses/glasses.dm
+++ b/code/modules/clothing/glasses/glasses.dm
@@ -54,7 +54,8 @@
species_fit = list("Vox")
see_darkness = 0 //don't render darkness while wearing mesons
sprite_sheets = list(
- "Vox" = 'icons/mob/species/vox/eyes.dmi'
+ "Vox" = 'icons/mob/species/vox/eyes.dmi',
+ "Drask" = 'icons/mob/species/drask/eyes.dmi'
)
/obj/item/clothing/glasses/meson/night
@@ -130,7 +131,8 @@
see_darkness = 0
species_fit = list("Vox")
sprite_sheets = list(
- "Vox" = 'icons/mob/species/vox/eyes.dmi'
+ "Vox" = 'icons/mob/species/vox/eyes.dmi',
+ "Drask" = 'icons/mob/species/drask/eyes.dmi'
)
/obj/item/clothing/glasses/eyepatch
@@ -146,7 +148,8 @@
item_state = "headset" // lol
species_fit = list("Vox")
sprite_sheets = list(
- "Vox" = 'icons/mob/species/vox/eyes.dmi'
+ "Vox" = 'icons/mob/species/vox/eyes.dmi',
+ "Drask" = 'icons/mob/species/drask/eyes.dmi'
)
/obj/item/clothing/glasses/material
@@ -158,7 +161,8 @@
vision_flags = SEE_OBJS
species_fit = list("Vox")
sprite_sheets = list(
- "Vox" = 'icons/mob/species/vox/eyes.dmi'
+ "Vox" = 'icons/mob/species/vox/eyes.dmi',
+ "Drask" = 'icons/mob/species/drask/eyes.dmi'
)
/obj/item/clothing/glasses/material/cyber
@@ -204,7 +208,8 @@
prescription_upgradable = 1
species_fit = list("Vox")
sprite_sheets = list(
- "Vox" = 'icons/mob/species/vox/eyes.dmi'
+ "Vox" = 'icons/mob/species/vox/eyes.dmi',
+ "Drask" = 'icons/mob/species/drask/eyes.dmi'
)
@@ -282,7 +287,8 @@
tint = 1
species_fit = list("Vox")
sprite_sheets = list(
- "Vox" = 'icons/mob/species/vox/eyes.dmi'
+ "Vox" = 'icons/mob/species/vox/eyes.dmi',
+ "Drask" = 'icons/mob/species/drask/eyes.dmi'
)
/obj/item/clothing/glasses/sunglasses/lasers
@@ -306,7 +312,8 @@
tint = 2
species_fit = list("Vox")
sprite_sheets = list(
- "Vox" = 'icons/mob/species/vox/eyes.dmi'
+ "Vox" = 'icons/mob/species/vox/eyes.dmi',
+ "Drask" = 'icons/mob/species/drask/eyes.dmi'
)
/obj/item/clothing/glasses/welding/attack_self()
diff --git a/code/modules/clothing/glasses/hud.dm b/code/modules/clothing/glasses/hud.dm
index a8c4c639491..44138b8e907 100644
--- a/code/modules/clothing/glasses/hud.dm
+++ b/code/modules/clothing/glasses/hud.dm
@@ -103,7 +103,8 @@
prescription_upgradable = 1
species_fit = list("Vox")
sprite_sheets = list(
- "Vox" = 'icons/mob/species/vox/eyes.dmi'
+ "Vox" = 'icons/mob/species/vox/eyes.dmi',
+ "Drask" = 'icons/mob/species/drask/eyes.dmi'
)
/obj/item/clothing/glasses/hud/security/sunglasses/prescription
diff --git a/code/modules/clothing/head/helmet.dm b/code/modules/clothing/head/helmet.dm
index eb38be7395d..b1b015e6ecb 100644
--- a/code/modules/clothing/head/helmet.dm
+++ b/code/modules/clothing/head/helmet.dm
@@ -13,7 +13,8 @@
strip_delay = 60
species_fit = list("Vox")
sprite_sheets = list(
- "Vox" = 'icons/mob/species/vox/helmet.dmi'
+ "Vox" = 'icons/mob/species/vox/helmet.dmi',
+ "Drask" = 'icons/mob/species/drask/helmet.dmi'
)
/obj/item/clothing/head/helmet/attack_self(mob/user)
@@ -71,7 +72,8 @@
armor = list(melee = 25, bullet = 80, laser = 10, energy = 10, bomb = 40, bio = 0, rad = 0)
species_fit = list("Vox")
sprite_sheets = list(
- "Vox" = 'icons/mob/species/vox/helmet.dmi'
+ "Vox" = 'icons/mob/species/vox/helmet.dmi',
+ "Drask" = 'icons/mob/species/drask/helmet.dmi'
)
/obj/item/clothing/head/helmet/riot
@@ -118,7 +120,8 @@
strip_delay = 80
species_fit = list("Vox")
sprite_sheets = list(
- "Vox" = 'icons/mob/species/vox/head.dmi'
+ "Vox" = 'icons/mob/species/vox/head.dmi',
+ "Drask" = 'icons/mob/species/drask/helmet.dmi'
)
/obj/item/clothing/head/helmet/swat/syndicate
diff --git a/code/modules/clothing/masks/boxing.dm b/code/modules/clothing/masks/boxing.dm
index d12bac1d3b8..66e97d714d8 100644
--- a/code/modules/clothing/masks/boxing.dm
+++ b/code/modules/clothing/masks/boxing.dm
@@ -14,7 +14,8 @@
"Vox" = 'icons/mob/species/vox/mask.dmi',
"Unathi" = 'icons/mob/species/unathi/mask.dmi',
"Tajaran" = 'icons/mob/species/tajaran/mask.dmi',
- "Vulpkanin" = 'icons/mob/species/vulpkanin/mask.dmi'
+ "Vulpkanin" = 'icons/mob/species/vulpkanin/mask.dmi',
+ "Drask" = 'icons/mob/species/drask/mask.dmi'
)
/obj/item/clothing/mask/balaclava/attack_self(var/mob/user)
@@ -33,7 +34,8 @@
"Vox" = 'icons/mob/species/vox/mask.dmi',
"Unathi" = 'icons/mob/species/unathi/mask.dmi',
"Tajaran" = 'icons/mob/species/tajaran/mask.dmi',
- "Vulpkanin" = 'icons/mob/species/vulpkanin/mask.dmi'
+ "Vulpkanin" = 'icons/mob/species/vulpkanin/mask.dmi',
+ "Drask" = 'icons/mob/species/drask/mask.dmi'
)
/obj/item/clothing/mask/luchador/tecnicos
diff --git a/code/modules/clothing/masks/breath.dm b/code/modules/clothing/masks/breath.dm
index a9af66abd16..40811397187 100644
--- a/code/modules/clothing/masks/breath.dm
+++ b/code/modules/clothing/masks/breath.dm
@@ -15,7 +15,8 @@
"Vox Armalis" = 'icons/mob/species/armalis/mask.dmi',
"Unathi" = 'icons/mob/species/unathi/mask.dmi',
"Tajaran" = 'icons/mob/species/tajaran/mask.dmi',
- "Vulpkanin" = 'icons/mob/species/vulpkanin/mask.dmi'
+ "Vulpkanin" = 'icons/mob/species/vulpkanin/mask.dmi',
+ "Drask" = 'icons/mob/species/drask/mask.dmi'
)
/obj/item/clothing/mask/breath/attack_self(var/mob/user)
diff --git a/code/modules/clothing/masks/gasmask.dm b/code/modules/clothing/masks/gasmask.dm
index b13c2968f34..6f6d0f03446 100644
--- a/code/modules/clothing/masks/gasmask.dm
+++ b/code/modules/clothing/masks/gasmask.dm
@@ -13,7 +13,8 @@
"Vox" = 'icons/mob/species/vox/mask.dmi',
"Unathi" = 'icons/mob/species/unathi/mask.dmi',
"Tajaran" = 'icons/mob/species/tajaran/mask.dmi',
- "Vulpkanin" = 'icons/mob/species/vulpkanin/mask.dmi'
+ "Vulpkanin" = 'icons/mob/species/vulpkanin/mask.dmi',
+ "Drask" = 'icons/mob/species/drask/mask.dmi'
)
// **** Welding gas mask ****
diff --git a/code/modules/clothing/spacesuits/miscellaneous.dm b/code/modules/clothing/spacesuits/miscellaneous.dm
index 7d59f828643..aab36bb04cb 100644
--- a/code/modules/clothing/spacesuits/miscellaneous.dm
+++ b/code/modules/clothing/spacesuits/miscellaneous.dm
@@ -10,7 +10,8 @@
species_restricted = list("exclude", "Diona", "Wryn")
species_fit = list("Vox")
sprite_sheets = list(
- "Vox" = 'icons/mob/species/vox/helmet.dmi'
+ "Vox" = 'icons/mob/species/vox/helmet.dmi',
+ "Drask" = 'icons/mob/species/drask/helmet.dmi'
)
/obj/item/clothing/head/helmet/space/capspace/equipped(var/mob/living/carbon/human/user, var/slot)
if (ishuman(user) && user.species.name == "Vox")
@@ -30,7 +31,8 @@
species_restricted = list("exclude", "Diona", "Wryn")
species_fit = list("Vox")
sprite_sheets = list(
- "Vox" = 'icons/mob/species/vox/suit.dmi'
+ "Vox" = 'icons/mob/species/vox/suit.dmi',
+ "Drask" = 'icons/mob/species/drask/suit.dmi'
)
diff --git a/code/modules/clothing/spacesuits/plasmamen.dm b/code/modules/clothing/spacesuits/plasmamen.dm
index 8e3fdefbb65..fd4122c56ec 100644
--- a/code/modules/clothing/spacesuits/plasmamen.dm
+++ b/code/modules/clothing/spacesuits/plasmamen.dm
@@ -251,6 +251,15 @@
icon_state = "plasmaman_RD_helmet0"
base_state = "plasmaman_RD_helmet"
+//MAGISTRATE
+/obj/item/clothing/suit/space/eva/plasmaman/magistrate
+ name = "plasmaman magistrate suit"
+ icon_state = "plasmaman_HoS"
+
+/obj/item/clothing/head/helmet/space/eva/plasmaman/magistrate
+ name = "plasmaman magistrate helmet"
+ icon_state = "plasmaman_HoS_helmet0"
+ base_state = "plasmaman_HoS_helmet"
//SECURITY
diff --git a/code/modules/clothing/spacesuits/rig.dm b/code/modules/clothing/spacesuits/rig.dm
index 72a32c1e0cb..ce73bb13a24 100644
--- a/code/modules/clothing/spacesuits/rig.dm
+++ b/code/modules/clothing/spacesuits/rig.dm
@@ -20,6 +20,7 @@
"Skrell" = 'icons/mob/species/skrell/helmet.dmi',
"Vox" = 'icons/mob/species/vox/helmet.dmi',
"Vulpkanin" = 'icons/mob/species/vulpkanin/helmet.dmi',
+ "Drask" = 'icons/mob/species/drask/helmet.dmi'
)
sprite_sheets_obj = list(
"Unathi" = 'icons/obj/clothing/species/unathi/hats.dmi',
@@ -66,6 +67,7 @@
"Skrell" = 'icons/mob/species/skrell/suit.dmi',
"Vox" = 'icons/mob/species/vox/suit.dmi',
"Vulpkanin" = 'icons/mob/species/vulpkanin/suit.dmi',
+ "Drask" = 'icons/mob/species/drask/suit.dmi'
)
sprite_sheets_obj = list(
"Unathi" = 'icons/obj/clothing/species/unathi/suits.dmi',
diff --git a/code/modules/clothing/under/accessories/holster.dm b/code/modules/clothing/under/accessories/holster.dm
index 2a4bb7634e5..cc0e47a9563 100644
--- a/code/modules/clothing/under/accessories/holster.dm
+++ b/code/modules/clothing/under/accessories/holster.dm
@@ -30,15 +30,19 @@
to_chat(user, "There is already a [holstered] holstered here!")
return
- if (!istype(I, /obj/item/weapon/gun))
+ if(!istype(I, /obj/item/weapon/gun))
to_chat(user, "Only guns can be holstered!")
return
var/obj/item/weapon/gun/W = I
- if (!can_holster(W))
+ if(!can_holster(W))
to_chat(user, "This [W] won't fit in the [src]!")
return
+ if(!user.canUnEquip(W, 0))
+ to_chat(user, "You can't let go of the [W]!")
+ return
+
holstered = W
user.unEquip(holstered)
holstered.loc = src
diff --git a/code/modules/karma/karma.dm b/code/modules/karma/karma.dm
index 12dedc60fba..9c40f005a21 100644
--- a/code/modules/karma/karma.dm
+++ b/code/modules/karma/karma.dm
@@ -198,6 +198,7 @@ You've gained [totalkarma] total karma in your time here.
"}
Unlock Machine People -- 15KP
Unlock Kidan -- 30KP
Unlock Grey -- 30KP
+ Unlock Drask -- 30KP
Unlock Vox -- 45KP
Unlock Slime People -- 45KP
Unlock Plasmaman -- 100KP
diff --git a/code/modules/mob/hear_say.dm b/code/modules/mob/hear_say.dm
index c3ca5a602c9..47004016a2b 100644
--- a/code/modules/mob/hear_say.dm
+++ b/code/modules/mob/hear_say.dm
@@ -151,6 +151,9 @@
jobname = "Cyborg"
else if (ispAI(speaker))
jobname = "Personal AI"
+ else if (isAutoAnnouncer(speaker))
+ var/mob/living/automatedannouncer/AA = speaker
+ jobname = AA.role
else
jobname = "Unknown"
diff --git a/code/modules/mob/language.dm b/code/modules/mob/language.dm
index 8998f39ea27..c88684c77c0 100644
--- a/code/modules/mob/language.dm
+++ b/code/modules/mob/language.dm
@@ -276,6 +276,23 @@
flags = RESTRICTED | WHITELISTED
syllables = list("blob","plop","pop","bop","boop")
+/datum/language/drask
+ name = "Orluum"
+ desc = "The droning, vibrous language of the Drask. It sounds somewhat like whalesong"
+ speech_verb = "drones"
+ ask_verb = "hums"
+ exclaim_verb = "rumbles"
+ colour = "drask"
+ key = "%"
+ flags = RESTRICTED | WHITELISTED
+ syllables = list("hoorb","vrrm","ooorm","urrrum","ooum","ee","ffm","hhh","mn","ongg")
+
+/datum/language/drask/get_random_name()
+ var/new_name = "[pick(list("Hoorm","Viisk","Saar","Mnoo","Oumn","Fmong","Gnii","Vrrm","Oorm","Dromnn","Ssooumn","Ovv", "Hoorb","Vaar","Gaar","Goom","Ruum","Rumum"))]"
+ new_name += "-[pick(list("Hoorm","Viisk","Saar","Mnoo","Oumn","Fmong","Gnii","Vrrm","Oorm","Dromnn","Ssooumn","Ovv", "Hoorb","Vaar","Gaar","Goom","Ruum","Rumum"))]"
+ new_name += "-[pick(list("Hoorm","Viisk","Saar","Mnoo","Oumn","Fmong","Gnii","Vrrm","Oorm","Dromnn","Ssooumn","Ovv", "Hoorb","Vaar","Gaar","Goom","Ruum","Rumum"))]"
+ return new_name
+
/datum/language/common
name = "Galactic Common"
desc = "The common galactic tongue."
diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm
index 40fd94c4052..3e5cb90f380 100644
--- a/code/modules/mob/living/carbon/human/human.dm
+++ b/code/modules/mob/living/carbon/human/human.dm
@@ -144,6 +144,10 @@
h_style = "Nucleation Crystals"
..(new_loc, "Nucleation")
+/mob/living/carbon/human/drask/New(var/new_loc)
+ h_style = "Bald"
+ ..(new_loc, "Drask")
+
/mob/living/carbon/human/monkey/New(var/new_loc)
..(new_loc, "Monkey")
diff --git a/code/modules/mob/living/carbon/human/species/drask.dm b/code/modules/mob/living/carbon/human/species/drask.dm
new file mode 100644
index 00000000000..87f2c287dbe
--- /dev/null
+++ b/code/modules/mob/living/carbon/human/species/drask.dm
@@ -0,0 +1,99 @@
+/datum/species/drask
+ name = "Drask"
+ name_plural = "Drask"
+ icobase = 'icons/mob/human_races/r_drask.dmi'
+ deform = 'icons/mob/human_races/r_drask.dmi'
+ path = /mob/living/carbon/human/drask
+ default_language = "Galactic Common"
+ language = "Orluum"
+ unarmed_type = /datum/unarmed_attack/punch
+ eyes = "drask_eyes_s"
+ darksight = 5
+
+ speech_sounds = list('sound/voice/DraskTalk.ogg')
+ speech_chance = 20
+ male_scream_sound = 'sound/voice/DraskTalk2.ogg'
+ female_scream_sound = 'sound/voice/DraskTalk2.ogg'
+
+ burn_mod = 2
+ //exotic_blood = "cryoxadone"
+ body_temperature = 273
+
+ blurb = "Hailing from Hoorlm, planet outside what is usually considered a habitable \
+ orbit, the Drask evolved to live in extreme cold. Their strange bodies seem \
+ to operate better the colder their surroundings are, and can regenerate rapidly \
+ when breathing supercooled gas.
On their homeworld, the Drask live long lives \
+ in their labyrinthine settlements, carved out beneath Hoorlm's icy surface, where the air \
+ is of breathable density."
+
+ suicide_messages = list(
+ "is self-warming with friction!",
+ "is jamming fingers through their big eyes!",
+ "is sucking in warm air!",
+ "is holding their breath!")
+
+ flags = IS_WHITELISTED | HAS_LIPS
+ clothing_flags = HAS_UNDERWEAR | HAS_UNDERSHIRT
+ bodyflags = FEET_CLAWS | HAS_SKIN_TONE
+ dietflags = DIET_OMNI
+
+ cold_level_1 = -1 //Default 260 - Lower is better
+ cold_level_2 = -1 //Default 200
+ cold_level_3 = -1 //Default 120
+ cold_env_multiplier = -1
+
+ heat_level_1 = 300 //Default 360 - Higher is better
+ heat_level_2 = 340 //Default 400
+ heat_level_3 = 400 //Default 460
+ heat_level_3_breathe = 600 //Default 1000
+ hot_env_multiplier = 2
+
+ flesh_color = "#a3d4eb"
+ reagent_tag = PROCESS_ORG
+ base_color = "#a3d4eb"
+ blood_color = "#a3d4eb"
+
+ has_organ = list(
+ "heart" = /obj/item/organ/internal/heart/drask,
+ "lungs" = /obj/item/organ/internal/lungs/drask,
+ "metabolic strainer" = /obj/item/organ/internal/liver/drask,
+ "eyes" = /obj/item/organ/internal/eyes/drask,
+ "brain" = /obj/item/organ/internal/brain/drask
+ )
+
+
+/datum/species/drask/handle_temperature(datum/gas_mixture/breath, var/mob/living/carbon/human/H)
+ if( abs(310.15 - breath.temperature) > 50)
+ if(H.status_flags & GODMODE) return 1 //godmode
+ if(breath.temperature < 260)
+ if(prob(20))
+ to_chat(H, " You feel an invigorating coldness in your lungs!")
+ if(breath.temperature > heat_level_1)
+ if(prob(20))
+ to_chat(H, "You feel your face burning and a searing heat in your lungs!")
+
+ switch(breath.temperature)
+
+ if(-INFINITY to 60)
+ H.adjustFireLoss(cold_env_multiplier*COLD_GAS_DAMAGE_LEVEL_3*0.5) //3 points healed, applied every 4 ticks
+ H.adjustBruteLoss(cold_env_multiplier*COLD_GAS_DAMAGE_LEVEL_3)
+ H.throw_alert("temp", /obj/screen/alert/cold/drask, 3)
+
+ if(61 to 200)
+ H.adjustFireLoss(cold_env_multiplier*COLD_GAS_DAMAGE_LEVEL_2*0.5) //1.5 healed every 4 ticks
+ H.adjustBruteLoss(cold_env_multiplier*COLD_GAS_DAMAGE_LEVEL_2)
+ H.throw_alert("temp", /obj/screen/alert/cold/drask, 2)
+
+ if(201 to 260)
+ H.adjustFireLoss(cold_env_multiplier*COLD_GAS_DAMAGE_LEVEL_1*0.5) //0.5 healed every 4 ticks
+ H.adjustBruteLoss(cold_env_multiplier*COLD_GAS_DAMAGE_LEVEL_1)
+ H.throw_alert("temp", /obj/screen/alert/cold/drask, 1)
+
+ if(heat_level_1 to heat_level_2)
+ H.apply_damage(hot_env_multiplier*HEAT_GAS_DAMAGE_LEVEL_1, BURN, "head", used_weapon = "Excessive Heat")
+
+ if(heat_level_2 to heat_level_3_breathe)
+ H.apply_damage(hot_env_multiplier*HEAT_GAS_DAMAGE_LEVEL_2, BURN, "head", used_weapon = "Excessive Heat")
+
+ if(heat_level_3_breathe to INFINITY)
+ H.apply_damage(hot_env_multiplier*HEAT_GAS_DAMAGE_LEVEL_3, BURN, "head", used_weapon = "Excessive Heat")
diff --git a/code/modules/mob/living/carbon/human/species/plasmaman.dm b/code/modules/mob/living/carbon/human/species/plasmaman.dm
index 76c06871250..d85da69017b 100644
--- a/code/modules/mob/living/carbon/human/species/plasmaman.dm
+++ b/code/modules/mob/living/carbon/human/species/plasmaman.dm
@@ -58,12 +58,20 @@
if("Life Support Specialist")
suit=/obj/item/clothing/suit/space/eva/plasmaman/atmostech
helm=/obj/item/clothing/head/helmet/space/eva/plasmaman/atmostech
- if("Warden","Detective","Security Officer","Security Pod Pilot")
+ if("Detective")
suit=/obj/item/clothing/suit/space/eva/plasmaman/security/
helm=/obj/item/clothing/head/helmet/space/eva/plasmaman/security/
- if("Head of Security", "Magistrate")
+ if("Warden","Security Officer","Security Pod Pilot")
+ suit=/obj/item/clothing/suit/space/eva/plasmaman/security/
+ helm=/obj/item/clothing/head/helmet/space/eva/plasmaman/security/
+ H.equip_or_collect(new /obj/item/weapon/gun/energy/advtaser(H), slot_in_backpack)
+ if("Magistrate")
+ suit=/obj/item/clothing/suit/space/eva/plasmaman/magistrate
+ helm=/obj/item/clothing/head/helmet/space/eva/plasmaman/magistrate
+ if("Head of Security")
suit=/obj/item/clothing/suit/space/eva/plasmaman/security/hos
helm=/obj/item/clothing/head/helmet/space/eva/plasmaman/security/hos
+ H.equip_or_collect(new /obj/item/weapon/gun/energy/gun(H), slot_in_backpack)
if("Captain", "Blueshield")
suit=/obj/item/clothing/suit/space/eva/plasmaman/security/captain
helm=/obj/item/clothing/head/helmet/space/eva/plasmaman/security/captain
@@ -73,6 +81,7 @@
if("Medical Doctor","Brig Physician")
suit=/obj/item/clothing/suit/space/eva/plasmaman/medical
helm=/obj/item/clothing/head/helmet/space/eva/plasmaman/medical
+ H.equip_or_collect(new /obj/item/device/flashlight/pen(H), slot_in_backpack)
if("Paramedic")
suit=/obj/item/clothing/suit/space/eva/plasmaman/medical/paramedic
helm=/obj/item/clothing/head/helmet/space/eva/plasmaman/medical/paramedic
diff --git a/code/modules/mob/living/silicon/ai/ai.dm b/code/modules/mob/living/silicon/ai/ai.dm
index cda2873664e..272834e0328 100644
--- a/code/modules/mob/living/silicon/ai/ai.dm
+++ b/code/modules/mob/living/silicon/ai/ai.dm
@@ -168,6 +168,7 @@ var/list/ai_verbs_default = list(
add_language("Canilunzt", 0)
add_language("Skrellian", 0)
add_language("Vox-pidgin", 0)
+ add_language("Orluum", 0)
add_language("Rootspeak", 0)
add_language("Trinary", 1)
add_language("Chittin", 0)
diff --git a/code/modules/mob/living/silicon/pai/software_modules.dm b/code/modules/mob/living/silicon/pai/software_modules.dm
index 9019a61b206..5d5f335391d 100644
--- a/code/modules/mob/living/silicon/pai/software_modules.dm
+++ b/code/modules/mob/living/silicon/pai/software_modules.dm
@@ -627,6 +627,7 @@
user.add_language("Rootspeak")
user.add_language("Chittin")
user.add_language("Bubblish")
+ user.add_language("Orluum")
user.add_language("Clownish")
else
user.remove_language("Sinta'unathi")
@@ -637,6 +638,7 @@
user.remove_language("Rootspeak")
user.remove_language("Chittin")
user.remove_language("Bubblish")
+ user.remove_language("Orluum")
user.remove_language("Clownish")
is_active(mob/living/silicon/pai/user)
diff --git a/code/modules/mob/living/silicon/robot/robot_modules.dm b/code/modules/mob/living/silicon/robot/robot_modules.dm
index 9b4587ae128..12030e52773 100644
--- a/code/modules/mob/living/silicon/robot/robot_modules.dm
+++ b/code/modules/mob/living/silicon/robot/robot_modules.dm
@@ -93,6 +93,7 @@
R.add_language("Trinary", 1)
R.add_language("Chittin", 0)
R.add_language("Bubblish", 0)
+ R.add_language("Orluum", 0)
R.add_language("Clownish",0)
/obj/item/weapon/robot_module/proc/add_subsystems(var/mob/living/silicon/robot/R)
diff --git a/code/modules/mob/mob_helpers.dm b/code/modules/mob/mob_helpers.dm
index 468a6cfe9df..de246f0f667 100644
--- a/code/modules/mob/mob_helpers.dm
+++ b/code/modules/mob/mob_helpers.dm
@@ -179,6 +179,11 @@ proc/isovermind(A)
return 1
return 0
+/proc/isAutoAnnouncer(A)
+ if(istype(A, /mob/living/automatedannouncer))
+ return 1
+ return 0
+
/proc/isorgan(A)
if(istype(A, /obj/item/organ/external))
return 1
diff --git a/code/modules/mob/new_player/preferences_setup.dm b/code/modules/mob/new_player/preferences_setup.dm
index 3bd2672d612..63567b0399c 100644
--- a/code/modules/mob/new_player/preferences_setup.dm
+++ b/code/modules/mob/new_player/preferences_setup.dm
@@ -8,7 +8,7 @@
underwear = random_underwear(gender, species)
undershirt = random_undershirt(gender, species)
socks = random_socks(gender, species)
- if(species == "Human")
+ if(species in list("Human", "Drask"))
s_tone = random_skin_tone()
h_style = random_hair_style(gender, species)
f_style = random_facial_hair_style(gender, species)
diff --git a/code/modules/paperwork/photocopier.dm b/code/modules/paperwork/photocopier.dm
index d6b4b6ad213..9cf13e22f1d 100644
--- a/code/modules/paperwork/photocopier.dm
+++ b/code/modules/paperwork/photocopier.dm
@@ -254,6 +254,8 @@
temp_img = icon('icons/obj/butts.dmi', "machine")
if("Plasmaman")
temp_img = icon('icons/obj/butts.dmi', "plasma")
+ if("Drask")
+ temp_img = icon('icons/obj/butts.dmi', "drask")
else
temp_img = icon('icons/obj/butts.dmi', "human")
else if(istype(ass,/mob/living/silicon/robot/drone))
diff --git a/code/modules/power/lighting.dm b/code/modules/power/lighting.dm
index 4cc08d08471..9cce0b5fa9d 100644
--- a/code/modules/power/lighting.dm
+++ b/code/modules/power/lighting.dm
@@ -433,56 +433,83 @@
if(status == LIGHT_EMPTY)
to_chat(user, "There is no [fitting] in this light.")
return
+ if(user.a_intent == "help")
+ if(on)
+ to_chat(user, "This light [fitting] feels hot!")
+ else
+ to_chat(user, "The light [fitting] feels cold.")
+ return
+
+ if(user.a_intent == "disarm" || user.a_intent == "grab") //trying to grab the bulb
// make it burn hands if not wearing fire-insulated gloves
- if(on)
- var/prot = 0
- var/mob/living/carbon/human/H = user
+ if(on)
+ var/prot = 0
+ var/mob/living/carbon/human/H = user
- if(istype(H))
+ if(istype(H))
- if(H.gloves)
- var/obj/item/clothing/gloves/G = H.gloves
- if(G.max_heat_protection_temperature)
- prot = (G.max_heat_protection_temperature > 360)
+ if(H.gloves)
+ var/obj/item/clothing/gloves/G = H.gloves
+ if(G.max_heat_protection_temperature)
+ prot = (G.max_heat_protection_temperature > 360)
+ else
+ prot = 1
+
+ if(prot > 0 || (RESIST_HEAT in user.mutations))
+ to_chat(user, "You remove the light [fitting]")
+ else if(TK in user.mutations)
+ to_chat(user, "You telekinetically remove the light [fitting].")
+ else
+ to_chat(user, "You try to remove the light [fitting], but you burn your hand on it!")
+
+ var/obj/item/organ/external/affecting = H.get_organ("[user.hand ? "l" : "r" ]_hand")
+ if(affecting.take_damage( 0, 5 )) // 5 burn damage
+ H.UpdateDamageIcon()
+ H.updatehealth()
+ return // if burned, don't remove the light
else
- prot = 1
-
- if(prot > 0 || (RESIST_HEAT in user.mutations))
- to_chat(user, "You remove the light [fitting]")
- else if(TK in user.mutations)
- to_chat(user, "You telekinetically remove the light [fitting].")
- else
- to_chat(user, "You try to remove the light [fitting], but you burn your hand on it!")
-
- var/obj/item/organ/external/affecting = H.get_organ("[user.hand ? "l" : "r" ]_hand")
- if(affecting.take_damage( 0, 5 )) // 5 burn damage
- H.UpdateDamageIcon()
- H.updatehealth()
- return // if burned, don't remove the light
- else
- to_chat(user, "You remove the light [fitting].")
+ to_chat(user, "You remove the light [fitting].")
- // create a light tube/bulb item and put it in the user's hand
- var/obj/item/weapon/light/L = new light_type()
- L.status = status
- L.rigged = rigged
- L.brightness_range = brightness_range
- L.brightness_power = brightness_power
- L.brightness_color = brightness_color
+ // create a light tube/bulb item and put it in the user's hand
+ var/obj/item/weapon/light/L = new light_type()
+ L.status = status
+ L.rigged = rigged
+ L.brightness_range = brightness_range
+ L.brightness_power = brightness_power
+ L.brightness_color = brightness_color
// light item inherits the switchcount, then zero it
- L.switchcount = switchcount
- switchcount = 0
+ L.switchcount = switchcount
+ switchcount = 0
- L.update()
- L.add_fingerprint(user)
+ L.update()
+ L.add_fingerprint(user)
- user.put_in_active_hand(L) //puts it in our active hand
+ user.put_in_active_hand(L) //puts it in our active hand
+
+ status = LIGHT_EMPTY
+ update()
+
+ if(user.a_intent == "harm") //hitting the bulb
+ user.changeNext_move(CLICK_CD_MELEE)
+ user.do_attack_animation(src)
+ if(prob(10)) //10% chance to break a light with bare hands
+ to_chat(user, "You hit the light, and it smashes!")
+ for(var/mob/M in viewers(src))
+ if(M == user)
+ continue
+ M.show_message("[user.name] smashed the light!", 3, "You hear a tinkle of breaking glass", 2)
+ if(on)
+ electrocute_mob(user, get_area(src), src, 0.3)
+ broken()
+ else
+ user.visible_message("[user.name] hits the light.")
+ playsound(src.loc, 'sound/effects/Glasshit.ogg', 75, 1)
+
+ return
- status = LIGHT_EMPTY
- update()
// break the light and make sparks if was on
diff --git a/code/modules/reagents/Chemistry-Machinery.dm b/code/modules/reagents/Chemistry-Machinery.dm
index 43bdd538125..68bcd9306d3 100644
--- a/code/modules/reagents/Chemistry-Machinery.dm
+++ b/code/modules/reagents/Chemistry-Machinery.dm
@@ -17,9 +17,9 @@
var/obj/item/weapon/reagent_containers/beaker = null
var/recharged = 0
var/hackedcheck = 0
- var/list/dispensable_reagents = list("hydrogen","lithium","carbon","nitrogen","oxygen","fluorine",
- "sodium","aluminum","silicon","phosphorus","sulfur","chlorine","potassium","iron",
- "copper","mercury","plasma","radium","water","ethanol","sugar","tungsten","iodine","bromine","silver")
+ var/list/dispensable_reagents = list("hydrogen", "lithium", "carbon", "nitrogen", "oxygen", "fluorine",
+ "sodium", "aluminum", "silicon", "phosphorus", "sulfur", "chlorine", "potassium", "iron",
+ "copper", "mercury", "plasma", "radium", "water", "ethanol", "sugar", "tungsten", "iodine", "bromine", "silver")
var/list/hacked_reagents = list("toxin")
var/hack_message = "You disable the safety safeguards, enabling the \"Mad Scientist\" mode."
var/unhack_message = "You re-enable the safety safeguards, enabling the \"NT Standard\" mode."
@@ -266,7 +266,9 @@
ui_title = "Soda Dispens-o-matic"
energy = 100
max_energy = 100
- dispensable_reagents = list("water","ice", "milk", "soymilk", "coffee","tea","hot_coco", "cola","spacemountainwind","dr_gibb","space_up","tonic","sodawater","lemon_lime", "grapejuice","sugar","orangejuice", "lemonjuice", "limejuice","tomatojuice", "banana", "watermelonjuice", "carrotjuice", "potato", "berryjuice")
+ dispensable_reagents = list("water", "ice", "milk", "soymilk", "coffee", "tea", "hot_coco", "cola", "spacemountainwind", "dr_gibb", "space_up",
+ "tonic", "sodawater", "lemon_lime", "grapejuice", "sugar", "orangejuice", "lemonjuice", "limejuice", "tomatojuice", "banana",
+ "watermelonjuice", "carrotjuice", "potato", "berryjuice")
hack_message = "You change the mode from 'McNano' to 'Pizza King'."
unhack_message = "You change the mode from 'Pizza King' to 'McNano'."
hacked_reagents = list("thirteenloko")
@@ -278,10 +280,10 @@
energy = 100
max_energy = 100
desc = "A technological marvel, supposedly able to mix just the mixture you'd like to drink the moment you ask for one."
- dispensable_reagents = list("ice","cream", "cider", "beer","kahlua","whiskey","wine","vodka","gin","rum","tequilla","vermouth","cognac","ale","mead")
+ dispensable_reagents = list("ice", "cream", "cider", "beer", "kahlua", "whiskey", "wine", "vodka", "gin", "rum", "tequilla", "vermouth", "cognac", "ale", "mead", "synthanol")
hack_message = "You disable the 'nanotrasen-are-cheap-bastards' lock, enabling hidden and very expensive boozes."
unhack_message = "You re-enable the 'nanotrasen-are-cheap-bastards' lock, disabling hidden and very expensive boozes."
- hacked_reagents = list("goldschlager","patron", "absinthe", "ethanol", "nothing")
+ hacked_reagents = list("goldschlager", "patron", "absinthe", "ethanol", "nothing")
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
diff --git a/code/modules/surgery/organs/subtypes/drask.dm b/code/modules/surgery/organs/subtypes/drask.dm
new file mode 100644
index 00000000000..5ecfa67e054
--- /dev/null
+++ b/code/modules/surgery/organs/subtypes/drask.dm
@@ -0,0 +1,50 @@
+//DRASK ORGAN
+/obj/item/organ/internal/drask
+ name = "drask organ"
+ icon = 'icons/obj/surgery_drask.dmi'
+ icon_state = "innards"
+ desc = "A greenish, slightly translucent organ. It is extremely cold."
+
+/obj/item/organ/internal/heart/drask
+ name = "drask heart"
+ icon = 'icons/obj/surgery_drask.dmi'
+ icon_state = "heart-on"
+ dead_icon = "heart-off"
+ organ_tag = "heart"
+ parent_organ = "head"
+ slot = "heart"
+
+/obj/item/organ/internal/lungs/drask
+ name = "lungs"
+ icon = 'icons/obj/surgery_drask.dmi'
+ icon_state = "lungs"
+ gender = PLURAL
+ organ_tag = "lungs"
+ parent_organ = "chest"
+ slot = "lungs"
+
+/obj/item/organ/internal/liver/drask
+ name = "metabolic strainer"
+ icon = 'icons/obj/surgery_drask.dmi'
+ icon_state = "kidneys"
+ gender = PLURAL
+ organ_tag = "kidneys"
+ parent_organ = "groin"
+ slot = "kidneys"
+
+/obj/item/organ/internal/brain/drask
+ name = "brain"
+ icon = 'icons/obj/surgery_drask.dmi'
+ icon_state = "brain2"
+ organ_tag = "brain"
+ slot = "brain"
+
+/obj/item/organ/internal/eyes/drask
+ name = "eyes"
+ icon = 'icons/obj/surgery_drask.dmi'
+ icon_state = "eyes"
+ gender = PLURAL
+ organ_tag = "eyes"
+ parent_organ = "head"
+ slot = "eyes"
+ desc = "Drask eyes. They look even stranger disembodied"
\ No newline at end of file
diff --git a/html/changelogs/AutoChangeLog-pr-4187.yml b/html/changelogs/AutoChangeLog-pr-4187.yml
new file mode 100644
index 00000000000..255f347d71c
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-4187.yml
@@ -0,0 +1,9 @@
+author: QuinnAggeler
+delete-after: True
+changes:
+ - rscadd: "Adds the Drask as a 30KP race"
+ - rscadd: "Adds their language, Orluum"
+ - rscadd: "Adds a stylecolor for their language"
+ - rscadd: "Adds their butts (for photocopying)"
+ - rscadd: "Adds, at last, another race with skin tone (humies move over)"
+ - rscadd: "Adds a reason to make bad ice puns"
diff --git a/html/changelogs/AutoChangeLog-pr-4246.yml b/html/changelogs/AutoChangeLog-pr-4246.yml
new file mode 100644
index 00000000000..15a4ad175ea
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-4246.yml
@@ -0,0 +1,4 @@
+author: FlattestGuitar
+delete-after: True
+changes:
+ - tweak: "cheap lighters only damage your hand if you fail to properly use such a complicated contraption, not the whole body"
diff --git a/html/changelogs/AutoChangeLog-pr-4289.yml b/html/changelogs/AutoChangeLog-pr-4289.yml
new file mode 100644
index 00000000000..5f64706be9e
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-4289.yml
@@ -0,0 +1,7 @@
+author: pinatacolada
+delete-after: True
+changes:
+ - bugfix: "Plasmamen security now spawn with their suit slot items in their
+bags"
+ - tweak: "Pod pilots spawn with taser in the suit slot"
+ - tweak: "removes armor from plasmamen magistrate suits"
diff --git a/html/changelogs/AutoChangeLog-pr-4305.yml b/html/changelogs/AutoChangeLog-pr-4305.yml
new file mode 100644
index 00000000000..9a106ed3dac
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-4305.yml
@@ -0,0 +1,4 @@
+author: LittleBigKid2000
+delete-after: True
+changes:
+ - rscadd: "Booze dispensers can now dispense synthanol"
diff --git a/html/changelogs/AutoChangeLog-pr-4314.yml b/html/changelogs/AutoChangeLog-pr-4314.yml
new file mode 100644
index 00000000000..6fc6f3b0cf0
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-4314.yml
@@ -0,0 +1,4 @@
+author: Crazylemon64
+delete-after: True
+changes:
+ - bugfix: "AIs are no longer created for temporary messages."
diff --git a/html/changelogs/AutoChangeLog-pr-4315.yml b/html/changelogs/AutoChangeLog-pr-4315.yml
new file mode 100644
index 00000000000..cf4627fd1ce
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-4315.yml
@@ -0,0 +1,4 @@
+author: IK3I
+delete-after: True
+changes:
+ - bugfix: "Can no longer holster items with No-Drop active."
diff --git a/icons/mob/human_face.dmi b/icons/mob/human_face.dmi
index 4636afa8d15..3cd59fe3f74 100644
Binary files a/icons/mob/human_face.dmi and b/icons/mob/human_face.dmi differ
diff --git a/icons/mob/human_races/r_drask.dmi b/icons/mob/human_races/r_drask.dmi
new file mode 100644
index 00000000000..d3a9934298b
Binary files /dev/null and b/icons/mob/human_races/r_drask.dmi differ
diff --git a/icons/mob/species/drask/eyes.dmi b/icons/mob/species/drask/eyes.dmi
new file mode 100644
index 00000000000..918f6e5ef71
Binary files /dev/null and b/icons/mob/species/drask/eyes.dmi differ
diff --git a/icons/mob/species/drask/gloves.dmi b/icons/mob/species/drask/gloves.dmi
new file mode 100644
index 00000000000..4070bb5a7cd
Binary files /dev/null and b/icons/mob/species/drask/gloves.dmi differ
diff --git a/icons/mob/species/drask/gloves1.dmi b/icons/mob/species/drask/gloves1.dmi
new file mode 100644
index 00000000000..70423488ef5
Binary files /dev/null and b/icons/mob/species/drask/gloves1.dmi differ
diff --git a/icons/mob/species/drask/helmet.dmi b/icons/mob/species/drask/helmet.dmi
new file mode 100644
index 00000000000..3759f81fc41
Binary files /dev/null and b/icons/mob/species/drask/helmet.dmi differ
diff --git a/icons/mob/species/drask/mask.dmi b/icons/mob/species/drask/mask.dmi
new file mode 100644
index 00000000000..72bcd3d908c
Binary files /dev/null and b/icons/mob/species/drask/mask.dmi differ
diff --git a/icons/mob/species/drask/suit.dmi b/icons/mob/species/drask/suit.dmi
new file mode 100644
index 00000000000..37c03b3da9e
Binary files /dev/null and b/icons/mob/species/drask/suit.dmi differ
diff --git a/icons/mob/species/drask/uniform.dmi b/icons/mob/species/drask/uniform.dmi
new file mode 100644
index 00000000000..2e58f6918bf
Binary files /dev/null and b/icons/mob/species/drask/uniform.dmi differ
diff --git a/icons/obj/butts.dmi b/icons/obj/butts.dmi
index cddd1ca6659..9a71d519a19 100644
Binary files a/icons/obj/butts.dmi and b/icons/obj/butts.dmi differ
diff --git a/icons/obj/surgery_drask.dmi b/icons/obj/surgery_drask.dmi
new file mode 100644
index 00000000000..df2fd75a360
Binary files /dev/null and b/icons/obj/surgery_drask.dmi differ
diff --git a/interface/stylesheet.dm b/interface/stylesheet.dm
index 2f178d751bb..f1e28ec7189 100644
--- a/interface/stylesheet.dm
+++ b/interface/stylesheet.dm
@@ -91,6 +91,7 @@ h1.alert, h2.alert {color: #000000;}
.trinary {color: #727272;}
.kidan {color: #664205;}
.slime {color: #0077AA;}
+.drask {color: #a3d4eb; font-family: "Arial Black";}
.clown {color: #ff0000;}
.shadowling {color: #3b2769;}
.vulpkanin {color: #B97A57;}
diff --git a/paradise.dme b/paradise.dme
index b9b84d17cef..9077d8b86f4 100644
--- a/paradise.dme
+++ b/paradise.dme
@@ -1492,6 +1492,7 @@
#include "code\modules\mob\living\carbon\human\interactive\prefabs.dm"
#include "code\modules\mob\living\carbon\human\species\abdcutor.dm"
#include "code\modules\mob\living\carbon\human\species\apollo.dm"
+#include "code\modules\mob\living\carbon\human\species\drask.dm"
#include "code\modules\mob\living\carbon\human\species\golem.dm"
#include "code\modules\mob\living\carbon\human\species\monkey.dm"
#include "code\modules\mob\living\carbon\human\species\plasmaman.dm"
@@ -1998,6 +1999,7 @@
#include "code\modules\surgery\organs\skeleton.dm"
#include "code\modules\surgery\organs\wound.dm"
#include "code\modules\surgery\organs\subtypes\diona.dm"
+#include "code\modules\surgery\organs\subtypes\drask.dm"
#include "code\modules\surgery\organs\subtypes\machine.dm"
#include "code\modules\surgery\organs\subtypes\misc.dm"
#include "code\modules\surgery\organs\subtypes\nucleation.dm"
diff --git a/sound/voice/DraskTalk.ogg b/sound/voice/DraskTalk.ogg
new file mode 100644
index 00000000000..c0f6f4399e9
Binary files /dev/null and b/sound/voice/DraskTalk.ogg differ
diff --git a/sound/voice/DraskTalk2.ogg b/sound/voice/DraskTalk2.ogg
new file mode 100644
index 00000000000..2f849bf52f9
Binary files /dev/null and b/sound/voice/DraskTalk2.ogg differ