Blog (76)
Komentarze (5.3k)
Recenzje (0)

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

@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:

  • 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 remember_target_* = 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.

[effect_defense]
remember_target_unit = true
type = "Defend_Bonus"
value = 200
calc_fnc = "number of turn on"
reqs =
 { "type", "name", "range" 
 "Extra", "Fortress", "Tile"
 "UnitClass", "Land", "Local"
 }

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 calc_fnc, które określa number of turn on, czyli value będzie mnożone przez liczbę tur włączonych pod rząd. Dodatkowo remember_target_unit nakazuje, by premia była stosowana dla każdej jednostki oddzielnie. Bez remember_target_unit, premia liczyłaby się dla wszystkich jednostek.

Dla calc_fnc 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:

[effect_barracks_1]
type = "HP_Regen"
value = 100
reqs =
 { "type", "name", "range", "present"
 "Building", "Barracks", "City", TRUE
 "UnitClass", "Land", "Local", TRUE
 "IterationOfUnits", "IterElem", "City", TRUE
 "UnitType", "Medic", "IterItem", TRUE
 }

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:

[effect_eureka_test_1]
type = "Technology_Progress_Add"
value = 5
remember_target_player = TRUE
max_activation_number = 2
reqs =
{
 "type", "name", "range"
 "OutputTechnology", "Masonry", "player"
 "city_built(X)", "", "lua_event" 
}

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 city_built(X) o zasięgu lua_event. Zasięg lua_event 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:

duma -= (1 + (tura - turn_proud_decrease) / next_dec) * turn_proud_decrease_amount;

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

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



[building_palace]
name = _("Palace")
genus = "SmallWonder"
reqs =
 { "type", "name", "range"
 }
graphic = "b.palace"
graphic_alt = "-"
obsolete_by =
 {"type", "name", "range"
 }
placement = "residental"
proud_add = 100
proud_turn_decrease_start = 20
proud_turn_decrease_next = 5
proud_turn_decrease_amount = 5
build_cost = 30
sabotage = 0
upkeep = 0
great_politican_bonus = 2
great_general_bonus = 1
great_scientist_bonus = 0
great_enginer_bonus = 0

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

To wszystko. Artykuł jest dosyć obszerny.

Szanowna Użytkowniczko! Szanowny Użytkowniku!
×
Aby dalej móc dostarczać coraz lepsze materiały redakcyjne i udostępniać coraz lepsze usługi, potrzebujemy zgody na dopasowanie treści marketingowych do Twojego zachowania. Twoje dane są u nas bezpieczne, a zgodę możesz wycofać w każdej chwili na podstronie polityka prywatności.

Kliknij "PRZECHODZĘ DO SERWISU" lub na symbol "X" w górnym rogu tej planszy, jeżeli zgadzasz się na przetwarzanie przez Wirtualną Polskę i naszych Zaufanych Partnerów Twoich danych osobowych, zbieranych w ramach korzystania przez Ciebie z usług, portali i serwisów internetowych Wirtualnej Polski (w tym danych zapisywanych w plikach cookies) w celach marketingowych realizowanych na zlecenie naszych Zaufanych Partnerów. Jeśli nie zgadzasz się na przetwarzanie Twoich danych osobowych skorzystaj z ustawień w polityce prywatności. Zgoda jest dobrowolna i możesz ją w dowolnym momencie wycofać zmieniając ustawienia w polityce prywatności (w której znajdziesz odpowiedzi na wszystkie pytania związane z przetwarzaniem Twoich danych osobowych).

Od 25 maja 2018 roku obowiązuje Rozporządzenie Parlamentu Europejskiego i Rady (UE) 2016/679 (określane jako "RODO"). W związku z tym chcielibyśmy poinformować o przetwarzaniu Twoich danych oraz zasadach, na jakich odbywa się to po dniu 25 maja 2018 roku.

Kto będzie administratorem Twoich danych?

Administratorami Twoich danych będzie Wirtualna Polska Media Spółka Akcyjna z siedzibą w Warszawie, oraz pozostałe spółki z grupy Wirtualna Polska, jak również nasi Zaufani Partnerzy, z którymi stale współpracujemy. Szczegółowe informacje dotyczące administratorów znajdują się w polityce prywatności.

O jakich danych mówimy?

Chodzi o dane osobowe, które są zbierane w ramach korzystania przez Ciebie z naszych usług, portali i serwisów internetowych udostępnianych przez Wirtualną Polskę, w tym zapisywanych w plikach cookies, które są instalowane na naszych stronach przez Wirtualną Polskę oraz naszych Zaufanych Partnerów.

Dlaczego chcemy przetwarzać Twoje dane?

Przetwarzamy je dostarczać coraz lepsze materiały redakcyjne, dopasować ich tematykę do Twoich zainteresowań, tworzyć portale i serwisy internetowe, z których będziesz korzystać z przyjemnością, zapewniać większe bezpieczeństwo usług, udoskonalać nasze usługi i maksymalnie dopasować je do Twoich zainteresowań, pokazywać reklamy dopasowane do Twoich potrzeb. Szczegółowe informacje dotyczące celów przetwarzania Twoich danych znajdują się w polityce prywatności.

Komu możemy przekazać dane?

Twoje dane możemy przekazywać podmiotom przetwarzającym je na nasze zlecenie oraz podmiotom uprawnionym do uzyskania danych na podstawie obowiązującego prawa – oczywiście tylko, gdy wystąpią z żądaniem w oparciu o stosowną podstawę prawną.

Jakie masz prawa w stosunku do Twoich danych?

Masz prawo żądania dostępu, sprostowania, usunięcia lub ograniczenia przetwarzania danych. Możesz wycofać zgodę na przetwarzanie, zgłosić sprzeciw oraz skorzystać z innych praw wymienionych szczegółowo w polityce prywatności.

Jakie są podstawy prawne przetwarzania Twoich danych?

Podstawą prawną przetwarzania Twoich danych w celu świadczenia usług jest niezbędność do wykonania umów o ich świadczenie (tymi umowami są zazwyczaj regulaminy). Podstawą prawną przetwarzania danych w celu pomiarów statystycznych i marketingu własnego administratorów jest tzw. uzasadniony interes administratora. Przetwarzanie Twoich danych w celach marketingowych realizowanych przez Wirtualną Polskę na zlecenie Zaufanych Partnerów i bezpośrednio przez Zaufanych Partnerów będzie odbywać się na podstawie Twojej dobrowolnej zgody.