• There is NO official Otland's Discord server and NO official Otland's server list. The Otland's Staff does not manage any Discord server or server list. Moderators or administrator of any Discord server or server lists have NO connection to the Otland's Staff. Do not get scammed!

Random Map Generator

Capaverde

New Member
Joined
Sep 30, 2007
Messages
107
Reaction score
4
wouldn't be too hard

would it?

for tiles: grass/sand/earth/water
then have a mountain generator, a cave generator and a building generator

make some lava too and anything else I might've forgotten, it can all be generated, monster spawns too
 
Doesn't TFS have this feature? Pretty sure that they at least did.

Or which distribution are you talking about?

Lua:
randomizeTiles = "yes"
 
Some tiles? This feature or function will randomize grass/dirt/rock floor and so on, on the entire map. Either it's me that just don't understand what you're looking for or you'll have to explain better
 
who cares? its just tiles, and they just randomize tiles of the same type
did I express myself that bad?
making a whole otbm from scratch, no mapper involvement necessary, the generator decides where it puts sand,mountains etc
 
wouldn't be too hard

would it?

make some lava too and anything else I might've forgotten, it can all be generated, monster spawns too
Then learn programming make it yourself? Or you could just spend some time to make a map instead of being lazy.
 
I know programming, I'm just throwing the idea out there before trying, see what people think
And it's not lazy, it's efficient
 
A simple map generator may not be hard, but it really gets complicated to get any decent basic map. Could be fun to have, tho.
 
I don't see this happen unless somebody wants to learn from it or to seek a challenge, eventhough this person might first consider to contribute to something that is really useful and learn from that at the same time. I think this feature will only be useful for people who want to set-up a server for testing and for very lazy people who normally use Tibia maps instead anyway and mappers will most likely refuse to use generated-content, like you see with auto-bordering and beside that, how hard is it to download a map or to open RME and make a simple map? Though it's still cool but pretty useless.
 
making a big map can take days or months
it's useful cuz it's fast and with enough programming it can be made very realistic
 
Doesn't TFS have this feature? Pretty sure that they at least did.

Or which distribution are you talking about?

Lua:
randomizeTiles = "yes"

Randomizing tiles is just changing grass to be different sprites etc so its not so plain instead of just using 1 grass sprite. (If I remember right.)
 
Randomizing tiles is just changing grass to be different sprites etc so its not so plain instead of just using 1 grass sprite. (If I remember right.)

And earth as well, not sure on the other. I misunderstood him anyway!
 
He means something like in HoMaM III map editor, where you can just generate a whole map.
You click a button and a random map with cities and hunts is created.
Heroes_of_Might_and_Magic_3_Complete_3.jpg


I guess it would lack different style, only few items would be used and stuff.
Nothing you would really use in an OT in the end.
 
ok, made a very simple one that just fills a 128x128 area with grass


Code:
--teste
--soh gerar 128x128 tiles de grass
require "bit32"

--SPECIAL CHARACTERS
	NODE_START = 0xfe
	NODE_END = 0xff
	ESCAPE_CHAR = 0xfd

--OTBM NODE TYPES
	OTBM_ROOTV1 = 1
	OTBM_MAP_DATA = 2
	OTBM_ITEM_DEF = 3
	OTBM_TILE_AREA = 4
	OTBM_TILE = 5
	OTBM_ITEM = 6
	OTBM_TILE_SQUARE = 7
	OTBM_TILE_REF = 8
	OTBM_SPAWNS = 9
	OTBM_SPAWN_AREA = 10
	OTBM_MONSTER = 11
	OTBM_TOWNS = 12
	OTBM_TOWN = 13
	OTBM_HOUSETILE = 14

--OTBM ATTR TYPES
	OTBM_ATTR_DESCRIPTION = 1
	OTBM_ATTR_EXT_FILE = 2
	OTBM_ATTR_TILE_FLAGS = 3
	OTBM_ATTR_ACTION_ID = 4
	OTBM_ATTR_UNIQUE_ID = 5
	OTBM_ATTR_TEXT = 6
	OTBM_ATTR_DESC = 7
	OTBM_ATTR_TELE_DEST = 8
	OTBM_ATTR_ITEM = 9
	OTBM_ATTR_DEPOT_ID = 10
	OTBM_ATTR_EXT_SPAWN_FILE = 11
	OTBM_ATTR_RUNE_CHARGES = 12
	OTBM_ATTR_EXT_HOUSE_FILE = 13
	OTBM_ATTR_HOUSEDOORID = 14
	OTBM_ATTR_COUNT = 15
	OTBM_ATTR_DURATION = 16
	OTBM_ATTR_DECAYING_STATE = 17
	OTBM_ATTR_WRITTENDATE = 18
	OTBM_ATTR_WRITTENBY = 19
	OTBM_ATTR_SLEEPERGUID = 20
	OTBM_ATTR_SLEEPSTART = 21
	OTBM_ATTR_CHARGES = 22


