From 81df1a130725e29ff49fec8bbee569f4edc2b8e6 Mon Sep 17 00:00:00 2001 From: LightningIron Date: Sat, 21 Dec 2013 17:53:19 -0600 Subject: [PATCH 01/45] Removes lockboxes. --- code/modules/research/rdconsole.dm | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/code/modules/research/rdconsole.dm b/code/modules/research/rdconsole.dm index 4cc18d6434..103969bdd1 100644 --- a/code/modules/research/rdconsole.dm +++ b/code/modules/research/rdconsole.dm @@ -394,10 +394,10 @@ won't update every console in existence) but it's more of a hassle to do. Also, new_item.investigate_log("built by [key]","singulo") new_item.reliability = being_built.reliability if(linked_lathe.hacked) being_built.reliability = max((reliability / 2), 0) - if(being_built.locked) + /*if(being_built.locked) var/obj/item/weapon/storage/lockbox/L = new/obj/item/weapon/storage/lockbox(linked_lathe.loc) new_item.loc = L - L.name += " ([new_item.name])" + L.name += " ([new_item.name])"*/ else new_item.loc = linked_lathe.loc linked_lathe.busy = 0 From 8ae226652661e0d06102915297171bc84053f8f4 Mon Sep 17 00:00:00 2001 From: LightningIron Date: Wed, 8 Jan 2014 20:49:45 -0600 Subject: [PATCH 02/45] Added captured variable to mobs, non-chair equivalent to being buckled into a chair --- code/modules/mob/mob.dm | 6 +++++- code/modules/mob/mob_defines.dm | 2 +- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/code/modules/mob/mob.dm b/code/modules/mob/mob.dm index c82489cf35..5cd8c2b68e 100644 --- a/code/modules/mob/mob.dm +++ b/code/modules/mob/mob.dm @@ -362,7 +362,7 @@ var/list/slot_equipment_priority = list( \ pluralcheck = " [deathtimeminutes] minutes and" var/deathtimeseconds = round((deathtime - deathtimeminutes * 600) / 10,1) usr << "You have been dead for[pluralcheck] [deathtimeseconds] seconds." - + if (deathtime < 18000) usr << "You must wait 30 minutes to respawn!" return @@ -753,6 +753,10 @@ note dizziness decrements automatically in the mob's Life() proc. else if( stunned ) // lying = 0 canmove = 0 + else if(captured) + anchored = 1 + canmove = 0 + lying = 0 else lying = !can_stand canmove = has_limbs diff --git a/code/modules/mob/mob_defines.dm b/code/modules/mob/mob_defines.dm index 2452db5abc..cff7092f74 100644 --- a/code/modules/mob/mob_defines.dm +++ b/code/modules/mob/mob_defines.dm @@ -157,7 +157,7 @@ var/voice_name = "unidentifiable voice" var/faction = "neutral" //Used for checking whether hostile simple animals will attack you, possibly more stuff later - + var/captured = 0 //Functionally, should give the same effect as being buckled into a chair when true. //Generic list for proc holders. Only way I can see to enable certain verbs/procs. Should be modified if needed. var/proc_holder_list[] = list()//Right now unused. From 7a37eac62450d58906afed35f0fb013a87fd53a4 Mon Sep 17 00:00:00 2001 From: LightningIron Date: Wed, 8 Jan 2014 20:52:51 -0600 Subject: [PATCH 03/45] Miscellaneous ninja fixes and ability cost changes (because nearly all were inconsistent with listed/actual cost), e-net fix --- code/game/gamemodes/events/ninja_abilities.dm | 33 ++++++++++--------- code/game/gamemodes/events/ninja_equipment.dm | 5 +-- 2 files changed, 20 insertions(+), 18 deletions(-) diff --git a/code/game/gamemodes/events/ninja_abilities.dm b/code/game/gamemodes/events/ninja_abilities.dm index 641bdf77ce..11109af279 100644 --- a/code/game/gamemodes/events/ninja_abilities.dm +++ b/code/game/gamemodes/events/ninja_abilities.dm @@ -69,12 +69,12 @@ Not sure why this would be useful (it's not) but whatever. Ninjas need their smo //=======//RIGHT CLICK TELEPORT//=======// //Right click to teleport somewhere, almost exactly like admin jump to turf. /obj/item/clothing/suit/space/space_ninja/proc/ninjashift(turf/T in oview()) - set name = "Phase Shift (1E)" + set name = "Phase Shift (400E)" set desc = "Utilizes the internal VOID-shift device to rapidly transit to a destination in view." set category = null//So it does not show up on the panel but can still be right-clicked. set src = usr.contents//Fixes verbs not attaching properly for objects. Praise the DM reference guide! - var/C = 200 + var/C = 40 if(!ninjacost(C,1)) var/mob/living/carbon/human/U = affecting var/turf/mobloc = get_turf(U.loc)//To make sure that certain things work properly below. @@ -83,6 +83,7 @@ Not sure why this would be useful (it's not) but whatever. Ninjas need their smo playsound(U.loc, 'sound/effects/sparks4.ogg', 50, 1) anim(mobloc,src,'icons/mob/mob.dmi',,"phaseout",,U.dir) + cell.use(C*10) handle_teleport_grab(T, U) U.loc = T @@ -92,19 +93,19 @@ Not sure why this would be useful (it's not) but whatever. Ninjas need their smo playsound(U.loc, 'sound/effects/sparks2.ogg', 50, 1) anim(U.loc,U,'icons/mob/mob.dmi',,"phasein",,U.dir) else - U << "\red You cannot teleport into solid walls or from solid matter" + U << "\red You cannot teleport into solid walls or from solid matter." return //=======//EM PULSE//=======// //Disables nearby tech equipment. /obj/item/clothing/suit/space/space_ninja/proc/ninjapulse() - set name = "EM Burst (1,000E)" + set name = "EM Burst (2,000E)" set desc = "Disable any nearby technology with a electro-magnetic pulse." set category = "Ninja Ability" set popup_menu = 0 - var/C = 250 - if(!ninjacost(C,100)) // EMP's now cost 1,000Energy about 30% + var/C = 200 + if(!ninjacost(C,0)) // EMP's now cost 1,000Energy about 30% var/mob/living/carbon/human/U = affecting playsound(U.loc, 'sound/effects/EMPulse.ogg', 60, 2) empulse(U, 2, 3) //Procs sure are nice. Slightly weaker than wizard's disable tch. @@ -115,13 +116,13 @@ Not sure why this would be useful (it's not) but whatever. Ninjas need their smo //=======//ENERGY BLADE//=======// //Summons a blade of energy in active hand. /obj/item/clothing/suit/space/space_ninja/proc/ninjablade() - set name = "Energy Blade (20E)" + set name = "Energy Blade (500E)" set desc = "Create a focused beam of energy in your active hand." set category = "Ninja Ability" set popup_menu = 0 var/C = 50 - if(!ninjacost(C, 800)) //Same spawn cost but higher upkeep cost + if(!ninjacost(C,0)) //Same spawn cost but higher upkeep cost var/mob/living/carbon/human/U = affecting if(!kamikaze) if(!U.get_active_hand()&&!istype(U.get_inactive_hand(), /obj/item/weapon/melee/energy/blade)) @@ -148,12 +149,12 @@ Not sure why this would be useful (it's not) but whatever. Ninjas need their smo /*Shoots ninja stars at random people. This could be a lot better but I'm too tired atm.*/ /obj/item/clothing/suit/space/space_ninja/proc/ninjastar() - set name = "Energy Star (1,000E)" + set name = "Energy Star (800E)" set desc = "Launches an energy star at a random living target." set category = "Ninja Ability" set popup_menu = 0 - var/C = 50 + var/C = 80 if(!ninjacost(C,1)) var/mob/living/carbon/human/U = affecting var/targets[] = list()//So yo can shoot while yo throw dawg @@ -173,7 +174,7 @@ This could be a lot better but I'm too tired atm.*/ A.current = curloc A.yo = targloc.y - curloc.y A.xo = targloc.x - curloc.x - cell.use(C*100)// Ninja stars now cost 100 energy, stil la fair chunk to avoid spamming, will run out of power quickly if used 3 or more times + cell.use(C*10) A.process() else U << "\red There are no targets in view." @@ -183,13 +184,13 @@ This could be a lot better but I'm too tired atm.*/ /*Allows the ninja to capture people, I guess. Must right click on a mob to activate.*/ /obj/item/clothing/suit/space/space_ninja/proc/ninjanet(mob/living/carbon/M in oview())//Only living carbon mobs. - set name = "Energy Net (8,000E)" + set name = "Energy Net (7,000E)" set desc = "Captures a fallen opponent in a net of energy. Will teleport them to a holding facility after 30 seconds." set category = null set src = usr.contents - var/C = 500 - if(!ninjacost(C,80)&&iscarbon(M)) // Nets now cost 8,000 + var/C = 700 + if(!ninjacost(C,0)&&iscarbon(M)) var/mob/living/carbon/human/U = affecting if(M.client)//Monkeys without a client can still step_to() and bypass the net. Also, netting inactive people is lame. //if(M)//DEBUG @@ -200,7 +201,7 @@ Must right click on a mob to activate.*/ return spawn(0) U.Beam(M,"n_beam",,15) - M.anchored = 1//Anchors them so they can't move. + M.captured = 1 U.say("Get over here!") var/obj/effect/energy_net/E = new /obj/effect/energy_net(M.loc) E.layer = M.layer+1//To have it appear one layer above the mob. @@ -210,7 +211,7 @@ Must right click on a mob to activate.*/ E.master = U spawn(0)//Parallel processing. E.process(M) - cell.use(C*100) // Nets now cost what should be most of a standard battery, since your taking someone out of the round + cell.use(C*10) // Nets now cost what should be most of a standard battery, since your taking someone out of the round else U << "They are already trapped inside an energy net." else diff --git a/code/game/gamemodes/events/ninja_equipment.dm b/code/game/gamemodes/events/ninja_equipment.dm index d25dabe21b..096f6b00ab 100644 --- a/code/game/gamemodes/events/ninja_equipment.dm +++ b/code/game/gamemodes/events/ninja_equipment.dm @@ -37,7 +37,7 @@ ________________________________________________________________________________ reagents.my_atom = src for(var/reagent_id in reagent_list) reagent_id == "radium" ? reagents.add_reagent(reagent_id, r_maxamount+(a_boost*a_transfer)) : reagents.add_reagent(reagent_id, r_maxamount)//It will take into account radium used for adrenaline boosting. - cell = new/obj/item/weapon/cell/high//The suit should *always* have a battery because so many things rely on it. + cell = new/obj/item/weapon/cell/super//The suit should *always* have a battery because so many things rely on it. cell.charge = 9000//Starting charge should not be higher than maximum charge. It leads to problems with recharging. /obj/item/clothing/suit/space/space_ninja/Del() @@ -1385,7 +1385,8 @@ It is possible to destroy the net by the occupant or someone else. if(!isnull(master))//As long as they still exist. master << "\blue SUCCESS: \black transport procedure of \the [affecting] complete." - M.anchored = 0//Important. + M.captured = 0 //Important. + M.anchored = initial(M.anchored) //Changes the mob's anchored status to the original one; this is not handled by the can_move proc. else//And they are free. M << "\blue You are free of the net!" From 24be1d4a2397ee2a69bffc9d0cabf8335efb80f5 Mon Sep 17 00:00:00 2001 From: LightningIron Date: Wed, 8 Jan 2014 21:10:17 -0600 Subject: [PATCH 04/45] Fixed accidental change of ninja cell to super capacity. --- code/game/gamemodes/events/ninja_equipment.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/game/gamemodes/events/ninja_equipment.dm b/code/game/gamemodes/events/ninja_equipment.dm index 096f6b00ab..d2bd2dbc7b 100644 --- a/code/game/gamemodes/events/ninja_equipment.dm +++ b/code/game/gamemodes/events/ninja_equipment.dm @@ -37,7 +37,7 @@ ________________________________________________________________________________ reagents.my_atom = src for(var/reagent_id in reagent_list) reagent_id == "radium" ? reagents.add_reagent(reagent_id, r_maxamount+(a_boost*a_transfer)) : reagents.add_reagent(reagent_id, r_maxamount)//It will take into account radium used for adrenaline boosting. - cell = new/obj/item/weapon/cell/super//The suit should *always* have a battery because so many things rely on it. + cell = new/obj/item/weapon/cell/high//The suit should *always* have a battery because so many things rely on it. cell.charge = 9000//Starting charge should not be higher than maximum charge. It leads to problems with recharging. /obj/item/clothing/suit/space/space_ninja/Del() From 756214fbc796714cb55bf33934c4f5d9110206e0 Mon Sep 17 00:00:00 2001 From: LightningIron Date: Wed, 8 Jan 2014 21:13:55 -0600 Subject: [PATCH 05/45] Reverted lockbox removal which was on my master branch. Should be merged with next dev. --- code/modules/research/rdconsole.dm | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/code/modules/research/rdconsole.dm b/code/modules/research/rdconsole.dm index 103969bdd1..4cc18d6434 100644 --- a/code/modules/research/rdconsole.dm +++ b/code/modules/research/rdconsole.dm @@ -394,10 +394,10 @@ won't update every console in existence) but it's more of a hassle to do. Also, new_item.investigate_log("built by [key]","singulo") new_item.reliability = being_built.reliability if(linked_lathe.hacked) being_built.reliability = max((reliability / 2), 0) - /*if(being_built.locked) + if(being_built.locked) var/obj/item/weapon/storage/lockbox/L = new/obj/item/weapon/storage/lockbox(linked_lathe.loc) new_item.loc = L - L.name += " ([new_item.name])"*/ + L.name += " ([new_item.name])" else new_item.loc = linked_lathe.loc linked_lathe.busy = 0 From 2c1f721749d2692a189745178921dc1ecdafa84d Mon Sep 17 00:00:00 2001 From: LightningIron Date: Thu, 9 Jan 2014 11:37:48 -0600 Subject: [PATCH 06/45] Fixes #4221. --- code/game/machinery/autolathe.dm | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/code/game/machinery/autolathe.dm b/code/game/machinery/autolathe.dm index d3fb30d371..565edc8e17 100644 --- a/code/game/machinery/autolathe.dm +++ b/code/game/machinery/autolathe.dm @@ -16,7 +16,8 @@ var/global/list/autolathe_recipes = list( \ new /obj/item/weapon/stock_parts/console_screen(), \ new /obj/item/weapon/airlock_electronics(), \ new /obj/item/weapon/airalarm_electronics(), \ - new /obj/item/weapon/firealarm_electronics(), \ + new /obj/item/weapon/firealarm_electronics(), \ + new /obj/item/weapon/module/power_control(), \ new /obj/item/stack/sheet/metal(), \ new /obj/item/stack/sheet/glass(), \ new /obj/item/stack/sheet/rglass(), \ From 16a28b7338141f39e9a674cfae3d702b2a3eaf7a Mon Sep 17 00:00:00 2001 From: Zuhayr Date: Sat, 11 Jan 2014 02:35:10 +1030 Subject: [PATCH 07/45] Added filling_color var to food items for use in sandwiches. --- .../reagents/reagent_containers/food.dm | 1 + .../reagent_containers/food/sandwich.dm | 83 +++++ .../reagent_containers/food/snacks.dm | 285 ++++++++++++++++++ .../reagent_containers/food/snacks/grown.dm | 52 +++- .../reagent_containers/food/snacks/meat.dm | 1 + 5 files changed, 421 insertions(+), 1 deletion(-) create mode 100644 code/modules/reagents/reagent_containers/food/sandwich.dm diff --git a/code/modules/reagents/reagent_containers/food.dm b/code/modules/reagents/reagent_containers/food.dm index 4f14338886..53bdeca5f8 100644 --- a/code/modules/reagents/reagent_containers/food.dm +++ b/code/modules/reagents/reagent_containers/food.dm @@ -4,6 +4,7 @@ /obj/item/weapon/reagent_containers/food possible_transfer_amounts = null volume = 50 //Sets the default container amount for all food items. + var/filling_color = "#FFFFFF" //Used by sandwiches. /obj/item/weapon/reagent_containers/food/New() ..() diff --git a/code/modules/reagents/reagent_containers/food/sandwich.dm b/code/modules/reagents/reagent_containers/food/sandwich.dm new file mode 100644 index 0000000000..12cc0c253f --- /dev/null +++ b/code/modules/reagents/reagent_containers/food/sandwich.dm @@ -0,0 +1,83 @@ +/obj/item/weapon/reagent_containers/food/snacks/breadslice/attackby(obj/item/W as obj, mob/user as mob) + + if(istype(W,/obj/item/weapon/shard) || istype(W,/obj/item/weapon/reagent_containers/food/snacks)) + var/obj/item/weapon/reagent_containers/food/snacks/csandwich/S = new(get_turf(src)) + S.attackby(W,user) + del(src) + ..() + +/obj/item/weapon/reagent_containers/food/snacks/csandwich + name = "sandwich" + desc = "The best thing since sliced bread." + icon_state = "breadslice" + trash = /obj/item/trash/plate + bitesize = 2 + + var/list/ingredients = list() + +/obj/item/weapon/reagent_containers/food/snacks/csandwich/attackby(obj/item/W as obj, mob/user as mob) + + var/sandwich_limit = 4 + for(var/obj/item/O in ingredients) + if(istype(O,/obj/item/weapon/reagent_containers/food/snacks/breadslice)) + sandwich_limit += 4 + + if(src.contents.len > sandwich_limit) + user << "\red If you put anything else on \the [src] it's going to collapse." + return + else if(istype(W,/obj/item/weapon/shard)) + user << "\blue You hide [W] in \the [src]." + user.drop_item() + W.loc = src + update() + return + else if(istype(W,/obj/item/weapon/reagent_containers/food/snacks)) + user << "\blue You layer [W] over \the [src]." + var/obj/item/weapon/reagent_containers/F = W + F.reagents.trans_to(src, F.reagents.total_volume) + user.drop_item() + W.loc = src + ingredients += W + update() + return + ..() + +/obj/item/weapon/reagent_containers/food/snacks/csandwich/proc/update() + var/fullname = "" //We need to build this from the contents of the var. + var/i = 0 + + overlays.Cut() + + for(var/obj/item/weapon/reagent_containers/food/snacks/O in ingredients) + + i++ + if(i == 1) + fullname += "[O.name]" + else if(i == ingredients.len) + fullname += " and [O.name]" + else + fullname += ", [O.name]" + + var/image/I = new(src.icon, "sandwich_filling") + I.color = O.filling_color + I.pixel_x = pick(list(-1,0,1)) + I.pixel_y = (i*2)+1 + overlays += I + + var/image/T = new(src.icon, "sandwich_top") + T.pixel_x = pick(list(-1,0,1)) + T.pixel_y = (ingredients.len * 2)+3 + overlays += T + + name = lowertext("[fullname] sandwich") + if(length(name) > 80) name = "[pick(list("absurd","colossal","enormous","ridiculous"))] sandwich" + w_class = n_ceil(Clamp((ingredients.len/2),1,3)) + +/obj/item/weapon/reagent_containers/food/snacks/csandwich/Del() + for(var/obj/item/O in ingredients) + del(O) + ..() + +/obj/item/weapon/reagent_containers/food/snacks/csandwich/examine() + ..() + usr << "\blue You think you can see [pick(ingredients)] in there." \ No newline at end of file diff --git a/code/modules/reagents/reagent_containers/food/snacks.dm b/code/modules/reagents/reagent_containers/food/snacks.dm index ef45f7a664..a712b236c7 100644 --- a/code/modules/reagents/reagent_containers/food/snacks.dm +++ b/code/modules/reagents/reagent_containers/food/snacks.dm @@ -249,6 +249,8 @@ desc = "Probably too incredible for mortal men to fully enjoy." icon_state = "aesirsalad" trash = /obj/item/trash/snack_bowl + filling_color = "#468C00" + New() ..() reagents.add_reagent("nutriment", 8) @@ -261,6 +263,8 @@ desc = "Nougat love it or hate it." icon_state = "candy" trash = /obj/item/trash/candy + filling_color = "#7D5F46" + New() ..() reagents.add_reagent("nutriment", 1) @@ -281,6 +285,8 @@ name = "candy corn" desc = "It's a handful of candy corn. Can be stored in a detective's hat." icon_state = "candy_corn" + filling_color = "#FFFCB0" + New() ..() reagents.add_reagent("nutriment", 4) @@ -292,6 +298,8 @@ desc = "Commander Riker's What-The-Crisps" icon_state = "chips" trash = /obj/item/trash/chips + filling_color = "#E8C31E" + New() ..() reagents.add_reagent("nutriment", 3) @@ -301,6 +309,8 @@ name = "cookie" desc = "COOKIE!!!" icon_state = "COOKIE!!!" + filling_color = "#DBC94F" + New() ..() reagents.add_reagent("nutriment", 5) @@ -310,6 +320,8 @@ name = "Chocolate Bar" desc = "Such, sweet, fattening food." icon_state = "chocolatebar" + filling_color = "#7D5F46" + New() ..() reagents.add_reagent("nutriment", 2) @@ -321,6 +333,8 @@ name = "Chocolate Egg" desc = "Such, sweet, fattening food." icon_state = "chocolateegg" + filling_color = "#7D5F46" + New() ..() reagents.add_reagent("nutriment", 3) @@ -332,6 +346,7 @@ name = "donut" desc = "Goes great with Robust Coffee." icon_state = "donut1" + filling_color = "#D9C386" /obj/item/weapon/reagent_containers/food/snacks/donut/normal name = "donut" @@ -351,6 +366,8 @@ name = "Chaos Donut" desc = "Like life, it never quite tastes the same." icon_state = "donut1" + filling_color = "#ED11E6" + New() ..() reagents.add_reagent("nutriment", 2) @@ -388,6 +405,8 @@ name = "Jelly Donut" desc = "You jelly?" icon_state = "jdonut1" + filling_color = "#ED1169" + New() ..() reagents.add_reagent("nutriment", 3) @@ -403,6 +422,8 @@ name = "Jelly Donut" desc = "You jelly?" icon_state = "jdonut1" + filling_color = "#ED1169" + New() ..() reagents.add_reagent("nutriment", 3) @@ -418,6 +439,8 @@ name = "Jelly Donut" desc = "You jelly?" icon_state = "jdonut1" + filling_color = "#ED1169" + New() ..() reagents.add_reagent("nutriment", 3) @@ -433,6 +456,8 @@ name = "egg" desc = "An egg!" icon_state = "egg" + filling_color = "#FDFFD1" + New() ..() reagents.add_reagent("nutriment", 1) @@ -495,6 +520,8 @@ name = "Fried egg" desc = "A fried egg, with a touch of salt and pepper." icon_state = "friedegg" + filling_color = "#FFDF78" + New() ..() reagents.add_reagent("nutriment", 2) @@ -506,6 +533,8 @@ name = "Boiled egg" desc = "A hard boiled egg." icon_state = "egg" + filling_color = "#FFFFFF" + New() ..() reagents.add_reagent("nutriment", 2) @@ -523,6 +552,8 @@ desc = "An appendix which looks perfectly healthy." icon = 'icons/obj/surgery.dmi' icon_state = "appendix" + filling_color = "#E00D34" + New() ..() reagents.add_reagent("nutriment", 3) @@ -532,11 +563,14 @@ name = "inflamed appendix" desc = "An appendix which appears to be inflamed." icon_state = "appendixinflamed" + filling_color = "#E00D7A" /obj/item/weapon/reagent_containers/food/snacks/tofu name = "Tofu" icon_state = "tofu" desc = "We all love tofu." + filling_color = "#FFFEE0" + New() ..() reagents.add_reagent("nutriment", 3) @@ -546,6 +580,8 @@ name = "Tofurkey" desc = "A fake turkey made from tofu." icon_state = "tofurkey" + filling_color = "#FFFEE0" + New() ..() reagents.add_reagent("nutriment", 12) @@ -556,6 +592,8 @@ name = "Stuffing" desc = "Moist, peppery breadcrumbs for filling the body cavities of dead birds. Dig in!" icon_state = "stuffing" + filling_color = "#C9AC83" + New() ..() reagents.add_reagent("nutriment", 3) @@ -565,6 +603,8 @@ name = "carp fillet" desc = "A fillet of spess carp meat" icon_state = "fishfillet" + filling_color = "#FFDEFE" + New() ..() reagents.add_reagent("nutriment", 3) @@ -575,6 +615,8 @@ name = "Fish Fingers" desc = "A finger of fish." icon_state = "fishfingers" + filling_color = "#FFDEFE" + New() ..() reagents.add_reagent("nutriment", 4) @@ -585,6 +627,8 @@ name = "huge mushroom slice" desc = "A slice from a huge mushroom." icon_state = "hugemushroomslice" + filling_color = "#E0D7C5" + New() ..() reagents.add_reagent("nutriment", 3) @@ -595,6 +639,8 @@ name = "tomato slice" desc = "A slice from a huge tomato" icon_state = "tomatomeat" + filling_color = "#DB0000" + New() ..() reagents.add_reagent("nutriment", 3) @@ -604,6 +650,8 @@ name = "bear meat" desc = "A very manly slab of meat." icon_state = "bearmeat" + filling_color = "#DB0000" + New() ..() reagents.add_reagent("nutriment", 12) @@ -614,6 +662,8 @@ name = "meat" desc = "A slab of meat" icon_state = "xenomeat" + filling_color = "#43DE18" + New() ..() reagents.add_reagent("nutriment", 3) @@ -623,6 +673,8 @@ name = "Faggot" desc = "A great meal all round. Not a cord of wood." icon_state = "faggot" + filling_color = "#DB0000" + New() ..() reagents.add_reagent("nutriment", 3) @@ -632,6 +684,8 @@ name = "Sausage" desc = "A piece of mixed, long meat." icon_state = "sausage" + filling_color = "#DB0000" + New() ..() reagents.add_reagent("nutriment", 6) @@ -641,6 +695,8 @@ name = "Donk-pocket" desc = "The food of choice for the seasoned traitor." icon_state = "donkpocket" + filling_color = "#DEDEAB" + New() ..() reagents.add_reagent("nutriment", 4) @@ -658,6 +714,8 @@ name = "brainburger" desc = "A strange looking burger. It looks almost sentient." icon_state = "brainburger" + filling_color = "#F2B6EA" + New() ..() reagents.add_reagent("nutriment", 6) @@ -668,6 +726,8 @@ name = "Ghost Burger" desc = "Spooky! It doesn't look very filling." icon_state = "ghostburger" + filling_color = "#FFF2FF" + New() ..() reagents.add_reagent("nutriment", 2) @@ -677,6 +737,7 @@ /obj/item/weapon/reagent_containers/food/snacks/human var/hname = "" var/job = null + filling_color = "#D63C3C" /obj/item/weapon/reagent_containers/food/snacks/human/burger name = "-burger" @@ -691,6 +752,8 @@ name = "burger" desc = "The cornerstone of every nutritious breakfast." icon_state = "hburger" + filling_color = "#D63C3C" + New() ..() reagents.add_reagent("nutriment", 6) @@ -700,6 +763,8 @@ name = "Fillet -o- Carp Sandwich" desc = "Almost like a carp is yelling somewhere... Give me back that fillet -o- carp, give me that carp." icon_state = "fishburger" + filling_color = "#FFDEFE" + New() ..() reagents.add_reagent("nutriment", 6) @@ -710,6 +775,8 @@ name = "Tofu Burger" desc = "What.. is that meat?" icon_state = "tofuburger" + filling_color = "#FFFEE0" + New() ..() reagents.add_reagent("nutriment", 6) @@ -719,6 +786,8 @@ name = "roburger" desc = "The lettuce is the only organic component. Beep." icon_state = "roburger" + filling_color = "#CCCCCC" + New() ..() reagents.add_reagent("nanites", 2) @@ -728,7 +797,9 @@ name = "roburger" desc = "This massive patty looks like poison. Beep." icon_state = "roburger" + filling_color = "#CCCCCC" volume = 100 + New() ..() reagents.add_reagent("nanites", 100) @@ -738,6 +809,8 @@ name = "xenoburger" desc = "Smells caustic. Tastes like heresy." icon_state = "xburger" + filling_color = "#43DE18" + New() ..() reagents.add_reagent("nutriment", 8) @@ -747,6 +820,8 @@ name = "Clown Burger" desc = "This tastes funny..." icon_state = "clownburger" + filling_color = "#FF00FF" + New() ..() /* @@ -761,6 +836,8 @@ name = "Mime Burger" desc = "Its taste defies language." icon_state = "mimeburger" + filling_color = "#FFFFFF" + New() ..() reagents.add_reagent("nutriment", 6) @@ -771,6 +848,8 @@ desc = "That's all you can say!" icon_state = "omelette" trash = /obj/item/trash/plate + filling_color = "#FFF9A8" + //var/herp = 0 New() ..() @@ -808,6 +887,8 @@ name = "Muffin" desc = "A delicious and spongy little cake" icon_state = "muffin" + filling_color = "#E0CF9B" + New() ..() reagents.add_reagent("nutriment", 6) @@ -818,6 +899,7 @@ desc = "Just like back home, on clown planet! HONK!" icon_state = "pie" trash = /obj/item/trash/plate + filling_color = "#FBFFB8" /obj/item/weapon/reagent_containers/food/snacks/pie/New() ..() @@ -847,6 +929,8 @@ desc = "Mmm, waffles" icon_state = "waffles" trash = /obj/item/trash/waffles + filling_color = "#E6DEB5" + New() ..() reagents.add_reagent("nutriment", 8) @@ -857,6 +941,8 @@ desc = "The only good recipe for eggplant." icon_state = "eggplantparm" trash = /obj/item/trash/plate + filling_color = "#4D2F5E" + New() ..() reagents.add_reagent("nutriment", 6) @@ -867,6 +953,8 @@ desc = "Not made of people. Honest." //Totally people. icon_state = "soylent_green" trash = /obj/item/trash/waffles + filling_color = "#B8E6B5" + New() ..() reagents.add_reagent("nutriment", 10) @@ -877,6 +965,8 @@ desc = "Not made of people. Honest." //Actually honest for once. icon_state = "soylent_yellow" trash = /obj/item/trash/waffles + filling_color = "#E6FA61" + New() ..() reagents.add_reagent("nutriment", 10) @@ -888,6 +978,8 @@ icon_state = "meatpie" desc = "An old barber recipe, very delicious!" trash = /obj/item/trash/plate + filling_color = "#948051" + New() ..() reagents.add_reagent("nutriment", 10) @@ -898,6 +990,8 @@ icon_state = "meatpie" desc = "A delicious tofu pie." trash = /obj/item/trash/plate + filling_color = "#FFFEE0" + New() ..() reagents.add_reagent("nutriment", 10) @@ -907,6 +1001,8 @@ name = "amanita pie" desc = "Sweet and tasty poison pie." icon_state = "amanita_pie" + filling_color = "#FFCCCC" + New() ..() reagents.add_reagent("nutriment", 5) @@ -918,6 +1014,8 @@ name = "plump pie" desc = "I bet you love stuff made out of plump helmets!" icon_state = "plump_pie" + filling_color = "#B8279B" + New() ..() if(prob(10)) @@ -935,6 +1033,8 @@ icon_state = "xenomeatpie" desc = "A delicious meatpie. Probably heretical." trash = /obj/item/trash/plate + filling_color = "#43DE18" + New() ..() reagents.add_reagent("nutriment", 10) @@ -945,6 +1045,8 @@ desc = "A savory dish of alien wing wang in soy." icon_state = "wingfangchu" trash = /obj/item/trash/snack_bowl + filling_color = "#43DE18" + New() ..() reagents.add_reagent("nutriment", 6) @@ -956,6 +1058,8 @@ icon_state = "kabob" desc = "A human meat, on a stick." trash = /obj/item/stack/rods + filling_color = "#A85340" + New() ..() reagents.add_reagent("nutriment", 8) @@ -966,6 +1070,8 @@ icon_state = "kabob" desc = "Delicious meat, on a stick." trash = /obj/item/stack/rods + filling_color = "#A85340" + New() ..() reagents.add_reagent("nutriment", 8) @@ -976,6 +1082,8 @@ icon_state = "kabob" desc = "Vegan meat, on a stick." trash = /obj/item/stack/rods + filling_color = "#FFFEE0" + New() ..() reagents.add_reagent("nutriment", 8) @@ -986,6 +1094,8 @@ desc = "A grifftastic sandwich that burns your tongue and then leaves it numb!" icon_state = "cubancarp" trash = /obj/item/trash/plate + filling_color = "#E9ADFF" + New() ..() reagents.add_reagent("nutriment", 6) @@ -999,6 +1109,8 @@ icon_state = "popcorn" trash = /obj/item/trash/popcorn var/unpopped = 0 + filling_color = "#FFFAD4" + New() ..() unpopped = rand(1,10) @@ -1016,6 +1128,8 @@ icon_state = "sosjerky" desc = "Beef jerky made from the finest space cows." trash = /obj/item/trash/sosjerky + filling_color = "#631212" + New() ..() reagents.add_reagent("nutriment", 4) @@ -1026,6 +1140,8 @@ icon_state = "4no_raisins" desc = "Best raisins in the universe. Not sure why." trash = /obj/item/trash/raisins + filling_color = "#343834" + New() ..() reagents.add_reagent("nutriment", 6) @@ -1034,6 +1150,8 @@ name = "Space Twinkie" icon_state = "space_twinkie" desc = "Guaranteed to survive longer then you will." + filling_color = "#FFE591" + New() ..() reagents.add_reagent("sugar", 4) @@ -1044,6 +1162,8 @@ icon_state = "cheesie_honkers" desc = "Bite sized cheesie snacks that will honk all over your mouth" trash = /obj/item/trash/cheesie + filling_color = "#FFA305" + New() ..() reagents.add_reagent("nutriment", 4) @@ -1053,6 +1173,8 @@ name = "Syndi-Cakes" icon_state = "syndi_cakes" desc = "An extremely moist snack cake that tastes just as good after being nuked." + filling_color = "#FF5D05" + trash = /obj/item/trash/syndi_cakes New() ..() @@ -1064,6 +1186,8 @@ name = "Loaded Baked Potato" desc = "Totally baked." icon_state = "loadedbakedpotato" + filling_color = "#9C7A68" + New() ..() reagents.add_reagent("nutriment", 6) @@ -1074,6 +1198,8 @@ desc = "AKA: French Fries, Freedom Fries, etc" icon_state = "fries" trash = /obj/item/trash/plate + filling_color = "#EDDD00" + New() ..() reagents.add_reagent("nutriment", 4) @@ -1084,6 +1210,8 @@ desc = "Dope from a soy." icon_state = "soydope" trash = /obj/item/trash/plate + filling_color = "#C4BF76" + New() ..() reagents.add_reagent("nutriment", 2) @@ -1093,6 +1221,8 @@ name = "Spagetti" desc = "Now thats a nice pasta!" icon_state = "spagetti" + filling_color = "#EDDD00" + New() ..() reagents.add_reagent("nutriment", 1) @@ -1103,6 +1233,8 @@ desc = "Fries. Covered in cheese. Duh." icon_state = "cheesyfries" trash = /obj/item/trash/plate + filling_color = "#EDDD00" + New() ..() reagents.add_reagent("nutriment", 6) @@ -1112,6 +1244,8 @@ name = "Fortune cookie" desc = "A true prophecy in each cookie!" icon_state = "fortune_cookie" + filling_color = "#E8E79E" + New() ..() reagents.add_reagent("nutriment", 3) @@ -1121,6 +1255,8 @@ name = "Burned mess" desc = "Someone should be demoted from chef for this." icon_state = "badrecipe" + filling_color = "#211F02" + New() ..() reagents.add_reagent("toxin", 1) @@ -1132,6 +1268,8 @@ desc = "A piece of hot spicy meat." icon_state = "meatstake" trash = /obj/item/trash/plate + filling_color = "#7A3D11" + New() ..() reagents.add_reagent("nutriment", 4) @@ -1144,6 +1282,8 @@ desc = "Jello gelatin, from Alfred Hubbard's cookbook" icon_state = "spacylibertyduff" trash = /obj/item/trash/snack_bowl + filling_color = "#42B873" + New() ..() reagents.add_reagent("nutriment", 6) @@ -1155,6 +1295,8 @@ desc = "Looks curiously toxic" icon_state = "amanitajelly" trash = /obj/item/trash/snack_bowl + filling_color = "#ED0758" + New() ..() reagents.add_reagent("nutriment", 6) @@ -1167,6 +1309,8 @@ desc = "It's all twisted up!" icon_state = "poppypretzel" bitesize = 2 + filling_color = "#916E36" + New() ..() reagents.add_reagent("nutriment", 5) @@ -1178,6 +1322,8 @@ desc = "You've got balls kid, BALLS!" icon_state = "meatballsoup" trash = /obj/item/trash/snack_bowl + filling_color = "#785210" + New() ..() reagents.add_reagent("nutriment", 8) @@ -1188,6 +1334,8 @@ name = "slime soup" desc = "If no water is available, you may substitute tears." icon_state = "slimesoup" + filling_color = "#C4DBA0" + New() ..() reagents.add_reagent("slimejelly", 5) @@ -1198,6 +1346,8 @@ name = "Tomato soup" desc = "Smells like copper" icon_state = "tomatosoup" + filling_color = "#FF0000" + New() ..() reagents.add_reagent("nutriment", 2) @@ -1209,6 +1359,8 @@ name = "Clown's Tears" desc = "Not very funny." icon_state = "clownstears" + filling_color = "#C4FBFF" + New() ..() reagents.add_reagent("nutriment", 4) @@ -1221,6 +1373,8 @@ desc = "A true vegan meal" //TODO icon_state = "vegetablesoup" trash = /obj/item/trash/snack_bowl + filling_color = "#AFC4B5" + New() ..() reagents.add_reagent("nutriment", 8) @@ -1232,6 +1386,8 @@ desc = "To think, the botanist would've beat you to death with one of these." icon_state = "nettlesoup" trash = /obj/item/trash/snack_bowl + filling_color = "#AFC4B5" + New() ..() reagents.add_reagent("nutriment", 8) @@ -1244,6 +1400,8 @@ desc = "The mystery is, why aren't you eating it?" icon_state = "mysterysoup" trash = /obj/item/trash/snack_bowl + filling_color = "#F082FF" + New() ..() var/mysteryselect = pick(1,2,3,4,5,6,7,8,9,10) @@ -1289,6 +1447,8 @@ desc = "I wish this was soup." icon_state = "wishsoup" trash = /obj/item/trash/snack_bowl + filling_color = "#D1F4FF" + New() ..() reagents.add_reagent("water", 10) @@ -1302,6 +1462,8 @@ desc = "A five alarm Texan Chili!" icon_state = "hotchili" trash = /obj/item/trash/snack_bowl + filling_color = "#FF3C00" + New() ..() reagents.add_reagent("nutriment", 6) @@ -1314,6 +1476,8 @@ name = "Cold Chili" desc = "This slush is barely a liquid!" icon_state = "coldchili" + filling_color = "#2B00FF" + trash = /obj/item/trash/snack_bowl New() ..() @@ -1344,6 +1508,8 @@ desc = "Just add water!" icon_state = "monkeycube" bitesize = 12 + filling_color = "#ADAC7F" + var/wrapped = 0 var/monkey_type = null @@ -1419,6 +1585,8 @@ name = "Spell Burger" desc = "This is absolutely Ei Nath." icon_state = "spellburger" + filling_color = "#D505FF" + New() ..() reagents.add_reagent("nutriment", 6) @@ -1428,6 +1596,8 @@ name = "Big Bite Burger" desc = "Forget the Big Mac. THIS is the future!" icon_state = "bigbiteburger" + filling_color = "#E3D681" + New() ..() reagents.add_reagent("nutriment", 14) @@ -1438,6 +1608,8 @@ desc = "Viva La Mexico!" icon_state = "enchiladas" trash = /obj/item/trash/tray + filling_color = "#A36A1F" + New() ..() reagents.add_reagent("nutriment",8) @@ -1449,6 +1621,8 @@ desc = "Eeee Eee!" icon_state = "monkeysdelight" trash = /obj/item/trash/tray + filling_color = "#5C3C11" + New() ..() reagents.add_reagent("nutriment", 10) @@ -1461,6 +1635,8 @@ name = "Baguette" desc = "Bon appetit!" icon_state = "baguette" + filling_color = "#E3D796" + New() ..() reagents.add_reagent("nutriment", 6) @@ -1472,6 +1648,8 @@ name = "Fish and Chips" desc = "I do say so myself chap." icon_state = "fishandchips" + filling_color = "#E3D796" + New() ..() reagents.add_reagent("nutriment", 6) @@ -1483,6 +1661,8 @@ desc = "A grand creation of meat, cheese, bread, and several leaves of lettuce! Arthur Dent would be proud." icon_state = "sandwich" trash = /obj/item/trash/plate + filling_color = "#D9BE29" + New() ..() reagents.add_reagent("nutriment", 6) @@ -1493,6 +1673,8 @@ desc = "Now if you only had a pepper bar." icon_state = "toastedsandwich" trash = /obj/item/trash/plate + filling_color = "#D9BE29" + New() ..() reagents.add_reagent("nutriment", 6) @@ -1504,6 +1686,8 @@ desc = "Goes great with Tomato soup!" icon_state = "toastedsandwich" trash = /obj/item/trash/plate + filling_color = "#D9BE29" + New() ..() reagents.add_reagent("nutriment", 7) @@ -1514,6 +1698,8 @@ desc = "Drinking this feels like being a vampire! A tomato vampire..." icon_state = "tomatosoup" trash = /obj/item/trash/snack_bowl + filling_color = "#D92929" + New() ..() reagents.add_reagent("nutriment", 5) @@ -1525,6 +1711,8 @@ desc = "Waffles from Roffle. Co." icon_state = "rofflewaffles" trash = /obj/item/trash/waffles + filling_color = "#FF00F7" + New() ..() reagents.add_reagent("nutriment", 8) @@ -1535,6 +1723,8 @@ name = "Stew" desc = "A nice and warm stew. Healthy and strong." icon_state = "stew" + filling_color = "#9E673A" + New() ..() reagents.add_reagent("nutriment", 10) @@ -1548,6 +1738,8 @@ desc = "A slice of bread covered with delicious jam." icon_state = "jellytoast" trash = /obj/item/trash/plate + filling_color = "#B572AB" + New() ..() reagents.add_reagent("nutriment", 1) @@ -1567,6 +1759,8 @@ name = "Jelly Burger" desc = "Culinary delight..?" icon_state = "jellyburger" + filling_color = "#B572AB" + New() ..() reagents.add_reagent("nutriment", 5) @@ -1608,6 +1802,8 @@ desc = "A plain dish of noodles, this sucks." icon_state = "spagettiboiled" trash = /obj/item/trash/plate + filling_color = "#FCEE81" + New() ..() reagents.add_reagent("nutriment", 2) @@ -1618,6 +1814,8 @@ desc = "A boring dish of boring rice." icon_state = "boiledrice" trash = /obj/item/trash/snack_bowl + filling_color = "#FFFBDB" + New() ..() reagents.add_reagent("nutriment", 2) @@ -1628,6 +1826,8 @@ desc = "Where's the Jam!" icon_state = "rpudding" trash = /obj/item/trash/snack_bowl + filling_color = "#FFFBDB" + New() ..() reagents.add_reagent("nutriment", 4) @@ -1638,6 +1838,8 @@ desc = "Spaghetti and crushed tomatoes. Just like your abusive father used to make!" icon_state = "pastatomato" trash = /obj/item/trash/plate + filling_color = "#DE4545" + New() ..() reagents.add_reagent("nutriment", 6) @@ -1649,6 +1851,8 @@ desc = "Now thats a nic'e meatball!" icon_state = "meatballspagetti" trash = /obj/item/trash/plate + filling_color = "#DE4545" + New() ..() reagents.add_reagent("nutriment", 8) @@ -1658,6 +1862,8 @@ name = "Spesslaw" desc = "A lawyers favourite" icon_state = "spesslaw" + filling_color = "#DE4545" + New() ..() reagents.add_reagent("nutriment", 8) @@ -1667,6 +1873,8 @@ name = "Poppy Pretzel" desc = "A large soft pretzel full of POP!" icon_state = "poppypretzel" + filling_color = "#AB7D2E" + New() ..() reagents.add_reagent("nutriment", 5) @@ -1677,6 +1885,8 @@ desc = "Tasty fries from fresh Carrots." icon_state = "carrotfries" trash = /obj/item/trash/plate + filling_color = "#FAA005" + New() ..() reagents.add_reagent("nutriment", 3) @@ -1687,6 +1897,8 @@ name = "Super Bite Burger" desc = "This is a mountain of a burger. FOOD!" icon_state = "superbiteburger" + filling_color = "#CCA26A" + New() ..() reagents.add_reagent("nutriment", 40) @@ -1696,6 +1908,8 @@ name = "Candied Apple" desc = "An apple coated in sugary sweetness." icon_state = "candiedapple" + filling_color = "#F21873" + New() ..() reagents.add_reagent("nutriment", 3) @@ -1705,6 +1919,8 @@ name = "Apple Pie" desc = "A pie containing sweet sweet love...or apple." icon_state = "applepie" + filling_color = "#E0EDC5" + New() ..() reagents.add_reagent("nutriment", 4) @@ -1715,6 +1931,8 @@ name = "Cherry Pie" desc = "Taste so good, make a grown man cry." icon_state = "cherrypie" + filling_color = "#FF525A" + New() ..() reagents.add_reagent("nutriment", 4) @@ -1724,6 +1942,8 @@ name = "Two Bread" desc = "It is very bitter and winy." icon_state = "twobread" + filling_color = "#DBCC9A" + New() ..() reagents.add_reagent("nutriment", 2) @@ -1734,6 +1954,8 @@ desc = "You wish you had some peanut butter to go with this..." icon_state = "jellysandwich" trash = /obj/item/trash/plate + filling_color = "#9E3A78" + New() ..() reagents.add_reagent("nutriment", 2) @@ -1762,6 +1984,8 @@ name = "mint" desc = "it is only wafer thin." icon_state = "mint" + filling_color = "#F2F2F2" + New() ..() reagents.add_reagent("minttoxin", 1) @@ -1772,6 +1996,8 @@ desc = "A delicious and hearty mushroom soup." icon_state = "mushroomsoup" trash = /obj/item/trash/snack_bowl + filling_color = "#E386BF" + New() ..() reagents.add_reagent("nutriment", 8) @@ -1781,6 +2007,8 @@ name = "plump helmet biscuit" desc = "This is a finely-prepared plump helmet biscuit. The ingredients are exceptionally minced plump helmet, and well-minced dwarven wheat flour." icon_state = "phelmbiscuit" + filling_color = "#CFB4C4" + New() ..() if(prob(10)) @@ -1798,6 +2026,8 @@ desc = "A legendary egg custard that makes friends out of enemies. Probably too hot for a cat to eat." icon_state = "chawanmushi" trash = /obj/item/trash/snack_bowl + filling_color = "#F0F2E4" + New() ..() reagents.add_reagent("nutriment", 5) @@ -1808,6 +2038,8 @@ desc = "Wait, how do you spell it again..?" icon_state = "beetsoup" trash = /obj/item/trash/snack_bowl + filling_color = "#FAC9FF" + New() ..() switch(rand(1,6)) @@ -1831,6 +2063,8 @@ desc = "A proper salad, basic and simple, with little bits of carrot, tomato and apple intermingled. Vegan!" icon_state = "herbsalad" trash = /obj/item/trash/snack_bowl + filling_color = "#76B87F" + New() ..() reagents.add_reagent("nutriment", 8) @@ -1841,6 +2075,8 @@ desc = "It's just a salad of questionable 'herbs' with meatballs and fried potato slices. Nothing suspicious about it." icon_state = "validsalad" trash = /obj/item/trash/snack_bowl + filling_color = "#76B87F" + New() ..() reagents.add_reagent("nutriment", 8) @@ -1851,6 +2087,8 @@ desc = "A tasty dessert that won't make it through a metal detector." icon_state = "gappletart" trash = /obj/item/trash/plate + filling_color = "#FFFF00" + New() ..() reagents.add_reagent("nutriment", 8) @@ -1868,6 +2106,7 @@ icon_state = "meatbread" slice_path = /obj/item/weapon/reagent_containers/food/snacks/meatbreadslice slices_num = 5 + filling_color = "#FF7575" New() ..() reagents.add_reagent("nutriment", 30) @@ -1878,6 +2117,7 @@ desc = "A slice of delicious meatbread." icon_state = "meatbreadslice" trash = /obj/item/trash/plate + filling_color = "#FF7575" bitesize = 2 /obj/item/weapon/reagent_containers/food/snacks/sliceable/xenomeatbread @@ -1886,6 +2126,7 @@ icon_state = "xenomeatbread" slice_path = /obj/item/weapon/reagent_containers/food/snacks/xenomeatbreadslice slices_num = 5 + filling_color = "#8AFF75" New() ..() reagents.add_reagent("nutriment", 30) @@ -1896,6 +2137,7 @@ desc = "A slice of delicious meatbread. Extra Heretical." icon_state = "xenobreadslice" trash = /obj/item/trash/plate + filling_color = "#8AFF75" bitesize = 2 /obj/item/weapon/reagent_containers/food/snacks/sliceable/bananabread @@ -1904,6 +2146,7 @@ icon_state = "bananabread" slice_path = /obj/item/weapon/reagent_containers/food/snacks/bananabreadslice slices_num = 5 + filling_color = "#EDE5AD" New() ..() reagents.add_reagent("banana", 20) @@ -1915,6 +2158,7 @@ desc = "A slice of delicious banana bread." icon_state = "bananabreadslice" trash = /obj/item/trash/plate + filling_color = "#EDE5AD" bitesize = 2 /obj/item/weapon/reagent_containers/food/snacks/sliceable/tofubread @@ -1923,6 +2167,7 @@ icon_state = "tofubread" slice_path = /obj/item/weapon/reagent_containers/food/snacks/tofubreadslice slices_num = 5 + filling_color = "#F7FFE0" New() ..() reagents.add_reagent("nutriment", 30) @@ -1933,6 +2178,7 @@ desc = "A slice of delicious tofubread." icon_state = "tofubreadslice" trash = /obj/item/trash/plate + filling_color = "#F7FFE0" bitesize = 2 @@ -1942,6 +2188,7 @@ icon_state = "carrotcake" slice_path = /obj/item/weapon/reagent_containers/food/snacks/carrotcakeslice slices_num = 5 + filling_color = "#FFD675" New() ..() reagents.add_reagent("nutriment", 25) @@ -1953,6 +2200,7 @@ desc = "Carrotty slice of Carrot Cake, carrots are good for your eyes! Also not a lie." icon_state = "carrotcake_slice" trash = /obj/item/trash/plate + filling_color = "#FFD675" bitesize = 2 /obj/item/weapon/reagent_containers/food/snacks/sliceable/braincake @@ -1961,6 +2209,7 @@ icon_state = "braincake" slice_path = /obj/item/weapon/reagent_containers/food/snacks/braincakeslice slices_num = 5 + filling_color = "#E6AEDB" New() ..() reagents.add_reagent("nutriment", 25) @@ -1972,6 +2221,7 @@ desc = "Lemme tell you something about prions. THEY'RE DELICIOUS." icon_state = "braincakeslice" trash = /obj/item/trash/plate + filling_color = "#E6AEDB" bitesize = 2 /obj/item/weapon/reagent_containers/food/snacks/sliceable/cheesecake @@ -1980,6 +2230,7 @@ icon_state = "cheesecake" slice_path = /obj/item/weapon/reagent_containers/food/snacks/cheesecakeslice slices_num = 5 + filling_color = "#FAF7AF" New() ..() reagents.add_reagent("nutriment", 25) @@ -1990,6 +2241,7 @@ desc = "Slice of pure cheestisfaction" icon_state = "cheesecake_slice" trash = /obj/item/trash/plate + filling_color = "#FAF7AF" bitesize = 2 /obj/item/weapon/reagent_containers/food/snacks/sliceable/plaincake @@ -1998,6 +2250,7 @@ icon_state = "plaincake" slice_path = /obj/item/weapon/reagent_containers/food/snacks/plaincakeslice slices_num = 5 + filling_color = "#F7EDD5" New() ..() reagents.add_reagent("nutriment", 20) @@ -2007,6 +2260,7 @@ desc = "Just a slice of cake, it is enough for everyone." icon_state = "plaincake_slice" trash = /obj/item/trash/plate + filling_color = "#F7EDD5" bitesize = 2 /obj/item/weapon/reagent_containers/food/snacks/sliceable/orangecake @@ -2015,6 +2269,7 @@ icon_state = "orangecake" slice_path = /obj/item/weapon/reagent_containers/food/snacks/orangecakeslice slices_num = 5 + filling_color = "#FADA8E" New() ..() reagents.add_reagent("nutriment", 20) @@ -2024,6 +2279,7 @@ desc = "Just a slice of cake, it is enough for everyone." icon_state = "orangecake_slice" trash = /obj/item/trash/plate + filling_color = "#FADA8E" bitesize = 2 /obj/item/weapon/reagent_containers/food/snacks/sliceable/limecake @@ -2032,6 +2288,7 @@ icon_state = "limecake" slice_path = /obj/item/weapon/reagent_containers/food/snacks/limecakeslice slices_num = 5 + filling_color = "#CBFA8E" New() ..() reagents.add_reagent("nutriment", 20) @@ -2041,6 +2298,7 @@ desc = "Just a slice of cake, it is enough for everyone." icon_state = "limecake_slice" trash = /obj/item/trash/plate + filling_color = "#CBFA8E" bitesize = 2 /obj/item/weapon/reagent_containers/food/snacks/sliceable/lemoncake @@ -2049,6 +2307,7 @@ icon_state = "lemoncake" slice_path = /obj/item/weapon/reagent_containers/food/snacks/lemoncakeslice slices_num = 5 + filling_color = "#FAFA8E" New() ..() reagents.add_reagent("nutriment", 20) @@ -2058,6 +2317,7 @@ desc = "Just a slice of cake, it is enough for everyone." icon_state = "lemoncake_slice" trash = /obj/item/trash/plate + filling_color = "#FAFA8E" bitesize = 2 /obj/item/weapon/reagent_containers/food/snacks/sliceable/chocolatecake @@ -2066,6 +2326,7 @@ icon_state = "chocolatecake" slice_path = /obj/item/weapon/reagent_containers/food/snacks/chocolatecakeslice slices_num = 5 + filling_color = "#805930" New() ..() reagents.add_reagent("nutriment", 20) @@ -2075,6 +2336,7 @@ desc = "Just a slice of cake, it is enough for everyone." icon_state = "chocolatecake_slice" trash = /obj/item/trash/plate + filling_color = "#805930" bitesize = 2 /obj/item/weapon/reagent_containers/food/snacks/sliceable/cheesewheel @@ -2083,6 +2345,7 @@ icon_state = "cheesewheel" slice_path = /obj/item/weapon/reagent_containers/food/snacks/cheesewedge slices_num = 5 + filling_color = "#FFF700" New() ..() reagents.add_reagent("nutriment", 20) @@ -2092,6 +2355,7 @@ name = "Cheese wedge" desc = "A wedge of delicious Cheddar. The cheese wheel it was cut from can't have gone far." icon_state = "cheesewedge" + filling_color = "#FFF700" bitesize = 2 /obj/item/weapon/reagent_containers/food/snacks/sliceable/birthdaycake @@ -2100,6 +2364,7 @@ icon_state = "birthdaycake" slice_path = /obj/item/weapon/reagent_containers/food/snacks/birthdaycakeslice slices_num = 5 + filling_color = "#FFD6D6" New() ..() reagents.add_reagent("nutriment", 20) @@ -2111,6 +2376,7 @@ desc = "A slice of your birthday" icon_state = "birthdaycakeslice" trash = /obj/item/trash/plate + filling_color = "#FFD6D6" bitesize = 2 /obj/item/weapon/reagent_containers/food/snacks/sliceable/bread @@ -2119,6 +2385,8 @@ icon_state = "bread" slice_path = /obj/item/weapon/reagent_containers/food/snacks/breadslice slices_num = 5 + filling_color = "#FFE396" + New() ..() reagents.add_reagent("nutriment", 6) @@ -2129,6 +2397,7 @@ desc = "A slice of home." icon_state = "breadslice" trash = /obj/item/trash/plate + filling_color = "#FFE396" bitesize = 2 @@ -2138,6 +2407,7 @@ icon_state = "creamcheesebread" slice_path = /obj/item/weapon/reagent_containers/food/snacks/creamcheesebreadslice slices_num = 5 + filling_color = "#FFF896" New() ..() reagents.add_reagent("nutriment", 20) @@ -2148,6 +2418,7 @@ desc = "A slice of yum!" icon_state = "creamcheesebreadslice" trash = /obj/item/trash/plate + filling_color = "#FFF896" bitesize = 2 @@ -2155,6 +2426,7 @@ name = "Watermelon Slice" desc = "A slice of watery goodness." icon_state = "watermelonslice" + filling_color = "#FF3867" bitesize = 2 @@ -2164,6 +2436,7 @@ icon_state = "applecake" slice_path = /obj/item/weapon/reagent_containers/food/snacks/applecakeslice slices_num = 5 + filling_color = "#EBF5B8" New() ..() reagents.add_reagent("nutriment", 15) @@ -2173,6 +2446,7 @@ desc = "A slice of heavenly cake." icon_state = "applecakeslice" trash = /obj/item/trash/plate + filling_color = "#EBF5B8" bitesize = 2 /obj/item/weapon/reagent_containers/food/snacks/sliceable/pumpkinpie @@ -2181,6 +2455,8 @@ icon_state = "pumpkinpie" slice_path = /obj/item/weapon/reagent_containers/food/snacks/pumpkinpieslice slices_num = 5 + filling_color = "#F5B951" + New() ..() reagents.add_reagent("nutriment", 15) @@ -2190,12 +2466,14 @@ desc = "A slice of pumpkin pie, with whipped cream on top. Perfection." icon_state = "pumpkinpieslice" trash = /obj/item/trash/plate + filling_color = "#F5B951" bitesize = 2 /obj/item/weapon/reagent_containers/food/snacks/cracker name = "Cracker" desc = "It's a salted cracker." icon_state = "cracker" + filling_color = "#F5DEB8" New() ..() @@ -2207,6 +2485,7 @@ /obj/item/weapon/reagent_containers/food/snacks/sliceable/pizza slices_num = 6 + filling_color = "#BAA14C" /obj/item/weapon/reagent_containers/food/snacks/sliceable/pizza/margherita name = "Margherita" @@ -2224,6 +2503,7 @@ name = "Margherita slice" desc = "A slice of the most cheezy pizza in galaxy" icon_state = "pizzamargheritaslice" + filling_color = "#BAA14C" bitesize = 2 /obj/item/weapon/reagent_containers/food/snacks/sliceable/pizza/meatpizza @@ -2242,6 +2522,7 @@ name = "Meatpizza slice" desc = "A slice of " //TODO: icon_state = "meatpizzaslice" + filling_color = "#BAA14C" bitesize = 2 /obj/item/weapon/reagent_containers/food/snacks/sliceable/pizza/mushroompizza @@ -2259,6 +2540,7 @@ name = "Mushroompizza slice" desc = "Maybe it is the last slice of pizza in your life." icon_state = "mushroompizzaslice" + filling_color = "#BAA14C" bitesize = 2 /obj/item/weapon/reagent_containers/food/snacks/sliceable/pizza/vegetablepizza @@ -2278,6 +2560,7 @@ name = "Vegetable pizza slice" desc = "A slice of the most green pizza of all pizzas not containing green ingredients " icon_state = "vegetablepizzaslice" + filling_color = "#BAA14C" bitesize = 2 /obj/item/pizzabox @@ -2461,6 +2744,8 @@ desc = "It's like an enormous, leathery carrot. With an eye." icon_state = "dionaroast" trash = /obj/item/trash/plate + filling_color = "#75754B" + New() ..() reagents.add_reagent("nutriment", 6) diff --git a/code/modules/reagents/reagent_containers/food/snacks/grown.dm b/code/modules/reagents/reagent_containers/food/snacks/grown.dm index 2c59a75ae8..b28ec8dbbf 100644 --- a/code/modules/reagents/reagent_containers/food/snacks/grown.dm +++ b/code/modules/reagents/reagent_containers/food/snacks/grown.dm @@ -113,6 +113,7 @@ desc = "Needs some butter!" icon_state = "corn" potency = 40 + filling_color = "#FFEE00" trash = /obj/item/weapon/corncob New() @@ -126,6 +127,7 @@ name = "cherries" desc = "Great for toppings!" icon_state = "cherry" + filling_color = "#FF0000" gender = PLURAL New() ..() @@ -140,6 +142,7 @@ desc = "Long-used as a symbol of rest, peace, and death." icon_state = "poppy" potency = 30 + filling_color = "#CC6464" New() ..() spawn(5) //So potency can be set in the proc that creates these crops @@ -153,6 +156,7 @@ desc = "\"I'll sweeten thy sad grave: thou shalt not lack the flower that's like thy face, pale primrose, nor the azured hare-bell, like thy veins; no, nor the leaf of eglantine, whom not to slander, out-sweeten’d not thy breath.\"" icon_state = "harebell" potency = 1 + filling_color = "#D4B2C9" New() ..() spawn(5) //So potency can be set in the proc that creates these crops @@ -165,6 +169,7 @@ desc = "Boil 'em! Mash 'em! Stick 'em in a stew!" icon_state = "potato" potency = 25 + filling_color = "#E6E8DA" New() ..() reagents.add_reagent("nutriment", 1+round((potency / 10), 1)) @@ -189,6 +194,7 @@ name = "bunch of grapes" desc = "Nutritious!" icon_state = "grapes" + filling_color = "#A332AD" New() ..() spawn(5) //So potency can be set in the proc that creates these crops @@ -202,6 +208,7 @@ desc = "Nutritious!" icon_state = "greengrapes" potency = 25 + filling_color = "#A6FFA3" New() ..() spawn(5) //So potency can be set in the proc that creates these crops @@ -215,6 +222,7 @@ desc = "Ewwwwwwwwww. Cabbage." icon_state = "cabbage" potency = 25 + filling_color = "#A2B5A1" New() ..() spawn(5) //So potency can be set in the proc that creates these crops @@ -226,6 +234,7 @@ name = "bunch of berries" desc = "Nutritious!" icon_state = "berrypile" + filling_color = "#C2C9FF" New() ..() spawn(5) //So potency can be set in the proc that creates these crops @@ -237,6 +246,7 @@ name = "clump of plastellium" desc = "Hmm, needs some processing" icon_state = "plastellium" + filling_color = "#C4C4C4" New() ..() spawn(5) //So potency can be set in the proc that creates these crops @@ -247,8 +257,9 @@ /obj/item/weapon/reagent_containers/food/snacks/grown/shand seed = "/obj/item/seeds/shandseed" name = "S'rendarr's Hand leaf" - desc = "A leaf sample from a lowland thicket shrub, often hid in by prey and predator to staunch their wounds and conceal their scent, allowing the plant to spread far on it's native Ahdomai. Smells strongly like wax." + desc = "A leaf sample from a lowland thicket shrub, often hid in by prey and predator to staunch their wounds and conceal their scent, allowing the plant to spread far on its native Ahdomai. Smells strongly like wax." icon_state = "shand" + filling_color = "#70C470" New() ..() spawn(5) //So potency can be set in the proc that creates these crops @@ -260,6 +271,7 @@ name = "sprig of Messa's Tear" desc = "A mountain climate herb with a soft, cold blue flower, known to contain an abundance of chemicals in it's flower useful to treating burns- Bad for the allergic to pollen." icon_state = "mtear" + filling_color = "#70C470" New() ..() spawn(5) //So potency can be set in the proc that creates these crops @@ -293,6 +305,7 @@ desc = "Nutritious!" var/light_on = 1 var/brightness_on = 2 //luminosity when on + filling_color = "#D3FF9E" icon_state = "glowberrypile" New() ..() @@ -320,6 +333,7 @@ desc = "Fattening... Mmmmm... chucklate." icon_state = "cocoapod" potency = 50 + filling_color = "#9C8E54" New() ..() spawn(5) //So potency can be set in the proc that creates these crops @@ -333,6 +347,7 @@ desc = "Sickly sweet." icon_state = "sugarcane" potency = 50 + filling_color = "#C0C9AD" New() ..() spawn(5) //So potency can be set in the proc that creates these crops @@ -345,6 +360,7 @@ icon_state = "poisonberrypile" gender = PLURAL potency = 15 + filling_color = "#B422C7" New() ..() spawn(5) //So potency can be set in the proc that creates these crops @@ -359,6 +375,7 @@ icon_state = "deathberrypile" gender = PLURAL potency = 50 + filling_color = "#4E0957" New() ..() spawn(5) //So potency can be set in the proc that creates these crops @@ -373,6 +390,7 @@ desc = "This is a plant containing various healing chemicals." icon_state = "ambrosiavulgaris" potency = 10 + filling_color = "#125709" New() ..() spawn(5) //So potency can be set in the proc that creates these crops @@ -389,6 +407,7 @@ desc = "Eating this makes you feel immortal!" icon_state = "ambrosiadeus" potency = 10 + filling_color = "#229E11" New() ..() spawn(5) //So potency can be set in the proc that creates these crops @@ -405,6 +424,7 @@ desc = "It's a little piece of Eden." icon_state = "apple" potency = 15 + filling_color = "#DFE88B" New() ..() spawn(5) //So potency can be set in the proc that creates these crops @@ -418,6 +438,7 @@ desc = "It's a little piece of Eden." icon_state = "apple" potency = 15 + filling_color = "#B3BD5E" New() ..() spawn(5) //So potency can be set in the proc that creates these crops @@ -431,6 +452,7 @@ desc = "Emblazoned upon the apple is the word 'Kallisti'." icon_state = "goldapple" potency = 15 + filling_color = "#F5CB42" New() ..() spawn(5) //So potency can be set in the proc that creates these crops @@ -450,6 +472,7 @@ desc = "It's full of watery goodness." icon_state = "watermelon" potency = 10 + filling_color = "#FA2863" slice_path = /obj/item/weapon/reagent_containers/food/snacks/watermelonslice slices_num = 5 New() @@ -464,6 +487,7 @@ desc = "It's large and scary." icon_state = "pumpkin" potency = 10 + filling_color = "#FAB728" New() ..() spawn(5) //So potency can be set in the proc that creates these crops @@ -485,6 +509,7 @@ desc = "It's so sour, your face will twist." icon_state = "lime" potency = 20 + filling_color = "#28FA59" New() ..() spawn(5) //So potency can be set in the proc that creates these crops @@ -497,6 +522,7 @@ desc = "When life gives you lemons, be grateful they aren't limes." icon_state = "lemon" potency = 20 + filling_color = "#FAF328" New() ..() spawn(5) //So potency can be set in the proc that creates these crops @@ -509,6 +535,7 @@ desc = "It's an tangy fruit." icon_state = "orange" potency = 20 + filling_color = "#FAAD28" New() ..() spawn(5) //So potency can be set in the proc that creates these crops @@ -521,6 +548,7 @@ desc = "You can't beat white-beet." icon_state = "whitebeet" potency = 15 + filling_color = "#FFFCCC" New() ..() spawn(5) //So potency can be set in the proc that creates these crops @@ -535,6 +563,7 @@ icon = 'icons/obj/items.dmi' icon_state = "banana" item_state = "banana" + filling_color = "#FCF695" trash = /obj/item/weapon/bananapeel New() @@ -550,6 +579,7 @@ name = "chili" desc = "It's spicy! Wait... IT'S BURNING ME!!" icon_state = "chilipepper" + filling_color = "#FF0000" New() ..() spawn(5) //So potency can be set in the proc that creates these crops @@ -567,6 +597,7 @@ name = "eggplant" desc = "Maybe there's a chicken inside?" icon_state = "eggplant" + filling_color = "#550F5C" New() ..() spawn(5) //So potency can be set in the proc that creates these crops @@ -578,6 +609,7 @@ name = "soybeans" desc = "It's pretty bland, but oh the possibilities..." gender = PLURAL + filling_color = "#E6E8B7" icon_state = "soybeans" New() ..() @@ -590,6 +622,7 @@ name = "tomato" desc = "I say to-mah-to, you say tom-mae-to." icon_state = "tomato" + filling_color = "#FF0000" potency = 10 New() ..() @@ -610,6 +643,7 @@ desc = "I say to-mah-to, you say tom-mae-to... OH GOD IT'S EATING MY LEGS!!" icon_state = "killertomato" potency = 10 + filling_color = "#FF0000" New() ..() spawn(5) //So potency can be set in the proc that creates these crops @@ -639,6 +673,7 @@ desc = "So bloody...so...very...bloody....AHHHH!!!!" icon_state = "bloodtomato" potency = 10 + filling_color = "#FF0000" New() ..() spawn(5) //So potency can be set in the proc that creates these crops @@ -662,6 +697,7 @@ desc = "I say blue-mah-to, you say blue-mae-to." icon_state = "bluetomato" potency = 10 + filling_color = "#586CFC" New() ..() spawn(5) //So potency can be set in the proc that creates these crops @@ -697,6 +733,7 @@ desc = "Sigh... wheat... a-grain?" gender = PLURAL icon_state = "wheat" + filling_color = "#F7E186" New() ..() spawn(5) //So potency can be set in the proc that creates these crops @@ -709,6 +746,7 @@ desc = "Rice to see you." gender = PLURAL icon_state = "rice" + filling_color = "#FFF8DB" New() ..() spawn(5) //So potency can be set in the proc that creates these crops @@ -720,6 +758,7 @@ name = "kudzu pod" desc = "Pueraria Virallis: An invasive species with vines that rapidly creep and wrap around whatever they contact." icon_state = "kudzupod" + filling_color = "#59691B" New() ..() spawn(5) //So potency can be set in the proc that creates these crops @@ -733,6 +772,7 @@ desc = "It's a mutant strain of chili" icon_state = "icepepper" potency = 20 + filling_color = "#66CEED" New() ..() spawn(5) //So potency can be set in the proc that creates these crops @@ -751,6 +791,7 @@ desc = "It's good for the eyes!" icon_state = "carrot" potency = 10 + filling_color = "#FFC400" New() ..() spawn(5) //So potency can be set in the proc that creates these crops @@ -764,6 +805,7 @@ desc = "Ganoderma lucidum: A special fungus believed to help relieve stress." icon_state = "reishi" potency = 10 + filling_color = "#FF4800" New() ..() spawn(5) //So potency can be set in the proc that creates these crops @@ -784,6 +826,7 @@ desc = "Amanita Muscaria: Learn poisonous mushrooms by heart. Only pick mushrooms you know." icon_state = "amanita" potency = 10 + filling_color = "#FF0000" New() ..() spawn(5) //So potency can be set in the proc that creates these crops @@ -804,6 +847,7 @@ desc = "Amanita Virosa: Deadly poisonous basidiomycete fungus filled with alpha amatoxins." icon_state = "angel" potency = 35 + filling_color = "#FFDEDE" New() ..() spawn(5) //So potency can be set in the proc that creates these crops @@ -824,6 +868,7 @@ desc = "Psilocybe Semilanceata: Liberate yourself!" icon_state = "libertycap" potency = 15 + filling_color = "#F714BE" New() ..() spawn(5) //So potency can be set in the proc that creates these crops @@ -841,6 +886,7 @@ name = "plump-helmet" desc = "Plumus Hellmus: Plump, soft and s-so inviting~" icon_state = "plumphelmet" + filling_color = "#F714BE" New() ..() spawn(5) //So potency can be set in the proc that creates these crops @@ -852,6 +898,7 @@ name = "walking mushroom" desc = "Plumus Locomotus: The beginning of the great walk." icon_state = "walkingmushroom" + filling_color = "#FFBFEF" New() ..() spawn(5) //So potency can be set in the proc that creates these crops @@ -880,6 +927,7 @@ name = "chanterelle cluster" desc = "Cantharellus Cibarius: These jolly yellow little shrooms sure look tasty!" icon_state = "chanterelle" + filling_color = "#FFE991" New() ..() spawn(5) //So potency can be set in the proc that creates these crops @@ -891,6 +939,7 @@ name = "glowshroom cluster" desc = "Mycena Bregprox: This species of mushroom glows in the dark. Or does it?" icon_state = "glowshroom" + filling_color = "#DAFF91" New() ..() spawn(5) //So potency can be set in the proc that creates these crops @@ -988,6 +1037,7 @@ icon_state = "bluespacetomato" potency = 20 origin_tech = "bluespace=3" + filling_color = "#91F8FF" New() ..() spawn(5) //So potency can be set in the proc that creates these crops diff --git a/code/modules/reagents/reagent_containers/food/snacks/meat.dm b/code/modules/reagents/reagent_containers/food/snacks/meat.dm index cc9af08600..5a4dacbf05 100644 --- a/code/modules/reagents/reagent_containers/food/snacks/meat.dm +++ b/code/modules/reagents/reagent_containers/food/snacks/meat.dm @@ -3,6 +3,7 @@ desc = "A slab of meat" icon_state = "meat" health = 180 + filling_color = "#FF1C1C" New() ..() reagents.add_reagent("nutriment", 3) From 7653678556aefe75a73c0b224a6e891a54cfcac0 Mon Sep 17 00:00:00 2001 From: Zuhayr Date: Sat, 11 Jan 2014 02:35:22 +1030 Subject: [PATCH 08/45] Added sandwich topping and filler mask. --- icons/obj/food.dmi | Bin 89903 -> 89957 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/icons/obj/food.dmi b/icons/obj/food.dmi index a0bfb172ea459ba8e413728a82dabc4d0a9df973..d2abe08214a8e58b12a01bd41420be695c01d140 100644 GIT binary patch delta 54001 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 ?Ph;xM}OCnK4!PPi{#Y#k;MeGlpG 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 C3xJl+;NG->UlKR52Yyt)?}bXDqINK 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 z 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 T0g_uZ00000NkvXXu0mjf-G(Nq delta 53962 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

