ZZT Ultra

Discuss how totally awesome Bang! is here.

Moderator: Terryn

Post Reply
User avatar
Appetite4
Official Clamp School Defender
Posts: 204
Joined: Tue Nov 18, 2014 4:57 am
Contact:

Version 0.12: Tighter Playing

Post by Appetite4 »

The version 0.12 release is here. With benefits to past, present, and future. It's amazing how many worlds move from nonworking to working when given a very small change to the game engine code.

Game Engine Changes:
  • PLAYSYNC property now present. This eliminates gaps in #PLAY music designed to be looped in a "fake" fashion, so such "idle-cycle-timed" #PLAY commands will now work seamlessly even if the timing is not measured correctly. Basically, the engine will "tow forward" an object executing a #PLAY command if the play queue runs dry during an idle cycle.
  • Object names, object binding, etc. now works better.
  • Player clones navigate to passages now (many worlds required this).
  • Multi-line scrolls no longer moved across when touched.
  • Zapped re-entry no longer destroys starting passage.
  • Passage color identification is now precise; strange color combos had been confusing the passage nav routines.
Editor Changes:
  • Editor handles PLAYER creation without explicit CPY=0 much better.
  • Passage P3 now being set correctly in editor.
  • Passage and door colors are now set properly after ENTER key pickup in editor.
  • GUIs within a WAD now extractable to ZZTGUI files in editor.
  • Key fallthrough and mouse fallthrough fixed for text boxes.
  • "Unsaved" asterisk indicator shows up in editor GUI; this is a staple in modern text editors.
  • Direct mouse selection of pattern and color within GUI (request from tapeworm).
  • Editor GUI title (second row) switches between editor styles (request from tapeworm).
The full change log: http://www.chriskallen.com/zzt/changelog.txt

I haven't tested all the worlds aggressively to see how many more of them work correctly, but I can ascertain that Aura, Little Square Things, Dreams, Unreal, and MacGyver ZZT are functional. Furthermore, a great number of previously "broken" worlds are now playable.

Banana Quest can't be too far off.
User avatar
Smilymzx
I hope she made lotsa spaghetti!
Posts: 182
Joined: Sat May 20, 2006 2:58 am
Location: LocacoLocacoL :LoL!

Re: ZZT Ultra

Post by Smilymzx »

Is it still possible to add the ability for Splitting the Text Colors and Chars from the Element (Should be set to not use by default) so you can create multicolored text instead of using the element number?

For ZZT/SZZT backwards compatibility, The algorithm for converting the text in english:

Save ForeGround 0-14 as 15 (White),
Save BackGround 7(White) and 8/F (Blinking bit set, Black/White) as 0 (Black),
Save BackGround 9-E (Blinking bit set, Blue thru Brown) only as 1-6 (Blue thru Brown)
Convert the rest to equivelent in ZZT/SZZT

Would like to see a better way of having a custom status bar implented for more items, for example: If I wanted coins, or lives, this can be useful, especially adding OOP commands would act great.

Keys can also be improved, by using all 16 colors for keys instead of just 8 colors. Just put it as an optional flag in ZZT ultra, and the limit is gone.
User avatar
Appetite4
Official Clamp School Defender
Posts: 204
Joined: Tue Nov 18, 2014 4:57 am
Contact:

Re: ZZT Ultra

Post by Appetite4 »

Smilymzx wrote:Is it still possible to add the ability for Splitting the Text Colors and Chars from the Element (Should be set to not use by default) so you can create multicolored text instead of using the element number?
It's kind of hard to make sense of your algorithm. I'd vote for creating a special type that displays text in an entirely new layer, which can be separately edited. I made a similar decision when I worked on Cruz, because the original Kroz text markup was really convoluted. As a separate editing layer, though, you can do anything you want with text--any character, any color.
Smilymzx wrote:Custom status bar implemented for more items, for example: If I wanted coins, or lives, this can be useful, especially adding OOP commands would act great.
You can do this now, but you'd have to create a new GUI or override a stock one, such as ZZTGAME. As for adding OOP commands, I might have to do this anyway if I want to support Banana Quest.
Smilymzx wrote:Keys can also be improved, by using all 16 colors for keys instead of just 8 colors.
This is already halfway supported. Keys are set as world properties KEYnn, where n is any number. Only numbers 8-15 are used now, but you could set any, in theory. What would need to change is key-collection code from PLAYER and the main type code's GUI update of key status.
User avatar
Appetite4
Official Clamp School Defender
Posts: 204
Joined: Tue Nov 18, 2014 4:57 am
Contact:

Banana Quest, and Character Customization

Post by Appetite4 »

Seriously thinking about character customizations and other BQ-style hacks. I have determined that the Banana Quest mods boil down to the following:
  • Character set changes (BQUEST.COM).
  • Language syntax keyword replacement, including TOUCH->TCTVT, END->STP, PLAY->MUZK, and CYCLE->SPEED.
  • Many text labels and sound effect sequences changed within program executable (BQZZT.EXE).
Warning: I'm about to nerd this post up a LOT.

