Menu

Show posts

This section allows you to view all posts made by this member. Note that you can only see posts made in areas you currently have access to.

Show posts Menu

Topics - Simon

#141
Lix Main / 80% of custom music wouldn't play
December 18, 2017, 06:48:31 AM
Solved: The unplayable music was .mp3, which Lix doesn't support




From IRC:

Flopsy: SimonN: question about music compatibility in Lix, I'm guessing there are some file types which are not compatible like .ogg?
Flopsy: Just recorded a session and about 80% of my music wasn't playing :(


Ogg should play perfecly.

What is the exact issue: In some levels, Lix played no track at all? Or Lix played a track in every level, but the track selection was a few tracks over and over?

Check data/log.txt near the end for complaints about unplayable music files: Ctrl+F for "unplayable music" without quotes.

If data/log.txt lacks any entries about unplayable music, you might have had bad luck with the random track selection. Lix might play the same track in every level, omitting all others. Maybe the purely random track selection is bad, and it should be a random permutation that doesn't repeat unless all tracks have played once.

-- Simon
#142
Lix Main / Bug lifetimes
December 15, 2017, 07:35:07 AM
Hi,



This is a graph of open Lix issues, from mid-2015 to end of 2017. As of 0.9.5, I have 60 open issues and 207 closed.

The big drop in mid-2017 was the release of Lix 0.8. I didn't stabilize any of 0.7's physics and we went to patch version 0.7.23 before we were satisfied. This fixed a ton of bugs. Physics bugs are purple; the number of physics bugs only drops on a minor version bump.

Website that renders this graph -- you can mouse over a date to see statistics, and you get a nice graph with lifetimes of individual bugs. In that indivdual-bug-lifetime graph, you see that several issues from early 2016 are still open. The longest-living bug that eventually got fixed was #4: Game ignores large animated tiles on graphics cards with max-texture-size 4096.

-- Simon
#143
Lix Main / Speedrunning Lix singleplayer
November 10, 2017, 11:36:43 AM
From yesterday's IRC log (quakenet.org #lix):

<Proxima> I'm thinking of doing a speedrun of DROD: GatEB. No page [on speedrun.com] yet :)
<Proxima> Also, I might try doing the Repton games at some point. And maybe NeoLemmix or Lix.
<SimonN> Lix is meh because I won't support ancient versions that will eventually become fastest


And it's dependent on level fluctuation between given sets of levels. Faster machines will have an advantage with faster framestepping.

Nonetheless, it's a meaningful run, with plenty of dexterity and judgement. I gave it a go, partially blind, some maps without routing. Especially on larger maps, on-the-fly routing is expensive. Who can beat this?

lemforum/Lovely in 18:52 obsolete
lemforum/Lovely in 16:50

-- Simon
#144
Site Discussion / Nessy is administrator
November 08, 2017, 03:51:29 PM
Hi,

Nessy is administrator on Lemmings Forums, alongside namida, geoo, ccexplore, and myself.

Nessy is web developer by profession and has already polished neolemmix.com with a clean, modern design, no unnecessary bells or whistles. Thanks for stepping up to look after the forum, should there ever be a need! After Dullstar's issue (attachment too large), I sought for competence because my web solutions would be hackish at best.

This announcement is long overdue -- namida has granted Nessy ssh/database access already in mid-October 2017.

Simon
#145
Latest Stable NeoLemmix Player V10.13.18
Level pack is Icho's contest collection from 2017-10-29, https://www.dropbox.com/s/wqzfmenmfmet9la/Contest13LevelCollection.nxp?dl=1

Run NL with:
wine NeoLemmix.exe packs/Contest13LevelCollection.nxp

Play and win level by Raymanni. Get attached error. Click OK, ingame screen remains frozen. We didn't reach the end-of-level screen. I kill NL by hand.

The directory ./Replay/ exists, but there is no ./Replay/packs/.

-- Simon
#146
Hi,

I have to get my real life back into shape, and finish the PhD for good. That means I want to push myself to work on that every day for several hours. That means that I won't hack Lix as intensively as I have been recently.

I had great rhythm in August and September 2017, releasing every week with 5+ issues fixed. This has brought Lix into a reasonable shape, I'm really happy with it. D Lix has every important feature from C++ Lix, multiplayer works, the 0.9 physics and tilesets don't need any urgent patching.