Cr@NEHV$Uk*^lxEv@+Y;%8vlF!ra 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 From 68410f98f529d5737ae20a2a5e50d6bcf087cfeb Mon Sep 17 00:00:00 2001 From: Zuhayr Date: Sat, 11 Jan 2014 02:35:51 +1030 Subject: [PATCH 09/45] Ticked sandwich file that I accidentally included in prior commit. Sandwiches are now a thing that can be made from bread slices. --- baystation12.dme | 1 + 1 file changed, 1 insertion(+) diff --git a/baystation12.dme b/baystation12.dme index 3844b4a46d..227cf0d312 100644 --- a/baystation12.dme +++ b/baystation12.dme @@ -1144,6 +1144,7 @@ #include "code\modules\reagents\reagent_containers\food\cans.dm" #include "code\modules\reagents\reagent_containers\food\condiment.dm" #include "code\modules\reagents\reagent_containers\food\drinks.dm" +#include "code\modules\reagents\reagent_containers\food\sandwich.dm" #include "code\modules\reagents\reagent_containers\food\snacks.dm" #include "code\modules\reagents\reagent_containers\food\drinks\bottle.dm" #include "code\modules\reagents\reagent_containers\food\drinks\drinkingglass.dm" From 212eed7e1c6db48f29f4d8257592d21c52acab08 Mon Sep 17 00:00:00 2001 From: Zuhayr Date: Sat, 11 Jan 2014 02:47:12 +1030 Subject: [PATCH 10/45] Icon fixes, shards hidden in food will now lacerate random body parts because damage code is weird. Stop eating chocolate cake sandwich with your left food. --- .../reagent_containers/food/sandwich.dm | 22 +++++++++++++++++-- 1 file changed, 20 insertions(+), 2 deletions(-) diff --git a/code/modules/reagents/reagent_containers/food/sandwich.dm b/code/modules/reagents/reagent_containers/food/sandwich.dm index 12cc0c253f..48decfb696 100644 --- a/code/modules/reagents/reagent_containers/food/sandwich.dm +++ b/code/modules/reagents/reagent_containers/food/sandwich.dm @@ -66,7 +66,7 @@ var/image/T = new(src.icon, "sandwich_top") T.pixel_x = pick(list(-1,0,1)) - T.pixel_y = (ingredients.len * 2)+3 + T.pixel_y = (ingredients.len * 2)+1 overlays += T name = lowertext("[fullname] sandwich") @@ -80,4 +80,22 @@ /obj/item/weapon/reagent_containers/food/snacks/csandwich/examine() ..() - usr << "\blue You think you can see [pick(ingredients)] in there." \ No newline at end of file + var/obj/item/O = pick(contents) + usr << "\blue You think you can see [O.name] in there." + +/obj/item/weapon/reagent_containers/food/snacks/csandwich/attack(mob/M as mob, mob/user as mob, def_zone) + + var/obj/item/shard + for(var/obj/item/O in contents) + if(istype(O,/obj/item/weapon/shard)) + shard = O + break + + var/mob/living/H + if(istype(M,/mob/living)) + H = M + + if(H && shard && M == user) //This needs a check for feeding the food to other people, but that could be abusable. + H << "\red You lacerate your mouth on a [shard.name] in the sandwich!" + H.adjustBruteLoss(5) //TODO: Target head if human. + ..() \ No newline at end of file From 5cddea72f083996c8fb3699aa7eaef28a6d408ae Mon Sep 17 00:00:00 2001 From: Zuhayr Date: Sat, 11 Jan 2014 02:50:49 +1030 Subject: [PATCH 11/45] Colour fix for bread slices. --- code/modules/reagents/reagent_containers/food/snacks.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/reagents/reagent_containers/food/snacks.dm b/code/modules/reagents/reagent_containers/food/snacks.dm index a712b236c7..4476eb6d4f 100644 --- a/code/modules/reagents/reagent_containers/food/snacks.dm +++ b/code/modules/reagents/reagent_containers/food/snacks.dm @@ -2397,7 +2397,7 @@ desc = "A slice of home." icon_state = "breadslice" trash = /obj/item/trash/plate - filling_color = "#FFE396" + filling_color = "#D27332" bitesize = 2 From f911f84bbd363eadb8ceee47b498c255c3f16cd8 Mon Sep 17 00:00:00 2001 From: DJSnapshot Date: Fri, 10 Jan 2014 12:49:32 -0800 Subject: [PATCH 12/45] Replaces modwho and adminwho with staffwho. (Also, stealthfix.) --- code/game/verbs/who.dm | 61 ++++++++---------------- code/modules/customitems/item_defines.dm | 2 +- 2 files changed, 20 insertions(+), 43 deletions(-) diff --git a/code/game/verbs/who.dm b/code/game/verbs/who.dm index 1608a81a74..a8920ef3c7 100644 --- a/code/game/verbs/who.dm +++ b/code/game/verbs/who.dm @@ -42,11 +42,12 @@ msg += "Total Players: [length(Lines)]" src << msg -/client/verb/adminwho() +/client/verb/staffwho() set category = "Admin" - set name = "Adminwho" + set name = "Staffwho" var/msg = "" + var/modmsg = "" var/num_mods_online = 0 var/num_admins_online = 0 if(holder) @@ -70,7 +71,20 @@ num_admins_online++ else + modmsg += "\t[C] is a [C.holder.rank]" + + if(isobserver(C.mob)) + modmsg += " - Observing" + else if(istype(C.mob,/mob/new_player)) + modmsg += " - Lobby" + else + modmsg += " - Playing" + + if(C.is_afk()) + modmsg += " (AFK)" + modmsg += "\n" num_mods_online++ + else for(var/client/C in admins) if(R_ADMIN & C.holder.rights || !(R_MOD & C.holder.rights)) @@ -78,44 +92,7 @@ msg += "\t[C] is a [C.holder.rank]\n" num_admins_online++ else - num_mods_online++ + modmsg += "\t[C] is a [C.holder.rank]\n" - msg = "Current Admins ([num_admins_online]):\n" + msg - msg += "There are also [num_mods_online] moderators online. To view online moderators, type 'modwho'\n" - src << msg - -/client/verb/modwho() - set category = "Admin" - set name = "Modwho" - - var/msg = "" - var/num_admins_online = 0 - var/num_mods_online = 0 - if(holder) - for(var/client/C in admins) - if(R_ADMIN & C.holder.rights || !(R_MOD & C.holder.rights)) - num_admins_online++ - else - msg += "\t[C] is a [C.holder.rank]" - - if(isobserver(C.mob)) - msg += " - Observing" - else if(istype(C.mob,/mob/new_player)) - msg += " - Lobby" - else - msg += " - Playing" - - if(C.is_afk()) - msg += " (AFK)" - msg += "\n" - num_mods_online++ - else - for(var/client/C in admins) - if(R_ADMIN & C.holder.rights || !(R_MOD & C.holder.rights)) - num_admins_online++ - else - msg += "\t[C] is a [C.holder.rank]\n" - - msg = "Current Moderators ([num_mods_online]):\n" + msg - msg += "There are also [num_admins_online] admins online. To view online admins, type 'adminwho'\n" - src << msg + msg = "Current Admins ([num_admins_online]):\n" + msg + "\n Current Moderators([num_mods_online]):\n" + modmsg + src << msg \ No newline at end of file diff --git a/code/modules/customitems/item_defines.dm b/code/modules/customitems/item_defines.dm index f6fe3a4854..9bd93713b2 100644 --- a/code/modules/customitems/item_defines.dm +++ b/code/modules/customitems/item_defines.dm @@ -737,7 +737,7 @@ /obj/item/clothing/under/fluff/lillian_amsel_1 name = "Black Dress" desc = "A knee-length, dark gray and black dress made of a sfot, velvety material." - icon = "icons/obj/custom_items.dmi' + icon = 'icons/obj/custom_items.dmi' icon_state = "lillian_dress" item_state = "lillian_dress" item_color = "lillian_dress" From 46c6145cf7eeba0e37aeb29842f84981b613f49b Mon Sep 17 00:00:00 2001 From: DJSnapshot Date: Fri, 10 Jan 2014 13:39:40 -0800 Subject: [PATCH 13/45] Made it so asay is not the same color as adminlogs. --- code/modules/admin/verbs/adminsay.dm | 2 +- code/stylesheet.dm | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/code/modules/admin/verbs/adminsay.dm b/code/modules/admin/verbs/adminsay.dm index 3d9ab9dffe..086baa5877 100644 --- a/code/modules/admin/verbs/adminsay.dm +++ b/code/modules/admin/verbs/adminsay.dm @@ -10,7 +10,7 @@ log_admin("[key_name(src)] : [msg]") if(check_rights(R_ADMIN,0)) - msg = "ADMIN: [key_name(usr, 1)] (JMP): [msg]" + msg = "ADMIN: [key_name(usr, 1)] (JMP): [msg]" for(var/client/C in admins) if(R_ADMIN & C.holder.rights) C << msg diff --git a/code/stylesheet.dm b/code/stylesheet.dm index fda3fb64e2..946013dfcb 100644 --- a/code/stylesheet.dm +++ b/code/stylesheet.dm @@ -19,6 +19,7 @@ em {font-style: normal; font-weight: bold;} .adminobserver {color: #996600; font-weight: bold;} .admin {color: #386aff; font-weight: bold;} +.adminsay {color: #9611D4; font-weight: bold;} .name { font-weight: bold;} From bc6561b9e4e392deaa69facc5057217864d22388 Mon Sep 17 00:00:00 2001 From: Ccomp5950 Date: Fri, 10 Jan 2014 15:59:40 -0600 Subject: [PATCH 14/45] Runtime fix for people that jump back in their body before hitting respawn or just stay in their body for 30 minutes. Who does that? People that cause runtimes, that's who! (Jerks) --- code/modules/mob/mob.dm | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/code/modules/mob/mob.dm b/code/modules/mob/mob.dm index 5cd8c2b68e..750f620956 100644 --- a/code/modules/mob/mob.dm +++ b/code/modules/mob/mob.dm @@ -348,10 +348,11 @@ var/list/slot_equipment_priority = list( \ return else var/deathtime = world.time - src.timeofdeath - var/mob/dead/observer/G = src - if(G.has_enabled_antagHUD == 1 && config.antag_hud_restricted) - usr << "\blue Upon using the antagHUD you forfeighted the ability to join the round." - return + if(istype(src,/mob/dead/observer)) + var/mob/dead/observer/G = src + if(G.has_enabled_antagHUD == 1 && config.antag_hud_restricted) + usr << "\blue Upon using the antagHUD you forfeighted the ability to join the round." + return var/deathtimeminutes = round(deathtime / 600) var/pluralcheck = "minute" if(deathtimeminutes == 0) From 890491da614cb89486676ae815eb27c922bfdb2d Mon Sep 17 00:00:00 2001 From: SkyMarshal Date: Fri, 10 Jan 2014 16:38:08 -0700 Subject: [PATCH 15/45] Fixes ZAS silliness with SoftDelete --- code/ZAS/ZAS_Zones.dm | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/code/ZAS/ZAS_Zones.dm b/code/ZAS/ZAS_Zones.dm index 783d8d617f..eb7b05079c 100644 --- a/code/ZAS/ZAS_Zones.dm +++ b/code/ZAS/ZAS_Zones.dm @@ -114,12 +114,17 @@ var/list/CounterDoorDirections = list(SOUTH,EAST) //Which directions doors turfs //Removing zone connections and scheduling connection cleanup for(var/zone/Z in connected_zones) Z.connected_zones.Remove(src) - Z.closed_connection_zones.Remove(src) + if(!Z.connected_zones.len) + Z.connected_zones = null + + if(Z.closed_connection_zones) + Z.closed_connection_zones.Remove(src) + if(!Z.closed_connection_zones.len) + Z.closed_connection_zones = null connected_zones = null closed_connection_zones = null - return 1 @@ -358,7 +363,7 @@ var/list/CounterDoorDirections = list(SOUTH,EAST) //Which directions doors turfs for(var/zone/Z in closed_connection_zones) //If that zone has already processed, skip it. - if(Z.last_update > last_update) + if(Z.last_update > last_update || !Z.air) continue var/handle_temperature = abs(air.temperature - Z.air.temperature) > vsc.connection_temperature_delta From ccaef844bfef3151fa812626a4ec37408556e1c5 Mon Sep 17 00:00:00 2001 From: SkyMarshal Date: Fri, 10 Jan 2014 16:40:06 -0700 Subject: [PATCH 16/45] Fixes derpiness with ZAS heat transfer. --- code/ZAS/Variable Settings.dm | 5 +++-- code/ZAS/ZAS_Zones.dm | 14 +++++++++++++- 2 files changed, 16 insertions(+), 3 deletions(-) diff --git a/code/ZAS/Variable Settings.dm b/code/ZAS/Variable Settings.dm index 5dd951fe52..29463a8690 100644 --- a/code/ZAS/Variable Settings.dm +++ b/code/ZAS/Variable Settings.dm @@ -65,9 +65,9 @@ var/global/vs_control/vsc = new var/airflow_mob_slowdown_NAME = "Airflow Slowdown" var/airflow_mob_slowdown_DESC = "Time in tenths of a second to add as a delay to each movement by a mob if they are fighting the pull of the airflow." - var/connection_insulation = 1 + var/connection_insulation = 0 var/connection_insulation_NAME = "Connections - Insulation" - var/connection_insulation_DESC = "How insulative a connection is, in terms of heat transfer. 1 is perfectly insulative, and 0 is perfectly conductive." + var/connection_insulation_DESC = "Boolean, should zones conduct heat through doors?" var/connection_temperature_delta = 10 var/connection_temperature_delta_NAME = "Connections - Temperature Difference" @@ -288,6 +288,7 @@ var/global/vs_control/vsc = new airflow_speed_decay = 1 airflow_delay = 20 airflow_mob_slowdown = 3 + connection_insulation = 1 world << "\blue [key_name(user)] changed the global plasma/ZAS settings to \"[def]\"" diff --git a/code/ZAS/ZAS_Zones.dm b/code/ZAS/ZAS_Zones.dm index eb7b05079c..34c57d9cb0 100644 --- a/code/ZAS/ZAS_Zones.dm +++ b/code/ZAS/ZAS_Zones.dm @@ -654,6 +654,18 @@ proc/ShareSpace(datum/gas_mixture/A, list/unsimulated_tiles, dbg_output) proc/ShareHeat(datum/gas_mixture/A, datum/gas_mixture/B, connecting_tiles) + //This implements a simplistic version of the Stefan-Boltzmann law. + var/energy_delta = ((A.temperature - B.temperature) ** 4) * 5.6704e-8 * connecting_tiles + var/maximum_energy_delta = max(0, min(A.temperature * A.heat_capacity() * A.group_multiplier, B.temperature * B.heat_capacity() * B.group_multiplier)) + if(maximum_energy_delta > abs(energy_delta)) + if(energy_delta < 0) + maximum_energy_delta *= -1 + energy_delta = maximum_energy_delta + + A.temperature -= energy_delta / (A.heat_capacity() * A.group_multiplier) + B.temperature += energy_delta / (B.heat_capacity() * B.group_multiplier) + + /* This was bad an I feel bad. //Shares a specific ratio of gas between mixtures using simple weighted averages. var //WOOT WOOT TOUCH THIS AND YOU ARE A RETARD @@ -676,7 +688,7 @@ proc/ShareHeat(datum/gas_mixture/A, datum/gas_mixture/B, connecting_tiles) A.temperature = max(0, (A.temperature - temp_avg) * (1- (ratio / max(1,A.group_multiplier)) ) + temp_avg ) B.temperature = max(0, (B.temperature - temp_avg) * (1- (ratio / max(1,B.group_multiplier)) ) + temp_avg ) - + */ /////////////////// //Zone Rebuilding// From 9cae391e0e75bfdd249b58a6173f7351f443ed85 Mon Sep 17 00:00:00 2001 From: SkyMarshal Date: Fri, 10 Jan 2014 16:45:59 -0700 Subject: [PATCH 17/45] Adds developer-level access to ZAS settings. Fixes bug which would always let heat move through doors. --- code/ZAS/Debug.dm | 10 +++++++-- code/ZAS/Variable Settings.dm | 6 +++--- code/ZAS/ZAS_Zones.dm | 35 ++++++++++++++++--------------- code/modules/admin/admin_verbs.dm | 3 ++- 4 files changed, 31 insertions(+), 23 deletions(-) diff --git a/code/ZAS/Debug.dm b/code/ZAS/Debug.dm index 5ac704cf9f..39f5a7caab 100644 --- a/code/ZAS/Debug.dm +++ b/code/ZAS/Debug.dm @@ -134,6 +134,7 @@ zone/proc/DebugDisplay(client/client) client/proc/TestZASRebuild() + set category = "Debug" // var/turf/turf = get_turf(mob) var/zone/current_zone = mob.loc:zone if(!current_zone) @@ -155,7 +156,7 @@ client/proc/TestZASRebuild() for(var/direction in cardinal) var/turf/simulated/adjacent = get_step(current, direction) - if(!current.ZAirPass(adjacent)) + if(!current.ZCanPass(adjacent)) continue if(turfs.Find(adjacent)) current_adjacents += adjacent @@ -210,4 +211,9 @@ client/proc/TestZASRebuild() for(var/turf/current in turfs) current.overlays -= overlays - return final_arrangement \ No newline at end of file + return final_arrangement + +/client/proc/ZASSettings() + set category = "Debug" + + vsc.SetDefault(mob) \ No newline at end of file diff --git a/code/ZAS/Variable Settings.dm b/code/ZAS/Variable Settings.dm index 29463a8690..92841a02dc 100644 --- a/code/ZAS/Variable Settings.dm +++ b/code/ZAS/Variable Settings.dm @@ -65,9 +65,9 @@ var/global/vs_control/vsc = new var/airflow_mob_slowdown_NAME = "Airflow Slowdown" var/airflow_mob_slowdown_DESC = "Time in tenths of a second to add as a delay to each movement by a mob if they are fighting the pull of the airflow." - var/connection_insulation = 0 + var/connection_insulation = 1 var/connection_insulation_NAME = "Connections - Insulation" - var/connection_insulation_DESC = "Boolean, should zones conduct heat through doors?" + var/connection_insulation_DESC = "Boolean, should doors forbid heat transfer?" var/connection_temperature_delta = 10 var/connection_temperature_delta_NAME = "Connections - Temperature Difference" @@ -288,7 +288,7 @@ var/global/vs_control/vsc = new airflow_speed_decay = 1 airflow_delay = 20 airflow_mob_slowdown = 3 - connection_insulation = 1 + connection_insulation = 0 world << "\blue [key_name(user)] changed the global plasma/ZAS settings to \"[def]\"" diff --git a/code/ZAS/ZAS_Zones.dm b/code/ZAS/ZAS_Zones.dm index 34c57d9cb0..b942d79350 100644 --- a/code/ZAS/ZAS_Zones.dm +++ b/code/ZAS/ZAS_Zones.dm @@ -361,25 +361,26 @@ var/list/CounterDoorDirections = list(SOUTH,EAST) //Which directions doors turfs Z.interactions_with_neighbors++ interactions_with_neighbors++ - for(var/zone/Z in closed_connection_zones) - //If that zone has already processed, skip it. - if(Z.last_update > last_update || !Z.air) - continue - - var/handle_temperature = abs(air.temperature - Z.air.temperature) > vsc.connection_temperature_delta - - if(Z.status == ZONE_SLEEPING) - if (handle_temperature) - Z.SetStatus(ZONE_ACTIVE) - else + if(!vsc.connection_insulation) + for(var/zone/Z in closed_connection_zones) + //If that zone has already processed, skip it. + if(Z.last_update > last_update || !Z.air) continue - if(air && Z.air) - if( handle_temperature ) - ShareHeat(air, Z.air, closed_connection_zones[Z]) + var/handle_temperature = abs(air.temperature - Z.air.temperature) > vsc.connection_temperature_delta - Z.interactions_with_neighbors++ - interactions_with_neighbors++ + if(Z.status == ZONE_SLEEPING) + if (handle_temperature) + Z.SetStatus(ZONE_ACTIVE) + else + continue + + if(air && Z.air) + if( handle_temperature ) + ShareHeat(air, Z.air, closed_connection_zones[Z]) + + Z.interactions_with_neighbors++ + interactions_with_neighbors++ if(!interactions_with_neighbors && !interactions_with_unsim) SetStatus(ZONE_SLEEPING) @@ -655,7 +656,7 @@ proc/ShareSpace(datum/gas_mixture/A, list/unsimulated_tiles, dbg_output) proc/ShareHeat(datum/gas_mixture/A, datum/gas_mixture/B, connecting_tiles) //This implements a simplistic version of the Stefan-Boltzmann law. - var/energy_delta = ((A.temperature - B.temperature) ** 4) * 5.6704e-8 * connecting_tiles + var/energy_delta = ((A.temperature - B.temperature) ** 4) * 5.6704e-8 * connecting_tiles * 2.5 var/maximum_energy_delta = max(0, min(A.temperature * A.heat_capacity() * A.group_multiplier, B.temperature * B.heat_capacity() * B.group_multiplier)) if(maximum_energy_delta > abs(energy_delta)) if(energy_delta < 0) diff --git a/code/modules/admin/admin_verbs.dm b/code/modules/admin/admin_verbs.dm index 1196f14ebd..e7a3433541 100644 --- a/code/modules/admin/admin_verbs.dm +++ b/code/modules/admin/admin_verbs.dm @@ -72,7 +72,7 @@ var/list/admin_verbs_admin = list( /client/proc/response_team, // Response Teams admin verb /client/proc/toggle_antagHUD_use, /client/proc/toggle_antagHUD_restrictions, - /client/proc/allow_character_respawn /* Allows a ghost to respawn */ + /client/proc/allow_character_respawn /* Allows a ghost to respawn */ ) var/list/admin_verbs_ban = list( /client/proc/unban_panel, @@ -128,6 +128,7 @@ var/list/admin_verbs_debug = list( /client/proc/cmd_admin_list_open_jobs, /client/proc/Debug2, /client/proc/kill_air, + /client/proc/ZASSettings, /client/proc/cmd_debug_make_powernets, /client/proc/kill_airgroup, /client/proc/debug_controller, From 511988253644afa6a917459c954f9df3063070f4 Mon Sep 17 00:00:00 2001 From: LightningIron Date: Fri, 10 Jan 2014 20:36:20 -0600 Subject: [PATCH 18/45] Fixes #4286. --- code/modules/research/designs.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/research/designs.dm b/code/modules/research/designs.dm index e73434a2f3..81a3633a5a 100644 --- a/code/modules/research/designs.dm +++ b/code/modules/research/designs.dm @@ -1451,7 +1451,7 @@ datum/design/chemsprayer build_type = PROTOLATHE materials = list("$metal" = 5000, "$glass" = 1000) reliability_base = 100 - build_path = "/obj/item/weapon/chemsprayer" + build_path = "/obj/item/weapon/reagent_containers/chemsprayer" datum/design/rapidsyringe name = "Rapid Syringe Gun" From cbd3f280af6e39c7b36cd10159ffb32ea5ede733 Mon Sep 17 00:00:00 2001 From: LightningIron Date: Fri, 10 Jan 2014 20:43:27 -0600 Subject: [PATCH 19/45] Forgot to include the /spray/ part of the chemsprayer path. --- code/modules/research/designs.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/research/designs.dm b/code/modules/research/designs.dm index 81a3633a5a..db72f590c7 100644 --- a/code/modules/research/designs.dm +++ b/code/modules/research/designs.dm @@ -1451,7 +1451,7 @@ datum/design/chemsprayer build_type = PROTOLATHE materials = list("$metal" = 5000, "$glass" = 1000) reliability_base = 100 - build_path = "/obj/item/weapon/reagent_containers/chemsprayer" + build_path = "/obj/item/weapon/reagent_containers/spray/chemsprayer" datum/design/rapidsyringe name = "Rapid Syringe Gun" From b3bfc9684ddc1d6cb8f84e7c1975c2374fb632c5 Mon Sep 17 00:00:00 2001 From: LightningIron Date: Fri, 10 Jan 2014 20:58:20 -0600 Subject: [PATCH 20/45] Made APC modules cost 50m/50g from autolathe, on par with other engineering modules. --- code/defines/obj/weapon.dm | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/code/defines/obj/weapon.dm b/code/defines/obj/weapon.dm index b84388f583..8842350f04 100644 --- a/code/defines/obj/weapon.dm +++ b/code/defines/obj/weapon.dm @@ -393,7 +393,9 @@ /obj/item/weapon/module/power_control name = "power control module" icon_state = "power_mod" - desc = "Heavy-duty switching circuits for power control." + desc = "Heavy-duty switching circuits for power control." + m_amt = 50 + g_amt = 50 /obj/item/weapon/module/id_auth name = "\improper ID authentication module" From 909928f3f9925222c7dd1a09d3a6bcfb25d9f71c Mon Sep 17 00:00:00 2001 From: Loganbacca Date: Sat, 11 Jan 2014 18:14:51 +1300 Subject: [PATCH 21/45] Plasma glass stacking fix --- code/game/objects/items/stacks/sheets/glass.dm | 2 +- code/modules/mining/machine_stacking.dm | 16 ++++++++-------- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/code/game/objects/items/stacks/sheets/glass.dm b/code/game/objects/items/stacks/sheets/glass.dm index 5d5c9415d4..0e79b89189 100644 --- a/code/game/objects/items/stacks/sheets/glass.dm +++ b/code/game/objects/items/stacks/sheets/glass.dm @@ -305,7 +305,7 @@ /obj/item/stack/sheet/glass/plasmaglass name = "plasma glass" desc = "A very strong and very resistant sheet of a plasma-glass alloy." - singular_name = "glass sheet" + singular_name = "plasma glass sheet" icon_state = "sheet-plasmaglass" g_amt = 7500 origin_tech = "materials=3;plasma=2" diff --git a/code/modules/mining/machine_stacking.dm b/code/modules/mining/machine_stacking.dm index ccdcc56e64..86f844f623 100644 --- a/code/modules/mining/machine_stacking.dm +++ b/code/modules/mining/machine_stacking.dm @@ -273,14 +273,6 @@ ore_uranium+= O:amount del(O) continue - if (istype(O,/obj/item/stack/sheet/glass)) - ore_glass+= O:amount - del(O) - continue - if (istype(O,/obj/item/stack/sheet/rglass)) - ore_rglass+= O:amount - del(O) - continue if (istype(O,/obj/item/stack/sheet/glass/plasmaglass)) ore_plasmaglass+= O:amount del(O) @@ -289,6 +281,14 @@ ore_plasmarglass+= O:amount del(O) continue + if (istype(O,/obj/item/stack/sheet/glass)) + ore_glass+= O:amount + del(O) + continue + if (istype(O,/obj/item/stack/sheet/rglass)) + ore_rglass+= O:amount + del(O) + continue if (istype(O,/obj/item/stack/sheet/plasteel)) ore_plasteel+= O:amount del(O) From 350c1500cfefc59087dc084264e1d6791e275be4 Mon Sep 17 00:00:00 2001 From: SkyMarshal Date: Sat, 11 Jan 2014 11:32:44 -0700 Subject: [PATCH 22/45] Patches some logic holes in ZAS, specifically rebuilding and deletion. Fixes #4273 --- code/ZAS/ZAS_Zones.dm | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) diff --git a/code/ZAS/ZAS_Zones.dm b/code/ZAS/ZAS_Zones.dm index eb7b05079c..e2b45ac559 100644 --- a/code/ZAS/ZAS_Zones.dm +++ b/code/ZAS/ZAS_Zones.dm @@ -28,6 +28,11 @@ var/list/CounterDoorDirections = list(SOUTH,EAST) //Which directions doors turfs var/progress = "nothing" +/datum/gas_mixture/zone + Del() + CRASH("Something tried to delete a zone's air!") + . = ..() + //CREATION AND DELETION /zone/New(turf/start) . = ..() @@ -47,7 +52,8 @@ var/list/CounterDoorDirections = list(SOUTH,EAST) //Which directions doors turfs //Generate the gas_mixture for use in txhis zone by using the average of the gases //defined at startup. - air = new + //Changed to try and find the source of the error. + air = new /datum/gas_mixture/zone() air.group_multiplier = contents.len for(var/turf/simulated/T in contents) if(!T.air) @@ -102,6 +108,10 @@ var/list/CounterDoorDirections = list(SOUTH,EAST) //Which directions doors turfs C.A.zone = null if(C.B.zone == src) C.B.zone = null + if(C.zone_A == src) + C.zone_A = null + if(C.zone_B == src) + C.zone_B = null direct_connections = null //Ensuring the zone list doesn't get clogged with null values. @@ -182,6 +192,10 @@ var/list/CounterDoorDirections = list(SOUTH,EAST) //Which directions doors turfs if(!unsim_air_needs_update && air_unsim) //if air_unsim doesn't exist, we need to create it even if we don't need an update. return + //Tempfix. + if(!air) + return + unsim_air_needs_update = 0 if(!air_unsim) @@ -768,6 +782,9 @@ zone/proc/Rebuild() final_arrangement[current_identifier] = list(current) else + //Sanity check. + if(!islist(final_arrangement[current_identifier])) + final_arrangement[current_identifier] = list() final_arrangement[current_identifier] += current //lazy but fast From ab8763378b5b3a1937e9daf57806f5aa1e69bcc0 Mon Sep 17 00:00:00 2001 From: RKF45 Date: Sat, 11 Jan 2014 22:19:02 +0100 Subject: [PATCH 23/45] Paint mixing --- code/game/objects/items/weapons/paint.dm | 20 +++++++++++-------- code/modules/reagents/Chemistry-Colours.dm | 4 ++-- code/modules/reagents/Chemistry-Readme.dm | 4 ++-- code/modules/reagents/Chemistry-Reagents.dm | 2 +- .../reagents/reagent_containers/glass.dm | 6 +++--- 5 files changed, 20 insertions(+), 16 deletions(-) diff --git a/code/game/objects/items/weapons/paint.dm b/code/game/objects/items/weapons/paint.dm index 5a20ac12d0..d1bc39a5e5 100644 --- a/code/game/objects/items/weapons/paint.dm +++ b/code/game/objects/items/weapons/paint.dm @@ -36,6 +36,10 @@ var/global/list/cached_icons = list() ..() reagents.add_reagent("paint_[paint_type]", volume) + on_reagent_change() //Until we have a generic "paint", this will give new colours to all paints in the can + for(var/datum/reagent/paint/P in reagents.reagent_list) + P.color = mix_color_from_reagents(reagent_list) + red icon_state = "paint_red" paint_type = "red" @@ -171,8 +175,8 @@ var/global/list/cached_icons = list() datum/reagent/paint name = "Paint" id = "paint_" - description = "Floor paint is used to color floor tiles." - reagent_state = 2 + description = name + " is used to color floor tiles." + reagent_state = LIQUID color = "#808080" reaction_turf(var/turf/T, var/volume) @@ -192,26 +196,26 @@ datum/reagent/paint red name = "Red Paint" id = "paint_red" - color = "#FF0000" + color = "#FE191A" green name = "Green Paint" - color = "#00FF00" + color = "#18A31A" id = "paint_green" blue name = "Blue Paint" - color = "#0000FF" + color = "#247CFF" id = "paint_blue" yellow name = "Yellow Paint" - color = "#FFFF00" + color = "#FDFE7D" id = "paint_yellow" violet name = "Violet Paint" - color = "#FF00FF" + color = "#CC0099" id = "paint_violet" black @@ -221,7 +225,7 @@ datum/reagent/paint white name = "White Paint" - color = "#FFFFFF" + color = "#F0F8FF" id = "paint_white" datum/reagent/paint_remover diff --git a/code/modules/reagents/Chemistry-Colours.dm b/code/modules/reagents/Chemistry-Colours.dm index e1b43763e8..e81561d733 100644 --- a/code/modules/reagents/Chemistry-Colours.dm +++ b/code/modules/reagents/Chemistry-Colours.dm @@ -1,4 +1,4 @@ -/proc/GetColors(hex) +/proc/GetColors(hex) //Actually converts hex to rgb hex = uppertext(hex) var/hi1 = text2ascii(hex, 2) var/lo1 = text2ascii(hex, 3) @@ -15,7 +15,7 @@ var/list/rgbcolor = list(0,0,0) var/finalcolor = 0 - for(var/datum/reagent/re in reagent_list) // natural color mixing bullshit/algorithm + for(var/datum/reagent/re in reagent_list) //TODO: weigh final colour by amount of reagents; make this algorithm use hex if(!finalcolor) rgbcolor = GetColors(re.color) finalcolor = re.color diff --git a/code/modules/reagents/Chemistry-Readme.dm b/code/modules/reagents/Chemistry-Readme.dm index 77921d0ab0..ac8792c1e7 100644 --- a/code/modules/reagents/Chemistry-Readme.dm +++ b/code/modules/reagents/Chemistry-Readme.dm @@ -134,7 +134,7 @@ About Reagents: object melting in here ... or something. i dunno. reaction_turf(var/turf/T) - This is called by the holder's reation proc. + This is called by the holder's reaction proc. This version is called when the reagents reacts with a turf. You'll want to put stuff like extra slippery floors for lube or something in here. @@ -144,7 +144,7 @@ About Reagents: This is the place where you put damage for toxins , drowsyness for sleep toxins etc etc. You'll want to call the parents proc by using ..() . - If you dont, the chemical will stay in the mob forever - + If you don't, the chemical will stay in the mob forever - unless you write your own piece of code to slowly remove it. (Should be pretty easy, 1 line of code) diff --git a/code/modules/reagents/Chemistry-Reagents.dm b/code/modules/reagents/Chemistry-Reagents.dm index c9666d98f0..7d5de91613 100644 --- a/code/modules/reagents/Chemistry-Reagents.dm +++ b/code/modules/reagents/Chemistry-Reagents.dm @@ -23,7 +23,7 @@ datum var/list/data = null var/volume = 0 var/nutriment_factor = 0 - var/custom_metabolism = REAGENTS_METABOLISM //Default 0.2 + var/custom_metabolism = REAGENTS_METABOLISM var/overdose = 0 var/overdose_dam = 1 //var/list/viruses = list() diff --git a/code/modules/reagents/reagent_containers/glass.dm b/code/modules/reagents/reagent_containers/glass.dm index 21384ffd59..fb99198d8c 100644 --- a/code/modules/reagents/reagent_containers/glass.dm +++ b/code/modules/reagents/reagent_containers/glass.dm @@ -47,11 +47,11 @@ set src in view() ..() if (!(usr in view(2)) && usr!=src.loc) return - usr << "\blue It contains:" + usr << "\blue It contains " if(reagents && reagents.reagent_list.len) usr << "\blue [src.reagents.total_volume] units of liquid." else - usr << "\blue Nothing." + usr << "\blue nothing." if (!is_open_container()) usr << "\blue Airtight lid seals it completely." @@ -216,7 +216,7 @@ /obj/item/weapon/reagent_containers/glass/beaker/bluespace name = "bluespace beaker" - desc = "A bluespace beaker, powered by experimental bluespace technology and Element Cuban combined with the Compound Pete. Can hold up to 300 units." + desc = "A bluespace beaker, powered by experimental bluespace technology. Can hold up to 300 units." icon_state = "beakerbluespace" g_amt = 5000 volume = 300 From 98834ea3cb67bd4e75b602c5255029dcbafb4a85 Mon Sep 17 00:00:00 2001 From: RKF45 Date: Sat, 11 Jan 2014 22:20:50 +0100 Subject: [PATCH 24/45] The costume crate has more than one suit --- code/datums/supplypacks.dm | 41 ++++++++++---------- code/modules/clothing/suits/miscellaneous.dm | 6 +-- 2 files changed, 24 insertions(+), 23 deletions(-) diff --git a/code/datums/supplypacks.dm b/code/datums/supplypacks.dm index e3cc43642d..b6aa96ae38 100755 --- a/code/datums/supplypacks.dm +++ b/code/datums/supplypacks.dm @@ -204,26 +204,6 @@ var/list/all_supply_groups = list("Operations","Security","Hospitality","Enginee containername = "Replacement lights" group = "Engineering" -/datum/supply_packs/costume - name = "Standard Costume crate" - contains = list(/obj/item/weapon/storage/backpack/clown, - /obj/item/clothing/shoes/clown_shoes, - /obj/item/clothing/mask/gas/clown_hat, - /obj/item/clothing/under/rank/clown, - /obj/item/weapon/bikehorn, - /obj/item/clothing/under/mime, - /obj/item/clothing/shoes/black, - /obj/item/clothing/gloves/white, - /obj/item/clothing/mask/gas/mime, - /obj/item/clothing/head/beret, - /obj/item/clothing/suit/suspenders, - /obj/item/weapon/reagent_containers/food/drinks/bottle/bottleofnothing) - cost = 10 - containertype = /obj/structure/closet/crate/secure - containername = "Standard Costumes" - access = access_theatre - group = "Operations" - /datum/supply_packs/wizard name = "Wizard costume" contains = list(/obj/item/weapon/staff, @@ -902,6 +882,27 @@ var/list/all_supply_groups = list("Operations","Security","Hospitality","Enginee containername = "Pizza crate" group = "Hospitality" +/datum/supply_packs/randomised/costume + num_contained = 2 + contains = list(/obj/item/clothing/suit/pirate, + /obj/item/clothing/suit/johnny_coat, + /obj/item/clothing/suit/judgerobe, + /obj/item/clothing/suit/wcoat, + /obj/item/clothing/suit/hastur, + /obj/item/clothing/suit/imperium_monk, + /obj/item/clothing/suit/ianshirt, + /obj/item/clothing/suit/leathercoat, + /obj/item/clothing/suit/browncoat, + /obj/item/clothing/suit/suspenders, + /obj/item/clothing/suit/storage/labcoat/mad, + /obj/item/clothing/suit/bio_suit/plaguedoctorsuit) + name = "Standard Costume crate" + cost = 10 + containertype = /obj/structure/closet/crate/secure + containername = "Standard Costumes" + access = access_theatre + group = "Operations" + /datum/supply_packs/formal_wear contains = list(/obj/item/clothing/head/bowler, /obj/item/clothing/head/that, diff --git a/code/modules/clothing/suits/miscellaneous.dm b/code/modules/clothing/suits/miscellaneous.dm index b170ea2de6..6056a110e4 100644 --- a/code/modules/clothing/suits/miscellaneous.dm +++ b/code/modules/clothing/suits/miscellaneous.dm @@ -10,7 +10,7 @@ */ /obj/item/clothing/suit/bluetag name = "blue laser tag armour" - desc = "Blue Pride, Station Wide" + desc = "Blue Pride, Station Wide." icon_state = "bluetag" item_state = "bluetag" blood_overlay_type = "armor" @@ -20,7 +20,7 @@ /obj/item/clothing/suit/redtag name = "red laser tag armour" - desc = "Pew pew pew" + desc = "Reputed to go faster." icon_state = "redtag" item_state = "redtag" blood_overlay_type = "armor" @@ -76,7 +76,7 @@ /obj/item/clothing/suit/justice name = "justice suit" - desc = "this pretty much looks ridiculous" + desc = "This pretty much looks ridiculous." icon_state = "justice" item_state = "justice" flags = FPRINT | TABLEPASS From 8b384b066889110832fef8e5b49608ade8def1bd Mon Sep 17 00:00:00 2001 From: RKF45 Date: Sat, 11 Jan 2014 22:22:24 +0100 Subject: [PATCH 25/45] Various --- code/game/jobs/job/captain.dm | 3 ++- code/game/jobs/job/civilian.dm | 3 +-- code/modules/events/brand_intelligence.dm | 9 ++++----- 3 files changed, 7 insertions(+), 8 deletions(-) diff --git a/code/game/jobs/job/captain.dm b/code/game/jobs/job/captain.dm index ec7028d99c..acc7c3e853 100644 --- a/code/game/jobs/job/captain.dm +++ b/code/game/jobs/job/captain.dm @@ -21,7 +21,8 @@ if(4) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel(H), slot_back) H.equip_to_slot_or_del(new /obj/item/weapon/storage/box/survival(H.back), slot_in_backpack) var/obj/item/clothing/under/U = new /obj/item/clothing/under/rank/captain(H) - U.hastie = new /obj/item/clothing/tie/medal/gold/captain(U) + if(H.age>49) + U.hastie = new /obj/item/clothing/tie/medal/gold/captain(U) H.equip_to_slot_or_del(U, slot_w_uniform) H.equip_to_slot_or_del(new /obj/item/device/pda/captain(H), slot_belt) H.equip_to_slot_or_del(new /obj/item/clothing/shoes/brown(H), slot_shoes) diff --git a/code/game/jobs/job/civilian.dm b/code/game/jobs/job/civilian.dm index 7e3d8c215a..528d55c957 100644 --- a/code/game/jobs/job/civilian.dm +++ b/code/game/jobs/job/civilian.dm @@ -19,7 +19,6 @@ if(3) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel_norm(H), slot_back) if(4) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel(H), slot_back) H.equip_to_slot_or_del(new /obj/item/clothing/shoes/black(H), slot_shoes) - H.equip_to_slot_or_del(new /obj/item/clothing/suit/armor/vest(H), slot_wear_suit) H.equip_to_slot_or_del(new /obj/item/clothing/under/rank/bartender(H), slot_w_uniform) H.equip_to_slot_or_del(new /obj/item/device/pda/bar(H), slot_belt) @@ -362,4 +361,4 @@ var/datum/organ/external/affected = H.organs_by_name["head"] affected.implants += L L.part = affected - return 1 + return 1 diff --git a/code/modules/events/brand_intelligence.dm b/code/modules/events/brand_intelligence.dm index 31fe141ad1..09adb39440 100644 --- a/code/modules/events/brand_intelligence.dm +++ b/code/modules/events/brand_intelligence.dm @@ -34,7 +34,7 @@ return if(IsMultiple(activeFor, 5)) - if(prob(25)) + if(prob(15)) var/obj/machinery/vending/infectedMachine = pick(vendingMachines) vendingMachines.Remove(infectedMachine) infectedVendingMachines.Add(infectedMachine) @@ -43,7 +43,7 @@ if(IsMultiple(activeFor, 12)) originMachine.speak(pick("Try our aggressive new marketing strategies!", \ - "You should buy products to feed your lifestyle obession!", \ + "You should buy products to feed your lifestyle obsession!", \ "Consume!", \ "Your money can buy happiness!", \ "Engage direct marketing!", \ @@ -52,6 +52,5 @@ /datum/event/brand_intelligence/end() for(var/obj/machinery/vending/infectedMachine in infectedVendingMachines) - if(prob(90)) - infectedMachine.shut_up = 1 - infectedMachine.shoot_inventory = 0 + infectedMachine.shut_up = 1 + infectedMachine.shoot_inventory = 0 From 140fb2788992c1f16a1d954720a3e029f5374a5e Mon Sep 17 00:00:00 2001 From: RKF45 Date: Sat, 11 Jan 2014 22:36:35 +0100 Subject: [PATCH 26/45] Fixes --- code/game/objects/items/weapons/paint.dm | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/code/game/objects/items/weapons/paint.dm b/code/game/objects/items/weapons/paint.dm index d1bc39a5e5..4b1c3d1bab 100644 --- a/code/game/objects/items/weapons/paint.dm +++ b/code/game/objects/items/weapons/paint.dm @@ -38,7 +38,7 @@ var/global/list/cached_icons = list() on_reagent_change() //Until we have a generic "paint", this will give new colours to all paints in the can for(var/datum/reagent/paint/P in reagents.reagent_list) - P.color = mix_color_from_reagents(reagent_list) + P.color = mix_color_from_reagents(reagents.reagent_list) red icon_state = "paint_red" @@ -175,8 +175,7 @@ var/global/list/cached_icons = list() datum/reagent/paint name = "Paint" id = "paint_" - description = name + " is used to color floor tiles." - reagent_state = LIQUID + reagent_state = 2 color = "#808080" reaction_turf(var/turf/T, var/volume) @@ -228,6 +227,8 @@ datum/reagent/paint color = "#F0F8FF" id = "paint_white" + description = name + " is used to color floor tiles." + datum/reagent/paint_remover name = "Paint Remover" id = "paint_remover" From 8758ece58277040ed79bec51a84ee919b1d46aa9 Mon Sep 17 00:00:00 2001 From: RKF45 Date: Sat, 11 Jan 2014 22:42:42 +0100 Subject: [PATCH 27/45] Alright already. --- code/game/objects/items/weapons/paint.dm | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/code/game/objects/items/weapons/paint.dm b/code/game/objects/items/weapons/paint.dm index 4b1c3d1bab..69c9a5981b 100644 --- a/code/game/objects/items/weapons/paint.dm +++ b/code/game/objects/items/weapons/paint.dm @@ -177,6 +177,7 @@ datum/reagent/paint id = "paint_" reagent_state = 2 color = "#808080" + desc = "This paint will only adhere to floor tiles." reaction_turf(var/turf/T, var/volume) if(!istype(T) || istype(T, /turf/space)) @@ -227,8 +228,6 @@ datum/reagent/paint color = "#F0F8FF" id = "paint_white" - description = name + " is used to color floor tiles." - datum/reagent/paint_remover name = "Paint Remover" id = "paint_remover" From fabfceaa5ab5602a18ff7be65ec2b1cfc965c5f7 Mon Sep 17 00:00:00 2001 From: RKF45 Date: Sat, 11 Jan 2014 22:50:22 +0100 Subject: [PATCH 28/45] Fixed forever! --- code/game/objects/items/weapons/paint.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/game/objects/items/weapons/paint.dm b/code/game/objects/items/weapons/paint.dm index 69c9a5981b..cb4ed96878 100644 --- a/code/game/objects/items/weapons/paint.dm +++ b/code/game/objects/items/weapons/paint.dm @@ -177,7 +177,7 @@ datum/reagent/paint id = "paint_" reagent_state = 2 color = "#808080" - desc = "This paint will only adhere to floor tiles." + description = "This paint will only adhere to floor tiles." reaction_turf(var/turf/T, var/volume) if(!istype(T) || istype(T, /turf/space)) From 9e0391af049cbf1f1836821bd79cbb4ec15a31fd Mon Sep 17 00:00:00 2001 From: RKF45 Date: Sun, 12 Jan 2014 01:42:41 +0100 Subject: [PATCH 29/45] Adds Baystation 12-specific posters --- .../game/objects/effects/decals/contraband.dm | 173 ++++++++++++++---- icons/obj/contraband.dmi | Bin 18340 -> 63294 bytes 2 files changed, 135 insertions(+), 38 deletions(-) diff --git a/code/game/objects/effects/decals/contraband.dm b/code/game/objects/effects/decals/contraband.dm index 077780119b..5b01c896f1 100644 --- a/code/game/objects/effects/decals/contraband.dm +++ b/code/game/objects/effects/decals/contraband.dm @@ -1,7 +1,8 @@ //########################## CONTRABAND ;3333333333333333333 -Agouri ################################################### -#define NUM_OF_POSTER_DESIGNS 10 +#define USE_BS_POSTERS 1 //0 for tg, 1 for bs +#define NUM_OF_POSTER_DESIGNS 28 //10 for tg, 28 for bs /obj/item/weapon/contraband name = "contraband item" @@ -81,43 +82,139 @@ obj/structure/sign/poster/New(var/serial) if(serial_number == loc) serial_number = rand(1, NUM_OF_POSTER_DESIGNS) //This is for the mappers that want individual posters without having to use rolled posters. - icon_state = "poster[serial_number]" + if(!USE_BS_POSTERS) + icon_state = "poster[serial_number]" - switch(serial_number) - if(1) - name += " - Free Tonto" - desc += " A framed shred of a much larger flag, colors bled together and faded from age." - if(2) - name += " - Atmosia Declaration of Independence" - desc += " A relic of a failed rebellion" - if(3) - name += " - Fun Police" - desc += " A poster condemning the station's security forces." - if(4) - name += " - Lusty Xeno" - desc += " A heretical poster depicting the titular star of an equally heretical book." - if(5) - name += " - Syndicate Recruitment Poster" - desc += " See the galaxy! Shatter corrupt megacorporations! Join today!" - if(6) - name += " - Clown" - desc += " Honk." - if(7) - name += " - Smoke" - desc += " A poster depicting a carton of cigarettes." - if(8) - name += " - Grey Tide" - desc += " A rebellious poster symbolizing assistant solidarity." - if(9) - name += " - Missing Gloves" - desc += " This poster is about the uproar that followed Nanotrasen's financial cuts towards insulated-glove purchases." - if(10) - name += " - Hacking Guide" - desc += " This poster details the internal workings of the common Nanotrasen airlock." - else - name = "This shit just bugged. Report it to Agouri - polyxenitopalidou@gmail.com" - desc = "Why are you still here?" - ..() + switch(serial_number) + if(1) + name += " - Free Tonto" + desc += " A framed shred of a much larger flag, colors bled together and faded from age." + if(2) + name += " - Atmosia Declaration of Independence" + desc += " A relic of a failed rebellion" + if(3) + name += " - Fun Police" + desc += " A poster condemning the station's security forces." + if(4) + name += " - Lusty Xeno" + desc += " A heretical poster depicting the titular star of an equally heretical book." + if(5) + name += " - Syndicate Recruitment Poster" + desc += " See the galaxy! Shatter corrupt megacorporations! Join today!" + if(6) + name += " - Clown" + desc += " Honk." + if(7) + name += " - Smoke" + desc += " A poster depicting a carton of cigarettes." + if(8) + name += " - Grey Tide" + desc += " A rebellious poster symbolizing assistant solidarity." + if(9) + name += " - Missing Gloves" + desc += " This poster is about the uproar that followed Nanotrasen's financial cuts towards insulated-glove purchases." + if(10) + name += " - Hacking Guide" + desc += " This poster details the internal workings of the common Nanotrasen airlock." + else + name += " - Error" + desc += " Bad." + ..() + else + icon_state = "bsposter[serial_number]" + + switch (serial_number) + if(1) + name += " - Unlucky Space Explorer" + desc += " This particular one depicts a skeletal form within a space suit." + if(2) + name += " - Positronic Logic Conflicts" + desc += " This particular one depicts the cold, unmoving stare of a particular advanced AI." + if(3) + name += " - Paranoia" + desc += " This particular one warns of the dangers of trusting your co-workers too much." + if(4) + name += " - Keep Calm" + desc += " This particular one is of a famous New Earth design, although a bit modified." + if(5) + name += " - Martian Warlord" + desc += " This particular one depicts the cartoony mug of a certain Martial Warmonger." + if(6) + name += " - Technological Singularity" + desc += " This particular one is of the blood-curdling symbol of a long-since defeated enemy of humanity." + if(7) + name += " - Wasteland" + desc += " This particular one is of a couple of ragged gunmen, one male and one female, on top of a mound of rubble. The number \"12\" is visible on their blue jumpsuits." + if(8) + name += " - Pinup Girl Cindy" + desc += " This particular one is of Nanotrasen's PR girl, Cindy, in a particularly feminine pose." + if(9) + name += " - Pinup Girl Amy" + desc += " This particular one is of Amy, the nymphomaniac Urban Legend of Nanotrasen Space Stations. How this photograph came to be is not known." + if(10) + name += " - Don't Panic" + desc += " This particular one depicts some sort of star in a grimace. The \"Don't Panic\" is written in big, friendly letters." + if(11) + name += " - Underwater Laboratory" + desc += " This particular one is of the fabled last crew of Nanotrasen's previous project before going big on Asteroid mining, Sealab." + if(12) + name += " - Rogue AI" + desc += " This particular one depicts the shell of the infamous AI that catastropically comandeered one of Nanotrasen's earliest space stations. Back then, the corporation was just known as TriOptimum." + if(13) + name += " - User of the Arcane Arts" + desc += " This particular one depicts a wizard, casting a spell. You can't really make out if it's an actial photograph or a computer-generated image." + if(14) + name += " - Levitating Skull" + desc += " This particular one is the portrait of a certain flying, friendly and somewhat sex-crazed enchanted skull. Its adventures along with its fabled companion are now fading through history..." + if(15) + name += " - Augmented Legend" + desc += " This particular one is of an obviously augmented individual, gazing towards the sky. The cyber-city in the backround is rather punkish." + if(16) + name += " - Dangerous Static" + desc += " This particular one depicts nothing remarkable other than a rather mesmerising pattern of monitor static. There's a tag on the sides of the poster, urging you to \"tear this poster in half to receive your free sample\"." + if(17) + name += " - Pinup Girl Val" + desc += " Luscious Val McNeil, the vertically challenged Legal Extraordinaire, winner of Miss Space two years running and favoured pinup girl of Lawyers Weekly." + if(18) + name += " - Derpman, Enforcer of the State" + desc += " Here to protect and serve... your donuts! A generously proportioned man, he teaches you the value of hiding your snacks." + if(19) + name += " - Respect a Soghun" + desc += " This poster depicts a well dressed looking Soghun receiving a prestigious award. It appears to espouse greater co-operation and harmony between the two races." + if(20) + name += " - Skrell Twilight" + desc += " This poster depicts a mysteriously inscrutable, alien scene. Numerous Skrell can be seen conversing amidst great, crystalline towers rising above crashing waves" + if(21) + name += " - Join the Fuzz!" + desc += " It's a nice recruitment poster of a white haired Chinese woman that says; \"Big Guns, Hot Women, Good Times. Security. We get it done.\"" + if(22) + name += " - Looking for a career with excitement?" + desc += " A recruitment poster starring a dark haired woman with glasses and a purple shirt that has \"Got Brains? Got Talent? Not afraid of electric flying monsters that want to suck the soul out of you? Then Xenobiology could use someone like you!\" written on the bottom." + if(23) + name += " - Safety first: because electricity doesn't wait!" + desc += " A safety poster starring a clueless looking redhead with frazzled hair. \"Every year, hundreds of NT employees expose themselves to electric shock. Play it safe. Avoid suspicious doors after electrical storms, and always wear protection when doing electric maintenance.\"" + if(24) + name += " - Responsible medbay habits, No #259" + desc += " A poster with a nervous looking geneticist on it states; \"Friends Don't Tell Friends They're Clones. It can cause severe and irreparable emotional trauma. Always do the right thing and never tell them that they were dead.\"" + if(25) + name += " - Irresponsible medbay habits, No #2" + desc += " This is a safety poster starring a perverted looking naked doctor. \"Sexual harassment is never okay. REPORT any acts of sexual deviance or harassment that disrupt a healthy working environment.\"" + if(26) + name += " - The Men We Knew" + desc += " This movie poster depicts a group of soldiers fighting a large mech, the movie seems to be a patriotic war movie." + if(27) + name += " - Plastic Sheep Can't Scream" + desc += " This is a movie poster for an upcoming horror movie, it features an AI in the front of it." + if(28) + name += " - The Stars Know Love" + desc += " This is a movie poster. A bleeding woman is shown drawing a heart in her blood on the window of space ship, it seems to be a romantic Drama." + if(29) + name += " - Winter Is Coming" + desc += " On the poster is a frighteningly large wolf, the message on the poster seems ominous." + else + name += " - Error" + desc += " Bad." + ..() obj/structure/sign/poster/attackby(obj/item/weapon/W as obj, mob/user as mob) if(istype(W, /obj/item/weapon/wirecutters)) @@ -156,7 +253,7 @@ obj/structure/sign/poster/attackby(obj/item/weapon/W as obj, mob/user as mob) src.loc = P -//seperated to reduce code duplication. Moved here for ease of reference and to unclutter r_wall/attackby() +//separated to reduce code duplication. Moved here for ease of reference and to unclutter r_wall/attackby() /turf/simulated/wall/proc/place_poster(var/obj/item/weapon/contraband/poster/P, var/mob/user) if(!P.resulting_poster) return diff --git a/icons/obj/contraband.dmi b/icons/obj/contraband.dmi index 75f63eb4a991be79712980d275597254f999745c..dea098484e57b7747b426a1b6ecbe7d692c5873d 100644 GIT binary patch literal 63294 zcmbrlWmH^U5G~j^!9BQJBcX8!?h;%A1PdO5Htz23?iwVxyAzz??(XjLI^UbOW@f#$ z-jA6dz51Tpeedl)r)r<7UAsb+6r@m*2$28)0IH0%xC#IOMGkoZ5aA(buvy9)AOm7I zHBAR`6MG{&b6W><8*2c-B_ngX`e!c)Cva2CE$mB8Qk;8y!%$8k4-WbeBR)b|bys90 z^|z-xl871}$w7&5xK1W*vTxJRm-+mvV20bq+wNO#wmSEf6RV!w%X?T zP#u+o^4nwGv7sbLQ2bcq8|OFzTi-X&r>BvqiF>!v(s0K{3tUT&HsQN(oDF5(Ll{D@ z7IFdj|%kDDG z7K~ySvPCBh^Q$skE0tsvrX{%MJrA)6_ax$*8Lota=?4n&iw#%8z)S=6u=81x9YST@EDTH3U3ZNle6^o2GB~d{C^OMdY^9PEU zHM$|=rNh>Wbu#yH3KMAd51`AMERQ{Vh4DrA&en|A)pNJ`=L(v=(NurQ{J%E{HJ#4F z`F}lZS)bhz+zcV78Nw(7Fz|y!7!pNgLouK!V6*m>84^J#FufoEVlM_@;@VdCBalWG zs8WJcaf}s2QENJewbap2d3yf&&RGVk<*+E-%`tC{F#vdXG2J^p(BxJIM*_3N0jUrt$Uv>L%tOEVq2qjdYAO$MWov;avv4c9 zCvF#u*JZ^0PmQ%C<$Ot)i>WUx7SBs>Xt{9GwWyF!#n5at zolh;GrcUfmkmSFQJ^SO4N18I$0Xn>YKu!H{VilBzrgxyNlgvM4`JZpxbpUgYG%ur8 z)|@Xa?P^*{a9z8}`ftAG@jp4z?xRVKgx6p8xMu@CVE_2>qpOBV&t)_4$oX3Y2jN(2 zKNqw^H{8cx?RQJzVfQd<>*&NhRSc5fLLeWGPZ^>7x%c!VU)ZaxuTLydExyV{_Y4{N z)GAlc>?Pg4&R72T$J_a2J^)U{=lprLb4=n_ZEgJA+}Cj-EAO|1E3=;c=4r zi)oF_{V4+OPU;*Ch8&JZYI$8$C~

