Skip to content

Commit 1b7a817

Browse files
monsterhunter trick weapon code improvements (#6023)
## About The Pull Request removes alot of copy/paste from trick weapon code. also kills all usage of GetComponent and removes lots of redundant vars. ## Why It's Good For The Game should make it alot easier for future devs to add new trick weapons into the game ## Changelog :cl: code: improved trick weapon code /:cl:
1 parent 05ceb98 commit 1b7a817

File tree

8 files changed

+55
-95
lines changed

8 files changed

+55
-95
lines changed

code/__DEFINES/~monkestation/antagonists.dm

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
// Monster Hunter stuff
2-
#define upgraded_val(x,y) ( CEILING((x * (1.07 ** y)), 1) )
2+
#define UPGRADED_VAL(x,y) ( CEILING((x * (1.07 ** y)), 1) )
33
#define CALIBER_BLOODSILVER "bloodsilver"
44

55
///Whether a mob is a Monster Hunter
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
11
#define COMSIG_RABBIT_FOUND "rabbit_found"
22
#define COMSIG_GAIN_INSIGHT "gain_insight"
33
#define COMSIG_BEASTIFY "beastify"
4-
#define COMSIG_WEAPON_UPGRADE "weapon_upgrade"

monkestation/code/modules/antagonists/monster_hunters/tools/rabbit_eye.dm

+1-5
Original file line numberDiff line numberDiff line change
@@ -10,11 +10,7 @@
1010
if(weapon.upgrade_level >= 3)
1111
user.balloon_alert(user, "already fully upgraded!")
1212
return
13-
if(weapon.enabled)
14-
user.balloon_alert(user, "weapon must be in base form!")
15-
return
16-
SEND_SIGNAL(weapon, COMSIG_WEAPON_UPGRADE)
17-
weapon.name = "[weapon.base_name] +[weapon.upgrade_level]"
13+
weapon.upgrade_weapon()
1814
balloon_alert(user, "[src] crumbles away...")
1915
playsound(src, 'monkestation/sound/effects/weaponsmithing.ogg', vol = 50)
2016
qdel(src)

monkestation/code/modules/antagonists/monster_hunters/weapons/_trick_weapon.dm

+31-8
Original file line numberDiff line numberDiff line change
@@ -3,23 +3,46 @@
33
lefthand_file = 'monkestation/icons/mob/inhands/weapons/trick_weapon_lefthand.dmi'
44
righthand_file = 'monkestation/icons/mob/inhands/weapons/trick_weapon_righthand.dmi'
55
resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | UNACIDABLE | ACID_PROOF
6+
damtype = BURN
67
/// Upgrade level of the weapon.
78
var/upgrade_level = 0
89
/// Base force when transformed.
910
var/on_force
10-
/// Base force when in default state.
11-
var/base_force
12-
/// Default name of the weapon.
13-
var/base_name
1411
/// Is the weapon in its transformed state?
1512
var/enabled = FALSE
13+
///force we apply when thrown while active
14+
var/active_thrown_force
1615

17-
/obj/item/melee/trick_weapon/proc/upgrade_weapon()
16+
/obj/item/melee/trick_weapon/Initialize(mapload)
17+
. = ..()
18+
apply_transform_component()
19+
20+
/obj/item/melee/trick_weapon/proc/apply_transform_component()
21+
AddComponent(/datum/component/transforming, \
22+
force_on = on_force , \
23+
throwforce_on = active_thrown_force, \
24+
throw_speed_on = throw_speed, \
25+
sharpness_on = SHARP_EDGED, \
26+
w_class_on = WEIGHT_CLASS_BULKY, \
27+
)
28+
RegisterSignal(src, COMSIG_TRANSFORMING_ON_TRANSFORM, PROC_REF(on_transform))
29+
30+
/obj/item/melee/trick_weapon/update_name(updates)
31+
. = ..()
32+
name = "[initial(name)] +[upgrade_level]"
33+
34+
/obj/item/melee/trick_weapon/proc/on_transform(obj/item/source, mob/user, active)
1835
SIGNAL_HANDLER
36+
enabled = active
37+
force = UPGRADED_VAL(force, upgrade_level)
38+
update_appearance(UPDATE_ICON_STATE)
39+
return NONE
40+
41+
/obj/item/melee/trick_weapon/proc/upgrade_weapon()
1942
upgrade_level++
20-
force = upgraded_val(base_force,upgrade_level)
21-
var/datum/component/transforming/transform = GetComponent(/datum/component/transforming)
22-
transform.force_on = upgraded_val(on_force, upgrade_level)
43+
var/current_base_force = enabled ? on_force : initial(force)
44+
force = UPGRADED_VAL(current_base_force, upgrade_level)
45+
update_name()
2346

2447
/obj/item/melee/trick_weapon/attack(mob/target, mob/living/user, params) //our weapon does 25% less damage on non monsters
2548
var/old_force = force
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,11 @@
11
/obj/item/melee/trick_weapon/beast_claw
22
name = "\improper Beast Claw"
3-
base_name = "\improper Beast Claw"
43
desc = "The bones seem to still be twitching."
54
icon_state = "beast_claw"
65
base_icon_state = "beast_claw"
76
w_class = WEIGHT_CLASS_SMALL
87
block_chance = 20
9-
base_force = 18
8+
force = 18
109
on_force = 23
1110
throwforce = 10
1211
wound_bonus = 25
@@ -18,23 +17,17 @@
1817
attack_verb_continuous = list("rips", "claws", "gashes", "tears", "lacerates", "dices", "cuts", "attacks")
1918
attack_verb_simple = list("rip", "claw", "gash", "tear", "lacerate", "dice", "cut", "attack" )
2019

21-
/obj/item/melee/trick_weapon/beast_claw/Initialize(mapload)
22-
. = ..()
23-
force = base_force
20+
/obj/item/melee/trick_weapon/beast_claw/apply_transform_component()
2421
AddComponent(/datum/component/transforming, \
2522
force_on = on_force, \
2623
w_class_on = WEIGHT_CLASS_BULKY, \
2724
)
2825
RegisterSignal(src, COMSIG_TRANSFORMING_ON_TRANSFORM, PROC_REF(on_transform))
29-
RegisterSignal(src, COMSIG_WEAPON_UPGRADE, PROC_REF(upgrade_weapon))
3026

31-
/obj/item/melee/trick_weapon/beast_claw/proc/on_transform(obj/item/source, mob/user, active)
32-
SIGNAL_HANDLER
27+
/obj/item/melee/trick_weapon/beast_claw/on_transform(obj/item/source, mob/user, active)
28+
. = ..()
3329
balloon_alert(user, active ? "extended" : "collapsed")
3430
if(active)
3531
playsound(src, 'sound/weapons/fwoosh.ogg', vol = 50)
36-
enabled = active
37-
wound_bonus = enabled ? 45 : src::block_chance
38-
force = active ? upgraded_val(on_force, upgrade_level) : upgraded_val(base_force, upgrade_level)
39-
update_appearance(UPDATE_ICON_STATE)
32+
wound_bonus = enabled ? 45 : initial(wound_bonus)
4033
return COMPONENT_NO_DEFAULT_MESSAGE

monkestation/code/modules/antagonists/monster_hunters/weapons/darkmoon.dm

+4-22
Original file line numberDiff line numberDiff line change
@@ -1,50 +1,32 @@
11
/obj/item/melee/trick_weapon/darkmoon
22
name = "Darkmoon Greatsword"
3-
base_name = "Darkmoon Greatsword"
43
desc = "Ahh my guiding moonlight, you were by my side all along."
54
icon_state = "darkmoon"
65
base_icon_state = "darkmoon"
76
inhand_icon_state = "darkmoon"
87
w_class = WEIGHT_CLASS_SMALL
98
block_chance = 20
109
on_force = 20
11-
base_force = 17
10+
force = 17
1211
light_system = OVERLAY_LIGHT
1312
light_color = "#59b3c9"
1413
light_outer_range = 2
1514
light_power = 2
1615
light_on = FALSE
1716
throwforce = 12
18-
damtype = BURN
17+
active_thrown_force = 20
1918
hitsound = 'sound/weapons/bladeslice.ogg'
2019
attack_verb_continuous = list("attacks", "slashes", "stabs", "slices", "tears", "lacerates", "rips", "dices", "cuts")
2120
attack_verb_simple = list("attack", "slash", "stab", "slice", "tear", "lacerate", "rip", "dice", "cut")
2221
///ready to launch a beam attack?
2322
COOLDOWN_DECLARE(moonbeam_fire)
2423

25-
/obj/item/melee/trick_weapon/darkmoon/Initialize(mapload)
24+
/obj/item/melee/trick_weapon/darkmoon/on_transform(obj/item/source, mob/user, active)
2625
. = ..()
27-
force = base_force
28-
AddComponent(/datum/component/transforming, \
29-
force_on = on_force , \
30-
throwforce_on = 20, \
31-
throw_speed_on = throw_speed, \
32-
sharpness_on = SHARP_EDGED, \
33-
w_class_on = WEIGHT_CLASS_BULKY, \
34-
)
35-
RegisterSignal(src, COMSIG_TRANSFORMING_ON_TRANSFORM, PROC_REF(on_transform))
36-
RegisterSignal(src, COMSIG_WEAPON_UPGRADE, PROC_REF(upgrade_weapon))
37-
38-
39-
/obj/item/melee/trick_weapon/darkmoon/proc/on_transform(obj/item/source, mob/user, active)
40-
SIGNAL_HANDLER
41-
balloon_alert(user, active ? "extended" : "collapsed")
26+
balloon_alert(user, active ? "glows with power" : "turns dormant")
4227
if(active)
4328
playsound(src, 'monkestation/sound/weapons/moonlightsword.ogg', vol = 50)
44-
enabled = active
4529
set_light_on(active)
46-
force = active ? upgraded_val(on_force, upgrade_level) : upgraded_val(base_force, upgrade_level)
47-
update_appearance(UPDATE_ICON_STATE)
4830
return COMPONENT_NO_DEFAULT_MESSAGE
4931

5032
/obj/item/melee/trick_weapon/darkmoon/attack_secondary(atom/target, mob/living/user, clickparams)
Original file line numberDiff line numberDiff line change
@@ -1,43 +1,28 @@
11
/obj/item/melee/trick_weapon/hunter_axe
22
name = "Hunter's Axe"
3-
base_name = "Hunter's Axe"
43
desc = "A brute's tool of choice."
54
icon_state = "hunteraxe"
65
base_icon_state = "hunteraxe"
76
w_class = WEIGHT_CLASS_SMALL
87
block_chance = 20
9-
base_force = 20
8+
force = 20
109
on_force = 25
1110
throwforce = 12
1211
reach = 1
1312
hitsound = 'sound/weapons/bladeslice.ogg'
14-
damtype = BURN
1513
attack_verb_continuous = list("attacks", "slashes", "stabs", "slices", "tears", "lacerates", "rips", "dices", "cuts")
1614
attack_verb_simple = list("attack", "slash", "stab", "slice", "tear", "lacerate", "rip", "dice", "cut")
1715

18-
/obj/item/melee/trick_weapon/hunter_axe/Initialize(mapload)
19-
. = ..()
20-
force = base_force
16+
/obj/item/melee/trick_weapon/hunter_axe/apply_transform_component()
2117
AddComponent(/datum/component/two_handed, \
2218
wieldsound = 'sound/magic/clockwork/fellowship_armory.ogg', \
23-
force_wielded = on_force, \
24-
force_unwielded = base_force, \
25-
wield_callback = CALLBACK(src, PROC_REF(on_wield)), \
26-
unwield_callback = CALLBACK(src, PROC_REF(on_unwield)), \
19+
force_multiplier = (on_force / force), \
20+
wield_callback = CALLBACK(src, PROC_REF(on_wield_change)), \
21+
unwield_callback = CALLBACK(src, PROC_REF(on_wield_change)), \
2722
)
28-
RegisterSignal(src, COMSIG_WEAPON_UPGRADE, PROC_REF(upgrade_weapon))
2923

30-
/obj/item/melee/trick_weapon/hunter_axe/upgrade_weapon()
31-
upgrade_level++
32-
var/datum/component/two_handed/handed = GetComponent(/datum/component/two_handed)
33-
handed.force_wielded = upgraded_val(on_force, upgrade_level)
34-
handed.force_unwielded = upgraded_val(base_force, upgrade_level)
35-
force = handed.force_unwielded
36-
37-
/obj/item/melee/trick_weapon/hunter_axe/proc/on_wield(obj/item/source)
38-
enabled = TRUE
39-
block_chance = 75
40-
41-
/obj/item/melee/trick_weapon/hunter_axe/proc/on_unwield(obj/item/source)
42-
enabled = FALSE
43-
block_chance = src::block_chance
24+
/obj/item/melee/trick_weapon/hunter_axe/proc/on_wield_change()
25+
enabled = HAS_TRAIT(src, TRAIT_WIELDED)
26+
block_chance = HAS_TRAIT(src, TRAIT_WIELDED) ? 75 : src::block_chance
27+
var/current_base_force = HAS_TRAIT(src, TRAIT_WIELDED) ? on_force : initial(on_force)
28+
force = UPGRADED_VAL(current_base_force, upgrade_level)
Original file line numberDiff line numberDiff line change
@@ -1,41 +1,23 @@
11
/obj/item/melee/trick_weapon/threaded_cane
22
name = "Threaded Cane"
3-
base_name = "Threaded Cane"
43
desc = "A blind man's whip."
54
icon_state = "threaded_cane"
65
base_icon_state = "threaded_cane"
76
inhand_icon_state = "threaded_cane"
87
w_class = WEIGHT_CLASS_SMALL
98
block_chance = 20
109
on_force = 15
11-
base_force = 18
10+
force = 18
1211
throwforce = 12
13-
reach = 1
12+
active_thrown_force = 10
1413
hitsound = 'sound/weapons/bladeslice.ogg'
15-
damtype = BURN
1614
attack_verb_continuous = list("attacks", "slashes", "stabs", "slices", "tears", "lacerates", "rips", "dices", "cuts")
1715
attack_verb_simple = list("attack", "slash", "stab", "slice", "tear", "lacerate", "rip", "dice", "cut")
1816

19-
/obj/item/melee/trick_weapon/threaded_cane/Initialize(mapload)
17+
/obj/item/melee/trick_weapon/threaded_cane/on_transform(obj/item/source, mob/user, active)
2018
. = ..()
21-
force = base_force
22-
AddComponent(/datum/component/transforming, \
23-
force_on = on_force, \
24-
throwforce_on = 10, \
25-
throw_speed_on = throw_speed, \
26-
sharpness_on = SHARP_EDGED, \
27-
w_class_on = WEIGHT_CLASS_BULKY, \
28-
)
29-
RegisterSignal(src, COMSIG_TRANSFORMING_ON_TRANSFORM, PROC_REF(on_transform))
30-
RegisterSignal(src, COMSIG_WEAPON_UPGRADE, PROC_REF(upgrade_weapon))
31-
32-
/obj/item/melee/trick_weapon/threaded_cane/proc/on_transform(obj/item/source, mob/user, active)
33-
SIGNAL_HANDLER
3419
balloon_alert(user, active ? "extended" : "collapsed")
3520
if(active)
3621
playsound(src, 'sound/magic/clockwork/fellowship_armory.ogg', vol = 50)
3722
reach = active ? 2 : 1
38-
enabled = active
39-
force = active ? upgraded_val(on_force, upgrade_level) : upgraded_val(base_force, upgrade_level)
40-
update_appearance(UPDATE_ICON_STATE)
4123
return COMPONENT_NO_DEFAULT_MESSAGE

0 commit comments

Comments
 (0)