ComputerWorld Part 2

LovePosted by Eskil Sat, December 18, 2010 00:24:55

Betray is an easy to use portability library that lets you build single window OpenGL applications. It can be compared to GLUT or SDL, but has a more streamlined interface and supports a few more things. A very important feature of Betray is that it lets you write a single application that supports many different modes of input and outputs. The idea is not just to make it easy for application developers to write portable applications, but also for people who either make, or have access to special hardware to write their own versions of betray, so that all existing betray applications will support the hardware. It makes it much easier for hardware or interface developers, to test out their hardware with existing software. Closed source applications like Betray will soon be released with an Open source betray DLL so that anyone can rewrite it to work with any kind of input and output devices. The file b_test.c is a simple example program using much of the Betray API.

I invite anyone who wants to, to use, test, debug or help me to port betray to other platforms or hardwares to do so. If you are interested E-mail me at eskil at obsession dot se


While its good for Betray implementations to support as much as possible of the Betray API, this isnt always possible. A particular hardware may lack features such as pointer device of multi touch. Even if a feature is not implemented it still needs to be present in terms of API entry's, and should return reasonable default values, to make it easier to support. By using the functions betray_support_context and betray_support_functionality you can ask the implementation functionality is active in the implementation.

To initialize betray and create a screen you call the following:

void betray_init(BContextType context_type, int argc, char **argv, uint window_size_x, uint window_size_y, boolean window_fullscreen, char *name);

Currently Betray only supports OpenGL contexts, but in the future it may be extended to support other rendering contexts too. Once betray has been initialized you can use the functions, betray_action_func_set to give betray a function pointer to the action function that will act as the programs main loop, then call betray_launch_main_loop to start the applications main loop. The Main loop function will be called with a pointer to the structure BInputState that contains useful input state. In this structure you will also find the member "mode" that can be set to either, BAM_DRAW, BAM_EVENT, or BAM_MAIN. This member indicates why the main loop has been called, to either redraw the screen, handle input or compute (the compute call is where time should be advanced, and will be called even if the program has been minimized and is therefor useful to keep things like network connections alive that are not dependent on either being displayed or requires input form the user). The reason for having a single entry point for all three is that you can build nice libraries of interface functions that can handle all 3 modes. Consider this function:

boolean my_button(BInputState *input, float pos_x, float pos_y, char *name)

This function can now handle both drawing and handling input, independently, and the user only have to add it once to the code base, even if it gets called multiple times for different reasons.


While betray_init immediately gets you a screen to draw to, you can at any time modify the screen mode using betray_screen_mode_set. By setting x_size and/or y_size to zero in either betray_screen_mode_set or betray_init betray will revert to the size of the desktop. To find out the current size and state of the draw surface you can call betray_screen_mode_get that will also return the aspect ratio of the screen. In order to support head tracking and stereoscopic (3D) programs should use betray_view_vantage betray_view_direction to retrieve the position of the eye in relation to the screen and any camera rotations or movements.

Betray has a few OpenGL specific functions like betray_gl_proc_address_get to get access to extension function pointers, and betray_gl_context_update_func_set where the user can give betray a function pointer that will be called if the current OpenGL state is lost (this usually happens when screen modes are changed). To make it possible for a Betray implementation to render the entire application to a texture using FBOs, the function betray_gl_screen_fbo_get exists. When ever the betray application is using FBOs and would like to reset the draw target to 0 (the screen) it should instead reset it to the value returned by betray_gl_screen_fbo_get.


The input is divided in to 3 different category's, pointers, axis and buttons and Betray can support any number of each. Pointers are 2 dimensional screen pointers with one or more buttons. You can read out their position, delta position and the position of their last primary click. The later can be very useful when implementing buttons since a button can check both if a pointer is on a button and if it was at the tim of the click, and that means buttons does not need to store state. Using betray_set_mouse_warp the application can hide and continually warp the mouse pointer to the center of the screen in order to avoiding hitting the edges, something very useful for first person mouse controls. Buttons on pointing devices show both their current state and the state they were in the last frame, and it is therefore possible to know if the button is being pressed, released or held. For all buttons you can use the betray_button_get_up_down to store your own state for any button you want. If the user is expected to type in text, it is good to call betray_button_keyboard to enable betray to show a on-screen keyboard on platforms without physical keyboards. Axis are essential any 1, 2 or 3 dimensional input such as joysticks, pedals, accelerometers and so on.


