🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: comp.sys.ibm.pc.games.action
Article #698068

Re: What Have You Been Playing... IN JUNE 2017?

#698068
From: rri... Ross Ridge
Date: Mon, 10 Jul 2017 17:56
136 lines
6593 bytes
rri...@csclub.uwaterloo.ca (Ross Ridge) wrote:
>Ultima Underworld still had the grid-based maps of the earlier
>Wizardry-style dungeon crawlers though.  That made generating good
>maps from the raw data easier.  Later 3D games weren't constrained to a
>grid, everything is just polygons.  Even something like distinguishing
>whether some polygon is a floor or a wall or not significant at all
becomes tricky. 

Spalls Hurgenson  <spallsh...@gmail.com> wrote:
>Ultima Underworld was a free-roaming 3D game, and not at all
>grid-based -  at least, not anymore than were games like Doom or
>Wolfenstein 3D. There was still an underlying grid to which the walls
>snapped but the engine did not require 90-degree corners and the level
>design felt very natural.

The raw map data used by Ultima Underworld was in the same basic grid
format as used by Wizardry-style dungeon crawlers.  The walls didn't
snap to anything, their shape and position in 3D space were determined a
simple 2D array of squares were each element stored a short set values
indicating things like what walls were present in the square.  It could
do things that Wizardry-style games couldn't, walls could be at 45 degree
angles and the floors slopped, but it was basically only an improved
version how the older games stored their maps.  Contrast that a more
modern 3D engire where everything is just polygons, polygons that can
be of any shape and have any position.

> You could go over and under parts of the level geometry.

That was very limited, bridges had to be implemented as special 3D
objects.  The engine could represent arbitrary shaped and positioned
polygons, but this was only used in a few places.

>IIRC, it wasn't "true 3D" in that it still used a
>ray-casting engine with some 3D trickery (which became obvious when
>you looked up or down and the perspective and textures warped weirdly)
>but it was pretty advanced for a computer game of its time and far
>more complex than the grid-hopping CRPGs that preceded it, like Pool
>of Radiance or even Eye of the Beholder.

No, it used "true 3D" rendering, the same basic 3D texture mapping used in
modern video games today, except with one kludge: a necessary division on
every pixel was only approximated.  Floating-point division is very slow
operation, about 90 cycles if you were lucky enough to have an 80387 FPU,
and hundreds of cycles if you were stuck with software floating-point.

You can confirm with from an old post by Chris Green, the author of the
3D texture mapping code in UW:

	https://groups.google.com/d/msg/rec.games.programmer/h8vHpOW_-Fc/fWfTG988r1MJ

You can also read more about how UW stores its map data in a couple of
posts I made in that thread.  I've also posted a simple QBasic program
that can display the UW map, but it only works in the demo.  Here's a
version that works with the released game (you need to run it in the DATA
directory, change line "n = 0" according to level you want displayed):

DEF SEG = &HB800

' By Ross Ridge, Public Domain

OPEN "lev.ark" FOR BINARY ACCESS READ AS 1

CLS

SCREEN 12

n = 0

GET 1, n * 4 + 3, offset&

offset& = offset& + 1

ad = 0

DRAW "BM96,16"

