# Actualització adaptativa de patrons

L'actualització adaptativa de patrons és una tècnica gràfica per ordinador per a videojocs 2D de desplaçament lateral. Va ser utilitzat més popularment per John Carmack a id Software en jocs com Commander Keen per compensar el baix rendiment gràfic de les PC a principis dels anys noranta. La seva principal innovació és un ús nou de diverses funcions de maquinari EGA per realitzar el desplaçament. La tècnica també fa el seguiment d'elements gràfics moguts per tal de minimitzar la quantitat de redibuix necessaris en cada fotograma. La combinació d'aquests dos aspectes estalvia el temps de processament que seria necessari per tornar a dibuixar tota la pantalla. Carmack va dissenyar el motor de desplaçament de pantalla amb imatges grans dels anys setanta.
Com que CGA (la generació anterior de maquinari gràfic de PC) no té funcions per desplaçar-se pel maquinari, el desplaçament prèviament s'havia de fer mitjançant programari, redibuixant tota la pantalla per a cada fotograma, una tasca a la qual els PC de l'època no tenien prou rendiment. L'actualització de patrons adaptativa minimitza la potència de càlcul necessària per als jocs de desplaçament lateral a l'abast del maquinari disponible. Això funciona marcant els patrons de mapa de bits i redibuixant només els gràfics de la pantalla que actualitzen realment.

## Història

L'actualització de patrons adaptatiu mitjançant desplaçament per maquinari va fer la seva primera aparició en un joc de prova inèdit anomenat Dangerous Dave in Copyright Infringement, implementat per Carmack. El títol de "Dangerous Dave" havia estat utilitzat prèviament per John Romero mentre programava jocs per a Softdisk. El nou joc era una recreació del primer nivell de Super Mario Bros. 3 de Nintendo pensat com a banc de proves realista per al concepte d'actualització de patrons adaptatiu, i es va desenvolupar en una setmana. L'equip de futurs empleats de ID Software, que encara treballava per a Softdisk, va recrear tot el joc de Mario amb l'esperança que Nintendo donés la llicència del joc per a PC. Nintendo va rebutjar l'oferta de llançar el joc després que ID Software ho acabés.
La primera aparició al mercat de l'actualització adaptativa de patrons de Carmack va ser a la primera entrega de ID Software de la sèrie de jocs Commander Keen, Marooned on Mars.

## Detalls tècnics

L'EGA té diverses funcions que permeten l'efecte d'actualització de patrons adaptatiu:
* La memòria intermèdia de pantalla pot ser una mica més ampla que la pantalla i arbitràriament més alta, subjecte a limitacions de memòria de vídeo.
* La posició dins d'aquesta memòria intermèdia des d'on es dibuixa la pantalla es pot ajustar amb increments d'1 píxel, ja sigui horitzontalment o verticalment.
* Té prou memòria de vídeo per emmagatzemar dues memòries intermèdies, i encara li queda espai per a patrons i sprites.
Carmack va utilitzar aquestes funcions per crear una memòria intermèdia que fos 64 píxels més ampla i alta que la pantalla, deixant espai per a dues files i columnes de patrons addicionals a la memòria intermèdia que hi ha al marge de la pantalla. Va utilitzar les funcions de desplaçament de la targeta per desplaçar la pantalla a través de la memòria intermèdia per a un moviment suau, que mostra parcialment els patrons addicionals.
El desplaçament es limita a la mida de la memòria intermèdia i es desplaça per mostrar dades de l'altre costat de la memòria intermèdia. Per tant, per desplaçar-se a tot un nivell, quan el desplaçament equival al valor de tot un patró, el codi de Carmack dibuixa la següent fila de patrons del nivell a la memòria intermèdia, just a la vora de la pantalla, a punt per mostrar-se quan el desplaçament continua en aquesta direcció.
Però com que només es redibuixen les vores de la pantalla en qualsevol moment, els sprites del nivell no es tornen a dibuixar fins que no arriben a la vora de la pantalla. Per contrarestar-ho, el codi calcula quins patrons havia cobert anteriorment un sprite en moviment i les torna a dibuixar per esborrar la anterior imatge de sprite i, a continuació, dibuixa la nova imatge de sprite en la nova posició. Això permet animar els sprites independentment del desplaçament amb un mínim esforç computacional.
Com que moure un sprite d'aquesta manera implica primer esborrar-lo i després tornar-lo a dibuixar, la imatge del sprite esborrat pot ser visible breument, provocant parpelleig. La part final de la tècnica de Carmack és l'ús de les mateixes funcions de maquinari EGA que s'utilitzen per desplaçar-se per implementar també un doble buffer: configurar un segon buffer on es pugui dibuixar el codi mentre es mostra el primer buffer a la pantalla, que després es canvia durant l'actualització de la pantalla. Això garanteix que mai es mostri cap marc al mig del dibuix, cosa que proporciona una animació suau i sense pampalluga.

## Referències

* ↑ Kushner, David. «The Video Game Software Wizardry of Id». IEEE Spectrum, 01-08-2002.
* ↑ Aycock, John. Retrogame Archeology: Exploring Old Computer Games (en anglès). Springer, 9 maig 2016, p. 45. DOI 10.1007/978-3-319-30004-7. ISBN 978-3-319-30004-7.
* ↑ Super Mario Bros. 3 Demo (1990). John Romero. 1990.
* ↑ Orland, Kyle. «Here's what id Software's PC port of Mario 3 could have looked like». Ars Technica, 14-12-2015.
* ↑ Kushner, David. Masters of Doom: how two guys created an empire and transformed pop culture. New York, NY: Random House, Inc, 2004. ISBN 9780375505249. OCLC 50129329.