About csanyk (twitter: @csanyk)

https://csanyk.com
http://archive.globalgamejam.org/users/csanyk
http://www.ludumdare.com/compo/author/csanyk/

From Cleveland, OH. IGDA member and active member of Cleveland Game Developers. If you're in the NE Ohio area, and haven't been to one of our meetings, check us out!

http://www.meetup.com/clevelandgamedev/

I am a retrogamer, and my biggest influences are the late-70's/early-80's video arcade, 8-bit consoles and microcomputers (Atari, Coleco, Nintendo, Apple, Commodore). I like some modern games, as well but my heart will always be 8-bit.

2D > 3D
play mechanics and controls > story and graphics
simplicity > complexity

In 1981, I knew I wanted to be a game designer when I grew up. I spent a lot of time doing paper prototypes of games I would like to see made, from the age of 6 or 7 onward.

In 1994, I had no idea how I'd ever get into videogame development. I knew no one in the industry, and all the companies seemed to be very far away, and it was super competitive and the industry sucked the life out of people by working them too hard.

In 1995, I quit thinking about it because I couldn't figure out any way I could ever make money doing it, and because the industry seemed to be moving away from the type of games I wanted to make. Everything was 3d, a license of some established IP, or a sequel.

A few years ago, I discovered the Indie Games Blog and learned about Ludum Dare, played some of the games that had come out of them, and rekindled my interest in game development.

In 2010, I stopped caring if I ever made money doing it. I realized that not knowing how to make money at something I wanted to do was a bad reason for not doing it.

Today, I am a happy game designer, making games that I want to make. It'd be nice if they made money someday, but I don't care too much about that. Mainly I want to make a name for myself.

Entries

 
Ludum Dare 36
 
Ludum Dare 35
 
Ludum Dare 34
 
Ludum Dare 31
 
Ludum Dare 29
 
Ludum Dare 26
 
Ludum Dare 25
 
Ludum Dare 24
 
Ludum Dare 23

csanyk's Trophies

Did GameDev With Girlfriend
Awarded by csanyk
on August 29, 2016
Caffeine Free
Awarded by csanyk
on December 9, 2014

csanyk's Archive

GameMaker development on Linux?

Posted by (twitter: @csanyk)
Tuesday, November 8th, 2016 11:45 am

I’m taking a poll to see who wants Linux port for the GameMaker Studio 2 IDE. YoYoGames are not currently planning on releasing one (although they had announced a few years ago that they would be). They’re not against supporting GameMaker on Linux, but only if they see interest and demand for it. Voting in the poll will help.  The poll will close later today, so there’s not much time left if you want to participate in it.

The Poll

Forum discussion

Feedback Friends

Posted by (twitter: @csanyk)
Wednesday, August 31st, 2016 11:28 pm

Whoever designed the Feedback Friends did a genius thing.  I don’t know if they realize it or not.  But I think that showing the comments a user has left for others on their own page next to the comments they received from others will gently persuade people to leave friendly, helpful feedback.  I just wanted to point out how clever that is.  Well done.  And I am loving the feedback I’ve been getting for my game; I wish we had ratings categories so I could see how people rank me.  Hopefully categories will return next LDJam.

Pre-deadline bugfixes are up

Posted by (twitter: @csanyk)
Monday, August 29th, 2016 7:42 pm

Just added a few last minute features and fixed too many little bugs to mention ahead of the Jam submission deadline.  If you played it before, you may want to try it again.  Mostly (I hope) the bugs weren’t noticeable.  The HTML5 build now renders at correct size though!

Ancient Technologies for LD36 by csanyk

Play Ancient Technologies

LD36 – Ancient Technologies post mortem

Posted by (twitter: @csanyk)
Sunday, August 28th, 2016 10:05 pm

Ancient Technologies for LD36 by csanyk

I just finished and submitted my game a few minutes ago.

In all this weekend I worked a total of 25 hours on my project.

I came up with the idea for the game in about 10 minutes.

Friday night was a struggle as I tried to produce art assets.  I didn’t like anything I was producing myself, so I resorted to grabbing some useful pixel art from the internet. I hope the original artists don’t mind.  For the record, the background graphic of the living room is mine (paint.NET), the atari 2600 console and joystick were found through google image search, and the TV and game cartridge were done by my girlfriend.  I did some minor modification to all of the images that I brought into the project to make them work as I needed them to.