FOR y% = 0 TO 63
        FOR x% = 0 TO 63
                GET 1, (63 - y%) * 256 + x% * 4 + offset&, A%
                c% = (A% / 16 + 1) AND 15
                IF (c% = 0) THEN c% = 15
                COLOR c%
                A$ = "C" + STR$(c%)
                DRAW "X" + VARPTR$(A$)
                A% = A% AND 15
                SELECT CASE A%
                CASE 1
                        LINE STEP(0, 0)-STEP(6, 6), , BF
                        DRAW "BU6BR"
                CASE 5
                        DRAW "R6G6U6"
                        PAINT STEP(1, 1), c%, c%
                        DRAW "BEBR5"
                CASE 4
                        DRAW "R6D6H6"
                        PAINT STEP(2, 1), c%, c%
                        DRAW "BEBR4"
                CASE 3
                        DRAW "F6L6U6"
                        PAINT STEP(1, 2), c%, c%
                        DRAW "BU2BR6"
                CASE 2
                        DRAW "BR6G6R6U6"
                        PAINT STEP(-1, 2), c%, c%
                        DRAW "BU2BR2"
                CASE 6
                        LINE STEP(0, 0)-STEP(6, 6), , BF
                        DRAW "C0BL3BUNU4NH2E2BU3BR2"
                CASE 7
                        LINE STEP(0, 0)-STEP(6, 6), , BF
                        DRAW "C0BL3BUU4NG2NF2BU1BR4"
                CASE 8
                        LINE STEP(0, 0)-STEP(6, 6), , BF
                        DRAW "C0BU3BLL4NF2NE2BU3BR6"
                CASE 9
                        LINE STEP(0, 0)-STEP(6, 6), , BF
                        DRAW "C0BU3BLNL4NH2NG2BU3BR2"
                CASE 0
                        DRAW "BR7"
                CASE ELSE
                        DRAW "F6BU6BR"
                END SELECT
        NEXT x%
        DRAW "BL448BD7"
NEXT y%

END

DO
       A$ = INKEY$
LOOP WHILE A$ = "" OR A$ = CHR$(0)
-- 
 l/  //	  Ross Ridge -- The Great HTMU
[oo][oo]  rri...@csclub.uwaterloo.ca
-()-/()/  http://www.csclub.uwaterloo.ca/~rridge/ 
 db  //	  
Technical Details
Message-ID: <ok0f3l$1n6o$1@gioia.aioe.org>
Path: mbox-mo1.pugleaf.net!q47ni23630qtb.1!nntp.google.com!goblin2!goblin.stu.neva.ru!aioe.org!.POSTED!not-for-mail
References: <p46jlcpismccrj6qpcm0v3bk1jfjr0neup@4ax.com> <btb4mct7m1149earbh8ulg4hkqan9vk9fh@4ax.com> <oju51v$din$1@gioia.aioe.org> <30v6mctm0cjis5lou308tvbps08gnvj3ec@4ax.com>

Show Full Headers
Complete Article Headers
X-Received: by 10.200.41.106 with SMTP id z39mr11792553qtz.38.1499709369239;        Mon, 10 Jul 2017 10:56:09 -0700 (PDT)
X-BeenThere: comp.sys.ibm.pc.games.action@googlegroups.com
Received: by 10.36.101.4 with SMTP id u4ls2331966itb.17.canary-gmail; Mon, 10 Jul 2017 10:56:08 -0700 (PDT)
X-Received: by 10.13.255.131 with SMTP id p125mr13902924ywf.58.1499709368112;        Mon, 10 Jul 2017 10:56:08 -0700 (PDT)
MIME-Version: 1.0
Path: mbox-mo1.pugleaf.net!q47ni23630qtb.1!nntp.google.com!goblin2!goblin.stu.neva.ru!aioe.org!.POSTED!not-for-mail
From: rri...@csclub.uwaterloo.ca (Ross Ridge)
Newsgroups: comp.sys.ibm.pc.games.action
Subject: Re: What Have You Been Playing... IN JUNE 2017?
Date: Mon, 10 Jul 2017 17:56:05 +0000 (UTC)
Organization: Aioe.org NNTP Server
Lines: 136
Message-ID: <ok0f3l$1n6o$1@gioia.aioe.org>
References: <p46jlcpismccrj6qpcm0v3bk1jfjr0neup@4ax.com> <btb4mct7m1149earbh8ulg4hkqan9vk9fh@4ax.com> <oju51v$din$1@gioia.aioe.org> <30v6mctm0cjis5lou308tvbps08gnvj3ec@4ax.com>
NNTP-Posting-Host: 8y4yU3sPbO3CSDDtylvnmg.user.gioia.aioe.org
X-Complaints-To: ab...@aioe.org
X-Newsreader: trn 4.0-test77 (Sep 1, 2010)
Originator: rri...@csclub.uwaterloo.ca (Ross Ridge)
X-Notice: Filtered by postfilter v. 0.8.2
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 7bit