Check the code from post 120 and you will find out.Something else I noticed is that any given monster will use a pair of attack texts.

For example, the Colossus will use " slams " and " strikes at ". It seems a 50% chance for either. Did you notice this too?

## C64 BT2: complete monster list

### Re: C64 BT2: complete monster list

### Re: C64 BT2: complete monster list

Where is post 120 exactly?Weber G wrote: ↑Tue Mar 08, 2022 1:04 pmCheck the code from post 120 and you will find out.Something else I noticed is that any given monster will use a pair of attack texts.

For example, the Colossus will use " slams " and " strikes at ". It seems a 50% chance for either. Did you notice this too?

Could you please be less cryptic?

### Re: C64 BT2: complete monster list

The post on page one of this thread:

Code: Select all

```
9513 20 90 08 JSR $0890
9516 A5 5B LDA $5B
9518 29 02 AND #$02
951A 8D 27 95 STA $9527
951D A0 1C LDY #$1C
951F B1 67 LDA ($67),Y
9521 4A LSR A
9522 4A LSR A
9523 29 FC AND #$FC
9525 18 CLC
9526 69 00 ADC #$00
```

### Re: C64 BT2: complete monster list

Oh, you mean this.

I don't know how you refer to that as post #120.

Read your PM please.

Code: Select all

```
9513 20 90 08 JSR $0890 ; jsr => $0890
9516 A5 5B LDA $5B ; $5B => A
9518 29 02 AND #$02 ; 02 AND A
951A 8D 27 95 STA $9527 ; A => $9527
951D A0 1C LDY #$1C ; 1C => Y
951F B1 67 LDA ($67),Y ; ($67),Y => A
9521 4A LSR A ; move A bitwise right
9522 4A LSR A ; move A bitwise right
9523 29 FC AND #$FC ; FC AND A
9525 18 CLC
9526 69 00 ADC #$00 ; add 00 to A
9528 AA TAX ; A => X
9529 BC 67 B1 LDY $B167,X ; $B167,X => Y
952C BD 66 B1 LDA $B166,X ; $B166,X => A
952F AA TAX ; A => X
9530 20 B4 08 JSR $08B4 ; jsr => $08B4
```

I don't know how you refer to that as post #120.

Read your PM please.

### Re: C64 BT2: complete monster list

Am I correct in suspecting that the hit point bytes are somehow encoded to refer to a table as well?

I ask because if you look closely, some of the values seem to conflict from what I had originally thought; i.e. byte 10 + 11 = max hitpoints & byte 12 + 13 = min hitpoints. The assertion that there is a "base" and "random max" hitpoints seems to be off as well.

I tried to scan the game code for references to it, but naturally I had no luck.

I ask because if you look closely, some of the values seem to conflict from what I had originally thought; i.e. byte 10 + 11 = max hitpoints & byte 12 + 13 = min hitpoints. The assertion that there is a "base" and "random max" hitpoints seems to be off as well.

I tried to scan the game code for references to it, but naturally I had no luck.

### Re: C64 BT2: complete monster list

Maven posted some time ago about Bard's Tale I and the monster hitpoint calculations.Darendor wrote: ↑Tue Mar 08, 2022 2:54 pm Am I correct in suspecting that the hit point bytes are somehow encoded to refer to a table as well?

I ask because if you look closely, some of the values seem to conflict from what I had originally thought; i.e. byte 10 + 11 = max hitpoints & byte 12 + 13 = min hitpoints. The assertion that there is a "base" and "random max" hitpoints seems to be off as well.

I tried to scan the game code for references to it, but naturally I had no luck.

He said, "For Calculating max hit points, you take the first nibble, add one, take 2 to that power, and then add the minimum HP and then subtract one."

He also said after that: "Bits 7-4 are the max hit points this type of monster can have. Take two to that power and add the lower range from column 2 - 1."

Neither of these formulae seem to work out for BT II though. I tried XOR-ing the max and min hitpoints together, and that works for the first two entries, but then it skews wildly.

So where might be the table be, if there is one, for calculating max HP?

### Re: C64 BT2: complete monster list

I think your data might be wrong with regards to monster damage.

Consider the Lizard Man:

Your data shows that it does 3-12 damage, but the game seems to beg to differ. The other monsters I have in the party also are inconsistent with the damage field in your data.

