New UI in battle, adaptative monster size, faster camera
|
@ -58,9 +58,11 @@ set(ASSETS_cg
|
|||
assets-cg/tileset.png
|
||||
assets-cg/inventory.png
|
||||
assets-cg/categories.png
|
||||
assets-cg/contours.png
|
||||
assets-cg/dialogue.png
|
||||
assets-cg/capacite.png
|
||||
assets-cg/battle_ui.png
|
||||
assets-cg/battle_env_1.png
|
||||
assets-cg/maps/inside/tileset_in.png
|
||||
assets-cg/maps/testCarte.json
|
||||
assets-cg/maps/1.json
|
||||
|
|
After Width: | Height: | Size: 75 KiB |
After Width: | Height: | Size: 75 KiB |
Before Width: | Height: | Size: 17 KiB After Width: | Height: | Size: 15 KiB |
After Width: | Height: | Size: 397 B |
|
@ -332,6 +332,8 @@ def convert_monster(input, output, params, target):
|
|||
monster = fxconv.Structure()
|
||||
monster += fxconv.string(data["name"])
|
||||
monster += fxconv.ptr(f"img_{data['sprite']}")
|
||||
monster += fxconv.u32(data["sprite_x"])
|
||||
monster += fxconv.u32(data["sprite_y"])
|
||||
monster += fxconv.u32(data["id"])
|
||||
monster += fxconv.u32(len(data["moves"]))
|
||||
monster += fxconv.ptr(stats)
|
||||
|
|
|
@ -28,6 +28,16 @@ capacite.png:
|
|||
categories.png:
|
||||
type: bopti-image
|
||||
name: img_categories
|
||||
profile: p4
|
||||
|
||||
contours.png:
|
||||
type: bopti-image
|
||||
name: img_contours
|
||||
profile: p4
|
||||
|
||||
battle_env_1.png:
|
||||
type: bopti-image
|
||||
name: img_battle_env_1
|
||||
profile: p4
|
||||
|
||||
battle_ui.png:
|
||||
|
|
|
@ -1,6 +1,9 @@
|
|||
{
|
||||
"name":"test",
|
||||
"sprite":"test",
|
||||
"sprite_x":100,
|
||||
"sprite_y":85,
|
||||
|
||||
"id":1,
|
||||
"type":"Labélisateur",
|
||||
"stats":{
|
||||
|
|
|
@ -1,6 +1,9 @@
|
|||
{
|
||||
"name":"Citron",
|
||||
"name":"Banane",
|
||||
"sprite":"test2",
|
||||
"sprite_x":109,
|
||||
"sprite_y":111,
|
||||
|
||||
"id":2,
|
||||
"type":"Modérateur",
|
||||
"stats":{
|
||||
|
|
Before Width: | Height: | Size: 2.6 KiB After Width: | Height: | Size: 1.3 KiB |
|
@ -9,6 +9,8 @@
|
|||
struct Monster {
|
||||
char *name;
|
||||
bopti_image_t *sprite;
|
||||
int sprite_x;
|
||||
int sprite_y;
|
||||
int id;
|
||||
int nbMoves;
|
||||
struct Stats *stats;
|
||||
|
|
17
src/battle.c
|
@ -156,7 +156,6 @@ int select_move(struct Player *player, struct Monster *monster, int prec_selecte
|
|||
dclear(C_RGB(25,25,25));
|
||||
draw_battle(player, monster);
|
||||
draw_ui(player, selection);
|
||||
dtext(58 + (selection * 130), DHEIGHT-15 , C_RED, "[X]");
|
||||
dupdate();
|
||||
|
||||
if(keydown(KEY_OPTN)) {
|
||||
|
@ -179,16 +178,18 @@ int select_move(struct Player *player, struct Monster *monster, int prec_selecte
|
|||
|
||||
void draw_battle(struct Player *player, struct Monster *monster) {
|
||||
extern bopti_image_t img_battle;
|
||||
extern bopti_image_t img_battle_env_1;
|
||||
const int WIDTH_HP = 74;
|
||||
|
||||
if(player->stats.pv < 0) player->stats.pv = 0;
|
||||
if(monster->stats->pv < 0) monster->stats->pv = 0;
|
||||
|
||||
dclear(C_RGB(25,25,25));
|
||||
// dclear(C_RGB(25,25,25));
|
||||
dimage(0,0,&img_battle_env_1);
|
||||
drect(323, 120, DWIDTH, 125, getTypeFromName(player->stats.type).color);
|
||||
dimage(0,0,&img_battle);
|
||||
int posHP = (float)player->stats.pv / player->stats.max_pv * WIDTH_HP;
|
||||
drect(290,138,290+WIDTH_HP,142,C_WHITE);
|
||||
drect(290,143,290+WIDTH_HP,147,C_WHITE);
|
||||
|
||||
int pcolor = (player->stats.pv <= player->stats.max_pv/2 ?
|
||||
(player->stats.pv <= player->stats.max_pv/4 ?
|
||||
|
@ -196,10 +197,10 @@ void draw_battle(struct Player *player, struct Monster *monster) {
|
|||
C_RGB(31,17,0)) :
|
||||
C_GREEN);
|
||||
|
||||
drect(290,138,290+posHP,142,pcolor);
|
||||
drect(290,143,290+posHP,147,pcolor);
|
||||
|
||||
dprint(333,124,C_BLACK,"%d",player->stats.level);
|
||||
dprint(256,122,C_BLACK,"%d/%d", player->stats.pv, player->stats.max_pv);
|
||||
dprint(333,129,C_BLACK,"%d",player->stats.level);
|
||||
dprint(256,127,C_BLACK,"%d/%d", player->stats.pv, player->stats.max_pv);
|
||||
|
||||
int posHPmonster = (float)monster->stats->pv / monster->stats->max_pv * WIDTH_HP;
|
||||
dprint(2,8,C_BLACK,"%s",monster->name);
|
||||
|
@ -215,8 +216,8 @@ void draw_battle(struct Player *player, struct Monster *monster) {
|
|||
dprint(90,9,C_BLACK,"%d",monster->stats->level);
|
||||
dprint(127,11,C_BLACK,"%d/%d", monster->stats->pv, monster->stats->max_pv);
|
||||
drect(0,0,84,4,getTypeFromName(monster->stats->type).color);
|
||||
|
||||
dimage(265,10,monster->sprite);
|
||||
|
||||
dimage((int)(253+((133-monster->sprite_x)/2)),6+(116-monster->sprite_y), monster->sprite);
|
||||
}
|
||||
|
||||
void draw_executed_move(struct Move *move, struct Monster *monster, int is_monster) {
|
||||
|
|
|
@ -13,6 +13,6 @@ struct Camera camera_new(struct Vec2f *target) {
|
|||
}
|
||||
|
||||
void camera_update(struct Camera *c) {
|
||||
c->pos = vec2f_lerp(c->pos, *c->target, 0.08);
|
||||
c->pos = vec2f_lerp(c->pos, *c->target, 0.1);
|
||||
c->offset = vec2f_vec2(c->pos);
|
||||
}
|
|
@ -52,10 +52,11 @@ struct Move *copy_move(struct Move move) {
|
|||
void draw_move(int x, int y, int x2, int y2, struct Move *move, int selected) {
|
||||
extern bopti_image_t img_capacite;
|
||||
extern bopti_image_t img_categories;
|
||||
extern bopti_image_t img_contours;
|
||||
|
||||
const int font_size = 8;
|
||||
if(!selected) draw_change_one_color(x, y, &img_capacite, 0xE6D6, getTypeFromName(move->type).color);
|
||||
else draw_change_one_color(x, y, &img_capacite, 0xE6D6, 0x0FE0);
|
||||
draw_change_one_color(x, y, &img_capacite, 0xE6D6, getTypeFromName(move->type).color);
|
||||
if(selected) dimage(x, y, &img_contours);
|
||||
dsubimage(x+96, y+7, &img_categories, 20*move->categorie, 0, 20, 10, DIMAGE_NONE);
|
||||
|
||||
int color = move->pp > 0 ? C_BLACK : C_RED;
|
||||
|
|
|
@ -26,10 +26,10 @@ void engine_draw(struct Game const *game) {
|
|||
dclear(game->background);
|
||||
engine_draw_map(game);
|
||||
engine_draw_player(game);
|
||||
drect(0,0,DWIDTH,20,C_BLACK);
|
||||
/*drect(0,0,DWIDTH,20,C_BLACK);
|
||||
drect(0,DHEIGHT-20,DWIDTH,DHEIGHT,C_BLACK);
|
||||
drect(0,0,20,DHEIGHT,C_BLACK);
|
||||
drect(DWIDTH-20,0,DWIDTH,DHEIGHT,C_BLACK);
|
||||
drect(DWIDTH-20,0,DWIDTH,DHEIGHT,C_BLACK);*/
|
||||
|
||||
dprint(1,1,C_WHITE,"%d:%d",game->player->pos.x, game->player->pos.y);
|
||||
dprint(1,20,C_WHITE,"%d",game->player->sprint);
|
||||
|
@ -43,7 +43,7 @@ void engine_draw_map(struct Game const *game) {
|
|||
const int tileset_size = game->map->tileset_size;
|
||||
|
||||
for (int y = 0 ; y <= DHEIGHT / TILE_SIZE; y++) {
|
||||
for (int x = 0 ; x <= DWIDTH / TILE_SIZE; x++) {
|
||||
for (int x = 0 ; x <= DWIDTH / TILE_SIZE+1; x++) {
|
||||
for (int layer = 0 ; layer < game->map->nb_layers; layer++) {
|
||||
unsigned int tile_id = 0;
|
||||
//detect if the map is oob
|
||||
|
|
|
@ -82,6 +82,9 @@ struct Monster *copyMonster(struct Monster *source) {
|
|||
dest->name = source->name;
|
||||
dest->nbMoves = source->nbMoves;
|
||||
dest->sprite = source->sprite;
|
||||
dest->sprite_x = source->sprite_x;
|
||||
dest->sprite_y = source->sprite_y;
|
||||
|
||||
dest->id = source->id;
|
||||
|
||||
dest->moves = malloc(dest->nbMoves * sizeof *source->moves);
|
||||
|
|
|
@ -203,7 +203,7 @@ void draw_ui(struct Player *player, int curr_select) {
|
|||
int index = get_nb_moves(player);
|
||||
|
||||
for(int i = 0; i < index; i++) {
|
||||
draw_special_move(2+132*i,DHEIGHT-70, player->moves[i], i == curr_select);
|
||||
draw_special_move(2+132*i,DHEIGHT-65, player->moves[i], i == curr_select);
|
||||
}
|
||||
}
|
||||
|
||||
|
|