Home

Advertisement

Customize
vazor222
28 June 2009 @ 01:40 am
CodeMonthly #6: Conditional Assignment
--Puzzle--

Which is faster in a loop?
if( x != n )
  x = n;
-or-
x = n;
 
--Answer--


 
 
vazor222
22 June 2009 @ 10:22 pm
If you like chiptunes or you want to hear some bouncy techno made with only gameboy sounds, check this out:

http://www.8bitpeoples.com/discography/by/bit_shifter
 
 
 
vazor222
20 June 2009 @ 10:33 pm
I just finished playing Jonathan Blow's old prototype game called "Raspberry" and it was very intriguing. The links to find information about the game are below, and the thoughts are in raw form after that.


 
 
vazor222
02 June 2009 @ 10:00 pm
Fans of Raph Koster will be happy to know that metaplace has gone into open beta.

I was most impressed by the Sony and Microsoft press conferences this year at E3. Nintendo fan boys were still happy, but I liked the responses to the motion controllers that were presented by the other manufacturers. Sony's I believe is more technically advanced, as seems to be their modus operandi, but Microsoft's was pretty hype-tastic. The new advances in casual and franchise games from Ubisoft and others were as expected, and I liked BioWare's finale to EA's press conference. I think I liked the ATLUS announcements the most overall.

If you missed them, you can probably head to gametrailers.com, g4tv.com, or gamespot.com for the vids.

 
 
Current Mood: exanimate
 
 
vazor222
31 May 2009 @ 06:55 pm
CodeMonthly #5: Sudoku Solver

Been pretty busy this month but I've been spending almost all my coding free time writing a sudoku solver in C# so I'm going to post it. Nothing super surprising here but there are lots of good lessons to be learned.


--Puzzle--

How do you write a program to solve a sudoku?


--Answer--

Read more... )
 
 
Current Mood: accomplished
 
 
vazor222
14 May 2009 @ 11:45 pm

GDC 2009 – Josh Jones 

IGDA

 

There was as usual lots of good debating and discussion, and the workshops went very well. The IGDA is still gearing towards supporting local chapters and focusing on members, while handling international relations and forming new ventures such as the GGJ and the coders SIG. This was some of what I talked about at the last local chapter meeting (2nd Tuesday in May) where everyone shared GDC experiences and won raffle prizes.  
 
 

Sessions 
 
Advanced Graphics with DirectX (Tutorial) 
 
