Ulepszanie i ustawienia - modyfikacja i trwałość zmiennych środowiska wykonawczego

19

Większość firm ma edytor lub zmienny system kontrolny do ulepszania gier, ale czy istnieją jakieś rozwiązania pośrednie dla tego problemu? W przeszłości napisałem dwa takie systemy i pracowałem z pięcioma, może sześcioma różnymi, ale żaden z nich nie był dostępny.

Każde z tych rodzimych rozwiązań miało problemy, od konieczności ciągłego wyszukiwania wartości, po niemożność zapisania aktualnego stanu zmiennych.

Czy są jakieś dojrzałe biblioteki / aplikacje sterujące Config / Runtime-zmienne?

Generalnie piszę w C ++, ale wydaje mi się, że dojrzały edytor ustawień / zmiennych prawdopodobnie byłby oparty na gniazdach (a zatem w pewnym stopniu agnostyczny dla języka), ponieważ cały obecny sprzęt programistyczny oprócz Nintendo zapewnia mechanizm komunikacji z serwerami. Implementacja kodu również musiałaby być dość prosta (podoba mi się artykuł hot_var / TweakableConstants udostępniony przez Oskara, ale to nie jest pakiet)

Richard Fabian
źródło

Odpowiedzi:

8

Podoba mi się to, co Noel zaproponował na swoim blogu. Telnet na podstawie zmiennej Tweaker . Korzystając z usługi telnet, był w stanie użyć dowolnego klienta telnet do edycji zmiennych. Później zbudowali GUI wokół protokołu. Wydaje się wystarczająco proste, że prawdopodobnie nie jest warte biblioteki oprogramowania pośredniego, ale spojrzenie na jego kod może być przydatne.

Nie zgadzam się jednak z jego sentymentem przeciwko Luie. Zdalna konsola Lua wydaje się po prostu niesamowita.

deft_code
źródło
Użyli również telnetu dla zmiennych dostosowujących w MotoGP: blogs.msdn.com/b/shawnhar/archive/2009/05/01/…
Kylotan
3
Dlaczego Telnet? HTTP / HTML, stary! HTTP jest bardzo prostym protokołem i może być łatwo osadzony w grze - robiłem to już wcześniej, miał dużo mniej niż tysiąc linii kodu.
ZorbaTHut,
3
Powiedziałbym, że Telnet wykonuje tę pracę całkiem dobrze i jest znacznie mniej skomplikowany. Możesz to zrobić w 100 liniach kodu zamiast 1000. Pozwala to również na wypychanie aktualizacji zamiast konieczności ich odpytywania i ściągania. Ale jeśli potrzebujesz HTTP w jakimkolwiek innym celu w swojej grze, zgodzę się, że warto go również tutaj użyć.
Kylotan,
5

Być może pomysł Stałej Drugi można dopasować do Twoich potrzeb. Jest tak użyteczny, że można by pomyśleć , że potrzebujesz kompleksowego rozwiązania, aby mieć skuteczną kontrolę zmiennych w czasie wykonywania, ale w rzeczywistości implementacja jest prawie zbyt prosta. Oryginalny dyskusji tej techniki jest również interesująca lektura.

Przykład:

glClearColor( H(1.0f), H(1.0f), H(1.0f), H(1.0f) );

HMakro rozwija się do czegoś podobnego HotValue(x, __FILE__, __LINE__, __COUNTER__). To rejestruje wartość w jakimś rejestrze globalnym. Następnie używaj funkcji RefreshHotValues(), którą wywołujesz w regularnych odstępach czasu. Funkcja wyszukuje każdy wpis w rejestrze, analizuje określony plik źródłowy i ponownie ładuje gorącą wartość.

Gdy modyfikujesz rzeczywisty kod źródłowy, masz tam wytrwałość.

Oczywiście to nie zadziała, gdy nie H()jest oceniana każda klatka, ale istnieją sposoby na rozwiązanie tego, jak omówiono tutaj .

Być może możesz rozwinąć ten pomysł na rozwiązanie oparte na gniazdach. Może wystąpić znaczny narzut wydajności, aby wywołać HotValue()każdą ramkę, ale ponieważ bardzo łatwo można skompilować makro całkowicie zastępując je stałą, nie stanowi to problemu.

Oskar N.
źródło
2
@Kylotan: Brakuje Ci sensu. Zmieniasz rzeczywisty kod źródłowy, który jest analizowany w czasie wykonywania. Trwałość odbywa się za pośrednictwem zmodyfikowanych źródeł.
Oskar N.
Tak, jakoś tęskniłem za przeglądaniem artykułu. Usunę mój komentarz i ponownie przeczytam!
Kylotan,
3
Mogę być tylko sobą, ale ta technika wydaje się ... kapryśna. Myślę, że to dlatego, że tyle czasu nienawidziłem magicznych liczb, a to zadziała tylko dla magicznych liczb. Wolałbym, aby czysty kolor był częścią pliku konfiguracji lub skryptu. Magia pochodzi z możliwością ładowania zasobów na gorąco.
deft_code,
@caspin: Możesz użyć zwykłych zmiennych i zamiast tego mieć, H(int, myvar, 5)a gdy zmiany plików zastępujesz myvarw pamięci. Zobacz mollyrocket.com/forums/viewtopic.php?p=5395#5395
Oskar N.
1

