Skip to content

Commit

Permalink
Merge branch 'master' into refurbished-PA-speed
Browse files Browse the repository at this point in the history
  • Loading branch information
Superlagg committed Jul 3, 2023
2 parents a3d5417 + e0904d4 commit d2e01bb
Show file tree
Hide file tree
Showing 12 changed files with 169 additions and 38 deletions.
6 changes: 6 additions & 0 deletions code/__DEFINES/armor.dm
Original file line number Diff line number Diff line change
Expand Up @@ -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

Check warning on line 966 in code/__DEFINES/armor.dm

View workflow job for this annotation

GitHub Actions / Run Linters

macro redefined: ARMOR_SLOWDOWN_REPA

/*
* Power Armor
* Basically driving a car
Expand Down
5 changes: 3 additions & 2 deletions code/controllers/subsystem/atoms.dm
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
25 changes: 25 additions & 0 deletions code/datums/components/crafting/recipes/recipes_misc.dm
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
88 changes: 54 additions & 34 deletions code/datums/martial/berserker.dm
Original file line number Diff line number Diff line change
@@ -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"
Expand All @@ -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

Expand Down Expand Up @@ -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("<span class='warning'>[A] grabs [D]'s wrist and wrenches it sideways!</span>", \
"<span class='userdanger'>[A] grabs your wrist and violently wrenches it to the side!</span>")
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)
Expand Down Expand Up @@ -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)

Expand All @@ -150,6 +170,6 @@

to_chat(usr, "<span class='notice'>Gutpunch</span>: Harm Harm. Deal additional damage every second punch, with a chance for even more damage!")
to_chat(usr, "<span class='notice'>Shoulder Check</span>: Harm Disarm. Launch people brutally across rooms, and away from you.")
to_chat(usr, "<span class='notice'>Chokeslam</span>: Harm Grab. Chokeslam to the floor. Against prone targets, deal additional stamina damage and disarm them.")
to_chat(usr, span_notice("<span class='notice'>Wrist Wrench</span>: 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, "<span class='notice'>Chokeslam</span>: Harm Grab. Chokeslam to the floor. Against prone targets, deal additional stamina damage and disarm them.")
5 changes: 4 additions & 1 deletion code/datums/traits/good.dm
Original file line number Diff line number Diff line change
Expand Up @@ -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,
Expand Down
7 changes: 7 additions & 0 deletions code/game/objects/items/devices/PDA/PDA.dm
Original file line number Diff line number Diff line change
Expand Up @@ -393,6 +393,13 @@ GLOBAL_LIST_EMPTY(PDAs)
dat += "<li><a href='byond://?src=[REF(src)];choice=pai;option=2'>Eject pAI Device</a></li>"
dat += "</ul>"

if (cartridge)
if(cartridge.access & CART_RESIZE)
dat += "<h4>Experimental</h4>"
dat += "<ul>"
dat += "<li><a href='byond://?src=[REF(src)];choice=50'>[PDAIMG(medical)]Experimental Nanite-Factory</a></li>"
dat += "</ul>"

if (1)
dat += "<h4>[PDAIMG(notes)] Notekeeper V2.2</h4>"
dat += "<a href='byond://?src=[REF(src)];choice=Edit'>Edit</a><br>"
Expand Down
36 changes: 36 additions & 0 deletions code/game/objects/items/devices/PDA/cart.dm
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@
#define CART_QUARTERMASTER (1<<12)
#define CART_HYDROPONICS (1<<13)
#define CART_DRONEPHONE (1<<14)
#define CART_RESIZE (1<<15)


/obj/item/cartridge
Expand Down Expand Up @@ -192,6 +193,11 @@
..()
radio = new(src)

/obj/item/cartridge/resize
name = "\improper Experimental Nanite-Factory cartridge"
icon_state = "cart-mi"
access = CART_RESIZE

/obj/item/cartridge/proc/post_status(command, data1, data2)

var/datum/radio_frequency/frequency = SSradio.return_frequency(FREQ_STATUS_DISPLAYS)
Expand Down Expand Up @@ -599,6 +605,14 @@ Code:
menu += "<br> To use an emoji in a pda message, refer to the guide and add \":\" around the emoji. Your PDA supports the following emoji:<br>"
menu += emoji_table

if (50)
menu = "<h4>[PDAIMG(medical)] Nanite-Factory Experimental Size-Alteration Cartridge Menu</h4>"
menu += {"
<h5> /!\\ Warning! This cartridge is experimental! Use at your own risk! /!\\ </h5><br>
Current Size: [usr.transform.a]<br><br>
<a href='byond://?src=[REF(src)];choice=Resize'>Activate Nanite Factory</a>
"}

if (99) //Newscaster message permission error
menu = "<h5> ERROR : NOT AUTHORIZED [host_pda.id ? "" : "- ID SLOT EMPTY"] </h5>"

Expand Down Expand Up @@ -698,6 +712,28 @@ Code:
host_pda.Topic(null,list("choice"=num2text(host_pda.mode)))
playsound(src, 'sound/machines/terminal_select.ogg', 50, 1)
return

if("Resize")
var/mob/living/U = usr
if(!istype(U, /mob/living/carbon/human))
return

if (usr.transform.a == U.transform.e)
var/current_size = U.transform.a
var/desired_size = input(usr, "Enter desired size in percent", "Choose Size", RESIZE_DEFAULT_SIZE * 100) as num

if(!isnum(desired_size))
desired_size = 100
var/scaled_size = desired_size / 100
var/size_max = CONFIG_GET(number/body_size_max)
var/size_min = CONFIG_GET(number/body_size_min)
var/size_to_use = clamp(scaled_size, size_min, size_max)

U.resize = size_to_use / current_size
U.update_transform()

playsound(src, 'sound/machines/terminal_select.ogg', 50, 1)
return

//emoji previews
if(href_list["emoji"])
Expand Down
2 changes: 1 addition & 1 deletion code/game/objects/items/granters.dm
Original file line number Diff line number Diff line change
Expand Up @@ -511,7 +511,7 @@
martial = /datum/martial_art/berserker
name = "berserker's rites"
martialname = "berserkers rites"
desc = "A paper scroll detailing the sacred rites of the berserker. It is against the law of the Legion for any not walking the path of the berserker to read this."
desc = "A paper scroll detailing the sacred rites of a tribal berserker, the words are awash with primal, barely contained fury."
greet = span_sciradio("You have mastered the rites of the berserker. Use the help verb to see your combos.")
icon = 'icons/obj/wizard.dmi'
icon_state = "scroll2"
Expand Down
6 changes: 6 additions & 0 deletions code/game/objects/items/loadout_beacons.dm
Original file line number Diff line number Diff line change
Expand Up @@ -2422,3 +2422,9 @@ GLOBAL_LIST_EMPTY(loadout_boxes)
entry_flags = LOADOUT_FLAG_WASTER
entry_class = LOADOUT_CAT_SHIELD
spawn_thing = /obj/item/shield/coyote/riotweathered

/datum/loadout_box/beserker
entry_tag = "Berserker's rites"
entry_flags = LOADOUT_FLAG_WASTER
entry_class = LOADOUT_CAT_MISC
spawn_thing = /obj/item/book/granter/martial/berserker
11 changes: 11 additions & 0 deletions code/modules/clothing/head/f13heavy_helmets.dm
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,16 @@
icon_state = "raiderpa_helm"
item_state = "raiderpa_helm"
armor = ARMOR_VALUE_SALVAGE

/obj/item/clothing/head/helmet/f13/power_armor/t45b/hotrod
name = "Refurbished T-45b Hotrod helmet"
desc = "This power armor helmet was restored and modified to protect against flames and high intensity lasers at the cost of some protection against blunt trauma."
icon_state = "t45hotrod_helm"
item_state = "t45hotrod_helm"
armor = ARMOR_VALUE_SALVAGE
armor_tokens = list( ARMOR_MODIFIER_UP_FIRE_T3, ARMOR_MODIFIER_DOWN_MELEE_T2, ARMOR_MODIFIER_UP_LASER_T3,)
slowdown = ARMOR_SLOWDOWN_REPA * ARMOR_SLOWDOWN_GLOBAL_MULT

/obj/item/clothing/head/helmet/f13/heavy/salvaged_pa/t45b/ncr
name = "ncr salvaged T-45b helmet"
desc = "It's an NCR salvaged T-45b power armor helmet, better repaired than regular salvaged PA, and decorated with the NCR flag and other markings for an NCR Heavy Trooper."
Expand Down Expand Up @@ -92,3 +101,5 @@
item_state = "advanced"
armor_tokens = list(ARMOR_MODIFIER_UP_MELEE_T3, ARMOR_MODIFIER_UP_BULLET_T3, ARMOR_MODIFIER_UP_LASER_T3)



11 changes: 11 additions & 0 deletions code/modules/clothing/suits/arfsuits.dm
Original file line number Diff line number Diff line change
Expand Up @@ -3465,6 +3465,17 @@
icon_state = "t51bpowerarmor_bos"
item_state = "t51bpowerarmor_bos"

/obj/item/clothing/suit/armor/power_armor/t45b/hotrod
name = "Refurbished T-45b Hotrod power armor"
desc = "It's a set of T-45b power armor with a with some of its plating replaced by ablative, fire resistant armor. This set has exhaust pipes piped to the pauldrons, flames erupting from them."
icon_state = "t45hotrod"
item_state = "t45hotrod"
armor = ARMOR_VALUE_SALVAGE
slowdown = ARMOR_SLOWDOWN_REPA * ARMOR_SLOWDOWN_GLOBAL_MULT
salvaged_type = /obj/item/clothing/suit/armor/heavy/salvaged_pa/t45b/hotrod
armor_tokens = list(ARMOR_MODIFIER_UP_FIRE_T3, ARMOR_MODIFIER_DOWN_MELEE_T2, ARMOR_MODIFIER_UP_LASER_T3, )


/obj/item/clothing/suit/armor/power_armor/excavator
name = "excavator power armor"
desc = "Developed by Garrahan Mining Co. in collaboration with West Tek, the Excavator-class power armor was designed to protect miners from rockfalls and airborne contaminants while increasing the speed at which they could work. "
Expand Down
5 changes: 5 additions & 0 deletions modular_citadel/code/modules/client/loadout/__donator.dm
Original file line number Diff line number Diff line change
Expand Up @@ -371,6 +371,11 @@
ckeywhitelist = list("dameonowen")
cost = 1

/datum/gear/donator/kits/dameonowencart
name = "Experimental Nanite Factory Cartridge"
path = /obj/item/cartridge/resize
ckeywhitelist = list("dameonowen")

/datum/gear/donator/kits/darknova92
name = "Nikolatz BoS"
path = /obj/item/storage/box/large/custom_kit/darknova92
Expand Down

0 comments on commit d2e01bb

Please sign in to comment.