3 * Copyright (C) 1998 Brainchild Design - http://brainchilddesign.com/
5 * Copyright (C) 2001 Chuck Mason <cemason@users.sourceforge.net>
7 * Copyright (C) 2002 Florian Schulze <crow@icculus.org>
9 * This file is part of Jump'n'Bump.
11 * Jump'n'Bump is free software; you can redistribute it and/or modify
12 * it under the terms of the GNU General Public License as published by
13 * the Free Software Foundation; either version 2 of the License, or
14 * (at your option) any later version.
16 * Jump'n'Bump is distributed in the hope that it will be useful,
17 * but WITHOUT ANY WARRANTY; without even the implied warranty of
18 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
19 * GNU General Public License for more details.
21 * You should have received a copy of the GNU General Public License
22 * along with this program; if not, write to the Free Software
23 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
49 # include <sys/nearptr.h>
54 # define WIN32_LEAN_AND_MEAN
56 # include <sys/stat.h>
60 # include "SDL_mixer.h"
64 # include <sys/stat.h>
67 # include "SDL_mixer.h"
72 #define JNB_MAX_PLAYERS 4
74 #define JNB_INETPORT 11111
76 extern int client_player_num;
77 void tellServerPlayerMoved(int playerid, int movement_type, int newval);
78 #define MOVEMENT_LEFT 1
79 #define MOVEMENT_RIGHT 2
82 #define JNB_VERSION "1.41"
85 #define JNB_HEIGHT 256
87 extern int screen_width;
88 extern int screen_height;
89 extern int screen_pitch;
93 #define KEY_PL1_LEFT 0xcb
94 #define KEY_PL1_RIGHT 0xcd
95 #define KEY_PL1_JUMP 0xc8
96 #define KEY_PL2_LEFT 0x1e
97 #define KEY_PL2_RIGHT 0x20
98 #define KEY_PL2_JUMP 0x11
100 #define KEY_PL1_LEFT SDLK_LEFT
101 #define KEY_PL1_RIGHT SDLK_RIGHT
102 #define KEY_PL1_JUMP SDLK_UP
103 #define KEY_PL2_LEFT SDLK_a
104 #define KEY_PL2_RIGHT SDLK_d
105 #define KEY_PL2_JUMP SDLK_w
106 #define KEY_PL3_LEFT SDLK_j
107 #define KEY_PL3_RIGHT SDLK_l
108 #define KEY_PL3_JUMP SDLK_i
109 #define KEY_PL4_LEFT SDLK_KP4
110 #define KEY_PL4_RIGHT SDLK_KP6
111 #define KEY_PL4_JUMP SDLK_KP8
115 #define NUM_OBJECTS 200
117 #define NUM_LEFTOVERS 50
122 #define OBJ_YEL_BUTFLY 3
123 #define OBJ_PINK_BUTFLY 4
126 #define OBJ_FLESH_TRACE 7
128 #define OBJ_ANIM_SPRING 0
129 #define OBJ_ANIM_SPLASH 1
130 #define OBJ_ANIM_SMOKE 2
131 #define OBJ_ANIM_YEL_BUTFLY_RIGHT 3
132 #define OBJ_ANIM_YEL_BUTFLY_LEFT 4
133 #define OBJ_ANIM_PINK_BUTFLY_RIGHT 5
134 #define OBJ_ANIM_PINK_BUTFLY_LEFT 6
135 #define OBJ_ANIM_FLESH_TRACE 7
150 #define SFX_JUMP_FREQ 15000
151 #define SFX_LAND_FREQ 15000
152 #define SFX_DEATH_FREQ 20000
153 #define SFX_SPRING_FREQ 15000
154 #define SFX_SPLASH_FREQ 12000
155 #define SFX_FLY_FREQ 12000
165 #define DATA_PATH "data/jumpbump.dat"
167 #define DATA_PATH "data/jumpbump.dat"
169 #define DATA_PATH "%%PREFIX%%/share/jumpnbump/jumpbump.dat"
184 int joy_enabled, mouse_enabled;
185 int no_sound, music_no_sound, no_gore, fireworks;
187 int draw_page, view_page;
197 void *pob_backbuf[2];
201 int action_left,action_up,action_right;
202 int enabled, dead_flag;
204 int bumped[JNB_MAX_PLAYERS];
207 int direction, jump_ready, jump_abort, in_water;
208 int anim, frame, frame_tick, image;
241 int but1, but2, but3;
244 extern main_info_t main_info;
245 extern player_t player[JNB_MAX_PLAYERS];
246 extern player_anim_t player_anims[7];
247 extern object_t objects[NUM_OBJECTS];
249 extern mouse_t mouse;
251 extern char datfile_name[2048];
253 extern char *background_pic;
254 extern char *mask_pic;
256 extern gob_t rabbit_gobs;
257 extern gob_t font_gobs;
258 extern gob_t object_gobs;
259 extern gob_t number_gobs;
264 void fireworks(void);
269 void steer_players(void);
270 void position_player(int player_num);
271 void fireworks(void);
272 void add_object(int type, int x, int y, int x_add, int y_add, int anim, int frame);
273 void update_objects(void);
274 int add_pob(int page, int x, int y, int image, gob_t *pob_data);
275 void draw_flies(int page);
276 void draw_pobs(int page);
277 void redraw_flies_background(int page);
278 void redraw_pob_backgrounds(int page);
279 int add_leftovers(int page, int x, int y, int image, gob_t *pob_data);
280 void draw_leftovers(int page);
281 int init_level(int level, char *pal);
282 void deinit_level(void);
283 int init_program(int argc, char *argv[], char *pal);
284 void deinit_program(void);
285 unsigned short rnd(unsigned short max);
286 int read_level(void);
287 unsigned char *dat_open(char *file_name);
288 int dat_filelen(char *file_name);
289 void write_calib_data(void);
294 void update_player_actions(void);
295 void init_inputs(void);
296 int calib_joy(int type);
302 void menu_deinit(void);
307 void set_scaling(int scale);
308 void open_screen(void);
309 void wait_vrt(int mix);
310 void draw_begin(void);
312 void flippage(int page);
313 void draw_begin(void);
315 void clear_lines(int page, int y, int count, int color);
316 int get_color(int color, char pal[768]);
317 int get_pixel(int page, int x, int y);
318 void set_pixel(int page, int x, int y, int color);
319 void setpalette(int index, int count, char *palette);
320 void fillpalette(int red, int green, int blue);
322 void get_block(char page, short x, short y, short width, short height, char *buffer);
323 void put_block(char page, short x, short y, short width, short height, char *buffer);
325 void get_block(int page, int x, int y, int width, int height, void *buffer);
326 void put_block(int page, int x, int y, int width, int height, void *buffer);
328 void put_text(int page, int x, int y, char *text, int align);
329 void put_pob(int page, int x, int y, int image, gob_t *gob, int mask, void *mask_pic);
330 int pob_width(int image, gob_t *gob);
331 int pob_height(int image, gob_t *gob);
332 int pob_hs_x(int image, gob_t *gob);
333 int pob_hs_y(int image, gob_t *gob);
334 int read_pcx(unsigned char * handle, void *buffer, int buf_len, char *pal);
335 void register_background(char *pixels, char pal[768]);
336 int register_gob(unsigned char *handle, gob_t *gob, int len);
337 void recalculate_gob(gob_t *gob, char pal[768]);
338 void register_mask(void *pixels);
343 /* long filelength(int handle); */
345 int intr_sysupdate();
350 extern char last_keys[50];
352 int hook_keyb_handler(void);
353 void remove_keyb_handler(void);
354 int key_pressed(int key);