| I've been coding some List functions which might be of use, anyone want to improve/optimize it. It still needs ListDeleteFirst/Last and ListAddAtIndex but they should be simple to add.
 
 
 
Const TLIST_DATA_SIZE = 4
Type TList
	Field list
End Type
;-----------------------------------------------------------------------------------------
;-----------------------------------------------------------------------------------------
Function CreateList.TList()
	
	;DebugLog "list created"
	ThisList.TList = New TList
	ThisList\list = CreateBank(TLIST_DATA_SIZE)
	Return ThisList.TList
End Function
;-----------------------------------------------------------------------------------------
;-----------------------------------------------------------------------------------------
Function DeleteList(ThisList.TList)
If ThisList.TList = Null DebugLog "No list to delete" : Return -1
	FreeBank ThisList\list
	Delete ThisList
End Function
;-----------------------------------------------------------------------------------------
;-----------------------------------------------------------------------------------------
Function ListAddFirst(ThisList.TList,ObjectHandle%)
If ThisList.TList = Null DebugLog "ListAddLast failed no list" : Return -1
If ObjectHandle%<1 DebugLog "ListAddLast failed no object" : Return -1
count = CountList(ThisList.TList)
If Not count
	ListAddLast(ThisList.TList,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(ThisList.TList,ObjectHandle%)
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(ThisList.TList,index%)
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(ThisList.TList)
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(ThisList.TList)
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(ThisList.TList,index%)
If index<1 Return -1
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(source.TList,dest.TList)
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(ThisList.TList)
If ThisList.TList = Null Return -1
	Return PeekInt(ThisList\list,0)
End Function
;-----------------------------------------------------------------------------------------
;-----------------------------------------------------------------------------------------
Function ClearList(ThisList.TList)
If ThisList.TList = Null Return -1
ResizeBank ThisList\list,TLIST_DATA_SIZE
PokeInt ThisList\list,0,0
End Function
;-----------------------------------------------------------------------------------------
;-----------------------------------------------------------------------------------------
Function ListIsEmpty(ThisList.TList)
;returns if a list is empty or not
ListCount = PeekInt(ThisList\list,0)
	If ListCount Return 1 Else Return 0
End Function
;-----------------------------------------------------------------------------------------
;-----------------------------------------------------------------------------------------
Function CheckList(ThisList.TList,ObjectHandle%)
;remove any <1 values from a list, although none
;should get added
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(ThisList.TList,ObjectHandle%,all% = 0)
;remove the first object from a list, option to remove all instances, however list should only contain one instance!
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(ThisList.TList,ObjectHandle%)
;get if an object exists in the list
;use to stop duplicates being added to same list
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(Thislist.TList)
;swap the order of the list around
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( ThislistA.TList,ThislistB.TList )
;swap the contents of 2 lists
If ThisListA = Null Return 0
If ThisListB = Null Return 0
TempListB.TList = CreateList()
CopyList(ThislistB.TList,TempListB.TList)
CopyList(ThislistA.TList,ThislistB.TList)
CopyList(TempListB.TList,ThislistA.TList)
DeleteList(TempListB)
	Return 1
	
End Function
;-----------------------------------------------------------------------------------------
;-----------------------------------------------------------------------------------------
;-----------------------------------------------------------------------------------------
;-----------------------------------------------------------------------------------------
 
 Usage:
 
 
 
type TActor
 field name$
end type
Type TMap
 field name$
 field actors.TList
end type
ThisMap.TMap = new TMap
ThisMap\name = "Town"
ThisVillage\actors = CreateList()
for i = 0 to 5
 ThisActor.TActor  = New TActor
 ThisActor\name = "Player_"+i
 ListAddLast(ThisMap\actors,handle(ThisActor))
next
;Then..
count = CountList(ThisMap\actors)
if count
 for i = 1 to count
  ThisActor.TACtor = object.TActor(ListAtIndex(ThisMap\actors,i))
  if not ThisActor = null
   ;code
  endif
 next
endif
 
 
 |