diff --git a/code/_onclick/hud/human.dm b/code/_onclick/hud/human.dm index c0dc87b1c0d..cf9d38a6b4b 100644 --- a/code/_onclick/hud/human.dm +++ b/code/_onclick/hud/human.dm @@ -517,19 +517,13 @@ hud_used.item_action_list = list() for(var/obj/item/I in src) - if(istype(I,/obj/item/clothing/under)) - var/obj/item/clothing/under/U = I - if(U.hastie) - I = U.hastie if(I.icon_action_button) var/obj/screen/item_action/A = new(hud_used) - + //A.icon = 'icons/mob/screen1_action.dmi' //A.icon_state = I.icon_action_button - A.icon = ui_style2icon(client.prefs.UI_style) A.icon_state = "template" - var/image/img = image(I.icon, A, I.icon_state) img.pixel_x = 0 img.pixel_y = 0 @@ -540,9 +534,7 @@ else A.name = "Use [I.name]" A.owner = I - hud_used.item_action_list += A - switch(num) if(1) A.screen_loc = ui_action_slot1 @@ -566,4 +558,4 @@ A.screen_loc = ui_action_slot10 break //5 slots available, so no more can be added. num++ - src.client.screen += src.hud_used.item_action_list + src.client.screen += src.hud_used.item_action_list \ No newline at end of file diff --git a/code/datums/spells/mind_transfer.dm b/code/datums/spells/mind_transfer.dm index c19cb43be7b..8ad7042e959 100644 --- a/code/datums/spells/mind_transfer.dm +++ b/code/datums/spells/mind_transfer.dm @@ -10,7 +10,6 @@ range = 1 cooldown_min = 200 //100 deciseconds reduction per rank var/list/protected_roles = list("Wizard","Changeling","Cultist") //which roles are immune to the spell - var/list/compatible_mobs = list(/mob/living/carbon/human,/mob/living/carbon/monkey) //which types of mobs are affected by the spell. NOTE: change at your own risk var/base_spell_loss_chance = 20 //base probability of the wizard losing a spell in the process var/spell_loss_chance_modifier = 7 //amount of probability of losing a spell added per spell (mind_transfer included) var/spell_loss_amount = 1 //the maximum amount of spells possible to lose during a single transfer @@ -18,8 +17,6 @@ var/paralysis_amount_caster = 20 //how much the caster is paralysed for after the spell var/paralysis_amount_victim = 20 //how much the victim is paralysed for after the spell - icon_power_button = "spell_mind" - /* Urist: I don't feel like figuring out how you store object spells so I'm leaving this for you to do. Make sure spells that are removed from spell_list are actually removed and deleted when mind transfering. @@ -40,12 +37,8 @@ Also, you never added distance checking after target is selected. I've went ahea user << "They are too far away!" return - if(!(target.type in compatible_mobs)) - user << "Their mind isn't compatible with yours." - return - if(target.stat == DEAD) - user << "You didn't study necromancy back at the Space Wizard Federation academy." + user << "You don't particularly want to be dead." return if(!target.key || !target.mind) diff --git a/code/game/gamemodes/changeling/changeling_powers.dm b/code/game/gamemodes/changeling/changeling_powers.dm index 2cf5b94c1df..f79374021d3 100644 --- a/code/game/gamemodes/changeling/changeling_powers.dm +++ b/code/game/gamemodes/changeling/changeling_powers.dm @@ -685,7 +685,7 @@ var/list/datum/dna/hivemind_bank = list() /mob/proc/changeling_hivedownload() set category = "Changeling" set name = "Hive Absorb (20)" - set desc = "Allows you to absorb DNA that is being channeled in the airwaves." + set desc = "Allows you to absorb DNA that is being channelled in the airwaves." var/datum/changeling/changeling = changeling_power(20,1) if(!changeling) return diff --git a/code/game/gamemodes/wizard/spellbook.dm b/code/game/gamemodes/wizard/spellbook.dm index 0d361ca233c..efb7538cdb0 100644 --- a/code/game/gamemodes/wizard/spellbook.dm +++ b/code/game/gamemodes/wizard/spellbook.dm @@ -406,6 +406,7 @@ spellname = "mindswap" icon_state ="bookmindswap" desc = "This book's cover is pristine, though its pages look ragged and torn." + var/mob/stored_swap = null //Used in used book recoils to store an identity for mindswaps /obj/item/weapon/spellbook/oneuse/mindswap/onlearned() spellname = pick("fireball","smoke","blind","forcewall","knock","horses","charge") @@ -415,8 +416,45 @@ /obj/item/weapon/spellbook/oneuse/mindswap/recoil(mob/user as mob) ..() - user <<"You suddenly don't feel like yourself!" - wabbajack(user) + if(stored_swap in dead_mob_list) + stored_swap = null + if(!stored_swap) + stored_swap = user + user <<"For a moment you feel like you don't even know who you are anymore." + return + if(stored_swap == user) + user <<"You stare at the book some more, but there doesn't seem to be anything else to learn..." + return + + if(user.mind.special_verbs.len) + for(var/V in user.mind.special_verbs) + user.verbs -= V + + if(stored_swap.mind.special_verbs.len) + for(var/V in stored_swap.mind.special_verbs) + stored_swap.verbs -= V + + var/mob/dead/observer/ghost = stored_swap.ghostize(0) + ghost.spell_list = stored_swap.spell_list + + user.mind.transfer_to(stored_swap) + stored_swap.spell_list = user.spell_list + + if(stored_swap.mind.special_verbs.len) + for(var/V in user.mind.special_verbs) + user.verbs += V + + ghost.mind.transfer_to(user) + user.key = ghost.key + user.spell_list = ghost.spell_list + + if(user.mind.special_verbs.len) + for(var/V in user.mind.special_verbs) + user.verbs += V + + stored_swap <<"You're suddenly somewhere else... and someone else?!" + user <<"Suddenly you're staring at [src] again... where are you, who are you?!" + stored_swap = null /obj/item/weapon/spellbook/oneuse/forcewall spell = /obj/effect/proc_holder/spell/wizard/aoe_turf/conjure/forcewall diff --git a/code/game/machinery/biogenerator.dm b/code/game/machinery/biogenerator.dm index 94e3e75a1ea..f834719c9e0 100644 --- a/code/game/machinery/biogenerator.dm +++ b/code/game/machinery/biogenerator.dm @@ -10,6 +10,7 @@ var/processing = 0 var/obj/item/weapon/reagent_containers/glass/beaker = null var/points = 0 + var/in_beaker = 1 var/menustat = "menu" var/efficiency = 0 var/productivity = 0 @@ -137,11 +138,12 @@ menustat = "menu" if(beaker) dat += "
Biomass: [points] units.

