Ejemplo n.º 1
0
/**
 * Draws the crucial warning messages on screen.
 * Requires the screen to be locked before.
 */
TbBool draw_onscreen_direct_messages(void)
{
    unsigned int msg_pos;
    SYNCDBG(5,"Starting");
    // Display in-game message for debug purposes
    if ((onscreen_msg_turns > 0) || erstat_check())
    {
        if ( LbScreenIsLocked() )
          LbTextDraw(260*units_per_pixel/16, 0*units_per_pixel/16, onscreen_msg_text);
        onscreen_msg_turns--;
    }
    msg_pos = 200;
    if ((game.system_flags & GSF_NetGameNoSync) != 0)
    {
        ERRORLOG("OUT OF SYNC (GameTurn %7d)", game.play_gameturn);
        if ( LbScreenIsLocked() )
          LbTextDraw(260*units_per_pixel/16, msg_pos*units_per_pixel/16, "OUT OF SYNC");
        msg_pos += 20;
    }
    if ((game.system_flags & GSF_NetSeedNoSync) != 0)
    {
        ERRORLOG("SEED OUT OF SYNC (GameTurn %7d)", game.play_gameturn);
        if ( LbScreenIsLocked() )
          LbTextDraw(260*units_per_pixel/16, msg_pos*units_per_pixel/16, "SEED OUT OF SYNC");
        msg_pos += 20;
    }
    SYNCDBG(18,"Finished");
    return true;
}
Ejemplo n.º 2
0
void draw_overlay_compass(long base_x, long base_y)
{
    unsigned short flg_mem;
    flg_mem = lbDisplay.DrawFlags;
    LbTextSetFont(winfont);
    lbDisplay.DrawFlags |= Lb_SPRITE_TRANSPAR4;
    LbTextSetWindow(0, 0, MyScreenWidth, MyScreenHeight);
    int units_per_px;
    units_per_px = (16*status_panel_width + 70) / 140;
    int tx_units_per_px;
    tx_units_per_px = (22 * units_per_px) / LbTextLineHeight();
    int w,h;
    w = (LbSprFontCharWidth(lbFontPtr,'/')*tx_units_per_px/16) / 2;
    h = (LbSprFontCharHeight(lbFontPtr,'/')*tx_units_per_px/16) / 2 + 2*units_per_px/16;
    struct PlayerInfo *player;
    player = get_my_player();
    struct Camera *cam;
    cam = player->acamera;
    int center_x, center_y;
    int shift_x, shift_y;
    center_x = base_x*units_per_px/16 + PANNEL_MAP_RADIUS*units_per_px/16;
    center_y = base_y*units_per_px/16 + PANNEL_MAP_RADIUS*units_per_px/16;
    shift_x = ((-(PANNEL_MAP_RADIUS*7/8)*units_per_px/16) * LbSinL(cam->orient_a)) >> LbFPMath_TrigmBits;
    shift_y = ((-(PANNEL_MAP_RADIUS*7/8)*units_per_px/16) * LbCosL(cam->orient_a)) >> LbFPMath_TrigmBits;
    if (LbScreenIsLocked()) {
        LbTextDrawResized(center_x + shift_x - w, center_y + shift_y - h, tx_units_per_px, gui_strings[877]);
    }
    shift_x = (( (PANNEL_MAP_RADIUS*7/8)*units_per_px/16) * LbSinL(cam->orient_a)) >> LbFPMath_TrigmBits;
    shift_y = (( (PANNEL_MAP_RADIUS*7/8)*units_per_px/16) * LbCosL(cam->orient_a)) >> LbFPMath_TrigmBits;
    if (LbScreenIsLocked()) {
        LbTextDrawResized(center_x + shift_x - w, center_y + shift_y - h, tx_units_per_px, gui_strings[879]);
    }
    shift_x = (( (PANNEL_MAP_RADIUS*7/8)*units_per_px/16) * LbCosL(cam->orient_a)) >> LbFPMath_TrigmBits;
    shift_y = ((-(PANNEL_MAP_RADIUS*7/8)*units_per_px/16) * LbSinL(cam->orient_a)) >> LbFPMath_TrigmBits;
    if (LbScreenIsLocked()) {
        LbTextDrawResized(center_x + shift_x - w, center_y + shift_y - h, tx_units_per_px, gui_strings[878]);
    }
    shift_x = ((-(PANNEL_MAP_RADIUS*7/8)*units_per_px/16) * LbCosL(cam->orient_a)) >> LbFPMath_TrigmBits;
    shift_y = (( (PANNEL_MAP_RADIUS*7/8)*units_per_px/16) * LbSinL(cam->orient_a)) >> LbFPMath_TrigmBits;
    if (LbScreenIsLocked()) {
        LbTextDrawResized(center_x + shift_x - w, center_y + shift_y - h, tx_units_per_px, gui_strings[880]);
    }
    lbDisplay.DrawFlags = flg_mem;
}
Ejemplo n.º 3
0
void draw_overlay_compass(long base_x, long base_y)
{
    unsigned short flg_mem;
    flg_mem = lbDisplay.DrawFlags;
    LbTextSetFont(winfont);
    lbDisplay.DrawFlags |= Lb_SPRITE_TRANSPAR4;
    LbTextSetWindow(0, 0, MyScreenWidth, MyScreenHeight);
    int units_per_px;
    units_per_px = (16*status_panel_width + 140/2) / 140;
    int tx_units_per_px;
    tx_units_per_px = (22 * units_per_px) / LbTextLineHeight();
    int w,h;
    w = (LbSprFontCharWidth(lbFontPtr,'/')*tx_units_per_px/16) / 2;
    h = (LbSprFontCharHeight(lbFontPtr,'/')*tx_units_per_px/16) / 2 + 2*units_per_px/16;
    struct PlayerInfo *player;
    player = get_my_player();
    const struct Camera *cam;
    cam = player->acamera;
    int center_x, center_y;
    int shift_x, shift_y;
    center_x = base_x*units_per_px/16 + MapDiagonalLength/2;
    center_y = base_y*units_per_px/16 + MapDiagonalLength/2;
    shift_x = (-(MapDiagonalLength*7/16) * LbSinL(cam->orient_a)) >> LbFPMath_TrigmBits;
    shift_y = (-(MapDiagonalLength*7/16) * LbCosL(cam->orient_a)) >> LbFPMath_TrigmBits;
    if (LbScreenIsLocked()) {
        LbTextDrawResized(center_x + shift_x - w, center_y + shift_y - h, tx_units_per_px, get_string(GUIStr_MapN));
    }
    shift_x = ( (MapDiagonalLength*7/16) * LbSinL(cam->orient_a)) >> LbFPMath_TrigmBits;
    shift_y = ( (MapDiagonalLength*7/16) * LbCosL(cam->orient_a)) >> LbFPMath_TrigmBits;
    if (LbScreenIsLocked()) {
        LbTextDrawResized(center_x + shift_x - w, center_y + shift_y - h, tx_units_per_px, get_string(GUIStr_MapS));
    }
    shift_x = ( (MapDiagonalLength*7/16) * LbCosL(cam->orient_a)) >> LbFPMath_TrigmBits;
    shift_y = (-(MapDiagonalLength*7/16) * LbSinL(cam->orient_a)) >> LbFPMath_TrigmBits;
    if (LbScreenIsLocked()) {
        LbTextDrawResized(center_x + shift_x - w, center_y + shift_y - h, tx_units_per_px, get_string(GUIStr_MapE));
    }
    shift_x = (-(MapDiagonalLength*7/16) * LbCosL(cam->orient_a)) >> LbFPMath_TrigmBits;
    shift_y = ( (MapDiagonalLength*7/16) * LbSinL(cam->orient_a)) >> LbFPMath_TrigmBits;
    if (LbScreenIsLocked()) {
        LbTextDrawResized(center_x + shift_x - w, center_y + shift_y - h, tx_units_per_px, get_string(GUIStr_MapW));
    }
    lbDisplay.DrawFlags = flg_mem;
}
Ejemplo n.º 4
0
TbBool movie_record_frame(void)
{
    short lock_mem;
    short result;
    lock_mem = LbScreenIsLocked();
    if (!lock_mem)
    {
        if (LbScreenLock() != Lb_SUCCESS)
            return false;
    }
    LbPaletteGet(cap_palette);
    result=anim_record_frame(lbDisplay.WScreen, cap_palette);
    if (!lock_mem)
        LbScreenUnlock();
    return result;
}
Ejemplo n.º 5
0
/**
 * Displays easter egg messages on screen.
 */
