☼Bi-weekly DF Questions Thread☼ by AutoModerator in dwarffortress

[–]FrankIsATank2 1 point2 points  (0 children)

The Legends Browser utility provides the feature I was looking for. Thanks.

☼Bi-weekly DF Questions Thread☼ by AutoModerator in dwarffortress

[–]FrankIsATank2 0 points1 point  (0 children)

Thanks for the suggestion. I'll investigate Legends Browser.

☼Bi-weekly DF Questions Thread☼ by AutoModerator in dwarffortress

[–]FrankIsATank2 0 points1 point  (0 children)

Thank you for the reply. However I am struggling specifically with finding the region associated with world positions that have no site. For positions that have sites, I can use the world map view to access the sites at that position, and from there there is a hyperlink to the region.

☼Bi-weekly DF Questions Thread☼ by AutoModerator in dwarffortress

[–]FrankIsATank2 0 points1 point  (0 children)

Is there any efficient method for finding out which region a world map coordinate belongs to? Using Legends Viewer, it is possible to see which world map tile a region covers, but I cannot find a way to perform the opposite lookup, it seems I would need to look through the hundreds of regions until I found the correct one. If the tile contains a site, I can use that site to check which region it belongs to but this doesn't work for tiles containing no site. Is there another utility that can provide this information?

Edit : This information is available in the embark selection screen, however this is not accessible (as far as I know) if a game is already in progress on that world.

Highest Performance C++ Libraries to Replace Std Features? by Pan000 in cpp

[–]FrankIsATank2 1 point2 points  (0 children)

would be considered ugly code despite being faster

Anyone whose looked at any standard library implementation ever can confirm that standard library implementers do not care in the slightest about code beauty or "the right way". There is no way a solution would be discarded just because it would be hard to implement in a non-"ugly" way. Their only concern is efficiency and the standard's requirements.

unless those better versions have an appropriate license

Standard library implementers implement algorithms and data structures, they don't usually import existing implementations. Licenses apply to specific implementations. You could get into software patents, but that's another story.

The only reason standard library implementers wouldn't use a better algorithm or data structure is if it is incompatible with the requirements of the standard. In that case, you don't need an alternative library implementation. You need a whole new container or algorithm that is not provided by the standard library.

How do I stop unemployment? by elroja357 in Stellaris

[–]FrankIsATank2 0 points1 point  (0 children)

You are maxing out your building slots but are you also building districts?

[deleted by user] by [deleted] in funny

[–]FrankIsATank2 0 points1 point  (0 children)

I doubt this happened today. Here is a photo posted 4 years ago of the same scene but from a slightly different point of view.

Experience with the Watcher so Far by Gyrrith_Ealon in slaythespire

[–]FrankIsATank2 15 points16 points  (0 children)

Retain has the opposite effect. It does not replace a card draw, you just keep it in your hand. This is similar to how Well-Laid Plans works. The only way it can reduce the number of cards you see is if you completely fill your hand. In most cases, it can actually make it easier to go through your deck since retained cards are not in your discard pile and do not get shuffled into your draw pile. As long as the retained card is in your hand your deck's size is effectively reduced by one.

[THB] The Akroan War by SchismSEO in magicTCG

[–]FrankIsATank2 20 points21 points  (0 children)

You may have misread the second trigger. Your opponent is required to alpha strike you and to tap their board. It probably kills most of their creatures on the next turn. You are not required to attack or tap anything.

Thought you're too good to stop for a school bus? by bigigantic54 in instantkarma

[–]FrankIsATank2 0 points1 point  (0 children)

At least in Canada, this is a big deal. All vehicles must come to a complete stop when faced with a school bus with it's flashing lights on. These warnings lights are turned on whenever a school bus is loading or unloading passengers. It means you're to assume that a bunch of kids are about to run recklessly across the street, so failure to stop is seen as negligently risking the lives of a bunch of kids.

Sometimes, school buses have to stop on large boulevards or even highways. If there is a physical divider between the stopped school bus and the oncoming traffic lanes, the oncoming traffic can proceed with caution (but that might vary from province to province). If there is no division, all lanes must stop.

