Merge branch 'master' of https://github.com/tgstation/-tg-station into pr/11057

Conflicts:
	icons/obj/items.dmi
This commit is contained in:
Cheridan
2015-08-08 19:36:36 -05:00
43 changed files with 865 additions and 294 deletions
+59
View File
@@ -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
-2
View File
@@ -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)
+2 -2
View File
@@ -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>"
+1 -1
View File
@@ -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
+1 -1
View File
@@ -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
+2 -2
View File
@@ -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)
+1 -1
View File
@@ -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
+1 -1
View File
@@ -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
+1 -1
View File
@@ -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
+5 -7
View File
@@ -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()
+3 -4
View File
@@ -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
+461 -119
View File
@@ -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
+1
View File
@@ -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
+14 -5
View File
@@ -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"
+37 -33
View File
@@ -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"
+24 -11
View File
@@ -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
+1 -18
View File
@@ -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))
+27 -6
View File
@@ -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
+3 -2
View File
@@ -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)
+5 -4
View File
@@ -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)
+11 -9
View File
@@ -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")
+47 -2
View File
@@ -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">
+37 -3
View File
@@ -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!"
Binary file not shown.

After

Width:  |  Height:  |  Size: 9.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 60 KiB

After

Width:  |  Height:  |  Size: 51 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 425 B

After

Width:  |  Height:  |  Size: 1.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 116 KiB

After

Width:  |  Height:  |  Size: 116 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 32 KiB

After

Width:  |  Height:  |  Size: 32 KiB