View Single Post
Love & Thunder

JCF Member

Joined: Sep 2011

Posts: 1,101

Love & Thunder has disabled reputation

Jul 28, 2020, 07: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 07:36 AM.