Blecki / dwarfcorp

An open-source 3D colony management game for PC, Mac and Linux
http://www.dwarfcorp.com
Other
583 stars 72 forks source link

QOL improvements + bugs #211

Closed plasticware closed 7 years ago

plasticware commented 7 years ago

bugs:

7abdc1e in mklingen_dev:

cc30142 in master:

7d6092a: new crash:

bugs:

first steam release:

moved to #359: ~~-some music transition issues - for example, trade envoy arriving at night means night music->faction music->day music. sometimes, music stops altogether. -should probably get rid of god-mode generic items, like spawn "trinket" or "gem-encrusted trinket" or "meal", and have "rand bone" or rand meat" instead of generics. -craftsdwarves like to hang on the edges of blocks to use anvils. possibly other items, too (cooking table, brewing still, etc.). edit: actually, hanging on edges can happen for anything dwarves need to stay still for, including building objects. obviously hanging on walls is needed in some cases (building ladders, for example), but dwarves should prefer to stand on flat ground when possible. -clicking 'continue' from the dialog that pops up on pressing escape always unpauses the game, even if it was paused before pressing escape - game should remember original state when exiting dialog, and maybe change button text to 'back to game'. -can use unpause key while 'escape' dialog is active - unpausing should close the dialog. -apples and berries should probably not stack together in stockpile inventory. -start a new game, pause, then disable and close the tutorial. when unpausing, another tutorial window will open. -possible improvement: since chair's facing is not easy to tell when building, and it does have the minor visual effect of determining which direction dwarves eat food from, add something like an arrow on the ground to show orientation when rendering chair 'blueprints'? -option to cook food with whatever is available, in addition to current system of using specific ingredients? -option to select crafts to encrust by material (wood, stone, iron, etc.) in addition to current system of specific individual trinkets?~~

mklingen commented 7 years ago

when placing objects, can place more only based on current stockpile inventory, not taking into account materials consumed by other placements - for example, with the starting 8 iron, build an anvil. while first one is being built and 4 iron remain in stockpile, can assign many more build orders

Not sure this is a bug, more just a confusing feature. You're supposed to be able to queue up construction tasks. I think the real bug is that any building can be "disabled" because of lack of resources at all.

rounding error: fire two dwarves so you have 3, then build a stockpile, awarding $20. you actually get $20.01.

Lol each dwarf gets $6.66, but that should come out to $19.98. I think what's really going on is the money is getting cast to a float, redivided and then cast to an int again.

Blecki commented 7 years ago

increase water evaporation rate - rain kills the framerate and basically never recovers

Actually evaporation was disabled entirely. Re-enabled on my branch; probably needs tweaks.

super nitpicky, but loading screen doesn't seem to be exactly 2x scale - take a screenshot and zoom in. pixels are 2x2, 2x3, 3x3.

The loading screen minigame is a pile of garbage. I hacked it together one evening while in the hospital (no joke). Going to rewrite or remove it.

don't make 'paused' text block mouse? i feel like i should be able to click on things behind it. same for stockpile inventory at top of screen, possibly other gui widgets as well - anything that doesn't have a solid tray should not block clicks

This is actually trickier than it appears as making them transparent to clicks is at odds with having them show tooltips on mouse hover. Could possibly alphamask them but that is expensive. Might need a new type of behavior that lets clicks through but still shows tooltips, but that could be equally strange.

mklingen commented 7 years ago

Alternatively we can move the "Paused" display elsewhere or draw it not as a widget.

Blecki commented 7 years ago

craftsdwarf autonomously queues up many craft tasks, sometimes prioritized over player-assigned tasks - make them only queue up one at a time at most

Believe I got this one. The tasks are queued when the dwarf has no active task - prevented them from being added when the dwarf has assigned incomplete tasks.

mklingen commented 7 years ago

Got a bunch more this weekend on my branch. More to come later.

Blecki commented 7 years ago

I'm working on the gui click through this week.

mklingen commented 7 years ago

@Blecki I have fixed that already with a hack. Just set the size to (0, 0)

Blecki commented 7 years ago

