[ Aleksandar Ružičić @ 07.03.2008. 14:52 ] @
Pozdrav svima,

ova tema je namenjena projektu pod nazivom EliteTanks (to mi palo napamet, ako imate boljih ideja recite, pa da menjamo naziv) a tema projekta je izrada igre po uzoru na "tenkice" koje smo svi mi igrali nekad davno dok smo jos bili deca :)

elem, cilj projekta je da malo promovisemo FreeBasic na EliteSecurity forumima i da napravimo nesto korisno, da naucimo nesto novo iz toga i pre svega da se dobro zabavimo :D

ova igra moze da se napise bukvalno u jednom modulu (.bas-u) i nema potebe za nekim preteranim AI-em a pogotovu ne za scripting podrskom, ali mi cemo bas sve to da ubacimo u ovu igru, jer kao sto rekoh hocemo da naucimo nesto iz ovoga, a ne da "sto pre zavrsimo"...

inace, "engine" igre cemo kasnije izolovati, malo ga doterati i iskoristiti za neke kasnije poduhvate. a engine (neka "codename" bude EliteGameEngine) treba da bude sastavljen od sledecih delova/modula:

• GFX module - deo zaduzen za iscrtavanje na ekran, trebao bi da koristi double buffering tehniku i da ima neke objekte tipa sprite, animated stripe, layer i sl (dovoljno je proslediti objekat Draw funkciji i on ce biti nacrtan na trenutnoj poziciji, frejmu i slicno)
• SOUND module - za muziku i zvucne efekte, ja sam za to da se koristi BASS biblioteka (em je poznajem, em je free, em je super :D)
• AI module - za pocetak nek bude samo implementiran A* path finding algoritam (to nam jedino treba za EliteTanks)
• MAP module - za rad sa mapama - ucitavanje, generisanje minimape, kontrolisanje skrolovanja i slicno
• SCRIPTING module - podrska za skriptovanje, jezik treba da bude typeless, sa basic sintaksom i podrskom za objekte
• NET module - podrska za igranje preko mreze - ovo cemo kasnije da radimo, cisto da se zna da je u planu...

"pomocni" alati koji su potrebni:
• Map editor
• Script compiler (bolje je da skripte budu kompilovane nego interpretirane - brzina ucitavanja i izvrsavanja je bitna u ovom slucaju)

Sto se tice grafike za pocetak cemo da koristimo sprajtove iz SpriteLib GPL-a, a kasnije mozemo da uradimo i nesto nase (za pocetak nam je grafika najmanji problem...)


Projektu moze da se pridruzi ko god hoce, jedini uslovi su da taj neko dovoljno poznaje FreeBasic (koji je lako nauciti ukoliko imate nekog iskustva u qbasic-u, c-u, vb-u tj u bilo kom jeziku...) i da ozbiljno hoce da se ukljuci u rad na projektu.

za sada su ukljuceni sledeci clanovi (u zagradi je navedeno za sta je ko zaduzen):
stefanpn (AI,MAP Editor)
krcko (SCRIPTING, GFX)
Aleksandar Vasic (SOUND)

ukoliko ste zainteresovani da se prikljucite projektu mozete se za to obratiti u ovoj temi, samo navedite sta zelite i mozete da uradite.

sav source cemo objavljivati ovde na es-u, i delimicno ce se diskusija voditi u ovoj temi, ali ce uglavnom svi dogovri ici preko irc-a (#freebasic @ irc.elitesecurity.org) ili msn-a




[Ovu poruku je menjao Aleksandar Ružičić dana 13.03.2008. u 23:55 GMT+1]
[ Shadowed @ 07.03.2008. 15:18 ] @
Mozda nije lose da prvo sto pre zavrsite (naravno, da radi kako treba) pa da onda dodajete sve i svasta. Korisno po moral.

My 2c
[ Aleksandar Ružičić @ 07.03.2008. 15:57 ] @
pa pitanje je koliko ko ima slobodnog vremena i volje da trosi isto na programiranje, ja ga imam stvarno malo (fax, pos'o, studentski zivot :D) ali cu svo slobodno vreme uloziti u ovaj projekat pa kad bude gotov bice...

iz tih razloga nikakav timelimit nije i nece biti postavljan, jednostavno "kad bude gotovo bice" :)


mada to za podizanje morala je na mestu :)
[ Eurora3D Team @ 07.03.2008. 16:43 ] @
Mislim da bi bilo dobro da ste odredili i IDE u kom ce da se radi. Recimo mene najvise nervira kad skinem neki kod i moram da ga prebacujem na IDE koje imam. Ja sam skinuo pre neki dan FbEdit IDE i mislim da je dobro (pogotovo za GUI programe) ...
Ovo da FreeBasic moze da se nauci za 2 dana ... neverujem. Ja recimo programiram profesionalno u VB6 i C++ zadnjih 5 godina a assembler znam skoro od kad sam bio mali , pa nebi mogao nista posebno da uradim u FreeBasicu za 2 dana (neke stvari koje radim u VB verovatno ni za 2 meseca).
Tu je stvar koliko ko ima iskustva u necemu (i uradjenog ili skupljenog koda)
Pa nebi bilo lose da stavite ovde neki kompleksniji kod koji demonstrira npr koriscenje spoljnjih dll fajlova (nisu sve API fn ubacene u FreeBasic) i kako se to linkuje.
Npr sta ako neko hoce da koristi neki svoj dll napisan u c jeziku i slicno.
Ne pisem ovo zbog sebe ... (iako ne znam mogao bi to da pronadjem brzo) ... al neko ko bi hteo da ucestvuje treba da ima bar neku osnovnu predstavu o FreeBasic jeziku , pogotovo sto pominjes koriscenje spoljnih biblioteka ...
Predlog
Razmislite da kompajlujete igru i kao dll sa jednom glavnom funkcijom kojoj bi se preneo hWnd glavnog prozora.
Ako napravite to obecavam da cu da vam napravim plug-in i ActiveX (u c++) za browsere pod windowsom da bi moglo da se igra i u browseru.
Pozdrav
[ Aleksandar Ružičić @ 07.03.2008. 17:01 ] @
pa ako imas programersko iskustva, i ako znas da razmisljas na "programerski nacin" onda ne bi trebao da imas problema da naucis novi jezik, jer nista novo ti ne ucis osim nove sintaxe, tu je gomila primera koja ti pomaze da se snadjes u novoj sintaksi a tu je i manual :) od cijeg kvaliteta zavisi koliko brzo neko moze da nauci taj jezik, recimo PHP manual je odlicno uradjen i meni je trebalo 4-5 dana da se snadjem u php-u i napisem prvu vecu aplikaciju u istom. nista novo ja tu nisam naucio osim php sintaxe, razmisljam isto i kao da resavam problem u vb-u, c-u ili pascalu (naravno svaki jezik je za nesto specifican i nudi ti laki nacin da uradis odredjeni posao od ostalih, ali sve sto znas da napises u jednom jeziku znas i u bilo kom drugom, samo da se malo izvezbas u novoj sintaksi...)

sto se tice koriscenja dll-ova imas primera u /examples/ a i u dokumentaciji


e da, i sto se tice IDE-a koristimo FBEdit, mislio sam da se to podrazumeva :)
[ Eurora3D Team @ 07.03.2008. 17:38 ] @

Hvala ... sad si me prosvetlio
Ja sam postavljao pitanja kao sto bi to radio pocetnik ... i zbog njih.
Ja sam ucio (mislim) 5 programskih jezika do sad (asm,c++,vb,java,i c) i znam kako to ide.
Posle ucenja sintakse dolazi bolan i mucan period ucenja na greskama i upoznavanja IDE i kompajlera (i njegovih mana i vrlina).
Za neke stvari treba da se nauci i instalira jos ++ Npr ti si za PHP instalirao npr Apache (verovatno i mySQL) i citao njihovu dokumentaciju ucio da pravis baze i tabele itd. Slicno je i ko hoce da programira za MS SQL Server ...
Inace nije mi bila namera da obeshrabrujem ljude .... jedino mislim da se nesto bolje sagleda ako se gleda iz vise uglova , pa samim tim su i vece sanse da se uradi. FreeBasic je ozbiljan jezik ...
FbEdit i ja mislim da je najbolje FreeBasic IDE http://www.radasm.com/fbedit/
Imam i njegovo RadAsm za assemblere.
A cime debugujes , ovaj njihov debuger je komplikovan ...
Pozdrav Sale
[ Aleksandar Ružičić @ 07.03.2008. 17:44 ] @
sto se tice formata MAP fajlova, moje predlog je sledeci:

binarni fajl u little endian formatu cija struktura izgleda ovako (uglaste zagrade prestavljaju 1 byte, viticaste vise bajtova a "normalne" prestavljaju zero terminated wide string tip):
Code:

{HEADER}{DATA}

gde je {HEADER}:
[E][L][I][T][E][M][A][P] {VERSION:32b} (map name) {WIDTH:16b} {HEIGHT:16b} {HASH:32b} {FLAGS:32b}

a {DATA} niz bajtova:
[0,0][0,1]...[0,WIDTH-1][1,0][1,1]...[1,WIDTH-1]...[HEIGHT-1,WIDTH-1]



objasnjenje:

VERSION - 32bitni unsigned integer koji predstavlja verziju ELITEMAP formata (verovatno necemo menjati format, ali za svaki slucaj)
map name - naziv mape (wide string kao sto sam rekao, u LE 16bit Unicode formatu)
WIDTH - 16bitni unsigned integer koji predstavlja sirinu mape
HEIGHT - 16bitni unsigned integer koji predstavlja visinu mape
HASH- 32bitni unsigned integer koji predstavlja hash vrednost mape (tj DATA byte niza) - ovo cemo koristiti kasnije kad bude bio implementiran online sistem igranja (za sada moze da bude 0 dok ne odlucimo koji hash algoritam da koristimo)
FLAGS - 32bitni unsigned integer koji predstavlja razne flegove, recimo jedan bajt moze biti rezervisan za tileset index (koji set slicica se koristi u mapi) i slicno...

jel ima neko primedbi, sugestija?

ako ne, onda stefane zasuci rukave i pocni :)
[ Aleksandar Ružičić @ 07.03.2008. 17:46 ] @
Citat:
Eurora3D Team:A cime debugujes , ovaj njihov debuger je komplikovan ...

pa i nije komplikovan nesto mnogo :)
to je ustvari GDB (GNU Debugger) a Insight je samo GUI za GDB... snadjes se brzo :)
[ stefanpn @ 07.03.2008. 17:57 ] @
Predlazem da se u map datoteku doda i neki komentar o datoteci

Code:

{HEADER}{DATA}

gde je {HEADER}:
[E][L][I][T][E][M][A][P] {VERSION:32b} (map name) {WIDTH:16b} {HEIGHT:16b} {HASH:32b} {FLAGS:32b}

a {DATA} niz bajtova:
[0,0][0,1]...[0,WIDTH-1][1,0][1,1]...[1,WIDTH-1]...[HEIGHT-1,WIDTH-1]
{COMMENT}


Evo i ovde originalnih tenkica, ako neko nije video tamo: Tenkovi i emulator

Mozda je ova tema vise za GameDev.
[ Aleksandar Ružičić @ 07.03.2008. 18:14 ] @
moze i comment da se doda, s tim sto to treba da bude opciono, moze npr jedan bit u FLAGS integeru da znaci ima komentara/nema komentara, a ako ima komentara onda on treba da bude izmedju {HEADER} i {DATA}, nekako mi nije dobra ideja da bilo sta ide posle DATA...

znaci od 32 flega iskoristili smo do sad 5, prva 4 formiraju tileset index, a peti oznacava prisustvo komentara.


sto se tice komentara da je tema za GameDev, verovatno si u pravu, ali ipak mislim da je bolje da bude ovde, bar dok je ne zavrsimo, a kasnije moze da se prebaci u GameDev, jer jedan od razloga sto ovo radimo je da priblizimo FreeBasic onima koji jos nisu culi za njega, a to cemo najbolje da uradimo (tj uticacemo na najveci broj ljudi) ovde jer su na GameDevu-u uglavnom C\C++ programeri...

[Ovu poruku je menjao Aleksandar Ružičić dana 07.03.2008. u 19:44 GMT+1]
[ Aleksandar Ružičić @ 07.03.2008. 19:14 ] @
evo, konacno sam ispodesavao FBEdit kako mi odgovara i pocecu da radim na kompajleru za FBScript, tacnije prvo cu da napisem TokGen - alat za generisanje leksickih parsera...

evo moje VS-like teme za FBEdit:
Code:

[Themes]
.
.
.
6=Visual Studio,8388608,255,0,0,0,0,0,0,0,0,268435584,128,8388608,8404992,8421376,0,0,0,16777215,0,10485760,16777215,37781504,64,0,16777215,16777215,15329769,16777215,15132390,0,0,16777215,0,16777215,0,12644592,0,12644592,0,4194432


samo sto sam ja sve tokene ubacio u C0, C1, C10 i C11 grupe, pa mi sad [Edit] izgleda ovako:
Code:

EditFont=-15,0,Courier New
LnrFont=-12,0,Courier New
EditOpt=4,0,0,1,0,1,4,1,0,1,1,1,1,0,0,1,1,1,1,1
CodeFiles=.bas.bi.
CaseConvert=CWPp
CustColors=12644592,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
Colors=8388608,255,0,0,0,0,0,0,0,0,268435584,128,8388608,8404992,8421376,0,0,0,0
C0="abs Abs access Access acos alias Alias allocate And Any append Append as As asc Asc asin asm atan2 atn Atn base Base Basic beep Beep bin bin$ Bin$ binary Binary bit bitreset bitset bload BLoad bsave BSave byref ByRef byval ByVal call Call callocate Calls Case Cast CByt cbyte CCur cdbl CDbl cdecl Cdecl chain Chain chdir ChDir ChDrive Chr chr$ Chr$ cint CInt circle clear Clear clng CLng clngint close Close cls Cls color Color Com command command$ Command$ common Common CompileLine CompileLine$ condbroadcast condcreate conddestroy condsignal condwait Const Constructor continue cos Cos cshort csign csng CSng csrlin CsrLin cubyte cuint culngint cunsg curdir CurDir$ cushort Cvb Cvc cvd Cvd cvi Cvi cvl Cvl cvs Cvs data Data date date$ Date$ deallocate Declare Def defbyte DefCur DefDbl defined DefInt DefLng defshort DefSng DefStr defubyte defuint defushort Destructor dim Dim dir dir$ Dir$ DisableBOPT DisableFold DisableIncDec DisablePeriodMsg DisableShifts DisableTest DisableTrim do Do draw dylibfree dylibload dylibsymbol dynamic Else ElseIf End EndIf enum environ Environ environ$ Environ$ eof Eof eqv Eqv erase Erase ErDev ErDev$ Erl err Err error Error Error$ escape Event exec exepath exit Exit exp Exp explicit Explicit export extern False Field FileAttr Files Fix fix flip For for Fortran Fre fre FreeFile freefile Function Get get getkey getmouse Go GoSub gosub GoTo goto hex Hex$ hex$ hibyte hiword If iif Imp imp InKey$ inkey$ Inp inp Input input Input$ input$ Instr instr Int int IoCtl IoCtl$ Is is Key Kill kill LBound lbound lcase LCase$ lcase$ left Left$ left$ Len len Let let Lib lib Line line LineNumber List lobyte Loc loc Local local Locate locate Lock lock Lof lof Log log Loop loop loword LPos LPrint LSet lset ltrim LTrim$ ltrim$ mid mid$ Mkb$ Mkc$ mkd Mkd$ mkd$ MkDir mkdir mki Mki$ mki$ mkl Mkl$ mkl$ mklongint mks Mks$ mks$ mkshort Mod mod multikey mutexcreate mutexdestroy mutexlock mutexunlock Name name Namespace Next next Not Null oct Oct$ oct$ Off Offset On on once Open open Operator Option option Or Out out Output output overload paint palette Pascal pascal pcopy Peek peek PeekByte PeekCurr peeki PeekLong peeks PeekWord Pen Play pmap point Pointer Poke poke PokeByte PokeCurr pokei PokeLong pokes PokeWord Pos pos Preserve preserve preset Print private procptr Property pset public Put put Random random Randomize randomize Read read reallocate ReDim redim Rem Reset reset Restore restore Resume resume resume Return return rgb right Right$ right$ RmDir rmdir Rnd rnd Rol Ror RSet rset rtrim RTrim$ rtrim$ Run run Sadd sadd Scope Screen screen screencopy screeninfo screenlock screenptr screenres screenset screenunlock Seek seek Seg Seg$ Select setenviron SetMem Sgn sgn Shared shared Shell shell Shl Shr Signal Sin sin sizeof Sleep sleep Sound space Space$ space$ Spc spc Sqr sqr Sseg Ssegadd Stack Static static Stdcall stdcall Step step Stick Stop stop Str Str$ str$ strcat strchr strcmp strcpy Strig String$ string$ strlen strncat strncmp strncpy strptr strrchr strstr Sub swap Syscall system Tab tab Tan tan Test TestNot Then threadcreate threadwait time Time$ time$ Timer timer To to trim Trim$ trim$ True Type UBound ubound ucase UCase$ ucase$ union unlock Until until Using using va_arg va_first va_next Val val val64 valint Var VarPtr varptr VarPtr$ VarSeg view wait wend while width WinCon window windowtitle WinGui with write Xor "
C1="#define #else #elseif #endif #endmacro #error #if #ifdef #ifndef #inclib #include #libpath #line #macro #pragma #print #undef "
C2=""
C3=""
C4=""
C5=""
C6=""
C7=""
C8=""
C9=""
C10="#define #include ACCELERATORS ALT AUTOCHECKBOX AUTORADIOBUTTON BEGIN BITMAP BLOCK CAPTION CLASS COMBOBOX CONTROL CURSOR DIALOGEX DISCARDABLE EDITTEXT END EXSTYLE FALSE FILEOS FILETYPE FILEVERSION FONT GROUPBOX ICON LISTBOX LTEXT MENU MENUITEM NOINVERT NULL POPUP PRODUCTVERSION PUSHBUTTON SEPARATOR SHIFT STRINGTABLE STYLE TRUE VALUE VERSIONINFO VIRTKEY "
C11="__DATE__ __FB_BIGENDIAN__ __FB_DEBUG__ __FB_DOS__ __FB_ERR__ __FB_LANG__ __FB_LINUX__ __FB_MAIN__ __FB_MIN_VERSION__ __FB_MT__ __FB_OPTION_BYVAL__ __FB_OPTION_DYNAMIC__ __FB_OPTION_ESCAPE__ __FB_OPTION_EXPLICIT__ __FB_OPTION_PRIVATE__ __FB_OUT_DLL__ __FB_OUT_EXE__ __FB_OUT_LIB__ __FB_OUT_OBJ__ __FB_SIGNATURE__ __FB_VER_MAJOR__ __FB_VER_MINOR__ __FB_VER_PATCH__ __FB_VERSION__ __FB_WIN32__ __FILE__ __File_Nq__ __FUNCTION__ __Function_Nq__ __LINE__ __PATH__ __TIME__ "
C12=""
C13=""
C14=""
C15=""
C16=""
C17=""
C18=""
C19=""
[ steve585 @ 07.03.2008. 20:14 ] @
Rado bih se ukljucio, ali nikad do sada nisam radio sa Free Basic-om. Instalirao sam, FreeBasicEditor, pa cu pokusaati skontati o cemu se radi.
[ Eurora3D Team @ 07.03.2008. 20:19 ] @
Code:

2=Black Night,16744448,16744448,16744448,8421440,16711680,33521664,16744448,16744448,16744448,33521664,285179904,16744448,4227327,16711680,16711680,16711680,65535,65535,0,12632256,10485760,16777215,8454143,16777215,255,4868682,15420,3158064,12632256,8421504,8388608,8421504,15263976,0,15329769,0,12644592,0,12644592,0,4194432

Ovako cuvas oci :) ... jos ako imas TFT ...
[ Aleksandar Ružičić @ 07.03.2008. 20:52 ] @
ma koje oci, one su odavno otisle u aut (vec godinu dana nosim -0.5 dioptriju), imam TFT ali ipak navika je navika :)

@steve585: ako ti se svidi freebasic (verujem da hoce) mozes se prikljuciti kad hoces, uvek ce imati nesto da se radi (ako ne u ovom onda nekom drugom projektu)
[ Shadowed @ 07.03.2008. 21:20 ] @
Cek malo, sta prestavlja ono u data delu map fajla? Obelezavas svaki pixel da li je teren ili ne? Ili samo navods koji jeste?

Trebalo bi odluciti da li je teren konveksan ili ne, odnosno da li moze postojati deo koji se "nadnosi" na ostatak. Kod tenkova obicno nije tako, vec u tom slucaju "zemlja" padne dole. Ako hocete tako, onda teren mozete jednostavno definisati visinama na svakoj koloni piksela.

Nadam se da je ikom jasno sta sam hteo da kazem, skroz sam zakomplikovao a mrzelo me crtati.. :)
[ stefanpn @ 07.03.2008. 22:20 ] @
Mmm... Nije ovo teren vec mapa(ovo je 2D aplikacija) tako da nema visine...
Mapa je u stvari matrica u koju su upisane vrednosti koje oznacavaju sta se nalazi na poljima od 32x32 pixela.
Znaci nesto kao ovo:
Code:

 _______________________
| E1|   |   |   |   | E2|
|___|___|___|___|___|___|
| P | P |   | P | P | P |
|___|___|___|___|___|___|
| P | P |   |   |   |   |
|___|___|___|___|___|___|
| c |   |   | P | P |   |
|_z_|___|___|___|___|___|
|   |   |   | P |   |   |
|___|___|___|___|___|___|
| P |   | P | P |   | P |
|___|___|___|___|___|___|
|   |   |   |   |   |   |
|___|___|___|___|___|___|
|   | T | O |   |   |   |
|___|___|___|___|___|___|

Gde je
T = tenk
P = prepreka
O = ptica
E1 = neprijatelj 1
E2 = neprijatelj 2
C = pesak
Z = zbun
S' tim sto cemo mi to P(prepreka) predstaviti kao 1 ili 2 ili 3 ili ... u zavisnosti od toga koja je prepreka u pitanju.

EDIT: Ruza me je prosvetlio, tako da sad imamo za svako polje po dva bajta, da mozemo imati delove koji se "nadnose".

[Ovu poruku je menjao stefanpn dana 07.03.2008. u 23:53 GMT+1]

[Ovu poruku je menjao stefanpn dana 07.03.2008. u 23:54 GMT+1]
[ Aleksandar Ružičić @ 07.03.2008. 22:24 ] @
ja mislim da sam razumeo sta si hteo da kazes :)

i u originalnim tenkicima ima "konveksnih" delova, tj imas kao onu "kamuflazu" koja predstavlja zbun, i mozes da prodjes ispod njega (tenkic se nalazi ispod tog zbuna, koji je mestimicno providan pa lepo vidis da je tenkic ispod)
ja sam i to imao u vidu, i to se uklapa u ovaj format map fajla.

sto se tice DATA sekcije, to je niz bajtova koji predstavljaju polja, a ne pixele (polje ce biti mozda 30x30px ili nesto slicno, videcemo). i svaki taj bajt ustvari sadrzi dve vrednosti (2 nibble-a), prva 4bita predstavljaju index "donjeg" elementa a druga 4bita predstavljaju index "gornjeg" elementa (koji naravno moze biti izostavljen). i kada se crta frejm prvo se iscrtaju sva polja ali crta se samo donji element, onda se iscrtaju svi sprajtovi i na kraju se za svako polje iscrta gornji element (naravno ovo ce biti optimizovano, jer nema potrebe da se drugi put radi ceo For .. Next, najverovatnije ce se kad se ucitava mapa kreirati i pomocni niz koji ce sadrzati indexe onih polja koja imaju podesene elemente - tako mi je nekako najlogicnije)