This is a basic class but goes over all the ground work and is good for a refresher or starting out. This was an all-day course and they had everything from A to Z plus a couple other topics from other speakers at the end.  
 
 
API in DX10 has been redone 
-no fixed function 
-no more legacy code 
-non-kernel drivers (doesn't kill the OS) 
-Vista = Memory Management is in the OS 
 
Benchmark Mode 
-check performance 
-automated 
-debugging 
-easier for card makers 
 
Constant Buffers 
-HLSL, Vector, Color 
-close together 
-best kept as a smaller heap of buffers sorted by frequency of access 
-bind about 5 and share them 
 
Dynamic Buffer 
-updates 
-non GPU geometry (particles, translucency) 
 
Early 2 Optimize 
-no alpha test -> shader discard pixel 
-have two shaders 
1. write-z 
2. full shader 
 
Formats 
-Texture - bigger, slower 
-Render targets 
 
Geometry Shader 
-less is better 
-DX11 introduces tessellation 
 
High Batch Count 
-instancing 
 
Input Assembly 
-DXOptimize 
-Input compression 
 
Juggling with states 
-DX10 = immutable states 
-states at load time 
-dirty states 
 
Klears 
-use Z clear() 
-only color if needed 
 
Level of Detail 
-still important 
 
Multi GPU 
-optimize for frame pipeline 
-per GPU 
 
No Way Jose! 
-don't render skybox first (HUD last is ok) 
-don't forget frustum culling 
 
Output Streaming 
-multi-pass GS (Geometry Shaders) 
 
Parallelism 
-CPU | GPU - check with PIX - STAGING > DEFAULT 
 
Queries 
-get results when available only 
 
Resolving MSAA Buffers 
-resolve !free 
-avoid depth buffer 
-MSAA Render Target -> Resolve Operation -> Non-MSAA Back Buffer 
 
Shadow Mapping 
-DST 
-ATI: D16 
-NVIDIA: D32_S8 
-disable color 
-depth-only is much faster 
-no clip-discard 
-cut aniso 
-Gather() DX 10.1 
 
Transparency 
-ZPS, transparency & opacity 
-clip/discard early 
 
Updating Textures 
-do not create and destroy textures at runtime 
-create during load and use ring buffer 
 
Verifying Performance 
-use IHV tools 
-ATI: GPU perfshader 
-NVIDIA: NVPerfHUD 
 
Writing Fast Shaders 
-ALU: TEX HW ratio 
-Parallel Branching Interpolation 
 
Xtra Performance 
-larger triangle with unused space is better than two triangles 
-larger triangles in small complex areas instead of all small triangles 
 
Your call to action 
-Manage resources 
-Balancing 
-Texture Updates 
-Parallel (Multi GPU) 
-Instancing 
 
Z-Buffer Access 
-Bind Dynamic Buffer as texture 
 
cem@nvidia.com 
nicolas.thibieroz@amd.com 
 
 
Rain 
-scrolling texture, specialized shader 
Sun rays 
-raytrace march, single cascade shader 
MSAA deferred rendering - in/out pixel freq 
-lighting stages 
-DX10.1 or less adds 
G-Buffer optimizations 
-Shader A2C when hi-rez/hi MSAA 
-SV_POS 1-3 pit pattern 
-x+y = coverage 
-alpha -> alpha' 
-zoom 
Min-Max Shadow Map 
-originally presented by Dmitriev at GDC07 
 
DirectX 11 
-SV_Coverage - bit mask - System Value 
-available to shaders during stages 
-double precision -slower but now available 
-Gather(); - now has channel, offset (-32 - 31) 
-ddx_coarse - potential derivatives - same for all pixels 
-f32tof16 - f16 low 16 bits - for packing & compression - first bit high - reverse bits 
-Unordered Access Views - main new feature in DX11 
-Raw View - Tesselation - Displacement Maps - Hull Shader, Tesselator, Domain Shader 
-Structured Buffers - bind as SRV or UAV 
-Buffer Append/Consume 
-Atomic Operations - PS & CS - Interlock Add, etc 
-Compute Shader - GPGPU - post-processing, filtering, sorting, prep AI 
-1-per-frame - full execution, loops, etc. 
-Thread model - access to parallels - group & thread 
-TLS (Thread Local Storage) - 32 KB - sync before data work 
 
 
 
The Creation of a Kids' Virtual World - Real Data (Ridemakerz) 
 
This talk was okay- there was quite a lot of ego and advertising, but at the very end we did get some real numbers.  
 
 
Extend Experience 
Players in free play can move to online micropayments, member revenue, or retail purchase 
Players can become members by signing up directly, by online micropayments, or by retail purchase 
Members have discounts on online micropayments and retail purchases 
Make it Real didn't work -> Make it a Toy 
Still unsure about free play before registration 
Load swf's on demand 
Make waiting fun 
Real World Achievements - work on car with parent 
$1/mo per user revenue 
 
Revenue 
5-10 sponsors/partners 
Shop (micropayments for avatar changes) 5-8% 
E-commerce 1-5% 
Premium Member 1.5-3% 
4 mo beta - 5045 registered (one of them was me, haha) 
retail store coupons 60% 
parent email response 20% 
relogin 8% 
level up 5% 
 
 
 
Avoiding legal pitfalls in Virtual Worlds 
 
This talk by Mark Methenitis (a lawyer from Dallas and IGDA) was pretty good, but like any law talk mostly focused on past legal cases and worries about video game patents.  
 
 
worlds.com holds patents that are under scrutiny and may affect the virtual world space 
other early starters include Meridian and AlphaWorld - 1995 
copyright concerns 
-ensure EULA has a clause to cover it if you allow user-generated content 
-e.g. Marvel and City of Heroes (Marvel lost) 
-have a contact to handle copyright claims 
derivative works (mods, etc) 
-ensure EULA/ToS is clear on who owns what and who is responsible for what 
Illegal to have online gambling 
-do not mix game economy with real world currency 
Government plan for making money: 
1. Make Rules 
2. ??? -> Enforce 
3. Profit 
Governments are having trouble being able to tax online, so they are raising fines 
-expect to be required to have stickers and standard terms 
 
 
 
Discovering New Development Opportunities (Iwata keynote)  
 
This excellent keynote gave great insights into the workings of Nintendo and how they succeed and are driving and supporting the industry. Iwata managed to show off his successes, have a positive, uplifting keynote, and show support for Nintendo developers, amazingly all without being too pretentious or seemingly offending anyone in the room. It probably helped that he gave away free copies of Rhythm Heaven at the end, haha.  
 
 
Death Spiral 
Financial Pressure -> Less Time -> Poorer Quality -> Less Sales -> Financial Pressure -> and on and on... 
e.g. HAL Laboratories 
-stick to the "core concept" - distortion leads to delay 
-always comes from human observation 
-they like this activity - why? 
-Gardening -> Pikmin 
-Puppies -> Nintendogs 
-Excercise -> Wii Fit 
-20% non-gamers 
-50% increase in women gamers 
-Miyamoto's personal life is now under NDA haha 
Upward Spiral 
Ideas -> Prototype -> Small Teams -> Multiple Projects -> Trial and Error -> Mass Production 
Ideas are everywhere - always observe 
Explain ideas personally - no design doc 
Small teams - even 1 programmer 
Miyamoto seems like perfectionist - but is judging the trial and error of each small project 
-Kidnapping - randomly grab someone not on the team and have them play the game - over the shoulder observation 
New ideas that surprise you are good 
-Tsunku dance lessons demo -> Rhythm Heaven 
WiiWare is 90% 3rd Party 
New Wii support released 
-HD SD Ram 32G channels 
DSi demo 
-animation maker 
-eyetoy type game 
 
 
 
My Lessons Learned from Flagship Studios 
 
This was an excellent talk from an obviously humbled man who had a lot of important things to say. Mostly business lessons but good for everyone to know. Good speaker and kept audience attention well.  
 
 
Flagship Studios: What happened? 
July 2008 100+ employees laid off 
Flagshipped - lost IPs -> creditors - controversy/bad blood 
Made common mistakes 
-why didn't we listen? 
-just like VH1's behind the music, drugs, reunion, the whole deal 
-so much optimism/hype 
-inflated valuation 
 
Failure is not an option... but it is a Grim Reality 
-had no plan B 
-just to survive is success right now 
-scale it back 
Know your economic model 
-identify your first money in 
-don't reinvent the wheel 
-reeducation -> many steps -> $$$ 
-velvet rope - too much free area - not work in retail - should have gone with standard subscription 
Don't do more than One New Thing 
-Changing from developing something you're experienced with 
-Changing to a new dev team 
-Changing to a new genre 
Limit Your Partnerships 
-Each will have high expectations 
-Team cannot say no (producer needs to watch for requests which are slowing the project and cut them off at the source) 
Be careful with Multiple Territories 
-N languages = N builds (and less polish for each) 
-Each Region/Publisher wants "something special" 
Infrastructure is Harder than you think 
-Billing, Billing, Billing - learn from Jessica Mulligan 
-Partner with good Ops - don't try to be an online publisher 
-Customer Service Tools & billing are important features 
Don't Believe the Hype 
-Never stop doubting 
-Slow roll marketing 
-Sell! Your hype is always better than reality 
-You usually get offered more before launch 
If you're offered money, TAKE IT!!! 
-Always there when you don't need it (buy shares, services) 
-Unless you have 18 months of operating costs in the bank to burn (asked for audience raise of hands to see who had that- no one did) 
-2008 VC: Red 5, Slipgate, Trion, Perpetual, etc. etc. 
-25-30 mil -> stick in bank, delay launch, pay for delay penalties 
- < 100% of something is better than > 100% of 0 
-cash, equity okay 
-we didn't take it because we thought we could make it on our own 
See the difference between the forest and a tree 
-Had no outside point of view 
-Outsiders can make an impact 
-Better band than a business 
-get Board of Directors or Board of Advisors to be your outsiders 
We're All in this Together 
-Buy game to compete with others 
-Don't wish failure on others 
-Went down because didn't sell enough product 
-others will die through no fault of their own 
-support each other 
-small budget can still get big audience 
-500k copies (big for PC retail) - no subscription 
-if you do microtransactions - run your operation super light 
 
 
 
Solid Game Design (Kojima keynote) 
 
This keynote was okay, and everyone has a writeup about it since it was during the main conference and nothing else was scheduled for the timeslot. Kojima joked that the only reason he came was because they said if he did, they would offer him an award. He offered many good insights hidden among a giant history lesson. It seemed like it would have been much more effective on a Japanese audience.  
 
 
Making the Impossible Possible 
-No creation yet has been truly revolutionary 
-Barrier of Impossibility - make a game 
Possible: done before 
Impossible: not experienced 
Discard Preconceived Notions - go around the wall - set up a new mission 
Use tools (mario->mushroom - snake->ladder, box, etc.) 
Other routes, new ideas, new vision 
Barriers: Hardware Technology -> ground level 
Software Technology can lift you above that somewhat 
Game Design - new idea, tool - helps you get over the barrier 
Mission: Create a combat game for the MSX2 
-no sprites - limit - algorithm = chase down 
-no combat -> escape -> hide -> ! 
-Metal Gear came about just because the hardware could not handle bullets 
Design - ladder - sight range, change AI, "!" notify mechanism 
MG2:SS - Evasion minimap, 3 alert modes, hearing and vision for AI 
MGS sep, oct in US, 1998 - worldwide release - 3D area (ducts) - real time cutscenes - camera changes 
MGS2 no new hardware 
-go for immersion via game design 
-shadows, AI, environmental effects (rain, fog lens), new player actions 
-motion capture, puzzles, shooting 
When designing, map out areas you have already explored and look for holes 
-Metal Gear had not taken place outside much so MGS3 focused more on outside environments 
MGS3 2004 new engine, survival, heal, open natural environments, capture food 
MGS4 2008 Factions, Alliances - Japanese Review 
Each time he showed the intro cutscene he expected people to laugh 
Work together and support industry 
 
 
 
A Whirled Tour 
 

This incredible talk was chock full of useful information and practical data.  The speaker went very fast so I was scrambling to take what notes I could.   

 
 
Virtual World + Social Network + Casual Games Website 
Coins - earned, Bars - real world currency 
-economy was spiraling out of control until they introduced some items that can only be bought with bars 
-limit earned coins to 600/day 
-there is also Bling which content creators gain through sales- Bling can be converted to real world money 
Creators can develop games, even MMOs to sell 
Players can earn trophies 
Item and Level packs are more sellable 
Franchise merchandise also sells 
Creators can develop avatars 
Tech - Google Web Kit - Java - JavaScript - Flash - in-house Java server 
Nodes - Rooms - individual servers that handle specific sets of tasks 
LB Router - RPC - DOBJ (proprietary small message format) 
Server infrastructure/colo: clients <-> S3 <-> FC <-> Nodes, LBR1, LBR2, BNode <-> BC <-> DB 
IM is handled through 1-on-1 chats b/t nodes 
Flash - 15-20 Whirled avatars before dying 
Clients -> Node -> room data change rooms, change server nodes, pass around session data 
Nodes share what room/game/thing it has constantly - manual/routing 
Group chat = 1 Node hosts, sends to nodes with those channels 
Distributed locking mechanism - before publishing node routing info 
Clients have a many-to-many relationship with Nodes - Google Juice @Inject transient keyword 
Amazon S3 - download - Remix - (Editors - can easily grab an image editor in flash - instructions to easily make an avatar with your head) 
Creators that make games have access to an API that lets them award achievements (trophies), and prizes (pets, items) 
Games sell content packs - stream from S3 (own mp3's) - customize MOBs, AVs, even Whirled GUI 
Score ratings (keep a distribution, higher percent -> rating, easy to catch cheaters who go way above the bell curve) 
Game Coin Budget - games can award this many coins, based on scores, duration of game, humanity (isBot), etc. 
Protect from exploits - running unknown code on server(!) - Tamarin, Flash VM 
all user-created games are run on secured firewalled server - S3, 80 machines, quotas - fail check - scale database 
Alternate Virtual Reality Games DirectPlay ssh 47624  
samskivert.com/work/2009/gdc/WhirledTour.pdf 
Amazon ACC - TSUNG - EC2 - 35 I/O thread, DB thread, 2000 = 1 cpu - darkstar 
 
 
 
Cinematic Next-Generation Action NARUTO 
 
A great session with up front post-mortem level quality discussion. Many interesting techniques from real development.  
 
 
CyberConnect2 - formed in 1996 - Kyuushuu - 109-120 employees 
good corporate environment => good development 
Sports - hard license 
War - bad in Japan 
Movie - Japan strengths - Anime, Manga 
2006 - months, # of people 
R&D - 6, 10 - 1 designer, artists, maybe 2 programmers 
Proto - 6, 10 
Base - 6, 24 
Main - 6, 38 
High Vol - 9, 65 
Publisher progress - report every 6 months - document new effects and R&D 
organize team with people best suited for the phase 
Naruto Ultimate Ninja Storm Art 
Character 
-soft clean lively colors - bend head - normals - toon shading - emphasize chin 
-3 LoD - 2.4k, 1.4k, and 7k - flatten eyes 
-soft light shader (except areas with high chroma) - artist select outline shader 
-52 22 tree 67 facial polygons - bend bones for exaggerated expressions - stretch tris for anime blur - free bones 
Background 
-hand drawn touch - silhouettes - 3D Max - special lighting shield - different vantage points 
Effects 
-Layer - ZSort no ZBuffer - 8-loop hachi_maru animations 
-billboard fx inside simple geometry e.g. fireball sphere + billboard inside + animated flames 
Video 
-cinematics - script - match to game system, fx, mechanics, design 
-director check 
-licenser - check vs license 
-prototype - pose only, get camera angle, timing, etc 
-director check 
-motion - full animations - imagery fix - white stand-in enemy 
-director check 
-publisher - check, edit, fix, finalize 
 
 
 
Experimental Gameplay Session 
 
I came to the last half of this session since it was happening at the same time as the CC2 session. I got the list of all the games from a friendly attendee. There were as usual many awesome new ideas presented and many inspiring moments throughout the whole session. 
 
 
Here is the list and notes from the person I sat next to, Joe Mathes.
 
 
* <
http://iandallas.com/games/swan/> Unfinished Swan - 3D Exploration 
Game <
http://iandallas.com/games/swan/>  
 
* Shadow Physics 
<
http://www.avclub.com/articles/avc-at-gdc-09-day-four-wake-me-when-your-game-does,25806/> - You're a shadow not cast by anything interacting with the 
shadows cast actual 3d objects. The link is to an article that mentions it; 
it doesn't seem to have a page of its own anywhere 
* Miegakure <
http://www.enquirerherald.com/371/story/603701.html> - 
the 4D platformer that broke everyone's brains. As above, link is to an 
article 
* Spy Party 
<
http://www.eurogamer.net/articles/gdc-experimental-games-shown-playable> - 
Game where you're trying to blend in with NPCs while carrying out missions, 
and another player is trying to guess which NPC is you. As above, link is 
to an article 
* Moon Stories - A lot of different experimental gameplay ideas and 
tiny games, most of them involving playing with time as a game mechanic and 
romantic relationships also as a game mechanic. Here are links to three of 
them that actually let you play: I wish I were the moon 
<
http://www.kongregate.com/games/danielben/i-wish-i-were-the-moon> , The 
<
http://www.ludomancy.com/games/Trials.html> Trials , and Storyteller 
<
http://www.ludomancy.com/games/StoryTeller.html>  
* Flower <
http://en.wikipedia.org/wiki/Flower_(game)> - The 
developers walked us through the evolution of this game's gameplay. The 
endpoint is you fly around as a cloud of petals, collecting new petals that 
give you powers, and spreading the petals and using them to pass obstacles. 
Pretty, ambient, and not challenging. Like a kid's game. 
* Achron <
http://achrongame.com/> - The RTS where you can go back in 
time or send things back in time. The most fun-looking and groundbreaking 
of the lot IMHO. 
* Rom Check Fail <
http://rom-check-fail.en.softonic.com/> - You're a 
classic NES game hero up against a classic NES enemy. But which hero and 
which both randomize every few seconds. Link is to a place where you can 
download it. 
* Where is my Heart 
<
http://bushghost.blogspot.com/2008/12/student-igf-release.html> - You 
control 3 little monsters as they cooperate to get through levels. Similar 
to the lost vikings 
<
http://www.blizzard.com/us/blizzclassic/vikingsdemo.html> . The game is 
presented on one screen in comic-book panels, and it's not clear without 
exploration which panels connect to which others in what ways. Link is to a 
place where you can download it. 
* Closure <
http://www.kongregate.com/games/GlaielGamer/closure> - In 
this, every level is dark, and there are few light sources. However, your 
character does not physically interact with anything in the dark - so if you 
move a light away from a wall, you can walk through the wall. Or fall off 
the bottom of the screen, through the dark floor. Link is to its Kongregate 
page, where you can play it 
* Spelunky <
http://forums.tigsource.com/index.php?topic=4017.0> - 
Actually, this talk was about roguelikes and extreme consequences in 
general. The key point is that if the level is procedurally generated, 
death is permanent, and you can't save your game, then every time you play 
the game, that is the only time anyone will ever play the level you're on. 
That makes it intense and important-feeling. This one was given by 
Timothy's friend Derek Yu. Link is to tigsource, where you can download it. 
Timothy does ops for tigsource. 
 
Here are my notes on the ones that I got to see. 
 
First half - Unfinished Swan, Shadow Physics, Miegakure 4D, Spy Party, Moon Stories 
Second half 
Flower - Jenova Chen 
-flow +3D -AI 
-safe, free, love - peace and harmony - petal blowing - growing - orbs 
-many prototypes - mind-teleport - ground, seed, golf 
-needed depth and challenge - collect petals, gain spells, time limit 
Achron - in development for 10 years 
-RTS where all units can time travel 
-timewave (past changes gradually affect future) 
-chrono energy - further back you travel, the higher the energy drain 
-return to present to recharge 
-
achrongame.com 
Closure - Tyler Glail 
-borne out of a frustration with 'dark levels' - areas/rooms with only small light and limited vision 
-idea - had to resort to puzzle game - can only interact with what you can see 
Where is my Heart 
-Comic Panel effect 
-multi avatar 
-one that can see dark world 
Rom Check Fail 
-Gameplay Variation 
-standard pacing chart - gameplay variance induces spikes in intensity 
-vary hero too, not just weapon or enemy 
Roguelikes 
-Rogue - 1980 - berkeley - permanent death + randomly generated levels 
-chess rogue, gangsta rogue, real lives 2007, dwarf fortress, etc 
-Spelunky - more approachable, platformer rogue 
 
 
 
Negotiation 101 
 
This was a great talk and had lots of good points that everyone seeking to have a good career should know.  
 
 
First rule of negotiation is Preparation 
-Negotiations can be won or lost before they even start 
-Know thyself - objectives, parameters 
-Plan B so you can walk out if offer is not good 
-What will they want? Company & Person - know person's role 
-Can you give what they could want? 
-New terms added when agreed with lower peons 
-Legal department = bad - only see risks 
-talk to marketing! 
-_Practice_ 
-intro, question, points, exits 
-comfortable, confident 
-Research culture issues 
-cards for Japanese 
-order in which to shake hands (leader first in China) 
-Practice with big purchases (TV, car, etc.) 
Negotiation 
-in-person, remote? usually best is their place- they can't walk out on you in their own office 
-make sure key decision makers are involved 
-one person per party - less people = easier negotiations - see "Getting to Yes" Book 
Strategies 
-Soft - getting deal no matter what 
-Hard - fight all points to get the best deal 
-Hard is obviously better, but if everyone is hard all the time, nothing would ever get done 
-Emphathize - discover actual interests - discuss interests, _not positions_ 
-Listen - blame? stay calm, just listen - "Make your fist in your pocket." 
-Cooldown - keep up momentum 
-if no deal, try to preserve the relationship 
 
 
 
Social Games 
 
Decent talk with some interesting games. Only caught part of this one as the conference was winding down.  
 
 
Parking Wars 
-parasite cheat (won't ticket you if you don't ticket me) 
-fake accounts (park all there) 
BackChannel 
-comments on TV show while it is going - clicked ones grow 
-similar tag matching 
Kelly's Bags 
-electrolux, social dilemma, events, being hunted, bags, choose the most popular one, you win 
 
 
 
Iterative Level Design 
 
Great talk from the Bioware guys on iterative level design. Also could only catch the end of this one. 
 
 
Bioware - the Richards - nice guys 
Corey Andruko -
coray@bioware.com 
Dusty Everman -
dusty@bioware.com 
 
Documentation 
Mass Effect 1 - Kismet -> wiki export 
Mass Effect 2 - SharePoint -> Perforce 
 

 
 
Current Mood: blah
 
 
vazor222
03 May 2009 @ 02:34 pm
Indie Game Night this time was pretty fun. It felt nice to get a bit more recognition since I had spoken at the last one. I met a lot of new people and promptly forgot all their names, and there were about 1% more x-sweepers in attendance. The usual crowd plus ITT was there as well.

Of particular note was the Darkened Dreams team, showing off their new progress like battling, AI settings, and fancy new UI art.
http://darkeneddreamsgame.blogspot.com/

Darius' talk was really good, and all good points I will be reviewing and keeping in mind for whatever project setup I do next year. I gave him some feedback on his zombie game which has gotten a visual overhaul and some new features.
http://dariuou.blogspot.com/2009/05/choosing-project-know-yourself.html

Vespers 3D had made some progress as well and was easily the best-looking indie game there.
http://monksbrew.blogspot.com/

I talked to the usual crowd and to some of the ITT students. I also talked to a new indie who was an artist looking for a programmer(!). Usually it's the other way around. ;)
http://www.garagegames.com/community/blogs/view/16987/1

As usual it was motivating and encouraging to see all the cool projects making good progress. Can't wait for next time!

Find other writeups here:
http://monkey-time.blogspot.com/2009/05/utah-indie-games-night-april-2009.html
http://www.rampantgames.com/blog/2009/05/utah-indie-night-spring-2009.html
 
 
vazor222
If the title doesn't give it away, this month's language is C#. While working on a tool I was surprised to discover that C#'s array initializers in particular have a small quirk. The discovery came about while searching around for the proper syntax for arrays in C# while trying to set them up for a DataGridView.


--Puzzle--

So here are the two mysteries I encountered and will solve for this month's article.
1) What is the most efficient initializer for an array?
2) How do you make a datagridview bind to your array?


