WIP: Moved graphic calls to gfx.

This commit is contained in:
Saffron
2023-07-12 18:02:52 +02:00
parent 0c48d83743
commit dbbc24a11a
12 changed files with 132 additions and 101 deletions

Binary file not shown.

View File

@@ -7,8 +7,6 @@
#include <string.h>
#include "fusion-c/header/msx_fusion.h"
#include "fusion-c/header/vdp_sprites.h"
#include "fusion-c/header/vdp_graph2.h"
#include "main.h"
#include "font.h"
@@ -85,18 +83,18 @@ void sr_draw_page_two(void)
// #WIP this is a mockup.
void sr_draw_charcreation_intro_text(void)
{
sr_set_drawing_state(Begin);
sr_set_drawing_state(BEGIN);
Cls();
SetColors(0, 0, 14);
// Portrait.
// LMMV(8, 8 + get_active_page() * SCREEN_WIDTH, 34, 34, 15, 0);
// LMMV(1+8, 1+8 + get_active_page() * SCREEN_WIDTH, 32, 32, 3, 0);
// LMMV(8, 8 + get_active_page() * SCREEN_HEIGHT, 34, 34, 15, 0);
// LMMV(1+8, 1+8 + get_active_page() * SCREEN_HEIGHT, 32, 32, 3, 0);
sr_draw_page_one();
sr_set_drawing_state(End);
sr_set_drawing_state(END);
}
void sr_set_charcreation_state(void)

View File

@@ -7,8 +7,6 @@
#include <string.h>
#include "fusion-c/header/msx_fusion.h"
#include "fusion-c/header/vdp_sprites.h"
#include "fusion-c/header/vdp_graph2.h"
#include "encounter.h"

View File

@@ -205,7 +205,7 @@
void sr_draw_char_src_to_dst(uint src_x, uint src_y, uint dst_x, uint dst_y, uchar log_op)
{
sr_page_copy(FONT_OFFSET_X + src_x, FONT_OFFSET_Y + src_y, FONT_SIZE, FONT_SIZE, dst_x, dst_y, FONT_PAGE, sr_get_active_page(), log_op);
sr_page_copy_mode(FONT_OFFSET_X + src_x, FONT_OFFSET_Y + src_y, FONT_SIZE, FONT_SIZE, dst_x, dst_y, FONT_PAGE, sr_get_active_page(), log_op);
}
void sr_draw_char(uchar character, uint x, uint y, uchar log_op)

View File

