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

GOG's Jazz 1.3: Fix bugs, add versions

Simon Simon's Avatar

JCF Member

Joined: Dec 2016

Posts: 35

Simon is doing well so far

Jul 21, 2020, 01:21 AM
Simon is offline
Reply With Quote
Post GOG's Jazz 1.3: Fix bugs, add versions

Hi,

according to maxen7 in twitch chat, VioletCLM is considering to work with GOG about bugfixing GOG's Jazz 1. Thus: VioletCLM, is there something in the works here? I'll be happy to help where I can.

GOG distributes Jazz 1.3 and Holiday Hare 95. See my version comparison table.

Possible fixes for Jazz 1.3:
  • Fix the near-impassable Orbitus 2 bouncy section. The Jazz 1.3 executable (not the level file) enlarges the bouncy floor trigger areas. If GOG keeps 1.3 executable (reasonable), you can modify the level layout, e.g., with MaxStrike's patch. This adds solid golden bars to the underside of triggers that suck Jazz upwards. GOG users approve.
  • Fix the broken airboard ditches in Medivo 1, Turtemple 2, Pezrock 2. These are also bugs in the executable; the same level files produce working airboard ditches with a 1.0 executable and broken ditches with the 1.3 executable. Can these be fixed by changing the level files? I'm not knowledgeable enough in the Jazz 1 formats. At least Jazz 1.3 can ditch airboards in other levels successfully, e.g., in Battleships 1/2.
  • Binary-patch FILE0001.EXE to print a different version string during start than: Welcome to Jazz Jackrabbit. version 1.3 -- Reason: With above changes, it's not 1.3 anymore, and should not identify as such. The string sits in clear text in FILE0001.EXE, beginning at 0x3007. You can put anything that matches the original's length, e.g.: Welcome to Jazz Jackrabbit, v. GOG 0002
  • Ship an unmodified 1.3 as an extra. Reason: Third-party-patching their main version is a significant change and drops files from an unmodified 1.3. GOG prefers to ship several versions if they exist.
  • Ship an unmodified 1.0 as an extra. The 1.0 runs well right out of the box, all levels are passable. Jazz 1.0 is fastest for speedrunning Episodes 1-6: You can fit though Orbitus bouncy floor cracks, and 1.0's Dreempipes water lowers more slowly than the water in 1.2/1.3. GOG prefers to ship several versions if they exist.
  • Possibly ship an unmodified good 1.2; this has the longer Tubelectric 2 and thus adds content.
  • Maybe even ship a bad 1.2, purely for completeness.
  • Maybe even ship a 1.1, purely for completeness.
Any extra versions need not be selectable from GOG's launcher within DOSBox. 90 % of players won't want any choice, they want a version that works, where they won't get stuck in Orbitus 2. It's perfectly sufficient for GOG's menu to offer Jazz GOG 0002 and unmodified HH95.

For the remaining 10 % of players who care about the different versions, GOG can put the extra versions for manual extraction besides their main installation.

The airboard ditches in Medivo 1, Turtemple 2 and Pezrock 2 need most planning. Everything else has a solution that looks reasonable to me; still, any change is possibly intrusive and should be discussed.

I'd be happy to provide 1.0, the good 1.2, even the bad 1.2; the problem is that all the Jazzes are still copyright-restricted. GOG should prod Epic Megagames. I'm only a fallback source, and I'd need a written deal by GOG first. I don't have a 1.1.

-- Simon

Last edited by Simon; Jul 21, 2020 at 02:35 AM.
Love & Thunder Love & Thunder's Avatar

JCF Member

Joined: Sep 2011

Posts: 1,065

Love & Thunder has disabled reputation

Jul 21, 2020, 05:26 AM
Love & Thunder is offline
Reply With Quote
Hi.

Sorry, I didn't see this until just now. I already PM'd you on Twitch, but I'll say my piece here...

I proposed fixing this a few days ago, and Violet agreed to talk to GOG about this. My proposed fix is this:
Ultimately, since 1.3's only advantage over "Good" 1.2 is the presence of the Holiday Hare episode, I suggest a rollback to "Good" 1.2, then just fix the visible spring in Tubelectric 2 (it should be invisible) and the broken airboard ditch in Medivo 1 using J1E (I've volunteered to do this, and have already prepared a fixed Medivo), and replace Marbelara Secret with a copy from another version (say, 1.3). This would fix Orbitus 2, all the airboard ditches, and circumvent any issues from shipping "Good" 1.2 unmodified (since Marbelara Secret is unpassable if shipped untouched), restoring the original 6 episodes to how they were intended, while still keeping the 3 CD episodes.

Orbitus 2 should not be the nightmare it is, and that's not something that can be fixed by just making some adjustments to the 1.3 level file, as far as I'm aware -- my understanding is there was an engine change of some sort?... The only fan fixes out there make changes that alter the way the level was originally intended, whereas reverting to "Good" 1.2 would return it to how it was in 1.0/1.1, and fix most of the airboard ditches that are broken in 1.3, leaving only Medivo's ditch broken (fixable by just giving that ditch a sprite in J1E, like so), along with a screwy version of Tubelectric 2 (it has an extra section at the end, which is cool, but the spring at the beginning is visible instead of invisible, which suggests this is an earlier version of the level or something, so either we fix the spring and have the longer Tubelectric 2, or just swap in the version of Tube 2 from 1.3. Probably best go with the latter so it's just like it was in the original 6-episode floppy version), and a broken copy of Marbelara secret (which can be fixed by just swapping in the level file from another version, such as 1.3. Though I can't remember which Level file Marbelara secret is).

This would only require "Good 1.2", Marbelara from 1.3, some J1E modification of Medivo 1, and then one of those two solutions to Tubelectric 2 as well (likely best to just take the version from 1.3, to minimise the presence of fan-edited levels), and the result would be a version of Jazz lacking in any of the serious/game-breaking bugs present in the current GOG version, or indeed, any other CD-ROM version of Jazz. We would finally have an all-round good version of Jazz 1 that has all 9 CD-ROM episodes.

The other options have various issues; shipping any untouched version would have various issues this would lack, manually fixing 1.3 would require a lot of individual fixes that my method wouldn't require, meaning several levels (rather than just one) would be manually adjusted (which would require testing to make sure J1E didn't corrupt any sounds or anything like that), and most critically, Orbitus simply cannot be repaired in 1.3 without making serious level geometry changes in the broken section (such as the commonly-spread fix that completely removes all challenge from the section in question). Including multiple versions would likely be confusing, and I'm not sure GOG would go for it. Though if they're willing to ship multiple versions, it would be really great if they could ship 1.0 and/or 1.1 alongside a fixed 1.2; the Dreempipes thing would be appreciated by speedrunners, it seems, and if it's 1.0 rather than 1.1, then fans will love trying out the "APOGEE" cheat.

I do agree with adjusting the version number in the patched version. Perhaps it would make sense to call it version 1.4, or 1.2F, if possible. (1.4 since this is a version following the release of 1.3, or 1.2F because it's based off of the original 1.2 release)

The only thing this leaves is the potential issue of the fact that Holiday Hare '94 was included in 1.3, but isn't in 1.2, but this is easily fixed by simply adding Holiday Hare '94 to the GOG launcher autoexec batch thing. I've prepared a version of this to show how it could look, and as an additional fix, I've also added options to change the settings of the two Holiday Hares (currently, the GOG launcher only lets you change the settings of Jazz CD, not the included Holiday Hare '95, so that's another fix introduced by the changes I'm proposing).

The new launcher would look something like this:

(Though I now realise it says "What game do you want to run?", even though four of the seven options are not games. Still, easy fix)

As far as I'm aware, GOG haven't responded to Violet about this yet. In theory, as you note, the best case would be for GOG to be officially provided with all five versions, or just "Good" 1.2, and the fix can be constructed from officially-provided files, but if that isn't possible, I think we would all greatly appreciate you providing your version of "Good" 1.2.
IIRC Violet said to me that it might be easier if we can just give GOG an already-completely-ready "fixed version" they can use, so I was hoping to just dig around, grab a copy of "Good" 1.2, throw together the fixes in an afternoon, and send it to Violet to pass along... It's ended up being slightly more troublesome than that.