--Answer--

The solution to question 1 is to use the Array Initializer like this:
var ra = new int[] { 0, 1, ..., N };
For multi-dimensional arrays it looks like this:
var ra = new []{new int[] { 0, 1, ..., N }, new int[] { 0, 1, ..., N } };
According to (http://community.bartdesmet.net/blogs/bart/archive/2008/08/21/how-c-array-initializers-work.aspx), this turns out to be faster than the alternative:
int[] ra = new int[N];
ra[0] = 0;
ra[1] = 1;
...
ra[N] = N;
The solution to question 2 is that you can't, at least not really. It looks like you have to create a class with each property you want, and then add an instance of that class to a List. Finally assign that List to a datagridview's DataSource property. Then it should be all linked up. You might have to Invalidate() the datagridview to get it to show your changes later as well. Here is some source code to illustrate creating a 9 by 9 grid. Enjoy!
    (some class e.g. Form1)
    {
        (some function e.g. the contructor)
        {
            sudisplay.Add(new RowN());
            sudisplay.Add(new RowN());
            sudisplay.Add(new RowN());
            sudisplay.Add(new RowN());
            sudisplay.Add(new RowN());
            sudisplay.Add(new RowN());
            sudisplay.Add(new RowN());
            sudisplay.Add(new RowN());
            sudisplay.Add(new RowN());
            dataGridView.DataSource = sudisplay;
        }
    }

    public class RowN
    {
        public int col1 = 0;
        public int C1
        {
            get { return col1; }
            set { col1 = value; }
        }
        public int col2 = 0;
        public int C2
        {
            get { return col2; }
            set { col2 = value; }
        }
        public int col3 = 0;
        public int C3
        {
            get { return col3; }
            set { col3 = value; }
        }
        public int col4 = 0;
        public int C4
        {
            get { return col4; }
            set { col4 = value; }
        }
        public int col5 = 0;
        public int C5
        {
            get { return col5; }
            set { col5 = value; }
        }
        public int col6 = 0;
        public int C6
        {
            get { return col6; }
            set { col6 = value; }
        }
        public int col7 = 0;
        public int C7
        {
            get { return col7; }
            set { col7 = value; }
        }
        public int col8 = 0;
        public int C8
        {
            get { return col8; }
            set { col8 = value; }
        }
        public int col9 = 0;
        public int C9
        {
            get { return col9; }
            set { col9 = value; }
        }
    }
 
 
Current Mood: melancholy
 
 
vazor222
20 April 2009 @ 06:09 pm
A little over a year ago I met a game designer who goes by the name of Dagda at Sakura Con who introduced me to the intriguing tabletop RPG Trigger Discipline (http://dagda-mor.blogspot.com/search/label/Trigger%20Discipline%20Retake). The rules (http://docs.google.com/Doc?id=ddtpw56g_98ftqhjgf) are still in beta but I'm excited for the potential behind this system. After a couple of emails, Dagda agreed to an online interview, which is here for your perusal. Enjoy!
Read more... )
A big thanks to Dagda for accepting the interview and be sure to follow his creative exploits over at http://dagda-mor.blogspot.com/!
 
 
Current Mood: impressed
 
 
vazor222
18 April 2009 @ 10:15 pm
So I had this thought a while ago and today I discussed it with a couple friends (Lorax and gunslingerfry) and we came up with this list. Meme-tastic and amusing to think about.

World of Warcraft = McDonald's
It is efficient, can be found almost anywhere (on almost any machine or platform), and makes some people fat.

EverQuest, Lord of the Rings Online, Final Fantasy XI, etc. = High-class fast food joints
During their prime these elite MMOs had high rate of customers but as cheaper alternatives came around, their market share started dropping.

Guild Wars = All-you-can-eat Buffet (Pizza Docs, Golden Corral, Souper Salad, Hometown Buffet)
This type of MMO lets you go in and enjoy everything in the restaurant for one up front price.

Sidewalk Vendors/Free Samples = Free-to-play MMOs
These MMOs let you sample the food and then if you like it you can buy a full meal, and buy extras to go with your food.

Mom N Pop's = Ultima Online, Indie MMOs
Everyone who played these old-school MMOs has fond memories of them, and back then they didn't do anything fancy with franchises or anything.

Old Deli's = MUDs
You can't really get a sandwich here, but you can get the basic ingredients for one.

Red Light, etc. = Strip Joints, Hooters, etc.
MMOs with erotic under(over?)tones... yeah...

Second Life, There, Whirled, etc. = Live-in Restaurants, Integrated Restaurants, etc.
These unique MMOs let you select and cook up your own food.

Little Big Planet, City of Heroes = Melting Pot, etc.
Some MMOs let you directly participate in the food cooking process.

My Dream MMO, BYOND, etc. = Full Service Cook, Grocery Store?
Paid service or do-it-yourself type MMOs let you try your hand at delivering food yourself.

NCSoft, portals, all-in-one boxes, etc. = Grocery Store?
You might argue that a publisher of MMO's could be considered a grocery store since you can get many different types of food.

? = Burger King
Many MMOs claim to be WoW-killers, and many try to emulate WoW but deliver better quality. Some examples of MMOs that might go on this list include Warhammer Online, Age of Conan, Vanguard, and D&D Online.

? = Taco Bell, Etc.
EVE Online and Star Wars Galaxies might be candidates for this since they deliver different content and have about the same ratio of success.


If you'd like to read something with a bit more substance:
http://gigaom.com/2009/02/01/top-10-money-making-mmos-2008/
 
 
Current Mood: weird
 
 
vazor222
31 March 2009 @ 09:21 pm
Ughh.. still recovering from GDC... but I gotta do my CodeMonthly... Okay here we go.. GDC writeup and followups will have to wait until later in the week. '^^,


--Puzzle--

This month's puzzle started out with me coding something in Java and wondering to myself... "What if I want to have a little utility struct, er, I mean class to help organize some data? Do I really have to make a whole new text file for it?" I dug into the question which has a simple answer, and then dug some more in order to find out more about packages.


--Answer--

The answer to the first question is encapsulation. Here is what it looks like:

public class UnencapsulatedClass
{
	int i = 5;
	EncapsulatedClass ec;
	
	public class EncapsulatedClass
	{
		int j = 9;
	}
}


So basically, it seems like the idea is that you're supposed to define utility classes INSIDE your file class definition. FYI these get exported/built as:
UnencapsulatedClass.class
UnencapsulatedClass$EncapsulatedClass.class


Now on to the second part. If you've heard of a custom-built java package, you were probably given a .jar file and told to reference it in your IDE. From what I can tell, this jar file is actually just a bunch of class files, all in appropriate directories and all zipped up into one file. If you try to make a package that doesn't fit with the directory name, most IDE's will probably yell at you. Anyway, so the last little part I wanted to cover was how packages work with encapsulation. Basically, if you try to import an encapsulated class from a package, you will probably get this esoteric error message:
No enclosing instance of type UnencapsulatedClass is available due to some intermediate constructor invocation

So instead of...
import package1.UnencapsulatedClass.EncapsulatedClass;

...what you should do is just import the UnencapsulatedClass and the EncapsulatedClass will become available to you just from that:
import package1.UnencapsulatedClass;


Also note: it appears that you cannot inherit from encapsulated classes. I'm guessing the language designers drew the line there and said "if you want to start inheriting and importing and all that you should put it in its own class anyway, dagnabbit!"

Well that's a wrap! Here's my entire source for those that want to explore the concepts a little more (each line where it says package should be in its own java file):
package package1;

public class Class1 {

	/**
	 * @param args
	 */
	public static void main(String[] args)
	{
		System.out.println("hello vazor");
		Class2 c = new Class1().new Class2();
		c.callMe();
		Class3.callStaticMe();
		Class1.Class3.callStaticMe();
		new Class3().ca();
		new CrossPackageClass().callMe();
	}

	public class Class2
	{
		public void callMe()
		{
			System.out.println("called Me Class2!!!");
			new CrossPackageClass().new CrossCrossCall().callMe();
		}
	}
	
	public static class Class3
	{
		public static void callStaticMe()
		{
			System.out.println("called Static Me Class3");
		}
		
		public void ca()
		{
			System.out.println("called Me Class3");
		}
	}

}


package package1;

import package2.P2Class2;
import package2.P2Class;

public class CrossPackageClass {

	public void callMe()
	{
		new P2Class2().callMe();
	}
	
	public class CrossCrossCall
	{
		public void callMe()
		{
			new P2Class().callMe();
		}
	}
}


package package1;

import package1.Class1;

public class UnencapsulatedClass {
	int i = 5;
	EncapsulatedClass ec;
	
	public class EncapsulatedClass
	{
		int j = 9;
		
		public void uecMe()
		{
			Class1.Class3.callStaticMe();
		}
	}
}


package package2;

public class P2Class {

	public P2Class()
	{
		System.out.println("P2Class is being initialized!");
	}
	
	public void callMe()
	{
		System.out.println("P2Class callMe was called!!!!");
	}
}


package package2;

public class P2Class2 extends P2Class {
	
	public void callMe()
	{
		System.out.println("P2Class2 callMe was called!!");
		new P2Class3().new CrazyClass().callMe();
	}
}


package package2;

import package1.UnencapsulatedClass;
import package1.Class1;
//import package1.UnencapsulatedClass.EncapsulatedClass;

public class P2Class3 extends UnencapsulatedClass//EncapsulatedClass
{
	EncapsulatedClass ec;
	
	public class CrazyClass extends Class1
	{
		String s = "haha wow";
		
		public void callMe()
		{
			new Class2().callMe();
		}
	}
}


Expected output:
hello vazor
called Me Class2!!!
P2Class is being initialized!
P2Class callMe was called!!!!
called Static Me Class3
called Static Me Class3
called Me Class3
P2Class is being initialized!
P2Class2 callMe was called!!
called Me Class2!!!
P2Class is being initialized!
P2Class callMe was called!!!!
 
 
Current Mood: recumbent
 
 
 
vazor222
22 February 2009 @ 04:03 pm
Happy 222 Day everyone!

It's the 22nd day of the 2nd month of the year, so I get to see 222, my favorite number, everywhere. ^_^

In celebration of 222 Day be sure and create something and share the joy of creative expression with everyone. You can also be a sprocketeer and free your mind or someone else's by learning something new or find out something from a very different view of the world.

My 222 Day activites include this post about 222, my 222 situps, some reading about the opposite view about something I enjoy (http://www.google-watch.org/), and maybe writing a story before going to bed.

So I had this idea on Monday the 2nd of February. Previously I tried to do 222 pushups before the end of the year (in two months). This time I was going to do 222 situps before 222 Day. I thought about how crunch happened before with the pushups and I decided I needed lots of planning.

I did a test run on Tuesday to see if the plan was reasonable. I was able to do 22 sit-ups easily. I thought that if I did 22 pushups a day every workday just before lunch, since I have 14 work days until 222 Day, then I should easily make it since I have 4 days to spare.

I found that it helps to have a consistent time and place to do it. I could do it during lunch break/before/after being busy at work. I found a spot at work where it is easy to do situps. It should only take just over 10 days, and I had 4 days buffer time for crazy busy days, and weekends if necessary. I also decided on a reward. If I get it done then I get a soda at work. (Haha yeah I know, there goes any health benefit from it.) I also decided that if I get it done more than a day early then I get another soda on the day I finish.

Here is how it went:

situp
journal

2/3
22
+10
+10

2/4
22

2/5
22
+10
(all crunches)

2/6
22 crunches


total 118


2/9
30 situps

2/10
22 crunches (at home)

2/11
22 crunches
+16 while waiting for dinner

2/12
22 situps

2/13
22 situps

total 252


2/16


2/17


2/18


2/19


2/20



all done!!


As you can see, it was an incredible success. I felt like the usual starting burst was there, and a strong starting run. Then it seemed to taper down, and finally plateau as it neared the end. I hadn't been keeping track so at that point I wasn't sure if I was done yet or not.

So from this I have personally learned a few ways to avoid crunch.
1) Plan, plan, plan. Figure out how long something might take by testing it out and trying it.
2) Buffer. Even though this was too easy, the buffer still helped.
3) Consistent time and comfortable location. This makes it easier to get the work done and helps you get into a routine.
4) Reward. Plan a reward of some sort. Motivate yourself with it.
5) Have a super easy task. XD Situps were so much easier than pushups and I could do more of them with less effort. When I had finished my allocated workload for the day, if I felt like I could do more, I tried to do more. I got bonus 10's and more done this way. I finished so early that I got a whole week off, basically.

