From 74b90c6e8424468f42a9b09c42a71eb3fe2b4851 Mon Sep 17 00:00:00 2001 From: "bizarre.babel@gmail.com" Date: Fri, 18 Mar 2011 16:08:46 +0000 Subject: [PATCH] Robotic Transformation's cure simplified so that maybe it'll work now. Cyborgs are a job available at round start. They have randomized cyborg names and half capacity batteries so that they aren't as good as made cyborgs right off the bat. Two slots. They are intended to start in AI Foyer: for whatever reason, THIS IS NOT WORKING. The cyborgs start on the title screen. I don't know how to fix it and I've given up on trying so that I don't make it worse. Someone more brilliant handle it please! Green labcoat and green glasses are on the map in the theater. Medbay front desk flip-turned upside down. Anyone who approaches should see and be seen by whomever's manning it sooner. With that, the new sign, and the downplayed doctor entrance, I'm hoping the exam room will be emphasized more and it will actually see some use. Exam room has shutters. The button is all access so you can't be trapped in there save the usual ways of power failure and the like. The door facing the hall is all access as well, which, again, should encourage people to use the room. The door to medbay requires doctor access and has no shutter under it so that doctors can watch doctors watching patients. Watching the watchmen sort of thing. Added a special kind of dropper for the service borg to use so he's not mixing the tiniest drinks ever. It holds and pumps with the size of a normal pour that a human hand could do into a bottle. Added a special kind of roburger with plenty of bites for use as a traitor unlock for an emagged service cyborg. The e-sword was too robust. Roburger should work out better because of its delay, its chance for failure, and it's now higher possibility of cure. It's also a nice novelty ability and thematically linked to the service cyborg itself. Changelog updated with most recent player-important changes. If I missed something that should have been included, then I am a buttface and please tell me so. git-svn-id: http://tgstation13.googlecode.com/svn/trunk@1203 316c924e-a436-60f5-8080-3fe189b3f50e --- code/WorkInProgress/Chemistry-Tools.dm | 64 ++++++++++++++++++ .../datums/diseases/robotic_transformation.dm | 4 +- code/defines/global.dm | 3 +- code/defines/obj.dm | 9 +++ code/defines/obj/clothing/glasses.dm | 6 ++ code/defines/obj/clothing/suit.dm | 4 +- code/game/jobs/jobprocs.dm | 20 ++---- code/game/jobs/jobs.dm | 2 +- .../mob/living/silicon/robot/robot_modules.dm | 6 +- code/modules/mob/new_player/new_player.dm | 6 +- icons/changelog.html | 32 ++++++++- icons/mob/eyes.dmi | Bin 3085 -> 2861 bytes tgstation.dme | 2 +- 13 files changed, 131 insertions(+), 27 deletions(-) diff --git a/code/WorkInProgress/Chemistry-Tools.dm b/code/WorkInProgress/Chemistry-Tools.dm index b9d763308373b..83d13b342d280 100644 --- a/code/WorkInProgress/Chemistry-Tools.dm +++ b/code/WorkInProgress/Chemistry-Tools.dm @@ -530,6 +530,60 @@ icon_state = "dropper[filled]" return + +/obj/item/weapon/reagent_containers/robodropper + name = "Industrial Dropper" + desc = "A larger dropper. Transfers 10 units." + icon = 'chemical.dmi' + icon_state = "dropper0" + amount_per_transfer_from_this = 10 + possible_transfer_amounts = list(1,2,3,4,5,6,7,8,9,10) + volume = 10 + var/filled = 0 + + afterattack(obj/target, mob/user , flag) + if(!target.reagents) return + + if(filled) + + if(target.reagents.total_volume >= target.reagents.maximum_volume) + user << "\red [target] is full." + return + + if(!target.is_open_container() && !ismob(target) && !istype(target,/obj/item/weapon/reagent_containers/food)) //You can inject humans and food but you cant remove the shit. + user << "\red You cannot directly fill this object." + return + + if(ismob(target)) + for(var/mob/O in viewers(world.view, user)) + O.show_message(text("\red [] drips something onto []!", user, target), 1) + src.reagents.reaction(target, TOUCH) + + var/trans = src.reagents.trans_to(target, amount_per_transfer_from_this) + user << "\blue You transfer [trans] units of the solution." + if (src.reagents.total_volume<=0) + filled = 0 + icon_state = "dropper[filled]" + + else + + if(!target.is_open_container() && !istype(target,/obj/reagent_dispensers)) + user << "\red You cannot directly remove reagents from [target]." + return + + if(!target.reagents.total_volume) + user << "\red [target] is empty." + return + + var/trans = target.reagents.trans_to(src, amount_per_transfer_from_this) + + user << "\blue You fill the dropper with [trans] units of the solution." + + filled = 1 + icon_state = "dropper[filled]" + + return + //////////////////////////////////////////////////////////////////////////////// /// Droppers. END //////////////////////////////////////////////////////////////////////////////// @@ -1572,6 +1626,16 @@ reagents.add_reagent("nanites", 10) bitesize = 3 + +/obj/item/weapon/reagent_containers/food/snacks/roburgerbig + name = "roburger" + desc = "This massive patty looks like poison. Beep." + icon_state = "roburger" + New() + ..() + reagents.add_reagent("nanites", 100) + bitesize = 1 + /obj/item/weapon/reagent_containers/food/snacks/xenoburger name = "xenoburger" desc = "Smells caustic. Tastes like heresy." diff --git a/code/datums/diseases/robotic_transformation.dm b/code/datums/diseases/robotic_transformation.dm index f3b7f81891fae..4c533afe03420 100644 --- a/code/datums/diseases/robotic_transformation.dm +++ b/code/datums/diseases/robotic_transformation.dm @@ -5,8 +5,8 @@ max_stages = 5 spread = "Syringe" spread_type = SPECIAL - cure = "A tincture of Radium and Copper." - cure_id = list("radium","copper") + cure = "An injection of copper." + cure_id = list("copper") cure_chance = 5 agent = "R2D2 Nanomachines" affected_species = list("Human") diff --git a/code/defines/global.dm b/code/defines/global.dm index beeee32af53a2..f31a504f33310 100644 --- a/code/defines/global.dm +++ b/code/defines/global.dm @@ -71,7 +71,7 @@ var enter_allowed = 1 shuttle_frozen = 0 shuttle_left = 0 - tinted_weldhelh = 1 //as soon as the thing is sprited, we'll code in the toggle verb, bot for now, it should stay on by default. -errorage + tinted_weldhelh = 0 //as soon as the thing is sprited, we'll code in the toggle verb, bot for now, it should stay on by default. -errorage //Until you have the actual functionality for it, don't set this on by default. You're putting the cart before the horse. --DH captainMax = 1 engineerMax = 5 @@ -103,6 +103,7 @@ var cmoMax = 1 mimeMax = 1 sorterMax = 2 + borgMax = 2 list/bombers = list( ) list/admin_log = list ( ) diff --git a/code/defines/obj.dm b/code/defines/obj.dm index 561e54218cd86..e11a8e4a04015 100644 --- a/code/defines/obj.dm +++ b/code/defines/obj.dm @@ -204,6 +204,15 @@ opacity = 0 density = 0 +/obj/sign/examroom + desc = "A guidance sign which reads 'EXAM ROOM'" + name = "EXAM" + icon = 'decals.dmi' + icon_state = "examroom" + anchored = 1.0 + opacity = 0 + density = 0 + /obj/sign/vacuum desc = "A warning sign which reads 'HARD VACUUM AHEAD'" name = "HARD VACUUM AHEAD" diff --git a/code/defines/obj/clothing/glasses.dm b/code/defines/obj/clothing/glasses.dm index 8663bb5bc5055..a7e889cfa88fa 100644 --- a/code/defines/obj/clothing/glasses.dm +++ b/code/defines/obj/clothing/glasses.dm @@ -22,6 +22,12 @@ icon_state = "glasses" item_state = "glasses" +/obj/item/clothing/glasses/gglasses + name = "Green Glasses" + desc = "Forest green glasses, like the kind you'd wear when hatching a nasty scheme." + icon_state = "gglasses" + item_state = "gglasses" + /obj/item/clothing/glasses/sunglasses desc = "Strangely ancient technology used to help provide rudimentary eye cover. Enhanced shielding blocks many flashes." name = "Sunglasses" diff --git a/code/defines/obj/clothing/suit.dm b/code/defines/obj/clothing/suit.dm index ce3e20d60031e..dfcdbdd03d15b 100644 --- a/code/defines/obj/clothing/suit.dm +++ b/code/defines/obj/clothing/suit.dm @@ -92,8 +92,8 @@ /obj/item/clothing/suit/labcoat/mad name = "The Mad's labcoat" desc = "It makes you look capable of konking someone on the noggin and shooting them into space." - icon_state = "labcoat_cmo" - item_state = "labcoat_cmo" + icon_state = "labgreen" + item_state = "labgreen" /obj/item/clothing/suit/straight_jacket name = "straight jacket" diff --git a/code/game/jobs/jobprocs.dm b/code/game/jobs/jobprocs.dm index bd3486615880d..aa95cbf76694a 100644 --- a/code/game/jobs/jobprocs.dm +++ b/code/game/jobs/jobprocs.dm @@ -282,7 +282,7 @@ //The two procs below allow the Chaplain to choose their religion. All it really does is change their bible. spawn(0) var/religion_name = "Imperium" - var/new_religion = input(src, "You are the Chaplain. Would you like to change your religion? Default is the Bible.", "Name change", religion_name) + var/new_religion = input(src, "You are the Chaplain. Would you like to change your religion? Default is the Imperial Cult.", "Name change", religion_name) if ((length(new_religion) == 0) || (new_religion == "Imperium")) new_religion = religion_name @@ -330,7 +330,6 @@ src.equip_if_possible(new /obj/item/clothing/shoes/black(src), slot_shoes) if ("Clown") -// src.equip_if_possible(new /obj/item/weapon/storage/backpack(src), slot_back) src.equip_if_possible(new /obj/item/weapon/storage/backpack/clown (src), slot_back) src.equip_if_possible(new /obj/item/device/pda/clown(src), slot_belt) src.equip_if_possible(new /obj/item/clothing/under/rank/clown(src), slot_w_uniform) @@ -363,7 +362,6 @@ src.equip_if_possible(new /obj/item/clothing/shoes/orange(src), slot_shoes) src.equip_if_possible(new /obj/item/weapon/storage/toolbox/mechanical(src), slot_l_hand) src.equip_if_possible(new /obj/item/clothing/gloves/yellow(src), slot_gloves) - //src.equip_if_possible(new /obj/item/weapon/crowbar(src), slot_in_backpack) // - commented out, why would you need this when you spawn with a blue toolbox - muskets src.equip_if_possible(new /obj/item/device/t_scanner(src), slot_r_store) if ("Shaft Miner") @@ -413,13 +411,11 @@ src.equip_if_possible(new /obj/item/clothing/head/caphat(src), slot_head) src.equip_if_possible(new /obj/item/clothing/glasses/sunglasses(src), slot_glasses) // src.equip_if_possible(new /obj/item/weapon/gun/taser_gun(src), slot_belt) -// src.equip_if_possible(new /obj/item/weapon/gun/energy/laser_gun(src), slot_in_backpack) src.equip_if_possible(new /obj/item/weapon/storage/id_kit(src), slot_in_backpack) if ("Security Officer") src.equip_if_possible(new /obj/item/device/radio/headset/headset_sec (src), slot_ears) // -- TLE -// src.equip_if_possible(new /obj/item/weapon/storage/backpack(src), slot_back) src.equip_if_possible(new /obj/item/weapon/storage/backpack/security (src), slot_back) src.equip_if_possible(new /obj/item/device/pda/security(src), slot_belt) src.equip_if_possible(new /obj/item/clothing/under/color/red(src), slot_w_uniform) @@ -436,7 +432,6 @@ if ("Warden") src.equip_if_possible(new /obj/item/device/radio/headset/headset_sec (src), slot_ears) // -- TLE -// src.equip_if_possible(new /obj/item/weapon/storage/backpack(src), slot_back) src.equip_if_possible(new /obj/item/weapon/storage/backpack/security (src), slot_back) src.equip_if_possible(new /obj/item/device/pda/security(src), slot_belt) src.equip_if_possible(new /obj/item/clothing/under/rank/warden(src), slot_w_uniform) @@ -455,8 +450,6 @@ src.equip_if_possible(new /obj/item/device/pda/toxins(src), slot_belt) src.equip_if_possible(new /obj/item/clothing/under/rank/scientist(src), slot_w_uniform) src.equip_if_possible(new /obj/item/clothing/shoes/white(src), slot_shoes) -// src.equip_if_possible(new /obj/item/clothing/suit/bio_suit/scientist(src), slot_wear_suit) -// src.equip_if_possible(new /obj/item/clothing/head/bio_hood/scientist(src), slot_head) src.equip_if_possible(new /obj/item/clothing/mask/gas(src), slot_wear_mask) src.equip_if_possible(new /obj/item/weapon/tank/air(src), slot_l_hand) @@ -485,7 +478,6 @@ src.equip_if_possible(new /obj/item/clothing/head/helmet(src), slot_head) // src.equip_if_possible(new /obj/item/clothing/glasses/sunglasses(src), slot_glasses) // src.equip_if_possible(new /obj/item/weapon/gun/taser_gun(src), slot_belt) -// src.equip_if_possible(new /obj/item/weapon/gun/energy/laser_gun(src), slot_in_backpack) src.equip_if_possible(new /obj/item/weapon/storage/id_kit(src), slot_in_backpack) // src.equip_if_possible(new /obj/item/device/flash(src), slot_l_store) @@ -495,7 +487,6 @@ src.equip_if_possible(new /obj/item/clothing/under/rank/atmospheric_technician(src), slot_w_uniform) src.equip_if_possible(new /obj/item/clothing/shoes/black(src), slot_shoes) src.equip_if_possible(new /obj/item/weapon/storage/toolbox/mechanical(src), slot_l_hand) -// src.equip_if_possible(new /obj/item/weapon/crowbar(src), slot_in_backpack) // same as with engineers, WHY if ("Barman") src.equip_if_possible(new /obj/item/clothing/under/rank/bartender(src), slot_w_uniform) @@ -519,14 +510,11 @@ src.equip_if_possible(new /obj/item/clothing/under/rank/roboticist(src), slot_w_uniform) src.equip_if_possible(new /obj/item/clothing/shoes/black(src), slot_shoes) src.equip_if_possible(new /obj/item/weapon/storage/backpack(src), slot_back) - src.equip_if_possible(new /obj/item/clothing/suit/labcoat(src), slot_wear_suit) // No longer medical or research, so away it goes! //Same person who took it away has returned it. -// src.equip_if_possible(new /obj/item/weapon/crowbar(src), slot_in_backpack) //another job with toolbox and this + src.equip_if_possible(new /obj/item/clothing/suit/labcoat(src), slot_wear_suit) src.equip_if_possible(new /obj/item/clothing/gloves/black(src), slot_gloves) src.equip_if_possible(new /obj/item/weapon/storage/toolbox/mechanical(src), slot_l_hand) if ("Botanist") -// src.equip_if_possible(new /obj/item/device/radio/headset/headset_med (src), slot_ears) -// src.equip_if_possible(new /obj/item/device/pda/medical(src), slot_belt) src.equip_if_possible(new /obj/item/clothing/under/rank/hydroponics(src), slot_w_uniform) src.equip_if_possible(new /obj/item/clothing/shoes/black(src), slot_shoes) src.equip_if_possible(new /obj/item/clothing/gloves/botanic_leather(src), slot_gloves) @@ -554,7 +542,6 @@ src.equip_if_possible(new /obj/item/device/pda/quartermaster(src), slot_belt) src.equip_if_possible(new /obj/item/clothing/glasses/sunglasses(src), slot_glasses) src.equip_if_possible(new /obj/item/weapon/clipboard(src), slot_l_hand) - //src.equip_if_possible(new /obj/item/clothing/suit/exo_suit(src), slot_wear_suit) if ("Cargo Technician") src.equip_if_possible(new /obj/item/device/radio/headset/headset_cargo(src), slot_ears) @@ -608,6 +595,9 @@ src.equip_if_possible(new /obj/item/clothing/suit/labcoat(src), slot_wear_suit) src.equip_if_possible(new /obj/item/device/flashlight/pen(src), slot_r_store) + if ("Cyborg") + Robotize() + else src << "RUH ROH! Your job is [rank] and the game just can't handle it! Please report this bug to an administrator." diff --git a/code/game/jobs/jobs.dm b/code/game/jobs/jobs.dm index 9a5fd53db7db7..74ab6cd35cee9 100644 --- a/code/game/jobs/jobs.dm +++ b/code/game/jobs/jobs.dm @@ -14,7 +14,7 @@ var/list/occupations = list( "Research Director", "Chaplain", "Roboticist", -// "Cyborg","Cyborg","Cyborg" // -- The goons have a good idea with this. Why doesn't the AI start with cyborgs? There's people killing themselves to be cyborgs have the time anyway at round start. + "Cyborg","Cyborg", // --DH "AI", "Barman", "Chef", diff --git a/code/modules/mob/living/silicon/robot/robot_modules.dm b/code/modules/mob/living/silicon/robot/robot_modules.dm index aeb598b16df98..bbce5e015a150 100644 --- a/code/modules/mob/living/silicon/robot/robot_modules.dm +++ b/code/modules/mob/living/silicon/robot/robot_modules.dm @@ -101,11 +101,11 @@ src.modules += new /obj/item/weapon/spacecash(src) src.modules += new /obj/item/weapon/pen(src) src.modules += new /obj/item/weapon/paper(src) - src.modules += new /obj/item/weapon/reagent_containers/dropper(src) + src.modules += new /obj/item/weapon/reagent_containers/robodropper(src) src.modules += new /obj/item/weapon/tray(src) src.modules += new /obj/item/weapon/reagent_containers/food/drinks/shaker(src) - src.emag = new /obj/item/weapon/sword(src) - src.emag.name = "Helper's Little Helper" + src.emag = new /obj/item/weapon/reagent_containers/food/snacks/roburgerbig(src) + src.emag.name = "Last Meal" /obj/item/weapon/robot_module/security/New() diff --git a/code/modules/mob/new_player/new_player.dm b/code/modules/mob/new_player/new_player.dm index b4badec5e9ab1..36f992e4c0bc2 100644 --- a/code/modules/mob/new_player/new_player.dm +++ b/code/modules/mob/new_player/new_player.dm @@ -236,6 +236,8 @@ mob/new_player AttemptLateSpawn("Mime", mimeMax) if ("31") AttemptLateSpawn("Mail Sorter", sorterMax) + if ("32") + AttemptLateSpawn("Cyborg", borgMax) if(!ready && href_list["preferences"]) preferences.process_link(src, href_list) @@ -325,7 +327,7 @@ mob/new_player data_core.security += S return -// This fxn creates positions for assistants based on existing positions. This could be more elgant. +// This fxn creates positions for assistants based on existing positions. This could be more elegant. proc/LateChoices() var/dat = "" dat += "Choose from the following open positions:
" @@ -410,6 +412,8 @@ mob/new_player dat += "Shaft Miner
" if (IsJobAvailable("Mail Sorter",sorterMax)) dat += "Mail Sorter (BETA)
" + if (IsJobAvailable("Cyborg",borgMax)) + dat += "Cyborg
" if (!jobban_isbanned(src,"Assistant")) dat += "Assistant
" diff --git a/icons/changelog.html b/icons/changelog.html index 38923fb6ebf64..36e5126083ca5 100644 --- a/icons/changelog.html +++ b/icons/changelog.html @@ -45,6 +45,36 @@