e sad, ova podela bajta na dva dela od 4bita ogranicava broj mogucih elemenata koji je u ovom slucaju 2^4 = 16 za donji element i 15 za gornji (kada su druga cetiri bita = 0 onda nema gornjeg elementa)...

mozda je bolje da za donji element rezervisemo 7 bitova, pri cemu je MSB rezervisan kao fleg koji oznacava pristustvo/odusustvo gornjeg elementa, e sad ukoliko nema gornjeg elementa (prvi bit = 0) onda sledecih 7 bitova (tacnije ceo taj bajt) predstavljaju index elementa (time dobijamo 2^7 = 128 razlicitih elemenata), a ukoliko je msb podesen onda je trenutni bajt pracen sa jos jednim bajtom koji predstavlja index (ovog puta 255 razlicitih vrednosti) gornjeg elementa.
ovo jeste bolje sto se tice broja mogucih slicica (iako je za tenkice sasvim dovoljno 16 razlicitih elemenata) ali je malo teze za ucitavanje (ne moze jednostavno da se ucita sve u byte niz), mada uz For petlju ni ovo nije tesko ucitati...

neka stefan odluci :)
[ Shadowed @ 07.03.2008. 22:25 ] @
OK, onda sam ja pogresno skontao o cemu se radi u igri :)
[ Aleksandar Ružičić @ 07.03.2008. 22:36 ] @
nije stvar samo u ovoj konkretnoj igri, hocemo da napravimo nesto sto se kasnije moze primenljivati i na druge tipove igara...
[ stefanpn @ 07.03.2008. 23:01 ] @
Informacija za sve posetioce: chat o freebasic-u i ovoj temi na http://www.elitesecurity.org/chat na kanalu #freebasic



[Ovu poruku je menjao stefanpn dana 08.03.2008. u 00:45 GMT+1]
[ Shadowed @ 08.03.2008. 00:53 ] @
Ili, ako koristite neki irc klijent - server irc.elitesecurity.org
[ stefanpn @ 08.03.2008. 02:11 ] @
Mislim da bi tema trebala da se preimenuje iz "[FreeBasic] EliteTanks projekat" u "[FreeBasic] EliteTanks projekt", nekako mi lepse zvuci...



[Ovu poruku je menjao Aleksandar Ružičić dana 06.04.2008. u 18:09 GMT+1]
[ Aleksandar Vasic @ 08.03.2008. 13:20 ] @
eo ja bi da se prikljucim ali ne znam koliko cu moci da pomognem :D
[ Aleksandar Ružičić @ 08.03.2008. 14:30 ] @
sta bi hteo da radis?
[ Aleksandar Vasic @ 08.03.2008. 16:25 ] @
pa jedino sto sam radio od ovoga je,sound sa bibliotekom bass ;)
[ Aleksandar Ružičić @ 09.03.2008. 15:45 ] @
ok, onda ti radi funkcije za zvuk!

evo otprilike sta je potrebno:
• mogucnost pustanja "background" muzike (potrebna je kontrola jacine zvuka, "auto repeat", nasumicno odabiranje numera iz liste koje moze da se iskljuci takko da se pesme pustaju redom u kom se nalaze u listi)
• funkcije za zvucne efekte, pri cemu treba jedna f-ja koja se zove (npr) PlayFX koja prima 4 parametra od koja su tri opciona:
Code:
Declare Sub PlayFX(effect As SoundEffects, x As Single = CENTER_X, y As Single = CENTER_Y, volume = -1)

• effect - id zvucnog effekta (SoundEffects je Enum koji sadrzi sve zvukove igre)
• x - x pozicija na ekranu, ovo koristi da podesis balance, tj ako je blize levoj ivici onda se glasnije cuje na levom zvucniku, odnosno na desnom ako je blize desnoj ivici
• y - y pozicija na ekranu, pogledaj na www.un4seen.com na forumu sam pre nekog vremena naisao na nacin kako da odredis koliko ima zvucnika, ako ima samo dva onda y parametar zanemarujes, ukoliko ima vise onda i y uzimas u obzir (ako je blize gornjoj ivici onda je jace na front zvucnicima, ako je blize donjoj onda na rear)
• sto se tice CENTER_X i CENTER_Y to ce biti vrednosti definisane u glavnom modulu (game.bas) a predstavljace koordinate centra ekrana (ovo ce se definisati u zavisnosti od velicine mape, tj dela mape koji je vidljiv na ekranu), takodje bice definisane i FRAME_WIDTH i FRAME_HEIGHT (koji oznacavaju velicinu frejma, tj dela mape koji je vidljiv)
• volume - jacina zvucnog efekta, ukoliko je -1 onda koristi promenljivu FX_VOLUME_LEVEL koja ce sadrzati jacinu zvucnih efekata koja je podesena u Options


dok testiras ti definisi ove konstante i promenljive koje sam naveo, da imas sa cime da radis, kasnije cemo sve to povezati i prebaciti te deklaracije u glavni modul.



e da, zaboravio sam da vam napomenam da ce svaki modul imati svoj namespace, cisto da se zasititmo od moguceg name-colisiona, dakle ukoliko je modul za zvuk naka bude Namespace Sound, ukoliko je AI Namespace AI i td...
[ Aleksandar Vasic @ 09.03.2008. 15:50 ] @
Dogovoreno
[ stefanpn @ 09.03.2008. 20:01 ] @
Ej ljudi ja se izvinjavam, sto me nema... Malo sam zauzet, ali pogledam povremeno sta se desava. Slazem se skroz za koriscenje Namespace-a. Samo sam hteo da se dogovorimo nesto oko AI dela. Ako koristimo A star path find, onda ce se traziti najbolji put u matrici, tako da vam ja iz AI modula mogu dati samo koordinate neprijatelja u matrici, tako da ce mi se modul jako preplitati sa main modulom ili sa modulom za gfx. Pa sam hteo da pitam kada cemo i kako cemo raditi te module?

Inace trenutno sam zauzet nekim programom koji mora da se zavrsi za nekih 30-ak dana, tako da nemam bas puno vremena, pa se nadam da se ne ljutite sto cu malo kasniti za vama.

[Ovu poruku je menjao Aleksandar Ružičić dana 06.04.2008. u 18:10 GMT+1]
[ Aleksandar Ružičić @ 09.03.2008. 21:46 ] @
sada je bitno da se urade "moduli" koji rade samostalno, znaci ako uzmemo u obzir A* algoritam, potrebno je da se uradi funkcija koja prima 2 parametra, prvi je lokacija (uredjen skup [x,y]) na kojoj se igrac (ili neprijatelj) nalazi a drugi parametar je lokacija na koju treba da dodje, funkcija treba da vrati niz lokacija (znaci niz parova [x,y]) koji prestavljaja najefikasniji (ne i najbrzi, npr bolje je ako neprijatelj prodje ispod zbunja jer je na taj nacin teze uocljiv, nego da dodje najkracim mogucim putem) put kojim igrac treba da se krece.

e sad, u pravu si da ai zavisi dosta od ostlih modula, pre svega od modula za ucitavanje mape, zato je potrebna jedna funkcija koja ce inicijalizovati AI modul tako sto ce toj funkciji biti prosledjen pointer na matricu koja predstavlja trenutno ucitanu mapu. Posto ti radis i AI i MAP module mozes odma da ih povezes tako sto ces u MAP modulu u funkciji LoadMap ili kako si je vec nazvao po uspesnom ucitavanju mape pozivati f-ju AI.Initialize(VarPtr(mapdata)) (gde je mapdata matrica koja predstavlja mapu)

i potreban nam je jedan "common" modul, tj modul koji ce sadrzati zajednicke definicije tipova, kao sto su:
Code:

Type Point
   X    As Single
   Y    As Single
End Type

Type MapPosition
   Row  As Integer
   Col   As Integer
End Type

Type Field
   Position   As MapPosition
   Base       As MapFieldType
   Cover      As MapFieldType
End Type


gde Point predstavlja lokaciju na ekranu u koordinatama x,y (koje su floating-point) a koristice se pozicioniranje elementa na mapi (necemo pomerati "polje-po-polje" nego ce prelazi sa polja na polje biti "glatki" tj u zavisnosti od brzine ce se menjati x i y koordinate), MapPosition predstavlja lokaciju na mapi (odredjujem o kom redu i o kojoj koloni se radi), a Field predstavlja jedno polje na mapi i Base predstavlja onaj "donji deo" polja o kom sam pre govorio, a Cover je onaj "gornji" deo (svako polje se crta sledecim redom: prvo se nacrta Base slicica, pa onda sprajt neki ukoliko se nalazi na tom polju, znaci tenkic, neki bonus, metak itd, pa tek onda preko Cover slicica koja ce uglavnom biti providna tako da se vidi sta je ispod)

bice jos zajednickih tipova (i ovi su dati samo kao primer, naravno da se nazivi tipova i propertija mogu menjati) ali ovi su sada potrebni za MAP i AI module pa ih ovde navodim, ti Stefane napravi poseban fajl (declarations.bas ili nesto slicno) u koji ces da smestis ove tipove, mozes i da im dodas neke propertije ako ti zatrebaju, kao sto rekoh ovo navodim samo kao primer


sto se tice vremena ni ja ga nemam bas nesto mnogo (zato nije ni navodjen nikakav vremenski rok, i nece ga ni biti) i trenutno nisam u bg-u pa me zato nema na netu (ovde sam na dial-upu...) a i nisam stigao nista konkretno da odradim sto se ovog projekta tice od tak sam dosao kuci, ali od utorka sam ponovo u beogradu pa cu nastaviti da radim
[ Aleksandar Ružičić @ 12.03.2008. 16:15 ] @
evo meni bilo malo dosadno pa sam uradio mainmenu screen...

[ Aleksandar Ružičić @ 12.03.2008. 16:25 ] @
Stefane, sto se tice ELITEMAP formata, imam jos jednu ideju:

format ima 32 bita rezervisana za flegove od kojih smo 5 vec iskoristili - prva cetiri bita (nibble) su rezervisana za tileset index, 5 bit predstavlja prisustvo komentara.

predlazem da 6 bit predstavlja Extended Format Flag, tj ako je ovaj bit 0 (sto je default) onda su polja (DATA sekcija) ozacena sa 8bita (1 bajt), a ukoliko je ovaj bit podesen (tj ako je 1) onda su polja oznacena sa 16bita (2 bajta jedno polje).

EliteTanks ce koristiti 8bita, ali mozda kasnije ovaj engine iskoristimo za drugi projekat (sto i planiram...) koji ce zahtevati vise od 128 razlicitih slicica u jednom tilesetu (recimp neki rpg)...
[ Aleksandar Vasic @ 12.03.2008. 17:16 ] @
vidim ja da se freebasic-u pishe lepa buducnost ;)
[ Aleksandar Ružičić @ 12.03.2008. 19:07 ] @
evo ja pocinjem upravo da pisem kompajler za EliteScript jezik, a evo i gramatike jezika, pa ko razume BNF notaciju neka iznese primedbe/sugestije ako ima...
Code:

<Script> ::= <OptNL> <ScriptId> <Globals>

<ScriptId> ::= 'script' StringLiteral 'class' StringLiteral <NL>

<NL> ::= NewLine <NL>
 | NewLine

<OptNL> ::= <NL>
    |

<Globals> ::= <GlobalScope> <NL> <Globals>
      | <GlobalScope>
      |

<GlobalScope> ::= <Declarations> <NL>
      | <EventHandler> <NL>
      | <Function> <NL>


<EventHandler> ::= 'handler' Identifier '.' Identifier <OptParamList> <NL> <Statements> 'end' 'handler'

<Function> ::= 'function' Identifier <OptParamList> <NL> <Statements> 'end' 'function'

<OptParamList> ::= '(' <ParamList> ')'
       | '(' ')'
       |

<Declarations> ::= 'var' <InitList>

<InitList> ::= <DeclListItem> ',' <InitList>
       | <DeclListItem>

<DeclListItem> ::= Identifier '=' <Expression>
       | Identifier

<ParamList> ::= <ParamlListItem> ',' <ParamList>
    | <ParamListItem>

<ParamListItem> ::= Identifier
        | 'ref' Identifier


<Statements> ::= <Statement> <NL> <Statements>
     |

<Statement> ::= <Declarations>
    | <IfStatement>
    | <ForStatement>
    | <LoopStatement>
    | <SelectStatement>
    | <FunctionCall>
    | <RaiseEvent>
    | <Assignment>
    | <ReturnExpression>
    | <Expression>
    | 'exit' 'handler'
    | 'exit' 'function'
    | 'exit' 'do'
    | 'exit' 'loop'
    | 'exit' 'for'
    | 'continue'
    | 'lock' <QualifiedId>
    | 'unlock' <QualifiedId>
    

<IfStatement> ::= 'if' <Expression> 'then' <NL> <Statements> <ElseBlocks> 'end' 'if'

<ElseBlocks> ::= 'else' <NL> <Statements>
     | 'elseif' <Expression> 'then' <NL>    <Statements> <ElseBlocks>
     |

<ForStatement> ::= 'for' <OptVar> Identifier '=' <Expression> 'to' <Expression> <OptStep> <NL> <Statements> 'next'
       | 'foreach' <OptVar> Identifier 'in' <Expression> <NL> <Statements> 'next'

<OptVar> ::= 'var'
     |

<OptStep> ::= 'step' <Expression>
      |

<LoopStatement> ::= 'do' <NL> <Statements> <Condition> <Expression>
        | <Condition> <Expression> 'do' <NL> <Statements> 'loop'

<Condition> ::= 'until'
    | 'while'

<SelectStatement> ::= 'select' 'case' <Expression> <NL> <CaseStatement> <CaseBlocks> 'end' 'select'

<CaseStatement> ::= 'case' <OptIs> <Expression> <NL> <Statements>

<CaseBlocks> ::= <CaseStatement> <CaseBlocks>
     | 'case' 'else' <NL> <Statements>
     |

<OptIs> ::= 'is' <CompareOp>
    |

<FunctionCall> ::= 'call' <QualifiedId> <OptArgList>
       | <QualifiedId> <OptArgList>
       | <QualifiedId> <ExpList>

<RaiseEvent> ::= 'raise' <QualifiedId> <OptArgList>
     | 'raise' <QualifiedId> <ExpList>

<ArgList> ::= '(' <ExpList> ')'
      | '(' ')'

<OptArgList> ::= <ArgList>
     |

<ExpList> ::= <Expression> ',' <ExpList>
      | <Expression>


<QualifiedId> ::= <QualifiedIdPart> '.' <QualifiedId>
      | <QualifiedIdPart>

<QualifiedIdPart> ::= Identifier <OptIndex>
          | Identifier <ArgList> <OptIndex>

<OptIndex> ::= '[' <Expression> ']'
       |

<Assignment> ::= <QualifiedId> <OptIndex> '=' <Expression>

<ReturnExpression> ::= 'return' <Expression>
           | 'return'


<Expression> ::= 'Iif' '(' <OrExp> ',' <Expression> ',' <Expression> ')'
     | <OrExp>

<OrExp> ::= <OrExp> 'Or' <XorExp>
    | <XorExp>

<XorExp> ::= <XorExp> 'Xor' <AndExp>
     | <AndExp>

<AndExp> ::= <AndExp> 'And' <CmpExp>
     | <CmpExp>

<CompareOp> ::=  '<' | '>' | '<=' | '>=' | '=<' | '=>' | '<>' | '='

<CmpExp> ::= <CmpExp> <CompareOp> <ShiftExp>
     | <ShiftExp>

<ShiftExp> ::= <ShiftExp> 'Shl' <AddExp>
       | <ShiftExp> 'Shr' <AddExp>
       | <AddExp>

<AddExp> ::= <AddExp> '+' <MulExp>
     | <AddExp> '-' <MulExp>
     | <MulExp>

<MulExp> ::= <MulOp> '*' <UnaryOp>
     | <MulOp> '\' <UnaryOp>
     | <MulOp> '/' <UnaryOp>
     | <MulOp> 'Mod' <UnaryOp>
     | <UnaryOp>

<UnaryOp> ::= 'ref' <UnaryOp>
      | '-' <UnaryOp>
      | '+' <UnaryOp>
      | 'Not' <UnaryOp>
      | <PrimaryExp>

<PrimaryExp> ::= <QualifiedId>
     | StringLiteral
     | IntLiteral
     | RealLiteral
     | BinLiteral
     | HexLiteral
     | OctLiteral
     | 'true'
     | 'false'
     | 'null'


{String Chars}  = {Printable} - ["]
{Hex Digit}     = {Digit} + [abcdef]
{Oct Digit}     = [01234567]
{Bin Digit}     = [01]

{WS}            = {Whitespace} - {CR} - {LF}
{Id Head}       = {Letter} + [_]
{Id Chars}      = {Id Head} + {Digit}


NewLine        = {CR}{LF}? | ':'
Whitespace     = {WS}+ ( '_' {WS}* ( {CR}{LF}? | ':' ) )?

ID             = {Id Head}{Id Chars}*

StringLiteral  = '"' ( {String Chars} | '""' )* '"'

IntLiteral     = {Digit}+
HexLiteral     = '&H' {Hex Digit}+
OctLiteral     = '&O' {Oct Literal}+
BinLiteral     = '&B' {Bin Literal}+

RealLiteral    = {Digit}* '.' {Digit}+ ( 'E' [+-]? {Digit}+ )?
           | {Digit}+ 'E' [+-]? {Digit}+







[Ovu poruku je menjao Aleksandar Ružičić dana 12.03.2008. u 20:36 GMT+1]
[ stefanpn @ 12.03.2008. 22:29 ] @
Evo cisto nesto malo za pocetak...

Zapravo nista, samo sam dodao kursor na sliku i napravio izvrsnu verziju :(

Ali ovaj projekt smo i zapoceli da bi FreeBASIC priblizili onima koji i nisu bas puno upoznati sa njim... Tako da mislim da im treba neki ovako prost primer... HELLO WORLD sa dve slike... :)
[ Aleksandar Ružičić @ 12.03.2008. 22:54 ] @
heh, izgleda malo mracno, moracu da posvetlim grafiku malo :)

ali lep primer, mada si trebao da koristis double buffering, posto se na mojoj jadnoj grafickoj pojavljuje mouse trail :)
[ stefanpn @ 13.03.2008. 00:20 ] @
Koristio sam double buffer. Trail pojavljuje zato sto sam tako ja postavio... Nema brisanja ekrana, nego se pozadinska slika crta sa alfablendingom(50%) preko postojeceg ekrana.
[ Aleksandar Ružičić @ 13.03.2008. 00:58 ] @
pa cim crtas sa alphablendingom onda to nije double buffering :)

double buffering ti je kad sve crtas u memoriji (ne direktno na ekran) pa onda prekopiras (bez blendinga, jer je to zahtevna operacija) to na ekran...


sad ovih dana cu ja uraditi GFX modul sa funkcijama za crtanje lejera i sprajtova pa cemo da uradimo ove screenove... a ti kad zavrsis Map Editor onda cemo da crtamo texture za mape (iskoristicemo ono sto ima u SpriteLib-u, al cemo dosta prepraviti i dodati nase teksture)...
[ stefanpn @ 13.03.2008. 01:01 ] @
Pogledaj kod...

Ja ovde imam dve stranice u memoriji. Pa dok se na jednoj "crta". Druga je prikazana, pa se onda uradi FLIP, pa se crta na drugoj a prva je prikazana i tako u krug... To se valjda zove Double Buffer?
[ Aleksandar Vasic @ 13.03.2008. 09:42 ] @
valjalo bi da bude malo svetlije,e i meni se javlja trail,cak mi i slika malo, kako da kazem, vibrira :D
[ stefanpn @ 13.03.2008. 11:39 ] @
To se desava samo kada program radi na 16 bpp, problem je sa alpha blend-om... Ispravice se.
[ Aleksandar Vasic @ 13.03.2008. 11:46 ] @
ja sam ukljucio na 32 bpp i isto se desilo
[ stefanpn @ 13.03.2008. 12:59 ] @
Posalji screenshot, ako mozes na 16 bpp i na 32 bpp.
[ Eurora3D Team @ 13.03.2008. 14:40 ] @
Prebacio sam ovaj tvoj primer u moj framework
Fajl je na http://www.eurora3d.com/elitesecurityplugin/EliteTanks.zip
Pogledaj EliteDownloadCompleted funkciju i funkciju na samom kraju EPlg.bas fajla , cela implementacija je u te dve funkcije.
Inace kod mene ovaj primer radi u sve 4 varijante (na 16 bpp malo trepce tamo gde je prosao kursor)
Pozdrav
Probao sam i iz browsera ... radi isto ... (normalno EPlg.dll za bowser treba da je komajlovana u windows\system32 folderu)
[ Eurora3D Team @ 13.03.2008. 15:02 ] @
Palo mi je na pamet ... mozda je bolje da napravite samo framework za igru a da sve ostalo (slike , script itd) bude u jednom komrpesovanom fajlu. Tako bi se lakse pravile nove igre (samo se napravi novi fajl igre) a i mogli bi da iskoristite plugin framework za online igranje ...
Dok se igra pravi taj fajl moze da bude predstavljen kao folder , pa na kraju moze da se doda kompresija / dekompresija
[ stefanpn @ 13.03.2008. 17:45 ] @
A sta cemo sa bass.dll, zlib.dll i koje cemo dll vec koristiti? Njih ne mozemo u neku datoteku.

Ali bi bilo lepo da sve bude u jednoj datoteci. Nego moze li browser plugin recimo preuzeti zip arhivu, pa je raspakovati i pokrenuti u browseru, jer i onako mora da preuzme resurse i dll, pa bi mu to bilo isto samo sto bi ovako mozda bilo jednostavnije.

Kad pokrenem ovaj poslednji plugin iz browsera on ne moze da ucita slike... Ali sa EPlgTestDlg.exe radi lepo.
Gde bi trebao da se nalazi folder GFX da bi ovaj mogao da ucita slike kada se pokrece iz browsera?

SetCurrentDirectory(CFile)

Tj. gde je Cfile?

Inace jako mi se dopada kako ovo funkcionise a i cela ideja je ok.
[ Aleksandar Ružičić @ 13.03.2008. 18:24 ] @
sto se tice pakovanja fajlova, ja sam to imao u planu, za grafiku, zvuk i mape. malo kasnije cu da napisem Packer (bez kompresije, zbog brzine ucitavanja) pa cu da okacim ovde...
[ Shadowed @ 13.03.2008. 19:53 ] @
wtf se desilo? Eurora 3D team je imao duplu poruku i ja obrisao jednu, sad nema ni jedne. Izgleda da je u isto vreme neko brisao onu drugu :)
[ Eurora3D Team @ 13.03.2008. 19:59 ] @
bass.dll, zlib.dll itd. Najbolje da se instaliraju sa pluginom (jednom) a kad se downloaduje samo se skida fajl (kao npr flash jednom se instalira a posle kad se otvori stana downloaduje samo svoj fajl)
A ovo za folder malo je komplikovano . Trebalo bi da promenis src parametar u strani na folder gde su ti slike ali tad FF nebi aktivirao plugin (on aktivira plugin jedino ako je src fajl sa odredjenom ekstenzijom .esf). Najbolje promeni
Code:
SetCurrentDirectory(CFile)
u
Code:
SetCurrentDirectory("C:\NekiFolder\gfx\")
Folder gde su ti slike sa
Code:
\
na kraju i kompajluj EPlg.dll u windows\system32
Al sam zakomplikovao objasnjenje :) ...
[ Eurora3D Team @ 13.03.2008. 20:01 ] @
Citat:
Shadowed: wtf se desilo? Eurora 3D team je imao duplu poruku i ja obrisao jednu, sad nema ni jedne. Izgleda da je u isto vreme neko brisao onu drugu :)

