English Amiga Board


Go Back   English Amiga Board > Coders > Coders. Contest > Coders. Entries

 
 
Thread Tools
Old 15 January 2019, 23:04   #61
mcgeezer
Registered User
 
Join Date: Oct 2017
Location: Sunderland, England
Posts: 2,702
Tonight I added more sound into the game...

I had to disable Cycle Exact mode to get the recording to work...my system isn't quite powerful enough.

I tried to run this on my real A1200 tonight and I have a memory leak somewhere which I need to fix - very frustrating!

http://109.228.4.199/rygarsound.mp4

Geezer
mcgeezer is offline  
Old 16 January 2019, 19:52   #62
mcgeezer
Registered User
 
Join Date: Oct 2017
Location: Sunderland, England
Posts: 2,702
In other news I had a need to bust out the real hardware again tonight so thought I would make use of the Monster Joystick my wife got me for xmas...

Here's a video running on my real A1200 http://109.228.4.199/rygarhw1.mp4

If any of you want the ADF I've used then drop me a PM.

Just a quick note as well to say a big thank you to @seuden for sending me an a1200 accellerator card which I will put to good use for testing! (Will let you know how it goes mate! ).

Geezer

Edit - a few requests for the ADF... http://109.228.4.199/RYGARFFS.adf
You'll need about 1800Kb of chip ram.
mcgeezer is offline  
Old 19 January 2019, 23:53   #63
mcgeezer
Registered User
 
Join Date: Oct 2017
Location: Sunderland, England
Posts: 2,702
Update here as I've been working on the consistency in the game...
Things like redrawing the scene when Rygar loses a life and fixing the sanctuary scene when entering a new round.

Here's my current bug list...
  • 001 Platforms do not redraw after loss of life. [Fixed]
  • 002 Items and Stones are not initialised at game start
  • 003 Sometimes platforms appear on opposite side of screen
  • 004 Getting killed next to platform does not end life (locks the game)
  • 005 Santuary carousel not syncronised with Rygar
  • 006 Sprites are not clipped on Y Axis
  • 007 Player restarts at beginning of round after first [Fixed]
  • 008 Sometimes background colours do not work after round starts
  • 009 Scrolling off by 1 issue when canvas is redrawn (after losing a life) [Fixed]
  • 010 Top left of tomb tile appears in tile maps
  • 011 Getting killed and entering carousel somehow resurrected Rygar
  • 012 If Rygar dies then he needs to be placed on top of an object
  • 013 Small GFX glitch over lives counter
  • 014 Drones sometimes cause Rygar to jump instead of death [Understood]
  • 015 Rygar death sequence starts after game restart
  • 016 Objects on canvas draw has crap behind them.

If you spot more bugs then feel free to reply!

[ Show youtube player ]

Few more Ronnies then off to bed!

Geezer
mcgeezer is offline  
Old 24 January 2019, 23:39   #64
mcgeezer
Registered User
 
Join Date: Oct 2017
Location: Sunderland, England
Posts: 2,702
Unfortunately I haven't been feeling well since the weekend so not much coding has been done, however mostly fighting fit again I was able to get back to coding tonight so I've added the scoring and bonus routines.

Still lots of bugs but it's nearly there.... probably another hour work and it'll be sorted.

Note - The sound is not right due to the speed of my systems ability to record and WINUAE running.

http://109.228.4.199/rygarscore.mp4


[ Show youtube player ]
mcgeezer is offline  
Old 27 January 2019, 21:26   #65
mcgeezer
Registered User
 
Join Date: Oct 2017
Location: Sunderland, England
Posts: 2,702
Here's another hardware performance test video...

On this one I've fixed a shit load of bugs but also brought back the hardware sprites.

I get lots of comments like "Why does it need AGA?", "It should run on OCS?", "Why does it need so much memory?"...

An OCS/ECS machine can't do this - simples.

This means I can start adding the other enemies so things should pick up quite quickly now.

[ Show youtube player ]


http://109.228.4.199/RygarHardwareTest.mp4

Note - If you listen you can probably here the rain bouncing off the conservatory and my little Boy in the background!

Geezer
mcgeezer is offline  
Old 02 February 2019, 22:47   #66
mcgeezer
Registered User
 
Join Date: Oct 2017
Location: Sunderland, England
Posts: 2,702
Had a bit of time tonight to add in the small Rhino. Also added in is better enemy collision detection, you'll notice the enemies all respect the environment now like obstacles and platforms.

http://109.228.4.199/rygarrhino.mp4

Geezer
mcgeezer is offline  
Old 03 February 2019, 22:07   #67
mcgeezer
Registered User
 
Join Date: Oct 2017
Location: Sunderland, England
Posts: 2,702
If you like Game of Thrones you'll like this update.

http://109.228.4.199/herebedragons.mp4

[ Show youtube player ]

PS. Personally I can't stand the fucking pile of shit program but each to their own.

PPS. Although I don't mind the sexy time scenes in it

PPPS. Yes I know there are bugs... bugs bugs and more bugs... but I'll fix them at the right time... fox now we need a working game.
mcgeezer is offline  
Old 06 February 2019, 22:44   #68
mcgeezer
Registered User
 
Join Date: Oct 2017
Location: Sunderland, England
Posts: 2,702
After a night of frustration trying to resolve a bug when an enemy hits an obstacle and Rygar moves the obstacle off either left or right, I'm going to rewrite the core routine.

I'm not happy with the current routine and it's just become a pile of shit code as I've added things in the wrong order.

Specifically here's what I mean...

1) I coded the enemies spawning from left to right of where Rygar is
2) I then coded the grab/charge code for the Rhinos/Drones
3) I then coded the destroy/stun when Rygar jumps on an enemy
4) I then added the obstacle/platform collision routine of the enemy

