Skocz do zawartości

I am Lord

Użytkownicy
  • Postów

    4 891
  • Dołączył

  • Ostatnia wizyta

  • Wygrane w rankingu

    53

Treść opublikowana przez I am Lord

  1. Na chromie jakoś ten problem nie występuje. Jak jest duplikat to i tak ściąga od nowa dodaje numerek w nazwie.
  2. Przykład takiego MMO z naciskiem na fabułę jest tutaj: http://www.my-fantasy.net/start2/ kiedyś jak w to grałem to jeszcze fabuła nie była ukończona ( kończyła się na 80 levelu ) i mało było sekretnych drug fabularnych, teraz nie wiem jak jest, pewnie dodali po prostu więcej wszystkiego :P
  3. I am Lord

    EvoNet

    Dla mnie spoko mógłbym skorzystać ale pod takim jednym warunkiem: że nawet te darmowe gry będą przechodziły ten test jakości, bo nie chciał bym tam spamu catch the clownów i innych wytworów Dyzmko podobnych.
  4. I am Lord

    EvoNet

    Nie lepiej tego jakoś po trochu nagłaśniać w czasie a nie tak z bomby? Nie znam się na marketingu stąd pytanie takie :P. Bo mi się wydaje że takie ogłoszenia z bomby to bardziej się przyjmuje jak już marka jest wypracowana.
  5. Fajnie jakbyś pobawił się ciemnością, super by to wyglądało gdyby ten laser był źródłem światła. Taki świecący neon.
  6. Platyna w draw_sprite jako argument 'numer klatki' możesz wstawić -1 wtedy funkcja będzie odtwarzać po kolei klatki sprita zgodnie z prędkością image_speed. Nie trzeba więc podstawiać własnej zmiennej.
  7. A taka ważna optymalizacyjna sprawa. Żeby pętla nie sprawdzała komórek na których zostały już zapisane punkty ruchu to w skrypcie check_square_move( moves_grid, x, y, remain ) trzeba dać gdzieś warunek: GML if ( ds_grid_get( argument0, argument1, argument2 ) == unkown ) { // tutaj oblicznie pozostalych puntow ruchu i zwracanie ich } else { return -1; } Edit: u mnie ten skrypt jest bardziej rozbudowany bo sprawdzam nie tylko typ tile ale także czy coś na nim nie stoi a jak tak to co, bo np przez jednostki z teamu da się przejść a przez wrogie nie.
  8. Do obliczania zasięgu używam własny algorytm napisany można to powiedzieć tak na chłopski rozum bez żadnych poradników. 1. Tworzę ds_grid ( _g ) wartości komórek będą oznaczać ile jednostce ( która wywołała sprawdzanie zasięgu ) zostało na danym polu 'punktów ruchu' ( puki co na tym etapie jest pusta ). 2. Czyszczę ds_grid zasięgu ( _g ) wartością którą przyjąłem jako niezbadany tile ( u mnie to stała unknown = -100 ) 3. Tworzę 2 Tablice stackX[0] oraz stackY[0] ich wartości to referencje na tymczasowe ds_stack. Te ds_stacki później posłużą jako kolejka niesprawdzonych jeszcze komórek. 4. Komórkę w ds_grid ( _g ) na której stoi teraz jednostka zapełniam wartością jej szybkości/'punkty ruchu' ( u mnie to zmienna _s ) oraz ustawiam pierwszą pozycję do kolejki sprawdzeń. To jest ta pozycja od której ruch ma się rozejść czyli tam gdzie jednostka aktualnie stoi i dodaję tą pozycję do ds_stack. GML ds_grid_set( _g, _x, _y, _s ); ds_stack_push( _stackX[0], _x ); ds_stack_push( _stackY[0], _y ); 5. Teraz robię pętle która najpierw pobiera pozycję z ds_stacków i z tej pozycji bada 4 kolejne tą na 1 do góry od niej, 1 na dół, 1 w lewo, 1 w prawo i jeżeli uzna że to pole jest możliwe do przebycia przez jednostkę ( sprawdzane są czy 'punkty ruchu' się nie tym polu nie wytraciły ) to ustawia tą komórkę w ds_grid ( _g ) o wartość pozostałych 'punktów ruchu' i wkłada pozycję tej komórki na ds_stack. Pętla kończy się kiedy wszystkie ds_stacki zostaną puste. To wygląda tak: ! Z edytowane - zapomniałem o usunięciu stacków z pamięci na końcu GML for ( i = 1; i < _s; i += 1 ) { _size = ds_stack_size( _stackX[i-1] ); _stackX = ds_stack_create(); _stackY = ds_stack_create(); for ( j = 0; j < _size; j += 1 ) { _x = ds_stack_pop( _stackX[i-1] ); _y = ds_stack_pop( _stackY[i-1] ); _remain = ds_grid_get( _g, _x, _y ); // tutaj czytam ile pozostalo ruchu na tym polu // funkcja ta zwraca ile punktow ruchu pozostalo na badanym polu po uwzglednieniu kosztow ruchu tilesow _square = check_square_move( _g, _x, _y - 1, _remain ); if ( _square > 0 ) { ds_grid_set( _g, _x, _y - 1, _square ); ds_stack_push( _stackX, _x ); ds_stack_push( _stackY, _y - 1 ); } _square = check_square_move( _g, _x, _y + 1, _remain ); if ( _square > 0 ) { ds_grid_set( _g, _x, _y + 1, _square ); ds_stack_push( _stackX, _x ); ds_stack_push( _stackY, _y + 1 ); } _square = check_square_move( _g, _x - 1, _y, _remain ); if ( _square > 0 ) { ds_grid_set( _g, _x - 1, _y, _square ); ds_stack_push( _stackX, _x - 1 ); ds_stack_push( _stackY, _y ); } _square = check_square_move( _g, _x + 1, _y, _remain ); if ( _square > 0 ) { ds_grid_set( _g, _x + 1, _y, _square ); ds_stack_push( _stackX, _x + 1 ); ds_stack_push( _stackY, _y ); } } ds_stack_destroy( _stackX[i-1] ); ds_stack_destroy( _stackY[i-1] ); } ds_stack_destroy( _stackX[_s-1] ); ds_stack_destroy( _stackY[_s-1] ); A do narysowania pathu po którym porusza się jednostka ( ta biała linia na screenie używam wbudowanego w GMa A* mp_grid )
  9. Tilesy będą lekko większe niż instancje, chyba lepiej będą wtedy pasować. Tileset będzie mniej więcej tak wyglądał, później go jeszcze dopracuję. A teraz zabieram się w końcu do robienia systemu ataku. Na obronę będzie wpływały nie tylko statystyki bazowe jednostek ale także teren na którym stoi jednostka oraz jaką ma kondycję. Nie wiem czy jeszcze wprowadzać doświadczenie jednostek, może będzie pomyślę nad tym.
  10. Widać że nie masz pojęcia nawet o czym mówię.
  11. Zaprogramuj cwaniaczku algorytm poruszania się jednostek tak by jednostki nie dość że obierały najkrótszą drogę to jeszcze się między sobą nie blokowały, nawet w grach AAA mają z tym problemy. A tutaj jeszcze w grę wchodzi GM więc optymalizacja musi być w niemalże 100%.
  12. OK udało mi się teraz to przejść po stworzeniu profilu 3 raz. I muszę powiedzieć że balans statystyk jest totalnie do dupy. Doszedłem do takich wniosków: W HP nie warto inwestować ponieważ heal na 3 poziomie i wisdom 6+ zwykle odnawia 70% zdrowia, więc co turę miałem full hp ( nawet na walce z priestem ) W MP warto inwestować tylko na początku, trudno manę wytracić do 0 gdy ma się jej max 30 ponieważ butelki z maną trafiają się zbyt często. Co każdą turę można castować spella i w ten sposób match-3 zamienia się w trzymaj PPM jak pajac gdzie kolwiek bo i tak mana nie zejdzie a gemy potrzebne do castowania same się natrafiają. W END i STR też nie warto inwestować ponieważ zwykłe ataki same w sobie są słabe a gdy ma się dużo many to takich ataków nawet się nie używa. w AGI także można przypakować tylko na początku po to by wykonać turę jako pierwszy, później już nie ma znaczenia czy mamy AGI 10 czy 100 ponieważ pasek przeciwnika rośnie podczas wykonywania się animacji zbijania naszych gemów lub animacji castowania spelli. Także dochodzi do takiej sytuacji że obojętnie ile byśmy tego AGI nie mieli to po naszym ataku i tak przeciwnik ma już full stamy ( czy co to tam ten niebieski pasek jest ) z kolei po jego ataku my mamy full. WIS to taka statystyka która daje w tej grze zwycięstwo jest zdecydowanie OP. W połączeniu z healem i WIS na poziomie 6+ jesteśmy nieśmiertelni. Obiłem go na 4 levelu dając 2 razy w MP i resztę w WIS
  13. A propo tych stat to co daje widsom i endurance? Bo resztę to obczaiłem.
  14. Fraps mu obniżył fpsy i miał łatwiej bo więcej czasu na rozglądanie a ten i tak słabo ogarniał :D EDIT: Myślałem że nie ma w tej grze dźwięków bo u mnie nic nie słychać oprócz muzyczki która to gra tylko jednorazowo ale teraz widzę że ten typek ma dźwięk więc chyba jakiś bug?
  15. Oczywiście że się da jednak nie jest to łatwe. Ktoś chyba nawet zrobił taką grę u nas na gmc.
  16. W obiekcie kamerki GML (step) x = obj_follow.x + lengthdir_x( 100, obj_follow.direction - 90 ); y = obj_follow.y + lengthdir_y( 100, obj_follow.direction - 90 ); obj_follow to ten za którym kamerka ma podążać.
  17. Tyle to znaczy ile? 10 klatek powinno wystarczyć na płynną animację
  18. Hehe czyżby tak jak to robili twórcy 1 Prince of Persia na Nesa? Tj kamerowali się od boku i przerabiali nagranie na sprity :D
  19. Ściągnij sobie czcionkę z nesa i tyle :P Tylko pl znaki musiał byś do niej dorobić.
  20. Udało mi się zejść z 30ms przy długości ruchu 10 do 16ms przy długości ruchu 40 :D W normalnych warunkach czyli ( max 10 ruchu ) jest 1ms więc teoretycznie mógłbym obliczać zasięg nawet co stepa bez spadku FPS ale oczywiście obliczenia wykonują się tylko podczas zaznaczenia jednostki jednorazowo. A ten drugi debug_time2 to czas obliczania najkrótszej trasy zawsze jest poniżej 1ms. :P
  21. 40 zł :o to ile full będzie kosztować?
  22. I am Lord

    Zadanko

    No jak da jakiś kozacki pierwiastek którym będzie liczba ujemna to połowa ludzi odpadnie.
  23. Nie, algorytm mam w GML, wykonuje się szybko. Obliczanie ruchu jednostki z 5 speedem jak ta wyżej zajmuje mniej niż 1ms. A jednostki z 10 ( w grze nie będzie szybszych ) w 30ms. Więc nawet nie widać ścinki. Używałem ds_grida. W zasadzie to ds_grid i ds_stack
  24. To placeholdery machnięte w 30 sekund :D
×
×
  • Dodaj nową pozycję...