Betray also has a API for 3D sounds that lets you load sounds (using betray_audio_sound_create), set a listener (using betray_audio_listener) and then play the sounds (using betray_audio_sound_play). Once a sound has been started it can be modified using betray_audio_sound_set and betray_audio_sound_stop.


To help betray applications better integrate with the operating system it also supports accessing text strings from the clipboard, and the ability to launch open and save file requesters.


Finally betray supports basic thread functionality that lets you create threads and create, lock and unlock thread safe locks.


Betray has just been rewritten and I have yet to port over Love or any other applications to the new API. Seduce will be the first library that will be ported over to the new version of betray. At the moment Betray is only implemented for Win32, but other operating systems will soon follow. I hope to get as many developers as possible to use and contribute to Betray so that we can make multi platform development easier for everyone.

The library can be downloaded from
Or you can view the betray.h file at

  • Comments(5)//

ComputerWorld Part 1

LovePosted by Eskil Sat, November 20, 2010 00:37:39
Lately I have found that there has been more interest in my code base and all my applications. Over the years I have ammased a great deal of code to make game and application develoment far easier, like asset management, portable platform code, text rendering, file storage, networking, performance messurment and so on. I realize this will be fairly geeky stuff for many readers, but as there are some people who are interested in just seeing how I do things and others that are interested in using some libaries, I will start publishing a series of guides to the different modules as update them. These posts will then eventiualy end up in a revamed developer section of this site.


Forge is a set of very basic functions and definitions that are used in all Quel solaar applications. They define such basics as "TRUE" "FALSE" and "uint". Beyond uint it also defines a number of bit specific types.

Forge is assumed to be included in to all files of a project and that makes it very useful for debuging purposes. By defining F_MEMORY_DEBUG macros will replace malloc, free and realloc with debug funtions that will keep track of each allocaton, and then by calling f_debug_mem_print Forge will print out a list of all file names and lines where allocations have been made, how many allocations have been made, freed, and the ammount of memory taken up by each allocator. This is obviusly a very useful tool for tracking down memory leaks. The memory debug system also does some other useful things like over allocating every allocation with 1024 bytes and filling it with a "magic number", it then checks that this portion of the allocation remins untouched to spot if any code inadervenly over writes its allocaion. Some modern operating systems (Like Linux) clears all memory beeing alocated to zeroes, to protect against programs that migh try to allocate large chunks of memory in order to try to find passwords and other sencitive data left by applcations that previously occupied the memory. This can be a bit unfortunate, since it likely to hide some programmer misstakes like failiure to initialize values and pointers to zero. Even if you are running on an operating system that does clear the memory, this is a bug since they usualy dont clear memory that has been freed by the same application as the one allocating it. Therfore the memoy debug system in Forge clears the memory with non NULL grabage to make these misstake easier to find.

The functions f_rand, frandn and frandi are fast and resonably good functions for random number generation. They are based on formulas recomended by mataematisians for use in computer gaphis such as stochastic sampeling.

Forge contains a range of basing vector math functionality that are very similar to many of he funtions found in shading languages. Each have diffent versions for 2 or 3 components and form single and double pressision floating point units. Forge has a long range of generated functions (see f_matrix_operations.c for the code used to generate the code) for constructing 4*4 martices. To construct the 3*3 rotational matrix, you need two vectors (the third can be derived using a cross product), and one of thouse will be dominant if the two vectors arent perfectly perpendicular. There is therefor many ways of constructing a matric, since one of the X, Y and Z vectors can be the dominant and the secondary again can be any of the 3 vectors. Forge therefor defines all possible combinations form both single and double pressission floatiing point values. If the origo argument of any of theese functions is NULL the origo is assumed to be at 0, 0, 0.

f_spline, f_spline2d and f_spline3d are simple b-spline implementations, and f_wiggle, f_wiggel3d and f_wiggel3d creates infinit randomly generated curves with a 3rd degree of continuity ther motion can be described as similar to a wasp flying around a light source. They are very useful for animation and diffent types of noise funtions. Speeking of noise, there is also a fairly fast implementation of Perlin noise, in one, two and three dimentions. The noise funtions are eithe of a single frequency (of one), or multiple recursive frequencies that create a fractal brownian motion.