If I want to let it drift, now is the ideal time. I expect the drift to last until end of year, but who knows. Even if I develop more sporadically for a while, I'll keep my old rhythm for some things:

  • I will backroute-fix the contest level.
  • I will hotfix bugs in Lix that destroy work, if any turn up.
  • I will visit the forum each day and merge posted Lix levels.
  • I will watch github and merge pull requests.
-- Simon
#147
Hi,

You have a computer game, and suddenly level editors become available. Kieran observed a common pattern for how communities grow around level editing. There are three ages.

Editor becomes available: Early adopters jump on the new tech. It's very exciting to see what you can do in the editor, and it's satisfying to build anything at all. Every level has a brand new idea and is published immediately. Quality varies widely: Most of the levels turn out garbage later. Some levels are already excellent. Some levels highlight quirks in the engine.

Extreme levels, bug examples: After the editor has been available for a while, everybody has a rough grasp on the design space. The editor enables researching the finer details, you can build levels to see what the game engine can do. The community builds trimmed levels that showcase bugs in the engine. Some members release insanely hard levels to push both the engine and the design space to its limits. This is still bad level design by later standards, but there are no standards yet.

Quality: The novelty wears off, level releases become less frequent. New publications consolidate the findings of the earlier stages. Designers ignore a part of the design space to focus on select interesting ideas. Fun levels need not be hard, but it has taken until now to find the alternatives. Even new members observe what the established community likes, and builds higher-quality levels from the get-go.

Keywords to find this article: culture, Kieran's 3-step-theory, 3-step-culture, musings on level design, musings on level editors

-- Simon
#148
Hi,

Wafflem streamed Rubix's singleplayer levels on twitch yesterday: All of Pleasant and the first half Sinister. Vod for 14 days

One-pixel gap: See attachment. Lixes walk across this gap. This is intended: Physics resolve the land in 2x1 chunks (2 pixels wide, 1 high), and consider a 2x1 chunk solid when at least one of the two pixels is solid. I'm nonetheless unhappy about these gaps.

These gaps happen occasionally when terrain tiles sit at odd x-coordinates; here, the pagoda sits at (1395, 191). Maybe I should nudge the pagoda by one pixel. But in general, I'd like to keep all integer positions for tile placements, and exploder craters generate odd shapes anyway. I don't have a good final answer on the one-pixel gaps.

Unclear spawn interval: Nepster and Wafflem both wanted to view spawn interval during play, but neither found this in the user interface. Chatters eventually explained how you can mouse over a hatch to examine the SI. Issue #207.

Skill blueprints, splat ruler: Skill blueprints (shadows) show resulting terrain on the map before an assignment, while mouse over lix. Splat ruler measures splat height from arbitrary ledges.

This is getting important. Earlier this year, I've focussed on minimum viable multiplayer, but the multiplayer is in good shape since 0.9. I have to focus on the general user experience again. The blueprints seem like the most urgent lacking feature here.

Mark lemming: First, I'd like to improve the highlight under the cursor. That lix doesn't stick out clearly. Game draws her lighter, but I'd like to draw her really bright and with a dark outline, setting her apart from the bunch. Issue #247.

And I'd like to perma-mark able lixes (at least 1 permenent skill) on the map. The cursor already prefers them in the crowd, but that's not clear because the highlight under the cursor is too dark.

I believe that with these UI improvements, marked lemmings become unnecessary. Marking introduces a mode, and I'd like to avoid modes at all costs. The marking was necessary in NL because the cursor didn't snap to athletes.

Platformer doesn't turn: This is awkward, indeed, because the builder turns and the platformer looks so similar. I designed the platformer 9-10 years ago and decided that copying L2's behavior was a good idea. I can't judge neutrally what's better. The non-turning platformer is easier to anticipate, but the turning platformer is consistent with the builder.

Steel sensitivity: Lix terrain removers cancel when the mask overlaps steel, with small grace areas near the boundaries. When things align to the 16x16 grid, it's easy to anticipate chokes on steel.

The basher removes terrain in her own column and forward, and will therefore choke on steel within her head. We gave the miner a grace column here in 0.7, but didn't change the basher. No idea whether either grace column is good or not.

The NL terrain removers are extremely lenient and won't choke even if 80 % of a pickaxe's swing tries to remove steel. I understand that when you're used to the NL lenience, the Lix chokes on steel feel strict.

