Blog (67)
Komentarze (1.9k)
Recenzje (0)

Tworzenie własnego zestawu reguł „Postęp"

Strona główna@nintyfanTworzenie własnego zestawu reguł „Postęp"
22.04.2018 18:10

Praca nad Postęp (ang. Progress) była na jakiś czas zawieszona, jednak od wczoraj wprowadzam drobne ulepszenia. W tym wpisie jednak opiszę, jak wykorzystać elementy dodane do Postęp w porównaniu do Freeciv, by tworzyć reguły gry. Postęp bazuje na Freeciv, więc opiszę tylko te elementy, których nie ma we Freeciv. To nie jest poradnik dla gracza, a dla modera.

Nowości w Postęp

Postęp wprowadza następujące nowości, względem Freeciv:

bDUcqfNP
  • Wielkich ludzi
  • Akumulatory efektów (effects accumulators)
  • Iteratory efektów (effects iterators)
  • Punkty dumy
  • Eureki
  • Prawa społeczne (civics)

Jest tego więcej, ale powyższe dotyczą elementów modyfikowalnych z poziomu zestawu reguł. Mówiąc prościej - są to elementy, na które moder może mieć wpływ. W tym artykule nie omówię definiowania własnych praw społecznych, a także definiowania wielkich ludzi.

Akumulatory efektów

Akumulatory efektów służą do ograniczenia m.in działania/uruchamiania efektów względem liczby tur. Można np. określić, iż efekt ma trwać minimalnie x tur - nawet w sytuacji, gdy przesłanki za jego uruchomieniem staną się nieprawdziwe. Można także określić, iż efekt zacznie działać, jeśli przesłanki będą prawdziwe przez y tur. Dodatkowo, to dla rozdzielenia różnych sytuacji, istnieje możliwość dodania pola remembertarget = true, gdzie gwiazdka oznacza np. player, city, unit, itd. Dzięki temu będziemy móc rozdzielić pojedynczy efekt np. ze względu na jednostkę. W takiej sytuacji liczenie liczby tur będzie odbywać się oddzielnie dla każdej z jednostek.

bDUcqfNV

code=texteffectdefenseremembertargetunit = truetype = "DefendBonus"value = 200calcfnc = "number of turn on"reqs = { "type", "name", "range" "Extra", "Fortress", "Tile" "UnitClass", "Land", "Local" }/code

Podobny efekt jest w Cywilizacji 4. Powyższe nakazuje, iż jednostki za fortyfikacją, będą co turę otrzymywać premię dwukrotności swoich punktów obrony. Jeżeli przestaną się fortyfikować, to premia przepada. Decyduje o tym calcfnc, które określa number of turn on, czyli value będzie mnożone przez liczbę tur włączonych pod rząd. Dodatkowo remembertargetunit nakazuje, by premia była stosowana dla każdej jednostki oddzielnie. Bez remembertargetunit, premia liczyłaby się dla wszystkich jednostek.