@@ -202,6 +202,30 @@ bool sr_load_sc8_image(uchar *file_name, uint initial_y_pos)
return (true);
}
// Helper: Copy a page zone to another page using YMMM (high-speed transfer between VRAM in Y direction).
void sr_page_copy_y_fast( int XS, int YS, int DY, int NY, char DiRX)
{
// High speed copy of a part of iage to another Y position (DY) Block to move start at XS,YS, is NY pixels hight, and end at x=255 or x=0 depending of parameter DirX 1 or 0
YMMM( XS, YS, DY, NY, DiRX);
}
// Helper: Copy a page zone to another page using HMMM (High Speed Move VRAM to VRAM).
void sr_page_copy_fast(uint x1, uint y1, uint dx, uint dy, uint x2, uint y2, uint src_pg, uint dst_pg)
{
sr_page_copy_mode(x1, y1, dx, dy, x2, y2, src_pg, dst_pg, opHMMM);
}
void sr_page_copy(uint x1, uint y1, uint dx, uint dy, uint x2, uint y2, uint src_pg, uint dst_pg)
{
sr_page_copy_mode(x1, y1, dx, dy, x2, y2, src_pg, dst_pg, 0);
}
// Helper: Copy a page zone to another page using transparency (if SC>0 then IMP).
void sr_page_copy_trans(uint x1, uint y1, uint dx, uint dy, uint x2, uint y2, uint src_pg, uint dst_pg)
{
sr_page_copy_mode(x1, y1, dx, dy, x2, y2, src_pg, dst_pg, LOGICAL_TIMP);
}
// Copy a page zone to another page
// x1 & y1 =Top left coordonate pixel of the zone to copy
// dx = Width Size in pixels, of the zone to copy
@@ -210,17 +234,16 @@ bool sr_load_sc8_image(uchar *file_name, uint initial_y_pos)
// src_pg = Source Page number of the Zone
// dst_pg = Destination number of the zone
// mode = OP mode of the copy
void sr_page_copy(uint x1, uint y1, uint dx, uint dy, uint x2, uint y2,
uint src_pg, uint dst_pg, uchar mode)
void sr_page_copy_mode(uint x1, uint y1, uint dx, uint dy, uint x2, uint y2, uint src_pg, uint dst_pg, uchar mode)
{
uint src_y = 0;
uint dst_y = 0;
// Add page offset.
src_y += src_pg * SCREEN_WIDTH;
src_y += src_pg * SCREEN_HEIGHT;
// Add page offset.
dst_y += dst_pg * SCREEN_WIDTH;
dst_y += dst_pg * SCREEN_HEIGHT;
t.X = x1;
t.Y = src_y + y1;
@@ -238,6 +261,16 @@ void sr_page_copy(uint x1, uint y1, uint dx, uint dy, uint x2, uint y2,
fLMMM(&t);
}
void sr_draw_rectangle(int x, int y, int width, int height, char color)
{
LMMV(x, y, width, height, color, 0);
}
void sr_draw_pixel(int x, int y, char color)
{
Pset(x, y, color, 0);
}
void sr_debug_draw_palette(void)
{
uint x = 0;
@@ -298,23 +331,23 @@ void sr_init_gfx(void)
// Load images.
sr_init_palette();
sr_load_sf5_image("BG.SF5", SCREEN_WIDTH * SPRITES_PAGE);
sr_load_sf5_image("WALLS.SF5", SCREEN_WIDTH * WALLS_PAGE);
sr_load_sf5_image("BG.SF5", SCREEN_HEIGHT * SPRITES_PAGE);
sr_load_sf5_image("WALLS.SF5", SCREEN_HEIGHT * WALLS_PAGE);
// Reset current screen.
Cls();
// Initialize drawing state and pages.
sr_set_drawing_state(Ready);
SetDisplayPage(0);
SetActivePage(0);
sr_set_drawing_state(READY);
sr_set_active_page(0);
sr_set_display_page(0);
}
bool sr_update_gfx(void)
{
// Checking game is not drawing and VDP is not busy and vsync.
// https://www.msx.org/wiki/VDP_Status_Registers
if (sr_get_drawing_state() != End || sr_is_vdp_ready() == false || IsVsync() == 0)
if (sr_get_drawing_state() != END || sr_is_vdp_ready() == false || IsVsync() == 0)
{
return (false);
}

View File

@@ -11,6 +11,7 @@
// Defines.
//------------------------------------------------------------------
#define SCREEN_HEIGHT 256
#define SCREEN_WIDTH 256
#define SCREEN_WIDTH_HALF 128
@@ -22,9 +23,9 @@
enum DrawingState
{
Ready,
Begin,
End
READY,
BEGIN,
END
};
enum ScreenHeight
@@ -44,7 +45,13 @@ uint sr_get_display_page(void);
void sr_init_palette(void);
bool sr_load_sf5_image(uchar *file_name, uint start_Y);
bool sr_load_sc8_image(uchar *file_name, uint start_Y);
void sr_page_copy(uint x1, uint y1, uint dx, uint dy, uint x2, uint y2, uint src_pg, uint dst_pg, uchar mode);
void sr_page_copy_fast(uint x1, uint y1, uint dx, uint dy, uint x2, uint y2, uint src_pg, uint dst_pg);
void sr_page_copy_y_fast( int XS, int YS, int DY, int NY, char DiRX);
void sr_page_copy(uint x1, uint y1, uint dx, uint dy, uint x2, uint y2, uint src_pg, uint dst_pg);
void sr_page_copy_trans(uint x1, uint y1, uint dx, uint dy, uint x2, uint y2, uint src_pg, uint dst_pg);
void sr_page_copy_mode(uint x1, uint y1, uint dx, uint dy, uint x2, uint y2, uint src_pg, uint dst_pg, uchar mode);
void sr_draw_rectangle(int x, int y, int width, int height, char color);
void sr_draw_pixel(int x, int y, char color);
void sr_wait(uint cicles);
void sr_set_drawing_state(uchar new_state);
uchar sr_get_drawing_state(void);

View File

@@ -7,8 +7,6 @@
#include <string.h>
#include "fusion-c/header/msx_fusion.h"
#include "fusion-c/header/vdp_sprites.h"
#include "fusion-c/header/vdp_graph2.h"
#include "procgen.h"
#include "gfx.h"
@@ -44,90 +42,90 @@ uchar joy;
void sr_draw_third_wall_far_left(uint offset_left, uint offset_right)
{
sr_page_copy(THIRD_WALL_FAR_LEFT_X + offset_left, THIRD_WALL_FAR_LEFT_Y,
sr_page_copy_trans(THIRD_WALL_FAR_LEFT_X + offset_left, THIRD_WALL_FAR_LEFT_Y,
THIRD_WALL_FAR_DX - offset_left - offset_right, THIRD_WALL_FAR_DY,
offset_left,
(LEVEL_SCREEN_DY - THIRD_WALL_FAR_DY) * 0.5,
WALLS_PAGE, BACKBUFFER_PAGE, LOGICAL_TIMP);
WALLS_PAGE, BACKBUFFER_PAGE);
}
void sr_draw_third_wall_far_right(uint offset_left, uint offset_right)
{
sr_page_copy(THIRD_WALL_FAR_RIGHT_X + offset_left, THIRD_WALL_FAR_RIGHT_Y,
sr_page_copy_trans(THIRD_WALL_FAR_RIGHT_X + offset_left, THIRD_WALL_FAR_RIGHT_Y,
THIRD_WALL_FAR_DX - offset_left - offset_right, THIRD_WALL_FAR_DY,
LEVEL_SCREEN_DX - THIRD_WALL_FAR_DX + offset_left,
(LEVEL_SCREEN_DY - THIRD_WALL_FAR_DY) * 0.5,
WALLS_PAGE, BACKBUFFER_PAGE, LOGICAL_TIMP);
WALLS_PAGE, BACKBUFFER_PAGE);
}
void sr_draw_third_wall_left(uint offset_left, uint offset_right)
{
sr_page_copy(THIRD_WALL_LEFT_X + offset_left, THIRD_WALL_LEFT_Y,
sr_page_copy_trans(THIRD_WALL_LEFT_X + offset_left, THIRD_WALL_LEFT_Y,
THIRD_WALL_DX - offset_left - offset_right, THIRD_WALL_DY,
THIRD_WALL_OFFSET_X + offset_left,
(LEVEL_SCREEN_DY - THIRD_WALL_DY) * 0.5,
WALLS_PAGE, BACKBUFFER_PAGE, LOGICAL_TIMP);
WALLS_PAGE, BACKBUFFER_PAGE);
}
void sr_draw_third_wall_right(uint offset_left, uint offset_right)
{
sr_page_copy(THIRD_WALL_RIGHT_X + offset_left, THIRD_WALL_RIGHT_Y,
sr_page_copy_trans(THIRD_WALL_RIGHT_X + offset_left, THIRD_WALL_RIGHT_Y,
THIRD_WALL_DX - offset_left - offset_right, THIRD_WALL_DY,
LEVEL_SCREEN_DX - THIRD_WALL_DX - THIRD_WALL_OFFSET_X + offset_left,
(LEVEL_SCREEN_DY - THIRD_WALL_DY) * 0.5,
WALLS_PAGE, BACKBUFFER_PAGE, LOGICAL_TIMP);
WALLS_PAGE, BACKBUFFER_PAGE);
}
void sr_draw_second_wall_far_left(void)
{
sr_page_copy(SECOND_WALL_FAR_LEFT_X, SECOND_WALL_FAR_LEFT_Y,
sr_page_copy_trans(SECOND_WALL_FAR_LEFT_X, SECOND_WALL_FAR_LEFT_Y,
SECOND_WALL_FAR_DX, SECOND_WALL_FAR_DY,
0,
(LEVEL_SCREEN_DY - SECOND_WALL_FAR_DY) * 0.5,
WALLS_PAGE, BACKBUFFER_PAGE, LOGICAL_TIMP);
WALLS_PAGE, BACKBUFFER_PAGE);
}
void sr_draw_second_wall_far_right(void)
{
sr_page_copy(SECOND_WALL_FAR_RIGHT_X, SECOND_WALL_FAR_RIGHT_Y,
sr_page_copy_trans(SECOND_WALL_FAR_RIGHT_X, SECOND_WALL_FAR_RIGHT_Y,
SECOND_WALL_FAR_DX, SECOND_WALL_FAR_DY,
LEVEL_SCREEN_DX - SECOND_WALL_FAR_DX,
(LEVEL_SCREEN_DY - SECOND_WALL_FAR_DY) * 0.5,
WALLS_PAGE, BACKBUFFER_PAGE, LOGICAL_TIMP);
WALLS_PAGE, BACKBUFFER_PAGE);
}
void sr_draw_second_wall_left(uint offset_left, uint offset_right)
{
sr_page_copy(SECOND_WALL_LEFT_X + offset_left, SECOND_WALL_LEFT_Y,
sr_page_copy_trans(SECOND_WALL_LEFT_X + offset_left, SECOND_WALL_LEFT_Y,
SECOND_WALL_DX - offset_left - offset_right, SECOND_WALL_DY,
offset_left,
(LEVEL_SCREEN_DY - SECOND_WALL_DY) * 0.5,
WALLS_PAGE, BACKBUFFER_PAGE, LOGICAL_TIMP);
WALLS_PAGE, BACKBUFFER_PAGE);
}
void sr_draw_second_wall_right(uint offset_left, uint offset_right)
{
sr_page_copy(SECOND_WALL_RIGHT_X + offset_left, SECOND_WALL_RIGHT_Y,
sr_page_copy_trans(SECOND_WALL_RIGHT_X + offset_left, SECOND_WALL_RIGHT_Y,
SECOND_WALL_DX - offset_left - offset_right, SECOND_WALL_DY,
LEVEL_SCREEN_DX - SECOND_WALL_DX + offset_left,
(LEVEL_SCREEN_DY - SECOND_WALL_DY) * 0.5,
WALLS_PAGE, BACKBUFFER_PAGE, LOGICAL_TIMP);
WALLS_PAGE, BACKBUFFER_PAGE);
}
void sr_draw_first_wall_left(void)
{
sr_page_copy(FIRST_WALL_LEFT_X, FIRST_WALL_LEFT_Y,
sr_page_copy_trans(FIRST_WALL_LEFT_X, FIRST_WALL_LEFT_Y,
FIRST_WALL_DX, FIRST_WALL_DY,
0, 0,
WALLS_PAGE, BACKBUFFER_PAGE, LOGICAL_TIMP);
WALLS_PAGE, BACKBUFFER_PAGE);
}
void sr_draw_first_wall_right(void)
{
sr_page_copy(FIRST_WALL_RIGHT_X, FIRST_WALL_RIGHT_Y,
sr_page_copy_trans(FIRST_WALL_RIGHT_X, FIRST_WALL_RIGHT_Y,
FIRST_WALL_DX, FIRST_WALL_DY,
LEVEL_SCREEN_DX - FIRST_WALL_DX, 0,
WALLS_PAGE, BACKBUFFER_PAGE, LOGICAL_TIMP);
WALLS_PAGE, BACKBUFFER_PAGE);
}
void sr_draw_third_wall_front(void)
@@ -136,7 +134,7 @@ void sr_draw_third_wall_front(void)
THIRD_FRONT_WALL_DX, THIRD_FRONT_WALL_DY,
(LEVEL_SCREEN_DX - THIRD_FRONT_WALL_DX) * 0.5,
(LEVEL_SCREEN_DY - THIRD_FRONT_WALL_DY) * 0.5,
WALLS_PAGE, BACKBUFFER_PAGE, LOGICAL_IMP);
WALLS_PAGE, BACKBUFFER_PAGE);
}
void sr_draw_second_wall_front(void)
@@ -145,7 +143,7 @@ void sr_draw_second_wall_front(void)
SECOND_FRONT_WALL_DX, SECOND_FRONT_WALL_DY,
(LEVEL_SCREEN_DX - SECOND_FRONT_WALL_DX) * 0.5,
(LEVEL_SCREEN_DY - SECOND_FRONT_WALL_DY) * 0.5,
WALLS_PAGE, BACKBUFFER_PAGE, LOGICAL_IMP);
WALLS_PAGE, BACKBUFFER_PAGE);
}
// This is the view area:
@@ -258,24 +256,24 @@ void sr_draw_fp_view(void)
if (ceiling_tile == 1)
{
// Draw Standard background minus the floor.
sr_page_copy(0, 0,
sr_page_copy_fast(0, 0,
LEVEL_SCREEN_DX, LEVEL_SCREEN_DY - 22,
0, 0,
SPRITES_PAGE, BACKBUFFER_PAGE, opHMMM);
SPRITES_PAGE, BACKBUFFER_PAGE);
// Draw alternate floor.
sr_page_copy(0, 120,
sr_page_copy_fast(0, 120,
LEVEL_SCREEN_DX, 22,
0, 98,
SPRITES_PAGE, BACKBUFFER_PAGE, opHMMM);
SPRITES_PAGE, BACKBUFFER_PAGE);
}
else
{
// Draw standard background in full.
sr_page_copy(0, 0,
sr_page_copy_fast(0, 0,
LEVEL_SCREEN_DX, LEVEL_SCREEN_DY,
0, 0,
SPRITES_PAGE, BACKBUFFER_PAGE, opHMMM);
SPRITES_PAGE, BACKBUFFER_PAGE);
}
// Front walls.
@@ -521,17 +519,17 @@ void sr_draw_tiles_screen_background(void)
{
for (uint y = 0; y < 8; y++)
{
sr_page_copy(232, 188,
sr_page_copy_fast(232, 188,
24, 24,
x * 24, y * 24,
SPRITES_PAGE, sr_get_active_page(), opHMMM);
SPRITES_PAGE, sr_get_active_page());
}
}
// Draw menu background in one solid color.
LMMV(MENU_X, MENU_Y + sr_get_active_page() * SCREEN_WIDTH,
sr_draw_rectangle(MENU_X, MENU_Y + sr_get_active_page() * SCREEN_HEIGHT,
MENU_DX, MENU_DY,
0, 0);
0);
}
void sr_draw_portraits(void)
@@ -543,25 +541,25 @@ void sr_draw_portraits(void)
sr_draw_text("Echo", PORTRAIT_4_NAME_X, PORTRAIT_4_NAME_Y, 15, 0);
// Portraits.
sr_page_copy(PORTRAIT_SRC_X, PORTRAIT_SRC_Y,
sr_page_copy_fast(PORTRAIT_SRC_X, PORTRAIT_SRC_Y,
PORTRAIT_SIZE, PORTRAIT_SIZE,
PORTRAIT_1_X, PORTRAIT_1_Y,
SPRITES_PAGE, sr_get_active_page(), opHMMM);
SPRITES_PAGE, sr_get_active_page());
sr_page_copy(PORTRAIT_SRC_X, PORTRAIT_SRC_Y + PORTRAIT_SIZE,
sr_page_copy_fast(PORTRAIT_SRC_X, PORTRAIT_SRC_Y + PORTRAIT_SIZE,
PORTRAIT_SIZE, PORTRAIT_SIZE,
PORTRAIT_2_X, PORTRAIT_2_Y,
SPRITES_PAGE, sr_get_active_page(), opHMMM);
SPRITES_PAGE, sr_get_active_page());
sr_page_copy(PORTRAIT_SRC_X, PORTRAIT_SRC_Y + PORTRAIT_SIZE + PORTRAIT_SIZE,
sr_page_copy_fast(PORTRAIT_SRC_X, PORTRAIT_SRC_Y + PORTRAIT_SIZE + PORTRAIT_SIZE,
PORTRAIT_SIZE, PORTRAIT_SIZE,
PORTRAIT_3_X, PORTRAIT_3_Y,
SPRITES_PAGE, sr_get_active_page(), opHMMM);
SPRITES_PAGE, sr_get_active_page());
sr_page_copy(PORTRAIT_SRC_X, PORTRAIT_SRC_Y + PORTRAIT_SIZE + PORTRAIT_SIZE + PORTRAIT_SIZE,
sr_page_copy_fast(PORTRAIT_SRC_X, PORTRAIT_SRC_Y + PORTRAIT_SIZE + PORTRAIT_SIZE + PORTRAIT_SIZE,
PORTRAIT_SIZE, PORTRAIT_SIZE,
PORTRAIT_4_X, PORTRAIT_4_Y,
SPRITES_PAGE, sr_get_active_page(), opHMMM);
SPRITES_PAGE, sr_get_active_page());
// HP text.
sr_draw_text("10/12", PORTRAIT_1_NAME_X + PORTRAIT_SIZE + 1, PORTRAIT_1_NAME_Y + 8, 15, 0);
@@ -570,11 +568,11 @@ void sr_draw_portraits(void)
sr_draw_text("9/9", PORTRAIT_4_NAME_X + PORTRAIT_SIZE + 1, PORTRAIT_4_NAME_Y + 8, 15, 0);
// // HP bars.
// LMMV(HP_BAR_1_X, HP_BAR_1_Y + get_active_page() * SCREEN_WIDTH,
// LMMV(HP_BAR_1_X, HP_BAR_1_Y + get_active_page() * SCREEN_HEIGHT,
// HP_BAR_SIZE_X, HP_BAR_SIZE_Y, 11, 0);
// LMMV(HP_BAR_2_X, HP_BAR_2_Y + get_active_page() * SCREEN_WIDTH,
// LMMV(HP_BAR_2_X, HP_BAR_2_Y + get_active_page() * SCREEN_HEIGHT,
// HP_BAR_SIZE_X, HP_BAR_SIZE_Y, 11, 0);
// LMMV(HP_BAR_3_X, HP_BAR_3_Y + get_active_page() * SCREEN_WIDTH,
// LMMV(HP_BAR_3_X, HP_BAR_3_Y + get_active_page() * SCREEN_HEIGHT,
// HP_BAR_SIZE_X, HP_BAR_SIZE_Y, 11, 0);
}
@@ -634,9 +632,6 @@ void sr_debug_draw_test_menu(void)
// menu_y += FONT_SIZE + MENU_Y_SPACE;
// sr_draw_text(" Refuse", MENU_X, menu_y, MENU_TEXT_DEFAULT_COLOR, 0);
/**************************************************************************/
// #SPRITE #WIP
PutSprite(0, 0, MENU_X-8, menu_y, 0);
}
void sr_debug_draw_minimap(void)
@@ -648,22 +643,22 @@ void sr_debug_draw_minimap(void)
if (player_pos_x == x && player_pos_y == y)
{
// Player.
Pset(x + 20, y + 160 + sr_get_active_page() * SCREEN_WIDTH, 11, 0);
sr_draw_pixel(x + 20, y + 160 + sr_get_active_page() * SCREEN_HEIGHT, 11);
}
else if (level_map[x + y * LEVEL_SIZE] == TILE_STAIRS)
{
// Stairs.
Pset(x + 20, y + 160 + sr_get_active_page() * SCREEN_WIDTH, 9, 0);
sr_draw_pixel(x + 20, y + 160 + sr_get_active_page() * SCREEN_HEIGHT, 9);
}
else if (level_map[x + y * LEVEL_SIZE] == TILE_WALL)
{
// Wall.
Pset(x + 20, y + 160 + sr_get_active_page() * SCREEN_WIDTH, 3, 0);
sr_draw_pixel(x + 20, y + 160 + sr_get_active_page() * SCREEN_HEIGHT, 3);
}
else
{
// Floor.
Pset(x + 20, y + 160 + sr_get_active_page() * SCREEN_WIDTH, 7, 0);
sr_draw_pixel(x + 20, y + 160 + sr_get_active_page() * SCREEN_HEIGHT, 7);
}
}
}
@@ -672,7 +667,7 @@ void sr_debug_draw_minimap(void)
// Draw the current level room.
void sr_draw_level_screen(void)
{
sr_set_drawing_state(Begin);
sr_set_drawing_state(BEGIN);
// #WIP Screen background test.
//sr_draw_tiles_screen_background();
@@ -709,14 +704,14 @@ void sr_draw_level_screen(void)
sr_draw_fp_view();
// #WIP Enemies.
//sr_page_copy(175,192, 50,60, 30,60, SPRITES_PAGE, get_active_page(), LOGICAL_TIMP);
//sr_page_copy_trans(175,192, 50,60, 30,60, SPRITES_PAGE, get_active_page());
// sr_page_copy(224,224, 32,32, 50,80, SPRITES_PAGE, get_active_page(), LOGICAL_TIMP);
// sr_page_copy(224,192, 32,32, 90,80, SPRITES_PAGE, get_active_page(), LOGICAL_TIMP);
// sr_page_copy_trans(224,224, 32,32, 50,80, SPRITES_PAGE, get_active_page());
// sr_page_copy_trans(224,192, 32,32, 90,80, SPRITES_PAGE, get_active_page());
// // hit frame test.
// sr_page_copy(224,224, 32,32, 50,80, SPRITES_PAGE, get_active_page(), LOGICAL_TNOT);
// sr_page_copy(224,192, 32,32, 90,80, SPRITES_PAGE, get_active_page(), LOGICAL_TNOT);
// sr_page_copy_mode(224,224, 32,32, 50,80, SPRITES_PAGE, get_active_page(), LOGICAL_TNOT);
// sr_page_copy_mode(224,192, 32,32, 90,80, SPRITES_PAGE, get_active_page(), LOGICAL_TNOT);
// // #WIP Test encounter RNG.
// if(sr_check_encounter() == true)
@@ -728,7 +723,7 @@ void sr_draw_level_screen(void)
// sr_draw_text("NOTHING ", 0, 0, 5, 0);
// }
sr_set_drawing_state(End);
sr_set_drawing_state(END);
}
void sr_move(uint new_pos_x, uint new_pos_y)
@@ -818,6 +813,11 @@ void sr_set_ingame_state(void)
// This may be set by the random generator in the future?
player_dir = NORTH;
// Initialize drawing state and pages.
sr_set_drawing_state(READY);
sr_set_active_page(0);
sr_set_display_page(0);
// Generate level.
SetColors(0,0,0);
Cls();
@@ -853,8 +853,11 @@ void sr_update_ingame_state(void)
void sr_finished_ingame_drawing(void)
{
// Copy finished drawing of the first person view from back to front.
sr_page_copy(0, 0,
LEVEL_SCREEN_DX, LEVEL_SCREEN_DY,
LEVEL_SCREEN_X, LEVEL_SCREEN_Y,
BACKBUFFER_PAGE, sr_get_active_page(), opHMMM);
sr_page_copy_y_fast(LEVEL_SCREEN_DX, SCREEN_HEIGHT, LEVEL_SCREEN_Y, LEVEL_SCREEN_DY, 1);
// sr_page_copy_fast(0, 0,
// LEVEL_SCREEN_DX, LEVEL_SCREEN_DY,
// LEVEL_SCREEN_X, LEVEL_SCREEN_Y,
// BACKBUFFER_PAGE, sr_get_active_page());
}

