Tile World 1.3.1
#1
Hi everybody. It's been a while, hasn't it?

So, the exciting news of CC2's relesae naturally brought to mind thoughts of Tile World.

Back in 2006, I was getting ready to do one more release of Tile World before I started a new job. Unfortunately, as I was doing that I found that all of my recent save files were corrupted. I was terrified because I didn't know how it had happened. Obviously I couldn't release any new code until I understood what had caused it. And so my new job started before I had resolved the issue.

It wasn't until years later that I finally convinced myself that the files had gotten corrupted up by another program entirely (a one-off script I had written to do some surgery on my save files while testing a feature), and that all the code in Tile World was blameless.

Because of that little scare, there were a handful of bug fixes that have been sitting on my hard drive all this time. It's way past time that I release this stuff.

So, welcome to Tile World 1.3.1:


http://www.muppetlabs.com/~breadbox/software/tworld/

The fixes to the MS game logic involve issues with blocks that start out on beartraps, and some interactions with blocks, creatures, and teleports. (One was a complicated bug reported by Evan Dummit which I no longer remember the details of.) The big one for me is a fix for a bug in the emulation of Chip turning a cloned block into a clone of himself while going through a teleport. You know, back in 2006 I once said "The day that Tile World correctly emulates level 9 of pi.dat all the way through, I'll be able to retire." Well ... I think Tile World 1.3.1 correctly emulates level 9 of pi.dat all the way through. (Unfortunately, I don't think I can actually retire. Too many other bugs.)

There were two notable bugs in the Lynx emulation: one with toggle walls not getting initialized correctly, and one that prevented BEWARE OF BUG working when pedantic mode is turned on. Those are now fixed.

I've also integrated the bug fixes that were released in TW2.1, including the one for the rather awful bug that failed to read save files correctly on 64-bit systems. A big thanks to Eric Schmidt, and Madhav Shanbhag (as well as Shmuel Siegel and Anders Kaseorg and everyone else who's worked to improve Tile World).

There's also some minor housekeeping work in various parts of the code and the documentation. Some of my stupid memory-management tricks are now being called out by the compiler, so I've rewritten that code to be more well-behaved.

Finally, there is one new feature. Tile World now stores the last level you visited in the save file, and by default it returns there when you next bring up that level set.


Hopefully, the bug fixes can also be integrated into TW2 without too much effort. (Though obviously not zero effort, as it appears there are going to be at least one or two merge conflicts.) I still haven't run TW2 myself -- I'm very curious to try it out, but I need to install like half a GB of Qt libraries first.

I've also started documenting some of the differences between the original Lynx game and the new version of CC1. This is just a quick list of first impressions; I haven't really dug into that subject yet.

And at some point I want to sit down and actually play CC2!

Free to reply here if you find a bug in the code or a mistake in the documentation. Or email still works, if you prefer that.

Share and Enjoy.
Reply
#2
I already started a list of CC1 Lynx/CC2 logic differences, but didn't really know where to put the list. I guess here will do. Slight smile