When engaging in image prosessing it is often good to use a different colorspace then RGB and that is why Forge offers a few conversion funtions for different color spaces. HSV (Hue, Satturation and Value) is a very common color space for color picker interfaces, but has some very bad propperties from a strict color science prespective and should therfor not be used for image prosessing. XYZ is a transformed version of RGB that scales for how diffent colors have different brighness. (R=1 G=1 B=0 Equals a yellow that appears brighter then the Purpule given by R=1 G=0 B=1) Finaly "Lab" is a color space that atempts to create a color space where movement in any direction of the same distane should apperar to yeald the same amount of change in color. Lab is a prefered color space by many to do color corrections.

Almost all math functions have a single and double presision version, but what if you want to make an application that may be compiled in to both (Like Loq Airou)? Well all these funtions are defined without their "f" and "d" postfizes using macros. By default they are defined as float but by defining the symbol F_DOUBLE_PRECISION they get redefined as double. Forge also provides the type "freal" that will be defined to float or double with the same symbol.

Forge can be downloaded here:

  • Comments(11)//


LovePosted by Eskil Fri, November 12, 2010 05:26:25

My grand mother lived through two world wars, wrote 6 books, raised 2 children, got a doctorate, visited 97 countries, had tea at the white house, spoke 5 languages, was married for 70 years, and used to smuggle contraceptives to poor women in Italy using her diplomat pass.

On the surface timid, but thous who really knew her knew there was a very strong and particular mind hidden in this little girl. When my grand father first met her on a students trip he was so intimidated, that he bought every girl on the train a flower, just so that he could give her one.

Knowing her story and how much and how many times the world has changed beyond what anyone could have imagined when she was born, should make us all dare to think we can change it yet again.

At the age of 96 she looked like a tiny bird that had just hatched, and late yesterday evening she flew her way.

  • Comments(16)//

Lost in a sea of source code

LovePosted by Eskil Sun, October 10, 2010 06:24:58
I always thought that the future of video games was clear. A game should be a story that unfolds in response to actions. I assumed that everyone else thought that it was so obviously the goal. I'm starting to feel very alone in that vision.

Some are aiming to make games tell a photo-realistic story but cares very little if players are passages rather then protagonists. There is a line of thinking that goes that if only games deals with serious subject matters like alcohol abuse or immigration it will become a mature medium. Many think that games should be small little art works that we can interact with, short memes that we consume in bulk. Few people look at the level of interaction, but to me interaction, the ability to influence the world and have it respond was always the key.

In fact if we look at the level of interaction in a game like Zelda on the NES, you have more freedom and ways of interaction then in many of today's games. Why is that? If a more dynamic game is the goal, then what would be the obvious thing to make dynamic? I chose to make the environment dynamic, and it seams like a logical next step from having dynamic characters. Enter LOVE.

I think LOVE goes further then any other 3D game I know in the direction of being dynamic, and when it shines, it is the best game I have ever played, but there are three reasons why it shines so rarely.

No one has ever lived though an action film in real life. Why? because the chance that some one would end up in a car chase, a bar shootout, fall out of an airplane and find the love of his or her life with in 2 hours is just about zero. Building a world where the chance of that happening is over 50% is hard, building a system that builds a world where the chance of that happening is over 50% is orders of magnitude harder. Players have become accustomed to having a games prepare scripted sequences, and big set piece, and all the players need to do to experience them is to show up and follow along. If something happens they think it is because of a decision taken by a designer rather then as an effect of the logic of the universe. (All players are creationists...)

The second reason is that the logic of such a system also becomes so complex that its hard to communicate to the players. If a system isn't known it will be perceived as unfair. Many people was disappointed by Spore for this reason, the game did not take in to account many of the decisions players made when creating the characters because the system would have become infinitely complex if they did. Its easy to communicate that the player should place web feet on the character in order to make it swim, but it is very hard to communicate that the creature swims poorly because the webfeet are pleased in suboptimal place. So the game makes it a binary decision, webfeet or not and it doesn't matter if you put them on the head. It doesn't matter if you have managed to create some amazing cause and effect systems unless the player is aware of it.

