Right now, I'm working on a project with a group of people. We're basically trying to get together a 2D RPG (with a twist - more on that in a minute), and we've chosen C# as our language of choice (although I do want to implement Lua, Python, or what have you as a script engine at one point). We're not set to start coding until June, because we're currently conceptuallizing, but I brought up the issue of a game engine, however I have read somewhere that you don't actually *need* an engine.
We're planning on using managed code (i.e XNA/DirectX), and we essentially want to have a 2D RPG whilst you're "roaming" (in terms of movement, think about Pokémon, games created from RPGMaker), however when you enter combat, we want to switch to a battle screen that is 3D (or, at least, 2.5D - think FF). I've read that you don't really *need* a game engine in a 2D game because essentially all that needs to be done is have a main loop that updates events in the application (currently in my game engine mock up, I have a main thread with a variable timestep that signals a display thread to render asynchronously [which, in hindsight, seems rather ridiculous - see code below] which then tells the main thread it's done rendering and allows the main thread to continue to the next iteration).
My question is, would we require a game engine for this (it's intended to be a single player RPG though I am trying to convince them to allow you to have peer-to-peer multiplayer), if so what one would you recommend, and, if not, how would we go about organizing the code so it's not too messy? In addition, how would one switch from a 2D perspective to a 3D perspective *cleanly* in DirectX? Part of me thinks about having the 2D perspective transition into black, which a 3D perspective then fades in..
Best regards, sorry for wall of text, and let me know if I need to clarify anything.
Main game loop:
http://pastebin.com/wfZYdUuP
EDIT: I would also *GREATLY* appreciate if someone could tell me an efficient way to seperate Renderable content. Right now, I have
Interface IRenderable { void Render(); }
Class Scene : IRenderable { void Update(); }
But I'm wondering how I would efficiently create GUIs under that structure, or is that a lost cause?