Register FAQ Search Today's Posts Mark Forums Read
Go Back   JazzJackrabbit Community Forums » Open Forums » Beyond Jazz Jackrabbit 2

Homebrew remake of BatteryCheck for game consoles

archer archer's Avatar

JCF Member

Joined: Jan 1970

Posts: 9

archer has disabled reputation

Apr 5, 2021, 08:02 AM
archer is offline
Reply With Quote
Homebrew remake of BatteryCheck for game consoles

For the last three years I have been working on a remake of the spin-off game BatteryCheck. It uses the same game engine as Jazz2 and it's game files are 99% identical! Without the descriptions off the file formats on this site my project would not have been possible! So a big thank you to everyone involved documenting it.

I have been trying to post about it here...but for some reason I was not allowed to or something. Since it has been a few years I thought...let's try again!

I have working prototypes on the following game systems:
- GameCube
- Wii
- 3DS

There are preview versions available to download on https://gbatemp.net under the username archerite. It's far from finished and because of various reasons I sometimes don't work on it for months...but now I want to pick it up again!

So I thought let's try to post here again, but before I go into more details I want to make sure my thread is "approved" or whatever the reason was it did not show up before.

Thanks.
archer archer's Avatar

JCF Member

Joined: Jan 1970

Posts: 9

archer has disabled reputation

Apr 6, 2021, 04:00 AM
archer is offline
Reply With Quote
So let's start with a little history first....but it's really long. sorry.

As a kid I had always loved the BatteryCheck game a lot. I collected the 15 batteries required to get the free CD-ROM....and even played it through the end! Send in the card and hoped to win something....ofcourse I never did

Over the years of playing the game every now and then the idea started to pop up in my head: Wouldn't it be cool if I could create a game like batterycheck myself? And in 2010 I was kind of actively trying to figure out how to get the graphics from the game. But I failed...and moved on.

The Idea kept spinning around though and then....finally in may/june of 2018....I discovered jazz2online and the extensive documentation about the file formats!! A few test in python were succesfull in decoding it and after a few weeks I could scroll around the level in all it's glorious details! It's absolutly MASSIVE by the way, hahaha. :P

It took me a few months to make the python version into a playable demo. Then I wanted to show people at work but it was locked to a desktop system. My ultimate goal would be to port it to the GameCube but 3D graphics scared me away so I tried it first on the Nintendo DS Lite. Not the whole game but just the menu. It worked and looked "ok" but the low resolution bothered me, so I moved on to the 3DS instead.

On the 3DS there was much more space and resolution to show more of the level and I created my first actual playable demo around October 2018. This version relied on pre-converted graphics though and I did not like it. Looking into converting at boot time resulted in many many debugging nights...and it worked...sort of. The graphics were scrambled somehow and I could not fix it. The levels loaded fine though so I could replace my "demo level" with the actual one from the real game! Later I figured out that the 3DS textures are "swizzeled" to make memory access more efficient and at the end of 2018 I fixed the issue.

Because the 3DS version relied way to much on the devkit libraries it was not a portable source code in anyway. So I rewrote it entirely to work on Linux for easy debugging, but still keeping in mind that I want to port it to other consoles. This made me look at the GameCube again but I found the Wii much easier to debug on, so I stuck with that for most of the time.

Over the years I have released "preview versions" of my homebrew version that allowed others to play it and report bugs. These versions can be found on gbatemp.net (need to figureout how to share links here)
At first I required the users to install the actual game on their PC and then copy the game files over to their console of choice. It took me around three months to reverse engineer the "setup.exe" and how the required files are stored inside of it. It's a custom format but it does use basic zlib streams for compression and some intermediate headers. With that knowledge I created my own custom "installer" that can take the "setup.exe" from the CD-ROM and extract the game files...directly on the target console. No PC required!

I had found a semi-official download source where users could download the freeware ZIP file containing the installation files. I modified my installer to accept this ZIP as an option to install from. No need to extract the setup first!

Because my main motivation and goal for the project has been learning about the hardware of the game consoles, the actual gameplay has not progressed much. As said in my previous post I have working versions that are kind of playable on the GameCube,Wii and 3DS. But I have also worked on porting it to the following systems:
- Linux (for main development)
- Raspberry Pi (works great, but never released it)
- PlayStation Portable
- PlayStation 2
- Nintendo DSi
- Nintendo DS
- Nintendo GameBoy Advance

