C64 BT2: complete monster list

Any developer realated stuff
Weber G
Posts: 125
Joined: Tue Dec 15, 2020 9:58 am

Re: C64 BT2: complete monster list

Post by Weber G »

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?
Check the code from post 120 and you will find out.
User avatar
Darendor
Posts: 1502
Joined: Wed Jan 14, 2009 1:53 am
Location: Red Deer, Alberta, Canada

Re: C64 BT2: complete monster list

Post by Darendor »

Weber G wrote: Tue Mar 08, 2022 1:04 pm
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?
Check the code from post 120 and you will find out.
Where is post 120 exactly?

Could you please be less cryptic?
Weber G
Posts: 125
Joined: Tue Dec 15, 2020 9:58 am

Re: C64 BT2: complete monster list

Post by Weber G »

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	
User avatar
Darendor
Posts: 1502
Joined: Wed Jan 14, 2009 1:53 am
Location: Red Deer, Alberta, Canada

Re: C64 BT2: complete monster list

Post by Darendor »

Oh, you mean this.

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.
User avatar
Darendor
Posts: 1502
Joined: Wed Jan 14, 2009 1:53 am
Location: Red Deer, Alberta, Canada

Re: C64 BT2: complete monster list

Post by Darendor »

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.
User avatar
Darendor
Posts: 1502
Joined: Wed Jan 14, 2009 1:53 am
Location: Red Deer, Alberta, Canada

Re: C64 BT2: complete monster list

Post by Darendor »

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.
Maven posted some time ago about Bard's Tale I and the monster hitpoint calculations.

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?
User avatar
Darendor
Posts: 1502
Joined: Wed Jan 14, 2009 1:53 am
Location: Red Deer, Alberta, Canada

Re: C64 BT2: complete monster list

Post by Darendor »

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

Consider the Lizard Man:
Image

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.
Weber G
Posts: 125
Joined: Tue Dec 15, 2020 9:58 am

Re: C64 BT2: complete monster list

Post by Weber G »

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 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
In short:
damage = (byte 1D +1) * random 1-4
damage min = (byte 1D + 1)
damage max = (byte 1D +1) *4
User avatar
Darendor
Posts: 1502
Joined: Wed Jan 14, 2009 1:53 am
Location: Red Deer, Alberta, Canada

Re: C64 BT2: complete monster list

Post by Darendor »

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.

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
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?
Weber G
Posts: 125
Joined: Tue Dec 15, 2020 9:58 am

Re: C64 BT2: complete monster list

Post by Weber G »

This is the code from the game for the hit points generation:

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 
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.
User avatar
Darendor
Posts: 1502
Joined: Wed Jan 14, 2009 1:53 am
Location: Red Deer, Alberta, Canada

Re: C64 BT2: complete monster list

Post by Darendor »

Weber G wrote: Wed Mar 09, 2022 1:00 pm This is the code from the game for the hit points generation:

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 
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.
Fine, be like that.
User avatar
Darendor
Posts: 1502
Joined: Wed Jan 14, 2009 1:53 am
Location: Red Deer, Alberta, Canada

Re: C64 BT2: complete monster list

Post by Darendor »

See below.
Last edited by Darendor on Sun Mar 13, 2022 7:00 am, edited 1 time in total.
User avatar
Darendor
Posts: 1502
Joined: Wed Jan 14, 2009 1:53 am
Location: Red Deer, Alberta, Canada

Re: C64 BT2: complete monster list

Post by Darendor »

See below.
User avatar
Darendor
Posts: 1502
Joined: Wed Jan 14, 2009 1:53 am
Location: Red Deer, Alberta, Canada

Re: C64 BT2: complete monster list

Post by Darendor »

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...
User avatar
Darendor
Posts: 1502
Joined: Wed Jan 14, 2009 1:53 am
Location: Red Deer, Alberta, Canada

Re: C64 BT2: complete monster list

Post by Darendor »

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