Do tooltips still work for the resources?

mklingen commented 7 years ago

loading crash in deserialize: fileutils.cs line 153, "Error converting value "{Min:{X:727.25 Y:21 Z:783.25} Max:{X:729.75 Y:23.75 Z:785.75}}" to type 'System.Nullable`1[Microsoft.Xna.Framework.BoundingBox]'. Path

Okay, this is caused by wrangling. I will convert that from type Nullable to a boundingbox + bool struct.

grammar: "will wrangle this a bird"

The GUI is just Italian. I don't see a problem here.

building blocks count in tray icons: new double counting issue, since blocks are subtracted when designated with tool and then again when materials are taken out of the stockpile

Problem is caused by not counting dwarf inventory as part of resources. Very difficult to solve correctly...

mklingen commented 7 years ago

Fixed the wrangling grammar and deserialize crash

mklingen commented 7 years ago

Almost all of these done now. Snow melting -- that would require a heat system, something I would love to implement but would take a lot of time. Another hack might be to create entities which melt new snow generated by snowflakes.

Object placement -- still not sure if I want to do this. Maybe I will actually mirror the block placement system instead and just show the number that can be built with the current resources rather than disallowing placement.

Vorgon1 commented 7 years ago

Could put an automatic melting that is ~= to the rate snow falls in that area. That would provide a reason for the extra complication of snow melt runoff and creating rivers flowing down to the low areas and lakes. :)

Seasons would allow for snow across a wider range of the map but would also bring in the complications of growing seasons.

mklingen commented 7 years ago

craftsdwarf keeps trying to craft things when there aren't enough resources - task should be cancelled after assigning crafter multiple items (e.g. craft 10 trinkets), the crafter will autonomously craft 10 when idle - should only craft 1x

Fixed in my branch.

mklingen commented 7 years ago

can no longer click-drag for planting - one dwarf will plant one thing, then stop. while planting, all other plant orders are ignored.

It looks like it takes a few seconds for dwarves to release the farm times. Still trying to understand why this is the case.

Vorgon1 commented 7 years ago

Didn't know if this should be a new thread or lumped with this one. It goes to one that is checked, sooo been fixed?

bring back old system of having global pool of tasks, rather than assigning tasks to dwarves immediately, or at least consider dwarves' existing assigned tasks?

New game, selected everyone so they would stay bussy abit. Ordered some trees cut down, an area to be mined and an are to till. Axe guy should have gone to trees and then helped with tilling when done. Miners should have started digging, then helped with tilling if work left to do. Instead, everyone that can cut trees ran off to the trees, then started tilling while the axedrawf stood around. Then the craftdrawf stood around waiting for stone while the miners went to mine. Then 2 trade groups came but I had nothing to sell because which jobs they picked.

Blecki commented 7 years ago

We've been discussing switching back to the 'pool of tasks' model but it's not going to happen before the next release.

I don't know if it would help much in this situation - when you issue the first chop command, there's not mine commands to take preference for the miners, so even using a task pool they are going to go chop down the tree first. We would have to allow new tasks to preempt active tasks, which brings a whole new set of issues with it. It would, however, mean that after chopping, the miners go to mine instead of till.

Vorgon1 commented 7 years ago

I set up all the orders in pause, so no one started anything until all orders were given. Another issue with the current system is hiring another dwarf, they won't start helping with current task until you go through and repeat the orders for them.

Also, When all the dwarfs went to tilling I selected 1 and cancelled some of the tilling to get him to go start mining, but it cancelled for everyone. So it's kind of a hodge podge mix of pool orders and direct orders now kinda messed up for ether.

mklingen commented 7 years ago

Some things (tilling, mining, planting, chopping) are pooled. Others (crafting) are not. We definitely should think about this system. Even when the game is paused all orders get assigned immediately, so that's why all the dwarves did things in that order. I will make a new issue for this.

mklingen commented 7 years ago

https://github.com/CompletelyFairGames/dwarfcorp/issues/225

Blecki commented 7 years ago