Here are another few things I saw in a list recently that reminded me of this. Maybe these will help in avoiding crunch as well.

How to keep your fitness resolutions for the New Year

Write it down and post it where you’ll see it every day.
The first thing in the morning, do something to support your resolution- even if it’s just taking the dog out for an early walk.
Listen to a motivational tape, read a self-help book, or take a class on the health habit you want to change.
Put it in your daily calendar and make it a priority.
Post inspiring quotes in your work area.
Search out different places or environments to do your resolution to keep it fresh, interesting and fun.
Ask for help from family members and friends who will support your efforts.
Start a savings jar or other reward system and add a dollar for each day you keep your resolution. Set a goal and reward yourself when you reach it.


In other news, Anime Banzai is going to be a three day con this year, and I am still looking forward to Sakura Con and GDC!

Now if you'll excuse me I'm going to play some indie games/demos and try to ignore my throbbing headache from the two day Smash Bros fest where I played smash 48-hours, with about 2 hours total of breaks for food and sleep. @_@
 
 
Current Mood: geeky
 
 
vazor222
16 February 2009 @ 02:00 pm
CodeMonthly #2: Virtual Destruction

Three day weekend! Might as well get my CodeMonthly done early. ^^, As good as I know these are for me, I can't help but think about all the cool minigames and game ideas I could be making. If I don't get an outlet for my creative energy some other way, I might end up making something sporadically here or there. We'll see. ^^,


