Przykładowy kod źródłowy z Galaxy Editor`a

Transkrypt

Przykładowy kod źródłowy z Galaxy Editor`a
Przykładowy kod źródłowy z Galaxy Editor'a
Data publikacji : 13.03.2010
Ocena: 3.5/5 (6)
Nie tylko tłumaczeniem czatu z developerami żyje czytelnik
naszej witryny, chyba że się mylę? Zarówno w samej rozmowie z duetem Dustin Browder i Chris
Sigaty jak i w komentarzach do wiadomości pojawiają się liczne pytania dotyczące nowego Edytora
Map, który ma zostać udostępniony w StarCraft II: Wings of Liberty. Swoją drogą przypomnę, że jego
„premierę” w/w duet zapowiedział przed końcem kwietnia! Właściwie jak na zawołanie przychodzi
tutaj redakcja serwisu SC2Armory, konkretniej gearvOsh, który poszperał ostatnio w plikach MPQ gry
i znalazł przykłady kodu źródłowego, jaki generuje język „Galaxy”.
Rozszerzeniem plików nowego edytora będzie konwencja .galaxy. Poniżej obiecane przykłady.
Przykład #1:
unit AIEarlyDefScoutZerg (int player, unit prev) {
unit obs;
if (!AIGetFlag(player, e_flagsEarlyDefScout)) {
return c_nullUnit;
}
if (UnitGetType(prev) == c_ZU_Overseer) {
return prev;
}
obs = AIGrabUnit(player, c_ZU_Overseer, c_prioScout, null);
if (obs) {
return obs;
}
if (UnitGetType(prev) == c_ZU_Zergling) {
return prev;
}
obs = AIGrabUnit(player, c_ZU_Zergling, c_prioScout, null);
if (obs) {
return obs;
}
if (prev) {
return prev;
}
return AIGrabUnit(player, c_ZU_Drone, c_prioScout, null);
}
Przykład #2:
bool AIWaveNeedClearObsUnits (int player) {
unit obstruction = null;
wave waveClob = null;
wave waveAtck = null;
int countClob = 0;
int countAtck = 0;
int evalAtck = 0;
// Check global option
if (AIGetFlag(player, e_flagsClearObs) == false) {
return false;
}
// Don't clear obstructions in the first 10 minutes (leaves the AI too open to being
rushed)
if (AIGetTime() < 600) {
return false;
}
// See if there is any obstruction
obstruction = AIGetObstruction(player);
if (obstruction == null) {
return false;
}
// See if the clear obstruction wave is already full
waveClob = AIWaveGet(player, c_waveClearObs);
countClob = AIWaveUnitCount(waveClob);
if (countClob >= 4) {
return false;
}
// If the attack wave is getting weak, keep units available for it instead
waveAtck = AIWaveGet(player, c_waveAttack);
countAtck = AIWaveUnitCount(waveAtck);
evalAtck = AIWaveEvalRatio(waveAtck, c_evalRange);
if (countAtck > 0 && evalAtck < 80) {
return false;
}
// Yes, units are needed for clear obstruction duty
return true;
}
Przykład #3:
void ProtossOpenGnd0 (int player) {
AIClearStock(player);
AISetStock( player, 1, c_PB_Nexus );
AISetStock( player, 8, c_PU_Probe );
AISetStock( player, 1, c_PB_Pylon );
// around 100 resources in about 2 units
AISetStock( player, 1, c_PU_Zealot );
ProtossTechUp(player, 1);
if (AIEnableVeryEasyStockOpen(player, c_PU_Probe)) {
return;
}
// around 300 resources in about 3 unit
AIAddStringInt(player, c_PU_Stalker, 1);
AIAddStringInt(player, AIPickFrom2(c_PU_Zealot, c_PU_Disruptor), 1);
}
Większość z osób, które miały styczność z programowaniem zauważy tu zapewne pewne
podobieństwa składni do tych występujących w C czy Javie. Ciężko powiedzieć to na 100% ale z
powyższych przykładów wynika, że Galaxy jest językiem bardziej proceduralnym niż obiektowym. Ale
kto wie, może okaże się, że to tylko mylne odczucie wynikające z tak skromnej ilości przykładów.
Myślę jednak, że i tak część z osób mogą te informacje zainteresować ;)
Tagi: edytor map
Uprasza się osoby kopiujące w całości newsy z naszej witryny na swoje strony lub fora o wstawianie widocznych klikalnych linków,
bezpośrednio do pobranego tekstu. W przypadku braku widocznego linku, skopiowanie tekstu uważa się za kradzież własności
intelektualnej.
Dziękujemy: Administratorzy serwisu.
Autor: Piotr Siejczuk
Data publikacji : 13.03.2010
Data modyfikacji : 14.03.2010
Liczba wyświetleń tekstu: 4331
Komentarz (31) dodaj komentarz
Już widzę te życiorysy w stylu "Programuję od kiedy pamiętam, swoje pierwsze kroki stawiałem w Galaxy Editor" xD~
KruczoCzarny
2010/03/14 00:23
No cóz, mimo wszystkie jakieś tam typy abstrakcyjne są (wave czy też unit). Fajnie zobaczyć jak to wygląda od srodka, chociaż
dużej cześci nadal nie rozumiem:P~Dagaen
2010/03/14 00:36
Kaszana straszna. Liczę na kolorowanie/podpowiadanie składni. Bez tego będzie masakra.
Ogólnie to takie ni w to, ni w sio, Oczywiście w obj było by lepiej. Żeby chociaż doc był przejrzysty...~ShadowDancer
2010/03/14 01:32
ja tam sie nie znam mam tylko nadzieje ze bedzie dzialal tak jak w naprzyklad warcrafcie 3 czyli bedzie po polsku bedzie
intuicyjny z gotowa baza budynkow przedmiotow jednostek ktore bedzie mozna stawiac na mapie poprzez jedno klikniecie, a
nie siedziec w jakiej glupiej lini komend i domykac jakies skladnie i znaczniki~niepoprawna
2010/03/14 09:39
@niepoprawna
Mechanizmy o jakich mówisz na 100% się znajdą w edytorze. Edytor oparty o samo pisanie kodu byłby strasznie nieefektywny
w szczególności jeśli chodzi o modelowanie terenu lub inne efekty wizualne.
Przykłady ewidentnie odnoszą się do definiowania zachowań A.I. co, jak dla mnie jest bardzo kuszącą opcją.
@ShadowDancer
Zgadzam się. Obiektowo byłoby lepiej. Jednak na moje oko to chyba jednak będzie język strukturalny :( . Szkoda.
I też mam nadzieję, że Blizzard zadba o przyjazne środowisko programistyczne.~espoo
2010/03/14 10:30
Nie no, jednostki, budynki...Przecież to się prosi o obiektowe rozpatrzenie. Takie np. c_ZU_Overseer i reszta mogą być
obiektami typu unit co przecież ma sens. Zwłaszcza w miejscach:
UnitGetType(prev) == c_ZU_Zergling
Aczkolwiek również mam nadzieję na to, że składnia będzie jakos uproszczona w edytorze.~Dagaen
2010/03/14 10:49
A co by bylo jakbym zrobil petle nieskonczona?
Silnik gry ma jakies zabespieczenie przed tym?
Co do typow obiektowych. Te wbudowane sa jak Unit czy Wave, ale nie wiadomo czy bedzie mozna tworzyc swoje wlasne.
Pytanie czy jest az tak duza potrzeba.
Ja sie wogole dziwie Blizzardowi ze nie uzyl gotowego jezyka typu Lua czy Python (chociaz wole Lua) tylko tworzyl wlasny.~
mgkiler
2010/03/14 11:48
Ktoś moze wyjaśnić laikowi czym się rożni jezyk proceduralny/strukturalny od obiektowego ?~cukierek
2010/03/14 12:17
@cukierek:
http://pl.wikipedia.org/wiki/J%C4%99zyk_proceduralny
http://pl.wikipedia.org/wiki/J%C4%99zyk_obiektowy
http://pl.wikipedia.org/wiki/Programowanie_obiektowe~mgkiler
2010/03/14 12:29
@mgkiler
Wykrycie pętli nieskończonej, czyli tak zwany "problem stopu" jest problemem w ogólnym przypadku nierozwiązywalnym. Więc
raczej czegoś takiego nie uświadczymy i tu.
Czemu mówisz że Blizzard wymyśla własny język? Jak dla mnie to wygląda to jak zwykłe C z podpiętą biblioteką z odpowiednimi
typami i funkcjami.
Nie zmienia to jednak faktu że też bym wolał coś na kształt Pythona.~espoo
2010/03/14 14:42
Jak dla mnie to też wygląda jak C, a akurat c znam a pythona nie więc mi to pasuje.~Skofijak
2010/03/14 16:29
świetne, podoba mi się takie rozwiązanie. wreszcie będzie można uzyskać lepsze zachowania AI, dzięki odpowiedniemu
językowi. jest podobny do standardowych języków programowania, więc nie ma problemu w jego odczytaniu. i widać od razu
typy powiązane z samą grą, jak: unit, player itp. dla mnie taki kod jest o wiele czytelnieszjy niż to co dawał edytor w3.~Yaerius
2010/03/14 17:56
Tak teraz wyglada jak C, ale wczesniejszy jezyk Blizzarda nie wygladal jak C.
Mi troche przeszkadza wywolywanie:
waveClob = AIWaveGet(player, c_waveClearObs);
zamiast:
waveCLob = aIWave.get(player, waveClearObs);
:)
w sensie ze aiWave jest obiektem ktory ma wlasne metody i zmienne.
Co do petli nieskonczonej to chodzilo mi raczej o zabespieczenie w stylu ze jak skrypt nie zwroci odpowiedzi w czasie np
1sekundy to Starcraft wypisze blad w skypcie.
Gdyby tak nie bylo to by skrypt wieszal gre :) A cos watpie by Blizz pozwolil na zawieszenie gry skryptem :)
Ale sprawdzic nie zaszkodzi :)
Kiedys w starszym jezyku Blizzarda (zapomnialem nazwy) ktos znalazl jakis bug pozwalajacy wysypac gre.~mgkiler
2010/03/14 20:01
"bug pozwalajacy wysypac gre" O rly? A jak myślisz, ile bugow pozwalających zcrashować grę jest w starcrafcie?
Może nie python czy lua, tylko c, bo są one mega wolne?~ShadowDancer
2010/03/14 22:31
Kiedyś we wczesnych wersjach SC był bodajże jeden glitch co wywalal grę wszystkim graczom, którzy go widzieli:P Nie
pamiętam już na czym polegał...~Dagaen
2010/03/14 22:57
O rly? Teraz też jest. I to nie jeden...~ShadowDancer
2010/03/15 00:10
@shadowDancer:
Ale co C? Przeciez to jest i tak jezyk skryptowy i tak i jest on interpretowany. Wiec nigdy nie bedzie tak szybki jak kompilowane
C. Co z tego ze wyglada jak C... Wyglad nie czyni predkosci.~mgkiler
2010/03/15 18:34
Skąd wiesz, że jest interpretowany? Może być kompilowany w trakcie zapisywania mapy do c.
Zasadniczo, z jakiegoś powodu przypomina on c i nie jest to lua.
Gdyby zrobili to jako język interpretowany to by była porażka w kwestii wydajności.~ShadowDancer
2010/03/15 18:43
@ShadowDancer:
Po pierwsze to ze przypomina C to dlatego, ze wiekszosc dzisiejszych jezykow jest na skladni C. Skladnia lubiana to po co z niej
nie czerpac.
Po drugie jakby byl kompilowany do kodu maszynowego i zapisywany do mapy to bys musial robic osobna wersje mapy pod PC
i pod Mac :)
Po trzecie dlaczego wydajnosciowo byla by kaszana? Przeciez ten skrypt nie liczy Bog wie czego, tylko proste skrypty na mapie.
Troche AI itp.
Po czwarte. Lua czy Python sa interpretowane a mase gier z nich korzysta i jakos nie ma porazki jesli chodzi o wydajnosc :)
Chyba ze ty chcesz odpalac na Commodore 64, czy Atari ST :)~mgkiler
2010/03/15 19:43
mgkiler to nie przypomina c tylko wygląda dokładnie jak c.
Wysłałem Elementowi tłumaczenie jednego fragmentu, ale chyba mu się nie spodobało ;P~Skofijak
2010/03/15 22:37
Z tego co wiem ElemenT jest na urlopie więc lepiej pisz do kogoś innego.~MardukGD
2010/03/16 10:49
Nieźle wygląda. Składnia jest ok :)
Nie rozumiem tylko w czym to Java przypomina.~nekuu
2010/03/16 12:29
to kto teraz jest tu szefem? ;]~Skofijak
2010/03/16 13:45
Wydaje mi się że:
Dominik "BeLial" Misiak
Zastępca redaktora naczelnego
:P~MardukGD
2010/03/16 18:39
No to tak...
"wiekszosc dzisiejszych jezykow jest na skladni C" to jest oczywiście bzdura, widać, że za dużo ich nie znasz (chyba, że
podciągasz, że java jest na składni c...).
Wow, ale ja nie napisałem, że miałby być kompilowany do kodu maszynowego, tylko do c.
tips: c to taki przenośny assembler
Hmm, a grałeś w starcrafcie w mapy typu diplo? Tam jest ok. 1500 skryptów, 2/3 do przetworzenia co klatkę. I działa płynnie.
Tak, wiele gier korzysta z lua/pythona(w większości niepotrzebnie, ale to inny temat), jednak nie stoi na nim render, tylko
logika gry. Teraz zastanów się jakiego by trzeba było proca do crysisa, jeśli np. współrzędne vertexa były by liczone w lua.
Trochę przesadzam, ale nie bardzo.~ShadowDancer
2010/03/16 19:27
@SHadow Dancer:
No i co ze skompilujesz do C (pomijajac ze ten jezyk to juz jest uproszczone C) ?
I co dalej z tym zrobisz?
Myslisz ze gra ma kompilator C do kodu maszynowego? Bo tylko tak moglbys nie miec interpretowanego jezyka.
Watpie by ze Starcraftem byl dolaczony kompilator :)
A co do Javy. Tak Java jest na skladni C. W 90% skladnia Javy zgadza sie z C. Poczytaj sobie.~mgkiler
2010/03/16 20:10
Jak co z tym zrobię? Wykonam.
Gra może mieć kompilator, aczkolwiek na 100% będzie go miał map edytor.
Przykładowy kod z wikipedii:
public class Figura {
// operacje (metody)
public float obliczPole(){
return 0;
}
public float obliczObwód(){
return 0;
}
public void wyświetl(){...}
...
}
Faktycznie, aż można się pomylić z c...
Zadam ci fundamentalne pytania:
-Programowałeś w c?
-Programowałeś w javie?
-Programowałeś w lua?
-Pisałeś własny język skryptowy?
-Co to jest kompilacja?
-Jaka jest różnica między kodem kompilowanym i interpretowanym?
Bo coś mi się zdaje, że ta dyskusja nie ma sensu.~ShadowDancer
2010/03/16 21:28
ShadowDancer korzystasz może z forum gamedevu? Bo tak jakoś mi się kojarzy :P~MardukGD
2010/03/17 11:51
@Shadow Dancer:
TAK. Na wszystkie twoje pytania jest odpowiedz tak. I na nie zadane pytanie "czy pracuje jako programista", Rowniez
odpowiedz jest TAK.
Ty wkleiles kod z wikipedi ktorego sam nie rozumiesz :)
Java jest jezykiem obiektowym wiec nie doszukuj sie w C tworzenia klas.
Porownuj to co jest w obu tych jezykach. Funkcje, zmienne, petle itp itp. To jest takie samo.
"Jak to co zrobie. Wykonam"
Jak wykonasz?
Przez inny program? - to sie nazywa interpretowanie.
Druga mozliwosc to kompilacja do kodu maszynowego i wykonanie przez procesor.
A sam mowiles ze nie chcesz kompilowac do maszynowego a do C i ... no wlasnie co dalej. Wykonasz na innym programie czyli
INTERPRETUJESZ.
To ja Ci moge zadac pytanie:
-czy pisales w assemblerze?
-czy wykonywales testy wydajnosci ze stwierdzasz ze bedzie okrutnie wolne?
-a jesli wykonywales to czy na zagadnieniach o podobnym stopniu skomplikowania (czyli malym) jak w SC2?
Tak. Dyskusja nie ma sensu bo wysuwasz tezy bez poparcia.
Twoje wnioski sa na podstawie kodu ktory musisz przekleiwac z wikipedi bo go nie rozumiesz / nie umiesz samemu napisac
przykladu.
Zobaczyles przykladowy kod Javy i C na wikipedi i jako ze przyklady sa rozne stwierdzasz ze skladnia tych jezykow jest inna :)
Super rozumowanie :)
Wedlug twojego rozumowania tylko jezyk C moze byc na skladni C, bo jesli bysmy dodali choc 1 slowo kluczowe to juz nie
bedzie na oparty o skladnie C :)
Czyli: nie istnieje pojecie ze jezyk jest na podstawie skladni innego jezyka w twoim rozumowaniu :)~mgkiler
2010/03/17 18:25
Skoro pisałeś swój język skryptowy, to czemu zadajesz takie głupie pytania jak "co z tym zrobisz"? Skoro coś przypomina c, to
nie dlatego, że jest to super wygodny język, w którym łatwo się kodzi (bo wtedy przypominało by javę), tylko mają jakiś powód.
Wykonywałem testy na ogre z lua i własnym silnikiem skryptowym. Własny skrypt(preparsowany), był 60% szybszy od lua, bo
został stworzony. Oczywiście różnica(w fps) objawia się przy konkretnej ilości skryptów.
I nie, nie programowałem w assemblerze, bo jest to umiejętność mi całkowicie nieprzydatna.
Dobra, dajmy sobie spokój, wrócimy do dyskusji jak wyjdzie beta i będziemy wiedzieli co i jak ;d
~MardukGD: tak, udzielam się na forum gd~ShadowDancer
2010/03/17 19:30
@Shadow Dancer:
OK. Peace. Poprostu troche mnie wkurzyles.
Ja programowalem dawno temu w QBasicu (jak mialem 12 lat). Potem pare lat Pascal pod Dosem z wstawkami asmowymi.
Potem ze 2 lata C, Potem pare lat C++. Potem 3 lata w Javie
Parser robilem, ale tylko na projekt na studia.
Chyba wiem o co Ci chodzi. Chodzi Ci o to, ze jezyk C szybciej zinterpretujesz niz np Lua? O to chodzi?
Moze i tak. Jednak naprawde rzeczy ktore bedziesz kodzil w Galaxy to nie sa rzeczy liczace nie wiadomo co. Nie licza
raytracingu. Nie kompresuja video. To tylko proste skrypty wiec szybkosc jest tu malo istotna.
Natomiast o co mi chodzi ze skladnia C.
Jezyki jak C, C++, C#, D, Java. Zaliczylbym do jezykow z podobna skladnia. To nic ze jedne sa obiektowe a inne nie.
A np: C, Pascal, Python - to sa dla mnie jezyki z kompletnie inna skladnia.
Ok. Peace :)
Jeszcze co do czystego C. Nie jest to dobry jezyk do pisania skryptow. Raz ze po co w jezyku skryptowym wskazniki. Powoduja
tylko niebespieczenstwo wywalenia aplikacji i nie mozna nijak zabespieczyc tego przed nie umiejetnym programista.
Dwa ze sama skladnai C ma wiele kwiatkow:
int i = 0;
i += ++i;
ile sie rowna i? :)
Dobra. Sorry za ton mojego posta z przed paru godzin.~mgkiler
2010/03/17 21:57
dodaj komentarz
08.10.2015
Kampania "Szepty o zagładzie" dostępna za darmo (0 komentarzy)
27.09.2015
Kolejni bohaterowie w trybie Sprzymierzonych Dowódców (0 komentarzy)
22.09.2015
Cyfrowe gadżety za udział w BlizzCon 2015 (0 komentarzy)
15.07.2015
Legacy of the Void dostępne w przedsprzedaży! (0 komentarzy)
17.06.2015
Informacje z E3 - prolog kampanii Legacy of the Void (0 komentarzy)
30.05.2015
WCS Europe - sobota (30 maja) 18.00 grupa G - MaNa! (0 komentarzy)
07.05.2015
DreamHack Open France 2015 - już 8 maja - MaNa! (0 komentarzy)
03.05.2015
Na wesoło: postacie E-sportu 50 (0 komentarzy)
03.05.2015
IEM Katowice 2015 - jeszcze raz! (0 komentarzy)
03.05.2015
KeSPA Cup 2015 Season 1 - live! (0 komentarzy)
26.04.2015
Proleague - Top5 gier miesiąca (0 komentarzy)
26.04.2015
CJ Entus wygrywa 2 runde Proleague! (0 komentarzy)
18.04.2015
Wersja beta Legacy of the Void – aktualizacja 2.5.1 (0 komentarzy)
18.04.2015
WCS finals 2015 - galeria (0 komentarzy)
18.04.2015
Omówienie zmian w balansie Legacy of the Void (0 komentarzy)
11.04.2015
WCS Europe kwalifikacje z Polakami - dziś (sobota) 18.00 (0 komentarzy)
11.04.2015
Aktualizacja balansu Heart of the Swarm – 9 kwietnia (0 komentarzy)
11.04.2015
GSL Season1 2015 - galeria (0 komentarzy)
11.04.2015
Zbanowane konta w StarCraft II (0 komentarzy)
04.04.2015
Red Bull Battle Grounds powraca jesienią 2015 (0 komentarzy)
(zobacz wszystkie)

Podobne dokumenty