The upshot... major bugs!

Here's how I should have done it.

1) coded the enemies spawning from left to right taking into account the obstacles/platforms and where Rygar is in the map
2) added the walking from left to right of the enemy in the map
3) coded the destroy/stun when Rygar jumps on an enemy
4) coded the grab/charge code

Pretty much everything backward!

For the coders ... here's how complex it is... (the worst code ever!)

Code:
ENEMY_RHINO_XPOS:		equ	500
ENEMY_RHINO_YPOS:		equ	114

RHINO_WALK_SPEED:		equ	14
;FRAMES_OFFSCREEN_BEFORE_DESTROYED:	equ	100		; Number of frames after which the sprite will disappear and be destroyed.

RHINO_STATUS_WALK_LEFT:		equ	1
RHINO_STATUS_WALK_RIGHT		equ	2
RHINO_STATUS_SWEEP_LEFT:	equ	3
RHINO_STATUS_SWEEP_RIGHT:	equ	4
RHINO_STATUS_BONES:		equ	5
RHINO_STATUS_STUN_LEFT:		equ	6
RHINO_STATUS_STUN_RIGHT:	equ	7
RHINO_STATUS_GRAB_LEFT:		equ	8
RHINO_STATUS_GRAB_RIGHT:	equ	9

RHINO_PROXIMITY_RANGE:		equ	64
RHINO_PROXIMITY_GRAB_SPEED:	equ	15
RHINO_GRAB_TIME:		equ	25


; Private Variables
RHINO_SPEED:			equ	32
RHINO_SWEEP_INDEX:		equ	34	; index in sine table
RHINO_TURNS:			equ	36	; Number of times the RHINO can turn to follow Rygar.
RHINO_GRABS:			equ	38	; True or False
						; This will configure the number of times the RHINO will attempt to run and grab Rygar.
						; if zero then the enemy is less dangerous.
RHINO_STUN_STATIC_TIMER:	equ	40
RHINO_WALK_DIRECTION:		equ	42	; Current walking direction.
RHINO_IN_PROXIMITY:		equ	44
RHINO_PROXIMITY_LEFT:		equ	46	; 
RHINO_PROXIMITY_RIGHT:		equ	48	; 


; Input
;d2=X Position of Enemy
;d3=Y position of Enemy
;a3 = Coordinates pointer x1,x2,y1,y2
; Output
;d6=Return value (-1 is collision)


RHINO_TO_DISKARM_COLLISION	MACRO
		move.l	d4,-(a7)
		move.l	d5,-(a7)
		move.w	d2,d4					; Check a 32x32 boundary from x1/y1
		move.w	d3,d5
		add.w	#22,d3					; 16x16 sprite.
		add.w	#32,d4
		add.w	#32,d5

		moveq	#0,d6
.eny_coll_loop:	tst.w	(a3)
		bmi.s	.eny_coll_exit
		cmp.w	2(a3),d2
		bgt.s	.eny_coll_next
		cmp.w	(a3),d4
		blt.s	.eny_coll_next
		cmp.w	6(a3),d3
		bgt.s	.eny_coll_next
		cmp.w	4(a3),d5
		blt.s	.eny_coll_next
		moveq	#-1,d6
		bra.s	.eny_coll_exit
.eny_coll_next:	addq.w	#8,a3
		bra.s	.eny_coll_loop
.eny_coll_exit:	move.l	(a7)+,d5
		move.l	(a7)+,d4
		ENDM


RHINO_TO_RYGAR_COLLISION	MACRO
		move.l	d4,-(a7)
		move.l	d5,-(a7)

		move.w	d2,d4					; Check a 32x32 boundary from x1/y1
		move.w	d3,d5
		add.w	#16,d3
		add.w	#32,d4
		add.w	#32,d5

		moveq	#0,d6
.ryg_coll_loop:	cmp.w	2(a3),d2				; Check X1 against Rygar X2
		bgt.s	.ryg_coll_next
		cmp.w	(a3),d4					; Check X2 against Rygar X1
		blt.s	.ryg_coll_next
		cmp.w	6(a3),d3				; Check Y1 against Rygar Y2
		bgt.s	.ryg_coll_next
		cmp.w	4(a3),d5				; Check Y2 against Rygar Y1
		blt.s	.ryg_coll_next
		moveq	#-1,d6
.ryg_coll_next:	nop
.ryg_coll_exit:	move.l	(a7)+,d5
		move.l	(a7)+,d4
		ENDM


HDL_RHINO:	
		SPRITE_INITIATE

		move.w	RHINO_TOGGLE,d2
		and.w	#1,d2
		bne.s	.spawn_right
.spawn_left:						; RHINO start x position
		move.w	#288,d2
		move.w	#RHINO_STATUS_WALK_LEFT,d3
		bra.s	.spawn

.spawn_right:	move.w	#10,d2
		move.w	#RHINO_STATUS_WALK_RIGHT,d3

.spawn:		move.w	d3,THIS_SPRITE_STATUS(a2)	; Set status
		move.w	d2,d4
		lsl.w	#SPRITE_MAG,d2
		move.w	d2,THIS_SPRITE_XPOS(a2)

		add.w	MAP_PIXEL_POSX,d4		; Set actual map x position of enemy sprite
		sub.w	#256,d4
		lsl.w	#SPRITE_MAG,d4
		move.w	d4,THIS_SPRITE_MAP_XPOS(a2)


		lsr.w	#SPRITE_MAG,d2
		move.w	d2,SPRITE_PLOT_XPOS(a1)
		move.w	#ENEMY_RHINO_YPOS,SPRITE_PLOT_YPOS(a1)
		clr.w	RHINO_SWEEP_INDEX(a2)

		move.w	#0,RHINO_TURNS(a2)
		move.w	#3,RHINO_GRABS(a2)
		move.w	#RHINO_WALK_SPEED,RHINO_SPEED(a2)
		clr.w	RHINO_IN_PROXIMITY(a2)
		move.w	#FRAMES_OFFSCREEN_BEFORE_DESTROYED,THIS_SPRITE_OFFSCREEN(a2)



