src/group_cmd.cpp
author glx
Fri, 13 Jun 2008 15:43:39 +0000
branchnoai
changeset 10955 56b381e5253f
parent 10455 22c441f5adf9
child 11057 188a9ca6d8de
permissions -rw-r--r--
(svn r13509) [NoAI] -Sync: with trunk r13472:13508.
9624
b71483f2330f (svn r9915) [NoAI] -Sync with trunk -r9815:9914
glx
parents:
diff changeset
     1
/* $Id$ */
b71483f2330f (svn r9915) [NoAI] -Sync with trunk -r9815:9914
glx
parents:
diff changeset
     2
b71483f2330f (svn r9915) [NoAI] -Sync with trunk -r9815:9914
glx
parents:
diff changeset
     3
/** @file group_cmd.cpp Handling of the engine groups */
b71483f2330f (svn r9915) [NoAI] -Sync with trunk -r9815:9914
glx
parents:
diff changeset
     4
b71483f2330f (svn r9915) [NoAI] -Sync with trunk -r9815:9914
glx
parents:
diff changeset
     5
#include "stdafx.h"
b71483f2330f (svn r9915) [NoAI] -Sync with trunk -r9815:9914
glx
parents:
diff changeset
     6
#include "openttd.h"
9631
8a2d1c2ceb88 (svn r10461) [NoAI] -Sync with trunk r10349:r10460.
rubidium
parents: 9629
diff changeset
     7
#include "variables.h"
9723
eee46cb39750 (svn r11796) [NoAI] -Sync: with trunk r11502:11795.
rubidium
parents: 9722
diff changeset
     8
#include "command_func.h"
9624
b71483f2330f (svn r9915) [NoAI] -Sync with trunk -r9815:9914
glx
parents:
diff changeset
     9
#include "saveload.h"
b71483f2330f (svn r9915) [NoAI] -Sync with trunk -r9815:9914
glx
parents:
diff changeset
    10
#include "debug.h"
b71483f2330f (svn r9915) [NoAI] -Sync with trunk -r9815:9914
glx
parents:
diff changeset
    11
#include "group.h"
b71483f2330f (svn r9915) [NoAI] -Sync with trunk -r9815:9914
glx
parents:
diff changeset
    12
#include "train.h"
b71483f2330f (svn r9915) [NoAI] -Sync with trunk -r9815:9914
glx
parents:
diff changeset
    13
#include "aircraft.h"
b71483f2330f (svn r9915) [NoAI] -Sync with trunk -r9815:9914
glx
parents:
diff changeset
    14
#include "vehicle_gui.h"
9723
eee46cb39750 (svn r11796) [NoAI] -Sync: with trunk r11502:11795.
rubidium
parents: 9722
diff changeset
    15
#include "strings_func.h"
eee46cb39750 (svn r11796) [NoAI] -Sync: with trunk r11502:11795.
rubidium
parents: 9722
diff changeset
    16
#include "functions.h"
eee46cb39750 (svn r11796) [NoAI] -Sync: with trunk r11502:11795.
rubidium
parents: 9722
diff changeset
    17
#include "window_func.h"
eee46cb39750 (svn r11796) [NoAI] -Sync: with trunk r11502:11795.
rubidium
parents: 9722
diff changeset
    18
#include "vehicle_func.h"
eee46cb39750 (svn r11796) [NoAI] -Sync: with trunk r11502:11795.
rubidium
parents: 9722
diff changeset
    19
#include "autoreplace_base.h"
eee46cb39750 (svn r11796) [NoAI] -Sync: with trunk r11502:11795.
rubidium
parents: 9722
diff changeset
    20
#include "autoreplace_func.h"
eee46cb39750 (svn r11796) [NoAI] -Sync: with trunk r11502:11795.
rubidium
parents: 9722
diff changeset
    21
#include "string_func.h"
9724
b39bc69bb2f2 (svn r12051) [NoAI] -Sync: with trunk (r11795:12050).
rubidium
parents: 9723
diff changeset
    22
#include "player_func.h"
9837
c9ec4f82e0d0 (svn r12503) [NoAI] -Sync: with trunk r12461:12501.
rubidium
parents: 9800
diff changeset
    23
#include "order_func.h"
10142
56ee7da4ad56 (svn r12673) [NoAI] -Sync: with trunk r12596:12672. Note that due to the order rewrite AIOrder.ChangeOrder does currently not work as expected.
rubidium
parents: 9837
diff changeset
    24
#include "oldpool_func.h"
10455
22c441f5adf9 (svn r12997) [NoAI] -Sync: with trunk r12895:12996.
rubidium
parents: 10355
diff changeset
    25
#include "core/alloc_func.hpp"
9724
b39bc69bb2f2 (svn r12051) [NoAI] -Sync: with trunk (r11795:12050).
rubidium
parents: 9723
diff changeset
    26
b39bc69bb2f2 (svn r12051) [NoAI] -Sync: with trunk (r11795:12050).
rubidium
parents: 9723
diff changeset
    27
#include "table/strings.h"
9624
b71483f2330f (svn r9915) [NoAI] -Sync with trunk -r9815:9914
glx
parents:
diff changeset
    28
b71483f2330f (svn r9915) [NoAI] -Sync with trunk -r9815:9914
glx
parents:
diff changeset
    29
/**
b71483f2330f (svn r9915) [NoAI] -Sync with trunk -r9815:9914
glx
parents:
diff changeset
    30
 * Update the num engines of a groupID. Decrease the old one and increase the new one
b71483f2330f (svn r9915) [NoAI] -Sync with trunk -r9815:9914
glx
parents:
diff changeset
    31
 * @note called in SetTrainGroupID and UpdateTrainGroupID
b71483f2330f (svn r9915) [NoAI] -Sync with trunk -r9815:9914
glx
parents:
diff changeset
    32
 * @param i     EngineID we have to update
b71483f2330f (svn r9915) [NoAI] -Sync with trunk -r9815:9914
glx
parents:
diff changeset
    33
 * @param old_g index of the old group
b71483f2330f (svn r9915) [NoAI] -Sync with trunk -r9815:9914
glx
parents:
diff changeset
    34
 * @param new_g index of the new group
b71483f2330f (svn r9915) [NoAI] -Sync with trunk -r9815:9914
glx
parents:
diff changeset
    35
 */
b71483f2330f (svn r9915) [NoAI] -Sync with trunk -r9815:9914
glx
parents:
diff changeset
    36
static inline void UpdateNumEngineGroup(EngineID i, GroupID old_g, GroupID new_g)
b71483f2330f (svn r9915) [NoAI] -Sync with trunk -r9815:9914
glx
parents:
diff changeset
    37
{
b71483f2330f (svn r9915) [NoAI] -Sync with trunk -r9815:9914
glx
parents:
diff changeset
    38
	if (old_g != new_g) {
b71483f2330f (svn r9915) [NoAI] -Sync with trunk -r9815:9914
glx
parents:
diff changeset
    39
		/* Decrease the num engines of EngineID i of the old group if it's not the default one */
b71483f2330f (svn r9915) [NoAI] -Sync with trunk -r9815:9914
glx
parents:
diff changeset
    40
		if (!IsDefaultGroupID(old_g) && IsValidGroupID(old_g)) GetGroup(old_g)->num_engines[i]--;
b71483f2330f (svn r9915) [NoAI] -Sync with trunk -r9815:9914
glx
parents:
diff changeset
    41
10249
58810805030e (svn r12781) [NoAI] -Sync: with trunk r12711:12780.
rubidium
parents: 10142
diff changeset
    42
		/* Increase the num engines of EngineID i of the new group if it's not the default one */
9624
b71483f2330f (svn r9915) [NoAI] -Sync with trunk -r9815:9914
glx
parents:
diff changeset
    43
		if (!IsDefaultGroupID(new_g) && IsValidGroupID(new_g)) GetGroup(new_g)->num_engines[i]++;
b71483f2330f (svn r9915) [NoAI] -Sync with trunk -r9815:9914
glx
parents:
diff changeset
    44
	}
b71483f2330f (svn r9915) [NoAI] -Sync with trunk -r9815:9914
glx
parents:
diff changeset
    45
}
b71483f2330f (svn r9915) [NoAI] -Sync with trunk -r9815:9914
glx
parents:
diff changeset
    46
b71483f2330f (svn r9915) [NoAI] -Sync with trunk -r9815:9914
glx
parents:
diff changeset
    47
9694
e72987579514 (svn r10775) [NoAI] -Sync: with trunk r10535:r10774.
rubidium
parents: 9641
diff changeset
    48
DEFINE_OLD_POOL_GENERIC(Group, Group)
e72987579514 (svn r10775) [NoAI] -Sync: with trunk r10535:r10774.
rubidium
parents: 9641
diff changeset
    49
e72987579514 (svn r10775) [NoAI] -Sync: with trunk r10535:r10774.
rubidium
parents: 9641
diff changeset
    50
9724
b39bc69bb2f2 (svn r12051) [NoAI] -Sync: with trunk (r11795:12050).
rubidium
parents: 9723
diff changeset
    51
Group::Group(PlayerID owner)
9624
b71483f2330f (svn r9915) [NoAI] -Sync with trunk -r9815:9914
glx
parents:
diff changeset
    52
{
9724
b39bc69bb2f2 (svn r12051) [NoAI] -Sync: with trunk (r11795:12050).
rubidium
parents: 9723
diff changeset
    53
	this->owner = owner;
10455
22c441f5adf9 (svn r12997) [NoAI] -Sync: with trunk r12895:12996.
rubidium
parents: 10355
diff changeset
    54
	this->num_engines = CallocT<uint16>(GetEnginePoolSize());
9624
b71483f2330f (svn r9915) [NoAI] -Sync with trunk -r9815:9914
glx
parents:
diff changeset
    55
}
b71483f2330f (svn r9915) [NoAI] -Sync with trunk -r9815:9914
glx
parents:
diff changeset
    56