I went to sleep around 12:30am Saturday morning.

Saturday I didn’t get much done during the day due to other plans that kept me busy until around 8pm.  I did manage to put in about 2 hours in the early afternoon.  Then I got into the zone that evening and hacked for 11.5 hours until the 7:30am Sunday.  I just kept making progress and thinking of more things that I needed to do.  Progress went very smoothly and I didn’t get stuck.

Woke up around 12:30pm Sunday, worked until 4pm, broke for dinner, then came back and finished it from 6pm-10pm.  This was mostly debugging and refinement and putting in the finishing touches.

I threw a few things out along the way.

  1. At first I wanted to make the setup minigame more of a challenge, and more detailed, where you would have to drag the objects where they needed to plug in, and connect them up.  Out of necessity, I simplified things quite a bit, so that simply clicking on a thing connects/disconnects it.  I omitted the RF switch that goes to the back of the TV, and I had also planned to do a volume knob on the TV, and have a channel knob with fake streaming channels for NBC, ABC, CBS, or at least station ID logos, and then you’d need to have the Atari playing on Channel 4 in order to make it work.
  2. I also didn’t get around to implementing the functionality behind the TV Type switch, or the difficulty switches or the Game Select switch on the Atari console.  The switches themselves are flippable; they just don’t do anything yet.  These were just more time than I had for the weekend.  (I know I could work another day until the Jam deadline, but Monday I have work and probably won’t get much done if anything.)
  3. My original choice for the game-within-a-game was Space Invaders. But after a while I realized that it would be simpler to implement Asteroids, so I did that instead.  It plays pretty well, and feels reasonably like the real deal, dropped features aside.  I wanted to make it feel as authentic as possible, so I used Stella and Audacity to rip audio and screen cap the sprites.  I had to rework all the sprites in GameMaker and Paint.NET, but getting the general shapes right was important and screen capping them was the way to go for that.  I also grabbed a sample image of the Atari 2600 NTSC color palette, and made sure that all the colors used in the game matched what the Atari was actually capable of.
  4. Programming the game mechanics so that Asteroids really feels like Asteroids was important to me.  I think I did reasonably well here, and I’m proud of the results.  It’s not emulation-perfect, but you’d have to put the two side by side to see the differences.  Making sure that the game system behaved correctly if you did things like unplug it or remove the cartridge while the game is playing was important to me, and made it all a bit more complicated than I anticipated, but I think I managed to get it right, although it’s possible I missed a bug here or there.  I kept finding bugs with the setup logic but in the end I hopefully got them all.  If you turn the TV off and back on, the game continues playing, but if you hit the reset switch, pull the cartridge, or hit the power switch on the console or pull the plug from the wall, it does what you’d think it would do (ie, kills the game if it’s running and dumps static to the tv, etc.).  It even stops allowing joystick input if you unplug the on-scree joystick.
  5. Inside the game, there’s a few features I didn’t implement:  hyperspace/shields and the UFOs being the two most prominent.  I may get to doing those later.

All told I might be the happiest with this project of any of my #LDJam submissions to date.  I found it very enjoyable to work on the project.

Takeaways:

  1. The bugs you think are too dumb for you to make are the hardest ones to find.
  2. One of the biggest challenges when programming something that you know how to do is simply keeping track of the various tasks that you have on your to do list. It’s a huge mental challenge to hold that list in your head and cross things off as you complete them.There’s a lot of tools and techniques for managing this but it’s still a challenge to manage it. The biggest help is writing stuff down. Trello rules for this, but mostly this time it was notepad and memory for me.Plus on top of that you have to mentally walk through your code, following the logic you’ve programmed, and doing the math in your head to make sure you agree with your program’s output and behavior. A good unit test suite can help with this a lot, as can clean design. GameMaker lacks any kind of unit testing, but I’ve adapted to do without for the most part, but it would still be a huge help to have proper testing. To work around I end up writing a little, and run-testing a lot. Logging and screen logging help, but this time I didn’t really need to do either.One of the most pleasant things about an 8-bit program that fills 4k of code is it’s humanly possible to understand it in its entirety, and to run it in your head. I have really enjoyed simulating that experience with my project this weekend.
  3. The thing about programming is, when you get on a roll, you don’t want to stop for anything. And then you die because you neglected to maintain your metabolic processes. If there’s one thing that videogames have taught me, it’s avoid dying.

 

