mirror of
https://github.com/OpenRCT2/OpenRCT2.git
synced 2025-01-22 10:21:57 -05:00
Moved the weather table into our code.
Introduced the weather table struct used for future weather calculation. Added a bit more explanation on how future weather is calculated.
This commit is contained in:
parent
b3c279d9b5
commit
039241cde4
2 changed files with 31 additions and 6 deletions
|
@ -19,10 +19,21 @@
|
|||
*****************************************************************************/
|
||||
|
||||
#include "addresses.h"
|
||||
#include "climate.h"
|
||||
#include "date.h"
|
||||
#include "gfx.h"
|
||||
#include "rct2.h"
|
||||
|
||||
const sint8 weather_table[48] = {
|
||||
10, 0, 0, 0, 0x96, 0x5a, 0, 0, // Sunny
|
||||
5, 0, 0, 0, 0x97, 0x5A, 0, 0, // Partially cloudy
|
||||
0, 0, 0, 0, 0x98, 0x5A, 0, 0, // Cloudy
|
||||
-2, 1, 1, 1, 0x99, 0x5A, 0, 0, // Rain
|
||||
-4, 1, 2, 2, 0x9A, 0x5A, 0, 0, // Heavy rain
|
||||
2, 2, 2, 2, 0x9B, 0x5A, 0, 0 // Thunderstorm
|
||||
};
|
||||
|
||||
|
||||
void determine_future_weather();
|
||||
|
||||
int climate_celcius_to_fahrenheit(int celcius)
|
||||
|
@ -121,21 +132,27 @@ void update_climate()
|
|||
|
||||
|
||||
/**
|
||||
* Calculates future weather development
|
||||
* Calculates future weather development.
|
||||
* RCT2 implements this as discrete probability distributions dependant on month and climate
|
||||
* for next_weather. The other weather parameters are then looked up depending only on the
|
||||
* next weather.
|
||||
*
|
||||
* rct2: 0x006C461C
|
||||
**/
|
||||
void determine_future_weather()
|
||||
{
|
||||
sint8 climate = RCT2_GLOBAL(RCT2_ADDRESS_CLIMATE, sint8);
|
||||
uint8** climate_table = ((uint8***)0x00993998)[climate];
|
||||
rct_weather_table** climate_data = ((rct_weather_table***)0x00993998)[climate];
|
||||
sint8 month = RCT2_GLOBAL(RCT2_ADDRESS_CURRENT_MONTH_YEAR, sint16) & 7;
|
||||
uint8* month_table = climate_table[month];
|
||||
// don't do this at home. Temporary measure until we rewrite the tables.
|
||||
rct_weather_table* month_table = climate_data[month];
|
||||
|
||||
sint8 next_weather = month_table[ 2 + (uint8)((rand() * month_table[1]) >> 8) ];
|
||||
// generate a random variable with values 0 upto distribution_size-1 and chose weather from the distribution table accordingly
|
||||
sint8 next_weather = month_table->distribution[ ((rand() & 0xFF) * month_table->distribution_size) >> 8 ];
|
||||
RCT2_GLOBAL(RCT2_ADDRESS_NEXT_WEATHER, sint8) = next_weather;
|
||||
|
||||
sint8* weather_table = (sint8*)0x00993C94;
|
||||
RCT2_GLOBAL(RCT2_ADDRESS_NEXT_TEMPERATURE, sint8) = month_table[0] + weather_table[next_weather * 8];
|
||||
//sint8* weather_table = (sint8*)0x00993C94;
|
||||
RCT2_GLOBAL(RCT2_ADDRESS_NEXT_TEMPERATURE, sint8) = month_table->base_temperature + weather_table[next_weather * 8];
|
||||
RCT2_GLOBAL(RCT2_ADDRESS_NEXT_WEATHER_EFFECT, sint8) = weather_table[next_weather * 8 + 1];
|
||||
RCT2_GLOBAL(RCT2_ADDRESS_NEXT_WEATHER_GLOOM, sint8) = weather_table[next_weather * 8 + 2];
|
||||
RCT2_GLOBAL(0x013CA753, sint8) = weather_table[next_weather * 8 + 3];
|
||||
|
|
|
@ -18,6 +18,8 @@
|
|||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*****************************************************************************/
|
||||
|
||||
#include "rct2.h"
|
||||
|
||||
#ifndef _CLIMATE_H_
|
||||
#define _CLIMATE_H_
|
||||
|
||||
|
@ -28,6 +30,12 @@ enum {
|
|||
CLIMATE_COLD
|
||||
};
|
||||
|
||||
typedef struct {
|
||||
sint8 base_temperature;
|
||||
sint8 distribution_size;
|
||||
sint8 distribution[24];
|
||||
} rct_weather_table;
|
||||
|
||||
int climate_celcius_to_fahrenheit(int celcius);
|
||||
void climate_reset(int climate);
|
||||
void update_climate();
|
||||
|
|
Loading…
Reference in a new issue