Jan 23, 2014

FOV

Well. Next part of bla-bla-blah series.
Today I want to speak about Field of View aka FOV. Have you ever seen FOV on Fallen screenshots?
Right, It was on old ones of ex-Fall From Heaven the Roguelike, but I am speaking of new Fallen, we started in October 2013.

Nope. There isn't any sign of FOV there.
Do I plan to add it?
No, I don't.

I don't want to say, that FOV is outdated, like ASCII, no it is not.
But! This part of roguelike dogmata's is overrated.
Usual roguelike developer starts projects and there is minimal set of features, that should be there and one of them is FOV.

I think it is hastily and ill-advisedly decision.
First, it isn't easy to make well working FOV. There are lot of well done algorithms and precoded libraries, but, even then, it wouldn't be walk in the park.

The second problem, even the perfect FOV algorithm, codded by Donald Knuth himself would be resource consuming.
FOV is gready.

Frankly, everything I mention above isn't a problem at all.
Roguelike developers really love solve puzzles.
Making roguelike is for algorithm friendly boys and girls, right?

The main trouble, usually FOV added without answering question, what for?
It is added, because it should be.

Wait, wait! You can't just make FOV and let it be. You have neatly add to your gameplay.
It should be useful for  the gameplay, for the player and the most important - for fun!
Truly. This is the most important question: "Would it add fun to your game? Do you need it for fun?".
I was thinking a lot about it, the answer was: Gameplay of the Fallen needs FOV, like a fish needs a bicycle.
So, no FOV here.

1 comment:

  1. FOV is really quite inexpensive. It's basically an O(n) operation on the number of cells you intend to scan, and the constants are quite low. I've had hundreds of scans per turn going in tests that also had pathfinding and fluid simulation without really noticing it.

    The argument that it doesn't add to the fun -- well, that's sound. If it doesn't make the game more fun don't do it!

    ReplyDelete