[#271] Re: Electroman dla Amigi

@tukinem, post #270

Mogłem od razu wrzucić fotki.




Myślałem, że ta mapa na ścianie to fejk, ale jednak nie. Tam rzeczywiście pokazane są ukryte części. Ja zebrałem je w kolejności - D,C i chciałem wrócić do lokalizacji A. Z mapy wynika, że jest to niemożliwe i trzeba zacząć pewnie lev3 on początku. Czyli to nie Twój błąd, tylko tak ma być wg oryginału.




Jak idą prace w kierunku lev 4?

Ostatnia aktualizacja: 21.10.2023 17:42:32 przez AD99
1
[#272] Re: Electroman dla Amigi

@AD99, post #271

Aha ok.

Jak prace? Wzorowo nie chcę się chwalić, ale jeśli chcesz być beta-testerem to Ci mogę udostępniać wcześniejsze wersje zanim ru opublikuję. Widzę, że lubisz sprawdzać czy level da się przejść, więc przydałbyś mi się przy tworzeniu gry bo kolejne levele są bardziej skomplikowane a ja nie mam czasu grać, tylko piszę dalej, a jestem daleko.

Ogólnie, to zmienione jest sterowanie przy opadaniu, bo dalej w grze to wymagało zmian. Niewiele ale musiałem. Chodzi o to że w oryginale zeskakując spadaliśmy w prawo w dół na kolejną rampę a u mnie przeskakiwał ją. Teraz jest bardzo dobrze. Dzisiaj mam dzień bez komputera, ale jutro lub od poniedziałku wracam do boju.

Ostatnia aktualizacja: 21.10.2023 18:23:07 przez tukinem
1
[#273] Re: Electroman dla Amigi

@tukinem, post #272

jeśli chcesz być beta-testerem to Ci mogę udostępniać wcześniejsze wersje zanim ru opublikuję
, no, zgłaszam sięOK. super

Ostatnia aktualizacja: 21.10.2023 18:54:04 przez AD99
[#274] Re: Electroman dla Amigi

@tukinem, post #272

Lev. 3 zaliczonyok, racja


[#275] Re: Electroman dla Amigi

@AD99, post #274

a ja mam problem z ostatnią wersją, jak odpalę wcześniejszą "dyskietkową" jest ok ale na najnowszej co jakiś czas ekran "mruga" a po jakimś czasie gra się wiesza - 2x mi się przytrafiło w lv1 koło 3 miejsca resp. tam gdzie są platformy na których trzeba przeskakiwać roboty

Mam małą sugestię, może dodawaj w nazwie nr wersji szeroki uśmiech
[#276] Re: Electroman dla Amigi

@mike100, post #275

Kolejna wersja będzie bez zwiech. Co do migania to najlepiej ustaw cycle exact.
2
[#277] Re: Electroman dla Amigi

@mike100, post #275

Gra zaktualizowana.

Nie będę wprowadzać numerów wersji, po prostu wystarczy sobie wejść w katalogi Lx i będzie wiadomo do którego levelu jest gra zrobiona :)

Tutaj link dla przypomnienia, a teraz mały dodatek:

podczas rozgrywki wciskając LAgmia+RAmiga+NR przeskakujemy do konkretnego poziomu. Ta opcja będzie na czas testów gry. Nie radzę próbować wklepywać LAmiga+RAmiga+5 (6,7,8) bo się zawiesi z braku danych, bo tych poziomów narazie nie ma

Teraz kilka screenów z 4 levelu:



4
[#278] Re: Electroman dla Amigi

@tukinem, post #277

Zrobiłem gameplay:

Gra się dobrze, ale wydaje mi się, że level jest nie do przejścia w pewnym momencie - na końcu, zobacz przed następnym checkpointem robocik bardzo szybko biegnie w kierunku naszego bohatera. Nie sposób go uniknąć, przeskoczyć (a to chyba trzeba zrobić).
2
[#279] Re: Electroman dla Amigi

@zzielinski, post #278

Moze ten robocik zawraca? Albo musisz go czyms ustrzelic?
1
[#280] Re: Electroman dla Amigi

@zzielinski, post #278

Rozumiem. Poprawię to jutro. Nie mam czadu testować dlatego dobrze że ktoś wynajduje błędy
[#281] Re: Electroman dla Amigi

@Don_Adan, post #279

Nie mam czym go ustrzelić, trzeba go przeskoczyć. Dopiero później, po dostaniu się do checkpointa - jest możliwość zebrania energii i jest możliwość strzelania.
1
[#282] Re: Electroman dla Amigi

@zzielinski, post #281

Ale moze wystarczy zaczekac az podejdzie, wyjsc z komnaty i wrocic za robocikiem.
[#283] Re: Electroman dla Amigi

@Don_Adan, post #282

Nie, bo po wejściu do komnaty od nowa będzie szedł stamtąd. Jutro to poprawię. Wypuszczę go w drugą stronę.
[#284] Re: Electroman dla Amigi

@zzielinski, post #281

Poprawiłem pająka. Teraz po wejściu do komnaty trzeba iść za nim a następnie przeskoczyć tam gdzie już mamy miejsce na podskoczenie. Pewnie są jeszcze miejsca gdzie trzeba będzie coś poprawić, ale to wyjdzie w praniu.
[#285] Re: Electroman dla Amigi

@tukinem, post #284

Oto rozgrywka z nowej wersji Electromana. Pod koniec gry wpadłem w miejsce nie do wyjścia...
1
[#286] Re: Electroman dla Amigi

@zzielinski, post #285

Haha wiem :) brakuje tam tej zgniatarki co nas zabija :) musiałem zapomnieć o jej dodaniu bo ona jest bardzo wysoko w komnacie a skupiłem się na głównej części :) Czyli już level 4 jest prawie cały do przejścia. Gratuluję zapału. Mam nadzieję, że gra się nieźle :)
[#287] Re: Electroman dla Amigi

@tukinem, post #286

Właśnie sobie pobrałem na Amigę i gram w Twojego Electromana.

Bardzo wciągająca i fajna gra. OK

Posiadam Amigę 1200 z Blizzardem 1230-IV/50MHz.

Z uwag: Przydałaby się drobna instrukcja co jaki przedmiot/obiekt oznacza (np. amunicja, teleport itp.) bo na starcie nie jest to oczywiste.

Pytanie techniczne: Czy używasz podwójnego buforowania? Czasami kolory migoczą (bitplany), tak się dzieje bo wyświetlane są bitplany zanim wszystkie zostaną wypełnione grafiką.

Ogólnie brawo za tak zaawansowaną produkcję. Grywalność stoi na wysokim poziomie. Czekam na recenzje w prasie.

Poziom trudności nie jest niski. Są miejsca trudne do przejścia już na pierwszym poziomie.

Szata graficzna i udźwiękowienie w porządku.

Powodzenia w dalszej pracy.

Edit: Jak doszedłem do jednego check-pointu to moja amunicja zniknęła. A w dalszych komnatach jest mnóstwo robocików. Czy to zamierzone?

P.S. Czy masz ustawione FMODE? Już pisałem, że wyższe FMODE jest potrzebne tylko w wysokich rozdzielczościach (Hires, Super-Hires) Amigi AGA.

Ostatnia aktualizacja: 29.10.2023 08:59:44 przez Hexmage960
1
[#288] Re: Electroman dla Amigi

@Hexmage960, post #287

Dzięki za przetestowanie.

Racja, ekran lubi migać i jeszcze nie doszedłem do tego, dlaczego, ale podejrzewam, że właśnie przez bardzo dużo blitowania, chociaż są komnaty, w których nie ma aż tyle zmieniającej się grafiki, a wtedy bardziej miga. Problemem może być albo wiele punktów kolizyjnych i ich wyliczanie, albo samo odtwarzanie dźwięku chodzenia, bo gdy wyłączyłem go, to automatycznie migotanie mi znikło. Podejrzewam, że to przez jednoczesne odliczanie zmiennej SOUNDTIME, która mi jest pomocna podczas dźwięków, aby dźwięki nie odgrywały się ciągle, a tylko podczas wyzerowania jej.

Oczywiście używam FMODE 3 i podwójnego buforowania. Bez tego blitter nie wyświetliłby tyle grafik jednocześnie. Próby uruchomienia bez FMODE okazały się fiaskiem, bo naprawdę wtedy musiałbym ponad połowę obiektów z komnat pousuwać. Może przez to, że jednak tu grafiki są rozmiarów 24x24 pix, przez co praktycznie to działa tak, jakby boby były rozmiarów 32x24 pix, a przy większej ilości to naprawdę dużo, nawet dla AGA, dlatego użyłem FMODE 3. Póki co, ogranicza mi to tylko używanie sprajtów, ale nie zamierzam ich używać w grze. Będę walczyć z tym miganiem ekranu. Szkoda, że na realnej Amidze też miga. Może właśnie to przez 030? Gdy będę mieć chwilę to przetestuję nową wersję na A1200 z fastem. Wydaje mi się, że na 020 nie miałem migotania, ale nowa wersja ma już bardziej rozbudowany kod.

Co do instrukcji, to na pewno stworzę, jak tylko dokończę poziomy, a mam jeszcze dużo pracy przy tym.
[#289] Re: Electroman dla Amigi

@tukinem, post #288

Hej, a to znikanie amunicji z ekwipunku po osiągnięciu check-pointa to błąd? Póki co zakończyłem grę koło tych lokacji z niebieskimi ścianami na pierwszym poziomie.

Oczywiście używam FMODE 3 i podwójnego buforowania. Bez tego blitter nie wyświetliłby tyle grafik jednocześnie. Próby uruchomienia bez FMODE okazały się fiaskiem, bo naprawdę wtedy musiałbym ponad połowę obiektów z komnat pousuwać.

Ciekawe. Z mojego doświadczenia Blitter w AGA radzi sobie z wieloma obiektami w Lores 256 kolorów.

Z tego co wiem to wymagane dosunięcie 64-bit i ograniczenie na duszki to obowiązuje dopiero od Super-Hires od 32 kolorów.

Ale dobrze, zostaw tę opcję włączoną, skoro jest potrzebna.

Co do migotania kolorów, to faktycznie wygląda to dość dziwnie - skoro używasz podwójnego buforowania. Nie znam się na Blitz Basicu, ale może znajdziesz pomoc na jakimś dedykowanym mu forum.
[#290] Re: Electroman dla Amigi

@Hexmage960, post #289

Co do znikania amunicji przy zdobyciu bazy (checkpointa) - tak ma być

Jeśli chodzi o FMODE, to identycznie używałem pisząc Pinball Dreams 2 i tam bez FMODE nigdy nie uzyskałbym płynności. Akurat tam nie było tyle obiektów na ekranie, bo była tylko piłka, łapki i ewentualnie pojedyncze blity. Tu niestety jest sporo, bo każdy poruszający się obiekt to bob, wraz z strzałami (naszymi i przeciwników). Obiekty stojące w miejscu, a jedynie animujące się, są blitowane bez użycia bufora. Najbardziej prędkość jest zużywana w komnatach, gdzie jest przednia warstwa zasłaniająca naszą postać (ten niby przedni playfield). Tam grafiki są pobierane do banku shape'ów i blitowane na naszego boba oraz jego strzały, czyli mamy tam 2xGetaShape i 2xBlit dodatkowo. Oczywiście samo GetaShape nie używam co ramkę, a co 3, bo co 3 ramki zmienia się ruch naszej postaci, za to BBlit naszego boba i jego strzałów wraz z Blitem grafik zasłaniających jest co ramkę, no bo grafiki zasłaniają nasze boby.
1
[#291] Re: Electroman dla Amigi

@tukinem, post #286



No i level 4 zaliczony. Przyjemnie się przechodziło. Nie zauważyłem błędów, poza brakiem tej zgniatarki. Ekran czasem mruga, ale ja gram obecnie na emu.
[#292] Re: Electroman dla Amigi

@AD99, post #291



Dam znać, jak skompiluję nowy kod i wrzucę, bo prawdopodobnie miganie będzie mniejsze, lub go wcale nie będzie już. Nie wiem, czy to powodowało, ale prawdopodbnie nadmiar IFów w sterowaniu. Lekko uporządkowałem pobieranie shape'ów, dzięki czemu nie ma tyle sprawdzania zmiennych oraz nie ma tylu przeskoków z jednej bitmapy do innej. Aby pobrać wycinek grafiki, trzeba było dać komendę Use Bitmap 2. Ona jest niewidoczna, a obrazuje tylko przednią warstwę grafiki. Wcześniej 2 razy skakałem do tej bitmapy w różnych częściach kodu. Teraz w jednej ramce są pobierane oba wycinki i później bitmapa jest nietykana.



____________

Gotowe. Poprawiona wersja ze zgniatarką już jest oraz proszę o przetestowanie na realnych Amisiach, czy dalej występuje migotanie ekranu.

Ostatnia aktualizacja: 29.10.2023 21:18:50 przez tukinem
2
[#293] Re: Electroman dla Amigi

@tukinem, post #292

@tukinem
Czytam z uwagą twój wątek bo sam coś tam dłubię od wielu miesięcy w BB.
staram się zrozumieć jak robisz kolizje skoro piszesz że dla każdego levelu programujesz kolizje. możesz opisać co to za metoda?
Pytam bez uszczypliwości, bo ja u siebie robię tak, że każdy klocek ma atrybut typu podłoga, albo nie podłoga. i odczytuję pozycję mojego sprite'a na mapie i sprawdzam jaki ma klocek po nogami, ale może jest jakaś lepsza metoda? Bo ta nie zawsze jest dokładna.
[#294] Re: Electroman dla Amigi

@c64portal, post #293

Tutaj też mam taki "atrybut", chociaż to inaczej zrobiłem bo to pierwsza gra, w której odczytuję kolizje po kaflach.

W grze wybrałem 3 rodzaje kafli. 0 - tło / 1 - ściana / 2 - posadzka. Tablica kafli map() jest w typie bajtu, czyli bez atrybutów w NEWTYPE. Ta tablica jest dla całego levelu. Druga też w typie bajtu jest tablica mapup(), która zawiera kafle pierwszej warstwy grafiki (przedni playfield jakby). Wczytując komnatę mam osobną tablicę mc() w typie bajtu, która po numerach kafli sprawdza czy ma nadać danemu kaflowi w komnacie właśnie numer 0-2. Następnie mam tablicę c.b(), która przechowuje numery kolizji z kaflami naszego bohatera, a tablica ma chyba 10 pozycji jak dobrze pamiętam. Jest aktualizowana co 3 ramki, tak jak jest zmieniany ruch naszego bohatera. Oczywiście posłuchałem tu forumowiczów i nie używam dzielenia tylko tablicy dzielenie(), która zawiera gotowe wyniki dzielenia liczb 0-320 przez 24.

Kod oczywiście nie jest żadną tajemnicą, więc Ci to wrzucam jak wygląda calutkie sterowanie:
.MAN
;-------------- ODCZYT KOLIZJI
If G\x>=0 AND G\x<=288
  If G\y>0
  c(0) = mc(dzielenie(G\x)+3   , dzielenie(G\y+3)+3)
  c(1) = mc(dzielenie(G\x+23)+3, dzielenie(G\y+3)+3)
  Else
  c(0) = mc(dzielenie(G\x)+3   , 3)
  c(1) = mc(dzielenie(G\x+23)+3, 3)
  EndIf
  If G\y>3
  c(2) = mc(dzielenie(G\x+4)+3 , dzielenie(G\y)+3)
  c(3) = mc(dzielenie(G\x+19)+3, dzielenie(G\y)+3)
  EndIf
  If G\y>-14
  c(4) = mc(dzielenie(G\x)+3   , dzielenie(G\y+16)+3)
  c(5) = mc(dzielenie(G\x+23)+3, dzielenie(G\y+16)+3)
  Else
  c(4) = mc(dzielenie(G\x)+3   , 3)
  c(5) = mc(dzielenie(G\x+23)+3, 3)
  EndIf
  If G\y>-41
  c(6) = mc(dzielenie(G\x)+3,    dzielenie(G\y+41)+3)
  c(7) = mc(dzielenie(G\x+23)+3, dzielenie(G\y+41)+3)
  Else
  c(6) = mc(dzielenie(G\x)+3   , 3)
  c(7) = mc(dzielenie(G\x+23)+3, 3)
  EndIf
  If G\y>-42
  c(8) = mc(dzielenie(G\x+8)+3,  dzielenie(G\y+42)+3)
  c(9) = mc(dzielenie(G\x+13)+3, dzielenie(G\y+42)+3)
  Else
  c(8)=0
  c(9)=0
  EndIf
EndIf
If G\x<0
  If G\y>0
    c(0) = mc(3                , dzielenie(G\y)+3)
  Else
    c(0)=0
  EndIf
  If G\y>-18
    c(4) = mc(3                , dzielenie(G\y+18)+3)
  Else
    c(4)=0
  EndIf
  If G\y>-21
    c(6) = mc(3                , dzielenie(G\y+41)+3)
    c(8) = mc(3                , dzielenie(G\y+42)+3)
    c(9) = mc(3                , dzielenie(G\y+42)+3)
  Else
    c(6) = 0
    c(8) = mc(3                , 3)
    c(9) = mc(3                , 3)
  EndIf

EndIf
If G\x>288
  If G\y>0
    c(1) = mc(15               , dzielenie(G\y)+3)
  Else
    c(1) = 0
  EndIf
  If G\y>-18
    c(5) = mc(15               , dzielenie(G\y+18)+3)
  Else
    c(5) = 0
  EndIf
  If G\y>-21
    c(7) = mc(15               , dzielenie(G\y+41)+3)
    c(8) = mc(15               , dzielenie(G\y+42)+3)
    c(9) = mc(15               , dzielenie(G\y+42)+3)

  Else
    c(7) = 0
    c(8) = mc(15               , 3)
    c(9) = mc(15               , 3)
  EndIf

EndIf



;-------------- BIEGANIE
If SOUNDTIME=0 AND G\b=1
  MTSoundFX #SOUND_STEPS,48
  SOUNDTIME = #TIME_STEPS
EndIf
If G\j=0                       ;czy stoimy na ziemii
  If Peek.b(?JOY) BitTst 2     ;kierunek w lewo
    If G\k=0
      If G\b<=1 Then G\b=4     ; wlaczenie animacji obracania sie
    Else                       ;kierunek w prawo
      G\b=1
      G\k=1
    EndIf
  EndIf
  If Peek.b(?JOY) BitTst 3     ;to samo w druga strone
    If G\k=1
      If G\b<=1 Then G\b=4
    Else
      G\b=1
      G\k=0
    EndIf
  EndIf
  If Peek.b(?JOY) BitTst 0=0 AND Peek.b(?JOY) BitTst 2=0 AND Peek.b(?JOY) BitTst 3=0 AND G\b=1 Then G\b=0
  Select G\b
    Case 0                     ;stoimy w miejscu
      G\a=0
    Case 1                     ;zwykly bieg
      If G\a<13 AND G\a>=4 Then G\a +1 Else G\a=4
      If G\k=0 AND c(7)<>1 AND c(1)<>1 Then G\x+4
      If G\k=1 AND c(6)<>1 AND c(0)<>1 Then G\x-4
    Case 2                     ;trzecia klatka obrotu
      G\k = 1 - G\k
      G\a=0
      G\b-1
    Case 3                     ;druga klatka obrotu
      G\a=2
      G\b-1
    Case 4                     ;pierwsza klatka obrotu
      G\a=1
      G\b-1
  End Select
EndIf

;-------------- SKAKANIE
If G\j>0 AND Peek.b(?JUMP)>0
  If Peek.b(?JUMP)=11 Then G\a=3 Else G\a=4

  G\y+Peek.b(?JUMPMOVE+Peek.b(?JUMP))

  ; SKOK W LEWO
  If G\j=1
    If c(6)<>1 AND c(4)<>1 AND c(0)<>1
      G\x-4
    Else
      If c(2)=1 Then G\j=2
    EndIf
  EndIf

  ; SKOK W PRAWO
  If G\j=3
    If c(7)<>1 AND c(5)<>1 AND c(1)<>1
      G\x+4
    Else
      If c(3)=1 Then G\j=2
    EndIf
  EndIf

  ; GORNA KOLIZJA
  If c(2)=1 OR c(3)=1
    If G\j=1 Then G\x-4
    If G\j=3 Then G\x+4
    G\j=-G\j
    opad = 0
  EndIf


  SUBQ.b #1,JUMP

  If Peek.b(?JUMP)=0 Then G\j=-G\j
EndIf
If G\j<=0

  ; SPADANIE
  If c(8)=0 AND c(9)=0
    If G\b=1 AND G\j=0
      If G\k=0 Then G\j=-3 : G\x-4
      If G\k=1 Then G\j=-1 : G\x+4
      G\b=0
    EndIf

    MOVE.b #0,JUMP
  Else
    If G\j<0
       G\j=0 : G\a=3 : opad=0
       MTSoundFX #SOUND_JUMP,64
    EndIf
  EndIf
EndIf
; WYKRYCIE WCISNIECIA GORY
If Peek.b(?JOY) BitTst 0 AND G\j=0
  G\j=2
  MOVE.b #JUMPMAX,JUMP
  If Peek.b(?JOY) BitTst 2
    G\j=1
    If G\b<=1 Then G\k=1 Else G\k=1
    G\b=0
  EndIf
  If Peek.b(?JOY) BitTst 3
    G\j=3
    If G\b<=1 Then G\k=0 Else G\k=0
    G\b=0
  EndIf
EndIf

;-------------- SPADANIE
If G\j<0
  G\b=0
  If opad<127 Then opad+1
  G\a=4
  If opad<10 Then G\y-Peek.b(?JUMPMOVE+opad+1) Else G\y+12
  If G\j=-1 AND c(2)<>1
    If c(6)<>1 AND c(4)<>1
      G\x-4
    Else
      G\j=-2
    EndIf
  EndIf
  If G\j=-3 AND c(3)<>1
    If c(7)<>1 AND c(5)<>1
      G\x+4
    Else
      G\j=-2
    EndIf
  EndIf
EndIf

;-------------- WYROWNANIE PO LADOWANIU
If G\j=0 AND G\a=3
  x1 = roomx*13+(G\x)/24 : x2 = roomx*13+(G\x+23)/24
  y1 = roomy*8+(G\y+41)/24 : y2 = roomy*8+(G\y+42)/24

  If map(x1,y1)=map(x1,y2) OR map(x2,y1)=map(x2,y2)
    While G\y MOD 24 <> 6
      G\y-1
    Wend
  EndIf
EndIf

;-------------- STRZELANIE

;-------------- ODCZYT KOLIZJI STRZALU
If s\x>16 AND s\y>0
  Select s\t
    Case 1
      cs(0) = mc(dzielenie(s\x+16-s\k LSL5)+3,dzielenie(s\y+1)+3)
      cs(1) = mc(dzielenie(s\x+16-s\k LSL5)+3,dzielenie(s\y+1)+3)
    Case 2
      cs(0) = mc(dzielenie(s\x+16-s\k LSL5)+3,dzielenie(s\y+1)+3)
      cs(1) = mc(dzielenie(s\x+16-s\k LSL5)+3,dzielenie(s\y+3)+3)
    Case 3
      cs(0) = mc(dzielenie(s\x+16-s\k LSL5)+3,dzielenie(s\y+1)+3)
      cs(1) = mc(dzielenie(s\x+16-s\k LSL5)+3,dzielenie(s\y+14)+3)
    Case 4
      cs(0) = mc(dzielenie(s\x+16-s\k LSL5)+3,dzielenie(s\y+1)+3)
      cs(1) = mc(dzielenie(s\x+16-s\k LSL5)+3,dzielenie(s\y+5)+3)
    Case 5
      cs(0) = mc(dzielenie(s\x+16-s\k LSL5)+3,dzielenie(s\y+6)+3)
      cs(1) = mc(dzielenie(s\x+16-s\k LSL5)+3,dzielenie(s\y+17)+3)
  End Select
Else
  cs(0) = 0
  cs(1) = 0
EndIf

If Peek.b(?JOY) BitTst 4 AND G\ammo>0 AND Peek.b(?FIREKEY)=0
  If s\x<=0 OR s\x>=320
    s\x=G\x+8 - G\k LSL3
    s\k=G\k
    s\t=G\tammo
    Select G\tammo
      Case 1 : s\a=0  : s\y=G\y+21 : s\ymax=3 : MTSoundFX #SOUND_FIRE1,64
      Case 2 : s\a=8  : s\y=G\y+19 : s\ymax=5 : MTSoundFX #SOUND_FIRE2,64
      Case 3 : s\a=10 : s\y=G\y+8  : s\ymax=16 : MTSoundFX #SOUND_FIRE3,64
      Case 4 : s\a=13 : s\y=G\y+17 : s\ymax=7 : MTSoundFX #SOUND_FIRE4,64
      Case 5 : s\a=16 : s\y=G\y+2  : s\ymax=24: MTSoundFX #SOUND_FIRE5,64
    End Select
    G\ammo-1
    Select G\ammo
      Case 0  : G\tammo=0 : JSR AddGUI
      Case 19 : G\tammo=1 : JSR AddGUI
      Case 34 : G\tammo=2 : JSR AddGUI
      Case 49 : G\tammo=3 : JSR AddGUI
      Case 64 : G\tammo=4 : JSR AddGUI
    End Select
    MOVE.b #1,FIREKEY
  EndIf
EndIf

firekey
TST.b FIREKEY : BEQ.b 'koniec
BTST #4,JOY : BNE.b 'koniec : MOVE.b #0,FIREKEY
'koniec

If s\x>-32 AND s\x<320
  If s\k=0 Then s\x+16 Else s\x-16
  Select s\t
    Case 1 : If s\a<7 Then s\a+1 Else s\x=-100 : cs(0)=0 : cs(1)=0
    Case 2 : If s\a<9 Then s\a+1 Else s\a=8
    Case 3 : If s\a<12 Then s\a+1 Else s\a=10
    Case 4 : If s\a<15 Then s\a+1 Else s\a=13
  End Select

Else
  c(0)=0
  c(1)=0
EndIf

If playfield=1 AND G\y>-64
  Use BitMap 2
  GetaShape 299,G\x+64,G\y+64,24,42
  If s\x>-63 AND s\y>-63
    Use BitMap 2
    GetaShape 297,s\x+64,s\y+64,16,s\ymax LSL1
  EndIf

  Use BitMap db
EndIf


If cs(0)=1 OR cs(1)=1
  boom\a = 27
  boom\x = s\x+s\k LSL4+48
  boom\y = s\y+s\ymax LSR1 + 56
  s\x=-100
EndIf

RTS


.MAN_DEATH
CNIF #DEV=0
  Use BitMap 1-db
  For b=0 To 3
    For a=27 To 0 Step -1
      UnBuffer 1-db
      BBlit 1-db,410-(a LSR2),G\x+64,G\y+72
      If SOUNDTIME>0
        SOUNDTIME-1
      Else
        MTSoundFX #SOUND_BOOM,32
        SOUNDTIME = 27
      EndIf
      VWait
    Next
  Next

  G\x=X
  G\y=Y
  G\j=0
  opad=0
  MOVE.b #0,JOY
  G\tammo=0
  G\ammo=0
  roomx=ROOMX
  roomy=ROOMY
  UnBuffer db
  UnBuffer 1-db

  QAMIGA
  If armatygora>0
    BLoad src$+"armatagora.dat",&armatagora(1),armatygora*(SizeOf .enemy)
  EndIf
  If armatydol>0
    BLoad src$+"armatadol.dat",&armatadol(1),armatygdol*(SizeOf .enemy)
  EndIf
  If puchy>0
    BLoad src$+"pucha.dat",&pucha(1),puchy*(SizeOf .enemy)
  EndIf
  If pajaki>0
    BLoad src$+"pajak.dat",&pajak(1),pajaki*(SizeOf .enemy)
  EndIf
  If kafle>0
    BLoad src$+"kafel.dat",&kafel(1),kafle*(SizeOf .enemy)
  EndIf
  If lasery>0
    BLoad src$+"laser.dat",&laser(1),lasery*(SizeOf .enemy)
  EndIf
  If czolgil>0
    BLoad src$+"czolgl.dat",&czolgl(1),czolgil*(SizeOf .enemy)
  EndIf
  If czolgir>0
    BLoad src$+"czolgr.dat",&czolgr(1),czolgir*(SizeOf .enemy)
  EndIf
  If miny>0
    BLoad src$+"mina.dat",&mina(1),miny*(SizeOf .enemy)
  EndIf
  If boboki>0
    BLoad src$+"bobok.dat",&bobok(1),boboki*(SizeOf .enemy)
  EndIf
  If jezdziki>0
    BLoad src$+"jezdzik.dat",&jezdzik(1),jezdziki*(SizeOf .enemy)
  EndIf
  BLITZ

  JSR MakeMap
  MTSoundFX #SOUND_START,64
CELSE
  MOVE.w #$fff,$dff180
CEND
RTS
[#295] Re: Electroman dla Amigi

@tukinem, post #294

hej. dzięki
dobrze wiedzieć że większość rzeczy robimy podobie, w sumie niemal identycznie. też mam 10 elementową tablicę na kolizje ale ja w ogólnie nie używam tablic Dim. robię tak że:

dane:
dc.w 0,0,0,0,0,0,0

a potem do takiej tablicy dostaję się poprzez a.w = peek.w(?dane + i) ale widzę że też tego używasz gdzieniegdzie. wg mnie to jest troche szybsze (tak wynikło z testów które robiłem dla siebie).
co do reszty to logicznie wygląda to u mnie niemal tak samo.

pytanko: z jakiej biblioteki pochodzą funkcję MTSoundFX?
[#296] Re: Electroman dla Amigi

@c64portal, post #295

Tablicę możesz też szybko stworzyć przez:
Dcb.w 7,0  ; 7 to rozmiar bloku zmiennych czyli tablicy / 0 to wartosci


Jak zauważyłeś, to używam bloku przy tablicy JUMPMOVE, która ma wklepane kolejne przesunięcia podczas skakania, zmienna JUMP licząca kolejne ramki skoku, zmienna JUMPKEY od stanu wciśniętego skakania, FRAME, FIREKEY itd. Ogólnie dużo mam bloków zmiennych, a fajnie się ich używa, bo z poziomu asemblera mamy bezpośredni dostęp do nich i nie trzeba używać GetReg i PutReg, ani wskaźników typu &ZMIENNA.

Gdybyś jeszcze chciał coś wiedzieć, to chętnie odpowiem.
[#297] Re: Electroman dla Amigi

@tukinem, post #296

dzięki no to pytanko o tę funkcję z mojego poprzedniego posta?
[#298] Re: Electroman dla Amigi

@c64portal, post #297

Tutaj jest link do wątku o bibliotece.
[#299] Re: Electroman dla Amigi

@tukinem, post #292

Nie lubię tego robić, ale dziś cofnąłem się do levelu 3. Ominąłem fajną przeszkadzajkę, która była w wersji PC, a teraz powróciłem, żeby to naprawić i dodać jednak ten ciekawy efekt :)

Oto fotka:


Trzeba uważać na spadające kamienie z góry. Zastanawiam się, dlaczego w wersji na PC nie zawsze wykrywa nas pod danym kamieniem, ale tu w wersji Amigowej wykrywa bardzo dobrze naszą pozycję. Jak tylko pojawiamy się pod danym kamieniem, to spada na nas. Odwzorowałem identycznie szybkość opadania w stosunku do oryginału (12 pikseli co 3 ramki). Spokojnie można uciec, ale lepiej nie zatrzymywać się jeśli zacznie opadać, a tymbardziej nie próbować się cofnąć, bo samo odwracanie się też powoduje utratę czasu, a kamień spada :)

Celowo ominąłem to kiedyś, bo się trochę obawiałem że zbyt dużo przy tym roboty będzie, ale jednak nie było tak źle. Teraz resztę komnat obstawię tymi kamieniami i będzie w kolejnej aktualizacji gry.
3
[#300] Re: Electroman dla Amigi

@tukinem, post #299

Być może w wersji pc ten kamień reaguje losowo.
1
Na stronie www.PPA.pl, podobnie jak na wielu innych stronach internetowych, wykorzystywane są tzw. cookies (ciasteczka). Służą ona m.in. do tego, aby zalogować się na swoje konto, czy brać udział w ankietach. Ze względu na nowe regulacje prawne jesteśmy zobowiązani do poinformowania Cię o tym w wyraźniejszy niż dotychczas sposób. Dalsze korzystanie z naszej strony bez zmiany ustawień przeglądarki internetowej będzie oznaczać, że zgadzasz się na ich wykorzystywanie.
OK, rozumiem