Wednesday, October 26, 2016

Magic the Gathering Web Scrape

When building decks for Magic the Gathering, I like to use gatherer.wizards.com to find the cards, tappedout.net to build the deck and tcgplayer.com for pricing info. Unfortunately this can be time consuming, especially copying, pasting, and formatting each card name from gatherer.wizards.com to tappedout.net.

Fortunately I've written a python script that takes a gatherer.wizards search url as a string and then copies every card name to your clipboard, formatted correctly for mass entry on tcgplayer. Uses python 3.5.4 and BeautifulSoup which you'll need to install with pip.

Check it out on github

One weird quirk is that the string only stays copied to the clipboard while the script is looping for a few seconds (and thereafter if you paste it during this time), though the script gives you a window to paste at this point. Let me know anyone knows a better way to approach clipboard commands.

Monday, October 24, 2016

GameDevMap Scraping with Python

GameDevMap.com is an excellent resource for finding game companies across the world. I wanted to see which companies had jobs that I might be interested in but doing it manually would be insurmountable- cue Python.

You can find the script on github

The script uses BeautifulSoup and urllib in Python 3.5.4. It gets all of the info listed on GameDevMap as well as a search for the company on duckduckgo.com (it has a nice sans-js mode). The search (ie: "careers Westwood Studios") is then combed for keywords, in this case, "jobs", "careers", "programmer", "engineer", "developer", "unity". Unity was a little harder because words like "opportunity" and "community" gave false positives. The search runs two versions and when it's done, writes to csv. The csv can then be imported into Google Sheets where it can be viewed and sorted.

Check out my sheets import here

A nice future improvement would be multithreading which would speed things up quite a bit. Feel free to do what you like with the script, let me know if it helps.

Wednesday, October 5, 2016

OpenGL Game Engine - Part 1

I've been working on putting together a game engine using OpenGL, SDL and GLM. I've got textures loading, batching and displaying as 2D elements on screen. Input works so you can move around as Mario. 

I'd used this video series to get things off the ground and have been modifying the code once I got a good starting point. Things are very well explained and I highly recommend them.

Next steps are to get the architecture for nested elements and collision detection.

Here's a video of my progress thus:




Wednesday, August 31, 2016

Flappy Bird Lesson Using Scratch

I've made a version of the game "Flappy Bird" using the drag and drop coding environment, Scratch. Kids seem to respond well to this environment. On Saturday at the library, I'll be doing a class that teaches how to create this game using included assets. Hopefully I can include video of the lesson.

Here's a video of the game: https://drive.google.com/open?id=0B5AauB4MKwieRHhqYVRrU21uQzg

Here's the project: https://scratch.mit.edu/projects/119594189/

Sunday, August 28, 2016

Dayz 3D Map Updated

Click here for the 3D Map

I've made a number of changes and updates. Let me know if it runs ok or if there's anything you'd really like to see!

Navigation - I'm not entirely confident in the accuracy of the heightmap data so I've opted not to include pathfinding / navigation. I've included the assets in the source if you want to turn it on and mess around with it though. I'd timed the running speed of the character on the airstrip in-game, then timed the speed of the agent in Unity to make sure the agent speed is accurate.

Movement - I've changed the movement to use a free-fly approach. Thanks to the Unity community for some help there. You can change movement speed with the mousewheel.

Textures - I've included a normal map in the textures and altered the base material to negate some rendering issues. I've also updated the terrain to display a higher res version of the texture at further distances

Lighting - I've included a sun that goes up and down for day/night and also rotates for each day, changing it's position in the sky. Use Z,X,C to alter sun movement speed

Misc - Added town names in English and Cyrillic and made them face the camera and alpha out when getting too close. Added some controls for resetting the scene (Space) and cleaned up lots of little things that I don't immediately recall. Added screen text for controls and credits. I've also tweaked the terrain a bit since it didn't seem to match the ingame map 1:1.

Here's the source project (uses Unity 5.4.0b15). Feel free to modify it as you like. Please let me know if so and please credit me if you do. Thanks to rhennigan for the height map.

Saturday, August 27, 2016

DayZ Map 3D

I've got my hands on a heightmap for DayZ, allowing me to make a 3D map in Unity. I've whipped up a prototype with improvements to come. I'll release the source once it's all done as well.

Click: Set Destination
Ctrl+Click: Teleport
Space: Stop
Scroll: Zoom
1,2,3,4,5: Change map texture

Check it out here

Wednesday, July 20, 2016

Old School Graphics Lesson (Binary and Pixels)

I'm doing some programming and computer classes at a local library for kids and I'd had a cool idea from watching a video on how graphics worked on the Commodore and Nintendo. My intent is to teach the idea that computers use pixels to render objects and sort of define what that means. Also, we'll be looking at binary and it's relationship to pixels and data storage. This is for kids so we'll keep it as simple as possible.

