code duplication
[netris.git] / netris.h
index 7bbfc3ce3fe25fda603f08c7f5b6579dcfd9f16b..31c08f1f1c4f905dc741abd193b7f73f74faa59b 100644 (file)
--- a/netris.h
+++ b/netris.h
  * You should have received a copy of the GNU General Public License
  * along with this program; if not, write to the Free Software
  * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- *
- * $Id: netris.h,v 1.28 1999/05/16 06:56:29 mhw Exp $
  */
 
-#ifndef NETRIS_H
-#define NETRIS_H
+#ifndef __NETRIS_H
+#define __NETRIS_H
 
 #include "config.h"
+
 #include <sys/time.h>
 #include <assert.h>
 #include <stdio.h>
 #include <signal.h>
 
-#define version_string         "0.7.819"
-
-#define ExtFunc                /* Marks functions that need prototypes */
+#define version_string "0.8"
 
-#ifdef NOEXT   //prevent re-declaration
+#ifdef NOEXT  //prevent re-declaration
 # define EXT
 #else
 # define EXT extern
@@ -59,84 +56,78 @@ typedef long netint4;
 #define ntoh4(x) ntohl(x)
 
 /* Protocol versions */
-#define MAJOR_VERSION          1       
-#define PROTOCOL_VERSION       4
-#define ROBOT_VERSION          1
+#define MAJOR_VERSION     1
+#define PROTOCOL_VERSION  6
 
-#define DEFAULT_PORT 9284      /* Very arbitrary */
+#define DEFAULT_PORT 9284  /* Very arbitrary */
 
 #define CONFIG_FILE "netris.conf"
 
-//#define DEFAULT_KEYS "hlkj mfp^lq"
-//#define DEFAULT_KEYS "4685 2fp^lq"
-#define DEFAULT_KEYS "dcaf b^fp^lq"
+//#define DEFAULT_KEYS "hlkj mnfp^ltq"
+//#define DEFAULT_KEYS "4685 02fp^l^mq"
+#define DEFAULT_KEYS "dcaf xb^fp^l^mq"
 
-#define MAX_BOARD_WIDTH                32
-#define MAX_BOARD_HEIGHT       64
-#define MAX_SCREENS                    9 //8 players
+#define MAX_BOARD_WIDTH    32
+#define MAX_BOARD_HEIGHT   64
+#define MAX_SCREENS         9 //8 players
 
 /* Event masks */
-#define EM_alarm                       000001
-#define EM_key                         000002
-#define EM_net                         000004
-#define EM_robot                       000010
-#define EM_connect                     000020
-#define EM_any                         000777
+#define EM_alarm       000001
+#define EM_key         000002
+#define EM_net         000004
+#define EM_connect     000020
+#define EM_any         000777
 
-typedef enum _GameType { GT_onePlayer, GT_classicTwo, GT_len } GameType;
 typedef enum _BlockTypeA {
        BT_shadow, BT_none,
-       BT_green, BT_cyan, BT_blue, BT_magenta, BT_red, BT_yellow, BT_white,
+       BT_S, BT_L, BT_I, BT_O, BT_Z, BT_J, BT_T,
        BT_wall, BT_len
 } BlockTypeA;
-typedef enum _Dir { D_down, D_right, D_up, D_left } Dir;
-typedef enum _Cmd { C_end, C_forw, C_back, C_left, C_right, C_plot } Cmd;
 typedef enum _FDType { FT_read, FT_write, FT_except, FT_len } FDType;
 typedef enum _MyEventType {
-       E_none, E_alarm, E_key, E_connect, E_net, E_lostConn, E_robot, E_lostRobot
+       E_none, E_alarm, E_key, E_connect, E_net, E_lostConn
 } MyEventType;
 typedef enum _NetPacketType {
-       NP_endConn,             //client/server quits
-       NP_byeBye,              //unused atm
-       NP_error,               //handshake error
-       NP_hello,               //check versions
-       NP_gamedata,    //game options
-
-       NP_start,               //game ok to start
-       NP_pause,               //player (un)pauses
-       NP_stop,                //game ended
-       NP_newPlayer,   //add new player
-       NP_argghhh,             //player died
-
-       NP_newPiece,    //new piece info
-       NP_rotright,    //rotate piece clockwise
-       NP_rotleft,             //rotate piece counterclockwise
-       NP_left,                //move piece left
-       NP_right,               //move piece right
-       NP_down,                //move piece one down
-       NP_drop,                //drop piece to bottom
-       NP_clear,               //line cleared
-       NP_insertJunk,  //player added junk
-
-       NP_giveJunk             //player has to add junk
+       NP_endConn,     //client/server quits
+       NP_byeBye,      //unused atm
+       NP_error,       //handshake error
+       NP_hello,       //check versions
+       NP_gamedata,    //game options
+
+       NP_start,       //game ok to start
+       NP_pause,       //player (un)pauses
+       NP_stop,        //game ended
+       NP_newPlayer,   //add new player
+       NP_team,        //player switched teams
+       NP_argghhh,     //player died
+       NP_part,        //player left
+
+       NP_msg,         //chat message
+
+       NP_newPiece,    //new piece info
+       NP_rotright,    //rotate piece clockwise
+       NP_rotleft,     //rotate piece counterclockwise
+       NP_left,        //move piece left
+       NP_right,       //move piece right
+       NP_down,        //move piece one down
+       NP_drop,        //drop piece to bottom
+       NP_clear,       //line cleared
+       NP_insertJunk,  //player added junk
+
+       NP_giveJunk     //player has to add junk
 } NetPacketType;
 