Character sets, if we want them to be changeable, can be done legit if ZZT Ultra supports character set editing with future commands. HOWEVER, there are some quirks to account for here. WiL used service INT 10H / 11H / 10H to set the character cell height to 14 scanlines, but also used service INT 10H / 12H / 30H to set a VGA scanline count for the whole screen instead of an EGA scanline count. This is why you have the odd behavior of 3.57 extra lines below line 25. This might have been a mistake.

Anyway, the custom character data table ranges from 5A2H to 13A1H within BQUEST.COM, in case anyone wants to look at it. The reference manuals for 16-bit PCs, which I never threw away for some reason, go into elaborate details on how you can manipulate video hardware with your own character sets. You'd be surprised how many options you would have had.

I suppose all text changes within the executable, both language syntax and displayed text, are different sides of the same coin. Many of them seem to be relatively trivial in what they do (replacement for replacement's sake). Will need to make a more thorough accounting later on.

BUT...I tried to use fc /B on the executable copies and got a very unpleasant surprise: ZZT.EXE implements partial code obfuscation. This makes some text labels "sort of" readable, and not easily patched. My guess is that WiL un-did this obfuscation and then re-did it with the alternate text labels.

So unless there is a clean dump of the undone code obfuscation lying around zzt.org somewhere, a thorough accounting of changed text labels based on disassembly will require some cracking.

Never gets any easier.
User avatar
Smilymzx
I hope she made lotsa spaghetti!
Posts: 182
Joined: Sat May 20, 2006 2:58 am
Location: LocacoLocacoL :LoL!

Re: ZZT Ultra

Post by Smilymzx »

Still, Colored customs such as walls/breakables/hurts/floors should be a good idea for a revival like this.

You also should implement a new element part besides "COLOR" and "ELEMENT": "TYPE", which should be used like the "PARAMETER" in Megazeux, this would create a element subset, used for char, amount, effects, explosion size, etc.

Also, Is it soon possible to put something under the player, like "#PUT UNDER WHITE BOMB" as a means of laying stuff?
User avatar
Appetite4
Official Clamp School Defender
Posts: 204
Joined: Tue Nov 18, 2014 4:57 am
Contact:

ZAPTCHA in the works

Post by Appetite4 »

I had briefly talked about a ZZT-themed CAPTCHA interface for logging comments, etc. sometime in the past.

Now, I'm on the verge of making it actually happen. My ZZT Ultra website has its own discussion forum that is still under construction. DIY blogs (non-WordPress, at least) can get rather complicated. But you kind of need DIY with a custom CAPTCHA.

Basically, with a ZAPTCHA (ZZT Automated Program for Telling Computers and Humans Apart), you have to play ZZT to enter the on-screen code. If you enter the wrong code, run out of time, or touch any of the obstacles, you lose the challenge and have to re-enter a different code.

I am not saying spam bots can't figure out a way around this, but I imagine not many of them are capable of solving timed, moving A.I. puzzles.
User avatar
Appetite4
Official Clamp School Defender
Posts: 204
Joined: Tue Nov 18, 2014 4:57 am
Contact:

ZAPTCHA completed!

Post by Appetite4 »

My site's comment forum is now operational! I would have done it a lot earlier, but I wanted to produce a completely unnecessary (and yet thematically very appropriate) technical login mechanism.

This login mechanism is the "ZAPTCHA" I mentioned earlier. You'll see it when you try to comment on the forums:

http://www.chriskallen.com/zzt/discussion.php
User avatar
Appetite4
Official Clamp School Defender
Posts: 204
Joined: Tue Nov 18, 2014 4:57 am
Contact:

Smash ZZT is a-go: A Z-Make

Post by Appetite4 »

Hi All,

I feel like it's a good time to proceed with the first major project for ZZT Ultra apart from the initial tech demo: Smash ZZT.

This is going to be the first in a series of a type of game I will call the "Z-Make." A "Z-Make" is not a remake, and not a de-make, but rather a tribute/parody/technical feat that is designed to show how a game of a particular style can be synthesized as something ZZT-noir.

The challenge for any Z-Make is to reproduce the fine programming details of the referenced game. With the original ZZT engines, this would have been impossible due to programming limitations. But with modern engines, I can see many possibilities for promoting ZZT when it plays like its referenced counterpart.
User avatar
Appetite4
Official Clamp School Defender
Posts: 204
Joined: Tue Nov 18, 2014 4:57 am
Contact:

Time to do anything, anymore

Post by Appetite4 »

Smash ZZT is taking a while. Nearly every type in that game will need to be new or overridden, so there is not much leverage that can be obtained from the original types. It will look like ZZT, but it will definitely not play like ZZT. So much of it has to work perfectly before a demo is ready.

Increasingly, I am becoming dissatisfied with ZZT-OOP. At the core, ZZT-OOP is a thin wrapper around compiled bytecodes (even though it wasn't bytecode-compiled originally). Great for serving as the target, but not so great when you consider that most programming languages favor higher-level constructs.

With the "linear" nature of ZZT-OOP and Robot, we need to start thinking of wrapping everything at a higher level. I would like to let programmers specify their target languages with a property or object code prefix. The namespaces would be more or less the same, but you would be able to write proper braced blocks and not get too hung up on jump labels and spacing.

The result would be the same compiled opcodes already being generated now...but with a significant accessibility advantage for everyone new to ZZT, since people wouldn't have to deviate far from their knowledge of any managed C-like language in order to get started.

Some "language codes" to consider:
  • #!/lang/zztoop: Enhanced ZZT-OOP (the default)
  • #!/lang/oldzztoop: Original ZZT-OOP (ZZT, Super ZZT)
  • #!/lang/mzx: Robot (syntax as used in MZX)
  • #!/lang/c: C-like language constructs
  • #!/lang/python: Python-like language constructs
User avatar
Smilymzx
I hope she made lotsa spaghetti!
Posts: 182
Joined: Sat May 20, 2006 2:58 am
Location: LocacoLocacoL :LoL!

Re: ZZT Ultra

Post by Smilymzx »

So you are officially finally considering making support for Megazeux, This is good,

This will require more work, though, as support requires:

- a COMPLETE VGA emulation layer, with palettes and font support (You said you are going to add font support, that is one of those steps)
- Non-Blink (or Intense) Background Mode option for ZZT ultra
- Add MZX Built-in elements
- MZX type parameters as part of the element info class
- The info relating to the UNDER element info is seperate
- SMZX Modes (Optional, We might not need it)
- Sprites (Also optional, it's a choice!)
- MZX also supports Macros, though no-one actually uses them in games
- Possibly more...

When I was going to clone ZZT (unsuccessfully), I was thinking the same, and was going to port Caverns to my ZZT clone, but no luck actually doing so. But it looks like it's soon a reality.
User avatar
Appetite4
Official Clamp School Defender
Posts: 204
Joined: Tue Nov 18, 2014 4:57 am
Contact:

MZX support?

Post by Appetite4 »

Smilymzx wrote:So you are officially finally considering making support for Megazeux.
Well...the syntax, at least. Supporting every nuance is super hard.

I have many reasons to be concerned about chasing a perpetually moving target when it comes to MegaZeux. Unlike ZZT, whose "code" was frozen in time after 3.2, MegaZeux is very much alive, with its own source code, its own revision history, and its own fanbase.

The idea of "limited support" is problematic. If it isn't 100%, and you can't "play that," the value of MZX games played in ZZT Ultra is questionable in comparison to the native build of MZX 2.84.

Maybe one day we'll have one-size-fits-all compatibility. But at the very least, I'd want to say I can support Flimsy's Town and Banana Quest.

On that note, BQ is no cakewalk: The Perils of Hacking the Executable
User avatar
Smilymzx
I hope she made lotsa spaghetti!
Posts: 182
Joined: Sat May 20, 2006 2:58 am
Location: LocacoLocacoL :LoL!

Re: ZZT Ultra

Post by Smilymzx »

The Perils of Hacking the Executable is a must read, I must say that you are quite a writer!
User avatar
Appetite4
Official Clamp School Defender
Posts: 204
Joined: Tue Nov 18, 2014 4:57 am
Contact:

Version 0.13: Lucky 13

Post by Appetite4 »

Hi All,

Here's yet another update. PLAYSYNC improved, several code-processing parts made more fault-tolerant, and a few suggestions from Smilymzx were implemented.

The game ZPINBALL.ZZT is at least partially supported now, perhaps fully supported. I kinda suck at pinball games so I can't say with certainty that you can play it to completion in ZZT Ultra. Any Epic Pinball wizards here? Be my guest.

Most importantly, the title screen has been changed dramatically. The cheap functional sidebar has been replaced by a more professional-looking launch page. This should lend itself to promoting ZZT online to newcomers.

Here's the latest build (be sure that your cache is cleared): http://www.chriskallen.com/zzt/ZZTUltra.php
Attachments
New title page
New title page
User avatar
bitbot
Official Clamp School Defender
Posts: 328
Joined: Thu Mar 01, 2012 3:00 am
Location: earthbound
Contact:

Re: ZZT Ultra

Post by bitbot »

Nice work! This came a long way but I still find vanilla ZZT in a browser to be faster.

Can't you get Flash to export this as HTML5?
Image Image
User avatar
Appetite4
Official Clamp School Defender
Posts: 204
Joined: Tue Nov 18, 2014 4:57 am
Contact:

Deployment

Post by Appetite4 »

bitbot wrote:Nice work! This came a long way but I still find vanilla ZZT in a browser to be faster.
In Google Chrome, yes. I will say that archive.org has a very impressive browser implementation of the DosBox emulator. But Google Chrome's JIT compilation is pretty much mandatory--other browsers are crushed flat.
bitbot wrote:Can't you get Flash to export this as HTML5?
Sort of. The video isn't the problem. What worries me quite a lot is the sound system. If you can't dynamically synthesize the audio, it won't work. At all.

Here's a longer and politics-laden answer to the question about Flash and HTML 5.
Post Reply