The final problem is that the systems handling all this become so big, so complicated and so interdependent, that they become incredibly fragile. This means that I spend almost all my time looking for bugs, and for every change I make it feels like ten other things break. Let me give you an example: the artillery system. For a shell to fire loads of conditions has to be meet, like the artillery unit has to be in range, it has to avoid unfair accuracy, it has to be powered by a power line that has to be uninterrupted, something that in turn is dependent on the world geometry. With so many dependencies it is incredibly hard to keep it reliable, while at the same time allowing it to be disrupted in may ways. Yes, Artillery is suppose to be able to fail, so when it fails it is very hard to know if it does so for the right reasons.

The work of improving the two first is severely hampered by the third, and I spend almost all my time fixing things that once used to work, but for some reason no longer does. One could argue that if only I had more resources this could easily be overcome, but I actually think the opposite. Since everything is so interdependent it becomes almost impossible to work on unless you know and understand all of it.

The last few weeks Love has become substantially improved, as many things have been fixed and tweaked. It plays much more as a directed game, even if it isn't. Yet every day i ask my players "How is the game playing today", and most days something is broken. I used to think that I could work on Love forever and just add more and more stuff, but now I feel that the complexity has made it so unwieldy that it looks less and less attractive. The one thing I want to add is friendly AI, and even though I know it will add a range of new bugs I feel it is what i really wan to do.

In many ways I feel like I have reached the outer limits of what is possible, you could say I have reached the speed of light or found the end of Moore's law. At this point development will only yield diminishing returns. This doesn't bode well for the future of games, if interaction really is holy grail. The only solution, is a paradigm shift that can reduce complexity. The question is what that paradigm is.

  • Comments(23)//

Why so slow?

LovePosted by Eskil Fri, September 17, 2010 00:05:39
A while back I was invited to a private Celluloid screening of Goodfellas in LA with Producer Irwin Winkler. Afterwards someone asked what was different, making a film in the late 80s from today, and Irwin said that at one point Martin Scorsese was close to abandoning the project because they couldn't get it off the ground, so he called up Warner Brothers and asked what he needed to get the film green lit. The boss at WB said that they needed a star, so Irwin gave him his word that he would find a star, and the boss at WB green lit the film right there and then over the phone. That would never happen today.

In 1955 Lockhead Skunkworks designed and built the U2 Spy plane in 9 months on the order of the CIA. Today the development of a military aircraft takes 20-30 years. 9 years after 9/11 Ground zero still a hole. (I read that they found a antique boat a few weeks ago so that must mean they are still digging down rather then building up.) The empire state building was designed in two weeks and built in less then a year under time table and budget.

You can argue that things have gotten more complex with time, but the Empire state building was the worlds tallest building for more then 40 years and had a plane crash in to it without the people on the floors above even notice it, and the U2 plane remains in operation today, and is still the highest flying jet, and they where built without the aid of computers, mostly by hand. The problem isn't that we cant build things, that we don't have engineers, know-how, materials or even funds, the problem is that we cant take decisions.

One of the great benefits of a capitalism, I'm being told, is that it requires a lot less bureaucracy then a state runned system in order to take decisions. The thought is that it gives people with the best ideas the power to take the decisions rather then distributing the power to hordes of bureaucrats who needs to reach consensus. By letting thousands of people go off in different bold directions, we will produce new things that will benefit all, ideas that emanate from the vision of one rather then the consensus of many.

Yet, no one person is in power any more. The colorful industrialists of the past has given way for the gray, indistinguishable goo that is "the market". The market has no vision, no strategy, no gumption, it just slowly consumes all power. It used to be that people with money had power, now people with money are just flowing in the current of the market. Getting rich from creating a company used to mean power, now getting rich means an IPO and that means your company is now controlled by the market rather then you. The visionary have given way to fund managers looking to squeeze out another quarter point in the next quarter rather then building a empire to stand the test of time, They unleash an army of middle managers each looking for cents to save, but none of them with a vision that reaches beyond their cubicle. The pyramided may be a wonder of the world, but our economists are unable to justify building them so our time is unable to replicate a feat of four thousand years ago.

