Menu

Show posts

This section allows you to view all posts made by this member. Note that you can only see posts made in areas you currently have access to.

Show posts Menu

Topics - Corax

#2
Can anyone tell me how "Setup: Pack&Go" works (step by step)?

Thanks!
#3
Here is a list of freeware games that might interest you:

Dwarf Fortress:
http://www.bay12games.com/dwarves/

Falcons Eye:
http://falconseye.sourceforge.net/

Angband:
http://rephial.org/

Rogue Survivor:
http://roguesurvivor.blogspot.com/

NAEV:
http://naev.org/

ascii Sector:
http://www.asciisector.net/

Transcendence:
http://transcendence.kronosaur.com/

Birth of the Empires:
http://birth-of-the-empires.de/

Battle for Wesnoth:
http://www.wesnoth.org/

Advanced Strategic Command:
http://www.asc-hq.org/

FreeCiv:
http://sourceforge.net/projects/freeciv/

FreeCol:
http://www.freecol.org/

Simutrans:
http://www.simutrans.com/

I guess there are many more good games most people just haven´t noticed.
So if you know some - please post them here!
#4
Dieser Thread bezieht sich auf das Programm "Tutorial Game", dass du im Showroom
herunterladen kannst, und als Ergänzung und Weiterführung zu den Haupttutorials
gedacht ist, die man in der Entwicklungsumgebung über [F1] aufrufen kann.

Zunächst folgen ein paar Tipps, danach der erste Teil des Tutorials.

Hinweis :
Das Programm enthält kaum spielerische Elemente. Ausser dem kleinen Dorf (drei
Bildschirme gross) gibt es nichts weiter zu entdecken (die anderen Gebiete werden
generisch erzeugt). Die Beispielaufgabe liegt darin, die "Zauberkugel" in deinen
Besitz zu bringen. Die Steuerung ist der Datei "LiesMich.txt" zu entnehmen.

Projektstruktur/Programmierstil ________________________________________________________

Gewöhne dir gleich zu Beginn eine logische und übersichtliche Programmstruktur an.
Sobald deine Projekte komplexer werden, ist es wichtig, den Überblick zu behalten.

- Einrücken:
  Rücke den Inhalt von Schleifen immer deutlich sichtbar ein und benutze Leerzeichen
  (z.B. nach Kommata):

  Falsch:

  WHILE TRUE
  FOR x=0 TO 100
  PRINT x,0,0
  SHOWSCREEN
  NEXT
  WEND

  Richtig:

  WHILE TRUE
     FOR x = 0 TO 100
        PRINT x, 0, 0
        SHOWSCREEN
     NEXT
  WEND

- Kommentieren:
  Kommentiere Befehlsblöcke ausreichend in allgemeinverständlicher Sprache.
  Das erleichtert deutlich die Analyse deines Quellcodes.

  Beispiel:

  // write mouse state into variables
  MOUSESTATE mx, my, mbl, mbr // x coord, y coord, left button, right button
  mxspeed = MOUSEAXIS(0) // x axis (x speed)
  myspeed = MOUSEAXIS(1) // y axis (y speed)
  mwheel  = MOUSEAXIS(2) // wheel (1 = up / -1 = down)
  mbm     = MOUSEAXIS(5) // middle button

- Mehrere Quelldateien:
  Ordne Funktionsgruppen in unterschiedlichen Quelldateien an, wenn die Sprungliste
  zu lang wird. Siehe dazu:
  Help:glbasic -> GLBasic intern -> Mehrere Quelldateien

- Sprungmarken:
  Die Verwendung von Sprungmarken und Lesezeichen erleichtern das Navigieren
  im Quellcode (Beispiel: siehe Code unten).

- Templates:
  Benutze ein vorgefertigtes Programmgerüst, damit du dich schneller auf das
  Wesentliche konzentrieren kannst.

  Beispiel:

Code (glbasic) Select

// --------------------------------- //
// Project: ExampleTemplate
// --------------------------------- //

//_____________________________________________________________________________ DECLARATIONS
   //............................................................................... CONs
   Constants:

   //............................................................................... VARs
   Variables:
   
   // mouse state variables
   GLOBAL mx, my // mouse coordinates
   GLOBAL mbl, mbm, mbr // mouse button left, middle, right
   GLOBAL mxspeed, myspeed, mwheel // mouse x speed, y speed, mouse wheel
   
   // main directory
   GLOBAL MainDir$

   //............................................................................... DIMs
   DIMs:

   //.............................................................................. TYPEs
   TYPes: 

//______________________________________________________________________________________ INI
   // main initialization
   GOSUB subINI

