3 * Copyright (C) 1998 Brainchild Design - http://brainchilddesign.com/
5 * Copyright (C) 2001 tarzeau@space.ch
7 * Copyright (C) 2002 Florian Schulze - crow@icculus.org
9 * Portions of this code are from the MPEG software simulation group
10 * idct implementation. This code will be replaced with a new
11 * implementation soon.
13 * This file is part of Jump'n'Bump.
15 * Jump'n'Bump is free software; you can redistribute it and/or modify
16 * it under the terms of the GNU General Public License as published by
17 * the Free Software Foundation; either version 2 of the License, or
18 * (at your option) any later version.
20 * Jump'n'Bump is distributed in the hope that it will be useful,
21 * but WITHOUT ANY WARRANTY; without even the implied warranty of
22 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
23 * GNU General Public License for more details.
25 * You should have received a copy of the GNU General Public License
26 * along with this program; if not, write to the Free Software
27 * 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>
59 # include <SDL_mixer.h>
62 # include <sys/stat.h>
64 # include <SDL/SDL_mixer.h>
69 #define JNB_HEIGHT 256
70 extern int screen_width;
71 extern int screen_height;
72 extern int screen_pitch;
74 extern int bytes_per_pixel;
77 #define KEY_PL1_LEFT 0xcb
78 #define KEY_PL1_RIGHT 0xcd
79 #define KEY_PL1_JUMP 0xc8
80 #define KEY_PL2_LEFT 0x1e
81 #define KEY_PL2_RIGHT 0x20
82 #define KEY_PL2_JUMP 0x11
84 #define KEY_PL1_LEFT SDLK_LEFT
85 #define KEY_PL1_RIGHT SDLK_RIGHT
86 #define KEY_PL1_JUMP SDLK_UP
87 #define KEY_PL2_LEFT SDLK_a
88 #define KEY_PL2_RIGHT SDLK_d
89 #define KEY_PL2_JUMP SDLK_w
90 #define KEY_PL3_LEFT SDLK_j
91 #define KEY_PL3_RIGHT SDLK_l
92 #define KEY_PL3_JUMP SDLK_i
93 #define KEY_PL4_LEFT SDLK_KP4
94 #define KEY_PL4_RIGHT SDLK_KP6
95 #define KEY_PL4_JUMP SDLK_KP8
99 #define NUM_OBJECTS 200
101 #define NUM_LEFTOVERS 50
106 #define OBJ_YEL_BUTFLY 3
107 #define OBJ_PINK_BUTFLY 4
110 #define OBJ_FLESH_TRACE 7
112 #define OBJ_ANIM_SPRING 0
113 #define OBJ_ANIM_SPLASH 1
114 #define OBJ_ANIM_SMOKE 2
115 #define OBJ_ANIM_YEL_BUTFLY_RIGHT 3
116 #define OBJ_ANIM_YEL_BUTFLY_LEFT 4
117 #define OBJ_ANIM_PINK_BUTFLY_RIGHT 5
118 #define OBJ_ANIM_PINK_BUTFLY_LEFT 6
119 #define OBJ_ANIM_FLESH_TRACE 7
134 #define SFX_JUMP_FREQ 15000
135 #define SFX_LAND_FREQ 15000
136 #define SFX_DEATH_FREQ 20000
137 #define SFX_SPRING_FREQ 15000
138 #define SFX_SPLASH_FREQ 12000
139 #define SFX_FLY_FREQ 12000
158 int joy_enabled, mouse_enabled;
159 int no_sound, no_gore, fireworks;
161 int draw_page, view_page;
171 void *pob_backbuf[2];
175 int action_left,action_up,action_right;
176 int enabled, dead_flag;
181 int direction, jump_ready, jump_abort, in_water;
182 int anim, frame, frame_tick, image;
202 } objects[NUM_OBJECTS];
215 int but1, but2, but3;
218 char datfile_name[2048];
220 char *background_pic;
223 extern gob_t rabbit_gobs;
224 extern gob_t font_gobs;
225 extern gob_t object_gobs;
226 extern gob_t number_gobs;
231 void fireworks(void);
236 void steer_players(void);
237 void position_player(int player_num);
238 void fireworks(void);
239 void add_object(int type, int x, int y, int x_add, int y_add, int anim, int frame);
240 void update_objects(void);
241 int add_pob(int page, int x, int y, int image, gob_t *pob_data);
242 void draw_flies(int page);
243 void draw_pobs(int page);
244 void redraw_flies_background(int page);
245 void redraw_pob_backgrounds(int page);
246 int add_leftovers(int page, int x, int y, int image, gob_t *pob_data);
247 void draw_leftovers(int page);
248 int init_level(int level, char *pal);
249 void deinit_level(void);
250 int init_program(int argc, char *argv[], char *pal);
251 void deinit_program(void);
252 unsigned short rnd(unsigned short max);
253 int read_level(void);
254 FILE *dat_open(char *file_name, char *dat_name, char *mode);
255 int dat_filelen(char *file_name, char *dat_name);
256 void write_calib_data(void);
261 void update_player_actions(void);
262 void init_inputs(void);
263 int calib_joy(int type);
269 void menu_deinit(void);
274 void set_scaling(int scale);
275 void open_screen(void);
276 void wait_vrt(int mix);
277 void draw_begin(void);
279 void flippage(int page);
280 void draw_begin(void);
282 void clear_lines(int page, int y, int count, int color);
283 int get_color(int color, char pal[768]);
284 int get_pixel(int page, int x, int y);
285 void set_pixel(int page, int x, int y, int color);
286 void setpalette(int index, int count, char *palette);
287 void fillpalette(int red, int green, int blue);
289 void get_block(char page, short x, short y, short width, short height, char *buffer);
290 void put_block(char page, short x, short y, short width, short height, char *buffer);
292 void get_block(int page, int x, int y, int width, int height, void *buffer);
293 void put_block(int page, int x, int y, int width, int height, void *buffer);
295 void put_text(int page, int x, int y, char *text, int align);
296 void put_pob(int page, int x, int y, int image, gob_t *gob, int mask, void *mask_pic);
297 int pob_width(int image, gob_t *gob);
298 int pob_height(int image, gob_t *gob);
299 int pob_hs_x(int image, gob_t *gob);
300 int pob_hs_y(int image, gob_t *gob);
301 int read_pcx(FILE * handle, void *buffer, int buf_len, char *pal);
302 void register_background(char *pixels, char pal[768]);
303 int register_gob(FILE *handle, gob_t *gob, int len);
304 void recalculate_gob(gob_t *gob, char pal[768]);
305 void register_mask(void *pixels);
310 #if ((!defined _MSC_VER) && (!defined __CYGWIN__))
311 long filelength(int handle);
314 int intr_sysupdate();
319 extern char last_keys[50];
321 int hook_keyb_handler(void);
322 void remove_keyb_handler(void);
323 int key_pressed(int key);