[ Revolude Engine - version 1004.22a ]
[ revolude.sourceforge.net ]
[ Description ]
Revolude is an open-source multiplayer game engine being developed from scratch primarily as a hobby project. The goal of developing Revolude is to create a fun and simple multiplayer action game where the majority of the game world itself is procedurally generated, as well as creating an example project for aspiring programmers to learn from and perhaps gain some inspiration from for their own ventures into the world of game development.
The Revolude engine uses SDL for creating the application window, user input, and SDL_Mixer for sound output. Rendering is done using OpenGL, and network communication uses Winsock. The version of SDL that this release is compiled with may not be the latest version of SDL, and so the version of SDL that this release is compiled for includes the SDL dlls that work with it.
[ Engine Guide ]
(..a more extensive guide will be included in a later release..)
At any point in time you can press the "~" key to reach the console. From there you can press tab to see a listing of all the existing console commands and engine variables. You can define your controls from the included menu, or you can set them yourself using the bind command from the console.
Default Controls:
W - run forward
A - run left
D - run right
S - run backward
Space - jump
CTRL - crouch
Tab - chat
F5 - screenshot (.tga in data folder)
I - move camera up
K - move camera down
J - move camera left
L - move camera right
U - move camera forward
O - move camera backward
F12 - hardcoded engine shutdown
[ Sound Synth Engine ]
So far the sound synth engine is only being used for the menu sounds.. But basically it works like this:
//begin generating a new sound
s_gen <sound name> <duration in milliseconds>
//additive waveform blend
s_add <waveform> <hertz> <amplitude from 0-1>
//averaging filter
s_flt <times to 'blur' sound>
//enveloping (liner point-to-point amplitude interpolation)
s_env <point in time> <amplitude>
//wonky stereo bounce, 'chorus' on a sinewave
s_chr <hertz> <balance deviation>
//finish sound
s_end
These are all console commands! All the scripts that aren't compiled by revcomp are just lists of console commands, including the GUI.
So, to play a sound:
s_play <soundname>
[ GUI System ]
Please just look at the existing menu scripts and the descriptions in the console of what each command does (type "gui_" then press tab).
[ Rendering Stuff ]
The engine knows how to render something by the underscored suffix on the texture or shader name.
'_add' = additive blend
'_norm' = normal map
'_alpha' = enable alpha blend (texture alpha channel or not)
There are a few others but they aren't being used at the moment.
[ Release Notes ]
+ 1004.22a:
New Features:
-Weapons!!!!!111
-Rudimentary gameplay dynamics (dying, respawning, etc)
-Particle system
-Added music and sounds
-Clients now run game logic
-Server sends client a copy of the running game logic at load time
-Gamelogic event system for transmitting server/client entity events over network reliably
-Added r_drawgrid
-Added cl_showevents, and sv_showevents
-Added 'skeleton' to avatar
-Avatar colors now gradient between eachother
-Added w_trees, w_grass, w_vscale world generation cvars
-Added r_texturescale to divide textures exponentially before they load
-Added vid_width/vid_height for nonfullscreen window sizing
-Normal mapped 'building' structures with procedural geometry
-Added cam_thirdperson
-Custom weapon specs
-New GUI element GUI_COLORSPEC, creates a RGB triangle for generating an angle/dist color
-Added r_shaders to disable shaders and revert to fixed-function rendering
-Added r_drawgrass, r_drawtrees, r_skylayers
-Greatly fleshed out game logic functionality
-Added non-engine definable entity fields to game logic VM
Fixes/Changes:
-Video mode enumeration in the graphics options menu
-m_sensitivity was being declared twice
-Vastly improved netcode, still not good enough
-Moved player's physics client-side, with server correcting highly disagreeable positions
-Network layer now has reliable packet channels for individual clients
-Fixed audio playing full volume outside MAX_AUDIODISTANCE
-Capped avatar limb movement to fix geometry explosions
-Fixed falling through terrain seams @ heightmap boundaries
-Moved message text to bottom center
-Fixed network code typo preventing reliable packets from being sent reliably
-Re-worked scene rendering to consolidate OpenGL state changes for more speed
-Fixed Audio_Initialize fail crash
-Lerping issues fixed
-Chasecam auto-disables if player has no modelindex
-Re-worked tree rendering style
-Added more grass LOD levels
-Added ID to SV_UPDATE packets, so client can ignore older ones
-Increased packet maxdata size
Known Issues:
-double jump as a remote client is usually 'corrected' by the unagreeing server
-procedural generation of world can become inconsistent with structures
eg: one machine may show a building where another does not (eek)
-shield 'nodes' were just added today to prototype an example, the proper
client/server gamelogic functions haven't been made and thus they
will not work over the network, nor did they ever 'shield' anything
they were purely for visual demonstration purposes.. feel free to
finish them and make new ones.
-netcode can timeout during a connect, but seems to be fine once ingame
-Revolude hogs the mouse in windowed mode, good luck!
+ 1003.01a:
New Features:
-Support for GLSL
-Added tree/foliage color sliders on Start Game menu
-Added eyes to avatar (and a color slider)
-Terrain polygon lines and grass have a light-ripple effect
-Server can now set a song for players to hear with w_music
-Player jump/land noises
-Added loading bitmaps as textures (via SDL_surface)
-Added simple HUD displaying health/energy bars
-Chasecam offset console cvars (cam_x/y/z) and commands to move the camera around
Fixes/Changes:
-Worldsize changed back from 256x256 to 128x128
-Editboxes in UI no longer 'leak' text outside themselves
-Editboxes now allow for longer strings
-Trees are drawn as solid polygons instead of wireframe
-Added 16:9 vid_mode resolutions
-Cleaned up camera code, added IRS functions to camera.cpp
-Fixed mouseover detection for GUI_KEYBIND not being accurate
-Fixed not being able to bind mouse buttons from keybinding menu screen
-Changed default engine font
-Cleaned up GUI/Input code for mouse/keyboard input
-Misc changes to engine menu
Known Bugs/Issues:
-Entities sometimes fall through terrain when resting in a crevace on the world boundary seam
-When running across the world boundary, players can occaisionally 'pop' up as if jumping
-Screens with unsupported native resolutions can't run in fullscreen
-Mouse when alt-tabbing from windowed mode can get stuck in engine window
-World geometry can get 'infront' of HUD
-Poor handling of netcode latency for local player when connected to
a remote server (jack up your cl_lerp in the meantime)
+ 912.17a:
New Features:
-Custom avatars, with dynamic animation system
-New GUI element, UI_AVATAR, simple tells system to draw generic avatar
using avatar cvar values.
-Added a screenshot console command (was hardcoded to F5)
Fixes/Changes:
-Fixed mouse cursor issues when running in windowed mode.
-Movement physics and collision with terrain code improved.
-Tweaked tree coloration, shading.
-Added more keys to controls option screen.
-Properly free memory from terrain patch visibility sets
-Remove player struct on client when entity is removed
-Increased netcode buffersize 20x
-Tweaked audio system and re-wrote 3D stereo code
-Re-loads main menu if connecting to a server times out
-Swapped out use of rand()/srand() for homebrew random number generator
-Added cubic-spline function for drawing legs/arms on avatars
+ 910.05a:
New Features:
-Server admin can set terrain-generation parameters on startgame screen.
-Clients connecting to a server now receive the parameters for re-creating the same terrain.
-new GUI element, UI_RAINBOW, which is a ROYGBIV slider for setting color console variables
Fixes/Changes:
-World dimensions doubled (from 128 to 256)..
-Trees now have 'leaves'
-Added a little diamond on the mouse cursor position for the GUI to make it less confusing
-Fixed crash-out on disconnect, engine was trying to output localplayer->entity->origin to screen
even though entity was dealloced on the disconnect.
-Fixed GUI_EDITBOX item behaving erraticly when clicked on/off etc..
-Fixed improper wrapping of entities when being drawn, entities would sometimes 'disappear' because of
bad detection of world boundary-wrapping situations.
-Properly calculate lerp vector for entities that crossed the world boundary between updates
received from the server.
-Remote clients smooth their position as received from the server 10x the cl_lerp value
to hide latency.
+ 909.21a:
New Features:
-Terrain Rendering system is in
-Added entity system, fully integrated into netcode with lag-compensation, movement
interpolation and extrapolation. Simple delta compression system has much room
for improvement.
-Added player-handling system, which translates player commands into player entity movements
and actions.
-Added net_fakeloss command to 'drop' every Nth packet that comes in.
-Added CL_PING/SV_PONG messages for latency determination
-Added console cvars: net_fakeloss, cl_showping, d_showfps, s_flt, cl_lerp, sv_lerp
-Added a bind command to the console, and some player commands
-Made a radical 'plasma' cursor for the GUI (move it around to charge it up!)
Fixes:
-Updates are no longer sent to all clients at the same sv_updaterate intervals. Clients
are now updated sv_updaterate times a second independant of one-another to spread out
outgoing packet traffic.
-Server better handles improperly formatted packets.
-Optimized entity processing loops by tracking how many active entities there are and looping
until that many are processed (instead of full MAX_ENTITIES)
-GUI uses vec3 at some points, caused problems with elements flickering because of un-initialized
z components.
-Re-arranged some low-level program flow, moved input system to beginning
-Bunch of other little things
+ 907.19a (Initial Release):
This is the first public release of what currently exists of the actual Revolude engine itself. My primary motivation for releasing something hardly resembling a game is to begin allowing the public to help me with testing and bug-finding, as I'd rather spend time coding than hunting down bugs myself. Mostly I am hoping someone would be willing to mess with all of the console commands, and feed them garbled parameters to see what happens, etc. and report these issues via the forums on my site. The netcode itself is functional, for now. There is no internet master-server list functionality, but the engine does locate games on the LAN subnet, and can connect to them. Revolude's multiplayer functionality is basically limited to a chat-room. Press 'Tab' to type a message to other players. Network communication occurs via port 13371 over UDP (if you need to port-forward to test with friends).
The entirety of all of Revolude's scripting functionality is basically just loading text files that contain lists of console commands. Take a look at main.txt in the 'data\snd' folder to see the GUI sound generation. Also, the entire menu is loaded from console scripts from 'data\menu', so take a look at that as well. Ideally I'd store all data files in a big data file, as opposed to a directory tree, I'm still debating making the move to such a system.
Current Features:
-Fully functional console system, featuring commands/cvars.
Press tab to see all commands (and auto-complete)
-Beginnings of GUI system, sliders, links, buttons,
checkboxes, etc.
-Beginnings of audio-generation system ('s_' commands)
-UDP network communication framework established
could use extensive testing.
Feature Todo List:
-Entity system, physics, game logic, etc
-Network communication of entity datas
-Player control of player's entity
-Incorporating scene generation/rendering from
recent work on terrain rendering
-Player 'avatar' geometry generation
-Texture generation system
-User-definable player-control configuration
[ Source Notes ]
The .dev project file for DevC++ is included, and outputs the Revolude.exe binary to [sourcedir]\..\build
The SDL libraries are now included into the source, so it shouldn't be too difficult to get it to compile. You will have to
include the libs into the linker if you are using a compiler other than DevC++. Apparently CodeBlocks is capable of importing
DevC++ project workspaces, so that should work.
[ Author Information ]
Charles Van Noland :: coding + interface design
radioteeth@gmail.com
Paul Hindt :: gfx + audio design
phindt@gmail.com