Freeciv-3.3: /fast/freeciv/nightly/main/tools/ruledit/tab_misc.cpp Source File

Freeciv-3.3

Loading...
Searching...
No Matches
tab_misc.cpp
Go to the documentation of this file.
1/***********************************************************************
2 Freeciv - Copyright (C) 1996 - A Kjeldberg, L Gregersen, P Unold
3 This program is free software; you can redistribute it and/or modify
4 it under the terms of the GNU General Public License as published by
5 the Free Software Foundation; either version 2, or (at your option)
6 any later version.
7
8 This program is distributed in the hope that it will be useful,
9 but WITHOUT ANY WARRANTY; without even the implied warranty of
10 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 GNU General Public License for more details.
12***********************************************************************/
13
14#ifdef HAVE_CONFIG_H
15#include <fc_config.h>
16#endif
17
18#ifdef FREECIV_MSWINDOWS
19#include <shlobj.h>
20#endif
21
22// Qt
23#include <QCheckBox>
24#include <QGridLayout>
25#include <QHeaderView>
26#include <QLineEdit>
27#include <QMessageBox>
28#include <QPushButton>
29#include <QTableWidget>
30
31// utility
32#include "fcintl.h"
33#include "log.h"
34#include "registry.h"
35
36// common
37#include "achievements.h"
38#include "counters.h"
39#include "game.h"
40#include "government.h"
41#include "specialist.h"
42
43// server
44#include "rssanity.h"
45
46// ruledit
47#include "conversion_log.h"
48#include "ruledit.h"
49#include "ruledit_qt.h"
50#include "rulesave.h"
51
52#include "tab_misc.h"
53
54/**********************************************************************/
57tab_misc::tab_misc(ruledit_gui *ui_in) : QWidget()
58{
59 QGridLayout *main_layout = new QGridLayout(this);
60 QLabel *save_label;
61 QLabel *save_ver_label;
62 QLabel *label;
63 QLabel *name_label;
64 QLabel *version_label;
65 QPushButton *button;
66 int row = 0;
67 QTableWidgetItem *item;
68 char ttbuf[2048];
69
70 ui = ui_in;
71
72 main_layout->setSizeConstraint(QLayout::SetMaximumSize);
73
74 name_label = new QLabel(QString::fromUtf8(R__("Ruleset name")));
75 name_label->setParent(this);
76 main_layout->addWidget(name_label, row, 0);
77 name = new QLineEdit(this);
78 main_layout->addWidget(name, row++, 1);
79 version_label = new QLabel(QString::fromUtf8(R__("Ruleset version")));
80 version_label->setParent(this);
81 main_layout->addWidget(version_label, row, 0);
82 version = new QLineEdit(this);
83 main_layout->addWidget(version, row++, 1);
84 save_label = new QLabel(QString::fromUtf8(R__("Save to directory")));
85 save_label->setParent(this);
86 main_layout->addWidget(save_label, row, 0);
87 savedir = new QLineEdit(this);
88
89#ifdef FREECIV_MSWINDOWS
90 PWSTR folder_path;
91
92 if (SHGetKnownFolderPath(FOLDERID_Documents, KF_FLAG_DEFAULT,
93 nullptr, &folder_path) == S_OK) {
94 savedir->setText(QString::fromWCharArray(folder_path) + "\\ruledit-tmp");
95 } else {
96 savedir->setText("ruledit-tmp");
97 }
98
99#else // FREECIV_MSWINDOWS
100 savedir->setText("ruledit-tmp");
101#endif // FREECIV_MSWINDOWS
102
103 /* TRANS: %s%s%s -> path + directory separator ('/' or '\') + path
104 * Do not translate command '/rulesetdir' name. */
105 fc_snprintf(ttbuf, sizeof(ttbuf),
106 R__("If you want to be able to load the ruleset directly "
107 "to freeciv, place it as a subdirectory under %s%s%s\n"
108 "Use server command \"/rulesetdir <subdirectory>\" "
109 "to load it to freeciv."),
110 freeciv_storage_dir(), DIR_SEPARATOR, DATASUBDIR);
111 savedir->setToolTip(ttbuf);
112
113 savedir->setFocus();
114 main_layout->addWidget(savedir, row++, 1);
115 save_ver_label = new QLabel(QString::fromUtf8(R__("Version suffix to directory name")));
116 save_ver_label->setParent(this);
117 main_layout->addWidget(save_ver_label, row, 0);
118 savedir_version = new QCheckBox(this);
119 main_layout->addWidget(savedir_version, row++, 1);
120 button = new QPushButton(QString::fromUtf8(R__("Save now")), this);
121 connect(button, SIGNAL(pressed()), this, SLOT(save_now()));
122 main_layout->addWidget(button, row++, 1);
123
124 label = new QLabel(QString::fromUtf8(R__("Description from file")));
125 label->setParent(this);
126 main_layout->addWidget(label, row, 0);
127 desc_via_file = new QCheckBox(this);
128 connect(desc_via_file, SIGNAL(toggled(bool)), this, SLOT(desc_file_toggle(bool)));
129 main_layout->addWidget(desc_via_file, row++, 1);
130
131 label = new QLabel(QString::fromUtf8(R__("Description file")));
132 label->setParent(this);
133 main_layout->addWidget(label, row, 0);
134 desc_file = new QLineEdit(this);
135 main_layout->addWidget(desc_file, row++, 1);
136
137 button = new QPushButton(QString::fromUtf8(R__("Sanity check rules")), this);
138 connect(button, SIGNAL(pressed()), this, SLOT(sanity_check()));
139 main_layout->addWidget(button, row++, 1);
140
141 button = new QPushButton(QString::fromUtf8(R__("Always active Effects")), this);
142 connect(button, SIGNAL(pressed()), this, SLOT(edit_aae_effects()));
143 main_layout->addWidget(button, row++, 1);
144 button = new QPushButton(QString::fromUtf8(R__("All Effects")), this);
145 connect(button, SIGNAL(pressed()), this, SLOT(edit_all_effects()));
146 main_layout->addWidget(button, row++, 1);
147
148 stats = new QTableWidget(this);
149 stats->setColumnCount(8);
150 stats->setRowCount(7);
151 item = new QTableWidgetItem(QString::fromUtf8(RQ_("?stat:Terrains")));
152 stats->setItem(0, 0, item);
153 item = new QTableWidgetItem("-");
154 stats->setItem(0, 1, item);
155 item = new QTableWidgetItem(QString::fromUtf8(RQ_("?stat:Resources")));
156 stats->setItem(1, 0, item);
157 item = new QTableWidgetItem("-");
158 stats->setItem(1, 1, item);
159 item = new QTableWidgetItem(QString::fromUtf8(RQ_("?stat:Tech Classes")));
160 stats->setItem(2, 0, item);
161 item = new QTableWidgetItem("-");
162 stats->setItem(2, 1, item);
163 item = new QTableWidgetItem(QString::fromUtf8(RQ_("?stat:Techs")));
164 stats->setItem(3, 0, item);
165 item = new QTableWidgetItem("-");
166 stats->setItem(3, 1, item);
167 item = new QTableWidgetItem(QString::fromUtf8(RQ_("?stat:Unit Classes")));
168 stats->setItem(4, 0, item);
169 item = new QTableWidgetItem("-");
170 stats->setItem(4, 1, item);
171 item = new QTableWidgetItem(QString::fromUtf8(RQ_("?stat:Unit Types")));
172 stats->setItem(5, 0, item);
173 item = new QTableWidgetItem("-");
174 stats->setItem(5, 1, item);
175 item = new QTableWidgetItem(QString::fromUtf8(RQ_("?stat:Enablers")));
176 stats->setItem(6, 0, item);
177 item = new QTableWidgetItem("-");
178 stats->setItem(6, 1, item);
179 item = new QTableWidgetItem(QString::fromUtf8(RQ_("?stat:Buildings")));
180 stats->setItem(0, 3, item);
181 item = new QTableWidgetItem("-");
182 stats->setItem(0, 4, item);
183 item = new QTableWidgetItem(QString::fromUtf8(RQ_("?stat:Nations")));
184 stats->setItem(1, 3, item);
185 item = new QTableWidgetItem("-");
186 stats->setItem(1, 4, item);
187 item = new QTableWidgetItem(QString::fromUtf8(RQ_("?stat:Styles")));
188 stats->setItem(2, 3, item);
189 item = new QTableWidgetItem("-");
190 stats->setItem(2, 4, item);
191 item = new QTableWidgetItem(QString::fromUtf8(RQ_("?stat:Specialists")));
192 stats->setItem(3, 3, item);
193 item = new QTableWidgetItem("-");
194 stats->setItem(3, 4, item);
195 item = new QTableWidgetItem(QString::fromUtf8(RQ_("?stat:Governments")));
196 stats->setItem(4, 3, item);
197 item = new QTableWidgetItem("-");
198 stats->setItem(4, 4, item);
199 item = new QTableWidgetItem(QString::fromUtf8(RQ_("?stat:Disasters")));
200 stats->setItem(5, 3, item);
201 item = new QTableWidgetItem("-");
202 stats->setItem(5, 4, item);
203 item = new QTableWidgetItem(QString::fromUtf8(RQ_("?stat:Counters")));
204 stats->setItem(6, 3, item);
205 item = new QTableWidgetItem("-");
206 stats->setItem(6, 4, item);
207 item = new QTableWidgetItem(QString::fromUtf8(RQ_("?stat:Achievements")));
208 stats->setItem(0, 6, item);
209 item = new QTableWidgetItem("-");
210 stats->setItem(0, 7, item);
211 item = new QTableWidgetItem(QString::fromUtf8(RQ_("?stat:Extras")));
212 stats->setItem(1, 6, item);
213 item = new QTableWidgetItem("-");
214 stats->setItem(1, 7, item);
215 item = new QTableWidgetItem(QString::fromUtf8(RQ_("?stat:Bases")));
216 stats->setItem(2, 6, item);
217 item = new QTableWidgetItem("-");
218 stats->setItem(2, 7, item);
219 item = new QTableWidgetItem(QString::fromUtf8(RQ_("?stat:Roads")));
220 stats->setItem(3, 6, item);
221 item = new QTableWidgetItem("-");
222 stats->setItem(3, 7, item);
223 item = new QTableWidgetItem(QString::fromUtf8(RQ_("?stat:Goods")));
224 stats->setItem(4, 6, item);
225 item = new QTableWidgetItem("-");
226 stats->setItem(4, 7, item);
227 item = new QTableWidgetItem(QString::fromUtf8(RQ_("?stat:Multipliers")));
228 stats->setItem(5, 6, item);
229 item = new QTableWidgetItem("-");
230 stats->setItem(5, 7, item);
231 item = new QTableWidgetItem(QString::fromUtf8(RQ_("?stat:Effects")));
232 stats->setItem(6, 6, item);
233 item = new QTableWidgetItem("-");
234 stats->setItem(6, 7, item);
235 stats->verticalHeader()->setVisible(false);
236 stats->horizontalHeader()->setVisible(false);
237 stats->setEditTriggers(QAbstractItemView::NoEditTriggers);
238 main_layout->addWidget(stats, row++, 0, 1, 2);
239 button = new QPushButton(QString::fromUtf8(R__("Refresh Stats")), this);
240 connect(button, SIGNAL(pressed()), this, SLOT(refresh_stats()));
241 main_layout->addWidget(button, row++, 0, 1, 2);
242
243 refresh();
244
245 setLayout(main_layout);
246}
247
248/**********************************************************************/
251 void tab_misc::ruleset_loaded()
252{
253 if (game.server.ruledit.description_file != nullptr) {
254 desc_via_file->setChecked(true);
255 desc_file->setText(game.server.ruledit.description_file);
256 } else {
257 desc_file->setEnabled(false);
258 }
259
260 refresh();
261}
262
263/**********************************************************************/
266 void tab_misc::refresh()
267{
268 name->setText(game.control.name);
269 version->setText(game.control.version);
270 refresh_stats();
271}
272
273/**********************************************************************/
276 void tab_misc::save_now()
277{
278 char nameUTF8[MAX_LEN_NAME];
279 QString full_dir;
280 QByteArray ba_bytes;
281
282 ui->flush_widgets();
283
284 ba_bytes = name->text().toUtf8();
285 strncpy(nameUTF8, ba_bytes.data(), sizeof(nameUTF8) - 1);
286
287 if (nameUTF8[0] != '\0') {
288 strncpy(game.control.name, nameUTF8, sizeof(game.control.name));
289 }
290
291 ba_bytes = version->text().toUtf8();
292 strncpy(game.control.version, ba_bytes.data(),
293 sizeof(game.control.version) - 1);
294
295 if (!autoadjust_ruleset_data() || !sanity_check_ruleset_data(nullptr)) {
296 QMessageBox *box = new QMessageBox();
297
298 box->setText("Current data fails sanity checks. Save anyway?");
299 box->setStandardButtons(QMessageBox::Yes | QMessageBox::No);
300 box->exec();
301
302 if (box->result() != QMessageBox::Yes) {
303 return;
304 }
305 }
306
307 if (savedir_version->isChecked()) {
308 full_dir = savedir->text() + "-" + version->text();
309 } else {
310 full_dir = savedir->text();
311 }
312
313 ba_bytes = full_dir.toUtf8();
314 save_ruleset(ba_bytes.data(), nameUTF8,
315 &(ui->data));
316
317 ui->display_msg(R__("Ruleset saved"));
318}
319
320/**********************************************************************/
327 static bool effect_counter(struct effect *peff, void *data)
328{
329 (*(int *)data)++;
330
331 return TRUE;
332}
333
334/**********************************************************************/
337 void tab_misc::refresh_stats()
338{
339 int row = 0;
340 int count;
341 int base_count;
342 int road_count;
343
344 count = 0;
345 terrain_re_active_iterate(pterr) {
346 count++;
347 } terrain_re_active_iterate_end;
348 stats->item(row++, 1)->setText(QString::number(count));
349
350 stats->item(row++, 1)->setText(QString::number(game.control.num_resource_types));
351
352 count = 0;
353 tech_class_re_active_iterate(ptclass) {
354 count++;
355 } tech_class_re_active_iterate_end;
356 stats->item(row++, 1)->setText(QString::number(count));
357
358 count = 0;
359 advance_re_active_iterate(padv) {
360 count++;
361 } advance_re_active_iterate_end;
362 stats->item(row++, 1)->setText(QString::number(count));
363
364 count = 0;
365 unit_class_re_active_iterate(pclass) {
366 count++;
367 } unit_class_re_active_iterate_end;
368 stats->item(row++, 1)->setText(QString::number(count));
369
370 count = 0;
371 unit_type_re_active_iterate(ptype) {
372 count++;
373 } unit_type_re_active_iterate_end;
374 stats->item(row++, 1)->setText(QString::number(count));
375
376 count = 0;
377 action_iterate(act) {
378 action_enabler_list_re_iterate(action_enablers_for_action(act), enabler) {
379 count++;
380 } action_enabler_list_re_iterate_end;
381 } action_iterate_end;
382 stats->item(row++, 1)->setText(QString::number(count));
383
384 // Second column
385 row = 0;
386 count = 0;
387 improvement_re_active_iterate(pimpr) {
388 count++;
389 } improvement_re_active_iterate_end;
390 stats->item(row++, 4)->setText(QString::number(count));
391
392 stats->item(row++, 4)->setText(QString::number(game.control.nation_count));
393
394 count = 0;
395 styles_re_active_iterate(pstyle) {
396 count++;
397 } styles_re_active_iterate_end;
398 stats->item(row++, 4)->setText(QString::number(count));
399
400 count = 0;
401 specialist_type_re_active_iterate(pspe) {
402 count++;
403 } specialist_type_re_active_iterate_end;
404 stats->item(row++, 4)->setText(QString::number(count));
405
406 count = 0;
407 governments_re_active_iterate(pgov) {
408 count++;
409 } governments_re_active_iterate_end;
410 stats->item(row++, 4)->setText(QString::number(count));
411
412 stats->item(row++, 4)->setText(QString::number(game.control.num_disaster_types));
413 count = 0;
414 counters_re_iterate(pcount) {
415 count++;
416 } counters_re_iterate_end;
417 stats->item(row++, 4)->setText(QString::number(count));
418
419 // Third column
420 row = 0;
421
422 count = 0;
423 achievements_re_active_iterate(pach) {
424 count++;
425 } achievements_re_active_iterate_end;
426 stats->item(row++, 7)->setText(QString::number(count));
427
428 count = 0;
429 base_count = 0;
430 road_count = 0;
431 extra_type_re_active_iterate(pextra) {
432 count++;
433 if (is_extra_caused_by(pextra, EC_BASE)) {
434 base_count++;
435 }
436 if (is_extra_caused_by(pextra, EC_ROAD)) {
437 road_count++;
438 }
439 } extra_type_re_active_iterate_end;
440 stats->item(row++, 7)->setText(QString::number(count));
441 stats->item(row++, 7)->setText(QString::number(base_count));
442 stats->item(row++, 7)->setText(QString::number(road_count));
443
444 count = 0;
445 goods_type_re_active_iterate(pg) {
446 count++;
447 } goods_type_re_active_iterate_end;
448 stats->item(row++, 7)->setText(QString::number(count));
449
450 count = 0;
451 multipliers_re_active_iterate(pmul) {
452 count++;
453 } multipliers_re_active_iterate_end;
454 stats->item(row++, 7)->setText(QString::number(count));
455
456 count = 0;
457 iterate_effect_cache(effect_counter, &count);
458 stats->item(row++, 7)->setText(QString::number(count));
459
460 stats->resizeColumnsToContents();
461}
462
463/**********************************************************************/
466 void tab_misc::edit_aae_effects()
467{
468 ui->open_effect_edit(QString::fromUtf8(R__("Always active")),
469 nullptr, EFMC_NONE);
470}
471
472 static conversion_log *sanitylog;
473
474/**********************************************************************/
477 static void sanity_log_cb(const char *msg)
478{
479 sanitylog->add(msg);
480}
481
482/**********************************************************************/
485 void tab_misc::sanity_check()
486{
487 struct rscompat_info compat_info;
488
489 sanitylog = new conversion_log(QString::fromUtf8(R__("Sanity Check")));
490
491 rscompat_init_info(&compat_info);
492 compat_info.compat_mode = FALSE;
493 compat_info.log_cb = sanity_log_cb;
494
495 if (!sanity_check_ruleset_data(&compat_info)) {
496 ui->display_msg(R__("Sanity check failed!"));
497 } else {
498 ui->display_msg(R__("Sanity check success"));
499 }
500}
501
502/**********************************************************************/
505 void tab_misc::edit_all_effects()
506{
507 ui->open_effect_edit(QString::fromUtf8(R__("All effects")),
508 nullptr, EFMC_ALL);
509}
510
511/**********************************************************************/
514 void tab_misc::flush_widgets()
515{
516 if (desc_via_file->isChecked()) {
517 QByteArray df_bytes;
518
519 df_bytes = desc_file->text().toUtf8();
520 game.server.ruledit.description_file = fc_strdup(df_bytes.data());
521 } else {
522 if (game.server.ruledit.description_file != nullptr) {
523 free(game.server.ruledit.description_file);
524 }
525 game.server.ruledit.description_file = nullptr;
526 }
527}
528
529/**********************************************************************/
532 void tab_misc::desc_file_toggle(bool checked)
533{
534 desc_file->setEnabled(checked);
535}
achievements.h
achievements_re_active_iterate
#define achievements_re_active_iterate(_p)
Definition achievements.h:74
achievements_re_active_iterate_end
#define achievements_re_active_iterate_end
Definition achievements.h:78
action_enablers_for_action
struct action_enabler_list * action_enablers_for_action(action_id action)
Definition actions.c:1529
action_enabler_list_re_iterate_end
#define action_enabler_list_re_iterate_end
Definition actions.h:191
action_enabler_list_re_iterate
#define action_enabler_list_re_iterate(action_enabler_list, aenabler)
Definition actions.h:187
action_iterate_end
#define action_iterate_end
Definition actions.h:209
action_iterate
#define action_iterate(_act_)
Definition actions.h:205
base_count
Base_type_id base_count(void)
Definition base.c:113
conversion_log
Definition conversion_log.h:26
conversion_log::add
void add(const char *msg)
Definition conversion_log.cpp:54
ruledit_gui
Definition ruledit_qt.h:97
ruledit_gui::flush_widgets
void flush_widgets()
Definition ruledit_qt.cpp:326
ruledit_gui::data
struct rule_data data
Definition ruledit_qt.h:118
ruledit_gui::display_msg
void display_msg(const char *msg)
Definition ruledit_qt.cpp:293
ruledit_gui::open_effect_edit
void open_effect_edit(QString target, struct universal *uni, enum effect_filter_main_class efmc)
Definition ruledit_qt.cpp:404
tab_misc::edit_aae_effects
void edit_aae_effects()
Definition tab_misc.cpp:466
tab_misc::ui
ruledit_gui * ui
Definition tab_misc.h:45
tab_misc::desc_file_toggle
void desc_file_toggle(bool checked)
Definition tab_misc.cpp:532
tab_misc::savedir
QLineEdit * savedir
Definition tab_misc.h:48
tab_misc::save_now
void save_now()
Definition tab_misc.cpp:276
tab_misc::name
QLineEdit * name
Definition tab_misc.h:46
tab_misc::desc_file
QLineEdit * desc_file
Definition tab_misc.h:52
tab_misc::desc_via_file
QCheckBox * desc_via_file
Definition tab_misc.h:51
tab_misc::edit_all_effects
void edit_all_effects()
Definition tab_misc.cpp:505
tab_misc::flush_widgets
void flush_widgets()
Definition tab_misc.cpp:514
tab_misc::refresh_stats
void refresh_stats()
Definition tab_misc.cpp:337
tab_misc::savedir_version
QCheckBox * savedir_version
Definition tab_misc.h:49
tab_misc::ruleset_loaded
void ruleset_loaded()
Definition tab_misc.cpp:251
tab_misc::stats
QTableWidget * stats
Definition tab_misc.h:50
tab_misc::version
QLineEdit * version
Definition tab_misc.h:47
tab_misc::tab_misc
tab_misc(ruledit_gui *ui_in)
Definition tab_misc.cpp:57
tab_misc::sanity_check
void sanity_check()
Definition tab_misc.cpp:485
tab_misc::refresh
void refresh()
Definition tab_misc.cpp:266
incite_cost
char * incite_cost
Definition comments.c:74
conversion_log.h
counters.h
counters_re_iterate_end
#define counters_re_iterate_end
Definition counters.h:75
counters_re_iterate
#define counters_re_iterate(pcount)
Definition counters.h:67
EFMC_ALL
@ EFMC_ALL
Definition effect_edit.h:36
EFMC_NONE
@ EFMC_NONE
Definition effect_edit.h:35
iterate_effect_cache
bool iterate_effect_cache(iec_cb cb, void *data)
Definition effects.c:1321
is_extra_caused_by
#define is_extra_caused_by(e, c)
Definition extras.h:203
extra_type_re_active_iterate_end
#define extra_type_re_active_iterate_end
Definition extras.h:329
extra_type_re_active_iterate
#define extra_type_re_active_iterate(_p)
Definition extras.h:325
MAX_LEN_NAME
#define MAX_LEN_NAME
Definition fc_types.h:66
fcintl.h
RQ_
#define RQ_(String)
Definition fcintl.h:76
R__
#define R__(String)
Definition fcintl.h:75
game
struct civ_game game
Definition game.c:61
game.h
government.h
governments_re_active_iterate
#define governments_re_active_iterate(_p)
Definition government.h:127
governments_re_active_iterate_end
#define governments_re_active_iterate_end
Definition government.h:131
improvement_re_active_iterate_end
#define improvement_re_active_iterate_end
Definition improvement.h:214
improvement_re_active_iterate
#define improvement_re_active_iterate(_p)
Definition improvement.h:210
log.h
fc_strdup
#define fc_strdup(str)
Definition mem.h:43
multipliers_re_active_iterate
#define multipliers_re_active_iterate(_mul_)
Definition multipliers.h:71
multipliers_re_active_iterate_end
#define multipliers_re_active_iterate_end
Definition multipliers.h:75
registry.h
road_count
Road_type_id road_count(void)
Definition road.c:50
rscompat_init_info
void rscompat_init_info(struct rscompat_info *info)
Definition rscompat.c:57
sanity_check_ruleset_data
bool sanity_check_ruleset_data(struct rscompat_info *compat)
Definition rssanity.c:853
autoadjust_ruleset_data
bool autoadjust_ruleset_data(void)
Definition rssanity.c:1551
rssanity.h
ruledit.h
ruledit_qt.h
save_ruleset
bool save_ruleset(const char *path, const char *name, struct rule_data *data)
Definition rulesave.c:3389
rulesave.h
freeciv_storage_dir
char * freeciv_storage_dir(void)
Definition shared.c:671
DIR_SEPARATOR
#define DIR_SEPARATOR
Definition shared.h:127
specialist.h
specialist_type_re_active_iterate_end
#define specialist_type_re_active_iterate_end
Definition specialist.h:88
specialist_type_re_active_iterate
#define specialist_type_re_active_iterate(_p)
Definition specialist.h:83
civ_game::description_file
char * description_file
Definition game.h:281
civ_game::control
struct packet_ruleset_control control
Definition game.h:83
civ_game::ruledit
struct civ_game::@31::@35::@40 ruledit
civ_game::server
struct civ_game::@31::@35 server
effect
Definition effects.h:40
item
Definition climisc.h:80
packet_ruleset_control::version
char version[MAX_LEN_NAME]
Definition packets_gen.h:1464
packet_ruleset_control::nation_count
int nation_count
Definition packets_gen.h:1453
packet_ruleset_control::num_disaster_types
int num_disaster_types
Definition packets_gen.h:1447
packet_ruleset_control::num_resource_types
int num_resource_types
Definition packets_gen.h:1445
packet_ruleset_control::name
char name[MAX_LEN_NAME]
Definition packets_gen.h:1463
rscompat_info
Definition rscompat.h:30
styles_re_active_iterate_end
#define styles_re_active_iterate_end
Definition style.h:60
styles_re_active_iterate
#define styles_re_active_iterate(_p)
Definition style.h:56
fc_snprintf
int fc_snprintf(char *str, size_t n, const char *format,...)
Definition support.c:960
TRUE
#define TRUE
Definition support.h:46
FALSE
#define FALSE
Definition support.h:47
sanitylog
static conversion_log * sanitylog
Definition tab_misc.cpp:472
sanity_log_cb
static void sanity_log_cb(const char *msg)
Definition tab_misc.cpp:477
effect_counter
static bool effect_counter(struct effect *peff, void *data)
Definition tab_misc.cpp:327
tab_misc.h
advance_re_active_iterate
#define advance_re_active_iterate(_p)
Definition tech.h:282
tech_class_re_active_iterate
#define tech_class_re_active_iterate(_p)
Definition tech.h:208
advance_re_active_iterate_end
#define advance_re_active_iterate_end
Definition tech.h:286
tech_class_re_active_iterate_end
#define tech_class_re_active_iterate_end
Definition tech.h:212
terrain_re_active_iterate_end
#define terrain_re_active_iterate_end
Definition terrain.h:281
terrain_re_active_iterate
#define terrain_re_active_iterate(_p)
Definition terrain.h:277
goods_type_re_active_iterate_end
#define goods_type_re_active_iterate_end
Definition traderoutes.h:245
goods_type_re_active_iterate
#define goods_type_re_active_iterate(_p)
Definition traderoutes.h:241
unit_type_re_active_iterate
#define unit_type_re_active_iterate(_p)
Definition unittype.h:871
unit_class_re_active_iterate_end
#define unit_class_re_active_iterate_end
Definition unittype.h:928
unit_class_re_active_iterate
#define unit_class_re_active_iterate(_p)
Definition unittype.h:924
unit_type_re_active_iterate_end
#define unit_type_re_active_iterate_end
Definition unittype.h:875