.active:
		tst.w	SPRITE_DESTROY_END_ROUND(a2)
		bmi	.destroy_enemy


; These checks are only done when the enemy has been hit.
		cmp.w	#RHINO_STATUS_BONES,THIS_SPRITE_STATUS(a2)
		beq	.anim_bones
		cmp.w	#RHINO_STATUS_SWEEP_RIGHT,THIS_SPRITE_STATUS(a2)
		beq	.anim_sweep_rt
		cmp.w	#RHINO_STATUS_SWEEP_LEFT,THIS_SPRITE_STATUS(a2)
		beq	.anim_sweep_lt



; Test this enemy collided with the disk armour
		move.w	SPRITE_PLOT_XPOS(a1),d2
.check_proximity_range:
		move.w	RYGAR_XPOS,d3
		move.w	d3,d4
		sub.w	#RHINO_PROXIMITY_RANGE,d3
		add.w	#RHINO_PROXIMITY_RANGE,d4
		move.w	d3,RHINO_PROXIMITY_LEFT(a2)
		move.w	d4,RHINO_PROXIMITY_RIGHT(a2)
		
		cmp2.w	RHINO_PROXIMITY_LEFT(a2),d2
		bcs.s	.no_proximity
		tst.w	RHINO_IN_PROXIMITY(a2)				; Proximity already running
		bne.s	.no_proximity					; Yes... don't run again.
		tst.w	RHINO_GRABS(a2)					; Check how many grabs there are
		beq.s	.no_proximity					; zero so don't set grab 
		subq.w	#1,RHINO_GRABS(a2)
		move.w	#RHINO_GRAB_TIME,RHINO_IN_PROXIMITY(a2)

.no_proximity:
		move.w	SPRITE_PLOT_YPOS(a1),d3
		lea	DISKARM_COORDS,a3
		RHINO_TO_DISKARM_COLLISION
		tst.w	d6					; Did this sprite get hit with the disk armor
		bmi	.set_sweep_direction

		tst.w	RHINO_STUN_STATIC_TIMER(a2)
		bne.s	.go_left_or_right	

; Test this enemy collided with Rygar (the player)
		move.w	SPRITE_PLOT_XPOS(a1),d2
		move.w	SPRITE_PLOT_YPOS(a1),d3
		lea	RYGAR_COORDS,a3
		RHINO_TO_RYGAR_COLLISION

; Check if Rygar was falling here....

		tst.w	d6					; Did this sprite collide with Rygar?
		bmi	.check_collision_action

; These collision checks happen when the enemy is live.
.go_left_or_right:
		tst.w	THIS_SPRITE_STATUS(a2)
		beq	.exit

		lea	SPRITE_SCREEN_LIMITS_X,a3
		move.w	SPRITE_PLOT_XPOS(a1),d2
		cmp2.w	(a3),d2					; if within limit then do not subtract.
		bcc.s	.in_limit
		subq.w	#1,THIS_SPRITE_OFFSCREEN(a2)
		tst.w	THIS_SPRITE_OFFSCREEN(a2)
		bmi	.disable
		bra.s	.out_limit

.in_limit:	move.w	#FRAMES_OFFSCREEN_BEFORE_DESTROYED,THIS_SPRITE_OFFSCREEN(a2)
.out_limit:
		move.w	THIS_SPRITE_OFFSCREEN(a2),DEBUG_OFFSCREEN

		cmp.w	#RHINO_STATUS_WALK_LEFT,THIS_SPRITE_STATUS(a2)
		beq	.RHINO_left
		cmp.w	#RHINO_STATUS_WALK_RIGHT,THIS_SPRITE_STATUS(a2)
		beq	.RHINO_right
		bra	.exit

.check_collision_action:
		tst.w	RYGAR_FALLPREV_STATE
		bmi.s	.stun_or_destroy

		IFNE	DISABLE_ENEMY_COLLISION
		bra	.go_left_or_right
		ELSE


		bra.s	.set_rygar_death_sequence
		ENDC

		nop

.stun_or_destroy:
		tst.w	RHINO_STUN_STATIC_TIMER(a2)
		bne	.go_left_or_right

		;move.w	#-1,RYGAR_ROLLFALL_STATE
		clr.w	RYGAR_FALL_STATE			; Stop Falling
		move.w	#-1,RYGAR_JUMP_STATE			; Start Jumping	
		clr.w	RYGAR_SINE_INDEX		; Reset Jump Sine pointer.
		;move.w	#-1,RYGAR_LEAPING_STATE		; Don't leap


		moveq	#0,d2
		lea	HDL_SPRITE_STATUS,a0	
		lea	TAB_64,a3		
		add.w	(a3,d2*2),a0
		move.w	#SPRITE_INSTATE_JUMPING,THIS_SPRITE_STATUS(a0)	; Set to jumping.
; Check here if Rygar has Tiger power.

		move.w	RYGAR_CURRENT_POWERS,d2
		and.w	#POWER_TIGER,d2
		bne	.destroy_enemy				; If Rygar has Tiger then enemy is destroy
		bra.s	.set_stun				; If not then the enemy is stunned.
		nop

