From c4babc5d9f3db5b6cf8110776e5a780eddfa8f05 Mon Sep 17 00:00:00 2001 From: darkrose Date: Tue, 19 Aug 2014 00:23:55 +1000 Subject: [PATCH] add option to use selection box or highlighting, and assorted tweaks to circuits nodes --- src/content_mapnode_circuit.cpp | 4 + src/game.cpp | 7 +- src/main.cpp | 371 -------------------------------- src/mapgen.cpp | 4 +- voxelands.conf.example | 2 + 5 files changed, 13 insertions(+), 375 deletions(-) diff --git a/src/content_mapnode_circuit.cpp b/src/content_mapnode_circuit.cpp index 195073f..5081a98 100644 --- a/src/content_mapnode_circuit.cpp +++ b/src/content_mapnode_circuit.cpp @@ -34,6 +34,7 @@ void content_mapnode_circuit(bool repeat) f = &content_features(i); f->description = std::string("Mese Wire"); f->setAllTextures("mese_wire.png"); + f->setAllTextureFlags(0); f->param_type = CPT_LIGHT; f->draw_type = CDT_WIRELIKE; f->energy_type = CET_CONDUCTIVE; @@ -56,6 +57,7 @@ void content_mapnode_circuit(bool repeat) f = &content_features(i); f->description = std::string("Copper Wire"); f->setAllTextures("copper_wire.png"); + f->setAllTextureFlags(0); f->param_type = CPT_LIGHT; f->draw_type = CDT_WIRELIKE; f->energy_type = CET_CONDUCTIVE; @@ -175,6 +177,7 @@ void content_mapnode_circuit(bool repeat) f->setAllMetaTextures("stone.png"); f->setMetaTexture(5,"circuit_switch_active_front.png"); f->param_type = CPT_FACEDIR_WALLMOUNT; + f->param2_type = CPT_LIGHT; f->draw_type = CDT_NODEBOX_META; f->rotate_tile_with_nodebox = true; f->is_ground_content = true; @@ -204,6 +207,7 @@ void content_mapnode_circuit(bool repeat) f->description = std::string("Button"); f->setAllTextures("stone.png"); f->param_type = CPT_FACEDIR_WALLMOUNT; + f->param2_type = CPT_LIGHT; f->draw_type = CDT_NODEBOX; f->is_ground_content = true; f->energy_type = CET_SWITCH; diff --git a/src/game.cpp b/src/game.cpp index 705e761..8c0254e 100644 --- a/src/game.cpp +++ b/src/game.cpp @@ -1796,8 +1796,11 @@ void the_game( Visualize selection */ - //hilightboxes.push_back(nodehilightbox); - client.setTempMod(nodepos, NodeMod(NODEMOD_SELECTION)); + if (g_settings->exists("selected_node") && g_settings->get("selected_node") == "outline") { + hilightboxes.push_back(nodehilightbox); + }else{ + client.setTempMod(nodepos, NodeMod(NODEMOD_SELECTION)); + } if(nodig_delay_counter > 0.0) { diff --git a/src/main.cpp b/src/main.cpp index f6d577e..d26e5f9 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -17,377 +17,6 @@ with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ -/* -=============================== NOTES ============================== -NOTE: Things starting with TODO are sometimes only suggestions. - -NOTE: iostream.imbue(std::locale("C")) is very slow -NOTE: Global locale is now set at initialization - -NOTE: If VBO (EHM_STATIC) is used, remember to explicitly free the - hardware buffer (it is not freed automatically) - -NOTE: A random to-do list saved here as documentation: -A list of "active blocks" in which stuff happens. (+=done) - + Add a never-resetted game timer to the server - + Add a timestamp value to blocks - + The simple rule: All blocks near some player are "active" - - Do stuff in real time in active blocks - + Handle objects - - Grow grass, delete leaves without a tree - - Spawn some mobs based on some rules - - Transform cobble to mossy cobble near water - - Run a custom script - - ...And all kinds of other dynamic stuff - + Keep track of when a block becomes active and becomes inactive - + When a block goes inactive: - + Store objects statically to block - + Store timer value as the timestamp - + When a block goes active: - + Create active objects out of static objects - - Simulate the results of what would have happened if it would have - been active for all the time - - Grow a lot of grass and so on - + Initially it is fine to send information about every active object - to every player. Eventually it should be modified to only send info - about the nearest ones. - + This was left to be done by the old system and it sends only the - nearest ones. - -Vim conversion regexpes for moving to extended content type storage: -%s/\(\.\|->\)d \([!=]=\)/\1getContent() \2/g -%s/content_features(\([^.]*\)\.d)/content_features(\1)/g -%s/\(\.\|->\)d = \([^;]*\);/\1setContent(\2);/g -%s/\(getNodeNoExNoEmerge([^)]*)\)\.d/\1.getContent()/g -%s/\(getNodeNoExNoEmerge(.*)\)\.d/\1.getContent()/g -%s/\.d;/.getContent();/g -%s/\(content_liquid\|content_flowing_liquid\|make_liquid_flowing\|content_pointable\)(\([^.]*\).d)/\1(\2.getContent())/g -Other things to note: -- node.d = node.param0 (only in raw serialization; use getContent() otherwise) -- node.param = node.param1 -- node.dir = node.param2 -- content_walkable(node.d) etc should be changed to - content_features(node).walkable etc -- Also check for lines that store the result of getContent to a 8-bit - variable and fix them (result of getContent() must be stored in - content_t, which is 16-bit) - -NOTE: Seeds in 1260:6c77e7dbfd29: -5721858502589302589: - Spawns you on a small sand island with a surface dungeon -2983455799928051958: - Enormous jungle + a surface dungeon at ~(250,0,0) - -Old, wild and random suggestions that probably won't be done: -------------------------------------------------------------- - -SUGG: If player is on ground, mainly fetch ground-level blocks - -SUGG: Expose Connection's seqnums and ACKs to server and client. - - This enables saving many packets and making a faster connection - - This also enables server to check if client has received the - most recent block sent, for example. -SUGG: Add a sane bandwidth throttling system to Connection - -SUGG: More fine-grained control of client's dumping of blocks from - memory - - ...What does this mean in the first place? - -SUGG: A map editing mode (similar to dedicated server mode) - -SUGG: Transfer more blocks in a single packet -SUGG: A blockdata combiner class, to which blocks are added and at - destruction it sends all the stuff in as few packets as possible. -SUGG: Make a PACKET_COMBINED which contains many subpackets. Utilize - it by sending more stuff in a single packet. - - Add a packet queue to RemoteClient, from which packets will be - combined with object data packets - - This is not exactly trivial: the object data packets are - sometimes very big by themselves - - This might not give much network performance gain though. - -SUGG: Precalculate lighting translation table at runtime (at startup) - - This is not doable because it is currently hand-made and not - based on some mathematical function. - - Note: This has been changing lately - -SUGG: A version number to blocks, which increments when the block is - modified (node add/remove, water update, lighting update) - - This can then be used to make sure the most recent version of - a block has been sent to client, for example - -SUGG: Make the amount of blocks sending to client and the total - amount of blocks dynamically limited. Transferring blocks is the - main network eater of this system, so it is the one that has - to be throttled so that RTTs stay low. - -SUGG: Meshes of blocks could be split into 6 meshes facing into - different directions and then only those drawn that need to be - -SUGG: Background music based on cellular automata? - http://www.earslap.com/projectslab/otomata - -SUGG: Simple light color information to air - -SUGG: Server-side objects could be moved based on nodes to enable very - lightweight operation and simple AI - - Not practical; client would still need to show smooth movement. - -SUGG: Make a system for pregenerating quick information for mapblocks, so - that the client can show them as cubes before they are actually sent - or even generated. - -SUGG: Erosion simulation at map generation time - - This might be plausible if larger areas of map were pregenerated - without lighting (which is slow) - - Simulate water flows, which would carve out dirt fast and - then turn stone into gravel and sand and relocate it. - - How about relocating minerals, too? Coal and gold in - downstream sand and gravel would be kind of cool - - This would need a better way of handling minerals, mainly - to have mineral content as a separate field. the first - parameter field is free for this. - - Simulate rock falling from cliffs when water has removed - enough solid rock from the bottom - -SUGG: For non-mapgen FarMesh: Add a per-sector database to store surface - stuff as simple flags/values - - Light? - - A building? - And at some point make the server send this data to the client too, - instead of referring to the noise functions - - Ground height - - Surface ground type - - Trees? - -Gaming ideas: -------------- - -- Aim for something like controlling a single dwarf in Dwarf Fortress -- The player could go faster by a crafting a boat, or riding an animal -- Random NPC traders. what else? - -Game content: -------------- - -- When furnace is destroyed, move items to player's inventory -- Add lots of stuff -- Glass blocks -- Growing grass, decaying leaves - - This can be done in the active blocks I guess. - - Lots of stuff can be done in the active blocks. - - Uh, is there an active block list somewhere? I think not. Add it. -- Breaking weak structures - - This can probably be accomplished in the same way as grass -- Player health points - - When player dies, throw items on map (needs better item-on-map - implementation) -- Cobble to get mossy if near water -- More slots in furnace source list, so that multiple ingredients - are possible. -- Keys to chests? - -- The Treasure Guard; a big monster with a hammer - - The hammer does great damage, shakes the ground and removes a block - - You can drop on top of it, and have some time to attack there - before he shakes you off - -- Maybe the difficulty could come from monsters getting tougher in - far-away places, and the player starting to need something from - there when time goes by. - - The player would have some of that stuff at the beginning, and - would need new supplies of it when it runs out - -- A bomb -- A spread-items-on-map routine for the bomb, and for dying players - -- Fighting: - - Proper sword swing simulation - - Player should get damage from colliding to a wall at high speed - -Documentation: --------------- - -Build system / running: ------------------------ - -Networking and serialization: ------------------------------ - -SUGG: Fix address to be ipv6 compatible - -User Interface: ---------------- - -Graphics: ---------- - -SUGG: Combine MapBlock's face caches to so big pieces that VBO - can be used - - That is >500 vertices - - This is not easy; all the MapBlocks close to the player would - still need to be drawn separately and combining the blocks - would have to happen in a background thread - -SUGG: Make fetching sector's blocks more efficient when rendering - sectors that have very large amounts of blocks (on client) - - Is this necessary at all? - -SUGG: Draw cubes in inventory directly with 3D drawing commands, so that - animating them is easier. - -SUGG: Option for enabling proper alpha channel for textures - -TODO: Flowing water animation - -TODO: A setting for enabling bilinear filtering for textures - -TODO: Better control of draw_control.wanted_max_blocks - -TODO: Further investigate the use of GPU lighting in addition to the - current one - -TODO: Artificial (night) light could be more yellow colored than sunlight. - - This is technically doable. - - Also the actual colors of the textures could be made less colorful - in the dark but it's a bit more difficult. - -SUGG: Somehow make the night less colorful - -TODO: Occlusion culling - - At the same time, move some of the renderMap() block choosing code - to the same place as where the new culling happens. - - Shoot some rays per frame and when ready, make a new list of - blocks for usage of renderMap and give it a new pointer to it. - -Configuration: --------------- - -Client: -------- - -TODO: Untie client network operations from framerate - - Needs some input queues or something - - This won't give much performance boost because calculating block - meshes takes so long - -SUGG: Make morning and evening transition more smooth and maybe shorter - -TODO: Don't update all meshes always on single node changes, but - check which ones should be updated - - implement Map::updateNodeMeshes() and the usage of it - - It will give almost always a 4x boost in mesh update performance. - -- A weapon engine - -- Tool/weapon visualization - -FIXME: When disconnected to the menu, memory is not freed properly - -TODO: Investigate how much the mesh generator thread gets used when - transferring map data - -Server: -------- - -SUGG: Make an option to the server to disable building and digging near - the starting position - -FIXME: Server sometimes goes into some infinite PeerNotFoundException loop - -* Fix the problem with the server constantly saving one or a few - blocks? List the first saved block, maybe it explains. - - It is probably caused by oscillating water - - TODO: Investigate if this still happens (this is a very old one) -* Make a small history check to transformLiquids to detect and log - continuous oscillations, in such detail that they can be fixed. - -FIXME: The new optimized map sending doesn't sometimes send enough blocks - from big caves and such -FIXME: Block send distance configuration does not take effect for some reason - -Environment: ------------- - -TODO: Add proper hooks to when adding and removing active blocks - -TODO: Finish the ActiveBlockModifier stuff and use it for something - -Objects: --------- - -TODO: Get rid of MapBlockObjects and use only ActiveObjects - - Skipping the MapBlockObject data is nasty - there is no "total - length" stored; have to make a SkipMBOs function which contains - enough of the current code to skip them properly. - -SUGG: MovingObject::move and Player::move are basically the same. - combine them. - - NOTE: This is a bit tricky because player has the sneaking ability - - NOTE: Player::move is more up-to-date. - - NOTE: There is a simple move implementation now in collision.{h,cpp} - - NOTE: MovingObject will be deleted (MapBlockObject) - -TODO: Add a long step function to objects that is called with the time - difference when block activates - -Map: ----- - -TODO: Mineral and ground material properties - - This way mineral ground toughness can be calculated with just - some formula, as well as tool strengths. Sounds too. - - There are TODOs in appropriate files: material.h, content_mapnode.h - -TODO: Flowing water to actually contain flow direction information - - There is a space for this - it just has to be implemented. - -TODO: Consider smoothening cave floors after generating them - -TODO: Fix make_tree, make_* to use seed-position-consistent pseudorandom - - delta also - -Misc. stuff: ------------- -TODO: Make sure server handles removing grass when a block is placed (etc) - - The client should not do it by itself - - NOTE: I think nobody does it currently... -TODO: Block cube placement around player's head -TODO: Protocol version field -TODO: Think about using same bits for material for fences and doors, for - example -TODO: Move mineral to param2, increment map serialization version, add - conversion - -SUGG: Restart irrlicht completely when coming back to main menu from game. - - This gets rid of everything that is stored in irrlicht's caches. - - This might be needed for texture pack selection in menu - -TODO: Merge bahamada's audio stuff (clean patch available) - -TODO: Move content_features to mapnode_content_features.{h,cpp} or so - -TODO: Fix item use() stuff; dropping a stack of cooked rats and eating - it gives 3 hearts and consumes all the rats. - -Making it more portable: ------------------------- - -Stuff to do before release: ---------------------------- - -Fixes to the current release: ------------------------------ - -Stuff to do after release: ---------------------------- - -Doing currently: ----------------- - -====================================================================== - -*/ #ifdef NDEBUG #ifdef _WIN32 diff --git a/src/mapgen.cpp b/src/mapgen.cpp index 9c1276c..ca089b6 100644 --- a/src/mapgen.cpp +++ b/src/mapgen.cpp @@ -1500,13 +1500,13 @@ void make_block(BlockMakeData *data) }else if (noisebuf_ground_crumbleness.get(x,y,z) > 0.4) { new_content = MapNode(CONTENT_STONE, MINERAL_SILVER); }else if (noisebuf_ground_crumbleness.get(x,y,z) > 0.3) { - new_content = MapNode(CONTENT_STONE, MINERAL_GOLD); + new_content = MapNode(CONTENT_STONE, MINERAL_QUARTZ); }else if (noisebuf_ground_crumbleness.get(x,y,z) > 0.2) { new_content = MapNode(CONTENT_STONE, MINERAL_COPPER); }else if (noisebuf_ground_crumbleness.get(x,y,z) > 0.1) { new_content = MapNode(CONTENT_STONE, MINERAL_TIN); }else if (noisebuf_ground_wetness.get(x,y+5,z) > 0.0) { - new_content = MapNode(CONTENT_STONE, MINERAL_QUARTZ); + new_content = MapNode(CONTENT_STONE, MINERAL_GOLD); } if(new_content.getContent() != CONTENT_IGNORE) diff --git a/voxelands.conf.example b/voxelands.conf.example index 6e0c78e..aba2a71 100644 --- a/voxelands.conf.example +++ b/voxelands.conf.example @@ -116,6 +116,8 @@ #anisotropic_filter = true #bilinear_filter = false #trilinear_filter = false +# How to show the node being pointed at (outline or hilight) +#selected_node = hilight # # Server stuff