+ static struct setup
+ {
+ unsigned int bit;
+ char *text, *mode[2];
+ int color[2];
+ } setup[] =
+ {
+ {SETUP_SOUND, "Sound:", {"on", "off"}, {FC_YELLOW,FC_BLUE}},
+ {SETUP_SOUND_LOOPS, " Sound Loops:",{"on", "off"}, {FC_YELLOW,FC_BLUE}},
+ {SETUP_SOUND_MUSIC, " Game Music:", {"on", "off"}, {FC_YELLOW,FC_BLUE}},
+ {SETUP_TOONS, "Toons:", {"on", "off"}, {FC_YELLOW,FC_BLUE}},
+ {SETUP_DIRECT_DRAW, "Buffered gfx:",{"off","on" }, {FC_BLUE,FC_YELLOW}},
+ {SETUP_SCROLL_DELAY,"Scroll Delay:",{"on", "off"}, {FC_YELLOW,FC_BLUE}},
+ {SETUP_SOFT_SCROLL, "Soft Scroll.:",{"on", "off"}, {FC_YELLOW,FC_BLUE}},
+ {SETUP_FADING, "Fading:", {"on", "off"}, {FC_YELLOW,FC_BLUE}},
+ {SETUP_QUICK_DOORS, "Quick Doors:", {"on", "off"}, {FC_YELLOW,FC_BLUE}},
+ {SETUP_AUTO_RECORD, "Auto-Record:", {"on", "off"}, {FC_YELLOW,FC_BLUE}},
+ {0, "Input Setup", {"", ""}, {0,0}},
+ {0, "", {"", ""}, {0,0}},
+ {0, "", {"", ""}, {0,0}},
+ {0, "Exit", {"", ""}, {0,0}},
+ {0, "Save and exit",{"", ""}, {0,0}}
+ };
+
+ CloseDoor(DOOR_CLOSE_2);
+ ClearWindow();
+ DrawText(SX+16, SY+16, "SETUP",FS_BIG,FC_YELLOW);
+
+ for(i=SETUP_SCREEN_POS_START;i<=SETUP_SCREEN_POS_END;i++)
+ {
+ int base = i - SETUP_SCREEN_POS_START;
+
+ if (!(i >= SETUP_SCREEN_POS_EMPTY1 && i <= SETUP_SCREEN_POS_EMPTY2))
+ {
+ DrawGraphic(0,i,GFX_KUGEL_BLAU);
+ DrawText(SX+32,SY+i*32, setup[base].text, FS_BIG,FC_GREEN);
+ }
+
+ if (i < SETUP_SCREEN_POS_EMPTY1)
+ {
+ int setting_bit = setup[base].bit;
+ int setting_pos = ((local_player->setup & setting_bit) != 0 ? 0 : 1);
+ DrawText(SX+14*32, SY+i*32,setup[base].mode[setting_pos],
+ FS_BIG,setup[base].color[setting_pos]);
+ }
+ }
+
+ FadeToFront();
+ InitAnimation();
+ HandleSetupScreen(0,0,0,0,MB_MENU_INITIALIZE);
+}
+
+void HandleSetupScreen(int mx, int my, int dx, int dy, int button)
+{
+ static int choice = 3;
+ static int redraw = TRUE;
+ int x = (mx+32-SX)/32, y = (my+32-SY)/32;
+ int pos_start = SETUP_SCREEN_POS_START + 1;
+ int pos_empty1 = SETUP_SCREEN_POS_EMPTY1 + 1;
+ int pos_empty2 = SETUP_SCREEN_POS_EMPTY2 + 1;
+ int pos_end = SETUP_SCREEN_POS_END + 1;
+
+ if (button == MB_MENU_INITIALIZE)
+ redraw = TRUE;
+
+ if (redraw)
+ {
+ DrawGraphic(0,choice-1,GFX_KUGEL_ROT);
+ redraw = FALSE;
+ }
+
+ if (button == MB_MENU_INITIALIZE)
+ return;
+
+ if (dx || dy)
+ {
+ if (dy)
+ {
+ x = 1;
+ y = choice+dy;
+ }
+ else
+ x = y = 0;
+
+ if (y >= pos_empty1 && y <= pos_empty2)
+ y = (dy > 0 ? pos_empty2 + 1 : pos_empty1 - 1);
+
+ if (y < pos_start)
+ y = pos_start;
+ else if (y > pos_end)
+ y = pos_end;
+ }
+
+ if (!mx && !my && !dx && !dy)
+ {
+ x = 1;
+ y = choice;
+ }
+
+ if (x==1 && y >= pos_start && y <= pos_end &&
+ !(y >= pos_empty1 && y <= pos_empty2))
+ {
+ if (button)
+ {
+ if (y!=choice)
+ {
+ DrawGraphic(0,y-1,GFX_KUGEL_ROT);
+ DrawGraphic(0,choice-1,GFX_KUGEL_BLAU);
+ }
+ choice = y;
+ }
+ else
+ {
+ int yy = y-1;
+
+ if (y==3 && sound_status==SOUND_AVAILABLE)
+ {
+ if (SETUP_SOUND_ON(local_player->setup))
+ {
+ DrawText(SX+14*32, SY+yy*32,"off",FS_BIG,FC_BLUE);
+ DrawText(SX+14*32, SY+(yy+1)*32,"off",FS_BIG,FC_BLUE);
+ DrawText(SX+14*32, SY+(yy+2)*32,"off",FS_BIG,FC_BLUE);
+ local_player->setup &= ~SETUP_SOUND_LOOPS;
+ local_player->setup &= ~SETUP_SOUND_MUSIC;
+ }
+ else
+ DrawText(SX+14*32, SY+yy*32,"on ",FS_BIG,FC_YELLOW);
+ local_player->setup ^= SETUP_SOUND;
+ }
+ else if (y==4 && sound_loops_allowed)
+ {
+ if (SETUP_SOUND_LOOPS_ON(local_player->setup))
+ DrawText(SX+14*32, SY+yy*32,"off",FS_BIG,FC_BLUE);
+ else
+ {
+ DrawText(SX+14*32, SY+yy*32,"on ",FS_BIG,FC_YELLOW);
+ DrawText(SX+14*32, SY+(yy-1)*32,"on ",FS_BIG,FC_YELLOW);
+ local_player->setup |= SETUP_SOUND;
+ }
+ local_player->setup ^= SETUP_SOUND_LOOPS;
+ }
+ else if (y==5 && sound_loops_allowed)
+ {
+ if (SETUP_SOUND_MUSIC_ON(local_player->setup))
+ DrawText(SX+14*32, SY+yy*32,"off",FS_BIG,FC_BLUE);
+ else
+ {
+ DrawText(SX+14*32, SY+yy*32,"on ",FS_BIG,FC_YELLOW);
+ DrawText(SX+14*32, SY+(yy-2)*32,"on ",FS_BIG,FC_YELLOW);
+ local_player->setup |= SETUP_SOUND;
+ }
+ local_player->setup ^= SETUP_SOUND_MUSIC;
+ }
+ else if (y==6)
+ {
+ if (SETUP_TOONS_ON(local_player->setup))
+ DrawText(SX+14*32, SY+yy*32,"off",FS_BIG,FC_BLUE);
+ else
+ DrawText(SX+14*32, SY+yy*32,"on ",FS_BIG,FC_YELLOW);
+ local_player->setup ^= SETUP_TOONS;
+ }
+ else if (y==7)
+ {
+ if (!SETUP_DIRECT_DRAW_ON(local_player->setup))
+ DrawText(SX+14*32, SY+yy*32,"off",FS_BIG,FC_BLUE);
+ else
+ DrawText(SX+14*32, SY+yy*32,"on ",FS_BIG,FC_YELLOW);
+ local_player->setup ^= SETUP_DIRECT_DRAW;
+ }
+ else if (y==8)
+ {
+ if (SETUP_SCROLL_DELAY_ON(local_player->setup))
+ DrawText(SX+14*32, SY+yy*32,"off",FS_BIG,FC_BLUE);
+ else
+ DrawText(SX+14*32, SY+yy*32,"on ",FS_BIG,FC_YELLOW);
+ local_player->setup ^= SETUP_SCROLL_DELAY;
+ }
+ else if (y==9)
+ {
+ if (SETUP_SOFT_SCROLL_ON(local_player->setup))
+ DrawText(SX+14*32, SY+yy*32,"off",FS_BIG,FC_BLUE);
+ else
+ DrawText(SX+14*32, SY+yy*32,"on ",FS_BIG,FC_YELLOW);
+ local_player->setup ^= SETUP_SOFT_SCROLL;
+ }
+ else if (y==10)
+ {
+ if (SETUP_FADING_ON(local_player->setup))
+ DrawText(SX+14*32, SY+yy*32,"off",FS_BIG,FC_BLUE);
+ else
+ DrawText(SX+14*32, SY+yy*32,"on ",FS_BIG,FC_YELLOW);
+ local_player->setup ^= SETUP_FADING;
+ }
+ else if (y==11)
+ {
+ if (SETUP_QUICK_DOORS_ON(local_player->setup))
+ DrawText(SX+14*32, SY+yy*32,"off",FS_BIG,FC_BLUE);
+ else
+ DrawText(SX+14*32, SY+yy*32,"on ",FS_BIG,FC_YELLOW);
+ local_player->setup ^= SETUP_QUICK_DOORS;
+ }
+ else if (y==12)
+ {
+ if (SETUP_AUTO_RECORD_ON(local_player->setup))
+ DrawText(SX+14*32, SY+yy*32,"off",FS_BIG,FC_BLUE);
+ else
+ DrawText(SX+14*32, SY+yy*32,"on ",FS_BIG,FC_YELLOW);
+ local_player->setup ^= SETUP_AUTO_RECORD;
+ }
+ else if (y==13)
+ {
+ game_status = SETUPINPUT;
+ DrawSetupInputScreen();
+ redraw = TRUE;
+ }
+
+#if 0
+ else if (y==13)
+ {
+ if (SETUP_2ND_JOYSTICK_ON(local_player->setup))
+ DrawText(SX+14*32, SY+yy*32,"1st",FS_BIG,FC_YELLOW);
+ else
+ DrawText(SX+14*32, SY+yy*32,"2nd",FS_BIG,FC_YELLOW);
+ local_player->setup ^= SETUP_2ND_JOYSTICK;
+ }
+ else if (y==14)
+ {
+ /*
+ CalibrateJoystick();
+ */
+
+ CustomizeKeyboard();
+
+ redraw = TRUE;
+ }
+#endif
+
+ else if (y==pos_end-1 || y==pos_end)
+ {
+ if (y==pos_end)
+ {
+ SavePlayerInfo(PLAYER_SETUP);
+ SaveJoystickData();
+ }
+
+ game_status = MAINMENU;
+ DrawMainMenu();
+ redraw = TRUE;
+ }
+ }
+ }
+ BackToFront();
+
+ if (game_status==SETUP)
+ DoAnimation();
+}
+
+void DrawSetupInputScreen()
+{
+#if 0