News:

Look at this spiffy theme!

 

Akalabeth Stuff (Ultima 0)

Started by RT-55J, Wed, 2025 - 09 - 24, 11:37 PM

Previous topic - Next topic

RT-55J

you can now enter towns and the castle on the overworld (no dungeons yet)

there might still be a visual bug when returning to the overworld

RT-55J

sad news

i fixed that bug

rip to the E SHOP, you were too good for this WORLD OF DOOM

RT-55J

working on dungeon generation

numbers:

game_012.png

just walls and ladders:

game_013.png

objects:

game_016.png

still need to place monsters

RT-55J

Curiously, the monster placement code has two different formulas for calculating a monsters health.

The first one is simpler, and is applied to the monster slot regardless of whether or not it spawns:

MonsterHealth(X) = X + 3 + DungeonFloor
If a monster is spawned, then the previous formula is overwritten with the result of this formula:

MonsterHealth(X) = X * 2 + DungeonFloor * 2 * PlayLevel
curious

RT-55J

Annoying edge case in CVBasic:
    X1 = SGN(PlayerX - MonsterX(MM))
    Y1 = SGN(PlayerY - MonsterY(MM))
X1 and Y1 are signed, but unless I declare that PlayerX and PlayerY are also signed, then the SGN() function will never return a negative number.

Thus, all enemies would congregate to the lower right.

RT-55J

this game is dangerously close to becoming fully functional

unfortunately, that is very different from being remotely presentable

RT-55J

Combat is 90% working, from the looks of it.

game_018.png

RT-55J


RT-55J

I found a very funny bug in the original on line 1667:

1667 LK = LK +  INT (MN * IN / 2): IF MN = TASK THEN TASK =  - TASK
specifically, we're looking at this part here:

IF Monster = Task THEN Task = -Task
The ostensible structure of the game is that Lord British gives you a quest (task) to slay a specific monster. You go and do that, return to him, get another task, rinse and repeat until you've slain a Balrog. The game marks a task as complete by setting the number to be negative.

This all seems well and good, and the code above does that task perfectly well.

The issue is that that line of code is called any time you hit and enemy, rather than when you defeat an enemy.

Thus, per the game's code, you could complete your final quest by tapping a Balrog's shoulder with an arrow, high-tailing it back out of the dungeon, and then telling Lord British about your stunning feat.

neen

wait, wouldn't it alternate between positive and negative every hit then? err

RT-55J

If TASK were negative, then (Monster = Task) would evaluate to false.

neen

so TASK = -TASK doesn't keep inverting it? just makes it -|task| ?

RT-55J

A = -A would invert a number from positive to negative to positive, etc.

It's just that all of the Monster IDs are positive, so the conditional check of "Monster = Task" would never evaluate to true after Task is set to negative.

neen

got it, monsters are positive :hey:

RT-55J

TODO: Implement hunger and death.