* 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.5.810"
-
-#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
#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_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_none, BT_white, BT_blue, BT_magenta, BT_cyan, BT_yellow, BT_green,
- BT_red, BT_wall, BT_len
+ BT_shadow, BT_none,
+ 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_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, NP_byeBye,
- NP_error, NP_hello, NP_gamedata, NP_newPlayer, NP_goAhead,
- NP_pause, NP_argghhh, NP_giveJunk, NP_newPiece, NP_down, NP_left, NP_right,
- NP_rotright, NP_rotleft, NP_drop, NP_clear, NP_insertJunk
+ 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;
char buf[512];
int bufSize, bufGoal;
} EventGenRec;
-EXT EventGenRec netGen[MAX_SCREENS];
-
-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
-
-EXT int totalPlayers;
+#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; //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 {
- long seed; //1st
- int initspeed; //2nd
+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
- */