Diablo style item spawning

BlitzMax Forums/BlitzMax Programming/Diablo style item spawning

The forum is locked. These are the original blitzbasic.com forums, kept so they can still be read. No new topics, replies or edits can be made here. To join in, head over to the Blitz3D+ forums.

Maybe this helps you a bit. It is thrown together very fast and I don't have much time to explain it currently. But take a look:

Type TItem
	Field Name:String
	Field Multiplier:Float
	Field FireDmg:Float
	Field IceDmg:Float
	
	Field Class:String
	Field AttackMin:Int
	Field AttackMAx:Int
End Type


Type TMultiplier
	Global Map:TMap = CreateMap()
	Global List:TList = New TList
	
	Field Multi:Float
	Field Name:String
	
	Function Add(Name:String,Multi:Float,chance:Int=1)
		Local M:TMultiplier = New TMultiplier
		M.Multi = Multi
		M.Name = Name
		
		Map.Insert(Name,M)
		
		For Local I:Int = 0 To Chance-1
			List.addlast(M.Name)
		Next
	End Function
	
	Function Get:TMultiplier()
		Local I:Int = Rand(0,CountList(TMultiplier.List)-1)
		Return TMultiplier(MapValueForKey(TMultiplier.Map,String(TMultiplier.List.ValueatIndex(I))))
	End Function
End Type

Type TClass
	Global Map:TMap = CreateMap()
	Global List:TList = New TList
	
	
	Field Name:String
	
	Function Add(Name:String,chance:Int=1)
		Local M:TClass = New TClass
		M.Name = Name
		
		Map.Insert(Name,M)
		
		For Local I:Int = 0 To Chance-1
			List.addlast(M.Name)
		Next
	End Function
	
	Function Get:TClass()
		Local I:Int = Rand(0,CountList(TClass.List)-1)
		Return TClass(MapValueForKey(TClass.Map,String(TClass.List.ValueatIndex(I))))
	End Function
End Type

Type TExtra
	Global Map:TMap = CreateMap()
	Global List:TList = New TList
	
	Field Name:String
	
	Function Add(Name:String,chance:Int=1)
		Local M:TExtra= New TExtra
		M.Name = Name
		
		Map.Insert(Name,M)
		
		For Local I:Int = 0 To Chance-1
			List.addlast(M.Name)
		Next
	End Function
	
	Function Get:TExtra()
		Local I:Int = Rand(0,CountList(TEXtra.List)-1)
		Return TExtra(MapValueForKey(TExtra.Map,String(TExtra.List.ValueatIndex(I))))
	End Function
End Type





TMultiplier.Add("Rare",5.0,1.0)
TMultiplier.Add("Regular",2.5,4.0)
TMultiplier.Add("Bad",1.0,10.0)

TClass.Add("Sword",1.0)
TClass.Add("Axe",1.0)

TExtra.Add("Fire",5.0)
TExtra.Add("Ice",5.0)
TExtra.Add("the Destructor",1.0)


For Local I:Int = 0 To 99
	Local M:TMultiplier = TMultiplier.Get()
	Local C:TClass = TClass.Get()
	Local E:TExtra = TExtra.Get()
	Print M.Name + " " + C.Name + " of " + E.Name
Next