First, an explanation of binary or base 2 numbers is required. We'll have a few places represented by square cards with powers of 2 written on them like so:
____ ___ ___ ____ ___ ____
| 32 | 16 |  8  |  4  |  2  |  1  |
----- ----- ----- ---- ----- -----

We can move these cards up and down to show what value is being represented. By counting the values of the numbers that are "down", we can figure out what the base 10 value would be. All cards up would equal 0 or 000000. The rightmost card down would equal 1 or 000001. The leftmost and ''8" cards down would be 40 or 101000. Once we establish the basic idea, we'll ask the student to make the day month and year of their birthday using binary.

Once we understand binary, we can draw a picture using the grid paper. We'll only use 1 of the 3 defined columns to keep it easy. By filling in a square, we're marking the binary value of that row as 1. So if you filled in the leftmost block only, the value would be 128. In this way, we can draw using the grid and then convert the values to binary, then to a numerical value that's 0-255. 

Once the student draws their picture using the grid, they can use this program that I wrote up to input their numerical values for each row. Once they fill in all the rows they'll the image they made on paper.

Hopefully this will provide them with an understanding of binary, how it can be used to store data on computers, and how early pixel graphics displays could work.

Monday, May 30, 2016

Ludum Dare rankings are in!

No top placers but we did pretty well, especially considering it was our first jam.
#125    Theme(Jam)    3.94#128    Fun(Jam)    3.68#148    Audio(Jam)    3.68#260    Mood(Jam)    3.48#276    Overall(Jam)    3.53#287    Graphics(Jam)    3.79#811    Innovation(Jam)    2.72
2712 Total Games were entered so not bad. Theme Fun and Audio were in the top 5% and the Mood Overall and Graphics were top ~10%. I'd like to see the numbers for total games entered in a given category as I'm sure they're much lower but I don't believe that information is available. Pretty happy with this.

Friday, April 22, 2016

Ludum Dare 35 (Shapeshift) - Shapetrak

Ludum Dare 35 just passed and this time I'd decided to participate with my friend Brian Thuringer (designer). Check him out he's got great work.

First of all here's our game: http://ludumdare.com/compo/ludum-dare-35/?action=preview&uid=55791





After spending a night trying to hash out an idea, the theme, "Shapeshift," proved to be harder than we'd first thought. Having have been on more than a few overscoped projects, I'd really wanted to get a solid game out more than anything. I've been researching "game feel" recently, having had read through the book with that title (available here) and taking notes on the many available talks. After the first night, we were in a bad place, we had nothin'. We'd gone through at least 3 ideas, followed the trail to the end and realized it was a stinker. Demoralized, we packed it in. The next morning, after some back and forth, Brian threw out a rehashed version of a previous idea, far simplified this time. Shift a shape to fit through the walls; an infinite runner crossed with a rhythm game. This would be the basis for the current design. I said, "Y'know what, it's day 2, lets go for it."


At first we'd considered going 2D but given how simple the shapes were I'd suggested it'd be quite easy to do in 3D. We settled on it and he pumped out a few models. I got the mechanics together as well as the cool chromatic tile system you see in the game. About mid-day we had the basis for gameplay established. At this point I threw together a custom shader to hue cycle the background to be the opposite of the ground tile in the center of the camera. This was looking good.


The next day I went to work on some polish and game feel items like screen shake, screen flash, particles, and tweaking difficulty and gameplay values. I got a few sfx from Brian, a music track I whipped up and some UI elements in. A few custom and boxed screen shaders later (desaturation shifting, screen bending, noise, bloom, contrast, ect) and it was getting ever nearer to the final vision.

Monday arrived and after work I thought I had until midnight to polish off the changes. I'd planned to use FMOD to increase the tempo of the music (but not the pitch) and to have the spawning of walls to line up with the beat. Well that was the day I'd learned that 6pm MST was the cutoff and man was that intense. As fast as humanly possible I nuked FMOD to get the game to compile correctly and polished some final values, barely (if at all?) eeking by the deadline. At that point I saw it, "Submission Hour! Get them in!". Relief and are-you-serious washed over me all at once. I checked chat to see Brian's words of encouragement and inquiries of "did you make it?". In this last hour I wrapped polished off some values and fixed a bug or two and got the build off.

Overall, I feel like this game is quite fun and although there are many games that are similar in their own way, I would say ours feels the best. Game jam games usually feel sort of stiff and unpolished but I feel like this game managed to shake that. Feedback has been awesome so far (thanks everyone!) and I hopefully await the final judgement of best games. I'd reviewed quite a few other great games and through this our game has received over the number of reviews required to be in the running for its various categories. A few streamers even played our game live at my request which was a great feeling.


I learned a fair bit, had a lot of fun and made a game I'm proud of. Check it out and let me know what you think. Can't wait for the next one!