" - dat += "ActivateDetach Container" + dat += "ActivateDetach Container
" + dat += "Put fertilizer in: [in_beaker ? "Beaker" : "Bottle"]" dat += "

Food:

" dat += "
" dat += "10 milk: Make ([20/efficiency])
" - /*dat += "10 cream: Make ([30/efficiency])
"*/ + dat += "10 cream: Make ([30/efficiency])
" dat += "Monkey cube: Make ([250/efficiency])" dat += "
" dat += "

Nutrients:

" @@ -153,14 +155,14 @@ dat += "

Leather:

" dat += "
" dat += "Wallet: Make ([100/efficiency])
" - /*dat += "Book bag: Make ([200/efficiency])
" + dat += "Book bag: Make ([200/efficiency])
" dat += "Plant bag: Make ([200/efficiency])
" - dat += "Mining satchel: Make ([200/efficiency])
"*/ + dat += "Mining satchel: Make ([200/efficiency])
" dat += "Botanical gloves: Make ([250/efficiency])
" dat += "Utility belt: Make ([300/efficiency])
" dat += "Leather Satchel: Make ([400/efficiency])
" dat += "Cash Bag: Make ([400/efficiency])
" - /*dat += "Leather Jacket: Make ([500/efficiency])
"*/ + dat += "Leather Jacket: Make ([500/efficiency])
" //dat += "

Other:

" //dat += "Monkey: Make ([400/efficiency])
" dat += "
" @@ -225,26 +227,38 @@ if(check_container_volume(10)) return 0 else if (check_cost(20/efficiency)) return 0 else beaker.reagents.add_reagent("milk",10) - /*if("cream") + if("cream") if(check_container_volume(10)) return 0 else if (check_cost(30/efficiency)) return 0 - else beaker.reagents.add_reagent("cream",10)*/ + else beaker.reagents.add_reagent("cream",10) if("meat") if (check_cost(250/efficiency)) return 0 else new/obj/item/weapon/reagent_containers/food/snacks/monkeycube(src.loc) if("ez") if (check_cost(10/efficiency)) return 0 - else new/obj/item/weapon/reagent_containers/glass/fertilizer/ez(src.loc) + if(in_beaker) + if(check_container_volume(10)) return 0 + else beaker.reagents.add_reagent("eznutrient",10) + else + new/obj/item/weapon/reagent_containers/glass/fertilizer/ez(src.loc) if("l4z") if (check_cost(20/efficiency)) return 0 - else new/obj/item/weapon/reagent_containers/glass/fertilizer/l4z(src.loc) + if(in_beaker) + if(check_container_volume(10)) return 0 + else beaker.reagents.add_reagent("left4zed",10) + else + new/obj/item/weapon/reagent_containers/glass/fertilizer/l4z(src.loc) if("rh") if (check_cost(25/efficiency)) return 0 - else new/obj/item/weapon/reagent_containers/glass/fertilizer/rh(src.loc) + if(in_beaker) + if(check_container_volume(10)) return 0 + else beaker.reagents.add_reagent("robustharvest",10) + else + new/obj/item/weapon/reagent_containers/glass/fertilizer/rh(src.loc) if("wallet") if (check_cost(100/efficiency)) return 0 else new/obj/item/weapon/storage/wallet(src.loc) - /*if("bkbag") + if("bkbag") if (check_cost(200/efficiency)) return 0 else new/obj/item/weapon/storage/bag/books(src.loc) if("ptbag") @@ -252,7 +266,7 @@ else new/obj/item/weapon/storage/bag/plants(src.loc) if("mnbag") if (check_cost(200/efficiency)) return 0 - else new/obj/item/weapon/storage/bag/ore(src.loc)*/ + else new/obj/item/weapon/storage/bag/ore(src.loc) if("gloves") if (check_cost(250/efficiency)) return 0 else new/obj/item/clothing/gloves/botanic_leather(src.loc) @@ -265,9 +279,9 @@ if("cashbag") if (check_cost(400/efficiency)) return 0 else new/obj/item/weapon/storage/bag/cash(src.loc) - /*if("jacket") + if("jacket") if (check_cost(500/efficiency)) return 0 - else new/obj/item/clothing/suit/jacket/leather(src.loc)*/ + else new/obj/item/clothing/suit/jacket/leather(src.loc) //if("monkey") // if (check_cost(500)) return 0 // else new/mob/living/carbon/monkey(src.loc) @@ -309,4 +323,8 @@ else if(href_list["menu"]) menustat = "menu" + updateUsrDialog() + + else if(href_list["inbeaker"]) + in_beaker = !in_beaker updateUsrDialog() \ No newline at end of file diff --git a/code/game/objects/items/weapons/storage/bags.dm b/code/game/objects/items/weapons/storage/bags.dm index 90b0b268a22..3fa71922efd 100644 --- a/code/game/objects/items/weapons/storage/bags.dm +++ b/code/game/objects/items/weapons/storage/bags.dm @@ -9,6 +9,7 @@ * Mining Satchel * Plant Bag * Sheet Snatcher + * Book Bag * * -Sayu */ @@ -307,3 +308,19 @@ w_class = 1 can_hold = list("/obj/item/weapon/coin","/obj/item/weapon/spacecash") + +// ----------------------------- +// Book bag +// ----------------------------- + +/obj/item/weapon/storage/bag/books + name = "book bag" + desc = "A bag for books." + icon = 'icons/obj/library.dmi' + icon_state = "bookbag" + display_contents_with_number = 0 //This would look really stupid otherwise + storage_slots = 7 + max_combined_w_class = 21 + max_w_class = 3 + w_class = 4 //Bigger than a book because physics + can_hold = list(/obj/item/weapon/book, /obj/item/weapon/spellbook) //No bibles, consistent with bookcase diff --git a/code/game/objects/structures/crates_lockers/closets/wardrobe.dm b/code/game/objects/structures/crates_lockers/closets/wardrobe.dm index cdf0cbc0156..5294334d070 100644 --- a/code/game/objects/structures/crates_lockers/closets/wardrobe.dm +++ b/code/game/objects/structures/crates_lockers/closets/wardrobe.dm @@ -68,6 +68,8 @@ new /obj/item/clothing/under/color/black(src) new /obj/item/clothing/under/color/black(src) new /obj/item/clothing/under/color/black(src) + if(prob(25)) + new /obj/item/clothing/suit/jacket/leather(src) new /obj/item/clothing/shoes/black(src) new /obj/item/clothing/shoes/black(src) new /obj/item/clothing/shoes/black(src) diff --git a/code/modules/clothing/suits/miscellaneous.dm b/code/modules/clothing/suits/miscellaneous.dm index fbfb77cdc9d..0b9570bbb5c 100644 --- a/code/modules/clothing/suits/miscellaneous.dm +++ b/code/modules/clothing/suits/miscellaneous.dm @@ -414,6 +414,11 @@ item_state = "bomber" flags = FPRINT | TABLEPASS body_parts_covered = UPPER_TORSO|ARMS + +/obj/item/clothing/suit/jacket/leather + name = "leather jacket" + desc = "Pompadour not included." + icon_state = "leatherjacket" /obj/item/clothing/suit/officercoat name = "Clown Officer's Coat" diff --git a/icons/mob/suit.dmi b/icons/mob/suit.dmi index f3dc453accc..99890d48df0 100644 Binary files a/icons/mob/suit.dmi and b/icons/mob/suit.dmi differ diff --git a/icons/obj/clothing/suits.dmi b/icons/obj/clothing/suits.dmi index 6a505eb8523..77dde9413fc 100644 Binary files a/icons/obj/clothing/suits.dmi and b/icons/obj/clothing/suits.dmi differ diff --git a/icons/obj/library.dmi b/icons/obj/library.dmi index 606deaeefea..1c405908b43 100644 Binary files a/icons/obj/library.dmi and b/icons/obj/library.dmi differ diff --git a/maps/cyberiad.dmm b/maps/cyberiad.dmm index 859e9d188b4..c7cf93a4e56 100644 --- a/maps/cyberiad.dmm +++ b/maps/cyberiad.dmm @@ -2616,7 +2616,7 @@ "aYp" = (/obj/machinery/seed_extractor,/turf/simulated/floor{icon_state = "dark"},/area/hydroponics) "aYq" = (/obj/machinery/vending/hydronutrients,/turf/simulated/floor{icon_state = "dark"},/area/hydroponics) "aYr" = (/obj/machinery/vending/hydroseeds,/obj/machinery/camera{c_tag = "Hydroponics North"; network = list("SS13")},/turf/simulated/floor{icon_state = "dark"},/area/hydroponics) -"aYs" = (/obj/machinery/biogenerator,/obj/machinery/status_display{layer = 4; pixel_x = 0; pixel_y = 32},/turf/simulated/floor{icon_state = "dark"},/area/hydroponics) +"aYs" = (/obj/machinery/biogenerator,/obj/machinery/status_display{layer = 4; pixel_x = 0; pixel_y = 32},/obj/item/weapon/reagent_containers/glass/beaker/large,/turf/simulated/floor{icon_state = "dark"},/area/hydroponics) "aYt" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/machinery/requests_console{department = "Hydroponics"; departmentType = 2; pixel_x = 0; pixel_y = 30},/obj/structure/disposalpipe/segment{dir = 4; icon_state = "pipe-c"},/turf/simulated/floor{icon_state = "dark"},/area/hydroponics) "aYu" = (/obj/machinery/disposal,/obj/structure/disposalpipe/trunk{dir = 8},/turf/simulated/floor{icon_state = "dark"},/area/hydroponics) "aYv" = (/obj/structure/bookcase{name = "bookcase (Religious)"},/obj/machinery/atmospherics/pipe/simple{_color = "blue"; icon_state = "intact-b-f"; level = 1; name = "pipe"},/turf/simulated/floor/wood,/area/library) @@ -3571,7 +3571,7 @@ "bqI" = (/obj/machinery/door/firedoor/border_only{dir = 1; name = "Firelock North"},/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id = "Biohazard"; name = "Biohazard Shutter"; opacity = 0},/obj/machinery/door/poddoor/shutters{dir = 2; id = "mechbay"; name = "Mech Bay"},/turf/simulated/floor{icon_state = "delivery"},/area/assembly/chargebay) "bqJ" = (/obj/machinery/computer/rdconsole/robotics,/obj/machinery/alarm{pixel_y = 25},/turf/simulated/floor{icon_state = "white"},/area/assembly/robotics) "bqK" = (/obj/structure/table,/obj/item/weapon/book/manual/robotics_cyborgs{pixel_x = 2; pixel_y = 5},/obj/item/weapon/storage/belt/utility,/obj/item/weapon/reagent_containers/glass/beaker/large,/obj/machinery/requests_console{department = "Robotics"; departmentType = 2; name = "Robotics Requests Console"; pixel_y = 30},/obj/machinery/light{dir = 1},/turf/simulated/floor{icon_state = "white"},/area/assembly/robotics) -"bqL" = (/obj/machinery/r_n_d/circuit_imprinter,/turf/simulated/floor{icon_state = "white"},/area/assembly/robotics) +"bqL" = (/obj/machinery/r_n_d/circuit_imprinter,/obj/item/weapon/reagent_containers/glass/beaker/sulphuric,/turf/simulated/floor{icon_state = "white"},/area/assembly/robotics) "bqM" = (/obj/structure/table/reinforced,/obj/machinery/door/firedoor/border_only{dir = 1; name = "hazard door north"},/obj/machinery/door/poddoor/shutters{density = 0; dir = 2; icon_state = "shutter0"; id = "rdlab2"; name = "Research and Development Lab Shutters"; opacity = 0},/obj/machinery/door/window/eastright{base_state = "left"; dir = 1; icon_state = "left"; name = "Research and Development Desk"; req_access_txt = "47"},/turf/simulated/floor{icon_state = "white"},/area/toxins/lab) "bqN" = (/obj/machinery/door_control{id = "rdlab2"; name = "Research and Development Lab Shutters Control"; pixel_x = -24; pixel_y = -24; req_access_txt = "47"},/turf/simulated/floor{icon_state = "white"},/area/toxins/lab) "bqO" = (/obj/machinery/hologram/holopad,/turf/simulated/floor{dir = 10; icon_state = "purple"},/area/hallway/primary/starboard/east)