Ja sam obrisao drugu u istom trenutku :) ... Obrisi ovu ako je offt...
[ Eurora3D Team @ 13.03.2008. 20:11 ] @
Da i (ostao sam nedorecen ) Ovo gore vazi samo za ovaj test, u pravom pluginu mi bi stavili pravi fajl sa neta u stranu (to bi bila nasa arhiva) FF bi downloadovao to na lokalni HD i poslao bi FilePath tog downloadovanog fajla sa lokalnog diska u EliteDownloadCompleted funkciju. Ti fajlovi koje FF downloaduje i snima na HD nemaju extenziju i ime im je random (nesto kao edeqwe23 u tmp folderu) ali to nije bitno. Mi onda otvaramo taj fajl (koji je isti kao i onaj sa neta) i raspakujemo ga u neki folder (npr tmp\nesto) i postavljamo FilePath na taj folder. To mi je bila ideja ...
U stranu moze da ide i fajl (arhiva) sa lokalnog diska i ovo posle ide isto ...
[ Aleksandar Ružičić @ 13.03.2008. 21:45 ] @
nije losa ideja da se cela igra uradi preko skripti, onda bi mogli da iskoristimo ovaj tvoj plugin da se igra izvrsava u browseru, samo ne znam koliko je to pametno jel flash vec postoji, zar ne?

naravno, mozemo to da uradimo cisto kao primer koda... al da prvo zavrsimo engine i ovu igru pa je posle lako doradjivati/prepakivati...
[ Eurora3D Team @ 13.03.2008. 21:49 ] @
Pa nek postoji flash 100 puta (ja nisam ljubitelj flasha) Mi mozemo da uradimo ono sto flash jos ne moze (OGL,DX pristup File sistemu ....)
[ Aleksandar Ružičić @ 13.03.2008. 22:05 ] @
da, ali ko ce hteti plugin koji dozvoljava svakom sajtu da mu prcka po fajl sistemu?

ali naravno da sam ja da se uradi nesto nase, kao sto sam rekao cisto kao primer...
[ stefanpn @ 13.03.2008. 22:12 ] @
:)

Vecina igraca i internet surfera i nezna sta je fajlsistem...
[ Eurora3D Team @ 13.03.2008. 22:27 ] @
Pa valjda ce ovi ljudi sa ovog sajta da veruju :) Mislim moze da se postavi i source kod pa nek sami kompajluju.
Koliko svako od nas instalira nekih pluginova sa neta ... a postoji i AV i sl . Kao sto rade i svi drugi ne treba nam neka topla voda ... dobro za prostu igru stvarno ne treba browser podrska ... al sto da ne kad se moze :)

[Ovu poruku je menjao Eurora3D Team dana 14.03.2008. u 23:52 GMT+1]
[ Aleksandar Ružičić @ 13.03.2008. 22:32 ] @
za par dana cu valjda zavrsiti scripting system (kompajler sam zapoceo, gotov je lexical analyzer, sad radim na parseru) pa kad budemo imali i kompajler i virtual machine videcemo koliko je izvodljivo imati komplet igru uradjenu preko skripti (pa ako se pokaze da nema velikih nedostataka, pre svega sto se tice brzine, onda mozemo i da napravimo da se igra u browseru)
[ stefanpn @ 14.03.2008. 21:42 ] @
@Aleksandar Vasic

Evo ti primer za VB i BASS.DLL

Samo mi nije bas najjasnije kako se zaustavlja, pa sam ja sam to ovde resio sa BASS_Stop, samo posle toga da bi se opet pokrenulo mora da ide BASS_Start

Svaki put pozivam i Call BASS_MusicPlay i Call BASS_StreamPlay jer mora da bude ili jedno ili drugo(ili Muzika ili Strim) pa da nebismo pisali dve f-je moze sve u jednoj...
[ Aleksandar Vasic @ 14.03.2008. 23:10 ] @
Evo uz tvoju pomoc sam reshio moj problem shto nije htelo da radi,samo je bilo potrebno dodati f-ju LOADBASS ;)


Edit: Izgleda da ne radi Balance
[ Aleksandar Vasic @ 14.03.2008. 23:41 ] @
Evo ispravke,@stefanpn mi je napomenuo da se ne chuju svi zvucnici,pa sam to ispravio,a balance sam sredio za po Y osi,a za X cu naknadno.
[ Eurora3D Team @ 15.03.2008. 00:22 ] @
Za FreeBasic ce ceo ovaj Bass modul morati da se prebaci u FreeBasic fajlove ... (ako to vec neko nije negde uradio)
[ Aleksandar Vasic @ 15.03.2008. 00:23 ] @
naravno,prvo sam odradio u vb,a sad cu da prevodim u freebasic

p.s. u fb-u ima header bass.bi ;)
[ Eurora3D Team @ 15.03.2008. 00:33 ] @
@Aleksandar Vasic
Evo ti Subrutina za Volume
Code:

Private Sub Slider1_Change()
SetVolume CLng(Slider1.value)
End Sub

Samo podesi slider na moguci minimum i maximum
A mozes i ovako
Code:

SetVolume CLng(Slider1.value) * NeskiBroj

Da nebi bili mali podeoci na slideru
[ Eurora3D Team @ 15.03.2008. 00:34 ] @
Aha imaju bass.bi :)
Ljudi su se bas naradili oko tog FreeBasica ...
[ Aleksandar Ružičić @ 15.03.2008. 08:17 ] @
sto se tice Sound (Music) modula, mislim da nam je ipak dovoljno samo left/right balance, tj da ne komplikujemo sa front/rear, jer nije bas jednostavno (malo sam procesljao BASS dokumentaciju) znaci Y nece uticati na front/rear nego na volume i to u zavisnosti od blizine dogadjaja igracu (u sourceu koji dajem vidi se o cemu pricam), i ono sto nam je potrebno to je pustanje fajla koji se nalazi u memoriji (jer ce se svi zvuci/muzika nalaziti zapakovani u PCKD fajlove, danas cu raditi na Packeru i PCKD formatu, pa kad zavrsim i istestiram okacicu source), znaci evo sta nam treba:
Code:

' ovo je samo za testiranje, bice deklarisano u glavnom modulu
#define SCREEN_WIDTH 800
#define SCREEN_HEIGHT 600
#define CENTER_X SCREEN_WIDTH / 2
#define CENTER_Y SCREEN_HEIGHT / 2
Dim Shared SFXVolumeLevel As Integer = 75 ' u intervalu 0 - 100
Dim Shared PlayerY As Single = CENTER_Y ' ovo ce biti definisano u glavnom modulu, a predstavlja tenutnu Y poziciju igraca na ekranu

Enum SFXType ' i ovo ce biti deklarisano u glavnom modulu...
   sfxExplosion = 0
   sfxBullet = 1
   sfxWallHit = 2 ' ovo navodim samo kao primere...
End Enum

#include "bass.bi"

Namespace Music

   Sub Initialize
        BASS_Init -1, 44100, 0, 0, 0
   End Sub

   Sub Shutdown
         BASS_Free
   End Sub

   Sub PlaySFX(sfx As SFXType, X As Single = CENTER_X, Y As Single = CENTER_Y)

       Dim memloc As Byte Pointer
       Dim length As Integer

       ' za ovo pogledajte dole (bice definisano u nekom od drugih modula)
       GetSoundData sfx, memloc, length

       Dim stream As Integer

       stream = BASS_STreamCreateFile(1, memloc, 0, length, BASS_STREAM_AUTOFREE) ' ovde je potrebno autofree
       
       Dim As Integer vol, pan

       ' balance:
       pan = (X / SCREEN_WIDTH) * 200 - 100  ' u intervalu od -100 (levi zvucnik) do +100 (desni zvucnik)

       ' volume: (ovo me mrzelo da malo bolje uradim, ali uglavnom sto je dogadjaj udaljeniji od igraca slabije se cuje)
       vol = SFXVolumeLevel - Max(Min((Abs(Y - PlayerY) / SCREEN_HEIGHT, 0.8), 0.5) * SFXVolumeLevel

       BASS_ChannelSEtAttributes stream, -1, vol, pan

       BASS_ChannelPlay stream, 0

    End Sub

End Namespace

ovo sam sve pisao iz glave (gledajuci u BASS manual), pa treba ovo i istestirati, Aleksandrew tebi prepustam ovaj deo :)
e da, i "for testing purposes" ovakva f-ja moze da se koristi da se fajl (wav/mp3/ogg...) ucita u memoriju (byte niz):
Code:

Type MemoryFile
   Data As Byte Pointer
   Size As UInteger
   Declare DEstructor
End Type

Destructor MemoryFile
  If This.size > 0 Then Delete[] This.Data
End DEstructor

Function LoadFileToMemory(Filename as String) As MemoryFile Pointer
   Dim fn As Integer = FreeFile
   Dim size as UInteger
   dim mf As MemoryFile POinter = New MemoryFile
   Open Filename For Binary As fn
      mf->Size = LOF(fn)
      mf->Data = New Byte[mf->size]
      GEt #fn, , *(mf->Data), mf->Size
   Close fn
   Return mf
ENd FUnction

' ovako se fja koristi:
Dim Shared mf1 As MemoryFile Pointer
Dim Shared mf2 As MemoryFile Pointer

mf1 = LoadFileToMemory("C:\bla.wav")
mf2 = LoadFileToMemory("C:\blabla.wav")

' funkcija za "prevodjenje" SFXType vrednosti u memorijsku lokaciju i velicinu
Sub GetSoundData(sfx As Integer, byRef memloc As Byte Pointer, byref length As UInteger)
      Select Case sfx
          Case 0
                 memloc = mf1->data
                 length = mf1->size
          Case 1
                 memloc = mf2->data
                 length = mf2->size
      End Select
End Sub

' "pustanje" zvuka

#include "music.bas"

Music.Initialize

Music.PlaySFX fxExplosion
Sleep 2000 ' nisam bas siguran dal ce ovo da zaustavi zvuk (nadam se da nece)
Music.PlaySFX fxBullet
sleep 3000

' ovo je vazno:
Music.Shutdown
Delete mf1
Delete mf2

moguce je da sav ovaj kod sto sam dao ne radi "iz prve", tj mozda bude i compie-time gresaka, ali nisam u mogucnosti sada da isprobam ovo posto nisam kuci i nemam fbc ovde...

uostalom trebalo bi da se iz koda vidi ideja, pa nek Aleksandar to iskoristi u izradi Music modula
[ Shadowed @ 15.03.2008. 08:36 ] @
Citat:
Aleksandar Ružičić: jer ce se svi zvuci/muzika nalaziti zapakovani u PCKD fajlove, danas cu raditi na Packeru i PCKD formatu

Koji je razlog za to? Sta fali izvornom formatu ako vec nema kompresije? :)
[ Aleksandar Vasic @ 15.03.2008. 13:13 ] @
@eurora - to je definitivno bolje reshenje ;)

@ruzicic - ovo ce biti ovde ovo onde i na kraju neke stvari fale da bi se kompajliralo kako treba :D

Code:
Dim Shared SFXVolumeLevel As Integer = 75
#Include "bass.bi"
Namespace Music
    Sub Initialize
        BASS_Init -1, 44100, 0, 0, 0
    End Sub
    Sub Shutdown
        BASS_Free
    End Sub
    Sub PlaySFX(sfx As SFXType,X As Single = CENTER_X,Y As Single = CENTER_Y)
       Dim memloc As Byte Pointer
       Dim length As Integer

       GetSoundData sfx, memloc, length
       Dim stream As Integer
       stream = BASS_StreamCreateFile(1, memloc, 0, length, BASS_STREAM_AUTOFREE)
       Dim As Integer vol, pan
       pan = (X / SCREEN_WIDTH) * 200 - 100
       vol = SFXVolumeLevel - Max(Min((Abs(Y - PlayerY) / SCREEN_HEIGHT, 0.8), 0.5) * SFXVolumeLevel)
       BASS_ChannelSetAttributes stream, -1, vol, pan
       BASS_ChannelPlay stream, 0
    End Sub
    Sub PlayBGND(vol As Integer,Repeat As Integer,Rand As Integer)
        If Rand = 1 Then Randomize song 'gde je song enum gde su definisani background pesme(verovatno u glavnom modulu)
                If Rand = 0 Then song = 0
        Dim bstream As Integer
        If Repeat = 0 Then bstream = BASS_StreamCreateFile(1,song,0,0,BASS_STREAM_AUTOFREE)
        If Repeat = 1 Then bstream = BASS_StreamCreateFile(1,song,0,0,BASS_SAMPLE_LOOP)
        BASS_ChannelSetAttributes bstream, -1, vol, -101
        BASS_ChannelPlay stream, 0
    End Sub
End Namespace


Da li si pod Autoplay mislio da se jedna ista pesma vrti,ili da na listi nastavlja dalje...I da li ce za nasumicno biranje pesama, kôd biti u music modulu ili u nekom drugom??

[Ovu poruku je menjao Aleksandar Vasic dana 15.03.2008. u 14:43 GMT+1]

[Ovu poruku je menjao Aleksandar Vasic dana 15.03.2008. u 14:48 GMT+1]
[ Eurora3D Team @ 15.03.2008. 13:58 ] @
Citat:
Shadowed: Koji je razlog za to? Sta fali izvornom formatu ako vec nema kompresije? :)

wav formatu mnogo fali ako nije kompresovan a downloaduje se sa inerneta npr. Normalno ako nema kompresije onda je svejedno :)
Cisto ideja u vezi performansi ... ako ce muzicki fajlovi da budu veliki (kad su dekompresovani i ucitani u RAM) mislim da nije dobra ideja da se drze u buffrerima (byte ptr) celo vreme. Sve ove Stefanove graficke aplikacije angazuju mnogo CPU vremena (kod mene 50% ... imam dual core procesor) pa jos ako se doda mnogo ram-a mislim da ce to znacajno da uspori igru na prosecnom komijuteru.
Pokusao sam da nadjem uzrok tolike iskoriscenosti CPU-a ali nisam nista mogao da otkrijem. Vidim da FreeBasic ima 2 fn za OGL ScreenRes i Screen (i cini mi se da se linkuju sa drugim bibliotekama ... ) U svakom testu sam dobio isto (50%) cak i u najjednostavnijem kodu sa jednom linijom koja kreira window i prostom Msg Loop za izlaz.
[ Eurora3D Team @ 15.03.2008. 14:49 ] @
Inace OpenGL je biblioteka sa visokim performansama koja moze da prikazuje 2D/3D scene sa minimalnim iskoriscavanjem memorije i CPU (daleko manje nego ovde a sa mnogo vecim 3D modelima)
[ Shadowed @ 15.03.2008. 14:56 ] @
Krcko rece da nece biti kompresije. Sto wav? Sto ne mp3?
[ Eurora3D Team @ 15.03.2008. 16:56 ] @
Verovatno je hteo da koristi sve formate (ustvari 3 koja su nabrojena) a ne samo jedan
@Aleksandar Ružičić
Zar ovde ne ide AddressOf (@) umesto direferenciranja (*)
Code:

GEt #fn, , *(mf->Data), mf->Size ' @(mf->Data)

Nisam probao da kompajlujem ... samo pitam
[ Aleksandar Ružičić @ 15.03.2008. 18:01 ] @
@Shadowed: nece biti kompresije zbog brzine ucitavanja, mada moze i to lako da se doda, a razlog zasto pakovati sve u jedan fajl je cisto zbog toga da napravimo nesto "fensi", ovaj projekat je ionako cisto vezbanje programiranja u fb-u, a i jos jedan razlog je sto cemo tako smanjiti broj fajlova i na neku nacin obezbediti "kradju" grafike/zvuka, naravno ovo nama uopste nije bitno jer cemo ionako koristiti free sprajtove i free muziku/zvuke, ali od kada sam u Neighbours Of Hell video da za grafiku imaju gfxdata fajl a za zvuk snddata (znaci ukupno dva fajla) znaci dva fajla sa resursima ukupno, oduvek sam hteo da kad budem pravio neku igru uradim to isto :)

@Eurora: ne, mf->Data je pointer, a Get/Put ne smes da p[rosledis pointer, jer nece menjati vrednost na koju pokazuje pointer, nego ce promeniti sam pointer (tretira ga kao Integer tip)....
[ Eurora3D Team @ 16.03.2008. 00:22 ] @
@Aleksandar Vasic
Napravio sam test kod za Bass i FreeBasic. Nisam vest u FreeBasicu zato kod vise lici na C++ (pogotovo win api funkcije)
Ubacio sam osnovni modul za bass (i ispobao sam sve).
Moze da ucita fajl sa diska i ima play, pause i stop dugmad (imas i komentare u kodu)
Imas i skroler za ton.
Nisam dodavao ove Aleksandrove funkcije za pustanje iz memorije (prepisao sam samo dve definicije za Enum i jedan Type ali nisu koriscene)
Ostalo dopuni
Pozdrav
navikao sam da pisem na Engleskom menije , dugmad ... bar su komentari na Srpskom
[ Aleksandar Ružičić @ 16.03.2008. 05:14 ] @
malo sam preleteo pogledom preko ovog koda i imam jednu zamerku - Pause/Stop ne rade a razlog je ovo (u SoundModule.bi):
Code:

   Dim hStream As Long = 0
   Dim lpFile As ZString*260

da bi u freebasic-u promenljiva bila vidiljiva u svim procedurama mora biti deklarisana kao Shared, znaci:
Code:

   Dim Shared hStream As Long = 0
   Dim Shared lpFile As ZString*260
[ Eurora3D Team @ 16.03.2008. 10:50 ] @
Uploadovao sam opet.
Juce sam kad sam zavrsio uploadovao (radilo je) pa sam razmisljao sta ako neko otvori novi fajl dok jedan svira i prepravio kod i uploadovao ponovo al ta druga verzija je imala gresku...
Ovo je jedina razlika (sad radi) ... ovo sto je zaklonjeno
Code:

Case IDC_PLAY
'Ovde
   If Not lpCurrentFile = ""  Then 
    'If Not Music.PlayFile() Then 
    'Music.LoadFile(Music.lpFile)
    Music.PlayFile() 
    'EndIf
    Else

I ovaj zip fajl od juce je zamenjen (na oba mesta je ista vezija) ....

[@Aleksandar Ružičić Hvala sto si mi javio da ne radi]

[Ovu poruku je menjao Eurora3D Team dana 16.03.2008. u 16:10 GMT+1]
[ Aleksandar Vasic @ 16.03.2008. 17:44 ] @
tnx bi ce mi od velike pomoci ;)
[ Aleksandar Vasic @ 17.03.2008. 00:21 ] @
eo uz pomoc krcka napravih ja to nekako ;)

pa...testirajte :P

p.s. nemojte komentarisati zvukove :PP
[ markozelenovic @ 22.03.2008. 22:06 ] @
Dobro ide ,Doobro.
[ Eurora3D Team @ 27.03.2008. 20:36 ] @
Malo je van teme :) ali jel nekom poznat neki nacin (softver) za prevodjenje VB6 koda u FreeBasic ?
Dali tako nesto postoji ?
[ Aleksandar Vasic @ 27.03.2008. 20:41 ] @
lol nema brate :D
[ Eurora3D Team @ 27.03.2008. 21:53 ] @
Kako napreduje ovaj projekat ? Jel radite ?
[ stefanpn @ 27.03.2008. 22:05 ] @
Pa radimo, samo je pitanje: "sta radimo?". Ovaj salim se, ali nije daleko od istine, bar sto se mene tice, ja imam sad puno obaveza, pisem nesto komercijalno a i fax me malo "gusi", ali cim "ukradem" neko slobodno vreme bacam se na projekt, jako bih voleo da vidim da smo zapravo nesto uradili...

Pozz...
[ Eurora3D Team @ 27.03.2008. 22:29 ] @
I mi ostali bi voleli na kraju da vidimo kako je ispalo :)
Pozdrav
[ Aleksandar Vasic @ 27.03.2008. 22:30 ] @
ja mogu samo da kazem "Ready & Waiting" ili "Standing by" :P

samo cekam naredjenja :P
[ stefanpn @ 27.03.2008. 22:31 ] @
Najkasnije do 6 ujutru, dobicete neko parce koda od mene. Evo sad sam poceo da radim, nesto.
[ stefanpn @ 28.03.2008. 11:06 ] @
Nije bas 6 ujutru, ali mi se jako prispavalo sinoc oko 3 pa nisam mogao sve da zavrsim na vreme :(

Evo mali demo za dva igraca

kontrole su:
Code:

plavi tenk | zeleni tenk  | f-ja
    R       strelica gore | ubrzanje
    F       strelica dole | kocenje
    D       strelica levo | okretanje u levu stranu
    G       strelica desno| okretanje u desnu stranu
    A            CTRL     | pucanje


cilj je da se pogodi drugi igrac ali da se ne pogodi ptica

koristi se fb-ext-lib, tako da ce vam mozda traziti neke dodatnje dll-ove a mozda i nece jer ih ovaj primer ne koristi :)

sve u svemu za par sati pisanja, i nije toliko lose

samo kod je malo nevesto napisan jer nisam odmah isplanirao kako to sve treba da izgleda, nego sam dodavao deo po deo, opisao sam sve lepo u samom kodu

preporucujem da se broj metaka koji jedan igrac moze odjedanput da ispali sa 12 smanji na 5, mozda bi se malo popravila igrivost, to vam je promenljiva brMet = 4

'Ajd' da cujem komentare.

Mogao bi Aleksandar malo da se poigra sa zvukom....
[ stefanpn @ 28.03.2008. 11:52 ] @
Ipak trebaju neki dll-ovi, za sad samo jpeg62.dll ali evo sva tri dll-a samo da se raspakuju u system32 ili pored aplikacije.
[ Eurora3D Team @ 28.03.2008. 15:06 ] @
Radi :) Mislim dobro je. Dobro si uradio "fiziku" :)
Jel jos grafika trosi mnogo CPU vremena ?
Sta se u FB koristi za net (ima neka biblioteka i sl) Ovo bi moglo da se napravi kao online (TCP , server je program koji prvi pokrene igru ...)
Gde moze da se nadje ova fb-ext-lib
Usput trebala je zlib1.dll (mislim ja je nisam imao)
[ stefanpn @ 28.03.2008. 15:22 ] @
Problem zauzeca procesora sam jednostavno resio sa sleep. A sto se tice igre u mrezi, free basic moze da koristi Winsock API iz biblioteke wsock32.dll mislim da je ima svako na racunaru.

fb-ext-lib ovde

ne znam zasto mu trebaju: freetype6.dll, jpeg62.dll i zlib1.dll kada ih ja nista ne koristim, to mi se malo ne svidja koz extlib-a a i povrsina koja je transparentna kod 32 bpp nije transparentna u 16 bpp kad se koristi f-ja za rotaciju.

sve tri biblioteke imate u system32.rar, u predhodnoj poruci.
[ Eurora3D Team @ 28.03.2008. 15:35 ] @
Valjda ih linkuje uvek kad se koristi ta ext lib
jpeg koristi zip kompresiju (to znam)
Sta mislis zar 640, 480 nije malo prevazidjena ? Mozda je bolje sa jednom rezolucijom vise ...
Mada sa druge stane ovo je onaj stari stil igara tako da i ta mala rezolucija daje neku car :)
[ stefanpn @ 28.03.2008. 22:19 ] @
Sto se tice rezolucije, nije nikakav problem da se prebaci na 800x600 i vise, ali kao sto ti rece nekako mu ovo daje car, samo to cemo i onako resiti kad se uradi citanje mapa i grafika, ovo je samo za testiranje.

