Post subject: Shaman King - Master of Spirits
Joined: 12/10/2007
Posts: 260
Location: Oregon
I had this game laying around from 2004 and I started playing it the other day. It's a pretty fun game and I noticed there was no topic on it here. Would this be a possible game to TAS?
Editor, Emulator Coder, Expert player (2156)
Joined: 5/22/2007
Posts: 1134
Location: Glitchvania
zggzdydp & I have tested it but found it not so TAS-friendly speedrun-friendly.
<klmz> it reminds me of that people used to keep quoting adelikat's IRC statements in the old good days <adelikat> no doubt <adelikat> klmz, they still do
Joined: 12/10/2007
Posts: 260
Location: Oregon
I was thinking it may have that problem because jumping is pretty slow and slashing takes a few frames.
Editor, Emulator Coder, Expert player (2156)
Joined: 5/22/2007
Posts: 1134
Location: Glitchvania
Besides of slow movements, its graphics/sound effects aren't so great, and the cut-ins of special abilities will drive the speed-oriented TASer insane. The level design isn't as interesting as M-games or Castlevania's, while you have to travel to and fro a single level without any sequence-breaks. However, if you want to give it a try, I'll be watching your WIP's as long as I have spare time, but please don't expect much from me because I am not a pro on this game by any means. Well, a small trick: Try to back-dash off platforms and slash in mid-air. That somewhat reminds me of whip-launch in HoD. EDIT: Well, maybe you can compare this game with its sequel that is also on GBA.
<klmz> it reminds me of that people used to keep quoting adelikat's IRC statements in the old good days <adelikat> no doubt <adelikat> klmz, they still do
Samsara
She/They
Senior Judge, Site Admin, Expert player (2238)
Joined: 11/13/2006
Posts: 2822
Location: Northern California
Link to video Surprised this game even had a thread in the first place, and even more surprised that I still had a super old and super short WIP laying around. So here's how this game looks in a TAS setting. I have no intention of continuing this, but if anyone else wants to pick it up for some reason I can probably remember some of the things I found out.
TASvideos Admin and acting Senior Judge 💙 Currently unable to dedicate a lot of time to the site, taking care of family. Now infrequently posting on Bluesky
warmCabin wrote:
You shouldn't need a degree in computer science to get into this hobby.
Editor, Experienced player (848)
Joined: 5/2/2015
Posts: 696
Location: France
https://youtu.be/8f6ZmqI6mAQ User movie #29256451864824320 User movie #29256467223136109 - ram watch Second game, but posting here because the games are very similar; Easy is used due to more damage boosts and more damage dealing. For movement, we have ledge backdashing > damage boosting > backdashing > jumping > walking as the hierarchy of movement. One interesting quirck is that backdashing off a ledge as such that you remain in the air will retain your speed, and as such we can move at a whooping 984! speed, compared to the 512 of damage boosting, the 448 of jumping and 416 of walking.
Editor, Experienced player (848)
Joined: 5/2/2015
Posts: 696
Location: France
https://youtube.com/watch?feature=youtu.be&v=TmjyBUCsSbs Thanks to arandomgametaser for the encode. This is the first 7% of the game! Movement tech is pretty interesting to tackle thanks to the diverse movements options. Again, damage boosting is king in most cases thanks to being able to deal effectively with most hazards (due to the very good speed it gives and invicibility), and ledge backdashing to retain the glorious 1024 speed (more than double damageboosting speed) is abused to its fullest. I get the jumpslash halfway through. The jumpslash is a pretty slow move overall, although the first third of it is faster than backdashing and can be used to exit areas slightly faster in a good postion; it's also convenient when needing to fall while there is an enemy, and is used once in this situation. The real strength of the jumpslash is the ridiculous damage dealt. Jumpslashing deals more damage than anything else we have currently in our moveset. The drawback would be normally that you can only apply it once: however, its damage applies very frequently in front of Yoh. This is normally not abusable in normal play, but the other quirck of jumpslashing comes in: it will set Yoh's x speed to 0 if he encounters an enemy. As such, with optimal positioning, each jumpslash is able to be hit three! times, dealing much more damage than all our other options will ever give us for about half the game. You can see it in action at the robot fight.
Editor, Experienced player (848)
Joined: 5/2/2015
Posts: 696
Location: France
Link to video This is the first 13 minutes of the game! There's a lot to comment about this, but I'm keeping it for submission (too lazy to rerwite most comments here.) Estimating final time to be around 40 minutes.
Editor, Experienced player (848)
Joined: 5/2/2015
Posts: 696
Location: France
http://chunk.io/f/ee10b3356de0413dbbf7c398927f3070 So I need to redo this run, because I made a significant routing mistake: not picking up all items that give equip slots. This makes the game uncompletable, as you need to equip certain soul combinaisons (which require all five equip slots) to get certain souls and finish the game. It does mean routing gets a bit easier, since I don't have to worry about this anymore. Another reason for restarting was three tricks I found out while making the run: * Attacking trick. This is a really wierd trick: by simply attacking, Yoh's hitbox gets shifted downwards very slightly, for the entirety of the animation. While this doens't seem very significant, having Yoh's hitbox shift down means you can hit the ground a frame earlier for every time you are in the air (and backdash a frame earlier, jump a frame earlier, dash a frame earlier, etc.), leading to a significant improvement. Since the hitbox shift lasts for the duration of the slash, I have quite a few opportunities to make movement more interesting to watch. * Neutral speed conservation. When Yoh is in the air, he keeps all his speed as long as he holds the same direction he is going in, carrying over all your speed. But when landing, Yoh would go back to his normal 416 speed. The solution is simply to not hold any input when Yoh lands on the ground. This way, we can keep a portion of Yoh speed if it was greater than his usual speed when he lands (the greater the speed, the more it decreases each frame). Especially useful in the early game where the fastest way of movement is backdashing off ledges (1024 speed). * Attack cancelling. Yoh's first slash has two phases: the first which lasts 14 frames, and the second which lasts 12 frames. During the first phase Yoh cannot move in any way (though he can still use souls), but during the second phase he can move. So by moving after attacking (in the second phase of the slash) it's possible to cut off a lot of frames, and as such attack a lot faster. Other than the attacking trick, not a lot has changed movement wise. On short distances, I use jumping because of the significant speed difference (448 vs 416). Damage boosting (512 speed) is done much higher in the air as well because I can keep the 512 speed for as long as Yoh is airbone.
Editor, Experienced player (848)
Joined: 5/2/2015
Posts: 696
Location: France
So I was working in "secret" on this for the last few months, then accidently deleted my Windows VM. My last backup has 10 minutes of the TAS lost. At least I learned to not use rm like an idiot..
Experienced player (704)
Joined: 2/5/2012
Posts: 1799
Location: Brasil
wow,that's very disappointing,at least you know what you've done and has info to progress a lot faster. Also, what is it with people not wanting to backup stuff online lol?Any progress i have i just jam it up here so it won't explode or something.
I want all good TAS inside TASvideos, it's my motto. TAS i'm interested: Megaman series, specially the RPGs! Where is the mmbn1 all chips TAS we deserve? Where is the Command Mission TAS? i'm slowly moving away from TASing fighting games for speed, maybe it's time to start finding some entertainment value in TASing.
Editor, Experienced player (848)
Joined: 5/2/2015
Posts: 696
Location: France
So, since then I've been working on Shaman King 1, for no particular reason. A WIP is coming soon, but in the meantime I'm putting up my script here. Here's what it looks like:
Editor, Experienced player (848)
Joined: 5/2/2015
Posts: 696
Location: France
Link to video User movie #40250628616763089 This is the first 8 minutes of the game! There's a lot to say about this, but I don't want to spring up a wall of text so I'll stick to the basics. We have four main methods of movement in the game (all values in subpixels, 1 pixel= 256 subpixels) - walking, 416 speed - jumping, 432 speed, (can be brought to 464 with flipping), 4 frames of startup (0 speed) - damage boosting, 512 speed - backdashing, averages ~512.3 speed; 1 frame of startup (0 speed) The reason movement is so interesting in this game is the idea of control A constant choice I have to make, is when to sacrifice speed for more control? Obviously, since we're TASing, I always want to go as fast as possible, but a lot of the time I will need precise position to execute some tricks - ledge backdashing, a precise jump, backdash-skipping and so on. This is where my abstract notion of control comes in; it allows me to precisely manipulate my position for these tricks. In general, the slower a form of movement is and the less distance you are forced to go over with it, the better it allows to control my position and as such get the result I want. Each form of movement, while faster than the last, also has less control over it than the last: - walking can be done anywhere at almost any time, making it ideal for crossing small distances - jumping gives the freedom to attack without slowing down, and is ideal for subpixel control (since you can slow down or speed up with a single input), however it is not fitted for small distances since even the smallest jump is pretty large - damage boosting gives invicibility, as well as a noticable height boost, but makes Yoh take damage - backdashing is the fastest, but you cannot do anything else during it, it lasts for 32 frames, and is uncontrollable unless Yoh goes in the air. There are other forms of movement here, but I don't describe them for the sake of brievety. Also, these existing movements can be modified as well for more precise subpixel positioning, etc. (This part is not very well explained, but I hope it gets the point across..) In terms of tricks, we have: Flipping - when jumping, we need these inputs: > - [blank] - >. If this is done on the first possible frame, the first right input can be ommited. The blank allows Yoh to slow down to 432 speed, then speed back up to 464 (?!) speed, even though the max when jumping is 432. This can also be done when at lower speeds. Attack-landing - For some reason, when landing on the ground while attacking, we regain control 2 frames earlier. (This is why you see me attack almost everywhere.) Backdash-skipping - the first 16 frames of a backdash have complete invicibility, and locked movement; even if you go in the air while backdashing in this state, Yoh keeps going forward as if he were on ground. This is useful for a variety of things, the most prominent being going through enemies, but it requires good position. Ledge-backdashing - when in the air, Yoh will keep the entirety of his speed as long as you hold the same direction than the one he is currently going in. On its first frame, the backdash has a very insane speed - 1024 - and if you go in the air on your first frame of backdash, then you can keep this speed. In general, when there's a "ledge" like this, I always want to get 1024, although there are some cames where it's not beneficial, for example when Yoh stays in the air for a short amount of time, because the control needed to set it up (eg. walking for a few frames) ends up slower than just backdashing again, even though Yoh falls off the ledge with less speed. Groundsliding - When there is no input, Yoh doens't stop instantly, but his speed slowly slows down. This principles applies everywhere when there is no input. But it is also useful when having much greater speeds than usual (eg. after ledge-backdashing) and hitting the ground. Indeed, instead of backdashing immediately after, we can wait a few frames with no input, since Yoh will slow down (his speed will go 1024 - 976 - 947, etc), then backdash again when it gets too small. 1-frame state lag - When transitioning from one state from another, there is a single frame lag in which movement is not affected. This is an important fact, as it allows us to eg. turn around when groundsliding (no input) without starting to walk again, and lays the groundwork for a few other tricks. Buffered backdash - to backdash, we need to input down twice. Pressing down will make Yoh crouch, stopping him and wasting a frame or two. But these two facts are separate. You can press down at anytime, without making Yoh crouch. So if we press down in the air, then press it again while on the ground, then Yoh will backdash instantly without crouching. Note that there is a 14 frame timer on this. This is useful at the start of levels, where we can press Down before the level loads and instantly backdash, but it also leads to the TBB - see below. Turnaround buffered backdash (TBB) - The first part of this trick is a simple buffered backdash.The second part of this trick is an application of the 1F state lag. Indeed, if we backdashed instantly while facing the direction our speed is going in, eg after a ledge-backdash, then Yoh would backdash in the wrong direction. However, because of the 1F state lag, we can turn around while groundsliding, which makes this fast backdash possible. An application of this, in input, looks like this, if the direction of our speed is to the right : V (before landing on ground) - .. - < (while groundsliding) - V, and we wil backdash instantly. This technique is used everywhere when possible and when we have the opportunity to buffer a backdash (for example, during the previous backdash, while jumping, while attacking..) Turnaround attack backdash (TAB) - So, what if we can't buffer a backdash? Well, we can stil backdash instantly, by buffering the backdash "on-the-fly". This is especially useful while doing an easily interruptable control action - eg. walking. Application in input where Yoh is walking and needs to backdash: > (walking) - [blank] - < (1F state lag) - B (attack) - V (buffer the backdash while Yoh is attacking, causing him to not slow down) - [blank] - V (actual backdash). This works, and is not any slower than a regular TBB because even while attacking, Yoh still keeps the speed from the groundslide. Generally this technique is only applied to when we absolutely can't buffer, because otherwhise doing a regular TAB is classier, and also does not produce noise. There are a few other things in this WIP, like the boss fight, but I've written too much on this one already, so just enjoy the WIP :)
Editor, Experienced player (848)
Joined: 5/2/2015
Posts: 696
Location: France
So, since this WIP, I've catched a few errors and reworked this segment. SK is rather sync friendly, except for bosses which are very RNG dependant. We don't have many spots to manipulate RNG ahead of time, and manipulating during boss fight is easily the hardest thing in the entire game, so I'll be stuck on this for quite a while. Here is the current lua, and the current input, as well as a picture of what it looks like atm (still incomplete): In terms of actual route and discoveries, what changed? * I picked up Magnescope (soul), by far the biggest route improvement. I am ashamed of myself for missing this one; it allows to cancel effectively every state (except backdashing), which is extremely useful for combat. With Magnescope, you can pump enemies without even letting them one frame of non-invinicibilty in the best-case scenario. * I pick up Vodianoi later on, which allows unrestricted movement in water (instead of more than halving your speed, keeps it as-is). Useful for Area 2 backtracks and for the area just before Lee-Pai Long which is filled with water. * Strategies on the Rio fight: thanks to Magnescope, we can keep up a decent combo without getting hit: three slash > Magnescope > single slash > magnescope > crouch slash when Rio attacks. Crouching allows us to lower our hitbox enough, and attacking on the first frame we crouch brings us to the crouch slash state instantly, giving us greater flexibility. * Thanks to my hitbox script, I noticed that Rio hitbox will extend towards us a significant amount when he does his crouch attack. If we need to take damage to manipulate RNG, this is very useful (as hits from contact damage with Rio do 7 damage, instead of 9 from the sword.) Taking damage wastes a frame for every health lost, as there's a refill after each boss that takes an extra frame for every health point it has to refill. * I noticed that the 1-frame state lag affects everything in this game. This is easily the most important [glitch/bug] in the game. To explain it more clearly than my previous post, every slot in this game (enemy, Yoh himself, even objects) have a state which is changed depending on their actions. Getting on a floating platform will change its state, attacking will change Yoh's state, and so on. However; when states are changed, there is a one-frame lag during which the state will apply, but not the effects of that state. For example, if we are groundsliding with large speed, and then walk to 1 frame, we change to the walking state, but the effects itself of the walking state (changing our speed) are not applied. This applies to bosses as well (as well as every other thing which has a slot); if you interrupt them during this lag, then they will take different actions. There are a few new things I discovered about the mechanics of the game as well as in general, see the new numbers on the Lua script, but I'll keep these for once I have a WIP to show alongside it. (And once I get past Rio again..)
Editor, Experienced player (848)
Joined: 5/2/2015
Posts: 696
Location: France
Progress is doing well, since my workflow is going a lot faster now that I have my lua script finely tuned, and things which used to take a lot of rerecords take a lot less. Even after making the script, I severly underestimated just how much faster it makes my work. (The downside is that it is pretty intensive, and I can't run it at full speed on my laptop.) Currently, I am 21 minutes into the game, I'd say about a third of the game is done; I was going to publish a WIP soon, but then I found this skip: https://youtu.be/Yo64condyP4 Looks trivial? Well, this saves 6 minutes (!!!!) because it skips an entire area. Here's a map for visualisation: A few seconds before this, I am on the orange spot circled on the map, and I want to reach Silva in area 5. Now, the intended order is to clear the whole zone (going through 2,3,4 before reaching area 5, marked with red.). But a quirk of this game is that it offers "shortcut" areas to avoid going back through the entire zone, after beating a boss. In this case, it's the area 6, marked here with a blue road. Now, these "shortcuts" areas are usually impossible to pass through until you complete the area, and this is ensured in various ways- missing soul (that you get by beating the boss of that area), or one-way passthrough. But, if it was possible to pass through these shortcuts areas, then we could skip the entire zone and get almost directly to the boss. In this skip, this is exactly what happens. The way this particular zone is blocked off is a combinaison of both. There's a jump here that's supposed to be impossible until you get Mic, which allows to make jumps with much higher speed. But if you take the area in the intended way (from left to right, as opposed to from right to left in the skip) you can also fall down and be unable to get back up, but have succesfully taken the shortcut; a one-way passage. But, what if I tried to do a normal jump, instead of the boosted jump that you're supposed to do? Well, it would turn out that I was off by a few hundred subpixels. So, as I said in IRC:
xy2_    it's a jump that's barely reachable by some subpixels, so I got some more subpixels and it worked
First, I needed to grind as much subpixels that I possibly could (without losing too much time.) Yoh's normal movement speed is 464 subpixels at this point in time (as I've gotten one movement soul.) Of course, that's a lot; hovewer, I could fine tune my movement using groundsliding; after I release input, Yoh keeps sliding for a few frames, gradually losing speed. Here it is very advantageous, as I could get to extremely low speeds in terms of subpixels. This is the movement you see at the start, when I move right, then left. I end up with the initial X position of 613509 subpixels (less is better) - the end of the platform is located at 613500, so to get this close without a ton of manipulation was surprising. The heavy lifter for getting the rest of the subpixels is the flipping glitch, that I explained earlier in the thread, but that I'll explain here again: When Yoh is in the air, as long as you hold the directional input that's the same in relation to his speed (eg. left if Yoh is going leftwards) then Yoh will maintain his speed as long as he's in the air. The cap of the jump's speed is 448; however, if I leave a blank input for one frame, then speed goes like this: 448 > 432 (-16) > 464 (+32) > hold.. Yoh actually gains an excess of acceleration on the first frame he starts to accelerate, and as such I get an extra 16 subpixel per frame on the jump. (This is used on almost every jump in the TAS, by the way.) This gave me enough subpixels to jump the jump, and it reaches so easily you'd almost think it's the intended route. And as such, I skip almost one entire zone (I have to go back a little bit later due to route woes, but it still saves a shitton of time because the levels here are absurdly long.)
Editor, Experienced player (848)
Joined: 5/2/2015
Posts: 696
Location: France
User movie #41143656436330001 This is the first 29 minutes of the game! (I'm not doing an encode for this WIP, will do on an next one.) So, the reason I picked SK1 in the first place was to ward off my anger at losing at bunch of progress on SK2, and also to improve my epic lua l33t skills. But, there's an issue with tasing SK1; it's that tasing the first half of it is incredibly repetitive and tenuous. The game has very serious pacing issues; we are about 30 minutes in, and Yoh is still walking around with very few souls, and has only beaten four bosses.. More specifically, the weakness of SK1's design is in backtracking. Once you complete an area, you can't just skip it when you come back to it; you have to redo the entire area again, but backwards. Here this backtracking segment is particulary bad, because to get the five souls we need we have to backtrack through 3/4 of the entire game so far, with nothing more than a few more subpixels of movement speed, and a sword that deals 20 damage instead of 10.. Probably I will come back to this again when I'm less tired of it, but I'm going to rework on SK2 again for a while now.
Editor, Experienced player (848)
Joined: 5/2/2015
Posts: 696
Location: France
Link to video Input Lua This is the first WIP of Shaman King 2, but done much better than my previous attempts. Although you may say the rerecord count is low, it is like this because I have perfect knowledge of the early game at this point. Quite a lot is going on, but I'll save the detailed commentary for later and point out some important things. I pick up Magnescope. Like in SK1, it is available very early on and breaks most of the game, because it's OP as shit. In this game, any soul activation will cancel the vast majority of states Yoh can be in (excluding backdashing, and being in a soul; as in, you can't activate a soul while attacking with a soul already). Magnescope is very useful for this because it costs 2 furyoku (=mana), and can be activated for a very short amount of time (1 frame). This is how I do the attack cancels on bosses. But boss fights are a bit deeper than just "cancel with Magnescope and attack as fast as possible". Take, for example, the first boss fight, Mikihisa (at 1:37.) At the end of a boss fight, both Yoh's health and furyoku bars are filled up, wasting 1 frame for each wasted mana/furyoku (the game refills both at the same time). So, to avoid wasting furyoku, I only do cancels every third strike, since the invicibility time from normal attacks is 16 frames, and the three-strike combo attacks more frequently than 16 frames. Another thing to pay attention to is boss death. When a boss dies, he is sent up high in the air (the knockback is the same as when Yoh takes large knockback.) However, the game only goes on once the boss hits the ground. As such, it is needed to optimise the boss position so that he falls to the ground as fast as possible. Here, I manipulated Mikihisa to teleport to the red structure again, so that the kill would make him land directly behind (this was the fastest option.) Once I get the leap, I do a movement technique unique to SK2: leap-chaining. The leap is surprsingly fast, and its speed is supposed to be negated by slowing you down significantly. However, once Yoh hits the ground, it's simply possible to cancel with a Magnescope, and initiate another leap. At 2:55, in the factory segement, I make a significant skip. This level is another "backtrack" level that you can only use once you have the soul of the boss: the wall is too high to just reach with a normal jump, and jumping from the platform to the right does not reach. But with a well-placed damage boost on the jumping enemies, Yoh gains just enough height and speed to land on the platform. The jumping ennemies' movement are fixed, so I just play around. This skips a very long boss and some level, saving around ~2 minutes. You might wonder why I didn't chain leaps at the second phase of Eliza (6:05). The first thing to catch is when I leap against Eliza, I actually hit twice! For some reason, the leap has three states: the initial leap, then a 1-frame phase (that I call "brandish") and then another phase. I assume the brandish state is used to determine whether Yoh should stop or not when leaping (Yoh's speed goes to 0 if he encounters an enemy while leaping.) But, if you hit while in this state, then the enemy takes damage without the 8 frame flash! Normally, chaining leaps would be slower, because even if it deals more damage, the flashes make it slower in realtime. But with this trick, leaps become faster. So then, why didn't I chain these brandish hits+leap hits? The reason is that after each leap, I need to return to a specific position to be able to hit the brandish leap. It turned out I didn't have enough time to return to the position without the invicibility of Eliza not wearing off (which means I could have hit her in the time I get back to position. So, instead of doing brandish, leap, then walk back and return, I first do a brandish hit, leap hit, then when landing, jump and do a double slash while the jump carries me back to a position to do a brandish hit. There are a lot more things, of course, but this post is already long. I also made some improvements to the Lua (most notably RNG viewer, and something allowing me to view when a soul activation will trigger a cutoff/splash), but I'm lazy to screenshot it.
Editor, Experienced player (848)
Joined: 5/2/2015
Posts: 696
Location: France
A preview of the TAS.. Currently half-way through SK2, after two restarts. Link to video