I'll be working on the task input interface once the pool model is restored. I'll likely work on the task assignment algorithm as well.

Vorgon1 commented 7 years ago

When Dwarfs have nothing to do, they seen to just stand around where ever the last job was or at the storage area after dropping off stuff. So you have to hunt them down to see what they are upto and they can be hard to see when hiding in the crates. Most DF type games have some area that can be set as an idle point. A place to go when they have nothing to do.

mklingen commented 7 years ago

Dwarves currently will go to places where there are chairs to gather. Could also make them gather in other places.

mklingen commented 7 years ago

Fixed the farming issue @plasticware

mklingen commented 7 years ago

@plasticware fixed the crafting issue and notify users that dwarf can't craft it. Fixing the building issue will require a little more finesse but I think I can do it (basically the build task should always be retried until explicitly cancelled)

mklingen commented 7 years ago

placed more beds than i could build, then chopped down tree to gather more wood, but craftsdwarf does not retry task. i think in this case, craftsdwarf should reattempt, since construction pile does not go away.

I can't seem to reproduce this. Looking at the code, the dwarf should be retrying (and does). I wonder if something else causes the task to get deleted.

mklingen commented 7 years ago

Ah, I CAN reproduce it! It's caused by the dwarf thinking that there are available reasources because they are in another dwarf's inventory. This is tricky. I think I will remove the counting resources from within dwarf inventory because it appears to cause more trouble than its worth.

mklingen commented 7 years ago

@plasticware okay this fixes the crafting object bug https://github.com/CompletelyFairGames/dwarfcorp/commit/307d1b3edef7ef3409cc5ff9ff96dfc80b667273

mklingen commented 7 years ago

@plasticware I believe this fixes the farming bug https://github.com/CompletelyFairGames/dwarfcorp/commit/b2590f8439e93f42104aa442a82ff9118bc218b4

mklingen commented 7 years ago

@plasticware

multi-tile planting does not immediately reserve all tiles, allowing more than one thing to be planted on tiles. with starting four workers, plant on 3x3 area - only four tiles are reserved, and can keep issuing more plant orders on the other assigned tiles. - not fixed in 7d6092a

While it appears like you're assigning plant orders, they immediately get rejected. The dwarf doesn't attempt to plant there because it is invalid. The tiles don't get reserved until a dwarf is moving toward the tile to farm it. I guess I could reserve them when the task gets assigned but there's no mechanism for doing something on task assignment atm.

mklingen commented 7 years ago

purple screen on dwarfrunner screen, then black screen, then crash Minimap.cs line 184 cameraToTarget.Normalize(); {"Begin cannot be called again until End has been successfully called."}

Duplicate of the purple screen of death bug. It's tricky because somewhere, somehow the spritebatch is getting used in a thread which will randomly cause this error in random parts of the code.

mklingen commented 7 years ago

@plasticware fixed crafting bug with this commit https://github.com/CompletelyFairGames/dwarfcorp/commit/aa86761e50de029675ed93d0278d2afba02864f2

mklingen commented 7 years ago

dwarves hanging onto side of stockpiles fixed by this https://github.com/CompletelyFairGames/dwarfcorp/commit/8d00ca28bd59ce2d6f2386b45b7160af595ca4b4

mklingen commented 7 years ago

more crafting info https://github.com/CompletelyFairGames/dwarfcorp/commit/d31ea859a948038a740f2ec4c551187af47f77f6

mklingen commented 7 years ago

Fixed the craft rotations being misleading but this:

ladders can be rotated in tile adjacent to wall so that they float in midair - after placing a ladder this way, subsequent ladders will not automatically rotate to face walls.

Is a "wontfix" because its a feature, not a bug. Once you rotate an object, subsequent placements will have the same rotation. This is to allow you to quickly line up rows of objects. If you want a ladder floating in midair, why not? It's still technically attached to the wall.

mklingen commented 7 years ago

Fixed some of the other issues here. Thanks so much for all this comprehensive testing.

mklingen commented 7 years ago

Multi-tile planting fixed. Can't reproduce wrangle bug.

plasticware commented 7 years ago

another crash, after a few in-game days. just before this crash occurred, i also lost the ability to select objects (couldn't gather eggs or harvest plants), but that's probably a separate issue.

System.NullReferenceException was unhandled _HResult=-2147467261 _message=Object reference not set to an instance of an object. HResult=-2147467261 IsTransient=false Message=Object reference not set to an instance of an object. Source=DwarfCorp StackTrace: at DwarfCorp.GeometricPrimitive.Render(GraphicsDevice device) in c:\Users\W\Desktop\dwarfcorp\DwarfCorp\DwarfCorpXNA\Graphics\Primitives\GeometricPrimitive.cs:line 132 at DwarfCorp.WaterRenderer.DrawWaterFlat(GraphicsDevice device, Matrix view, Matrix projection, Shader effect, ChunkManager chunks) in c:\Users\W\Desktop\dwarfcorp\DwarfCorp\DwarfCorpXNA\Graphics\Effects\WaterRenderer.cs:line 213 at DwarfCorp.Gui.Widgets.MinimapRenderer.PreRender(DwarfTime time, SpriteBatch sprites) in c:\Users\W\Desktop\dwarfcorp\DwarfCorp\DwarfCorpXNA\Gui\Widgets\Minimap.cs:line 184 at DwarfCorp.GameStates.PlayState.Render(DwarfTime gameTime) in c:\Users\W\Desktop\dwarfcorp\DwarfCorp\DwarfCorpXNA\GameStates\PlayState.cs:line 354 at DwarfCorp.GameStates.GameStateManager.Render(DwarfTime time) in c:\Users\W\Desktop\dwarfcorp\DwarfCorp\DwarfCorpXNA\GameStates\GameStateManager.cs:line 149 at DwarfCorp.DwarfGame.Draw(GameTime time) in c:\Users\W\Desktop\dwarfcorp\DwarfCorp\DwarfCorpXNA\DwarfGame.cs:line 339 at Microsoft.Xna.Framework.Game.DrawFrame() at Microsoft.Xna.Framework.Game.Tick() at Microsoft.Xna.Framework.Game.HostIdle(Object sender, EventArgs e) at Microsoft.Xna.Framework.GameHost.OnIdle() at Microsoft.Xna.Framework.WindowsGameHost.RunOneFrame() at Microsoft.Xna.Framework.WindowsGameHost.ApplicationIdle(Object sender, EventArgs e) at System.Windows.Forms.Application.ThreadContext.System.Windows.Forms.UnsafeNativeMethods.IMsoComponent.FDoIdle(Int32 grfidlef) at System.Windows.Forms.Application.ComponentManager.System.Windows.Forms.UnsafeNativeMethods.IMsoComponentManager.FPushMessageLoop(IntPtr dwComponentID, Int32 reason, Int32 pvLoopData) at System.Windows.Forms.Application.ThreadContext.RunMessageLoopInner(Int32 reason, ApplicationContext context) at System.Windows.Forms.Application.ThreadContext.RunMessageLoop(Int32 reason, ApplicationContext context) at System.Windows.Forms.Application.Run(Form mainForm) at Microsoft.Xna.Framework.WindowsGameHost.Run() at Microsoft.Xna.Framework.Game.RunGame(Boolean useBlockingRun) at DwarfCorp.Program.Main(String[] args) in c:\Users\W\Desktop\dwarfcorp\DwarfCorp\DwarfCorpXNA\Program.cs:line 71 InnerException:

Blecki commented 7 years ago

I think I got this crash; but just in case, I also made the water renderer eat all exceptions. Worse case, the water doesn't show up in the minimap for a frame or two - much better than crashing.

mklingen commented 7 years ago

I thought I fixed that one :(

mklingen commented 7 years ago

@Blecki that VertexLock is protecting the vertex buffer from being changed by an outside thread (for example by the chunks rebuilding or water rebuilding)

Blecki commented 7 years ago

I already fixed it. The chunk rebuild no longer requires it, see my addition to liquid primitive. It's the only primitive that gets rebuilt in place so it's the only one that needs to be locked.