It seems that you're using an outdated browser. Some things may not work as they should (or don't work at all).
We suggest you upgrade newer and better browser like: Chrome, Firefox, Internet Explorer or Opera

×
What if you could change anything?

<span class="bold">else Heart.Break()</span>, a peculiar mix of hacking, leisure, and adventure, is available now for Windows, Mac OS X, and Linux--DRM-free on GOG.com with a 30% launch discount.

A premise - you can change anything, down to the very atoms of the world. A query - what would you change? An answer - all the little things...
A new home, new place, and a town where atoms have been replaced by bits. It's a good thing that you're a bit of a programmer. So get out there, friend. Get to know the town and its people, with its little nooks and crannies, playgrounds and cafes. Take it slow, play it cool, reprogram a billboard on your way home so that it says "poop", no biggie, whatever. The world is your oyster, and you have all the time to soak it up. else Heart.Break() is a difficult game to truly nail down, but in offering everything from a deep and realistic hacking sim (no previous experience required), a day-to-day life simulator, and an adventure game, it quickly becomes one of the most curious gaming concepts this year.

<span class="bold">else Heart.Break()</span> is available now, DRM-free on GOG.com. The 30% launch discount will last until Thursday, October 1, 2:59 PM GMT.

Stream watch:

Want to see the game live? <B>Outstar will be showing off the title at Twitch.tv/GOGcom on Tuesday, September 29th, at 8pm GMT / 9pm BST / 10pm CEST / 4pm EDT / 1pm PDT in our all-new InDev release show. Tune in!
Yo! For those who want to read a lenghty and insightful article about the game (not a review), take a look at this:
"How else Heart.Break() turns players into coders "
http://gamasutra.com/view/news/254555/How_else_HeartBreak_turns_players_into_coders.php
Awesome concept but big challenge to make it a good game.

Is the reprogrammability fun and creative or just tedious, boring and repetitive?
Do actions really matter and in what way or is there just an uninteresting back story buried somewhere?

So many things can go wrong and who knows how good the game really is, but the concept - I like it a lot.

Wishlisted.


avatar
Vestin: ..."Is the value?"...
In everyday language probably noone would say such a sentence, I guess?

Everyday language would be: While wallet is still full, go shopping, otherwise wait until wallet is full again.
Post edited September 25, 2015 by Trilarion
avatar
shmerl: Amazing concept for a game.

I liked this part:

Instead of rigid puzzles you will learn (with the help from other characters in the game) how the reality of the game can be changed through programming and how any problem can be solved in whatever way you find suitable.
avatar
shmerl: Sounds very much like Aaron Swartz!
avatar
vicklemos: Totally unexpected release. Artsy, so cool..!
But what's with the () ? What's it supposed to be, a coffee bean?! :D
avatar
shmerl: It's a function syntax which encloses parameters. Same as in math let's say you can write cos(x+y). cos is a function, and () enclose the parameter. I this case it's a function with no parameters - i.e. a function which does something (in this case - "break") and doesn't take any input.

Dot after Heart (and before Break) is a syntax which indicates that it's a method, i.e. a function which belongs to an object. See [url=https://en.wikipedia.org/wiki/Method_(computer_programming)]https://en.wikipedia.org/wiki/Method_(computer_programming)[/url].
WOW WOW DUDE
I'm like this now, WOW
Easy man, I'm used to change diapers, take the dog for a walk, bake a cake, not code :P
I'm sometimes feel I'm so dumb nowadays that I can't simply whistle and clap hands at the same time, and you gimme this ton of words... I... I... I'm like "wut?" :P

Jokes aside, thanks, shmerl!
ps: I see what you did there....
Attachments:
huebrrrr.png (247 Kb)
avatar
vicklemos: Jokes aside, thanks, shmerl!
ps: I see what you did there....
;)
avatar
mrkgnao: Apparently, and sadly for me, we are in the age where object-oriented notation is the default.
To me, on the other hand, Object Oriented Programming is an implementation of a 2500 years old specification :3. Not to mention all the hubbub about ontologies in IT...

