Jun 28 2013, 8:48 am
|
|
Gotta admit, never played any Zelda games, ever. So I wouldn't know. Let the flame war begin!
|
I think he is trying to say that open world means the map is generated and creates situations that the developer could or couldn't have imagined. The point is that its endless as far as a hard drive can hold (like minecraft) if places are "revisitable".
|
Actually in that case, it pretty much is. Everything including the landscape is pseudo-randomly generated at run-time. And it is infinite in terms of movement, however there is the limitation of list capacity. The number of maps in a realm is limited by the maximum capacity of a list. Each realm handles it's lists separately.
There is also support for enemy spawning too, you can even modify the environment as you wish. If that isn't open world, what is? |
You're both missing the key word I keep saying.
Seamless. http://en.wikipedia.org/wiki/Open_world Read this. An open world is defined as a vast, open world free of artificial barriers such as loading screens or the edge of a map. It is one huge map. A game that uses a lot of small maps to make a big world might have an open world, but it is not open world in the sense I am talking about. Go play Minecraft. That has a large open world. It is one map that is generated as you move along. It is not a lot of small maps that when you reach the edge of one, you're teleported to another map. |
In response to The Magic Man
|
|
That's what I told him.
|
I get what you are saying, I'm taking into the account that this is pretty much as much as open world as BYOND can get. Minecraft in itself is made out of chunks themselves, basic 16x16x16 chunks, so the maps are basically chunks of the world, which are generated when they are entered. The maps connect perfectly, the only difference being that we can't render the maps next to each other visually.
|
In response to Taitz
|
|
The method you're using is basically the same as every game with a large world would use. But the way it's presented in the actual game is entirely different, and that is the difference between a seamless open world and just having a big world.
|
In response to The Magic Man
|
|
I'm not sure I understand what you are trying to say or you understand what I am saying.
Never the less, could you suggest a better system for getting this or a better result on BYOND with the currently available options? |
In response to Taitz
|
|
Using your method, I believe you can create what appears to be an entirely seamless, open world. You would make the map chunks large enough that the mob could cover a certain distance across them, without seeing the edge. When the map's edge meets the view's edge, jump to the next Z chunk. What this means is that each Z level has an imaginary boundary smaller than the map itself, that when crossed, takes you to the boundary edge of the next Z level.
This is the kind of thing I imagined as soon as I read your idea, which is why I assumed it would be complex. Here is some pseudocode to show the general idea, so that hopefully you understand what I mean here: spawn while((edge of client.view) != (edge of map)) If done correctly, something like this should effectively conceal the map's edge, and produce the illusion of an entirely seamless, gigantic, world map. |
In response to Multiverse7
|
|
This would produce better results. But you'd have to take into consideration a lot of things.
Imagine at the edge of one map is me and a mob. I move off the edge of the map and am seamlessly taken to another map. What about this mob? It would appear to vanish, so you'd have to move it with me, or if this is a multiplayer game make a copy of it. And if the game is a multiplayer, what if two people are at the edge of a map and one moves to another z level? They should still have vision of each other. You'd have to handle all these kind of issues and I'd imagine it could become a major pain to do, especially for multiplayer. |
So you mean that part of the map isn't actually even used, but is pretty much only for visual purposes, I get it. Well it could be implemented like this, but this would bring extra problems, for example objects and turf, which are "imaginary" need to be completely in sync with the ones on the other maps.
This would overly complicate the whole game and produce more resource usage as necessary, so in terms of efficiency the system should restrain from trying to achieve this perfection? |
you'd only need half view size (width) border around the map, and you'd only take appearances.
you'd sacrifice a little realism for excluding objects from transitions... depending on the game, this could be a bad thing or a don't-worry-about-it thing... another idea is to do this same "type" of thing over bodies of water, where people won't really be "running around" |
Well I suppose it does also give you certain benefits, like you can actually see what kind of area you'll be running into. Technically rewriting the system to become like this wouldn't be much of an issue, turfs and objects can be linked to be affected by the same changed.
The clone object/turf would be the same type and all changes and modifications would be shared. However we could still make use of image objects to be the visual representations and it would function kind of like a phantom. The latter version would give you less functionality, but makes do with less resource expenditure. |
In response to Taitz
|
|
But that part of the map technically is used.
If I am on one map, and attack a player on another map, I have to be able to interact with the part of the map that is "only visual". So does the other player. It's probably be a massive hassle keeping the entire game in sync using this method, but no doubt it would produce a lot better results if you managed it. |
Well, I'm not sure about the details at all, especially in the case of multiplayer. This is like some kind of spooky relativity problem. Most objects will simply be too "far away" to actually interact with in the first place, so they can be image mirages, but if it's something that can operate at a distance, simply make an exact copy of it, until it's no longer needed.
You have to keep in mind that just because something may be very complex, doesn't necessarily mean that it will be slow, if it's done right. |
Actually there shouldn't be any relativity problem, just have to write a new type of get_step() function for attack or what not, based on the nature of your action, I have that down with my current existing system actually, even things like range() is possible with it.
it would be easier if a new type of Map Maker were to be introduced where you can interlock maps as you please, during run-time or not. The rendering would need to be changed and the Move() function partially as well, the minimum. Although I wouldn't mind a more convenient method. |
In response to Multiverse7
|
|
You can pretty much handle it with image objects, you set their icon to the same and the icon_state as well then adjust the pixel_x, pixel_y and pixel_z offsets to the same level as the original, after that you give it a location and show it to the entire world and to finish it you add it into the phantom/mirage list of the object, so it can be used when the object moves, when the object is deleted, so will be the image objects.
|
In response to Taitz
|
|
Not sure if just using images would work. Like I said, you would need some interaction between different maps.
What if I am on one map, and a monster is on another. Then I get too close to the monster and it starts attacking me? We're both on different maps, but it's AI needs to account for this and act accordingly. It's a lot more complex than making sure all maps are visually in sync. |
In response to The Magic Man
|
|
I get it, I'm always paranoid about things like this. Based on what the mob reacts to you can do various things, the most simple one being comparing the global x and y positions along with the realm it is in, plus the distance between those particular objects.
|
In response to The Magic Man
|
|
And if you are worried that there are too many mobs to search through, which would end up having pretty high costs, we can implement a new list to the map registry called "mobs" and populate it with only the mobs, which are on that map. So based on the range you need to check for entities you can get the mobs from the particular maps needed.
|