kategoria:
[#1] Gra komputerowa w BlitzBasic 2 - tutorial
Jest ktoś chętny na tutorial gry komputerowej od podstaw w BlitzBasicu2?

Rozważania nad wyborem silnika gry. Obsługa interfejsów, kontrola hot spotu, framework VBL,
scroll playfieldu, double buffering. etc.

Mnie ciekawi engine RTS na bazie C&C.pomysł
Widziałem na forum, że pod AMOSem leci już kurs.OK

Ostatnia aktualizacja: 07.10.2021 02:41:30 przez mrcha_67
[#2] Re: Gra komputerowa w BlitzBasic 2 - tutorial

@mrcha_67, post #1

ja jestem chetny, gdzie ten tutuorial?
[#3] Re: Gra komputerowa w BlitzBasic 2 - tutorial

@selur, post #2

Temat minimum do Hyde Park, zalecam do Rzeźni.
[#4] Re: Gra komputerowa w BlitzBasic 2 - tutorial

@selur, post #2

Dzięki Selur za poparcie.
Mogę wyjść ze wstępem do tutorialu. Dalej wszystko pójdzie już z kontry. Pewnie nawiąże się dialog i jakoś samo się potoczy z tematu na temat przez kolejne zagadnienia.

A więc najpierw engine gry.
Najpierw musimy zdecydować jakiego typu grę będziemy TERAZ tworzyć. Kwestia gustu i głodu oka.
Trzeba stworzyć katalog silników gier komputerowych.

Lista silników gier komputerowych ver 1.0
1. Engine typu R-Type [2d]>>> na scrollu playfieldu w prawo [AXIS X]
2. Engine typu JetStrike [2d]>>> na scrollu playfildu w lewo [AXIS Y]
3. Engine typu DesertStrike [2d]>>> na scrollu dwu-osiowym [AXIS X,Y]
4. Engine typy flight simulator [3d]>>> grafika RTG 3d
5. Engine typu dungeon FPP [3d] >>> grafika RTG 3d
6. Engine typu fighting (Mortal Kombat) [2d]>>> grafika komnatówka
7. Engine typu platformóka + scroll (First Samurai)
8. Engine typu platformówka komnatowa
9. Engine typu platformówka komnatowa +scroll (Flashback)
10. Engine typu isometric scroll AXIS X,Y [2d] (Last ninja)
11. Engine typu adventure point-to-clik; komatowa+ scroll [2d]
12. Engine typu Unreal [3d]
13. Engine typu racing (Lotus 2 TC) [2d]
14. Engine typu shooter (celowniczek) [2d] (Operation Wolf)
Możecie edytować listę i coś jescsze dodać. Przeklajajcie do swojego postu.

Wiekszość enginów wymaga scrollu. Od tego zaczniemy.
Do pełnej techniki potrzeba:
1. Otworzyć ekran (Screen), wybór trybu garficznego i roszdzielczości
2. Zdefiniować (stworzyć sobie) playfield - mapę 2d wiekszy! niż zdefiniowany ekran w danej rozdzielczości
3. Napisać kontrolę interfejsów: mysz, joystick, klawiatura
4. Pętla główna typu framework oparta na synchronizacji VertBlank [VBL], co ramkę będziemy obsługiwali urządzeni gry i interfejsy, obliczali w podprogramach struktury dla obiektów i otrzymywali współrzędne dla kontroli HOTSpot.
Najpierw pętla główna będzie skromna. Postramy się tylko scrollować playfield przyu pomocy interfejsów.
Napiszemy od razu wszystkie drivery dla klawiatury [klawisze kursora], [klawisze w,s,a,d], [numpad kursor],
Joysticka (scroll z centralnego HotSpotu), Myszy (krawędziowy)
Scroll playfieldu w 8x kierunkach przy różnych prędkościach. Od razu zrobimy sobie test wydajności na scroll aż pedkości za....stych! 16x linii na ramkę i wyżej!. Zobaczymy ile może BlitzBasic vs assembler.

Przede wszystkim definicja tryby graficznego dla otworzonego ekranu.
Ja myśle EHB 64 kolory 320x400 laced plus overscan. [NTSC simul]

Co myślicie? Jakieś propozycje?

Ostatnia aktualizacja: 07.10.2021 16:10:15 przez mrcha_67
[#5] Re: Gra komputerowa w BlitzBasic 2 - tutorial

@mrcha_67, post #4

"Dalej wszystko pójdzie już z kontry."


[#6] Re: Gra komputerowa w BlitzBasic 2 - tutorial

@selur, post #5

Na razie zapiszemy w miarę "goły" algorytm naszego prostego jeszcze programu w języku "blisko-basicowym"
a później zapiszemy prawdziwy kod w BlitzBasicu2, który powinien już działać.


Prosty algorytm tego co chcemy zrobić wygląda tak:

Algorytm

main: ; start głownego programu
Screen Open ; otwórz ekran dla programu
Load map.iff (or File Request$) ; ładuj mapę z dysku lub daj wybór uzytkownikowi przy pomocy file requstera
start:
Gosub framework ; startuj obsługę framework -wszystko co wisi na VBlanc'u, teraz wykonujemy!
Gosub scroll ; procedura warunkowa scroll'u w/g parametrów kontroli interface'ów
Wait Vbl ; synchronizacja przez VBL vertical blank
Goto start: ; powtórz od 'start'
end:

framework: ; podprogram do osługi całego framwork
Gosub intarface_control ; obsługa interface'ów
return

scroll: ; podprogram scroll, scrolluj (przewijaj) w/g parametrów z kontroli interfaceów
return

intarface_control: ; podprogram obsługi wszystkich interfaców
Gosub Mouse ; obsługuj mysz (skocz)
Gosub Joy0 ; obsługuj Joy0 port (skocz)
Gosub Joy1 ; obsługuj Joy1 port (skocz)
Gosub Keyboard ; obsługuj klawiaturę (skocz)
return ; (wróć)

Mouse: ; podprogram dla myszy
return

Joy0: ; podprogram dla joy0
return

Joy1: ; podprogram dla joy1
return

Keyboard: ; podprogram dla klawiatury
return

Teraz tylko zapis w języku BlitzBasic 2...
[#7] Re: Gra komputerowa w BlitzBasic 2 - tutorial

@mrcha_67, post #6

Nasza procedura może być oczywiście szybsza, ale nie będzie aż tak strukturalna i czytelna na potrzeby tutorialu.
Optymalizację szybkości programu wykonujemy na samym końcu, przenosząc co się da wyżej, to w strukturze kodu, to do programu głównego. Uwaga jednak! Mogą przydarzyć się błedy podczas optymalizacji. Może pomóc stara wersja kodu zapisana jako bckp bezpieczeństwa.

Co do trybu graficznego: zależy jaką grę chcemy stworzyć. Do wektorówek może starczyć HiRes z 16 kolorami.
Przydałoby się dla wszystkich symulatorów dysponować takim trybem przy np. 16 fps. Wraz z półcieniami hatch'owymi i ditheringiem może być OK.
Przygodówki wymagają dużo kolorów. Wtedy LoRes z EHB. Można stosować grafikę z renderami nawet w LoResie.
Dobrze wychodzi tryb LoRes 320x400 pkt w NTSC. Pixel jest quasi HiRes'owy przy dużej ilości kolorów np. 64 EHB. Sekwenncje FMV można puścić jako HAM z HD lub CD-ROM. Brakuje mi trochę pełnego overscanu na szerokość jako 384 pkt. Jest 368. Szesnaście punktów do mojej perfekcji...(w kategorii LoRes!). Grywam na MAME pod PC. Ulubione gry często posiadają rozdzielczość 384x224.
Kompresowałem podręczne filmy DivX na 384x240 i jakość wyszła mi super! Po przejściu odtwarzacza na pełny ekran i filtrowaniu smooth miałem jakość DVD. (DivX LowMotion FourCC:MP43)
Oczywiście można się odnieść do Nvidia GTX i RTX współczesnych PC. Ale przecież my tylko przy kawie na Amigowym poletku...

Przyznam odnoszę się do gier na OCS/ECS nie do AGA. Ale tutorial gry komputerowej powinien przecież pasować do AGA version.

Przy otwieraniu ekranu nie ma dużych problemów. Jaki tryb się wybierze taki się przecież otworzy, a przy skrollu prędkość możemy regulować.
[#8] Re: Gra komputerowa w BlitzBasic 2 - tutorial

@mrcha_67, post #7

Teraz pora na trochę kodu. Zanim złożymy całą procedurę odczytu mapy z dysku zapisanej w IFF, najpierw wyjaśnimy kolejne zagadnienia związane z otwieraniem ekranu. Poniżej program, który otwiera ekran pod WB w trybie HiRes 640 x400 pkt.

Moze być taki. Byle skonwertowny np w przgladarce XnView do IFF. Ma tylko 16 kolorów.
Kod pozwala wybrać z dysku np .Dh0: dowlny obrazek HiRes i wyswietli na otworzonym ekranie.
==================================
Program 1
WBStartup
Screen 1,28,"Hello World!, Intuition"
Window 0,40,20,520,180,$1000,"Console window",1,2

MaxLen path$=192
MaxLen name$=192

path$="Dh0:"

Map$=FileRequest$("Chooose MAP",path$,name$)

LoadPalette 1,Map$
NewPaletteMode Off
Use Palette 1

Load Screen 1,Map$,1

MouseWait

=============================

Na razie wyświetla tylko IFF i bez dekodu na bitmapę.
Teraz scroller. Prosty przykład znajdziemy w pliku wraz z instrukcją w AmigaGuide.
Po modyfikacji wyświetla skrolowany ekran z róznymi predkościami, szybko i płynnie. Tzw. smooth scrolling.
=============================
;Program 2
BLITZ
Mouse On

BitMap 0,1280,1024,4

; ile bill narysować
For I=1 to 250
Circlef Rnd(640-16),Rnd(512-16),Rnd(16),Rnd(16)
Next
; odbicia brusha
Scroll 0,0,640,512,640,0
Scroll 0,0,1280,512,0,512
; CopperLIST na Hires, 16 kolorów, smooth scroll
InitCopList 0,$114

CreateDisplay 0
; Sterownie myszą synchronizowane przez VertBlank
While Joyb(0)=0
VWait
xa=QLimit(xa+MouseXSpeed,-10,10)
ya=QLimit(ya+MouseYSpeed,-10,10)
x=QWrap(x+xa,0,640)
y=QWrap(y+ya,0,512)
; Scroll bezpośredni
DisplayBitMap 0,db,x,y
Wend

End

==========================


Ostatnia aktualizacja: 12.10.2021 02:37:02 przez mrcha_67
[#9] Re: Gra komputerowa w BlitzBasic 2 - tutorial

@mrcha_67, post #8

Na Amigę przydała by się gra w stylu close combat od kochanego Microsoftu czyli realistyczna gra wojenna taktyczna
dałbyś radę iść w tym kierunku z tutorialem ?
[#10] Re: Gra komputerowa w BlitzBasic 2 - tutorial

@Jupiler, post #9

Moze być. Jokoś chyba sam "wejdzie" w zakres tutorialu.
[#11] Re: Gra komputerowa w BlitzBasic 2 - tutorial

@mrcha_67, post #10

zróbcie tutoriala do Knights of Xentar. To wtedy go własnoręcznie przeczytam i zrobię porta, bo Amiga nadal nie ma ANI JEDNEGO JRPG i właśnie przez to upadła.
[wyróżniony] [#12] Re: Gra komputerowa w BlitzBasic 2 - tutorial

@snajper, post #11

Zróbcie ma dziś wolne, ale mogę ci dać numer telefonu do niego i sam go poprosisz.
2
[#13] Re: Gra komputerowa w BlitzBasic 2 - tutorial

@KM_Ender, post #12

Teraz przygotowuję pełna wersję programu ze scrollem naszej custom -mapy. Doczyt będzie z dysku po scieżce do edycji (na własne potrzeby).
Scroll to najważmiejsze. A potem blity custom Shape'ów.(Panel) Wyswietlanie animacji na plafieldzie w sposób statyczny (FMV full motiuon video - filmik) oraz w sposób dynamiczny na HotSpot'cie (bohater, jednostki ruchome).
To na początek powinno wystarczyć.
[#14] Re: Gra komputerowa w BlitzBasic 2 - tutorial

@mrcha_67, post #13

Jest już program do scrollu playfieldu z map typu IFF.
=============================
;Program 3
BLITZ
Mouse On

BitMap 0,640,400,4

ILBMGrab ?Map,0,1

; CopperLIST na Hires, 16 kolorów, smooth scroll
InitCopList 0,$114

DisplayPalette 0,1
CreateDisplay 0

; Sterownie myszą synchronizowane przez VertBlank
While Joyb(0)=0
VWait
xa=QLimit(xa+MouseXSpeed,-10,10)
ya=QLimit(ya+MouseYSpeed,-10,10)
x=QWrap(x+xa,0,640)
y=QWrap(y+ya,0,400)
; Scroll bezpośredni
DisplayBitMap 0,db,x,y
Wend

End

Map: IncBin "Dh0:Res/Tiberian_Sun.iff"
==========================

Program scrolluje mały obszar za to panoramicznie. Plik IFF ma rozdzielczość 640x400 czyli HiRes +Lace
Niestety komenda InitCopList 0,$114 miodu nie dała. Tylko Hires bez LACE! i kolor przy scrollu pionowym trochę przeskakuje, a poziomy scroll trzyma. Prędkość można zmieniać scrollem myszy. A w kodzie szlify mogą dawać dololną pędkość -10,10 na np. -20,20.
Można już scrollawać duuuże playfieldy, własne np. 3648x 3400 po wymianie niektórych linii kodu.
A propos: Czy ktoś ma już InitCopList na wersję z LACE?

Mapę trzymamy na DH0: w katalogu /Res
U mnie plik się nazywa Tiberian_Sun.iff



Ostatnia aktualizacja: 12.10.2021 19:56:18 przez mrcha_67
[#15] Re: Gra komputerowa w BlitzBasic 2 - tutorial

@mrcha_67, post #14



Ostatnia aktualizacja: 12.10.2021 20:08:27 przez mastaszek
3
[#16] Re: Gra komputerowa w BlitzBasic 2 - tutorial

@mastaszek, post #15

OK
[#17] Re: Gra komputerowa w BlitzBasic 2 - tutorial

@mastaszek, post #15

Dla kogo pisze się tutorial? Manual?
[#18] Re: Gra komputerowa w BlitzBasic 2 - tutorial

@mrcha_67, post #17

Jest już program do scrollu mapy levelu. HiRes (bez lace'u - na razie...) Smooth and fast!
=============================
;Program 4
BLITZ
Mouse On

BitMap 0,640,400,4

ILBMGrab ?Map,0,1

; CopperLIST na Hires, 16 kolorów, smooth scroll
InitCopList 0,34,400,$00114,8,16,0
MouseArea 0,0,640,400


DisplayPalette 0,1
CreateDisplay 0

; Sterownie myszą synchronizowane przez VertBlank
While Joyb(0)=0
; Synchro Vbl
VWait
; Scroll bezpośredni
DisplayBitMap 0,db,MouseX,MouseY
Wend

End

Map: IncBin "Dh0:Res/Tiberian_Sun.iff"

=============================

Ostatnia aktualizacja: 13.10.2021 23:47:43 przez mrcha_67
[#19] Re: Gra komputerowa w BlitzBasic 2 - tutorial

@mrcha_67, post #18

Na razie napotkałem dziwny problem w BlitzBasic 2. W trybie - Amiga -jest dostępny w prosty sposób interlace nawet do Hi-resu. Za to ekran otworzony pod Workbenchem, WBStartup nie roluje.
W trybie - BLITZ - jakby odrotnie ROLUJE i to super-fast! za to nic nie pomaga na włączenie INTERLACU do Hi-resu. ??????
Na razie piszę pod wersją 2. Muszę trochę posprawdzać inne wersje oraz dodatkowe biblioteki. Jak ktoś ma gotowca to niech już pisze. Może AmiBlitz 2.42, ...3.6,...3.8,...coś pomogą.
Nie chce mi się tylko czyścić stajni Augiasza z całego gówna szlajarskich procedur wpakowanych do .libs i wrzuconych na Aminet. Gry komputerowe możemy pisać lub dama, ale przeczyszczać kompilator powinien ktoś za pieniądze.
Brakuje optycznie fajnych funkcji
MoveCopList 0,1 ;przekopiuj na inną
LoadCopList 0 ;z dysku
SaveCopList 0 ;na dysk
ForceCopList 0 ;użyj CopperListy systemowej do trybu BLITZ
DeleteCopList 0 ;kasuj w pamieci

InitCopList działa, 'types' nie posiada wartości kodowanej flagi na INTERLACE???pomysł

SetBPLCON0 $C004 można wpiasać, bo wchodzi ale nie odnosi sie efektu.
Zagubiony interlace w trybie BLITZ ?
Nie mozna scrollować w prosty sposób po AMIGA mode i start z WB.
[#20] Re: Gra komputerowa w BlitzBasic 2 - tutorial

@mrcha_67, post #19

Projekt upadł? Może coś można pomóc? czytam wątek i ciekawie brzmi.
[#21] Re: Gra komputerowa w BlitzBasic 2 - tutorial

@tukinem, post #20

Przecież to był troll. Konto skasowane.
[#22] Re: Gra komputerowa w BlitzBasic 2 - tutorial

@mailman, post #21

Szkoda, myślałem że jakiś wspólny projekt by się szykował... No nic wracam do swojej roboty i już nie rozgrzebuję kotletów.
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