View File

@@ -7,8 +7,6 @@
#include <string.h>
#include "fusion-c/header/msx_fusion.h"
#include "fusion-c/header/vdp_sprites.h"
#include "fusion-c/header/vdp_graph2.h"
#include "main.h"
#include "font.h"

View File

@@ -50,7 +50,7 @@ void sr_set_game_state(uchar new_state)
void sr_update_game_state(void)
{
// Player input must wait until the next frame is ready.
if (sr_get_drawing_state() == Ready)
if (sr_get_drawing_state() == READY)
{
switch (game_state)
{
@@ -79,10 +79,10 @@ static uchar sr_interrupt(void)
// Checking game is not drawing and VDP is not busy.
// https://www.msx.org/wiki/VDP_Status_Registers
if (sr_get_drawing_state() == End && sr_is_vdp_ready())
if (sr_get_drawing_state() == END && sr_is_vdp_ready())
{
// Update video.
sr_set_drawing_state(Ready);
sr_set_drawing_state(READY);
switch (game_state)
{
@@ -132,7 +132,7 @@ void main(void)
SetInterruptHandler(sr_interrupt);
// Set initial game state.
sr_set_game_state(START_SCREEN);
sr_set_game_state(IN_GAME);
for (;;)
{

View File

@@ -7,8 +7,6 @@
#include <string.h>
#include "fusion-c/header/msx_fusion.h"
#include "fusion-c/header/vdp_sprites.h"
#include "fusion-c/header/vdp_graph2.h"
#include "main.h"
#include "menu.h"

View File

@@ -7,8 +7,6 @@
#include <string.h>
#include "fusion-c/header/msx_fusion.h"
#include "fusion-c/header/vdp_sprites.h"
#include "fusion-c/header/vdp_graph2.h"
#include "main.h"
#include "ingame.h"

View File

@@ -7,8 +7,6 @@
#include <string.h>
#include "fusion-c/header/msx_fusion.h"
#include "fusion-c/header/vdp_sprites.h"
#include "fusion-c/header/vdp_graph2.h"
#include "main.h"
#include "font.h"
@@ -25,13 +23,13 @@ void sr_draw_startscr_intro_text(void)
Cls();
// Load the title screen.
sr_load_sf5_image("STRTSCR.SF5", SCREEN_WIDTH * TITLE_PAGE);
sr_load_sf5_image("STRTSCR.SF5", SCREEN_HEIGHT * TITLE_PAGE);
// Set active page.
sr_set_active_page(TITLE_PAGE);
// Begin drawing.
sr_set_drawing_state(Begin);
sr_set_drawing_state(BEGIN);
// Intro text.
SetColors(0, 0, 14);
@@ -40,7 +38,7 @@ void sr_draw_startscr_intro_text(void)
sr_draw_text("@ 2023 SAFFRON SOFT", FONT_SIZE * 6, FONT_SIZE * 18, 15, 14);
// Finish drawing.
sr_set_drawing_state(End);
sr_set_drawing_state(END);
}
void sr_set_startscr_state(void)