Page 2 of 18

Re: Everything is awesome?

Posted: Fri Jan 16, 2015 3:21 am
by bitbot
Appetite4 wrote:bitbot, that Lego Movie screenshot gives me an idea! A special ZZT adventure where the world is coming apart and you have to stop it.

The title would be "Fall of ZZT: The Curse of Production Quality."
Heheh. You've got a back bone with Cruz and I know you can roll with the punches.

Truth is, I like you already—you're one of us. I'm just challenging you... If you're gonna add "Ultra" to the end of Sweeney's product, you better do it right!

To hell with production quality.
:blazkowicz:

Re: ZZT Ultra

Posted: Fri Jan 16, 2015 7:59 pm
by Commodore
BB found his attitude ;D

Save and Restore...WIP

Posted: Wed Jan 21, 2015 11:50 pm
by Appetite4
Okay...savegames need work. The types are stored fine, but colors are way off.

The WAD-and-JSON approach works as well as I had hoped. Even though the files generated are larger than the original savegames, the advantages we get from patching and interoperability will more than make up for it.

Re: ZZT Ultra

Posted: Tue Jan 27, 2015 10:18 pm
by Saxxon
This is a fine project! Good luck to you :)

If you've got any questions about the internal workings of either the ZZT or Super ZZT engines, please let me know. I may be more readily approachable via e-mail (saxxonpike@gmail.com) or Twitter (@SaxxonFox).

ZZT Ultra: Version 0.1 Released

Posted: Wed Feb 04, 2015 3:08 am
by Appetite4
http://www.chriskallen.com/zzt/ZZTUltra.html

The ZZT Ultra site has been quasi-officially launched now, although many pages are still unfinished.

There have been many updates since the original post last year. The biggest change is a file-based save feature. In its current form, ZZT Ultra does not host anything--not even savegames. Use 'Z' and 'S' to load a world file from your hard disk. If you save and reload your game, the files are stored on your own computer (not within Flash shared objects).

I should mention that even though the documentation was on the site before now, the pages are now properly linked. I'm keeping no secrets from anyone who wants to know how ZZT Ultra works, so all the specs are there. Of course, it's incomplete right now.

And no world editor yet. Sorry. One thing at a time.

Re: ZZT Ultra

Posted: Thu Feb 05, 2015 10:36 pm
by Commodore
Nice work! It seems to have some issues with player clones, like it thinks one it the actual player when it is just a clone.

Sound System Blues

Posted: Thu Feb 12, 2015 12:22 am
by Appetite4
Not everyone is going to care much about this post, but it's important to me. Mainly, because as part of the testing process, I have to listen to the ZZT sound effects all the time.

The ZZT Ultra sound system has turned out remarkably well. But the wave-sampling algorithm I employed is generating high harmonics for some of the frequencies. You only tend to notice it when you are at the high end of one of one of the sampled intervals. Basically, I sampled the frequencies every half octave. So you get a base sample at all C notes and all G notes. The lowest octave is an exception--it also samples E, because the internal speaker's lowest register has a unique audio profile.

For all other notes, the sound system linearly interpolates the next-lowest-frequency sample, playing it back at a higher rate. You probably won't notice high harmonics until a certain note. Actual C and G are rarely a problem, but F (just below G) or B (just below C) are a lot more grating.

Maybe others don't pay too much attention to high harmonics, but I do. Call it the blessing of still having high-frequency hearing potential after all these years. Or a curse, depending on how you look at it. It matters a lot to me. I hope I'm not alone in caring about something this specific!

Version 0.2: Many engine improvements

Posted: Sat Feb 14, 2015 9:38 pm
by Appetite4
http://www.chriskallen.com/zzt/ZZTUltra.html

We're now at 0.2 of ZZT Ultra. Thanks very much to Saxxon for the label parsing tips--I was able to get nearly all of them working perfectly.

