Example #1
0
aniType* mkAni(SDL_Surface*img, int w,int h, int ticksPerFrame)
{
  if(!img)
  {
    return(NULL);
  }

  int numFrames = img->w/w;
  int i;

  aniType* ani = malloc( sizeof(aniType) );
  memset( ani, 0, sizeof(aniType) );


  ani->numFrames=numFrames;
  ani->numTicks=ticksPerFrame;
  ani->spr = malloc( sizeof(spriteType*) * numFrames );

  for(i=0;i<numFrames;i++)
  {
    ani->spr[i] = cutSprite(img, i*w,0, w,h);
  }

  return(ani);
}
Example #2
0
void editorLoad(const char* fn, SDL_Surface* screen)
{
  //Set filename
  editorFileName(fn);

  //Init cursor
  initCursor(&cur);
  //Read info's for level.
  pf.levelInfo = mkLevelInfo( fn );
  //Load field
  loadField(&pf, fileName);

  initDraw(pf.levelInfo, screen);
  SDL_FreeSurface(stealGfxPtr()->boardImg);
  stealGfxPtr()->boardImg = loadImg( DATADIR"data/editbg.png" );

  selBrickBG = loadImg( DATADIR"data/editselbrick.png" );

  saveBtnBG = loadImg( DATADIR"data/edit-save.png" );
  saveBtnSprite = cutSprite( saveBtnBG, 0,0, saveBtnBG->w, saveBtnBG->h );

  changed=0;
  selBrick=BRICKSBEGIN;

  teleState=0;

  fieldRect.x = HSCREENW -  74;
  fieldRect.y = HSCREENH - 114;
  fieldRect.w = HSCREENW + 154;
  fieldRect.h = HSCREENH + 114;
}
void drawPackBox(SDL_Surface* screen,int posx, int posy,int packNum)
{
  char buf[128];
  SDL_Rect r;
  r.x=posx+5;
  r.y=posy+5;

  //We do this so the menu can unload the images when not used.
  if(!ps.packBoxImg)
  {
    //Load graphics
    ps.packBoxImg = loadImg( "data/pack-box-small.png" );
    ps.packBoxSpr[PCKLISTIMG_SELECTED] = cutSprite(ps.packBoxImg, 0,0,260,42);
    ps.packBoxSpr[PCKLISTIMG_DEFAULT] = cutSprite(ps.packBoxImg, 0,42,260,42);
    ps.packBoxSpr[PCKLISTIMG_IS_DLC] = cutSprite(ps.packBoxImg, 0,42+42,260,42);
    ps.packBoxSpr[PCKLISTIMG_DLC_ENTER] = cutSprite(ps.packBoxImg, 0,42+42+42,260,42);
    ps.packBoxSpr[PCKLISTIMG_DLC_OFFLINE] = cutSprite(ps.packBoxImg, 0,42+42+42+42,260,42);
  }
  
  SDL_LogInfo(SDL_LOG_CATEGORY_APPLICATION, "==== 10");

  //PackInfo is now in pi.
  packInfoType* pi;

  if( packNum == ps.numPacks )
  {
    pi = ps.dlc;
  } else {
    pi = (packInfoType*)( listGetItemAt(ps.packs,packNum) )->data;
  }

  //Blit the box
  if(pi == ps.dlc )
  {

#if defined( PLATFORM_SUPPORTS_STATSUPLOAD )
    if( setting()->online && dlcGetState()==DLC_READY )
    {
      drawSprite(screen, ps.packBoxSpr[PCKLISTIMG_DLC_ENTER], posx, posy);
      txtWrite(screen, FONTSMALL, STR_MENU_PACKLIST_DLC_ENTER, posx+40, posy+4);
    } else {
      drawSprite(screen, ps.packBoxSpr[PCKLISTIMG_DLC_OFFLINE], posx, posy);
      txtWrite(screen, FONTSMALL, STR_MENU_PACKLIST_DLC_OFFLINE, posx+12, posy+4);
    }
#else
    drawSprite(screen, ps.packBoxSpr[PCKLISTIMG_DLC_OFFLINE], posx, posy);
    txtWrite(screen, FONTSMALL, STR_MENU_PACKLIST_DLC_OFFLINE, posx+12, posy+4);
#endif
    return; //We don't want to write any info on that special box.
  } else if(ps.selected==packNum)
  {
    drawSprite(screen, ps.packBoxSpr[PCKLISTIMG_SELECTED], posx, posy);
  } else {
    if(pi->isDLC == PACK_IS_DLC)
    {
      drawSprite(screen, ps.packBoxSpr[PCKLISTIMG_IS_DLC], posx, posy);
    } else {
      drawSprite(screen, ps.packBoxSpr[PCKLISTIMG_DEFAULT], posx, posy);
    }
  }
  
  SDL_LogInfo(SDL_LOG_CATEGORY_APPLICATION, "==== 20");

  //Blit the icon image
  SDL_BlitSurface(pi->icon,0,screen, &r);

  //PackName
  txtWrite(screen, FONTSMALL, pi->name, posx+40, posy+4);

  //Author
  txtWrite(screen, FONTSMALL, pi->author, posx+258-9*(strlen(pi->author)), posy+4);

  //Comment
  txtWrite(screen, FONTSMALL, pi->comment, posx+40, posy+4+12);

  //Number of levels
  sprintf(buf, "%i levels", pi->numLevels);
  txtWrite(screen, FONTSMALL, buf, posx+258-9*(strlen(buf)), posy+4+24);

  //Number of lives
  if( pi->lives > 0 )
  {
    sprintf(buf, "%i lives", pi->lives);
  } else {
    sprintf(buf, "Infinite lives!");
  }
  txtWrite(screen, FONTSMALL, buf, posx+40, posy+4+24);
  SDL_LogInfo(SDL_LOG_CATEGORY_APPLICATION, "==== 200");
}
Example #4
0
int initDraw(levelInfo_t* li, SDL_Surface* screen)
{
  char tempStr[512];
  int i,x,y;

  //Background image
  graphics.boardImg = loadImg( packGetFile("themes",li->bgFile) );

  if(!graphics.boardImg)
  {
    printf("Couldn't load board file:'%s'\n", packGetFile("themes",li->bgFile) );
    cleanUpDraw();
    return(0);
  }

  //Tileset
  sprintf(tempStr, "%s.png", li->tileBase);
  graphics.tileImg = loadImg( packGetFile("themes",tempStr) );
  if(!graphics.tileImg)
  {
    printf("Couldn't load tile file:'%s'\n", packGetFile("themes",tempStr) );
    cleanUpDraw();
    return(0);
  }


  //Cut tiles into sprites
  for(i=0; i < NUMTILES; i++)
  {
    graphics.tiles[i] = cutSprite(graphics.tileImg, i*20, 0, 20,20);
  }

  //Single wall (Override tile15 in graphics.tiles)
  sprintf(tempStr, "%s.png", li->wallBase);
  graphics.wallImg = loadImg( packGetFile("themes",tempStr) );
  if(!graphics.wallImg)
  {
    printf("Couldn't load wall file:'%s'\n", packGetFile("themes",tempStr) );
    cleanUpDraw();
    return(0);
  }

  //Override wall tile
  free(graphics.tiles[15]);
  graphics.tiles[15] = cutSprite(graphics.wallImg,0,0,20,20);

  //Extra walls, if they exist, if they don't, default to tile 6 (from 0) in tiles.
  sprintf(tempStr, "%s-extra.png", li->wallBase);
  graphics.wallsImg = loadImg( packGetFile("themes",tempStr) );
  if(!graphics.wallsImg) printf("Optional GFX missing: '%s'\n", packGetFile("themes",tempStr) );
  int r,c; //rows, column, sprite index
  i=0;
  for(r=0; r < 5; r++)
  {
    for(c=0; c < 3; c++)
    {
      if(graphics.wallsImg)
      {
        //Cut out from sheet
        x=c*20;
        y=r*20;
        graphics.walls[i] = cutSprite(graphics.wallsImg, x,y, 20, 20);
      } else {
        //Default to the freestanding wall
        graphics.walls[i] = cutSprite(graphics.wallImg, 0, 0, 20, 20);
      }
      i++;
    }
  }
  //Above loop leaves when i==15.
  //Middle-free is 15 = default tile index in image is 15 (starting from 0).
  graphics.walls[15] = cutSprite(graphics.wallImg, 0, 0, 20, 20);

  //Explosions, reuse R as frame number index
  for(i=0; i < BRICKSEND; i++)
  {
    //Open explosion
    sprintf(tempStr, "%s%02i.png", li->explBase, i);
    graphics.explImg[i] = loadImg( packGetFile("themes",tempStr) );

    if(!graphics.explImg[i] && i==0) printf("Couldn't open '%s'\n",packGetFile("themes",tempStr) );

    if(graphics.explImg[i])
      graphics.brickExpl[i] = mkAni(graphics.explImg[i], 30,30, 0);
    else
      graphics.brickExpl[i] = mkAni(graphics.explImg[0], 30,30, 0);
  }

  //Per-Tile animations
  for(i=0; i < NUMTILES; i++)
  {
    sprintf(tempStr, "%s-tile%02i.png", li->tileBase, i);
    graphics.aniImg[i] = loadImg( packGetFile("themes",tempStr) );

    graphics.tileAni[i] = mkAni(graphics.aniImg[i], 30,30, 80);

  }

  //Cursor
  graphics.curImg = loadImg( packGetFile( "themes/cursors",li->cursorFile) );
  if( !graphics.curImg )
  {
      printf("Warning: Couldn't find cursor '%s'\n", packGetFile( "themes/cursors",li->cursorFile));
  }
  graphics.curSpr[0] = cutSprite(graphics.curImg, 0, 0, 28,28);
  graphics.curSpr[1] = cutSprite(graphics.curImg, 28, 0, 28,28);


  //Load countdown
  graphics.countDownImg = loadImg( packGetFile(".","countdown.png") );
  if(!graphics.countDownImg)
  {
    printf("Error(5): couldn't load '%s'\n",packGetFile(".","countdown.png"));
    return(0);
  }
  //Cut countdown
  for(i=0; i < 4; i++)
  {
    graphics.countDownSpr[i] = cutSprite(graphics.countDownImg, 0,i*60, 140,60);
  }

  //Teleport path animation color gradient
  graphics.teleColorIndex=0;
  float f=255/TELEPATHNUMCOL;
  for(i=0; i < TELEPATHNUMCOL; i++)
  {
    graphics.teleColorTable[i] = SDL_MapRGB( screen->format, 0,(int)(255.0-(float)i*f),0  );
  }

  return(1);
}