//________________________________________________________________________________ MAIN LOOP
MainLoop:
WHILE TRUE

   // read mouse state
   GOSUB subReadMouse

   //...................................................................... MAIN CODE >>>
   
   //...................................................................... <<< MAIN CODE

   // draw mouse pointer
   DRAWSPRITE 1, mx-15, my-15

   // draw buffer on screen
   SHOWSCREEN

WEND

//_________________________________________________________________________ SUBs / FUNCTIONs
// ------------------------------------------------------------- //
// -=#  SUBINI  #=-
// .............................................................
// main initialization
// ------------------------------------------------------------- //
SUB subINI:

   //.................................................. LOAD GFX
   GFX:
   // get main/set GFX directory
   MainDir$ = GETCURRENTDIR$()
   SETCURRENTDIR(MainDir$ + "Media/GFX")

   // load standard font-gfx : index 0
   LOADFONT "smalfont.png", 0 // standard font

   // set font index
   SETFONT 0 // standard font

   // mouse pointer
   LOADSPRITE "MPointer.png", 1

   //.................................................. LOAD SFX
   SFX:
   SETCURRENTDIR(MainDir$ + "Media/SFX")

   //................................................ LOAD MUSIC
   Music:
   SETCURRENTDIR(MainDir$ + "Media/Music")

   // reset to main directory
   SETCURRENTDIR(MainDir$)

ENDSUB // SUBINI

// ------------------------------------------------------------- //
// -=#  SUBREADMOUSE  #=-
// .............................................................
// reads various mouse states
// ------------------------------------------------------------- //
SUB subReadMouse:

   // write mouse state into variables
   MOUSESTATE mx, my, mbl, mbr // x coord, y coord, left button, right button
   mxspeed = MOUSEAXIS(0) // x axis (x speed)
   myspeed = MOUSEAXIS(1) // y axis (y speed)
   mwheel  = MOUSEAXIS(2) // wheel (1 = up / -1 = down)
   mbm     = MOUSEAXIS(5) // middle button

ENDSUB // SUBREADMOUSE


- Konventionen:
  Markiere unterschiedliche Datentypen um Verwechslungen zu vermeiden.
  Ich benutze z.B. folgende Konvention:
  Lokale Variabeln : lName
  DIMs             : dName[]
  TYPEn            : tName
  Konstanten       : cNAME

Nützliche Funktionen ___________________________________________________________________

Eine eigene Funktionssammlung wird wichtig, wenn man komplexere Projekte in
Angriff nimmt. Es wird empfohlen, zuerst mit simpleren Funktionen zu beginnen,
um damit die komplizierteren zu realisieren.

Interface:
Eine Sammlung an Interfacefunktionen ist im Showroom ("GUIde") verfügbar.

Trigonometrie:
Trigonometrische Funktionen werden in Spielen häufig verwendet, um z.B.
realistische Bewegungen darzustellen.
Wenn jemand bessere Funktionen, als die unten aufgeführten hat - bitte posten.

- fnMoveX / fnMoveY:
  Hiermit kann ein Objekt auf der x/y Achse bewegt werden.

Code (glbasic) Select

// ------------------------------------------------------------- //
// -=#  FNMOVEX  #=-
// ------------------------------------------------------------- //
FUNCTION fnMoveX: lAngle, lx, lSpeed

   DEC lAngle, 180

   lx = lx + COS(lAngle) * lSpeed

   RETURN lx

ENDFUNCTION // FNMOVEX

// ------------------------------------------------------------- //
// -=#  FNMOVEY  #=-
// ------------------------------------------------------------- //
FUNCTION fnMoveY: lAngle, ly, lSpeed

   DEC lAngle, 180

   ly = ly + SIN(lAngle) * lSpeed

   RETURN ly

ENDFUNCTION // FNMOVEY


  Nutzung:
  Object_x = fnMoveX(Object_Angle, Object_x, Object_Speed)
  Object_y = fnMoveY(Object_Angle, Object_y, Object_Speed)

- fnGetAngle
  Ermittelt den Winkel zwischen zwei Punkten (Objekten).

Code (glbasic) Select

// ------------------------------------------------------------- //
// -=#  FNGETANGLE  #=-
// ................................................................
// computes angle between two points
// ------------------------------------------------------------- //
FUNCTION fnGetAngle: lx1, ly1, lx2, ly2

   LOCAL lAngle

   // ??? angle-computing-code
   lAngle = MOD((ATAN(ly1-ly2,lx1-lx2)+360),360)

   RETURN lAngle

ENDFUNCTION // FNGETANGLE


  Nutzung:
  Winkel = fnGetAngle(Object_1_x, Object_1_y, Object_2_x, Object_2_y)

- fnGetDistance:
  Ermittelt die Entfernung zwischen zwei Punkten.

Code (glbasic) Select

