Merge branch 'master' of https://github.com/tgstation/-tg-station into pr/11057
Conflicts: icons/obj/items.dmi
@@ -51,6 +51,65 @@
|
||||
#define FIRE_LAYER 1 //If you're on fire
|
||||
#define TOTAL_LAYERS 26 //KEEP THIS UP-TO-DATE OR SHIT WILL BREAK ;_;
|
||||
|
||||
//Human Overlay Index Shortcuts for alternate_worn_layer, layers
|
||||
//Because I *KNOW* somebody will think layer+1 means "above"
|
||||
//IT DOESN'T OK, IT MEANS "UNDER"
|
||||
#define UNDER_SPECIES_LAYER SPECIES_LAYER+1
|
||||
#define UNDER_BODY_BEHIND_LAYER BODY_BEHIND_LAYER+1
|
||||
#define UNDER_BODY_LAYER BODY_LAYER+1
|
||||
#define UNDER_BODY_ADJ_LAYER BODY_ADJ_LAYER+1
|
||||
#define UNDER_MUTATIONS_LAYER MUTATIONS_LAYER+1
|
||||
#define UNDER_AUGMENTS_LAYER AUGMENTS_LAYER+1
|
||||
#define UNDER_DAMAGE_LAYER DAMAGE_LAYER+1
|
||||
#define UNDER_UNIFORM_LAYER UNIFORM_LAYER+1
|
||||
#define UNDER_ID_LAYER ID_LAYER+1
|
||||
#define UNDER_SHOES_LAYER SHOES_LAYER+1
|
||||
#define UNDER_GLOVES_LAYER GLOVES_LAYER+1
|
||||
#define UNDER_EARS_LAYER EARS_LAYER+1
|
||||
#define UNDER_SUIT_LAYER SUIT_LAYER+1
|
||||
#define UNDER_GLASSES_LAYER GLASSES_LAYER+1
|
||||
#define UNDER_BELT_LAYER BELT_LAYER+1
|
||||
#define UNDER_SUIT_STORE_LAYER SUIT_STORE_LAYER+1
|
||||
#define UNDER_BACK_LAYER BACK_LAYER+1
|
||||
#define UNDER_HAIR_LAYER HAIR_LAYER+1
|
||||
#define UNDER_FACEMASK_LAYER FACEMASK_LAYER+1
|
||||
#define UNDER_HEAD_LAYER HEAD_LAYER+1
|
||||
#define UNDER_HANDCUFF_LAYER HANDCUFF_LAYER+1
|
||||
#define UNDER_LEGCUFF_LAYER LEGCUFF_LAYER+1
|
||||
#define UNDER_L_HAND_LAYER L_HAND_LAYER+1
|
||||
#define UNDER_R_HAND_LAYER R_HAND_LAYER+1
|
||||
#define UNDER_BODY_FRONT_LAYER BODY_FRONT_LAYER+1
|
||||
#define UNDER_FIRE_LAYER FIRE_LAYER+1
|
||||
|
||||
//AND -1 MEANS "ABOVE", OK?, OK!?!
|
||||
#define ABOVE_SPECIES_LAYER SPECIES_LAYER-1
|
||||
#define ABOVE_BODY_BEHIND_LAYER BODY_BEHIND_LAYER-1
|
||||
#define ABOVE_BODY_LAYER BODY_LAYER-1
|
||||
#define ABOVE_BODY_ADJ_LAYER BODY_ADJ_LAYER-1
|
||||
#define ABOVE_MUTATIONS_LAYER MUTATIONS_LAYER-1
|
||||
#define ABOVE_AUGMENTS_LAYER AUGMENTS_LAYER-1
|
||||
#define ABOVE_DAMAGE_LAYER DAMAGE_LAYER-1
|
||||
#define ABOVE_UNIFORM_LAYER UNIFORM_LAYER-1
|
||||
#define ABOVE_ID_LAYER ID_LAYER-1
|
||||
#define ABOVE_SHOES_LAYER SHOES_LAYER-1
|
||||
#define ABOVE_GLOVES_LAYER GLOVES_LAYER-1
|
||||
#define ABOVE_EARS_LAYER EARS_LAYER-1
|
||||
#define ABOVE_SUIT_LAYER SUIT_LAYER-1
|
||||
#define ABOVE_GLASSES_LAYER GLASSES_LAYER-1
|
||||
#define ABOVE_BELT_LAYER BELT_LAYER-1
|
||||
#define ABOVE_SUIT_STORE_LAYER SUIT_STORE_LAYER-1
|
||||
#define ABOVE_BACK_LAYER BACK_LAYER-1
|
||||
#define ABOVE_HAIR_LAYER HAIR_LAYER-1
|
||||
#define ABOVE_FACEMASK_LAYER FACEMASK_LAYER-1
|
||||
#define ABOVE_HEAD_LAYER HEAD_LAYER-1
|
||||
#define ABOVE_HANDCUFF_LAYER HANDCUFF_LAYER-1
|
||||
#define ABOVE_LEGCUFF_LAYER LEGCUFF_LAYER-1
|
||||
#define ABOVE_L_HAND_LAYER L_HAND_LAYER-1
|
||||
#define ABOVE_R_HAND_LAYER R_HAND_LAYER-1
|
||||
#define ABOVE_BODY_FRONT_LAYER BODY_FRONT_LAYER-1
|
||||
#define ABOVE_FIRE_LAYER FIRE_LAYER-1
|
||||
|
||||
|
||||
//Security levels
|
||||
#define SEC_LEVEL_GREEN 0
|
||||
#define SEC_LEVEL_BLUE 1
|
||||
|
||||
@@ -36,8 +36,6 @@
|
||||
viruses += DD
|
||||
DD.affected_mob = src
|
||||
DD.holder = src
|
||||
if(DD.disease_flags & CAN_CARRY && prob(5))
|
||||
DD.carrier = 1
|
||||
|
||||
//Copy properties over. This is so edited diseases persist.
|
||||
var/list/skipped = list("affected_mob","holder","carrier","stage","type","parent_type","vars","transformed")
|
||||
|
||||
@@ -137,7 +137,7 @@
|
||||
if(H.stat == DEAD)
|
||||
say("Specimen deceased - please provide fresh sample.")
|
||||
return "<span class='bad'>Specimen deceased.</span>"
|
||||
var/obj/item/organ/internal/gland/GlandTest = locate() in H
|
||||
var/obj/item/organ/internal/gland/GlandTest = locate() in H.internal_organs
|
||||
if(!GlandTest)
|
||||
say("Experimental dissection not detected!")
|
||||
return "<span class='bad'>No glands detected!</span>"
|
||||
@@ -165,7 +165,7 @@
|
||||
H << "<B>Objective #[obj_count]</B>: [objective.explanation_text]"
|
||||
obj_count++
|
||||
|
||||
for(var/obj/item/organ/internal/gland/G in H)
|
||||
for(var/obj/item/organ/internal/gland/G in H.internal_organs)
|
||||
G.Start()
|
||||
point_reward++
|
||||
if(point_reward > 0)
|
||||
|
||||
@@ -37,7 +37,7 @@
|
||||
..()
|
||||
if(gang && isnum(gang.dom_timer))
|
||||
if(gang.dom_timer > 0)
|
||||
playsound(loc, 'sound/items/timer.ogg', 30, 0)
|
||||
playsound(loc, 'sound/items/timer.ogg', 10, 0)
|
||||
if(!warned && (gang.dom_timer < 180))
|
||||
warned = 1
|
||||
var/area/domloc = get_area(loc)
|
||||
@@ -169,7 +169,7 @@
|
||||
|
||||
var/time = round(get_domination_time(tempgang)/60,0.1)
|
||||
if(alert(user,"With [round((tempgang.territory.len/start_state.num_territories)*100, 1)]% station control, a takeover will require [time] minutes.\nYour gang will be unable to gain influence while it is active.\nThe entire station will likely be alerted to it once it starts.\nYou have [tempgang.dom_attempts] attempt(s) remaining. Are you ready?","Confirm","Ready","Later") == "Ready")
|
||||
if (!tempgang.dom_attempts || !in_range(src, user) || !istype(src.loc, /turf))
|
||||
if (isnum(tempgang.dom_timer) || !tempgang.dom_attempts || !in_range(src, user) || !istype(src.loc, /turf))
|
||||
return 0
|
||||
|
||||
var/area/A = get_area(loc)
|
||||
|
||||
@@ -172,10 +172,11 @@
|
||||
var/mob/living/carbon/human/user = usr
|
||||
listclearnulls(ticker.mode.thralls)
|
||||
if(!shadowling_check(usr)) return
|
||||
if(ticker.mode.thralls.len >= 5)
|
||||
user << "<span class='warning'>With your telepathic abilities suppressed, your human form will not allow you to enthrall any others. Hatch first.</span>"
|
||||
charge_counter = charge_max
|
||||
return
|
||||
if(user.dna.species.id != "shadowling")
|
||||
if(ticker.mode.thralls.len >= 5)
|
||||
user << "<span class='warning'>With your telepathic abilities suppressed, your human form will not allow you to enthrall any others. Hatch first.</span>"
|
||||
charge_counter = charge_max
|
||||
return
|
||||
for(var/mob/living/carbon/human/target in targets)
|
||||
if(!in_range(usr, target))
|
||||
usr << "<span class='warning'>You need to be closer to enthrall [target].</span>"
|
||||
|
||||
@@ -90,4 +90,4 @@ Head of Personnel
|
||||
H.equip_to_slot_or_del(new /obj/item/weapon/storage/box/ids(H.back), slot_in_backpack)
|
||||
H.equip_to_slot_or_del(new /obj/item/weapon/melee/classic_baton/telescopic(H), slot_in_backpack)
|
||||
|
||||
announce_head(H.mind, list("Supply", "Service")) //tell underlings (suuply/service) they have a head
|
||||
announce_head(H, list("Supply", "Service")) //tell underlings (suuply/service) they have a head
|
||||
|
||||
@@ -41,7 +41,7 @@ Chief Engineer
|
||||
//Equip telebaton
|
||||
H.equip_to_slot_or_del(new /obj/item/weapon/melee/classic_baton/telescopic(H), slot_in_backpack)
|
||||
|
||||
announce_head(H.mind, list("Engineering")) //tell underlings (engineering radio) they have a head
|
||||
announce_head(H, list("Engineering")) //tell underlings (engineering radio) they have a head
|
||||
|
||||
/*
|
||||
Station Engineer
|
||||
|
||||
@@ -169,8 +169,8 @@
|
||||
/datum/job/proc/config_check()
|
||||
return 1
|
||||
|
||||
/datum/job/proc/announce_head(var/datum/mind/o_mind, var/channels) //tells the given channel that the given mind is the new department head. See communications.dm for valid channels.
|
||||
/datum/job/proc/announce_head(var/mob/living/carbon/human/H, var/channels) //tells the given channel that the given mob is the new department head. See communications.dm for valid channels.
|
||||
spawn(4) //to allow some initialization
|
||||
if(announcement_systems.len)
|
||||
var/obj/machinery/announcement_system/announcer = pick(announcement_systems)
|
||||
announcer.announce("NEWHEAD", o_mind.name, o_mind.assigned_role, channels)
|
||||
announcer.announce("NEWHEAD", H.real_name, H.job, channels)
|
||||
@@ -35,7 +35,7 @@ Chief Medical Officer
|
||||
H.equip_to_slot_or_del(new /obj/item/device/flashlight/pen(H), slot_s_store)
|
||||
H.equip_to_slot_or_del(new /obj/item/weapon/melee/classic_baton/telescopic(H), slot_in_backpack)
|
||||
|
||||
announce_head(H.mind, list("Medical")) //tell underlings (medical radio) they have a head
|
||||
announce_head(H, list("Medical")) //tell underlings (medical radio) they have a head
|
||||
|
||||
/*
|
||||
Medical Doctor
|
||||
|
||||
@@ -37,7 +37,7 @@ Research Director
|
||||
H.equip_to_slot_or_del(new /obj/item/device/laser_pointer(H), slot_l_store)
|
||||
H.equip_to_slot_or_del(new /obj/item/weapon/melee/classic_baton/telescopic(H), slot_in_backpack)
|
||||
|
||||
announce_head(H.mind, list("Science")) //tell underlings (science radio) they have a head
|
||||
announce_head(H, list("Science")) //tell underlings (science radio) they have a head
|
||||
|
||||
/*
|
||||
Scientist
|
||||
|
||||
@@ -52,7 +52,7 @@ Head of Security
|
||||
L.implanted = 1
|
||||
H.sec_hud_set_implants()
|
||||
|
||||
announce_head(H.mind, list("Security")) //tell underlings (security radio) they have a head
|
||||
announce_head(H, list("Security")) //tell underlings (security radio) they have a head
|
||||
|
||||
/*
|
||||
Warden
|
||||
|
||||
@@ -184,13 +184,11 @@ var/list/announcement_systems = list()
|
||||
newhead = pick("OV#RL()D: \[UNKNOWN??\] DET*#CT)D!", "ER)#R - B*@ TEXT F*O(ND!", "AAS.exe is not responding. NanoOS is searching for a solution to the problem.")
|
||||
|
||||
/obj/machinery/announcement_system/emp_act(severity)
|
||||
if(stat & (NOPOWER|BROKEN))
|
||||
..(severity)
|
||||
return
|
||||
act_up()
|
||||
if(!(stat & (NOPOWER|BROKEN)))
|
||||
act_up()
|
||||
..(severity)
|
||||
|
||||
/obj/machinery/announcement_system/emag_act()
|
||||
..()
|
||||
emagged = 1
|
||||
act_up()
|
||||
if(!emagged)
|
||||
emagged = 1
|
||||
act_up()
|
||||
|
||||
@@ -14,11 +14,11 @@ var/global/mulebot_count = 0
|
||||
density = 1
|
||||
anchored = 1
|
||||
animate_movement=1
|
||||
health = 150 //yeah, it's tougher than ed209 because it is a big metal box with wheels --rastaf0
|
||||
health = 150
|
||||
maxhealth = 150
|
||||
fire_dam_coeff = 0.7
|
||||
brute_dam_coeff = 0.5
|
||||
var/atom/movable/load = null // the loaded crate (usually)
|
||||
var/atom/movable/load = null
|
||||
bot_type = MULE_BOT
|
||||
model = "MULE"
|
||||
blood_DNA = list()
|
||||
@@ -28,7 +28,7 @@ var/global/mulebot_count = 0
|
||||
var/turf/target // this is turf to navigate to (location of beacon)
|
||||
var/loaddir = 0 // this the direction to unload onto/load from
|
||||
var/home_destination = "" // tag of home beacon
|
||||
req_access = list(access_cargo) // added robotics access so assembly line drop-off works properly -veyveyr //I don't think so, Tim. You need to add it to the MULE's hidden robot ID card. -NEO
|
||||
req_access = list(access_cargo)
|
||||
|
||||
mode = BOT_IDLE
|
||||
|
||||
@@ -62,7 +62,6 @@ var/global/mulebot_count = 0
|
||||
var/datum/job/cargo_tech/J = new/datum/job/cargo_tech
|
||||
botcard.access = J.get_access()
|
||||
prev_access = botcard.access
|
||||
// botcard.access += access_robotics //Why --Ikki
|
||||
cell = new(src)
|
||||
cell.charge = 2000
|
||||
cell.maxcharge = 2000
|
||||
|
||||
@@ -298,12 +298,27 @@
|
||||
|
||||
// *** THE ORION TRAIL ** //
|
||||
|
||||
#define ORION_TRAIL_WINTURN 9
|
||||
|
||||
//Orion Trail Events
|
||||
#define ORION_TRAIL_RAIDERS "Raiders"
|
||||
#define ORION_TRAIL_FLUX "Interstellar Flux"
|
||||
#define ORION_TRAIL_ILLNESS "Illness"
|
||||
#define ORION_TRAIL_BREAKDOWN "Breakdown"
|
||||
#define ORION_TRAIL_LING "Changelings?"
|
||||
#define ORION_TRAIL_LING_ATTACK "Changeling Ambush"
|
||||
#define ORION_TRAIL_MALFUNCTION "Malfunction"
|
||||
#define ORION_TRAIL_COLLISION "Collision"
|
||||
#define ORION_TRAIL_SPACEPORT "Spaceport"
|
||||
#define ORION_TRAIL_BLACKHOLE "BlackHole"
|
||||
|
||||
|
||||
/obj/machinery/computer/arcade/orion_trail
|
||||
name = "The Orion Trail"
|
||||
desc = "Learn how our ancestors got to Orion, and have fun in the process!"
|
||||
icon_state = "arcade"
|
||||
circuit = /obj/item/weapon/circuitboard/arcade/orion_trail
|
||||
var/busy = 0 //prevent clickspam that allowed people to ~speedrun~ the game.
|
||||
var/engine = 0
|
||||
var/hull = 0
|
||||
var/electronics = 0
|
||||
@@ -316,15 +331,21 @@
|
||||
var/eventdat = null
|
||||
var/event = null
|
||||
var/list/settlers = list("Harry","Larry","Bob")
|
||||
var/list/events = list("Raiders" = 3,
|
||||
"Interstellar Flux" = 1,
|
||||
"Illness" = 3,
|
||||
"Breakdown" = 2,
|
||||
"Malfunction" = 2,
|
||||
"Collision" = 1
|
||||
var/list/events = list(ORION_TRAIL_RAIDERS = 3,
|
||||
ORION_TRAIL_FLUX = 1,
|
||||
ORION_TRAIL_ILLNESS = 3,
|
||||
ORION_TRAIL_BREAKDOWN = 2,
|
||||
ORION_TRAIL_LING = 3,
|
||||
ORION_TRAIL_MALFUNCTION = 2,
|
||||
ORION_TRAIL_COLLISION = 1,
|
||||
ORION_TRAIL_SPACEPORT = 2
|
||||
)
|
||||
var/list/stops = list()
|
||||
var/list/stopblurbs = list()
|
||||
var/lings_aboard = 0
|
||||
var/spaceport_raided = 0
|
||||
var/spaceport_freebie = 0
|
||||
var/last_spaceport_action = ""
|
||||
|
||||
/obj/machinery/computer/arcade/orion_trail/New()
|
||||
..()
|
||||
@@ -345,14 +366,9 @@
|
||||
/obj/machinery/computer/arcade/orion_trail/proc/newgame()
|
||||
// Set names of settlers in crew
|
||||
settlers = list()
|
||||
var/choice = null
|
||||
for(var/i = 1; i <= 3; i++)
|
||||
if(prob(50))
|
||||
choice = pick(first_names_male)
|
||||
else
|
||||
choice = pick(first_names_female)
|
||||
settlers += choice
|
||||
settlers += "[usr]"
|
||||
add_crewmember()
|
||||
add_crewmember("[usr]")
|
||||
// Re-set items to defaults
|
||||
engine = 1
|
||||
hull = 1
|
||||
@@ -364,6 +380,12 @@
|
||||
event = null
|
||||
playing = 1
|
||||
gameover = 0
|
||||
lings_aboard = 0
|
||||
|
||||
//spaceport junk
|
||||
spaceport_raided = 0
|
||||
spaceport_freebie = 0
|
||||
last_spaceport_action = ""
|
||||
|
||||
/obj/machinery/computer/arcade/orion_trail/attack_hand(mob/user)
|
||||
if(..())
|
||||
@@ -412,18 +434,19 @@
|
||||
dat += "<h3><b>Crew:</b></h3>"
|
||||
dat += english_list(settlers)
|
||||
dat += "<br><b>Food: </b>[food] | <b>Fuel: </b>[fuel]"
|
||||
dat += "<br><b>Engine Parts: </b>[engine] | <b>Hull Panels: </b>[hull] | <b>Electronics: </b>[electronics]<br>"
|
||||
dat += "<br><b>Engine Parts: </b>[engine] | <b>Hull Panels: </b>[hull] | <b>Electronics: </b>[electronics]"
|
||||
if(turns == 7)
|
||||
dat += "<P ALIGN=Right><a href='byond://?src=\ref[src];pastblack=1'>Go Around</a> <a href='byond://?src=\ref[src];blackhole=1'>Continue</a></P>"
|
||||
else
|
||||
dat += "<P ALIGN=Right><a href='byond://?src=\ref[src];continue=1'>Continue</a></P>"
|
||||
dat += "<P ALIGN=Right><a href='byond://?src=\ref[src];killcrew=1'>Kill a crewmember</a></P>"
|
||||
dat += "<P ALIGN=Right><a href='byond://?src=\ref[src];close=1'>Close</a></P>"
|
||||
else
|
||||
dat = "<center><h2>The Orion Trail</h2></center>"
|
||||
dat += "<br><center><h3>Experience the journey of your ancestors!</h3></center><br><br>"
|
||||
dat += "<center><b><a href='byond://?src=\ref[src];newgame=1'>New Game</a></b></center>"
|
||||
dat += "<P ALIGN=Right><a href='byond://?src=\ref[src];close=1'>Close</a></P>"
|
||||
var/datum/browser/popup = new(user, "arcade", "The Orion Trail")
|
||||
var/datum/browser/popup = new(user, "arcade", "The Orion Trail",400,700)
|
||||
popup.set_content(dat)
|
||||
popup.set_title_image(user.browse_rsc_icon(src.icon, src.icon_state))
|
||||
popup.open()
|
||||
@@ -435,34 +458,31 @@
|
||||
if(href_list["close"])
|
||||
usr.unset_machine()
|
||||
usr << browse(null, "window=arcade")
|
||||
else if (href_list["continue"]) //Continue your travels
|
||||
if(turns >= 9)
|
||||
|
||||
if(busy)
|
||||
return
|
||||
busy = 1
|
||||
|
||||
if (href_list["continue"]) //Continue your travels
|
||||
if(turns >= ORION_TRAIL_WINTURN)
|
||||
win()
|
||||
else if(turns == 2)
|
||||
if(prob(30))
|
||||
event = "Collision"
|
||||
event()
|
||||
food -= alive*2
|
||||
fuel -= 5
|
||||
turns += 1
|
||||
else
|
||||
food -= alive*2
|
||||
fuel -= 5
|
||||
turns += 1
|
||||
if(prob(75))
|
||||
event = pickweight(events)
|
||||
event()
|
||||
else
|
||||
food -= alive*2
|
||||
food -= (alive+lings_aboard)*2
|
||||
fuel -= 5
|
||||
turns += 1
|
||||
if(prob(75))
|
||||
event = pickweight(events)
|
||||
if(turns == 2 && prob(30))
|
||||
event = ORION_TRAIL_COLLISION
|
||||
event()
|
||||
else if(prob(75))
|
||||
event = pickweight(events)
|
||||
if(lings_aboard)
|
||||
if(event == ORION_TRAIL_LING || prob(55))
|
||||
event = ORION_TRAIL_LING_ATTACK
|
||||
event()
|
||||
turns += 1
|
||||
if(emagged)
|
||||
var/mob/living/carbon/M = usr //for some vars
|
||||
switch(event)
|
||||
if("Raiders")
|
||||
if(ORION_TRAIL_RAIDERS)
|
||||
if(prob(50))
|
||||
usr << "<span class='userdanger'>You hear battle shouts. The tramping of boots on cold metal. Screams of agony. The rush of venting air. Are you going insane?</span>"
|
||||
M.hallucination += 30
|
||||
@@ -470,7 +490,7 @@
|
||||
usr << "<span class='userdanger'>Something strikes you from behind! It hurts like hell and feel like a blunt weapon, but nothing is there...</span>"
|
||||
M.take_organ_damage(30)
|
||||
playsound(loc, 'sound/weapons/genhit2.ogg', 100, 1)
|
||||
if("Illness")
|
||||
if(ORION_TRAIL_ILLNESS)
|
||||
var/severity = rand(1,3) //pray to RNGesus. PRAY, PIGS
|
||||
if(severity == 1)
|
||||
M << "<span class='userdanger'>You suddenly feel slightly nauseous.</span>" //got off lucky
|
||||
@@ -481,38 +501,38 @@
|
||||
M << "<span class='warning'>An overpowering wave of nausea consumes over you. You hunch over, your stomach's contents preparing for a spectacular exit.</span>"
|
||||
M.Stun(5)
|
||||
sleep(30)
|
||||
M.visible_message("<span class='warning'>[M] throws up!</span>", "<span class='userdanger'>You violently throw up!</span>")
|
||||
say("[M] violently throws up!")
|
||||
playsound(loc, 'sound/effects/splat.ogg', 50, 1)
|
||||
M.nutrition -= 50 //lose a lot of food
|
||||
var/turf/location = usr.loc
|
||||
if(istype(location, /turf/simulated))
|
||||
location.add_vomit_floor(src, 1)
|
||||
if("Interstellar Flux")
|
||||
if(ORION_TRAIL_FLUX)
|
||||
if(prob(75))
|
||||
M.Weaken(3)
|
||||
M.visible_message("<span class='danger'>[M] is swept off their feet!</span>", "<span class='userdanger'>A sudden gust of powerful wind slams you into the floor!</span>")
|
||||
say("A sudden gust of powerful wind slams [M] into the floor!")
|
||||
M.take_organ_damage(25)
|
||||
playsound(src.loc, 'sound/weapons/Genhit.ogg', 100, 1)
|
||||
else
|
||||
M << "<span class='userdanger'>A violent gale blows past you, and you barely manage to stay standing!</span>"
|
||||
if("Collision") //by far the most damaging event
|
||||
if(ORION_TRAIL_COLLISION) //by far the most damaging event
|
||||
if(prob(90))
|
||||
playsound(src.loc, 'sound/effects/bang.ogg', 100, 1)
|
||||
var/turf/simulated/floor/F
|
||||
for(F in orange(1, src))
|
||||
F.ChangeTurf(F.baseturf)
|
||||
src.visible_message("<span class='userdanger'>Something slams into the floor around [src], exposing it to space!</span>")
|
||||
say("Something slams into the floor around [src], exposing it to space!")
|
||||
if(hull)
|
||||
sleep(10)
|
||||
src.visible_message("<span class='danger'>A new floor suddenly appears around [src]. What the hell?</span>")
|
||||
say("A new floor suddenly appears around [src]. What the hell?")
|
||||
playsound(src.loc, 'sound/weapons/Genhit.ogg', 100, 1)
|
||||
var/turf/space/T
|
||||
for(T in orange(1, src))
|
||||
T.ChangeTurf(/turf/simulated/floor/plating/)
|
||||
else
|
||||
src.visible_message("<span class='danger'>Something slams into the floor around [src] - luckily, it didn't get through!</span>")
|
||||
say("Something slams into the floor around [src] - luckily, it didn't get through!")
|
||||
playsound(src.loc, 'sound/effects/bang.ogg', 50, 1)
|
||||
if("Malfunction")
|
||||
if(ORION_TRAIL_MALFUNCTION)
|
||||
playsound(src.loc, 'sound/effects/EMPulse.ogg', 50, 1)
|
||||
src.visible_message("<span class='danger'>[src] malfunctions, randomizing in-game stats!</span>")
|
||||
var/oldfood = food
|
||||
@@ -529,7 +549,6 @@
|
||||
fuel = oldfuel
|
||||
playsound(src.loc, 'sound/machines/chime.ogg', 50, 1)
|
||||
|
||||
|
||||
else if(href_list["newgame"]) //Reset everything
|
||||
newgame()
|
||||
else if(href_list["menu"]) //back to the main menu
|
||||
@@ -540,11 +559,11 @@
|
||||
fuel = 60
|
||||
settlers = list("Harry","Larry","Bob")
|
||||
else if(href_list["slow"]) //slow down
|
||||
food -= alive*2
|
||||
food -= (alive+lings_aboard)*2
|
||||
fuel -= 5
|
||||
event = null
|
||||
else if(href_list["pastblack"]) //slow down
|
||||
food -= (alive*2)*3
|
||||
food -= ((alive+lings_aboard)*2)*3
|
||||
fuel -= 15
|
||||
turns += 1
|
||||
event = null
|
||||
@@ -558,7 +577,7 @@
|
||||
hull -= 1
|
||||
event = null
|
||||
else if(href_list["wait"]) //wait 3 days
|
||||
food -= (alive*2)*3
|
||||
food -= ((alive+lings_aboard)*2)*3
|
||||
event = null
|
||||
else if(href_list["keepspeed"]) //keep speed
|
||||
if(prob(75))
|
||||
@@ -568,16 +587,16 @@
|
||||
event = null
|
||||
else if(href_list["blackhole"]) //keep speed past a black hole
|
||||
if(prob(75))
|
||||
event = "BlackHole"
|
||||
event = ORION_TRAIL_BLACKHOLE
|
||||
event()
|
||||
if(emagged) //has to be here because otherwise it doesn't work
|
||||
playsound(src.loc, 'sound/effects/supermatter.ogg', 100, 1)
|
||||
src.visible_message("<span class='userdanger'><font size=3>A miniature black hole suddenly appears in front of [src], devouring [usr] alive!</font></span>")
|
||||
say("A miniature black hole suddenly appears in front of [src], devouring [usr] alive!")
|
||||
usr.Stun(10) //you can't run :^)
|
||||
var/S = new /obj/singularity/academy(usr.loc)
|
||||
emagged = 0 //immediately removes emagged status so people can't kill themselves by sprinting up and interacting
|
||||
sleep(50)
|
||||
src.visible_message("<span class='userdanger'>[S] winks out, just as suddenly as it appeared.</span>")
|
||||
say("[S] winks out, just as suddenly as it appeared.")
|
||||
qdel(S)
|
||||
else
|
||||
event = null
|
||||
@@ -588,88 +607,378 @@
|
||||
else if(href_list["eventclose"]) //end an event
|
||||
event = null
|
||||
|
||||
else if(href_list["killcrew"]) //shoot a crewmember
|
||||
var/sheriff = remove_crewmember() //I shot the sheriff
|
||||
playsound(loc,'sound/weapons/Gunshot.ogg', 100, 1)
|
||||
|
||||
if(settlers.len == 0 || alive == 0)
|
||||
say("The last crewmember [sheriff], shot themselves, GAME OVER!")
|
||||
if(emagged)
|
||||
usr.death(0)
|
||||
emagged = 0
|
||||
gameover = 1
|
||||
event = null
|
||||
else if(emagged)
|
||||
if(usr.name == sheriff)
|
||||
say("The crew of the ship chose to kill [usr.name]!")
|
||||
usr.death(0)
|
||||
|
||||
if(event == ORION_TRAIL_LING) //only ends the ORION_TRAIL_LING event, since you can do this action in multiple places
|
||||
event = null
|
||||
|
||||
//Spaceport specific interactions
|
||||
//they get a header because most of them don't reset event (because it's a shop, you leave when you want to)
|
||||
//they also call event() again, to regen the eventdata, which is kind of odd but necessary
|
||||
else if(href_list["buycrew"]) //buy a crewmember
|
||||
var/bought = add_crewmember()
|
||||
last_spaceport_action = "You hired [bought] as a new crewmember."
|
||||
fuel -= 10
|
||||
food -= 10
|
||||
event()
|
||||
|
||||
else if(href_list["sellcrew"]) //sell a crewmember
|
||||
var/sold = remove_crewmember()
|
||||
last_spaceport_action = "You sold your crewmember, [sold]!"
|
||||
fuel += 15
|
||||
food += 15
|
||||
event()
|
||||
|
||||
else if(href_list["leave_spaceport"])
|
||||
event = null
|
||||
spaceport_raided = 0
|
||||
spaceport_freebie = 0
|
||||
last_spaceport_action = ""
|
||||
|
||||
else if(href_list["raid_spaceport"])
|
||||
var/success = min(15 * alive,100) //default crew (4) have a 60% chance
|
||||
spaceport_raided = 1
|
||||
|
||||
var/FU = 0
|
||||
var/FO = 0
|
||||
if(prob(success))
|
||||
FU = rand(5,15)
|
||||
FO = rand(5,15)
|
||||
last_spaceport_action = "You successfully raided the spaceport! you gained [FU] Fuel and [FO] Food! (+[FU]FU,+[FO]FO)"
|
||||
else
|
||||
FU = rand(-5,-15)
|
||||
FO = rand(-5,-15)
|
||||
last_spaceport_action = "You failed to raid the spaceport! you lost [FU*-1] Fuel and [FO*-1] Food in your scramble to escape! ([FU]FU,[FO]FO)"
|
||||
|
||||
//your chance of lose a crewmember is 1/2 your chance of success
|
||||
//this makes higher % failures hurt more, don't get cocky space cowboy!
|
||||
if(prob(success*5))
|
||||
var/lost_crew = remove_crewmember()
|
||||
last_spaceport_action = "You failed to raid the spaceport! you lost [FU*-1] Fuel and [FO*-1] Food, AND [lost_crew] in your scramble to escape! ([FU]FI,[FO]FO,-Crew)"
|
||||
if(emagged)
|
||||
say("WEEWOO WEEWOO, Spaceport Security en route!")
|
||||
for(var/i, i<=3, i++)
|
||||
var/mob/living/simple_animal/hostile/syndicate/ranged/orion/O = new/mob/living/simple_animal/hostile/syndicate/ranged/orion(get_turf(src))
|
||||
O.target = usr
|
||||
|
||||
|
||||
fuel += FU
|
||||
food += FO
|
||||
event()
|
||||
|
||||
else if(href_list["buyparts"])
|
||||
switch(text2num(href_list["buyparts"]))
|
||||
if(1) //Engine Parts
|
||||
engine++
|
||||
last_spaceport_action = "Bought Engine Parts"
|
||||
if(2) //Hull Plates
|
||||
hull++
|
||||
last_spaceport_action = "Bought Hull Plates"
|
||||
if(3) //Spare Electronics
|
||||
electronics++
|
||||
last_spaceport_action = "Bought Spare Electronics"
|
||||
fuel -= 5 //they all cost 5
|
||||
event()
|
||||
|
||||
else if(href_list["trade"])
|
||||
switch(text2num(href_list["trade"]))
|
||||
if(1) //Fuel
|
||||
fuel -= 5
|
||||
food += 5
|
||||
last_spaceport_action = "Traded Fuel for Food"
|
||||
if(2) //Food
|
||||
fuel += 5
|
||||
food -= 5
|
||||
last_spaceport_action = "Traded Food for Fuel"
|
||||
event()
|
||||
|
||||
src.add_fingerprint(usr)
|
||||
src.updateUsrDialog()
|
||||
busy = 0
|
||||
return
|
||||
|
||||
|
||||
/obj/machinery/computer/arcade/orion_trail/proc/event()
|
||||
eventdat = "<center><h1>[event]</h1></center>"
|
||||
if(event == "Raiders")
|
||||
eventdat += "Raiders have come aboard your ship!"
|
||||
|
||||
switch(event)
|
||||
if(ORION_TRAIL_RAIDERS)
|
||||
eventdat += "Raiders have come aboard your ship!"
|
||||
if(prob(50))
|
||||
var/sfood = rand(1,10)
|
||||
var/sfuel = rand(1,10)
|
||||
food -= sfood
|
||||
fuel -= sfuel
|
||||
eventdat += "<br>They have stolen [sfood] <b>Food</b> and [sfuel] <b>Fuel</b>."
|
||||
else if(prob(10))
|
||||
var/deadname = remove_crewmember()
|
||||
eventdat += "<br>[deadname] tried to fight back but was killed."
|
||||
else
|
||||
eventdat += "<br>Fortunately you fended them off without any trouble."
|
||||
eventdat += "<P ALIGN=Right><a href='byond://?src=\ref[src];eventclose=1'>Continue</a></P>"
|
||||
eventdat += "<P ALIGN=Right><a href='byond://?src=\ref[src];close=1'>Close</a></P>"
|
||||
|
||||
if(ORION_TRAIL_FLUX)
|
||||
eventdat += "This region of space is highly turbulent. <br>If we go slowly we may avoid more damage, but if we keep our speed we won't waste supplies."
|
||||
eventdat += "<br>What will you do?"
|
||||
eventdat += "<P ALIGN=Right><a href='byond://?src=\ref[src];slow=1'>Slow Down</a> <a href='byond://?src=\ref[src];keepspeed=1'>Continue</a></P>"
|
||||
eventdat += "<P ALIGN=Right><a href='byond://?src=\ref[src];close=1'>Close</a></P>"
|
||||
|
||||
if(ORION_TRAIL_ILLNESS)
|
||||
eventdat += "A deadly illness has been contracted!"
|
||||
var/deadname = remove_crewmember()
|
||||
eventdat += "<br>[deadname] was killed by the disease."
|
||||
eventdat += "<P ALIGN=Right><a href='byond://?src=\ref[src];eventclose=1'>Continue</a></P>"
|
||||
eventdat += "<P ALIGN=Right><a href='byond://?src=\ref[src];close=1'>Close</a></P>"
|
||||
|
||||
if(ORION_TRAIL_BREAKDOWN)
|
||||
eventdat += "Oh no! The engine has broken down!"
|
||||
eventdat += "<br>You can repair it with an engine part, or you can make repairs for 3 days."
|
||||
if(engine >= 1)
|
||||
eventdat += "<P ALIGN=Right><a href='byond://?src=\ref[src];useengine=1'>Use Part</a><a href='byond://?src=\ref[src];wait=1'>Wait</a></P>"
|
||||
else
|
||||
eventdat += "<P ALIGN=Right><a href='byond://?src=\ref[src];wait=1'>Wait</a></P>"
|
||||
eventdat += "<P ALIGN=Right><a href='byond://?src=\ref[src];close=1'>Close</a></P>"
|
||||
|
||||
if(ORION_TRAIL_MALFUNCTION)
|
||||
eventdat += "The ship's systems are malfunctioning!"
|
||||
eventdat += "<br>You can replace the broken electronics with spares, or you can spend 3 days troubleshooting the AI."
|
||||
if(electronics >= 1)
|
||||
eventdat += "<P ALIGN=Right><a href='byond://?src=\ref[src];useelec=1'>Use Part</a><a href='byond://?src=\ref[src];wait=1'>Wait</a></P>"
|
||||
else
|
||||
eventdat += "<P ALIGN=Right><a href='byond://?src=\ref[src];wait=1'>Wait</a></P>"
|
||||
eventdat += "<P ALIGN=Right><a href='byond://?src=\ref[src];close=1'>Close</a></P>"
|
||||
|
||||
if(ORION_TRAIL_COLLISION)
|
||||
eventdat += "Something hit us! Looks like there's some hull damage."
|
||||
if(prob(25))
|
||||
var/sfood = rand(5,15)
|
||||
var/sfuel = rand(5,15)
|
||||
food -= sfood
|
||||
fuel -= sfuel
|
||||
eventdat += "<br>[sfood] <b>Food</b> and [sfuel] <b>Fuel</b> was vented out into space."
|
||||
if(prob(10))
|
||||
var/deadname = remove_crewmember()
|
||||
eventdat += "<br>[deadname] was killed by rapid depressurization."
|
||||
eventdat += "<br>You can repair the damage with hull plates, or you can spend the next 3 days welding scrap together."
|
||||
if(hull >= 1)
|
||||
eventdat += "<P ALIGN=Right><a href='byond://?src=\ref[src];usehull=1'>Use Part</a><a href='byond://?src=\ref[src];wait=1'>Wait</a></P>"
|
||||
else
|
||||
eventdat += "<P ALIGN=Right><a href='byond://?src=\ref[src];wait=1'>Wait</a></P>"
|
||||
eventdat += "<P ALIGN=Right><a href='byond://?src=\ref[src];close=1'>Close</a></P>"
|
||||
|
||||
if(ORION_TRAIL_BLACKHOLE)
|
||||
eventdat += "You were swept away into the black hole."
|
||||
eventdat += "<P ALIGN=Right><a href='byond://?src=\ref[src];holedeath=1'>Oh...</a></P>"
|
||||
eventdat += "<P ALIGN=Right><a href='byond://?src=\ref[src];close=1'>Close</a></P>"
|
||||
settlers = list()
|
||||
|
||||
if(ORION_TRAIL_LING)
|
||||
eventdat += "Strange reports warn of changelings infiltrating crews on trips to Orion..."
|
||||
if(settlers.len <= 1)
|
||||
eventdat += "<br>Your crew's chance of reaching Orion is so slim the changelings likely avoided your ship..."
|
||||
eventdat += "<P ALIGN=Right><a href='byond://?src=\ref[src];eventclose=1'>Continue</a></P>"
|
||||
eventdat += "<P ALIGN=Right><a href='byond://?src=\ref[src];close=1'>Close</a></P>"
|
||||
if(prob(10)) // "likely", I didn't say it was guaranteed!
|
||||
lings_aboard = min(++lings_aboard,2)
|
||||
else
|
||||
if(lings_aboard) //less likely to stack lings
|
||||
if(prob(20))
|
||||
lings_aboard = min(++lings_aboard,2)
|
||||
else if(prob(70))
|
||||
lings_aboard = min(++lings_aboard,2)
|
||||
|
||||
eventdat += "<P ALIGN=Right><a href='byond://?src=\ref[src];killcrew=1'>Kill a crewmember</a></P>"
|
||||
eventdat += "<P ALIGN=Right><a href='byond://?src=\ref[src];eventclose=1'>Risk it</a></P>"
|
||||
eventdat += "<P ALIGN=Right><a href='byond://?src=\ref[src];close=1'>Close</a></P>"
|
||||
|
||||
if(ORION_TRAIL_LING_ATTACK)
|
||||
if(lings_aboard <= 0) //shouldn't trigger, but hey.
|
||||
eventdat += "Haha, fooled you, there are no changelings on board!"
|
||||
eventdat += "<br>(You should report this to a coder :S)"
|
||||
else
|
||||
var/ling1 = remove_crewmember()
|
||||
var/ling2 = ""
|
||||
if(lings_aboard >= 2)
|
||||
ling2 = remove_crewmember()
|
||||
|
||||
eventdat += "Oh no, some of your crew are Changelings!"
|
||||
if(ling2)
|
||||
eventdat += "<br>[ling1] and [ling2]'s arms twist and contort into grotesque blades!"
|
||||
else
|
||||
eventdat += "<br>[ling1]'s arm twists and contorts into a grotesque blade!"
|
||||
|
||||
var/chance2attack = alive*20
|
||||
if(prob(chance2attack))
|
||||
var/chancetokill = 30*lings_aboard-(5*alive) //eg: 30*2-(10) = 50%, 2 lings, 2 crew is 50% chance
|
||||
if(prob(chancetokill))
|
||||
var/deadguy = remove_crewmember()
|
||||
eventdat += "<br>The Changeling[ling2 ? "s":""] run[ling2 ? "":"s"] up to [deadguy] and capitulates them!"
|
||||
else
|
||||
eventdat += "<br>You valiantly fight off the Changeling[ling2 ? "s":""]!"
|
||||
eventdat += "<br>You cut the Changeling[ling2 ? "s":""] up into meat... Eww"
|
||||
if(ling2)
|
||||
food += 30
|
||||
lings_aboard = max(0,lings_aboard-2)
|
||||
else
|
||||
food += 15
|
||||
lings_aboard = max(0,--lings_aboard)
|
||||
else
|
||||
eventdat += "<br>The Changeling[ling2 ? "s":""] run[ling2 ? "":"s"] away, What wimps!"
|
||||
if(ling2)
|
||||
lings_aboard = max(0,lings_aboard-2)
|
||||
else
|
||||
lings_aboard = max(0,--lings_aboard)
|
||||
|
||||
eventdat += "<P ALIGN=Right><a href='byond://?src=\ref[src];eventclose=1'>Continue</a></P>"
|
||||
eventdat += "<P ALIGN=Right><a href='byond://?src=\ref[src];close=1'>Close</a></P>"
|
||||
|
||||
|
||||
if(ORION_TRAIL_SPACEPORT)
|
||||
if(spaceport_raided)
|
||||
eventdat += "The Spaceport is on high alert! they wont let you dock since you tried to attack them!"
|
||||
if(last_spaceport_action)
|
||||
eventdat += "<br>Last Spaceport Action: [last_spaceport_action]"
|
||||
eventdat += "<P ALIGN=Right><a href='byond://?src=\ref[src];leave_spaceport=1'>Depart Spaceport</a></P>"
|
||||
eventdat += "<P ALIGN=Right><a href='byond://?src=\ref[src];close=1'>Close</a></P>"
|
||||
else
|
||||
eventdat += "You pull the ship up to dock at a nearby Spaceport, lucky find!"
|
||||
eventdat += "<br>This Spaceport is home to travellers who failed to reach Orion, but managed to find a different home..."
|
||||
eventdat += "<br>Trading terms: FU = Fuel, FO = Food"
|
||||
if(last_spaceport_action)
|
||||
eventdat += "<br>Last Spaceport Action: [last_spaceport_action]"
|
||||
eventdat += "<h3><b>Crew:</b></h3>"
|
||||
eventdat += english_list(settlers)
|
||||
eventdat += "<br><b>Food: </b>[food] | <b>Fuel: </b>[fuel]"
|
||||
eventdat += "<br><b>Engine Parts: </b>[engine] | <b>Hull Panels: </b>[hull] | <b>Electronics: </b>[electronics]"
|
||||
|
||||
|
||||
//If your crew is pathetic you can get freebies (provided you haven't already gotten one from this port)
|
||||
if(!spaceport_freebie && (fuel < 20 || food < 20))
|
||||
spaceport_freebie++
|
||||
var/FU = 10
|
||||
var/FO = 10
|
||||
var/freecrew = 0
|
||||
if(prob(30))
|
||||
FU = 25
|
||||
FO = 25
|
||||
|
||||
if(prob(10))
|
||||
add_crewmember()
|
||||
freecrew++
|
||||
|
||||
eventdat += "<br>The traders of the spaceport take pitty on you, and give you some food and fuel (+[FU]FU,+[FO]FO)"
|
||||
if(freecrew)
|
||||
eventdat += "<br>You also gain a new crewmember!"
|
||||
|
||||
fuel += FU
|
||||
food += FO
|
||||
|
||||
//CREW INTERACTIONS
|
||||
eventdat += "<P ALIGN=Right>Crew Management:</P>"
|
||||
|
||||
//Buy crew
|
||||
if(food >= 10 && fuel >= 10)
|
||||
eventdat += "<P ALIGN=Right><a href='byond://?src=\ref[src];buycrew=1'>Hire a new Crewmember (-10FU,-10FO)</a></P>"
|
||||
else
|
||||
eventdat += "<P ALIGN=Right>Cant afford a new Crewmember</P>"
|
||||
|
||||
//Sell crew
|
||||
if(settlers.len > 1)
|
||||
eventdat += "<P ALIGN=Right><a href='byond://?src=\ref[src];sellcrew=1'>Sell crew for Fuel and Food (+15FU,+15FO)</a></P>"
|
||||
else
|
||||
eventdat += "<P ALIGN=Right>Cant afford to sell a Crewmember</P>"
|
||||
|
||||
//BUY/SELL STUFF
|
||||
eventdat += "<P ALIGN=Right>Spare Parts:</P>"
|
||||
|
||||
//Engine parts
|
||||
if(fuel > 5)
|
||||
eventdat += "<P ALIGN=Right><a href='byond://?src=\ref[src];buyparts=1'>Buy Engine Parts (-5FU)</a></P>"
|
||||
else
|
||||
eventdat += "<P ALIGN=Right>Cant afford to buy Engine Parts</a>"
|
||||
|
||||
//Hull plates
|
||||
if(fuel > 5)
|
||||
eventdat += "<P ALIGN=Right><a href='byond://?src=\ref[src];buyparts=2'>Buy Hull Plates (-5FU)</a></P>"
|
||||
else
|
||||
eventdat += "<P ALIGN=Right>Cant afford to buy Hull Plates</a>"
|
||||
|
||||
//Electronics
|
||||
if(fuel > 5)
|
||||
eventdat += "<P ALIGN=Right><a href='byond://?src=\ref[src];buyparts=3'>Buy Spare Electronics (-5FU)</a></P>"
|
||||
else
|
||||
eventdat += "<P ALIGN=Right>Cant afford to buy Spare Electronics</a>"
|
||||
|
||||
//Trade
|
||||
if(fuel > 5)
|
||||
eventdat += "<P ALIGN=Right><a href='byond://?src=\ref[src];trade=1'>Trade Fuel for Food (-5FU,+5FO)</a></P>"
|
||||
else
|
||||
eventdat += "<P ALIGN=Right>Cant afford to Trade Fuel for Food</P"
|
||||
|
||||
if(food > 5)
|
||||
eventdat += "<P ALIGN=Right><a href='byond://?src=\ref[src];trade=2'>Trade Food for Fuel (+5FU,-5FO)</a></P>"
|
||||
else
|
||||
eventdat += "<P ALIGN=Right>Cant afford to Trade Food for Fuel</P"
|
||||
|
||||
//Raid the spaceport
|
||||
eventdat += "<P ALIGN=Right><a href='byond://?src=\ref[src];raid_spaceport=1'>!! Raid Spaceport !!</a></P>"
|
||||
|
||||
eventdat += "<P ALIGN=Right><a href='byond://?src=\ref[src];leave_spaceport=1'>Depart Spaceport</a></P>"
|
||||
|
||||
|
||||
//Add Random/Specific crewmember
|
||||
/obj/machinery/computer/arcade/orion_trail/proc/add_crewmember(var/specific = "")
|
||||
var/newcrew = ""
|
||||
if(specific)
|
||||
newcrew = specific
|
||||
else
|
||||
if(prob(50))
|
||||
var/sfood = rand(1,10)
|
||||
var/sfuel = rand(1,10)
|
||||
food -= sfood
|
||||
fuel -= sfuel
|
||||
eventdat += "<br>They have stolen [sfood] <b>Food</b> and [sfuel] <b>Fuel</b>."
|
||||
else if(prob(10))
|
||||
var/deadname = pick_n_take(settlers)
|
||||
eventdat += "<br>[deadname] tried to fight back but was killed."
|
||||
alive -= 1
|
||||
newcrew = pick(first_names_male)
|
||||
else
|
||||
eventdat += "<br>Fortunately you fended them off without any trouble."
|
||||
eventdat += "<P ALIGN=Right><a href='byond://?src=\ref[src];eventclose=1'>Continue</a></P>"
|
||||
eventdat += "<P ALIGN=Right><a href='byond://?src=\ref[src];close=1'>Close</a></P>"
|
||||
else if(event == "Interstellar Flux")
|
||||
eventdat += "This region of space is highly turbulent. <br>If we go slowly we may avoid more damage, but if we keep our speed we won't waste supplies."
|
||||
eventdat += "<br>What will you do?"
|
||||
eventdat += "<P ALIGN=Right><a href='byond://?src=\ref[src];slow=1'>Slow Down</a> <a href='byond://?src=\ref[src];keepspeed=1'>Continue</a></P>"
|
||||
eventdat += "<P ALIGN=Right><a href='byond://?src=\ref[src];close=1'>Close</a></P>"
|
||||
newcrew = pick(first_names_female)
|
||||
if(newcrew)
|
||||
settlers += newcrew
|
||||
alive++
|
||||
return newcrew
|
||||
|
||||
else if(event == "Illness")
|
||||
eventdat += "A deadly illness has been contracted!"
|
||||
var/deadname = pick_n_take(settlers)
|
||||
eventdat += "<br>[deadname] was killed by the disease."
|
||||
alive -= 1
|
||||
eventdat += "<P ALIGN=Right><a href='byond://?src=\ref[src];eventclose=1'>Continue</a></P>"
|
||||
eventdat += "<P ALIGN=Right><a href='byond://?src=\ref[src];close=1'>Close</a></P>"
|
||||
else if(event == "Breakdown")
|
||||
eventdat += "Oh no! The engine has broken down!"
|
||||
eventdat += "<br>You can repair it with an engine part, or you can make repairs for 3 days."
|
||||
if(engine >= 1)
|
||||
eventdat += "<P ALIGN=Right><a href='byond://?src=\ref[src];useengine=1'>Use Part</a><a href='byond://?src=\ref[src];wait=1'>Wait</a></P>"
|
||||
else
|
||||
eventdat += "<P ALIGN=Right><a href='byond://?src=\ref[src];wait=1'>Wait</a></P>"
|
||||
eventdat += "<P ALIGN=Right><a href='byond://?src=\ref[src];close=1'>Close</a></P>"
|
||||
|
||||
else if(event == "Malfunction")
|
||||
eventdat += "The ship's systems are malfunctioning!"
|
||||
eventdat += "<br>You can replace the broken electronics with spares, or you can spend 3 days troubleshooting the AI."
|
||||
if(electronics >= 1)
|
||||
eventdat += "<P ALIGN=Right><a href='byond://?src=\ref[src];useelec=1'>Use Part</a><a href='byond://?src=\ref[src];wait=1'>Wait</a></P>"
|
||||
else
|
||||
eventdat += "<P ALIGN=Right><a href='byond://?src=\ref[src];wait=1'>Wait</a></P>"
|
||||
eventdat += "<P ALIGN=Right><a href='byond://?src=\ref[src];close=1'>Close</a></P>"
|
||||
//Remove Random/Specific crewmember
|
||||
/obj/machinery/computer/arcade/orion_trail/proc/remove_crewmember(var/specific = "", var/dont_remove = "")
|
||||
var/list/safe2remove = settlers
|
||||
var/removed = ""
|
||||
if(dont_remove)
|
||||
safe2remove -= dont_remove
|
||||
if(specific && specific != dont_remove)
|
||||
safe2remove = list(specific)
|
||||
else
|
||||
removed = pick(safe2remove)
|
||||
|
||||
else if(event == "Collision")
|
||||
eventdat += "Something hit us! Looks like there's some hull damage."
|
||||
if(prob(25))
|
||||
var/sfood = rand(5,15)
|
||||
var/sfuel = rand(5,15)
|
||||
food -= sfood
|
||||
fuel -= sfuel
|
||||
eventdat += "<br>[sfood] <b>Food</b> and [sfuel] <b>Fuel</b> was vented out into space."
|
||||
if(prob(10))
|
||||
var/deadname = pick_n_take(settlers)
|
||||
eventdat += "<br>[deadname] was killed by rapid depressurization."
|
||||
alive -= 1
|
||||
eventdat += "<br>You can repair the damage with hull plates, or you can spend the next 3 days welding scrap together."
|
||||
if(hull >= 1)
|
||||
eventdat += "<P ALIGN=Right><a href='byond://?src=\ref[src];usehull=1'>Use Part</a><a href='byond://?src=\ref[src];wait=1'>Wait</a></P>"
|
||||
else
|
||||
eventdat += "<P ALIGN=Right><a href='byond://?src=\ref[src];wait=1'>Wait</a></P>"
|
||||
eventdat += "<P ALIGN=Right><a href='byond://?src=\ref[src];close=1'>Close</a></P>"
|
||||
|
||||
else if(event == "BlackHole")
|
||||
eventdat += "You were swept away into the black hole."
|
||||
eventdat += "<P ALIGN=Right><a href='byond://?src=\ref[src];holedeath=1'>Oh...</a></P>"
|
||||
eventdat += "<P ALIGN=Right><a href='byond://?src=\ref[src];close=1'>Close</a></P>"
|
||||
settlers = list()
|
||||
if(removed)
|
||||
if(lings_aboard && prob(40*lings_aboard)) //if there are 2 lings you're twice as likely to get one, obviously
|
||||
lings_aboard = max(0,--lings_aboard)
|
||||
settlers -= removed
|
||||
alive--
|
||||
return removed
|
||||
|
||||
|
||||
/obj/machinery/computer/arcade/orion_trail/proc/win()
|
||||
playing = 0
|
||||
say("Congratulations, you made it to Orion!")
|
||||
if(emagged)
|
||||
new /obj/item/weapon/orion_ship(src.loc)
|
||||
message_admins("[key_name_admin(usr)] made it to Orion on an emagged machine and got an explosive toy ship.")
|
||||
@@ -688,6 +997,26 @@
|
||||
newgame()
|
||||
emagged = 1
|
||||
|
||||
/mob/living/simple_animal/hostile/syndicate/ranged/orion
|
||||
name = "Spaceport Security"
|
||||
desc = "The Premier security forces for all spaceports found along the Orion Trail."
|
||||
faction = list("orion")
|
||||
corpse = /obj/effect/landmark/mobcorpse/orionsecurity
|
||||
|
||||
/obj/effect/landmark/mobcorpse/orionsecurity
|
||||
name = "Spaceport Security"
|
||||
corpseuniform = /obj/item/clothing/under/syndicate
|
||||
corpsesuit = /obj/item/clothing/suit/armor/vest
|
||||
corpseshoes = /obj/item/clothing/shoes/combat
|
||||
corpsegloves = /obj/item/clothing/gloves/combat
|
||||
corpseradio = /obj/item/device/radio/headset
|
||||
corpsemask = /obj/item/clothing/mask/gas
|
||||
corpsehelmet = /obj/item/clothing/head/helmet/swat
|
||||
corpseback = /obj/item/weapon/storage/backpack
|
||||
corpseid = 1
|
||||
corpseidjob = "Officer"
|
||||
corpseidaccess = "Syndicate"
|
||||
|
||||
/obj/item/weapon/orion_ship
|
||||
name = "model settler ship"
|
||||
desc = "A model spaceship, it looks like those used back in the day when travelling to Orion! It even has a miniature FX-293 reactor, which was renowned for its instability and tendency to explode..."
|
||||
@@ -726,4 +1055,17 @@
|
||||
sleep(3.6)
|
||||
src.visible_message("<span class='userdanger'>[src] explodes!</span>")
|
||||
explosion(src.loc, 1,2,4, flame_range = 3)
|
||||
qdel(src)
|
||||
qdel(src)
|
||||
|
||||
|
||||
#undef ORION_TRAIL_WINTURN
|
||||
#undef ORION_TRAIL_RAIDERS
|
||||
#undef ORION_TRAIL_FLUX
|
||||
#undef ORION_TRAIL_ILLNESS
|
||||
#undef ORION_TRAIL_BREAKDOWN
|
||||
#undef ORION_TRAIL_LING
|
||||
#undef ORION_TRAIL_LING_ATTACK
|
||||
#undef ORION_TRAIL_MALFUNCTION
|
||||
#undef ORION_TRAIL_COLLISION
|
||||
#undef ORION_TRAIL_SPACEPORT
|
||||
#undef ORION_TRAIL_BLACKHOLE
|
||||
|
||||
@@ -128,7 +128,7 @@
|
||||
build_path = /obj/machinery/computer/arcade/battle
|
||||
origin_tech = "programming=1"
|
||||
/obj/item/weapon/circuitboard/arcade/orion_trail
|
||||
name = "circuit board (Orion_Trail)"
|
||||
name = "circuit board (Orion Trail)"
|
||||
build_path = /obj/machinery/computer/arcade/orion_trail
|
||||
/obj/item/weapon/circuitboard/turbine_control
|
||||
name = "circuit board (Turbine control)"
|
||||
|
||||
@@ -29,9 +29,6 @@
|
||||
return 0
|
||||
|
||||
set_ready_state(0)
|
||||
chassis.can_move = 0
|
||||
spawn(shot_delay*projectiles_per_shot)
|
||||
chassis.can_move = 1
|
||||
for(var/i=1 to get_shot_amount())
|
||||
var/obj/item/projectile/A = new projectile(curloc)
|
||||
A.firer = chassis.occupant
|
||||
|
||||
@@ -9,6 +9,7 @@ var/global/image/fire_overlay = image("icon" = 'icons/effects/fire.dmi', "icon_s
|
||||
|
||||
//Not on /clothing because for some reason any /obj/item can technically be "worn" with enough fuckery.
|
||||
var/icon/alternate_worn_icon = null//If this is set, update_icons() will find on mob (WORN, NOT INHANDS) states in this file instead, primary use: badminnery/events
|
||||
var/alternate_worn_layer = null//If this is set, update_icons() will force the on mob state (WORN, NOT INHANDS) onto this layer, instead of it's default
|
||||
|
||||
var/hitsound = null
|
||||
var/throwhitsound = null
|
||||
|
||||
@@ -36,27 +36,36 @@
|
||||
icon = 'icons/obj/bodybag.dmi'
|
||||
icon_state = "bodybag"
|
||||
var/foldedbag_path = /obj/item/bodybag
|
||||
var/tagged = 0 // so closet code knows to put the tag overlay back
|
||||
density = 0
|
||||
mob_storage_capacity = 2
|
||||
|
||||
|
||||
/obj/structure/closet/body_bag/attackby(obj/item/I, mob/user, params)
|
||||
if (istype(I, /obj/item/weapon/pen))
|
||||
if (istype(I, /obj/item/weapon/pen) || istype(I, /obj/item/toy/crayon))
|
||||
var/t = stripped_input(user, "What would you like the label to be?", name, null, 53)
|
||||
if(user.get_active_hand() != I)
|
||||
return
|
||||
if(!in_range(src, user) && loc != user)
|
||||
return
|
||||
if(t)
|
||||
name = "body bag - "
|
||||
name += t
|
||||
overlays += "bodybag_label"
|
||||
name = "body bag - [t]"
|
||||
tagged = 1
|
||||
update_icon()
|
||||
else
|
||||
name = "body bag"
|
||||
return
|
||||
else if(istype(I, /obj/item/weapon/wirecutters))
|
||||
user << "<span class='notice'>You cut the tag off of [src].</span>"
|
||||
user << "<span class='notice'>You cut the tag off [src].</span>"
|
||||
name = "body bag"
|
||||
tagged = 0
|
||||
update_icon()
|
||||
|
||||
/obj/structure/closet/body_bag/update_icon()
|
||||
..()
|
||||
if (tagged)
|
||||
overlays += "bodybag_label"
|
||||
else
|
||||
overlays.Cut()
|
||||
|
||||
|
||||
|
||||
@@ -205,6 +205,7 @@
|
||||
/obj/item/weapon/gun/projectile/revolver,
|
||||
/obj/item/ammo_box,
|
||||
)
|
||||
alternate_worn_layer = UNDER_SUIT_LAYER
|
||||
|
||||
/obj/item/weapon/storage/belt/fannypack
|
||||
name = "fannypack"
|
||||
|
||||
@@ -7,8 +7,8 @@ LINEN BINS
|
||||
/obj/item/weapon/bedsheet
|
||||
name = "bedsheet"
|
||||
desc = "A surprisingly soft linen bedsheet."
|
||||
icon = 'icons/obj/items.dmi'
|
||||
icon_state = "sheet"
|
||||
icon = 'icons/obj/bedsheets.dmi'
|
||||
icon_state = "white"
|
||||
item_state = "bedsheet"
|
||||
slot_flags = SLOT_BACK
|
||||
layer = 4.0
|
||||
@@ -41,129 +41,133 @@ LINEN BINS
|
||||
..()
|
||||
|
||||
/obj/item/weapon/bedsheet/blue
|
||||
icon_state = "sheetblue"
|
||||
icon_state = "blue"
|
||||
item_color = "blue"
|
||||
|
||||
/obj/item/weapon/bedsheet/green
|
||||
icon_state = "sheetgreen"
|
||||
icon_state = "green"
|
||||
item_color = "green"
|
||||
|
||||
/obj/item/weapon/bedsheet/orange
|
||||
icon_state = "sheetorange"
|
||||
icon_state = "orange"
|
||||
item_color = "orange"
|
||||
|
||||
/obj/item/weapon/bedsheet/purple
|
||||
icon_state = "sheetpurple"
|
||||
icon_state = "purple"
|
||||
item_color = "purple"
|
||||
|
||||
/obj/item/weapon/bedsheet/patriot
|
||||
name = "patriotic bedsheet"
|
||||
desc = "You've never felt more free than when sleeping on this."
|
||||
icon_state = "sheetUSA"
|
||||
icon_state = "USA"
|
||||
item_color = "sheetUSA"
|
||||
|
||||
/obj/item/weapon/bedsheet/rainbow
|
||||
name = "rainbow bedsheet"
|
||||
desc = "A multicolored blanket. It's actually several different sheets cut up and sewn together."
|
||||
icon_state = "sheetrainbow"
|
||||
desc = "A multicolored blanket. It's actually several different sheets cut up and sewn together."
|
||||
icon_state = "rainbow"
|
||||
item_color = "rainbow"
|
||||
|
||||
/obj/item/weapon/bedsheet/red
|
||||
icon_state = "sheetred"
|
||||
icon_state = "red"
|
||||
item_color = "red"
|
||||
|
||||
/obj/item/weapon/bedsheet/yellow
|
||||
icon_state = "sheetyellow"
|
||||
icon_state = "yellow"
|
||||
item_color = "yellow"
|
||||
|
||||
/obj/item/weapon/bedsheet/mime
|
||||
name = "mime's blanket"
|
||||
desc = "A very soothing striped blanket. All the noise just seems to fade out when you're under the covers in this."
|
||||
icon_state = "sheetmime"
|
||||
icon_state = "mime"
|
||||
item_color = "mime"
|
||||
|
||||
/obj/item/weapon/bedsheet/clown
|
||||
name = "clown's blanket"
|
||||
desc = "A rainbow blanket with a clown mask woven in. It smells faintly of bananas."
|
||||
icon_state = "sheetclown"
|
||||
desc = "A rainbow blanket with a clown mask woven in. It smells faintly of bananas."
|
||||
icon_state = "clown"
|
||||
item_color = "clown"
|
||||
|
||||
/obj/item/weapon/bedsheet/captain
|
||||
name = "captain's bedsheet"
|
||||
desc = "It has a Nanotrasen symbol on it, and was woven with a revolutionary new kind of thread guaranteed to have 0.01% permeability for most non-chemical substances, popular among most modern captains."
|
||||
icon_state = "sheetcaptain"
|
||||
icon_state = "captain"
|
||||
item_color = "captain"
|
||||
|
||||
/obj/item/weapon/bedsheet/rd
|
||||
name = "research director's bedsheet"
|
||||
desc = "It appears to have a beaker emblem, and is made out of fire-resistant material, although it probably won't protect you in the event of fires you're familiar with every day."
|
||||
icon_state = "sheetrd"
|
||||
icon_state = "rd"
|
||||
item_color = "director"
|
||||
|
||||
/obj/item/weapon/bedsheet/medical
|
||||
name = "medical blanket"
|
||||
desc = "It's a sterilized* blanket commonly used in the Medbay. *Sterilization is voided if a virologist is present onboard the station."
|
||||
icon_state = "sheetmedical"
|
||||
icon_state = "medical"
|
||||
item_color = "medical"
|
||||
|
||||
/obj/item/weapon/bedsheet/cmo
|
||||
name = "chief medical officer's bedsheet"
|
||||
desc = "It's a sterilized blanket that has a cross emblem. There's some cat fur on it, likely from Runtime."
|
||||
icon_state = "sheetcmo"
|
||||
desc = "It's a sterilized blanket that has a cross emblem. There's some cat fur on it, likely from Runtime."
|
||||
icon_state = "cmo"
|
||||
item_color = "cmo"
|
||||
|
||||
/obj/item/weapon/bedsheet/hos
|
||||
name = "head of security's bedsheet"
|
||||
desc = "It is decorated with a shield emblem. While crime doesn't sleep, you do, but you are still THE LAW!"
|
||||
icon_state = "sheethos"
|
||||
desc = "It is decorated with a shield emblem. While crime doesn't sleep, you do, but you are still THE LAW!"
|
||||
icon_state = "hos"
|
||||
item_color = "hosred"
|
||||
|
||||
/obj/item/weapon/bedsheet/hop
|
||||
name = "head of personnel's bedsheet"
|
||||
desc = "It is decorated with a key emblem. For those rare moments when you can rest and cuddle with Ian without someone screaming for you over the radio."
|
||||
icon_state = "sheethop"
|
||||
desc = "It is decorated with a key emblem. For those rare moments when you can rest and cuddle with Ian without someone screaming for you over the radio."
|
||||
icon_state = "hop"
|
||||
item_color = "hop"
|
||||
|
||||
/obj/item/weapon/bedsheet/ce
|
||||
name = "chief engineer's bedsheet"
|
||||
desc = "It is decorated with a wrench emblem. It's highly reflective and stain resistant, so you don't need to worry about ruining it with oil."
|
||||
icon_state = "sheetce"
|
||||
desc = "It is decorated with a wrench emblem. It's highly reflective and stain resistant, so you don't need to worry about ruining it with oil."
|
||||
icon_state = "ce"
|
||||
item_color = "chief"
|
||||
|
||||
/obj/item/weapon/bedsheet/qm
|
||||
name = "quartermaster's bedsheet"
|
||||
desc = "It is decorated with a crate emblem in silver lining. It's rather tough, and just the thing to lie on after a hard day of pushing paper."
|
||||
icon_state = "sheetqm"
|
||||
icon_state = "qm"
|
||||
item_color = "qm"
|
||||
|
||||
/obj/item/weapon/bedsheet/brown
|
||||
icon_state = "sheetbrown"
|
||||
icon_state = "brown"
|
||||
item_color = "cargo"
|
||||
|
||||
/obj/item/weapon/bedsheet/centcom
|
||||
name = "\improper Centcom bedsheet"
|
||||
desc = "Woven with advanced nanothread for warmth as well as being very decorated, essential for all officials."
|
||||
icon_state = "sheetcentcom"
|
||||
icon_state = "centcom"
|
||||
item_color = "centcom"
|
||||
|
||||
/obj/item/weapon/bedsheet/syndie
|
||||
name = "syndicate bedsheet"
|
||||
desc = "It has a syndicate emblem and it has an aura of evil."
|
||||
icon_state = "sheetsyndie"
|
||||
icon_state = "syndie"
|
||||
item_color = "syndie"
|
||||
|
||||
/obj/item/weapon/bedsheet/cult
|
||||
name = "cultist's bedsheet"
|
||||
desc = "You might dream of Nar'Sie if you sleep with this. It seems rather tattered and glows of an eldritch presence."
|
||||
icon_state = "sheetcult"
|
||||
desc = "You might dream of Nar'Sie if you sleep with this. It seems rather tattered and glows of an eldritch presence."
|
||||
icon_state = "cult"
|
||||
item_color = "cult"
|
||||
|
||||
/obj/item/weapon/bedsheet/wiz
|
||||
name = "wizard's bedsheet"
|
||||
desc = "A special fabric enchanted with magic so you can have an enchanted night. It even glows!"
|
||||
icon_state = "sheetwiz"
|
||||
desc = "A special fabric enchanted with magic so you can have an enchanted night. It even glows!"
|
||||
icon_state = "wiz"
|
||||
item_color = "wiz"
|
||||
|
||||
/obj/item/weapon/bedsheet/ian
|
||||
icon_state = "ian"
|
||||
item_color = "ian"
|
||||
|
||||
|
||||
/obj/structure/bedsheetbin
|
||||
name = "linen bin"
|
||||
|
||||
@@ -46,6 +46,7 @@
|
||||
overlays += "unlocked"
|
||||
else
|
||||
overlays += "off"
|
||||
|
||||
else
|
||||
if(icon_door_override)
|
||||
overlays += "[icon_door]_open"
|
||||
|
||||
@@ -40,7 +40,12 @@ But you can call procs that are of type /mob/living/carbon/human/proc/ for that
|
||||
switch(alert("Proc owned by something?",,"Yes","No"))
|
||||
if("Yes")
|
||||
targetselected = 1
|
||||
class = input("Proc owned by...","Owner",null) as null|anything in list("Obj","Mob","Area or Turf","Client")
|
||||
if(src.holder && src.holder.marked_datum)
|
||||
class = input("Proc owned by...","Owner",null) as null|anything in list("Obj","Mob","Area or Turf","Client","Marked datum ([holder.marked_datum.type])")
|
||||
if(class == "Marked datum ([holder.marked_datum.type])")
|
||||
class = "Marked datum"
|
||||
else
|
||||
class = input("Proc owned by...","Owner",null) as null|anything in list("Obj","Mob","Area or Turf","Client")
|
||||
switch(class)
|
||||
if("Obj")
|
||||
target = input("Enter target:","Target",usr) as obj in world
|
||||
@@ -53,6 +58,8 @@ But you can call procs that are of type /mob/living/carbon/human/proc/ for that
|
||||
for(var/client/C)
|
||||
keys += C
|
||||
target = input("Please, select a player!", "Selection", null, null) as null|anything in keys
|
||||
if("Marked datum")
|
||||
target = holder.marked_datum
|
||||
else
|
||||
return
|
||||
if("No")
|
||||
@@ -61,7 +68,9 @@ But you can call procs that are of type /mob/living/carbon/human/proc/ for that
|
||||
|
||||
var/procname = input("Proc path, eg: /proc/fake_blood","Path:", null) as text|null
|
||||
if(!procname) return
|
||||
|
||||
if(targetselected && !hascall(target,procname))
|
||||
usr << "<font color='red'>Error: callproc(): target has no such call [procname].</font>"
|
||||
return
|
||||
var/list/lst = get_callproc_args()
|
||||
if(!lst)
|
||||
return
|
||||
@@ -70,9 +79,6 @@ But you can call procs that are of type /mob/living/carbon/human/proc/ for that
|
||||
if(!target)
|
||||
usr << "<font color='red'>Error: callproc(): owner of proc no longer exists.</font>"
|
||||
return
|
||||
if(!hascall(target,procname))
|
||||
usr << "<font color='red'>Error: callproc(): target has no such call [procname].</font>"
|
||||
return
|
||||
log_admin("[key_name(src)] called [target]'s [procname]() with [lst.len ? "the arguments [list2params(lst)]":"no arguments"].")
|
||||
returnval = call(target,procname)(arglist(lst)) // Pass the lst as an argument list to the proc
|
||||
else
|
||||
@@ -93,7 +99,9 @@ But you can call procs that are of type /mob/living/carbon/human/proc/ for that
|
||||
var/procname = input("Proc name, eg: fake_blood","Proc:", null) as text|null
|
||||
if(!procname)
|
||||
return
|
||||
|
||||
if(!hascall(A,procname))
|
||||
usr << "<span class='warning'>Error: callproc_datum(): target has no such call [procname].</span>"
|
||||
return
|
||||
var/list/lst = get_callproc_args()
|
||||
if(!lst)
|
||||
return
|
||||
@@ -101,9 +109,6 @@ But you can call procs that are of type /mob/living/carbon/human/proc/ for that
|
||||
if(!A || !IsValidSrc(A))
|
||||
usr << "<span class='warning'>Error: callproc_datum(): owner of proc no longer exists.</span>"
|
||||
return
|
||||
if(!hascall(A,procname))
|
||||
usr << "<span class='warning'>Error: callproc_datum(): target has no such call [procname].</span>"
|
||||
return
|
||||
log_admin("[key_name(src)] called [A]'s [procname]() with [lst.len ? "the arguments [list2params(lst)]":"no arguments"].")
|
||||
|
||||
spawn()
|
||||
@@ -115,15 +120,21 @@ But you can call procs that are of type /mob/living/carbon/human/proc/ for that
|
||||
/client/proc/get_callproc_args()
|
||||
var/argnum = input("Number of arguments","Number:",0) as num|null
|
||||
if(!argnum && (argnum!=0)) return
|
||||
|
||||
|
||||
var/list/lst = list()
|
||||
//TODO: make a list to store whether each argument was initialised as null.
|
||||
//Reason: So we can abort the proccall if say, one of our arguments was a mob which no longer exists
|
||||
//this will protect us from a fair few errors ~Carn
|
||||
|
||||
while(argnum--)
|
||||
var/class = null
|
||||
// Make a list with each index containing one variable, to be given to the proc
|
||||
var/class = input("What kind of variable?","Variable Type") in list("text","num","type","reference","mob reference","icon","file","client","mob's area","CANCEL")
|
||||
if(src.holder && src.holder.marked_datum)
|
||||
class = input("What kind of variable?","Variable Type") in list("text","num","type","reference","mob reference","icon","file","client","mob's area","Marked datum ([holder.marked_datum.type])","CANCEL")
|
||||
if(holder.marked_datum && class == "Marked datum ([holder.marked_datum.type])")
|
||||
class = "Marked datum"
|
||||
else
|
||||
class = input("What kind of variable?","Variable Type") in list("text","num","type","reference","mob reference","icon","file","client","mob's area","CANCEL")
|
||||
switch(class)
|
||||
if("CANCEL")
|
||||
return null
|
||||
@@ -158,6 +169,8 @@ But you can call procs that are of type /mob/living/carbon/human/proc/ for that
|
||||
if("mob's area")
|
||||
var/mob/temp = input("Select mob", "Selection", usr) as mob in world
|
||||
lst += temp.loc
|
||||
if("Marked datum")
|
||||
lst += holder.marked_datum
|
||||
return lst
|
||||
|
||||
|
||||
|
||||
@@ -9,11 +9,6 @@
|
||||
origin_tech = "biotech=3"
|
||||
var/braintype = "Cyborg"
|
||||
|
||||
req_access = list(access_robotics)
|
||||
|
||||
//Revised. Brainmob is now contained directly within object of transfer. MMI in this case.
|
||||
|
||||
var/locked = 0
|
||||
var/syndiemmi = 0 //Whether or not this is a Syndicate MMI
|
||||
var/mob/living/carbon/brain/brainmob = null //The current occupant.
|
||||
var/mob/living/silicon/robot = null //Appears unused.
|
||||
@@ -63,19 +58,10 @@
|
||||
name = "Man-Machine Interface: [brainmob.real_name]"
|
||||
update_icon()
|
||||
|
||||
locked = 1
|
||||
|
||||
feedback_inc("cyborg_mmis_filled",1)
|
||||
|
||||
return
|
||||
|
||||
if((istype(O,/obj/item/weapon/card/id)||istype(O,/obj/item/device/pda)) && brainmob)
|
||||
if(allowed(user))
|
||||
locked = !locked
|
||||
user << "<span class='notice'>You [locked ? "lock" : "unlock"] the brain holder.</span>"
|
||||
else
|
||||
user << "<span class='danger'>Access denied.</span>"
|
||||
return
|
||||
if(brainmob)
|
||||
O.attack(brainmob, user) //Oh noooeeeee
|
||||
return
|
||||
@@ -84,10 +70,8 @@
|
||||
/obj/item/device/mmi/attack_self(mob/user)
|
||||
if(!brain)
|
||||
user << "<span class='warning'>You upend the MMI, but there's nothing in it!</span>"
|
||||
else if(locked)
|
||||
user << "<span class='warning'>You upend the MMI, but the brain is clamped into place!</span>"
|
||||
else
|
||||
user << "<span class='notice'>You upend the MMI, spilling the brain onto the floor.</span>"
|
||||
user << "<span class='notice'>You unlock and upend the MMI, spilling the brain onto the floor.</span>"
|
||||
|
||||
brainmob.container = null //Reset brainmob mmi var.
|
||||
brainmob.loc = brain //Throw mob into brain.
|
||||
@@ -116,7 +100,6 @@
|
||||
|
||||
name = "Man-Machine Interface: [brainmob.real_name]"
|
||||
update_icon()
|
||||
locked = 1
|
||||
return
|
||||
|
||||
/obj/item/device/mmi/radio_enabled
|
||||
|
||||
@@ -11,7 +11,6 @@ var/global/posibrain_notif_cooldown = 0
|
||||
var/askDelay = 10 * 60 * 1
|
||||
brainmob = null
|
||||
req_access = list(access_robotics)
|
||||
locked = 0
|
||||
mecha = null//This does not appear to be used outside of reference in mecha.dm.
|
||||
braintype = "Android"
|
||||
|
||||
|
||||
@@ -212,13 +212,18 @@ Please contact me on #coderbus IRC. ~Carnie x
|
||||
var/image/standing
|
||||
|
||||
var/iconfile2use //Which icon file to use to generate the overlay and any female alterations.
|
||||
var/layer2use
|
||||
|
||||
if(U.alternate_worn_icon)
|
||||
iconfile2use = U.alternate_worn_icon
|
||||
if(!iconfile2use)
|
||||
iconfile2use = 'icons/mob/uniform.dmi'
|
||||
if(U.alternate_worn_layer)
|
||||
layer2use = U.alternate_worn_layer
|
||||
if(!layer2use)
|
||||
layer2use = UNIFORM_LAYER
|
||||
|
||||
standing = image("icon"=iconfile2use, "icon_state"="[t_color]_s", "layer"=-UNIFORM_LAYER)
|
||||
standing = image("icon"=iconfile2use, "icon_state"="[t_color]_s", "layer"=-layer2use)
|
||||
|
||||
overlays_standing[UNIFORM_LAYER] = standing
|
||||
|
||||
@@ -266,11 +271,17 @@ Please contact me on #coderbus IRC. ~Carnie x
|
||||
var/t_state = gloves.item_state
|
||||
if(!t_state) t_state = gloves.icon_state
|
||||
|
||||
var/layer2use
|
||||
if(gloves.alternate_worn_layer)
|
||||
layer2use = gloves.alternate_worn_layer
|
||||
if(!layer2use)
|
||||
layer2use = GLOVES_LAYER
|
||||
|
||||
var/image/standing
|
||||
if(gloves.alternate_worn_icon)
|
||||
standing = image("icon"=gloves.alternate_worn_icon, "icon_state"="[t_state]", "layer"=-GLOVES_LAYER)
|
||||
standing = image("icon"=gloves.alternate_worn_icon, "icon_state"="[t_state]", "layer"=-layer2use)
|
||||
if(!standing)
|
||||
standing = image("icon"='icons/mob/hands.dmi', "icon_state"="[t_state]", "layer"=-GLOVES_LAYER)
|
||||
standing = image("icon"='icons/mob/hands.dmi', "icon_state"="[t_state]", "layer"=-layer2use)
|
||||
|
||||
overlays_standing[GLOVES_LAYER] = standing
|
||||
|
||||
@@ -294,11 +305,17 @@ Please contact me on #coderbus IRC. ~Carnie x
|
||||
glasses.screen_loc = ui_glasses //...draw the item in the inventory screen
|
||||
client.screen += glasses //Either way, add the item to the HUD
|
||||
|
||||
var/layer2use
|
||||
if(glasses.alternate_worn_layer)
|
||||
layer2use = glasses.alternate_worn_layer
|
||||
if(!layer2use)
|
||||
layer2use = GLASSES_LAYER
|
||||
|
||||
var/image/standing
|
||||
if(glasses.alternate_worn_icon)
|
||||
standing = image("icon"=glasses.alternate_worn_icon, "icon_state"="[glasses.icon_state]","layer"=-GLASSES_LAYER)
|
||||
standing = image("icon"=glasses.alternate_worn_icon, "icon_state"="[glasses.icon_state]","layer"=-layer2use)
|
||||
if(!standing)
|
||||
standing = image("icon"='icons/mob/eyes.dmi', "icon_state"="[glasses.icon_state]", "layer"=-GLASSES_LAYER)
|
||||
standing = image("icon"='icons/mob/eyes.dmi', "icon_state"="[glasses.icon_state]", "layer"=-layer2use)
|
||||
|
||||
overlays_standing[GLASSES_LAYER] = standing
|
||||
|
||||
@@ -314,11 +331,17 @@ Please contact me on #coderbus IRC. ~Carnie x
|
||||
ears.screen_loc = ui_ears //...draw the item in the inventory screen
|
||||
client.screen += ears //Either way, add the item to the HUD
|
||||
|
||||
var/layer2use
|
||||
if(ears.alternate_worn_layer)
|
||||
layer2use = ears.alternate_worn_layer
|
||||
if(!layer2use)
|
||||
layer2use = EARS_LAYER
|
||||
|
||||
var/image/standing
|
||||
if(ears.alternate_worn_icon)
|
||||
standing = image("icon"=ears.alternate_worn_icon, "icon_state"="[ears.icon_state]", "layer"=-EARS_LAYER)
|
||||
standing = image("icon"=ears.alternate_worn_icon, "icon_state"="[ears.icon_state]", "layer"=-layer2use)
|
||||
if(!standing)
|
||||
standing = image("icon"='icons/mob/ears.dmi', "icon_state"="[ears.icon_state]", "layer"=-EARS_LAYER)
|
||||
standing = image("icon"='icons/mob/ears.dmi', "icon_state"="[ears.icon_state]", "layer"=-layer2use)
|
||||
|
||||
overlays_standing[EARS_LAYER] = standing
|
||||
|
||||
@@ -334,11 +357,17 @@ Please contact me on #coderbus IRC. ~Carnie x
|
||||
shoes.screen_loc = ui_shoes //...draw the item in the inventory screen
|
||||
client.screen += shoes //Either way, add the item to the HUD
|
||||
|
||||
var/layer2use
|
||||
if(shoes.alternate_worn_layer)
|
||||
layer2use = shoes.alternate_worn_layer
|
||||
if(!layer2use)
|
||||
layer2use = SHOES_LAYER
|
||||
|
||||
var/image/standing
|
||||
if(shoes.alternate_worn_icon)
|
||||
standing = image("icon"=shoes.alternate_worn_icon, "icon_state"="[shoes.icon_state]","layer"=-SHOES_LAYER)
|
||||
standing = image("icon"=shoes.alternate_worn_icon, "icon_state"="[shoes.icon_state]","layer"=-layer2use)
|
||||
if(!standing)
|
||||
standing = image("icon"='icons/mob/feet.dmi', "icon_state"="[shoes.icon_state]", "layer"=-SHOES_LAYER)
|
||||
standing = image("icon"='icons/mob/feet.dmi', "icon_state"="[shoes.icon_state]", "layer"=-layer2use)
|
||||
overlays_standing[SHOES_LAYER] = standing
|
||||
|
||||
if(shoes.blood_DNA)
|
||||
@@ -384,11 +413,17 @@ Please contact me on #coderbus IRC. ~Carnie x
|
||||
var/t_state = belt.item_state
|
||||
if(!t_state) t_state = belt.icon_state
|
||||
|
||||
var/layer2use
|
||||
if(belt.alternate_worn_layer)
|
||||
layer2use = belt.alternate_worn_layer
|
||||
if(!layer2use)
|
||||
layer2use = BELT_LAYER
|
||||
|
||||
var/image/standing
|
||||
if(belt.alternate_worn_icon)
|
||||
standing = image("icon"=belt.alternate_worn_icon, "icon_state"="[t_state]", "layer"=-BELT_LAYER)
|
||||
standing = image("icon"=belt.alternate_worn_icon, "icon_state"="[t_state]", "layer"=-layer2use)
|
||||
if(!standing)
|
||||
standing = image("icon"='icons/mob/belt.dmi', "icon_state"="[t_state]", "layer"=-BELT_LAYER)
|
||||
standing = image("icon"='icons/mob/belt.dmi', "icon_state"="[t_state]", "layer"=-layer2use)
|
||||
|
||||
overlays_standing[BELT_LAYER] = standing
|
||||
|
||||
@@ -405,11 +440,18 @@ Please contact me on #coderbus IRC. ~Carnie x
|
||||
wear_suit.screen_loc = ui_oclothing //TODO //...draw the item in the inventory screen
|
||||
client.screen += wear_suit //Either way, add the item to the HUD
|
||||
|
||||
|
||||
var/layer2use
|
||||
if(wear_suit.alternate_worn_layer)
|
||||
layer2use = wear_suit.alternate_worn_layer
|
||||
if(!layer2use)
|
||||
layer2use = SUIT_LAYER
|
||||
|
||||
var/image/standing
|
||||
if(wear_suit.alternate_worn_icon)
|
||||
standing = image("icon"=wear_suit.alternate_worn_icon, "icon_state"="[wear_suit.icon_state]", "layer"=-SUIT_LAYER)
|
||||
standing = image("icon"=wear_suit.alternate_worn_icon, "icon_state"="[wear_suit.icon_state]", "layer"=-layer2use)
|
||||
if(!standing)
|
||||
standing = image("icon"='icons/mob/suit.dmi', "icon_state"="[wear_suit.icon_state]", "layer"=-SUIT_LAYER)
|
||||
standing = image("icon"='icons/mob/suit.dmi', "icon_state"="[wear_suit.icon_state]", "layer"=-layer2use)
|
||||
overlays_standing[SUIT_LAYER] = standing
|
||||
|
||||
if(istype(wear_suit, /obj/item/clothing/suit/straight_jacket))
|
||||
|
||||
@@ -96,11 +96,18 @@
|
||||
/mob/living/carbon/update_inv_wear_mask()
|
||||
remove_overlay(FACEMASK_LAYER)
|
||||
if(istype(wear_mask, /obj/item/clothing/mask))
|
||||
|
||||
var/layer2use
|
||||
if(wear_mask.alternate_worn_layer)
|
||||
layer2use = wear_mask.alternate_worn_layer
|
||||
if(!layer2use)
|
||||
layer2use = FACEMASK_LAYER
|
||||
|
||||
var/image/standing
|
||||
if(wear_mask.alternate_worn_icon)
|
||||
standing = image("icon"=wear_mask.alternate_worn_icon, "icon_state"="[wear_mask.icon_state]", "layer"=-FACEMASK_LAYER)
|
||||
standing = image("icon"=wear_mask.alternate_worn_icon, "icon_state"="[wear_mask.icon_state]", "layer"=-layer2use)
|
||||
if(!standing)
|
||||
standing = image("icon"='icons/mob/mask.dmi', "icon_state"="[wear_mask.icon_state]", "layer"=-FACEMASK_LAYER)
|
||||
standing = image("icon"='icons/mob/mask.dmi', "icon_state"="[wear_mask.icon_state]", "layer"=-layer2use)
|
||||
|
||||
overlays_standing[FACEMASK_LAYER] = standing
|
||||
|
||||
@@ -111,11 +118,18 @@
|
||||
/mob/living/carbon/update_inv_back()
|
||||
remove_overlay(BACK_LAYER)
|
||||
if(back)
|
||||
|
||||
var/layer2use
|
||||
if(back.alternate_worn_layer)
|
||||
layer2use = back.alternate_worn_layer
|
||||
if(!layer2use)
|
||||
layer2use = BACK_LAYER
|
||||
|
||||
var/image/standing
|
||||
if(back.alternate_worn_icon)
|
||||
standing = image("icon"=back.alternate_worn_icon, "icon_state"="[back.icon_state]", "layer"=-BACK_LAYER)
|
||||
standing = image("icon"=back.alternate_worn_icon, "icon_state"="[back.icon_state]", "layer"=-layer2use)
|
||||
if(!standing)
|
||||
standing = image("icon"='icons/mob/back.dmi', "icon_state"="[back.icon_state]", "layer"=-BACK_LAYER)
|
||||
standing = image("icon"='icons/mob/back.dmi', "icon_state"="[back.icon_state]", "layer"=-layer2use)
|
||||
|
||||
overlays_standing[BACK_LAYER] = standing
|
||||
return back
|
||||
@@ -124,11 +138,18 @@
|
||||
/mob/living/carbon/update_inv_head()
|
||||
remove_overlay(HEAD_LAYER)
|
||||
if(head)
|
||||
|
||||
var/layer2use
|
||||
if(head.alternate_worn_layer)
|
||||
layer2use = head.alternate_worn_layer
|
||||
if(!layer2use)
|
||||
layer2use = HEAD_LAYER
|
||||
|
||||
var/image/standing
|
||||
if(head.alternate_worn_icon)
|
||||
standing = image("icon"=head.alternate_worn_icon, "icon_state"="[head.icon_state]", "layer"=-HEAD_LAYER)
|
||||
standing = image("icon"=head.alternate_worn_icon, "icon_state"="[head.icon_state]", "layer"=-layer2use)
|
||||
if(!standing)
|
||||
standing = image("icon"='icons/mob/head.dmi', "icon_state"="[head.icon_state]", "layer"=-HEAD_LAYER)
|
||||
standing = image("icon"='icons/mob/head.dmi', "icon_state"="[head.icon_state]", "layer"=-layer2use)
|
||||
standing.color = head.color // For now, this is here solely for kitty ears, but everything should do this eventually
|
||||
standing.alpha = head.alpha
|
||||
|
||||
|
||||
@@ -108,7 +108,6 @@
|
||||
mmi = new(src)
|
||||
mmi.brain = new /obj/item/organ/brain(mmi)
|
||||
mmi.brain.name = "[real_name]'s brain"
|
||||
mmi.locked = 1
|
||||
mmi.icon_state = "mmi_full"
|
||||
mmi.name = "Man-Machine Interface: [real_name]"
|
||||
mmi.brainmob = new(src)
|
||||
|
||||
@@ -32,7 +32,6 @@
|
||||
var/tech_fluff_string = "BOOT SEQUENCE COMPLETE. ERROR MODULE LOADED. THIS SHOULDN'T HAPPEN. Submit a bug report!"
|
||||
var/bio_fluff_string = "Your scarabs fail to mutate. This shouldn't happen! Submit a bug report!"
|
||||
|
||||
|
||||
/mob/living/simple_animal/hostile/guardian/Life() //Dies if the summoner dies
|
||||
..()
|
||||
if(summoner)
|
||||
@@ -118,6 +117,7 @@
|
||||
for(var/mob/M in mob_list)
|
||||
if(M == src.summoner)
|
||||
M << "<span class='boldannounce'><i>[src]:</i> [input]</span>"
|
||||
src << "<span class='boldannounce'><i>[src]:</i> [input]</span>"
|
||||
|
||||
/mob/living/proc/guardian_comm()
|
||||
set name = "Communicate"
|
||||
@@ -128,7 +128,7 @@
|
||||
for(var/mob/living/simple_animal/hostile/guardian/M in mob_list)
|
||||
if(M.summoner == src)
|
||||
M << "<span class='boldannounce'><i>[src]:</i> [input]</span>"
|
||||
|
||||
src << "<span class='boldannounce'><i>[src]:</i> [input]</span>"
|
||||
|
||||
|
||||
//////////////////////////TYPES OF GUARDIANS
|
||||
@@ -138,11 +138,11 @@
|
||||
|
||||
/mob/living/simple_animal/hostile/guardian/fire
|
||||
a_intent = "help"
|
||||
melee_damage_lower = 15
|
||||
melee_damage_upper = 15
|
||||
melee_damage_lower = 10
|
||||
melee_damage_upper = 10
|
||||
attack_sound = 'sound/items/Welder.ogg'
|
||||
attacktext = "sears"
|
||||
damage_transfer = 0.6
|
||||
damage_transfer = 0.7
|
||||
range = 10
|
||||
playstyle_string = "As a fire type, you have only light damage resistance, but will ignite any enemy you bump into."
|
||||
environment_smash = 1
|
||||
@@ -155,7 +155,7 @@
|
||||
if(istype(AM, /mob/living/))
|
||||
var/mob/living/M = AM
|
||||
if(AM != src.summoner)
|
||||
M.adjust_fire_stacks(20)
|
||||
M.adjust_fire_stacks(10)
|
||||
M.IgniteMob()
|
||||
|
||||
//Standard
|
||||
@@ -163,7 +163,7 @@
|
||||
/mob/living/simple_animal/hostile/guardian/punch
|
||||
melee_damage_lower = 25
|
||||
melee_damage_upper = 25
|
||||
damage_transfer = 0.4
|
||||
damage_transfer = 0.5
|
||||
playstyle_string = "As a standard type you have no special abilities, but have a high damage resistance and a powerful attack capable of smashing through walls."
|
||||
environment_smash = 2
|
||||
magic_fluff_string = "..And draw the Assistant, faceless and generic, but never to be underestimated."
|
||||
@@ -183,26 +183,23 @@
|
||||
|
||||
/mob/living/simple_animal/hostile/guardian/punch/AttackingTarget()
|
||||
..()
|
||||
src.say("[src.battlecry][src.battlecry][src.battlecry][src.battlecry][src.battlecry][src.battlecry][src.battlecry][src.battlecry][src.battlecry][src.battlecry]\
|
||||
[src.battlecry][src.battlecry][src.battlecry][src.battlecry][src.battlecry][src.battlecry][src.battlecry][src.battlecry][src.battlecry][src.battlecry][src.battlecry]")
|
||||
playsound(loc, src.attack_sound, 50, 1, 1)
|
||||
playsound(loc, src.attack_sound, 50, 1, 1)
|
||||
playsound(loc, src.attack_sound, 50, 1, 1)
|
||||
playsound(loc, src.attack_sound, 50, 1, 1)
|
||||
playsound(loc, src.attack_sound, 50, 1, 1)
|
||||
playsound(loc, src.attack_sound, 50, 1, 1)
|
||||
playsound(loc, src.attack_sound, 50, 1, 1)
|
||||
playsound(loc, src.attack_sound, 50, 1, 1)
|
||||
playsound(loc, src.attack_sound, 50, 1, 1)
|
||||
if(istype(target, /mob/living))
|
||||
src.say("[src.battlecry][src.battlecry][src.battlecry][src.battlecry][src.battlecry][src.battlecry][src.battlecry][src.battlecry][src.battlecry][src.battlecry]\
|
||||
[src.battlecry][src.battlecry][src.battlecry][src.battlecry][src.battlecry][src.battlecry][src.battlecry][src.battlecry][src.battlecry][src.battlecry][src.battlecry]")
|
||||
playsound(loc, src.attack_sound, 50, 1, 1)
|
||||
playsound(loc, src.attack_sound, 50, 1, 1)
|
||||
playsound(loc, src.attack_sound, 50, 1, 1)
|
||||
playsound(loc, src.attack_sound, 50, 1, 1)
|
||||
|
||||
|
||||
|
||||
|
||||
//Fast Standard. Does less damage, has less resistance, but moves faster, has higher range
|
||||
|
||||
/mob/living/simple_animal/hostile/guardian/fast
|
||||
melee_damage_lower = 25
|
||||
melee_damage_upper = 25
|
||||
damage_transfer = 0.6
|
||||
melee_damage_lower = 20
|
||||
melee_damage_upper = 20
|
||||
damage_transfer = 0.7
|
||||
speed = -1
|
||||
range = 15
|
||||
attacktext = "slices"
|
||||
@@ -247,6 +244,7 @@
|
||||
/mob/living/simple_animal/hostile/guardian/healer
|
||||
a_intent = "help"
|
||||
friendly = "heals"
|
||||
speed = 1
|
||||
melee_damage_lower = 0
|
||||
melee_damage_upper = 0
|
||||
playstyle_string = "As a healer type, you are incapable of attacking, but can mend any wound simply by touching a target."
|
||||
@@ -256,6 +254,9 @@
|
||||
|
||||
/mob/living/simple_animal/hostile/guardian/healer/AttackingTarget()
|
||||
..()
|
||||
if(src.loc == summoner)
|
||||
src << "<span class='danger'><B>You must be manifested to heal!</span></B>"
|
||||
return
|
||||
if(iscarbon(target))
|
||||
var/mob/living/carbon/C = target
|
||||
C.adjustBruteLoss(-5)
|
||||
@@ -263,21 +264,26 @@
|
||||
C.adjustOxyLoss(-5)
|
||||
C.adjustToxLoss(-5)
|
||||
|
||||
/obj/item/projectile/guardian
|
||||
name = "crystal spray"
|
||||
icon_state = "guardian"
|
||||
damage = 4
|
||||
damage_type = BRUTE
|
||||
|
||||
/mob/living/simple_animal/hostile/guardian/ranged
|
||||
a_intent = "help"
|
||||
melee_damage_lower = 10
|
||||
melee_damage_upper = 10
|
||||
damage_transfer = 1.2
|
||||
projectiletype = /obj/item/projectile/neurotox
|
||||
ranged_cooldown_cap = 1
|
||||
projectilesound = 'sound/weapons/pierce.ogg'
|
||||
projectiletype = /obj/item/projectile/guardian
|
||||
ranged_cooldown_cap = 0
|
||||
projectilesound = 'sound/effects/hit_on_shattered_glass.ogg'
|
||||
ranged = 1
|
||||
rapid = 1
|
||||
range = 13
|
||||
playstyle_string = "As a ranged type, you have only light damage resistance, but are capable of spraying neurotoxin."
|
||||
playstyle_string = "As a ranged type, you have only light damage resistance, but are capable of spraying shards of crystal at incredibly high speed."
|
||||
magic_fluff_string = "..And draw the Sentinel, an alien master of ranged combat."
|
||||
tech_fluff_string = "Boot sequence complete. Ranged combat modules active. Nanoswarm online."
|
||||
bio_fluff_string = "Your scarab swarm finishes mutating and stirs to life, capable of spitting neurotoxin."
|
||||
bio_fluff_string = "Your scarab swarm finishes mutating and stirs to life, capable of spraying shards of crystal."
|
||||
|
||||
|
||||
/mob/living/simple_animal/hostile/guardian/bluespace
|
||||
@@ -313,6 +319,9 @@
|
||||
var/bomb_cooldown = 0
|
||||
|
||||
/mob/living/simple_animal/hostile/guardian/bomb/ShiftClickOn(atom/movable/A)
|
||||
if(src.loc == summoner)
|
||||
src << "<span class='danger'><B>You must be manifested to create bombs!</span></B>"
|
||||
return
|
||||
if(istype(A, /obj/))
|
||||
if(bomb_cooldown <= world.time && !stat)
|
||||
var/obj/item/weapon/guardian_bomb/B = new /obj/item/weapon/guardian_bomb(get_turf(A))
|
||||
@@ -334,6 +343,8 @@
|
||||
/obj/item/weapon/guardian_bomb/proc/disguise(var/obj/A)
|
||||
A.loc = src
|
||||
stored_obj = A
|
||||
anchored = A.anchored
|
||||
density = A.density
|
||||
appearance = A.appearance
|
||||
spawn(600)
|
||||
stored_obj.loc = get_turf(src.loc)
|
||||
|
||||
@@ -35,6 +35,8 @@
|
||||
|
||||
/mob/living/simple_animal/hostile/Life()
|
||||
. = ..()
|
||||
if(ranged)
|
||||
ranged_cooldown--
|
||||
if(!.) //dead
|
||||
walk(src, 0) //stops walking
|
||||
return 0
|
||||
@@ -42,8 +44,6 @@
|
||||
/mob/living/simple_animal/hostile/handle_automated_action()
|
||||
if(AIStatus == AI_OFF)
|
||||
return 0
|
||||
if(ranged)
|
||||
ranged_cooldown--
|
||||
var/list/possible_targets = ListTargets() //we look around for potential targets and make it a list for later use.
|
||||
|
||||
if(environment_smash)
|
||||
@@ -315,4 +315,4 @@
|
||||
. = 0
|
||||
|
||||
/mob/living/simple_animal/hostile/proc/AIShouldSleep(var/list/possible_targets)
|
||||
return !FindTarget(possible_targets, 1)
|
||||
return !FindTarget(possible_targets, 1)
|
||||
|
||||
@@ -122,12 +122,12 @@
|
||||
projectile_type = /obj/item/projectile/plasma
|
||||
select_name = "plasma burst"
|
||||
fire_sound = 'sound/weapons/Laser.ogg'
|
||||
delay = 10
|
||||
delay = 15
|
||||
e_cost = 25
|
||||
|
||||
/obj/item/ammo_casing/energy/plasma/adv
|
||||
projectile_type = /obj/item/projectile/plasma/adv
|
||||
delay = 8
|
||||
delay = 10
|
||||
e_cost = 10
|
||||
|
||||
/obj/item/ammo_casing/energy/wormhole
|
||||
|
||||
@@ -31,8 +31,9 @@
|
||||
var/turf/curloc = user.loc
|
||||
if (!istype(targloc) || !istype(curloc) || !BB)
|
||||
return 0
|
||||
if(targloc == curloc) //Fire the projectile
|
||||
user.bullet_act(BB)
|
||||
if(targloc == curloc)
|
||||
if(BB.original == user) //if we target ourselves we go straight to bullet_act()
|
||||
user.bullet_act(BB)
|
||||
del(BB)
|
||||
return 1
|
||||
BB.loc = get_turf(user)
|
||||
|
||||
@@ -94,9 +94,10 @@
|
||||
/obj/item/projectile/Bump(atom/A, yes)
|
||||
if(!yes) //prevents double bumps.
|
||||
return
|
||||
if(A == firer || A == src)
|
||||
loc = A.loc
|
||||
return 0 //cannot shoot yourself
|
||||
if(firer)
|
||||
if(A == firer || (A == firer.loc && istype(A, /obj/mecha))) //cannot shoot yourself or your mech
|
||||
loc = A.loc
|
||||
return 0
|
||||
|
||||
var/distance = get_dist(get_turf(A), starting) // Get the distance between the turf shot from and the mob we hit and use that for the calculations.
|
||||
def_zone = ran_zone(def_zone, max(100-(7*distance), 5)) //Lower accurancy/longer range tradeoff. 7 is a balanced number to use.
|
||||
@@ -134,7 +135,7 @@
|
||||
if((!( current ) || loc == current))
|
||||
current = locate(Clamp(x+xo,1,world.maxx),Clamp(y+yo,1,world.maxy),z)
|
||||
step_towards(src, current)
|
||||
if((original && original.layer>=2.75) || ismob(original))
|
||||
if(original && (original.layer>=2.75) || ismob(original))
|
||||
if(loc == get_turf(original))
|
||||
if(!(original in permutated))
|
||||
Bump(original, 1)
|
||||
|
||||
@@ -204,29 +204,31 @@ obj/item/projectile/kinetic/New()
|
||||
icon_state = "plasmacutter"
|
||||
damage_type = BRUTE
|
||||
damage = 5
|
||||
range = 1
|
||||
range = 3
|
||||
|
||||
/obj/item/projectile/plasma/New()
|
||||
var/turf/proj_turf = get_turf(src)
|
||||
if(!istype(proj_turf, /turf))
|
||||
return
|
||||
var/datum/gas_mixture/environment = proj_turf.return_air()
|
||||
var/pressure = environment.return_pressure()
|
||||
if(pressure < 30)
|
||||
name = "full strength plasma blast"
|
||||
damage *= 3
|
||||
range += 3
|
||||
if(environment)
|
||||
var/pressure = environment.return_pressure()
|
||||
if(pressure < 30)
|
||||
name = "full strength plasma blast"
|
||||
damage *= 3
|
||||
..()
|
||||
|
||||
/obj/item/projectile/plasma/on_hit(atom/target)
|
||||
. = ..()
|
||||
if(istype(target, /turf/simulated/mineral))
|
||||
var/turf/simulated/mineral/M = target
|
||||
M.gets_drilled(firer)
|
||||
return ..()
|
||||
range = max(range - 1, 1)
|
||||
return -1
|
||||
|
||||
/obj/item/projectile/plasma/adv
|
||||
range = 2
|
||||
range = 5
|
||||
|
||||
/obj/item/projectile/plasma/adv/mech
|
||||
damage = 10
|
||||
range = 3
|
||||
range = 6
|
||||
@@ -544,7 +544,7 @@
|
||||
if(volume >= 3)
|
||||
if(!istype(T, /turf/space))
|
||||
var/obj/effect/decal/cleanable/reagentdecal = new/obj/effect/decal/cleanable/greenglow(T)
|
||||
reagentdecal.reagents.add_reagent("uranium", volume)
|
||||
reagentdecal.reagents.add_reagent("radium", volume)
|
||||
|
||||
/datum/reagent/sterilizine
|
||||
name = "Sterilizine"
|
||||
|
||||
@@ -210,7 +210,7 @@
|
||||
build_path = /obj/item/weapon/circuitboard/arcade/orion_trail
|
||||
category = list("Computer Boards")
|
||||
|
||||
/datum/design/orion_trail
|
||||
/datum/design/slot_machine
|
||||
name = "Computer Design (Slot Machine)"
|
||||
desc = "Allows for the construction of circuit boards used to build a new slot machine."
|
||||
id = "slotmachine"
|
||||
@@ -378,4 +378,4 @@
|
||||
build_type = IMPRINTER
|
||||
materials = list(MAT_GLASS = 1000, "sacid" = 20)
|
||||
build_path = /obj/item/weapon/circuitboard/libraryconsole
|
||||
category = list("Computer Boards")
|
||||
category = list("Computer Boards")
|
||||
|
||||
@@ -55,6 +55,51 @@
|
||||
|
||||
-->
|
||||
<div class="commit sansserif">
|
||||
<h2 class="date">07 August 2015</h2>
|
||||
<h3 class="author">KorPhaeron updated:</h3>
|
||||
<ul class="changes bgimages16">
|
||||
<li class="rscadd">Added a new Guardian Mob that can be summoned to manifest inside a mob.</li>
|
||||
<li class="rscadd">Guardians can communicate with their host and materialize themselves to protect their host with magic powers.</li>
|
||||
<li class="rscadd">Guardians are invincible but cannot live without or too far from their host, they also relay injuries they suffer to the host.</li>
|
||||
</ul>
|
||||
<h3 class="author">Phil235 updated:</h3>
|
||||
<ul class="changes bgimages16">
|
||||
<li class="bugfix">Fixed being able to run into your own bullet.</li>
|
||||
</ul>
|
||||
<h3 class="author">RemieRichards updated:</h3>
|
||||
<ul class="changes bgimages16">
|
||||
<li class="rscadd">You no longer need to click on an item in a storage container to remove it, clicking anywhere around the item works.</li>
|
||||
</ul>
|
||||
<h3 class="author">bustygoku updated:</h3>
|
||||
<ul class="changes bgimages16">
|
||||
<li class="rscdel">Removed the chance for a disease to make you a carrier on transfer.</li>
|
||||
</ul>
|
||||
<h3 class="author">phil235 updated:</h3>
|
||||
<ul class="changes bgimages16">
|
||||
<li class="tweak">The plasma cutter's fire rate is now a bit lower but its projectile can pierce multiple asteroid walls and its range isn't lowered in pressurized environment anymore.</li>
|
||||
</ul>
|
||||
|
||||
<h2 class="date">06 August 2015</h2>
|
||||
<h3 class="author">AnturK updated:</h3>
|
||||
<ul class="changes bgimages16">
|
||||
<li class="rscadd">Adds the voodoo doll as a mining treasure, link it with a victim with an item previously held by them.</li>
|
||||
<li class="rscadd">Once linked the voodoo doll can be used to injure, confuse and control the victim.</li>
|
||||
</ul>
|
||||
<h3 class="author">Core0verlad updated:</h3>
|
||||
<ul class="changes bgimages16">
|
||||
<li class="tweak">Items can now be removed from storage containers inside storage containers.</li>
|
||||
<li class="imageadd">Beds and bedsheets have new sprites.</li>
|
||||
<li class="rscdel">MMIs are no longer ID locked.</li>
|
||||
</ul>
|
||||
<h3 class="author">KorPhaeron updated:</h3>
|
||||
<ul class="changes bgimages16">
|
||||
<li class="tweak">Slaughter Demon's have had their health reduced to 200 and their speed reduced but they get a speed boost when exiting blood.</li>
|
||||
</ul>
|
||||
<h3 class="author">MrPerson updated:</h3>
|
||||
<ul class="changes bgimages16">
|
||||
<li class="rscadd">Items stacks now automatically merge unless thrown when moved onto the same tile.</li>
|
||||
</ul>
|
||||
|
||||
<h2 class="date">05 August 2015</h2>
|
||||
<h3 class="author">CoreOverload updated:</h3>
|
||||
<ul class="changes bgimages16">
|
||||
@@ -72,7 +117,7 @@
|
||||
</ul>
|
||||
<h3 class="author">LordPidey updated:</h3>
|
||||
<ul class="changes bgimages16">
|
||||
<li class="rscadd">Added a new chemical. Spray tan. It is made by mixing orange juice with oil or corn oil. Warning: overexposure may result in orange douchebaggery.</li>
|
||||
<li class="rscadd">Added a new chemical. Spray tan. It is made by mixing orange juice with oil or corn oil. Warning: overexposure may result in orange douchebaggery.</li>
|
||||
</ul>
|
||||
<h3 class="author">Xhuis updated:</h3>
|
||||
<ul class="changes bgimages16">
|
||||
@@ -112,7 +157,7 @@
|
||||
<h3 class="author">Steelpoint updated:</h3>
|
||||
<ul class="changes bgimages16">
|
||||
<li class="bugfix">Fixed multiple mapping errors for Boxstation and the mining base.</li>
|
||||
<li class="resadd">A circuit imprinter and exosuit fabrication board have been added to tech storage.</li>
|
||||
<li class="rscadd">A circuit imprinter and exosuit fabrication board have been added to tech storage.</li>
|
||||
</ul>
|
||||
<h3 class="author">SvartaSvansen updated:</h3>
|
||||
<ul class="changes bgimages16">
|
||||
|
||||
@@ -1429,7 +1429,7 @@ DO NOT EDIT THIS FILE BY HAND! AUTOMATICALLY GENERATED BY ss13_genchangelog.py.
|
||||
- rscadd: Syndicate toolboxes now come with never before seen red insulated gloves.
|
||||
Steelpoint:
|
||||
- bugfix: Fixed multiple mapping errors for Boxstation and the mining base.
|
||||
- resadd: A circuit imprinter and exosuit fabrication board have been added to tech
|
||||
- rscadd: A circuit imprinter and exosuit fabrication board have been added to tech
|
||||
storage.
|
||||
SvartaSvansen:
|
||||
- rscadd: Our lizard engineers have worked hard and managed to improve Centcom airlocks
|
||||
@@ -1464,8 +1464,8 @@ DO NOT EDIT THIS FILE BY HAND! AUTOMATICALLY GENERATED BY ss13_genchangelog.py.
|
||||
Ikarrus:
|
||||
- rscdel: Head beatings no longer deconvert gangsters.
|
||||
LordPidey:
|
||||
- rscadd: 'Added a new chemical. Spray tan. It is made by mixing orange juice
|
||||
with oil or corn oil. Warning: overexposure may result in orange douchebaggery.'
|
||||
- rscadd: 'Added a new chemical. Spray tan. It is made by mixing orange juice with
|
||||
oil or corn oil. Warning: overexposure may result in orange douchebaggery.'
|
||||
Xhuis:
|
||||
- rscadd: Shadowling thralls can now be deconverted via surgery or borging.
|
||||
- rscadd: Thralls can be revealed by examining them. They can hide this by wearing
|
||||
@@ -1484,3 +1484,37 @@ DO NOT EDIT THIS FILE BY HAND! AUTOMATICALLY GENERATED BY ss13_genchangelog.py.
|
||||
bgobandit:
|
||||
- rscadd: Nanotrasen scientists have achieved the tremendous breakthrough of injecting
|
||||
gold slime extracts with water. Pets ensued.
|
||||
2015-08-06:
|
||||
AnturK:
|
||||
- rscadd: Adds the voodoo doll as a mining treasure, link it with a victim with
|
||||
an item previously held by them.
|
||||
- rscadd: Once linked the voodoo doll can be used to injure, confuse and control
|
||||
the victim.
|
||||
Core0verlad:
|
||||
- tweak: Items can now be removed from storage containers inside storage containers.
|
||||
- imageadd: Beds and bedsheets have new sprites.
|
||||
- rscdel: MMIs are no longer ID locked.
|
||||
KorPhaeron:
|
||||
- tweak: Slaughter Demon's have had their health reduced to 200 and their speed
|
||||
reduced but they get a speed boost when exiting blood.
|
||||
MrPerson:
|
||||
- rscadd: Items stacks now automatically merge unless thrown when moved onto the
|
||||
same tile.
|
||||
2015-08-07:
|
||||
KorPhaeron:
|
||||
- rscadd: Added a new Guardian Mob that can be summoned to manifest inside a mob.
|
||||
- rscadd: Guardians can communicate with their host and materialize themselves to
|
||||
protect their host with magic powers.
|
||||
- rscadd: Guardians are invincible but cannot live without or too far from their
|
||||
host, they also relay injuries they suffer to the host.
|
||||
Phil235:
|
||||
- bugfix: Fixed being able to run into your own bullet.
|
||||
RemieRichards:
|
||||
- rscadd: You no longer need to click on an item in a storage container to remove
|
||||
it, clicking anywhere around the item works.
|
||||
bustygoku:
|
||||
- rscdel: Removed the chance for a disease to make you a carrier on transfer.
|
||||
phil235:
|
||||
- tweak: The plasma cutter's fire rate is now a bit lower but its projectile can
|
||||
pierce multiple asteroid walls and its range isn't lowered in pressurized environment
|
||||
anymore.
|
||||
|
||||
@@ -0,0 +1,10 @@
|
||||
|
||||
author: RemieRichards
|
||||
|
||||
delete-after: True
|
||||
|
||||
changes:
|
||||
- rscadd: "Nanotrasen Mandatory FunCo Subsidiary: CoderbusGames, would like to announce an update to Orion Trail!"
|
||||
- rscadd: "Spaceports: Buy/Sell Crew, Trade Fuel for Food, Trade Food for Fuel, Buy Spare Electronics, Engine Parts and Hull Plates, or maybe you think you're tough enough to attack the spaceport?"
|
||||
- rscadd: "Changelings: Changelings can now sneak into your crew, Changelings eat double the standard food ration and have a chance to Ambush the rest of the crew!"
|
||||
- rscadd: "Kill Crewmembers: Do you suspect changelings? or dont feel you have enough food rations? Just shoot somebody in the head, at any time!"
|
||||
|
After Width: | Height: | Size: 9.9 KiB |
|
Before Width: | Height: | Size: 60 KiB After Width: | Height: | Size: 51 KiB |
|
Before Width: | Height: | Size: 425 B After Width: | Height: | Size: 1.7 KiB |
|
Before Width: | Height: | Size: 116 KiB After Width: | Height: | Size: 116 KiB |
|
Before Width: | Height: | Size: 32 KiB After Width: | Height: | Size: 32 KiB |