kategoria: AMOS
[#91] Re: Będę pisać grę. Tomb Raider!

@tukinem, post #90

OMG, działa!



Tylko dlaczego w ten sposób?!?
[wyróżniony] [#92] Re: Będę pisać grę. Tomb Raider!

@Xandra, post #91

Tam jest błąd. W książce o Amosie jest to samo. Pisze o współrzędnych sprzętowych, a należy używać ekranowych, czyli bez XHARD i YHARD. Co do tego skąd ta liczba to:

"X coordinates can range from 0 to 448, and they are automatically rounded down to the nearest 16-pixel boundary. Only the positions from 112 to 432 are actually visible on the TV screen, so avoid using an x-coordinate below 112."

Ja ręcznie kiedyś kombinowałem, żeby ekran wypośrodkować i wpadłem właśnie na współrzędną 135 :)
1
[#93] Re: Będę pisać grę. Tomb Raider!

@tukinem, post #92

No i teraz wszystko jasne, dzięki bardzo :)
[#94] Re: Będę pisać grę. Tomb Raider!

@tukinem, post #92

135 i tak jest zaokrąglana do 128 i właśnie 128 to jest lewa krawędź ekranu.
1
[#95] Re: Będę pisać grę. Tomb Raider!

@tukinem, post #92

Tak jak juz zdazyl napisac Mastaszek, wspolrzedna sprzetowa X ekranu moze miec tylko wartosci bedace wielkokrotnoscia liczby 16 czyli 0,16,32,64.... 112,128,144,160 itd.. inaczej wartosc X bedzie zaokraglona w lewo do najblizszej i od tej pozycji bedzie wyswietlany ekran.
Ponizej jakiejs wartosci X, ekran (moze te 112 ale pod WINUAE dzialaja i wartosci mniejsze) nie jest widoczny.
Zeby idealnie wycentrowac waski ekran na ekranie kineskopu musisz miec szerokosc tego ekranu rowna wielokrotnosci liczby 32 czyli 32,64,96,128 .... wtedy czarne ramki z lewej i prawej beda rowne.

Wzgledne pozycjonowanie ekranow robi sie tak:

Screen Open 0,320,200,32,lowres
curs off
flash off
cls 0
Wait vbl: Wait vbl : Rem <--- wazne !!! musi byc przynajmniej jedna instrukcja wygaszania pionowego po otwarciu ekranu
eX=X Hard(0) : Rem odczytanie punktu 0,199 ekranu i zamiana wartosci na sprzetowe
eY=Y Hard(200-1) : Rem ostatnia linia ekranu to wysokosc-1


Screen open 1,320,56,8,lowres
Flash off
curs off
Cls 0
Screen Display 1,eX,eY+1,320,55 : Rem ten ekran zostanie wyswietlony bezposrednio pod pierwszym


w Amosie miedzy roznymi ekranami zawsze pojawia sie 1 czarna pozioma linia przerwy (ponoc Amiga sie nie wyrabia z kolejnym wyswietleniem ekranu fizycznego i potrzebuje czasu) ktora przyslania tez kursor myszki ale w innych grach tej linii nie ma.
np. w Elvira Mistress Of The Dark dolny ekran z przedmiotami to osobny ekran z wlasna paleta 16 kolorow inna niz gorny ekran akcji.

Ostatnia aktualizacja: 08.01.2022 09:20:49 przez selur

Ostatnia aktualizacja: 08.01.2022 09:21:59 przez selur
[#96] Re: Będę pisać grę. Tomb Raider!

@selur, post #95

Od góry też trzeba dołożyć dla współrzędnej Y. Tak jak dla X się daje 128, tak dla Y żeby mieć ekran w górnym rogu ekranu trzeba dać 50 lub 51 (w zależności czy się chce widzieć górną krawędź ekranu, która jest czarna.

Dla przykładu taki kod:

Screen Open 1,320,100,16,lowres
Curs Off : Flash Off : Cls 2
Screen Display 1,128,52,320,100

Tu ekran jest o 1 piksel przesunięty w dół, bo jest na górze widoczna jedna linia ekranu ze spodu.
Z drugiej strony taki program:

Screen Open 1,320,100,16,Lowres
Curs Off : Flash Off : Cls 2
Screen Display 1,128,28,320,100
Ink 5 : For A=0 to 320 Step 3 : Plot A,0 : Next

Tu jest górna granica widoczności w Winuae. Piksele rysowane są w pozycji Y=0 (Plot A,0). Żeby były widoczne, to wystarczy dołożyć 28 pikseli od góry. Ale nie dodając nic, nie będą widoczne.

Także jeśli Xandra chce obniżyć ekran drugi o 100 pikseli, to musi dać współrzędną 151. Ewentualnie dać 128, a górny ekran dźwignąć komendą SCREEN DISPLAY nr,128,28,320,100
[#97] Re: Będę pisać grę. Tomb Raider!

@tukinem, post #96

"Także jeśli Xandra chce obniżyć ekran drugi o 100 pikseli, to musi dać współrzędną 151."

To nie tak, ze dokladnie 151.
W zaleznosci na jakiej wspolrzednej sprzetowej Y wyswietli sie pierwszy ekran, to pozniej jedynie trzeba sobie obliczyc wysokosc obu ekranow lacznie tak zeby nie byla wieksza niz 256 pikseli w pionie dla PAL i dopiero uwzglednic te n pikseli w dol.

Obszar widocznosci zalezy od wersji/konfiguracji emulatora WINUAE wiec rzeczywista wartosc Y mozesz sprawdzic tylko na fizycznej Amidze 500.
U mnie na WINUAE widocznosc zaczyna sie od X=112 a Y=26 ale ogolnie lewy gorny rog standardowo wynosi chyba X=128 Y=40.
1
[#98] Re: Będę pisać grę. Tomb Raider!

@selur, post #97

Pamiętam że mnie kiedyś denerwowały szare boczne paski poza ekranami Amosa. Zacząłem tworzyć ekrany coraz szersze i tak dojechałem do szerokości 355. Wtedy nic nie było ucinane a ekran miał maksymalną szerokość. Ale to jak mówisz inaczej pewnie jest w emulatorze a inaczej na prawdziwym sprzęcie. Może to działa na tej zasadzie co Overscan w Prefsach Workbencha.
[#99] Re: Będę pisać grę. Tomb Raider!

@tukinem, post #98

To nie sa tylko "boczki" Amosa ale ramka fizycznego ekranu w Lowresie.
Ale tak jak piszesz mozna wlaczyc w Lowresie tryb Overscan i z 320x256 robi sie nam 352x273 pikseli, najwiekszy mozliwy obszar do wyswietlenia na monitorze np. 1084s choc Deluxe Paint podaje jeszcze wieksza wartosc 368x283 (nie wiem skad ta wartosc).

Nie wiem ile gier korzysta z Overscanu ale jedna to na bank to The Settlers. Zagrywalem sie w to miesiacami wiec pamietam, ze zajmuje caly ekran monitora Commodore.

1
[#100] Re: Będę pisać grę. Tomb Raider!

@Xandra, post #1

Zastanawiam się nad jednym, czy mając na myśli A500 1mega, zakładamy, że targetem będzie Amiga bez dysku? Bo jeśli nie to większość "nowożytnych" rozwiązań umożliwiająch skorzystanie z dysku zawiera jakiś dodatkowy ram.
1
[#101] Re: Będę pisać grę. Tomb Raider!

@Xandra, post #1

Jak tam prace nad grą? Ciekawie się zapowiadał temat.
[#102] Re: Będę pisać grę. Tomb Raider!

@tukinem, post #101

Oby się nie stało tak jak tutaj:

https://www.ppa.pl/forum/hyde-park/13741/golden-axe-2#m733136

Brakło muzyka, a gra zapowiadała się świetnie.
[#103] Re: Będę pisać grę. Tomb Raider!

@Mir3k, post #100

Zastanawiam się nad jednym, czy mając na myśli A500 1mega,

Chciałabym, ale czy się uda? Hmmmm. Wszystko zależy od optymalizacji...

A teraz pozwólcie, że użyję was jako "żółtej gumowej kaczuszki". Chcę sobie stworzyć uniwersalny algorytm, który będzie odpowiadał za obsługę działań gracza w danej lokacji. Nie chodzi tu o przemieszczanie się, bo to banalnie proste. Otóż gracz wchodzi do lokacji 12.

Procedura ładuj grafikę 12
Procedura ładuj strefy myszy 12,
ew Procedura ładuj opis
ew Procedura zmień muzykę na 12

Teraz tak. Pierwsze 4 strefy myszy idą na kierunki, ponieważ zamiast strzałek gdzieś na dole czy z boku będzie się zmieniał kursor myszy. Kolejne strefy na miejsca gdzie można kliknąć. I teraz tak, musiały by być kilka rodzajów, strefa gdzie jest jakiś przedmiot, strefa do interakcji i/lub interakcji z danym przedmiotem, oraz np dialog, informacja, że drzwi są zamknięte np, lub możliwość rozmowy.

A więc, gracz klika na strefę 5, gdzie leży przedmiot, pierwsze kliknięcie = równe informacja o nazwie przedmiotu. Po kliknięciu na "Opis" = opis tego przedmiotu, a "Weź" wiadomo co.

Dalej. Jeżeli jest aktywowana strefa na osobnym ekranie jakiegoś przedmiotu, czyli gracz powiedzmy kliknął na klucz, i teraz na tym pierwszym ekranie kliknie na strefę 6, czyli opowiedzmy drzwi, pojawia się komunikat, że może użyć klucza, albo po prostu informacja "drzwi są teraz otwarte" i powiedzmy strefa 1 (czyli północ) staje się aktywna, i gracz może przejść do następnej lokacji, albo odwrotnie, informacja "ten klucz nie pasuje".

Czyli na przykładzie przedmiot(lokacja)=1 to znaczy że sobie leży w danym miejscu, 2 = że jest u gracza, 0 = że został użyty, tak dla uproszczenia.

No i osobna procedura od dialogów, gdy się już je aktywuje, powiedzmy z barmanem, wczytują się dialogi dla tego NPCa, a ich wybory powodują określoną modyfikację parametrów np dostępności do przedmiotów, aktywacji strefy, gdzie można kliknąć, lub zmienić stan danej strefy (czyli gadamy z barmanem i pozwala graczowi wziąć powiedzmy pogrzebacz) lub 0aktywacji danego kierunku, czyli przepuszcza gracza na zaplecze.

Próbuję to ubrać w jakiś algorytm. Chodzi o to, żeby nie robić osobnych procedur dla każdej lokacji. Dobrze kombinuję?

Tylko, że znów musiałaby być osobna procedura do tej lokalizacji, która by określone parametry zmieniała.

Czyli. Gracz klika na klucz, ten zmienia parametr na 3 (gotowy do użycia) i klikam na barmana no i tu wychodzi na to, że muszę mieć jednak procedurę osobną dla lokalizacji 12, gdzie sprawdzam, że

jeśli przedmiot(7)=3 i kliknięta strefa 7 to komunikat$="Barman nie chce od Ciebie klucza"

lub coś w tym stylu i w sumie wracamy do punktu wyjścia :///
[#104] Re: Będę pisać grę. Tomb Raider!

@Xandra, post #103

Bardziej by pasowało jedną procedurę z parametrami, np:
Procedura Ładuj_Lokacje(grafika, tablica_strefy, tablica_opis, muzyka)

Nie pamietam czy w Amosie można robić struktury czy tylko same tablice.
Bo można by stroć strukturę opisujaca daną strefę:

typedef struct
{
int rodzaj;
int x0,x1, y0,y1,
char* opis;
} sStrefa;

a potem tablicę tych struktur
sStrefa Strefy_Salonu[10];

A jak nie to jakos sprytanie to zastapic samymi tablicami
[#105] Re: Będę pisać grę. Tomb Raider!

@mateusz_s, post #104

Aaaa, to taki tutaj masz nick ;)

Rozwijając temat skryptu, który daje mi dużo więcej możliwości w tworzeniu struktur. Kolejne lokacje mają mają swoje numery, a więc np #12, potem definicje stref myszy, potem instrukcje warunkowe i wykonawcze, czyli przykładowo

#12
laduj obrazek
włącz boba z przedmiotem (jeśli on tam jeszcze jest) lub z elementem tła który miałby być zmieniany
definiuj 3 tablice o wymimiarach x1,y1,x2,y2 itd
instrukcje warunkowe na strefach i tu zakodowane co ma robić po kliknięciu na poszczególne strefy

I do tego kilka procedur interpretujących odpowiednio resztę skryptu, to miało by więcej sensu chyba ;)
[#106] Re: Będę pisać grę. Tomb Raider!

@mateusz_s, post #104

A gdyby do każdej lokalizacji porobić pliki z danymi? Przy ładowaniu każdej lokalizacji wczytywać z pliku z danymi ładowane byłyby wszystkie zmienne. Przykład:

If LOKALIZACJA=1
Open In 1,"Lokalizacja1"
Input #1,X1$
Input #1,X2$
Input #1,Y1$
Input #1,Y2$
Reserve Zone 1
Set Zone 1,Val(X1$),Val(Y1$) To Val(X2$),Val(Y2$)
Close
End If

I tak każda lokacja ma swój plik z danymi.

Ostatnia aktualizacja: 03.02.2022 17:57:37 przez tukinem
[#107] Re: Będę pisać grę. Tomb Raider!

@Xandra, post #105

A może sobie na tym scorpion engine zrób?
A jeśli chodzi o Amosa to jest ta nowa wersja w rozwoju
Co pozwala na Aga i nawet wykorzystanie 080
https://amos-professional-unity.frederic-cordier.fr/spip.php?article7
[#108] Re: Będę pisać grę. Tomb Raider!

@Xandra, post #105

Najpierw to trza by stworzyc sobie np. na kartce liste wszystkich lokacji, pozniej policzyc w ktorej lokacji bedzie najwieksza liczba stref , najwieksza ilosc przedmiotow, roznych obiektow typu szafki, polki, drzwi , okna , smietniki itp.. itd..
bo wtedy poznamy juz maksymalny rozmiar potrzebnych tablic do opisania tych obiektow. A to jest potrzebne do stworzenia uniwersalnej procedury czy raczej "silniczka" tej 'gry'. A z kolei stworzenie uniwersalnej procedury zarzadzajacej lokacja nie jest takie proste, bo wymaga przewidzenia wielu wariantow czynnosci.

prosty przyklad: zakladamy, ze mamy 100 lokacji w grze a w kazdej lokacji moze byc maksymalnie 25 stref do klikania

tworzymy tablice i wypelniamy ja danymi w jakiejs procedurze wczytywania danych z komendy Data

Dim Tab_Stref(100,25,3)

Global Tab_Stref()

Rem procedura rysowania stref

Procedure Rob_Strefy_Lokacji[Nr_lok]
'
Screen 0
'
Rem petla dla 25 stref, bo tyle moze byc maksymalnie w danej lokacji
For i=1 to 25 :
Rem odczyt danych z tablicy stref , kolejno X, Y, Szerokosc, Wysokosc
x1=Tab_Stref(Nr_Lok,i,0)
x2=Tab_Stref(Nr_Lok,i,1)
szer=Tab_Stref(Nr_Lok,i,2)
wys=Tab_Stref(Nr_Lok,i,3)
'
If szer>0 and wys>0
Rem jesli szer i wys sa rowne zero, to strefa nie istnieje w przeciwnym razie tworzymy steref o numerze i
Set Zone i,x1,y1 to x1+szer,y1+wys
End if
'
Next i
'
end proc
[#109] Re: Będę pisać grę. Tomb Raider!

@Xandra, post #1

Czy jest już data premiery albo chociaż jakieś demo?
1
[#110] Re: Będę pisać grę. Tomb Raider!

@Wankowicz, post #109

A Ty uwierzyłeś w ten plan?
2
[#111] Re: Będę pisać grę. Tomb Raider!

@mailman, post #110

ja uwierzyłem. Ale widać plan nie wypalił i pani się nudzi. Mogę przyjąć panią do ekipy, to wklepie do końca Super Turra. A jak jest ładna, to da się i nanieść stosowne poprawki do scenariusza, żeby tam występowała ładna pani, i nakręcimy cutscenkę na ending jak w Dragon's Lair. ok, racja

[#112] Re: Będę pisać grę. Tomb Raider!

@snajper, post #111

Gra byłaby skończona, gdyby jakiś frajer najlepiej napisał kompletny engine, najlepiej anonimowo, aby cały credit poszedł dla tej osoby. Przecież widać tutaj w wątku, że op nie jest w stanie programować, nie ma żadnego wcześniejszego dorobku, i przez kilka stron nawet nie pokazała swojego dotychczasowego kodu.
Piszę osoby, bo na wykopie są ludzie, którzy twierdzą że xandra to tylko żeński nick niezrównoważonego kolesia, który wykorzystuje rozmarzonych facetów aby pracowali dla niej. Czyli dokładnie to, co robią selur i snajper.
[#113] Re: Będę pisać grę. Tomb Raider!

@Ralpheeck, post #112

że niby co snajper? Snajper dla nikogo nie pracuje, poza Amiga NG (i może niedługo Retroniksem, ale o tym sza hide2), a już na pewno nie dla niezidentyfikowanego osobnika. Już bardziej pracuje dla Hexmage'a niż dla tej Kasandry. Jeśli już, to ona miała pracować dla mnie, a i to nie tak od razu, tylko po zweryfikowaniu tożsamości poprzez wklejenie kilku zdjęć.
[#114] Re: Będę pisać grę. Tomb Raider!

@snajper, post #113

Gdyby ten xander czy xandra pokazał co ma z kodu, aby poprawić, zopymalizować, to inna bajka.
Zamiast tego mamy:
A teraz pozwólcie, że użyję was jako "żółtej gumowej kaczuszki". Chcę sobie….


Rzućmy się wszyscy, aby pomóc programistce, amigowej „siostrze”, bo ona chce „sobie” coś napisać. :)
Napisałem niezrównoważony typ, bo poczytaj co pisze do ludzi którzy krytykują jego talent muzyczny.

Ja osobiście jestem dumny z Hexmage, bo słyszałem z czego chłopak musiał się odbić, i nawet jak go krytykowaliśmy to brał to na klatę.
3
[#115] Re: Będę pisać grę. Tomb Raider!

@Xandra, post #1

Jakiś postęp w grze?
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