If we define bureaucracy as the task or organizing the allocation of goods and services, then every management, accounting, sales, logistics, billing, legal, payroll, PR, and marketing department are nothing by bureaucracy. The entire financial sector, every bank, every economist, bean counter or corporate lawyer are essentially bureaucracy. By those standards we have a system consumed by bureaucracy. Bureaucracy isn't necessarily bad, but it becomes bad when the bureaucracy itself becomes more important then the real world it is trying to organize. When presidents and prime ministers, flinch at the smallest market movement, you know our bureaucracy has consumed all power. Don't you dare tax carbon or add a bank levy, no matter what your voters (or common scene, for that matter) says.

My guess is that when the guy from CIA left the room at skunkworks, the first thing the engineers did was to walk up to a black board and started drawing a plane, where the wings should go, the engine, and the cockpit. Today we would have started with a schedule and a budget, a Gantt chart and then moved on to a few concepts explorations, a simulation, and then a few technology demonstrators... It would have taken years before they would let an engineer actually build something. In fact much of our technology innovation in terms of productivity like, simulation, spreadsheets, wikis, visualization and presentation software are there not to do the job but to help us take a decision on what to do.

Three years ago China bought the right to build Japanese bullet trains. At the time they had no high speed rails, now they have more kilometers of high speed rail then the rest of the world combined, and the trains have evolved in to a fully Chinese design. They did put 10.000 engineers on it though. That may sound a lot but given the size of the population, unemployed population for that matter, in most countries its nothing. (Would it surprise you to know that most of the top people in the Communist party are engineers?). While we are hoping that a financially conservative market will sort things out eventuality, they are playing Sim City, plotting out rail roads, police stations and ports. If you are building power stations in Sim City, you don't just build one, you build many. Why wait for the market to ask for them, when you know they will be needed eventually, so why not just keep clicking on more lots? Economically trains are almost always a no brainer, there is no better way to stimulate the economy in a city then running a train through it, so why aren't we all building trains?

The Soviet union dint fall because their flavor of Communism didn't solve any problems, but because it dint try to fix its flaws. They had no unemployment, no one went hungry, everyone had housing and health care. That's a tall feat that few countries can bolster, but that didn't matter because they didn't have freedom of speech, individual rights, democracy, and their system did not promote innovation. The people at the top got so good at navigating the bureaucracy that they fearsly defended it from any reform and without constant evolution the system was doomed. The decision makers became blockers on any decisions. They where all shocked because they had talked themselves in to believing that the system that served them well was infallible. That's a lesson worth learning because when I hear most economist speak about our economy they talk about it as if it was a inevitable force of nature and not a construct made by man.

And by the way, Martin Scorsese called up Robert DeNiro, who said yes over the phone that that is how they got their star.

  • Comments(14)//

My Civic Cents

LovePosted by Eskil Sun, September 12, 2010 22:32:21
In a weeks time Swedes will go to the polls to elect a new parliament, and all parties are currently doing their best presenting a case for why we should vote for them. The discussion is predictably centered on economical issues; higher or lower taxes on this or that, and more or less money to this and that. The pledges roughly follows the usual left-right arguments.

What really impacts society? I don't think Sweden will look much different in the future if the taxes go up or down a few percentages either way. No, major changes that impact peoples lives are structural changes that come from new ways of thinking, like the Swedish model, "offentlighetsprincipen" or "allemansr├Ątten". They don't have to be radical shifts, they can be small, inexpensive changes that have big effects. I hear very few of those, so as a good democratic citizen (and professional society builder), I thought I should offer up my own ideas, for any party, left or right to adopt.

Comprehensive emergency take over laws.

The economic crisis has shown that, while politicians hate to admit it, sometimes the state is forced to go in and take over private banks in order to secure financial stability. Everybody hates it, but when things are going down fast, it's the right thing to do. The problem is that everybody hates it so much, and are so adamant that they will NEVER let it happen, that no one ever plans for it. Governments end up giving away massive amounts of money, in an uncontrolled and haphazard manner, just because there is no legal framework and time is too short to truly consider long-term implications, you end up just giving away money. Isn't it time to write proper bankruptcy laws that allows the state to take over vital private infrastructure in an emergency? Yes, we talk a lot about banks that are too big to fail, but our society is complex enough that we need the same type of laws for other areas. In Sweden mailmen have limited strike rights simply because, if the mail stops arriving, no bills get delivered and the entire society is affected. Shouldn't we have the same protection against disruptions of major telecommunications companies, or other vital utilities?

