game boy advance · demo · v0.44.0game boy advance · demo · v0.44.0
VECTOR
Un omaggio a Portal per Game Boy Advance, scritto da zero. La pistola non spara colpi ma varchi, due, uno caldo e uno freddo, e si aprono solo sui pannelli chiari. Entri in uno, esci dall'altro, e la velocità non si perde: cadi da in alto e ne esci sparato. Dodici camere in due metà, e la seconda è lo stesso impianto anni dopo. A tribute to Portal for the Game Boy Advance, built from scratch. The gun doesn't fire bullets but portals, two of them, one warm and one cold, and they only stick to the pale panels. Go in one, come out of the other, and keep your speed: fall from high up and you come out fast. Twelve rooms in two halves, and the second is the same facility years later.

illustrazione di copertina, non una schermata di gioco: il GBA ha sedici colori per tavolozza e 240×160 punti. Le schermate vere sono qui sotto. cover illustration, not a screenshot: the GBA has sixteen colours per palette and 240×160 pixels. The real screens are below.
Cos'èWhat it is
È una demo, e mi interessa dirlo prima di tutto il resto: le camere fatte finora servivano a fare amicizia con il processore di questa macchina e a vedere cosa saltava fuori. Non è un gioco finito e non finge di esserlo, e alla fine c'è una schermata che lo dice: le camere cresceranno, quelle che ci sono adesso sono l'inizio.
It's a demo, and I want that said before anything else: the rooms built so far were what it took to get on speaking terms with this machine's processor and see what came out. It isn't a finished game and doesn't pretend to be one: the rooms will grow, the ones here now are the beginning.
Non è un porting e non usa niente dell'originale: è la stessa idea, due varchi collegati e la velocità che ci passa attraverso senza perdersi, portata dentro i vincoli di una macchina del 2001. Duecentoquaranta punti per centosessanta, sedici colori per tavolozza, e tutto quello che si vede disegnato punto per punto: le pareti, il vapore che esce dalle prese d'aria, i coni di luce delle lampade, i tubi al neon attorno alle soglie.
It's not a port and it uses nothing from the original: it's the same idea, two linked portals and speed carried through them intact, brought inside the constraints of a machine from 2001. Two hundred and forty pixels by a hundred and sixty, sixteen colours per palette, and everything you see drawn point by point: the walls, the steam from the air vents, the cones of light from the lamps, the neon tubes around the doorways.
niente bitmap. solo codiceno bitmaps. just code
Le camereThe rooms
Ognuna insegna una cosa sola, e la chiede una volta sola. Poi si apre sulla successiva. Il gioco è diviso in due metà, e la seconda è lo stesso posto, anni dopo. Queste sono le camere costruite finora: ne arriveranno altre, e il numero non è il punto. Each one teaches a single thing, and asks for it once. Then it opens onto the next. The game is split in two halves, and the second one is the same place, years later. These are the rooms built so far: more are coming, and the count isn't the point.

Qui funziona ancora tuttoEverything still works here
Le porte si aprono, l'acqua scorre, le macchine aspettano ordini. Sei camere per imparare le regole: camminare, i varchi, il cubo sul pulsante, la torretta, il raggio, le macchine. The doors open, the water runs, the machines wait for orders. Six rooms to learn the rules: walking, the portals, the cube on the button, the turret, the beam, the machines.

Lo stesso posto, anni dopoThe same place, years later
Muri crollati, muschio ed edera sopra il cemento, luce del giorno dai buchi. Si riconosce, ed è questo il punto: non è un mondo nuovo, è quello di prima lasciato andare. Collapsed walls, moss and vines over the concrete, daylight through the holes. You recognise it, and that's the point: it isn't a new world, it's the earlier one left to go.
Nella seconda metà ci sono tre cose che nella prima non esistono. In the second half there are three things that don't exist in the first.
- il vetroglass ferma te, non i tuoi varchistops you, not your portals
- le sentinelle da paretewall sentries si abbattono solo tirandogli un cuboonly destroyed by throwing a cube
- le consolleconsoles guidi una macchina che vedi solo attraverso il vetrodrive a machine you can only watch through glass

LA TORRE, l'ultima camera: 30 blocchi per 20, la prima del gioco più alta dello schermo. Uno scarico in cima versa una cascata che attraversa tutti e due i piani, e per gran parte della stanza è l'unica cosa che si veda da entrambi. THE TOWER, the last room: 30 blocks by 20, the first in the game taller than the screen. A drain at the top pours a waterfall crossing both floors, and for most of the room it's the only thing visible from both.

