Example #1
0
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;
}
Example #2
0
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);
}
Example #3
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;
}