mirror of https://github.com/OpenRCT2/OpenRCT2.git
Compare commits
6 Commits
81b7a00033
...
d90af399f3
Author | SHA1 | Date |
---|---|---|
Michael Steenbeek | d90af399f3 | |
Harry Hopkinson | 9266a6f0d3 | |
Michael Steenbeek | 03926c46d0 | |
Gymnasiast | 51ceab43fb | |
Gymnasiast | cee1716d3c | |
Gymnasiast | d58480b7e3 |
|
@ -64,9 +64,9 @@ set(TITLE_SEQUENCE_VERSION "0.4.6")
|
|||
set(TITLE_SEQUENCE_URL "https://github.com/OpenRCT2/title-sequences/releases/download/v${TITLE_SEQUENCE_VERSION}/title-sequences.zip")
|
||||
set(TITLE_SEQUENCE_SHA1 "80fefc6ebbabc42a6f4703412daa5c62f661420d")
|
||||
|
||||
set(OBJECTS_VERSION "1.4.3")
|
||||
set(OBJECTS_VERSION "1.4.4")
|
||||
set(OBJECTS_URL "https://github.com/OpenRCT2/objects/releases/download/v${OBJECTS_VERSION}/objects.zip")
|
||||
set(OBJECTS_SHA1 "ac78210ef46465c0f51bbffd6fe21845092af48e")
|
||||
set(OBJECTS_SHA1 "4e9b5d7f85a07b90ec57fe37517e04b19ee0395c")
|
||||
|
||||
set(OPENSFX_VERSION "1.0.5")
|
||||
set(OPENSFX_URL "https://github.com/OpenRCT2/OpenSoundEffects/releases/download/v${OPENSFX_VERSION}/opensound.zip")
|
||||
|
|
|
@ -3698,6 +3698,7 @@ STR_6623 :Type ‘help’ for a list of available commands. Type ‘hide’ t
|
|||
STR_6624 :Tile Inspector: Sort elements
|
||||
STR_6625 :Invalid colour
|
||||
STR_6626 :Animation is backwards
|
||||
STR_6627 :Track speed too high!
|
||||
|
||||
#############
|
||||
# Scenarios #
|
||||
|
|
|
@ -11,6 +11,8 @@
|
|||
- Fix: [#21696] Fullscreen window option not correctly applied on macOS.
|
||||
- Fix: [#21787] Map generator heightmap should respect increased height limits.
|
||||
- Fix: [#21829] When creating a new scenario, the default name contains formatting codes.
|
||||
- Fix: [objects#324] Cannot build Colosseum inside a turn or helix.
|
||||
- Fix: [objects#325] Sloped castle walls are vertically offset by one pixel (original bug).
|
||||
|
||||
0.4.10 (2024-04-02)
|
||||
------------------------------------------------------------------------
|
||||
|
|
|
@ -45,8 +45,8 @@
|
|||
<LibsSha1 Condition="'$(Platform)'=='Win32'">f3636b530110c7592deab23ca0d0c1916fc7e44c</LibsSha1>
|
||||
<TitleSequencesUrl>https://github.com/OpenRCT2/title-sequences/releases/download/v0.4.6/title-sequences.zip</TitleSequencesUrl>
|
||||
<TitleSequencesSha1>80fefc6ebbabc42a6f4703412daa5c62f661420d</TitleSequencesSha1>
|
||||
<ObjectsUrl>https://github.com/OpenRCT2/objects/releases/download/v1.4.3/objects.zip</ObjectsUrl>
|
||||
<ObjectsSha1>ac78210ef46465c0f51bbffd6fe21845092af48e</ObjectsSha1>
|
||||
<ObjectsUrl>https://github.com/OpenRCT2/objects/releases/download/v1.4.4/objects.zip</ObjectsUrl>
|
||||
<ObjectsSha1>4e9b5d7f85a07b90ec57fe37517e04b19ee0395c</ObjectsSha1>
|
||||
<OpenSFXUrl>https://github.com/OpenRCT2/OpenSoundEffects/releases/download/v1.0.5/opensound.zip</OpenSFXUrl>
|
||||
<OpenSFXSha1>b1b1f1b241d2cbff63a1889c4dc5a09bdf769bfb</OpenSFXSha1>
|
||||
<OpenMSXUrl>https://github.com/OpenRCT2/OpenMusic/releases/download/v1.5/openmusic.zip</OpenMSXUrl>
|
||||
|
|
|
@ -219,7 +219,7 @@ static Widget _rideConstructionWidgets[] = {
|
|||
ShowGridlines();
|
||||
|
||||
_currentTrackPrice = kMoney64Undefined;
|
||||
_currentBrakeSpeed2 = 8;
|
||||
_currentBrakeSpeed = 8;
|
||||
_currentSeatRotationAngle = 4;
|
||||
|
||||
_currentTrackCurve = currentRide->GetRideTypeDescriptor().StartTrackPiece | RideConstructionSpecialPieceSelected;
|
||||
|
@ -1335,10 +1335,9 @@ static Widget _rideConstructionWidgets[] = {
|
|||
}
|
||||
else
|
||||
{
|
||||
uint8_t* brakesSpeedPtr = &_currentBrakeSpeed2;
|
||||
uint8_t maxBrakesSpeed = 30;
|
||||
uint8_t* brakesSpeedPtr = &_currentBrakeSpeed;
|
||||
uint8_t brakesSpeed = *brakesSpeedPtr + 2;
|
||||
if (brakesSpeed <= maxBrakesSpeed)
|
||||
if (brakesSpeed <= kMaximumBrakeSpeed)
|
||||
{
|
||||
if (_rideConstructionState == RideConstructionState::Selected)
|
||||
{
|
||||
|
@ -1362,7 +1361,7 @@ static Widget _rideConstructionWidgets[] = {
|
|||
}
|
||||
else
|
||||
{
|
||||
uint8_t* brakesSpeedPtr = &_currentBrakeSpeed2;
|
||||
uint8_t* brakesSpeedPtr = &_currentBrakeSpeed;
|
||||
uint8_t brakesSpeed = *brakesSpeedPtr - 2;
|
||||
if (brakesSpeed >= 2)
|
||||
{
|
||||
|
@ -1450,7 +1449,7 @@ static Widget _rideConstructionWidgets[] = {
|
|||
break;
|
||||
case TrackElemType::BlockBrakes:
|
||||
case TrackElemType::DiagBlockBrakes:
|
||||
_currentBrakeSpeed2 = kRCT2DefaultBlockBrakeSpeed;
|
||||
_currentBrakeSpeed = kRCT2DefaultBlockBrakeSpeed;
|
||||
}
|
||||
_currentTrackCurve = trackPiece | RideConstructionSpecialPieceSelected;
|
||||
WindowRideConstructionUpdateActiveElements();
|
||||
|
@ -1508,7 +1507,7 @@ static Widget _rideConstructionWidgets[] = {
|
|||
|
||||
if (_currentlyShowingBrakeOrBoosterSpeed)
|
||||
{
|
||||
uint16_t brakeSpeed2 = ((_currentBrakeSpeed2 * 9) >> 2) & 0xFFFF;
|
||||
uint16_t brakeSpeed2 = ((_currentBrakeSpeed * 9) >> 2) & 0xFFFF;
|
||||
if (TrackTypeIsBooster(_selectedTrackType)
|
||||
|| TrackTypeIsBooster(_currentTrackCurve & ~RideConstructionSpecialPieceSelected))
|
||||
{
|
||||
|
@ -3051,7 +3050,7 @@ static Widget _rideConstructionWidgets[] = {
|
|||
{
|
||||
_selectedTrackType = tileElement->AsTrack()->GetTrackType();
|
||||
if (TrackTypeHasSpeedSetting(tileElement->AsTrack()->GetTrackType()))
|
||||
_currentBrakeSpeed2 = tileElement->AsTrack()->GetBrakeBoosterSpeed();
|
||||
_currentBrakeSpeed = tileElement->AsTrack()->GetBrakeBoosterSpeed();
|
||||
_currentSeatRotationAngle = tileElement->AsTrack()->GetSeatRotation();
|
||||
}
|
||||
}
|
||||
|
|
|
@ -104,6 +104,13 @@ GameActions::Result TrackPlaceAction::Query() const
|
|||
GameActions::Status::InvalidParameters, STR_RIDE_CONSTRUCTION_CANT_CONSTRUCT_THIS_HERE, STR_ERR_VALUE_OUT_OF_RANGE);
|
||||
}
|
||||
|
||||
if (_brakeSpeed > kMaximumBrakeSpeed)
|
||||
{
|
||||
LOG_WARNING("Invalid speed for track placement, speed = %d", _brakeSpeed);
|
||||
return GameActions::Result(
|
||||
GameActions::Status::InvalidParameters, STR_RIDE_CONSTRUCTION_CANT_CONSTRUCT_THIS_HERE, STR_SPEED_TOO_HIGH);
|
||||
}
|
||||
|
||||
auto res = GameActions::Result();
|
||||
res.Expenditure = ExpenditureType::RideConstruction;
|
||||
res.Position.x = _origin.x + 16;
|
||||
|
|
|
@ -68,6 +68,12 @@ GameActions::Result TrackSetBrakeSpeedAction::QueryExecute(bool isExecuting) con
|
|||
GameActions::Status::InvalidParameters, STR_ERR_INVALID_PARAMETER, STR_ERR_TILE_ELEMENT_NOT_FOUND);
|
||||
}
|
||||
|
||||
if (_brakeSpeed > kMaximumBrakeSpeed)
|
||||
{
|
||||
LOG_WARNING("Invalid speed for track, speed = %d", _brakeSpeed);
|
||||
return GameActions::Result(GameActions::Status::InvalidParameters, STR_SPEED_TOO_HIGH, STR_NONE);
|
||||
}
|
||||
|
||||
if (isExecuting)
|
||||
{
|
||||
GetTrackElementOriginAndApplyChanges(
|
||||
|
|
|
@ -4045,6 +4045,8 @@ enum : uint16_t
|
|||
|
||||
STR_TILE_INSPECTOR_WALL_ANIMATION_IS_BACKWARDS = 6626,
|
||||
|
||||
STR_SPEED_TOO_HIGH = 6627,
|
||||
|
||||
// Have to include resource strings (from scenarios and objects) for the time being now that language is partially working
|
||||
/* MAX_STR_COUNT = 32768 */ // MAX_STR_COUNT - upper limit for number of strings, not the current count strings
|
||||
};
|
||||
|
|
|
@ -74,7 +74,7 @@ TrackPitch _previousTrackPitchEnd;
|
|||
|
||||
CoordsXYZ _previousTrackPiece;
|
||||
|
||||
uint8_t _currentBrakeSpeed2;
|
||||
uint8_t _currentBrakeSpeed;
|
||||
uint8_t _currentSeatRotationAngle;
|
||||
|
||||
CoordsXYZD _unkF440C5;
|
||||
|
|
|
@ -62,7 +62,7 @@ extern TrackPitch _previousTrackPitchEnd;
|
|||
|
||||
extern CoordsXYZ _previousTrackPiece;
|
||||
|
||||
extern uint8_t _currentBrakeSpeed2;
|
||||
extern uint8_t _currentBrakeSpeed;
|
||||
extern uint8_t _currentSeatRotationAngle;
|
||||
|
||||
extern CoordsXYZD _unkF440C5;
|
||||
|
|
|
@ -306,45 +306,45 @@ struct TrackDrawerDescriptor
|
|||
|
||||
struct RideTypeDescriptor
|
||||
{
|
||||
uint8_t Category;
|
||||
uint8_t Category{};
|
||||
/** rct2: 0x0097CC68 */
|
||||
track_type_t StartTrackPiece;
|
||||
track_type_t StartTrackPiece{};
|
||||
TrackDrawerDescriptor TrackPaintFunctions{};
|
||||
TrackDrawerDescriptor InvertedTrackPaintFunctions{};
|
||||
uint64_t Flags;
|
||||
uint64_t Flags{};
|
||||
/** rct2: 0x0097C8AC */
|
||||
uint64_t RideModes;
|
||||
RideMode DefaultMode;
|
||||
uint64_t RideModes{};
|
||||
RideMode DefaultMode{};
|
||||
/** rct2: 0x0097CF40 */
|
||||
RideOperatingSettings OperatingSettings;
|
||||
RideNaming Naming;
|
||||
RideNameConvention NameConvention;
|
||||
const char* EnumName;
|
||||
uint8_t AvailableBreakdowns;
|
||||
RideOperatingSettings OperatingSettings{};
|
||||
RideNaming Naming{};
|
||||
RideNameConvention NameConvention{};
|
||||
const char* EnumName{};
|
||||
uint8_t AvailableBreakdowns{};
|
||||
/** rct2: 0x0097D218 */
|
||||
RideHeights Heights;
|
||||
uint8_t MaxMass;
|
||||
RideHeights Heights{};
|
||||
uint8_t MaxMass{};
|
||||
/** rct2: 0x0097D7C8, 0x0097D7C9, 0x0097D7CA */
|
||||
RideLiftData LiftData;
|
||||
RideLiftData LiftData{};
|
||||
// rct2: 0x0097CD1E
|
||||
RatingTuple RatingsMultipliers;
|
||||
UpkeepCostsDescriptor UpkeepCosts;
|
||||
RatingTuple RatingsMultipliers{};
|
||||
UpkeepCostsDescriptor UpkeepCosts{};
|
||||
// rct2: 0x0097DD78
|
||||
RideBuildCost BuildCosts;
|
||||
money64 DefaultPrices[RCT2::ObjectLimits::MaxShopItemsPerRideEntry];
|
||||
std::string_view DefaultMusic;
|
||||
RideBuildCost BuildCosts{};
|
||||
money64 DefaultPrices[RCT2::ObjectLimits::MaxShopItemsPerRideEntry]{};
|
||||
std::string_view DefaultMusic{};
|
||||
/** rct2: 0x0097D7CB */
|
||||
ShopItemIndex PhotoItem;
|
||||
ShopItemIndex PhotoItem{};
|
||||
/** rct2: 0x0097D21E */
|
||||
uint8_t BonusValue;
|
||||
TrackColourPresetList ColourPresets;
|
||||
RideColourPreview ColourPreview;
|
||||
RideColourKey ColourKey;
|
||||
uint8_t BonusValue{};
|
||||
TrackColourPresetList ColourPresets{};
|
||||
RideColourPreview ColourPreview{};
|
||||
RideColourKey ColourKey{};
|
||||
|
||||
// json name lookup
|
||||
std::string_view Name;
|
||||
std::string_view Name{};
|
||||
|
||||
RideRatingsDescriptor RatingsData;
|
||||
RideRatingsDescriptor RatingsData{};
|
||||
|
||||
UpdateRotatingFunction UpdateRotating = UpdateRotatingDefault;
|
||||
|
||||
|
|
|
@ -22,6 +22,8 @@ constexpr uint8_t kRCT2DefaultBlockBrakeSpeed = 2;
|
|||
constexpr int32_t kBlockBrakeBaseSpeed = 0x20364;
|
||||
constexpr int32_t kBlockBrakeSpeedOffset = kBlockBrakeBaseSpeed - (kRCT2DefaultBlockBrakeSpeed << 16);
|
||||
|
||||
constexpr uint8_t kMaximumBrakeSpeed = 30;
|
||||
|
||||
using track_type_t = uint16_t;
|
||||
|
||||
struct ResultWithMessage;
|
||||
|
|
|
@ -1625,19 +1625,12 @@ constexpr CoordsXY defaultRightQuarterTurn3TilesBoundLengths[4][3] = {
|
|||
},
|
||||
};
|
||||
|
||||
static constexpr int8_t right_quarter_turn_3_tiles_sprite_map[] = {
|
||||
0,
|
||||
-1,
|
||||
1,
|
||||
2,
|
||||
};
|
||||
|
||||
void TrackPaintUtilRightQuarterTurn3TilesPaint(
|
||||
PaintSession& session, int8_t thickness, int16_t height, Direction direction, uint8_t trackSequence,
|
||||
const ImageId colourFlags, const uint32_t sprites[4][3], const CoordsXY offsets[4][3], const CoordsXY boundsLengths[4][3],
|
||||
const CoordsXYZ boundsOffsets[4][3])
|
||||
{
|
||||
int32_t index = right_quarter_turn_3_tiles_sprite_map[trackSequence];
|
||||
int32_t index = kRightQuarterTurn3TilesSpriteMap[trackSequence];
|
||||
if (index < 0)
|
||||
{
|
||||
return;
|
||||
|
@ -1665,7 +1658,7 @@ void TrackPaintUtilRightQuarterTurn3TilesPaint2WithHeightOffset(
|
|||
PaintSession& session, int8_t thickness, int16_t height, Direction direction, uint8_t trackSequence,
|
||||
const ImageId colourFlags, const uint32_t sprites[4][3], int32_t heightOffset)
|
||||
{
|
||||
int8_t sprite = right_quarter_turn_3_tiles_sprite_map[trackSequence];
|
||||
int8_t sprite = kRightQuarterTurn3TilesSpriteMap[trackSequence];
|
||||
if (sprite < 0)
|
||||
{
|
||||
return;
|
||||
|
@ -1753,7 +1746,7 @@ void TrackPaintUtilRightQuarterTurn3TilesPaint3(
|
|||
PaintSession& session, int16_t height, Direction direction, uint8_t trackSequence, const ImageId colourFlags,
|
||||
const SpriteBb sprites[4][3])
|
||||
{
|
||||
int8_t sprite = right_quarter_turn_3_tiles_sprite_map[trackSequence];
|
||||
int8_t sprite = kRightQuarterTurn3TilesSpriteMap[trackSequence];
|
||||
if (sprite < 0)
|
||||
{
|
||||
return;
|
||||
|
@ -1770,7 +1763,7 @@ void TrackPaintUtilRightQuarterTurn3TilesPaint4(
|
|||
PaintSession& session, int16_t height, Direction direction, uint8_t trackSequence, const ImageId colourFlags,
|
||||
const SpriteBb sprites[4][3])
|
||||
{
|
||||
int8_t sprite = right_quarter_turn_3_tiles_sprite_map[trackSequence];
|
||||
int8_t sprite = kRightQuarterTurn3TilesSpriteMap[trackSequence];
|
||||
if (sprite < 0)
|
||||
{
|
||||
return;
|
||||
|
|
|
@ -258,6 +258,8 @@ extern const CoordsXY defaultRightQuarterTurn3TilesOffsets[4][3];
|
|||
extern const CoordsXYZ defaultRightQuarterTurn3TilesBoundOffsets[4][3];
|
||||
extern const CoordsXY defaultRightQuarterTurn3TilesBoundLengths[4][3];
|
||||
|
||||
constexpr int8_t kRightQuarterTurn3TilesSpriteMap[] = { 0, -1, 1, 2 };
|
||||
|
||||
extern const CoordsXY defaultRightHelixUpSmallQuarterBoundLengths[4][3][2];
|
||||
extern const CoordsXYZ defaultRightHelixUpSmallQuarterBoundOffsets[4][3][2];
|
||||
|
||||
|
|
|
@ -1392,9 +1392,7 @@ static void PaintMiniatureRailwayTrackRightQuarterTurn3Tiles(
|
|||
miniature_railway_right_quarter_turn_3_tile_track_floor, nullptr, defaultRightQuarterTurn3TilesBoundLengths,
|
||||
miniature_railway_right_quarter_turn_3_tile_bound_offsets);
|
||||
|
||||
static constexpr int8_t _right_quarter_turn_3_tiles_sprite_map[] = { 0, -1, 1, 2 };
|
||||
|
||||
int32_t index = _right_quarter_turn_3_tiles_sprite_map[trackSequence];
|
||||
int32_t index = kRightQuarterTurn3TilesSpriteMap[trackSequence];
|
||||
|
||||
auto imageId = session.TrackColours.WithIndex(
|
||||
miniature_railway_track_pieces_flat_quarter_turn_3_tiles[direction][index]);
|
||||
|
|
|
@ -372,7 +372,7 @@ bool WindowRideConstructionUpdateState(
|
|||
|
||||
if (TrackTypeHasSpeedSetting(trackType))
|
||||
{
|
||||
properties = _currentBrakeSpeed2;
|
||||
properties = _currentBrakeSpeed;
|
||||
}
|
||||
else
|
||||
{
|
||||
|
|
Loading…
Reference in New Issue