Evo malo ispravljene verzije:

Dodao sam malo stelovanja za timer tako da ce sad bolje raditi i na starim masinama. Takodje sad je ceo ekran "obojen" tj popunjen. Ali me brine to sto je igra nekako prezahtevna i ako nema gotovo nista ... samo malo grafike. Tako da se pitam da li iko zna kako da sve ovo ubrzamo malo? Imam neki osecaj da bi nesto ovakvo radilo i na C64, tako da bi ova danasnja "cudovista" od racunara trebala da pojedu ovo.
[ Eurora3D Team @ 29.03.2008. 12:46 ] @
Skinuo sam predzadnju verziju i ext lib da bi mogao da je kompajlujem da radi u prozoru (da bi mogao da vidim Task Manager). Ta verzija trosi otprilike 20% procesorskog vremena ... i tu je po meni problem (ili ova graficka biblioteka za FB nije dobro odradjena ili ima neka druga caka koja mi jos uvek nije poznata). Ti si rekao da se zbog timera smanjila iskoriscenost CPU (u onim ranijim primerima meni je tosilo 50% a sad 20%) ... trebalo bi pretraziti net ili FB forume za ovo. Po mom misljenju ovaj program nebi trebalo da uzima vise od 2% CPU vremena ...
Isto kad uhvatim vremena zavrsicu onaj Browser plugin framework za FB u browseru. Ideja mi je da svi fajlovi budu kompresovani u jedan fajl za plugin (kao sto si ti ovde stavio sve u rar). Da plugin downloaduje i dekompresuje sve u temp folder i pusti odatle (sve znaci sve i exe i dll koji su potrebni i ostalo). Isto cu da uradim i aplikaciju za distribuciju koja ce da ukompresuje sve u u jedan plugin fajl ... Ovakvim pristupom FB programer nece morati da se bavi mojim c++ like kodom nego kad zavrsi sve upakuje sa tom aplikacijom i postavi na net.
[ stefanpn @ 29.03.2008. 13:27 ] @
Nisi morao da je kompajliras da bi dobio prozor, moze i sa ALT-ENTER da se menja izmedju prozora i celog ekrana.

Ova aplikacija radi tako sto treba da 30 puta u sekundi prebaci iz RAM-a u VRAM po ~900KB(i jos malo vise zbog sprajtova) sto mu dodje preko 26Mb u sekundi. Kada bi mogao da slike prebacim u VRAM mislim da bi mnogo brze radilo sve. Takodje se razmisljam da dodam double buffer, ali ne obican double buffer vec da se u jednoj grafickoj strani nalazi pozadina, a sprajtovi se docrtavaju naknadno na vidljivoj strani. S tim da se prva strana ne menja ukoliko nema pomeraja u matrici.

To za plugin u koji mogu samo da posaljem jednu datoteku (tipa rar ili zip ili bilo koji format) i da ne mislim o tome kako radi vec samo da radi je super. Samo me zanima jel je sve to ograniceno na Windows okruzenje ili moze da radi i pod Linux-om i MAC OS-om?
[ Eurora3D Team @ 30.03.2008. 00:25 ] @
Eto ovo za ALT-ENTER nisam ni znao :) Hvala ...
To o sprajtovima i buferovanju tu vidim da imas dosta iskustva ... ja nisam radio u FB ranije. Prvi put sam cuo za njega od vas ovde na forumu a jedina ozbiljnija stvar koju sam napravio u njemu je onaj plugin. Video sam (po forumu) da si se ti mnogo vise bavio time a imas i solidno opste znanje tako da tu mogu samo da potvrdim (prihvatim) ono sto kazete ti i Aleksandar. Ja sam se bavio vise nekim sistemskim stvarima u c/c++ i asm a za ove "svakodnevne programe" VB6 i sad malo java. Ocu da kazem mogao bi da vam napisem neku funkciju u FB inline assembleru za brzo (najbrze :) ) prepisivanje memorije sa nekog dela memorije u neki drugi ali mislim da ti to ovde nebi resilo problem jer vidi. Probao sam u FB da napravim OGL window sa screenres (samo jedna linija koda) i jedan loop za izlaz i tu je trosio 50% procesora (imam dualni sto znaci 100% jednog). Znaci nesto u tim FB bibliotekama nije ok ili postoji neka caka. Istovetna c++ aplikacija bi trosila mizerno malo CPU vremena. (ove FB biblioteke su verovatno bazirane na c jeziku znaci brzina skoro kao asm ali negde nesto ne radi kako treba).
Ovaj plugin framework je za win32 (dll i exe su windows executables) na Linuxu i MAC-u ovi fajlovi mogu da rade samo na emulatoru ili slicnom softveru.
Nisu Fles i Java dzabe toliko popularni :) Ljudi su dosta radili da naprave to za vise platformi

I ovo
Slicno ponasanja (trosenje CPU vremena) u c++ moze da se desi kad je u window proceduri (funkciji koja obradjuje GUI window messages) napravljena neka graska. To i ovo sto si rekao za timer u msg loop me navodi na taj zakljucak koji sam ti rekao ...



[Ovu poruku je menjao Eurora3D Team dana 30.03.2008. u 01:37 GMT+1]
[ Aleksandar Vasic @ 30.03.2008. 11:03 ] @
nemojte se smejati ako lupetam,a mozda da pokushash da smanjih tih 900kb/s :D
[ stefanpn @ 30.03.2008. 14:13 ] @
Code:

&HFFFFFF - 24 bita
  RRGGBB


E sad kod - 32 bita tu je 3 bajta za RGB i jedan bajt za AplhaBlend

Code:

&HFFFFFFFF
  RRGGBBAA


(640 x 480 pixela) x 3 bita = 900 KB ali posto mi koristimo 32 bpp to mu dodje ne puta 3 kako sam ja racunao nego puta 4. pa mu dodje 1.17 MB + Sprajtovi pa sve to 30 puta u sekundi...

Sto mu dodje da tih 900 KB moze da se smanji samo ako se smanji rezolucija ekrana. Ali postoji i drugi "lek" za tu "boljku" a to je da se grafika ne prebacuje iz RAM-a u VRAM, nego da se slike uskladiste u VRAM i odatle prebacuju na vidljivi ekran. Za to se koristi DirectX ili OpenGL. Ali smo se mi dogovorili da radimo samo FreeBASIC.

@ EURORA3D

Nema to zauzece procesora veze sa grafikom, jer u FB-u da stavis i samo:

Code:

do while not multikey(1)
     ' Ne mora nista da se radi u petlji
loop


i zauzece procesora ce biti 100% t.j. na dva procesora 50%. Jer ce se vrteti u petlji koliko god procesor moze da postigne.

E sad kada se koristi SLEEP [milisecond] procesor je slobodan za to vreme u ms. I onda ce zauzece da jako da opadne...

znaci:
Code:

do while not multikey(1)
sleep 30
loop


i nece biti veliko zauzece.
[ Eurora3D Team @ 30.03.2008. 19:30 ] @
Ok kapiram ... tebi nije valjala msg loop
Evo ti kod iz FB helpa za dobru msg loop za GL window. Ovaj program kod mene angazuje 0% CPU vremena (nemerljivo malo) i 2000 K Memorije
Code:

'' include fbgfx.bi for some useful definitions
#include "fbgfx.bi"

Using fb

Dim e As EVENT
Dim As Integer x, y, pressed, col
Dim As Any Ptr img

ScreenRes 384, 64, 32,, GFX_SHAPED_WINDOW

'' create a fancy window shape
img = ImageCreate(48,8)
Draw String img, (0, 0), "GfxLib"
For y = 0 To 63
    For x = 0 To 383
        col = Point(x \ 8, y \ 8, img)
        If (col <> RGB(255, 0, 255)) Then
            col = RGB((x + y) And &hFF, (x + y) And &hFF, (x + y) And &hFF)
        End If
        PSet (x, y), col
    Next x
Next y

pressed = 0
Do
    If (ScreenEvent(@e)) Then
        Select Case e.type
        Case EVENT_MOUSE_BUTTON_PRESS
            pressed = -1
        Case EVENT_MOUSE_BUTTON_RELEASE
            pressed = 0
        Case EVENT_MOUSE_MOVE
            If (pressed) Then
                ScreenControl GET_WINDOW_POS, x, y
                ScreenControl SET_WINDOW_POS, x + e.dx, y + e.dy
            End If
        End Select
    End If
    Sleep 5
Loop While Not MultiKey(1)

[ stefanpn @ 30.03.2008. 20:33 ] @
Ovaj kod angazuje 0% cpu zato sto radi sledece:

Code:

do
    sleep 5
loop until mutlikey(1)


Tj skoro se nista ne desava u 99.99 % rada programa (ScreenEvent(@e) je sve vreme FALSE osim kad se prozor provlaci)...

Isto bi zauzimala i ona moja petlja da nije opterecena crtanjem grafike.



Za one koji nisu videli:
EliteTanks 360
https://static.elitesecurity.o...ads/1/9/1901925/tank%20360.rar
[ Eurora3D Team @ 31.03.2008. 00:36 ] @
Jeste ... upravu si. Doduse kod tebe sleep interval ima mnogo veci znacaj (probao sam sa 100 ms i CPU vreme je 6% al zato i sve ostalo u do while loop normalno radi spoije). Kad sam ja (nekad davno :) ) radio sa ovakvim stvarima secam se da nisam brisao ceo ekran nego samo objekte koji su promenili poziciju od proslog iscrtavanje a ako se nista nije promenilo odma sam prelazio u sledeci krug (ocitavanje tastature i ostalo)...
[ stefanpn @ 31.03.2008. 16:43 ] @
Sacekacemo Krcka da se javi, da vidimo dali ima neki konstruktivan predlog.

Malo bi bilo zamorno da se prati svaki pomeraj i sl... Ipak postoje Api f-je koje to mogu da odrade mnogo brze, i manje nerviranja. Ali ako mozes u ASM da napravis f-ju koja bi mogla da se poziva iz FB i da najbrze moguce kopira sadrzaj sa nekih lokacija iz video memorije na vidljivu stranu, i f-ju koja bi nam omogucavala da prebacimo neke slike u video memoriju. To bi moglo da resi problem.
[ Aleksandar Ružičić @ 31.03.2008. 19:32 ] @
sad sam pogledao ovo sto je Stefan radio i nije lose, ja se nisam javljao neko vreme jer imam mnogo obaveza na poslu, i jos uvek nemam dovoljno vremena da zavrsim engine koji sam poceo, ali uskoro cu ga zavrsiti pa kacim ovde.

sto se tice engine-a, gotovo je ucitavanje png slika (alpha-channel jos uvek malo zeza ali sredicu to) i delimicno je kompletan redraw sistem (engine koristi tehniku dirty rectangles sto znaci da se iscrtavaju samo oni delovi ekrana na kojima je nastala neka promena)

sto se tice kompajlera za EliteScript, on napreduje polako i verovatno ce biti gotov pre gfx engine-a (sto je bolje, jer ce imati vise vremena da se sam kompajler istestira)

k'o sto rekoh, cim stignem da zavrsim nesto postujem kod!
[ stefanpn @ 01.04.2008. 00:17 ] @
http://www.elitetanks.co.nr

BTW: Uzeo sam neki freehost i free domain i da vidite cuda: Nisu ubacili nikakve reklame i banner-e...
Pa sam ja uzeo i sam sam to uradio iz zahvalnosti :)


[krcko: izbrisan spam :D]

[Ovu poruku je menjao Aleksandar Ružičić dana 01.04.2008. u 14:59 GMT+1]
[ Eurora3D Team @ 01.04.2008. 12:32 ] @
A koji je host ... mislim koji im je sajt ?
Sad ces moci da isprobavas ove internet fore sto sam vam slao :)

... by the way :) provalio sam sajt po download URL-u ... http://www.ypu.com/
[ stefanpn @ 01.04.2008. 12:43 ] @
bas taj ypu.com

i domain je www.co.nr.

10GB prostora

12GB Mesecni Bandwith

nema reklama, bannera i sl.

FTP/PHP/MySQL

i sto je najbolje, radi brzo.
[ Aleksandar Vasic @ 01.04.2008. 13:16 ] @
sutra eventualno prekosutra cu ubaciti zvuk u primer stefanpn-a
[ Eurora3D Team @ 01.04.2008. 13:17 ] @
To majstore :)
Sad se baci i na internet proramiranje ...
A nisu zabranili mozda neke fajl extenzije (npr .exe i sl.)?, nema tih ogranicenja ... mislim uglavnom svi imaju neku caku koliko sam ja do sad video ...
[ stefanpn @ 01.04.2008. 13:21 ] @
Nema zabrane ni za sta s'tim da izvrsne datoteke i biblioteke moraju biti u zip ili rar arhivama.

I ne sme da ima pornografije i piratskog materijala.
[ Aleksandar Ružičić @ 01.04.2008. 14:01 ] @
jos nemamo igru a vec pravite sajt :)

nego, Stefane jesi li radio sta u vezi onih mapa i map editora?
[ stefanpn @ 01.04.2008. 15:41 ] @
Level edit ce brzo da iskoci

Nego jedno malo pitanjce...

Kako da pokupim resource za level-e kada ne znam ni u kom ce formatu biti upakovani.

Pa tu jos i taj AlphaBlend i PNG za koje VB nema ugradjenu podrsku.

Moram prvo da se dogovorim s' vama oko ulaznih formata. T.J. Odakle cu da vucem resurse. Iz jedne datoteke ili iz vise datoteka, bmp / jpg / gif / png ili MPF(Mose Pijade Format ) ovaj taj nas format. Posto se Level Editor radi u VB-u to i imamo vec dogovoren format map datoteke to ce sve brzo da ide, samo da sve karte budu na stolu
[ Aleksandar Ružičić @ 01.04.2008. 18:46 ] @
koristi PNG fajlove, sto se tice PNG-a u VB6 pogledaj ovo (fenomenalan kod btw)

sto se tice organizacije fajlova, struktura foldera ce da izgleda ovako:
Code:

+-<Game install dir>
|
+---+-<src>
|   |
|   +---<mapedit>   ... mapeditor source
|   |
|   +---<game>        ... game source
|   |
|   +---<esc>         ... esc source
|
+---+-<snd>
|   |
|   +---<sfx>         ... ovde su specijalni efekti (zvucni)
|   |
|   +---<music>       ... ovde je "pozadinska" muzika
|
+---+-<gfx>
|   |
|   +--+<0>
|   |  |
|   |  +--- 0.png
|   |  |
|   |  +--- 1.png     ... i tako dalje
|   |
|   +--+<1>
|      |
|      +--- 0.png
|      |
|      +--- 1.png     ... i tako dalje
|
+---+-<maps>
|   |
|   +--- 0.map
|   |
|   +--- 1.map        ... i tako dalje
|
+---+-<scripts>
|   |
|   +--- enemy0.esx
|   |
|   +--- enemy1.esx   ... i tako dalje
|
+--- mapedit.exe
|
+--- game.exe
|
+--- esc.exe
|
+--- game.conf


tebe interesuju samo \gfx\ i \maps\ folderi, u \gfx\ folderu se nalaze podfolderi koji predstavljaju tileset-ove (to je jedan od onih flegova u ELITEMAP formatu) u svakom od tih tileset foldera se nalaze png fajlovi koji nose imena 0.png, 1.png, 2.png itd...

u maps folderu ti se nalaze mape, isto su "nazvani" 0.map, 1.map, 2.map itd.
[ masterjoda @ 02.04.2008. 09:23 ] @
Mene je uputio stefanpn, na mikro forumu. Ja bih radio grafike za igru. Evo par mojih radova.





[ Aleksandar Ružičić @ 02.04.2008. 10:28 ] @
dobro izgleda (mada imas gramatickih gresaka :D), ako hoces da ucestvujes u projektu uradi nesto vezano za igru koju pravimo (klon battle city-a), recimo main menu screen, game screen, tile-ove (skini neki battle city klon pa vidi sta sve treba) pa okaci ovde, ako bude dobro primljen si :)

pozdrav
[ masterjoda @ 02.04.2008. 11:13 ] @
Mislio si da uradim pocetni ekran i jednu mapu. Gde da napravim mapu u 3ds max-u ili photoshop-u?
[ Aleksandar Ružičić @ 02.04.2008. 11:56 ] @
pa posto radimo 2D igru znaci u photoshopu :)

inace, mozda u nekoj verziji budemo presli na izometriju (2.5D) pa bi se onda mape radile u 3ds-u (Il slicnom alatu) ali o tom potom...
[ markozelenovic @ 02.04.2008. 12:29 ] @
Odlicno
[ stefanpn @ 02.04.2008. 13:13 ] @
Za graficare...

Elementi od kojih ce mapa biti napravljena trebaju biti 32 x 32 pixela. Sa tim elementima ce se popunjavati matrica. Dok neko ne odradi grafiku koristicemo elemente iz spritelib_gpl koji je besplatan.

Igrica ce se raditi za rezoluciju 800 x 600. Sto znaci da ce se ti title/menu screen-ovi raditi za 800 x 600 x 24bpp

Znaci ako hocete da napravite tileset, koristite sledecu matricu:


A ovo se trenutno koristi


Mada licno mislim da bi polje bilo da se koriste elementi velicine 48 x 48 pixela.

Takodje elementi trebaju biti snimljeni u png formatu. I to element, po element 1.png, 2.png ... n.png
[ Shadowed @ 02.04.2008. 13:24 ] @
Par pitanja (nadam se da nije bilo a ja propustio):
Posto je mapa sastavljena iz ovakvih polja, a nije (bar mislim da nije) potezna igra, da li postoji animacija kretanja sa polja na polje ili samo preskace? Pretpostavljam da je prvo i ako jeste: da li se moze pucati u bilo kom trenutku ili ispaljuje samo kada je bas na polju?
Da li se tenk smatra pogodjenim ako projektil pogodi polje na kojem je tenk ili ako pogodi sam tenk?

Dakle, pitanja se odnose na "premoscavanje" izmedju rezolucije mape i rezolucije ekrana.
[ stefanpn @ 02.04.2008. 13:33 ] @
Naravno da postoji animacija kretanja i moze se pucati u bilo kom trenutku i tenk je pogodjen kada ga metak dodirne.

Najbolje bi bilo da pogledas ovaj primer (nesto sam se malo igrao sa fb-ext-lib-om) pa ces dobiti odgovore na tvoja pitanja.

Na primeru nema skrolovanja mape, ali ce ga biti...
[ Aleksandar Ružičić @ 02.04.2008. 13:41 ] @
inace, sto se tice rezolucije i ja sam za 800x600, ali sprajtovi koje trenutno koristimo (SpriteLib GPL) su radjeni za 640x480, pa cemo zasad da radimo na 640x480, dok neko ne uradi tenkice za 800x600...

Stefane, ti u map editoru stavi mogucnost biranja rezolucije, velicine polja (32x32), i velicine mape (u poljima, ne u pixelima) ne znam dal smo ostavili polje u ELITEMAP formatu za velicinu polja, ako nismo onda dodaj (pre velicine mape)
[ Eurora3D Team @ 02.04.2008. 14:38 ] @
Za Aleksandra ili Shadowed (ili ko je zaduzen za to :) )
Da ne otvaram novu temu ... u poslednjih par dana vam MySQL server koji opsluzuje ovaj sajt malo zakucava ... cesto kad hocu da otvorim neku stranu dobijem MySQL gresku na stranici (ne moze da se poveze sa bazom) ...
[ Shadowed @ 02.04.2008. 14:45 ] @
Stefane, ja to samo informativno, nemam bas mogucnosti da se udubljujem u kod. Ta moja pitanja su napola ono sto me interesuje napola ono sto bi mozda trebalo pomenuti za one koji takodje samo usput posmatraju sta se desava.

Eurora3D Team, hvala na obavestenju, poznat nam je problem, znaju i admini, radi se na tom (kol'ko tolk'o) :)
[ masterjoda @ 02.04.2008. 20:43 ] @
Evo nesto





[ Eurora3D Team @ 03.04.2008. 09:11 ] @
Dali neko zna kako da se dobije hWnd (window handler) prozora koji kreira screenres funkcija ?
Hteo sam da napravim malo bolje resenje za msg loop u ovoj igri (subklasiranjem window procedure) ali nemogu da nadjem hWnd ....
[ masterjoda @ 03.04.2008. 09:13 ] @
A moji modeli... ???
[ Aleksandar Ružičić @ 03.04.2008. 10:04 ] @
@masterjoda: nije lose, mada su tenkici iz SpriteLib GPL-a nekako lepsi za oko, mozes da pokusas njih da obradis malo.

sto se tice eksplozija to nemoras da crtas to cemo da uradimo sa explosion generatorom, evo npr sta on moze da uradi:

[ stefanpn @ 03.04.2008. 12:18 ] @
Moze li ta crna pozadina eksplozije da bude transparentna sa alfa kanalom?

Jer bi onda eksplozije izgledale super!

@Eurora
Ja u VB-u to resavam ovako:

Code:

Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Dim ProzorHwnd as Long
Private Sub Form_Load()
        ProzorHwnd = FindWindow("Notepad", vbNullString) ' Ja sam stavio da trazi Notepad, ali tu upisujes ime prozora
End Sub


Moralo bi da radi i u FreeBASIC-u... :)

[ Aleksandar Ružičić @ 03.04.2008. 13:04 ] @
Citat:
stefanpn: Moze li ta crna pozadina eksplozije da bude transparentna sa alfa kanalom?

Jer bi onda eksplozije izgledale super!


Naravno, magical wand tool :)

Citat:

@Eurora
Ja u VB-u to resavam ovako:

Code:

Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Dim ProzorHwnd as Long
Private Sub Form_Load()
        ProzorHwnd = FindWindow("Notepad", vbNullString) ' Ja sam stavio da trazi Notepad, ali tu upisujes ime prozora
End Sub


Moralo bi da radi i u FreeBASIC-u... :)


