Per la maggior parte delle piattaforme, è possibile scrivere sottosistemi che si allontanano dalle API specifiche utilizzate per richiamare e ottenere informazioni dalla piattaforma su cui si sta eseguendo. Le API IO sono in genere le più facili da astrarre: tutti i file system funzionano su alcuni presupposti piuttosto basilari sull'apertura, la chiusura e la lettura dei file, anche quando si tiene conto delle chiamate asincrone. Quindi hai i tuoi sistemi principali come la lettura dell'input del controller, l'interrogazione del tempo, l'accesso alla memoria e i thread primitivi, la maggior parte dei quali funzionano allo stesso modo.
Anche la grafica può essere astratta in larga misura, e in effetti lo sono nella maggior parte dei buoni motori. Ma devi imballare le cose "renderizzabili" in scatole nere in cui non ti è permesso sapere cosa sta succedendo al loro interno. Sai di avere una "cosa" che rendi in una particolare posizione nel mondo. Non sai come viene visualizzato, solo che lo è. E il livello di astrazione grafica si prende cura di tutti i dettagli per vederlo sullo schermo. Le pipeline di build specifiche della piattaforma raggruppano i dati grafici in modo tale che possano essere referenziati dal motore senza realmente sapere come sono rappresentati internamente.
Detto questo, tuttavia, quando si tratta di spedire effettivamente un gioco, ci sono alcune parti che non puoi semplicemente sottrarre. Sarebbe ridicolo pensare che potresti spedire lo stesso codice su iPhone come su 360 o PS3, in quanto i meccanismi di input, il modo di operare fondamentale e le funzionalità della piattaforma sono troppo diversi. Potresti creare un titolo di dimensioni iPhone su 360, ma dovrebbe limitare i suoi meccanismi di input solo a quelli che il 360 può supportare. Quindi, un cursore virtuale sullo schermo simula un dito ed eventualmente utilizza il joystick in cui viene utilizzato l'ingresso dell'accelerometro 3D.
Più sensatamente, parti del gioco possono essere scritte in modo riutilizzabile e i singoli moduli di codice possono essere trasferiti tra le piattaforme, anche se la maggior parte del titolo è diversa. Ad esempio, se hai una macchina a stati AI, non importa se è in esecuzione su 360, PC o iPhone. Il tuo gioco utilizzerà molti di questi componenti, e fintanto che sono stati progettati bene in modo che prendano input e output ben definiti, il resto di un gioco può essere avvolto attorno a loro, indipendentemente dalla piattaforma, ed evitare di doverli riscrivere componenti.
Questa riutilizzabilità è la chiave per uno sviluppo multipiattaforma, non alla ricerca di un motore adatto a tutte le dimensioni che funzioni su tutte le piattaforme. Anche se esistesse una cosa del genere, sarebbe così paralizzato dal dover lavorare con il minimo comune denominatore, non sarebbe molto utile fare giochi.