| Try this, it's dynamic and you can have unlimited lists with unlimited object types 
 usage:
 
 
 
global ListA = CreateList()
global ListB = CreateList()
ThisBullet.bullet = new bullet
listaddlast listA,handle(bullet)
ThisBullet.bullet = new bullet
listaddlast listB,handle(bullet)
count = countlist(listA)
if count
 for i = 1 to count
  ThisBullet.TBullet = object.bullet(listatindex(listA,i))
  if not ThisBullet = null
  ;do stuff
  endif
 next
end if
 
 
 
Const TLIST_DATA_SIZE = 4
Type TList
	Field list
End Type
;-----------------------------------------------------------------------------------------
;-----------------------------------------------------------------------------------------
Function CreateList%()
	
	;DebugLog "list created"
	ThisList.TList = New TList
	ThisList\list = CreateBank(TLIST_DATA_SIZE)
	Return Handle(ThisList)
End Function
;-----------------------------------------------------------------------------------------
;-----------------------------------------------------------------------------------------
Function DeleteList(id%)
ThisList.TList = Object.TList(id)
If ThisList.TList = Null DebugLog "No list to delete" : Return -1
	FreeBank ThisList\list
	Delete ThisList
End Function
;-----------------------------------------------------------------------------------------
;-----------------------------------------------------------------------------------------
Function ListAddFirst%(id%,ObjectHandle%)
ThisList.TList = Object.TList(id)
If ThisList.TList = Null DebugLog "ListAddLast failed no list" : Return -1
If ObjectHandle%<1 DebugLog "ListAddLast failed no object" : Return -1
count = CountList(id)
If Not count
	ListAddLast(id,ObjectHandle%)
	Return 1
EndIf
	TempBank = CreateBank(BankSize(ThisList\list))
	CopyBank ThisList\list,TLIST_DATA_SIZE,TempBank,TLIST_DATA_SIZE,BankSize(ThisList\list)-TLIST_DATA_SIZE
	
	PokeInt ThisList\list,TLIST_DATA_SIZE,ObjectHandle%
	PokeInt ThisList\list,0,count + 1
	
	ResizeBank ThisList\list,BankSize(ThisList\list)+TLIST_DATA_SIZE
	CopyBank TempBank,TLIST_DATA_SIZE,ThisList\list,TLIST_DATA_SIZE*2,BankSize(TempBank)-TLIST_DATA_SIZE
	
	FreeBank TempBank
	Return 1
End Function
;-----------------------------------------------------------------------------------------
;-----------------------------------------------------------------------------------------
Function ListAddLast%(id%,ObjectHandle%)
ThisList.TList = Object.TList(id)
If ThisList.TList = Null DebugLog "ListAddLast failed no list" : Return -1
If ObjectHandle%<1 DebugLog "ListAddLast failed no object" : Return -1
	PokeInt ThisList\list,0,PeekInt(ThisList\list,0)+1
	ResizeBank(ThisList\list,BankSize(ThisList\list)+TLIST_DATA_SIZE)
	PokeInt ThisList\list,BankSize(ThisList\list)-TLIST_DATA_SIZE,ObjectHandle
	Return 1
	
End Function
;-----------------------------------------------------------------------------------------
;-----------------------------------------------------------------------------------------
Function ListAtIndex%(id%,index%)
ThisList.TList = Object.TList(id)
If ThisList.TList = Null DebugLog "No list to ListAtIndex" : Return -1
If index<1 Return -1
If ThisList.TList = Null Return -1
Local Offset = index*TLIST_DATA_SIZE
If BankSize(ThisList\list)<(Offset+TLIST_DATA_SIZE) Return -1
Count = PeekInt(ThisList\list,0)
If count<1 Return -1
	Return PeekInt(ThisList\list,Offset)
End Function
;-----------------------------------------------------------------------------------------
;-----------------------------------------------------------------------------------------
Function ListFirst%(id%)
ThisList.TList = Object.TList(id)
If ThisList.TList = Null Return -1
Local Offset = TLIST_DATA_SIZE
If BankSize(ThisList\list)<(Offset+TLIST_DATA_SIZE) Return -1
	Return PeekInt(ThisList\list,Offset)
End Function
;-----------------------------------------------------------------------------------------
;-----------------------------------------------------------------------------------------
Function ListLast%(id%)
ThisList.TList = Object.TList(id)
If ThisList.TList = Null Return -1
index = PeekInt(ThisList\list,0)
Local Offset = index*TLIST_DATA_SIZE
If BankSize(ThisList\list)<(Offset+TLIST_DATA_SIZE) Return -1
	Return PeekInt(ThisList\list,Offset)
