dosobj = src/dos/main.obj src/dos/gfx.obj src/dos/timer.obj src/dos/watdpmi.obj &
src/dos/vbe.obj src/dos/vga.obj src/dos/keyb.obj src/dos/mouse.obj &
src/dos/logger.obj
-gameobj = src/game.obj src/util.obj src/gfxutil.obj src/dynarr.obj src/rbtree.obj &
- src/menuscr.obj
+scrobj = src/introscr.obj src/menuscr.obj
+gameobj = src/game.obj src/util.obj src/gfxutil.obj src/dynarr.obj src/rbtree.obj
gfxobj = src/3dgfx/3dgfx.obj src/3dgfx/mesh.obj src/3dgfx/meshload.obj &
src/3dgfx/polyfill.obj src/3dgfx/polyclip.obj
incpath = -Isrc -Isrc/dos -Ilibs/imago/src
dosobj = src\dos\main.obj src\dos\gfx.obj src\dos\timer.obj src\dos\watdpmi.obj &
src\dos\vbe.obj src\dos\vga.obj src\dos\keyb.obj src\dos\mouse.obj &
src\dos\logger.obj
-gameobj = src\game.obj src\util.obj src\gfxutil.obj src\dynarr.obj src\rbtree.obj &
- src\menuscr.obj
+scrobj = src\introscr.obj src\menuscr.obj
+gameobj = src\game.obj src\util.obj src\gfxutil.obj src\dynarr.obj src\rbtree.obj
gfxobj = src\3dgfx\3dgfx.obj src\3dgfx\mesh.obj src\3dgfx\meshload.obj &
src\3dgfx\polyfill.obj src\3dgfx\polyclip.obj
incpath = -Isrc -Isrc\dos -Ilibs\imago\src
libpath = libpath libs\imago
!endif
-obj = $(dosobj) $(gameobj) $(gfxobj)
+obj = $(dosobj) $(gameobj) $(gfxobj) $(scrobj)
bin = game.exe
def = -dM_PI=3.141592653589793
for(;;) {
int key;
- while((key = kb_getkey()) != -1) {
- if(key == 27) goto break_evloop;
+ if(key_event) {
+ while((key = kb_getkey()) != -1) {
+ key_event(key, 1);
+ }
+ } else {
+ while((key = kb_getkey()) != -1) {
+ if(key == 27) goto break_evloop;
+ }
}
-
if(quit) goto break_evloop;
time_msec = get_msec();
#include "gfxutil.h"
#include "game.h"
-#define FADE_DUR 1024
+#define FADE_DUR 800
static void *logo;
static int logo_width, logo_height;
void intro_start(void)
{
+ draw = intro_draw;
+ key_event = intro_keyb;
+
start_time = time_msec;
}
void intro_draw(void)
{
int i, j;
+ long tm;
uint16_t fade;
unsigned char *src = logo;
uint16_t *dest = fb_pixels;
- fade = (time_msec - start_time) * 256 / FADE_DUR;
- if(fade > 256) fade = 256;
+ tm = time_msec - start_time;
+ if(tm < FADE_DUR) {
+ fade = tm * 256 / FADE_DUR;
+ } else if(tm < FADE_DUR * 2) {
+ fade = 256;
+ } else if(tm < FADE_DUR * 3) {
+ fade = 256 - (tm - 2 * FADE_DUR) * 256 / FADE_DUR;
+ } else {
+ menu_start();
+ return;
+ }
for(i=0; i<fb_height; i++) {
for(j=0; j<fb_width; j++) {
uint16_t g = (uint16_t)*src++ * fade / 256;
uint16_t b = (uint16_t)*src++ * fade / 256;
*dest++ = PACK_RGB16(r, g, b);
- src += 3;
}
}
+
+ blit_frame(fb_pixels, 1);
}
void intro_keyb(int key, int pressed)
{
+ if(pressed) {
+ menu_start();
+ }
}
void menu_start(void)
{
+ draw = menu_draw;
+ key_event = menu_keyb;
}
void menu_stop(void)