Thanks for the stream, and for the excellent feedback!

-- Simon
#149
Lix Levels / Miniatures (misc/miniatures)
September 30, 2017, 01:47:59 AM
Hi!



Find attached 10 miniatures built by geoo and me.

I call a level a miniature iff it satisfies all of these constraints:

  • Width is at most 320, which is half the default level width.
  • Height is at most 200, which is half the default level height.
  • Number of lix is at most 9.
  • Total number of skills is at most 9.
The width/height restrictions are inspired by Gronkling's small maps. Gronkling explained how the small levels would happen naturally for him. I was envious and decided to build a couple small maps, too!

geoo and I made these several months ago. Originally, I've wanted to hoard them until I had a proper pack. But I haven't worked on small levels recently, therefore I'll release them without pack polish.

All levels are proven solvable under 0.9.x physics.

-- Simon
#150
Lix Main / Lix 0.9.48 released
September 28, 2017, 03:21:57 PM
Get the newest Lix:

Download Lix -- for Windows, pick 64-bit version
:lix-evil: Source code
:8(): Changelog
:8:()[: Issue tracker

Lix 0.9.0 released:

This bumps the middle version number, which means physics change. If you'd like to play tonight, you need this one, or the server won't let you in. :lix-grin: But I've fixed a couple annoyances in multiplayer, I hope it's worth it. All singleplayer levels are still solvable.



  • Raymanni's Toy, Lab, and Gore tilesets to v3: Raymanni has drawn Lab monitors, Gore tentacles, eyes, and a bonesaw, a Toy chalkbox, and several more. All tiles have shading from the top-left as normal for Lix tiles. Thanks!
  • Added Proxima's and mobius's multiplayer levels, merged geoo's level changes for the tileset update.
  • Level search. In the singleplayer or multiplayer level browser, you can search the entire level tree for titles or filenames.
  • Fix #230: Frogs ate cubers, and flung cubers reanimated. Now, cubers stay dead.
  • Fix #231: Tumblers oscillated in thin walls. Now, tumblers will either move or land. (The tumbler code is not perfect yet, I'm planning to rewrite it, but the rewrite's subtle physics changes would invalidate too many replays still.)
  • Fix #214: Players permute correctly in networking games.
  • Fix #239: The server sends a permutation of correct size. This fixes wrong hatch/goal distributions in games with many observers and larger teams.
  • Fix #217: Skip remaining overtime when everybody has nuked or finished playing.
  • Race maps (= maps that have zero overtime) nuke automatically on the first scoring.
  • Fix #240: Observers don't have to cancel the end-of-game dialog anymore. I print the game result to the console. This is not beautiful, but it's an acceptable medium-term solution.
-- Simon
#151
If you wish to ax options, redesign the blinking time limit.

Reasoning: Warning at 30 seconds is far too late. What good does it do? If there is any goodness, why wait until 30 seconds left instead of doing the goodness in the beginning? Why hit at 30 seconds instead of at 5 seconds, or even at the very end, because only then physics are affected?

Blinking text is problematic: We want to emphasize information. The worst we can do is hide that information temporarily, but blink is exactly that. At least blink in different color than transparent.

Some platforming games make your character blink transparently during invincibility frames. Massive problem. Much better to flash in a different color.

List of NL options
Option survey results




General rambling about options. The ideal reason to ax an option is a redesign that combines the goodness of old-yes and old-no. Let's assume the option exists for a reason, it covers a need. Unless we can explain why the need is covered otherwise, we shouldn't axe options.

People like what is familiar, and sometimes perceive that as simpler.

The Lemmings community shares familiarity of L1. As irrational as this may sound, it might be correct to design purely for this familiarity devoid of any other reason. E.g., make overproportionally many options for this. The SI/SR option is of this very nature already.

Compared to physics, options just for fun incur less permanent damage; if you grow really sick of something, could axe it later.

-- Simon
#152
Hi,

geoo and I plan a Lix multiplayer Session on Sunday, September 10th at 18:00 UTC (= 11:00 a.m. Pacific daylight savings, 12:00 noon in Utah, 19:00 in the UK, 20:00 in Germany or Austria, and 21:00 in Finland). Lix 0.8.5 is released; if you had the game crash on you, you might get more informative errors with 0.8.5. But any 0.8.x can join.

Since that's on short notice, and Flopsy works weekend shifts, I propose another multiplayer session for Tuesday, September 19th at 18:00 UTC. Flopsy, would that suit you? I didn't choose Monday 18th because it's Icho's night before exam.

Depending on your replies, I'll be fine with re-scheduling the Tuesday, September 19th session. Don't be shy to propose something else!

-- Simon
#153
Mono on Linux is popular to run C# apps. I've managed to build NLEditor. See attachments for screenshots. Observations:
  • The light dropdown menus have light text. I have a desktop theme with dark widgets and light text. That's probably a bug in the Mono widgets: They specify light bg, but keep user's text color.
  • Some widgets are wider than they should be, they reach underneath the level map. (Or the level map is too fat and goes over the widgets on the left.)
  • Tile pickers (empty boxes under the map): The form-designed tile boxes on the left are too big. The programatically-generated boxes on the right have the correct shape.
  • Number pickers: Numbers center within the entire widget. Nepster expected them to center merely within the arrow-free portion of the widget.
I reported this in #neolemmix earlier today. This post is for reference. None of this is urgent.

NLEditor doesn't have a readme or build instructions yet. Here's how I built it on Archlinux:
  • Install mono.
  • git clone https://bitbucket.org/StephanNeupert/nleditor
  • cd nleditor
  • xbuild, run without arguments, it will find the build info by itself. It warns that it's deprecated, but the mono distribution doesn't seem to ship with any other build tool. And xbuild seems to build the project without problems.
  • mono NLEditor.exe
-- Simon
#154
Quote<Flopsy> SimonN: honest question for you, for someone who would like to learn coding where would be a good place to start. Python, C/C++ or something else....?

This gives reasonable recommendations:
http://www.bestprogramminglanguagefor.me/

Python is popular as a first language, very straightforward to get programs to do what you want. For large programs, I prefer static typechecking which Python doesn't have by default, but that's not a strong case against Python as a first language.

At least one university teaches D as a first language, with this book: http://ddili.org/ders/d.en/

I think D and C# are similarly nice to learn first. Main downsides: D isn't widespread even though I love it, and C# is tied to Microsoft's .NET virtual machine, even though there are ways to run it on Linux.

Java 9 or 8 or Scala are viable first languages, but these depend on the Java virtual machine. Some would like to avoid the JVM.

C, C++ maybe not as first languages, but it's certainly healthy in the long run to look at least at C.

Quote<Flopsy> what type of coding would help me understand NeoLemmix better

To understand the NL source, learn any language of the above, along with the basics of object-oriented programming. Even though NL's Delphi source will not be in your language, you can guess what happens because you recognize the principles.

To modify the NL source, catch Nepster in chat for what Delphi to install, then build NL from source and experiment with it. Nepster's editor will be in C#.

-- Simon
#155
Level Design / Clear & precise level titles
August 30, 2017, 07:26:32 PM
Hi folks,

I've planned to write an essay about level repeats. One of my arguments hinges on good level titles. Titles easily fill a topic of their own -- here it is!

We care about levels. Levels are the unit of our culture. We create levels, we play levels, and we discuss levels. Good level titles help us with that: Titles are our mental handles when we share levels and ideas.

  • A title should be clear: When I see a level, its solution, and its name, I should recognize a connection. This is good because I can then remember the name without effort. When I'll discuss your level later, I'll have its landscape or solution in mind, and the title will come to me easily.
  • A title should be precise: It should be hard to associate the title with other levels. When I read a precise title in a discussion, the chance will be high that I think of the correct level. That is good because it encourages joining an interesting discussion.
If we accept these benefits, we'll arrive at good recommendations.

Say the title, not (only) rank & position! When you discuss levels, always give the title. Rank & position cannot be precise, any level could be at that position. If you'd like to abbreviate long titles using rank & position, fine -- but please state the title at least once. Sometimes, levels change position, rendering rank & position even worse a substitute for expressive titles.

Puns or pop culture, if any, need a connection to the level's landscape or solution. Song titles or movie titles can be good level titles, but it's very hard because they are so flowery. Titles don't become any clearer merely because you like a song; others don't necessarily know your taste in music. Once you've designed several levels, taste in music or movies cannot give precise names anymore on its own: Any Tame level could be called Gone With the Lemming.

Sometimes, repeats copy the terrain of a good puzzle and give 20-20-20-20-... skills. You've stripped the puzzle but haven't inserted any fresh idea. How will you name the easy level? Most titles cannot be precise because all ideas would also apply to the hard version. Lemming Drops and Bitter Lemming are titles of such easy versions, they're void of any connection whatsoever. Maybe find a pair of titles where either title suggests that there is a complementary level?

If you're really fond of a title even though it's not clear or precise at all, decorate the level accordingly. That won't create the strongest connection because the puzzle's solution will be unrelated, but it's far better than nothing.

A title shouldn't merely fit the tileset, it should fit the level. Which levels exactly were Ice Spy, Snow Joke, and On the Antarctic Coast? Fitting to the tileset, however, is a good start. Can you think of a unique detail in the level's terrain or solution, and tailor your title towards that? That can turn a passable title into a great title.

Keep titles reasonably short. Avoid titles that are annoying to type, like AAAAAARRRRRRGGGGGGHHHHHH!!!!!!. Our culture is about sharing ideas in written form, we will type level titles many times.

-- Simon
#156
Lix Multiplayer Dates / Multiplayer 2017-09-03
August 25, 2017, 02:48:51 PM
Hi all,

Rubix and I are planning Lix multiplayer for Sunday, September 3rd, at 18:00 UTC (= 11:00 Pacific daylight savings, 20:00 in Germany or Austria).

Who's up? :lix-grin: It's perfectly fine to play for the first time.

You need Lix 0.8. At the given time, click Network Game and connect to lixgame.com (large button in the networking menu).

-- Simon
#157
Lix Main / Lix 0.8.8 released
August 21, 2017, 11:53:34 PM
Download the newest Lix 0.8.x:

:lix-cool: Download for Windows
:lix: Download for Linux 64-bit
:lix-evil: Source code
:8(): Changelog
:8:()[: Issue tracker

Replace 0.6 entirely: Lix 0.8 changes many tilesets and levels. Don't copy into your 0.6 installation. Instead, extract 0.8 into a new directory. If you'd like to preserve settings and level progress, copy data/user/ from your 0.6 or 0.7 installation into 0.8. You can delete 0.6 and 0.7.




Lix 0.8.0 released.

Features:
  • Stable 0.7.22 physics. I would like to keep these physics at least for several months: 5/9 digger with antiRazor, tumbler splats based on pixels fallen and initializes pixels fallen according to fling speed, and all other physics changes from the 0.7.0 first post.
  • New tilesets over 0.6: Raymanni's Gore, Lab, Toys, and my renovation of Matt's Oriental set. I removed my 11-year-old programmer art tilesets.
  • A ton of bugs closed from 0.6, see the changelog for all the fixes during the 0.7.x experimental releases.
  • Tooltips during game explain directional select, priority invert, and double-click on nuke. Can disable tooltips in the options menu.
  • Removed the unused editor button to add decoration. To fill the void, the button to add terrain is twice as large. Not perfect, but good for now.
Thanks to geoo, Nepster, Proxima for revising levels, proving solvability, and dissecting physics. Thanks to Raymanni for the awesome tilesets -- I should have included them last year already. Thanks to möbius for some neat levels in these sets:



It Takes Time to Build by möbius in Raymanni's Gore tileset



Theresa Falls up the Stairs by möbius and Nepster in Raymanni's Toys tileset

-- Simon
#158
Hi,

C++ Lix through 0.7.12: A digger has 16 looping frames. She removes earth 12 frames after assignment during this loop. Earth is removed every (12 + (16*n))-th frame.

Proposed: Remove earth during the final frame of the loop instead. Then, a digger removes earth every (16*n)-th frame. For the animation, I'd design 4 frames of startup that run into the old 16-frame looping animation.

Reason: In 0.7.12, you can cancel an already-working digger by (assigning digger to a walker in the digger pit). The new digger removes earth sooner than the old digger, causing the old digger to fall. That leads to backroutes.

There are two interesting alternatives to 0.7.12: Give the digger 3 or 4 extra frames before entering the usual cycle. If we give 3 frames, then you can't cancel diggers by assigning new diggers, but you'll have a frame-perfect possibility to have the diggers moving in unison very close to each other. If we give 4 frames instead, we remove this overlapping assignment; the old digger will remove earth sooner than the new digger.

geoo is in favor of this change. This makes the digger even weaker in comparison to the miner, but not by much. It removes a backroutish digger-digger single-cancelling. Double cancelling (both diggers stop working) never happens, either with or without this proposal.

Damage to replays: Lemforum coverage down 236/240 -> 184/240, that's 52 levels to be covered anew. NepsterLix coverage down 107/107 -> 71/107, that's 36 levels.

geoo assumes that most levels' ideas remain intact, a select few need spawn interval 60 -> 64 or a small shift of terrain.

-- Simon
#159
Many design a loose level or two, but don't have the patience to design entire packs. Have an outlet for loose levels. A grab-bag pack that's not sorted or designed? A cloud like the level-sharing feature as in Super Mario Maker or Chuck's Challenge?

Improve the links between levels and replays. From a level, let the engine list all installed replays for that level. From a replay, get a quick way to go to that level in the singleplayer browser. Or extract the included level to somewhere, then immediately open the singleplayer browser on the extracted level. Replays and levels are so strongly associated, Lix's support is feeble. Consider design problems like different level versions when one replay solves all versions. Is level filename a good key?

Should levels always ship with proofs (= replays that solve the level, to guarantee solvability)? Should the proof be inside the level, or, as it is now, in an external file? Should the engine allow many intended solutions, and many slight variations of them, with logical formulas à la "solutions A and B must work, and at least one of C and D must work, and neither E or F may work because they're backroutes"?

Anything here would be long-term goals. :lix-cool: We've got bigger more straightforward fish to fry.

-- Simon
#160
Lix Main / Walker skill cancels, then always turns?
June 25, 2017, 05:21:17 AM
Hi,

I propose another physics change before 0.7 becomes stable. Edit 2017-07-17: I've rejected the proposal and will keep 0.6 walker physics.

0.6 walker: If target lix is working*, revert to walker. Otherwise, turn.
0.7 proposal: If target lix is working, revert to walker. Turn in every case.

*) Working activities are builder, platformer, basher, miner, digger, blocker, batter. Non-working activities are everything else that you can nonetheless assign walker: walker, runner, lander, ascender, shrugger, ...

Reasons:
  • Skill becomes state-free! No matter what lix you assign, as long as the assignment is legal, she will always turn and be a walker. Straightforward for the mind. This feels good.
  • Skill becomes simpler to explain and discover. I want to improve the skill icon: The walker shall face left and get a U-turn arrow pointing leftwards.
  • In singleplayer puzzles, turn-by-walker happens twice as often as cancel-by-walker. Source: I ran the replay database in a custom Lix build that counted the usages. Let's make the skill do what we often want.
  • In multiplayer, turn-by-walker is the main use by far. Let's make the skill always do what it often does.
  • The always-turning walker keeps all obvious multiplayer use cases of the 0.6 walker. For example, even with the 0.6 walker, you couldn't spam walker to cancel a bunch of builders -- you risked clicking on an already-cancelled lix, turning her. Instead, you would cancel a dense bunch of builders spamming basher or miner.
Drawbacks:
  • Can introduce backroutes in puzzles with precisely-trimmed skills. Under walker-always-turns, you get for 1 walker what cost 1 or 2 walkers before. You can't find these backroutes with the replay checker! Even though I deem such backroutes rare, you never know.
  • Breaks tradition with Lemmings 3. That's OK.
  • Introduces a difference to NeoLemmix. Acceptable but not so OK.
Replay breakage: We would have to re-prove about 15 lemforum levels, 6 NepsterLix levels, and 15 Rubix levels. These figures are measured against Lix 0.6 where we have perfect coverage, not against 0.7.6 that isn't fully covered yet.

List of levels that might break. Proxima has already looked over the lemforum levels. His opinion: Most of the unproven levels give plenty of walkers anyway.

I love the state-free walker. It simplifies an awkward if-else. I'd like every skill to do the same thing all the time! We need the walker for multiplayer, it feels good to have the walker there. But (only cancelling, never turning) feels weak, Clones had such a walker and it was boring. (Always turning, never cancelling) seems too strong in singleplayer: You could make a miner zig-zag by walker assignments. Even though (always cancel, always turn) is two things, it seems the least-hurting way out of this design thicket.

-- Simon