Skip to content

monsterhunter trick weapon code improvements #6023

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 2 commits into from
Mar 27, 2025
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion code/__DEFINES/~monkestation/antagonists.dm
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
// Monster Hunter stuff
#define upgraded_val(x,y) ( CEILING((x * (1.07 ** y)), 1) )
#define UPGRADED_VAL(x,y) ( CEILING((x * (1.07 ** y)), 1) )
#define CALIBER_BLOODSILVER "bloodsilver"

///Whether a mob is a Monster Hunter
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,3 @@
#define COMSIG_RABBIT_FOUND "rabbit_found"
#define COMSIG_GAIN_INSIGHT "gain_insight"
#define COMSIG_BEASTIFY "beastify"
#define COMSIG_WEAPON_UPGRADE "weapon_upgrade"
Original file line number Diff line number Diff line change
Expand Up @@ -10,11 +10,7 @@
if(weapon.upgrade_level >= 3)
user.balloon_alert(user, "already fully upgraded!")
return
if(weapon.enabled)
user.balloon_alert(user, "weapon must be in base form!")
return
SEND_SIGNAL(weapon, COMSIG_WEAPON_UPGRADE)
weapon.name = "[weapon.base_name] +[weapon.upgrade_level]"
weapon.upgrade_weapon()
balloon_alert(user, "[src] crumbles away...")
playsound(src, 'monkestation/sound/effects/weaponsmithing.ogg', vol = 50)
qdel(src)
Original file line number Diff line number Diff line change
Expand Up @@ -3,23 +3,46 @@
lefthand_file = 'monkestation/icons/mob/inhands/weapons/trick_weapon_lefthand.dmi'
righthand_file = 'monkestation/icons/mob/inhands/weapons/trick_weapon_righthand.dmi'
resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | UNACIDABLE | ACID_PROOF
damtype = BURN
/// Upgrade level of the weapon.
var/upgrade_level = 0
/// Base force when transformed.
var/on_force
/// Base force when in default state.
var/base_force
/// Default name of the weapon.
var/base_name
/// Is the weapon in its transformed state?
var/enabled = FALSE
///force we apply when thrown while active
var/active_thrown_force

/obj/item/melee/trick_weapon/proc/upgrade_weapon()
/obj/item/melee/trick_weapon/Initialize(mapload)
. = ..()
apply_transform_component()

/obj/item/melee/trick_weapon/proc/apply_transform_component()
AddComponent(/datum/component/transforming, \
force_on = on_force , \
throwforce_on = active_thrown_force, \
throw_speed_on = throw_speed, \
sharpness_on = SHARP_EDGED, \
w_class_on = WEIGHT_CLASS_BULKY, \
)
RegisterSignal(src, COMSIG_TRANSFORMING_ON_TRANSFORM, PROC_REF(on_transform))

/obj/item/melee/trick_weapon/update_name(updates)
. = ..()
name = "[initial(name)] +[upgrade_level]"

/obj/item/melee/trick_weapon/proc/on_transform(obj/item/source, mob/user, active)
SIGNAL_HANDLER
enabled = active
force = UPGRADED_VAL(force, upgrade_level)
update_appearance(UPDATE_ICON_STATE)
return NONE

/obj/item/melee/trick_weapon/proc/upgrade_weapon()
upgrade_level++
force = upgraded_val(base_force,upgrade_level)
var/datum/component/transforming/transform = GetComponent(/datum/component/transforming)
transform.force_on = upgraded_val(on_force, upgrade_level)
var/current_base_force = enabled ? on_force : initial(force)
force = UPGRADED_VAL(current_base_force, upgrade_level)
update_name()

/obj/item/melee/trick_weapon/attack(mob/target, mob/living/user, params) //our weapon does 25% less damage on non monsters
var/old_force = force
Expand Down
Original file line number Diff line number Diff line change
@@ -1,12 +1,11 @@
/obj/item/melee/trick_weapon/beast_claw
name = "\improper Beast Claw"
base_name = "\improper Beast Claw"
desc = "The bones seem to still be twitching."
icon_state = "beast_claw"
base_icon_state = "beast_claw"
w_class = WEIGHT_CLASS_SMALL
block_chance = 20
base_force = 18
force = 18
on_force = 23
throwforce = 10
wound_bonus = 25
Expand All @@ -18,23 +17,17 @@
attack_verb_continuous = list("rips", "claws", "gashes", "tears", "lacerates", "dices", "cuts", "attacks")
attack_verb_simple = list("rip", "claw", "gash", "tear", "lacerate", "dice", "cut", "attack" )

