Unlimit - 5 methods for finding and installing endless lives in games from Max Iwamoto.

ZX Paper #01
 ╔════════════════════╗        
            ║ UNLIMIT ║        
            ╚════════════════════╝        
                                          
                                          
                    IN SEARCH OF ETERNAL LIFE                      
                                          
 CopyRight (c) 1992-95 yu Max Iwamoto/Code Busters         
                                                                
                                                                
 This description began at the moment when    
 one of us came up with the idea to make a game that    
 we could not pass, lifeless.  This idea came to fruition    
 success, which gave impetus to attempts to make lifeless    
 other games and take a closer look at their structure and specifics.    
 As a result, we developed practical techniques for working with    
 games (working on a game here (and further) means    
 the desire to make this game immortal). These techniques were    
 divided into five groups, which are presented below.         
    All of the following have been tested on MSX2 and    
 ZX-Spectrum using programs such as: Debugger,    
 Mons4, STS3.3, etc. This version of the article is designed    
exclusively for ZX-Spectrum users.                     
 This manual is intended for users    
 practically without at least minimal experience working in    
 Z80 assembler, but knowing its basic commands.               
    We offer several methods for your consideration    
 with the help of which we managed to remake more than one hundred games.      
                                                                
                                                                
METHOD 1                               
 -------                               
 COME TO YOUR HEAD BY YOURSELF                    
                                                                
                                                                
    Try to search for the cell in which it is stored    
 number of lives and increase them (it must be borne in mind that    
 that in some games the number of lives displayed on the screen is    
 1, and sometimes even 2, less than what is loaded), and also,    
 Never bet 255 lives, because... if they suddenly add you    
 life, then the life counter will become 0 and Game will begin    
 Over.Most often, entry occurs through    
 battery(hereinafter referred to as Ass):                                        
                                                                
 #6000: 3E 03 A,#03 ; life in Ass             
     #6002: 32 00 C0 LD (#C000),A ; Ass in cell (#C000)    
                                                                
 Change the number at address #6001 if the number of lives in    
 game has increased, which means cell (#C000) contains the quantity    
 lives.   In addition to entering through the battery, there is    
 many others, here are some of them:                        
                                                                
 #6000: 21 00 C0 LD HL,#C000 ; #C000 in HL              
     #6003: 36 03 LD (HL),#03 ; life in (#C000)         
                                                                
 In this case, the cell with which you need to work further is    
 (#C000).                                                       
    Some companies have taken more cunning paths.  They    
 They use several more ways to load lives into cells:    
                                                                
 #6000: 21 03 00 LD HL,#0003 ;upload 3 to HL        
     #6003: 7D LD А,L ; to Ass from L              
     #6004: 32 00 C0 LD (#C000),A ; Ass in cell (#C000)    
                                                                
                                                                
     #6000: 21 03 00 LD HL,#0003 ; upload 3 to HL        
 #6003: 22 00 C0 LD (#C000),HL ; HL to cell (#C000)     
                                                                
 DE, BC, IX, IY can be used instead of HL, but for    
 The main thing for us is to find a cell containing life. If the cell    
 found, then you need to go to the subtraction search stage    
 life, because  if we just increase the value as needed    
 cell it may happen that even a large number    
 There are not enough lives to complete the game. Search for subtraction    
 Let's look at life using the example of the game BUGGY RANGER:                 
                                                                
    We have 3 lives. We find:                             
                                                                
 #B9EB: 3E 03 A,#03 ; life in Ass             
     #B9ED: 32 38 A9 LD (#A938),A ; Ass in cell (#A938) We are looking for calls to cell (#A938). We find:                   
                                                                
     #B959: 21 38 A9 LD HL,#A938 ;                         
     #B95C: 35 DEC (HL) ; life subtraction        
                                                                
    After we remove DEC (HL) (#00 in #B95C) game    
 becomes immortal, but to pass it practically    
 is impossible, because the energy is subtracted too quickly.    
 Therefore, we begin to look for what is entered in the cells next to    
 cell of life, i.e. (A9??):                                    
                                                                
 #B9FF: 3E FF A,#FF ; energy in Ass           
     #BA01: 32 39 A9 LD (#A939),A ; Ass in cell (#A939)    
                                                                
 Next we find:                                              
                                                                
     #C72C: 3A 39 A9 LD A,(#A939) ; energy in Ass           
     #C72F: 95 SUB L ; subtracting As           
     #C730: 32 39 A9 LD (#A939),A ; Assinto an energy cell    
     #C733: B7 OR A ; displaying flags      
     #C734: CA 38 C7 JP Z,#C738 ; jump if 0         
     #C737: C9 RET ; return if not 0      
     #C738: AF XOR A ; Reset               
     #C739: 32 39 A9 LD (#A939),A ; energy cells          
     #C73C: C3 59 B9 JP #B959 ; transition to procedure    
                                      ; life subtraction         
                                                                
 Similarly, you can detect fuel and weapons: cells    
 (A93A) and (A941). Subtracting them is similar to subtracting lives.     
                                                                
    The next method is that in the cell    
 It is not the number itself that is placed, but the ASCII code of this number.    
 For example, if a toy has 3 lives, then the corresponding    
 the cell will be placed not 3, but #33, that is, the code for the number 3.    
 Accordingly, there cannot be lives in this toy.    
 greater than 9, and also the check is carried out not at 0, but at    
 ASCII code code 0, i.e. at #30. Loved using this one    
 way of Bob Pape, who wrote R-TURE, DRAGON BREED,    
 TUSKER. Let's take TUSKER as an example:There are 3 lives in this game.  So we start looking    
 entering 3 into Ass, but we find nothing. Next we begin    
 look for the entry of the ASCII code of the number 3 - #33. We find:            
                                                                
 #94D4: 3E 33 A,#33 ; life in Ass             
     #94D6: 32 21 FE LD (#FE21),A ; Ass in cell (#FE21)    
                                                                
 Now we begin to look for calls to the cell (#FE21):          
                                                                
     #96E0: 3A 21 FE LD A,(#FE21)                            
     #96E3: 3D DEC A                                   
 #96E4: 32 21 FE LD (#FE21),A                            
     #96E7: FE 30 SR #30                                  
     #96E9: CA 01 84 JP Z,#8401                              
                                                                
 DEC And we have suspicions, they intensify when    
 we see CP #30 (check for number code 0). Now to the address    
 #96E3 set #00 and run the program. And lastly, the most cunning and most rarely encountered    
 way.  Data about life, energy, stage number are stored in    
 TV programs, and are sent to their addresses by the command    
 LDIR.   Moreover, most often they are stored after    
 forwarding routines!                                        
                                                                
 #6000: 21 0C 60 LD HL,#600C ; Source                
     #6003: 11 00 C0 LD DE,#C000 ; Receiver                
     #6006: 01 03 00 LD BC,#0003 ; how much to send       
     #6009: ED IN LDIR ; send 3 bytes       
     #600B: C9 RET ; from #600C to #C000        
     #600C: 03 INC BC ; forwarded            
     #600D: 01 12 00 LD BC,#0012 ; data                  
                                                                
 In this case, the cell where you should look for life is    
 (#C000).  In (#C001) the stage number is stored, and in (#C002)    
 the amount of energy the player has.                                     
                                                                
 But there is another type of game. These are games where    
 several players.  Everything is done in them throughindex    
 addressing, i.e.   to subtract the lives of both players    
 the same subroutine is used.  But if the game    
 represents a fight (for example Street Fighter), then removing    
 you will perform the procedure for subtracting energy (or lives)    
 Both players will become immortal and the game will lose its meaning. In this    
 In this case, it is necessary to remove not the subtraction command, but the inversion    
 to the subtraction procedure for one of the players.                   
                                                                
    It is necessary to mention one more common mistake.    
 If the number of some objects in a toy is the same, then    
 entry into cells is often in the same place.    
 For example, in the game Saigon Combat Unit 1 the number of lives is exactly    
 the number of grenades and the entry is nearby:                      
                                                                
     #A823: 3E 04 A,#04 ; number 4 in Ass           
     #A825: 32 20 B0 LD (#B020),A ; to the cell of lives         
 #A828: 32 21 B0 LD (#B021),A ; into the grenade cell         
                                                                
                                                                
 But in fact, the most cruel thing is when the creators of the gameprovide that someone will immortalize their game.    
 For example, this was done in the game EQUINOX. Life in it    
 are disabled quite simply, but if you reassign    
 keyboard before playing or you won't have enough time to    
 passing the level, then starting the game from the beginning you will see that    
 lives are deducted. If this happens, then you need to look    
 storing the subtraction command code in memory. In this case    
 we find:                                                    
                                                                
                                                                
 #7006: 3E 35 A,#35 ; DEC command code (HL)    
     #7008: 32 B1 9B LD (#9BB1),A ; And at the address #9BB1,      
                                      ; is exactly where it is     
                                      ; subtraction of lives!!!     
                                                                
 Therefore, if you put #00 instead of #35 at address #7007,    
 then the game will become absolutely endless.                          
                                                                
                                                                
METHOD 2 -------                               
 SEARCHING FOR ZERO CHECK                        
                                                                
                                                                
    If the first method did not lead to positive    
 results, then you should look to check the cells for zero,    
 clean it up and see what happens. Next I    
 Here are some of the possible options:                      
                                                                
 #6000: 3A 00 C0 LD A,(#C000) ; to As from (#C000)        
     #6003: B7 OR A ; set checkboxes       
     #6004: CA 00 80 JP Z,#8000 ; go if A=0       
                                                                
 Remove the transition at address #6004 and see what    
 will happen. If the number of lives on the screen = 0, and the inscription Game    
 Over has not yet appeared, which means the cell of lives is in this    
 case - (#C000).  You don’t have to search for subtraction,    
 because Game Over will never come anyway, but you need to remember    
 that the check for 0 can be in several places. Let's look at a few more examples:                          
                                                                
     #6000: 21 00 C0 LD HL,#C000 ; #C000 in HL              
     #6003: A6 AND (HL) ; set checkboxes       
     #6004: CA 00 80 JP Z,#8000 ; go if 0         
                                                                
 Remove the transition at address #6004.                            
                                                                
     #6000: 3A 00 C0 LD A,(#C000) ; to As from (#C000)        
     #6003: D6 00 SUB #00 ; set checkboxes       
     #6005: CA 00 80 JP Z,#8000 ; go if A=0       
                                                                
 Remove the transition at address #6005. Very often instead of SUB    
 #00 meets SUB #01 and thus 2 are killed at once    
 hare - life is subtracted and equality to zero is checked. B    
 In this case, you must put SUB #00 instead of SUB #01 and    
 life will become eternal.METHOD 3                               
 -------                               
 SEARCHING FOR REDUCING LIVES                       
                                                                
                                                                
    You can also search for subtractions of any cells, among them    
 It may turn out to be a subtraction of life.  Subtraction can    
 performed by any subtraction commands, for example: DEC N,    
 SUB N, where N - A, B, C, D, E, H, L, (IX+??), (IY+??), HL,    
 DE, B.C. But there are also more perverted methods:                  
                                                                
     #6000: 2A 00 C0 LD HL,(#C000) ; to HL from memory          
     #6003: 11 01 00 LD DE,#0001 ; how much to take        
     #6006: ED 52 SBC HL,DE ; reduce HL by DE      
     #6008: 7C LD A,H ; isn't it 0 for us?         
     #6009: 5B OR L ; in HL?                  
     #600A: CA 00 80 JP Z,#8000 ; if 0, then Game Over    
     #600D: 22 00 C0 LD (#C000),HL ; otherwise we will continue...    
                                                                
It is necessary to put #00 at address #6004. And some    
 make it even more unusual:                                          
                                                                
 #6000: 3E FF LD A,#FF ; life in L, #FF in Ass    
     #6003: 85 ADD A,L ; increase L by A=-1     
     #6004: 32 00 C0 LD (#C000),A ; return Ass to (#C000)
                                                                
 In this case, you can put #00 at address #6001 or    
 at #6002.                                               
                                                                
                                                                
METHOD 4                               
 -------                               
 USING GAME FEATURES                   
                                                                
                                                                
    Many games add lives for    
 anything, then you can find their addition.  What if we    
 we know that there cannot be more than N lives, thencan be found    
 check for this number, determine the cell from which it is    
 take it and go to method 1, for example:                         
                                                                
 #6000: 3A 00 C0 LD A,(#C000) ; to As from (#C000)        
     #6003: FE 09 SR #09 ; equality check 9    
     #6005: CA 00 80 JP Z,#8000 ; leave if = 9          
                                                                
 The cell to which you should look for access is (#C000).        
                                                                
 Often the number of lives (weapon number, shots, etc.)    
 depicted in numbers.  You can find a place in the program where    
 they are printed. Let's consider several possible options:      
                                                                
 #6000: 7E LD A,(HL) ; load to A from (HL)   
     #6001: D6 01 SUB #01 ; decrease Ass by 1      
     #6003: 27 DAA ; decimal correction     
     #6004: CD ?? ??    CALL PRINT ; print procedure call  
                                                                
     #6000: 7E LD А,(HL) ; load to A from (HL)   
     #6001: C6 30 ADD A,#30 ;add #30 to Ass      
     #6003: CD ?? ??    CALL PRINT ; print procedure call  
                                                                
 In the second example we add #30 to Ac and get    
 a number equal to the ASCII code of this number and print as usual    
 text message.  In this case, you need to look for the number    
 located in HL.                                              
                                                                
    The point of the following method is to find the place where    
 the inscription Game Over is printed (or any other that    
 indicates the end of the game). It is likely that    
 somewhere nearby there is a check of some cell for    
 zero. If not, then continue searching.                    
                                                                
                                                                
METHOD 5                               
 -------                               
                                                                
                                                                
    This is a method of so-called shock therapy or a method"scientific poke" successfully used by our science in    
 for 73 years. It is used for digging games in which    
 There is absolutely nothing to grab onto. Most often these are games with graphical    
 indicator of life.   This method is based on your    
 intuition and consists in creating an artificial clue: you    
 “travel” in the MONITOR according to the game listing and relying on intuition    
 change certain sections of the program that respond to    
 in your opinion, for lives, attempts, things, etc.                  
                                                                
                                                                
    It should be noted that the above addresses and    
 the examples are purely conventional. In your game these addresses may be    
 others, moreover: these examples can be intertwined in    
 the most bizarre combinations.                                 

Share your thoughts about the article