large commit. documented a bit. editor updates. general cleanup of everything

This commit is contained in:
Magnus Auvinen 2008-01-19 10:57:25 +00:00
parent 4eb7185694
commit dd21ae1bc7
54 changed files with 2714 additions and 2055 deletions

Binary file not shown.

View file

@ -0,0 +1 @@
#GÖùGITGITGITGIT

View file

@ -0,0 +1,51 @@
1.35
C/C++
/home/kma/code/teewars/trunk/src/engine/e_memheap.h 1197706562 0 /home/kma/code/teewars/trunk/src/engine/e_memheap.h
/home/kma/code/teewars/trunk/src/engine/client/ec_font.h 1200146774 0 /home/kma/code/teewars/trunk/src/engine/client/ec_font.h
/home/kma/code/teewars/trunk/src/engine/e_console.c 1200611479 0 /home/kma/code/teewars/trunk/src/engine/e_console.c
/home/kma/code/teewars/trunk/src/engine/e_if_modc.h 1200736124 1 Client Hooks
/home/kma/code/teewars/trunk/src/engine/e_protocol.h 1197711693 0 /home/kma/code/teewars/trunk/src/engine/e_protocol.h
/home/kma/code/teewars/trunk/src/engine/client/ec_inp.c 1200709481 0 /home/kma/code/teewars/trunk/src/engine/client/ec_inp.c
/home/kma/code/teewars/trunk/src/engine/e_memheap.c 1197707815 0 /home/kma/code/teewars/trunk/src/engine/e_memheap.c
/home/kma/code/teewars/trunk/src/engine/e_if_snd.h 1200736177 1 Sound
/home/kma/code/teewars/trunk/src/engine/e_keynames.c 1197706547 0 /home/kma/code/teewars/trunk/src/engine/e_keynames.c
/home/kma/code/teewars/trunk/src/engine/e_system.h 1197707754 1 /home/kma/code/teewars/trunk/src/engine/e_system.h
/home/kma/code/teewars/trunk/src/engine/e_if_client.h 1200739934 1 Constants
/home/kma/code/teewars/trunk/src/engine/e_if_gfx.h 1200736418 1 Structures
/home/kma/code/teewars/trunk/src/engine/e_server_interface.h 1200739892 0 /home/kma/code/teewars/trunk/src/engine/e_server_interface.h
/home/kma/code/teewars/trunk/src/engine/e_if_msg.h 1200736131 1 Messaging
/home/kma/code/teewars/trunk/src/engine/e_msg.c 1200708999 0 /home/kma/code/teewars/trunk/src/engine/e_msg.c
/home/kma/code/teewars/trunk/src/engine/server/es_server.c 1200709433 0 /home/kma/code/teewars/trunk/src/engine/server/es_server.c
/home/kma/code/teewars/trunk/src/engine/client/ec_font.c 1200146774 0 /home/kma/code/teewars/trunk/src/engine/client/ec_font.c
/home/kma/code/teewars/trunk/src/engine/docs/client_time.txt 1200739319 1 Time on the client
/home/kma/code/teewars/trunk/src/engine/e_engine.c 1200708926 0 /home/kma/code/teewars/trunk/src/engine/e_engine.c
/home/kma/code/teewars/trunk/src/engine/e_system.c 1200521738 0 /home/kma/code/teewars/trunk/src/engine/e_system.c
/home/kma/code/teewars/trunk/src/engine/e_snapshot.h 1197707840 0 /home/kma/code/teewars/trunk/src/engine/e_snapshot.h
/home/kma/code/teewars/trunk/src/engine/e_client_interface.h 1200739926 0 /home/kma/code/teewars/trunk/src/engine/e_client_interface.h
/home/kma/code/teewars/trunk/src/engine/e_if_mods.h 1200736122 1 Server Hooks
/home/kma/code/teewars/trunk/src/engine/client/ec_client.c 1200709471 0 /home/kma/code/teewars/trunk/src/engine/client/ec_client.c
/home/kma/code/teewars/trunk/src/engine/client/ec_srvbrowse.c 1200709484 0 /home/kma/code/teewars/trunk/src/engine/client/ec_srvbrowse.c
/home/kma/code/teewars/trunk/src/engine/e_detect.h 1197706565 0 /home/kma/code/teewars/trunk/src/engine/e_detect.h
/home/kma/code/teewars/trunk/src/engine/e_compression.c 1197707819 0 /home/kma/code/teewars/trunk/src/engine/e_compression.c
/home/kma/code/teewars/trunk/src/engine/e_config.c 1200521738 0 /home/kma/code/teewars/trunk/src/engine/e_config.c
/home/kma/code/teewars/trunk/src/engine/e_packer.h 1197706544 0 /home/kma/code/teewars/trunk/src/engine/e_packer.h
/home/kma/code/teewars/trunk/src/engine/e_config_variables.h 1200222141 0 /home/kma/code/teewars/trunk/src/engine/e_config_variables.h
/home/kma/code/teewars/trunk/src/engine/e_map.c 1200169662 0 /home/kma/code/teewars/trunk/src/engine/e_map.c
/home/kma/code/teewars/trunk/src/engine/e_if_server.h 1200736134 1 Server Hooks
/home/kma/code/teewars/trunk/src/engine/e_network.h 1198020654 0 /home/kma/code/teewars/trunk/src/engine/e_network.h
/home/kma/code/teewars/trunk/src/engine/e_packer.c 1197707860 0 /home/kma/code/teewars/trunk/src/engine/e_packer.c
/home/kma/code/teewars/trunk/src/engine/e_config.h 1200521738 0 /home/kma/code/teewars/trunk/src/engine/e_config.h
/home/kma/code/teewars/trunk/src/engine/e_keys.h 1197706560 0 /home/kma/code/teewars/trunk/src/engine/e_keys.h
/home/kma/code/teewars/trunk/src/engine/docs/prediction.txt 1200739838 1 Prediction
/home/kma/code/teewars/trunk/src/engine/e_datafile.h 1200146774 0 /home/kma/code/teewars/trunk/src/engine/e_datafile.h
/home/kma/code/teewars/trunk/src/engine/e_engine.h 1197706566 0 /home/kma/code/teewars/trunk/src/engine/e_engine.h
/home/kma/code/teewars/trunk/src/engine/e_snapshot.c 1200708962 0 /home/kma/code/teewars/trunk/src/engine/e_snapshot.c
/home/kma/code/teewars/trunk/src/engine/e_compression.h 1197706556 0 /home/kma/code/teewars/trunk/src/engine/e_compression.h
/home/kma/code/teewars/trunk/src/engine/e_console.h 1200611479 0 /home/kma/code/teewars/trunk/src/engine/e_console.h
/home/kma/code/teewars/trunk/src/engine/client/ec_snd.c 1200709488 0 /home/kma/code/teewars/trunk/src/engine/client/ec_snd.c
/home/kma/code/teewars/trunk/src/engine/e_common_interface.h 1200739880 0 /home/kma/code/teewars/trunk/src/engine/e_common_interface.h
/home/kma/code/teewars/trunk/src/engine/e_network.c 1198110343 0 /home/kma/code/teewars/trunk/src/engine/e_network.c
/home/kma/code/teewars/trunk/src/engine/e_if_inp.h 1200736117 1 Input
/home/kma/code/teewars/trunk/src/engine/e_if_other.h 1200739887 1 Engine Interface
/home/kma/code/teewars/trunk/src/engine/e_datafile.c 1200146774 0 /home/kma/code/teewars/trunk/src/engine/e_datafile.c
/home/kma/code/teewars/trunk/src/engine/client/ec_gfx.c 1200709490 0 /home/kma/code/teewars/trunk/src/engine/client/ec_gfx.c

Binary file not shown.

Binary file not shown.

Binary file not shown.

113
docs/conf/Languages.txt Normal file
View file

