- Index: src/freerct.cpp
- ===================================================================
- --- src/freerct.cpp (revision 1307)
- +++ src/freerct.cpp (working copy)
- @@ -111,12 +111,8 @@
- const char *font_path = cfg_file.GetValue("font", "medium-path");
- int font_size = cfg_file.GetNum("font", "medium-size");
- if (font_path == nullptr || *font_path == '\0' || font_size == -1) {
- - fprintf(stderr, "Failed to find font settings. Did you make a 'freerct.cfg' file next to the 'freerct' program?\n");
- - fprintf(stderr, "Example content (you may need to change the path and.or the size):\n"
- - "[font]\n"
- - "medium-size = 12\n"
- - "medium-path = /usr/share/fonts/gnu-free/FreeSans.ttf\n");
- - return 1;
- + font_path = "RCT1.ttf";
- + font_size = 16;
- }
- /* Initialize video. */
- Index: src/gamecontrol.cpp
- ===================================================================
- --- src/gamecontrol.cpp (revision 1307)
- +++ src/gamecontrol.cpp (working copy)
- @@ -90,6 +90,7 @@
- {
- _manager.Tick();
- _guests.DoTick();
- + _weather.OnTick();
- DateOnTick();
- _guests.OnAnimate(frame_delay);
- _rides_manager.OnAnimate(frame_delay);
- Index: src/viewport.cpp
- ===================================================================
- --- src/viewport.cpp (revision 1307)
- +++ src/viewport.cpp (working copy)
- @@ -1418,6 +1418,8 @@
- _video.BlitImage(dd.base, dd.sprite, rec, gs);
- }
- + _weather.DrawRain();
- +
- _video.SetClippedRectangle(cr);
- }
- Index: src/weather.cpp
- ===================================================================
- --- src/weather.cpp (revision 1307)
- +++ src/weather.cpp (working copy)
- @@ -12,7 +12,9 @@
- #include "stdafx.h"
- #include "weather.h"
- #include "dates.h"
- +#include "palette.h"
- #include "random.h"
- +#include "video.h"
- Weather _weather; ///< Weather in the park.
- @@ -151,7 +153,71 @@
- if (this->change == 0) this->change = (this->next - this->current > 0) ? 1 : -1;
- }
- +/** Helper method to determine if water is falling from the sky. */
- +bool Weather::IsRaining()
- +{
- + return this->GetWeatherType() == WTP_RAINING || this->GetWeatherType() == WTP_THUNDERSTORM;
- +}
- +
- +/** Draw rain to the screen. */
- +void Weather::DrawRain()
- +{
- + if (this->rain.opacity == 0) return;
- +
- + const uint32 col = MakeRGBA(127, 127, 127, this->rain.opacity); /// \todo Work out the colour more accurately
- +
- + for (int x = -this->rain.X_GAP; x < _video.GetXSize(); x += this->rain.X_GAP) {
- + for (int y = -this->rain.Y_GAP; y < _video.GetYSize(); y += (this->rain.opacity < 50 ? 2 : 1) * this->rain.Y_GAP) {
- + _video.FillSurface(col, {x + this->rain.x_off, y + this->rain.y_off1, 1, 1});
- + _video.FillSurface(col, {x + this->rain.x_off + 16, y + this->rain.y_off2, 1, 1});
- +
- + /* Thunderstorms get 2 extra streams of water */
- + if (this->GetWeatherType() == WTP_THUNDERSTORM) {
- + _video.FillSurface(col, {x + this->rain.x_off + 8, y + this->rain.y_off3, 1, 1});
- + _video.FillSurface(col, {x + this->rain.x_off + 24, y + this->rain.y_off4, 1, 1});
- + }
- + }
- + }
- +}
- +
- /**
- + * Set the rain drawing positions.
- + * @note Magic numbers taken from RCT.
- + */
- +void Weather::OnTick()
- +{
- + if (!this->IsRaining()) {
- + this->rain.opacity = std::max(this->rain.opacity - 1, 0);
- + } else {
- + this->rain.opacity = std::min(this->rain.opacity + 1, 192);
- + }
- +
- + /* If it's not raining (at all), reset the raindrop positions. */
- + if (this->rain.opacity == 0) {
- + this->rain.x_off = 0;
- + this->rain.y_off1 = 0;
- + this->rain.y_off2 = 5;
- + this->rain.y_off3 = 7;
- + this->rain.y_off4 = 14;
- + return;
- + }
- +
- + this->rain.x_off++;
- + if (this->rain.x_off >= this->rain.X_GAP) this->rain.x_off -= this->rain.X_GAP;
- +
- + this->rain.y_off1 += 5;
- + if (this->rain.y_off1 >= this->rain.Y_GAP) this->rain.y_off1 -= this->rain.Y_GAP;
- + this->rain.y_off2 += 6;
- + if (this->rain.y_off2 >= this->rain.Y_GAP) this->rain.y_off2 -= this->rain.Y_GAP;
- + this->rain.y_off3 += 3;
- + if (this->rain.y_off3 >= this->rain.Y_GAP) this->rain.y_off3 -= this->rain.Y_GAP;
- + this->rain.y_off4 += 4;
- + if (this->rain.y_off4 >= this->rain.Y_GAP) this->rain.y_off4 -= this->rain.Y_GAP;
- +
- + _video.MarkDisplayDirty();
- +}
- +
- +/**
- * Get the current type of weather.
- * @return The type of weather of today.
- */
- Index: src/weather.h
- ===================================================================
- --- src/weather.h (revision 1307)
- +++ src/weather.h (working copy)
- @@ -33,10 +33,28 @@
- int current; ///< Current weather.
- int next; ///< Next weather type.
- - int change; ///< speed of change in the weather.
- + int change; ///< Speed of change in the weather.
- + /** Helpful storage object for rain related variables. */
- + struct rain_t {
- + static const int X_GAP = 32; ///< X-distance between each rain drop.
- + static const int Y_GAP = 48; ///< Y-distance between each rain drop.
- +
- + int opacity; ///< Opacity of the rain drops (when fading in or out).
- + int x_off; ///< x-position of a rain drop.
- + int y_off1; ///< 1st y-position of a rain drop.
- + int y_off2; ///< 2nd y-position of a rain drop.
- + int y_off3; ///< 3rd y-position of a rain drop. (Thunderstorm only).
- + int y_off4; ///< 4th y-position of a rain drop. (Thunderstorm only).
- + };
- + rain_t rain; ///< Rain object.
- +
- + bool IsRaining();
- + void DrawRain();
- +
- void Initialize();
- void OnNewDay();
- + void OnTick();
- WeatherType GetWeatherType() const;