You can support the development on the Github Sponsors page.


An RPG game
made by Bruno Oliveira
uploaded by btco
download cartridge


Shadow Over the Twelve Lands
By Bruno Oliveira (@btco_code)

** UPDATE: PDF manual is here:

This is a retro CRPG game where you control a party of adventurers through an epic quest that starts out with a small mistake where you essentially doom the entire world to a decade of disasters. But worry not, because you are going to fix things now and defeat the great evil you unleashed upon the world.

It's turn-based, so you have as long as you want to think things through and even in the heat of battle our monsters are well trained to wait, seemingly forever, until you have taken your turn.

You start at the shores of Riverside with barely no equipment, a laughable budget and a desire for fame, fortune and making the world a better place. Let's see how this works out for you.

Printable world map:

This project is open source. The source code is at:

*** SAVEGAME WARNING: Depending on your browser, the save game feature might not work (known issue on Chrome)! To test that it's working, reload the page after the intro screen. If you see "Save OK" on the top left, savegames are working. In any case, if you are playing this seriously, consider downloading the cart and playing in the TIC-80 program.

arrow keys: move
[Z]: menu / confirm
[X]: cancel / close

At any time while adventuring you can bring up the game menu by pressing [Z] to allow you to: rest, cast spell, manage inventory and see detailed party info.

[ TIPS ]
0. To interact with things, just walk into them (huts, fountains, doors, etc, etc).
1. To rest, use food rations: press Z to open menu, select ITEMS, select the food ration, press Z and select USE.
2. Always carry plenty of food. Buy them in General Stores.
3. Always carry plenty of torches to light dark caves and dungeons. Also found in General Stores.
4. Upgrade equipment! You won't go very far with just a dagger and no armor.
5. Save at every opportunity. Fountains and inns allow you to save.
6. Beware of unidentified items. They may be cursed, explode, release poison gas, and all sorts of other bad effects. Plus, if you equip a cursed item, you won't be able to remove it.
7. When you get enough XP, go to a town to train to level up. You will know you have enough XP because the XP meter on the bottom right will be highlighted with an up arrow.

The game engine is 64K of Lua code but the core of the game's logic is written in XL, an assembly-like language I created, which assembles to bytecode that gets put into the cart's Map memory banks (banks 6 and 7). You can look at the XL source code in . It looks something like this:

TEST GM_R_MYRA; JNZ .quest_r
TEST GM_C_MYRA; JNZ .quest_c
SND 251 .old_wiz .quest_msg
SND 251 .old_wiz .quest_msg2
SND 0 0 .quest_narr

The assembler that takes that and converts to bytecode is in . The VM that runs this is in



This is very cool, I love how well the 3D effect works. Reminds me of the first final fantasy, too


Thanks! Yeah, I made the 3D engine myself, it's very basic: just floors, walls and sprites. All textures are 16x16 pixels, which creates this retro look (and conserves the very limited texture memory).


Btco this game is awesome!


Thank you!


Just pushed a quick patch making the first dungeon a little bit easier.


This is actually pretty impressive, with story and all. The elder scrolls of tic80


Thank you! I never played Elder Scrolls, but my main sources of inspiration were the CRPGs of the early 90s, like Eye of the Beholder, Might and Magic, etc.


I played entirely too many of this kind of game back in the 90s. (Or at least, this was my mother's assessment.)

I love this game! I was hooked from the moment I read "Or perhaps you will just die pathetically on that first battle that was supposed to be easy".


wow this is a masterpiece among TIC80 games! Very well done!


Thank you! :)


hi , amazing game , i havea question. you update both version of your game, here and github ? i want translate the game and the manual to my language.


Hey! I think the best way is to work with the github version. Most of the game strings are in the virtual machine memory (XL) encoded in map 6 and 7. For instance, this is the jail level:

After modifying XL files you can rebuild the cart by running the script. It will call the XL assembler to reassemble the XL files into bytecode and encode them into the cartridge. Thanks!


change of plans, this is too advanced for me, I thought it would only be a text file T_T


Yeah, the format is a bit annoying to work with, sorry about that! What language did you want to translate it to?


Ha! This is on an entirely new level! You invented a language just to get more out of (or into) the TIC! Impressive! And still it makes great use of the map editor. I see you are very much into compressing big stuff into little containers. Was XL invented solely for this game, or is there any other use?

Not to mention, the story seems great! Even though I died. After 10 years in prison. Walking around and around. But it was with a grin on my face. :D


I invented XL solely for this purpose :) I'm not using it in any other projects.




I speak Spanish, maybe I can try to translate :)


oh my god , please ! thank you so much!


@TaniaDevil lmao, hahaha!


Amazing, fun and a really good story