AntTweakBar jest naprawdę przydatny do tego, co chcesz robić, jednak przez większość czasu chciałbyś mieć metody, które „kompilują się” w wersji z niektórymi makrami lub podobnymi.

DrDeth
źródło
0

Zarządzanie ustawieniami wydaje się być jedną z tych rzeczy, które są przygotowywane od nowa dla każdej gry, prawdopodobnie ze względu na to, jak stosunkowo jest to proste i duża zmienność potrzebnych typów ustawień. Zakładając, że masz przyzwoitą konfigurację zaplecza pamięci (SQL / cokolwiek), możesz zakodować solidne rozwiązanie do zarządzania ustawieniami w ciągu dnia lub 2, więc nie wydaje się, aby istniała realna potrzeba biznesowa dla rozwiązania oprogramowania pośredniego. Myślę, że w większości przypadków najlepszym rozwiązaniem jest przechowywanie tego, co używasz do przechowywania informacji o graczach.

Ben Zeigler
źródło
1
Tu nie chodzi o informacje o ustawieniach, chodzi o dostosowanie zmiennych środowiska wykonawczego do celów debugowania lub rozgrywki.
Wiele typów zmiennych wykonawczych do celów debugowania i rozgrywki ma sens przechowywania w pewnego rodzaju trwałym zapleczu. Umożliwia to ich zmianę w całym systemie podczas wdrażania. SQL jest tylko przykładem zaplecza, możesz łatać informacje do pliku na dysku lub dowolną liczbę innych metod.
Ben Zeigler,
1
Problem polega na tym, że zmieniają się w czasie rzeczywistym. Prawdopodobnie wiąże się to z ustawieniem jakiegoś wyzwalacza na DB i czymś w grze, co może obsłużyć ten wyzwalacz i ponownie odczytać wartości asynchronicznie podczas gry. Nie jest to nie do pokonania, ale też niezbyt proste.
Kylotan,
Kodem zarządzającym wyzwalaczem DB byłby kod, którego szuka Richard, i stanowi on interesującą / wielokrotnego użytku część. Przeniesienie stałych do DB zamiast do systemu plików lub innego narzędzia nie powoduje, że kod ten pojawia się w magiczny sposób i prawdopodobnie tylko komplikuje go.
-1

Właściwie ostatnio myślałem o takiej rzeczy i myślę, że byłby to świetny kandydat na aplikację na Androida w połączeniu z małą biblioteką w dowolnym języku . Aplikacja byłaby konfigurowalnym zestawem przycisków, przełączników, rozwijanych menu itp. (Dowolny widżet, jaki chcesz), i wysyłałaby akcje za pośrednictwem sieci WLAN (lub USB, jeśli chcesz to skomplikować) do biblioteki. Biblioteka odrodziłaby oddzielny wątek od gry i wiedziałaby, które kontrolki na telefonie z Androidem odpowiadają zmiennym w grze (ustawiłeś je w kodzie startowym) i miałoby połączenie z aplikacją na Androida.

W ten sposób bałagan w grze jest tak prosty, jak dotykanie telefonu. Możesz nawet mieć w telefonie niektóre pola tekstowe, które pokazują wartości zmiennych w czasie rzeczywistym z gry, lub możesz przenieść bibliotekę do przodu stdinlub stderrdo przewijanego obszaru tekstowego w telefonie. Opcje są nieograniczone!

Jedyny prawdziwy problem dotyczy prędkości. Jeśli szybkość i czas reakcji są kluczowe, wystarczy podłączyć telefon przez USB, a adb (debugger dla Androida) obsługuje porty przesyłania przez USB do telefonu. Ale w przeciwnym razie WLAN miałoby bardzo małe opóźnienie, które moim zdaniem byłoby wystarczające do tego celu.

Nie wydaje mi się, żeby coś takiego zostało napisane powyżej, ale zdecydowanie zastanawiałem się nad jego napisaniem. (Po prostu nie byłem wystarczająco daleko w rozwoju własnych gier, aby tego potrzebować)

Oczywiście ci z użytkowników Apple mogą prawdopodobnie zrobić to samo z urządzeniami iDevices. Osobiście uważam, że programowanie na iOS jest o rząd wielkości trudniejsze niż programowanie na Androida, i oczywiście powyższą aplikację można łatwo opublikować na rynku Android w celu łatwej dystrybucji, podczas gdy Apple prawdopodobnie nie zezwoli na narzędzia programistyczne w sklepie z aplikacjami, więc czujesz, że platforma Android lepiej pasuje do tego narzędzia.

Ricket
źródło
Byłoby słodko w środowisku biurowym. Podejdź i porozmawiaj z artystą, połącz się i zacznij bawić się z grą sąsiada projektanta, podczas gdy on próbuje zorganizować kilka spotkań ...
dash-tom-bang
1
Nie rozumiem korzyści płynących z posiadania go na telefonie, a nie na komputerze, z którym faktycznie pracujesz.