[stella] Object handler organisation

Subject: [stella] Object handler organisation
From: Manuel Polik <cybergoth@xxxxxxxx>
Date: Thu, 07 Nov 2002 10:05:42 +0100
Hi there!

Once again more coding advice is needed.

Well, since I slowly started loosing control over all my 
objects behaviour, I started reorganizing it in some OOP 
like manner. I've now one giant loop, calling the 
required subroutines for every object. It looks like 
this:

;-------------------------------------------------------
;INTELLIGENT MOVE AND HANDLE ALL SPACE OBJECTS 
;-------------------------------------------------------

    LDX #MAXOBJECTS-1

MoveNextSprite
    LDA sprtsizetype,X
    CMP #$28
    BMI NoShipSprite
    JSR GeneralMovement     ; General Movement
    JSR JoystickMovement    ; Move according to Joystick
    JSR CollisionDetection  ; Handle Collision with shot
    JSR ZMovement           ; Move along the z axxis
    JSR HandleShip          ; Special ship handling
    JMP Spritedone          ; Done

NoShipSprite
    CMP #$20
    BMI NoMeteorSprite
    JSR GeneralMovement     ; General Movement
    JSR JoystickMovement    ; Move according to Joystick
    JSR CollisionDetection  ; Handle Collision with shot
    JSR ZMovement           ; Move along the z axxis
    JSR HandleMeteor        ; Special meteor handling
    JMP Spritedone          ; Done

NoMeteorSprite
    CMP #$18
    BMI NoShotSprite
    JSR JoystickMovement    ; Move according to Joystick
    JSR CollisionDetection  ; Handle Collision with shot
    JSR ZMovement           ; Move along the z axxis
    JSR HandleShot          ; Special shot handling
    JMP Spritedone          ; Done

NoShotSprite
    CMP #$10
    BMI NoExplosionSprite
    JSR HandleExplosion     ; Special Explosion Handling
    JSR JoystickMovement    ; Move according to Joystick
    JMP Spritedone          ; Done

NoExplosionSprite
    CMP #$0F
    BMI NoVoidObject
    LDA xpos,X         ; Simplified void object handling
    ORA #%10000000
    STA xpos,X
    BMI Spritedone          ; Done

NoVoidObject
    CMP #$0C
    BMI NoMothership
    JSR JoystickMovement    ; Move according to Joystick
    JSR GeneralMovement     ; General Movement
    JSR CollisionDetection  ; Handle Collision with shot
    JMP Spritedone          ; Done

NoMothership
    JSR HandleLaser         ; Special Laser Handling
    JSR GeneralMovement     ; General Movement

Spritedone
    DEX
    BPL MoveNextSprite
    RTS

;-------------------------------------------------------

Well, now most of my objects are either Meteors or 
Ships...

Assuming I have 10 meteors onscreen, I'd do this 10 
times:

    JSR GeneralMovement     ; General Movement
    JSR JoystickMovement    ; Move according to Joystick
    JSR CollisionDetection  ; Handle Collision with shot
    JSR ZMovement           ; Move along the z axxis
    JSR HandleShip          ; Special ship handling

So, the JSRs alone cost me 600 extra cycles!

Aaargh!

Though I already started optimizing that for speed, any 
ideas for quicker solutions are highly appreciated... 
:-)

Here's a few from me:

- One idea from is duplicating the loop, having one 
optimized for the meteors scene and one for the normal 
combat scene.

- One other is to duplicate

    JSR JoystickMovement    ; Move according to Joystick
    JSR CollisionDetection  ; Handle Collision with shot
    JSR ZMovement           ; Move along the z axxis

Into one single sub, to speed up the ship & meteor 
handling. But at the moment I can't grant that those 
three subs won't later need any object specific 
specialization...

Both of these would also eat huge ROM heaps.

- Next idea was to write a status byte first.

I could then chain the subs and let them start with
something like

LSR executeThisPart
BCC NextPart

But this is still 8-9 cycles per part, too + plus 
overhead. Plus there'll most likely be more than 8 
different subs - I think they already are.

Hm... well... :-)

Greetings,
	Manuel

----------------------------------------------------------------------------------------------
Archives (includes files) at http://www.biglist.com/lists/stella/archives/
Unsub & more at http://www.biglist.com/lists/stella/


Current Thread