Changelog

(is. code improvements for expandability, etc.) should not be listed here. They should be listed in the changelog upon commit tho. Thanks. --> +18 March 2011 +
  • Errorage updated: +
      +
    • You can now use the me command for emotes! It works the same as say "*custom" set to visible.
    • +
    • There is now a wave emote.
    • +
    • Enjoy your tea!
    • +
    +
  • +
  • Deeaych updated: +
      +
    • The exam room has some extra prominence and features.
    • +
    • A new costume for the clown or mime to enjoy.
    • +
    • Service Cyborgs can be picked! Shaker, dropper, tray, pen, paper, and DOSH to show their class off. When emagged, the friendly butler-borg is able to serve up a deadly last meal.
    • +
    • It should now be possible to spawn as a cyborg at round start. Spawned cyborgs have a lower battery life than created cyborgs and begin the round in the AI Foyer.
    • +
    +
  • +
  • Rastaf0 updated: +
      +
    • Fixed an issue with examining several objects in your hands (such as beakers).
    • +
    • Fixed bug with random last name being empty in rare cases.
    • +
    +
  • +
  • hunterluthi updated: +
      +
    • It is now possible to make 3x3 sets of tables.
    • +
    • Fixed some missplaced grilles/lattices on the port solar.
    • +
    • There is now a breakroom for the station and atmos engineers. It has everything an intelligent young engineer needs. Namely, Cheesy Honkers and arcade games.
    • +
    +
  • +
    15 March 2011, International Day Against Police Brutality
    • Errorage updated: @@ -85,7 +115,7 @@

      Changelog

    -6 March 2011, Errorage's birthday +6 March 2011
    • Neo updated:
        diff --git a/icons/mob/eyes.dmi b/icons/mob/eyes.dmi index 76ebccaf29d9b478a4a3a0872adaa800a388fc28..06c2298268dd9e9047b26755a4675dd2d1e51aa2 100644 GIT binary patch literal 2861 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 BITHW? literal 3085 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