|
ForumsSega Master System / Mark III / Game GearSG-1000 / SC-3000 / SF-7000 / OMV |
Home - Forums - Games - Scans - Maps - Cheats - Credits Music - Videos - Development - Hacks - Translations - Homebrew |
Author | Message |
---|---|
|
Wolf3D on SMS was possible?
Posted: Tue Jun 13, 2017 11:53 am Last edited by 386DX on Wed Jun 14, 2017 2:06 pm; edited 2 times in total |
Hi,
do you think that something like the pc game Wolfeinstein 3D on the SMS hardware could have been done with some heavy optimization and a lighter engine? Or was just technically impossible? I think the engine only should be opensource nowdays maybe some coder could try (not me I would not even know how to code something so complex). Thank Bye |
|
|
Posted: Tue Jun 13, 2017 7:01 pm |
It's known as a raycaster and it can be done at low resolution, small size and without textures. There is a Game Gear game, Face Ball 3000, which does this. It's a long way from Wolf 3D. | |
|
Posted: Tue Jun 13, 2017 7:17 pm |
There's always a way, right? I'm not intimately familiar with SMS specs, but I've seen raycasters done on pretty weak systems to varying degrees of success. Like Mood for C64 is a really old one: Or, The Dark for ZX Spectrum: Both of these are rendering at a very low resolution though. I'm not sure or not if it could have done this, which is probably closer to what you're envisioning: |
|
|
Posted: Tue Jun 13, 2017 7:53 pm |
The Dark seems to be something different, not scaling or raycasting. Notice that the game doesn't have rotating walls but just overlapping blocks that are updated and possibly even replaced by larger ones as you get closer, or smaller ones when you walk away. Doesn't look like scaling at all.
Also, I guess the Spectrum hardware is a bit different. I have never seen sprite flickering but what I see is a lot of "jelly effect" when scrolling. Do the ZX Spectrum update the image in vertical lines instead of using sprites? The fact that they are 8 bit computers (and teh Spectrum has the same processor as the SMS and with the same speed) doesn't mean they have the same capabilities. |
|
|
Posted: Tue Jun 13, 2017 9:15 pm |
Spectrum has a 1bpp memory mapped screen, no hardware sprites or scaling, so it's all CPU work. It looks like it's a super low res raycaster with approximately 8x8 blocks resolution, with textures in them to sort of hide the blockiness.
Raycasters draw in vertical lines, the jelly is probably the screen being updated across multiple frames. |
|
|
Posted: Tue Jun 13, 2017 9:55 pm |
Wisdom Tree attempted to make Super Noah's Ark 3D (Wolf 3D) for the NES with an extra chip, but cancelled it due to the cost of adding the extra chip. I'm sure Wolf3D could've worked on the SMS even if it meant including a chip in the cartridge. | |
|
Posted: Wed Jun 14, 2017 12:13 am |
Also, if you are a hardware guy, you can always "cheat" and add an ARM CPU to the cartridge:
Wolf 3D for GB |
|
|
Posted: Wed Jun 14, 2017 12:25 am |
BTW, a long time ago, I tried implementing a raycaster for the GameBoy; not much came out of it, but taking a look at the source can give you some ideas. | |
|
Posted: Wed Jun 14, 2017 1:47 am |
I was going to mention such a thing. You could probably get away with treating the VDP as a 64*48 framebuffer just with tilemap updates, and have that work smoothly with external assistance. Of course, that does remove some of the charm of doing it unassisted. |
|
|
Posted: Wed Jun 14, 2017 1:32 pm |
That's impressive! I didn't think that it could have been done on a console not meant to have an external on cartridge cpu like the SuperFX of the Snes. |
|
|
Posted: Wed Jun 14, 2017 1:37 pm Last edited by 386DX on Wed Jun 14, 2017 2:06 pm; edited 1 time in total |
It was just an idea, I could not write code that complex but I was just imagining a similar tech demo on the Master System, not enough skills. |
|
|
Posted: Wed Jun 14, 2017 1:46 pm |
Given that it's possible to use a subset of the screen as a bitmap, it is theoretically possible to do that. But I wonder what the speed would be.
Maybe keeping a very very small window... ? |
|
|
Posted: Wed Jun 14, 2017 3:52 pm |
Tales of Popolon (MSX) is a homebrew MSX cartridge game that uses raycasting. AFAIK, its performance is close to what one should expect from a pure software SMS raycaster.
There is also a NES Raycaster. |
|
|
Posted: Wed Jun 14, 2017 4:40 pm |
I think yes its possible.
Other thing is the framerate as i think you will have to paint all columns tiles every change (anf i mean columns, not rows, so will be even slower). More interesting should be a 3d mode 7 like effect using sverx technique |
|
|
Posted: Wed Jun 14, 2017 5:18 pm |
it's a few days I'm thinking about this. still, I'm not sure how to do that, as I'm not interested in monochromatic mode 7... |
|
|
Posted: Wed Jun 14, 2017 5:48 pm |
I have to say i have a sinple example which does a simplistic outrun like road with curves. Velocity is made redefining tiles. It was for a racing game which were posponed due to te platformer one i am working (was an error as i am learning a platformer is a hard thing to do, not also for perfomance troubles, also for gameplay concerns hard to clarify, and the racing one could be made yet). | |
|
Posted: Wed Jun 14, 2017 7:57 pm |
Raycasters are column rendered but the VDP is very row oriented, plus with flat shading the column data is only really changing in a subset of the cells. Thus it might be better to render the scene to memory and then reduce it to deltas, to be emitted row-wise. There's still the possibility to have the delta be huge, and things like enemies have to be deal with too, but I suspect it would be playable, but probably fairly low frame rate (with small arenas and orthogonal, grid walls like Wolf 3D). | |
|
Posted: Wed Jun 14, 2017 9:36 pm |
Yeah! I could have not explain better :) i think you can have four shading colorr (one for wall face direction) so could make visible the different walls. If a wall has not texture, you only have a full shaded tile for the wall middle tiles and some tiles for up and down sides ( for different angles based on perspective) of walls (although compute what to use is complicate) everything based on a 8 pixels width column raycast.... maybe could ask to john carmack :) | |
|
Posted: Thu Jun 15, 2017 8:02 am |
yes, rendering the tile column into RAM and pushing it to VRAM tiles making them planar (as in RAM they would probably be stored in a "one byte per each pixel" way). This way it can have 16 colors too, and look great. |
|
|
Posted: Thu Jun 15, 2017 12:42 pm |
Question here:
You speak about 1 byte per tile... but this is not possible on vram, isnt it? |
|
|
Posted: Thu Jun 15, 2017 1:14 pm |
I only meant that when you render, you won't be putting the pixel directly to VRAM as SMS video memory is planar.
Thus you'll likely render to RAM where you'll keep each pixel in a single byte and then convert to planar from here, 8 pixels a time to push 4 bytes to VRAM. In another topic here on this forum I was asking the fastest way to convert to planar, and Psidum suggested some very good method. Unfortunately it's still quite slow - each bit must be handled (moved) which is a killer as there are 4 bits for each pixel. |
|