/obj/item/melee/trick_weapon/beast_claw/Initialize(mapload)
. = ..()
force = base_force
/obj/item/melee/trick_weapon/beast_claw/apply_transform_component()
AddComponent(/datum/component/transforming, \
force_on = on_force, \
w_class_on = WEIGHT_CLASS_BULKY, \
)
RegisterSignal(src, COMSIG_TRANSFORMING_ON_TRANSFORM, PROC_REF(on_transform))
RegisterSignal(src, COMSIG_WEAPON_UPGRADE, PROC_REF(upgrade_weapon))

/obj/item/melee/trick_weapon/beast_claw/proc/on_transform(obj/item/source, mob/user, active)
SIGNAL_HANDLER
/obj/item/melee/trick_weapon/beast_claw/on_transform(obj/item/source, mob/user, active)
. = ..()
balloon_alert(user, active ? "extended" : "collapsed")
if(active)
playsound(src, 'sound/weapons/fwoosh.ogg', vol = 50)
enabled = active
wound_bonus = enabled ? 45 : src::block_chance
force = active ? upgraded_val(on_force, upgrade_level) : upgraded_val(base_force, upgrade_level)
update_appearance(UPDATE_ICON_STATE)
wound_bonus = enabled ? 45 : initial(wound_bonus)
return COMPONENT_NO_DEFAULT_MESSAGE
Original file line number Diff line number Diff line change
@@ -1,50 +1,32 @@
/obj/item/melee/trick_weapon/darkmoon
name = "Darkmoon Greatsword"
base_name = "Darkmoon Greatsword"
desc = "Ahh my guiding moonlight, you were by my side all along."
icon_state = "darkmoon"
base_icon_state = "darkmoon"
inhand_icon_state = "darkmoon"
w_class = WEIGHT_CLASS_SMALL
block_chance = 20
on_force = 20
base_force = 17
force = 17
light_system = OVERLAY_LIGHT
light_color = "#59b3c9"
light_outer_range = 2
light_power = 2
light_on = FALSE
throwforce = 12
damtype = BURN
active_thrown_force = 20
hitsound = 'sound/weapons/bladeslice.ogg'
attack_verb_continuous = list("attacks", "slashes", "stabs", "slices", "tears", "lacerates", "rips", "dices", "cuts")
attack_verb_simple = list("attack", "slash", "stab", "slice", "tear", "lacerate", "rip", "dice", "cut")
///ready to launch a beam attack?
COOLDOWN_DECLARE(moonbeam_fire)

/obj/item/melee/trick_weapon/darkmoon/Initialize(mapload)
/obj/item/melee/trick_weapon/darkmoon/on_transform(obj/item/source, mob/user, active)
. = ..()
force = base_force
AddComponent(/datum/component/transforming, \
force_on = on_force , \
throwforce_on = 20, \
throw_speed_on = throw_speed, \
sharpness_on = SHARP_EDGED, \
w_class_on = WEIGHT_CLASS_BULKY, \
)
RegisterSignal(src, COMSIG_TRANSFORMING_ON_TRANSFORM, PROC_REF(on_transform))
RegisterSignal(src, COMSIG_WEAPON_UPGRADE, PROC_REF(upgrade_weapon))


/obj/item/melee/trick_weapon/darkmoon/proc/on_transform(obj/item/source, mob/user, active)
SIGNAL_HANDLER
balloon_alert(user, active ? "extended" : "collapsed")
balloon_alert(user, active ? "glows with power" : "turns dormant")
if(active)
playsound(src, 'monkestation/sound/weapons/moonlightsword.ogg', vol = 50)
enabled = active
set_light_on(active)
force = active ? upgraded_val(on_force, upgrade_level) : upgraded_val(base_force, upgrade_level)
update_appearance(UPDATE_ICON_STATE)
return COMPONENT_NO_DEFAULT_MESSAGE

/obj/item/melee/trick_weapon/darkmoon/attack_secondary(atom/target, mob/living/user, clickparams)
Expand Down
Original file line number Diff line number Diff line change
@@ -1,43 +1,28 @@
/obj/item/melee/trick_weapon/hunter_axe
name = "Hunter's Axe"
base_name = "Hunter's Axe"
desc = "A brute's tool of choice."
icon_state = "hunteraxe"
base_icon_state = "hunteraxe"
w_class = WEIGHT_CLASS_SMALL
block_chance = 20
base_force = 20
force = 20
on_force = 25
throwforce = 12
reach = 1
hitsound = 'sound/weapons/bladeslice.ogg'
damtype = BURN
attack_verb_continuous = list("attacks", "slashes", "stabs", "slices", "tears", "lacerates", "rips", "dices", "cuts")
attack_verb_simple = list("attack", "slash", "stab", "slice", "tear", "lacerate", "rip", "dice", "cut")