dvy&BkjvfAn(0tcQTZVklxtS|VYhw#)PAE< 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 literal 18340 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 IM6N<$f`<|&=l}o! From 1f50cae6c22ec2bb20bdcba7e553df1cf7864dda Mon Sep 17 00:00:00 2001 From: "Mark Aherne (Faerdan)" Date: Sun, 12 Jan 2014 01:28:03 +0000 Subject: [PATCH 30/45] SMES NanoUI * Converted SMES to NanoUI. --- code/modules/client/client procs.dm | 1 + code/modules/power/smes.dm | 175 ++++++++++------------------ nano/templates/smes.tmpl | 79 +++++++++++++ 3 files changed, 144 insertions(+), 111 deletions(-) create mode 100644 nano/templates/smes.tmpl diff --git a/code/modules/client/client procs.dm b/code/modules/client/client procs.dm index eabee2ba46..cd63e415a4 100644 --- a/code/modules/client/client procs.dm +++ b/code/modules/client/client procs.dm @@ -255,6 +255,7 @@ 'nano/templates/dna_modifier.tmpl', 'nano/templates/telescience_console.tmpl', 'nano/templates/pda.tmpl', + 'nano/templates/smes.tmpl', 'nano/templates/uplink.tmpl', 'nano/images/uiBackground.png', 'nano/images/uiIcons16.png', diff --git a/code/modules/power/smes.dm b/code/modules/power/smes.dm index efe77a439e..9ceeb4e21e 100644 --- a/code/modules/power/smes.dm +++ b/code/modules/power/smes.dm @@ -21,7 +21,7 @@ var/chargecount = 0 var/chargelevel = 50000 var/online = 1 - var/n_tag = null + var/name_tag = null var/obj/machinery/power/terminal/terminal = null //Holders for powerout event. var/last_output = 0 @@ -122,7 +122,6 @@ if(last_disp != chargedisplay() || last_chrg != charging || last_onln != online) updateicon() - updateDialog() return // called after all power processes are finished @@ -164,48 +163,45 @@ /obj/machinery/power/smes/attack_ai(mob/user) add_fingerprint(user) - if(stat & BROKEN) return - interact(user) + ui_interact(user) /obj/machinery/power/smes/attack_hand(mob/user) add_fingerprint(user) - if(stat & BROKEN) return - interact(user) + ui_interact(user) + + +/obj/machinery/power/smes/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null) - -/obj/machinery/power/smes/interact(mob/user) - if(get_dist(src, user) > 1 && !istype(user, /mob/living/silicon)) - user.unset_machine() - user << browse(null, "window=smes") + if(stat & BROKEN) return - user.set_machine(src) - - var/t = "SMES Power Storage Unit [n_tag? "([n_tag])" : null]


"
-
-	t += "Stored capacity : [round(100.0*charge/capacity, 0.1)]%

" - - t += "Input: [charging ? "Charging" : "Not Charging"] [chargemode ? "Auto Off" : "Auto Off "]
" - - - t += "Input level: M - - - [add_lspace(chargelevel,5)] + + + M
" - - t += "

" - - t += "Output: [online ? "Online Offline" : "Online Offline "]
" - - t += "Output level: M - - - [add_lspace(output,5)] + + + M
" - - t += "Output load: [round(loaddemand)] W
" - - t += "

Close" - - t += "" - user << browse(t, "window=smes;size=460x300") - onclose(user, "smes") - return + // this is the data which will be sent to the ui + var/data[0] + data["nameTag"] = name_tag + data["storedCapacity"] = round(100.0*charge/capacity, 0.1) + data["charging"] = charging + data["chargeMode"] = chargemode + data["chargeLevel"] = chargelevel + data["chargeMax"] = SMESMAXCHARGELEVEL + data["outputOnline"] = online + data["outputLevel"] = output + data["outputMax"] = SMESMAXOUTPUT + data["outputLoad"] = round(loaddemand) + // update the ui if it exists, returns null if no ui is passed/found + ui = nanomanager.try_update_ui(user, src, ui_key, ui, data) + if (!ui) + // the ui does not exist, so we'll create a new() one + // for a list of parameters and their descriptions see the code docs in \code\modules\nano\nanoui.dm + ui = new(user, src, ui_key, "smes.tmpl", "SMES Power Storage Unit", 540, 380) + // when the ui is first opened this is the data it will use + ui.set_initial_data(data) + // open the new ui window + ui.open() + // auto update every Master Controller tick + ui.set_auto_update(1) + /obj/machinery/power/smes/Topic(href, href_list) ..() @@ -219,85 +215,42 @@ //world << "[href] ; [href_list[href]]" - if (( usr.machine==src && ((get_dist(src, usr) <= 1) && istype(src.loc, /turf))) || (istype(usr, /mob/living/silicon/ai))) + if (!istype(src.loc, /turf) || istype(usr, /mob/living/silicon/ai)) + return 0 // Do not update ui + if( href_list["cmode"] ) + chargemode = !chargemode + if(!chargemode) + charging = 0 + updateicon() - if( href_list["close"] ) - usr << browse(null, "window=smes") - usr.unset_machine() - return + else if( href_list["online"] ) + online = !online + updateicon() + else if( href_list["input"] ) + switch( href_list["input"] ) + if("min") + chargelevel = 0 + if("max") + chargelevel = SMESMAXCHARGELEVEL //30000 + if("set") + chargelevel = input(usr, "Enter new input level (0-[SMESMAXCHARGELEVEL])", "SMES Input Power Control", chargelevel) as num + chargelevel = max(0, min(SMESMAXCHARGELEVEL, chargelevel)) // clamp to range - else if( href_list["cmode"] ) - chargemode = !chargemode - if(!chargemode) - charging = 0 - updateicon() - - else if( href_list["online"] ) - online = !online - updateicon() - else if( href_list["input"] ) - - var/i = text2num(href_list["input"]) - - var/d = 0 - switch(i) - if(-4) - chargelevel = 0 - if(4) - chargelevel = SMESMAXCHARGELEVEL //30000 - - if(1) - d = 100 - if(-1) - d = -100 - if(2) - d = 1000 - if(-2) - d = -1000 - if(3) - d = 10000 - if(-3) - d = -10000 - - chargelevel += d - chargelevel = max(0, min(SMESMAXCHARGELEVEL, chargelevel)) // clamp to range - - else if( href_list["output"] ) - - var/i = text2num(href_list["output"]) - - var/d = 0 - switch(i) - if(-4) - output = 0 - if(4) - output = SMESMAXOUTPUT //30000 - - if(1) - d = 100 - if(-1) - d = -100 - if(2) - d = 1000 - if(-2) - d = -1000 - if(3) - d = 10000 - if(-3) - d = -10000 - - output += d - output = max(0, min(SMESMAXOUTPUT, output)) // clamp to range - - investigate_log("input/output; [chargelevel>output?"":""][chargelevel]/[output] | Output-mode: [online?"on":"off"] | Input-mode: [chargemode?"auto":"off"] by [usr.key]","singulo") - src.updateUsrDialog() - - else - usr << browse(null, "window=smes") - usr.unset_machine() - return + else if( href_list["output"] ) + switch( href_list["output"] ) + if("min") + output = 0 + if("max") + output = SMESMAXOUTPUT //30000 + if("set") + output = input(usr, "Enter new output level (0-[SMESMAXOUTPUT])", "SMES Output Power Control", output) as num + output = max(0, min(SMESMAXOUTPUT, output)) // clamp to range + investigate_log("input/output; [chargelevel>output?"":""][chargelevel]/[output] | Output-mode: [online?"on":"off"] | Input-mode: [chargemode?"auto":"off"] by [usr.key]","singulo") + + return 1 + /obj/machinery/power/smes/proc/ion_act() if(src.z == 1) diff --git a/nano/templates/smes.tmpl b/nano/templates/smes.tmpl new file mode 100644 index 0000000000..c4431cd805 --- /dev/null +++ b/nano/templates/smes.tmpl @@ -0,0 +1,79 @@ +
+
+ Stored Capacity: +
+
+ {{:~displayBar(storedCapacity, 0, 100, charging ? 'good' : 'average')}} +
+ {{:~round(storedCapacity)}}% +
+
+
+ +

Input Management

+
+
+ Charge Mode: +
+
+ {{:~link('Auto', 'refresh', {'cmode' : 1}, chargeMode ? 'selected' : null)}}{{:~link('Off', 'close', {'cmode' : 1}, chargeMode ? null : 'selected')}} +   + {{if charging}} + [Charging] + {{else}} + [Not Charging] + {{/if}} +
+
+ +
+
+ Input Level: +
+
+ {{:~displayBar(chargeLevel, 0, chargeMax)}} +
+ {{:~link('MIN', null, {'input' : 'min'}, (chargeLevel > 0) ? null : 'disabled')}} + {{:~link('MAX', null, {'input' : 'max'}, (chargeLevel < chargeMax) ? null : 'disabled')}} + {{:~link('SET', null, {'input' : 'set'}, null)}} +
 {{:chargeLevel}} W 
+
+
+
+ +

Output Management

+
+
+ Output Status: +
+
+ {{:~link('Online', 'power', {'online' : 1}, outputOnline ? 'selected' : null)}}{{:~link('Offline', 'close', {'online' : 1}, outputOnline ? null : 'selected')}} +
+
+ +
+
+ Output Level: +
+
+ {{:~displayBar(outputLevel, 0, outputMax)}} +
+ {{:~link('MIN', null, {'output' : 'min'}, (outputLevel > 0) ? null : 'disabled')}} + {{:~link('MAX', null, {'output' : 'max'}, (outputLevel < outputMax) ? null : 'disabled')}} + {{:~link('SET', null, {'output' : 'set'}, null)}} +
 {{:outputLevel}} W 
+
+
+
+ +
+
+ Output Load: +
+
+ {{:~displayBar(outputLoad, 0, outputMax, (outputLoad < outputLevel) ? 'good' : 'average')}} +
+ {{:outputLoad}} W +
+
+
\ No newline at end of file From 167671d5839b930e6c49b02ea1a0fd3535cb46b4 Mon Sep 17 00:00:00 2001 From: Ccomp5950 Date: Sat, 11 Jan 2014 20:09:11 -0600 Subject: [PATCH 31/45] NanoUI PDA optimizations no more sortAtom every tick on every PDA. Should be noticably better on large population servers. --- code/game/objects/items/devices/PDA/PDA.dm | 28 +++++++++++----------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/code/game/objects/items/devices/PDA/PDA.dm b/code/game/objects/items/devices/PDA/PDA.dm index 2696dd9658..09300be121 100755 --- a/code/game/objects/items/devices/PDA/PDA.dm +++ b/code/game/objects/items/devices/PDA/PDA.dm @@ -379,21 +379,21 @@ var/global/list/obj/item/device/pda/PDAs = list() data["stationTime"] = worldtime2text() data["newMessage"] = newmessage + if(mode==2) + var/convopdas[0] + var/pdas[0] + var/count = 0 + for (var/obj/item/device/pda/P in sortAtom(PDAs)) + if (!P.owner||P.toff||P == src||P.hidden) continue + if(conversations.Find("\ref[P]")) + convopdas.Add(list(list("Name" = "[P]", "Reference" = "\ref[P]", "Detonate" = "[P.detonate]", "inconvo" = "1"))) + else + pdas.Add(list(list("Name" = "[P]", "Reference" = "\ref[P]", "Detonate" = "[P.detonate]", "inconvo" = "0"))) + count++ - var/convopdas[0] - var/pdas[0] - var/count = 0 - for (var/obj/item/device/pda/P in sortAtom(PDAs)) - if (!P.owner||P.toff||P == src||P.hidden) continue - if(conversations.Find("\ref[P]")) - convopdas.Add(list(list("Name" = "[P]", "Reference" = "\ref[P]", "Detonate" = "[P.detonate]", "inconvo" = "1"))) - else - pdas.Add(list(list("Name" = "[P]", "Reference" = "\ref[P]", "Detonate" = "[P.detonate]", "inconvo" = "0"))) - count++ - - data["convopdas"] = convopdas - data["pdas"] = pdas - data["pda_count"] = count + data["convopdas"] = convopdas + data["pdas"] = pdas + data["pda_count"] = count if(mode==21) data["messagescount"] = tnote.len From 56e4b11ec508c1e9ba08413aae35423d990afcc0 Mon Sep 17 00:00:00 2001 From: Rob Nelson Date: Sat, 11 Jan 2014 18:09:39 -0800 Subject: [PATCH 32/45] Dynamic loading of posters * Add dynamic loading of poster designs (untick group in DM to remove, no more toggles) * Fixes wirecutters duping posters * Fixes dropped posters not being placeable. --- baystation12.dme | 2 + baystation12.int | 3 + code/__HELPERS/global_lists.dm | 3 + .../game/objects/effects/decals/contraband.dm | 204 ++---------------- .../objects/effects/decals/posters/bs12.dm | 145 +++++++++++++ .../effects/decals/posters/tgposters.dm | 50 +++++ 6 files changed, 226 insertions(+), 181 deletions(-) create mode 100644 code/game/objects/effects/decals/posters/bs12.dm create mode 100644 code/game/objects/effects/decals/posters/tgposters.dm diff --git a/baystation12.dme b/baystation12.dme index 3844b4a46d..978e8ef317 100644 --- a/baystation12.dme +++ b/baystation12.dme @@ -446,6 +446,8 @@ #include "code\game\objects\effects\decals\Cleanable\misc.dm" #include "code\game\objects\effects\decals\Cleanable\robots.dm" #include "code\game\objects\effects\decals\Cleanable\tracks.dm" +#include "code\game\objects\effects\decals\posters\bs12.dm" +#include "code\game\objects\effects\decals\posters\tgposters.dm" #include "code\game\objects\effects\spawners\bombspawner.dm" #include "code\game\objects\effects\spawners\gibspawner.dm" #include "code\game\objects\effects\spawners\vaultspawner.dm" diff --git a/baystation12.int b/baystation12.int index b82874fded..78739f29d7 100644 --- a/baystation12.int +++ b/baystation12.int @@ -1,6 +1,9 @@ // BEGIN_INTERNALS /* MAP_ICON_TYPE: 0 +WINDOW: code\game\objects\effects\decals\remains.dm +DIR: code code\game code\game\objects code\game\objects\effects code\game\objects\effects\decals code\game\objects\effects\decals\posters +FILE: code\game\objects\effects\decals\remains.dm AUTO_FILE_DIR: OFF */ // END_INTERNALS diff --git a/code/__HELPERS/global_lists.dm b/code/__HELPERS/global_lists.dm index ff853eca2f..32c7e934f6 100644 --- a/code/__HELPERS/global_lists.dm +++ b/code/__HELPERS/global_lists.dm @@ -23,6 +23,9 @@ var/global/list/all_species[0] var/global/list/all_languages[0] var/global/list/whitelisted_species = list("Human") +// Posters +var/global/list/datum/poster/poster_designs = typesof(/datum/poster) - /datum/poster + //Preferences stuff //Hairstyles var/global/list/hair_styles_list = list() //stores /datum/sprite_accessory/hair indexed by name diff --git a/code/game/objects/effects/decals/contraband.dm b/code/game/objects/effects/decals/contraband.dm index 5b01c896f1..3fd3f5cc66 100644 --- a/code/game/objects/effects/decals/contraband.dm +++ b/code/game/objects/effects/decals/contraband.dm @@ -1,9 +1,6 @@ //########################## CONTRABAND ;3333333333333333333 -Agouri ################################################### -#define USE_BS_POSTERS 1 //0 for tg, 1 for bs -#define NUM_OF_POSTER_DESIGNS 28 //10 for tg, 28 for bs - /obj/item/weapon/contraband name = "contraband item" desc = "You probably shouldn't be holding this." @@ -16,54 +13,16 @@ desc = "The poster comes with its own automatic adhesive mechanism, for easy pinning to any vertical surface." icon_state = "rolled_poster" var/serial_number = 0 - var/obj/structure/sign/poster/resulting_poster = null //The poster that will be created is initialised and stored through contraband/poster's constructor /obj/item/weapon/contraband/poster/New(turf/loc, var/given_serial = 0) if(given_serial == 0) - serial_number = rand(1, NUM_OF_POSTER_DESIGNS) - resulting_poster = new(serial_number) + serial_number = rand(1, poster_designs.len) else serial_number = given_serial - //We don't give it a resulting_poster because if we called it with a given_serial it means that we're rerolling an already used poster. name += " - No. [serial_number]" ..(loc) - -/*/obj/item/weapon/contraband/poster/attack(mob/M as mob, mob/user as mob) - src.add_fingerprint(user) - if(resulting_poster) - resulting_poster.add_fingerprint(user) - ..()*/ - -/*/obj/item/weapon/contraband/poster/attack(atom/A, mob/user as mob) //This shit is handled through the wall's attackby() - if(istype(A, /turf/simulated/wall)) - if(resulting_poster == null) - return - else - var/turf/simulated/wall/W = A - var/check = 0 - var/stuff_on_wall = 0 - for(var/obj/O in W.contents) //Let's see if it already has a poster on it or too much stuff - if(istype(O,/obj/structure/sign/poster)) - check = 1 - break - stuff_on_wall++ - if(stuff_on_wall == 3) - check = 1 - break - - if(check) - user << "The wall is far too cluttered to place a poster!" - return - - resulting_poster.loc = W //Looks like it's uncluttered enough. Place the poster - W.contents += resulting_poster - - del(src)*/ - - - //############################## THE ACTUAL DECALS ########################### obj/structure/sign/poster @@ -80,141 +39,14 @@ obj/structure/sign/poster/New(var/serial) serial_number = serial if(serial_number == loc) - serial_number = rand(1, NUM_OF_POSTER_DESIGNS) //This is for the mappers that want individual posters without having to use rolled posters. + serial_number = rand(1, poster_designs.len) //This is for the mappers that want individual posters without having to use rolled posters. - if(!USE_BS_POSTERS) - icon_state = "poster[serial_number]" - - switch(serial_number) - if(1) - name += " - Free Tonto" - desc += " A framed shred of a much larger flag, colors bled together and faded from age." - if(2) - name += " - Atmosia Declaration of Independence" - desc += " A relic of a failed rebellion" - if(3) - name += " - Fun Police" - desc += " A poster condemning the station's security forces." - if(4) - name += " - Lusty Xeno" - desc += " A heretical poster depicting the titular star of an equally heretical book." - if(5) - name += " - Syndicate Recruitment Poster" - desc += " See the galaxy! Shatter corrupt megacorporations! Join today!" - if(6) - name += " - Clown" - desc += " Honk." - if(7) - name += " - Smoke" - desc += " A poster depicting a carton of cigarettes." - if(8) - name += " - Grey Tide" - desc += " A rebellious poster symbolizing assistant solidarity." - if(9) - name += " - Missing Gloves" - desc += " This poster is about the uproar that followed Nanotrasen's financial cuts towards insulated-glove purchases." - if(10) - name += " - Hacking Guide" - desc += " This poster details the internal workings of the common Nanotrasen airlock." - else - name += " - Error" - desc += " Bad." - ..() - else - icon_state = "bsposter[serial_number]" - - switch (serial_number) - if(1) - name += " - Unlucky Space Explorer" - desc += " This particular one depicts a skeletal form within a space suit." - if(2) - name += " - Positronic Logic Conflicts" - desc += " This particular one depicts the cold, unmoving stare of a particular advanced AI." - if(3) - name += " - Paranoia" - desc += " This particular one warns of the dangers of trusting your co-workers too much." - if(4) - name += " - Keep Calm" - desc += " This particular one is of a famous New Earth design, although a bit modified." - if(5) - name += " - Martian Warlord" - desc += " This particular one depicts the cartoony mug of a certain Martial Warmonger." - if(6) - name += " - Technological Singularity" - desc += " This particular one is of the blood-curdling symbol of a long-since defeated enemy of humanity." - if(7) - name += " - Wasteland" - desc += " This particular one is of a couple of ragged gunmen, one male and one female, on top of a mound of rubble. The number \"12\" is visible on their blue jumpsuits." - if(8) - name += " - Pinup Girl Cindy" - desc += " This particular one is of Nanotrasen's PR girl, Cindy, in a particularly feminine pose." - if(9) - name += " - Pinup Girl Amy" - desc += " This particular one is of Amy, the nymphomaniac Urban Legend of Nanotrasen Space Stations. How this photograph came to be is not known." - if(10) - name += " - Don't Panic" - desc += " This particular one depicts some sort of star in a grimace. The \"Don't Panic\" is written in big, friendly letters." - if(11) - name += " - Underwater Laboratory" - desc += " This particular one is of the fabled last crew of Nanotrasen's previous project before going big on Asteroid mining, Sealab." - if(12) - name += " - Rogue AI" - desc += " This particular one depicts the shell of the infamous AI that catastropically comandeered one of Nanotrasen's earliest space stations. Back then, the corporation was just known as TriOptimum." - if(13) - name += " - User of the Arcane Arts" - desc += " This particular one depicts a wizard, casting a spell. You can't really make out if it's an actial photograph or a computer-generated image." - if(14) - name += " - Levitating Skull" - desc += " This particular one is the portrait of a certain flying, friendly and somewhat sex-crazed enchanted skull. Its adventures along with its fabled companion are now fading through history..." - if(15) - name += " - Augmented Legend" - desc += " This particular one is of an obviously augmented individual, gazing towards the sky. The cyber-city in the backround is rather punkish." - if(16) - name += " - Dangerous Static" - desc += " This particular one depicts nothing remarkable other than a rather mesmerising pattern of monitor static. There's a tag on the sides of the poster, urging you to \"tear this poster in half to receive your free sample\"." - if(17) - name += " - Pinup Girl Val" - desc += " Luscious Val McNeil, the vertically challenged Legal Extraordinaire, winner of Miss Space two years running and favoured pinup girl of Lawyers Weekly." - if(18) - name += " - Derpman, Enforcer of the State" - desc += " Here to protect and serve... your donuts! A generously proportioned man, he teaches you the value of hiding your snacks." - if(19) - name += " - Respect a Soghun" - desc += " This poster depicts a well dressed looking Soghun receiving a prestigious award. It appears to espouse greater co-operation and harmony between the two races." - if(20) - name += " - Skrell Twilight" - desc += " This poster depicts a mysteriously inscrutable, alien scene. Numerous Skrell can be seen conversing amidst great, crystalline towers rising above crashing waves" - if(21) - name += " - Join the Fuzz!" - desc += " It's a nice recruitment poster of a white haired Chinese woman that says; \"Big Guns, Hot Women, Good Times. Security. We get it done.\"" - if(22) - name += " - Looking for a career with excitement?" - desc += " A recruitment poster starring a dark haired woman with glasses and a purple shirt that has \"Got Brains? Got Talent? Not afraid of electric flying monsters that want to suck the soul out of you? Then Xenobiology could use someone like you!\" written on the bottom." - if(23) - name += " - Safety first: because electricity doesn't wait!" - desc += " A safety poster starring a clueless looking redhead with frazzled hair. \"Every year, hundreds of NT employees expose themselves to electric shock. Play it safe. Avoid suspicious doors after electrical storms, and always wear protection when doing electric maintenance.\"" - if(24) - name += " - Responsible medbay habits, No #259" - desc += " A poster with a nervous looking geneticist on it states; \"Friends Don't Tell Friends They're Clones. It can cause severe and irreparable emotional trauma. Always do the right thing and never tell them that they were dead.\"" - if(25) - name += " - Irresponsible medbay habits, No #2" - desc += " This is a safety poster starring a perverted looking naked doctor. \"Sexual harassment is never okay. REPORT any acts of sexual deviance or harassment that disrupt a healthy working environment.\"" - if(26) - name += " - The Men We Knew" - desc += " This movie poster depicts a group of soldiers fighting a large mech, the movie seems to be a patriotic war movie." - if(27) - name += " - Plastic Sheep Can't Scream" - desc += " This is a movie poster for an upcoming horror movie, it features an AI in the front of it." - if(28) - name += " - The Stars Know Love" - desc += " This is a movie poster. A bleeding woman is shown drawing a heart in her blood on the window of space ship, it seems to be a romantic Drama." - if(29) - name += " - Winter Is Coming" - desc += " On the poster is a frighteningly large wolf, the message on the poster seems ominous." - else - name += " - Error" - desc += " Bad." - ..() + var/designtype = poster_designs[serial_number] + var/datum/poster/design=new designtype + name += " - [design.name]" + desc += " [design.desc]" + icon_state = design.icon_state // poster[serial_number] + ..() obj/structure/sign/poster/attackby(obj/item/weapon/W as obj, mob/user as mob) if(istype(W, /obj/item/weapon/wirecutters)) @@ -248,14 +80,17 @@ obj/structure/sign/poster/attackby(obj/item/weapon/W as obj, mob/user as mob) /obj/structure/sign/poster/proc/roll_and_drop(turf/newloc) var/obj/item/weapon/contraband/poster/P = new(src, serial_number) - P.resulting_poster = src P.loc = newloc src.loc = P + del(src) -//separated to reduce code duplication. Moved here for ease of reference and to unclutter r_wall/attackby() +//seperated to reduce code duplication. Moved here for ease of reference and to unclutter r_wall/attackby() /turf/simulated/wall/proc/place_poster(var/obj/item/weapon/contraband/poster/P, var/mob/user) - if(!P.resulting_poster) return + + if(!istype(src,/turf/simulated/wall)) + user << "\red You can't place this here!" + return var/stuff_on_wall = 0 for(var/obj/O in contents) //Let's see if it already has a poster on it or too much stuff @@ -270,7 +105,7 @@ obj/structure/sign/poster/attackby(obj/item/weapon/W as obj, mob/user as mob) user << "You start placing the poster on the wall..." //Looks like it's uncluttered enough. Place the poster. //declaring D because otherwise if P gets 'deconstructed' we lose our reference to P.resulting_poster - var/obj/structure/sign/poster/D = P.resulting_poster + var/obj/structure/sign/poster/D = new(P.serial_number) var/temp_loc = user.loc flick("poster_being_set",D) @@ -285,4 +120,11 @@ obj/structure/sign/poster/attackby(obj/item/weapon/W as obj, mob/user as mob) user << "You place the poster!" else D.roll_and_drop(temp_loc) - return \ No newline at end of file + return + +/datum/poster + // Name suffix. Poster - [name] + var/name="" + // Description suffix + var/desc="" + var/icon_state="" \ No newline at end of file diff --git a/code/game/objects/effects/decals/posters/bs12.dm b/code/game/objects/effects/decals/posters/bs12.dm new file mode 100644 index 0000000000..52c9f80550 --- /dev/null +++ b/code/game/objects/effects/decals/posters/bs12.dm @@ -0,0 +1,145 @@ +// baystation12 posters +/datum/poster/bay_1 + icon_state="bsposter1" + name = "Unlucky Space Explorer" + desc = "This particular one depicts a skeletal form within a space suit." + +/datum/poster/bay_2 + icon_state="bsposter2" + name = "Positronic Logic Conflicts" + desc = "This particular one depicts the cold, unmoving stare of a particular advanced AI." + +/datum/poster/bay_3 + icon_state="bsposter3" + name = "Paranoia" + desc = "This particular one warns of the dangers of trusting your co-workers too much." + +/datum/poster/bay_4 + icon_state="bsposter4" + name = "Keep Calm" + desc = "This particular one is of a famous New Earth design, although a bit modified." + +/datum/poster/bay_5 + icon_state="bsposter5" + name = "Martian Warlord" + desc = "This particular one depicts the cartoony mug of a certain Martial Warmonger." + +/datum/poster/bay_6 + icon_state="bsposter6" + name = "Technological Singularity" + desc = "This particular one is of the blood-curdling symbol of a long-since defeated enemy of humanity." + +/datum/poster/bay_7 + icon_state="bsposter7" + name = "Wasteland" + desc = "This particular one is of a couple of ragged gunmen, one male and one female, on top of a mound of rubble. The number \"12\" is visible on their blue jumpsuits." + +/datum/poster/bay_8 + icon_state="bsposter8" + name = "Pinup Girl Cindy" + desc = "This particular one is of Nanotrasen's PR girl, Cindy, in a particularly feminine pose." + +/datum/poster/bay_9 + icon_state="bsposter9" + name = "Pinup Girl Amy" + desc = "This particular one is of Amy, the nymphomaniac Urban Legend of Nanotrasen Space Stations. How this photograph came to be is not known." + +/datum/poster/bay_10 + icon_state="bsposter10" + name = "Don't Panic" + desc = "This particular one depicts some sort of star in a grimace. The \"Don't Panic\" is written in big, friendly letters." + +/datum/poster/bay_11 + icon_state="bsposter11" + name = "Underwater Laboratory" + desc = "This particular one is of the fabled last crew of Nanotrasen's previous project before going big on Asteroid mining, Sealab." + +/datum/poster/bay_12 + icon_state="bsposter12" + name = "Rogue AI" + desc = "This particular one depicts the shell of the infamous AI that catastropically comandeered one of Nanotrasen's earliest space stations. Back then, the corporation was just known as TriOptimum." + +/datum/poster/bay_13 + icon_state="bsposter13" + name = "User of the Arcane Arts" + desc = "This particular one depicts a wizard, casting a spell. You can't really make out if it's an actial photograph or a computer-generated image." + +/datum/poster/bay_14 + icon_state="bsposter14" + name = "Levitating Skull" + desc = "This particular one is the portrait of a certain flying, friendly and somewhat sex-crazed enchanted skull. Its adventures along with its fabled companion are now fading through history..." + +/datum/poster/bay_15 + icon_state="bsposter15" + name = "Augmented Legend" + desc = "This particular one is of an obviously augmented individual, gazing towards the sky. The cyber-city in the backround is rather punkish." + +/datum/poster/bay_16 + icon_state="bsposter16" + name = "Dangerous Static" + desc = "This particular one depicts nothing remarkable other than a rather mesmerising pattern of monitor static. There's a tag on the sides of the poster, urging you to \"tear this poster in half to receive your free sample\"." + +/datum/poster/bay_17 + icon_state="bsposter17" + name = "Pinup Girl Val" + desc = "Luscious Val McNeil, the vertically challenged Legal Extraordinaire, winner of Miss Space two years running and favoured pinup girl of Lawyers Weekly." + +/datum/poster/bay_18 + icon_state="bsposter18" + name = "Derpman, Enforcer of the State" + desc = "Here to protect and serve... your donuts! A generously proportioned man, he teaches you the value of hiding your snacks." + +/datum/poster/bay_19 + icon_state="bsposter19" + name = "Respect a Soghun" + desc = "This poster depicts a well dressed looking Soghun receiving a prestigious award. It appears to espouse greater co-operation and harmony between the two races." + +/datum/poster/bay_20 + icon_state="bsposter20" + name = "Skrell Twilight" + desc = "This poster depicts a mysteriously inscrutable, alien scene. Numerous Skrell can be seen conversing amidst great, crystalline towers rising above crashing waves" + +/datum/poster/bay_21 + icon_state="bsposter21" + name = "Join the Fuzz!" + desc = "It's a nice recruitment poster of a white haired Chinese woman that says; \"Big Guns, Hot Women, Good Times. Security. We get it done.\"" + +/datum/poster/bay_22 + icon_state="bsposter22" + name = "Looking for a career with excitement?" + desc = "A recruitment poster starring a dark haired woman with glasses and a purple shirt that has \"Got Brains? Got Talent? Not afraid of electric flying monsters that want to suck the soul out of you? Then Xenobiology could use someone like you!\" written on the bottom." + +/datum/poster/bay_23 + icon_state="bsposter23" + name = "Safety first: because electricity doesn't wait!" + desc = "A safety poster starring a clueless looking redhead with frazzled hair. \"Every year, hundreds of NT employees expose themselves to electric shock. Play it safe. Avoid suspicious doors after electrical storms, and always wear protection when doing electric maintenance.\"" + +/datum/poster/bay_24 + icon_state="bsposter24" + name = "Responsible medbay habits, No #259" + desc = "A poster with a nervous looking geneticist on it states; \"Friends Don't Tell Friends They're Clones. It can cause severe and irreparable emotional trauma. Always do the right thing and never tell them that they were dead.\"" + +/datum/poster/bay_25 + icon_state="bsposter25" + name = "Irresponsible medbay habits, No #2" + desc = "This is a safety poster starring a perverted looking naked doctor. \"Sexual harassment is never okay. REPORT any acts of sexual deviance or harassment that disrupt a healthy working environment.\"" + +/datum/poster/bay_26 + icon_state="bsposter26" + name = "The Men We Knew" + desc = "This movie poster depicts a group of soldiers fighting a large mech, the movie seems to be a patriotic war movie." + +/datum/poster/bay_27 + icon_state="bsposter27" + name = "Plastic Sheep Can't Scream" + desc = "This is a movie poster for an upcoming horror movie, it features an AI in the front of it." + +/datum/poster/bay_28 + icon_state="bsposter28" + name = "The Stars Know Love" + desc = "This is a movie poster. A bleeding woman is shown drawing a heart in her blood on the window of space ship, it seems to be a romantic Drama." + +/datum/poster/bay_29 + icon_state="bsposter29" + name = "Winter Is Coming" + desc = "On the poster is a frighteningly large wolf, the message on the poster seems ominous." \ No newline at end of file diff --git a/code/game/objects/effects/decals/posters/tgposters.dm b/code/game/objects/effects/decals/posters/tgposters.dm new file mode 100644 index 0000000000..3dff589c3a --- /dev/null +++ b/code/game/objects/effects/decals/posters/tgposters.dm @@ -0,0 +1,50 @@ +// /tg/ posters. +/datum/poster/tg_1 + name = "Free Tonto" + desc = "A framed shred of a much larger flag, colors bled together and faded from age." + icon_state="poster1" + +/datum/poster/tg_2 + name = "Atmosia Declaration of Independence" + desc = "A relic of a failed rebellion" + icon_state="poster2" + +/datum/poster/tg_3 + name = "Fun Police" + desc = "A poster condemning the station's security forces." + icon_state="poster3" + +/datum/poster/tg_4 + name = "Lusty Xeno" + desc = "A heretical poster depicting the titular star of an equally heretical book." + icon_state="poster4" + +/datum/poster/tg_5 + name = "Syndicate Recruitment Poster" + desc = "See the galaxy! Shatter corrupt megacorporations! Join today!" + icon_state="poster5" + +/datum/poster/tg_6 + name = "Clown" + desc = "Honk." + icon_state="poster6" + +/datum/poster/tg_7 + name = "Smoke" + desc = "A poster depicting a carton of cigarettes." + icon_state="poster7" + +/datum/poster/tg_8 + name = "Grey Tide" + desc = "A rebellious poster symbolizing assistant solidarity." + icon_state="poster8" + +/datum/poster/tg_9 + name = "Missing Gloves" + desc = "This poster is about the uproar that followed Nanotrasen's financial cuts towards insulated-glove purchases." + icon_state="poster9" + +/datum/poster/tg_10 + name = "Hacking Guide" + desc = "This poster details the internal workings of the common Nanotrasen airlock." + icon_state="poster10" \ No newline at end of file From 2944fed3a14bd71c762dadc1380cc02343e785e7 Mon Sep 17 00:00:00 2001 From: Loganbacca Date: Sun, 12 Jan 2014 20:35:37 +1300 Subject: [PATCH 33/45] Supermatter draw layer - fixes #4255 Supermatter draw layer was set to 70. Changed it to 4 so it's still on top of other objects but not UI layers. --- maps/tgstation2.dmm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/maps/tgstation2.dmm b/maps/tgstation2.dmm index a9870ceb45..c6fb8919c0 100644 --- a/maps/tgstation2.dmm +++ b/maps/tgstation2.dmm @@ -6399,7 +6399,7 @@ "ctc" = (/obj/machinery/power/emitter{anchored = 1; dir = 4; state = 2},/obj/structure/cable{d2 = 8; icon_state = "0-8"},/turf/simulated/floor/plating,/area/engine{name = "Engine Room"}) "ctd" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/poddoor/shutters{id = "EngineShutter"; name = "Engine Shutters"},/turf/simulated/floor/plating,/area/engine{name = "Engine Room"}) "cte" = (/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 8},/area/engine{name = "Engine Room"}) -"ctf" = (/obj/machinery/power/supermatter{layer = 70},/obj/machinery/mass_driver{id = "enginecore"},/turf/simulated/floor/greengrid,/area/engine{name = "Engine Room"}) +"ctf" = (/obj/machinery/power/supermatter{layer = 4},/obj/machinery/mass_driver{id = "enginecore"},/turf/simulated/floor/greengrid,/area/engine{name = "Engine Room"}) "ctg" = (/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 4},/area/engine{name = "Engine Room"}) "cth" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/poddoor/shutters{dir = 8; id = "EngineShutter"; name = "Engine Shutters"},/turf/simulated/floor/plating,/area/engine{name = "Engine Room"}) "cti" = (/obj/machinery/atmospherics/pipe/simple/yellow/visible,/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 8},/area/engine{name = "Engine Room"}) From b9c747aeaf51246fe80ba5951a43d315a15b8970 Mon Sep 17 00:00:00 2001 From: RKF45 Date: Sun, 12 Jan 2014 12:04:18 +0100 Subject: [PATCH 34/45] Makes mixing paints actually make sense --- code/game/objects/items/weapons/paint.dm | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/code/game/objects/items/weapons/paint.dm b/code/game/objects/items/weapons/paint.dm index cb4ed96878..166144407d 100644 --- a/code/game/objects/items/weapons/paint.dm +++ b/code/game/objects/items/weapons/paint.dm @@ -37,8 +37,9 @@ var/global/list/cached_icons = list() reagents.add_reagent("paint_[paint_type]", volume) on_reagent_change() //Until we have a generic "paint", this will give new colours to all paints in the can + var/mixedcolor = mix_color_from_reagents(reagents.reagent_list) for(var/datum/reagent/paint/P in reagents.reagent_list) - P.color = mix_color_from_reagents(reagents.reagent_list) + P.color = mixedcolor red icon_state = "paint_red" From 214fbeee992203d5f74a5e72e05b46d52e87e219 Mon Sep 17 00:00:00 2001 From: "Mark Aherne (Faerdan)" Date: Sun, 12 Jan 2014 15:30:25 +0000 Subject: [PATCH 35/45] NanoUI assets are now sent to the client automatically. * NanoUI now finds and sends it's assets to the client (css, images, javascript and templates). Part of my effort to make creating NanoUIs as simple as possible. This removes the need to add new NanoUI assets (such as templates) to the client send_resources proc. --- code/modules/client/client procs.dm | 27 ++++----------------------- code/modules/nano/nanomanager.dm | 29 +++++++++++++++++++++++++++++ 2 files changed, 33 insertions(+), 23 deletions(-) diff --git a/code/modules/client/client procs.dm b/code/modules/client/client procs.dm index cd63e415a4..1d955a9e74 100644 --- a/code/modules/client/client procs.dm +++ b/code/modules/client/client procs.dm @@ -242,30 +242,11 @@ //send resources to the client. It's here in its own proc so we can move it around easiliy if need be /client/proc/send_resources() // preload_vox() //Causes long delays with initial start window and subsequent windows when first logged in. + + // Send NanoUI resources to this client + nanomanager.send_resources(src) + getFiles( - 'nano/js/libraries.min.js', - 'nano/js/nano_update.js', - 'nano/js/nano_config.js', - 'nano/js/nano_base_helpers.js', - 'nano/css/shared.css', - 'nano/css/icons.css', - 'nano/templates/chem_dispenser.tmpl', - 'nano/templates/cryo.tmpl', - 'nano/templates/geoscanner.tmpl', - 'nano/templates/dna_modifier.tmpl', - 'nano/templates/telescience_console.tmpl', - 'nano/templates/pda.tmpl', - 'nano/templates/smes.tmpl', - 'nano/templates/uplink.tmpl', - 'nano/images/uiBackground.png', - 'nano/images/uiIcons16.png', - 'nano/images/uiIcons24.png', - 'nano/images/uiBackground-Syndicate.png', - 'nano/images/uiLinkPendingIcon.gif', - 'nano/images/uiMaskBackground.png', - 'nano/images/uiNoticeBackground.jpg', - 'nano/images/uiTitleFluff.png', - 'nano/images/uiTitleFluff-Syndicate.png', 'html/search.js', 'html/panels.css', 'icons/pda_icons/pda_atmos.png', diff --git a/code/modules/nano/nanomanager.dm b/code/modules/nano/nanomanager.dm index b7b45060bb..782bfa2308 100644 --- a/code/modules/nano/nanomanager.dm +++ b/code/modules/nano/nanomanager.dm @@ -197,4 +197,33 @@ oldMob.open_uis.Cut() return 1 // success + + /** + * Sends all nano assets to the client + * This is called on user login + * + * @param client /client The user's client + * + * @return nothing + */ + +#define NANO_CSS_PATH "nano/css/" +#define NANO_IMAGES_PATH "nano/images/" +#define NANO_JS_PATH "nano/js/" +#define NANO_TEMPLATES_PATH "nano/templates/" + +/datum/nanomanager/proc/send_resources(client) + var/list/css = flist(NANO_CSS_PATH) + var/list/images = flist(NANO_IMAGES_PATH) + var/list/js = flist(NANO_JS_PATH) + var/list/templates = flist(NANO_TEMPLATES_PATH) + + for(var/file in css) + client << browse_rsc(file(NANO_CSS_PATH + file)) + for(var/file in images) + client << browse_rsc(file(NANO_IMAGES_PATH + file)) + for(var/file in js) + client << browse_rsc(file(NANO_JS_PATH + file)) + for(var/file in templates) + client << browse_rsc(file(NANO_TEMPLATES_PATH + file)) From 9ae2e42268e1ae9e69b1956bb84739966eb057c0 Mon Sep 17 00:00:00 2001 From: Mloc Date: Sun, 12 Jan 2014 19:20:28 +0000 Subject: [PATCH 36/45] Added a .travis.yml file for Travis. Signed-off-by: Mloc --- .travis.yml | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) create mode 100644 .travis.yml diff --git a/.travis.yml b/.travis.yml new file mode 100644 index 0000000000..a3287d2074 --- /dev/null +++ b/.travis.yml @@ -0,0 +1,19 @@ +language: dm + +env: + BYOND_MAJOR="503" + BYOND_MINOR="1224" + +before_install: + - sudo apt-get update -qq + - sudo apt-get install libc6:i386 libgcc1:i386 libstdc++6:i386 -qq + +install: + - curl "http://www.byond.com/download/build/${BYOND_MAJOR}/${BYOND_MAJOR}.${BYOND_MINOR}_byond_linux.zip" -o byond.zip + - unzip byond.zip + - cd byond + - sudo make install + - cd .. + +script: + - DreamMaker baystation12.dme From c9191faa1454a6345ad96b17e76f1af5e43a22b0 Mon Sep 17 00:00:00 2001 From: "Mark Aherne (Faerdan)" Date: Sun, 12 Jan 2014 20:07:48 +0000 Subject: [PATCH 37/45] NanoUI Caching and SMES tweaks * Made NanoUI caching code neater, added check for directories (which are ignored). * Moved SET to between MIN and MAX on SMES UI. --- code/modules/nano/nanomanager.dm | 29 ++++++++++++----------------- nano/templates/smes.tmpl | 4 ++-- 2 files changed, 14 insertions(+), 19 deletions(-) diff --git a/code/modules/nano/nanomanager.dm b/code/modules/nano/nanomanager.dm index 782bfa2308..ae938a9a8a 100644 --- a/code/modules/nano/nanomanager.dm +++ b/code/modules/nano/nanomanager.dm @@ -207,23 +207,18 @@ * @return nothing */ -#define NANO_CSS_PATH "nano/css/" -#define NANO_IMAGES_PATH "nano/images/" -#define NANO_JS_PATH "nano/js/" -#define NANO_TEMPLATES_PATH "nano/templates/" - /datum/nanomanager/proc/send_resources(client) - var/list/css = flist(NANO_CSS_PATH) - var/list/images = flist(NANO_IMAGES_PATH) - var/list/js = flist(NANO_JS_PATH) - var/list/templates = flist(NANO_TEMPLATES_PATH) + var/list/nano_asset_dirs = list(\ + "nano/css/",\ + "nano/images/",\ + "nano/js/",\ + "nano/templates/"\ + ) - for(var/file in css) - client << browse_rsc(file(NANO_CSS_PATH + file)) - for(var/file in images) - client << browse_rsc(file(NANO_IMAGES_PATH + file)) - for(var/file in js) - client << browse_rsc(file(NANO_JS_PATH + file)) - for(var/file in templates) - client << browse_rsc(file(NANO_TEMPLATES_PATH + file)) + var/list/files = null + for (var/path in nano_asset_dirs) + files = flist(path) + for(var/file in files) + if(copytext(file, length(file)) != "/") // files which end in "/" are actually directories, which we want to ignore + client << browse_rsc(file(path + file)) // send the file to the client diff --git a/nano/templates/smes.tmpl b/nano/templates/smes.tmpl index c4431cd805..760228e4cd 100644 --- a/nano/templates/smes.tmpl +++ b/nano/templates/smes.tmpl @@ -34,8 +34,8 @@ {{:~displayBar(chargeLevel, 0, chargeMax)}}
{{:~link('MIN', null, {'input' : 'min'}, (chargeLevel > 0) ? null : 'disabled')}} - {{:~link('MAX', null, {'input' : 'max'}, (chargeLevel < chargeMax) ? null : 'disabled')}} {{:~link('SET', null, {'input' : 'set'}, null)}} + {{:~link('MAX', null, {'input' : 'max'}, (chargeLevel < chargeMax) ? null : 'disabled')}}
 {{:chargeLevel}} W 
@@ -59,8 +59,8 @@ {{:~displayBar(outputLevel, 0, outputMax)}}
{{:~link('MIN', null, {'output' : 'min'}, (outputLevel > 0) ? null : 'disabled')}} - {{:~link('MAX', null, {'output' : 'max'}, (outputLevel < outputMax) ? null : 'disabled')}} {{:~link('SET', null, {'output' : 'set'}, null)}} + {{:~link('MAX', null, {'output' : 'max'}, (outputLevel < outputMax) ? null : 'disabled')}}
 {{:outputLevel}} W 
From 3125911242d910ac5be036013f0029d6b18b69ed Mon Sep 17 00:00:00 2001 From: Mloc Date: Sun, 12 Jan 2014 20:22:33 +0000 Subject: [PATCH 38/45] Fix for Ruby noise in Travis. Signed-off-by: Mloc --- .travis.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index a3287d2074..87eeb862d5 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,4 +1,5 @@ -language: dm +#pretending we're C because otherwise ruby will initialize, even with "language: dm". +language: c env: BYOND_MAJOR="503" From 87c246ff0661af9d422cc33370ac45377feda080 Mon Sep 17 00:00:00 2001 From: "Mark Aherne (Faerdan)" Date: Sun, 12 Jan 2014 23:11:49 +0000 Subject: [PATCH 39/45] APC NanoUI * Created new APC UI * Tweaked Chem Master UI width. --- code/modules/power/apc.dm | 223 ++++++++----------- code/modules/reagents/Chemistry-Machinery.dm | 2 +- nano/templates/apc.tmpl | 174 +++++++++++++++ 3 files changed, 265 insertions(+), 134 deletions(-) create mode 100644 nano/templates/apc.tmpl diff --git a/code/modules/power/apc.dm b/code/modules/power/apc.dm index 560590cbad..e46ff88e2a 100644 --- a/code/modules/power/apc.dm +++ b/code/modules/power/apc.dm @@ -520,129 +520,87 @@ user << browse(t1, "window=apcwires") onclose(user, "apcwires") - user.set_machine(src) - var/t = "[area.name] APCArea Power Controller ([area.name])
" - - //This goes after the wire stuff. They should be able to fix a physical problem when a wire is cut - if ( (get_dist(src, user) > 1 )) - if (!istype(user, /mob/living/silicon)) - user.unset_machine() - user << browse(null, "window=apc") - return - else if (istype(user, /mob/living/silicon) && src.aidisabled && !src.malfhack) - user << "AI control for this APC interface has been disabled." - user.unset_machine() - user << browse(null, "window=apc") - return - else if (src.malfai) - if ((src.malfai != user && src.malfai != user:parent) && !islinked(user, malfai)) - user << "AI control for this APC interface has been disabled." - user.unset_machine() - user << browse(null, "window=apc") - return - - - if(locked && (!istype(user, /mob/living/silicon))) - t += "(Swipe ID card to unlock inteface.)
" - t += "Main breaker : [operating ? "On" : "Off"]
" - t += "External power : [ main_status ? (main_status ==2 ? "Good" : "Low") : "None"]
" - t += "Power cell: [cell ? "[round(cell.percent())]%" : "Not connected."]" - if(cell) - t += " ([charging ? ( charging == 1 ? "Charging" : "Fully charged" ) : "Not charging"])" - t += " ([chargemode ? "Auto" : "Off"])" - - t += "

Power channels
"
-
-		var/list/L = list ("Off","Off (Auto)", "On", "On (Auto)")
-
-		t += "Equipment:    [add_lspace(lastused_equip, 6)] W : [L[equipment+1]]
" - t += "Lighting: [add_lspace(lastused_light, 6)] W : [L[lighting+1]]
" - t += "Environmental:[add_lspace(lastused_environ, 6)] W : [L[environ+1]]
" - - t += "
Total load: [lastused_light + lastused_equip + lastused_environ] W
" - t += "
Cover lock: [coverlocked ? "Engaged" : "Disengaged"]" - - else - if (!istype(user, /mob/living/silicon)) - t += "(Swipe ID card to lock interface.)
" - t += "Main breaker: [operating ? "On Off" : "On Off" ]
" - t += "External power : [ main_status ? (main_status ==2 ? "Good" : "Low") : "None"]
" - if(cell) - t += "Power cell: [round(cell.percent())]%" - t += " ([charging ? ( charging == 1 ? "Charging" : "Fully charged" ) : "Not charging"])" - t += " ([chargemode ? "Off Auto" : "Off Auto"])" - - else - t += "Power cell: Not connected." - - t += "

Power channels
"
-
-
-		t += "Equipment:    [add_lspace(lastused_equip, 6)] W : "
-		switch(equipment)
-			if(0)
-				t += "Off On Auto"
-			if(1)
-				t += "Off On Auto (Off)"
-			if(2)
-				t += "Off On Auto"
-			if(3)
-				t += "Off On Auto (On)"
-		t +="
" - - t += "Lighting: [add_lspace(lastused_light, 6)] W : " - - switch(lighting) - if(0) - t += "Off On Auto" - if(1) - t += "Off On Auto (Off)" - if(2) - t += "Off On Auto" - if(3) - t += "Off On Auto (On)" - t +="
" - - - t += "Environmental:[add_lspace(lastused_environ, 6)] W : " - switch(environ) - if(0) - t += "Off On Auto" - if(1) - t += "Off On Auto (Off)" - if(2) - t += "Off On Auto" - if(3) - t += "Off On Auto (On)" - - - - t += "
Total load: [lastused_light + lastused_equip + lastused_environ] W
" - t += "
Cover lock: [coverlocked ? "Engaged" : "Disengaged"]" - - - if (istype(user, /mob/living/silicon)) - t += "

Overload lighting circuit
" - if (ticker && ticker.mode) -// world << "there's a ticker" - if(user.mind in ticker.mode.malf_ai) -// world << "ticker says its malf" - if (!src.malfai) - t += "

Override Programming
" - else - t += "

APC Hacked
" - /*if(!src.occupant) - t += "Shunt Core Processes
" - else - t += "Core Processes Uploaded
"*/ - - t += "

Close" - - t += "
" - user << browse(t, "window=apc") - onclose(user, "apc") + // Open the APC NanoUI + ui_interact(user) return +/obj/machinery/power/apc/proc/get_malf_status(mob/user) + if (ticker && ticker.mode && (user.mind in ticker.mode.malf_ai) && istype(user, /mob/living/silicon/ai)) + if (src.malfai == (user:parent ? user:parent : user)) + if (src.occupant == user) + return 3 // 3 = User is shunted in this APC + else if (istype(user.loc, /obj/machinery/power/apc)) + return 4 // 4 = User is shunted in another APC + else + return 2 // 2 = APC hacked by user, and user is in its core. + else + return 1 // 1 = APC not hacked. + else + return 0 // 0 = User is not a Malf AI + +/obj/machinery/power/apc/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null) + if(!user) + return + + var/list/data = list( + "locked" = locked, + "isOperating" = operating, + "externalPower" = main_status, + "powerCellStatus" = cell ? cell.percent() : null, + "chargeMode" = chargemode, + "chargingStatus" = charging, + "totalLoad" = lastused_equip + lastused_light + lastused_environ, + "coverLocked" = coverlocked, + "siliconUser" = istype(user, /mob/living/silicon), + "malfStatus" = get_malf_status(user), + + "powerChannels" = list( + list( + "title" = "Equipment", + "powerLoad" = lastused_equip, + "status" = equipment, + "topicParams" = list( + "auto" = list("eqp" = 3), + "on" = list("eqp" = 2), + "off" = list("eqp" = 1) + ) + ), + list( + "title" = "Lighting", + "powerLoad" = lastused_light, + "status" = lighting, + "topicParams" = list( + "auto" = list("lgt" = 3), + "on" = list("lgt" = 2), + "off" = list("lgt" = 1) + ) + ), + list( + "title" = "Environment", + "powerLoad" = lastused_environ, + "status" = environ, + "topicParams" = list( + "auto" = list("env" = 3), + "on" = list("env" = 2), + "off" = list("env" = 1) + ) + ) + ) + ) + + // update the ui if it exists, returns null if no ui is passed/found + ui = nanomanager.try_update_ui(user, src, ui_key, ui, data) + if (!ui) + // the ui does not exist, so we'll create a new() one + // for a list of parameters and their descriptions see the code docs in \code\modules\nano\nanoui.dm + ui = new(user, src, ui_key, "apc.tmpl", "[area.name] - APC", 520, data["siliconUser"] ? 465 : 440) + // when the ui is first opened this is the data it will use + ui.set_initial_data(data) + // open the new ui window + ui.open() + // auto update every Master Controller tick + ui.set_auto_update(1) + /obj/machinery/power/apc/proc/report() return "[area.name] : [equipment]/[lighting]/[environ] ([lastused_equip+lastused_light+lastused_environ]) : [cell? cell.percent() : "N/C"] ([charging])" @@ -754,8 +712,8 @@ istype(user, /mob/living/silicon) || \ istype(user, /mob/living/carbon/monkey) /*&& ticker && ticker.mode.name == "monkey"*/) ) user << "\red You don't have the dexterity to use this [src]!" - user << browse(null, "window=apc") - user.unset_machine() + nanomanager.close_user_uis(user, src) + return 0 if(user.restrained()) user << "\red You must have free hands to use this [src]" @@ -776,13 +734,13 @@ ) if(!loud) user << "\red \The [src] have AI control disabled!" - user << browse(null, "window=apc") - user.unset_machine() + nanomanager.close_user_uis(user, src) + return 0 else if ((!in_range(src, user) || !istype(src.loc, /turf))) - user << browse(null, "window=apc") - user.unset_machine() + nanomanager.close_user_uis(user, src) + return 0 var/mob/living/carbon/human/H = user @@ -800,9 +758,8 @@ if(!(isrobot(usr) && (href_list["apcwires"] || href_list["pulse"]))) if(!can_use(usr, 1)) return - src.add_fingerprint(usr) - if(usingUI) // If we set their machine and they're not using the UI, it'll cause the UI to pop up. - usr.set_machine(src) + src.add_fingerprint(usr) + if (href_list["apcwires"]) var/t1 = text2num(href_list["apcwires"]) if (!( istype(usr.get_active_hand(), /obj/item/weapon/wirecutters) )) @@ -864,12 +821,12 @@ update_icon() update() else if( href_list["close"] ) - usr << browse(null, "window=apc") - usr.unset_machine() + nanomanager.close_user_uis(usr, src) + return else if (href_list["close2"]) usr << browse(null, "window=apcwires") - usr.unset_machine() + return else if (href_list["overload"]) diff --git a/code/modules/reagents/Chemistry-Machinery.dm b/code/modules/reagents/Chemistry-Machinery.dm index 776e07e42c..100882055d 100644 --- a/code/modules/reagents/Chemistry-Machinery.dm +++ b/code/modules/reagents/Chemistry-Machinery.dm @@ -146,7 +146,7 @@ if (!ui) // the ui does not exist, so we'll create a new() one // for a list of parameters and their descriptions see the code docs in \code\modules\nano\nanoui.dm - ui = new(user, src, ui_key, "chem_dispenser.tmpl", ui_title, 370, 605) + ui = new(user, src, ui_key, "chem_dispenser.tmpl", ui_title, 380, 650) // when the ui is first opened this is the data it will use ui.set_initial_data(data) // open the new ui window diff --git a/nano/templates/apc.tmpl b/nano/templates/apc.tmpl new file mode 100644 index 0000000000..56c6a1f1ee --- /dev/null +++ b/nano/templates/apc.tmpl @@ -0,0 +1,174 @@ +
+ {{if siliconUser}} +
+ Interface Lock: +
+
+ {{:~link('Engaged', 'locked', {'toggleaccess' : 1}, locked ? 'selected' : null)}}{{:~link('Disengaged', 'unlocked', {'toggleaccess' : 1}, malfStatus >= 2 ? 'linkOff' : (locked ? null : 'selected'))}} +
+
+ {{else}} + {{if locked}} + Swipe an ID card to unlock this interface. + {{else}} + Swipe an ID card to lock this interface. + {{/if}} + {{/if}} +
+ +
+ +

Power Status

+ +
+
+ Main Breaker: +
+
+ {{if locked && !siliconUser}} + {{if isOperating}} + On + {{else}} + Off + {{/if}} + {{else}} + {{:~link('On', 'power', {'breaker' : 1}, isOperating ? 'selected' : null)}}{{:~link('Off', 'close', {'breaker' : 1}, isOperating ? null : 'selected')}} + {{/if}} +
+
+ +
+
+ External Power: +
+
+ {{if externalPower == 2}} + Good + {{else externalPower == 1}} + Low + {{else}} + None + {{/if}} +
+
+ +
+
+ Power Cell: +
+ {{if powerCellStatus == null}} +
+ Power cell removed. +
+ {{else}} +
+ {{:~round(powerCellStatus*10)/10}}% +
+ {{:~displayBar(powerCellStatus, 0, 100, powerCellStatus >= 50 ? 'good' : powerCellStatus >= 25 ? 'average' : 'bad')}} + {{/if}} +
+ + {{if powerCellStatus != null}} +
+
+ Charge Mode: +
+
+ {{if locked && !siliconUser}} + {{if chargeMode}} + Auto + {{else}} + Off + {{/if}} + {{else}} + {{:~link('Auto', 'refresh', {'cmode' : 1}, chargeMode ? 'selected' : null)}}{{:~link('Off', 'close', {'cmode' : 1}, chargeMode ? null : 'selected')}} + {{/if}} +   + {{if chargingStatus > 1}} + [Fully Charged] + {{else chargingStatus == 1}} + [Charging] + {{else}} + [Not Charging] + {{/if}} +
+
+ {{/if}} + + +

Power Channels

+ + {{for powerChannels}} +
+
+ {{:title}}: +
+
+ {{:powerLoad}} W +
+
+    + {{if status <= 1}} + Off + {{else status >= 2}} + On + {{/if}} + {{if status == 1 || status == 3}} + [Auto] + {{else}} + [Manual] + {{/if}} +
+ {{if !~root.locked || ~root.siliconUser}} +
+ {{:~link('Auto', 'refresh', topicParams.auto, (status == 1 || status == 3) ? 'selected' : null)}} + {{:~link('On', 'power', topicParams.on, (status == 2) ? 'selected' : null)}} + {{:~link('Off', 'close', topicParams.off, (status == 0) ? 'selected' : null)}} +
+ {{/if}} +
+ {{/for}} + +
+
+ Total Load: +
+
+ {{:totalLoad}} W +
+
+ +
 
+ +
+
+ Cover Lock: +
+
+ {{if locked && !siliconUser}} + {{if coverLocked}} + Engaged + {{else}} + Disengaged + {{/if}} + {{else}} + {{:~link('Engaged', 'locked', {'lock' : 1}, coverLocked ? 'selected' : null)}}{{:~link('Disengaged', 'unlocked', {'lock' : 1}, coverLocked ? null : 'selected')}} + {{/if}} +
+
+ + {{if siliconUser}} +

System Overrides

+ +
+ {{:~link('Overload Lighting Circuit', 'lightbulb', {'overload' : 1})}} + {{if malfStatus == 1}} + {{:~link('Override Programming', 'script', {'malfhack' : 1})}} + {{else malfStatus > 1}} +
APC Hacked
+ {{/if}} +
+ {{/if}} + +
+ \ No newline at end of file From 5083e1cd479b91080f4332906714d1ec975cbb04 Mon Sep 17 00:00:00 2001 From: RKF45 Date: Mon, 13 Jan 2014 22:54:47 +0100 Subject: [PATCH 40/45] Requested adjustments --- code/game/objects/effects/decals/contraband.dm | 2 +- code/game/objects/effects/decals/posters/bs12.dm | 12 ++++++------ 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/code/game/objects/effects/decals/contraband.dm b/code/game/objects/effects/decals/contraband.dm index 3fd3f5cc66..5a575f5e15 100644 --- a/code/game/objects/effects/decals/contraband.dm +++ b/code/game/objects/effects/decals/contraband.dm @@ -85,7 +85,7 @@ obj/structure/sign/poster/attackby(obj/item/weapon/W as obj, mob/user as mob) del(src) -//seperated to reduce code duplication. Moved here for ease of reference and to unclutter r_wall/attackby() +//separated to reduce code duplication. Moved here for ease of reference and to unclutter r_wall/attackby() /turf/simulated/wall/proc/place_poster(var/obj/item/weapon/contraband/poster/P, var/mob/user) if(!istype(src,/turf/simulated/wall)) diff --git a/code/game/objects/effects/decals/posters/bs12.dm b/code/game/objects/effects/decals/posters/bs12.dm index 52c9f80550..82f76dee2b 100644 --- a/code/game/objects/effects/decals/posters/bs12.dm +++ b/code/game/objects/effects/decals/posters/bs12.dm @@ -17,7 +17,7 @@ /datum/poster/bay_4 icon_state="bsposter4" name = "Keep Calm" - desc = "This particular one is of a famous New Earth design, although a bit modified." + desc = "This particular one is of a famous New Earth design, although a bit modified. Someone has scribbled an O over the A on the poster." /datum/poster/bay_5 icon_state="bsposter5" @@ -52,7 +52,7 @@ /datum/poster/bay_11 icon_state="bsposter11" name = "Underwater Laboratory" - desc = "This particular one is of the fabled last crew of Nanotrasen's previous project before going big on Asteroid mining, Sealab." + desc = "This particular one is of the fabled last crew of Nanotrasen's previous project before going big on plasma research." /datum/poster/bay_12 icon_state="bsposter12" @@ -62,12 +62,12 @@ /datum/poster/bay_13 icon_state="bsposter13" name = "User of the Arcane Arts" - desc = "This particular one depicts a wizard, casting a spell. You can't really make out if it's an actial photograph or a computer-generated image." + desc = "This particular one depicts a wizard, casting a spell. You can't really make out if it's an actual photograph or a computer-generated image." /datum/poster/bay_14 icon_state="bsposter14" name = "Levitating Skull" - desc = "This particular one is the portrait of a certain flying, friendly and somewhat sex-crazed enchanted skull. Its adventures along with its fabled companion are now fading through history..." + desc = "This particular one is the portrait of a flying enchanted skull. Its adventures along with its fabled companion are now fading through history..." /datum/poster/bay_15 icon_state="bsposter15" @@ -77,7 +77,7 @@ /datum/poster/bay_16 icon_state="bsposter16" name = "Dangerous Static" - desc = "This particular one depicts nothing remarkable other than a rather mesmerising pattern of monitor static. There's a tag on the sides of the poster, urging you to \"tear this poster in half to receive your free sample\"." + desc = "This particular one depicts nothing remarkable other than a rather mesmerising pattern of monitor static. There's a tag on the sides of the poster, but it's ripped off." /datum/poster/bay_17 icon_state="bsposter17" @@ -142,4 +142,4 @@ /datum/poster/bay_29 icon_state="bsposter29" name = "Winter Is Coming" - desc = "On the poster is a frighteningly large wolf, the message on the poster seems ominous." \ No newline at end of file + desc = "On the poster is a frighteningly large wolf, he warns: \"Only YOU can keep the station from freezing during planetary occultation!"\" \ No newline at end of file From 024a0baa49df0cb1ec8af4967fefe9d5575453eb Mon Sep 17 00:00:00 2001 From: "Mark Aherne (Faerdan)" Date: Wed, 15 Jan 2014 01:08:45 +0000 Subject: [PATCH 41/45] Canister, Tank & Tank Transfer Value NanoUIs. * Added Canister, Tank & Tank Transfer Value NanoUIs. --- code/game/dna/dna_modifier.dm | 4 +- code/game/machinery/atmoalter/canister.dm | 160 +++++++++--------- .../objects/items/devices/transfer_valve.dm | 87 ++++++---- .../game/objects/items/weapons/tanks/tanks.dm | 105 +++++++----- nano/css/shared.css | 10 +- nano/templates/apc.tmpl | 3 +- nano/templates/canister.tmpl | 83 +++++++++ nano/templates/tanks.tmpl | 47 +++++ nano/templates/transfer_valve.tmpl | 53 ++++++ 9 files changed, 388 insertions(+), 164 deletions(-) create mode 100644 nano/templates/canister.tmpl create mode 100644 nano/templates/tanks.tmpl create mode 100644 nano/templates/transfer_valve.tmpl diff --git a/code/game/dna/dna_modifier.dm b/code/game/dna/dna_modifier.dm index 6b91a6c491..335bbad426 100644 --- a/code/game/dna/dna_modifier.dm +++ b/code/game/dna/dna_modifier.dm @@ -272,7 +272,7 @@ I.loc = src src.disk = I user << "You insert [I]." - nanomanager.update_uis(src) // update all UIs attached to src() + nanomanager.update_uis(src) // update all UIs attached to src return else src.attack_hand(user) @@ -342,7 +342,7 @@ W.loc = src src.disk = W user << "You insert [W]." - nanomanager.update_uis(src) // update all UIs attached to src() + nanomanager.update_uis(src) // update all UIs attached to src /* /obj/machinery/computer/scan_consolenew/process() //not really used right now if(stat & (NOPOWER|BROKEN)) diff --git a/code/game/machinery/atmoalter/canister.dm b/code/game/machinery/atmoalter/canister.dm index 35e96899ea..fb5e188371 100644 --- a/code/game/machinery/atmoalter/canister.dm +++ b/code/game/machinery/atmoalter/canister.dm @@ -138,8 +138,6 @@ if(air_contents.temperature > PLASMA_FLASHPOINT) air_contents.zburn() - - src.updateDialog() return /obj/machinery/portable_atmospherics/canister/return_air() @@ -194,6 +192,10 @@ return ..() + + nanomanager.update_uis(src) // Update all NanoUIs attached to src + + /obj/machinery/portable_atmospherics/canister/attack_ai(var/mob/user as mob) return src.attack_hand(user) @@ -202,94 +204,94 @@ return src.attack_hand(user) /obj/machinery/portable_atmospherics/canister/attack_hand(var/mob/user as mob) - return src.interact(user) + return src.ui_interact(user) -/obj/machinery/portable_atmospherics/canister/interact(var/mob/user as mob) +/obj/machinery/portable_atmospherics/canister/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null) if (src.destroyed) return - user.set_machine(src) - var/holding_text - if(holding) - holding_text = {"
Tank Pressure: [holding.air_contents.return_pressure()] KPa
-Remove Tank
-"} - var/output_text = {"[name][can_label?" relabel":""]
-Pressure: [air_contents.return_pressure()] KPa
-Port Status: [(connected_port)?("Connected"):("Disconnected")] -[holding_text] -
-Release Valve: [valve_open?("Open"):("Closed")]
-Release Pressure: - - - - [release_pressure] + + + +
-
-Close
-"} + // this is the data which will be sent to the ui + var/data[0] + data["name"] = name + data["canLabel"] = can_label ? 1 : 0 + data["portConnected"] = connected_port ? 1 : 0 + data["tankPressure"] = round(air_contents.return_pressure() ? air_contents.return_pressure() : 0) + data["releasePressure"] = round(release_pressure ? release_pressure : 0) + data["minReleasePressure"] = round(ONE_ATMOSPHERE/10) + data["maxReleasePressure"] = round(10*ONE_ATMOSPHERE) + data["valveOpen"] = valve_open ? 1 : 0 + + data["hasHoldingTank"] = holding ? 1 : 0 + if (holding) + data["holdingTank"] = list("name" = holding.name, "tankPressure" = round(holding.air_contents.return_pressure())) - user << browse("[src][output_text]", "window=canister;size=600x300") - onclose(user, "canister") - return + // update the ui if it exists, returns null if no ui is passed/found + ui = nanomanager.try_update_ui(user, src, ui_key, ui, data) + if (!ui) + // the ui does not exist, so we'll create a new() one + // for a list of parameters and their descriptions see the code docs in \code\modules\nano\nanoui.dm + ui = new(user, src, ui_key, "canister.tmpl", "Canister", 480, 400) + // when the ui is first opened this is the data it will use + ui.set_initial_data(data) + // open the new ui window + ui.open() + // auto update every Master Controller tick + ui.set_auto_update(1) /obj/machinery/portable_atmospherics/canister/Topic(href, href_list) - //Do not use "if(..()) return" here, canisters will stop working in unpowered areas like space or on the derelict. - if(!usr.canmove || usr.stat || usr.restrained() || !in_range(loc, usr)) - usr << browse(null, "window=canister") - onclose(usr, "canister") - return - - if (((get_dist(src, usr) <= 1) && istype(src.loc, /turf))) - usr.set_machine(src) - - if(href_list["toggle"]) - if (valve_open) - if (holding) - release_log += "Valve was closed by [usr] ([usr.ckey]), stopping the transfer into the [holding]
" - else - release_log += "Valve was closed by [usr] ([usr.ckey]), stopping the transfer into the air
" + //Do not use "if(..()) return" here, canisters will stop working in unpowered areas like space or on the derelict. + if (!istype(src.loc, /turf)) + return 0 + + if(href_list["toggle"]) + if (valve_open) + if (holding) + release_log += "Valve was closed by [usr] ([usr.ckey]), stopping the transfer into the [holding]
" else - if (holding) - release_log += "Valve was opened by [usr] ([usr.ckey]), starting the transfer into the [holding]
" - else - release_log += "Valve was opened by [usr] ([usr.ckey]), starting the transfer into the air
" - valve_open = !valve_open - - if (href_list["remove_tank"]) - if(holding) - if(istype(holding, /obj/item/weapon/tank)) - holding.manipulated_by = usr.real_name - holding.loc = loc - holding = null - - if (href_list["pressure_adj"]) - var/diff = text2num(href_list["pressure_adj"]) - if(diff > 0) - release_pressure = min(10*ONE_ATMOSPHERE, release_pressure+diff) + release_log += "Valve was closed by [usr] ([usr.ckey]), stopping the transfer into the air
" + else + if (holding) + release_log += "Valve was opened by [usr] ([usr.ckey]), starting the transfer into the [holding]
" else - release_pressure = max(ONE_ATMOSPHERE/10, release_pressure+diff) + release_log += "Valve was opened by [usr] ([usr.ckey]), starting the transfer into the air
" + valve_open = !valve_open - if (href_list["relabel"]) - if (can_label) - var/list/colors = list(\ - "\[N2O\]" = "redws", \ - "\[N2\]" = "red", \ - "\[O2\]" = "blue", \ - "\[Toxin (Bio)\]" = "orange", \ - "\[CO2\]" = "black", \ - "\[Air\]" = "grey", \ - "\[CAUTION\]" = "yellow", \ - ) - var/label = input("Choose canister label", "Gas canister") as null|anything in colors - if (label) - src.canister_color = colors[label] - src.icon_state = colors[label] - src.name = "Canister: [label]" - src.updateUsrDialog() - src.add_fingerprint(usr) - update_icon() - else - usr << browse(null, "window=canister") - return - return + if (href_list["remove_tank"]) + if(holding) + if(istype(holding, /obj/item/weapon/tank)) + holding.manipulated_by = usr.real_name + holding.loc = loc + holding = null + + if (href_list["pressure_adj"]) + var/diff = text2num(href_list["pressure_adj"]) + if(diff > 0) + release_pressure = min(10*ONE_ATMOSPHERE, release_pressure+diff) + else + release_pressure = max(ONE_ATMOSPHERE/10, release_pressure+diff) + + if (href_list["relabel"]) + if (can_label) + var/list/colors = list(\ + "\[N2O\]" = "redws", \ + "\[N2\]" = "red", \ + "\[O2\]" = "blue", \ + "\[Toxin (Bio)\]" = "orange", \ + "\[CO2\]" = "black", \ + "\[Air\]" = "grey", \ + "\[CAUTION\]" = "yellow", \ + ) + var/label = input("Choose canister label", "Gas canister") as null|anything in colors + if (label) + src.canister_color = colors[label] + src.icon_state = colors[label] + src.name = "Canister: [label]" + + src.add_fingerprint(usr) + update_icon() + + return 1 /obj/machinery/portable_atmospherics/canister/toxins/New() diff --git a/code/game/objects/items/devices/transfer_valve.dm b/code/game/objects/items/devices/transfer_valve.dm index 9a57b4ff57..2fa75536ec 100644 --- a/code/game/objects/items/devices/transfer_valve.dm +++ b/code/game/objects/items/devices/transfer_valve.dm @@ -33,6 +33,7 @@ user << "You attach the tank to the transfer valve." update_icon() + nanomanager.update_uis(src) // update all UIs attached to src //TODO: Have this take an assemblyholder else if(isassembly(item)) var/obj/item/device/assembly/A = item @@ -53,6 +54,7 @@ message_admins("[key_name_admin(user)] attached a [item] to a transfer valve.") log_game("[key_name_admin(user)] attached a [item] to a transfer valve.") attacher = user + nanomanager.update_uis(src) // update all UIs attached to src return @@ -63,49 +65,60 @@ /obj/item/device/transfer_valve/attack_self(mob/user as mob) - user.set_machine(src) - var/dat = {" Valve properties: -
Attachment one: [tank_one] [tank_one ? "Remove" : ""] -
Attachment two: [tank_two] [tank_two ? "Remove" : ""] -
Valve attachment: [attached_device ? "[attached_device]" : "None"] [attached_device ? "Remove" : ""] -
Valve status: [ valve_open ? "Closed Open" : "Closed Open"]"} + ui_interact(user) + +/obj/item/device/transfer_valve/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null) - user << browse(dat, "window=trans_valve;size=600x300") - onclose(user, "trans_valve") - return + // this is the data which will be sent to the ui + var/data[0] + data["attachmentOne"] = tank_one ? tank_one.name : null + data["attachmentTwo"] = tank_two ? tank_two.name : null + data["valveAttachment"] = attached_device ? attached_device.name : null + data["valveOpen"] = valve_open ? 1 : 0 + + // update the ui if it exists, returns null if no ui is passed/found + ui = nanomanager.try_update_ui(user, src, ui_key, ui, data) + if (!ui) + // the ui does not exist, so we'll create a new() one + // for a list of parameters and their descriptions see the code docs in \code\modules\nano\nanoui.dm + ui = new(user, src, ui_key, "transfer_valve.tmpl", "Tank Transfer Valve", 460, 280) + // when the ui is first opened this is the data it will use + ui.set_initial_data(data) + // open the new ui window + ui.open() + // auto update every Master Controller tick + //ui.set_auto_update(1) /obj/item/device/transfer_valve/Topic(href, href_list) ..() if ( usr.stat || usr.restrained() ) - return - if (src.loc == usr) - if(tank_one && href_list["tankone"]) - split_gases() - valve_open = 0 - tank_one.loc = get_turf(src) - tank_one = null + return 0 + if (src.loc != usr) + return 0 + if(tank_one && href_list["tankone"]) + split_gases() + valve_open = 0 + tank_one.loc = get_turf(src) + tank_one = null + update_icon() + else if(tank_two && href_list["tanktwo"]) + split_gases() + valve_open = 0 + tank_two.loc = get_turf(src) + tank_two = null + update_icon() + else if(href_list["open"]) + toggle_valve() + else if(attached_device) + if(href_list["rem_device"]) + attached_device.loc = get_turf(src) + attached_device:holder = null + attached_device = null update_icon() - else if(tank_two && href_list["tanktwo"]) - split_gases() - valve_open = 0 - tank_two.loc = get_turf(src) - tank_two = null - update_icon() - else if(href_list["open"]) - toggle_valve() - else if(attached_device) - if(href_list["rem_device"]) - attached_device.loc = get_turf(src) - attached_device:holder = null - attached_device = null - update_icon() - if(href_list["device"]) - attached_device.attack_self(usr) - - src.attack_self(usr) - src.add_fingerprint(usr) - return - return + if(href_list["device"]) + attached_device.attack_self(usr) + src.add_fingerprint(usr) + return 1 // Returning 1 sends an update to attached UIs /obj/item/device/transfer_valve/process_activation(var/obj/item/device/D) if(toggle) diff --git a/code/game/objects/items/weapons/tanks/tanks.dm b/code/game/objects/items/weapons/tanks/tanks.dm index e0e30e60cb..6cc4467882 100644 --- a/code/game/objects/items/weapons/tanks/tanks.dm +++ b/code/game/objects/items/weapons/tanks/tanks.dm @@ -1,3 +1,6 @@ +#define TANK_MAX_RELEASE_PRESSURE (3*ONE_ATMOSPHERE) +#define TANK_DEFAULT_RELEASE_PRESSURE 24 + /obj/item/weapon/tank name = "tank" icon = 'icons/obj/tank.dmi' @@ -24,8 +27,7 @@ src.air_contents.volume = volume //liters src.air_contents.temperature = T20C - processing_objects.Add(src) - + processing_objects.Add(src) return /obj/item/weapon/tank/Del() @@ -121,7 +123,10 @@ /obj/item/weapon/tank/attack_self(mob/user as mob) if (!(src.air_contents)) return - user.set_machine(src) + + ui_interact(user) + +/obj/item/weapon/tank/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null) var/using_internal if(istype(loc,/mob/living/carbon)) @@ -129,57 +134,69 @@ if(location.internal==src) using_internal = 1 - var/message = {" -Tank
-Tank Pressure: [air_contents.return_pressure()]
-
-Mask Release Pressure: - - [distribute_pressure] + +
-Mask Release Valve: [using_internal?("Open"):("Closed")] -"} - user << browse(message, "window=tank;size=600x300") - onclose(user, "tank") - return + // this is the data which will be sent to the ui + var/data[0] + data["tankPressure"] = round(air_contents.return_pressure() ? air_contents.return_pressure() : 0) + data["releasePressure"] = round(distribute_pressure ? distribute_pressure : 0) + data["defaultReleasePressure"] = round(TANK_DEFAULT_RELEASE_PRESSURE) + data["maxReleasePressure"] = round(TANK_MAX_RELEASE_PRESSURE) + data["valveOpen"] = using_internal ? 1 : 0 + + data["maskConnected"] = 0 + if(istype(loc,/mob/living/carbon)) + var/mob/living/carbon/location = loc + if(location.internal == src || (location.wear_mask && (location.wear_mask.flags & MASKINTERNALS))) + data["maskConnected"] = 1 + + // update the ui if it exists, returns null if no ui is passed/found + ui = nanomanager.try_update_ui(user, src, ui_key, ui, data) + if (!ui) + // the ui does not exist, so we'll create a new() one + // for a list of parameters and their descriptions see the code docs in \code\modules\nano\nanoui.dm + ui = new(user, src, ui_key, "tanks.tmpl", "Tank", 500, 300) + // when the ui is first opened this is the data it will use + ui.set_initial_data(data) + // open the new ui window + ui.open() + // auto update every Master Controller tick + ui.set_auto_update(1) /obj/item/weapon/tank/Topic(href, href_list) ..() if (usr.stat|| usr.restrained()) - return - if (src.loc == usr) - usr.set_machine(src) - if (href_list["dist_p"]) + return 0 + if (src.loc != usr) + return 0 + + if (href_list["dist_p"]) + if (href_list["dist_p"] == "reset") + src.distribute_pressure = TANK_DEFAULT_RELEASE_PRESSURE + else if (href_list["dist_p"] == "max") + src.distribute_pressure = TANK_MAX_RELEASE_PRESSURE + else var/cp = text2num(href_list["dist_p"]) src.distribute_pressure += cp - src.distribute_pressure = min(max(round(src.distribute_pressure), 0), 3*ONE_ATMOSPHERE) - if (href_list["stat"]) - if(istype(loc,/mob/living/carbon)) - var/mob/living/carbon/location = loc - if(location.internal == src) - location.internal = null + src.distribute_pressure = min(max(round(src.distribute_pressure), 0), TANK_MAX_RELEASE_PRESSURE) + if (href_list["stat"]) + if(istype(loc,/mob/living/carbon)) + var/mob/living/carbon/location = loc + if(location.internal == src) + location.internal = null + location.internals.icon_state = "internal0" + usr << "\blue You close the tank release valve." + if (location.internals) location.internals.icon_state = "internal0" - usr << "\blue You close the tank release valve." + else + if(location.wear_mask && (location.wear_mask.flags & MASKINTERNALS)) + location.internal = src + usr << "\blue You open \the [src] valve." if (location.internals) - location.internals.icon_state = "internal0" + location.internals.icon_state = "internal1" else - if(location.wear_mask && (location.wear_mask.flags & MASKINTERNALS)) - location.internal = src - usr << "\blue You open \the [src] valve." - if (location.internals) - location.internals.icon_state = "internal1" - else - usr << "\blue You need something to connect to \the [src]." + usr << "\blue You need something to connect to \the [src]." - src.add_fingerprint(usr) -/* - * the following is needed for a tank lying on the floor. But currently we restrict players to use not weared tanks as intrals. --rastaf - for(var/mob/M in viewers(1, src.loc)) - if ((M.client && M.machine == src)) - src.attack_self(M) -*/ - src.attack_self(usr) - else - usr << browse(null, "window=tank") - return - return + src.add_fingerprint(usr) + return 1 /obj/item/weapon/tank/remove_air(amount) diff --git a/nano/css/shared.css b/nano/css/shared.css index a2c74ef939..d044cf019f 100644 --- a/nano/css/shared.css +++ b/nano/css/shared.css @@ -13,7 +13,7 @@ hr { } .link, .linkOn, .linkOff, .selected, .disabled { float: left; - min-width: 40px; + min-width: 15px; height: 16px; text-align: center; color: #ffffff; @@ -174,6 +174,14 @@ h4 { .dark { color: #272727; } +.noticePlaceholder { + position: relative; + font-size: 12px; + font-style: italic; + font-weight: bold; + padding: 3px 4px 3px 4px; + margin: 4px 0 4px 0; +} .notice { position: relative; background: url(uiNoticeBackground.jpg) 50% 50%; diff --git a/nano/templates/apc.tmpl b/nano/templates/apc.tmpl index 56c6a1f1ee..82dc2175a1 100644 --- a/nano/templates/apc.tmpl +++ b/nano/templates/apc.tmpl @@ -61,10 +61,11 @@ Power cell removed. {{else}} + + {{:~displayBar(powerCellStatus, 0, 100, powerCellStatus >= 50 ? 'good' : powerCellStatus >= 25 ? 'average' : 'bad')}}
{{:~round(powerCellStatus*10)/10}}%
- {{:~displayBar(powerCellStatus, 0, 100, powerCellStatus >= 50 ? 'good' : powerCellStatus >= 25 ? 'average' : 'bad')}} {{/if}} diff --git a/nano/templates/canister.tmpl b/nano/templates/canister.tmpl new file mode 100644 index 0000000000..3bd69a4a9b --- /dev/null +++ b/nano/templates/canister.tmpl @@ -0,0 +1,83 @@ +

Tank Status

+
+
+ Tank Label: +
+
+
{{:name}}
{{:~link('Relabel', 'pencil', {'relabel' : 1}, (canLabel) ? null : 'disabled')}} +
+
+ +
+
+ Tank Pressure: +
+
+ {{:tankPressure}} kPa +
+
+ +
+
+ Port Status: +
+
+ {{:portConnected ? 'Connected' : 'Disconnected'}} +
+
+ +

Holding Tank Status

+{{if hasHoldingTank}} +
+
+ Tank Label: +
+
+
{{:holdingTank.name}}
{{:~link('Eject', 'eject', {'remove_tank' : 1})}} +
+
+ +
+
+ Tank Pressure: +
+
+ {{:holdingTank.tankPressure}} kPa +
+
+{{else}} +
No holding tank inserted.
+
 
+{{/if}} + + +

Release Valve Status

+
+
+ Release Pressure: +
+
+ {{:~displayBar(releasePressure, minReleasePressure, maxReleasePressure)}} +
+ {{:~link('-', null, {'pressure_adj' : -1000}, (releasePressure > minReleasePressure) ? null : 'disabled')}} + {{:~link('-', null, {'pressure_adj' : -100}, (releasePressure > minReleasePressure) ? null : 'disabled')}} + {{:~link('-', null, {'pressure_adj' : -10}, (releasePressure > minReleasePressure) ? null : 'disabled')}} + {{:~link('-', null, {'pressure_adj' : -1}, (releasePressure > minReleasePressure) ? null : 'disabled')}} +
 {{:releasePressure}} kPa 
+ {{:~link('+', null, {'pressure_adj' : 1}, (releasePressure < maxReleasePressure) ? null : 'disabled')}} + {{:~link('+', null, {'pressure_adj' : 10}, (releasePressure < maxReleasePressure) ? null : 'disabled')}} + {{:~link('+', null, {'pressure_adj' : 100}, (releasePressure < maxReleasePressure) ? null : 'disabled')}} + {{:~link('+', null, {'pressure_adj' : 1000}, (releasePressure < maxReleasePressure) ? null : 'disabled')}} +
+
+
+ +
+
+ Release Valve: +
+
+ {{:~link('Open', 'unlocked', {'toggle' : 1}, valveOpen ? 'selected' : null)}}{{:~link('Close', 'locked', {'toggle' : 1}, valveOpen ? null : 'selected')}} +
+
+ diff --git a/nano/templates/tanks.tmpl b/nano/templates/tanks.tmpl new file mode 100644 index 0000000000..af7ab874f6 --- /dev/null +++ b/nano/templates/tanks.tmpl @@ -0,0 +1,47 @@ +{{if maskConnected}} +
This tank is connected to a mask.
+{{else}} +
This tank is NOT connected to a mask.
+{{/if}} + +
+
+ Tank Pressure: +
+
+ {{:~displayBar(tankPressure, 0, 1013, (tankPressure > 200) ? 'good' : (tankPressure > 100) ? 'average' : 'bad'))}} +
+ {{:tankPressure}} kPa +
+
+
+ +
 