CC2, compared to (Tile World) CC1 lynx:
- boots can be dropped at will (now a togglable feature in the editor)
- wall slapping
- increased block slapping ability, e.g. moving L then holding RD to slap a block below
- shorter animation delay (about 1.25 moves); does not seem to be dependent on starting tick, but i'm not sure
- chips and boots are not exactly acting dirt: monsters can hit you while you're transitioning to the tile
- teeth seem to take your current position more precisely now, e.g. being 1.75 D, 2R from the teeth means horizontal first, regardless which direction you're going (see "Island", CC2 level 180); further testing needed
- backwards boosting allowed; teleports counted as sliding tiles for boosting purposes (+ special case for red and yellow teleports, but those aren't in CC1 so whatever)
- attempting and failing to override a force floor does not cost time; same with bumping into wall while sliding on ice (may be connected to wall-slapping)
- block sliding differences? (further testing needed)
- railroads required to desync blue tanks
- recessed walls come up when you step off instead of when you finish walking onto it; this apparently gives it inconsistent behavior
- can't hold blocks on ice
- can't enter a closed toggle wall the tick before it becomes open
- "truly" invisible walls appear as long as you're pressing against it (+ few ticks after)
- wires (and pink buttons) needed for arbitrary connections, otherwise pedantic
- chip count determined by chips in level rather than manually
- trap sliding absent, except in certain cases with brown buttons
- true multiple hints
- my March 2015 create competition level doesn't work ):

- clone & trap desync?
- "teleport-stacking" glitch in tw lynx? (and does this glitch exist in original lynx?)


----------

Also, about a month or two ago i downloaded the Tile World 2.1 source code to see if i could fix the Lynx Chip-stuck-in-teleport bug and differences in block-slapping, but now that you're here, you can do that, right? Smiley
CCMiniLP, my CCLP1 submissions. Outdated, not recommended.
CCSignificantlyLargerLP, my CCLP4 submissions. More current than my main set.
Consistent Inconsistency (ongoing), my main CC1 custom set. (discussion)
RyanJ1.dat (ongoing), my main CC2 custom set. (discussion)
Mystery Project (unfinished) (previews)

YouTube | Twitch | Steam
Reply
#3
Actually, why not have this in its own topic? I would love to see a list of the differences between the original Lynx ruleset and the new CC1 ruleset, and it's clearly not a small subject.



As for the existing bugs in Tile World's Lynx emulation -- you specifically mention Chip-stuck-in-teleport and differences in block-slapping -- I still don't have a good understanding of what the actual rules are around those behaviors. If someone can define exactly what happens under which situations, that would really help.
Reply
#4
Quote:Actually, why not have this in its own topic? I would love to see a list of the differences between the original Lynx ruleset and the new CC1 ruleset, and it's clearly not a small subject.


I started a thread here: http://cczone.invisionzone.com/index.php?/topic/1152-differences-between-atari-lynx-and-cc2-engines/

On another note, there are a few Tile World 2.1 features that you might be interested in for the Tile World 1 series. One of them is to save the volume setting between program invocations, and another is using the F key to cycle through the initial random force floor directions in Lynx.

I am starting to sense that an update to Tile World 2 is due relatively soon.
Reply
#5
Quote:On another note, there are a few Tile World 2.1 features that you might be interested in for the Tile World 1 series. One of them is to save the volume setting between program invocations, and another is using the F key to cycle through the initial random force floor directions in Lynx.


Those are both good features, and I should add them. I never got past the inertia of having to add another settings file to TW just for the volume. Also I don't know what was up with my computer back then, but having the volume default to maximum is really unpleasant on my current hardware. Maybe if my old computer hadn't been so quiet I would have added this feature from the beginning. (Or at least picked a better default.)
Reply
#6
I've been toying with the code a bit, and I'm going to release the current version as Tile World 1.3.2:

http://www.muppetlabs.com/~breadbox/software/tworld/

Unlike the last one, this is a feature release instead of a bugfix release. Eric's comments got me thinking, and so I've stolen three features from TW2.

First, I've added the <F> command to rotate the "random" force floor starting direction under Lynx.

Second, I've added an init file for persisting user-controlled settings between runs. Right now it stores the volume control and the current levelset.

The final new feature is a little bit of an experiment, and I'll be interested in getting people's feedback. I've added the ability to define messages between levels, as with the CCX files in TW2. Of course, TW2 actually displays a full-on HTML widget. Messages in Tile World 1.3.2, however, are just plain text. There's support for formatting paragraphs and line breaks, but that's it. That's good enough to support the gist of the messages that come with the CCLPxsets -- but of course that means that Tile World can't just use the existing CCX files directly. The message contents need to be extracted from the HTML and formatted appropriately. (Although the formatting for Tile World's new message files is really trivial.)

I've translated over the message files for the CCLPs and uploaded them (along with the updated dac files to use them). You can download it from here:

http://www.muppetlabs.com/~breadbox/pub/...gfiles.zip

Unfortunately, I of course cannot distribute a message file for the texts from the original levelset.

I do like the idea of having the ability to define interstitial messages (like the "decade" messages in the original game). Is it worth adding to Tile World, even though it's necessarily incompatible with TW2's CCX files? I'm curious what people think.

In any case, I think 1.3.2 is worth downloading just for the volume setting being persisted.
Reply
#7
OK I know this is ridiculous, but....

How many years will it take to make Tile World extensible? So we could define behavior and graphic for a wall, block, monster, object -- and it would appear.

Alternatively, can we start adding CC2 items (as was done for ice blocks) one at a time? Then we could gradually start providing CCL files (or some new format) that incorporated these new thing? [Minus the canopy, maybe]. If I had any idea how (and a lot of time) I might try this myself.
"Bad news, bad news came to me where I sleep / Turn turn turn again" - Bob Dylan
Reply
#8
I would say that if that's the kind of program you want, you shouldn't use Tile World as a starting point. You can leverage the knowledge that it embodies, but there's just a few too many assumptions about CC built into the structure of the program. I never designed it with the idea of making it extensible, and that's not something you want to just bolt on after the fact.

Ice blocks are a good example. Ice blocks add complication not because they're a new object, but the fact that any number of them can be pushed simultaneously completely blows the roof off of the upper limit to secondary effects. Right now, it's not possible to create a lengthy chain of side effects while computing the effect of a single move. (There is a bit of a chain, due in part to how blocks clone instantly.) So the code just handles it in an ad-hoc fashion. With the possibility of dozens of ice blocks being pushed in the course of a single move, that approach won't work any more.

I'm not saying it would necessarily be hard to write a program to do it right, mind you. I'm just saying that if you're looking to make a Swiss army knife, then my finely crafted kitchen knife isn't a good place to start.
Reply


Forum Jump:


Users browsing this thread: 3 Guest(s)