--Puzzle--

If you recall last month's bonus you know that with inheritance, if you override a superclass function you will run the subclass function, even if the variable is instantiated with the superclass, for example when using something like A* a = new B;

This is made possible with the virtual keyword.

This month we learn something about virtual destruction (mwahaha).

Consider the following code:
#include <iostream>

using namespace std;

class Super
{
public:
	Super()
	{
		superData = new char[ 256 ];
		cout << "super allocated" << endl;
	}

	//virtual ~Super()
	~Super()
	{
		delete [] superData;
		cout << "super deleted" << endl;
	}

	virtual void func( void )
	//void func( void )
	{
		cout << "super func" << endl;
	}

private:
	char *superData;
};

class Sub : public Super
{
public:
	Sub()
	{
		subData = new char[ 512 ];
		cout << "sub allocated" << endl;
	}

	~Sub()
	{
		delete [] subData;
		cout << "sub deleted" << endl;
	}

	void func( void )
	{
		cout << "sub func" << endl;
		//Super::func();
	}

private:
	char *subData;

};

int main(int argc, char* argv[])
{
	Super* superSub = new Sub();
	superSub->func();
	delete superSub;

	return 0;
}



Looks clean enough, right?
But if you run this code you get:
super allocated
sub allocated
sub func
super deleted


Whoa, whoa, whoa- major problem here. The subclass's destructor is never getting called! This leads to a memory leak and that is a Bad Thing.

How do we fix this?


--Answer--

Add the virtual keyword to the superclass destructor.

"Wait," you might be saying, "doesn't that just make it only call the subclass destructor?" You might think so, because that's how functions (member functions/methods) work. However, C++ treats deconstructors different.

Adding the virtual keyword to the superclass destructor makes it so the superclass AND the subclass destructor are both called. Adding this one word will clean up the memory leak for you. Neat huh?

More interesting things to note:

  • Sometimes compilers will warn you about not having a virtual destructor. The general consensus is make it virtual just in case you need to destroy a subclass. However in some cases it seems to be acceptable to ignore the warning and make the destructor non-virtual and protected if you don't ever want subclasses to have destructors called.
  • If there is no virtual keyword, the destructor is called for only the class type that the instance variable was declared as. Same for functions.
  • If you want your member functions to run both the subclass and superclass definitions, you can call the superclass function directly using :: as per the commented out code above.
  • Putting the virtual keyword on a bottom-most subclass (leaf) member function has no meaning. The virtual keyword only comes into effect when that function may be overridden.
  • If Sub had another subclass under it, and the instance was made with Sub s = new Subsub(); - putting virtual on either ~Sub or ~Super would make all three destructors get called when s is deleted.
 
 
Current Mood: grateful
 
 
vazor222
Indie Game Night this month was great! We had a ton of demos to see and I got to give a presentation about my minimonthly project. ^_^

I met a lot of new people and I hope everyone else had a good time too.

Below are my speech notes and here is a link to the flash presentation I used while speaking.

http://www.angelfire.com/psy/vazor/postmortem/postmortem.html


This is going to be a talk about crunch time and about motivation for developing games and the lessons I learned about it from my minimonthly project. It will be a MiniMonthly Postmortem of sorts. I wanted to do this since I am ending my MiniMonthly project and that is what is on my mind the most.
Feel free to ask me about any of my thoughts or ideas, and come play #11 and #12 when we move to the expo.

Motivating Crunch:
A MiniMonthly Postmortem