void draw_eastegg(void)
{
  char *text;
  static long px[2]={0,0},py[2]={0,0};
  static long vx[2]={0,0},vy[2]={0,0};
  long i,k;
  SYNCDBG(5,"Starting");
  LbTextSetWindow(0, 0, MyScreenWidth, MyScreenHeight);
  if (eastegg_skeksis_cntr >= eastegg_skeksis_codes.length)
  {
      unsigned char pos;
      eastegg_skeksis_cntr++;
      LbTextSetFont(winfont);
      text=buf_sprintf("Dene says a big 'Hello' to Goth Buns, Tarts and Barbies");
      lbDisplay.DrawFlags = Lb_TEXT_ONE_COLOR;
      for (i=0; i<30; i+=2)
      {
        pos = game.play_gameturn - i;
        lbDisplay.DrawColour = pos;
        LbTextDraw((LbCosL(16*(long)pos) / 512 + 120) / pixel_size,
          (LbSinL(32*(long)pos) / 512 + 200) / pixel_size, text);
      }
      set_flag_word(&lbDisplay.DrawFlags,Lb_TEXT_ONE_COLOR,false);
      pos=game.play_gameturn;
      LbTextDraw((LbCosL(16*(long)pos) / 512 + 120) / pixel_size,
        (LbSinL(32*(long)pos) / 512 + 200) / pixel_size, text);
      if (eastegg_skeksis_cntr >= 255)
        eastegg_skeksis_cntr = 0;
  }

  if (game.eastegg01_cntr >= eastegg_feckoff_codes.length)
  {
    LbTextSetWindow(0/pixel_size, 0/pixel_size, MyScreenWidth/pixel_size, MyScreenHeight/pixel_size);
    lbDisplay.DrawFlags &= ~Lb_TEXT_ONE_COLOR;
    LbTextSetFont(winfont);
    i = 0;
    text = buf_sprintf("Simon says Hi to everyone he knows...");
    px[i] += vx[i];
    if (px[i] < 0)
    {
      px[i] = 0;
      vx[i] = -vx[i];
    }
    py[i] += vy[i];
    if (py[i] < 0)
    {
      py[i] = 0;
      vy[i] = -vy[i];
    }
    k = pixel_size*LbTextStringWidth(text);
    if (px[i]+k  >= MyScreenWidth)
    {
      vx[i] = -vx[i];
      px[i] = MyScreenWidth-k-1;
    }
    k = pixel_size*LbTextStringHeight(text);
    if (py[i]+k >= MyScreenHeight)
    {
      vy[i] = -vy[i];
      py[i] = MyScreenHeight-k-1;
    }
    if (LbScreenIsLocked())
    {
      LbTextDraw(px[i]/pixel_size, py[i]/pixel_size, text);
    }
    play_non_3d_sample_no_overlap(90);
  }
  if ((game.flags_font & FFlg_AlexCheat) == 0)
    return;

  if (game.eastegg02_cntr >= eastegg_jlw_codes.length)
  {
    LbTextSetWindow(0/pixel_size, 0/pixel_size, MyScreenWidth/pixel_size, MyScreenHeight/pixel_size);
    lbDisplay.DrawFlags &= ~Lb_TEXT_ONE_COLOR;
    LbTextSetFont(winfont);
    i = 1;
    text = buf_sprintf("Alex, hopefully lying on a beach with Jo, says Hi");
    px[i] += vx[i];
    if (px[i] < 0)
    {
      px[i] = 0;
      vx[i] = -vx[i];
    }
    py[i] += vy[i];
    if (py[i] < 0)
    {
      py[i] = 0;
      vy[i] = -vy[i];
    }
    k = pixel_size * LbTextStringWidth(text);
    if (px[i]+k >= MyScreenWidth)
    {
      vx[i] = -vx[i];
      px[i] = MyScreenWidth-k-1;
    }
    k = pixel_size * LbTextStringHeight(text);
    if (py[i]+k >= MyScreenHeight)
    {
      vy[i] = -vy[i];
      py[i] = MyScreenHeight-k-1;
    }
    if (LbScreenIsLocked())
      LbTextDraw(px[i]/pixel_size, py[i]/pixel_size, text);
    play_non_3d_sample_no_overlap(90);
  }
}
Ejemplo n.º 6
0
void gui_draw_box(struct GuiBox *gbox)
{
    SYNCDBG(6,"Drawing box, first optn \"%s\"",gbox->optn_list->label);
    struct GuiBox *gbox_over;
    struct GuiBoxOption *goptn_over;
    struct GuiBoxOption *goptn;
    long lnheight;
    long mouse_x,mouse_y;
    long pos_x,pos_y;
    LbTextSetWindow(0, 0, MyScreenWidth/pixel_size, MyScreenHeight/pixel_size);
    mouse_x = GetMouseX();
    mouse_y = GetMouseY();
    goptn_over = NULL;
    gbox_over = gui_get_box_point_over(mouse_x, mouse_y);
    if (gbox_over != NULL)
    {
      goptn_over = gui_get_box_option_point_over(gbox_over, mouse_x, mouse_y);
    }

    LbTextSetFont(font_sprites);
    lnheight = pixel_size * LbTextLineHeight() + 2;
    pos_y = gbox->pos_y + 8;
    pos_x = gbox->pos_x + 8;
    if (gbox != gui_get_highest_priority_box())
    {
        lbDisplay.DrawFlags |= Lb_SPRITE_TRANSPAR4;
        LbDrawBox(gbox->pos_x/pixel_size, gbox->pos_y/pixel_size, gbox->width/pixel_size, gbox->height/pixel_size, colours[6][0][0]);
        if (lbDisplay.DrawFlags & Lb_SPRITE_OUTLINE)
        {
          LbDrawBox(gbox->pos_x/pixel_size, gbox->pos_y/pixel_size, gbox->width/pixel_size, gbox->height/pixel_size, colours[0][0][0]);
        } else
        {
          lbDisplay.DrawFlags ^= Lb_SPRITE_OUTLINE;
          LbDrawBox(gbox->pos_x/pixel_size, gbox->pos_y/pixel_size, gbox->width/pixel_size, gbox->height/pixel_size, colours[0][0][0]);
          lbDisplay.DrawFlags ^= Lb_SPRITE_OUTLINE;
        }
        lbDisplay.DrawFlags ^= Lb_SPRITE_TRANSPAR4;
        lbDisplay.DrawColour = colours[3][3][3];
        goptn = gbox->optn_list;
        while (goptn->label[0] != '!')
        {
          if (goptn->active_cb != NULL)
            goptn->field_26 = (goptn->active_cb)(gbox, goptn, &goptn->field_D);
          else
            goptn->field_26 = 1;
          if (!goptn->field_26)
            lbDisplay.DrawColour = colours[0][0][0];
          else
            lbDisplay.DrawColour = colours[3][3][3];
          if (LbScreenIsLocked())
          {
            LbTextDraw(pos_x/pixel_size, pos_y/pixel_size, goptn->label);
          }
          goptn++;
          pos_y += lnheight;
        }
    } else
    {
        lbDisplay.DrawFlags |= Lb_SPRITE_TRANSPAR4;
        LbDrawBox(gbox->pos_x/pixel_size, gbox->pos_y/pixel_size, gbox->width/pixel_size, gbox->height/pixel_size, colours[12][0][0]);
        if (lbDisplay.DrawFlags & Lb_SPRITE_OUTLINE)
        {
            LbDrawBox(gbox->pos_x/pixel_size, gbox->pos_y/pixel_size, gbox->width/pixel_size, gbox->height/pixel_size, colours[2][0][0]);
        } else
        {
            lbDisplay.DrawFlags ^= Lb_SPRITE_OUTLINE;
            LbDrawBox(gbox->pos_x/pixel_size, gbox->pos_y/pixel_size, gbox->width/pixel_size, gbox->height/pixel_size, colours[2][0][0]);
            lbDisplay.DrawFlags ^= Lb_SPRITE_OUTLINE;
        }
        lbDisplay.DrawFlags ^= Lb_SPRITE_TRANSPAR4;
        goptn = gbox->optn_list;
        while (goptn->label[0] != '!')
        {
            if (goptn->active_cb != NULL)
              goptn->field_26 = (goptn->active_cb)(gbox, goptn, &goptn->field_D);
            else
              goptn->field_26 = 1;
            if (!goptn->field_26)
              lbDisplay.DrawColour = colours[0][0][0];
            else
            if ( ((gbox == gbox_over) && (goptn == goptn_over) && (gbox != dragging_box.gbox)) ||
                 ((gbox != NULL) && (goptn->active != 0)) )
              lbDisplay.DrawColour = colours[15][15][15];
            else
              lbDisplay.DrawColour = colours[9][9][9];
            if (LbScreenIsLocked())
            {
              LbTextDraw(pos_x/pixel_size, pos_y/pixel_size, goptn->label);
            }
            goptn++;
            pos_y += lnheight;
        }
    }
}
Ejemplo n.º 7
0
long prepare_hsi_screenshot(unsigned char *buf,unsigned char *palette)
{
    long pos,i;
    int w,h;
    short lock_mem;
    pos=0;
    w=MyScreenWidth/pixel_size;
    h=MyScreenHeight/pixel_size;

    write_int8_buf(buf+pos,'m');
    pos++;
    write_int8_buf(buf+pos,'h');
    pos++;
    write_int8_buf(buf+pos,'w');
    pos++;
    write_int8_buf(buf+pos,'a');
    pos++;
    write_int8_buf(buf+pos,'n');
    pos++;
    write_int8_buf(buf+pos,'h');
    pos++;
    // pos=6
    write_int16_be_buf(buf+pos, 4);
    pos+=2;
    write_int16_be_buf(buf+pos, w);
    pos+=2;
    write_int16_be_buf(buf+pos, h);
    pos+=2;
    write_int16_be_buf(buf+pos, 256);
    pos+=2;
    // pos=14
    write_int16_be_buf(buf+pos, 256);
    pos+=2;
    write_int16_be_buf(buf+pos, 256);
    pos+=2;
    write_int16_be_buf(buf+pos, 256);
    pos+=2;
    // pos=20
    for (i=0; i<6; i++)
    {
        write_int16_be_buf(buf+pos, 0);
        pos+=2;
    }
    for (i=0; i<768; i+=3)
    {
        write_int8_buf(buf+pos,4*palette[i+0]);
        pos++;
        write_int8_buf(buf+pos,4*palette[i+1]);
        pos++;
        write_int8_buf(buf+pos,4*palette[i+2]);
        pos++;
    }
    lock_mem = LbScreenIsLocked();
    if (!lock_mem)
    {
        if (LbScreenLock() != Lb_SUCCESS)
        {
            ERRORLOG("Can't lock canvas");
            LbMemoryFree(buf);
            return 0;
        }
    }
    for (i=0; i<h; i++)
    {
        memcpy(buf+pos, lbDisplay.WScreen + lbDisplay.GraphicsScreenWidth*i, w);
        pos += w;
    }
    if (!lock_mem)
        LbScreenUnlock();
    return pos;
}
Ejemplo n.º 8
0
long prepare_bmp_screenshot(unsigned char *buf,unsigned char *palette)
{
    long pos,i,j;
    int width,height;
    short lock_mem;
    long data_len,pal_len;
    pos=0;
    width=MyScreenWidth/pixel_size;
    height=MyScreenHeight/pixel_size;
    write_int8_buf(buf+pos,'B');
    pos++;
    write_int8_buf(buf+pos,'M');
    pos++;
    int padding_size=4-(width&3);
    data_len = (width+padding_size)*height;
    pal_len = 256*4;
    write_int32_le_buf(buf+pos, data_len+pal_len+0x36);
    pos+=4;
    write_int32_le_buf(buf+pos, 0);
    pos+=4;
    write_int32_le_buf(buf+pos, pal_len+0x36);
    pos+=4;
    write_int32_le_buf(buf+pos, 40);
    pos+=4;
    write_int32_le_buf(buf+pos, width);
    pos+=4;
    write_int32_le_buf(buf+pos, height);
    pos+=4;
    write_int16_le_buf(buf+pos, 1);
    pos+=2;
    write_int16_le_buf(buf+pos, 8);
    pos+=2;
    write_int32_le_buf(buf+pos, 0);
    pos+=4;
    write_int32_le_buf(buf+pos, 0);
    pos+=4;
    write_int32_le_buf(buf+pos, 0);
    pos+=4;
    write_int32_le_buf(buf+pos, 0);
    pos+=4;
    write_int32_le_buf(buf+pos, 0);
    pos+=4;
    write_int32_le_buf(buf+pos, 0);
    pos+=4;
    for (i=0; i<768; i+=3)
    {
        unsigned int cval;
        cval=4*(unsigned int)palette[i+2];
        if (cval>255) cval=255;
        write_int8_buf(buf+pos,cval);
        pos++;
        cval=4*(unsigned int)palette[i+1];
        if (cval>255) cval=255;
        write_int8_buf(buf+pos,cval);
        pos++;
        cval=4*(unsigned int)palette[i+0];
        if (cval>255) cval=255;
        write_int8_buf(buf+pos,cval);
        pos++;
        write_int8_buf(buf+pos,0);
        pos++;
    }
    lock_mem = LbScreenIsLocked();
    if (!lock_mem)
    {
        if (LbScreenLock() != Lb_SUCCESS)
        {
            ERRORLOG("Can't lock canvas");
            LbMemoryFree(buf);
            return 0;
        }
    }
    for (i=0; i<height; i++)
    {
        memcpy(buf+pos, lbDisplay.WScreen + lbDisplay.GraphicsScreenWidth*(height-i-1), width);
        pos += width;
        if ((padding_size&3) > 0)
            for (j=0; j < padding_size; j++)
            {
                write_int8_buf(buf+pos,0);
                pos++;
            }
    }
    if (!lock_mem)
        LbScreenUnlock();
    return pos;
}