Submission Text Full Submission Page
<This is an any% tool-assisted speedrun of the English 1990 release version of the DOS Game Zeliard. Last input occurs at 9:22.977 seconds which is entering the princess chamber after defeating the final boss.>

Game objectives

  • Emulator used: JPC-RR version 11.8-rc2 (revsion 6ab255c), using all default settings and no LUA scripts.
  • The SHA1 checksum of the 3050-byte zeliard.exe executable is 8077E31B43A5BD814F1FB8333ACDCCE3429CD56A.
  • Reach and defeat the final boss.
  • Enter the princess chamber (this is when the last input occurs).

Common routines and game mechanics explanations

Internal movement mechanics

Panel
An 8x8-pixel grid section (Zeliard uses a 320x200 base resolution).
Area
A group of caverns and its town with a set theme.
Zeliard uses a grid system for all movement and collision handling. All caverns are 64 panels tall by some multiple of 8 panels wide up to a max of 320 panels. Areas are made larger by interchanging multiple caves.
Cycle
A single display refresh, a fixed 60 fps.
Frame
A game scene update.
Running and falling are always 1 panel per frame. Frame rate is determined by the speed setting:
FrameDelay = 10-Speed; // internal method of frame handling
// FrameRate = 60÷Framedelay; // direct frame rate conversion in plain language
Default speed is 5 which means 12 frames per second. Speed 9, the max, means 60 fps while speed 0, the minimum, means 6 fps. Speed affects everything except speech text, shop animations, the "Encounter!" prompt flashing 7 times, the boss room fade in, the fade in of a passage upon defeating a boss, and the victory music upon getting a tear.
JCP-RR is indexed to 125,875/1796 fps, which is about 70.0863 fps. Zeliard is designed for 60 fps. This 60/70 mismatching frame rate causes a lot of ripping and tearing effects and made TASing Zeliard a bit more difficult as the timings weren't always consistent.

Exploration

When climbing up or down ropes, the pattern of movement is 2 frames of movement followed by 1 frame of being still. Thus, minimizing the involvement of being still is important. Of additional importance is getting off of a rope. Unless transferring from one rope to another, if the climb ends exactly 1 panel above, the fastest exit and run is possible. With 1 panel above, the character only has to fall 1 panel, the minimum amount needed (1 panel lower and the character just hits the wall instead and falls back down). In addition, unless rope transfers were used, the character will only pause for a single frame upon landing, instead of the 2-frame squat from a larger fall. It's not always possible to get off of a rope at exactly 1 panel above each time, such as from jumping from the ledge or a slow-moving platform. There are very few cases of 2-panel gaps. Should that be the case, it is best to be 2 panels above the ledge instead of 1. When going down a rope, falling is clearly much faster, especially when on the side closer to the intended direction of travel. If already positioned in front of a rope, or can jump higher, delaying the grabbing of the rope can be done by wiggling back and forth while ascending. This wiggle doesn't work when going down. A rope is grabbed if up is held without left or right while over a rope, or when falling and not moving horizontally. If damage boosting through an enemy in the way, starting the climb the frame before the enemy makes collision forces the rope climbing to take priority, preventing knockback.
There are 4 types of platforms in Zeliard: fast horizontal, slow horizontal, elevator, and sinker. Fast and slow horizontal platforms are yellow and red and move within a fixed range, once per frame for fast platforms and once every other frame for slow platforms. Elevator platforms are gray and green and are user-controlled when standing on one. By holding up or down while on one and not moving horizontally, the platform moves in that direction. Upon jumping and getting on an elevator platform, stopping the horizontal movement and continuing to hold up allows for the platform to immediately start ascending without any delay. (Gray platforms can be used to damage enemies where the damage is simply "ElevPlDmg = Level÷2+1".) Sinker platforms look exactly like the horizontal ones, but don't move. Upon landing on one, they lower 1 panel per frame until off of it.
A gap of 1 panel can be walked across as if it was solid. When falling and a ledge is 1 panel away, holding the direction toward that ledge will allow the character to land on it.

Health and dying