.set_stun:	move.w	#TIGER_STUN_STATIC_TIME,RHINO_STUN_STATIC_TIMER(a2)
		moveq	#SND_LAND_ON_ENEMY,d0		; Play jump sample
		bsr	PLAY_SAMPLE
		bra	.exit

.set_rygar_death_sequence:
		rept	20
		nop
		endr

		tst.w	RYGAR_DEAD_STATE
		bmi 	.exit				; Rygar already dead!
		move.w	#-1,RYGAR_DEAD_STATE
		clr.w	RYGAR_SINE_INDEX
		moveq	#0,d2
		lea	HDL_SPRITE_STATUS,a0	
		lea	TAB_64,a3		
		add.w	(a3,d2*2),a0
		move.w	#RYGAR_DEATH,THIS_SPRITE_STATUS(a0)	

		bsr	STOP_TUNE

		moveq	#SND_RYGARDEAD,d0		; Play jump sample
		bsr	PLAY_SAMPLE

		bra	.exit

.stun_enemy:	bra	.exit

.destroy_enemy:
		clr.w	SPRITE_DESTROY_END_ROUND(a2)
.set_sweep_direction:
		move.w	#-1,DISKARM_DISABLE				; Only with no Sun power.

		moveq	#SND_DESTROY,d0
		bsr	PLAY_SAMPLE

		cmp.w	#RHINO_STATUS_WALK_LEFT,THIS_SPRITE_STATUS(a2)
		beq	.set_sweep_rt
		
		bra.s	.set_sweep_lt

	nop

; Trigger enemy death toward the left
.set_sweep_lt:	move.w	#RHINO_STATUS_SWEEP_LEFT,THIS_SPRITE_STATUS(a2)
		addq.w	#1,REPULSE_BONUS_NUM
		add.l	#200,VAL_PLAYER1_SCORE
		move.w	#-1,UPDATE_SCORE
		bra	.exit


; Trigger enemy death toward the right
.set_sweep_rt:	move.w	#RHINO_STATUS_SWEEP_RIGHT,THIS_SPRITE_STATUS(a2)
		addq.w	#1,REPULSE_BONUS_NUM
		add.l	#200,VAL_PLAYER1_SCORE
		move.w	#-1,UPDATE_SCORE
		bra	.exit


.anim_sweep_lt:	moveq	#RHINO_STATUS_SWEEP_LEFT,d1
		cmp.w	#32,SPRITE_PLOT_XPOS(a1)
		ble	.set_bones
		lea	RHINO_DEATH_SINE,a3
		move.w	RHINO_SWEEP_INDEX(a2),d3
		move.w	(a3,d3*2),d3
		tst.w	d3
		bmi	.set_bones
		addq.w	#1,RHINO_SWEEP_INDEX(a2)
		move.w	THIS_SPRITE_XPOS(a2),d2
		lsl.w	#SPRITE_MAG,d3
		sub.w	d3,d2
		move.w	d2,THIS_SPRITE_XPOS(a2)
		lsr.w	#SPRITE_MAG,d2
		move.w	d2,SPRITE_PLOT_XPOS(a1)
		bra	ANIMATE

.anim_sweep_rt:	
		moveq	#RHINO_STATUS_SWEEP_RIGHT,d1
		cmp.w	#248,SPRITE_PLOT_XPOS(a1)
		bge	.set_bones
		lea	RHINO_DEATH_SINE,a3
		move.w	RHINO_SWEEP_INDEX(a2),d3
		move.w	(a3,d3*2),d3
		tst.w	d3
		bmi.s	.set_bones
		addq.w	#1,RHINO_SWEEP_INDEX(a2)
		move.w	THIS_SPRITE_XPOS(a2),d2
		lsl.w	#SPRITE_MAG,d3
		add.w	d3,d2
		move.w	d2,THIS_SPRITE_XPOS(a2)
		lsr.w	#SPRITE_MAG,d2
		move.w	d2,SPRITE_PLOT_XPOS(a1)
		bra	ANIMATE
	
.anim_bones:	moveq	#RHINO_STATUS_BONES,d1
		move.l	d0,-(a7)
		bsr	ANIMATE
		move.l	(a7)+,d0
		tst.w	d6
		bmi.s	.disable
		bra	.exit

.disable:	clr.w	THIS_SPRITE_STATUS(a2)
		clr.w	THIS_SPRITE_STATUS(a1)
		subq.w	#1,RHINOS_IN_USE
		bra	DESTROY_SPRITE



; Trigger enemy sprite bones
.set_bones:	move.w	#RHINO_STATUS_BONES,THIS_SPRITE_STATUS(a2)
		bra	.exit

; RHINO walking left
.RHINO_left:	move.w	THIS_SPRITE_XPOS(a2),d2		; Get xposition
		move.w	RHINO_SPEED(a2),d3		; Get speed to add
		add.w	d0,d3
		add.w	d0,d3
		moveq	#RHINO_STATUS_WALK_LEFT,d1	; Animation type is walking left
		

; Is Rygar to the left?
		move.w	SPRITE_PLOT_XPOS(a1),d4		; Plot X position
		tst.w	RHINO_IN_PROXIMITY(a2)		; Is the RHINO in proximity of Rygar
		beq.s	.lt_noprox			; Not in proximity
		subq.w	#1,RHINO_IN_PROXIMITY(a2)
		cmp.w	RYGAR_XPOS,d4			; is Rygar to the Left
		blt.s	.lt_noprox			; No... don't grab then.

		moveq	#RHINO_STATUS_GRAB_LEFT,d1
		;add.w	d3,d3				; Double speed if grabbing!
