Pass paint session to sprite_paint_setup

This commit is contained in:
Ted John 2017-09-02 22:56:15 +01:00
parent a60a33e665
commit 3b9a86500a
9 changed files with 43 additions and 40 deletions

View File

@ -660,15 +660,15 @@ void paint_session_generate(paint_session * session)
for (; num_vertical_quadrants > 0; --num_vertical_quadrants){
map_element_paint_setup(session, mapTile.x, mapTile.y);
sprite_paint_setup(mapTile.x, mapTile.y);
sprite_paint_setup(session, mapTile.x, mapTile.y);
sprite_paint_setup(mapTile.x - 32, mapTile.y + 32);
sprite_paint_setup(session, mapTile.x - 32, mapTile.y + 32);
map_element_paint_setup(session, mapTile.x, mapTile.y + 32);
sprite_paint_setup(mapTile.x, mapTile.y + 32);
sprite_paint_setup(session, mapTile.x, mapTile.y + 32);
mapTile.x += 32;
sprite_paint_setup(mapTile.x, mapTile.y);
sprite_paint_setup(session, mapTile.x, mapTile.y);
mapTile.y += 32;
}
@ -682,15 +682,15 @@ void paint_session_generate(paint_session * session)
for (; num_vertical_quadrants > 0; --num_vertical_quadrants){
map_element_paint_setup(session, mapTile.x, mapTile.y);
sprite_paint_setup(mapTile.x, mapTile.y);
sprite_paint_setup(session, mapTile.x, mapTile.y);
sprite_paint_setup(mapTile.x - 32, mapTile.y - 32);
sprite_paint_setup(session, mapTile.x - 32, mapTile.y - 32);
map_element_paint_setup(session, mapTile.x - 32, mapTile.y);
sprite_paint_setup(mapTile.x - 32, mapTile.y);
sprite_paint_setup(session, mapTile.x - 32, mapTile.y);
mapTile.y += 32;
sprite_paint_setup(mapTile.x, mapTile.y);
sprite_paint_setup(session, mapTile.x, mapTile.y);
mapTile.x -= 32;
}
@ -704,16 +704,16 @@ void paint_session_generate(paint_session * session)
for (; num_vertical_quadrants > 0; --num_vertical_quadrants){
map_element_paint_setup(session, mapTile.x, mapTile.y);
sprite_paint_setup(mapTile.x, mapTile.y);
sprite_paint_setup(session, mapTile.x, mapTile.y);
sprite_paint_setup(mapTile.x + 32, mapTile.y - 32);
sprite_paint_setup(session, mapTile.x + 32, mapTile.y - 32);
map_element_paint_setup(session, mapTile.x, mapTile.y - 32);
sprite_paint_setup(mapTile.x, mapTile.y - 32);
sprite_paint_setup(session, mapTile.x, mapTile.y - 32);
mapTile.x -= 32;
sprite_paint_setup(mapTile.x, mapTile.y);
sprite_paint_setup(session, mapTile.x, mapTile.y);
mapTile.y -= 32;
}
@ -727,16 +727,16 @@ void paint_session_generate(paint_session * session)
for (; num_vertical_quadrants > 0; --num_vertical_quadrants){
map_element_paint_setup(session, mapTile.x, mapTile.y);
sprite_paint_setup(mapTile.x, mapTile.y);
sprite_paint_setup(session, mapTile.x, mapTile.y);
sprite_paint_setup(mapTile.x + 32, mapTile.y + 32);
sprite_paint_setup(session, mapTile.x + 32, mapTile.y + 32);
map_element_paint_setup(session, mapTile.x + 32, mapTile.y);
sprite_paint_setup(mapTile.x + 32, mapTile.y);
sprite_paint_setup(session, mapTile.x + 32, mapTile.y);
mapTile.y -= 32;
sprite_paint_setup(mapTile.x, mapTile.y);
sprite_paint_setup(session, mapTile.x, mapTile.y);
mapTile.x += 32;
}

View File

