Guide Complet pour Amiga
Table des matières
- Qu’est-ce que Scorpion Engine ?
- Démarrage rapide
- Tutoriel complet – Faire son premier jeu (MonkeyLad)
- Mécaniques de gameplay avancées
- Référence Codeblocks
- Glossaire
- Optimisations Amiga
- Ressources et liens
1. Qu’est-ce que Scorpion Engine ?
Scorpion Engine est un moteur de jeu et outil de création ciblant nativement les systèmes rétro Motorola 68000 : Amiga OCS/ECS/AGA, Mega Drive et Neo Geo. Il fonctionne comme une machine virtuelle 68K — similaire à SCUMM (LucasArts), SCI (Sierra) ou le moteur d’Another World, mais avec un vrai processeur 68K virtuel pour des performances maximales.
Les deux composants
L’éditeur Programme Windows 64 bits (Unity). Interface visuelle, menus déroulants, aucune syntaxe à mémoriser. Le runtime Blitz Basic + assembleur 68K. Mode interleaved Amiga pour blits ultra-rapides. Compatible Amiga 500 standard (512 Ko Chip + 512 Ko Fast).
Trois principes fondamentaux
- Performance : comparable à du C/ASM. Interleaved Amiga. PerformanceTester intégré.
- Flexibilité : platformers, shmups, puzzles, racers, VN, aventures… tout est possible via les codeblocks.
- Facilité : Tiled pour les maps, PNG indexé pour les sprites, WAV/MP3/OGG pour le son.
2. Démarrage rapide
Indispensables
- Scorpion Engine stable (2024.2) : Télécharger
- Scorpion Engine expérimental : Télécharger
- Tiled : mapeditor.org
- Émulateur : WinUAE (Windows) ou FS-UAE (multiplateforme)
Optionnels
- Graphismes PNG indexé : Aseprite, ProMotion NG, Paint Shop Pro, Deluxe Paint
- Audio : Audacity (WAV/OGG) ; ProTracker/MilkyTracker (modules .mod pour Amiga)
- Démos communautaires : Télécharger
3. Tutoriel complet – MonkeyLad
Platformer inspiré d’Alex Kidd in Miracle World, graphismes de Surt (OpenGameArt).
Leçon 1 – Premier projet
- Créez un dossier
MonkeyLad. - Ouvrez le Scorpion Editor → New Scorpion Project.
- Sauvegardez
project.sprojectdans ce dossier. - Optionnel : cliquez “Platform – Amiga OCS” (haut droite) pour changer de cible.

Leçon 2 – Premier panel
Les panels = images statiques : écrans titre, game over, HUD, menus, dialogues, parallaxe…
- Créez le dossier
Panels. - Sauvegardez cette image dans ce dossier :

- Scorpion Editor → onglet Panels → + → sélectionnez l’image → sauvez sous
titlescreen.panel. - Amiga : passez de “5 / 32 colors” à 4 / 16 colors.

Leçon 3 – Premier code
Les codeblocks = séquences d’instructions configurées via menus déroulants (pas de syntaxe).
- Onglet Code → codeblock startup → + → catégorie Display → commande Panel → sélectionnez titlescreen.
1 Load and display titlescreen (unload level)
- Onglet Project → Run in WINUAE.

Leçon 4 – Première palette
Les panels PNG possèdent leur palette. Acteurs et niveaux partagent une palette centrale de projet.
- Sauvegardez cette image dans le dossier projet en écrasant
amiga_ocs.palette.png:

Leçon 5 – Premier tileset
- Créez le dossier
Mapset sauvez cette image :
- Onglet Maps → + (tilesets) → sélectionnez l’image → sauvez
tileset.tileset.tsx.

Définir les tuiles solides
- Cliquez Edit Tileset (ouvre Tiled). Sélectionnez les tuiles solides → cochez IsSolid → sauvez → fermez.

Leçon 6 – Premier niveau
- Onglet Maps → + (Maps) → sélectionnez le tileset → sauvez
level01. - Cliquez Edit Map → peignez votre niveau dans Tiled → sauvez → fermez.

Relier le niveau au démarrage
- Onglet Code → ligne 1 du startup → cochez Wait for Fire Button.
- + → catégorie Level → commande Level → sélectionnez level01.
1 Load and display panel titlescreen then wait for fire hit (unload level)
2 Load Level level01 (Auto Fade In)

