Jump to content
  • Advertisement
  • entries
    222
  • comments
    606
  • views
    591505

Scripted attacks

Sign in to follow this  
benryves

1175 views

Attack patterns can now be simply scripted as a list of 4-byte chunks, covering which enemy to use, the delay between adding them, how many of them to add, the delay between them and a delay after adding the last one.
For example, this:
.db $04,16,8,100
...would add 8 enemies of type $04, adding one every 16 game ticks and then pausing for 100 game ticks after adding the last one then progressing to the next scripted enemy.
To support this, I've added some new per-level parameters, covering:
  • Attack type (random or 'scripted') with delay between enemies or a pointer to script to follow.
  • Speed of enemies.
  • Speed of landscape scrolling (used very little - bonus levels with no enemies/mines scroll past extra-quickly).
  • Maximum number of mines.
Using all the above, I can easily configure each level's attack patterns quite simply.
Doing this has identified a number of bugs (mostly where new enemies were being initialised without clearing out a particular byte, which means that certain sequences would start in odd places) which have now been ironed out.

I have also picked up work again on my music system for the game. I have a very bad 12-bar-blues demo running with it - I need to find a decent pitch-to-period table as the one I calculated in Excel sounds slightly wrong. There are also some minor-ish reset bugs (the first time in-game a note is played the instrument is full volume for one frame plus some minor synch issues). Looks like I'll have to write the music in Notepad, though - who'd have thought that getting low-level access to the sound card was so bloody difficult in anything other than C (and I'm damned if I'm going to have to write a GUI system for the Windows console, and Win32 is too mucky to deal with for such as simple application). This is great fun, as you can imagine - take, for example, this: (the 12-bar-blues demo for the testbed for the music system)

; Demo tune

demo_tune:

; Instrument table:

.db 2 ; Number of instruments
.dw simple
.dw vib

; Sequence table:

.db 6 ; Number of sequences
.dw run_c
.dw run_f
.dw run_g
.dw bass_c
.dw bass_f
.dw bass_g

; Tune!

.db %00000000, %00000000
.db %00000011, %00000001
.db %10000000, %10001000

.db %00000000, %00000000
.db %10000000, %10001000

.db %00000001, %00000000
.db %00000100, %00000001
.db %10000000, %10001000

.db %00000000, %00000000
.db %00000011, %00000001
.db %10000000, %10001000

.db %00000010, %00000000
.db %00000101, %00000001
.db %10000000, %10001000

.db %00000001, %00000000
.db %00000100, %00000001
.db %10000000, %10001000

.db %00000000, %00000000
.db %00000011, %00000001
.db %10000000, %10001000

.db %00000000, %00000000
.db %10000000, %10001000

.db %11111111

; Sequences:

run_c:
.db 1

.db (144>>8)+%01000000
.db (144&%11111111)
.db $10

.db (112>>8)+%01000000
.db (112&%11111111)
.db $10

.db (93>>8)+%01000000
.db (93&%11111111)
.db $10

.db (82>>8)+%01000000
.db (82&%11111111)
.db $10

.db (77>>8)+%01000000
.db (77&%11111111)
.db $10

.db (82>>8)+%01000000
.db (82&%11111111)
.db $10

.db (93>>8)+%01000000
.db (93&%11111111)
.db $10

.db (112>>8)+%01000000
.db (112&%11111111)
.db $10

.db %11000000

run_f:
.db 1

.db (105>>8)+%01000000
.db (105&%11111111)
.db $10

.db (82>>8)+%01000000
.db (82&%11111111)
.db $10

.db (68>>8)+%01000000
.db (68&%11111111)
.db $10

.db (60>>8)+%01000000
.db (60&%11111111)
.db $10

.db (56>>8)+%01000000
.db (56&%11111111)
.db $10

.db (60>>8)+%01000000
.db (60&%11111111)
.db $10

.db (68>>8)+%01000000
.db (68&%11111111)
.db $10

.db (82>>8)+%01000000
.db (82&%11111111)
.db $10

.db %11000000

run_g:

.db 1

.db (93>>8)+%01000000
.db (93&%11111111)
.db $10

.db (72>>8)+%01000000
.db (72&%11111111)
.db $10

.db (60>>8)+%01000000
.db (60&%11111111)
.db $10

.db (53>>8)+%01000000
.db (53&%11111111)
.db $10

.db (49>>8)+%01000000
.db (49&%11111111)
.db $10

.db (53>>8)+%01000000
.db (53&%11111111)
.db $10

.db (60>>8)+%01000000
.db (60&%11111111)
.db $10

.db (72>>8)+%01000000
.db (72&%11111111)
.db $10

.db %11000000


bass_c:
.db 0
.db (307>>8)+%01000000
.db (307&%11111111)
.db 8
.db (144>>8)+%01000000
.db (144&%11111111)
.db 8
.db %11111111

bass_f:
.db 0
.db (224>>8)+%01000000
.db (224&%11111111)
.db 8
.db (105>>8)+%01000000
.db (105&%11111111)
.db 8
.db %11111111

bass_g:
.db 0
.db (198>>8)+%01000000
.db (198&%11111111)
.db 8
.db (93>>8)+%01000000
.db (93&%11111111)
.db 8
.db %11111111

; Instruments:

simple:
.db 4 ; Length
.db 255
.db -64

.db 8
.db 0
.db 32

.db 1
.db 255
.db 0

.db 0

vib:

.db 2
.db 128
.db 50
.db 2
.db 128
.db -50
.db 2
.db 128
.db 50
.db 1
.db 128
.db -50
.db 1
.db 128
.db 50
.db 3
.db 128
.db -50

.db 10
.db 128
.db 14
.db 0


Thankfully, the assembler can handle me sticking sums in rather than hard-coded values in places making things a lot simpler... but it's still a bit mucky. Ah well. There is no noise channel set up, either, so no krch-krch-krch style beats from the white-noise generator as such.
Sign in to follow this  


1 Comment


Recommended Comments

I must let you know how much in awe that I am over your programming. It's been what, a little over a month on this project right? Damn good work.

Share this comment


Link to comment

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
  • Advertisement
×

Important Information

By using GameDev.net, you agree to our community Guidelines, Terms of Use, and Privacy Policy.

GameDev.net is your game development community. Create an account for your GameDev Portfolio and participate in the largest developer community in the games industry.

Sign me up!