A sort of experiment...

I have this idea for a sort of experiment that I wanted to try. The only problem is I have virtually no experience in making games or with writing code. Basically my idea is to have a 3D game world but with 2D characters.

I will try to explain what I mean as best I can and my ideas of how it could be accomplished. Each character would be made up of sprites and the sprites would change depending on the angle of the character in relation to the player. This would mean that for every animation a character has there would have to be hundreds of different versions of that same animation from all different angles. These would also have to be syncronised so when the angle changes the animation flows from sprite to sprite.

One way I’ve thought of accomplishing this is to have invisible 3D spheres at the head height of each character that are serperated into sections and each section is connected to a sprite. When the sphere is on screen the game detects which section is closest to the player, its angle in relation to the player and how far away it is then plays the corresponding sprite. These spheres will need to have front, back, top and bottom defined and the sprites will have to be able to scale as the characters get closer and farther away. What I imagine is like a 2D animated cartoon or movie that you can walk around and interact with.

I realise this is a huge task and it will take a very long time to complete but I want to give it a go but as I said I don’t have any experience. I will of course start with something simple like a 3D room with a simple character doing something idly with say 8 viewing angles as a proof of concept and then move on to something bigger.

So, does anyone have any idea how this could be achieved? If so, how difficult would it be?

Someone in another forum said this sounds like the old shooters like Wolfenstein and Doom which is not what I am imagining. Doom, as far as I can remember didnt have characters that appeared to change angle when you moved around them, i.e., they were always facing you (unless they were running away or running perpendicular to you in which case they would have a running sprite from the back and a running sprite from the side).

Hello and welcome!
Making games with sprites, 3D or not its a quite old technique! :wink:
Blender have some functions that will help you a lot, specially the “Halo property” or “Bilboard” ones, ex: if you assign “Biboard” property to a Plane’s face, the plane face “normal”, will always face the camera ( but with Z axis constraint).
Then just assign a “animated texture” ( with your sprite animation) and you’ve your sprite!
Do a search in the Resources Forum!

I think both OTO and SolarLune are misinterpreting KnottyLocks’ question/aim.

I think he wants a sprite character that works within full 3D. It’s hard to explain, really.
A 2d sprite character however when moving around them you can see side views, back views, front views and the transition inbetween.

It could actually be a topic of debate, would being able to view one character made from sprites at different angles make it actually a 3D character…?

I can see what it is you want though and i think it’ll be doable by somebody, but not myself.

@Radmanlive - No, I’ve done it. I arrange sprites on a sprite sheet, where the column number indicates where the sprite is facing (i.e. the first column is an NPC facing down, the second is facing down-right, the third right, etc), and rotating the camera (or Player, in this case) changes which sprite displays. It’s not impossible, but it will require Python.

Try making a cartoonish texture and put it on a mesh you’ve made, and make that mesh shadeless. You should be able to get a 2d effect without making countless numbers of sprites.

Really, and then how do you animate it? Being that mesh probably a simple plane? I’d do the same way as SolarLune describes it. Add an invisible Cube for the sprite to interact with the 3D world, place a plane (player) inside it as halo. To reduce the size of the animation texture, I’d restrict the players movements to 4: Left, right, front and back. Also an empty to determine whether the camera is positioned in front, back or side of the Cube, so that if the camera rotates around the cube,the right frames are displayed. Obviously, there’s no logic ‘brick only’ way to do it. Just controlling the animated texture requires python. I had a similar idea for holograms, only instead of animated texture, RTT(Render To Texture) from the video to texture module is used. I did not do any tests though!

Yeah, sprites are not the same things as shadeless meshes. Meshes are 3D, while sprites are 2D - they have completely different looks. If you did it right (built your mesh out of blocks like a sprite, using inverted normals for outlines), it might work. Otherwise, you will want to look into Python and sprites, though I’m not sure how feasible it is to have ‘hundreds of different versions of the same animation’. For a single object, the sprite sheet size would be through the roof.

EDIT: I could make an example, but it probably would be best if you figured it out - it will involve math, Python, and sprite sheet column index numbers.

What I meant was you would create a character like normal and remove shading. It comes out lookin 2dish. They do it in animated movies, the only one I can think of now is Atlantis.

Yes, that’s exactly what I mean. You wouldnt believe how many people just don’t get it.

Was it particularly complicated? Do you have any examples of the effect in action?

It’s true, all these people, all those years that just “don’t” get it!
Maybe there’s nothing to get it!
If you have a plane/2D/ X,Y it’s a “sprite”, if you add the Z dimension, it’s a “cube”/3D…I guess, I’m tool old and tired!

@Knotty - It was a bit complicated, actually, but I’ll post an example of it. Here it is. If you don’t know about sprites, check out the Sprites python file I included in either of the folders in the zip. If it doesn’t work, post about it.