The wood sprite in your data shows 4-16, but in the game it's actually 3-12. So I think you might be off by 1.

Also, there's a field for monsters for # of attacks; I will need to decipher and incorporate that into my editor when I get the chance.

Consider the Lizard Man:

Your data shows that it does 3-12 damage, but the game seems to beg to differ. The other monsters I have in the party also are inconsistent with the damage field in your data.

The wood sprite in your data shows 4-16, but in the game it's actually 3-12. So I think you might be off by 1.

Also, there's a field for monsters for # of attacks; I will need to decipher and incorporate that into my editor when I get the chance.

### Re: C64 BT2: complete monster list

Sorry, but you start so many question at the same time.

But: There is a difference in the monster damage depending if the monster attacks the party or the monster is in the party and attacks a monster.

In case the monster attacks the party, my calculations are correct:

damage = (byte 1D +1) * random 1-4

damage min = (byte 1D + 1)

damage max = (byte 1D +1) *4

But: There is a difference in the monster damage depending if the monster attacks the party or the monster is in the party and attacks a monster.

In case the monster attacks the party, my calculations are correct:

In short:###########################################################

########## damage creation (monster hits character)

###########################################################

########## load monster initiative value in Y

A3D6 C8 INY

A3D7 B1 67 LDA ($67),Y

A3D9 A8 TAY

########## clear $45 and $46

A3DA A9 00 LDA #$00

A3DC 85 45 STA $45

A3DE 85 46 STA $46

########## create two random numbers (00 - FF) and store them in $5A and $5B (X unchanged)

A3E0 20 90 08 JSR $0890

########## create a number between 1 and 4 in A

A3E3 A5 5B LDA $5B

A3E5 29 03 AND #$03

A3E7 18 CLC

A3E8 69 01 ADC #$01

########## add A to $45; if $45 > 255 then increase $46 by 1

A3EA 65 45 ADC $45

A3EC 90 02 BCC $A3F0

A3EE E6 46 INC $46

A3F0 85 45 STA $45

########## jump $A3E0 if negative flag = 0

A3F2 88 DEY

A3F3 10 EB BPL $A3E0

damage = (byte 1D +1) * random 1-4

damage min = (byte 1D + 1)

damage max = (byte 1D +1) *4

### Re: C64 BT2: complete monster list

I'm still adding a provision in my editor to change the # of attacks, just for completeness.

I'll take your word for it with the damage values.

Also, I think I've figured out how to calculate the max hit points.

Using the Goblin as an example. I put the minimum HP (5) into C100, then take the byte for max # of HP (3), do a ROR on it, then add C100 to it, and subtract one and stuff it into C101.

It seems to work, except for the Wood Sprites and the monster that use both the high and low bytes for HP (Balder Guard & Lagoth Zanta).

The Wood Sprite has 1-8HP, but it has a minimum HP of "EB" instead of 1 with a byte 10 of 07. Plugging my calculation into these numbers yields 242, but that's obviously wrong.

Why does it show EB instead of 01?

I'll take your word for it with the damage values.

Also, I think I've figured out how to calculate the max hit points.

Code: Select all

```
.C:c000 A9 05 LDA #$05
.C:c002 8D 00 C1 STA $C100
.C:c005 A9 03 LDA #$03
.C:c007 6A ROR A
.C:c008 6D 00 C1 ADC $C100
.C:c00b 8D 01 C1 STA $C101
.C:c00e AA TAX
.C:c00f CA DEX
.C:c010 8A TXA
.C:c011 8D 01 C1 STA $C101
.C:c014 60 RTS
```

It seems to work, except for the Wood Sprites and the monster that use both the high and low bytes for HP (Balder Guard & Lagoth Zanta).

The Wood Sprite has 1-8HP, but it has a minimum HP of "EB" instead of 1 with a byte 10 of 07. Plugging my calculation into these numbers yields 242, but that's obviously wrong.

Why does it show EB instead of 01?

### Re: C64 BT2: complete monster list

This is the code from the game for the hit points generation:
I will not explain, sorry too much effort. If you can or not: If you want to write code in a programming language, then you have to understand that language. If not, choose an other.

Code: Select all