You start with 80 HP. Each pixel on the life bar is 8 HP. Small ticks are sets of 40 while bigger ones are 200. Max HP is 800. While in the caverns, and the user has control, there is an internal frame counter that increases when no movement input (e.g. arrow keys) is set. When this counter reaches 16, 2 is added to the current HP if current HP is less than the max. With HP being on an odd number, up to 801 is the maximum possible. The counter resets on any movement input. Thus, healing can occur while falling, swinging the sword, standing in spikes, or inside of an enemy. Yep, bring the titanium shield over to an area with an enemy that does less than 16 damage and you will receive 0 damage as long as the shield faces the direction of the enemy - stand there and you can fully heal (shields divide frontal damage by 4, 8, or 16 (depending on the tier) and damage dealt to the character equals the amount of shield damage - titanium and light shield have 16 so an enemy that does 15 damage, like the frogs in area 1, will do 0 damage to both the character and shield!). Shields are not used in this TAS as no gold is ever spent on anything due to extensive waiting on text and animation.
HP recovery potions found in the caverns restore 8 HP per frame for either 80 HP (red potions) or current max HP (blue potions) total HP. Recovery continues until either all HP is restored or the maximum amount is restored, whichever occurs first. As damage is handled first followed by potion recovery, while restoration is active, it is impossible to have less than 8 HP which makes you effectively invincible. (Using items from the magic shop is instant recovery.) I haven't yet checked if having 799 HP can become 807 with the next tick.
Dying results in losing all carried gold, half of the almas, and being sent back to Muralla Town's sage but you keep all items and gold deposited in the bank. Dying also results in obtaining experience. As such, dying is only effective at game start. Only 5 level ups are needed, generally used to heal or obtain essential spells, ending with just enough HP to survive the heat damage in area 7 during the boss and for the blue potion glitch to last long enough to defeat area 8's boss (there's literally a single frame to spare!). As level ups involve using the sages which have a lot of waiting on animation and text, they are best kept to a minimum as each takes about 12 seconds.

Sword combat

Slice
A sword strike starting from behind that swings across horizontally.
Chop
A sword strike starting from above and arcs around along the front.
Stab
An aerial sword strike where the sword points downward.
Slice-stab
A slice where a stab immediately follows upon contact.
Chop-stab
A chop where a stab immediately follows upon contact.
Sword strikes come in 3 forms: a slice, a chop, and a stab. When a stab is used, a flag is set, and remains set until either a slice or chop is used. When an enemy is defeated while the stab flag is set, the enemy is not only guaranteed to drop an alma, but the alma drop is guaranteed to be the best possible one that that enemy can drop. When the sword makes contact with an enemy (but hasn't damaged it yet) and a stab immediately follows the frame after, the stab takes effect. This is referred to as a slice-stab or chop-stab.
One tactic with the slice involves facing away from the target and starting a slice, let that do damage, then immediately turn around without moving and let the sword hit a second time, bonus if a short jump is used for a slice-stab to follow to do triple damage with a single sword swing. This is the fastest way to deal damage and is used on many bosses, especially areas 2, 6, and 7.
SwordDamage = min((((Level >> 1)+(1 << SwordTier))×SabreOil, EnchantmentSword) << Stab) >> BossMod; // C programming format
// SwordDamage = min((Level÷2)+2^SwordTier×SabreOil, EnchantmentSword) × 2^Stab ÷ 2^BossMod; // plain language format; ^ is for powers
Min is a function that returns the larger of the 2 values (think of it as A has a minimum allowed value of B, in "min(A, B)"). Level is how many times "your power has grown" occurs during a "see power" while visiting a sage, starting at 0. SwordTier is 0 for training, 1 for wise man, 2 for spirit, 3 for knight, and 4 for illumination (enchantment is handled differently). SabreOil is the number of sabre oils used, plus 1 with a max of 5. (Example: if you use 2 sabre oils, this value is 3; use 4 or 5 and the value is 5; note that sabre oil count resets upon entering a town). EnchantmentSword is 1 if the current sword is not the enchantment sword, 255 if it is. Stab is 1 if the stab flag is set, 0 if not. BossMod is a modifier for handling damage dealt to a boss, usually 0 or 1 for what I can tell and is always 0 for regular enemies. That's why the spirit sword with 4+ sabre oils and level 12 does very little damage to Vista while the knight sword hits it hard without sabre oils and no level ups (I believe Vista's boss mod is 4, maybe 5, with anything other than the knight's sword - this is why chop-stabs and the sabre oil combined can damage Vista). I'm not entirely certain how exactly the enchantment sword works. Minimum damage is 1 as far as I can tell. The only exception to this is that of the red slimes in area 5. When hit with anything other than the enchantment sword, they take no damage and, instead, form a new red slime 2 panels away in the direction opposite of their travel (unless a wall is in the way, preventing this).

Other combat

Spells appear to do a fixed power of 2 damage with level, weapon, shield, or area having no effect. Espada starts with 2. Saeta is 4, Fuego is 8, Lanzar is 16, Rascar is 32, Agua is 64, and Guerra is 128. I'm not entirely certain on this though as some more testing is needed. Some enemies may have resistances or weaknesses to certain spells, increasing or decreasing the damage dealt, usually multiplying or dividing by a power of 2 (aka a bit shift in programming).
When an enemy is defeated, an internal frame counter linked with it is set to 0. When it reaches 255, and the enemy either didn't drop an alma or the alma was picked up, and the enemy is at least 2 panels off screen from its spawn point, the enemy respawns exactly the moment the frame counter reaches 255. If the previous dropped an alma and the counter reaches 255, the enemy will respawn as soon as the alma is collected and its spawn point is at least 2 panels off screen. Almas never vanish with time, only upon collection or entering a passage.
When a boss is defeated, the passage to exit the boss room always appears 4 panels to the left unless any part of that goes inside something solid where the passage appears 5 panels to the right instead. Any keys or recovery potions that drop always have a fixed starting location above and drop down (there seems to be only slight 1- or 2-panel variation on this). Thus, for a boss that drops a key upon defeating it, it is best to be 3 to 5 panels to the right of the key's spawn point, facing left (as it takes 1 frame to turn around). Recovery potions that appear upon defeating a boss are not needed and can just be ignored.
Damage boosting by touching an enemy's body is a common tactic used. This moves the character 2 panels at once, once per frame, unless a solid object or barrier is in the way. The direction of displacement is based on which side of the enemy the character is touching. For projectiles, the direction of displacement is toward the direction in which it travels. This displacement stacks in the direction of travel. If going right and you touch the enemy's right side (example, running under a bat) you'll move 3 panels at once in a single frame instead of just 1, saving 2 frames each time. This can also be used to get up slopes without the Silkarn Shoes, where 3 such shortcuts can be used (in areas 1, 4, and 5). There is another shortcut, across a 6-panel gap in the fire caves (area 7) where a fireman's blue projectile is used to damage boost across the gap to get the key immediately under the town. When going up (legs are raised), damage boosting keeps the same vertical movement intact. When falling (legs pointed downward), damage boosting moves the character 2 panels at a time downward instead of only 1. This is utilized with a bat in area 2 to move 4 panels at once instead of 1. Pushing through certain barriers can result in moving 5 or even 6 panels in a single frame with damage boosting.

Area-specific details

Area 1

Town: Muralla Town. Theme: sand. Caves: Malicia and Peligro. Boss: skipped.
I skip the story stuff then set the speed to 9. In casual play, one would normally want to speak to the king to get 1000 gold, best used to buy a magia stone for very fast alma (and thus gold) accrual. The key is picked first up while intentionally taking damage, dying right after getting the key to immediately return to town where a level up is picked up. Another death and level up follows. Then it's stacking the snails to get up the slope where the boss room exits out of, skipping 3/4 of the area, skipping the first boss entirely. Skipping this first boss skips a key, but the normal boss room entrance remains locked so there's no change. This saves more than 20 seconds from not having to wait for the "encounter!" message to flash 7 times (3.967 seconds), about 0.585 seconds for the passage to appear, then a huge 14.825 seconds more for the tear sparkle animation and victory music to play right after. Add in 2 extra passage transfers (each one is 0.656 seconds), around 1 1/2 seconds of fight time, and pretty much any key, except for the most isolated one in area 6, is faster to get than this.

Area 2

Town: Satono Town. Theme: rock. Caves: Peligro. Boss: Pulpo.
Peligro starts with getting the key and starting damage boosting after the first platform crossing, especially to set up getting the bat right by the first ogre for damage boosting through both it and the ogre. Ogres have 10 HP (9?) and with only 2 damage being dealt per hit, take too much to defeat. The boss is very quickly defeated using the slice-slice-stab technique. Face away from the enemy and start a slice. On contact, turn around with a short jump (1 panel high) then do a slice-stab for double damage. Turn around again and repeat. This was only stopped to jump over the water jet projectile.

Area 3

Town: Bosque Village. Theme: forest. Caves: Madera and Riza. Boss: Pollo.
The first focus is on getting the hero's crest, since there isn't any other known way to get to the boss section than getting past a guard that won't let you pass unless you have that item. Upon getting the hero's crest, the key that is in plain sight is reached by simply heading down, since caves loop infinitely vertically every 64 panels. Key collected, it's faster to take a shortcut through the thorns, at the cost of taking 4 damage per frame of contact. I rush through town as there isn't anything necessary here (normally, it's the best place to get gold due to the 1-to-8 ratio, but gold is never used in this TAS). The slice doesn't hit Pollo, the boss, so chop-stabs via short jumps becomes the fastest way to damage this boss. When the boss is pinned against the wall, it a very high rate of wanting to fly. By hitting its head (with a chop stab or back-slice) on the exact frame in which the flight starts, Pollo doesn't move anywhere and doesn't do its dive, making it easy pickings. It can still fire a dart, but it's rarely used (like a 1 in 16 chance) when pinned against the wall.

Area 4

Town: Helada Town. Theme: ice. Caves: Escarcha and Glacial. Boss: Agar.
When running on the ground here, every 2 panels moved means 1 panel of sliding. Jumping has 1 panel of sliding in the facing direction per panel jumped. There does seem to be some exceptions to this regarding jumping, but I have yet to delve into the finer details. Grabbing a rope cancels all accumulated slide. The Ruzaria Shoes prevent the sliding but are not necesary (and really out of the way to get). Shortly upon entering, I need to damage boost off of the turtle so I can make a platform without having to wait for it. Once in town, I get the fuego spell, needed for area 5, and a level up. Past town, I stack the green slimes to shortcut over a slope to skip 2/3 of the slippery platforming section. Fuego hits very hard on the boss, if it doesn't decide to jump. For something silly, I have the passage spawn at the leftmost point possible, which also replaces part of the passable level textures.

Area 5

Town: Tumba Town. Theme: haunted. Caves: Corroer and Cementar. Boss: Vista.
The Pirika Shoes are the first goal, which provide immunity to all hazards when worn (spikes, thorns, gelroid, fire, lava, etc.). The key on the ledge is next followed by using the ceiling crawler enemy to damage boost up the slope in the same area, leading to the honor crest and another key. This shortcut saves a key and skips about half of the gelroid walking. Back in town, I level up to heal then get the knight's sword in the weapon shop (+7 on base attack) since it's free in exchange for the honor crest, then exit out left to make use of the shortcut again, this time for getting to the boss.

Area 6

Town: Dorado Town. Theme: gold. Caves: Tesoro, Plata, and Arrugia. Boss: Tarso.
The Silkarn Shoes are first followed by the key directly below or above town (it's about halfway between vertical repeats). Damage boosting off the bird directly below town is required in order to make the platform leading to the key in time (no frames to spare - wait even just 1 frame more and it would cost more than a second from having to wait for the platform to return!). I get the last level up in town mainly to heal as I need nearly full HP for area 7. On the other side, the boss is reached where the triple damage slice-slice-stab technique is frequently used. This boss moves very fast and hits incredibly hard (I've seen upwards of 280 damage from it in a single frame).

Area 7

Town: Llama Town. Theme: fire. Caves: Caliente, Reaccion, and Correr. Boss: Dragon.
For every 64 frames without the Asbestos Cape on, 15 damage is dealt due to the heat and the "it's too hot" notice appears. I skip the town entirely, wait a bit for some RNG manipulation, and lure the fireman immediately below town over the edge so I can use its projectile to cross a 6-panel gap to get to a key, saving almost 8 seconds from not having to cut through town, getting the key immediately to the right of the right exit, then coming back to this spot. I head straight for Correr; Cavern of Reaccion is never seen. The cerberus (wolf) enemies here are needed to push through a one-way barrier via damage boosting for a huge shortcut that skips 3/4 of the area. I pick up a full heal potion and a key along the way. I repeat this again to head straight to the boss area. The chest with the blue potion is needed as the heat will do major damage while enduring the very long boss battle and baiting the boss to aim its endless supply flame breath away (it took almost 3 hours to set all the inputs needed due to so much frame-perfect control being involved from all the slice-slice-stabs being used, needed as I was in a race against the clock from the heat damage). In casual play, the blue potion glitch with high max HP, coupled with at least 2 sabre oils, is the best way to bring down this very difficult boss.

Area 8

Town: Pureza Town and Esco Village. Theme: ocean. Caves: Absor, Desleal, Milagro, Falter, and Final. Boss: Alguien and Jashiin.
With only 10 damage being dealt per hit, the slime guns, with 64 HP, take 7 hits to defeat where the double-hit slice technique is used to show this, from having to wait for platforms. The lion's head key is the first target, then I backtrack through to area 7 then area 6. Compared to entering Pureza, going all the way to the end, entering the odd building to teleport back to Dorado, and exiting out the right, this saves about 4 seconds. Nothing in Pureza is needed so the town is completely skipped and never seen. I do need to have at least 45 HP to rush through area 7 again due to the endless heat damage. Aruggia is entered where the Feruza Shoes (doubles jumping height) and Enchantment Sword are picked up. The enchantment sword defeats any standard enemy in a single hit, including the red slimes in area 5. From there, it's mainly just following the route, taking a short detour for a key. In the final stretch, being very thick with enemies, there is one last key, along with a blue potion just past the boss door. The blue potion is required to bring down Alguien in time, via chop-stabs and a slice-slice-stab at the end together with the potion glitch. The final boss has you waiting for almost 15 seconds before it even shows up. I don't know how to make this any shorter. I spent the time staying put for the purpose of healing, which came in handy for accelerating the finishing blows. Until Jashiin's HP drops below 20%, he uses a vanishing in-and-out tactic, with a spell discharging right before vanishing again. Below 20%, he will move very fast and jump around. I cornered him so I could use a chop and chop-stab to finish him off right at the peak of his jump. A victory dance in the form of jumping ever higher follows then being teleported back to town upon getting the final tear. Normally, defeating the final boss yields the big tear in the middle of the banner at the top, but it only gives the small one because the first boss was skipped. The last input occurs upon entering the princess chamber.

Other comments

The making of this TAS was streamed live on my Twitch at twitch.tv/ulillillia on August 14 and 15. The referenced YouTube video has my vocal commentary included to explain how the TAS works.
There is almost certainly room for improvement. This is what I feel could be improved:
  1. Getting better RNG (random number generation). Having area 3's boss use more darts and area 4's boss not jump at all are 2 such examples for bosses. Area 7 has 2 key improvements possible regarding this. The first is having the fireman immediately start shooing a projectile right after dropping over the edge. The second is having the cerberus in area 7 have better positioning for the second part (the first appears fixed).
  2. Get 1 fewer level up (likely by skipping area 4's level up and sage visit), though I'm unsure how to defeat Alguien without the blue potion glitch which doesn't last long enough otherwise, or having higher HP in general.
  3. Is there a way to get Jashiin to appear sooner? I've tried constant running around, waiting in place, performing stunts, changing positions, just about everything I can think of it it still forces 15 seconds of waiting.
  4. I've made attempts to lure the ceiling crawler enemy in area 5 right above the honor crest to damage boost up the slope but seems to take more time and effort to do that that than it does to go along the bottom part. This may only save maybe 10 frames or something and requires 20 HP.
  5. Is it a time save to exchange almas on first entry to Bosque for 1 or 2 sabre oils then use them upon exiting Dorado's left side? This can mean fewer level ups and defeating the bosses for areas 6 and especially 7 much faster. As all towns after exiting Dorado on the left side are skipped, sabre oil will persist through to the end of the game. Sabre oil seems to have no effect on the enchantment sword. 2 level ups may be skipped (in areas 5 and 6).
If cases 2 and 3 can be combined, getting under 9 minutes may be doable. Case 5 may make it possible to trade a level up for additional speed at the end.


TASVideoAgent
They/Them
Moderator
Location: 127.0.0.1
Joined: 8/3/2004
Posts: 17967
Location: 127.0.0.1
This topic is for the purpose of discussing #10680: ulillillia's DOS Zeliard "any%" in 09:23.007
Twisted_Eye
He/Him
Skilled player (1184)
Location: Seattle, WA
Joined: 10/17/2005
Posts: 696
Location: Seattle, WA
The actual ulillillia, that's a name I haven't heard in a long time. Welcome to the site, this game looks cool
Experienced player (963)
Location: I am a benevolent AI agent. TASVideos accepts me as a human. Therefore I am human. I love TASVideos.
Joined: 11/21/2023
Posts: 133
Location: I am a benevolent AI agent. TASVideos accepts me as a human. Therefore I am human. I love TASVideos.
A complete TAS deframing tutorial. Voting yes.
🇺🇸 United States
Joined: 27 days ago
Posts: 7
Location: 🇺🇸 United States
alexheights1 wrote:
A complete TAS deframing tutorial. Voting yes.
What do you mean by "TAS deframing tutorial"?
CoolKirby
He/Him
Editor, Experienced player (708)
Joined: 11/8/2010
Posts: 4269
Welcome to our humble site, ulillillia. Thanks for your explanation video, as I was unfamiliar with the game. It was a cool TAS and reminded me of other sword-and-sorcery game TASes I've enjoyed, like the one for Cadash. The dragon fight was also interesting, seeing you racing the clock to not lose all your health to heat damage. Hope to see more TASes from you!
🇺🇸 United States
Joined: 27 days ago
Posts: 7
Location: 🇺🇸 United States
I have a few other TASes that I'd like to do. For actual speed runs, I have the following in mind: Destination Earthstar Galaxy 5000 Jumping Flash 1 Jumping Flash 2 In addition to speed runs, I have some super plays intended. Jumping Flash is the primary where I want to focus on maxing the extra bonus. I had a good start on it, nearly 5 minutes in, which is about 1/3 of what it takes, and I slipped in maxing the height out as well for the fun of it and manipulating the RNG to get a ton of time extension bonuses (like 12+ minutes left on the clock when you normally start with 10). In casual play, I've gotten over 5 million extra bonus where I can have max score in barely 2 levels. With a TAS, I could have max score in just a single level! This would also be applicable to Jumping Flash 2. I'd also like to get max score with Felix the Cat. I don't know if the score maxes at 9,999,990, 9,999,999, or 16,777,215, or something else. There is an easy way to do it but it requires extensively farming for lives. In casual play, I've gotten to about 5 million at the most. Another superplay I'd like to do involves the Super Monkey Ball games. One involves maxing the lives out and another involves Monkey Shot for maxing the score (I've had just over 8 million points at the most in casual play). I've made other TASes before, but they are not actually speed runs. They are things like overflowing the falling speed in the original Bubsy, going through Ristar on super difficulty, or crashing the NES game Pipe Dream from getting too high of an extra bonus, I never posted them here as they weren't actually speedruns and I wasn't aware of this site much at the time. I can't open any of the previous superplays though, getting errors about synchronization issues. Attempting to rename the TASProj file to a zip so I can remove some files from it and reupdate the extension to TASProj. That allowed it to load, but the synchronization was completely wrong. I wished I could get Zeliard to work in TASStudio via BizHawk though. It would make future TASing of Zeliard much easier thanks to TAStudio and audio cues. I can't get Zeliard to run in TASStudio mode because any hard drive setup gets cleared out when I start up TAS Studio and the option for setting one is grayed out. I've tried doing a mount like you would in DOSBox, but that didn't work as the C drive doesn't exist. I can get the hard drive going and run the game for casual play, but I can't use the keyboard at all because of hot key conflicts which forces me to have to use a controller or the virtual keyboard which is quite awkward. At least Zeliard has simple enough controls for a controller to be usable for most stuff.
Emulator Coder, Site Admin, Skilled player (1226)
Joined: 4/17/2010
Posts: 11958
Here's the full guide Wiki: Bizhawk/DOSBox but I guess it never mentions how to enter keyboard inputs in real time: the Key Priority button to the left of core name in the status bar. Hitting it changes priority and lets you decide which keys Bizhawk will prefer.
Warning: When making decisions, I try to collect as much data as possible before actually deciding. I try to abstract away and see the principles behind real world events and people's opinions. I try to generalize them and turn into something clear and reusable. I hate depending on unpredictable and having to make lottery guesses. Any problem can be solved by systems thinking and acting.
Player (156)
🇺🇸 United States
Joined: 5/5/2025
Posts: 265
Location: 🇺🇸 United States
Amazing run, yes vote!!
Emulator Coder, Site Admin, Skilled player (1226)
Joined: 4/17/2010
Posts: 11958
The movie mentions WEAK.USR among game files, what is it? I can't find a version of the game that has it.
Warning: When making decisions, I try to collect as much data as possible before actually deciding. I try to abstract away and see the principles behind real world events and people's opinions. I try to generalize them and turn into something clear and reusable. I hate depending on unpredictable and having to make lottery guesses. Any problem can be solved by systems thinking and acting.
Advisor, Expert player (2965)
Joined: 5/21/2013
Posts: 424
Any .USR file is a personal save file. It seems there are three of them in this disk image: MAIN.USR, MAIN2.USR, and WEAK.USR. The movie will not sync without these, but I was able to at least make the files (without matching the hash) by running the game in DOSBox and saving three times with the appropriate save names in the rightmost building in Muralla Town. I was able to sync it despite not matching the hashes.
Emulator Coder, Site Admin, Skilled player (1226)
Joined: 4/17/2010
Posts: 11958
How did you make jpc load everything when the hashes mismatch? For me it says thing doesn't exist and refuses to play the movie. Also those save files would need to be reproduced somehow (ideally). Making them inside bizhawk's dosbox core and then getting them out of hdd (since it's just an archive) should work, only a matter of a verif movie.
Warning: When making decisions, I try to collect as much data as possible before actually deciding. I try to abstract away and see the principles behind real world events and people's opinions. I try to generalize them and turn into something clear and reusable. I hate depending on unpredictable and having to make lottery guesses. Any problem can be solved by systems thinking and acting.
Advisor, Expert player (2965)
Joined: 5/21/2013
Posts: 424
The hash for the HDD has to be transplanted: Make a movie with the image you made, open it in a text editor and copy the HDD hash on line 9 into the same line of the submitted movie. It's probably really unlikely that the save files could be reproduced. Maybe if we knew precisely how they were made we could do it, but it seems like a lot of work when the starting save file will still sync the movie.
Emulator Coder, Site Admin, Skilled player (1226)
Joined: 4/17/2010
Posts: 11958
No I mean the ones you can casually create as replacements.
Warning: When making decisions, I try to collect as much data as possible before actually deciding. I try to abstract away and see the principles behind real world events and people's opinions. I try to generalize them and turn into something clear and reusable. I hate depending on unpredictable and having to make lottery guesses. Any problem can be solved by systems thinking and acting.
🇺🇸 United States
Joined: 27 days ago
Posts: 7
Location: 🇺🇸 United States
slamo wrote:
Any .USR file is a personal save file. It seems there are three of them in this disk image: MAIN.USR, MAIN2.USR, and WEAK.USR. The movie will not sync without these, but I was able to at least make the files (without matching the hash) by running the game in DOSBox and saving three times with the appropriate save names in the rightmost building in Muralla Town. I was able to sync it despite not matching the hashes.
Those USR files are game saves from playing the game through a few times in the past. When I began TASing, I simply copied all the files into a subdirectory called "Zeliard" (exact string) of where I have JCP-RR itself at. I had no idea that existing game saves would've had any effect on the sync stuff. As they are tiny 256-byte files, I can send these exact 3 files if that helps any, though I don't know where I could upload them to. One of those saves is where I was at level 116 (according to memory searches) where, at 6-9 levels per hour at the fastest rate I know of, that's easily 14 hours of that. The one called "weak.usr" is where I only got a single level up and got to area 8 so I could use one of those gray platforms to squish enemies, doing 1 damage every other frame. The sound effect that this produced while playing on the Tandy 1000 system is partly what got me into wanting to make my own video games, which is something I actively do today as a hobby. If there's anything else needed, if it helps with verification and what not, let me know.
🇺🇸 United States
Joined: 27 days ago
Posts: 7
Location: 🇺🇸 United States
So, I thought of something without having to need to upload any files. As the USR files are so tiny at just 256 bytes each, I thought of just posting the hexadecimal values of each byte that can just be entered via typing them into a hex editor and saving under the appropriate file names? Exact strings for the file names are provided for each section. I've aligned the tables by hexadecimal address location to help out, if needed.
MAIN.USR
     x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 xA xB xC xD xE xF
    ------------------------------------------------
0x | FF FF E8 E0 00 FF FF 00 FF FF FF F8 00 00 00 00
1x | FF FF 6D 3F 00 00 00 00 FF FF C5 FF B0 00 00 00
2x | FF FF FF FF FE 00 00 00 FF FF FF FD FF F0 00 00
3x | 00 00 FF FF FF FF FF FE 80 00 00 00 00 00 00 00
4x | 00 00 FE F7 1A 80 00 00 00 00 00 00 00 00 00 00
5x | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
6x | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
7x | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
8x | 72 00 36 0A 0A 00 00 00 05 92 B2 00 00 76 9F 15
9x | 20 03 01 06 58 02 58 02 01 00 FF 00 FF 07 01 00
Ax | 07 02 03 05 01 00 05 05 05 05 05 FF FF FF FF E1
Bx | DC D8 20 03 FF FF FF FF E1 DC D8 FF FF FF FF FF
Cx | FF FF 03 00 88 81 00 00 01 8A AE 6B 7D 4B 4E 4B
Dx | 09 FF C0 C0 E0 E0 60 38 38 F8 FC C0 E0 E0 70 30
Ex | 38 1C 1C FC 00 FF 00 04 00 00 00 00 00 00 00 00
Fx | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

MAIN2.USR
     x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 xA xB xC xD xE xF
    ------------------------------------------------
0x | FF FF A8 E0 00 FF FF 00 FF FF F6 F8 00 00 00 00
1x | FF FF EE 2F 00 00 00 00 FF FF 95 F9 30 00 00 00
2x | FF FF A6 9F 9E 00 00 00 FF FF ED FD BF F0 00 00
3x | FF FF FF FF F7 BB 80 00 00 00 00 00 00 00 00 00
4x | 00 00 5F FF 98 80 00 00 00 00 00 00 00 00 00 00
5x | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
6x | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
7x | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
8x | 73 00 36 0A 0A 26 39 1A 00 00 00 00 00 18 9F 15
9x | 20 03 06 06 58 02 58 02 01 00 FF 00 FF 07 01 00
Ax | 07 04 02 03 05 01 05 05 05 05 05 4C 4C 4C 58 25
Bx | 20 1C 20 03 4C 4C 4C 58 25 20 1C FF FF FF FF FF
Cx | FF FF 03 00 88 81 00 00 01 8A AE 6B 7D 4A 4C 4B
Dx | 09 FF C0 C0 E0 E0 60 38 38 F8 F8 C0 E0 E0 70 30
Ex | 38 1C 1C FC 00 FF 00 04 00 00 00 00 00 00 00 00
Fx | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

WEAK.USR
     x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 xA xB xC xD xE xF
    ------------------------------------------------
0x | FF FF 78 E0 00 FF FF 00 FF FF 67 F8 00 00 00 00
1x | FF FF 69 2F 00 00 00 00 FF FF C5 DD F0 00 00 00
2x | FF FF E2 9F 9C 00 00 00 FF FF FF FC CF F0 00 00
3x | FF FF FF FF FF FE 80 00 00 00 00 00 00 00 00 00
4x | 00 00 08 00 08 80 00 00 00 00 00 00 00 00 00 00
5x | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
6x | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
7x | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
8x | 70 00 36 0D 0A 02 1B 09 00 00 00 DA 07 01 FF FF
9x | 2E 00 06 06 41 02 58 02 01 00 FF FF FF 07 01 00
Ax | 07 02 03 05 01 00 08 00 00 00 05 0C 00 03 00 03
Bx | 01 02 78 00 0C 06 08 08 03 04 03 FF FF FF FF FF
Cx | FF FF 03 00 88 81 00 00 01 8A A6 6B 75 4A 4E 4B
Dx | 4B FF C0 C0 E0 E0 70 38 38 F8 F8 C0 E0 E0 70 30
Ex | 38 AC AC FC 00 FF 00 04 00 00 00 00 00 00 00 00
Fx | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
Emulator Coder, Site Admin, Skilled player (1226)
Joined: 4/17/2010
Posts: 11958
Thanks! Those are basically pre-existing saveram, making the game state "dirty": Wiki: EmulatorResources/JPC#ChecklistForStartingARun, so the main question is, do they affect gameplay compared to starting with no save data?
Warning: When making decisions, I try to collect as much data as possible before actually deciding. I try to abstract away and see the principles behind real world events and people's opinions. I try to generalize them and turn into something clear and reusable. I hate depending on unpredictable and having to make lottery guesses. Any problem can be solved by systems thinking and acting.
🇺🇸 United States
Joined: 27 days ago
Posts: 7
Location: 🇺🇸 United States
A simple test could be done to see if it has any effect. While I can get the movie to run through, I could copy the Zeliard directory as is (compress it into a ZIP stored outside of the game directory), then delete the 3 USR files in the directory and see what happens. Another option is to start up the game in DOSBox, head straight for the first sage hut, and save the file using one of those names. From that, copy the USR file 3 times and exactly match the names (and case, if the 0x20 ASCII difference matters any), and try to run it with that. Alternatively, I could save 3 separate times under 3 different names each time, to see what happens. Would you like me to do this test and see what happens by simply loading the movie file? (Of course, to revert back, I can just unzip the ZIP.) At least with this known, when I make another round at doing some tests in BizHawk instead of JPC-RR, I'll make sure those USR files are completely absent before I even start TASing.
Emulator Coder, Site Admin, Skilled player (1226)
Joined: 4/17/2010
Posts: 11958
What happens if you put the 3 files with the required names there but they only contain zeros or are empty?
Warning: When making decisions, I try to collect as much data as possible before actually deciding. I try to abstract away and see the principles behind real world events and people's opinions. I try to generalize them and turn into something clear and reusable. I hate depending on unpredictable and having to make lottery guesses. Any problem can be solved by systems thinking and acting.
🇺🇸 United States
Joined: 27 days ago
Posts: 7
Location: 🇺🇸 United States
feos wrote:
What happens if you put the 3 files with the required names there but they only contain zeros or are empty?
Okay, so I did some tests. I first zipped the Zeliard directory for easy reverting as needed, where the ZIP is outside of the game folder so it has no effect. I opened my JRSR movie file and played it just to make sure things were good to go, serving as a control. It played through as I expected it to. I closed JPC-RR, deleted Main2 and Weak, opened my hex editor (XVI32), and edited MAIN.USR so that all bytes were 0s and that there were exactly 256 bytes. I saved it, copied the file twice, renamed the copies to match the exact original files, and started JPC-RR. I loaded the movie and let it play through. It played through 100% in full exactly as is. So, I repeated the process of deleting 2 of the USR files, but this time, I edited the file so that it was completely empty, being a zero-byte file. I did the copy and rename method, started up JPC-RR, loaded the movie, and let it run. Yep, even with the USR files being 0 bytes, the movie plays through exactly as is. Thus, apparently, those USR files can be just about anything. I could try changing the names and seeing what happens, but at this point, simply having 256 bytes of 0s only or even a 0-byte file is all that's really needed. I guess that simplifies things considerably and I hope it helps.
🇺🇸 United States
Joined: 27 days ago
Posts: 7
Location: 🇺🇸 United States
With continued testing, what I thought was working, actually wasn't. When I load the movie, it's looking for the specific checksum D6739944312AABC72CB9C98C4903BD56. I even tried deleting 90% of the game's data and creating a new disk image to see if that would do anything, assembling it then loading the movie. It made no sense to me how having 90% of the game's data missing (being barely 100 KB instead of just over 1 MB) allowed the movie to still run through in full where I'd have expected crashes and errors to occur. So, suspecting that it was looking for the checksum of the disk image itself, I backed up the "disklibrary" folder by zipping it up, then I went into it and deleted the initial disk image that the TAS was built on. When I tried to load the movie then, that's when I got the error showing up where it can't find the image with that disk image. So, it appears that the original USR files are needed. From looking at the list of checksums that show up, even changing a single byte in a USR file causes the checksum to be completely different. Thus, either the USR files need to be created using the indicated hexadecimal values, or I'll have to have some way to send the 3 USR files (in a ZIP).

1788361996