mirror of
https://github.com/OpenRCT2/OpenRCT2
synced 2025-12-23 15:52:55 +01:00
refactor game_logic_update
This commit is contained in:
@@ -137,6 +137,7 @@
|
|||||||
<ClCompile Include="..\src\windows\track_place.c" />
|
<ClCompile Include="..\src\windows\track_place.c" />
|
||||||
<ClCompile Include="..\src\windows\water.c" />
|
<ClCompile Include="..\src\windows\water.c" />
|
||||||
<ClCompile Include="..\src\world\climate.c" />
|
<ClCompile Include="..\src\world\climate.c" />
|
||||||
|
<ClCompile Include="..\src\world\fountain.c" />
|
||||||
<ClCompile Include="..\src\world\map.c" />
|
<ClCompile Include="..\src\world\map.c" />
|
||||||
<ClCompile Include="..\src\world\park.c" />
|
<ClCompile Include="..\src\world\park.c" />
|
||||||
<ClCompile Include="..\src\world\sprite.c" />
|
<ClCompile Include="..\src\world\sprite.c" />
|
||||||
|
|||||||
@@ -368,7 +368,6 @@
|
|||||||
<ClCompile Include="..\src\windows\guest.c">
|
<ClCompile Include="..\src\windows\guest.c">
|
||||||
<Filter>Source\Windows</Filter>
|
<Filter>Source\Windows</Filter>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
<ClCompile Include="..\lib\lodepng\lodepng.c" />
|
|
||||||
<ClCompile Include="..\src\windows\shortcut_key_change.c">
|
<ClCompile Include="..\src\windows\shortcut_key_change.c">
|
||||||
<Filter>Source\Windows</Filter>
|
<Filter>Source\Windows</Filter>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
@@ -383,9 +382,6 @@
|
|||||||
<ClCompile Include="..\lib\lodepng\lodepng.c" />
|
<ClCompile Include="..\lib\lodepng\lodepng.c" />
|
||||||
<ClCompile Include="..\lib\lodepng\lodepng.c" />
|
<ClCompile Include="..\lib\lodepng\lodepng.c" />
|
||||||
<ClCompile Include="..\lib\lodepng\lodepng.c" />
|
<ClCompile Include="..\lib\lodepng\lodepng.c" />
|
||||||
<ClCompile Include="..\lib\libspeex\resample.c">
|
|
||||||
<Filter>Libraries\libspeex</Filter>
|
|
||||||
</ClCompile>
|
|
||||||
<ClCompile Include="..\lib\lodepng\lodepng.c" />
|
<ClCompile Include="..\lib\lodepng\lodepng.c" />
|
||||||
<ClCompile Include="..\src\drawing\rain.c">
|
<ClCompile Include="..\src\drawing\rain.c">
|
||||||
<Filter>Source\Drawing</Filter>
|
<Filter>Source\Drawing</Filter>
|
||||||
@@ -422,6 +418,10 @@
|
|||||||
<Filter>Libraries\argparse</Filter>
|
<Filter>Libraries\argparse</Filter>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
<ClCompile Include="..\lib\libspeex\resample.c;..\lib\lodepng\lodepng.c" />
|
<ClCompile Include="..\lib\libspeex\resample.c;..\lib\lodepng\lodepng.c" />
|
||||||
|
<ClCompile Include="..\lib\libspeex\resample.c;..\lib\lodepng\lodepng.c" />
|
||||||
|
<ClCompile Include="..\src\world\fountain.c">
|
||||||
|
<Filter>Source\World</Filter>
|
||||||
|
</ClCompile>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<ClInclude Include="..\src\management\award.h">
|
<ClInclude Include="..\src\management\award.h">
|
||||||
|
|||||||
15
src/game.c
15
src/game.c
@@ -36,6 +36,7 @@
|
|||||||
#include "peep/staff.h"
|
#include "peep/staff.h"
|
||||||
#include "platform/osinterface.h"
|
#include "platform/osinterface.h"
|
||||||
#include "ride/ride.h"
|
#include "ride/ride.h"
|
||||||
|
#include "ride/ride_ratings.h"
|
||||||
#include "ride/vehicle.h"
|
#include "ride/vehicle.h"
|
||||||
#include "scenario.h"
|
#include "scenario.h"
|
||||||
#include "title.h"
|
#include "title.h"
|
||||||
@@ -277,18 +278,18 @@ void game_logic_update()
|
|||||||
sub_68B089();
|
sub_68B089();
|
||||||
scenario_update();
|
scenario_update();
|
||||||
climate_update();
|
climate_update();
|
||||||
RCT2_CALLPROC_EBPSAFE(0x006646E1);
|
fountain_update_all();
|
||||||
RCT2_CALLPROC_EBPSAFE(0x006A876D);
|
sub_6A876D();
|
||||||
peep_update_all();
|
peep_update_all();
|
||||||
vehicle_update_all();
|
vehicle_update_all();
|
||||||
RCT2_CALLPROC_EBPSAFE(0x00672AA4); // update text effects
|
texteffect_update_all();
|
||||||
RCT2_CALLPROC_EBPSAFE(0x006ABE4C); // update rides
|
ride_update_all();
|
||||||
park_update();
|
park_update();
|
||||||
research_update();
|
research_update();
|
||||||
RCT2_CALLPROC_EBPSAFE(0x006B5A2A); // update ride ratings
|
ride_ratings_update_all();
|
||||||
ride_measurements_update();
|
ride_measurements_update();
|
||||||
RCT2_CALLPROC_EBPSAFE(0x0068AFAD);
|
map_invalidate_animations();
|
||||||
vehicle_sounds_update();//RCT2_CALLPROC_EBPSAFE(0x006BBC6B); // vehicle and scream sounds
|
vehicle_sounds_update();
|
||||||
peep_update_crowd_noise();
|
peep_update_crowd_noise();
|
||||||
climate_update_sound();
|
climate_update_sound();
|
||||||
news_item_update_current();
|
news_item_update_current();
|
||||||
|
|||||||
@@ -201,8 +201,14 @@ void ride_update_favourited_stat()
|
|||||||
window_invalidate_by_id(WC_RIDE_LIST, 0);
|
window_invalidate_by_id(WC_RIDE_LIST, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* rct2: 0x006ABE4C
|
||||||
|
*/
|
||||||
|
void ride_update_all()
|
||||||
|
{
|
||||||
|
RCT2_CALLPROC_EBPSAFE(0x006ABE4C);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* rct2: 0x006B7C59
|
* rct2: 0x006B7C59
|
||||||
|
|||||||
@@ -547,6 +547,7 @@ int ride_get_max_queue_time(rct_ride *ride);
|
|||||||
void ride_init_all();
|
void ride_init_all();
|
||||||
void reset_all_ride_build_dates();
|
void reset_all_ride_build_dates();
|
||||||
void ride_update_favourited_stat();
|
void ride_update_favourited_stat();
|
||||||
|
void ride_update_all();
|
||||||
void ride_check_all_reachable();
|
void ride_check_all_reachable();
|
||||||
rct_map_element *sub_6CAF80(int rideIndex, int *outX, int *outY);
|
rct_map_element *sub_6CAF80(int rideIndex, int *outX, int *outY);
|
||||||
rct_map_element *ride_find_track_gap(rct_map_element *startTrackElement, int *outX, int *outY);
|
rct_map_element *ride_find_track_gap(rct_map_element *startTrackElement, int *outX, int *outY);
|
||||||
|
|||||||
@@ -23,6 +23,14 @@
|
|||||||
#include "ride_data.h"
|
#include "ride_data.h"
|
||||||
#include "ride_ratings.h"
|
#include "ride_ratings.h"
|
||||||
|
|
||||||
|
/**
|
||||||
|
* rct2: 0x006B5A2A
|
||||||
|
*/
|
||||||
|
void ride_ratings_update_all()
|
||||||
|
{
|
||||||
|
RCT2_CALLPROC_EBPSAFE(0x006B5A2A);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* rct2: 0x0065C4D4
|
* rct2: 0x0065C4D4
|
||||||
*
|
*
|
||||||
|
|||||||
@@ -24,6 +24,7 @@
|
|||||||
#include "../common.h"
|
#include "../common.h"
|
||||||
#include "ride.h"
|
#include "ride.h"
|
||||||
|
|
||||||
|
void ride_ratings_update_all();
|
||||||
void crooked_house_excitement(rct_ride *ride);
|
void crooked_house_excitement(rct_ride *ride);
|
||||||
void sub_655FD6(rct_ride *ride);
|
void sub_655FD6(rct_ride *ride);
|
||||||
ride_rating apply_intensity_penalty(ride_rating excitement, ride_rating intensity);
|
ride_rating apply_intensity_penalty(ride_rating excitement, ride_rating intensity);
|
||||||
|
|||||||
37
src/world/fountain.c
Normal file
37
src/world/fountain.c
Normal file
@@ -0,0 +1,37 @@
|
|||||||
|
/*****************************************************************************
|
||||||
|
* Copyright (c) 2014 Ted John, Peter Hill
|
||||||
|
* OpenRCT2, an open source clone of Roller Coaster Tycoon 2.
|
||||||
|
*
|
||||||
|
* This file is part of OpenRCT2.
|
||||||
|
*
|
||||||
|
* OpenRCT2 is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 3 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*****************************************************************************/
|
||||||
|
|
||||||
|
#include "../addresses.h"
|
||||||
|
#include "../game.h"
|
||||||
|
#include "../common.h"
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* rct2: 0x006646E1
|
||||||
|
*/
|
||||||
|
void fountain_update_all()
|
||||||
|
{
|
||||||
|
int ignoreScreenFlags = SCREEN_FLAGS_SCENARIO_EDITOR | SCREEN_FLAGS_TRACK_DESIGNER | SCREEN_FLAGS_TRACK_MANAGER;
|
||||||
|
if (RCT2_GLOBAL(RCT2_ADDRESS_SCREEN_FLAGS, uint8) & ignoreScreenFlags)
|
||||||
|
return;
|
||||||
|
|
||||||
|
// Probably not just fountains... may include scenery aging and grass growth.
|
||||||
|
RCT2_CALLPROC_EBPSAFE(0x006646EE);
|
||||||
|
}
|
||||||
@@ -23,7 +23,11 @@
|
|||||||
#include "climate.h"
|
#include "climate.h"
|
||||||
#include "map.h"
|
#include "map.h"
|
||||||
|
|
||||||
|
int _sub_6A876D_save_x;
|
||||||
|
int _sub_6A876D_save_y;
|
||||||
|
|
||||||
static void tiles_init();
|
static void tiles_init();
|
||||||
|
static void sub_6A87BB(int x, int y);
|
||||||
|
|
||||||
int map_element_get_terrain(rct_map_element *element)
|
int map_element_get_terrain(rct_map_element *element)
|
||||||
{
|
{
|
||||||
@@ -112,8 +116,8 @@ void map_init()
|
|||||||
}
|
}
|
||||||
|
|
||||||
RCT2_GLOBAL(0x013B0E70, sint16) = 0;
|
RCT2_GLOBAL(0x013B0E70, sint16) = 0;
|
||||||
RCT2_GLOBAL(0x013CE774, sint16) = 0;
|
_sub_6A876D_save_x = 0;
|
||||||
RCT2_GLOBAL(0x013CE776, sint16) = 0;
|
_sub_6A876D_save_y = 0;
|
||||||
RCT2_GLOBAL(0x01358830, sint16) = 4768;
|
RCT2_GLOBAL(0x01358830, sint16) = 4768;
|
||||||
RCT2_GLOBAL(RCT2_ADDRESS_MAP_MAXIMUM_X_Y, sint16) = 5054;
|
RCT2_GLOBAL(RCT2_ADDRESS_MAP_MAXIMUM_X_Y, sint16) = 5054;
|
||||||
RCT2_GLOBAL(RCT2_ADDRESS_MAP_SIZE, sint16) = 150;
|
RCT2_GLOBAL(RCT2_ADDRESS_MAP_SIZE, sint16) = 150;
|
||||||
@@ -380,3 +384,52 @@ int map_coord_is_connected(uint16 tile_idx, uint8 height, uint8 face_direction)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* rct2: 0x0068AFAD
|
||||||
|
*/
|
||||||
|
void map_invalidate_animations()
|
||||||
|
{
|
||||||
|
RCT2_CALLPROC_EBPSAFE(0x0068AFAD);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* rct2: 0x006A876D
|
||||||
|
*/
|
||||||
|
void sub_6A876D()
|
||||||
|
{
|
||||||
|
int i, x, y;
|
||||||
|
|
||||||
|
if (RCT2_GLOBAL(RCT2_ADDRESS_SCREEN_FLAGS, uint8) & (SCREEN_FLAGS_TRACK_DESIGNER | SCREEN_FLAGS_TRACK_MANAGER))
|
||||||
|
return;
|
||||||
|
|
||||||
|
// Presumebly sub_6A87BB is too computationally expensive to call for every
|
||||||
|
// tile every update, so word_13CE774 and word_13CE776 store the x and y
|
||||||
|
// progress. A maximum of 128 calls is done per update.
|
||||||
|
x = _sub_6A876D_save_x;
|
||||||
|
y = _sub_6A876D_save_y;
|
||||||
|
for (i = 0; i < 128; i++) {
|
||||||
|
sub_6A87BB(x, y);
|
||||||
|
|
||||||
|
// Next x, y tile
|
||||||
|
x += 32;
|
||||||
|
if (x >= 8192) {
|
||||||
|
x = 0;
|
||||||
|
y += 32;
|
||||||
|
if (y >= 8192)
|
||||||
|
y = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
_sub_6A876D_save_x = x;
|
||||||
|
_sub_6A876D_save_y = y;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* rct2: 0x006A87BB
|
||||||
|
*/
|
||||||
|
static void sub_6A87BB(int x, int y)
|
||||||
|
{
|
||||||
|
RCT2_CALLPROC_X(0x006A87BB, x, 0, y, 0, 0, 0, 0);
|
||||||
|
}
|
||||||
@@ -203,6 +203,10 @@ rct_map_element *map_get_surface_element_at(int x, int y);
|
|||||||
int map_element_height(int x, int y);
|
int map_element_height(int x, int y);
|
||||||
void sub_68B089();
|
void sub_68B089();
|
||||||
int map_coord_is_connected(uint16 coordinate, uint8 height, uint8 face_direction);
|
int map_coord_is_connected(uint16 coordinate, uint8 height, uint8 face_direction);
|
||||||
|
void map_invalidate_animations();
|
||||||
|
void sub_6A876D();
|
||||||
|
|
||||||
|
void fountain_update_all();
|
||||||
|
|
||||||
#define GET_MAP_ELEMENT(x) (&(RCT2_ADDRESS(RCT2_ADDRESS_MAP_ELEMENTS, rct_map_element)[x]))
|
#define GET_MAP_ELEMENT(x) (&(RCT2_ADDRESS(RCT2_ADDRESS_MAP_ELEMENTS, rct_map_element)[x]))
|
||||||
#define TILE_MAP_ELEMENT_POINTER(x) (RCT2_ADDRESS(RCT2_ADDRESS_TILE_MAP_ELEMENT_POINTERS, rct_map_element*)[x])
|
#define TILE_MAP_ELEMENT_POINTER(x) (RCT2_ADDRESS(RCT2_ADDRESS_TILE_MAP_ELEMENT_POINTERS, rct_map_element*)[x])
|
||||||
|
|||||||
@@ -201,3 +201,12 @@ void move_sprite_to_list(rct_sprite *sprite, uint8 cl)
|
|||||||
--(RCT2_GLOBAL(0x13573C8 + oldListTypeOffset, uint16));
|
--(RCT2_GLOBAL(0x13573C8 + oldListTypeOffset, uint16));
|
||||||
++(RCT2_GLOBAL(0x13573C8 + cl, uint16));
|
++(RCT2_GLOBAL(0x13573C8 + cl, uint16));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* rct: 0x00672AA4
|
||||||
|
*/
|
||||||
|
void texteffect_update_all()
|
||||||
|
{
|
||||||
|
RCT2_CALLPROC_EBPSAFE(0x00672AA4);
|
||||||
|
}
|
||||||
@@ -101,5 +101,6 @@ rct_sprite *create_sprite(uint8 bl);
|
|||||||
void reset_sprite_list();
|
void reset_sprite_list();
|
||||||
void reset_0x69EBE4();
|
void reset_0x69EBE4();
|
||||||
void move_sprite_to_list(rct_sprite *sprite, uint8 cl);
|
void move_sprite_to_list(rct_sprite *sprite, uint8 cl);
|
||||||
|
void texteffect_update_all();
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
Reference in New Issue
Block a user