Skocz do zawartości

Threef

Moderatorzy
  • Postów

    2 911
  • Dołączył

  • Ostatnia wizyta

  • Wygrane w rankingu

    14

Treść opublikowana przez Threef

  1. Threef

    Galeria Grafik

    Czcionka z komunikatem mi nie pasuje.
  2. Threef

    Tura #147 - Dyskusja

    Głosowanie jest hardcoded. Możemy ustawić tylko kiedy się otwiera i zamyka formularz wrzucania gier. GŁosowanie zawsze jest 24h. Ktoś musiałby to przekodować.
  3. Threef

    Tura #147 - Dyskusja

    Wtedy w jeden weekend wróciło na GMClan chyba 2 starych użytkowników. A jak poszła informacja że wrócili to wrócili inni i nawet Ci co zazwyczaj się nie logują to się zalogowali. etc.
  4. Threef

    Filmy

    Tak w ogóle to ja przestałem oglądać filmy. Nie mam z kim do kina iść, i nawet nie chce mi się ściągać by wieczorem coś obejrzeć. Jeżeli coś oglądam to w TV który leci w tle podczas pracy... czyli 4 lata po premierze. I z najnowszych to oglądałem marvelowe Strażników Galaktyki i Czas Ultrona i tylko z tego powodu że moja ignorancja wynikła podczas rozmowy i kumpel posadził mnie przed ekranem na siłę. Guardiansi bardzo dobre. Ja już praktycznie w pełni przestawiłem się na anime. Bardziej komfortowo się czuję wiedząc że znajomi ciągle mnie zasypują nowym, a każde ma 12-50 odcinków więc co wieczór mam co oglądać. No a sporo jest dobrego. Nie wydaje mi się żebym mógł co wieczór jak kładę się do łóżka po 23 oglądać dwugodzinny film. No tak więc w zeszłym miesiącu obejrzałem Ghost in the Shell: Arise który składa się z 4 filmów i bardzo mi przypadły do gustu. Trochę cliche bo próbowano pokazać historię wszystkich bohaterów, ale tego nie dało się uniknąć. A w zeszłym tygodniu ten najnowszy tegoroczny film który jest prequelem do oryginalnego GitS... które mam nadzieję że każdy oglądał! No ale ten nowy film (który nosi nazwę "Ghost in the Shell New Movie" lol) wyszedł chujowo. 4/10. Nie ma tego samego feel co GitS. Myślałem że oglądam szklaną pułapkę. :(
  5. Obsługa JSON jest tylko w Studio. Ale w poprzednich GM było już ds_map_write() i ds_map_read(). I tego użyj. Jest niesamowicie łatwo, wygodnie, i bezproblemowo. Tylko nie ma plusu struktury drzewa.
  6. Wszystko zależy od rodzaju danych. Pliki ini są do danych konfiguracyjnych. Takich jakie użytkownik może sam zmieniać. Bo ich jedynym plusem jest to że są bardzo czytelne po otwarciu. Pliki tekstowe wymagają dobrego zaplanowania danych. Możesz sobie zapisywać każdą daną w osobnej linijce i tylko pamiętać co jest w której. Np w pierwszej linijce jest hp gracza, w drugiej złoto, etc. Możesz przechowywać dane w ds_map i zapisywać je do stringu dzięki specjalnej funkcji. Wtedy wystarczy że w ds_map masz klucze "hp gracza", "gold". Taki string jest zapisany w sposób nie do odczytania przez człowieka (ale łatwo go odszyfrować) Najpotężniejszy i bardzo przyjemny po opanowaniu jest zapis w formacie JSON. Jest łatwy do przeglądania, bardzo prosty do zapisu i odczytu i ma strukturę drzewa. Możesz np.: zrobić tablicę w tablicy w tablicy. Więc nie ma problemu żeby zrobić tablicę postaci, w jednej postaci zrobić tablicę ekwipunku, która będzie miała pozycje inventory zapisane jako ds_map z różnymi właściwościami jak "dmg", "cena" i w środku kolejną tablicę na efekty. Problem z JSON jest taki że sprawia bardzo dużo kłopotu pilnowanie w GM żeby wszystkie dane były traktowane jako JSON. Wszystkie pliki można szyfrować poza ini. Zaszyfrować ini można na 2 sposoby: Szyfrując wartości (tak jak Sutikku pokazał kilka potów wyżej) albo szyfrując cały plik, ale żeby to zrobić trzeba go pierw otworzyć jako plik tekstowy, odszyfrować, zapisać jako niezaszyfrowany ini, dokonać operacji zapisu,otworzyć ponownie jako plik tekstowy, zaszyfrować i zapisać. Bardzo dużo głupich operacji.
  7. Threef

    Tura #147 - Dyskusja

    Podoba mi się temat rozmowy. :) Z liniowością chodzi mi o funkcję matematyczną. Liniowo jest: y = x*2 Nie pamiętam teraz jak się reszta nazywa ale możemy mieć też na przykład: y = x^2 y = x*2 + y Na przykład parabola, ale my zawsze mierzymy dla x rzeczywistych dodatnich. Na początku u ciebie wydawało mi się że wszystko jest liniowo. Ceny upgrade rosły 25, 50, 75, 100, 125. Jeżeli druga maszyna miałaby tak samo ceny to nie miałoby to zbyt sensu. Ale cena jest globalna, wiec możemy ulepszyć pierwszą maszynę 4 razy, kupić drugą a pierwszy upgrade do niej będzie tak samo drogi jak piąty dla pierwszej. No i nawiązując do tego co uznajesz za idee idle. Nie rosnące liczby uzależniają, a to że za moment uzbiera się na kolejny upgrade który zwiększy szybkość rośnięcia cyferek. Samo patrzenie się na rosnące liczby bardzo się nudzi.
  8. Threef

    Tura #147 - Dyskusja

    Był temat tego że mało ludzi widzi ligę. I wszytko co Uzjel piszesz trzeba będzie robić. Są ludzie którzy nie zaglądają w ogóle na stronę główną, a logują się od razu na forum, czyli nie widzą shoutboxa. Ja zacząłem pisać w SB kilka dni wcześniej że planuję ligę, a ostatnio nawet pytać się czy ktoś jest chętny. Założenie tematu tydzień wcześniej o tym że zbliża się liga na pewno pomoże. Do Fanpage już dawno prosiłem o uprawnienia. :( Tutaj pytanie czy ktoś przyszedł na ligę po zobaczeniu posta na Facebooku? Jeżeli chodzi o gry: Pierw zagrałem w Śrubki. Od początku wydały mi się bardzo liniowe. Czyli upgradeujemy jeden pas, kupujemy drugi, upgradujemy drugi, etc. Po kupieniu drugiego pasa wydawało mi sie że trafiłem na bug, bo ceny były jak dla pierwszgo, ale to na szczęście sprawiło że przyrost w grze nie jest liniowy. Rozumiem że każdy upgrade kosztuje coraz więcej? W takim razie kupienie drugiego pasa jest za drogie. Jest to upgrade nic nie dający względem ulepszenia szybkości, a i tak po kupieniu drugiego pasa trzeba go ulepszyć. Potem zagrałem w grę Boada. Pomijając że nie była skończona, to pomysł trochę odbiega od tematu... bo można (chyba) przegrać. W sumie nie testowałem tego, ale sam spadający pasek HP już mi wystarczy. Może gdyby potwory podchodziły do zamku, zabierały pieniądze i znów uciekały? Wtedy zostawiając grę zyskuje się trochę golda, a aktywnie zabijając przeciwników zyskuje się więcej bo nie jest ono kradzione? Następnie odpaliłem kaktusa. Eksplodował mi w słuchawkach i zawiesił na moment komputer. Jak wszystko się odwiesiło to zająłem się ściszeniem dźwięków do 5% i zobaczyłem coś ślicznego, ale przegapiłem tutorial. Ogarnąłem sam coś przez chwilę, po czym wyłączyłem grę, przeczytałem readme i odpaliłem ponownie. Readme dało mi zupełnie inne wrażenie niż to co jest w grze. Spodziewałem się symulatora oglądania jak kaktus rośnie pod wpływem różnych surowców, a dostałem powolne latanie pomiędzy planetami i sprawdzanie ich nazw. Nawet nie wiem czy wysłanie sondy cokolwiek zrobiło dla mojego kaktusa. Brakowało mi jakiegoś wskaźnika że cokolwiek się z nim dzieje. O mojej grze pisałem wcześniej na SB, ale też przy okazji wspomnę. Od kilku miesięcy chodził mi po głowie pomysł gry idle. W sumie ten pomysł co zrobiłem, ale bez itemów. I wydaje się że itemy jednak są najważniejszym punktem mojej gry. Grafiki itemów są z mojej przeglądarkowej gry z 2010 roku, a grafika GUI stąd. Gra polega na oglądanie logu walki i w razie czego ucieczkę aby zregenerować HP. Śmierć naszej postaci powoduje że walka zatrzymuje się na kilka sekund a życie nasze i przeciwnika regeneruje się. Zabity przeciwnik odblokowuje wyższe piętro z silniejszym przeciwnikiem, daje trochę EXP, ma 30% szansy na drop golda (wyższe piętra dają więcej golda ale też 30%) i szansę na drop itemu. Szansa jest największa na najwyższym piętrze jakie odblokowujemy i spada gdy próbujemy farmić. Więc jak walczymy na piętrze 16 to po zabicu tego przeciwnika mamy ~50% szansy na drop itemu, ale jak wrócimy na piętro 10 to ta szansa spada. W sumie to już na 15 mamy 44%, a na 14: 38%. Minimem to 5%, ale i tak na niższych piętrach dropią słabsze itemy. Item na level 10 nie wypadnie na 5 piętrze. Itemy dropią losowo. I nie da się wydropić hełmu i płaszcza, bo ich nie ma w grze. Każdy item ma szansę na modyfikator (np.: Broken Pants) który podnosi albo obniża jego statystyki niezależnie od wymaganego levelu. Broń na wyższy level praktycznie zawsze będzie lepsza. PIerścień może albo dodać DEF, ale zwiększyć częstotliwość ataku. DEF redukuje atak przeciwnika o jego wartość, ale atak przeciwnika nigdy nie będzie mniejszy niż 10%. Sklep dodałem 6 godzin przed końcem i go nie zbalansowałem. To że w sklepie są zawsze za drogie itemy wynika z tego że itemy w sklepie pojawiają się po levelupie postaci, a itemy na nowy level są droższe. Problem jest taki że postać na początku szybciej wbija levele niż zbiera golda. Jest limit i itemy mogą mieć maksymalnie 99 level, postać chyba też. Przeciwnicy nie, wiec endgame to szykanie jak najlepszych itemów na 99 level. Jak w MMORPG. Dodatkowo jak włączycie teraz grę to dostaniecie bonusowy EXP i gold zależnie od tego jak dawno graliście. Tak da się przesuwać zegar systemowy. I jeszcze dodam że w %appdata% w plikach gry macie swój zapis gry w pliku save.idle. Skasowanie go zresetuje grę, a edycja w notatniku pokaże strukturę zapisu gry włącznie z możliwością edycji itemów! Już zrobiłem poprawioną wersję z (chyba) poprawioną szybkością ataku, podświetleniem zakładania itemów, większą maską kolizji dla sprzedawania i lekkimi zmianami w dropie golda. Mam zamiar nad tym kiedyś jeszcze pracować. Dodam na pewno więcej modyfikatorów. Nie zdążyłem zrobić critików i chciałem zrobić questy z nagrodami typu zabij 10 przeciwników na piętrze max(1,top-8) za 1000 golda. Muszę sam trochę potestować a potem dam wam. Ja głosuję na kaktusa bo podoba mi się interpretacja tematu. Chociaż też mało w tym jakiegokolwiek idlowania. :(
  9. Threef

    Filmy

    Ja ciągle słyszę że nowy Bond to gówno. Piszę to bo po necie latają boty które wyszukują złe opinie na temat SPECTRE.
  10. Trzeba by narysować żeby łatwo wyjaśnić. Jeżeli chcemy zrobić płynne przejście nie wykrywalne dla gracza to po przejściu z jednego krańca room na drugi wszystkie obiekty muszą być na tych samych miejscach. Coś takiego zrobiłem kiedyś na ligę.
  11. Coś takiego powinno działać. Pisałem z głowy, nie testowałem. Być może trzeba zamienić < na <=. GML ///ds_grid_test_region(ds_grid, ds_grid, x, y) var source=argument0; var test_grid=argument1; var r=0; for(var i=argument3; i<argument3+ds_grid_height(test_grid); i++) for(var j=argument2; j<argument2+ds_grid_width(test_grid); j++) { if(source[#i, j]==test_grid[#i-argument2, j-argument3]) { r++ } } return r; Jako pierwszy argument podajesz grid źródłowy, drugi to cały grid który ma być testem czyli twój (0,0 1,1). x i y to punkty od których chcesz sprawdzać. Funkcja sprawdza cały rozmiar drugiego grida, wiec będzie działać dla każdego rozmiaru. I jak chciałeś zwraca ilość zgadzających się komórek.
  12. Jest chyba nawet domyślna akcja która to robi, ale robi to brzydko. Ogółem musisz sprawdzić czy gracz przeszedł pewna granicę i wtedy przenieść go na drugą stronę room. Wygląda to mniej więcej tak: GML if(x<0){x+=room_width} if(x>room_width){x-=room_width} Tylko że ty musisz to bardziej pod siebie przerobić. Prawdopodobnie musisz zrobić sobie jakiś margines, no i na pewno musisz stworzyć kopie obiektów przy krawędziach mapy. To może też da się zautomatyzować.
  13. Mi chodziło wewnątrz GM. Dostajesz request, wiesz jakie dane cię interesują, wiec mozesz próbować usunąć wszystko inne. Chyba że za pierwszym razem źle przeczytałem... Nie ważne o co poprosisz to serwer zwraca tę samą informację? Duck it! Zmieniaj host na cokolwiek innego!
  14. Nie, po prostu host wkleja Ci to. Nie wiem czy to skrypt od reklamy, analityki czy jakiś ich wewnętrzny, ale nic z tym nie zrobisz. Opcje są 2. Znaleźć lepszy host, albo parsować ten tekst. Znasz funkcje od tekstu więc możesz z result usunąć nie interesujące Cię informacje.
  15. Twój punkt [128,122] jest punktem na mapie, nie na sprite co widocznie chciałeś uzyskać. Każdy instance ma swoje wewnętrzne zmienne takie jak: speed, direction, image_xscale, ale też x i y. Pewnie to już wiesz. Ale jeżeli gdzieś w obliczeniach chcesz odnieść się do pozycji instance to musisz podać jego x i y. Poza tym mam nadzieję że nie masz tego kodu w evencie kolizji? Wtedy on prawie na pewno się nie wykona, bo najpierw będzie musiał sprawdzić kolizję masek, a dopiero potem twój kod.
  16. Wszędzie, ale wymaga połączenia z internetem.
  17. Nie używaj słowa najłatwiej bo prawie zawsze znajdzie się łatwiejsze rozwiązanie. W tym wypadku łatwiejsze będzie podpięcie API GameJolt. W 3 funkcjach będą highscore i to online.
  18. Tak jak myślałem. Na siłę próbowałeś optymalizować coś co nie wymagało optymalizacji. Mam nadzieję że sprawdziłeś jak wypada to bez dezaktywacji? Następny krok jaki możesz zrobić to wykonywać dezaktywację nie co step, a w alarmie. Tylko wtedy nie zapominaj że rozmiar aktywnego obszaru musi być adekwatnie większy. Wrzuć gdziekolwiek w create gdzie wykona się tylko raz. Nie musisz robić żadnych warunków, bo ta funkcja od niczego nie zależy. Nie ma czym zaszkodzić, a najwyżej się nie powiedzie. Tak czy inaczej użycie jej oznacza wczytanie wszystkich potrzebnych atlasów od nowa. Nie twórz nowego obiektu bo to nie ma sensu. Nie potrzebne dodatkowe dane. I jeszcze raz powtarzam. draw_texture_flush() Nic Ci nie da. Nie poczujesz żadnej różnic. Nawet nie będziesz wiedział czy zadziałało poprawnie czy nie. Jest bardzo mało przypadków w których ta funkcja na prawdę pomoże (np: wyrzucenie z pamięci nie używanej już czcionki) ale to nie będzie miało wpływu na grę.
  19. Threef

    ulubiony superbohater

    Saitama Mocno polecam.
  20. Tak, ale wszystko zależy od tego co się dzieje u ciebie w grze. Musisz najpierw sprawdzić czy to ma jakikolwiek sens. I jeszcze raz powtarzam: Spróbuj całkiem bez dezaktywacji. No i wszystko sprawdzaj profilerem w debugerze!
  21. Chcę zauważyć że wykonanie aktywuj wszystko dezaktywuj wszystko poza view aktywuj wszystkie obj_solid w pewnym momencie będzie bardziej zamulało grę niż zostawienie tego bez dezaktywacji. Jeżeli masz dużo takich obiektów to podczas jednego step wykonasz 3 operacje na każdym z tych obiektów w room. Zastanów się jak wiele jest takich obiektów. Może efektywniej będzie robienie tego na opak? Czyli dezaktywowanie tylko wybranych rodzai obiektów a potem aktywowanie wszystkiego w zasięgu view? Zrób teraz profilowanie, zobacz co i ile Ci zżera czasu na operacje. Potem wywal wszystko dotyczące dezaktywacji i sprawdź ponownie.
  22. Nie mam pojęcia jak masz elementy ustawione na mapie, ale twój kod dezaktywacji wygląda na przeciwieństwo "dobrze". Te funkcje dezaktywują tylko i wyłącznie obiekty. Napisałeś że twoje mapy składają się na: tło, drugą warstwę tła jako scenerię i ustawione niewidzialne obiekty solid. Więc teraz po twojej liście wyjątków stwierdzam że chyba nic nie dezaktywujesz. Poza tym zasięg instance_deactivate_region() masz źle. Argumenty to x, y, szerokość i wysokość. Jako że zaczynasz x i y o 128px wcześniej to musisz w i h zrobić większe, ale nie o 128 bo wtedy kończy się na krawędzi. w i h musisz dać większe. I mam nadzieję że wiesz skąd są te wartości? To ma być połowa szerokości/wysokości największego dezaktywowanego obiektu. (W skrócie, bo to zależy od origin.) Edit: Poza tym to wygląda jakbyś na siłę szukał nie istniejącego problemu. Coś wiesz ze jest nie tak, ale nie wiesz gdzie szukasz. Dezaktywacja obiektów nie pomoże w żaden sposób z grafiką. A draw_texture_flush() nie pomoże w czyszczeniu pamięci, bo GM sam zwalnia z pamięci to czego nie potrzebuje. Ilość texturepages nie spowoduje komunikatu o braku pamięci, ale już za duży ich rozmiar tak. I jak gnysek napisał (co też pisałem ale widocznie nie dostatecznie zrozumiale) wolne jest przeskakiwanie pomiędzy różnymi teksturepages podczas rysowania..
  23. Jeżeli masz jeden wielki background pokrywający całą mapę to nie da rady. Tamte rozwiązanie ma sens jedynie przy tiled background.
  24. Po prostu wejdź w Global Game Settings i tam gdzieś będziesz mieć opcję podglądu twoich texturepages. Otworzy Ci się folder z nimi i sam będziesz mógł zobaczyć czy wszystko jest ok. Pamiętaj że jak będziesz próbować wsadzić grafikę o większy rozmiarze niż texturepage to zostanie ona zeskalowana. Twój cel jest taki aby w jednym room było jak najmniej zmian texturepages. Jeżeli na jednym zmieścisz wszystkie postaci, elementy interfejsu, particle, etc. To na drugim możesz wciskać grafiki pierwszego zestawu leveli. Pierwszy atlas (tak poprawnie się nazywają texturepages) będzie w grze wczytany zawsze, ale drugi tylko na odpowiednim levelu. Tylko nie próbuj na przykład wrzucać wszystkich teł na jeden atlas. To nie ma sensu, więc spróbuj odpowiednie tło wcisnąć na odpowiedni atlas. Jak jedna mapa nie zmieści Ci się na jednym atlasie, to zrób tak aby ten dodatkowy zawierał jak najwięcej uniwersalnych elementów. Bo posiadanie wczytanych atlasów: postaci, pierwszego levelu i atlasu ze "śmieciami" jest lepsze niż wczytywanie 6 różnych z których czasami pobierasz jedną grafikę.
  25. A ja dodam że draw jest zawsze wąskim gardłem. Niezależnie od platformy czy silnika. Dlatego mamy teraz w swoich PC dedykowane karty graficzne.
×
×
  • Dodaj nową pozycję...