Pomysł brany z BuzzingCars.
Teoria:
1. Mamy 10 beczek w scene.
2. Włączamy limit generowania beczek do 3 (jednoczesne losowanie jakich beczek ma wygenerować).
3. Co każdy load scene losuje 3 beczki i je generuje
Przykład:
Code:
// 10 beczek które 3 będą losowo generowane
CreateObject pos=-107; -38 dir=0.00 type=BarrelAtomic
CreateObject pos= -97; -45 dir=0.00 type=BarrelAtomic
CreateObject pos= -89; -55 dir=0.00 type=BarrelAtomic
CreateObject pos= 43;-104 dir=0.00 type=BarrelAtomic
CreateObject pos= 58; -38 dir=0.00 type=BarrelAtomic
CreateObject pos= -14; 14 dir=0.00 type=BarrelAtomic
CreateObject pos= 47; 7 dir=0.00 type=BarrelAtomic
CreateObject pos= -31; 49 dir=0.00 type=BarrelAtomic
CreateObject pos= -26; 56 dir=0.00 type=BarrelAtomic
CreateObject pos= 6; 43 dir=0.00 type=BarrelAtomic
// komenda odpowiedzialna do ograniczenia generacji do 3 losowych beczek
CreateLimit max=3 type=BarrelAtomic
// Te 3 beczki będą normalnie generowane (ponieważ komenda ograniczenia jest nad nimi)
CreateObject pos= -57; -94 dir=0.00 type=BarrelAtomic
CreateObject pos= -47; -71 dir=0.00 type=BarrelAtomic
CreateObject pos= -20; 93 dir=0.50 type=BarrelAtomic
Myślę że ficzer bd przydatny do rud które będą na powierzchni, wraków i ruin poprzedniej ekspedycji, obcych, ITP.
Pomysł ciekawy, można by wprowadzić. Można to nieco urozmaicić. Np. dodać atrybut posRadius:
Code:
CreateObject pos=-107; -38 dir=0.00 type=BarrelAtomic posRadius=2.0
Taki atrybut sprawi, że obiekt jest utworzony losowo w kole o promieniu 2 metrów ze środkiem z pos. Domyślnie będzie utworzony w punkcie pos. Można by również dodać specjalny znacznik "random" zamiast wartości liczbowych, wtedy jest ta wartość generowana losowo, np. dla dir.
Code:
CreateObject pos=-107; -38 dir=random type=BarrelAtomic posRadius=2.0
Można by to wykorzystać do generowania bardziej losowych roślin i elementów.
Generalnie mam jeszcze taki pomysł związany z filtrowaniem za pomocą maski bitowej, co również dałoby możliwość stworzenia poziomów trudności. Działałoby to podobnie do filtrowania języków, aczkolwiek byłby to konkretny atrybut będący maską bitową. Maskę tę można by podawać jako ciąg specjalnych znaków:
Code:
CreateObject pos=-107; -38 dir=random type=PowerCell mask="EN" power=0.5 // tylko poziom łatwy i normalny
CreateObject pos=-107; -38 dir=random type=PowerCell mask="H" power=0.2 // tylko poziom trudny
Domyślnie każdy obiekt miałby ustawione wszystkie poziomy trudności. Dodatkowo, jakby ktoś chciał mieć więcej roślin i elementów, to można by takim obiektom dać maskę dodatkowych elementów, w opcjach dałoby się wyłączyć takie dodatkowe elementy, aby na starszych komputerach gra działała tak jak teraz, a na nowych można użyć odświeżonych map z dodatkowymi elementami.
Nie jestem jakoś za specjalnie za czymś, co mogłoby być robione przez LevelControllera. Bardziej skłaniałbym się ku temu, by optymalizować składnię plików Scene do jak najprostszej i nieprzeładowanej komendami postaci. W rezultacie w Scene zostałyby tylko dane na temat statycznych elementów na mapie, ładowanych zawsze tak samo.
(10-04-2015, 10:20 AM)tomaszkax86 Wrote: [ -> ]Można by to wykorzystać do generowania bardziej losowych roślin i elementów.
Nie - przynajmniej w oficjalnych misjach, ćwiczeniach i swobodnych levelach. Skutkowałoby to nieprzewidywalnymi, losowymi bugami. A to inny obrót lub pozycja rośliny będą sprawiały, że crashboxy się ułożą nie tak, jak trzeba, i np. dana Grawiroślina będzie nachodzić na inny obiekt lub nie da rady jej minąć, itp...
(10-04-2015, 10:20 AM)tomaszkax86 Wrote: [ -> ]Generalnie mam jeszcze taki pomysł związany z filtrowaniem za pomocą maski bitowej, co również dałoby możliwość stworzenia poziomów trudności. Działałoby to podobnie do filtrowania języków, aczkolwiek byłby to konkretny atrybut będący maską bitową.
Utrzymanie i developing wielu trybów trudności per level jest bardzo trudne, długie i żmudne. A my nie mamy nawet sensownej ilości testerów o różnej wiedzy i umiejętnościach w graniu. Temat dobry na betę, gdy już oficjalny kształt wszystkich leveli będzie znany z grubsza i przyjdzie pora na szlify.
(10-04-2015, 10:51 AM)RaptorParkowsky Wrote: [ -> ]Nie - przynajmniej w oficjalnych misjach, ćwiczeniach i swobodnych levelach. Skutkowałoby to nieprzewidywalnymi, losowymi bugami. A to inny obrót lub pozycja rośliny będą sprawiały, że crashboxy się ułożą nie tak, jak trzeba, i np. dana Grawiroślina będzie nachodzić na inny obiekt lub nie da rady jej minąć, itp...
Chodziło mi o elementy dekoracyjne bez crashboxów typu trawa, nie grawirośliny. Obecnie świat jest niemal pusty, można go wypełnić drobną trawą. Wątpię, aby komukolwiek chciało się ustawiać dokładnie wszystkie te elementy, losowość rozwiązałaby nieco ten problem. Losowość można "zamknąć" korzystając z określonego ziarna w generatorze liczb pseudolosowych, dzięki czemu świat zawsze będzie wyglądał tak samo po każdym załadowaniu, mimo że został częściowo wylosowany.
(10-04-2015, 10:51 AM)RaptorParkowsky Wrote: [ -> ]Utrzymanie i developing wielu trybów trudności per level jest bardzo trudne, długie i żmudne. A my nie mamy nawet sensownej ilości testerów o różnej wiedzy i umiejętnościach w graniu. Temat dobry na betę, gdy już oficjalny kształt wszystkich leveli będzie znany z grubsza i przyjdzie pora na szlify.
Utrzymywanie poziomów trudności nie jest ani trudne, ani długie, ani żmudne. Domyślnym poziomem trudności zawsze będzie "Normalny", również dla poziomów nieprzystosowanych, i będzie w większości zgodny z tym co jest teraz. Dla "Łatwego" wystarczy dodać elementy ułatwiające, ewentualnie usunąć niektórych wrogów. Dla "Trudnego" wystarczy usunąć odpowiednią liczbę tytanu i ogniw oraz dodać większą liczbę wrogów, co zwykle oznacza kopiuj-wklej i ustawienie pozycji oraz parametrów. Poza tym większość map nie potrzebuje modyfikacji, a zmiana poziomu trudności oznaczałaby przede wszystkim zmianę ilości otrzymywanych obrażeń. I serio, nie mamy wystarczająco dużo testerów? Każdy z nas przeszedł grę nie jeden raz i z grubsza wie co można zmienić, aby utrudnić lub ułatwić grę nie psując przy tym samej rozgrywki. Zmiany nie muszą być diametralne ani super oficjalnie zatwierdzone.
Poza tym, nie powinniśmy zrzucać za wiele na LevelControllera. Tworzenie i formowanie świata to zadanie pliku .scene. Większość elementów świata jest statyczna i powinna być tworzona przez plik .scene, nawet jeśli są te elementy zależne od poziomu trudności.
Losowe tworzenie obiektów byłoby świetne do trybów swobodnych, zamiast jednej, zdefiniowanej na sztywno mapy otrzymalibyśmy unikalną rozgrywkę, zwłaszcza gdyby połączyć to z generatorem reliefów.
(10-04-2015, 01:01 PM)tomaszkax86 Wrote: [ -> ]Chodziło mi o elementy dekoracyjne bez crashboxów typu trawa, nie grawirośliny. Obecnie świat jest niemal pusty, można go wypełnić drobną trawą. Wątpię, aby komukolwiek chciało się ustawiać dokładnie wszystkie te elementy, losowość rozwiązałaby nieco ten problem. Losowość można "zamknąć" korzystając z określonego ziarna w generatorze liczb pseudolosowych, dzięki czemu świat zawsze będzie wyglądał tak samo po każdym załadowaniu, mimo że został częściowo wylosowany.
No to było tak od razu. Pytanie tylko, jak zrobimy tę trawę: model czy pojedyncza tekstura z kolorem alpha? Obecność na planetach takich jak Tropika i Terranova jest oczywista. Inne, przerzedzone i zmienione przez GreeneryColor warianty będzie można położyć na Saari i Centurii.
Bardzo ważne jest to, by trawa lub określone typy trawy występowały tylko w określonych wysokościach. To samo z potencjalnymi wodorostami.
(10-04-2015, 01:01 PM)tomaszkax86 Wrote: [ -> ]Utrzymywanie poziomów trudności nie jest ani trudne, ani długie, ani żmudne. Domyślnym poziomem trudności zawsze będzie "Normalny", również dla poziomów nieprzystosowanych, i będzie w większości zgodny z tym co jest teraz. Dla "Łatwego" wystarczy dodać elementy ułatwiające, ewentualnie usunąć niektórych wrogów. Dla "Trudnego" wystarczy usunąć odpowiednią liczbę tytanu i ogniw oraz dodać większą liczbę wrogów, co zwykle oznacza kopiuj-wklej i ustawienie pozycji oraz parametrów. Poza tym większość map nie potrzebuje modyfikacji, a zmiana poziomu trudności oznaczałaby przede wszystkim zmianę ilości otrzymywanych obrażeń. I serio, nie mamy wystarczająco dużo testerów? Każdy z nas przeszedł grę nie jeden raz i z grubsza wie co można zmienić, aby utrudnić lub ułatwić grę nie psując przy tym samej rozgrywki. Zmiany nie muszą być diametralne ani super oficjalnie zatwierdzone.
Problem tylko w tym, że to wciąż dołożenie sobie roboty do gry, której główna trudność polega raczej na przeczytaniu ze zrozumieniem SatComu i odpowiedniej ocenie sytuacji + kilka skillów związanych z lekko przestarzałym sterowaniem jednostkami.
(10-04-2015, 01:11 PM)tomangelo Wrote: [ -> ]Poza tym, nie powinniśmy zrzucać za wiele na LevelControllera. Tworzenie i formowanie świata to zadanie pliku .scene. Większość elementów świata jest statyczna i powinna być tworzona przez plik .scene, nawet jeśli są te elementy zależne od poziomu trudności.
Oczywiście. LevelController będzie zajmował się tylko interaktywnymi zdarzeniami w czasie działania levelu (typu spawnowanie obcych jeśli trzeba, zmiana muzyki, niszczenie i spawnowanie innych obiektów, ogółem zdarzenia zależne od sytuacji).
Co do generowania powyżej określonej wysokości, to wtedy musiałoby się to dziać po wczytaniu reliefa, chyba że jest inny sposób przekazania informacji do silnika w których miejscach mapy roślinność górska może się pojawić.
(10-04-2015, 03:31 PM)RaptorParkowsky Wrote: [ -> ]Problem tylko w tym, że to wciąż dołożenie sobie roboty do gry, której główna trudność polega raczej na przeczytaniu ze zrozumieniem SatComu i odpowiedniej ocenie sytuacji + kilka skillów związanych z lekko przestarzałym sterowaniem jednostkami.
Czy my tak czy inaczej nie dokładamy sobie roboty dodając nowe tryby gry, czy przepisując działające partie kodu? A takie urozmaicenie gry może wyjść raczej tylko na plus. Czas nas nie goni, więc co nas powstrzymuje przed dodaniem nowych poziomów trudności?
(10-04-2015, 03:43 PM)tomangelo Wrote: [ -> ]Co do generowania powyżej określonej wysokości, to wtedy musiałoby się to dziać po wczytaniu reliefa, chyba że jest inny sposób przekazania informacji do silnika w których miejscach mapy roślinność górska może się pojawić.
To nie jest problem, kod teksturowania terenu też jest zależny od reliefu. Zresztą, kod umieszczania obiektów również (wysokość = poziom terenu w danym punkcie + wartość h= z CreateObject).
Odświeżam z powodu otwarcia kodu źródłowego BuzzingCars.
Nawet nie trzeba pisać ten feature od nowa. Tylko przekopiować kod z BC
![Tongue Tongue](https://colobot.info/forum/images/smilies/tongue.png)
(no chyba że macie własny pomysł)
![Tongue Tongue](https://colobot.info/forum/images/smilies/tongue.png)