Play Ancient Technologies

Thanks for participating and playing/rating my game!

Posted by (twitter: @csanyk)
Monday, May 9th, 2016 10:30 am

Thanks to everyone who played Shape Struggle! I appreciate all your feedback. See you at LD36!

Shape Struggle 1.1.0.6 post-compo: performance optimized

Posted by (twitter: @csanyk)
Tuesday, April 26th, 2016 7:50 pm

 

I’ve gone over the code for Shape Struggle, and optimized it for performance  On my machine, I can’t get it to drop frames in the latest post-compo build, 1.1.0.6.  The thing is, my laptop is pretty high-end (2.8GHz Xeon E3-1505M, 64GB RAM), so I’m not sure how well it runs on older machines… I need testers!

>>> Play and Rate Shape Struggle <<<

I figure my optimization tricks might help other developers, so in brief, here’s how I did it:

  1. Controller object:  I knew even before the compo ended that I needed to set up a controller object to optimize the performance of the up to 500 instances of oEnemy that I’d have active in the game.  But the code in the controller object from the 1.0 build was far from optimized.  I refactored and streamlined the code, eliminating redundant conditional checks, and pulling code out of loops to make them as tight as possible.

    I also pulled some Step event code out of the two most complex objects, oSquare an oPentagon, and put it into the controller object.  Doing so enabled me to write some of the code in the controller so that it runs once for all instances of oSquare and oPentagon, rather than once per instance.   This makes a huge difference in the amount of calculations necessary when there are hundreds of instances active.  No matter how many there are, there’s only one calculation performed.

  2. Simplified bullet object.  At maximum firepower, the player fires 5 bullets per shot, one shot every three steps.  At 60fps, that’s 100 bullets per second.  That’s 100 creation events per second.  I thought I should limit the number of bullets, and also I wanted to limit the range of the player’s weapon, so I put a timer in the bullet object that destroyed the bullet instance after 1 second.

    Potentially, I might have optimized this by implementing object pooling, so that rather than creating and destroying bullets, I would re-use the instances so I wouldn’t need to keep creating and destroying them.  But first, I tried removing the timer, and found that the game plays and feels exactly the same, so that timer code doesn’t matter.  Normally setting a variable and then decrementing it doesn’t take a lot of CPU.  But with up to 100 fewer creation events every second, and 100 fewer timers to decrement every step, it adds up.

    Object pooling might yield still more performance optimization, but simplifying the objects as much as possible first before making such efforts is smart.

  3. I also removed the collision check from the bullet object that checks for collisions with the wall, and put it in the wall. There’s only 8 wall instances, so 8 collision checks vs. up to 100 each step means a substantial savings in calculations.

Shape Struggle: post-compo release build 1.1.0.4

Posted by (twitter: @csanyk)
Monday, April 25th, 2016 10:42 pm

I’ve released a post-compo version of Shape Struggle.  It’s quite improved!

Shape Struggle by csanyk

Changes:

  • Player speed is slightly slower to give you better control.
  • Game is zoomed out 0.75% to give player more room to see.
  • Enemy and power-up spawn location/timing tuned to make game more interesting early, more balanced later.
  • Keyboard controls re-done to include mouse aiming.

post-compo download

entry page

Shape Struggle postmortem

Posted by (twitter: @csanyk)
Monday, April 18th, 2016 8:52 am

I started out wanting to make an Asteroids-like game, where your spaceship changes its shape according to its state — elongating when accelerating, turning into a square or some other rugged shape when shields are on, etc.  I quickly built a demo Friday night, but it didn’t feel special to me, so I abandoned the effort and started fresh the next morning.

Partly, I was irritated because I was working on my brand spanking new VERY EXPENSIVE laptop, and discovered that the keyboard has a low rollover (certain key combinations block signals from other keys from being registered) which makes playing games via keyboard really sub-optimal.  Tired, I went to bed wondering what to do about that, and figured the best thing would be to try a game that was designed for play with a gamepad.

I woke up Saturday morning thinking about Robotron 2084, one of my all time favorite games.  I thought about making a twin-stick shooter.  I decided to try it, and incorporate the theme by making the different enemy objects be different geometric shapes, and give each shape a distinctive behavior, and have a hierarchy of shapes, with the higher level shapes shifting into lower level shapes when shot.

For point values, I started out simply by making the 0-shape (Lines) worth 10 pts., then multiplied each previous value by the number of sides of the next shape.  So, Trigons are worth 30 pts., Squares are worth 120 pts., pentagons are worth 600 pts., and hexagons are worth 3600 pts.  I liked the mathematical pattern the points progression created, it’s similar in concept to the Fibonacci sequence, in that it bases it’s value on the previous values in the series.  I have no idea if the point progression matches the relative difficulty of the shapes — probably not.

What I ended up with was more a Geometry Wars clone than I had originally wanted, but I think it plays pretty well with a XBox 360 gamepad.  There’s a few things that I’d like to do with it if i do a post-compo release:  some sparkly eye candy when enemies spawn, animated transitions when a “higher” shape turns into a “lower” shape, better spawning placement, make the early part of the challenge curve a little less gentle, a few additional sound effects.

I’d also like to come up with something more original/innovative, but I’m pretty happy with how the implementation of this went and how it came together.

 

Play Shape Struggle!

Progress

Posted by (twitter: @csanyk)
Saturday, December 12th, 2015 6:07 pm

I decided to make a game called What Plants Crave.  It’s a plant growth simulator.  So far I’m just working on the statistical modeling.

I’m happy with the weather modeling.  Here’s what I came up with:

  1. My code starts with a base 50% chance of rain.
  2. Every day it doesn’t rain, the base chance increases 20%.
  3. If it rains, the amount of rain is determined by the chance of rain on that day, multiplied by a random number between 0-1.
  4. Every day it rains, the chance of rain halves.

Simple, elegant, works pretty good!

I live in Ohio, and to check the reasonableness of the sim-weather, I looked up our annual rainfall.

According to this we get around 30″-40″ of rain annually.

My sim-weather reliably puts out around that much!weather sim is good

 

Ratings categories

Posted by (twitter: @csanyk)
Tuesday, December 30th, 2014 12:16 pm

For the longest time, we’ve had the following categories:

  1. Overall
  2. Innovation
  3. Fun
  4. Theme
  5. Graphics
  6. Audio
  7. Humor
  8. Mood

For LD31, I noticed that if we wanted to remove our game submission from a rating category, we had the option to disable it.  I didn’t see the point, myself, but I suppose if your game really wasn’t trying for one of the categories, there’s no harm in recusing yourself.

I would like to see another category added for future LD events:  Controls.  I think controls are a critical element to game design, since they are what makes a game interactive, and thus, a game.  Not having its own category is an oversight that should have been corrected a long time ago.

<3 this post if you would like to see a Controls rating category added to voting!

Layout issues

Posted by (twitter: @csanyk)
Monday, December 29th, 2014 8:54 pm

Looks like the layout needs a little tweaking…

 

ld layout error

games embedded in the entry page

Posted by (twitter: @csanyk)
Monday, December 8th, 2014 9:55 pm

Well, I don’t care for the new “embed your game directly into the game page” feature.

What happens, I like to browse for games that look interesting to play, and then open each game’s page in a new tab.  With a game playing in a tab, suddenly I have a lot of resources going to running the game in a browser tab I’m not even focused on, and also audio playing in multiple tabs, probably with no quick/easy way to mute it.

This could be fixed fairly easily by including a “play embedded” button for games that use the embed in page feature, and then don’t actually start running the game until the button is clicked.

“Color is Everything” post-mortem

Posted by (twitter: @csanyk)
Monday, December 8th, 2014 9:26 pm

Play Color Is Everything

Preconceived notions

Going into this weekend, I knew I wanted to make a game that would serve as a statement about the intolerable state of civil rights in the present-day United States.  It seems like almost every day there’s another story about police using excessive and all too often deadly force, often unnecessarily or for very little provocation.  We live today in a police state where citizens rights are routinely denied, due process and the right to a fair and speedy trial have been forgotten, and out government doesn’t merely seem unwilling or incapable of doing anything about it, it refuses to do anything about and then punishes those who speak out and demand it — as evidenced by a mockery of a Grand Jury investigation into the police shooting of an unarmed 18 year old named Michael Brown in Ferguson, Missouri, last month, and a 12 year old boy in my home town of Cleveland, Ohio that happened just as the news hit that there would be no trial in the Michael Brown shooting incident.  No trial, and then force used to break up peaceful demonstrations which turned them into riots.

One of the finalist themes was Color Is Everything, and I thought that would work perfectly if it was chosen, but for some reason I didn’t expect it to — I just never feel that lucky, I guess.  So I looked at the other themes and considered how I might fit my protest statement into a game that satisfied the other themes, and I thought that I could use “Entire game on one screen” if it came up, but I never expected that it would.  When it did, I was surprised, but happy because out of all the other themes it was the one that afforded the most freedom of game concept, so long as I could fit everything on one screen.

Design

In designing the game, I focused almost exclusively on the message that I wanted to send, and the actual game play was secondary.  I wish I could have spent more time on refining the game, because as it is I don’t feel that it plays very well.  But I needed to be very careful about the content of the message.  I’m not sure if I got it right or not, but I tried as best I could to come up with a statement that I could put into a game that I could create in under 48 hours.

Early on I choose to sacrifice graphics, and go with a purely abstract game. I did not want to sensationalize with blood splatter, and after briefly considering creating animated anthropomorphic figures, but worried that whatever I might create in a short timeframe would be insufficient and might resemble offensive stereotypes. I decided to go fully abstract and use simple squares of symbolic, literal black and white to represent my people.  While it was very easy to make, it afforded me time to consider how to put the message I wanted into the game.  I wanted to drive home the point that you can’t tell whether a person is a criminal based on their appearance, that it is their actions that make a person a criminal.  Although, really, crime is almost incidental to the reality I’m depicting — the game is really about a dystopian society where police who are sworn to protect and serve the public are allowed to get away with killing people because a corrupt system looks for any excuse to look the other way when they happen to be black.

I had a basic idea that you’d be a policeman, and you’d just patrol around on the screen while people stood about or walked around, and you’d have to figure out who among them is a criminal, and then try to arrest them or, if you wanted, you could shoot them.  I gave the game three ending conditions:  if you run out of bullets, if you are killed, or if you kill an innocent (white) person.  And I implemented a scoring system which I felt reflects the real-world valuation we place on white and black citizens.  Arresting or killing a black innocent has no consequences in the game.  But arresting an innocent white person deducts points, while killing an innocent white person ends your career in an instant.

Keeping score

I struggled quite a bit with figuring out how to value the arrest and kill scores for black and white criminals.  In the end, I took a base value of 100 points, because it’s a nice, round number, and then I adjusted it to reflect the bias in the legal system.  I don’t know how well I did, there, but here’s how I came up with the point values: Using wikipedia, I found an article dealing with race and crime in the united states.  In it, I found that the data presented in the article was fairly messy, taking numbers from different years, etc.  but it said that the incarceration rate for black males is 4749 per 100,000 — about 4.8% of all black men in this country are in prison — while the incarceration rate for white males is only 487 per 100,000, o rabout 0.5%.  I also needed to adjust for the proportion of the population that these groups represent.  According to the 2010 US Census, the population classified as white represents about 63% of the total population, while blacks represent about 12%.  Multiplying these percentages together, I got 0.63*0.05 = 0.00315, and 0.12*0.048 = 0.00576.  Dividing these two numbers into each other, I got 0.00315/0.00576 = 0.546875, and 0.00576/0.00315 = 1.828571428571429, which I rounded to 0.5 and 1.8, respectively.  I took those numbers and multiplied them by the base point value of 100, to make a black arrest worth 180 points, and a white arrest to be worth 50 points.  Coming up with these numbers gave me a sick feeling.

Killing a person scores much 100x as much points as arresting them, to reflect that ending a person’s life is a higher stakes proposition than simply arresting them.  Perversely, this creates incentive to shoot people, if you’re going for a high score, and for the highest score, to preferentially seek out black targets.