Dla calcfnc można wykorzystać jeszcze: simple(normalny tryb liczenia), number of activation (bierze pod uwagę liczbę aktywacji kiedykolwiek podczas rozgrywki, jednak w jednej turze może się aktywować wiele razy number of turn active (bierze pod uwagę liczbę aktywacji kiedykolwiek podczas rozgrywki, jednak wiele aktywacji w jednej turze jest liczona jako pojedyncza aktywacja).

Iteratory efektów

Iteratory efektów pozwalają na przejście po liście podobnych obiektów (określonej klasy), by np. sprawdzić czy spełniają warunki. Dla przykładu:

bDUcqfNW

code=texteffectbarracks1type = "HPRegen"value = 100reqs = { "type", "name", "range", "present" "Building", "Barracks", "City", TRUE "UnitClass", "Land", "Local", TRUE "IterationOfUnits", "IterElem", "City", TRUE "UnitType", "Medic", "IterItem", TRUE }/code

Powyższe szuka medyków w mieście i leczy jednostki, jeżeli się znajdzie medyk, a dodatkowo w mieście są baraki. IterationOfUnits działa tylko w odniesieniu do gracza lub miasta. Nazwą (wartość w kolumnie name) jest lokalna nazwa dla pobranego przez iterator obiektu.

Eureki

Kolejnym mechanizmem są tzw, eureki. Eureki działają na podobnej zasadzie, co w Cywilizacji VI, jednak w moim projekcie są bardziej elastyczne. Oto przykład jednej z Eureki:

bDUcqfNX

code=texteffecteurekatest1type = "TechnologyProgressAdd"value = 5remembertargetplayer = TRUEmaxactivationnumber = 2reqs ={ "type", "name", "range" "OutputTechnology", "Masonry", "player" "citybuilt(X)", "", "luaevent" }/code

Powyższy efekt nakazuje dodanie punktów wynalezienia dla technologii murarstwa za każdym razem, gdy gracz wybuduje nowe miasto. W przyszłości pewnie dodam sprawdzanie czy miasto jest niedaleko kamienia. Efekt dodaje za każdym razie 5 punktów, a maksymalna liczba aktywacji wynosi 2, czyli można dostać 10 punktów. Może nieomówionym elementem jest citybuilt(X) o zasięgu luaevent. Zasięg luaevent nakazuje podłączyć się pod zdarzenie określone w typie (kolumna type) i pobierać parametry tego zdarzenia, nazywając je zgodnie z konwencją od lewej do prawej. Potem można korzystać z takich parametrów, poprzez przypisane im nazwy. Jednym z zastosowań jest typ wymogu (ang. requirement) o nazwie ExactlyObject. ExactlyObject służy do sprawdzania czy rozważany jest element przypisany do testowanej nazwy. Jest to jednak osobny temat.

Punkty dumy

Punkty dumy to takie połączenie punktów religii, premii za spuściznę i punktów kultury. Są one dodawane za osiągnięcia, np. wybudowanie jakiejś budowli. Zakładam istnienie cudów, które nie będą nic graczowi dawać, poza punktami dumy. Za punkty dumy już teraz można kupić jednostkę lub kupić premię dla swojej cywilizacji (w oknie polityk - ang. policies). Generalnie punkty dumy zdobywa się budując cuda. Jeżeli gracz wybuduje cud przed zadanym terminem od początku rozgrywki, otrzymuje pełny bonus dumy. W przeciwnym przypadku, korzysta gra ze wzoru:

bDUcqfNY

code=cduma -= (1 + (tura - turnprouddecrease) / nextdec) turnprouddecreaseamount;/code

W powyższym kodzie duma to maksymalna ilość punktów dumy za dany budynek, tura to obecna tura, turnprouddecrease to liczba punktów, która jest odejmowana, gdy gracz przekroczy przyjęty okres na wybudowanie danego cudu, nextdec to ilość tur, która poskutkuje kolejnym zmniejszeniem ilości dumy, a turnprouddecreaseamount to liczba punktów do odjęcia za każde nextdec tur przekroczenia.

Poniżej prezentuję przykładową definicję budowli:

code=textbuildingpalacename = ("Palace")genus = "SmallWonder"reqs = { "type", "name", "range" }graphic = "b.palace"graphicalt = "-"obsoleteby = {"type", "name", "range" }placement = "residental"proudadd = 100proudturndecreasestart = 20proudturndecreasenext = 5proudturndecreaseamount = 5buildcost = 30sabotage = 0upkeep = 0greatpoliticanbonus = 2greatgeneralbonus = 1greatscientistbonus = 0greatenginerbonus = 0/code

Powyżej: proudadd to maksymalna duma, proudturndecreasestart to numer tury, od której liczba punktów dumy spada, proudturndecreasenext to co ile tur, po poprzednio omówionej wartości, zmniejszyć liczbę punktów dumy, a proudturndecreaseamount to liczba punktów dumy do pomniejszenia za każde kolejne proudturndecreasenext tur od chwili proudturndecreasestart.

To wszystko. Artykuł jest dosyć obszerny.

Udostępnij:
bDUcqfOL