Fixup error

BlitzMax Forums/BlitzMax Beginners Area/Fixup error

Big_Dave(Posted 2005) [#1]
Hello,

I am new to game programming and am having a lot of fun with blitzmax. My game runs fine as it stands. However, if I add any more lines of code to my main loop I get the following error when I compile:

10682:Fixup of -32856 too large for field width of 16 bits

As my game isnt finished, this is a bit of a problem. I started off coding procedurally (I've done a little sysadmin scripting before) but soon tried an Object Oriented style. Hence the Player1 ship is not an object and coded in the main loop, whereas other things are objects.

Below is a brief outline of my program flow in summary form. I'm hoping there is an obvious flaw in my approach that may cause this error and someone can kindly put me straight. What does the error mean and how can I avoid it in future? Is it related to the nested While....Wend loops?



Define graphics
Define Types (currently 8 types)
Initialize pre-game variables (create lists, incbin, read hi-score file)

While not Keydown(Key_escape)
 	flip, cls
		draw title screen
		wait for key - if "1" the play_game=1, if "esc" game will bomb out due to outer while loop. If nothing we loop back round
		initialize vars
          
		While play_game=1

				 cls
				 clear all type lists (all enemies, stars, etc destroyed)

			  		While not player1_left=0

						reset enemies and screen if player just died (IF..THEN) 
						While loop to create enemies (amount based on level - objects with Type)
						Wend
						Draw game screen
						Key analysis - Key(left) = move player 1 left, Key(right) = move player 1 right. This code is here - player1 not an object - procedural code
						Ship positional anaysis. This code is here - player1 not an object - procedural code
       						While stars < 100
							draw stars (object with Type)
						Wend
						If key Z - create ship fire (object with Type)
						For each in starlist 
							update
						next
						For each in big enemy list
							update movement and direction
							check collision with player1
							For each ship fire object
								check collision with this specificbig enemy + remove both if collision + create 3middle enemies + create debris
							Next
						Next
						For each in middle enemy list
							update movement and direction
							check collision with player1
							For each ship fire object
								check collision with this specific middle enemy + remove both if collision + create 3 smaller enemies + create debris
							Next
						Next
						For each in small enemy list
							update movement and direction
							check collision with player1
							For each ship fire object
								check collision with this specific small enemy + remove both if collision + create debris
							Next
						 	DrawImage small enemy
						Next
						For each in debris list
							update movement and direction
							check collision with walls + remove if collision
						Next
						For each ship fire object list
							check collison with walls and remove if collison
						Next
						
						FLIP
						CLS  'For the main game
	
	   					if player_just_died=1	
						 remove all objects from lists
						 player1_left=player1_left-1
     						 play player 1 ship explosion animation (needs 10 Flips and 10 cls in while loop)
						endif

						if player1_left=0
							 update hi-score file if necessary
							draw game over splash screen
							Remove all objects from lists
						Endif			

					FlushMem()
	  
				     WEND 'player1_left=0

	   WEND ' play_game=1


WEND 'escape key


Many Thanks,

Dave.


Emmett(Posted 2005) [#2]
I am also new to programming (totally) but in the interest of participating in the forum my suggestion would be to move a lot of your code into functions() outside your main loop.
Although my first game is only 190 lines of code including a dozen or so blank lines my main loop looks like this:
Repeat
	If KeyHit(1)
		If MouseX()<176
		pick=1
		checkhit()
		masterscore:+score
		ElseIf MouseX()>201 And MouseX()<307
		pick=2
		checkhit()
		masterscore:+score
		ElseIf MouseX()>332 And MouseX()<438
		pick=3
		checkhit()
		masterscore:+score
		ElseIf MouseX()>463
		pick=4
		checkhit()
		masterscore:+score
		End If
	End If
	If timer=60 bonus()
	drawlines()
	drawstates()
	drawcapitals()
	SetScale 1.5,1.5
	If timer=0 And n=5 Local myChannel = PlaySound (tick)
	DrawImage numtiles,559,59,tilearray3[n]
	DrawText"Total Score = "+masterscore,58,70
	DrawText"Speed Bonus:",410,70
	SetScale 1,1
	Flip
	FlushMem
	Cls
	timer:+1
	score=0
Until KeyHit (key_space)

I hope you can get some use out of my suggestion.


Big_Dave(Posted 2005) [#3]
Thanks Emmett. I appreciate the advice.

I'm convinced that moving to functions wont sort the fixup error though (although it will make it more readable). I'll test it this evening.


Big_Dave(Posted 2005) [#4]
Shows you how much I know! Thanks Emmett, moving to functions appears to have fixed the problem.


Andy(Posted 2005) [#5]
>Shows you how much I know! Thanks Emmett, moving to
>functions appears to have fixed the problem.

So is the conclusion that the main loop can only be a (small) certain size?

Andy