(C)Mike Blum/ZX-MASTERS CROUP.
GENERAL'ization of programs.
I
INTRODUCTION
Dubbing for GS is very painstaking
and a rather long task that requires
except patience and the ability to get
The music is also quite good
knowledge of assembler, so this article
addressed primarily to those who answer
meets these requirements. I'll try
tell in detail about the entire kitchen when-
preparing voiced games, I will give a number
examples, incl. program texts, ladies
a number of tips, I’ll show you some nuances -
In short, I’ll write about everything that will help you
voice toys.
II
SELECTION AND ANALYSIS OF IPRA
So, you decided to voice something
under "GS". Let's select the game "TARGET
RENEGADE".Immediatelylet's take the full 128K ver-
this one with music for AY - it’s better to take the ver-
this game is already well voiced so that
insert less new effects. Next
we go through the whole game and write it down
all the points that need to be voiced and
we arrange them in accordance with each of
five levels. At each level there is
have effects common to all levels and specially
digital for each level. In this
In this case, these sounds will be:
General:
0. falling bodies
1. Clicking glasses at the end of the level
2. + life
3. loss of life
4. end of time
5. punch or kick
6. kick after jumping
7. finishing off the enemy
8. roundhouse kick to the crotch or
knee
9. jump up
10. diagonal jump
First level:
11. motorcycle (11)
12. motorcycle kick (12)
13. hammer swing (13)
Second level:
14. pimp shot (11)
15. aunt hits with a baton (12)
16. you hit with a baton (13)
17. aunt’s cry when falling (14)
Third level:
18. hatchet swing (11)
Fourth level:
19. growl of a dog when attacked (11)
20. dog squealing when dying (12)
Fifth level:
21. forehead strike (11)
22. boss kills with his forehead (12)
23. hit with a stick (13)
24. soundvictories. (14)
Remembering some cool action movies from
game consoles, let's add sound
falling bodies (number 0).
In addition to sounds, we also need music in the menu and
into levels.
Next, you should either hack the game and
wonder that all these effects can be
twist and then pick them up, or vice versa
- first find the effects, and then
hack the game - you decide for yourself.
III
SUBSTREAMING OF SOUNDS AND MELODIES
Before selecting sounds and melodies,
you must remember the MANDATORY three
to them, based on the capabilities
"GS":
1. The "GS" memory can ONLY contain
ONE .MOD file along with 255 effects,
or just one .MOD file without effects,
or only effects without a .MOD file. Voz-
possible, in the next version of the ROM for "GS"it will be possible to keep
there is more than one module in "GS" memory, but
while this is not the case, we must take into account this inconvenience
dostvo.
2. The total amount of memory occupied by
effects and/or .MOD file must not exceed
114688 bytes, although when practically
all "GS" owners will have a dis-
memory expansion up to 512K, it will be possible
adapt games only for 466K, and
for now it’s better to make combined versions
112/466K, as done in ZYNAPS.
3. .MOD file must be only 4-color
nal, not 8, otherwise
half of the channels will simply be skipped.
4. The .MOD file should not contain samples with
short (less than 1Kb) cycle (loop),
otherwise "GS" may play music incorrectly
language If there are such samples, then they should be
"to break apart", i.e. lengthen the cycle in non-
how many times can this be done in music?
editors or write the program yourself
mku on Speccy. (Perhaps she will be in
appendix in the next issue - approx.
ed.)
5.For the game menu it is better to take a 4-channel
nal module, and for levels 3 or even
2-channel, because in other channels
you need to play the effects, and if there
children's music, then it will sound fitfully -
mi.
6. The sample in "GS" must be loaded without
title, otherwise at the beginning of the sound there will be
a click or some nonsense.
Now let's talk about the structure of the samples.
I will give the most common ones
32-bit computer types of samples are
files with the extension .IFF, .SMP, .SND,
.WAV, etc. The last two files are go-
digitizations from a microphone or CD, and two
the first - samples consisting of two hours -
tey: header and data block (sound itself)
GS only needs the data block, and the header
the wok needs to be trimmed. In the file .IFF the title
wok occupies the first 104 bytes, in others
samples the title may have a different
length and data. I recommend taking the files
only withextension.IFF, (i.e. the most
whatever the usual sample from MODs)
from the title of which you can extract non-
which sample characteristics:
Offset from the beginning of the sample:
+22,+23 - start of the loop in the sample (here and
then the most significant byte comes first, then -
junior)
+26,+27 - loop length
+102,+103 - the length of the sample itself without restrictions
head
In order to sample the format .IFF
could be used in "GS" as
ve sound effect, you need to work on it
carry out the following three operations:
1) Trim header: first 104 bytes.
"GS" doesn't need it, and "GS" will accept it
as part of the sample, which will affect the
sound
2) In the remaining sample, add to each
home byte number 128 - this is necessary
to change the sign.
3) Write a modified sample to
disk - it is ready for further use
Vania.
Now a little about where to get it
effects and module. Effects (tools)
can be taken from music ed. DIGITAL STUDIO.
(They actually sound pretty clean
chat, just played on AY and COVOXe
creaky)
Another source is computers IBM PC and
AMIGA. Here you can find everything you need
become from several CDs, which usually
but not only the modules are recorded, but also the bi-
library of effects, it’s hard to find the one you need
CD is very difficult.
Another method is to order music from a known
whom musician.
There is another way - to steal eff-
effects and modules straight from toys. Not-
despite some immorality of this
This method has a number of advantages:
Firstly, all music and effects are not
large in size, which is for "GS" with
112k is extremely important.
Secondly, as a rule, games are voice-acted
whether professional musiciansprofessional
national equipment, so the quality
yours is at the highest level, which cannot be said about
piles of modules on CD collections, where 90%
- an outright anti-music flame.
Thirdly, from one game you can tear
a whole mountain of effects and several melodies.
Fourthly, almost 90% of games are
launch 1989-1995 have easy to withstand
effects, 30% use .MOD chalk-
dii and out of these 30% somewhere from 60% of their games
can be fished out.
In many games, music and effects are
in separate directories and use them
does not pose any problems. But in
in most cases, software developers for-
insured themselves against hackers, and pulled out
music and effects from such programs where
more difficult. In this case, they can
special programs can: Exotic Rip-
reg, Pro-Wizard, Hunter (AMIGA) - allows
They can “listen” to the entire computer memory
after the reset, write down any part of the pa-
memory and looks for the .MOD file itself; Camera
(IBM PC) - allows, without leaving the game,
unsubscribe any portion of memory. Unsubscribed-
New areas of memory must be loaded into music.
editor Fast Tracker Ver.N (IBM PC)
or Pro-tracker Ver.N (Amiga), cut
the necessary samples and write them down in the form .IFF-
file. Also in the editor you can make
perform a variety of operations on samples
lamy: add echo, mix non-
how many samples in one, mute, etc.
Then using various converters
files are transferred to Spectrum, you can
use: ZxWord Copy MS-DOS>TR-DOS,
IS-DOS, Hobeta(IBM PC),ZxShell(AMIGA,
(c) X-Trade).
There are many games, especially new ones,
where it’s impossible to rip out even samples -
they are either stored in some clever
non-standard format, or in general
xorens. In some games (Desert
Strike, AMIGA) music is torn out, but
all music samples are corrupted.
As a rule, such protections are practically
you can't hack it right away, so it's better to do this
quit the game immediately and find another one.
When all the effects and melodies are selected,
you should check their total length for
each load, and if it exceeds
1024*112 bytes, then necessarysome
cut samples and/or shorten the melody,
or tools in it, or remove the empty
patterns that are sometimes encountered
are. In addition, it is advisable to leave
"GS" memory reserve: 2048 bytes per module,
and from 80 to 256 bytes for each game
effect - perhaps the new version of the ROM is -
will require for better quality
water of sound. However, by the time
a ROM version will be released with the following requirements,
probably most will already have "GS" with
466K, so these wishes can be lost
normalize
Next, each effect is auditioned and
select the note with which it will be played
play. In every background music
is unoccupied or least used
desired channel - this is the channel we will go to
display effects.
IV HACKING IPRA
Let's return to our TARGET RENEGAD.
Let's agree that we will hack it with
using STS 5.1. First let's make a version
game that will have to be played repeatedly
load together with STS. We select a place in
memory, where we hide the resident - this can-
there may be some unnecessary text,
interrupt vector table (if the computer
ter this will allow), points table or
just unused memory, thoughgov-
Well, it gets erased during the game, etc.
n. Next, we look to see if the game uses
RAM 7, where the STS usually sits. We find
what Target Renegade (TR) loads there-
The last level, i.e. gaming card
th fields and graphics of this level. Prognosis
reduce (for now) this level and we will complete
take the liberty of the first four.
Then we begin the search for the already voiced
ny effects. Note that all effects
are voiced for the beeper, and the melodies and playback
fish for AY. In STS we look for any output in
port 254 or (C) - several found
...
NNNNN XOR A
OUT(254),A
...
- this is immediately discarded, and one:
...
62701 LD A,0
XOR 24
OUT(254),A
...
- this is exactly what you need. These commands
belong to a program fragment, the answer is
responsible for sound output:
...
62696 LD A,0
DEC A
JR NZ,62719
62701 LD A,0
XOR 24
OUT(254),A
LD (62702),A
62710 LD DE,54576
INC DE
LD (62711),DE
LD A,(DE)
62719 LD (62697),A
...
So, you can see that in cell 62697 there is
a counter is displayed that accounts for the frequency output
conducted sound, and in cells 62711, 62712
- address of the delay table, i.e. tables
the sound itself. Let's look for where else they meet -
All links to addresses 62697 and 62711, are found
let's take a piece of the subroutine:
...
62565 LD HL,(62711)LD A,(HL)
LD (62697),A
LD IY,16432
...
graphics output
...
62696 LD A,0
...
Next is the known part of the program
and subroutine:
62549 LD A,(HL)
LD DE,(62711)
LD A,(DE)
OR A
JR Z,62561
LD A,E
CP L
RET NC
62561 LD (62711),HL
RET
Reinitialization is in progress from address 62565
sound every game cycle, and from the address 62549
there is a sound initialization program.
Exactlythis program is called like
as soon as an event occurs
which needs to be voiced. Then we'll find
Links to this subroutine:
in brackets - effect number
...
57507 CALL NZ,62549 (1)
...
58403 CALL 62549 (11)
...
58462 CALL 62549 (12)
...
58613 CALL NC,62549 (19)
...
59032 CALL 62549 (14)
...
60643 JP 62549 (6)
...
60679 CALL 62549 (13,15,16,18,23)
...
60874 CALL 62549 (7)
...
61087 JP 62549 (kick,5)
...
61294 CALL 62549 (hit in the face
player in the fifth level-
no, let's just take it
punch, but
lower note,5)
...
61449 CALL 62549 (21,22)
...
61492 CALL 62549 (just a hand blow, 5)
...
61789 CALL 62549 (knee strike, 8)
...
62361 CALL 62549 (roundhouse kick, 8)
...
Note that before calling62549re-
hyster pair HL the address of the table is placed
effect faces, i.e. we can in the future
use HL for your needs.
Now we need to determine which effects
The found addresses match. For this-
there's nothing left to do but pass
the entire game from start to finish, putting an end to
stop at 62549. In addition, you will need
having eternal life, which is desirable
find in advance.
All that remains is to find effects and music for AY
(2,3,4) and unvoiced events (0,9,10,
17,19,20,24).
Without any problems we find the subprogram
mu, initializing the musical accompaniment
driving under AY at the address 23912,and address
sa from which it is called, and in
The battery number is set to the music:
A=1 - loss of life or the game has started
A=2 - time up, loss of life
A=3 - level passed
A=4 - not used in the game
A=5 - music for level 1
A=6 - music for level 2
A=7 - music for the 3rd level
A=0 - music in the menu
It is more difficult to find unvoiced effects.
You'll have to work hard here. If
you can’t find the right place in the program right away,
you'll have to look for it by trial and error.
side For example, you need to find a jump:
Trim keyboard poll, find poll
"up" and "fire" keys, remember
what system variables are set?
are found when pressing these keys, we find
links to them and watch the program for
these links, we put them in suspicious
places of the breakpoint, we finally find:
...
60516 LD HL,60545 ;diagonal jump
JR 60524
60521 LD HL,60601 ;jump up
60524 LD A,248
...
We find other effects in the same way.
There are a few more points to consider:
First: sound (11) for the call beeper
is in a loop, for "GS" you need to call it
only once and mute when
A man was knocked off a motorcycle. So it's necessary
find the place of the “death” of the motorcycle, look
in what cases does the program reach
addresses 58403, where in the loop it is called
the sound of a motorcycle engine. A little earlier we found
Let's check for the presence of a motorcycle:
...
58350 BIT 7,(HL)
JP NZ,59145
...
At address 59145 there is a subroutine
"death" of the motorcycle. In addition, it is necessary
Please note that if you press the button
pauses, the motorcycle must also be turned off, and
when released, start again.
Secondly: let us find the fall of bodies - in
program it is before death
player (after all, he first falls, then
alreadythrows away his skates):
...
59828 RET M
LD (IY+18),0
LD (IY+4),0
LD A,(IY+14)
LD HL,59999
OR A
...
If the program went further than the command
RET M, means the body fell. We have
two sounds - directly falling
yellow body and the scream of the fallen aunt
2nd level. Responsible for both of these events
only one part of the program, which means we
it is necessary to somehow distinguish between these co-
existence - it will be very unusual to hear
a woman's scream when a pimp falls or
the player himself. Here you should pay attention
attention to the register pair IY - it
indicates the current system variables
general object. For players IY=53770 and
IY=53792, for everyone else this can
be arbitraryvalues with steps equal to
nym22, starting from IY=53814. Knowing this
You can create an algorithm like this:
Check the current level if it is not
is equal to 2, then perform the effect 0.
If level =2, then check IY -
if IY=53792, or IY=53770, or IY=
pimp system variables, then you-
complete effect 0, otherwise
the lady fell - you need to perform the effect 17.
Now you need to find out IY the pimp -
register pairIY from game to game can
be different, so we can't like
in the case of players, rely on infection
her known values of the pair IY. How
only a new object comes into play, it
"own" register pair is assigned
IY, which is released upon his death
for the next object. Note that when
appears on the screen, the pimp shoots, and
no one else in the game can do this except him
maybe. This is what we will use: when first
in the same shot we remember IY - with it and
we will compare the current IY in the subroutine
frame of the fall of the body, and in case of dying
pimp change the remembered IY, say
to 0, or another deliberately false address,
which IY during the game never
will accept (the same value should be all
while the pimp is not in the game). If IY
do not change, then after (or before) death
pimp some chicks will fall with
the sound with which men fall.
In addition, there is another way to identify
object fication. The object can be "recognized"
according to its unique meanings
system variables, for example by number
sprite or the address of the sprite that/s
must be in the systemvariables
current object (this is how they differ
enemies in the game among themselves "FROST BYTE"),
but this technique implies more
prolonged digging of the program, getting into
those corners of it that cannot be voiced
have nothing to do with it, in a word -
this is best used when you need to
communicate with each other a large number
objects, for example in"ZYNAPS"e. A to "TR"
you can stop at the first method.
After all the effects have been completed
got together, we need to determine the places where
you can load levels and the corresponding
general musical accompaniment.
Then we find all the loading routines
ki and sound output in order to then
place your subroutines at their addresses
frames.
Yes, I almost forgot, it is important to determine
interrupts are enabled or disabled
the moment of initialization of a sound -
this will need to be taken into account later.
V
GENERAL'IZATION
(Full description"GS" workers read in
ZF#6, ZX-NEWS'26 - editor's note)
First, a little about “GS” itself. "GS"
works independently of the processor, except
moments when you need to transmit/receive
data to/from "GS". "GS" communicates with the computer
by yuter via two ports:
- data port 179 (GSDAT);
- command port 187 (GSCOM).
Send command to "GS":
SENDCOM LD A,COMMAND
COMMAND OUT (GSCOM),A ; send a command
WAITCOM IN A,(GSCOM) ;we are waiting for the
RRCA ;mandate not executed
JR C,WAITCOM ;
RET
Send data (byte by byte) to "GS":
SENDDAT LD A,DATA
SENDDATA OUT (GSDAT),A ;send data
WAITDAT IN A,(GSCOM) ;waiting for "GS"
RLCA ;will accept data
JR C,WAITDAT
RET
Get data (byte by byte) from "GS":
GETDAT IN A,(GSDAT) ;take data
GETDAT1 IN A,(GSCOM) ;wait for "GS"
RLCA ;will prepare the following
JR NC,GETDAT1 ;current data
RET
Here is a list of commands that will be useful
when voicing:
#30 - load module
#38 - load sample
#D1 - open stream#D2 - close the stream
#31 - run the module
#39 - launch the current sample
#32 - stop the module
#2E - set the desired sample
for the selected sample:
#40 - set note (36-71)
#41 - set volume (0-64)
#42 - set finetune (0-255)
#45 - set priority (0-255)
#48 - set the beginning of the loop
#49 - set the end of the loop
#80 - play sample in channel 0
#81 - play sample in channel 1
#82 - play sample in channel 2
#83 - play sample in channel 3
#88-#8B -similar, but with a given note
#90-#93 -similar, but with a given volume
bone
#98-#9В -similarly, but with specified parameters
that and volume
#3A - stop the effect in a given channel-
le
#2В - set the sample master volume
#2A - set the master volume of the module
#23 - get the number of "GS" pages
#F3 - "warm" restart "GS"
#F4 - reset "GS"
For more information about all these commands, see
in the magazine ZX-FORMAT #6. And I'll explain how
work with two undocumented
commands #48 and#49 for the selected sample
pla . We need these commands to
scoring a motorcycle engine. We need to
carry 24-bit sample data: for
commands #48 this will be the beginning of the loop
relative to the beginning of the sample body, for
commands #49 - the end of the loop relative
the beginning of the sample body. And this is what it looks like
in practice:
SETLOOP LD A,K1
OUT(GSDAT),A
LD A,#48 ;or #49
CALL COMMAND
LD A,K2
CALL SENDDATA
LD A,K3
JP SENDDATA
where K1, K2 and K3 - low, middle and
the most significant eight bits of a 24-bit value
readings.
Now a few words about the glitch in the "GS" ROM
When the motorcycle ceases to exist
tion, we need the command #3A.
Before using it in GSDAT enters -
this channel mask, the sample in which we need
to stop. It was envisaged that
the number of the bit set in the mask will be
correspond to the channel... But due to non-
large inaccuracy in the ROM, which is likely
but it will be fixed, it turned out that it was necessary
completely different correspond to a given channel
bits:
for channel 0 - bit 7;
for channel 1 - bit 6;
for channel 2 - bit 5;
for channel 3 - bit 4;
and it should have been:
for channel 0 - bit 0;
for channel 1 - bit 1;
for channel 2 - bit 2;
for channel 3 - bit 3;
Therefore, for ROM version 1.04 the original
first option, and for subsequent ones - the second
option. So that there are no overlaps betweenROM versions, you need to make the following mask:
for channel 0 - set bits 0 and 7;
for channel 1 - set bits 1 and 6;
for channel 2 - set bits 2 and 5;
for channel 3 - set bits 3 and 4;
For example, you need to “shut up” the effects in
channels 0 and 3:
LD A,128+1+16+8 ;channel mask
OUT(GSDAT),A
LD A,#3A
JP COMMAND
And one more trouble - keep in mind that
wait loop (WAITCOM, WAITDAT, GETDAT1
etc.) readiness of "GS" to receive after-
further commands or data may continue
compress from several beats to three beats
ten (!) clock cycles of the main processor (re-
The "turbo" press doesn't matter!). All for
depends on what kind of work is currently
ment performs "GS" - the more effective
tov, and even against the backdrop of rich music,
the slower "GS" becomes. If
ignore the wait loop or stop
twistinto it some long-lasting
program for saving process time
ra, then “GS” will become ill: in the best case
tea he will begin to wheeze and lie to the music, in
worst case - shut up or hang up the program
Well, there is only one cure here - reset. This is
immediately give up such tricks -
owls For the same reason (so that "GS" does not
wheezed) interruptions while addressing
"GS" should be banned.
Now let's determine how much sweat
We need memory. For "GS" driver
you need somewhere 1K (without any distortions,
as in ZYNAPS); under bootloader with advance
calculated tables of loading parameters
compressed blocks about 1-1.5K; under system-
TR-DOS variables, stack buffer
and the decompressor needs about 1K; under
replaced program code - byte 300-500;
under the driver access program "GS"
we need another 100 bytes; for initialization
programs - about 200-300 bytes; buffer
to load - the more the better
(from 16 to 40K).
In most games, incl. in "TR" its
free space required for the driver
"GS" and there is no bootloader, so you have to
use 128K pages. To one country
Mitsu can be stuffed with everything listed above -
new, including the splash screen, except for the buffer under
loading - the remaining
running pages. In addition, in the remainingpages can store some of the effects,
so as not to constantly load them from disk
- as anyone wants.
So, in the address space all these
subroutines can be placed like this:
23296-49151: access to the "GS" driver
23296-65535, gam page = 0: initialization
games; replaced program code
49152-65535, gam page = 1,3,4,6,7: drive
ver "GS"; loader of levels, effects and
music; TR-DOS variables; gaming for-
rate; different buffers.
Now in more detail about all these subroutines -
rammah.
Driver "GS" with subroutines
settings for each sound.
Let's place all this from the address 49152. Te-
first you need to select the input parameters -
There are several options here.
1. For example, in HL you can specify the address
sound installation routines:
...
????? LD HL,EFFECT1 ...
49152 JP (HL)
...
EFFECT1 ...
It is most convenient to use this one
option - takes up little space, quickly
is running. But difficulties arise when
working with groups of sounds, then it’s more convenient
use the second option.
2. You can specify not a subroutine, but
effect number (register L) and sound note
nia (registrationН), then:
????? LD HL,45*256+1
...
49152 LD A,L
OR A
JR Z,EEFECT0
SR 1
JR Z,EFFECT1
SR 2
JR Z,EFFECT2
...
SR 255
JR Z,LOADING
RET
EFFECT0...
EFFECT1 ...
EFFECT2...
LOADING...
It is best, of course, to use per-
new option.
In subroutines EFFECT... first
before checking (if necessary) you need
whether to output sound (for example, a motorcycle in
in a cycle) and which one (if for several
sounds one entry point). Then install
The current effect is cleared, set
note (possible with random values in
permissible limits or to different objects -
us to take our notes), the ka-
playback cash (if necessary), priority
(if necessary), volume (optional), pa-
loop parameters (if it is a motorcycle), fine-
tune (no practical value) and
etc. The effect output routine itself
might look like this:
EFFECT1 LD A,R ;sound can be heard on
AND 3 ;different notes
ADD A,L
LD L,A
LD C,1
JP PLAYFX
;subroutine for playing effects in
;one of the channels - priority is not used
;zooms.
;C=channel number, L=effect number, H=note
PLAYFX LD A,L
CALL SETFX
LD A,H
CALL NOTEFX
LD A,L
OUT (GSDAT),A ;FX number
LD A,#80
OR C
OUT (GSCOM),A
J.P.W.C.
;subroutine using priority
;ta FX, playback in any channel, in
;which plays the effect with less gain
;respect or not played at all
;C=priority, L=effect number, H=note
PRIOFX LD A,L
CALL SETFX
LD A,HCALL NOTEFX
LD A,C
OUT (GSDAT),A ;priority
LD A,#45
OUT (GSCOM),A
CALL WC
LD A,L
OUT (GSDAT),A ;FX number
LD A,#39
OUT (GSCOM),A
JR W.C.
;The "GS" driver itself is a set of routines for
;work with him
STOPMD LD A,#32 ;stop module
OUT (GSCOM),A
CALL WC
STOPFX LD A,255 ;stop
OUT (GSDAT),A ;all effects
LD A,#3A
OUT (GSCOM),A
JR W.C.SETFX OUT (GSDAT),A ;номер FX
LD A,#2Е
OUT (GSCOM),A
JR WC
NOTEFX OUT (GSDAT),A ;номер ноты FX
LD A,#40
OUT (GSCOM),A
JR WC
VOLFX OUT (GSDAT),A ;громк. FX
LD A,#41
OUT (GSCOM),A
WC IN A,(GSCOM) ;ожидание работы
RRCA ;команды
RET NC
JR WC
... ;остальные команды
Обращение к драйверу "GS".
It might look something like this (for
first option):
GENERAL PUSH AF
PUSH Sun
PUSH DE
LD VS,32765
LD A,17
OUT(C),A
CALL 49152 ;call FX installation
LD A,16
LD VS,32765
OUT(C),A
POP DE
ROR Sun
POP AF
RET
Please note that interrupts must
be disabled - this is necessary for
running glitches with memory and wheezing "GS".
Initializing the game.
Here you should scatter everything compiled
standardized blocks of codes at their addresses;
calculate the location of all parts of the game on
disk, knowing their length and sequenceavailability of accommodation; remember system
TR-DOS variables. In addition, it is necessary
change everything necessary in the game itself
places for us, for example, in the original:
...
59029 LD HL,54719 ;shot sound
CALL 62549 ;sound initialization
...
We insert the following fragment into the initialization
(suitable for the first option):
...
LD HL,EFFECT...
LD (59030),HL
LD HL,GENERAL
LD (59033),HL
...
Some parts of the game were not intended
terms for voicing, for example, death
dogs:
...
59711 LD A,(IY+20)
SR 13
59716 JP Z,58728 ;the dog died
...
Then we insert the command into the initialization
JP DOGDIE:
...
LD A,195
LD (59716),A
LD HL,DOGDIE
LD (59717),HL
...
The subroutineDOGDIEis in the substituted
nom game code.
Replaced game code.
This is a set of routines that cannot be
can be inserted into the game code due to their size
measures, and executing the substituted commands
games and voiceover teams. For under-program DOGDIE it will be:
DOGDIE JP NZ,59719; the dog did not die
PUSH HL
LD HL,EFFECT...
;DI ;if interrupts are enabled,
;put a ban
CALL GENERAL
;EI
POP HL
JP 58728
Level loader.
Here you decide for yourself how to organize it.
vat. The only advice is to take it under
loading the maximum possible quantity
your memory (the entire game can be temporarily
remember in pages 128K) for more information
loading system; try to use
only entry point TR-DOS 15635,and if
I really want to use a turbo loader,
make it possible to turn it off,
otherwise your game will not loadwith
hard drive (SMUC), on some controls
drives and on other versions of TR-
DOS.
otherwise your game will not load from
hard drive (SMUC), on some controls
drives and on other versions of TR-
DOS.
VI
CONCLUSION
I hope that much of the above
will be useful to you. If something is not clear,
or did I miss anything - call me
in the evening after 21.00 by phone.
(812) 262-00-89 (Mikhail).
Please do not use soap in SPbZX-NET and Vector
quit - I haven’t climbed the net for a long time, but my
the address on Genius BBS was bent along with
the BBS itself.
Share your thoughts about the article