Skip to content
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

replaces bubblegum's bloody knuckles loot with philosopher's tome #20578

Merged
merged 33 commits into from
Oct 22, 2023

Conversation

LazennG
Copy link
Contributor

@LazennG LazennG commented Oct 9, 2023

Document the changes in your pull request

Replaces the bloody knuckles drop with a new item called philosopher's tome, which can

  • parry to deflect damage

  • cause "explosions" to mine

  • grant ore from killing most enemies

  • do a few animations

    The book starts off with 3 parry charges, that each recharge after 10 seconds. They can be used to activate a shield that immobilizes the user for one second and lasts for half a second. If damage is taken while the shield is up, it's undone when it goes down and the user gets a bonus parry charge along with being healed for 5 brute and burn and whatever brute/burn/stamina damage they took in that time. Whatever damage they took while shielded is redirected towards the nearest target as brute damage, with damage to nonanimals capping at 20. Targets within melee range are shoved away from the user a la disarm.

dreamseeker_a3oIU9Q5vF

When inflicting damage, nonanimals by default take 10 brute with 10ap, while animals take 40. When the damage dealt makes the target cross the 60%, 30%, and 0% thresholds, an "explosion" happens, dealing a tenth of the target's max hp to non-user mobs within a range determined by the target's (maxhp/150)+1, with rocks within this range being mined too. This damage can cause chain reactions. Additionally, if the damage is done with a direct melee attack from the book, an animation will play. Damaging targets at the 30% and 60% thresholds will apply twice the usual damage.

While parrying, the user is unable to drop the book, go into crit, and will leave most crowd control effects placed on them after the shield expires in addition to extinguishing themself. To mitigate free parries, they won't care about pressure damage or temperature damage for the half second the shield is active.

dreamseeker_txMCjijQvS

https://cdn.discordapp.com/attachments/987151374007537714/1160534002634068030/dreamseeker_XojdrATr6f.gif?ex=65350283&is=65228d83&hm=3b5d7044dff9be244fa925579333a24614a6cd5d535146fee81b63cb629911bc&

dreamseeker_FGZG6WBygs

dreamseeker_XojdrATr6f

If the target is catatonic or an animal and reaches 0 hp, they gib when killed and drop a few sheets of an ore (iron, gold, uranium, titanium, silver, diamond, bluespace, glass, or plasma). Otherwise if it's a player they just go into crit and can't be gibbed with this.

oh also i changed the goat king code a bit so it dropping loot was more straightforward and added a new sound for one of the finishers

bubbleblender.mp4

Why is this good for the game?

I regret bloody knuckles because in hindsight they're essentially a forcestick with a weak gimmick attached that doesn't offer any interesting new way to play miner and I believe this does.

Testing

Don't wanna spoil them by posting them all here but i made sure all the animations work along with making sure loot drops correctly and that fauna resume their behavior after the animations.

Spriting

image
sprites for the new book
gwah
gwah2

Wiki Documentation

https://wiki.yogstation.net/wiki/Megafauna#Loot_3
Replacing the bloody knuckles line with something like
"Philosopher's tomegwah, a book that can parry incoming attacks and mine rocks near targets that take enough damage."

Changelog

🆑
rscadd: Added philospher's tome loot
rscdel: Removed bloody knuckles from bg loot
tweak: tweaked the way goat king drops its loot
soundadd: added bubbleblender.ogg
imageadd: added sprites for philospher's tome
/:cl:
huge thanks to @thegoldencat413 for testing, feedback, and spriting of the item. additionally, thanks to @Chubbygummibear for code help, and thanks to @solwashere for helping me figure out what i wanted the item to be thematically

@LazennG LazennG requested review from a team as code owners October 9, 2023 03:05
@Yogbot-13 Yogbot-13 added DME Edit This PR affects the yogstation.DME file Feature This adds new content to the game Revert / Deletion Altoids is probably mad about this Sprites This PR has spriting changes Tweak This PR contains changes to the game. labels Oct 9, 2023
@github-actions github-actions bot added the Sound This PR changes audio files label Oct 9, 2023
@cowbot92
Copy link
Contributor

cowbot92 commented Oct 9, 2023

who let this man COOK

@Moltijoe
Copy link
Contributor

Moltijoe commented Oct 9, 2023

god bless that fuckin portal execute

@Mqiib
Copy link
Contributor

Mqiib commented Oct 9, 2023

What's this??? Interesting and unique items from mining that aren't just reskinned eswords????

@Moltijoe Moltijoe added the Awaiting - Action - Balance Review Code Director Review label Oct 9, 2023
@LazennG LazennG marked this pull request as draft October 11, 2023 02:21
@LazennG
Copy link
Contributor Author

LazennG commented Oct 11, 2023

just learned what easing was so gonna be redoing the animations while trying to use those instead

