Shrinker Title
(*2010-04-02 / gen 2012-02-01)
\
The Last Straw
\
2009-06-09
\
Today I ingested my last Isotretinoin capsule. At the end of this acne treatment, I feel like almost dead in some aspects. I haven't eaten properly (= without pain) for more than five months now, just to give an example. Also, can you imagine how sad it is when you feel pain, and making a sad face actually makes the pain even worse (not mentally, but physically)? Gah, health-wise, these have been the worst six months of my entire life.
\
Saints Row 2 Attack Chopper
\
2009-06-03
\
So, how do you obtain the attack helicopter, the Tornado? It's been discussed in so many forums... people have learned to jump on SWAT helicopters from above in order to capture them in the air, others are trying to exploit bugs in the missions... but there is actually a fairly easy way to do it... Go to the Stilwater Police Department, where there's also the wiretapping mission and stuff, and just go into the wiretapping room, and stay there for a few seconds. Then, go to the helipad, and back to that room, wait for a few secs, and back to the helipad, until finally a Tornado appears. It took me only 2-3 visits to the Helipad, so the chance for that proximity vehicle spawn point to trigger seems to be relatively high, and the wiretapping room seems to have just the right distance from it. You don't even need to have any police stars for that to work. I have also noticed with my brother, in Coop, that if one player picked up the Tornado (and is awarded 5 police stars for it), that one player can flee upwards while the other one gets himself killed a couple times -- this way the stars vanish, and the helicopter can safely be landed on a player-owned helipad without any fighting.
\
Microbrush 2
\
2009-05-27
\
... let's add something to the previous list:
\
Microbrush 2
\
2009-05-16
\
... will have these features at least:
\
ATI Display Driver
\
2009-05-15
\
Sooo, after discovering memory leak behavior I decided that it's time to update the driver for my ATI Mobility Radeon card in my Acer laptop. The most recent Catalyst installer, carrying the driver version 8.600, told me that my 8.362 driver is alright and up to date. Of course it was lying. After uninstalling the old driver, it didn't present me with a new driver to install, but luckily that could be fixed with the Mobility Modder!

Update 1: Well, installing a new driver didn't work nevertheless. Setup worked, driver wasn't used by Windows. On the Acer support pages, I am presented with an even older driver than I have gotten from there ealier, it all just makes no sense. Seemingly I am left helpless with this X1600 mobility card now, as I can't update it with a generic driver even.

Update 2: With nothing to lose, I installed what Windows Update had to offer, and poof, here comes a version 8.531 of the driver, specially for my card! Omg, Microsoft did a better job than AMD and Acer together! :-D The ATI support hub on AMD.com seems to be broken, it takes ages to load, regardless of the browser. And OH MY GOD, 3D stuff now runs notably more smooth on my laptop, smoother than ever before, only thanks to this driver :D:D Actually, seemingly the driver I now have is not from ATI alone, but also from Microsoft (WDDM stuff) o_O. It does feel a little bad that the best driver existing for my notebook is only available through Windows Update, and I don't have an offline backup version, but well, maybe things get better in future (maybe I get a new laptop sometime).

Update 3: All OpenGL-related (glFinish, glDeleteBuffers) memory leaks are gone since the install of this driver through Windows Update. Mission accomplished.
\
LSL
\
2009-05-12
\
Hmmm, so how do we set or get an item from an array (list) in LSL?
C-like languages:
v = arr[i];
arr[i] = v;

LSL:
arr = llListReplaceList(arr, [v], i, i);
officially better: arr = llListReplaceList((arr = []) + arr, [v], i, i);
v = llList2Integer(arr, i);

I really wonder...
\
A Forward Move
\
2009-05-10
\
After ongoing troubles at home with my mother because of the mutual inability of my parents to talk to each other, I have re-established contact with my father, and was happy to see that he has changed to the better in the time we had no contact. If all goes as planned, I'll move to an own apartment this year. This will be a difficult situation for me, considering the constantly high university workload, and for my mother, who maybe has no other option but to move out too, but on the long term this will be much better than the current situation continued.
\
Tricks And Traps
\
2009-05-06
\
Sooo, I observed the odd effect that in a for loop with crystal clear semantics, the second argument of a min function was evaluated one time too often. ... Long story short: windows.h defines two macros, min and max, with the ?: operator (and redundant evaluation), that supersede the template min and max functions from the C++ standard library if you use it, but that behavior can be turned off via "#define NOMINMAX". That was very annoying, unnecessary, unconventional, not expected, and can cause unintended side-effects and slowdowns.