+ +
+
+ Mask Release Pressure: +
+
+ {{:~displayBar(releasePressure, 0, maxReleasePressure, (releasePressure >= 23) ? null : ((releasePressure >= 17) ? 'average' : 'bad'))}} +
+ {{:~link('-', null, {'dist_p' : -10}, (releasePressure > 0) ? null : 'disabled')}} + {{:~link('-', null, {'dist_p' : -1}, (releasePressure > 0) ? null : 'disabled')}} +
 {{:releasePressure}} kPa 
+ {{:~link('+', null, {'dist_p' : 1}, (releasePressure < maxReleasePressure) ? null : 'disabled')}} + {{:~link('+', null, {'dist_p' : 10}, (releasePressure < maxReleasePressure) ? null : 'disabled')}} + {{:~link('Max', null, {'dist_p' : 'max'}, (releasePressure < maxReleasePressure) ? null : 'disabled')}} + {{:~link('Reset', null, {'dist_p' : 'reset'}, (releasePressure != defaultReleasePressure) ? null : 'disabled')}} +
+
+
+ +
+
+ Mask Release Valve: +
+
+ {{:~link('Open', 'unlocked', {'stat' : 1}, (!maskConnected) ? 'disabled' : (valveOpen ? 'selected' : null))}}{{:~link('Close', 'locked', {'stat' : 1}, valveOpen ? null : 'selected')}} +
+
+ diff --git a/nano/templates/transfer_valve.tmpl b/nano/templates/transfer_valve.tmpl new file mode 100644 index 0000000000..c2d957652a --- /dev/null +++ b/nano/templates/transfer_valve.tmpl @@ -0,0 +1,53 @@ +
+
+ Attachment One: +
+
+ {{if attachmentOne}} + {{:attachmentOne}} + {{else}} + None + {{/if}} + {{:~link('Remove', 'eject', {'tankone' : 1}, attachmentOne ? null : 'disabled')}} +
+
+ +
+
+ Attachment Two: +
+
+ {{if attachmentTwo}} + {{:attachmentTwo}} + {{else}} + None + {{/if}} + {{:~link('Remove', 'eject', {'tanktwo' : 1}, attachmentTwo ? null : 'disabled')}} +
+
+ +
+
+ Valve Attachment: +
+
+ {{if valveAttachment}} + {{:valveAttachment}} + {{else}} + None + {{/if}} + {{:~link('Remove', 'eject', {'rem_device' : 1}, valveAttachment ? null : 'disabled')}} +
+
+ +
 