Yep, that is a long list of systems to work on and I have been told it might be "too ambitious" a couple of times. But as I said the systems and working arround the limitations is wat intterested me the most. This time though I plan on working out some issues in the gameplay and adding more working features. The battery holders, elevators and other objects still don't actually work. They show up and I have added the "hover" to the elevator, but you can't activate it like it should in the real game.

In some ways you could look at my project the same as those open source implementations of Jazz2. I forgot their names but I think "project carrot" was one of them. But nearly all of them are targeting windows and not game consoles like I have done.

I am actually just writing a game engine that works on multiple platforms and uses BatteryCheck assets to run. Because Jazz2 has 99% identical file formats it should also be possible to modify it to load Jazz2 levels. It would require implementing ALL the events for Jazz2 ofcourse and I have not even implemented more than 1 or 2 of BatteryCheck's events!

I think that is enough history. I am just curious what the Jazz2Online community might think of my project since it is related to the Jazz2 game engine.

Thanks for reading
Violet CLM Violet CLM's Avatar

JCF Éminence Grise

Joined: Mar 2001

Posts: 10,978

Violet CLM has disabled reputation

Apr 6, 2021, 07:17 AM
Violet CLM is offline
Reply With Quote
This sounds pretty cool! I don't know if a lot of people around here are going to have those consoles to try this on, so I rounded up some screenshots from your project, which do in fact look like Battery Check:
a b c d e
And also your fairly recent progress checklist: here

You mentioned finding our JJ2 file format documentation and applying it to Battery Check, which is indeed quite similar. I wanted to be sure you had also seen Jerrythabest's work documenting all the different events in Battery Check and what their respective parameters do. Love & Thunder would be another good person for you to talk to in this regard, having been studying how Battery Check and its various objects work in a lot of detail these past few months.
__________________
archer archer's Avatar

JCF Member

Joined: Jan 1970

Posts: 9

archer has disabled reputation

Apr 6, 2021, 07:42 AM
archer is offline
Reply With Quote
Thanks for your reply and doing some research on GBATemp on what I have done! That you say it "looks like BatteryCheck" is really a great complement! My goal with the remake has been to make it near 100% identical in gameplay to the original.

The pictures are a resonable representation of my progress. Most of them are from my blog post I see, since they are from the PlatStation 2 version actually. Just want to make clear that picture "d" is actually showing a bug on the 3DS version.

The JJ2 file format documentation was essential for my project! Couldn't have done this without it. Thanks for the extra links, I completely forgot to mention that post from Jerrythabest and a number of other posts I got some missing info from. That post was essential in it's own right in decoding the events and parameters. I made note's in my sourcecode were possible to give credit to the original source. I think you might be mentioned in there once or twice

If it helps, I can supply the details on the samples in the J2A file to complete the documentation. I have figured out the sample rate and how to extract them from data4. It was based on a few JJ2 projects to dump sound effects and I was able to apply that in my project. I have access to all of BatteryCheck's sound effects! Just not sure how they are mapped to events or something. So I had just listened to them and what I recognized I now use. Especially collecting batteries, extra life, jumping falling, walking etc.

The music play's to on the 3DS. But I need to port libmikmod to the GameCube and Wii before I can enable the music there to. It loads from the available .xm files.
archer archer's Avatar

JCF Member

Joined: Jan 1970

Posts: 9

archer has disabled reputation

Jun 2, 2021, 06:20 AM
archer is offline
Reply With Quote
I have been working on improving my game engine a lot in the past few weeks. I have also released a few alpha preview versions on most platforms I have it running on, and even added two new ones! The new list of platforms my version can run on is:
- Linux (not released)
- Raspberry Pi (also not released)
- GameCube
- Wii
- Wii U
- 3DS
- PlayStation 2

For each of these platforms I have threads in their respective section on the GBATemp forums. Seeing how much this thread is viewed here I thought it would be good to give a little status update.

While it runs on many platforms, the actual gameplay is still not complete. Collisions work but are glitchy. Batteries can be collected but the super batteries sometimes don't. Floating platforms and belts can be stand on and doors are solid. Most other objects are purely decoration at the moment

