I am fairly inexperienced when it comes to Unity and coding in general. I have searched far and wide for a solution but cannot find one.
Basically, I want to emulate the look of retro FPS games like Wolfenstein and 3D Monster Maze. I want the camera to be locked into first-person perspective in a 3D scene with billboard sprites that have different LODs.
I am heavily inspired by the interactive movie Black Mirror: Bandersnatch. Here is a gif I made of what I hope my game will look like. Please ignore the few pixelated frames. As you will notice, there are moments where the new frame will load in overtop of the old frame (from left to right, top to bottom). I would like to have the option to emulate that “frame drawing” on screen as well.
You will also notice the screen goes from the normal FPS view, to a dialog screen. This is the type of system I want for my game as well. FPS view until you interact with an NPC or item, and then it switches to the dialog view, and then back when you’re done interacting.
Any help on achieving this in 3D would be tremendously helpful. Thanks!
Thanks for the reply! I did not know about rendering frames manually. I think that would be a good solution worth trying.
However, I am not really looking for a maze per se, just a locked perspective FPS look of that game.
Yes, grid based movement is what I want, but I am not sure how to implement the movement in a way that also takes the screen rendering into consideration, as well as switching to the dialog screen.
I am just not sure how what systems I might need to use to handle this type of gameplay.
what part of this idea do you think isn’t covered by basic games? It’s as simple as simple gets. If you had made any of those basic games, you wouldn’t have any trouble getting started on this.
As far as I understand, the only tricky bit here is the stylised rendering. Even that just requires some creative use of cameras, render textures, and a bit of custom compositing.
Ok, so what does the experience you have cover? There’s a gap, but it’s hard for us to see where it is based on the info you’ve given.
Based on the OP I’d have suggested the same stuff as others already have. Yes, making simple games won’t cover the specific transitions etc. which you need, but unless we’re missing some info they seem like stuff you can assemble in a fairly straightforward manner once familiar with programming (you already are) and Unity’s provided systems (you have “some”, but we don’t know what).
Basically, just lock the camera, use sprites for all enemies and you’ll get that exact look.
However, things that contributes to that retro look are:
I’m unsure if this is worth replicating. In current day, playing at rendering speed where one frame takes several seconds can be quite uncomfortable.
In this scenario you can replicate this effect with render targets. Basically, render the frame you want the user to see, preserve the last frame, and then “mix” them while rendering to emulate the progress.
It totally does!
It casts out 320 rays horizontally to detect walls and from each ray, it draws a vertical span of a wall texture scaled by distance. I consider this raycasting, even though it doesn’t do this on a per-pixel basis. Maybe ray-marching?
Source?
Why you would even need to do that?
This game has such simplistic mechanics, doesnt need so many raycasts.
Edit:
I was curious about raycasts. So I did quick research about wolfenstein3D raycast engine. For anyone who is interested in its concept of using raycasts to render. It doest expose too many details, but is enough to get the idea http://www.sebcossu.com/2018/02/07/wolf3d-raycasting-engine-theory/
I still would like to know, where 320 Ray cast number come from however.
There’s even a quote from Carmack where he recites the switch to “ray casting” (he himself put it in quotes) which made the code a lot simpler with more reliable/stable results.
why not just use sprites in world space?
Could then just use the Namesh agent for all the pathfinding.
and 2d sprites for the UI weapon overlays like they did.
could still use the 3d space, lights, particles, triggers and physics system but would seem like 2.5d…
I think unity has all the features you would need built-in.
basically you’re making foes out of healthbars
that’s why folks say it’s basic stuff.
Actually I’d follow the Wolfenstein design closely.
You’d have a prefab “WallBlock” that has four sides. Each side (“wall”) is simply a quad with a material on it.
The map is designed out of “WallBlock” elements. The map design tool, or the loader, or the prefab itself is intelligent enough to detect neighbouring WallBlock instances in order to disable the walls that aren’t visible (but for trivial games this wouldn’t even be a performance issue if they remained visible).
Then you’d have to have some way to assign unique materials to each wall, or simply make variants of WallPrefab with different materials, same for all side (as in Wolf3D - though it uses darker texture variants on two of four sides).
I would certainly not try to render walls with sprites/billboards because there’s no benefit and it might even pose more issues.
yeah, i remember playing around on the map editor when it first came out.
you got to place blocks on the map. Favorite was the Moss Stone wall.
but it was like. the entire map was a no-walk black void until you added the blocks to walk in. kind of like how unreal II engine was negative space. (not sure about the new unreal engine haven’t used it)
could probably just create a splatmap the same way for this, blending the styles at the intersection point.
But it’s not like you didn’t notice the transition, in the actual game it was like a hard line where the wall was, I don’t recall any sort of blending while playing.
but it’s been a while…
last time i played wolf3d was when it was current, on the 486 so… maybe some newer versions look cooler like that.
like what made a lot of those games great is the stuff working behind the scenes. for example: Binary Space Partitioning :