Ejemplo n.º 1
0
static int l_setbackground( lua_State* L )
{
  gwlua_t* state = get_state( L );
  rl_image_t*** picture = (rl_image_t***)luaL_checkudata( L, 1, "picture" );
  rl_image_t* bg = **picture;
  
  int width = MAX( bg->width, 480 );
  
  if ( rl_backgrnd_create( width, bg->height ) )
  {
    return luaL_error( L, "out of memory allocating the background framebuffer" );
  }
  
  int x0 = ( width - bg->width ) / 2;
  
  state->screen = rl_backgrnd_fb( &state->width, &state->height );
  rl_backgrnd_clear( 0 );
  rl_image_blit_nobg( bg, x0, 0 );
  rl_sprites_translate( x0, 0 );
  
  gwlua_set_fb( state->width, state->height );
  return 0;
}
Ejemplo n.º 2
0
bool retro_load_game( const struct retro_game_info* info )
{
  enum retro_pixel_format fmt = RETRO_PIXEL_FORMAT_RGB565;
  
  if ( !env_cb( RETRO_ENVIRONMENT_SET_PIXEL_FORMAT, &fmt ) )
  {
    log_cb( RETRO_LOG_ERROR, "retroluxury needs RGB565\n" );
    return false;
  }
  
  rl_image_init();
  rl_sprite_init();
  
  if ( rl_backgrnd_create( WIDTH, HEIGHT, RL_BACKGRND_EXACT ) != 0 )
  {
    log_cb( RETRO_LOG_ERROR, "Error creating the framebuffer\n" );
    return false;
  }
  
  rl_backgrnd_clear( RL_COLOR( 64, 64, 64 ) );
  
  if ( rl_imgdata_create( &state.imgdata, res_smile_png, sizeof( res_smile_png ) ) != 0 )
  {
    log_cb( RETRO_LOG_ERROR, "Error loading image smile.png\n" );
error1:
    rl_backgrnd_destroy();
    return false;
  }
  
  if ( rl_image_create( &state.image, &state.imgdata, 0, 0 ) != 0 )
  {
    log_cb( RETRO_LOG_ERROR, "Error creating RLE-image\n" );
error2:
    rl_imgdata_destroy( &state.imgdata );
    goto error1;
  }
  
  for ( unsigned i = 0; i < COUNT; i++ )
  {
    rl_sprite_t* sprite = rl_sprite_create();
    
    if ( sprite == NULL )
    {
      log_cb( RETRO_LOG_ERROR, "Error creating sprite %u of %u\n", i, COUNT );
error3:
      rl_image_destroy( &state.image );
      
      for ( i = 0; i < COUNT; i++ )
      {
        if ( state.smiles[ i ].sprite != NULL )
        {
          rl_sprite_destroy( state.smiles[ i ].sprite );
        }
      }
      
      goto error2;
    }
    
    sprite->x = rand() % ( WIDTH - state.imgdata.width + 1 );
    sprite->y = rand() % ( HEIGHT - state.imgdata.height + 1 );
    sprite->layer = i;
    sprite->image = &state.image;
    
    state.smiles[ i ].sprite = sprite;
    state.smiles[ i ].dx = rand() & 1 ? -1 : 1;
    state.smiles[ i ].dy = rand() & 1 ? -1 : 1;
  }
  
  state.music = rl_sound_play_ogg( res_sketch008_ogg, sizeof( res_sketch008_ogg ), 1, NULL );
  
  if ( state.music == NULL )
  {
    log_cb( RETRO_LOG_ERROR, "Error loading music sketch008.ogg\n" );
    goto error3;
  }
  
  if ( rl_snddata_create( &state.snddata, res_bounce_wav, sizeof( res_bounce_wav ) ) != 0 )
  {
    log_cb( RETRO_LOG_ERROR, "Error loading wave bounce.wav\n" );
error4:
    rl_sound_stop( state.music );
    goto error3;
  }
  
  if ( rl_sound_create( &state.sound, &state.snddata ) != 0 )
  {
    log_cb( RETRO_LOG_ERROR, "Error creating PCM data\n" );
//error5:
    rl_snddata_destroy( &state.snddata );
    goto error4;
  }
  
  return true;
}