Submission Text Full Submission Page
Java Mobile enters the scene of TASing!
Forgotten Warrior is a side-scroller game released in 2005 for mobile phones. A boy tries to rescue his girl. The beginning and the ending of the story look somewhat hilarious, but anyway, it's looks like a fairytale. 18 levels across 3 different terrains.
An alternative encode with Windows 98 booting and the launch of FreeJ2ME-Plus can be watched here.

Game objectives

  • Pacifist (technically)
  • Takes damage to save time

Comments

Control

If you jump, you have to re-press your movement key before you land, or else you stop upon landing.
You lose some time at the end of each jump. That's why walking is faster overall.
If a projectile hits you, you save 6 frames or lose 10 frames, depending on which direction you were moving. The projectile push you away, not back.

Combat

Jump-kicking is slower than jumping. Any combat makes you stand dead on your tracks. That's why the run is marked pacifist.
Taking potions make you invincible for a brief moment. Deathblow provides invincibility too, but this attack takes some time, is performed automatically and you can't cancel it.

Chests

In a regular chest, you can get either gold (15-40), a HP potion or a MP potion. There are also special chests with prescribed items inside. Jumping over a chest is faster than picking up a HP portion by 7 frames and gold by 9 frames.

Enemies

There are only 2 types of enemies: those who strike you with a lightning from their hands, and those who throw projectiles. While in the air, enemies can't hit you, but at the beginning/ending of a jump, they can. If an enemy attacks you (a lightbulb balloon appears), it's on the same height as you and there is no obstacles on its way, it shortly transitions after you once you leave the screen.

RNG

The RNG seed is set at the moment you launch the game. Chest items get pre-selected and enemies do different actions and may appear on neighboring screens. The RNG of wandering fires is consistent. It always starts from the same position and moves where it's intended to move.

Game speed

The game offers 5 levels of speed. This manages the game internal framerate:
  • Level 1 = 7 fps,
  • Level 2 = 12 fps,
  • Level 3 = 17 fps,
  • Level 4 = 22 fps,
  • Level 5 = 27 fps.
I chose the default game speed, because it feels more relatable to how we played the game on our phones.

Game compatibility with FreeJ2ME-Plus

It starts with uncapped framerate, which goes beyond what the game has to offer. To normalize the framerate, you need to save the settings.

Verification movie

I don't know whether my plan will be taken as basis, but I thought it through and found it OK.
To begin with, you should install Windows 98 according to this BizHawk guide. The resulting .hdd hashes must match the ones provided in the guide:
MD5:    799C395887E12B00DB1E15F9DF09FD98
SHA-1:  3A523B859054C68B7C6E60CBAD5BF1F0EE86862F
Now the preparation begins. I divided it into three parts.
  • Part 1 is common for any preparation for J2ME TAS making/encoding.
  • Part 2 is customizable, but it serves as preparatory to bring the emulator, the game and the launching .bat script in place, so the actual TAS doesn't spend time on the installation.
  • Part 3 is TAS playback itself.
1. Install Windows installer (InstMsiA.exe) and Java Runtime Environment 6 Update 7. All information is described within this user file, including XML bundle sample and the .conf file.
UserFiles/Info/639163483683257131
2. Install FreeJ2ME-Plus emulator, the game .jar and the .bat script. All information is described within this user file, including XML bundle sample and the .conf file.
UserFiles/Info/639163504314708426
3. TAS playback itself.
.bk2 movie: (attached in the submission)
XML bundle: UserFiles/Info/639163507460172236
.conf file: UserFiles/Info/639163492293312227

Other comments

Special thanks to:

  • TwoSpacesSG - for the idea of running FreeJ2ME-Plus inside Windows 98 and sharing some PoCs that it actually works;
  • Winslinator - for speedrunning the game on his phone.

feos: Claiming for judging.


