Скрипты - неотъемлемая часть GECK. При написании возникает очень много казусов. Данная тема должна помочь не наступать на "грабли" новичкам и делиться опытом с другими более продвинутых мододелов.
OnActivate player will compile but act as OnActivate
То есть надо, как и было изначально, проверить внутри блока GetActionRef или IsActionRef.
Добавлено (13 Марта 2015, 18:11) ---------------------------------------------
ЦитатаКсюXa ()
Щя разнесут...
Я ж для пользы дела...
Добавлено (13 Марта 2015, 18:18) ---------------------------------------------
Цитатаdianka48 ()
В FalloutNV скрипт scn vGomorrahSlot01Script содержит строчку ShowSlotMachineMenuParams GomorrahCasinoData 1 60 0, при чем не пойму что за 60 и 0, а в скрипте от мода такая же строчка но выглядит так : ShowSlotMachineMenuParams GomorrahCasinoData 1 CasinoMillionCaps.RateCasinoChips 0.
Здесь изменяется максимальная ставка. Вместо фиксированного значения 60 крышек назначается какая-то переменная. К фишкам это отношения, похоже не имеет. А вот предупреждение Invalid Chip in CasinoData list, откуда бы оно там ни выскакивало, имеет. Неправильная фишка в объекте "казино"... То есто смотреть надо, что там переправлено в этих казино и их фишках (Miscellaneous - Casino и Miscellaneous - Casino Chip). Хм, фишка там в каждом казино одна на все виды развлечений. Почему тогда не работают только автоматы? В чём эта нерабочесть, кстати, выражается в смысле симптомов?
Добавлено (13 Марта 2015, 19:03) --------------------------------------------- Скачал, посмотрел. Мод простой как табуретка, ломаться там нечему. В казино ничего не трогали, кроме максимального выигрыша. В игре бага не наблюдал. Версия игры 1.4.
Не знаю, как там в Лондоне на ГЕКК-вики, я не была. Может, там собака — друг человека! А у нас управдом — друг человека! а тут я проверила такую конструкцию ... Взяла модельку с набором анимашек, написала тот скрипт и зашла в игру. Работает жа. Что еще нужно человеку, чтобы достойно встретить старость, получить желаемое. RustWays, только там в скрипт нужно внести маленькое изменение. Потому что переменная State успевает смениться, и анимашка форвард прерывается, едва начавшись. Попробуй так: Scn RWTstcrn
int State
begin onActivate Player if State == 0 playGroup Forward 1 set State to 1 else if State == 1 playGroup Backward 1 set State to 0 endif endif end ------------- тут на твое усмотрение: хочешь - в типе блока пишешь OnActivate Player, хочешь - внутри блока - && GetActionRef == player . раз так более правильно. Я проверила именно на приведенном варианте.
Добавлено (13 Марта 2015, 19:29) --------------------------------------------- А, да... Вместо int State я использовала Short State Переменной типа Short вполне достаточно, чтоб отслеживать два состояния: 0 и 1 без точности до n-знаков после запятой
Я шаурму в ларьках на улице не покупаю. Делаю дома сама. Получается как настоящая. Даже траванулась пару раз.
Взяла модельку с набором анимашек, написала тот скрипт и зашла в игру
Ну и какой ты после этого теоретик?
ЦитатаКсюXa ()
OnActivate Player, хочешь - внутри блока - && GetActionRef == player . раз так более правильно.
Написать, конечно, можно и OnActivate player, но только потом не надо удивляться, что блок срабатывает при активации кем попало, а не только игроком. Хоть неписи обычно активацией активаторов по своей инициативе и не занимаются, но в исходном скрипте проверка была. Наверное, в моде есть непись-любитель поактивировать что под руку подвернётся...
Здесь изменяется максимальная ставка. Вместо фиксированного значения 60 крышек назначается какая-то переменная. К фишкам это отношения, похоже не имеет. А вот предупреждение Invalid Chip in CasinoData list, откуда бы оно там ни выскакивало, имеет. Неправильная фишка в объекте "казино"... То есто смотреть надо, что там переправлено в этих казино и их фишках (Miscellaneous - Casino и Miscellaneous - Casino Chip). Хм, фишка там в каждом казино одна на все виды развлечений. Почему тогда не работают только автоматы? В чём эта нерабочесть, кстати, выражается в смысле симптомов?
Я пыталась найти проблему, почему у меня мод не хочет работать, точнее работает все кроме игровых автоматов. Все происходит следующим образом: Покупаю фишки у кассира, подхожу к игровому автомату, пытаюсь его использовать, и мне выводится это сообщение : Invalid Chip in CasinoData list. Вот и вся проблема. Версия игры 1.4. НВСЕ МСМ ФНВЭДИТ всякие баг фиксы, и ни чего не спасает.
есть объект, есть две анимации -форвард и бэквард. Активируем впервые - форвард. Второй раз - бэквард.
Анимации объекта? Или игрока? Немного почистил код для удобности, и забил всё в один блок. Всё работает.
Код
Scn RWTstcrn int State Begin OnActivate if GetAR == player if State == 0 Player.PlayGroup Forward 0 ;потому что 1-ца багнутая Set State to 1 elseif state == 1 Player.PlayGroup Backward 0 Set State to 0 endif endif End
если анимации для объекта - то всё то же самое, но обязательно используй в начале set SelfRef to This (очень часто игра багается и скрипт не воспринимает реф-носитель, в итоге можно запороть не только один а сразу нексколько скриптов) и selfRef.PlayGroup forward\backward
Я пыталась найти проблему, почему у меня мод не хочет работать, точнее работает все кроме игровых автоматов. Все происходит следующим образом: Покупаю фишки у кассира, подхожу к игровому автомату, пытаюсь его использовать, и мне выводится это сообщение : Invalid Chip in CasinoData list. Вот и вся проблема. Версия игры 1.4. НВСЕ МСМ ФНВЭДИТ всякие баг фиксы, и ни чего не спасает.
Как я уже говорил, этот мод никаких фишек не трогает. В казино он меняет только максимальный выигрыш, в скриптах автоматов, рулетки и блэкджека - только максимальную ставку. Что самое смешное, в основном мастер файле и в дополнениях никаких сообщений о фишках-инвалидах не обнаруживается. Пожалуй, на всякий случай уточню. Проверялось на чистой игре (по крайней мере без других "улучшителей казино")? Без этого мода работает? Если на чистой и без мода работает... Что ж, необъяснимое иногда случается.
Joopeeter, какие фишки инвалиды? Там же написано, что неправильное *ID* фишки в CasinoData List или фишка которой я хочу активировать Слот-машину не найдена в CAsinoData List. Улучшений на казино кроме этого мода нет. Посмотрела в FNVEdit, ну не пойму в чем проблема, может в различиях с поле SCDA - Complited Script. RefCount? Тогда будьте добры скажите мне, как найти CasinoData List? Сама
Посмотрела в FNVEdit, ну не пойму в чем проблема, может в различиях с поле SCDA - Complited Script. RefCount?
Проблема в том, что скрипты этих всех азартных игр к фишкам не относятся вообще никак. Как и весь этот мод. И сообщение берётся не пойму откуда. Я имею ввиду, что текст сообщения не обнаруживается в основном мастер-файле и тем более в моде. Оттого и подозреваю, что что-то ещё подключено к игре.
Цитатаdianka48 ()
Тогда будьте добры скажите мне, как найти CasinoData List?
Полагаю, это те самые казино, которые в разделе Casino, если смотреть через FNVEdit. Через ГЭКК их видно наглядней (раздел Miscellaeuos - Casino). Признаюсь, что-то в них сломать мне так и не удалось.
Joopeeter, , зачем вы надо мной издеваетесь? Разве у слова Invalid только одно значение? Я Вам сделал, что-то плохое или оскорбила Вас? Ни когда не понимала глум над человеком который пытается разобраться с проблемой и просит помощи у более знающих людей, а те в свою очередь вместо конструктива, буквально переводят слова, хотя это абсолютно неуместный перевод. Если посмотреть с юмором на это, то фишка то правда инвалид, раз её не видит игра. А вот все моды:
01NodFireflyLaserRifle.esp AWorldOfPain(Preview).esm CaravanPack_lang.esp ClassicPack.esm ClassicPack_lang.esp DeadMoney.esm FalloutNV.esm GunRunnersArsenal.esm GunRunnersArsenal_lang.esp HonestHearts.esm LonesomeRoad.esm MercenaryPack.esm MercenaryPack_lang.esp More Perks for Companions Update.esp More Perks for Companions.esm More Perks for Dead Money Update.esp More Perks for Dead Money.esm More Perks for Honest Hearts Update.esp More Perks for Honest Hearts.esm More Perks for Old World Blues Update.esp More Perks for Old World Blues.esm More Perks Update.esp More Perks.esm More Traits Update.esp More Traits.esm OldWorldBlues.esm PointLookoutNV.esm ThePittNV.esm TribalPack.esm TribalPack_lang.esp ZetaNV.esm CaravanPack.esm HonestHeartsRusMgTribal.esp NVEC BugFixes.esp New Vegas Error Corrections Reduce CTD - DLC.esp The Mod Configuration Menu.esp SlaveTown - Episode II.esm homeITU.esm DS_WH40K.esm MoMod.esm domecity.esm House of Horrors.esm 7758_CasinoMillionCa.esp SignatureWeapons.esp Night Furia.esp Unique skill Magazines.esp ForestPerkNoCL.esp Necron Gauss Weapons.esp Survivalist Crossbow.esp NiptonRebuilt_RUS.esp Performance Of The Gods.esp Clean Up New Vegas.esp RadiiHairFix.esp VendorsChestsRespawnMonitor (Silent notice).esp AQFH2NV.esp AQFH_D_NV.esp AWOP-LowNPCSWastelandOnly.esp SlaveTown - Episode II - Assets.esp Max Level 100.esp SignatureArmor.esp CMD.esp BoostedSkills.esp BOA.esp Sword.esp PX-187 Phase Pulse Cannon.esp 1puxagoustlla.esp SniperAMR.esp AR_Ghost_Marines.esp
В FOMM в другом порядке все выставлено. Тогда как игра определяет; могу я поиграть в слот-машину; какое количество у меня фишек; и соответствуют ли фишки этому казино?
Да не издевается никто. Это я просто так шучу, что без смайлика об этом и не догадаешься. Я вот о чём. Текст сообщения - его игра не сама сочинила, он где-то написан. В FalloutNV.esm и DLC его нет, по крайней мере поиск в ГЭКК ничего не выдаёт, а поиск там будь здоров какой дотошный. Значит оно в каком-то из этих модов. Значит мод, в котором оно находится, каким-то образом затрагивает казино, иначе за каким бы лешим автору мода вносить туда это сообщение. Значит, возможен конфликт с другими модами, затрагивающими казино. Наш рассматриваемый мод сам по себе, когда он единственный подключенный, ничего в казино сломать не может. Конечно, скачивать всю эту гору модов я не стану. Да и поиск конфликтов среди чьих-то чужих модов - это не то, что я называю интересной задачей. Да и тема совсем не о том. Поэтому просто несколько соображений, куда, по моему мнению, надо смотреть. Загрузить всю кучу в FNVEdit и в ГЭКК (ну, может, кроме тех, которые совсем вне подозрений - типа всяких классикпаков). Особенно под подозрением "исправители всех ошибок" и "улучшители всего". В Эдите посмотреть в разделы Casino и Casino Chip - какие моды туда залезают. Глянуть, не затронуты ли сами игровые автоматы - они в разделе Activator, игровой автомат Гоморры, например, называется, vGomorrahSlot01. В ГЭКК зайти в меню Edit - Find Text и ввести в поиск текст сообщения или его часть. В каком моде сообщение отыщется, тот, голубчик, и конфликтует.
Цитатаdianka48 ()
Тогда как игра определяет; могу я поиграть в слот-машину; какое количество у меня фишек; и соответствуют ли фишки этому казино?
Разработчики сделали это на уровне игрового движка. Сделали такую разновидность игровых объектов - "казино" (в ГЭКК это Miscellaneous - Casino), сделали разновидность объектов "фишка для казино" (Miscellaneous - Casino Chip). В каждом казино в поле Currency указано, какая фишка имеет в нём хождение. Указаны максимальный выигрыш и квест, следящий за выигрышами через свой скрипт. Указаны модели и текстуры, которые будут на экране во время азартных игр. Указаны модели фишек, которые будут сложены стопочкой на игровом столе (это не объекты "фишка для казино"). Автоматы и столы для азартных игр, расставленные по залу - это просто активаторы. На каждом коротенький скрипт, который проверяет, можно ли игроку играть в этом казино, и если можно, то даётся команда показать меню соответствующей азартной игры из соответствующего объекта "казино". В скрипте же указывается и максимальная ставка. Наличие фишек в скрипте не проверяется. Остаётся предположить, что этой проверкой занимается лично движок, потому что больше тут вклиниться некому.
Добавлено (18 Марта 2015, 09:29) ---------------------------------------------
ЦитатаXilandro ()
Player.PlayGroup Forward 0 ;потому что 1-ца багнутая
Нажал на кнопку и пошёл, пошёл, пошёл... А что, можно было бы использовать. Жаль, что это не работает хоть сколько-нибудь удовлетворительно. Особенно с нолём.
Нажал на кнопку и пошёл, пошёл, пошёл... А что, можно было бы использовать. Жаль, что это не работает хоть сколько-нибудь удовлетворительно. Особенно с нолём.
С нулем анимация не багается если используешь "if someInt == 0; rActor.playGroup; let someint := 1; endif", она проигрывается ровно один фрейм. Да и вообще для активаторов лучше использовать specialIdle а группы не трогать. Если нужно чтобы "нажал на кнопку и пошел пошел пошел" - то лучше делать что-то вроде этого: Нажал снова - встал на месте.
Код
scn someScriptName int bLock int bInit Begin GameMode
if IsKeyPressed 50 let bLock := 1 elseif bLock if bInit let bInit := 0 player.PlayGroup Idle 0 else let bInit := 1 endif let bLock := 0 endif if bInit == 1 Player.PlayGroup Forward 0 endif End
На игроке работает моментами коряво, игра ждет пока обновится анимация, потому порой Playgroup начинается очень медленно, и при движении мыши - скорость фиксится. На НПС работает без этой неприятной мелочи.
ЦитатаQuazar ()
Никто еще не разбирался с этим плагином - JIP NVSE Plugin ?Проект вроде многообещающий..
Я разбирался. Есть пара странных функций типа Get\SetPrimitiveBound, а в остальном всё очень цивильно, звуки, погода, прожектили, интерфейс, новые функции для оружия и аммуниции. С первого взгляда плагин очень легко недооценить, но он на самом деле дает возможность сделать очень крутые моды о которых раньше даже мечтать было страшно) Да и проект очень быстро вышел из разряда пряника в разряд мастхеф.
С нулем анимация не багается если используешь "if someInt == 0; rActor.playGroup; let someint := 1; endif"
То есть тот предыдущий скрипт работает? Надо же, а мне показалось наоборот.
ЦитатаXilandro ()
Если нужно чтобы "нажал на кнопку и пошел пошел пошел"
Не знаю, может и нужно. Я по простоте душевной подумал, что первоначально спрашивалось просто-напросто о запуске анимации активатора. В пешее путешествие игрока логичнее было бы отправить из диалога.
ЦитатаXilandro ()
лучше делать что-то вроде этого
Не смотря на разные незнакомые слова типа IsKeyPressed и let, мне кажется, что принципиальных отличий от предыдущего скрипта тут нету. Это теоретически. Посмотрел бы и на практике, но я из тех странных типов, которые играют в ванильку без нормальных модов.
Всё там работает. Если нужно форвард\бэквард анимацию для активатора (не объекта) и есть какие-то проблемы с проигрыванием - нужно проверить cycle type в kf и убедиться что там clamp. Одного фрейма playgroup хватит чтобы анимация проигралась полностью. Если нет - можно попробовать вместо нуля единицу, хотя не уверен багнется ли. Если начнет глючить - анимация типа specialIdle и rActivator.playIdle всё сделает.
Отличие второго скрипта в том что "нажал кнопку и пошел пошел пошел", а не "нажал кнопку и типа пошел, но не пошел" + всё на одной кнопке, работает как on\off по поводу IsKeyPressed - http://geck.bethsoft.com/index.php?title=IsKeyPressed А let - тот же set только с кучей полезных возможностей, позволяет работать с массивами, стрингами и прочей кучей полезных новых функций в NVSE 4+. Чем быстрее перешел на Let - тем лучше, потому использую повсеместно вместо set. http://geck.bethsoft.com/index.php?title=Let
Может быть, скрипт отказывается работать за бесплатно?
ЦитатаXilandro ()
Всё там работает.
Ну как не поверить такому уверенному тону? Раз "там" работает, то и тут должно. Всё, глазам своим верить отныне перестаю.
ЦитатаXilandro ()
Отличие второго скрипта в том что "нажал кнопку и пошел пошел пошел", а не "нажал кнопку и типа пошел, но не пошел" + всё на одной кнопке, работает как on\off
Стало быть, в плане Player.PlayGroup Forward 0 отличий нет. Ну и хорошо. Работает же.
Скрипт - молодец. Вот только что он смог? Запустил ли он player.PlayGroup? По виду, он запустил просто PlayGroup или ВывескаРеф.PlayGroup. Это и я могу.
ЦитатаXilandro ()
объяснить что и где не работает, здесь не позволяет либо менталитет, либо религия.
Вообще-то да, ну да ладно. На всякий случай напомню, что речь о запуске анимации на игроке, а не на активаторе. От первого лица только чуть дёргается камера, как при коротком нажатии на клавишу движения. Да и то, только если шевельнёшь мышкой или клавой. Что с нолём, что с единицей - без разницы. От третьего лица с нолём та же история - короткий порыв к движению, как при кратком нажатии клавиши. От третьего лица с единицей начинается медленное движение. Шевельнёшь чем-нибудь - движение обретает нормальную скорость. При движении активировать активатор снова не удаётся, но это ладно, чёрт бы с ним. Чистая игра без модов, улучшителей, исправителей и т.п. Подробно описывать, как я, падкий до халявы, на форуме нажал Ctrl+C, а в редакторе - Ctrl+V, не стану. В то, что эту операцию я проделал правильно, придётся поверить на слово.
Добавлено (19 Марта 2015, 22:27) --------------------------------------------- NPC на PlayGroup с нолём реагируют так же - коротким подёргиванием.
Там достаточно много документации, нет возможности полностью с ней ознакомится. Меня интересовал вопрос - нет ли там функции, которая позволяет задать референс-ссылку на выделенный в пип-бое объект? Именно выделенный, а не одетый или использованный..
Если я правильно понимаю этот механизм, у большинства предметов, находящихся в инвентаре, нет собственного FormID. Точнее, он есть только у тех, которые недавно были именно референс-объектами, самостоятельными объектами игрового мира - на полу валялись например (и существование этого FormID привязано к загруженности той ячейки, в которой оно валялось).
Даже в тех случаях, когда FormID есть, это не "полноценный" референс - например, оружие в контейнере не может быть заряжено, хотя владелец у предмета может быть, отсутствуют координаты X/Y/Z, хотя масштаб может быть не единица...
Ipatow, дело в том что в Обливионе такая функция была (точнее не в самой игре, а опять же в экстендере), вот правда ее название я конечно уже не вспомню.. Была надежда, что возможно ее все же перенесут в фоллаут.
Хотя, я уже сам думал о том, что если это до сих пор не сделали, то видимо у этих двух игр действительно есть какие-то значительные отличия в механизме инвентарных предметов, либо какие-то другие серьезные причины...
А поможете еще с одним вопросом? Вот мне нужно сделать так чтобы после убийства гг 20 когтей смерти появился мессадж об этом... Есть лист-form куда вписаны все когти и есть GetDeadCount но скрипт не хочет сохранятся - пишет что-то про actorbase. Сама строчка такая: IF Player.GetDeadCount CrDeathClawList > 20 ShowMessage DeathClawDead20Message ENDIF
и ничего не сохраняется. Вот так. Если вместо лист-form пишу ИД какогото когтя, тогда все хорошо сохраняется и работает. Но когтей ж много разных в игре у всех ИД разные, как тогда быть? как можно GetDeadCount вместе с form заставить работать? Или нельзя так?
А полностью текст ты привести не можешь? И мы должны гадать - что же там компилятор пишет? А во вторых: CrDeathClawList Лист. т.е - список. Получается в скрипте написано: если количество убитых СПИСКОВ больше 20. Как можно убить список?
А вообще-то все это уже реализовано в достижениях (в ГЕКК это раздел Challenge) Когда после убийства скольких-то там тараканов, скорпионов, мутантов, (нужное подчеркнуть) выводится сообщение о награде. Можешь посмотреть, как это сделано и повторить.
Пишет такую ошибку: invalid actor base 'CrDeathClawList' for parameter Actor Base
и три кнопки Да , Нет, Отмена
И все, скрипт не сохраняется.
>> в ГЕКК это раздел Challenge
А мне для Фоллаута нужно, там нет этих достижений.
>> Как можно убить список?
Я думал что будут считаться те кричеры которые в этом списке. Если убито 20 или больше кричеров из списка тогда и появится мессадж.
.. я млжет не так что пишу но я 3 недели назад только gekk первый раз открыл, ничего не знаю еще. Вот и пишу чтобы узнать как можно сделать такой скрипт. Очень нужно. я как раз и хочу сделать типа достижений как в Вегасе но конечно попроще. Для себя.
Там достаточно много документации, нет возможности полностью с ней ознакомится. Меня интересовал вопрос - нет ли там функции, которая позволяет задать референс-ссылку на выделенный в пип-бое объект? Именно выделенный, а не одетый или использованный..
Референс на выделенный в пипбое объект? К сожалению таких функций я не видел. Ipatow прав. У предметов в инвентаре есть BaseID, но нет референсов. Так же нет возможности работать с этими BaseID как с обычными рефами в привычном нам порядке типа set xRef to Player.SomeFunction ItemBaseID Грубо говоря инвентарь живет своей жизнью, и прямого доступа к нему не существует. Как игра с ним справляется - никто не знает. К счастью есть такая штука как inventory references функции и лупы, портированные с OBSE, в обле была такая же проблема. Эти функции дают предмету в контейнере собственный временный референс, но ровно на один фрейм, так что как только функция отвалилась и ты перешел в следующий if - endif блок - референс уже NULL. Очень сильно советую взять в привычку юзать IsFormValid прежде чем делать что-то с инвентори рефом. вот такие функции.
Давай вспоминай. Вспомнишь - пойду спрошу злых кодеров ее портировать.)
Порылся в старых плагинах для Обливиона, нашел название - GetActiveMenuSelection. Относится к UI Functions. Сам я ее не использовал, но видел по крайней мере 3 плагина в котором она была задействована, один из них точно Kyoma Spell Renamer. В режиме меню она действует так - курсором мыши выделяется в нужный объект (не обязательно материальный предмет в инвентаре), потом фактически ты можешь делать с выделенным что хочешь на скриптовом уровне (трансформировать, добавить какие-то свойства, переименовать и т.д.) Как правило, для этого требовалось еще какое-то дополнительное действие (например нажатие назначенной клавиши).
Но, повторюсь, это было в OBSE...
ЦитатаФиля12 ()
Пишет такую ошибку: invalid actor base 'CrDeathClawList' for parameter Actor Base
GetDeadCount работает только с базовыми актерами, не со списками. Поэтому у тебя скрипт компилируется когда ты в качестве проверки используешь EditorID существа (ты сам писал Если вместо лист-form пишу ИД какогото когтя, тогда все хорошо сохраняется и работает.), но НЕ компилируется когда указываешь список. Текст ошибки как раз на это и указывает. "Помирить" ты их никак не сможешь, если функция не работает со списками, то она не работает не чуть-чуть а насовсем..
Интересно, кто-нибудь сделал функцию SetLinkedRef в пару к оригинальной Get..? Она ведь до скрежета зубовного напрашивается с незапамятных времён - у линка роскошное почётное место практически во всех кондишнах, пакеты поведения без динамической линковки просто бледная тень того, что могло бы быть... Среди FOSE-плагинов такая определённо не появлялась.
SetLinkedReference есть в JIP плагине. Но функция не сохраняет изменения в сейв. Вот что мне сказал кодер по поводу похожей функции CloneForm "The function relies on functionality of the saves that no longer exists in the engine since FO3" Скорее всего потому SetLinkedRef и была оставлена ребятами за бортом как в FOSE, так и в NVSE. Hlp с оф.форума пытался найти выход, эдакой обходной путь сохранения разных изменений в сейв файл, но безуспешно. Можно в принципе подолбать разрабов NX'а, они сохраняют свои данные в отдельный файл, может смогут сделать то же самое с референсами.
вот описание SetLinkedReference: (null) reference.SetLinkedReference objectRef:ref Sets the calling reference's linked reference to objectRef or, if the latter is not provided, removes its current linked reference. Unfortunately, the changes are not saved with the game and this function must be called again when the game is restarted.