To make things work more like the original I might be asking more specific questions on this forum in the future. My plans are to have the same game engine...one day...also run Jazz 2 Looking at the AngelScript documentation makes my head spin about the possibilities and flexibility of the original Jazz2 engine. Knowing what objects are available and how they can be accessed are mostly the things I am looking at. I was pleasantly suprised I was already heading in the right direction with putting the events into an object list, instead of the HUGE array of config words that's loaded from the J2L file!

Last edited by archer; Jun 2, 2021 at 08:10 AM. Reason: Updated list of platforms with links to GBATemp
Love & Thunder Love & Thunder's Avatar

JCF Member

Joined: Sep 2011

Posts: 1,101

Love & Thunder has disabled reputation

Jun 2, 2021, 07:29 AM
Love & Thunder is offline
Reply With Quote
Sounds very cool!

As a fellow Battery Check enthusiast (I'm working on implementing its features in AngelScript, to make a full port of the game into JJ2), I find it very cool to see this running on various platforms.
I'll have to see if I can diig out my Wii and load this up.
__________________
archer archer's Avatar

JCF Member

Joined: Jan 1970

Posts: 9

archer has disabled reputation

Jun 2, 2021, 08:04 AM
archer is offline
Reply With Quote
Quote:
Originally Posted by Love & Thunder View Post
Sounds very cool!

As a fellow Battery Check enthusiast (I'm working on implementing its features in AngelScript, to make a full port of the game into JJ2), I find it very cool to see this running on various platforms.
I'll have to see if I can diig out my Wii and load this up.
Thanks! I find your work on porting it into JJ2 equally cool and impressive!

I have been reading through your AngelScript sources for clues on how the events and objects are supposed to work. The only one that I have working is the recharge gate, hahaha. Have fun with the current glithes in the latest version on the Wii, especially near Freddy something weird is happening.

Hopefully we can talk in the future about some more specific details.
Violet CLM Violet CLM's Avatar

JCF Éminence Grise

Joined: Mar 2001

Posts: 10,978

Violet CLM has disabled reputation

Jun 2, 2021, 09:12 PM
Violet CLM is offline
Reply With Quote
Quote:
Originally Posted by archer View Post
My plans are to have the same game engine...one day...also run Jazz 2 Looking at the AngelScript documentation makes my head spin about the possibilities and flexibility of the original Jazz2 engine. Knowing what objects are available and how they can be accessed are mostly the things I am looking at. I was pleasantly suprised I was already heading in the right direction with putting the events into an object list, instead of the HUGE array of config words that's loaded from the J2L file!
The AngelScript API varies in how thin a wrapper around JJ2 mechanics it is... sometimes we do manage to introduce a bit of abstraction for usability reasons. You might enjoy looking at the source code for objects instead. I once tried decompiling Battery Check very briefly, and made just enough progress to determine that it has equivalent code to the stuff in g_aisetup.c, and if I recall correctly, objects in Battery Check also tend to put most of their code inside switch statements of their "state" property.
__________________
Love & Thunder Love & Thunder's Avatar

JCF Member

Joined: Sep 2011

Posts: 1,101

Love & Thunder has disabled reputation

Jun 3, 2021, 09:25 AM
Love & Thunder is offline
Reply With Quote
Quote:
Originally Posted by archer View Post
Thanks! I find your work on porting it into JJ2 equally cool and impressive!

I have been reading through your AngelScript sources for clues on how the events and objects are supposed to work. The only one that I have working is the recharge gate, hahaha. Have fun with the current glithes in the latest version on the Wii, especially near Freddy something weird is happening.

Hopefully we can talk in the future about some more specific details.
Thanks.

If you want a more up-to-date version of my code to dig through, here's the latest I've got: https://www.mediafire.com/file/qmwgr...06-02.zip/file
Still lacking in documentation (that's something I'll tackle a bit later), but I've got a decent bit done since November, when I shared my last public build.

I'll open a proper thread for my project in a couple of weeks when I have more time to do regular work on it and thus can add to the thread on a reasonably regular basis, but until then, if you have any questions for me, I'd be happy to explain any of my awful spaghetti code.
__________________
Reply

Thread Tools

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is On

Forum Jump

All times are GMT -8. The time now is 05:43 AM.