Merge pull request #1 from doublespeakgames/master

Update fork to latest head
This commit is contained in:
Esa Koskinen
2017-01-20 11:27:24 +02:00
committed by GitHub
43 changed files with 32183 additions and 24659 deletions
+1
View File
@@ -2,3 +2,4 @@
*.TODO *.TODO
*.mo *.mo
*.swp *.swp
.idea
-17
View File
@@ -1,17 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<projectDescription>
<name>A Dark Room</name>
<comment></comment>
<projects>
</projects>
<buildSpec>
<buildCommand>
<name>org.eclipse.wst.jsdt.core.javascriptValidator</name>
<arguments>
</arguments>
</buildCommand>
</buildSpec>
<natures>
<nature>org.eclipse.wst.jsdt.core.jsNature</nature>
</natures>
</projectDescription>
+3 -3
View File
@@ -563,12 +563,12 @@ body.noMask #description {
#lootButtons { #lootButtons {
padding-bottom: 0px !important; padding-bottom: 0px !important;
margin: 20px 0 0 5px; margin: 20px 0 5px 0;
position: relative; position: relative;
} }
#lootButtons:before { #lootButtons:before {
content: "take:"; content: attr(data-legend);
position: absolute; position: absolute;
top: -25px; top: -25px;
left: 0px; left: 0px;
@@ -586,7 +586,7 @@ body.noMask #description {
} }
#dropMenu:before { #dropMenu:before {
content: "drop:"; content: attr(data-legend);
border-bottom: 1px solid black; border-bottom: 1px solid black;
display: block; display: block;
margin-bottom: 5px; margin-bottom: 5px;
BIN
View File
Binary file not shown.
+1 -1
View File
File diff suppressed because one or more lines are too long
+50 -51
View File
@@ -7,8 +7,8 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: PROJECT VERSION\n" "Project-Id-Version: PROJECT VERSION\n"
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
"POT-Creation-Date: 2015-08-18 21:53+0200\n" "POT-Creation-Date: 2016-02-15 02:03+0100\n"
"PO-Revision-Date: 2015-08-18 22:09+0200\n" "PO-Revision-Date: 2016-02-15 02:03+0100\n"
"Last-Translator: Bernd Dorer <bdorer@mailbox.org>\n" "Last-Translator: Bernd Dorer <bdorer@mailbox.org>\n"
"Language-Team: German\n" "Language-Team: German\n"
"Language: de\n" "Language: de\n"
@@ -17,7 +17,7 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"Generated-By: Babel 1.3\n" "Generated-By: Babel 1.3\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Generator: Poedit 1.8.4\n" "X-Generator: Poedit 1.7.6\n"
"X-Poedit-SourceCharset: UTF-8\n" "X-Poedit-SourceCharset: UTF-8\n"
"X-Poedit-Basepath: ../..\n" "X-Poedit-Basepath: ../..\n"
"X-Poedit-SearchPath-0: .\n" "X-Poedit-SearchPath-0: .\n"
@@ -35,7 +35,7 @@ msgid "connect"
msgstr "verbinden" msgstr "verbinden"
#: script/dropbox.js:75 script/dropbox.js:107 script/dropbox.js:133 #: script/dropbox.js:75 script/dropbox.js:107 script/dropbox.js:133
#: script/dropbox.js:163 script/engine.js:285 script/engine.js:330 #: script/dropbox.js:163 script/engine.js:285 script/engine.js:331
msgid "cancel" msgid "cancel"
msgstr "abbrechen" msgstr "abbrechen"
@@ -100,7 +100,6 @@ msgid "punches do more damage"
msgstr "faustschläge verursachen mehr schaden" msgstr "faustschläge verursachen mehr schaden"
# more force # more force
#. TRANSLATORS : means with more force.
#: script/engine.js:18 #: script/engine.js:18
msgid "learned to throw punches with purpose" msgid "learned to throw punches with purpose"
msgstr "gelernt kraftvolle schläge auszuteilen" msgstr "gelernt kraftvolle schläge auszuteilen"
@@ -118,7 +117,6 @@ msgid "learned to fight quite effectively without weapons"
msgstr "gelernt effizienter ohne Waffen zu kämpfen" msgstr "gelernt effizienter ohne Waffen zu kämpfen"
# unarmed master = master of unarmed combat. # unarmed master = master of unarmed combat.
#. TRANSLATORS : master of unarmed combat
#: script/engine.js:27 #: script/engine.js:27
msgid "unarmed master" msgid "unarmed master"
msgstr "nahkampfmeister" msgstr "nahkampfmeister"
@@ -228,34 +226,34 @@ msgstr "erlange mehr gesundheit durch nahrung"
msgid "learned to make the most of food" msgid "learned to make the most of food"
msgstr "gelernt besser mit essen aus zu kommen" msgstr "gelernt besser mit essen aus zu kommen"
#: script/engine.js:138 script/engine.js:483 #: script/engine.js:138 script/space.js:450
msgid "app store."
msgstr "app store."
#: script/engine.js:144 script/engine.js:485
msgid "lights off." msgid "lights off."
msgstr "licht aus." msgstr "licht aus."
#: script/engine.js:144 script/engine.js:493 #: script/engine.js:150 script/engine.js:521
msgid "hyper." msgid "hyper."
msgstr "hyper." msgstr "hyper."
#: script/engine.js:150 script/space.js:442 #: script/engine.js:156 script/space.js:442
msgid "restart." msgid "restart."
msgstr "neu starten." msgstr "neu starten."
#: script/engine.js:156 #: script/engine.js:162
msgid "share." msgid "share."
msgstr "teilen." msgstr "teilen."
#: script/engine.js:162 #: script/engine.js:168
msgid "save." msgid "save."
msgstr "speichern." msgstr "speichern."
#: script/engine.js:171 #: script/engine.js:177
msgid "dropbox." msgid "dropbox."
msgstr "dropbox." msgstr "dropbox."
#: script/engine.js:178
msgid "app store."
msgstr "app store."
#: script/engine.js:184 #: script/engine.js:184
msgid "github." msgid "github."
msgstr "github." msgstr "github."
@@ -276,7 +274,7 @@ msgstr "oder zum wechseln von computern"
msgid "export" msgid "export"
msgstr "export" msgstr "export"
#: script/engine.js:281 script/engine.js:325 #: script/engine.js:281 script/engine.js:326
msgid "import" msgid "import"
msgstr "import" msgstr "import"
@@ -284,79 +282,88 @@ msgstr "import"
msgid "save this." msgid "save this."
msgstr "speichere das." msgstr "speichere das."
#: script/engine.js:296 #: script/engine.js:297
msgid "got it" msgid "got it"
msgstr "habe verstanden" msgstr "habe verstanden"
#: script/engine.js:304 #: script/engine.js:305
msgid "are you sure?" msgid "are you sure?"
msgstr "bist du sicher?" msgstr "bist du sicher?"
#: script/engine.js:305 #: script/engine.js:306
msgid "if the code is invalid, all data will be lost." msgid "if the code is invalid, all data will be lost."
msgstr "wenn der code nicht stimmt, werden alle informationen verloren gehen." msgstr "wenn der code nicht stimmt, werden alle informationen verloren gehen."
#: script/engine.js:306 #: script/engine.js:307
msgid "this is irreversible." msgid "this is irreversible."
msgstr "dies ist nicht umkehrbar." msgstr "dies ist nicht umkehrbar."
#: script/engine.js:310 script/engine.js:378 #: script/engine.js:311 script/engine.js:380 script/engine.js:499
msgid "yes" msgid "yes"
msgstr "ja" msgstr "ja"
#: script/engine.js:315 script/engine.js:383 #: script/engine.js:316 script/engine.js:385 script/engine.js:504
msgid "no" msgid "no"
msgstr "nein" msgstr "nein"
#: script/engine.js:321 #: script/engine.js:322
msgid "put the save code here." msgid "put the save code here."
msgstr "lege den speichercode hier ab." msgstr "lege den speichercode hier ab."
#: script/engine.js:372 #: script/engine.js:374
msgid "Restart?" msgid "Restart?"
msgstr "neu starten?" msgstr "neu starten?"
#: script/engine.js:375 #: script/engine.js:377
msgid "restart the game?" msgid "restart the game?"
msgstr "das spiel neu starten?" msgstr "das spiel neu starten?"
#: script/engine.js:406 #: script/engine.js:408
msgid "Share" msgid "Share"
msgstr "Teilen" msgstr "Teilen"
#: script/engine.js:409 #: script/engine.js:411
msgid "bring your friends." msgid "bring your friends."
msgstr "bringe deine freunde mit." msgstr "bringe deine freunde mit."
#: script/engine.js:412 #: script/engine.js:414
msgid "facebook" msgid "facebook"
msgstr "facebook" msgstr "facebook"
#: script/engine.js:419 #: script/engine.js:421
msgid "google+" msgid "google+"
msgstr "google+" msgstr "google+"
#: script/engine.js:426 #: script/engine.js:428
msgid "twitter" msgid "twitter"
msgstr "twitter" msgstr "twitter"
#: script/engine.js:433 #: script/engine.js:435
msgid "reddit" msgid "reddit"
msgstr "reddit" msgstr "reddit"
#: script/engine.js:440 #: script/engine.js:442
msgid "close" msgid "close"
msgstr "schließen" msgstr "schließen"
#: script/engine.js:474 script/engine.js:478 #: script/engine.js:476 script/engine.js:480
msgid "lights on." msgid "lights on."
msgstr "licht an." msgstr "licht an."
#: script/engine.js:491 #: script/engine.js:493
msgid "Go Hyper?"
msgstr ""
#: script/engine.js:496
msgid ""
"turning hyper mode speeds up the game to x2 speed. do you want to do that?"
msgstr ""
#: script/engine.js:519
msgid "classic." msgid "classic."
msgstr "Klassisch." msgstr "Klassisch."
#: script/engine.js:592 #: script/engine.js:620
msgid "{0} per {1}s" msgid "{0} per {1}s"
msgstr "{0} per {1}s" msgstr "{0} per {1}s"
@@ -421,7 +428,6 @@ msgstr "Alle"
msgid "take everything" msgid "take everything"
msgstr "nimm alles" msgstr "nimm alles"
#. TRANSLATORS : Mind the whitespaces at the beginning and end.
#: script/events.js:653 script/outside.js:627 #: script/events.js:653 script/outside.js:627
msgid " and " msgid " and "
msgstr " und " msgstr " und "
@@ -912,12 +918,13 @@ msgid "the old compass is dented and dusty, but it looks to work."
msgstr "" msgstr ""
"der alte kompass ist verbeult und rostig aber er scheint zu funktionieren." "der alte kompass ist verbeult und rostig aber er scheint zu funktionieren."
#: script/events/room.js:45 script/events/room.js:227 script/events/room.js:240 #: script/events/room.js:45 script/events/room.js:227
#: script/events/room.js:253 script/events/room.js:309 #: script/events/room.js:240 script/events/room.js:253
#: script/events/room.js:332 script/events/room.js:388 #: script/events/room.js:309 script/events/room.js:332
#: script/events/room.js:411 script/events/room.js:450 #: script/events/room.js:388 script/events/room.js:411
#: script/events/room.js:568 script/events/room.js:584 #: script/events/room.js:450 script/events/room.js:568
#: script/events/room.js:600 script/events/room.js:611 #: script/events/room.js:584 script/events/room.js:600
#: script/events/room.js:611
msgid "say goodbye" msgid "say goodbye"
msgstr "verabschiede dich" msgstr "verabschiede dich"
@@ -1372,7 +1379,6 @@ msgid "rot's been to work on it, and some of the pieces are missing."
msgstr "verwesung hat eingesetzt. einige teile fehlen." msgstr "verwesung hat eingesetzt. einige teile fehlen."
# 'it' is a wanderer corpse # 'it' is a wanderer corpse
#. TRANSLATORS : 'it' is a rotting wanderer's body
#: script/events/setpieces.js:202 #: script/events/setpieces.js:202
msgid "can't tell what left it here." msgid "can't tell what left it here."
msgstr "schwer zu sagen was ihn hier zurückgelassen hat." msgstr "schwer zu sagen was ihn hier zurückgelassen hat."
@@ -1771,7 +1777,6 @@ msgid "looks like a camp of sorts up ahead."
msgstr "sieht dort vorn nach einer art lager aus." msgstr "sieht dort vorn nach einer art lager aus."
# a chainlink fence # a chainlink fence
#. TRANSLATORS : chainlink is a type of metal fence.
#: script/events/setpieces.js:1677 #: script/events/setpieces.js:1677
msgid "rusted chainlink is pulled across an alleyway." msgid "rusted chainlink is pulled across an alleyway."
msgstr "rostiger drahtzaun liegt in der gasse." msgstr "rostiger drahtzaun liegt in der gasse."
@@ -1797,7 +1802,6 @@ msgid "the street ahead glows with firelight."
msgstr "die straßen glühen rot im feuer." msgstr "die straßen glühen rot im feuer."
# define squatter # define squatter
#. TRANSLATORS : squatters occupy abandoned dwellings they don't own.
#: script/events/setpieces.js:1729 #: script/events/setpieces.js:1729
msgid "more squatters are crowding around now." msgid "more squatters are crowding around now."
msgstr "mehr hausbesetzer sammeln sich jetzt." msgstr "mehr hausbesetzer sammeln sich jetzt."
@@ -1909,7 +1913,6 @@ msgid "scavengers must have gotten to this place already."
msgstr "plünderer waren wohl schon hier." msgstr "plünderer waren wohl schon hier."
# part of the subway? # part of the subway?
#. TRANSLATORS : a platform in the subway
#: script/events/setpieces.js:2403 #: script/events/setpieces.js:2403
msgid "the tunnel opens up at another platform." msgid "the tunnel opens up at another platform."
msgstr "der tunnel öffnet sich an einer anderen haltestelle." msgstr "der tunnel öffnet sich an einer anderen haltestelle."
@@ -2029,7 +2032,6 @@ msgid "inside, the remains of its victims are everywhere."
msgstr "innen liegen die überreste seiner opfer verstreut." msgstr "innen liegen die überreste seiner opfer verstreut."
# extremly disfigured # extremly disfigured
#. TRANSLATORS : warped means extremely disfigured.
#: script/events/setpieces.js:2845 #: script/events/setpieces.js:2845
msgid "the warped man lies dead." msgid "the warped man lies dead."
msgstr "der entstellte mann liegt tot am boden." msgstr "der entstellte mann liegt tot am boden."
@@ -2271,7 +2273,6 @@ msgid "charred bodies litter the ground."
msgstr "verkohlte leichen bedecken den boden." msgstr "verkohlte leichen bedecken den boden."
# afterburner: a engine # afterburner: a engine
#. TRANSLATORS : tang = strong metallic smell, wanderer afterburner = ship's engines
#: script/events/setpieces.js:3532 #: script/events/setpieces.js:3532
msgid "the metallic tang of wanderer afterburner hangs in the air." msgid "the metallic tang of wanderer afterburner hangs in the air."
msgstr "der metallische geruch eines wanderer-nachbrenners hängt in der luft." msgstr "der metallische geruch eines wanderer-nachbrenners hängt in der luft."
@@ -2591,7 +2592,6 @@ msgid "the town's booming. word does get around."
msgstr "die stadt wächst. gerüchte verbreiten sich doch." msgstr "die stadt wächst. gerüchte verbreiten sich doch."
# short for population. # short for population.
#. TRANSLATORS : pop is short for population.
#: script/outside.js:452 #: script/outside.js:452
msgid "pop " msgid "pop "
msgstr "volk " msgstr "volk "
@@ -2636,7 +2636,6 @@ msgstr "der himmel ist grau und der wind heult erbarmungslos"
msgid "dry brush and dead branches litter the forest floor" msgid "dry brush and dead branches litter the forest floor"
msgstr "trockenes gestrüpp und herabgefallene äste bedecken den waldboden" msgstr "trockenes gestrüpp und herabgefallene äste bedecken den waldboden"
#. TRANSLATORS : Mind the whitespace at the end.
#: script/outside.js:621 #: script/outside.js:621
msgid "the traps contain " msgid "the traps contain "
msgstr "die fallen beinhalten " msgstr "die fallen beinhalten "
+875 -790
View File
File diff suppressed because it is too large Load Diff
+1839 -1748
View File
File diff suppressed because it is too large Load Diff
+15
View File
@@ -1,3 +1,18 @@
.button{width: 100px !important;} .button{width: 100px !important;}
#outsidePanel .button{width: 115px !important;} #outsidePanel .button{width: 115px !important;}
.eventPanel .button {width: 122px !important;} .eventPanel .button {width: 122px !important;}
#lootButtons:before {
content: "prendre :" !important;
}
#dropMenu:before {
content: "déposer :" !important;
}
#hullRow {
width: 80px !important;
}
div#workers {
width: 160px !important;
}
div.button div.tooltip {
width: 120px !important;
}
+1 -1
View File
File diff suppressed because one or more lines are too long
+2935 -1941
View File
File diff suppressed because it is too large Load Diff
+1 -1
View File
File diff suppressed because one or more lines are too long
+875 -789
View File
File diff suppressed because it is too large Load Diff
+1 -1
View File
File diff suppressed because one or more lines are too long
+863 -788
View File
File diff suppressed because it is too large Load Diff
+925 -807
View File
File diff suppressed because it is too large Load Diff
+15 -6
View File
@@ -7,8 +7,8 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: PROJECT VERSION\n" "Project-Id-Version: PROJECT VERSION\n"
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
"POT-Creation-Date: 2015-12-10 10:23+0900\n" "POT-Creation-Date: 2015-12-22 13:35-0600\n"
"PO-Revision-Date: 2015-05-21 05:35+0900\n" "PO-Revision-Date: 2016-02-15 02:05+0100\n"
"Last-Translator: Jeong YunWon <adarkroom@youknowone.org>\n" "Last-Translator: Jeong YunWon <adarkroom@youknowone.org>\n"
"Language-Team: \n" "Language-Team: \n"
"Language: ko\n" "Language: ko\n"
@@ -228,7 +228,7 @@ msgstr "앱 스토어."
msgid "lights off." msgid "lights off."
msgstr "어둡게." msgstr "어둡게."
#: script/engine.js:150 script/engine.js:495 #: script/engine.js:150 script/engine.js:521
msgid "hyper." msgid "hyper."
msgstr "하이퍼." msgstr "하이퍼."
@@ -292,11 +292,11 @@ msgstr "입력하신 코드가 정확하지 않으면, 모든 데이터가 사
msgid "this is irreversible." msgid "this is irreversible."
msgstr "이것은 되돌릴 수 없습니다." msgstr "이것은 되돌릴 수 없습니다."
#: script/engine.js:311 script/engine.js:380 #: script/engine.js:311 script/engine.js:380 script/engine.js:499
msgid "yes" msgid "yes"
msgstr "네" msgstr "네"
#: script/engine.js:316 script/engine.js:385 #: script/engine.js:316 script/engine.js:385 script/engine.js:504
msgid "no" msgid "no"
msgstr "아니오" msgstr "아니오"
@@ -345,10 +345,19 @@ msgid "lights on."
msgstr "밝게." msgstr "밝게."
#: script/engine.js:493 #: script/engine.js:493
msgid "Go Hyper?"
msgstr ""
#: script/engine.js:496
msgid ""
"turning hyper mode speeds up the game to x2 speed. do you want to do that?"
msgstr ""
#: script/engine.js:519
msgid "classic." msgid "classic."
msgstr "클래식." msgstr "클래식."
#: script/engine.js:594 #: script/engine.js:620
msgid "{0} per {1}s" msgid "{0} per {1}s"
msgstr "{1}초 당 {0}개" msgstr "{1}초 당 {0}개"
+926 -798
View File
File diff suppressed because it is too large Load Diff
+3
View File
@@ -0,0 +1,3 @@
.button{width: 100px !important;}
#outsidePanel .button{width: 115px !important;}
.eventPanel .button {width: 122px !important;}
+1 -1
View File
File diff suppressed because one or more lines are too long
+1824 -1587
View File
File diff suppressed because it is too large Load Diff
+934 -798
View File
File diff suppressed because it is too large Load Diff
File diff suppressed because one or more lines are too long
+1096 -1076
View File
File diff suppressed because it is too large Load Diff
+2871 -2493
View File
File diff suppressed because it is too large Load Diff
+2867 -1873
View File
File diff suppressed because it is too large Load Diff
+919 -967
View File
File diff suppressed because it is too large Load Diff
+2882 -1902
View File
File diff suppressed because it is too large Load Diff
+2872 -1857
View File
File diff suppressed because it is too large Load Diff
+925 -798
View File
File diff suppressed because it is too large Load Diff
File diff suppressed because one or more lines are too long
+2462 -1528
View File
File diff suppressed because it is too large Load Diff
+2829 -1857
View File
File diff suppressed because it is too large Load Diff
+44 -20
View File
@@ -1,34 +1,58 @@
<!doctype html> <!doctype html>
<html> <html>
<head> <head>
<meta name="viewport" content="initial-scale=1, maximum-scale=1, user-scalable=no">
<title>A Dark Room</title> <title>A Dark Room</title>
<style> <style>
body { body {
background-color: #000000; background-color: #000000;
color: #FFFFFF; color: #FFFFFF;
line-height: 1.5;
font-size: 22px;
display: flex;
flex-direction: column;
justify-content: center;
} }
a { a {
color: #FFFFFF; color: #FFFFFF;
}
p {
margin: 10px 20px;
text-align: center;
}
.logo {
width: 100%;
}
.store {
width: 90%;
}
.storeLink {
text-align: center;
}
div {
width: 100%;
margin: auto;
text-align: center;
margin-top: 20px;
} }
div {
width: 960px;
margin: auto;
text-align: center;
margin-top: 20px;
}
</style> </style>
</head> </head>
<body> <body>
<center> <img class="logo" src="img/Logo1.jpg" />
<img src="img/Logo1.jpg" /> <p>
<div> A Dark Room isn't mobile-friendly, and it requires arrow keys.
<strong> <br>
A Dark Room isn't really mobile-friendly, and it requires arrow keys.<br/> Sorry about that!
Sorry about that!<br/> </p>
</strong><br/> <p>
Of course you can <a href='index.html?ignorebrowser=true'>play anyway</a>, but it probably won't work!<br/><br/> There are native apps, though! Get them now!
A Dark Room is now native on iOS! Get it on the <a href="https://itunes.apple.com/app/apple-store/id736683061?pt=2073437&ct=mobilesplash&mt=8">App Store</a>. </p>
</div> <a class="storeLink" href="https://itunes.apple.com/app/apple-store/id736683061?pt=2073437&ct=mobilesplash&mt=8">
</center> <img class="store" src="http://i.imgur.com/DMdnDYq.png" alt="App Store">
</a>
<a class="storeLink" href = "https://play.google.com/store/apps/details?id=com.yourcompany.adarkroom&hl=en">
<img class="store" src="http://i.imgur.com/bLWWj4r.png" alt="Google Play">
</a>
</body> </body>
</html> </html>
+3
View File
@@ -70,6 +70,9 @@ var Button = {
var cd = btn.data("cooldown"); var cd = btn.data("cooldown");
var id = 'cooldown.'+ btn.attr('id'); var id = 'cooldown.'+ btn.attr('id');
if(cd > 0) { if(cd > 0) {
if(typeof option == 'number') {
cd = option;
}
// param "start" takes value from cooldown time if not specified // param "start" takes value from cooldown time if not specified
var start, left; var start, left;
switch(option){ switch(option){
+2 -4
View File
@@ -577,10 +577,6 @@
stores.animate({right: -(panelIndex * 700) + 'px'}, 300 * diff); stores.animate({right: -(panelIndex * 700) + 'px'}, 300 * diff);
} }
Engine.activeModule = module;
module.onArrival(diff);
if(Engine.activeModule == Room || Engine.activeModule == Path) { if(Engine.activeModule == Room || Engine.activeModule == Path) {
// Don't fade out the weapons if we're switching to a module // Don't fade out the weapons if we're switching to a module
// where we're going to keep showing them anyway. // where we're going to keep showing them anyway.
@@ -593,6 +589,8 @@
$('div#weapons').animate({opacity: 1}, 300); $('div#weapons').animate({opacity: 1}, 300);
} }
Engine.activeModule = module;
module.onArrival(diff);
Notifications.printQueue(module); Notifications.printQueue(module);
} }
+209 -118
View File
@@ -72,20 +72,36 @@ var Events = {
startCombat: function(scene) { startCombat: function(scene) {
Engine.event('game event', 'combat'); Engine.event('game event', 'combat');
Events.won = false; Events.fought = false;
var desc = $('#description', Events.eventPanel()); var desc = $('#description', Events.eventPanel());
$('<div>').text(scene.notification).appendTo(desc); $('<div>').text(scene.notification).appendTo(desc);
// Draw the wanderer // Draw pause button
Events.createFighterDiv('@', World.health, World.getMaxHealth()).attr('id', 'wanderer').appendTo(desc); /* Disable for now, because it doesn't work and looks weird
var pauseBox = $('<div>').attr('id', 'pauseButton').appendTo(desc);
var pause = new Button.Button({
id: 'pause',
text: '',
cooldown: Events._PAUSE_COOLDOWN,
click: Events.togglePause
}).appendTo(pauseBox);
$('<span>').addClass('text').insertBefore(pause.children('.cooldown'));
$('<div>').addClass('clear').appendTo(pauseBox);
Events.setPause(pause, 'set');
Events.removePause(pause, 'set');
*/
var fightBox = $('<div>').attr('id', 'fight').appendTo(desc);
// Draw the wanderer
Events.createFighterDiv('@', World.health, World.getMaxHealth()).attr('id', 'wanderer').appendTo(fightBox);
// Draw the enemy // Draw the enemy
Events.createFighterDiv(scene.chara, scene.health, scene.health).attr('id', 'enemy').appendTo(desc); Events.createFighterDiv(scene.chara, scene.health, scene.health).attr('id', 'enemy').appendTo(fightBox);
// Draw the action buttons // Draw the action buttons
var btns = $('#buttons', Events.eventPanel()); var btns = $('#buttons', Events.eventPanel());
var attackBtns = $('<div>').appendTo(btns).attr('id','attackButtons');
var numWeapons = 0; var numWeapons = 0;
for(var k in World.Weapons) { for(var k in World.Weapons) {
var weapon = World.Weapons[k]; var weapon = World.Weapons[k];
@@ -103,21 +119,105 @@ var Events = {
} }
} }
numWeapons++; numWeapons++;
Events.createAttackButton(k).appendTo(btns); Events.createAttackButton(k).appendTo(attackBtns);
} }
} }
if(numWeapons === 0) { if(numWeapons === 0) {
// No weapons? You can punch stuff! // No weapons? You can punch stuff!
Events.createAttackButton('fists').prependTo(btns); Events.createAttackButton('fists').prependTo(attackBtns);
} }
$('<div>').addClass('clear').appendTo(attackBtns);
Events.createEatMeatButton().appendTo(btns); var healBtns = $('<div>').appendTo(btns).attr('id','healButtons');
Events.createEatMeatButton().appendTo(healBtns);
if((Path.outfit['medicine'] || 0) !== 0) { if((Path.outfit['medicine'] || 0) !== 0) {
Events.createUseMedsButton().appendTo(btns); Events.createUseMedsButton().appendTo(healBtns);
} }
$('<div>').addClass('clear').appendTo(healBtns);
Events.setHeal(healBtns);
// Set up the enemy attack timer // Set up the enemy attack timer
Events._enemyAttackTimer = Engine.setTimeout(Events.enemyAttack, scene.attackDelay * 1000); Events._enemyAttackTimer = Engine.setInterval(Events.enemyAttack, scene.attackDelay * 1000);
},
setPause: function(btn, state){
if(!btn) {
btn = $('#pause');
}
var event = btn.closest('#event');
var string, log;
if(state == 'set') {
string = 'start.';
log = 'loaded';
} else {
string = 'resume.';
log = 'paused';
}
btn.children('.text').first().text( _(string) )
Events.paused = (state == 'auto') ? 'auto' : true;
event.addClass('paused');
Button.clearCooldown(btn);
$('#buttons').find('.button').each(function(i){
if($(this).data('onCooldown')){
$(this).children('.cooldown').stop(true,false);
}
});
Engine.log('fight '+ log +'.');
},
removePause: function(btn, state){
if(!btn) {
btn = $('#pause');
}
var event = btn.closest('#event');
var log, time, target;
if(state == 'auto' && Events.paused != 'auto') {
return;
}
switch(state){
case 'set':
Button.cooldown(btn, Events._LEAVE_COOLDOWN);
log = 'started';
time = Events._LEAVE_COOLDOWN * 1000;
target = $();
break;
case 'end':
Button.setDisabled(btn, true);
log = 'ended';
time = Events._FIGHT_SPEED;
target = $();
break;
case 'auto':
Button.cooldown(btn);
default:
log = 'resumed';
time = Events._PAUSE_COOLDOWN * 1000;
target = $('#buttons').find('.button');
break;
}
Engine.setTimeout(function(){
btn.children('.text').first().text( _('pause.') );
Events.paused = false;
event.removeClass('paused');
target.each(function(i){
if($(this).data('onCooldown')){
Button.cooldown($(this), 'pause');
}
});
Engine.log('Event '+ log);
}, time);
},
togglePause: function(btn, auto){
if(!btn) {
btn = $('#pause');
}
if((auto) && (document.hasFocus() == !Events.paused)) {
return;
}
var f = (Events.paused) ? Events.removePause : Events.setPause;
var state = (auto) ? 'auto' : false;
f(btn, state);
}, },
createEatMeatButton: function(cooldown) { createEatMeatButton: function(cooldown) {
@@ -201,52 +301,48 @@ var Events = {
}); });
}, },
eatMeat: function() { setHeal: function(healBtns) {
if(Path.outfit['cured meat'] > 0) { if(!healBtns){
Path.outfit['cured meat']--; healBtns = $('#healButtons');
}
healBtns = healBtns.children('.button');
var canHeal = (World.health < World.getMaxHealth());
healBtns.each(function(i){
Button.setDisabled($(this), !canHeal);
});
return canHeal;
},
doHeal: function(healing, cured, btn) {
if(Path.outfit[healing] > 0) {
Path.outfit[healing]--;
World.updateSupplies(); World.updateSupplies();
if(Path.outfit['cured meat'] === 0) { if(Path.outfit[healing] === 0) {
Button.setDisabled($('#eat'), true); Button.setDisabled(btn, true);
} }
var hp = World.health; var hp = World.health + cured;
hp += World.meatHeal(); hp = Math.min(World.getMaxHealth(),hp);
hp = hp > World.getMaxHealth() ? World.getMaxHealth() : hp;
World.setHp(hp); World.setHp(hp);
Events.setHeal();
if(Events.activeEvent()) { if(Events.activeEvent()) {
var w = $('#wanderer'); var w = $('#wanderer');
w.data('hp', hp); w.data('hp', hp);
Events.updateFighterDiv(w); Events.updateFighterDiv(w);
Events.drawFloatText('+' + World.meatHeal(), '#wanderer .hp'); Events.drawFloatText('+' + cured, '#wanderer .hp');
var takeETbutton = Events.setTakeAll(); var takeETbutton = Events.setTakeAll();
Events.canLeave(takeETbutton); Events.canLeave(takeETbutton);
} }
} }
}, },
useMeds: function() { eatMeat: function(btn) {
if(Path.outfit['medicine'] > 0) { Events.doHeal('cured meat', World.meatHeal(), btn);
Path.outfit['medicine']--; },
World.updateSupplies();
if(Path.outfit['medicine'] === 0) {
Button.setDisabled($('#meds'), true);
}
var hp = World.health; useMeds: function(btn) {
hp += World.medsHeal(); Events.doHeal('medicine', World.medsHeal(), btn);
hp = hp > World.getMaxHealth() ? World.getMaxHealth() : hp;
World.setHp(hp);
if(Events.activeEvent()) {
var w = $('#wanderer');
w.data('hp', hp);
Events.updateFighterDiv(w);
Events.drawFloatText('+' + World.medsHeal(), '#wanderer .hp');
var takeETbutton = Events.setTakeAll();
Events.canLeave(takeETbutton);
}
}
}, },
useWeapon: function(btn) { useWeapon: function(btn) {
@@ -330,6 +426,33 @@ var Events = {
} }
}, },
damage: function(fighter, enemy, dmg) {
var enemyHp = enemy.data('hp');
var msg = "";
if(typeof dmg == 'number') {
if(dmg < 0) {
msg = _('miss');
dmg = 0;
} else {
msg = '-' + dmg;
enemyHp = ((enemyHp - dmg) < 0) ? 0 : (enemyHp - dmg);
enemy.data('hp', enemyHp);
if(fighter.attr('id') == 'enemy') {
World.setHp(enemyHp);
Events.setHeal();
}
Events.updateFighterDiv(enemy);
}
} else {
if(dmg == 'stun') {
msg = _('stunned');
enemy.data('stunned', Events.STUN_DURATION);
}
}
Events.drawFloatText(msg, $('.hp', enemy));
},
animateMelee: function(fighter, dmg, callback) { animateMelee: function(fighter, dmg, callback) {
var start, end, enemy; var start, end, enemy;
if(fighter.attr('id') == 'wanderer') { if(fighter.attr('id') == 'wanderer') {
@@ -343,32 +466,8 @@ var Events = {
} }
fighter.stop(true, true).animate(start, Events._FIGHT_SPEED, function() { fighter.stop(true, true).animate(start, Events._FIGHT_SPEED, function() {
var enemyHp = enemy.data('hp');
var msg = "";
if(typeof dmg == 'number') {
if(dmg < 0) {
msg = _('miss');
dmg = 0;
} else {
msg = '-' + dmg;
enemyHp = ((enemyHp - dmg) < 0) ? 0 : (enemyHp - dmg);
enemy.data('hp', enemyHp);
if(fighter.attr('id') == 'enemy') {
World.setHp(enemyHp);
}
Events.updateFighterDiv(enemy);
}
} else {
if(dmg == 'stun') {
msg = _('stunned');
enemy.data('stunned', true);
Engine.setTimeout(function() {
enemy.data('stunned', false);
}, Events.STUN_DURATION);
}
}
Events.drawFloatText(msg, $('.hp', enemy)); Events.damage(fighter, enemy, dmg);
$(this).animate(end, Events._FIGHT_SPEED, callback); $(this).animate(end, Events._FIGHT_SPEED, callback);
}); });
@@ -387,33 +486,9 @@ var Events = {
} }
$('<div>').css(start).addClass('bullet').text('o').appendTo('#description') $('<div>').css(start).addClass('bullet').text('o').appendTo('#description')
.animate(end, Events._FIGHT_SPEED * 2, 'linear', function() { .animate(end, Events._FIGHT_SPEED * 2, 'linear', function() {
var enemyHp = enemy.data('hp');
var msg = "";
if(typeof dmg == 'number') {
if(dmg < 0) {
msg = _('miss');
dmg = 0;
} else {
msg = '-' + dmg;
enemyHp = ((enemyHp - dmg) < 0) ? 0 : (enemyHp - dmg);
enemy.data('hp', enemyHp);
if(fighter.attr('id') == 'enemy') {
World.setHp(enemyHp);
}
Events.updateFighterDiv(enemy);
}
} else {
if(dmg == 'stun') {
msg = _('stunned');
enemy.data('stunned', true);
Engine.setTimeout(function() {
enemy.data('stunned', false);
}, Events.STUN_DURATION);
}
}
Events.drawFloatText(msg, $('.hp', enemy)); Events.damage(fighter, enemy, dmg);
$(this).remove(); $(this).remove();
if(typeof callback == 'function') { if(typeof callback == 'function') {
@@ -423,6 +498,7 @@ var Events = {
}, },
enemyAttack: function() { enemyAttack: function() {
// Events.togglePause($('#pause'),'auto');
var scene = Events.activeEvent().scenes[Events.activeScene]; var scene = Events.activeEvent().scenes[Events.activeScene];
@@ -445,16 +521,22 @@ var Events = {
} }
}); });
} }
},
Events._enemyAttackTimer = Engine.setTimeout(Events.enemyAttack, scene.attackDelay * 1000); endFight: function() {
Events.fought = true;
clearTimeout(Events._enemyAttackTimer);
Events.removePause($('#pause'), 'end');
}, },
winFight: function() { winFight: function() {
Events.won = true; Engine.setTimeout(function() {
clearTimeout(Events._enemyAttackTimer); if(Events.fought) {
$('#enemy').animate({opacity: 0}, 300, 'linear', function() { return;
Engine.setTimeout(function() { }
try { Events.endFight();
$('#enemy').animate({opacity: 0}, 300, 'linear', function() {
Engine.setTimeout(function() {
var scene = Events.activeEvent().scenes[Events.activeScene]; var scene = Events.activeEvent().scenes[Events.activeScene];
var leaveBtn = false; var leaveBtn = false;
var desc = $('#description', Events.eventPanel()); var desc = $('#description', Events.eventPanel());
@@ -465,6 +547,7 @@ var Events = {
var takeETbtn = Events.drawLoot(scene.loot); var takeETbtn = Events.drawLoot(scene.loot);
var exitBtns = $('<div>').appendTo(btns).attr('id','exitButtons');
if(scene.buttons) { if(scene.buttons) {
// Draw the buttons // Draw the buttons
leaveBtn = Events.drawButtons(scene); leaveBtn = Events.drawButtons(scene);
@@ -481,19 +564,28 @@ var Events = {
}, },
text: _('leave') text: _('leave')
}); });
Button.cooldown(leaveBtn.appendTo(btns)); Button.cooldown(leaveBtn.appendTo(exitBtns));
Events.createEatMeatButton(0).appendTo(btns); var healBtns = $('<div>').appendTo(btns).attr('id','healButtons');
Events.createEatMeatButton(0).appendTo(healBtns);
if((Path.outfit['medicine'] || 0) !== 0) { if((Path.outfit['medicine'] || 0) !== 0) {
Events.createUseMedsButton(0).appendTo(btns); Events.createUseMedsButton(0).appendTo(healBtns);
} }
$('<div>').addClass('clear').appendTo(healBtns);
Events.setHeal(healBtns);
} }
$('<div>').addClass('clear').appendTo(exitBtns);
Events.allowLeave(takeETbtn, leaveBtn); Events.allowLeave(takeETbtn, leaveBtn);
} catch(e) { }, 1000, true);
// It is possible to die and win if the timing is perfect. Just let it fail. });
} }, Events._FIGHT_SPEED);
}, 1000, true); },
});
loseFight: function(){
Events.endFight();
Events.endEvent();
World.die();
}, },
drawDrop:function(btn) { drawDrop:function(btn) {
@@ -604,7 +696,9 @@ var Events = {
}, },
setTakeAll: function(lootButtons){ setTakeAll: function(lootButtons){
var lootButtons = lootButtons || $('#lootButtons'); if(!lootButtons) {
lootButtons = $('#lootButtons');
}
var canTakeSomething = false; var canTakeSomething = false;
var free = Path.getFreeSpace(); var free = Path.getFreeSpace();
var takeETbutton = lootButtons.find('#loot_takeEverything'); var takeETbutton = lootButtons.find('#loot_takeEverything');
@@ -628,11 +722,7 @@ var Events = {
takeAll.children('span').first().text(_('all')); takeAll.children('span').first().text(_('all'));
} }
}); });
if(canTakeSomething){ Button.setDisabled(takeETbutton, !canTakeSomething);
takeETbutton.removeClass('disabled');
} else {
takeETbutton.addClass('disabled');
}
takeETbutton.data('canTakeEverything', (free >= 0) ? true : false); takeETbutton.data('canTakeEverything', (free >= 0) ? true : false);
return takeETbutton; return takeETbutton;
}, },
@@ -647,18 +737,16 @@ var Events = {
}, },
canLeave: function(btn){ canLeave: function(btn){
var basetext = _('take everything'); var basetext = (btn.data('canTakeEverything')) ? _('take everything') : _('take all you can');
var textbox = btn.children('span'); var textbox = btn.children('span');
var takeAndLeave = (btn.data('leaveBtn')) ? btn.data('canTakeEverything') : false; var takeAndLeave = (btn.data('leaveBtn')) ? btn.data('canTakeEverything') : false;
var text = _(basetext);
if(takeAndLeave){ if(takeAndLeave){
var verb = btn.data('leaveBtn').text() || _('leave');
textbox.text( basetext + _(' and ') + verb);
btn.data('canLeave', true);
Button.cooldown(btn); Button.cooldown(btn);
} else { text += _(' and ') + btn.data('leaveBtn').text();
textbox.text( basetext );
btn.data('canLeave', false)
} }
textbox.text( text );
btn.data('canLeave', takeAndLeave);
}, },
dropStuff: function(e) { dropStuff: function(e) {
@@ -774,13 +862,16 @@ var Events = {
} }
// Draw the buttons // Draw the buttons
var exitBtns = $('<div>').attr('id','exitButtons').appendTo($('#buttons', Events.eventPanel()));
leaveBtn = Events.drawButtons(scene); leaveBtn = Events.drawButtons(scene);
$('<div>').addClass('clear').appendTo(exitBtns);
Events.allowLeave(takeETbtn, leaveBtn); Events.allowLeave(takeETbtn, leaveBtn);
}, },
drawButtons: function(scene) { drawButtons: function(scene) {
var btns = $('#buttons', Events.eventPanel()); var btns = $('#exitButtons', Events.eventPanel());
var btnsList = []; var btnsList = [];
for(var id in scene.buttons) { for(var id in scene.buttons) {
var info = scene.buttons[id]; var info = scene.buttons[id];
+1 -1
View File
@@ -68,7 +68,7 @@ Events.Outside = [
{ /* Hut fire */ { /* Hut fire */
title: _('Fire'), title: _('Fire'),
isAvailable: function() { isAvailable: function() {
return Engine.activeModule == Outside && $SM.get('game.buildings["hut"]', true) > 0 && $SM.get('game.population', true) > 5; return Engine.activeModule == Outside && $SM.get('game.buildings["hut"]', true) > 0 && $SM.get('game.population', true) > 50;
}, },
scenes: { scenes: {
'start': { 'start': {
+3
View File
@@ -433,6 +433,9 @@ Events.Room = [
'buyMap': { 'buyMap': {
text: _('buy map'), text: _('buy map'),
cost: { 'fur': 200, 'scales': 10 }, cost: { 'fur': 200, 'scales': 10 },
available: function() {
return !World.seenAll;
},
notification: _('the map uncovers a bit of the world'), notification: _('the map uncovers a bit of the world'),
onChoose: World.applyMap onChoose: World.applyMap
}, },
+37 -22
View File
@@ -157,20 +157,19 @@ var Path = {
$('.row_val', wRow).text(World.getMaxWater()); $('.row_val', wRow).text(World.getMaxWater());
} }
var space = Path.getFreeSpace(); var space = Path.getFreeSpace();
var total = 0; var currentBagCapacity = 0;
// Add the non-craftables to the craftables // Add the non-craftables to the craftables
var carryable = $.extend({ var carryable = $.extend({
'cured meat': { type: 'tool' }, 'cured meat': { type: 'tool', desc: 'restores '+ World.MEAT_HEAL + ' hp' },
'bullets': { type: 'tool' }, 'bullets': { type: 'tool', desc: 'use with rifle' },
'grenade': {type: 'weapon' }, 'grenade': {type: 'weapon' },
'bolas': {type: 'weapon' }, 'bolas': {type: 'weapon' },
'laser rifle': {type: 'weapon' }, 'laser rifle': {type: 'weapon' },
'energy cell': {type: 'tool' }, 'energy cell': {type: 'tool', desc: 'use with laser rifle' },
'bayonet': {type: 'weapon' }, 'bayonet': {type: 'weapon' },
'charm': {type: 'tool'}, 'charm': {type: 'tool'},
'medicine': {type: 'tool'} 'medicine': {type: 'tool', desc: 'restores ' + World.MEDS_HEAL + ' hp' }
}, Room.Craftables); }, Room.Craftables);
for(var k in carryable) { for(var k in carryable) {
@@ -179,13 +178,16 @@ var Path = {
var have = $SM.get('stores["'+k+'"]'); var have = $SM.get('stores["'+k+'"]');
var num = Path.outfit[k]; var num = Path.outfit[k];
num = typeof num == 'number' ? num : 0; num = typeof num == 'number' ? num : 0;
if (have < num) { num = have; } if (have !== undefined) {
var numAvailable = $SM.get('stores["'+k+'"]', true); if (have < num) { num = have; }
$SM.set(k, num, true);
}
var row = $('div#outfit_row_' + k.replace(' ', '-'), outfit); var row = $('div#outfit_row_' + k.replace(' ', '-'), outfit);
if((store.type == 'tool' || store.type == 'weapon') && have > 0) { if((store.type == 'tool' || store.type == 'weapon') && have > 0) {
total += num * Path.getWeight(k); currentBagCapacity += num * Path.getWeight(k);
if(row.length === 0) { if(row.length === 0) {
row = Path.createOutfittingRow(k, num, store.name); row = Path.createOutfittingRow(k, num, store, store.name);
var curPrev = null; var curPrev = null;
outfit.children().each(function(i) { outfit.children().each(function(i) {
@@ -204,7 +206,7 @@ var Path = {
} }
} else { } else {
$('div#' + row.attr('id') + ' > div.row_val > span', outfit).text(num); $('div#' + row.attr('id') + ' > div.row_val > span', outfit).text(num);
$('div#' + row.attr('id') + ' .tooltip .numAvailable', outfit).text(numAvailable - num); $('div#' + row.attr('id') + ' .tooltip .numAvailable', outfit).text(have - num);
} }
if(num === 0) { if(num === 0) {
$('.dnBtn', row).addClass('disabled'); $('.dnBtn', row).addClass('disabled');
@@ -213,10 +215,10 @@ var Path = {
$('.dnBtn', row).removeClass('disabled'); $('.dnBtn', row).removeClass('disabled');
$('.dnManyBtn', row).removeClass('disabled'); $('.dnManyBtn', row).removeClass('disabled');
} }
if(num >= numAvailable || space < Path.getWeight(k)) { if(num == have || space < Path.getWeight(k)) {
$('.upBtn', row).addClass('disabled'); $('.upBtn', row).addClass('disabled');
$('.upManyBtn', row).addClass('disabled'); $('.upManyBtn', row).addClass('disabled');
} else if(space >= Path.getWeight(k)) { } else {
$('.upBtn', row).removeClass('disabled'); $('.upBtn', row).removeClass('disabled');
$('.upManyBtn', row).removeClass('disabled'); $('.upManyBtn', row).removeClass('disabled');
} }
@@ -225,20 +227,26 @@ var Path = {
} }
} }
Path.updateBagSpace(currentBagCapacity);
},
updateBagSpace: function(currentBagCapacity) {
// Update bagspace // Update bagspace
$('#bagspace').text(_('free {0}/{1}', Math.floor(Path.getCapacity() - total) , Path.getCapacity())); $('#bagspace').text(_('free {0}/{1}', Math.floor(Path.getCapacity() - currentBagCapacity) , Path.getCapacity()));
if(Path.outfit['cured meat'] > 0) { if(Path.outfit['cured meat'] > 0) {
Button.setDisabled($('#embarkButton'), false); Button.setDisabled($('#embarkButton'), false);
} else { } else {
Button.setDisabled($('#embarkButton'), true); Button.setDisabled($('#embarkButton'), true);
} }
}, },
createOutfittingRow: function(key, num, name) { createOutfittingRow: function(key, num, store) {
if(!name) name = _(key); if(!store.name) store.name = _(key);
var row = $('<div>').attr('id', 'outfit_row_' + key.replace(' ', '-')).addClass('outfitRow').attr('key',key); var row = $('<div>').attr('id', 'outfit_row_' + key.replace(' ', '-')).addClass('outfitRow').attr('key',key);
$('<div>').addClass('row_key').text(name).appendTo(row); $('<div>').addClass('row_key').text(store.name).appendTo(row);
var val = $('<div>').addClass('row_val').appendTo(row); var val = $('<div>').addClass('row_val').appendTo(row);
$('<span>').text(num).appendTo(val); $('<span>').text(num).appendTo(val);
@@ -250,6 +258,14 @@ var Path = {
var numAvailable = $SM.get('stores["'+key+'"]', true); var numAvailable = $SM.get('stores["'+key+'"]', true);
var tt = $('<div>').addClass('tooltip bottom right').appendTo(row); var tt = $('<div>').addClass('tooltip bottom right').appendTo(row);
if(store.type == 'weapon') {
$('<div>').addClass('row_key').text(_('damage')).appendTo(tt);
$('<div>').addClass('row_val').text(World.getDamage(key)).appendTo(tt);
} else if(store.type == 'tool' && store.desc != "undefined") {
$('<div>').addClass('row_key').text(store.desc).appendTo(tt);
}
$('<div>').addClass('row_key').text(_('weight')).appendTo(tt); $('<div>').addClass('row_key').text(_('weight')).appendTo(tt);
$('<div>').addClass('row_val').text(Path.getWeight(key)).appendTo(tt); $('<div>').addClass('row_val').text(Path.getWeight(key)).appendTo(tt);
$('<div>').addClass('row_key').text(_('available')).appendTo(tt); $('<div>').addClass('row_key').text(_('available')).appendTo(tt);
@@ -266,8 +282,7 @@ var Path = {
if(Path.getFreeSpace() >= Path.getWeight(supply) && cur < $SM.get('stores["'+supply+'"]', true)) { if(Path.getFreeSpace() >= Path.getWeight(supply) && cur < $SM.get('stores["'+supply+'"]', true)) {
var maxExtraByWeight = Math.floor(Path.getFreeSpace() / Path.getWeight(supply)); var maxExtraByWeight = Math.floor(Path.getFreeSpace() / Path.getWeight(supply));
var maxExtraByStore = $SM.get('stores["'+supply+'"]', true) - cur; var maxExtraByStore = $SM.get('stores["'+supply+'"]', true) - cur;
var maxExtraByBtn = btn.data; Path.outfit[supply] = cur + Math.min(btn.data, maxExtraByWeight, maxExtraByStore);
Path.outfit[supply] = cur + Math.min(maxExtraByBtn, Math.min(maxExtraByWeight, maxExtraByStore));
$SM.set('outfit['+supply+']', Path.outfit[supply]); $SM.set('outfit['+supply+']', Path.outfit[supply]);
Path.updateOutfitting(); Path.updateOutfitting();
} }
@@ -289,7 +304,6 @@ var Path = {
Path.setTitle(); Path.setTitle();
Path.updateOutfitting(); Path.updateOutfitting();
Path.updatePerks(true); Path.updatePerks(true);
$SM.set('outfit', Path.outfit);
Engine.moveStoresView($('#perks'), transition_diff); Engine.moveStoresView($('#perks'), transition_diff);
}, },
@@ -302,7 +316,6 @@ var Path = {
for(var k in Path.outfit) { for(var k in Path.outfit) {
$SM.add('stores["'+k+'"]', -Path.outfit[k]); $SM.add('stores["'+k+'"]', -Path.outfit[k]);
} }
$SM.remove('outfit');
World.onArrival(); World.onArrival();
$('#outerSlider').animate({left: '-700px'}, 300); $('#outerSlider').animate({left: '-700px'}, 300);
Engine.activeModule = World; Engine.activeModule = World;
@@ -311,7 +324,9 @@ var Path = {
handleStateUpdates: function(e){ handleStateUpdates: function(e){
if(e.category == 'character' && e.stateName.indexOf('character.perks') === 0 && Engine.activeModule == Path){ if(e.category == 'character' && e.stateName.indexOf('character.perks') === 0 && Engine.activeModule == Path){
Path.updatePerks(); Path.updatePerks();
}; } else if(e.category == 'income' && Engine.activeModule == Path){
Path.updateOutfitting();
}
}, },
scrollSidebar: function(direction, reset){ scrollSidebar: function(direction, reset){
+12 -6
View File
@@ -750,7 +750,7 @@ var Room = {
updateStoresView: function() { updateStoresView: function() {
var stores = $('div#stores'); var stores = $('div#stores');
var resources = $('div#resources'); var resources = $('div#resources');
var special = $('div#special'); var special = $('div#special');
var weapons = $('div#weapons'); var weapons = $('div#weapons');
var needsAppend = false, rNeedsAppend = false, sNeedsAppend = false, wNeedsAppend = false, newRow = false; var needsAppend = false, rNeedsAppend = false, sNeedsAppend = false, wNeedsAppend = false, newRow = false;
@@ -796,6 +796,9 @@ var Room = {
case 'upgrade': case 'upgrade':
// Don't display upgrades on the Room screen // Don't display upgrades on the Room screen
continue; continue;
case 'building':
// Don't display buildings either
continue;
case 'weapon': case 'weapon':
location = weapons; location = weapons;
break; break;
@@ -825,7 +828,7 @@ var Room = {
$SM.startThieves(); $SM.startThieves();
} }
if(row.length === 0 && num > 0) { if(row.length === 0) {
row = $('<div>').attr('id', id).addClass('storeRow'); row = $('<div>').attr('id', id).addClass('storeRow');
$('<div>').addClass('row_key').text(lk).appendTo(row); $('<div>').addClass('row_key').text(lk).appendTo(row);
$('<div>').addClass('row_val').text(Math.floor(num)).appendTo(row); $('<div>').addClass('row_val').text(Math.floor(num)).appendTo(row);
@@ -844,7 +847,7 @@ var Room = {
row.insertAfter(location.find('#' + curPrev)); row.insertAfter(location.find('#' + curPrev));
} }
newRow = true; newRow = true;
} else if(num>= 0){ } else {
$('div#' + row.attr('id') + ' > div.row_val', location).text(Math.floor(num)); $('div#' + row.attr('id') + ' > div.row_val', location).text(Math.floor(num));
} }
} }
@@ -890,7 +893,8 @@ var Room = {
$('div.storeRow', stores).each(function(index, el) { $('div.storeRow', stores).each(function(index, el) {
el = $(el); el = $(el);
$('div.tooltip', el).remove(); $('div.tooltip', el).remove();
var tt = $('<div>').addClass('tooltip bottom right'); var ttPos = index > 10 ? 'top right' : 'bottom right';
var tt = $('<div>').addClass('tooltip ' + ttPos);
var storeName = el.attr('id').substring(4).replace('-', ' '); var storeName = el.attr('id').substring(4).replace('-', ' ');
for(var incomeSource in $SM.get('income')) { for(var incomeSource in $SM.get('income')) {
var income = $SM.get('income["'+incomeSource+'"]'); var income = $SM.get('income["'+incomeSource+'"]');
@@ -1114,7 +1118,8 @@ var Room = {
cost: good.cost(), cost: good.cost(),
text: _(k), text: _(k),
click: Room.buy, click: Room.buy,
width: '80px' width: '80px',
ttPos: buySection.children().length > 10 ? 'top right' : 'bottom right'
}).css('opacity', 0).attr('buildThing', k).appendTo(buySection).animate({opacity:1}, 300, 'linear'); }).css('opacity', 0).attr('buildThing', k).appendTo(buySection).animate({opacity:1}, 300, 'linear');
} }
} else { } else {
@@ -1149,7 +1154,8 @@ var Room = {
}, },
compassTooltip: function(direction){ compassTooltip: function(direction){
var tt = $('<div>').addClass('tooltip bottom right'); var ttPos = $('div#resources').children().length > 10 ? 'top right' : 'bottom right';
var tt = $('<div>').addClass('tooltip ' + ttPos);
$('<div>').addClass('row_key').text(_('the compass points '+ direction)).appendTo(tt); $('<div>').addClass('row_key').text(_('the compass points '+ direction)).appendTo(tt);
tt.appendTo($('#row_compass')); tt.appendTo($('#row_compass'));
}, },
+20 -1
View File
@@ -445,12 +445,31 @@ var Space = {
.animate({opacity:1},1500); .animate({opacity:1},1500);
$('<br />') $('<br />')
.appendTo('.centerCont'); .appendTo('.centerCont');
$('<br />')
.appendTo('.centerCont');
$('<span>')
.addClass('endGame')
.text(_('expanded story. alternate ending. behind the scenes commentary. get the app.'))
.appendTo('.centerCont')
.animate({opacity:1}, 1500);
$('<br />')
.appendTo('.centerCont');
$('<br />')
.appendTo('.centerCont');
$('<span>') $('<span>')
.addClass('endGame endGameOption') .addClass('endGame endGameOption')
.text(_('app store.')) .text(_('iOS.'))
.click(function() { window.open('https://itunes.apple.com/app/apple-store/id736683061?pt=2073437&ct=gameover&mt=8'); }) .click(function() { window.open('https://itunes.apple.com/app/apple-store/id736683061?pt=2073437&ct=gameover&mt=8'); })
.appendTo('.centerCont') .appendTo('.centerCont')
.animate({opacity:1},1500); .animate({opacity:1},1500);
$('<br />')
.appendTo('.centerCont');
$('<span>')
.addClass('endGame endGameOption')
.text(_('android.'))
.click(function() { window.open('https://play.google.com/store/apps/details?id=com.yourcompany.adarkroom'); })
.appendTo('.centerCont')
.animate({opacity:1},1500);
Engine.options = {}; Engine.options = {};
Engine.deleteSave(true); Engine.deleteSave(true);
} }
+36 -3
View File
@@ -162,6 +162,9 @@ var World = {
// compass tooltip text // compass tooltip text
Room.compassTooltip(World.dir); Room.compassTooltip(World.dir);
// Check if everything has been seen
World.testMap();
//subscribe to stateUpdates //subscribe to stateUpdates
$.Dispatch('stateUpdate').subscribe(World.handleStateUpdates); $.Dispatch('stateUpdate').subscribe(World.handleStateUpdates);
}, },
@@ -549,6 +552,10 @@ var World = {
return World.state.map[World.curPos[0]][World.curPos[1]]; return World.state.map[World.curPos[0]][World.curPos[1]];
}, },
getDamage: function(thing) {
return World.Weapons[thing].damage;
},
narrateMove: function(oldTile, newTile) { narrateMove: function(oldTile, newTile) {
var msg = null; var msg = null;
switch(oldTile) { switch(oldTile) {
@@ -617,10 +624,33 @@ var World = {
} }
}, },
testMap: function() {
if(!World.seenAll) {
var dark;
var mask = $SM.get('game.world.mask');
loop:
for(var i = 0; i < mask.length; i++) {
for(var j = 0; j < mask[i].length; j++) {
if(!mask[i][j]) {
dark = true;
break loop;
}
}
}
World.seenAll = !dark;
}
},
applyMap: function() { applyMap: function() {
var x = Math.floor(Math.random() * (World.RADIUS * 2) + 1); if(!World.seenAll){
var y = Math.floor(Math.random() * (World.RADIUS * 2) + 1); var x,y,mask = $SM.get('game.world.mask');
World.uncoverMap(x, y, 5, $SM.get('game.world.mask')); do {
x = Math.floor(Math.random() * (World.RADIUS * 2) + 1);
y = Math.floor(Math.random() * (World.RADIUS * 2) + 1);
} while (mask[x][y]);
World.uncoverMap(x, y, 5, mask);
}
World.testMap();
}, },
generateMap: function() { generateMap: function() {
@@ -851,6 +881,7 @@ var World = {
Notifications.notify(World, _('the world fades')); Notifications.notify(World, _('the world fades'));
World.state = null; World.state = null;
Path.outfit = {}; Path.outfit = {};
$SM.remove('outfit');
$('#outerSlider').animate({opacity: '0'}, 600, 'linear', function() { $('#outerSlider').animate({opacity: '0'}, 600, 'linear', function() {
$('#outerSlider').css('left', '0px'); $('#outerSlider').css('left', '0px');
$('#locationSlider').css('left', '0px'); $('#locationSlider').css('left', '0px');
@@ -872,6 +903,8 @@ var World = {
goHome: function() { goHome: function() {
// Home safe! Commit the changes. // Home safe! Commit the changes.
$SM.setM('game.world', World.state); $SM.setM('game.world', World.state);
World.testMap();
if(World.state.sulphurmine && $SM.get('game.buildings["sulphur mine"]', true) === 0) { if(World.state.sulphurmine && $SM.get('game.buildings["sulphur mine"]', true) === 0) {
$SM.add('game.buildings["sulphur mine"]', 1); $SM.add('game.buildings["sulphur mine"]', 1);
Engine.event('progress', 'sulphur mine'); Engine.event('progress', 'sulphur mine');