Have you ever faced the problem that you have classes with a lot of get methods, some of them lightweight, some of them with a lot of computation backing them, and then losing overview which values you need to buffer? A friend got a nice idea to solve that problem today: instead of naming a function getStuff() and hiding all the complex things it does, name it computeStuff(), so the end-user programmer knows that calling this is more expensive than calling a lightweight getter :D
\
Brutal!
\
2009-05-03
\
Last night they showed Demolition Man and Wind Talkers on public TV, all uncut.
Life is good.
\
A Little Modeling
\
2009-04-30
\
The office building took me one full evening to make, phew.
[Image]
[Image]
[Image]
[Image]
[Image]
[Image]
[Image]
[Image]
[Image]
[Image]






























\
Our Arch Enemy
\
2009-04-28
\
Oh man, this is already the third news article today!

I just wanted to announce that the S.V.O. Committee (which I am the key representative of) has observed a group of terrorists forming a new group against us, the Krieg Technological Research And Development Advancement Group (KTRADAG).
We'll be keeping you up to date about their efforts to undermine our organization and the society as a whole.
By all means necessary, we hereby already declare war on them.
\
A Complex Joke?
\
2009-04-28
\
In the morning, I had a Python question. Because I was too lazy to log in, I asked my friend Paul to poke Thomas online. Thomas wasn't online and only read the message later. In the evening, I sat waiting for the next lecture with Paul, and Thomas was still at home. He came online and asked me what Paul wanted.

I pretended that Paul had a problem with his dual-boot system, which he countered by telling Thomas that I had a problem with my freshly installed Ubuntu. Well, I never used Ubuntu, so I googled for error messages and started a console window with a custom title. (see start /?, color /? and prompt /?). He asked for some cat system diagnostic output, so I googled for some and we figured that there was a problem with my (not really existing) floppy drive, and that my hard drive stopped existing. Then he said good bye, signed off and headed for us, to join us in the lecture shortly after.

He told me he'd take a look at it personally, and I told him before that I downloaded an odd addon that might have caused the problem. So we had to come up with a website, and we had to do it fast.
http://www.frakrate.com/
\
JavaCC Pitfalls
\
2009-04-28
\
\
What The Frak?
\
2009-04-24
\
Editing shipment addresses for PayPal transactions is a pain in the ass. Why? Who designed that shit?
\
Axon
\
2009-04-23
\
Did you know that an Axon, the electronic signal-emitting part of a nerve cell (like those found in your brain), can be up to three feet in length? OMG I say :D University really is keeping me busy now: I stopped playing games and started studying and doing homework during lectures.

Oh hey, yesterday, an abandoned two-story hotel/restaurant in our town burned down and collapsed. Since it was the only abandoned building left to see for people passing through the town, it just looks like a necessary and dirty deconstruction to me. Let's see what they'll build there next.

Have you ever sat there with a text editor, search/replace dialog open, regular expressions active, trying to prove hypotheses about a set of textual data that is 100MB in size? You know, sometimes it really pays off to write a small C# or Java program to do the job for you. I mean time-wise, and since time is money, you should really think twice before hitting that "replace all" button.

Seemingly there is a Left 4 Dead expansion that was patched into everyone's retail version. If only I had the time to play it at the moment. The lighthouse in the new intro video looked nice though!
\
Imperator Update
\
2009-04-15
\
There was quite some stuff on my TODO list for this project, and soon I might need a fresh parser implemented in C++ again... so I have cleaned up a bit!
You can find the newest version of my parser generator, Imperator, here.
This is the list of changes in the 2009-04-14 release:
\
The Clusters
\
2009-04-13
\
Here is a view on the aforementioned cluster structure in action. All boxes are brushes, making them special. The black frames denote inner clusters, the dark red outlines represent the boundaries of leaf clusters. Each leaf cluster has a displayed model associated, where the child brushes are rendered into.
[Image]
[Image]
[Image]
[Image]






















