Files @ r25827:5a9ded1a0c1a
Branch filter:

Location: cpp/openttd-patchpack/source/src/town_type.h - annotation

Patric Stout
Feature: allow the use of STUN to connect client and server together

This method doesn't require port-forwarding to be used, and works for
most common NAT routers in home setups. But, for sure it doesn't work
for all setups, and not everyone will be able to use this.
r12768:980ae0491352
r12768:980ae0491352
r12768:980ae0491352
r12768:980ae0491352
r12768:980ae0491352
r12768:980ae0491352
r12768:980ae0491352
r8213:466402e95092
r8213:466402e95092
r8213:466402e95092
r8213:466402e95092
r8213:466402e95092
r8213:466402e95092
r8213:466402e95092
r8213:466402e95092
r8213:466402e95092
r8213:466402e95092
r11012:e1373ff6cc04
r11012:e1373ff6cc04
r14872:dfad0b6fd384
r14872:dfad0b6fd384
r14872:dfad0b6fd384
r14872:dfad0b6fd384
r14873:15b9b1a863e0
r14873:15b9b1a863e0
r8213:466402e95092
r15027:bb71fdfcc554
r8213:466402e95092
r15173:a59afd6301a6
r8213:466402e95092
r8213:466402e95092
r8213:466402e95092
r8213:466402e95092
r8213:466402e95092
r8213:466402e95092
r8213:466402e95092
r8213:466402e95092
r8213:466402e95092
r8213:466402e95092
r8213:466402e95092
r8213:466402e95092
r8213:466402e95092
r8213:466402e95092
r8814:8b2b17bb64fc
r8814:8b2b17bb64fc
r8213:466402e95092
r8213:466402e95092
r8213:466402e95092
r8213:466402e95092
r8213:466402e95092
r8213:466402e95092
r10208:ef8fcc3dc4ca
r8814:8b2b17bb64fc
r10208:ef8fcc3dc4ca
r23140:4e420922ab96
r8814:8b2b17bb64fc
r11874:0c1573de8851
r11874:0c1573de8851
r11874:0c1573de8851
r11874:0c1573de8851
r11874:0c1573de8851
r8213:466402e95092
r11874:0c1573de8851
r11874:0c1573de8851
r11874:0c1573de8851
r11874:0c1573de8851
r11874:0c1573de8851
r11874:0c1573de8851
r11874:0c1573de8851
r8213:466402e95092
r8213:466402e95092
r8213:466402e95092
r8213:466402e95092
r8213:466402e95092
r8213:466402e95092
r8213:466402e95092
r23664:6060dcf415e4
r23664:6060dcf415e4
r11000:d03bad32156f
r11000:d03bad32156f
r8213:466402e95092
r8213:466402e95092
r8213:466402e95092
r8213:466402e95092
r8796:7940548db691
r8796:7940548db691
r8213:466402e95092
r8213:466402e95092
r15027:bb71fdfcc554
r8213:466402e95092
r23663:3430a8f404c0
r23663:3430a8f404c0
r13746:3eeb0ceed378
r13746:3eeb0ceed378
r13746:3eeb0ceed378
r13746:3eeb0ceed378
r13746:3eeb0ceed378
r13746:3eeb0ceed378
r13746:3eeb0ceed378
r23403:d1046b8440da
r23403:d1046b8440da
r23403:d1046b8440da
r23403:d1046b8440da
r23403:d1046b8440da
r23403:d1046b8440da
r23403:d1046b8440da
r23403:d1046b8440da
r17569:79cc833a8f35
r9913:5ef437117969
r18387:14892a15ab1a
r18387:14892a15ab1a
r18387:14892a15ab1a
r18387:14892a15ab1a
r18387:14892a15ab1a
r18387:14892a15ab1a
r18387:14892a15ab1a
r18387:14892a15ab1a
r18387:14892a15ab1a
r18387:14892a15ab1a
r18387:14892a15ab1a
r18387:14892a15ab1a
r18387:14892a15ab1a
r18387:14892a15ab1a
r18387:14892a15ab1a
r18387:14892a15ab1a
r18387:14892a15ab1a
r18387:14892a15ab1a
r8213:466402e95092
/*
 * This file is part of OpenTTD.
 * OpenTTD 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, version 2.
 * OpenTTD 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 OpenTTD. If not, see <http://www.gnu.org/licenses/>.
 */

/** @file town_type.h Types related to towns. */

#ifndef TOWN_TYPE_H
#define TOWN_TYPE_H

#include "core/enum_type.hpp"

typedef uint16 TownID;
struct Town;

/** Supported initial town sizes */
enum TownSize {
	TSZ_SMALL,  ///< Small town.
	TSZ_MEDIUM, ///< Medium town.
	TSZ_LARGE,  ///< Large town.
	TSZ_RANDOM, ///< Random size, bigger than small, smaller than large.

	TSZ_END,    ///< Number of available town sizes.
};
template <> struct EnumPropsT<TownSize> : MakeEnumPropsT<TownSize, byte, TSZ_SMALL, TSZ_END, TSZ_END, 2> {};