.lt_noprox:
		tst.w	RHINO_STUN_STATIC_TIMER(a2)
		beq.s	.lt_no_stun
		moveq	#RHINO_STATUS_STUN_LEFT,d1
		moveq	#0,d3
		subq.w	#1,RHINO_STUN_STATIC_TIMER(a2)
		cmp.w	#TIGER_STUN_REVIVE_TIME,RHINO_STUN_STATIC_TIMER(a2)
		bgt.s	.lt_no_shake
		lea	RHINO_SHAKE_OFFSETS,a3
		move.w	RHINO_STUN_STATIC_TIMER(a2),d4
		move.w	(a3,d4*2),d3
.lt_no_shake:
.lt_no_stun:	sub.w	d3,THIS_SPRITE_MAP_XPOS(a2)
		tst.w	THIS_SPRITE_MAP_XPOS(a2)				; if hit 0 going left then go right.
		beq	.lt_set_right
		bmi	.lt_set_right

		;add.w	#16<<SPRITE_MAG,THIS_SPRITE_ACTUAL_XPOS(a2)
		tst.b	SCROLL_EDGE_LOCK_X
		bpl.s	.lt_still
		tst.w	SCROLL_DIRECTION_X	; -1 if left, +1 if right
		bmi.s	.lt_left
		beq.s	.lt_still
.lt_right:	add.w	#RYGAR_MOVE_SPEED<<SPRITE_MAG,d3			; added (faster) when moving toward
		bra.s	.lt_still
.lt_left	sub.w	#RYGAR_MOVE_SPEED<<SPRITE_MAG,d3			; subtracted (slower) when moving away
		bra.s	.lt_still
		nop
.lt_still:			
		sub.w	d3,d2

		lea	ROUND_ENEMY_POSITIONS,a3	
		moveq	#0,d4
		move.w	THIS_SPRITE_MAP_XPOS(a2),d4
		lsr.w	#SPRITE_MAG,d4
		lsr.w	#4,d4
		move.w	d4,RHINO_BLOCK
		move.l	(a3,d4*4),d4
		and.l	#ENEMY_DEF_RHINO,d4
		bne.s	.lt_cont
.lt_set_right:
		move.w	#RHINO_STATUS_WALK_RIGHT,THIS_SPRITE_STATUS(a2)
		add.w	d3,THIS_SPRITE_MAP_XPOS(a2)
		add.w	d3,THIS_SPRITE_XPOS(a2)
		bra	ANIMATE
		
.lt_cont:	move.w	d2,THIS_SPRITE_XPOS(a2)				; ffff
		lsr.w	#SPRITE_MAG,d2					; 0fff
		;move.w	d2,DEBUG_RHINO_XPOS
		move.w	d2,SPRITE_PLOT_XPOS(a1)

		move.w	d1,RHINO_WALK_DIRECTION(a2)
		bra	ANIMATE	



; RHINO walking Right from the Left (THIS IS OK)
.RHINO_right:	move.w	THIS_SPRITE_XPOS(a2),d2
		move.w	RHINO_SPEED(a2),d3
		add.w	d0,d3
		add.w	d0,d3
		moveq	#RHINO_STATUS_WALK_RIGHT,d1

; Is Rygar to the left?
		move.w	SPRITE_PLOT_XPOS(a1),d4
		tst.w	RHINO_IN_PROXIMITY(a2)
		beq.s	.rg_noprox
		subq.w	#1,RHINO_IN_PROXIMITY(a2)
		cmp.w	RYGAR_XPOS,d4			; is Rygar to the Left
		bgt.s	.rg_noprox			; No... don't grab then.
		;COL0_BLUE

		moveq	#RHINO_STATUS_GRAB_RIGHT,d1
		;add.w	d3,d3
.rg_noprox:
		tst.w	RHINO_STUN_STATIC_TIMER(a2)
		beq.s	.rg_no_stun
		moveq	#RHINO_STATUS_STUN_RIGHT,d1
		moveq	#0,d3
		subq.w	#1,RHINO_STUN_STATIC_TIMER(a2)
		cmp.w	#TIGER_STUN_REVIVE_TIME,RHINO_STUN_STATIC_TIMER(a2)
		bgt.s	.rg_no_shake
		lea	RHINO_SHAKE_OFFSETS,a3
		move.w	RHINO_STUN_STATIC_TIMER(a2),d4
		move.w	(a3,d4*2),d3
.rg_no_shake:

.rg_no_stun:	add.w	d3,THIS_SPRITE_MAP_XPOS(a2)
		;add.w	#16<<SPRITE_MAG,THIS_SPRITE_ACTUAL_XPOS(a2)
		tst.b	SCROLL_EDGE_LOCK_X
		bpl.s	.rg_still
		tst.w	SCROLL_DIRECTION_X	; -1 if left, +1 if right
		bmi.s	.rg_left
		beq.s	.rg_still
		nop
.rg_right:	sub.w	#RYGAR_MOVE_SPEED<<SPRITE_MAG,d3			; added (faster) when moving toward
		bra.s	.rg_still
.rg_left	add.w	#RYGAR_MOVE_SPEED<<SPRITE_MAG,d3			; subtracted (slower) when moving away
		bra.s	.rg_still
		nop
.rg_still:	add.w	d3,d2

		lea	ROUND_ENEMY_POSITIONS,a3	
		moveq	#0,d4
		move.w	THIS_SPRITE_MAP_XPOS(a2),d4
		lsr.w	#SPRITE_MAG,d4
		lsr.w	#4,d4
		move.w	d4,RHINO_BLOCK
		move.l	(a3,d4*4),d4
		and.l	#ENEMY_DEF_RHINO,d4
		bne.s	.rt_cont
		move.w	#RHINO_STATUS_WALK_LEFT,THIS_SPRITE_STATUS(a2)
		sub.w	d3,THIS_SPRITE_MAP_XPOS(a2)
		sub.w	d3,THIS_SPRITE_XPOS(a2)
		bra	ANIMATE
