I started working on a project under the name Redintegrate a few years ago as an attempt to make something using OpenGL. Instead, I got overwhelmed with it as I just tried to jump in. Over the past few weeks, I restarted the project from scratch after thinking the game over for a few years.
Redintegrate will be an FPS and RTS combo game. Gameplay will have two basic modes, one that focuses more on FPS aspects, one that focuses on RTS aspects. The game has two factions: Robots and Humans, and is set in the future. I am still getting a formal plot typed out, but it is there.
Features that have been researched, acquired, and will be put in:
- OpenGL 4.x for rendering, no toolkits
- SDL2 for windowing, events, and generation of other textures for 3D objects
- enet for networking
- Bullet Physics for doing rigid and soft body simulation
- OpenAL/SDL for sounds/music
- Either ncurses or Qt for server frontend GUI
- Embedded Lua for GUI handling and dynamic maps
- Possibly OpenCL/CUDA
- Client and server provided. Client has a built-in server.
- bzip2 - stream compression
- C++11 support
- Developer and user group mode (compress/serialize when not developing)
- COLLADA scene loading
- Windows builds (Linux is still primary target)
- Custom 3D Voronoi tessellation library (dynamic terrain/object destruction)
- libcaca filtering
- libcaca rendering target using Mesa offscreen rendering for playing in-terminal
The above big list is the reason for me not doing any calculator stuffs over my break. I have plenty to do
I will post info here as I go and for any feedback.
Edits:
- Added 2 more requirements for the backend
- Added colors showing what has been used so far.
AHelper wrote:
I started working on a project under the name Redintegrate a few years ago as an attempt to make something using OpenGL. Instead, I got overwhelmed with it as I just tried to jump in. Over the past few weeks, I restarted the project from scratch after thinking the game over for a few years.
Redintegrate will be an FPS and RTS combo game. Gameplay will have two basic modes, one that focuses more on FPS aspects, one that focuses on RTS aspects. The game has two factions: Robots and Humans, and is set in the future. I am still getting a formal plot typed out, but it is there.
Features that have been researched, acquired, and will be put in:
- OpenGL 3.x/4.x for rendering, no toolkits
- SDL2 for windowing, events, and generation of other textures for 3D objects
- enet for networking
- Bullet Physics for doing rigid and soft body simulation
- Experimental Voronoi Fragcture world in Bullet Physics for dynamic terrain destruction
- OpenAL/SDL for sounds/music
- Either ncurses or Qt for server frontend GUI
- Embedded python for GUI handling and dynamic maps
- Possibly OpenCL/CUDA
The above big list is the reason for me not doing any calculator stuffs over my break. I have plenty to do :-P I will post info here as I go and for any feedback.
1. Plot? How will this be combined? (I can think of several ways)
2. Add a 3rd faction. It may see more complex, but a 3rd faction really opens things up in terms of what you can do with plot and strategy. (Given the genre and the current factions, I'd suggest aliens as being the 3rd)
1) I was going to add in a single player mode that uses the plot. The maps will be themed accordingly.
2) My extended plot was to incorporate Tremulous' end (or something similar)... Note that I am not a good artist. Therefore the content in the game will be limited. Human-like stuff? Sure. Creative stuff? nope.
With that above #2, is there anyone here who has more artistic skills than me, ie. none?
AHelper wrote:
1) I was going to add in a single player mode that uses the plot. The maps will be themed accordingly.
2) My extended plot was to incorporate Tremulous' end (or something similar)... Note that I am not a good artist. Therefore the content in the game will be limited. Human-like stuff? Sure. Creative stuff? nope.
With that above #2, is there anyone here who has more artistic skills than me, ie. none?
I mean, how will rts and fps be combined?
For plot, I'm still fuzzy as to what you're saying. (And what the premise is)
Oh, ok. If you played tremulous, you would know how they are combined. I plan on making it a tad different. First is a FPS > RTS where you play, well, like a normal shooter. You can place turrets, repair things and other small things. Basically tremulous.
Next is the RTS heavy, still in FPS. In this mode, you create buildings to make a base. From there, you must destroy other places. You take on both a top view to place buildings and an FPS mode for standard shooter stuff.
I am still writing out the actual rules for each style, buildables available, how custom buildings are designed, etc..
---
The plot is basically this: (pre-game)Humans meet aliens. Nothing new, they go and fight them. (the game starts...)Humans return to find earth attacked already, not by aliens. If I can become a better modeler in Blender, I will extend the plot in the game to have flashbacks to how the earth died.
I will hammer out stuff as I work on content.
AHelper wrote:
Oh, ok. If you played tremulous, you would know how they are combined. I plan on making it a tad different. First is a FPS > RTS where you play, well, like a normal shooter. You can place turrets, repair things and other small things. Basically tremulous.
Next is the RTS heavy, still in FPS. In this mode, you create buildings to make a base. From there, you must destroy other places. You take on both a top view to place buildings and an FPS mode for standard shooter stuff.
I am still writing out the actual rules for each style, buildables available, how custom buildings are designed, etc..
---
The plot is basically this: (pre-game)Humans meet aliens. Nothing new, they go and fight them. (the game starts...)Humans return to find earth attacked already, not by aliens. If I can become a better modeler in Blender, I will extend the plot in the game to have flashbacks to how the earth died.
I will hammer out stuff as I work on content. :-)
You could also have a prequel bit so that people could defeat the aliens as well. There could also be something after defeating the robots, where the aliens come back (because you only eradicated one planet), and it turns out they made the robots. Only this time, the robots turn on the aliens, but not on you. Of course, that's just my take on what you have, and how aliens could be integrated.
If you would like to help out on modeling (or finding out the license on the current tremulous models), map ideas, etc., post here! I am working on the engine right now, specifically gamestate sync code.
AHelper wrote:
If you would like to help out on modeling (or finding out the license on the current tremulous models), map ideas, etc., post here! I am working on the engine right now, specifically gamestate sync code.
http://svn.icculus.org/*checkout*/tremulous/tags/RELEASE_1_1_0/COPYING
I'm not too good at artistry, but I can learn. For maps, what type of theme are you going for?\
EDIT:
Would the rts play more like battlezone?
I don't know how battlezone is played. Wikipedia wasn't helpful.
The map theme is abandoned US. Think Halo.
AHelper wrote:
I don't know how battlezone is played. Wikipedia wasn't helpful.
The map theme is abandoned US. Think Halo.
So urban settings?
Battlezone dl: http://www.old-games.com/download/5839/battlezone-1998-
I will eventually get to mapping. Right now, I am focusing on stuff in this order:
- getting the backend ticking and updating clients (backend is the game code. It is embedded in both the client and server binaries)
- Getting the client storing the map data from the backend and rendering objects.
- Handling client input and sending it.
- Create a test character model and get armature animation working in the client.
- Add in teams, spawning, and spawned entities.
- Handle full client controls and pipe them to bullet.
- GUI?
- Make a map?
- Complete characters?
- Weapons?
- Buildables?
- Destruction, shaders, and other eyecandy.
- Create a game plot and materials
This list will change, but I am only focusing on the game from a technical aspect. I can think up a wonderful game, but if there is no code that will get the job done, then its pointless.
"So urban settings?"
Part of the plot is going from your landing zone through parts of the US to restore the government. I plan on having close indoor combat, wide outdoor building-heavy maps, suburban, some urban, maybe other odd things.
The bacend ticks and has some network data code in it. I have the client able to render UV mapped objects finally after reworking my shader -- model -- texture interaction.
A bit out of order, but I did get a start on the GUI and it renders. A bug in SDL prevents me from finishing it, but meh.
I will be getting the client and server synced and trying to figure out how to interpolate movement between net frames on the client.
Huzzah, progress! If it was anyone else, I'd be concerned about you attacking several different pieces of the program at once, but I trust you to have it under control and not get overwhelmed.
Well, I am the one who manages GlassOS where each source file is a completely separate projects
The issue with this one is that I am not the best modeler at all, so it will be fun later on.
AHelper wrote:
Well, I am the one who manages GlassOS where each source file is a completely separate projects
The issue with this one is that I am not the best modeler at all, so it will be fun later on.
Once you have enough of the engine in place that you can show off what the program can do, I think you'll be able to attract some modellers to help with the project. We certainly have a good chunk of at least competent if not great modellers from Freebuild and other projects, so I'd imagine you can convince some of them/us to help out.
Sounds good!
I will demo stuff once the engine and client sync up.
<edit>
The basic layout of the client side engine started. This is where all hell breaks loose. First off, I plan on using Bullet Physics' Voronoi Fragment dynamics world in order to make realistic destruction. Problem is, that code is experimental and crashes on some machines. I have yet to follow up and check subversion and the forums to see if it is being fixed up. Until then, destruction physics will be in two modes: Either the fragments will be part of the game in the server, client only, or off completely.
Second thing is interpolation of movement (smooth character movement when your client framerate is faster/sslower than packets are sent to update position info). I don't know where to look for pointers on this. I will most likely just blend the movement for the framelength then continue moving the object for a set amount of time based on average lag with a max timelength. Your own character will rely on received map data and bullet to get movement to be smooth, updating position info if the server does something weird.
Last thing for me to get hammered out is networking and prioritizing data. The server needs to benchmark network speed of clients in order to not go overboard on them. Seen objects have a higher network priority than occluded objects.
Well well well well well well well... I have the client and server communicating to each other properly. Simply, the client connects then sends a connect packet. The server gives it the connection ID (unique). The client then requests the game header and the client list. The header is sent, holding the map name and rules. The client loads the map data. Its then asks the be resynced and to start sending public packets (entity updates).
Heres the logs in debug mode. Its color-coded, but I cannot show that using bbcode
Client:
Code: +------------+
| Welcome to |
|------------|
|Redintegrate|
+------------+
Processing group "settings"
Loading group "settings"
Pass 1
resourceStrlist* loaded the file "data/settings/window.conf"
resourceStrlist* loaded the file "data/settings/audio.conf"
resourceStrlist* loaded the file "data/settings/engine.conf"
Finised in 0.000443s
Pass 2
Finised in 2e-06s
Processing group "gui"
Unknown extension "directory"
Unknown extension "directory"
Unknown extension "directory"
Unknown extension "font~"
Unknown extension "font~"
Unknown extension "directory"
Unknown extension "prgm~"
Unknown extension "directory"
Unknown extension "frag~"
Unknown extension "vert~"
Unknown extension "directory"
Loading group "gui"
Pass 1
resourceImage* loaded the file "data/GUI/fonts/font-red-small/j-red-small.png"
<snipped font loading>
resourceImage* loaded the file "data/GUI/fonts/font-blue-small/9-blue-small.png"
resourceShader* loaded the file "data/GUI/shaders/standard.vert"
resourceShader* loaded the file "data/GUI/shaders/standard.frag"
resourceImage* loaded the file "data/GUI/ui_checkbox_sel.png"
resourceImage* loaded the file "data/GUI/ui_button.png"
resourceImage* loaded the file "data/GUI/ui_button_right.png"
resourceImage* loaded the file "data/GUI/ui_checkbox_unsel.png"
resourceImage* loaded the file "data/GUI/ui_button_left.png"
Finised in 0.032639s
Pass 2
resourceFont* loaded the file "data/GUI/fonts/font-red-small/red-small.font"
resourceFont* loaded the file "data/GUI/fonts/font-red/red.font"
resourceFont* loaded the file "data/GUI/fonts/font-blue/blue.font"
resourceFont* loaded the file "data/GUI/fonts/font-blue-small/blue-small.font"
Uniform 0
resourceProgram* loaded the file "data/GUI/shaders/standard.prgm"
Finised in 0.040822s
Updated
Recv
Receive
Hit line 169 in net_handle_connect_resp
Accepted
Recv
Receive
Hit line 192 in net_handle_header
Hit line 289 in loadMap
Updated
Processing group "Home"
Unknown extension "layout"
Unknown extension "model~"
Unknown extension "map~"
Loading group "Home"
Pass 1
Images 2 0x190c450
resourceImage* loaded the file "data/maps/Home/Images/grass.jpg"
Images 3 0x1987240
resourceImage* loaded the file "data/maps/Home/Images/grad.png"
resourceShader* loaded the file "data/maps/Home/Shaders/uv.frag"
resourceShader* loaded the file "data/maps/Home/Shaders/uv.vert"
resourceAudio* loaded the file "data/maps/Home/Sounds/music.ogg" with message: Music file
Finised in 0.026371s
Pass 2
Uniform 1
resourceProgram* loaded the file "data/maps/Home/Shaders/uv.prgm"
resourceModel* loaded the file "data/maps/Home/Models/box.model"
Finised in 0.000163s
Recv
Receive
Hit line 220 in net_handle_update_state
Hit line 250 in net_handle_added
Hit line 266 in net_handle_added_map
resourceImage* unloaded the file "data/maps/Home/Images/grass.jpg"
resourceImage* unloaded the file "data/maps/Home/Images/grad.png"
resourceProgram* unloaded the file "data/maps/Home/Shaders/uv.prgm"
resourceShader* unloaded the file "data/maps/Home/Shaders/uv.frag"
resourceShader* unloaded the file "data/maps/Home/Shaders/uv.vert"
resourceAudio* unloaded the file "data/maps/Home/Sounds/music.ogg"
resourceModel* unloaded the file "data/maps/Home/Models/box.model"
Deleting resources
resourceStrlist* unloaded the file "data/settings/window.conf"
resourceStrlist* unloaded the file "data/settings/audio.conf"
resourceStrlist* unloaded the file "data/settings/engine.conf"
resourceImage* unloaded the file "data/GUI/fonts/font-red-small/j-red-small.png"
<snipped font resources>
resourceImage* unloaded the file "data/GUI/fonts/font-blue-small/9-blue-small.png"
resourceProgram* unloaded the file "data/GUI/shaders/standard.prgm"
resourceShader* unloaded the file "data/GUI/shaders/standard.vert"
resourceShader* unloaded the file "data/GUI/shaders/standard.frag"
resourceImage* unloaded the file "data/GUI/ui_checkbox_sel.png"
resourceImage* unloaded the file "data/GUI/ui_button.png"
resourceImage* unloaded the file "data/GUI/ui_button_right.png"
resourceImage* unloaded the file "data/GUI/ui_checkbox_unsel.png"
resourceImage* unloaded the file "data/GUI/ui_button_left.png"
![HAL@HAL build]$
Server: Code: ![HAL@HAL build]$ ./server
Processing group "settings"
Loading group "settings"
Pass 1
resourceStrlist* loaded the file "data/settings/window.conf"
resourceStrlist* loaded the file "data/settings/audio.conf"
resourceStrlist* loaded the file "data/settings/engine.conf"
Finised in 0.000182s
Pass 2
Finised in 2e-06s
Processing group "Home"
Unknown extension "layout"
Unknown extension "model~"
Unknown extension "map~"
Loading group "Home"
Pass 1
resourceAudio* loaded the file "data/maps/Home/Sounds/music.ogg" with message: Music file
Finised in 0.000732s
Pass 2
Finised in 1e-06s
:: RED Engine version 0.1
:: Starting Bullet Physics
:: Making discrete dynamics world
:: Starting ENet
:: Init
:: Starting ENet server
:: Loading map
:: Server loaded
:: Starting game loop
1
790122854
:: Connect
3
:: Receive
:: net connect
:: net handle
Sent
3
:: Receive
:: Header
:: net request
:: net request
:: net handle
Sent
3
:: Receive
:: net request
:: net handle
Sent
2
:: Disconnect
:: Server stopping
Deleting resources
resourceStrlist* unloaded the file "data/settings/window.conf"
resourceStrlist* unloaded the file "data/settings/audio.conf"
resourceStrlist* unloaded the file "data/settings/engine.conf"
resourceModel* unloaded the file "data/maps/Home/Models/box.model"
![HAL@HAL build]$
There are quite a few debug numbers and such dumped, I will remove them since everything works just fine (Server still idles at 0.25% usage)
Oh, don't worry, this isn't entirely command-line, the screenies of the client aren't useful right now.
It seems to be saying an awful lot of things about physics, the world, and such-like; can I assume that for the most part those are simple initializations that don't really set up any useful event loops for now, and will be later expanded? Either way, though, this is great work.
Thanks. The resoure* parts load each resource in multiple passes. Models, shaders, programs, and images load in pass 1, models create VOA with VBOs and programs link the shaders in pass 2, and models find the images and shader program in pass 3. They work just fine right now.
Well, I do have event loops in the backend and client that currently handle networking (except the server which also handles physics). I am not sure on what to work on now. I will probably work on mouse/keyboard input in the client so I can pop into a spectator freecam and fly around the map.
Won't the client need physics as well so that it can do short-step simulation to compensate for server lag? I think almost every game with physics that I've played uses that sort of trick.