Last week I fell into a river and placed a stair block to escape. As I stood at the ledge, looking down at the hole in the water that the stairs created, I had a revelation.
Handling water as blocks is stupid.
I'm not exactly a game designer over here, but that was my ambition for a while and I've taken several classes in the subject. If I were designing a game from scratch, I would make it that "water-ness" is a property of other blocks rather a separate block itself. Every block (including empty air) could have a bit flag set to indicate its permeability to water; stairs, slopes, etc. could have this flag set, and their being flooded could be represented by a sliding mesh overlay or something to that effect. The main trouble would be moving the water behavior that was previously confined to the water block into every water-permeable block. This could easily be solved by isolating the behavior into a single function you could keep in a library somewhere, so updating the library and recompiling could update the behavior of every block. It can't possibly be that hard to implement, and it opens up so many future possibilities; waterwheels that need to be flooded to function, etc...
The inevitable modding community will thank you, too.
Handling water as blocks is stupid.
I'm not exactly a game designer over here, but that was my ambition for a while and I've taken several classes in the subject. If I were designing a game from scratch, I would make it that "water-ness" is a property of other blocks rather a separate block itself. Every block (including empty air) could have a bit flag set to indicate its permeability to water; stairs, slopes, etc. could have this flag set, and their being flooded could be represented by a sliding mesh overlay or something to that effect. The main trouble would be moving the water behavior that was previously confined to the water block into every water-permeable block. This could easily be solved by isolating the behavior into a single function you could keep in a library somewhere, so updating the library and recompiling could update the behavior of every block. It can't possibly be that hard to implement, and it opens up so many future possibilities; waterwheels that need to be flooded to function, etc...
The inevitable modding community will thank you, too.