News: 11 March 2016 - Forum Rules
Current Moderators - DarkSol, KingMike, MathOnNapkins, Azkadellia, Danke

Author Topic: Ultima: Exodus (NES) --- Now released  (Read 19189 times)

Fox Cunning

  • Jr. Member
  • **
  • Posts: 75
  • Barrel-roller
    • View Profile
Ultima: Exodus (NES) --- Now released
« on: December 09, 2019, 12:22:43 pm »
Greetings.

I thought I'd share a hack I've been working on in the past week or so.
Ultima: Exodus on NES was definitely the best version of Ultima 3 back in the day, but still has its shortcomings. So I decided to do a QoL hack, but I will likely upgrade the graphics too.


Update 22 Feb. 2020


Version 1.00 has finally been released! http://www.romhacking.net/hacks/4949/



These are my goals, and my progress so far...

QoL:
  • [DONE] Allow using the Start button as well as Select to finish party creation
  • [DONE] Add an option to "set camp and save" when Start button is pressed (only allow camping outside of towns)
  • Don't allow monsters to attack diagonally, since the player can't While this would be easy to implement, it would allow cheap battle tactics
  • [DONE] During combat, allow another action after one has been cancelled via B button (still pass if B is pressed before selecting an action)
  • [DONE] Also, don't end turn when accidentally trying to cast spells with a non-caster, or opening the Tools menu when the character has nothing
  • [DONE] Reduce the duration of the screen flashes that happen when casting certain spells
  • [DONE] Make the "hit" sprite disappear more quickly to speed up combat
  • [DONE] Change NPC dialogue to better reflect the computer version and replace some useless banter with useful clues on how to progress the story
  • [WIP] Speed up the game engine. The NMI handler routine takes way too long
  • [DONE] Reduce the intro credits to two screens instead of five
  • [DONE] Improve and speed up enemy's combat AI
Gameplay changes:
  • [DONE] Allow the best character to try and disarm a trap in dungeons, instead of just testing the party leader
  • [DONE] Adjust the town maps so that they are not as redundant (e.g. duplicated shops / NPCs)
  • [DONE] Make horses useful (they allowed outrunning monsters in the computer versions)
  • [DONE] Fix the REPEL and UNDEAD spell behaviour, also make them more useful past level 2 but less overpowered
  • [DONE] Make enemy abilities more in line with the computer versions (e.g. Gargoyles and Manes should have magic attacks)
  • [DONE] Add some variety to loot chests by allowing weapons and armour to be found in addition to just gold
  • [DONE] Reintroduce enemies that were in the computer versions but not in the NES one
  • [DONE] Change the way Max MP is assigned depending on profession, to make casters other than Wizards and Clerics more useful
  • [DONE] Have different HP values depending on race and profession instead of it being the same for everyone
  • [DONE] Award attribute points to each profession's main stats upon levelling up
  • [DONE] Make loot scale with the level of the character who opens the chest
  • [DONE] Tweak HP/MP regeneration rate and food consumption
  • [DONE] Improve the enemy's battle AI
  • [DONE] Rebalance combat to make player characters more effective as they level up
GFX / UI improvements
  • [DONE] Change intro text palettes for smoother transition
  • [DONE] Change the text when a character is hit in battle so that it fits in the notification area at the bottom-right instead of being cut off
  • [DONE] During combat, add a marker next to the active character's name to indicate whose turn it is
  • [DONE] Also show what weapon is currently equipped when attacking, to avoid accidentally throwing your only dagger or wasting a turn trying to attack at range with a mace
  • [DONE] Replace status, gender and class letters with symbols (custom tiles, maybe replace unused Japanese characters)
  • [DONE] Replace health, magic and food letters with symbols
  • [DONE] Change "profession" graphics and palettes (e.g. status menu / character creation)
  • [DONE] Change all character / NPC sprites (maybe using Ultima IV ones)
  • [DONE] Allow NPC and monster graphics to use two different palettes (top sprites / bottom sprites)
  • [DONE] Restore Chuckles' jester outfit (he's wearing woman's clothes for some reason, but the ROM contains an unused jester sprite)
  • [DONE] Redo the "cutscenes" graphics (Lord British and Time Lord)
  • [DONE] Change fonts to something more fitting a fantasy game (something like the Pool of Radiance fonts)
  • [DONE] Upgrade all tiles
  • [DONE] Possibly add some new map tiles (e.g. different types of grass, ankh...)
  • [DONE] Upgrade dungeon graphics and allow a different palette for each dungeon
  • [DONE] Add character names on dialogue frames (if there is room for that in ROM)
  • Add some colour or graphics to the status screen There isn't much room left, and I prefer to use it for gameplay/QoL improvements
