1
0
mirror of https://github.com/OpenRCT2/OpenRCT2 synced 2026-01-21 05:53:02 +01:00
Files
OpenRCT2/src/paint/map_element/map_element.h
2016-10-09 15:24:42 +02:00

132 lines
4.0 KiB
C

#pragma region Copyright (c) 2014-2016 OpenRCT2 Developers
/*****************************************************************************
* OpenRCT2, an open source clone of Roller Coaster Tycoon 2.
*
* OpenRCT2 is the work of many authors, a full list can be found in contributors.md
* For more information, visit https://github.com/OpenRCT2/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.
*
* A full copy of the GNU General Public License can be found in licence.txt
*****************************************************************************/
#pragma endregion
#ifndef _PAINT_MAP_ELEMENT_H
#define _PAINT_MAP_ELEMENT_H
#include "../../addresses.h"
#include "../../common.h"
#include "../../world/map.h"
typedef enum edge
{
EDGE_NE = (1 << 0),
EDGE_SE = (1 << 1),
EDGE_SW = (1 << 2),
EDGE_NW = (1 << 3),
EDGE_BOTTOMLEFT = EDGE_SW,
EDGE_BOTTOMRIGHT = EDGE_SE,
EDGE_TOPLEFT = EDGE_NW,
EDGE_TOPRIGHT = EDGE_NE
} edge;
enum
{
SEGMENT_B4 = (1 << 0), // 0
SEGMENT_CC = (1 << 1), // 6
SEGMENT_BC = (1 << 2), // 2
SEGMENT_D4 = (1 << 3), // 8
SEGMENT_C0 = (1 << 4), // 3
SEGMENT_D0 = (1 << 5), // 7
SEGMENT_B8 = (1 << 6), // 1
SEGMENT_C8 = (1 << 7), // 5
SEGMENT_C4 = (1 << 8), // 4
};
extern const int SEGMENTS_ALL;
extern const uint16 segment_offsets[9];
enum
{
TUNNEL_0 = 0,
TUNNEL_1 = 1,
TUNNEL_2 = 2,
TUNNEL_3 = 3,
TUNNEL_4 = 4,
TUNNEL_5 = 5,
TUNNEL_6 = 6,
TUNNEL_7 = 7,
TUNNEL_8 = 8,
TUNNEL_9 = 9,
TUNNEL_10 = 0x0A,
TUNNEL_11 = 0x0B,
TUNNEL_12 = 0x0C,
TUNNEL_13 = 0x0D,
TUNNEL_14 = 0x0E,
TUNNEL_15 = 0x0F,
};
typedef struct tunnel_entry {
uint8 height;
uint8 type;
} tunnel_entry;
enum
{
G141E9DB_FLAG_1 = 1,
G141E9DB_FLAG_2 = 2,
};
#ifdef NO_RCT2
extern uint8 g141E9DB;
extern uint16 gUnk141E9DC;
extern rct_xy16 gPaintMapPosition;
extern bool gDidPassSurface;
extern rct_map_element * gSurfaceElement;
extern tunnel_entry gLeftTunnels[65];
extern uint8 gLeftTunnelCount;
extern tunnel_entry gRightTunnels[65];
extern uint8 gRightTunnelCount;
extern uint8 gVerticalTunnelHeight;
#else
#define g141E9DB RCT2_GLOBAL(0x0141E9DB, uint8)
#define gUnk141E9DC RCT2_GLOBAL(0x0141E9DC, uint16)
#define gPaintMapPosition RCT2_GLOBAL(0x009DE574, rct_xy16)
#define gDidPassSurface RCT2_GLOBAL(0x009DE57C, bool)
#define gSurfaceElement RCT2_GLOBAL(0x009E3250, rct_map_element *)
#define gLeftTunnels RCT2_ADDRESS(0x009E3138, tunnel_entry)
#define gLeftTunnelCount RCT2_GLOBAL(0x0141F56A, uint8)
#define gRightTunnels RCT2_ADDRESS(0x009E30B6, tunnel_entry)
#define gRightTunnelCount RCT2_GLOBAL(0x0141F56B, uint8)
#define gVerticalTunnelHeight RCT2_GLOBAL(0x009E323C, uint8)
#endif
extern bool gShowSupportSegmentHeights;
extern const rct_xy16 BannerBoundBoxes[][2];
void paint_util_push_tunnel_left(uint16 height, uint8 type);
void paint_util_push_tunnel_right(uint16 height, uint8 type);
void paint_util_set_vertical_tunnel(uint16 height);
void paint_util_set_general_support_height(sint16 height, uint8 slope);
void paint_util_force_set_general_support_height(sint16 height, uint8 slope);
void paint_util_set_segment_support_height(int segments, uint16 height, uint8 slope);
uint16 paint_util_rotate_segments(uint16 segments, uint8 rotation);
void map_element_paint_setup(int x, int y);
void entrance_paint(uint8 direction, int height, rct_map_element* map_element);
void banner_paint(uint8 direction, int height, rct_map_element* map_element);
void surface_paint(uint8 direction, uint16 height, rct_map_element *mapElement);
void path_paint(uint8 direction, uint16 height, rct_map_element *mapElement);
void scenery_paint(uint8 direction, int height, rct_map_element* mapElement);
void fence_paint(uint8 direction, int height, rct_map_element* mapElement);
void scenery_multiple_paint(uint8 direction, uint16 height, rct_map_element *mapElement);
void track_paint(uint8 direction, int height, rct_map_element *mapElement);
#endif