short setup_screen_mode_minimal(unsigned short nmode) { unsigned int flg_mem; TbScreenModeInfo *mdinfo; SYNCDBG(4,"Setting up mode %d",(int)nmode); if (!force_video_mode_reset) { if ((nmode == lbDisplay.ScreenMode) && (MinimalResolutionSetup)) return 1; } flg_mem = lbDisplay.DrawFlags; if (LbGraphicsScreenHeight() < 200) { WARNLOG("Unhandled previous Screen Mode %d, Reset skipped",(int)lbDisplay.ScreenMode); } else if (LbGraphicsScreenHeight() < 400) { if (MinimalResolutionSetup) { if ((nmode != lbDisplay.ScreenMode) || (force_video_mode_reset)) LbScreenReset(); LbDataFreeAll(mcga_load_files_minimal); MinimalResolutionSetup = 0; } else { reset_eye_lenses(); reset_heap_manager(); reset_heap_memory(); set_pointer_graphic_none(); unload_pointer_file(0); if ((nmode != lbDisplay.ScreenMode) || (force_video_mode_reset)) LbScreenReset(); LbDataFreeAll(mcga_load_files); } } else { if (MinimalResolutionSetup) { set_pointer_graphic_none(); unload_pointer_file(1); if ((nmode != lbDisplay.ScreenMode) || (force_video_mode_reset)) LbScreenReset(); LbDataFreeAll(vres256_load_files_minimal); MinimalResolutionSetup = 0; } else { reset_eye_lenses(); reset_heap_manager(); reset_heap_memory(); if ((nmode != lbDisplay.ScreenMode) || (force_video_mode_reset)) LbScreenReset(); LbDataFreeAll(vres256_load_files); } } mdinfo = LbScreenGetModeInfo(nmode); if (mdinfo->Height < 200) { ERRORLOG("Unhandled Screen Mode %d, setup failed",(int)nmode); force_video_mode_reset = true; return 0; } else if (mdinfo->Height < 400) { SYNCDBG(17,"Preparing minimal low resolution mode"); MinimalResolutionSetup = 1; if ( !LoadMcgaDataMinimal() ) { ERRORLOG("Unable to load minimal MCGA files"); return 0; } if ((nmode != lbDisplay.ScreenMode) || (force_video_mode_reset)) { if (LbScreenSetup((TbScreenMode)nmode, mdinfo->Width, mdinfo->Height, engine_palette, 2, 0) != 1) { ERRORLOG("Unable to setup screen resolution %s (mode %d)", mdinfo->Desc,(int)nmode); force_video_mode_reset = true; return 0; } } } else { SYNCDBG(17,"Preparing minimal high resolution mode"); MinimalResolutionSetup = 1; frontend_load_data_from_cd(); if ( LbDataLoadAll(vres256_load_files_minimal) ) { ERRORLOG("Unable to load vres256_load_files_minimal files"); force_video_mode_reset = true; return 0; } frontend_load_data_reset(); if ((nmode != lbDisplay.ScreenMode) || (force_video_mode_reset)) { if (LbScreenSetup((TbScreenMode)nmode, mdinfo->Width, mdinfo->Height, engine_palette, 1, 0) != 1) { ERRORLOG("Unable to setup screen resolution %s (mode %d)", mdinfo->Desc,(int)nmode); force_video_mode_reset = true; return 0; } } } LbScreenClear(0); LbScreenSwap(); update_screen_mode_data(mdinfo->Width, mdinfo->Height); lbDisplay.DrawFlags = flg_mem; force_video_mode_reset = false; return 1; }
void init_players(void) { ULONG i; ULONG len; CBYTE str[128]; UBYTE asc; LbScreenClear(0); number_of_players = 0; while (!number_of_players) { sprintf(str,"How many players (1-8)?"); DrawCheapText(4,4,str,WHITE); LbScreenSwap(); if (Inkey >= KB_1 && Inkey <= KB_8) { number_of_players = Inkey-KB_1+1; sprintf(str,"How many players (1-8)? %d",number_of_players); DrawCheapText(4,4,str,WHITE); LbScreenSwap(); } Inkey = 0; } for (i=0; i<number_of_players; i++) { create_snake(i); snakes[i].Length = 5; snakes[i].Name = namebuf[i]; namebuf[i][0] = 0; len = 0; sprintf(str,"Player %d name: %s",i+1,namebuf[i]); DrawCheapText(4,14+30*i,str,WHITE); LbScreenSwap(); while (Inkey != KB_RETURN) { if(KeyOn[KB_BACKSPACE] && len>0) { KeyOn[KB_BACKSPACE] = 0; namebuf[i][--len]=0; DrawBox(4+56+(len+1)*4,14+30*i,4,5,0); } else { if (!(Inkey&0x80)) { asc = InkeyToAsciiShift[Inkey]; if (asc >= 32 && asc <= 127 && len < 128) { namebuf[i][len++] = asc; namebuf[i][len] = 0; } } } if (Inkey != KB_RETURN) Inkey = 0; sprintf(str,"Player %d name: %s ",i+1,namebuf[i]); DrawCheapText(4,14+30*i,str,WHITE); LbScreenSwap(); } Inkey = 0; sprintf(str,"Player %d left: ",i+1); DrawCheapText(4,24+30*i,str,WHITE); LbScreenSwap(); while (!snakes[i].Left) { while (!Inkey && !Display.LeftButton && !Display.RightButton && !Display.MiddleButton); if (Display.LeftButton) { Display.LeftButton = 0; snakes[i].Left = -1; sprintf(str,"Player %d left: Left Button",i+1); } else if (Display.RightButton) { Display.RightButton = 0; snakes[i].Left = -2; sprintf(str,"Player %d left: Right Button",i+1); } else if (Display.MiddleButton) { Display.MiddleButton = 0; snakes[i].Left = -3; sprintf(str,"Player %d left: Middle Button",i+1); } else { if (!(Inkey&0x80)) { if (lbExtendedKeyPress) Inkey |= 0x80; snakes[i].Left = Inkey; sprintf(str,"Player %d left: %s",i+1,key_names[Inkey]); } Inkey = 0; } } DrawCheapText(4,24+30*i,str,WHITE); LbScreenSwap(); sprintf(str,"Player %d right: ",i+1); DrawCheapText(4,34+30*i,str,WHITE); LbScreenSwap(); while (!snakes[i].Right) { while (!Inkey && !Display.LeftButton && !Display.RightButton && !Display.MiddleButton); if (Display.LeftButton) { Display.LeftButton = 0; snakes[i].Right = -1; sprintf(str,"Player %d right: Left Button",i+1); } else if (Display.RightButton) { Display.RightButton = 0; snakes[i].Right = -2; sprintf(str,"Player %d right: Right Button",i+1); } else if (Display.MiddleButton) { Display.MiddleButton = 0; snakes[i].Right = -3; sprintf(str,"Player %d right: Middle Button",i+1); } else { if (!(Inkey&0x80)) { if (lbExtendedKeyPress) Inkey |= 0x80; snakes[i].Right = Inkey; sprintf(str,"Player %d right: %s",i+1,key_names[Inkey]); } Inkey = 0; } } DrawCheapText(4,34+30*i,str,WHITE); LbScreenSwap(); KeyOn[snakes[i].Left] = KeyOn[snakes[i].Right] = 0; } LbScreenClear(0); }
TbBool setup_screen_mode(unsigned short nmode) { TbScreenModeInfo *mdinfo; unsigned int flg_mem; long lens_mem; short was_minimal_res; SYNCDBG(4,"Setting up mode %d",(int)nmode); if (!force_video_mode_reset) { if ((nmode == lbDisplay.ScreenMode) && (!MinimalResolutionSetup)) { SYNCDBG(6,"Mode %d already active, no changes.",(int)nmode); return true; } } lens_mem = game.numfield_1B; flg_mem = lbDisplay.DrawFlags; was_minimal_res = (MinimalResolutionSetup || force_video_mode_reset); set_pointer_graphic_none(); if (LbGraphicsScreenHeight() < 200) { WARNLOG("Unhandled previous Screen Mode %d, Reset skipped",(int)lbDisplay.ScreenMode); } else if (LbGraphicsScreenHeight() < 400) { if (MinimalResolutionSetup) { if (lbDisplay.ScreenMode != nmode) LbScreenReset(); LbDataFreeAll(mcga_load_files_minimal); ERRORLOG("MCGA Minimal not allowed (Reset)"); MinimalResolutionSetup = 0; } else { reset_eye_lenses(); reset_heap_manager(); reset_heap_memory(); set_pointer_graphic_none(); unload_pointer_file(0); if (lbDisplay.ScreenMode != nmode) LbScreenReset(); LbDataFreeAll(mcga_load_files); } } else // so (LbGraphicsScreenHeight() >= 400) { if (MinimalResolutionSetup) { if ((lbDisplay.ScreenMode != nmode) || (MinimalResolutionSetup)) LbScreenReset(); LbDataFreeAll(vres256_load_files_minimal); MinimalResolutionSetup = 0; } else { reset_eye_lenses(); reset_heap_manager(); reset_heap_memory(); set_pointer_graphic_none(); unload_pointer_file(1); if ((lbDisplay.ScreenMode != nmode) || (MinimalResolutionSetup)) LbScreenReset(); LbDataFreeAll(vres256_load_files); } } mdinfo = LbScreenGetModeInfo(nmode); if (mdinfo->Height < 200) { ERRORLOG("Unhandled Screen Mode %d, setup failed",(int)nmode); force_video_mode_reset = true; return false; } else if (mdinfo->Height < 400) { SYNCDBG(6,"Entering low-res mode %d, resolution %dx%d.",(int)nmode,(int)mdinfo->Width,(int)mdinfo->Height); if (!LoadMcgaData()) { ERRORLOG("Loading Mcga files failed"); force_video_mode_reset = true; return false; } if ((lbDisplay.ScreenMode != nmode) || (was_minimal_res)) { if (LbScreenSetup((TbScreenMode)nmode, mdinfo->Width, mdinfo->Height, engine_palette, 2, 0) != 1) { ERRORLOG("Unable to setup screen resolution %s (mode %d)", mdinfo->Desc,(int)nmode); force_video_mode_reset = true; return false; } } load_pointer_file(0); } else // so (mdinfo->Height >= 400) { SYNCDBG(6,"Entering hi-res mode %d, resolution %dx%d.",(int)nmode,(int)mdinfo->Width,(int)mdinfo->Height); if (!LoadVRes256Data((long)mdinfo->Width*(long)mdinfo->Height)) { ERRORLOG("Unable to load VRes256 data files"); force_video_mode_reset = true; return false; } if ((lbDisplay.ScreenMode != nmode) || (was_minimal_res)) { if (LbScreenSetup((TbScreenMode)nmode, mdinfo->Width, mdinfo->Height, engine_palette, 1, 0) != 1) { ERRORLOG("Unable to setup screen resolution %s (mode %d)", mdinfo->Desc,(int)nmode); force_video_mode_reset = true; return false; } } load_pointer_file(1); } LbScreenClear(0); LbScreenSwap(); update_screen_mode_data(mdinfo->Width, mdinfo->Height); if (parchment_loaded) reload_parchment_file(mdinfo->Width >= 640); reinitialise_eye_lens(lens_mem); LbMouseSetPosition((MyScreenWidth/pixel_size) >> 1, (MyScreenHeight/pixel_size) >> 1); lbDisplay.DrawFlags = flg_mem; if (!setup_heap_memory()) { force_video_mode_reset = true; return false; } setup_heap_manager(); game.numfield_C &= ~0x0004; force_video_mode_reset = false; SYNCDBG(8,"Finished"); return true; }