MOD-Files als Sound-Library mit Kanälen in MMBasic

Musik und Soundeffekte gleichzeitig laufen lassen, ohne dass sich was abschießt. Mein Weg dahin geht über PLAY MODSAMPLE und ein paar feste Kanäle.

Array-Lookups in heißen Schleifen wegcachen

Wenn der gleiche Array-Index fünfmal pro Iteration auftaucht, lohnt es sich, ihn einmal in eine Variable zu legen. Klein, aber bei mir messbar.

LOCAL kostet in MMBasic mehr als man denkt

LOCAL für Variablen anlegen klingt nach sauberer Programmierung. In heißen Schleifen war das bei mir der falsche Reflex.

CIRCLE pro Frame ist teurer als gedacht

Kleine Punkte, kleiner Aufwand, oder? Beim Profilen war CIRCLE einer der teuersten Befehle pro Frame. Was ich daraus gemacht habe.

Eigene Vektor-Schrift in MMBasic aus DATA-Statements

Pixel-Fonts skalieren nicht schön, und für ein Vektor-Spiel passen sie auch optisch nicht. Wie ich aus DATA-Statements eine skalierbare Schrift gebaut habe.

Vektoren rotieren ohne FOR-Schleife in MMBasic

Rotation in der Schleife mit COS und SIN ist offensichtlich. MATH V_ROTATE macht das Gleiche schneller, ohne dass man jeden Punkt selbst dreht.

Arrays in MMBasic ohne FOR-Schleife initialisieren

Ein ganzes Array auf einen Wert setzen, ohne Schleife. MATH SET ist der unscheinbare Befehl, den ich mittlerweile öfter brauche als alles andere aus der MATH-Familie.

Dateien laden, die fehlen dürfen

Wenn eine Datei optional ist und beim ersten Start noch fehlt, soll das Programm nicht abstürzen. ON ERROR SKIP plus MM.ERRNO ist der saubere Weg.

STATIC für Cooldowns, Debounce und Rate-Limits in MMBasic

Eine Variable, die zwischen Aufrufen ihren Wert behält, ohne globale State zu schmutzen. Genau das macht STATIC in einer SUB.

Object Pool statt dynamischer Allokation in MMBasic

Schüsse, Partikel, Asteroiden ständig erzeugen und löschen funktioniert in MMBasic nicht. Wie ich mit einem festen Pool und Active-Flags trotzdem flexibel bleibe.