[HN Gopher] The Polygons of Another World
       ___________________________________________________________________
        
       The Polygons of Another World
        
       Author : ibobev
       Score  : 372 points
       Date   : 2020-01-02 17:40 UTC (5 hours ago)
        
 (HTM) web link (fabiensanglard.net)
 (TXT) w3m dump (fabiensanglard.net)
        
       | bluedino wrote:
       | 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 wrote:
         | 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 wrote:
           | Funny trivia about this:
           | 
           | >[...] They also wanted to replace all the music made by
           | Jean-Francois. 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
        
         | egypturnash wrote:
         | The article has a link to a video of the author of the SNES
         | port talking about it.
         | https://www.youtube.com/watch?v=tiq0OL8rzso
        
       | AndrewStephens wrote:
       | 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.
        
         | the_af wrote:
         | It was astounding back then and in my mind still is a work of
         | art. Like Fabien says, its limited palette actually worked in
         | its favor. The evocative graphics still remain some of my
         | favorites, ever.
         | 
         | It's one of my most replayed games ever. Even when I know the
         | plot and there are no surprises, this game manages every time
         | to take me to... (cue music) ANOTHER WORLD.
        
       | meerita wrote:
       | 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 wrote:
         | 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.
        
       | yantrams wrote:
       | It's available on Nintendo Switch for those who are interested in
       | trying it out.
        
       | rasz wrote:
       | 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_...
       | 
       | 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-...
       | 
       | >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 DBR signal is
       | what switches CPU data bus access.
        
         | Flow wrote:
         | A few games used the RAM intended for the Kickstart on A1000.
         | The same game on A500 needed 1MB RAM.
        
         | fabiensanglard wrote:
         | Thanks for these clarification, I will update the article and
         | drawings tonight.
        
         | gpderetta wrote:
         | > firmware(Kickstart, like PC bios)
         | 
         | My understanding is that Kickstart contained both Exec (the
         | kernel) and Intuition (the windowing GUI library), so it was
         | more than a BIOS.
        
         | the_af wrote:
         | 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 wrote:
           | 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.
        
         | cbm-vic-20 wrote:
         | > Datasette Commodore 1530, shipped with every VIC-20
         | 
         | The Datasette did _not_ ship with every VIC-20. There were
         | plenty of non-Commodore datasette clones on the market,
         | however.
        
       | bbmario wrote:
       | 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.
        
       | m3kw9 wrote:
       | Awesome read
        
       | stephc_int13 wrote:
       | 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.
        
         | klodolph wrote:
         | Well, the technique has been used in newer projects as well.
         | Quake and Quake 3 both had VMs that ran the game logic.
         | 
         | Tooling is a perennial problem with extension systems, but it's
         | really damned if you do, damned if you don't. If you're not
         | using an extension system, then you're probably writing the
         | game logic and the engine as one giant mass of C++ code.
         | Writing tons of game logic in C++ will get you in trouble for
         | lots of reasons. Writing an interface between your C++ core and
         | some kind of scripting system will get you in trouble for
         | completely different reasons.
         | 
         | Tim Sweeney did a presentation about the programming
         | environment needs of different parts of games back in 2005,
         | still worth reading: https://www.st.cs.uni-
         | saarland.de/edu/seminare/2005/advanced...
        
         | csande17 wrote:
         | 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!
        
           | gowld wrote:
           | The first computer language in history was bytecode language
           | for a VM.
           | 
           | https://en.wikipedia.org/wiki/Short_Code_(computer_language)
        
           | jonny_eh wrote:
           | I guess Java's "innovation" with VMs was requiring the user
           | to download it separately from the programs it runs.
        
             | pkaye wrote:
             | Its older than that. There was the p-code machine used for
             | Pascal. https://en.wikipedia.org/wiki/P-code_machine
        
       | ncmncm wrote:
       | This is truly amazing.
        
       | keithnoizu wrote:
       | 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 wrote:
         | Eric is clearly a genius, I assume he hit a sophomore slump.
         | He's only made a couple games since, many years later.
        
           | AdmiralAsshat wrote:
           | 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.
        
       | tekstar wrote:
       | 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.
        
         | derefr wrote:
         | Given that it's apparently a bytecode executable for a VM, is
         | there a modern implementation of said VM? Maybe even one that
         | translates the draw ops into Vulkan commands? Seems like a fun
         | project.
        
         | ricardobeat wrote:
         | It's also on Steam now!
        
         | facorreia wrote:
         | I second this. Another world was a fantastic, innovative game.
         | 
         | Also look for Another World - 20th Anniversary Edition.
        
           | flanbiscuit wrote:
           | 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
        
             | lloeki wrote:
             | IIRC the 20th anniversary version has backgrounds entirely
             | redrawn and pre rendered as bitmap, they're not poly
             | anymore. The animated stuff is the original polys rendered
             | as always, only at much higher resolution than the original
             | 320x200. Sadly they lack detail, see notably at 2:26 in the
             | comparison video. Also at 2:47 you can see perspective has
             | been corrected, but the overall result is less consistent
             | (left wall vs five spoke machine). I very much prefer the
             | original one overall, the reduced detail and
             | inconsistencies in art of the new one just takes away the
             | immersion.
        
             | stuart78 wrote:
             | 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 wrote:
               | The magic of CRT :)
        
           | DHPersonal wrote:
           | It's available on iOS, too:
           | https://apps.apple.com/us/app/another-world-20th/id460076328
        
       | artur_makly wrote:
       | who remembers... Bard's Tale??
       | https://en.wikipedia.org/wiki/The_Bard%27s_Tale_(1985_video_...
        
       | luismedel wrote:
       | 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
        
       | [deleted]
        
       | newnewpdro wrote:
       | 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
        
       | lilSebastian wrote:
       | Third time this has been posted in 17 hours:
       | 
       | https://news.ycombinator.com/item?id=21931895
        
         | carapace wrote:
         | Tell the mods: hn@ycombinator.com
        
       | tombert wrote:
       | 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 wrote:
         | "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
        
       | quincunx wrote:
       | 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 wrote:
         | 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 wrote:
           | 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 wrote:
             | Thank you so much, I am going to amend the "fill" section.
             | Are you ok with being credited as "quincunx" or you prefer
             | something else?
        
               | quincunx wrote:
               | That's very kind, quincunx is fine, or no credit is fine
               | too. Glad I could be of help.
        
             | fabiensanglard wrote:
             | 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).
        
           | [deleted]
        
           | agumonkey wrote:
           | so fun to see both of you discuss in depth like old magicians
        
           | jacobush wrote:
           | Half-brite was not in the Amiga 1000 and early Amiga 500 and
           | 2000. The later "ECS" chipset has included "halfbrite". Most
           | games did not take advantage.
        
             | egypturnash wrote:
             | Do you know of any games that used halfbrite? I can't think
             | of a single game that did.
             | 
             | I think there were like three games that used HAM mode, if
             | you filter out "displaying a scan of the box art while the
             | rest of the game loads". Knights of the Crystallon, Pioneer
             | Plague, and maybe Mindscape?
        
               | jacobush wrote:
               | At least Pinball Dreams did and googling suggests Cannon
               | Fodder. I suppose a few more must be in there.
               | 
               | Edit: https://retrocomputing.stackexchange.com/a/196/4616
               | 
               | Also The Settlers
               | 
               | Black Crypt - http://hol.abime.net/126 Links -
               | http://hol.abime.net/892 Universe - https://en.wikipedia.
               | org/wiki/Universe_%281994_video_game%29
        
           | vidarh wrote:
           | To maximize performance you'd tend to _combine_ the blitter
           | with a M68k loop, typically using MOVEM to maximize the
           | number of bytes copied per instruction.
           | 
           | The reason for this is that the blitter _can not_ utilize
           | every single memory cycle.
           | 
           | So if you want to maximize graphics throughput you'll need to
           | carefully balance the work between the blitter and CPU
           | depending on which CPU.
        
         | jonny_eh wrote:
         | Targetting 320x256 makes it harder to port to 320x200.
         | Meanwhile, porting 320x200 to 320x256 is easy, just add a small
         | letterbox.
        
           | asmosoinio wrote:
           | I always thought 256 vs 200 was a PAL vs NTSC thing? Is that
           | wrong?
        
             | egypturnash wrote:
             | It certainly was on the Amiga.
        
             | jonny_eh wrote:
             | Ya, depends on the system. For example, the NES is 320x224
             | (NTSC) and 320x240 (PAL).
             | 
             | I can't speak to why they differ exactly though.
        
               | jacobush wrote:
               | The number of lines per second is constant, but you get
               | 50 frames per second on PAL and 60 frames per second on
               | NTSC.
        
         | CobrastanJorji wrote:
         | I just want to let you know that I appreciate someone showing
         | up in threads like this who have such solid knowledge of things
         | like the details of the Amiga Halfbrite mode.
        
         | zozbot234 wrote:
         | And only a few years afterwards, the Acorn Archimedes (launched
         | in 1987!) would achieve comparable or better (especially in 3D)
         | graphics and sound via pure CPU power, with little or no custom
         | hardware. Cool stuff, but it was essentially a dead end
         | architecturally. Even if Commodore hadn't screwed up to the
         | extent it did, that whole generation of machines was tied to
         | the 68k series, and would have died with it anyway. (Even Apple
         | could not save the 68k, they jumped ship to POWER instead.)
        
       | D_Guidi wrote:
       | amazing stuff, give a try also to the video from the snes
       | conversion programmer
        
       | [deleted]
        
       ___________________________________________________________________
       (page generated 2020-01-02 23:00 UTC)