9694
e72987579514 (svn r10775) [NoAI] -Sync: with trunk r10535:r10774.
rubidium
parents: 9641
diff changeset
    57
Group::~Group()
9624
b71483f2330f (svn r9915) [NoAI] -Sync with trunk -r9815:9914
glx
parents:
diff changeset
    58
{
9724
b39bc69bb2f2 (svn r12051) [NoAI] -Sync: with trunk (r11795:12050).
rubidium
parents: 9723
diff changeset
    59
	free(this->name);
b39bc69bb2f2 (svn r12051) [NoAI] -Sync: with trunk (r11795:12050).
rubidium
parents: 9723
diff changeset
    60
	this->owner = INVALID_PLAYER;
10455
22c441f5adf9 (svn r12997) [NoAI] -Sync: with trunk r12895:12996.
rubidium
parents: 10355
diff changeset
    61
	free(this->num_engines);
9694
e72987579514 (svn r10775) [NoAI] -Sync: with trunk r10535:r10774.
rubidium
parents: 9641
diff changeset
    62
}
9624
b71483f2330f (svn r9915) [NoAI] -Sync with trunk -r9815:9914
glx
parents:
diff changeset
    63
9694
e72987579514 (svn r10775) [NoAI] -Sync: with trunk r10535:r10774.
rubidium
parents: 9641
diff changeset
    64
bool Group::IsValid() const
e72987579514 (svn r10775) [NoAI] -Sync: with trunk r10535:r10774.
rubidium
parents: 9641
diff changeset
    65
{
9724
b39bc69bb2f2 (svn r12051) [NoAI] -Sync: with trunk (r11795:12050).
rubidium
parents: 9723
diff changeset
    66
	return this->owner != INVALID_PLAYER;
9624
b71483f2330f (svn r9915) [NoAI] -Sync with trunk -r9815:9914
glx
parents:
diff changeset
    67
}
b71483f2330f (svn r9915) [NoAI] -Sync with trunk -r9815:9914
glx
parents:
diff changeset
    68
b71483f2330f (svn r9915) [NoAI] -Sync with trunk -r9815:9914
glx
parents:
diff changeset
    69
void InitializeGroup(void)
b71483f2330f (svn r9915) [NoAI] -Sync with trunk -r9815:9914
glx
parents:
diff changeset
    70
{
9694
e72987579514 (svn r10775) [NoAI] -Sync: with trunk r10535:r10774.
rubidium
parents: 9641
diff changeset
    71
	_Group_pool.CleanPool();
e72987579514 (svn r10775) [NoAI] -Sync: with trunk r10535:r10774.
rubidium
parents: 9641
diff changeset
    72
	_Group_pool.AddBlockToPool();
9624
b71483f2330f (svn r9915) [NoAI] -Sync with trunk -r9815:9914
glx
parents:
diff changeset
    73
}
b71483f2330f (svn r9915) [NoAI] -Sync with trunk -r9815:9914
glx
parents:
diff changeset
    74
b71483f2330f (svn r9915) [NoAI] -Sync with trunk -r9815:9914
glx
parents:
diff changeset
    75
b71483f2330f (svn r9915) [NoAI] -Sync with trunk -r9815:9914
glx
parents:
diff changeset
    76
/**
9641
855e32c08c9b (svn r10533) [NoAI] -Sync with trunk r10460:r10532.
truelight
parents: 9631
diff changeset
    77
 * Create a new vehicle group.
9624
b71483f2330f (svn r9915) [NoAI] -Sync with trunk -r9815:9914
glx
parents:
diff changeset
    78
 * @param tile unused
b71483f2330f (svn r9915) [NoAI] -Sync with trunk -r9815:9914
glx
parents:
diff changeset
    79
 * @param p1   vehicle type
b71483f2330f (svn r9915) [NoAI] -Sync with trunk -r9815:9914
glx
parents:
diff changeset
    80
 * @param p2   unused
b71483f2330f (svn r9915) [NoAI] -Sync with trunk -r9815:9914
glx
parents:
diff changeset
    81
 */
9629
66dde6412125 (svn r10350) [NoAI] -Sync with trunk r10194:10349
glx
parents: 9625
diff changeset
    82