Some other notable changes:
  • Super ZZT was VERY rough around the edges before. It's not perfect, but it's much better.
  • World flags are now accounted for with original engine limits (10 for ZZT, 16 for Super ZZT).
  • World name now shown in title.
  • Cheat box lets you enter # commands.
  • Spawning and status element destruction much improved. Previous behavior was okay but still wrong.
  • Be Quiet/Be Noisy setting works now.
  • Some status element errors in world files now automatically corrected.
  • TAKE statement wasn't working correctly before when not enough in inventory.
I need to work on fine-tuning some of the prefabs. Centipedes are really starting to piss me off, because I had the inversion code working perfectly before, and then it broke for no good reason out of the blue...

Re: ZZT Ultra

Posted: Mon Feb 16, 2015 10:35 pm
by Saxxon
Centipedes are, with the exception of the player and OOP parser, the most complex component. Even when digging around in assembly, it was still a lot of work (and even I don't have it completely perfect- there's an extra redraw in there somewhere when it turns around.)

I'm glad to hear you were able to get things working more smoothly!

ZZT Ultra: Even more improvements

Posted: Mon Feb 23, 2015 2:40 am
by Appetite4
http://www.chriskallen.com/zzt/ZZTUltra.html

Now we're at version 0.3. Many fixes and changes:
  • Fixed centipede inversion logic! Hopefully I've nailed it this time.
  • Implemented same-board passage navigation for Super ZZT
  • Improved FLOOR-copying algorithm when EMPTY or pushables nearby
  • Full-status-element board no longer creates spawning errors during bullet firing
  • Pushing now allows status-element pushables, such as PLAYER, to be pushed over FLOORs
  • PUSHER halts if step direction is idle
  • #GO IDLE blocks forever
  • Last-flag replacement fixed
  • Gems no longer destroyed by enemy bullets
  • Dark-color keys activate light-color inventory key
  • Player no longer "loses its one bullet forever" when only 1 shot allowed per board
  • BULLET type now squashable
  • Super ZZT "bears" now rendered as "dragons"
  • OBJECT types have equivalent instruction pointer set from original location in world file
  • OBJECT types honor previously set #BIND ID
These last two changes are important--they increase the scope of what ZZT Ultra can load. Theoretically, you could load ZZT and Super ZZT savegames now, and not just standard "t=0" ZZT and SZT world files.

I say "theoretically" because I don't put much stock in having accounted for every imaginable run-time detail that could be stored in a savegame. Anyway, it should help with loading world in a general sense.

Finishing touches

Posted: Fri Feb 27, 2015 1:05 am
by Appetite4
Good news: I am reaching the end of my list of fine-tuning changes for ZZT Ultra. Many worlds are approaching full playability with minimal/nonexistent bugs.

What is on my mind now: player clones and passage-duplication nav. These undocumented features are a headache because I know they need to be supported if I want this browser-based engine to work with every game on this site. And yet...it just sucks that people ever needed them to begin with.

In particular, "Lebensraum" is a good litmus test. Clone behavior, passage nav behavior, and a whole mess of other factors all need to be aligned perfectly in order to have that game work. I've mostly gotten the menus to work, but there are still a few problems with the gameplay itself.

If I'm not mistaken, this game takes advantage of a quirk that lets you "unkill" the player if health is restored after #ENDGAME, right? It seems odd that picking up a health pack at full health ends up killing you outright!

Re: ZZT Ultra

Posted: Mon Mar 02, 2015 7:09 pm
by Saxxon
#endgame sets your health to zero. But the check for zero health only happens when it's the Player's turn to act. So if you have an object use #endgame, then #give health 100, it essentially sets the player's health to 100 without spawning any mressages.

The odd behavior in player clones is due to the inconsistent checking of player presence in ZZT. Some code checks for "is this a player tile (id 4)" and some checks for "is this object zero?" A general rule of thumb: if it's not inside the "Attack", "Harm" or "Destroy" functions, it's likely checking for the former. The reason it needs to check for object zero in the latter is because otherwise there would be the possibility of actually eliminating the player from the board as it is considered Destructible.

