mirror of https://github.com/OpenRCT2/OpenRCT2.git
Merge pull request #881 from Gericom/develop
Implemented some more functions, memory leak fix in paint_park_entrance_entry
This commit is contained in:
commit
fcf5ead11c
|
@ -436,6 +436,27 @@ void sub_6E7DE1(sint16 x, sint16 y, rct_window* w, rct_viewport* viewport){
|
|||
memcpy(viewport, &view_copy, sizeof(rct_viewport));
|
||||
}
|
||||
|
||||
//rct2: 0x006E7A15
|
||||
void viewport_set_underground_flag(int underground, rct_window* window, rct_viewport* viewport)
|
||||
{
|
||||
if (window->classification != WC_MAIN_WINDOW)
|
||||
{
|
||||
if (!underground)
|
||||
{
|
||||
int bit = viewport->flags & VIEWPORT_FLAG_UNDERGROUND_INSIDE;
|
||||
viewport->flags &= ~VIEWPORT_FLAG_UNDERGROUND_INSIDE;
|
||||
if (!bit) return;
|
||||
}
|
||||
else
|
||||
{
|
||||
int bit = viewport->flags & VIEWPORT_FLAG_UNDERGROUND_INSIDE;
|
||||
viewport->flags |= VIEWPORT_FLAG_UNDERGROUND_INSIDE;
|
||||
if (bit) return;
|
||||
}
|
||||
window_invalidate(window);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* rct2: 0x006E7A3A
|
||||
|
@ -455,7 +476,8 @@ void viewport_update_position(rct_window *window)
|
|||
int height = map_element_height(0xFFFF & sprite->unknown.x, 0xFFFF & sprite->unknown.y) & 0xFFFF - 16;
|
||||
int underground = sprite->unknown.z < height;
|
||||
|
||||
RCT2_CALLPROC_X(0x6E7A15, sprite->unknown.x, sprite->unknown.y, sprite->unknown.z, underground, (int)window, (int)viewport, 0);
|
||||
viewport_set_underground_flag(underground, window, viewport);
|
||||
//RCT2_CALLPROC_X(0x6E7A15, sprite->unknown.x, sprite->unknown.y, sprite->unknown.z, underground, (int)window, (int)viewport, 0);
|
||||
|
||||
int center_x, center_y;
|
||||
center_2d_coordinates(sprite->unknown.x, sprite->unknown.y, sprite->unknown.z, ¢er_x, ¢er_y, window->viewport);
|
||||
|
@ -473,7 +495,8 @@ void viewport_update_position(rct_window *window)
|
|||
int curr_rotation = RCT2_GLOBAL(RCT2_ADDRESS_CURRENT_ROTATION, uint32);
|
||||
sub_689174(&x, &y, &z, curr_rotation);
|
||||
|
||||
RCT2_CALLPROC_X(0x006E7A15, x, y, z, 0, (int)window, (int)viewport, 0);
|
||||
viewport_set_underground_flag(0, window, viewport);
|
||||
//RCT2_CALLPROC_X(0x006E7A15, x, y, z, 0, (int)window, (int)viewport, 0);
|
||||
|
||||
//Clamp to the map minimum value
|
||||
int at_map_edge = 0;
|
||||
|
|
|
@ -385,6 +385,7 @@ int object_calculate_checksum(const rct_object_entry *entry, const char *data, i
|
|||
}
|
||||
|
||||
/* ebp is made up of 3 pointers: no_elements, unknown, g1_source */
|
||||
//rct2: 0x006A9ED1
|
||||
int sub_6A9ED1(uint8_t** ebp)
|
||||
{
|
||||
int result;
|
||||
|
@ -409,6 +410,7 @@ int sub_6A9ED1(uint8_t** ebp)
|
|||
return result;
|
||||
}
|
||||
|
||||
//rct2: 0x006DE83E
|
||||
int paint_ride_entry(int flags, int ebx, int ecx, int edx, rct_drawpixelinfo* dpi, int esi, int ebp)
|
||||
{
|
||||
if ((flags & 0xFF) != 3)
|
||||
|
@ -787,6 +789,7 @@ int paint_ride_entry(int flags, int ebx, int ecx, int edx, rct_drawpixelinfo* dp
|
|||
}
|
||||
}
|
||||
|
||||
//rct2: 0x006A8621
|
||||
int paint_path_entry(int flags, int ebx, int ecx, int edx, rct_drawpixelinfo* dpi, int esi, int ebp)
|
||||
{
|
||||
if ((flags & 0xFF) != 3)
|
||||
|
@ -845,6 +848,7 @@ int paint_path_entry(int flags, int ebx, int ecx, int edx, rct_drawpixelinfo* dp
|
|||
}
|
||||
}
|
||||
|
||||
//rct2: 0x00666E42
|
||||
int paint_park_entrance_entry(int flags, int ebx, int ecx, int edx, rct_drawpixelinfo* dpi, int esi, int ebp)
|
||||
{
|
||||
if ((flags & 0xFF) != 3)
|
||||
|
@ -882,11 +886,13 @@ int paint_park_entrance_entry(int flags, int ebx, int ecx, int edx, rct_drawpixe
|
|||
gfx_draw_sprite(dpi, image_id + 1, 24, 68, ebp);
|
||||
gfx_draw_sprite(dpi, image_id, 56, 84, ebp);
|
||||
gfx_draw_sprite(dpi, image_id + 2, 88, 100, ebp);
|
||||
rct2_free(dpi);
|
||||
}
|
||||
return flags;
|
||||
}
|
||||
}
|
||||
|
||||
//rct2: 0x006E6E2A
|
||||
int paint_water_entry(int flags, int ebx, int ecx, int edx, rct_drawpixelinfo* dpi, int esi, int ebp)
|
||||
{
|
||||
if ((flags & 0xFF) != 3)
|
||||
|
@ -932,7 +938,7 @@ int paint_water_entry(int flags, int ebx, int ecx, int edx, rct_drawpixelinfo* d
|
|||
}
|
||||
}
|
||||
|
||||
//0x0066B355
|
||||
//rct2: 0x0066B355
|
||||
int paint_stex_entry(int flags, int ebx, int ecx, int edx, rct_drawpixelinfo* dpi, int esi, int ebp)
|
||||
{
|
||||
if ((flags & 0xFF) != 3)
|
||||
|
|
|
@ -21,6 +21,7 @@
|
|||
#include "../addresses.h"
|
||||
#include "../interface/viewport.h"
|
||||
#include "sprite.h"
|
||||
#include "../scenario.h"
|
||||
|
||||
rct_sprite* g_sprite_list = RCT2_ADDRESS(RCT2_ADDRESS_SPRITE_LIST, rct_sprite);
|
||||
|
||||
|
@ -30,7 +31,19 @@ rct_sprite* g_sprite_list = RCT2_ADDRESS(RCT2_ADDRESS_SPRITE_LIST, rct_sprite);
|
|||
*/
|
||||
void create_balloon(int x, int y, int z, int colour)
|
||||
{
|
||||
RCT2_CALLPROC_X(0x006736C7, x, colour << 8, y, z, 0, 0, 0);
|
||||
rct_sprite* sprite = create_sprite(2);
|
||||
if (sprite != NULL)
|
||||
{
|
||||
sprite->balloon.var_14 = 13;
|
||||
sprite->balloon.var_09 = 22;
|
||||
sprite->balloon.var_15 = 11;
|
||||
sprite->balloon.sprite_identifier = 2;
|
||||
sprite_move(x, y, z, sprite);
|
||||
sprite->balloon.var_01 = 7;
|
||||
sprite->balloon.var_26 = 0;
|
||||
sprite->balloon.colour = colour;
|
||||
sprite->balloon.var_24 = 0;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -39,7 +52,40 @@ void create_balloon(int x, int y, int z, int colour)
|
|||
*/
|
||||
void create_duck(int targetX, int targetY)
|
||||
{
|
||||
RCT2_CALLPROC_X(0x0067440F, targetX, 0, targetY, 0, 0, 0, 0);
|
||||
rct_sprite* sprite = create_sprite(2);
|
||||
if (sprite != NULL)
|
||||
{
|
||||
sprite->duck.sprite_identifier = 2;
|
||||
sprite->duck.var_01 = 8;
|
||||
sprite->duck.var_14 = 9;
|
||||
sprite->duck.var_09 = 0xC;
|
||||
sprite->duck.var_15 = 9;
|
||||
int offset_xy = scenario_rand() & 0x1E;
|
||||
targetX += offset_xy;
|
||||
targetY += offset_xy;
|
||||
sprite->duck.target_x = targetX;
|
||||
sprite->duck.target_y = targetY;
|
||||
uint8 direction = scenario_rand() & 3;
|
||||
switch (direction)
|
||||
{
|
||||
case 0:
|
||||
targetX = 8191 - (scenario_rand() & 0x3F);
|
||||
break;
|
||||
case 1:
|
||||
targetY = scenario_rand() & 0x3F;
|
||||
break;
|
||||
case 2:
|
||||
targetX = scenario_rand() & 0x3F;
|
||||
break;
|
||||
case 3:
|
||||
targetY = 8191 - (scenario_rand() & 0x3F);
|
||||
break;
|
||||
}
|
||||
sprite->duck.sprite_direction = direction << 3;
|
||||
sprite_move(targetX, targetY, 496, sprite);
|
||||
sprite->duck.var_48 = 0;
|
||||
sprite->duck.var_26 = 0;
|
||||
}
|
||||
}
|
||||
|
||||
/* rct2: 0x006EC473 */
|
||||
|
|
|
@ -81,6 +81,47 @@ typedef struct {
|
|||
uint32 var_24;
|
||||
} rct_litter;
|
||||
|
||||
typedef struct {
|
||||
uint8 sprite_identifier; // 0x00
|
||||
uint8 var_01; // 0x01
|
||||
uint16 var_02; // 0x02
|
||||
uint16 next; // 0x04
|
||||
uint16 previous; // 0x06
|
||||
uint8 linked_list_type_offset; // 0x08 Valid values are SPRITE_LINKEDLIST_OFFSET_...
|
||||
uint8 var_09; // 0x09
|
||||
uint8 pad_0A[0xA];
|
||||
uint8 var_14; // 0x14
|
||||
uint8 var_15; // 0x15
|
||||
uint8 pad_16[0xE];
|
||||
uint8 var_24; // 0x24
|
||||
uint8 pad_25;
|
||||
uint16 var_26; // 0x26
|
||||
uint8 pad_28[4];
|
||||
uint8 colour; // 0x2C
|
||||
} rct_balloon;
|
||||
|
||||
typedef struct {
|
||||
uint8 sprite_identifier; // 0x00
|
||||
uint8 var_01; // 0x01
|
||||
uint16 var_02; // 0x02
|
||||
uint16 next; // 0x04
|
||||
uint16 previous; // 0x06
|
||||
uint8 linked_list_type_offset; // 0x08 Valid values are SPRITE_LINKEDLIST_OFFSET_...
|
||||
uint8 var_09; // 0x09
|
||||
uint8 pad_0A[0xA];
|
||||
uint8 var_14; // 0x14
|
||||
uint8 var_15; // 0x15
|
||||
uint8 pad_16[0x8];
|
||||
uint8 sprite_direction; // 0x1E
|
||||
uint8 pad_1F[0x7];
|
||||
uint16 var_26;
|
||||
uint8 pad_28[0x8];
|
||||
sint16 target_x; // 0x30
|
||||
sint16 target_y; // 0x32
|
||||
uint8 pad_34[0x14];
|
||||
uint8 var_48; // 0x48
|
||||
} rct_duck;
|
||||
|
||||
/**
|
||||
* Sprite structure.
|
||||
* size: 0x0100
|
||||
|
@ -91,6 +132,8 @@ typedef union {
|
|||
rct_peep peep;
|
||||
rct_litter litter;
|
||||
rct_vehicle vehicle;
|
||||
rct_balloon balloon;
|
||||
rct_duck duck;
|
||||
} rct_sprite;
|
||||
|
||||
// rct2: 0x010E63BC
|
||||
|
|
Loading…
Reference in New Issue