@ -0,0 +1,113 @@
Format: 1.35
# This is the Natural Docs languages file for this project. If you change
# anything here, it will apply to THIS PROJECT ONLY. If you'd like to change
# something for all your projects, edit the Languages.txt in Natural Docs'
# Config directory instead.
# You can prevent certain file extensions from being scanned like this:
# Ignore Extensions: [extension] [extension] ...
#-------------------------------------------------------------------------------
# SYNTAX:
#
# Unlike other Natural Docs configuration files, in this file all comments
# MUST be alone on a line. Some languages deal with the # character, so you
# cannot put comments on the same line as content.
#
# Also, all lists are separated with spaces, not commas, again because some
# languages may need to use them.
#
# Language: [name]
# Alter Language: [name]
# Defines a new language or alters an existing one. Its name can use any
# characters. If any of the properties below have an add/replace form, you
# must use that when using Alter Language.
#
# The language Shebang Script is special. It's entry is only used for
# extensions, and files with those extensions have their shebang (#!) lines
# read to determine the real language of the file. Extensionless files are
# always treated this way.
#
# The language Text File is also special. It's treated as one big comment
# so you can put Natural Docs content in them without special symbols. Also,
# if you don't specify a package separator, ignored prefixes, or enum value
# behavior, it will copy those settings from the language that is used most
# in the source tree.
#
# Extensions: [extension] [extension] ...
# [Add/Replace] Extensions: [extension] [extension] ...
# Defines the file extensions of the language's source files. You can
# redefine extensions found in the main languages file. You can use * to
# mean any undefined extension.
#
# Shebang Strings: [string] [string] ...
# [Add/Replace] Shebang Strings: [string] [string] ...
# Defines a list of strings that can appear in the shebang (#!) line to
# designate that it's part of the language. You can redefine strings found
# in the main languages file.
#
# Ignore Prefixes in Index: [prefix] [prefix] ...
# [Add/Replace] Ignored Prefixes in Index: [prefix] [prefix] ...
#
# Ignore [Topic Type] Prefixes in Index: [prefix] [prefix] ...
# [Add/Replace] Ignored [Topic Type] Prefixes in Index: [prefix] [prefix] ...
# Specifies prefixes that should be ignored when sorting symbols in an
# index. Can be specified in general or for a specific topic type.
#
#------------------------------------------------------------------------------
# For basic language support only:
#
# Line Comments: [symbol] [symbol] ...
# Defines a space-separated list of symbols that are used for line comments,
# if any.
#
# Block Comments: [opening sym] [closing sym] [opening sym] [closing sym] ...
# Defines a space-separated list of symbol pairs that are used for block
# comments, if any.
#
# Package Separator: [symbol]
# Defines the default package separator symbol. The default is a dot.
#
# [Topic Type] Prototype Enders: [symbol] [symbol] ...
# When defined, Natural Docs will attempt to get a prototype from the code
# immediately following the topic type. It stops when it reaches one of
# these symbols. Use \n for line breaks.
#
# Line Extender: [symbol]
# Defines the symbol that allows a prototype to span multiple lines if
# normally a line break would end it.
#
# Enum Values: [global|under type|under parent]
# Defines how enum values are referenced. The default is global.
# global - Values are always global, referenced as 'value'.
# under type - Values are under the enum type, referenced as
# 'package.enum.value'.
# under parent - Values are under the enum's parent, referenced as
# 'package.value'.
#
# Perl Package: [perl package]
# Specifies the Perl package used to fine-tune the language behavior in ways
# too complex to do in this file.
#
#------------------------------------------------------------------------------
# For full language support only:
#
# Full Language Support: [perl package]
# Specifies the Perl package that has the parsing routines necessary for full
# language support.
#
#-------------------------------------------------------------------------------
# The following languages are defined in the main file, if you'd like to alter
# them:
#
# Text File, Shebang Script, C/C++, C#, Java, JavaScript, Perl, Python,
# PHP, SQL, Visual Basic, Pascal, Assembly, Ada, Tcl, Ruby, Makefile,
# ActionScript, ColdFusion, R, Fortran
# If you add a language that you think would be useful to other developers
# and should be included in Natural Docs by default, please e-mail it to
# languages [at] naturaldocs [dot] org.

79
docs/conf/Menu.txt Normal file
View file

@ -0,0 +1,79 @@
Format: 1.35
# You can add a title and sub-title to your menu like this:
# Title: [project name]
# SubTitle: [subtitle]
# You can add a footer to your documentation like this:
# Footer: [text]
# If you want to add a copyright notice, this would be the place to do it.
# --------------------------------------------------------------------------
#
# Cut and paste the lines below to change the order in which your files
# appear on the menu. Don't worry about adding or removing files, Natural
# Docs will take care of that.
#
# You can further organize the menu by grouping the entries. Add a
# "Group: [name] {" line to start a group, and add a "}" to end it.
#
# You can add text and web links to the menu by adding "Text: [text]" and
# "Link: [name] ([URL])" lines, respectively.
#
# The formatting and comments are auto-generated, so don't worry about
# neatness when editing the file. Natural Docs will clean it up the next
# time it is run. When working with groups, just deal with the braces and
# forget about the indentation and comments.
#
# --------------------------------------------------------------------------
Group: Articles {
File: Prediction (docs/prediction.txt)
File: Time on the client (docs/client_time.txt)
} # Group: Articles
Group: Reference {
File: Lowlevel Library (no auto-title, e_system.h)
Group: Common Interface {
File: Engine Interface (e_if_other.h)
File: Message Packing (no auto-title, e_if_msg.h)
} # Group: Common Interface
Group: Client Interface {
File: General (no auto-title, e_if_client.h)
File: Sound (no auto-title, e_if_snd.h)
File: Input (no auto-title, e_if_inp.h)
File: Graphics (no auto-title, e_if_gfx.h)
} # Group: Client Interface
Group: Server Interface {
File: General (no auto-title, e_if_server.h)
} # Group: Server Interface
Group: Mod Hooks {
File: Client Side (no auto-title, e_if_modc.h)
File: Server Side (no auto-title, e_if_mods.h)
} # Group: Mod Hooks
} # Group: Reference
Group: Index {
Index: Everything
Constant Index: Constants
File Index: Files
Function Index: Functions
Class Index: Classes
Variable Index: Variables
} # Group: Index

66
docs/conf/Menu_Backup.txt Normal file
View file

@ -0,0 +1,66 @@
Format: 1.35
# You can add a title and sub-title to your menu like this:
# Title: [project name]
# SubTitle: [subtitle]
# You can add a footer to your documentation like this:
# Footer: [text]
# If you want to add a copyright notice, this would be the place to do it.
# --------------------------------------------------------------------------
#
# Cut and paste the lines below to change the order in which your files
# appear on the menu. Don't worry about adding or removing files, Natural
# Docs will take care of that.
#
# You can further organize the menu by grouping the entries. Add a
# "Group: [name] {" line to start a group, and add a "}" to end it.
#
# You can add text and web links to the menu by adding "Text: [text]" and
# "Link: [name] ([URL])" lines, respectively.
#
# The formatting and comments are auto-generated, so don't worry about
# neatness when editing the file. Natural Docs will clean it up the next
# time it is run. When working with groups, just deal with the braces and
# forget about the indentation and comments.
#
# --------------------------------------------------------------------------
File: e_system.h (e_system.h)
File: Engine Interface (e_interface.h)
Group: External {
Group: Glfw {
File: Does this work? (external/glfw/lib/x11/x11_window.c)
File: glfw.h (external/glfw/include/GL/glfw.h)
File: lib/win32/win32_window.c (external/glfw/lib/win32/win32_window.c)
File: Only Linux joystick input is supported at the moment. Other (external/glfw/lib/x11/x11_joystick.c)
File: Some compilers complains about hinst and x never being used - (external/glfw/lib/win32/win32_dllmain.c)
} # Group: Glfw
File: pnglite/pnglite.h (external/pnglite/pnglite.h)
Group: Portaudio {
File: for the default AudioUnit, we could use the (external/portaudio/pa_mac_core.c)
File: make sure this validation list is kept syncronised with the one in (external/portaudio/pa_front.c)
File: this code depends on the sample format constants being in (external/portaudio/pa_converters.c)
} # Group: Portaudio
File: the deflate() code requires max_lazy >= MIN_MATCH and max_chain >= 4 (external/zlib/deflate.c)
} # Group: External
Group: Index {
Index: Everything
File Index: Files
Function Index: Functions
Variable Index: Variables
} # Group: Index

84
docs/conf/Topics.txt Normal file
View file

@ -0,0 +1,84 @@
Format: 1.35
# This is the Natural Docs topics file for this project. If you change anything
# here, it will apply to THIS PROJECT ONLY. If you'd like to change something
# for all your projects, edit the Topics.txt in Natural Docs' Config directory
# instead.
# If you'd like to prevent keywords from being recognized by Natural Docs, you
# can do it like this:
# Ignore Keywords: [keyword], [keyword], ...
#
# Or you can use the list syntax like how they are defined:
# Ignore Keywords:
# [keyword]
# [keyword], [plural keyword]
# ...
#-------------------------------------------------------------------------------
# SYNTAX:
#
# Topic Type: [name]
# Alter Topic Type: [name]
# Creates a new topic type or alters one from the main file. Each type gets
# its own index and behavior settings. Its name can have letters, numbers,
# spaces, and these charaters: - / . '
#
# Plural: [name]
# Sets the plural name of the topic type, if different.
#
# Keywords:
# [keyword]
# [keyword], [plural keyword]
# ...
# Defines or adds to the list of keywords for the topic type. They may only
# contain letters, numbers, and spaces and are not case sensitive. Plural
# keywords are used for list topics. You can redefine keywords found in the
# main topics file.
#
# Index: [yes|no]
# Whether the topics get their own index. Defaults to yes. Everything is
# included in the general index regardless of this setting.
#
# Scope: [normal|start|end|always global]
# How the topics affects scope. Defaults to normal.
# normal - Topics stay within the current scope.
# start - Topics start a new scope for all the topics beneath it,
# like class topics.
# end - Topics reset the scope back to global for all the topics
# beneath it.
# always global - Topics are defined as global, but do not change the scope
# for any other topics.
#
# Class Hierarchy: [yes|no]
# Whether the topics are part of the class hierarchy. Defaults to no.
#
# Variable Type: [yes|no]
# Whether the topics can be a variable type. Defaults to no.
#
# Page Title If First: [yes|no]
# Whether the topic's title becomes the page title if it's the first one in
# a file. Defaults to no.
#
# Break Lists: [yes|no]
# Whether list topics should be broken into individual topics in the output.
# Defaults to no.
#
# Can Group With: [type], [type], ...
# Defines a list of topic types that this one can possibly be grouped with.
# Defaults to none.
#-------------------------------------------------------------------------------
# The following topics are defined in the main file, if you'd like to alter
# their behavior or add keywords:
#
# Generic, Class, Interface, Section, File, Group, Function, Variable,
# Property, Type, Constant, Enumeration, Event, Delegate, Macro,
# Database, Database Table, Database View, Database Index, Database
# Cursor, Database Trigger, Cookie, Build Target
# If you add something that you think would be useful to other developers
# and should be included in Natural Docs by default, please e-mail it to
# topics [at] naturaldocs [dot] org.

