I have been spending some time to work on a primitive 3D engine for the TI-83 and TI-83+ family. I refer to it as a "DOOM"-style engine as it uses a 2D floor plan with walls at any angle (from a 2D perspective, that is; they must stand upright) between sectors of varying heights.

Here some screenshots showing some of the progress:



I am not committing to this project, as I don't know whether it will be fast enough to be usable in a game or whether you could even fit a game and the engine into the calculator's memory (the above level with the steps is around 700 bytes, so levels would have to be pretty small). However, I thought it was an interesting experiment. I've been posting about the project on my journal, where you can find more technical information and animated screenshots. You can also find binaries to try on your calculator; the latest released demo is very slow (download Nostromo.zip) and I've since heavily optimised the engine but have identified an irritating bug that I'd like to fix before releasing the next build. The current demo I'm working on introduces "Things" (objects represented by a sprite); in lieu of a binary, here's an animated screenshot demonstrating how awful my sprite scaler is (running at 15MHz).

I have little free time at the moment so would rather spend it working on projects rather than updating forum posts! However, Kerm suggested I post here, so consider this an announcement rather than a project log. If you'd like to keep track of the project you can check my journal, and if you're into RSS then there's a feed for the project.
Very nice! The scaling does seem to be off a little, but it seems quite fast, even with the 3D world thrown in. As for large levels, would some form of compression be feasible? How are the maps designed at the moment?
As I've said before, this is wonderful, Ben! I'm really looking forward to seeing where this goes, even if it's just as a tech demo (:
Don't have steps, limit each map to a single floor, and limit your walls to 90 degree angles. Now you can store your maps as simple text grids. Think Wolf3D, not Doom.
Except he's trying to make a "DOOM"-style engine, as he says in his post.
Wolf3D isn't too much of a leap back from doom, it's just simpler, which would make it easier to store and render on a calc. I suppose you could store walls as blocks on a text grid, which would allow for window and 45-degree-angle corner blocks, which would add some of Doom's complexity while keeping the storage medium simple. you could also parse the map file and draw long stretches of walls as a single polygon, saving on memory. I would still stick to a single floor per map though. Seperate floors could be stored and loaded separately, as long as the inventory remains constant, if you really need multi-floor levels.
SirCmpwn wrote:
As for large levels, would some form of compression be feasible?
Possibly, though they would have to be decompressed to render them so there's the issue of how much RAM they'd take up. A hub-based system may be the best bet; individual maps are quite small (a handful of rooms) but you could have a passageway sealed with a door at each end at the end of the map. Passing through the passageway would unload the map you left and load the map you're walking into, which would have an identical passageway in the same place to make the transition seamless. (Quake II did this). The doors at each end would be required as you would not be able to see both maps at the same time!

Quote:
How are the maps designed at the moment?
By hand. I sketch them on paper, marking out all the vertices, walls, sectors, subsectors and BSP partitions, then enter them into the computer. It's a very slow process, but a 3D engine without a level editor is more useful than a level editor without a 3D engine so I've focussed my attention on the engine. I haven't even begun to think about how I could generate the BSP tree automatically (and would appreciate any help on this matter)!

DShiznit wrote:
Don't have steps, limit each map to a single floor, and limit your walls to 90 degree angles. Now you can store your maps as simple text grids. Think Wolf3D, not Doom.
There already are a host of raycasters available for the TI-83 and TI-83+. The appeal of this project to me is that it's doing something that I haven't seen done before. Having variable-height sectors and angled walls allows for more interesting level structures, in my opinion. I will probably not be adding texture-mapping, as it would likely be very slow and would also look cluttered; I think traced wall and floor outlines look better on the low-resolution LCD than textured walls and/or floors would.

