2020-11-06 14:56:32 +01:00
|
|
|
#include "pch.h"
|
|
|
|
#include "render.h"
|
|
|
|
|
2020-11-08 16:37:59 +01:00
|
|
|
#include "memory.h"
|
|
|
|
|
2020-11-06 14:56:32 +01:00
|
|
|
int render::blit = 0;
|
2020-11-08 16:37:59 +01:00
|
|
|
int render::many_dirty, render::many_sprites, render::many_balls;
|
|
|
|
render_sprite_type_struct **render::dirty_list = new render_sprite_type_struct*[1000], **render::sprite_list = new
|
|
|
|
render_sprite_type_struct* [1000], **render::ball_list = new render_sprite_type_struct* [
|
|
|
|
1000];
|
|
|
|
zmap_header_type* render::background_zmap;
|
|
|
|
int render::zmap_offset, render::zmap_offsetY;
|
2020-11-06 14:56:32 +01:00
|
|
|
|
|
|
|
void render::update()
|
|
|
|
{
|
|
|
|
}
|
2020-11-07 16:41:14 +01:00
|
|
|
|
|
|
|
|
|
|
|
void render::paint()
|
|
|
|
{
|
|
|
|
/*render_paint_balls();
|
|
|
|
gdrv_blat((int)&vscreen, xDest, yDest);
|
|
|
|
render_unpaint_balls();*/
|
2020-11-08 16:37:59 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
int render::sprite_modified(render_sprite_type_struct* sprite)
|
|
|
|
{
|
|
|
|
int result = 0; // eax
|
|
|
|
|
|
|
|
if (sprite->VisualType == VisualType::Ball)
|
|
|
|
return result;
|
|
|
|
result = many_dirty;
|
|
|
|
if (many_dirty < 999)
|
|
|
|
dirty_list[many_dirty++] = sprite;
|
|
|
|
return result;
|
|
|
|
}
|
|
|
|
|
|
|
|
render_sprite_type_struct* render::create_sprite(VisualType visualType, gdrv_bitmap8* rootBmp8, zmap_header_type* zMap,
|
|
|
|
int xPosition, int yPosition, visual_rect* rect)
|
|
|
|
{
|
|
|
|
render_sprite_type_struct* sprite = (render_sprite_type_struct*)memory::allocate(0x5Cu);
|
|
|
|
render_sprite_type_struct* result = nullptr;
|
|
|
|
if (!sprite)
|
|
|
|
return result;
|
|
|
|
sprite->YPosition = yPosition;
|
|
|
|
sprite->RootBmp8 = rootBmp8;
|
|
|
|
sprite->XPosition = xPosition;
|
|
|
|
sprite->VisualType = visualType;
|
|
|
|
sprite->Unknown6_0 = 0;
|
|
|
|
sprite->Unknown17 = 0;
|
|
|
|
sprite->Unknown18 = 0;
|
|
|
|
if (rect)
|
|
|
|
{
|
|
|
|
sprite->Rect = *rect;
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
sprite->Rect.Width = -1;
|
|
|
|
sprite->Rect.Height = -1;
|
|
|
|
sprite->Rect.XPosition = 0;
|
|
|
|
sprite->Rect.YPosition = 0;
|
|
|
|
}
|
|
|
|
if (rootBmp8)
|
|
|
|
{
|
|
|
|
sprite->Bmp8Width = rootBmp8->Width;
|
|
|
|
sprite->Bmp8Height = rootBmp8->Height;
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
sprite->Bmp8Width = 0;
|
|
|
|
sprite->Bmp8Height = 0;
|
|
|
|
}
|
|
|
|
sprite->ZMap = zMap;
|
|
|
|
sprite->ZMapOffestX = 0;
|
|
|
|
sprite->ZMapOffestY = 0;
|
|
|
|
if (!zMap && visualType != VisualType::Ball)
|
|
|
|
{
|
|
|
|
sprite->ZMap = background_zmap;
|
|
|
|
sprite->ZMapOffestY = xPosition - zmap_offset;
|
|
|
|
sprite->ZMapOffestX = yPosition - zmap_offsetY;
|
|
|
|
}
|
|
|
|
sprite->XPosition2 = sprite->XPosition;
|
|
|
|
sprite->YPosition2 = sprite->YPosition;
|
|
|
|
sprite->Bmp8Width2 = sprite->Bmp8Width;
|
|
|
|
sprite->Bmp8Height2 = sprite->Bmp8Height;
|
|
|
|
if (visualType == VisualType::Ball)
|
|
|
|
{
|
|
|
|
ball_list[many_balls++] = sprite;
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
sprite_list[many_sprites++] = sprite;
|
|
|
|
sprite_modified(sprite);
|
|
|
|
}
|
|
|
|
result = sprite;
|
|
|
|
return result;
|
|
|
|
}
|