The UI can definitely use some love: the "party info" panel is unreadable, especially if your characters have 5-letter names.
Before:After:

I was initially thinking of including part of Ludmeister's excellent hack. As sadly I had no reply from him, I've started doing my own rebalancing.

********************** PROGRESS SCREENSHOTS *********************
Note that these are outdated and kept for historic reasons only!

Saving in the wilderness:Status screen:Battle UI (WIP):Weapon Display:
Dialogue UI:Dungeons:



I appreciate all comments, suggestions and criticism.
« Last Edit: February 22, 2020, 03:29:48 pm by Fox Cunning »

roney33

  • Jr. Member
  • **
  • Posts: 22
    • View Profile
Re: Ultima: Exodus (NES)
« Reply #1 on: December 09, 2019, 04:28:04 pm »
i sugest some tiles to add, a throne, a table, and a bridge use the same tile

Fox Cunning

  • Jr. Member
  • **
  • Posts: 75
  • Barrel-roller
    • View Profile
Re: Ultima: Exodus (NES)
« Reply #2 on: December 09, 2019, 06:41:37 pm »
I agree, the throne room looks like someone stacked up tables behind Lord British.
I was planning to add an ankh tile similar to this: which is the throne room in Ultima IV.

10/12 Update
Yesterday I found the tables with enemy encounters, the spellcasting routines, and the routines used to generate pseudo-random numbers.

I think I will fix the "Repel" and "Undead" spells next.
They have two main issues:
- Each can only be used against two types of enemies only, which are mostly encountered at lower levels.
Basically the spells are overpowered at lower levels, then become a waste of space in the magic menu.
- They are supposed to be random, to offset the fact that they cost no MP, but they don't use the RNG routines.
Instead they do an AND with a counter which is incremented once per vblank. The result is well known: this can be exploited to time the button press with the sprite animations and make the spell 100% successful.

So my plan for today is:
- Change the spell so that it can still one-hit kill low level monsters, but it can also do some damage to other types of enemies found at higher levels.
- Make both spells cost at least a bit of MP.
- Make either the success chance or effectiveness based on caster level and stats (INT for Repel, WIS for Undead).

This is going to take some extra space in ROM, but there should be enough at the end of the same bank where the spellcasting routines are.

11/12 Update
I've been looking into the "battle AI" routine, and it seems that the enemy's ability to attack diagonally is either unintended or the result of the developers running out of space in the last bank for a complete implementation.

Some values are written during enemy movement but never read, and the routine that decides if a target is in range only reads the sum of the X and Y distances.
Since bank #0 is already loaded when the evaluation happens, and that has relatively abundant free space, I may just write the extra battle AI there.

Or I may get rid of the code that allows enemies to steal stuff from the player (which is just annoying since stolen items can't be recovered or looted) and use that space instead...



In the meanwhile I found where the game stores NPC data for the current map, including the encoded address of the pattern for their sprites.
So here is Chuckles, restored to his normal clothes (I guess he was turned into a woman by mistake):

Now I just need to find where is the routine that reads that data from ROM.


12/12 Update
After further examination, the enemy's diagonal attack may have been left there intentionally.
In its absence, some really cheap tactics are possible: moving a character constantly left and right, enemies can never attack, other player characters can safely kill it with ranged attacks/magic.
Anyway, the distances are recalculated several times instead of using previously stored values, so I'll use that to speed up this routine a bit.

I've also found where the NPC data tables are stored for each location. I can permanently change Chuckles and see if there is room for extra features like NPC names/portraits etc.


16/12 Update
The town and world maps are stored in a very simple way, "packed" so that each byte represents two tiles.
4 bits per tile means only 16 tiles are available to use without drastically changing the map system.

In towns, there are two values that are never used, so I can add an Ankh tile as planned, and have space left for one alternative grass tile.
In the "overworld" maps there is some more room, might be worth adding more grass tiles since that's what most of the map is made of.
« Last Edit: December 16, 2019, 05:24:36 am by Fox Cunning »

Fox Cunning

  • Jr. Member
  • **
  • Posts: 75
  • Barrel-roller
    • View Profile
Re: Ultima: Exodus (NES)
« Reply #3 on: December 21, 2019, 08:22:02 pm »
I've been doing some graphical hacking, starting with character graphics and expanding the tileset for maps.
Changing the status screen required altering a bunch of subroutines, changing some tables in ROM and creating two new routines that took all but two bytes of the free space at the end of bank #13.

I created some tiles based on the sprites used for the tarots in U4, adapted to fit the 11 professions of U3 and the attribute restrictions of BG tiles.
Since they are a bit smaller than the original graphics, that saved me some room in ROM, and I had space on screen to show character names (previously, if you had two or more characters in the same class, they would all look the same and you wouldn't know who was who).

I've also changed the fonts to something more fantasy-looking (clearly inspired by the good old Gold Box games).

Finally I have something to show.


BEFORE:


AFTER:

coinilius

  • Jr. Member
  • **
  • Posts: 13
    • View Profile
Re: Ultima: Exodus (NES)
« Reply #4 on: December 22, 2019, 03:42:41 pm »
I'm just more of a lurker her normally, but I just wanted to comment and say that I have been following along with this project since you started and the work you are doing is really good to see.  The character art changes certainly create a different feel for the menu screens, and the ability to show names is a great addition.  Will you be modifying the overworld sprites as well?
« Last Edit: December 22, 2019, 11:05:42 pm by coinilius »

Fox Cunning

  • Jr. Member
  • **
  • Posts: 75
  • Barrel-roller
    • View Profile
Re: Ultima: Exodus (NES)
« Reply #5 on: December 23, 2019, 12:56:31 pm »
Thanks mate, it's always good to see that someone is interested in this hack, and in good old Ultima III.

Will you be modifying the overworld sprites as well?

Definitely! I'm working on the sprites/BG tiles too:


If I'm left with enough space in ROM, I'd like to add slight palette variations per town.

coinilius

  • Jr. Member
  • **
  • Posts: 13
    • View Profile
Re: Ultima: Exodus (NES)
« Reply #6 on: December 23, 2019, 04:13:46 pm »
The Ultima IV inspired approach looks good, and I like the idea of altering the town palettes a bit as well, especially if you do also alter the town layouts a bit too.  You've also really made that UI a lot more user-friendly, too!  It's great seeing a game like Ultima III get some attention, even more so when it is a complete overhaul like this!

Fox Cunning

  • Jr. Member
  • **
  • Posts: 75
  • Barrel-roller
    • View Profile
Re: Ultima: Exodus (NES)
« Reply #7 on: December 23, 2019, 07:05:22 pm »
Speaking of UI: just finished coding in the weapon display.
No more throwing daggers by mistake because you thought you had a bow equipped.


I had to do some bug fixing because my new routines messed up a check that required strict timing. All seems fine now.

coinilius

  • Jr. Member
  • **
  • Posts: 13
    • View Profile
Re: Ultima: Exodus (NES)
« Reply #8 on: December 23, 2019, 09:00:39 pm »
Nice work, these quality of life changes you are implementing will go a long way towards making the game more user friendly.  The new graphics you've implemented help too.

roney33

  • Jr. Member
  • **
  • Posts: 22
    • View Profile
Re: Ultima: Exodus (NES)
« Reply #9 on: December 25, 2019, 07:20:18 pm »
for watter, i sugest these graphics



« Last Edit: December 25, 2019, 07:26:15 pm by roney33 »

8.bit.fan

  • Sr. Member
  • ****
  • Posts: 311
    • View Profile
    • 8-bit fan's Hacking Projects
Re: Ultima: Exodus (NES)
« Reply #10 on: December 26, 2019, 01:57:26 am »
Hi there,
Just wanted to drop in and say great work on this!
Ultima is my favorite RPG series and I'd play the heck out of this on both the Apple II and NES. Nowadays I enjoy playing through it using Jeff Ludwig's New Exodus mode! :)

Keep up the great work! I'll be following this project. :) :thumbsup:

Cheers!! :beer:

8-bit fan
In the year of 200X, a super robot named Mega Man...
http://www.8bitfan.info/
FF4 Ultima Discord: https://discord.gg/4MqjwJt

Fox Cunning

  • Jr. Member
  • **
  • Posts: 75
  • Barrel-roller
    • View Profile
Re: Ultima: Exodus (NES)
« Reply #11 on: December 26, 2019, 01:00:40 pm »
for watter, i sugest these graphics
Those some really nice tilesets!

The game animates water by cycling its four patterns this way:
Code: [Select]
AB BA BA AB
CD CD DC DC

So here it is when I copy-paste from one of the above:


And this is using the water ripped from Ultima IV:


You can think of it as if it was shifting each row to the left alternatively, so I tried to use that to give a "wavy" effect creating my own water from scratch:


I won't pretend to be an artist: I'm a programmer and a hardware engineer so that's basically coder art, but it's the best I can do.



Hi there,
Just wanted to drop in and say great work on this!
Ultima is my favorite RPG series and I'd play the heck out of this on both the Apple II and NES. Nowadays I enjoy playing through it using Jeff Ludwig's New Exodus mode! :)