End Function
;-----------------------------------------------------------------------------------------
;-----------------------------------------------------------------------------------------
Function ListDeleteAtIndex%(id%,index%)
If index<1 Return -1
ThisList.TList = Object.TList(id)
If ThisList.TList = Null DebugLog "No list to ListDeleteAtIndex" : Return -1
Local Offset = index*TLIST_DATA_SIZE
If BankSize(ThisList\list)<(Offset+TLIST_DATA_SIZE) Return -1
Count = PeekInt(ThisList\list,0)
If count<1 Return -1
Local offset_2
For i = index To Count-1
	Offset_2 = i*TLIST_DATA_SIZE
	PokeInt ThisList\list,Offset_2,PeekInt(ThisList\list,Offset_2+TLIST_DATA_SIZE)
Next
PokeInt ThisList\list,0,count - 1
ResizeBank ThisList\list,BankSize(ThisList\list)-TLIST_DATA_SIZE
End Function
;-----------------------------------------------------------------------------------------
;-----------------------------------------------------------------------------------------
Function CopyList(id%,id2%)
source.TList = Object.TList(id)
dest.TList = Object.TList(id2)
If source = Null Return -1
If dest = Null Return -1
count = PeekInt(source\list,0)
PokeInt dest\list,0,count
ResizeBank dest\list,(count*TLIST_DATA_SIZE)+TLIST_DATA_SIZE
CopyBank source\list,0,dest\list,0,BankSize(source\list);(count*TLIST_DATA_SIZE)+TLIST_DATA_SIZE
End Function
;-----------------------------------------------------------------------------------------
;-----------------------------------------------------------------------------------------
Function CountList%(id)
ThisList.TList = Object.TList(id)
If ThisList.TList = Null Return -1
	Return PeekInt(ThisList\list,0)
End Function
;-----------------------------------------------------------------------------------------
;-----------------------------------------------------------------------------------------
Function ClearList(id)
ThisList.TList = Object.TList(id)
If ThisList.TList = Null Return -1
ResizeBank ThisList\list,TLIST_DATA_SIZE
PokeInt ThisList\list,0,0
End Function
;-----------------------------------------------------------------------------------------
;-----------------------------------------------------------------------------------------
Function ListIsEmpty%(id%)
;returns if a list is empty or not
ThisList.TList = Object.TList(id)
ListCount = PeekInt(ThisList\list,0)
	If ListCount Return 1 Else Return 0
End Function
;-----------------------------------------------------------------------------------------
;-----------------------------------------------------------------------------------------
Function CheckList(id%,ObjectHandle%)
;remove any <1 values from a list
ThisList.TList = Object.TList(id)
If ThisList = Null Return -1
If ObjectHandle<1 Return -1
Count = PeekInt(ThisList\list,0)
Local Offset_2
TempList = CreateBank(TLIST_DATA_SIZE)
PokeInt TempList,0,0
	
	For i = 1 To Count
	
		Offset_2 = i*TLIST_DATA_SIZE
		If PeekInt(ThisList\list,Offset_2)>0
			ResizeBank(TempList,BankSize(TempList)+TLIST_DATA_SIZE);resize list
			PokeInt TempList,0,PeekInt(TempList,0)+1;add to list count
			PokeInt TempList,BankSize(TempList)-TLIST_DATA_SIZE,PeekInt(ThisList\list,Offset_2)
		EndIf
	Next
	
	Count = PeekInt(TempList,0)
	
	ResizeBank ThisList\list,TLIST_DATA_SIZE
	PokeInt ThisList\list,0,0
	
	For i = 1 To Count
	
		Offset_2 = i*TLIST_DATA_SIZE
		If PeekInt(TempList,Offset_2)>0
			ResizeBank(ThisList\list,BankSize(ThisList\list)+TLIST_DATA_SIZE)
			PokeInt ThisList\list,0,PeekInt(ThisList\list,0)+1
			PokeInt ThisList\list,BankSize(ThisList\list)-TLIST_DATA_SIZE,PeekInt(TempList,Offset_2)
		EndIf
	Next
