/********************************** Compose select cursor **********************************/ static void compose_select(context_t * ctx) { item_t * item; anim_t * anim; int pos_tx; int pos_ty; int x; int y; context_t * selected_context = NULL; /* Tile selection */ if( option && option->cursor_tile ) { if( ctx->selection.map[0] != 0) { if( !strcmp(ctx->selection.map, ctx->map) ) { pos_tx = ctx->selection.map_coord[0]; pos_ty = ctx->selection.map_coord[1]; if( pos_tx != -1 && pos_ty != -1) { anim = imageDB_get_anim(ctx,option->cursor_tile); item = item_list_add(&item_list); /* get pixel coordinate from tile coordinate */ x = map_t2p_x(pos_tx,pos_ty,default_layer); y = map_t2p_y(pos_tx,pos_ty,default_layer); item_set_pos(item,x,y); item_set_anim(item,anim,0); } } } } /* Sprite selection */ if( option && option->cursor_sprite ) { if( ctx->selection.id[0] != 0) { selected_context = context_find(ctx->selection.id); if( selected_context == NULL ) { return; } set_up_sprite(selected_context, option->cursor_sprite); } } }
/********************************** Draw the "list" keyword of a layer **********************************/ static void compose_map_scenery(context_t * ctx, int layer_index) { int i = 0; int x = 0; int y = 0; char * image_name = NULL; anim_t * anim; item_t * item; char ** scenery_list = NULL; char layer_name[SMALL_BUF]; sprintf(layer_name,"%s%d",MAP_KEY_LAYER,layer_index); if(entry_get_group_list(MAP_TABLE, ctx->map, &scenery_list,layer_name,MAP_KEY_SCENERY,NULL) == RET_NOK ) { return; } while(scenery_list[i] != NULL ) { if(entry_read_int(MAP_TABLE, ctx->map, &x,layer_name,MAP_KEY_SCENERY,scenery_list[i],MAP_KEY_SCENERY_X,NULL) == RET_NOK ) { i++; continue; } if(entry_read_int(MAP_TABLE, ctx->map, &y,layer_name,MAP_KEY_SCENERY,scenery_list[i],MAP_KEY_SCENERY_Y,NULL) == RET_NOK ) { i++; continue; } if(entry_read_string(MAP_TABLE, ctx->map, &image_name,layer_name,MAP_KEY_SCENERY,scenery_list[i],MAP_KEY_SCENERY_IMAGE,NULL) == RET_NOK ) { i++; continue; } anim = imageDB_get_anim(ctx,image_name); item = item_list_add(&item_list); item_set_pos(item, x, y); item_set_anim(item,anim,0); //item_set_anim(item, x*ctx->tile_width, y*ctx->tile_height, anim,0); i++; } deep_free(scenery_list); }
/********************************** Draw the "set" keyword of a layer **********************************/ static void compose_map_set(context_t * ctx, int layer_index) { int i = 0; int x = 0; int y = 0; anim_t * anim; item_t * item; char ** tile_set = NULL; char layer_name[SMALL_BUF]; layer_t * layer; sprintf(layer_name,"%s%d",MAP_KEY_LAYER,layer_index); if(entry_read_list(MAP_TABLE, ctx->map, &tile_set,layer_name,MAP_KEY_SET,NULL) == RET_NOK ) { return; } layer = map_layer_new(ctx->map,layer_index,default_layer); while(tile_set[i] != NULL ) { /* Skip empty tile */ if( tile_set[i][0] != 0 ) { item = item_list_add(&item_list); anim = imageDB_get_anim(ctx,tile_set[i]); item_set_pos(item,map_t2p_x(x,y,layer),map_t2p_y(x,y,layer)); item_set_anim(item,anim,0); } x++; if(x>=layer->map_w) { x=0; y++; } i++; } deep_free(tile_set); map_layer_delete(layer); }
static int draw_tile(game_t * game) { int tile_x,tile_y; int index; item_t * item_cur; int num_tile_w = ORIGINAL_GAME_WIDTH/TILE_SIZE_W ; int num_tile_h = ORIGINAL_GAME_HEIGHT/TILE_SIZE_H +2 ; int x,y; int count_w; int count_h; int tile_index; if( item_tile == NULL ) { item_tile = (item_t*)malloc(sizeof(item_t)*game->map->width*game->map->height); } index=0; for( count_w = -num_tile_w/2; count_w < num_tile_w/2; count_w ++) { for( count_h=(-num_tile_h/2); count_h<num_tile_h/2; count_h++) { tile_y=cur_tile_y+count_h; if(tile_y < 0 || tile_y >= game->map->height) { continue; } tile_x=(cur_tile_x+game->map->width+count_w)%game->map->width; item_cur = &item_tile[index]; item_init(item_cur); x=orig_x+(count_w*TILE_SIZE_W); y=orig_y+(count_h*TILE_SIZE_H); tile_index=game->map->side[cur_side].tile[tile_x][tile_y]; item_set_anim(item_cur,x,y,&tile[tile_index]); item_set_click_right(item_cur,cb_move_map,(void*)(((intptr_t)tile_x<<16)+(intptr_t)tile_y)); index++; } } return index; }
/********************************** Compose item on map **********************************/ static void compose_item(context_t * ctx,int layer_index) { char * sprite_name = NULL; int sprite_align = ALIGN_CENTER; int sprite_offset_y = 0; anim_t * anim; item_t * item; int x; int y; int temp_x; int temp_y; char ** item_id; int i; static TTF_Font * font = NULL; char * mytemplate; int quantity; char buf[SMALL_BUF]; char layer_name[SMALL_BUF]; sprintf(layer_name,"%s%d",MAP_KEY_LAYER,layer_index); if(entry_get_group_list(MAP_TABLE,ctx->map,&item_id,layer_name,MAP_ENTRY_ITEM_LIST,NULL) == RET_NOK ) { return; } font = font_get(ctx,ITEM_FONT, ITEM_FONT_SIZE); i=0; while( item_id[i] != NULL ) { sprite_align = ALIGN_CENTER; if(entry_read_int(MAP_TABLE,ctx->map,&x,layer_name,MAP_ENTRY_ITEM_LIST,item_id[i],MAP_ITEM_POS_X,NULL) == RET_NOK ) { i++; continue; } if(entry_read_int(MAP_TABLE,ctx->map,&y,layer_name,MAP_ENTRY_ITEM_LIST,item_id[i],MAP_ITEM_POS_Y,NULL) == RET_NOK ) { i++; continue; } mytemplate = item_is_resource(item_id[i]); if ( mytemplate == NULL ) { if(entry_read_string(ITEM_TABLE,item_id[i],&sprite_name,ITEM_SPRITE,NULL) == RET_NOK ) { i++; continue; } entry_read_int(ITEM_TABLE,item_id[i],&sprite_align,ITEM_ALIGN,NULL); entry_read_int(ITEM_TABLE,item_id[i],&sprite_offset_y,ITEM_OFFSET_Y,NULL); } else { if(entry_read_string(ITEM_TEMPLATE_TABLE,mytemplate,&sprite_name,ITEM_SPRITE,NULL) == RET_NOK ) { free(mytemplate); i++; continue; } entry_read_int(ITEM_TEMPLATE_TABLE,mytemplate,&sprite_align,ITEM_ALIGN,NULL); entry_read_int(ITEM_TEMPLATE_TABLE,mytemplate,&sprite_offset_y,ITEM_OFFSET_Y,NULL); free(mytemplate); } item = item_list_add(&item_list); anim = imageDB_get_anim(ctx,sprite_name); free(sprite_name); temp_x = map_t2p_x(x,y,default_layer); temp_y = map_t2p_y(x,y,default_layer); x = temp_x; y = temp_y; /* Align on tile */ if( sprite_align == ALIGN_CENTER ) { x -= ((anim->w*default_layer->map_zoom)-default_layer->tile_width)/2; y -= ((anim->h*default_layer->map_zoom)-default_layer->tile_height)/2; } if( sprite_align == ALIGN_LOWER ) { x -= ((anim->w*default_layer->map_zoom)-default_layer->tile_width)/2; y -= (anim->h*default_layer->map_zoom)-default_layer->tile_height; } y += sprite_offset_y; item_set_pos(item,x,y); item_set_anim(item,anim,0); item_set_zoom_x(item, default_layer->map_zoom ); item_set_zoom_y(item, default_layer->map_zoom ); if(font) { quantity = resource_get_quantity(item_id[i]); sprintf(buf,"%d",quantity); item_set_string(item,buf); item_set_font(item,font); } i++; } deep_free(item_id); }