Very good game!
It remembers me of both Dungeon Master(For the rendering) and the two Ultima Underworlds(For the items). I'm surprised it all fits in a TIC-80 cart!
Just a small bug report: Drinking an invisibility potion keeps crashing the game...
...Aand just a small suggestion, though you probably already thought of it: When the player advances, the ground tiles should flip/rotate/something else of the kind. This way, when walking down a path the ground won't look still ;).
(OK, I must admit, I was really panicked when I was put in jail: "Oh, this is infamous! I'm gonna die and I'll have to restart the game...")


Amazing game, mate. Im impressed. Nevertheless, seems that I've found a bug. Whenever you enter the ice maze again after receiving the ring, you get again the gold and experience, so you can enter many times ending any money problem...

Thanks a lot. Arrebentou, irmao. Meus sinceros parabens.


Ahhhh, good catch! For those who are curious, this bug is in line 105 in the Ice Maze module.
In Line 43 the code does correctly check if the player has the ring:
However, sadly, it executes a jump to L81 which proceeds unchecked to L105 where the bug is. There should have been an additional check before writing to the award memory address.


did not expect this game to have so much depth, it's super cool!


Thank you! I was planning to do it in a month but in the end it took me almost a year to make :-)


Amazing! The perfect RPG. I really enjoy this game :D


I removed the cartridge while it was saving it won't load what will I do?


I love this! I loved eye of the beholder, this really takes me back.


Yes! I love EOB, Might and Magic 4 & 5 (World of Xeen), etc. That's the atmosphere I wanted to create. Thanks for playing!


I love this game :)


My favorite childhood game was Elvira II. I had no idea that I still enjoy grid crawlers so much. I loved the writing and walking around this world and just right difficulty (ok maybe a bit too easy). Complaints: 1. I only see the monster name when it's attacking. monster graphics aren't too helpful either, there should be monster name displayed when I'm targeting. 2. Why can't paladin use Battle Hammer? The description should give stats and who can use given item. 3. Exploit: Each time you teleport out of Ice Maze you get GP and Exp. 4. The game once crashed when I saved at the dungeon south of Sun Port. 'n2' [string "--title: Shadow Over the Twelve Lands..."]:1851: in function 'c1' [string "-- title: Shadow Over Twelve Lands..."]:1859: in function 'R8'
[string "--title:Shadow over the Twelve Lands..."]:122: in function 'z9' [string "--title: Shadow Over the Twelve Lands..."] 182: in function 'A6' [string "-- title: Shadow Over the Twelve Lands..."]661: in function 'g4' [string "-- title: Shadow Over the Twelve Lands..."]641: in function 'G0' [string "-- title: Shadow Over the Twelve Lands..."]:599: in function 'TIC'


@EliasWolf: hey! (I'm Brazilian too btw). Yes, it would be great to have a pt-BR translation but sadly the code if very hard to modify because it has a virtual machine that runs bytecode, I use my own assembler, etc. The source is here: So translating would require changing everything in the Lua files, and also everything in the XL files, reassembling the bytecode and regenerating the cart. Which is why I'm postponing it :-)


@Jedreck: Thank you! Yes, the monster name should definitely show, I'll consider it when I do an update. And the ice maze exploit is indeed a bug (see comment #2561 above for a technical explanation of why it happens, if you're interested in such things).

Thanks for playing the game!


Posted an issue that affecting some games in the libretro version of TIC-80 and got this comment about a possible code fix:


Absolutely phenomenal. I played it all the way through in one day. The story was good, and funny. The difficulty balance was perfect. The breadth of items. The world map. The manual. All of this is gold.
One glitch: the game crashed a few times when trying to save at a particular save point in one of the dungeons, but I forgot to write down which one it was and that was many hours ago, so... ¯\_(ツ)_/¯


Jogo incrível!!! Acabei de fazer os 2 finais, também sou fan de dungeon crawler, ainda mais quando parece com o Might and Magic 4 que é meu favorito junto com o Eye of the Beholder. :D


Eu achei um possível bug, quando você fala com o fantasma do Ice Maze, ele te teleporta para fora, mas ainda é possível voltar e pegar mais exp e gold.


Wait... are you supposed to get through the swamp taking damage every move and dealing with the encounters? Or did I miss something important somewhere??


Well... nevermind! Now I'm figuring out where the king's sword is...


Well well well... What an absolutely amazing and impressive game! It blew my mind... I give it a solid 11/10, maybe even higher. I mean, there was very few parts that frustrated me... only one really! This game was incredible, massive, and took me, what... 36ish hours to beat?? It's fun, captivating, and has a lot of playtime, is what I'm saying... I'll have to revisit this in the future, I don't regret revisiting it this time one bit!


Thank you so much for your kind words! I had tons of fun making this game and I'm glad it was fun to play as well! Did you get the good ending or the evil ending?


I know I'm a little too late, but nice game. I'm new to the TIC 80 but this is impressive

Post comment