diff --git a/code/__DEFINES/armor.dm b/code/__DEFINES/armor.dm index 409cdd38f6b..710c15c2b34 100644 --- a/code/__DEFINES/armor.dm +++ b/code/__DEFINES/armor.dm @@ -959,6 +959,12 @@ GLOBAL_LIST_INIT(armor_token_operation_legend, list( #define ARMOR_SLOWDOWN_REPA 1.2 +/* + * Refurbished Power Armor + * Basically driving a crappy car +*/ +#define ARMOR_SLOWDOWN_REPA 1.2 + /* * Power Armor * Basically driving a car diff --git a/code/controllers/subsystem/atoms.dm b/code/controllers/subsystem/atoms.dm index 845a04e6aca..222788e61b8 100644 --- a/code/controllers/subsystem/atoms.dm +++ b/code/controllers/subsystem/atoms.dm @@ -81,13 +81,14 @@ SUBSYSTEM_DEF(atoms) var/batch_time = ((batch_end - batch_start) * 0.1) var/batch_rate = (this_batch / batch_time) var/batch_percent = (atoms_did / all_atoms) * 100 - var/batch_time_left = ((all_atoms - atoms_did) / batch_rate) portion++ next_milestone = round(all_atoms * (portion * portion_amount)) rates += batch_rate batch_start = REALTIMEOFDAY this_batch = 0 - to_chat(world, span_boldannounce("Init'd [shorten_number(atoms_did, 2)]/[shorten_number(all_atoms, 2)] ([round(batch_percent)]%) atoms in [DisplayTimeText(REALTIMEOFDAY - start_timery)]. \nProjected time left at [shorten_number(batch_rate, 1)]/sec: [DisplayTimeText(batch_time_left)]!")) + var/current_time = REALTIMEOFDAY - start_timery + var/batch_time_left = (current_time / atoms_did) * (all_atoms - atoms_did) + to_chat(world, span_boldannounce("Init'd [shorten_number(atoms_did, 2)]/[shorten_number(all_atoms, 2)] ([round(batch_percent)]%) atoms in [DisplayTimeText(current_time)]. \nProjected time left at [shorten_number(batch_rate, 1)]/sec: [DisplayTimeText(batch_time_left)]!")) #endif CHECK_TICK #ifdef PRINT_ATOM_STATS diff --git a/code/datums/components/crafting/recipes/recipes_misc.dm b/code/datums/components/crafting/recipes/recipes_misc.dm index 4dd7c0c3e73..b8f5d7b0166 100644 --- a/code/datums/components/crafting/recipes/recipes_misc.dm +++ b/code/datums/components/crafting/recipes/recipes_misc.dm @@ -675,6 +675,31 @@ subcategory = CAT_SCAVENGING always_available = FALSE +/datum/crafting_recipe/repair_t45/hotrod + name = "Refurbished T-45b Hotrod Power Armor" + result = /obj/item/clothing/suit/armor/power_armor/t45b/hotrod + reqs = list(/obj/item/clothing/suit/armor/heavy/salvaged_pa/t45b/hotrod = 1, + /obj/item/stack/cable_coil = 5, + /obj/item/stack/crafting/electronicparts = 5, + /obj/item/stock_parts/manipulator/pico = 1, + /obj/item/stock_parts/cell/ammo/mfc = 1) + time = 35 + category = CAT_CRAFTING + subcategory = CAT_SCAVENGING + always_available = FALSE + +/datum/crafting_recipe/repair_t45_helm/hotrod + name = "Refurbished T-45b Hotrod Power Armor Helmet" + result = /obj/item/clothing/head/helmet/f13/power_armor/t45b/hotrod + reqs = list(/obj/item/clothing/head/helmet/f13/heavy/salvaged_pa/t45b/hotrod = 1, + /obj/item/stack/cable_coil = 5, + /obj/item/stack/crafting/electronicparts = 2) + time = 25 + category = CAT_CRAFTING + subcategory = CAT_SCAVENGING + always_available = FALSE + + /datum/crafting_recipe/teachboy name = "Refurbish Educational Pip-Boy 2000" result = /obj/item/pda/teachboy diff --git a/code/datums/martial/berserker.dm b/code/datums/martial/berserker.dm index be2b1ad31b9..e0c06e35828 100644 --- a/code/datums/martial/berserker.dm +++ b/code/datums/martial/berserker.dm @@ -1,6 +1,6 @@ #define HARD_PUNCH_COMBO "HH" #define SHOULDERCHECK_COMBO "HD" -#define CHOKE_SLAM_COMBO "HG" +#define WRIST_WRENCH_COMBO "DD" /datum/martial_art/berserker name = "Berserker Rites" @@ -18,9 +18,9 @@ streak = "" shoulderCheck(A,D) return TRUE - if(findtext(streak,CHOKE_SLAM_COMBO)) + if(findtext(streak,WRIST_WRENCH_COMBO)) streak = "" - chokeSlam(A,D) + wristWrench(A,D) return TRUE return FALSE @@ -65,28 +65,44 @@ return TRUE ///chokeslam: Harm Grab combo, knocks people down, deals stamina damage while they're on the floor -/datum/martial_art/berserker/proc/chokeSlam(mob/living/carbon/human/A, mob/living/carbon/human/D) - var/damage = damage_roll(A,D) - A.do_attack_animation(D, ATTACK_EFFECT_KICK) - var/obj/item/bodypart/affecting = D.get_bodypart(BODY_ZONE_HEAD) - var/armor_block = D.run_armor_check(affecting, "melee") - playsound(get_turf(A), 'sound/effects/hit_kick.ogg', 50, TRUE, -1) - if((D.mobility_flags & MOBILITY_STAND)) - D.apply_damage(damage*0.5, BRUTE, BODY_ZONE_HEAD, armor_block, wound_bonus = CANT_WOUND) - D.DefaultCombatKnockdown(10, null, TRUE) - D.apply_damage(damage + 20, STAMINA, BODY_ZONE_HEAD, armor_block, wound_bonus = CANT_WOUND) //A cit specific change form the tg port to really punish anyone who tries to stand up - D.visible_message(span_warning("[A] grabs [D] by the throat, slamming them face first into the ground!"), \ - span_userdanger("[A] grabs you by the throat, slammed your head into the ground!"), span_hear("You hear a sickening sound of flesh hitting flesh!"), COMBAT_MESSAGE_RANGE, A) - to_chat(A, span_danger("You chokeslam [D]!")) - else - D.apply_damage(damage*0.5, BRUTE, BODY_ZONE_HEAD, armor_block, wound_bonus = CANT_WOUND) - D.apply_damage(damage + 20, STAMINA, BODY_ZONE_HEAD, armor_block, wound_bonus = CANT_WOUND) - D.drop_all_held_items() - D.visible_message(span_warning("[A] pummels [D]!"), \ - span_userdanger("You are kicked in the head by [A]!"), span_hear("You hear a sickening sound of flesh hitting flesh!"), COMBAT_MESSAGE_RANGE, A) - to_chat(A, span_danger("You pummel [D]!")) - log_combat(A, D, "chokeslammed (Berserker") - return TRUE +//datum/martial_art/berserker/proc/chokeSlam(mob/living/carbon/human/A, mob/living/carbon/human/D) + //var/damage = damage_roll(A,D) + //A.do_attack_animation(D, ATTACK_EFFECT_KICK) + //var/obj/item/bodypart/affecting = D.get_bodypart(BODY_ZONE_HEAD) + //var/armor_block = D.run_armor_check(affecting, "melee") + //playsound(get_turf(A), 'sound/effects/hit_kick.ogg', 50, TRUE, -1) + //if((D.mobility_flags & MOBILITY_STAND)) + //D.apply_damage(damage*0.5, BRUTE, BODY_ZONE_HEAD, armor_block, wound_bonus = CANT_WOUND) + //D.DefaultCombatKnockdown(10, null, TRUE) + //D.apply_damage(damage + 20, STAMINA, BODY_ZONE_HEAD, armor_block, wound_bonus = CANT_WOUND) //A cit specific change form the tg port to really punish anyone who tries to stand up + //D.visible_message(span_warning("[A] grabs [D] by the throat, slamming them face first into the ground!"), + //span_userdanger("[A] grabs you by the throat, slammed your head into the ground!"), span_hear("You hear a sickening sound of flesh hitting flesh!"), COMBAT_MESSAGE_RANGE, A) + //to_chat(A, span_danger("You chokeslam [D]!")) + //else + //D.apply_damage(damage*0.5, BRUTE, BODY_ZONE_HEAD, armor_block, wound_bonus = CANT_WOUND) + //D.apply_damage(damage + 20, STAMINA, BODY_ZONE_HEAD, armor_block, wound_bonus = CANT_WOUND) + //D.drop_all_held_items() + //D.visible_message(span_warning("[A] pummels [D]!"), + //span_userdanger("You are kicked in the head by [A]!"), span_hear("You hear a sickening sound of flesh hitting flesh!"), COMBAT_MESSAGE_RANGE, A) + //to_chat(A, span_danger("You pummel [D]!")) + //log_combat(A, D, "chokeslammed (Berserker") + //return TRUE + +/datum/martial_art/berserker/proc/wristWrench(mob/living/carbon/human/A, mob/living/carbon/human/D) + log_combat(A, D, "wrist wrenched (Berserker)") + A.do_attack_animation(D, ATTACK_EFFECT_PUNCH) + D.visible_message("[A] grabs [D]'s wrist and wrenches it sideways!", \ + "[A] grabs your wrist and violently wrenches it to the side!") + playsound(get_turf(A), 'sound/weapons/thudswoosh.ogg', 50, TRUE, -1) + D.emote("scream") + D.dropItemToGround(D.get_active_held_item()) + D.apply_damage(10, BRUTE, pick(BODY_ZONE_L_ARM, BODY_ZONE_R_ARM)) + D.apply_damage(20, STAMINA, pick(A.zone_selected)) + to_chat(A, span_danger("You wrench [D]'s wrist!")) + log_combat(A, D, "wrist wrenched (Berserker)") + + return TRUE + /datum/martial_art/berserker/grab_act(mob/living/carbon/human/A, mob/living/carbon/human/D) add_to_streak("G",D) @@ -124,20 +140,24 @@ . = ..() if(!.) return - ADD_TRAIT(H, TRAIT_NOGUNS, BERSERKER_TRAIT) - ADD_TRAIT(H, TRAIT_PIERCEIMMUNE, BERSERKER_TRAIT) - ADD_TRAIT(H, TRAIT_NODISMEMBER, BERSERKER_TRAIT) - ADD_TRAIT(H, TRAIT_BERSERKER, BERSERKER_TRAIT) + ADD_TRAIT(H, TRAIT_NODRUGS, TRAIT_BERSERKER) + ADD_TRAIT(H, TRAIT_NOGUNS, TRAIT_BERSERKER) + //ADD_TRAIT(H, TRAIT_PIERCEIMMUNE, BERSERKER_TRAIT) + //ADD_TRAIT(H, TRAIT_NODISMEMBER, BERSERKER_TRAIT) + ADD_TRAIT(H, TRAIT_AUTO_CATCH_ITEM, TRAIT_BERSERKER) + ADD_TRAIT(H, TRAIT_BERSERKER, TRAIT_BERSERKER) H.physiology.stamina_mod *= 0.3 //more stamina H.physiology.stun_mod *= 0.3 //better stun resistance /datum/martial_art/berserker/on_remove(mob/living/carbon/human/H) . = ..() - REMOVE_TRAIT(H, TRAIT_NOGUNS, BERSERKER_TRAIT) - REMOVE_TRAIT(H, TRAIT_PIERCEIMMUNE, BERSERKER_TRAIT) - REMOVE_TRAIT(H, TRAIT_NODISMEMBER, BERSERKER_TRAIT) + REMOVE_TRAIT(H, TRAIT_NODRUGS, TRAIT_BERSERKER) + REMOVE_TRAIT(H, TRAIT_NOGUNS, TRAIT_BERSERKER) + //REMOVE_TRAIT(H, TRAIT_PIERCEIMMUNE, BERSERKER_TRAIT) + //REMOVE_TRAIT(H, TRAIT_NODISMEMBER, BERSERKER_TRAIT) REMOVE_TRAIT(H, TRAIT_BERSERKER, BERSERKER_TRAIT) + REMOVE_TRAIT(H, TRAIT_AUTO_CATCH_ITEM, TRAIT_BERSERKER) H.physiology.stamina_mod = initial(H.physiology.stamina_mod) H.physiology.stun_mod = initial(H.physiology.stun_mod) @@ -150,6 +170,6 @@ to_chat(usr, "Gutpunch: Harm Harm. Deal additional damage every second punch, with a chance for even more damage!") to_chat(usr, "Shoulder Check: Harm Disarm. Launch people brutally across rooms, and away from you.") - to_chat(usr, "Chokeslam: Harm Grab. Chokeslam to the floor. Against prone targets, deal additional stamina damage and disarm them.") + to_chat(usr, span_notice("Wrist Wrench: Disarm Disarm. Grab and painfully wrench someone's wrist, disarming them and dealing minor brute and stamina damage.")) to_chat(usr, span_notice("In addition, your body is better conditioned, giving you further stamina and increased stun resistance.")) - + //to_chat(usr, "Chokeslam: Harm Grab. Chokeslam to the floor. Against prone targets, deal additional stamina damage and disarm them.") diff --git a/code/datums/traits/good.dm b/code/datums/traits/good.dm index ea9d14e54a7..b0b36aad168 100644 --- a/code/datums/traits/good.dm +++ b/code/datums/traits/good.dm @@ -95,7 +95,10 @@ GLOBAL_LIST_INIT(pa_repair, list( /datum/crafting_recipe/repair_t45, /datum/crafting_recipe/repair_t45_helm, /datum/crafting_recipe/scrap_pa, - /datum/crafting_recipe/scrap_pa_helm)) + /datum/crafting_recipe/scrap_pa_helm, + /datum/crafting_recipe/repair_t45/hotrod, + /datum/crafting_recipe/repair_t45_helm/hotrod)) + GLOBAL_LIST_INIT(weapons_of_texarkana, list( /datum/crafting_recipe/policepistol, diff --git a/code/game/objects/items/devices/PDA/PDA.dm b/code/game/objects/items/devices/PDA/PDA.dm index 96e3da62c3e..19f3878123b 100644 --- a/code/game/objects/items/devices/PDA/PDA.dm +++ b/code/game/objects/items/devices/PDA/PDA.dm @@ -393,6 +393,13 @@ GLOBAL_LIST_EMPTY(PDAs) dat += "