Merge branch 'dev' of git.planet-casio.com:Slyvtt/Collab_RPG into dev

This commit is contained in:
mibi88 2024-08-01 17:57:35 +02:00
commit 755ed1a1a8
7 changed files with 47 additions and 37 deletions

View file

@ -1,7 +1,7 @@
#include <gint/display.h>
#include "animation.h" #include "animation.h"
#include <gint/display.h>
void animation_new(Animation *animation, bopti_image_t *image, void animation_new(Animation *animation, bopti_image_t *image,
unsigned char len, unsigned short frame_ms) { unsigned char len, unsigned short frame_ms) {
animation->image = image; animation->image = image;
@ -9,21 +9,21 @@ void animation_new(Animation *animation, bopti_image_t *image,
animation->len = len; animation->len = len;
animation->frame_ms = frame_ms; animation->frame_ms = frame_ms;
animation->current_ms = 0; animation->current_ms = 0;
animation->width = image->width/len; animation->width = image->width / len;
animation->height = image->height; animation->height = image->height;
animation->wrap_dest = 0; animation->wrap_dest = 0;
} }
void animation_draw(Animation *animation, int x, int y) { void animation_draw(Animation *animation, int x, int y) {
dsubimage(x, y, animation->image, animation->frame*animation->width, 0, dsubimage(x, y, animation->image, animation->frame * animation->width, 0,
animation->width, animation->height, DIMAGE_NONE); animation->width, animation->height, DIMAGE_NONE);
} }
void animation_update(Animation *animation, unsigned short frame_ms) { void animation_update(Animation *animation, unsigned short frame_ms) {
animation->current_ms += frame_ms; animation->current_ms += frame_ms;
while(animation->current_ms > animation->frame_ms){ while(animation->current_ms > animation->frame_ms) {
animation->frame++; animation->frame++;
if(animation->frame >= animation->len){ if(animation->frame >= animation->len) {
animation->frame = animation->wrap_dest; animation->frame = animation->wrap_dest;
} }
animation->current_ms -= animation->frame_ms; animation->current_ms -= animation->frame_ms;

View file

@ -196,16 +196,14 @@ void game_get_inputs(Game *game) {
if(keydown(KEY_F1)) { if(keydown(KEY_F1)) {
NPC *mynpc = npc_create(); NPC *mynpc = npc_create();
if(mynpc) { if(mynpc) {
mynpc->curx = player->x; mynpc->curx = (player->x << PRECISION) / PXSIZE;
mynpc->cury = player->y; mynpc->cury = (player->y << PRECISION) / PXSIZE;
mynpc->x = 0; mynpc->x = player->x;
mynpc->y = 0; mynpc->y = player->x;
mynpc->hasPath = 0; mynpc->hasPath = 0;
mynpc->face = 0; mynpc->face = 0;
mynpc->paused = 0; mynpc->paused = 0;
mynpc->has_dialog = 0; mynpc->has_dialog = 0;
dprint(0, 50, 0, "succes");
dupdate();
} }
} }

View file

@ -1,11 +1,11 @@
#ifndef GAME_H #ifndef GAME_H
#define GAME_H #define GAME_H
#include "animation.h"
#include "events.h" #include "events.h"
#include <gint/display.h> #include <gint/display.h>
#include <stdint.h> #include <stdint.h>
#include "animation.h"
/* The direction where the player is going to. */ /* The direction where the player is going to. */
typedef enum { D_UP, D_DOWN, D_LEFT, D_RIGHT } Direction; typedef enum { D_UP, D_DOWN, D_LEFT, D_RIGHT } Direction;
@ -73,7 +73,8 @@ typedef struct {
} Sign; } Sign;
typedef struct { typedef struct {
/* current coordinates of the NPC */ /* current coordinates of the NPC
* In 24:8 fixed point */
uint32_t curx; uint32_t curx;
uint32_t cury; uint32_t cury;

View file

@ -32,22 +32,31 @@
extern Map *worldRPG[]; extern Map *worldRPG[];
/* Game data (defined in "game.h")*/ /* Game data (defined in "game.h")*/
Game game = { Game game = {NULL,
NULL, {12 * PXSIZE,
{12 * PXSIZE, 36 * PXSIZE, 0, 0, 100, SPEED, false, 0, false, false, true, 36 * PXSIZE,
{}}, 0,
{{}, {}, 0}, 0,
false, 100,
false, SPEED,
false, false,
0, 0,
false,
false,
true,
{}},
{{}, {}, 0},
false,
false,
false,
0,
/* debug variables*/ /* debug variables*/
false, false,
false, false,
false, false,
{}, {},
100}; 100};
/* screen capture management code. TODO: Clean this up! */ /* screen capture management code. TODO: Clean this up! */

View file

@ -180,8 +180,8 @@ void map_render_by_layer(Game *game, int layer) {
for(x = 0; x < dw; x++) { for(x = 0; x < dw; x++) {
/* I get the tile number if his position is inside the map. Then /* I get the tile number if his position is inside the map. Then
* I draw it. */ * I draw it. */
if(tx + x >= 0 && tx + x < map_level->w && ty + y >= 0 && if((tx + x >= 0) && (tx + x < (int)map_level->w) && (ty + y >= 0) &&
ty + y < map_level->h) { (ty + y < (int)map_level->h)) {
/* index of the current tile */ /* index of the current tile */
int currentIndex = (y + ty) * map_level->w + tx + x; int currentIndex = (y + ty) * map_level->w + tx + x;
/* we get the ID of the tile in the current drawable layers /* we get the ID of the tile in the current drawable layers

View file

@ -60,9 +60,9 @@ int npc_append_path(uint16_t x, uint16_t y, NPC *npc) {
npc->ypath = realloc(npc->ypath, npc->path_length * 2 + 2); npc->ypath = realloc(npc->ypath, npc->path_length * 2 + 2);
if(npc->xpath == NULL || npc->ypath == NULL) if(npc->xpath == NULL || npc->ypath == NULL)
return 1; return 1;
npc->xpath[npc->path_length] = x - npc->x;
npc->ypath[npc->path_length] = y - npc->y;
npc->path_length++; npc->path_length++;
npc->xpath[npc->path_length - 1] = x - npc->x;
npc->ypath[npc->path_length - 1] = y - npc->y;
return 0; return 0;
} }
@ -292,7 +292,8 @@ void npc_draw_single(NPC *npc, Game *game) {
int16_t delY = ((npc->cury * PXSIZE) >> PRECISION) - (int16_t)pl->y; int16_t delY = ((npc->cury * PXSIZE) >> PRECISION) - (int16_t)pl->y;
game->npc_animation.image = npc_sprites[npc->face]; game->npc_animation.image = npc_sprites[npc->face];
unsigned char frame = game->npc_animation.frame; unsigned char frame = game->npc_animation.frame;
if(npc->paused || !npc->hasPath) game->npc_animation.frame = 0; if(npc->paused || !npc->hasPath)
game->npc_animation.frame = 0;
animation_draw(&game->npc_animation, pl->px - P_WIDTH / 2 + delX, animation_draw(&game->npc_animation, pl->px - P_WIDTH / 2 + delX,
pl->py - P_HEIGHT / 2 + delY); pl->py - P_HEIGHT / 2 + delY);
game->npc_animation.frame = frame; game->npc_animation.frame = frame;
@ -300,6 +301,7 @@ void npc_draw_single(NPC *npc, Game *game) {
void npc_draw(Game *game) { void npc_draw(Game *game) {
uint32_t u; uint32_t u;
for(u = 0; u < game->map_level->nbNPC; u++) { for(u = 0; u < game->map_level->nbNPC; u++) {
npc_draw_single(&game->map_level->npcs[u], game); npc_draw_single(&game->map_level->npcs[u], game);
} }

View file

@ -47,11 +47,11 @@ void player_draw(Game *game) {
Player *player = &game->player; Player *player = &game->player;
clearevents(); clearevents();
if(!keydown(KEY_LEFT) && !keydown(KEY_RIGHT) && !keydown(KEY_UP) && if(!keydown(KEY_LEFT) && !keydown(KEY_RIGHT) && !keydown(KEY_UP) &&
!keydown(KEY_DOWN)){ !keydown(KEY_DOWN)) {
game->player.animation.frame = 0; game->player.animation.frame = 0;
} }
player->animation.image = player->is_male ? &player_male_img : player->animation.image =
&player_female_img; player->is_male ? &player_male_img : &player_female_img;
animation_draw(&player->animation, player->px - P_WIDTH / 2, animation_draw(&player->animation, player->px - P_WIDTH / 2,
player->py - P_HEIGHT / 2); player->py - P_HEIGHT / 2);
} }