From 3ab197f80f2b68fff90fa0569607f6a393f9b649 Mon Sep 17 00:00:00 2001
From: bgobandit
Date: Thu, 23 Jul 2015 20:20:55 -0400
Subject: [PATCH 01/35] Body bag sprites now update their tag overlay properly.
---
code/game/objects/items/bodybag.dm | 5 ++++-
code/game/objects/structures/crates_lockers/closets.dm | 5 +++++
2 files changed, 9 insertions(+), 1 deletion(-)
diff --git a/code/game/objects/items/bodybag.dm b/code/game/objects/items/bodybag.dm
index c32a35c5b89..a3c0a0a8290 100644
--- a/code/game/objects/items/bodybag.dm
+++ b/code/game/objects/items/bodybag.dm
@@ -36,6 +36,7 @@
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
@@ -51,13 +52,15 @@
name = "body bag - "
name += t
overlays += "bodybag_label"
+ tagged = 1
else
name = "body bag"
return
else if(istype(I, /obj/item/weapon/wirecutters))
- user << "You cut the tag off of [src]."
+ user << "You cut the tag off [src]."
name = "body bag"
overlays.Cut()
+ tagged = 0
/obj/structure/closet/body_bag/close()
diff --git a/code/game/objects/structures/crates_lockers/closets.dm b/code/game/objects/structures/crates_lockers/closets.dm
index e41fac7870f..b43e760fe09 100644
--- a/code/game/objects/structures/crates_lockers/closets.dm
+++ b/code/game/objects/structures/crates_lockers/closets.dm
@@ -46,6 +46,11 @@
overlays += "unlocked"
else
overlays += "off"
+ if(istype(src, /obj/structure/closet/body_bag)) // GUESS WHAT BODY BAGS ARE CLOSETS
+ var/obj/structure/closet/body_bag/B = src
+ if (B.tagged)
+ overlays += "bodybag_label"
+
else
if(icon_door_override)
overlays += "[icon_door]_open"
From ab9668dd3d0569c6f1bb91ff8a4b93bcc049894d Mon Sep 17 00:00:00 2001
From: bgobandit
Date: Fri, 24 Jul 2015 09:38:13 -0400
Subject: [PATCH 02/35] Moves update_icon(). Adds crayons.
---
code/game/objects/items/bodybag.dm | 7 ++++++-
code/game/objects/structures/crates_lockers/closets.dm | 4 ----
2 files changed, 6 insertions(+), 5 deletions(-)
diff --git a/code/game/objects/items/bodybag.dm b/code/game/objects/items/bodybag.dm
index a3c0a0a8290..3c7772cf4ad 100644
--- a/code/game/objects/items/bodybag.dm
+++ b/code/game/objects/items/bodybag.dm
@@ -42,7 +42,7 @@
/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
@@ -62,6 +62,11 @@
overlays.Cut()
tagged = 0
+/obj/structure/closet/body_bag/update_icon()
+ ..()
+ if (tagged)
+ overlays += "bodybag_label"
+
/obj/structure/closet/body_bag/close()
if(..())
diff --git a/code/game/objects/structures/crates_lockers/closets.dm b/code/game/objects/structures/crates_lockers/closets.dm
index b43e760fe09..bb209cb9515 100644
--- a/code/game/objects/structures/crates_lockers/closets.dm
+++ b/code/game/objects/structures/crates_lockers/closets.dm
@@ -46,10 +46,6 @@
overlays += "unlocked"
else
overlays += "off"
- if(istype(src, /obj/structure/closet/body_bag)) // GUESS WHAT BODY BAGS ARE CLOSETS
- var/obj/structure/closet/body_bag/B = src
- if (B.tagged)
- overlays += "bodybag_label"
else
if(icon_door_override)
From ed08ce018fd643411af6300e64b9498f4b6aeb38 Mon Sep 17 00:00:00 2001
From: bustygoku
Date: Thu, 30 Jul 2015 19:44:18 -0700
Subject: [PATCH 03/35] Removes Virus Carrier RNG
---
code/datums/diseases/_MobProcs.dm | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/code/datums/diseases/_MobProcs.dm b/code/datums/diseases/_MobProcs.dm
index 7f1b1755d3b..3f67a8c9121 100644
--- a/code/datums/diseases/_MobProcs.dm
+++ b/code/datums/diseases/_MobProcs.dm
@@ -36,8 +36,8 @@
viruses += DD
DD.affected_mob = src
DD.holder = src
- if(DD.disease_flags & CAN_CARRY && prob(5))
- DD.carrier = 1
+// 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")
From 7318f11d3f53846c3be54b303c295af416649041 Mon Sep 17 00:00:00 2001
From: Remie Richards
Date: Mon, 27 Jul 2015 23:05:07 +0100
Subject: [PATCH 04/35] Adds new content to the Orion Trail arcade game,
Replaces all the magic strings with #defines, Fixes being able to spamclick
the game.
---
code/game/machinery/computer/arcade.dm | 563 ++++++++++++++----
.../RemieRichards-OrionTrailUpdate.yml | 10 +
2 files changed, 469 insertions(+), 104 deletions(-)
create mode 100644 html/changelogs/RemieRichards-OrionTrailUpdate.yml
diff --git a/code/game/machinery/computer/arcade.dm b/code/game/machinery/computer/arcade.dm
index 661a8d78fe5..9f7d26b74a3 100644
--- a/code/game/machinery/computer/arcade.dm
+++ b/code/game/machinery/computer/arcade.dm
@@ -293,6 +293,19 @@
+#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
@@ -300,6 +313,7 @@
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
@@ -312,15 +326,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()
..()
@@ -341,14 +361,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
@@ -360,6 +375,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(..())
@@ -408,18 +429,19 @@
dat += "Crew:
"
dat += english_list(settlers)
dat += "
Food: [food] | Fuel: [fuel]"
- dat += "
Engine Parts: [engine] | Hull Panels: [hull] | Electronics: [electronics]
"
+ dat += "
Engine Parts: [engine] | Hull Panels: [hull] | Electronics: [electronics]"
if(turns == 7)
dat += "Go Around Continue
"
else
dat += "Continue
"
+ dat += "Kill a crewmember
"
dat += "Close
"
else
dat = "The Orion Trail
"
dat += "
Experience the journey of your ancestors!
"
dat += "New Game"
dat += "Close
"
- 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()
@@ -431,34 +453,45 @@
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 = ORION_TRAIL_COLLISION
event()
- food -= alive*2
+ food -= (alive+lings_aboard)*2
fuel -= 5
turns += 1
else
- food -= alive*2
+ food -= (alive+lings_aboard)*2
fuel -= 5
turns += 1
if(prob(75))
event = pickweight(events)
+ if(lings_aboard)
+ if(event == ORION_TRAIL_LING || prob(55))
+ event = ORION_TRAIL_LING_ATTACK
event()
else
- food -= alive*2
+ food -= (alive+lings_aboard)*2
fuel -= 5
turns += 1
if(prob(75))
event = pickweight(events)
+ if(lings_aboard)
+ if(event == ORION_TRAIL_LING || prob(75))
+ event = ORION_TRAIL_LING_ATTACK
event()
if(emagged)
var/mob/living/carbon/M = usr //for some vars
switch(event)
- if("Raiders")
+ if(ORION_TRAIL_RAIDERS)
if(prob(50))
usr << "You hear battle shouts. The tramping of boots on cold metal. Screams of agony. The rush of venting air. Are you going insane?"
M.hallucination += 30
@@ -466,7 +499,7 @@
usr << "Something strikes you from behind! It hurts like hell and feel like a blunt weapon, but nothing is there..."
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 << "You suddenly feel slightly nauseous." //got off lucky
@@ -477,38 +510,38 @@
M << "An overpowering wave of nausea consumes over you. You hunch over, your stomach's contents preparing for a spectacular exit."
M.Stun(5)
sleep(30)
- M.visible_message("[M] throws up!", "You violently throw up!")
+ 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("[M] is swept off their feet!", "A sudden gust of powerful wind slams you into the floor!")
+ 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 << "A violent gale blows past you, and you barely manage to stay standing!"
- 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("Something slams into the floor around [src], exposing it to space!")
+ say("Something slams into the floor around [src], exposing it to space!")
if(hull)
sleep(10)
- src.visible_message("A new floor suddenly appears around [src]. What the hell?")
+ 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("Something slams into the floor around [src] - luckily, it didn't get through!")
+ 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("[src] malfunctions, randomizing in-game stats!")
var/oldfood = food
@@ -525,7 +558,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
@@ -536,11 +568,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
@@ -554,7 +586,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))
@@ -564,16 +596,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("A miniature black hole suddenly appears in front of [src], devouring [usr] alive!")
+ 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("[S] winks out, just as suddenly as it appeared.")
+ say("[S] winks out, just as suddenly as it appeared.")
qdel(S)
else
event = null
@@ -584,88 +616,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 = "[event]
"
- 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 += "
They have stolen [sfood] Food and [sfuel] Fuel."
+ else if(prob(10))
+ var/deadname = remove_crewmember()
+ eventdat += "
[deadname] tried to fight back but was killed."
+ else
+ eventdat += "
Fortunately you fended them off without any trouble."
+ eventdat += "Continue
"
+ eventdat += "Close
"
+
+ if(ORION_TRAIL_FLUX)
+ eventdat += "This region of space is highly turbulent.
If we go slowly we may avoid more damage, but if we keep our speed we won't waste supplies."
+ eventdat += "
What will you do?"
+ eventdat += "Slow Down Continue
"
+ eventdat += "Close
"
+
+ if(ORION_TRAIL_ILLNESS)
+ eventdat += "A deadly illness has been contracted!"
+ var/deadname = remove_crewmember()
+ eventdat += "
[deadname] was killed by the disease."
+ eventdat += "Continue
"
+ eventdat += "Close
"
+
+ if(ORION_TRAIL_BREAKDOWN)
+ eventdat += "Oh no! The engine has broken down!"
+ eventdat += "
You can repair it with an engine part, or you can make repairs for 3 days."
+ if(engine >= 1)
+ eventdat += "Use PartWait
"
+ else
+ eventdat += "Wait
"
+ eventdat += "Close
"
+
+ if(ORION_TRAIL_MALFUNCTION)
+ eventdat += "The ship's systems are malfunctioning!"
+ eventdat += "
You can replace the broken electronics with spares, or you can spend 3 days troubleshooting the AI."
+ if(electronics >= 1)
+ eventdat += "Use PartWait
"
+ else
+ eventdat += "Wait
"
+ eventdat += "Close
"
+
+ 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 += "
[sfood] Food and [sfuel] Fuel was vented out into space."
+ if(prob(10))
+ var/deadname = remove_crewmember()
+ eventdat += "
[deadname] was killed by rapid depressurization."
+ eventdat += "
You can repair the damage with hull plates, or you can spend the next 3 days welding scrap together."
+ if(hull >= 1)
+ eventdat += "Use PartWait
"
+ else
+ eventdat += "Wait
"
+ eventdat += "Close
"
+
+ if(ORION_TRAIL_BLACKHOLE)
+ eventdat += "You were swept away into the black hole."
+ eventdat += "Oh...
"
+ eventdat += "Close
"
+ settlers = list()
+
+ if(ORION_TRAIL_LING)
+ eventdat += "Strange reports warn of changelings infiltrating crews on trips to Orion..."
+ if(settlers.len <= 1)
+ eventdat += "
Your crew's chance of reaching Orion is so slim the changelings likely avoided your ship..."
+ eventdat += "Continue
"
+ eventdat += "Close
"
+ 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 += "Kill a crewmember
"
+ eventdat += "Risk it
"
+ eventdat += "Close
"
+
+ 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 += "
(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 += "
[ling1] and [ling2]'s arms twist and contort into grotesque blades!"
+ else
+ eventdat += "
[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 += "
The Changeling[ling2 ? "s":""] run[ling2 ? "":"s"] up to [deadguy] and capitulates them!"
+ else
+ eventdat += "
You valiantly fight off the Changeling[ling2 ? "s":""]!"
+ eventdat += "
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 += "
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 += "Continue
"
+ eventdat += "Close
"
+
+
+ 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 += "
Last Spaceport Action: [last_spaceport_action]"
+ eventdat += "Depart Spaceport
"
+ eventdat += "Close
"
+ else
+ eventdat += "You pull the ship up to dock at a nearby Spaceport, lucky find!"
+ eventdat += "
This Spaceport is home to travellers who failed to reach Orion, but managed to find a different home..."
+ eventdat += "
Trading terms: FU = Fuel, FO = Food"
+ if(last_spaceport_action)
+ eventdat += "
Last Spaceport Action: [last_spaceport_action]"
+ eventdat += "Crew:
"
+ eventdat += english_list(settlers)
+ eventdat += "
Food: [food] | Fuel: [fuel]"
+ eventdat += "
Engine Parts: [engine] | Hull Panels: [hull] | Electronics: [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 += "
The traders of the spaceport take pitty on you, and give you some food and fuel (+[FU]FU,+[FO]FO)"
+ if(freecrew)
+ eventdat += "
You also gain a new crewmember!"
+
+ fuel += FU
+ food += FO
+
+ //CREW INTERACTIONS
+ eventdat += "Crew Management:
"
+
+ //Buy crew
+ if(food >= 10 && fuel >= 10)
+ eventdat += "Hire a new Crewmember (-10FU,-10FO)
"
+ else
+ eventdat += "Cant afford a new Crewmember
"
+
+ //Sell crew
+ if(settlers.len > 1)
+ eventdat += "Sell crew for Fuel and Food (+15FU,+15FO)
"
+ else
+ eventdat += "Cant afford to sell a Crewmember
"
+
+ //BUY/SELL STUFF
+ eventdat += "Spare Parts:
"
+
+ //Engine parts
+ if(fuel > 5)
+ eventdat += "Buy Engine Parts (-5FU)
"
+ else
+ eventdat += "Cant afford to buy Engine Parts"
+
+ //Hull plates
+ if(fuel > 5)
+ eventdat += "
Buy Hull Plates (-5FU)
"
+ else
+ eventdat += "Cant afford to buy Hull Plates"
+
+ //Electronics
+ if(fuel > 5)
+ eventdat += "
Buy Spare Electronics (-5FU)
"
+ else
+ eventdat += "Cant afford to buy Spare Electronics"
+
+ //Trade
+ if(fuel > 5)
+ eventdat += "
Trade Fuel for Food (-5FU,+5FO)
"
+ else
+ eventdat += "Cant afford to Trade Fuel for Food
5)
+ eventdat += "Trade Food for Fuel (+5FU,-5FO)
"
+ else
+ eventdat += "Cant afford to Trade Food for Fuel
!! Raid Spaceport !!
"
+
+ eventdat += "Depart Spaceport
"
+
+
+//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 += "
They have stolen [sfood] Food and [sfuel] Fuel."
- else if(prob(10))
- var/deadname = pick_n_take(settlers)
- eventdat += "
[deadname] tried to fight back but was killed."
- alive -= 1
+ newcrew = pick(first_names_male)
else
- eventdat += "
Fortunately you fended them off without any trouble."
- eventdat += "Continue
"
- eventdat += "Close
"
- else if(event == "Interstellar Flux")
- eventdat += "This region of space is highly turbulent.
If we go slowly we may avoid more damage, but if we keep our speed we won't waste supplies."
- eventdat += "
What will you do?"
- eventdat += "Slow Down Continue
"
- eventdat += "Close
"
+ 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 += "
[deadname] was killed by the disease."
- alive -= 1
- eventdat += "Continue
"
- eventdat += "Close
"
- else if(event == "Breakdown")
- eventdat += "Oh no! The engine has broken down!"
- eventdat += "
You can repair it with an engine part, or you can make repairs for 3 days."
- if(engine >= 1)
- eventdat += "Use PartWait
"
- else
- eventdat += "Wait
"
- eventdat += "Close
"
- else if(event == "Malfunction")
- eventdat += "The ship's systems are malfunctioning!"
- eventdat += "
You can replace the broken electronics with spares, or you can spend 3 days troubleshooting the AI."
- if(electronics >= 1)
- eventdat += "Use PartWait
"
- else
- eventdat += "Wait
"
- eventdat += "Close
"
+//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 += "
[sfood] Food and [sfuel] Fuel was vented out into space."
- if(prob(10))
- var/deadname = pick_n_take(settlers)
- eventdat += "
[deadname] was killed by rapid depressurization."
- alive -= 1
- eventdat += "
You can repair the damage with hull plates, or you can spend the next 3 days welding scrap together."
- if(hull >= 1)
- eventdat += "Use PartWait
"
- else
- eventdat += "Wait
"
- eventdat += "Close
"
-
- else if(event == "BlackHole")
- eventdat += "You were swept away into the black hole."
- eventdat += "Oh...
"
- eventdat += "Close
"
- 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.")
@@ -684,6 +1006,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..."
@@ -723,3 +1065,16 @@
src.visible_message("[src] explodes!")
explosion(src.loc, 1,2,4, flame_range = 3)
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
\ No newline at end of file
diff --git a/html/changelogs/RemieRichards-OrionTrailUpdate.yml b/html/changelogs/RemieRichards-OrionTrailUpdate.yml
new file mode 100644
index 00000000000..a7c752dd90a
--- /dev/null
+++ b/html/changelogs/RemieRichards-OrionTrailUpdate.yml
@@ -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!"
From 47fe31346e7da09ccd9f1f697cfdc490b13a2986 Mon Sep 17 00:00:00 2001
From: Remie Richards
Date: Sun, 2 Aug 2015 22:45:18 +0100
Subject: [PATCH 05/35] Adds alternate_worn_layer, like alternate_worn_icon it
allows an item to slightly bend the rules of worn item rendering, DOES NOT
MODIFY THE STANDING_ICONS INDEXES, BECAUSE THAT WOULD BREAK THINGS
---
code/__DEFINES/misc.dm | 59 ++++++++++++++++
code/game/objects/items.dm | 1 +
.../objects/items/weapons/storage/belt.dm | 1 +
.../mob/living/carbon/human/update_icons.dm | 68 +++++++++++++++----
.../modules/mob/living/carbon/update_icons.dm | 33 +++++++--
5 files changed, 143 insertions(+), 19 deletions(-)
diff --git a/code/__DEFINES/misc.dm b/code/__DEFINES/misc.dm
index 594cb2d43fa..94da0533b1a 100644
--- a/code/__DEFINES/misc.dm
+++ b/code/__DEFINES/misc.dm
@@ -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
diff --git a/code/game/objects/items.dm b/code/game/objects/items.dm
index ce2a1fc1875..6b4660a28f0 100644
--- a/code/game/objects/items.dm
+++ b/code/game/objects/items.dm
@@ -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
diff --git a/code/game/objects/items/weapons/storage/belt.dm b/code/game/objects/items/weapons/storage/belt.dm
index 1e95e040502..25bbb762e03 100644
--- a/code/game/objects/items/weapons/storage/belt.dm
+++ b/code/game/objects/items/weapons/storage/belt.dm
@@ -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"
diff --git a/code/modules/mob/living/carbon/human/update_icons.dm b/code/modules/mob/living/carbon/human/update_icons.dm
index 362a423eb50..8f8f5829970 100644
--- a/code/modules/mob/living/carbon/human/update_icons.dm
+++ b/code/modules/mob/living/carbon/human/update_icons.dm
@@ -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))
diff --git a/code/modules/mob/living/carbon/update_icons.dm b/code/modules/mob/living/carbon/update_icons.dm
index 163ccdae8b1..b8129dd15c9 100644
--- a/code/modules/mob/living/carbon/update_icons.dm
+++ b/code/modules/mob/living/carbon/update_icons.dm
@@ -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
From 2504affdcf33076602fb90e4211eac39d202539a Mon Sep 17 00:00:00 2001
From: c0
Date: Tue, 4 Aug 2015 15:39:28 +0300
Subject: [PATCH 06/35] Better sprites for bed and bedsheets
---
code/game/objects/structures/bedsheet_bin.dm | 70 ++++++++++---------
icons/obj/bedsheets.dmi | Bin 0 -> 10222 bytes
icons/obj/items.dmi | Bin 60942 -> 52186 bytes
icons/obj/objects.dmi | Bin 118700 -> 118652 bytes
4 files changed, 37 insertions(+), 33 deletions(-)
create mode 100644 icons/obj/bedsheets.dmi
diff --git a/code/game/objects/structures/bedsheet_bin.dm b/code/game/objects/structures/bedsheet_bin.dm
index 27c6aaebef1..32ad17dc3c7 100644
--- a/code/game/objects/structures/bedsheet_bin.dm
+++ b/code/game/objects/structures/bedsheet_bin.dm
@@ -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"
diff --git a/icons/obj/bedsheets.dmi b/icons/obj/bedsheets.dmi
new file mode 100644
index 0000000000000000000000000000000000000000..8578b49927bd500174274944ba64fd5f224f2429
GIT binary patch
literal 10222
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
z
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