We created a traditional Puzzle-RPG engine in QBASIC. The entire engine is built on simple two and three dimensional arrays.
Each sprite is a two-dimensional 16x16 array. Sprites are stored in a three-dimensional array like, as I explained it to Maria, a stack of baseball cards. Our sprites are entirely original, created using a hand-coded sprite editor specifically for the QBASIC Screen 13 color palette and our unique 16x16 sprites.
Each map is also a simple two-dimensional 16x16 array that stores values to designate corresponding blocks. The "world" of the game is a three-dimensional 12x16x16 array of each map.
The map is rendered to the screen based on the player's position in the array. Array values change with movement of non-player characters, item pickups and drops, block pushing, and the spawning and killing of enemies (demogorgons, in this case). The player's position does not change, but the illusion of movement is created by shifting the map left, right, up, or down based on the player's position in the map array.
We elected not to use MIDI, MP3, or WAV for music and sound. Likely, the average IBM PC did not have a SoundBlaster sound card in 1984ish; my IBM PS/2 did not. Instead, we used only QB64's emulation of the PC speaker: one channel, primitive speaker tones. Maria (with help from her Mom, Sara) transposed most of the short music riffs from sheet music into QBASIC's "PLAY" command notes and scales.
We wanted to create an "open world" Metroidvania-style game, complete with secrets, Easter eggs, and power-ups. Although the levels are pretty much linear, you can navigate between them and states are saved when you enter and exit various levels.
Several classic games inspired our engine. Obviously, Atari's "Adventure" and the NES's Legend of Zelda were major sources of inspiration. However, other games such as Sokoban, the Adventures of Lolo, and even "The Goonies II" for the NES were sources of inspiration as well.