mirror of
https://github.com/luksamuk/engine-psx.git
synced 2025-04-28 13:28:02 +03:00
Improve R5 background, add water waves
This commit is contained in:
parent
4b386f2127
commit
bc659e5a38
9 changed files with 131 additions and 54 deletions
Binary file not shown.
Binary file not shown.
Before Width: | Height: | Size: 20 KiB After Width: | Height: | Size: 20 KiB |
Binary file not shown.
Before Width: | Height: | Size: 137 KiB After Width: | Height: | Size: 139 KiB |
Binary file not shown.
Binary file not shown.
Before Width: | Height: | Size: 6.4 KiB After Width: | Height: | Size: 6.8 KiB |
|
@ -10,7 +10,7 @@
|
|||
36,0,0,0,0,0,2,4,45,50,46,2,4,0,0,0,0,0,9,0,0,0,0,0,0,0,0,0,8,44,14,14,14,14,51,49,2,2,2,36,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
36,20,0,8,0,8,10,13,13,13,13,13,10,16,22,8,0,24,27,26,0,0,0,0,0,0,0,0,3,4,2,2,2,2,4,40,2,2,4,36,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
34,19,17,37,3,3,3,3,13,13,12,3,3,2,23,3,3,28,25,3,6,0,0,0,0,0,0,0,30,31,31,47,32,32,33,0,10,0,10,0,20,0,0,0,0,0,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
2,2,2,2,2,2,2,4,13,13,51,51,51,13,13,2,2,2,2,2,5,17,21,53,21,22,9,0,29,13,13,13,2,4,2,35,37,35,37,35,19,27,27,27,3,0,0,0,0,15,0,0,0,0,2,2,2,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
2,2,2,2,2,2,2,4,13,55,51,51,51,13,13,2,2,2,2,2,5,17,21,53,21,22,9,0,29,13,13,13,2,4,2,35,37,35,37,35,19,27,27,27,3,0,0,0,0,15,0,0,0,0,2,2,2,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
4,2,2,2,2,2,2,2,37,37,4,2,2,11,14,51,38,0,0,0,2,2,2,2,2,23,3,3,19,54,54,3,5,2,4,36,38,0,38,48,44,13,13,13,10,20,0,0,0,33,0,0,0,53,51,14,13,51,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,37,6,8,0,0,0,0,0,0,0,0,0,0,0,53,5,2,2,2,19,3,3,3,3,43,11,39,12,3,19,3,52,3,2,52,52,3,2,2,2,3,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,37,3,37,37,3,3,37,37,3,3,2,2,2,2,2,2,2,2,2,2,2,2,40,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
|
|
|
@ -118,4 +118,25 @@ v0 = 256
|
|||
scrollx = 0.3
|
||||
speedx = 0
|
||||
y0 = 274
|
||||
single = false
|
||||
single = false
|
||||
|
||||
[water_stream1]
|
||||
width = 256
|
||||
height = 130
|
||||
u0 = 0
|
||||
v0 = 110
|
||||
scrollx = 0
|
||||
speedx = 0.8
|
||||
y0 = 180
|
||||
single = false
|
||||
|
||||
|
||||
[water_stream2]
|
||||
width = 256
|
||||
height = 130
|
||||
u0 = 0
|
||||
v0 = 110
|
||||
scrollx = 0
|
||||
speedx = 0.8
|
||||
y0 = 310
|
||||
single = false
|
||||
|
|
|
@ -107,14 +107,14 @@
|
|||
18,35,35,19,0,0,157,158,126,127,126,160,160,160,160,127,22,143,143,23,22,23,157,158,22,23,157,158,20,21,157,158,
|
||||
6,7,6,7,0,0,157,158,110,159,159,111,110,111,110,111,6,7,6,7,4,5,157,158,4,5,157,158,6,7,157,158,
|
||||
22,23,22,23,0,0,22,23,126,160,160,127,126,127,126,127,22,23,22,23,20,21,22,23,20,21,22,23,22,23,22,23,
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
0,0,0,0,0,0,2,3,110,111,110,111,110,111,173,174,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
0,0,0,0,0,0,157,158,173,174,126,127,126,127,173,174,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
2,17,17,3,0,0,157,158,173,174,110,111,110,111,173,174,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
18,35,35,19,18,19,157,158,126,127,126,127,126,127,126,127,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
6,7,6,7,4,5,157,158,110,111,110,159,159,159,159,111,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
22,23,22,23,20,21,22,23,126,127,126,160,160,160,160,127,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,110,159,159,111,110,111,110,111,0,0,0,0,0,0,0,0,
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,126,160,160,127,126,127,173,174,0,0,0,0,0,0,0,0,
|
||||
0,0,0,0,0,0,2,3,110,111,110,111,110,111,173,174,110,111,110,111,110,111,173,174,0,0,0,0,0,0,0,0,
|
||||
0,0,0,0,0,0,157,158,173,174,126,127,126,127,173,174,173,174,126,127,173,174,126,127,0,0,0,0,0,0,0,0,
|
||||
2,17,17,3,0,0,157,158,173,174,110,111,110,111,173,174,173,174,110,111,173,174,110,188,0,0,0,0,0,0,0,0,
|
||||
18,35,35,19,18,19,157,158,126,127,126,127,126,127,126,127,126,127,126,127,126,127,203,27,0,0,0,0,0,0,0,0,
|
||||
6,7,6,7,4,5,157,158,110,111,110,159,159,159,159,111,110,159,159,111,110,188,6,7,0,0,0,0,0,0,0,0,
|
||||
22,23,22,23,20,21,22,23,126,127,126,160,160,160,160,127,126,160,160,127,203,27,22,23,0,0,0,0,0,0,0,0
|
||||
</data>
|
||||
</layer>
|
||||
<layer id="4" name="oneway" width="32" height="112" opacity="0.4">
|
||||
|
|
|
@ -283,6 +283,105 @@ screen_level_update(void *d)
|
|||
}
|
||||
}
|
||||
|
||||
void
|
||||
_screen_level_draw_water(screen_level_data *)
|
||||
{
|
||||
if(level_water_y >= 0) {
|
||||
int32_t camera_bottom = camera.pos.vy + (CENTERY << 12);
|
||||
|
||||
if(camera_bottom > level_water_y) {
|
||||
int32_t water_vh = camera_bottom - level_water_y;
|
||||
uint16_t water_rh = water_vh >> 12;
|
||||
uint16_t water_h = MIN(water_rh, SCREEN_YRES);
|
||||
int16_t water_y = MAX(0, SCREEN_YRES - water_h);
|
||||
int16_t water_ry = SCREEN_YRES - water_rh;
|
||||
|
||||
// Draw water overlay
|
||||
{
|
||||
POLY_G4 *poly = get_next_prim();
|
||||
increment_prim(sizeof(POLY_G4));
|
||||
setPolyG4(poly);
|
||||
setXYWH(poly, 0, water_y, SCREEN_XRES, water_h);
|
||||
setSemiTrans(poly, 1);
|
||||
setRGB0(poly,
|
||||
LERPC(level_fade, 31),
|
||||
LERPC(level_fade, 36),
|
||||
LERPC(level_fade, 121));
|
||||
setRGB1(poly,
|
||||
LERPC(level_fade, 31),
|
||||
LERPC(level_fade, 36),
|
||||
LERPC(level_fade, 121));
|
||||
setRGB2(poly,
|
||||
LERPC(level_fade, 25),
|
||||
LERPC(level_fade, 12),
|
||||
LERPC(level_fade, 64));
|
||||
setRGB3(poly,
|
||||
LERPC(level_fade, 25),
|
||||
LERPC(level_fade, 12),
|
||||
LERPC(level_fade, 64));
|
||||
|
||||
/* POLY_F4 *poly = get_next_prim(); */
|
||||
/* increment_prim(sizeof(POLY_F4)); */
|
||||
/* setPolyF4(poly); */
|
||||
/* setXYWH(poly, 0, water_y, SCREEN_XRES, water_h); */
|
||||
/* setSemiTrans(poly, 1); */
|
||||
/* setRGB0(poly, */
|
||||
/* LERPC(level_fade, 31), */
|
||||
/* LERPC(level_fade, 36), */
|
||||
/* LERPC(level_fade, 121)); */
|
||||
|
||||
sort_prim(poly, OTZ_LAYER_LEVEL_FG_FRONT);
|
||||
}
|
||||
|
||||
// Draw water waves
|
||||
{
|
||||
static uint8_t wave_dir = 0;
|
||||
static uint8_t wave_visible = 1;
|
||||
|
||||
uint32_t frame = get_global_frames();
|
||||
|
||||
if(!(frame % 6)) wave_dir = !wave_dir;
|
||||
if(!(frame % 3)) wave_visible = !wave_visible;
|
||||
|
||||
// Water wave sprites is within common objects texture.
|
||||
// uv0 = (146, 183); wh=(64, 9)
|
||||
// Sprite plays for 20 frames and then flips direction
|
||||
for(uint16_t i = 0; i < 6; i++) {
|
||||
uint16_t x = i * 64;
|
||||
|
||||
uint8_t current_visible = (i + wave_visible) % 2;
|
||||
|
||||
POLY_FT4 *poly = get_next_prim();
|
||||
increment_prim(sizeof(POLY_FT4));
|
||||
setPolyFT4(poly);
|
||||
setRGB0(poly, level_fade, level_fade, level_fade);
|
||||
// There is some sort of trickery here.
|
||||
// Rendering the waves actually influence on
|
||||
// water color. We render the waves as a fully
|
||||
// transparent pixel when invisible so
|
||||
// the body of water doesn't blink
|
||||
if(!current_visible)
|
||||
setUVWH(poly, 0, 0, 0, 0);
|
||||
else if(wave_dir)
|
||||
setUVWH(poly, 146, 183, 64, 9);
|
||||
else setUV4(poly,
|
||||
146 + 63, 183,
|
||||
146, 183,
|
||||
146 + 63, 183 + 9,
|
||||
146, 183 + 9);
|
||||
setXYWH(poly, x, water_ry - 6, 64, 9);
|
||||
// tpage and clut same as common objects
|
||||
poly->tpage = getTPage(1, 0, 576, 0);
|
||||
poly->clut = getClut(0, 481);
|
||||
setSemiTrans(poly, 1);
|
||||
sort_prim(poly, OTZ_LAYER_LEVEL_FG_FRONT);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
screen_level_draw(void *d)
|
||||
{
|
||||
|
@ -293,50 +392,7 @@ screen_level_draw(void *d)
|
|||
// When things are drawn on the same otz, anything drawn first
|
||||
// is shown on front, as the ordering table is drawn backwards.
|
||||
|
||||
// Draw water
|
||||
if(level_water_y >= 0) {
|
||||
int32_t camera_bottom = camera.pos.vy + (CENTERY << 12);
|
||||
|
||||
if(camera_bottom > level_water_y) {
|
||||
int32_t water_vh = camera_bottom - level_water_y;
|
||||
uint16_t water_h = MIN(water_vh >> 12, SCREEN_YRES);
|
||||
uint16_t water_y = MAX(0, SCREEN_YRES - water_h);
|
||||
|
||||
POLY_G4 *poly = get_next_prim();
|
||||
increment_prim(sizeof(POLY_G4));
|
||||
setPolyG4(poly);
|
||||
setXYWH(poly, 0, water_y, SCREEN_XRES, water_h);
|
||||
setSemiTrans(poly, 1);
|
||||
setRGB0(poly,
|
||||
LERPC(level_fade, 31),
|
||||
LERPC(level_fade, 36),
|
||||
LERPC(level_fade, 121));
|
||||
setRGB1(poly,
|
||||
LERPC(level_fade, 31),
|
||||
LERPC(level_fade, 36),
|
||||
LERPC(level_fade, 121));
|
||||
setRGB2(poly,
|
||||
LERPC(level_fade, 25),
|
||||
LERPC(level_fade, 12),
|
||||
LERPC(level_fade, 64));
|
||||
setRGB3(poly,
|
||||
LERPC(level_fade, 25),
|
||||
LERPC(level_fade, 12),
|
||||
LERPC(level_fade, 64));
|
||||
|
||||
/* POLY_F4 *poly = get_next_prim(); */
|
||||
/* increment_prim(sizeof(POLY_F4)); */
|
||||
/* setPolyF4(poly); */
|
||||
/* setXYWH(poly, 0, water_y, SCREEN_XRES, water_h); */
|
||||
/* setSemiTrans(poly, 1); */
|
||||
/* setRGB0(poly, */
|
||||
/* LERPC(level_fade, 31), */
|
||||
/* LERPC(level_fade, 36), */
|
||||
/* LERPC(level_fade, 121)); */
|
||||
|
||||
sort_prim(poly, OTZ_LAYER_LEVEL_FG_FRONT);
|
||||
}
|
||||
}
|
||||
_screen_level_draw_water(data);
|
||||
|
||||
// Draw player
|
||||
if(abs((player.pos.vx - camera.pos.vx) >> 12) <= SCREEN_XRES
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue