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

@Xandra, post #58

Jasne, ze mozna zmienic wyglad kursora myszki. Do banku sprajtow ladujemy jakis obrazek ale tylko 4 kolorowy o wymiarach 16*16 pikseli. Zapamietujemy sobie jego numer np. 1 obrazek w banku sprajtow
to komenda:
Change Mouse 3+1 zmienimy sprzetowy kursor myszki na obrazek numer 1 z banku sprajtow/bobow. Oczywiscie jego kolory definiujemy na danym ekranie w indeksach 17,18,19.

Zeby calkowicie wylaczyc sprzetowy kursor myszki trzeba wylaczyc sprajt nr 0 i w jego miejsce wyswietlic jakikolwiek sprajt z jakims obrazkiem. Ale zeby poruszal sie tam gdzie myszka musimy napisac wlasny program i to w Amalu, zadne On Every nie bedzie dzialac prawidlowo.

Hide
Sprite Off 0 <--- usuwamy sprajta myszki
Sprite 2,150,200,1 <--- nasz nowy kursor myszki czyli np. Sprajt nr 2
Channel 1 to Sprite 2
Amal 1,"L: L X=XM: L Y=YM: J L" <--- program Amala przypisujacy rejestrom X i Y obiektu (sprajta) rejestry Myszki XM i YM
Amal On 1
[#62] Re: Będę pisać grę. Tomb Raider!

@selur, post #61

Rozumiem, że ten nowy sprajt będzie miał dowolnie defiowane w indeksie kolory czyli np 29-31, a reszta będzie działać jak normalna myszka?

Ostatnia aktualizacja: 05.01.2022 12:10:11 przez Xandra
[#63] Re: Będę pisać grę. Tomb Raider!

@Xandra, post #62

Nie.
Kolory w indeksach 0-31 definiuje sie na ekranie dowolnie.
Kolory wszystkich obiektow typu Boby,Sprajty czy Ikony sa pobierane z rejestrow kolorow danego ekranu sprzetowego !
W zaleznosci od tego jakie kolory ma dany ekran na ktorym jest wyswietlony Sprajt lub Bob, takie kolory bedzie miec te odpowiedni obiekt.
Boby korzystaja z odpowiadajaych im indeksow kolorow ekranu. Czyli kolor 0 na ekranie to 0 boba, kolor 1 na ekranie to kolor 1 Boba, kolor 3 na ekranie to kolor 3 Boba.
Natomiast Sprajty maja wlasna numeracje indeksow !

sprajty 0 i 1 indeksy 16 do 19 (odpowiednio kolor sprajta 0,1,2,3) <-- sprajt 0 to sprzetowy sprajt myszki
sprajty 2 i 3 indeksy 20 do 23 (odpowiednio kolor sprajta 0,1,2,3)
sprajty 4 i 5 indeksy 24 do 27 (odpowiednio kolor sprajta 0,1,2,3)
sprajty 6 i 7 indeksy 28 do 31 (odpowiednio kolor sprajta 0,1,2,3)

Sprajty sa innym rodzajem obiektow niz Boby i inaczej sie je definiuje/rysuje na ekranie.
[#64] Re: Będę pisać grę. Tomb Raider!

@selur, post #63

A nie wystarczy
Sprite 6,150,200,1
Channel 1 to Sprite 6
[#65] Re: Będę pisać grę. Tomb Raider!

@Xandra, post #64

wystarczy w zaleznosci co to pozniej bedzie.
[#66] Re: Będę pisać grę. Tomb Raider!

@Xandra, post #41

Na tym drugim zdjęciu jest duża pikseloza. Na daszku przystanku pojawiły się białe piksele, na śmietniku jest siatka z pikseli. Dodaję tu zrzut ekranu z mojej obróbki. Zjechałem na 55 kolorów. Ile dokładnie kolorów ma mieć ten obrazek?

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

@tukinem, post #66

Jeszcze zaciekawiło mnie podświetlanie tekstu po najechaniu myszką. Popisałem trochę w Amosie i zrobiłem taki mały programik:

Screen Open 0,320,200,32,Lowres
Curs Off : Flash Off : Cls 0

Ink 0
Reserve Zone 3
Set Zone 1,100,14 To 155,21
Set Zone 2,100,34 To 155,41
Set Zone 3,100,54 To 150,61
Ink 5
Gr Writing %0
Text 100,20,"Wyjscie"
Text 100,40,"Kolorek"
Text 100,60,"Myszka"
A=2

Repeat
If Mouse Zone=1 Then Ink A : Box 90,13 To 162,22
If Mouse Zone<>1 Then Ink 0 : Box 90,13 To 162,22
If Mouse Zone=2 Then Ink A : Box 90,33 To 162,42

If Mouse Zone<>2 Then Ink 0 : Box 90,33 To 162,42
If Mouse Zone=3 Then Ink A : Box 90,53 To 162,62
If Mouse Zone<>3 Then Ink 0 : Box 90,53 To 162,62

If Mouse Zone=2 and Mouse Click=1 Then A=A+1
If Mouse Zone=3 and Mouse Key=1 Then Inc MYSZ : Change Mouse MYSZ
If MYSZ>3 Then MYSZ=1

Wait Vbl
Until Mouse Zone=1 and Mouse Key=1
Erase All
End


Tu są 3 pozycje do kliknięcia. Pierwsza to "WYJŚCIE". Po najechaniu i kliknięciu wychodzi z programu. Druga to "KOLOREK", który zmienia kolor ramki dookoła tekstu. Trzeci to "MYSZKA", który zmienia kursor myszy po kliknięciu. Poza tym każda opcja zostaje otoczona ramką po najechaniu myszką. Użyłem do tego zonów. Tekst jest pisany trybem graficznym komendą "TEXT" ale można też by użyć "PRINT".
1
[#68] Re: Będę pisać grę. Tomb Raider!

@tukinem, post #67

...a bardziej poprawnie i duzo szybciej wykonywalny ten sam kod

Koniec=False
Mysz=0

Repeat

STREFA=Mouse Zone
KLIK=Mouse Click
KEJ=Mouse Key

If Strefa=1 Then Ink A : Box 90,13 To 162,22:Wait Vbl
If Strefa<>1 Then Ink 0 : Box 90,13 To 162,22:Wait Vbl
If Strefa=2 Then Ink A : Box 90,33 To 162,42:Wait Vbl

If Strefa<>2 Then Ink 0 : Box 90,33 To 162,42:Wait Vbl
If Strefa=3 Then Ink A : Box 90,53 To 162,62:Wait Vbl
If Strefa<>3 Then Ink 0 : Box 90,53 To 162,62:Wait Vbl

If Strefa=2 and KLIK=1 Then A=A+1

If Strefa=3 and KEJ=1
Inc MYSZ
If MYSZ>3 :MYSZ=1: End if
Change Mouse MYSZ
End if

if STREFA=1 and KEJ=1 then Koniec=True

Until Koniec

Erase All <---- WTF?!!? a to co tu robi
End



Ostatnia aktualizacja: 05.01.2022 18:42:33 przez selur
2
[#69] Re: Będę pisać grę. Tomb Raider!

@selur, post #68

Erase All <---- WTF?!!? a to co tu robi

a to z przyzwyczajenia wrzuciłem :D
[#70] Re: Będę pisać grę. Tomb Raider!

@tukinem, post #66

@tukinem Musi mieć maksymalnie 28 kolorów.

@tukinem: @Selur: Dzięki za fajne procedurki, pewnie się przydadzą ;)

Ale ogólnie chodziło mi o to:
ZONE$
function: create a zone around text
z$=ZONE$(text$,zone number)
The AMOS Professional programmer is allowed to create powerful dialogue boxes and on- screen control panels
without the need to employ complex programming. The ZONES function surrounds a section of text with its own
screen zone, so that the presence of the mouse pointer can be detected using the ZONE function. Simply supply the
two parameters in brackets, which are the string of text for one of your control "buttons", followed by the number of
the screen zone to be defined.
The maximum number of zones will be limited by the value specified in a previous RESERVE ZONE command.
The format for the control string is as follows:
Chr$(27)+"ZO"+A$+Chr$(27)+"R"+Chr$(48+n)
BORDER$
function: create a border around text
b$=Border$(text$, border number)
This works in much the same way as ZONES, by returning a string of characters that create a border around the
required string of text. The AMOS Professional programmer can use it with ZONES to set up special "buttons" for
alert windows and control consoles.

Tylko jeszcze nie wiem jak tego używać, bo nie znalazłam przykładów, to z książki Amos User Guide.
[wyróżniony] [#71] Re: Będę pisać grę. Tomb Raider!

@Xandra, post #70

prawie tak samo jak zwykla strefa tylko ze jako lancuch tekstowy

Reserve Zone 3
a$=Zone$("'Kolorek",1)
b$=Zone$("Myszka",2)
c$=Zone$("Wyjscie",3)

Print at(5,1);a$
Print at(5,3);b$
Print at(5,5);Border$(c$,1)

Do
Strefa=Mouse Zone
klik=Mouse Click
Print at(5,8);Strefa
If Klik=1 and Sterfa=1 then Print at(0,10);"klikles se w kolorek"
If Klik=1 and Sterfa=2 then Print at(0,10); "klikles se myszkie"

If Klik=1 and Sterfa=3
Print at(0,10);"Hitler Kaput!"
Exit
End if

Loop

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

@selur, post #71

O widzisz, właśnie o to mi chodziło, dzięki! Tylko kliknięcie nie działa, nie wiem czemu, zaimportowałam kod przez Megre ASCII
[#73] Re: Będę pisać grę. Tomb Raider!

@Xandra, post #72

a bo tam jest czeski blad !!
literowka zamiast Strefa wpisalem Sterfa
[#74] Re: Będę pisać grę. Tomb Raider!

@selur, post #73

A widzisz, też nie zauważyłam, dzięki ;) A tak przy okazji. Wiesz może jak zrobić napisy z outlinem, takie jak tu?

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

@Xandra, post #74

Nie i nie wiem czy w ogole jest jakas instrukcja, ktora tworzy taka obwodke dla tekstu.

Na upartego mozna taki efekt zrobic, rysujac 4 razy ten sam tekst w czarnym kolorze z przesunieciem o 1 piksel w lewo,gore, dol i prawo a nastepnie narysowac na srodku tekst normalnym kolorem.
Ale tylko instrukcja tekstu graficznego Text, Printem tego nie zrobisz.
[#76] Re: Będę pisać grę. Tomb Raider!

@Xandra, post #74

Spójrz tutaj.

"E" - Border.
Chr$($1B)+"E0" prefixes the text to be Bordered.
Chr$($1B)+"E"+Chr$($30+PatternNumber) suffixes it.


Może coś z tego Ci się przyda.
[#77] Re: Będę pisać grę. Tomb Raider!

@Xandra, post #41

Wskaźnik myszy zrobiłbym sprajtem, a nie bobem. Sprajty mają swoją paletę niezależną od palety kolorów ekranu.
Z tego co pamiętam to w trybie EHB ma się panowanie tylko nad pierwszymi 32 kolorami. Drugie 32 powstaje bez naszego panowania i są po prostu przyciemnionymi o połowę kolorami z pierwszych 32 kolorów.

Standardowych układów Amigi używałem ostatnio w 1999 roku więc pamięć może mnie zawodzić. Ale z tego co pamiętam najlepiej konwertowało się obrazki do ograniczonej palety w Personal Paincie albo Brilliance. Można było sobie potem zarezerować jakieś kolory, którym chciało się narzucić jakiś konkretny kolor i zremapować obrazek do takiej palety. W 1998 po wielu próbach i porównaniach opracowałem sobie jakieś kroki, które dawały najelpsze rezultaty. Tylko, że wtedy robiłem to z myślą o rozdzielczości 640x480 i około 200 kolorach (pozostałę 56 zostawiałem sobie na postaci i elementy pojawiającego się GUI), bo gra miała być w trybie Hi-Res Laced i dla kości AGA (zalecany monitor SVGA i "niemrugające" tryby).

Ostatnia aktualizacja: 06.01.2022 19:11:56 przez MDW
[#78] Re: Będę pisać grę. Tomb Raider!

@MDW, post #77

Obrazek po konwersji warto wziąć trochę "pod lupę" i odrobinę przepixlować. Zwłaszcza gdy jest w Lowresie. Nie mówię, że robić aż takie gruntowne przepixlowywanie jakie robili w TeenAgent. po skanowaniu każdy obrazek był przepixlowywany na... Amidze 1200. To znaczy na pewno wersja dla PC i AGA, nie wiem jak OCS/ECS. Tak samo jak "Książę i Tchórz". Gra nigdy nie wyszła na Amigę ale tła były na Amidze poprawiane po skanowaniu. Nie wiem czy na pewno wszystkie ale na pewno duża część. Wiem to z pierwszej ręki i nawet to widziałem. :) To co tam robiono to była trochę przesada ale warto usunąć, trochę skorygować jakieś pixele, które biją po oczach.

Generalnie jakoś bardzo bym się nie przejmował widoczną pixelozą. Skany nigdy nie będą wyglądały idealnie w tak małej liczbie kolorów i tak niskiej rozdzielczości. Ale to jest retro, akceptujemy i lubimy. Idealne skany mamy na codzień w każdym innym urządzeniu czy w bardziej rozbudowanych Amigach. Tutaj może być "klimatycznie". Metodą prób i błędów ustaliłbym sobie jakią najlepszy algorytm działania i potem już się tym nie przejmował tylko postępował zgodnie z nim. Może nawet przy okazji poduczyłbym się ARexxa i zrobił jakieś skrypty automatyzujące ten procem. Chociaż przy kilkudziesięciu obrazkach to chyba nie ma sensu. Gdyby ich było tysiąc czy 10 tysięcy to może warto byłoby się pobawić...
[#79] Re: Będę pisać grę. Tomb Raider!

@MDW, post #78

Też mi się wydawało, że sprajty mają własną paletę kolorów, ale mnie Selur uświadomił, że tak nie jest. Tzn jest tak, jeśli ekran ma max 16 kolorów. Jeśli ma mieć 32 kolory, to wchodzimy w paletę sprajtów. Chyba :)
[#80] Re: Będę pisać grę. Tomb Raider!

@mastaszek, post #79

Ale wskaznik myszy na sprajcie raczej da sie zrobic chyba zawsze. Skonwertowac wszystkie zdjecia do 32 kolorow, wybrac 4 kolory (na pewno czarny, pewnie bialy tez), ktore sa na wszystkich zdjeciach. Jakby jakiegos koloru gdzies brakowalo to przerobic delikatnie. Stworzyc ladny wskaznik myszy. Kolory wszystkich skonwertowanych zdjec zremapowac i powinno zadzialac.
[#81] Re: Będę pisać grę. Tomb Raider!

@Norbert, post #76

@selur: Tak właśnie myślałam, że to najprostsza metoda, choć w sumie może sam cień by mi wystarczył, czyli tylko 2x użyć Text.

@Norbert: Dziękuję ;)

@MDW Już ustaliłam jak to zrobić na sprajcie (nie było mowy o bobie), @selur fajny kod podrzucił :)

Co do kolorów, to tylko własny sprajt wskaźnika a konkretnie 6 lub 7 mi pasuje, ponieważ ma kolory na końcu 32 kolorowej palety.

@Don_Adan: Co wy macie z tym bobem zamiast normalnego wskaźnika, nawet o tym nie pomyślałam ;) Bob miał być tylko do wyświetlania nazwy przedmiotu / obiektu interaktywnego obok wsaźnika myszy
[#82] Re: Będę pisać grę. Tomb Raider!

@mastaszek, post #79




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

@selur, post #82

Dziwne. Gdy robiłem grę, to definiowałem kolory sprajta od nr 48 do 63. Tak definiowalem w Prince of Persia i w Jumpman Lives. Może dlatego, że te gry były w 16 i w 8 kolorach?
[#84] Re: Będę pisać grę. Tomb Raider!

@tukinem, post #83

To nawet o tym nie wiedzialem ale wyglada na to, ze Amos zapetla indeksy kolorow powyzej numeru 31.
Czemu tak jest? Nie mam pojecia.

Ramka ekranu to zawsze kolor 0 w palecie a tutaj mamy taki psikus, mozemy se nawet wpisac numer koloru 192 ale oczywiscie zmieni sie kolor numer 0 .
Czyli wpisujac kolejno Colour 32,33,34.....63 zmieniamy tak naprawde 0,1,2....31.
Zagadka rozwiklana

Colour 64,$FFF
wait key
Colour 96,$000
wait key
Colour 128,$F00
wait key
Colour 160,$00F
wait key
Colour 192,$0F0
[#85] Re: Będę pisać grę. Tomb Raider!

@selur, post #84

a tutaj dowod na to, ze nie da sie zmienic kolorow 32-63.
Rysujemy wszystkie 64 kolory na ekranie a na koncu probujemy zmienic tylko kolory 32 do 63 na kolor bialy.
Ale bialy zamiast na dolnych kwadracikach (32-63) pojawia sie na gornych (0-31) a na dolnych mamy szary generowany automatycznie z bialego (czyli polowa nasycenia - Extra Half Bright).


Screen Open 0,320,200,64,Lowres
Curs off
Flash off
Print at(0,3);"Indeksy 0-31"

x=1: y=40

For i=0 to 15
ink i
Bar X*16,Y to X*16+16,Y+16
inc X
next i

x=1: y=y+32

For i=16 to 31
ink i
Bar X*16,Y to X*16+16,Y+16
inc X
next i

Print at(0,13);"indeksy 32-63"
x=1: y=y+48

For i=32 to 47
ink i
Bar X*16,Y to X*16+16,Y+16
inc X
next i

x=1: y=y+32

For i=48 to 63
ink i
Bar X*16,Y to X*16+16,Y+16
inc X
next i


for i=32 to 63
wait key
Colour i,$fff
next i
[#86] Re: Będę pisać grę. Tomb Raider!

@selur, post #85

Zapewne AMOS po prostu nakłada maskę na te wartości wygaszając wszystkie bity od 6-tego w górę, przez co wynikową wartością będzie zawsze liczba od 0-31.

wynik = numer & 0b00011111

Jest to logiczne, bo chipset OCS/ECS ma tylko 32 rejestry kolorów, ale i trochę głupie, bo utrzymuje programistę w nieświadomości, że wpisuje wartość z poza zakresu. Powinno być przynajmniej jakieś ostrzeżenie, że wartość została przycięta.

Jeśli natomiast sam sprzętowy rejestr pod danym adresem także przyjmuje tylko 5-bitów, to efekt będzie również taki sam, 32 zmieni się w 0.


Swoją drogą, ciekawy wątek jak na ppa, nawet trolle służą tu profesjonalnymi radami :)

Ostatnia aktualizacja: 07.01.2022 13:35:37 przez san_u
[#87] Re: Będę pisać grę. Tomb Raider!

@san_u, post #86

Ok, teraz będzie głupie pytanie, ale zaraz czegoś dostanę...

Dlaczego taki kod,



który powinien mi wyświetlić drugi ekran 100px niżej wyświetla coś takiego?



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

@Xandra, post #87

Spróbuj tak:
Screen Display 2,Xhard(0),Yhard(100),320,100

Przy SCREEN DISPLAY trzeba używać sprzętowych współrzędnych. Xhard i Yhard zmienia Ci współrzędne ekranowe na sprzętowe. Tak samo jest przy sprajtach.
[#89] Re: Będę pisać grę. Tomb Raider!

@tukinem, post #88

Niewiele to dało

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

@Xandra, post #89

No właśnie sam mam zawsze problemy z tym.
Wywal Xhard i Yhard i wpisz tak:
SCREEN DISPLAY 2,135,100,320,100

W książce pisze o współrzędnych sprzętowych, ale to ma się nijak. Możesz też pominąć pierwszą współrzędną, bo to nie jest ani sprzętowe, ani ekranowe i wpisać tak:
SCREEN DISPLAY 2,,100,320,100 :)



https://www.ultimateamiga.co.uk/HostedProjects/AMOSFactory/AMOSProManual/6/604.html
Z tego opisu wynika, że mają sprzętowe współrzędne, a używa się ekranowych (współrzędna Y - 100). A co do współrzędnej X, to tam pisze, że pozycja między 112 a 432 jest widoczna na ekranie. To nijak się ma do "hardware coordinates" tak tu pisze.

Ostatnia aktualizacja: 08.01.2022 07:36:11 przez tukinem
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