Lets get rid of cars in inner cities.

Stockholm is my home and it happens to be one of the most beautiful cities in the world (you should come!). The city was built about 650 years before the first cars started popping up, so it wasn't built with them in mind (and as someone who has been in LA I'm very happy about that). The streets are too narrow, there is no parking and since the city is so condensed, bikes or even walking is not just more healthy but also convenient. The fundamental problem with cars is that they take up so much space that in order to fit them in to a city you need to space out all the houses. However spacing out the houses means that the city becomes too large to be navigated by foot, so more people take the car, and you are back to square one. So my suggestion is to just dump cars altogether within the inner city limits, and only allow transport of goods, emergency vehicles and the disabled to use motor vehicles.

This is one of those suggestions that people would say is completely unrealistic, but just like the law making it illegal to smoke in restaurants and road tarrifs (that people when bonkers over before it happened), once you actually implement it most people will realize that a city without cars, would be wonderful. They would notice how quiet the city would become, the open spaces, and soon we could plant lanes of trees where once cars dominated. I think Stockholm would become a model city that people from around the world would come to admire. If you think a city like Stockholm can't live without cars, remember that Stockholm did just fine with out cars for 650 years.

Let the addicts sleep in.

Sweden has a state run monopoly on selling alcohol. Special stores ("systemet") dedicated only for selling alcohol, paired with very high taxes has been very successful in curbing alcohol abuse, but is also an infringement on peoples liberties. Most people can handle alcohol just fine and to them, this system is a major inconvenience that is fairly pointless. On the other hand, alcohol is involved in about 80% of all violent crimes, a huge portion of traffic fatalities, and is responsible for the abuse and neglect of tens of thousands of children. The problem of course is how do you discern the people who can handle alcohol from the ones who can't?While many in sweden argues whether the alcohol stores should be open on Saturdays or not, I can tell you that the people waiting outside 10AM Monday morning is a very good sample of the people whose alcohol intake should be restricted (I used to pass one by on the way to work before.). No one in that line needs to buy alcohol on a Monday, or even before noon any day of the week. How about we open a little later and let everyone sleep in?

Self imposed energy crisis.

No one really knows when peak oil will happen, some say in fifty years, some in ten, and yet others say it has already happened. If and when it happens it will be a major problem for the developed world. No one knows where the oil price will be in a year or ten, and if you did you could make a lot of money, because the problem isn't just if it will happen but that no one knows when it will happen. As a general strategy we need to stem our reliance on fossil fuel for economical, security and perhaps most of all environmental reasons. While others try to secure the access to fossil fuel, I suggest we do the opposite, we create our own energy crisis. If we would impose a tax on fossil fuel, or imported power derived from fossil fuel that would guarantee a rising oil price at a predictable rate we could in an orderly way transfer to a low carbon economy. If investors could predict high oil prices it would become far safer and more attractive to invest in alternative energy production and energy savings. Would this negatively affect the economy? Yes, but only in the short term. In the long term we would become world leaders in alternative energy, and then when inevitably uncontrollable factors create a much worse energy crisis for everyone else, we will be years ahead, and be able to sell our technology.

Tax breaks for the non-existent.

Every tax break you give cost money. You want to promote new endeavors, but you don't want to show favoritism. Some people for instance argue that game production in Sweden should receive tax breaks. I can't really see why game production is any more important than any other industry and since Swedish game development is so successful, why does it need special support? Any time you start to give tax breaks to any specific industry it's an invitation for corruption since all industries will vie for special treatment. My suggestion is instead to support industries that doesn't exist. Nano machines, space tourism, wave energy, airship transport, none of these industries exist in Sweden, but they could, so why don't we give them a huge tax break for the next 10-20 years? It's a tax that won't cost us anything, since we aren't gathering any of it anyway. It just means that if somebody wants to start companies doing these things, Sweden would be a good place to go. Ideally you would put together a panel of people who each year would propose a few new areas of possible future development to be exempt from tax.