.rt_cont:
		move.w	d2,THIS_SPRITE_XPOS(a2)
		lsr.w	#SPRITE_MAG,d2
		move.w	d2,SPRITE_PLOT_XPOS(a1)
		move.w	d1,RHINO_WALK_DIRECTION(a2)
		bra	ANIMATE
.exit:		rts
I'm pissed off!

Geezer
mcgeezer is offline  
Old 10 February 2019, 19:10   #69
mcgeezer
Registered User
 
Join Date: Oct 2017
Location: Sunderland, England
Posts: 2,702
After re-writing the sprite animation methods things are becoming a lot more fruitful. It is much easier now for me to create and manage new sprites.


Straight out of WinUAE

http://109.228.4.199/rygar_sq.mp4

Youtube...

[ Show youtube player ]

As you can see the AGA/1200 can push around plenty of sprites.

I've done practically no optimisations either...

Still plenty of bugs though - but looking good for now.

Geezer
mcgeezer is offline  
Old 11 February 2019, 22:48   #70
mcgeezer
Registered User
 
Join Date: Oct 2017
Location: Sunderland, England
Posts: 2,702
Thought I'd take the Griffin enemy on tonight... these appear on the Water fall rounds 2 & 3...

Took about an hour to do... so the new sprite methods have already paid off.

http://109.228.4.199/rygargrif.mp4

Geezer
mcgeezer is offline  
Old 15 February 2019, 22:51   #71
mcgeezer
Registered User
 
Join Date: Oct 2017
Location: Sunderland, England
Posts: 2,702
Can someone explain to me.... Just how fuck'in good this guy is?

http://109.228.4.199/sanctuary.mp4

Cos I think it's nothing quite like the Amiga has produced since it was born.

Take a bow @DJMETUNE.

Geezer
mcgeezer is offline  
Old 17 February 2019, 00:06   #72
mcgeezer
Registered User
 
Join Date: Oct 2017
Location: Sunderland, England
Posts: 2,702
Quote:
Originally Posted by DJ METUNE View Post


Here is a video of that 2 channel mod.
https://www.dropbox.com/s/d01niilcsw...0test.mp4?dl=0
That is simply incredible...

I mean just WOW! 2 channels... Makes me want to port Outrun!

Quick update... I've added the Big Rhino and Evil Demon sprites.

It should be apparent to everyone now that I won't get the whole game finished for the end of February, there is simply too much to do.

What I will do though is try and get a stable playable demo working, at the moment there are LOTS of bugs.

http://109.228.4.199/rygar_update2.mp4

Enough coding for a Saturday evening. Hope you like it.

Geezer
mcgeezer is offline  
Old 17 February 2019, 22:50   #73
mcgeezer
Registered User
 
Join Date: Oct 2017
Location: Sunderland, England
Posts: 2,702
I've worked on some internal management stuff tonight which is quite necessary.

If you think of how Rygar works when you play it, you'll notice that enemies appear at various points through each round, it's this routine that I've being working on and have working pretty well.

So at various points I can "inject" enemy configurations throughout each round, if you think of the Rhino's and Drone's they each have different speeds, number grab attempts, number of turns and the amount that can be running in the game.

To give you an example of what the Round 1 config currently looks like.... here it is...

Code:
;=======================================
; Foreground definitions per round
;=======================================
; [0] Pointer to Foreground Tile Map
; [1] Pointer to Level Background pointer
; [2] 0=Normal BG, -1=Sunset
; [3] Background round start offset. (If the start of next round does not have caves then set this to 0)
;                                 Otherwise set it to 256)
; [4] Background Scroll speed 1=Fast, 2=Slot
; [5] Pointer to Obstacle placement structures for Round
; [6] Map Width
; [7] Map Depth
; [8] Map Start Y

	CNOP	0,4

ROUND1:		
	dc.l	MEMCHK3_TILEMAP			;0
	dc.l	LEVEL_BACKGROUND_1		;4
	dc.l	BG_SCROLL_ENABLE		;8
	dc.l	NEXT_ROUND_CAVESCENE		;12
	dc.l	BG_SCROLL_SLOW			;16
	dc.l	OBSTACLES_ROUND_1		;20
	dc.l	DEFAULT_MAP_DEPTH_START		;24
	dc.l	STONES_ROUND_1			; 28
	dc.l	$9f8				; 32	; round completed at.
	dc.l	ROUND1_ENEMY_CONFIG		; 36
	dc.l	ROUND1_STATIC_ENEMIES		; 40
	dc.l	DISABLE_FG_WATER_CYCLE		; 44
	dc.l	ROUND1_ENEMY_STATES		; 48

; Sprite Type, Xposition, Yposition, Sprite Type.
ROUND1_STATIC_ENEMIES:
	dc.w	SPR_SQUIRREL,$868,84,SPR_TYPE_ENEMY		; $868 = Squirrel Xposition
	dc.l	HDL_SQUIRREL
	dc.l	-1

;================================================
; Background definitions here per round.
;================================================
; [0] Pointer to IFF Background Data]
; [1] Pointer to colour list for copper display
; [2] Y Index to start background blit
; [3] Y Length to blit background
LEVEL_BACKGROUND_1:	
	dc.l	MEMCHK10_BACKGROUND,ROUND1_COLOUR,59,86	; Pointer to image, starting offset, length to blit, copper_list