enum Ratings {
	/* These refer to the maximums, so Appalling is -1000 to -400
	 * MAXIMUM RATINGS BOUNDARIES */
	RATING_MINIMUM     = -1000,
	RATING_APPALLING   =  -400,
	RATING_VERYPOOR    =  -200,
	RATING_POOR        =     0,
	RATING_MEDIOCRE    =   200,
	RATING_GOOD        =   400,
	RATING_VERYGOOD    =   600,
	RATING_EXCELLENT   =   800,
	RATING_OUTSTANDING =  1000,         ///< OUTSTANDING

	RATING_MAXIMUM = RATING_OUTSTANDING,

	RATING_INITIAL = 500, ///< initial rating

	/* RATINGS AFFECTING NUMBERS */
	RATING_TREE_DOWN_STEP = -35,
	RATING_TREE_MINIMUM   = RATING_MINIMUM,
	RATING_TREE_UP_STEP   = 7,
	RATING_TREE_MAXIMUM   = 220,

	RATING_GROWTH_UP_STEP    =   5, ///< when a town grows, all companies have rating increased a bit ...
	RATING_GROWTH_MAXIMUM    = RATING_MEDIOCRE, ///< ... up to RATING_MEDIOCRE
	RATING_STATION_UP_STEP   =  12, ///< when a town grows, company gains reputation for all well serviced stations ...
	RATING_STATION_DOWN_STEP = -15, ///< ... but loses for badly serviced stations

	RATING_TUNNEL_BRIDGE_DOWN_STEP = -250, ///< penalty for removing town owned tunnel or bridge
	RATING_TUNNEL_BRIDGE_MINIMUM   =    0, ///< minimum rating after removing tunnel or bridge
	RATING_TUNNEL_BRIDGE_NEEDED_PERMISSIVE = 144, ///< rating needed, "Permissive" difficulty settings
	RATING_TUNNEL_BRIDGE_NEEDED_NEUTRAL    = 208, ///< "Neutral"
	RATING_TUNNEL_BRIDGE_NEEDED_HOSTILE    = 400, ///< "Hostile"

	RATING_ROAD_DOWN_STEP_INNER =  -50, ///< removing a roadpiece in the middle
	RATING_ROAD_DOWN_STEP_EDGE  =  -18, ///< removing a roadpiece at the edge
	RATING_ROAD_MINIMUM         = -100, ///< minimum rating after removing town owned road
	RATING_ROAD_NEEDED_PERMISSIVE =  16, ///< rating needed, "Permissive" difficulty settings
	RATING_ROAD_NEEDED_NEUTRAL    =  64, ///< "Neutral"
	RATING_ROAD_NEEDED_HOSTILE    = 112, ///< "Hostile"

	RATING_HOUSE_MINIMUM  = RATING_MINIMUM,

	RATING_BRIBE_UP_STEP = 200,
	RATING_BRIBE_MAXIMUM = 800,
	RATING_BRIBE_DOWN_TO = -50        // XXX SHOULD BE SOMETHING LOWER?
};

/** Town Layouts. It needs to be 8bits, because we save and load it as such */
enum TownLayout : byte {
	TL_BEGIN = 0,
	TL_ORIGINAL = 0,     ///< Original algorithm (min. 1 distance between roads)
	TL_BETTER_ROADS,     ///< Extended original algorithm (min. 2 distance between roads)
	TL_2X2_GRID,         ///< Geometric 2x2 grid algorithm
	TL_3X3_GRID,         ///< Geometric 3x3 grid algorithm

	TL_RANDOM,           ///< Random town layout

	NUM_TLS,             ///< Number of town layouts
};
template <> struct EnumPropsT<TownLayout> : MakeEnumPropsT<TownLayout, byte, TL_BEGIN, NUM_TLS, NUM_TLS, 3> {};

/** Town founding setting values. It needs to be 8bits, because we save and load it as such */
enum TownFounding : byte {
	TF_BEGIN = 0,     ///< Used for iterations and limit testing
	TF_FORBIDDEN = 0, ///< Forbidden
	TF_ALLOWED,       ///< Allowed
	TF_CUSTOM_LAYOUT, ///< Allowed, with custom town layout
	TF_END,           ///< Used for iterations and limit testing
};

/** Town cargo generation modes */
enum TownCargoGenMode : byte {
	TCGM_BEGIN = 0,
	TCGM_ORIGINAL = 0,  ///< Original algorithm (quadratic cargo by population)
	TCGM_BITCOUNT,      ///< Bit-counted algorithm (normal distribution from individual house population)
	TCGM_END,
};

static const uint MAX_LENGTH_TOWN_NAME_CHARS = 32; ///< The maximum length of a town name in characters including '\0'

/** Store the maximum and actually transported cargo amount for the current and the last month. */
template <typename Tstorage>
struct TransportedCargoStat {
	Tstorage old_max;  ///< Maximum amount last month
	Tstorage new_max;  ///< Maximum amount this month
	Tstorage old_act;  ///< Actually transported last month
	Tstorage new_act;  ///< Actually transported this month

	TransportedCargoStat() : old_max(0), new_max(0), old_act(0), new_act(0) {}

	/** Update stats for a new month. */
	void NewMonth()
	{
		this->old_max = this->new_max; this->new_max = 0;
		this->old_act = this->new_act; this->new_act = 0;
	}
};

#endif /* TOWN_TYPE_H */