SLOWEM WSTEPU:
Jako, ze programowaniem i kodowaniem zajmuje sie juz przeszlo 15 lat to bardzo gryzlo mnie to ze wciaz nie stworzylem zadnej gry :) Dlugo zastanawialem sie (pare lat:P) nad tym na jaka platforme taka gre zrobic, caly czas sklanialem sie ku starszym maszynom. No i nie moglo byc inaczej, ze wybralem Amige. Jako podziekowanie jej za to, ze o komputerach w starych czasach dowiedzialem sie od niej najwiecej.
Zaden ze mnie grafik wiec niestety do stworzenia silnika musialem poratowac sie cudza praca. Padlo na grafike z gry STORMLORD, nie chce by ktos zarzucil mi kradziez, ale musialem cos uzyc. To demo powstalo glownie w celu znalezenia grafika i muzyka do wspolpracy, tak by widzieli ze projekt bedzie ukonczony i jest w dosc zaawansowanym stadium. Jesli jestes grafikiem, lub chcialbys wykonac muzyke do gry (3ch, 4ty na sfx) to prosze o kontakt.
Na pisanie poki co lacznie poswiecilem okolo 50h.
ZALOZENIA GRY:
- ma dzialac na golej A500 (do weryfikacji, bo predzej czy pozniej FAST sie moze przydac) - gra byla testowana na a1200 z fastem, w obecnej chwili jest duzo optymalizacji do zrobienia i sam nie wiem jak wyglada to na a500, ale nie widze zadnego problemu by na koncu gra dzialala dobrze na tej Amidze, prosze o info jesli ktos odpali na A500 :)
- ma dzialac na kazdej klasycznej amidze, miescic sie na jednej dyskietce, ale takze uruchamiac z dysku twardego
- kod ma byc wylacznie w assemblerze i w 100% pisany przeze mnie
- nie uzywac zadnych zewnetrznych bibliotek, wykorzystywac hardware amigi
- gra w trybie lowres w 5bpl, co daje nam 32 kolory
- tworzenie mapy i oprogramowanie jej nie kodem, a specjalnymi podprogramami
MOZLIWOSCI SILNIKA:
- generowanie "nieskonczenie" dlugiej mapy wykorzystujac do tego 65536 tilesow (grafik) o wymiarach 16x16 px (obecnie grafika wykorzystana z gry STORMLORD ma 1024 tilesow)
- nieskonczona ilosc BOB'ow (np. przeciwnikow)
- wyswietlanie gracza jako BOBa, czyli ze wszystkich dostepnych kolorow
- wykrywanie kolizji miedzy BOBem a graczem
- wykrywanie kolizji miedzy oddanym strzalem a BOBem (jeszcze do poprawy, ale z grubsza dziala)
- mozliwosc zaprogramowania mapy specjalnymi podprogramami (o nich pozniej)
- kazdy tile moze byc oprogramowanym ITEMEM
- animowanie map (w bardzo prosty sposob ustalane jest jaki tile ma sie rotowac z innymi, animacja moze miec ogromna ilosc klatek)
- animacja bohatera i bobow nieskonczona iloscia klatek (obecnie w demie az dwie...)
- punkty
- zycia
- ekwipunek - do 5 przedmiotow do 99 sztuk kazdej
TROCHE SZCZEGOLOW TECHNICZNYCH DLA ZAINTERESOWANYCH:
1) PRZYKLAD ZAPISU BOB'a (pierwsza czacha widoczna w demie)
;x,y na mapie
dc.w 14*TILEW,8*TILE_H
;grafika boba poruszajacego sie w lewo, w prawo
dc.l mob1_left,mob1_right
;informacja w ktora strone bob idzie (0=lewo)
dc.b 0
;aktualna klatka animacji
dc.b 0
;energia
dc.b 100
dc.b 100 ;sila boba
dc.b 1 ;1=bob sie porusza w prawo
dc.b 0 ;0=bob nie rusza sie w gore ani dol
2) PODPROGRAMY
w momencie, w ktorym gracz naciska strzalke w dol, sprawdzane sa informacje zapisane do tego zdarzenia, obecne mozliwosci to:
TYPE_ITEM EQU 0
TYPE_DUMMY EQU 1
TYPE_PROGRAM EQU 2
ITEM oznacza, ze zaprogramowano polozenie obiektu, dummy oznacza ze program wisi ale jest wylaczony do czasu wlaczenia go innym podprogramem, a type_program oznacza, ze w tym miejscu ma sie wywolac PODPROGRAM.
przyklad zapisu takiej informacji:
;kwiatek
dc.w 5,8 ;tile_x na mapie, tile_y na mapie
dc.b TYPE_ITEM,1 ;rodzaj, ilosc (tutaj lezy 1 przedmiot, ale moze lezec ich np 10 sztuk)
dc.w TILE_EMPTY ;w przypadku wykonania w to miejsce ma sie wstawic TILE_EMPTY
dc.l prog_strzala ;oraz wykonac PODPROGRAM "prog_strzala"
;diam1
dc.w 15,8
dc.b TYPE_ITEM,1
dc.w TILE_EMPTY
dc.l 0
;
;nagrobek
dc.w 20,8
dc.b TYPE_PROGRAM,255
dc.w 0
dc.l prog_podpowiedz2
;
;drzwi1_a
dc.w 39,8
dc.b TYPE_PROGRAM,255
dc.w 0
dc.l prog_drzwi1
w przypadku wcisniecia fire sprawdzanie sa takie stany (przyklad oprogramowania mapy):
dc.w 10,8,TILE_FLOWER ;tile x mapy, tile y mapy, gracz ma miec aktualnie w rece TILE_FLOWER
dc.l program_zasadzenie ;wtedy ma sie wykonac PODPROGRAM "program_zasadzenie"
;
dc.w 57,8,TILE_FLOWER
dc.l program_zasadzenie2
;
dc.w 0,0,98 ;0,0 = sprawdz w kazdym miejscu mapy czy w rece ma tile="98" jesli tak to wykonaj podprogram "program_jedz"
dc.l program_jedz
;
dc.w 0,0,TILE_DIAMOND
dc.l program_shoot
i same PODPROGRAMY, moga miec nieograniczona dlugosc i skladac sie z takich komend (dzieki, ktorym naprawde mozemy wykonac nieskonczone ilosci kombinacji):
PROG_END EQU 0
PROG_DRAW EQU 1
PROG_MOVE_BYTE EQU 2
PROG_MOVE_WORD EQU 3
PROG_MOVE_LONG EQU 4
PROG_USE_ITEM EQU 5
PROG_SCORE_ADD EQU 6
PROG_MESSAGE EQU 7
PROG_USE_ACT_ITEM EQU 8
PROG_DRAW_ACT EQU 9
PROG_DELAY EQU 10
PROG_SHOOT EQU 11
PROG_LIFE_UP EQU 12
PRZYKLADY:
program_shoot:
dc.w PROG_SHOOT ;strzelaj!
dc.w PROG_END ;koniec
;
program_jedz:
dc.w PROG_USE_ACT_ITEM ;zmniejsz o jeden ilosc aktualnego przedmiotu w rece
dc.w PROG_SCORE_ADD ;dodaj punktow:
dc.l 1 ;jeden
dc.w PROG_LIFE_UP ;dodaj zyc:
dc.w 1 ;jedno
dc.w PROG_END ;koniec
;
program_zasadzenie:
dc.w PROG_USE_ACT_ITEM ;uzyj item
dc.w PROG_SCORE_ADD ;dodaj 1 punkt
dc.l 1
dc.w PROG_DRAW_ACT,TILE_FLOWER ;narysuj w aktualnej pozycji gracza kwiatek
dc.w PROG_DRAW,14,1,TILE_EMPTY ;usun bloczek z poczycji 14,1
dc.w PROG_DRAW,14,2,TILE_EMPTY
dc.w PROG_DRAW,14,3,TILE_EMPTY
dc.w PROG_DRAW,14,4,TILE_EMPTY
dc.w PROG_DRAW,14,5,TILE_EMPTY
dc.w PROG_DRAW,14,6,TILE_EMPTY
dc.w PROG_DRAW,14,7,TILE_EMPTY
dc.w PROG_DRAW,14,8,TILE_EMPTY
dc.w PROG_DRAW,14,9,TILE_EMPTY
dc.w PROG_DRAW,10,6,TILE_EMPTY ;usun bloczek (tutaj jest strzalka) z pozycji 10,6
dc.w PROG_END
;
prog_drzwi1:
dc.w PROG_MOVE_WORD ;wstaw wartosc o dlugosci dwoch bajtow
dc.l player_x ;w adres "player_x"
dc.w 13*16-8 ;70 (czyli nic innego jak przenies gracza na pozycje 70)
dc.w PROG_MOVE_WORD ;i podobnie przeniesienie pozycji gracza w y
dc.l player_y
dc.w 48
dc.w PROG_DELAY ;poczekaj ulamek sekundy
dc.w PROG_END ;koniec
I OSTATECZNIE GRA (DEMO!!!):
http://mega.szajb.us/juenizer/exe.juen01
Ostatnia aktualizacja: 05.10.2014 15:51:43 przez juen