Let's bring back money.

I think it's fairly practical that the government is in charge of printing money. A commonly agreed design that a single entity has the monopoly on creating and that is free to use, creates trust, and promotes business. However money in the form of bills and coins have a number of limitations; they are expensive to handle, they break easily, and you can't perform transactions over the phone or the internet. Therefore I suggest there is a government backed digital form of out currency. A government issued debit card of some sort. I find it amazing that if you raise VAT with a point or two people go bonkers, but they don't mind paying substantially more to use their plastic cards. I find it hard to think of something to promote business the making transactions free.

Free WiFi.

Do I need to say much more? If rail and roads were the greatest stimulus of the last century, surly free internet access over all major cities must be this century's equivalent.

  • Comments(7)//

To boldly go... your own way

LovePosted by Eskil Tue, September 07, 2010 19:00:30
After an amazing weekend, some from morning til night weeks of work following four weeks of exhausting traveling, I feel happy if somewhat spent. I want to thank everyone who participated, who I spoke to over teamspeak and who game me feedback an bug reports this weekend.

There is however one thing I would like to address before I stretch myself out; usability. Many players who play Love this weekend became very confused about what they should do, how to play and how things work.

In my mind, Love is a very logical game, its just not the same logic as you will find in other games. I have always considered there to be a big difference between user friendly and beginner friendly, and while Love is a very user friendly game, it is not a very beginner friendly game. There are a number of things I could do to make the game more beginner friendly, but I don't think they would matter too much in the grand scheme of things without either vastly simplifying the game, or making it much more similar to other games.

Love was designed as an experiment, as a project about pushing the envelope of what is possible, and to explore new designs that has never been tried before. It was also designed for my own personal enjoyment and on all these accounts it has been a huge success. But it worries me that I have overestimated people willingness to explore something new. It may not matter too much to Love, since the costs are low, but it does not inspire others to try to innovate and create more open ended games that are truly interactive rather then funneling you along, something I think we really need in gaming.

Ive been trying to "Fix" Love lately, but this weekend a few interesting things happened, I added some thing, and after listening to the community defend the game to those who wanted it to change, I had this strong feeling that Love needs to be Love. Yes I dabbled with progression, and I have tried to add things to make it easier, but in the end I dropped most of the progression and realized that I like some things should remain a mystery. The thing that really made me feel i hit on something special, was the possibility of friendly relations with the Tribes, something that pushes it even further in to uncharted territory.

Does that mean that I think that people who think that the game is confusing or difficult are wrong? No, not at all, If that is your reaction, that is your reaction and there is nothing wrong with that, but rather then trying to change to accommodate, perhaps Love should be what it is, and instead we should try to explain what it is better.

That's a nice thought for life in general, the idea of being yourself, and work to be better understood, rather then trying to change to be like everybody else. What do you think?

  • Comments(15)//

You have been invited

LovePosted by Eskil Fri, September 03, 2010 20:39:29
This weekend Love will be free to play for anyone who wants to. All you need to do is download the client(42Mb), un-zip it start love.exe . Then just click "play for free" and you are in. If you are having technical problem check out this page.

The key to playing love is taking your time, and to talk to other players, preferably using (you can download the client at "Love in verses" and "Gaming Love" are two good fan sites that has lots of good info.

This release is not only significant because of the free weekend, but the fact that it contains some cool new gameplay. I have added some new objects that the different tribes hold very dear, and they will therefor greatly influence how they treat you. Thats the thing about Love, it keeps evolving so for the proper Love experience I will be working this weekend to update and make changes to the game so expect a few releases. If you get disconnected wait a few minutes and then try reconnecting since that was probably me updating the server. To keep track of my work check out the twitter feed. I have no ideas how many players to expect this weekend but if i need to I will try to set up enough servers. If you are having trouble getting in, wait a while and try again.

I will be on TeamSpeek all my waking hours, so come say hello or if you are shy why not send me an e-mail? Love is constantly changing and updating because of user requests so please share your thoughts with me. Finally if you would like to support the continued development of Love, please consider becoming a subscriber, or buy a few vouchers for more play time.

  • Comments(19)//
« PreviousNext »