Add Ororon high jump and high_plunge.#2334
Add Ororon high jump and high_plunge.#2334jwalk-511 wants to merge 16 commits intogenshinsim:mainfrom
Conversation
Implement Hold Param for Jump. Add NS Blessing on Held Jump. Add Airborne Ororon State. Add High_Plunge and High_Plunge[fall=1], allowable while ororon has AirborneOroron. Todo: Frames
Most packages don't use Characters, they use charWrappers. I can't overload charWrapper, so just require check for 2 statuses instead.
Ororon test config validates frames and animation state changes work as expected.
Ororon can high_plunge before he can use fall cancel, so added lines to allow delay of fall cancel if triggered too early.
…smission blessing is added
Updated fall->jump cancels, plunge->jump cancel, plunge hitmarks, and manually added plunge talent curves.
Remove test config. Modify enter/exit of transmission status to be handled by method calls within nightsoul.go. Refactored Ororon to use above method calls instead of modifying status directly.
…ding NS duration on refresh Removed independent NS transmission. - Ororon does not exit blessing on A1 exit if jump blessing is active. - Ororon does not exit blessing on Jump exit if A1 blessing is active - Remove all references to nightsoul.NightsoulTransmissionBlessingKey Fix A1 NS duration refresh. - Call A1EnterBlessing every time. - Add check to A1ExitBlessing to return early if A1EnterBlessing has been called again since last call. Fix lint - Remove constant return NIL from private method.
| // Plunge -> X | ||
| plungeFrames = frames.InitAbilSlice(66) // Default is From plunge animation start to swap icon un-gray | ||
| plungeFrames[action.ActionAttack] = 68 | ||
| plungeFrames[action.ActionAim] = 66 | ||
| plungeFrames[action.ActionSkill] = 65 | ||
| plungeFrames[action.ActionBurst] = 65 | ||
| plungeFrames[action.ActionDash] = 53 | ||
| plungeFrames[action.ActionJump] = 82 | ||
| plungeFrames[action.ActionWalk] = 80 | ||
| plungeFrames[action.ActionSwap] = 66 |
There was a problem hiding this comment.
Source shared in ororon.go review comment
internal/characters/ororon/jump.go
Outdated
| c.QueueCharTask(func() { | ||
| h := c.Core.Player | ||
| // Apply stamina reduction mods. | ||
| stamDrain := h.AbilStamCost(c.Index, action.ActionJump, map[string]int{"hold": 1}) |
There was a problem hiding this comment.
but there's the map from the Jump method
There was a problem hiding this comment.
That's true; I was trying to make the function just a little bit more lightweight by only passing the hold integer as a parameter, rather than the entire p map. But the fact that I have to re-construct the map and pass it to h.AbilStamCost probably cancels that out anyway
internal/characters/ororon/ororon.go
Outdated
| // Hold Jump | ||
| jumpHoldFrames = make([][]int, 2) | ||
| // Hold Jump -> X | ||
| jumpHoldFrames[0] = frames.InitAbilSlice(60 * 10) // set to very high number for most abilities | ||
| jumpHoldFrames[0][action.ActionHighPlunge] = plungeCancelFrames | ||
| // Fall -> X | ||
| jumpHoldFrames[1] = frames.InitAbilSlice(fallFrames) | ||
| jumpHoldFrames[1][action.ActionAttack] = 45 | ||
| jumpHoldFrames[1][action.ActionAim] = 46 | ||
| jumpHoldFrames[1][action.ActionSkill] = 45 | ||
| jumpHoldFrames[1][action.ActionBurst] = 46 | ||
| jumpHoldFrames[1][action.ActionDash] = 46 | ||
| jumpHoldFrames[1][action.ActionJump] = 45 | ||
| jumpHoldFrames[1][action.ActionWalk] = 47 | ||
| jumpHoldFrames[1][action.ActionSwap] = 44 |
There was a problem hiding this comment.
move jump frames to jump.go
There was a problem hiding this comment.
Frames source for fall->x and for low_plunge->x: https://docs.google.com/spreadsheets/d/1ru_C_1vh_0k3u-NdJFcq079N_vstn055PVsL66eCoN8/edit?gid=2018562987#gid=2018562987
jumpHoldFrames[1] corresponds to fall frames, which is used by both low_plunge[fall=1] and by high_jump, when the jump is allowed to expire naturally. I left it in ororon.go to make it more obvious it wasn't only for jump.go
I'll move frames to jump.go anyway
There was a problem hiding this comment.
I don't think anyone's verified the frames I counted yet.
Once they are verified, I think they should be added to the main oro frames sheet, and then I can link that within the comments in the code
TODO: Pipeline Run
When Ororon uses a hold jump in-game, he initiates a form of NS transmission, leaping high in the air and gaining the NS Blessing status. This NS Blessing exists independently of the NS Blessing from his A1 passive but can still allow the extended Scroll of the Hero of the Cinder City 4pc effect to trigger.
While airborne, he can fall, high plunge, or aim. Aim is not implemented here. Ororon cannot cancel his high jump before reaching max height, so low_plunge is also not implemented. To prevent implementation of movement tech, Ororon is forcefully transitioned into the fall state on the frame he would open his glider.
When Ororon uses high jump, he drains 75 stamina. Stamina does not resume regeneration until he initiates another action. He does not require all 75 stamina to initiate a high jump and will drain to 0 if less than 75 stamina remains. When Ororon has drained all stamina,
he is unable to initiate a normal fall cancel and will only be able to plungeOroron can't cancel normally but can initiate an equivalent fall cancel by attempting to walk (glide) forward.Implementation details:
Ororon's high jump code schedules a callback to a Player.exec() call as a proof of concept of forcefully changing the player's animation state. The concepts used should be applicable to any character who automatically executes an action outside of a GCSL statement, such as Mavuika Charge starting in the NA state and transitioning to the CA state, or Chasca transitioning from the charge state to a falling state upon NS expiry. This is not strictly needed for Ororon, and can be changed upon request.
GCSL notes:
jump:
param hold:
High_Plunge:
param fall:
Frames done:
https://docs.google.com/spreadsheets/d/1TUoz-kPRTnH2ShCxijokC46CBMjtYj5qRztgsd_QZR0/edit?pli=1&gid=1526454145#gid=1526454145
Other todo:
Code implemented:
JUMP
? 5? TBDSTAMINA
NS BLESSING
High PLUNGE
STAMINA
NS BLESSING
Notes: Stamina is probably terribly bugged and also overcomplicated. My ability to accurately test stamina drain and resume timings is hampered by https://library.keqingmains.com/evidence/combat-mechanics/damage/other/client-and-server#high-ping-interactions.
Stamina regen timing assumed to occur at plunge start frame if fall=0, or on hitting ground if fall=1. https://discord.com/channels/845087716541595668/983391844631212112/1338586013752229889