Sorry for the long post. There's a surprising amount of nuance to this.

EDIT: I just figured out a better way to fix the Medivo 1 airboard ditch, and have replaced the two links in this post with a link to that fix. Previously, the fix I used was to give the airboard ditch a sprite (I chose the invincibility star), since the way around the engine bug that makes the airboard ditch fail is for it to have a sprite. If it doesn't have a sprite, it doesn't trigger. I've now realised a few things about this: First, the sprite can instead be the shine/spark sprite, whose first frame is just two pixels in close proximity, so it's far less visible (bonus points for setting the animation speed value to -1 so it doesn't animate). Second, since the item's behaviour is "Face Jazz", if I set it to only have a left sprite, then the sprite will only be visible as you're walking through the event (that is, when you cease to be on the right, and start being on the left, the event switches to its left sprite, to face Jazz. Since I've given it no right sprite, this means it's invisible until you're half-way through walking through it). And finally, I realised that the small sprite I chose is hidden behind Jazz for the one frame it's visible before the game realises that Jazz is touching the sprite, and gets rid of it like an item, removing the airboard. So, the result of this new fix is that the airboard ditch appears to behave exactly as it did in 1.0 and 1.1, making this a seamless fix.

Last edited by Love & Thunder; Jul 21, 2020 at 09:07 AM. Reason: New link.
Simon Simon's Avatar

JCF Member

Joined: Dec 2016

Posts: 35

Simon is doing well so far

Jul 21, 2020, 09:49 AM
Simon is offline
Reply With Quote
Thanks for this excellent collection of ideas!

Great research to find a practically invisible sprite that fixes the airboard ditch. I've seen the first attempt with the invulnerability star, I agree that the practically-invisible sparkling (that usually appears after collecting floating treasure) is far better.

I agree that we should strive for a package that GOG can then ship as-is, and take extra care to get it reasonable on first try. Interesting that you chose 1.2 and I chose 1.3 instinctively.

Episodes A, B, C are more reasonable in 1.3 (see smalle table on version.html that compares only 1.2/1.3), but one can have 1.3 levels with 1.2 executables, so this is less important. 1.3 has bouncing Jungrock flowers, they're broken in 1.2... but again, 1.2 could get away without a fan mod of Orbitus 2, and I agree that levels should be as close to Epic's releases as possible.

Indeed, highly complex topic. I'd rather not rush this choice of executable. I'll come back to you with a detailed comparison!

-- Simon
Love & Thunder Love & Thunder's Avatar

JCF Member

Joined: Sep 2011

Posts: 1,065

Love & Thunder has disabled reputation

Jul 21, 2020, 10:00 AM
Love & Thunder is offline
Reply With Quote
Quote:
Originally Posted by Simon View Post
Thanks for this excellent collection of ideas!

Great research to find a practically invisible sprite that fixes the airboard ditch. I've seen the first attempt with the invulnerability star, I agree that the practically-invisible sparkling (that usually appears after collecting floating treasure) is far better.
Thank you too.

Glad there are other people interested in fixing Jazz 1 for GOG, and also glad to hear you like my fix for Medivo.

