[#301] Re: Ami Robbo 2

@tukinem, post #300

Ladna gra, choc pierwsze plansze pasuja bardziej do jakiegos zakutego w zbroje rycerza, niz do robota.
Gratulacje. Masz talent.
1
[#302] Re: Ami Robbo 2

@Don_Adan, post #301

Od tamtej pory nic nowego nie dodałem. Grafiki Selur robił i to on nadał grze taki wygląd. Eightbm również zrobił super muzykę i sample, chciał więcej, ale to by spowodowało wyższe wymagania gry. Jeśli kod gry urośnie o kilka kilobajtów, automatycznie gra nie wystartuje już na gołej A600.

Myślę, że wszystko jest dopracowane. Zostało jeszcze przetestować edytor DLC, czy nie ma jakichś bubli w nim.
[#303] Re: Ami Robbo 2

@tukinem, post #302

A w BB2 nie da sie tak napisac, zeby zostal wczytany dodatkowy plik exe z extra kodem, tylko jesli sa odpowiednie warunki spelnione, np 2 MB RAM?
Czyli tak zwany opcjonalny kod, nie bedacy w glownym pliku.
Np. player do modow Protrackera, doczytywany tylko wtedy, gdy jest odpowiednia ilosc wolnej pamieci.

Ostatnia aktualizacja: 04.11.2024 19:38:09 przez Don_Adan
[#304] Re: Ami Robbo 2

@Don_Adan, post #303

Chyba nie.

Kiedyś próbowałem tak napisać sobie wypakowywarkę do LHA i skończyło się właśnie na szukaniu takiej funkcji. Może któraś z systemowych bibliotek jest w stanie to wykonać.
[#305] Re: Ami Robbo 2

@tukinem, post #304

A nie da sie zrobic czegos takiego:
Zamiast

jsr InitPlayer

uzyc

move.l Player,D0
 beq.b skip
 move.l D0,A0
 jsr (A0) ;  pod A0 bylby InitPlayer
skip


Ostatnia aktualizacja: 04.11.2024 21:19:45 przez Don_Adan
[#306] Re: Ami Robbo 2

@Don_Adan, post #305

Czyli osobny program odtwarzający? Ten program musiałby jednocześnie być cały czas uruchomiony bo on by alokował pamięć dla kolejnego modułu, a w razie czego go odtwarzał. Każdy program w BB który alokuje pamięć i się zakończy automatycznie czyści tą pamieć. Gdybym na koniec takiego programu nie zatrzymał muzyki, to Amiga się zawiesi przez brak danych modułu w pamięci Chip. Poza tym JSR miałby skoczyć do skompilowanego pliku exe? Chyba to tak nie zadziała. ASMOne tak skacze do bibliotek wczytywanych do kodu chyba, ale tu byłby wczytany plik uruchamialny, a potem poprzez RTS w tamtym programie byłby albo wyłączany albo zostawałyby śmieci w pamięci w postaci nie wyczyszczonej pamięci po module.
[#307] Re: Ami Robbo 2

@tukinem, post #306

jsr mozesz skoczyc wszedzie, gdzie chcesz.
do wczytanego pliku exe tez.
tylko najczesciej sie to ulatwia odpowiednio tworzac takiego exeka, i dodajac na poczatku

bra.w InitPlay
bra.w InitMod
bra.w Play
bra.w StopMusic
bra.w EndPlay

i asemblujac.

Wystarczy pododawac
move.l Player, D0
beq.b skip
move.l d0,A0
jsr 8(a0)

move.l Module,D0
beq.b nomusic

nomusic
itp

Ogolnie nie musisz niczego zatrzymywac tylko przeskakujesz dalej (czyszczac jakis pointer) jak pointer nie jest zerem to nie ma przeskakiwania.

Mozna tez zrobic wersje binarna (PC relative, bez relokow) takiego playera. Czyli wczytujesz go w dowolne wolne miejsce w pamieci.
[#308] Re: Ami Robbo 2

@Don_Adan, post #307

Raczej taki trik nie przejdzie. Rozumuem, że mam zaalokować pamięć i wczytać tam plik exe, a z kodu głównego mam zrobić JSR do etykiety, która znajduje się w tym pliku exe? To nie przejdzie na pewno. Jak znam BB, to przy kompilacji wywali mi brak etykiety w kodzie głównym dla skoku. Można jedynie dodać inny plik bb2 poprzez Include lub XInclude, ale to wyjdzie na jedno bo główny plik exe się zwiększy o kod dodany z zewnętrznego pliku.
[#309] Re: Ami Robbo 2

@tukinem, post #308

Raczej taki trik nie przejdzie

oczywiście że przejdzie. robiłem tak w jednym demie, że miałem jakiś nietypowy depacker. zassemblowałem go w asm-one do pliku .o a w kodzie BB zrobiłem

depaker:
IncBin "plik.o"

a potem tylko JSR depaker
1
[#310] Re: Ami Robbo 2

@tukinem, post #300

Na 2:10 ciekawy obrazek przedstawiający teleport
[#311] Re: Ami Robbo 2

@tukinem, post #308

Dlaczego ma nie przejsc?
Robisz po prostu np. jsr 8(A0)

Nie ma tu zadnej etykiety tylko czysty kod asemblera. Oczywiscie mozna to zamienic na wersje z etykieta.

Na przykladzie c64 portal to by bylo:

"depaker:
IncBin "plik.o"

a potem tylko JSR depaker+8"

Tylko incbin to dolacza ten plik do Twojego exeka, a tutaj chodzi, zeby player byl na zewnatrz.
Wiec musisz uzyc jakiejs procedury z BB2, ktora wczytuje podany z nazwy plik do dowolnej pamieci (ale z alokacja pamieci na ten plik) i zwraca adres pod ktory ten plik zostal wczytany.

Kazda instrukcja " bra.w" to sa 4 bajty, musisz po prostu policzyc, gdzie chcesz skoczyc.

Jedynie nie wiem czy potrafisz wczytac plik executable (czyli object .o) w BB2, bo to nie jest to samo co plik binarny.
[#312] Re: Ami Robbo 2

@Don_Adan, post #311

Tylko incbin to dolacza ten plik do Twojego exeka, a tutaj chodzi, zeby player byl na zewnatrz.
Wiec musisz uzyc jakiejs procedury z BB2

można użyć komend Bank do allokowania obszarów panięci. Ja powyżej napisałem w uproszczeniu
A z tym +8 to chyba nie potrzebne. Można skompilować kod asm do takiego "raw" nie pamiętam jak się to nazywa fachowo, gdzie nie maż żadnych headerów i hunków. ja to sobie potem asemblowałem VASMem na mac'u żeby nie bawić się Asm-one'em
Pytanie jest inne jak zrobić kod w BB2 który potem można będzie wczytywać i do niego skakać? Czyli jak sobie zrobić takie .o w BB2. Niby są jakieś "residenty" ale nigdy z tego nie korzystałem. na EAB powinni wiedzieć.

Ostatnia aktualizacja: 05.11.2024 13:39:19 przez c64portal
[#313] Re: Ami Robbo 2

@Don_Adan, post #303

Ale kod aż tak dużo miejsca nie zajmuje. Raczej dane "ważą". W zależności od ilości dostępnej pamięci wczytuje się więcej lub mniej grafiki, poziom w trakcie grania doczytuje się albo nie. Często oszczędza się nie wczytując muzyki (np. The Settlers na 1MB) albo wczytując jakąś mniejszą wersję, mniej dźwięków. A sam kod to są pomijalne wartości w porównaniu z danymi i zwykle ten sam kod i tak obsługuje wszystkie poziomy. No chyba, że ktoś koduje osobno każdy poziom. szeroki uśmiech No ale wtedy autor powinien przemyśleć architekturę, bo tego tak się raczej nie robi jeżeli poziomy nie są zupełnie odrębnymi mini-grami o zupełnie innej mechanice.
Myślę, że kod to nie jest miejsce na oszczędności, bo za wiele się nie oszczędzi.

Ostatnia aktualizacja: 05.11.2024 13:32:11 przez MDW
[#314] Re: Ami Robbo 2

@MDW, post #313

Myślę, że kod to nie jest miejsce na oszczędności, bo za wiele się nie oszczędzi

w pełni zgoda.
dla przykładu cały kod Scorpion Engine, taki można by powiedzieć runtime to 200kb!

co do assetów to trzeba od razu założyć że wszystko będzie kompresowane. ale zakładam że tutaj tukienm tak robi.
[#315] Re: Ami Robbo 2

@MDW, post #313

Przeczytaj:

link

"Jeśli kod gry urośnie o kilka kilobajtów, automatycznie gra nie wystartuje już na gołej A600."

Player ProTrackera to zaleznie od wersji od 4 do 7 kB o ile pamietam.
Wiec bez niego mialby wiecej miejsca na inne rzeczy.
[#316] Re: Ami Robbo 2

@c64portal, post #309

oczywiście że przejdzie. robiłem tak w jednym demie, że miałem jakiś nietypowy depacker. zassemblowałem go w asm-one do pliku .o a w kodzie BB zrobiłem

depaker:
IncBin "plik.o"

a potem tylko JSR depaker


No takie coś nie przejdzie. Chodzi o to, żeby wczytać osobny plik exe, a IncBin automatycznie zwiększy główny plik uruchamialny gry. Była mowa o ewentualnym dograniu zewnętrznego pliku exe bądź kodu. IncBin nie da się umieścić w "IF"ie.

Większość chip RAM pożerają bitplany o rozmiarze 512x512 w 5 bitplanach. Aby gra działała na A600 1 MB Chip RAM pilnuję, aby plik exe nie przekroczył 100 kB bo jeśli urośnie o te kilka kB, to automatycznie gra się będzie wieszać na gołej A600 bez fastu. O to tutaj chodzi, że sumarycznie grafika+dźwięki+muzyka+dane+EXE zapchają cały 1 MB chip ramu.

Z resztą i tak nie ma miejsca na muzykę bo dyskietka jest pełna. Zostało 64 kB miejsca

Ostatnia aktualizacja: 05.11.2024 16:43:55 przez tukinem
[#317] Re: Ami Robbo 2

@MDW, post #313

@MDW
Myślę, że kod to nie jest miejsce na oszczędności, bo za wiele się nie oszczędzi.

Ja myślę, że to zależy jak kto pisze taki kod. To nie problem pisać spagethi kod jak w latach 70 ubiegłego wieku.

@c64portal
dla przykładu cały kod Scorpion Engine, taki można by powiedzieć runtime to 200kb!

Dla mnie to za grubo, Dla A500 z 0.5MB CHIP to prawie połowa zasobów.

Pamiętam że w jednej grze (pisanej w asm, żeby nie było) to relokacje zajmowały 10 kilobajtów. Autor wymyślił obejście, sam napisał procedurę relokacji i skompilował program pod jakiś tam adres $ff100000 i zapisał jako binarny. Plik zajął jakieś 70 kb zamiast ponad 80 kb.

Rozszerzył bym to co napisał MDW: Kod to nie jest miejsce na oszczędności i nie jest to miejsce na bezpodstawne rozwlekanie kodu.
[#318] Re: Ami Robbo 2

@asman, post #317

Amiga z 0,5 MB Ram to raczej w latach 80'ych.
Wszystkie gry po 90' wymagaly juz 1MB wiec nalezy przyjac amigowy standard jako 1MB.
[#319] Re: Ami Robbo 2

@tukinem, post #304

Może któraś z systemowych bibliotek jest w stanie to wykonać.
Tak, funkcja LoadSeg() (albo NewLoadSeg(), ale kick 2.0+) z exec.library. Ładuje plik wykonywalny do pamięci rozmieszczając wszystkie sekcje gdzie trzeba i robiąc relokacje. Gdy kod jest już niepotrzebny, robi się UnLoadSeg().
[#320] Re: Ami Robbo 2

@Krashan, post #319

Faktycznie, jest wykrywalna ładnie:


No, ale kick 2.0+ odpada, bo gra musi działać na kicku 1.3/1.2 także. Dlatego też zrezygnowałem z requestera ASL od wybierania katalogu z DLC, a użyłem zwykłego filerequestera, którym wybieramy dowolny plik w katalogu z DLC do wczytania dodatkowych poziomów.

Tam wcześniej napisałem, że limit pliku exe to 100 kB. Przepraszam za błąd, ale już mi się gry mylą. 101 kB było dla GoGoGo. Tu plik exe to 300 kB.

Ostatnia aktualizacja: 05.11.2024 17:38:24 przez tukinem
[#321] Re: Ami Robbo 2

@tukinem, post #320

No, ale kick 2.0+ odpada
Chyba źle zrozumiałeś. LoadSeg() jest w systemie od zawsze, bo właśnie nią system ładuje do pamięci programy. Natomiast NewLoadSeg() jest wygodniejsza trochę w użyciu i jest dostępna od kicstartu v36. Chcąc więc pisać pod kick 1.2+, spokojnie używasz tej pierwszej.

Ostatnia aktualizacja: 05.11.2024 18:36:58 przez Krashan
[#322] Re: Ami Robbo 2

@tukinem, post #320

dlaczego w 21 wieku zaniżamy standardy ? minimum 3.1 10mb RAM ,HD i RTG 68030
[#323] Re: Ami Robbo 2

@ritzu, post #322

No właśnie dlatego, że wielu uważa, że jeśli gra jest na OCS/ECS, to tylko dla 0,5 MB chip RAM + 0,5 MB slow RAM z kickstartem 1.3.
[#324] Re: Ami Robbo 2

@Krashan, post #321

No nie wiem.
Jak sprawdzalem to NewLoadSeg nie istnieje.
To jest to samo co LoadSeg.
No chyba, ze juz mam duza skleroze, i cos pomieszalem.
Ale chyba jeszcze pamietam troche moja przerobke dos.library.
[#325] Re: Ami Robbo 2

@Don_Adan, post #324

Istnieje i BB go może używać:
[#326] Re: Ami Robbo 2

@tukinem, post #320

Uzywalem tego do niektorych playerow, wiec dziala na kazdym kicku.
Moze Ci sie przydac. Ale trzeba umiec uzywac to co zwraca, bo to chyba BCPL zwraca, a nie adres.
Ale moge juz zle pamietac.
[#327] Re: Ami Robbo 2

@tukinem, post #325

Ze nazwa istnieje to nie znaczy, ze jako inna funkcja istnieje.
Commodore planowal moze cos ekstra dodac.
Ale albo nie dodal tego, albo dodal to do LoadSeg.
Wiec ogolnie to jest zbedne, bodaj 4 bajty zuzywa w dos.library.
1
[#328] Re: Ami Robbo 2

@Don_Adan, post #327

Commodore planowal moze cos ekstra dodac.
Tak, po to jest taglista jako dodatkowy argument, ale... "no tags are currently defined" i to się nie zmieniło do systemu 3.2 włącznie. Więc poprawiam się, nie ma sensu używać NewLoadSeg(), bo ona i tak nic nie robi oprócz wywołania LoadSeg().

Tak czy owak, jest to sposób na dynamiczne załadowanie jakiegoś programu z poziomu innego programu. Potem wystarczy z seglisty wygrzebać początek sekcji kodu i skoczyć tam. Nie trzeba się przejmować relokacjami, sekcjami, to wszystko jest ogarnięte z automatu.
[#329] Re: Ami Robbo 2

@tukinem, post #323

dramat, ale wszyscy chcą quake 2 na a500 ? no dzisiaj wszystkie nowe produkcje to powinny być na 68060 minimum i AGA, a jak kogoś nie stać to ma problem, w świecie PC czy apple nikt się nie cycka, a potem jest jak jest, stajnia dała AGA a tu ciagle 4mHz i ECS po 40 latach i kickstart 0.5 najlepiej

Ostatnia aktualizacja: 05.11.2024 21:46:53 przez ritzu

Ostatnia aktualizacja: 05.11.2024 21:50:22 przez ritzu

Ostatnia aktualizacja: 05.11.2024 21:52:15 przez ritzu
[#330] Re: Ami Robbo 2

@ritzu, post #329

Gdzie ty slyszales o Quake 2 na A500?
Wszyscy chca dobre gry na Amige.
Widze, ze niezbyt dobrze znasz sie na Amigach.
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