Как узнать начальное число ранее созданной игры?

OpenTTD - современная игра, клон Transport Tycoon Deluxe с открытым исходным кодом, написанный на C и С++. Содержит ряд ключевых улучшений и возможность игры по сети. На данный момент это главное направление развития игры.

Модераторы: eraserkry, Mihamster, Smoky555, Группа модераторов

Re: Как узнать начальное число ранее созданной игры?

Сообщение ziond » Пн мар 12, 2012 16:41

Edd.Dragon писал(а):
ziond писал(а):Сам то пробовал то что советуешь? Делаю как ты советуешь, получаю новую игру согласно новым (последним) настройкам. У меня trunk r23974

Конечно пробовал, но на RC1.

Попробовал сейчас на чистой установке, вроде получилось :roll:
Есть у меня чувство, что параметр "Разнообразие ландшафта" не берётся из сэйва, а берётся из главного меню. Может кто-нибудь подтвердить или опровергнуть?
ziond
Директор
Директор
 
Сообщения: 355
Зарегистрирован: Пт мар 13, 2009 15:59

Re: Как узнать начальное число ранее созданной игры?

Сообщение Edd.Dragon » Пн мар 12, 2012 17:14

А на последнем транке r24025 действительно обнаружил разницу. Но НЕ в соответствии с настройками в меню.

Вот генерю карту с одними настройками (10 городов, все по минимуму, промышленности вообще нет):
Изображение

Прокручиваю время (5+ лет), выращивая один из городов и сохраняю:
Изображение

Меняю кардинально настройки (в том числе, 40 городов + промышленность) и климат(!) - получаю абсолютно иной типаж, естетсвенно:
Изображение

Из этой игры загружаю старую игру и делаю рестарт:
Изображение

Исходной карты не вышло, города на другом месте, но их 10, а не 40. Воды тоже мало, плоская и в обычном климате, а не как в новых настройках.

Загадка, короче...
Аватара пользователя
Edd.Dragon
Директор
Директор
 
Сообщения: 266
Зарегистрирован: Сб янв 14, 2012 06:09

Re: Как узнать начальное число ранее созданной игры?

Сообщение Edd.Dragon » Пн мар 12, 2012 17:17

ziond писал(а):Попробовал сейчас на чистой установке, вроде получилось :roll:
Есть у меня чувство, что параметр "Разнообразие ландшафта" не берётся из сэйва, а берётся из главного меню. Может кто-нибудь подтвердить или опровергнуть?

Ну вот по скринам, перед первой игрой было разнообразие "нет", а перед второй - "большое". Фиг его поймешь... Карта маленькая :mrgreen:

Хотя нет, туплю. Очевидно по скринам, что разнообразие изменилось. Значит таки не из сейва, а из настроек.
Аватара пользователя
Edd.Dragon
Директор
Директор
 
Сообщения: 266
Зарегистрирован: Сб янв 14, 2012 06:09

Re: Как узнать начальное число ранее созданной игры?

Сообщение ziond » Пн мар 12, 2012 18:43

Edd.Dragon писал(а):
ziond писал(а):Попробовал сейчас на чистой установке, вроде получилось :roll:
Есть у меня чувство, что параметр "Разнообразие ландшафта" не берётся из сэйва, а берётся из главного меню. Может кто-нибудь подтвердить или опровергнуть?

Ну вот по скринам, перед первой игрой было разнообразие "нет", а перед второй - "большое". Фиг его поймешь... Карта маленькая :mrgreen:

Хотя нет, туплю. Очевидно по скринам, что разнообразие изменилось. Значит таки не из сейва, а из настроек.

Вот-вот... У меня такж сегодня все получалось, а вчера не получалось :mrgreen: Походу глюк гдето есть. Надо бы отловить и багрепорт написать
ziond
Директор
Директор
 
Сообщения: 355
Зарегистрирован: Пт мар 13, 2009 15:59

Re: Как узнать начальное число ранее созданной игры?

Сообщение Странник » Вт мар 13, 2012 00:25

Не ребят! Это не баг. При генирации новой карты все параметры игра берет из основный настроек. При этом учитывается такой параметр как: расстояние между городами, проверка этого расстояния. Если же сразу после генирации новой карты загрузить ранее сохраненую игру, то все параметры будут заменены загруженными из сейва. Однако при выходе из игры в главное меню все параметры вернуться на свои места и в настройках окажутся те параметры которые задавались при генирации новой карты.
Аватара пользователя
Странник
Начальник станции
Начальник станции
 
Сообщения: 113
Зарегистрирован: Чт янв 06, 2011 21:08
Откуда: Москва

Re: Как узнать начальное число ранее созданной игры?

Сообщение Vaulter » Вт мар 13, 2012 00:27

на кой лешего вообще треба сие озадачивание???
Здоровье приносит ту свободу, которую очень немногие понимают, пока не теряют его.
skype: andrey-zaharov
Аватара пользователя
Vaulter
Директор
Директор
 
Сообщения: 439
Зарегистрирован: Вт авг 02, 2005 14:35
Откуда: Санкт-Петербург