avatar
Vestin: ..."Is the value?"...
avatar
Trilarion: In everyday language probably noone would say such a sentence, I guess?

Everyday language would be: While wallet is still full, go shopping, otherwise wait until wallet is full again.
It know. My intuitions also didn't fit practice, so I've changed intuitions (at least locally).
Iterating over a set in Python was the best. I was trying to figure out whether it would be something like "while(!set.eof)" or "while(!set.dirty)" or something... Nope - "while(set)". "What do you mean 'while set'? OK, so I go in, iterate... How will I know when NOT set?", and then it hit me "Oh, when it is no longer set, I WILL know...". By the same token, it could be "while(wallet)", and I'd still nod my head. The moment you reach into the wallet and find out that you've... ummm... iterated over every last bit of money inside, you'd probably realize "No longer wallet :(" too. Then again, if it's Python, then removing items from a container you're iterating over doesn't really work, so it's probably less destructive of an idea than I'm seemingly implying...
avatar
mrkgnao: Apparently, and sadly for me, we are in the age where object-oriented notation is the default.
avatar
Vestin: To me, on the other hand, Object Oriented Programming is an implementation of a 2500 years old specification :3. Not to mention all the hubbub about ontologies in IT...

avatar
Trilarion: In everyday language probably noone would say such a sentence, I guess?

Everyday language would be: While wallet is still full, go shopping, otherwise wait until wallet is full again.
avatar
Vestin: It know. My intuitions also didn't fit practice, so I've changed intuitions (at least locally).
Iterating over a set in Python was the best. I was trying to figure out whether it would be something like "while(!set.eof)" or "while(!set.dirty)" or something... Nope - "while(set)". "What do you mean 'while set'? OK, so I go in, iterate... How will I know when NOT set?", and then it hit me "Oh, when it is no longer set, I WILL know...". By the same token, it could be "while(wallet)", and I'd still nod my head. The moment you reach into the wallet and find out that you've... ummm... iterated over every last bit of money inside, you'd probably realize "No longer wallet :(" too. Then again, if it's Python, then removing items from a container you're iterating over doesn't really work, so it's probably less destructive of an idea than I'm seemingly implying...
In Python that should probably be "while money in wallet" because wallet is a container that may or may not have money in it, and even if no money is in the wallet "wallet" itself still amounts to "True".

Or, easier and rather than keeping track of each and every "money" item, "while wallet['money']>0" or "while wallet.money>0" depending on whether wallet is treated as a dictionary or an object (>0, because <0 also amounts to True, and you should probably make sure you have at least 0 money - rather than negative money - in the wallet).
Post edited September 25, 2015 by Maighstir
avatar
mrkgnao: This game's title makes me feel old.
Apparently, and sadly for me, we are in the age where object-oriented notation is the default.
I guess twenty years ago it would have been called "else breakHeart()" or some such.
avatar
Maighstir: Or "else heart=break(heart)", if avoiding global variables.
More likely "else heart = breakOrgan(heart)", for break is a reserved keyword.
avatar
Maighstir: Or "else heart=break(heart)", if avoiding global variables.
avatar
mrkgnao: More likely "else heart = breakOrgan(heart)", for break is a reserved keyword.
Oh, right. Should've realised that if I'd bothered to think for five seconds.
Post edited September 25, 2015 by Maighstir
Love this thread.

Don't forget two checks before querying Wallet.contents...

wife(&wallet); // note, not treating my wife as an object

NOW you can check wallet value.

If (wallet.contents.value >0) {

if (backlog.length > MAX_VALUE) { } // yeah you check, but...

purchaseGame(wallet.contents)

}
avatar
BoxOfSnoo: Love this thread.

Don't forget two checks before querying Wallet.contents...