evo moje LookupWindow fje (u ovom slucaju je jednostavnije koristiti FindWindow k'o sto je Stefan predlozio, al evo mozda nekom zatreba ovakva funkcionalnost)
Code:

Private Declare Function FindWindowEx Lib "user32.dll" Alias "FindWindowExA" (ByVal hWnd1 As Long, ByVal hWnd2 As Long, ByVal lpsz1 As String, ByVal lpsz2 As String) As Long
Private Declare Function GetClassName Lib "user32.dll" Alias "GetClassNameA" (ByVal hwnd As Long, ByVal lpClassName As String, ByVal nMaxCount As Long) As Long
Private Declare Function GetWindowText Lib "user32.dll" Alias "GetWindowTextA" (ByVal hwnd As Long, ByVal lpString As String, ByVal cch As Long) As Long


Public Function LookupWindow(Optional ByVal ClassName As String, Optional ByVal Title As String, Optional UseLike As Boolean = False, Optional ByVal Parent As Long) As Long
    LookupWindow = GetChild(Parent, ClassName, Title, UseLike)
End Function
'

Private Function GetChild(Optional ByVal hwnd As Long, Optional ByVal ClassName As String, Optional ByVal Title As String, Optional UseLike As Boolean = False)
    
    Dim lHandle     As Long
    Dim lRet        As Long
    Dim sBuffer     As String
    Dim bClassMatch As Boolean
    Dim bTitleMatch As Boolean
    
    Do
        lHandle = FindWindowEx(hwnd, lHandle, vbNullString, vbNullString)
        
        bClassMatch = False
        bTitleMatch = False
        
        If lHandle <> 0 Then
            
            bClassMatch = LenB(ClassName) = 0
            bTitleMatch = LenB(Title) = 0
            
            If Not bClassMatch Then
                    
                sBuffer = String(160, 0)
                lRet = GetClassName(lHandle, sBuffer, 160)
                sBuffer = Left$(sBuffer, lRet)
                
                bClassMatch = (UseLike And (sBuffer Like ClassName)) Or (Not UseLike And (ClassName = sBuffer))
            
            End If
            
            If Not bTitleMatch Then
                
                sBuffer = String(160, 0)
                lRet = GetWindowText(lHandle, sBuffer, 160)
                sBuffer = Left$(sBuffer, lRet)
                
                bTitleMatch = (UseLike And (sBuffer Like Title)) Or (Not UseLike And (Title = sBuffer))
            
            End If
            
            If bClassMatch And bTitleMatch Then
                
                GetChild = lHandle
                Exit Function
            
            Else
                
                lRet = GetChild(lHandle, ClassName, Title, UseLike)
                
                If lRet <> 0 Then
                    
                    GetChild = lRet
                    Exit Function
                
                End If
                
            End If
        
        End If
    
    Loop While lHandle

End Function

samo treba sa Spy++ videti klasu prozora koji se dobije sa ScreenRes
[ stefanpn @ 03.04.2008. 13:10 ] @
Ali sa magical wand ne bi dobili alpha chanel za mesta na kojima bi vatra mogla malo da se providi.

Nego moze li to cudo za eksplozije da napravi eksploziju na providnoj povrsini?
[ Aleksandar Ružičić @ 03.04.2008. 13:13 ] @
kako ne bi mogla da se providi?

dobijas transparentnu eksploziju za par min!

EDIT:

evo:

mada ipak, sa magic wand nisam dobio zadovoljavajuce rezultate, ali sam uspeo da postignem zeljenu transparenciju pomocu rgb kanala, tj njihove transparencije
[ stefanpn @ 03.04.2008. 13:31 ] @
Pa dobro, samo nisam bas tako mislio. Ovde se vidi crni trag ispod eksplozije ali i ovo daje dobre rezultate...
[ Aleksandar Ružičić @ 03.04.2008. 13:36 ] @
pa nema crnog traga... crna boja je uklonjena u potpunosti, ovo su samo nijanse crvene boje, nego sam ja duplirao lejer da pojacam jacinu crvene, to je mozda potamnilo neke delove (koji opet nisu crni nego tamno crveni)

EDIT:


evo uradio sam animated gif:


mada sam radio copy/paste frejmova tako da nisu pozicionirani tacno u pixel a i mogao sam malo da ubrzam animaciju... (ovo ce sve da bude mnogo lakse kroz fb)

[Ovu poruku je menjao Aleksandar Ružičić dana 03.04.2008. u 15:16 GMT+1]
[ Aleksandar Vasic @ 03.04.2008. 15:47 ] @
eo sa zvukom,ali zbog velicine fajla izbacio sam pesmu za background music,stoga ubacite fajl koji zelite u ovaj folder pod imenom pesma.mp3

Ne zamerite shto pri pucanje se chuje zvuk explozije ne dzukele koja laje ;)

tnx to @stefanpn, @krcko
[ Eurora3D Team @ 03.04.2008. 16:02 ] @
:) Hvala za kod
Mislio sam da OGL cuva hWnd u nekoj info strukturi i da ima neka funkcija za to ... da ne nabadamo prozore :) al ok moze i ovako
[ Eurora3D Team @ 03.04.2008. 16:20 ] @
Citat:
samo treba sa Spy++ videti klasu prozora koji se dobije sa ScreenRes

Bavio sam se time (i window stvarima uopste) ... imate jedan program koji radi to i pravi providnost prozora (pisao sam ga je u asembleru) na http://www.eurora3d.com/files/TransparentWin.zip
Prosli put sam mislio na neku FB funkciju koja bi vratila window handler posle screenres ... al vidim da ni vi nemate neko bolje resenje od trazenja preko win API-a (trazio sam i po FB dokumentaciji)
[ Aleksandar Ružičić @ 03.04.2008. 16:41 ] @
evo ja naidjoh na jos jedan explosion generator, evo sta sam generisao (uradio gif, ali ovaj put sam vodio racuna o poziciji svakog frejma):



nekako mi ovo lepse za igru nego onaj predhodni...
[ Aleksandar Vasic @ 03.04.2008. 16:50 ] @
eo ubacio sam umesto dzukele gunshot
[ Aleksandar Ružičić @ 03.04.2008. 22:52 ] @
e ukljucite u zip/rar i potrebne dll-ove (bass, jpeg, sta vec) dovoljno je da budu u istom folderu kao i exe, ne moraju da budu u system32
[ Eurora3D Team @ 03.04.2008. 23:23 ] @
@stefanpn
Probao sam da malo optimalizujem onaj tvoj primer (nije ova zadnja verzija) ... i nisam nesto narocito zadovoljan ... tako da ovaj kod bolje koristi ako ti bude trebao za neke proste stvari. CPU vreme je sad oko 10% (na mom cpu ... a bilo je oko 20) al mi je ventilator na laptopu urlao dok sam ovo programirao :)
Probao sam skoro sve sto znam ... od multithreadinga , kratkih loop-ova subklasiao sam i GL window (sad je malo poslusniji :) ) al na kraju sam zakljucio (pored toga sto si mogao malo srecnije da uradis glavnu petlju) da ova OGL library i nije nesto optimalizovana ... Koliko sam shvatio vi cete ionako da koistite nesto drugo za grafiku tako da ovaj kod moze nekom da sluzi kao neki primer
Nasao sam i kako se iz FB dobija hWnd posle screenres :) ...
U zipu su sve linkovane dll (3 kom), kod , program i slicice





[Ovu poruku je menjao Eurora3D Team dana 04.04.2008. u 01:32 GMT+1]
[ Eurora3D Team @ 03.04.2008. 23:59 ] @
by the way :) Zasto niko ne ukljuci FbEdit project file. Ova zadnja verzija sa zvukom je ok al nije napravljen kompaktan projekat.
@Aleksandar Vasic netrebas da kompajlujes Music.bas i arrey ... ova dva fajla su ukompajlovana sa main fajlom
I mislim da je jednostavnije da su fajlovi dynarray.bas i music.bas bi fajlovi ...
Al sve u svemu dobro je :) vidi se da je nesto uradjeno ....
[ Aleksandar Ružičić @ 04.04.2008. 00:14 ] @
i ja se pitam sto ne prave .fbp fajlove (mozda ne koriste fbedit?) al dobro, ovo je ionako demo - vezbaju se momci :)
[ Eurora3D Team @ 04.04.2008. 00:27 ] @
da, to je i meni palo na pamet :) ... Mozda ne rade u FbEdit-u ... a secam se da se pricalo jel FbEdit i bilo je svi hoce ...
[ stefanpn @ 04.04.2008. 02:37 ] @
Ja sam se uhvatio za FBIDE, vidim da nije bas najbolji ali je definitivno najbrzi...

@Eurora
I kod mene tvoj primer trosi duplo manje procesorskog vremena.
[ Eurora3D Team @ 04.04.2008. 10:14 ] @
Zaboravio sam da ti se zahvalim za pominjanje u commentu u source kodu
' We also have some help, support and criticism from
' Nebojsa(Eurora3D Team) and Shadowed

Mozes da dodas i And sometimes sarcasm and irony ...
Zezam se




[Ovu poruku je menjao Eurora3D Team dana 04.04.2008. u 16:38 GMT+1]
[ Aleksandar Vasic @ 04.04.2008. 12:37 ] @
@Eurora to sam kompajlovao jer sam neshto menjao po njima,pa chisto da vidim ima li greshaka i onda tako ostalo ;)
[ Eurora3D Team @ 04.04.2008. 14:44 ] @
Ok ... al exe ukljuceni u arhivu samo nepotrebno povecavaju vreme downloada.
Ovde su svi ukljuceni u main tako da svaka greska u kodu moze da se vidi kompajlovanjem main fajla ...
Jel i ti koristis neko drugo IDE ? Ja i Aleksandar imamo FbEdit za FB. U timskim projektima je bolje da svi imaju isto IDE ako nista zato sto ce lakse da vide sta su drugi radili na kodu ... (npr. ovde je jedan resource fajl .rc za ikonicu programa a moze da se ubaci i version info itd... pa je zato bolje da se ima jedan glavni project file)

[Ovu poruku je menjao Eurora3D Team dana 04.04.2008. u 16:33 GMT+1]
[ Aleksandar Vasic @ 04.04.2008. 22:57 ] @
@Eurora ja koristim onaj FbEdit koji mi je krcko rekao ehehe

Eo izbacio sam music.exe i ubacio sam potrebne dll-ove
[ Eurora3D Team @ 04.04.2008. 23:35 ] @
To :)
Tako rade profi programeri ... :)
Zezam se ... i sam znas da je ovo javni forum i mnogo programera gleda teme (nadam se da nismo samo mi :) ) I neko ce da skine fajl , raspakuje i nasumicno isklikce ovo ono ... i da kaze radi / neradi (onaj Music.exe neradi :) ) ...
Zbog toga sam ti napisao onaj prosli email ...
[ stefanpn @ 05.04.2008. 15:40 ] @
Izasla je nova verzija FreeBASIC Compiler-a 0.18.4 Beta:

http://downloads.sourceforge.n...IC-v0.18.4b-win32.exe?download

I malo sam izmenio sajt: http://www.elitetanks.co.nr

[Ovu poruku je menjao stefanpn dana 06.04.2008. u 04:57 GMT+1]
[ Aleksandar Ružičić @ 06.04.2008. 16:53 ] @
sad videh da je Gojko topovao temu i da ju je postavio na naslovnu stranu :)

znaci da moram da pozurim sa draft verzijom engine-a :D (ocekujte je nocas ili sutra u toku dana)
[ Lachie Dazdarian @ 06.04.2008. 20:20 ] @
Ja bih rado sudjelovao, ali sam trenutno prezaposlen nekim drugim stvarima. Uostalom, ovakav način rada mi je dosta stran. Ja sam više "one-man team" tip osobe.

Inače, moglo bi se reći da sam nešto iskusniji u FreeBASIC-u što se tiče game designa od krcka.

Ako je netko zainteresiran može provjeriti moje tutorialse: http://lachie.phatcode.net/articles.php

I dva moja game engine (dosta slični ovome što pokušavate napraviti):

http://lachie.phatcode.net/fbscroll.php
http://lachie.phatcode.net/screenbyscreen.php

Možda se nekih mjesec dana budem nešto ponudio...
[ Aleksandar Ružičić @ 06.04.2008. 20:25 ] @
Pozdrav Lachie,

prvo da ti pozelim dobrodoslicu na EliteSecurity forume u svoje ime i u ime svih clanova :)


a drugo samo zelim da potvrdim ovo:
Citat:
Lachie Dazdarian: Inače, moglo bi se reći da sam nešto iskusniji u FreeBASIC-u što se tiče game designa od krcka.

posto sam ja uglavnom ucio fb iz Lachie-jevih igara i tutorijala (koje savetujem svima da procitaju)

poz jos jednom!
[ stefanpn @ 06.04.2008. 21:36 ] @
He, he pa igrao sam ja ove igre...

Primetio sam da autor u nekima koristi isto

Code:

ScreenSet vpage, vpage xor 1

vpage = vpage xor 1


u kombinaciji ScreenLock / ScreenUnlock i zauzece procesora se vrti na 80%. Sto znaci da se nismo samo mi susreli sa ovim problemom...

@Lachie Dazdarian

Impresivan spisak igara, nekih 50% sam igrao, a da nisam ni znao da poticu sa ovih prostora!
[ Eurora3D Team @ 07.04.2008. 01:03 ] @
Citat:

u kombinaciji ScreenLock / ScreenUnlock i zauzece procesora se vrti na 80%. Sto znaci da se nismo samo mi susreli sa ovim problemom...

:) Da
Inace svaka cast autoru ... fin i pedantan kod ...
Stefane mi smo izgleda spustili CPU vreme na minimum sto se tice ovakvih programa u FreeBasicu :) al bi isto voleo da nam Lachie otkrije neke FB trikove u vezi ovoga (ako se bavio time) ....
[ Lachie Dazdarian @ 07.04.2008. 04:27 ] @
Pa baš i ne. Taj ti je problem u FreeBASIC-u, recimo tako, zajeban.

Jedino riješenje koje ljudi spominju je SLEEP u svim LOOP-ima.

Ima dosta da sam ja postavio pitanje u svezi CPU usage-a u fb.net forumu:

http://www.freebasic.net/forum...t=8878&highlight=cpu+usage

Jedan drugi thread nudi još neke korisne informacije:

http://www.freebasic.net/forum...t=9137&highlight=cpu+usage

A ima i zanimljiv thread opcenito o LOOP-ovima u FreeBASIC-u: http://games.freebasic.net/forum/index.php?topic=22.0

Više manje, svodi se na to da je samo bitno izbjegavati 100 % CPU usage, a u ostalim slucajevima visok CPU usage je rezultat cinjenice da CPU nema što drugo raditi pa sve stavlja u FB program koji se vrti. Ako otvorite task manager i probate nešto raditi (micati prozore), primjeti cete da se CPU usage za doticni FB program smanjuje. Barem je tako kod mene kad pokrenem Mighty Line. A možda je problem u kodu GFXlib 2. Ne znam.

Ali iskreno, ja se osobno s tim ne zamaram. Netko ko hoce igrati moju igru neka u isto vrijeme ne ocekuje da može raditi hard disk check na viruse nekim antivir programom ili renderirati u Terragen-u. :P

Ja na to gledam kao na nešto što je upitno da je problem "in the first place", i ako je, nije samo problem FreeBASIC-a neko i mnogih drugih aplikacija. Ali naravno, sve dok se ne radi o 100 % CPU usage.
[ Aleksandar Ružičić @ 07.04.2008. 04:30 ] @
rekoh da cu mozda veceras okaciti neki source i evo kacim, da ne ispadnem lazov :)

mada nije zavrseno sve sto sam planirao, ali dobro...

u pitanju "draft" verzija engine-a, i mozete da vidite kako je kod organizovan i kako je event-handling implementiran (koji sam istestirao i nadam se da nisam prevideo neki bug, tako da je taj deo zavrsen)


sutra cu jos da ubacim kod za ucitavanje slika i iscrtavanje frejmova pa cu okaciti pravi demo.


poz
[ Eurora3D Team @ 07.04.2008. 13:33 ] @
@Lachie Dazdarian
I ja mislim da je problem delimicno u libfbgfx.a
Posto je kod za nju slobodan (imam kod za fbgfx i fb runtime lib) probacu malo da je optimalizujem.
Napravio sam CodeBlocks projekat (CodeBlocks IDE i mingw kompajler) za libfbgfx staticku library i trenutno eksperimentisem.
Vidim iz njihovih komentara da su imali odredjenih problema u ovom kodu.
Uspeo sam da duplo spustim zauzece CPU trenutno ... pa ako uradim nesto zadovoljavajce postavicu lib i c source kod a vi zamenite libfbgfx.a u lib\\win32\\
By the way ... Aleksandre na prvi pogled engine je lak za koriscenje ...

[ stefanpn @ 07.04.2008. 14:00 ] @
Jos jedan problem sa sleep nastaje kada se program pokrece na sporijim racunarima, je ce ako se stavi Sleep 30, u slucaju da ciljamo na 33 FPS, a pri tome racunaru treba makar 15ms da izvrsi proracune i iscrta grafiku, FPS ce drasticno pasti... jer cemo umesto pauze od 30ms imati 30 + 15 ms. Pa program mora da racuna koliko mu je vremena trebalo da izracuna i iscrta i to vreme da oduzme od 30.

Code:

    stime1 = timer
    .
    . ' Crtanje, proracuni ...
    .
    stime2 = int(30 - (timer - stime1) * 1000)
    if stime2 < 0 then stime2 = 0
    sleep stime2


Tako cemo iz svakog racunara dobijati FPS Rate sto blizi ciljanom...

S' tim da ce kod racunara kojima treba vise od 29ms za proracune i iscrtavanje zauzece procesora biti 100% :(

I jos jednom da se ponovim da mislim da bi sve to mnogo brze radilo kada bi se grafika nalazila u VRam-u a ne u Ram-u, jer se pri rezoluciji od 640x480x32 sa 30 FPS u jednoj sekundi prenese iz Ram-a u Vram preko 35 MB!
[ Aleksandar Ružičić @ 07.04.2008. 14:27 ] @
Citat:
Eurora3D Team:By the way ... Aleksandre na prvi pogled engine je lak za koriscenje ...

na to i ciljam :)

@stefanpn: ako si gledao kod koji sam poslao tamo nema limitiranja fps-a tako da necemo imati taj problem, sve animacije tj proracuni ce biti time-based (uzimace u obzir broj sekundi koje su prosle od poslednjeg frejma) tako npr ako imas objekat koji se krece brzinom 100 pixela u sekundi onda ces u onFrame handleru uzimati u obzir fElapsed promenljivu (tako sto ces 100 pomnoziti sa fElapsed i dodati toj promenljivoj), npr:
Code:

Sub InGameScreen_onFrame(fElapsed As Single, eInputEvent As Engine.InputEvent, eventData As FB.EVENT)

    Player.X += Player.Speed * fElapsed   ' pomeramo igraca konstantom brzinom, bez obzira na FPS

End Sub
[ stefanpn @ 07.04.2008. 14:35 ] @
@Aleksandar Ruzicic
Tvoj projekt upravo gledam...

I svidja mi se koncepcija projekta. Samo i ovde se koliko sam video javlja problem prevelikog zauzeca procesora 40% bez grafike. Dobra stvar je sto igra nije zavisna od FPS Rate-a.

A predhodni post je vise bio odgovor na Eurorinu pricu.
[ Aleksandar Ružičić @ 07.04.2008. 14:41 ] @
meni ovaj primer (bez grafike, samo Print) zauzima 6-8% procesora (core2duo na 1.8 GHz)
[ stefanpn @ 07.04.2008. 14:48 ] @
Evo kako stvari stoje na mom racunaru:




[ Aleksandar Ružičić @ 07.04.2008. 14:55 ] @
pa Duron je u pitanju, nije ni cudo :D

salim se, ja taj deo necu optimizovati (slazem se sa Lachiem da kad neko igra igru ne treba da radi jos 100 stvari pored toga) ali ako neko hoce (Eurora?) moze slobodno da pokusa da spusti CPU usage pa cemo ubaciti to u engine
[ Eurora3D Team @ 07.04.2008. 16:10 ] @
Pokusavam ... prvo da optimalizujem staticku biblioteku ... pa cemo da vidimo i FB kod
Imas onaj kod za FB (sto sam poslao Stefanu ... jedan bi fajl) doduse ovaj tvoj projekat je sasvim drugacije arhitekture.
I meni tvoj engine trosi dosta CPU (20 - 30 %) (Intel dual core) ali je dobro zamisljen u principu (i manje vise nije do tebe)
Pa nije bas najlepsi odgovor za igrace (a ovo i nisu neke fensi 3D igre) da ne pustaju nista drugo u isto vreme ... probacemo svi u svom domenu da doteramo ovo ...
[ Eurora3D Team @ 07.04.2008. 16:23 ] @
Evo vam trenutna verzija libfbgfx.a koju sam kompajlovao (duplo manje CPU na Aleksandrovom enginu). Sacuvajte originalnu libfbgfx.a iz fb lib\\win32 foldera negde a stavite ovu u lib\\win32 i prekompajlujte kod.
[ Aleksandar Ružičić @ 07.04.2008. 16:29 ] @
jeste smanjen cpu usage, kod mene je sad 3-4%

sta si uradio? vidim da je ova tvoja verzija dosta manja od originala (163 KiB a original je 340 KiB)
[ Eurora3D Team @ 07.04.2008. 16:43 ] @
Pa napisao sam (prosli put) da imam souce te biblioteke. Velicina donekle zavisi od kompajlera,
Promenio sam duzine par while petlji za sad ... imam jos neke ideje samo moram prvo da shvatim potpuno kako radi ...
Ironicno i oni cu u c fajlovima koistili Sleep :) u petlji za iscrtavanje grafike, pokusavam da promenim timer mehanizam za iscrtavanje ...
Inace arhirekrura ove biblioteke je interesantna ....
By the way grafika se sad redje iscrtava (nesto manje puta u sec)

[ Aleksandar Ružičić @ 07.04.2008. 16:54 ] @
ma imam i ja source, samo me interesovalo sta si menjao :)
[ Eurora3D Team @ 07.04.2008. 17:02 ] @
Menjao sam uglavnom win32\\libfb_gfx_driver_gdi.c i win32\\libfb_gfx_win32.c i prebacio sam grafiku na obican GDI
Postavicu kod kad zavrsim (al samo ako bude bas extra bolji :) )
[ Eurora3D Team @ 07.04.2008. 17:10 ] @
Pogledaj sad CPU kad se prozor ne iscrtava (kad je zaklonjen ili minimalizovan). About:Zero :)
[ stefanpn @ 07.04.2008. 17:51 ] @


[ Eurora3D Team @ 07.04.2008. 18:35 ] @
:) Dobro ... nije uvek duplo
[ markozelenovic @ 07.04.2008. 20:04 ] @
Ko bi zaduzen za AI???
[ Lachie Dazdarian @ 07.04.2008. 20:08 ] @
Eurora3D, mislim da bi ljudi u FB zajednici stvarno voljeli znati za ovo. Molio bih te da pokazes promjene u gfxlib 2 codu u www.freebasic.net/forum u General Programming sekciji.

Inače, odličan posao za sad. Volio bih da mogu znat što točno radiš, ali moje programske vještine su dosta limitirane (nemam pojma o C kodu).

EDIT:

Usput, što se tiče GDI-a, nadam se da si ovo primjetio u gfxlib dokumentaciji:

Citat:

gfxlib will always choose the best driver for your system when a new video
mode is set via SCREEN. To override driver selection, you can set the FBGFX
environmental variable to the name of the driver you want to be tried first:
on Win32 for example you could do:

set FBGFX=gdi

This way gfxlib will first try to initialize a driver named "GDI"; if given
driver fails or cannot be found, gfxlib will fallback on the usual automatic
driver selection path.


[Ovu poruku je menjao Lachie Dazdarian dana 07.04.2008. u 21:26 GMT+1]
[ stefanpn @ 07.04.2008. 20:26 ] @
@MarkoZelenovic

Ja.
[ markozelenovic @ 07.04.2008. 20:28 ] @
Pa uradi onda nesto ...
Bilo bi dobro da nemoram da igram sam sa sobom mislim ...
[ stefanpn @ 07.04.2008. 20:33 ] @
Pa to sto ti igras, i nije ono na cemu se trenutno radi...

To je samo neki test koji sam napravio.

A sto se tice igranja, imas Lanchievu kolekciju pa uzivaj... http://lachie.phatcode.net/
[ markozelenovic @ 07.04.2008. 20:40 ] @
kad mogu ocekivati taj vas ai?
[ Aleksandar Ružičić @ 07.04.2008. 20:44 ] @
Marko ako si toliko nestrpljiv prikljuci se timu i ti ga napisi :)