Keep up the great work! I'll be following this project. :) :thumbsup:

Cheers!! :beer:

8-bit fan

Cheers, mate! Your appreciation means a lot.

I played the computer version back in the day as the NES one was not available in Europe - I have imported a cart only recently, thanks Ebay!
Also played Jeff Ludwig's hack and it makes the game a lot more enjoyable for sure.
I am doing my own rebalancing based on many of his ideas, the base concept is that the game should incentivise the player to level up.



A little update now.

I've removed the "pre-made character" functionality. The pre-made characters sucked and the whole thing took almost a quarter of a ROM bank.
Now I have space for other much more needed functionality.
As a replacement for this, I am pre-generating four characters with decent stats straight into RAM, so players who don't want to hand-make their own still have a pre-made party.
To give some choice, I am storing compressed character data in ROM, then unpacking two random groups of melee and magic users in RAM when a new game is created.

Gameplay-wise, I've fixed the "Repel" and "Undead" spells so they now have a real random chance to succeed, which gets better the higher the required stat (INT for Repel and WIS for Undead).
« Last Edit: December 26, 2019, 01:15:53 pm by Fox Cunning »

coinilius

  • Jr. Member
  • **
  • Posts: 13
    • View Profile
Re: Ultima: Exodus (NES)
« Reply #12 on: December 26, 2019, 03:51:34 pm »
I like the look of the water tiles that you made, Fox, although it will be better to see how they animate in game.  It looks like you have captured a nice wave-like effect though.


Celice

  • Hero Member
  • *****
  • Posts: 646
    • View Profile
Re: Ultima: Exodus (NES)
« Reply #14 on: December 28, 2019, 01:17:04 am »
This is a really cool project. As a kid, I remember renting this once and trying to murder an old lady in a beginning town or something. The battle style and that scenario always stuck with me.

Looking forward to your updates!

Fox Cunning

  • Jr. Member
  • **
  • Posts: 75
  • Barrel-roller
    • View Profile
Re: Ultima: Exodus (NES)
« Reply #15 on: December 28, 2019, 11:11:05 am »
I've been working on the map lately, and it's starting to look more like what I want it to be:


However, working around its tile limitations is proving to be harder than I thought, and I'm only halfway through it.
Next steps are: hacking the routines that redraw a portion of the map that was "covered" by the UI, changing the impassibility of the new castle tiles, and moving the party to the middle castle tile when they walk on the sides, so that they can enter the castle from either side.

roney33

  • Jr. Member
  • **
  • Posts: 22
    • View Profile
Re: Ultima: Exodus (NES)
« Reply #16 on: December 28, 2019, 02:14:32 pm »
the batle on the boat, use the same tiles of the ground

Fox Cunning

  • Jr. Member
  • **
  • Posts: 75
  • Barrel-roller
    • View Profile
Re: Ultima: Exodus (NES)
« Reply #17 on: December 28, 2019, 04:10:13 pm »
Oh, I spoke too soon :( The bit I was using to extend the tileset for the castle is actually used for the rogue-like LOS effect, which would result in castles being always hidden or everything being always visible (and with the wrong palette).
Well, no big issue: I considered that change a minor addition.


the batle on the boat, use the same tiles of the ground
Good point, I hope I'll have some space left to add at least one or two "boat" tiles that replace regular floors for those battle maps.


Update

On a more positive note, adding an impassible "rocks" tile was a lot easier.


This can break the monotony of certain areas, and provide some more strategy in the overworld encounters, since enemies can't easily move around obstacles.
« Last Edit: December 28, 2019, 05:26:35 pm by Fox Cunning »

Googie

  • Hero Member
  • *****
  • Posts: 1020
  • I'd like to solve the puzzle... Jiggers!
    • View Profile
    • My work in progress ROM Hacking site
Re: Ultima: Exodus (NES)
« Reply #18 on: December 28, 2019, 06:09:09 pm »
This looks really cool, I dig it so far! :thumbsup:

Fox Cunning

  • Jr. Member
  • **
  • Posts: 75
  • Barrel-roller
    • View Profile
Re: Ultima: Exodus (NES)
« Reply #19 on: December 28, 2019, 09:00:11 pm »
Cheers guys, I appreciate all the interest and comments. Hopefully I'll have a pre-release version to test soon.

Since I can't sleep, here's another update to the character creation screen:


Markers to indicate the primary attribute(s) for the selected profession, and icons to represent each race/profession - since they will appear in game without text, so you don't need to guess what they represent.