; Obstacles x/y into map then 4 blocks 16x16 blocks to plot
OBSTACLES_ROUND_1:
	dc.w	26,7,TILEOBS01,TILEOBS02,TILEOBS03,TILEOBS04,-1
	;dc.w	60,7,TILEOBS01,TILEOBS02,TILEOBS03,TILEOBS04,-1
	dc.w	132,7,TILEOBS01,TILEOBS02,TILEOBS03,TILEOBS04,-1
	dc.w	$7fff

	CNOP	0,4

; Stones that appear
; TILECMD_PUSHSTONE_JUMP = Appears when Rygar jumps on this 
; TILECMD_PUSHSTONE_WALK = Appears when Rygar walks over this area
; TILECMD_PUSHSTONE_ITEM = Is simply part of the round map
STONES_ROUND_1:
	dc.w	30,7,TILECMD_PUSHSTONE_ITEM,-1
	dc.w	46,7,TILECMD_PUSHSTONE_ITEM,-1
	dc.w	72,4,TILECMD_PUSHSTONE_ITEM,-1
	dc.w	87,7,TILECMD_PUSHSTONE_ITEM,-1
	dc.w	90,7,TILECMD_PUSHSTONE_ITEM,-1
	dc.w	112,7,TILECMD_PUSHSTONE_ITEM,-1
	dc.w	74,9,TILECMD_PUSHSTONE_JUMP,-1
	dc.w	102,9,TILECMD_PUSHSTONE_JUMP,-1
	dc.w	82+10,9,TILECMD_PUSHSTONE_WALK,-1
	dc.w	122+10,9,TILECMD_PUSHSTONE_WALK,-1
	dc.w	124+10,9,TILECMD_PUSHSTONE_WALK,-1
	dc.w	$7fff

	CNOP	0,4

; must be 176 in length
ROUND1_ENEMY_CONFIG:
		rept	29			; 0-29
                dc.l    (ENEMY_STATE_0!ENEMY_DEF_RHINO!ENEMY_DEF_GRIFFIN!ENEMY_DEF_DRAGON1!ENEMY_DEF_DRAGON2)
		endr	

		rept	1			; 30
                dc.l    (ENEMY_STATE_0!ENEMY_DEF_DRONE!ENEMY_DEF_GRIFFIN!ENEMY_DEF_DRAGON1!ENEMY_DEF_DRAGON2!ENEMY_DEF_BIGRHINO)
		endr

		rept	50			; 30-79
                dc.l    (ENEMY_STATE_1!ENEMY_DEF_DRONE!ENEMY_DEF_RHINO!ENEMY_DEF_GRIFFIN!ENEMY_DEF_DRAGON1!ENEMY_DEF_DRAGON2)
		endr

		rept	50			; 80-129
                dc.l    (ENEMY_STATE_2!ENEMY_DEF_DRONE!ENEMY_DEF_RHINO!ENEMY_DEF_GRIFFIN!ENEMY_DEF_DRAGON1!ENEMY_DEF_DRAGON2)
		endr

		rept	50			; 130-179
                dc.l    (ENEMY_STATE_3!ENEMY_DEF_DRONE!ENEMY_DEF_RHINO!ENEMY_DEF_GRIFFIN!ENEMY_DEF_DRAGON1!ENEMY_DEF_DRAGON2)
		endr


                dc.l    -1

ROUND1_ENEMY_STATES:	dc.l	ROUND1_ENEMY_STATE_0		; Default Enemy Config That is Loaded
			dc.l	ROUND1_ENEMY_STATE_1
			dc.l	ROUND1_ENEMY_STATE_2
			dc.l	ROUND1_ENEMY_STATE_3


; Enemy Type, Max, Speed Min, Speed Max,
ROUND1_ENEMY_STATE_0:	
			dc.w	SPR_EVIL_UL,1,10,20,-1,-1,-1,-1
			dc.w	SPR_LAVAMAN,4,10,20,-1,-1,-1,-1
			dc.w	SPR_BIGRHINO1,1,10,20,-1,-1,-1,-1
			dc.w	SPR_SQUIRREL,1,0,0,-1,-1,-1,-1
			dc.w	SPR_DRAGON1,0,20,40,-1,-1,-1,-1
			dc.w	SPR_DRONE,4,20,40,-1,-1,-1,-1
			dc.w	SPR_RHINO,4,20,40,-1,-1,-1,-1
			dc.w	SPR_GRIFFIN,0,10,20,-1,-1,-1,-1
			dc.l	-1

; Enemy Type, Max, Speed Min, Speed Max,
ROUND1_ENEMY_STATE_1:	dc.w	SPR_DRAGON1,1,20,40,-1,-1,-1,-1
			dc.w	SPR_DRONE,6,20,40,-1,-1,-1,-1
			dc.w	SPR_RHINO,6,20,40,-1,-1,-1,-1
			dc.w	SPR_GRIFFIN,0,10,20,-1,-1,-1,-1
			dc.l	-1

; Enemy Type, Max, Speed Min, Speed Max,
ROUND1_ENEMY_STATE_2:	dc.w	SPR_DRAGON1,2,20,40,-1,-1,-1,-1
			dc.w	SPR_DRONE,8,20,40,-1,-1,-1,-1
			dc.w	SPR_RHINO,8,20,40,-1,-1,-1,-1
			dc.w	SPR_GRIFFIN,0,10,20,-1,-1,-1,-1
			dc.l	-1

; Enemy Type, Max, Speed Min, Speed Max,
ROUND1_ENEMY_STATE_3:	dc.w	SPR_DRAGON1,0,20,40,-1,-1,-1,-1
			dc.w	SPR_DRONE,0,20,40,-1,-1,-1,-1
			dc.w	SPR_RHINO,10,20,40,-1,-1,-1,-1
			dc.w	SPR_GRIFFIN,8,10,20,-1,-1,-1,-1
			dc.l	-1