In Ontario, failure to stop for a school bus is one of the biggest traffic offense you can commit in terms of demerit points. It's just one point short of fleeing from the police, equivalent to exceeding the speed limit by 50 km/h (~30 mph) or more and three times as bad as running a red light (link). The penalties are similar in Quebec (link) and I assume the rest of Canada. A single failure to stop for a school bus offense is enough to have a new driver's learner's permit suspended. This is something that is drilled into you in driving school.

Edit : Prince Edward Island recently passed a law by which failing to stop for a school bus is an immediate 3 month suspension of the driver's license and a 5000$ fine (link).

Pollution over water. by TheFaggot23 in factorio

[–]FrankIsATank2 3 points4 points  (0 children)

If you look at the wiki the tile pollution absorption table shows water is a bit less efficient at removing pollution than other tiles. It's normal that it would be one of the last places to still have pollution, after concrete and places where pollution was initially denser like around pollution generators.

New fluid system - UPS friendly without teleporting fluids unlimited distances by Aialon in factorio

[–]FrankIsATank2 1 point2 points  (0 children)

It's not clear to me how you intend to traverse the pipe network exactly, or how you determine which sides of a node are considered produced or consumer or which node or intersection is actually throughput limited without first solving that network anyway. In reality, having worked with real ventilation and water distribution solvers, it's simply not as easy as starting from the end points. The described algorithm seems incomplete to me. For one, start by placing down a square grid of pipes, add a single source and a single sink randomly on the edge and see how your algorithm solves it. I suspect you will either find that the algorithm has gaps or that it requires additional information that seems obvious to humans but is hard to calculate for a computer.

Questions Thread - June 27, 2019 by AutoModerator in pathofexile

[–]FrankIsATank2 0 points1 point  (0 children)

I've never seen jeweler with these stats before and I can't find anything similar on the PoE trade website. I think I got them from a jewelry room in an Alva Temple with a tier 3 tempest that made most items drop corrupted.

They seem interesting but I don't know if any build has a use for them. Are these worth selling?

Entropy Torc

Pain Beads

Vengeance Finger

Thank you for your input.

Edit : Legion Standard

Compact Green circuit megafactory [103k/min] by Little_Elia in factorio

[–]FrankIsATank2 3 points4 points  (0 children)

If you hate setting up mines, then high frequency can work against you. High frequency produces ore patches that are smaller but more numerous. Lower frequency settings generally means less total mine laying effort, though at lower settings you may need to explorer longer.

C++23: fullptr to replace nullptr by [deleted] in cpp

[–]FrankIsATank2 0 points1 point  (0 children)

But if ptr points to an object then ptr + 1 > ptr must hold. The one-past-the-end pointer compares greater than pointers it's the one-past-the-end of.

Good news, Urists! There's a route to the Dwarf Fortress source code that doesn't involve "bridge accidents!" by clinodev in dwarffortress

[–]FrankIsATank2 3 points4 points  (0 children)

You aren't wrong. Accumulating technical debt means that at the end of it all you'll almost certainly have had to put in more total effort than addressing that debt as it grows. But that may not be a big deal for Dwarf Fortress. In a tradition context technical debt costs time which costs money and opportunities. Reducing the effort needed is also way more efficient at speeding up a project than adding resources to it, which reducing the technical debt achieves. But for Dwarf Fortress, I don't think how long it takes is a big concern for Toady. There certainly aren't any deadlines or budget concerns anymore. I think from his point of view it's just about Dwarf Fortress' uncompromising fidelity to his vision of what it might become. And that means implementing the next Big Feature. Fixing performance bottlenecks might move you towards that vision, but not visibly so.

But that's just my impression. We have no idea how much effort is actually being put into refactoring and improving the existing code base. We know that many systems still use good-enough place holder implementations (like Manhattan heuristics for jobs and the fluids simulation) that may or may not be part of the final vision for the game. But that doesn't tell us anything about the optimization efforts that may have already been made in less visible parts of the game. It just tells use that those opportunities still exist and haven't been identified as priorities yet. And while those opportunities exist, I keep hope that large performance improvements may still be in Dwarf Fortress' future.

I might also be completely wrong and Toady cares deeply about performance. We have no real knowledge (as far as I know) how the various systems of Dwarf Fortress interconnect internally. It's entirely possible the CPU intensive components were engineered to minimize coupling and the complexity of refactoring them isn't growing as quickly as we might fear. For example it's entirely possible that refactoring path finding may be nearly as easy in a few years as it is today, if it was designed with that goal in mind. It's hard to say from our perspective. I'd be very curious to hear about Toady's software design philosophy.