View file

@ -1,5 +1 @@
#!/bin/sh
docs/doctool/NaturalDocs -r -s Small -i src/ -i docs/articles -o HTML docs/output -p docs/config
#rm -Rf ~/public_html/.docs
#cp -Rf docs/output ~/public_html/.docs
perl tools/naturaldocs/NaturalDocs -i src/engine -xi src/engine/external -p docs/conf -o html docs/output

View file

@ -8,7 +8,7 @@
#include <engine/e_system.h>
#include <engine/e_engine.h>
#include <engine/e_interface.h>
#include <engine/e_client_interface.h>
#include <engine/e_protocol.h>
#include <engine/e_snapshot.h>
@ -65,7 +65,7 @@ static float ticktime = 0;
/* predicted time */
static int current_predtick = 0;
static float intrapredtick = 0;
static float predintratick = 0;
static struct /* TODO: handle input better */
{
@ -237,7 +237,7 @@ int snap_num_items(int snapid)
/* ------ time functions ------ */
float client_intratick() { return intratick; }
float client_intrapredtick() { return intrapredtick; }
float client_predintratick() { return predintratick; }
float client_ticktime() { return ticktime; }
int client_tick() { return current_tick; }
int client_predtick() { return current_predtick; }
@ -924,7 +924,7 @@ static void client_update()
/*tg_add(&predicted_time_graph, pred_now, 0); */
int prev_pred_tick = (int)(pred_now*50/time_freq());
int new_pred_tick = prev_pred_tick+1;
static float last_intrapred = 0;
static float last_predintra = 0;
intratick = (now - prevtick_start) / (float)(curtick_start-prevtick_start);
ticktime = (now - curtick_start) / (freq/(float)SERVER_TICK_SPEED);
@ -933,12 +933,11 @@ static void client_update()
curtick_start = new_pred_tick*time_freq()/50;
prevtick_start = prev_pred_tick*time_freq()/50;
intrapredtick = (pred_now - prevtick_start) / (float)(curtick_start-prevtick_start);
predintratick = (pred_now - prevtick_start) / (float)(curtick_start-prevtick_start);
if(new_pred_tick > current_predtick)
{
last_intrapred = intrapredtick;
last_predintra = predintratick;
current_predtick = new_pred_tick;
repredict = 1;
@ -946,9 +945,9 @@ static void client_update()
client_send_input();
}
if(intrapredtick < last_intrapred)
if(predintratick < last_predintra)
dbg_msg("client", "prediction time goes backwards, that can't be good");
last_intrapred = intrapredtick;
last_predintra = predintratick;
}
/* only do sane predictions */

View file

@ -3,7 +3,7 @@
#include <engine/external/pnglite/pnglite.h>
#include <engine/e_system.h>
#include <engine/e_interface.h>
#include <engine/e_client_interface.h>
#include <engine/e_engine.h>
#include <engine/e_config.h>
#include <engine/e_keys.h>

View file