function lchar(i) s="" while i>0 do s=s..string.char(i%256) i=math.floor(i/256) end return s end

function format(s,size)
local len = #s
for x=1,size/8-len do
s=s.."\0"
end
return s
end

function writeData(f,data,size,unescape)
local thestr
if type(data) == "string" then
thestr = format(data,size)
elseif type(data) == "number" then
thestr = format(lchar(data),size)
else
print(data)
end
for x=1,size/8 do
local c = thestr:sub(x,x)
--print(#thestr,size,string.byte(c))
--if c == string.char(0x0D) then error("daonde") end
	if unescape and (c==string.char(NODE_START) or c==string.char(NODE_END) or c==string.char(ESCAPE_CHAR)) then
		f:write(string.char(ESCAPE_CHAR))
	end
	f:write(c)
end
end

function addU8(f,data)
	writeData(f,data,8,true)
end
function addByte(f,data)
	writeData(f,data,8,false)
end
function addU16(f,data)
	writeData(f,data,16,true)
end
function addU32(f,data)
	writeData(f,data,32,false)
end
function addString(f,data)
	if #data > 0xffff then
		return false
	end
addU16(f,#data)
writeData(f,data,#data*8,false)
end

function startNode(f,c)	--c is a char	
writeData(f,NODE_START,8,false)
writeData(f,c,8,true)
end

function endNode(f)
writeData(f,NODE_END,8,false)
end


WIDTH = 128
HEIGHT = 128
ITEMDWMAJORVERSION = 2
ITEMDWMINORVERSION = 8
--
function makeRandomMap(name)
f = io.open(name,"wb")
addU32(f,0); 	--version
startNode(f,0)
	addU32(f,0); 	--version again :O
	addU16(f,WIDTH)
	addU16(f,HEIGHT)
	addU32(f,ITEMDWMAJORVERSION)
	addU32(f,ITEMDWMINORVERSION)

	startNode(f,OTBM_MAP_DATA)
		--addByte(f,OTBM_ATTR_DESCRIPTION)
		--addString(f,"Created with RandomGen")
		first = true
		local_x,local_y,local_Z=-1,-1,-1
		z=7
		for xi=0,WIDTH-1,256 do
		for yi=0,HEIGHT-1,256 do
		for x=xi,math.min(xi+256-1,WIDTH-1) do
		for y=yi,math.min(yi+256-1,HEIGHT-1) do
			if x<local_x or x>=local_x+256 or y<local_y or y>=local_y+256 or z~=local_z then
				if not first then
					endNode(f)
				end	
				first = false
				--start new node
				startNode(f,OTBM_TILE_AREA)
				local_x=bit32.band(x,0xff00)
				local_y=bit32.band(y,0xff00)
				local_z=z
				addU16(f,local_x)
				addU16(f,local_y)
				addU8(f,local_z)
			end
			startNode(f,OTBM_TILE)
			addU8(f,bit32.band(x,0xff))  --print("x:",bit32.band(x,0xff))
			addU8(f,bit32.band(y,0xff))  --print("y:",bit32.band(y,0xff))

				--item
				addByte(f,OTBM_ATTR_ITEM)
				addU16(f,4526)
					--[[startNode(f,OTBM_ITEM)
					addU16(f,4526)
					endNode(f)]]
				--more items here

				--
			endNode(f)
		end
		end
		end
		end
		if not first then
			endNode(f)
		end
	endNode(f)
endNode(f)
f:close()
end
 
There is feathure "generate map" in RME, but it's disabled. From what I remember it was enabled in one of older versions but didn't made actual shapes just floating grass everywhere on z: 7, if you want to generate some kind of shape just check tools thread or google "shape generator", someone already made it.
 
Back
Top