Allow me to introduce myself. I am a full time Realtor, a mom and a wife currently living in South Bay, San Diego. The purpose of this blog is to demystify the complicated world of Real estate and to help you choose the most competent Realtor to represent you on your biggest investment of your life.
Thursday, March 5, 2020
The Experience
After a week of this amazing food, I mentioned on the way back from our conference, that I could really go for a pizza, especially because there was a Pizza Hut next to the nunnery in busy downtown Taipei. No matter how good something is, you often long for the tastes of home. You know you'll get that consistent experience, even if it's not great. Consistent beats great sometimes. An older scholar overheard me and slammed me for being so disrespectful as to want pizza when our hosts had been so gracious with their amazing food. When we returned to the nunnery for dinner, awaiting us was glorious Pizza Hut pizza. The heart wants what it wants.
When it comes to hobby game stores, consistency of experience is wickedly hard. You can train your staff to greet customers, provide stellar customer service, create intricate systems to maintain product and service, but in the back room it's another story. In our Game Center, your consistency of experience is kind of in your own hands.
I could pay employees to run games of a particular style and quality, but the games they run would be limited to the customer desire to pay for that experience. Other than convention fees, which they seem to have no problem with, nobody wants to pay $10 cash money for me to run Dungeons & Dragons. $10, times six players, is $60 for a 4-hour session paying someone $15/hour. That's just their labor, not profit or materials, or prep time. This is a traditionally free experience that can cross over into "nominal" fee territory, but a real fee will never really capture the value being provided. That may change with the mainstreamization of gaming, and someone will certainly point out the "professional" dungeon masters, but it's rare.
So we run the Event Center a bit like a concert hall in which we attempt to host high quality concerts, but with no guarantee the experience will be great. We are concert hall people, not the performers. I've been to great concerts and I've been to concerts where the performers were drunk off their asses, but in neither case did I credit or blame the venue. But in the game trade that's exactly what happens. Sexist comment? Bad DM? Poor hygiene? It will all be a black mark against the store, even though there's not a whole lot we can do about it, other than craft policies, brief organizers, and strictly enforce rules. We are facilitators. We use volunteers. The only other option is the thing doesn't happen.
This chaos is also our strength, our protective armor. The inability to provide a consistent experience, but to only provide a neutral venue is unacceptable to anyone with deep pockets who wants in on this. What happens if something really terrible (actionable by law) occurs? How do we make sure the D&D session doesn't have something inappropriate? How do we actually monetize this space that costs us $6,000 a month? Really, that's what we pay. About $50 a seat per month.
The reality of most D&D sessions is there are a lot of slightly boring ones and then one amazing one, which you tend to remember without remembering the boring ones. D&D especially is a constant playtest, as most people don't run the same adventure twice. Imagine sitting through a bunch of boring movies to get to the great one. That's how it tended to be before the Internet, but people want blockbusters every time nowadays, and they can get them by picking and choosing. All of this inconsistency is why there are no national chains of game stores. Managing the managers and the organizers would be like herding cats. You would have to have a whole department called Program Development to plan and test event structures. Publishers can't even pull this off well with their one game. Plus, as mentioned, the customers would never pay, at least not so far.
Anyway, this is something that keeps me up at night. Labor, as minimum wage here approaches $15 an hour, can no longer be the solution to bespoke experiences. We are fast approaching hard limits that are testing the demands of customers with the reality of what is possible in small business. It may just be the little store, with the passionate owner working for close to zero dollars, will be the one providing the consistently amazing experiences that big stores could only dream of. The rest of us are wondering if we should get a liquor license or hire some circus performers.
Improving The 2D Noise Page
One of my goals for 2019 is to improve my existing pages. Yesterday I decided to work on my old 2D noise page. We normally use Perlin/Simplex noise to make terrain heightmaps, but on that page I used Fourier transforms instead. Perlin/Simplex noise are a fast approximation of the things you can get from Fourier transforms.
The 3D renderer on that page always bothered me. It was one of my early experiments with WebGL. I had never been able to figure out exactly what I didn't like or how to fix it.
I decided to improve the renderer.
I read through the code to and realized it was written so long ago that let
and const
weren't even widely available! I started by updating the code style to match the code I write today. I read through the rendering code and decided to switch from raw WebGL to regl.js, which lets me experiment and iterate much more quickly.
I wanted to compare the old and new output easily, so I put them side by side on the page. I wanted to try two techniques with the new renderer:
- Instead of building a new 3D quad mesh on the CPU every time the data changed, I built a single 2D triangle mesh with x,y, and then read the heightmap data from a texture on the GPU. Reading textures from vertex shaders is widely supported now. This way, I only have to update the texture on each render instead of rebuilding the mesh. Unfortunately I couldn't figure out why it wasn't interpolating pixels values; I had to put in my own interpolation.
- Instead of calculating normals and lighting on the CPU every frame, I calculated them in the fragment shader on the GPU. But I didn't want to use a standard lighting system; I wanted to apply outlines instead. I had learned how to do this in mapgen4 and wanted to try an even simpler approach here. This worked out really well.
In this comparison you can see how the dark/light spots in the noise are renderered in the two renderers. With the old renderer (green) the color changes but the shapes are all mushy. With the new renderer (gray) the dark/light matches the noise, and the mountain peaks are easier to see.



In smooth areas you can see how the outlines help show the shapes. You can also see that the old renderer flipped the elevation upside down (oops!).



With blue noise (positive exponents) the new renderer looks much better:



I'm really really happy with outlines! Compare:



The outlines are one line of code:
void main() { float light = 0.1 + z - fwidth(z) * u_outline; gl_FragColor = vec4(light, light, light, 1); }
I darken the color based on fwidth(z)
. The GL extension OES_standard_derivatives calculates how much an expression changes from the current pixel(fragment) to adjacent pixels. When z
changes a lot, that usually means it's changing from one mountain peak to another, so I darken the output color.
There are still more things I'd like to improve on this page, but the renderer was the thing that bothered me the most, and I'm now happy with it. The other changes will wait until another day.
Download FOR HONOR Game For PC
Download FOR HONOR Game For PC
Memory: 4 GB RAM✔
Graphics: NVIDIA GeForce GTX660/GTX750ti/GTX950/GTX1050 with 2 GB VRAM✔
Network: Broadband Internet connection✔
Storage: 50 GB available space✔
Sound Card: DirectX-Compatible using the latest drivers
Wednesday, March 4, 2020
Game Design Activity Sessions – Part 1: Remodelling A Space War On A Blank Paper Sheet
1) in a regular blank paper trace a dividing line right in the middle of it;
2) Each player (and it's a two player game) draws 3 to 6 spaceships (represented by triangles) randomly on their side;
3) the oldest player starts: they must draw a small circle on their side, this is called a "shot";
4) on the next step, this player must fold the paper sheet;
5) after folding the paper the player must guess the place their opponent drew the "shot" and draw another small circle pressing the pen firmly on the area;
6) finally, the player must unfold the paper to check if the "shot" hit the target (the spaceship/triangle); then, it's the other player's turn to play. Important rule: one "shot" only hits a spaceship if it is completely inside the triangle area.
The diagram below shows, in images, the basic rules and game dynamics:

Ok! After trying this game and understanding it, your mission in this exercise is: trying to modify the basic gaming mechanics by adding power cards and dice, giving the ships new abilities and trying to create more uncertainty in a match. Think big and modify the space game with creativity (and try to think of a less stupid name for it).
You can share the results with me by mail, if you want >> vincevader@gmail.com
#GoGamers