TASVideoAgent
They/Them
Moderator
Location: 127.0.0.1
Joined: 8/3/2004
Posts: 17977
Location: 127.0.0.1
This topic is for the purpose of discussing #10503: Dimon12321's J2ME Forgotten Warrior in 04:03.933
r3gamerz
He/Him
Publisher, Player (32)
🇮🇩 Indonesia
Joined: 3/7/2025
Posts: 88
Location: 🇮🇩 Indonesia
Good run! This needs a new system category (Java or Mobile)
Never stop innovating.
Emulator Coder, Site Admin, Skilled player (1226)
Joined: 4/17/2010
Posts: 11959
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.
Skilled player (1674)
🇺🇸 United States
Joined: 7/18/2016
Posts: 137
Location: 🇺🇸 United States
It was quite a nice surprise to see this of all games get submitted, so I'm glad to finally see some god-tier gameplay for it in this resolution. As someone who went through the challenge of speedrunning this on a real flip phone, I can attest to the sound technical quality of the run. Breezing through the game taking intentional damage and damage boosts, not going into any shops, and doing the blind jump in level 7 is everything I was hoping for. While I agree that the default speed of 17 fps is more what the game was intended to be played at (I gave up trying to speedrun at 27 fps as it was just too hard to play), I'm not sure if TASVideos prefers that max speed is selected and just provides a 63% speed alternate encode later, as has been done with many DOS submissions in the past. But that will not be for me to decide. Great run!
TwoSpacesSG
He/They
🇲🇪 Montenegro
Joined: 11/25/2025
Posts: 5
Location: 🇲🇪 Montenegro
First off I do have to say that this is a huge step into an interesting direction with a huge potential, and this TAS run deserves recognition for this alone. Does it need publishing yet? Well, there is a tech issue, I pointed it out on Discord and I will repeat it here not to rain on Dimon's parade but so that it's properly established, because probably not everyone saw it having been posted on Discord. Dimon has shared in that discord thread a screenshot of the contents of the game's .JAR archive used, under the impression that the MANIFEST.MF file in it is modified and nothing else. Well, really, the unmodified dump of Forgotten Warrior (Samsung SGH-D600) does exist on various places on the internet, but, if this one was just an edit of the manifest text file with some lines inserted that don't affect anything in-game, then it wouldn't be too bad because the sync would not be affected in a major way if at all. However, the screenshot actually showed that there are Java classes (files with Java code) inserted unofficially into the game archive, for the purpose of playing the game on a non-Samsung phone (the emulator should support Samsung games like the proper dump of this one rather okay though). This is a major unofficial change to the game that I estimate is likely to affect the game sync in some relatively major way. This, more than anything, highlights a big issue with the platform: there is no database with the best available game dumps picked out. When i pitched to No-Intro about resurrecting their J2ME database, almost no one was interested, and i threw in the towel pretty early on because working on that alone is demotivating. Despite this, I have showed feos the results of my J2ME research work, and I hope the best is made of it in order to educate people as to what to do and what to not do. (See the page Wiki: HomePages/TwoSpacesSG/Draft for my vision of the J2ME guidelines with some people's feedback taken into consideration) I am also not sure if the run preparation is needed in 3 passes. To me it seems like the best would be this in 2 passes: Step 0. Prepare w98.hdd (the default Windows 98 installation for everything) Step 1. Install Windows Installer, JRE, set resolution, press numlock (that last part is obviously very important) Step 2. Copy over FreeJ2ME-Plus latest stable .JAR, game .JAR, game .JAD (only if needed), launch .BAT into some directory and start up the .BAT and play. The former doesn't take too long so I don't think there is a need to do it in a separate movie. I get that everyone is tired of preparative steps for J2ME TASing, and this is an important milestone, but at the same time I guess it was too soon after all. Oh and I didn't watch the entire movie so I can't vote yet.
Patashu
He/Him
Joined: 10/2/2005
Posts: 4156
Are the error messages a bug in the specific way this is being played, or did the same bug exist in the original context it was played on too?
Puzzle gamedev https://patashu.itch.io Famitracker musician https://soundcloud.com/patashu Programmer, DDR grinder, enjoys the occasional puzzle game/shmup.
Advisor, Editor, Skilled player (1390)
🇮🇹 Italy
Joined: 9/12/2016
Posts: 1672
Location: 🇮🇹 Italy
Why can't we use libretro to launch FreeJ2ME-Plus directly inside BizHawk without having to emulate a Windows machine?
my personal page - my YouTube channel - my GitHub - my Discord: thunderaxe31 <Masterjun> if you look at the "NES" in a weird angle, it actually clearly says "GBA"
TwoSpacesSG
He/They
🇲🇪 Montenegro
Joined: 11/25/2025
Posts: 5
Location: 🇲🇪 Montenegro
Patashu wrote:
Are the error messages a bug in the specific way this is being played, or did the same bug exist in the original context it was played on too?
The standard output (log window) is not something you see on the actual hardware (the phone). The errors appear to be related to sound clip creation. These are fixed in the latest nightly build, but in this game's case it only appears to be a textual issue in the log, since the sounds seem to be played and unloaded successfully. Also, it looks like the initial speed before saving the settings is not uncapped, it's capped, it's just faster than any of the actual speed values available since you first open the game's settings menu. Mysterious.
Player (156)
🇺🇸 United States
Joined: 5/5/2025
Posts: 265
Location: 🇺🇸 United States
Good job on the first J2ME movie. Yes vote!
Dimon12321
He/Him
Editor, Reviewer, Skilled player (1225)
🇷🇴 Romania
Joined: 4/5/2014
Posts: 1522
Location: 🇷🇴 Romania
ThunderAxe31 wrote:
Why can't we use libretro to launch FreeJ2ME-Plus directly inside BizHawk without having to emulate a Windows machine?
FreeJ2ME-Plus runs in a Java Virtual Machine (JVM) and its Libretro core doesn't have it embedded. The host has to provide a runtime environment for it to run on. Also, savestate logic has to be adapted to store the entire JVM footprint inside. Maybe something more, I don't know.
TwoSpacesSG wrote:
Also, it looks like the initial speed before saving the settings is not uncapped, it's capped, it's just faster than any of the actual speed values available since you first open the game's settings menu. Mysterious.
Such behaviour is present in some other games, like Sonic 1 Part 1, and it's not related to W98. I have it on my MacBook too. And by "uncapped", I mean it runs at an abnormal speed. I've never seen a single app running at the maximum possible emulator framerate (250).
TwoSpacesSG wrote:
I am also not sure if the run preparation is needed in 3 passes. To me it seems like the best would be this in 2 passes: Step 0. Prepare w98.hdd (the default Windows 98 installation for everything) Step 1. Install Windows Installer, JRE, set resolution, press numlock (that last part is obviously very important) Step 2. Copy over FreeJ2ME-Plus latest stable .JAR, game .JAR, game .JAD (only if needed), launch .BAT into some directory and start up the .BAT and play. The former doesn't take too long so I don't think there is a need to do it in a separate movie.
That's a good idea too, and I'm among those who doesn't insist on milking everything possible out of everything that precede the actual game launch. However, I found it not quite appropriate to show file manipulations, as if launching a .bat file is not mystic enough. It's not something that looks like an installer.
TASing is like making a film: only the best takes are shown in the premier. https://xkcd.com/3246/