-typedef signed char BlockType;
-
+typedef struct {
+       short sender, uid;
+       NetPacketType type;
+       int size;
+       void *data;
+} _netEvent;
 typedef struct _MyEvent {
        MyEventType type;
        union {
                char key;
-               struct {
-                       short sender, uid;
-                       NetPacketType type;
-                       int size;
-                       void *data;
-               } net;
-               struct {
-                       int size;
-                       char *data;
-               } robot;
+               _netEvent net;
        } u;
 } MyEvent;
 
@@ -155,82 +146,54 @@ typedef struct _EventGenRec {
        int bufSize, bufGoal;
 } EventGenRec;
 
-MyEventType NetGenFunc(EventGenRec *gen, MyEvent *event);
-
-typedef struct _Shape {
-       struct _Shape *rotateTo, *rotateFrom;
-       int initY, initX, mirrored;
-       Dir initDir;
-       BlockType type;
-       Cmd *cmds;
-} Shape;
-
-typedef struct _ShapeOption {
-       float weight;
-       Shape *shape;
-} ShapeOption;
-
-typedef int (*ShapeDrawFunc)(int scr, int y, int x,
-                                       BlockType type, void *data);
-
 /* NP_startConn flags */
-#define SCF_usingRobot         000001
-#define SCF_fairRobot          000002
-#define SCF_paused                     000004
+#define SCF_paused  1
 
-typedef struct _Player {
+typedef struct {
        int alive;
        char name[16];
        int flags;
        int team;
-       int dropmode;
        int boardHeight, boardWidth, boardVisible;
        int curX, curY;
-       Shape *curShape, *nextShape;
-       struct _Score {
+       char curShape, nextShape;
+       struct score_t {
                short level;
                long score;
-               int drops, lines, adds;
+               int pieces, lines, adds;
        } score;
-       char host[256]; //last-1
-       int spy,small;  //last
-} Player;
-EXT Player Players[MAX_SCREENS];
+       char host[256];  //last
+} player_t;
+EXT player_t Players[MAX_SCREENS];
 EXT short me;
 EXT short maxPlayer;
 EXT int spied; //in player.flags
 
-#define DEFAULT_INTERVAL       1000000 /* Step-down interval in microseconds */
-#define SPEEDINC                       1.2
-#define SPEEDMINIMUM           40000
+#define DEFAULT_INTERVAL  1000000  /* Step-down interval in microseconds */
+#define SPEEDINC          1.2
+#define SPEEDMINIMUM      40000
 
-typedef struct __Game {
-       int maxplayers; //1
-       int started;    //2
-       int continuous; //3
-       long seed;              //4
-       int initspeed;  //5
+typedef enum _GameType { GT_onePlayer, GT_classicTwo, GT_len } GameType;
+typedef struct {
+       GameType type;
+       int gravity;     //1
+       int started;     //2
+       int continuous;  //3
+       long seed;       //4
+       float shapes[7];
+       int initspeed;   //5
        int speed;
-       int standout, color, ascii;
-} _Game;
-EXT _Game Game;
-
-EXT GameType game;
-EXT int robotEnable, robotVersion, fairRobot;
-EXT int protocolVersion;
+} game_t;
+EXT game_t Game;
 
-EXT int initConn;
-EXT short port;
+#define MSG_WIDTH 128
 
-EXT char scratch[1024];
+EXT short port; // => just in client.c, parameter to inet connect
 
-extern ShapeOption stdOptions[];
+static const char *teamname[] = {
+       "", "Green", "Cyan", "Blue", "Purple",
+       "Red", "Grey", "White", "*Orange"
+};
 
-#include "proto.h"
+#endif //__NETRIS_H
 
-#endif /* NETRIS_H */
-
-/*
- * vi: ts=4 ai
- * vim: noai si
- */