What is a minimonthly?
-my project I've been doing in my spare time
-testing motivation to make games via game ideas
-started as a new year's resolution to keep up my skills
-quick and easy games, doable in only a day or two
-whatever game idea I was most excited about that month
-due date every month
-could only work on it during that month
-ok to reuse source code and art assets
-no picking up pre-existing projects
-posted to my vazor222 livejournal blog
-not shippable
-but at least first playable
-unless I ran out of time (#9)

Lessons learned from the MiniMonthly experiment
-will cover each of these five areas over the next few slides
-Crunch, Time, Motivation, Inspiration, Extraversion

Lesson 1
Crunch
-The Basic Pattern of Crunch
-the initial burst
-the slack-off
-the regular grind
-the crunch
-team crunch is caused by bad management
-typically the amount of work is underestimated (#4)
-games are complicated things and making them work takes time
-feature creep
-personal crunch is caused by procrastination
-even on this presentation -_-
-it seems like it is not much work, so do it later
-there is no immediate pressure from a deadline
-knowing when to give up
-battling crunch
-combat underestimation with research and buffer time
-combat feature creep with priority lists
-design and set goals such that you get immediate and fun results at each step of completion (#11)
-try to get a consistent and congruent time to work (#11)
-try to set a non-distracting time/place to work
-draw the line; set a time when you stop no matter what
-battle procrastination
-break down features
-set daily and weekly goals
-give up when the feature is making you miss your goals for more than a week
-redesign or rework another way (#8)
-escalate or cut the feature

Lesson 2
Time
-when there's not enough
-what not to do
-don't do any design, just make it and design only what you have to
-don't burn yourself out in one night!
-set a limit to make sure you are fresh the next day
-when there is a lot
-don't over-budget!
-incremental builds (#3)
-do what motivates you the most (#3)
-if you're finished, you can stop!
-think about ideas for the next month
-the first and the last
-the first will be good because you have this great idea
-the last also will be good because it is your last one

Lesson 3
Motivation
-what motivates you?
-for me it is having an awesome idea and wanting to see it made
-even more awesome is seeing people react the way you were hoping
-which happened to me on #1, #3, #5, #6, #7, and #10 ^_^
-being motivated from other people's ideas
-you can try but it never works for me
-except for #8 which was partly for my wife
-fun work vs work work
-fun work (career development work) is more fun than work work
-playing games or slacking off is more fun than fun work
-work work could keep me from getting fun work done
-and games could keep me from getting fun work done
-but I did not let them take those weekends I had set aside
-feature cut and scaling back (#8)
-it is very easy to think you're keeping the scope down with design decisions early on, but the reality is the less time spent on production, the less game will be made (#9)
-external sources of motivation
-people to show the game to (like how #10 was helped by Indie Game Night)
-somewhere to keep a record (e.g. a journal or a blog)

Lesson 4
Inspiration
-if you are like me, you have game ideas all the time
-over time, you get some ideas that are more powerful than others
-use them at the start to get off the ground (#1)
-save one for the very end (#12)
-EVERYONE is a game designer
-discuss ideas with people and you will always get a few new ideas
-remember about motivation from other people's ideas
-if you still want to do it, be sure to credit where due
-don't get too absorbed in the design and feel
-it inevitably leads to procrastination (#2 and #9)
-make a feature first, and decide how to design it as you make it
-keep track of all your ideas, but only implement and focus on what you have time for (#5)

Lesson 5
Extraversion
-if you've worked on games long enough you will eventually level up your jadedness
-you realize people don't like anything but their favorite games
-you start to think about your audience when designing
-having an audience is key for good design
-having people who can give you feedback is a big motivation
-playtesting will help you improve
-sometimes things that are clear to you will be confusing to others
-bugs and inconsistencies in the design can be pointed out (#3, etc.)
-you can get a measure of the response you get and how well you did in evoking the response you wanted
-collaborating can help
-but only if you ask for something easy
-and only if you don't need it and it is easy for you to incorporate
-ask every month often to find a time
-sit down, set a goal, do it, and then don't bother them until next month
-don't promise to give anything in return (again, remember about motivation from others)
-except for be sure to credit them!

MiniMonthly vs other side projects
MiniMonthly
-you can do it
-you can set a monthly goal that is doable
-stick to your deadlines
-move on if not; you can't fail
-you can't do what you can't do
-if you're not an artist, don't do art
-if you're not a coder, don't do code
-but whatever it is you can do, get better at it
-but you can do it
-you can learn to do a lot of things in your spare time
-month schedule is closer to typical milestone schedule
-learn sooner rather than later that your project is or isn't going anywhere
Other side projects
-might involve working with a team
-design compromises (and blather)
-responsibility
-waiting (not really- no excuse)
-length of time
-no deadline
-usually unknown
-can continue to grow indefinitely (unlike studio-developed games)
-end up unfinished
-lose motivation over time
-too big can mean too much work
-more finished projects look better

How you can do your own MiniMonthly
-decide what you will do
-code, art, writing, etc
-monthly ideas that inspire you as you go along
-or fun features that all add up to one big project
-decide how you will do it
-what tools will you need and when/where will you have access to them
-how you will make yourself accountable

Links
-http://vazor222.livejournal.com
-http://vazor222.livejournal.com/tag/minimonthly
-gamasutra.com
-gamedev.net
-sites geared toward your field and tools (SDL, Torque, XNA, Flash, Photoshop/GIMP, Maya/Blender, etc)
-igda.org - ask your peers
 
 
Current Mood: creative
 
 
vazor222
30 January 2009 @ 10:48 pm
Alright, it's a new year, and so I've started a new theme with my monthly projects. This time, every month I'm going to take a code puzzle and solve it. Thus the name: CodeMonthly! Each one will have at least a Puzzle section and an Answer section.


--Puzzle--

Given:
int array1[100];
char* array2 = (char*)&array1;
char* array3 = (char*)array1;

What is the difference between array2 and array3?


--Answer--

Nothing. The pointers themselves are going to be stored in two separate places (likely right next to each other on the stack), but they are going to point to the same place. So since they are also the same type, they will react the same way to everything except if you ask them their location. The only thing strange going on here is the switch to char* which will mean they will only get one of the four bytes of each int of array1 so array2 and array3 will be four times as long, by which I mean they will have 4x the number of "valid" array access indices.

Code:
    int array1[100];

    for( int i=0; i<100; ++i )
        array1[i] = i;

    char* array2 = (char*)&array1;

    char* array3 = (char*)array1;

    cout << "array1:" << array1 << endl;
    cout << "&array1:" << &array1 << endl;
    cout << "&array2:" << &array2 << endl;
    cout << "&array3:" << &array3 << endl;
    cout << "array2[46]:" << (int)(array2[46]) << endl;
    cout << "array2[47]:" << (int)(array2[47]) << endl;
    cout << "array2[48]:" << (int)(array2[48]) << endl;
    cout << "array2[49]:" << (int)(array2[49]) << endl;
    cout << "array2[50]:" << (int)(array2[50]) << endl;
    cout << "array2[51]:" << (int)(array2[51]) << endl;
    cout << "array2[52]:" << (int)(array2[52]) << endl;
    cout << "array3[46]:" << (int)(array3[46]) << endl;
    cout << "array3[47]:" << (int)(array3[47]) << endl;
    cout << "array3[48]:" << (int)(array3[48]) << endl;
    cout << "array3[49]:" << (int)(array3[49]) << endl;
    cout << "array3[50]:" << (int)(array3[50]) << endl;
    cout << "array3[51]:" << (int)(array3[51]) << endl;
    cout << "array3[52]:" << (int)(array3[52]) << endl;
    cout << "array3[53]:" << (int)(array3[53]) << endl;
    cout << "array3[54]:" << (int)(array3[54]) << endl;

Output:
array1:0x22fde0 (or whereever your computer puts it)
&array1:0x22fde0
&array2:0x22fddc
&array3:0x22fdd8
array2[46]:0
array2[47]:0
array2[48]:12
array2[49]:0
array2[50]:0
array2[51]:0
array2[52]:13
array3[46]:0
array3[47]:0
array3[48]:12
array3[49]:0
array3[50]:0
array3[51]:0
array3[52]:13
array3[53]:0
array3[54]:0


--Bonus--

Given two classes with virtual functions, one a superclass (A) and one a subclass (B), and:
A* a = new B;

Note that a.func() will run B's version if they are the same function signature. If they are different signatures then A's will be called instead. This is because B's version will not override A's version when they are different signatures.
 
 
Current Mood: drained
 
 
vazor222
Jason Faller
How to make a successful indie game

The last local IGDA meeting here was sadly under-attended but the content was amazing! Jason Faller delivered a valuable speech with lots of relevant and exciting topics. This is my run-down of my notes (with my thoughts and changes added in) that I took during the meeting, but I'm sure others took away more and there was much more good information that I could not scribble down in time. It felt like a taste of the upcoming GDC talks I will be attending in the not-so-far-away future.

Jason Faller's bio can be found online but he said he hates having them read. He is currently the Executive Producer at Silverlode Interactive, and, starting off as a co-op project with Wahoo, they have made Utah's biggest MMO: Saga. This game can be found at www.playsaga.com and is unique because it is an MMORTS. RTS fans should definately check it out.

They have spent 3 years on it and they are making ends meet. The game is set up so there are one-time purchases, add-on packs, and (I think?) subscription options. The game has been completely self-marketed and most gamers have probably seen their ads on various gaming websites.

The basic marketing formula as explained by Jason is $ in -> $ out. This means the more money you put into marketing, the more money you will get out. If you are doing things right, then the scale factor applied here will be greater than one. For example say your marketing/product was getting you 1.5 return. That would mean $100 in -> $150 out. You can then easily put $100000 in and get $150000 out, which means a $50000 profit! So that is the goal. But getting there is really not that easy.

At this point Jason talks about various marketing techniques. Banner ads can bring people in, but you have to pick the right websites at the right time. A small website leads to quick and easy burnout. A larger website will get more hits and sales will come in high, but then as the readership gets saturated, the sales drop off, and you have to find a new place to put the ads.

He talked about an example, Adventure Quest, where they spent a very long time (5 years?) dumping money into the ads for the game. This game started out as a free-to-play game. As the time went on the makers added more and more features to the game and made a subscription/membership version where you actually pay to play. The game has only just now started to turn a profit.

There are several things you can do to maximize your profit. You need good tutorials. You need good ads and key art to make a good first impression. You need good reviews. And you need good exposure.

There are two plans of attack you can use when getting traffic. There is the newsworthiness factor, and there is the niche established market factor. When you release a game, that is news. Game news sites will want to post your stuff because it's interesting for their readers. If you make a game in a pre-existing market, that is good for sites dedicated to that market. If you make a tower defense game, you will get all of those people who are really into tower defense games but they want to play a new version with new graphics and new enemy patterns.

One big secret in the game industry is how to get good reviews. It is sad but it is true: if you just send your game to the reviewers, you automatically lose two points on your score. What you have to do instead is fly down there, take the reviewer out to lunch, show them your game and make sure they don't have any unanswered questions. This makes sense, since it follows what I have observed to be a general rule of life. If you're not there to tell, explain, and show someone something, they will inevitably think less of it. People are confused by, misunderstand, shun, blame, and eventually hate that which they don't understand. This is the same principle behind TEA (tell, explain, ask), which is the reason why if you're not always there at work, you will get blamed for something. A lot of people have friends or contacts that they might otherwise hate or think less of, just because they spent some time with them or they talked it out. This is partially my optimistic libertarian view talking, but I find that most people are decent people just trying to get by, once you get to know them.

Anyway, to get back on track, good reviews will get you good exposure. Good exposure generates sales. This is marketing in action.

Jason moves on to another good point here. Many game developers when they want to try to sell their game think "I won't have to worry about marketing, the game is so awesome it will just sell itself!" What they are talking about here is semi-formalized by Jason as "Promulgation". He then goes on to explain that this is only one step in a long list of steps to getting money from your game. And sadly, it is usually the weakest source of sales. This borders on my "game design thought maturity" rant so I will keep it brief, but the big thing most new game developers need to learn is that their game is just not that awesome. Big game successes and blockbusters happen, yes, but they are rare and usually had a ton of work and money and time and marketing put into them. Then if they do things right they form a franchise and then, yes, the amount from promulgation can be significant.

Here are the five big steps in the marketing chain. Impression, Acquisition, Conversion, Retention, and Promulgation. Impression is when the user sees the banner ad and clicks on it (1/10). Acquisition is when the user goes through the site and likes what they see enough to sign up for free services (1/100). Conversion is when the user likes the game enough that they decide to pay for it and become a customer (1/1000). Retention is when the user gets addicted and decides to come back and pay again, or continues to subscribe (1/10000). And finally Promulgation is when the user loves the game so much that they convince others to buy the game (1/100000).

In the Impression stage, key art and hooks are the important factors. Star power can also help, such as having a famous icon or IP to draw traffic to your game. Star power consists of icons like the president, WWII, existing IP, or your own franchise if it is big enough. If there was one thing Jason could have done differently it would have been to wait before releasing the game. He would have contacted the ad and game websites long before the release date, and really tried to make the most of the launch event. People/news sites only want to hear about NEW games. He would have tested some ads first to get them right, and then made the game launch BIG.

To help with Acquisition, you need to streamline your signup process. Keep it to a minimum such as email address, username, and password. If people have to fill out a big form, they will just not bother and they will go look somewhere else. You also want the game to be a small initial download. There are other tricks you can find from watching how the big games do their signups.

Further down like the Retention stage, the IP becomes more of a factor. This is the stage where you want to have a good game not in your own eyes, but in the eyes of your customers. Research what makes a good game and make sure tutorials and controls are streamlined and help is easy to access. There is research out there about how to make a game addicting. For example, there is the feed bar. Give a small reward in the first 6 seconds, then give a medium reward after 40 seconds, and then give a huge reward after 8 minutes. Then repeat the process. Jason has his own theory about why Tetris is so addicting, and I have other theories about how to make addicting games as well (e.g. the cascade effect) which I might go into more detail about in another post. Innovate whenever you can to make the game better. Jason talked about adding a dynamic wiki localization system which would theoretically make the game playable in whatever language you wanted. Just have the users put in the content (and like any user-generated content this means you have to be sure to screen/rate submissions before posting) and the game can read from the wiki dynamically to make the game play in any language that they decide to put in. To help develop the franchise you can add on ancillary products (action figures, toys, spinoffs, licensing, etc).

Well that is all of the notes I have from the talk. I think it was awesome and very valuable for anyone looking to self-market. This is an increasingly relevant topic as more and more indie channels become available. If you read this and make use of it please support the IGDA and good luck to you in your endeavor!
 
 
Current Mood: grateful
 
 
vazor222
31 December 2008 @ 07:46 pm
After a grueling couple of days of pushups, I'm happy to report that I met my random goal I set last month of doing 222 pushups before the end of the year. Go me! It was interesting to note that it followed the Basic Pattern of Crunch Time just as well as any game project. I made the goal, got some 5-day pushups in, and then slacked off for about a week, then did 5-pushup days more consistently until crunch time came, and then I was forced to do grueling 14, 20, and finally a whopping 47-pushup day today in order to meet the goal. Now if I can find a way to excercise consistently then perhaps I will have found the solution to crunch time for myself. XD

0
7
10
14
16
18
21
26
29
35
36
46
49
59
60
72
77
81
86
100
120
125
145
175
222!!!
 
 
Current Location: with sore arms
Current Mood: accomplished
 
 
vazor222
21 December 2008 @ 01:51 am
So I was listening to an audio book (on my extra fun extra long commutes through the snow) and one character in the book is a nazi anti-bourguoise liberalist which made me think about that high school video "The Wave" and how fascist groups can come into power and how it affects people. Then I was thinking about my job and how programmers, including game programmers, have to go through a rigorous set of specific actions (programming language and syntax) in order to function within the group (create a working software program), and how that might be compared to the fascist/cultist/elitist effects brought on by strict obedience and militant demands described in the aforementioned movie. There is always a running gag about how programmers consider themselves better than everyone else all the time (Code Monkey, et al). Well, perhaps this helps explain it a little.

In other news, if you park in the wrong place at a friend's house, be prepared to pay a $220 or more fee to get your car back... >_
 
 
Current Mood: angry
 
 
vazor222
17 December 2008 @ 10:29 pm
Random link time. You can find this by googling vazor222 ebay but I was asked to post it here so I did. My old co-workers decided to have a laugh and posted some of my old GDC stuff on ebay. Go bid quick it's only got a few days left! XD

http://cgi.ebay.com/Josh-Jones-(Vazor)-memorabilia.-John-Romero-Autograph!_W0QQitemZ200288915351QQcmdZViewItemQQimsxZ20081216?IMSfp=TL081216113001r18906


Those of you who have been to GDC should find this amusing, but I'm actually sending it out to support a good cause. The add revenue goes to support Child's Play, so go take a look and tell me if you beat my (for some reason it didn't post) high score of 1,750. :)

http://www.internet-superstars.com/games/GCG/
 
 
Current Mood: tired
 
 
 
 

Advertisement

Customize