wife(&wallet); // note, not treating my wife as an object

NOW you can check wallet value.

If (wallet.contents.value >0) {

if (backlog.length > MAX_VALUE) { } // yeah you check, but...

purchaseGame(wallet.contents)

}
Though one shouldn't solely check if wallet.contents.value>0, but also if wallet.contents.value>=game.price as you can't buy the game if you have less money than its price.
avatar
Maighstir: In Python that should probably be "while money in wallet" because wallet is a container that may or may not have money in it, and even if no money is in the wallet "wallet" itself still amounts to "True".
See, I was also of the school of thought that "if it's not zero, it's True". I also figured that it doesn't make sense. It's not about the SET, it's about the elements inside it. Yes, all of that makes sense in principle. There's just one problem - the code actually works.
Go ahead, try this:
"sun_set = set()
sun_set.add('Sun')
sun_set.add('Setting of the Sun')
sun_set.add('Twilight')
while sun_set:
----print(sun_set.pop())"

If you do "for note in wallet", you won't actually be able to take money out of the wallet. Can't remove from a set you're iterating over. In that case - what do you do when you want to look at each item inside the wallet, and then decide whether to remove it from the wallet or not? Apparently, if you just want to take a random element from a set in Python, you do a foreach loop and immediately break. I shit you not.
"for money in wallet:
----blah(money)
----break"
Want to go through each and every element separately and then discard it?
"while wallet:
----for money in wallet:
--------blah(money)
--------wallet -= money
--------break"
It's SO ugly x_x... It makes no sense... but it works in practice.
I would know. I just had a program with that sort of loop terminate after THREE DAYS.

avatar
BoxOfSnoo: wife(&wallet); // note, not treating my wife as an object
Wait... No! You're passing the wallet as a reference instead of a value! Now wife can modify the contents of the wallet D:!
Post edited September 25, 2015 by Vestin
avatar
Vestin: Wait... No! You're passing the wallet as a reference instead of a value! Now wife can modify the contents of the wallet D:!
May be it's an immutable reference ;). In Rust they are immutable by default.
avatar
BoxOfSnoo: Love this thread.

Don't forget two checks before querying Wallet.contents...

wife(&wallet); // note, not treating my wife as an object

NOW you can check wallet value.

If (wallet.contents.value >0) {

if (backlog.length > MAX_VALUE) { } // yeah you check, but...

purchaseGame(wallet.contents)

}
avatar
Maighstir: Though one shouldn't solely check if wallet.contents.value>0, but also if wallet.contents.value>=game.price as you can't buy the game if you have less money than its price.
I presumed the purchaseGame() function has checks so it will fail if insufficient funds are passed in...

What I should have written was:

//if (askWife(gamePurchase)) {
purchaseGame(wallet.contents);
//}

avatar
BoxOfSnoo: wife(&wallet); // note, not treating my wife as an object
avatar
Vestin: Wait... No! You're passing the wallet as a reference instead of a value! Now wife can modify the contents of the wallet D:!
Yeah, we all know it happens :)
Post edited September 25, 2015 by BoxOfSnoo
avatar
Vestin: Wait... No! You're passing the wallet as a reference instead of a value! Now wife can modify the contents of the wallet D:!
avatar
BoxOfSnoo: Yeah, we all know it happens :)
It depends... Sometimes you get a NullPointerException. Maybe polymorphism would be in order? "Spouse" would be more general. "If (spouse)" should also be performed...
Even this code, of course, would have its edge cases. What if you're a polygamist? We'd need a vector of spouses...
Following up on

avatar
VanishedOne: Given that Break evidently isn't a reserved keyword, maybe it's a functional language.

module Heart where

data Heart a = Break a | Throb deriving Eq

import Heart
import Control.Monad

x = if False then Heart.Throb else Heart.Break()

main = when (x == Heart.Break()) (putStrLn "Heartbreaking...")
Post edited September 25, 2015 by VanishedOne