Re: Как узнать начальное число ранее созданной игры?

Сообщение Странник » Вт мар 13, 2012 00:33

Vaulter писал(а):на кой лешего вообще треба сие озадачивание???


Вы очень кстати, хотя не знаю кой леший занес вас в этот топик, но от ответа вам не увильнуть! :D :D Если серьезно, может дадите по этому вопросу профиссиональное разьяснение?
Аватара пользователя
Странник
Начальник станции
Начальник станции
 
Сообщения: 113
Зарегистрирован: Чт янв 06, 2011 21:08
Откуда: Москва

Re: Как узнать начальное число ранее созданной игры?

Сообщение Vaulter » Вт мар 13, 2012 11:46

Seed используется просто для инициализации генератора случайных чисел.
Если все совпадает как при начале той карты которую хотца получить (именно ландшафт и пр.) - можно получить ту же карту

Параметры ландшафта входят в GameCreationSettings:
http://docs.openttd.org/structGameCreationSettings.html
которые входят в GameSettings
которых используется две штуки
Код: Выделить всё
/** The current settings for this game. */
extern GameSettings _settings_game;

/** The settings values that are used for new games and/or modified in config file. */
extern GameSettings _settings_newgame;


и в коде генерации мира:
Код: Выделить всё
//...
if (_settings_game.game_creation.generation_seed == GENERATE_NEW_SEED) _settings_game.game_creation.generation_seed = _settings_newgame.game_creation.generation_seed = InteractiveRandom();
//...


то есть, настройки сида берутся из текущих, но если их нет, и в настроки в openttd.cfg и для генерации генерится новый сид
Здоровье приносит ту свободу, которую очень немногие понимают, пока не теряют его.
skype: andrey-zaharov
Аватара пользователя
Vaulter
Директор
Директор
 
Сообщения: 439
Зарегистрирован: Вт авг 02, 2005 14:35
Откуда: Санкт-Петербург

Re: Как узнать начальное число ранее созданной игры?

Сообщение Vaulter » Вт мар 13, 2012 11:48

ммм.
Код: Выделить всё
void MakeNewgameSettingsLive()
{
_settings_game = _settings_newgame;
Здоровье приносит ту свободу, которую очень немногие понимают, пока не теряют его.
skype: andrey-zaharov
Аватара пользователя
Vaulter
Директор
Директор
 
Сообщения: 439
Зарегистрирован: Вт авг 02, 2005 14:35
Откуда: Санкт-Петербург

Re: Как узнать начальное число ранее созданной игры?

Сообщение Vaulter » Вт мар 13, 2012 11:54

Да, все так и есть:
Есть настройки игры, сохраненые в игре.
Есть настройки в конфиге

Если генерить карту из Главного Меню - скопируются из конфига в настройки игры

Если же restart - функция MakeNewgameSettingsLive не вызывается - настройки будут из текущей игры.

поправьте если ошибся - уточню еще разок по коду.
Здоровье приносит ту свободу, которую очень немногие понимают, пока не теряют его.
skype: andrey-zaharov
Аватара пользователя
Vaulter
Директор
Директор
 
Сообщения: 439
Зарегистрирован: Вт авг 02, 2005 14:35
Откуда: Санкт-Петербург

Re: Как узнать начальное число ранее созданной игры?

Сообщение ziond » Вт мар 13, 2012 15:39

Покопался таки в исходниках :) и походу параметр разнообразия ландшафта не хранится в сэйве, что имхо нелогично :roll:
Код: Выделить всё
SDT_VAR(GameSettings, game_creation.variety, SLE_UINT8, SLF_NOT_IN_SAVE | SLF_NO_NETWORK_SYNC, 0, 0,       0, 5, 0, STR_NULL, STR_NULL, NULL, 0, SL_MAX_VERSION),

Еще нашел таки описание команды restart
Код: Выделить всё
      IConsoleHelp("Restart game. Usage: 'restart'");
      IConsoleHelp("Restarts a game. It tries to reproduce the exact same map as the game started with.");
      IConsoleHelp("However:");
      IConsoleHelp(" * restarting games started in another version might create another map due to difference in map generation");
      IConsoleHelp(" * restarting games based on scenarios, loaded games or heightmaps will start a new game based on the settings stored in the scenario/savegame");

Т.е. нормально рестартнуть старый сэйв можно только если сэйв игрался только на одной версии опена и только в этой версии. Короче имхо не очень полезная команда :mrgreen:
ziond
Директор
Директор
 
Сообщения: 355
Зарегистрирован: Пт мар 13, 2009 15:59

Re: Как узнать начальное число ранее созданной игры?

Сообщение Edd.Dragon » Вт мар 13, 2012 15:51

Т.е. нормально рестартнуть старый сэйв можно только если сэйв игрался только на одной версии опена и только в этой версии.

И то не всегда получется.
Аватара пользователя
Edd.Dragon
Директор
Директор
 
Сообщения: 266
Зарегистрирован: Сб янв 14, 2012 06:09

Пред.

Вернуться в Общие вопросы по OpenTTD

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 14