
The Polygons of Another World - ibobev
http://fabiensanglard.net/another_world_polygons/index.html
======
quincunx
Love this, love the write up.. but on the amiga...

the A500 had 6 bitplanes, not 5, also, with PAL being the most popular region,
I'd say 320x256 was the more popular resolution over 320x200. 6 bitplanes are
used for Hold and Modify (HAM mode, where 2 bits select Red, Green, Blue or
Palette, and the remaining 4 bits indicate either R G or B values, or the
index of the color.) The other 6 bitplane mode is "Halfbrite" which doubles
the palette size for a total of 64 colors, where the second half 32 colors are
half the intensity of the first half. When running with 6 bitplanes, agnus
(the memory controller if you will) steals a lot of cycles for Denise (the
display chip) from both the 68K and the blitter. The blitter being crucial for
drawing filled polygons.

The second thing that made the Amiga revolutionary (and one could argue, for
this reason, that the PCI architecture of Hombre/AAA is not a true Amiga no
matter Commodore's demise) - the second thing is the way that Agnus
orchestrates memory access much like the microcode inside a CPU orchestrates
registers and ALUs. In particular, Agnus controls the memory address lines and
chip-register-address lines; the chip-register-address and the memory address
lines are opened up simultaneously against eachother with one reading and the
other writing. So, for instance, when reading bitplans, agnus opens the chip
bus using one of the register addresses 0x110-0x11A for BPL1DAT to BPL6DAT
depending on which of the 6 bitplanes is being read; while at the same time
driving the appropriate memory address by putting the contents of agnus
registers 0x0E0-0x0F6 for BPL1PTL/H to BPL6PTL/H on the address bus of the
"chip memory" DRAMs. The datalines of the DRAM and the special chips (Denise
here) directly open on eachother (eg. DRAM and Paula chip-selected at the same
time.)

I'm not sure if I did it justice and got the elegance of this architecture
across in this short post. I'm sure many enthusiasts like me who got their
start on the Amiga programming 68K continue to discover new things about this
machine.

Good times, warm memories.

~~~
fabiensanglard
Thanks for the correction. I will update the drawings asap.

Since you seem to know the machine well, maybe you can shed some light on
something i was unable to clarify: What is the fastest way to clear a
framebuffer to a desired color on an Amiga. My hypethesis is that it was done
with the Blitter, by disabling all DMA entries "doing something else". Do you
have any idea?

~~~
quincunx
To set the framebuffer to a single color, consider that there are actually up
to 6 "framebuffers" (one for each bitplane.) Consequently, it is to either set
all bits for a given bitplane to 1 or to set them all to 0. To control the
actual word that is blitted without DMA, you would use BLTADAT, BLTBDAT or
BLTCDAT registers to control the corresponding blitter input word with DMA
disabled (so the blitter does not write into these registers itself.)

A common technique to avoid having to blit each bitplane independently (esp.
for BOB sprites where the blits are small and plentiful) is to interleave the
bitplanes by row using the BPL1MOD and BPL2MOD register values; these values
are added to each bitplane pointer address at the end of each row to move the
pointer to the start of the next row; consequently a single blit operation can
capture all bitplanes as in memory a row can consist of all row bits belonging
to bitplane 0, all row bits belonging to bitplane 1, all row bits belonging to
bitplane 2 and so on.

If this is the bitplane layout used then a single blit can only set the values
to 0 or 15 (all 0's or all 1's for 4 bitplanes enabled); note however that the
blitter too has modulo registers (BLTA/B/CMOD for each input and BLTDMOD for
the destination) so perhaps best examine how fancy the programmer got with it
(eg. multiple blits to clear the screen to a specific color even if the
bitplanes are interleaved using BLTDMOD.)

Obviously I'm a bit rusty given it's been a few years, but I hope this helps.
I'm a fan of your work, thank you.

~~~
fabiensanglard
I had no idea about the BPL1MOD and BPL2MOD. Now that i know they exist I
don't see why a game developer would not use them.

I will try to double check with Eric Chahi but this is so much more efficient
that it has to be the way he drew polygons (instead of drawing into a scrap
buffer and blitting four times, he used BPL*MOD to draw and blit only once).

~~~
Flow
Unless I'm wrong, a drawback of using interleaved bitplanes to do fewer but
larger blits is that the mask for the sprite shape gets bigger too.

If you do several blits, one per bitplane, you get to use the same mask data,
but when using interleaved data the mask needs the same shape data * number of
bitplanes involved.

It's still a pretty small price to pay compared to Atari ST/ZX Spectrum
preshifted bitmaps.

~~~
fabiensanglard
Does that mean you cannot use the Blitter to draw lines and fill area as
described in the article?

~~~
quincunx
You'd use a single multi-bitplane interleaved fill-blit if the background
surrounding it did not need to be preserved (eg. no mask requirements as per
Flow - demos tend to do this for its speed).

I'd imagine Another World creates an off-screen single-bit deep bitmap and
uses that as a mask. I sent you an email if you'd like to explore more,
however the original programmer probably just remembers what he actually did.

Also note that non-overlapping polygons can be grouped together in both
approaches by line-blitting with XOR destination (adjacent polygons share an
edge and so the edge is XOR blitted twice); so there are substantial speed-ups
to be had.

------
rasz
Traditionally some corrections for the author:

>The Amiga 1000 could not boot by themselves, they had no ROM. The bootloader
was on a floppy and you better not lose or damage it!

Amiga 1000 has bootloader (Kickstart loader) in ROM, chips U5N and U5P - two
256Kbit EPROMs/mask ROMs, 64KB in total. What it didnt have was
firmware(Kickstart, like PC bios) or system(Workbench, like PC DOS/Windows) in
ROM. You can see chips containing A1000 bootloader on the motherboard picture,
its the two with stickers, right below two 8250 CIA chips
[https://www.bigbookofamigahardware.com/bboah/media/download_...](https://www.bigbookofamigahardware.com/bboah/media/download_photos/a1000mbrev6.jpg)

You __cant __boot(load) without a bootloader. Trivia: Back in the day Bill
Gates held a record of writing the shortest bootloader for Altair 8800,
computer with nothing but LEDs for output and switches for input. You had to
input said bootloader every single time you wanted to load something (like
BASIC) from tape. 'Computer Notes Volume 1, Issue 6, 1975' Page Twenty-One,
Author Bill Gates: “I’ve written a bootloader that only takes 13 bytes of
keyed-in data, but anything smaller than 20 bytes isn’t easy to use.”. He was
finally beat by one byte in 2017 [http://just8bits.blogspot.com/2017/03/doing-
it-in-less-than-...](http://just8bits.blogspot.com/2017/03/doing-it-in-less-
than-bill-gates.html)

>It was Commodore best selling product with an estimated 6 millions units
shipped from 1987 to 1991

other than you know, C64 ;-) and thats not counting other products like
Datasette Commodore 1530, shipped with every VIC-20 and C64.

>amiga_arch.svg

Chip RAM is not directly connected to CPU, its gated behind AGNUS
[https://www.pmsoft.nl/amiga/A500-block-
diagram.jpg](https://www.pmsoft.nl/amiga/A500-block-diagram.jpg) DBR signal is
what switches CPU data bus access.

~~~
the_af
Since you seem knowledgeable, and this seems surprisingly hard to google, do
you know why it was named "Amiga"? I know the codename was "Lorraine" and,
because I'm a native Spanish speaker, I know "amiga" means "female friend",
but why was this name chosen? Did they simply pick a random name, and if so,
why Spanish?

~~~
coldtea
The team that designed (which Commodore later bought) was called Amiga
Corporation.

They were initially called Toro, but there was another company with that name.

As for the choice - they just wanted a nice friendly name, and Amiga was that,
being simultaneously a nice sounding foreign word (for the English speakers)
by with the known friendly Spanish connotation to many.

------
AndrewStephens
Another World was _astounding_ when it came out. Although the Amiga was
considered a high spec machine at the time, its graphics hardware was oriented
around scrolling, sprites, and rectangular blits. This is good for the typical
platformers and shoot-em-ups that dominated gaming at the time but useless for
the type of full motion video the AW was attempting.

The Amiga's blitter could write almost 4Mbs per second (if you set things up
juuuust right and you had the wind behind you). On a modern monitor (a modest
1920 * 1080) the Amiga's blitter would take almost 2 seconds just to clear the
screen.

~~~
henrikschroder
I think the coolest part about many games from this time period is how vastly
differently they were developed compared to modern games from modern game
studios.

"...it is the original version built from 1989 to 1991 by then 21 years old
Eric Chahi working alone in his bedroom."

Because he got royalties from an earlier game, and that paid enough for him to
take on this project. And he did pretty much everything except the music:
Programming, graphics, story, box art. One dude. One 21yo dude. In his
bedroom. And he wrote a VM! He wrote his own bytecode! He wrote his own VM
host in assembly!! And then he wrote the game in his own bytecode!!!

And then you have the people who ported games in this time period, who often
got _nothing_ to work with. No code, no comments, no assets. Disassemble the
thing yourself on a platform you might know very little about, and re-write
the thing on a platform you do know a lot about. You get a couple of months.
Chop chop, the publisher is waiting.

And if you haven't read Jordan Mechner's journals of him writing Prince of
Persia from the same era, you should. It's equally bananas. And impressive.

~~~
armitron
Eric Chahi (and Jordan Mechner) undoubtedly have genius-level IQs which is to
say that they stood apart even in that time period.

The more important thing to note is that the brutal constraints of the day and
the extremely high bar to entry acted like a pre-sorting mechanism but also
fueled the best and brightest to exceed their perceived limitations and
unleash their creativity.

Compare and contrast with today, where the low bar to entry has led to a
proliferation of garbage-level work (on all levels, not just games) that tends
to not only drastically decrease SnR but calibrate the "standard". When
everything looks like mediocre garbage, this is what everyone expects.

~~~
sbarre
You take the good with the bad. There may be more "garbage" work as you put
it, but that's because there is more work overall, likely by several orders of
magnitude..

And with that still comes some gems to go along with the garbage, so in the
end, we win.

------
tekstar
If you haven't played this game I strongly recommend it. It's on GOG. It's on
old emulators too but the graphics and input handling can be pretty rough and
unforgiving.

~~~
facorreia
I second this. Another world was a fantastic, innovative game.

Also look for Another World – 20th Anniversary Edition.

~~~
flanbiscuit
Didn't realize they released an updated version. Just found this graphics
comparison[1]. Looks like they mostly just smoothed out the lines.

1\.
[https://www.youtube.com/watch?v=b86QXaOdgX8](https://www.youtube.com/watch?v=b86QXaOdgX8)

~~~
stuart78
What I found funny about watching that is that the 2014 version is exactly how
I remembered the 1991 version. Memory smoothed it all out I suppose.

~~~
exlurker
The magic of CRT :)

------
luismedel
Amazing, as everything in Fabien's site.

I rushed, hoping to find some oldskool tricks and remember my time spent
reading Denthor's VGA Trainer[0].

It seems I'll have to wait some more chapters for that, though. :-)

[0]
[http://textfiles.com/programming/astrainer.txt](http://textfiles.com/programming/astrainer.txt)

------
newnewpdro
Another World's original author Eric Chahi gave a great GDC "Classic Game
Postmortem" talk about creating the game:

[https://www.youtube.com/watch?v=JFaOYYSxSEA](https://www.youtube.com/watch?v=JFaOYYSxSEA)

------
stephc_int13
Using a custom VM was certainly a clever and efficient at the time. LucasArt
used the same trick for a lot of point and click games.

I don't think this idea would scale well for much bigger projects, as
debugging internal scripts can quickly become a bottleneck.

~~~
csande17
Another example of custom VMs from that era is Infocom's Z-machine, used for
text adventure games.

The strategy of using a bytecode VM to ship cross-platform games seems to have
been pretty popular back then, which is a little surprising to me -- I thought
Java came up with that idea first!

~~~
jonny_eh
I guess Java's "innovation" with VMs was requiring the user to download it
separately from the programs it runs.

~~~
pkaye
Its older than that. There was the p-code machine used for Pascal.
[https://en.wikipedia.org/wiki/P-code_machine](https://en.wikipedia.org/wiki/P-code_machine)

~~~
tragomaskhalos
There was also a (brief) period in the early 90's where Microsoft's C++ had an
option to compile to p-code. IIRC this was to reduce executable size.

------
invincing
Now that the Atari ST part of the article is out as well, I'll add some
corrections regarding ST graphics format. The article states that "There are
no bitplanes here like on the Amiga we saw in the previous entry." This is
slightly inaccurate. ST does have bitplanes, but the organization is
interleaved to 16 bit words, unlike on Amiga where the bitplanes are stored as
separate memory regions.

So in 1 bpp hires mode, there's just a single bitplane (and the memory layout
is identical when comparing to Amiga 640x400 interlaced hi-res 1 bpp screen
mode). In 2 bpp medium res (640x200, 4 colors), there are two bitplanes,
alternating bitplanes for every 16-bit word. So 16 bits of bitplane 0 for the
first word, then 16 bits of bitplane 1 for the second word (these together
form the first 16 pixels), and so on. In the 320x200 low res mode there are
four bitplanes interleaved in the same way.

What this means from the programmer's perspective is that you can do similar
bitplane tricks as with Amiga, e.g. modify just one of the bitplanes
independent of the others. For instance effects where car headlights change
the background image colors can be done the same way on both machines: render
to just one bitplane and use the palette to achieve the change in colors.

However, when with Amiga it's trivial to modify bitplane pointers independent
of each other to scroll graphics around, on Atari ST all bitplanes are tied to
the same base pointer (because they are interleaved in the memory). (And to
make things like full-screen scrolling even more difficult, this base pointer
is aligned to 256 bytes, i.e. the low byte of the video memory base address is
always 0 on Atari ST - on STE this is programmable.)

There are some cases where the interleaved bitplane format gives benefits:
while neither of the machines are good for writing texture mappers (or other
effects that require manipulation of single pixels), it's slightly more
efficient on Atari ST because the layout allows some tricks (e.g. using MOVEP
instruction to write 8 pixels to all 4 bitplanes at once from a single 32-bit
register).

From the point of view of a game like Another World, the bitplane arrangement
of Atari ST doesn't really cause additional problems when comparing to the
Amiga. The issue is the lack of blitter (and STE blitter isn't that great
improvement, it doesn't have the line drawing capabilities of Amiga blitter
and has less flexible src/dst mechanism, so no wonder it isn't utilized by the
game).

------
bluedino
The SNES was the platform I played "Out of this World" on.

The interesting thing about it was, it was a polygon game that ran without
using the SuprFX chip.

With the SNES being sprite-based I could never figure that out.

~~~
nsxwolf
I've always wondered, did Nintendo demand that all games have continuously
running soundtracks? I remember playing this game and Prince of Persia on the
SNES and being really put off by these soundtracks someone shoehorned in.

~~~
garaetjjte
Funny trivia about this:

>[...] They also wanted to replace all the music made by Jean-François. I had
yielded for the extra songs, but I wanted to keep the music of the
introduction, as it perfecly matched the atmosphere and the animation timing.
This became a real struggle [...] So I took drastic measures. I thought of
creating an endless fax. A huge fax of a meter long in which I wrote in big
letters "keep the original intro music". I would insert it in the fax, enter
the number, and when the transmission started, I would tape both ends of the
letter together, which would create a circle that went on and on until there
was no paper left in the offices of Interplay, at the other end.

[http://www.anotherworld.fr/anotherworld_uk/another_world.htm](http://www.anotherworld.fr/anotherworld_uk/another_world.htm)

------
Waterluvian
I think hardware limitations were a huge source of creativity in games. If you
want to make an interesting game, tie a proverbial hand behind your back and
see where it forces you to go.

~~~
overcast
Game developers are ALWAYS held back by hardware limitations.

~~~
Waterluvian
I think a lot of the time that just results in framerate or resolution or draw
distance knobs being adjusted.

~~~
overcast
Biggest hardware hold back right now is all of the real time lighting and ray
tracing stuff. Eventually that will be solved, then it will be something else
that hardware hasn't caught up to yet.

------
bbmario
Fabien's blog is a pot of gold. I love this "archeological" approach to
programming. He also makes the articles feel like documentaries. It's just
unique.

~~~
guiambros
Couldn't agree more. His two books are also phenomenal [1]. If anything, worth
getting a copy just to support his amazing work.

[1] [https://www.amazon.com/Fabien-
Sanglard/e/B075Q5W35H](https://www.amazon.com/Fabien-Sanglard/e/B075Q5W35H)

------
tombert
I was one of the few kids who got a 3DO (yes really), and I had a copy of
Another World for it, after already having played it on the Genesis, and I was
a bit underwhelmed, since moving to comparatively more-powerful hardware
didn't make the game look a million times better.

After a bit, though, I realized it wasn't that the 3DO version was
underwhelming, but instead that the Genesis version was _amazing_. It already
felt like a next-gen game, and so the upgrade to the 3DO didn't make a huge
change.

In the end, it has become one of my favorite games. I love the art, the style,
the cutscenes, and even though it's incredibly short, I love the story.

I never played Heart of the Alien, because I never had a Sega CD, but I'd like
to play it at some point on an emulator.

~~~
jacobush
"The 3DO version of Out of This World is quite different from the other
versions in terms of graphics and sound. The polygon backgrounds have been
replaced by hand-drawn versions, the quality of which varies from stunning to
amateurish."

[https://www.mobygames.com/game/out-of-this-
world](https://www.mobygames.com/game/out-of-this-world)

~~~
tombert
Yeah, I realize I didn't make it super clear; there were _some_ enhancements,
but it wasn't this huge thing like I was expecting. I was expecting it to be
like the Genesis vs 3DO versions of Road Rash, where the 3DO version is
_vastly_ superior graphics-wise.

------
yantrams
It's available on Nintendo Switch for those who are interested in trying it
out.

------
meerita
I played this game in the PC, back then. It was one of those games I've
consireded like "top game" for D.O.S. What a nostalgia bump I've got.

~~~
tetris11
I played this for the first time on the Nokia N900 (armv7-a). I thought it
pretty, but unplayable. Had no idea of the porting history until this article.

------
keithnoizu
I was just eyeing the game on my steam library early in the day. Fantastic
title, shame he went on to produce so few follow ups.

~~~
jonny_eh
Eric is clearly a genius, I assume he hit a sophomore slump. He's only made a
couple games since, many years later.

~~~
AdmiralAsshat
Even with just one major game to his name, its legacy lives on. Another World
set the template for the "cinematic videogame" and even today you can see the
influence of its cutscenes and minimalist gameplay on games like Ico/Shadow of
the Colossus and a plethora of modern indie games. It accomplishes with
wordless dialog what Hideo Kojima tries to do with 20 hours of overwrought
monologues.

~~~
jonny_eh
I couldn't agree more. It's one of my all-time favourite games. I replay it
every few years.

------
jeffnappi
Another World was so far ahead of it's time. I have such find memories of
playing it on my brother's Amiga :)

It's also just a lovely piece of art.

~~~
jeffnappi
fond memories ... ¯\\_(ツ)_/¯

------
m3kw9
Awesome read

------
D_Guidi
amazing stuff, give a try also to the video from the snes conversion
programmer

------
artur_makly
who remembers... Bard's Tale??
[https://en.wikipedia.org/wiki/The_Bard%27s_Tale_(1985_video_...](https://en.wikipedia.org/wiki/The_Bard%27s_Tale_\(1985_video_game\))

~~~
tunesmith
If you install the 2004 version of the game on iOS
([https://apps.apple.com/us/app/the-bards-
tale/id480375355](https://apps.apple.com/us/app/the-bards-tale/id480375355)),
the old 1980's versions are also installed as extras. I spent so much time on
these, but never finished III, I remember the combats taking forever almost
like infinite loops.

------
ncmncm
This is truly amazing.

------
skywal_l
Is there a known Javascript VM implementation of this game?

------
renatoakamur
This is amazing.

------
lilSebastian
Third time this has been posted in 17 hours:

[https://news.ycombinator.com/item?id=21931895](https://news.ycombinator.com/item?id=21931895)

~~~
carapace
Tell the mods: hn@ycombinator.com

