From fbdea29f6d478a58bee66a1ec53b0ca59d853c4d Mon Sep 17 00:00:00 2001 From: Florian Schulze Date: Wed, 13 Feb 2002 11:48:28 +0000 Subject: [PATCH 1/1] Initial revision --- data/bump.mod | Bin 0 -> 71776 bytes data/calib.dat | Bin 0 -> 24 bytes data/death.smp | Bin 0 -> 5110 bytes data/fly.smp | Bin 0 -> 32376 bytes data/font.gob | Bin 0 -> 6293 bytes data/jump.mod | Bin 0 -> 50206 bytes data/jump.smp | Bin 0 -> 6552 bytes data/level.pcx | Bin 0 -> 36203 bytes data/levelmap.txt | 16 + data/mask.pcx | Bin 0 -> 5530 bytes data/menu.pcx | Bin 0 -> 37443 bytes data/menumask.pcx | Bin 0 -> 4608 bytes data/numbers.gob | Bin 0 -> 3642 bytes data/objects.gob | Bin 0 -> 5454 bytes data/rabbit.gob | Bin 0 -> 16690 bytes data/scores.mod | Bin 0 -> 68982 bytes data/splash.smp | Bin 0 -> 8404 bytes data/spring.smp | Bin 0 -> 7775 bytes dos/dj.h | 110 ++ dos/gfx.S | 271 +++++ dos/gfx.c | 403 +++++++ dos/interrpt.c | 120 ++ dos/libdj.a | Bin 0 -> 53048 bytes globals.h | 191 ++++ main.c | 2722 +++++++++++++++++++++++++++++++++++++++++++++ menu.c | 605 ++++++++++ modify/pack.c | 109 ++ modify/unpack.c | 69 ++ readme.txt | 75 ++ source.txt | 93 ++ 30 files changed, 4784 insertions(+) create mode 100644 data/bump.mod create mode 100644 data/calib.dat create mode 100644 data/death.smp create mode 100644 data/fly.smp create mode 100644 data/font.gob create mode 100644 data/jump.mod create mode 100644 data/jump.smp create mode 100644 data/level.pcx create mode 100644 data/levelmap.txt create mode 100644 data/mask.pcx create mode 100644 data/menu.pcx create mode 100644 data/menumask.pcx create mode 100644 data/numbers.gob create mode 100644 data/objects.gob create mode 100644 data/rabbit.gob create mode 100644 data/scores.mod create mode 100644 data/splash.smp create mode 100644 data/spring.smp create mode 100644 dos/dj.h create mode 100644 dos/gfx.S create mode 100644 dos/gfx.c create mode 100644 dos/interrpt.c create mode 100644 dos/libdj.a create mode 100644 globals.h create mode 100644 main.c create mode 100644 menu.c create mode 100644 modify/pack.c create mode 100644 modify/unpack.c create mode 100644 readme.txt create mode 100644 source.txt diff --git a/data/bump.mod b/data/bump.mod new file mode 100644 index 0000000000000000000000000000000000000000..286847de90d432435f0e2ae61154618b40bd79e5 GIT binary patch literal 71776 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 BrJeu) literal 0 HcmV?d00001 diff --git a/data/fly.smp b/data/fly.smp new file mode 100644 index 0000000000000000000000000000000000000000..dc9d3e17e62635d87c72aa7e8bd2e0e697140e22 GIT binary patch literal 32376 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�v2LMj@|mA;1D21r-duCOi-ZScfP~-J*pP(*y&A1z5ohM1_J9JF1na2cg>+^{D_v1{wvN`vw%OXu V!`eK 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 literal 0 HcmV?d00001 diff --git a/data/jump.smp b/data/jump.smp new file mode 100644 index 0000000000000000000000000000000000000000..92661e51caaed3448c51fe5d1f5bc34398c43980 GIT binary patch literal 6552 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 afBki6S*z9d_xGXbU@(|WCg1+{xBqWT2oG`q literal 0 HcmV?d00001 diff --git a/data/menumask.pcx b/data/menumask.pcx new file mode 100644 index 0000000000000000000000000000000000000000..e9ad0ed18333fe1f0d96046340bec5d2d288322b GIT binary patch literal 4608 zcmeH~FL2XP9LK*ATsg{JMMXqKL`6kKMMTBKxQnPjR76ZvL_|zPOiWZ%R7_M%gu9A} zii(MdiiwJeh}|*P0R_6zJ97#SGv_V>8b>CGL=cJKei-LK5Q!iXUIc=t z;y4ekZX`Bwk9?PS_3r4~poPXrVZz2p@Qp28a zJo}?w-5WkwU$D1+4*Z`N{7v%TI?3;@=k4`+wrw|?P0O-O(=-gDR4V23c~wI4&%ypnxkgJdukk*jMA|@gnBYwvvdh%HBHN8GVyra zo9Cd@U0qz&vsE>o&+yq)B*A+dKoW*HNwz48Ld>aDisyNvcWR3(dfv#Z1tpuyOiiT{ P0#DaFU!8aflQj4Ru7MO{ literal 0 HcmV?d00001 diff --git a/data/numbers.gob b/data/numbers.gob new file mode 100644 index 0000000000000000000000000000000000000000..9d91905dc5ab1f707b5e27d2deef82f020cc9073 GIT binary patch literal 3642 zcmb`JvCh;$41^a10{u`>B$1*k(o<6LJd`{RC67eO<4`f*jGg4}bSELPLjT5Vuk9Io zeY}j%V~iiK#`yDkjBjto`1N*-FYm_q`F@PoFJpZFFvjnXV|*HmEXP>y)-=!jo7T$( z-IO)YOAe-4yHv}vTrQjR+Uj7JH?7Nj=w%i|+qdKBSNvgsqpMwt$k}HMY`6HlFHA}d zyOJ^6PV%HYES7#!-Z%0Zph;NzMd&Bpb7I;#kpymTE+}eA?oW0H27RyfG0*Et82t7k z^s**7;y83Aiwy^b6;bh;GsIOlujQsBTK@ij{V5;&PmMYvWS;;4=#T+#F3Z|Po7}g`w%@ptI!iVd8N2K)uS$zB zu2p4P;z5PA)u(N|Go$zCuCgE6#A4jG*plG*0i6TY1K^&_tDS>WFbaRD-+0IQG-$c; z-hU(?Ec5l4XFr;Q=X5W@AwtdDJVT_2FpmzS6d{Ih$6|5-2SJyPuPcI%=ALw1;ppy>D8R;Jg-$I3ibuvIk5_-~@Zj0`ctVmufL-(I ze4Gw{3g^MJygufcijv0anWQ~@?)%aMvGx#PJLlPaO@-5&_+sKKFI^8m)8rj`oNmcn z+rCm~>GOW*!Nt77J1SvTT0kSwU?&~R1-avPp*wDF?6j6BcXhq>q*?Acsw%YkdSmV! zPUao;3D5SLhSukzFV(y%N|?VlExwRMC=C*YJ$J;VV&iqdF<56N`TgjDtC%@GxLlcC7VhNkuV@>oak%o1 z6I@+t#VqS8^_Az+aR!BFkwi}NZDJrisqaSw40kMc(3kwUpItxx#1e#FY9CIjeR)qx zH*A?&ozOW>l0fwz=uNroq(^?1EyGmMD`@a94B7r z(4(t+nW&!kMjiU(tw;&melG@wKhKTpeh&Jy7W64_5=gq|elB)FpY`;2a3?xrV<%bx zosS<>eum8x`DroPkPS~^#It4d6(B7qpHx6r8N1!z6woPzCkFzUA3Qi~`8otvxv95mstnpua literal 0 HcmV?d00001 diff --git a/data/objects.gob b/data/objects.gob new file mode 100644 index 0000000000000000000000000000000000000000..a3e0d5f51b33d986b8c8e96aee5ebc7517720a4f GIT binary patch literal 5454 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 literal 0 HcmV?d00001 diff --git a/data/spring.smp b/data/spring.smp new file mode 100644 index 0000000000000000000000000000000000000000..3c2ca086f7712744d32843d9ba7c8fb7ec832a3a GIT binary patch literal 7775 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 +#include +#include +#include +#include +#include +#include + +#define DJ_SD_TYPE_NOSOUND 0 +#define DJ_SD_TYPE_SBLASTER 1 + +#define DJ_SFX_TYPE_SSS 0 +#define DJ_SFX_TYPE_WAV 1 +#define DJ_SFX_TYPE_SMP 2 + + +typedef struct dj_hardware_info { + char sd_type; + short sd_version; + short port; + char irq; + char dma; +} dj_hardware_info; + +typedef struct dj_mixing_info { + char sfx_volume, num_sfx_channels; + char mod_volume, num_mod_channels; + char stereo_mix, auto_mix; + unsigned short mixing_freq; + unsigned short dma_time, dmabuf_len; + char cur_dmabuf; + unsigned long dmabuf_address[2]; + char *mixed_buf; +} dj_mixing_info; + +typedef struct sfx_data { + char priority; + unsigned short default_freq; + char default_volume; + unsigned long length; + char loop; + unsigned long loop_start, loop_length; + char *buf; +} sfx_data; + +typedef struct dj_mod_info { + char num_channels; + char speed; + short bpm; + char order_pos; + char pat_pos; + char name[20]; + struct { + char name[22]; + unsigned short length; + char finetune; + char volume; + unsigned short loop_start; + unsigned short loop_length; + char *buf; + } samples[31]; + char song_length; + char num_pat; + char pat_order[128]; + char *pat[128]; +} dj_mod_info; + + +extern char dj_init(void); +extern void dj_deinit(void); +extern void dj_start(void); +extern void dj_stop(void); +extern void dj_set_nosound(char flag); +extern char dj_set_sd(char sd_type, short port, char irq, char dma); +extern char dj_autodetect_sd(void); +extern void dj_get_sd_string(char *strbuf); +extern char dj_set_stereo(char flag); +extern void dj_reverse_stereo(char flag); +extern void dj_set_auto_mix(char flag); +extern unsigned short dj_set_mixing_freq(unsigned short freq); +extern void dj_set_dma_time(unsigned short time); +extern char dj_get_hardware_info(dj_hardware_info *ptr); +extern char dj_get_mixing_info(dj_mixing_info *ptr); +extern char dj_get_mod_info(char mod_num, dj_mod_info *ptr); +extern void dj_set_fake_vu_speed(unsigned char speed); +extern unsigned char dj_get_fake_vu(char channel); +extern char dj_reset_sd(void); + +extern char dj_mix_needed(void); +extern void dj_mix(void); + +extern char dj_set_num_sfx_channels(char num_channels); +extern void dj_set_sfx_volume(char volume); +extern char dj_get_sfx_volume(void); +extern void dj_play_sfx(unsigned char sfx_num, unsigned short freq, char volume, char panning, unsigned short delay, char channel); +extern char dj_get_sfx_settings(unsigned char sfx_num, sfx_data *data); +extern char dj_set_sfx_settings(unsigned char sfx_num, sfx_data *data); +extern void dj_set_sfx_channel_volume(char channel_num, char volume); +extern void dj_stop_sfx_channel(char channel_num); +extern char dj_load_sfx(FILE *file_handle, char *filename, int file_length, char sfx_type, unsigned char sfx_num); +extern void dj_free_sfx(unsigned char sfx_num); + +extern char dj_ready_mod(char mod_num); +extern char dj_start_mod(void); +extern void dj_stop_mod(void); +extern void dj_set_mod_volume(char volume); +extern char dj_get_mod_volume(void); +extern char dj_load_mod(FILE *file_handle, char *filename, char mod_num); +extern void dj_free_mod(char mod_num); + diff --git a/dos/gfx.S b/dos/gfx.S new file mode 100644 index 0000000..1b895af --- /dev/null +++ b/dos/gfx.S @@ -0,0 +1,271 @@ +[GLOBAL _get_block] +[GLOBAL _put_block] + +[EXTERN ___djgpp_base_address] + + +[SECTION .text] + + +; void get_block(char page, long x, long y, long width, long height, char *buffer); + +_get_block + push ebp + mov ebp,esp + pusha + + mov eax,[ebp+12] + mov [.x],eax + mov eax,[ebp+16] + mov [.y],eax + mov eax,[ebp+20] + mov [.draw_width],eax + mov eax,[ebp+24] + mov [.draw_height],eax + mov eax,[ebp+28] + mov [.buf_ptr],eax + + mov eax,[.x] + or eax,eax + jns .11 + + neg eax + cmp eax,[ebp+20] + jge near .exit + + mov dword [.x],0 + sub [.draw_width],eax + add [.buf_ptr],eax + +.11 + cmp dword [.x],400 + jge near .exit + + mov eax,[.y] + or eax,eax + jns .12 + + neg eax + cmp eax,[ebp+24] + jge near .exit + + mov dword [.y],0 + sub [.draw_height],eax + imul dword [ebp+20] + add [.buf_ptr],eax + +.12 + cmp eax,256 + jge near .exit + + mov edi,0xa0000 + sub edi,[___djgpp_base_address] + xor eax,eax + mov al,[ebp+8] + shl eax,15 + add edi,eax + mov eax,100 + imul dword [.y] + add edi,eax + mov [.vga_ptr],edi + + mov dword [.c1],0 + +.1 + mov edx,0x3ce + mov eax,[.x] + add eax,[.c1] + shl eax,8 + and ah,3 + mov al,4 + out dx,ax + + mov esi,[.vga_ptr] + mov eax,[.x] + add eax,[.c1] + sar eax,2 + add esi,eax + + mov edi,[.buf_ptr] + add edi,[.c1] + + mov ebx,[.draw_height] + +.2 + mov ecx,[.draw_width] + add ecx,3 + sub ecx,[.c1] + shr ecx,2 + mov edx,ecx + cmp ecx,0 + jle .4 + +.3 + mov al,[esi] + mov [edi],al + inc esi + add edi,4 + dec cx + jnz .3 + +.4 + add esi,100 + sub esi,edx + + add edi,[ebp+20] + mov eax,edx + shl eax,2 + sub edi,eax + + dec ebx + jnz .2 + + inc byte [.c1] + cmp byte [.c1],4 + jl near .1 + +.exit + popa + pop ebp + ret + +.c1 dd 0 +.vga_ptr dd 0 +.x dd 0 +.y dd 0 +.draw_width dd 0 +.draw_height dd 0 +.buf_ptr dd 0 + + +; void put_block(char page, long x, long y, long width, long height, char *buffer); + +_put_block + push ebp + mov ebp,esp + pusha + + mov eax,[ebp+12] + mov [.x],eax + mov eax,[ebp+16] + mov [.y],eax + mov eax,[ebp+20] + mov [.draw_width],eax + mov eax,[ebp+24] + mov [.draw_height],eax + mov eax,[ebp+28] + mov [.buf_ptr],eax + + mov eax,[.x] + or eax,eax + jns .11 + + neg eax + cmp eax,[ebp+20] + jge near .exit + + mov dword [.x],0 + sub [.draw_width],eax + add [.buf_ptr],eax + +.11 + cmp dword [.x],400 + jge near .exit + + mov eax,[.y] + or eax,eax + jns .12 + + neg eax + cmp eax,[ebp+24] + jge near .exit + + mov dword [.y],0 + sub [.draw_height],eax + imul dword [ebp+20] + add [.buf_ptr],eax + +.12 + cmp eax,256 + jge near .exit + + mov edi,0xa0000 + sub edi,[___djgpp_base_address] + xor eax,eax + mov al,[ebp+8] + shl eax,15 + add edi,eax + mov eax,100 + imul dword [.y] + add edi,eax + mov [.vga_ptr],edi + + mov dword [.c1],0 + +.1 + mov edx,0x3c4 + mov eax,0x100 + mov ecx,[.x] + add ecx,[.c1] + and ecx,3 + shl eax,cl + mov al,2 + out dx,ax + + mov esi,[.buf_ptr] + add esi,[.c1] + + mov edi,[.vga_ptr] + mov eax,[.x] + add eax,[.c1] + sar eax,2 + add edi,eax + + mov ebx,[.draw_height] + +.2 + mov ecx,[.draw_width] + add ecx,3 + sub ecx,[.c1] + shr ecx,2 + mov edx,ecx + cmp ecx,0 + jle .4 + +.3 + mov al,[esi] + mov [edi],al + add esi,4 + inc edi + dec ecx + jnz .3 + +.4 + add esi,[ebp+20] + mov eax,edx + shl eax,2 + sub esi,eax + + add edi,100 + sub edi,edx + + dec ebx + jnz .2 + + inc byte [.c1] + cmp byte [.c1],4 + jl near .1 + +.exit + popa + pop ebp + ret + +.c1 dd 0 +.vga_ptr dd 0 +.x dd 0 +.y dd 0 +.draw_width dd 0 +.draw_height dd 0 +.buf_ptr dd 0 + diff --git a/dos/gfx.c b/dos/gfx.c new file mode 100644 index 0000000..deccf76 --- /dev/null +++ b/dos/gfx.c @@ -0,0 +1,403 @@ +#include "globals.h" + + +void open_screen(void) { + __dpmi_regs regs; + char *ptr1; + + regs.x.ax = 0x13; + __dpmi_int(0x10, ®s); + + outportw(0x3c4, 0x0604); + outportw(0x3c4, 0x0100); + outportb(0x3c2, 0xe7); + outportw(0x3c4, 0x0300); + + outportb(0x3d4, 0x11); + outportb(0x3d5, inportb(0x3d5) & 0x7f); + + outportw(0x3d4, 0x7100); + outportw(0x3d4, 0x6301); + outportw(0x3d4, 0x6402); + outportw(0x3d4, 0x9203); + outportw(0x3d4, 0x6604); + outportw(0x3d4, 0x8205); + outportw(0x3d4, 0x2b06); + outportw(0x3d4, 0xb207); + outportw(0x3d4, 0x0008); + outportw(0x3d4, 0x6109); + outportw(0x3d4, 0x1310); + outportw(0x3d4, 0xac11); + outportw(0x3d4, 0xff12); + outportw(0x3d4, 0x3213); + outportw(0x3d4, 0x0014); + outportw(0x3d4, 0x0715); + outportw(0x3d4, 0x1a16); + outportw(0x3d4, 0xe317); + + outportw(0x3d4, 0x3213); + + ptr1 = (char *)(0xa0000 + __djgpp_conventional_base); + outportw(0x3c4, 0x0f02); + memset(ptr1, 0, 65535); + +} + + +void wait_vrt(void) { + + while( (inportb(0x3da) & 8) == 0); + while( (inportb(0x3da) & 8) == 8); + +} + + +/*void get_block(char page, short x, short y, short width, short height, char *buffer) { + short c1, c2, c3; + char *buffer_ptr, *vga_ptr; + + for (c3 = 0; c3 < 4; c3++) { + outportw(0x3ce, ( ( (x + c3) & 3) << 8) + 0x04); + for (c1 = 0; (c1 + c3) < width; c1 += 4) { + buffer_ptr = &buffer[(c1 + c3) * height]; + vga_ptr = (char *)(0xa0000 + ( (long)page << 15) + (long)y * 100 + ( (x + c1 + c3) >> 2) + __djgpp_conventional_base); + for (c2 = 0; c2 < height; c2++) { + *buffer_ptr = *vga_ptr; + buffer_ptr++; + vga_ptr += 100; + } + } + } + +}*/ + + +/*void put_block(char page, short x, short y, short width, short height, char *buffer) { + short c1, c2, c3; + char *vga_ptr, *buffer_ptr; + + for (c3 = 0; c3 < 4; c3++) { + outportw(0x3c4, ( (1 << ( (x + c3) & 3) ) << 8) + 0x02); + for (c1 = 0; (c1 + c3) < width; c1 += 4) { + vga_ptr = (char *)(0xa0000 + ( (long)page << 15) + (long)y * 100 + ( (x + c1 + c3) >> 2) + __djgpp_conventional_base); + buffer_ptr = &buffer[(c1 + c3) * height]; + for (c2 = 0; c2 < height; c2++) { + *vga_ptr = *buffer_ptr; + vga_ptr += 100; + buffer_ptr++; + } + } + } + +}*/ + + +void put_text(char page, int x, int y, char *text, char align) { + int c1; + int t1; + int width; + int cur_x; + int image; + + if (text == NULL || strlen(text) == 0) + return; + if (font_gobs == NULL) + return; + + width = 0; + c1 = 0; + while (text[c1] != 0) { + t1 = text[c1]; + c1++; + if (t1 == ' ') { + width += 5; + continue; + } + if (t1 >= 33 && t1 <= 34) + image = t1 - 33; + else if (t1 >= 39 && t1 <= 41) + image = t1 - 37; + else if (t1 >= 44 && t1 <= 59) + image = t1 - 39; + else if (t1 >= 64 && t1 <= 90) + image = t1 - 43; + else if (t1 >= 97 && t1 <= 122) + image = t1 - 49; + else if (t1 == '~') + image = 74; + else if (t1 == '„') + image = 75; + else if (t1 == '†') + image = 76; + else if (t1 == 'Ž') + image = 77; + else if (t1 == '') + image = 78; + else if (t1 == '”') + image = 79; + else if (t1 == '™') + image = 80; + else + continue; + width += pob_width(image, font_gobs) + 1; + } + + switch (align) { + case 0: + cur_x = x; + break; + case 1: + cur_x = x - width; + break; + case 2: + cur_x = x - width / 2; + break; + } + c1 = 0; + while (text[c1] != 0) { + t1 = text[c1]; + c1++; + if (t1 == ' ') { + cur_x += 5; + continue; + } + if (t1 >= 33 && t1 <= 34) + image = t1 - 33; + else if (t1 >= 39 && t1 <= 41) + image = t1 - 37; + else if (t1 >= 44 && t1 <= 59) + image = t1 - 39; + else if (t1 >= 64 && t1 <= 90) + image = t1 - 43; + else if (t1 >= 97 && t1 <= 122) + image = t1 - 49; + else if (t1 == '~') + image = 74; + else if (t1 == '„') + image = 75; + else if (t1 == '†') + image = 76; + else if (t1 == 'Ž') + image = 77; + else if (t1 == '') + image = 78; + else if (t1 == '”') + image = 79; + else if (t1 == '™') + image = 80; + else + continue; + put_pob(page, cur_x, y, image, font_gobs, 1, mask_pic); + cur_x += pob_width(image, font_gobs) + 1; + } + +} + + +void put_pob(char page, short x, short y, short image, char *pob_data, char mask, char *mask_pic) { + long c1, c2, c3; + long pob_offset; + char *pob_ptr, *vga_ptr, *mask_ptr; + long width, height; + long draw_width, draw_height; + char colour; + + if (image < 0 || image >= *(short *)(pob_data) ) + return; + + pob_offset = *(long *)(pob_data + image * 4 + 2); + + width = draw_width = *(short *)(pob_data + pob_offset); + height = draw_height = *(short *)(pob_data + pob_offset + 2); + x -= *(short *)(pob_data + pob_offset + 4); + y -= *(short *)(pob_data + pob_offset + 6); + + pob_offset += 8; + + if ( (x + width) <= 0 || x >= 400) + return; + if ( (y + height) <= 0 || y >= 256) + return; + if (x < 0) { + pob_offset -= x; + draw_width += x; + x = 0; + } + if ( (x + width) > 400) + draw_width -= x + width - 400; + if (y < 0) { + pob_offset += -y * width; + draw_height -= -y; + y = 0; + } + if ( (y + height) > 256) + draw_height -= y + height - 256; + + for (c3 = 0; c3 < 4; c3++) { + outportw(0x3c4, ( (1 << ( (x + c3) & 3) ) << 8) + 0x02); + pob_ptr = &pob_data[pob_offset + c3]; + vga_ptr = (char *)(0xa0000 + (long)(page << 15) + (long)y * 100L + ( (x + c3) >> 2) + __djgpp_conventional_base); + mask_ptr = (char *)(mask_pic + (long)y * 400L + x + c3); + for (c1 = 0; c1 < draw_height; c1++) { + for (c2 = c3; c2 < draw_width; c2 += 4) { + colour = *mask_ptr; + if (mask == 0 || (mask == 1 && colour == 0) ) { + colour = *pob_ptr; + if (colour != 0) + *vga_ptr = colour; + } + pob_ptr += 4; + vga_ptr++; + mask_ptr += 4; + } + pob_ptr += width - c2 + c3; + vga_ptr += (400 - c2 + c3) >> 2; + mask_ptr += 400 - c2 + c3; + } + } + +} + + +char pob_col(short x1, short y1, short image1, char *pob_data1, short x2, short y2, short image2, char *pob_data2) { + short c1, c2; + long pob_offset1, pob_offset2; + short width1, width2; + short height1, height2; + short check_width, check_height; + char *pob_ptr1, *pob_ptr2; + + pob_offset1 = *(long *)(pob_data1 + image1 * 4 + 2); + width1 = *(short *)(pob_data1 + pob_offset1); + height1 = *(short *)(pob_data1 + pob_offset1 + 2); + x1 -= *(short *)(pob_data1 + pob_offset1 + 4); + y1 -= *(short *)(pob_data1 + pob_offset1 + 6); + pob_offset1 += 8; + + pob_offset2 = *(long *)(pob_data2 + image2 * 4 + 2); + width2 = *(short *)(pob_data2 + pob_offset2); + height2 = *(short *)(pob_data2 + pob_offset2 + 2); + x2 -= *(short *)(pob_data2 + pob_offset2 + 4); + y2 -= *(short *)(pob_data2 + pob_offset2 + 6); + pob_offset2 += 8; + + if (x1 < x2) { + if ( (x1 + width1) <= x2) + return 0; + else if ( (x1 + width1) <= (x2 + width2) ) { + pob_offset1 += x2 - x1; + check_width = x1 + width1 - x2; + } + else { + pob_offset1 += x2 - x1; + check_width = width2; + } + } + else { + if ( (x2 + width2) <= x1) + return 0; + else if ( (x2 + width2) <= (x1 + width1) ) { + pob_offset2 += x1 - x2; + check_width = x2 + width2 - x1; + } + else { + pob_offset2 += x1 - x2; + check_width = width1; + } + } + if (y1 < y2) { + if ( (y1 + height1) <= y2) + return 0; + else if ( (y1 + height1) <= (y2 + height2) ) { + pob_offset1 += (y2 - y1) * width1; + check_height = y1 + height1 - y2; + } + else { + pob_offset1 += (y2 - y1) * width1; + check_height = height2; + } + } + else { + if ( (y2 + height2) <= y1) + return 0; + else if ( (y2 + height2) <= (y1 + height1) ) { + pob_offset2 += (y1 - y2) * width2; + check_height = y2 + height2 - y1; + } + else { + pob_offset2 += (y1 - y2) * width2; + check_height = height1; + } + } + + pob_ptr1 = (char *)(pob_data1 + pob_offset1); + pob_ptr2 = (char *)(pob_data2 + pob_offset2); + for (c1 = 0; c1 < check_height; c1++) { + for (c2 = 0; c2 < check_width; c2++) { + if (*pob_ptr1 != 0 && *pob_ptr2 != 0) + return 1; + pob_ptr1++; + pob_ptr2++; + } + pob_ptr1 += width1 - check_width; + pob_ptr2 += width2 - check_width; + } + + return 0; + +} + + +short pob_width(short image, char *pob_data) { + return *(short *)(pob_data + *(long *)(pob_data + image * 4 + 2) ); +} + + +short pob_height(short image, char *pob_data) { + return *(short *)(pob_data + *(long *)(pob_data + image * 4 + 2) + 2); +} + + +short pob_hs_x(short image, char *pob_data) { + return *(short *)(pob_data + *(long *)(pob_data + image * 4 + 2) + 4); +} + + +short pob_hs_y(short image, char *pob_data) { + return *(short *)(pob_data + *(long *)(pob_data + image * 4 + 2) + 6); +} + + +char read_pcx(FILE *handle, char *buffer, long buf_len, char *pal) { + short c1; + short a, b; + long ofs1; + + if (buffer != 0) { + fseek(handle, 128, SEEK_CUR); + + ofs1 = 0; + + while (ofs1 < buf_len) { + a = fgetc(handle); + if ( (a & 0xc0) == 0xc0) { + b = fgetc(handle); + a &= 0x3f; + for (c1 = 0; c1 < a; c1++) + buffer[ofs1++] = b; + } + else + buffer[ofs1++] = a; + } + + if (pal != 0) { + fseek(handle, 1, SEEK_CUR); + for (c1 = 0; c1 < 768; c1++) + pal[c1] = fgetc(handle) >> 2; + } + + } + + fclose(handle); + return 0; +} diff --git a/dos/interrpt.c b/dos/interrpt.c new file mode 100644 index 0000000..1cbba95 --- /dev/null +++ b/dos/interrpt.c @@ -0,0 +1,120 @@ +#include "globals.h" + + +struct { + char enabled; +} keyb_handler_info; + +volatile char keyb[256]; + +unsigned char scancode2ascii[256] = { + 0, 0, 49, 50, 51, 52, 53, 54, 55, 56,//0-9 + 57, 48, 45, 0, 0, 0, 113, 119, 101, 114,//10-19 + 116, 121, 117, 105, 111, 112, 0, 0, 0, 0,//20-29 + 97, 115, 100, 102, 103, 104, 106, 107, 108, 0,//30-39 + 0, 0, 0, 0, 122, 120, 99, 118, 98, 110,//40-49 + 109, 44, 46, 47, 0, 0, 0, 32, 0, 0,//50-59 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0}; + +_go32_dpmi_seginfo old_keyb_handler_seginfo, new_keyb_handler_seginfo; + + +void keyb_handler() { + unsigned char key; + static char extended; + int c1; + + key = inportb(0x60); + + if (key == 0xe0) + extended = 1; + else { + if (extended == 0) { + if ( (key & 0x80) == 0) { + keyb[key & 0x7f] = 1; + for (c1 = 48; c1 > 0; c1--) + last_keys[c1] = last_keys[c1 - 1]; + last_keys[0] = scancode2ascii[key & 0x7f]; + } + else + keyb[key & 0x7f] = 0; + } + else { + if ( (key & 0x80) == 0) { + keyb[(key & 0x7f) + 0x80] = 1; + for (c1 = 48; c1 > 0; c1--) + last_keys[c1] = last_keys[c1 - 1]; + last_keys[0] = scancode2ascii[(key & 0x7f) + 0x80]; + } + else + keyb[(key & 0x7f) + 0x80] = 0; + } + if (extended == 1) + extended = 0; + } + + outportb(0x20, 0x20); + +} + +void keyb_handler_end() {} + + +char hook_keyb_handler(void) { + + if (keyb_handler_info.enabled == 0) { + _go32_dpmi_lock_data( (char *)&keyb, sizeof(keyb) ); + _go32_dpmi_lock_code(keyb_handler, (unsigned long)keyb_handler_end - (unsigned long)keyb_handler); + _go32_dpmi_get_protected_mode_interrupt_vector(9, &old_keyb_handler_seginfo); + new_keyb_handler_seginfo.pm_offset = (int)keyb_handler; + if (_go32_dpmi_allocate_iret_wrapper(&new_keyb_handler_seginfo) != 0) + return 1; + if (_go32_dpmi_set_protected_mode_interrupt_vector(9, &new_keyb_handler_seginfo) != 0) { + _go32_dpmi_free_iret_wrapper(&new_keyb_handler_seginfo); + return 1; + } + keyb_handler_info.enabled = 1; + memset(last_keys, 0, sizeof(last_keys) ); + } + + return 0; + +} + + +void remove_keyb_handler(void) { + + if (keyb_handler_info.enabled == 1) { + _go32_dpmi_set_protected_mode_interrupt_vector(9, &old_keyb_handler_seginfo); + _go32_dpmi_free_iret_wrapper(&new_keyb_handler_seginfo); + keyb_handler_info.enabled = 0; + } + +} + + +char key_pressed(unsigned char key) { + + return keyb[key]; + +} + diff --git a/dos/libdj.a b/dos/libdj.a new file mode 100644 index 0000000000000000000000000000000000000000..e05659aa6af464a6c0b1db963f7f9e3515b11382 GIT binary patch literal 53048 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�h2jfIjwm8AIz&RF%;PPTXMaD4R z%$HuEX6J}(u8lX8*BUXhtdq0zio2UDcps{2oY}#Ng<_@lobqk3jBA3o(KhfRXATaQ z!68$r4L_-pZJxjlxShp5w==T=oGzTK${rWI7#?S;DD;A{Kkapn8R+(jVn zh$7aWO6NJ8Hl=+jN@Zj(9_(*Nv!5o|%ywCi2+(ZIPjlcA{M|+Vo~m@r$EadQQ)1WdX-dbn z!u_PK-A`9Ka^e0?)5)g0w7|a7uE$|CA*x$gtlYPcG9phFIdKBD9(7IdT<~a(3!FJV z+e=hAfpuwfZCd+U9QiiP6eT8eLdR2F{|b+;;E$M>6mTYH$An*3@MF-72Nd!g??jd2 znNMPIW=t@Ny6@VV*}-SQ>qDI=sM_E`~1@ zf4#HFiKV0Q&cUVtRE(JY{;MqXn4X#t91m6s9?cXdaP3H)^e}Z0 z2GlwEe6Z$?3&u&0PKZJKap+)Jw8&#dm`5@W#3SD@O|pGtDDo;U-!eBISrdm6AuL$r z-|5=zm!ZK&FldV&Cc%icNM-K|k8H7!khjAjWX-;Bke9;4>~Kvezcandl5c~z7;`R) z=1dFcjJ4>L6W}+EI{0H)dXN?ovSaOf!wK-)jbga$xV%#DxUiBq=>+)W4a?3v9xoL! zoXJBGTddu_99c9WsDK{{J0bYf4+hw8g3l$OGmfaW#QE4ZaiCEgYS{?+aX7A-oV!(P*n;NO_qr^bjqpLMs2MO{^vwQ&N1WJ32}0Gk zSEEwo+pMdvfH}h$It1z;rvTf~Hoy<44^onu)FSL(plCZ)QOh^�f>*Gk}UK#kZ#g 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 +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#define KEY_PL1_LEFT 0xcb +#define KEY_PL1_RIGHT 0xcd +#define KEY_PL1_JUMP 0xc8 +#define KEY_PL2_LEFT 0x1e +#define KEY_PL2_RIGHT 0x20 +#define KEY_PL2_JUMP 0x11 + +#define NUM_POBS 200 +#define NUM_OBJECTS 200 +#define NUM_FLIES 20 +#define NUM_LEFTOVERS 50 + +#define OBJ_SPRING 0 +#define OBJ_SPLASH 1 +#define OBJ_SMOKE 2 +#define OBJ_YEL_BUTFLY 3 +#define OBJ_PINK_BUTFLY 4 +#define OBJ_FUR 5 +#define OBJ_FLESH 6 +#define OBJ_FLESH_TRACE 7 + +#define OBJ_ANIM_SPRING 0 +#define OBJ_ANIM_SPLASH 1 +#define OBJ_ANIM_SMOKE 2 +#define OBJ_ANIM_YEL_BUTFLY_RIGHT 3 +#define OBJ_ANIM_YEL_BUTFLY_LEFT 4 +#define OBJ_ANIM_PINK_BUTFLY_RIGHT 5 +#define OBJ_ANIM_PINK_BUTFLY_LEFT 6 +#define OBJ_ANIM_FLESH_TRACE 7 + +#define MOD_MENU 0 +#define MOD_GAME 1 +#define MOD_SCORES 2 + +#define SFX_JUMP 0 +#define SFX_LAND 1 +#define SFX_DEATH 2 +#define SFX_SPRING 3 +#define SFX_SPLASH 4 +#define SFX_FLY 5 + +#define SFX_JUMP_FREQ 15000 +#define SFX_LAND_FREQ 15000 +#define SFX_DEATH_FREQ 20000 +#define SFX_SPRING_FREQ 15000 +#define SFX_SPLASH_FREQ 12000 +#define SFX_FLY_FREQ 12000 + + +struct { + char joy_enabled, mouse_enabled, num_mouse_buttons; + char no_sound, no_gore, fireworks; + char error_str[256]; + char draw_page, view_page; + struct { + int num_pobs; + struct { + int x, y; + int image; + char *pob_data; + int back_buf_ofs; + } pobs[NUM_POBS]; + } page_info[2]; + char *pob_backbuf[2]; +} main_info; + +struct { + char enabled, dead_flag; + int bumps; + int bumped[4]; + int x, y; + int x_add, y_add; + char direction, jump_ready, jump_abort, in_water; + int anim, frame, frame_tick, image; +} player[4]; + +struct { + int num_frames; + int restart_frame; + struct { + int image; + int ticks; + } frame[4]; +} player_anims[7]; + +struct { + char used, type; + int x, y; + int x_add, y_add; + int x_acc, y_acc; + int anim; + int frame, ticks; + int image; +} objects[300]; + +struct { + int x, y; + int raw_x, raw_y; + char but1, but2; + struct { + int x1, x2, x3; + int y1, y2, y3; + } calib_data; +} joy; + +struct { + char but1, but2, but3; +} mouse; + +char datfile_name[256]; + +char *background_pic; +char *mask_pic; + +char *rabbit_gobs; +char *font_gobs; + + +// main.c + +void steer_players(void); +void position_player(short player_num); +void fireworks(void); +void add_object(char type, short x, short y, long x_add, long y_add, short anim, short frame); +void update_objects(void); +char add_pob(char page, short x, short y, short image, char *pob_data); +void draw_pobs(char page); +void redraw_pob_backgrounds(char page); +char add_leftovers(char page, short x, short y, short image, char *pob_data); +void draw_leftovers(char page); +char init_level(short level); +void deinit_level(void); +char init_program(int argc, char *argv[]); +void deinit_program(void); +void read_joy(void); +char calib_joy(char type); +void read_mouse(void); +unsigned short rnd(unsigned short max); +char read_level(void); +FILE *dat_open(char *file_name, char *dat_name, char *mode); +int dat_filelen(char *file_name, char *dat_name); +void write_calib_data(void); + + +// menu.c + +char menu(void); +char menu_init(void); +void menu_deinit(void); + + +// gfx.c + +void open_screen(void); +void wait_vrt(void); +//void get_block(char page, short x, short y, short width, short height, char *buffer); +//void put_block(char page, short x, short y, short width, short height, char *buffer); +void put_text(char page, int x, int y, char *text, char align); +void put_pob(char page, short x, short y, short image, char *pob_data, char mask, char *mask_pic); +char pob_col(short x1, short y1, short image1, char *pob_data1, short x2, short y2, short image2, char *pob_data2); +short pob_width(short image, char *pob_data); +short pob_height(short image, char *pob_data); +short pob_hs_x(short image, char *pob_data); +short pob_hs_y(short image, char *pob_data); +char read_pcx(FILE *handle, char *buffer, long buf_len, char *pal); + +// gfx.s + +void get_block(char page, long x, long y, long width, long height, char *buffer); +void put_block(char page, long x, long y, long width, long height, char *buffer); + + +// interrpt.c + +volatile char last_keys[50]; + +char hook_keyb_handler(void); +void remove_keyb_handler(void); +char key_pressed(unsigned char key); + diff --git a/main.c b/main.c new file mode 100644 index 0000000..0b49356 --- /dev/null +++ b/main.c @@ -0,0 +1,2722 @@ +#include "globals.h" + + +__dpmi_regs regs; + +char *object_gobs; +char *number_gobs; + +char pal[768]; +char cur_pal[768]; + +char ban_map[17][22] = { +1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,1,0,0,0, +1,0,0,0,1,1,1,1,0,0,0,0,1,1,0,0,0,0,0,0,0,0, +1,0,0,0,0,0,0,0,0,0,0,1,1,1,1,0,0,0,0,0,1,1, +1,1,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,1, +1,1,1,0,0,0,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,1, +1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,0,0,0,1, +1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1, +1,1,1,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,1,1,1, +1,0,0,0,0,0,0,0,0,0,0,0,3,1,0,0,0,0,0,0,0,1, +1,0,0,0,0,0,0,0,0,0,0,3,1,1,1,0,0,0,0,0,0,1, +1,0,1,1,1,1,0,0,0,0,3,1,1,1,1,1,1,1,1,0,0,1, +1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1, +1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1, +2,2,2,2,2,2,2,2,1,1,0,0,0,0,0,1,3,3,3,1,1,1, +2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1}; + +struct { + int num_frames; + int restart_frame; + struct { + int image; + int ticks; + } frame[10]; +} object_anims[8] = {6, 0, 0, 3, 1, 3, 2, 3, 3, 3, 4, 3, 5, 3, 0, 0, 0, 0, 0, 0, 0, 0, + 9, 0, 6, 2, 7, 2, 8, 2, 9, 2,10, 2,11, 2,12, 2,13, 2,14, 2, 0, 0, + 5, 0,15, 3,16, 3,16, 3,17, 3,18, 3,19, 3, 0, 0, 0, 0, 0, 0, 0, 0, + 10, 0,20, 2,21, 2,22, 2,23, 2,24, 2,25, 2,24, 2,23, 2,22, 2,21, 2, + 10, 0,26, 2,27, 2,28, 2,29, 2,30, 2,31, 2,30, 2,29, 2,28, 2,27, 2, + 10, 0,32, 2,33, 2,34, 2,35, 2,36, 2,37, 2,36, 2,35, 2,34, 2,33, 2, + 10, 0,38, 2,39, 2,40, 2,41, 2,42, 2,43, 2,42, 2,41, 2,40, 2,39, 2, + 4, 0,76, 4,77, 4,78, 4,79, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; + +/*} object_anims[4] = {5, 0, 0, 2, 1, 2, 2, 2, 3, 2, 4, 2, 0, 0, + 6, 0, 5, 5, 6, 5, 7, 5, 8, 5, 9, 5,10, 5, + 6, 0,11, 3,12, 3,13, 3,14, 3,15, 3,16, 0x7fff, + 5, 0,17, 2,18, 2,19, 2,20, 2,21, 2, 0, 0};*/ + +struct { + int x, y; + int old_x, old_y; + char back[2], back_defined[2]; +} flies[NUM_FLIES]; + +struct { + struct { + short num_pobs; + struct { + int x, y; + int image; + char *pob_data; + } pobs[NUM_LEFTOVERS]; + } page[2]; +} leftovers; + +char pogostick, bunnies_in_space, jetpack, lord_of_the_flies, blood_is_thicker_than_water; + + +char main(int argc, char *argv[]) { + FILE *handle; + int c1, c2, c3, c4; + int l1, l2; + int s1, s2, s3, s4; + int closest_player, dist, cur_dist; + char end_loop_flag, fade_flag; + char mod_vol, sfx_vol, mod_fade_direction; + sfx_data fly; + char *ptr1; + char str1[100]; + + if (init_program(argc, argv) != 0) + deinit_program(); + + if (main_info.fireworks == 1) { + fireworks(); + deinit_program(); + } + + while (1) { + + if (menu() != 0) + deinit_program(); + + if (key_pressed(1) == 1) + break; + + if (init_level(0) != 0) { + deinit_level(); + deinit_program(); + } + + outportb(0x3c8, 0); + for (c1 = 0; c1 < 768; c1++) + outportb(0x3c9, cur_pal[c1]); + + for (c1 = 0; c1 < 4; c1++) { + outportw(0x3c4, ( (1 << c1) << 8) + 0x02); + l1 = c1; + for (l2 = 0; l2 < 25600; l2++) { + *(char *)(0xa0000 + l2 + __djgpp_conventional_base) = *(char *)(background_pic + l1); + *(char *)(0xa0000 + 32768 + l2 + __djgpp_conventional_base) = *(char *)(background_pic + l1); + l1 += 4; + } + } + + s1 = rnd(250) + 50; + s2 = rnd(150) + 50; + for (c1 = 0; c1 < NUM_FLIES; c1++) { + while (1) { + flies[c1].x = s1 + rnd(101) - 50; + flies[c1].y = s2 + rnd(101) - 50; + if (ban_map[flies[c1].y >> 4][flies[c1].x >> 4] == 0) + break; + } + flies[c1].back_defined[0] = 0; + flies[c1].back_defined[1] = 0; + } + + mod_vol = sfx_vol = 10; + mod_fade_direction = 1; + dj_ready_mod(MOD_GAME); + dj_set_mod_volume(mod_vol); + dj_set_sfx_volume(mod_vol); + dj_start_mod(); + dj_play_sfx(SFX_FLY, SFX_FLY_FREQ, 0, 0, 0, 4); + dj_set_nosound(0); + + lord_of_the_flies = bunnies_in_space = jetpack = pogostick = blood_is_thicker_than_water = 0; + end_loop_flag = 0; + main_info.page_info[0].num_pobs = 0; + main_info.page_info[1].num_pobs = 0; + main_info.view_page = 0; + main_info.draw_page = 1; + + while (1) { + + if (key_pressed(1) == 1) { + end_loop_flag = 1; + memset(pal, 0, 768); + mod_fade_direction = 0; + } + + if (strncmp(last_keys, "kcitsogop", strlen("kcitsogop") ) == 0) { + pogostick ^= 1; + last_keys[0] = 0; + } + if (strncmp(last_keys, "ecapsniseinnub", strlen("ecapsniseinnub") ) == 0) { + bunnies_in_space ^= 1; + last_keys[0] = 0; + } + if (strncmp(last_keys, "kcaptej", strlen("kcaptej") ) == 0) { + jetpack ^= 1; + last_keys[0] = 0; + } + if (strncmp(last_keys, "seilfehtfodrol", strlen("seilfehtfodrol") ) == 0) { + lord_of_the_flies ^= 1; + last_keys[0] = 0; + } + if (strncmp(last_keys, "retawnahtrekcihtsidoolb", strlen("retawnahtrekcihtsidoolb") ) == 0) { + blood_is_thicker_than_water ^= 1; + if (blood_is_thicker_than_water == 1) { + pal[432] = 63; + pal[433] = 32; + pal[434] = 32; + pal[435] = 53; + pal[436] = 17; + pal[437] = 17; + pal[438] = 42; + pal[439] = 7; + pal[440] = 7; + pal[441] = 28; + pal[442] = 0; + pal[443] = 0; + pal[444] = 24; + pal[445] = 0; + pal[446] = 0; + pal[447] = 19; + pal[448] = 0; + pal[449] = 0; + pal[450] = 12; + pal[451] = 0; + pal[452] = 0; + pal[453] = 7; + pal[454] = 0; + pal[455] = 0; + } + else { + pal[432] = 63; + pal[433] = 63; + pal[434] = 63; + pal[435] = 40; + pal[436] = 53; + pal[437] = 62; + pal[438] = 19; + pal[439] = 42; + pal[440] = 60; + pal[441] = 0; + pal[442] = 33; + pal[443] = 60; + pal[444] = 3; + pal[445] = 32; + pal[446] = 46; + pal[447] = 3; + pal[448] = 26; + pal[449] = 33; + pal[450] = 3; + pal[451] = 19; + pal[452] = 21; + pal[453] = 1; + pal[454] = 8; + pal[455] = 8; + } + last_keys[0] = 0; + } + + steer_players(); + + dj_mix(); + + for (c3 = 0; c3 < 6; c3++) { + if (c3 == 0) { + c1 = 0; + c2 = 1; + } + else if (c3 == 1) { + c1 = 0; + c2 = 2; + } + else if (c3 == 2) { + c1 = 0; + c2 = 3; + } + else if (c3 == 3) { + c1 = 1; + c2 = 2; + } + else if (c3 == 4) { + c1 = 1; + c2 = 3; + } + else if (c3 == 5) { + c1 = 2; + c2 = 3; + } + if (player[c1].enabled == 1 && player[c2].enabled == 1) { + if (labs(player[c1].x - player[c2].x) < (12L << 16) && labs(player[c1].y - player[c2].y) < (12L << 16) ) { + if ( (labs(player[c1].y - player[c2].y) >> 16) > 5) { + if (player[c1].y < player[c2].y) { + if (player[c1].y_add >= 0) { +// player[c1].y = player[c2].y - (16L << 16); + player[c1].y_add = -player[c1].y_add; + if (player[c1].y_add > -262144L) + player[c1].y_add = -262144L; + player[c1].jump_abort = 1; + player[c2].dead_flag = 1; + if (player[c2].anim != 6) { + player[c2].anim = 6; + player[c2].frame = 0; + player[c2].frame_tick = 0; + player[c2].image = player_anims[player[c2].anim].frame[player[c2].frame].image + player[c2].direction * 9; + if (main_info.no_gore == 0) { + for (c4 = 0; c4 < 6; c4++) + add_object(OBJ_FUR, (player[c2].x >> 16) + 6 + rnd(5), (player[c2].y >> 16) + 6 + rnd(5), (rnd(65535) - 32768) * 3, (rnd(65535) - 32768) * 3, 0, 44 + c2 * 8); + for (c4 = 0; c4 < 6; c4++) + add_object(OBJ_FLESH, (player[c2].x >> 16) + 6 + rnd(5), (player[c2].y >> 16) + 6 + rnd(5), (rnd(65535) - 32768) * 3, (rnd(65535) - 32768) * 3, 0, 76); + for (c4 = 0; c4 < 6; c4++) + add_object(OBJ_FLESH, (player[c2].x >> 16) + 6 + rnd(5), (player[c2].y >> 16) + 6 + rnd(5), (rnd(65535) - 32768) * 3, (rnd(65535) - 32768) * 3, 0, 77); + for (c4 = 0; c4 < 8; c4++) + add_object(OBJ_FLESH, (player[c2].x >> 16) + 6 + rnd(5), (player[c2].y >> 16) + 6 + rnd(5), (rnd(65535) - 32768) * 3, (rnd(65535) - 32768) * 3, 0, 78); + for (c4 = 0; c4 < 10; c4++) + add_object(OBJ_FLESH, (player[c2].x >> 16) + 6 + rnd(5), (player[c2].y >> 16) + 6 + rnd(5), (rnd(65535) - 32768) * 3, (rnd(65535) - 32768) * 3, 0, 79); + } + dj_play_sfx(SFX_DEATH, SFX_DEATH_FREQ + rnd(2000) - 1000, 64, 0, 0, -1); + player[c1].bumps++; + player[c1].bumped[c2]++; + s1 = player[c1].bumps % 100; + add_leftovers(0, 360, 34 + c1 * 64, s1 / 10, number_gobs); + add_leftovers(1, 360, 34 + c1 * 64, s1 / 10, number_gobs); + add_leftovers(0, 376, 34 + c1 * 64, s1 - (s1 / 10) * 10, number_gobs); + add_leftovers(1, 376, 34 + c1 * 64, s1 - (s1 / 10) * 10, number_gobs); + } + } + else { +// player[c1].y = player[c2].y - (16L << 16); + if (player[c2].y_add < 0) + player[c2].y_add = 0; + } + } + else { + if (player[c2].y_add >= 0) { +// player[c2].y = player[c1].y - (16L << 16); + player[c2].y_add = -player[c2].y_add; + if (player[c2].y_add > -262144L) + player[c2].y_add = -262144L; + player[c2].jump_abort = 1; + player[c1].dead_flag = 1; + if (player[c1].anim != 6) { + player[c1].anim = 6; + player[c1].frame = 0; + player[c1].frame_tick = 0; + player[c1].image = player_anims[player[c1].anim].frame[player[c1].frame].image + player[c1].direction * 9; + if (main_info.no_gore == 0) { + for (c4 = 0; c4 < 6; c4++) + add_object(OBJ_FUR, (player[c1].x >> 16) + 6 + rnd(5), (player[c1].y >> 16) + 6 + rnd(5), (rnd(65535) - 32768) * 3, (rnd(65535) - 32768) * 3, 0, 44 + c1 * 8); + for (c4 = 0; c4 < 6; c4++) + add_object(OBJ_FLESH, (player[c1].x >> 16) + 6 + rnd(5), (player[c1].y >> 16) + 6 + rnd(5), (rnd(65535) - 32768) * 3, (rnd(65535) - 32768) * 3, 0, 76); + for (c4 = 0; c4 < 7; c4++) + add_object(OBJ_FLESH, (player[c1].x >> 16) + 6 + rnd(5), (player[c1].y >> 16) + 6 + rnd(5), (rnd(65535) - 32768) * 3, (rnd(65535) - 32768) * 3, 0, 77); + for (c4 = 0; c4 < 8; c4++) + add_object(OBJ_FLESH, (player[c1].x >> 16) + 6 + rnd(5), (player[c1].y >> 16) + 6 + rnd(5), (rnd(65535) - 32768) * 3, (rnd(65535) - 32768) * 3, 0, 78); + for (c4 = 0; c4 < 10; c4++) + add_object(OBJ_FLESH, (player[c1].x >> 16) + 6 + rnd(5), (player[c1].y >> 16) + 6 + rnd(5), (rnd(65535) - 32768) * 3, (rnd(65535) - 32768) * 3, 0, 79); + } + dj_play_sfx(SFX_DEATH, SFX_DEATH_FREQ + rnd(2000) - 1000, 64, 0, 0, -1); + player[c2].bumps++; + player[c2].bumped[c1]++; + s1 = player[c2].bumps % 100; + add_leftovers(0, 360, 34 + c2 * 64, s1 / 10, number_gobs); + add_leftovers(1, 360, 34 + c2 * 64, s1 / 10, number_gobs); + add_leftovers(0, 376, 34 + c2 * 64, s1 - (s1 / 10) * 10, number_gobs); + add_leftovers(1, 376, 34 + c2 * 64, s1 - (s1 / 10) * 10, number_gobs); + } + } + else { +// player[c2].y = player[c1].y - (16L << 16); + if (player[c1].y_add < 0) + player[c1].y_add = 0; + } + } + } + else { + if (player[c1].x < player[c2].x) { + if (player[c1].x_add > 0) + player[c1].x = player[c2].x - (12L << 16); + else if (player[c2].x_add < 0) + player[c2].x = player[c1].x + (12L << 16); + else { + player[c1].x -= player[c1].x_add; + player[c2].x -= player[c2].x_add; + } + l1 = player[c2].x_add; + player[c2].x_add = player[c1].x_add; + player[c1].x_add = l1; + if (player[c1].x_add > 0) + player[c1].x_add = -player[c1].x_add; + if (player[c2].x_add < 0) + player[c2].x_add = -player[c2].x_add; + } + else { + if (player[c1].x_add > 0) + player[c2].x = player[c1].x - (12L << 16); + else if (player[c2].x_add < 0) + player[c1].x = player[c2].x + (12L << 16); + else { + player[c1].x -= player[c1].x_add; + player[c2].x -= player[c2].x_add; + } + l1 = player[c2].x_add; + player[c2].x_add = player[c1].x_add; + player[c1].x_add = l1; + if (player[c1].x_add < 0) + player[c1].x_add = -player[c1].x_add; + if (player[c2].x_add > 0) + player[c2].x_add = -player[c2].x_add; + } + } + } + } + } + + dj_mix(); + + main_info.page_info[main_info.draw_page].num_pobs = 0; + for (c1 = 0; c1 < 4; c1++) { + if (player[c1].enabled == 1) + main_info.page_info[main_info.draw_page].num_pobs++; + } + + update_objects(); + + dj_mix(); + + s1 = s2 = 0; + for (c1 = 0; c1 < NUM_FLIES; c1++) { + s1 += flies[c1].x; + s2 += flies[c1].y; + } + s1 /= NUM_FLIES; + s2 /= NUM_FLIES; + + dist = 0x7fff; + for (c1 = 0; c1 < 4; c1++) { + if (player[c1].enabled == 1) { + cur_dist = sqrt( (s1 - ( (player[c1].x >> 16) + 8) ) * (s1 - ( (player[c1].x >> 16) + 8) ) + (s2 - ( (player[c1].y >> 16) + 8) ) * (s2 - ( (player[c1].y >> 16) + 8) ) ); + if (cur_dist < dist) { + closest_player = c1; + dist = cur_dist; + } + } + } + s3 = 32 - dist / 3; + if (s3 < 0) + s3 = 0; + dj_set_sfx_channel_volume(4, s3); + + for (c1 = 0; c1 < NUM_FLIES; c1++) { + dist = 0x7fff; + for (c2 = 0; c2 < 4; c2++) { + if (player[c2].enabled == 1) { + cur_dist = sqrt( (flies[c1].x - ( (player[c2].x >> 16) + 8) ) * (flies[c1].x - ( (player[c2].x >> 16) + 8) ) + (flies[c1].y - ( (player[c2].y >> 16) + 8) ) * (flies[c1].y - ( (player[c2].y >> 16) + 8) ) ); + if (cur_dist < dist) { + closest_player = c2; + dist = cur_dist; + } + } + } + flies[c1].old_x = flies[c1].x; + flies[c1].old_y = flies[c1].y; + s3 = 0; + if ( (s1 - flies[c1].x) > 30) + s3 += 1; + else if ( (s1 - flies[c1].x) < -30) + s3 -= 1; + if (dist < 30) { + if ( ( (player[closest_player].x >> 16) + 8) > flies[c1].x) { + if (lord_of_the_flies == 0) + s3 -= 1; + else + s3 += 1; + } + else { + if (lord_of_the_flies == 0) + s3 += 1; + else + s3 -= 1; + } + } + s4 = rnd(3) - 1 + s3; + if ( (flies[c1].x + s4) < 16) + s4 = 0; + if ( (flies[c1].x + s4) > 351) + s4 = 0; + if (ban_map[flies[c1].y >> 4][(flies[c1].x + s4) >> 4] != 0) + s4 = 0; + flies[c1].x += s4; + s3 = 0; + if ( (s2 - flies[c1].y) > 30) + s3 += 1; + else if ( (s2 - flies[c1].y) < -30) + s3 -= 1; + if (dist < 30) { + if ( ( (player[closest_player].y >> 16) + 8) > flies[c1].y) { + if (lord_of_the_flies == 0) + s3 -= 1; + else + s3 += 1; + } + else { + if (lord_of_the_flies == 0) + s3 += 1; + else + s3 -= 1; + } + } + s4 = rnd(3) - 1 + s3; + if ( (flies[c1].y + s4) < 0) + s4 = 0; + if ( (flies[c1].y + s4) > 239) + s4 = 0; + if (ban_map[(flies[c1].y + s4) >> 4][flies[c1].x >> 4] != 0) + s4 = 0; + flies[c1].y += s4; + } + + dj_mix(); + + s1 = 0; + for (c1 = 0; c1 < 4; c1++) { + if (player[c1].enabled == 1) { + main_info.page_info[main_info.draw_page].pobs[s1].x = player[c1].x >> 16; + main_info.page_info[main_info.draw_page].pobs[s1].y = player[c1].y >> 16; + main_info.page_info[main_info.draw_page].pobs[s1].image = player[c1].image + c1 * 18; + main_info.page_info[main_info.draw_page].pobs[s1].pob_data = rabbit_gobs; + s1++; + } + } + + draw_pobs(main_info.draw_page); + + dj_mix(); + + ptr1 = (char *)(0xa0000 + ( (long)main_info.draw_page << 15) - __djgpp_base_address); + for (c1 = 0; c1 < 4; c1++) { + outportw(0x3ce, (c1 << 8) + 0x04); + outportw(0x3c4, ( (1 << c1) << 8) + 0x02); + for (c2 = 0; c2 < NUM_FLIES; c2++) { + if ( (flies[c2].x & 3) == c1) { + flies[c2].back[main_info.draw_page] = *(char *)(ptr1 + flies[c2].y * 100 + (flies[c2].x >> 2) ); + flies[c2].back_defined[main_info.draw_page] = 1; + if (mask_pic[flies[c2].y * 400 + flies[c2].x] == 0) + *(char *)(ptr1 + flies[c2].y * 100 + (flies[c2].x >> 2) ) = 0; + } + } + } + + if (mod_fade_direction == 1) { + if (mod_vol < 30) { + mod_vol++; + dj_set_mod_volume(mod_vol); + } + } + else { + if (mod_vol > 0) { + mod_vol--; + dj_set_mod_volume(mod_vol); + } + } + + if (mod_fade_direction == 1) { + if (sfx_vol < 64) { + sfx_vol++; + dj_set_sfx_volume(sfx_vol); + } + } + else { + if (sfx_vol > 0) { + sfx_vol--; + dj_set_sfx_volume(sfx_vol); + } + } + + fade_flag = 0; + for (c1 = 0; c1 < 768; c1++) { + if (cur_pal[c1] < pal[c1]) { + cur_pal[c1]++; + fade_flag = 1; + } + else if (cur_pal[c1] > pal[c1]) { + cur_pal[c1]--; + fade_flag = 1; + } + } + if (fade_flag == 0 && end_loop_flag == 1) + break; + + main_info.draw_page ^= 1; + main_info.view_page ^= 1; + + outportw(0x3d4, (main_info.view_page << 23) + 0x0d); + outportw(0x3d4, ( (main_info.view_page << 15) & 0xff00) + 0x0c); + + while( (inportb(0x3da) & 8) == 0) + dj_mix(); + while( (inportb(0x3da) & 8) == 8) + dj_mix(); + + if (fade_flag == 1) { + outportb(0x3c8, 0); + for (c1 = 0; c1 < 768; c1++) + outportb(0x3c9, cur_pal[c1]); + } + + ptr1 = (char *)(0xa0000 + ( (long)main_info.draw_page << 15) - __djgpp_base_address); + for (c1 = 0; c1 < 4; c1++) { + outportw(0x3c4, ( (1 << c1) << 8) + 0x02); + for (c2 = NUM_FLIES - 1; c2 >= 0; c2--) { + if ( (flies[c2].old_x & 3) == c1 && flies[c2].back_defined[main_info.draw_page] == 1) + *(char *)(ptr1 + flies[c2].old_y * 100 + (flies[c2].old_x >> 2) ) = flies[c2].back[main_info.draw_page]; + } + } + + redraw_pob_backgrounds(main_info.draw_page); + + draw_leftovers(main_info.draw_page); + + } + + dj_stop_sfx_channel(4); + + deinit_level(); + + memset(mask_pic, 0, 102400L); + + outportw(0x3c4, 0x0f02); + memset( (char *)(0xa0000 + (long)(main_info.view_page << 15) + __djgpp_conventional_base), 0, 32768); + put_text(main_info.view_page, 100, 50, "DOTT", 2); + put_text(main_info.view_page, 160, 50, "JIFFY", 2); + put_text(main_info.view_page, 220, 50, "FIZZ", 2); + put_text(main_info.view_page, 280, 50, "MIJJI", 2); + put_text(main_info.view_page, 40, 80, "DOTT", 2); + put_text(main_info.view_page, 40, 110, "JIFFY", 2); + put_text(main_info.view_page, 40, 140, "FIZZ", 2); + put_text(main_info.view_page, 40, 170, "MIJJI", 2); + for (c1 = 0; c1 < 4; c1++) { + for (c2 = 0; c2 < 4; c2++) { + if (c2 != c1) { + itoa(player[c1].bumped[c2], str1, 10); + put_text(main_info.view_page, 100 + c2 * 60, 80 + c1 * 30, str1, 2); + } + else + put_text(main_info.view_page, 100 + c2 * 60, 80 + c1 * 30, "-", 2); + } + itoa(player[c1].bumps, str1, 10); + put_text(main_info.view_page, 350, 80 + c1 * 30, str1, 2); + } + put_text(main_info.view_page, 200, 230, "Press ESC to continue", 2); + + if ( (handle = dat_open("menu.pcx", datfile_name, "rb") ) == 0) { + strcpy(main_info.error_str, "Error loading 'menu.pcx', aborting...\n"); + return 1; + } + if (read_pcx(handle, background_pic, 102400L, pal) != 0) { + strcpy(main_info.error_str, "Error loading 'menu.pcx', aborting...\n"); + return 1; + } + fclose(handle); + + memset(cur_pal, 0, 768); + + outportb(0x3c8, 0); + for (c1 = 0; c1 < 768; c1++) + outportb(0x3c9, cur_pal[c1]); + + mod_vol = 0; + dj_ready_mod(MOD_SCORES); + dj_set_mod_volume(mod_vol); + dj_start_mod(); + dj_set_nosound(0); + + while (key_pressed(1) == 0) { + if (mod_vol < 35) + mod_vol++; + dj_set_mod_volume(mod_vol); + for (c1 = 0; c1 < 768; c1++) { + if (cur_pal[c1] < pal[c1]) + cur_pal[c1]++; + } + dj_mix(); + wait_vrt(); + outportb(0x3c8, 0); + for (c1 = 0; c1 < 768; c1++) + outportb(0x3c9, cur_pal[c1]); + } + while (key_pressed(1) == 1) + dj_mix(); + + memset(pal, 0, 768); + + while (mod_vol > 0) { + mod_vol--; + dj_set_mod_volume(mod_vol); + for (c1 = 0; c1 < 768; c1++) { + if (cur_pal[c1] > pal[c1]) + cur_pal[c1]--; + } + dj_mix(); + wait_vrt(); + outportb(0x3c8, 0); + for (c1 = 0; c1 < 768; c1++) + outportb(0x3c9, cur_pal[c1]); + } + + outportb(0x3c8, 0); + for (c1 = 0; c1 < 768; c1++) + outportb(0x3c9, 0); + + dj_set_nosound(1); + dj_stop_mod(); + + } + + deinit_program(); + +} + + +void steer_players(void) { + int c1, c2; + int s1, s2; + + if (main_info.mouse_enabled == 1) + read_mouse(); + if (main_info.joy_enabled == 1) + read_joy(); + + for (c1 = 0; c1 < 4; c1++) { + + if (player[c1].enabled == 1) { + + if (player[c1].dead_flag == 0) { + + if ( (c1 == 0 && ( (key_pressed(KEY_PL1_LEFT) == 1 && key_pressed(KEY_PL1_RIGHT) == 1) ) ) || (c1 == 1 && ( (key_pressed(KEY_PL2_LEFT) == 1 && key_pressed(KEY_PL2_RIGHT) == 1) ) ) || (c1 == 2 && ( (joy.x < -512 && joy.x > 512) ) ) || (c1 == 3 && ( (mouse.but1 == 1 && mouse.but2 == 1) ) ) ) { + if (player[c1].direction == 0) { + if ( (c1 == 0 && key_pressed(KEY_PL1_RIGHT) == 1) || (c1 == 1 && key_pressed(KEY_PL2_RIGHT) == 1) || (c1 == 2 && joy.x > 512) || (c1 == 3 && mouse.but2 == 1) ) { + s1 = (player[c1].x >> 16); + s2 = (player[c1].y >> 16); + if (ban_map[(s2 + 16) >> 4][(s1 + 8) >> 4] == 3) { + if (player[c1].x_add < 0) + player[c1].x_add += 1024; + else + player[c1].x_add += 768; + } + else if ( (ban_map[(s2 + 16) >> 4][s1 >> 4] != 1 && ban_map[(s2 + 16) >> 4][(s1 + 15) >> 4] == 3) || (ban_map[(s2 + 16) >> 4][s1 >> 4] == 3 && ban_map[(s2 + 16) >> 4][(s1 + 15) >> 4] != 1) ) { + if (player[c1].x_add > 0) + player[c1].x_add += 1024; + else + player[c1].x_add += 768; + } + else { + if (player[c1].x_add < 0) { + player[c1].x_add += 16384; + if (player[c1].x_add < 98304L && player[c1].in_water == 0 && ban_map[(s2 + 16) >> 4][(s1 + 8) >> 4] == 1) + add_object(OBJ_SMOKE, (player[c1].x >> 16) + 2 + rnd(9), (player[c1].y >> 16) + 13 + rnd(5), 0, -16384 - rnd(8192), OBJ_ANIM_SMOKE, 0); + } + else + player[c1].x_add += 12288; + } + if (player[c1].x_add > 98304L) + player[c1].x_add = 98304L; + player[c1].direction = 0; + if (player[c1].anim == 0) { + player[c1].anim = 1; + player[c1].frame = 0; + player[c1].frame_tick = 0; + player[c1].image = player_anims[player[c1].anim].frame[player[c1].frame].image + player[c1].direction * 9; + } + } + } + else { + if ( (c1 == 0 && key_pressed(KEY_PL1_LEFT) == 1) || (c1 == 1 && key_pressed(KEY_PL2_LEFT) == 1) || (c1 == 2 && joy.x < -512) || (c1 == 3 && mouse.but1 == 1) ) { + s1 = (player[c1].x >> 16); + s2 = (player[c1].y >> 16); + if (ban_map[(s2 + 16) >> 4][(s1 + 8) >> 4] == 3) { + if (player[c1].x_add > 0) + player[c1].x_add -= 1024; + else + player[c1].x_add -= 768; + } + else if ( (ban_map[(s2 + 16) >> 4][s1 >> 4] != 1 && ban_map[(s2 + 16) >> 4][(s1 + 15) >> 4] == 3) || (ban_map[(s2 + 16) >> 4][s1 >> 4] == 3 && ban_map[(s2 + 16) >> 4][(s1 + 15) >> 4] != 1) ) { + if (player[c1].x_add > 0) + player[c1].x_add -= 1024; + else + player[c1].x_add -= 768; + } + else { + if (player[c1].x_add > 0) { + player[c1].x_add -= 16384; + if (player[c1].x_add > -98304L && player[c1].in_water == 0 && ban_map[(s2 + 16) >> 4][(s1 + 8) >> 4] == 1) + add_object(OBJ_SMOKE, (player[c1].x >> 16) + 2 + rnd(9), (player[c1].y >> 16) + 13 + rnd(5), 0, -16384 - rnd(8192), OBJ_ANIM_SMOKE, 0); + } + else + player[c1].x_add -= 12288; + } + if (player[c1].x_add < -98304L) + player[c1].x_add = -98304L; + player[c1].direction = 1; + if (player[c1].anim == 0) { + player[c1].anim = 1; + player[c1].frame = 0; + player[c1].frame_tick = 0; + player[c1].image = player_anims[player[c1].anim].frame[player[c1].frame].image + player[c1].direction * 9; + } + } + } + } + else if ( (c1 == 0 && key_pressed(KEY_PL1_LEFT) == 1) || (c1 == 1 && key_pressed(KEY_PL2_LEFT) == 1) || (c1 == 2 && joy.x < -512) || (c1 == 3 && mouse.but1 == 1) ) { + s1 = (player[c1].x >> 16); + s2 = (player[c1].y >> 16); + if (ban_map[(s2 + 16) >> 4][(s1 + 8) >> 4] == 3) { + if (player[c1].x_add > 0) + player[c1].x_add -= 1024; + else + player[c1].x_add -= 768; + } + else if ( (ban_map[(s2 + 16) >> 4][s1 >> 4] != 1 && ban_map[(s2 + 16) >> 4][(s1 + 15) >> 4] == 3) || (ban_map[(s2 + 16) >> 4][s1 >> 4] == 3 && ban_map[(s2 + 16) >> 4][(s1 + 15) >> 4] != 1) ) { + if (player[c1].x_add > 0) + player[c1].x_add -= 1024; + else + player[c1].x_add -= 768; + } + else { + if (player[c1].x_add > 0) { + player[c1].x_add -= 16384; + if (player[c1].x_add > -98304L && player[c1].in_water == 0 && ban_map[(s2 + 16) >> 4][(s1 + 8) >> 4] == 1) + add_object(OBJ_SMOKE, (player[c1].x >> 16) + 2 + rnd(9), (player[c1].y >> 16) + 13 + rnd(5), 0, -16384 - rnd(8192), OBJ_ANIM_SMOKE, 0); + } + else + player[c1].x_add -= 12288; + } + if (player[c1].x_add < -98304L) + player[c1].x_add = -98304L; + player[c1].direction = 1; + if (player[c1].anim == 0) { + player[c1].anim = 1; + player[c1].frame = 0; + player[c1].frame_tick = 0; + player[c1].image = player_anims[player[c1].anim].frame[player[c1].frame].image + player[c1].direction * 9; + } + } + else if ( (c1 == 0 && key_pressed(KEY_PL1_RIGHT) == 1) || (c1 == 1 && key_pressed(KEY_PL2_RIGHT) == 1) || (c1 == 2 && joy.x > 512) || (c1 == 3 && mouse.but2 == 1) ) { + s1 = (player[c1].x >> 16); + s2 = (player[c1].y >> 16); + if (ban_map[(s2 + 16) >> 4][(s1 + 8) >> 4] == 3) { + if (player[c1].x_add < 0) + player[c1].x_add += 1024; + else + player[c1].x_add += 768; + } + else if ( (ban_map[(s2 + 16) >> 4][s1 >> 4] != 1 && ban_map[(s2 + 16) >> 4][(s1 + 15) >> 4] == 3) || (ban_map[(s2 + 16) >> 4][s1 >> 4] == 3 && ban_map[(s2 + 16) >> 4][(s1 + 15) >> 4] != 1) ) { + if (player[c1].x_add > 0) + player[c1].x_add += 1024; + else + player[c1].x_add += 768; + } + else { + if (player[c1].x_add < 0) { + player[c1].x_add += 16384; + if (player[c1].x_add < 98304L && player[c1].in_water == 0 && ban_map[(s2 + 16) >> 4][(s1 + 8) >> 4] == 1) + add_object(OBJ_SMOKE, (player[c1].x >> 16) + 2 + rnd(9), (player[c1].y >> 16) + 13 + rnd(5), 0, -16384 - rnd(8192), OBJ_ANIM_SMOKE, 0); + } + else + player[c1].x_add += 12288; + } + if (player[c1].x_add > 98304L) + player[c1].x_add = 98304L; + player[c1].direction = 0; + if (player[c1].anim == 0) { + player[c1].anim = 1; + player[c1].frame = 0; + player[c1].frame_tick = 0; + player[c1].image = player_anims[player[c1].anim].frame[player[c1].frame].image + player[c1].direction * 9; + } + } +// if ( (c1 == 0 && ( (key_pressed(KEY_PL1_LEFT) == 0 && key_pressed(KEY_PL1_RIGHT) == 0) || (key_pressed(KEY_PL1_LEFT) == 1 && key_pressed(KEY_PL1_RIGHT) == 1) ) ) || (c1 == 1 && ( (key_pressed(KEY_PL2_LEFT) == 0 && key_pressed(KEY_PL2_RIGHT) == 0) || (key_pressed(KEY_PL2_LEFT) == 1 && key_pressed(KEY_PL2_RIGHT) == 1) ) ) || (c1 == 2 && ( (joy.x >= -512 && joy.x <= 512) || (joy.x < -512 && joy.x > 512) ) ) || (c1 == 3 && ( (mouse.but1 == 0 && mouse.but2 == 0) || (mouse.but1 == 1 && mouse.but2 == 1) ) ) ) { + else if ( (c1 == 0 && ( (key_pressed(KEY_PL1_LEFT) == 0 && key_pressed(KEY_PL1_RIGHT) == 0) ) ) || (c1 == 1 && ( (key_pressed(KEY_PL2_LEFT) == 0 && key_pressed(KEY_PL2_RIGHT) == 0) ) ) || (c1 == 2 && ( (joy.x >= -512 && joy.x <= 512) ) ) || (c1 == 3 && ( (mouse.but1 == 0 && mouse.but2 == 0) ) ) ) { + s1 = (player[c1].x >> 16); + s2 = (player[c1].y >> 16); + if (ban_map[(s2 + 16) >> 4][(s1 + 8) >> 4] == 1 || ban_map[(s2 + 16) >> 4][(s1 + 8) >> 4] == 4 || ( ( (ban_map[(s2 + 16) >> 4][s1 >> 4] == 1 || ban_map[(s2 + 16) >> 4][s1 >> 4] == 4) && ban_map[(s2 + 16) >> 4][(s1 + 15) >> 4] != 3) || (ban_map[(s2 + 16) >> 4][s1 >> 4] != 3 && (ban_map[(s2 + 16) >> 4][(s1 + 15) >> 4] == 1 || ban_map[(s2 + 16) >> 4][(s1 + 15) >> 4] == 4) ) ) ) { + if (player[c1].x_add < 0) { + player[c1].x_add += 16384; + if (player[c1].x_add > 0) + player[c1].x_add = 0; + } + else { + player[c1].x_add -= 16384; + if (player[c1].x_add < 0) + player[c1].x_add = 0; + } + if (player[c1].x_add != 0 && ban_map[(s2 + 16) >> 4][(s1 + 8) >> 4] == 1) + add_object(OBJ_SMOKE, (player[c1].x >> 16) + 2 + rnd(9), (player[c1].y >> 16) + 13 + rnd(5), 0, -16384 - rnd(8192), OBJ_ANIM_SMOKE, 0); + } + if (player[c1].anim == 1) { + player[c1].anim = 0; + player[c1].frame = 0; + player[c1].frame_tick = 0; + player[c1].image = player_anims[player[c1].anim].frame[player[c1].frame].image + player[c1].direction * 9; + } +// if (c1 == 3 && main_info.num_mouse_buttons == 2) +// player[c1].jump_abort = 1; + } +/* +// if ( (player[c1].y >> 16) >= 208 && (player[c1].x >> 16) >= 136 && (player[c1].x >> 16) < 160) { + if (ban_map[( (player[c1].y >> 16) + 15) >> 4][( (player[c1].x >> 16) + 8) >> 4] == 4) { + player[c1].y = ( (player[c1].y >> 16) & 0xfff0) << 16; + player[c1].y_add = -400000L; + player[c1].anim = 2; + player[c1].frame = 0; + player[c1].frame_tick = 0; + player[c1].image = player_anims[player[c1].anim].frame[player[c1].frame].image + player[c1].direction * 9; + player[c1].jump_ready = 0; + player[c1].jump_abort = 0; +// objects[0].frame = 0; +// objects[0].ticks = object_anims[objects[0].anim].frame[objects[0].frame].ticks; +// objects[0].image = object_anims[objects[0].anim].frame[objects[0].frame].image; + dj_play_sfx(SFX_SPRING, SFX_SPRING_FREQ + rnd(2000) - 1000, 64, 0, 0, -1); + }*/ + + if (jetpack == 0) { + +// if (pogostick == 1 || (player[c1].jump_ready == 1 && ( (c1 == 0 && key_pressed(KEY_PL1_JUMP) == 1) || (c1 == 1 && key_pressed(KEY_PL2_JUMP) == 1) || (c1 == 2 && joy.but1 == 1) || (c1 == 3 && mouse.but3 == 1) ) ) ) { + if (pogostick == 1 || (player[c1].jump_ready == 1 && ( (c1 == 0 && key_pressed(KEY_PL1_JUMP) == 1) || (c1 == 1 && key_pressed(KEY_PL2_JUMP) == 1) || (c1 == 2 && joy.but1 == 1) || (c1 == 3 && ( (main_info.num_mouse_buttons == 2 && mouse.but1 == 1 && mouse.but2 == 1) || (main_info.num_mouse_buttons == 3 && mouse.but3 == 1) ) ) ) ) ) { + s1 = (player[c1].x >> 16); + s2 = (player[c1].y >> 16); + if (s2 < -16) + s2 = -16; + if (ban_map[(s2 + 16) >> 4][s1 >> 4] == 1 || ban_map[(s2 + 16) >> 4][s1 >> 4] == 3 || ban_map[(s2 + 16) >> 4][(s1 + 15) >> 4] == 1 || ban_map[(s2 + 16) >> 4][(s1 + 15) >> 4] == 3) { + player[c1].y_add = -280000L; + player[c1].anim = 2; + player[c1].frame = 0; + player[c1].frame_tick = 0; + player[c1].image = player_anims[player[c1].anim].frame[player[c1].frame].image + player[c1].direction * 9; + player[c1].jump_ready = 0; +// if (c1 == 3 && main_info.num_mouse_buttons == 2) +// player[c1].jump_abort = 0; +// else + player[c1].jump_abort = 1; + if (pogostick == 0) + dj_play_sfx(SFX_JUMP, SFX_JUMP_FREQ + rnd(2000) - 1000, 64, 0, 0, -1); + else + dj_play_sfx(SFX_SPRING, SFX_SPRING_FREQ + rnd(2000) - 1000, 64, 0, 0, -1); + } + if ( (ban_map[(s2 + 7) >> 4][s1 >> 4] == 0 || ban_map[(s2 + 7) >> 4][(s1 + 15) >> 4] == 0) && (ban_map[(s2 + 8) >> 4][s1 >> 4] == 2 || ban_map[(s2 + 8) >> 4][(s1 + 15) >> 4] == 2) ) { + player[c1].y_add = -196608L; + player[c1].in_water = 0; + player[c1].anim = 2; + player[c1].frame = 0; + player[c1].frame_tick = 0; + player[c1].image = player_anims[player[c1].anim].frame[player[c1].frame].image + player[c1].direction * 9; + player[c1].jump_ready = 0; +// if (c1 == 3 && main_info.num_mouse_buttons == 2) +// player[c1].jump_abort = 0; +// else + player[c1].jump_abort = 1; + if (pogostick == 0) + dj_play_sfx(SFX_JUMP, SFX_JUMP_FREQ + rnd(2000) - 1000, 64, 0, 0, -1); + else + dj_play_sfx(SFX_SPRING, SFX_SPRING_FREQ + rnd(2000) - 1000, 64, 0, 0, -1); + } + } +// if (pogostick == 0 && ( (c1 == 0 && key_pressed(KEY_PL1_JUMP) == 0) || (c1 == 1 && key_pressed(KEY_PL2_JUMP) == 0) || (c1 == 2 && joy.but1 == 0) || (c1 == 3 && mouse.but3 == 0) ) ) { + if (pogostick == 0 && ( (c1 == 0 && key_pressed(KEY_PL1_JUMP) == 0) || (c1 == 1 && key_pressed(KEY_PL2_JUMP) == 0) || (c1 == 2 && joy.but1 == 0) || (c1 == 3 && ( (main_info.num_mouse_buttons == 2 && (mouse.but1 == 0 && mouse.but2 == 0) ) || (main_info.num_mouse_buttons == 3 && mouse.but3 == 0) ) ) ) ) { + player[c1].jump_ready = 1; + if (player[c1].in_water == 0 && player[c1].y_add < 0 && player[c1].jump_abort == 1) { + if (bunnies_in_space == 0) + player[c1].y_add += 32768; + else + player[c1].y_add += 16384; + if (player[c1].y_add > 0) + player[c1].y_add = 0; + } + } + if (c1 == 3 && main_info.num_mouse_buttons == 2 && (mouse.but1 == 0 || mouse.but2 == 0) ) + player[c1].jump_ready = 1; + + } + else { + + if ( ( (c1 == 0 && key_pressed(KEY_PL1_JUMP) == 1) || (c1 == 1 && key_pressed(KEY_PL2_JUMP) == 1) || (c1 == 2 && joy.but1 == 1) || (c1 == 3 && mouse.but3 == 1) ) ) { + player[c1].y_add -= 16384; + if (player[c1].y_add < -400000L) + player[c1].y_add = -400000L; + if ( (ban_map[(s2 + 7) >> 4][s1 >> 4] == 0 || ban_map[(s2 + 7) >> 4][(s1 + 15) >> 4] == 0) && (ban_map[(s2 + 8) >> 4][s1 >> 4] == 2 || ban_map[(s2 + 8) >> 4][(s1 + 15) >> 4] == 2) ) + player[c1].in_water = 0; + if (rnd(100) < 50) + add_object(OBJ_SMOKE, (player[c1].x >> 16) + 6 + rnd(5), (player[c1].y >> 16) + 10 + rnd(5), 0, 16384 + rnd(8192), OBJ_ANIM_SMOKE, 0); + } + + } + + player[c1].x += player[c1].x_add; + if ( (player[c1].x >> 16) < 0) { + player[c1].x = 0; + player[c1].x_add = 0; + } + if ( (player[c1].x >> 16) + 15 > 351) { + player[c1].x = 336L << 16; + player[c1].x_add = 0; + } + if (player[c1].y > 0) { +// if (player[c1].x_add < 0) { + s1 = (player[c1].x >> 16); + s2 = (player[c1].y >> 16); + if (ban_map[s2 >> 4][s1 >> 4] == 1 || ban_map[s2 >> 4][s1 >> 4] == 3 || ban_map[s2 >> 4][s1 >> 4] == 4 || ban_map[(s2 + 15) >> 4][s1 >> 4] == 1 || ban_map[(s2 + 15) >> 4][s1 >> 4] == 3 || ban_map[(s2 + 15) >> 4][s1 >> 4] == 4) { + player[c1].x = ( ( (s1 + 16) & 0xfff0) ) << 16; + player[c1].x_add = 0; + } +// } +// else { + s1 = (player[c1].x >> 16); + s2 = (player[c1].y >> 16); + if (ban_map[s2 >> 4][(s1 + 15) >> 4] == 1 || ban_map[s2 >> 4][(s1 + 15) >> 4] == 3 || ban_map[s2 >> 4][(s1 + 15) >> 4] == 4 || ban_map[(s2 + 15) >> 4][(s1 + 15) >> 4] == 1 || ban_map[(s2 + 15) >> 4][(s1 + 15) >> 4] == 3 || ban_map[(s2 + 15) >> 4][(s1 + 15) >> 4] == 4) { + player[c1].x = ( ( (s1 + 16) & 0xfff0) - 16) << 16; + player[c1].x_add = 0; + } +// } + } + else { + s1 = (player[c1].x >> 16); + s2 = 0; + if (ban_map[s2 >> 4][s1 >> 4] == 1 || ban_map[s2 >> 4][s1 >> 4] == 3 || ban_map[s2 >> 4][s1 >> 4] == 4 || ban_map[(s2 + 15) >> 4][s1 >> 4] == 1 || ban_map[(s2 + 15) >> 4][s1 >> 4] == 3 || ban_map[(s2 + 15) >> 4][s1 >> 4] == 4) { + player[c1].x = ( ( (s1 + 16) & 0xfff0) ) << 16; + player[c1].x_add = 0; + } + s1 = (player[c1].x >> 16); + s2 = 0; + if (ban_map[s2 >> 4][(s1 + 15) >> 4] == 1 || ban_map[s2 >> 4][(s1 + 15) >> 4] == 3 || ban_map[s2 >> 4][(s1 + 15) >> 4] == 4 || ban_map[(s2 + 15) >> 4][(s1 + 15) >> 4] == 1 || ban_map[(s2 + 15) >> 4][(s1 + 15) >> 4] == 3 || ban_map[(s2 + 15) >> 4][(s1 + 15) >> 4] == 4) { + player[c1].x = ( ( (s1 + 16) & 0xfff0) - 16) << 16; + player[c1].x_add = 0; + } + } + + player[c1].y += player[c1].y_add; + + s1 = (player[c1].x >> 16); + s2 = (player[c1].y >> 16); + if (ban_map[(s2 + 15) >> 4][(s1 + 8) >> 4] == 4 || ( (ban_map[(s2 + 15) >> 4][s1 >> 4] == 4 && ban_map[(s2 + 15) >> 4][(s1 + 15) >> 4] != 1) || (ban_map[(s2 + 15) >> 4][s1 >> 4] != 1 && ban_map[(s2 + 15) >> 4][(s1 + 15) >> 4] == 4) ) ) { + player[c1].y = ( (player[c1].y >> 16) & 0xfff0) << 16; + player[c1].y_add = -400000L; + player[c1].anim = 2; + player[c1].frame = 0; + player[c1].frame_tick = 0; + player[c1].image = player_anims[player[c1].anim].frame[player[c1].frame].image + player[c1].direction * 9; + player[c1].jump_ready = 0; + player[c1].jump_abort = 0; + for (c2 = 0; c2 < 300; c2++) { + if (objects[c2].used == 1 && objects[c2].type == OBJ_SPRING) { + if (ban_map[(s2 + 15) >> 4][(s1 + 8) >> 4] == 4) { + if ( (objects[c2].x >> 20) == ( (s1 + 8) >> 4) && (objects[c2].y >> 20) == ( (s2 + 15) >> 4) ) { + objects[c2].frame = 0; + objects[c2].ticks = object_anims[objects[c2].anim].frame[objects[c2].frame].ticks; + objects[c2].image = object_anims[objects[c2].anim].frame[objects[c2].frame].image; + break; + } + } + else { + if (ban_map[(s2 + 15) >> 4][s1 >> 4] == 4) { + if ( (objects[c2].x >> 20) == (s1 >> 4) && (objects[c2].y >> 20) == ( (s2 + 15) >> 4) ) { + objects[c2].frame = 0; + objects[c2].ticks = object_anims[objects[c2].anim].frame[objects[c2].frame].ticks; + objects[c2].image = object_anims[objects[c2].anim].frame[objects[c2].frame].image; + break; + } + } + else if (ban_map[(s2 + 15) >> 4][(s1 + 15) >> 4] == 4) { + if ( (objects[c2].x >> 20) == ( (s1 + 15) >> 4) && (objects[c2].y >> 20) == ( (s2 + 15) >> 4) ) { + objects[c2].frame = 0; + objects[c2].ticks = object_anims[objects[c2].anim].frame[objects[c2].frame].ticks; + objects[c2].image = object_anims[objects[c2].anim].frame[objects[c2].frame].image; + break; + } + } + } + } + } + dj_play_sfx(SFX_SPRING, SFX_SPRING_FREQ + rnd(2000) - 1000, 64, 0, 0, -1); + } + +/* if ( (player[c1].y >> 16) < 0) { + player[c1].y = 0; + player[c1].y_add = 0; + }*/ +// if ( (player[c1].y >> 16) + 15 > 255) { +// player[c1].y = 240L << 16; +// player[c1].y_add = 0; +/* player[c1].anim = 2; + player[c1].frame = 0; + player[c1].frame_tick = 0;*/ +// } +// if (player[c1].y_add < 0) { + s1 = (player[c1].x >> 16); + s2 = (player[c1].y >> 16); + if (s2 < 0) + s2 = 0; + if (ban_map[s2 >> 4][s1 >> 4] == 1 || ban_map[s2 >> 4][s1 >> 4] == 3 || ban_map[s2 >> 4][s1 >> 4] == 4 || ban_map[s2 >> 4][(s1 + 15) >> 4] == 1 || ban_map[s2 >> 4][(s1 + 15) >> 4] == 3 || ban_map[s2 >> 4][(s1 + 15) >> 4] == 4) { + player[c1].y = ( ( (s2 + 16) & 0xfff0) ) << 16; + player[c1].y_add = 0; + player[c1].anim = 0; + player[c1].frame = 0; + player[c1].frame_tick = 0; + player[c1].image = player_anims[player[c1].anim].frame[player[c1].frame].image + player[c1].direction * 9; + } +// } +// if (player[c1].y_add > 0) { + s1 = (player[c1].x >> 16); + s2 = (player[c1].y >> 16); + if (s2 < 0) + s2 = 0; +// if (ban_map[(s2 + 8) >> 4][s1 >> 4] == 2 || ban_map[(s2 + 8) >> 4][(s1 + 15) >> 4] == 2) { + if (ban_map[(s2 + 8) >> 4][(s1 + 8) >> 4] == 2) { + if (player[c1].in_water == 0) { + player[c1].in_water = 1; + player[c1].anim = 4; + player[c1].frame = 0; + player[c1].frame_tick = 0; + player[c1].image = player_anims[player[c1].anim].frame[player[c1].frame].image + player[c1].direction * 9; + if (player[c1].y_add >= 32768) { + add_object(OBJ_SPLASH, (player[c1].x >> 16) + 8, ( (player[c1].y >> 16) & 0xfff0) + 15, 0, 0, OBJ_ANIM_SPLASH, 0); + if (blood_is_thicker_than_water == 0) + dj_play_sfx(SFX_SPLASH, SFX_SPLASH_FREQ + rnd(2000) - 1000, 64, 0, 0, -1); + else + dj_play_sfx(SFX_SPLASH, SFX_SPLASH_FREQ + rnd(2000) - 5000, 64, 0, 0, -1); + } + } + player[c1].y_add -= 1536; + if (player[c1].y_add < 0 && player[c1].anim != 5) { + player[c1].anim = 5; + player[c1].frame = 0; + player[c1].frame_tick = 0; + player[c1].image = player_anims[player[c1].anim].frame[player[c1].frame].image + player[c1].direction * 9; + } + if (player[c1].y_add < -65536L) + player[c1].y_add = -65536L; + if (player[c1].y_add > 65535L) + player[c1].y_add = 65535L; +/* player[c1].anim = 2; + player[c1].frame = 0; + player[c1].frame_tick = 0; + player[c1].image = player_anims[player[c1].anim].frame[player[c1].frame].image + player[c1].direction * 9;*/ + if (ban_map[(s2 + 15) >> 4][s1 >> 4] == 1 || ban_map[(s2 + 15) >> 4][s1 >> 4] == 3 || ban_map[(s2 + 15) >> 4][(s1 + 15) >> 4] == 1 || ban_map[(s2 + 15) >> 4][(s1 + 15) >> 4] == 3) { + player[c1].y = ( ( (s2 + 16) & 0xfff0) - 16) << 16; + player[c1].y_add = 0; + } + } + else if (ban_map[(s2 + 15) >> 4][s1 >> 4] == 1 || ban_map[(s2 + 15) >> 4][s1 >> 4] == 3 || ban_map[(s2 + 15) >> 4][s1 >> 4] == 4 || ban_map[(s2 + 15) >> 4][(s1 + 15) >> 4] == 1 || ban_map[(s2 + 15) >> 4][(s1 + 15) >> 4] == 3 || ban_map[(s2 + 15) >> 4][(s1 + 15) >> 4] == 4) { + player[c1].in_water = 0; + player[c1].y = ( ( (s2 + 16) & 0xfff0) - 16) << 16; + player[c1].y_add = 0; + if (player[c1].anim != 0 && player[c1].anim != 1) { + player[c1].anim = 0; + player[c1].frame = 0; + player[c1].frame_tick = 0; + player[c1].image = player_anims[player[c1].anim].frame[player[c1].frame].image + player[c1].direction * 9; +// dj_play_sfx(SFX_LAND, SFX_LAND_FREQ, 64, 0, 0, -1); + } + } + else { + if (player[c1].in_water == 0) { + if (bunnies_in_space == 0) + player[c1].y_add += 12288; + else + player[c1].y_add += 6144; + if (player[c1].y_add > 327680L) + player[c1].y_add = 327680L; + } + else { + player[c1].y = (player[c1].y & 0xffff0000) + 0x10000; + player[c1].y_add = 0; + } + player[c1].in_water = 0; + } + if (player[c1].y_add > 36864 && player[c1].anim != 3 && player[c1].in_water == 0) { + player[c1].anim = 3; + player[c1].frame = 0; + player[c1].frame_tick = 0; + player[c1].image = player_anims[player[c1].anim].frame[player[c1].frame].image + player[c1].direction * 9; + } +// } + + } + + player[c1].frame_tick++; + if (player[c1].frame_tick >= player_anims[player[c1].anim].frame[player[c1].frame].ticks) { + player[c1].frame++; + if (player[c1].frame >= player_anims[player[c1].anim].num_frames) { + if (player[c1].anim != 6) + player[c1].frame = player_anims[player[c1].anim].restart_frame; + else + position_player(c1); + } + player[c1].frame_tick = 0; + } + player[c1].image = player_anims[player[c1].anim].frame[player[c1].frame].image + player[c1].direction * 9; + + } + + } + +} + + +void position_player(short player_num) { + int c1; + int s1, s2; + + while (1) { + while (1) { + s1 = rnd(22); + s2 = rnd(16); + if (ban_map[s2][s1] == 0 && (ban_map[s2 + 1][s1] == 1 || ban_map[s2 + 1][s1] == 3) ) + break; + } + for (c1 = 0; c1 < 4; c1++) { + if (c1 != player_num && player[c1].enabled == 1) { + if (abs( (s1 << 4) - (player[c1].x >> 16) ) < 32 && abs( (s2 << 4) - (player[c1].y >> 16) ) < 32) + break; + } + } + if (c1 == 4) { + player[player_num].dead_flag = 0; + player[player_num].x = (long)s1 << 20; + player[player_num].y = (long)s2 << 20; + player[player_num].x_add = player[player_num].y_add = 0; + player[player_num].direction = 0; + player[player_num].jump_ready = 1; + player[player_num].in_water = 0; + player[player_num].anim = 0; + player[player_num].frame = 0; + player[player_num].frame_tick = 0; + player[player_num].image = player_anims[player[player_num].anim].frame[player[player_num].frame].image; + break; + } + } + +} + + +void fireworks(void) { + FILE *handle; + int c1, c2; + int s1, s2, s3; + struct { + char used, direction, colour; + int x, y; + int x_add, y_add; + int timer; + int anim, frame, frame_tick, image; + } rabbits[20]; + struct { + int x, y; + int old_x, old_y; + char col, back[2]; + } stars[300]; + + outportw(0x3c4, 0x0f02); + memset( (char *)(0xa0000 - __djgpp_base_address), 0, 65535); + + if ( (handle = dat_open("level.pcx", datfile_name, "rb") ) == 0) { + strcpy(main_info.error_str, "Error loading 'level.pcx', aborting...\n"); + return; + } + read_pcx(handle, mask_pic, 102400, pal); + fclose(handle); + + memset(mask_pic, 0, 102400); + + memset(ban_map, 0, sizeof(ban_map) ); + + outportb(0x3c8, 0); + for (c1 = 0; c1 < 768; c1++) + outportb(0x3c9, 0); + + for (c1 = 0; c1 < 4; c1++) { + outportw(0x3c4, ( (1 << c1) << 8) + 0x02); + for (c2 = 193; c2 < 256; c2++) { + memset( (void *)(0xa0000 + c2 * 100 - __djgpp_base_address), (c2 - 192) >> 2, 100); + memset( (void *)(0xa0000 + 32768 + c2 * 100 - __djgpp_base_address), (c2 - 192) >> 2, 100); + } + } + + outportb(0x3c8, 0); + for (c1 = 0; c1 < 768; c1++) + outportb(0x3c9, pal[c1]); + + for (c1 = 0; c1 < 20; c1++) + rabbits[c1].used = 0; + + rabbits[0].used = 1; + rabbits[0].colour = rnd(4); + rabbits[0].x = (int)(150 + rnd(100) ) << 16; + rabbits[0].y = 256 << 16; + rabbits[0].x_add = ( (int)rnd(65535) << 1) - 65536; + if (rabbits[0].x_add > 0) + rabbits[0].direction = 0; + else + rabbits[0].direction = 1; + rabbits[0].y_add = -262144 + (rnd(16384) * 5); + rabbits[0].timer = 30 + rnd(150); + rabbits[0].anim = 2; + rabbits[0].frame = 0; + rabbits[0].frame_tick = 0; + rabbits[0].image = player_anims[rabbits[0].anim].frame[rabbits[0].frame].image + rabbits[0].colour * 18 + rabbits[0].direction * 9; + + for (c1 = 0; c1 < 300; c1++) { + s1 = rnd(400); + s2 = rnd(256); + s3 = 30 - rnd(7); + stars[c1].x = stars[c1].old_x = (s1 << 16); + stars[c1].y = stars[c1].old_y = (s2 << 16); + stars[c1].col = s3; + outportw(0x3ce, ( (s1 & 3) << 8) + 0x04); + stars[c1].back[0] = stars[c1].back[1] = *(char *)(0xa0000 + s2 * 100 + (s1 >> 2) - __djgpp_base_address); + } + + dj_set_nosound(0); + + main_info.page_info[0].num_pobs = 0; + main_info.page_info[1].num_pobs = 0; + main_info.view_page = 0; + main_info.draw_page = 1; + + while (key_pressed(1) == 0) { + + dj_mix(); + + for (c1 = 0; c1 < 300; c1++) { + stars[c1].old_x = stars[c1].x; + stars[c1].old_y = stars[c1].y; + stars[c1].y -= (int)(31 - stars[c1].col) * 16384; + if ( (stars[c1].y >> 16) < 0) + stars[c1].y += 256 << 16;; + if ( (stars[c1].y >> 16) >= 256) + stars[c1].y -= 256 << 16;; + } + + for (c1 = 0, c2 = 0; c1 < 20; c1++) { + if (rabbits[c1].used == 1) + c2++; + } + if ( (c2 == 0 && rnd(10000) < 200) || (c2 == 1 && rnd(10000) < 150) || (c2 == 2 && rnd(10000) < 100) || (c2 == 3 && rnd(10000) < 50)) { + for (c1 = 0; c1 < 20; c1++) { + if (rabbits[c1].used == 0) { + rabbits[c1].used = 1; + rabbits[c1].colour = rnd(4); + rabbits[c1].x = (int)(150 + rnd(100) ) << 16; + rabbits[c1].y = 256 << 16; + rabbits[c1].x_add = ( (int)rnd(65535) << 1) - 65536; + if (rabbits[c1].x_add > 0) + rabbits[c1].direction = 0; + else + rabbits[c1].direction = 1; + rabbits[c1].y_add = -262144 + (rnd(16384) * 5); + rabbits[c1].timer = 30 + rnd(150); + rabbits[c1].anim = 2; + rabbits[c1].frame = 0; + rabbits[c1].frame_tick = 0; + rabbits[c1].image = player_anims[rabbits[c1].anim].frame[rabbits[c1].frame].image + rabbits[c1].colour * 18 + rabbits[c1].direction * 9; + break; + } + } + } + + dj_mix(); + + main_info.page_info[main_info.draw_page].num_pobs = 0; + + for (c1 = 0; c1 < 20; c1++) { + if (rabbits[c1].used == 1) { + rabbits[c1].y_add += 2048; + if (rabbits[c1].y_add > 36864 && rabbits[c1].anim != 3) { + rabbits[c1].anim = 3; + rabbits[c1].frame = 0; + rabbits[c1].frame_tick = 0; + rabbits[c1].image = player_anims[rabbits[c1].anim].frame[rabbits[c1].frame].image + rabbits[c1].colour * 18 + rabbits[c1].direction * 9; + } + rabbits[c1].x += rabbits[c1].x_add; + rabbits[c1].y += rabbits[c1].y_add; + if ( (rabbits[c1].x >> 16) < 16 || (rabbits[c1].x >> 16) > 400 || (rabbits[c1].y >> 16) > 256) { + rabbits[c1].used = 0; + continue; + } + rabbits[c1].timer--; + if (rabbits[c1].timer <= 0) { + rabbits[c1].used = 0; + for (c2 = 0; c2 < 6; c2++) + add_object(OBJ_FUR, (rabbits[c1].x >> 16) + 6 + rnd(5), (rabbits[c1].y >> 16) + 6 + rnd(5), rabbits[c1].x_add + (rnd(65535) - 32768) * 3, rabbits[c1].y_add + (rnd(65535) - 32768) * 3, 0, 44 + rabbits[c1].colour * 8); + for (c2 = 0; c2 < 6; c2++) + add_object(OBJ_FLESH, (rabbits[c1].x >> 16) + 6 + rnd(5), (rabbits[c1].y >> 16) + 6 + rnd(5), rabbits[c1].x_add + (rnd(65535) - 32768) * 3, rabbits[c1].y_add + (rnd(65535) - 32768) * 3, 0, 76); + for (c2 = 0; c2 < 6; c2++) + add_object(OBJ_FLESH, (rabbits[c1].x >> 16) + 6 + rnd(5), (rabbits[c1].y >> 16) + 6 + rnd(5), rabbits[c1].x_add + (rnd(65535) - 32768) * 3, rabbits[c1].y_add + (rnd(65535) - 32768) * 3, 0, 77); + for (c2 = 0; c2 < 8; c2++) + add_object(OBJ_FLESH, (rabbits[c1].x >> 16) + 6 + rnd(5), (rabbits[c1].y >> 16) + 6 + rnd(5), rabbits[c1].x_add + (rnd(65535) - 32768) * 3, rabbits[c1].y_add + (rnd(65535) - 32768) * 3, 0, 78); + for (c2 = 0; c2 < 10; c2++) + add_object(OBJ_FLESH, (rabbits[c1].x >> 16) + 6 + rnd(5), (rabbits[c1].y >> 16) + 6 + rnd(5), rabbits[c1].x_add + (rnd(65535) - 32768) * 3, rabbits[c1].y_add + (rnd(65535) - 32768) * 3, 0, 79); + dj_play_sfx(SFX_DEATH, SFX_DEATH_FREQ, 64, 0, 0, -1); + continue; + } + rabbits[c1].frame_tick++; + if (rabbits[c1].frame_tick >= player_anims[rabbits[c1].anim].frame[rabbits[c1].frame].ticks) { + rabbits[c1].frame++; + if (rabbits[c1].frame >= player_anims[rabbits[c1].anim].num_frames) + rabbits[c1].frame = player_anims[rabbits[c1].anim].restart_frame; + rabbits[c1].frame_tick = 0; + } + rabbits[c1].image = player_anims[rabbits[c1].anim].frame[rabbits[c1].frame].image + rabbits[c1].colour * 18 + rabbits[c1].direction * 9; + if (rabbits[c1].used == 1) + add_pob(main_info.draw_page, rabbits[c1].x >> 16, rabbits[c1].y >> 16, rabbits[c1].image, rabbit_gobs); + } + } + + dj_mix(); + + update_objects(); + + for (c1 = 0; c1 < 300; c1++) { + outportw(0x3ce, ( ( (stars[c1].x >> 16) & 3) << 8) + 0x04); + outportw(0x3c4, ( (1 << ( (stars[c1].x >> 16) & 3) ) << 8) + 0x02); + stars[c1].back[main_info.draw_page] = *(char *)(0xa0000 + ( (int)main_info.draw_page << 15) + (stars[c1].y >> 16) * 100 + (stars[c1].x >> 18) - __djgpp_base_address); + *(char *)(0xa0000 + ( (int)main_info.draw_page << 15) + (stars[c1].y >> 16) * 100 + (stars[c1].x >> 18) - __djgpp_base_address) = stars[c1].col; + } + + dj_mix(); + + draw_pobs(main_info.draw_page); + +/* outportb(0x3c8, 0); + outportb(0x3c9, 0); + outportb(0x3c9, 0); + outportb(0x3c9, 0);*/ + + main_info.draw_page ^= 1; + main_info.view_page ^= 1; + outportw(0x3d4, (main_info.view_page << 23) + 0x0d); + outportw(0x3d4, ( (main_info.view_page << 15) & 0xff00) + 0x0c); + + while( (inportb(0x3da) & 8) == 0) + dj_mix(); + while( (inportb(0x3da) & 8) == 8) + dj_mix(); + +/* outportb(0x3c8, 0); + outportb(0x3c9, 0); + outportb(0x3c9, 63); + outportb(0x3c9, 0);*/ + + redraw_pob_backgrounds(main_info.draw_page); + + dj_mix(); + + for (c1 = 299; c1 >= 0; c1--) { + outportw(0x3c4, ( (1 << ( (stars[c1].old_x >> 16) & 3) ) << 8) + 0x02); + *(char *)(0xa0000 + ( (int)main_info.draw_page << 15) + (stars[c1].old_y >> 16) * 100 + (stars[c1].old_x >> 18) - __djgpp_base_address) = stars[c1].back[main_info.draw_page]; + } + +/* for (c1 = 0; c1 < 20; c1++) { + if (rabbits[c1].used == 1) + break; + } + if (c1 == 20) { + for (c1 = 0; c1 < NUM_OBJECTS; c1++) { + if (objects[c1].used == 1) + break; + } + if (c1 == NUM_OBJECTS) { + for (c1 = 0; c1 < 4; c1++) { + outportw(0x3c4, ( (1 << c1) << 8) + 0x02); + memset( (void *)(0xa0000 + ( (int)main_info.draw_page << 15) - __djgpp_base_address), 0, 25600); + } + } + }*/ + + } + + dj_set_nosound(1); + +} + + +void add_object(char type, short x, short y, long x_add, long y_add, short anim, short frame) { + int c1; + + for (c1 = 0; c1 < NUM_OBJECTS; c1++) { + if (objects[c1].used == 0) { + objects[c1].used = 1; + objects[c1].type = type; + objects[c1].x = (long)x << 16; + objects[c1].y = (long)y << 16; + objects[c1].x_add = x_add; + objects[c1].y_add = y_add; + objects[c1].x_acc = 0; + objects[c1].y_acc = 0; + objects[c1].anim = anim; + objects[c1].frame = frame; + objects[c1].ticks = object_anims[anim].frame[frame].ticks; + objects[c1].image = object_anims[anim].frame[frame].image; + break; + } + } + +} + + +void update_objects(void) { + int c1; + int s1; + + for (c1 = 0; c1 < NUM_OBJECTS; c1++) { + if (objects[c1].used == 1) { + switch (objects[c1].type) { + case OBJ_SPRING: + objects[c1].ticks--; + if (objects[c1].ticks <= 0) { + objects[c1].frame++; + if (objects[c1].frame >= object_anims[objects[c1].anim].num_frames) { + objects[c1].frame--; + objects[c1].ticks = object_anims[objects[c1].anim].frame[objects[c1].frame].ticks; + } + else { + objects[c1].ticks = object_anims[objects[c1].anim].frame[objects[c1].frame].ticks; + objects[c1].image = object_anims[objects[c1].anim].frame[objects[c1].frame].image; + } + } + if (objects[c1].used == 1) + add_pob(main_info.draw_page, objects[c1].x >> 16, objects[c1].y >> 16, objects[c1].image, object_gobs); + break; + case OBJ_SPLASH: + objects[c1].ticks--; + if (objects[c1].ticks <= 0) { + objects[c1].frame++; + if (objects[c1].frame >= object_anims[objects[c1].anim].num_frames) + objects[c1].used = 0; + else { + objects[c1].ticks = object_anims[objects[c1].anim].frame[objects[c1].frame].ticks; + objects[c1].image = object_anims[objects[c1].anim].frame[objects[c1].frame].image; + } + } + if (objects[c1].used == 1) + add_pob(main_info.draw_page, objects[c1].x >> 16, objects[c1].y >> 16, objects[c1].image, object_gobs); + break; + case OBJ_SMOKE: + objects[c1].x += objects[c1].x_add; + objects[c1].y += objects[c1].y_add; + objects[c1].ticks--; + if (objects[c1].ticks <= 0) { + objects[c1].frame++; + if (objects[c1].frame >= object_anims[objects[c1].anim].num_frames) + objects[c1].used = 0; + else { + objects[c1].ticks = object_anims[objects[c1].anim].frame[objects[c1].frame].ticks; + objects[c1].image = object_anims[objects[c1].anim].frame[objects[c1].frame].image; + } + } + if (objects[c1].used == 1) + add_pob(main_info.draw_page, objects[c1].x >> 16, objects[c1].y >> 16, objects[c1].image, object_gobs); + break; + case OBJ_YEL_BUTFLY: + case OBJ_PINK_BUTFLY: + objects[c1].x_acc += rnd(128) - 64; + if (objects[c1].x_acc < -1024) + objects[c1].x_acc = -1024; + if (objects[c1].x_acc > 1024) + objects[c1].x_acc = 1024; + objects[c1].x_add += objects[c1].x_acc; + if (objects[c1].x_add < -32768) + objects[c1].x_add = -32768; + if (objects[c1].x_add > 32768) + objects[c1].x_add = 32768; + objects[c1].x += objects[c1].x_add; + if ( (objects[c1].x >> 16) < 16) { + objects[c1].x = 16 << 16; + objects[c1].x_add = -objects[c1].x_add >> 2; + objects[c1].x_acc = 0; + } + else if ( (objects[c1].x >> 16) > 350) { + objects[c1].x = 350 << 16; + objects[c1].x_add = -objects[c1].x_add >> 2; + objects[c1].x_acc = 0; + } + if (ban_map[objects[c1].y >> 20][objects[c1].x >> 20] != 0) { + if (objects[c1].x_add < 0) { + objects[c1].x = ( ( (objects[c1].x >> 16) + 16) & 0xfff0) << 16; + } + else { + objects[c1].x = ( ( ( (objects[c1].x >> 16) - 16) & 0xfff0) + 15) << 16; + } + objects[c1].x_add = -objects[c1].x_add >> 2; + objects[c1].x_acc = 0; + } + objects[c1].y_acc += rnd(64) - 32; + if (objects[c1].y_acc < -1024) + objects[c1].y_acc = -1024; + if (objects[c1].y_acc > 1024) + objects[c1].y_acc = 1024; + objects[c1].y_add += objects[c1].y_acc; + if (objects[c1].y_add < -32768) + objects[c1].y_add = -32768; + if (objects[c1].y_add > 32768) + objects[c1].y_add = 32768; + objects[c1].y += objects[c1].y_add; + if ( (objects[c1].y >> 16) < 0) { + objects[c1].y = 0; + objects[c1].y_add = -objects[c1].y_add >> 2; + objects[c1].y_acc = 0; + } + else if ( (objects[c1].y >> 16) > 255) { + objects[c1].y = 255 << 16; + objects[c1].y_add = -objects[c1].y_add >> 2; + objects[c1].y_acc = 0; + } + if (ban_map[objects[c1].y >> 20][objects[c1].x >> 20] != 0) { + if (objects[c1].y_add < 0) { + objects[c1].y = ( ( (objects[c1].y >> 16) + 16) & 0xfff0) << 16; + } + else { + objects[c1].y = ( ( ( (objects[c1].y >> 16) - 16) & 0xfff0) + 15) << 16; + } + objects[c1].y_add = -objects[c1].y_add >> 2; + objects[c1].y_acc = 0; + } + if (objects[c1].type == OBJ_YEL_BUTFLY) { + if (objects[c1].x_add < 0 && objects[c1].anim != OBJ_ANIM_YEL_BUTFLY_LEFT) { + objects[c1].anim = OBJ_ANIM_YEL_BUTFLY_LEFT; + objects[c1].frame = 0; + objects[c1].ticks = object_anims[objects[c1].anim].frame[objects[c1].frame].ticks; + objects[c1].image = object_anims[objects[c1].anim].frame[objects[c1].frame].image; + } + else if (objects[c1].x_add > 0 && objects[c1].anim != OBJ_ANIM_YEL_BUTFLY_RIGHT) { + objects[c1].anim = OBJ_ANIM_YEL_BUTFLY_RIGHT; + objects[c1].frame = 0; + objects[c1].ticks = object_anims[objects[c1].anim].frame[objects[c1].frame].ticks; + objects[c1].image = object_anims[objects[c1].anim].frame[objects[c1].frame].image; + } + } + else { + if (objects[c1].x_add < 0 && objects[c1].anim != OBJ_ANIM_PINK_BUTFLY_LEFT) { + objects[c1].anim = OBJ_ANIM_PINK_BUTFLY_LEFT; + objects[c1].frame = 0; + objects[c1].ticks = object_anims[objects[c1].anim].frame[objects[c1].frame].ticks; + objects[c1].image = object_anims[objects[c1].anim].frame[objects[c1].frame].image; + } + else if (objects[c1].x_add > 0 && objects[c1].anim != OBJ_ANIM_PINK_BUTFLY_RIGHT) { + objects[c1].anim = OBJ_ANIM_PINK_BUTFLY_RIGHT; + objects[c1].frame = 0; + objects[c1].ticks = object_anims[objects[c1].anim].frame[objects[c1].frame].ticks; + objects[c1].image = object_anims[objects[c1].anim].frame[objects[c1].frame].image; + } + } + objects[c1].ticks--; + if (objects[c1].ticks <= 0) { + objects[c1].frame++; + if (objects[c1].frame >= object_anims[objects[c1].anim].num_frames) + objects[c1].frame = object_anims[objects[c1].anim].restart_frame; + else { + objects[c1].ticks = object_anims[objects[c1].anim].frame[objects[c1].frame].ticks; + objects[c1].image = object_anims[objects[c1].anim].frame[objects[c1].frame].image; + } + } + if (objects[c1].used == 1) + add_pob(main_info.draw_page, objects[c1].x >> 16, objects[c1].y >> 16, objects[c1].image, object_gobs); + break; + case OBJ_FUR: + if (rnd(100) < 30) + add_object(OBJ_FLESH_TRACE, objects[c1].x >> 16, objects[c1].y >> 16, 0, 0, OBJ_ANIM_FLESH_TRACE, 0); + if (ban_map[objects[c1].y >> 20][objects[c1].x >> 20] == 0) { + objects[c1].y_add += 3072; + if (objects[c1].y_add > 196608L) + objects[c1].y_add = 196608L; + } + else if (ban_map[objects[c1].y >> 20][objects[c1].x >> 20] == 2) { + if (objects[c1].x_add < 0) { + if (objects[c1].x_add < -65536L) + objects[c1].x_add = -65536L; + objects[c1].x_add += 1024; + if (objects[c1].x_add > 0) + objects[c1].x_add = 0; + } + else { + if (objects[c1].x_add > 65536L) + objects[c1].x_add = 65536L; + objects[c1].x_add -= 1024; + if (objects[c1].x_add < 0) + objects[c1].x_add = 0; + } + objects[c1].y_add += 1024; + if (objects[c1].y_add < -65536L) + objects[c1].y_add = -65536L; + if (objects[c1].y_add > 65536L) + objects[c1].y_add = 65536L; + } + objects[c1].x += objects[c1].x_add; + if ( (objects[c1].y >> 16) > 0 && (ban_map[objects[c1].y >> 20][objects[c1].x >> 20] == 1 || ban_map[objects[c1].y >> 20][objects[c1].x >> 20] == 3) ) { + if (objects[c1].x_add < 0) { + objects[c1].x = ( ( (objects[c1].x >> 16) + 16) & 0xfff0) << 16; + objects[c1].x_add = -objects[c1].x_add >> 2; + } + else { + objects[c1].x = ( ( ( (objects[c1].x >> 16) - 16) & 0xfff0) + 15) << 16; + objects[c1].x_add = -objects[c1].x_add >> 2; + } + } + objects[c1].y += objects[c1].y_add; + if ( (objects[c1].x >> 16) < -5 || (objects[c1].x >> 16) > 405 || (objects[c1].y >> 16) > 260) + objects[c1].used = 0; + if ( (objects[c1].y >> 16) > 0 && (ban_map[objects[c1].y >> 20][objects[c1].x >> 20] != 0) ) { + if (objects[c1].y_add < 0) { + if (ban_map[objects[c1].y >> 20][objects[c1].x >> 20] != 2) { + objects[c1].y = ( ( (objects[c1].y >> 16) + 16) & 0xfff0) << 16; + objects[c1].x_add >>= 2; + objects[c1].y_add = -objects[c1].y_add >> 2; + } + } + else { + if (ban_map[objects[c1].y >> 20][objects[c1].x >> 20] == 1) { + if (objects[c1].y_add > 131072L) { + objects[c1].y = ( ( ( (objects[c1].y >> 16) - 16) & 0xfff0) + 15) << 16; + objects[c1].x_add >>= 2; + objects[c1].y_add = -objects[c1].y_add >> 2; + } + else + objects[c1].used = 0; + } + else if (ban_map[objects[c1].y >> 20][objects[c1].x >> 20] == 3) { + objects[c1].y = ( ( ( (objects[c1].y >> 16) - 16) & 0xfff0) + 15) << 16; + if (objects[c1].y_add > 131072L) + objects[c1].y_add = -objects[c1].y_add >> 2; + else + objects[c1].y_add = 0; + } + } + } + if (objects[c1].x_add < 0 && objects[c1].x_add > -16384) + objects[c1].x_add = -16384; + if (objects[c1].x_add > 0 && objects[c1].x_add < 16384) + objects[c1].x_add = 16384; + if (objects[c1].used == 1) { + s1 = atan2(objects[c1].y_add, objects[c1].x_add) * 4 / M_PI; + if (s1 < 0) + s1 += 8; + if (s1 < 0) + s1 = 0; + if (s1 > 7) + s1 = 7; + add_pob(main_info.draw_page, objects[c1].x >> 16, objects[c1].y >> 16, objects[c1].frame + s1, object_gobs); +// add_pob(main_info.draw_page, objects[c1].x >> 16, objects[c1].y >> 16, objects[c1].frame, object_gobs); + } + break; + case OBJ_FLESH: + if (rnd(100) < 30) { + if (objects[c1].frame == 76) + add_object(OBJ_FLESH_TRACE, objects[c1].x >> 16, objects[c1].y >> 16, 0, 0, OBJ_ANIM_FLESH_TRACE, 1); + else if (objects[c1].frame == 77) + add_object(OBJ_FLESH_TRACE, objects[c1].x >> 16, objects[c1].y >> 16, 0, 0, OBJ_ANIM_FLESH_TRACE, 2); + else if (objects[c1].frame == 78) + add_object(OBJ_FLESH_TRACE, objects[c1].x >> 16, objects[c1].y >> 16, 0, 0, OBJ_ANIM_FLESH_TRACE, 3); + } + if (ban_map[objects[c1].y >> 20][objects[c1].x >> 20] == 0) { + objects[c1].y_add += 3072; + if (objects[c1].y_add > 196608L) + objects[c1].y_add = 196608L; + } + else if (ban_map[objects[c1].y >> 20][objects[c1].x >> 20] == 2) { + if (objects[c1].x_add < 0) { + if (objects[c1].x_add < -65536L) + objects[c1].x_add = -65536L; + objects[c1].x_add += 1024; + if (objects[c1].x_add > 0) + objects[c1].x_add = 0; + } + else { + if (objects[c1].x_add > 65536L) + objects[c1].x_add = 65536L; + objects[c1].x_add -= 1024; + if (objects[c1].x_add < 0) + objects[c1].x_add = 0; + } + objects[c1].y_add += 1024; + if (objects[c1].y_add < -65536L) + objects[c1].y_add = -65536L; + if (objects[c1].y_add > 65536L) + objects[c1].y_add = 65536L; + } + objects[c1].x += objects[c1].x_add; + if ( (objects[c1].y >> 16) > 0 && (ban_map[objects[c1].y >> 20][objects[c1].x >> 20] == 1 || ban_map[objects[c1].y >> 20][objects[c1].x >> 20] == 3) ) { + if (objects[c1].x_add < 0) { + objects[c1].x = ( ( (objects[c1].x >> 16) + 16) & 0xfff0) << 16; + objects[c1].x_add = -objects[c1].x_add >> 2; + } + else { + objects[c1].x = ( ( ( (objects[c1].x >> 16) - 16) & 0xfff0) + 15) << 16; + objects[c1].x_add = -objects[c1].x_add >> 2; + } + } + objects[c1].y += objects[c1].y_add; + if ( (objects[c1].x >> 16) < -5 || (objects[c1].x >> 16) > 405 || (objects[c1].y >> 16) > 260) + objects[c1].used = 0; + if ( (objects[c1].y >> 16) > 0 && (ban_map[objects[c1].y >> 20][objects[c1].x >> 20] != 0) ) { + if (objects[c1].y_add < 0) { + if (ban_map[objects[c1].y >> 20][objects[c1].x >> 20] != 2) { + objects[c1].y = ( ( (objects[c1].y >> 16) + 16) & 0xfff0) << 16; + objects[c1].x_add >>= 2; + objects[c1].y_add = -objects[c1].y_add >> 2; + } + } + else { + if (ban_map[objects[c1].y >> 20][objects[c1].x >> 20] == 1) { + if (objects[c1].y_add > 131072L) { + objects[c1].y = ( ( ( (objects[c1].y >> 16) - 16) & 0xfff0) + 15) << 16; + objects[c1].x_add >>= 2; + objects[c1].y_add = -objects[c1].y_add >> 2; + } + else { + if (rnd(100) < 10) { + s1 = rnd(4) - 2; + add_leftovers(0, objects[c1].x >> 16, (objects[c1].y >> 16) + s1, objects[c1].frame, object_gobs); + add_leftovers(1, objects[c1].x >> 16, (objects[c1].y >> 16) + s1, objects[c1].frame, object_gobs); + } + objects[c1].used = 0; + } + } + else if (ban_map[objects[c1].y >> 20][objects[c1].x >> 20] == 3) { + objects[c1].y = ( ( ( (objects[c1].y >> 16) - 16) & 0xfff0) + 15) << 16; + if (objects[c1].y_add > 131072L) + objects[c1].y_add = -objects[c1].y_add >> 2; + else + objects[c1].y_add = 0; + } + } + } + if (objects[c1].x_add < 0 && objects[c1].x_add > -16384) + objects[c1].x_add = -16384; + if (objects[c1].x_add > 0 && objects[c1].x_add < 16384) + objects[c1].x_add = 16384; + if (objects[c1].used == 1) + add_pob(main_info.draw_page, objects[c1].x >> 16, objects[c1].y >> 16, objects[c1].frame, object_gobs); + break; + case OBJ_FLESH_TRACE: + objects[c1].ticks--; + if (objects[c1].ticks <= 0) { + objects[c1].frame++; + if (objects[c1].frame >= object_anims[objects[c1].anim].num_frames) + objects[c1].used = 0; + else { + objects[c1].ticks = object_anims[objects[c1].anim].frame[objects[c1].frame].ticks; + objects[c1].image = object_anims[objects[c1].anim].frame[objects[c1].frame].image; + } + } + if (objects[c1].used == 1) + add_pob(main_info.draw_page, objects[c1].x >> 16, objects[c1].y >> 16, objects[c1].image, object_gobs); + break; + } + } + } + +} + + +char add_pob(char page, short x, short y, short image, char *pob_data) { + + if (main_info.page_info[page].num_pobs >= NUM_POBS) + return 1; + + main_info.page_info[page].pobs[main_info.page_info[page].num_pobs].x = x; + main_info.page_info[page].pobs[main_info.page_info[page].num_pobs].y = y; + main_info.page_info[page].pobs[main_info.page_info[page].num_pobs].image = image; + main_info.page_info[page].pobs[main_info.page_info[page].num_pobs].pob_data = pob_data; + main_info.page_info[page].num_pobs++; + + return 0; + +} + + +void draw_pobs(char page) { + int c1; + int back_buf_ofs; + + back_buf_ofs = 0; + + for (c1 = main_info.page_info[page].num_pobs - 1; c1 >= 0; c1--) { + main_info.page_info[page].pobs[c1].back_buf_ofs = back_buf_ofs; + get_block(page, main_info.page_info[page].pobs[c1].x - pob_hs_x(main_info.page_info[page].pobs[c1].image, main_info.page_info[page].pobs[c1].pob_data), main_info.page_info[page].pobs[c1].y - pob_hs_y(main_info.page_info[page].pobs[c1].image, main_info.page_info[page].pobs[c1].pob_data), pob_width(main_info.page_info[page].pobs[c1].image, main_info.page_info[page].pobs[c1].pob_data), pob_height(main_info.page_info[page].pobs[c1].image, main_info.page_info[page].pobs[c1].pob_data), (char *)(main_info.pob_backbuf[page] + back_buf_ofs) ); + back_buf_ofs += pob_width(main_info.page_info[page].pobs[c1].image, main_info.page_info[page].pobs[c1].pob_data) * pob_height(main_info.page_info[page].pobs[c1].image, main_info.page_info[page].pobs[c1].pob_data); + put_pob(page, main_info.page_info[page].pobs[c1].x, main_info.page_info[page].pobs[c1].y, main_info.page_info[page].pobs[c1].image, main_info.page_info[page].pobs[c1].pob_data, 1, mask_pic); + } + +} + + +void redraw_pob_backgrounds(char page) { + int c1; + + for (c1 = 0; c1 < main_info.page_info[page].num_pobs; c1++) + put_block(page, main_info.page_info[page].pobs[c1].x - pob_hs_x(main_info.page_info[page].pobs[c1].image, main_info.page_info[page].pobs[c1].pob_data), main_info.page_info[page].pobs[c1].y - pob_hs_y(main_info.page_info[page].pobs[c1].image, main_info.page_info[page].pobs[c1].pob_data), pob_width(main_info.page_info[page].pobs[c1].image, main_info.page_info[page].pobs[c1].pob_data), pob_height(main_info.page_info[page].pobs[c1].image, main_info.page_info[page].pobs[c1].pob_data), (char *)(main_info.pob_backbuf[page] + main_info.page_info[page].pobs[c1].back_buf_ofs) ); + +} + + +char add_leftovers(char page, short x, short y, short image, char *pob_data) { + + if (leftovers.page[page].num_pobs >= NUM_LEFTOVERS) + return 1; + + leftovers.page[page].pobs[leftovers.page[page].num_pobs].x = x; + leftovers.page[page].pobs[leftovers.page[page].num_pobs].y = y; + leftovers.page[page].pobs[leftovers.page[page].num_pobs].image = image; + leftovers.page[page].pobs[leftovers.page[page].num_pobs].pob_data = pob_data; + leftovers.page[page].num_pobs++; + + return 0; + +} + + +void draw_leftovers(char page) { + int c1; + int back_buf_ofs; + + for (c1 = leftovers.page[page].num_pobs - 1; c1 >= 0; c1--) + put_pob(page, leftovers.page[page].pobs[c1].x, leftovers.page[page].pobs[c1].y, leftovers.page[page].pobs[c1].image, leftovers.page[page].pobs[c1].pob_data, 1, mask_pic); + + leftovers.page[page].num_pobs = 0; + +} + + +char init_level(short level) { + FILE *handle; + int c1, c2; + int l1; + int s1, s2; + + if ( (handle = dat_open("level.pcx", datfile_name, "rb") ) == 0) { + strcpy(main_info.error_str, "Error loading 'level.pcx', aborting...\n"); + return 1; + } + if (read_pcx(handle, background_pic, 102400L, pal) != 0) { + strcpy(main_info.error_str, "Error loading 'level.pcx', aborting...\n"); + return 1; + } + fclose(handle); + if ( (handle = dat_open("mask.pcx", datfile_name, "rb") ) == 0) { + strcpy(main_info.error_str, "Error loading 'mask.pcx', aborting...\n"); + return 1; + } + if (read_pcx(handle, mask_pic, 102400L, 0) != 0) { + strcpy(main_info.error_str, "Error loading 'mask.pcx', aborting...\n"); + return 1; + } + fclose(handle); + memset(cur_pal, 0, 768); + + for (c1 = 0; c1 < 4; c1++) { + if (player[c1].enabled == 1) { + player[c1].bumps = 0; + player[c1].bumped[0] = 0; + player[c1].bumped[1] = 0; + player[c1].bumped[2] = 0; + player[c1].bumped[3] = 0; + position_player(c1); + } + } + + for (c1 = 0; c1 < 300; c1++) + objects[c1].used = 0; + +// add_object(OBJ_SPRING, 144, 224, 0, 0, OBJ_ANIM_SPRING, 5); + + for (c1 = 0; c1 < 16; c1++) { + for (c2 = 0; c2 < 22; c2++) { + if (ban_map[c1][c2] == 4) + add_object(OBJ_SPRING, c2 << 4, c1 << 4, 0, 0, OBJ_ANIM_SPRING, 5); + } + } + + while (1) { + s1 = rnd(22); + s2 = rnd(16); + if (ban_map[s2][s1] == 0) { + add_object(OBJ_YEL_BUTFLY, (s1 << 4) + 8, (s2 << 4) + 8, (rnd(65535) - 32768) * 2, (rnd(65535) - 32768) * 2, 0, 0); + break; + } + } + while (1) { + s1 = rnd(22); + s2 = rnd(16); + if (ban_map[s2][s1] == 0) { + add_object(OBJ_YEL_BUTFLY, (s1 << 4) + 8, (s2 << 4) + 8, (rnd(65535) - 32768) * 2, (rnd(65535) - 32768) * 2, 0, 0); + break; + } + } + while (1) { + s1 = rnd(22); + s2 = rnd(16); + if (ban_map[s2][s1] == 0) { + add_object(OBJ_PINK_BUTFLY, (s1 << 4) + 8, (s2 << 4) + 8, (rnd(65535) - 32768) * 2, (rnd(65535) - 32768) * 2, 0, 0); + break; + } + } + while (1) { + s1 = rnd(22); + s2 = rnd(16); + if (ban_map[s2][s1] == 0) { + add_object(OBJ_PINK_BUTFLY, (s1 << 4) + 8, (s2 << 4) + 8, (rnd(65535) - 32768) * 2, (rnd(65535) - 32768) * 2, 0, 0); + break; + } + } + + return 0; + +} + + +void deinit_level(void) { + int c1, c2; + + dj_set_nosound(1); + dj_stop_mod(); + +} + + +char init_program(int argc, char *argv[]) { + FILE *handle; + int c1, c2; + char load_flag; + char force2, force3; + sfx_data fly; + int player_anim_data[] = {1, 0, 0, 0x7fff, 0, 0, 0, 0, 0, 0, + 4, 0, 0, 4, 1, 4, 2, 4, 3, 4, + 1, 0, 4, 0x7fff, 0, 0, 0, 0, 0, 0, + 4, 2, 5, 8, 6, 10, 7, 3, 6, 3, + 1, 0, 6, 0x7fff, 0, 0, 0, 0, 0, 0, + 2, 1, 5, 8, 4, 0x7fff, 0, 0, 0, 0, + 1, 0, 8, 5, 0, 0, 0, 0, 0, 0}; + + if (__djgpp_nearptr_enable() == 0) + return 1; + + srandom(time(0) ); + + if (hook_keyb_handler() != 0) + return 1; + + memset(&main_info, 0, sizeof(main_info) ); + main_info.joy_enabled = 1; + + strcpy(datfile_name, "jumpbump.dat"); + + force2 = force3 = 0; + + if (argc > 1) { + for (c1 = 1; c1 < argc; c1++) { + if (stricmp(argv[c1], "-nosound") == 0) + main_info.no_sound = 1; + else if (stricmp(argv[c1], "-nogore") == 0) + main_info.no_gore = 1; + else if (stricmp(argv[c1], "-nojoy") == 0) + main_info.joy_enabled = 0; + else if (stricmp(argv[c1], "-fireworks") == 0) + main_info.fireworks = 1; + else if (stricmp(argv[c1], "-dat") == 0) { + if (c1 < (argc - 1) ) { + if ( (handle = fopen(argv[c1 + 1], "rb") ) != NULL) { + fclose(handle); + strcpy(datfile_name, argv[c1 + 1]); + } + } + } + else if (stricmp(argv[c1], "-mouse") == 0) { + if (c1 < (argc - 1) ) { + if (stricmp(argv[c1 + 1], "2") == 0) + force2 = 1; + if (stricmp(argv[c1 + 1], "3") == 0) + force3 = 1; + } + } + } + } + + for (c1 = 0; c1 < 7; c1++) { + player_anims[c1].num_frames = player_anim_data[c1 * 10]; + player_anims[c1].restart_frame = player_anim_data[c1 * 10 + 1]; + for (c2 = 0; c2 < 4; c2++) { + player_anims[c1].frame[c2].image = player_anim_data[c1 * 10 + c2 * 2 + 2]; + player_anims[c1].frame[c2].ticks = player_anim_data[c1 * 10 + c2 * 2 + 3]; + } + } + + if ( (background_pic = malloc(102400L) ) == 0) + return 1; + if ( (mask_pic = malloc(102400L) ) == 0) + return 1; + memset(mask_pic, 0, 102400); + + main_info.pob_backbuf[0] = malloc(65535); + main_info.pob_backbuf[1] = malloc(65535); + if (main_info.pob_backbuf[0] == 0 || main_info.pob_backbuf[1] == 0) + return 1; + + if ( (handle = dat_open("rabbit.gob", datfile_name, "rb") ) == 0) { + strcpy(main_info.error_str, "Error loading 'rabbit.gob', aborting...\n"); + return 1; + } + if ( (rabbit_gobs = malloc(dat_filelen("rabbit.gob", datfile_name) ) ) == 0) { + strcpy(main_info.error_str, "Not enough memory, aborting...\n"); + fclose(handle); + return 1; + } + fread(rabbit_gobs, 1, dat_filelen("rabbit.gob", datfile_name), handle); + fclose(handle); + + if ( (handle = dat_open("objects.gob", datfile_name, "rb") ) == 0) { + strcpy(main_info.error_str, "Error loading 'objects.gob', aborting...\n"); + return 1; + } + if ( (object_gobs = malloc(dat_filelen("objects.gob", datfile_name) ) ) == 0) { + strcpy(main_info.error_str, "Not enough memory, aborting...\n"); + fclose(handle); + return 1; + } + fread(object_gobs, 1, dat_filelen("objects.gob", datfile_name), handle); + fclose(handle); + + if ( (handle = dat_open("font.gob", datfile_name, "rb") ) == 0) { + strcpy(main_info.error_str, "Error loading 'font.gob', aborting...\n"); + return 1; + } + if ( (font_gobs = malloc(dat_filelen("font.gob", datfile_name) ) ) == 0) { + strcpy(main_info.error_str, "Not enough memory, aborting...\n"); + fclose(handle); + return 1; + } + fread(font_gobs, 1, dat_filelen("font.gob", datfile_name), handle); + fclose(handle); + + if ( (handle = dat_open("numbers.gob", datfile_name, "rb") ) == 0) { + strcpy(main_info.error_str, "Error loading 'numbers.gob', aborting...\n"); + return 1; + } + if ( (number_gobs = malloc(dat_filelen("numbers.gob", datfile_name) ) ) == 0) { + strcpy(main_info.error_str, "Not enough memory, aborting...\n"); + fclose(handle); + return 1; + } + fread(number_gobs, 1, dat_filelen("numbers.gob", datfile_name), handle); + fclose(handle); + + if (read_level() != 0) { + strcpy(main_info.error_str, "Error loading 'levelmap.txt', aborting...\n"); + fclose(handle); + return 1; + } + + dj_init(); + if (main_info.no_sound == 0) { + dj_autodetect_sd(); + dj_set_mixing_freq(20000); + dj_set_stereo(0); + dj_set_auto_mix(0); + dj_set_dma_time(8); + dj_set_num_sfx_channels(5); + dj_set_sfx_volume(64); + dj_set_nosound(1); + dj_start(); + + if ( (handle = dat_open("jump.mod", datfile_name, "rb") ) == 0) { + strcpy(main_info.error_str, "Error loading 'jump.mod', aborting...\n"); + return 1; + } + if (dj_load_mod(handle, 0, MOD_MENU) != 0) { + strcpy(main_info.error_str, "Error loading 'jump.mod', aborting...\n"); + return 1; + } + fclose(handle); + + if ( (handle = dat_open("bump.mod", datfile_name, "rb") ) == 0) { + strcpy(main_info.error_str, "Error loading 'bump.mod', aborting...\n"); + return 1; + } + if (dj_load_mod(handle, 0, MOD_GAME) != 0) { + strcpy(main_info.error_str, "Error loading 'bump.mod', aborting...\n"); + return 1; + } + fclose(handle); + + if ( (handle = dat_open("scores.mod", datfile_name, "rb") ) == 0) { + strcpy(main_info.error_str, "Error loading 'scores.mod', aborting...\n"); + return 1; + } + if (dj_load_mod(handle, 0, MOD_SCORES) != 0) { + strcpy(main_info.error_str, "Error loading 'scores.mod', aborting...\n"); + return 1; + } + fclose(handle); + + if ( (handle = dat_open("jump.smp", datfile_name, "rb") ) == 0) { + strcpy(main_info.error_str, "Error loading 'jump.smp', aborting...\n"); + return 1; + } + if (dj_load_sfx(handle, 0, dat_filelen("jump.smp", datfile_name), DJ_SFX_TYPE_SMP, SFX_JUMP) != 0) { + strcpy(main_info.error_str, "Error loading 'jump.smp', aborting...\n"); + return 1; + } + fclose(handle); + +/* if ( (handle = dat_open("land.smp", datfile_name, "rb") ) == 0) { + strcpy(main_info.error_str, "Error loading 'land.smp', aborting...\n"); + return 1; + } + if (dj_load_sfx(handle, 0, dat_filelen("land.smp", datfile_name), DJ_SFX_TYPE_SMP, SFX_LAND) != 0) { + strcpy(main_info.error_str, "Error loading 'land.smp', aborting...\n"); + return 1; + } + fclose(handle);*/ + + if ( (handle = dat_open("death.smp", datfile_name, "rb") ) == 0) { + strcpy(main_info.error_str, "Error loading 'death.smp', aborting...\n"); + return 1; + } + if (dj_load_sfx(handle, 0, dat_filelen("death.smp", datfile_name), DJ_SFX_TYPE_SMP, SFX_DEATH) != 0) { + strcpy(main_info.error_str, "Error loading 'death.smp', aborting...\n"); + return 1; + } + fclose(handle); + + if ( (handle = dat_open("spring.smp", datfile_name, "rb") ) == 0) { + strcpy(main_info.error_str, "Error loading 'spring.smp', aborting...\n"); + return 1; + } + if (dj_load_sfx(handle, 0, dat_filelen("spring.smp", datfile_name), DJ_SFX_TYPE_SMP, SFX_SPRING) != 0) { + strcpy(main_info.error_str, "Error loading 'spring.smp', aborting...\n"); + return 1; + } + fclose(handle); + + if ( (handle = dat_open("splash.smp", datfile_name, "rb") ) == 0) { + strcpy(main_info.error_str, "Error loading 'splash.smp', aborting...\n"); + return 1; + } + if (dj_load_sfx(handle, 0, dat_filelen("splash.smp", datfile_name), DJ_SFX_TYPE_SMP, SFX_SPLASH) != 0) { + strcpy(main_info.error_str, "Error loading 'splash.smp', aborting...\n"); + return 1; + } + fclose(handle); + + if ( (handle = dat_open("fly.smp", datfile_name, "rb") ) == 0) { + strcpy(main_info.error_str, "Error loading 'fly.smp', aborting...\n"); + return 1; + } + if (dj_load_sfx(handle, 0, dat_filelen("fly.smp", datfile_name), DJ_SFX_TYPE_SMP, SFX_FLY) != 0) { + strcpy(main_info.error_str, "Error loading 'fly.smp', aborting...\n"); + return 1; + } + fclose(handle); + + dj_get_sfx_settings(SFX_FLY, &fly); + fly.priority = 10; + fly.default_freq = SFX_FLY_FREQ; + fly.loop = 1; + fly.loop_start = 0; + fly.loop_length = fly.length; + dj_set_sfx_settings(SFX_FLY, &fly); + } + + open_screen(); + + if ( (handle = dat_open("menu.pcx", datfile_name, "rb") ) == 0) { + strcpy(main_info.error_str, "Error loading 'menu.pcx', aborting...\n"); + return 1; + } + if (read_pcx(handle, background_pic, 102400L, pal) != 0) { + strcpy(main_info.error_str, "Error loading 'menu.pcx', aborting...\n"); + return 1; + } + fclose(handle); + + outportb(0x3c8, 0); + for (c1 = 0; c1 < 768; c1++) + outportb(0x3c9, pal[c1]); + + if (main_info.joy_enabled == 1 && main_info.fireworks == 0) { + c1 = 0; + outportb(0x201, 0); + while (c1 < 0x7fff) { + if ( (inportb(0x201) & 1) == 0) + break; + c1++; + } + if (c1 != 0x7fff) { + main_info.joy_enabled = 1; + load_flag = 0; + put_text(0, 200, 40, "JOYSTICK CALIBRATION", 2); + put_text(0, 200, 100, "Move the joystick to the", 2); + put_text(0, 200, 115, "UPPER LEFT", 2); + put_text(0, 200, 130, "and press button A", 2); + put_text(0, 200, 200, "Or press ESC to use", 2); + put_text(0, 200, 215, "previous settings", 2); + if (calib_joy(0) != 0) + load_flag = 1; + else { + outportw(0x3c4, 0x0f02); + memset( (char *)(0xa0000 + 32768 + __djgpp_conventional_base), 0, 32768); + main_info.view_page = 1; + outportw(0x3d4, (1 << 23) + 0x0d); + outportw(0x3d4, ( (1 << 15) & 0xff00) + 0x0c); + wait_vrt(); + + put_text(1, 200, 40, "JOYSTICK CALIBRATION", 2); + put_text(1, 200, 100, "Move the joystick to the", 2); + put_text(1, 200, 115, "LOWER RIGHT", 2); + put_text(1, 200, 130, "and press button A", 2); + put_text(1, 200, 200, "Or press ESC to use", 2); + put_text(1, 200, 215, "previous settings", 2); + if (calib_joy(1) != 0) + load_flag = 1; + else { + outportw(0x3c4, 0x0f02); + memset( (char *)(0xa0000 + __djgpp_conventional_base), 0, 32768); + outportw(0x3d4, (0 << 23) + 0x0d); + outportw(0x3d4, ( (0 << 15) & 0xff00) + 0x0c); + wait_vrt(); + + put_text(0, 200, 40, "JOYSTICK CALIBRATION", 2); + put_text(0, 200, 100, "Move the joystick to the", 2); + put_text(0, 200, 115, "CENTER", 2); + put_text(0, 200, 130, "and press button A", 2); + put_text(0, 200, 200, "Or press ESC to use", 2); + put_text(0, 200, 215, "previous settings", 2); + if (calib_joy(2) != 0) + load_flag = 1; + else { + if (joy.calib_data.x1 == joy.calib_data.x2) + joy.calib_data.x1 -= 10; + if (joy.calib_data.x3 == joy.calib_data.x2) + joy.calib_data.x3 += 10; + if (joy.calib_data.y1 == joy.calib_data.y2) + joy.calib_data.y1 -= 10; + if (joy.calib_data.y3 == joy.calib_data.y2) + joy.calib_data.y3 += 10; + write_calib_data(); + } + } + } + if (load_flag == 1) { + if ( (handle = dat_open("calib.dat", datfile_name, "rb") ) == 0) { + strcpy(main_info.error_str, "Error loading 'calib.dat', aborting...\n"); + return 1; + } + joy.calib_data.x1 = fgetc(handle) + (fgetc(handle) << 8) + (fgetc(handle) << 16) + (fgetc(handle) << 24); + joy.calib_data.x2 = fgetc(handle) + (fgetc(handle) << 8) + (fgetc(handle) << 16) + (fgetc(handle) << 24); + joy.calib_data.x3 = fgetc(handle) + (fgetc(handle) << 8) + (fgetc(handle) << 16) + (fgetc(handle) << 24); + joy.calib_data.y1 = fgetc(handle) + (fgetc(handle) << 8) + (fgetc(handle) << 16) + (fgetc(handle) << 24); + joy.calib_data.y2 = fgetc(handle) + (fgetc(handle) << 8) + (fgetc(handle) << 16) + (fgetc(handle) << 24); + joy.calib_data.y3 = fgetc(handle) + (fgetc(handle) << 8) + (fgetc(handle) << 16) + (fgetc(handle) << 24); + fclose(handle); + } + } + else + main_info.joy_enabled = 0; + + } + + regs.x.ax = 0; + __dpmi_int(0x33, ®s); + if (regs.x.ax == 0xffff) { + main_info.mouse_enabled = 1; + main_info.num_mouse_buttons = regs.x.bx; + if (force2 == 1) + main_info.num_mouse_buttons = 2; + if (force3 == 1) + main_info.num_mouse_buttons = 3; + } + else + main_info.mouse_enabled = 0; + + return 0; + +} + + +void deinit_program(void) { + __dpmi_regs regs; + + dj_stop(); + dj_free_mod(MOD_MENU); + dj_free_mod(MOD_GAME); + dj_free_sfx(SFX_DEATH); + dj_free_sfx(SFX_SPRING); + dj_free_sfx(SFX_SPLASH); + dj_deinit(); + + if (rabbit_gobs != 0) + free(rabbit_gobs); + if (object_gobs != 0) + free(object_gobs); + if (number_gobs != 0) + free(number_gobs); + + if (main_info.pob_backbuf[0] != 0) + free(main_info.pob_backbuf[0]); + if (main_info.pob_backbuf[1] != 0) + free(main_info.pob_backbuf[1]); + + if (background_pic != 0) + free(background_pic); + if (mask_pic != 0) + free(mask_pic); + + remove_keyb_handler(); + + regs.x.ax = 0x3; + __dpmi_int(0x10, ®s); + + if (main_info.error_str[0] != 0) { + printf(main_info.error_str); + exit(1); + } + else + exit(0); + +} + + +void read_joy(void) { + int c1; + int x, y; + int s1; + char flag; + + c1 = x = y = flag = 0; + outportb(0x201, 0); + + while (1) { + + s1 = inportb(0x201); + + if (x == 0) { + if ( (s1 & 1) == 0) + x = c1; + } + if (y == 0) { + if ( (s1 & 2) == 0) + y = c1; + } + if (x != 0 && y != 0) + break; + + c1++; + if (c1 == 0x7fff) { + flag = 1; + break; + } + + } + + if (flag == 0) { + joy.raw_x = x; + joy.raw_y = y; + + if (joy.raw_x < joy.calib_data.x2) + joy.x = ( (long)(joy.raw_x - joy.calib_data.x2) << 10) / (joy.calib_data.x2 - joy.calib_data.x1); + else + joy.x = ( (long)(joy.raw_x - joy.calib_data.x2) << 10) / (joy.calib_data.x3 - joy.calib_data.x2); + if (joy.raw_y < joy.calib_data.y2) + joy.y = ( (long)(joy.raw_y - joy.calib_data.y2) << 10) / (joy.calib_data.y2 - joy.calib_data.y1); + else + joy.y = ( (long)(joy.raw_y - joy.calib_data.y2) << 10) / (joy.calib_data.y3 - joy.calib_data.y2); + + if (joy.x < -1024) + joy.x = -1024; + if (joy.x > 1024) + joy.x = 1024; + if (joy.y < -1024) + joy.y = -1024; + if (joy.y > 1024) + joy.y = 1024; + + s1 = inportb(0x201); + joy.but1 = ( ( (s1 >> 4) & 1) ^ 1); + joy.but2 = ( ( (s1 >> 5) & 1) ^ 1); + } + else { + joy.raw_x = joy.calib_data.x2; + joy.raw_y = joy.calib_data.y2; + + joy.x = joy.y = 0; + + joy.but1 = joy.but2 = 0; + } + +} + + +char calib_joy(char type) { + int c1; + int x, y; + int s1; + int num_times; + char flag; + + while (joy.but1 == 1) { + s1 = inportb(0x201); + joy.but1 = ( ( (s1 >> 4) & 1) ^ 1); + if (key_pressed(1) == 1) { + while (key_pressed(1) == 1); + return 1; + } + } + + num_times = 0; + + while (joy.but1 == 0) { + + c1 = x = y = flag = 0; + outportb(0x201, 0); + + while (1) { + + s1 = inportb(0x201); + + if (x == 0) { + if ( (s1 & 1) == 0) + x = c1; + } + if (y == 0) { + if ( (s1 & 2) == 0) + y = c1; + } + if (x != 0 && y != 0) + break; + + c1++; + if (c1 == 0x7fff) { + flag = 1; + break; + } + + } + + joy.raw_x = x; + joy.raw_y = y; + + s1 = inportb(0x201); + joy.but1 = ( ( (s1 >> 4) & 1) ^ 1); + + if (num_times < 0x7fffffff) + num_times++; + + if (flag == 1) + break; + + if (key_pressed(1) == 1) { + while (key_pressed(1) == 1); + return 1; + } + + } + + if (num_times < 16) + return 1; + + if (flag == 0) { + + switch (type) { + case 0: + joy.calib_data.x1 = joy.raw_x; + joy.calib_data.y1 = joy.raw_y; + break; + case 1: + joy.calib_data.x3 = joy.raw_x; + joy.calib_data.y3 = joy.raw_y; + break; + case 2: + joy.calib_data.x2 = joy.raw_x; + joy.calib_data.y2 = joy.raw_y; + break; + } + + while (joy.but1 == 1) { + s1 = inportb(0x201); + joy.but1 = ( ( (s1 >> 4) & 1) ^ 1); + } + + } + + return 0; + +} + + +void read_mouse(void) { + + regs.x.ax = 3; + __dpmi_int(0x33, ®s); + mouse.but1 = regs.x.bx & 1; + mouse.but2 = (regs.x.bx & 2) >> 1; + mouse.but3 = (regs.x.bx & 4) >> 2; + +} + + +unsigned short rnd(unsigned short max) { + int l1; + + l1 = ( (random() >> 16) * max) / 0x7fff; + if (l1 > max - 1) + l1 = max - 1; + return l1; +} + + +char read_level(void) { + FILE *handle; + int c1, c2; + int chr; + + if ( (handle = dat_open("levelmap.txt", datfile_name, "rb") ) == 0) { + strcpy(main_info.error_str, "Error loading 'levelmap.txt', aborting...\n"); + return 1; + } + + for (c1 = 0; c1 < 16; c1++) { + for (c2 = 0; c2 < 22; c2++) { + while (1) { + chr = fgetc(handle); + if (chr == EOF) { + fclose(handle); + return 1; + } + if (chr >= '0' && chr <= '4') + break; + } + ban_map[c1][c2] = chr - '0'; + } + } + + for (c2 = 0; c2 < 22; c2++) + ban_map[16][c2] = 1; + + fclose(handle); + return 0; + +} + + +FILE *dat_open(char *file_name, char *dat_name, char *mode) { + FILE *handle; + int num; + int c1; + char name[21]; + int ofs; + + if ( (handle = fopen(dat_name, mode) ) == NULL) + return 0; + + num = fgetc(handle) + (fgetc(handle) << 8) + (fgetc(handle) << 16) + (fgetc(handle) << 24); + for (c1 = 0; c1 < num; c1++) { + fread(name, 1, 12, handle); + if (strnicmp(name, file_name, strlen(file_name) ) == 0) { + ofs = fgetc(handle) + (fgetc(handle) << 8) + (fgetc(handle) << 16) + (fgetc(handle) << 24); + fseek(handle, ofs, SEEK_SET); + return handle; + } + fseek(handle, 8, SEEK_CUR); + } + + return 0; +} + + +int dat_filelen(char *file_name, char *dat_name) { + FILE *handle; + int num; + int c1; + char name[21]; + int len; + + if ( (handle = fopen(dat_name, "rb") ) == NULL) + return 0; + + num = fgetc(handle) + (fgetc(handle) << 8) + (fgetc(handle) << 16) + (fgetc(handle) << 24); + for (c1 = 0; c1 < num; c1++) { + fread(name, 1, 12, handle); + if (strnicmp(name, file_name, strlen(file_name) ) == 0) { + fseek(handle, 4, SEEK_CUR); + len = fgetc(handle) + (fgetc(handle) << 8) + (fgetc(handle) << 16) + (fgetc(handle) << 24); + return len; + } + fseek(handle, 8, SEEK_CUR); + } + + return 0; +} + +void write_calib_data(void) { + FILE *handle; + int c1; + int len, num; + char *mem; + int ofs; + + if ( (handle = fopen(datfile_name, "rb") ) == NULL) + return; + len = filelength(fileno(handle) ); + if ( (mem = malloc(len) ) == NULL) + return; + fread(mem, 1, len, handle); + fclose(handle); + + ofs = 4; + num = *(int *)(&mem[0]); + for (c1 = 0; c1 < num; c1++) { + if (strnicmp(&mem[ofs], "calib.dat", strlen("calib.dat") ) == 0) { + ofs = *(int *)(&mem[ofs + 12]); + break; + } + ofs += 20; + } + + mem[ofs] = joy.calib_data.x1 & 0xff; + mem[ofs + 1] = (joy.calib_data.x1 >> 8) & 0xff; + mem[ofs + 2] = (joy.calib_data.x1 >> 16) & 0xff; + mem[ofs + 3] = (joy.calib_data.x1 >> 24) & 0xff; + mem[ofs + 4] = joy.calib_data.x2 & 0xff; + mem[ofs + 5] = (joy.calib_data.x2 >> 8) & 0xff; + mem[ofs + 6] = (joy.calib_data.x2 >> 16) & 0xff; + mem[ofs + 7] = (joy.calib_data.x2 >> 24) & 0xff; + mem[ofs + 8] = joy.calib_data.x3 & 0xff; + mem[ofs + 9] = (joy.calib_data.x3 >> 8) & 0xff; + mem[ofs + 10] = (joy.calib_data.x3 >> 16) & 0xff; + mem[ofs + 11] = (joy.calib_data.x3 >> 24) & 0xff; + mem[ofs + 12] = joy.calib_data.y1 & 0xff; + mem[ofs + 13] = (joy.calib_data.y1 >> 8) & 0xff; + mem[ofs + 14] = (joy.calib_data.y1 >> 16) & 0xff; + mem[ofs + 15] = (joy.calib_data.y1 >> 24) & 0xff; + mem[ofs + 16] = joy.calib_data.y2 & 0xff; + mem[ofs + 17] = (joy.calib_data.y2 >> 8) & 0xff; + mem[ofs + 18] = (joy.calib_data.y2 >> 16) & 0xff; + mem[ofs + 19] = (joy.calib_data.y2 >> 24) & 0xff; + mem[ofs + 20] = joy.calib_data.y3 & 0xff; + mem[ofs + 21] = (joy.calib_data.y3 >> 8) & 0xff; + mem[ofs + 22] = (joy.calib_data.y3 >> 16) & 0xff; + mem[ofs + 23] = (joy.calib_data.y3 >> 24) & 0xff; + + if ( (handle = fopen(datfile_name, "wb") ) == NULL) + return; + fwrite(mem, 1, len, handle); + fclose(handle); + +} + diff --git a/menu.c b/menu.c new file mode 100644 index 0000000..b34e5c5 --- /dev/null +++ b/menu.c @@ -0,0 +1,605 @@ +#include "globals.h" + +#define NUM_MESSAGES 24 + +char *menu_background; + +char menu_pal[768]; +char menu_cur_pal[768]; + +char message[NUM_MESSAGES][70] = { +"Jump 'n Bump", +"by Brainchild Design in 1998.", +"Code by Mattias Brynervall.", +"Graphics by Martin Magnusson", +"and Andreas Brynervall.", +"Music by Anders Nilsson.", +"Visit our homepage at:", +"http://www.algonet.se/~mattiasb", +"Jump 'n Bump is e-mailware.", +"That means you're supposed to send us an e-mail!", +"Write for example where you're from", +"and what you thought about this game.", +"If you do that, you will greatly encourage us", +"to make more games for you!", +"Send your e-mail to: matbr656@student.liu.se", +"Oh, and by the way, there's a lot of secrets!", +"If you can't find them, you'd better ask us...", +"If you'd like to contact a specific member of BCD,", +"these are their e-mail addresses:", +"Andreas Brynervall: andreasb@acc.umu.se", +"Mattias Brynervall: matbr656@student.liu.se", +"Martin Magnusson: marma102@student.liu.se", +"Anders Nilsson: equel@swipnet.se", +" "}; + + +char menu(void) { + int c1; + char esc_pressed; + char end_loop_flag, new_game_flag, fade_flag; + char mod_vol, mod_fade_direction; + int cur_message; + int fade_dir, fade_count, fade_tick; + char fade_pal[48]; + + if (menu_init() != 0) + return 1; + + mod_vol = 0; + mod_fade_direction = 1; + dj_ready_mod(MOD_MENU); + dj_set_mod_volume(mod_vol); + dj_set_sfx_volume(64); + dj_start_mod(); + dj_set_nosound(0); + + memset(fade_pal, 0, 48); + outportb(0x3c8, 240); + for (c1 = 0; c1 < 48; c1++) + outportb(0x3c9, fade_pal[c1]); + fade_dir = 0; + fade_count = 0; + fade_tick = 0; + cur_message = NUM_MESSAGES - 1; + + main_info.page_info[0].num_pobs = 0; + main_info.page_info[1].num_pobs = 0; + main_info.view_page = 0; + main_info.draw_page = 1; + + esc_pressed = key_pressed(1); + end_loop_flag = new_game_flag = 0; + + while (1) { + + dj_mix(); + + if (key_pressed(1) == 1 && esc_pressed == 0) { + end_loop_flag = 1; + new_game_flag = 0; + memset(menu_pal, 0, 768); + mod_fade_direction = 0; + } + else if (key_pressed(1) == 0) + esc_pressed = 0; + + if (main_info.mouse_enabled == 1) + read_mouse(); + if (main_info.joy_enabled == 1) + read_joy(); + for (c1 = 0; c1 < 4; c1++) { + if (end_loop_flag == 1 && new_game_flag == 1) { + if ( (player[c1].x >> 16) > (165 + c1 * 2) ) { + if (player[c1].x_add < 0) + player[c1].x_add += 16384; + else + player[c1].x_add += 12288; + if (player[c1].x_add > 98304L) + player[c1].x_add = 98304L; + player[c1].direction = 0; + if (player[c1].anim == 0) { + player[c1].anim = 1; + player[c1].frame = 0; + player[c1].frame_tick = 0; + player[c1].image = player_anims[player[c1].anim].frame[player[c1].frame].image + player[c1].direction * 9; + } + player[c1].enabled = 1; + } + if ( (c1 == 0 && key_pressed(KEY_PL1_JUMP) == 0) || (c1 == 1 && key_pressed(KEY_PL2_JUMP) == 0) || (c1 == 2 && joy.but1 == 0) || (c1 == 3 && ( (main_info.num_mouse_buttons == 3 && mouse.but3 == 0) || (main_info.num_mouse_buttons == 2 && mouse.but1 == 0 && mouse.but2 == 0) ) ) ) { + if (player[c1].y_add < 0) { + player[c1].y_add += 32768; + if (player[c1].y_add > 0) + player[c1].y_add = 0; + } + } + player[c1].y_add += 12288; + if (player[c1].y_add > 36864 && player[c1].anim != 3) { + player[c1].anim = 3; + player[c1].frame = 0; + player[c1].frame_tick = 0; + player[c1].image = player_anims[player[c1].anim].frame[player[c1].frame].image + player[c1].direction * 9; + } + player[c1].y += player[c1].y_add; + if ( (player[c1].x >> 16) <= (165 + c1 * 2) || (player[c1].x >> 16) >= (208 + c1 * 2) ) { + if ( (player[c1].y >> 16) > (160 + c1 * 2) ) { + player[c1].y = (160L + c1 * 2) << 16; + player[c1].y_add = 0; + if (player[c1].anim != 0 && player[c1].anim != 1) { + player[c1].anim = 0; + player[c1].frame = 0; + player[c1].frame_tick = 0; + player[c1].image = player_anims[player[c1].anim].frame[player[c1].frame].image + player[c1].direction * 9; + } + } + } + else { + if ( (player[c1].y >> 16) > (138 + c1 * 2) ) { + player[c1].y = (138L + c1 * 2) << 16; + player[c1].y_add = 0; + if (player[c1].anim != 0 && player[c1].anim != 1) { + player[c1].anim = 0; + player[c1].frame = 0; + player[c1].frame_tick = 0; + player[c1].image = player_anims[player[c1].anim].frame[player[c1].frame].image + player[c1].direction * 9; + } + if ( (c1 == 0 && key_pressed(KEY_PL1_JUMP) == 0) || (c1 == 1 && key_pressed(KEY_PL2_JUMP) == 0) || (c1 == 2 && joy.but1 == 0) || (c1 == 3 && ( (main_info.num_mouse_buttons == 3 && mouse.but3 == 0) || (main_info.num_mouse_buttons == 2 && mouse.but1 == 0 && mouse.but2 == 0) ) ) ) + player[c1].jump_ready = 1; + } + } + player[c1].x += player[c1].x_add; + if ( (player[c1].y >> 16) > (138 + c1 * 2) ) { + if ( (player[c1].x >> 16) > (165 + c1 * 2) && (player[c1].x >> 16) < (190 + c1 * 2) ) { + player[c1].x = (165L + c1 * 2) << 16; + player[c1].x_add = 0; + } + if ( (player[c1].x >> 16) > (190 + c1 * 2) && (player[c1].x >> 16) < (208 + c1 * 2) ) { + player[c1].x = (208L + c1 * 2) << 16; + player[c1].x_add = 0; + } + } + } + else { + if ( (c1 == 0 && key_pressed(KEY_PL1_LEFT) == 1 && key_pressed(KEY_PL1_RIGHT) == 1) || (c1 == 1 && key_pressed(KEY_PL2_LEFT) == 1 && key_pressed(KEY_PL2_RIGHT) == 1) || (c1 == 2 && joy.x < -512 && joy.x > 512) || (c1 == 3 && mouse.but1 == 1 && mouse.but2 == 1) ) { + if (player[c1].direction == 1) { + if ( (player[c1].x >> 16) <= (165 + c1 * 2) || (player[c1].x >> 16) >= (208 + c1 * 2) ) { + if (player[c1].x_add > 0) { + player[c1].x_add -= 16384; + if ( (player[c1].y >> 16) >= (160 + c1 * 2) ) + add_object(OBJ_SMOKE, (player[c1].x >> 16) + 2 + rnd(9), (player[c1].y >> 16) + 13 + rnd(5), 0, -16384 - rnd(8192), OBJ_ANIM_SMOKE, 0); + } + else + player[c1].x_add -= 12288; + } + if ( (player[c1].x >> 16) > (165 + c1 * 2) && (player[c1].x >> 16) < (208 + c1 * 2) ) { + if (player[c1].x_add > 0) { + player[c1].x_add -= 16384; + if ( (player[c1].y >> 16) >= (138 + c1 * 2) ) + add_object(OBJ_SMOKE, (player[c1].x >> 16) + 2 + rnd(9), (player[c1].y >> 16) + 13 + rnd(5), 0, -16384 - rnd(8192), OBJ_ANIM_SMOKE, 0); + } + else + player[c1].x_add -= 12288; + } + if (player[c1].x_add < -98304L) + player[c1].x_add = -98304L; + player[c1].direction = 1; + if (player[c1].anim == 0) { + player[c1].anim = 1; + player[c1].frame = 0; + player[c1].frame_tick = 0; + player[c1].image = player_anims[player[c1].anim].frame[player[c1].frame].image + player[c1].direction * 9; + } + } + else { + if ( (player[c1].x >> 16) <= (165 + c1 * 2) || (player[c1].x >> 16) >= (208 + c1 * 2) ) { + if (player[c1].x_add < 0) { + player[c1].x_add += 16384; + if ( (player[c1].y >> 16) >= (160 + c1 * 2) ) + add_object(OBJ_SMOKE, (player[c1].x >> 16) + 2 + rnd(9), (player[c1].y >> 16) + 13 + rnd(5), 0, -16384 - rnd(8192), OBJ_ANIM_SMOKE, 0); + } + else + player[c1].x_add += 12288; + } + if ( (player[c1].x >> 16) > (165 + c1 * 2) && (player[c1].x >> 16) < (208 + c1 * 2) ) { + if (player[c1].x_add < 0) { + player[c1].x_add += 16384; + if ( (player[c1].y >> 16) >= (138 + c1 * 2) ) + add_object(OBJ_SMOKE, (player[c1].x >> 16) + 2 + rnd(9), (player[c1].y >> 16) + 13 + rnd(5), 0, -16384 - rnd(8192), OBJ_ANIM_SMOKE, 0); + } + else + player[c1].x_add += 12288; + } + if (player[c1].x_add > 98304L) + player[c1].x_add = 98304L; + player[c1].direction = 0; + if (player[c1].anim == 0) { + player[c1].anim = 1; + player[c1].frame = 0; + player[c1].frame_tick = 0; + player[c1].image = player_anims[player[c1].anim].frame[player[c1].frame].image + player[c1].direction * 9; + } + } + } + else if ( (c1 == 0 && key_pressed(KEY_PL1_LEFT) == 1) || (c1 == 1 && key_pressed(KEY_PL2_LEFT) == 1) || (c1 == 2 && joy.x < -512) || (c1 == 3 && mouse.but1 == 1) ) { + if ( (player[c1].x >> 16) <= (165 + c1 * 2) || (player[c1].x >> 16) >= (208 + c1 * 2) ) { + if (player[c1].x_add > 0) { + player[c1].x_add -= 16384; + if ( (player[c1].y >> 16) >= (160 + c1 * 2) ) + add_object(OBJ_SMOKE, (player[c1].x >> 16) + 2 + rnd(9), (player[c1].y >> 16) + 13 + rnd(5), 0, -16384 - rnd(8192), OBJ_ANIM_SMOKE, 0); + } + else + player[c1].x_add -= 12288; + } + if ( (player[c1].x >> 16) > (165 + c1 * 2) && (player[c1].x >> 16) < (208 + c1 * 2) ) { + if (player[c1].x_add > 0) { + player[c1].x_add -= 16384; + if ( (player[c1].y >> 16) >= (138 + c1 * 2) ) + add_object(OBJ_SMOKE, (player[c1].x >> 16) + 2 + rnd(9), (player[c1].y >> 16) + 13 + rnd(5), 0, -16384 - rnd(8192), OBJ_ANIM_SMOKE, 0); + } + else + player[c1].x_add -= 12288; + } + if (player[c1].x_add < -98304L) + player[c1].x_add = -98304L; + player[c1].direction = 1; + if (player[c1].anim == 0) { + player[c1].anim = 1; + player[c1].frame = 0; + player[c1].frame_tick = 0; + player[c1].image = player_anims[player[c1].anim].frame[player[c1].frame].image + player[c1].direction * 9; + } + } + else if ( (c1 == 0 && key_pressed(KEY_PL1_RIGHT) == 1) || (c1 == 1 && key_pressed(KEY_PL2_RIGHT) == 1) || (c1 == 2 && joy.x > 512) || (c1 == 3 && mouse.but2 == 1) ) { + if ( (player[c1].x >> 16) <= (165 + c1 * 2) || (player[c1].x >> 16) >= (208 + c1 * 2) ) { + if (player[c1].x_add < 0) { + player[c1].x_add += 16384; + if ( (player[c1].y >> 16) >= (160 + c1 * 2) ) + add_object(OBJ_SMOKE, (player[c1].x >> 16) + 2 + rnd(9), (player[c1].y >> 16) + 13 + rnd(5), 0, -16384 - rnd(8192), OBJ_ANIM_SMOKE, 0); + } + else + player[c1].x_add += 12288; + } + if ( (player[c1].x >> 16) > (165 + c1 * 2) && (player[c1].x >> 16) < (208 + c1 * 2) ) { + if (player[c1].x_add < 0) { + player[c1].x_add += 16384; + if ( (player[c1].y >> 16) >= (138 + c1 * 2) ) + add_object(OBJ_SMOKE, (player[c1].x >> 16) + 2 + rnd(9), (player[c1].y >> 16) + 13 + rnd(5), 0, -16384 - rnd(8192), OBJ_ANIM_SMOKE, 0); + } + else + player[c1].x_add += 12288; + } + if (player[c1].x_add > 98304L) + player[c1].x_add = 98304L; + player[c1].direction = 0; + if (player[c1].anim == 0) { + player[c1].anim = 1; + player[c1].frame = 0; + player[c1].frame_tick = 0; + player[c1].image = player_anims[player[c1].anim].frame[player[c1].frame].image + player[c1].direction * 9; + } + } +// if ( (c1 == 0 && ( (key_pressed(KEY_PL1_LEFT) == 0 && key_pressed(KEY_PL1_RIGHT) == 0) || (key_pressed(KEY_PL1_LEFT) == 1 && key_pressed(KEY_PL1_RIGHT) == 1) ) ) || (c1 == 1 && ( (key_pressed(KEY_PL2_LEFT) == 0 && key_pressed(KEY_PL2_RIGHT) == 0) || (key_pressed(KEY_PL2_LEFT) == 1 && key_pressed(KEY_PL2_RIGHT) == 1) ) ) || (c1 == 2 && ( (joy.x >= -512 && joy.x <= 512) || (joy.x < -512 && joy.x > 512) ) ) || (c1 == 3 && ( (mouse.but1 == 0 && mouse.but2 == 0) || (mouse.but1 == 1 && mouse.but2 == 1) ) ) ) { + else { + if ( ( (player[c1].x >> 16) <= (165 + c1 * 2) || (player[c1].x >> 16) >= (208 + c1 * 2) ) && (player[c1].y >> 16) >= (160 + c1 * 2) ) { + if (player[c1].x_add < 0) { + player[c1].x_add += 16384; + if (player[c1].x_add > 0) + player[c1].x_add = 0; + add_object(OBJ_SMOKE, (player[c1].x >> 16) + 2 + rnd(9), (player[c1].y >> 16) + 13 + rnd(5), 0, -16384 - rnd(8192), OBJ_ANIM_SMOKE, 0); + } + else if (player[c1].x_add > 0) { + player[c1].x_add -= 16384; + if (player[c1].x_add < 0) + player[c1].x_add = 0; + add_object(OBJ_SMOKE, (player[c1].x >> 16) + 2 + rnd(9), (player[c1].y >> 16) + 13 + rnd(5), 0, -16384 - rnd(8192), OBJ_ANIM_SMOKE, 0); + } + } + if ( ( ( (player[c1].x >> 16) > (165 + c1 * 2) && (player[c1].x >> 16) < (208 + c1 * 2) ) && (player[c1].y >> 16) >= (138 + c1 * 2) ) ) { + if (player[c1].x_add < 0) { + player[c1].x_add += 16384; + if (player[c1].x_add > 0) + player[c1].x_add = 0; + add_object(OBJ_SMOKE, (player[c1].x >> 16) + 2 + rnd(9), (player[c1].y >> 16) + 13 + rnd(5), 0, -16384 - rnd(8192), OBJ_ANIM_SMOKE, 0); + } + else if (player[c1].x_add > 0) { + player[c1].x_add -= 16384; + if (player[c1].x_add < 0) + player[c1].x_add = 0; + add_object(OBJ_SMOKE, (player[c1].x >> 16) + 2 + rnd(9), (player[c1].y >> 16) + 13 + rnd(5), 0, -16384 - rnd(8192), OBJ_ANIM_SMOKE, 0); + } + } + if (player[c1].anim == 1) { + player[c1].anim = 0; + player[c1].frame = 0; + player[c1].frame_tick = 0; + player[c1].image = player_anims[player[c1].anim].frame[player[c1].frame].image + player[c1].direction * 9; + } + } + if (player[c1].jump_ready == 1 && ( (c1 == 0 && key_pressed(KEY_PL1_JUMP) == 1) || (c1 == 1 && key_pressed(KEY_PL2_JUMP) == 1) || (c1 == 2 && joy.but1 == 1) || (c1 == 3 && ( (main_info.num_mouse_buttons == 3 && mouse.but3 == 1) || (main_info.num_mouse_buttons == 2 && mouse.but1 == 1 && mouse.but2 == 1) ) ) ) ) { + if ( (player[c1].x >> 16) <= (165 + c1 * 2) || (player[c1].x >> 16) >= (208 + c1 * 2) ) { + if ( (player[c1].y >> 16) >= (160 + c1 * 2) ) { + player[c1].y_add = -280000L; + player[c1].anim = 2; + player[c1].frame = 0; + player[c1].frame_tick = 0; + player[c1].image = player_anims[player[c1].anim].frame[player[c1].frame].image + player[c1].direction * 9; + player[c1].jump_ready = 0; + dj_play_sfx(SFX_JUMP, SFX_JUMP_FREQ + rnd(2000) - 1000, 64, 0, 0, -1); + } + } + else { + if ( (player[c1].y >> 16) >= (138 + c1 * 2) ) { + player[c1].y_add = -280000L; + player[c1].anim = 2; + player[c1].frame = 0; + player[c1].frame_tick = 0; + player[c1].image = player_anims[player[c1].anim].frame[player[c1].frame].image + player[c1].direction * 9; + player[c1].jump_ready = 0; + dj_play_sfx(SFX_JUMP, SFX_JUMP_FREQ + rnd(2000) - 1000, 64, 0, 0, -1); + } + } + } + if ( (c1 == 0 && key_pressed(KEY_PL1_JUMP) == 0) || (c1 == 1 && key_pressed(KEY_PL2_JUMP) == 0) || (c1 == 2 && joy.but1 == 0) || (c1 == 3 && ( (main_info.num_mouse_buttons == 3 && mouse.but3 == 0) || (main_info.num_mouse_buttons == 2 && mouse.but1 == 0 && mouse.but2 == 0) ) ) ) { + if (player[c1].y_add < 0) { + player[c1].y_add += 32768; + if (player[c1].y_add > 0) + player[c1].y_add = 0; + } + } + if ( (c1 == 0 && key_pressed(KEY_PL1_JUMP) == 0) || (c1 == 1 && key_pressed(KEY_PL2_JUMP) == 0) || (c1 == 2 && joy.but1 == 0) || (c1 == 3 && ( (main_info.num_mouse_buttons == 3 && mouse.but3 == 0) || (main_info.num_mouse_buttons == 2 && (mouse.but1 == 0 || mouse.but2 == 0) ) ) ) ) + player[c1].jump_ready = 1; + player[c1].y_add += 12288; + if (player[c1].y_add > 36864 && player[c1].anim != 3) { + player[c1].anim = 3; + player[c1].frame = 0; + player[c1].frame_tick = 0; + player[c1].image = player_anims[player[c1].anim].frame[player[c1].frame].image + player[c1].direction * 9; + } + player[c1].y += player[c1].y_add; + if ( (player[c1].x >> 16) <= (165 + c1 * 2) || (player[c1].x >> 16) >= (208 + c1 * 2) ) { + if ( (player[c1].y >> 16) > (160 + c1 * 2) ) { + player[c1].y = (160L + c1 * 2) << 16; + player[c1].y_add = 0; + if (player[c1].anim != 0 && player[c1].anim != 1) { + player[c1].anim = 0; + player[c1].frame = 0; + player[c1].frame_tick = 0; + player[c1].image = player_anims[player[c1].anim].frame[player[c1].frame].image + player[c1].direction * 9; +// dj_play_sfx(SFX_LAND, SFX_LAND_FREQ, 64, 0, 0, -1); + } + } + } + else { + if ( (player[c1].y >> 16) > (138 + c1 * 2) ) { + player[c1].y = (138L + c1 * 2) << 16; + player[c1].y_add = 0; + if (player[c1].anim != 0 && player[c1].anim != 1) { + player[c1].anim = 0; + player[c1].frame = 0; + player[c1].frame_tick = 0; + player[c1].image = player_anims[player[c1].anim].frame[player[c1].frame].image + player[c1].direction * 9; +// dj_play_sfx(SFX_LAND, SFX_LAND_FREQ, 64, 0, 0, -1); + } + } + } + player[c1].x += player[c1].x_add; + if ( (player[c1].x >> 16) < 0) { + player[c1].x = 0; + player[c1].x_add = 0; + } + if ( (player[c1].x >> 16) > 400) { + end_loop_flag = 1; + new_game_flag = 1; + memset(menu_pal, 0, 768); + mod_fade_direction = 0; + } + if ( (player[c1].y >> 16) > (138 + c1 * 2) ) { + if ( (player[c1].x >> 16) > (165 + c1 * 2) && (player[c1].x >> 16) < (190 + c1 * 2) ) { + player[c1].x = (165L + c1 * 2) << 16; + player[c1].x_add = 0; + } + if ( (player[c1].x >> 16) > (190 + c1 * 2) && (player[c1].x >> 16) < (208 + c1 * 2) ) { + player[c1].x = (208L + c1 * 2) << 16; + player[c1].x_add = 0; + } + } + } + player[c1].frame_tick++; + if (player[c1].frame_tick >= player_anims[player[c1].anim].frame[player[c1].frame].ticks) { + player[c1].frame++; + if (player[c1].frame >= player_anims[player[c1].anim].num_frames) + player[c1].frame = player_anims[player[c1].anim].restart_frame; + player[c1].frame_tick = 0; + } + player[c1].image = player_anims[player[c1].anim].frame[player[c1].frame].image + player[c1].direction * 9; + } + + dj_mix(); + + main_info.page_info[main_info.draw_page].num_pobs = 0; + + for (c1 = 3; c1 >= 0; c1--) + add_pob(main_info.draw_page, player[c1].x >> 16, player[c1].y >> 16, player[c1].image + c1 * 18, rabbit_gobs); + + update_objects(); + + draw_pobs(main_info.draw_page); + + dj_mix(); + + if (mod_fade_direction == 1) { + if (mod_vol < 35) { + mod_vol++; + dj_set_mod_volume(mod_vol); + } + } + else { + if (mod_vol > 0) { + mod_vol--; + dj_set_mod_volume(mod_vol); + } + } + + fade_flag = 0; + for (c1 = 0; c1 < 720; c1++) { + if (menu_cur_pal[c1] < menu_pal[c1]) { + menu_cur_pal[c1]++; + fade_flag = 1; + } + else if (menu_cur_pal[c1] > menu_pal[c1]) { + menu_cur_pal[c1]--; + fade_flag = 2; + } + } + if (fade_flag == 0 && end_loop_flag == 1) { + menu_deinit(); + if (new_game_flag == 1) + return 0; + else + return 1; + } + +/* if (fade_flag == 2) { + fade_dir = 0; + fade_count = 0; + }*/ + + switch (fade_dir) { + case 0: + if (fade_count < 30) { + for (c1 = 0; c1 < 48; c1++) { + if (fade_pal[c1] > 0) + fade_pal[c1]--; + } + fade_count++; + } + else { + outportw(0x3c4, 0x0f02); + memset( (char *)(0xa0000 + 220 * 100 + __djgpp_conventional_base), 0, 2000); + memset( (char *)(0xa0000 + 32768 + 220 * 100 + __djgpp_conventional_base), 0, 2000); + cur_message++; + if (cur_message >= NUM_MESSAGES) + cur_message -= NUM_MESSAGES; + put_text(0, 200, 220, message[cur_message], 2); + put_text(1, 200, 220, message[cur_message], 2); + fade_dir = 1; + fade_count = 0; + fade_tick = 0; + } + break; + case 1: + if (fade_count < 100) { + for (c1 = 0; c1 < 48; c1++) { + if (fade_pal[c1] < menu_pal[c1 + 720]) + fade_pal[c1]++; + } + fade_count++; + } + else { + fade_dir = 0; + fade_count = 0; + fade_tick = 0; + } + break; + } + + for (c1 = 0; c1 < 48; c1++) { + if (fade_pal[c1] > menu_pal[c1 + 720]) + fade_pal[c1]--; + } + + main_info.draw_page ^= 1; + main_info.view_page ^= 1; + + outportw(0x3d4, (main_info.view_page << 23) + 0x0d); + outportw(0x3d4, ( (main_info.view_page << 15) & 0xff00) + 0x0c); + + while( (inportb(0x3da) & 8) == 0) + dj_mix(); + while( (inportb(0x3da) & 8) == 8) + dj_mix(); + + if (fade_flag != 0) { + outportb(0x3c8, 0); + for (c1 = 0; c1 < 720; c1++) + outportb(0x3c9, menu_cur_pal[c1]); + } + + outportb(0x3c8, 240); + for (c1 = 0; c1 < 48; c1++) + outportb(0x3c9, fade_pal[c1]); + + dj_mix(); + + redraw_pob_backgrounds(main_info.draw_page); + + } + + menu_deinit(); + return 0; + +} + + +char menu_init(void) { + FILE *handle; + int c1; + + outportb(0x3c8, 0); + for (c1 = 0; c1 < 768; c1++) + outportb(0x3c9, 0); + + if ( (handle = dat_open("menu.pcx", datfile_name, "rb") ) == 0) { + strcpy(main_info.error_str, "Error loading 'menu.pcx', aborting...\n"); + return 1; + } + if (read_pcx(handle, background_pic, 102400, menu_pal) != 0) { + strcpy(main_info.error_str, "Error loading 'menu.pcx', aborting...\n"); + return 1; + } + fclose(handle); + if ( (handle = dat_open("menumask.pcx", datfile_name, "rb") ) == 0) { + strcpy(main_info.error_str, "Error loading 'menumask.pcx', aborting...\n"); + return 1; + } + if (read_pcx(handle, mask_pic, 102400, 0) != 0) { + strcpy(main_info.error_str, "Error loading 'menumask.pcx', aborting...\n"); + return 1; + } + fclose(handle); + memset(menu_cur_pal, 0, 768); + + put_block(0, 0, 0, 400, 256, background_pic); + put_block(1, 0, 0, 400, 256, background_pic); + + for (c1 = 0; c1 < 4; c1++) { + player[c1].enabled = 0; + player[c1].x = (long)rnd(150) << 16; + player[c1].y = (160L + c1 * 2) << 16; + player[c1].x_add = 0; + player[c1].y_add = 0; + player[c1].direction = rnd(2); + player[c1].jump_ready = 1; + player[c1].anim = 0; + player[c1].frame = 0; + player[c1].frame_tick = 0; + player[c1].image = player_anims[player[c1].anim].frame[player[c1].frame].image; + } + + for (c1 = 0; c1 < 300; c1++) + objects[c1].used = 0; + + main_info.page_info[0].num_pobs = 0; + main_info.page_info[1].num_pobs = 0; + + return 0; + +} + + +void menu_deinit(void) { + + dj_set_nosound(1); + +} + diff --git a/modify/pack.c b/modify/pack.c new file mode 100644 index 0000000..4f3d087 --- /dev/null +++ b/modify/pack.c @@ -0,0 +1,109 @@ +#include +#include +#include +#include +#include +#include +#include +#include + +typedef struct { + char filename[12]; + u_int32_t offset; + u_int32_t size; +} DirEntry; + +int main(int argc, char **argv) +{ + int fd; + DirEntry *datafile; + int num_entries, i; + int c; + char *outfile = NULL; + int offset = 0; + + while ((c = getopt(argc, argv, "o:")) != EOF) { + switch (c) { + case 'o': + if (optarg) { + outfile = strdup(optarg); + } + break; + } + } + argc -= optind; + argv += optind; + + if (outfile == NULL) { + printf("You must specify output filename with -o\n"); + exit(1); + } + if (argc == 0) { + printf("You must specify some files to pack, duh\n"); + exit(1); + } + num_entries = argc; + + /* prepare to pack things - get sizes and calculate offsets */ + printf("%u files to pack\n", num_entries); + datafile = calloc(num_entries, sizeof(DirEntry)); + + /* skip past the directory structure */ + offset = 4 + (num_entries * 20); + + for (i = 0; i < num_entries; i++) { + struct stat dummy; + if (stat(argv[i], &dummy)) { + fprintf(stderr, "%s is not accessible: ", argv[i]); + perror(""); + exit(1); + } + if (strlen(argv[i]) > 12) { + fprintf(stderr, "filename %s is longer than 12 chars\n", argv[i]); + exit(1); + } + strncpy(datafile[i].filename, argv[i], 12); + datafile[i].size = dummy.st_size; + /* num_entries * (12 + 8) */ + datafile[i].offset = offset; + offset += datafile[i].size; + } + + /* here, we checked that all files are ok, and ready to roll the packfile */ + fd = open(outfile, O_RDWR | O_CREAT, 0644); + if (fd == -1) { + perror("opening packfile"); + exit(1); + } + printf("Opened %s\n", outfile); + + /* write number of entries in this data file */ + write(fd, &num_entries, 4); + + /* write the directory structure */ + for (i = 0; i < num_entries; i++) { + write(fd, &datafile[i], 20); + } + + /* write in the actual files */ + for (i = 0; i < num_entries; i++) { + int infd; + char *buf; + + printf("adding %s ", argv[i]); + + infd = open(argv[i], O_RDONLY); + if (infd == -1) { + perror("opening file"); + exit(1); + } + buf = malloc(datafile[i].size + 16); + read(infd, buf, datafile[i].size); + close(infd); + write(fd, buf, datafile[i].size); + free(buf); + printf(" OK\n"); + } + close(fd); + return 0; +} diff --git a/modify/unpack.c b/modify/unpack.c new file mode 100644 index 0000000..44a778d --- /dev/null +++ b/modify/unpack.c @@ -0,0 +1,69 @@ +#include +#include +#include +#include +#include +#include + +typedef struct { + char filename[12]; + u_int32_t offset; + u_int32_t size; +} DirEntry; + +int main(int argc, char **argv) +{ + int fd; + DirEntry *datafile; + int num_entries, i; + + if (argc < 2) { + printf("dumbass, specify filename to unpack\n"); + exit(1); + } + + fd = open(argv[1], O_RDONLY); + if (fd == -1) { + perror("open datafile"); + exit(1); + } + /* get number of entries */ + read(fd, &num_entries, 4); + + printf("%d entries in datafile\n", num_entries); + + datafile = calloc(num_entries, sizeof(DirEntry)); + read(fd, datafile, num_entries * sizeof(DirEntry)); + printf("Directory Listing:\n"); + for (i = 0; i < num_entries; i++) { + char filename[14]; + memset(filename, 0, sizeof(filename)); + strncpy(filename, datafile[i].filename, 12); + printf("%02d:\t%s (%u bytes)\n", i, filename, + datafile[i].size); + } + + for (i = 0; i < num_entries; i++) { + int outfd; + char filename[14]; + char *buf; + memset(filename, 0, sizeof(filename)); + strncpy(filename, datafile[i].filename, 12); + printf("Extracting %s ", filename); + + outfd = open(filename, O_RDWR | O_CREAT, 0644); + if (!outfd) { + perror("cant open file"); + exit(1); + } + lseek(fd, datafile[i].offset, SEEK_SET); + buf = calloc(1, datafile[i].size + 16); + read(fd, buf, datafile[i].size); + write(outfd, buf, datafile[i].size); + close(outfd); + free(buf); + printf("OK\n"); + } + close(fd); + return 0; +} diff --git a/readme.txt b/readme.txt new file mode 100644 index 0000000..6d3e639 --- /dev/null +++ b/readme.txt @@ -0,0 +1,75 @@ + JUMP 'N BUMP + + by Brainchild Design in 1998 + + +Jump 'n Bump is e-mailware. That means you're supposed to +send us an e-mail. Write for example where you're from and +what you thought about this game. If you do that, you will +greatly encourage us to make more games for you! + +We encourage you to spread this game to all your friends! +You are also allowed to put this game on your homepage, +on CD:s and magazines. You may even charge money for it. +It would be nice though, if you sent us a copy of your +article, so we know about it. + + + Code by Mattias Brynervall + Graphics by Andreas Brynervall + and Martin Magnusson + Music by Anders Nilsson + + + INSTRUCTIONS + +Leap over the log, and bound off to the right to play. +The different rabbits are controlled with: + + DOTT LEFT/RIGHT/UP + JIFFY A/D/W + FIZZ Mouse Buttons + MIJJI Joystick + +Jump around like crazy and try to get on top of the others. + + + HOMEPAGE + + http://www.algonet.se/~mattiasb + + + BRAINCHILD DESIGN + +Brainchild Design tries to make games with great gameplay. +"Simple but yet addictive" is something of a guideline. +Brainchild Designs members are: + + Andreas Brynervall andreasb@acc.umu.se + Mattias Brynervall matbr656@student.liu.se + Martin Magnusson marma102@student.liu.se + Anders Nilsson equel@swipnet.se + +Andreas, Mattias and Martin are old friends from school in +Nybro, in the south of Sweden. Anders joined a bit later. +He's from Malmö, and we met eachother over the internet. +Now we really don't know where he is, and we have no contact +with him. Where are you, Anders? + + + SECRETS + +Oh, there are some secrets in Jump 'n Bump. +Try and see if you can find them! +If you can't, you could always write and ask us... + + + TECHNICAL INFO + +Program code in C and ASM. Compiled with DJGPP and NASM. +Graphics drawn in Deluxe Paint 2 and Paint Shop Pro 5. +Music made with Fasttracker 2. +Readme written in Notepad. + + + DON'T FORGET TO SEND AN E-MAIL! \ No newline at end of file diff --git a/source.txt b/source.txt new file mode 100644 index 0000000..a93aa9b --- /dev/null +++ b/source.txt @@ -0,0 +1,93 @@ + JUMP 'N BUMP + + Source Code Release + by Brainchild Design in 99 + + +Ok, enough already! Too many people have been +asking about the source code for Jump 'n Bump, +but I've always said that it's messy and ugly +and bad, and besides, nobody could really learn +anything from it, certainly not how to design +code. + +Then I remembered how excited I was when I got +hold of the source code to Wolfenstein 3D by +ID. Not that I really learned that much from +it, it was far too complex for me at that time. +That is also the reason that I don't care +about source code. It takes far too long time +to understand what happens, and I personally +don't think it's worth it. + +Again, I thought about it for a while. And I +can't say that there is that much source code +for complete games out there. Mostly it's just +"how to make this neat effect". Nothing wrong +with that, it's just that there's so much more +to making a game than that! + +So I finally decided to release the code. Do +whatever you like with it. I've gotten e-mails +saying things like "if I got the source, I could +add multiplayer support over the internet". +Yeah, right! Adding that would probably be +harder than to totally rewrite the game. The +code is poorly designed, making changes to is +hard, if not impossible. Be warned! + +If I still haven't convinced you to stay away, +then I would be glad to see what you manage +to do with it. Some suggestions I've gotten for +the game includes computer rabbits, network +support, better menu with level-loading support, +and so on. Oh, and 400x256 is NOT a good +resolution, I can tell you that much. + +You'll need DJGPP to compile the code. You can +find it on http://www.delorie.com. I recommend +that you also get hold of RHIDE, a great IDE. +If you need to recompile the ASM code, you will +need NASM, which you can find on +http://www.web-sites.co.uk/nasm/ + +Ok, here's a short explanation on how to get +it to compile (I won't explain how to install +DJGPP and RHIDE, there's plenty of info on that +on the net): + +Move 'libdj.a' to DJGPP's LIB-directory and +'dj.h' to DJGPP's INCLUDE-directory. + +Start up RHIDE, and try opening the project +'jumpbump.gpr'. If that works then you'll be +all set and ready to compile. If not, try +setting all the directories in the project +right, and so on. + +If you can't open the project, delete +'jumpbump.gpr' and 'jumpbump.gdt'. Start up +RHIDE and create a new project. Add all *.o +files and 'gfx.obj'. (The reason I add the +object files instead of the source files is +that my RHIDE always recompiled everything, +not just what was changed.) Go into Local +Options for 'gfx.obj' and change Name of the +output file to 'gfx.obj'. In the menu, go for +Options->Libraries. Write 'dj' on the first +row, and put an X to the left of it. Now you +should be able to compile. + +Oh, and please don't write to me and ask about +the code. It was almost a year since I wrote it, +and I really don't remember anything about it. + +Of course, I don't take any responsibility +whatsoever to what might happen to you, your +computer or your social life if you choose to +use this. + +'Nuff said! + +Mattias Brynervall, Brainchild Design +http://www.brainchilddesign.com \ No newline at end of file -- 2.39.2