I never tell the player that they ought to try for a high score, but I allow the structure of the game to suggest to the player that this is what they ought to do.  I expect that most people will try to play this way at first, and perhaps if they think about what the game is telling them, they might try not to shoot as much.  It’s possible to play with a strategy of only arresting people, although you will score much slower, you can play longer as long as you manage to avoid being shot  yourself by criminals.  If you don’t care about arresting the wrong people, you can probably survive indefinitely, and in the long run the extra points you get for arresting black criminals will outweigh the penalty incurred for arresting innocent white people.  In thinking about this more, it makes me question why I gave the population equal proportions of black and white people, and criminals and innocents.  It might have been a more accurate simulation to give these populations the same proportions as the census and crime statistics show.  But while the census figures are less likely to contain institutional bias, the crime numbers really only track incarceration, not criminality, and I don’t know where to find numbers that would reliably measure the proportion of a population that are criminals, broken down by race.  So, it’s a limitation of the design, I suppose, but I’m not sure how to do better there.  If I had done this, though, it would have pushed the bias toward targeting blacks much higher, because white criminals would be very rare, white innocents would be very common, and blacks would be the only safe targets for arrest and/or extra-judicial killing.  This might need to go into the post-compo update, if I continue developing the game.

To provide the player with a bit of incentive to use their gun, I gave the criminals guns as well, with which they can commit murder, and some of them will try to shoot you, so there is some of the self-defense and defending the lives of others in the game, just as it is talked about in the real world whenever one of these shootings takes place.  If I had to do it over again, I’d probably use the crime statistics tracked in the game to penalize your score, so that you would have a bit more direct reason to try to identify and stop the criminals.  This will probably be addressed in a post-compo version as well.

The Play Experience

My process in coming up with this design was slow and meditative, so I probably spent more time thinking about the design, what it implied in terms of the message it would send, and then carefully creating a design that imparted the right message.  Comparatively speaking, I spent very little time actually playing the game, and I think that shows in the play experience.  I’m not really satisfied with how the game plays.  The AI is extremely rudimentary, and if you allow the game to continue spawning people and don’t wipe them all up by constantly arresting or killing them, very quickly it gets to the point where there’s too much happening on the screen, and you can’t take it all in, which makes your decisions and actions less meaningful.  As well, when the screen fills up, very quickly you end up accidentally colliding with people who are walking around oblivious to you, and obviously that removes the aspect of intentionality from the act of arresting them, detracting from the game’s message.

I think, if I did the design over again, I’d try to make the game slower, so that the player would be able to think about their actions and decide to do them, rather than react in a twitchy manner.  Perhaps I’d reduce the number of people that can be on screen at one time (there’s currently no limit, which is bad), and I might also slow down the action so that only a smaller number of people are actively doing anything — I considered making the AI’s move in a turn-based fashion, so you could have time to monitor each individuals actions and try to figure out if they’re a criminal or not, which would give the game more of a detective-y feel to it.  I’d definitely like to improve the AI a bit more so that it would make the game less random.

Overall, I’m not all that satisfied with the game as a play experience, I think it could be much better —  but working on the project allowed me to work through my feelings on the current events.  And, working through those thoughts was a more necessary thing for me this weekend.  There’s a lot that is wrong with our country right now, especially in government and law enforcement.  Reform is badly needed, and seems like a remote possibility at best.  It seems like the system of checks and balances, and the rights that we are all guaranteed exist only on paper right now.

Let’s do this.

Posted by (twitter: @csanyk)
Friday, December 5th, 2014 7:38 pm

I had a feeling yesterday that Everything On One Screen might be the theme, and so I have my idea already.

I am feeling motivated.

Mmap mini maps is now a Ludum Deal

Posted by (twitter: @csanyk)
Thursday, August 21st, 2014 6:11 pm

Hey everyone.  Do you use GameMaker Studio?  Do you need a really good mini map add-on for your 2D game?  One that can simulate a radar or sonar as well as a basic map?

My first Marketplace asset, mmap mini maps, is on sale for Ludum Dare 30 weekend.  Regularly $4.99, now just $1.99.  Sale price is good now through Sunday.

To see what it’s like, I have a live HTML5 demo which shows off some of its power and flexibility.

It’s beautifully coded, fully commented and documented, totally configurable, powerful, and flexible.  Even if you don’t have a use for a mini map in your project, it’s worth buying just to have a look at the source code.

mmap mini maps

[cache: storing page]