mirror of
https://github.com/CHOMPstation/CHOMPstation.git
synced 2026-08-21 19:16:22 +01:00
Merge pull request #3378 from VOREStation/polaris-sync-2018-03-30
Polaris Sync 2018-03-30
This commit is contained in:
@@ -7,6 +7,7 @@ var/global/floorIsLava = 0
|
||||
/proc/message_admins(var/msg)
|
||||
msg = "<span class=\"log_message\"><span class=\"prefix\">ADMIN LOG:</span> <span class=\"message\">[msg]</span></span>"
|
||||
//log_adminwarn(msg) //log_and_message_admins is for this
|
||||
|
||||
for(var/client/C in admins)
|
||||
if((R_ADMIN|R_MOD) & C.holder.rights)
|
||||
C << msg
|
||||
|
||||
@@ -285,7 +285,8 @@ var/list/blobs = list()
|
||||
name = "blob"
|
||||
desc = "The blob lashing out at something."
|
||||
icon_state = "blob_attack"
|
||||
layer = 5.2
|
||||
plane = MOB_PLANE
|
||||
layer = ABOVE_MOB_LAYER
|
||||
time_to_die = 6
|
||||
alpha = 140
|
||||
mouse_opacity = 0
|
||||
|
||||
@@ -282,21 +282,21 @@ var/global/list/valid_bloodtypes = list("A+", "A-", "B+", "B-", "AB+", "AB-", "O
|
||||
|
||||
. += "<b>Hair</b><br>"
|
||||
if(has_flag(mob_species, HAS_HAIR_COLOR))
|
||||
. += "<a href='?src=\ref[src];hair_color=1'>Change Color</a> <font face='fixedsys' size='3' color='#[num2hex(pref.r_hair, 2)][num2hex(pref.g_hair, 2)][num2hex(pref.b_hair, 2)]'><table style='display:inline;' bgcolor='#[num2hex(pref.r_hair, 2)][num2hex(pref.g_hair, 2)][num2hex(pref.b_hair)]'><tr><td>__</td></tr></table></font> "
|
||||
. += "<a href='?src=\ref[src];hair_color=1'>Change Color</a> <font face='fixedsys' size='3' color='#[num2hex(pref.r_hair, 2)][num2hex(pref.g_hair, 2)][num2hex(pref.b_hair, 2)]'><table style='display:inline;' bgcolor='#[num2hex(pref.r_hair, 2)][num2hex(pref.g_hair, 2)][num2hex(pref.b_hair, 2)]'><tr><td>__</td></tr></table></font> "
|
||||
. += " Style: <a href='?src=\ref[src];hair_style=1'>[pref.h_style]</a><br>"
|
||||
|
||||
. += "<br><b>Facial</b><br>"
|
||||
if(has_flag(mob_species, HAS_HAIR_COLOR))
|
||||
. += "<a href='?src=\ref[src];facial_color=1'>Change Color</a> <font face='fixedsys' size='3' color='#[num2hex(pref.r_facial, 2)][num2hex(pref.g_facial, 2)][num2hex(pref.b_facial, 2)]'><table style='display:inline;' bgcolor='#[num2hex(pref.r_facial, 2)][num2hex(pref.g_facial, 2)][num2hex(pref.b_facial)]'><tr><td>__</td></tr></table></font> "
|
||||
. += "<a href='?src=\ref[src];facial_color=1'>Change Color</a> <font face='fixedsys' size='3' color='#[num2hex(pref.r_facial, 2)][num2hex(pref.g_facial, 2)][num2hex(pref.b_facial, 2)]'><table style='display:inline;' bgcolor='#[num2hex(pref.r_facial, 2)][num2hex(pref.g_facial, 2)][num2hex(pref.b_facial, 2)]'><tr><td>__</td></tr></table></font> "
|
||||
. += " Style: <a href='?src=\ref[src];facial_style=1'>[pref.f_style]</a><br>"
|
||||
|
||||
if(has_flag(mob_species, HAS_EYE_COLOR))
|
||||
. += "<br><b>Eyes</b><br>"
|
||||
. += "<a href='?src=\ref[src];eye_color=1'>Change Color</a> <font face='fixedsys' size='3' color='#[num2hex(pref.r_eyes, 2)][num2hex(pref.g_eyes, 2)][num2hex(pref.b_eyes, 2)]'><table style='display:inline;' bgcolor='#[num2hex(pref.r_eyes, 2)][num2hex(pref.g_eyes, 2)][num2hex(pref.b_eyes)]'><tr><td>__</td></tr></table></font><br>"
|
||||
. += "<a href='?src=\ref[src];eye_color=1'>Change Color</a> <font face='fixedsys' size='3' color='#[num2hex(pref.r_eyes, 2)][num2hex(pref.g_eyes, 2)][num2hex(pref.b_eyes, 2)]'><table style='display:inline;' bgcolor='#[num2hex(pref.r_eyes, 2)][num2hex(pref.g_eyes, 2)][num2hex(pref.b_eyes, 2)]'><tr><td>__</td></tr></table></font><br>"
|
||||
|
||||
if(has_flag(mob_species, HAS_SKIN_COLOR))
|
||||
. += "<br><b>Body Color</b><br>"
|
||||
. += "<a href='?src=\ref[src];skin_color=1'>Change Color</a> <font face='fixedsys' size='3' color='#[num2hex(pref.r_skin, 2)][num2hex(pref.g_skin, 2)][num2hex(pref.b_skin, 2)]'><table style='display:inline;' bgcolor='#[num2hex(pref.r_skin, 2)][num2hex(pref.g_skin, 2)][num2hex(pref.b_skin)]'><tr><td>__</td></tr></table></font><br>"
|
||||
. += "<a href='?src=\ref[src];skin_color=1'>Change Color</a> <font face='fixedsys' size='3' color='#[num2hex(pref.r_skin, 2)][num2hex(pref.g_skin, 2)][num2hex(pref.b_skin, 2)]'><table style='display:inline;' bgcolor='#[num2hex(pref.r_skin, 2)][num2hex(pref.g_skin, 2)][num2hex(pref.b_skin, 2)]'><tr><td>__</td></tr></table></font><br>"
|
||||
|
||||
. += "<br><a href='?src=\ref[src];marking_style=1'>Body Markings +</a><br>"
|
||||
for(var/M in pref.body_markings)
|
||||
@@ -307,7 +307,7 @@ var/global/list/valid_bloodtypes = list("A+", "A-", "B+", "B-", "AB+", "AB-", "O
|
||||
. += "<br>"
|
||||
. += "<b>Allow Synth color:</b> <a href='?src=\ref[src];synth_color=1'><b>[pref.synth_color ? "Yes" : "No"]</b></a><br>"
|
||||
if(pref.synth_color)
|
||||
. += "<a href='?src=\ref[src];synth2_color=1'>Change Color</a> <font face='fixedsys' size='3' color='#[num2hex(pref.r_synth, 2)][num2hex(pref.g_synth, 2)][num2hex(pref.b_synth, 2)]'><table style='display:inline;' bgcolor='#[num2hex(pref.r_synth, 2)][num2hex(pref.g_synth, 2)][num2hex(pref.b_synth)]'><tr><td>__</td></tr></table></font> "
|
||||
. += "<a href='?src=\ref[src];synth2_color=1'>Change Color</a> <font face='fixedsys' size='3' color='#[num2hex(pref.r_synth, 2)][num2hex(pref.g_synth, 2)][num2hex(pref.b_synth, 2)]'><table style='display:inline;' bgcolor='#[num2hex(pref.r_synth, 2)][num2hex(pref.g_synth, 2)][num2hex(pref.b_synth, 2)]'><tr><td>__</td></tr></table></font> "
|
||||
|
||||
. = jointext(.,null)
|
||||
|
||||
|
||||
@@ -0,0 +1,201 @@
|
||||
//Pilot
|
||||
|
||||
/obj/item/clothing/head/pilot
|
||||
name = "pilot helmet"
|
||||
desc = "Standard pilot gear. Protects the head from impacts."
|
||||
icon_state = "pilot_helmet1"
|
||||
item_icons = list(slot_head_str = 'icons/mob/pilot_helmet.dmi')
|
||||
sprite_sheets = list(
|
||||
SPECIES_TESHARI = 'icons/mob/species/seromi/pilot_helmet.dmi'
|
||||
)
|
||||
flags = THICKMATERIAL
|
||||
armor = list(melee = 20, bullet = 10, laser = 10, energy = 5, bomb = 10, bio = 0, rad = 0)
|
||||
flags_inv = HIDEEARS
|
||||
cold_protection = HEAD
|
||||
min_cold_protection_temperature = HELMET_MIN_COLD_PROTECTION_TEMPERATURE
|
||||
heat_protection = HEAD
|
||||
max_heat_protection_temperature = HELMET_MAX_HEAT_PROTECTION_TEMPERATURE
|
||||
w_class = ITEMSIZE_NORMAL
|
||||
|
||||
var/obj/machinery/computer/shuttle_control/web/shuttle_comp
|
||||
var/obj/screen/pilot_hud
|
||||
var/list/images
|
||||
var/list/raw_images
|
||||
var/last_status
|
||||
|
||||
/obj/item/clothing/head/pilot/initialize()
|
||||
. = ..()
|
||||
|
||||
images = list()
|
||||
raw_images = list()
|
||||
|
||||
pilot_hud = new(src)
|
||||
pilot_hud.screen_loc = "1,1"
|
||||
pilot_hud.icon = 'icons/obj/piloting_overlay.dmi'
|
||||
pilot_hud.icon_state = "dimmer"
|
||||
pilot_hud.layer = SCREEN_LAYER
|
||||
pilot_hud.plane = PLANE_FULLSCREEN
|
||||
pilot_hud.mouse_opacity = 0
|
||||
pilot_hud.alpha = 0
|
||||
|
||||
var/image/I
|
||||
I = image(pilot_hud.icon,pilot_hud,"top_bar",layer=SCREEN_LAYER+1)
|
||||
I.appearance_flags = RESET_ALPHA
|
||||
I.alpha = 145
|
||||
images["top_bar"] = I
|
||||
raw_images += I
|
||||
|
||||
I = image(pilot_hud.icon,pilot_hud,"top_dots",layer=SCREEN_LAYER+1)
|
||||
I.appearance_flags = RESET_ALPHA
|
||||
I.alpha = 200
|
||||
images["topdots"] = I
|
||||
raw_images += I
|
||||
|
||||
I = image(pilot_hud.icon,pilot_hud,"words_discon",layer=SCREEN_LAYER+1) //words_standby, words_flying, words_spool, words_discon
|
||||
I.appearance_flags = RESET_ALPHA
|
||||
I.alpha = 200
|
||||
images["top_words"] = I
|
||||
raw_images += I
|
||||
|
||||
I = image(pilot_hud.icon,pilot_hud,"",layer=SCREEN_LAYER+1)
|
||||
I.appearance_flags = RESET_ALPHA
|
||||
I.alpha = 200
|
||||
images["charging"] = I
|
||||
raw_images += I
|
||||
|
||||
I = image(pilot_hud.icon,pilot_hud,"left_bar",layer=SCREEN_LAYER+1)
|
||||
I.appearance_flags = RESET_ALPHA
|
||||
I.alpha = 0
|
||||
images["left_bar"] = I
|
||||
raw_images += I
|
||||
|
||||
I = image(pilot_hud.icon,pilot_hud,"right_bar",layer=SCREEN_LAYER+1)
|
||||
I.appearance_flags = RESET_ALPHA
|
||||
I.alpha = 0
|
||||
images["right_bar"] = I
|
||||
raw_images += I
|
||||
|
||||
I = image(pilot_hud.icon,pilot_hud,"flyboxes",layer=SCREEN_LAYER+1)
|
||||
I.appearance_flags = RESET_ALPHA
|
||||
I.alpha = 0
|
||||
images["flyboxes"] = I
|
||||
raw_images += I
|
||||
|
||||
I = image(pilot_hud.icon,pilot_hud,"horizon",layer=SCREEN_LAYER+1)
|
||||
I.appearance_flags = RESET_ALPHA
|
||||
I.alpha = 0
|
||||
images["horizon"] = I
|
||||
raw_images += I
|
||||
|
||||
/obj/item/clothing/head/pilot/proc/update_hud(var/status)
|
||||
if(last_status == status)
|
||||
return
|
||||
|
||||
last_status = status
|
||||
|
||||
if(status == SHUTTLE_INTRANSIT)
|
||||
var/image/I = images["top_words"]
|
||||
I.icon_state = "words_flying"
|
||||
I = images["left_bar"]
|
||||
I.alpha = 200
|
||||
I = images["right_bar"]
|
||||
I.alpha = 200
|
||||
I = images["flyboxes"]
|
||||
I.alpha = 200
|
||||
I = images["horizon"]
|
||||
I.alpha = 200
|
||||
I = images["charging"]
|
||||
I.icon_state = ""
|
||||
animate(pilot_hud,alpha=255,time=3 SECONDS)
|
||||
|
||||
else if(status == SHUTTLE_IDLE)
|
||||
var/image/I = images["top_words"]
|
||||
I.icon_state = "words_standby"
|
||||
I = images["left_bar"]
|
||||
I.alpha = 0
|
||||
I = images["right_bar"]
|
||||
I.alpha = 0
|
||||
I = images["flyboxes"]
|
||||
I.alpha = 0
|
||||
I = images["horizon"]
|
||||
I.alpha = 0
|
||||
I = images["charging"]
|
||||
I.icon_state = ""
|
||||
animate(pilot_hud,alpha=0,time=3 SECONDS)
|
||||
|
||||
else if(status == SHUTTLE_WARMUP)
|
||||
var/image/I = images["top_words"]
|
||||
I.icon_state = "words_spool"
|
||||
I = images["left_bar"]
|
||||
I.alpha = 200
|
||||
I = images["right_bar"]
|
||||
I.alpha = 200
|
||||
I = images["flyboxes"]
|
||||
I.alpha = 0
|
||||
I = images["horizon"]
|
||||
I.alpha = 0
|
||||
I = images["charging"]
|
||||
I.icon_state = "charging"
|
||||
animate(pilot_hud,alpha=255,time=3 SECONDS)
|
||||
|
||||
else if(status == "discon")
|
||||
var/image/I = images["top_words"]
|
||||
I.icon_state = "words_discon"
|
||||
I = images["left_bar"]
|
||||
I.alpha = 0
|
||||
I = images["right_bar"]
|
||||
I.alpha = 0
|
||||
I = images["flyboxes"]
|
||||
I.alpha = 0
|
||||
I = images["horizon"]
|
||||
I.alpha = 0
|
||||
I = images["charging"]
|
||||
I.icon_state = ""
|
||||
animate(pilot_hud,alpha=0,time=3 SECONDS)
|
||||
|
||||
/obj/item/clothing/head/pilot/verb/hud_colors()
|
||||
set name = "Alter HUD color"
|
||||
set desc = "Change the color of the piloting HUD."
|
||||
set category = "Object"
|
||||
set src in usr
|
||||
|
||||
var/newcolor = input(usr,"Pick a color!","HUD Color") as null|color
|
||||
if(newcolor)
|
||||
for(var/img in list("top_words","left_bar","right_bar","flyboxes"))
|
||||
var/image/I = images[img]
|
||||
I.color = newcolor
|
||||
|
||||
/obj/item/clothing/head/pilot/Destroy()
|
||||
for(var/img in raw_images)
|
||||
var/image/I = img
|
||||
I.loc = null
|
||||
shuttle_comp = null
|
||||
qdel(pilot_hud)
|
||||
return ..()
|
||||
|
||||
/obj/item/clothing/head/pilot/equipped(var/mob/user,var/slot)
|
||||
. = ..()
|
||||
if(slot == slot_head && user.client)
|
||||
user.client.screen |= pilot_hud
|
||||
user.client.images |= raw_images
|
||||
|
||||
/obj/item/clothing/head/pilot/dropped(var/mob/user)
|
||||
. = ..()
|
||||
if(user.client)
|
||||
user.client.screen -= pilot_hud
|
||||
user.client.images -= raw_images
|
||||
|
||||
/obj/item/clothing/head/pilot/alt
|
||||
name = "pilot helmet"
|
||||
desc = "Standard pilot gear. Protects the head from impacts. This one has a retractable visor"
|
||||
icon_state = "pilot_helmet2"
|
||||
action_button_name = "Toggle Visor"
|
||||
|
||||
/obj/item/clothing/head/pilot/alt/attack_self(mob/user as mob)
|
||||
if(src.icon_state == initial(icon_state))
|
||||
src.icon_state = "[icon_state]up"
|
||||
user << "You raise the visor on the pilot helmet."
|
||||
else
|
||||
src.icon_state = initial(icon_state)
|
||||
user << "You lower the visor on the pilot helmet."
|
||||
update_clothing_icon() //so our mob-overlays update
|
||||
@@ -45,7 +45,6 @@
|
||||
icon_state = "riot"
|
||||
item_state_slots = list(slot_r_hand_str = "swat", slot_l_hand_str = "swat")
|
||||
armor = list(melee = 80, bullet = 10, laser = 10, energy = 10, bomb = 0, bio = 0, rad = 0)
|
||||
flags_inv = HIDEJUMPSUIT
|
||||
siemens_coefficient = 0.5
|
||||
|
||||
/obj/item/clothing/suit/armor/riot/alt
|
||||
@@ -115,7 +114,7 @@
|
||||
icon_state = "swatarmor"
|
||||
item_state_slots = list(slot_r_hand_str = "swat", slot_l_hand_str = "swat")
|
||||
body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|ARMS
|
||||
flags_inv = HIDEJUMPSUIT|HIDETIE|HIDEHOLSTER
|
||||
flags_inv = HIDETIE|HIDEHOLSTER
|
||||
slowdown = 1
|
||||
armor = list(melee = 60, bullet = 60, laser = 60, energy = 40, bomb = 40, bio = 0, rad = 0)
|
||||
siemens_coefficient = 0.7
|
||||
@@ -311,7 +310,7 @@
|
||||
desc = "An armoured jacket with silver rank pips and livery."
|
||||
icon_state = "warden_jacket"
|
||||
body_parts_covered = UPPER_TORSO|LOWER_TORSO|ARMS|LEGS
|
||||
flags_inv = HIDEJUMPSUIT|HIDETIE|HIDEHOLSTER
|
||||
flags_inv = HIDETIE|HIDEHOLSTER
|
||||
|
||||
/obj/item/clothing/suit/storage/vest/wardencoat/alt
|
||||
name = "Warden's jacket"
|
||||
@@ -332,7 +331,7 @@
|
||||
desc = "A greatcoat enhanced with a special alloy for some protection and style."
|
||||
icon_state = "hos"
|
||||
body_parts_covered = UPPER_TORSO|LOWER_TORSO|ARMS|LEGS
|
||||
flags_inv = HIDEJUMPSUIT|HIDETIE|HIDEHOLSTER
|
||||
flags_inv = HIDETIE|HIDEHOLSTER
|
||||
|
||||
//Jensen cosplay gear
|
||||
/obj/item/clothing/suit/storage/vest/hoscoat/jensen
|
||||
|
||||
@@ -45,7 +45,7 @@
|
||||
desc = "A long, flowing white robe. It looks comfortable, but not very warm."
|
||||
icon_state = "whiteout_robe"
|
||||
item_state_slots = list(slot_r_hand_str = "suit_white", slot_l_hand_str = "suit_white")
|
||||
flags_inv = HIDEJUMPSUIT|HIDETIE|HIDEHOLSTER
|
||||
flags_inv = HIDETIE|HIDEHOLSTER
|
||||
hoodtype = /obj/item/clothing/head/chaplain_hood/whiteout
|
||||
|
||||
//Chaplain
|
||||
|
||||
@@ -92,6 +92,7 @@ var/global/economy_init = 0
|
||||
|
||||
news_network.CreateFeedChannel("The [using_map.starsys_name] Times", "[using_map.starsys_name] Times ExoNode - [using_map.station_short]", 1, 1)
|
||||
news_network.CreateFeedChannel("The Gibson Gazette", "Editor Mike Hammers", 1, 1)
|
||||
news_network.CreateFeedChannel("Oculum Content Aggregator", "Oculus v6rev7", 1, 1)
|
||||
|
||||
for(var/loc_type in typesof(/datum/trade_destination) - /datum/trade_destination)
|
||||
var/datum/trade_destination/D = new loc_type
|
||||
|
||||
@@ -0,0 +1,110 @@
|
||||
/datum/event/lore_news
|
||||
endWhen = 10
|
||||
|
||||
/datum/event/lore_news/announce()
|
||||
var/author = "Oculus v6rev7"
|
||||
var/channel = "Oculum Content Aggregator"
|
||||
|
||||
|
||||
//locations by region for later pick()
|
||||
//probably would be good to move these to a global somehwere but fuck if I know how to do that
|
||||
var/list/rim = list("Shelf", "Vounna", "Relan", "Whythe", "Angessa's Pearl") // this is also the Association list for most purposes
|
||||
var/list/crescent = list("Saint Columbia", "Ganesha", "Gavel", "Oasis", "Kess-Gendar") //Vir not included
|
||||
var/list/core = list("Sol", "Alpha Centauri", "Tau Ceti", "Altair")
|
||||
var/list/heights = list("New Ohio", "Mahi-Mahi", "Parvati", "Sidhe", "New Seoul")
|
||||
var/list/bowl = list("Zhu Que", "New Singapore", "Isavau's Gamble", "Love", "Viola", "Stove")
|
||||
var/list/crypt = list("El", "Jahan's Post", "Abel's Rest", "Raphael", "Thoth", "Terminus")
|
||||
var/list/weird = list("Silk", "Nyx") //no region
|
||||
|
||||
//by government
|
||||
var/list/solgov = crescent + core + heights + bowl + crypt + weird
|
||||
var/list/skrell = list("Qerr'Vallis", "Qerma-Lakirr", "Harrqak", "Kauq'xum")
|
||||
var/list/skrellfar = list("The Far Kingdom of Light and Shifting Shadow")// more colonies Elgeon
|
||||
var/list/unathi = list("Moghes", "Qerrna-Qamxea", "Abel's Rest") // more colonies Anewbe
|
||||
var/list/tajara = list("Rarkajar", "Mesomori", "Arathiir")
|
||||
var/list/independent = list("New Kyoto", "Casini's Reach", "Ue'Orsi", "Natuna", "Neon Light")
|
||||
|
||||
//this is what you should pick for most applications
|
||||
//whether or not the rim goes there is something that should be changed per the metaplot
|
||||
var/list/loc = solgov + skrell + tajara
|
||||
|
||||
//this includes systems Sol doesn't really have eyes on
|
||||
//var/list/allloc = loc + unathi + skrellfar + independent + rim
|
||||
|
||||
//copied right from organizations.dm
|
||||
var/list/ship_names = list(
|
||||
"Kestrel",
|
||||
"Beacon",
|
||||
"Signal",
|
||||
"Freedom",
|
||||
"Glory",
|
||||
"Axiom",
|
||||
"Eternal",
|
||||
"Harmony",
|
||||
"Light",
|
||||
"Discovery",
|
||||
"Endeavor",
|
||||
"Explorer",
|
||||
"Swift",
|
||||
"Dragonfly",
|
||||
"Ascendant",
|
||||
"Tenacious",
|
||||
"Pioneer",
|
||||
"Hawk",
|
||||
"Haste",
|
||||
"Radiant",
|
||||
"Luminous"
|
||||
)
|
||||
|
||||
//generated based on Cerebulon's thing on the wiki
|
||||
var/list/prefixes = list("IAV","ICV","IDV","IDV","IEV","IFV","IIV","ILV","IMV","IRV","ISV","ITV","SCG-A","SCG-C","SCG-D","SCG-D","SCG-E","SCG-F","SCG-I","SCG-L","SCG-M","SCG-R","SCG-S","SCG-T","BAV","BCV","BDV","BDV","BEV","BFV","BIV","BLV","BMV","BRV","BSV","BTV","HAV","HCV","HDV","HDV","HEV","HFV","HIV","HLV","HMV","HRV","HSV","HTV","MAV","MCV","MDV","MDV","MEV","MFV","MIV","MLV","MMV","MRV","MSV","MTV","NAV","NCV","NDV","NDV","NEV","NFV","NIV","NLV","NMV","NRV","NSV","NTV","VAV","VCV","VDV","VDV","VEV","VFV","VIV","VLV","VMV","VRV","VSV","VTV","WAV","WCV","WDV","WDV","WEV","WFV","WIV","WLV","WMV","WRV","WSV","WTV","XAV","XCV","XDV","XDV","XEV","XFV","XIV","XLV","XMV","XRV","XSV","XTV","ZAV","ZCV","ZDV","ZDV","ZEV","ZFV","ZIV","ZLV","ZMV","ZRV","ZSV","ZTV","GAV","GCV","GDV","GDV","GEV","GFV","GIV","GLV","GMV","GRV","GSV","GTV","AAV","ACV","ADV","ADV","AEV","AFV","AIV","ALV","AMV","ARV","ASV","ATV","LAV","LCV","LDV","LDV","LEV","LFV","LIV","LLV","LMV","LRV","LSV","LTV")
|
||||
|
||||
//var/datum/trade_destination/affected_dest = pick(weighted_mundaneevent_locations) //shouldn't do anything, not removing it to avoid breaking shit
|
||||
//formatting breaks my fucking eyes
|
||||
var/body = pick("A high-ranking Vey-Med executive was revealed to have been experimenting on biological neural enhancement techniques, believed to be of Skrellian origin, which could lead to the production of transhuman entities with an average cognitive capacity 30% greater than a baseline human.",
|
||||
"[random_name(MALE)], chairman of the controversial Friends of Ned party, is scheduled to speak at a prominant university in [pick(core)] this Monday, according to a statement on his official newsfeed.",
|
||||
"A wing of Ward-Takahashi B-class drones became catatonic this Thursday after tripping late-stage anti-emergence protocols. W-T Chief of Development has declined to comment.",
|
||||
"A brand-new shipment of recreational voidcraft has been deemed \"Unsafe for use\" and seized at [pick(solgov)] customs. Wulf Aeronautics blames error in automated manufactory on [pick(solgov)], assures shareholders of \"One time incident\" after shares drop 4%.",
|
||||
"Activity in a mostly automated Xion work-site in [pick(solgov)] has been suspended indefinitely, after reports of atypical drone behavior. The EIO's assigned investigator commented on the shutdown, saying \"We'll get them up and running again as soon as we're sure it's safe.\" No comment so far on an estimated time or date of reopening.",
|
||||
"The EIO has officially raised the Emergence Threat Level in [pick(solgov)] to Blue. Citizens are reminded to comply with all EIO Agent requests. Failure to do so will be met with legal action, up to and including imprisonment.",
|
||||
"All SolGov citizens beware, the scourge know as the Vox have increased the frequency of their attacks on isolated and poorly defended SolGov territories in [pick(bowl)]. Citizens have been advised to travel in groups and remain aware of their surroundings at all times.",
|
||||
"The Unathi have recently moved a large amount of material into Abel's Rest, under the premise of building additional power plants. According to our sources, the material is in fact being channeled into domestic terrorist groups on both sides, in an attempt to incite a SolGov response. More news as the story develops.",
|
||||
"Controversial Kishari director [random_name(FEMALE)] announced this Friday a sequel to the 2525 animated series Soldiers of the Yearlong War. Open auditions for supporting cast members have been called.",
|
||||
"Amid concerns that it promotes a pro-transtech agenda, a high-profile screening of the award-winning animated film \"The Inventor's Marvelous Mechanical Maidens\" was canceled today on [pick(pick(core, heights))].",
|
||||
"A radiation leak caused by a power unit rupture at a [pick(solgov)] hazardous materials reclamation plant has left several workers and neighboring residents with acute radiation poisoning. Witnesses report that a basic lifting drone failed to recognize and collided with the misplaced unit.",
|
||||
"Xenophobic fringe group Humanity First has claimed credit for a bombing at a local government office on [pick(solgov)] which left three seriously injured. Police report that they have two suspects in custody, but details remain sparse.",
|
||||
"Government official [random_name(MALE)] reports that the crew of the [pick(prefixes)] [pick(ship_names)], the vessel boarded by Jaguar Gang pirates earlier this week, are \"Safe, unharmed, and happy to be back at work.\" Officials were unable to comment on future security measures at this time.",
|
||||
"Sanitation Technician [random_name(FEMALE)] says she was trapped in her work bathroom for three days after the locking system went haywire! The furious techie says she wants a \"hefty sum\" from her employers and that she won't be visiting that cubicle again any time soon!",
|
||||
"Experts at a top university have said that almost every position in modern society might be filled by a robot within the next few decades if production continues at its current rate. Workers' Rights groups have expressed alarm at the news, and have called for protections against the \"Tin menace\".",
|
||||
"An alleged cyberattack on Bishop Cybernetics systems reported to have resulted in the theft of customer data including detailed medical and biological records has been dismissed as \"Unfounded scaremongering\" by company executives.",
|
||||
"[pick(crescent)] resident [random_name(FEMALE)] says she was overjoyed when her son told her he was planning to get married, but was appalled to find the bride-to-be was a common household cleaning drone! GR3TA assures us that \"Cleaning is complete.\"",
|
||||
"Striking workers at a manufacturing plant on [pick(bowl)] have returned to work after news spread that plant owners would relocate operations to an automated facility if production did not resume by the end of the month. Factory investor [random_name(FEMALE)] expressed admiration at the \"Decisive action\" taken by the company.",
|
||||
"Police in [pick(core)] report that they have arrested a man in connection with multinationalist fringe group Nation of Mars. Authorities were alerted when the man's ID was flagged by new screening software at the city spaceport as a known sympathizer with the violent terrorist organization.",
|
||||
"The mystery of the [pick(prefixes)] [pick(ship_names)] has come to its end as a member of the vessel's skeleton crew was arrested in connection with Golden Tiger activities on the Skrell border. According to authorities, the ship - declared missing some months ago - was illegally sold to criminal elements on its way to breaking yards at [pick(heights)].",
|
||||
"[random_name(MALE)] comes clean about his decade-long nightmare kept as a slave on Eutopia in a new book to be released later this year. The harried author has fought lawsuits at every turn that claim that his account is \"A work of pure fiction with an obvious leftist agenda.\"",
|
||||
"Gas mask toting Revolutionary Solar People's Party extremists have reportedly attacked police at a rally in [pick(crypt)]. Peace-keeping officers were viscously pelted with objects and several protesters were found to be equipped with bottles containing an \"unknown substance.\"",
|
||||
"Be careful what you say around your personal AI device as you never know who might be listening, say top minds! Cybercrime expert [random_name(FEMALE)] says hackers can easily trick your device to listen in on your conversations, record you in secret, or even steal your identity!",
|
||||
"Thousands of travellers have been stranded at [pick(loc)] spaceport as a major error with the artificial intelligence system purged weeks worth of scheduling and manifest data from the port's mainframe. Major Bill's Transportation is offering stranded passengers 20% off replacement flights.",
|
||||
"An outraged pet owner claims that a cybernetic company in [pick(solgov)] performed \"disturbing\" surgeries on their beloved cat, Pickles. [random_name(PLURAL)], 58 claims that the local cybernetics firm stole the furry friend from the vet's office and \"Replaced his brain with ones and zeroes.\"",
|
||||
"Doctors in [pick(pick(skrell, heights))] were left in awe and horror as a Teshari was hatched with the features of an adult human man! Sources say that the youngster hatched with a full head of hair and could recite six nursery rhymes from memory. Could Skrell genetic experiments be to blame?",
|
||||
"Miners in [pick(bowl)] were dismayed to discover that their boss was actually a C-class drone intelligence! \"I should've known there was something wrong,\" says dumbfounded miner [random_name(MALE)],\"I'd say good morning and he'd just start listing off mineral densities and coordinates. I just thought he loved his job a little too much.\"",
|
||||
"The remains of an early 22nd century voidcraft containing \"Period artifacts, technology and human remains\" has been located on the surface of Luna after centuries of being disregarded as worthless wreck. Historians hope the find will provide insight into daily life under the short-lived Selene Federation.",
|
||||
"The unexpected discovery of the remains of a what was believed to be a previously undiscovered species by workers on [pick("Nisp", "Binma", "Sif", "Kishar", "Abel's Rest", "Merelar")] has now been dismissed. Upon close analysis of the specimen, it was identified as a \"Bear with mange\", apparently dumped there some weeks prior.",
|
||||
"According to a public statement by electronics giant Ward-Takahashi, many artificial intelligence systems - ranging from household appliances to industrial drones and habitat control networks - manufactured before 2550 could be at risk from a new virus dubbed \"Cap-3k\".",
|
||||
"A controversial opera billed as \"The true story of Nos Amis\" has been criticized by law enforcement agencies as \"glorifying\" some of the most infamous gangsters of the 22nd century. The Polish-language \"Z Francji, do Gwiazd\" is to be distributed exclusively in Alpha Centauri for one week only.",
|
||||
"Injury count continues to rise in the aftermath of the Positronic Rights Group Rally in [pick(pick(bowl, core, heights))]. Homemade teargas grenades were launched into the crowd at approximately 3:45 pm on Saturday by an unidentified person. Authorities urge anyone with information to call in, toll-free, at any time.",
|
||||
"Representatives report that investigations continue on a string of fires on [pick("Nisp", "Binma", "Sif", "Kishar", "Abel's Rest", "Merelar")]. While no information has been released to the public, authorities assure the press that they are doing everything in their power to find those responsible.",
|
||||
"En-route to the contentious rim system, a medical aid mission to Natuna was stopped by Ue-Katish pirates masquerading as refugees, who boarded the ship and stripped it of all supplies.",
|
||||
"Lead Singer of Strawberry Idol Revealed As Three Teshari In A Trench Coat-- Newest gimmick or shocking revelation??",
|
||||
"Shocking art critics throughout the system, a recent submission to the [pick(solgov)] Museum of Absurdism's contemporary exhibit was revealed to actually be the nutritional information on the back of a dehydrated cereal product common in Skrell space.",
|
||||
"The celebrated magical kid series \"Petit Yuusha Jossen Temonila\" has announced its newest season at the height of its demicentenial festival. Noted director [random_name(MALE)] has promised to bring a diverse production staff to the venerable series, and has stated a theme of \"the friendships that transcend borders\".",
|
||||
"The Hephaestus Industries board of directors announced this Monday the highest annual profits since the height of the Lizard Riots.",
|
||||
"A radical group of Mercurials were convicted today of violations of Five Points legislature at an extraordinary court on [pick(solgov)]. These convictions come at the heels of a successful sting operation six years in the making, lead by local Head of EIO [random_name(FEMALE)].",
|
||||
"An unnamed official of the shipping TSC Major Bill's Transportation narrowly escaped an attempt on their life by a deranged assassin. The assassin claims to have been driven to this henious act by the corporation's infamous jingle.",
|
||||
"In the aftermath of yesterday's synthphobic rally on [pick(solgov)], three positronic citizens were left irreparably damaged by a hostile mob, who claim that the victims were \"AAs\" attempting to infiltrate the rally.",
|
||||
"EIO spokesperson [random_name(MALE)] stated in a press conference yesterday that the \"Shakespear\" A-class codeline was briefly available for download on the darknet, although they claim to be \"confident that the leak was shut down before any significant portion could be downloaded\". Experts suspect Association involvement.",
|
||||
"[pick("Strives Towards", "Embraces", "Dreams of", "Cultivates", "Advocates", "Exemplifies")] [pick("Strength", "Wisdom", "Independence", "Pragmatism", "Reason", "Development")], a Community Child from Angessa's Pearl, published his memoir today, detailing a shocking level of abuse by caretakers and educators.",
|
||||
"Nova Sixty, Mercurial web personality, claims that the disappearence of the SCG-R Song Shi was a plot by \"extradimensional rockmen\" who intend to sow mistrust between the Association and SolGov. Quote Sixty, \"The Far Kingdoms' attempt to hide the TRUTH only proves that they and their rockman allies are NOT to be trusted.\"",
|
||||
)
|
||||
|
||||
news_network.SubmitArticle(body, author, channel, null, 1)
|
||||
@@ -140,6 +140,7 @@ var/global/list/severity_to_string = list(EVENT_LEVEL_MUNDANE = "Mundane", EVENT
|
||||
new /datum/event_meta(EVENT_LEVEL_MUNDANE, "Space Dust", /datum/event/dust , 60, list(ASSIGNMENT_ENGINEER = 20), 0, 0, 50),
|
||||
new /datum/event_meta(EVENT_LEVEL_MUNDANE, "Trivial News", /datum/event/trivial_news, 400),
|
||||
new /datum/event_meta(EVENT_LEVEL_MUNDANE, "Ian Storm", /datum/event/ianstorm, 50),
|
||||
new /datum/event_meta(EVENT_LEVEL_MUNDANE, "Lore News", /datum/event/lore_news, 400),
|
||||
new /datum/event_meta(EVENT_LEVEL_MUNDANE, "Vermin Infestation",/datum/event/infestation, 100, list(ASSIGNMENT_JANITOR = 100)),
|
||||
new /datum/event_meta(EVENT_LEVEL_MUNDANE, "Wallrot", /datum/event/wallrot, 0, list(ASSIGNMENT_ENGINEER = 30, ASSIGNMENT_GARDENER = 50)),
|
||||
)
|
||||
|
||||
@@ -48,6 +48,7 @@ var/list/event_last_fired = list()
|
||||
possibleEvents[/datum/event/economic_event] = 300
|
||||
possibleEvents[/datum/event/trivial_news] = 400
|
||||
possibleEvents[/datum/event/mundane_news] = 300
|
||||
possibleEvents[/datum/event/lore_news] = 300 // up this if the above ones get removed as they damn well should
|
||||
|
||||
possibleEvents[/datum/event/pda_spam] = max(min(25, player_list.len) * 4, 200)
|
||||
possibleEvents[/datum/event/money_lotto] = max(min(5, player_list.len), 50)
|
||||
|
||||
@@ -47,7 +47,7 @@ mob/living/carbon/proc/handle_hallucinations()
|
||||
if(!H.r_store) slots_free += ui_storage2
|
||||
if(slots_free.len)
|
||||
halitem.screen_loc = pick(slots_free)
|
||||
halitem.layer = 50
|
||||
halitem.hud_layerise()
|
||||
switch(rand(1,6))
|
||||
if(1) //revolver
|
||||
halitem.icon = 'icons/obj/gun.dmi'
|
||||
|
||||
@@ -51,7 +51,6 @@
|
||||
density = 0
|
||||
icon = 'icons/obj/hydroponics_growing.dmi'
|
||||
icon_state = "bush4-1"
|
||||
layer = 3
|
||||
pass_flags = PASSTABLE
|
||||
mouse_opacity = 2
|
||||
|
||||
@@ -192,12 +191,12 @@
|
||||
icon_state = "[seed.get_trait(TRAIT_PLANT_ICON)]-[growth]"
|
||||
|
||||
if(growth>2 && growth == max_growth)
|
||||
layer = 5
|
||||
plane = ABOVE_PLANE
|
||||
set_opacity(1)
|
||||
if(!isnull(seed.chems["woodpulp"]))
|
||||
density = 1
|
||||
else
|
||||
layer = 3
|
||||
reset_plane_and_layer()
|
||||
density = 0
|
||||
|
||||
/obj/effect/plant/proc/calc_dir()
|
||||
|
||||
@@ -5,7 +5,6 @@
|
||||
simulated = 0
|
||||
anchored = 1
|
||||
icon = LIGHTING_ICON
|
||||
layer = LIGHTING_LAYER
|
||||
plane = PLANE_LIGHTING
|
||||
//invisibility = INVISIBILITY_LIGHTING
|
||||
color = LIGHTING_BASE_MATRIX
|
||||
|
||||
@@ -4,11 +4,13 @@
|
||||
region. Each is labled by date of publication and title. This list is self-updating, and from time to time the publisher will push new \
|
||||
articles. You are encouraged to check back frequently."
|
||||
children = list(
|
||||
/datum/lore/codex/page/article1,
|
||||
/datum/lore/codex/page/article2,
|
||||
/datum/lore/codex/page/article3,
|
||||
/datum/lore/codex/page/article4,
|
||||
/datum/lore/codex/page/article7,
|
||||
/datum/lore/codex/page/article6,
|
||||
/datum/lore/codex/page/article5,
|
||||
/datum/lore/codex/page/article4,
|
||||
/datum/lore/codex/page/article3,
|
||||
/datum/lore/codex/page/article2,
|
||||
/datum/lore/codex/page/article1,
|
||||
/datum/lore/codex/page/about_news,
|
||||
)
|
||||
|
||||
@@ -20,7 +22,7 @@
|
||||
information, feel free to visit our homepage at oc.about.tsc, or the sites of any of our constituents."
|
||||
|
||||
/datum/lore/codex/page/article1
|
||||
name = "08/30/61-- VGA Legalizes Prometheans; Nanotrasen Begins Manufacture and Testing"
|
||||
name = "08/30/61 - VGA Legalizes Prometheans; Nanotrasen Begins Manufacture and Testing"
|
||||
data = "Today's meeting of the Vir Bicameral led to the passing of the Wynther-Helsey Bill, an implementation of the legal framework \
|
||||
used in Aetolus to handle the production and cultivation of the Macrolimbus species dubbed \"Prometheans\". These ill-researched organisms \
|
||||
possess cognitive abilities easily equaling those of A-class drones, but so far have not been included under the EIO's list of dangerous \
|
||||
@@ -38,7 +40,7 @@
|
||||
follow-up poll indicates that an appreciable number of Sivians do not support the framework's current implementation."
|
||||
|
||||
/datum/lore/codex/page/article2
|
||||
name = "2/3/62-- Corporate Coup on Aetolus"
|
||||
name = "2/3/62 - Corporate Coup on Aetolus"
|
||||
data = "A recent incident aboard the NRS Prometheus issued in a major change in the leadership of the Promethean homeworld. During \
|
||||
a late-night meeting of the Nanotrasen Board of Trustees, several high-ranking personnel, including Head of Research Naomi Harper,\
|
||||
announced their intention to assume direct control of Nanotrasen facilities in the system. It is known that several dissenting \
|
||||
@@ -51,7 +53,7 @@
|
||||
not responded to. Free Traders are recommended to stay clear of the region until the situation resolves itself."
|
||||
|
||||
/datum/lore/codex/page/article3
|
||||
name = "2/10/62-- Aetolian Partisans Declare Independence"
|
||||
name = "2/10/62 - Aetolian Partisans Declare Independence"
|
||||
data = "Breaking their week-long silence, the leaders of the Aetolian Coup, and their spokesperson and presumed leader Naomi Harper issued an address earlier today, delivered to the Oculum Broadcast office on Pearl by drone courier. Quote Dr. Harper: \"Our previous silence was a necessity, while we consolidated our forces and dealt with corporatists both internally and in Vounna's former Grayson outposts.\". In Harper's hour-long address, she berates the failure of SolGov to provide adequate protections for Prometheans. \"We will not let the Promethean be another positronic brain; they will not labor under a century of slavery, deprived of a state to call their own. The Luddites of the Friends and of the Icarus Front will not be permitted to decide the fate of a nascent race before it begins.\"\
|
||||
<br><br>\
|
||||
Harper proceeded to unilaterally declare Vounna's independence from SolGov, claiming sovereignty over the system as the first Chairperson of the \"Aetolian Council\". Speaker of the Shadow Coalition ISA-5 has urged their government to treat the developing situation with caution but decried Harper's rhetoric, stating in a press release, \"While I know well the injustices visited on myself and my people by misguided forbearers, it is important to treat any emerging technology with respect. Current policies regarding the Prometheans are designed to limit risk during sociological trials on Aetolus and beyond. As for myself, I doubt the sincerity of this human who claims to speak for the Prometheans, when the Prometheans are perfectly equipped to speak for themselves.\"\
|
||||
@@ -59,7 +61,7 @@
|
||||
NanoTrasen is expected to redouble their Promethean research programs in the Vir system until stability is restored to Vounna."
|
||||
|
||||
/datum/lore/codex/page/article4
|
||||
name = "2/14/62-- SCG Denounces Aetolian Coup; Mobilizes Fleet"
|
||||
name = "2/14/62 - SCG Denounces Aetolian Coup; Mobilizes Fleet"
|
||||
data = "Dismissing claims of inaction, a spokesperson for the Solar Confederate Government today confirmed that the Colonial Assembly has voted overwhelmingly in favor of swift military action in response to the coup on Aetolus earlier this month. Icarus Front Chairperson Mackenzie West was quick to make a damning official statement: \"Dr. Harper and her radical agitators cannot be excused for their violent, despicable attempts to destabilize the flourishing economy of the Almach Rim. The ruthless murder of innocents, and illegal seizure of private property are crimes that cannot merely be met with strong words and gentle slaps to the wrist\"...\"I am proud to announce that two units of brave Solar marines have been assigned to the SCG-R Song Shi rapid response cruiser, with the full backing of the Icarus Front - and I hope with my heart, the backing of all patriotic Solar citizens.\"\
|
||||
<br><br>\
|
||||
The decision faced resistance from more laissez faire Assembly member states, including prominent SEO governor Bruno Ofako, delaying an earlier consensus. Supporters of the action hope that this decisive display of military strength will encourage the rebels to stand down without further bloodshed, and submit to prosecution by the Lunar High Courts.\
|
||||
@@ -67,7 +69,7 @@
|
||||
The Icarus Front has also proposed a temporary ban on continued Promethean research, though this motion has yet to gain any traction."
|
||||
|
||||
/datum/lore/codex/page/article5
|
||||
name = "2/23/62-- \"Almach Association\" Shocks Nation"
|
||||
name = "2/23/62 - \"Almach Association\" Shocks Nation"
|
||||
data = "Shocking the nation, in the wee hours UTC a number of governments in the Almach Rim announced their intent to secede from the Confederacy as a unified political organization they refer to as the Almach Association, joining the already-declared Aetolian Council. Among the half-dozen affected systems is Angessa's Pearl, through which the Song Shi was passing en route to Aetolus. The Association has already issued a political manifesto and a foundational charter, leading political scientists across the galaxy to suspect back-doors collusion and possible Shelfican interference, a hypothesis made more likely by Morpheus Cyberkinetics' exonet site voicing support for the Association. Others suspect a moment of political crystallization, not unlike that in the Golden Hour three centuries ago. These researchers are already referring to this morning's events as the Gray Hour.\
|
||||
<br><br>\
|
||||
The Association's official manifesto repudiates the Five Points, calling them \"an archaic and distinctly human invention\". Experts agree that this bold declaration puts the Movement more in line with the Golden Hour than with the Age of Secession, and many fear that nothing short of a miracle like the discovery of the positronics will spare humanity from a bloody civil war.\
|
||||
@@ -75,3 +77,20 @@
|
||||
While the Association currently lists only a handful of Almach Rim systems as \"Constituent Organizations\", it has named Shelf, the Free Relan Federation, and the Eutopian Foreign Relations Board as \"observers\". The implications of this status are yet to be identified.\
|
||||
<br><br>\
|
||||
The fate of the SCG-R Song Shi and her crew remain unknown."
|
||||
|
||||
/datum/lore/codex/page/article6
|
||||
name = "3/03/62 - A Week Out From Almach: What are the facts?"
|
||||
data = "* Several organizations in the Almach Rim, including Angessa's Pearl, the Aetolian Council, the Interstellar Workers of Wythe, the Republic of Whitney, and members of several prominent families in the Neon Light unilaterally declared secession from SCG. <br><br>*This secession was first called the Grey Hour by political scientists in New Florence, a term popularized by reporter Elspor Fong. <br><br>* Shelf, the FRF, and the EFRB were declared \"observers\" in the Almach Association charter. <br><br>* None of these organizations have issued a statement on the matter.<br><br>* The SCG-R Song Shi was stranded in the region during the secession.<br><br>* SolGov has not issued an official statement of the fate of the Song Shi.<br><br>* Several confederate agencies, including Emergent Intelligence Oversight, the Trade and Customs Bureau, and SCG Fleet Intelligence have declared a \"state of emergency\".<br><br>* SolGov itself has NOT declared a state of emergency.<br><br>* Legitimate communications in and out of the Almach Rim are restricted to audited text messages for the period.<br><br>* Several illegitimate communication links exist and are believed by Fleet Intelligence to be currently hosting the official sites for Morpheus Cyberkinetics and for the Association itself.<br><br>* Icarus Front chairperson Mackenzie West has proposed a moratorium on the creation of new Prometheans for the duration of the crisis.<br><br>* Local laws on the subject will apply until the Assembly meets late in May. <br><br>* No confederate lawmaker has proposed action against Relani, Shelfican, or newly Almachi nationals living within stable regions.<br><br>* The border remains tightly closed to migrants, media, and diplomats alike."
|
||||
|
||||
/datum/lore/codex/page/article7
|
||||
name = "3/21/62 - Relan, Shelf Join the Almach Association"
|
||||
data = "Recent reports from within the Association indicate that the Free Relan Federation and Shelf have officially decided to join the Almach Association. President Nia Fischer of the FRF had this to say on the matter, in a speech addressed to the population at large. \
|
||||
<br><br>\
|
||||
\
|
||||
\"Our decision to join the Association may, at first, seem strange. It is true that we have much to gain from trade with the Solars, and that the radical transhumanism of Angessa's Pearl is not our way. But I will remind you that it was Shelf, not Sol, who ensured our prosperity just over two decades ago-- who safeguarded our independence and prevented us from falling to barbarism and dictatorship. We owe it, not just to Shelf but to all the members of the Almach Rim, to support their independence just the same. And that, my fellow Relanians, is the crux of it all. The Association is a revolution, at the heart of it all, and many of the now-independent states were owned near-outright by Trans-Stellar Corporations until the Association allowed them to shake out their fetters. What right do we have to sit by while just a dozen light-years coreward newly-born republics suffer the growing pains of independence? What right do we have to bask in our own stability when our neighbors, our comrades in ideology, are struggling with a cruel blockade proposed by politicians back on Earth and Luna? That is why we must join with them, guard them, and guide them, for as long as need be.\"\
|
||||
<br><br>\
|
||||
\
|
||||
A Shelfican spokesperson, meanwhile, had only this to say:\
|
||||
<br><br>\
|
||||
\"We're probably going to regret this but, y'know, the whole thing is kind of our fault. Sure, whatever.\""
|
||||
|
||||
|
||||
@@ -243,7 +243,7 @@ var/list/mining_overlay_cache = list()
|
||||
/turf/simulated/mineral/attackby(obj/item/weapon/W as obj, mob/user as mob)
|
||||
|
||||
if (!(istype(usr, /mob/living/carbon/human) || ticker) && ticker.mode.name != "monkey")
|
||||
usr << "<span class='warning'>You don't have the dexterity to do this!</span>"
|
||||
to_chat(user, "<span class='warning'>You don't have the dexterity to do this!</span>")
|
||||
return
|
||||
|
||||
if(!density)
|
||||
@@ -263,19 +263,19 @@ var/list/mining_overlay_cache = list()
|
||||
|
||||
if(valid_tool)
|
||||
if (sand_dug)
|
||||
user << "<span class='warning'>This area has already been dug.</span>"
|
||||
to_chat(user, "<span class='warning'>This area has already been dug.</span>")
|
||||
return
|
||||
|
||||
var/turf/T = user.loc
|
||||
if (!(istype(T)))
|
||||
return
|
||||
|
||||
user << "<span class='notice'>You start digging.</span>"
|
||||
to_chat(user, "<span class='notice'>You start digging.</span>")
|
||||
playsound(user.loc, 'sound/effects/rustle1.ogg', 50, 1)
|
||||
|
||||
if(!do_after(user,40)) return
|
||||
|
||||
user << "<span class='notice'>You dug a hole.</span>"
|
||||
to_chat(user, "<span class='notice'>You dug a hole.</span>")
|
||||
GetDrilled()
|
||||
|
||||
else if(istype(W,/obj/item/weapon/storage/bag/ore))
|
||||
@@ -298,7 +298,7 @@ var/list/mining_overlay_cache = list()
|
||||
return
|
||||
var/obj/item/stack/rods/R = W
|
||||
if (R.use(1))
|
||||
user << "<span class='notice'>Constructing support lattice ...</span>"
|
||||
to_chat(user, "<span class='notice'>Constructing support lattice ...</span>")
|
||||
playsound(src, 'sound/weapons/Genhit.ogg', 50, 1)
|
||||
new /obj/structure/lattice(get_turf(src))
|
||||
|
||||
@@ -314,7 +314,7 @@ var/list/mining_overlay_cache = list()
|
||||
S.use(1)
|
||||
return
|
||||
else
|
||||
user << "<span class='warning'>The plating is going to need some support.</span>"
|
||||
to_chat(user, "<span class='warning'>The plating is going to need some support.</span>")
|
||||
return
|
||||
|
||||
|
||||
@@ -334,7 +334,17 @@ var/list/mining_overlay_cache = list()
|
||||
var/obj/item/device/measuring_tape/P = W
|
||||
user.visible_message("<span class='notice'>\The [user] extends \a [P] towards \the [src].</span>","<span class='notice'>You extend \the [P] towards \the [src].</span>")
|
||||
if(do_after(user, 15))
|
||||
user << "<span class='notice'>\The [src] has been excavated to a depth of [excavation_level]cm.</span>"
|
||||
to_chat(user, "<span class='notice'>\The [src] has been excavated to a depth of [excavation_level]cm.</span>")
|
||||
return
|
||||
|
||||
if(istype(W, /obj/item/device/xenoarch_multi_tool))
|
||||
var/obj/item/device/xenoarch_multi_tool/C = W
|
||||
if(C.mode) //Mode means scanning
|
||||
C.depth_scanner.scan_atom(user, src)
|
||||
else
|
||||
user.visible_message("<span class='notice'>\The [user] extends \the [C] over \the [src], a flurry of red beams scanning \the [src]'s surface!</span>", "<span class='notice'>You extend \the [C] over \the [src], a flurry of red beams scanning \the [src]'s surface!</span>")
|
||||
if(do_after(user, 15))
|
||||
to_chat(user, "<span class='notice'>\The [src] has been excavated to a depth of [excavation_level]cm.</span>")
|
||||
return
|
||||
|
||||
if (istype(W, /obj/item/weapon/pickaxe))
|
||||
@@ -356,7 +366,7 @@ var/list/mining_overlay_cache = list()
|
||||
if(newDepth > F.excavation_required) // Digging too deep can break the item. At least you won't summon a Balrog (probably)
|
||||
fail_message = ". <b>[pick("There is a crunching noise","[W] collides with some different rock","Part of the rock face crumbles away","Something breaks under [W]")]</b>"
|
||||
|
||||
user << "<span class='notice'>You start [P.drill_verb][fail_message].</span>"
|
||||
to_chat(user, "<span class='notice'>You start [P.drill_verb][fail_message].</span>")
|
||||
|
||||
if(fail_message && prob(90))
|
||||
if(prob(25))
|
||||
@@ -375,7 +385,7 @@ var/list/mining_overlay_cache = list()
|
||||
else if(newDepth > F.excavation_required - F.clearance_range) // Not quite right but you still extract your find, the closer to the bottom the better, but not above 80%
|
||||
excavate_find(prob(80 * (F.excavation_required - newDepth) / F.clearance_range), F)
|
||||
|
||||
user << "<span class='notice'>You finish [P.drill_verb] \the [src].</span>"
|
||||
to_chat(user, "<span class='notice'>You finish [P.drill_verb] \the [src].</span>")
|
||||
|
||||
if(newDepth >= 200) // This means the rock is mined out fully
|
||||
var/obj/structure/boulder/B
|
||||
@@ -480,7 +490,7 @@ var/list/mining_overlay_cache = list()
|
||||
if(prob(50))
|
||||
pain = 1
|
||||
for(var/mob/living/M in range(src, 200))
|
||||
M << "<span class='danger'>[pick("A high-pitched [pick("keening","wailing","whistle")]","A rumbling noise like [pick("thunder","heavy machinery")]")] somehow penetrates your mind before fading away!</span>"
|
||||
to_chat(M, "<span class='danger'>[pick("A high-pitched [pick("keening","wailing","whistle")]","A rumbling noise like [pick("thunder","heavy machinery")]")] somehow penetrates your mind before fading away!</span>")
|
||||
if(pain)
|
||||
flick("pain",M.pain)
|
||||
if(prob(50))
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
desc = "It's a g-g-g-g-ghooooost!" //jinkies!
|
||||
icon = 'icons/mob/ghost.dmi'
|
||||
icon_state = "ghost"
|
||||
layer = 3.9 //Just below normal mobs
|
||||
layer = BELOW_MOB_LAYER
|
||||
plane = PLANE_GHOSTS
|
||||
alpha = 127
|
||||
stat = DEAD
|
||||
@@ -795,5 +795,18 @@ mob/observer/dead/MayRespawn(var/feedback = 0)
|
||||
/mob/observer/dead/is_deaf()
|
||||
return FALSE
|
||||
|
||||
/mob/observer/dead/verb/paialert()
|
||||
set category = "Ghost"
|
||||
set name = "Blank pAI alert"
|
||||
set desc = "Flash an indicator light on available blank pAI devices for a smidgen of hope."
|
||||
if(usr.client.prefs.be_special & BE_PAI)
|
||||
for(var/obj/item/device/paicard/p in world)
|
||||
var/obj/item/device/paicard/PP = p
|
||||
if(PP.pai == null)
|
||||
PP.icon = 'icons/obj/pda_vr.dmi' // VOREStation Edit
|
||||
PP.overlays += "pai-ghostalert"
|
||||
spawn(54)
|
||||
PP.overlays.Cut()
|
||||
|
||||
/mob/observer/dead/speech_bubble_appearance()
|
||||
return "ghost"
|
||||
|
||||
@@ -1,16 +1,3 @@
|
||||
/mob/observer/dead/verb/paialert()
|
||||
set category = "Ghost"
|
||||
set name = "Blank pAI alert"
|
||||
set desc = "Flash an indicator light on available blank pAI devices for a smidgen of hope."
|
||||
if(usr.client.prefs.be_special & BE_PAI)
|
||||
for(var/obj/item/device/paicard/p in world)
|
||||
var/obj/item/device/paicard/PP = p
|
||||
if(PP.pai == null)
|
||||
PP.icon = 'icons/obj/pda_vr.dmi'
|
||||
PP.overlays += "pai-ghostalert"
|
||||
spawn(54)
|
||||
PP.overlays.Cut()
|
||||
|
||||
/mob/observer/dead/verb/nifjoin()
|
||||
set category = "Ghost"
|
||||
set name = "Join Into Soulcatcher"
|
||||
|
||||
@@ -302,11 +302,6 @@
|
||||
else adverb = " a very lengthy message"
|
||||
message = "<B>[speaker]</B> [verb][adverb]."
|
||||
|
||||
if(src.status_flags & PASSEMOTES)
|
||||
for(var/obj/item/weapon/holder/H in src.contents)
|
||||
H.show_message(message)
|
||||
for(var/mob/living/M in src.contents)
|
||||
M.show_message(message)
|
||||
src.show_message(message)
|
||||
|
||||
/mob/proc/hear_sleep(var/message)
|
||||
|
||||
@@ -139,7 +139,6 @@ var/list/holder_mob_icon_cache = list()
|
||||
grabber << "<span class='notice'>You scoop up \the [src]!</span>"
|
||||
src << "<span class='notice'>\The [grabber] scoops you up!</span>"
|
||||
|
||||
grabber.status_flags |= PASSEMOTES
|
||||
H.sync(src)
|
||||
return H
|
||||
|
||||
|
||||
@@ -61,9 +61,9 @@
|
||||
colour = "terminus"
|
||||
key = "4"
|
||||
flags = WHITELISTED
|
||||
syllables = list ("die", "en", "skei", "van", "son", "der", "aar", "ch", "op", "ruk", "aa", "be", "ne", "het",
|
||||
"ek", "ras", "ver", "zan", "das", "waa", "geb", "vol", "lu", "min", "breh", "rus", "stv", "ee", "goe", "sk",
|
||||
"la", "ver", "we", "ge", "luk", "an", "ar", "at", "es", "et", "bel", "du", "jaa", "ch", "kk", "gh", "ll", "uu", "wat")
|
||||
syllables = list (".a", "spa", "pan", "blaif", "stra", "!u", "!ei", "!am", "by", ".y", "gry", "zbly", "!y", "fl",
|
||||
"sm", "rn", "cpi", "ku", "koi", "pr", "glau", "stu", "ved", "ki", "tsa", "xau", "jbu", "sny", "stro", "nu",
|
||||
"uan", "ju", "!i", "ge", "luk", "an", "ar", "at", "es", "et", "bel", "ki", "jaa", "ch", "ki", "gh", "ll", "uu", "wat")
|
||||
|
||||
// Criminal language.
|
||||
/datum/language/gutter
|
||||
|
||||
@@ -99,7 +99,7 @@
|
||||
return (copytext(message, length(message)) == "!") ? 2 : 1
|
||||
|
||||
/datum/language/proc/broadcast(var/mob/living/speaker,var/message,var/speaker_mask)
|
||||
log_say("(HIVE) [message]", src)
|
||||
log_say("(HIVE) [message]", speaker)
|
||||
|
||||
if(!speaker_mask) speaker_mask = speaker.name
|
||||
message = format_message(message, get_spoken_verb(message))
|
||||
|
||||
@@ -33,7 +33,6 @@
|
||||
if(!istype(H) || !src || !(src.Adjacent(H)))
|
||||
return 0
|
||||
H << "You feel your being twine with that of \the [src] as it merges with your biomass."
|
||||
H.status_flags |= PASSEMOTES
|
||||
src << "You feel your being twine with that of \the [H] as you merge with its biomass."
|
||||
loc = H
|
||||
verbs += /mob/living/carbon/alien/diona/proc/split
|
||||
@@ -66,4 +65,3 @@
|
||||
for(var/atom/A in M.contents)
|
||||
if(istype(A,/mob/living/simple_animal/borer) || istype(A,/obj/item/weapon/holder))
|
||||
return
|
||||
M.status_flags &= ~PASSEMOTES
|
||||
@@ -6,6 +6,7 @@
|
||||
icon = 'icons/obj/assemblies.dmi'
|
||||
icon_state = "mmi_empty"
|
||||
w_class = ITEMSIZE_NORMAL
|
||||
can_speak = 1
|
||||
origin_tech = list(TECH_BIO = 3)
|
||||
|
||||
req_access = list(access_robotics)
|
||||
|
||||
@@ -5,8 +5,8 @@
|
||||
|
||||
message = sanitize(message)
|
||||
|
||||
if(!(container && istype(container, /obj/item/device/mmi)))
|
||||
return //No MMI, can't speak, bucko./N
|
||||
if(!(container && container.can_speak))
|
||||
return //Certain objects can speak, like MMIs. Most others cannot. -Q
|
||||
else
|
||||
var/datum/language/speaking = parse_language(message)
|
||||
if(speaking)
|
||||
|
||||
@@ -1573,7 +1573,7 @@
|
||||
return species.fire_icon_state
|
||||
|
||||
// Called by job_controller. Makes drones start with a permit, might be useful for other people later too.
|
||||
/mob/living/carbon/human/equip_post_job() //Drone Permit moved to equip_survival_gear()
|
||||
/mob/living/carbon/human/equip_post_job()
|
||||
var/braintype = get_FBP_type()
|
||||
if(braintype == FBP_DRONE)
|
||||
var/turf/T = get_turf(src)
|
||||
@@ -1583,8 +1583,9 @@
|
||||
|
||||
/mob/living/carbon/human/proc/update_icon_special() //For things such as teshari hiding and whatnot.
|
||||
if(status_flags & HIDING) // Hiding? Carry on.
|
||||
if(stat == DEAD || paralysis || weakened || stunned) //stunned/knocked down by something that isn't the rest verb? Note: This was tried with INCAPACITATION_STUNNED, but that refused to work.
|
||||
status_flags &= ~HIDING //No hiding for you. Mob layer should be updated naturally, but it actually isn't.
|
||||
if(stat == DEAD || paralysis || weakened || stunned || restrained()) //stunned/knocked down by something that isn't the rest verb? Note: This was tried with INCAPACITATION_STUNNED, but that refused to work.
|
||||
reset_plane_and_layer()
|
||||
status_flags &= ~HIDING
|
||||
else
|
||||
layer = HIDING_LAYER
|
||||
|
||||
|
||||
@@ -279,20 +279,3 @@
|
||||
to_chat(src, "<span class='critical'>Your regeneration is interrupted!</span>")
|
||||
nutrition -= 75
|
||||
active_regen = FALSE
|
||||
|
||||
/mob/living/carbon/human/proc/hide_humanoid()
|
||||
set name = "Hide"
|
||||
set desc = "Allows you to hide beneath tables or certain items. Toggled on or off."
|
||||
set category = "Abilities"
|
||||
|
||||
if(stat == DEAD || paralysis || weakened || stunned || restrained()) // No hiding if you're stunned!
|
||||
return
|
||||
|
||||
if(status_flags & HIDING)
|
||||
layer = MOB_LAYER
|
||||
to_chat(src, "<font color='blue'>You have stopped hiding.</font>")
|
||||
else
|
||||
layer = HIDING_LAYER //Just above cables with their 2.44
|
||||
to_chat(src, "<font color='blue'>You are now hiding.</font>")
|
||||
|
||||
status_flags ^= HIDING
|
||||
|
||||
@@ -853,28 +853,6 @@
|
||||
if(status_flags & GODMODE)
|
||||
return 0 //godmode
|
||||
|
||||
var/obj/item/organ/internal/diona/node/light_organ = locate() in internal_organs
|
||||
|
||||
if(!isSynthetic())
|
||||
if(light_organ && !light_organ.is_broken())
|
||||
var/light_amount = 0 //how much light there is in the place, affects receiving nutrition and healing
|
||||
if(isturf(loc)) //else, there's considered to be no light
|
||||
var/turf/T = loc
|
||||
light_amount = T.get_lumcount() * 10
|
||||
nutrition += light_amount
|
||||
traumatic_shock -= light_amount
|
||||
|
||||
if(species.flags & IS_PLANT)
|
||||
if(nutrition > 450)
|
||||
nutrition = 450
|
||||
|
||||
if(light_amount >= 3) //if there's enough light, heal
|
||||
adjustBruteLoss(-(round(light_amount/2)))
|
||||
adjustFireLoss(-(round(light_amount/2)))
|
||||
adjustToxLoss(-(light_amount))
|
||||
adjustOxyLoss(-(light_amount))
|
||||
//TODO: heal wounds, heal broken limbs.
|
||||
|
||||
if(species.light_dam)
|
||||
var/light_amount = 0
|
||||
if(isturf(loc))
|
||||
@@ -906,14 +884,7 @@
|
||||
var/growlsound = pick(hunger_sounds)
|
||||
var/growlmultiplier = 100 - (nutrition / 250 * 100)
|
||||
playsound(src, growlsound, vol = growlmultiplier, vary = 1, falloff = 0.1, ignore_walls = TRUE, preference = /datum/client_preference/digestion_noises)
|
||||
|
||||
if(!isSynthetic() && (species.flags & IS_PLANT) && (!light_organ || light_organ.is_broken()))
|
||||
if(nutrition < 200)
|
||||
take_overall_damage(2,0)
|
||||
|
||||
//traumatic_shock is updated every tick, incrementing that is pointless - shock_stage is the counter.
|
||||
//Not that it matters much for diona, who have NO_PAIN.
|
||||
shock_stage++
|
||||
// VOREStation Edit End
|
||||
|
||||
// TODO: stomach and bloodstream organ.
|
||||
if(!isSynthetic())
|
||||
|
||||
@@ -114,7 +114,7 @@
|
||||
|
||||
inherent_verbs = list(
|
||||
/mob/living/carbon/human/proc/sonar_ping,
|
||||
/mob/living/carbon/human/proc/hide_humanoid
|
||||
/mob/living/proc/hide
|
||||
)
|
||||
|
||||
/datum/species/teshari/equip_survival_gear(var/mob/living/carbon/human/H)
|
||||
|
||||
@@ -407,3 +407,33 @@
|
||||
qdel(D)
|
||||
|
||||
H.visible_message("<span class='danger'>\The [H] splits apart with a wet slithering noise!</span>")
|
||||
|
||||
/datum/species/diona/handle_environment_special(var/mob/living/carbon/human/H)
|
||||
if(H.inStasisNow())
|
||||
return
|
||||
|
||||
var/obj/item/organ/internal/diona/node/light_organ = locate() in H.internal_organs
|
||||
|
||||
if(light_organ && !light_organ.is_broken())
|
||||
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 = T.get_lumcount() * 10
|
||||
H.nutrition += light_amount
|
||||
H.shock_stage -= light_amount
|
||||
|
||||
if(H.nutrition > 450)
|
||||
H.nutrition = 450
|
||||
if(light_amount >= 3) //if there's enough light, heal
|
||||
H.adjustBruteLoss(-(round(light_amount/2)))
|
||||
H.adjustFireLoss(-(round(light_amount/2)))
|
||||
H.adjustToxLoss(-(light_amount))
|
||||
H.adjustOxyLoss(-(light_amount))
|
||||
//TODO: heal wounds, heal broken limbs.
|
||||
|
||||
else if(H.nutrition < 200)
|
||||
H.take_overall_damage(2,0)
|
||||
|
||||
//traumatic_shock is updated every tick, incrementing that is pointless - shock_stage is the counter.
|
||||
//Not that it matters much for diona, who have NO_PAIN.
|
||||
H.shock_stage++
|
||||
|
||||
@@ -339,7 +339,7 @@
|
||||
|
||||
inherent_verbs = list(
|
||||
/mob/living/carbon/human/proc/sonar_ping,
|
||||
/mob/living/carbon/human/proc/hide_humanoid,
|
||||
/mob/living/proc/hide,
|
||||
/mob/living/proc/shred_limb,
|
||||
/mob/living/proc/toggle_pass_table
|
||||
)
|
||||
|
||||
@@ -6,7 +6,8 @@
|
||||
var/is_adult = 0
|
||||
speak_emote = list("chirps")
|
||||
|
||||
layer = 5
|
||||
plane = MOB_PLANE
|
||||
layer = ABOVE_MOB_LAYER
|
||||
maxHealth = 150
|
||||
health = 150
|
||||
gender = NEUTER
|
||||
|
||||
@@ -13,7 +13,6 @@
|
||||
var/mutable_appearance/dsma = new(dsoverlay) //Changing like ten things, might as well.
|
||||
dsma.alpha = 0
|
||||
dsma.plane = PLANE_LIGHTING
|
||||
dsma.layer = LIGHTING_LAYER + 0.1
|
||||
dsma.blend_mode = BLEND_ADD
|
||||
dsoverlay.appearance = dsma
|
||||
|
||||
@@ -881,7 +880,6 @@ default behaviour is:
|
||||
for(var/atom/A in M.contents)
|
||||
if(istype(A,/mob/living/simple_animal/borer) || istype(A,/obj/item/weapon/holder))
|
||||
return
|
||||
M.status_flags &= ~PASSEMOTES
|
||||
|
||||
else if(istype(H.loc,/obj/item/clothing/accessory/holster))
|
||||
var/obj/item/clothing/accessory/holster/holster = H.loc
|
||||
@@ -1226,7 +1224,7 @@ default behaviour is:
|
||||
return UNDERWATER
|
||||
else
|
||||
return ..()
|
||||
|
||||
|
||||
//Add an entry to overlays, assuming it exists
|
||||
/mob/living/proc/apply_hud(cache_index, var/image/I)
|
||||
hud_list[cache_index] = I
|
||||
|
||||
@@ -6,9 +6,12 @@
|
||||
if(stat == DEAD || paralysis || weakened || stunned || restrained())
|
||||
return
|
||||
|
||||
if(layer == HIDING_LAYER)
|
||||
layer = MOB_LAYER
|
||||
src << text("<font color='blue'>You have stopped hiding.</font>")
|
||||
if(status_flags & HIDING)
|
||||
status_flags &= ~HIDING
|
||||
reset_plane_and_layer()
|
||||
to_chat(src,"<span class='notice'>You have stopped hiding.</span>")
|
||||
else
|
||||
status_flags |= HIDING
|
||||
layer = HIDING_LAYER //Just above cables with their 2.44
|
||||
src << text("<font color='blue'>You are now hiding.</font>")
|
||||
plane = OBJ_PLANE
|
||||
to_chat(src,"<span class='notice'>You are now hiding.</span>")
|
||||
|
||||
@@ -308,7 +308,6 @@ proc/get_radio_key_from_channel(var/channel)
|
||||
var/image/speech_bubble = image('icons/mob/talk_vr.dmi',src,"[speech_type][speech_bubble_test]") //VOREStation Edit - talk_vr.dmi instead of talk.dmi for right-side icons
|
||||
images_to_clients[speech_bubble] = list()
|
||||
|
||||
|
||||
// Attempt Multi-Z Talking
|
||||
var/mob/above = src.shadow
|
||||
while(!QDELETED(above))
|
||||
@@ -375,8 +374,11 @@ proc/get_radio_key_from_channel(var/channel)
|
||||
return 1
|
||||
|
||||
/mob/living/proc/say_signlang(var/message, var/verb="gestures", var/datum/language/language)
|
||||
for (var/mob/O in viewers(src, null))
|
||||
O.hear_signlang(message, verb, language, src)
|
||||
var/list/potentials = get_mobs_and_objs_in_view_fast(src, world.view)
|
||||
var/list/mobs = potentials["mobs"]
|
||||
for(var/hearer in mobs)
|
||||
var/mob/M = hearer
|
||||
M.hear_signlang(message, verb, language, src)
|
||||
return 1
|
||||
|
||||
/obj/effect/speech_bubble
|
||||
|
||||
@@ -131,7 +131,7 @@
|
||||
ui = nanomanager.try_update_ui(user, user, id, ui, data, force_open)
|
||||
if(!ui)
|
||||
// Don't copy-paste this unless you're making a pAI software module!
|
||||
ui = new(user, user, id, "pai_manifest.tmpl", "Crew Manifest", 450, 600)
|
||||
ui = new(user, user, id, "crew_manifest.tmpl", "Crew Manifest", 450, 600)
|
||||
ui.set_initial_data(data)
|
||||
ui.open()
|
||||
ui.set_auto_update(1)
|
||||
|
||||
@@ -199,6 +199,21 @@
|
||||
wrapped = null
|
||||
//update_icon()
|
||||
|
||||
/obj/item/weapon/gripper/proc/drop_item_nm()
|
||||
|
||||
if(!wrapped)
|
||||
for(var/obj/item/thing in src.contents)
|
||||
thing.loc = get_turf(src)
|
||||
return
|
||||
|
||||
if(wrapped.loc != src)
|
||||
wrapped = null
|
||||
return
|
||||
|
||||
wrapped.loc = get_turf(src)
|
||||
wrapped = null
|
||||
//update_icon()
|
||||
|
||||
/obj/item/weapon/gripper/attack(mob/living/carbon/M as mob, mob/living/carbon/user as mob)
|
||||
if(wrapped) //The force of the wrapped obj gets set to zero during the attack() and afterattack().
|
||||
force_holder = wrapped.force
|
||||
|
||||
@@ -1114,4 +1114,10 @@
|
||||
return
|
||||
|
||||
/mob/living/silicon/robot/is_sentient()
|
||||
return braintype != "Drone"
|
||||
return braintype != "Drone"
|
||||
|
||||
|
||||
/mob/living/silicon/robot/drop_item()
|
||||
if(module_active && istype(module_active,/obj/item/weapon/gripper))
|
||||
var/obj/item/weapon/gripper/G = module_active
|
||||
G.drop_item_nm()
|
||||
@@ -2,6 +2,7 @@
|
||||
/mob/living/simple_animal/hostile/bear
|
||||
name = "space bear"
|
||||
desc = "RawrRawr!!"
|
||||
tt_desc = "Ursinae aetherius" //...bearspace? Maybe.
|
||||
icon_state = "bear"
|
||||
icon_living = "bear"
|
||||
icon_dead = "bear_dead"
|
||||
|
||||
@@ -168,9 +168,6 @@
|
||||
|
||||
host.reset_view(null)
|
||||
host.machine = null
|
||||
|
||||
var/mob/living/H = host
|
||||
H.status_flags &= ~PASSEMOTES
|
||||
host = null
|
||||
return
|
||||
|
||||
|
||||
@@ -104,7 +104,6 @@
|
||||
M << "Something disgusting and slimy wiggles into your ear!"
|
||||
|
||||
src.host = M
|
||||
src.host.status_flags |= PASSEMOTES
|
||||
src.forceMove(M)
|
||||
|
||||
//Update their traitor status.
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
/mob
|
||||
density = 1
|
||||
layer = 4.0
|
||||
layer = MOB_LAYER
|
||||
plane = MOB_PLANE
|
||||
animate_movement = 2
|
||||
flags = PROXMOVE
|
||||
var/datum/mind/mind
|
||||
|
||||
@@ -31,7 +31,6 @@
|
||||
var/force_down //determines if the affecting mob will be pinned to the ground
|
||||
var/dancing //determines if assailant and affecting keep looking at each other. Basically a wrestling position
|
||||
|
||||
layer = 21
|
||||
abstract = 1
|
||||
item_state = "nothing"
|
||||
w_class = ITEMSIZE_HUGE
|
||||
@@ -194,7 +193,7 @@
|
||||
return
|
||||
var/shift = 0
|
||||
var/adir = get_dir(assailant, affecting)
|
||||
affecting.layer = 4
|
||||
affecting.layer = MOB_LAYER
|
||||
switch(state)
|
||||
if(GRAB_PASSIVE)
|
||||
shift = 8
|
||||
@@ -217,7 +216,7 @@
|
||||
switch(adir)
|
||||
if(NORTH)
|
||||
animate(affecting, pixel_x = 0, pixel_y =-shift, 5, 1, LINEAR_EASING)
|
||||
affecting.layer = 3.9
|
||||
affecting.layer = BELOW_MOB_LAYER
|
||||
if(SOUTH)
|
||||
animate(affecting, pixel_x = 0, pixel_y = shift, 5, 1, LINEAR_EASING)
|
||||
if(WEST)
|
||||
@@ -396,7 +395,7 @@
|
||||
|
||||
/obj/item/weapon/grab/Destroy()
|
||||
animate(affecting, pixel_x = 0, pixel_y = 0, 4, 1, LINEAR_EASING)
|
||||
affecting.layer = 4
|
||||
affecting.reset_plane_and_layer()
|
||||
if(affecting)
|
||||
affecting.grabbed_by -= src
|
||||
affecting = null
|
||||
|
||||
@@ -635,7 +635,7 @@ var/global/image/backplane
|
||||
else
|
||||
var/area/A = get_area(src)
|
||||
return A.sound_env
|
||||
|
||||
|
||||
/mob/proc/position_hud_item(var/obj/item/item, var/slot)
|
||||
if(!istype(hud_used) || !slot || !LAZYLEN(hud_used.slot_info))
|
||||
return
|
||||
|
||||
@@ -135,7 +135,7 @@
|
||||
//Lighting is weird and has matrix shenanigans. Think of this as turning on/off darkness.
|
||||
/obj/screen/plane_master/fullbright
|
||||
plane = PLANE_LIGHTING
|
||||
layer = LIGHTING_LAYER+1
|
||||
layer = LAYER_HUD_BASE+1 // This MUST be above the lighting plane_master
|
||||
color = null //To break lighting when visible (this is sorta backwards)
|
||||
alpha = 0 //Starts full opaque
|
||||
invisibility = 101
|
||||
|
||||
@@ -519,3 +519,8 @@ nanoui is used to open and update nano browser uis
|
||||
*/
|
||||
/datum/nanoui/proc/update(var/force_open = 0)
|
||||
src_object.ui_interact(user, ui_key, src, force_open, master_ui, state)
|
||||
|
||||
/datum/nanoui/proc/append_template(var/key, var/filename)
|
||||
add_template(key, filename)
|
||||
open()
|
||||
update(1)
|
||||
|
||||
@@ -52,13 +52,13 @@
|
||||
. = ..() //Should be an interger value for infection level
|
||||
if(!.) return
|
||||
|
||||
var/antibiotics = owner.reagents.get_reagent_amount("spaceacillin")
|
||||
var/antibiotics = owner.chem_effects[CE_ANTIBIOTIC]
|
||||
|
||||
if(. >= 2 && antibiotics < 5) //INFECTION_LEVEL_TWO
|
||||
if(. >= 2 && antibiotics < ANTIBIO_NORM) //INFECTION_LEVEL_TWO
|
||||
if (prob(3))
|
||||
take_damage(1,silent=prob(30))
|
||||
|
||||
if(. >= 3 && antibiotics < 30) //INFECTION_LEVEL_THREE
|
||||
if(. >= 3 && antibiotics < ANTIBIO_OD) //INFECTION_LEVEL_THREE
|
||||
if (prob(50))
|
||||
take_damage(1,silent=prob(15))
|
||||
|
||||
|
||||
@@ -621,13 +621,13 @@ Note that amputating the affected organ does in fact remove the infection from t
|
||||
handle_germ_effects()
|
||||
|
||||
/obj/item/organ/external/proc/handle_germ_sync()
|
||||
var/antibiotics = owner.reagents.get_reagent_amount("spaceacillin")
|
||||
var/antibiotics = owner.chem_effects[CE_ANTIBIOTIC]
|
||||
for(var/datum/wound/W in wounds)
|
||||
//Open wounds can become infected
|
||||
if (owner.germ_level > W.germ_level && W.infection_check())
|
||||
W.germ_level++
|
||||
|
||||
if (antibiotics < 5)
|
||||
if (antibiotics < ANTIBIO_NORM)
|
||||
for(var/datum/wound/W in wounds)
|
||||
//Infected wounds raise the organ's germ level
|
||||
if (W.germ_level > germ_level)
|
||||
@@ -638,9 +638,9 @@ Note that amputating the affected organ does in fact remove the infection from t
|
||||
. = ..() //May be null or an infection level, if null then no specific processing needed here
|
||||
if(!.) return
|
||||
|
||||
var/antibiotics = owner.reagents.get_reagent_amount("spaceacillin")
|
||||
var/antibiotics = owner.chem_effects[CE_ANTIBIOTIC]
|
||||
|
||||
if(. >= 2 && antibiotics < 5) //INFECTION_LEVEL_TWO
|
||||
if(. >= 2 && antibiotics < ANTIBIO_NORM) //INFECTION_LEVEL_TWO
|
||||
//spread the infection to internal organs
|
||||
var/obj/item/organ/target_organ = null //make internal organs become infected one at a time instead of all at once
|
||||
for (var/obj/item/organ/I in internal_organs)
|
||||
@@ -672,7 +672,7 @@ Note that amputating the affected organ does in fact remove the infection from t
|
||||
if (parent.germ_level < INFECTION_LEVEL_ONE*2 || prob(30))
|
||||
parent.germ_level++
|
||||
|
||||
if(. >= 3 && antibiotics < 30) //INFECTION_LEVEL_THREE
|
||||
if(. >= 3 && antibiotics < ANTIBIO_OD) //INFECTION_LEVEL_THREE
|
||||
if (!(status & ORGAN_DEAD))
|
||||
status |= ORGAN_DEAD
|
||||
owner << "<span class='notice'>You can't feel your [name] anymore...</span>"
|
||||
|
||||
@@ -58,7 +58,7 @@ var/global/list/limb_icon_cache = list()
|
||||
//Every 'addon' below requires information from species
|
||||
if(!owner || !owner.species)
|
||||
return
|
||||
|
||||
|
||||
//Eye color/icon
|
||||
var/should_have_eyes = owner.should_have_organ(O_EYES)
|
||||
var/has_eye_color = owner.species.appearance_flags & HAS_EYE_COLOR
|
||||
|
||||
@@ -13,7 +13,8 @@
|
||||
w_class = ITEMSIZE_TINY
|
||||
throw_range = 1
|
||||
throw_speed = 1
|
||||
layer = 4
|
||||
plane = MOB_PLANE
|
||||
layer = MOB_LAYER
|
||||
pressure_resistance = 1
|
||||
slot_flags = SLOT_HEAD
|
||||
body_parts_covered = HEAD
|
||||
|
||||
@@ -8,7 +8,8 @@
|
||||
w_class = ITEMSIZE_SMALL
|
||||
throw_range = 2
|
||||
throw_speed = 1
|
||||
layer = 4
|
||||
plane = MOB_PLANE
|
||||
layer = MOB_LAYER
|
||||
pressure_resistance = 1
|
||||
attack_verb = list("bapped")
|
||||
var/page = 1 // current page
|
||||
|
||||
@@ -184,11 +184,18 @@
|
||||
var/instant = 0
|
||||
var/colourName = "red" //for updateIcon purposes
|
||||
|
||||
suicide_act(mob/user)
|
||||
var/datum/gender/TU = gender_datums[user.get_visible_gender()]
|
||||
viewers(user) << "<font color='red'><b>[user] is jamming the [src.name] up [TU.his] nose and into [TU.his] brain. It looks like [TU.he] [TU.is] trying to commit suicide.</b></font>"
|
||||
return (BRUTELOSS|OXYLOSS)
|
||||
/obj/item/weapon/pen/crayon/suicide_act(mob/user)
|
||||
var/datum/gender/TU = gender_datums[user.get_visible_gender()]
|
||||
viewers(user) << "<font color='red'><b>[user] is jamming the [src.name] up [TU.his] nose and into [TU.his] brain. It looks like [TU.he] [TU.is] trying to commit suicide.</b></font>"
|
||||
return (BRUTELOSS|OXYLOSS)
|
||||
|
||||
New()
|
||||
name = "[colourName] crayon"
|
||||
..()
|
||||
/obj/item/weapon/pen/crayon/New()
|
||||
name = "[colourName] crayon"
|
||||
|
||||
/obj/item/weapon/pen/crayon/marker
|
||||
name = "marker"
|
||||
desc = "A chisel-tip permanent marker. Hopefully non-toxic."
|
||||
icon_state = "markerred"
|
||||
|
||||
/obj/item/weapon/pen/crayon/marker/New()
|
||||
name = "[colourName] marker"
|
||||
|
||||
@@ -9,7 +9,8 @@
|
||||
icon = 'icons/obj/machines/power/fusion.dmi'
|
||||
icon_state = "emfield_s1"
|
||||
alpha = 50
|
||||
layer = 4
|
||||
plane = MOB_PLANE
|
||||
layer = ABOVE_MOB_LAYER
|
||||
light_color = "#cc7700"
|
||||
|
||||
var/size = 1
|
||||
|
||||
@@ -2,7 +2,6 @@
|
||||
name = "fuel rod assembly"
|
||||
icon = 'icons/obj/machines/power/fusion.dmi'
|
||||
icon_state = "fuel_assembly"
|
||||
layer = 4
|
||||
|
||||
var/material_name
|
||||
|
||||
|
||||
@@ -4,7 +4,6 @@
|
||||
icon_state = "fuel_compressor1"
|
||||
density = 1
|
||||
anchored = 1
|
||||
layer = 4
|
||||
|
||||
circuit = /obj/item/weapon/circuitboard/fusion_fuel_compressor
|
||||
|
||||
|
||||
@@ -16,7 +16,8 @@
|
||||
icon = 'icons/obj/lighting.dmi'
|
||||
icon_state = "tube-construct-stage1"
|
||||
anchored = 1
|
||||
layer = 5
|
||||
plane = MOB_PLANE
|
||||
layer = ABOVE_MOB_LAYER
|
||||
var/stage = 1
|
||||
var/fixture_type = "tube"
|
||||
var/sheets_refunded = 2
|
||||
@@ -132,7 +133,6 @@
|
||||
icon = 'icons/obj/lighting.dmi'
|
||||
icon_state = "bulb-construct-stage1"
|
||||
anchored = 1
|
||||
layer = 5
|
||||
stage = 1
|
||||
fixture_type = "bulb"
|
||||
sheets_refunded = 1
|
||||
@@ -143,6 +143,7 @@
|
||||
icon = 'icons/obj/lighting.dmi'
|
||||
icon_state = "flamp-construct-stage1"
|
||||
anchored = 0
|
||||
plane = OBJ_PLANE
|
||||
layer = OBJ_LAYER
|
||||
stage = 1
|
||||
fixture_type = "flamp"
|
||||
@@ -156,7 +157,8 @@
|
||||
icon_state = "tube1"
|
||||
desc = "A lighting fixture."
|
||||
anchored = 1
|
||||
layer = 5 // They were appearing under mobs which is a little weird - Ostaf
|
||||
plane = MOB_PLANE
|
||||
layer = ABOVE_MOB_LAYER
|
||||
use_power = 2
|
||||
idle_power_usage = 2
|
||||
active_power_usage = 20
|
||||
@@ -197,6 +199,7 @@
|
||||
fitting = "bulb"
|
||||
brightness_range = 5
|
||||
brightness_power = 2
|
||||
plane = OBJ_PLANE
|
||||
layer = OBJ_LAYER
|
||||
brightness_color = "#FFF4E5"
|
||||
desc = "A floor lamp."
|
||||
@@ -204,11 +207,6 @@
|
||||
shows_alerts = FALSE
|
||||
var/lamp_shade = 1
|
||||
|
||||
//Vorestation addition, to override the New() proc further below, since this is a lamp.
|
||||
/obj/machinery/light/flamp/New()
|
||||
..()
|
||||
layer = OBJ_LAYER
|
||||
|
||||
/obj/machinery/light/small/emergency
|
||||
brightness_range = 4
|
||||
brightness_power = 2
|
||||
@@ -259,9 +257,6 @@
|
||||
broken(1)
|
||||
spawn(1)
|
||||
update(0)
|
||||
//Vorestation addition, so large mobs stop looking stupid in front of lights.
|
||||
if (dir == 2)
|
||||
layer = 5
|
||||
|
||||
/obj/machinery/light/Destroy()
|
||||
var/area/A = get_area(src)
|
||||
|
||||
@@ -1,26 +1,19 @@
|
||||
// I hate the way macros look stupid standing near lights. I don't care how absurd this looks.
|
||||
|
||||
/obj/machinery/light_construct
|
||||
layer = 4
|
||||
|
||||
/obj/machinery/light_construct/small
|
||||
layer = 4
|
||||
|
||||
/obj/machinery/light_construct/flamp
|
||||
layer = 4
|
||||
|
||||
layer = BELOW_MOB_LAYER
|
||||
|
||||
/obj/machinery/light
|
||||
layer = 4
|
||||
layer = BELOW_MOB_LAYER
|
||||
|
||||
//Vorestation addition, to override the New() proc further below, since this is a lamp.
|
||||
/obj/machinery/light/flamp/New()
|
||||
..()
|
||||
layer = 4
|
||||
layer = initial(layer)
|
||||
|
||||
// create a new lighting fixture
|
||||
/obj/machinery/light/New()
|
||||
..()
|
||||
//Vorestation addition, so large mobs stop looking stupid in front of lights.
|
||||
if (dir == 2)
|
||||
layer = 5
|
||||
if (dir == SOUTH) // Lights are backwards, SOUTH lights face north (they are on south wall)
|
||||
layer = ABOVE_MOB_LAYER
|
||||
|
||||
@@ -12,7 +12,7 @@
|
||||
desc = "Small machine which transmits data about specific powernet"
|
||||
anchored = 1
|
||||
density = 0
|
||||
layer = 2.46 // Above cables, but should be below floors.
|
||||
layer = ABOVE_UTILITY
|
||||
icon = 'icons/obj/objects.dmi'
|
||||
icon_state = "floor_beacon" // If anyone wants to make better sprite, feel free to do so without asking me.
|
||||
|
||||
|
||||
@@ -7,7 +7,7 @@
|
||||
icon_state = "singularity_s1"
|
||||
anchored = 1
|
||||
density = 1
|
||||
layer = 6
|
||||
plane = ABOVE_PLANE
|
||||
light_range = 6
|
||||
unacidable = 1 //Don't comment this out.
|
||||
|
||||
|
||||
@@ -8,10 +8,10 @@
|
||||
icon_state = "term"
|
||||
desc = "It's an underfloor wiring terminal for power equipment."
|
||||
level = 1
|
||||
layer = TURF_LAYER
|
||||
var/obj/machinery/power/master = null
|
||||
anchored = 1
|
||||
layer = 2.6 // a bit above wires
|
||||
plane = PLATING_PLANE
|
||||
layer = WIRES_LAYER+0.01
|
||||
|
||||
|
||||
/obj/machinery/power/terminal/New()
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
/obj/effect/projectile
|
||||
icon = 'icons/effects/projectiles.dmi'
|
||||
icon_state = "bolt"
|
||||
layer = 20
|
||||
plane = ABOVE_PLANE
|
||||
|
||||
/obj/effect/projectile/New(var/turf/location)
|
||||
if(istype(location))
|
||||
|
||||
@@ -49,6 +49,7 @@
|
||||
//Effects
|
||||
var/incendiary = 0 //1 for ignite on hit, 2 for trail of fire. 3 maybe later for burst of fire around the impact point. - Mech
|
||||
var/flammability = 0 //Amount of fire stacks to add for the above.
|
||||
var/combustion = TRUE //Does this set off flammable objects on fire/hit?
|
||||
var/stun = 0
|
||||
var/weaken = 0
|
||||
var/paralyze = 0
|
||||
@@ -90,6 +91,10 @@
|
||||
//called when the projectile stops flying because it collided with something
|
||||
/obj/item/projectile/proc/on_impact(var/atom/A)
|
||||
impact_effect(effect_transform) // generate impact effect
|
||||
if(damage && damage_type == BURN)
|
||||
var/turf/T = get_turf(A)
|
||||
if(T)
|
||||
T.hotspot_expose(700, 5)
|
||||
return
|
||||
|
||||
//Checks if the projectile is eligible for embedding. Not that it necessarily will.
|
||||
@@ -132,6 +137,9 @@
|
||||
if (!istype(targloc) || !istype(curloc))
|
||||
return 1
|
||||
|
||||
if(combustion)
|
||||
curloc.hotspot_expose(700, 5)
|
||||
|
||||
if(targloc == curloc) //Shooting something in the same turf
|
||||
target.bullet_act(src, target_zone)
|
||||
on_impact(target)
|
||||
|
||||
@@ -8,6 +8,7 @@
|
||||
light_range = 2
|
||||
light_power = 0.5
|
||||
light_color = "#55AAFF"
|
||||
combustion = FALSE
|
||||
|
||||
/obj/item/projectile/animate/Bump(var/atom/change)
|
||||
if((istype(change, /obj/item) || istype(change, /obj/structure)) && !is_type_in_list(change, protected_objects))
|
||||
|
||||
@@ -122,6 +122,8 @@
|
||||
check_armour = "laser"
|
||||
light_color = "#0066FF"
|
||||
|
||||
combustion = FALSE
|
||||
|
||||
muzzle_type = /obj/effect/projectile/laser_blue/muzzle
|
||||
tracer_type = /obj/effect/projectile/laser_blue/tracer
|
||||
impact_type = /obj/effect/projectile/laser_blue/impact
|
||||
@@ -142,6 +144,8 @@
|
||||
check_armour = "laser"
|
||||
light_color = "#FF0D00"
|
||||
|
||||
combustion = FALSE
|
||||
|
||||
/obj/item/projectile/beam/lastertag/red/on_hit(var/atom/target, var/blocked = 0)
|
||||
if(istype(target, /mob/living/carbon/human))
|
||||
var/mob/living/carbon/human/M = target
|
||||
@@ -157,6 +161,8 @@
|
||||
check_armour = "laser"
|
||||
light_color = "#00C6FF"
|
||||
|
||||
combustion = FALSE
|
||||
|
||||
muzzle_type = /obj/effect/projectile/laser_omni/muzzle
|
||||
tracer_type = /obj/effect/projectile/laser_omni/tracer
|
||||
impact_type = /obj/effect/projectile/laser_omni/impact
|
||||
@@ -190,6 +196,8 @@
|
||||
damage_type = HALLOSS
|
||||
light_color = "#FFFFFF"
|
||||
|
||||
combustion = FALSE
|
||||
|
||||
muzzle_type = /obj/effect/projectile/stun/muzzle
|
||||
tracer_type = /obj/effect/projectile/stun/tracer
|
||||
impact_type = /obj/effect/projectile/stun/impact
|
||||
|
||||
@@ -191,6 +191,8 @@
|
||||
sharp = 0
|
||||
check_armour = "melee"
|
||||
|
||||
combustion = FALSE
|
||||
|
||||
/obj/item/projectile/bullet/shotgun/ion/on_hit(var/atom/target, var/blocked = 0)
|
||||
..()
|
||||
empulse(target, 0, 0, 0, 0) //Only affects what it hits
|
||||
@@ -325,6 +327,8 @@
|
||||
embed_chance = 0
|
||||
sharp = 0
|
||||
|
||||
combustion = FALSE
|
||||
|
||||
/obj/item/projectile/bullet/pistol/cap/process()
|
||||
loc = null
|
||||
qdel(src)
|
||||
@@ -6,6 +6,8 @@
|
||||
nodamage = 1
|
||||
check_armour = "energy"
|
||||
|
||||
combustion = FALSE
|
||||
|
||||
/obj/item/projectile/change/on_hit(var/atom/change)
|
||||
wabbajack(change)
|
||||
|
||||
|
||||
@@ -92,6 +92,7 @@
|
||||
light_power = 0.5
|
||||
light_color = "#33CC00"
|
||||
|
||||
combustion = FALSE
|
||||
|
||||
/obj/item/projectile/energy/dart
|
||||
name = "dart"
|
||||
@@ -101,6 +102,7 @@
|
||||
agony = 120
|
||||
check_armour = "energy"
|
||||
|
||||
combustion = FALSE
|
||||
|
||||
/obj/item/projectile/energy/bolt
|
||||
name = "bolt"
|
||||
@@ -122,6 +124,8 @@
|
||||
agony = 10
|
||||
check_armour = "bio"
|
||||
|
||||
combustion = FALSE
|
||||
|
||||
/obj/item/projectile/energy/neurotoxin
|
||||
name = "neurotoxic spit"
|
||||
icon_state = "neurotoxin"
|
||||
@@ -130,6 +134,8 @@
|
||||
agony = 80
|
||||
check_armour = "bio"
|
||||
|
||||
combustion = FALSE
|
||||
|
||||
/obj/item/projectile/energy/neurotoxin/toxic //New alien mob projectile to match the player-variant's projectiles.
|
||||
name = "neurotoxic spit"
|
||||
icon_state = "neurotoxin"
|
||||
@@ -149,6 +155,8 @@
|
||||
light_power = 0.5
|
||||
light_color = "#33CC00"
|
||||
|
||||
combustion = FALSE
|
||||
|
||||
/obj/item/projectile/energy/plasmastun
|
||||
name = "plasma pulse"
|
||||
icon_state = "plasma_stun"
|
||||
|
||||
@@ -5,6 +5,8 @@
|
||||
damage = 20
|
||||
check_armour = "energy"
|
||||
|
||||
combustion = FALSE
|
||||
|
||||
/obj/item/projectile/forcebolt/strong
|
||||
name = "force bolt"
|
||||
|
||||
|
||||
@@ -9,6 +9,9 @@
|
||||
light_range = 2
|
||||
light_power = 0.5
|
||||
light_color = "#55AAFF"
|
||||
|
||||
combustion = FALSE
|
||||
|
||||
var/sev1_range = 0
|
||||
var/sev2_range = 1
|
||||
var/sev3_range = 1
|
||||
@@ -56,6 +59,8 @@
|
||||
light_power = 0.5
|
||||
light_color = "#55AAFF"
|
||||
|
||||
combustion = FALSE
|
||||
|
||||
/obj/item/projectile/temp/on_hit(atom/target, blocked = FALSE)
|
||||
..()
|
||||
if(isliving(target))
|
||||
@@ -85,6 +90,8 @@
|
||||
name = "heat beam"
|
||||
target_temperature = 1000
|
||||
|
||||
combustion = TRUE
|
||||
|
||||
/obj/item/projectile/meteor
|
||||
name = "meteor"
|
||||
icon = 'icons/obj/meteor.dmi'
|
||||
@@ -127,6 +134,8 @@
|
||||
light_power = 0.5
|
||||
light_color = "#33CC00"
|
||||
|
||||
combustion = FALSE
|
||||
|
||||
/obj/item/projectile/energy/floramut/on_hit(var/atom/target, var/blocked = 0)
|
||||
var/mob/living/M = target
|
||||
if(ishuman(target))
|
||||
@@ -196,6 +205,8 @@
|
||||
/obj/item/projectile/beam/mindflayer
|
||||
name = "flayer ray"
|
||||
|
||||
combustion = FALSE
|
||||
|
||||
/obj/item/projectile/beam/mindflayer/on_hit(var/atom/target, var/blocked = 0)
|
||||
if(ishuman(target))
|
||||
var/mob/living/carbon/human/M = target
|
||||
@@ -218,6 +229,8 @@
|
||||
damage_type = HALLOSS
|
||||
muzzle_type = null
|
||||
|
||||
combustion = FALSE
|
||||
|
||||
/obj/item/projectile/bola/on_hit(var/atom/target, var/blocked = 0)
|
||||
if(ishuman(target))
|
||||
var/mob/living/carbon/human/M = target
|
||||
@@ -235,6 +248,8 @@
|
||||
damage_type = BRUTE
|
||||
muzzle_type = null
|
||||
|
||||
combustion = FALSE
|
||||
|
||||
/obj/item/projectile/webball/on_hit(var/atom/target, var/blocked = 0)
|
||||
if(isturf(target.loc))
|
||||
var/obj/effect/spider/stickyweb/W = locate() in get_turf(target)
|
||||
|
||||
@@ -281,7 +281,6 @@
|
||||
name = "All-In-One Grinder"
|
||||
icon = 'icons/obj/kitchen.dmi'
|
||||
icon_state = "juicer1"
|
||||
layer = 2.9
|
||||
density = 0
|
||||
anchored = 0
|
||||
use_power = 1
|
||||
|
||||
@@ -453,6 +453,9 @@
|
||||
if(adj_temp < 0 && M.bodytemperature > 310)
|
||||
M.bodytemperature = min(310, M.bodytemperature - (adj_temp * TEMPERATURE_DAMAGE_COEFFICIENT))
|
||||
|
||||
/datum/reagent/drink/overdose(var/mob/living/carbon/M, var/alien) //Add special interactions here in the future if desired.
|
||||
..()
|
||||
|
||||
// Juices
|
||||
|
||||
/datum/reagent/drink/juice/banana
|
||||
@@ -1047,11 +1050,14 @@
|
||||
adj_dizzy = -5
|
||||
adj_drowsy = -3
|
||||
adj_sleepy = -2
|
||||
overdose = 45
|
||||
|
||||
|
||||
glass_name = "Coffee Milkshake"
|
||||
glass_desc = "An energizing coffee milkshake, perfect for hot days at work.."
|
||||
|
||||
/datum/reagent/drink/milkshake/coffeeshake/overdose(var/mob/living/carbon/M, var/alien)
|
||||
M.make_jittery(5)
|
||||
|
||||
/datum/reagent/drink/rewriter
|
||||
name = "Rewriter"
|
||||
id = "rewriter"
|
||||
@@ -2847,4 +2853,4 @@
|
||||
adj_temp = -5
|
||||
|
||||
glass_name = "Mint Julep"
|
||||
glass_desc = "Minty and refreshing, perfect for a hot day."
|
||||
glass_desc = "Minty and refreshing, perfect for a hot day."
|
||||
|
||||
@@ -532,7 +532,7 @@
|
||||
/datum/reagent/corophizine/affect_blood(var/mob/living/carbon/M, var/alien, var/removed)
|
||||
..()
|
||||
M.add_chemical_effect(CE_ANTIBIOTIC, ANTIBIO_SUPER)
|
||||
|
||||
|
||||
//Based roughly on Levofloxacin's rather severe side-effects
|
||||
if(prob(20))
|
||||
M.Confuse(5)
|
||||
|
||||
@@ -49,6 +49,60 @@
|
||||
id = "crayon_dust_brown"
|
||||
color = "#846F35"
|
||||
|
||||
/datum/reagent/marker_ink
|
||||
name = "Marker ink"
|
||||
id = "marker_ink"
|
||||
description = "Intensely coloured ink used in markers."
|
||||
taste_description = "extremely bitter"
|
||||
reagent_state = LIQUID
|
||||
color = "#888888"
|
||||
overdose = 5
|
||||
|
||||
/datum/reagent/marker_ink/black
|
||||
name = "Black marker ink"
|
||||
id = "marker_ink_black"
|
||||
color = "#000000"
|
||||
|
||||
/datum/reagent/marker_ink/red
|
||||
name = "Red marker ink"
|
||||
id = "marker_ink_red"
|
||||
color = "#FE191A"
|
||||
|
||||
/datum/reagent/marker_ink/orange
|
||||
name = "Orange marker ink"
|
||||
id = "marker_ink_orange"
|
||||
color = "#FFBE4F"
|
||||
|
||||
/datum/reagent/marker_ink/yellow
|
||||
name = "Yellow marker ink"
|
||||
id = "marker_ink_yellow"
|
||||
color = "#FDFE7D"
|
||||
|
||||
/datum/reagent/marker_ink/green
|
||||
name = "Green marker ink"
|
||||
id = "marker_ink_green"
|
||||
color = "#18A31A"
|
||||
|
||||
/datum/reagent/marker_ink/blue
|
||||
name = "Blue marker ink"
|
||||
id = "marker_ink_blue"
|
||||
color = "#247CFF"
|
||||
|
||||
/datum/reagent/marker_ink/purple
|
||||
name = "Purple marker ink"
|
||||
id = "marker_ink_purple"
|
||||
color = "#CC0099"
|
||||
|
||||
/datum/reagent/marker_ink/grey //Mime
|
||||
name = "Grey marker ink"
|
||||
id = "marker_ink_grey"
|
||||
color = "#808080"
|
||||
|
||||
/datum/reagent/marker_ink/brown //Rainbow
|
||||
name = "Brown marker ink"
|
||||
id = "marker_ink_brown"
|
||||
color = "#846F35"
|
||||
|
||||
/datum/reagent/paint
|
||||
name = "Paint"
|
||||
id = "paint"
|
||||
|
||||
@@ -881,7 +881,7 @@
|
||||
name = "Red paint"
|
||||
id = "red_paint"
|
||||
result = "paint"
|
||||
required_reagents = list("plasticide" = 1, "water" = 3, "crayon_dust_red" = 1)
|
||||
required_reagents = list("plasticide" = 1, "water" = 3, "marker_ink_red" = 1)
|
||||
result_amount = 5
|
||||
|
||||
/datum/chemical_reaction/red_paint/send_data()
|
||||
@@ -891,7 +891,7 @@
|
||||
name = "Orange paint"
|
||||
id = "orange_paint"
|
||||
result = "paint"
|
||||
required_reagents = list("plasticide" = 1, "water" = 3, "crayon_dust_orange" = 1)
|
||||
required_reagents = list("plasticide" = 1, "water" = 3, "marker_ink_orange" = 1)
|
||||
result_amount = 5
|
||||
|
||||
/datum/chemical_reaction/orange_paint/send_data()
|
||||
@@ -901,7 +901,7 @@
|
||||
name = "Yellow paint"
|
||||
id = "yellow_paint"
|
||||
result = "paint"
|
||||
required_reagents = list("plasticide" = 1, "water" = 3, "crayon_dust_yellow" = 1)
|
||||
required_reagents = list("plasticide" = 1, "water" = 3, "marker_ink_yellow" = 1)
|
||||
result_amount = 5
|
||||
|
||||
/datum/chemical_reaction/yellow_paint/send_data()
|
||||
@@ -911,7 +911,7 @@
|
||||
name = "Green paint"
|
||||
id = "green_paint"
|
||||
result = "paint"
|
||||
required_reagents = list("plasticide" = 1, "water" = 3, "crayon_dust_green" = 1)
|
||||
required_reagents = list("plasticide" = 1, "water" = 3, "marker_ink_green" = 1)
|
||||
result_amount = 5
|
||||
|
||||
/datum/chemical_reaction/green_paint/send_data()
|
||||
@@ -921,7 +921,7 @@
|
||||
name = "Blue paint"
|
||||
id = "blue_paint"
|
||||
result = "paint"
|
||||
required_reagents = list("plasticide" = 1, "water" = 3, "crayon_dust_blue" = 1)
|
||||
required_reagents = list("plasticide" = 1, "water" = 3, "marker_ink_blue" = 1)
|
||||
result_amount = 5
|
||||
|
||||
/datum/chemical_reaction/blue_paint/send_data()
|
||||
@@ -931,7 +931,7 @@
|
||||
name = "Purple paint"
|
||||
id = "purple_paint"
|
||||
result = "paint"
|
||||
required_reagents = list("plasticide" = 1, "water" = 3, "crayon_dust_purple" = 1)
|
||||
required_reagents = list("plasticide" = 1, "water" = 3, "marker_ink_purple" = 1)
|
||||
result_amount = 5
|
||||
|
||||
/datum/chemical_reaction/purple_paint/send_data()
|
||||
@@ -941,7 +941,7 @@
|
||||
name = "Grey paint"
|
||||
id = "grey_paint"
|
||||
result = "paint"
|
||||
required_reagents = list("plasticide" = 1, "water" = 3, "crayon_dust_grey" = 1)
|
||||
required_reagents = list("plasticide" = 1, "water" = 3, "marker_ink_grey" = 1)
|
||||
result_amount = 5
|
||||
|
||||
/datum/chemical_reaction/grey_paint/send_data()
|
||||
@@ -951,7 +951,7 @@
|
||||
name = "Brown paint"
|
||||
id = "brown_paint"
|
||||
result = "paint"
|
||||
required_reagents = list("plasticide" = 1, "water" = 3, "crayon_dust_brown" = 1)
|
||||
required_reagents = list("plasticide" = 1, "water" = 3, "marker_ink_brown" = 1)
|
||||
result_amount = 5
|
||||
|
||||
/datum/chemical_reaction/brown_paint/send_data()
|
||||
|
||||
@@ -216,7 +216,8 @@
|
||||
|
||||
if(trans)
|
||||
to_chat(user, "<span class='notice'>You inject [trans] units of the solution. The syringe now contains [src.reagents.total_volume] units.</span>")
|
||||
add_attack_logs(user,target,"Injected with [src.name] containing [contained], trasferred [trans] units")
|
||||
if(ismob(target))
|
||||
add_attack_logs(user,target,"Injected with [src.name] containing [contained], trasferred [trans] units")
|
||||
else
|
||||
to_chat(user, "<span class='notice'>The syringe is empty.</span>")
|
||||
|
||||
|
||||
@@ -6,7 +6,8 @@
|
||||
icon_state = "conveyor0"
|
||||
name = "conveyor belt"
|
||||
desc = "A conveyor belt."
|
||||
layer = 2 // so they appear under stuff
|
||||
plane = TURF_PLANE
|
||||
layer = ABOVE_TURF_LAYER
|
||||
anchored = 1
|
||||
circuit = /obj/item/weapon/circuitboard/conveyor
|
||||
var/operating = 0 // 1 if running forward, -1 if backwards, 0 if off
|
||||
|
||||
@@ -663,7 +663,7 @@
|
||||
var/dpdir = 0 // bitmask of pipe directions
|
||||
dir = 0 // dir will contain dominant direction for junction pipes
|
||||
var/health = 10 // health points 0-10
|
||||
layer = 2.3 // slightly lower than wires and other pipes
|
||||
layer = DISPOSAL_LAYER // slightly lower than wires and other pipes
|
||||
var/base_icon_state // initial icon state on map
|
||||
var/sortType = ""
|
||||
var/subtype = 0
|
||||
|
||||
@@ -1802,6 +1802,22 @@ CIRCUITS BELOW
|
||||
build_path = /obj/item/device/universal_translator/ear
|
||||
sort_string = "HABQB"
|
||||
|
||||
/datum/design/obj/item/device/xenoarch_multi_tool
|
||||
name = "xenoarcheology multitool"
|
||||
id = "xenoarch_multitool"
|
||||
req_tech = list(TECH_MAGNET = 3, TECH_ENGINEERING = 3, TECH_BLUESPACE = 3)
|
||||
build_path = /obj/item/device/xenoarch_multi_tool
|
||||
materials = list(DEFAULT_WALL_MATERIAL = 2000, "glass" = 1000, "uranium" = 500, "phoron" = 500)
|
||||
sort_string = "HABQC"
|
||||
|
||||
/datum/design/excavationdrill
|
||||
name = "Excavation Drill"
|
||||
id = "excavationdrill"
|
||||
req_tech = list(TECH_MATERIAL = 3, TECH_POWER = 2, TECH_ENGINEERING = 2, TECH_BLUESPACE = 3)
|
||||
build_type = PROTOLATHE
|
||||
materials = list(DEFAULT_WALL_MATERIAL = 4000, "glass" = 4000)
|
||||
build_path = /obj/item/weapon/pickaxe/excavationdrill
|
||||
|
||||
/* Uncomment if someone makes these buildable
|
||||
/datum/design/circuit/general_alert
|
||||
name = "general alert console"
|
||||
|
||||
@@ -15,7 +15,8 @@
|
||||
icon_state = "shield"
|
||||
alpha = 100
|
||||
anchored = 1
|
||||
layer = 4.1 //just above mobs
|
||||
plane = MOB_PLANE
|
||||
layer = ABOVE_MOB_LAYER
|
||||
density = 0
|
||||
var/obj/machinery/shield_gen/my_gen = null
|
||||
var/strength = 0 // in Renwicks
|
||||
|
||||
@@ -56,7 +56,8 @@ How they spawn stuff is decided by behaviour vars, which are explained below
|
||||
animation.density = 0
|
||||
animation.anchored = 1
|
||||
animation.icon = 'icons/effects/effects.dmi'
|
||||
animation.layer = 3
|
||||
animation.plane = OBJ_PLANE
|
||||
animation.layer = ABOVE_JUNK_LAYER
|
||||
animation.master = summoned_object
|
||||
|
||||
for(var/varName in newVars)
|
||||
|
||||
@@ -26,7 +26,8 @@
|
||||
animation.density = 0
|
||||
animation.anchored = 1
|
||||
animation.icon = 'icons/mob/mob.dmi'
|
||||
animation.layer = 5
|
||||
animation.plane = MOB_PLANE
|
||||
animation.layer = ABOVE_MOB_LAYER
|
||||
animation.master = holder
|
||||
target.ExtinguishMob()
|
||||
if(target.buckled)
|
||||
|
||||
@@ -84,7 +84,8 @@
|
||||
|
||||
set_dir(direction)
|
||||
if(dir != NORTH)
|
||||
layer = 5
|
||||
plane = MOB_PLANE
|
||||
layer = ABOVE_MOB_LAYER
|
||||
climbable = 0 //flipping tables allows them to be used as makeshift barriers
|
||||
flipped = 1
|
||||
flags |= ON_BORDER
|
||||
@@ -102,7 +103,7 @@
|
||||
verbs -=/obj/structure/table/proc/do_put
|
||||
verbs +=/obj/structure/table/verb/do_flip
|
||||
|
||||
layer = initial(layer)
|
||||
reset_plane_and_layer()
|
||||
flipped = 0
|
||||
climbable = initial(climbable)
|
||||
flags &= ~ON_BORDER
|
||||
|
||||
@@ -8,7 +8,7 @@ var/list/table_icon_cache = list()
|
||||
density = 1
|
||||
anchored = 1
|
||||
climbable = 1
|
||||
layer = 2.8
|
||||
layer = TABLE_LAYER
|
||||
throwpass = 1
|
||||
surgery_odds = 66
|
||||
var/flipped = 0
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
icon = 'icons/obj/turbolift.dmi'
|
||||
anchored = 1
|
||||
density = 0
|
||||
layer = 4
|
||||
plane = MOB_PLANE
|
||||
|
||||
var/datum/turbolift/lift
|
||||
|
||||
|
||||
@@ -182,7 +182,8 @@ var/list/ventcrawl_machinery = list(
|
||||
for(var/datum/pipeline/pipeline in network.line_members)
|
||||
for(var/obj/machinery/atmospherics/A in (pipeline.members || pipeline.edges))
|
||||
if(!A.pipe_image)
|
||||
A.pipe_image = image(A, A.loc, layer = 20, dir = A.dir)
|
||||
A.pipe_image = image(A, A.loc, dir = A.dir)
|
||||
A.pipe_image.plane = PLANE_LIGHTING_ABOVE
|
||||
pipes_shown += A.pipe_image
|
||||
client.images += A.pipe_image
|
||||
if(client)
|
||||
|
||||
@@ -82,7 +82,7 @@
|
||||
majormutate()
|
||||
|
||||
//Space antibiotics have a good chance to stop disease completely
|
||||
if(mob.reagents.has_reagent("spaceacillin"))
|
||||
if(mob.chem_effects[CE_ANTIBIOTIC])
|
||||
if(stage == 1 && prob(70-resistance))
|
||||
src.cure(mob)
|
||||
else
|
||||
|
||||
@@ -81,7 +81,7 @@ proc/airborne_can_reach(turf/source, turf/target)
|
||||
var/list/antibodies_in_common = M.antibodies & disease.antigen
|
||||
if(antibodies_in_common.len)
|
||||
return
|
||||
if(M.reagents.has_reagent("spaceacillin"))
|
||||
if(M.chem_effects[CE_ANTIBIOTIC])
|
||||
if(prob(disease.resistance))
|
||||
var/datum/disease2/disease/D = disease.getcopy()
|
||||
D.minormutate()
|
||||
|
||||
@@ -7,7 +7,7 @@
|
||||
var/drill_time = 10
|
||||
var/turf/drilling_turf
|
||||
density = 1
|
||||
layer = 3.1 //to go over ores
|
||||
layer = ABOVE_JUNK_LAYER
|
||||
|
||||
/obj/machinery/giga_drill/attack_hand(mob/user as mob)
|
||||
if(active)
|
||||
|
||||
@@ -29,11 +29,22 @@
|
||||
C.scan_atom(user, src)
|
||||
return
|
||||
|
||||
if(istype(I, /obj/item/device/xenoarch_multi_tool))
|
||||
var/obj/item/device/xenoarch_multi_tool/C = I
|
||||
if(C.mode) //Mode means scanning.
|
||||
C.depth_scanner.scan_atom(user, src)
|
||||
return
|
||||
else
|
||||
user.visible_message("<span class='notice'>\The [user] extends \the [C] over \the [src], a flurry of red beams scanning \the [src]'s surface!</span>", "<span class='notice'>You extend \the [C] over \the [src], a flurry of red beams scanning \the [src]'s surface!</span>")
|
||||
if(do_after(user, 15))
|
||||
to_chat(user, "<span class='notice'>\The [src] has been excavated to a depth of [2 * src.excavation_level]cm.</span>")
|
||||
return
|
||||
|
||||
if(istype(I, /obj/item/device/measuring_tape))
|
||||
var/obj/item/device/measuring_tape/P = I
|
||||
user.visible_message("<span class='notice'>\The [user] extends \the [P] towards \the [src].</span>", "<span class='notice'>You extend \the [P] towards \the [src].</span>")
|
||||
if(do_after(user, 15))
|
||||
user << "<span class='notice'>\The [src] has been excavated to a depth of [2 * src.excavation_level]cm.</span>"
|
||||
to_chat(user, "<span class='notice'>\The [src] has been excavated to a depth of [2 * src.excavation_level]cm.</span>")
|
||||
return
|
||||
|
||||
if(istype(I, /obj/item/weapon/pickaxe))
|
||||
@@ -43,12 +54,12 @@
|
||||
return
|
||||
last_act = world.time
|
||||
|
||||
user << "<span class='warning'>You start [P.drill_verb] [src].</span>"
|
||||
to_chat(user, "<span class='warning'>You start [P.drill_verb] [src].</span>")
|
||||
|
||||
if(!do_after(user, P.digspeed))
|
||||
return
|
||||
|
||||
user << "<span class='notice'>You finish [P.drill_verb] [src].</span>"
|
||||
to_chat(user, "<span class='notice'>You finish [P.drill_verb] [src].</span>")
|
||||
excavation_level += P.excavation_amount
|
||||
|
||||
if(excavation_level > 100)
|
||||
@@ -87,4 +98,4 @@
|
||||
else if(istype(AM,/obj/mecha))
|
||||
var/obj/mecha/M = AM
|
||||
if(istype(M.selected,/obj/item/mecha_parts/mecha_equipment/tool/drill))
|
||||
M.selected.action(src)
|
||||
M.selected.action(src)
|
||||
|
||||
@@ -80,13 +80,13 @@
|
||||
SSxenoarch.digsite_spawning_turfs.Remove(T)
|
||||
|
||||
if(nearestTargetDist >= 0)
|
||||
user << "Exotic energy detected on wavelength '[nearestTargetId]' in a radius of [nearestTargetDist]m[nearestSimpleTargetDist > 0 ? "; small anomaly detected in a radius of [nearestSimpleTargetDist]m" : ""]"
|
||||
to_chat(user, "Exotic energy detected on wavelength '[nearestTargetId]' in a radius of [nearestTargetDist]m[nearestSimpleTargetDist > 0 ? "; small anomaly detected in a radius of [nearestSimpleTargetDist]m" : ""]")
|
||||
else if(nearestSimpleTargetDist >= 0)
|
||||
user << "Small anomaly detected in a radius of [nearestSimpleTargetDist]m."
|
||||
to_chat(user, "Small anomaly detected in a radius of [nearestSimpleTargetDist]m.")
|
||||
else
|
||||
user << "Background radiation levels detected."
|
||||
to_chat(user, "Background radiation levels detected.")
|
||||
else
|
||||
user << "Scanning array is recharging."
|
||||
to_chat(user, "Scanning array is recharging.")
|
||||
|
||||
/obj/item/device/depth_scanner
|
||||
name = "depth analysis scanner"
|
||||
@@ -133,7 +133,7 @@
|
||||
|
||||
positive_locations.Add(D)
|
||||
|
||||
user << "<span class='notice'>\icon[src] [src] pings.</span>"
|
||||
to_chat(user, "<span class='notice'>\icon[src] [src] pings.</span>")
|
||||
|
||||
else if(istype(A, /obj/structure/boulder))
|
||||
var/obj/structure/boulder/B = A
|
||||
@@ -151,7 +151,7 @@
|
||||
|
||||
positive_locations.Add(D)
|
||||
|
||||
user << "<span class='notice'>\icon[src] [src] pings [pick("madly","wildly","excitedly","crazily")]!</span>"
|
||||
to_chat(user, "<span class='notice'>\icon[src] [src] pings [pick("madly","wildly","excitedly","crazily")]!</span>")
|
||||
|
||||
/obj/item/device/depth_scanner/attack_self(var/mob/living/user)
|
||||
interact(user)
|
||||
@@ -310,3 +310,39 @@
|
||||
usr << browse(null, "window=locater")
|
||||
|
||||
updateSelfDialog()
|
||||
|
||||
/obj/item/device/xenoarch_multi_tool
|
||||
name = "xenoarcheology multitool"
|
||||
desc = "Has the features of the Alden-Saraspova counter, a measuring tape, and a depth analysis scanner all in one!"
|
||||
icon_state = "ano_scanner2"
|
||||
item_state = "lampgreen"
|
||||
icon = 'icons/obj/xenoarchaeology.dmi'
|
||||
origin_tech = list(TECH_MAGNET = 3, TECH_ENGINEERING = 3, TECH_BLUESPACE = 2)
|
||||
matter = list(DEFAULT_WALL_MATERIAL = 10000,"glass" = 5000)
|
||||
w_class = ITEMSIZE_SMALL
|
||||
slot_flags = SLOT_BELT
|
||||
var/mode = 1 //Start off scanning. 1 = scanning, 0 = measuring
|
||||
var/obj/item/device/ano_scanner/anomaly_scanner = null
|
||||
var/obj/item/device/depth_scanner/depth_scanner = null
|
||||
|
||||
/obj/item/device/xenoarch_multi_tool/New()
|
||||
anomaly_scanner = new/obj/item/device/ano_scanner(src)
|
||||
depth_scanner = new/obj/item/device/depth_scanner(src)
|
||||
|
||||
/obj/item/device/xenoarch_multi_tool/attack_self(var/mob/living/user)
|
||||
depth_scanner.interact(user)
|
||||
|
||||
/obj/item/device/xenoarch_multi_tool/verb/swap_settings(var/mob/living/user)
|
||||
set name = "Swap Functionality"
|
||||
set desc = "Swap between the scanning and measuring functionality.."
|
||||
mode = !mode
|
||||
if(mode)
|
||||
to_chat(user, "The device will now scan for artifacts.")
|
||||
else
|
||||
to_chat(user, "The device will now measure depth dug.")
|
||||
|
||||
/obj/item/device/xenoarch_multi_tool/verb/scan_for_anomalies(var/mob/living/user)
|
||||
set name = "Scan for Anomalies"
|
||||
set desc = "Scan for artifacts and anomalies within your vicinity."
|
||||
anomaly_scanner.interact(user)
|
||||
|
||||
|
||||
@@ -149,3 +149,43 @@
|
||||
smallest.loc = src
|
||||
picksToSort -= smallest
|
||||
orient2hud()
|
||||
|
||||
/obj/item/weapon/pickaxe/excavationdrill
|
||||
name = "excavation drill"
|
||||
icon = 'icons/obj/xenoarchaeology.dmi'
|
||||
icon_state = "excavationdrill2"
|
||||
item_state = "syringe_0"
|
||||
excavation_amount = 15
|
||||
digspeed = 30
|
||||
desc = "Advanced archaeological drill combining ultrasonic excitation and bluespace manipulation to provide extreme precision. The tip is adjustable from 1 to 30 cm."
|
||||
drill_sound = 'sound/weapons/thudswoosh.ogg'
|
||||
drill_verb = "drilling"
|
||||
force = 5
|
||||
w_class = 2
|
||||
attack_verb = list("drilled")
|
||||
|
||||
/obj/item/weapon/pickaxe/excavationdrill/attack_self(mob/user as mob)
|
||||
var/depth = input("Put the desired depth (1-30 centimeters).", "Set Depth", 30) as num
|
||||
if(depth>30 || depth<1)
|
||||
to_chat(user, "<span class='notice'>Invalid depth.</span>")
|
||||
return
|
||||
excavation_amount = depth
|
||||
to_chat(user, "<span class='notice'>You set the depth to [depth]cm.</span>")
|
||||
switch(depth)
|
||||
if(1 to 5)
|
||||
icon_state = "excavationdrill0"
|
||||
if(6 to 10)
|
||||
icon_state = "excavationdrill1"
|
||||
if(11 to 15)
|
||||
icon_state = "excavationdrill2"
|
||||
if(16 to 20)
|
||||
icon_state = "excavationdrill3"
|
||||
if(21 to 25)
|
||||
icon_state = "excavationdrill4"
|
||||
if(25 to 30)
|
||||
icon_state = "excavationdrill5" //The other 2 sprites are comically long. Let's just cut it at 5.
|
||||
|
||||
/obj/item/weapon/pickaxe/excavationdrill/examine(mob/user)
|
||||
..()
|
||||
var/depth = excavation_amount
|
||||
to_chat(user, "<span class='info'>It is currently set at [depth]cms.</span>")
|
||||
Reference in New Issue
Block a user