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 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...
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.