nama se ne zuri, nemamo nikakve rokove... kad bude bice...
[ markozelenovic @ 07.04.2008. 20:47 ] @
jok ni meni se ne zuri
[ Aleksandar Ružičić @ 07.04.2008. 20:54 ] @
onda super, sacekaj 15-20 dana. tada ce igra biti verovatno gotova, pa ces moci da igras kolko 'oces :)
[ Eurora3D Team @ 07.04.2008. 22:34 ] @
Momci , tek sad sam video ove zadnje tekstove u vezi liba.
@Lachie Dazdarian
Ustvari uopste nisam citao dokumentaciju (ako mislis na c kod niti mi je poznato da postoji) a ni znanje FB mi nije zavidno.
Sve sto sam razumeo o radu biblioteke je iz samog c koda (nekih par sati posla ukupno) i zahvaljujuci ranijem iskustvu u nekoliko pr. jezika (najvise c/c++)
Promene nisu velike (desetak pravih linija za sad) i imao sam u vidu samo ovaj i slicne tipove programa dok sam je prilagodjavao.
Iako promene nisu velike performanse su znatno bolje.
Forsiran je GDI drajver jer se na testu pokazao najbolji za ovaj kod i smanjio sam broj iscrtavanja u sekundi da bi povecao performanse.
Ako stvarno napravim neka znacajna poboljsanja (po mojoj proceni znacajna) rekao sam da cu da postavim c kod i kompajlovanu libfbgxf
Ako neko ima neku dokumentaciju ili sugestiju i sl u vezi ovoga slobodno stavite ovde. Isto vazi i za FB RunTime lib.
Ja sam profesionalni programer (znaci nemam bas mnogo slobodnog vremena) ali kad stignem napravicu ponesto , kao i do sad.
Lachie vidim da si iskreni ljubitel FB-a pa pogledaj ako te zanima i ovo http://www.elitesecurity.org/t314322-0#1883686 i kodove koje sam kacio na ovoj temi (posto si se kasnije uljucio)



[Ovu poruku je menjao Eurora3D Team dana 07.04.2008. u 23:49 GMT+1]
[ Eurora3D Team @ 07.04.2008. 23:22 ] @
Buy the way :) ... Zbog GPL-a obrisao sam library fajl (smatram da je ekipa koja je ovde okupljene skinula fajl za test) jer nije namenjen za javnu distribuciju trenutno pa ko se ne slaze sa GPL-om a skinuo je fajl moze da ga obrise :)
Kad stignem da je doradim postavicu je na FB sajt zajedno sa ukljucenim licencama.
[ Lachie Dazdarian @ 08.04.2008. 00:00 ] @
Mislio sam na obicni user-doc za gfxlib.

Što se tiče FB-a, moglo bi se prije reći da sam zaljubljenik u oldschool igre. A FB volim jer omogućava programerskom anti-talentu kao meni za u konačnici programira takvu igru.
[ Eurora3D Team @ 08.04.2008. 00:55 ] @
Ma da antitalenat :)
Ako imas ovoliko dobrog koda onda imas bar 100 puta vise ostalog koda, a posle toliko programiranja niko nije ni pocetnik ni antitalenat.
FB je simpatican jezik. Ja sam poceo sa onim obicnim basicom i asemblerom na 64k rama pre 22 godine (kad sam imao 10 god.)
Steta sto se manje vise svi open source projekti razvijaju sporo i zavise uglavom od necije dobre volje i vremena. Kad bi neko uzeo da ga intenzivo razvija (i IDE i kompajler) FB bi za kratko vreme prestigao ono sto je danas VB6.

U vezi onog citata iz FB doca
GDI drajver ne moze da omane na win32 zato sto je to ustvari prirodni windows gui (obicni prozori sa odredjenim kod frameworkom za iscrtavanje , mouse capturing itd)
I to se samo texnicki naziva drajver inace u sustini to je taj framework (nesto slicno kao iz mog primera optimalizacije za Stefana samo naravno mnogo komplikovanije)



[Ovu poruku je menjao Eurora3D Team dana 08.04.2008. u 02:06 GMT+1]
[ Aleksandar Ružičić @ 08.04.2008. 01:40 ] @
samo jedno pitanje, da li ce te izmene koje pravis razbiti kompatibilnost sa vistom? jer je tamo gui prebacen na directx, nema vise klasicnog gdi-a (mada verujem da je ostavljen kao backward-compatibility nisam upucen u vistu uopste)

a mozda je i ovo moje pitanje glupo... mada se nadam da cete mi oprostii jer ne znam nista oko viste :)
[ stefanpn @ 08.04.2008. 02:13 ] @
Ja bih jos i da dodam da GUI NIJE brzi od DirectX-a...

A evo i konkretnog dokaza u datoteci

DirectX je brzi od GDI, ali je primer limitiran na 33 FPS, tako da mozda necete videti poentu ako imate "brzu masinu".


Evo i linka ka celom "demo"-u: ovde
[ Aleksandar Ružičić @ 08.04.2008. 02:19 ] @
pa normalno da GDI nije brzi od DIrecX-a, DirectX je hardware-accelerated (gde je to moguce) dok GDI nije
[ stefanpn @ 08.04.2008. 02:21 ] @
Htedoh, da kazem da je bolje da se koristi DirectX driver za FB, jer radi brze.
[ Eurora3D Team @ 08.04.2008. 03:11 ] @
Nije glupo pitanje ... doduse ni ja nemam vistu ali racunam da su api funkcije zadrzane bez obzira na engine jer u suprotnom nijedan GUI program radjen pre viste nebi radio na njoj, a radi....
Stefane jeste DX je brzi al je bas DX trosio CPU vreme ovde zbog nekih drugih stvari u frameworku. Meni je cilj bio da rasteretim procesor.
Ja sam jednostavo danas pre podne uzeo da nesto malo promenim na toj statickoj biblioteci za FB (i uspeo donekle) a kad sam ponovo popodne pogledao sajt stvorila se cela ova frka :)
Mislim nije mi cilj da usavrsavam FB biblioteke, ovo sam uradio jedino zbog ove teme i igre koja se radi ... al ako nesto usput mogu da popravim u FB popravicu
Sto se samog DX tice on iz FB-a moze da se koristi nezavisno od gfx-a. Postoji primer ...
[ stefanpn @ 08.04.2008. 15:28 ] @
Ma, nije frka(taman posla), ovo je samo diskusija.

BTW: Na FB forumu sam procitao da najverovatnije postoji neki bug u DirectX drajveru za FreeBASIC. Pa je zato zauzece procesora toliko.
[ Eurora3D Team @ 08.04.2008. 16:36 ] @
Da ... linkovana je debug verzijom jedne DX9 dll
To je kad se DX koristi posebno (ne ovo sa screenres)
Problem je jedino ako namas taj dll (a uglavnom nemas jer je debug verzija :) ) Srecom ja sam imao DX9 SDK pa sam prekopirao tu dll da bi probao FB primer.
A ovo za DX u gfx-u jos proucavam ... istina je da taj driver trosi najvise CPU vremena
[ Lachie Dazdarian @ 08.04.2008. 23:15 ] @
Ma dobro, možda nisam programerski anti-talent, ali sam poprilično limitiran programer. To najviše proizlazi iz činjenice da me samo interesira game dev, te naučim toliko programiranja koliko trebam da riješim neki problem tokom programiranja igre. I ne libim se da koristim tuđi kod, dok su programeri više motivirani da ga sami riješe. Baš sam na tu temu napisao jedan članak za FB community e-zine QBE. Broj s tim člankom bi trebao izaći ovaj viked, ako te zanima.

Anyway, onaj citat i fbgfx doc-a sam postavio jer po meni nema previše smisla napraviti verziju fbgfx-a koja forsira GDI ako se on može forsirati s jednostavnom komandom u kodu.
[ Eurora3D Team @ 08.04.2008. 23:32 ] @
Pa nije celo resenje samo odabrati GDI ... ima i nekih delova c koda
Ja sam imao jednostavnu ideju da rasteretim procesor (zato sto cesto kompajlujem FB kod sa ove teme i ventilator na laptopu mi ponekad urla dok isprobavam).
Odabrao sam GDI kao drajver koji trosi najmanje CPU vremena i malo sam prilagodio kod za njega.
Da sam to uradio za DX on bi i dalje imao srazmerno najveci CPU %
Danas sam isto malo testirao fbgfx ... i ima nekih interesantnih stvari Npr jedna verzija je ordadjivala onaj Aleksandrov engine sa skoro 0% CPU grafika se iscrtavala ali je mgsloop bila presecena (mouse i key input)
[ Eurora3D Team @ 08.04.2008. 23:53 ] @
Stefane mislio sam na DX3D prosli put.
Vidi ovaj kod , jel imas d3dx9d.dll ?
http://eurora3d.com/files/D3DX.zip
Ironicno :) ... ovaj 3D program trosi samo 1% CPU
[ stefanpn @ 09.04.2008. 00:45 ] @
Jos bolja stvar sto se nigde u njemu ne spominje sleep, a vrti se non stop u do petlji!

To znaci da sleep nije jedino resenje...
[ Aleksandar Ružičić @ 09.04.2008. 00:54 ] @
stefane, pa i nije sleep jedino resenje, ali to je najlakse cross-platform resenje za freebasic :)
[ Eurora3D Team @ 09.04.2008. 01:28 ] @
Da ... a i inace u win API-u nema cekanja u msg loop i to ne pravi nikakvo zauzece u cpu
Oni su to valjda resili u tim funkcijama ...
Ovo je klasican kod za window msg loop (osim Render())
Code:

'' Enter the message loop
            dim as MSG msg 

            do while( msg.message <> WM_QUIT )

                if( PeekMessage( @msg, NULL, 0, 0, PM_REMOVE ) ) then
                    TranslateMessage( @msg )
                    DispatchMessage( @msg ) '// odavde skace na MsgProc
                else
                    Render()
                end if
            loop
[ Dusan00000 @ 11.04.2008. 10:34 ] @
Ova igra mi deluje zanimjivo, poznajem VB,VBS,ASM,Java,HTML(ovo necu nabrajati),C ali brate ne znam taj FreeBasic, ali ukapiracu ga za nekih mesec dana,pa ako bih mogao, prikljucio timu, ako vam nije problem sto imam 11 godina(ove godine 12).
[ stefanpn @ 11.04.2008. 13:26 ] @
Dusane, ja ne vidim sto bi tvoje godine bile problem, mi ovde i neznamo ko koliko ima godina!

Ako znas ASM sa 11 godina, onda svaka cast...

Jedino sto ce ovaj projekt za mesec dana vec biti gotov (nadam se).
[ Aleksandar Ružičić @ 11.04.2008. 21:09 ] @
i ja se nadam da ce ovaj projekat biti skoro gotov, posto glavni deo engine-a privodim kraju (ostalo mi da ispeglam nesto u vezi bitmap fontova i kontrola pa cu okaciti drugu draft verziju sa demoom veoma uskoro)

Dusane sto se tice godina to sasvim nije bitno, bitno je da imas znanja a kad naucis freebasic ukoliko imas dovoljno znanja ne vidim zasto se ne bi prikljucio timu... kao sto rekoh ovaj projekat ce erovatno biti gotov uskoro ali bice drugih (nadam se) tako da ce imati na cemu da se radi...
[ Aleksandar Ružičić @ 12.04.2008. 04:47 ] @
ipak sam odlucio da okacim drugu draft verziju bez fontova i ui kontrola, to sam ostavio za trecu draft inkarnaciju naseg enginea :)

elem, imate demo (main.exe) pa se igrajte :D (uvatite lopticu misem pomerite je i pustite trebalo bi da odskace)


a sto se tice cpu usage-a kod mene je ~35%


p.s. fbp vam je u \test\ folderu
[ stefanpn @ 12.04.2008. 13:35 ] @
Uspeo si sa PNG... :)

Samo jedna stvar, posto ti verovatno imas CPU sa dva jezgra zato je CPU usage ~35% ili ~70% jednog procesora...

Kod mene je ~80% :(

Inace je skroz smooth i ekstra mi se svidja. Sad cu malo se poigram sa njim.
[ Lachie Dazdarian @ 12.04.2008. 21:14 ] @
U ***ote. Ovo izgleda i vrti se odlično.

Nadam se da ćeš dobro dokumentirati kod kada dovršiš engine.

Posebno su mi zanimljivi dijelovi koda u bitmap.bas. Ali baš ih ne kužim. :P
[ Eurora3D Team @ 13.04.2008. 01:11 ] @
Dobar je ... radi ok , pedantno si ga napisao i koristio si koliko vidim skoro ceo arsenal FB-a.
Mozda potpuni pocetnik nece moci da shvati mnogo ... ali ko zna nesto o programiranju moze dosta da nauci.
Kod mene je CPU oko 40% (dualni intel)
Buy the way momci imam lepe novosti ... (ili lose :) kako se uzme)
Ovih dana sam po netu trazio 2D biblioteke (c ili c++) da bi eventualno neku prekompajlovao za FB i zakljucio sam da sve multiplatformske (SDL itd) biblioteke angazuju bar ovoliko a neke i vise CPU vremena. Dok one koje su samo za win32 angazuju mizerno malo (npr u jednoj je koriscen DX8 i tu je 0-1%)
Cak i ako je u multiplatformskoj biblioteci izabran DX za renderovanje stvar je ista.
Zakljucak , izgleda da sama arhitektura multiplatformskih biblioteka ne moze mnogo bolje da se uradi nego sto je sad tako da nama performanse ovde i nisu lose , cak su medju boljima.
Resenje za FB i win32 vezano za ovaj CPU problem bi bila neka nova 2D biblioteka koja cilja samo na win32 (sto naravno ovi sa FB nece da rade :) )

Hvala sto si me pomenuo u komentarima koda kao clana tima (ne znam koji sam ja to deo napisao :) ... al ok ... mozda nesto optimalizujem u kodu)
[ Aleksandar Ružičić @ 13.04.2008. 18:02 ] @
@stefan:
da, ja imam intel core 2 duo pa zato imam manji cpu usage, ali taj demo sam po sebi zahteva dosta procesorskog vremena iz razloga sto se nekoliko stotina puta u sekundi iscrtava (koristeci Alpha metod sto je vise nego duplo sporije i zahtevnije od PSet), podesava alpha vrednost na mouse-hover (sto opet zahteva procesorskog vremena), EliteTanks ce nadam se biti dosta optimizovaniji :)
a poceo sam i da koristim code profiler pa cu pokusati da optimizujem malo "uska grla" engine-a

@lachie:
bice dokumentacije, naravno ;)
a sto se tice bitmap.bas to jos uvek nije gotovo, upravo radim na Resize funkciji koja ce imati vise tzv ResizeModes, tj mocices da biras da li ces da tile-ujes sliku ili da je "razvuces" (pri cemu mozes da biras po kojoj osi ce da se koristi koji metod), dok ces pri "razvlacenju" imati mogucnost da biras nacin na koji ce se slika razvuci, tj metod (kao u photoshopu)

@eurora:
koja je to biblioteka (koja koristi DX) koja zahteva 0-1%? daj mi link da vidim o cemu se radi, jer ovako kako je organizovan EGE moguce je koristiti i vise od jedne gfx biblioteke (trenutno se koritsti samo GFXLib 2) a da se to ne primeti (jer su sve gfxlib f-je "zamaskirane" preko objekata i funkcija engine-a)


e da, momci hvala na komentarima, drago mi je da vam se svidja.
jos samo da napomenem da trenutno eksperimentisem sa filterima (njih sam vec zavrsio :D) i blending funkcijama (pokusavam da ubacim sve one koji se nalaze u arsenalu photoshopa) tako da ce imati dosta korisnih stvari ovaj nas EGE :)
[ Eurora3D Team @ 13.04.2008. 19:28 ] @
@Aleksandar Ružičić
Ova http://hge.relishgames.com/
Download http://hge.relishgames.com/downloads.html
Mada je ta biblioteka iz sasvim druge price (MS VC++ bazirana) ali ima lib fajl za mingw kompajler.
Stavili su ceo source kod (kompajlovao sam je) , dokumentaciju i primere.
Ako uspes da je iskoristis za FB svaka cast (inace bazirana je na c++ a ne c-u) Ja sam odustao posle pola sata jer mi kompajlovanje sa mingw-om nesto nije islo (iskompajlovao sam ali nije radila ... znam i zasto i kako al duga prica ...)
Po mom misljenju ova dll (a moze i staticka) je odlicna za 2D grafiku
Za FB bi trebali da se urade include fajlovi ...
[ Lachie Dazdarian @ 13.04.2008. 21:47 ] @
Heh, već postoji FB wrapper za HGE...hmm...biblioteku. :P

http://www.freebasic.net/forum/viewtopic.php?t=9701

Mislim da je ovo link za zadnju verziju: http://dalex.ucoz.ru/load/4-1-0-6

Dosta dug thread i ne mogu vam pomoći što se tiče same biblioteke. Nisam ju koristio. Ali znam jednu igru napravljenu u HGE u FreeBASIC-u. Možete ju skinuti s mog FB games site-a: http://games.freebasic.net/dumpbyid.php?input=82

Vidim da se puno trudiš oko koda krcko i da planiraš napraviti puno vlastitih rutina. Ja najčešće posuđujem tuđi kod. To je vjerovatno moj problem.
[ Eurora3D Team @ 13.04.2008. 23:17 ] @
@Lachie Dazdarian dobro sto si rekao za ovo ... zamalo da je napravim :)
Lepo je videti da graficki FB program trosi 0-1 % CPU
Ja sam fajl skinuo sa
http://dalex.ucoz.ru/load/0-0-0-6-20
Tu je sav source kod (c++ kod za hge) , primeri i binarni fajlovi

Citat:
Vidim da se puno trudiš oko koda krcko i da planiraš napraviti puno vlastitih rutina. Ja najčešće posuđujem tuđi kod. To je vjerovatno moj problem.

Ja kad radim za sebe radim kao Aleksandar a na poslu sam vise kao ti :)
[ Aleksandar Ružičić @ 15.04.2008. 21:47 ] @
ja sam obrnut slucaj :)

kad radim za sebe onda koristim tudje kodove da sto pre uradim to sto mi treba (I ne vodim mnogo racuna o komentovanju koda i o lepom formatiranju) a kad radim nesto sto drugi treba da vide (kao sto je EGE) onda se trudim da vecina koda bude moja :)
[ Aleksandar Ružičić @ 20.04.2008. 13:44 ] @
evo sad sam skinuo fb 0.18.5 i u changelog-u procitao da je ispravljen neki bug u gfxlibu, instalirao sam novi fb, kompajlirao test i u task manageru primetio da mi cpu usage sada ne prelazi 30%! sada je zauzece procesora 15-30% (a bilo je od 20-40)

evo kacim uz poruku exe (+ ege source, malo je izmenjen u odnosu na poslednji "release") za slucaj da neko jos nije ili nema nameru da skine 0.18.5
[ Aleksandar Ružičić @ 20.04.2008. 18:21 ] @
samo da vas obavestim da ozbiljno razmisljam da ubacim podrzku za Box2D Physics Engine u EGE :)
jeste da nam to ama bas ne treba za EliteTanks, ali bice jos projekata... :)
[ drejk @ 20.04.2008. 19:21 ] @
Pozdrav svima,

svaka vam cast na projektu... samo napred, imate puno podrsku (ako vam znaci nesto :)

procitao sam sve vase postove od starta, i mogu vam reci da kako neko reche jos na pocetku, "cilje je da popularizujete FreeBASIC"...

E pa kod mene ste uspeli..

Naime, radio sam u VB6.0, VB.NETu, VBA, VBScriptu (sve sto pocinje sa VB :), sintaksa mi je dosta poznata, medjutim FreeBasic nisam do sada susretao.

Naravno dl-ovao sam FreeBasic i RaDFB IDE, i poceo malo da cackam.

Kako se u zivotu ne bavim programiranjem profesionalno (mada sam neke svoje radove (skripte, VBA Excel/Access makroe i sl.) primenjivao na poslu), nemam preterano vremena (ali svaki slobodan trenutak (dobro, ajde da ne preterujem, ne bas svaki :)) posvetim ucenju novoga.

Voleo bih da naucim vise o FreeBasicu (ovo Free me posebno privlaci :) a i mogucnost kreiranja nezavisnik .exe fajlova), i tu bi mi vi mogli pomoci sa predlogom neke literature i sl.

Nesto na google-u bas nisam naisao na mnogo literature (par foruma, gde uglavnom nema pocetnickih tutoriala, mozda par, ne bas preterano prakticnih).

Nasao sam Freebasic-ov Help fajl, u kome ima language referenca i sl.. ali bi mi trebali neki nebaspocetni tutoriali, kako ne bih lutao.
Primetio sam setkajuci po netu, da je FreeBasic uglavnom koriscen za grafiku (igrice), da li ima i neku drugu primenu? (znam da ce sada neko reci "skoro svaki programski jezik moze skoro sve da napravi, samo je neki prilagodjen odredjenim stvarima")
Voleo bih da FreeBasicom da napravim i neke jednostavne programcice i za posao (rad sa fajlovima, pravljenje logova i sl..).

Jos jednom, svaka vam cast, vidim da ste jedna grupa entuzijasta (sto u potpunosti podrzavam) koja uziva radeci nesto sto voli bez zelje za nekom materijalnom satisfakcijom. (mada ne kazem da svi vi mrzite novac :))

Pozdrav i svaka cast..

Drejk
[ Aleksandar Ružičić @ 20.04.2008. 19:31 ] @
pozdrav drejk, drago mi je da smo bar kod tebe uspeli u "popularizaciji" freebasica

sto se tice literature, koliko ja znam ne postoji nijedna knjiga o freebasicu, ali freebasic u potpunosti podrzava qbasic sintaxu, tako da bi trebao da trazis neku knjigu o qbasicu (naravno fb je mnogo opsirniji i kompletniji jezik od qb-a, ali qb programi u fb-u su sasvim solidan start)

Citat:
(znam da ce sada neko reci "skoro svaki programski jezik moze skoro sve da napravi, samo je neki prilagodjen odredjenim stvarima")

pa zapravo skoro ssvaki programski jezik moze skoro sve da napravi, samo je prilagodjen odredjenim stvarima :) (mada se ne bi slozio sa tobom da "jezik moze da napravi" jer je programer taj koji "pravi" a programski jezik je alat kojim on to "pravi") ali razlog zasto u fb-u ima najvise igara (mada ima i dosta "ozbiljnijeg" softvera) je po meni to sto je fb zajednica "nastala" iz qb zajednica koja se uglavnom bavila izradom igara (u qbasicu), ali to je samo moje misljenje...

Citat:
Jos jednom, svaka vam cast, vidim da ste jedna grupa entuzijasta (sto u potpunosti podrzavam) koja uziva radeci nesto sto voli bez zelje za nekom materijalnom satisfakcijom. (mada ne kazem da svi vi mrzite novac :))

ko mrzi novac? :)
[ drejk @ 20.04.2008. 20:44 ] @
:))

slazem se, jezik je samo alat...nisam se pravilno izrazio...

pokusacu da potrazim kakvu QBasic knjigu na google-u, ako ste na taj nacin i vi poceli..

Hvala puno, sreca u daljnjem radu i nadam se da cu vam uskoro biti od koristi :)

pozdrav

Drejk
[ Aleksandar Ružičić @ 20.04.2008. 21:13 ] @
pa ja nikad nisam programirao u qb-u :)

ja sam poceo od vb-a i sam prelazak na fb mi je bio mnogo lak (jer sam pre toga naucio c sa kojim fb deli dosta toga zajednog)
[ Eurora3D Team @ 20.04.2008. 21:32 ] @
@drejk Bolje je FBEdit ide http://www.radasm.com/fbedit/index.html i http://www.radasm.com/Upload/FbEdit.zip
Programi kompajlovani u ovom jeziku se dosta brze izvode na win32 od VB6 pograma. Pogledaj testove sa ove teme http://www.elitesecurity.org/t...ostali-testiranje-offtopic-etc
@Aleksandar Ružičić Dali ova zadnja verzija engina moze da se kompajluje sa 0.18.3 ? I izgleda da je vasa inicijativa i moja popravka fbgfx-a uticala na ljude iz fb-a da malo srede kod :)