Leçon 7 – Première animation
- Créez
animations/player. Sauvez ces 4 frames : FichierApercu walk_1.png
walk_2.png
walk_3.png
walk_4.png
- Onglet Animations → + → sauvez
monkeylad_walk_r.animstrip. Le suffixe_rest crucial : Scorpion génère automatiquement la version_l. - Ajoutez les 4 images comme frames. Alignez chaque frame : X-8, Y-24 (ligne de sol).

Leçon 8 – Premier acteur
Animations supplémentaires
| Chemin | Contenu |
|---|---|
animations/player/monkeylad_idle_r.animstrip | 1 frame au repos |
animations/player/monkeylad_jump_r.animstrip | 1 frame de saut |
Création
- Créez le dossier
actors. - Onglet Actors → + → animation
monkeylad_idle_l→ sauvezmonkeylad.actor. - Alignez les pieds avec le bas du damier (origin x=8, y=16).
- Cochez Show collbox → ajustez → cochez Player.

Contrôles et physique
Volet droit → CPU → sélectionnez Control Platform Maryo.
| Direction | Animation |
|---|---|
| Haut-Droite / Bas-Droite / Haut-Gauche | monkeylad_jump_r (ou _l) |
| Droite | monkeylad_walk_r |
| Gauche | monkeylad_walk_l |
| Bas-Gauche | monkeylad_jump_l |
| Paramètre physique | Valeur |
|---|---|
| Jump Speed | 4 |
| Max Fall Speed | 4 |
| Left / Right Speed | 2 |
| Jump Boost | 0.1 |
| Gravity | 0.2 |
Croix rouge = hauteur max saut (bouton maintenu). Croix verte = hauteur min (pression courte).

Placement dans la carte et test
- Onglet Maps →
level01→ Edit Map → calque actors + tileset actors → placez le joueur → sauvez.