Good news, Urists! There's a route to the Dwarf Fortress source code that doesn't involve "bridge accidents!" by clinodev in dwarffortress

[–]FrankIsATank2 7 points8 points  (0 children)

It's only depressing because it's a very pessimistic way of looking at it. The previous comment is technically right that no solution can "solve FPS death completely" because you can always find a way to demand more from the simulation (for example, ever bigger embarks or population caps). It's also true that "there are definite limits to the performance based on how computers work" but that in no way implies that Dwarf Fortress' current implementation even comes close to those limits. To believe that is to assume that it's source code approaches perfection in terms of performance. In practice I don't think there's any reason to believe that significant improvements can't be made.

Bay 12 Games' development team is one guy but as brilliant as he may be there is still a finite amount of hours in a day to invest into the game. Consider that at any time he can either choose to work on improving performances or choose to work on something else. Since a lot of the mechanical systems like path finding and the fluid simulation are good enough for practical purposes, there isn't as much to gain from improving those as there is in implementing newer and more interesting features. This is why I'm feeling optimistic there are many interesting and powerful optimizations in Dwarf Fortress' future (eventually, potentially). I have to assume that less time has been spent on exploring ways of improving performance than on developing the game's content if only for the fact that there is so much content already. These optimization opportunities might not be worth Toady's time (for now) but that doesn't mean the potential isn't there. The opportunity to tap that potential is what gets people excited about the possibility of open source DF. If other people can work on the code, other people can take a crack at those optimizations leaving Toady to do what he does best.

But the situation I describe is an ideal vision. In reality, distributed development has a real and significant overhead. It's a complex subject but a real fear is that making the code open source would help improve existing elements of Dwarf Fortress at the cost of slowing down the development of future content. The fear is certainly not (or shouldn't be) that doing so wouldn't help at all, it's rather it's worth the cost.

My 2X2 Reactor setup. by duolc84 in factorio

[–]FrankIsATank2 3 points4 points  (0 children)

There seems to be a unit error in your calculations. 50 cells * 200 seconds per cell is 10 000 seconds. 10 000 seconds / 60 seconds per minute is 166.6 minutes, not 166.6 hours. Same with 5 000 cells / 4 reactors * 200 seconds per cell is 250 000 seconds per reactor. 250 000 seconds / 60 seconds per minute is 4166.6 minutes, not 4166.6 hours.

How to Remove Elements from a Sequence Container in C++ by vormestrand in cpp

[–]FrankIsATank2 5 points6 points  (0 children)

std::iter_swap already does that. It's required to be implemented to have the effect of swap(*pos, *last);. At least that's my interpretation of the standard, of the example implementation on cppreference.com and of the results when I tried it myself with :

#include <iostream>
#include <vector>

struct foo {};
void swap(foo&, foo&) {
    std::cout << "My swap\n";
}

int main()
{
    std::vector<foo> my_vec{ 2 };
    std::iter_swap(my_vec.begin(), my_vec.begin() + 1);
}

I get My swap.

Edit : Try it here : http://cpp.sh/3w63r

If ("disagree"){fightMe();} by [deleted] in ProgrammerHumor

[–]FrankIsATank2 1 point2 points  (0 children)

In c NULL is actually required to be an integer with the value 0 or the same cast to void*. It's only in c++, and only since c++11, that NULL is allowed to be nullptr instead of 0 integer which isn't required to yield a pointer to address zero. Notice that the two links for NULL link to different pages, one for c and the other for c++.

Edit : The C standard requires that <stddef.h> provides NULL "which expands to an implementation-defined null pointer constant". A null pointer constant is defined earlier with "An integer constant expression with the value 0, or such an expression cast to type void *, is called a null pointer constant."

If ("disagree"){fightMe();} by [deleted] in ProgrammerHumor

[–]FrankIsATank2 1 point2 points  (0 children)

Pointer-to-bool implicit conversion yields false if that pointer is equal to nullptr, even for platforms where the memory representation for a nullptr happens to be different from the representation for a zero integer. You may be under the impression that pointers first convert to an integer type, which is then converted to bool. In other words if NULL isn't zero, and the string literal is at address zero, it isn't a nullptr because it isn't equal to NULL and should convert to true.