@LazennG LazennG marked this pull request as ready for review October 14, 2023 06:06
Copy link
Contributor

@Moltijoe Moltijoe left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Code is a nightmare to look at, but i realize you're doing something that byond isn't designed for

var/turf/front = get_step(L.loc, (src.dir))
if(ismineralturf(front))
var/turf/closed/mineral/M = front
M.attempt_drill()
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

what happens if attempt_drill doesn't work for whatever reason?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

double checked and it stops wherever it currently is and returns false, ending the animation

replaced phase++ with phase+1 in addtimers
var/phase into just phase
added returns
also fixed animating people past crit
@LazennG LazennG requested a review from Moltijoe October 17, 2023 07:57
found the thing that makes people ash storm resistant so no farming a billion charges in one storm
@MajManatee MajManatee added Awaiting - Action - HD Awaiting action from Jamie Awaiting - Action - Balance Review Code Director Review and removed Awaiting - Action - Balance Review Code Director Review labels Oct 17, 2023
@LazennG
Copy link
Contributor Author

LazennG commented Oct 21, 2023

bubbleblender.mp4

head dev found the guilty gear strive audio so this is no longer in the pr, it's so zatover bros

Copy link
Contributor

@Moltijoe Moltijoe left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

animation code makes me want to vomit, but it looks fine and you've shown it functions
i look forward to the bugfix prs

@ToasterBiome ToasterBiome merged commit 41bdbc7 into yogstation13:master Oct 22, 2023
5 checks passed
Yogbot-13 added a commit that referenced this pull request Oct 22, 2023
Comment on lines +28 to +29
if(blocks == 0)
icon_state = "grimoireempty"
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This should be on update_icon_state

inflict(thrownby, M, 0, FALSE)

/obj/item/bloodbook/proc/tenderize(mob/living/user, mob/living/target, var/damage = 10)
var/obj/item/bodypart/limb_to_hit = target.get_bodypart(user.zone_selected)
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

You're not checking if they have said limb, it will cause runtimes

var/armor = target.run_armor_check(limb_to_hit, MELEE, armour_penetration = 10)
target.apply_damage(damage, BRUTE, limb_to_hit, armor, wound_bonus=CANT_WOUND)

/obj/item/bloodbook/proc/sceneend(mob/living/target, mob/living/user, var/die = FALSE)
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

no vars in args

var/mob/living/M = hit_atom
inflict(thrownby, M, 0, FALSE)

/obj/item/bloodbook/proc/tenderize(mob/living/user, mob/living/target, var/damage = 10)
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

no vars in args. there's more than just here so replace it everywhere else too.

var/normaldam = 10
var/otherwisedam = 40
COOLDOWN_DECLARE(last_bigfinish)
var/list/orelist = list(/obj/item/stack/ore/iron, /obj/item/stack/ore/uranium, /obj/item/stack/ore/gold, /obj/item/stack/ore/silver, /obj/item/stack/ore/diamond, /obj/item/stack/ore/bluespace_crystal, /obj/item/stack/ore/glass, /obj/item/stack/ore/plasma, /obj/item/stack/ore/titanium)
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This can be a static list and it should be multiline

Comment on lines +69 to +75
for(L in view(9, user))
if(L != user)
log_combat(user, L, "directed a counter towards", src)
to_chat(user, span_warning("[user] redirects incoming damage towards [L]!"))
to_chat(L, span_userdanger("[user] shifts their damage onto you!"))
inflict(user, L, retaliatedam, FALSE)
return
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is supposed to just damage a single random person within a 9 tile radius?

if(blocks < 1)
icon_state = "grimoire"
blocks++
return
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Don't need a return at the end of a proc

target.color = "#ff0000"
target.alpha = 100

/obj/item/bloodbook/proc/shatter(mob/living/simple_animal/target)
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

your new thing(loc) should use drop_location()


/obj/item/bloodbook/proc/tantrum(mob/living/user, mob/living/target, phase = 1, obj/hand, list/slamming)
switch(phase)
if(1)
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

These float numbers should be defines that you will undefine after this proc, same for the ones under.

switch(phase)
if(1)
var/list/wrecking = list()
var/obj/structure/prop/killhand/B = new(target.loc)
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

remove single-letter var please

@JohnFulpWillard
Copy link
Contributor

a little late on the review sorry bros 🥲

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Awaiting - Action - HD Awaiting action from Jamie Balance Council Approved This PR was approved by the Balance Council. DME Edit This PR affects the yogstation.DME file Feature This adds new content to the game Revert / Deletion Altoids is probably mad about this Sound This PR changes audio files Sprites This PR has spriting changes Tweak This PR contains changes to the game.
Projects
None yet
Development

Successfully merging this pull request may close these issues.

9 participants