kategoria: AMOS
[#91] Re: Tworzenie gier

@tukinem, post #90

Ze scrollem w amosie będzie ciężko, bo odrysowywanie całego tła na nowo, albo przesuwanie za pomocą Screen Copy jest powolne. Jakimś rozwiązaniem jest tryb Dual Playfield - ustawiasz dwa ekrany, każdy maksymalnie 8 kolorowy. I wtedy możesz na pierwszym ekranie rysować, a na drugim (w tle) mieć jakiś obrazek i przesuwać ekran z tłem za pomocą Screen Offset.
[#92] Re: Tworzenie gier

@mastaszek, post #91

link
Tu na filmiku bardzo mi sie podoba ten scroller ale to chyba ciezka sprawa by byla takie cos zrobic
[#93] Re: Tworzenie gier

@JacK_Swidnik, post #89

Zgadzam się, szacuneczek dla kolegi- pewnie na początku tych porad mało kto wierzył, że ten kolejny śmiałek zrobi coś więcej niż wyrazi chęć tworzenia.. ok, racja
brawo @tukinem OK
1
[#94] Re: Tworzenie gier

@BULI, post #93

Najtrudniejsze są zawsze pierwsze kroki. Kolega Tukinem też miał obawy. Potem idzie już z górki.
[#95] Re: Tworzenie gier

@Hexmage960, post #94

Dzieki za słowa otuchy i pochwały, lecz zamiast coraz lepiej i łatwiej to idzie coraz trudniej. Platformówkę jest trudniej zrobić niż taką gierkę wykorzystującą tablice. W platformówce świat jest większy od ekranu. Trzeba ustawić ten ogromny świat poza ekranem. Trzeba mieć dużą wyobraźnię, moc pomysłów oraz umieć wytłumaczyć komputerowi w jak najprostszy sposób jak to ma działać. Sokoban został zerżnięty z wersji PC jednak stworzyć coś nowego od podstaw to trzeba zaplanować wszystko po kolei. Ciężka sprawa. A co do Sokobana to jak zrobić zapisywanie leveli do plików? I jak później zrobić żeby program wczytywał te pliki? W notatniku pisać poszczególne levele i zapisywać je do plików?
[#96] Re: Tworzenie gier

@tukinem, post #95

Z tego co przeczytałem edytor plansz masz już zrobiony.

Zapisuj dane w plikach tak jak je masz poukładane w tablicy.

To znaczy: każdy wiersz po kolei.

Ja gdybym miał takie zadanie, to bym zajrzał najpierw do rozdziału "PLIKI" ("FILES" po angielsku) w dowolnym podręczniku do AMOSa.

Następnie zapisał algorytm (czyli przepis na wykonanie zadania programistycznego):

1. Otwierasz plik do zapisu,
2. Zapisujesz kolejne elementy tablicy kafli a: a(0,0), a(0,1), a(0,2), a(0,3), ..., a(0,19), a(1,0), a(1,1), a(1,2)... itd.
3. Po zapisaniu pierwszej linii zapisujesz kolejne (w formie dwóch zagnieżdżonych pętli for).
4. Zamykasz plik.

Możesz też zapisać dodatkowe dane do plików, np. rozmiar planszy jeśli jest zmienny. Pamiętaj, by tzw. protokół (kolejność i typ danych) był jasny, żebyś mógł później bez problemu dane wczytać.

Świetnie ująłeś zagadnienia związane z pisaniem gier - tak jakbyś miał bardzo duże doświadczenie. Musisz właśnie "wytłumaczyć" komputerowi jak ma działać.

Ja podchodzę do sprawy bardzo oszczędnie. Pamiętaj tez o przykładach. Pełną, świetną platformówkę w AMOSie masz na dysku Productivity 2.

Ostatnia aktualizacja: 19.07.2021 22:46:59 przez Hexmage960
[#97] Re: Tworzenie gier

@tukinem, post #95

Mam takie pytanie natury egzystencjonalnej skoro masz ciśnienie na tworzenie, to czemu wybrałeś Amige?
Przecież dla twórcy materia to tylko przeszkoda a nie treść

Ostatnia aktualizacja: 20.07.2021 00:51:10 przez Aniol

Ostatnia aktualizacja: 20.07.2021 00:51:34 przez Aniol
[#98] Re: Tworzenie gier

@Aniol, post #97

Bo lubie pracować na Amidze. To po prostu hobby. Dla mnie to jakby nie sama chęć programowania a po prostu amigowanie. Trochę ppainta, trochę Amosa, posłuchać modów, włączyć jakąś gierkę lub demo. Ogólnie taka zabawa zresztą tutaj wszyscy wiedzą o co chodzi :) przyjdzie kiedyś też czas na naukę protrackera ale póki co skupiam się na Amosie. Chciałbym stworzyć coś co będzie dla wielu Amigowców.
7
[#99] Re: Tworzenie gier

@mastaszek, post #91

Co robię źle???

Open Out 2,"dane/edytor.dat"
For I=1 To 19 : For J=1 To 16

Input #2,TAB(I,J)

Paste Bob(I-1)*12+45,(J-1)*12+32,TAB(I,J)
Next : Next
Input #2,X,Y,SKRZYNIE



Close 2


ZAPIS:
SKRZYNIE=0
Open Out 2,"dane/edytor.dat"

For I=1 To 19 : For J=1 To 16
If TAB(I,J)=4 Then SKRZYNIE=SKRZYNIE+1
If TAB(I,J)=1 Then X=I : Y=J

Print #2,TAB(I,J)
Next : Next
Print #2,X,Y,SKRZYNIE
Close 2



od "ZAPIS:" jest funkcja do zapisywania planszy z edytora. Później to, co jest na początku to jest odczytywanie pliku. Wyskakuje error przy każdym wczytywaniu. Jeśli jedno wyremuję, to następne również ma błąd. Jest jakiś dobry sposób na zapis stanu tablicy plus 3 zmiennych?
Gdy samą tablicę zapisuję to jeszcze wczyta, lecz gdy dodam te 3 zmienne, to już jest błąd.

Najlepiej, gdybym mógł zapisać cały kod do pliku, później, żeby Amos wczytał z pliku kod i go uruchamiał.
[#100] Re: Tworzenie gier

@tukinem, post #99

Zauważyłem, że wczytując "0" z pliku, program nie może narysować boba. A dziwne, bo normalnie w kodzie rysuje boby z numerem "0" jako puste pola. Problem jest, gdy wczytuje "0" z danych z pliku.
Dodałem przed rysowaniem boba warunek:
IF TAB(I,J)>0 THEN ===> paste bob.
Teraz działa, jednak nie wiem czy mogę dodać następne 3 zmienne, które mi są niezbędne w pliku pomocniczym.
[#101] Re: Tworzenie gier

@tukinem, post #100

Dokładnie :)
usunąłem: Input #2,TAB(I,J) == > dzięki czemu każda wartość w tablicy przyjmie "0" ponieważ ma brak danych. Działa, bo "0" nie jest wczytane z pliku, tylko narzucone przez Amosa. Ale głupio, że zmienna nie może być zapisana jako "0" bo potem się jej nie wczyta do tablicy. A co, jeśli zmienię kolejność wczytywania zmiennych? Podejrzałem plik zapisywany w Amosie i tam są same liczby. Skąd program będzie wiedział o jaką zmienną mi chodzi, skoro zapisane są same dane?
[#102] Re: Tworzenie gier

@tukinem, post #99

Z tego co widzę, to przez pomyłkę użyłeś "OPEN OUT" do wczytania zamiast "OPEN IN".

Z kolei INPUT # do wczytywania i PRINT # do zapisu jest OK.
[#103] Re: Tworzenie gier

@tukinem, post #99

Jak będę na kompie z amosem, to zerknę. A jaki konkretnie błąd się tam pojawia?

edit: Hex mnie chyba ubiegł :)

Ostatnia aktualizacja: 20.07.2021 18:20:37 przez mastaszek
[#104] Re: Tworzenie gier

@tukinem, post #98

Bo lubie pracować na Amidze. To po prostu hobby. Dla mnie to jakby nie sama chęć programowania a po prostu amigowanie. Trochę ppainta, trochę Amosa, posłuchać modów, włączyć jakąś gierkę lub demo. Ogólnie taka zabawa zresztą tutaj wszyscy wiedzą o co chodzi :) przyjdzie kiedyś też czas na naukę protrackera ale póki co skupiam się na Amosie. Chciałbym stworzyć coś co będzie dla wielu Amigowców.


Doskonale rozumiem to uczucie, bo czy wszystko musi mieć logiczne lub materialistyczne wyjaśnienie? Zakładam, zgaduję, że dla większości zwolenników sprzętu / oprogramowania retro, w tym obcowania z Amigą nie jest sposobem na zarobek, na rozwój zawodowy, ale przyjemnością samą w sobie. Nie wszystko musi być skomercjalizowane. Fajna postawa, trzymam kciuki i nieustannie życzę powodzenia.
[#105] Re: Tworzenie gier

@Nasedo, post #104

Tworzyłem jakiś miesiąc temu wszystkie patterny do VisualPrefs oraz do Birdie no i ikonki. Windows posłużył jedynie jako ściągałka z netu i zapisywarka do PNG. Reszta, czyli obróbka zdjęć i retusze robiłem w PPaincie, co o wiele łatwiej i szybciej byłoby np. w Gimpie lub Photoshopie. Lecz tymi programami nie potrafię się posługiwać :) Nauczyłem się PPainta i służy mi nawet do konwertowania tapet z internetu z fullHD do HighRes Laced, chociaż trzeba dużo CHIP Ram dać. Ale sama frajda pracy w środowisku AmigaOS to jest coś :) Windows jest prosty ale taki oklepany.
[#106] Re: Tworzenie gier

@Hexmage960, post #102

Dałem OPEN OUT, żeby po wyjściu z edytora plik się zapisał. Przy OPEN IN plik jest do odczytu i to, co się zrobi w edytorze nie zapisze się do pliku.
Z drugiej strony może masz rację... Lepiej dać OPEN IN, a gdyby nie chciało się wprowadzać zmian, to plik się nie będzie nadpisywać. OPEN OUT można dać na koniec, gdy program wprowadza nowe dane

Ostatnia aktualizacja: 20.07.2021 19:09:27 przez tukinem
[#107] Re: Tworzenie gier

@Hexmage960, post #102

Z tego co widzę, to przez pomyłkę użyłeś "OPEN OUT


Open Out służy do zapisu w Amosie
[#108] Re: Tworzenie gier

@djpiotrs, post #107

Dałem OPEN OUT, czyli otwarcie pliku w trybie zapisu, czyli wczytuje plik do banku i czyści go. W sumie to później przy nadpisywaniu drugi raz używam tej funkcji żeby zapisać na nowo z nowymi danymi.

A nawet teraz sprawdzałem i już zdążyłem zmienić na OPEN IN zanim napisaliście, ale to i tak jedno i to samo, bo na koniec pracy edytora jest OPEN OUT, żeby zapisać dane. Pytanie mam takie:
czy kolejność wczytywania zmiennych z pliku musi być taka, jak kolejność zapisywania tych zmiennych? Pytam, bo podejrzałem zapisany plik i tam są tylko same liczby. Skąd Amos będzie wiedział, która liczba to dana zmienna?

Ostatnia aktualizacja: 20.07.2021 19:14:54 przez tukinem
[#109] Re: Tworzenie gier

@tukinem, post #108

W takim wypadku amos nie będzie wiedział która liczba to która zmienna. Może użyj Asc() i Chr$(), żeby konwertować liczby do znaku (0-255) i zapisywać znaki do pliku, a przy odczycie odczytać znak i przekonwertować go na liczbę. Wtedy w pliku jeden znak=jedna zmienna.

Ostatnia aktualizacja: 20.07.2021 19:49:08 przez mastaszek
[#110] Re: Tworzenie gier

@mastaszek, post #109

nie wiem jak ale chyba to nie zadziała, bo albo zapisuje wszystko jak leci, lub po prostu wczytuje nie jako nazwę zmiennej i zmienną, ale jako sam tekst, poza tym on nie jest w stanie wyszukać konkretnego tekstu. Jedyne co myślę zrobić, to albo faktycznie idealnie zapisywać i odczytywać w tej samej kolejności zmienne albo użyć 2 plików pomocniczych, chociaż wydaje mi się, że jeden plik też da radę, jeśli zachowam kolejność wczytywania zmiennych.
Zrobiłem prosty programik, który pyta o imię$ i nazwisko$. Zapisało do pliku. Przy odczycie zrobiłem drugi program, który miał na początku wyświetlić nazwisko$, które było zapisane jako drugie, a wczytało oczywiście imie$.

Ostatnia aktualizacja: 20.07.2021 21:00:43 przez tukinem
[#111] Re: Tworzenie gier

@tukinem, post #110

Musisz wymyśleć swój własny format pliku, np. 4 pierwsze bajty to mogą być jakieś dane pomocnicze (np. liczba żyć, numer poziomu, cokolwiek), następnie dane kafelków. Wtedy robisz coś w stylu:

zycia=READBYTE(0)
nr_poziomu=READBYTE(1)
itp.


Teraz możesz dowolnie manipulować zmiennymi, np.

PRINT nr_poziomu, zycia


I zawsze wynik będzie poprawny.
[#112] Re: Tworzenie gier

@forge, post #111

Dzięki za pomoc. Ta komenda READBYTE dotyczy Amosa? Pytam, bo w książce nie mam wypisanej takiej komendy, a chciałem dokładnie przeczytać co ona potrafi.
Próbowałem wpisać w Amosie, lecz przy Read Byte(0) wyskakuje Syntax Error



Ostatnia aktualizacja: 21.07.2021 20:48:23 przez tukinem
[#113] Re: Tworzenie gier

@tukinem, post #112

To chyba nie jest komenda amosa, ale żeby zapisywać do pliku bajty, możesz użyć wspomnianych przeze mnie wcześniej funkcji Asc() i Chr$() żeby konwertować liczby do znaku (znak ascii to przedział 0-255, czyli bajt). I taki znak zapisujesz w pliku, a potem odczytujesz i konwertujesz z powrotem i zapisujesz do zmiennej (lub tablicy) jako liczbę.
[#114] Re: Tworzenie gier

@mastaszek, post #113

Myślałem żeby zrobić to pętlą
Repeat
input$ asc(przykład)
Input$ właściwa zmienna$
Until asc(przykład)="np"1

Wtedy by wczytywał dane dopóki nie trafi na bajt z konkretną daną, a poniższa opcja input$ wczytuje zmienną którą chcemy wczytać. Ogólnie wczoraj zrobiłem szkielet następnej gry lecz coś poszło nie tak i po zapisie plik .amos urósł mi do 100kB. Przy odczycie miałem disc error i musiałem plik usunąć. Dopiero restart emulatora pomógł. Bardzo brzydkiego psikusa mi emulator zrobił. Pliki graficzne też mi pokasowało z tej gierki :/ na szczęście to tylko godzinna praca ale efekt był zadowalający. Dzisiaj to trzeba będzie od nowa zrobić.
[#115] Re: Tworzenie gier

@tukinem, post #99

Co robię źle???


Osobiście uważam, że podchodzisz do problemu z jakiejś dziwnej strony. Ja bym użył amosowych banków do trzymania danych. Dla prostoty przyjmijmy, ze mamy planszę 20*16 i elementy tej planszy to bajty.

Najpierw ustalmy parę zmiennych.
LEVEL_WIDTH = 20
LEVEL_HEIGHT = 16
LEVEL_SIZE = LEVEL_WIDTH*LEVEL_HEIGHT
LEVEL_AMOUNT = 10
LEVEL_DATA_BANK_NR = 128
TILE_EMPTY = 0


A Poniższy kawałek kodu tworzy bank o numerze LEVEL_DATA_BANK_NR i rozmiarze LEVEL_SIZE*LEVEL_AMOUNT. Bank zostanie wypełniony bajtami o wartości TILE_EMPTY, czyli jak łatwo się domyśleć zerami. O dostępnych numerach banków musisz poczytać w książce.
Reserve As Work LEVEL_DATA_BANK_NR,LEVEL_SIZE*LEVEL_AMOUNT
For I = 0 TO LEVEL_SIZE-1
    Poke Start(LEVEL_DATA_BANK_NR)+I,TILE_EMPTY
NEXT


Aby zapisać bank robimy
START_ADR = Start(LEVEL_DATA_BANK_NR)
END_ADR = START_ADR+LEVEL_SIZE*LEVEL_AMOUNT
Bsave "levels.bin",START_ADR To  END_ADR


Wczytanie
Bload "levels.bin", LEVEL_DATA_BANK_NR


Załóżmy teraz że mamy tablicę przechowująca bieżącą planszę.
Dim LEVEL(LEVEL_WIDTH-1,LEVEL_HEIGHT-1)


I chcielibyśmy przerzucić dane z banku do tejże planszy. Uczyńmy z tego procedurę tak by można było podać numer planszy.
Procedure LEVEL_GET[NR]
   I=0
   LEVEL_START=Start(LEVEL_DATA_BANK_NR)+LEVEL_SIZE*NR
   For Y=0 To LEVEL_HEIGHT-1
      For X=0 To LEVEL_WIDTH-1
         LEVEL(X,Y)=Peek(LEVEL_START+I)
         Inc I
      Next 
   Next 
End Proc


Mam nadzieje, że nie ma błędów, gdyż pisałem z głowy i nie jestem mocarzem z Amosa.
3
[#116] Re: Tworzenie gier

@asman, post #115

Tak najlepiej. I jak już będziesz używał banków, to pamiętaj, żeby zwolnić zarezerwowane banki poleceniem "Erase All" na koniec programu, bo inaczej Ci w amosie szybko pamięci braknie.
1
[#117] Re: Tworzenie gier

@mastaszek, post #116

Dzięki za pomoc. W weekend siądę do sokobana, bo nie mam póki co głowy do niego. Ale wrzucam za to gierkę, którą wczoraj zacząłem robić, jednak jakiś błąd wyskoczył przez emulator i dzisiaj ją zrobiłem od nowa. Myślę, że jak na jeden dzień to wyszło nawet :)

link

Ostatnia aktualizacja: 22.07.2021 21:11:38 przez tukinem
[#118] Re: Tworzenie gier

@mastaszek, post #116

Dzięki za "Erase All", jakoś nie byłem świadomy tego. Poza tym w kodzie, który zamieściłem znalazłem babola, nie jest wypełniany cały tworzony bank a tylko jeden level. powinno być LEVEL_SIZE*LEVEL_AMOUNT.
[#119] Re: Tworzenie gier

@asman, post #115

Powiem, że na chwilę obecną te komendy mnie przerosły ale poradziłem sobie po swojemu. Powiem jak:
Zrobiłem program, który zapisuje dane z tablicy do pliku. Każdy level to osobny plik, bo jeśli ich ma być 50, to naprawdę plik z danymi byłby wielki. Zapisywane są w nim tylko dane z tabeli i nic więcej. Sama gra w Amosie wczytuje sobie tabelę. Jeśli jest murek, to rysuje murek. Jeśli jest chłopek to wstawia boba i współrzędne od razu idą dalej. Jeśli jest skrzynka, to od razu od zera liczy ilość skrzynek, która mi jest później potrzebna dalej przy ilości skrzynek w polach docelowych. Wyszło to uniwersalnie i mogę teraz tworzyć kolejne levele bez problemu. Miałem kilka problemów po drodze, lecz poradziłem sobie i teraz zostało jedynie uzupełnianie leveli o kolejne pliki. Restartowanie poziomu działa. Edytor działa, lecz póki co muszę w nim przerobić zapis pliku, bo nie robi uniwersalnie do programu.
Ogólnie rzecz biorąc zostało mi tylko pododawanie reszty poziomów, dopracowanie edytora, jakieś dźwięki i może zrobię obsługę "windy" tak jak było w wersji MS-DOS ale to już niekoniecznie. No i może uda mi się dodać cofanie ostatniego ruchu ale to muszę nad tym pomyśleć jeszcze, czy nie będzie bardziej spowalniać samej rozgrywki.
2
[#120] Re: Tworzenie gier

@tukinem, post #119

Przykro mi ale musisz sobie banki obczajić perfekcyjnie jeżeli chcesz mieć najszybszy dostęp do danych.
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