+ +
+
+ Valve Status: +
+
+ {{:~link('Open', 'unlocked', {'open' : 1}, (!attachmentOne || !attachmentTwo) ? 'disabled' : (valveOpen ? 'selected' : null))}}{{:~link('Close', 'locked', {'open' : 1}, (!attachmentOne || !attachmentTwo) ? 'disabled' : (valveOpen ? null : 'selected'))}} +
+
+ From 8e510d7fd20ac5ada11cd8b370f07106c04d11d8 Mon Sep 17 00:00:00 2001 From: RKF45 Date: Wed, 15 Jan 2014 22:16:42 +0100 Subject: [PATCH 42/45] Uncommitted .int --- baystation12.int | 3 --- 1 file changed, 3 deletions(-) diff --git a/baystation12.int b/baystation12.int index 78739f29d7..b82874fded 100644 --- a/baystation12.int +++ b/baystation12.int @@ -1,9 +1,6 @@ // BEGIN_INTERNALS /* MAP_ICON_TYPE: 0 -WINDOW: code\game\objects\effects\decals\remains.dm -DIR: code code\game code\game\objects code\game\objects\effects code\game\objects\effects\decals code\game\objects\effects\decals\posters -FILE: code\game\objects\effects\decals\remains.dm AUTO_FILE_DIR: OFF */ // END_INTERNALS From 30f2d49f013508c3f740f02338570a678aa82e3c Mon Sep 17 00:00:00 2001 From: RKF45 Date: Wed, 15 Jan 2014 22:45:10 +0100 Subject: [PATCH 43/45] Quotes inside strings confuse and scare me. --- code/game/objects/effects/decals/posters/bs12.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/game/objects/effects/decals/posters/bs12.dm b/code/game/objects/effects/decals/posters/bs12.dm index 82f76dee2b..8629c4fb73 100644 --- a/code/game/objects/effects/decals/posters/bs12.dm +++ b/code/game/objects/effects/decals/posters/bs12.dm @@ -142,4 +142,4 @@ /datum/poster/bay_29 icon_state="bsposter29" name = "Winter Is Coming" - desc = "On the poster is a frighteningly large wolf, he warns: \"Only YOU can keep the station from freezing during planetary occultation!"\" \ No newline at end of file + desc = "On the poster is a frighteningly large wolf, he warns: \"Only YOU can keep the station from freezing during planetary occultation!\"" \ No newline at end of file From 171e63a66fb8f6a2efe55270eafa7262ab278199 Mon Sep 17 00:00:00 2001 From: Ccomp5950 Date: Wed, 15 Jan 2014 17:33:13 -0600 Subject: [PATCH 44/45] Moved Supermatter.dm out of the WorkInProgress directory. --- baystation12.dme | 2 +- .../Supermatter.dm => modules/supermatter/supermatter.dm} | 0 2 files changed, 1 insertion(+), 1 deletion(-) rename code/{WorkInProgress/Yinadele/Supermatter.dm => modules/supermatter/supermatter.dm} (100%) diff --git a/baystation12.dme b/baystation12.dme index 3da2cd16b5..b1f4bfbe2d 100644 --- a/baystation12.dme +++ b/baystation12.dme @@ -1249,6 +1249,7 @@ #include "code\modules\scripting\Scanner\Tokens.dm" #include "code\modules\security levels\keycard authentication.dm" #include "code\modules\security levels\security levels.dm" +#include "code\modules\supermatter\supermatter.dm" #include "code\modules\surgery\appendix.dm" #include "code\modules\surgery\bones.dm" #include "code\modules\surgery\braincore.dm" @@ -1322,7 +1323,6 @@ #include "code\WorkInProgress\Ported\policetape.dm" #include "code\WorkInProgress\SkyMarshal\officer_stuff.dm" #include "code\WorkInProgress\SkyMarshal\Ultralight_procs.dm" -#include "code\WorkInProgress\Yinadele\Supermatter.dm" #include "code\ZAS\Airflow.dm" #include "code\ZAS\Connection.dm" #include "code\ZAS\Debug.dm" diff --git a/code/WorkInProgress/Yinadele/Supermatter.dm b/code/modules/supermatter/supermatter.dm similarity index 100% rename from code/WorkInProgress/Yinadele/Supermatter.dm rename to code/modules/supermatter/supermatter.dm From 1f7cbfbff48dc310f87c0b2b60e2e7e29c532b92 Mon Sep 17 00:00:00 2001 From: Ccomp5950 Date: Wed, 15 Jan 2014 20:22:50 -0600 Subject: [PATCH 45/45] Supermatter update. Now gives an instability% warning in it's messages. Limited the "If they can see it and aren't wearing mesons, have some hallucinations" range to a max of 7 Can't be pelted with lasers while out in space allowing for unlimited power only to drag it back on a turf and instantly explode. Removed extra if(!removed) check, we already checked for that above. Moved the oxygen ratio variable "oxygen" to be declared under the object instead of it's process proc for easier debugging. Changed the alert interval. Add luminosity value so the big glowing shard of supermatter actually generates light. --- code/modules/supermatter/supermatter.dm | 27 ++++++++++++++++--------- 1 file changed, 17 insertions(+), 10 deletions(-) diff --git a/code/modules/supermatter/supermatter.dm b/code/modules/supermatter/supermatter.dm index 32fe1c1cb0..a83723583b 100644 --- a/code/modules/supermatter/supermatter.dm +++ b/code/modules/supermatter/supermatter.dm @@ -11,7 +11,7 @@ #define DETONATION_HALLUCINATION 600 -#define WARNING_DELAY 60 //45 seconds between warnings. +#define WARNING_DELAY 30 //seconds between warnings. /obj/machinery/power/supermatter name = "Supermatter" @@ -20,6 +20,7 @@ icon_state = "darkmatter" density = 1 anchored = 0 + luminosity = 4 var/gasefficency = 0.25 @@ -39,9 +40,10 @@ var/explosion_power = 8 var/lastwarning = 0 // Time in 1/10th of seconds since the last sent warning - var/power = 0 + var/oxygen = 0 // Moving this up here for easier debugging. + //Temporary values so that we can optimize this //How much the bullets damage should be multiplied by when it is added to the internal variables var/config_bullet_energy = 2 @@ -102,21 +104,20 @@ power = min(power, 1600) return 1 - if (!removed) - return 1 - damage_archived = damage damage = max( damage + ( (removed.temperature - 800) / 150 ) , 0 ) if(damage > warning_point) // while the core is still damaged and it's still worth noting its status if((world.timeofday - lastwarning) / 10 >= WARNING_DELAY) - + var/stability = num2text(round((damage / explosion_point) * 100)) + if(damage > emergency_point) - radio.autosay(emergency_alert, "Supermatter Monitor") + + radio.autosay(addtext(emergency_alert, " Stability: ",stability,"%"), "Supermatter Monitor") lastwarning = world.timeofday else if(damage >= damage_archived) // The damage is still going up - radio.autosay(warning_alert, "Supermatter Monitor") + radio.autosay(addtext(warning_alert," Stability: ",stability,"%"), "Supermatter Monitor") lastwarning = world.timeofday - 150 else // Phew, we're safe @@ -135,7 +136,7 @@ //Ok, 100% oxygen atmosphere = best reaction //Maxes out at 100% oxygen pressure - var/oxygen = max(min((removed.oxygen - (removed.nitrogen * NITROGEN_RETARDATION_FACTOR)) / MOLES_CELLSTANDARD, 1), 0) + oxygen = max(min((removed.oxygen - (removed.nitrogen * NITROGEN_RETARDATION_FACTOR)) / MOLES_CELLSTANDARD, 1), 0) var/temp_factor = 100 @@ -174,7 +175,7 @@ env.merge(removed) - for(var/mob/living/carbon/human/l in view(src, round(power ** 0.25))) // you have to be seeing the core to get hallucinations + for(var/mob/living/carbon/human/l in view(src, min(7, round(power ** 0.25)))) // If they can see it without mesons on. Bad on them. if(!istype(l.glasses, /obj/item/clothing/glasses/meson)) l.hallucination = max(0, min(200, l.hallucination + power * config_hallucination_power * sqrt( 1 / get_dist(l, src) ) ) ) @@ -188,6 +189,12 @@ /obj/machinery/power/supermatter/bullet_act(var/obj/item/projectile/Proj) + var/turf/L = loc + if(!istype(L)) // We don't run process() when we are in space + return 0 // This stops people from being able to really power up the supermatter + // Then bring it inside to explode instantly upon landing on a valid turf. + + if(Proj.flag != "bullet") power += Proj.damage * config_bullet_energy else