\
Saints Row 2
\
2009-04-13
\
My brother borrowed some games to try out in cooperative mode, and Saints Row 2 has proven to be a big positive surprise to both of us. It's like GTA, but it's much less hassle to get around in the world, the shooting simply is better (hey, you can aim properly :D), and the story is quite nice too! In one side-mission, we were to protect a VIP from fans that turn crazy, and we did so by grabbing them and throwing them into predefined areas... ... where, depending on the stage, they were shot by military vehicles, squashed by bulldozers, or soaked into a helicopter rotor. Those pesky fans! This is definitely the best GTA-style game I have seen so far. It's really worth a look, so go check it out! :D

Oh yeah, seems like the version of JavaCC I have been using didn't quite count line ends in comments, causing bad offsets in syntax error messages, nor did JJTree guarantee that line numbes from the .jjt file remained consistent... Tsk tsk, this was one of the most obvious problems I tackled properly in Imperator. In fact, Imperator's parsers are so accurate in error position reporting that I was first irritated... because I was so used to bad error report positioning from JavaCC.

Right now I'm investing some time in hierarchial clustering of the 3D space... to put a lot of brushes into it. Adding and picking work with practically no computation time, which is especially useful for editing. But now that the system is so specialized on adding stuff, removing stuff has proven to be a hard riddle to solve, but I'm on it! Oh yeah, regarding "paint-select" in brush-based editors: It works fine with this structure I have now, but I figured paint-selecting brush faces poses a problem on its own... If you just stroke along different brushes, you are in danger of selecting faces that are not visible, but participate in an edge you stroke along. What's the solution? Simply sample with more than just one point of selection around the mouse cursor, e.g. have 4 points representing a little square around the cursor. When you now stroke along your brushes, only those faces get selected that are hit by all points at once, so there are no more accidental selections. I hope this will prove useful in rough texturing of Microbrush 2 architecture.
\
Final Destination 3
\
2009-04-12
\
Or Crank. Or Die Hard. It is absolutely pointless to watch any such movie on German TV, for they censor out as much violence as they can.
\
The Next Generation
\
2009-04-01
\
Accuracy 2 was nice while it lasted, but development is already stagnating, I just lost interest in it with potentially better technology at hand.
Microbrush started as a small dirty experiment to writing a brush manipulator, and it was successful beyond all my expectations.
It even inspired a friend to start working on a game again, but many reviewers complained about the total lack of a GUI. Seemingly this isn't a tool for the masses as it is, and needs to be redone completely. For instance, there is absolutely no optimization in regards to hiding brushes out of the view, or only redrawing a part of them, and hence selecting brushes slows down quickly (after 1k brushes).

Bork3D, the 3D engine that powered my projects for years, grew old and rusty just like an old Battlestar. I have learned since the inception that scene graphs are better, and that many other details I did could have been done better too. The time for refactoring by redesign has begun, the lifespan of that old engine is over, and so there shall be a whole new generation of projects, and an awesome-ized version of Microbrush, Microbrush 2.

And happy first of April, whoever reads this.
\
Vacation
\
2009-03-16
\
I will be away from 2009-03-20 to 2009-03-31. See you.
\
Microbrush update
\
2009-02-21
\
An updated version of Microbrush is available.
This one brings you better (and less tiring) visuals and a crash fix for an issue related to degenerated brushes that disappeared from facedrag, making it an overall safer experience.
Here is some architecture in the making:
[Image]
[Image]