FreeBank TempList
End Function
;-----------------------------------------------------------------------------------------
;-----------------------------------------------------------------------------------------
Function ListRemove(id%,ObjectHandle%,all% = 0)
;remove the first object from a list, option to remove all instances!!
ThisList.TList = Object.TList(id)
If ThisList = Null Return -1
If ObjectHandle<1 Return -1
Count = PeekInt(ThisList\list,0)
Local found
Local Offset_2
For i = 1 To Count
Offset_2 = i*TLIST_DATA_SIZE
	If PeekInt(ThisList\list,Offset_2) = ObjectHandle
		PokeInt ThisList\list,Offset_2,0
		found = True
			If all>0
				Exit
			EndIf
	EndIf
Next
If found = True
TempList = CreateBank(TLIST_DATA_SIZE)
PokeInt TempList,0,0
	
	For i = 1 To Count
	
		Offset_2 = i*TLIST_DATA_SIZE
		If PeekInt(ThisList\list,Offset_2)>0
			ResizeBank(TempList,BankSize(TempList)+TLIST_DATA_SIZE);resize list
			PokeInt TempList,0,PeekInt(TempList,0)+1;add to list count
			PokeInt TempList,BankSize(TempList)-TLIST_DATA_SIZE,PeekInt(ThisList\list,Offset_2)
		EndIf
	Next
	
	Count = PeekInt(TempList,0)
	
	ResizeBank ThisList\list,TLIST_DATA_SIZE
	PokeInt ThisList\list,0,0
	
	For i = 1 To Count
	
		Offset_2 = i*TLIST_DATA_SIZE
		If PeekInt(TempList,Offset_2)>0
			ResizeBank(ThisList\list,BankSize(ThisList\list)+TLIST_DATA_SIZE)
			PokeInt ThisList\list,0,PeekInt(ThisList\list,0)+1
			PokeInt ThisList\list,BankSize(ThisList\list)-TLIST_DATA_SIZE,PeekInt(TempList,Offset_2)
		EndIf
	Next
FreeBank TempList
EndIf
End Function
;-----------------------------------------------------------------------------------------
;-----------------------------------------------------------------------------------------
Function ListContains%(id%,ObjectHandle%)
;get if an object exists in the list
ThisList.TList = Object.TList(id)
If ThisList = Null Return -1
If ObjectHandle<1 Return -1
Count = PeekInt(ThisList\list,0)
If count
	For i = 1 To Count
		If PeekInt(ThisList\list,i*TLIST_DATA_SIZE) = ObjectHandle
			Return 1
		EndIf
	Next
EndIf
	Return 0
End Function
;-----------------------------------------------------------------------------------------
;-----------------------------------------------------------------------------------------
Function ReverseList(id%)
;swap the order of the list around
ThisList.TList = Object.TList(id)
If ThisList = Null Return -1
Count = PeekInt(ThisList\list,0)
If count<1 Return -1
TempList = CreateBank(TLIST_DATA_SIZE)
PokeInt TempList,0,0
PokeInt ThisList\list,(index*TLIST_DATA_SIZE),0
For i = count To 1 Step -1
		ResizeBank(TempList,BankSize(TempList)+TLIST_DATA_SIZE)
		PokeInt TempList,0,PeekInt(TempList,0)+1
		PokeInt TempList,BankSize(TempList)-TLIST_DATA_SIZE,PeekInt(ThisList\list,(i*TLIST_DATA_SIZE))
Next
Count = PeekInt(TempList,0)
ResizeBank ThisList\list,TLIST_DATA_SIZE
PokeInt ThisList\list,0,0
For i = 1 To count
		ResizeBank(ThisList\list,BankSize(ThisList\list)+TLIST_DATA_SIZE)
		PokeInt ThisList\list,0,PeekInt(ThisList\list,0)+1
		PokeInt ThisList\list,BankSize(ThisList\list)-TLIST_DATA_SIZE,PeekInt(TempList,(i*TLIST_DATA_SIZE))
Next
FreeBank TempList
End Function
;-----------------------------------------------------------------------------------------
;-----------------------------------------------------------------------------------------
Function SwapLists%(id%,id2%)
;swap the contents of 2 lists
ThisListA.TList = Object.TList(id)
ThisListB.TList = Object.TList(id2)
If ThisListA = Null Return -1
If ThisListB = Null Return -1
TempListB = CreateList()
CopyList(id2,TempListB)
CopyList(id,id2)
CopyList(TempListB,id)
DeleteList(TempListB)
	Return 1
	
End Function
;-----------------------------------------------------------------------------------------
;-----------------------------------------------------------------------------------------
;-----------------------------------------------------------------------------------------
;-----------------------------------------------------------------------------------------
 
 
 |