# Ecstatica

I have found out this week, that Ecstatica FANT files are actually stacks of FANT files. For example in „estatic.“, there are actually present around 2000 FANT files. The file „offsets.“ includes offsets into the file which are used to access the large file at the correct offset. In „ecstatic.“ the single FANT files often contain only a single sound or a single list of scene events.

So I had to expand my code in order to handle the lists of FANT files and it does now. The XML export- and import seems to work now also for the case of multiple FANT „objects“ within one file.

I never had tested my XML export/import code with sounds yet. A problem arised: Originally I inteded to include the binary wave data for each sound in a CDATA section within the XML file. But it turned out that this is not possible, because XML forbids certain characters even within CDATA sections. So what I do now is I export the wave data into separate binary data files and include a reference into the XML data. That way I was now able to completely read in „ecstatic.“, export it to XML, reimport it from XML and export it to FANT file format again. The resulting FANT file (correctly: stack of FANT files) is binary equivalent to the original „ecstatic.“ file.

# Procedural Graphics

Today I was travelling across a number of sites about procedural terrain generation and procedural graphics in general.

# Other Stuff

I stumbled across this amazing flash animation visualizing on what different scales things in our universe exist. Take a look at the main site also, because there’s a lot of other original flash stuff avaible.

# Quick Modulo for 2^n

For the case that you’re interested in

mod = a % b

with $b = 2^n, n \in \mathbb{N}$ and $a \ge 0$ there’s a simple method

mod = a & (b-1);

For negative a it gets more complicated

mod = (a & (b-1)) | ~(b-1);

# Remaking Ecstatica

This morning, while I woke up, I glanced at one of the CD-ROMS in my shelf. It was ECSTATICA, published some year in the 90s in the neon edition. There’s a nice article about the game and it’s successor on the brilliant hardcore gaming site.

3 year ago I spent some months working on a Little Big Adventure 1 Remake, using yazor’s C code, which he afaik derived directly from disassembling the LBA binary. Btw. there is still the great Little Big Adventure Community Magicball Network, I was active at back then. Well, this morning I felt the urge to make another try to create an open-source remake of a game. For example, there’s an open source remake of Alone in the Dark by yazor (yah, it’s the genius again :)) you can use to play the games if you provide the original game data. I want to do exactly the same for ECSTATICA.

So this is the first article in a hopefully long series of articles covering my attempt to recreate ECSTATICA.

# Graphical Raytracing using CarMetal

In optics, the law of refraction by Snellius is widely known.

$n_1 \cdot sin(\alpha_1) = n_2 \cdot sin(\alpha_2)$

The calculation of  $sin(\alpha_2)$ can actually be done using geometry exclusively.

mere geometric calculation of the refraction of a ray

I have created this nice image using CarMetal, a geometry program. You can download the CarMetal-file brechung_regulaerundtotal.zir and play around with the angles yourself. While you change $\alpha_1$, f0r example, CarMetal maintains the introduced relationships like „… being parallel to …“ or „… goes through the intersection of … and … „. The green ray shows near total reflection which appears as soon as there’s no intersection of the vertical line with the inner circle.

# bash functional programming

Yes, I like using constructs like echo $(getlastentryfromlist(list, "bash sucks")) even in a bloody shell script. It’s important to remember, that$() opens a subshell, so bash actually enforces a strict functional programming paradigma, because you cannot (at least not straight-forwardly) cause any side effects within the function.

# Anki

Some time ago i stumbled across this nice little Python software Anki, which is kind of a digital flash-card board. You can either write your own cards (front and back) or choose from one of the online avaible sets. Myself, I’m at the moment trying to expand my English word pool using „Advanced English Vocabulary – 2000 Sentences“. But Anki is not just showing you the cards but keeping track of your success – that’s why you have to answer, after every card, if this question was hard, medium or easy for you or whether you simply failed. Depending on your answer, the card is put back into the stack of cards for you to learn. The more difficult you deemed the task, the earlier a card reappears. The algorithm doing that is obviously based on established efficient learning strategies. Also Anki introduced new cards into every learning session you pass.

The cards can be freely designed using text, html and even LaTeX. Also there a bunch of plug-ins. For example, you can record speech in order to help learning a foreign language. Apart from all that, Anki is really a nice example of what you can do using Python. 🙂