I'll try and get some other enemies in over the next week... notably, the Dragon Rider, Giant Worm and Lava Man... at a push I might get the Giant demon in as well.

I've done a lot of work on stability too and the game no longer crashes with any Enforcer hits.

Geezer
mcgeezer is offline  
Old 26 February 2019, 22:01   #74
mcgeezer
Registered User
 
Join Date: Oct 2017
Location: Sunderland, England
Posts: 2,702
So here we are.... two days to go and I'm shit out of time with loads of bugs still in Rygar. Frustratingly I can't seem to get the game to run properly on my real hardware so I'm wondering if I have a hardware fault somewhere, if someone wants to try it out then feel free... sometimes it works on my real stock amiga and sometimes not.

Here's a YT video...

[ Show youtube player ]

Here's a video from OBS

http://www.siesmicminds.co.uk/downloads/RygarEAB06.mp4

And here's an ADF for you to try.

http://www.siesmicminds.co.uk/downloads/RygarEAB06.adf

Just a quick note on what/who Siesmic Minds is... basically that is me (mcgeezer) and anyone mad enough to work with me on a project... I've setup the default website and stuff and my plan is after Rygar to do some game coding tutorials/videos and publish them there.

If I don't post another update before the 28th (because of work commitments)... then this will go ahead as the entry to the compo.

I've made the game insanely hard... but not impossible, if you get to round 4 without it crashing then you're doing much better than me.

Good luck to all.

Signing Off.

Geezer
mcgeezer is offline  
Old 27 February 2019, 23:07   #75
mcgeezer
Registered User
 
Join Date: Oct 2017
Location: Sunderland, England
Posts: 2,702
Hurray - the game now works on stock A1200 hardware - now i'm HAPPY!

I recreated the ADF, but I have a sneaking suspicion that it was the add21k utility I was using instead of the add44k I should have used for the AGA machines to claim some memory back.

Here' a video of it running on my A1200.

Youtube...
[ Show youtube player ]

From my server...

http://www.siesmicminds.com/downloads/RygarEAB09.mp4

And here is the working ADF! I have updated the other ADF's to this one so please redownload!

http://www.siesmicminds.com/downloads/RygarEAB09.adf

The game requires a two button joy pad

Good luck to all entrants on the compo, I have a feeling I'm going to have a few beers tomorrow night... maybe play Bomb Jack Beer Edition.

Enjoy and please give it a go.

Geezer
mcgeezer is offline  
Old 28 February 2019, 20:41   #76
mcgeezer
Registered User
 
Join Date: Oct 2017
Location: Sunderland, England
Posts: 2,702
I had a couple of spare hours tonight to work out some final bugs.
  • Dragons now die at the end of the level and when the Orange Kill All emblem is collected.
  • I added like a hit count on the Dragons... so they may take 1 or 2 direct hits to kill them.
  • Fixed the total bonus that was causing the game to stay at the sanctuary scene for a long period of time.
  • I think I fixed a few bugs when the sanctuary scene initiates.
  • Probably fixed the Griffins disappearing on Round 3
  • Thanks to @Ross for helping get the max chip memory with his special boot block (I've said it before - he's a genius).
  • Still loads more to fix... particularly if you jump on air enemies.

This is the final version I'll be releasing before the deadline tonight, my wife has gone out and got me some Peroni to supp tonight and I'm going to watch some Amiga streams or something.

The game has been a blast to develop, I've loved every minute of it. At times it has been tough to keep motivated but this thread has helped massively, whenever I lost some motivation I went back in the threads and read the messages of support from all of you guys.

I will continue to work on the game at a slightly slower pace, I've said before but I don't like programming in the summer months...(I gotta get Vitamin D from somewhere) but I'll endeavor to finish the game in the next few months before the whole summer kicks in, like most of you I have wife/kids/full time job to prioritise on.

I'll list the known bugs I have in the game that I know about, if people want to add to them then feel free...but please understand that I know Rygar very well...I know all the little quirks it has so if something is missing then it's because I haven't added it to the game yet.

No video this time... just the ADF. Please do not forget you need a two button pad for the game and it has intentionally been made hard with faster and more enemies than the arcade as there is only currently 4 levels to play, so therefore the challenge of the game is to get to the 5th level with the highest score with your 3 lives.

Good luck to everyone in the competition and a special thanks to DamienD who has effectively ran the compo from start to finish.

http://www.siesmicminds.com/downloads/RygarEAB0A.adf

and for the coders among you, the source code...

http://www.siesmicminds.com/download...AB10Source.zip

Geezer
mcgeezer is offline  
 


Currently Active Users Viewing This Thread: 1 (0 members and 1 guests)
 
Thread Tools

Similar Threads
Thread Thread Starter Forum Replies Last Post
Discussion: Rygar AGA Edition mcgeezer Coders. Contest 1815 20 May 2023 20:44
On the Ball - World Cup Edition AGA djcasey request.Old Rare Games 4 25 January 2013 12:39
Brian the Lion AGA - Computer Combat edition antonvaltaz support.Games 2 25 November 2011 11:35
The Vague #1 AGA-RTG edition is released ! kas1e Amiga scene 12 30 October 2007 00:27
On The Ball: World Cup Edition AGA CodyJarrett request.Old Rare Games 11 27 May 2003 06:14

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off

Forum Jump


All times are GMT +2. The time now is 10:09.

Top

Powered by vBulletin® Version 3.8.11
Copyright ©2000 - 2024, vBulletin Solutions Inc.
Page generated in 0.27600 seconds with 13 queries