// ------------------------------------------------------------- //
// -=#  FNGETDISTANCE  #=-
// ------------------------------------------------------------- //
FUNCTION fnGetDistance: lx1, ly1, lx2, ly2

   LOCAL lx, ly, lReturn

   lx = lx1 - lx2

   ly = ly1 - ly2

   // ??? distance computing code
   lReturn = SQR( ABS(lx * lx) + ABS(ly * ly) )

   RETURN lReturn

ENDFUNCTION // FNGETDISTANCE


  Nutzung:
  Entfernung = fnGetDistance(Object_1_x, Object_1_y, Object_2_x, Object_2_y)

Tools __________________________________________________________________________________

Die richtige Kombination von Tools (also Werkzeugen, Hilfsprogrammen) ist auschlaggebend
für die Qualität deines Projekts. Nimm dir also Zeit und teste verschiedene Tools
ausreichend.

Hier ist eine Liste mit diversen nützlichen Programmen:
http://www.glbasic.com/forum/index.php?topic=7959.0
#5
GLBasic - de / Fragen
2011-Jan-03
1. Gibt es einen nennenswerten Geschwindigkeitsunterschied zwischen 4 und 8 byte Zahlen ?

2. Kann ich CONST sicher nutzen (in der Hilfedatei gibt es keinen Eintrag dazu) ?

3. Kann jemand eine Schritt-für-Schritt Anleitung posten, die genau beschreibt,
   wie man das "Setup: Pack&Go"-tool richtig nutzt ?
#6
Off Topic / free music
2010-Dec-15
I´ve found a nice website where you can get free music for your projects (even commercial ones).

http://incompetech.com/m/c/royalty-free/
#7
I am unsure about which control method to use. I would prefer the
mouse, but it seems to behave odd sometimes. What is your opinion ?

Left mouse button: fire
Right mouse button: switch control mode
   mouse-mode: just move the ship with the mouse
   key-mode: use WASD-keys

Eradicator.app.zip - 1.10MB
#8
Wenn ich Grabsprite benutze, ?ndert sich die Grafik (GENSPRITE) des Mauspointers.
(linke Maustaste dr?cken um Grabsprite zu benutzen)

Code (glbasic) Select
// declare gImgTest as GENSPRITE
gImgTest = GENSPRITE()

// draw mouse-cursor GFX
DRAWRECT 0, 0, 16, 16, RGB(255,255,255)

// grab mouse-cursor GFX and store it in gImgTest
GRABSPRITE gImgTest, 0, 0, 16, 16

// mouse state variables
GLOBAL mx, my, mb1, mb2

WHILE TRUE

   // read mouse state
   MOUSESTATE mx, my, mb1, mb2
   
   // draw mouse cursor at mouse x/y coordinates
   DRAWSPRITE gImgTest, mx, my

   // when left mouse button is pressed, grab screen GFX
   IF mb1; GRABSPRITE 0, 0, 0, 640, 480; ENDIF
   
   SHOWSCREEN
   
WEND
#9
This program takes a string and transforms it into a colored, waved graphic.
In the final version it should also read information out of a *.txt file and
let it scroll right to left over the screen.

Obviously, it is far too slow with the grabsprite-solution (FPS on my computer: 10/30).
Can anyone think up a faster approach ?

TextWave.zip - 0.46MB
#10
Userlibs [ *.gbal] / GUIde
2009-Jul-27
GUIde is a small interface library + template (avaiable in the Showroom). With it, you
can concentrate on the main code with several GUI-functions available and without delay.

http://www.glbasic.com/showroom.php?site=games&game=guide

Start the _template.exe to see an example for the functions.

Here you can post:

- Bug reports
- Questions
- Interface philosophy
#11
Wenn es im Showroom Boards f?r die Programme g?be, k?nnte man dort bug-reports und
Verbesserungsvorschl?ge posten.
#13
I programmed a code-snippet which should display fonts in the color the user picked. It runs perfectly on my computer (black background colored strings) but not on the one I am currently using (pink background).
Could anyone test this on his machine ?

EDIT by Schranz0r:

File now on attachments

[attachment deleted by admin]
#14
The problem with a tilemap consisting of multiple layers is the large amount of unused memory. For example, if you have a DIM like this: TileMap[1000][1000][10] and only a few indexes use 10 tiles, the waste of memory isn?t acceptable.

I thought about tilemaps that function like linked lists. Is this possible with GLB ?
If yes, can someone post an example ?
#15
Does anyone know where i can find royalty-free SFX and music ?

I also search for a freeware midi-composer other than Anvil.
#16
Ich versuche schon seit einiger Zeit eine Engine f?r globale Strategiespiele zu
schreiben, musste aber feststellen, dass mir das Projekt zu komplex geworden ist.
Als Einzelner ist es fast unm?glich gr?ssere Programme zu realisieren. Und da
jeder Etwas, und keiner Alles kann, stelle ich das Konzept "Communityprojekte" zur Diskussion:

