From 068502058effd1ce7f9b42e6d4bf36006db9c69e Mon Sep 17 00:00:00 2001 From: UniquaSa <111698205+UniquaSa@users.noreply.github.com> Date: Fri, 20 Dec 2024 00:51:51 +0100 Subject: [PATCH] Changes, QoL, Classes additions (#97) * Revert "fixing food, rebalancing rogue" This reverts commit ff631a83796f6455f74f6bfbb78f4f50b9b6a111. * Update Autolock/autounlock door via bump with keychain by PPooch Permits beds (and subtypes of beds) to be used without buckling to them - DeltaFire15 collect items bundle via clicking on turf - Tenryumi Butt Layer Change and Clothes inv flag update - Ghostcoffeee * nvm / Priest change PriestExcommunicate/Heretic, Fix Sellsword's bevor * ranged variants * remove priest stuffs * revert rogue revert * Revert "Merge branch 'main' into addition" This reverts commit 13877603ac5860945e9c5b9135bafc691fb6f602, reversing changes made to b0eed5c9a4b1cb493f54e45b3c0b86869dc82c84. * Reapply "Merge branch 'main' into addition" This reverts commit 61a4b329ad362a180d45ee20b6712737d4d7815a. * fixed revert issue * changed bullet pouch * Revert "changed bullet pouch" This reverts commit 7624f387ef2c44d9343f074535960a01ad79d97e. --- code/game/objects/items/rogueitems/natural.dm | 22 ++++++++++ .../rogueitems/natural/clothfibersthorn.dm | 34 +++++++++++++++ code/game/objects/structures/mineral_doors.dm | 34 ++++++++++++--- .../roguetown/villain/vampirelord.dm | 2 + code/modules/cargo/packsrogue/Sellsword.dm | 2 +- code/modules/clothing/rogueclothes/armor.dm | 15 ++++++- code/modules/clothing/rogueclothes/cloaks.dm | 14 +++++- .../clothing/rogueclothes/npc/goblin.dm | 3 ++ code/modules/clothing/rogueclothes/pants.dm | 2 +- code/modules/clothing/rogueclothes/robes.dm | 4 +- code/modules/clothing/rogueclothes/shirts.dm | 6 +-- code/modules/clothing/rogueclothes/storage.dm | 7 ++- .../adventurer/types/combat/musketeer.dm | 41 ++++++++++++++++++ .../adventurer/types/combat/ranger.dm | 1 - .../adventurer/types/combat/rogue.dm | 2 +- .../roguetown/garrison/manorguard.dm | 26 ++++++++--- .../job_types/roguetown/garrison/townguard.dm | 35 +++++++++++---- .../new_player/sprite_accessory/genitals.dm | 4 +- code/modules/mob/living/carbon/life.dm | 16 ++++++- .../reagents/reagent_containers/glass.dm | 4 +- icons/mob/sprite_accessory/genitals/butt.dmi | Bin 1228 -> 1231 bytes modular/Neu_Food/code/NeuFood.dm | 2 - modular/Neu_Food/code/cooked/NeuFood_meals.dm | 9 ++-- roguetown.dme | 1 + 24 files changed, 241 insertions(+), 45 deletions(-) create mode 100644 code/modules/jobs/job_types/roguetown/adventurer/types/combat/musketeer.dm diff --git a/code/game/objects/items/rogueitems/natural.dm b/code/game/objects/items/rogueitems/natural.dm index 19162235a..5f505438d 100644 --- a/code/game/objects/items/rogueitems/natural.dm +++ b/code/game/objects/items/rogueitems/natural.dm @@ -111,6 +111,28 @@ user.visible_message("[user] removes [F] from [src]") update_bundle() +/obj/item/natural/bundle/attack_turf(turf/T, mob/living/user) + var/list/obj/item/stackables = list() + for(var/obj/I in T.contents) + if(I.type == stacktype) + stackables += I + if(stackables.len) + if(amount >= maxamount) + to_chat(user, span_info("[src] can't hold any more without falling apart.")) + return + to_chat(user, span_info("I begin filling [src]...")) + for(var/obj/I in stackables) + if(amount >= maxamount) + break + if(I.type == stacktype) + if(!do_after(user, 5, TRUE, src)) + break + if(!(I in T.contents)) + continue + qdel(I) + src.amount++ + update_bundle() + /obj/item/natural/bundle/examine(mob/user) . = ..() to_chat(user, span_notice("There are [amount] [stackname] in this bundle.")) diff --git a/code/game/objects/items/rogueitems/natural/clothfibersthorn.dm b/code/game/objects/items/rogueitems/natural/clothfibersthorn.dm index 72c8c13f7..32412dda8 100644 --- a/code/game/objects/items/rogueitems/natural/clothfibersthorn.dm +++ b/code/game/objects/items/rogueitems/natural/clothfibersthorn.dm @@ -343,6 +343,40 @@ icon2step = 7 icon3 = "stickbundle3" +/obj/item/natural/bundle/stick/attackby(obj/item/W, mob/living/user) + . = ..() + user.changeNext_move(CLICK_CD_MELEE) + if(user.used_intent?.blade_class == BCLASS_CUT) + playsound(get_turf(src.loc), 'sound/items/wood_sharpen.ogg', 100) + user.visible_message(span_info("[user] starts sharpening the sticks in [src]..."), span_info("I start sharpening the sticks in [src]....")) + for(var/i in 1 to (amount - 1)) + if(!do_after(user, 20)) + break + var/turf/T = get_turf(user.loc) + var/obj/item/grown/log/tree/stake/S = new /obj/item/grown/log/tree/stake(T) + amount-- + // If there's only one stick left in the bundle... + if (amount == 1) + // Replace the bundle with a single stick + var/obj/item/ST = new stacktype(T) + if(user.is_holding(src)) + user.doUnEquip(src, TRUE, T, silent = TRUE) + qdel(src) + var/holding = user.put_in_hands(ST) + // And automatically have us try and carve the last new stick, assuming we're still holding it! + if(!do_after(user, 20)) + break + S = new /obj/item/grown/log/tree/stake(T) + if(holding) + user.doUnEquip(ST, TRUE, T, silent = TRUE) + qdel(ST) + else + update_bundle() + user.put_in_hands(S) + S.pixel_x = rand(-3, 3) + S.pixel_y = rand(-3, 3) + return + /obj/item/natural/bundle/bone name = "stack of bones" icon_state = "bonestack1" diff --git a/code/game/objects/structures/mineral_doors.dm b/code/game/objects/structures/mineral_doors.dm index 38563c0d4..9f6fc7505 100644 --- a/code/game/objects/structures/mineral_doors.dm +++ b/code/game/objects/structures/mineral_doors.dm @@ -46,6 +46,7 @@ var/kickthresh = 15 var/swing_closed = TRUE var/lock_strength = 100 + var/mob/last_bumper = null damage_deflection = 10 @@ -152,6 +153,9 @@ user.visible_message(span_warning("[user] smashes through [src]!")) return if(locked) + if(istype(user.get_active_held_item(), /obj/item/key) || istype(user.get_active_held_item(), /obj/item/storage/keyring)) + src.attackby(user.get_active_held_item(), user, TRUE) + return door_rattle() return if(TryToSwitchState(AM)) @@ -245,7 +249,7 @@ if(close_delay != -1) addtimer(CALLBACK(src, PROC_REF(Close)), close_delay) -/obj/structure/mineral_door/proc/Close(silent = FALSE) +/obj/structure/mineral_door/proc/Close(silent = FALSE, autobump = FALSE) if(isSwitchingStates || !door_opened) return var/turf/T = get_turf(src) @@ -264,6 +268,10 @@ air_update_turf(1) update_icon() isSwitchingStates = FALSE + if(autobump && src.Adjacent(last_bumper)) + if(istype(last_bumper.get_active_held_item(), /obj/item/key) || istype(last_bumper.get_active_held_item(), /obj/item/storage/keyring)) + src.attack_right(last_bumper) + last_bumper = null /obj/structure/mineral_door/update_icon() icon_state = "[base_state][door_opened ? "open":""]" @@ -275,14 +283,19 @@ animate(pixel_x = oldx-1, time = 0.5) animate(pixel_x = oldx, time = 0.5) -/obj/structure/mineral_door/attackby(obj/item/I, mob/user) +/obj/structure/mineral_door/attackby(obj/item/I, mob/user, autobump = FALSE) user.changeNext_move(CLICK_CD_FAST) if(istype(I, /obj/item/roguekey) || istype(I, /obj/item/storage/keyring)) if(!locked) to_chat(user, span_warning("It won't turn this way. Try turning to the right.")) door_rattle() return - trykeylock(I, user) + if(autobump == TRUE) //Attackby passes UI coordinate onclick stuff, so forcing check to TRUE + trykeylock(I, user, autobump) + return + else + trykeylock(I, user) + return if(istype(I, /obj/item/lockpick)) trypicklock(I, user) if(istype(I,/obj/item/lockpickring)) @@ -306,7 +319,7 @@ else return ..() -/obj/structure/mineral_door/proc/trykeylock(obj/item/I, mob/user) +/obj/structure/mineral_door/proc/trykeylock(obj/item/I, mob/user, autobump = FALSE) if(door_opened || isSwitchingStates) return if(!keylock) @@ -325,17 +338,28 @@ break if(K.lockhash == lockhash) lock_toggle(user) - break + if(autobump && !locked) + src.Open() + addtimer(CALLBACK(src, PROC_REF(Close), FALSE, TRUE), 25) + src.last_bumper = user + return else if(user.cmode) door_rattle() + to_chat(user, span_warning("None of the keys on my keyring go to this door.")) + door_rattle() return else var/obj/item/roguekey/K = I if(K.lockhash == lockhash) lock_toggle(user) + if(autobump) + src.Open() + addtimer(CALLBACK(src, PROC_REF(Close), FALSE, TRUE), 25) + src.last_bumper = user return else + to_chat(user, span_warning("This is not the correct key that goes to this door.")) door_rattle() return diff --git a/code/modules/antagonists/roguetown/villain/vampirelord.dm b/code/modules/antagonists/roguetown/villain/vampirelord.dm index 8bcb2acaa..f5c891526 100644 --- a/code/modules/antagonists/roguetown/villain/vampirelord.dm +++ b/code/modules/antagonists/roguetown/villain/vampirelord.dm @@ -201,6 +201,7 @@ GLOBAL_LIST_EMPTY(vampire_objects) icon_state = "vrobe" item_state = "vrobe" resistance_flags = FIRE_PROOF | ACID_PROOF + flags_inv = HIDECROTCH|HIDEBOOB|HIDEBUTT /obj/item/clothing/head/roguetown/vampire name = "crown of darkness" @@ -220,6 +221,7 @@ GLOBAL_LIST_EMPTY(vampire_objects) body_parts_covered = CHEST|GROIN|VITALS armor_class = 2 resistance_flags = FIRE_PROOF | ACID_PROOF + flags_inv = HIDEBOOB /obj/item/clothing/suit/roguetown/armor/plate/vampire slot_flags = ITEM_SLOT_ARMOR diff --git a/code/modules/cargo/packsrogue/Sellsword.dm b/code/modules/cargo/packsrogue/Sellsword.dm index cb199f015..38cc5ab92 100644 --- a/code/modules/cargo/packsrogue/Sellsword.dm +++ b/code/modules/cargo/packsrogue/Sellsword.dm @@ -94,7 +94,7 @@ /datum/supply_pack/rogue/Sellsword/Bevor name = "Bevor" cost = 20 - contains = /obj/item/clothing/neck/roguetown/bevor + contains = list(/obj/item/clothing/neck/roguetown/bevor) /datum/supply_pack/rogue/Sellsword/gorget diff --git a/code/modules/clothing/rogueclothes/armor.dm b/code/modules/clothing/rogueclothes/armor.dm index f0e127fe3..bf9a2b668 100644 --- a/code/modules/clothing/rogueclothes/armor.dm +++ b/code/modules/clothing/rogueclothes/armor.dm @@ -39,7 +39,7 @@ drop_sound = 'sound/foley/dropsound/armor_drop.ogg' experimental_onhip = TRUE nodismemsleeves = TRUE - flags_inv = HIDEBOOB|HIDECROTCH + flags_inv = HIDEBOOB|HIDECROTCH|HIDEBUTT /obj/item/clothing/suit/roguetown/armor/chainmail slot_flags = ITEM_SLOT_ARMOR|ITEM_SLOT_SHIRT @@ -87,6 +87,7 @@ allowed_race = CLOTHED_RACES_TYPES body_parts_covered = CHEST|GROIN armor_class = ARMOR_CLASS_LIGHT + flags_inv = HIDEBOOB|HIDECROTCH /obj/item/clothing/suit/roguetown/armor/plate slot_flags = ITEM_SLOT_ARMOR @@ -107,6 +108,7 @@ unequip_delay_self = 4 SECONDS armor_class = ARMOR_CLASS_HEAVY smelt_bar_num = 3 + flags_inv = HIDEBOOB // Sprite stops just at the waist line /obj/item/clothing/suit/roguetown/armor/plate/bikini name = "half-plate bikini" @@ -118,6 +120,7 @@ allowed_sex = list(MALE, FEMALE) armor_class = ARMOR_CLASS_MEDIUM smelt_bar_num = 2 + flags_inv = HIDEBOOB|HIDECROTCH /obj/item/clothing/suit/roguetown/armor/plate/half slot_flags = ITEM_SLOT_ARMOR @@ -136,6 +139,7 @@ smeltresult = /obj/item/ingot/steel armor_class = ARMOR_CLASS_MEDIUM smelt_bar_num = 2 + flags_inv = HIDEBOOB /obj/item/clothing/suit/roguetown/armor/plate/full name = "plate armor" @@ -160,6 +164,7 @@ equip_delay_other = 3 SECONDS strip_delay = 6 SECONDS smelt_bar_num = 3 + flags_inv = HIDEBOOB|HIDECROTCH /obj/item/clothing/suit/roguetown/armor/plate/half/iron name = "iron breastplate" @@ -169,6 +174,7 @@ smeltresult = /obj/item/ingot/iron armor_class = ARMOR_CLASS_MEDIUM smelt_bar_num = 2 + flags_inv = HIDEBOOB /obj/item/clothing/suit/roguetown/armor/plate/half/elven name = "elven guardian cuirass" @@ -401,6 +407,7 @@ max_integrity = 150 sellprice = 20 armor_class = ARMOR_CLASS_LIGHT + flags_inv = HIDECROTCH|HIDEBOOB /obj/item/clothing/suit/roguetown/armor/leather/hide name = "hide armor" @@ -433,6 +440,7 @@ mob_overlay_icon = 'modular_causticcove/icons/roguetown/clothing/onmob/armor.dmi' allowed_sex = list(MALE, FEMALE) allowed_race = CLOTHED_RACES_TYPES + flags_inv = HIDEBOOB|HIDECROTCH /obj/item/clothing/suit/roguetown/armor/leather/studded/bikini name = "studded leather bikini" @@ -443,6 +451,7 @@ mob_overlay_icon = 'modular_causticcove/icons/roguetown/clothing/onmob/armor.dmi' allowed_sex = list(MALE, FEMALE) allowed_race = CLOTHED_RACES_TYPES + flags_inv = HIDEBOOB|HIDECROTCH /obj/item/clothing/suit/roguetown/armor/leather/hide/bikini name = "hide bikini" @@ -453,6 +462,7 @@ mob_overlay_icon = 'modular_causticcove/icons/roguetown/clothing/onmob/armor.dmi' allowed_sex = list(MALE, FEMALE) allowed_race = CLOTHED_RACES_TYPES + flags_inv = HIDEBOOB|HIDECROTCH /obj/item/clothing/suit/roguetown/armor/leather/vest name = "leather vest" @@ -481,6 +491,7 @@ slot_flags = ITEM_SLOT_ARMOR sleeved = 'icons/roguetown/clothing/onmob/helpers/sleeves_armor.dmi' sleevetype = "shirt" + flags_inv = HIDEBOOB|HIDEBUTT /obj/item/clothing/suit/roguetown/armor/leather/vest/white color = CLOTHING_WHITE @@ -509,6 +520,7 @@ sleeved = 'icons/roguetown/clothing/onmob/armor.dmi' allowed_sex = list(MALE, FEMALE) allowed_race = NON_DWARVEN_RACE_TYPES + flags_inv = HIDEBOOB|HIDEBUTT /obj/item/clothing/suit/roguetown/armor/leather/vest/hand @@ -630,6 +642,7 @@ smeltresult = /obj/item/ingot/blacksteel armor_class = ARMOR_CLASS_MEDIUM smelt_bar_num = 2 + flags_inv = HIDEBOOB /obj/item/clothing/suit/roguetown/armor/gambeson/hierophant name = "hierophant's shawl" diff --git a/code/modules/clothing/rogueclothes/cloaks.dm b/code/modules/clothing/rogueclothes/cloaks.dm index 0fe47bc92..5c2bb3f6f 100644 --- a/code/modules/clothing/rogueclothes/cloaks.dm +++ b/code/modules/clothing/rogueclothes/cloaks.dm @@ -290,6 +290,10 @@ GLOB.lordcolor -= src return ..() +/obj/item/clothing/cloak/tabard/musketeer + detail_tag = "_psy" + color = CLOTHING_BLUE + detail_color = CLOTHING_WHITE ////////////////////////// /// SOLDIER TABARD @@ -307,7 +311,7 @@ sleevetype = "shirt" nodismemsleeves = TRUE slot_flags = ITEM_SLOT_ARMOR|ITEM_SLOT_CLOAK - flags_inv = HIDECROTCH|HIDEBOOB + flags_inv = HIDECROTCH|HIDEBOOB|HIDEBUTT var/picked /obj/item/clothing/cloak/stabard/attack_right(mob/user) @@ -591,6 +595,7 @@ allowed_race = NON_DWARVEN_RACE_TYPES detail_tag = "_det" detail_color = CLOTHING_AZURE + flags_inv = HIDEBOOB /obj/item/clothing/cloak/lordcloak/update_icon() cut_overlays() @@ -768,6 +773,7 @@ inhand_mod = TRUE hoodtype = /obj/item/clothing/head/hooded/rainhood toggle_icon_state = FALSE + flags_inv = HIDEBOOB /obj/item/clothing/wash_act(clean) . = ..() @@ -936,6 +942,7 @@ allowed_sex = list(MALE, FEMALE) allowed_race = NON_DWARVEN_RACE_TYPES nodismemsleeves = TRUE + flags_inv = HIDECROTCH|HIDEBOOB|HIDEBUTT /obj/item/clothing/cloak/stole @@ -978,6 +985,7 @@ allowed_race = NON_DWARVEN_RACE_TYPES sellprice = 50 nodismemsleeves = TRUE + flags_inv = HIDEBOOB /obj/item/clothing/cloak/half name = "halfcloak" @@ -996,7 +1004,7 @@ toggle_icon_state = FALSE color = CLOTHING_BLACK allowed_sex = list(MALE, FEMALE) - flags_inv = null + flags_inv = HIDEBOOB // Put this here, since the covered boob otherwise clips through /obj/item/clothing/cloak/half/ComponentInitialize() . = ..() @@ -1042,6 +1050,7 @@ allowed_sex = list(MALE, FEMALE) allowed_race = NON_DWARVEN_RACE_TYPES inhand_mod = FALSE + flags_inv = null /obj/item/clothing/cloak/half/vet/Initialize() . = ..() @@ -1328,6 +1337,7 @@ detail_color = CLOTHING_WHITE icon_state = "guard_hood" body_parts_covered = CHEST + flags_inv = HIDEBOOB /obj/item/clothing/cloak/stabard/guardhood/attack_right(mob/user) if(picked) diff --git a/code/modules/clothing/rogueclothes/npc/goblin.dm b/code/modules/clothing/rogueclothes/npc/goblin.dm index 5e8b702fd..a62341762 100644 --- a/code/modules/clothing/rogueclothes/npc/goblin.dm +++ b/code/modules/clothing/rogueclothes/npc/goblin.dm @@ -6,6 +6,7 @@ smeltresult = /obj/item/ingot/iron allowed_race = list(/mob/living/carbon/human/species/goblin) body_parts_covered = CHEST|GROIN|ARMS|LEGS|VITALS + flags_inv = HIDEBOOB sellprice = 0 /obj/item/clothing/suit/roguetown/armor/leather/goblin @@ -15,6 +16,7 @@ icon = 'icons/roguetown/mob/monster/goblins.dmi' body_parts_covered = CHEST|GROIN|ARMS|VITALS allowed_race = list(/mob/living/carbon/human/species/goblin) + flags_inv = HIDEBOOB sellprice = 0 /obj/item/clothing/suit/roguetown/armor/leather/hide/goblin @@ -23,6 +25,7 @@ item_state = "cloth_armor" icon = 'icons/roguetown/mob/monster/goblins.dmi' allowed_race = list(/mob/living/carbon/human/species/goblin) + flags_inv = HIDECROTCH armor = null sellprice = 0 diff --git a/code/modules/clothing/rogueclothes/pants.dm b/code/modules/clothing/rogueclothes/pants.dm index f33916242..af1ed978a 100644 --- a/code/modules/clothing/rogueclothes/pants.dm +++ b/code/modules/clothing/rogueclothes/pants.dm @@ -17,7 +17,7 @@ l_sleeve_zone = BODY_ZONE_L_LEG r_sleeve_status = SLEEVE_NORMAL l_sleeve_status = SLEEVE_NORMAL - flags_inv = HIDECROTCH + flags_inv = HIDECROTCH|HIDEBUTT /obj/item/clothing/under/roguetown/AdjustClothes(mob/user) #ifdef MATURESERVER diff --git a/code/modules/clothing/rogueclothes/robes.dm b/code/modules/clothing/rogueclothes/robes.dm index ed66511af..e6425a1b1 100644 --- a/code/modules/clothing/rogueclothes/robes.dm +++ b/code/modules/clothing/rogueclothes/robes.dm @@ -8,7 +8,7 @@ mob_overlay_icon = 'icons/roguetown/clothing/onmob/armor.dmi' sleeved = 'icons/roguetown/clothing/onmob/helpers/sleeves_armor.dmi' boobed = TRUE - flags_inv = HIDEBOOB|HIDECROTCH + flags_inv = HIDECROTCH|HIDEBOOB|HIDEBUTT color = "#7c6d5c" r_sleeve_status = SLEEVE_NORMAL l_sleeve_status = SLEEVE_NORMAL @@ -163,7 +163,7 @@ sleeved = 'icons/roguetown/clothing/onmob/helpers/sleeves_armor.dmi' boobed = TRUE color = null - flags_inv = HIDEBOOB|HIDETAIL|HIDEBUTT + flags_inv = HIDEBOOB|HIDETAIL|HIDECROTCH|HIDEBUTT r_sleeve_status = SLEEVE_NORMAL l_sleeve_status = SLEEVE_NORMAL resistance_flags = FIRE_PROOF diff --git a/code/modules/clothing/rogueclothes/shirts.dm b/code/modules/clothing/rogueclothes/shirts.dm index b592cd22f..3adc34c35 100644 --- a/code/modules/clothing/rogueclothes/shirts.dm +++ b/code/modules/clothing/rogueclothes/shirts.dm @@ -146,7 +146,7 @@ item_state = "rags" r_sleeve_status = SLEEVE_NORMAL l_sleeve_status = SLEEVE_NORMAL - flags_inv = HIDECROTCH|HIDEBOOB + flags_inv = HIDECROTCH|HIDEBOOB|HIDEBUTT /obj/item/clothing/suit/roguetown/shirt/tribalrag slot_flags = ITEM_SLOT_ARMOR|ITEM_SLOT_SHIRT @@ -169,7 +169,7 @@ boobed = FALSE r_sleeve_status = SLEEVE_NORMAL l_sleeve_status = SLEEVE_NORMAL - flags_inv = HIDECROTCH|HIDEBOOB + flags_inv = HIDECROTCH|HIDEBOOB|HIDEBUTT /obj/item/clothing/suit/roguetown/shirt/tunic/green color = CLOTHING_GREEN @@ -301,7 +301,7 @@ boobed = TRUE r_sleeve_status = SLEEVE_NORMAL l_sleeve_status = SLEEVE_NORMAL - flags_inv = HIDECROTCH|HIDEBOOB + flags_inv = HIDECROTCH|HIDEBOOB|HIDEBUTT /obj/item/clothing/suit/roguetown/shirt/grenzelhoft slot_flags = ITEM_SLOT_SHIRT|ITEM_SLOT_ARMOR diff --git a/code/modules/clothing/rogueclothes/storage.dm b/code/modules/clothing/rogueclothes/storage.dm index ef17e4d94..0504438c9 100644 --- a/code/modules/clothing/rogueclothes/storage.dm +++ b/code/modules/clothing/rogueclothes/storage.dm @@ -213,7 +213,6 @@ CP.rmb_show(user) return TRUE - /obj/item/storage/backpack/rogue/backpack name = "backpack" desc = "" @@ -244,4 +243,8 @@ new /obj/item/ammo_casing/caseless/lead(src) new /obj/item/ammo_casing/caseless/runelock(src) new /obj/item/ammo_casing/caseless/runelock(src) - new /obj/item/ammo_casing/caseless/runelock(src) + new /obj/item/ammo_casing/caseless/runelock(src) + +/obj/item/storage/backpack/rogue/satchel/musketeer/PopulateContents() + new /obj/item/powderflask(src) + new /obj/item/storage/belt/rogue/pouch/coins/mid(src) diff --git a/code/modules/jobs/job_types/roguetown/adventurer/types/combat/musketeer.dm b/code/modules/jobs/job_types/roguetown/adventurer/types/combat/musketeer.dm new file mode 100644 index 000000000..17c79f2fe --- /dev/null +++ b/code/modules/jobs/job_types/roguetown/adventurer/types/combat/musketeer.dm @@ -0,0 +1,41 @@ +/datum/advclass/musketeer + name = "Musketeer" + tutorial = "A merry musketman seeking to save the girl and the day!" + allowed_sexes = list(MALE, FEMALE) + allowed_races = RACES_ALL_KINDS + outfit = /datum/outfit/job/roguetown/adventurer/musketeer + traits_applied = list(TRAIT_DODGEEXPERT) + category_tags = list(CTAG_ADVENTURER) + cmode_music = 'sound/music/combat_duelist.ogg' + + +/datum/outfit/job/roguetown/adventurer/musketeer/pre_equip(mob/living/carbon/human/H) + ..() + head = /obj/item/clothing/head/roguetown/helmet/tricorn + pants = /obj/item/clothing/under/roguetown/trou/leather + shirt = /obj/item/clothing/suit/roguetown/shirt/undershirt + gloves = /obj/item/clothing/gloves/roguetown/leather/black + belt = /obj/item/storage/belt/rogue/leather + armor = /obj/item/clothing/suit/roguetown/armor/leather/studded + cloak = /obj/item/clothing/cloak/tabard/musketeer + backl = /obj/item/storage/backpack/rogue/satchel/musketeer + backr = /obj/item/gun/ballistic/arquebus + beltr = /obj/item/rogueweapon/sword/rapier + beltl = /obj/item/bulletpouch/bullet + shoes = /obj/item/clothing/shoes/roguetown/boots + H.mind.adjust_skillrank(/datum/skill/combat/swords, 3, TRUE) + H.mind.adjust_skillrank(/datum/skill/misc/athletics, 2, TRUE) + H.mind.adjust_skillrank(/datum/skill/combat/firearms, 4, TRUE) + H.mind.adjust_skillrank(/datum/skill/combat/wrestling, 3, TRUE) + H.mind.adjust_skillrank(/datum/skill/combat/knives, 2, TRUE) + H.mind.adjust_skillrank(/datum/skill/misc/swimming, 1, TRUE) + H.mind.adjust_skillrank(/datum/skill/misc/climbing, 2, TRUE) + H.mind.adjust_skillrank(/datum/skill/craft/crafting, 1, TRUE) + H.mind.adjust_skillrank(/datum/skill/misc/reading, 2, TRUE) + H.mind.adjust_skillrank(/datum/skill/misc/medicine, 2, TRUE) + H.mind.adjust_skillrank(/datum/skill/misc/sneaking, 3, TRUE) + H.mind.adjust_skillrank(/datum/skill/misc/riding, 2, TRUE) + H.change_stat("intelligence", 1) + H.change_stat("speed", 2) + H.change_stat("endurance", 1) + H.change_stat("perception", 3) diff --git a/code/modules/jobs/job_types/roguetown/adventurer/types/combat/ranger.dm b/code/modules/jobs/job_types/roguetown/adventurer/types/combat/ranger.dm index 1c99bc92a..cbc0c2b66 100644 --- a/code/modules/jobs/job_types/roguetown/adventurer/types/combat/ranger.dm +++ b/code/modules/jobs/job_types/roguetown/adventurer/types/combat/ranger.dm @@ -25,7 +25,6 @@ wrists = /obj/item/clothing/wrists/roguetown/bracers/leather belt = /obj/item/storage/belt/rogue/leather armor = /obj/item/clothing/suit/roguetown/armor/leather/hide - cloak = /obj/item/clothing/cloak/raincloak/brown cloak = /obj/item/clothing/cloak/raincloak/green backr = /obj/item/gun/ballistic/revolver/grenadelauncher/bow/recurve backl = /obj/item/storage/backpack/rogue/satchel diff --git a/code/modules/jobs/job_types/roguetown/adventurer/types/combat/rogue.dm b/code/modules/jobs/job_types/roguetown/adventurer/types/combat/rogue.dm index 5dba9fc68..095cc3c61 100644 --- a/code/modules/jobs/job_types/roguetown/adventurer/types/combat/rogue.dm +++ b/code/modules/jobs/job_types/roguetown/adventurer/types/combat/rogue.dm @@ -1,4 +1,4 @@ -/datum/advclass/rogue +datum/advclass/rogue name = "Rogue" tutorial = "Rogues are men of shadows, and commonly associated with banditry. Most are usually akin to criminals, \ and those who aren't are usually treated as such anyway. \ diff --git a/code/modules/jobs/job_types/roguetown/garrison/manorguard.dm b/code/modules/jobs/job_types/roguetown/garrison/manorguard.dm index d55a9b57a..f041bb434 100644 --- a/code/modules/jobs/job_types/roguetown/garrison/manorguard.dm +++ b/code/modules/jobs/job_types/roguetown/garrison/manorguard.dm @@ -106,7 +106,7 @@ backpack_contents = list(/obj/item/rogueweapon/huntingknife/idagger/steel/special = 1, /obj/item/rope/chain = 1) H.verbs |= /mob/proc/haltyell -// Shield + Swords + Crossbow/Bow - Lighter armor, but ranged + sword skill in exchange for it. +// Shield + Swords + Crossbow/Bow/Gun - Lighter armor, but ranged + sword skill in exchange for it. /datum/advclass/manorguard/boltman name = "Men-at-Arms Boltman" tutorial = "You are a professional soldier of the realm, specializing in ranged implements. You sport a keen eye, looking for your enemies weaknesses." @@ -123,8 +123,9 @@ H.mind.adjust_skillrank(/datum/skill/combat/whipsflails, 2, TRUE) H.mind.adjust_skillrank(/datum/skill/combat/maces, 3, TRUE) H.mind.adjust_skillrank(/datum/skill/combat/shields, 2, TRUE) - H.mind.adjust_skillrank(/datum/skill/combat/crossbows, 5, TRUE) //Only effects draw and reload time. - H.mind.adjust_skillrank(/datum/skill/combat/bows, 5, TRUE) //Only effects draw times. + H.mind.adjust_skillrank(/datum/skill/combat/crossbows, 4, TRUE) //Only effects draw and reload time. + H.mind.adjust_skillrank(/datum/skill/combat/bows, 4, TRUE) //Only effects draw times. + H.mind.adjust_skillrank(/datum/skill/combat/firearms, 4, TRUE) //Normal shared skill section. H.mind.adjust_skillrank(/datum/skill/combat/wrestling, 4, TRUE) @@ -150,8 +151,23 @@ //I feel bad they have full hands round-start but this is the price you have for being given a satchel. l_hand = /obj/item/rogueweapon/shield/tower r_hand = /obj/item/rogueweapon/sword/short - beltr = /obj/item/quiver/bolts - backl = /obj/item/gun/ballistic/revolver/grenadelauncher/crossbow + var/weapons = list("Crossbow","Bow", "Arquebus") + var/weapon_choice = input("Choose your weapon.", "TAKE UP ARMS") as anything in weapons + switch(weapon_choice) + if("Crossbow") + H.mind.adjust_skillrank(/datum/skill/combat/crossbows, 1, TRUE) + beltr = /obj/item/quiver/bolts + backl = /obj/item/gun/ballistic/revolver/grenadelauncher/crossbow + if("Bow") + H.mind.adjust_skillrank(/datum/skill/combat/bows, 1, TRUE) + beltr = /obj/item/quiver/arrows + backr = /obj/item/gun/ballistic/revolver/grenadelauncher/bow/recurve + if("Arquebus") + H.mind.adjust_skillrank(/datum/skill/combat/firearms, 1, TRUE) + r_hand = /obj/item/gun/ballistic/arquebus + beltr = /obj/item/powderflask + backl = /obj/item/bulletpouch/bullet + backpack_contents = list(/obj/item/rogueweapon/huntingknife/idagger/steel/special = 1, /obj/item/rope/chain = 1) H.verbs |= /mob/proc/haltyell diff --git a/code/modules/jobs/job_types/roguetown/garrison/townguard.dm b/code/modules/jobs/job_types/roguetown/garrison/townguard.dm index 458d2ef8b..fc7894c9d 100644 --- a/code/modules/jobs/job_types/roguetown/garrison/townguard.dm +++ b/code/modules/jobs/job_types/roguetown/garrison/townguard.dm @@ -97,17 +97,18 @@ Archer is basically a 'bounty-catcher' in function, less specialized at close-qu backpack_contents = list(/obj/item/rogueweapon/huntingknife/idagger/steel = 1, /obj/item/rope/chain = 1) H.verbs |= /mob/proc/haltyell -/datum/advclass/watchman/archer - name = "Watch Archer" - tutorial = "You are an archer of the Town Watch. Once a hunter, now a man-hunter for your lord. Rooftops, bows, and daggers are your best friend." - outfit = /datum/outfit/job/roguetown/guardsman/archer +/datum/advclass/watchman/ranger + name = "Watch Ranger" + tutorial = "You are an ranger of the Town Watch. Once a hunter, now a man-hunter for your lord. Rooftops, ranged weapons, and daggers are your best friend." + outfit = /datum/outfit/job/roguetown/guardsman/ranger category_tags = list(CTAG_WATCH) -/datum/outfit/job/roguetown/guardsman/archer/pre_equip(mob/living/carbon/human/H) +/datum/outfit/job/roguetown/guardsman/ranger/pre_equip(mob/living/carbon/human/H) ..() - H.mind.adjust_skillrank(/datum/skill/combat/bows, 4, TRUE) - H.mind.adjust_skillrank(/datum/skill/combat/crossbows, 5, TRUE) //Why master? Because all it does is effect draw time, which is strength x skill / 1.2. (Bow is just skill / 1.0). You get poor bonus strength, so you get skill to offset. + H.mind.adjust_skillrank(/datum/skill/combat/bows, 3, TRUE) + H.mind.adjust_skillrank(/datum/skill/combat/firearms, 3, TRUE) + H.mind.adjust_skillrank(/datum/skill/combat/crossbows, 3, TRUE) //Why master? Because all it does is effect draw time, which is strength x skill / 1.2. (Bow is just skill / 1.0). You get poor bonus strength, so you get skill to offset. H.mind.adjust_skillrank(/datum/skill/combat/wrestling, 3, TRUE) H.mind.adjust_skillrank(/datum/skill/combat/unarmed, 3, TRUE) H.mind.adjust_skillrank(/datum/skill/combat/knives, 4, TRUE) @@ -133,14 +134,30 @@ Archer is basically a 'bounty-catcher' in function, less specialized at close-qu head = /obj/item/clothing/head/roguetown/roguehood/red //To-do: Make a guard hood come in kingdom's colors. armor = /obj/item/clothing/suit/roguetown/armor/leather //So they get default-dodge expert usage. - beltr = /obj/item/quiver/bolts - backl = /obj/item/gun/ballistic/revolver/grenadelauncher/crossbow backr = /obj/item/storage/backpack/rogue/satchel/black beltl = /obj/item/storage/keyring/guardcastle belt = /obj/item/storage/belt/rogue/leather/black gloves = /obj/item/clothing/gloves/roguetown/leather backpack_contents = list(/obj/item/rogueweapon/huntingknife/idagger/steel = 1, /obj/item/rope/chain = 1) H.verbs |= /mob/proc/haltyell + var/weapons = list("Crossbow","Bow", "Arquebus") + var/weapon_choice = input("Choose your weapon.", "TAKE UP ARMS") as anything in weapons + H.set_blindness(0) + switch(weapon_choice) + if("Crossbow") + H.mind.adjust_skillrank(/datum/skill/combat/crossbows, 2, TRUE) + beltr = /obj/item/quiver/bolts + backl = /obj/item/gun/ballistic/revolver/grenadelauncher/crossbow + if("Bow") + H.mind.adjust_skillrank(/datum/skill/combat/bows, 1, TRUE) + beltr = /obj/item/quiver/arrows + backr = /obj/item/gun/ballistic/revolver/grenadelauncher/bow/recurve + if("Arquebus") + H.mind.adjust_skillrank(/datum/skill/combat/firearms, 1, TRUE) + r_hand = /obj/item/gun/ballistic/arquebus + beltr = /obj/item/powderflask + backl = /obj/item/bulletpouch/bullet + // Added to baliff under assumption townguard.dm will not be enabled. // /mob/proc/haltyell() diff --git a/code/modules/mob/dead/new_player/sprite_accessory/genitals.dm b/code/modules/mob/dead/new_player/sprite_accessory/genitals.dm index f4de786ce..1648e0d18 100644 --- a/code/modules/mob/dead/new_player/sprite_accessory/genitals.dm +++ b/code/modules/mob/dead/new_player/sprite_accessory/genitals.dm @@ -228,7 +228,7 @@ /datum/sprite_accessory/butt icon = 'icons/mob/sprite_accessory/genitals/butt.dmi' color_key_name = "Butt" - relevant_layers = list(BODY_FRONT_LAYER) + relevant_layers = list(BODY_ADJ_LAYER) /datum/sprite_accessory/butt/adjust_appearance_list(list/appearance_list, obj/item/organ/organ, obj/item/bodypart/bodypart, mob/living/carbon/owner) if(!isdwarf(owner) && !isgoblinp(owner) && !iskobold(owner) && !isvermin(owner)) @@ -245,7 +245,7 @@ return FALSE if(!buttie.visible_organ) return FALSE - return is_human_part_visible(owner, HIDEJUMPSUIT|HIDECROTCH|HIDEBUTT) + return is_human_part_visible(owner, HIDEJUMPSUIT|HIDEBUTT) /datum/sprite_accessory/butt/pair name = "Pair" diff --git a/code/modules/mob/living/carbon/life.dm b/code/modules/mob/living/carbon/life.dm index 35f330e14..6b1ccb92b 100644 --- a/code/modules/mob/living/carbon/life.dm +++ b/code/modules/mob/living/carbon/life.dm @@ -37,8 +37,14 @@ //Healing while sleeping in a bed if(IsSleeping()) - var/sleepy_mod = buckled?.sleepy || 0.5 + var/sleepy_mod = 0.5 var/yess = HAS_TRAIT(src, TRAIT_NOHUNGER) + if(buckled?.sleepy) + sleepy_mod = buckled.sleepy + else if(isturf(loc)) //No illegal tech. + var/obj/structure/bed/rogue/bed = locate() in loc + if(bed) + sleepy_mod = bed.sleepy if(nutrition > 0 || yess) rogstam_add(sleepy_mod * 15) if(hydration > 0 || yess) @@ -59,7 +65,14 @@ Sleeping(300) else if(!IsSleeping() && !HAS_TRAIT(src, TRAIT_NOSLEEP)) // Resting on a bed or something + var/sleepy_mod = 0 if(buckled?.sleepy) + sleepy_mod = buckled.sleepy + else if(isturf(loc) && !(mobility_flags & MOBILITY_STAND)) + var/obj/structure/bed/rogue/bed = locate() in loc + if(bed) + sleepy_mod = bed.sleepy + if(sleepy_mod > 0) if(eyesclosed) var/armor_blocked if(ishuman(src)) @@ -83,6 +96,7 @@ Sleeping(300) else rogstam_add(buckled.sleepy * 10) + rogstam_add(sleepy_mod * 10) // Resting on the ground (not sleeping or with eyes closed and about to fall asleep) else if(!(mobility_flags & MOBILITY_STAND)) if(eyesclosed) diff --git a/code/modules/reagents/reagent_containers/glass.dm b/code/modules/reagents/reagent_containers/glass.dm index 29ed31144..9bc2f8b9b 100644 --- a/code/modules/reagents/reagent_containers/glass.dm +++ b/code/modules/reagents/reagent_containers/glass.dm @@ -144,7 +144,7 @@ if(user.m_intent != MOVE_INTENT_SNEAK) if(poursounds) playsound(user.loc,pick(poursounds), 100, TRUE) - for(var/i in 1 to 10) + for(var/i in 1 to 22) if(do_after(user, 8, target = target)) if(!reagents.total_volume) break @@ -170,7 +170,7 @@ playsound(user.loc,pick(fillsounds), 100, TRUE) user.visible_message(span_notice("[user] fills [src] with [target]."), \ span_notice("I fill [src] with [target].")) - for(var/i in 1 to 10) + for(var/i in 1 to 22) if(do_after(user, 8, target = target)) if(reagents.holder_full()) break diff --git a/icons/mob/sprite_accessory/genitals/butt.dmi b/icons/mob/sprite_accessory/genitals/butt.dmi index 9ac2a163cdb453d0a76798a9508bae54ac002d3e..450e419c1173893ed9de82c8aa28fab9cabb9f13 100644 GIT binary patch delta 1142 zcmV-+1d0313C{_TBvw37OjJexW;49Jyy@xb=H}+q)YQ1RxU8(K%gf8|?(Wae&+P2% z(9qEG^762-u;Sw4|7J74zrVAyv(nPi*Vori@d&>F0004WQchCYCSC;;xiWNZoqBESFu1FuO$K~#90?VEve+As`;i4@z^W<3J$|E`miz`7yX z933my{a>$6@8m`ww&AY-vfT~<0001g008hknEtrF8WU|l(2E*Qv>MXO3i2k%uPQhb z%Y|uvQ9)V4S;qNQ7Z3md000000001>M`F8h3hKEK@0m&t?=X{nh4nY86c#sR%3IL? znqK(^Qm4j^qPqGW>Rb=8;T?YQq|CKidL$3z|mu4Mr^ag-5L`F?S^kGgW^^;;Wz^4v8K&`4UAxJ1Dhszdu!t z$T~BMW@mo>Cw{;3KgUq&hpL7;`ss`QX1_ntV1f#=pZ~3byyIBV3N{9U%!B@!%UH1Z zM{E_)^ePloE*Jmqqy8FW_d`@EM;UkeAn2Y!IelyX$1TXON-39v92$y$K(8(@Ak5&C ztxSs6$0{Ni*0p^eyh%StvR5DXmwMZ^j^EQsAI3-O0000000000z~iJrYOpcmzHzZ6f)|N#~(Dkd~Pyzq|00000z_;da<$nRk<2C;~9-aDfVwP_i`Ly_cGzo}u~4oYQu73~gTUpdiT`@}S}1t7&gbQ9{m+gd+uP%`{@@)# zOWwNsx5j^u_^IKUH$gt%_^IJZSe8XEuAe^sHw*wZe|#|gI;x@ws-F8XQ+eBBuD+it zj{7_w&glo?Q4gc*XYUhHQ_axt*&IKN4$Jn>5MSm8z*q1U6YN$WAZZxX_y7O^07*qo IM6N<$f-*lh&j0`b delta 1139 zcmV-(1dRL73CszQBvUz1OjJexW;49Jytufy=H}+<>FLze)X&e)?Ck8UtgQ0#^02V5 z(9qD!%ggTW?&9L&zrVk;v$N9D(%0A5Tgobv00001bW%=J06^y0W&i*Hjgfjte@Tgp zGbOXA7|1l_;!G<_%uR)`;R=#UOG@Gk5;Ke94dUH`{QW`@I!p-ZFeF)r5y?7?N!DRP zvJO-HI+PV${anDI4*(jqab{dk4Z;8b1E@(vK~#90?V5p3>o5#O*VrZ5OSX3V|BuCX zyFMPX(`jgcp6)@UND1+on@-}gf5QO)00000000000000000000003WO_;mel64`}P zFhB7614o7<+gDiOjWdUnx6L!Z`7?!>tc3wVq=DBT;hi&5>j2mHj)zr~4If6c^`qf
KPdSjNu9RDoJ{q*6}%pEWI7Z{3=1x)-B`jByp9oKHWe7000000002szos;% z6LAaDFQGlMO|+=cn*RmiRXLwY>eKlg2oz$jR5{G&4lOfLSF#at_E#j@1l?>Si5^LP z8P9IEP)?_l7&6NxFyyQee_6+{X?Eu4f8zHy|8opw{+QKJNB%FWCGOvIuB;6$&c1i@OC=t)*6q<0W~F`XQ=JN6%RL zAm}zoPTx|WsxP3;lLc`D)ldX_g7N~w_kd)bNl|}nM(T(2W>^pPfBArOk7SQ=uRclr zc>eXI592fQ0000000000!1JUv{)%aP3ydh7Nn5<;|7BYmQOi2`;e#d{{lD6q1xtJR zpXNjU{&^MjvzKDARI|}FBt9{5ufE1Q55#LZdyU@9|HSW@rM!)^~$W3MlKA@3{eF(U(?A(Jn+8V%dG8`3k94 z6Rbf%YCSAr|Gt5=CaBR{Sy=^t$`1i0000000002|2442Tf0h0G?}7TsA{1}MG;R6c zG&%G0g-E_-q|5AY&3gghQoi@mr$%fso#VH~I+_yQ8_r8=bXhVa&rmns2>`9UU;l8c zts$bbVA^uGC8YaoXnwNhvR)lS>rFQRyp`_?W_I(nDgTrIg@SWOkoE$=TlxM9YF>IW z(R%L|LAn=QewLBPS4WWS@whBMc!$uEw{8Hq zl<)W*;?L+#*DI}pbiMOa!;3J_vtC?3jURUdK+PYYOur^o6hYN<-)1tcx0tf;r;7V^ zo)72rjd0S#==#}nB5JA``n{Uz!{{)t|AzQ6KLB3A6+8MO9`<