4. Mécaniques de gameplay avancées
4.1 Contrôles : joystick, clavier, multi-joueur
Architecture
Les joysticks sont lus lors du Vertical Blank (50 Hz PAL / 60 Hz NTSC). Jusqu’à 4 contrôleurs simultanés sont supportés.
| Joueur | Port Amiga | Variables de base |
|---|---|---|
| 1 | Port joystick | Control0_X/Y, Control0Fire, Control0Jump |
| 2 | Port souris | Control1_X/Y, Control1Fire, Control1Jump |
| 3 | — | Control2_X/Y, Control2Fire, Control2Jump |
| 4 | — | Control3_X/Y, Control3Fire, Control3Jump |
Les contrôleurs 3 et 4 ne supportent PAS les joysticks à 2 boutons.
États des boutons
| Constante | Valeur | Description |
|---|---|---|
Button_None | 0 | Non pressé |
Button_Hit | 1 | Vient d’être pressé (front montant, 1 seule frame) |
Button_Down | -1 | Maintenu enfoncé |
if Control0Fire == Button_Hit
// Action unique à la pression
end condition
if Control0Jump == Button_Down
// Action maintenue
end condition
Bits des boutons avancés (Amiga joystick + CD32)
Accessibles via Control0_Buttons (maintenu) et Control0_HitButtons (front montant) avec BITTST :
| Constante | Bit | Description |
|---|---|---|
Joy_Up | 0 | Joystick Haut |
Joy_Down | 1 | Joystick Bas |
Joy_Left | 2 | Joystick Gauche |
Joy_Right | 3 | Joystick Droite |
Amiga_Fire1 = CD32_Red | 4 | Fire 1 / CD32 Rouge |
Amiga_Fire2 = CD32_Blue | 5 | Fire 2 / CD32 Bleu |
Amiga_Fire3 = CD32_Play | 7 | Fire 3 / CD32 Play |
CD32_Reverse | 8 | CD32 Épaule gauche |
CD32_Forward | 9 | CD32 Épaule droite |
CD32_Green | 10 | CD32 Vert |
CD32_Yellow | 11 | CD32 Jaune |
Flag_LockMovement | 14 | Mouvement verrouillé |
Flag_AutoFire | 15 | Autofire activé |
Clavier et souris
KeyboardRawCode: raw keycode de la dernière touche pressée (Amiga).Control0_MouseX/Y: position souris sur le port joystick.Control1_MouseX/Y: position souris sur le port souris.actor_controlmousex/y: position souris pour l’acteur courant.
Variables de contrôle de l’acteur courant
| Variable | Description |
|---|---|
actor_controlx | Direction X du stick (-1, 0, 1) |
actor_controly | Direction Y du stick |
actor_controlfire | État du bouton Fire |
actor_controljump | État du bouton Jump |
actor_controlbuttons | Tous les boutons (maintenu) |
actor_controlhitbuttons | Tous les boutons (front montant) |
actor_controller | Numéro du contrôleur assigné |
Commandes de contrôle en codeblocks (catégorie Controls)
| Commande | Description |
|---|---|
| Attack/Move Controls | Changer le bouton d’attaque et son comportement |
| Boost / Boost Acceleration | Vitesse max et accélération d’un acteur contrôlé |
| Control Mode | Nombre et type de contrôleurs actifs |
| Jump Controls | Bouton de saut et son comportement |
| Set Controller | Assigner un contrôleur spécifique à un acteur |
| Set as Player | Désigner l’acteur courant comme PLAYER pour un contrôleur |
4.2 Types de mouvement des acteurs
Modes contrôlés (joueur)
| Type CPU | Description |
|---|---|
| Control Platform Maryo | Platformer avec saut variable (hauteur = durée du bouton). Très réactif, recommandé. |
| Control Platform | Platformer classique, saut fixe. |
| Control 8-way | Déplacement libre dans les 8 directions (shmup, top-down). |
| Control 4-way | Déplacement en 4 directions. |
| Control Car | Conduite avec accélération/décélération. |
Modes CPU (ennemis et PNJ)
| Type CPU | Description |
|---|---|
| CPU Patrol | Va-et-vient. Fait demi-tour à la collision ou au bord. |
| CPU Path | Suit un chemin prédéfini (Map Path dans Tiled). |
| CPU Pursue Player | Poursuit le joueur activement. |
| CPU Static | Ne bouge pas (tourelles, décors). |
| CPU Gravity | Soumis à la gravité, sans contrôle. |
Constantes de direction de mouvement
| Constante | Val. | Constante | Val. |
|---|---|---|---|
Move_Up | 17 | Move_UpLeft | 16 |
Move_Right | 21 | Move_UpRight | 18 |
Move_Down | 23 | Move_DownLeft | 22 |
Move_Left | 19 | Move_DownRight | 24 |
move_atplayer | 48 | stop_moving | -3 |
resume_moving | 31 | reset_movement | -1 |
jump_movement | -2 | look_atplayer | 32 |
Constantes d’orientation (Look)
Look_Up=1 Look_Right=5 Look_Down=7 Look_Left=3
Look_UpRight=2 Look_UpLeft=0 Look_DownRight=8 Look_DownLeft=6
Constantes de strafe (déplacement sans changer d’orientation)
Strafe_Up=81 Strafe_Right=85 Strafe_Down=87 Strafe_Left=83
Strafe_UpRight=82 Strafe_UpLeft=80 Strafe_DownRight=88 Strafe_DownLeft=86
Variables de mouvement de l’acteur
| Variable | Description |
|---|---|
actor_x / actor_y | Position en pixels |
actor_xspeed / actor_yspeed | Vitesse courante |
actor_xfacing | Orientation X : -1=Gauche, 0=Centre, 1=Droite |
actor_yfacing | Orientation Y : -1=Haut, 0=Centre, 1=Bas |
actor_lookdir | Direction de regard courante |
actor_ismoving | En mouvement ? |
actor_isonplatform | Type de plateforme courante (voir tableau) |
actor_rotation | Rotation en degrés (0-359) |
Types de plateforme
| Constante | Val. | Description |
|---|---|---|
IsOnPlatform_False | 0 | En l’air |
IsOnPlatform_Flat | -1 | Sur tuile ou block plat |
IsOnPlatform_Slope | 1 | Sur une pente |
IsOnPlatform_PlatformActor | 2 | Sur un acteur Moving Platform |
// Recommandé pour détecter TOUTES les plateformes :
if actor_isonplatform not zero
// Sol detecté (plat, pente, ou plateforme mobile)
end condition
Commandes de mouvement en codeblocks
| Commande | Description |
|---|---|
Direction | Définir la direction de regard ou de mouvement |
Speed | Définir la vitesse exacte |
Push | Pousser l’acteur d’un montant sur N frames |
Position | Téléporter l’acteur |
jump_actor | Faire sauter l’acteur par code |
flipxmove | Inverser la direction X |
flipymove | Inverser la direction Y |
Freeze / Unfreeze | Géler/dégéler (mouvement, collisions, animations) |
Plateformes mobiles
Cochez Moving Platform sur un acteur pour qu’il porte les autres acteurs (ascenseurs, plateformes flottantes, véhicules). L’acteur porté doit avoir Can Ride Platforms coché.
4.3 Système de collisions
Collisions avec les tuiles
Les tuiles IsSolid bloquent automatiquement les acteurs. Les tuiles Platform ne bloquent que par le dessus (traversables par en dessous). Rien à coder pour les collisions sol/mur/plafond de base.
Propriétés des tuiles
| Constante | Bit | Description |
|---|---|---|
TileBit_Solid | 0 | Tuile solide |
TileBit_Platform | 1 | Plateforme (traversable par dessous) |
TileBit_AIBlock | 2 | Bloque les IA |
TileBit_HasAnimation | 4 | Possède une animation |
TileBit_HasForeground | 5 | Possède un foreground |
TileBit_HasBlock | 7 | Possède un block |
TileMask_Occupied | 0x83 | Masque : block/solid/platform présent |
La variable Handle_Collision permet, dans un événement personnalisé, de forcer ou ignorer la gestion d’une collision tuile.
Collisions entre acteurs – Règles fondamentales
- Un acteur Player peut entrer en collision avec des acteurs non-joueurs.
- Un acteur Projectile peut entrer en collision avec des acteurs non-joueurs (y compris d’autres projectiles).
Les collisions sont détectées via les collboxes. Les événements disponibles :
| Événement | Déclenchement |
|---|---|
| OnCollide | Contact avec un autre acteur |
| OnHit | Touché par un projectile ou une attaque |
| OnPlatformLanded | Atterrissage sur une plateforme |
| OnSpawn | Acteur venant d’être créé |
| OnTimer | Minuteur expiré |
| OnLeaveScreen | Sortie de l’écran (par direction) |
| OnDestroy | Acteur détruit |
Précision des collisions
La variable globale FastSloppyCollisions contrôle le compromis vitesse/précision :
| Valeur | Mode |
|---|---|
| 0 | Pixel perfect (lent) |
| 1 | Moyen |
| 2 | Rapide (imprecis) |
Les attaques melee sont toujours pixel-perfect, indépendamment de ce réglage.
Block Collider
Un acteur avec Block Collider coché peut déclencher des événements spéciaux contre les blocks (ex : détruire un block destructible). Joueurs et projectiles sont block colliders par défaut.
Attaques melee
Les attaques melee gèrent les hitboxes qui changent frame par frame (utiles pour les jeux de combat). Plus coûteux en performance que les collisions normales. Chaque frame d’animation peut déclencher un événement melee. Le variant hurt box définit où l’acteur peut être touché. La variable MeleeTag = tag de la dernière attaque. La variable HurtTag = tag de la dernière hurt box.
Retour visuel de collision : modes de rendu
| Constante | Effet visuel |
|---|---|
RenderMode_Default | Normal |
RenderMode_Blink | Clignotant |
RenderMode_Flash | Flash |
RenderMode_Highlight | Surbrillance |
RenderMode_Invert | Couleurs inversées |
RenderMode_Off | Invisible (logique active) |
RenderMode_Shadow | Affiché en ombre |
// Exemple : invincibilité temporaire 60 frames après une touche
// Dans OnHit :
actor_rendermode = RenderMode_Blink
Yield (60)
actor_rendermode = RenderMode_Default
4.4 Attaques, projectiles et combat
Is Attacker
Un acteur avec Is Attacker peut déclencher une animation d’attaque ou tirer un projectile. Un CPU attaque automatiquement ; un Player n’attaque que sur pression du bouton Fire.
Tir d’un projectile
// Commande Shoot (catégorie Actor) :
Shoot monkeylad_bullet
// Configurer le projectile via le préfixe new_ :
new_Direction = Move_Right
new_xspeed = 4
new_yspeed = 0
Le projectile doit avoir Projectile coché pour blesser les ennemis. Ne cochez PAS Projectile sur les balles ennemies sauf pour le monster infighting.
Spawn et destruction
// Catégorie Level :
Spawn Actor (my_actor, x, y)
// Enfant (catégorie Actor) :
Child Spawn (child_actor)
// Après un spawn, configurer via new_ :
new_x = actor_x
new_y = actor_y - 16
// Destruction :
destroy_actor
destroy_all_actors
destroy_child_actors
Constantes d’animation utiles pour le combat
| Constante | Valeur | Description |
|---|---|---|
Trigger_AttackAnimation | -1 | Déclencher l’animation d’attaque |
Trigger_CancelAnimation | -2 | Annuler l’animation courante |
Trigger_AttackSound | -10 | Déclencher le son d’attaque |
Trigger_JumpSound | -20 | Déclencher le son de saut |
Flags d’animation
| Constante | Bit | Description |
|---|---|---|
AnimFlag_PreventMovement | 0 | Bloque le mouvement pendant cette frame |
AnimFlag_PreventCollision | 1 | Pas de collision |
AnimFlag_HideChildren | 2 | Cache les acteurs enfants |
AnimFlag_PreventAttack | 3 | Interdit l’attaque |
AnimFlag_AutoFlipLeft | 4 | Auto-flip gauche |
AnimFlag_AutoFlipRight | 5 | Auto-flip droite |
4.5 Caméra et scrolling
| Variable | Description |
|---|---|
Camera_X / Camera_Y | Position de la caméra (lect./écrit.) |
Camera_XMin/XMax | Limites horizontales |
Camera_YMin/YMax | Limites verticales |
Camera_BoxLeft/Right/Up/Down | Marge avant scroll |
MaxCameraFollow | Pixels max/frame de mouvement caméra |
Scroll_Speed_X/Y | Vitesse d’auto-scroll |
Shake_Camera_X/Y | Shake caméra (décalage niveau) |
Shake_Sprite_X/Y | Shake sprites |
Lookahead_Left/Right/Up/Down | Vitesse de lookahead |
Commandes de caméra
| Commande | Description |
|---|---|
| Camera Bounds | Limites gauche/droite/haut/bas |
| Camera Box | Zone de confort avant scroll |
| Camera Follow | Mode de suivi du joueur |
| Camera Position | Téléporter la caméra |
| Camera Scroll | Vitesse d’auto-scroll X/Y |
flipscreen | Caméra se cale sur l’écran du joueur (snap) |
flipscreen_smooth | Scroll doux vers l’écran du joueur |
| Parallax Pointer / Scroll | Contrôle du défilement parallaxe |
4.6 Événements de map et téléporteurs
Map Events
Rectangles placés dans Tiled (calque Object Layer) qui déclenchent un codeblock quand le joueur entre, interagit (Fire), reste dans, ou sort de la zone. La variable EventTag contient le tag du dernier événement.
Téléporteurs
Un Map Event peut être un téléporteur vers n’importe quel endroit du même ou d’un autre niveau :
Teleport to (nom_du_teleporteur)
// ou
Teleport = "nom_du_teleporteur"
Map Templates
Placement d’acteurs à des coordonnées pixel précises (non limitées aux multiples de 16), avec pré-configuration de actor_var1…actor_var6 et des événements OnSpawn/OnTimer.
Map Paths
Polygones dans Tiled suivis par les acteurs CPU Path. Le début du chemin doit être sur la tuile de l’acteur. La variable actor_node indique le nœud courant.
4.7 Audio
Formats
- Effets sonores : WAV, MP3, OGG (toutes plateformes) + IFF 8SVX (Amiga)
- Musique Amiga : modules ProTracker (.mod, .p61) via driver PTPlayer
Commandes audio
| Commande | Description |
|---|---|
| Music | Charger et jouer une chanson |
| Music Pause / Resume | Pause/reprise |
| Music Volume | Volume musique (0-256) |
| Music Position | Sauter à un pattern |
| Auto Fade Music | Fading auto avec l’écran |
| Sound | Déclencher un effet sonore |
| Sound Volume | Volume effets (0-256) |
| Set Music Channels | Réserver des canaux pour la musique |
Variables : Music, MusicVol, MusicPos, SoundVol, AutoFadeMusic.
5. Référence Codeblocks
5.1 Cycle de vie du moteur
Render Cycle (chaque frame, même en pause)
- Lecture des contrôleurs
- Mise à jour panels haut/bas
- Mise à jour panel principal (si chargé)
- Fin si aucun niveau actif
- Attente VBlank si en avance
- Rendu tuiles (Amiga)
- Cycle acteurs : repositionnement + rendu BOB/Sprites
- Redessiner foreground tiles chevauchant les acteurs (Amiga)
Play Cycle (jeu non pausé, niveau chargé)
- Commandes projet
- Événements ontimer du niveau
- Gestion talkpad
- Auto-scroll
- Spawn des acteurs proches de la caméra
- Pour chaque acteur : code attaque → collisions blocks/événements (joueur) → ontimer → push → code mouvement → plateforme mobile → animation
- Traitement des collisions acteur↔acteur
- Traitement des attaques melee
- Re-tri ZBuffer
- Déplacement caméra → animations tuiles/blocks → parallaxe
Vertical Blank Amiga (50 Hz PAL)
- Lecture joysticks (CD32)
- Flip panels vers front buffer
- Interpolation sprites/scroll (jeux 25 Hz)
- Régénération copper lists si nécessaire
- Scroll bitmap du niveau
- Rendu hardware sprites
- Fade palette
- Finalisation copper lists
5.2 Commandes disponibles
Catégorie Actor (acteur courant ; aussi disponible pour player_, projectile_, new_)
| Commande | Description |
|---|---|
| Animation | Déclencher une animation |
| Camera Follow | Forcer la caméra à suivre cet acteur |
| Child Spawn | Spawner un enfant |
| Direction | Définir la direction |
| Freeze / Unfreeze | Géler/dégéler |
| Look At Point | Regarder vers un point du niveau |
| Melee | Déclencher une hitbox melee |
| Origin | Changer la position relative (parent) |
| Position | Téléporter |
| Push | Pousser sur N frames |
| Render Mode | Mode de rendu |
| Schedule Event | Codeblock après N frames |
| Separate | Séparer deux acteurs qui se chevauchent |
| Set as Player | Changer PLAYER vers cet acteur |
| Set Controller | Assigner un contrôleur |
| Shoot | Tirer un acteur |
| Speed | Vitesse exacte |
| Type | Changer le type |
| Yield | Suite dans N frames |
| Z Order | Ordre Z de rendu |
Catégorie Base
| Commande | Description |
|---|---|
| Comment | Commentaire (sans action) |
| Gosub | Aller à un codeblock/label, retourner au Return |
| Goto | Sauter à un codeblock/label |
| Inline | Insérer un codeblock entier ici (plus rapide que Gosub) |
| Label | Définir un point de saut |
| Return | Retourner au jeu ou au dernier Gosub |
| Roll Dice | Nombre aléatoire |
| Set Variable | Modifier une variable |
| Wait | Geler le jeu N frames |
| Yield On Level | Continuer après N frames (OnTimer niveau) |
| Quit | Quitter vers AmigaDOS |
Catégorie Conditional
| Commande | Description |
|---|---|
| Condition | IF standard |
| Else If | IF alternatif (si précédent faux) |
| Else | Sinon |
| End Condition | Fermer le bloc conditionnel |
| For Each Actor | Itérer sur tous les acteurs d’un type |
| For | Boucle avec variable |
| While | Boucle while |
Catégorie Level
| Commande | Description |
|---|---|
| Level | Charger un niveau |
| Spawn Actor | Spawner un acteur |
| Block Get / Set / Find / Count | Manipulation des blocks |
| Block Get by Pixel | Block en coordonnées pixels |
| Block Spawn | Spawner un acteur sur un block |
| Background | Remplacer le fond |
| Teleport to | Téléporter |
| Tile Properties Get / Set | Propriétés d’une tuile |
Catégorie Maths
| Commande | Description |
|---|---|
| Absolute | Valeur absolue |
| Angle | Rotation d’une valeur par une direction |
| ATan2 | Direction 0-359° depuis X et Y |
| Distance (Exact) | Distance directe (lent) |
| Distance (Manhattan) | Distance Manhattan (rapide) |
| Square Root | Racine carrée |
Catégorie Palette
| Commande | Description |
|---|---|
| Fade In / Out | Fondu depuis/vers le noir |
| Fade Time | Durée du fondu en frames |
| Color Set / Read / Write / Reset | Manipulation directe des couleurs |
| Palette Set / Read | Plage de couleurs depuis un PNG |
| Palette Swap | Changer l’index d’une couleur dans une animation |
Catégorie Data (sauvegarde)
| Commande | Description |
|---|---|
| Data Load / Save | Charger/sauver des variables sur disque. Vérifier Success. |
| String Clear / Replace / Set Character | Manipulation de chaînes |
Codeblocks internes les plus utiles
| Codeblock | Description |
|---|---|
destroy_actor | Détruire l’acteur courant |
destroy_all_actors | Détruire tous les acteurs |
destroy_child_actors | Détruire les enfants |
jump_actor | Faire sauter l’acteur |
flipxmove / flipymove / flipxymove | Inverser direction X, Y, ou XY |
freeze_actor / unfreeze_actor | Géler/dégéler |
restart_this_level | Redémarrer le niveau |
load_next_level | Charger le niveau suivant |
pause | Pause jeu |
fadein / fadeout | Fondu |
flipscreen / flipscreen_smooth | Snap/scroll caméra |
snap_to_screen | Forcer l’acteur dans les limites |
wrap_screen_left/right/top/bottom | Rebondir sur les bords |
waitforfiredown / waitforfirehit / waitforfireup | Attendre état Fire |
waitforframes | Attendre N frames |
anim_force_left / anim_force_right | Forcer l’animation dans un sens |
block_coll_force / block_coll_passthru | Forcer/ignorer collision block |
do_teleport | Déclencher un téléport |
5.3 Variables internes essentielles
Variables globales
| Variable | Description |
|---|---|
Level | Niveau chargé |
Camera_X/Y | Position caméra |
MapWidth/Height | Dimensions niveau (pixels) |
MapWidthTiles/HeightTiles | Dimensions niveau (tuiles) |
Actor_Count | Nombre d’acteurs actifs |
FastSloppyCollisions | 0=précis 1=moyen 2=rapide |
FadeTime | Durée fondu (frames) |
IsNTSC / IsAGA / IsFloppy | Type de machine |
Processor | CPU détecté (M68000, M68020…) |
ChipRam / OtherRam | Mémoire disponible (octets) |
Block_X/Y | Pointeur block courant (coord. tuile) |
Block_Type | Type block sous Block_X/Y |
EventTag | Tag dernier événement map |
MeleeTag / HurtTag | Tags attaque/hurt box |
Option | Option sélectionnée dans un menu panel |
Dice | Dé (SET=plage, GET=valeur) |
XRes / YRes | Résolution d’écran |
TileMask | Masque AND pour arrondir en tuiles (0xFFF0) |
True / False | -1 / 0 |
Handle_Collision | Forcer/ignorer une collision tuile |
Variables de l’acteur courant (préfixées actor_, player_, projectile_, new_)
| Variable | Description |
|---|---|
actor_x/y | Position |
actor_xspeed/yspeed | Vitesse |
actor_xfacing/yfacing | Orientation (-1, 0, 1) |
actor_lookdir | Direction de regard |
actor_animation | Animation courante |
actor_animationtag | Tag animation courante |
actor_animationflags | Flags animation |
actor_frame | Frame courante |
actor_isonplatform | Type plateforme sous l’acteur |
actor_ismoving | En mouvement ? |
actor_rendermode | Mode de rendu |
actor_timer | Frames avant expiration timer/yield |
actor_attackdelay | Frames avant prochaine attaque |
actor_tag / actor_type | Tag/type courant |
actor_uniqueid | ID unique |
actor_var1…actor_var6 | 6 variables génériques libres |
actor_var12f / actor_var12l | Fraction/Long utilisant var1+var2 |
actor_rotation | Rotation 0-359° |
actor_controlx/y | Direction joystick (-1, 0, 1) |
actor_controlfire/jump | État boutons Fire/Jump |
actor_controlbuttons/hitbuttons | Tous boutons |
actor_controller | Contrôleur assigné |
5.4 Expressions
Opérateurs
| Op. | Description | Exemple |
|---|---|---|
+ - * / | Arithmétique | 5 + 5 = 10 |
% | Modulo | 26 % 5 = 1 |
& | AND bit-à-bit | 3 & 1 = 1 |
| | OR bit-à-bit | 3 | 1 = 3 |
^ | XOR bit-à-bit | 3 ^ 1 = 2 |
>> | Décalage droite (/ puissance de 2) | 256 >> 4 = 16 |
<< | Décalage gauche (* puissance de 2) | 16 << 4 = 256 |
Types de données
| Type | Taille | Plage | Usage typique |
|---|---|---|---|
| Byte | 1 octet | -128 à 127 | Données compactes dans les tableaux |
| Word | 2 octets | -32 768 à 32 767 | Défaut – la plupart des variables |
| Long | 4 octets | ±2 147 483 648 | Scores élevés, grandes valeurs |
| Fraction | 4 octets | -32 768.0 à 32 767.0 | Positions sub-pixel (<1 px/frame) |
Points clés
- Pas d’ordre des opérations ! Tout est évalué de gauche à droite.
5 + 5 * 5 = 10 * 5 = 50 !! ATTENTION !! Réarrangeant : 5 * 5 + 5 = 30 Ou : 5 + (5 * 5) = 30 (parenthèses supportées depuis 2025, légèrement plus lent) - Toutes les variables sont signées (débordement possible).
- Expressions entières par défaut : ajoutez
.0ou.après le nom de variable pour une fraction. - Tableaux zero-indexed :
MyArray[0]= premier élément. - Look Up Tables : fichier texte une valeur par ligne, lecture seule, ne compte pas dans la mémoire des codeblocks Amiga.
6. Glossaire
Actor (Acteur) Objet de jeu : anime, se déplace, entre en collision. Sous-types : Attacker, Block Collider, Moving Platform, Player, Projectile. Animation Séquence de frames avec événements par frame (sons, melee, tirs). Le suffixe _r déclenche la génération automatique du miroir _l. Block Tuile dynamique échangeable au runtime. Plus performant qu’un acteur. Peut être animé, penté ou destructible. Codeblock Séquence de commandes compilées en ASM 68K. Configurées via menus déroulants. Map / Level Zone de gameplay en tuiles 16×16. Peut contenir Events, Paths, Templates. Map Event Zone rectangulaire déclenchant des codeblocks (entrée, interaction, séjour, sortie). Peut être téléporteur. Panel Image statique ou interactive (titre, game over, HUD, menu, dialogue, parallaxe). Eléments dynamiques : Bar, Counter, Digits, Text, Options, Talkpad. Recyclage Mise en veille d’acteurs hors caméra. Types : Always, Never, Trash, Default. Tag Catégorie logique. Un seul par élément. Testable dans des conditions pour grouper des acteurs, animations ou blocks. Tile / Tileset Tuile statique 16×16. Le tileset contient toutes les tuiles + leur configuration (solidité, pente…). Yield Attente non-bloquante sur N frames. Remplace le yield précédent si déclenché à nouveau.
7. Optimisations Amiga
Acteurs
- Activez Ghost Thru Walls (Fast) pour les objets sans collision mur.
- Minimisez la collbox (1×1) pour les balles traversant les murs.
- Désactivez Projectile si l’objet ne blesse pas les ennemis.
- Désactivez Block Collider si pas d’effet spécial blocks.
- Objets détruits en sortant : mode recyclage Trash.
- Ne mettez Never que si l’acteur doit être actif éloigné de la caméra.
- Acteur statique 16×16 ? Utilisez un Block.
- Utilisez On Platform Landed plutôt qu’un événement collision bas.
Animations
- Animation 1 frame fixe : délai = 0 (infini).
- Si les couleurs entrent dans la plage sprite : Auto Sprite ou Only Sprite.
- Désactivez Render Clearing pour les objets immobiles.
- Rendu sans masque (maskless) pour les objets de fond simples.
- Règle fondamentale Amiga : largeur non-multiple de 16 = aussi lent que le multiple supérieur.
17 px de large = deux fois plus lent que 16 px !
Code (Codeblocks)
Inlineplutôt queGosubpour les performances critiques.- En fin de OnTimer :
gotoouinlineplutôt quegosub. - Tags d’animation dans les conditions :
actor_animationtag == myanimplutôt que tester_let_rséparément. not zeroplutôt que== truepour les plateformes.Else Ifplutôt qu’une série deIf.- Décalages binaires :
<< 1= ×2,>> 1= ÷2. &et|bitwise pour les conditions multiples.
Réglages projet Amiga
- Palette 16 couleurs / 4 bitplanes – optimal. Les couleurs 16-31 restent disponibles via sprites.
- Couleur index 0 = noir (simplifie la copper list).
- Résolution d’écran minimale pour économiser le DMA.
- Désactivez Smooth Scrolling sur jeux purement verticaux ou statiques.
- Read CD32 buttons uniquement si utilisé.
- Buffer size : minimum tolérable (augmentez si glitches de bord).
AGA uniquement
- Sprites plus grands et plus nombreux.
- Fetch Mode au maximum (plus rapide, mais limitations de résolution).
8. Ressources et liens
Documentation officielle
- Wiki Scorpion Engine
- Tutoriel officiel
- Getting Started
- Autodocs (référence complète)
- Expressions
- Lifecycle
- Optimisations
- Recycling
- Glossaire
- FAQ
- Troubleshooting
- Cibles et émulateurs
- Annexes
- What is Scorpion Engine
Téléchargements
Communauté
Guide compilé depuis le Wiki officiel Scorpion Engine. Dernière mise à jour source : décembre 2025.