```
53CC 8C FA 53 STY $53FA
53CF 20 2C 44 JSR $442C
53D2 A0 10 LDY #$10
53D4 B1 67 LDA ($67),Y
53D6 25 5A AND $5A
53D8 8D EE 53 STA $53EE
53DB C8 INY
53DC B1 67 LDA ($67),Y
53DE 25 5B AND $5B
53E0 8D F4 53 STA $53F4
53E3 4E F4 53 LSR $53F4
53E6 6E EE 53 ROR $53EE
53E9 C8 INY
53EA B1 67 LDA ($67),Y
53EC 18 CLC
53ED 69 00 ADC #$00
53EF AA TAX
53F0 C8 INY
53F1 B1 67 LDA ($67),Y
53F3 69 00 ADC #$00
53F5 90 02 BCC $53F9
53F7 A9 FF LDA #$FF
53F9 A0 00 LDY #$00
53FB 60 RTS
```

### Re: C64 BT2: complete monster list

Fine, be like that.Weber G wrote: ↑Wed Mar 09, 2022 1:00 pm This is the code from the game for the hit points generation:I will not explain, sorry too much effort. If you can or not: If you want to write code in a programming language, then you have to understand that language. If not, choose an other.Code: Select all

`53CC 8C FA 53 STY $53FA 53CF 20 2C 44 JSR $442C 53D2 A0 10 LDY #$10 53D4 B1 67 LDA ($67),Y 53D6 25 5A AND $5A 53D8 8D EE 53 STA $53EE 53DB C8 INY 53DC B1 67 LDA ($67),Y 53DE 25 5B AND $5B 53E0 8D F4 53 STA $53F4 53E3 4E F4 53 LSR $53F4 53E6 6E EE 53 ROR $53EE 53E9 C8 INY 53EA B1 67 LDA ($67),Y 53EC 18 CLC 53ED 69 00 ADC #$00 53EF AA TAX 53F0 C8 INY 53F1 B1 67 LDA ($67),Y 53F3 69 00 ADC #$00 53F5 90 02 BCC $53F9 53F7 A9 FF LDA #$FF 53F9 A0 00 LDY #$00 53FB 60 RTS`

### Re: C64 BT2: complete monster list

See below.

Last edited by Darendor on Sun Mar 13, 2022 7:00 am, edited 1 time in total.

### Re: C64 BT2: complete monster list

So I've worked out the XP calculation.

Step A): Multiply 128 x Initiative

Step B): XP Mod is the # of times to double the result of step A

Step C): Add 128

Step D): It's peanut butter jelly time.

Consider the

It has an initiative value of

So we multiply

Then, we add

Voila.

This formula so far checks out on all the monsters I've sampled; i.e. I abducted most monsters from Fanskar's Castle for a "study", of sorts.

Man, what a headache it is trying to figure out how these numbers are figured. Mike Cranford couldn't just go with straight values, oh no, that'd be too easy...

Step A): Multiply 128 x Initiative

Step B): XP Mod is the # of times to double the result of step A

Step C): Add 128

Step D): It's peanut butter jelly time.

Consider the

**Master Mage**from Fanskar's Castle. It has an XP value of**2560**.It has an initiative value of

**19**(decimal, 13 hex) and an XP Mod value of**0**.So we multiply

**128 x 19**to get**2432**. Then we see XP Mod is**0**, so we multiply**2432 zero times**(not 2432 x 0) to get...*.***2432**Then, we add

**128**, so**2432 + 128 = 2560**.Voila.

This formula so far checks out on all the monsters I've sampled; i.e. I abducted most monsters from Fanskar's Castle for a "study", of sorts.

Man, what a headache it is trying to figure out how these numbers are figured. Mike Cranford couldn't just go with straight values, oh no, that'd be too easy...

### Re: C64 BT2: complete monster list

So I found that my calculation for XP only works if "XP Mod" is 00 or 01.

Any other value and it skews the results radically.

Case in point is the War Giant.

Initiative: 0D (13)

XP Value: 5120

128 x 13 = 1664

Double 1664 two times

- 1664 x 2 = 3328

- 3328 x 2 = 6656

6656 + 128 = 6784

Over by 1664.

So yeah, I'm missing something here.

Any other value and it skews the results radically.

Case in point is the War Giant.

Initiative: 0D (13)

XP Value: 5120

128 x 13 = 1664

Double 1664 two times

- 1664 x 2 = 3328

- 3328 x 2 = 6656

6656 + 128 = 6784

Over by 1664.

So yeah, I'm missing something here.