Of course, if we end up siding with 1.3 in the end, we can use this fix for the other airboard ditches, though that would mean more levels being fan-modified, which opens up more possibilities of errors. (Perhaps I'm just paranoid after how J1CS/JCS94 used to glitch up sounds and such, but I'm weary of using J1E editing on any levels that don't absolutely need it)

Quote:
Originally Posted by Simon View Post
I agree that we should strive for a package that GOG can then ship as-is, and take extra care to get it reasonable on first try. Interesting that you chose 1.2 and I chose 1.3 instinctively.

Episodes A, B, C are more reasonable in 1.3 (see smalle table on version.html that compares only 1.2/1.3), but one can have 1.3 levels with 1.2 executables, so this is less important. 1.3 has bouncing Jungrock flowers, they're broken in 1.2... but again, 1.2 could get away without a fan mod of Orbitus 2, and I agree that levels should be as close to Epic's releases as possible.

Indeed, highly complex topic. I'd rather not rush this choice of executable. I'll come back to you with a detailed comparison!

-- Simon
Oh. I didn't see the notes on episodes A-C. Hm.

Personally, I'd suggest using "Good" 1.2 with the changes I outlined prior, but with 1.3's versions of the CD levels, as you note is a possibility.
I presume that would just leave the broken Jungrock flowers bug?... I wonder if we can fix that with a level fix too. What precisely is the nature of that bug?

Y'know, reading those notes on "Good" 1.2, and how a lot of the issues with the CD levels don't seem to apply for "Bad" 1.2, and how there's the weird stuff about the Tubelectric extension... I wonder if "Good" 1.2 was an accidentally-used beta version, whereas "Bad" 1.2 was the finalised version of Jazz 1.2...?
It's just a shame that "Bad" 1.2, as well as 1.3, ended up screwing up so much in episodes 1-6...

But, I will say, if all that's broken in a "Good 1.2 but with 1.3's CD levels and Marbelara secret and Tubelectric 2, plus a fix of Medivo 1" version is the Jungrock flowers, and assuming that's more a minor annoyance than an actual game-breaking/significantly-gameplay-impacting thing, I would say that's preferable to 1.3's totally borked Orbitus, if you ask me. (Though I've only played about half the CD episodes before, a long time ago, so I'm not very familiar with what "Broken Jungrock bouncing flowers" would entail... If it's just an incorrectly-set behaviour or a missing animation, that would be dead easy to fix, for instance)
__________________

Last edited by Love & Thunder; Jul 21, 2020 at 10:33 AM.
Simon Simon's Avatar

JCF Member

Joined: Dec 2016

Posts: 35

Simon is doing well so far

Jul 21, 2020, 11:03 AM
Simon is offline
Reply With Quote
Quote:
Originally Posted by Robo4900 View Post
Thank you too.
siding with 1.3 in the end, we can use this fix for the other airboard ditches, though that would mean more levels being fan-modified, which opens up more possibilities of errors.
I agree that this is a problem.

I'm happy, too, that odd sprites on airboard ditches won't be a problem just in case.

Quote:
broken Jungrock flowers bug?... I wonder if we can fix that with a level fix too. What precisely is the nature of that bug?
It's only a minor difference, but it's nothing gamebreaking. Here are videos:

http://www.lixgame.com/etc/jungrock-flowers-1.2.mp4
http://www.lixgame.com/etc/jungrock-flowers-1.3.mp4

Jungrock is the 3rd planet in Episode 4. To skip levels: P, backspace, LAMER.

I've promised a full comparison, which will still happen, but it's also important to tell right away that the Jungrock flowers aren't game breakers at all.

Quote:
I wonder if "Good" 1.2 was an accidentally-used beta version, whereas "Bad" 1.2 was the finalised version of Jazz 1.2...?
It's just a shame that "Bad" 1.2, as well as 1.3, ended up screwing up so much in episodes 1-6...
I agree. The succession is most likely good-1.2, then bad-1.2, then 1.3. Epic fixed things and accidentally unfixed others.

You have sound reasoning that the long Tubelectric is an unfinished beta -- why else would the designer put a shield if there are only a few turrets ahead on Hard mode. There seems to be no other compelling reason to revert this longer Tubelectric when developing the good-1.2 into the bad-1.2; indeed, this reversal introduced the missing spring problem into the bad 1.2. Strangely, useless shields/invulnerabilities appear in many other levels, too, e.g., end of Letni 2, Technoir Secret, Scraparap 1.

Quote:
I would say that's preferable to 1.3's totally borked Orbitus
Orbitus 2 must become easily passable in any outcome, for sure. The choice is between (1.3 executable with a fan mod of Orbitus 2) and (1.2 with 1.2's native Orbitus 2).

-- Simon
Love & Thunder Love & Thunder's Avatar

JCF Member

Joined: Sep 2011

Posts: 1,065

Love & Thunder has disabled reputation

Jul 21, 2020, 12:41 PM
Love & Thunder is offline
Reply With Quote
Quote:
Originally Posted by Simon View Post
It's only a minor difference, but it's nothing gamebreaking. Here are videos:
I've promised a full comparison, which will still happen, but it's also important to tell right away that the Jungrock flowers aren't game breakers at all.
I see.
In that case, I could try fixing them up, but I'd need a copy of good-1.2 to try it on. Or I can suggest fixes and you can tell me how they work out. That might work too.

The first thing I'd try is seeing if I can make those flowers duplicate the exact event parameters as the Orbitus bounce floors (sans the sound effect).

Quote:
Originally Posted by Simon View Post
I agree. The succession is most likely good-1.2, then bad-1.2, then 1.3. Epic fixed things and accidentally unfixed others.

You have sound reasoning that the long Tubelectric is an unfinished beta -- why else would the designer put a shield if there are only a few turrets ahead on Hard mode. There seems to be no other compelling reason to revert this longer Tubelectric when developing the good-1.2 into the bad-1.2; indeed, this reversal introduced the missing spring problem into the bad 1.2. Strangely, useless shields/invulnerabilities appear in many other levels, too, e.g., end of Letni 2, Technoir Secret, Scraparap 1.
Indeed.
So, I guess the decision on Tube 2 is that we use the 1.3 version.

Quote:
Originally Posted by Simon View Post
Orbitus 2 must become easily passable in any outcome, for sure. The choice is between (1.3 executable with a fan mod of Orbitus 2) and (1.2 with 1.2's native Orbitus 2).

-- Simon
Yeah.

I think if we can get something reasonably workable in regards to the Jungrock springs, I think that makes it a no-brainer that we go with 1.2. If not, then I'm a little conflicted.
Simon Simon's Avatar

JCF Member

Joined: Dec 2016

Posts: 35

Simon is doing well so far

Jul 25, 2020, 07:11 AM
Simon is offline
Reply With Quote
Quote:
Originally Posted by Robo4900 View Post
make those flowers duplicate the exact event parameters as the Orbitus bounce floors (sans the sound effect).
I'll try it. I must admit that I haven't used J1E yet. I'll find a peaceful evening to look into J1E and try this modding!

Quote:
I think if we can get something reasonably workable in regards to the Jungrock springs, I think that makes it a no-brainer that we go with 1.2. If not, then I'm a little conflicted.
Over the past days, I've remembered several new version differences that aren't yet on versions.html. They're all missing hidden springs:
  • Diamondus 2: 1.0 and 1.3 have at least 4 hidden springs scattered near the top of the level. Good-1.2 doesn't have those springs.
  • Tubelectric 1: After the longest pipe ride, before the half-way checkpoint signpost, there is a large room. 1.0 and 1.3 have at least one hidden spring on a floating platform in this room. Good-1.2 doesn't have that spring.
  • Exoticus 1: Has a hidden spring in 1.3, but not in 1.2, on the purple bricks near the half-way checkpoint signpost.
I'll see what happens if I put the 1.3 levels into good-1.2. And I'll update versions.html.

We should also consider the legal issues:
  • If we base this project on 1.3 executables and levels, we'll have to mod levels, but never copy anything from other versions. What GOG ships is entirely sufficient as a base; the modifications can be any permissible license or public domain.
  • If we base this on good-1.2 executables, we must mix files from at least two different versions. What legal basis exists for us/GOG/anybody to extract and have GOG ship parts from 1.2? GOG is probably licensed to sell the 1.3 only. But the result will be shipped to thousands of players worldwide.
Ideally, we'll get in touch with GOG directly on these issues. I'm happy to do it, but I need a contact first. Merely writing to customer support won't cut it, I tried this for Orbitus 2 in 2018 and got no reply. I'll need a hands-on contact who realizes the importance and subtleties of what we do here. Maybe via VioletCLM?

Of course, there is the chance that I overthink this, given that Epic likely hasn't played through their own version in 25 years, not even before re-releasing in 2017. :-P

-- Simon
Love & Thunder Love & Thunder's Avatar

JCF Member

Joined: Sep 2011

Posts: 1,065

Love & Thunder has disabled reputation

Jul 26, 2020, 12:54 PM
Love & Thunder is offline
Reply With Quote
Quote:
Originally Posted by Simon View Post
Over the past days, I've remembered several new version differences that aren't yet on versions.html. They're all missing hidden springs:
[...]

I'll see what happens if I put the 1.3 levels into good-1.2. And I'll update versions.html.
Alright.
Sounds like the solution is to use all the 1.3 levels (with a fixed version of Medivo), but use the good-1.2 engine...
That is, the only change to be made would be to change out the 1.3 EXE and FILEsomething (whatever it's called) for the good-1.2 versions, then swap out the one or two levels that need fixing.

That said, if various other problems continue to persist... Maybe, after all that fuss, the best solution may be to just use 1.3 and implement level-specific fixes for the broken airboard ditches, and Orbitus. It would really suck if this is the best option, but if it is, I'll see what I can do about potentially restoring Orbitus to something close to its original behaviour in the 1.3 engine, if I can.

It would be great if we can just use the 1.3 levels, and implement the one or two needed fixes, but if there's just too much that's weird about good-1.2 to use, I guess we can only pick the best of a bad bunch.

Quote:
Originally Posted by Simon View Post
We should also consider the legal issues:
  • If we base this project on 1.3 executables and levels, we'll have to mod levels, but never copy anything from other versions. What GOG ships is entirely sufficient as a base; the modifications can be any permissible license or public domain.
  • If we base this on good-1.2 executables, we must mix files from at least two different versions. What legal basis exists for us/GOG/anybody to extract and have GOG ship parts from 1.2? GOG is probably licensed to sell the 1.3 only. But the result will be shipped to thousands of players worldwide.
We won't know until we talk to them, but I'm going to assume that if there are any issues with either of these, there will be issues with BOTH of these.

That is, either they are only allowed to use versions of the game that Epic give their thumbs-up on selling, or they are allowed to use any version they like. Either way, it will affect any kind of change at all. In which case, GOG would have to get approval for either method.

Quote:
Originally Posted by Simon View Post
Of course, there is the chance that I overthink this, given that Epic likely hasn't played through their own version in 25 years, not even before re-releasing in 2017. :-P
TBH this is the most likely scenario. I don't think Epic really care, as long as they're getting their money from this old-as-hell game, made by a bunch of people who haven't worked there in years.

Quote:
Originally Posted by Simon View Post
Ideally, we'll get in touch with GOG directly on these issues. I'm happy to do it, but I need a contact first. Merely writing to customer support won't cut it, I tried this for Orbitus 2 in 2018 and got no reply. I'll need a hands-on contact who realizes the importance and subtleties of what we do here. Maybe via VioletCLM?
I think Violet knows basically what our proposals are, and he'll lay them out well enough to someone at GOG, and then that will be passed through to whoever needs to be talked to about this, then whatever fix we end up going with will hopefully be given the OK.

There is always the possibility GOG will elect to enact no fixes at all, but IDK.
__________________
Simon Simon's Avatar

JCF Member

Joined: Dec 2016

Posts: 35

Simon is doing well so far

Jul 27, 2020, 12:46 PM
Simon is offline
Reply With Quote
All right, first part of my research: Comparing the files.

Today, I won't yet state anything about Episodes A-C, boss levels, or secret levels. I feel only confident about the 6 * 6 main levels of Episodes 1-6.

The following 6 levels are equal between all three of 1.0, bad-1.2 and 1.3, and have a unique version in good-1.2:
  • LEVEL1.001 = Tubelectric 2 (longer in good-1.2, extra visible spring)
  • LEVEL0.002 = Medivo 1 (Unclear. Ditch is broken in good-1.2 anyway.)
  • LEVEL0.005 = Orbitus 1
  • LEVEL1.005 = Orbitus 2
  • LEVEL1.009 = Turtemple 2 (probably an airboard ditch fix for good-1.2)
  • LEVEL1.015 = Pezrock 2 (probably an airboard ditch fix for good-1.2)
The following 2 levels are equal between all three of good-1.2, bad-1.2 and 1.3, and have a unique version in 1.0:
  • LEVEL0.017 = Battleships 1
  • LEVEL1.017 = Battleships 2
The remaining 36 - 8 = 28 levels of episodes 1-6 that aren't covered in these two lists are identical across all four of 1.0, both 1.2s, and 1.3.

Thus, I interpret:
  • You cannot fix Diamondus 2 hidden springs in either 1.2 by copying 1.3 levels into the 1.2, because the Diamondus levels are already identical across all versions. (In fact, I started tonight by copying the 1.3 Diamondus 2 into good-1.2, attempting to fix the spring, and it failed. This prompted me to outright compare the level binaries en masse.)
  • You cannot fix the Jungrock flowers by copying 1.3 levels into 1.2, because the Jungrock levels are already identical across all versions.
  • Both 1.0 and 1.3 have the desired behaviors with hidden springs.
  • The 1.2 executable (which is known to be identical in good-1.2 and bad-1.2) has a bug that deactivates hidden springs.
I conjecture:
  • Jungrock flowers call similar code that hidden springs call, even though they don't flash a spring sprite when Jazz bounces off them. Other hidden springs flash a spring sprite for ~2 frames.
  • Orbitus bouncy floors also call similar code that hidden springs call.
  • Orbitus bouncy walls call different code, because they work in all versions.
  • The Jazz developers knew about broken airboard ditches and hacked some levels to fix them. In later releases, the fixes got lost.
  • We already have the results of what will happen when we take the good-1.2 executable with 1.3 levels: This will be the bad 1.2.
  • I should try to copy the good-1.2-unique files into 1.0 or 1.3 and see what happens. Maybe they'll fix airboard ditches.
The above research in this post was about LEVELx.yyy with yyy ranging from 000 through 017 inclusive, and x = 0 or x = 1. I suppose that these are Episodes 1-6 in order.

I suppose LEVELx.03x are Episodes A-C. All levels among those are identical between bad-1.2 and 1.3. Most of these have unique versions in the good-1.2. Further research requires me to finally install, run, and learn J1E. Lots of stuff to do, I'll keep at it!

Quote:
We won't know until we talk to them, but I'm going to assume that if there are any issues with either of these, there will be issues with BOTH of these.

That is, either they are only allowed to use versions of the game that Epic give their thumbs-up on selling, or they are allowed to use any version they like. Either way, it will affect any kind of change at all. In which case, GOG would have to get approval for either method.
You're right. Thanks! That's a refreshing counter to my biggest worry of using the good 1.2.

After all, we aren't publishing optional open-source extensions to some closed package. We are outright modifying what GOG sells, and thus need to be approved top-level anyway, no matter what we do.

Quote:
It would be great if we can just use the 1.3 levels, and implement the one or two needed fixes, but if there's just too much that's weird about good-1.2 to use, I guess we can only pick the best of a bad bunch.
I feel like it will be like this, we'll have to carefully decide which is the least nasty choice.

I promise to look into J1E within this week, and try your modding ideas, e.g., to the Jungrock flowers. I'll post results on Sunday evening, at latest. Meanwhile, feel free to prod me in IRC during the European evenings!

-- Simon

Last edited by Simon; Jul 28, 2020 at 02:21 AM.
Love & Thunder Love & Thunder's Avatar

JCF Member

Joined: Sep 2011

Posts: 1,065

Love & Thunder has disabled reputation

Jul 28, 2020, 06:25 AM
Love & Thunder is offline
Reply With Quote
Quote:
Originally Posted by Simon View Post
The following 6 levels are equal between all three of 1.0, bad-1.2 and 1.3, and have a unique version in good-1.2:
  • LEVEL1.001 = Tubelectric 2 (longer in good-1.2, extra visible spring)
  • LEVEL0.002 = Medivo 1 (Unclear. Ditch is broken in good-1.2 anyway.)
  • LEVEL0.005 = Orbitus 1
  • LEVEL1.005 = Orbitus 2
  • LEVEL1.009 = Turtemple 2 (probably an airboard ditch fix for good-1.2)
  • LEVEL1.015 = Pezrock 2 (probably an airboard ditch fix for good-1.2)
Hm. Interesting.
Again, I do wonder if Tube 2 (and perhaps some of the rest) are only different in good-1.2 because of an accidental use of the wrong files somewhere, reverting some of them to pre-final versions.

Quote:
Originally Posted by Simon View Post
The following 2 levels are equal between all three of good-1.2, bad-1.2 and 1.3, and have a unique version in 1.0:
  • LEVEL0.017 = Battleships 1
  • LEVEL1.017 = Battleships 2
Wait, what's different about Battleships in 1.0?

Quote:
Originally Posted by Simon View Post
  • You cannot fix Diamondus 2 hidden springs in either 1.2 by copying 1.3 levels into the 1.2, because the Diamondus levels are already identical across all versions. (In fact, I started tonight by copying the 1.3 Diamondus 2 into good-1.2, attempting to fix the spring, and it failed. This prompted me to outright compare the level binaries en masse.)
  • You cannot fix the Jungrock flowers by copying 1.3 levels into 1.2, because the Jungrock levels are already identical across all versions.
  • Both 1.0 and 1.3 have the desired behaviors with hidden springs.
  • The 1.2 executable (which is known to be identical in good-1.2 and bad-1.2) has a bug that deactivates hidden springs.
I see. So all of these fixes would have to be applied as specific, individual level fixes?... Hmm. I have some ideas about this. See below.

Quote:
Originally Posted by Simon View Post
I conjecture:
  • Jungrock flowers call similar code that hidden springs call, even though they don't flash a spring sprite when Jazz bounces off them. Other hidden springs flash a spring sprite for ~2 frames.
  • Orbitus bouncy floors also call similar code that hidden springs call.
  • Orbitus bouncy walls call different code, because they work in all versions.
  • The Jazz developers knew about broken airboard ditches and hacked some levels to fix them. In later releases, the fixes got lost.
It makes sense in theory, but aren't the Orbitus bouncy floors fully-functional in good-1.2?... That raises a lot of questions about what exactly in good-1.2 broke the invisible springs. The main thing I wonder is what the difference between the good-1.2-unique version of Orbitus is, compared to the other versions.

In any case, in 1.3, you would be wrong about Orbitus's floors being exactly the same as the invisible springs:

On the right is Tubelectric 2's hidden spring, on the left is Orbitus 2's bounce floor. (The attack and shot animations don't matter, so ignore them)

Orbitus's bounce floor works by simply being a spring event with no sprite, so in theory it works exactly the same as a normal spring, but it's invisible.
The Tubelectric spring is similar, except it becomes a visible spring when you touch it (notice that the behaviour parameter is set to Flip animation. This means that when Jazz touches it, it will switch from its Left animation to its Right animation, or vice versa).

However, I have a theory as to why both 1.2 versions have broken springs, and why bad-1.2's Orbitus floors are broken: I think it's the same problem as the broken airboard ditches. If something doesn't have a sprite, sometimes Jazz just doesn't collide with it.
In bad-1.2 they figured this out for Tube 2, and made the spring visible at all times, but 1.3 fixed the issue for that specific level entirely... Somehow.

I have a way to both prove this and fix good-1.2's Tubelectric 2: Change the behaviour parameter of event #34 in Tubelectric 2 (LEVEL1.001) to "Face Jazz" (it's the very top item on the behaviour dropdown menu), then swap the Left and Right sprites around. This is essentially the same fix as the airboard ditch, in a way, but it involves changing the behaviour too, where the airboard ditches already had the right behaviour, they just didn't have a sprite in either direction, so the collision never triggered... A somewhat similar problem is what I suspect afflicts Tubelectric 2 in good-1.2; the "Flip animation" behaviour only triggers when Jazz collides with it, but it uses an invisible sprite until Jazz collides with it, so it never switches to visible. Changing it to "Face Jazz" means it will flip when Jazz has just crossed the threshold of being on its right side (that is, when he's right in the middle of the event), thus it will have a sprite (a spring sprite), and with Jazz standing on top of it, it will seem to trigger correctly.
Here's a version of this I threw together.
It works in 1.3, but of course, the as-shipped version of Tube 2 works fine in 1.3 as well, so the tell is whether it works in good-1.2.
Sadly, this won't be a universal fix; looking at the Marbelara secret level, its invisible spring can be approached from either direction, so this "Face Jazz" fix won't work.

Also, here's a comparison of Orbitus's bounce floors (right) vs Jungrock's flowers (left). Looks like they're mostly the same, but with a slightly different direction parameter (the attack and shot sprites shouldn't matter, as far as I can tell). The big question is if good-1.2's Orbitus bounce floors are different from the 1.3 copy of the event I'm showing here.

Quote:
Originally Posted by Simon View Post
  • We already have the results of what will happen when we take the good-1.2 executable with 1.3 levels: This will be the bad 1.2.
  • I should try to copy the good-1.2-unique files into 1.0 or 1.3 and see what happens. Maybe they'll fix airboard ditches.
I'm not sure about the first point; Orbitus uses the same level files in good-1.2 and bad-1.2, and yet the bounce floors in Orbitus work fine in good-1.2, but are broken in bad-1.2.

Quote:
Originally Posted by Simon View Post
Further research requires me to finally install, run, and learn J1E. Lots of stuff to do, I'll keep at it!
Alright!
J1E's main issues are poor documentation, and the sheer amount of settings you can mess with on each event. That, and the fact that, in many levels, all events are unnamed. Still, you can generally figure out what they are by just looking at where they are in the level.

Quote:
Originally Posted by Simon View Post
You're right. Thanks! That's a refreshing counter to my biggest worry of using the good 1.2.

After all, we aren't publishing optional open-source extensions to some closed package. We are outright modifying what GOG sells, and thus need to be approved top-level anyway, no matter what we do.
Yeah.

On that note, perhaps one possible thing we could try is to see if it's possible to hack the EXE and FILE of 1.3 to adjust the hitbox of the Orbitus bounce floors. I don't know how feasible this is, but if we're making changes, and someone out there has the knowhow to fix this with a hex editor or something, it might be a nice solution... GOG will need approval from Epic either way.

Quote:
Originally Posted by Simon View Post
I feel like it will be like this, we'll have to carefully decide which is the least nasty choice.
Yeah.

I'm gonna guess we'll end up having to use a modified 1.3, since it doesn't have the broken spring issues, but I really hope there's a workaround.

Quote:
Originally Posted by Simon View Post
I promise to look into J1E within this week, and try your modding ideas, e.g., to the Jungrock flowers. I'll post results on Sunday evening, at latest. Meanwhile, feel free to prod me in IRC during the European evenings!

-- Simon
I'm pretty busy these days, but I'll try to prod you on IRC when I have time!
__________________

Last edited by Love & Thunder; Jul 28, 2020 at 06:36 AM.
ShadowGPW ShadowGPW's Avatar

Super Moderator

Joined: Jan 2001

Posts: 2,820

ShadowGPW is a forum legendShadowGPW is a forum legendShadowGPW is a forum legend

Jul 28, 2020, 11:49 PM
ShadowGPW is offline
Reply With Quote
wow I absolutely love this! You guys do god's work.
__________________
Join clan [GPW]'s discord!
https://discord.gg/ktCcYnv

S.H.A.D.O.W.: (aka Ins0mnia)
Synthetic Hydraulic Android Designed for Observation and Warfare

Mystic Legends
http://www.mysticlegends.org

Follow me on twitter: @Ins0mnia
Follow us on twitter: @Mystic_Legends
Simon Simon's Avatar

JCF Member

Joined: Dec 2016

Posts: 35

Simon is doing well so far

Jul 29, 2020, 12:56 PM
Simon is offline
Reply With Quote
Quote:
Originally Posted by Robo4900
Here's a version of this I threw together. [of Tubelectric 2]
It works in 1.3, but of course, the as-shipped version of Tube 2 works fine in 1.3 as well, so the tell is whether it works in good-1.2.
I put your level into good-1.2 and played. Yes, the spring activates and flashes its sprite as soon as Jazz has run past the middle. Thanks!

Downsides of this hack:
  • The flashing spring sprite hovers in the air, it's not on the ground, unlike the grounded flashing spring in, e.g., 1.0.
  • The spring appears when I jump over the event without landing.
  • The spring activates a tad later than a normal hidden spring in 1.0/1.3 because Jazz must pass its center.
Right, it confirms your theory that springs and ditches are fixable with sprites in good-1.2.

It's also conceivable to just put visible springs in place of hidden springs, like the Jazz devs did in good-1.2's Tubelectric 2. Like you, after comparing the files, I'm not so sure anymore what Tubelectric 2 was meant to be.

Quote:
Originally Posted by Robo4900
Quote:
Originally Posted by Simon
We already have the results of what will happen when we take the good-1.2 executable with 1.3 levels: This will be the bad 1.2.
I'm not sure about the first point; Orbitus uses the same level files in good-1.2 and bad-1.2, and yet the bounce floors in Orbitus work fine in good-1.2, but are broken in bad-1.2.
Hmm, Orbitus uses different LEVEL*.005 in good-1.2 and bad-1.2. The bad-1.2 LEVEL*.005 is identical to the 1.3 or the 1.0 LEVEL*.005.

To be certain and to rule out other causes than executable and LEVEL*.005, I playtested Orbitus 1 after putting the bad-1.2 LEVEL*.005 into good-1.2. The behavior is then as in the bad-1.2: Broken bouncy floors that behave like air.

Quote:
Originally Posted by ShadowGPW View Post
wow I absolutely love this! You guys do god's work.
Thanks! Great to see your interest. I'm super happy too that I can bounce these intricate ideas off Robo4900, and I'm learning a ton.

* * *

There is more to reply from Robo4900, I'll have to come back to that post.

Still, exciting new finding in Medivo 1! Existing knowledge: The Medivo airboard ditch in good-1.2 is broken (if airboard-Jazz passes over the ditch, Jazz won't ditch the airboard). We assume that this is because the ditch has no sprite, thus no collision with Jazz, and it's fixable by giving it a sprite.

Now, it's possible to shoot the checkpoint sign that is inside the Medivo 1 airboard section, die from the spikes next to it, and respawn on the checkpoint without airboard. Then Jazz will walk though the ditch. On touching the invisible ditch, Jazz will immediately receive an airboard! No sound plays, no yellow sparks fly.

This will not happen in 1.0 or 1.3; running over the ditch will not give Jazz an airboard there. Only in good-1.2 (haven't tested bad-1.2), Jazz will receive an airboard from the Medivo 1 ditch.

Thus, we have a non-sprite event that interacts with Jazz in 1.2. Nonetheless, the airboard ditch is fixable by giving it a sprite. I don't yet see how this fits together. I haven't tested other ditches in good-1.2 (one can gain/lose airboard with P, backspace, CSTRIKE to test other ditches) and I point out that the Medivo 1 LEVEL0.002 file is unique in good-1.2, which may explain that airboard-providing ditch.

-- Simon

Last edited by Simon; Jul 29, 2020 at 01:15 PM.
Madge

JCF Member

Joined: Jan 1970

Posts: 1

Madge has disabled reputation

Aug 1, 2020, 01:20 AM
Madge is offline
Reply With Quote
Hey guys, just had to say, I'm thrilled at the prospect of a "definitive" Jazz Jackrabbit on GOG. At the moment I have no reason to buy the GOG release, but all missions fixed would be that reason.

If I understand correctly, the current plan is to release 1.3 with a patched Orbitus 2 and fixed airboard ditches. Sounds perfectly reasonable, and the bare minimum GOG needs to do anyhow. Their current release isn't in an acceptable state.

Otherwise, would it not be possible just to use the 1.0 engine, but tweaked so it plays all episodes? I appreciate that combing through code is not how anyone wants to spend their time though.

Edit: The Jazz Jackrabbit source code is not available, however I can say some things about it. It was written in Turbo Pascal. The EXE can can be correctly disassembled into Assembly. Which I have done using IDA Pro 6. Hacking the game via Assembly would be a difficulty rating of "Turbo and Then Some", but I suspect it's doable. From what I can tell, the main problem is the episode select screen. MENU.000 from 1.3 contains the needed graphics, which EXE version 1.0 does not handle correctly. Isolating the code for this one screen in 1.3 and replicating it in 1.0 would solve the major problem.

Edit Edit: I'm informed that Episodes A-C do not work correctly with 1.1 or 1.0's engine, so that rules out this avenue of attack. Although if anyone wants to try anyhow, I still think it's possible to get 1.0 to use 1.3's MENU.000, if you can track down the section of code. It's not easy with only Assembler instructions to work off.

Last edited by Madge; Aug 1, 2020 at 01:38 PM.
Simon Simon's Avatar

JCF Member

Joined: Dec 2016

Posts: 35

Simon is doing well so far

Aug 2, 2020, 01:24 PM
Simon is offline
Reply With Quote
I've ran J1E and toyed with the flower event #24 in good-1.2's Jungrock 1 (LEVEL0.011). Yes, giving that event #24 a large sprite will activate the bouncing flower behavior; the trigger area will depend on the size of the sprite.

Quote:
Originally Posted by Robo9400
The first thing I'd try is seeing if I can make those flowers duplicate the exact event parameters as the Orbitus bounce floors (sans the sound effect).
All right, here goes...



Picture above: The functional Orbitus 1 floor event in good-1.2.

Orbitus 1 contains many floorspringred around the bottom. The left/right idle animation of floorspringred is quickfix. This is the 3rd-to-last animation in the drop-down list, i.e., there come 2 animations after it in the animation list.

It's impossible to enlarge that J1E event-defining window; the remaining values are all zeroes, except for variable #1 and variable #2 which are 125 each.

The name quickfix in good-1.2 rings the alarm bells. And indeed, this animation doesn't exist in 1.0: In 1.0, the bouncy floor in Orbitus 1 is called event #22 and has empty Animation #125 for idle left/right.

Now I've tried to use good-1.2-floorspringred's parameters for the Jungrock flower event #24. The first problem is that it's impossible to choose quickfix for left/right idling animation: There is no quickfix animation available in Jungrock 1. All animations of Jungrock 1 event #24 instead are already set to animation #125, an empty animation. It's the 3rd-to-last in the list, exactly as quickfix was in Orbitus 1.

Nonetheless, let's work on everything but the idling sprite; I've given Jungrock 1 event #24 the name floorspringred, kept its EASY, SPRING1, Flip animation, Spring up. I put Direction = -40, then 0, 0, 0, 6, 0, 0, ..., 0, 125, 125. The only difference to the out-of-box-event-#24 was the change to Direction.

Saved the so-edited LEVEL0.011 and played in good-1.2. This didn't activate any bounce effect in good-1.2. Apparently, the mysterious quickfix animation in Orbitus 1 is necessary, it doesn't exist in Jungrock 1.

Quote:
Originally Posted by Madge
thrilled at the prospect of a "definitive" Jazz Jackrabbit on GOG. At the moment I have no reason to buy the GOG release, but all missions fixed would be that reason.
Thanks for the encouragement! Such a strong valuation of the potential fixes over the sold 1.3, I'll keep it in mind when it comes to pitch something to GOG.

Quote:
Originally Posted by Madge
use the 1.0 engine, but tweaked so it plays all episodes? [...] MENU.000 from 1.3 contains the needed graphics, which EXE version 1.0 does not handle correctly. [...] Episodes A-C do not work correctly with 1.1 or 1.0's engine
This is a good research topic. I already suggest to new speedrunners that they buy 1.3 from GOG, then put from the 1.0 shareware JAZZ.EXE and MENU.000 into their 1.3 to get 1.0 physics. It would be excellent anyway to understand this better.

Ultimately, I think it will be more work than either good-1.2 with adaptions, or 1.3 with adaptions -- especially if you already know that A-C will give problems. There are extra peculiarities of 1.0: Slow Dreempipes water raising/falling, where the devs quickened the water for 1.2 and kept it quick in 1.3. Also, even the fullgame 1.0 peddles to the player to buy the full game after winning Episode 1.

Still, my judgement is based on practically zero understanding of the executables. It's possible that somebody will find something quickly.

Quote:
Originally Posted by Madge
current plan is to release 1.3 with a patched Orbitus 2 and fixed airboard ditches.
You're right, I'm leaning towards 1.3 with adaptions, but haven't ruled out alternatives. Robo9400 is 50:50 between 1.3 and good-1.2. I still owe Robo9400 a full comparison of what needs fixing either way.

I still haven't put good-1.2 levels into 1.3, I should experiment with that next! Maybe they'll fix ditches.

-- Simon

Last edited by Simon; Aug 2, 2020 at 01:39 PM.
Love & Thunder Love & Thunder's Avatar

JCF Member

Joined: Sep 2011

Posts: 1,065

Love & Thunder has disabled reputation

Aug 14, 2020, 09:21 AM
Love & Thunder is offline
Reply With Quote
Quote:
Originally Posted by ShadowGPW View Post
wow I absolutely love this! You guys do god's work.
Thanks.

Quote:
Originally Posted by Simon View Post
I put your level into good-1.2 and played. Yes, the spring activates and flashes its sprite as soon as Jazz has run past the middle. Thanks!
Ah, cool!
Sorry it took me so long to respond. Been very busy recently, and I keep forgetting to respond here...
Hope all is well with you.

Quote:
Originally Posted by Simon View Post
Downsides of this hack:

The flashing spring sprite hovers in the air, it's not on the ground, unlike the grounded flashing spring in, e.g., 1.0.
The spring appears when I jump over the event without landing.
The spring activates a tad later than a normal hidden spring in 1.0/1.3 because Jazz must pass its center.

Right, it confirms your theory that springs and ditches are fixable with sprites in good-1.2.

It's also conceivable to just put visible springs in place of hidden springs, like the Jazz devs did in good-1.2's Tubelectric 2. Like you, after comparing the files, I'm not so sure anymore what Tubelectric 2 was meant to be.
I see.
Well, now that we know it works with a visible sprite, we'll have to see if we can figure out a way to change the alignment, I guess. Though I'm okay with a minor visual bug, if it fixes the functionality of the level. A slightly late trigger is mildly annoying, but it shouldn't impact the functionality, thankfully.


Perhaps the thing to try is to mess around with the settings in J1E and see if you can get it to a state where it makes the spring appear, close to the ground.


Quote:
Originally Posted by Simon View Post
Hmm, Orbitus uses different LEVEL*.005 in good-1.2 and bad-1.2. The bad-1.2 LEVEL*.005 is identical to the 1.3 or the 1.0 LEVEL*.005.

To be certain and to rule out other causes than executable and LEVEL*.005, I playtested Orbitus 1 after putting the bad-1.2 LEVEL*.005 into good-1.2. The behavior is then as in the bad-1.2: Broken bouncy floors that behave like air.
Wow!
Hm. So, I suppose good-1.2 has a fixed version of Orbitus, but bad-1.2 forgot it, and in 1.3, they tried another method of fixing it that broke things in Orbitus 2... Very interesting!

Quote:
Originally Posted by Simon View Post
Thanks! Great to see your interest. I'm super happy too that I can bounce these intricate ideas off Robo4900, and I'm learning a ton.


Quote:
Originally Posted by Simon View Post
[airboard providing ditch]
Hm. Weird. Still, if my fix fixes that, then that's good, at least.

And we do know that some invisible sprites are still interactable, we're just not sure which ones.

Quote:
Originally Posted by Simon View Post
I've ran J1E and toyed with the flower event #24 in good-1.2's Jungrock 1 (LEVEL0.011). Yes, giving that event #24 a large sprite will activate the bouncing flower behavior; the trigger area will depend on the size of the sprite.
Thought so!

Quote:
Originally Posted by Simon View Post
Picture above: The functional Orbitus 1 floor event in good-1.2.

[...]

Saved the so-edited LEVEL0.011 and played in good-1.2. This didn't activate any bounce effect in good-1.2. Apparently, the mysterious quickfix animation in Orbitus 1 is necessary, it doesn't exist in Jungrock 1.
Hm.

Looks like the "quickfix" sprite is just a black pixel, present to let Jazz collide. We could hack that into Jungrock, or alternatively try creating a new animtion in one of the unused spaces, use the first frame of the item collection glitter flash thing, and use that as the idle animation for the Jungrock springs. It might just be seamless enough that players don't notice the difference.

Quote:
Originally Posted by Madge View Post
If I understand correctly, the current plan is to release 1.3 with a patched Orbitus 2 and fixed airboard ditches. Sounds perfectly reasonable, and the bare minimum GOG needs to do anyhow. Their current release isn't in an acceptable state.
No, there are other issues in 1.3, mainly Orbitus 2, that aren't really fixable without making a significant change to the level.

Personally, I'm aiming for this fix: We revert the engine to good-1.2, but use a mixture of levels to create a "definitive" version that fixes all the major bugs... I think we would default to 1.3 levels, but good-1.2 has some unique versions of a few levels (most notably both Orbituses) which we should use since they fix some issues. Then we apply some individual level fixes (such as Medivo and Tubelectric) to fix any remaining issues.


FWIW, when I first started investigating this, I was advocating for us using the extended version of Tubelectric 2 found in good-1.2, but at this point, I think it's best to use the 1.3 version, with a fix to make the spring work in good-1.2, as I think the good-1.2 version was an accidental inclusion; the version seen in 1.3, and all other versions other than good-1.2, is how it's supposed to be. So, I think a fixed version of the 1.3 version of the level is the best way to go.


Quote:
Originally Posted by Madge View Post
Otherwise, would it not be possible just to use the 1.0 engine [...] I'm informed that Episodes A-C do not work correctly with 1.1 or 1.0's engine, so that rules out this avenue of attack.
Yeah, sadly we can't just revert to 1.0 or 1.1.

Quote:
Originally Posted by Simon View Post
This is a good research topic. I already suggest to new speedrunners that they buy 1.3 from GOG, then put from the 1.0 shareware JAZZ.EXE and MENU.000 into their 1.3 to get 1.0 physics. It would be excellent anyway to understand this better.
FWIW, if we can put together a fix, I would hope that speedrunners could transition into using our fixed version instead of 1.0, since then they could do full speedruns of all nine original episodes.

Quote:
Originally Posted by Simon View Post
You're right, I'm leaning towards 1.3 with adaptions, but haven't ruled out alternatives. Robo9400 is 50:50 between 1.3 and good-1.2. I still owe Robo9400 a full comparison of what needs fixing either way.

I still haven't put good-1.2 levels into 1.3, I should experiment with that next! Maybe they'll fix ditches.
To be honest, at this point, I'm leaning more towards good-1.2 with fixes. My logic is this:

If we can make sure we've tracked down all the bugs in 1.2, then I think we can fix them all. The "quickfix" sprite in Orbitus could be used as a basis to fix all the other broken invisible sprites that don't have any alternative fix.

Whereas, 1.3, Orbitus is completely unfixable without significantly changing the level geometry, and thus significantly departing from how that level is intended to play.
__________________
Simon Simon's Avatar

JCF Member

Joined: Dec 2016

Posts: 35

Simon is doing well so far

Aug 21, 2020, 03:20 PM
Simon is offline
Reply With Quote
I'm doing fine, no worries -- I'm merely also busy with real life. Little time for hobbies.

Orbitus 2 in 1.3 with MaxStrike's fix doesn't play as intended, right: Jazz won't ever be bounced into the wrong area, whereas the intended design bounces Jazz into the wrong area unless one holds rightwards. 1.2 has this better.

Orbitus 2 in good-1.2 doesn't play as intended entirely, either: Jazz can fit through gaps in the bouncy floors. This allows major backrouting in the area after the half-way checkpoint: Jazz should follow the zig-zagging path, but instead can fall through all the way. This was fixed in 1.3, of course at a cost far too high.

I still like the sentiment of avoiding obvious redesigns. E.g., I'm contemplating good-1.2 with lots of visible springs where all the hidden springs were, and a fix for the Medivo ditch, and A-C from 1.3.

Will come back to you for the remainder!

-- Simon
Violet CLM Violet CLM's Avatar

JCF Éminence Grise

Joined: Mar 2001

Posts: 10,765

Violet CLM has disabled reputation

Sep 7, 2020, 09:22 AM
Violet CLM is offline
Reply With Quote
Following a few logistical issues in conversation, I have this response for you:
Quote:
Replacing the files shouldn't be a problem at all.
Could you provide new files?
I would pass them to our tech team.

After replacing them I would add the old build as a goodie and update the forum topic to let users know that we have implemented the fix.
Issues I mentioned were Orbitus 2, airboard ditches, and levels with impossible item/enemy completion requirements, but I acknowledged that last was a lower priority.

I continue to favor editing levels to work properly in 1.3, rather than pursuing some older version of the game with its own issues. I don't think the one area in Orbitus 2 needs to play as close as humanly possible to the original intent—it's one area.

If making any changes to levels in J1E, please make sure the sound effects all play the same as they did before. Sometimes those still get corrupted a little.
__________________
Simon Simon's Avatar

JCF Member

Joined: Dec 2016

Posts: 35

Simon is doing well so far

Sep 9, 2020, 09:51 PM
Simon is offline
Reply With Quote
Violet, thanks for coordinating! This is really important for the working spirit here. Especially GOG's willingness to include at least 1.3 as an extra.

Yeah, modifying 1.3 fits my sentiment of modifying as few levels as possible.

Ideally, when we send them the replacement files, I'll send them unmodified 1.0 and good-1.2, too.

Unreachable 100 % items/enemies: I merely know Nippius 2's ending and allegedly one of the Tubelectrics. JayTC_ (this is his twitch name) has tried to 100% Jazz 1, I'll contact him. It's also conceivable to fix Orbitus and airboard ditches in one release, and then fix 100% in a later release.

* * *

New research results: The broken airboard ditches in 1.3's Turtemple 2 and Pezrock 2 are fixed by putting good-1.2's Turtemple 2 and Pezrock 2 into 1.3.

This, paired with Robo4900's fix of Medivo 1, means that we can fix all ditches in 1.3. Also, it sounds like good-1.2 and 1.3 have the same bug that broke airboard ditches, since the same modifications fix the ditches in either version.

-- Simon
Simon Simon's Avatar

JCF Member

Joined: Dec 2016

Posts: 35

Simon is doing well so far

Sep 14, 2020, 09:26 PM
Simon is offline
Reply With Quote
If we sitck with modifying 1.3, the battle plan for GOG 0002 is:
  • Edit Orbitus 2 such that Jazz bounces upwards on bigger mistakes, but passes when permanently holding right. Verify that sounds play. (Other people have tried this and the sounds got botched, as Violet warns.) Fallback: MaxStrike's fix.
  • Copy Robo4900's practically invisible sprite into 1.3 to fix airboard ditch in Medivo 1. Verify that sounds play.
  • Copy Turtemple 2 and Pezrock 2 from good-1.2 into 1.3 to fix airboard ditches. Verify that sounds play.
  • Binary-patch FILE0001.EXE to print a different version string during start than: Welcome to Jazz Jackrabbit. version 1.3 -- this string sits in clear text in FILE0001.EXE, beginning at 0x3007. My proposal with matching length: Jazz Jackrabbit, v. GOG 0002
  • Ship 1.0, good-1.2, and unmodified 1.3 as goodies.
I'll work on this Orbitus 2 this weekend and post results!

Tubelectric 2 will remain short in 1.3 because it's not broken; let's instead make a good point for shipping good-1.2 that has the long Tubelectric 2.

It's sensible not to delay GOG 0002 for 100% items/enemies, and postpone 100% items/enemies for GOG 0003. JayTC hasn't yet replied to me on twitch yet, and properly testing for 100% items/enemies takes long, even in a team.

-- Simon
Violet CLM Violet CLM's Avatar

JCF Éminence Grise

Joined: Mar 2001

Posts: 10,765

Violet CLM has disabled reputation

Sep 15, 2020, 03:53 PM
Violet CLM is offline
Reply With Quote
I asked GOG if they have any preferences regarding FILE0001.EXE version strings. No response yet, but obviously it's a very easy/fast thing to implement.
__________________
Simon Simon's Avatar

JCF Member

Joined: Dec 2016

Posts: 35

Simon is doing well so far

Sep 16, 2020, 09:32 PM
Simon is offline
Reply With Quote
Good idea. The point is merely to label it different than 1.3; I'll be happy with any versioning scheme they suggest.

-- Simon
Violet CLM Violet CLM's Avatar

JCF Éminence Grise

Joined: Mar 2001

Posts: 10,765

Violet CLM has disabled reputation

Sep 18, 2020, 11:40 AM
Violet CLM is offline
Reply With Quote
GOG contact: "I think that this minor change doesn't require changing the displayed text."
__________________
Love & Thunder Love & Thunder's Avatar

JCF Member

Joined: Sep 2011

Posts: 1,065

Love & Thunder has disabled reputation

Sep 20, 2020, 05:46 AM
Love & Thunder is offline
Reply With Quote
Quote:
Originally Posted by Violet CLM
I continue to favor editing levels to work properly in 1.3, rather than pursuing some older version of the game with its own issues. I don't think the one area in Orbitus 2 needs to play as close as humanly possible to the original intent—it's one area.
It is still a level in the main campaign, though.

My view is: If it's possible to restore all 9 original episodes to how they're supposed to work, we should do that. That's impossible in 1.3, but it may be possible in good-1.2, assuming there aren't any bugs that we're not aware of.

But, if we have to compromise somewhere, sure, having some kind of workaround in Orbitus is better than having the flowers in Jungrock break or something, so going for 1.3 with fixes is fine. However, it doesn't look like good-1.2 has anything badly broken enough that we can't fix it.

I guess it all depends on what exactly is broken in good-1.2. If it's all stuff we can fix, then it seems to me that it's a no-brainer that we use a fixed good-1.2.

Quote:
Originally Posted by Simon
Ship 1.0, good-1.2, and unmodified 1.3 as goodies.
Personally, if the main version is a fixed version of 1.3, I would advocate for ignoring unmodified 1.3, but including a good-1.2 that's been modified to fix its level bugs (the broken ditches, springs, and such) as a goodie, but keeps all the variant levels (the more difficult versions of various levels in episodes A-C, the longer Tubelectric, etc.).
Overall, this would mean an ideal copy of every version of Jazz 1 is available to players; people can play a version of Jazz 1 that has a fully beatable campaign, but has the extended Tubelectric 2 and the earlier, harder versions of episodes A-C (a fixed good-1.2), they can play the ideal-for-speedrunning 1.0, but the main version of the game is our fixed 1.3.

The unmodified, broken versions of good-1.2 and 1.3 would ideally become nothing more than a historical curiosity, and IMO not all that worth including.

Just my view.
__________________

Last edited by Love & Thunder; Sep 20, 2020 at 07:17 AM.
Slaz Slaz's Avatar

JCF Member

Joined: Aug 2004

Posts: 1,282

Slaz is a forum legendSlaz is a forum legendSlaz is a forum legend

Sep 23, 2020, 12:44 AM
Slaz is offline
Reply With Quote
While we’re at it, please also remind the GOG contact to implement our fix to their macOS build of JJ1 when it gets implemented.

And also to make sure that the DOSbox config file has frameskip set to 0. The current macOS build strangely has frameskip set to 1 and we can’t expect the average user to know how to find that file and change it themselves.
__________________
Add SlazRabbit on Xbox Live if you want to play some GoW1/2/3/J or Destiny1/2.
Jazz Jackrabbit 2 Forever!!
Civilian Defence Force - Jazz2 Virtual Factory

Simon Simon's Avatar

JCF Member

Joined: Dec 2016

Posts: 35

Simon is doing well so far

Sep 28, 2020, 01:12 PM
Simon is offline
Reply With Quote
Apologies for having nearly no time in the past 1-2 weeks. Nothing to show yet from level editing. I still look at this topic every day!

-- Simon
Love & Thunder Love & Thunder's Avatar

JCF Member

Joined: Sep 2011

Posts: 1,065

Love & Thunder has disabled reputation

Oct 13, 2020, 09:00 AM
Love & Thunder is offline
Reply With Quote
Any news?

If there's anything I can help with, please do say so.

I continue to hope good-1.2 can be fixed-up, but if it's going to be a hassle, I'm not going to make a fuss for just that one section of Orbitus (as Violet rightly points out, it's just one section).
Regardless of which version we're using as the basis for our fix, I'm happy to take a swing at fixing any further broken airboard ditches (or anything else) in addition to the Medivo one I've already tried.
__________________
Simon Simon's Avatar

JCF Member

Joined: Dec 2016

Posts: 35

Simon is doing well so far

Oct 15, 2020, 11:22 AM
Simon is offline
Reply With Quote
Here are the ditch fixes for Turtemple 2 and Pezrock 2. They should work in 1.3 and sounds should still play.

Apologies for not posting anything productive about Orbitus 2 in 1.3, I've toyed around the editor but never finished anything. I've firmly set aside the entire upcoming Sunday, October 18th to make and post a fix for Orbitus 2!

1.3 with such fixes feels closest to what the devs intended, especially w.r.t. Orbitus. The devs made a deliberate decision to increase the bounce floor trigger area. Basing GOG 0002 on 1.2 would revert this decision and thus un-fix several areas across Orbitus. Fixing the one near-impassable section in Orbitus 2 seems like the best of both worlds. Still, it's always risky to assume what the devs have possibly thought.

1.3 needs the fewest changed levels compared to good-1.2, mostly due to hidden springs. I still owe you that full level-by-level comparison. >_>

Love & Thunder, can you post your adapted launcher batch file? Even if we end up with 1.3 plus fixes, HH95 will need the sound settings.

Slaz, I'll keep this request in mind. Jazz with frameskip = 1 will feel awkward. I'll post a new to-do list this Sunday (along with the Orbitus work) and will include that we must write this request.

-- Simon
Simon Simon's Avatar

JCF Member

Joined: Dec 2016

Posts: 35

Simon is doing well so far

Oct 18, 2020, 09:25 AM
Simon is offline
Reply With Quote
Download Orbitus 2 fix 2020-10-18 -- to be played in 1.3, e.g., the current GOG release. This is based on the 1.3 Orbitus and feels very similar in difficulty to the 1.0 and good-1.2 vanilla Orbitus.

It's still possible to get sucked upwards unless you actively aim for the next hole. Holding right diligently is enough, as it was in 1.0 and good-1.2.

If you happen to ascend in a particularly unfortunate alignment during the final column, holding right won't cut it and you'll get sucked upwards. This happens maybe 5 % of the time. If we want to kill even this small chance, I'll have to lower the ceiling of the rightmost hole in the wall; tell me how you feel.

To compare, here's the old version, from vanilla 1.3:



^ Level layout in vanilla 1.3. Now the fix 2020-10-18:



^ Level layout in Orbitus 2 fix 2020-10-18.

I've raised/lowered the bouncy floors and wall columns by one or two tiles. I've added a glowing arrow in the background to fill the extra empty space in the second column.

Number of pickups and enemies is the same. In the final drop, the pickups are lower than before, but their number and pattern stays the same.



^ All sounds play according to my testing, and it's still 100-%-able.



^ I've added these blocks far out of bounds, they're unreachable, not even the camera will scroll here. I'm mainly concerned about versioning, I'd also be fine with removing the upper two lines of text.

This is only Orbitus 2 for now. I'll write another post with the to-do list and to address the good-1.2 vs. 1.3 concerns.

-- Simon
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 12:47 AM.