koliko smo placeni nije ni cudo sto smo entuzijasti :):):)
[ stefanpn @ 21.04.2008. 00:16 ] @
Postali smo popularni! Salim se naravno

@Drejk
Po meni su ti najbolji sample-ovi oni sto su dosli uz freebasic. Tako da bi mogao da podjes od njih. Sto se tice ucenja freebasica mislim da je to nesto sto sam najbrze savladao, nekako je sve prirodno i na mestu, bar posle QBasic-a, C-a i VB-a.

@Krcko
Mozes li me malo uputiti oko ovoga sa ucitavanjem alfa kanala iz png-a, jer se u kodu pominje i 8-bitna slika i rekonstrukcija alfa kanala ukoliko isti nije sacuvan pa mi nije bas jasno sta se tu desava Iskreno, nisam se bas ni udubio u kod ali bi bilo lepo da mi malo pojasnis situaciju. A mogao bi i neke upute da nam napises, ako imas vremena naravno, cisto oko toga za sta koja f-ja sluzi, jer me je malo smorilo ono prelistavanje svih datoteka u potrazi za f-jom u kojoj ce pisati screenres 640,480 ...

Takodje se pri 16 bpp nista ne desava, tacnije samo crnilo, tj. mislim da tu negde zakazuje ovo oko dirt tehnike ili nesto drugo. A i ako je vec ispravljen taj bug u gfxlib-u mozda bi bolje bilo da se koristi double buffer, jer se onda sigurno nece desiti da neki deo ekrana ostane "prljav".

BTW:
Znate li kako lepo izgleda kada se umesto slika iz test primera stave MAC OS Panther pozadina i SilverLight logo umesto lopte, prava bombonica .

I da umalo da zaboravim, Krcko kolizija je toliko dobro odradjena da sam se pola sata cudio i divio istoj!!! Jer je to pixel perfect ili ta po bejzirovim krivima? Posebno me je impresioniralo sto ista reaguje cak i na alpha kanal!

[ drejk @ 21.04.2008. 06:28 ] @
Skinuo sam ja i FBEedit i jos po koji IDE ali mi nekako RADFB najlepsi :)

Nisam nikad radio u C-u pa mi je sa .NET i VB6.0 poprilicno velika promena (sintaksa je ista doduse).

Dajte mi malo vremena, pa cu se ponovo oglasiti sa necim konkretnim ovde :)

Hvala svima, i samo napred :)

Poz
[ Aleksandar Ružičić @ 21.04.2008. 17:59 ] @
Citat:
@Aleksandar Ružičić Dali ova zadnja verzija engina moze da se kompajluje sa 0.18.3 ? I izgleda da je vasa inicijativa i moja popravka fbgfx-a uticala na ljude iz fb-a da malo srede kod :)

99% sam siguran da ce da se komapjlira i sa 0.18.3

Citat:
Mozes li me malo uputiti oko ovoga sa ucitavanjem alfa kanala iz png-a, jer se u kodu pominje i 8-bitna slika i rekonstrukcija alfa kanala ukoliko isti nije sacuvan pa mi nije bas jasno sta se tu desava Iskreno, nisam se bas ni udubio u kod ali bi bilo lepo da mi malo pojasnis situaciju. A mogao bi i neke upute da nam napises, ako imas vremena naravno, cisto oko toga za sta koja f-ja sluzi, jer me je malo smorilo ono prelistavanje svih datoteka u potrazi za f-jom u kojoj ce pisati screenres 640,480 ...

ucitavanje alfa kanala se vrsi iteracijom kroz sve pixele koji su tipa Uinteger i u ta 32bajta prva dva (MSB) predstavljaju alpha vrednost tog pixela.
a niz pixela slike (tj pointer na prvi clan tog niza) mozes da dobijes ovako Dim As UInteger Pointer imagePixels = imagePointer + SizeOf(FB.IMAGE) gde ti je imagePointer pointer koji si dobio kao rezultat poziva ImageCreate ili neke druge kompatibilne fje (kao sto je PNG_Load)
a za iteraciju i popunjavanje niza koristis BPP i Pitch clanove FB.IMAGE strukture:
Code:

Dim As Any Pointer image = PNG_Load("slika.png")
Dim As UByte alphaChannel(0 To Cast(FB.IMAGE Pointer, image)->Width - 1, 0 To Cast(FB.IMAGE Pointer, image)->Height - 1)

Dim As Uinteger pitch = Cast(FB.IMAGE Pointer, image)->Pitch
Dim As Uinteger bpp =  Cast(FB.IMAGE Pointer, image)->BPP

For X As Integer = 0 To Cast(FB.IMAGE Pointer, image)->Width - 1
  For Y As Integer = 0 To Cast(FB.IMAGE Pointer, image)->Height - 1
      alphaChannel(X, Y) = *Cast(UByte Pointer, image + SizeOf(FB.IMAGE) + Y * pitch + X * bpp + 3)
  Next
Next


inace ovo bpp je bytes per pixel a ja sam mislio da je bits per pixel pa sam zato ono imao problema sa alfa kanalom :)

a 8-bitna slika se nigde ne pominje u kodu vec se bpp mnozi sa 8 da bi se dobio color-depth te slike, recimo 32bitna slika ima bpp 4 (mnozenjem sa 8 dobijes 32)

a sto se tice uputa, bice manual (objasnjenje sta koja fja radi i za sta se koristi) kad zavrsim engine :) (tj kad bude bar u beta verziji)

a sto se tice pitanja u vezi screenres, ti (tj korisnik engine-a) ne poziva screenres nikad, vec pozove Engine.Initialize funkciju (koja poziva screenres)...

Citat:
Takodje se pri 16 bpp nista ne desava, tacnije samo crnilo, tj. mislim da tu negde zakazuje ovo oko dirt tehnike ili nesto drugo. A i ako je vec ispravljen taj bug u gfxlib-u mozda bi bolje bilo da se koristi double buffer, jer se onda sigurno nece desiti da neki deo ekrana ostane "prljav".

cekaj, 16bit png?? jer je samo png podrzan, ne i bmp... (i ako se ja pitam ni bmp i jpg ne bih ubacivao, png je najbolje resenje)
a sto se tice dirty rectangles, trenutno se ta tehnika ne koristi :) (i engine te ne tera da koristis tu tehniku, dovoljno je samo da pozoves Engine.MarkDirty bez argumenata da bi se pozvao onPaint dogadjaj) hocu prvo da zavrsim Math "modul" koji ce imati fje za "stapanje" vise regiona (pravougaonika) pa cu tad optimizovati ovu "podrsku" za didrty rectangles (tu mislim na pracenje regiona kojim je prosao kursor jer je to jedino sto engine radi, ostalo zavisi od korisnika enginea)


Citat:
BTW:
Znate li kako lepo izgleda kada se umesto slika iz test primera stave MAC OS Panther pozadina i SilverLight logo umesto lopte, prava bombonica .

znaci ovo sto sam ja nacrtao nevalja? dobro, dobro...

Citat:

I da umalo da zaboravim, Krcko kolizija je toliko dobro odradjena da sam se pola sata cudio i divio istoj!!! Jer je to pixel perfect ili ta po bejzirovim krivima? Posebno me je impresioniralo sto ista reaguje cak i na alpha kanal!

ovaaaj... detekcije kolizije nema jos uvek :)
trenutno postoji samo MouseOverObject fja koja vraca true ukoliko se mis nalazi iznad "objekta", objekat je Bitmap tip, tj slika i detekcija se vrsi na sledeci nacin: prvo se proveri da li se kursor nalazi unutar pravougaonika koji ta slika zauzima, ukoliko je taj uslov zadovoljen onda se uzme lokacija kursora relativna u odnosu na X,Y pravougaonika, tj lokacija kursora na ekranu se svodi na lokaciju kursora unutar slike, onda se uzme pixel sa slike koji se nalazi na toj lokaciji i u zavisnosti od mode parametra se iz tog pixela "cupa" odredjena informacija, ukoliko je mode = AlphaValue (sto je default) onda se uzima alpha vrednost tog pixela i uporedjuje se sa trecim parametrom prosledjenim [MouseOverObject funkciji (to je value parametar), ukoliko je alpha vrednost pixela manja ili jednaka vrednosti value parametra (default je 30) onda funkcija zakljucuje da se kursor ne nalazi iznad objekta i vraca false (u suprotnom vraca true). e a ukoliko je mode = TransColor onda se uzima RGB vrednost pixela i uporedjuje se sa trecim parametrom value koji u ovom slucaju predstavlja RGB vrednost (recimo &HFF00FF ili Color.Magenta konstanta), ukoliko su te dve vrednosti jednake onda se kursor nalazi iznad "providnog" dela slike pa fja vraca false

a kolizije ce biti, i bice vector-based, pixel-perfect moze da bude sporo u vecini slucajeva...

[Ovu poruku je menjao Aleksandar Ružičić dana 22.04.2008. u 08:04 GMT+1]
[ Eurora3D Team @ 22.04.2008. 09:51 ] @
@Aleksandar Ružičić Engine moze da se kompajlira na FB verziji 0.18.3 ... proverio sam ... no errors no warnings
[ Aleksandar Ružičić @ 22.04.2008. 10:07 ] @
pa velika je verovatnoca da ce i sa 0.17 da se kompajlira posto nisam koristio nista od dodataka iz 0.18.x koliko mi se cini... a mozda i jesam, ne znam :)
[ markozelenovic @ 22.04.2008. 14:57 ] @
Citat:
Aleksandar Ružičić
Developer, Haragei Creative Solutions
Beograd - Čačak

Moderator
Član broj: 26939
Poruke: 1534
*.dynamic.adsl.itsisp.net.
OS: Windows XP

Jabber: [email protected]
Sajt: krcko.haragei.org



Profil

Email

Privatna Poruka

Re: [FreeBASIC] EliteTanks projekat pre 14 dana i 18h

onda super, sacekaj 15-20 dana. tada ce igra biti verovatno gotova, pa ces moci da igras kolko 'oces
--------------------------------------------------------------------------------

jQuery addicted!

"History may not repeat itself, but it does rhyme a lot."
- Mark Twain
07.04.2008. u 21:54







Samo polako
[ Eurora3D Team @ 22.04.2008. 21:04 ] @
@markozelenovic Znas kako se kaze ... vreme je novac ... a ovo se radi za dzabe :)
Bez zezanja al Aleksandar je sastavio solidan kod do sad ... ima tu dosta posla , valjda ce jednom i da se zavrsi.
[ Aleksandar Ružičić @ 23.04.2008. 01:00 ] @
zavrsice se sigurno, al kad... to cemo videti :)
[ stefanpn @ 23.04.2008. 01:35 ] @
@Marko Zelenovic

Ne vidim svrhu ovako opseznog quote-a, pa znamo mi svi da kliknemo na dugme profil, a uz to su verovatno svi upoznati sa Krckovim profilom, covek je 24/7 sa nama (moderator)...

Mislim da nam ovo samo ruzi temu!

A sto se ove poruke tice obrisacu je cim bude procitana.

@Krcko

Sto se tice vektorke kolizije, da li to znaci da cemo za svaki objekt/sprajt u igri morati da pravimo i region mozda bi bolje resenje bilo da se koristi krug/elipsa (kao sto se u 3D igrama koristi sfera), ali opet bi region bio brze resenje :)
[ Aleksandar Ružičić @ 23.04.2008. 01:50 ] @
Citat:
stefanpn: @Marko Zelenovic

Ne vidim svrhu ovako opseznog quote-a, pa znamo mi svi da kliknemo na dugme profil, a uz to su verovatno svi upoznati sa Krckovim profilom, covek je 24/7 sa nama (moderator)...

Mislim da nam ovo samo ruzi temu!

A sto se ove poruke tice obrisacu je cim bude procitana.


mislim da je to uradio da bi se video onaj deo "Re: [FreeBASIC] EliteTanks projekat pre 14 dana i 18h"

Citat:

@Krcko

Sto se tice vektorke kolizije, da li to znaci da cemo za svaki objekt/sprajt u igri morati da pravimo i region mozda bi bolje resenje bilo da se koristi krug/elipsa (kao sto se u 3D igrama koristi sfera), ali opet bi region bio brze resenje :)

pazi u Math modulu vec postoji metoda CreateFromCircle koji od kruga pravi poligon (ntougao) a kada dodjem do tog dela (kolizija/kreiranje poligona) uradicu i BitmapPack resource tip za ERC (trenutno je samo BitmapFOnt resource tip implementiran i trenutno radim na ucitavanju takvog resource-a i pravilnog renderovanja) koji ce imati mogucnost da na osnovu alpha kanala ili transparentne boje generise poligon za svaku sliku i sacuva tu informaciju u resource fajlu.

sto se tice ovih resursa koje pominjem pogledaj u ovom zipu /test/fonts/sample.erd tu je nesto malo objasnjeno, kada zavrsim ovo sa fontovima okacicu i reousrce omcpiler i loader za bitmapfont...
[ Eurora3D Team @ 23.04.2008. 02:03 ] @
Kojem zipu ? :)
[ Aleksandar Ružičić @ 23.04.2008. 02:07 ] @
ovom poslednjem sto sam okacio :)

btw evo komentar sa pocetka sample.erd fajla:
Code:

''
''
''  EliteResource Descriptor (ERD) file
''
''
''  About ERD files:
''
''
''  EliteResource Compiler (ERC) is used to parse ERD files and produce binary resource files which are
''  then loaded and used by EliteGameEngine.
''
''  ERD files can be used to describe any supported resource type. And those currently are:
''
''    * BitmapFont resources - for building EBF files (fonts used in EliteGameEngine)
''    * UITheme resources - for "themming" EliteUI elements (EUI files)
''    * BitmapPack resources - for making image packs (EBP files)
''    * AnimatedBitmap resources - for building EAB files (animations used in EliteGameEngine)
''    * Movie resources - for making EMV files (advanced animations with or without bundled audio)
''
''  Each ERD file (for all types of resources) starts with Describe keyword, with Describe statement we say to
''  ERC which type of resource we're describing and it will load specified parser which will translate our
''  resource descriptor file into binary resource file.
''
''  Definitions in ERD file are contained in "sections", which begin with Section "<NameOfSection>" and ends with
''  End Section statement.
''
''  As you may noticed, you use '' symbol for line comments, but note: it's two chars '' and not just '
''
''  -------------------------------------


eto da se vidi na cemu trenutno radim i sta planiram :)
[ Lachie Dazdarian @ 23.04.2008. 18:22 ] @
Nije mi jasno zašto tvrdiš da je pixel perfect kolizija spora kad sam ti pokazao već jednu za FB u ASM kodu koja je sasvim dovoljno brza. Osim ako ne forsiraš situacije koje se nikad neće pojaviti u nekoj igri. Malo više vjere.
[ Aleksandar Ružičić @ 24.04.2008. 01:02 ] @
da, ona MySoft-ova funkcija sa ASM-om je stvarno brza, ali postoji jos brzi nacin ;)

elem vec sam u jednoj od predhodnih poruka rekao da cu verovatno ubaciti neku 2D Physics biblioteku a sve te biblioteke koriste poligone za opisivanje oblika nekog tela. jedna od prednosti tih biblioteka za fiziku je sto imaju mnogo brze i dobro optimizovane rutine za proveru kolizije dva tela (dva poligona, bilo konkavna bilo konveksna) a i u teoriji (sto se dokazalo i u praksi) je dokazano da je vector-based kolizija dosta brza od pixel-perfect kolizije.
Ja sav vec napomenuo da ce biti i pixel-perfect provere u EGE-u, to ce biti jedna od Collides rutina, pa ako bas hoces pixel-perfect mozes da koristis :)
samo sto je vector-based brze i bolje (moguce je skaliranje poligona tj oblika i njihova rotacija ako je to potrebno a da se pri tom ne izgube informacije o objektu)
[ Eurora3D Team @ 24.04.2008. 15:17 ] @
Vidim da je tema prebacena ... koliko je to dobro za organizaciju foruma toliko i nije za ove redje koriscene jezike jer mislim da ce ovako teze da se primete nego na forumu koji je vise posecen. Al sad sta je tu je ...
[ Lachie Dazdarian @ 24.04.2008. 16:10 ] @
Dobro, držim te za riječ što se tiče ovih 2D physics biblioteka. Probaj naći neku multiplaformsku i ne hardware akceleriranu.
[ Aleksandar Ružičić @ 24.04.2008. 16:36 ] @
Citat:
Eurora3D Team: Vidim da je tema prebacena ... koliko je to dobro za organizaciju foruma toliko i nije za ove redje koriscene jezike jer mislim da ce ovako teze da se primete nego na forumu koji je vise posecen. Al sad sta je tu je ...

Pa nije bilo uredu da teme o FreeBASIC-u idu u VB6 forum, jer im je jedino zajednicko to sto imaju zajednickog dalekog pretka (quick basic), bilo je dva predloga: da se napravi podforum u okviru VB6 foruma za ostale BASIC dijalekte, ali tako bi se narusilo pravilo da podforumi budu u vezi parent foruma tako sto predstavljaju deo tematike o kojoj se govori u parent forumu (sto sa fb i vb6 nije slucaj), drugi predlog (koji je na kraju i usvojen) je bio da se otvori novi forum za sve jezike koji nisu zastupljeni u ostalim forumima, s tim da se kada neki jezik dostigne popularnost otvori zaseban forum i da se sve teme o tom jeziku prebace u taj novootvoreni forum...


Citat:
Lachie Dazdarian: Dobro, držim te za riječ što se tiče ovih 2D physics biblioteka. Probaj naći neku multiplaformsku i ne hardware akceleriranu.


ok, videces da sam upravu :)


elem, evo dve izmedju koje se dvoumim:

Box2D Physics Engine
Chipmunk Game Dynamics (verovatno ce biti ova)
[ Shadowed @ 24.04.2008. 16:55 ] @
Boga mu, ovaj drugi izgleda odlicno. Prvi, doduse, nisam ni pogledao :)
[ stefanpn @ 24.04.2008. 17:45 ] @
Unezverio sam se trazeci temu ... Nisam hteo da koristim pretragu, rekoh kakav sam maler bice da su je obrisali, pa sam reko ma mozda samo nije TOP pa je otisla negde jer nije dugo nista post-ovano. I trazim, pa rekoh da nije dodata sekcija FreeBASIC...

I onda olaksanje... Ostali programski jezici!

Ovaj ChipMunk ima lep video materijal, ali bih ti ja predlozio da implementiras onaj koji je jednostavniji (koji ces lakse uklopiti u projekt).

A ovo sto se moze jednostavno odraditi i u FB-u, olovke su obicni spriteovi, papir je window region, a trag se crta alpha-blendom (po mojoj proceni 200 ili ~80%), dok se linije "pamte" vektorski i brisu iz memorije kada napuste window region (mislim da je obican rectangle)... A tako efektivno prikazuje sta ovaj p. engine nudi...
[ Aleksandar Ružičić @ 25.04.2008. 09:57 ] @
@Shadowed: drugi je baziran na prvom ;)

@Stefan: pa mnogo mi je lakse implementirati ovaj ChipMunk iz razloga sto je on u C dok je box2d u C++u :)
[ Aleksandar Ružičić @ 28.04.2008. 23:34 ] @
evo danas sam bio malo dokon pa sam radio na ovom projektu, tj engine-u.

evo version historyja:
Code:

0.0.3.280408.d    - third draft version released
--------------
    + reorganized project's file/folder structure
    + implemented Animation type and easing effects
    + implemented screen transition effects
    + removed code for "dirty regions" technique

dakle ono sto je dodato su tranzicioni efekti (izmedju dva screen-a) i Animation tip koji se koristi za animacije bazirane na Easing efektima.

u arhivi koju sam okacio imate nov test folder (screen trans test) u kom imate nekoliko game screen-ova (4 zapravo) koji se smenjuju koristeci random odabrane tranzicione i easing efekte.

samo da napomenem da neki tranzicioni efekti daju lose rezultate kada se kombinuju sa nekim easing efektima (recimo zoomin/zoomout kada se kombinuju sa nekim veoma dinamicnim easing efektima kao sto su ElasInOut i BounceInOut mogu da zakoce program iz razloga sto su zoomin/zoomout neoptimizovani i mnogo spori efekti) a posto se i tranzicioni i easing efekat biraju random ovakve kombinacije su moguce...

i da, posto se Stefanu nije svidela grafika iz predhodnog test-a ovaj put sam se potrudio da izgledaju malo bolje, skinuo sam nekoliko brush-setova za photoshop, igrao se malo sa njima i 3 najbolje background slike sam izdvojio :)



p.s. trebace vam winrar da raspakujete arhivu (posto sam na dial-upu pa ne mogu da okacim ceo zip kod mene na server...)
[ Aleksandar Ružičić @ 29.04.2008. 10:43 ] @
Ako hocete mozete vi da dodajete nove tranzicione efekte, posto je to jednostavno. Evo npr kako se pravi jedan tranzicioni efekat:

1. prvo treba "osmisliti" efekat, tj kako ce da izgleda:
ja sam za ovaj primer odlucio da napravim jedan jednostavan efekat nalik na SlideIn i SlideOut efekte. naime, napomenuti efekti rade tako sto ili novi ekran (SlideIn) "ulece" na mesto starog i prekriva ga, ili stari (SlideOut) "izlece" i otkriva novi ekran. e sad, ovaj novi efekat, nazovimo ga Push, ce da izgleda tako da novi ekran "gura" stari (a ne samo da ga prekrije kao sto je slucaj sa SlideIn), dakle ukoliko je direction = FromLeft onda ce novi ekran da ulazi sa leve strane dok ce stari da izlazi sa desne. (ako vam ipak nije jasno kako sam zamislio efekat videcete kad ga dodate u EGE :p)

2. zatim treba dodati taj efekat u TransitionEffect enum, ova enumeracija se nalazi u /ege/engine.bi fajlu (21. linija trenutno), dakle dodajmo Push u ovaj enum (posle SlideOut, da ne bi morali da menjate kod u test projektu)

3. sada nam treba novi fajl push.bas koji cemo da smestimo u /ege/transitions/ folder, za pocetak u taj fajl moramo da stavimo "zastitu" od visestrukih #include-ovanja (ovo nije obavezno ali posto svi fajlovi postuju to pravilo onda ce i ovaj) i PushEffect namespace:
Code:

'
' -------------------------------------------------------------------------------------------------
'
'    This file is part of EliteGameEngine source distribution
'
' -------------------------------------------------------------------------------------------------
'
#Ifndef __EGE_TRANSITIONS_PUSH_BAS__
#Define __EGE_TRANSITIONS_PUSH_BAS__

    Namespace PushEffect


    End Namespace

#EndIf