ogni camera è larga due schermi, quindi entrando metà stanza ti resta dietro. Prima di restituirti i comandi la telecamera va a vedere il fondo e torna: due secondi scarsi, e non si ripete quando muori. every room is two screens wide, so walking in leaves half of it behind you. Before handing you the controls the camera goes to see the far end and comes back: barely two seconds, and it doesn't replay when you die.
I comandiThe controls
Il testo del gioco è in inglese, ma i tasti sono questi.The game's text is in English, and these are the buttons.
- D-PAD camminawalk
- SUUP saltajump
- A / B varco arancione / varco bluorange portal / blue portal
- R prendi o posa il cubograb or drop the cube
- SIN o DES + RLEFT or RIGHT + R lancia il cubothrow the cube
- L tenuto premutoHOLD L mira a otto direzioniaim in eight directions
- SIN o DES sulla consolleLEFT or RIGHT on a console guida la macchinadrive the machine
Come è fattoHow it's built
Niente libreria standard e niente motore: il gioco scrive direttamente nei registri della macchina. memset è scritto a mano, tre righe, perché il compilatore ne ha bisogno e la libreria non c'è. E il processore non sa dividere, quindi ogni ciclo, ogni cadenza e ogni rampa è una potenza di due o un contatore che si riavvolge: una divisione con un numero qualunque diventerebbe una chiamata a una libreria che non esiste, e il programma non si collegherebbe più.
No standard library and no engine: the game writes straight into the machine's registers. memset is hand-written, three lines, because the compiler needs it and the library isn't there. And the processor can't divide, so every cycle, every cadence and every ramp is a power of two or a counter that wraps: a division by an arbitrary number would become a call into a library that doesn't exist, and the program would stop linking.
La grafica non è disegnata in un programma di disegno: è generata. Un gruppo di attrezzi in JavaScript produce le tessere, le tavolozze, le mappe e le tabelle come file C, che poi vengono compilati dentro la cartuccia. Le camere stanno in un file di testo, e c'è un editore che le fa vedere disegnate coi pezzi veri, con i coni di luce, la corsa dei raggi, il tragitto degli ascensori e l'arco del salto, e che al salvataggio ricompila la cartuccia.
The graphics aren't drawn in a paint program: they're generated. A set of JavaScript tools produces the tiles, palettes, maps and tables as C files, which are then compiled into the cartridge. The rooms live in a text file, and there's an editor that shows them drawn with the real game pieces, with the light cones, the beam runs, the lift travel and the jump arc, and that rebuilds the cartridge on save.

i sedici quadri del personaggio: otto di passo, tre di salto, cinque di mira. Le pose del passo non sono disegnate a mano, nascono da una curva. the character's sixteen frames: eight of walk, three of jump, five of aim. The walk poses aren't drawn by hand, they come from a curve.
- versioneversion 0.44.0
- macchinamachine Game Boy Advance · ARM7TDMI, 16,8 MHz
- schermoscreen 240 × 160, 15 bit di colore
- cartucciacartridge 293 KB
- camererooms 12 finora, in due metàso far, in two halves
- una corsa pulitaa clean run circa 2 minuti e 50about two minutes fifty
- quadri del personaggiocharacter frames 16
- scritto conbuilt with C · devkitARM · niente motore, niente librerieno engine, no libraries
Dietro le quinteBehind the scenes
Due dei muri sbattuti per arrivarci, raccontati per esteso: cosa succedeva, perché succedeva, e il codice che li ha risolti. Two of the walls I hit getting here, told in full: what was happening, why it was happening, and the code that fixed it.
La luce che faceva ombraThe light that cast a shadow
Il GBA non ha un motore di luci: ha un sommatore. Come fonde due strati, perché un cono marrone scurisce il muro invece di illuminarlo, e perché mettere gli sprite fra i bersagli li fonde tutti. The GBA has no lighting engine: it has an adder. How it blends two layers, why a brown cone darkens the wall instead of lighting it, and why putting sprites among the targets blends every one of them.
leggi →read →Compila, gira, e non funzionaIt compiles, it runs, it doesn't work
Una variabile che viveva in ROM, un ramo di codice scritto due volte, tessere che si pestano i piedi, edera che cresce dove non deve e memoria video che finisce senza avvisare. Cinque guasti che non danno nessun errore. A variable living in ROM, a branch of code written twice, tiles treading on each other, ivy growing where it shouldn't and video memory running out without warning. Five faults that raise no error at all.
leggi →read →L'omaggio, e cosa non èThe tribute, and what it isn't
VECTOR è un omaggio a Portal, della Valve. L'omaggio è dichiarato dentro al gioco stesso, nella pagina INFO, col nome dell'originale e di chi l'ha fatto: un omaggio che non nomina l'originale non è un omaggio.
VECTOR is a tribute to Portal, by Valve. The tribute is declared inside the game itself, on the INFO page, with the name of the original and of who made it: a tribute that doesn't name the original isn't a tribute.
Da Portal prende l'idea: due varchi collegati, la velocità che si conserva, le camere che insegnano una cosa per volta. Non prende niente di materiale: nessun disegno, nessun suono, nessuna musica, nessun testo, nessun personaggio, nessun nome. Non si chiama Portal, non usa il marchio, non usa i personaggi e non pretende di essere collegato alla Valve.
From Portal it takes the idea: two linked portals, speed preserved, rooms that teach one thing at a time. It takes nothing material: no art, no sound, no music, no text, no characters, no names. It isn't called Portal, it doesn't use the trademark, it doesn't use the characters and it doesn't claim any connection to Valve.
Portal e Valve sono marchi dei rispettivi proprietari. Game Boy Advance è un marchio Nintendo: VECTOR è un programma indipendente per quella macchina, non contiene codice Nintendo e non è approvato né sponsorizzato da Nintendo.
Portal and Valve are trademarks of their respective owners. Game Boy Advance is a Nintendo trademark: VECTOR is an independent program for that machine, it contains no Nintendo code and is neither approved nor sponsored by Nintendo.