CommandCost CmdCreateGroup(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
9624
b71483f2330f (svn r9915) [NoAI] -Sync with trunk -r9815:9914
glx
parents:
diff changeset
    83
{
b71483f2330f (svn r9915) [NoAI] -Sync with trunk -r9815:9914
glx
parents:
diff changeset
    84
	VehicleType vt = (VehicleType)p1;
b71483f2330f (svn r9915) [NoAI] -Sync with trunk -r9815:9914
glx
parents:
diff changeset
    85
	if (!IsPlayerBuildableVehicleType(vt)) return CMD_ERROR;
b71483f2330f (svn r9915) [NoAI] -Sync with trunk -r9815:9914
glx
parents:
diff changeset
    86
10355
ee4b5f7a5bf2 (svn r12896) [NoAI] -Sync: with trunk r12824:r12895.
rubidium
parents: 10249
diff changeset
    87
	if (!Group::CanAllocateItem()) return CMD_ERROR;
9694
e72987579514 (svn r10775) [NoAI] -Sync: with trunk r10535:r10774.
rubidium
parents: 9641
diff changeset
    88
9624
b71483f2330f (svn r9915) [NoAI] -Sync with trunk -r9815:9914
glx
parents:
diff changeset
    89
	if (flags & DC_EXEC) {
10355
ee4b5f7a5bf2 (svn r12896) [NoAI] -Sync: with trunk r12824:r12895.
rubidium
parents: 10249
diff changeset
    90
		Group *g = new Group(_current_player);
9624
b71483f2330f (svn r9915) [NoAI] -Sync with trunk -r9815:9914
glx
parents:
diff changeset
    91
		g->replace_protection = false;
b71483f2330f (svn r9915) [NoAI] -Sync with trunk -r9815:9914
glx
parents:
diff changeset
    92
		g->vehicle_type = vt;
b71483f2330f (svn r9915) [NoAI] -Sync with trunk -r9815:9914
glx
parents:
diff changeset
    93
10355
ee4b5f7a5bf2 (svn r12896) [NoAI] -Sync: with trunk r12824:r12895.
rubidium
parents: 10249
diff changeset
    94
		InvalidateWindowData(GetWindowClassForVehicleType(vt), (vt << 11) | VLW_GROUP_LIST | _current_player);
9624
b71483f2330f (svn r9915) [NoAI] -Sync with trunk -r9815:9914
glx
parents:
diff changeset
    95
	}
b71483f2330f (svn r9915) [NoAI] -Sync with trunk -r9815:9914
glx
parents:
diff changeset
    96
9629
66dde6412125 (svn r10350) [NoAI] -Sync with trunk r10194:10349
glx
parents: 9625
diff changeset
    97
	return CommandCost();
9624
b71483f2330f (svn r9915) [NoAI] -Sync with trunk -r9815:9914
glx
parents:
diff changeset
    98
}
b71483f2330f (svn r9915) [NoAI] -Sync with trunk -r9815:9914
glx
parents:
diff changeset
    99
b71483f2330f (svn r9915) [NoAI] -Sync with trunk -r9815:9914
glx
parents:
diff changeset
   100
b71483f2330f (svn r9915) [NoAI] -Sync with trunk -r9815:9914
glx
parents:
diff changeset
   101
/**
9641
855e32c08c9b (svn r10533) [NoAI] -Sync with trunk r10460:r10532.
truelight
parents: 9631
diff changeset
   102
 * Add all vehicles in the given group to the default group and then deletes the group.
9624
b71483f2330f (svn r9915) [NoAI] -Sync with trunk -r9815:9914
glx
parents:
diff changeset
   103
 * @param tile unused
b71483f2330f (svn r9915) [NoAI] -Sync with trunk -r9815:9914
glx
parents:
diff changeset
   104
 * @param p1   index of array group
b71483f2330f (svn r9915) [NoAI] -Sync with trunk -r9815:9914
glx
parents:
diff changeset
   105
 *      - p1 bit 0-15 : GroupID
b71483f2330f (svn r9915) [NoAI] -Sync with trunk -r9815:9914
glx
parents:
diff changeset
   106
 * @param p2   unused
b71483f2330f (svn r9915) [NoAI] -Sync with trunk -r9815:9914
glx
parents:
diff changeset
   107
 */
9629
66dde6412125 (svn r10350) [NoAI] -Sync with trunk r10194:10349
glx
parents: 9625
diff changeset
   108
CommandCost CmdDeleteGroup(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
9624
b71483f2330f (svn r9915) [NoAI] -Sync with trunk -r9815:9914
glx
parents:
diff changeset
   109
{
b71483f2330f (svn r9915) [NoAI] -Sync with trunk -r9815:9914
glx
parents:
diff changeset
   110
	if (!IsValidGroupID(p1)) return CMD_ERROR;
b71483f2330f (svn r9915) [NoAI] -Sync with trunk -r9815:9914
glx
parents:
diff changeset
   111
b71483f2330f (svn r9915) [NoAI] -Sync with trunk -r9815:9914
glx
parents:
diff changeset
   112
	Group *g = GetGroup(p1);
b71483f2330f (svn r9915) [NoAI] -Sync with trunk -r9815:9914
glx
parents:
diff changeset
   113
	if (g->owner != _current_player) return CMD_ERROR;
b71483f2330f (svn r9915) [NoAI] -Sync with trunk -r9815:9914
glx
parents:
diff changeset
   114
b71483f2330f (svn r9915) [NoAI] -Sync with trunk -r9815:9914
glx
parents:
diff changeset
   115
	if (flags & DC_EXEC) {
b71483f2330f (svn r9915) [NoAI] -Sync with trunk -r9815:9914
glx
parents:
diff changeset
   116
		Vehicle *v;
b71483f2330f (svn r9915) [NoAI] -Sync with trunk -r9815:9914
glx
parents:
diff changeset
   117
b71483f2330f (svn r9915) [NoAI] -Sync with trunk -r9815:9914
glx
parents:
diff changeset
   118
		/* Add all vehicles belong to the group to the default group */
b71483f2330f (svn r9915) [NoAI] -Sync with trunk -r9815:9914
glx
parents:
diff changeset
   119
		FOR_ALL_VEHICLES(v) {
b71483f2330f (svn r9915) [NoAI] -Sync with trunk -r9815:9914
glx
parents:
diff changeset
   120
			if (v->group_id == g->index && v->type == g->vehicle_type) v->group_id = DEFAULT_GROUP;
b71483f2330f (svn r9915) [NoAI] -Sync with trunk -r9815:9914
glx
parents:
diff changeset
   121
		}
b71483f2330f (svn r9915) [NoAI] -Sync with trunk -r9815:9914
glx
parents:
diff changeset
   122
9800
ab08ca2a2018 (svn r12306) [NoAI] -Sync with trunk r12209:12304
glx
parents: 9724
diff changeset
   123
		/* Update backupped orders if needed */
ab08ca2a2018 (svn r12306) [NoAI] -Sync with trunk r12209:12304
glx
parents: 9724
diff changeset
   124
		if (_backup_orders_data.group == g->index) _backup_orders_data.group = DEFAULT_GROUP;
ab08ca2a2018 (svn r12306) [NoAI] -Sync with trunk r12209:12304
glx
parents: 9724
diff changeset
   125
9624
b71483f2330f (svn r9915) [NoAI] -Sync with trunk -r9815:9914
glx
parents:
diff changeset
   126
		/* If we set an autoreplace for the group we delete, remove it. */
b71483f2330f (svn r9915) [NoAI] -Sync with trunk -r9815:9914
glx
parents:
diff changeset
   127
		if (_current_player < MAX_PLAYERS) {
b71483f2330f (svn r9915) [NoAI] -Sync with trunk -r9815:9914
glx
parents:
diff changeset
   128
			Player *p;
b71483f2330f (svn r9915) [NoAI] -Sync with trunk -r9815:9914
glx
parents:
diff changeset
   129
			EngineRenew *er;
b71483f2330f (svn r9915) [NoAI] -Sync with trunk -r9815:9914
glx
parents:
diff changeset
   130
b71483f2330f (svn r9915) [NoAI] -Sync with trunk -r9815:9914
glx
parents:
diff changeset
   131
			p = GetPlayer(_current_player);
b71483f2330f (svn r9915) [NoAI] -Sync with trunk -r9815:9914
glx
parents:
diff changeset
   132
			FOR_ALL_ENGINE_RENEWS(er) {
b71483f2330f (svn r9915) [NoAI] -Sync with trunk -r9815:9914
glx
parents:
diff changeset
   133
				if (er->group_id == g->index) RemoveEngineReplacementForPlayer(p, er->from, g->index, flags);
b71483f2330f (svn r9915) [NoAI] -Sync with trunk -r9815:9914
glx
parents:
diff changeset
   134
			}
b71483f2330f (svn r9915) [NoAI] -Sync with trunk -r9815:9914
glx
parents:
diff changeset
   135
		}
b71483f2330f (svn r9915) [NoAI] -Sync with trunk -r9815:9914
glx
parents:
diff changeset
   136
b71483f2330f (svn r9915) [NoAI] -Sync with trunk -r9815:9914
glx
parents:
diff changeset
   137
		VehicleType vt = g->vehicle_type;
b71483f2330f (svn r9915) [NoAI] -Sync with trunk -r9815:9914
glx
parents:
diff changeset
   138
b71483f2330f (svn r9915) [NoAI] -Sync with trunk -r9815:9914
glx
parents:
diff changeset
   139
		/* Delete the Replace Vehicle Windows */
b71483f2330f (svn r9915) [NoAI] -Sync with trunk -r9815:9914
glx
parents:
diff changeset
   140
		DeleteWindowById(WC_REPLACE_VEHICLE, g->vehicle_type);
9694
e72987579514 (svn r10775) [NoAI] -Sync: with trunk r10535:r10774.
rubidium
parents: 9641
diff changeset
   141
		delete g;
9624
b71483f2330f (svn r9915) [NoAI] -Sync with trunk -r9815:9914
glx
parents:
diff changeset
   142
10355
ee4b5f7a5bf2 (svn r12896) [NoAI] -Sync: with trunk r12824:r12895.
rubidium
parents: 10249
diff changeset
   143
		InvalidateWindowData(GetWindowClassForVehicleType(vt), (vt << 11) | VLW_GROUP_LIST | _current_player);
9624
b71483f2330f (svn r9915) [NoAI] -Sync with trunk -r9815:9914
glx
parents:
diff changeset
   144
	}
b71483f2330f (svn r9915) [NoAI] -Sync with trunk -r9815:9914
glx
parents:
diff changeset
   145
9629
66dde6412125 (svn r10350) [NoAI] -Sync with trunk r10194:10349
glx
parents: 9625
diff changeset
   146
	return CommandCost();
9624
b71483f2330f (svn r9915) [NoAI] -Sync with trunk -r9815:9914
glx
parents:
diff changeset
   147
}
b71483f2330f (svn r9915) [NoAI] -Sync with trunk -r9815:9914
glx
parents:
diff changeset
   148
9631
8a2d1c2ceb88 (svn r10461) [NoAI] -Sync with trunk r10349:r10460.
rubidium
parents: 9629
diff changeset
   149
static bool IsUniqueGroupName(const char *name)
8a2d1c2ceb88 (svn r10461) [NoAI] -Sync with trunk r10349:r10460.
rubidium
parents: 9629
diff changeset
   150
{
8a2d1c2ceb88 (svn r10461) [NoAI] -Sync with trunk r10349:r10460.
rubidium
parents: 9629
diff changeset
   151
	const Group *g;
8a2d1c2ceb88 (svn r10461) [NoAI] -Sync with trunk r10349:r10460.
rubidium
parents: 9629
diff changeset
   152
	char buf[512];
8a2d1c2ceb88 (svn r10461) [NoAI] -Sync with trunk r10349:r10460.
rubidium
parents: 9629
diff changeset
   153
8a2d1c2ceb88 (svn r10461) [NoAI] -Sync with trunk r10349:r10460.
rubidium
parents: 9629
diff changeset
   154
	FOR_ALL_GROUPS(g) {
8a2d1c2ceb88 (svn r10461) [NoAI] -Sync with trunk r10349:r10460.
rubidium
parents: 9629
diff changeset
   155
		SetDParam(0, g->index);
8a2d1c2ceb88 (svn r10461) [NoAI] -Sync with trunk r10349:r10460.
rubidium
parents: 9629
diff changeset
   156
		GetString(buf, STR_GROUP_NAME, lastof(buf));
8a2d1c2ceb88 (svn r10461) [NoAI] -Sync with trunk r10349:r10460.
rubidium
parents: 9629
diff changeset
   157
		if (strcmp(buf, name) == 0) return false;
8a2d1c2ceb88 (svn r10461) [NoAI] -Sync with trunk r10349:r10460.
rubidium
parents: 9629
diff changeset
   158
	}
8a2d1c2ceb88 (svn r10461) [NoAI] -Sync with trunk r10349:r10460.
rubidium
parents: 9629
diff changeset
   159
8a2d1c2ceb88 (svn r10461) [NoAI] -Sync with trunk r10349:r10460.
rubidium
parents: 9629
diff changeset
   160
	return true;
8a2d1c2ceb88 (svn r10461) [NoAI] -Sync with trunk r10349:r10460.
rubidium
parents: 9629
diff changeset
   161
}
9624
b71483f2330f (svn r9915) [NoAI] -Sync with trunk -r9815:9914
glx
parents:
diff changeset
   162
b71483f2330f (svn r9915) [NoAI] -Sync with trunk -r9815:9914
glx
parents:
diff changeset
   163
/**
b71483f2330f (svn r9915) [NoAI] -Sync with trunk -r9815:9914
glx
parents:
diff changeset
   164
 * Rename a group
b71483f2330f (svn r9915) [NoAI] -Sync with trunk -r9815:9914
glx
parents:
diff changeset
   165
 * @param tile unused
b71483f2330f (svn r9915) [NoAI] -Sync with trunk -r9815:9914
glx
parents:
diff changeset
   166
 * @param p1   index of array group
b71483f2330f (svn r9915) [NoAI] -Sync with trunk -r9815:9914
glx
parents:
diff changeset
   167
 *   - p1 bit 0-15 : GroupID
b71483f2330f (svn r9915) [NoAI] -Sync with trunk -r9815:9914
glx
parents:
diff changeset
   168
 * @param p2   unused
b71483f2330f (svn r9915) [NoAI] -Sync with trunk -r9815:9914
glx
parents:
diff changeset
   169
 */
9629
66dde6412125 (svn r10350) [NoAI] -Sync with trunk r10194:10349
glx
parents: 9625
diff changeset
   170
CommandCost CmdRenameGroup(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
9624
b71483f2330f (svn r9915) [NoAI] -Sync with trunk -r9815:9914
glx
parents:
diff changeset
   171
{
b71483f2330f (svn r9915) [NoAI] -Sync with trunk -r9815:9914
glx
parents:
diff changeset
   172
	if (!IsValidGroupID(p1) || StrEmpty(_cmd_text)) return CMD_ERROR;
b71483f2330f (svn r9915) [NoAI] -Sync with trunk -r9815:9914
glx
parents:
diff changeset
   173
b71483f2330f (svn r9915) [NoAI] -Sync with trunk -r9815:9914
glx
parents:
diff changeset
   174
	Group *g = GetGroup(p1);
b71483f2330f (svn r9915) [NoAI] -Sync with trunk -r9815:9914
glx
parents:
diff changeset
   175
	if (g->owner != _current_player) return CMD_ERROR;
b71483f2330f (svn r9915) [NoAI] -Sync with trunk -r9815:9914
glx
parents:
diff changeset
   176
9631
8a2d1c2ceb88 (svn r10461) [NoAI] -Sync with trunk r10349:r10460.
rubidium
parents: 9629
diff changeset
   177
	if (!IsUniqueGroupName(_cmd_text)) return_cmd_error(STR_NAME_MUST_BE_UNIQUE);
8a2d1c2ceb88 (svn r10461) [NoAI] -Sync with trunk r10349:r10460.
rubidium
parents: 9629
diff changeset
   178
9624
b71483f2330f (svn r9915) [NoAI] -Sync with trunk -r9815:9914
glx
parents:
diff changeset
   179
	if (flags & DC_EXEC) {
b71483f2330f (svn r9915) [NoAI] -Sync with trunk -r9815:9914
glx
parents:
diff changeset
   180
		/* Delete the old name */
9724
b39bc69bb2f2 (svn r12051) [NoAI] -Sync: with trunk (r11795:12050).
rubidium
parents: 9723
diff changeset
   181
		free(g->name);
9624
b71483f2330f (svn r9915) [NoAI] -Sync with trunk -r9815:9914
glx
parents:
diff changeset
   182
		/* Assign the new one */
9724
b39bc69bb2f2 (svn r12051) [NoAI] -Sync: with trunk (r11795:12050).
rubidium
parents: 9723
diff changeset
   183
		g->name = strdup(_cmd_text);
9624
b71483f2330f (svn r9915) [NoAI] -Sync with trunk -r9815:9914
glx
parents:
diff changeset
   184
10355
ee4b5f7a5bf2 (svn r12896) [NoAI] -Sync: with trunk r12824:r12895.
rubidium
parents: 10249
diff changeset
   185
		InvalidateWindowData(GetWindowClassForVehicleType(g->vehicle_type), (g->vehicle_type << 11) | VLW_GROUP_LIST | _current_player);
9624
b71483f2330f (svn r9915) [NoAI] -Sync with trunk -r9815:9914
glx
parents:
diff changeset
   186
	}
b71483f2330f (svn r9915) [NoAI] -Sync with trunk -r9815:9914
glx
parents:
diff changeset
   187
9629
66dde6412125 (svn r10350) [NoAI] -Sync with trunk r10194:10349
glx
parents: 9625
diff changeset
   188
	return CommandCost();
9624
b71483f2330f (svn r9915) [NoAI] -Sync with trunk -r9815:9914
glx
parents:
diff changeset
   189
}
b71483f2330f (svn r9915) [NoAI] -Sync with trunk -r9815:9914
glx
parents:
diff changeset
   190
b71483f2330f (svn r9915) [NoAI] -Sync with trunk -r9815:9914
glx
parents:
diff changeset
   191
b71483f2330f (svn r9915) [NoAI] -Sync with trunk -r9815:9914
glx
parents:
diff changeset
   192
/**
b71483f2330f (svn r9915) [NoAI] -Sync with trunk -r9815:9914
glx
parents:
diff changeset
   193
 * Add a vehicle to a group
b71483f2330f (svn r9915) [NoAI] -Sync with trunk -r9815:9914
glx
parents:
diff changeset
   194
 * @param tile unused
b71483f2330f (svn r9915) [NoAI] -Sync with trunk -r9815:9914
glx
parents:
diff changeset
   195
 * @param p1   index of array group
b71483f2330f (svn r9915) [NoAI] -Sync with trunk -r9815:9914
glx
parents:
diff changeset
   196
 *   - p1 bit 0-15 : GroupID
b71483f2330f (svn r9915) [NoAI] -Sync with trunk -r9815:9914
glx
parents:
diff changeset
   197
 * @param p2   vehicle to add to a group
b71483f2330f (svn r9915) [NoAI] -Sync with trunk -r9815:9914
glx
parents:
diff changeset
   198
 *   - p2 bit 0-15 : VehicleID
b71483f2330f (svn r9915) [NoAI] -Sync with trunk -r9815:9914
glx
parents:
diff changeset
   199
 */
9629
66dde6412125 (svn r10350) [NoAI] -Sync with trunk r10194:10349
glx
parents: 9625
diff changeset
   200
CommandCost CmdAddVehicleGroup(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
9624
b71483f2330f (svn r9915) [NoAI] -Sync with trunk -r9815:9914
glx
parents:
diff changeset
   201
{
b71483f2330f (svn r9915) [NoAI] -Sync with trunk -r9815:9914
glx
parents:
diff changeset
   202
	GroupID new_g = p1;
b71483f2330f (svn r9915) [NoAI] -Sync with trunk -r9815:9914
glx
parents:
diff changeset
   203
b71483f2330f (svn r9915) [NoAI] -Sync with trunk -r9815:9914
glx
parents:
diff changeset
   204
	if (!IsValidVehicleID(p2) || (!IsValidGroupID(new_g) && !IsDefaultGroupID(new_g))) return CMD_ERROR;
b71483f2330f (svn r9915) [NoAI] -Sync with trunk -r9815:9914
glx
parents:
diff changeset
   205
9701
d1ac22c62f64 (svn r11036) [NoAI] -Sync: with trunk r10774:11035.
rubidium
parents: 9694
diff changeset
   206
	Vehicle *v = GetVehicle(p2);
d1ac22c62f64 (svn r11036) [NoAI] -Sync: with trunk r10774:11035.
rubidium
parents: 9694
diff changeset
   207
9624
b71483f2330f (svn r9915) [NoAI] -Sync with trunk -r9815:9914
glx
parents:
diff changeset
   208
	if (IsValidGroupID(new_g)) {
b71483f2330f (svn r9915) [NoAI] -Sync with trunk -r9815:9914
glx
parents:
diff changeset
   209
		Group *g = GetGroup(new_g);
9701
d1ac22c62f64 (svn r11036) [NoAI] -Sync: with trunk r10774:11035.
rubidium
parents: 9694
diff changeset
   210
		if (g->owner != _current_player || g->vehicle_type != v->type) return CMD_ERROR;
9624
b71483f2330f (svn r9915) [NoAI] -Sync with trunk -r9815:9914
glx
parents:
diff changeset
   211
	}
b71483f2330f (svn r9915) [NoAI] -Sync with trunk -r9815:9914
glx
parents:
diff changeset
   212
9625
3301b1b3889c (svn r10016) [NoAI] -Sync with trunk r9914:r10015.
rubidium
parents: 9624
diff changeset
   213
	if (v->owner != _current_player || !v->IsPrimaryVehicle()) return CMD_ERROR;
9624
b71483f2330f (svn r9915) [NoAI] -Sync with trunk -r9815:9914
glx
parents:
diff changeset
   214
b71483f2330f (svn r9915) [NoAI] -Sync with trunk -r9815:9914
glx
parents:
diff changeset
   215
	if (flags & DC_EXEC) {
b71483f2330f (svn r9915) [NoAI] -Sync with trunk -r9815:9914
glx
parents:
diff changeset
   216
		DecreaseGroupNumVehicle(v->group_id);
b71483f2330f (svn r9915) [NoAI] -Sync with trunk -r9815:9914
glx
parents:
diff changeset
   217
		IncreaseGroupNumVehicle(new_g);
b71483f2330f (svn r9915) [NoAI] -Sync with trunk -r9815:9914
glx
parents:
diff changeset
   218
b71483f2330f (svn r9915) [NoAI] -Sync with trunk -r9815:9914
glx
parents:
diff changeset
   219
		switch (v->type) {
b71483f2330f (svn r9915) [NoAI] -Sync with trunk -r9815:9914
glx
parents:
diff changeset
   220
			default: NOT_REACHED();
b71483f2330f (svn r9915) [NoAI] -Sync with trunk -r9815:9914
glx
parents:
diff changeset
   221
			case VEH_TRAIN:
b71483f2330f (svn r9915) [NoAI] -Sync with trunk -r9815:9914
glx
parents:
diff changeset
   222
				SetTrainGroupID(v, new_g);
b71483f2330f (svn r9915) [NoAI] -Sync with trunk -r9815:9914
glx
parents:
diff changeset
   223
				break;
b71483f2330f (svn r9915) [NoAI] -Sync with trunk -r9815:9914
glx
parents:
diff changeset
   224
			case VEH_ROAD:
b71483f2330f (svn r9915) [NoAI] -Sync with trunk -r9815:9914
glx
parents:
diff changeset
   225
			case VEH_SHIP:
b71483f2330f (svn r9915) [NoAI] -Sync with trunk -r9815:9914
glx
parents:
diff changeset
   226
			case VEH_AIRCRAFT:
b71483f2330f (svn r9915) [NoAI] -Sync with trunk -r9815:9914
glx
parents:
diff changeset
   227
				if (IsEngineCountable(v)) UpdateNumEngineGroup(v->engine_type, v->group_id, new_g);
b71483f2330f (svn r9915) [NoAI] -Sync with trunk -r9815:9914
glx
parents:
diff changeset
   228
				v->group_id = new_g;
b71483f2330f (svn r9915) [NoAI] -Sync with trunk -r9815:9914
glx
parents:
diff changeset
   229
				break;
b71483f2330f (svn r9915) [NoAI] -Sync with trunk -r9815:9914
glx
parents:
diff changeset
   230
		}
b71483f2330f (svn r9915) [NoAI] -Sync with trunk -r9815:9914
glx
parents:
diff changeset
   231
b71483f2330f (svn r9915) [NoAI] -Sync with trunk -r9815:9914
glx
parents:
diff changeset
   232
		/* Update the Replace Vehicle Windows */
b71483f2330f (svn r9915) [NoAI] -Sync with trunk -r9815:9914
glx
parents:
diff changeset
   233
		InvalidateWindow(WC_REPLACE_VEHICLE, v->type);
10355
ee4b5f7a5bf2 (svn r12896) [NoAI] -Sync: with trunk r12824:r12895.
rubidium
parents: 10249
diff changeset
   234
		InvalidateWindowData(GetWindowClassForVehicleType(v->type), (v->type << 11) | VLW_GROUP_LIST | _current_player);
9624
b71483f2330f (svn r9915) [NoAI] -Sync with trunk -r9815:9914
glx
parents:
diff changeset
   235
	}
b71483f2330f (svn r9915) [NoAI] -Sync with trunk -r9815:9914
glx
parents:
diff changeset
   236
9629
66dde6412125 (svn r10350) [NoAI] -Sync with trunk r10194:10349
glx
parents: 9625
diff changeset
   237
	return CommandCost();
9624
b71483f2330f (svn r9915) [NoAI] -Sync with trunk -r9815:9914
glx
parents:
diff changeset
   238
}
b71483f2330f (svn r9915) [NoAI] -Sync with trunk -r9815:9914
glx
parents:
diff changeset
   239
b71483f2330f (svn r9915) [NoAI] -Sync with trunk -r9815:9914
glx
parents:
diff changeset
   240
/**
b71483f2330f (svn r9915) [NoAI] -Sync with trunk -r9815:9914
glx
parents:
diff changeset
   241
 * Add all shared vehicles of all vehicles from a group
b71483f2330f (svn r9915) [NoAI] -Sync with trunk -r9815:9914
glx
parents:
diff changeset
   242
 * @param tile unused
b71483f2330f (svn r9915) [NoAI] -Sync with trunk -r9815:9914
glx
parents:
diff changeset
   243
 * @param p1   index of group array
b71483f2330f (svn r9915) [NoAI] -Sync with trunk -r9815:9914
glx
parents:
diff changeset
   244
 *  - p1 bit 0-15 : GroupID
b71483f2330f (svn r9915) [NoAI] -Sync with trunk -r9815:9914
glx
parents:
diff changeset
   245
 * @param p2   type of vehicles
b71483f2330f (svn r9915) [NoAI] -Sync with trunk -r9815:9914
glx
parents:
diff changeset
   246
 */
9629
66dde6412125 (svn r10350) [NoAI] -Sync with trunk r10194:10349
glx
parents: 9625
diff changeset
   247
CommandCost CmdAddSharedVehicleGroup(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
9624
b71483f2330f (svn r9915) [NoAI] -Sync with trunk -r9815:9914
glx
parents:
diff changeset
   248
{
b71483f2330f (svn r9915) [NoAI] -Sync with trunk -r9815:9914
glx
parents:
diff changeset
   249
	VehicleType type = (VehicleType)p2;
b71483f2330f (svn r9915) [NoAI] -Sync with trunk -r9815:9914
glx
parents:
diff changeset
   250
	if (!IsValidGroupID(p1) || !IsPlayerBuildableVehicleType(type)) return CMD_ERROR;
b71483f2330f (svn r9915) [NoAI] -Sync with trunk -r9815:9914
glx
parents:
diff changeset
   251
b71483f2330f (svn r9915) [NoAI] -Sync with trunk -r9815:9914
glx
parents:
diff changeset
   252
	if (flags & DC_EXEC) {
b71483f2330f (svn r9915) [NoAI] -Sync with trunk -r9815:9914
glx
parents:
diff changeset
   253
		Vehicle *v;
b71483f2330f (svn r9915) [NoAI] -Sync with trunk -r9815:9914
glx
parents:
diff changeset
   254
		VehicleType type = (VehicleType)p2;
b71483f2330f (svn r9915) [NoAI] -Sync with trunk -r9815:9914
glx
parents:
diff changeset
   255
		GroupID id_g = p1;
b71483f2330f (svn r9915) [NoAI] -Sync with trunk -r9815:9914
glx
parents:
diff changeset
   256
b71483f2330f (svn r9915) [NoAI] -Sync with trunk -r9815:9914
glx
parents:
diff changeset
   257
		/* Find the first front engine which belong to the group id_g
b71483f2330f (svn r9915) [NoAI] -Sync with trunk -r9815:9914
glx
parents:
diff changeset
   258
		 * then add all shared vehicles of this front engine to the group id_g */
b71483f2330f (svn r9915) [NoAI] -Sync with trunk -r9815:9914
glx
parents:
diff changeset
   259
		FOR_ALL_VEHICLES(v) {
9625
3301b1b3889c (svn r10016) [NoAI] -Sync with trunk r9914:r10015.
rubidium
parents: 9624
diff changeset
   260
			if (v->type == type && v->IsPrimaryVehicle()) {
9624
b71483f2330f (svn r9915) [NoAI] -Sync with trunk -r9815:9914
glx
parents:
diff changeset
   261
				if (v->group_id != id_g) continue;
b71483f2330f (svn r9915) [NoAI] -Sync with trunk -r9815:9914
glx
parents:
diff changeset
   262
b71483f2330f (svn r9915) [NoAI] -Sync with trunk -r9815:9914
glx
parents:
diff changeset
   263
				/* For each shared vehicles add it to the group */
b71483f2330f (svn r9915) [NoAI] -Sync with trunk -r9815:9914
glx
parents:
diff changeset
   264
				for (Vehicle *v2 = GetFirstVehicleFromSharedList(v); v2 != NULL; v2 = v2->next_shared) {
b71483f2330f (svn r9915) [NoAI] -Sync with trunk -r9815:9914
glx
parents:
diff changeset
   265
					if (v2->group_id != id_g) CmdAddVehicleGroup(tile, flags, id_g, v2->index);
b71483f2330f (svn r9915) [NoAI] -Sync with trunk -r9815:9914
glx
parents:
diff changeset
   266
				}
b71483f2330f (svn r9915) [NoAI] -Sync with trunk -r9815:9914
glx
parents:
diff changeset
   267
			}
b71483f2330f (svn r9915) [NoAI] -Sync with trunk -r9815:9914
glx
parents:
diff changeset
   268
		}
b71483f2330f (svn r9915) [NoAI] -Sync with trunk -r9815:9914
glx
parents:
diff changeset
   269
10355
ee4b5f7a5bf2 (svn r12896) [NoAI] -Sync: with trunk r12824:r12895.
rubidium
parents: 10249
diff changeset
   270
		InvalidateWindowData(GetWindowClassForVehicleType(type), (type << 11) | VLW_GROUP_LIST | _current_player);
9624
b71483f2330f (svn r9915) [NoAI] -Sync with trunk -r9815:9914
glx
parents:
diff changeset
   271
	}
b71483f2330f (svn r9915) [NoAI] -Sync with trunk -r9815:9914
glx
parents:
diff changeset
   272
9629
66dde6412125 (svn r10350) [NoAI] -Sync with trunk r10194:10349
glx
parents: 9625
diff changeset
   273
	return CommandCost();
9624
b71483f2330f (svn r9915) [NoAI] -Sync with trunk -r9815:9914
glx
parents:
diff changeset
   274
}
b71483f2330f (svn r9915) [NoAI] -Sync with trunk -r9815:9914
glx
parents:
diff changeset
   275
b71483f2330f (svn r9915) [NoAI] -Sync with trunk -r9815:9914
glx
parents:
diff changeset
   276
b71483f2330f (svn r9915) [NoAI] -Sync with trunk -r9815:9914
glx
parents:
diff changeset
   277
/**
b71483f2330f (svn r9915) [NoAI] -Sync with trunk -r9815:9914
glx
parents:
diff changeset
   278
 * Remove all vehicles from a group
b71483f2330f (svn r9915) [NoAI] -Sync with trunk -r9815:9914
glx
parents:
diff changeset
   279
 * @param tile unused
b71483f2330f (svn r9915) [NoAI] -Sync with trunk -r9815:9914
glx
parents:
diff changeset
   280
 * @param p1   index of group array
b71483f2330f (svn r9915) [NoAI] -Sync with trunk -r9815:9914
glx
parents:
diff changeset
   281
 * - p1 bit 0-15 : GroupID
b71483f2330f (svn r9915) [NoAI] -Sync with trunk -r9815:9914
glx
parents:
diff changeset
   282
 * @param p2   type of vehicles
b71483f2330f (svn r9915) [NoAI] -Sync with trunk -r9815:9914
glx
parents:
diff changeset
   283
 */
9629
66dde6412125 (svn r10350) [NoAI] -Sync with trunk r10194:10349
glx
parents: 9625
diff changeset
   284
CommandCost CmdRemoveAllVehiclesGroup(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
9624
b71483f2330f (svn r9915) [NoAI] -Sync with trunk -r9815:9914
glx
parents:
diff changeset
   285
{
b71483f2330f (svn r9915) [NoAI] -Sync with trunk -r9815:9914
glx
parents:
diff changeset
   286
	VehicleType type = (VehicleType)p2;
b71483f2330f (svn r9915) [NoAI] -Sync with trunk -r9815:9914
glx
parents:
diff changeset
   287
	if (!IsValidGroupID(p1) || !IsPlayerBuildableVehicleType(type)) return CMD_ERROR;
b71483f2330f (svn r9915) [NoAI] -Sync with trunk -r9815:9914
glx
parents:
diff changeset
   288
b71483f2330f (svn r9915) [NoAI] -Sync with trunk -r9815:9914
glx
parents:
diff changeset
   289
	Group *g = GetGroup(p1);
b71483f2330f (svn r9915) [NoAI] -Sync with trunk -r9815:9914
glx
parents:
diff changeset
   290
	if (g->owner != _current_player) return CMD_ERROR;
b71483f2330f (svn r9915) [NoAI] -Sync with trunk -r9815:9914
glx
parents:
diff changeset
   291
b71483f2330f (svn r9915) [NoAI] -Sync with trunk -r9815:9914
glx
parents:
diff changeset
   292
	if (flags & DC_EXEC) {
b71483f2330f (svn r9915) [NoAI] -Sync with trunk -r9815:9914
glx
parents:
diff changeset
   293
		GroupID old_g = p1;
b71483f2330f (svn r9915) [NoAI] -Sync with trunk -r9815:9914
glx
parents:
diff changeset
   294
		Vehicle *v;
b71483f2330f (svn r9915) [NoAI] -Sync with trunk -r9815:9914
glx
parents:
diff changeset
   295
b71483f2330f (svn r9915) [NoAI] -Sync with trunk -r9815:9914
glx
parents:
diff changeset
   296
		/* Find each Vehicle that belongs to the group old_g and add it to the default group */
b71483f2330f (svn r9915) [NoAI] -Sync with trunk -r9815:9914
glx
parents:
diff changeset
   297
		FOR_ALL_VEHICLES(v) {
9625
3301b1b3889c (svn r10016) [NoAI] -Sync with trunk r9914:r10015.
rubidium
parents: 9624
diff changeset
   298
			if (v->type == type && v->IsPrimaryVehicle()) {
9624
b71483f2330f (svn r9915) [NoAI] -Sync with trunk -r9815:9914
glx
parents:
diff changeset
   299
				if (v->group_id != old_g) continue;
b71483f2330f (svn r9915) [NoAI] -Sync with trunk -r9815:9914
glx
parents:
diff changeset
   300
b71483f2330f (svn r9915) [NoAI] -Sync with trunk -r9815:9914
glx
parents:
diff changeset
   301
				/* Add The Vehicle to the default group */
b71483f2330f (svn r9915) [NoAI] -Sync with trunk -r9815:9914
glx
parents:
diff changeset
   302
				CmdAddVehicleGroup(tile, flags, DEFAULT_GROUP, v->index);
b71483f2330f (svn r9915) [NoAI] -Sync with trunk -r9815:9914
glx
parents:
diff changeset
   303
			}
b71483f2330f (svn r9915) [NoAI] -Sync with trunk -r9815:9914
glx
parents:
diff changeset
   304
		}
b71483f2330f (svn r9915) [NoAI] -Sync with trunk -r9815:9914
glx
parents:
diff changeset
   305
10355
ee4b5f7a5bf2 (svn r12896) [NoAI] -Sync: with trunk r12824:r12895.
rubidium
parents: 10249
diff changeset
   306
		InvalidateWindowData(GetWindowClassForVehicleType(type), (type << 11) | VLW_GROUP_LIST | _current_player);
9624
b71483f2330f (svn r9915) [NoAI] -Sync with trunk -r9815:9914
glx
parents:
diff changeset
   307
	}
b71483f2330f (svn r9915) [NoAI] -Sync with trunk -r9815:9914
glx
parents:
diff changeset
   308
9629
66dde6412125 (svn r10350) [NoAI] -Sync with trunk r10194:10349
glx
parents: 9625
diff changeset
   309
	return CommandCost();
9624
b71483f2330f (svn r9915) [NoAI] -Sync with trunk -r9815:9914
glx
parents:
diff changeset
   310
}
b71483f2330f (svn r9915) [NoAI] -Sync with trunk -r9815:9914
glx
parents:
diff changeset
   311
b71483f2330f (svn r9915) [NoAI] -Sync with trunk -r9815:9914
glx
parents:
diff changeset
   312
b71483f2330f (svn r9915) [NoAI] -Sync with trunk -r9815:9914
glx
parents:
diff changeset
   313
/**
b71483f2330f (svn r9915) [NoAI] -Sync with trunk -r9815:9914
glx
parents:
diff changeset
   314
 * (Un)set global replace protection from a group
b71483f2330f (svn r9915) [NoAI] -Sync with trunk -r9815:9914
glx
parents:
diff changeset
   315
 * @param tile unused
b71483f2330f (svn r9915) [NoAI] -Sync with trunk -r9815:9914
glx
parents:
diff changeset
   316
 * @param p1   index of group array
b71483f2330f (svn r9915) [NoAI] -Sync with trunk -r9815:9914
glx
parents:
diff changeset
   317
 * - p1 bit 0-15 : GroupID
b71483f2330f (svn r9915) [NoAI] -Sync with trunk -r9815:9914
glx
parents:
diff changeset
   318
 * @param p2
b71483f2330f (svn r9915) [NoAI] -Sync with trunk -r9815:9914
glx
parents:
diff changeset
   319
 * - p2 bit 0    : 1 to set or 0 to clear protection.
b71483f2330f (svn r9915) [NoAI] -Sync with trunk -r9815:9914
glx
parents:
diff changeset
   320
 */
9629
66dde6412125 (svn r10350) [NoAI] -Sync with trunk r10194:10349
glx
parents: 9625
diff changeset
   321
CommandCost CmdSetGroupReplaceProtection(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
9624
b71483f2330f (svn r9915) [NoAI] -Sync with trunk -r9815:9914
glx
parents:
diff changeset
   322
{
b71483f2330f (svn r9915) [NoAI] -Sync with trunk -r9815:9914
glx
parents:
diff changeset
   323
	if (!IsValidGroupID(p1)) return CMD_ERROR;
b71483f2330f (svn r9915) [NoAI] -Sync with trunk -r9815:9914
glx
parents:
diff changeset
   324
b71483f2330f (svn r9915) [NoAI] -Sync with trunk -r9815:9914
glx
parents:
diff changeset
   325
	Group *g = GetGroup(p1);
b71483f2330f (svn r9915) [NoAI] -Sync with trunk -r9815:9914
glx
parents:
diff changeset
   326
	if (g->owner != _current_player) return CMD_ERROR;
b71483f2330f (svn r9915) [NoAI] -Sync with trunk -r9815:9914
glx
parents:
diff changeset
   327
b71483f2330f (svn r9915) [NoAI] -Sync with trunk -r9815:9914
glx
parents:
diff changeset
   328
	if (flags & DC_EXEC) {
9722
ebf0ece7d8f6 (svn r11503) [NoAI] -Sync: with trunk r11308:11502.
rubidium
parents: 9703
diff changeset
   329
		g->replace_protection = HasBit(p2, 0);
9624
b71483f2330f (svn r9915) [NoAI] -Sync with trunk -r9815:9914
glx
parents:
diff changeset
   330
10355
ee4b5f7a5bf2 (svn r12896) [NoAI] -Sync: with trunk r12824:r12895.
rubidium
parents: 10249
diff changeset
   331
		InvalidateWindowData(GetWindowClassForVehicleType(g->vehicle_type), (g->vehicle_type << 11) | VLW_GROUP_LIST | _current_player);
9624
b71483f2330f (svn r9915) [NoAI] -Sync with trunk -r9815:9914
glx
parents:
diff changeset
   332
	}
b71483f2330f (svn r9915) [NoAI] -Sync with trunk -r9815:9914
glx
parents:
diff changeset
   333
9629
66dde6412125 (svn r10350) [NoAI] -Sync with trunk r10194:10349
glx
parents: 9625
diff changeset
   334
	return CommandCost();
9624
b71483f2330f (svn r9915) [NoAI] -Sync with trunk -r9815:9914
glx
parents:
diff changeset
   335
}
b71483f2330f (svn r9915) [NoAI] -Sync with trunk -r9815:9914
glx
parents:
diff changeset
   336
b71483f2330f (svn r9915) [NoAI] -Sync with trunk -r9815:9914
glx
parents:
diff changeset
   337
/**
b71483f2330f (svn r9915) [NoAI] -Sync with trunk -r9815:9914
glx
parents:
diff changeset
   338
 * Decrease the num_vehicle variable before delete an front engine from a group
b71483f2330f (svn r9915) [NoAI] -Sync with trunk -r9815:9914
glx
parents:
diff changeset
   339
 * @note Called in CmdSellRailWagon and DeleteLasWagon,
b71483f2330f (svn r9915) [NoAI] -Sync with trunk -r9815:9914
glx
parents:
diff changeset
   340
 * @param v     FrontEngine of the train we want to remove.
b71483f2330f (svn r9915) [NoAI] -Sync with trunk -r9815:9914
glx
parents:
diff changeset
   341
 */
b71483f2330f (svn r9915) [NoAI] -Sync with trunk -r9815:9914
glx
parents:
diff changeset
   342
void RemoveVehicleFromGroup(const Vehicle *v)
b71483f2330f (svn r9915) [NoAI] -Sync with trunk -r9815:9914
glx
parents:
diff changeset
   343
{
9703
d2a6acdbd665 (svn r11146) [NoAI] -Sync: with trunk r11035:11045.
rubidium
parents: 9701
diff changeset
   344
	if (!v->IsValid() || !v->IsPrimaryVehicle()) return;
9624
b71483f2330f (svn r9915) [NoAI] -Sync with trunk -r9815:9914
glx
parents:
diff changeset
   345
b71483f2330f (svn r9915) [NoAI] -Sync with trunk -r9815:9914
glx
parents:
diff changeset
   346
	if (!IsDefaultGroupID(v->group_id)) DecreaseGroupNumVehicle(v->group_id);
b71483f2330f (svn r9915) [NoAI] -Sync with trunk -r9815:9914
glx
parents:
diff changeset
   347
}
b71483f2330f (svn r9915) [NoAI] -Sync with trunk -r9815:9914
glx
parents:
diff changeset
   348
b71483f2330f (svn r9915) [NoAI] -Sync with trunk -r9815:9914
glx
parents:
diff changeset
   349
b71483f2330f (svn r9915) [NoAI] -Sync with trunk -r9815:9914
glx
parents:
diff changeset
   350
/**
b71483f2330f (svn r9915) [NoAI] -Sync with trunk -r9815:9914
glx
parents:
diff changeset
   351
 * Affect the groupID of a train to new_g.
b71483f2330f (svn r9915) [NoAI] -Sync with trunk -r9815:9914
glx
parents:
diff changeset
   352
 * @note called in CmdAddVehicleGroup and CmdMoveRailVehicle
b71483f2330f (svn r9915) [NoAI] -Sync with trunk -r9815:9914
glx
parents:
diff changeset
   353
 * @param v     First vehicle of the chain.
b71483f2330f (svn r9915) [NoAI] -Sync with trunk -r9815:9914
glx
parents:
diff changeset
   354
 * @param new_g index of array group
b71483f2330f (svn r9915) [NoAI] -Sync with trunk -r9815:9914
glx
parents:
diff changeset
   355
 */
b71483f2330f (svn r9915) [NoAI] -Sync with trunk -r9815:9914
glx
parents:
diff changeset
   356
void SetTrainGroupID(Vehicle *v, GroupID new_g)
b71483f2330f (svn r9915) [NoAI] -Sync with trunk -r9815:9914
glx
parents:
diff changeset
   357
{
b71483f2330f (svn r9915) [NoAI] -Sync with trunk -r9815:9914
glx
parents:
diff changeset
   358
	if (!IsValidGroupID(new_g) && !IsDefaultGroupID(new_g)) return;
b71483f2330f (svn r9915) [NoAI] -Sync with trunk -r9815:9914
glx
parents:
diff changeset
   359
9694
e72987579514 (svn r10775) [NoAI] -Sync: with trunk r10535:r10774.
rubidium
parents: 9641
diff changeset
   360
	assert(v->IsValid() && v->type == VEH_TRAIN && IsFrontEngine(v));
9624
b71483f2330f (svn r9915) [NoAI] -Sync with trunk -r9815:9914
glx
parents:
diff changeset
   361
9701
d1ac22c62f64 (svn r11036) [NoAI] -Sync: with trunk r10774:11035.
rubidium
parents: 9694
diff changeset
   362
	for (Vehicle *u = v; u != NULL; u = u->Next()) {
9624
b71483f2330f (svn r9915) [NoAI] -Sync with trunk -r9815:9914
glx
parents:
diff changeset
   363
		if (IsEngineCountable(u)) UpdateNumEngineGroup(u->engine_type, u->group_id, new_g);
b71483f2330f (svn r9915) [NoAI] -Sync with trunk -r9815:9914
glx
parents:
diff changeset
   364
b71483f2330f (svn r9915) [NoAI] -Sync with trunk -r9815:9914
glx
parents:
diff changeset
   365
		u->group_id = new_g;
b71483f2330f (svn r9915) [NoAI] -Sync with trunk -r9815:9914
glx
parents:
diff changeset
   366
	}
b71483f2330f (svn r9915) [NoAI] -Sync with trunk -r9815:9914
glx
parents:
diff changeset
   367
b71483f2330f (svn r9915) [NoAI] -Sync with trunk -r9815:9914
glx
parents:
diff changeset
   368
	/* Update the Replace Vehicle Windows */
b71483f2330f (svn r9915) [NoAI] -Sync with trunk -r9815:9914
glx
parents:
diff changeset
   369
	InvalidateWindow(WC_REPLACE_VEHICLE, VEH_TRAIN);
b71483f2330f (svn r9915) [NoAI] -Sync with trunk -r9815:9914
glx
parents:
diff changeset
   370
}
b71483f2330f (svn r9915) [NoAI] -Sync with trunk -r9815:9914
glx
parents:
diff changeset
   371
b71483f2330f (svn r9915) [NoAI] -Sync with trunk -r9815:9914
glx
parents:
diff changeset
   372
b71483f2330f (svn r9915) [NoAI] -Sync with trunk -r9815:9914
glx
parents:
diff changeset
   373
/**
b71483f2330f (svn r9915) [NoAI] -Sync with trunk -r9815:9914
glx
parents:
diff changeset
   374
 * Recalculates the groupID of a train. Should be called each time a vehicle is added
b71483f2330f (svn r9915) [NoAI] -Sync with trunk -r9815:9914
glx
parents:
diff changeset
   375
 * to/removed from the chain,.
b71483f2330f (svn r9915) [NoAI] -Sync with trunk -r9815:9914
glx
parents:
diff changeset
   376
 * @note this needs to be called too for 'wagon chains' (in the depot, without an engine)
b71483f2330f (svn r9915) [NoAI] -Sync with trunk -r9815:9914
glx
parents:
diff changeset
   377
 * @note Called in CmdBuildRailVehicle, CmdBuildRailWagon, CmdMoveRailVehicle, CmdSellRailWagon
b71483f2330f (svn r9915) [NoAI] -Sync with trunk -r9815:9914
glx
parents:
diff changeset
   378
 * @param v First vehicle of the chain.
b71483f2330f (svn r9915) [NoAI] -Sync with trunk -r9815:9914
glx
parents:
diff changeset
   379
 */
b71483f2330f (svn r9915) [NoAI] -Sync with trunk -r9815:9914
glx
parents:
diff changeset
   380
void UpdateTrainGroupID(Vehicle *v)
b71483f2330f (svn r9915) [NoAI] -Sync with trunk -r9815:9914
glx
parents:
diff changeset
   381
{
9694
e72987579514 (svn r10775) [NoAI] -Sync: with trunk r10535:r10774.
rubidium
parents: 9641
diff changeset
   382
	assert(v->IsValid() && v->type == VEH_TRAIN && (IsFrontEngine(v) || IsFreeWagon(v)));
9624
b71483f2330f (svn r9915) [NoAI] -Sync with trunk -r9815:9914
glx
parents:
diff changeset
   383
b71483f2330f (svn r9915) [NoAI] -Sync with trunk -r9815:9914
glx
parents:
diff changeset
   384
	GroupID new_g = IsFrontEngine(v) ? v->group_id : (GroupID)DEFAULT_GROUP;
9701
d1ac22c62f64 (svn r11036) [NoAI] -Sync: with trunk r10774:11035.
rubidium
parents: 9694
diff changeset
   385
	for (Vehicle *u = v; u != NULL; u = u->Next()) {
9624
b71483f2330f (svn r9915) [NoAI] -Sync with trunk -r9815:9914
glx
parents:
diff changeset
   386
		if (IsEngineCountable(u)) UpdateNumEngineGroup(u->engine_type, u->group_id, new_g);
b71483f2330f (svn r9915) [NoAI] -Sync with trunk -r9815:9914
glx
parents:
diff changeset
   387
b71483f2330f (svn r9915) [NoAI] -Sync with trunk -r9815:9914
glx
parents:
diff changeset
   388
		u->group_id = new_g;
b71483f2330f (svn r9915) [NoAI] -Sync with trunk -r9815:9914
glx
parents:
diff changeset
   389
	}
b71483f2330f (svn r9915) [NoAI] -Sync with trunk -r9815:9914
glx
parents:
diff changeset
   390
b71483f2330f (svn r9915) [NoAI] -Sync with trunk -r9815:9914
glx
parents:
diff changeset
   391
	/* Update the Replace Vehicle Windows */
b71483f2330f (svn r9915) [NoAI] -Sync with trunk -r9815:9914
glx
parents:
diff changeset
   392
	InvalidateWindow(WC_REPLACE_VEHICLE, VEH_TRAIN);
b71483f2330f (svn r9915) [NoAI] -Sync with trunk -r9815:9914
glx
parents:
diff changeset
   393
}
b71483f2330f (svn r9915) [NoAI] -Sync with trunk -r9815:9914
glx
parents:
diff changeset
   394
9724
b39bc69bb2f2 (svn r12051) [NoAI] -Sync: with trunk (r11795:12050).
rubidium
parents: 9723
diff changeset
   395
uint GetGroupNumEngines(PlayerID p, GroupID id_g, EngineID id_e)
b39bc69bb2f2 (svn r12051) [NoAI] -Sync: with trunk (r11795:12050).
rubidium
parents: 9723
diff changeset
   396
{
b39bc69bb2f2 (svn r12051) [NoAI] -Sync: with trunk (r11795:12050).
rubidium
parents: 9723
diff changeset
   397
	if (IsValidGroupID(id_g)) return GetGroup(id_g)->num_engines[id_e];
9624
b71483f2330f (svn r9915) [NoAI] -Sync with trunk -r9815:9914
glx
parents:
diff changeset
   398
9724
b39bc69bb2f2 (svn r12051) [NoAI] -Sync: with trunk (r11795:12050).
rubidium
parents: 9723
diff changeset
   399
	uint num = GetPlayer(p)->num_engines[id_e];
b39bc69bb2f2 (svn r12051) [NoAI] -Sync: with trunk (r11795:12050).
rubidium
parents: 9723
diff changeset
   400
	if (!IsDefaultGroupID(id_g)) return num;
b39bc69bb2f2 (svn r12051) [NoAI] -Sync: with trunk (r11795:12050).
rubidium
parents: 9723
diff changeset
   401
b39bc69bb2f2 (svn r12051) [NoAI] -Sync: with trunk (r11795:12050).
rubidium
parents: 9723
diff changeset
   402
	const Group *g;
b39bc69bb2f2 (svn r12051) [NoAI] -Sync: with trunk (r11795:12050).
rubidium
parents: 9723
diff changeset
   403
	FOR_ALL_GROUPS(g) {
b39bc69bb2f2 (svn r12051) [NoAI] -Sync: with trunk (r11795:12050).
rubidium
parents: 9723
diff changeset
   404
		if (g->owner == p) num -= g->num_engines[id_e];
b39bc69bb2f2 (svn r12051) [NoAI] -Sync: with trunk (r11795:12050).
rubidium
parents: 9723
diff changeset
   405
	}
b39bc69bb2f2 (svn r12051) [NoAI] -Sync: with trunk (r11795:12050).
rubidium
parents: 9723
diff changeset
   406
	return num;
b39bc69bb2f2 (svn r12051) [NoAI] -Sync: with trunk (r11795:12050).
rubidium
parents: 9723
diff changeset
   407
}
b39bc69bb2f2 (svn r12051) [NoAI] -Sync: with trunk (r11795:12050).
rubidium
parents: 9723
diff changeset
   408
b39bc69bb2f2 (svn r12051) [NoAI] -Sync: with trunk (r11795:12050).
rubidium
parents: 9723
diff changeset
   409
void RemoveAllGroupsForPlayer(const PlayerID p)
9624
b71483f2330f (svn r9915) [NoAI] -Sync with trunk -r9815:9914
glx
parents:
diff changeset
   410
{
b71483f2330f (svn r9915) [NoAI] -Sync with trunk -r9815:9914
glx
parents:
diff changeset
   411
	Group *g;
b71483f2330f (svn r9915) [NoAI] -Sync with trunk -r9815:9914
glx
parents:
diff changeset
   412
b71483f2330f (svn r9915) [NoAI] -Sync with trunk -r9815:9914
glx
parents:
diff changeset
   413
	FOR_ALL_GROUPS(g) {
9724
b39bc69bb2f2 (svn r12051) [NoAI] -Sync: with trunk (r11795:12050).
rubidium
parents: 9723
diff changeset
   414
		if (p == g->owner) delete g;
9624
b71483f2330f (svn r9915) [NoAI] -Sync with trunk -r9815:9914
glx
parents:
diff changeset
   415
	}
b71483f2330f (svn r9915) [NoAI] -Sync with trunk -r9815:9914
glx
parents:
diff changeset
   416
}
b71483f2330f (svn r9915) [NoAI] -Sync with trunk -r9815:9914
glx
parents:
diff changeset
   417
b71483f2330f (svn r9915) [NoAI] -Sync with trunk -r9815:9914
glx
parents:
diff changeset
   418
b71483f2330f (svn r9915) [NoAI] -Sync with trunk -r9815:9914
glx
parents:
diff changeset
   419
static const SaveLoad _group_desc[] = {
9724
b39bc69bb2f2 (svn r12051) [NoAI] -Sync: with trunk (r11795:12050).
rubidium
parents: 9723
diff changeset
   420
  SLE_CONDVAR(Group, name,           SLE_NAME,    0, 83),
b39bc69bb2f2 (svn r12051) [NoAI] -Sync: with trunk (r11795:12050).
rubidium
parents: 9723
diff changeset
   421
  SLE_CONDSTR(Group, name,           SLE_STR, 0, 84, SL_MAX_VERSION),
9624
b71483f2330f (svn r9915) [NoAI] -Sync with trunk -r9815:9914
glx
parents:
diff changeset
   422
  SLE_VAR(Group, num_vehicle,        SLE_UINT16),
b71483f2330f (svn r9915) [NoAI] -Sync with trunk -r9815:9914
glx
parents:
diff changeset
   423
  SLE_VAR(Group, owner,              SLE_UINT8),
b71483f2330f (svn r9915) [NoAI] -Sync with trunk -r9815:9914
glx
parents:
diff changeset
   424
  SLE_VAR(Group, vehicle_type,       SLE_UINT8),
b71483f2330f (svn r9915) [NoAI] -Sync with trunk -r9815:9914
glx
parents:
diff changeset
   425
  SLE_VAR(Group, replace_protection, SLE_BOOL),
b71483f2330f (svn r9915) [NoAI] -Sync with trunk -r9815:9914
glx
parents:
diff changeset
   426
  SLE_END()
b71483f2330f (svn r9915) [NoAI] -Sync with trunk -r9815:9914
glx
parents:
diff changeset
   427
};
b71483f2330f (svn r9915) [NoAI] -Sync with trunk -r9815:9914
glx
parents:
diff changeset
   428
b71483f2330f (svn r9915) [NoAI] -Sync with trunk -r9815:9914
glx
parents:
diff changeset
   429
b71483f2330f (svn r9915) [NoAI] -Sync with trunk -r9815:9914
glx
parents:
diff changeset
   430
static void Save_GROUP(void)
b71483f2330f (svn r9915) [NoAI] -Sync with trunk -r9815:9914
glx
parents:
diff changeset
   431
{
b71483f2330f (svn r9915) [NoAI] -Sync with trunk -r9815:9914
glx
parents:
diff changeset
   432
	Group *g;
b71483f2330f (svn r9915) [NoAI] -Sync with trunk -r9815:9914
glx
parents:
diff changeset
   433
b71483f2330f (svn r9915) [NoAI] -Sync with trunk -r9815:9914
glx
parents:
diff changeset
   434
	FOR_ALL_GROUPS(g) {
b71483f2330f (svn r9915) [NoAI] -Sync with trunk -r9815:9914
glx
parents:
diff changeset
   435
		SlSetArrayIndex(g->index);
b71483f2330f (svn r9915) [NoAI] -Sync with trunk -r9815:9914
glx
parents:
diff changeset
   436
		SlObject(g, _group_desc);
b71483f2330f (svn r9915) [NoAI] -Sync with trunk -r9815:9914
glx
parents:
diff changeset
   437
	}
b71483f2330f (svn r9915) [NoAI] -Sync with trunk -r9815:9914
glx
parents:
diff changeset
   438
}
b71483f2330f (svn r9915) [NoAI] -Sync with trunk -r9815:9914
glx
parents:
diff changeset
   439
b71483f2330f (svn r9915) [NoAI] -Sync with trunk -r9815:9914
glx
parents:
diff changeset
   440
b71483f2330f (svn r9915) [NoAI] -Sync with trunk -r9815:9914
glx
parents:
diff changeset
   441
static void Load_GROUP(void)
b71483f2330f (svn r9915) [NoAI] -Sync with trunk -r9815:9914
glx
parents:
diff changeset
   442
{
b71483f2330f (svn r9915) [NoAI] -Sync with trunk -r9815:9914
glx
parents:
diff changeset
   443
	int index;
b71483f2330f (svn r9915) [NoAI] -Sync with trunk -r9815:9914
glx
parents:
diff changeset
   444
b71483f2330f (svn r9915) [NoAI] -Sync with trunk -r9815:9914
glx
parents:
diff changeset
   445
	while ((index = SlIterateArray()) != -1) {
9694
e72987579514 (svn r10775) [NoAI] -Sync: with trunk r10535:r10774.
rubidium
parents: 9641
diff changeset
   446
		Group *g = new (index) Group();
9624
b71483f2330f (svn r9915) [NoAI] -Sync with trunk -r9815:9914
glx
parents:
diff changeset
   447
		SlObject(g, _group_desc);
b71483f2330f (svn r9915) [NoAI] -Sync with trunk -r9815:9914
glx
parents:
diff changeset
   448
	}
b71483f2330f (svn r9915) [NoAI] -Sync with trunk -r9815:9914
glx
parents:
diff changeset
   449
}
b71483f2330f (svn r9915) [NoAI] -Sync with trunk -r9815:9914
glx
parents:
diff changeset
   450
b71483f2330f (svn r9915) [NoAI] -Sync with trunk -r9815:9914
glx
parents:
diff changeset
   451
extern const ChunkHandler _group_chunk_handlers[] = {
b71483f2330f (svn r9915) [NoAI] -Sync with trunk -r9815:9914
glx
parents:
diff changeset
   452
	{ 'GRPS', Save_GROUP, Load_GROUP, CH_ARRAY | CH_LAST},
b71483f2330f (svn r9915) [NoAI] -Sync with trunk -r9815:9914
glx
parents:
diff changeset
   453
};