Not that it prevents you from actually doing it, and I can show you how to kill the player permanently, making the game engine not recognize any keyboard input. Not that it's useful :)

Passage duplication bugs occur because here's how the code runs:
* Let's just say the duplicator is Object #2, there's a player clone on the target side, and a passage on the source side.
1) First half of the duplicator code looks at what it's duplicating and determines if it's something it can duplicate.
2) The target tile is a player, so it will attempt to run the Interact code on the source before pushing. (This is why if you stand in front of a duplicator that duplicates ammo, that ammo will disappear)
3) Interact code for a Passage is run, switching the board.
4) The board is faded in, control returns to the Duplicator code.
5) The duplicator's object information has been overwritten with new values- whatever is Object #2 on the new board- but it continues to do its further checks (can Object #2 do a duplicator push operation, etc...)

Now, if you change that to be like... object #100, and the new board doesn't have 100 objects, the behavior is undefined, but I believe the object data doesn't get overwritten. There can only be one board loaded on the screen at a time, and if a passage changes this in the middle of other element's code, you get some really weird situations like this.

The only two elements that can change the board without user interaction are Board Edge and Duplicator, I believe.

Major Update!

Posted: Tue Mar 03, 2015 12:05 am
by Appetite4
Now we're at version 0.4! This is a huge update:

http://www.chriskallen.com/zzt/ZZTUltra.html

I have started a page to track the individual worlds for "working/not working" status. It's somewhat tedious to do full playthroughs, but that is what counts. The page features the status of the built-in episodes plus all the "featured games" on Z2 I could find. Especially nice is the fact that Lebensraum now seems to work nearly flawlessly.

http://www.chriskallen.com/zzt/worlds.php#worlds

Summary of changes:
  • Player clones and passage-duplicator hack implemented!
  • Board edge-motion tests conducted, allowing item collection, player damage, and pushing from adjacent board.
  • Push behavior is different for player and pushers/stars/etc. Non-player objects don't like to squash the target immediately in front of them for some reason.
  • Overall timing is much improved. Slimes, duplicators, objects, and more.
  • Intel calculations improved. Ruffians, lions, tigers, and more.
  • Tigers were firing far too often! Used to be 1/2 chance for max-rate; it's now 1/3 chance (the correct probability).
  • Duplicators kill source if player is on other side.
  • Some spawns were creating "black-on-black" enemies. Tweaked #PUT, etc. to change color to white.
  • Bad #BIND is no longer reported as an error.
  • THUD message was being handled incorrectly at times; should be better now.
  • #CHANGE of non-stat to stat no longer keeps the non-stat underneath.
  • Player can be "unkilled" by health restore following zero-health change or #ENDGAME.
  • Super ZZT "#WALK" allows for push.
  • Super ZZT (I)ntroduction key now works.
  • ZZT / Super ZZT (W)orld selector key now works. Note this only loads a world of the same type--you need to exit to the ZZT Ultra main menu to get the "universal" choice.
  • "Overloaded" status elements on a single square no longer cause unexpected duplication.
  • Space bar shoots in last fire direction.
  • Bomb blasts now destroy gems.
  • Torch aura and camera updated when player is pushed around.

Re: ZZT Ultra

Posted: Tue Mar 03, 2015 6:01 pm
by Dr. Dos
Saxxon wrote: Not that it prevents you from actually doing it, and I can show you how to kill the player permanently, making the game engine not recognize any keyboard input. Not that it's useful :)
I remember somebody finding out a way to do this years ago and now I'm curious if it's the same method that I know of.

https://www.youtube.com/watch?v=_NRwNx3 ... e=youtu.be

too many clones

Posted: Tue Mar 03, 2015 8:04 pm
by bitbot
The Original ZZT
superzzt
megazeux
corndog
plastic
bang!
zig
zztexperience
enhancedzzt
ohrrpgce
z++
zzt4.0
dreamzzt
npzzt
rememberzzt
pazzt
ultrazzt
zz3
glzzt
zztx
jzt
zer
zpro
tyger
lyon
superwad
zztultra
?????????