Jump to content
IGNORED

Ultima V - WIP


Atlan_Roland

Recommended Posts

On 7/9/2023 at 10:15 PM, RobS said:

Hello, just wanted to hop in and offer my congratulations on the work and progress you have done with your version of U5 for the Atari. I am the one who did the "original" incomplete U5 back in the 90s. Those discs were never meant to get out in the public, but what can you do? The images must have gotten mixed in with others when I was doing physical-to-images for people. Anyway, my original attempt was not to make a complete game, but to make the framework/bones and sent to Origin to see if they would give me the job to do the conversion. It was never any official anything, I did it on my own, on spec. They sent me a nice refusal letter :) 

 

I haven't been on these forums in a while, owing to other life stuff and getting into modern game design with Unreal Engine. I was working on my own Ultima-like RPG a couple of years ago and had gotten some of the game built. I see some of the same or similar techniques you are doing, but I think there are a few other areas you can go to that might help. I will write more with some screenshots and code later to show what I had come up with. The big one I came up with was a sort of "VBI processor" that would execute on every VBI, so 60 times a second it would do 1 "thing" and that was managed by a list (mostly just jump addresses to routines.) I was able to do all the animations this way, and I was going to add in sound this way as well, so every "frame" it would do some animation, and then also the next frame of music. This way those are all "Free" and run mostly independent of the game.

 

I was using the 5 color Antic text mode, because I really needed that extra color to give me a decent palette, essentially white, black, green, blue, and orange that could stand in for red, yellow or orange, like for wood, fire, dirt etc. The real trick is doing the tiles with only 128 total characters, but I came up with some clever (I think) ways of reusing characters in various tiles. Swapping part of the character set depending on the environment (town, dungeon, etc) goes a long way toward economizing.

 

I'm including a couple of screenshots so you can get an idea of what mine would look like. I will post more if there is interest, maybe it will help give you some ideas.

 

Anyway, just wanted to (re)introduce myself and I look forward to seeing your future endeavors with this version.

 

 

Hello Rob!,

Sorry for my late answer – now that summer is over, kids in school again; I hope to continue on with my quest for a (colored) Atari Britannia!


Thank you very much for your posts & nice to hear from you! The famous Rob S. of Atari Ultima fame! 👍

 

When I re-discovered my Atari after decades & found Atariage about that time three years ago - your posts about your Atari U5 project where an exciting read and actually the inspiration for me to try do something like that too!
I first considered to continue on from your project assets; but then decided to started from scratch, mainly for the reason that I wanted an Ultima that would work natively with colors on my – European – PAL machine, which has no NTSC artifacting.

So I started to work on an Atari-ized UltimaV; which meant for me making use of color and the Display List/DLIs.

(Though re-implementing Ultima V sounds too much; i still don’t think it will ever be finished (by me), as it’s actually my ‘hello world’ program on the Atari and I’m just an average hobbyist programmer.

I would have been happy already to only get an interactive Britannia map viewer working, but as motivation held on I got more and more features implemented.
I guess if I would able to keep current pace up, in about ..10 years or so, it could eventually evolve into a game 😄
)

A great motivation boost came through @Zolaerla, who’s the author of the QuickMusic engine which I’m grateful to be able to use; he’s also the composer of the complete ‘Pokey-fied’ U5 soundtracks! (just that I was not able to integrate all songs yet, as some scenes – like ..ehm.. e.g. the main start screen - are not implemented yet. a shame.)

So for the technical part: I’m doing it in Mad Pascal (as a reminiscence to Turbo Pascal days); sprinkled with more and more 6502 assembly lately, as I get some hold on it.
Pascal is also great for prototyping (I guess like you Rob did with turbo Basic) and has the advantage that it compiles to real fast and compact code.

The map is done in bitmap mode, as I could not think of a way to get all the U5 tiles properly stuffed into 128 chars, even with DLI magic.
My tiles are of a 12x16 pixel size, and  yes I do miss a fifth color dearly.
What I’m doing now is some PAL-dithering (but works in NTSC quite ok too according to Altirra) with blue and brown to get some kind of white; also have a DLI color change in about the middle of a tile line (the blue is shifted from lighter to a darker hue) to make it look more interesting; and (mostly a future plan for now) PM colorization (like now the avatar tiles, frigatte when boarded, lighthouse, ..).

image.png.90438984f5de4172a3cb25d2fd2e1b58.png

An example of color use as described (screenshot of Altirra/PAL):
The DLI shift of the blue hue can be seen in the sea tiles; the grey of the lighthouse is actually dithered brown/blue.
PMs are in use for the lighthouse red fire on top; as for the Avatar red and while decoration, the Sun on top and the vertical borders are missiles.


 

I guess for the tileset graphics itself a lot of improvement is possible if an pixel artist would work on them, as mine now are mostly automated transformations form the MS-DOS tileset to my choosen 12x16 format.
 

For the (map)screen updates/animations I’m using a double buffer, and switch the mem.pointers in the DL when the drawing routines are done in the background buffer.

 

So what’s implemented by now:
The Britannia Map; all the 32x32 towne maps; LineOfSight (=Floodfill in U5); Day/Night cycles; light maps (from light sources like torches and such); NPC schedules; NPC conversations; NPC/object animations; signs(reading); some map/object interaction; some sound effect; transports (horse/skiff/frigate/magic carpet); overview map (gems); start of an z-stat/inventory view; k-limbing - if you get the grapple


A lot of time goes into optimizing code to save valuable RAM. But that’s actually fun too.
Btw, I’m using the RAMunderROM already and make use of extended PORTB memory (min. target is a 128K machine) to store data. It’s astonishing how many features Origin was able to pack into the 64K back in the day.


The next things I’ll probably tackle will be the items and a proper item/object system, integrated with the Z-stat inventory. And the moongates should be done too.
But part of the fun is to not have a strict plan, so we will see! 


Most knowledge about most U5 stuff data-wise I learned from this site: https://wiki.ultimacodex.com/wiki/Ultima_V_internal_formats
Without this compiled knowledge I would not have gotten far; so thanks go out to all these Ultima (wiki) contributors over the decades!


If the Atari would have a current (tile based) CRPG, I would probably not have started doing something crazy like my UltimaV mock up at all. Actually my first intention was just to play some ‘new’ RPG on the Atari  - but it seemed there is nothing out there, like e.g. Nox Archaist is for the Apple II.
I think it’s a genre missing here. So it would be great if work will some day continue on your ‘Roshar’ project. It looks gorgeous; 
and your VBI charset tile processor sounds intriguing.
But as I learned by myself, creating an CRPG  (and I’m only redoing something already created!) is a massive, time consuming thing.

I think in the long run – at least for my project - I’ll be lucky if others interested will eventually join in to make it a group effort. Guess that’s the key to give it a chance to get to a state of a finished game. (But first I‘ll have to tidy up my code or it will be embarrassing 😄 )


Whatever..  I’ll continue on and hope to have so more progress to show with time.
So long, thanks Rob for dropping in and commenting! 

PS: I’m sure there are some people who are eager to see more of you endeavors with your ‘new’ RPG project (me included)! 👍👍
👍

 

 

Edited by Atlan_Roland
  • Like 7
  • Thanks 1
Link to comment
Share on other sites

3 hours ago, Atlan_Roland said:

The map is done in bitmap mode, as I could not think of a way to get all the U5 tiles properly stuffed into 128 chars, even with DLI magic.
My tiles are of a 12x16 pixel size, and  yes I do miss a fifth color dearly.

There is a way. Not super easy, but working - you can emulate bitmap mode with char mode. This is generally done for fast scrolling, but adding the 5th color is a worthy goal.

how to do it the easy way:

- say you have 40x24 characters screen (160x192 pixels).
- reserve 8 KiB for 8 separate character sets

- do a regular char mode screen with 24 lines.

- switch to a new character set every 3 char lines (in a DLI that you already have)

in regular video memory put something like 

.dta 0,1,2,3,..., 39

.dta 40,41,42,...,79

.dta 80,81,82,..., 119

(120 characters in 3 lines).

Repeat it 8 times.

 

 

Now all you need to do is to modify the routines pushing data to the screen to push the data to appropriate places in the character sets.

 

You are losing 8*8 bytes per 3 lines, but it is generally a small price to pay.

 

The next level is to rearrange the video memory bytes to better suit your needs and speed up soft-sprite routines. You also have these additional 8 chars that could be used for some purpose (normally these are scroll buffers and such).

 

And now you can sprinkle the video ram with high bits set for the 5th color. 

  • Like 6
Link to comment
Share on other sites

13 hours ago, pirx said:

There is a way. Not super easy, but working - you can emulate bitmap mode with char mode. This is generally done for fast scrolling, but adding the 5th color is a worthy goal.

how to do it the easy way:

- say you have 40x24 characters screen (160x192 pixels).
- reserve 8 KiB for 8 separate character sets

- do a regular char mode screen with 24 lines.

- switch to a new character set every 3 char lines (in a DLI that you already have)

in regular video memory put something like 

.dta 0,1,2,3,..., 39

.dta 40,41,42,...,79

.dta 80,81,82,..., 119

(120 characters in 3 lines).

Repeat it 8 times.

 

 

Now all you need to do is to modify the routines pushing data to the screen to push the data to appropriate places in the character sets.

 

You are losing 8*8 bytes per 3 lines, but it is generally a small price to pay.

 

The next level is to rearrange the video memory bytes to better suit your needs and speed up soft-sprite routines. You also have these additional 8 chars that could be used for some purpose (normally these are scroll buffers and such).

 

And now you can sprinkle the video ram with high bits set for the 5th color. 

..thinking about it, actually yes of course!

I dont know why, somehow i wrongly thought that only three DLI char-set changes are possible; but a quick check with G2F rshows that there is no such limit!

 

Problems may arise from a lot of SIO disk loading (which happen alot); as the screen falls apart with DLI off. The other problem is that i will have to redesign the rendering processes completely, wich means even more time will be run into it..  🥴

But it's a very intriguing option! Thanks for your input!!

 

Link to comment
Share on other sites

2 hours ago, Atlan_Roland said:

I dont know why, somehow i wrongly thought that only three DLI char-set changes are possible; but a quick check with G2F rshows that there is no such limit!

In Optimizing mode, Graph2Font defines the screen image in as few character sets as possible. Less-complex images can require as few as a single character set, etc. In Standard mode, the screen is laid out just as @pirx defined it; but will differ depending on which screen width is needed: narrow = 1 char set every 4 lines, normal = 1 char set every 3 lines, wide = 1 char set every 2 lines. 

Link to comment
Share on other sites

11 hours ago, Atlan_Roland said:

..thinking about it, actually yes of course!

I dont know why, somehow i wrongly thought that only three DLI char-set changes are possible; but a quick check with G2F rshows that there is no such limit!

 

Problems may arise from a lot of SIO disk loading (which happen alot); as the screen falls apart with DLI off. The other problem is that i will have to redesign the rendering processes completely, wich means even more time will be run into it..  🥴

But it's a very intriguing option! Thanks for your input!!

 

 

It might be worth having a "loading" Display List to use where the view port is blanked out and just says "Loading..." or the like, at least for entering/leaving locations. While walking around outside, it'll always be a problem because blanking the screen on loading the next segment will be a bit jarring.

 

Link to comment
Share on other sites

"Now all you need to do is to modify the routines pushing data to the screen to push the data to appropriate places in the character sets.

 

You are losing 8*8 bytes per 3 lines, but it is generally a small price to pay.

 

The next level is to rearrange the video memory bytes to better suit your needs and speed up soft-sprite routines. You also have these additional 8 chars that could be used for some purpose (normally these are scroll buffers and such).

 

And now you can sprinkle the video ram with high bits set for the 5th color. "

 

I considered this method and similar ones and decided for now they were too complicated to implement and track everything. But I did come up with a partial use of this, where I have multiple char sets in memory and move portions in blocks into the main c-set for things like a town, dungeon, etc. This extends greatly the variety of tiles that can be made.

 

The other trick to go along with this is to meticulously arrange the main c-set so that it is in sections that you move in and out. So for instance, the first 35 or so chars are all universal and never get swapped. So like the chars for water, grass, trees, etc. Basically the main environment tiles. This allows uniformity on all maps since most maps/areas would use some of these.

 

The very last block of chars in the c-set are reserved for swappable tiles for the actual characters (the onscreen tile pieces for like the monsters, npc, etc). Of course, with such a limited cset you can only have 4 or 5 unique chars per town/dungeon, but they could also be swapped on the fly once you dispatch a particular monster. So it would give the illusion that there are dozens of monsters, just not on screen all at one time.

 

With these, I can make different types of maps. If you can see the screenshots, these are some of my test town and dungeon maps. I also have it set up that any of the locales can be any X by Y size. That last one for instance is supposed to be a mine or dungeon 128 tiles wide and 16 high.

townedit1.jpg

townedit2.jpg

townedit3.jpg

  • Like 13
Link to comment
Share on other sites

The images in the previous post are of my custom map editor. I also use the same editor to edit the 4 characters for each tile. The map scrolls so you can move around like a "real" editor. The tiles that can be selected are on the right hand side, but only 32 at a time, so you have to "page" through them to get to the right area of the tiles you want. It's very "hacky" and only suitable for internal use as it has zero polish or code to catch bad inputs and so on.

 

The real trick to optimizing the set is to try get anything at all into an 8x8 character, and in a shape that can be used for other things. So the grass is 2 characters in a 4-character tile, but the top and bottom 2 are reversed, so it isn't too repetitive. The wall sconces only need 4 total characters to be able to make 2 full tiles of torches, and the flame element (1 char) can be reused anywhere flame is needed.

 

As for colors, we get 5. You also have to pick and plan these carefully. I chose mostly primary colors except red. Red on the 8-bits doesnt look very good - usually too dark and not vibrant enough. I went with a medium orange so it could work as wood, fire, brick, planks, decking, bridge, barrels, doors, tables, chairs, trees, and especially dirt as seen in the 3rd image. That lets me have other environment types too - tundra (white "grass" since green and white flip for each other, same character! just high bit and now its "snow") and arid (dirt). Having the dirt also let me do roads, which are costly since you need 6 chars to do all the corners and straight pieces but since that is only on the world map (so far, might be able to use it in a rustic village if you leave out other tiles/chars) there is enough room to include them and it makes the world map look so much more interesting.

 

Since the high bit of any char flips the 5th color, I went with white and green, since those 2 colors seemed to be the least used within a single character. They are more effectively paired with other colors than each other. You can get around that partially by careful design of the chars so you put a green char next to a white one.

 

Of course, the biggest drawback is you do not get the full hi-res 320 pixel addressable, you are stuck with "Fat" 160 pixels, which does suck for certain fine detail, but its a trade off for the other benefits.

Edited by RobS
added line
  • Like 7
Link to comment
Share on other sites

  • 3 months later...

I just want to let you know that this looks amazing. Thank you guys so much for developing this. I just got back into Ultima after 2 decades and lost my mind when I saw that the Atari 800 was getting the version Ultima it deserved. I have a couple questions:

1: Is there going to be a music soundtrack on this version. I remember Ultima IV didn't have sound for some reason. 

2. Would I require a modded 800xl to run this when finished. Something like an u1mb?

 

  • Like 1
Link to comment
Share on other sites

6 minutes ago, MajorSetback said:

I just want to let you know that this looks amazing. Thank you guys so much for developing this. I just got back into Ultima after 2 decades and lost my mind when I saw that the Atari 800 was getting the version Ultima it deserved. I have a couple questions:

1: Is there going to be a music soundtrack on this version. I remember Ultima IV didn't have sound for some reason. 

2. Would I require a modded 800xl to run this when finished. Something like an u1mb?

 

Wasn't Ultima IV missing the music on the Atari due to the 800 only having 48kb of RAM?  I wonder if we could get MIDI music... one of these days I should hook up the midi hardware I picked up ages ago...

  • Like 2
Link to comment
Share on other sites

@MajorSetback  if you read the first post and the readme file the author provides, the min requirement is as follows:

 

Requirements: 
-------------
- 128KB of RAM minimum (Rambo/U1MB/...). 
  More RAM is fine (256KB/320KB/512KB/...) but makes no difference (yet).

- Joystick is supported but not necessary for movement.

- Double density disk drive or compatible device 
  (SIO2SD/Fujinet/SIDE2 or SIDE3 w/ U1MB/SDrive/...)

 

The install process creates disk images (either 2 x 180k or a single 320k).

 

So this would run on a stock 130xe (128k)  with the aforementioned mediums to run the atr's/disks. It won't run on stock 800 machines (48k), but would for those upgraded to 1mb (ie incognito or other 1mb upgrades). If you have a stock 800xl you can relatively easily upgrade it to 256k via the rambo xl mod (a whole lot easier if your machine is fully socketed).  Or by an external plugin ram module like this 320k one:

 

https://www.tindie.com/products/5cfab/320k-memory-upgrade-for-the-atari-xl-computers/

 

 

 

 

  • Like 2
Link to comment
Share on other sites

13 hours ago, Beeblebrox said:

@MajorSetback

...
If you have a stock 800xl you can relatively easily upgrade it to 256k via the rambo xl mod (a whole lot easier if your machine is fully socketed).  Or by an external plugin ram module like this 320k one:

https://www.tindie.com/products/5cfab/320k-memory-upgrade-for-the-atari-xl-computers/

Or you can use AVGCART/SUBCART with SIO and PBI cables.

Link to comment
Share on other sites

Hi,

just uploaded a new WIP build, available at the first post.

The new features:

  • Moongates implemented.

    For now they let you teleport to a random Moongate,for it's a nice way to do some sightseeing in Britannia. 
    (Future revision will implement the moonphase logic for traveling)
    Moonstones are also implemented.(Dig up the moonstone at the location of the gate during the day and replant it somewhere else)

  • Items and item handling implemented.

    There are 120 searchable items (including the 8 moonstones) hidden around the game,

    or you can also receive items in the course of conversations with NPCs.

  • 'U'-se <ITEM>:  Items in your inventory can be used.
    The 'U'se command will bring up your invetory where you can select an item.
    For some special items the use logic has been implemented. (No weapons/armour handling yet though)    
     
  • Optional support of additional RAM (>128KB): If additional RAM is detected, it's used as a chache    for already loaded Towne maps and Britannia map chunks.
    This makes traveling around Britannia a smoother experience.

  • Some more 'special behaviours' implemented 
    Things that are not data driven but are only done in code)
     
  • Tons of Bugfixes, again.

 

So this my premature christmas release!  Still a very long way to go for a game tough..

 

Have fun in Britannia! Cheers!

 

  • Like 13
  • Thanks 6
Link to comment
Share on other sites

21 hours ago, MajorSetback said:

I just want to let you know that this looks amazing. Thank you guys so much for developing this. I just got back into Ultima after 2 decades and lost my mind when I saw that the Atari 800 was getting the version Ultima it deserved. I have a couple questions:

1: Is there going to be a music soundtrack on this version. I remember Ultima IV didn't have sound for some reason. 

2. Would I require a modded 800xl to run this when finished. Something like an u1mb?

 

 

1. There already is a music soundtrack in this version that I created. There will be an updated version of the player next year that uses hopefully 1KB less RAM since Atlan wants all the RAM we can squeeze out of the system cause this is a complex game. =)~

2. I think this works on a stock 800XL, so long as you have a way to load the DD disks (no SD version at this time).

 

  • Like 1
Link to comment
Share on other sites

6 hours ago, Zolaerla said:

 

1. There already is a music soundtrack in this version that I created. There will be an updated version of the player next year that uses hopefully 1KB less RAM since Atlan wants all the RAM we can squeeze out of the system cause this is a complex game. =)~

2. I think this works on a stock 800XL, so long as you have a way to load the DD disks (no SD version at this time).

 

ad 1) Oh, more RAM .. yes, that's what i need! 👍  👍 

 

as 2) Unfortunatly a stock 800XL won't work. 128K are needed to run the game.

 

Edited by Atlan_Roland
Link to comment
Share on other sites

19 minutes ago, MichaG said:

It works on a stock 800XL with SUBCARD ;-)

20231213_192708.thumb.jpg.9de831789fcae42bc625b18db7274659.jpg

Oh, i'm very happy to see that picture! 👍 

This means the whole procedure of creating disks actually works. :)

 

Ah, just, that it seems that the commodore CRT is not able to display the last 8 scanlines (the lower border of the screen is not on your display anymore) My DLI is using the overscan area up to the max. NTSC limit.

Are you able to adjust the height manually on the monitor?

 

BTW: Seeing your two 1050 remindes me to prioritize support for two floppy disk drives!

 

Vielen Dank für das Foto! :)

 

Edited by Atlan_Roland
  • Like 5
Link to comment
Share on other sites

  • 1 month later...
  • 2 weeks later...

And the next tested WIP Build is here; available at the usual place in the first post.


So what's in there:

  •  Fixed everything that was broken & found in the 0.11 release.
     
  • Cursor movement has been remapped to the keys - + ; * (on the Atari keyboard).
    This makes movement much more conveniant on the real machine.
    (In emulation i recommend mapping the Joystick in Port 1 to the hosts machines cursor keys for easy moving)
     
  • Better Joystick handling: 
        Trigger ist 'kind of' context sensitive and offers the appropriate action dependend on the location of the Avatar.
        E.g. if standing next to a door, 'O'-pen is choosen as command.
     
  • Started implementation of 'smallmaps':
        For example when using 'h'-ole up & camp, you see the Avatar resting at the camping place.
        Also, you are now able to enter the eight shrines of the virtues.
     
  • Tons of Bugfixes and some optimizations, as always.
    Unfortunately most optimizations for space get used up fast by adding new feature ..

 

I did some little touchups on the tile graphics, but i'm not an artist..  if anyone is interested, feel free to join in!
My source file for the tiles is .\TILES\TILE_BASE_12x16.xcf (a GIMP file) in the <source>.zip at the first post;
if there is interest i can send out a batch script & build to test new graphics.

 

Edited by Atlan_Roland
  • Like 7
  • Thanks 4
Link to comment
Share on other sites

  • 1 month later...
Posted (edited)

Current WIP Build - v0.013 - just uploaded at the first post.

 

What's new in v0.013:

  • Fixed everything that was broken & found in the 0.12 release.
  • 'Y'-ell command implemented (including words of power & wishing wells)
  • Dawn & dusk: different color shades dependend on TimeofDay/Torch/Underground
  • Animations for NPC that are eating.
  • Optimizations.
  • Started with merchants code. (For now the just greet you in their shop when on duty)
Edited by Atlan_Roland
  • Like 11
  • Thanks 6
Link to comment
Share on other sites

The 1.3 disks are on my TNFS server if anyone wants to try it out. Let me know if you have any issues getting them to load, I've tested locally but not over the internet yet.

 

  • Thanks 1
Link to comment
Share on other sites

Posted (edited)

@Mr RobotThanks alot for serving it.  Just tested it out and it works nicely.


As a reminder:

UltimaV (2024)_360k-QD_ (v013).ATR  An all in one disk image, no need for disk swapping.

 

When using the two disk version (suitable for putting on real floppy disks), boot the BRITANNIA disk and swap when prompted. Support for two disk drives will be implemented in a future revision.

UltimaV (2024)_(BRITANNIA)_Disk1-DD_(v013).ATR

UltimaV (2024)_(TOWNE)_Disk2-DD_(v013).ATR

 

Edited by Atlan_Roland
  • Like 1
Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...