enemy hp documentation

This commit is contained in:
Michael Miceli 2023-11-02 21:22:42 -04:00
parent 64c118612d
commit 237c99a184
2 changed files with 132 additions and 14 deletions

View File

@ -669,6 +669,14 @@ Fire ring emitted from #$10 Boss Eye (Garmakilma).
Other Names: Boss Gemini, Boss Metal Helmet Other Names: Boss Gemini, Boss Metal Helmet
![sprite_68](sprite_library/contra_sprites/sprite_68.png?raw=true "sprite_68")
![sprite_69](sprite_library/contra_sprites/sprite_69.png?raw=true "sprite_69")
![sprite_6a](sprite_library/contra_sprites/sprite_6a.png?raw=true "sprite_6a")
![sprite_6b](sprite_library/contra_sprites/sprite_6b.png?raw=true "sprite_6b")
![sprite_6c](sprite_library/contra_sprites/sprite_6c.png?raw=true "sprite_6c")
**ENEMY HP**: 10
No attributes exist for this enemy. No attributes exist for this enemy.
#### Logic #### Logic
@ -682,12 +690,12 @@ not for anything with the y velocity, but rather to control speed of x movement
and keep track of x distance from initial position respectively. and keep track of x distance from initial position respectively.
* `ENEMY_FRAME` - offset into `boss_gemini_sprite_tbl`, which contains the exact * `ENEMY_FRAME` - offset into `boss_gemini_sprite_tbl`, which contains the exact
sprite code: `sprite_68`, `sprite_69`, `sprite_6b`, `sprite_6c`. sprite code: `sprite_68`, `sprite_69`, `sprite_6a`, `sprite_6b`, `sprite_6c`.
* `ENEMY_VAR_1` - initial x position * `ENEMY_VAR_1` - initial x position
* `ENEMY_VAR_2` - timer after being hit - #$10 down to #$00 * `ENEMY_VAR_2` - timer after being hit - #$10 down to #$00
* `ENEMY_VAR_3` - whether or not the boss gemini's health is low (less than * `ENEMY_VAR_3` - whether or not the boss gemini's health is low (less than
#$07). Used to show a red brain instead of a green one. #$07). Used to show a red brain instead of a green one.
* `ENEMY_VAR_4` - actual representation of ENEMY_HP * `ENEMY_VAR_4` - actual representation of ENEMY_HP, initialized to #$0a
* `ENEMY_X_VELOCITY_FRACT` - always #$80 (.50). Used with * `ENEMY_X_VELOCITY_FRACT` - always #$80 (.50). Used with
`ENEMY_Y_VELOCITY_FRACT` to move gemini by 1 every #$02 frames `ENEMY_Y_VELOCITY_FRACT` to move gemini by 1 every #$02 frames
* `ENEMY_X_VELOCITY_FAST` - x direction of boss gemini * `ENEMY_X_VELOCITY_FAST` - x direction of boss gemini
@ -713,6 +721,15 @@ Red and blue molecule-like orbs that are created by #$1c Boss Gemini (Godomuga).
They seek the player for a determined amount of time. If after set number of They seek the player for a determined amount of time. If after set number of
seeks (#$13), then the bubble pair will continue in last direction. seeks (#$13), then the bubble pair will continue in last direction.
![sprite_6d](sprite_library/contra_sprites/sprite_6d.png?raw=true "sprite_6d")
![sprite_6e](sprite_library/contra_sprites/sprite_6e.png?raw=true "sprite_6e")
![sprite_6f](sprite_library/contra_sprites/sprite_6f.png?raw=true "sprite_6f")
![sprite_70](sprite_library/contra_sprites/sprite_70.png?raw=true "sprite_70")
![sprite_71](sprite_library/contra_sprites/sprite_71.png?raw=true "sprite_71")
![sprite_72](sprite_library/contra_sprites/sprite_72.png?raw=true "sprite_72")
**ENEMY HP**: 1
#### Attributes #### Attributes
* `.... .xxx` - specifies how frequently the bubbles will spin. Initialized in * `.... .xxx` - specifies how frequently the bubbles will spin. Initialized in
@ -733,6 +750,16 @@ Value is an offset into `spinning_bullet_spin_tbl`.
Other Names: Blue Jumping Guy, Boss Blue Soldier, Blue Soldier Other Names: Blue Jumping Guy, Boss Blue Soldier, Blue Soldier
![sprite_85](sprite_library/contra_sprites/sprite_85.png?raw=true "sprite_85")
![sprite_86](sprite_library/contra_sprites/sprite_86.png?raw=true "sprite_86")
![sprite_87](sprite_library/contra_sprites/sprite_87.png?raw=true "sprite_87")
![sprite_88](sprite_library/contra_sprites/sprite_88.png?raw=true "sprite_88")
![sprite_89](sprite_library/contra_sprites/sprite_89.png?raw=true "sprite_89")
![sprite_8a](sprite_library/contra_sprites/sprite_8a.png?raw=true "sprite_8a")
![sprite_8b](sprite_library/contra_sprites/sprite_8b.png?raw=true "sprite_8b")
**ENEMY HP**: 1
#### Attributes #### Attributes
* `.... ..xx` - specifies initial position (see `red_blue_soldier_init_pos_tbl`) * `.... ..xx` - specifies initial position (see `red_blue_soldier_init_pos_tbl`)
@ -754,6 +781,14 @@ Other Names: Blue Jumping Guy, Boss Blue Soldier, Blue Soldier
Other Names: Red Shooting Guy, Boss Red Soldier, Red Soldier Other Names: Red Shooting Guy, Boss Red Soldier, Red Soldier
![sprite_8c](sprite_library/contra_sprites/sprite_8c.png?raw=true "sprite_8c")
![sprite_8d](sprite_library/contra_sprites/sprite_8d.png?raw=true "sprite_8d")
![sprite_8e](sprite_library/contra_sprites/sprite_8e.png?raw=true "sprite_8e")
![sprite_8f](sprite_library/contra_sprites/sprite_8f.png?raw=true "sprite_8f")
![sprite_90](sprite_library/contra_sprites/sprite_90.png?raw=true "sprite_90")
**ENEMY HP**: 1
#### Attributes #### Attributes
* `.... ..xx` - specifies initial position (see `red_blue_soldier_init_pos_tbl`) * `.... ..xx` - specifies initial position (see `red_blue_soldier_init_pos_tbl`)
@ -774,6 +809,8 @@ Other Names: Red Shooting Guy, Boss Red Soldier, Red Soldier
Other Names: Red Blue Soldier Generator Other Names: Red Blue Soldier Generator
**ENEMY HP**: n/a
Generates Garth and Rangel enemies following a pattern specified in Generates Garth and Rangel enemies following a pattern specified in
`red_blue_solider_data_tbl`. `red_blue_solider_data_tbl`.
@ -801,6 +838,10 @@ No attributes exist for this enemy.
Floats back and forth to allow players to jump higher in level. This enemy is Floats back and forth to allow players to jump higher in level. This enemy is
very similar to the moving flame enemy, which is also in the vertical level. very similar to the moving flame enemy, which is also in the vertical level.
![sprite_48](sprite_library/contra_sprites/sprite_48.png?raw=true "sprite_48")
**ENEMY HP**: n/a
#### Attributes #### Attributes
* `000` - platform starts out moving left at 1 unit per frame * `000` - platform starts out moving left at 1 unit per frame
@ -811,6 +852,10 @@ very similar to the moving flame enemy, which is also in the vertical level.
Flame that goes back and forth over bridge. This enemy is very similar to the Flame that goes back and forth over bridge. This enemy is very similar to the
floating rock platform enemy, which is also in the vertical level floating rock platform enemy, which is also in the vertical level
![sprite_49](sprite_library/contra_sprites/sprite_49.png?raw=true "sprite_49")
**ENEMY HP**: n/a
#### Attributes #### Attributes
* `010` - Flame starts out moving left at 1 unit per frame * `010` - Flame starts out moving left at 1 unit per frame
@ -820,10 +865,16 @@ floating rock platform enemy, which is also in the vertical level
Generates #13 Falling Rocks Generates #13 Falling Rocks
**ENEMY HP**: n/a
### 13 - Falling Rock ### 13 - Falling Rock
Other Names: Boulder Other Names: Boulder
![sprite_4a](sprite_library/contra_sprites/sprite_4a.png?raw=true "sprite_4a")
**ENEMY HP**: n/a
#### Logic #### Logic
* `ENEMY_VAR_1` - y position of most recent ground collision * `ENEMY_VAR_1` - y position of most recent ground collision
@ -832,6 +883,8 @@ Other Names: Boulder
Other Names: Boss Mouth, Gromaides Other Names: Boss Mouth, Gromaides
**ENEMY HP**: 32
#### Logic #### Logic
* `ENEMY_VAR_1` - dragon HP, used to keep track of HP between opening and * `ENEMY_VAR_1` - dragon HP, used to keep track of HP between opening and
@ -851,6 +904,11 @@ for each arm. Each side then spawns 4 additional dragon arm orb enemies. Loops
through 5 different attack patterns. This is the most complicated enemy in the through 5 different attack patterns. This is the most complicated enemy in the
game. game.
![sprite_7a](sprite_library/contra_sprites/sprite_7a.png?raw=true "sprite_7a")
![sprite_7b](sprite_library/contra_sprites/sprite_7b.png?raw=true "sprite_7b")
**ENEMY HP**: 16
#### Attributes #### Attributes
* `.... ...x` - dragon arm orb side * `.... ...x` - dragon arm orb side
@ -913,8 +971,17 @@ simplify defining the enemy vars.
No attributes exist for this enemy. No attributes exist for this enemy.
**ENEMY HP**: n/a
### 11 - Ice Grenade ### 11 - Ice Grenade
![sprite_74](sprite_library/contra_sprites/sprite_74.png?raw=true "sprite_74")
![sprite_75](sprite_library/contra_sprites/sprite_75.png?raw=true "sprite_75")
![sprite_76](sprite_library/contra_sprites/sprite_76.png?raw=true "sprite_76")
![sprite_77](sprite_library/contra_sprites/sprite_77.png?raw=true "sprite_77")
**ENEMY HP**: n/a
No attributes exist for this enemy. No attributes exist for this enemy.
#### Logic #### Logic
@ -925,6 +992,8 @@ No attributes exist for this enemy.
Other Names: Dogra Other Names: Dogra
**ENEMY HP**: 71
#### Attributes #### Attributes
* `.... ...x` - tank attack delay index into `tank_attack_delay_tbl` * `.... ...x` - tank attack delay index into `tank_attack_delay_tbl`
@ -949,16 +1018,22 @@ Other Names: Dogra
Other Names: Pipe Joint, Ice Joint Other Names: Pipe Joint, Ice Joint
![sprite_c4](sprite_library/contra_sprites/sprite_c4.png?raw=true "sprite_c4")
**ENEMY HP**: n/a
No attributes exist for this enemy. No attributes exist for this enemy.
### 14 - Alien Carrier ### 14 - Alien Carrier
Other Names: Guldaf, Boss UFO Other Names: Guldaf, Boss UFO
**ENEMY HP**: 32
No attributes exist for this enemy. No attributes exist for this enemy.
Appears randomly and creates flying saucers (enemy type - #$15) and drop bombs Appears randomly and creates flying saucers (enemy type - #$15) and drop bombs
(enemy type - #$16). One of the few enemies that use BG_PALETTE_ADJ_TIMER to (enemy type - #$16). One of the few enemies that use `BG_PALETTE_ADJ_TIMER` to
create a fading in effect. create a fading in effect.
#### Logic #### Logic
@ -972,6 +1047,12 @@ create a fading in effect.
Other Names: Mini UFO Other Names: Mini UFO
![sprite_7c](sprite_library/contra_sprites/sprite_7c.png?raw=true "sprite_7c")
![sprite_7d](sprite_library/contra_sprites/sprite_7d.png?raw=true "sprite_7d")
![sprite_7e](sprite_library/contra_sprites/sprite_7e.png?raw=true "sprite_7e")
**ENEMY HP**: 1
No attributes exist for this enemy. Direction of flying saucer is determined by No attributes exist for this enemy. Direction of flying saucer is determined by
Alien Carrier. Alien Carrier.
@ -979,6 +1060,10 @@ Alien Carrier.
Bombs dropped from the Alien Carrier Bombs dropped from the Alien Carrier
![sprite_22](sprite_library/contra_sprites/sprite_22.png?raw=true "sprite_22")
**ENEMY HP**: 1
## Level 6 - Energy Zone ## Level 6 - Energy Zone
### 10 - 12 - Fire Beam ### 10 - 12 - Fire Beam
@ -1011,20 +1096,29 @@ These 4 enemy types are very similar. They differ in the direction they fire
Other Names: Gordea, JJ, Jumping Joey, Jumping Jack Flash, Giant Boss Robot, Other Names: Gordea, JJ, Jumping Joey, Jumping Jack Flash, Giant Boss Robot,
Giant Armored Soldier, Boss Giant Giant Armored Soldier, Boss Giant
No attributes exist for this enemy. His health is calculated based on player's ![sprite_b7](sprite_library/contra_sprites/sprite_b7.png?raw=true "sprite_b7")
`PLAYER_WEAPON_STRENGTH` value. The formula is below ![sprite_b8](sprite_library/contra_sprites/sprite_b8.png?raw=true "sprite_b8")
![sprite_b9](sprite_library/contra_sprites/sprite_b9.png?raw=true "sprite_b9")
![sprite_ba](sprite_library/contra_sprites/sprite_ba.png?raw=true "sprite_ba")
![sprite_c3](sprite_library/contra_sprites/sprite_c3.png?raw=true "sprite_c3")
**ENEMY HP**:
``` ```
(PLAYER_WEAPON_STRENGTH * #$08) + #$40 (PLAYER_WEAPON_STRENGTH * #$08) + #$40
``` ```
| Weapon | Strength | | Weapon | Strength | HP |
|---------|----------| |---------|----------|----|
| Default | 0 | | Default | 0 | 64 |
| M | 2 | | M | 2 | 80 |
| F | 1 | | F | 1 | 72 |
| S | 3 | | S | 3 | 88 |
| L | 2 | | L | 2 | 80 |
No attributes exist for this enemy. His health is calculated based on player's
`PLAYER_WEAPON_STRENGTH` value. The formula is below
#### Logic #### Logic
@ -1054,6 +1148,8 @@ Other Names: Saucer, Spiked Disk Projectile
Other Names: Moving Claw Other Names: Moving Claw
**ENEMY HP**: n/a
Mechanical claw similar to arcade claw machines Mechanical claw similar to arcade claw machines
#### Attributes #### Attributes
@ -1082,6 +1178,8 @@ Other Names: Spiked Wall
A spiked wall that rises from the ground in front of the player A spiked wall that rises from the ground in front of the player
**ENEMY HP**: 16
#### Attributes #### Attributes
* `.... ..xx` - bits 0 and 1 are an index into `rising_spike_wall_delay_tbl`, * `.... ..xx` - bits 0 and 1 are an index into `rising_spike_wall_delay_tbl`,
@ -1111,6 +1209,8 @@ rising spiked wall by using offset 16 into `collision_code_f_adj_tbl`.
Similar to Rising Spiked Wall (#$11), but taller and stationary Similar to Rising Spiked Wall (#$11), but taller and stationary
**ENEMY HP**: 16
#### Attributes #### Attributes
* `.... ..xx` - index into `spiked_wall_destroyed_data_tbl` * `.... ..xx` - index into `spiked_wall_destroyed_data_tbl`
@ -1130,12 +1230,19 @@ rising spiked wall by using offset 16 into `collision_code_f_adj_tbl`.
Other Names: Mine Cart Generator Other Names: Mine Cart Generator
**ENEMY HP**: n/a
### 14 - Mining Cart ### 14 - Mining Cart
Other Names: Moving Cart Other Names: Moving Cart
Moving mining cart that can be destroyed. Moving mining cart that can be destroyed.
![sprite_2a](sprite_library/contra_sprites/sprite_2a.png?raw=true "sprite_2a")
![sprite_2b](sprite_library/contra_sprites/sprite_2b.png?raw=true "sprite_2b")
**ENEMY HP**: 3
#### Attributes #### Attributes
This enemy is only ever created by #$13 (Mining Cart Generator), so enemy This enemy is only ever created by #$13 (Mining Cart Generator), so enemy
@ -1151,6 +1258,11 @@ Other Names: Immobile Cart
Stationary mining cart that can start moving when a player lands on it Stationary mining cart that can start moving when a player lands on it
![sprite_2a](sprite_library/contra_sprites/sprite_2a.png?raw=true "sprite_2a")
![sprite_2b](sprite_library/contra_sprites/sprite_2b.png?raw=true "sprite_2b")
**ENEMY HP**: 3
#### Attributes #### Attributes
* #$80 - the cart should be destroyed when colliding with background (only * #$80 - the cart should be destroyed when colliding with background (only
@ -1162,12 +1274,16 @@ Stationary mining cart that can start moving when a player lands on it
Other Names: Armored Door With Siren Other Names: Armored Door With Siren
**ENEMY HP**: 32
### 17 - Mortar Launcher ### 17 - Mortar Launcher
Other Names: Boss Mortar Other Names: Boss Mortar
Launches mortar shots (enemy type #$0b) on the boss screen. Launches mortar shots (enemy type #$0b) on the boss screen.
**ENEMY HP**: 8
### Attributes ### Attributes
* `...x` - initial attack delay. bit 0 set is a #$10 delay, bit 0 clear is a * `...x` - initial attack delay. bit 0 set is a #$10 delay, bit 0 clear is a
@ -1194,6 +1310,8 @@ one mortar launcher is destroyed, or if 20 waves of soldier attack have
occurred, then even if the player is close to the left side, soldiers will occurred, then even if the player is close to the left side, soldiers will
randomly be generated on the left side. randomly be generated on the left side.
**ENEMY HP**: n/a
#### Logic #### Logic
* `ENEMY_VAR_1` - number of soldiers to generate for current attack wave * `ENEMY_VAR_1` - number of soldiers to generate for current attack wave

View File

@ -5519,7 +5519,7 @@ boss_gemini_routine_02:
tay ; transfer random number between 0 and 3 to offset register tay ; transfer random number between 0 and 3 to offset register
lda boss_gemini_attack_delay_tbl,y ; load random attack delay lda boss_gemini_attack_delay_tbl,y ; load random attack delay
sec ; set carry flag in preparation for subtraction sec ; set carry flag in preparation for subtraction
sbc $08 ; subtract multiplied weapon strength from attack delay. the strong the weapon, the shorter the attack delay sbc $08 ; subtract multiplied weapon strength from attack delay. the stronger the weapon, the shorter the attack delay
sta ENEMY_ATTACK_DELAY,x ; set delay between attacks sta ENEMY_ATTACK_DELAY,x ; set delay between attacks
lda #$1d ; a = #$1d (#$1d = spinning bubbles) lda #$1d ; a = #$1d (#$1d = spinning bubbles)
jsr generate_enemy_a ; generate #$1d enemy (spinning bubbles) jsr generate_enemy_a ; generate #$1d enemy (spinning bubbles)
@ -5594,7 +5594,7 @@ boss_gemini_routine_02:
; ENEMY_FRAME is #$00, #$01, or #$02, but if ENEMY_VAR_3 is #$01, then #$03 is added so ; ENEMY_FRAME is #$00, #$01, or #$02, but if ENEMY_VAR_3 is #$01, then #$03 is added so
; ENEMY_VAR_3 = #$00 -> sprite_68, sprite_69, sprite_6a ; ENEMY_VAR_3 = #$00 -> sprite_68, sprite_69, sprite_6a
; ENEMY_VAR_3 = #$01 -> sprite_68, sprite_6b, sprite_6c (hit by bullet, or almost dead, red brain) ; ENEMY_VAR_3 = #$01 -> sprite_68, sprite_6b, sprite_6c (hit by bullet, or almost dead, red brain)
; sprite_68, sprite_69, sprite_6b, sprite_6c ; sprite_68, sprite_69, sprite_6a, sprite_6b, sprite_6c
boss_gemini_sprite_tbl: boss_gemini_sprite_tbl:
.byte $68,$69,$6a ; ENEMY_VAR_3 is #$00 .byte $68,$69,$6a ; ENEMY_VAR_3 is #$00
.byte $68,$6b,$6c ; ENEMY_VAR_3 is #$01 .byte $68,$6b,$6c ; ENEMY_VAR_3 is #$01