\
Multiline comments
\
2009-02-21
\
I've recently had the problem of Imperator not interpreting multiline comments with forward shlashes in them right. I tried various regular expressions to describe how they are built, but that naive approach failed. So I took a pen and paper (!) and drew a deterministic automaton, and with some trial and error and actually an hour of sleep too, I've derived this regular expression from it:
"/*" (~['*'])* ('*')+ (~['*', '/'] (~['*'])* ('*')+)* '/'
I wrote that into the grammar of Imperator itself, and it performed good enough (as in: I couldn't find any problem cases anymore). That expression can be described as "the multiline comment starts with '/*', ends with '*/', and there may be no '*/' anywhere between the start end the end".
\
Careful!
\
2009-02-17
\
I encountered a rather interesting problem today with a foreign project. JavaCC is a parser generator for Java which can take a JJT grammar as input which is annotated with some hints that have influence on how the parse tree is generated from it. From the JJT file, JavaCC generates a JJ file, which contains the matching logic and the logic to construct the tree. One can supply only a JJ file too, at the expense of losing the tree output functionality. Anyway, there was a project with a JavaCC grammar which I needed to update, and regenerate a parser for with JavaCC. I prepared everything according to standard ways of the environment the project is part of and then stumbled over a weird error: JavaCC refused to compile the JJ file!

Why oh why, I wondered. JavaCC reported an invalid Unicode character inside. I checked the JJT source, but there was nothing that could cause problems. When I looked into the JJ file, however, I was shocked. JavaCC (invoked from Maven, at least) adds the path of the generated file in the very first line of the generated code, as a platform-dependent string. Just take a little bit of Windows here, and have a package name containing ".utils" there which you must not change, and you have a nice recipe for problems! \uXXXX is the Java way of escaping Unicode characters, and such an escape sequence must be correct both in normal source code and in comments (you could write a whole file like that, it's some kind of pre-processing step).

\util was of course not a correct Unicode character. When I fixed the bug by hand and compiled the thing with JavaCC, to get my Java classes, it appeared that in some of them, their own path is also dumped into a comment! I couldn't automate those replacements by hand very well, so I had to document them instead, for now. That's 1. JJT -> JJ, 2. editing JJ by hand, 3. JJ -> .java files, 4. editing two of those output files by hand. And a problem is that even if I renamed the parser's package to something without a U, then the whole Eclipse workspace could be located in a directory that starts with a U... The JavaCC team should really fix this seemingly unimportant issue, by replacing the platform-dependent path with a URI. Or maybe they have already? - I couldn't find information on such a bug reported in their ticket system. The project I edited uses JavaCC 4.0. Or is it that the majority of JavaCC users works on a Linux platform? :-D

In other news, it is now mandatory in my local version of Imperator that an inline rule (one which doesn't generate an output node on its own) must be preceded with a hash symbol (#) wherever it is used. Previously, the # would only be found at the definition of the rule, but it figures that when working with the output of a grammar, with the actual output node structure, it is much better if you see this definite warning sign within a rule, and wouldn't have to look up every used rule for whether it is inlined.
\
Updated Maps And New Maps
\
2009-02-15
\
Check out our all-new Half-Life 2 Deathmatch maps page here! :-D
"Meet a Zombie", "Miqrobrush" and "Snow Mountain" we released just today.
Big thanks to Mevious/SG2/seriousgamer200/Ben for putting so much efforts into mapping this!

Have fun playing!

[Image]
[Image]
[Image]
[Image]
[Image]
[Image]
[Image]
[Image]
[Image]
[Image]
[Image]
[Image]
[Image]
[Image]
[Image]
[Image]





































\
Microbrush
\
2009-02-13
\
An updated version of Microbrush is available.
This one contains a few more models, like the school displayed, and other chunks which we want to use in a Left 4 Dead campaign. The only notable change to the program itself is the following: Sometimes, when accidently changing grid size, the cursor behaved in an unexpected way, and was annoying when dragging faces. Now the grid size can only be changed when you are not just in the middle of an operation, and when it changes, the cursor is positioned under or near your mouse cursor properly, as if you moved the mouse (previously it was set back to the grid origin).
\
Modeling
\
2009-02-11
\
This time it's a school.
[Image]


























\
Stuff
\
2009-02-09
\
A little modeling:
[Image]
[Image]














My physical condition got worse because of the medicine, 110 days left. I should really upload new HL2DM map versions. Sorry Mevious/SG2/seriousgamer200/Ben, I am so lazy.
\
Imperator Bugfix
\
2009-01-29
\
A fixed version of Imperator is available.
There was a mistake in generated C# code where a sequence in a regular expression wouldn't preserve the index in the source string as intended, corrupting the following matches. So, well, nothing spectacular.
\
Nothing Good
\
2009-01-26
\
When I walked to my car in the morning, my father stood nearby in our front yard, greeting me good morning. I didn't respond because he only does this if (a) he wants something or (b) he wants to be victimized in a way. I got into my car, he came there quickly and opened my door, and held it open. I repeated "leave me alone" and he started putting words in my mouth again. And I resisted. Leave me alone, leave me alone. When I returned home today, he parked the rolling trashcan in my carport again, blocking it from proper use again. Apparently I was right to tell him to leave me alone, again! :-)
This person apparently doesn't want anything good for the family anymore, we must concentrate on not playing anything into his hands.
\
Imperator Parser Generator - First Release
\
2009-01-26
\
Here it is.
The first release of Imperator Parser Generator offers a very straightforward way for generating LL(*) context free grammar parsers for C#. You just write your grammar, start the program with it, and voila, your parser is done. There is not much checking on the rule topology yet, so you better know what you are doing. Grammars for Imperator itself (which defines its own grammar), for VMF files and for the face descriptions in VMF files are included.
More to follow.
\
Language Constructs Of The Future
\
2009-01-25
\
I think that modern computer languages should allow for working with tuples much better. The following constructs should be quite doable in (addable to) modern languages of the C family already:
(int, int) myPair = (x, y);
int (a, b) = myPair;
myPair = (y, x); //alters contents of mypair
(x, y) = (y, x); //alters contents of variables
(int, int) add_mul(int x, int y) {return (x+y, x*y);}
And for something more complicated, how about function concatenation based on input and output?
(int, int) foo(int x) {...}
float blah(int x, int y) {...}
void test() {float f = foo(2).blah;} //the output of foo is the input of blah
\
Microbrush Update
\
2009-01-21
\
There is a new version of Microbrush available.
Since a friend at the university kept using it with keyboard only, I had to remove the dependency for computer mice: the grid can now be pulled and pushed with the keyboard too. Sometime later, I plan to make the whole configuration ... well, configurable, and not hard-coded anymore. It now saves faster in its native format because that process is now buffered. The most notable change is that if you like using the cut tool to shape your brushes, it is now much less probable that you end up with faces which are only displayed half. Microbrush now recognizes such faces and removes them. When I imported geometry from Hammer I noticed that Hammer probably doesn't do the same, so occasionally a few imported brushes disappear. I exported from MB to Hammer and back, and that seems to work well.
\
VMF: Converted.
\
2009-01-21
\
VMFToMicrobrush is ready for use. It converts Valve's VMF files (Source Engine map source files) to the Microbrush binary format, so already existing architecture can finally be used with Microbrush.
You can find it here.
\
VMF: Parsed.
\
2009-01-20
\
I managed to regenerate the parser of the parser generator, the parser which parses the input grammars, with the parser generator itself, finally. And a VMF grammar is complete too already, and very soon I should have a VMF to Microbrush converter done. And lips are bleeding much again :/
\
I Should Be Sleeping
\
2009-01-20
\
My nose is bleeding less frequent now, and I can actually feel the original shape of my lips again -- my body is getting used to the Isotretinoin! :-D

Also, I figured today when working with JavaCC that it does not support syntactic lookahead within a lookahead, but my parser generator does :-D
Yes, development on it is progressing well :-)
If you wonder about the smileys, I am not drunk or something :-S -- just very tired :-E
z_z
\
Mysterious Night
\
2009-01-18
\
While watching TV, the visible outside suddenly got my attention. Behind the silhouette of an old gymansium which I can see through my window, there was bright blue light flashing, like in a thunderstorm, but without the lightning lines. And there was no sound from that either. That came a few minutes later, and I clearly heard it: A distand explosion. That was when I called the police for the first time in my life, and apparently I wasn't the first one to report that phenomenon: They said that they were still trying to figure out what happened. It seems like firefighters were dispatched for a village just at the other side of Rostock, but there was nothing there. Our coal power plant is in the very direction I saw the light flashes coming from, but after hearing reports from people in a distant village, and even people from Hamburg seeing it too, this news report from a Swedish site makes more sense: It was a small meteor impact!!
\
Farewell, POV-Ray
\
2009-01-16
\
For our Computer Graphics base lecture at the university, we are given two optional tasks: programming an OpenGL animation and making a POV-Ray scene. I decided for the POV-Ray scene because I wanted to check out how that language looks like and feels like when working with it. For each ot those two optional tasks done, the student may talk about those specifically in the exam for five minutes. In the last lecture, I checked with my professor (Ms. Schumann) whether my scene is already full enough of CSG modeling for being taken into account, and it was.

I just finished the last few things (adding a reflective thing, removing commented out sections, etc.) and will shortly submit my scene. After working so much with POV-Ray, I must say now that this language is dirty beyond imagination. It lacks a proper structure, is too forgiving when making mistakes (like omitting a comma here and there) and very inconsistent when it comes to "here you need this, there you can't use it". Also, I'd have specified a few things differently, e.g. the default coordinate system, or the way planes are specified (why the heck don't they input n and d from p0*n = d, but instead n and d*norm(n)?!). Or how about name scopes and such stuff? There seems to be only a global namespace which you can easily pollute. :(

Anyway, here's my crappy scene, assembled with lots of macros (think of them as POV-Ray geometry functions) and a lot of swearing. All measurements are parametrized, so are all textures. (At the beginning I thought I'd find the motivation to texturize and light it all properly! Lol!)
[Image]
[Image]

















Regarding the second picture... we had another OpenSceneGraph exercise today in another CG-related lecture. Because OSG turned out to be a bitch to work with in our environment (for instance, it'd always eat 100% of one CPU core, and the documentation is full of errors and things forgotten), I decided to mess around with shaders (our task) in my own program (not our task, but it was approved). A funny thing I tried was using a black and white checkerboard pattern on everything. And when a brush was selected, the checkerboard would invert. What is the opposite of eye candy? Well, that was it! The pic there shows a little combination of trigonomety on the texture coordinate information (which is just based on vertex positions), and those separating lines you see everywhere are there because at every xth distance from the camera, I inverted the pattern.

Parser generator work is progressing slowly, but that is only becaue of university tasks. My confidence in it is still high.
\
Torture
\
2009-01-13
\
I've always had acne, always visible and occasionally very bad. Especially my back was full of dark blue and black spots that'd cause pain and not go away. I've grown up with the jokes about it as a child, and ran around in circles as an adult pinpointing the reason. Coult it be allergies, or habits, or the milieu? No matter what I tried, the disease progressed completely at random.

A few weeks ago, though, it suddenly got a little worse than ever before, with a new painful and unremovable spot appearing every day, bad enough for me to consider seeing a doctor about it. And I did, and she was all "OMG, worst kind, here, take the strongest medicine!"

So for a few weeks already, I am on Isotretinoin. It basically works by making the skin completely dry so the acne bacteria in the pores lose their fuel of life and vanish. Unfortunately, there are some side effects that come with it which currently make my life a lot less enjoyable. Right after the first time I took my pills, I lost the ability to distinguish the silhouettes of the trees against the nightly sky -- night blindess. That was all for like two weeks, after which the medicine started taking the intended effect. Not only did my skin dry out, my lips also broke and remain broken despite all countermeasures. I admit, it was interesting at first to see skin peeling off from the lips, but apparently a limit was reached soon. They tore open in the middle and started bleeding.

Right now, I can't even blow a dust flake off my glasses without causing great pain to myself. I'm also having a hard time eating, since everything that requires these dry lips to deform simply hurts. When I dry my face with a towel, the lips always leave a blood stain now. At some point, I started having what I call "surprise nosebleed". Surprise nosebleed means that you sneeze and figure a few minutes later that your shirt is full of little blood spots. And last, but not least, maybe because of my completely dried out mucosa in the nose, I am having a hard time sleeping through the night. I wake up and am confronted with the feeling of suffocation, after a long period of coughing. For some reason, getting out of bed and doing things (like writing this) stops it. I hope I have soon passed the point where no new side effects begin and the old side effects don't get worse. A few days ago, the backs of my hands became dry and skin started to peel off from those too, and my left hand got some interesting red spots on it, but I can do something about it with a cream.
\
The Process
\
2009-01-10
\
Work on the parser generator is going on well.
I finally received an updated batch of levels from Mevious (formerly known as SG), am going to put them up soon.
My local version of Microbrush already got slight improvements, most notably detection and removal of undisplayed faces which used to cause rendering flaws.
For an OpenGL assignment of a friend at the university, I built this (in one long university lecture):
[Image]


























\
Match!
\
2009-01-06
\
Soo... my parser generator's parser just matched its own grammar's grammar!
Now there are no more obstacles in the way for me for really implementing a parser generator :-D

I must say, the most interesting problems so far arose around looking ahead when matching rules. For regular expressions for the tokens, I'm using back tracking, because it's merely saving and restoring an index into the source string. Each token is only matched once, fetched tokens for looking ahead are kept on a stack for later retrieval. After I realized that within a custom lookahead, I still have to look ahead at choice points, I managed to stackifize that stuff too. I pursuited a few dead ends on the go, but finally reached a clean set of transformation rules which I can put to use in the generation process soon. Let's see how this turns out!