Zuerst wird ein Designprotokoll erstellt, in dem die gesamte Theorie des Projektes
detailliert niedergeschrieben wird. Das Ganze wird von der Community analysiert und, wenn
n?tig, ge?ndert. Danach wird ein PROGRAMMGER?ST erstellt, das alle Funktionen, Grafiken,
SFX etc. als Platzhalter enth?lt. Diese werden dann durch diverse Teilnehmer "ausgef?llt".
Dieses Konzept eignet sich z.B. um Engines f?r verschiedene Genres (vielleicht sogar Roguelikes !)
zu programmieren, die von einzelnen Nutzern dann selbstst?ndig in fertige Spiele umgewandelt
werden k?nnen.

Unter dem Men?punkt "Communityprojekte" im Forum k?nnen dann das Gesamtprogramm oder
Teile davon rauf/runtergeladen werden.

Personelle Struktur:

Designer:
Erstellt das Designprotokoll und, wenn m?glich, das Programmger?st.

Projektleiter:
Der Projektleiter muss vollkommen mit dem Designprotokoll vertraut sein.
Er erstellt das Programmger?st oder ?ndert das Vorhandene ab.
Es sollte sich hierbei um eine Person handeln, die hervorragend programmieren
kann und oft im Forum anwesend ist, da er, wenn der Designer nicht erreichbar
ist (f?r R?ckfragen), in jeder Entscheidung das letzte Wort hat.
Kurz: er sorgt f?r die Gesamtorganisation des Projekts.

(optional) GFX-, SFX-, musikalischer Leiter:
Nehmen dem Projektleiter in diesen Teilbereichen Arbeit ab, indem sie z.B.
im Internet nach freien Ressourcen suchen oder K?nstler kontaktieren, die
an dem Projekt interessiert sein k?nnten.

Teilnehmerliste:
Hier k?nnen sich Mitglieder eintragen, die sich dem Projekt zur Verf?gung stellen
m?chten. Sie tragen sich mit ihrem NickName und F?higkeiten ein. Beispiel:
(NickName): GFX(2D), Musik(MIDI; Klassik)
Der Projekt-/GFX-/SFX-/musikalische Leiter k?nnen dann entsprechende Aufgaben an
die Teilnehmer delegieren.

Wenn das Konzept in dieser oder ?hnlicher Form Interesse weckt, kann es mit
folgendem Programmger?st getestet werden:

GLB Paint.zip - 0.53MB

Es handelt sich hierbei um ein Malprogramm das einige Ideen von "ArtGem" enth?lt.
Die Datei Info.txt beinhaltet einf?hrende Informationen.

Da ich nur sehr selten im Internet bin, kann ich nicht umgehend auf Feedback
reagieren, aber da das Designprotokoll bereits erstellt wurde, ist die Umsetzung
des Projekts m?glich. Es kann auch abge?ndert oder nur in Teilen (mit neuem Konzept)
verwendet werden (z.B. die Grafik und/oder einzelne Funktionen).
#17
Ich habe ein Programm (BattleRage) in den Showroom gestellt, dass als Beispiel für
Arcade-Spiele dienen könnte, wenn ein erfahrener Programmierer den Code optimiert
und Fehler ausbügelt (die Schatten wurden in früheren Versionen korrekt dargestellt).
#18
Ich habe mich einige Zeit mit GLBasic beschäftigt und habe dazu einige Fragen und Vorschläge :

1. Existiert eine interne look-up Tabelle für SIN/COS Berechnungen oder sollte man diese selbst anlegen ?

2. Wird der Speicher nach Programmende automatisch freigegeben ?

3. Was genau passiert wenn ich ein nicht geladenes Sprite blitte ? Wieviel Rechenzeit geht dadurch
    verloren (Ich benutze DIM um eine tile-basierte Karte mit fünf verschiedenen Ebenen/Layer
    darzustellen und nicht jeder Index enthält eine Grafik) ?

4. Ich habe daran gedacht mir die Vollversion von GLBasic zuzulegen. Da ich aber über keinen eigenen
    Internet-Anschluss verfüge und nur selten einen nutzen kann, müsste ich das Programm auf meinem
    eigenen Rechner installieren. Gibt es dafür spezielle Offline-Updates ?

Vorschläge:

1. Konstanten würden die Arbeit vereinfachen.

2. Die FINDPATH() Funktion sollte nach einem bestimmten Zeitlimit abgebrochen, oder unterbrochen und im
   nächsten Frame fortgesetzt werden können.

3. Eine Seed-Funktion für RND() wäre nützlich um z.B. generische Karten zu erstellen die immer gleich      aussehen sollen.

4. Eine Funktion zur Messung des verbrauchten RAM würde es erleichtern die Mindestanforderungen an die
   Speicherkapazität zu ermitteln.