/obj/item/melee/trick_weapon/hunter_axe/Initialize(mapload)
. = ..()
force = base_force
/obj/item/melee/trick_weapon/hunter_axe/apply_transform_component()
AddComponent(/datum/component/two_handed, \
wieldsound = 'sound/magic/clockwork/fellowship_armory.ogg', \
force_wielded = on_force, \
force_unwielded = base_force, \
wield_callback = CALLBACK(src, PROC_REF(on_wield)), \
unwield_callback = CALLBACK(src, PROC_REF(on_unwield)), \
force_multiplier = (on_force / force), \
wield_callback = CALLBACK(src, PROC_REF(on_wield_change)), \
unwield_callback = CALLBACK(src, PROC_REF(on_wield_change)), \
)
RegisterSignal(src, COMSIG_WEAPON_UPGRADE, PROC_REF(upgrade_weapon))

/obj/item/melee/trick_weapon/hunter_axe/upgrade_weapon()
upgrade_level++
var/datum/component/two_handed/handed = GetComponent(/datum/component/two_handed)
handed.force_wielded = upgraded_val(on_force, upgrade_level)
handed.force_unwielded = upgraded_val(base_force, upgrade_level)
force = handed.force_unwielded

/obj/item/melee/trick_weapon/hunter_axe/proc/on_wield(obj/item/source)
enabled = TRUE
block_chance = 75

/obj/item/melee/trick_weapon/hunter_axe/proc/on_unwield(obj/item/source)
enabled = FALSE
block_chance = src::block_chance
/obj/item/melee/trick_weapon/hunter_axe/proc/on_wield_change()
enabled = HAS_TRAIT(src, TRAIT_WIELDED)
block_chance = HAS_TRAIT(src, TRAIT_WIELDED) ? 75 : src::block_chance
var/current_base_force = HAS_TRAIT(src, TRAIT_WIELDED) ? on_force : initial(on_force)
force = UPGRADED_VAL(current_base_force, upgrade_level)
Original file line number Diff line number Diff line change
@@ -1,41 +1,23 @@
/obj/item/melee/trick_weapon/threaded_cane
name = "Threaded Cane"
base_name = "Threaded Cane"
desc = "A blind man's whip."
icon_state = "threaded_cane"
base_icon_state = "threaded_cane"
inhand_icon_state = "threaded_cane"
w_class = WEIGHT_CLASS_SMALL
block_chance = 20
on_force = 15
base_force = 18
force = 18
throwforce = 12
reach = 1
active_thrown_force = 10
hitsound = 'sound/weapons/bladeslice.ogg'
damtype = BURN
attack_verb_continuous = list("attacks", "slashes", "stabs", "slices", "tears", "lacerates", "rips", "dices", "cuts")
attack_verb_simple = list("attack", "slash", "stab", "slice", "tear", "lacerate", "rip", "dice", "cut")

/obj/item/melee/trick_weapon/threaded_cane/Initialize(mapload)
/obj/item/melee/trick_weapon/threaded_cane/on_transform(obj/item/source, mob/user, active)
. = ..()
force = base_force
AddComponent(/datum/component/transforming, \
force_on = on_force, \
throwforce_on = 10, \
throw_speed_on = throw_speed, \
sharpness_on = SHARP_EDGED, \
w_class_on = WEIGHT_CLASS_BULKY, \
)
RegisterSignal(src, COMSIG_TRANSFORMING_ON_TRANSFORM, PROC_REF(on_transform))
RegisterSignal(src, COMSIG_WEAPON_UPGRADE, PROC_REF(upgrade_weapon))

/obj/item/melee/trick_weapon/threaded_cane/proc/on_transform(obj/item/source, mob/user, active)
SIGNAL_HANDLER
balloon_alert(user, active ? "extended" : "collapsed")
if(active)
playsound(src, 'sound/magic/clockwork/fellowship_armory.ogg', vol = 50)
reach = active ? 2 : 1
enabled = active
force = active ? upgraded_val(on_force, upgrade_level) : upgraded_val(base_force, upgrade_level)
update_appearance(UPDATE_ICON_STATE)
return COMPONENT_NO_DEFAULT_MESSAGE
Loading