za svaki efekat su potrebne tri funkcije: Init (ovde inicijalizujemo parametre potrebne za nas efekat), onFrame (ovo se poziva na svaki game frame, i ovde je uglavnom isti kod za sve efekte) i onPaint (ovde iscrtavamo trenutni frejm), evo tih fja ("praznih", odma' cemo da ih popunimo):
Code:

 Sub Init(easing As Effect.Easing, duration As Single)

 End Sub

 Function onFrame(fElapsed As Single) As Elite.Boolean

 End Function

 Sub onPaint(dest As Bitmap)

 End Sub
 

(naravno ovo ubacite unutar PushEffect namespace-a)

sada sledi implementacija Init f-je, kao sto sam rekao tu inicijalizujemo potrebne parametre, e sad, posto svaki efekat koristi easing efekte onda nam treba i Animation objekat (ovaj objekat sluzi za easing-driven animacije, tj postavite pocetnu vrednost, krajnju vrednost i duzinu trajanja efekta (u sekundama) i na osnovu izabranog easing efekta cete u tih n sekundi doci sa pocetne vrednosti na krajnju - Animation objekat moze istovremeno da "animira" vise od 1 vrednosti - broj tih vrednosti se prosledjuje konstruktoru prilikom kreiranja objekta) dakle, dodajte sledecu deklaraciju pre ove tri f-je (a unutar namespace-a):
Code:

 Dim Shared As Effect.Animation Pointer anim
 

(deklarisana je kao Pointer da bi mogli da koristimo New/Delete)
Sada sledi kompletna onInit f-ja:
Code:

Sub Init(easing As Effect.Easing, duration As Single)

    anim = New Effect.Animation(4)

    anim->StartValue(1) = 0
    anim->StartValue(2) = 0
    anim->StartValue(3) = 0
    anim->StartValue(4) = 0

    anim->EndValue(1) = 0
    anim->EndValue(2) = 0
    anim->EndValue(3) = 0
    anim->EndValue(4) = 0

    Select Case direction

        Case FromLeft
            anim->StartValue(1) = -CDbl(newBitmap.Width)
            anim->EndValue(3) = CDbl(newBitmap.Width)

        Case FromRight
            anim->StartValue(1) = CDbl(newBitmap.Width)
            anim->EndValue(3) = -CDbl(newBitmap.Width)

        Case FromTop
            anim->StartValue(2) = -CDbl(newBitmap.Height)
            anim->EndValue(4) = CDbl(newBitmap.Height)

        Case FromBottom
            anim->StartValue(2) = CDbl(newBitmap.Height)
            anim->EndValue(4) = -CDbl(newBitmap.Height)

        Case FromTopLeft
            anim->StartValue(1) = -CDbl(newBitmap.Width)
            anim->StartValue(2) = -CDbl(newBitmap.Height)
            anim->EndValue(3) = CDbl(newBitmap.Width)
            anim->EndValue(4) = CDbl(newBitmap.Height)

        Case FromTopRight
            anim->StartValue(1) = CDbl(newBitmap.Width)
            anim->StartValue(2) = -CDbl(newBitmap.Height)
            anim->EndValue(3) = -CDbl(newBitmap.Width)
            anim->EndValue(4) = CDbl(newBitmap.Height)

        Case FromBottomLeft
            anim->StartValue(1) = -CDbl(newBitmap.Width)
            anim->StartValue(2) = CDbl(newBitmap.Height)
            anim->EndValue(3) = CDbl(newBitmap.Width)
            anim->EndValue(4) = -CDbl(newBitmap.Height)

        Case FromBottomRight
            anim->StartValue(1) = CDbl(newBitmap.Width)
            anim->StartValue(2) = CDbl(newBitmap.Height)
            anim->EndValue(3) = -CDbl(newBitmap.Width)
            anim->EndValue(4) = -CDbl(newBitmap.Height)

    End Select

    anim->Play duration, easing

End Sub
 

ok mozda izgleda da je komplikovano ali nije, ovo je samo dodeljivanje pocetnih i rajnjih pozicija oba ekrana. Znaci kao sto ste videli prvo kreiramo Animation objekat i prilikom kreiranja navedemo koliko parametara zelimo da animiramo (1 je podrazumevan, tj ako se samo jedan parametar menja onda nemorate da navodite New Animation(1) vec moze samo New Animation), za ovj Push efekat 4 parametra nam se menjaju to su (X,Y) koordinate novog ekrana (1. i 2. parametar) i (X,Y) koordinate starog ekrana (3. i 4. parametar) i u zavisnosti od direction promenljive (koja je deklarisana u /ege/transitions.bas) podesavamo pocetne i krajnje vrednosti ova 4 parametra. pored direction promenljive (koja je tipa TransitionDirection) postoje jos dve promenljive koje su nam na raspolaganju (i koje moramo da koristimo) to su newBitmap i oldBitmap (obe tipa Bitmap) koje su "screenshotovi" novog, odnosno starog ekrana (njih koristimo za iscrtavanje, to je ocigledno). i na kraju, kada smo podesili parametre animacije sa anim->Play duration, easing pokrecemo animaciju.

Sada sledi kod za onFrame f-ju (ovo je isto za sve efekte u 99% slucajeva):
Code:

Function onFrame(fElapsed As Single) As Elite.Boolean

    Repaint

    If anim->TargetReached Then

        Delete anim

        Return Elite.True

    EndIf

    Return Elite.False

End Function
 

Dakle, na svaki frejm prvo pozivamo Repaint cime obavestavamo Engine da je napravljena promena i da treba podici onPaint dogadjaj, zatim proveravamo da li je animacija zavrsena i ukoliko jeste brisemo anim objekat i vracamo True, a ukoliko nije vracamo False sto znaci da nastavljamo sa izvrsavanjem efekta.

I na kraju nam je ostala onPaint f-ja, ona izlgeda ovako:
Code:

Sub onPaint(dest As Bitmap)

    Line dest.Handle, (0, 0) - Step (newBitmap.Width, newBitmap.Height), Color.Black, BF

    newBitmap.DrawTo dest, anim->Value(1), anim->Value(2), , , , , fbPSet
    oldBitmap.DrawTo dest, anim->Value(3), anim->Value(4), , , , , fbPSet

End Sub
 

kao sto vidite veoma je jednostavna, crtamo newBitmap na koordinatama koje odgovaraju prva dva parametra animacije, a oldBitmap na koordinatama koje odgovaraju 3. i 4. parametru animacije. a Line sluzi da "ocistimo" ekran pre crtanja newBitmap i oldBitmap slika (poslednji parametar, BF, znaci "box filled", tj da nam ne crta dijagonalnu liniju nego pravougaonik). i jos jedna vazna napomena, default metod za iscrtavanje (mislim na DrawTo fju) je fbAlpha ali za tranzicione efekte moramo da koristimo fbPSet iz dva razloga: brze je, i (sto je jos vaznije) fbAlpha moze da izazove neke cudne efekte ponekad (kada se koristi za tranzicione efekte)

4. kada je push.bas gotov ostalo je da "povezemo" taj efekat sa MakeTransition funkcijom, prvo treba da #include-ujemo fajl, u /ege/transitions/transitions.bas fajlu dodajte #Include "push.bas" odma posle ostalih #include linija (to je 33. linija trenutno), zatim (u istom fajlu) u MakeTransition f-ji primecujete Select Case, sada kao poslednji Case dodajte ovo:
Code:

Case Push
    PushEffect.Init easing, duration
    TransFrameProc = ProcPtr(PushEffect.onFrame)
    TransPaintProc = ProcPtr(PushEffect.onPaint)

i to je to, kompajlirajte test projekat (screen trans test), pokrenite exe i dobicete "push" efekat (verovatno ne odmah posto je nasumicno biranje efekata)

jednostavno, zar ne? :)

dakle ako je neko od vas dokon i ima ideju za neki efekat neka prati ova 4 koraka i ako dobije nesto zanimljivo nek okaci ovde taj *.bas fajl da ubacim u projekat

i jos nesto, posto se efekti biraju random (u ovom test projektu) kada testirate nov tranzicioni efekat mozete izmeniti kod u /screen trans test/main.bas u f-ji ShowScreen (linija 81) u ovaj:
Code:

Sub ShowScreen(scr As Engine.GameScreenHandle)

    Dim transEffect  As Engine.TransitionEffect = Engine.Push ' ovde taj vas efekat
    Dim transDir      As Engine.TransitionDirection = Math.Random(Engine.FromLeft, Engine.FromBottomRight)
    Dim easingEffect As Effect.Easing = Math.Random(Effect.Linear, Effect.CubicInOut)

    Engine.Show scr, transEffect, transDir, easingEffect, 2

End Sub

to ce rezultovati u pozivanju samo tog efekta dok ce se pravac i easing efekti birati nasumicno...
[ Aleksandar Ružičić @ 29.04.2008. 12:32 ] @
uh, konacno sam nasao 'de je bug zbog koga je aplikacija znala da pukne iz cista mira. ukoliko ste skinuli prosli zip (tj rar iz 3 dela) i ako ste pokrenuli screen trans test vrlo je moguce da vam je program "pucao" iz cista mira (ovo se manifestuje onim "don't send" prozorom :D) e napokon sam uspeo da nadjem sta je uzrok tome (neki destructori su se pozivali vise od jednom pa je nevalidan pointer prosledjivan deallocate fji, al opet ovo se nije svaki put desavalo iz razloga sto memorija koja je oslobodjena nije uvek bivala ponovo dodeljena nekom drugom pointeru) i popravljeno je. mislim da sam nasao sve "deallocate-releated" bugove (nekih 25 min sam uspesno testirao onaj screen trans test bez ijednog pucanja, a onda mi dosadilo da pritiskam space :D)

evo kacim uz poruku 0.0.4 verziju (bugfix + neki filteri dodati) ali samo source, bez slika (njih uzmite iz predhodne arhive, one rar iz 3 dela) i bez exe fajlova.
i kacim fajlove potrebne za kompajlovanje (fbpng lib i include fajl) za slucaj da neko nema... (samo raspakujte fbpng.zip u /${FreeBASIC}/ folder)
[ Aleksandar Vasic @ 30.04.2008. 11:50 ] @
Meni je ova prva verzija pukla iz prve ;)

Ali ovaj drugi radi ko sat, medjutim jede procesor, na celeron 2,4 ne spada ispod 45% i to kad miruje, a kada menja sliku onda je oko 60%
[ Aleksandar Ružičić @ 30.04.2008. 13:48 ] @
kao sto rekoh vise puta ako hocete nesto da optimizujete radite to slobodno, ja cu najmanje paznje obracati na optimizaciju koda sve dok radi kako treba :)

elem, kod za renderovanje fontova je skoro kompletan i ja mislim da ce sledeca verzija (sa fontovima) biti 0.1.b (beta) sto znaci da je engine spreman za izradu igre. Stefan moze da pocne da radi na kodu za ucitavanje nivoa i za pronalazenje najkraceg puta, kad on to zavrsi valjda cu ja zavrsiti kompajler i vm i da sastavljamo igru :)
[ Aleksandar Vasic @ 30.04.2008. 17:18 ] @
ja sam danas neshto poceo sa FMOD-om,valjda cu uspeti ;) Naravno ako si josh uvek za to da napravimo biblioteku i sa FMOD-om mada ne vidim razlog kada imamo BASS :P
[ sucur @ 30.04.2008. 23:01 ] @
Prije svega, pozdravljam sve ucesnike projekta i, naravno, sve pohvale za trud i rezultate.

Radio sam prije 3 godine na jednoj igri, famozni "SpaceAttack" :) OpenGL/C++, i taj poduhvat mi je ostao u sjecanju kao jedno prelijepo i nezaboravno iskustvo.

Nisam citao sve postove, trenutno nemam vremena, ali sigurno da hocu. Btw. Nazirem nedoumice oko odabiranja biblioteke za zvuk. FMOD sam koristio, i mogu samo toplo da ga preporucim i vama. Odlicno obavlja posao, bio je, nadam se da je i danas, besplatan u nekomercijalnom software-u, jednostavan, multiplatform itd itd.

Puno srece u daljem radu, i bez odustajanja ;)
[ Aleksandar Vasic @ 30.04.2008. 23:22 ] @
Citat:
sucur: Prije svega, pozdravljam sve ucesnike projekta i, naravno, sve pohvale za trud i rezultate.

Radio sam prije 3 godine na jednoj igri, famozni "SpaceAttack" :) OpenGL/C++, i taj poduhvat mi je ostao u sjecanju kao jedno prelijepo i nezaboravno iskustvo.

Nisam citao sve postove, trenutno nemam vremena, ali sigurno da hocu. Btw. Nazirem nedoumice oko odabiranja biblioteke za zvuk. FMOD sam koristio, i mogu samo toplo da ga preporucim i vama. Odlicno obavlja posao, bio je, nadam se da je i danas, besplatan u nekomercijalnom software-u, jednostavan, multiplatform itd itd.

Puno srece u daljem radu, i bez odustajanja ;)


e nazdravlje hehe
[ Aleksandar Ružičić @ 01.05.2008. 13:25 ] @
Citat:
Aleksandar Vasic: ja sam danas neshto poceo sa FMOD-om,valjda cu uspeti ;) Naravno ako si josh uvek za to da napravimo biblioteku i sa FMOD-om mada ne vidim razlog kada imamo BASS :P


pa razlog zasto FMOD kad imamo BASS je sto BASS ne radi na linuxu ;)

a i ja sam zamislio da EGE ima Sound namespace koji ce da predstavlja neku vrstu lejera, tj necemo dozvoliti da se direkto koriste BASS i FMOD vec ce sve ici kroz EGE i na taj nacin cemo da sakrijemo razlike izmedju ove dve biblioteke, tj korisnik engine-a ce iste fje pozivati bilo da radi sa BASS bilo da radi sa FMOD...

mada, sad nesto gledam na ovom FMOD-ovom sajtu... ima dosta prednosti u odnosu na BASS (ovako na prvi pogled) tako da razmisljam da ne koristimo BASS uopste...
[ Aleksandar Vasic @ 01.05.2008. 13:36 ] @
e nazdravlje tek sad ;)

aj kad stignes javi se na msn
[ Aleksandar Ružičić @ 02.05.2008. 19:33 ] @
to nece biti pre 6. maja, jer tek tad dolazim u bg gde imam normalan net, ja na ovih 28kbps ne mogu da funkcionisem :)
[ Aleksandar Vasic @ 03.05.2008. 17:16 ] @
meni se ne žuri ;)
[ Lachie Dazdarian @ 03.05.2008. 19:01 ] @
Također mogu da toplo preporučim FMOD s obzirom da ga sve moje FB igre koriste.
[ Aleksandar Vasic @ 03.05.2008. 20:20 ] @
@lachie moze neki sample čisto da provalim korišćenje FMOD-a ??
[ Lachie Dazdarian @ 04.05.2008. 01:11 ] @
Pa ima jedan tutorial koji sam složio: http://lachie.phatcode.net/Downloads/UsingFMOD_A_Tutorial.zip

Samo moram te upozoriti da je limitiran na moj način korištenja FMOD-a. Ne koristim MIDI file-ove (bože sačuvaj) tako da nemam koristi od FMUSIC komandi. Uglavnom se držim FSOUND komandi i služe me savršeno. Kada trebam neku novu stvar pogledam FMOD-ov help document, kojeg toplo preporučam.

Skini FMOD 3 Programmers API: http://www.fmod.org/index.php/download

Bio je jedan tutorial u freebasic.net forumu, ali ga nemrem sad naći. Možda ćeš ti imati više sreće, ali mislim da će moj tutorial biti dovoljan da budeš sam sposoban istražiti ostale komande.
[ Aleksandar Vasic @ 04.05.2008. 12:10 ] @
Hvala Lachie ovo mi je od velike pomoći ;)
[ Aleksandar Ružičić @ 04.05.2008. 20:23 ] @
evo uradio sam ucitavanje i renderovanje bitmap fontova, jos uvek testiram renderovanje fontova tj taj kod ne racunam da je 100% kompletan ali sam ipak odlucio da okacim ovde ovo dokle sam stigao da bi se video neki progres ;)

elem, opet ce vam trebati winrar da raspakujete ovu arhivu koju kacim, i testiranje fontova je u screen trans test-u


a evo i sta je promenjeno do sad:
Code:

0.0.5.xxxx08.d    - 0.0.5 draft
--------------
    + implemented Graphics.Font type
    + changed Animation type to allow different easing effects for each animated value
    + changed screen transitions code as reflection of changes to Animation type
    + fixed bug in displacement filters when used on non-square bitmaps (PixelOffset, Flip)
    + added new image filters - PixelOffsetAntiAlias, Water, Swirl, RandomJitter, Mozaic
    + added new easing effects - CircIn, CircOut, CircInOut, SineIn, SineOut and SineInOut

(release date je xxxx jer nije jos uvek kompletna 0.0.5 verzija)

[Ovu poruku je menjao Aleksandar Ružičić dana 04.05.2008. u 21:43 GMT+1]
[ fLuXx @ 16.05.2008. 13:24 ] @
Sta je bilo sa projektom? Nije vajlda zamro? Velika bi steta bila, sjajno je napredovo!
[ Aleksandar Ružičić @ 16.05.2008. 13:39 ] @
ne nije zamro projekat, istina da u ovoj temi nije nista postovano skoro 10 dana ali ja radim nesto malo na enginu-u kolko mogu da stignem. za prvu beta verziju engine-a (koja ce relativno skoro) odlucio sam da napravim jednu malu igru na kojoj cu da doteram malo engine i da pokazem kako se engine koristi u konkretnom primeru.

evo npr ovde ima neki exe: http://krcko.haragei.org/launch%20time.zip ali to je samo intro screen i baloncici, i pre nekoliko dana je to kompajlirano (trenutno imam uradjeno i iscrtavanje i kretanje igraca)...

cim budem imao malko vise slobodnog vremena zavrsicu ovu igru i time ce engine doci u beta fazu sto znaci da mozemo konacno da pocnemo da radimo na EliteTanks igri, e kad ce to da bude gotovo, to ne zavisi samo od mene jer necu biti jedini koji ucestvuje u izradi te igre...
[ stefanpn @ 17.05.2008. 00:12 ] @
Ja se izvinjavam, zešće sam zatrpan poslom i fax-om, približava nam se jun...

Aleksandar je jedini vredan oko projekta koliko vidim, ali projekt nije "zamro", ja stalno mislim na njega.

Nadam se da ću uskoro uhvatiti korak sa Aleksandrom, nije fer da čovek sve odradi sam.

Malo je nezgodno što je tema premešten u "Ostali programski jezici" a ovde i nema baš puno dešavanja za praćenje... Više izgleda kao madzone, s' tim što je tamo bar aktivno. Takođe sam primetio da je i VB forum slabije posećen od kad je projekt i sve o FreeBASIC-u premešteno ovde, ali šta sad, kad završimo projekt biće bolje... Nadam se
[ markozelenovic @ 01.06.2008. 21:16 ] @
eto tako meni bilo dosadilo da cekam vas AI,
pa ja sebi napravio XO u c++(doduse konzolni) sa nepobjedljivim AI-om, ako ko hoce da uploadujem...pa da se zabavlja
Dao ja drugarima i oni se takmice ko ce da pobjedi kompjutera, jedan me drug(lažov) nazvao i reko da on to uradio, LOL !!!
[ Aleksandar Ružičić @ 01.06.2008. 23:31 ] @
marko vise puta smo pominjali da mi za ovaj projekat nemamo vremensko ogranicenje, i ne razmem tvoje poruke koje glase "kad ce ovo", "zasto ste tako spori" i sl. svi mi imamo dosta obaveza (ja licno imam dosta na poslu da radim, a i sad ce za koji dan junski rok) i radimo/radicemo kad budemo mogli.

ne mogu da ti kazem tacan datum (cak ni okviran) kada ce igra (EliteTanks, jedan mali demo druge igre ce doci uskoro) biti gotova ali mogu da ti garantujem da ce biti kompletirana jednog dana.
[ markozelenovic @ 12.09.2008. 20:35 ] @
cekamo!
[ fLuXx @ 13.09.2008. 17:56 ] @
Tako je :)

Naravno, misljenja sam da se od ovog projekta odustalo, bar za neko vreme... prove me wrong :)
[ Aleksandar Vasic @ 13.09.2008. 23:52 ] @
Kao sto je receno, projekat ce se raditi kada se budemo imalo vremena.
[ stefanpn @ 19.09.2008. 16:57 ] @
Zdravo ljudi.
Zanima me: Gde moze da se preuzme poslednja verzija engine-a? Hocu malo da se zabavim oko ovog projekta. Mislim da je ova zima super stvar da se ovo zavrsi i privede kraju.

Krcko, mozes li mi objasniti na koji nacin ucitavas PNG datoteke a da pritom ocuvas Alpha kanal?
Posto sam ja nesto malo experimentisao, doduse nisam pogledao primere po internetu ( sad cu ), ali znam da je to tebi poslo za rukom u ovom projektu, pa rekoh da pitam.



BTW. Link za launch_time ne radi, ako mozes popravi ga, bilo bi lepo da kad zavrsimo projekt iskoristimo sve ovo za istoriju projekta.

Nadam se da neko jos uvek cita ovaj thread.
[ Aleksandar Vasic @ 19.09.2008. 18:47 ] @
Ja mislim da je ovo poslednje izdanje...

okacio sam na moj host, posto je ovde max 1 mega

http://www.vasictech.net/EliteGameEngine.rar

[Ovu poruku je menjao Aleksandar Vasic dana 19.09.2008. u 20:00 GMT+1]
[ stefanpn @ 20.09.2008. 11:25 ] @
Hvala, Acika.
[ Aleksandar Ružičić @ 22.09.2008. 12:51 ] @
okacicu ja veceras poslednju verziju engine-a i launch time-a (koji je samo zapocet projekat, tj samo ima intro screen gotov :p) kad dodjem kuci (na poslu sam trenutno), mada ako odlucite da nastavite sa ovim ne racunajte na neku veliku pomoc od mene (mogu da pomognem sa savetima i malim primerima koda) posto sad stvarno nemam vremana jer sam poceo da radim 8h dnevno i kuci se uglavnom odmaram, tj slabo radim kuci :)

mada sam ja pre nekih mesec-dva (ili koliko vec ima od kad sam prestao ovde da postujem kod) poceo da radim na drugom projektu koji je vise framework nego engine (isto u fb-u naravno) jer je ege lose dizajniran (to sam shvatio kada sam poceo da radim launch time) tj nije bas lose ali moze mnogo bolje :)
mada sad sam i sa tim projektom stopirao :|


elem, veceras kacim fajlove i napisacu malo objasnjenje kako sam baratao sa alpha kanalom iz fba...
[ stefanpn @ 22.09.2008. 13:26 ] @
Nemoras da se mlatis sa objasnjenjem za Alpha kanal, sto se mene tice.

Procitao sam malo dokumentacije po internetu i snasao sam se...

Hvala u svakom slucaju.
[ Aleksandar Ružičić @ 22.09.2008. 21:43 ] @
ok evo vam ege + launch time, trebace vam winrar (il neki komaptiblini programcic) posto sam podelio arhivu na vise delova (Da bi mogao ovde da uploadujem)
[ stefanpn @ 23.09.2008. 09:32 ] @
Citat:
Aleksandar Ružičić: ... je ege lose dizajniran (to sam shvatio kada sam poceo da radim launch time) tj nije bas lose ali moze mnogo bolje...


Krcko nisam bas neko ko zna da daje komplimente ali ti si sjajan programer!

Sto se EGE-a tice, kod nije lose napisan, jedino zbog losih razvojnih okruzenja za FB deluje malo preglomazno i slozeno, tesko je traziti po kodu za sta koja f-ja sluzi ( ali to je zato sto nema dokumentacije, sasvim normalno s' obzirom da si ceo projekt do sad izneo ti sam. ).

Bilo kako bilo ja cu se potruditi da mu dodam jos i AI, a i jednostavnu implementaciju FMOD-a, ako A. Vasic nije to vec zavrsio ili jos radi na tome.
[ Aleksandar Ružičić @ 23.09.2008. 09:48 ] @
ma nije on lose napisan, on samo nije dizajniran onoliko dobro koliko to moze da bude, tj nije onakav kakvog sam ga zamislio...

ako ne budes mogao da se snadjes gde je sta pitaj pa cu ti reci...