@ -3,7 +3,7 @@
#include <engine/external/glfw/include/GL/glfw.h>
#include <engine/e_system.h>
#include <engine/e_interface.h>
#include <engine/e_client_interface.h>
#include <engine/e_config.h>
static int keyboard_state[2][1024]; /* TODO: fix this!! */
@ -53,7 +53,7 @@ enum
INPUT_BUFFER_SIZE=32
};
static INPUTEVENT input_events[INPUT_BUFFER_SIZE];
static INPUT_EVENT input_events[INPUT_BUFFER_SIZE];
static int num_events = 0;
static void add_event(char c, int key)
@ -76,11 +76,11 @@ void inp_clear_events()
num_events = 0;
}
INPUTEVENT inp_get_event(int index)
INPUT_EVENT inp_get_event(int index)
{
if(index < 0 || index >= num_events)
{
INPUTEVENT e = {0,0};
INPUT_EVENT e = {0,0};
return e;
}

View file

@ -1,6 +1,6 @@
/* copyright (c) 2007 magnus auvinen, see licence.txt for more info */
#include <engine/e_system.h>
#include <engine/e_interface.h>
#include <engine/e_client_interface.h>
#include <engine/e_config.h>
#include <engine/external/portaudio/portaudio.h>

View file

@ -1,7 +1,7 @@
/* copyright (c) 2007 magnus auvinen, see licence.txt for more info */
#include <engine/e_system.h>
#include <engine/e_network.h>
#include <engine/e_interface.h>
#include <engine/e_client_interface.h>
#include <engine/e_config.h>
#include <engine/e_memheap.h>

View file

@ -0,0 +1,4 @@
Title: Time on the client
tick, intratick
predtick, predintratick

View file

@ -0,0 +1,19 @@
Title: Prediction
The engine calls <modc_predict> when reprediction is required. This happens usally when new data has arrived from the server. <modc_predict> should to prediction from the current snapshot and current snapshot tick (<client_tick> + 1) upto and including the tick returned by <client_predtick>.
Predicted input sent to the server can be retrived by calling <client_get_input> with the corresponding tick that you want the input for. Here is a simple example of how it might look.
> void modc_predict()
> {
> int tick;
> prediction_reset();
>
> for(tick = client_tick()+1; tick <= client_predtick(); tick++)
> {
> MY_INPUT *input = (MY_INPUT *)client_get_input();
> if(input)
> prediction_apply_input(input);
> prediction_tick();
> }
> }

View file

@ -0,0 +1,21 @@
/* copyright (c) 2007 magnus auvinen, see licence.txt for more info */
#ifndef ENGINE_CLIENT_INTERFACE_H
#define ENGINE_CLIENT_INTERFACE_H
#ifdef __cplusplus
extern "C" {
#endif
#include "e_if_other.h"
#include "e_if_client.h"
#include "e_if_snd.h"
#include "e_if_gfx.h"
#include "e_if_inp.h"
#include "e_if_msg.h"
#include "e_if_modc.h"
#ifdef __cplusplus
}
#endif
#endif

View file

@ -0,0 +1,16 @@
/* copyright (c) 2007 magnus auvinen, see licence.txt for more info */
#ifndef ENGINE_COMMON_INTERFACE_H
#define ENGINE_COMMON_INTERFACE_H
#ifdef __cplusplus
extern "C" {
#endif
#include "e_if_other.h"
#include "e_if_msg.h"
#ifdef __cplusplus
}
#endif
#endif

View file

@ -3,7 +3,8 @@
#include <stdio.h>
#include <engine/e_system.h>
#include <engine/e_interface.h>
#include <engine/e_server_interface.h>
/*#include <engine/e_client_interface.h>*/
#include <engine/e_config.h>
#include <engine/e_console.h>

376
src/engine/e_if_client.h Normal file
View file

@ -0,0 +1,376 @@
/* copyright (c) 2007 magnus auvinen, see licence.txt for more info */
#ifndef ENGINE_IF_CLIENT_H
#define ENGINE_IF_CLIENT_H
/*
Section: Constants
*/
enum
{
/* Constants: Client States
CLIENTSTATE_OFFLINE - The client is offline.
CLIENTSTATE_CONNECTING - The client is trying to connect to a server.
CLIENTSTATE_LOADING - The client has connected to a server and is loading resources.
CLIENTSTATE_ONLINE - The client is connected to a server and running the game.
CLIENTSTATE_QUITING - The client is quiting.
*/
CLIENTSTATE_OFFLINE=0,
CLIENTSTATE_CONNECTING,
CLIENTSTATE_LOADING,
CLIENTSTATE_ONLINE,
CLIENTSTATE_QUITING,
/* Constants: Image Formats
IMG_AUTO - Lets the engine choose the format.
IMG_RGB - 8-Bit uncompressed RGB
IMG_RGBA - 8-Bit uncompressed RGBA
IMG_ALPHA - 8-Bit uncompressed alpha
*/
IMG_AUTO=-1,
IMG_RGB=0,
IMG_RGBA=1,
IMG_ALPHA=2,
/* Constants: Server Browser Sorting
BROWSESORT_NAME - Sort by name.
BROWSESORT_PING - Sort by ping.
BROWSESORT_MAP - Sort by map
BROWSESORT_GAMETYPE - Sort by game type. DM, TDM etc.
BROWSESORT_PROGRESSION - Sort by progression.
BROWSESORT_NUMPLAYERS - Sort after how many players there are on the server.
*/
BROWSESORT_NAME = 0,
BROWSESORT_PING,
BROWSESORT_MAP,
BROWSESORT_GAMETYPE,
BROWSESORT_PROGRESSION,
BROWSESORT_NUMPLAYERS
};
/*
Section: Structures
*/
/*
Structure: SERVER_INFO
*/
typedef struct
{
int sorted_index;
int server_index;
int progression;
int game_type;
int max_players;
int num_players;
int flags;
int latency; /* in ms */
char name[64];
char map[32];
char version[32];
char address[24];
char player_names[16][48];
int player_scores[16];
} SERVER_INFO;
/*
Section: Functions
*/
/**********************************************************************************
Group: Time
**********************************************************************************/
/*
Function: client_tick
Returns the tick of the current snapshot.
*/
int client_tick();
/*
Function: client_intratick
Returns the current intratick.
Remarks:
The intratick is how far gone the time is from the previous snapshot to the current.
0.0 means that it on the previous snapshot. 0.5 means that it's halfway to the current,
and 1.0 means that it is on the current snapshot. It can go beyond 1.0 which means that
the client has started to extrapolate due to lack of data from the server.
See Also:
<client_tick>
*/
float client_intratick();
/*
Function: client_predtick
Returns the current predicted tick.
*/
int client_predtick();
/*
Function: client_predintratick
Returns the current preticted intra tick.
Remarks:
This is the same as <client_intratick> but for the current predicted tick and
previous predicted tick.
See Also:
<client_intratick>
*/
float client_predintratick();
/*
Function: client_ticktime
TODO
Arguments:
arg1 - desc
Returns:
See Also:
<other_func>
*/
float client_ticktime();
/*
Function: client_tickspeed
Returns how many ticks per second the client is doing.
Remarks:
This will be the same as the server tick speed.
*/
int client_tickspeed();
/*
Function: client_frametime
Returns how long time the last frame took to process.
*/
float client_frametime();
/*
Function: client_localtime
Returns the clients local time.
Remarks:
The local time is set to 0 when the client starts and when
it connects to a server. Can be used for client side effects.
*/
float client_localtime();
/**********************************************************************************
Group: Server Browser
**********************************************************************************/
/*
Function: client_serverbrowse_refresh
Issues a refresh of the server browser.
Arguments:
lan - Tells the function if it should do a LAN listing or an Internet listing.
Remarks:
This will cause a broadcast on the local network if the lan argument is set.
Otherwise it call ask all the master servers for their servers lists.
*/
void client_serverbrowse_refresh(int lan);
/*
Function: client_serverbrowse_sorted_get
Returns server info from the sorted list.
Arguments:
index - Zero based index into the sorted list.
See Also:
<client_serverbrowse_sorted_num>
*/
SERVER_INFO *client_serverbrowse_sorted_get(int index);
/*
Function: client_serverbrowse_sorted_num
Returns how many servers there are in the sorted list.
See Also:
<client_serverbrowse_sorted_get>
*/
int client_serverbrowse_sorted_num();
/*
Function: client_serverbrowse_get
TODO
Arguments:
arg1 - desc
Returns:
See Also:
<other_func>
*/
SERVER_INFO *client_serverbrowse_get(int index);
/*
Function: client_serverbrowse_num
TODO
Arguments:
arg1 - desc
Returns:
See Also:
<other_func>
*/
int client_serverbrowse_num();
/*
Function: client_serverbrowse_num_requests
TODO
Arguments:
arg1 - desc
Returns:
See Also:
<other_func>
*/
int client_serverbrowse_num_requests();
/*
Function: client_serverbrowse_update
TODO
Arguments:
arg1 - desc
Returns:
See Also:
<other_func>
*/
void client_serverbrowse_update();
/**********************************************************************************
Group: Actions
**********************************************************************************/
/*
Function: client_connect
Connects to a server at the specified address.
Arguments:
address - Address of the server to connect to.
See Also:
<client_disconnect>
*/
void client_connect(const char *address);
/*
Function: client_disconnect
Disconnects from the current server.
Remarks:
Does nothing if not connected to a server.
See Also:
<client_connect, client_quit>
*/
void client_disconnect();
/*
Function: client_quit
Tells to client to shutdown.
See Also:
<client_disconnect>
*/
void client_quit();
void client_entergame();
/*
Function: client_rcon
Sends a command to the server to execute on it's console.
Arguments:
cmd - The command to send.
Remarks:
The client must have the correct rcon password to connect.
*/
void client_rcon(const char *cmd);
/**********************************************************************************
Group: Other
**********************************************************************************/
/*
Function: client_get_input
TODO
Arguments:
arg1 - desc
Returns:
See Also:
<other_func>
*/
int *client_get_input(int tick);
/*
Function: client_direct_input
TODO
Arguments:
arg1 - desc
Returns:
See Also:
<other_func>
*/
void client_direct_input(int *input, int size);
/*
Function: client_error_string
TODO
Arguments:
arg1 - desc
Returns:
See Also:
<other_func>
*/
const char *client_error_string();
/*
Function: client_connection_problems
Returns 1 if the client is connection problems.
Remarks:
Connections problems usually means that the client havn't recvived any data
from the server in a while.
*/
int client_connection_problems();
/*
Function: client_state
Returns the state of the client.
See Also:
<Client States>
*/
int client_state();
#endif

578
src/engine/e_if_gfx.h Normal file
View file

@ -0,0 +1,578 @@
/* copyright (c) 2007 magnus auvinen, see licence.txt for more info */
#ifndef ENGINE_IF_GFX_H
#define ENGINE_IF_GFX_H
/*
Section: Structures
*/
/*
Structure: IMAGE_INFO
*/
typedef struct
{
/* Variable: width
Contains the width of the image */
int width;
/* Variable: height
Contains the height of the image */
int height;
/* Variable: format
Contains the format of the image. See <Image Formats> for more information. */
int format;
/* Variable: data
Pointer to the image data. */
void *data;
} IMAGE_INFO;
/*
Structure: VIDEO_MODE
*/
typedef struct
{
int width, height;
int red, green, blue;
} VIDEO_MODE;
/*
Section: Functions
*/
/*
Group: Quads
*/
/*
Function: gfx_quads_begin
Begins a quad drawing session.
Remarks:
This functions resets the rotation, color and subset.
End the session by using <gfx_quads_end>.
You can't change texture or blending mode during a session.
See Also:
<gfx_quads_end>
*/
void gfx_quads_begin();
/*
Function: gfx_quads_end
Ends a quad session.
See Also:
<gfx_quads_begin>
*/
void gfx_quads_end();
/*
Function: gfx_quads_setrotation
Sets the rotation to use when drawing a quad.
Arguments:
angle - Angle in radians.
Remarks:
The angle is reset when <gfx_quads_begin> is called.
*/
void gfx_quads_setrotation(float angle);
/*
Function: gfx_quads_setsubset
Sets the uv coordinates to use.
Arguments:
tl_u - Top-left U value.
tl_v - Top-left V value.
br_u - Bottom-right U value.
br_v - Bottom-right V value.
Remarks:
O,0 is top-left of the texture and 1,1 is bottom-right.
The color is reset when <gfx_quads_begin> is called.
*/
void gfx_quads_setsubset(float tl_u, float tl_v, float br_u, float br_v);
/*
Function: gfx_quads_setsubset_free
TODO
Arguments:
arg1 - desc
Returns:
See Also:
<other_func>
*/
void gfx_quads_setsubset_free(
float x0, float y0,
float x1, float y1,
float x2, float y2,
float x3, float y3);
/*
Function: gfx_quads_drawTL
Draws a quad by specifying the top-left point.
Arguments:
x - X coordinate of the top-left corner.
y - Y coordinate of the top-left corner.
width - Width of the quad.
height - Height of the quad.
Remarks:
Rotation still occurs from the center of the quad.
You must call <gfx_quads_begin> before calling this function.
See Also:
<gfx_quads_draw, gfx_quads_draw_freeform>
*/
void gfx_quads_drawTL(float x, float y, float width, float height);
/*
Function: gfx_quads_draw
Draws a quad by specifying the center point.
Arguments:
x - X coordinate of the center.
y - Y coordinate of the center.
width - Width of the quad.
height - Height of the quad.
Remarks:
You must call <gfx_quads_begin> before calling this function.
See Also:
<gfx_quads_drawTL, gfx_quads_draw_freeform>
*/
void gfx_quads_draw(float x, float y, float w, float h);
/*
Function: gfx_quads_draw_freeform
Draws a quad by specifying the corner points.
Arguments:
x0, y0 - Coordinates of the upper left corner.
x1, y1 - Coordinates of the upper right corner.
x2, y2 - Coordinates of the lower left corner. // TODO: DOUBLE CHECK!!!
x3, y3 - Coordinates of the lower right corner. // TODO: DOUBLE CHECK!!!
See Also:
<gfx_quads_draw, gfx_quads_drawTL>
*/
void gfx_quads_draw_freeform(
float x0, float y0,
float x1, float y1,
float x2, float y2,
float x3, float y3);
/*
Function: gfx_quads_text
TODO
Arguments:
arg1 - desc
Returns:
See Also:
<other_func>
*/
void gfx_quads_text(float x, float y, float size, const char *text);
/*
Group: Lines
*/
/*
Function: gfx_lines_begin
TODO
Arguments:
arg1 - desc
Returns:
See Also:
<other_func>
*/
void gfx_lines_begin();
/*
Function: gfx_lines_draw
TODO
Arguments:
arg1 - desc
Returns:
See Also:
<other_func>
*/
void gfx_lines_draw(float x0, float y0, float x1, float y1);
/*
Function: gfx_lines_end
TODO
Arguments:
arg1 - desc
Returns:
See Also:
<other_func>
*/
void gfx_lines_end();
/*
Group: Text
*/
/*
Function: gfx_text
TODO
Arguments:
arg1 - desc
Returns:
See Also:
<other_func>
*/
void gfx_text(void *font, float x, float y, float size, const char *text, int max_width);
/*
Function: gfx_text_width
TODO
Arguments:
arg1 - desc
Returns:
See Also:
<other_func>
*/
float gfx_text_width(void *font, float size, const char *text, int length);
/*
Function: gfx_text_color
TODO
Arguments:
arg1 - desc
Returns:
See Also:
<other_func>
*/
void gfx_text_color(float r, float g, float b, float a);
/*
Function: gfx_text_set_default_font
TODO
Arguments:
arg1 - desc
Returns:
See Also:
<other_func>
*/
void gfx_text_set_default_font(void *font);
/*
Group: Other
*/
/*
Function: gfx_get_video_modes
Fetches a list of all the available video modes.
Arguments:
list - An array to recive the modes. Must be able to contain maxcount number of modes.
maxcount - The maximum number of modes to fetch.
Returns:
The number of video modes that was fetched.
*/
int gfx_get_video_modes(VIDEO_MODE *list, int maxcount);
/* image loaders */
/*
Function: gfx_load_png
Loads a PNG image from disk.
Arguments:
img - Pointer to an structure to be filled out with the image information.
filename - Filename of the image to load.
Returns:
Returns non-zero on success and zero on error.
Remarks:
The caller are responsible for cleaning up the allocated memory in the IMAGE_INFO structure.
See Also:
<gfx_load_texture>
*/
int gfx_load_png(IMAGE_INFO *img, const char *filename);
/* textures */
/*
Function: gfx_load_texture
Loads a texture from a file. TGA and PNG supported.
Arguments:
filename - Null terminated string to the file to load.
store_format - What format to store on gfx card as.
Returns:
An ID to the texture. -1 on failure.
See Also:
<gfx_unload_texture, gfx_load_png>
*/
int gfx_load_texture(const char *filename, int store_format);
/*
Function: gfx_load_texture_raw
Loads a texture from memory.
Arguments:
w - Width of the texture.
h - Height of the texture.
data - Pointer to the pixel data.
format - Format of the pixel data.
store_format - The format to store the texture on the graphics card.
Returns:
An ID to the texture. -1 on failure.
Remarks:
The pixel data should be in RGBA format with 8 bit per component.
So the total size of the data should be w*h*4.
See Also:
<gfx_unload_texture>
*/
int gfx_load_texture_raw(int w, int h, int format, const void *data, int store_format);
/*
Function: gfx_texture_set
Sets the active texture.
Arguments:
id - ID to the texture to set.
*/
void gfx_texture_set(int id);
/*
Function: gfx_unload_texture
Unloads a texture.
Arguments:
id - ID to the texture to unload.
See Also:
<gfx_load_texture_tga>, <gfx_load_texture_raw>
Remarks:
NOT IMPLEMENTED
*/
int gfx_unload_texture(int id);
/*
Function: gfx_clear
Clears the screen with the specified color.
Arguments:
r - Red component.
g - Green component.
b - Red component.
Remarks:
The value of the components are given in 0.0 - 1.0 ranges.
*/
void gfx_clear(float r, float g, float b);
/*
Function: gfx_screenaspect
Returns the aspect ratio between width and height.
See Also:
<gfx_screenwidth>, <gfx_screenheight>
*/
float gfx_screenaspect();
/*
Function: gfx_screenwidth
Returns the screen width.
See Also:
<gfx_screenheight>
*/
int gfx_screenwidth();
/*
Function: gfx_screenheight
Returns the screen height.
See Also:
<gfx_screenwidth>
*/
int gfx_screenheight();
/*
Function: gfx_mapscreen
Specifies the coordinate system for the screen.
Arguments:
tl_x - Top-left X
tl_y - Top-left Y
br_x - Bottom-right X
br_y - Bottom-right y
*/
void gfx_mapscreen(float tl_x, float tl_y, float br_x, float br_y);
/*
Function: gfx_blend_normal
Set the active blending mode to normal (src, 1-src).
Remarks:
This must be used before calling <gfx_quads_begin>.
This is equal to glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA).
See Also:
<gfx_blend_additive>
*/
void gfx_blend_normal();
/*
Function: gfx_blend_additive
Set the active blending mode to additive (src, one).
Remarks:
This must be used before calling <gfx_quads_begin>.
This is equal to glBlendFunc(GL_SRC_ALPHA, GL_ONE).
See Also:
<gfx_blend_normal>
*/
void gfx_blend_additive();
/*
Function: gfx_setcolorvertex
Sets the color of a vertex.
Arguments:
i - Index to the vertex.
r - Red value.
g - Green value.
b - Blue value.
a - Alpha value.
Remarks:
The color values are from 0.0 to 1.0.
The color is reset when <gfx_quads_begin> is called.
*/
void gfx_setcolorvertex(int i, float r, float g, float b, float a);
/*
Function: gfx_setcolor
Sets the color of all the vertices.
Arguments:
r - Red value.
g - Green value.
b - Blue value.
a - Alpha value.
Remarks:
The color values are from 0.0 to 1.0.
The color is reset when <gfx_quads_begin> is called.
*/
void gfx_setcolor(float r, float g, float b, float a);
/*
Function: gfx_getscreen
TODO
Arguments:
arg1 - desc
Returns:
See Also:
<other_func>
*/
void gfx_getscreen(float *tl_x, float *tl_y, float *br_x, float *br_y);
/*
Function: gfx_memory_usage
TODO
Arguments:
arg1 - desc
Returns:
See Also:
<other_func>
*/
int gfx_memory_usage();
/*
Function: gfx_screenshot
TODO
Arguments:
arg1 - desc
Returns:
See Also:
<other_func>
*/
void gfx_screenshot();
/*
Function: gfx_clip_enable
TODO
Arguments:
arg1 - desc
Returns:
See Also:
<other_func>
*/
void gfx_clip_enable(int x, int y, int w, int h);
/*
Function: gfx_clip_disable
TODO
Arguments:
arg1 - desc
Returns:
See Also:
<other_func>
*/
void gfx_clip_disable();
#endif

236
src/engine/e_if_inp.h Normal file
View file

@ -0,0 +1,236 @@
/* copyright (c) 2007 magnus auvinen, see licence.txt for more info */
#ifndef ENGINE_IF_INP_H
#define ENGINE_IF_INP_H
/*
Section: Input
*/
/*
Structure: INPUT_EVENT
*/
typedef struct
{
char ch;
int key;
} INPUT_EVENT;
/*
Function: inp_mouse_relative
Fetches the mouse movements.
Arguments:
x - Pointer to the variable that should get the X movement.
y - Pointer to the variable that should get the Y movement.
*/
void inp_mouse_relative(int *x, int *y);
/*
Function: inp_mouse_scroll
TODO
Arguments:
arg1 - desc
Returns:
See Also:
<other_func>
*/
int inp_mouse_scroll();
/*
Function: inp_key_pressed
Checks if a key is pressed.
Arguments:
key - Index to the key to check
Returns:
Returns 1 if the button is pressed, otherwise 0.
Remarks:
Check keys.h for the keys.
*/
int inp_key_pressed(int key);
/* input */
/*
Function: inp_key_was_pressed
TODO
Arguments:
arg1 - desc
Returns:
See Also:
<other_func>
*/
int inp_key_was_pressed(int key);
/*
Function: inp_key_down
TODO
Arguments:
arg1 - desc
Returns:
See Also:
<other_func>
*/
int inp_key_down(int key);
/*
Function: inp_num_events
TODO
Arguments:
arg1 - desc
Returns:
See Also:
<other_func>
*/
int inp_num_events();
/*
Function: inp_get_event
TODO
Arguments:
arg1 - desc
Returns:
See Also:
<other_func>
*/
INPUT_EVENT inp_get_event(int index);
/*
Function: inp_clear_events
TODO
Arguments:
arg1 - desc
Returns:
See Also:
<other_func>
*/
void inp_clear_events();
/*
Function: inp_mouse_doubleclick
TODO
Arguments:
arg1 - desc
Returns:
See Also:
<other_func>
*/
int inp_mouse_doubleclick();
/*
Function: inp_key_presses
TODO
Arguments:
arg1 - desc
Returns:
See Also:
<other_func>
*/
int inp_key_presses(int key);
/*
Function: inp_key_releases
TODO
Arguments:
arg1 - desc
Returns:
See Also:
<other_func>
*/
int inp_key_releases(int key);
/*
Function: inp_key_state
TODO
Arguments:
arg1 - desc
Returns:
See Also:
<other_func>
*/
int inp_key_state(int key);
/*
Function: inp_key_name
TODO
Arguments:
arg1 - desc
Returns:
See Also:
<other_func>
*/
const char *inp_key_name(int k);
/*
Function: inp_key_code
TODO
Arguments:
arg1 - desc
Returns:
See Also:
<other_func>
*/
int inp_key_code(const char *key_name);
/*
Function: inp_clear_key_states
TODO
Arguments:
arg1 - desc
Returns:
See Also:
<other_func>
*/
void inp_clear_key_states();
void inp_update();
void inp_init();
void inp_mouse_mode_absolute();
void inp_mouse_mode_relative();
#endif

133
src/engine/e_if_modc.h Normal file
View file

@ -0,0 +1,133 @@
/* copyright (c) 2007 magnus auvinen, see licence.txt for more info */
#ifndef ENGINE_IF_MODC_H
#define ENGINE_IF_MODC_H
/**********************************************************************************
Section: Client Hooks
*********************************************************************************/
/*
Function: modc_preinit
TODO
*/
void modc_preinit();
/*
Function: modc_init
Called when the client starts.
Remarks:
The game should load resources that are used during the entire
time of the game. No map is loaded.
*/
void modc_init();
/*
Function: modc_newsnapshot
Called when the client progressed to a new snapshot.
Remarks:
The client can check for items in the snapshot and perform one time
events like playing sounds, spawning client side effects etc.
*/
void modc_newsnapshot();
/*
Function: modc_entergame
Called when the client has successfully connect to a server and
loaded a map.
Remarks:
The client can check for items in the map and load them.
*/
void modc_entergame();
/*
Function: modc_shutdown
Called when the client closes down.
*/
void modc_shutdown();
/*
Function: modc_render
Called every frame to let the game render it self.
*/
void modc_render();
/*
Function: modc_statechange
Called every time client changes state.
*/
void modc_statechange(int new_state, int old_state);
/* undocumented callbacks */
/*
Function: modc_connected
TODO
Arguments:
arg1 - desc
Returns:
See Also:
<other_func>
*/
void modc_connected();
/*
Function: modc_message
TODO
Arguments:
arg1 - desc
Returns:
See Also:
<other_func>
*/
void modc_message(int msg);
/*
Function: modc_predict
TODO
Arguments:
arg1 - desc
Returns:
See Also:
<other_func>
*/
void modc_predict();
/*
Function: modc_snap_input
TODO
Arguments:
arg1 - desc
Returns:
See Also:
<other_func>
*/
int modc_snap_input(int *data);
/*
Function: modc_net_version
TODO
Arguments:
arg1 - desc
Returns:
See Also:
<other_func>
*/
const char *modc_net_version();
#endif

151
src/engine/e_if_mods.h Normal file
View file

@ -0,0 +1,151 @@
/* copyright (c) 2007 magnus auvinen, see licence.txt for more info */
#ifndef ENGINE_IF_MOD_H
#define ENGINE_IF_MOD_H
/**********************************************************************************
Section: Server Hooks
**********************************************************************************/
/*
Function: mods_init
Called when the server is started.
Remarks:
It's called after the map is loaded so all map items are available.
*/
void mods_init();
/*
Function: mods_shutdown
Called when the server quits.
Remarks:
Should be used to clean up all resources used.
*/
void mods_shutdown();
/*
Function: mods_client_enter
Called when a client has joined the game.
Arguments:
cid - Client ID. Is 0 - MAX_CLIENTS.
Remarks:
It's called when the client is finished loading and should enter gameplay.
*/
void mods_client_enter(int cid);
/*
Function: mods_client_drop
Called when a client drops from the server.
Arguments:
cid - Client ID. Is 0 - MAX_CLIENTS
*/
void mods_client_drop(int cid);
/*
Function: mods_client_input
Called when the server recives new input from a client.
Arguments:
cid - Client ID. Is 0 - MAX_CLIENTS.
input - Pointer to the input data.
size - Size of the data. (NOT IMPLEMENTED YET)
*/
void mods_client_input(int cid, void *input);
/*
Function: mods_tick
Called with a regular interval to progress the gameplay.
Remarks:
The SERVER_TICK_SPEED tells the number of ticks per second.
*/
void mods_tick();
/*
Function: mods_presnap
Called before the server starts to construct snapshots for the clients.
*/
void mods_presnap();
/*
Function: mods_snap
Called to create the snapshot for a client.
Arguments:
cid - Client ID. Is 0 - MAX_CLIENTS.
Remarks:
The game should make a series of calls to <snap_new_item> to construct
the snapshot for the client.
*/
void mods_snap(int cid);
/*
Function: mods_postsnap
Called after the server is done sending the snapshots.
*/
void mods_postsnap();
/*
Function: mods_connected
TODO
Arguments:
arg1 - desc
Returns:
See Also:
<other_func>
*/
void mods_connected(int client_id);
/*
Function: mods_net_version
TODO
Arguments:
arg1 - desc
Returns:
See Also:
<other_func>
*/
const char *mods_net_version();
/*
Function: mods_version
TODO
Arguments:
arg1 - desc
Returns:
See Also:
<other_func>
*/
const char *mods_version();
/*
Function: mods_message
TODO
Arguments:
arg1 - desc
Returns:
See Also:
<other_func>
*/
void mods_message(int msg, int client_id);
#endif

136
src/engine/e_if_msg.h Normal file
View file

@ -0,0 +1,136 @@
/* copyright (c) 2007 magnus auvinen, see licence.txt for more info */
#ifndef ENGINE_IF_MSG_H
#define ENGINE_IF_MSG_H
/*
Section: Messaging
*/
void msg_pack_start_system(int msg, int flags);
/*
Function: msg_pack_start
TODO
Arguments:
arg1 - desc
Returns:
See Also:
<other_func>
*/
void msg_pack_start(int msg, int flags);
/*
Function: msg_pack_int
TODO
Arguments:
arg1 - desc
Returns:
See Also:
<other_func>
*/
void msg_pack_int(int i);
/*
Function: msg_pack_string
TODO
Arguments:
arg1 - desc
Returns:
See Also:
<other_func>
*/
void msg_pack_string(const char *p, int limit);
/*
Function: msg_pack_raw
TODO
Arguments:
arg1 - desc
Returns:
See Also:
<other_func>
*/
void msg_pack_raw(const void *data, int size);
/*
Function: msg_pack_end
TODO
Arguments:
arg1 - desc
Returns:
See Also:
<other_func>
*/
void msg_pack_end();
typedef struct
{
int msg;
int flags;
const unsigned char *data;
int size;
} MSG_INFO;
const MSG_INFO *msg_get_info();
/* message unpacking */
int msg_unpack_start(const void *data, int data_size, int *system);
/*
Function: msg_unpack_int
TODO
Arguments:
arg1 - desc
Returns:
See Also:
<other_func>
*/
int msg_unpack_int();
/*
Function: msg_unpack_string
TODO
Arguments:
arg1 - desc
Returns:
See Also:
<other_func>
*/
const char *msg_unpack_string();
/*
Function: msg_unpack_raw
TODO
Arguments:
arg1 - desc
Returns:
See Also:
<other_func>
*/
const unsigned char *msg_unpack_raw(int size);
#endif

349
src/engine/e_if_other.h Normal file
View file

@ -0,0 +1,349 @@
/* copyright (c) 2007 magnus auvinen, see licence.txt for more info */
#ifndef ENGINE_IF_OTHER_H
#define ENGINE_IF_OTHER_H
/*
Title: Engine Interface
*/
#include "e_keys.h"
#include "e_system.h"
enum
{
SERVER_TICK_SPEED=50,
MAX_CLIENTS=12,
SNAP_CURRENT=0,
SNAP_PREV=1,
MASK_NONE=0,
MASK_SET,
MASK_ZERO,
SNDFLAG_LOOP=1,
SNDFLAG_POS=2,
SNDFLAG_ALL=3
};
/*
Structure: SNAP_ITEM
*/
typedef struct
{
int type;
int id;
} SNAP_ITEM;
/*
Structure: CLIENT_INFO
*/
typedef struct
{
const char *name;
int latency;
} CLIENT_INFO;
typedef struct PERFORMACE_INFO_t
{
const char *name;
struct PERFORMACE_INFO_t *parent;
struct PERFORMACE_INFO_t *first_child;
struct PERFORMACE_INFO_t *next_child;
int tick;
int64 start;
int64 total;
int64 biggest;
int64 last_delta;
} PERFORMACE_INFO;
void perf_init();
void perf_next();
void perf_start(PERFORMACE_INFO *info);
void perf_end();
void perf_dump();
int gfx_init();
void gfx_shutdown();
void gfx_swap();
int gfx_window_active();
int gfx_window_open();
void gfx_set_vsync(int val);
void gfx_mask_op(int mask, int write);
void gfx_clear_mask(int fill);
int snd_init();
int snd_shutdown();
int snd_update();
int map_load(const char *mapname);
void map_unload();
void map_set(void *m);
/*
#include "e_if_client.h"
#include "e_if_server.h"
#include "e_if_snd.h"
#include "e_if_gfx.h"
#include "e_if_inp.h"
#include "e_if_msg.h"
#include "e_if_mod.h"*/
/*
Section: Map
*/
/*
Function: map_is_loaded
Checks if a map is loaded.
Returns:
Returns 1 if the button is pressed, otherwise 0.
*/
int map_is_loaded();
/*
Function: map_num_items
Checks the number of items in the loaded map.
Returns:
Returns the number of items. 0 if no map is loaded.
*/
int map_num_items();
/*
Function: map_find_item
Searches the map for an item.
Arguments:
type - Item type.
id - Item ID.
Returns:
Returns a pointer to the item if it exists, otherwise it returns NULL.
*/
void *map_find_item(int type, int id);
/*
Function: map_get_item
Gets an item from the loaded map from index.
Arguments:
index - Item index.
type - Pointer that recives the item type (can be NULL).
id - Pointer that recives the item id (can be NULL).
Returns:
Returns a pointer to the item if it exists, otherwise it returns NULL.
*/
void *map_get_item(int index, int *type, int *id);
/*
Function: map_get_type
Gets the index range of an item type.
Arguments:
type - Item type to search for.
start - Pointer that recives the starting index.
num - Pointer that recives the number of items.
Returns:
If the item type is not in the map, start and num will be set to 0.
*/
void map_get_type(int type, int *start, int *num);
/*
Function: map_get_data
Fetches a pointer to a raw data chunk in the map.
Arguments:
index - Index to the data to fetch.
Returns:
A pointer to the raw data, otherwise 0.
*/
void *map_get_data(int index);
/*
Function: map_get_data_swapped
TODO
Arguments:
arg1 - desc
Returns:
See Also:
<other_func>
*/
void *map_get_data_swapped(int index);
/*
Section: Network (Server)
*/
/*
Function: snap_new_item
Creates a new item that should be sent.
Arguments:
type - Type of the item.
id - ID of the item.
size - Size of the item.
Returns:
A pointer to the item data, otherwise 0.
Remarks:
The item data should only consist pf 4 byte integers as
they are subject to byte swapping. This means that the size
argument should be dividable by 4.
*/
void *snap_new_item(int type, int id, int size);
/*
Section:Section: Network (Client)
*/
/*
Function: snap_num_items
Check the number of items in a snapshot.
Arguments:
snapid - Snapshot ID to the data to fetch.
* SNAP_PREV for previous snapshot.
* SNAP_CUR for current snapshot.
Returns:
The number of items in the snapshot.
*/
int snap_num_items(int snapid);
/*
Function: snap_get_item
Gets an item from a snapshot.
Arguments:
snapid - Snapshot ID to the data to fetch.
* SNAP_PREV for previous snapshot.
* SNAP_CUR for current snapshot.
index - Index of the item.
item - Pointer that recives the item info.
Returns:
Returns a pointer to the item if it exists, otherwise NULL.
*/
const void *snap_get_item(int snapid, int index, SNAP_ITEM *item);
/*
Function: snap_find_item
Searches a snapshot for an item.
Arguments:
snapid - Snapshot ID to the data to fetch.
* SNAP_PREV for previous snapshot.
* SNAP_CUR for current snapshot.
type - Type of the item.
id - ID of the item.
Returns:
Returns a pointer to the item if it exists, otherwise NULL.
*/
const void *snap_find_item(int snapid, int type, int id);
/*
Function: snap_input
Sets the input data to send to the server.
Arguments:
data - Pointer to the data.
size - Size of the data.
Remarks:
The data should only consist of 4 bytes integer as they are
subject to byte swapping.
*/
void snap_input(void *data, int size);
/* message packing */
enum
{
MSGFLAG_VITAL=1
};
/* message sending */
/*
Function: server_send_msg
TODO
Arguments:
arg1 - desc
Returns:
See Also:
<other_func>
*/
int server_send_msg(int client_id); /* client_id == -1 == broadcast */
/*
Function: client_send_msg
TODO
Arguments:
arg1 - desc
Returns:
See Also:
<other_func>
*/
int client_send_msg();
/* undocumented graphics stuff */
/* server snap id */
/*
Function: snap_new_id
TODO
Arguments:
arg1 - desc
Returns:
See Also:
<other_func>
*/
int snap_new_id();
/*
Function: snap_free_id
TODO
Arguments:
arg1 - desc
Returns:
See Also:
<other_func>
*/
void snap_free_id(int id);
/* other */
/*
Function: map_unload_data
TODO
Arguments:
arg1 - desc
Returns:
See Also:
<other_func>
*/
void map_unload_data(int index);
#endif

137
src/engine/e_if_server.h Normal file
View file

@ -0,0 +1,137 @@
/* copyright (c) 2007 magnus auvinen, see licence.txt for more info */
#ifndef ENGINE_IF_SERVER_H
#define ENGINE_IF_SERVER_H
/*
Section: Server Hooks
*/
/* server */
/*
Function: server_getclientinfo
TODO
Arguments:
arg1 - desc
Returns:
See Also:
<other_func>
*/
int server_getclientinfo(int client_id, CLIENT_INFO *info);
/*
Function: server_clientname
TODO
Arguments:
arg1 - desc
Returns:
See Also:
<other_func>
*/
const char *server_clientname(int client_id);
/* grabs the latest input for the client. not withholding anything */
/*
Function: server_latestinput
TODO
Arguments:
arg1 - desc
Returns:
See Also:
<other_func>
*/
int *server_latestinput(int client_id, int *size);
/*
Function: server_setclientname
TODO
Arguments:
arg1 - desc
Returns:
See Also:
<other_func>
*/
void server_setclientname(int client_id, const char *name);
/*
Function: server_setclientscore
TODO
Arguments:
arg1 - desc
Returns:
See Also:
<other_func>
*/
void server_setclientscore(int client_id, int score);
/*
Function: server_setbrowseinfo
TODO
Arguments:
arg1 - desc
Returns:
See Also:
<other_func>
*/
void server_setbrowseinfo(int game_type, int progression);
/*
Function: server_kick
TODO
Arguments:
arg1 - desc
Returns:
See Also:
<other_func>
*/
void server_kick(int client_id, const char *reason);
/*
Function: server_tick
TODO
Arguments:
arg1 - desc
Returns:
See Also:
<other_func>
*/
int server_tick();
/*
Function: server_tickspeed
TODO
Arguments:
arg1 - desc
Returns:
See Also:
<other_func>
*/
int server_tickspeed();
#endif

91
src/engine/e_if_snd.h Normal file
View file

@ -0,0 +1,91 @@
/* copyright (c) 2007 magnus auvinen, see licence.txt for more info */
#ifndef ENGINE_IF_SND_H
#define ENGINE_IF_SND_H
/*
Section: Sound
*/
/*
Function: snd_set_channel
Sets the parameters for a sound channel.
Arguments:
cid - Channel ID
vol - Volume for the channel. 0.0 to 1.0.
pan - Panning for the channel. -1.0 is all left. 0.0 is equal distribution. 1.0 is all right.
*/
void snd_set_channel(int cid, float vol, float pan);
/*
Function: snd_load_wv
Loads a wavpack compressed sound.
Arguments:
filename - Filename of the file to load
Returns:
The id of the loaded sound. -1 on failure.
*/
int snd_load_wv(const char *filename);
/*
Function: snd_play_at
Plays a sound at a specified postition.
Arguments:
cid - Channel id of the channel to use.
sid - Sound id of the sound to play.
flags - TODO
x - TODO
y - TODO
Returns:
An id to the voice. -1 on failure.
See Also:
<snd_play, snd_stop>
*/
int snd_play_at(int cid, int sid, int flags, float x, float y);
/*
Function: snd_play
Plays a sound.
Arguments:
Arguments:
cid - Channel id of the channel to use.
sid - Sound id of the sound to play.
flags - TODO
Returns:
An id to the voice. -1 on failure.
See Also:
<snd_play_at, snd_stop>
*/
int snd_play(int cid, int sid, int flags);
/*
Function: snd_stop
Stops a currenly playing sound.
Arguments:
id - The ID of the voice to stop.
See Also:
<snd_play, snd_play_at>
*/
void snd_stop(int id);
/*
Function: snd_set_listener_pos
Sets the listener posititon.
Arguments:
x - TODO
y - TODO
*/
void snd_set_listener_pos(float x, float y);
#endif

File diff suppressed because it is too large Load diff

View file

@ -1,5 +1,5 @@
/* copyright (c) 2007 magnus auvinen, see licence.txt for more info */
#include "e_interface.h"
#include "e_common_interface.h"
#include "e_packer.h"
/* message packing */

View file

@ -0,0 +1,18 @@
/* copyright (c) 2007 magnus auvinen, see licence.txt for more info */
#ifndef ENGINE_SERVER_INTERFACE_H
#define ENGINE_SERVER_INTERFACE_H
#ifdef __cplusplus
extern "C" {
#endif
#include "e_if_other.h"
#include "e_if_server.h"
#include "e_if_msg.h"
#include "e_if_mods.h"
#ifdef __cplusplus
}
#endif
#endif

View file

@ -2,7 +2,7 @@
#include <stdlib.h>
#include "e_snapshot.h"
#include "e_compression.h"
#include "e_interface.h"
#include "e_common_interface.h"
int *snapitem_data(SNAPSHOT_ITEM *item) { return (int *)(item+1); }

View file

@ -6,7 +6,7 @@
#include <engine/e_system.h>
#include <engine/e_config.h>
#include <engine/e_engine.h>
#include <engine/e_interface.h>
#include <engine/e_server_interface.h>
#include <engine/e_protocol.h>
#include <engine/e_snapshot.h>

View file

@ -7,6 +7,7 @@
extern "C" {
#include <engine/e_config.h>
#include <engine/client/ec_font.h>
#include <engine/e_client_interface.h>
};
#include "../g_game.h"
@ -1140,7 +1141,7 @@ void render_game()
// don't use predicted
}
else
local_character_pos = mix(predicted_prev_player.pos, predicted_player.pos, client_intrapredtick());
local_character_pos = mix(predicted_prev_player.pos, predicted_player.pos, client_predintratick());
}
else if(local_character && local_prev_character)
{
@ -1211,7 +1212,7 @@ void render_game()
for(int i = 0; i < inp_num_events(); i++)
{
INPUTEVENT e = inp_get_event(i);
INPUT_EVENT e = inp_get_event(i);
if (!(e.ch >= 0 && e.ch < 32))
{

View file

@ -2,7 +2,7 @@
extern "C" {
#include <engine/e_system.h>
#include <engine/e_interface.h>
#include <engine/e_client_interface.h>
#include <engine/e_config.h>
#include <engine/e_console.h>
#include <engine/client/ec_font.h>
@ -71,7 +71,7 @@ void console_handle_input()
for(int i = 0; i < inp_num_events(); i++)
{
INPUTEVENT e = inp_get_event(i);
INPUT_EVENT e = inp_get_event(i);
if (e.key == KEY_F3)
{

View file

@ -1,6 +1,6 @@
#include <string.h>
#include <engine/e_interface.h>
#include <engine/e_client_interface.h>
extern "C" {
#include <engine/e_config.h>

View file

@ -1,6 +1,6 @@
/* copyright (c) 2007 magnus auvinen, see licence.txt for more info */
#include <engine/e_system.h>
#include <engine/e_interface.h>
#include <engine/e_client_interface.h>
#include <game/g_mapitems.h>
#include "gc_map_image.h"

View file

@ -9,7 +9,7 @@
extern "C" {
#include <engine/e_system.h>
#include <engine/e_interface.h>
#include <engine/e_client_interface.h>
#include <engine/e_config.h>
#include <engine/client/ec_font.h>
}
@ -206,7 +206,7 @@ int ui_do_edit_box(void *id, const RECT *rect, char *str, int str_size, float fo
for(int i = 0; i < inp_num_events(); i++)
{
INPUTEVENT e = inp_get_event(i);
INPUT_EVENT e = inp_get_event(i);
char c = e.ch;
int k = e.key;
@ -415,7 +415,7 @@ int ui_do_key_reader(void *id, const RECT *rect, int key)
{
for(int i = 0; i < inp_num_events(); i++)
{
INPUTEVENT e = inp_get_event(i);
INPUT_EVENT e = inp_get_event(i);
if(e.key && e.key != KEY_ESC)
{
new_key = e.key;

View file

@ -1,6 +1,6 @@
/* copyright (c) 2007 magnus auvinen, see licence.txt for more info */
#include <math.h>
#include <engine/e_interface.h>
#include <engine/e_client_interface.h>
#include <engine/e_config.h>
#include <game/generated/gc_data.h>
#include <game/g_protocol.h>

View file

@ -1,5 +1,5 @@
/* copyright (c) 2007 magnus auvinen, see licence.txt for more info */
#include <engine/e_interface.h>
#include <engine/e_client_interface.h>
#include "../g_math.h"
#include "gc_client.h"

View file

@ -1,6 +1,6 @@
/* copyright (c) 2007 magnus auvinen, see licence.txt for more info */
#include <math.h>
#include <engine/e_interface.h>
#include <engine/e_client_interface.h>
#include <engine/e_config.h>
#include "../generated/gc_data.h"
#include "../g_protocol.h"
@ -202,7 +202,7 @@ void render_player(
// apply predicted results
predicted_player.write(&player);
predicted_prev_player.write(&prev);
intratick = client_intrapredtick();
intratick = client_predintratick();
}
}
@ -254,7 +254,7 @@ void render_player(
if(local_info && player_char->hooked_player == local_info->clientid)
{
hook_pos = mix(vec2(predicted_prev_player.pos.x, predicted_prev_player.pos.y),
vec2(predicted_player.pos.x, predicted_player.pos.y), client_intrapredtick());
vec2(predicted_player.pos.x, predicted_player.pos.y), client_predintratick());
}
else
hook_pos = mix(vec2(prev_char->hook_x, prev_char->hook_y), vec2(player_char->hook_x, player_char->hook_y), client_intratick());

View file

@ -2,7 +2,7 @@
#include <string.h>
#include <stdio.h>
#include <engine/e_system.h>
#include <engine/e_interface.h>
#include <engine/e_client_interface.h>
#include "gc_skin.h"
#include "../g_math.h"

View file

@ -1,6 +1,6 @@
/* copyright (c) 2007 magnus auvinen, see licence.txt for more info */
#include <engine/e_system.h>
#include <engine/e_interface.h>
#include <engine/e_client_interface.h>
#include <engine/e_config.h>
#include "gc_ui.h"

View file

@ -6,7 +6,7 @@
extern "C" {
#include <engine/e_system.h>
#include <engine/e_interface.h>
#include <engine/e_common_interface.h>
#include <engine/e_datafile.h>
#include <engine/e_config.h>
}

View file

@ -8,7 +8,7 @@
extern "C" {
#include <engine/e_system.h>
#include <engine/e_interface.h>
#include <engine/e_client_interface.h>
#include <engine/e_datafile.h>
#include <engine/e_config.h>
}

View file

@ -2,7 +2,7 @@
#include <engine/e_system.h>
#include <game/g_vmath.h>
#include <math.h>
#include <engine/e_interface.h>
#include <engine/e_common_interface.h>
#include <game/g_math.h>
#include <game/g_mapitems.h>
#include <game/g_layers.h>

View file

@ -118,9 +118,9 @@ void player_core::tick()
triggered_events = 0;
bool grounded = false;
if(col_is_solid((int)(pos.x+phys_size/2), (int)(pos.y+phys_size/2+5)))
if(col_check_point((int)(pos.x+phys_size/2), (int)(pos.y+phys_size/2+5)))
grounded = true;
if(col_is_solid((int)(pos.x-phys_size/2), (int)(pos.y+phys_size/2+5)))
if(col_check_point((int)(pos.x-phys_size/2), (int)(pos.y+phys_size/2+5)))
grounded = true;
vec2 direction = normalize(vec2(input.target_x, input.target_y));

View file

@ -3,9 +3,9 @@
#define GAME_GAME_H
#include <engine/e_system.h>
#include <engine/e_common_interface.h>
#include <game/g_math.h>
#include <math.h>
#include "../engine/e_interface.h"
#include "g_collision.h"
#include "g_protocol.h"

View file

@ -1,4 +1,4 @@
#include <engine/e_interface.h>
#include <engine/e_common_interface.h>
#include "g_layers.h"
static MAPITEM_LAYER_TILEMAP *game_layer;

View file

@ -1,6 +1,7 @@
/* copyright (c) 2007 magnus auvinen, see licence.txt for more info */
#include <string.h>
#include <engine/e_config.h>
#include <engine/e_server_interface.h>
#include <game/g_mapitems.h>
#include "gs_common.h"
@ -190,7 +191,7 @@ int gameobject::on_player_death(class player *victim, class player *killer, int
void gameobject::do_warmup(int seconds)
{
warmup = seconds*SERVER_TICK_SPEED;
warmup = seconds*server_tickspeed();
}
bool gameobject::is_friendly_fire(int cid1, int cid2)

View file

@ -1,4 +1,5 @@
/* copyright (c) 2007 magnus auvinen, see licence.txt for more info */
#include <engine/e_server_interface.h>
#include <game/g_mapitems.h>
#include "gs_common.h"
#include "gs_game_ctf.h"
@ -134,7 +135,7 @@ void gameobject_ctf::tick()
if(!f->carrying_player && !f->at_stand)
{
if(server_tick() > f->drop_tick + SERVER_TICK_SPEED*30)
if(server_tick() > f->drop_tick + server_tickspeed()*30)
{
create_sound_global(SOUND_CTF_RETURN);
f->reset();

View file

@ -3,6 +3,7 @@
#include <stdio.h>
#include <string.h>
#include <engine/e_config.h>
#include <engine/e_server_interface.h>
#include <game/g_version.h>
#include <game/g_collision.h>
#include <game/g_layers.h>
@ -371,7 +372,7 @@ projectile::projectile(int type, int owner, vec2 pos, vec2 vel, int span, entity
{
this->type = type;
this->pos = pos;
this->vel = vel * SERVER_TICK_SPEED; // TODO: remove this
this->vel = vel * server_tickspeed(); // TODO: remove this
this->lifespan = span;
this->owner = owner;
this->powner = powner;
@ -398,8 +399,8 @@ void projectile::tick()
if(type == WEAPON_BOMB)
gravity = 0;
float pt = (server_tick()-start_tick-1)/(float)SERVER_TICK_SPEED;
float ct = (server_tick()-start_tick)/(float)SERVER_TICK_SPEED;
float pt = (server_tick()-start_tick-1)/(float)server_tickspeed();
float ct = (server_tick()-start_tick)/(float)server_tickspeed();
vec2 prevpos = calc_pos(pos, vel, gravity, pt);
vec2 curpos = calc_pos(pos, vel, gravity, ct);
@ -435,8 +436,8 @@ void projectile::tick()
void projectile::snap(int snapping_client)
{
float ct = (server_tick()-start_tick)/(float)SERVER_TICK_SPEED;
vec2 curpos = calc_pos(pos, vel, -7.5f*SERVER_TICK_SPEED, ct);
float ct = (server_tick()-start_tick)/(float)server_tickspeed();
vec2 curpos = calc_pos(pos, vel, -7.5f*server_tickspeed(), ct);
if(distance(players[snapping_client].pos, curpos) > 1000.0f)
return;