I was working on my new game today, little tower defense game in python. I'm working everything up from scratch because it's grid based and needs a pathfinder, a real AI and is quite different to all the projects I have done before. Anyhow, I've got a first pass of a class hierarchy with a level class that contains a map class that responsible for generating paths; I've got a base gameobject class, and an AI class, and projectile classes etc etc . It's all animating and looking good. Then this afternoon I decided I needed to start generating paths for the AI's. An AI instance knows when it needs a path, but how does it communicate with the map instance that generates paths? Well my first response was to create an event / message system. The AI generates an event which is processed at the top levels of the game and is passed down to the map instance which generates the path and hands it to the AI. So I make a event manager class, and an event class, and then have other classes start registering interest in certain types of events and blar blar balr..when all of the sudden I ask myself... How is knowing what message to call any different to knowing what global function to call to return a path? Seriously, how is a global function that assumes the existence of my map instance any worse than a complicated event system. It's a lot better in many ways because I don't need to search around looking for where the event might be handled, don't need the overhead and extra paperwork generating new message classes etc etc.. Here I am trying to bootstrap a game and I'm doing a bunch of leg work to give the system more structure and more abstraction than I imagine I'll ever need. Nobody is going to read this code but me. I've been seriously thinking lately of dropping the whole "object-orented" thing. I mean, what's it actually getting me? I few years ago I made a fairly complex game in blitz 3d. (before blitz max). It doesn't even have object oriented features like classes and inheritance. It was strange at first but it was a nice change. Lots of lists of data structures you just call functions on. Any of you guys thinking like this as well? Am I going crazy?