TUTORIAL #12 – TRANSPORT MODES “Is used to switch between
different transportation shapes by pressing a numerical key corresponding to
that type of transportation mode”.
I will be going through each subroutine line-by-line and
explaining what each line of code is doing and how it affects the outcome of the
program.
At this point you have transferred the value of CHAR into a
specific shape type and loaded it into the MAPSTORE array. This sets up the type of transportation mode
shape that will be displayed on the screen when you press the [1 thru 6]
numerical keys.
250 ********************************
This is just a comment line to separate each subroutine and
helps to define the start of all the transportation mode subroutines.
251 *** TRANSPORT MODES
This is just a comment line to detailing the section
covering all the transportation mode shapes subroutines.
252 HORSE2 LDA #$0B ;
HORSE
Line 252 is called from BASIC when a player presses the #1
key on the keyboard. This subroutine is
used to “[L]oa[D]
the [A]ccumulator” or register A with the value
HEX $0B! So, you are setting the value
of A to equal the HEX value $0B, which in this case is the representing value
of the character shape for the HORSE.
The ;HORSE is used as a description reference line similar to a comment
to give detail about the specific code line.
Anything after the ; is ignored by the compiler.
Also, line 252 has a header titled HORSE2, which allows it
to be called as a separate statement from the BASIC program as a subroutine. In this case it is used immediately change
the shape type and characteristics of the main character graphic tile in the
middle of the screen. When the player
presses a specific numerical key this calls the subroutine and instantly
changes the graphic tile image and the characteristics of how it moves and its
collision detection.
This is the value used to represent the character shape of
the HORSE.
253 STA CHAR
Line 253 is used to “[ST]ore
the [A]ccumulator” or take the value that has
been stored in register A and place it in variable CHAR, which in this case
equals 11! By setting CHAR to 11 it
establishes the variable CHAR with a new value that represents the HORSE and
will stay this value until another numeric key is pressed to change the mode of
transportation or the original character shape of the fighter is designated in
the game.
254 LDX #$6E
Line 254 is used to “[L]oa[D] register [X]” or
register X with the value equal to 110!
So, you are setting the value of X to equal the HEX value of $6E, which
equals decimal value of 110.
255 STA MAPSTORE,X
Line 223 is used to “[ST]ore
the [A]ccumulator” or take the value that has
been stored in register A and place it in the array MAPSTORE at location X which in this example
would be the value in CHAR or decimal 11, stored in array MAPSTORE at location
X equal to 110, where 110 is represented by the graphic tile in the middle of
the screen out of the 200 tiles.
Remember, tiles are counted 0 to 19 for the top horizontal screen line
and then they go down one tile screen line and count 20 to 39, etc… till you
get to tile 199!
256 JSR DRAW5
Line 256 tells the program to “[J]ump
to [S]ub[R]outine”
to the subroutine with the header DRAW5. Subroutine DRAW5 is used to immediately
update the shape value of the character tile to a HORSE and draw this graphic
tile in the middle of the screen.
257 RTS
Line 257 is used to “[R]e[T]urn from [S]ubroutine”,
which means that after the Subroutine HORSE2 has updated the new shape and drawn
it to the screen, it returns back to the BASIC program that called it
originally.
258 SHIP2 LDA #$00
Line 258 is called from BASIC when a player presses the #2
key on the keyboard. This subroutine is
used to “[L]oa[D]
the [A]ccumulator” or register A with the value
HEX $00! So, you are setting the value
of A to equal the HEX value $00, which in this case is the representing value
of the character shape for the SHIP.
Also, line 258 has a header titled SHIP2, which allows it to
be called as a separate statement from the BASIC program as a subroutine. In this case it is used immediately change
the shape type and characteristics of the main character graphic tile in the
middle of the screen. When the player
presses a specific numerical key this calls the subroutine and instantly
changes the graphic tile image and the characteristics of how it moves and its
collision detection.
This is the value used to represent the character shape of
the SHIP.
259 STA CHAR
Line 259 is used to “[ST]ore
the [A]ccumulator” or take the value that has
been stored in register A and place it in variable CHAR, which in this case
equals 0! By setting CHAR to 0 it
establishes the variable CHAR with a new value that represents the HORSE and
will stay this value until another numeric key is pressed to change the mode of
transportation or the original character shape of the fighter is designated in
the game.
260 LDX #$6E
Line 260 is used to “[L]oa[D] register [X]” or
register X with the value equal to 110!
So, you are setting the value of X to equal the HEX value of $6E, which
equals decimal value of 110.
261 STA MAPSTORE,X
Line 261 is used to “[ST]ore
the [A]ccumulator” or take the value that has
been stored in register A and place it in the array MAPSTORE at location X which in this example
would be the value in CHAR or decimal 0, stored in array MAPSTORE at location X
equal to 110, where 110 is represented by the graphic tile in the middle of the
screen out of the 200 tiles. Remember,
tiles are counted 0 to 19 for the top horizontal screen line and then they go
down one tile screen line and count 20 to 39, etc… till you get to tile 199!
262 JSR DRAW5
Line 262 tells the program to “[J]ump
to [S]ub[R]outine”
to the subroutine with the header DRAW5. Subroutine DRAW5 is used to immediately
update the shape value of the character tile to a SHIP and draw this graphic
tile in the middle of the screen.
263 RTS
Line 263 is used to “[R]e[T]urn from [S]ubroutine”,
which means that after the Subroutine SHIP2 has updated the new shape and drawn
it to the screen, it returns back to the BASIC program that called it
originally.
264 RAFT2 LDA #$01
Line 264 is called from BASIC when a player presses the #3
key on the keyboard. This subroutine is
used to “[L]oa[D]
the [A]ccumulator” or register A with the value
HEX $01! So, you are setting the value
of A to equal the HEX value $01, which in this case is the representing value
of the character shape for the RAFT.
Also, line 264 has a header titled RAFT2, which allows it to
be called as a separate statement from the BASIC program as a subroutine. In this case it is used immediately change
the shape type and characteristics of the main character graphic tile in the
middle of the screen. When the player
presses a specific numerical key this calls the subroutine and instantly
changes the graphic tile image and the characteristics of how it moves and its
collision detection.
This is the value used to represent the character shape of
the RAFT.
265 STA CHAR
Line 265 is used to “[ST]ore
the [A]ccumulator” or take the value that has
been stored in register A and place it in variable CHAR, which in this case
equals 1! By setting CHAR to 1 it
establishes the variable CHAR with a new value that represents the RAFT and
will stay this value until another numeric key is pressed to change the mode of
transportation or the original character shape of the fighter is designated in
the game.
266 LDX #$6E
Line 266 is used to “[L]oa[D] register [X]” or
register X with the value equal to 110!
So, you are setting the value of X to equal the HEX value of $6E, which
equals decimal value of 110.
267 STA MAPSTORE,X
Line 267 is used to “[ST]ore
the [A]ccumulator” or take the value that has
been stored in register A and place it in the array MAPSTORE at location X which in this example
would be the value in CHAR or decimal 0, stored in array MAPSTORE at location X
equal to 110, where 110 is represented by the graphic tile in the middle of the
screen out of the 200 tiles. Remember,
tiles are counted 0 to 19 for the top horizontal screen line and then they go
down one tile screen line and count 20 to 39, etc… till you get to tile 199!
268 JSR DRAW5
Line 268 tells the program to “[J]ump
to [S]ub[R]outine”
to the subroutine with the header DRAW5. Subroutine DRAW5 is used to immediately
update the shape value of the character tile to a RAFT and draw this graphic
tile in the middle of the screen.
269 RTS
Line 269 is used to “[R]e[T]urn from [S]ubroutine”,
which means that after the Subroutine RAFT2 has updated the new shape and drawn
it to the screen, it returns back to the BASIC program that called it
originally.
270 CART2 LDA #$0A
Line 270 is called from BASIC when a player presses the #4
key on the keyboard. This subroutine is
used to “[L]oa[D]
the [A]ccumulator” or register A with the value
HEX $0A! So, you are setting the value
of A to equal the HEX value $0A, which in this case is the representing value
of the character shape for the CART.
Also, line 270 has a header titled CART2, which allows it to
be called as a separate statement from the BASIC program as a subroutine. In this case it is used immediately change
the shape type and characteristics of the main character graphic tile in the
middle of the screen. When the player
presses a specific numerical key this calls the subroutine and instantly
changes the graphic tile image and the characteristics of how it moves and its
collision detection.
This is the value used to represent the character shape of
the CART.
271 STA CHAR
Line 271 is used to “[ST]ore
the [A]ccumulator” or take the value that has
been stored in register A and place it in variable CHAR, which in this case
equals 10! By setting CHAR to 10 it
establishes the variable CHAR with a new value that represents the CART and
will stay this value until another numeric key is pressed to change the mode of
transportation or the original character shape of the fighter is designated in
the game.
272 LDX #$6E
Line 272 is used to “[L]oa[D] register [X]” or
register X with the value equal to 110!
So, you are setting the value of X to equal the HEX value of $6E, which
equals decimal value of 110.
273 STA MAPSTORE,X
Line 273 is used to “[ST]ore
the [A]ccumulator” or take the value that has
been stored in register A and place it in the array MAPSTORE at location X which in this example
would be the value in CHAR or decimal 10, stored in array MAPSTORE at location
X equal to 110, where 110 is represented by the graphic tile in the middle of
the screen out of the 200 tiles.
Remember, tiles are counted 0 to 19 for the top horizontal screen line
and then they go down one tile screen line and count 20 to 39, etc… till you
get to tile 199!
274 JSR DRAW5
Line 274 tells the program to “[J]ump
to [S]ub[R]outine”
to the subroutine with the header DRAW5. Subroutine DRAW5 is used to immediately
update the shape value of the character tile to a SHIP and draw this graphic
tile in the middle of the screen.
275 RTS
Line 275 is used to “[R]e[T]urn from [S]ubroutine”,
which means that after the Subroutine CART2 has updated the new shape and drawn
it to the screen, it returns back to the BASIC program that called it
originally.
276 LANDSPR2 LDA #$0C
Line 276 is called from BASIC when a player presses the #5
key on the keyboard. This subroutine is
used to “[L]oa[D]
the [A]ccumulator” or register A with the value HEX
$0C! So, you are setting the value of A
to equal the HEX value $0C, which in this case is the representing value of the
character shape for the LABDSPR.
Also, line 276 has a header titled LANDSPR2, which allows it
to be called as a separate statement from the BASIC program as a
subroutine. In this case it is used
immediately change the shape type and characteristics of the main character
graphic tile in the middle of the screen.
When the player presses a specific numerical key this calls the
subroutine and instantly changes the graphic tile image and the characteristics
of how it moves and its collision detection.
This is the value used to represent the character shape of
the LANDSPR.
277 STA CHAR
Line 277 is used to “[ST]ore
the [A]ccumulator” or take the value that has
been stored in register A and place it in variable CHAR, which in this case
equals 12! By setting CHAR to 12 it
establishes the variable CHAR with a new value that represents the LANDSPR and
will stay this value until another numeric key is pressed to change the mode of
transportation or the original character shape of the fighter is designated in
the game.
278
LDX #$6E
Line 278 is used to “[L]oa[D] register [X]” or
register X with the value equal to 110!
So, you are setting the value of X to equal the HEX value of $6E, which
equals decimal value of 110.
279 STA MAPSTORE,X
Line 279 is used to “[ST]ore
the [A]ccumulator” or take the value that has
been stored in register A and place it in the array MAPSTORE at location X which in this example
would be the value in CHAR or decimal 12, stored in array MAPSTORE at location
X equal to 110, where 110 is represented by the graphic tile in the middle of
the screen out of the 200 tiles.
Remember, tiles are counted 0 to 19 for the top horizontal screen line
and then they go down one tile screen line and count 20 to 39, etc… till you
get to tile 199!
280 JSR DRAW5
Line 280 tells the program to “[J]ump
to [S]ub[R]outine”
to the subroutine with the header DRAW5. Subroutine DRAW5 is used to immediately
update the shape value of the character tile to a LANDSPR and draw this graphic
tile in the middle of the screen.
281 RTS
Line 281 is used to “[R]e[T]urn from [S]ubroutine”,
which means that after the Subroutine LANDSPR2 has updated the new shape and
drawn it to the screen, it returns back to the BASIC program that called it
originally.
282 CHARC2 LDA #$07
Line 282 is called from BASIC when a player presses the #6
key on the keyboard. This subroutine is
used to “[L]oa[D]
the [A]ccumulator” or register A with the value
HEX $07! So, you are setting the value
of A to equal the HEX value $07, which in this case is the representing value
of the character shape for the main CHARaCter.
Also, line 282 has a header titled CHARC2, which allows it
to be called as a separate statement from the BASIC program as a
subroutine. In this case it is used
immediately change the shape type and characteristics of the main character
graphic tile in the middle of the screen.
When the player presses a specific numerical key this calls the
subroutine and instantly changes the graphic tile image and the characteristics
of how it moves and its collision detection.
This is the value used to represent the character shape of
the main CHARaCter on the screen.
283 STA CHAR
Line 283 is used to “[ST]ore
the [A]ccumulator” or take the value that has
been stored in register A and place it in variable CHAR, which in this case equals
7! By setting CHAR to 7 it establishes
the variable CHAR with a new value that represents the main CHARaCter and will
stay this value until another numeric key is pressed to change the mode of
transportation or the original character shape of the fighter is designated in
the game.
284 LDX #$6E
Line 284 is used to “[L]oa[D] register [X]” or
register X with the value equal to 110!
So, you are setting the value of X to equal the HEX value of $6E, which
equals decimal value of 110.
285 STA MAPSTORE,X
Line 285 is used to “[ST]ore
the [A]ccumulator” or take the value that has
been stored in register A and place it in the array MAPSTORE at location X which in this example
would be the value in CHAR or decimal 7, stored in array MAPSTORE at location X
equal to 110, where 110 is represented by the graphic tile in the middle of the
screen out of the 200 tiles. Remember,
tiles are counted 0 to 19 for the top horizontal screen line and then they go
down one tile screen line and count 20 to 39, etc… till you get to tile 199!
286 DRAW5 LDA MAPSTORE,X
Line 286 is used to “[L]oa[D] the [A]ccumulator”
or register A with the value from array MAPSTORE location X, which mean as X is incremented so
will each value within the array MAPSTORE increment. Remember previously we stored the value in
array MAPSTORE on the first go around. So in this example we are going to load
each type of shape that was stored in MAPSTORE and place it in the accumulator,
and as X is incremented so will the shape that goes into register A.
Line 286 has a header titled DRAW5, which allows it to be
called again from a separate statement to be used as a DRAW loop. In this case the DRAW loop is used to take
the value from the array MAPSTORE,X and draw the graphic tile/shape over the
existing character shape that is in the middle of the screen.
287
ASL A
Line 287 is used to “[A]ccumulator
[S]hift [L]eft
one bit” which takes the binary value in register A and shifts in one bit to
the left. So, if register A equals HEX
34 or decimal 52, then the binary value equals 00110100, which is in the
accumulator. Now you shift the binary
value to the left by one and you get 01101000, which equals HEX 68 or decimal
104.
288
TAX
Line 288 is used to “[T]ransfer
[A]ccumulator to index X”
which takes the value in register A and transfers it to register X. So, if register A equals HEX 34 or decimal
52, then register X will now equal HEX 34 or decimal 52.
289 LDA SHPADR,X
Line 289 is used to “[L]oa[D] the [A]ccumulator”
or register A with the value equal to that held in array SHPADR,X! As
mentioned above, the SHAPE1 address is stored in a memory location for example
in HEX memory location $7200. When you
load A with the address from SHPADR,X you will get the 00 byte from the $7200
address and load it in register A.
290 STA LOW
Line 290 is used to “[ST]ore
the [A]ccumulator” or take the value that has
been stored in register A and place it in variable LOW, which in this case is equal to HEX
value $00. Again, LOW is a used to represents the low byte of the
memory address location where MAPADR 1 starts.
291 LDA SHPADR+1,X
Line 291 is used to “[L]oa[D] the [A]ccumulator”
or register A with the value equal to that held in array SHPADR+1,X! As
mentioned above, the SHAPE1 address is stored in a memory location for example
$7200. When you load A with the address
from SHPADR+1,X you will get the 72 byte from the $7200 address and load it in
register A.
292 STA HIGH
Line 292 is used to “[ST]ore
the [A]ccumulator” or take the value that has
been stored in register A and place it in variable HIGH, which in this case is equal to
HEX value $72. Again, HIGH is a used to represents the high byte of the
memory address location where SHPADR 1 starts.
293 LDX #$50
Line 293 is used to “[L]oa[D] register [X]” or
register X with the value equal to the decimal value of 80! So, you are setting the value of X to equal
the HEX value of $50, which equals decimal value of 80. The value of 80 represents the mid-point of
halfway point of the vertical draw on the screen since there are 160 lines
horizontally drawn lines from top to bottom, the shape of the new
transportation mode will start at line 80 and draw line by line done the total
of 32 lines or the equivalent of [2] graphic tiles one stacked on top of the
other. Remember that each graphic
tile/shape in Ultima 1 is made up of 4 shapes or 2x2 shapes. Two shapes on top of two shapes make a single
graphic tile in Ultima. Since the
drawing of the shape starts at line 80 this would indicate that the shape is
going to be displayed in the middle of the screen.
294 LDY #$00
Line 294 is used to “[L]oa[D] register [Y]” or
register Y with the value equal to one!
So, you are setting the value of Y to equal the HEX value of $00, which
equals decimal value of 0.
295
CHRCT1 LDA (LOW),Y
Line 295 is used to “[L]oa[D] the [A]ccumulator”
or register A with the value in the array LOW from array location 0. Remember when we used Map Address 1 on line
841, well now we are using the format Shape address instead and it is setup
like an array with a starting memory location and all the bytes in the address
are stored within the array. So, as in
Tutorial #6 when we needed to retrieve the HEX value $0C, now we will get the
next number in the sequence since Y equals 0 we are going to retrieve the first
shape/tile graphics byte:
So a shape address example is:
800 SHAPE1 DFB $00,$00,$40,$00,$40,$07,$40,$03,$40,$00,$44,$09,$4C,$1B,$5C,$3B,$4C,$19,$44,$08,$7E,$7F,$6F,$36,$7E,$1F,$7C,$0F,$00,$00
Earlier in the blog I showed examples of how a shape is
created and how the bytes represent where each pixel will be displayed to
create the specific shape such as a horse, a knight, a ship, etc. With this Sub-subroutine we will be loading
all the bytes that make up the specific tile graphic/shape into two temporary
arrays. We need two sets of arrays
because each shape is two bytes wide and we will be drawing two bytes at a
time. So as each set of bytes are loaded into the TEMP arrays, they will be
drawn as two sets of bytes line by line on the screen in 32 lines.
Line 295 has a header titled CHRCT1, which allows it to be
called again from a separate statement to be used as a loop. In this case the loop is used 32 times to
store each of the two sets of bytes which are each 16 bytes high, making for a
shape that is 2x2 or 32 lines deep.
296 STA TEMP,X
Line 296 is used to “[ST]ore
the [A]ccumulator” or take the value that has
been stored in register A and place it in variable TEMP,X, which in this example would
equal HEX value $00, the first HEX in this particular shapes database index.
800 SHAPE1 DFB $00,$00,$40,$00,$40,$07,$40,$03,$40,$00,$44,$09,$4C,$1B,$5C,$3B,$4C,$19,$44,$08,$7E,$7F,$6F,$36,$7E,$1F,$7C,$0F,$00,$00
297 INY
Line 297 is used to “[IN]crement
register [Y]” or take the value that has been
stored in register Y and add 1 to it.
298 LDA (LOW),Y
Line 298 is used to “[L]oa[D] the [A]ccumulator”
or register A with the next value in the array LOW from array location 1, since
it was just incremented. So, as in
Tutorial #6 when we needed to retrieve the HEX value $00, now we will get the
next number in the sequence since Y equals 1 we are going to retrieve the second
shape/tile graphics byte:
So the next shape address example is:
800 SHAPE1 DFB $00,$00,$40,$00,$40,$07,$40,$03,$40,$00,$44,$09,$4C,$1B,$5C,$3B,$4C,$19,$44,$08,$7E,$7F,$6F,$36,$7E,$1F,$7C,$0F,$00,$00
With this Sub-subroutine we will be loading all the bytes
that make up the specific tile graphic/shape into two temporary arrays. We need two sets of arrays because each shape
is two bytes wide and we will be drawing two bytes at a time. So as each set of
bytes are loaded into the TEMP arrays, they will be drawn as two sets of bytes
line by line on the screen in 32 lines.
299 STA TEMP1,X
Line 299 is used to “[ST]ore
the [A]ccumulator” or take the value that has
been stored in register A and place it in variable TEMP1,X, which in this case equal HEX
value $00.
300 INY
Line 300 is used to “[IN]crement
register [Y]” or take the value that has been
stored in register Y and add 1 to it.
301 INX
Line 301 is used to “[IN]crement
register [X]” or take the value that has been
stored in register X and add 1 to it.
302 CPY #$20
Line 302 is used to “[C]om[P]are [Y]” what is in
register Y to the value HEX $20 or the decimal value of 32. Since the value is equal to, in this case, 32,
then Y will continue to be compared to this value and if it doesn’t equal this
value it will call CHRCT1 again, increment X and Y again, and try to compare Y
against value 32 again. This happens
until Y finally equal 32. Once this is
accomplished it will finish the CHRCT1 subroutine loop and then return to the
subroutine that called it. Remember, 32
is equal to the number of lines that make up two stacked images for a 2x2
graphic tile. Each shape has 16 lines
and the two shapes together make up the 32 lines total.
303 BLT
CHRCT1
Line 303 is used to “[B]ranch
on [L]ess [T]han”,
which means that as long as the value in register Y is less than [<] 32 it
will continue to call the subroutine with the header CHRCT1. Once the value of Y is greater than [>] 32
it will bypass line 303 and continue to line 304.
304 ***********
This is a comment line to separate the PICK MODE subroutine
from the actual DRAW8 subroutine. After
the transportation mode has been picked the new DRAW8 subroutine will be used
to help draw the actual graphic tile/shape on the screen.
305 LDA #$00
Line 305 is used to “[L]oa[D] the [A]ccumulator”
or register A with the value equal to HEX $00!
306 STA STEPR1
Line 306 is used to “[ST]ore
the [A]ccumulator” or take the value that has
been stored in register A and place it in variable STEPR1, which in this case is equal to
HEX value $00.
307 LDX #$50
Line 307 is used to “[L]oa[D] register [X]” or
register X with the value equal to HEX $50!
So, you are setting the value of X to equal the HEX value of $50, which
equals decimal value of 80. Remember, the
value of 80 is equal to half the number of horizontal lines that make up the
graphic screen. So you are loading X
with a value that will equal the starting point of the half way mark on the
computer screen when you draw the graphic tile/shape to the center of the
screen.
308 DRAW8 LDY #$14
Line 308 is used to “[L]oa[D] register [Y]” or
register Y with the value equal to HEX $14! So, you are setting the value of Y to equal
the HEX value of $14, which equals decimal value of 20.
Also, line 308 has a header titled DRAW8, which allows it to
be called as a separate subroutine. In
this case it is used immediately to change the graphic tile/shape type and image
of the main character graphic tile in the middle of the screen. When the player presses a specific numerical
key this calls a separate subroutine and instantly changes the graphic tile
image in the middle of the screen and brings with it the new movement parameters
and its collision detection.
309 LDA HI,X
Line 309 is used to “[L]oa[D] the [A]ccumulator”
or register A with the value equal to that held in array HI,X!
310 STA HIGH
Line 310 is used to “[ST]ore
the [A]ccumulator” or take the value that has
been stored in register A and place it in variable HIGH.
Again, HIGH is a used to
represents the HIGH byte of the memory address location where SHPADR starts.
311 LDA LO,X
Line 311 is used to “[L]oa[D] the [A]ccumulator”
or register A with the value equal to that held in array LO,X!
312 STA LOW
Line 312 is used to “[ST]ore
the [A]ccumulator” or take the value that has
been stored in register A and place it in variable LOW.
Again, LOW is a used to
represents the high byte of the memory address location where SHPADR starts.
313 LDA TEMP,X
Line 313 is used to “[L]oa[D] the [A]ccumulator”
or register A with the next value in the array TEMP from array location X. So, in
subroutine CHRCT1 when we loaded TEMP and TEMP1 with the shape values, now we
are transferring those same values into ARRAY (LOW),Y to be used for the DRAW8
subroutine. This is for the first graphic tile/shape reference values that will
be drawn to the screen.
314 STA (LOW),Y
Line 314 is used to “[ST]ore
the [A]ccumulator” or take the value that has
been stored in register A and place it in array (LOW),Y.
Again, this array will be used to help draw the new transportation mode
shape from the TEMP arrays.
315 INY
Line 315 is used to “[IN]crement
register [Y]” or take the value that has been
stored in register Y and add 1 to it.
316 LDA TEMP1,X
Line 316 is used to “[L]oa[D] the [A]ccumulator”
or register A with the next value in the array TEMP1 from array location
X. This is for the second graphic
tile/shape reference values that will be drawn to the screen.
317 STA (LOW),Y
Line 317 is used to “[ST]ore
the [A]ccumulator” or take the value that has
been stored in register A and place it in variable (LOW),Y.
318 INX
Line 318 is used to “[IN]crement
register [X]” or take the value that has been
stored in register X and add 1 to it.
319 INC STEPR1
Line 319 is used to “[INC]rement”
the variable STEPR1 by 1 or take the value that has been stored variable STEPR1
and add 1 to it.
320 LDA STEPR1
Line 320 is used to “[L]oa[D] the [A]ccumulator”
or register A with the value equal to what has been stored in variable
STEPR1! So, you are incrementing STEPR1
and then setting that value into register A, which in this case has just been
increased by 1.
321 CMP #$10
Once the value of STEPR1 is loaded into register A, Line 321
is used to “[C]o[MP]are”
what is in register A to the HEX value #$10 or decimal value of 16! The value 16 is the number of horizontal lines
which make up a type of shape/tile graphic for a line on the world map that is shown
on the computer screen.
322 BLT
DRAW8
Line 322 is used to “[B]ranch
on [L]ess [T]han”,
which means that as long as the value in register A is less than [<] 16 it
will continue to call the subroutine with the header DRAW8. Once the value of A is greater than [>] 16
it will bypass line 322 and continue to line 323.
323 RTS
Line 323 is used to “[R]e[T]urn from [S]ubroutine”,
which means that all the actions in this subroutine have been completed and is
return to the subroutine that called it.
So, when this subroutine finishes you should have the
following accomplished:
The player should be able to hit a number key from 1 to 6
and instantly the main character image on the screen will change to a new mode
of transportation shape. Once this new
graphic tile/shape is drawn to the screen it will have updated the movement
requirements and the collision aspects of that type of graphic tile/shape. Such
as, if the player were to pick the #5 key then the LAND SPEEDER would show up
on the middle of the screen and it would have the following movement
characteristics; moves freely on ocean and land tiles but can’t move through
trees and mountains! You will also have
updated the value for the variable CHAR, which represents the main character graphic
tile/shape.
As always, please email me any questions you might have.
ultima_revisited@yahoo.com
Joe
No comments:
Post a Comment