Skocz do zawartości

Konrad-GM

Użytkownicy
  • Postów

    2 728
  • Dołączył

  • Ostatnia wizyta

  • Wygrane w rankingu

    44

Treść opublikowana przez Konrad-GM

  1. Gdybyś pokazał w jaki sposób tworzysz bloki. Możliwe że tworzysz dwa naraz.
  2. W GM, jak i w innych silnikach 3D, jest ograniczona liczba źródeł światła. A światło włączasz poprzez funkcję d3d_light_enable. Możesz zrobić dynamiczne przypisywanie świateł obiektom, które są relatywnie widoczne (np. przez różnicę distance pomiędzy graczem a pochodnią). W create pochodni np zmienna "lightId = 0;" i "enabled = false;", która określa ID światła i czy jest aktywne. Zaś w step można sprawdzać odległość np: GML if(!enabled && distance_to_object(objPochodnia) <= 100) { d3d_light_enable(lightId, true); // inne ustawienia swiatla jak kolor, range etc. enabled = true; } else if (enabled && distance_to_object(objPochodnia) > 100) { enabled = false; } W romie przy creation code pojedynczego obiektu można ustalać różne ID świateł do których pochodnie są przypisane. Dla optymalizacji można powielać ID świateł, ale które są daleko od siebie.
  3. Czyżby coś się zmieniło w GMS? :P Szybki test: Jak widać obiekty z większym depth rysują się na początku ;p
  4. No coś nie halo ;D Najpierw rysować należy kamerę (ustawia projekcje itd. z depth = 1000), później obiekty i świat (depth < 1000), a na końcu ponownie ustawić projekcję ale na ortho i rysować hud (depth < depth-świata). To tak dla ścisłości :)
  5. Za dużo "nocy" ;p A tak to projekt prezentuje się bardzo dobrze. Borek musi się streszczać bo na Almorę popyt spadnie :borek: sarkazm kolego, borek porzucil almore
  6. Nie zaprzeczę, jednak parę błędów posiada, no i oczywiście rozwinąć to do użytku wypadałoby ;)
  7. Pracuję nad dodatkiem do Unity3D, a konkretnie nad budową sceny opartej na voxelach (w edytorze unity) z minkraftową teksturą Całość pisana w C# ;)
  8. Można serializować dane z ds_map/grid etc. i np. zapisać do ini jako string.
  9. Spróbuj manualnie pobierać znaki z klawiatury np. przez getchar aby rozpoznawać pojedyncze znaki.
  10. Bodajże input stream również rozdzielany jest poprzez spacje, tj. int a, b, c; cin>> a >> b >> c; cout<<"a = "<< a<< "\n"<<"b = "<< b<< "\n"<<"c = "<< c<< "\n"; // #>10 20 30 // a = 10 // b = 20 // c = 30
  11. Sterowanie odstrasza, strasznie niewygodne :/ Szkoda, Contra mimo limitu daje radę ;)
  12. Jak na niby-NESa, dość sporo kolorów ;)
  13. Jest to możliwe, jeżeli umiejętnie posłużyłbyś się np. funkcjami grupy http_* i skorzystał z web API
  14. Na tym polega "fenomen" Draw GUI - żaden event Draw GUI nie uwzględnia przesunięć view_x/yview, to tak jakby rysować przy projekcji ortho o współrzędnych 0,0 na ekranie
  15. Zatem jest ich więcej :P
  16. Poza paroma błędami, a jest ich sporo (głównie dziury w mapie, łamanie nadgarstków), gra jak na alphe jest ok. Wymaga duużo poprawek, nieraz wypadłem poza mapę przez ścianę trzymając skrzynię czy beczkę. Screen o jakie dziury mi konkretnie chodzi (nie wiem czy tak miało być):
  17. Można też zastosować 'cover'a http://www.w3schools.com/cssref/css3_pr_background-size.asp
  18. Jakby kogoś interesowało rozwiązanie: ; void __fastcall__ pal_fill(const byte* colors); _pal_fill:; A - low-bytes pointer, X - hi-bytes pointer STA ptr2 ; store data address into zeropage - 2bytes STX ptr2+1 LDA $2002; hi/low seek reset LDA #$3F ; seek PPU address to $[3F]00 - hi-byte STA $2006 LDA #$00 ; seek PPU address to $3F[00] - low-byte STA $2006 LDY #$00 ; start indexing @1: LDA (ptr2), Y; read data STA $2007 INY CPY #$10 BNE @1; loop limit RTS Argument funkcji pal_fill to wskaźnik 2 bajtowy na dane 1-bajtowe, przy wywoływaniu funkcji zachowany jest w dwóch rejestrach 1-bajtowych - A i X. ptr2 to po prostu adres na pamięć 2-bajtową w sekcji tzw. zeropage. Delkaracja ptr2 znajduje się w pliku ASM zeropage.inc od cc65.
  19. Cześć i czołem bracia i rodacy, mam do was pytanie moi mili, otóż prosiłbym by ktoś kto zna ASM mógł mi wytłumaczyć parę spraw. Otóż chodzi o adres (wskaźnik) jaki otrzymuje funkcja w ASM wywoływana z poziomu kodu C. Nie jest to "zwykły" ASM pod procesory x86, tylko zająłem się dość "starą" technologią NES z procesorem MOS 6502. Różnice to oczywiście rejestry i 8bitowa pamięć. Korzystam z kompilatora CC65 pod Win8. W języku C mam zamiar zawrzeć logikę gry, zaś w ASM wszystkie pozostałe rzeczy jak zarządzanie kontrolerami, dźwiękiem (APU) czy grafiką (PPU). Do rzeczy: W celu wywołania funkcji napisanej w ASM korzystam z trywialnego kodu: void __fastcall__ pal_fill(const byte *data); // import pal_fill(palPaleta); // wywolanie Dla optymalizacji, poprzez __fastcall__ ładuje wskaźnik *data do rejestru. Jednakże z racji iż jest to 8bitowy procesor, a wskaźnik 16bitowy, rozkładany jest na partie 8bitowe w rejestrach tj. A i X. Teraz problem pojawia się iż chciałbym wczytać zawartość znajdującą pod wskaźnikiem, jednak nie mam za bardzo pojęcia jak się za to zabrać. Co prawda kompilator C przekształca źródła z C na plik ASM, jednak jest to mało optymalizowane i wygląda jak śmietnik. Pętla w ASM: _pal_fill: LDY $2002; reset PPU states LDY #$F3 STY $2006; hi-byte of $[3F]00 - PPU seek address LDY #$00 STY $2006; low-byte of $3F[00] - PPU seek address LDX #$00; start indeXing from 0 @1: ;??? LDY A, X; load colour from address A + X into Y reg !!! tutaj następouje "syntax error", jak wspomniałem, rejestry są 8 bitowe ;??? STY $2007; put colour from Y reg into PPU pallete INX; X = X + 1 CPX #$10; if X == 16 BNE @1; above cmp is true -> continue RTS; return to C Zastanawiam się czy nie należy tutaj użyć "stack"a, (sp), coś a'la: STA (sp) STX (sp)+1 ... LDY (sp), X Pozdrawiam, Konrad
  20. Konrad-GM

    Zapis do pliku [C]

    Zapomniałeś o jednym. "w+" flag - write/update: Create an empty file and open it for update (both for input and output). If a file with the same name already exists its contents are discarded and the file is treated as a new empty file.
  21. W GM:Studio działają surface'y w trybie 3D z tego co kojarzę. Rysuj ten kwadrat na oddzielnym surface nawet o mniejszej rozdzielczości (pixel-perfect zaznaczanie chyba nie jest Ci aż tak potrzebne :) ), i na nim stosuj funkcję: surface_getpixel
  22. Nawet GameMaker ma własny "mainloop". Bo chyba o to chodzi w Game Engine'ach. Modding a'la Unity czy UDK jest ok... :P
×
×
  • Dodaj nową pozycję...