@ -70,11 +70,11 @@ static const litter_sprite litter_sprites[] = {
* Litter Paint Setup
* rct2: 0x006736FC
*/
void litter_paint(rct_litter *litter, sint32 imageDirection)
void litter_paint(paint_session * session, rct_litter *litter, sint32 imageDirection)
{
rct_drawpixelinfo *dpi;
dpi = gPaintSession.Unk140E9A8;
dpi = session->Unk140E9A8;
if (dpi->zoom_level != 0) return; // If zoomed at all no litter drawn
// litter has no sprite direction so remove that

View File

@ -37,9 +37,9 @@ extern const uint8 * DuckAnimations[];
/**
* rct2: 0x00672AC9
*/
void misc_paint(rct_sprite *misc, sint32 imageDirection)
void misc_paint(paint_session * session, rct_sprite *misc, sint32 imageDirection)
{
rct_drawpixelinfo * dpi = gPaintSession.Unk140E9A8;
rct_drawpixelinfo * dpi = session->Unk140E9A8;
switch (misc->steam_particle.misc_identifier) {
case SPRITE_MISC_STEAM_PARTICLE: // 0

View File

@ -26,7 +26,7 @@
*
* rct2: 0x0068F0FB
*/
void peep_paint(rct_peep * peep, sint32 imageDirection)
void peep_paint(paint_session * session, rct_peep * peep, sint32 imageDirection)
{
#ifdef __ENABLE_LIGHTFX__
if (gConfigGeneral.enable_light_fx) {
@ -59,7 +59,7 @@ void peep_paint(rct_peep * peep, sint32 imageDirection)
}
#endif
rct_drawpixelinfo * dpi = gPaintSession.Unk140E9A8;
rct_drawpixelinfo * dpi = session->Unk140E9A8;
if (dpi->zoom_level > 2) {
return;
}

View File

@ -26,7 +26,8 @@
* Paint Quadrant
* rct2: 0x0069E8B0
*/
void sprite_paint_setup(const uint16 eax, const uint16 ecx) {
void sprite_paint_setup(paint_session * session, const uint16 eax, const uint16 ecx)
{
rct_drawpixelinfo* dpi;
if ((eax & 0xe000) | (ecx & 0xe000)) return;
@ -38,7 +39,7 @@ void sprite_paint_setup(const uint16 eax, const uint16 ecx) {
if (gCurrentViewportFlags & VIEWPORT_FLAG_INVISIBLE_SPRITES) return;
dpi = gPaintSession.Unk140E9A8;
dpi = session->Unk140E9A8;
if (dpi->zoom_level > 2) return;
@ -51,7 +52,7 @@ void sprite_paint_setup(const uint16 eax, const uint16 ecx) {
// height of the slope element, and consequently clipped.
if ((gCurrentViewportFlags & VIEWPORT_FLAG_PAINT_CLIP_TO_HEIGHT) && (spr->unknown.z > (gClipHeight * 8) )) continue;
dpi = gPaintSession.Unk140E9A8;
dpi = session->Unk140E9A8;
if (dpi->y + dpi->height <= spr->unknown.sprite_top) continue;
if (spr->unknown.sprite_bottom <= dpi->y)continue;
@ -63,23 +64,23 @@ void sprite_paint_setup(const uint16 eax, const uint16 ecx) {
image_direction += spr->unknown.sprite_direction;
image_direction &= 0x1F;
gPaintSession.CurrentlyDrawnItem = spr;
gPaintSession.SpritePosition.x = spr->unknown.x;
gPaintSession.SpritePosition.y = spr->unknown.y;
gPaintSession.InteractionType = VIEWPORT_INTERACTION_ITEM_SPRITE;
session->CurrentlyDrawnItem = spr;
session->SpritePosition.x = spr->unknown.x;
session->SpritePosition.y = spr->unknown.y;
session->InteractionType = VIEWPORT_INTERACTION_ITEM_SPRITE;
switch (spr->unknown.sprite_identifier) {
case SPRITE_IDENTIFIER_VEHICLE:
vehicle_paint((rct_vehicle*)spr, image_direction);
vehicle_paint(session, (rct_vehicle*)spr, image_direction);
break;
case SPRITE_IDENTIFIER_PEEP:
peep_paint((rct_peep*)spr, image_direction);
peep_paint(session, (rct_peep*)spr, image_direction);
break;
case SPRITE_IDENTIFIER_MISC:
misc_paint(spr, image_direction);
misc_paint(session, spr, image_direction);
break;
case SPRITE_IDENTIFIER_LITTER:
litter_paint((rct_litter*)spr, image_direction);
litter_paint(session, (rct_litter*)spr, image_direction);
break;
default:
assert(false);

View File

@ -20,10 +20,12 @@
#include "../../common.h"
#include "../../world/sprite.h"
void sprite_paint_setup(const uint16 eax, const uint16 ecx);
typedef struct paint_session paint_session;
void misc_paint(rct_sprite *misc, sint32 imageDirection);
void litter_paint(rct_litter *litter, sint32 imageDirection);
void peep_paint(rct_peep *peep, sint32 imageDirection);
void sprite_paint_setup(paint_session * session, const uint16 eax, const uint16 ecx);
void misc_paint(paint_session * session, rct_sprite *misc, sint32 imageDirection);
void litter_paint(paint_session * session, rct_litter *litter, sint32 imageDirection);
void peep_paint(paint_session * session, rct_peep *peep, sint32 imageDirection);
#endif

View File

@ -2333,7 +2333,7 @@ void vehicle_visual_default(sint32 x, sint32 imageDirection, sint32 y, sint32 z,
*
* rct2: 0x006D4244
*/
void vehicle_paint(rct_vehicle *vehicle, sint32 imageDirection)
void vehicle_paint(paint_session * session, rct_vehicle *vehicle, sint32 imageDirection)
{
rct_ride_entry *rideEntry = 0;
const rct_ride_entry_vehicle *vehicleEntry;

View File

@ -30,7 +30,7 @@ typedef struct vehicle_boundbox {
extern const vehicle_boundbox VehicleBoundboxes[16][224];
void vehicle_paint(rct_vehicle *vehicle, sint32 imageDirection);
void vehicle_paint(paint_session * session, rct_vehicle *vehicle, sint32 imageDirection);
void vehicle_visual_default(sint32 x, sint32 imageDirection, sint32 y, sint32 z, rct_vehicle *vehicle, const rct_ride_entry_vehicle *vehicleEntry);
void vehicle_visual_roto_drop(sint32 x, sint32 imageDirection, sint32 y, sint32 z, rct_vehicle *vehicle, const rct_ride_entry_vehicle *vehicleEntry);

View File

@ -1048,6 +1048,6 @@ void vehicle_visual_splash_boats_or_water_coaster(sint32 x, sint32 imageDirectio
imageDirection = ((get_current_rotation() * 8) + vehicle->sprite_direction) & 0x1F;
gPaintSession.SpritePosition.x = vehicle->x;
gPaintSession.SpritePosition.y = vehicle->y;
vehicle_paint(vehicle, imageDirection);
vehicle_paint(&gPaintSession, vehicle, imageDirection);
}
#endif