DShiznit wrote:
Wolf3D isn't too much of a leap back from doom
I beg to differ; DOOM is light years ahead of Wolfenstein 3D.
I actually have seen Doom clones on TI-calcs before. Not entirely certain if it was on the TI-83 line, but it was one of the graphing ones. I suppose if you really want to have variable height, ray-tracing might be the only way to do it. Good luck figuring out a good compression method.
DShiznit wrote:
I actually have seen Doom clones on TI-calcs before.
I thought I'd seen a raycaster with walls at varying angles in the past but couldn't find it on ticalc.org. If you could find a link for the DOOM clone then I'd be interested in seeing it! There is zDOOM but that seems to be a Wolfenstein-style raycaster with edges traced around the walls.

Quote:
I suppose if you really want to have variable height, ray-tracing might be the only way to do it.
Raytracing would be prohibitively slow. The engine is similar to a conventional 3D one (vertices are transformed around the camera then projected to the screen with polygons drawn between them) except that by reducing the map to 2D you can perform certain optimisations (when rotating the vertices around the camera you only have two coordinates to deal with and walls can be clipped and drawn per-column rather than per-pixel, for example). A BSP tree is used to sort the geometry based on the camera position so it can be rendered from front to back.
Doom 89

I'm going to throw caution to the wind here and estimate (just for sport) that Nostromo has a FOV of 112.5°.

Higher or lower?
Weregoose wrote:

Aha. Smile That uses the FAT engine so is another Wolfenstein 3D-style raycaster, though does look good.

Quote:
I'm going to throw caution to the wind here and estimate (just for sport) that Nostromo has a FOV of 112.5°.

Higher or lower?

Lower. There's a certain FOV that makes 2D clipping very easy... Smile

Edit: That's assuming you're talking about the horizontal FOV.
DShiznit wrote:
Don't have steps, limit each map to a single floor, and limit your walls to 90 degree angles. Now you can store your maps as simple text grids. Think Wolf3D, not Doom.
As Ben already said above in response to you, that's been done; what he has come up with is much more creative and much more technically impressive. Thanks for posting this here, Ben. Smile
This is very cool, I remember seeing it on your blog and (I think) on Maxcoderz back in the day.
Whatever you're doing then seems to be the way to go if you want variable heights. Any idea yet how you're gonna implement sprites?
DShiznit wrote:
Whatever you're doing then seems to be the way to go if you want variable heights. Any idea yet how you're gonna implement sprites?


DShiznit, you should take a look at this blog, if the technical details interest you: http://benryves.com/
Cool stuff.
Woah that's great! I didn't knew that was still alive. I only saw some earlier stages screenshots like 4 years ago on MC forums, but nothing this complex. I hope this engine can be used in some games Smile
DJ Omnimaga wrote:
Woah that's great! I didn't knew that was still alive. I only saw some earlier stages screenshots like 4 years ago on MC forums, but nothing this complex. I hope this engine can be used in some games Smile
Yup, that's why you should keep an eye on Ben's Facebook and/or blog. Smile He picked it back up a few weeks ago, and seems to be making huge progress on it each weekend.
Great work Ben!
I've been following this on his blog, his rss feed has had a spot in my Firefox bookmarks bar for a while now.
TheStorm wrote:
Great work Ben!
I've been following this on his blog, his rss feed has had a spot in my Firefox bookmarks bar for a while now.
As indeed it should. Smile Benryves, I support your decision not to texture the walls; I think it looks pretty clean this way. Would solid-filled or dither-filled walls be at all possible with minimal framerate decrease, or no?
  
Register to Join the Conversation
Have your own thoughts to add to this or any other topic? Want to ask a question, offer a suggestion, share your own programs and projects, upload a file to the file archives, get help with calculator and computer programming, or simply chat with like-minded coders and tech and calculator enthusiasts via the site-wide AJAX SAX widget? Registration for a free Cemetech account only takes a minute.

» Go to Registration page
» Goto page 1, 2, 3, 4, 5  Next
» View previous topic :: View next topic  
Page 1 of 5
» All times are UTC - 5 Hours
 
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum

 

Advertisement