Newer
Older
cneboy_games / test / test.c
#include <client_api.h>
pbm_t* player;
pbm_t* player_out;

#define TL 1
#define TC 2
#define TR 3

#define CL 4
#define CC 5
#define CR 6

#define BL 7
#define BC 8
#define BR 9

pbm_t* bg[9];

int grid[10][9];

#define OUTLINE 2

int setup(int a)
{
    player = f_bitmap("/player.pbm");
    player_out = d_expand_bitmap(player, OUTLINE, true);

    for (int i = 0; i < 9; i++)
    {
        char bg_path[20];
        sprintf(bg_path, "/bg%d.pbm", (i + 1));
        bg[i] = f_bitmap(bg_path);
    }

    memset(grid, 0, sizeof(grid));

    grid[0][0] = 1;
    for (int i = 1; i < 9; i++) grid[i][0] = 2;
    grid[9][0] = 3;

    for (int i = 1; i < 8; i++) grid[0][i] = 4;
    for (int i = 1; i < 8; i++) grid[9][i] = 6;

    grid[0][8] = 7;
    for (int i = 1; i < 9; i++) grid[i][8] = 8;
    grid[9][8] = 9;

    for (int i = 0; i < 9; i++)
    {
        grid[random(1, 9)][random(1, 8)] = 5;
    }

    return 0;
}

float x = 0;
float y = 0;
int rot = 0;

float speed = 80;

bool flipX = false, flipY = false;

void d_pbm_outline(int16_t x, int16_t y, pbm_t* pbm)
{
    for (int i = x - 1; i <= x + 1; i++)
    {
        for (int j = y - 1; j <= y + 1; j++)
        {
            d_pbm(i, j, pbm, 0, 0, 0, 0, WHITE, TRANSPARENT, R_NONE, false, false);
        }
    }
}


int loop(int ms)
{
    d_clear();

    for (int i = 0; i < 10; i++)
    {
        for (int j = 0; j < 9; j++)
        {
            if (grid[i][j] != 0)
            {
                d_pbm(4 + i * 16, j * 16, bg[grid[i][j] - 1], 0,0,0,0, BLACK, TRANSPARENT, R_NONE, false, false);
            }
        }
    }


    d_pbm((uint16_t)roundf(x) - OUTLINE, (uint16_t)roundf(y) - OUTLINE, player_out, 0, 0, 0, 0, WHITE, TRANSPARENT, rot, flipX, flipY);
    d_pbm((uint16_t)roundf(x), (uint16_t)roundf(y), player, 0, 0, 0, 0, BLACK, TRANSPARENT, rot, flipX, flipY);

    if (button_pressed(BUTTON_A))
    {
        rot = (rot + 1) % 4;
    }
    if (button_pressed(BUTTON_B))
    {
        flipX = !flipX;
        if (!flipX)
        {
            flipY = !flipY;
        }
        printf("Flip: %d %d\n", flipX, flipY);
    }

    float t = ms / 1000.0f;
    if (button_down(DPAD_RIGHT)) x += t * speed;
    if (button_down(DPAD_LEFT)) x -= t * speed;
    if (button_down(DPAD_DOWN)) y += t * speed;
    if (button_down(DPAD_UP)) y -= t * speed;
    return 0;
}