468 Commits

Author SHA1 Message Date
pacharan ea38d220d1 Update and rename string.js to strings.js 2016-01-10 21:23:58 -05:00
Blake Grotewold 9a0a764cb5 Merge pull request #453 from pacharan/patch-2
Create main.css
2016-01-10 18:09:30 -05:00
pacharan 201961c12e Create main.css 2016-01-11 05:10:05 +07:00
Blake Grotewold 23796cb36e Merge branch 'pr/447' 2015-12-30 03:29:14 -06:00
Blake Grotewold 49f6cd5255 Merge branch 'master' into pr/447 2015-12-30 03:28:52 -06:00
Blake Grotewold 99c57da055 update adarkroom.pot 2015-12-30 03:28:41 -06:00
Blake Grotewold b28c8583c6 Merge pull request #450 from miratcan/master
Added missing Turkish translations, fixed wrong lines.
2015-12-30 03:25:58 -06:00
Blake Grotewold 0f73054faf Add Thai to README 2015-12-30 03:25:03 -06:00
Blake Grotewold 2ebae56dc5 Merge pull request #451 from pacharan/master
Thai translation.
2015-12-30 03:23:25 -06:00
pacharan e0b1d3800a add Thai translation 2015-12-26 23:38:01 +07:00
Blake Grotewold 9943c4c568 add confirm hyper
lets the user know what hyper mode is, and confirms turning it on.
Updates .pot to match current source.
2015-12-22 16:41:10 -06:00
pacharan 2c2436e63e add Thai translation 2015-12-21 13:46:11 +07:00
pacharan 92e7ef83af add Thai translation 2015-12-21 13:44:17 +07:00
Mirat Can Bayrak 7df8efb380 Added missing Turkish translations. 2015-12-20 14:14:58 +02:00
Sang-gi Lee 0db5bf3dec Update Korean translation 2015-12-11 16:40:24 +09:00
Michael Townsend c66d484627 Added import/export tracking 2015-12-04 10:57:16 -05:00
Michael Townsend 78bf47bfa1 Merge pull request #445 from satakieli/patch-3
Update strings.po / fixed Swedish translation
2015-11-10 10:17:33 -05:00
Continuities fba203cea1 conversion tweaks 2015-11-09 18:36:55 -05:00
Anna Robbins 3ef2b22e99 Update strings.po
Proofed and updated up until line 450
2015-10-28 16:06:10 +01:00
Blake Grotewold 3849f7871f Merge pull request #444 from tom76kimo/patch-1
Update link of Traditional Chinese
2015-10-23 01:05:34 -04:00
Tom Wu d5e317836a Update link of Traditional Chinese
The link should be `zh_tw`
2015-10-23 11:45:02 +08:00
Michael Townsend ecd391ff6a Merge pull request #442 from uasi/ja-fix-typo
Fix typo in Japanese translation
2015-10-10 10:51:31 -04:00
Tomoki Aonuma bad5e58cc9 Fix typo in Japanese translation 2015-10-10 23:44:47 +09:00
Michael Townsend da289ea1d7 Update main.css 2015-10-05 12:41:46 -04:00
Akai Alonkai 55b5c3e1e7 Removed background-color for config lists.
Background colors for unordered list in options were set to match body.
This created a problem during and after the space game when the body and
text were inverted, but the ul was not. See Issue #432.

Tried this via Chrome's dev tools while at the effected screen in dark
theme, and it seemed to work.
2015-09-22 10:47:50 -04:00
Blake Grotewold 0f243637a1 Merge pull request #435 from TwistedAkai/master
Made fur gambling return fur.
2015-09-20 16:36:40 -04:00
Akai Alonkai 95057c9704 Made fur gambling return fur.
Function was paying out in wood, not fur, contrary to notification text.
2015-09-20 16:32:54 -04:00
Michael Townsend b533f86d2a Merge pull request #433 from ngosang/spanish_translation
Update Spanish translation
2015-09-18 09:54:43 -04:00
ngosang b700c4b9f5 Update Spanish translation 2015-09-17 23:57:38 +02:00
Michael Townsend 6670a9ce09 Merge pull request #431 from ngosang/test2
Update all strings.js
2015-09-17 16:52:52 -04:00
ngosang b5db2b558d Update all strings.js 2015-09-03 10:03:31 +02:00
Michael Townsend 94fea5a3a8 Merge pull request #429 from bdorer/master
de: updated German language files
2015-08-18 22:13:32 -04:00
Michael Townsend 4626961286 Merge pull request #428 from JeanAraujo/master
Update PT-BR Translation
2015-08-18 22:13:11 -04:00
bdorer1 5aa5748ddd de: updated German language files 2015-08-19 00:08:22 +02:00
Jean Araujo 066a34b125 Update strings.js 2015-08-12 14:29:20 -03:00
Jean Araujo 75324a5240 Update strings.po 2015-08-12 14:28:18 -03:00
Continuities a0b343246c Code style 2015-08-02 11:40:27 -04:00
Michael Townsend 64f6797c3e Merge pull request #425 from Sebring/master
Showing total in stores tooltip - Issue #170
2015-08-02 11:36:57 -04:00
Sebring 1e37f45530 Display time delay on total row in tooltip 2015-07-29 20:08:09 +02:00
Sebring 100ff277ff Styles for total in tooltip 2015-07-29 16:59:16 +02:00
Sebring fea54cd97f Add total to tooltip 2015-07-29 16:57:26 +02:00
Blake Grotewold 95cf44c2f2 Fix removeBranch function definition 2015-07-25 20:23:35 -04:00
Blake Grotewold 3cbb049a7e Update Russian and French translation .js files 2015-07-24 22:18:32 -04:00
Ricky Chandra e504e79cd0 Add Indonesian translation 2015-07-24 22:10:34 -04:00
Yuki Usagi 075ac8934e Add Traditional Chinese
Consolidation of 97bb59e f177db4 35eff47 51197a3

Closes #421
2015-07-24 22:05:45 -04:00
Blake Grotewold 4159febc77 Merge pull request #422 from TeddyBear06/patch-1
Update strings.po
2015-07-24 21:38:11 -04:00
Blake Grotewold e23550c1a0 Merge pull request #419 from Anwinz/patch-2
Update strings.po
2015-07-24 21:36:49 -04:00
Ludovic 98682e1b24 Update strings.po
Fix some typos mistakes.
2015-07-22 17:34:57 +02:00
Anwinz 62ad16e4b8 Update strings.po 2015-07-07 21:49:53 +03:00
Andrea Rendine 65d7cfd784 Hyper-proof cooldown state
Kept the distinction between "argument" time and script time. I called the latter "time" instead of "milliseconds" because, well, it's just tenth of seconds.
Residual timeout is always stored in "nominal" time, not adjusted by hyper. I.e. if a button has a nominal timeout of 60 seconds and half cooldown had expired on reload, residual is stored as 300. In cooldown, Engine.setInterval makes the time flow with double speed
2015-06-29 12:49:57 -04:00
ekgr a923c1c0bd Added a Greek translation 2015-06-28 18:05:56 -04:00
Masaki KOBAYASHI ed837f3aec fix typo 2015-06-28 14:56:31 -04:00
Andrea Rendine 03fae08ff2 Compass relocation
This commit carries some changes.
* the compass is now a "special" item, not "good". It allows a different placing
* Store block is now divided into 2 parts. All the script is adapted to make room for it, including empty block check and insert animation for the new #store children divs
** Above: stackable storable items (resources), whose tooltip shows updated income/consumption rates
** Below: special storable items. As of now, it only contains the compass. Special block has a special style, with some distance from resources block if that one exists.
* Compass row has an empty tooltip which is filled in by World
2015-06-28 14:27:37 -04:00
Andrea Rendine 7208b845b1 Take all, take everything, leave if possible
Multiple fixes:
1. take all of a kind
2. take everything
3. if possible, leave
4. drop menu on hover
5. Same item not shown as drop option
2015-06-27 02:13:14 -04:00
Andrea Rendine da0d39b579 Check for delayed events
This triggers onload for all those events whose (possible) reward is registered with a time delay.
2015-06-27 01:43:09 -04:00
Andrea Rendine cb717b41d0 function for fire hut event and more
Effect of hut fire is associated with new Outside method .destroyHuts().
2015-06-27 00:44:26 -04:00
Blake Grotewold 09c070adfa Make tooltips in Lights off not so black 2015-06-27 00:42:23 -04:00
Andrea Rendine 358fe5fbcc Restore navigation property
Instead of a timed method to restore lx/rx navigation, a property will be set to true. In that case, the keyup method will not be executed, but it will restore navigation for further use.
2015-06-27 00:26:41 -04:00
wmassingham f94cfe2590 disable tab navigation during events (fixes #403) depends on @AndySky21's branch world-to-path 2015-06-27 00:26:40 -04:00
Andrea Rendine 08bd1c7caf Single letter representations for enemies
R wild animals (beast, birds, lizards, rats)
T mutated creatures (includes giant lizards)
E human enemies (old men, scavengers, thugs and squatters)
D armed human enemies (includes vigilantes, soldiers, snipers, commandos, veterans and chiefs)
2015-06-27 00:26:40 -04:00
SVS 1d2f95b561 Change the enemy labels 2015-06-27 00:26:40 -04:00
Andrea Rendine daf5de3973 Property for tab navigation
Added Engine.tabNavigation property. When true, it enables keyboard navigation to/from tabs. It is disabled on world and enabled some milliseconds after Path.onArrival(), so that when player returns s/he finds him/herself on Path tab instead of navigating.
2015-06-27 00:26:40 -04:00
Andrea Rendine 64a02c162c Modified command destination for save
Export dialog replaces selection dialog, rather than overlapping it.
Closing it exits the panel and returns to current game.
Aborting Import dialog returns the player to the selection screen, so that s/he can save before trying to load.
2015-06-26 23:49:30 -04:00
Andrea Rendine c4535c029a Alphabetical order for workers
I had missed this completely. Workers are listed in alphabetical order in English. Now they are ordered in other languages too.

Alphabetical order for outfit
2015-06-26 23:42:11 -04:00
Blake Grotewold 7babe5d102 Clean up Available Lanaguges
In my never ending fight against the readme. This is my next iteration
2015-06-26 23:30:46 -04:00
Andrea Rendine 92f7cf683e Unified legend
Legends on boxes and lists are currently added via CSS and as stylesheets cannot be localised, translated strings rely upon an additional inline CSS.
This commit inserts localised legends as "data-legend" attributes on proper elements, and then this attribute is shown by stylesheet rule content: attr(data-legend). No need of localisation script and more compact CSS rules.
2015-06-26 22:10:02 -04:00
Andrea Rendine 93649307f6 Non-overlapping up/down buttons
Fixed dimensions and margins for up/down arrows.
2015-06-26 21:54:41 -04:00
Andrea Rendine 8306f155f1 Notifications for outside events
As said in #363, there are almost no notifications for outside events.
I took a little liberty to suggest new sentences. Inspired by the game atmosphere and the double notification for Hut Fire, wrote lines for events and possible outcomes.
they're associated to buttons where there are no outcome scenes.
2015-06-26 21:31:20 -04:00
Blake Grotewold 4fed30380f Merge pull request #414 from ekgr/master
Changed size of languages menu (issue#413)
2015-06-21 13:44:14 -04:00
ekgr 4724aaf6e3 Changed size of languages menu
The Portuguese (brazil) option was too long and wrapping around to the next line, appearing right over the next language in the menu. Increased the width to accommodate in one line. Also increased the max height as the last language option wasn't visible. The menu can take one more language before needing to increase the height.
2015-06-21 17:25:47 +02:00
Blake Grotewold d5bbca90a4 Merge pull request #412 from JMRedford/patch-1
Change Plague events to take half of population.
2015-06-14 22:44:15 -04:00
John Redford ee591ca218 Update outside.js
Changed sickness event to kill up to half of the villagers instead of up to 20.
2015-06-14 00:47:08 -05:00
mac craig 612d247709 Create contributing.md
Creation of the contributing.md file to set rules and guidelines for future or current contributors.
Let me know if you want me to set out some basic contributing guidelines, or if the owner has anything in mind.

See the links below for information on contributing.md
https://github.com/blog/1184-contributing-guidelines
https://guides.github.com/activities/contributing-to-open-source/
2015-06-13 17:33:33 -04:00
Blake Grotewold 2d207e55c1 Update Brazilian Portuguese
Change from fall to drop.
2015-06-13 17:27:19 -04:00
Luan Haddad d4d4cec489 Add Brazilian Portuguese (pt_BR) 2015-06-10 19:50:42 -04:00
Blake Grotewold 5dbe98f0f1 Merge pull request #406 from derwilly/master
updated string.po
2015-06-08 15:38:58 -04:00
Ferdinand S. 8d38513798 updated string.po
fixed typo in line 875. "villeicht" -> "vielleicht"
2015-06-05 18:06:01 +02:00
Blake Grotewold 84577047a6 Merge pull request #391 from AndySky21/ship-title
Ship tab title
2015-05-29 10:12:08 -04:00
Blake Grotewold c611fcea8c Merge pull request #394 from youknowone/master
Update localization for ko
2015-05-27 14:35:39 -04:00
Andrea Rendine f219b3288f Single letter representations for enemies
R wild animals (beast, birds, lizards, rats)
T mutated creatures (includes giant lizards)
E human enemies (old men, scavengers, thugs and squatters)
D armed human enemies (includes vigilantes, soldiers, snipers, commandos, veterans and chiefs)
2015-05-27 14:28:12 -04:00
SVS 8d3b313e9c Change the enemy labels 2015-05-27 14:25:21 -04:00
Andrea Rendine 77bff9c289 Update IT Save translation 2015-05-27 13:06:48 -04:00
Jeong YunWon 4824b0a847 Update localization for ko 2015-05-23 00:52:57 +09:00
Andrea Rendine acca5806b5 Ship title
Browser "title" is not translated when Ship tab is active.
2015-05-18 23:15:18 +02:00
Andrea Rendine c158f35b82 Merge pull request #10 from doublespeakgames/master
Update 2015-05-18
2015-05-18 17:24:32 +02:00
Andrea Rendine de705e4a5e Load event before anything else
An event could produce different notifications or rewards according to different outcomes of the event itself (e.g. a negative event impacting on buildings and/or villagers, or a wanderer leaving items of some specific kind), but the notification is generated before the onLoad() call.
I'd say that this is the best action order:
1. event action
2. event notification
3. event reward (and possible additional notifications due to that)
2015-05-13 12:08:00 -04:00
Andrea Rendine ebf5e6934e Correct DOM positions for village, store, perks box
I noticed a minor glitch with the Village box position in the DOM. As it is appended to the Outside panel, it can end up after the Wood gather button or after the Traps check. It depends on whether the latter exists or not.
I changed it a little. Now it is "prepended" (thanks jQuery!), so it's always before any other content in the panel.
It would mind e.g. for CSS consistency, as you could decide to use a style for sibling buttons and it wouldn't work unless the box is placed before or after (not between) them.

For consistency with Outside box placement issue, stores are prepended to the Room panel, as first content in the DOM tree.

For consistency with Outside box placement issue, perks are prepended to the Path panel, as first content in the DOM tree.
2015-05-13 12:01:32 -04:00
Andrea Rendine 94936f118d Stores visibility outside room
A z-index CSS property on #stores now allows it to remain on top of the tabs layers, so that hovering always works.
2015-05-13 11:50:54 -04:00
Travis Weston 8c368d363a Add take all button 2015-05-13 11:35:25 -04:00
Andrea Rendine 8f8425deb5 Merge pull request #7 from doublespeakgames/master
Update 2015-05-11
2015-05-11 19:05:50 +02:00
Blake Grotewold 66054c2825 Merge pull request #373 from youknowone/l10n-ko
more localization + fix errors +  quality work for ko
2015-05-11 10:40:59 -04:00
Blake Grotewold 95a3b68e12 Add background color to language select menu
This helps readability when language box overflows stores box
2015-05-11 10:40:11 -04:00
Blake Grotewold 9f8fa6c121 Update RU string.js 2015-05-11 10:31:11 -04:00
Дмитрий Свечников 6a9647c364 Fix some RU tranlations 2015-05-11 10:21:19 -04:00
Andrea Rendine fb13f6e808 Notification before reward
Noticed when buying the compass.
I found it weird that *first* the compass points and *then* it appears in good condition.
Now event notification precedes event reward, and it should be corrected.
2015-05-11 10:16:43 -04:00
Andrea Rendine 288f738a71 Merge pull request #6 from doublespeakgames/master
Add missing Hyper Mode pieces
2015-05-11 15:12:38 +02:00
Blake Grotewold 7fd474d3c0 Add missing Hyper Mode pieces
Some code was missing from the Hyper Mode feature addition. This
completes the use of `Engine.setTimeout` and adds doubleTime check in
button cooldowns.

Closes #374
2015-05-10 18:14:13 -04:00
Jeong YunWon dd17e716a8 more localization + fix errors + quality work for ko 2015-05-09 18:01:22 +09:00
Andrea Rendine 7cda58f947 Merge pull request #5 from doublespeakgames/master
Update 2015-05-08
2015-05-08 18:50:10 +02:00
Blake Grotewold 9cb94cb9c0 Add new KO string.js 2015-05-08 08:28:23 -04:00
Blake Grotewold 65f3d449de Merge pull request #369 from youknowone/master
Fix a lot of errors in ko translation
2015-05-08 08:21:11 -04:00
Andrea Rendine aef4bfb4e4 Add hut fire title and update IT translations for fire title and leave
Added translation for Fire title to template
Added Italian translation for Fire title

Leave

Translation of "leave" sounded like the player were abandoning something on the ground, which is correct only sometimes.
Fixed
2015-05-08 08:15:12 -04:00
Jeong YunWon 23b26b8ca1 Fix a lot of errors in ko translation 2015-05-08 13:51:28 +09:00
Andrea Rendine aa2e24e559 Merge pull request #4 from doublespeakgames/master
Update 2015-05-07
2015-05-08 00:13:37 +02:00
Blake Grotewold 3f71fe1f8b Merge pull request #365 from wxfskylove/master
Updated Chinese translation
2015-05-07 08:26:45 -04:00
Skylove e315839d41 Updated translation
Add hut fire event translation.
2015-05-07 14:20:54 +08:00
Andrea Rendine ad8e32ee56 Shortening IT translations
Shortened translations for bolas and lodge, so the button has a single line.
2015-05-06 15:47:28 -04:00
Andrea Rendine 714dd65982 Merge pull request #3 from doublespeakgames/master
Update 2015-05-06
2015-05-06 20:45:56 +02:00
Blake Grotewold 3b261c5dbf Merge pull request #357 from apricote/master
Fix #335
2015-05-05 10:39:02 -04:00
Julian Tölle 5f58372579 Added whitespace for traps in german translation
Even though the .po file contains the correct whitespace in the german
translation for the messages ('the traps contain [...] ' and ' and '),
they were not present in the .js file.
2015-05-05 16:32:44 +02:00
Andrea Rendine d6b5ffc0ad Merge pull request #2 from doublespeakgames/master
Update 2015-05-04
2015-05-04 16:21:08 +02:00
Michael Townsend 33e1da6137 Merge pull request #343 from AndySky21/hut-fire
Hut fire Italian translation
2015-05-04 09:52:13 -04:00
Michael Townsend 4e5a5fd7d3 Merge pull request #350 from AndySky21/pot-doc
Commentary
2015-05-04 09:51:39 -04:00
Blake Grotewold fba2dfb680 Merge pull request #348 from AndySky21/Readme-lang-table
Languages table
2015-05-03 22:13:45 -04:00
nicholas_pellizer 8320156f42 Hyper mode and LightsOff is now stored in the State 2015-05-03 22:09:49 -04:00
Andrea Rendine 56aaf55b72 Merge pull request #1 from doublespeakgames/master
Update
2015-05-01 14:18:07 +02:00
Andrea Rendine 644b975a37 Bait fix
Bait doesn't need plural in english but in other languages the plural could be used (in mine, for example).
2015-05-01 00:24:19 +02:00
Andrea Rendine 97021aa62d Commentary
Added comments for:
 - troublesome context
 - verbs/nouns trouble (english is quite full of homographs, you know)
 - commands and buttons (they want imperative)
 - battle buttons (attack => weapon)
 - counters and strings with references
 - strings with relevant leading/trailing spaces
 - acronyms and short forms
 - troublesome genders (A Mysterious Wander issue)
2015-05-01 00:16:12 +02:00
Andrea Rendine d458b1cd2b Impersonal verbs, translation fix and bait
See po file
2015-04-30 22:44:29 +02:00
Andrea Rendine d3c51746c7 Bait fix
Plural like scales and teeth
2015-04-30 22:42:34 +02:00
Andrea Rendine 6a0c6f6763 Impersonal verbs
Now all notifications starting with "learned" or similar direct but impersonal forms have been fixed with impersonal Italian forms.
Even more translation corrections here and there.
Note 1: A Mysterious Wanderer has been translated with plural. It refers to both the male wanderer craving for wood, and the female wanderer looting your fur. In italian the gender must be specified, so the notification with either male or female form cannot be chosen. Plural avoids confusion, just suggesting that either event has happened.
Note 2: This translation contains the text related to hut fire event (still missing).
2015-04-30 22:16:01 +02:00
Michael Townsend f85b8fdf7e Merge pull request #349 from AndySky21/patch-1
Fixed variable name
2015-04-30 11:38:42 -04:00
Michael Townsend d2bd08dcb1 Merge pull request #345 from AndySky21/stores-az-sorting
Stores alphabetical sorting
2015-04-30 11:38:12 -04:00
Andrea Rendine f0e0548116 Var
Working ina hurry is bad.
2015-04-30 17:27:50 +02:00
Andrea Rendine 4efebe4f66 Var
Working in a hurry is bad.
2015-04-30 17:26:56 +02:00
Andrea Rendine 4efb22b890 Fixed variable name
Actually in this case "name" is used in a function and is not necessary for lookups, but I think that if future changes to both room.js and outside.js occur, authors will appreciate consistency in scripts (also fixes indentation in comments).
2015-04-30 17:11:24 +02:00
Andrea Rendine dca3faa2f9 Fixed variable name
"k" still refers to the English string, while "lk" carries the translated value.
2015-04-30 16:57:18 +02:00
Michael Townsend 5c37074c2d Merge pull request #346 from AndySky21/buildings-az-sorting
Buildings alphabetical sorting
2015-04-30 09:45:26 -04:00
Michael Townsend c725b58c1a Merge pull request #344 from AndySky21/hut-fire-pot
Added hut fire event original strings
2015-04-30 09:42:01 -04:00
Michael Townsend 42c81cd5db Merge pull request #342 from AndySky21/It-fix
Italian translation fix
2015-04-30 09:41:01 -04:00
Michael Townsend d30b4e2ff7 Merge pull request #347 from AndySky21/income-on-load
Correct jobs incomes on load
2015-04-30 09:39:22 -04:00
Andrea Rendine c2f8ac89fa Correct jobs incomes on load
Currently, when a game is loaded, job production/consumption rates in tooltips are shown based on the unit, rather than multiplied by the employed village number. Incomes are then corrected when the numbers change.
With the initial call of updateVillageIncome() function, the correct numbers are displayed when the game is opened and loaded.
2015-04-30 00:01:36 +02:00
Andrea Rendine 9c1ebecda7 Buildings alphabetical sorting
The bulk of this small change was to sort buildings by alphabetical order according to translated names, instead of english strings.
This meant removing the ID splitting as well as hyphen/space replacing, as the ID is not considered for the test.
Also changed:
1. line 366: as the original english string is no longer necessary in the iteration, "name" takes the value of translated string. "name" is then used for alphabetical comparison (as before) with the right value.
2. line 378: removed the test on curPrev variable. Items already listed have been placed in alphabetical order, so there is no need to check whether each item actually follows value of control variable.
2015-04-29 23:52:58 +02:00
Andrea Rendine 8042414be7 Stores alphabetical sorting
The bulk of this small change was to sort stores by alphabetical order according to translated names, instead of english strings.
This meant removing the ID splitting as well as hyphen/space replacing, as the ID is not considered for the test.
Also changed:
1. line 800: as the original english string is no longer necessary in the iteration, k takes the value of translated string. k is then used for alphabetical comparison (as before) with the right value.
2. line 816: removed the test on curPrev variable. Items already listed have been placed in alphabetical order, so there is no need to check whether each item actually follows value of control variable.
2015-04-29 23:43:43 +02:00
Andrea Rendine fc089c808c Added hut fire event original strings
Although there was a previous commit referring to it, in POT file the strings related to "hut fire event" were not present.
I added them at the end of the file, with reference to original positions in Outside.js.
2015-04-29 23:19:34 +02:00
Andrea Rendine e65a8e7c5a Hut fire event added for real
Hut fire event strings added for further development
2015-04-29 23:12:32 +02:00
Andrea Rendine 425ce30ceb Hut fire event added for real
A previous commit referred to "Hut fire event", but the strings were not available.
Now they have been inserted.
2015-04-29 23:06:34 +02:00
Andrea Rendine 4dd0af9f01 Typo fix 2015-04-29 23:03:16 +02:00
Andrea Rendine d4312385d4 Italian translation fix.
Original for documentation.
2015-04-29 23:01:39 +02:00
Andrea Rendine a1092170c7 Italian translation fix.
Sentences corrected for length and sense.
2015-04-29 22:59:12 +02:00
Andrea Rendine 31c4d3a816 Languages table
Changed table using markup in order to correct the divided heading cell.
2015-04-29 22:52:30 +02:00
Arnaud Panapadeatchy c3f7b620f5 Fix French translation 2015-04-25 12:01:23 -04:00
Arnaud Panapadeatchy 0c2dc6c905 Add more French translations 2015-04-24 09:40:35 -04:00
Michael Townsend 3cc2b708cb Merge pull request #328 from cjhooker/bigger-quantity-adjust-buttons
Make quantity-adjust buttons bigger
2015-04-18 19:40:26 -04:00
Chris Hooker 165f2d1dd0 Make quantity-adjust buttons bigger 2015-04-18 15:10:13 -04:00
Michael Townsend 909894cb50 Update engine.js 2015-04-16 10:17:59 -04:00
Michael Townsend 1abb3588e6 Update index.html 2015-04-16 10:17:20 -04:00
Michael Townsend 446811b638 Update README.md 2015-04-16 10:13:33 -04:00
Michael Townsend 16f2e1f118 Merge pull request #327 from codeskull/master
Typo (ru)
2015-03-23 10:03:35 -04:00
Cyril 614df477a0 Typo 2015-03-23 11:45:34 +03:00
Blake Grotewold dfe9f19565 Update so that linguist reads ADR as JS 2015-03-18 16:04:34 -04:00
Michael Townsend 9361913bea Merge pull request #241 from jwvg0425/patch-2
I have no way of verifying this text, so I'm just gonna trust you!
2015-03-10 10:48:30 -04:00
Nam Hyeon Uk ae0f146008 Fixing Text
Fixing some text
2015-03-10 14:02:33 +09:00
Michael Townsend c1182fdb47 Merge pull request #240 from jwvg0425/patch-1
mistranslation
2015-03-09 09:53:49 -04:00
Michael Townsend 0fa44cfc55 Merge pull request #239 from fabrice31/master
French: Fixing texts + Complete translations
2015-03-07 00:40:35 -05:00
Nam Hyeon Uk 7d8367d407 mistranslation
I think "{0} per {1}s" means "{0} per {1}seconds". maybe that's a mistranslation.
2015-03-07 13:25:30 +09:00
Fabrice Bournisien 67571851b1 French: Fixing texts + Complete translations 2015-03-04 22:37:33 +01:00
Blake Grotewold 0bd474d2fd Merge pull request #238 from hano/master
Typo
2015-03-02 13:46:54 -05:00
hano c9900d7b91 Typo 2015-03-02 14:10:53 +01:00
Sebastian Korotkiewicz 2e7ccccf40 new readme
Closes #167
2015-02-25 11:36:01 -05:00
Blake Grotewold f998c270da Merge anubisthejackle:issue115
Closes #115
Closes #224
2015-02-14 17:14:22 -05:00
Blake Grotewold 5fcd897b17 Merge pull request #230 from anubisthejackle/issue229
Fix negative gatherers
2015-02-12 12:52:09 -05:00
Travis Weston 7333d03dbb Use Outside.killVillagers to kill villagers 2015-02-12 12:45:27 -05:00
Travis Weston 6ee6470972 Merging updates 2015-02-11 18:55:27 -05:00
Travis Weston 340851a99d Updated against suggestions 2015-02-11 18:21:08 -05:00
Michael Townsend 7c978f4f15 Merge pull request #226 from Continuities/convensions
Add convention pieces. jshintrc and gitattributes
2015-02-10 10:59:53 -05:00
Blake Grotewold 06b281fd3c Remove explicit line endings 2015-02-10 10:57:10 -05:00
Blake Grotewold eee2bffaf0 Add convention pieces. jshintrc and gitattributes 2015-02-10 09:59:00 -05:00
Travis Weston f2b8ad6268 Merge remote-tracking branch 'upstream/master' into issue115
Conflicts:
	script/outside.js
	script/path.js
2015-02-10 07:11:10 -05:00
Blake Grotewold c87541b8b9 Merge pull request #222 from anubisthejackle/issue80 2015-02-09 19:37:10 -05:00
Travis Weston 6e044292ae Add in doubleTime capabilities
Add hyper / classic to menu
2015-02-09 19:31:24 -05:00
Blake Grotewold 5d921d9464 Merge pull request #204 from rgravina/188_fix_jshint_warnings 2015-02-09 19:25:08 -05:00
Robert Gravina 67b3c7fb7e Low-risk fixes suggested by JSHint. 2015-02-09 19:20:29 -05:00
Blake Grotewold afe1230691 Merge pull request #225 from anubisthejackle/master
Limit Fire event to only Outside module
2015-02-09 11:06:19 -05:00
Travis Weston 25b2fbfa5f Limit Fire event to only Outside module 2015-02-08 22:33:18 -05:00
Travis Weston 8010597e44 Add hut fire event.
Closes #35
2015-02-08 11:23:32 -05:00
Michael Townsend 0334219d9f Merge pull request #219 from voldedore/add_new_lang_vi
Translation: Vietnamese
2015-02-07 19:13:50 -05:00
Travis Weston 2d3daa572d Move movement functions to Engine. Create scrollable Path sidebar 2015-02-07 14:00:32 -05:00
vinh v 619ee8c2cb Vietnamese translation: css mod
larger button because of long text.

.button{width: 100px !important;}
-->
.button{width: 120px !important;}
2015-02-07 19:17:52 +01:00
Blake Grotewold fca371f8d8 Merge pull request #223 from yuanyelele/master
update adarkroom.pot and zh_cn translation
2015-02-07 13:12:29 -05:00
Travis Weston 3d00ed3c40 Add scrolling via keyboard 2015-02-07 11:19:37 -05:00
vinh v 9bc9f5d055 Vietnamese translation: Capitalization fixed 2015-02-07 17:05:24 +01:00
袁野 518b47b483 update zh_cn translation
Signed-off-by: 袁野 <yuanyelele@gmail.com>
2015-02-07 22:49:36 +08:00
袁野 ba1b914e1d update translation template adarkroom.pot
Signed-off-by: 袁野 <yuanyelele@gmail.com>
2015-02-07 20:24:56 +08:00
Travis Weston 29932a96f3 Merge pull request #1 from anubisthejackle/issue35
Remove ^M from file because to heck with them.
2015-02-06 16:04:51 -05:00
Travis Weston 5fcdf29601 Remove ^M from file because to heck with them. 2015-02-06 16:02:37 -05:00
vinh v e3da87ed56 Translation: Vietnamese (fix some words) 2015-02-06 00:21:17 +01:00
vinh v ed5a0ea080 Translation: Vietnamese 2015-02-05 23:47:03 +01:00
Blake Grotewold 7f59e166de change bokmål to just norsk, until we must specify 2015-02-03 14:30:54 -05:00
jangerhard 3b4383f9b3 Translation: Norsk 2015-02-03 14:30:07 -05:00
Michael Townsend a119d5e655 Merge pull request #216 from garykrige/master
Update scoring.js
2015-01-28 15:05:43 -05:00
Gary Krige 6f2a705479 Update scoring.js
Fix verbose code
2015-01-28 21:58:36 +02:00
Blake Grotewold 48b15c1c5d Merge pull request #212 from crafteverywhere/patch-1
Corrections to the previous Chinese translations.
2015-01-18 20:36:28 -05:00
crafteverywhere 2e6cc87357 Update strings.js 2015-01-18 17:18:38 +08:00
crafteverywhere 4adce0f2d9 Corrections to the previous Chinese translations. 2015-01-18 16:10:58 +08:00
Blake Grotewold fd2181a104 Merge pull request #203 from MtCedarNet/Japanese-translation
Japanese translation
2015-01-06 23:37:52 -05:00
Alex Liebscher 5d12670979 Prevent negative HP
Closes #201
2015-01-05 01:38:35 -05:00
Blake Grotewold 516afb6037 Merge branch 'pr/205' 2015-01-05 01:02:33 -05:00
mac craig 6e43c06ff2 Add English as an "Available Language"
Added English in the available languages chart, since technically English is a playable language.
2015-01-05 00:58:30 -05:00
MtCedarNet 6774cdbac4 Improved Japanese translations. 2015-01-04 23:48:04 +09:00
MtCedarNet 464cfab7ac Change language name 'Japan' to 'Japanese'. 2015-01-04 23:46:40 +09:00
Blake Grotewold 94fdcc7463 Add buy medicine button to plague event.
Because there is a serious need for medicine, the price
is raised with this button. I felt like it should be even
higher but this will do for now.

Closes #199
2015-01-03 09:40:16 -05:00
Blake Grotewold dbd2adf9f8 add Github to menu bar
People should know that this great game is something
they can contribute to.

Closes #198
2015-01-03 09:26:48 -05:00
Blake Grotewold 1b04fa2086 Remove big TODO in engine
This was actually completed in #50 and was never removed.

Closes #45
2015-01-03 09:12:56 -05:00
Blake Grotewold 2efa9f1667 Merge pull request #196 from rgravina/162_save_path_outfit
Include state of Path outfit in save game
2014-12-24 10:27:40 -06:00
Robert Gravina 72a83d48dd Save the state of the path outfit in the State object.
Load the state when initialising the path screen. When embarking, make sure to clear the state. On arrival, update the saved state.

This enables save/load of the path state in the save game if it occurs before leaving.
2014-12-25 00:06:37 +09:00
Blake Grotewold 4201652e8f transfer Japanese strings.js 2014-12-08 15:39:30 -05:00
Blake Grotewold 073ef28a08 Correct Portuguese ISO 629-1 code. 2014-12-08 15:35:04 -05:00
Blake Grotewold 4a2c2934b2 Correct Japanese ISO 639-1 code 2014-12-08 15:33:21 -05:00
Michael Townsend a65210a169 Merge branch 'erica-scott-James_BRANCH' 2014-12-07 17:14:10 -05:00
Michael Townsend d93d2fdff9 fixing merge conflicts 2014-12-07 17:12:46 -05:00
jat023 efe8120ed3 Update language menu system 2014-11-28 10:39:40 -08:00
jat023 ad79b3ad43 New Menu style (Table format) 2014-11-28 10:37:45 -08:00
jat023 9b40c995c2 Merge branch 'EricaBranch' into James_BRANCH
Conflicts:
	README.md
2014-11-28 10:36:11 -08:00
erica-scott 327a9a1a37 Actual Finished Language display 2014-11-28 10:35:35 -08:00
erica-scott d1d81b8dd0 Finished New Language Display Idea 2014-11-28 10:33:26 -08:00
erica-scott 3b66bb69f5 Testing Language Display2 2014-11-28 10:31:58 -08:00
erica-scott 9b88143608 Testing Language Display 2014-11-28 10:26:54 -08:00
erica-scott 0030b1360f More Edits 2014-11-28 10:22:22 -08:00
erica-scott fc545204e3 Edit Language Display 2014-11-28 10:19:57 -08:00
erica-scott 170719f5b3 Trying new way to display languages 2014-11-28 10:16:51 -08:00
jat023 fb61ba1586 Updated lang.js
Added italian and japanese to javascript pop up menu in game
2014-11-28 10:14:29 -08:00
jat023 506ff9dc98 finished japanese translation 2014-11-28 09:45:49 -08:00
jat023 be3b8bbb47 Re 2014-11-28 09:40:11 -08:00
jat023 3e174a6140 renamed pg.js to strings.js 2014-11-28 09:31:55 -08:00
jat023 4e6faa8923 quotations fix in lang.jk 2014-11-28 09:29:54 -08:00
jat023 25e00f8607 Deleted unneeded files
removed cs_simplified files
updated README.md and langs.js to include pg files
2014-11-28 09:21:28 -08:00
jat023 9b500b3c5b Conversion and Translation.txt updates
Converted portugese strings.po into .js file
2014-11-26 13:39:44 -08:00
Blake Grotewold 76098f2b59 Merge branch 'pr/193' 2014-11-22 23:45:44 -07:00
Fengyang Gao 6603199060 fix minor bugs in SM 2014-11-23 10:48:26 +08:00
erica-scott 67bbe15771 Portuguese Translation Complete 2014-11-21 14:28:23 -08:00
erica-scott 7961ad6ea3 Starting Portuguese Translation 2014-11-21 09:44:09 -08:00
Blake Grotewold e7bd841d39 Add underscore to language query string regex. 2014-11-21 12:04:01 -05:00
Blake Grotewold 1dafbae5eb Correct Korean ISO 639-1 code. 2014-11-21 12:01:25 -05:00
Blake Grotewold 66c7b3e76d Update Chinese (Simplified) ISO 639-1 code 2014-11-21 11:57:00 -05:00
erica-scott d678b1933c Translation Complete 2014-11-20 13:41:06 -08:00
Blake Grotewold 94d1388b1d Prestige shouldn't contain decimals
Corrects issue of Prestige containing decimals and Infinity

Closes #69
2014-11-19 23:28:13 -06:00
erica-scott c9d7b0c007 50% Done Translation 2014-11-19 13:53:11 -08:00
erica-scott 3ca45188e5 1/3 Translation Done 2014-11-18 17:12:32 -08:00
jat023 21852088ec Started translation for Simplified Chinese
The translation is pretty basic; you just need to get Poedit and open
up the film that I have already started. After that you just translate
the lines.
I may look into reviewing some of the documentation later.
2014-11-18 12:15:41 -08:00
Michael Townsend 8284026853 Merge pull request #189 from gaofy/master
show selection color when export/import
2014-11-16 21:41:49 -05:00
Fengyang Gao ba285032f5 show selection color in textarea
Currently, you have no idea whether the text in "Export / Import" is
selected since the background is transparent.
2014-11-16 15:16:07 +08:00
Andrea Rendine 68da61e8cf Improve Italian translations
Fixed some terms for better meaning and fitting in blocks
Added note about Run as Administrator for po2js
2014-11-13 12:37:43 -05:00
Blake Grotewold 33d3dbc6a3 Merge pull request #186 from anubisthejackle/git-ignore
Add .swp to gitignore
2014-11-13 10:12:44 -05:00
Travis Weston 8a036ca1e7 Add .swp to gitignore 2014-11-12 11:54:52 -05:00
Blake Grotewold 93ffadb189 flake8 and pep257 po2js.py 2014-11-11 08:52:09 -05:00
Blake Grotewold 01f15f41f1 Correct Italian capitalization errors.
ADR doesn’t use capitalization for its storytelling.
2014-11-11 08:46:05 -05:00
AndySky21 d1f18a399c Update strings.js
debug typo fix: space after _("the traps contain")
2014-11-11 08:27:23 -05:00
AndySky21 e33da9d9e6 Italiano: Add Translations
Closes #180
Closes #153
2014-11-10 18:46:15 -05:00
Michael Townsend 940a19c68b Merge pull request #179 from AndySky21/patch-3
Update README.md
2014-11-10 16:53:27 -05:00
AndySky21 295cad1a91 Update README.md
Added Italian
2014-11-10 22:52:26 +01:00
Michael Townsend fd89dbc200 Merge pull request #178 from AndySky21/patch-2
Update translation.txt
2014-11-10 16:51:16 -05:00
AndySky21 1749b08c15 Update translation.txt
integration to Windows howto + typo fix
2014-11-10 22:50:19 +01:00
Michael Townsend 64e193666d Merge pull request #177 from ThiloVoigt555/german_translation_update
German translation update
2014-11-10 13:28:49 -05:00
ThiloVoigt555 6c97b90d85 Updated German translation 2014-11-10 19:22:03 +01:00
strollhy ea2415650b Update language for Chinese
Fix/Correct Chinese translations for the game. Making them more
accurate.

Closes #173
2014-11-09 17:52:33 -05:00
Blake Grotewold 6b3c651036 Merge pull request #175 from AndySky21/patch-1
Update translation documentation
2014-11-09 08:44:53 -05:00
AndySky21 d15536614d Update translation.txt
correction: the folders' name are lang/{language_code}
2014-11-09 14:36:17 +01:00
ThiloVoigt555 ba5bb193aa Added some new translator comments about whitespaces 2014-11-06 16:07:59 +01:00
Michael Townsend 97b4024382 Merge pull request #172 from Continuities/language-select-fix
Fix cross-browser support for language select
2014-10-28 16:38:17 -04:00
Blake Grotewold dc7afcbd75 Fix cross-browser support for language select
This fixes cross-browser support for the language select box by
replacing it with a custom menu box.
2014-10-28 16:30:57 -04:00
ThiloVoigt555 b512153d73 Add TRANSLATORS comments
This will better help the translators as they complete the difficult task
of taking one language and finding commonality in another.

Closes #165
Closes #161
2014-10-28 10:15:09 -04:00
Olexandr Nesterenko b3e094694b Add 'not enough sulfer' and 'bayonet' to localization 2014-10-28 09:58:14 -04:00
Blake Grotewold 6de6b3f746 Merge pull request #169 from sungwoncho/master
Korean: Add translation
2014-10-27 14:34:05 -04:00
Sung Won Cho 08c07e1e3c Add Korean translation 2014-10-25 19:33:50 +11:00
Michael Townsend 7711b2a1cc Merge pull request #166 from honzi/master
Alphabetize language links
2014-10-17 21:10:12 -04:00
Jan Hořava 93962c71e4 Alphabetize language links 2014-10-17 17:17:51 -07:00
Blake Grotewold 94c91b564b Merge pull request #163 from ThiloVoigt555/code-cleanup-translation
Add strings.js file for german.
2014-10-09 08:25:15 -04:00
ThiloVoigt555 40b3ef3a8b Added the missing strings.js file for german. 2014-10-09 12:37:27 +02:00
ThiloVoigt55 fbf8707f81 German: Add Translation 2014-10-08 19:39:08 -04:00
Blake Grotewold b249db27fd Merge pull request #157 from Continuities/language-init-bug
Change temp and fire to take from value not text for i18n
2014-10-06 09:40:36 -04:00
Blake Grotewold 7e1ac332ac Change temp and fire to take from value not text for i18n
This change fixes the issue of the game using the text from the saved
fire and temperature states. Clean up of the game store should be done
before next release to just save fire and temperature values only in
`game.fire` and `game.temperature` respectively.
2014-10-03 09:57:17 -04:00
Blake Grotewold 3203f490fc Add Turkish to README
This adds a link to Turkish translation on README and fixes an issue
with lang.js where a merge conflict was squashed into a rebase.
2014-10-03 09:38:20 -04:00
Volkan Ongun 23a6376b9b Turkish: Add Translation
This adds the Turkish translations to the game.

Closes #145
2014-10-02 09:19:18 -04:00
Björn Bohman 89c2270cc8 Swedish: Add translation
This adds the Swedish translation to the game.

Closes #152
2014-10-02 09:06:59 -04:00
Björn Bohman 9070ae049b Translation Template: Add .pot file for better translation workflow
This completes the workflow for creating and editing translations.

Closes #154
2014-10-02 08:58:01 -04:00
Blake Grotewold bef697a6fd Merge pull request #151 from honzi/css-formatting
Improve CSS formatting consistency
2014-09-25 11:17:57 -04:00
Honza Horava bf7563755d Improve CSS formatting consistency 2014-09-24 12:09:58 -07:00
Blake Grotewold 6266f87c1d Merge pull request #150 from burunduk/master
Add -moz-selection for firefox
2014-09-24 10:30:37 -04:00
Olexandr Nesterenko 0126032a2c Add -moz-selection for firefox 2014-09-24 10:32:29 +03:00
Michael Townsend b6c8eb5e57 Merge pull request #148 from ferrybig/fixincorrectindention
Changed lines with 4 spaces to tab since not everyone uses a tab size of...
2014-09-22 14:59:21 -04:00
ferrybig f16e303bc4 Changed lines with 4 spaces to tab since not everyone uses a tab size of 4. 2014-09-22 20:51:09 +02:00
Blake Grotewold e4eb334e8a Merge pull request #147 from S-anasol/patch-1
Add missing curly to ship.js
2014-09-20 08:57:04 -05:00
Alex 442d6254dc missing curly 2014-09-20 16:32:40 +04:00
Michael Townsend 22c91819ab Merge pull request #146 from modInfo/translation
Polish translation
2014-09-10 10:10:52 -04:00
Sebastian Korotkiewicz bdfc2cb09c Polish translation 2014-09-06 13:48:15 +02:00
Michael Townsend 84bf0e285d Merge pull request #144 from burunduk/master
Fix translation
2014-09-02 09:34:53 -04:00
Olexandr Nesterenko 45a6a871df Add new strings 2014-09-02 09:11:52 +03:00
Olexandr Nesterenko 50ba59a5c6 Add «not enough meat» and fix my «compass» commit. 2014-09-02 09:01:00 +03:00
Olexandr Nesterenko 8fddd1717c Remove unused localization string 2014-09-01 17:57:02 +03:00
Olexandr Nesterenko e58089b95c Add some strings 2014-09-01 07:35:18 +03:00
Blake Grotewold 98ae663e9b Add Russian and Ukrainian to readme
This adds links to the translations and cleans up the readme some more.
2014-08-30 21:39:16 -04:00
Michael Townsend 70515d9975 Merge pull request #141 from burunduk/master
Add Ukrainian translation.
2014-08-30 17:35:58 -04:00
Michael Townsend 151ccca8e2 Merge pull request #142 from burunduk/new-string
Add new strings to localization
2014-08-30 17:35:23 -04:00
Michael Townsend 01b5661b0a Merge pull request #143 from socram8888/master
Fix some strings in the Spanish localization
2014-08-30 17:23:04 -04:00
Marcos Vives Del Sol 54d835b788 Fix typo in ES 2014-08-30 23:16:47 +02:00
Marcos Vives Del Sol d7a92707c7 Replace "constructora" with "manitas" in ES localization 2014-08-30 16:26:23 +02:00
Marcos Vives Del Sol ff7d59c88c Replace "trampa" with "trampero" for "trapper" in the Spanish localization 2014-08-30 16:14:51 +02:00
Marcos Vives Del Sol 236f74707f Replace "sulfuro" with the more common word "azufre" in the Spanish localization 2014-08-30 16:13:19 +02:00
Marcos Vives Del Sol c3c095717f Replace "compás" with "brújula" in the Spanish localization 2014-08-30 16:12:08 +02:00
Olexandr Nesterenko 2f66d79856 Fix «the compass points ...» localization 2014-08-29 09:24:19 +03:00
Olexandr Nesterenko 9d25f0f736 Fix 'energy cell'. 2014-08-28 18:18:52 +03:00
Olexandr Nesterenko 0928274a77 Fix some strings. 2014-08-28 17:59:00 +03:00
Olexandr Nesterenko 2db4e209d5 Add 'sulphur' to localization.js 2014-08-28 17:42:21 +03:00
Olexandr Nesterenko 39e00a804f Fix some strings 2014-08-26 17:06:08 +03:00
Olexandr Nesterenko 465c636b5d Add new strings to localization 2014-08-26 16:57:25 +03:00
Olexandr Nesterenko 2b558a5c5e Add some strings. 2014-08-26 13:40:05 +03:00
Olexandr Nesterenko d059dc5a36 Update string.po 2014-08-25 22:30:54 +03:00
Olexandr Nesterenko 06e696fe59 Add some strings 2014-08-25 18:03:26 +03:00
Olexandr Nesterenko c78a4d9915 Remove and exclude *.mo files. 2014-08-25 11:26:27 +03:00
Olexandr Nesterenko d485ef84f8 Init ukrainian translation 2014-08-25 11:21:42 +03:00
Michael Townsend a2753511d4 Merge pull request #138 from calebjessie/master
Lighten up disabled button color to be more obvious.
2014-08-21 16:20:36 -04:00
Caleb Jessie fe60eb3d05 Lighten up disabled button color to be more obvious. 2014-08-21 16:12:56 -04:00
Blake Grotewold b57bbfa83d Merge pull request #132 from danapczynski/fix_inventory_bug
Fixes bug where player could take unavailable items onto dusty path
2014-08-18 01:22:07 -04:00
Blake Grotewold 956d0fe62f Merge pull request #134 from SnoUweR/translation
Add Russian translation
2014-08-18 01:19:04 -04:00
Michael Townsend 3852fbebb6 Prevent user from modifying the displayed export code 2014-08-13 19:25:42 -04:00
Michael Townsend b18134f331 Properly pass non-arrow keydown events 2014-08-13 14:16:19 -04:00
SnoUweR 889f855c8a first version of russian localization 2014-08-06 03:50:59 +08:00
Dan Apczynski 41592e79c7 Fixed bug where player could take unavailable items onto dusty path 2014-08-03 01:49:49 -07:00
Michael Townsend bc368511c6 Merge pull request #128 from Continuities/readme-update
Cleaning up the README
2014-07-29 18:50:28 -04:00
Blake Grotewold 23d177517d Cleaning up the README
Since the addition of the l11n features, I think having other translations repos displayed is unnecessary and just clutters a short, clean readme.
2014-07-29 18:48:40 -04:00
Michael Townsend 79fff84f67 Merge branch 'title-blink' 2014-07-29 18:24:20 -04:00
Michael Townsend 20539fdd18 Merge branch 'master' into title-blink 2014-07-29 18:20:10 -04:00
skj3gg e1f3d31dea Add variable for blink interval and remove unnecessary type checking
Cleans up global variable that was introduced in favor of a variable in
Events. Removes type checking from conditionals and instead sets
BLINK_INTERVAL variable to false when stopped.
2014-07-28 13:42:11 -04:00
Michael Townsend 5ceac11e53 merge leave cooldowns 2014-07-26 11:42:50 -04:00
Michael Townsend cc3cdb72fe Merge branch 'leaving-event-cooldown' 2014-07-26 11:40:01 -04:00
Michael Townsend 5bc0578862 Merge branch 'master' into leaving-event-cooldown 2014-07-26 11:31:30 -04:00
Michael Townsend 4118c84e68 Merge pull request #127 from TonyLambregts/master
stop creating income without enough resources
2014-07-26 11:08:47 -04:00
Tony Lambregts 08277b33ae Let thieves Steal. 2014-07-24 21:38:02 -06:00
skj3gg 79e765eb08 Blink only happens on specified events
Now event objects must have a blink flag if they want to use the title
blink. For starters, this is only global, outside, and room events.
2014-07-24 12:00:51 -04:00
Tony Lambregts 0087da9b5e stop creating income without enough resources
Fix issue where there worker created income without enough resources
available.
2014-07-23 19:00:36 -06:00
Blake Grotewold d6a6a7a000 Add title blinking on events
When there is an event, blink the title so that a user can know when an
event happens, even if they aren't on that tab. From discussion in #121
2014-07-23 02:43:06 -04:00
Blake Grotewold 8ceb9488aa Add cooldown when leaving events
Adding this cooldown prevents users from accidently clicking leave or
continue before they have a chance to eat or collect loot.  This was
originally brought up in and resolves #8. May be of interest to #122 as
well
2014-07-23 02:02:05 -04:00
Blake Grotewold f3d8fe71b4 Update langs.js 2014-07-23 00:15:09 -04:00
Blake Grotewold 22a110de26 Merge pull request #123 from PaolaFalcon/SpanishTranslation
Spanish translation, latin american version
2014-07-23 00:14:14 -04:00
Paola Falcon cac2c8eda6 Revert "Added entry to langs.js"
This reverts commit f8883d49f1.
2014-07-22 10:15:40 -05:00
Paola Falcon 12d79bdb1e Revert "Commented japanese entry"
This reverts commit b0a226f842.
2014-07-22 10:15:29 -05:00
Paola Falcon b0a226f842 Commented japanese entry 2014-07-21 09:32:30 -05:00
Paola Falcon f8883d49f1 Added entry to langs.js 2014-07-21 09:25:40 -05:00
Paola Falcon 10bd9fc980 Spanish translation, latin american version 2014-07-18 17:09:22 -05:00
Michael Townsend ca0ccb4ef8 Fixed broken import event 2014-07-18 15:58:58 -04:00
Michael Townsend 2ba2812a8b Merge pull request #120 from anubisthejackle/make-nomad-buy-buttons-reactivate
Fixing issue where buttons would not update when Wandering Nomad was act...
2014-07-17 22:49:23 -04:00
Travis Weston 82edff18b4 Fixing issue where buttons would not update when Wandering Nomad was active as referenced in Issue #108 2014-07-17 21:53:54 -04:00
Blake Grotewold 0f9ceda729 Merge pull request #102 from anubisthejackle/whitespace-fixes
Covert whitespace to tabs as per coding standard
2014-07-17 19:25:45 -04:00
Michael Townsend ef5c226fe2 Merge pull request #119 from anubisthejackle/gh-pages
Creates Github Pages
2014-07-17 18:21:04 -04:00
Michael Townsend 35b7926ed0 Merge pull request #113 from Continuities/fire-state
Add fire and temperature to State.game
2014-07-17 17:35:32 -04:00
Travis Weston a25b5b7acd Changed GH Pages link in readme 2014-07-17 16:47:18 -04:00
Travis Weston 64a37d8593 Added github pages link in README.md 2014-07-17 16:23:37 -04:00
Travis Weston 33e9772a1a Fixing whitespace conformity on engine.js 2014-07-16 23:45:48 -04:00
Travis Weston d164d1d466 Merge branch 'master' into whitespace-fixes 2014-07-16 23:32:13 -04:00
Blake Grotewold 1bb62e3a56 Merge pull request #117 from anubisthejackle/fix-path-stores-animation
Fixed issue where path stores animation would not run.
2014-07-16 22:02:29 -04:00
Travis Weston da53de1ed2 Fixed issue where path stores animation would not run. 2014-07-16 21:53:11 -04:00
Michael c5a7113161 Disabling dropbox support until ADR is hosted on HTTPS (if ever). 2014-07-16 19:09:04 -04:00
Michael 1ec7ae22f9 Removing JP translation from the list until it is complete. 2014-07-16 19:02:49 -04:00
Michael 4fd756d83d Merge branch 'master' of https://github.com/Continuities/adarkroom.git 2014-07-16 18:59:39 -04:00
Michael 0f78bae1cc Merge pull request 104 - Dropbox connector. 2014-07-16 18:57:50 -04:00
Blake Grotewold 185e4c3c86 Fix the room is fire.
Typo of the game.temerature.text instead of game.fire.text
2014-07-16 18:57:34 -04:00
Michael Townsend bf0b8979ac Merge pull request #112 from anubisthejackle/make-menu-stick
Fixed issue where menu would float away from bottom of the page if moved...
2014-07-16 18:37:43 -04:00
Blake Grotewold eb5b008225 Add fire and temperature to State.game
Adding fire and temperature to game state will allow persistence of the
fire and temp on reloads.
2014-07-15 23:52:33 -04:00
Travis Weston 00e57a4bfa Fixed issue where menu would float away from bottom of the page if moved and scrolled. (References Issue #109) 2014-07-15 23:23:33 -04:00
slicer2k 66ba9d9a65 load js files in right order. 2014-07-15 07:50:30 +02:00
slicer2k f56e9678b0 uncommented GA 2014-07-14 23:08:28 +02:00
slicer2k faf5ec9353 JSLinted 2014-07-14 23:07:17 +02:00
Travis Weston 5c6e36f5fa Fixing unclosed curly bracket in engine.js 2014-07-14 10:47:26 -04:00
Jens Neuber aca23d6043 Connection to the dropbox datastore api
-> this is the first attempt, improvements welcome :)
2014-07-13 19:45:53 +02:00
Travis Weston d351e4c815 Merge remote-tracking branch 'upstream/master'
Conflicts:
	script/engine.js
	script/localization.js
2014-07-13 12:52:29 -04:00
Travis Weston 42ed1cea1f Fixing whitespace conformity in base64.js 2014-07-13 12:26:36 -04:00
Travis Weston 216c51b44b Fixing whitespace conformity in setpieces.js 2014-07-13 12:22:16 -04:00
Travis Weston 2d0fccaf1c Fixed whitespace conformity in room.js 2014-07-13 11:52:19 -04:00
Travis Weston 991bf7e764 Fixing whitespace conformity in outside.js 2014-07-13 11:43:19 -04:00
Travis Weston 6e90a79c5f Fixing whitespace conformity in global.js 2014-07-13 11:34:35 -04:00
Travis Weston c91bf1d20a Fixing whitespace conformity in encounters.js 2014-07-13 11:32:07 -04:00
Travis Weston 4bb126c205 Fixing minor whitespace conformity in state_manager.js, fixed whitespace conformity in world.js 2014-07-13 11:26:21 -04:00
Travis Weston 674d44f6a8 Fixing whitespace conformity in space.js 2014-07-13 11:24:44 -04:00
Travis Weston 249b8742ff Fixed whitespace conformity in room.js 2014-07-13 11:21:34 -04:00
Travis Weston b402008769 Fixed whitespace conformity in path.js 2014-07-13 11:20:17 -04:00
Travis Weston 53c9dc715b Fixed whitespace conformity in outside.js 2014-07-13 11:18:33 -04:00
Travis Weston 6e3b3a8b10 Fixed whitespace conformity in localization.js 2014-07-13 00:56:35 -04:00
Travis Weston 4b079a22f1 Fixed whitespace conformity in events.js 2014-07-13 00:49:38 -04:00
Travis Weston 8cf3ab3dc9 Fixing whitespace conformity in Engine.js 2014-07-12 23:40:15 -04:00
Michael Townsend 4f82e33f7c Merge pull request #101 from anubisthejackle/fix-memory-usage
Fixed a memory usage issue when using system over long periods or with l...
2014-07-12 22:47:37 -04:00
Travis Weston b7a2c29aa0 Fixed a memory usage issue when using system over long periods or with large numbers of notifications. Now, notifications that fall outside the notification gradient are automatically removed 2014-07-12 20:09:36 -04:00
Michael Townsend 54dd2955ea Merge pull request #100 from TrevorBramble/bugfix-langs-declaration
add missing comma to langs definition
2014-07-11 20:37:50 -04:00
Trevor Bramble 15751ec8fb replace single space indents with tabs (style conformance) 2014-07-11 17:34:24 -07:00
Trevor Bramble e444378fd5 add missing comma to langs definition 2014-07-11 17:32:19 -07:00
Michael Townsend 5f4df5bbeb Merge pull request #98 from Nutzchannel/master
Possible Japanese support?
2014-06-28 16:23:26 -04:00
Nutzchannel c660e9cdd5 2169 2014-06-26 15:42:25 -04:00
Nutzchannel bc4688652b got to line 2129 2014-06-25 20:48:12 -04:00
Nutzchannel 28b5118be7 got to line 1880 on new file 2014-06-25 18:49:28 -04:00
Nutzchannel 6c415f7fd4 Button size in main.css 2014-06-25 14:52:31 -04:00
Nutzchannel 39945e5f4c Added Japanese folder 2014-06-25 14:51:10 -04:00
Nutzchannel 45cd119f9c Start for a Japanese translation
More language support
2014-06-25 14:45:33 -04:00
Michael Townsend 96f2b89704 Merge pull request #97 from grotr/master
Make keydown return true unless arrow key
2014-06-19 09:47:55 -04:00
Blake Grotewold b26fafe599 Make keydown return true unless arrow key 2014-06-19 09:33:35 -04:00
Michael Townsend 272495281c Merge pull request #96 from burunduk/master
Fix string
2014-06-19 09:17:29 -04:00
Olexandr Nesterenko 7fb0ae8f02 Fix string 2014-06-19 10:18:56 +03:00
Michael Townsend a9dcbc338b Merge pull request #94 from grotr/master
Fix French "not enough cloth" translation
2014-06-15 16:12:05 -04:00
Blake Grotewold 5d2bc3ebac Fix French "not enough cloth" translation 2014-06-14 22:55:31 -04:00
Michael Townsend 230017ba58 Merge pull request #89 from grotr/master
Add Engine.autoSelect and add to Engine.export64
2014-06-06 12:05:09 -04:00
Blake Grotewold 17f902e65c Add Engine.autoSelect and add to Engine.export64 2014-06-06 11:59:46 -04:00
Michael Townsend 4d0b838fdb Merge pull request #85 from lilj/master
Chinese Translation po file is coming
2014-06-02 10:05:27 -04:00
lilj e3b2763911 2014-05-31 12:15:53 +08:00
lilj 5ad15330d5 2014-05-31 12:04:45 +08:00
lilj f5be58a306 Add Simple Chinese Translation 2014-05-31 11:56:09 +08:00
lilj 523fb6a90e Update engine.js 2014-05-31 10:22:56 +08:00
Michael Townsend ff9694ebf8 Merge pull request #84 from lilj/master
hope more translation will coming soon!
2014-05-30 10:24:03 -04:00
lilj 87b1fd2d5c Update engine.js 2014-05-30 12:19:24 +08:00
lilj b4fa432e04 Update langs.js 2014-05-30 12:17:42 +08:00
lilj 17ae094fef Update README.md 2014-05-29 21:26:48 +08:00
lilj 3a0176217f Update engine.js
auto load langs from lang config file.
2014-05-29 18:03:13 +08:00
lilj 962ca4ccd6 Update engine.js
Auto load lang menu from config file
2014-05-29 17:53:48 +08:00
lilj 99d949906a Update index.html
Load langs config.
2014-05-29 17:43:14 +08:00
lilj 88fe373ea6 Create langs.js
Langs config
2014-05-29 17:41:18 +08:00
lilj 1a033dac57 Update localization.js
Add some missing localization items.
2014-05-29 17:36:33 +08:00
Michael ec9d83f6bc Removed a capital letter in the FR translation 2014-05-19 13:42:30 -04:00
Michael b7d539abbb Slight styling issues on language menu option 2014-05-19 13:27:21 -04:00
Michael 81d8129f0f Styling on the language dropdown 2014-05-19 13:15:46 -04:00
Michael c6ccad177a Fixed localized CSS. 2014-05-19 12:48:37 -04:00
Michael 88f9d3fc3b Merge branch 'vanadar-master' 2014-05-19 12:44:54 -04:00
Michael 957dbdf0e5 merged 2014-05-19 12:44:30 -04:00
Michael 4043658907 Merge branch 'master' of https://github.com/Continuities/adarkroom.git 2014-05-19 11:48:47 -04:00
Michael 2ca0a7a948 Expand import dialog to a textarea 2014-05-19 11:48:40 -04:00
Vanadar 09b5f3aba1 add switch language button 2014-05-19 11:49:46 +02:00
Michael Townsend 72a0380456 Update README.md 2014-05-15 09:35:08 -04:00
Michael a925349a13 Fixed bug #79 2014-04-23 22:24:27 -04:00
Michael Townsend 4963fda7e8 Merge pull request #77 from grotr/master
Add disableSelection to stop highlighting
2014-04-02 18:55:35 -04:00
Blake Grotewold e4b56f64c1 Create enableSelection function, Make selection available during export 2014-04-02 00:22:30 -05:00
Blake Grotewold a0aa2eaab9 Add disableSelection to stop highlighting 2014-04-01 19:25:59 -05:00
vanadar 1f52094384 vetements -> chiffons 2014-02-28 20:44:55 +01:00
vanadar 1cb7e85383 amélioration des traductions 2014-02-09 13:13:05 +01:00
vanadar cfaeb51603 corrections sur des traductions 2014-02-08 16:02:08 +01:00
vanadar cc2f374143 fin des trads, un peu de ménage & de doc 2014-02-08 14:13:59 +01:00
Vanadar 5dd42bcc4d correction css 2014-02-07 18:30:29 +01:00
Vanadar c7ad5384f4 suite des trads 2014-02-07 18:26:03 +01:00
Vanadar 71ee298e50 suite des traductions 2014-02-06 18:36:14 +01:00
Vanadar 7ac28eeb1a suites des trads 2014-02-05 17:06:30 +01:00
vanadar 989c6b4cfc Lib & fichiers de trad 2014-02-04 22:28:29 +01:00
vanadar f986e0323e Start trad fr 2014-02-04 22:27:00 +01:00
Michael Townsend 8ad2f82fd0 Merge pull request #73 from WillHuxtable/master
Removed annoying blue selection color. Now it is transparent
2014-01-03 06:45:21 -08:00
Will Huxtable 7f0bd94dab Removed annoying blue highlight color. Now it is transparent 2014-01-03 10:28:11 +00:00
Michael b583721581 Actually fixed the bug I thought I fixed ages ago. Turns out saving at
outposts is a stupid idea!
2013-11-26 11:36:51 -05:00
Michael Townsend b4eab29125 Merge pull request #68 from coolbeans7/master
Update setpieces.js
2013-11-17 09:45:17 -08:00
coolbeans7 e1df9e9e75 Update setpieces.js
Corrected typo - much => must
2013-11-15 15:03:20 -08:00
Michael Townsend 333b0b75e0 Merge pull request #67 from grotr/master
Updates README to not use rawgithub
2013-11-15 10:26:36 -08:00
Blake Grotewold 9daca0b6ee Updates README to not use rawgithub 2013-11-15 11:32:16 -06:00
Michael 1a5157dac4 Incremented version 2013-11-14 21:35:54 -05:00
Michael 36c75529ff Merge branch 'master' of https://github.com/Continuities/adarkroom.git 2013-11-14 21:33:40 -05:00
Michael 16824386eb Use a textarea instead of a prompt for export to prevent truncation in
Chrome.
2013-11-14 21:33:14 -05:00
Michael Townsend dcb4f67f8d Merge pull request #66 from grotr/master
Add reverse color scheme.
2013-11-14 11:46:39 -08:00
Blake Grotewold c78689f2c7 Add reverse color scheme. 2013-11-14 12:29:27 -06:00
Michael! c27430f29e A few small tweaks, and added link to the iOS app. 2013-11-13 22:18:27 -05:00
Michael 52974eaa96 Added link to the ADR iOS app on the Mobile Warning splash page. 2013-11-09 21:43:08 -05:00
Michael Townsend 9ae4ea53d9 Merge pull request #63 from Vermilingua/fallbackjquery
Cleaned up the scars from the merge, and added the working fallback
2013-11-03 09:46:51 -08:00
Vermilingua d78fd6acc0 added fallback, without merge scars 2013-11-03 08:45:42 +11:00
Vermilingua 918e4fa782 tidied 2013-11-03 08:42:33 +11:00
Michael ebee3be4d1 Sometimes I'm dumb. 2013-11-01 23:03:50 -04:00
Michael 994f01c78c Some refactoring and some bug fixes. 2013-11-01 23:00:51 -04:00
Michael Townsend d8f6e73c6b Merge pull request #59 from Vermilingua/scoring
added scoring system
2013-11-01 14:17:45 -07:00
Vermilingua e60abd0153 end screen looks nicer 2013-11-01 23:12:06 +11:00
Vermilingua d7fc109554 made store collection routine in SM, and updated everything to suit 2013-11-01 17:01:21 +11:00
Vermilingua a68f58e648 scoring system 100% complete 2013-11-01 16:35:20 +11:00
Vermilingua 3b3755cda9 started scoring system, yet to be populated 2013-11-01 16:35:19 +11:00
Michael Townsend a19643517a Update prestige.js
Null check in Prestige.load
2013-10-31 14:37:19 -04:00
Michael Townsend c738342bad Update world.js
Only add the cache if there is prestige data
2013-10-31 14:36:03 -04:00
Michael Townsend f5847f66ba Update engine.js 2013-10-30 18:20:32 -04:00
Michael Townsend de9f88dfab Merge pull request #60 from Vermilingua/save-fix
Save fix
2013-10-30 15:20:11 -07:00
Vermilingua 2c31e4ecda strips nonwords, spaces, and newlines from both the input and output 2013-10-31 07:17:41 +11:00
Vermilingua 55c93772db should fix the issue, maybe 2013-10-29 18:33:07 +11:00
107 changed files with 77226 additions and 11543 deletions
+12
View File
@@ -0,0 +1,12 @@
# Default
* text=auto
# Binary files so don't modify
*.ico binary
*.png binary
*.jpg binary
*.xlsx binary
# Hide vendor and translation files from language statistics
lang/* linguist-documentation
lib/* linguist-vendored
+3
View File
@@ -1 +1,4 @@
/.settings
*.TODO
*.mo
*.swp
+5
View File
@@ -0,0 +1,5 @@
{
"eqnull": true,
"sub": true,
"multistr": true
}
+17 -17
View File
@@ -1,17 +1,17 @@
<?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>
<?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>
+40 -3
View File
@@ -1,6 +1,43 @@
A Dark Room
=========
===========
> "awake. head throbbing. vision blurry. come light the fire."
A Minimalist Text Adventure Game
a minimalist text adventure game for your browser
[Click to play](http://rawgithub.com/Continuities/adarkroom/master/index.html)
[Click to play](http://adarkroom.doublespeakgames.com)
<table>
<tr><th colspan=4>Available Languages</tr>
<tr>
<td><a href="http://adarkroom.doublespeakgames.com/?lang=zh_cn">Chinese (Simplified)</a></td>
<td><a href="http://adarkroom.doublespeakgames.com/?lang=zh_tw">Chinese (Traditional)</a></td>
<td><a href="http://adarkroom.doublespeakgames.com/?lang=en">English</a></td>
<td><a href="http://adarkroom.doublespeakgames.com/?lang=fr">French</a></td>
</tr><tr>
<td><a href="http://adarkroom.doublespeakgames.com/?lang=de">German</a></td>
<td><a href="http://adarkroom.doublespeakgames.com/?lang=el">Greek</a></td>
<td><a href="http://adarkroom.doublespeakgames.com/?lang=id">Indonesian</a></td>
<td><a href="http://adarkroom.doublespeakgames.com/?lang=it">Italian</a></td>
</tr><tr>
<td><a href="http://adarkroom.doublespeakgames.com/?lang=ja">Japanese</a></td>
<td><a href="http://adarkroom.doublespeakgames.com/?lang=ko">Korean</a></td>
<td><a href="http://adarkroom.doublespeakgames.com/?lang=nb">Norwegian</a></td>
<td><a href="http://adarkroom.doublespeakgames.com/?lang=pl">Polish</a></td>
</tr><tr>
<td><a href="http://adarkroom.doublespeakgames.com/?lang=pt">Portuguese</a></td>
<td><a href="http://adarkroom.doublespeakgames.com/?lang=pt_br">Portuguese (Brazil)</a></td>
<td><a href="http://adarkroom.doublespeakgames.com/?lang=ru">Russian</a></td>
<td><a href="http://adarkroom.doublespeakgames.com/?lang=es">Spanish</a></td>
</tr><tr>
<td><a href="http://adarkroom.doublespeakgames.com/?lang=sv">Swedish</a></td>
<td><a href="http://adarkroom.doublespeakgames.com/?lang=th">Thai</a></td>
<td><a href="http://adarkroom.doublespeakgames.com/?lang=tr">Turkish</a></td>
<td><a href="http://adarkroom.doublespeakgames.com/?lang=uk">Ukrainian</a></td>
</tr><tr>
<td><a href="http://adarkroom.doublespeakgames.com/?lang=vi">Vietnamese</a></td>
</tr>
</table>
or play the latest on [GitHub](http://doublespeakgames.github.io/adarkroom)
[![app store](http://i.imgur.com/M6jlJQH.png)](https://itunes.apple.com/us/app/a-dark-room/id736683061)
+42 -42
View File
@@ -1,43 +1,43 @@
<!doctype html>
<html>
<head>
<title>A Dark Room</title>
<style>
body {
background-color: #000000;
color: #FFFFFF;
}
a {
color: #FFFFFF;
}
div {
width: 960px;
margin: auto;
text-align: center;
margin-top: 20px;
}
.browser {
width:102.4px;
height:102.4px;
}
</style>
</head>
<body>
<center>
<img src="img/Logo1.jpg" />
<div>
<strong>
A Dark Room makes use of HTML5 and CSS3, which your current browser does not appear to support.<br/>
Please <a href="http://browsehappy.com">update your browser</a> for the best experience:<br/>
</strong>
<a href='http://www.mozilla.org/en-US/firefox/new/'><img class="browser" src='img/firefox.png' alt='Firefox' title='Firefox' /></a>
<a href='https://www.google.com/intl/en/chrome/browser/'><img class="browser" src='img/chrome.png' alt='Chrome' title='Chrome' /></a>
<a href='http://windows.microsoft.com/en-CA/internet-explorer/download-ie'><img class="browser" src='img/ie.png' alt='Internet Explorer' title='Internet Explorer' /></a>
<a href='http://www.opera.com/computer'><img class="browser" src='img/opera.png' alt='Opera' title='Opera' /></a>
<a href='http://www.apple.com/safari/'><img class="browser" src='img/safari.png' alt='Safari' title='Safari' /></a>
<br/><br/>
Or you can <a href='index.html?ignorebrowser=true'>play anyway</a>, but it probably won't work!
</div>
</center>
</body>
<!doctype html>
<html>
<head>
<title>A Dark Room</title>
<style>
body {
background-color: #000000;
color: #FFFFFF;
}
a {
color: #FFFFFF;
}
div {
width: 960px;
margin: auto;
text-align: center;
margin-top: 20px;
}
.browser {
width:102.4px;
height:102.4px;
}
</style>
</head>
<body>
<center>
<img src="img/Logo1.jpg" />
<div>
<strong>
A Dark Room makes use of HTML5 and CSS3, which your current browser does not appear to support.<br/>
Please <a href="http://browsehappy.com">update your browser</a> for the best experience:<br/>
</strong>
<a href='http://www.mozilla.org/en-US/firefox/new/'><img class="browser" src='img/firefox.png' alt='Firefox' title='Firefox' /></a>
<a href='https://www.google.com/intl/en/chrome/browser/'><img class="browser" src='img/chrome.png' alt='Chrome' title='Chrome' /></a>
<a href='http://windows.microsoft.com/en-CA/internet-explorer/download-ie'><img class="browser" src='img/ie.png' alt='Internet Explorer' title='Internet Explorer' /></a>
<a href='http://www.opera.com/computer'><img class="browser" src='img/opera.png' alt='Opera' title='Opera' /></a>
<a href='http://www.apple.com/safari/'><img class="browser" src='img/safari.png' alt='Safari' title='Safari' /></a>
<br/><br/>
Or you can <a href='index.html?ignorebrowser=true'>play anyway</a>, but it probably won't work!
</div>
</center>
</body>
</html>
+19
View File
@@ -0,0 +1,19 @@
Contributing to A Dark Room
===========
Hello and welcome, contributors both new, and old.
Like most projects on GitHub, A Dark Room is open source, and thrives off contributions from members of the community. We appreciate any pull requests or issues that you may open in the project, no matter the size.
<br><hr>
Before contributing to the project, there are a few things you should look over to ensure your contribution is done correctly.
Most of the projects code is written in JavaScript. We would prefer all submitted JavaScript be [JSHint](http://jshint.com/) compliant.
> "JSHint is a community-driven tool to detect errors and potential problems in JavaScript code and to enforce your team's coding conventions."
<br><br><br>
Before opening a new issue, try to check the projects [issues](https://github.com/doublespeakgames/adarkroom/issues) or [wiki](https://github.com/doublespeakgames/adarkroom/wiki).
Doing so will help prevent needless double issues.
<br>Most of the time you will be able to find what you are looking for in one of those places. If not, please open an issue and describe your problem with as much detail as possible.
Lastly, be nice, patient, open to new ideas, and have some fun!
+182
View File
@@ -0,0 +1,182 @@
body {
background-color: #272823;
color: #EEE;
}
div.headerButton {
border-left: 1px solid #EEE;
}
div#notifyGradient {
background-color: #272823;
background: -webkit-linear-gradient( rgba(39, 40, 35, 0) 0%, rgba(39, 40, 35, 1) 100% );
background: linear-gradient( rgba(39, 40, 35, 0) 0%, rgba(39, 40, 35, 1) 100% );
filter: alpha( Opacity=0, FinishOpacity=100, Style=1, StartX=0, StartY=0, FinishX=0, FinishY=500 );
}
div#saveNotify {
background: #272823;
}
.eventPanel:before {
background-color: #272823;
}
.eventTitle:after {
background-color: #272823;
}
div.tooltip {
background-color: #171813;
border: 1px solid black;
box-shadow: -1px 3px 2px #111;
}
div#population {
background-color: #272823;
}
div#village:before {
background: #272823;
}
div#village {
border: 1px solid #EEE;
}
div#stores:before {
background: #272823;
}
div#stores {
border: 1px solid #EEE;
}
div#weapons:before {
background: #272823;
}
div#weapons {
border: 1px solid #EEE;
}
div#bagspace {
background-color: #272823;
}
div#outfitting:before {
background: #272823;
}
div#perks {
border: 1px solid #EEE;
}
div#perks:before {
background-color: #272823;
}
div#outfitting {
border: 1px solid #EEE;
}
#bagspace-world {
border: 1px solid #EEE;
}
div.supplyItem {
border: 1px solid #EEE;
}
#backpackTitle {
background-color: #272823;
}
#backpackSpace {
background-color: #272823;
}
#healthCounter {
background-color: #272823;
}
#map {
border: 1px solid #EEE;
}
#map .landmark {
color: #EEE;
}
#dropMenu {
background: none repeat scroll 0 0 #272823;
box-shadow: -1px 3px 2px #111;
}
div.button {
border: 1px solid #EEE;
}
div.button.disabled, div.button.disabled:hover {
border-color: #444;
color: #444;
}
.upBtn:after, .upManyBtn:after {
border-color: transparent transparent #272823;
}
.upBtn:before, .upManyBtn:before {
border-color: transparent transparent #EEE;
}
.upBtn.disabled:before, .upManyBtn.disabled:before {
border-color: transparent transparent #555;
}
.dnBtn:after, .dnManyBtn:after {
border-color: #272823 transparent transparent;
}
.dnBtn:before, .dnManyBtn:before {
border-color: #EEE transparent transparent;
}
.dnBtn.disabled:before, .dnManyBtn.disabled:before {
border-color: #555 transparent transparent;
}
body.noMask .eventTitle {
background-color: #EEE;
color: #272823;
}
body.noMask .eventTitle:after {
background-color: #EEE;
}
body.noMask .eventPanel {
background-color: #EEE;
}
body.noMask #description {
color: #272823;
}
body.noMask #buttons > .button {
border: 1px solid #272823;
color: #272823;
}
#stars > div, #starsBack > div {
color: black;
}
.endGame {
color:#272823;
}
#theEnd {
color: #272823;
}
+603 -526
View File
File diff suppressed because it is too large Load Diff
+60 -64
View File
@@ -1,64 +1,60 @@
div#village {
position: absolute;
top: 0px;
right: 0px;
border: 1px solid black;
cursor: default;
padding: 5px 10px;
width: 200px;
}
div#population {
position: absolute;
top: -13px;
right: 10px;
background-color: white;
}
.noHuts #population {
display: none;
}
div#village:before {
position: absolute;
background: white;
content: "village";
left: 8px;
top: -13px;
}
div#village.noHuts:before {
content: "forest";
}
div#workers {
position:absolute;
top: -4px;
left: 160px;
width: 150px;
}
.workerRow > .row_val {
position: relative;
padding-right: 20px;
-webkit-touch-callout: none;
-webkit-user-select: none;
-khtml-user-select: none;
-moz-user-select: none;
-ms-user-select: none;
user-select: none;
}
.workerRow {
position: relative;
margin: 10px 0px;
cursor: default;
}
.workerRow .tooltip {
width: 150px;
}
div.storeRow div.tooltip {
width: 160px;
}
div#village {
position: absolute;
top: 0px;
right: 0px;
border: 1px solid black;
cursor: default;
padding: 5px 10px;
width: 200px;
}
div#population {
position: absolute;
top: -13px;
right: 10px;
background-color: white;
}
.noHuts #population {
display: none;
}
div#village:before {
position: absolute;
background: white;
content: attr(data-legend);
left: 8px;
top: -13px;
}
div#workers {
position:absolute;
top: -4px;
left: 160px;
width: 150px;
}
.workerRow > .row_val {
position: relative;
padding-right: 20px;
-webkit-touch-callout: none;
-webkit-user-select: none;
-khtml-user-select: none;
-moz-user-select: none;
-ms-user-select: none;
user-select: none;
}
.workerRow {
position: relative;
margin: 10px 0px;
cursor: default;
}
.workerRow .tooltip {
width: 150px;
}
div.storeRow div.tooltip {
width: 160px;
}
+59 -66
View File
@@ -1,66 +1,59 @@
#outfitting {
position: relative;
border: 1px solid black;
width: 200px;
margin-bottom: 20px;
padding: 5px 10px;
}
div#outfitting:before {
position: absolute;
content: "supplies";
top: -13px;
background-color: white;
}
div.outfitRow {
position: relative;
cursor: default;
margin: 10px -30px 10px 0px;
}
div.outfitRow > .row_val {
padding-right: 30px;
-webkit-touch-callout: none;
-webkit-user-select: none;
-khtml-user-select: none;
-moz-user-select: none;
-ms-user-select: none;
user-select: none;
}
div.outfitRow .tooltip {
width: 150px;
}
div#bagspace {
background-color: white;
position: absolute;
top:-13px;
right: 10px;
}
div#perks {
position: absolute;
top: 0px;
right: 0px;
border: 1px solid black;
cursor: default;
padding: 5px 10px;
width: 200px;
}
div#perks:before {
position: absolute;
content: "perks";
top: -13px;
background-color: white;
}
div.perkRow {
position: relative;
}
div.perkRow .row_key {
float: none;
}
#outfitting {
position: relative;
border: 1px solid black;
width: 200px;
margin-bottom: 20px;
padding: 5px 10px;
}
div#outfitting:before ,div#perks:before {
content: attr(data-legend);
position: absolute;
top: -13px;
background-color: white;
}
div.outfitRow {
position: relative;
cursor: default;
margin: 10px -30px 10px 0px;
}
div.outfitRow > .row_val {
padding-right: 30px;
-webkit-touch-callout: none;
-webkit-user-select: none;
-khtml-user-select: none;
-moz-user-select: none;
-ms-user-select: none;
user-select: none;
}
div.outfitRow .tooltip {
width: 150px;
}
div#bagspace {
background-color: white;
position: absolute;
top:-13px;
right: 10px;
}
div#perks {
position: absolute;
top: 0px;
right: 0px;
border: 1px solid black;
cursor: default;
padding: 5px 10px;
width: 200px;
}
div.perkRow {
position: relative;
}
div.perkRow .row_key {
float: none;
}
+60 -79
View File
@@ -1,79 +1,60 @@
div#buildBtns {
position: absolute;
top: 50px;
left: 0px;
}
div#buildBtns:before {
content: "build:";
position: relative;
top: -5px;
}
div#craftBtns {
position: absolute;
top: 50px;
left: 150px;
}
div#craftBtns:before {
content: "craft:";
position: relative;
top: -5px;
}
div#buyBtns {
position: absolute;
top: 50px;
left: 300px;
}
div#buyBtns:before {
content: "buy:";
position: relative;
top: -5px;
}
div#storesContainer {
position: absolute;
top: 0px;
right: 0px;
}
div#stores {
position: relative;
border: 1px solid black;
cursor: default;
padding: 5px 10px;
width: 200px;
}
div.storeRow {
position: relative;
}
div#stores:before {
position: absolute;
background: white;
content: "stores";
left: 8px;
top: -13px;
}
div#weapons {
margin-top: 15px;
position: relative;
right: 0px;
border: 1px solid black;
cursor: default;
padding: 5px 10px;
width: 200px;
}
div#weapons:before {
position: absolute;
background: white;
content: "weapons";
left: 8px;
top: -13px;
}
div#buildBtns {
position: absolute;
top: 50px;
left: 0px;
}
div#buildBtns:before, div#craftBtns:before, div#buyBtns:before {
content: attr(data-legend);
position: relative;
top: -5px;
}
div#craftBtns {
position: absolute;
top: 50px;
left: 150px;
}
div#buyBtns {
position: absolute;
top: 50px;
left: 300px;
}
div#storesContainer {
position: absolute;
top: 0px;
right: 0px;
}
div#stores:before, div#weapons:before {
position: absolute;
background: white;
content: attr(data-legend);
left: 8px;
top: -13px;
}
div#stores {
position: relative;
z-index:10;
border: 1px solid black;
cursor: default;
padding: 5px 10px;
width: 200px;
}
div.storeRow {
position: relative;
}
div#weapons {
margin-top: 15px;
position: relative;
right: 0px;
border: 1px solid black;
cursor: default;
padding: 5px 10px;
width: 200px;
}
+8 -7
View File
@@ -1,7 +1,8 @@
div#hullRow {
width: 70px;
}
div#engineRow {
width: 70px;
margin-bottom: 20px;
div#hullRow {
width: 70px;
}
div#engineRow {
width: 70px;
margin-bottom: 20px;
}
+154 -134
View File
@@ -1,134 +1,154 @@
@-ms-keyframes spin {
0% {
-ms-transform: rotate(0deg);
-webkit-transform: rotate(0deg);
-moz-transform: rotate(0deg);
transform:rotate(0deg);
}
100% {
-ms-transform: rotate(360deg);
-webkit-transform: rotate(360deg);
-moz-transform: rotate(360deg);
transform:rotate(360deg);
}
}
@-webkit-keyframes spin {
0% {
-ms-transform: rotate(0deg);
-webkit-transform: rotate(0deg);
-moz-transform: rotate(0deg);
transform:rotate(0deg);
}
100% {
-ms-transform: rotate(360deg);
-webkit-transform: rotate(360deg);
-moz-transform: rotate(360deg);
transform:rotate(360deg);
}
}
@-moz-keyframes spin {
0% {
-ms-transform: rotate(0deg);
-webkit-transform: rotate(0deg);
-moz-transform: rotate(0deg);
transform:rotate(0deg);
}
100% {
-ms-transform: rotate(360deg);
-webkit-transform: rotate(360deg);
-moz-transform: rotate(360deg);
transform:rotate(360deg);
}
}
@keyframes spin {
0% {
-ms-transform: rotate(0deg);
-webkit-transform: rotate(0deg);
-moz-transform: rotate(0deg);
transform:rotate(0deg);
}
100% {
-ms-transform: rotate(360deg);
-webkit-transform: rotate(360deg);
-moz-transform: rotate(360deg);
transform:rotate(360deg);
}
}
#spacePanel {
float: none !important;
position: absolute !important;
top: -700px;
left: 0px;
}
#starsContainer {
width: 100%;
height: 100%;
position: absolute;
top: 0px;
left: 0px;
overflow: hidden;
}
#stars, #starsBack {
position: absolute;
z-index: -1;
left: 0px;
}
#stars > div, #starsBack > div {
position: relative;
height: 3000px;
width: 3000px;
color: white;
}
#starsBack {
opacity: 0.5;
}
.star {
position: absolute;
}
#ship {
cursor: default;
position: absolute;
margin-top: -10px;
margin-left: -7.5px;
}
#theEnd {
position: relative;
cursor: default;
top: 200px;
margin-left: -220px;
text-align: center;
font-size: 24px;
font-weight: bold;
opacity: 0;
color: white;
}
.asteroid {
cursor: default;
position: absolute;
top: -40px;
left: 350px;
-webkit-animation: 1s linear 0s normal none infinite spin;
-moz-animation: 1s linear 0s normal none infinite spin;
-ms-animation: 1s linear 0s normal none infinite spin;
animation: 1s linear 0s normal none infinite spin;
font-size: 32px;
}
#hullRemaining {
width: 70px;
position: absolute;
top: 0px;
left: 0px;
}
@-ms-keyframes spin {
0% {
-ms-transform: rotate(0deg);
-webkit-transform: rotate(0deg);
-moz-transform: rotate(0deg);
transform:rotate(0deg);
}
100% {
-ms-transform: rotate(360deg);
-webkit-transform: rotate(360deg);
-moz-transform: rotate(360deg);
transform:rotate(360deg);
}
}
@-webkit-keyframes spin {
0% {
-ms-transform: rotate(0deg);
-webkit-transform: rotate(0deg);
-moz-transform: rotate(0deg);
transform:rotate(0deg);
}
100% {
-ms-transform: rotate(360deg);
-webkit-transform: rotate(360deg);
-moz-transform: rotate(360deg);
transform:rotate(360deg);
}
}
@-moz-keyframes spin {
0% {
-ms-transform: rotate(0deg);
-webkit-transform: rotate(0deg);
-moz-transform: rotate(0deg);
transform:rotate(0deg);
}
100% {
-ms-transform: rotate(360deg);
-webkit-transform: rotate(360deg);
-moz-transform: rotate(360deg);
transform:rotate(360deg);
}
}
@keyframes spin {
0% {
-ms-transform: rotate(0deg);
-webkit-transform: rotate(0deg);
-moz-transform: rotate(0deg);
transform:rotate(0deg);
}
100% {
-ms-transform: rotate(360deg);
-webkit-transform: rotate(360deg);
-moz-transform: rotate(360deg);
transform:rotate(360deg);
}
}
#spacePanel {
float: none !important;
position: absolute !important;
top: -700px;
left: 0px;
}
#starsContainer {
width: 100%;
height: 100%;
position: absolute;
top: 0px;
left: 0px;
overflow: hidden;
}
#stars, #starsBack {
position: absolute;
z-index: -1;
left: 0px;
}
#stars > div, #starsBack > div {
position: relative;
height: 3000px;
width: 3000px;
color: white;
}
#starsBack {
opacity: 0.5;
}
.star {
position: absolute;
}
#ship {
cursor: default;
position: absolute;
margin-top: -10px;
margin-left: -7.5px;
}
#theEnd {
position: relative;
cursor: default;
top: 200px;
margin-left: -220px;
text-align: center;
font-size: 24px;
font-weight: bold;
opacity: 0;
color: white;
}
.asteroid {
cursor: default;
position: absolute;
top: -40px;
left: 350px;
-webkit-animation: 1s linear 0s normal none infinite spin;
-moz-animation: 1s linear 0s normal none infinite spin;
-ms-animation: 1s linear 0s normal none infinite spin;
animation: 1s linear 0s normal none infinite spin;
font-size: 32px;
}
#hullRemaining {
width: 70px;
position: absolute;
top: 0px;
left: 0px;
}
.centerCont {
padding-top:10%;
}
.endGame {
font-size:48px;
color:#FFFFFF;
opacity:0;
position:relative;
}
.endGameOption {
font-size: 32px;
cursor: pointer;
}
.endGameOption:hover {
text-decoration: underline;
}
+73 -73
View File
@@ -1,74 +1,74 @@
#worldOuter {
position: relative;
display: inline-block;
}
#map {
position: relative;
font-family: "Courier New", Courier, monospace;
border: 1px solid black;
overflow: hidden;
display: inline-block;
line-height: 10px;
letter-spacing: 1px;
color: #999;
cursor: default;
-webkit-touch-callout: none;
-webkit-user-select: none;
-khtml-user-select: none;
-moz-user-select: none;
-ms-user-select: none;
user-select: none;
}
#map .landmark {
position: relative;
font-weight: bold;
color: black;
line-height: 0px; /* Hack to prevent the boldness from increasing the row's line-height. I hope it works in all browsers... */
}
#bagspace-world {
border: 1px solid black;
height: 62px;
margin-bottom: 5px;
margin-top: 13px;
overflow: hidden;
}
#bagspace-world > div {
padding: 6px 4px;
}
#backpackTitle {
position: absolute;
top: 0px;
left: 10px;
background-color: white;
z-index: 1;
}
#backpackSpace {
position: absolute;
top: 0px;
right: 10px;
background-color: white;
z-index: 1;
}
#healthCounter {
position: absolute;
top: 0px;
left: 80px;
background-color: white;
z-index: 1;
}
div.supplyItem {
display: inline-block;
border: 1px solid #999;
float: left;
margin: 0px 5px 6px 0px;
padding: 0 5px;
cursor: default;
#worldOuter {
position: relative;
display: inline-block;
}
#map {
position: relative;
font-family: "Courier New", Courier, monospace;
border: 1px solid black;
overflow: hidden;
display: inline-block;
line-height: 10px;
letter-spacing: 1px;
color: #999;
cursor: default;
-webkit-touch-callout: none;
-webkit-user-select: none;
-khtml-user-select: none;
-moz-user-select: none;
-ms-user-select: none;
user-select: none;
}
#map .landmark {
position: relative;
font-weight: bold;
color: black;
line-height: 0px; /* Hack to prevent the boldness from increasing the row's line-height. I hope it works in all browsers... */
}
#bagspace-world {
border: 1px solid black;
height: 62px;
margin-bottom: 5px;
margin-top: 13px;
overflow: hidden;
}
#bagspace-world > div {
padding: 6px 4px;
}
#backpackTitle {
position: absolute;
top: 0px;
left: 10px;
background-color: white;
z-index: 1;
}
#backpackSpace {
position: absolute;
top: 0px;
right: 10px;
background-color: white;
z-index: 1;
}
#healthCounter {
position: absolute;
top: 0px;
left: 80px;
background-color: white;
z-index: 1;
}
div.supplyItem {
display: inline-block;
border: 1px solid #999;
float: left;
margin: 0px 5px 6px 0px;
padding: 0 5px;
cursor: default;
}
+4 -4
View File
@@ -1,5 +1,5 @@
Radius Enemy DPS Player DPS Enemy HP Player HP
=====================================================================
< 10 1 1 5 10
< 20 3 3 10 15-20
Radius Enemy DPS Player DPS Enemy HP Player HP
=====================================================================
< 10 1 1 5 10
< 20 3 3 10 15-20
< 30 6 4 20 30-40
+137
View File
@@ -0,0 +1,137 @@
HOW TO TRANSLATE
=====================================================================
** NOTE TO DEVELOPERS **:
All strings sent to the page must go through the javascript function _() which will translate it. So please if you add new strings, wrap them with _('') function.
If you want to add some strings in the css (using content), please edit /script/localization.js too.
Thank you :)
ADDING A NEW LANGUAGE
=====================================================================
Required tools:
ubuntu:
apt-get install gettext
apt-get install poedit
apt-get install python
windows:
http://poedit.net/
https://www.python.org/download/windows/
mac:
http://poedit.net
https://www.python.org/downloads/mac-osx/
Steps:
1) Create a new directory lang/{new_language_code}
2) Download the file adarkroom.pot in the lang folder as translation template
3) Create the new po file:
ubuntu:
msginit --locale {locale for new language eg: en_US} -i lang/adarkroom.pot -o lang/{new_language}/strings.po
windows:
- open application interface > File > New... > [select language for translation] > Save as... > lang/{new_language_code}/strings.po
- [update from POT file] > select lang/adarkroom.pot
4) Copy lang/main.css to lang/{new_language}
5) Open lang/{new_language}/strings.po with a software poedit
6) Translate ...
7) Keep translating ...
8) Finished? Sure?
9) Use the python script (/tools/po2js.py) to convert the po file to a js file
run from command line/terminal:
python tools/po2js.py lang/{new_language}/strings.po
Note:
make sure to have polib module installed or the command line/terminal will give you an error
polib can be downloaded and installed via the command line/terminal from the python website
on windows it could be necessary to run the command prompt as Administrator
Win Vista/7: start > right-click on command prompt > Run as Administrator
Win 8: File panel > mouse over Command prompt > click on Run command prompt as Administrator
10) Edit README.md and add the following string: [{new_language_name}](http://adarkroom.doublespeakgames.com/?lang={new_language_code})
11) Edit lang/langs.js and add the new language
Note: If your sentence are too big and you need to update some css, overload it in /lang/{new_language}/main.css
UPDATE TEMPLATE FILE
=====================================================================
When new content or changes in the code introduce new strings, the file lang/adarkroom.pot must be updated.
Required tools:
ubuntu:
apt-get install python3-babel
windows & mac:
poedit
Steps:
ubuntu:
pybabel extract -F babel.cfg -c "TRANSLATORS" script > lang/adarkroom.pot
windows:
use poedit
Use menu "Cataloge"-> "New Catalog from POT file..."
UPDATE LANGUAGE AFTER UPDATE
=====================================================================
Required tools:
ubuntu:
* gettext
windows & mac:
* poedit
- ubuntu:
msgmerge -U lang/{language}/strings.po lang/adarkroom.pot
windows:
Open lang/{language}strings.po in poedit
Use menu "Cataloge"-> "Update from POT file..."
OR
After "SETUP POEDIT"
Use menu "Cataloge"-> "Update from source"
- Edit in poedit as in "ADD A NEW LANGUAGE"
SETUP POEDIT
=====================================================================
To update from source without pot file need:
- Create new parser:
File > Preferences > Parsers > New
Language:
JS
List of extension:
*.js
Parser command:
xgettext --language=JavaScript --force-po --add-comments=TRANSLATORS -o %o %C %K %F
Item in Keyword List:
-k%k
Item in input files list:
%f
Source code charset:
--from-code=%c
+112 -83
View File
@@ -1,83 +1,112 @@
<!DOCTYPE html>
<html itemscope itemtype="http://schema.org/CreativeWork">
<head>
<!--
A Dark Room (v1.3.1)
==================
A minimalist text adventure by Michael Townsend and all his friends.
Inspired by Candy Box (http://candies.aniwey.net/)
Contribute on GitHub! (https://github.com/Continuities/adarkroom/)
-->
<title>A Dark Room</title>
<meta itemprop="description" name="description" property="og:description" content="A minimalist text adventure">
<meta itemprop="image" property="og:image" content="img/adr.png" />
<meta itemprop="name" property="og:title" content="A Dark Room" />
<link rel="shortcut icon" href="favicon.ico" />
<link rel="image_src" href="img/adr.png" />
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.10.1/jquery.min.js"></script>
<!-- <script src="lib/jquery.min.js"></script> -->
<script src="lib/jquery.color-2.1.2.min.js"></script>
<script src="lib/jquery.event.move.js"></script>
<script src="lib/jquery.event.swipe.js"></script>
<script src="lib/base64.js"></script>
<script src="script/Button.js"></script>
<script src="script/engine.js"></script>
<script src="script/state_manager.js"></script>
<script src="script/header.js"></script>
<script src="script/notifications.js"></script>
<script src="script/events.js"></script>
<script src="script/room.js"></script>
<script src="script/outside.js"></script>
<script src="script/world.js"></script>
<script src="script/path.js"></script>
<script src="script/ship.js"></script>
<script src="script/space.js"></script>
<script src="script/prestige.js"></script>
<!-- Event modules -->
<script src="script/events/global.js"></script>
<script src="script/events/room.js"></script>
<script src="script/events/outside.js"></script>
<script src="script/events/encounters.js"></script>
<script src="script/events/setpieces.js"></script>
<script type='text/javascript'>
var oldIE = false;
</script>
<!-- [if lt IE 9]>
<script type="text/javascript">oldIE = true;</script>
<![endif]-->
<link rel="stylesheet" type="text/css" href="css/main.css" />
<link rel="stylesheet" type="text/css" href="css/room.css" />
<link rel="stylesheet" type="text/css" href="css/outside.css" />
<link rel="stylesheet" type="text/css" href="css/path.css" />
<link rel="stylesheet" type="text/css" href="css/world.css" />
<link rel="stylesheet" type="text/css" href="css/ship.css" />
<link rel="stylesheet" type="text/css" href="css/space.css" />
<!-- Google Analytics -->
<script>
(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
})(window,document,'script','//www.google-analytics.com/analytics.js','ga');
ga('create', 'UA-41314886-1', 'doublespeakgames.com');
ga('send', 'pageview');
</script>
</head>
<body>
<div id="wrapper">
<div id="saveNotify">saved.</div>
<div id="content">
<div id="outerSlider">
<div id="main">
<div id="header"></div>
</div>
</div>
</div>
</div>
</body>
</html>
<!DOCTYPE html>
<html itemscope itemtype="http://schema.org/CreativeWork">
<head>
<meta charset="UTF-8"/>
<!--
A Dark Room (v1.4)
==================
A minimalist text adventure by Michael Townsend and all his friends.
Inspired by Candy Box (http://candies.aniwey.net/)
Contribute on GitHub! (https://github.com/doublespeakgames/adarkroom/)
-->
<title>A Dark Room</title>
<meta itemprop="description" name="description" property="og:description" content="A minimalist text adventure">
<meta itemprop="image" property="og:image" content="img/adr.png" />
<meta itemprop="name" property="og:title" content="A Dark Room" />
<link rel="shortcut icon" href="favicon.ico" />
<link rel="image_src" href="img/adr.png" />
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.10.1/jquery.min.js"></script>
<script src="https://www.dropbox.com/static/api/dropbox-datastores-1.1-latest.js" type="text/javascript"></script>
<script>
if(!window.jQuery) {
document.write('<script src="lib/jquery.min.js"><\/script>')
}
</script>
<script src="lib/jquery.color-2.1.2.min.js"></script>
<script src="lib/jquery.event.move.js"></script>
<script src="lib/jquery.event.swipe.js"></script>
<script src="lib/base64.js"></script>
<script src="lib/translate.js"></script>
<script src="lang/langs.js"></script>
<script>
// try to read "lang" param's from url
var lang = decodeURIComponent((new RegExp('[?|&]lang=' + '([^&;]+?)(&|#|;|$)').exec(location.search)||[,""])[1].replace(/\+/g, '%20'))||null;
// if no language requested, try to read it from local storage
if(!lang){
try {
lang = localStorage.lang;
} catch(e) {}
}
// if a language different than english requested, load all translations
if(lang && lang != 'en'){
document.write('<script src="lang/'+lang+'/strings.js"><\/script>');
document.write('<link rel="stylesheet" type="text/css" href="lang/'+lang+'/main.css" \/>');
}
</script>
<script src="script/Button.js"></script>
<script src="script/engine.js"></script>
<script src="script/state_manager.js"></script>
<script src="script/header.js"></script>
<script src="script/notifications.js"></script>
<script src="script/events.js"></script>
<script src="script/dropbox.js"></script>
<script src="script/room.js"></script>
<script src="script/outside.js"></script>
<script src="script/world.js"></script>
<script src="script/path.js"></script>
<script src="script/ship.js"></script>
<script src="script/space.js"></script>
<script src="script/prestige.js"></script>
<script src="script/scoring.js"></script>
<!-- Event modules -->
<script src="script/events/global.js"></script>
<script src="script/events/room.js"></script>
<script src="script/events/outside.js"></script>
<script src="script/events/encounters.js"></script>
<script src="script/events/setpieces.js"></script>
<script type='text/javascript'>
var oldIE = false;
</script>
<!--[if lt IE 9]>
<script type="text/javascript">oldIE = true;</script>
<![endif]-->
<link rel="stylesheet" type="text/css" href="css/main.css" />
<link rel="stylesheet" type="text/css" href="css/room.css" />
<link rel="stylesheet" type="text/css" href="css/outside.css" />
<link rel="stylesheet" type="text/css" href="css/path.css" />
<link rel="stylesheet" type="text/css" href="css/world.css" />
<link rel="stylesheet" type="text/css" href="css/ship.css" />
<link rel="stylesheet" type="text/css" href="css/space.css" />
<script src="script/localization.js"></script>
<!-- Google Analytics -->
<script>
(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
})(window,document,'script','http://www.google-analytics.com/analytics.js','ga');
ga('create', 'UA-41314886-1', 'doublespeakgames.com');
ga('send', 'pageview');
</script>
</head>
<body>
<div id="wrapper">
<div id="saveNotify"><script>document.write(_("saved."));</script></div>
<div id="content">
<div id="outerSlider">
<div id="main">
<div id="header"></div>
</div>
</div>
</div>
</div>
</body>
</html>
+3253
View File
File diff suppressed because it is too large Load Diff
+2
View File
@@ -0,0 +1,2 @@
[javascript: **.js]
extract_messages = _
+3
View File
@@ -0,0 +1,3 @@
.button{width: 100px !important;}
#outsidePanel .button{width: 115px !important;}
.eventPanel .button {width: 122px !important;}
File diff suppressed because one or more lines are too long
+3357
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;}
File diff suppressed because one or more lines are too long
+3392
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;}
File diff suppressed because one or more lines are too long
+3264
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;}
File diff suppressed because one or more lines are too long
+2413
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;}
File diff suppressed because one or more lines are too long
+3468
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;}
File diff suppressed because one or more lines are too long
+3308
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;}
File diff suppressed because one or more lines are too long
+3173
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;}
File diff suppressed because one or more lines are too long
+3265
View File
File diff suppressed because it is too large Load Diff
+23
View File
@@ -0,0 +1,23 @@
var langs = {
'de':'deutsch',
'el':'ελληνικά',
'en':'english',
'es':'español',
'fr':'français',
'id':'bahasa indonesia',
'it':'italiano',
'ja':'日本語',
'ko':'한국어',
'nb':'norsk',
'pl':'polski',
'pt':'português',
'pt_br':'português (brasil)',
'ru':'русский',
'sv':'svenska',
'th':'ไทย',
'tr':'türkçe',
'uk':'українська',
'vi':'tiếng việt',
'zh_cn':'简体中文',
'zh_tw':'繁體中文'
};
+3
View File
@@ -0,0 +1,3 @@
.button{width: 100px !important;}
#outsidePanel .button{width: 115px !important;}
.eventPanel .button {width: 122px !important;}
+3
View File
@@ -0,0 +1,3 @@
.button{width: 100px !important;}
#outsidePanel .button{width: 115px !important;}
.eventPanel .button {width: 122px !important;}
File diff suppressed because one or more lines are too long
+3185
View File
File diff suppressed because it is too large Load Diff
File diff suppressed because one or more lines are too long
+3098
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;}
File diff suppressed because one or more lines are too long
+3217
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;}
File diff suppressed because one or more lines are too long
File diff suppressed because it is too large Load Diff
+7
View File
@@ -0,0 +1,7 @@
.button{width: 100px !important;}
#outsidePanel .button{width: 115px !important;}
.eventPanel .button {width: 122px !important;}
.button .tooltip {width: 120px !important;}
#workers {width: 180px !important;}
#hullRow {width: 90px !important;}
#engineRow {width: 90px !important;}
File diff suppressed because one or more lines are too long
+2962
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;}
File diff suppressed because one or more lines are too long
+2344
View File
File diff suppressed because it is too large Load Diff
+3
View File
@@ -0,0 +1,3 @@
.button{width: 120px !important;}
#outsidePanel .button{width: 115px !important;}
.eventPanel .button {width: 122px !important;}
+307
View File
@@ -0,0 +1,307 @@
_.setTranslation({"water tank": "ถังน้ำ", "all":"ทุกอย่าง",
"use meds": "ใช้ยา", "Fire": "ไฟไหม้","a fire rampages through one of the huts, destroying it.":"ไฟไหม้ออกจากห้อง ลุกลามและเผาทำลายกระท่อมหลังหนึ่งในหมู่บ้าน",
"all residents in the hut perished in the fire.": "ทุกคนที่อาศัยในบ้านหลังนั้นเสียชีวิตในเปลวไฟ", "mourn":"ไว้อาลัย", "nothing to take":"ไม่มีอะไรให้เก็บ",
"the room is {0}": "ในห้อง {0}", "take everything":"เก็บทุกอย่าง",
"punch twice as fast, and with even more force": "ต่อยด้วยความรวดเร็วเป็นสองเท่า และรุนแรงมากยิ่งขึ้นไปอีก", "a fire has started": "เกิดไฟไหม้",
"some villagers have died": "ชาวบ้านบางส่วนเสียชีวิตในเปลวไฟ",
"charm": "เครื่องราง", "The Nomad": "ผู้เร่ร่อน",
"more traps won't help now": "มีกับดักมากไปกว่านี้ก็คงไม่ช่วยอะไรแล้ว",
"only a few die.": "มีไม่กี่คนเท่านั้นที่เสียชีวิต", "total": "รวม",
"the compass points east": "เข็มทิศชี้ไปทางตะวันออก",
"the bodies of the wanderers that lived here are still visible in the flames.": "ยังคงเห็นร่างของผู้ดินทางที่อาศัยอยู่ที่นี่ในเปลวไฟ",
"the walls are scorched from an old battle.": "กำแพงถูกเผาทำลาย เป็นสัญลักษณ์ของการต่อสู้ในอดีต","there was a beast. it's dead now": "มีสัตว์ร้ายในป่า เราสังหารมันลงแล้ว",
"convoy": "ผู้คุ้มกัน", "buy medicine": "ซื้อยา",
"not enough fur": "มีขนสัตว์ไม่เพียงพอ",
"a masked soldier rounds the corner, gun drawn": "ทหารใต้หน้ากากปรากฏตัวขึ้นในมุมหนึ่ง ปืนชี้มาตรงหน้า",
"a huge hole is cut deep into the earth, evidence of the past harvest.": "หลุมขนาดใหญ่ตัดลึกลงไปในหน้าดิน ร่องรอยของการเก็บเกี่ยวในครั้งก่อน",
"it puts up little resistance before the knife.": "มันไม่สู้คมมีดมากนัก",
"the body of a wanderer lies in a small cavern.": "ร่างของผู้เดินทางทอดกายอยู่ในโพรงหลุม",
"a shivering man approaches and attacks with surprising strength": "ชายตัวสั่นเทิมโจนเข้ามา และโจมตีด้วยความรุนแรงอย่างไม่น่าเชื่อ",
"steel's stronger than iron": "เหล็กกล้าแข็งแกร่งกว่าเหล็กทั่ว ๆ ไป",
"A Strange Bird": "นกประหลาด",
"not enough alien alloy": "มีโลหะต่างดาวไม่เพียงพอ", "not enough wood": "มีไม้ไม่เพียงพอ", "street above the subway platform is blown away.": "พื้นถนนเหนือทางรถไฟใต้ดึงถูกระเบิดออกไป",
"the soldier is dead": "ทหารเสียชีวิต",
"error while saving to dropbox datastorage": "มีอะไรบางอย่างผิดพลาดกับการเก็บข้อมูลใน dropbox",
"the footsteps stop.": "เสียงฝีเท้าสงบลง",
"sniper": "พลซุ่มยิง",
"the coal mine is clear of dangers": "เหมืองถ่านหินปลอดภัยสำหรับคนงานแล้ว",
"the warped man lies dead.": "คนวิปริตได้ตายลงแล้ว",
"something's in the store room": "มีอะไรบางอย่างอยู่ในห้องเก็บของ",
"unfathomable destruction to fuel wanderer hungers.": "การทำลายอย่างไม่สิ้นสุดที่เต็มเห็นความกระหายหยากของผู้เดินทาง",
"embark": "ออกเดินทาง", "scout": "ผู้สำรวจ", "facebook": "facebook",
"the trees yield to dry grass. the yellowed brush rustles in the wind.": "ต้นไม้หายไปจากบริเวณ เหลือแต่ผืนหญ้าแห้ง พุ่มไม้สีเหลืองเสียดสีกันเองตามสายลม",
"save.": "save.", "total score: {0}": "คะแนนรวม: {0}",
"learned to make the most of food": "เรียนรู้การกินอาหารอย่างคุ้มค่า",
"blast": "ยิงลำแสง",
"the sky is grey and the wind blows relentlessly": "ท้องฟ้าเป็นสีเทา ลมพัดกระหน่ำแรง",
"supplies:": "เสบียง:", "the feral terror is dead": "อสูรจรจัดถูกสังหาร",
"the tracks disappear after just a few minutes.": "รอยเท้าหายไปหลังจากตามได้ไม่นานนัก",
"a safe place in the wilds.": "ที่หลบภัยกลางถิ่นกันดาร", "fur": "ขนสัตว์",
"beneath the wanderer's rags, clutched in one of its many hands, a glint of steel.": "มีประกายแสงของโลหะอยู่ใต้ผ้าคลุม มันถูกกอดกุมเอาไว้โดยมือทั้งหลายของผู้เดินทาง",
"buy scales": "ซื้อเกล็ดประหลาด", "mild": "เริ่มอุ่น",
"the hunting lodge stands in the forest, a ways out of town": "ซุ้มพรานถูกสร้างขึ้น ไกลออกไปจากตัวเมือง",
"leave": "ออก", "the convoy can haul mostly everything": "ผู้คุ้มกันสามารถช่วยขนของได้แทบทุกอย่าง",
"learned to strike faster without weapons": "เรียนรู้ที่จะจู่โจมได้เร็วขึ้นโดยไม่ใช้อาวุธ",
"an old house remains here, once white siding yellowed and peeling.": "บ้านหลังเก่ากรุตั้งอยู่ที่นี่ สภาพทรุดโทรมเกินบูรณะ",
"ignore them": "เพิกเฉยเสีย",
"willing to talk about it, for a price.": "ยินที่ที่จะพูดคุยเรื่องดังกล่าว ด้วยราคาที่สมเหตุสมผล",
"a beast, wilder than imagining, erupts out of the foliage": "สัตว์อสูรหน้าตาผิดเพี้ยนเกินจินตนาการโจนตัวออกมาจากสุมทุมพุ่มไม้",
"go home": "กลับบ้าน", "the soldier steps out from between the buildings, rifle raised.": "ทหารก้าวเท้าออกมาจากตรอก ยกปืนขึ้นประทับบ่า",
"force": "พลัง", "the rickety cart will carry more wood from the forest": "รถเข็นจะช่วยให้เก็บไม้จากป่าได้มากขึ้น",
"a ragged stranger stumbles through the door and collapses in the corner": "คนแปลกหน้าในเศษผ้าคลุมเก่า ๆ เดินเข้ามาทางประตูและล้มลงตรงมุมห้อง",
"not enough leather": "มีหนังฟอกไม่เพียงพอ", "the fight is short and bloody, but the beasts are repelled.": "การต่อสู้เป็นไปอย่างรวดเร็วและดุเดือด สัตว์ประหลาดถูกขับไล่ไปได้", "the wood is running out": "ไม้ฟืนเริ่มเหลือน้อยลงเต็มที่", "restart.": "restart.",
"rot's been to work on it, and some of the pieces are missing.": "ดูเหมือนมันจะเริ่มผุพัง และมีหลายชิ้นส่วนที่ยังขาดหายไป",
"workshop's finally ready. builder's excited to get to it": "โรงงานถูกตั้งขึ้นในที่สุด ผู้สร้างดูจะดีใจกว่าใครเพื่อนเป็นพิเศษ",
"a trading post would make commerce easier": "ท่าสินค้าจะทำให้การซื้อขายงายขึ้นมาก", "not enough steel": "มีเหล็กกล้าไม่พอ",
"perks:": "ความสามารถพิเศษ:", "the torch goes out": "คบไฟมอดลง", "saved.": "saved.",
"after a skirmish they are driven away, but not without losses.": "หลังจากการปะทะ พวกมันก็ถูกขับไล่ออกไป แต่ก็ด้วยราคาที่เจ็บปวด",
"the military is already set up at the mine's entrance.": "ดูเหมือนว่ากองทหารได้ตั้งค่ายอยู่หน้าเหมืองมาสักพักแล้ว",
"tannery goes up quick, on the edge of the village": "โรงฟอกหนังถูกตั้งไว้ที่ปลายของหมู่บ้าน",
"learned to fight quite effectively without weapons": "เรียนรู้ที่จะต่อสู้เมื่อไม่มีอาวุธ",
"charred bodies litter the ground.": "ซากศพไหม้เกรียมกระจัดกระจายตามพื้น",
"someone throws a stone.": "มีใครบางคนโยนก้อนหินมา",
"leaves a pile of small teeth behind.": "ทิ้งกองเขี้ยวประหลาดเอาไว้",
"leave city": "ออกจากเมือง", "not enough scales": "มีเกล็ดไม่เพียงพอ",
"someone has locked and barricaded the door to this operating theatre.": "ใครบางคนได้ลั่นกลอนและตั้งเครื่องกีดขวางอยู่ทั่วโรงละคร",
"leave cave": "ออกจากถ้ำ", "hp: {0}/{1}": "hp: {0}/{1}",
"a lone frog sits in the muck, silently.": "กบตัวใหญ่นั่งอยู่ในตมเงียบ ๆ ",
"the steel is strong, and the blade true.": "โลหะแข็งแรงดี และใบดาบก็คมกริบ",
"a shame to let what he'd found go to waste.": "คงไม่ดีถ้าจะให้ของที่เขาอุตส่าห์เหลือไว้มาทิ้งไว้เสียเปล่า",
"learned how to ignore the hunger": "เรียนรู้ที่จะเพิกเฉยต่อความหิวโหย",
"punch": "ชก", "water": "น้ำ", "desert rat": "ชาวทะเลทราย", "explore": "สำรวจ",
"a pack of snarling beasts pours out of the trees.": "ฝูงสัตว์ร้ายโถมออกมาจากต้นไม้รอบ ๆ ",
"punches do even more damage.": "กำปั้นสร้างความเสียหายให้กับศัตรูมากยิ่งขึ้น", "roaring": "ลุกโชติช่วง", "gatherer": "คนเก็บฟืน",
"the people back away, avoiding eye contact.": "ผู้คนค่อย ๆ ถอยออกไป พยายามหลบสายตา",
"A Huge Borehole": "หลุมอุกกาบาตยักษ์",
"a bundle of sticks lies just beyond the threshold, wrapped in coarse furs.": "มีกิ่งไม้วางอยู่ที่เชิงประตู พันไว้ด้วยขนสัตว์",
"builder says she could make finer things, if she had the tools": "ผู้สร้างบอกว่าเธอสามารถสร้างของที่ประณีตกว่านี้ก็ได้ ถ้าเธอมีอุปกรณ์ครบ",
"soldier": "ทหาร", "learn scouting": "เรียนรู้วิชาสำรวจ", "share.": "share.", "choose one slot to save to": "เลือกช่องที่ต้องการบันทึก.",
"A Murky Swamp": "บึง", "iron sword": "ดาบเหล็ก", "builder says she can make traps to catch any creatures might still be alive out there": "ผู้สร้างบอกว่าเธอน่าจะประกอบกับดักง่าย ๆ ไว้จับสัตว์ที่อาจจะอยู่ข้างนอกนั่นได้",
"the grasses thin. soon, only dust remains.": "หญ้าเริ่มบางลงจากบริเวณ เหลือเพียงแต่ฝุ่นทราย",
"a shot rings out, from somewhere in the long grass": "เสียงปืนดังขึ้นจากบางแห่งในพงหญ้า",
"a wall of gnarled trees rises from the dust. their branches twist into a skeletal canopy overhead.": "ถึงชายป่า ต้นไม้บิดเบี้ยวแทงขึ้นมาจากพื้นฝุ่น กิ่งใบประกอบกันเหมือนซี่โครงน่าขยะแขยง", "gather wood": "เก็บไม้",
"with a little effort, it might fly again.": "คงต้องทุ่มแรงนิดหน่อยถ้าจะให้มันบินขึ้นอีกครั้ง",
"A Scavenger": "คนเก็บขยะ", "picking the bones finds some useful trinkets.": "เจอของเล็ก ๆ น้อย ๆ ที่น่าจะเอามาใช้งานได้ในโครงกระดูก",
"the shell of an abandoned hospital looms ahead.": "ศากโรงพยาบาลร้างอยู่ตรงหน้า",
"the villagers hang the thief high in front of the store room.": "ชาวบ้านแขวนคอพวกโจรเหนือขื่อห้องเก้บของ",
"eye for an eye seems fair.": "ตาต่อตา ฟันต่อฟัน คงจะยุติธรรมที่สุดแล้ว", "an old man bursts through a door, wielding a scalpel.": "ชายชราโจนออกมาจากประตู ในมือถือมีดผ่าตัด", "1 medicine": "1 ยารักษา", "the small military outpost is well supplied.": "ป้อมทหารเล็ก ๆ ดูเหมือนจะมีจุเสบียงไว้เต็มที่",
"the clinic has been ransacked.": "คลินิกถูกรื้อค้นจนทั่ว", "drop:": "drop:",
"leaves some scraps of cloth behind.": "ทิ้งเศษผ้าเอาไว้เล็กน้อย", "are you sure?": "คุณแน่ใจหรือไม่?",
"charcutier": "คนตากเนื้อ", "a military perimeter is set up around the mine.": "ค่ายทหารถูกสร้างขึ้น ล้อมรอบด้วยกับระเบิด",
"trading post": "ท่าสินค้า", "a wanderer arrives with an empty cart. says if she leaves with furs, she'll be back with more.": "ผู้เดินทางมาเยี่ยมเยือนพร้อมกับรถเข็น เธอบอกว่าถ้าเธอมีขนสัตว์ให้ยืมสักหน่อย เธอจะเอากลับมาคืนด้วยจำนวนที่มากขึ้น", "in exchange, the wanderer offers his wisdom.": "เพื่อเป็นการแลกเปลี่ยน ผู้เดินทางเสนอความรู้ของเขาเป็นการตอบแทน", "sulphur miner": "เหมืองกำมะถัน",
"a small basket of food is hidden under a park bench, with a note attached.": "ตะกร้าอาหารถูกซ่อนอยู่ใต้เก้าอี้ในสวนสาธารณะ พร้อมกับข้อความสั้น ๆ", "warm": "อุ่น", "the sound of gunfire carries on the wind.": "เสียงยิงปืนดังขึ้นมาตามสายลม", "stoke fire": "เติมฟืน", "lift off": "ปล่อยยาน",
"shoot": "ยิงปืน", "none": "ไม่มี", "leave town": "ออกจากเมือง", "most of the windows at ground level are busted anyway.": "หน้าต่างชั้นล่างถูกพังออกมา",
"a strange looking bird speeds across the plains": "นกหน้าตาประหลาดโฉบมาตามทุ่งราบ", "linger": "รออยู่ต่อ", "take": "เก็บ", "connect game to dropbox local storage": "เชื่อมต่อเกมเข้ากับ dropbox", "strange bird": "นกประหลาด", "if the code is invalid, all data will be lost.": "ถ้าใส่รหัสผิดพลาด ข้อมูลทั้งหมดจะหลายไป", "A Feral Terror": "อสูรจรจัด", "can't see what's inside.": "มองไม่เห็นว่าข้างในมีอะไร", "a large beast charges out of the dark": "สัตว์ตัวใหญ่โจนออกมาจากความมืด", "salvage": "รื้อของ", "grenade": "ระเบิดมือ",
"the stranger in the corner stops shivering. her breathing calms.": "คนแปลกหน้าที่มุมห้องหยุดสั่นลง เธอเริ่มหายใจอย่างสงบ",
"a small suburb lays ahead, empty houses scorched and peeling.": "หมู่บ้านชานเมืองเล็ก ๆ อยู่ตรงหน้า มีร่องรอยของการถูกเผาและทำลาย",
"a wanderer arrives with an empty cart. says if he leaves with wood, he'll be back with more.": "ผู้เดินทางมาเยี่ยมเยือนพร้อมกับรถเข็น เขาบอกว่าถ้าเขามีไม้ให้ยืมสักหน่อย เขาจะเอากลับมาคืนด้วยจำนวนที่มากขึ้น", "gaunt man": "คนผอมแห้ง",
"a squat building up ahead.": "มีอาคารขนาดย่อม ๆ อยู่ข้างหน้า",
"a thug moves out of the shadows.": "นักเลงโผล่ออกมาจากเงามืด", "An Outpost": "ค่าย",
"there's not much, but some useful things can still be found.": "พบของมีประโยชน์บางอย่าง แม้จะไม่มากนักก็ตาม", " and ": " และ ",
"an improvised shop is set up on the sidewalk.": "เพิงร้านค้าเล็ก ๆ ถูกตั้งขึ้นข้างทาง", "cured meat": "เนื้อแห้ง",
"builder puts up a hut, out in the forest. says word will get around.": "ผู้สร้างตั้งกระท่อมเล็ก ๆ ที่ชายป่า เธอบอกว่าข่าวเรื่องที่พักจะกระจายออกไป",
"learned how not to be seen": "เรียนรู้ที่จะไม่ถูกมองเห็น", "punches do more damage": "หมัดสร้างความเสียหายมากขึน",
"some traps have been destroyed": "กับดักบางส่วนถูกทำลาย", "castoff from the mammoth drills can still be found by the edges of the precipice.": "พบชิ้นโลหะประหลาดในกระบอกสว่านขนาดใหญ่", "well armed men charge out of the forest, firing into the crowd.": "กลุ่มคนติดอาวุธอย่างดีระดมเข้ามาจากทางป่าและยิงเข้ามา", "deep in the swamp is a moss-covered cabin.": "ลึกเข้าไปในบึง กระท่อมเล็ก ๆ ตั้งอยู่โดดเดี่ยว",
"app store.": "app store.", "An Old Starship": "ยานอวกาศเก่า", "ignore it": "เพิกเฉยเสีย", "hot": "ร้อน",
"upgrade engine": "เสริมเครื่องยนต์", "forest": "ป่า", "give 500": "ให้ไป 500", "A Dark Room": "ห้องมืด", "a battle was fought here, long ago.": "มีการต่อสู้ในบริเวณนี้เมื่อนานมาแล้ว", "builder says leather could be useful. says the villagers could make it.": "ผู้สร้างบอกว่าหนังฟอกน่าจะมีประโยชน์ พวกชาวบ้านน่าจะทำกันได้", "craft:": "สร้าง:", "Iron&nbsp;Mine": "เหมืองเหล็ก", "coal mine": "เหมืองถ่านหิน", "bits of meat": "เศษเนื้อ","safer here.":"ทีนี่ปลอดภัยดี",
"scavengers must have gotten to this place already.": "พวกเก็บซากคงเข้ามารื้อที่นี่ไปแล้ว",
"the remains of an old camp sits just inside the cave.": "มีเศษซากของค่ายพักแรมเก่า ๆ ในถ้ำ", "The&nbsp;Village": "หมู่บ้าน", "snarling beast": "สัตว์ร้าย", "soldiers patrol the perimeter, rifles slung over their shoulders.": "ทหารลาดตระเวนอยู่ในบริเวณนี้ ปืนยาวสะพายพาดบ่า",
"a swarm of rats rushes up the tunnel.": "ฝูงของหนูโจนเข้ามาจากโพรง",
"faces, darkened by soot and blood, stare out from crooked huts.": "ใบหน้าที่เปื้อนคราบเลือดและดินโคลนมองออกมาจากกระท่อม",
"strange noises can be heard through the walls": "เสียงประหลาดลอดผ่านเข้ามาทางกำแพง", "coal": "ถ่านหิน",
"Stratosphere": "Stratosphere", "man-eater": "อสูรกินคน", "can't tell what they're up to.": "ไม่รู้เหมือนกันว่าพวกนั้นต้องการอะไร",
"enter": "เข้าไป", "a destroyed village lies in the dust.": "หมู่บ้านที่ถูกเผาทำลายจมลงในกองเถ้า", "Ship": "ยาน",
"better avoid conflict in the wild": "คงจะต้องหลีกเลี่ยงการต่อสู้ในป่า", "talk": "พูดคุย", "another beast, draw by the noise, leaps out of a copse of trees.": "สัตว์ป่าอีกตัวที่ถูกดึงดูดมาด้วยเสียง โจนออกมาจากโคนต้นไม้", "A Soldier": "ทหาร",
"the man expresses his thanks and hobbles off.": "ชายคนนั้นแสดงท่าทางขอบคุณก่อนจะเดินกะโผลกกะเผลกออกไป",
"battered technology from both sides lays dormant on the blasted landscape.": "อาวุธผุพังจากทั้งสองฝ่ายวางอยู่นิ่ง ๆ บนผืนดินแห้งกร้าว",
"the villagers haul a filthy man out of the store room.": "ชาวบ้านขนชายท่าทางสกปรกออกมาจากห้องเก็บของ", "strips of meat are hung up to dry in this ward.": "แผ่นเนื้อจะถูกตากไว้ที่นี่", "the familiar curves of a wanderer vessel rise up out of the dust and ash. ": "ยานหน้าตาคุ้นเคยของผู้เดินทางผุดขึ้นมาจากกองเถ้าและฝุ่น", "all the work of a previous generation is here.": "การก่อสร้างของรุ่นก่อน ๆ นั้นอยู่ที่นี่", "cold": "หนาวเย็น", "the iron mine is clear of dangers": "เหมืองเหล็กปลอดภัยแล้ว", "the military presence has been cleared.": "กองทหารถูกเก็บกวาดจากบริเวณ", "A&nbsp;Crashed&nbsp;Starship": "ซากยานอวกาศ", "the fire is {0}": "ไฟ {0}", "A Lonely Hut": "กระท่อมเดียวดาย", "buy teeth": "ซื้อเขี้ยว",
"a small supply cache is hidden at the back of the cave.": "กล่องเก็บของเล็ก ๆ ถูกซ่อนไว้ที่ปลายถ้ำ",
"iron's stronger than leather": "เหล็กทนทานกว่าหนังสัตว์", "bedrolls, torn and blackened, lay beneath a thin layer of dust.": "มีถุงนอนฉีกขาดและไหม้เกรียม วางอยู่ใต้ชั้นบาง ๆ ของฝุ่น", "dodge attacks more effectively": "หลบการโจมตีได้ดีขั้น", "hull: ": "เกราะหุ้ม:",
"a madman attacks, screeching.": "ชายคุ้มคลั่งโจนเข้ามาโจมตี กรีดร้องเสียงดัง", "thieves": "โจร",
"the towers that haven't crumbled jut from the landscape like the ribcage of some ancient beast.": "หอคอยที่ไม่ได้ล้มลง สร้างภาพทิวทัศน์เหมือนซี่โครงของสัตว์ยักษ์โบราณ", "lights off.": "lights off.", "someone had been stockpiling loot here.": "ใครบางคนเอาสมบัติของตนมาเก็บไว้ที่นี่",
"learned to look ahead": "เรียนรู้ที่จะมองให้ไกลออกไป", "the mine is now safe for workers.": "เหมืองปลอดภัยสำหรับคนงานแล้ว",
"Coal&nbsp;Mine": "เหมืองถ่าน", "empty corridors.": "ระเบียงว่างเปล่า", "save to slot": "ช่องบันทึก",
"the owner stands by, stoic.": "เจ้าของที่ยืนอยู่นิ่ง ๆ อย่างสุขุม", "hunter": "พราน", "strips of meat hang drying by the side of the street.": "แผ่นเนื้อถูกวางตากไว้ข้างทางเดิน", "more squatters are crowding around now.": "คนจรจัดเริ่มรวมตัวกันมารอบ ๆ ",
"some weird glowing boxes he picked up on his travels.": "กล่องเรื่องแสงหน้าตาประหลาดที่เขาเก้บมาได้ระหว่างเดินทาง",
"a panicked scavenger bursts through the door, screaming.": "คนเก็บเศษซากโจนเข้ามาจากประตู กรีดร้องเสียงดัง", "give 50": "ให้ไป 50",
"wagon": "เกวียน", "An&nbsp;Old&nbsp;House": "บ้านเก่า", "a soldier, alerted, opens fire.": "ทหารรู้สึกถึงผู้บุกรุก ทาบปืนพร้อมยิงทันที",
"meat": "เนื้อ", "the tunnel opens up at another platform.": "โพรงเปิดขึ้นมาจากอีกเพิงหนึ่ง", "a terrible plague is fast spreading through the village.": "โรคระบาดกระจายไปอย่างรวดเร็วทั่วหมู่บ้าน", "the gaunt man is dead": "ชายผอมแห้งเสียชีวิต", "bone spear": "หอกกระดูก", "trap": "กับดัก",
"the street ahead glows with firelight.": "ถนนตรงหน้าสว่างไสวไปด้วยเปลวไฟ", "armourer": "ช่างอาวุธ",
"a large shanty town sprawls across the streets.": "เมืองสลัมขนาดใหญ่แผ่ไปทั่วถนน",
"the shell of a burned out car blocks the entrance.": "โครงของซากรถไม้ ๆ ปิดทางเข้าเอาไว้",
"a small group arrives, all dust and bones.": "กลุ่มคนเล็ก ๆ เดินทางมาถึง ผอมแห้งหิวโซ", "A&nbsp;Ruined&nbsp;City": "ซากเมือง",
"weight": "น้ำหนัก", "torch": "คบไฟ", "The Thief": "โจร", "not enough cloth": "มีเศษผ้าไม่เพียงพอ",
"a youth lashes out with a tree branch.": "เด็กหนุ่มคนหนึ่งโจนออกมาพร้อมกิ่งไม้",
"the rest of the hospital is empty.": "ที่อื่น ๆ ในโรงพยาบาลนั้นว่างเปล่า", "connect": "เชื่อมต่อ",
"learned to be where they're not": "เรียนรู้ที่จะหลบหลีกอันตราย", "go twice as far without eating": "เดินทางได้ไกลขึ้นโดยไม่กินอาหาร",
"scavenger'd been looking for supplies in here, it seems.": "ดูเหมือนพวกเก็บซากขยะจะเคยเข้ามาหาของที่นี่",
"there's nothing else here.": "ไม่มีอะไรอยู่เลย", "the plague is kept from spreading.": "โรคระบาดถูกหยุดไว้ได้",
"the cask holds enough water for longer expeditions": "กระบอกน้ำเก็บน้ำไว้ได้สำหรับการเดินทางระยะยาว",
"check traps": "ตรวจดูกับดัก", "Plague": "โรคระบาด", "medicine": "ยา", "the old man had a small cache of interesting items.": "ชายแก่มีของที่น่าสนใจติดตัวมาด้วย", "tannery": "โรงฟอกหนัง", "lob": "ขว้างระเบิด", "no more room for huts.": "ไม่มีที่สำหรับกระท่อมแล้ว", "a plague afflicts the village":"เกิดโรคร้ายขึ้นในหมู่บ้าน",
"they took what they came for, and left.": "พวกมันมาเอาของที่พวกมันมองหา แล้วก็จากไป",
"through the large gymnasium doors, footsteps can be heard.": "ได้ยินเสียงฝีเท้าผ่านประตูของโรงยิม","epidemic is eradicated eventually":"โรคร้ายได้หยุดลงในที่สุด",
"a large creature attacks, claws freshly bloodied": "สัตว์ประหลาดขนาดใหญ่เข้ามาโจมตี กรงเล็บของมันยังคงเปื้อนเลือดสด ๆ อยู่",
"a green cross barely visible behind grimy windows.": "มองผ่านหน้าต่างเปรอะฝุ่น มองเห็นเพียงกางเขนสีเขียวจาง ๆ ",
"a sick man hobbles up": "ชายทางทางป่วยกระเพลกเข้ามา", "An&nbsp;Abandoned&nbsp;Town": "เมืองร้าง", "cart": "รถเข็น",
"might be things worth having still inside.": "อาจจะยังมีของมีค่าอยู่ข้างใน", "the wood has run out": "ฟืนเริ่มเหลือน้อยเต้มที่",
"The Master": "ผู้สั่งสอน", "thrust": "เสียบ", "water replenished": "น้ำถูกเติมจนเต็ม", "a soldier opens fire from across the desert": "ทหารยิงปืนเข้ามาใส่จากอีกฟากของเนินทราย", "go twice as far without drinking": "เดินทางได้ไกลขึ้นโดยไม่ดื่มน้ำ",
"the tentacular horror is defeated.": "ปราบสัตว์ประหลาดหนวดยาวลงได้", "an overturned caravan is spread across the pockmarked street.": "คาราวานสินค้าคว่ำลงบนถนน", "the villagers retreat to mourn the dead.": "ชาวบ้านล่าถอยกลับมาเพื่อทำพิธีให้กับผู้ตาย",
"A Modest Village": "หมู่บ้านทั่วไป", "A Damp Cave": "ถ้ำชื้นแฉะ", "swing": "ฟาด", "alien alloy": "โลหะต่างดาว", "export or import save data, for backing up": "ส่งหรือรับข้อมูลเกม สำหรับการเก็บรักษา", "smokehouse": "โรงรมเนื้อ", "vague shapes move, just out of sight.": "ร่างราง ๆ เคลื่อนไหวออกไปจากสายตา", "Wanderer": "ผู้เดินทาง", "the earth here is split, as if bearing an ancient wound": "แผ่นดินตรงนี้แยกออก ราวกับว่าเป็นแผลเปิดจากกาลก่อน", "the compass points southeast": "เข็มทิศชี้ไปยังตะวันออกเฉียงใต้", "barbarian": "คนเถื่อน", "the wanderer leaves, cart loaded with furs": "ผู้เดินทางจากไปด้วยรถเข็มที่เต็มไปด้วยขนสัตว์", "there are still supplies inside.": "ยังมีของบางอย่างหลงเหลืออยู่ข้างใน", "traps are more effective with bait.": "กับดักจะมีผลลัพท์ดียิ่งขึ้นเมื่อมีเหยื่อล่อ", "rusted chainlink is pulled across an alleyway.": "โซ่เกรอสนิมถูกลากผ่านตรอกทางเดิน", "a sickness is spreading through the village.": "โรคประหลาดเริ่มแพร่ไปในหมู่บ้าน", "tangle": "รวบตัว", "miss": "พลาดเป้า",
"the meat has run out": "ไม่มีเนื้อเหลืออยู่แล้ว",
"a beast charges out of a ransacked classroom.": "สัตว์ป่าโจนออกมาจากห้องเรียน",
"lucky that the natives can't work the mechanisms.": "โชคดีที่พวกพื้นเมืองไม่สามารถใช้เครื่องยนต์กลไกเหล่านี้ได้", "A&nbsp;Murky&nbsp;Swamp": "บึง",
"just as deadly now as they were then.": "อันตรายเหมือนอย่างที่เคยเป็นเมื่อก่อน", "builder just shivers": "ผู้สร้างเริ่มรู้สึกเย็น", "a second soldier joins the fight.": "ทหารคนที่สองเข้ามาเสริมกำลัง", "attack": "โจมตี", "go inside": "เข้าไปข้างใน",
"turn her away": "ไล่เธอไป", "dropbox.": "dropbox.", "reinforce hull": "เสริมเกราะหุ้ม", "not enough wood to get the fire going": "มีไม้ไม่พอสำหรับต่อไฟ",
"a stranger arrives in the night": "คนแปลกหน้าเข้ามาอาศัยในเวลาค่ำ", "hut": "กระท่อม", "trapper": "ผู้ดักสัตว์", "a battered highway sign stands guard at the entrance to this once-great city.": "ป้ายบอกทางตั้งตระหง่านอยู่หน้าเมืองใหญ่ที่เคยรุ่งเรืองแห่งนี้", "rifle": "ปืนยาว", "sulphur": "กำมะถัน", "steel": "เหล็กกล้า",
"the stranger is standing by the fire. she says she can help. says she builds things.": "หญิงสาวแปลกหน้านั่งอยู่ข้างกองไฟ เธอบอกว่าเธอสามารถช่วยสร้างสิ่งต่าง ๆ ได้",
"the sickness is cured in time.": "โรคร้ายได้รับการรักษาทันเวลา",
"the only hope is a quick death.": "ความหวังเดียวคือการตายอย่างไม่ทรมาน",
"score for this game: {0}": "คะแนนในรอบนี้: {0}", "the lizard is dead": "กิ้งกาถูกสังหาร", "iron": "เหล็ก", "fires burn in the courtyard beyond.": "ไฟลุกท่วมในสนามตรงหน้า", "builder": "ผู้สร้าง",
"a large creature lunges, muscles rippling in the torchlight": "สัตว์ร้ายตัวใหญ่โจนออกมา กล้ามเนื้อและผิวหนังของมันสะท้อนแสงจากคบไฟ", "something's causing a commotion a ways down the road.": "มีเสียงดังเอะอะมาจากฝั่งหนึ่งของถนน", "the stranger shivers, and mumbles quietly. her words are unintelligible.": "หญิงแปลกหน้าตัวสั่นเทิม กระซิบกระซาบอะไรบางอย่างไม่เป็นภาษา", "A Firelit Room": "ห้องแสงไฟ",
"some wood is missing.": "ไม้บางส่วนหายไป", "The Beggar": "ขอทาน", "Troposphere": "Troposphere", "ripe for the picking.": "พร้อมให้เก็บเกี่ยว", "A&nbsp;Destroyed&nbsp;Village": "ซากหมู่บ้าน", "coal miner": "เหมืองถ่าน", "not enough teeth": "มีเขี้ยวไม่เพียงพอ", "all he has are some scales.": "เชามีเพียงแค่เกล็ดประหลาดติดตัวเท่านั้น",
"learned to predict their movement": "เรียนรู้ที่จะคาดการณ์การเคลื่อนไหวศัตรูล่วงหน้า",
"the nights are rent with screams.": "คำคืนนั้นเต็มไปด้วยเสียงร้องโหยหวน", "the scavenger is dead": "คนเก็บขยะถูกสังหาร", "a nomad shuffles into view, laden with makeshift bags bound with rough twine.": "ผู้เร่ร่อนเดินทางมายังที่พักพร้อมกับถุงหนังขนาดใหญ่มัดด้วยเชือกหยาบ ๆ ",
"a convoy lurches in, equal parts worry and hope.": "ผู้คุ้มกันโจนเข้ามาอย่างกล้า ๆ กลัว ๆ", "the map uncovers a bit of the world": "แผนที่เปิดเผยบางส่วนของดินแดน",
"the shot echoes in the empty street.": "เสียงปืนดังลั่นขึ้นบนถนนร้าง", "the sounds stop.": "เสียงนั้นหยุดลง", "rucksack": "ถุงหนัง", "the towers of a decaying city dominate the skyline": "ตึกสูงของเมืองที่ผุพังปรากฏขึ้นที่ขอบฟ้า",
"lights on.": "lights on.",
"a torch to keep the dark away": "คบไฟใช้ขับไล่ความมืด",
"some good stuff woven into its nest.": "มีของดีหลาย ๆ อย่างพันเกี่ยวเป็นรังของมันขึ้นมา", "starvation sets in": "ความหิวโหยเริ่มคุกคามเข้ามา",
"the sniper is dead": "สังหารพลซุ่มยิงสำเร็จ", "nothing": "ไม่มีอะไร",
"say his folk have been skimming the supplies.": "บอกว่าคนของเขากำลังพยายามหาเครื่องใช้และเสบียง", "Restart?": "เริ่มเกมใหม่?", "this is irreversible.": "การกระทำนี้ไม่สามารถย้อนกลับได้",
"the town's booming. word does get around.": "เมืองเริ่มคึกคักขึ้นมาก ผู้คนบอกกันปากต่อปากถึงเมืองนี้", "Dropbox connection": "เชื่อมต่อกับ Dropbox",
"arms and munitions, relics from the war, are neatly arranged on the store-room floor.": "อาวุธยุทโธปกรณ์สำหรับสงคราม ถูกวางอย่างประณีตในห้องเก็บของ",
"iron miner": "เหมืองเหล็ก", "give 100": "ให้ไป 100",
"Export": "Export", "the operating theatre has a lot of curious equipment.": "โรงละครมีของหลายอย่างที่น่าสนใจอย่างมาก", "A Sniper": "พลซุ่มยิง",
"the mysterious wanderer returns, cart piled high with wood.": "ผู้เดินทางลึกลับกลับมาที่นี่ รถเข็นพูนสูงไปด้วยไม้", "a snarling beast jumps out from behind a car.": "สัตว์ร้ายกระโดดออกมาจากหลังซากรถ", "precise": "ความแม่นยำ",
"looks like a camp of sorts up ahead.": "ดูเหมือนจะมีค่ายอะไรสักอย่างข้างหน้า", "bait": "เหยื่อล่อ", "The Sulphur Mine": "เหมืองกำมะถัน", "stunned": "มึนงง",
"a thief is caught": "โจรถูกจับไว้ได้", "a beggar arrives.": "ขอทานเดินทางมายังที่พัก",
"the strange bird is dead": "สังหารนกประหลาด", "*** EVENT ***": "*** เหตุการณ์พิเศษ ***", "the grass thrashes wildly as a huge lizard pushes through": "พงหญ้าเหวี่ยงไปมาอย่างรวดเร็วเมื่อกิ้งก่ายักษ์โจนออกมา", "medicine is needed immediately.": "ต้องการยาอย่างเร่งด่วน", "A Crashed Ship": "ซากยาน",
"the town lies abandoned, its citizens long dead": "เมืองถูกทิ้งร้าง ประชากรคงเสียชีวิตกันหมดแล้ว", "give 1 medicine": "ให้ยาไป 1",
"the old compass is dented and dusty, but it looks to work.": "เข็มทิศเก่ามีหน้าปัดเบี้ยวและขึ้นสนิม แต่ยังดูเหมือนจะใช้งานได้อยู่", "wood": "ไม้",
"A Forgotten Battlefield": "สนามรบที่ถูกลืม",
"the trees are gone. parched earth and blowing dust are poor replacements.": "ต้นไม้หายไปจากสายตา พื้นดินแห้งผากและลมพัดแรงเข้ามาแทนที่",
"lodge": "ซุ้มพราน", "the debris is denser here.": "ซากปรักหักพังเริ่มกีดขวางทางมากขึ้นในบริเวณนี้", "a scout stops for the night": "ผู้สำรวจแวะมาพักที่นี่", "a gunshot rings through the trees.": "เสียงปืนลังลั่นทั่วท้องถนน",
"pop ": "ประชากร ", "somewhere above the debris cloud, the wanderer fleet hovers. been on this rock too long.": "บนท้องฟ้า ยานลำหนึ่งของผู้เดินทางลอยขึ้นไป ดูเหมือนเราจะอยู่บนหินโง่ ๆ นี่นานไปเสียแล้ว", "iron mine": "เหมืองเหล็ก", "freezing": "หนาวเหน็บ",
"the world fades": "สิ่งรอบ ๆ ตัวเริ่มจางลงช้า ๆ", "some of the traps have been torn apart.": "กับดักส่วนหนึ่งถูกทำลาย", "not enough iron": "มีเหล็กไม่พอ",
"compass": "เข็มทิศ", "successfully saved to dropbox datastorage": "บันทึกลงใน dropbox สำเร็จ",
"builder says it'd be useful to have a steady source of bullets": "ผู้สร้างบอกว่าถ้าเราสามารถผลิตกระสุนได้เองก็คงจะดี", "a mysterious wanderer arrives": "ผู้เดินทางลึกลับปรากฏตัวขึ้น", "An Old House": "บ้านเก่า ๆ",
"bleached bones are strewn about the entrance. many, deeply scored with jagged grooves.": "โครงกระดูกกองเรี่ยรายหน้าทางเข้า บางชิ้นมีร่องรอยของการขูดขีดอย่างชัดเจน",
"as soon as the door is open a little bit, hundreds of tentacles erupt.": "เมื่อเปิดประตูออก หนวดประหลาดก็พุ่งส่วนออกมาทันที", "leather": "หนังฟอก",
"a sound comes from the tunnel, just ahead.": "มีเสียงอะไรบางอย่างดังมาจากข้างในของโพรง",
"investigate": "ตรวจดู", "the cave narrows a few feet in.": "ถ้ำเริ่มแคบลงเมื่อเดินลึกเข้าไป", "sword is sharp. good protection out in the wilds.": "ดาบมีคม เหมาะสำหรับการป้องกันตัวในป่า", "orange traffic cones are set across the street, faded and cracked.": "มีกรวยจลาจรอู่ข้างถนน สีของมันเลือนไปเกือบหมด",
"a large man attacks, waving a bayonet.": "ชายร่างใหญ่เข้ามาโจมตี เหวี่ยงดาบปลายปืนไปมา",
"the air is filled with dust, driven relentlessly by the hard winds.": "ละอองฝุ่งปนเปื้อนในอากาศ พัดไหวไปมาตามลม", "A&nbsp;Damp&nbsp;Cave": "ถ้าชื้นแฉะ",
"a gaunt man approaches, a crazed look in his eye": "ชายร่างผอมเกร็งวิ่งเข้ามา มีแววตาของความบ้าคลั่ง", "A Military Raid": "กองทหารโจมตี",
"the walls are moist and moss-covered": "ผนังมีน้ำไหลแลลชื้น ปกคลุมด้วยมอส",
"a giant lizard shambles forward": "กิ้งก่ายักษ์คืบคลานเข้ามา", "close": "ปิด",
"some medicine abandoned in the drawers.": "มียาเล็กน้อยถูกทิ้งไว้ในตู้",
"strange scales": "เกล็ดประหลาด", "bayonet": "ดาบปลายปืน",
"learned to throw punches with purpose": "เรียนรู้ที่จะต่อยอย่างมีจุดมุ่งหมาย",
"a shack stands at the center of the village.": "มีเพิงไม้ตั้งอยู่กล้าหมู่บ้าน",
"spare him": "ไว้ชีวิตเขา", "he smiles warmly and asks for lodgings for the night.": "เขายิ้มให้น้อย ๆ และขออาศัยอยู่ที่นี่สักคืน", "stealthy": "ซ่อนตัว", "the sulphur mine is clear of dangers": "เหมืองกำมะถันปลอดภัยสำหรับคนงานแล้ว",
"weapons": "อาวุธ", "the man is thankful.": "ชายคนนั้นขอบคุณ",
"broken streetlights stand, rusting. light hasn't graced this place in a long time.": "เสาไฟตั้งตระหง่าน สนิมเกาะกรัง คงจะไม่มีแสงไฟแตะที่แห่งนี้อยู่นานพอดู",
"shares what he knows about sneaking before he goes.": "เขามอบความรู้เกี่ยวกับการซ่อนตัวก่อนจากไป", "import": "Import", "available": "มีอยู่",
"A Shivering Man": "คนตัวสั่น", "the rest bury them.": "ส่วนที่เหลือก็ฝั่งพวกมันไป",
"smoldering": "คุกรุ่น", "the young settler was carrying a canvas sack.": "ผู้ตั้งรกรากหอบถุงผ้าใบมาด้วย",
"the ground is littered with small teeth": "บนพื้นมีเขี้ยวเล็ก ๆ กระจัดกระจายเต็มไปหมด", "the nest of a large animal lies at the back of the cave.": "ที่สุดปลายถ้ำมีรังของสัตว์ขนาดใหญ่อยู่", "A Tiny Village": "หมู่บ้านเล็ก ๆ ", "a tribe of elderly squatters is camped out in this ward.": "ชนเผ่าที่มีแต่คนชราปักหลักอาศัยอยู่ในหอผู้ป่วยแห่งนี้", "your are connected to dropbox with account / email ": "คุณเชื่อมต่อกับ dropbox", "Mesosphere": "Mesosphere",
"agree": "ตกลง", "the double doors creak endlessly in the wind.": "ประตูเปิดแง้มออกมีเสียงออดแอดตามลม", "not much here.": "ไม่มีอะไรอยู่แถวนี้",
"got it": "เข้าใจแล้ว", "choose one slot to load from": "เลือกช่องที่ต้องการโหลดบันทึก", "a cave lizard attacks": "กิ้งก่าถ้ำเข้าจู่โจม",
"men mill about, weapons at the ready.": "ผู้คนหรี่ตรงเข้ามา ยกอาวุธขึ้นพร้อมโจมตี", "l armour": "เกราะหนัง", "steelworks": "โรงหลอมโลหะ",
"A Ruined City": "ซากเมือง", "Noises": "เสียง", "can't tell what left it here.": "ไม่รู้ว่าใครทิ้งมันเอาไว้", "trees loom on the horizon. grasses gradually yield to a forest floor of dry branches and fallen leaves.": "ต้นไม้เริ่มปรากฏให้เห็น ทุ่งหญ้ารอบ ๆ ตัวจากไป เหลือแต่พื้นบนป่าที่มีใบไม้กิ้งไม้แห้งระเกะระกะ",
"a man stands over a dead wanderer. notices he's not alone.": "ชายคนหนึ่งยืนอยู่ข้างศพของผู้เดินทาง รับรู้ได้ว่าเขาไม่ได้อยู่เพียงลำพัง", "village": "หมู่บ้าน",
"cancel": "ยกเลิก", "put the save code here.": "ใส่รหัสบันทึกลงที่นี่", "hang him": "แขวนคอเขาซะ",
"inside, the remains of its victims are everywhere.": "มีซากศพของเหยื่อที่ถูกมันสังหารระเกะระกะภายใน", "this spear's not elegant, but it's pretty good at stabbing": "หอกเล่มนี้อาจไม่สวยงามนัก แต่ถ้าใช้แทงล่ะก็เชื่อมือได้เลย", "the forest is silent.": "ในป่าเงียบสงัด", "A&nbsp;Borehole": "หลุมอุกกาบาต",
"the night is silent.": "คำคืนนี้เงียบสงัด", "never go thirsty again": "ไม่ต้องทนหิวน้ำอีกต่อไป", "a small cache of supplies is tucked inside a rusting locker.": "กล่องเสบียงถูกยัดเอาไว้ในตู้สนิมเขรอะ", "learned to love the dry air": "เรียนรู้ที่จะรักอากาศแห้ง ๆ ", "workshop": "โรงงาน",
"A Barren World": "โลกที่รกร้างว่างเปล่า", "see farther": "มองเห็นได้ไกลขึ้น", "bolas": "บ่วงบาศก์", "the ground is littered with scraps of cloth": "เศษผ้าวางกระจัดกระจายเต็มพื้น", "The Coal Mine": "เหมืองถ่านหิน", "a huge lizard scrambles up out of the darkness of an old metro station.": "กิ้งก่ายักษ์ตะกายขึ้นมาจากสถานีรถไฟใต้ดินเก่า", "more voices can be heard ahead.": "เสียงต่าง ๆ ยังคงดังอยู่ข้างหน้า",
"A Large Village": "หมู่บ้านขนาดใหญ่", "precision": "ความแม่นยำ", "A Deserted Town": "เมืองร้าง", "the sickness spreads through the village.": "ไข้หวัดกระจายไปทั่วหมู่บ้าน", "won't say from where he came, but it's clear that he's not staying.": "ไม่ยอมบอกว่าเขามาจากที่ไหน แต่ที่แน่ ๆ เขาคงอยู่ที่นี่ไม่นาน",
"the crowd surges forward.": "กลุ่มคนโถมมาข้างหน้า", "the wanderer takes the charm and nods slowly.": "ผู้เดินทางรับเครื่องรางเอาไว้แล้วผงกศีรษะช้า ๆ ",
"the mysterious wanderer returns, cart piled high with furs.": "ผู้เดินทางลึกลับกลับมาพร้อมกับรถเข็มที่พูนไปด้วยแผ่นหนัง", "armoury": "โรงอาวุธ",
"searching the bodies yields a few supplies.": "มีเสบียงติดมากับซากศพเล็กน้อย",
"the torchlight casts a flickering glow down the hallway.": "คบไฟส่องแสงราง ๆ ไปตามทางเดิน", "Export / Import": "Export / Import",
"steelworker": "ช่างโลหะ", "the man-eater is dead": "ตัวกินคนถูกสังหาร", "learned to swing weapons with force": "เรียนรู้ที่จะซัดอาวุธเต็มกำลัง",
"the remaining settlers flee from the violence, their belongings forgotten.": "ผู้ตั้งถิ่นฐานหนีไปเมื่อเห็นการปะทะ ลืมของบางอย่างเอาไว้",
"a crudely made charm": "เครื่องรางที่แกะขึ้นอย่างหยาบ ๆ ", "cask": "กระติกน้ำ", "engine:": "เครื่องยนต์",
"the streets are empty.": "ถนนว่างเปล่า", "lizard": "กิ้งก่า", "Sulphur&nbsp;Mine": "เหมืองกำมะถัน", "export or import save data to dropbox datastorage": "export หรือ import บันทึกเกมด้วย dropbox", "the house has been ransacked.": "บ้านหลังนี้ถูกรื้อค้นจนเกลี้ยง",
"a thug is waiting on the other side of the wall.": "พวกนักเลงรออยู่ในอีกฟากของกำแพง", "the metallic tang of wanderer afterburner hangs in the air.": "มีกลิ่นโลหะของเครื่องยนต์ยานผู้เดินทางลอยอยู่ในอากาศจาง ๆ ", "large prints lead away, into the forest.": "รอยเท้าขนาดใหญ่นำทางเข้าไปในป่า",
"a startled beast defends its home": "สัตว์ป่าพยายามป้องกันดินแดนของตน", "there is nothing else here.": "ไม่มีอะไรอยู่แถวนี้อีกแล้ว",
"his time here, now, is his penance.": "เวลาที่เหลือของเขา ติดอยู่ที่นี่เพื่อเป็นการสำนักบาปในอดีต", "where the windows of the schoolhouse aren't shattered, they're blackened with soot.": "จุดที่หน้าต่างของโรงเรียนไม่แตกออก ก็ถูกปกคลุมด้วยเขม่าดำ", "hull:": "เกราะหุ้ม:", "scavenger": "คนเก็บขยะ",
"unarmed master": "ปรมาจารย์หมัดเปล่า", "the man says he's grateful. says he won't come around any more.": "ชายผู้นั้นขอบคุณ และกล่าวว่าเขาจะไม่มารบกวนอีก",
"laser rifle": "ปืนเลเซอร์", "sulphur mine": "เหมืองกำมะถัน", "buy compass": "ซื้อเข็มทิศ", "buy map": "ซื้อแผนที่", "scratching noises can be heard from the store room.": "มีเสียงขีดข่วนดังขึ้นมาจากห้องเก็บของ", "steel sword": "ดาบเหล็กกล้า", "descend": "ลงไป",
"asks for any spare furs to keep him warm at night.": "ขอเศษขนสัตว์เหลือ ๆ เพื่อห่มคลายหนาวให้กับเขาเอง", "A Raucous Village": "หมู่บ้านยิ่งใหญ่",
"the beggar expresses his thanks.": "ขอทานแสดงความขอบคุณ", "carrying more means longer expeditions to the wilds": "เก็บของได้มากขึ้นหมายถึงสำรวจได้นานขึ้น", "free {0}/{1}": "ที่ว่าง {0}/{1}", "Room": "ห้อง", "a swamp festers in the stagnant air.": "บึงมีกลิ่นฉุนกึกลอยละล่องอยู่ในอากาศรอบ ๆ ", "rotting reeds rise out of the swampy earth.": "ต้นกกเน่าเปื่อยลอยคว้างอยู่กลางน้ำโคลน",
"armoury's done, welcoming back the weapons of the past.": "โรงอาวุธสร้างขึ้นอย่างสมบูรณ์ พร้อมใช้งาน", "eat meat": "กินเนื้อ",
"slow metabolism": "เผาผลาญช้า", "camp fires burn by the entrance to the mine.": "มีกองไฟอยู่หน้าทางเข้าเหมือง", "the mouth of the cave is wide and dark.": "ปากถ้ำเปิดกว้างแต่มืดสนิท", "builder's not sure he's to be trusted.": "ผู้สร้างไม่เชื่อว่าผู้มาเยือนจะไว้ใจได้", "evasion": "หลบหลีก",
"buy bait": "ซื้อเหยื่อล่อ", "a pack of lizards rounds the corner.": "ฝูงกิ้งก่าล้อมทางหนีเอาไว้", "light fire": "จุดไฟ",
"waterskin": "ถุงใส่น้ำ", "scattered teeth": "เขี้ยวที่กระจัดกระจาย", "the door hangs open.": "ประตูเปิดอ้าเอาไว้", "buy:": "ซื้อ:", "load": "load",
"track them": "ตามรอยไป", "stores": "เก็บ", "now the nomads have a place to set up shop, they might stick around a while": "ทีนี้ผู้เร่ร่อนก็มีร้านเป็นของตนเอง พวกเขาน่าจะอยู่นานขึ้น", "A Dusty Path": "เส้นทางเปรอะฝุ่น", "armour": "ชุดเกราะ", "A Man-Eater": "ตัวกินคน",
"bring your friends.": "พาเพื่อนไปด้วย", "the compass points south": "เข็มทิศชี้ไปทางทิศใต้",
"the compass points north": "เข็มทิศชี้ไปทางทิศเหนือ", "The Sick Man": "คนป่วย", "yes": "ใช่", "martial artist": "นักสู้มือเปล่า",
"the traps contain ": "ในกับดักมี : ", "the old tower seems mostly intact.": "หอคอยใหญ่ ดูภายนอกสมบูรณ์ดี", "scales": "เกล็ด",
"bird must have liked shiney things.": "พวกนกน่าจะชอบของสะท้อนแสง", "the path leads to an abandoned mine": "เส้นทางนี้นำไปสู่เหมืองร้าง",
"the compass points northeast": "เข็มทิศชี้ไปทางทิศตะวันออกเฉียงเหนือ", "the camp is still, save for the crackling of the fires.": "ค่ายเงียบสงบดี มีเพียงเสียงของเปลวไฟและฟืนเป็นครั้งคราว", "he begs for medicine.": "เขามาขอยา", "save": "บันทึก",
"this waterskin'll hold a bit of water, at least": "อย่างน้อยถุงน้ำก็ยังเก็บน้ำมากกว่าไม่มีอะไรเลย", "turn him away": "ไล่เขาไป",
"the people here were broken a long time ago.": "ผู้คนที่นี่ไม่สามารถทำอะไรได้เป็นชิ้นเป็นอันมานานมากแล้ว", "a grizzled soldier attacks, waving a bayonet.": "ทหารท่าทางดุดันพุ่งเข้ามาโจมตี โบกดาบปลายปืนไปมา", "shivering man": "คนตัวสั่น", "The Mysterious Wanderer": "ผู้เดินทางลึกลับ", "A Huge Lizard": "กิ้งก่ายักษ์",
"boxer": "นักมวย", "a man joins the fight": "ชายคนหนึ่งเข้ามาร่วมวงด้วย", "An&nbsp;Outpost": "ค่ายพักแรม", "not enough meat": "มีเนื้อไม่พอ",
"some weird metal he picked up on his travels.": "โลหะประหลาดที่เขาเก้บมาได้จากการเดินทาง", "something's in there.": "มีอะไรบางอย่างข้างใน",
"restore more health when eating": "ฟื้นฟูพลังชีวิตมากขึ้นจากอาหาร", "A Snarling Beast": "สัตว์ร้าย", "Share": "Share",
"a haze falls over the village as the steelworks fires up": "หมอกควันปกคลุมหมู่บ้าน โรงเหล็กถูกสร้างขึ้นอย่างสมบูรณ์", "a large bird nests at the top of the stairs.": "มีรังนกขนาดใหญ่อยู่บนบันได", "an old wanderer sits inside, in a seeming trance.": "ผู้เดินทางชรานั่งอยู่ข้างใน ดูเหมือนกำลังครุ่นคิดเหม่อลอย",
"builder says the villagers could make steel, given the tools": "ผู้สร้างบอกว่าชาวบ้านสามารถสร้างเหล็กได้ ถ้ามีอุปกรณ์ให้", "continue": "ไปต่อ",
"there is no more water": "ไม่มีน้ำเหลืออยู่แล้ว", "flickering": "พริ้วไหว", "only the chief remains.": "มีเพียงหัวหน้าใหญ่เท่านั้นที่เหลืออยู่",
"go back inside": "กลับเข้าไปข้างใน", "a few items are scattered on the ground.": "มีของจำนวนหนึ่งระเกะระกะบนพื้น", "save this.": "เก็บเอาไว้",
"this old mine is not abandoned": "ดูเหมือนเหมืองเก่าจะไม่รกร้างซะทีเดียว", "a fight, maybe.": "คงจะต้องสู้", "behind the door, a deformed figure awakes and attacks.": "หลังบานประตู มีร่างประหลาดตื่นขึ้นมาและเข้าจู่โจมทันที", "twitter": "twitter", "baited trap": "กับดักติดเหยื่อ", "dead": "ดับมอด",
"the torch sputters and dies in the damp air": "คบไฟค่อย ๆ ดับมอดลงจากความชื้นในอากาศ", "export": "export",
"a few belongings rest against the walls.": "ของเหลือ ๆ บางอย่างพาดไว้กับผนัง", "not far from the village lies a large beast, its fur matted with blood.": "ไม่ไกลนักจากหมู่บ้าน มีสัตว์ร้ายที่ขนเปรอะไปด้วยเลือด", "an old iron mine sits here, tools abandoned and left to rust.": "มีเหมืองเหล็กเก่าที่นี่ อุปกรณ์ต่าง ๆ ถูกทิ้งเอาไว้ให้สนิมเกาะเฉย ๆ ", "but there is a cache of medicine under the floorboards.": "แต่ว่ามีกล่องเก็บยาอยู่ใต้พื้นอีกที",
"only dust and stains remain.": "เหลือเพียงฝุ่นเกรอะและคราบสนิม", "s armour": "เกราะเหล็กกล้า", "say he should be strung up as an example.": "เขาควรถูกแขวนคอเอาไว้เพื่อไม่ให้เป็นเยี่ยงอย่าง", "collected scraps spread across the floor like they fell from heaven.": "เศษซากกระจายเต็มพื้นราวกับว่ามันร่วมมาจากฟ้า",
"the darkness is absolute": "ความมืดไม่อาจหยั่งถึง", "A Ruined Trap": "ซากกับดัก", "not enough coal": "มีถ่านหินไม่พอ",
"ambushed on the street.": "ถูกซุ่มโจมตีบนถนน", "worth killing for, it seems.": "เหมือนจะมีค่าพอที่จะยอมตายแทน", "slash": "ฟัน",
"builder says she can make a cart for carrying wood": "ผู้สร้างบอกว่าเธอสามารถสร้างรถเข็นเพื่อช่วยขนไม้ได้",
"leather's not strong. better than rags, though.": "หนังสัตว์ไม่ทนทานนัก แต่ก็ยังดีกว่าเศษผ้าเก่า ๆ", "builder stokes the fire": "ผู้ก่อสร้างเติมฟืนให้กับไฟ", "say goodbye": "บอกลา", "A Silent Forest": "ป่าเงียบงัน", "builder's not sure she's to be trusted.": "ผู้สร้างไม่เชื่อใจเธอเท่าไรนัก",
"an old case is wedged behind a rock, covered in a thick layer of dust.": "กล่องเก่า ๆ ซุกอยู่ใต้กองหิน ปกคลุมด้วยฝุ่นหนาเตอะ",
"the point is made. in the next few days, the missing supplies are returned.": "ไม่กี่วันต่อมา เสบียงก็ถูกนำมาคืนด้วยความหวาดกลัว",
"a frail man stands defiantly, blocking the path.": "ชายท่าทางผอมแห้งพยายามขวางทางเอาไว้", "the plague rips through the village.": "โรคระบาดกระจายไปทั่วหมู่บ้าน", "an old wanderer arrives.": "ผู้เดินทางชรามาถึงที่พัก", "scavenger had a small camp in the school.": "พวกเก็บขยะตั้งค่ายในโรงเรียน",
"the compass points southwest": "เข็มทิศชี้ไปทางตะวันตกเฉียงใต้", "the wanderer leaves, cart loaded with wood": "ผู้เดินทางจากได้พร้อมกับรถเข็นที่จุไปด้วยไม้",
"Dropbox Export / Import": "Dropbox Export / Import", "maybe some useful stuff in the rubble.": "อาจจะมีของมีประโยชน์ติดอยู่หลังซากปรักหักพัง",
"google+": "google+", "ok": "โอเค", "a man hobbles up, coughing.": "ชายคนหนึ่งกระเพลกเข้ามา ไอเสียงดัง", "i armour": "เกราะเหล็ก",
"The Scout": "ผู้สำรวจ", "leaves a pile of small scales behind.": "ทิ้งกองเกล็ดประหลาดเล็ก ๆ เอาไว้", "pockets": "กระเป๋า", "stab": "แทง",
"time to move on.": "ได้เวลาไปต่อแล้ว", "the ground is littered with small scales": "มีเศษเกล็ดประหลาดกระจายเต็มพื้น", "not enough ": "มีไม่พอ",
"the stench of rot and death fills the operating theatres.": "กลิ่นเน่าเสียและซากศพลอยคลุ้งในโรงละคร", "burning": "ยังคงติดอยู่", "they must be here for a reason.": "พวกมันมาที่นี่เพื่ออะไรบางอย่าง", "a nomad arrives, looking to trade": "ผู้เร่ร่อนแวะผ่านมา ต้องการแลกเปลี่ยนอะไรสักอย่าง", "black powder and bullets, like the old days.": "ดินดำและกระสุน เหมือนในวันเก่า ๆ ", "restart the game?": "ต้องการเริ่มเกมใหม่หรือไม่?", "gastronome": "นักชิม",
"load from slot": "load จากช่อง", "energy cell": "เซลล์พลังงาน", "inside the hut, a child cries.": "มีเสียงเด็กร้องไห้ในกระท่อม",
"the compass points west": "เข็มทิศชี้ไปทางตะวันตก", "always worked before, at least.": "อย่างน้อยก็ใช้ได้เมื่อก่อน", "a scavenger draws close, hoping for an easy score": "คนเก็บขยะค่อย ๆ เคลื่อนที่เข้ามา หวังจะโจมตีทีเผลอ", "Sickness": "ไข้หวัด", "still a few drops of water in the old well.": "ยังมีน้ำเหลือบ้างในบ่อ",
"build:": "สร้าง:", "feral terror": "อสูรจรจัด", "signout": "signout", "A Beast Attack": "สัตว์ป่าเข้าโจมตี",
"Ready to Leave?": "พร้อมจะไปจากที่นี่หรือยัง?", "the house is abandoned, but not yet picked over.": "บ้านถูกทิ้งร้าง แต่ยังมีของบางอยากทิ้งไว้อยู่",
"time to get out of this place. won't be coming back.": "ได้เวลาไปจากที่นี่แล้ว เราจะไม่หันหลังกลับมาอีก", "the compass points northwest": "เข็มทิศชี้ไปทางตะวันตกเฉียงเหนือ", "the thirst becomes unbearable": "ความกระหายน้ำชักเกินจะทนไหว", "a beggar arrives": "ขอทานมาถึงที่พัก",
"a beast stands alone in an overgrown park.": "สัตว์ตัวหนึ่งยืนอยู่เดียวดายท่ามกลางสวนสาธารณะที่กลายเป็นป่ารกชัฏ", "he leaves a reward.": "เขาทิ้งของขวัญเอาไว้",
"nothing but downcast eyes.": "ไม่มีอะไรเหลืออยู่นอกจากความเศร้าโศก", "the scout says she's been all over.": "ผู้สำรวจบอกว่าเธอเดินทางไปทั่วทิศบนดาวนี้",
"the small settlement has clearly been burning a while.": "ที่แห่งนี้ถูกเผาทำลายมานานพอสมควร", "cloth": "ผ้า", "a second soldier opens fire.": "ทหารคนต่อมายิงปืนเข้ามาสมทบ", "dangerous to be this far from the village without proper protection": "เรามาไกลเกินไปจากหมู่บ้าน อันตรายมากหากไม่มีเครื่องป้องกันที่ดี",
"squeeze": "เบียดเข้าไป", "a pristine medicine cabinet at the end of a hallway.": "ยาที่อยู่ในสภาพสมบูรณ์เก็บอยู่ในตู้ที่สุดทางเดิน",
"scraps of fur": "เศษขนสัตว์", "a scavenger waits just inside the door.": "คนเก็บขยะรออยู่หลังประตู",
"the wind howls outside": "ลมพัดแรงข้างนอก", "the wagon can carry a lot of supplies": "เกวียนสามารถเก็บของได้จำนวนมาก",
"A&nbsp;Battlefield": "สนามรบ", "more soldiers will be on their way.": "ทหารอีกกลุ่มกำลังจะตามมาสมทบ",
"the shivering man is dead": "คนตัวสั่นเสียชีวิต", "builder finishes the smokehouse. she looks hungry.": "สร้างโรงรมควันสำเร็จ ผู้สร้างแสดงอาการหิวอย่างชัดเจน",
"the barrens break at a sea of dying grass, swaying in the arid breeze.": "พื้นดินเริ่มกลับมามีหญ้าปกคลุมบาง ๆ พริ้วไหวตามแรงลม",
"a snarling beast leaps out of the underbrush": "สัตว์ร้ายโจนออกมาจากพงหญ้า", "the place has been swept clean by scavengers.": "ที่นี่โดนกวาดเรียบโดยพวกเก็บเศษขยะ", "A Destroyed Village": "ซากหมู่บ้าน", "land blows more often": "โจมตีถูกเป้าได้แม่นยำขึ้น", "Space": "อวกาศ",
"it's been picked over by scavengers, but there's still some things worth taking.": "ที่นี่ถูกกวาดไปโดยพวกเก็บขยะ แต่น่าจะมีอะไรเหลืออยู่บ้าง",
"Thermosphere": "Thermosphere", "5 medicine": "ยารักษา 5 ", "do nothing": "ไม่สนใจ", "A Gaunt Man": "คนผอมแห้ง",
"Outside": "ภายนอก", "the snarling beast is dead": "สัตว์ร้ายถูกสังหาร", "bodies and supplies from both sides litter the ground.": "ซากศพและเสีบยงกระจัดกระจายเต็มพื้น", "the remains of an old house stand as a monument to simpler times": "เศษซากของบ้านเก่า ๆ ตั้งตระหง่าย เป็นสักญลักษณ์ของวันเก่า ๆ",
"a squatter stands firmly in the doorway of a small hut.": "ผู้อาศัยยืนกันบานประตูของกระท่อมเล็ก ๆ ", "lights flash through the alleys between buildings.": "ไฟสว่างวาบผ่านตรอกเล็ก ๆ ข้างอาคาร", "no": "ไม่", "{0} per {1}s": "{0} ต่อ {1}วินาที", "a weathered family takes up in one of the huts.": "ครอบครัวเล็ก ๆ เข้ามาอยู่อาศัยในกระท่อม", "run": "หนี", "Exosphere": "Exosphere",
"he speaks of once leading the great fleets to fresh worlds.": "เขากล่าวว่าครั้งหนึ่งตนเคยนำกองยานของผุ้เดินทางไปสู่โลกที่อุดมสมบูรณ์",
"builder says there are more wanderers. says they'll work, too.": "ผู้สร้างบอกว่ามีผู้เดินทางอีกมากอาศัยอยู่ในดินแดนนี้ พวกเขาพร้อมจะทำงานหากมีที่พัก",
"evasive": "หลบหลีก", "an old wanderer arrives": "ผู้เดินทางชรามาถึงที่พัก", "through the walls, shuffling noises can be heard.": "มีเสียงเบา ๆ ผ่านมาทางกำแพง", "melee weapons deal more damage": "อาวุธระยะประชิดโจมตีแรงขึ้น", "the compass points ": "เข็มทิศชี้ไปยัง",
"lets some light down into the dusty haze.": "แสงส่องผ่านหมอกควันจาง ๆ ", "the man swallows the medicine eagerly": "ชายคนนั้นกินยาอย่างเร่งรีบ",
"the days are spent with burials.": "ทุกคนไว้อาลัยที่สุสานกันทั้งวัน", "more traps to catch more creatures": "กับดักมากขึ้น จับสัตว์มากขึ้น",
"a man charges down the hall, a rusty blade in his hand": "ชายคนหนึ่งวิ่งเข้ามาในโถงทางเดิน มีดขึ้นสนิมอยู่ในกำมือ",
"it contains travelling gear, and a few trinkets.": "มีอุปกรณ์การเดินทางและของเล็ก ๆ น้อย ๆ ปนอยู่", "bullets": "กระสุน",
"the light from the fire spills from the windows, out into the dark": "แสงสว่างจากกองไฟส่องออกมาจากหน้าต่าง เข้าไปในความมืดมิด",
"tell him to leave": "ไล่เขาไป", "dry brush and dead branches litter the forest floor": "กิ่งไม้และใบไม้แห้ง ๆ เกลื่อนพื้นป่าไปหมด",
"tattered cloth": "ผ้าขาด ๆ ", "can't read the words.": "อ่านอะไรไม่ออกสักคำ", "tanner": "คนฟอกหนัง",
"should cure the meat, or it'll spoil. builder says she can fix something up.": "น่าจะตากเนื้อเอาไว้บ้าง ไม่เช่นนั้นมันจะเน่าไป",
"or migrating computers": "หรือย้ายเครื่อง", "water:{0}": "น้ำ:{0}", "still time to rescue a few supplies.": "ยังมีเวลาเก้บของเล็กน้อย",
"teeth": "เขี้ยว", "villagers could help hunt, given the means": "ชาวบ้านสามารถช่วยล่าสัตว์ได้ ถ้ามีเครื่องมือ", "the beast is dead.": "ฆ่าสัตว์ป่าได้สำเร็จ",
"feral howls echo out of the darkness.": "อสูรจรจัดหอนขึ้นมาในความมืด", "The Iron Mine": "เหมืองเหล็ก", "wild beasts attack the villagers": "สัตว์ป่าโจมตีหมู่บ้าน",
"predators become prey. price is unfair": "ผู้ล่ากลับกลายเป็นเหยื่อ ความสูยเสียไม่อาจคาดเดา"
,"troops storm the village": "ทหารบุกรุกหมู่บ้าน","warefare is bloodthristy":"สงครามนองเลือด..","nothing was found":"ไม่เจออะไรเลย"
});
+3450
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;}
File diff suppressed because one or more lines are too long
+2378
View File
File diff suppressed because it is too large Load Diff
+4
View File
@@ -0,0 +1,4 @@
.button{width: 115px !important;}
#outsidePanel .button{width: 115px !important;}
.eventPanel .button {width: 122px !important;}
.button .tooltip {width: 125px !important;}
File diff suppressed because one or more lines are too long
+2343
View File
File diff suppressed because it is too large Load Diff
+3
View File
@@ -0,0 +1,3 @@
.button{width: 120px !important;}
#outsidePanel .button{width: 115px !important;}
.eventPanel .button {width: 122px !important;}
File diff suppressed because one or more lines are too long
+3193
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;}
File diff suppressed because one or more lines are too long
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;}
File diff suppressed because one or more lines are too long
File diff suppressed because it is too large Load Diff
+100 -100
View File
@@ -6,136 +6,136 @@
**/
var Base64 = {
// private property
_keyStr : "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",
// private property
_keyStr : "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",
// public method for encoding
encode : function (input) {
var output = "";
var chr1, chr2, chr3, enc1, enc2, enc3, enc4;
var i = 0;
// public method for encoding
encode : function (input) {
var output = "";
var chr1, chr2, chr3, enc1, enc2, enc3, enc4;
var i = 0;
input = Base64._utf8_encode(input);
input = Base64._utf8_encode(input);
while (i < input.length) {
while (i < input.length) {
chr1 = input.charCodeAt(i++);
chr2 = input.charCodeAt(i++);
chr3 = input.charCodeAt(i++);
chr1 = input.charCodeAt(i++);
chr2 = input.charCodeAt(i++);
chr3 = input.charCodeAt(i++);
enc1 = chr1 >> 2;
enc2 = ((chr1 & 3) << 4) | (chr2 >> 4);
enc3 = ((chr2 & 15) << 2) | (chr3 >> 6);
enc4 = chr3 & 63;
enc1 = chr1 >> 2;
enc2 = ((chr1 & 3) << 4) | (chr2 >> 4);
enc3 = ((chr2 & 15) << 2) | (chr3 >> 6);
enc4 = chr3 & 63;
if (isNaN(chr2)) {
enc3 = enc4 = 64;
} else if (isNaN(chr3)) {
enc4 = 64;
}
if (isNaN(chr2)) {
enc3 = enc4 = 64;
} else if (isNaN(chr3)) {
enc4 = 64;
}
output = output +
this._keyStr.charAt(enc1) + this._keyStr.charAt(enc2) +
this._keyStr.charAt(enc3) + this._keyStr.charAt(enc4);
output = output +
this._keyStr.charAt(enc1) + this._keyStr.charAt(enc2) +
this._keyStr.charAt(enc3) + this._keyStr.charAt(enc4);
}
}
return output;
},
return output;
},
// public method for decoding
decode : function (input) {
var output = "";
var chr1, chr2, chr3;
var enc1, enc2, enc3, enc4;
var i = 0;
// public method for decoding
decode : function (input) {
var output = "";
var chr1, chr2, chr3;
var enc1, enc2, enc3, enc4;
var i = 0;
input = input.replace(/[^A-Za-z0-9\+\/\=]/g, "");
input = input.replace(/[^A-Za-z0-9\+\/\=]/g, "");
while (i < input.length) {
while (i < input.length) {
enc1 = this._keyStr.indexOf(input.charAt(i++));
enc2 = this._keyStr.indexOf(input.charAt(i++));
enc3 = this._keyStr.indexOf(input.charAt(i++));
enc4 = this._keyStr.indexOf(input.charAt(i++));
enc1 = this._keyStr.indexOf(input.charAt(i++));
enc2 = this._keyStr.indexOf(input.charAt(i++));
enc3 = this._keyStr.indexOf(input.charAt(i++));
enc4 = this._keyStr.indexOf(input.charAt(i++));
chr1 = (enc1 << 2) | (enc2 >> 4);
chr2 = ((enc2 & 15) << 4) | (enc3 >> 2);
chr3 = ((enc3 & 3) << 6) | enc4;
chr1 = (enc1 << 2) | (enc2 >> 4);
chr2 = ((enc2 & 15) << 4) | (enc3 >> 2);
chr3 = ((enc3 & 3) << 6) | enc4;
output = output + String.fromCharCode(chr1);
output = output + String.fromCharCode(chr1);
if (enc3 != 64) {
output = output + String.fromCharCode(chr2);
}
if (enc4 != 64) {
output = output + String.fromCharCode(chr3);
}
if (enc3 != 64) {
output = output + String.fromCharCode(chr2);
}
if (enc4 != 64) {
output = output + String.fromCharCode(chr3);
}
}
}
output = Base64._utf8_decode(output);
output = Base64._utf8_decode(output);
return output;
return output;
},
},
// private method for UTF-8 encoding
_utf8_encode : function (string) {
string = string.replace(/\r\n/g,"\n");
var utftext = "";
// private method for UTF-8 encoding
_utf8_encode : function (string) {
string = string.replace(/\r\n/g,"\n");
var utftext = "";
for (var n = 0; n < string.length; n++) {
for (var n = 0; n < string.length; n++) {
var c = string.charCodeAt(n);
var c = string.charCodeAt(n);
if (c < 128) {
utftext += String.fromCharCode(c);
}
else if((c > 127) && (c < 2048)) {
utftext += String.fromCharCode((c >> 6) | 192);
utftext += String.fromCharCode((c & 63) | 128);
}
else {
utftext += String.fromCharCode((c >> 12) | 224);
utftext += String.fromCharCode(((c >> 6) & 63) | 128);
utftext += String.fromCharCode((c & 63) | 128);
}
if (c < 128) {
utftext += String.fromCharCode(c);
}
else if((c > 127) && (c < 2048)) {
utftext += String.fromCharCode((c >> 6) | 192);
utftext += String.fromCharCode((c & 63) | 128);
}
else {
utftext += String.fromCharCode((c >> 12) | 224);
utftext += String.fromCharCode(((c >> 6) & 63) | 128);
utftext += String.fromCharCode((c & 63) | 128);
}
}
}
return utftext;
},
return utftext;
},
// private method for UTF-8 decoding
_utf8_decode : function (utftext) {
var string = "";
var i = 0;
var c = c1 = c2 = 0;
// private method for UTF-8 decoding
_utf8_decode : function (utftext) {
var string = "";
var i = 0;
var c = c1 = c2 = 0;
while ( i < utftext.length ) {
while ( i < utftext.length ) {
c = utftext.charCodeAt(i);
c = utftext.charCodeAt(i);
if (c < 128) {
string += String.fromCharCode(c);
i++;
}
else if((c > 191) && (c < 224)) {
c2 = utftext.charCodeAt(i+1);
string += String.fromCharCode(((c & 31) << 6) | (c2 & 63));
i += 2;
}
else {
c2 = utftext.charCodeAt(i+1);
c3 = utftext.charCodeAt(i+2);
string += String.fromCharCode(((c & 15) << 12) | ((c2 & 63) << 6) | (c3 & 63));
i += 3;
}
if (c < 128) {
string += String.fromCharCode(c);
i++;
}
else if((c > 191) && (c < 224)) {
c2 = utftext.charCodeAt(i+1);
string += String.fromCharCode(((c & 31) << 6) | (c2 & 63));
i += 2;
}
else {
c2 = utftext.charCodeAt(i+1);
c3 = utftext.charCodeAt(i+2);
string += String.fromCharCode(((c & 15) << 12) | ((c2 & 63) << 6) | (c3 & 63));
i += 3;
}
}
}
return string;
}
return string;
}
}
Vendored
+23
View File
@@ -0,0 +1,23 @@
(function() {
var dfs = {"am_pm":["AM","PM"],"day_name":["dimanche","lundi","mardi","mercredi","jeudi","vendredi","samedi"],"day_short":["dim.","lun.","mar.","mer.","jeu.","ven.","sam."],"era":["av. J.-C.","ap. J.-C."],"era_name":["avant Jésus-Christ","après Jésus-Christ"],"month_name":["janvier","février","mars","avril","mai","juin","juillet","août","septembre","octobre","novembre","décembre"],"month_short":["janv.","févr.","mars","avr.","mai","juin","juil.","août","sept.","oct.","nov.","déc."],"order_full":"DMY","order_long":"DMY","order_medium":"DMY","order_short":"DMY"};
var nfs = {"decimal_separator":",","grouping_separator":" ","minus":"-"};
var df = {SHORT_PADDED_CENTURY:function(d){if(d){return(((d.getDate()+101)+'').substring(1)+'/'+((d.getMonth()+101)+'').substring(1)+'/'+d.getFullYear());}},SHORT:function(d){if(d){return(((d.getDate()+101)+'').substring(1)+'/'+((d.getMonth()+101)+'').substring(1)+'/'+(d.getFullYear()+'').substring(2));}},SHORT_NOYEAR:function(d){if(d){return(((d.getDate()+101)+'').substring(1)+'/'+((d.getMonth()+101)+'').substring(1));}},SHORT_NODAY:function(d){if(d){return(((d.getMonth()+101)+'').substring(1)+'/'+(d.getFullYear()+'').substring(2));}},MEDIUM:function(d){if(d){return(d.getDate()+' '+dfs.month_short[d.getMonth()]+' '+d.getFullYear());}},MEDIUM_NOYEAR:function(d){if(d){return(d.getDate()+' '+dfs.month_short[d.getMonth()]);}},MEDIUM_WEEKDAY_NOYEAR:function(d){if(d){return(dfs.day_short[d.getDay()]+' '+d.getDate()+' '+dfs.month_short[d.getMonth()]);}},LONG_NODAY:function(d){if(d){return(dfs.month_name[d.getMonth()]+' '+d.getFullYear());}},LONG:function(d){if(d){return(d.getDate()+' '+dfs.month_name[d.getMonth()]+' '+d.getFullYear());}},FULL:function(d){if(d){return(dfs.day_name[d.getDay()]+' '+d.getDate()+' '+dfs.month_name[d.getMonth()]+' '+d.getFullYear());}}};
window.icu = window.icu || new Object();
var icu = window.icu;
icu.getCountry = function() { return "" };
icu.getCountryName = function() { return "" };
icu.getDateFormat = function(formatCode) { var retVal = {}; retVal.format = df[formatCode]; return retVal; };
icu.getDateFormats = function() { return df; };
icu.getDateFormatSymbols = function() { return dfs; };
icu.getDecimalFormat = function(places) { var retVal = {}; retVal.format = function(n) { var ns = n < 0 ? Math.abs(n).toFixed(places) : n.toFixed(places); var ns2 = ns.split('.'); s = ns2[0]; var d = ns2[1]; var rgx = /(\d+)(\d{3})/;while(rgx.test(s)){s = s.replace(rgx, '$1' + nfs["grouping_separator"] + '$2');} return (n < 0 ? nfs["minus"] : "") + s + nfs["decimal_separator"] + d;}; return retVal; };
icu.getDecimalFormatSymbols = function() { return nfs; };
icu.getIntegerFormat = function() { var retVal = {}; retVal.format = function(i) { var s = i < 0 ? Math.abs(i).toString() : i.toString(); var rgx = /(\d+)(\d{3})/;while(rgx.test(s)){s = s.replace(rgx, '$1' + nfs["grouping_separator"] + '$2');} return i < 0 ? nfs["minus"] + s : s;}; return retVal; };
icu.getLanguage = function() { return "fr" };
icu.getLanguageName = function() { return "français" };
icu.getLocale = function() { return "fr" };
icu.getLocaleName = function() { return "français" };
})();
+86
View File
@@ -0,0 +1,86 @@
(function() {
var translate = function(text)
{
var xlate = translateLookup(text);
if (typeof xlate == "function")
{
xlate = xlate.apply(this, arguments);
}
else if (arguments.length > 1)
{
var aps = Array.prototype.slice;
var args = aps.call( arguments, 1 );
xlate = formatter(xlate, args);
}
return xlate;
};
// I want it available explicity as well as via the object
translate.translate = translate;
//from https://gist.github.com/776196 via http://davedash.com/2010/11/19/pythonic-string-formatting-in-javascript/
var defaultFormatter = (function() {
var re = /\{([^}]+)\}/g;
return function(s, args) {
return s.replace(re, function(_, match){ return args[match]; });
};
}());
var formatter = defaultFormatter;
translate.setFormatter = function(newFormatter)
{
formatter = newFormatter;
};
translate.format = function()
{
var aps = Array.prototype.slice;
var s = arguments[0];
var args = aps.call( arguments, 1 );
return formatter(s, args);
};
var dynoTrans = null;
translate.setDynamicTranslator = function(newDynoTrans)
{
dynoTrans = newDynoTrans;
};
var translation = null;
translate.setTranslation = function(newTranslation)
{
translation = newTranslation;
};
function translateLookup(target)
{
if (translation == null || target == null)
{
return target;
}
if (target in translation == false)
{
if (dynoTrans != null)
{
return dynoTrans(target);
}
return target;
}
var result = translation[target];
if (result == null)
{
return target;
}
return result;
};
window._ = translate;
})();
+34 -33
View File
@@ -1,33 +1,34 @@
<!doctype html>
<html>
<head>
<title>A Dark Room</title>
<style>
body {
background-color: #000000;
color: #FFFFFF;
}
a {
color: #FFFFFF;
}
div {
width: 960px;
margin: auto;
text-align: center;
margin-top: 20px;
}
</style>
</head>
<body>
<center>
<img src="img/Logo1.jpg" />
<div>
<strong>
A Dark Room isn't really mobile-friendly, and it requires arrow keys.<br/>
Sorry about that!<br/>
</strong><br/>
Of course you can <a href='index.html?ignorebrowser=true'>play anyway</a>, but it probably won't work!
</div>
</center>
</body>
</html>
<!doctype html>
<html>
<head>
<title>A Dark Room</title>
<style>
body {
background-color: #000000;
color: #FFFFFF;
}
a {
color: #FFFFFF;
}
div {
width: 960px;
margin: auto;
text-align: center;
margin-top: 20px;
}
</style>
</head>
<body>
<center>
<img src="img/Logo1.jpg" />
<div>
<strong>
A Dark Room isn't really mobile-friendly, and it requires arrow keys.<br/>
Sorry about that!<br/>
</strong><br/>
Of course you can <a href='index.html?ignorebrowser=true'>play anyway</a>, but it probably won't work!<br/><br/>
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>.
</div>
</center>
</body>
</html>
+124 -86
View File
@@ -1,86 +1,124 @@
var Button = {
Button: function(options) {
if(typeof options.cooldown == 'number') {
this.data_cooldown = options.cooldown;
}
this.data_remaining = 0;
if(typeof options.click == 'function') {
this.data_handler = options.click;
}
var el = $('<div>')
.attr('id', typeof(options.id) != 'undefined' ? options.id : "BTN_" + Engine.getGuid())
.addClass('button')
.text(typeof(options.text) != 'undefined' ? options.text : "button")
.click(function() {
if(!$(this).hasClass('disabled')) {
Button.cooldown($(this));
$(this).data("handler")($(this));
}
})
.data("handler", typeof options.click == 'function' ? options.click : function() { Engine.log("click"); })
.data("remaining", 0)
.data("cooldown", typeof options.cooldown == 'number' ? options.cooldown : 0);
el.append($("<div>").addClass('cooldown'));
if(options.cost) {
var ttPos = options.ttPos ? options.ttPos : "bottom right";
var costTooltip = $('<div>').addClass('tooltip ' + ttPos);
for(var k in options.cost) {
$("<div>").addClass('row_key').text(k).appendTo(costTooltip);
$("<div>").addClass('row_val').text(options.cost[k]).appendTo(costTooltip);
}
if(costTooltip.children().length > 0) {
costTooltip.appendTo(el);
}
}
if(options.width) {
el.css('width', options.width);
}
return el;
},
setDisabled: function(btn, disabled) {
if(btn) {
if(!disabled && !btn.data('onCooldown')) {
btn.removeClass('disabled');
} else if(disabled) {
btn.addClass('disabled');
}
btn.data('disabled', disabled);
}
},
isDisabled: function(btn) {
if(btn) {
return btn.data('disabled') === true;
}
return false;
},
cooldown: function(btn) {
var cd = btn.data("cooldown");
if(cd > 0) {
$('div.cooldown', btn).stop(true, true).width("100%").animate({width: '0%'}, cd * 1000, 'linear', function() {
var b = $(this).closest('.button');
b.data('onCooldown', false);
if(!b.data('disabled')) {
b.removeClass('disabled');
}
});
btn.addClass('disabled');
btn.data('onCooldown', true);
}
},
clearCooldown: function(btn) {
$('div.cooldown', btn).stop(true, true);
btn.data('onCooldown', false);
if(!btn.data('disabled')) {
btn.removeClass('disabled');
}
}
};
var Button = {
Button: function(options) {
if(typeof options.cooldown == 'number') {
this.data_cooldown = options.cooldown;
}
this.data_remaining = 0;
if(typeof options.click == 'function') {
this.data_handler = options.click;
}
var el = $('<div>')
.attr('id', typeof(options.id) != 'undefined' ? options.id : "BTN_" + Engine.getGuid())
.addClass('button')
.text(typeof(options.text) != 'undefined' ? options.text : "button")
.click(function() {
if(!$(this).hasClass('disabled')) {
Button.cooldown($(this));
$(this).data("handler")($(this));
}
})
.data("handler", typeof options.click == 'function' ? options.click : function() { Engine.log("click"); })
.data("remaining", 0)
.data("cooldown", typeof options.cooldown == 'number' ? options.cooldown : 0);
el.append($("<div>").addClass('cooldown'));
// waiting for expiry of residual cooldown detected in state
Button.cooldown(el, 'state');
if(options.cost) {
var ttPos = options.ttPos ? options.ttPos : "bottom right";
var costTooltip = $('<div>').addClass('tooltip ' + ttPos);
for(var k in options.cost) {
$("<div>").addClass('row_key').text(_(k)).appendTo(costTooltip);
$("<div>").addClass('row_val').text(options.cost[k]).appendTo(costTooltip);
}
if(costTooltip.children().length > 0) {
costTooltip.appendTo(el);
}
}
if(options.width) {
el.css('width', options.width);
}
return el;
},
saveCooldown: true,
setDisabled: function(btn, disabled) {
if(btn) {
if(!disabled && !btn.data('onCooldown')) {
btn.removeClass('disabled');
} else if(disabled) {
btn.addClass('disabled');
}
btn.data('disabled', disabled);
}
},
isDisabled: function(btn) {
if(btn) {
return btn.data('disabled') === true;
}
return false;
},
cooldown: function(btn, option) {
var cd = btn.data("cooldown");
var id = 'cooldown.'+ btn.attr('id');
if(cd > 0) {
// param "start" takes value from cooldown time if not specified
var start, left;
switch(option){
// a switch will allow for several uses of cooldown function
case 'state':
if(!$SM.get(id)){
return;
}
start = Math.min($SM.get(id), cd);
left = (start / cd).toFixed(4);
break;
default:
start = cd;
left = 1;
}
Button.clearCooldown(btn);
if(Button.saveCooldown){
$SM.set(id,start);
// residual value is measured in seconds
// saves program performance
btn.data('countdown', Engine.setInterval(function(){
$SM.set(id, $SM.get(id, true) - 0.5, true);
},500));
}
var time = start;
if (Engine.options.doubleTime){
time /= 2;
}
$('div.cooldown', btn).width(left * 100 +"%").animate({width: '0%'}, time * 1000, 'linear', function() {
Button.clearCooldown(btn, true);
});
btn.addClass('disabled');
btn.data('onCooldown', true);
}
},
clearCooldown: function(btn, ended) {
var ended = ended || false;
if(!ended){
$('div.cooldown', btn).stop(true, true);
}
btn.data('onCooldown', false);
if(btn.data('countdown')){
window.clearInterval(btn.data('countdown'));
$SM.remove('cooldown.'+ btn.attr('id'));
btn.removeData('countdown');
}
if(!btn.data('disabled')) {
btn.removeClass('disabled');
}
}
};
+362
View File
@@ -0,0 +1,362 @@
(function (Engine, Events, Dropbox, $) {
/**
* Module that enables a save of the gamestate to the dropbox datastore
* @see https://www.dropbox.com/developers/datastore
*
* The dropbox datastore (dbds) connector lets you save your data to your own dropbox datastore
* without jamming files to it.
*
* This connector uses the game engines own base64 encoder.
*/
'use strict';
if (!Engine) { return false; } // Game Engine not available
if (!Dropbox) { return false; } // Dropbox Connector not available
var DropboxConnector = {
options: {
log: false,
key: 'q7vyvfsakyfmp3o',
table: 'adarkroom'
},
client: false,
table: false,
dropboxAccount: false,
savegameKey: false,
savegames: {0: null, 1: null, 2: null, 3: null, 4: null},
init: function (options) {
this.options = $.extend(
this.options,
options
);
this._log = this.options.log;
this.client = new Dropbox.Client({key: DropboxConnector.options.key});
this.connectToDropbox(false);
return this;
},
startDropbox: function () {
if (!DropboxConnector.client || !DropboxConnector.table) {
DropboxConnector.startDropboxConnectEvent();
} else {
DropboxConnector.startDropboxImportEvent();
}
},
/**
* ******
* Events
* ******
*/
startDropboxConnectEvent: function () {
Events.startEvent({
title: _('Dropbox connection'),
scenes: {
start: {
text: [_('connect game to dropbox local storage')],
buttons: {
'connect': {
text: _('connect'),
nextScene: 'end',
onChoose: function () {
DropboxConnector.connectToDropbox(DropboxConnector.startDropboxImportEvent);
}
},
'cancel': {
text: _('cancel'),
nextScene: 'end'
}
}
}
}
});
},
startDropboxImportEvent: function () {
Events.startEvent({
title: _('Dropbox Export / Import'),
scenes: {
start: {
text: [_('export or import save data to dropbox datastorage'),
_('your are connected to dropbox with account / email ') + DropboxConnector.dropboxAccount],
buttons: {
'save': {
text: _('save'),
nextScene: {1: 'saveToSlot'}
},
'load': {
text: _('load'),
nextScene: {1: 'loadFromSlot'},
onChoose: DropboxConnector.loadGamesFromDropbox
},
'signout': {
text: _('signout'),
nextScene: 'end',
onChoose: DropboxConnector.signout
},
'cancel': {
text: _('cancel'),
nextScene: 'end'
}
}
},
saveToSlot: {
text: [_('choose one slot to save to')],
buttons: (function () {
var buttons = {};
$.each(DropboxConnector.savegames, function (n, savegame) {
buttons['savegame' + n] = {
text: _('save to slot') + n + ' ' + (savegame ? DropboxConnector.prepareSaveDate(savegame.get('timestamp')) : 'empty'),
nextScene: 'end',
onChoose: function () {
DropboxConnector.log('Save to slot ' + n + ' initiated');
// timeout prevents error due to fade out animation of the previous event
Engine.setTimeout(function () {
DropboxConnector.log('Save to slot ' + n);
DropboxConnector.saveGameToDropbox(n, DropboxConnector.savedtoDropboxEvent);
}, 1000);
}
};
});
buttons.cancel = {
text: _('cancel'),
nextScene: 'end'
};
return buttons;
}())
},
loadFromSlot: {
text: [_('choose one slot to load from')],
buttons: (function () {
var buttons = {};
$.each(DropboxConnector.savegames, function (n, savegame) {
if (savegame) {
buttons['savegame' + n] = {
text: _('load from slot') + n + ' ' + DropboxConnector.prepareSaveDate(savegame.get('timestamp')),
nextScene: 'end',
onChoose: function () {
DropboxConnector.log('Load from slot ' + n + ' initiated');
// timeout prevents error due to fade out animation of the previous event
Engine.setTimeout(function () {
DropboxConnector.log('Load from slot ' + n);
DropboxConnector.loadGameFromDropbox(n);
}, 1000);
}
};
}
});
buttons.cancel = {
text: _('cancel'),
nextScene: 'end'
};
return buttons;
}())
}
}
});
},
savedtoDropboxEvent: function (success) {
Events.startEvent({
title: _('Dropbox Export / Import'),
scenes: {
start: {
text: success ? [_('successfully saved to dropbox datastorage')] :
[_('error while saving to dropbox datastorage')],
buttons: {
'ok': {
text: _('ok'),
nextScene: 'end'
}
}
}
}
});
},
/**
* ***************
* functional code
* ***************
*/
/**
* Initiate dropbox connection
*
* @param interactive
* @param callback
*/
connectToDropbox: function (interactive, callback) {
DropboxConnector.log('start dropbox');
var client = this.client;
client.authenticate({interactive: interactive}, function (error) {
if (error) {
DropboxConnector.log('Dropbox Authentication error: ' + error);
}
});
if (client.isAuthenticated()) {
var datastoreManager = client.getDatastoreManager();
datastoreManager.openDefaultDatastore(function (error, datastore) {
if (error) {
DropboxConnector.log('Error opening default datastore: ' + error);
} else {
DropboxConnector.table = datastore.getTable(DropboxConnector.options.table);
DropboxConnector.loadGamesFromDropbox();
DropboxConnector.log(DropboxConnector.client.credentials());
DropboxConnector.client.getAccountInfo({}, function (error, info) {
if (!error) {
DropboxConnector.dropboxAccount = info.email;
}
});
DropboxConnector.log("Got savegames", DropboxConnector.savegames);
if (typeof callback === "function") {
callback.call(DropboxConnector.table);
}
}
});
} else {
DropboxConnector.log('Not connected to dropbox.');
}
},
/**
* Requests your savegames fom dbds
*
* @returns {*}
*/
loadGamesFromDropbox: function () {
var savegames = DropboxConnector.savegames;
$.each(savegames, function (n) {
var results = DropboxConnector.table.query({savegameId: DropboxConnector.prepareSavegameID(n)});
savegames[n] = results[0];
});
return savegames;
},
/**
* Imports a gamestate of a given slotnumber to your game
*
* @param slotnumber
*/
loadGameFromDropbox: function (slotnumber) {
var table = DropboxConnector.table;
var id = DropboxConnector.prepareSavegameID(slotnumber);
var results = table.query({savegameId: id});
var record = results[0];
if (record && record.get('gameState')) {
Engine.import64(record.get('gameState'));
}
},
/**
* Saves a gamestate to a given slot in dbds
*
* @param slotnumber
* @param callback
*/
saveGameToDropbox: function (slotnumber, callback) {
var table = DropboxConnector.table;
var record = null;
var success = false;
var id = DropboxConnector.prepareSavegameID(slotnumber);
var saveGame = {
gameState: Engine.generateExport64(),
timestamp: new Date().getTime()
};
if (DropboxConnector.savegames[slotnumber]) { // slot aleady used -> overwrite
record = DropboxConnector.savegames[slotnumber];
try {
record.update(saveGame);
DropboxConnector.log("Updated savegame ", slotnumber);
success = true;
} catch (e) {
success = false;
}
} else {
saveGame.savegameId = id;
try {
record = table.insert(saveGame);
DropboxConnector.log("Inserted savegame ", record.getId());
success = true;
} catch (e) {
success = false;
}
}
if (typeof callback === "function") {
callback(success);
}
},
/**
* Terminates the connection to your db account
*/
signout: function () {
DropboxConnector.client.signOut({}, function (error) {
if (error) {
alert('Error while logout from dropbox');
} else {
alert('Successfully signed out.');
DropboxConnector.client = null;
DropboxConnector.savegames = null;
DropboxConnector.dropboxAccount = null;
}
});
},
/**
* **************
* Helper methods
* **************
*/
prepareSavegameID: function (slotnumber) {
return 'adarkroom_savegame_' + slotnumber;
},
prepareSaveDate: function (timestamp) {
var date = new Date(timestamp);
return date.toLocaleDateString() + ' ' + date.toLocaleTimeString();
},
log: function () {
if (this._log) {
console.log(arguments);
}
}
};
Engine.Dropbox = DropboxConnector;
})(Engine, Events, Dropbox, jQuery);
+835 -518
View File
File diff suppressed because it is too large Load Diff
+1050 -815
View File
File diff suppressed because it is too large Load Diff
+400 -380
View File
@@ -1,380 +1,400 @@
/**
* Events that can occur when wandering around the world
**/
Events.Encounters = [
/* Tier 1 */
{ /* Snarling Beast */
title: 'A Snarling Beast',
isAvailable: function() {
return World.getDistance() <= 10 && World.getTerrain() == World.TILE.FOREST;
},
scenes: {
'start': {
combat: true,
enemy: 'snarling beast',
chara: 'B',
damage: 1,
hit: 0.8,
attackDelay: 1,
health: 5,
loot: {
'fur': {
min: 1,
max: 3,
chance: 1
},
'meat': {
min: 1,
max: 3,
chance: 1
},
'teeth': {
min: 1,
max: 3,
chance: 0.8
}
},
notification: 'a snarling beast leaps out of the underbrush'
}
}
},
{ /* Gaunt Man */
title: 'A Gaunt Man',
isAvailable: function() {
return World.getDistance() <= 10 && World.getTerrain() == World.TILE.BARRENS;
},
scenes: {
'start': {
combat: true,
enemy: 'gaunt man',
chara: 'G',
damage: 2,
hit: 0.8,
attackDelay: 2,
health: 6,
loot: {
'cloth': {
min: 1,
max: 3,
chance: 0.8
},
'teeth': {
min: 1,
max: 2,
chance: 0.8
},
'leather': {
min: 1,
max: 2,
chance: 0.5
}
},
notification: 'a gaunt man approaches, a crazed look in his eye'
}
}
},
{ /* Strange Bird */
title: 'A Strange Bird',
isAvailable: function() {
return World.getDistance() <= 10 && World.getTerrain() == World.TILE.FIELD;
},
scenes: {
'start': {
combat: true,
enemy: 'strange bird',
chara: 'B',
damage: 3,
hit: 0.8,
attackDelay: 2,
health: 4,
loot: {
'scales': {
min: 1,
max: 3,
chance: 0.8
},
'teeth': {
min: 1,
max: 2,
chance: 0.5
},
'meat': {
min: 1,
max: 3,
chance: 0.8
}
},
notification: 'a strange looking bird speeds across the plains'
}
}
},
/* Tier 2*/
{ /* Shivering Man */
title: 'A Shivering Man',
isAvailable: function() {
return World.getDistance() > 10 && World.getDistance() <= 20 && World.getTerrain() == World.TILE.BARRENS;
},
scenes: {
'start': {
combat: true,
enemy: 'shivering man',
chara: 'S',
damage: 5,
hit: 0.5,
attackDelay: 1,
health: 20,
loot: {
'cloth': {
min: 1,
max: 1,
chance: 0.2
},
'teeth': {
min: 1,
max: 2,
chance: 0.8
},
'leather': {
min: 1,
max: 1,
chance: 0.2
},
'medicine': {
min: 1,
max: 3,
chance: 0.7
}
},
notification: 'a shivering man approaches and attacks with surprising strength'
}
}
},
{ /* Man-eater */
title: 'A Man-Eater',
isAvailable: function() {
return World.getDistance() > 10 && World.getDistance() <= 20 && World.getTerrain() == World.TILE.FOREST;
},
scenes: {
'start': {
combat: true,
enemy: 'man-eater',
chara: 'E',
damage: 3,
hit: 0.8,
attackDelay: 1,
health: 25,
loot: {
'fur': {
min: 5,
max: 10,
chance: 1
},
'meat': {
min: 5,
max: 10,
chance: 1
},
'teeth': {
min: 5,
max: 10,
chance: 0.8
}
},
notification: 'a large creature attacks, claws freshly bloodied'
}
}
},
{ /* Scavenger */
title: 'A Scavenger',
isAvailable: function() {
return World.getDistance() > 10 && World.getDistance() <= 20 && World.getTerrain() == World.TILE.BARRENS;
},
scenes: {
'start': {
combat: true,
enemy: 'scavenger',
chara: 'S',
damage: 4,
hit: 0.8,
attackDelay: 2,
health: 30,
loot: {
'cloth': {
min: 5,
max: 10,
chance: 0.8
},
'leather': {
min: 5,
max: 10,
chance: 0.8
},
'iron': {
min: 1,
max: 5,
chance: 0.5
},
'medicine': {
min: 1,
max: 2,
chance: 0.1
}
},
notification: 'a scavenger draws close, hoping for an easy score'
}
}
},
{ /* Huge Lizard */
title: 'A Huge Lizard',
isAvailable: function() {
return World.getDistance() > 10 && World.getDistance() <= 20 && World.getTerrain() == World.TILE.FIELD;
},
scenes: {
'start': {
combat: true,
enemy: 'lizard',
chara: 'L',
damage: 5,
hit: 0.8,
attackDelay: 2,
health: 20,
loot: {
'scales': {
min: 5,
max: 10,
chance: 0.8
},
'teeth': {
min: 5,
max: 10,
chance: 0.5
},
'meat': {
min: 5,
max: 10,
chance: 0.8
}
},
notification: 'the grass thrashes wildly as a huge lizard pushes through'
}
}
},
/* Tier 3*/
{ /* Feral Terror */
title: 'A Feral Terror',
isAvailable: function() {
return World.getDistance() > 20 && World.getTerrain() == World.TILE.FOREST;
},
scenes: {
'start': {
combat: true,
enemy: 'feral terror',
chara: 'F',
damage: 6,
hit: 0.8,
attackDelay: 1,
health: 45,
loot: {
'fur': {
min: 5,
max: 10,
chance: 1
},
'meat': {
min: 5,
max: 10,
chance: 1
},
'teeth': {
min: 5,
max: 10,
chance: 0.8
}
},
notification: 'a beast, wilder than imagining, erupts out of the foliage'
}
}
},
{ /* Soldier */
title: 'A Soldier',
isAvailable: function() {
return World.getDistance() > 20 && World.getTerrain() == World.TILE.BARRENS;
},
scenes: {
'start': {
combat: true,
enemy: 'soldier',
ranged: true,
chara: 'D',
damage: 8,
hit: 0.8,
attackDelay: 2,
health: 50,
loot: {
'cloth': {
min: 5,
max: 10,
chance: 0.8
},
'bullets': {
min: 1,
max: 5,
chance: 0.5
},
'rifle': {
min: 1,
max: 1,
chance: 0.2
},
'medicine': {
min: 1,
max: 2,
chance: 0.1
}
},
notification: 'a soldier opens fire from across the desert'
}
}
},
{ /* Sniper */
title: 'A Sniper',
isAvailable: function() {
return World.getDistance() > 20 && World.getTerrain() == World.TILE.FIELD;
},
scenes: {
'start': {
combat: true,
enemy: 'sniper',
chara: 'S',
damage: 15,
hit: 0.8,
attackDelay: 4,
health: 30,
ranged: true,
loot: {
'cloth': {
min: 5,
max: 10,
chance: 0.8
},
'bullets': {
min: 1,
max: 5,
chance: 0.5
},
'rifle': {
min: 1,
max: 1,
chance: 0.2
},
'medicine': {
min: 1,
max: 2,
chance: 0.1
}
},
notification: 'a shot rings out, from somewhere in the long grass'
}
}
}
];
/**
* Events that can occur when wandering around the world
**/
Events.Encounters = [
/* Tier 1 */
{ /* Snarling Beast */
title: _('A Snarling Beast'),
isAvailable: function() {
return World.getDistance() <= 10 && World.getTerrain() == World.TILE.FOREST;
},
scenes: {
'start': {
combat: true,
enemy: 'snarling beast',
enemyName: _('snarling beast'),
deathMessage: _('the snarling beast is dead'),
chara: 'R',
damage: 1,
hit: 0.8,
attackDelay: 1,
health: 5,
loot: {
'fur': {
min: 1,
max: 3,
chance: 1
},
'meat': {
min: 1,
max: 3,
chance: 1
},
'teeth': {
min: 1,
max: 3,
chance: 0.8
}
},
notification: _('a snarling beast leaps out of the underbrush')
}
}
},
{ /* Gaunt Man */
title: _('A Gaunt Man'),
isAvailable: function() {
return World.getDistance() <= 10 && World.getTerrain() == World.TILE.BARRENS;
},
scenes: {
'start': {
combat: true,
enemy: 'gaunt man',
enemyName: _('gaunt man'),
deathMessage: _('the gaunt man is dead'),
chara: 'E',
damage: 2,
hit: 0.8,
attackDelay: 2,
health: 6,
loot: {
'cloth': {
min: 1,
max: 3,
chance: 0.8
},
'teeth': {
min: 1,
max: 2,
chance: 0.8
},
'leather': {
min: 1,
max: 2,
chance: 0.5
}
},
notification: _('a gaunt man approaches, a crazed look in his eye')
}
}
},
{ /* Strange Bird */
title: _('A Strange Bird'),
isAvailable: function() {
return World.getDistance() <= 10 && World.getTerrain() == World.TILE.FIELD;
},
scenes: {
'start': {
combat: true,
enemy: 'strange bird',
enemyName: _('strange bird'),
deathMessage: _('the strange bird is dead'),
chara: 'R',
damage: 3,
hit: 0.8,
attackDelay: 2,
health: 4,
loot: {
'scales': {
min: 1,
max: 3,
chance: 0.8
},
'teeth': {
min: 1,
max: 2,
chance: 0.5
},
'meat': {
min: 1,
max: 3,
chance: 0.8
}
},
notification: _('a strange looking bird speeds across the plains')
}
}
},
/* Tier 2*/
{ /* Shivering Man */
title: _('A Shivering Man'),
isAvailable: function() {
return World.getDistance() > 10 && World.getDistance() <= 20 && World.getTerrain() == World.TILE.BARRENS;
},
scenes: {
'start': {
combat: true,
enemy: 'shivering man',
enemyName: _('shivering man'),
deathMessage: _('the shivering man is dead'),
chara: 'E',
damage: 5,
hit: 0.5,
attackDelay: 1,
health: 20,
loot: {
'cloth': {
min: 1,
max: 1,
chance: 0.2
},
'teeth': {
min: 1,
max: 2,
chance: 0.8
},
'leather': {
min: 1,
max: 1,
chance: 0.2
},
'medicine': {
min: 1,
max: 3,
chance: 0.7
}
},
notification: _('a shivering man approaches and attacks with surprising strength')
}
}
},
{ /* Man-eater */
title: _('A Man-Eater'),
isAvailable: function() {
return World.getDistance() > 10 && World.getDistance() <= 20 && World.getTerrain() == World.TILE.FOREST;
},
scenes: {
'start': {
combat: true,
enemy: 'man-eater',
enemyName: _('man-eater'),
deathMessage: _('the man-eater is dead'),
chara: 'T',
damage: 3,
hit: 0.8,
attackDelay: 1,
health: 25,
loot: {
'fur': {
min: 5,
max: 10,
chance: 1
},
'meat': {
min: 5,
max: 10,
chance: 1
},
'teeth': {
min: 5,
max: 10,
chance: 0.8
}
},
notification: _('a large creature attacks, claws freshly bloodied')
}
}
},
{ /* Scavenger */
title: _('A Scavenger'),
isAvailable: function() {
return World.getDistance() > 10 && World.getDistance() <= 20 && World.getTerrain() == World.TILE.BARRENS;
},
scenes: {
'start': {
combat: true,
enemy: 'scavenger',
enemyName: _('scavenger'),
deathMessage: _('the scavenger is dead'),
chara: 'E',
damage: 4,
hit: 0.8,
attackDelay: 2,
health: 30,
loot: {
'cloth': {
min: 5,
max: 10,
chance: 0.8
},
'leather': {
min: 5,
max: 10,
chance: 0.8
},
'iron': {
min: 1,
max: 5,
chance: 0.5
},
'medicine': {
min: 1,
max: 2,
chance: 0.1
}
},
notification: _('a scavenger draws close, hoping for an easy score')
}
}
},
{ /* Huge Lizard */
title: _('A Huge Lizard'),
isAvailable: function() {
return World.getDistance() > 10 && World.getDistance() <= 20 && World.getTerrain() == World.TILE.FIELD;
},
scenes: {
'start': {
combat: true,
enemy: 'lizard',
enemyName: _('lizard'),
deathMessage: _('the lizard is dead'),
chara: 'T',
damage: 5,
hit: 0.8,
attackDelay: 2,
health: 20,
loot: {
'scales': {
min: 5,
max: 10,
chance: 0.8
},
'teeth': {
min: 5,
max: 10,
chance: 0.5
},
'meat': {
min: 5,
max: 10,
chance: 0.8
}
},
notification: _('the grass thrashes wildly as a huge lizard pushes through')
}
}
},
/* Tier 3*/
{ /* Feral Terror */
title: _('A Feral Terror'),
isAvailable: function() {
return World.getDistance() > 20 && World.getTerrain() == World.TILE.FOREST;
},
scenes: {
'start': {
combat: true,
enemy: 'feral terror',
enemyName: _('feral terror'),
deathMessage: _('the feral terror is dead'),
chara: 'T',
damage: 6,
hit: 0.8,
attackDelay: 1,
health: 45,
loot: {
'fur': {
min: 5,
max: 10,
chance: 1
},
'meat': {
min: 5,
max: 10,
chance: 1
},
'teeth': {
min: 5,
max: 10,
chance: 0.8
}
},
notification: _('a beast, wilder than imagining, erupts out of the foliage')
}
}
},
{ /* Soldier */
title: _('A Soldier'),
isAvailable: function() {
return World.getDistance() > 20 && World.getTerrain() == World.TILE.BARRENS;
},
scenes: {
'start': {
combat: true,
enemy: 'soldier',
enemyName: _('soldier'),
deathMessage: _('the soldier is dead'),
ranged: true,
chara: 'D',
damage: 8,
hit: 0.8,
attackDelay: 2,
health: 50,
loot: {
'cloth': {
min: 5,
max: 10,
chance: 0.8
},
'bullets': {
min: 1,
max: 5,
chance: 0.5
},
'rifle': {
min: 1,
max: 1,
chance: 0.2
},
'medicine': {
min: 1,
max: 2,
chance: 0.1
}
},
notification: _('a soldier opens fire from across the desert')
}
}
},
{ /* Sniper */
title: _('A Sniper'),
isAvailable: function() {
return World.getDistance() > 20 && World.getTerrain() == World.TILE.FIELD;
},
scenes: {
'start': {
combat: true,
enemy: 'sniper',
enemyName: _('sniper'),
deathMessage: _('the sniper is dead'),
chara: 'D',
damage: 15,
hit: 0.8,
attackDelay: 4,
health: 30,
ranged: true,
loot: {
'cloth': {
min: 5,
max: 10,
chance: 0.8
},
'bullets': {
min: 1,
max: 5,
chance: 0.5
},
'rifle': {
min: 1,
max: 1,
chance: 0.2
},
'medicine': {
min: 1,
max: 2,
chance: 0.1
}
},
notification: _('a shot rings out, from somewhere in the long grass')
}
}
}
];
+66 -65
View File
@@ -1,65 +1,66 @@
/**
* Events that can occur when any module is active (Except World. It's special.)
**/
Events.Global = [
{ /* The Thief */
title: 'The Thief',
isAvailable: function() {
return (Engine.activeModule == Room || Engine.activeModule == Outside) && $SM.get('game.thieves') == 1;
},
scenes: {
'start': {
text: [
'the villagers haul a filthy man out of the store room.',
"say his folk have been skimming the supplies.",
'say he should be strung up as an example.'
],
notification: 'a thief is caught',
buttons: {
'kill': {
text: 'hang him',
nextScene: {1: 'hang'}
},
'spare': {
text: 'spare him',
nextScene: {1: 'spare'}
}
}
},
'hang': {
text: [
'the villagers hang the thief high in front of the store room.',
'the point is made. in the next few days, the missing supplies are returned.'
],
onLoad: function() {
$SM.set('game.thieves', 2);
$SM.remove('income.thieves');
$SM.addM('stores', $SM.get('game.stolen'));
},
buttons: {
'leave': {
text: 'leave',
nextScene: 'end'
}
}
},
'spare': {
text: [
"the man says he's grateful. says he won't come around any more.",
"shares what he knows about sneaking before he goes."
],
onLoad: function() {
$SM.set('game.thieves', 2);
$SM.remove('income.thieves');
$SM.addPerk('stealthy');
},
buttons: {
'leave': {
text: 'leave',
nextScene: 'end'
}
}
}
}
}
];
/**
* Events that can occur when any module is active (Except World. It's special.)
**/
Events.Global = [
{ /* The Thief */
title: _('The Thief'),
isAvailable: function() {
return (Engine.activeModule == Room || Engine.activeModule == Outside) && $SM.get('game.thieves') == 1;
},
scenes: {
'start': {
text: [
_('the villagers haul a filthy man out of the store room.'),
_("say his folk have been skimming the supplies."),
_('say he should be strung up as an example.')
],
notification: _('a thief is caught'),
blink: true,
buttons: {
'kill': {
text: _('hang him'),
nextScene: {1: 'hang'}
},
'spare': {
text: _('spare him'),
nextScene: {1: 'spare'}
}
}
},
'hang': {
text: [
_('the villagers hang the thief high in front of the store room.'),
_('the point is made. in the next few days, the missing supplies are returned.')
],
onLoad: function() {
$SM.set('game.thieves', 2);
$SM.remove('income.thieves');
$SM.addM('stores', $SM.get('game.stolen'));
},
buttons: {
'leave': {
text: _('leave'),
nextScene: 'end'
}
}
},
'spare': {
text: [
_("the man says he's grateful. says he won't come around any more."),
_("shares what he knows about sneaking before he goes.")
],
onLoad: function() {
$SM.set('game.thieves', 2);
$SM.remove('income.thieves');
$SM.addPerk('stealthy');
},
buttons: {
'leave': {
text: _('leave'),
nextScene: 'end'
}
}
}
}
}
];
+290 -244
View File
@@ -1,244 +1,290 @@
/**
* Events that can occur when the Outside module is active
**/
Events.Outside = [
{ /* Ruined traps */
title: 'A Ruined Trap',
isAvailable: function() {
return Engine.activeModule == Outside && $SM.get('game.buildings["trap"]', true) > 0;
},
scenes: {
'start': {
text: [
'some of the traps have been torn apart.',
'large prints lead away, into the forest.'
],
onLoad: function() {
var numWrecked = Math.floor(Math.random() * $SM.get('game.buildings["trap"]', true)) + 1;
$SM.add('game.buildings["trap"]', -numWrecked);
Outside.updateVillage();
Outside.updateTrapButton();
},
notification: 'some traps have been destroyed',
buttons: {
'track': {
text: 'track them',
nextScene: {0.5: 'nothing', 1: 'catch'}
},
'ignore': {
text: 'ignore them',
nextScene: 'end'
}
}
},
'nothing': {
text: [
'the tracks disappear after just a few minutes.',
'the forest is silent.'
],
buttons: {
'end': {
text: 'go home',
nextScene: 'end'
}
}
},
'catch': {
text: [
'not far from the village lies a large beast, its fur matted with blood.',
'it puts up little resistance before the knife.'
],
reward: {
fur: 100,
meat: 100,
teeth: 10
},
buttons: {
'end': {
text: 'go home',
nextScene: 'end'
}
}
}
}
},
{ /* Sickness */
title: 'Sickness',
isAvailable: function() {
return Engine.activeModule == Outside &&
$SM.get('game.population', true) > 10 &&
$SM.get('game.population', true) < 50 &&
$SM.get('stores.medicine', true) > 0;
},
scenes: {
'start': {
text: [
'a sickness is spreading through the village.',
'medicine is needed immediately.'
],
buttons: {
'heal': {
text: '1 medicine',
cost: { 'medicine' : 1 },
nextScene: {1: 'healed'}
},
'ignore': {
text: 'ignore it',
nextScene: {1: 'death'}
}
}
},
'healed': {
text: [
'the sickness is cured in time.'
],
buttons: {
'end': {
text: 'go home',
nextScene: 'end'
}
}
},
'death': {
text: [
'the sickness spreads through the village.',
'the days are spent with burials.',
'the nights are rent with screams.'
],
onLoad: function() {
var numKilled = Math.floor(Math.random() * 20) + 1;
Outside.killVillagers(numKilled);
},
buttons: {
'end': {
text: 'go home',
nextScene: 'end'
}
}
}
}
},
{ /* Plague */
title: 'Plague',
isAvailable: function() {
return Engine.activeModule == Outside && $SM.get('game.population', true) > 50 && $SM.get('stores.medicine', true) > 0;
},
scenes: {
'start': {
text: [
'a terrible plague is fast spreading through the village.',
'medicine is needed immediately.'
],
buttons: {
'heal': {
text: '5 medicine',
cost: { 'medicine' : 5 },
nextScene: {1: 'healed'}
},
'ignore': {
text: 'do nothing',
nextScene: {1: 'death'}
}
}
},
'healed': {
text: [
'the plague is kept from spreading.',
'only a few die.',
'the rest bury them.'
],
onLoad: function() {
var numKilled = Math.floor(Math.random() * 5) + 2;
Outside.killVillagers(numKilled);
},
buttons: {
'end': {
text: 'go home',
nextScene: 'end'
}
}
},
'death': {
text: [
'the plague rips through the village.',
'the nights are rent with screams.',
'the only hope is a quick death.'
],
onLoad: function() {
var numKilled = Math.floor(Math.random() * 80) + 10;
Outside.killVillagers(numKilled);
},
buttons: {
'end': {
text: 'go home',
nextScene: 'end'
}
}
}
}
},
{ /* Beast attack */
title: 'A Beast Attack',
isAvailable: function() {
return Engine.activeModule == Outside && $SM.get('game.population', true) > 0;
},
scenes: {
'start': {
text: [
'a pack of snarling beasts pours out of the trees.',
'the fight is short and bloody, but the beasts are repelled.',
'the villagers retreat to mourn the dead.'
],
onLoad: function() {
var numKilled = Math.floor(Math.random() * 10) + 1;
Outside.killVillagers(numKilled);
},
reward: {
fur: 100,
meat: 100,
teeth: 10
},
buttons: {
'end': {
text: 'go home',
nextScene: 'end'
}
}
}
}
},
{ /* Soldier attack */
title: 'A Military Raid',
isAvailable: function() {
return Engine.activeModule == Outside && $SM.get('game.population', true) > 0 && $SM.get('game.cityCleared');;
},
scenes: {
'start': {
text: [
'a gunshot rings through the trees.',
'well armed men charge out of the forest, firing into the crowd.',
'after a skirmish they are driven away, but not without losses.'
],
onLoad: function() {
var numKilled = Math.floor(Math.random() * 40) + 1;
Outside.killVillagers(numKilled);
},
reward: {
bullets: 10,
'cured meat': 50
},
buttons: {
'end': {
text: 'go home',
nextScene: 'end'
}
}
}
}
}
];
/**
* Events that can occur when the Outside module is active
**/
Events.Outside = [
{ /* Ruined traps */
title: _('A Ruined Trap'),
isAvailable: function() {
return Engine.activeModule == Outside && $SM.get('game.buildings["trap"]', true) > 0;
},
scenes: {
'start': {
text: [
_('some of the traps have been torn apart.'),
_('large prints lead away, into the forest.')
],
onLoad: function() {
var numWrecked = Math.floor(Math.random() * $SM.get('game.buildings["trap"]', true)) + 1;
$SM.add('game.buildings["trap"]', -numWrecked);
Outside.updateVillage();
Outside.updateTrapButton();
},
notification: _('some traps have been destroyed'),
blink: true,
buttons: {
'track': {
text: _('track them'),
nextScene: {0.5: 'nothing', 1: 'catch'}
},
'ignore': {
text: _('ignore them'),
nextScene: 'end'
}
}
},
'nothing': {
text: [
_('the tracks disappear after just a few minutes.'),
_('the forest is silent.')
],
notification: _('nothing was found'),
buttons: {
'end': {
text: _('go home'),
nextScene: 'end'
}
}
},
'catch': {
text: [
_('not far from the village lies a large beast, its fur matted with blood.'),
_('it puts up little resistance before the knife.')
],
notification: _('there was a beast. it\'s dead now'),
reward: {
fur: 100,
meat: 100,
teeth: 10
},
buttons: {
'end': {
text: _('go home'),
nextScene: 'end'
}
}
}
}
},
{ /* Hut fire */
title: _('Fire'),
isAvailable: function() {
return Engine.activeModule == Outside && $SM.get('game.buildings["hut"]', true) > 0 && $SM.get('game.population', true) > 5;
},
scenes: {
'start': {
text: [
_('a fire rampages through one of the huts, destroying it.'),
_('all residents in the hut perished in the fire.')
],
notification: _('a fire has started'),
blink: true,
onLoad: function() {
Outside.destroyHuts(1);
},
buttons: {
'mourn': {
text: _('mourn'),
notification: _('some villagers have died'),
nextScene: 'end'
}
}
}
}
},
{ /* Sickness */
title: _('Sickness'),
isAvailable: function() {
return Engine.activeModule == Outside && $SM.get('game.population', true) > 10 && $SM.get('game.population', true) < 50 && $SM.get('stores.medicine', true) > 0;
},
scenes: {
'start': {
text: [
_('a sickness is spreading through the village.'),
_('medicine is needed immediately.')
],
notification: _('some villagers are ill'),
blink: true,
buttons: {
'heal': {
text: _('1 medicine'),
cost: { 'medicine' : 1 },
nextScene: {1: 'healed'}
},
'ignore': {
text: _('ignore it'),
nextScene: {1: 'death'}
}
}
},
'healed': {
text: [
_('the sickness is cured in time.')
],
notification: _('sufferers are healed'),
buttons: {
'end': {
text: _('go home'),
nextScene: 'end'
}
}
},
'death': {
text: [
_('the sickness spreads through the village.'),
_('the days are spent with burials.'),
_('the nights are rent with screams.')
],
notification: _('sufferers are left to die'),
onLoad: function() {
var numKilled = Math.floor(Math.random() * Math.floor($SM.get('game.population', true)/2)) + 1;
Outside.killVillagers(numKilled);
},
buttons: {
'end': {
text: _('go home'),
nextScene: 'end'
}
}
}
}
},
{ /* Plague */
title: _('Plague'),
isAvailable: function() {
return Engine.activeModule == Outside && $SM.get('game.population', true) > 50 && $SM.get('stores.medicine', true) > 0;
},
scenes: {
'start': {
text: [
_('a terrible plague is fast spreading through the village.'),
_('medicine is needed immediately.')
],
notification: _('a plague afflicts the village'),
blink: true,
buttons: {
/* Because there is a serious need for medicine, the price is raised. */
'buyMedicine': {
text: _('buy medicine'),
cost: { 'scales': 70,
'teeth': 50 },
reward: { 'medicine': 1 }
},
'heal': {
text: _('5 medicine'),
cost: { 'medicine' : 5 },
nextScene: {1: 'healed'}
},
'ignore': {
text: _('do nothing'),
nextScene: {1: 'death'}
}
}
},
'healed': {
text: [
_('the plague is kept from spreading.'),
_('only a few die.'),
_('the rest bury them.')
],
notification: _('epidemic is eradicated eventually'),
onLoad: function() {
var numKilled = Math.floor(Math.random() * 5) + 2;
Outside.killVillagers(numKilled);
},
buttons: {
'end': {
text: _('go home'),
nextScene: 'end'
}
}
},
'death': {
text: [
_('the plague rips through the village.'),
_('the nights are rent with screams.'),
_('the only hope is a quick death.')
],
notification: _('population is almost exterminated'),
onLoad: function() {
var numKilled = Math.floor(Math.random() * 80) + 10;
Outside.killVillagers(numKilled);
},
buttons: {
'end': {
text: _('go home'),
nextScene: 'end'
}
}
}
}
},
{ /* Beast attack */
title: _('A Beast Attack'),
isAvailable: function() {
return Engine.activeModule == Outside && $SM.get('game.population', true) > 0;
},
scenes: {
'start': {
text: [
_('a pack of snarling beasts pours out of the trees.'),
_('the fight is short and bloody, but the beasts are repelled.'),
_('the villagers retreat to mourn the dead.')
],
notification: _('wild beasts attack the villagers'),
onLoad: function() {
var numKilled = Math.floor(Math.random() * 10) + 1;
Outside.killVillagers(numKilled);
},
reward: {
fur: 100,
meat: 100,
teeth: 10
},
blink: true,
buttons: {
'end': {
text: _('go home'),
notification: _('predators become prey. price is unfair'),
nextScene: 'end'
}
}
}
}
},
{ /* Soldier attack */
title: _('A Military Raid'),
isAvailable: function() {
return Engine.activeModule == Outside && $SM.get('game.population', true) > 0 && $SM.get('game.cityCleared');
},
scenes: {
'start': {
text: [
_('a gunshot rings through the trees.'),
_('well armed men charge out of the forest, firing into the crowd.'),
_('after a skirmish they are driven away, but not without losses.')
],
notification: _('troops storm the village'),
onLoad: function() {
var numKilled = Math.floor(Math.random() * 40) + 1;
Outside.killVillagers(numKilled);
},
reward: {
bullets: 10,
'cured meat': 50
},
blink: true,
buttons: {
'end': {
text: _('go home'),
notification: _('warfare is bloodthirsty'),
nextScene: 'end'
}
}
}
}
}
];
+618 -593
View File
File diff suppressed because it is too large Load Diff
+3574 -3447
View File
File diff suppressed because it is too large Load Diff
+27 -27
View File
@@ -1,28 +1,28 @@
/**
* Module that takes care of header buttons
*/
var Header = {
init: function(options) {
this.options = $.extend(
this.options,
options
);
},
options: {}, // Nothing for now
canTravel: function() {
return $('div#header div.headerButton').length > 1;
},
addLocation: function(text, id, module) {
return $('<div>').attr('id', "location_" + id)
.addClass('headerButton')
.text(text).click(function() {
if(Header.canTravel()) {
Engine.travelTo(module);
}
}).appendTo($('div#header'));
}
/**
* Module that takes care of header buttons
*/
var Header = {
init: function(options) {
this.options = $.extend(
this.options,
options
);
},
options: {}, // Nothing for now
canTravel: function() {
return $('div#header div.headerButton').length > 1;
},
addLocation: function(text, id, module) {
return $('<div>').attr('id', "location_" + id)
.addClass('headerButton')
.text(text).click(function() {
if(Header.canTravel()) {
Engine.travelTo(module);
}
}).appendTo($('div#header'));
}
};
+69
View File
@@ -0,0 +1,69 @@
(function(){
//only used for poedit to find translatable strings
var keywords = [
_('saved.'),
_('wood'),
_('builder'),
_('teeth'),
_('meat'),
_('fur'),
_('alien alloy'),
_('bullets'),
_('charm'),
_('leather'),
_('iron'),
_('steel'),
_('coal'),
_('sulphur'),
_('energy cell'),
_('torch'),
_('medicine'),
_('hunter'),
_('trapper'),
_('tanner'),
_('grenade'),
_('bolas'),
_('bayonet'),
_('charcutier'),
_('iron miner'),
_('iron mine'),
_('coal miner'),
_('coal mine'),
_('sulphur miner'),
_('sulphur mine'),
_('armourer'),
_('steelworker'),
_('bait'),
_('cured meat'),
_('scales'),
_('compass'),
_('laser rifle'),
_('gatherer'),
_('cloth'),
_('scales'),
_('cured meat'),
_('thieves'),
_('not enough fur'),
_('not enough wood'),
_('not enough coal'),
_('not enough iron'),
_('not enough steel'),
_('not enough sulphur'),
_('baited trap'),
_('not enough scales'),
_('not enough cloth'),
_('not enough teeth'),
_('not enough leather'),
_('not enough meat'),
_('the compass points east'),
_('the compass points west'),
_('the compass points north'),
_('the compass points south'),
_('the compass points northeast'),
_('the compass points northwest'),
_('the compass points southeast'),
_('the compass points southwest')
];
delete keywords;
})();
+78 -58
View File
@@ -1,58 +1,78 @@
/**
* Module that registers the notification box and handles messages
*/
var Notifications = {
init: function(options) {
this.options = $.extend(
this.options,
options
);
// Create the notifications box
elem = $('<div>').attr({
id: 'notifications',
className: 'notifications'
});
// Create the transparency gradient
$('<div>').attr('id', 'notifyGradient').appendTo(elem);
elem.appendTo('div#wrapper');
},
options: {}, // Nothing for now
elem: null,
notifyQueue: {},
// Allow notification to the player
notify: function(module, text, noQueue) {
if(typeof text == 'undefined') return;
if(text.slice(-1) != ".") text += ".";
if(module != null && Engine.activeModule != module) {
if(!noQueue) {
if(typeof this.notifyQueue[module] == 'undefined') {
this.notifyQueue[module] = new Array();
}
this.notifyQueue[module].push(text);
}
} else {
Notifications.printMessage(text);
}
Engine.saveGame();
},
printMessage: function(t) {
var text = $('<div>').addClass('notification').css('opacity', '0').text(t).prependTo('div#notifications');
text.animate({opacity: 1}, 500, 'linear');
},
printQueue: function(module) {
if(typeof this.notifyQueue[module] != 'undefined') {
while(this.notifyQueue[module].length > 0) {
Notifications.printMessage(this.notifyQueue[module].shift());
}
}
}
};
/**
* Module that registers the notification box and handles messages
*/
var Notifications = {
init: function(options) {
this.options = $.extend(
this.options,
options
);
// Create the notifications box
elem = $('<div>').attr({
id: 'notifications',
className: 'notifications'
});
// Create the transparency gradient
$('<div>').attr('id', 'notifyGradient').appendTo(elem);
elem.appendTo('div#wrapper');
},
options: {}, // Nothing for now
elem: null,
notifyQueue: {},
// Allow notification to the player
notify: function(module, text, noQueue) {
if(typeof text == 'undefined') return;
if(text.slice(-1) != ".") text += ".";
if(module != null && Engine.activeModule != module) {
if(!noQueue) {
if(typeof this.notifyQueue[module] == 'undefined') {
this.notifyQueue[module] = [];
}
this.notifyQueue[module].push(text);
}
} else {
Notifications.printMessage(text);
}
Engine.saveGame();
},
clearHidden: function() {
// To fix some memory usage issues, we clear notifications that have been hidden.
// We use position().top here, because we know that the parent will be the same, so the position will be the same.
var bottom = $('#notifyGradient').position().top + $('#notifyGradient').outerHeight(true);
$('.notification').each(function() {
if($(this).position().top > bottom){
$(this).remove();
}
});
},
printMessage: function(t) {
var text = $('<div>').addClass('notification').css('opacity', '0').text(t).prependTo('div#notifications');
text.animate({opacity: 1}, 500, 'linear', function() {
// Do this every time we add a new message, this way we never have a large backlog to iterate through. Keeps things faster.
Notifications.clearHidden();
});
},
printQueue: function(module) {
if(typeof this.notifyQueue[module] != 'undefined') {
while(this.notifyQueue[module].length > 0) {
Notifications.printMessage(this.notifyQueue[module].shift());
}
}
}
};
+676 -597
View File
File diff suppressed because it is too large Load Diff
+346 -311
View File
@@ -1,311 +1,346 @@
var Path = {
DEFAULT_BAG_SPACE: 10,
// Everything not in this list weighs 1
Weight: {
'bone spear': 2,
'iron sword': 3,
'steel sword': 5,
'rifle': 5,
'bullets': 0.1,
'energy cell': 0.2,
'laser rifle': 5,
'bolas': 0.5
},
name: 'Path',
options: {}, // Nuthin'
init: function(options) {
this.options = $.extend(
this.options,
options
);
// Init the World
World.init();
// Create the path tab
this.tab = Header.addLocation("A Dusty Path", "path", Path);
// Create the Path panel
this.panel = $('<div>').attr('id', "pathPanel")
.addClass('location')
.appendTo('div#locationSlider');
// Add the outfitting area
var outfitting = $('<div>').attr('id', 'outfitting').appendTo(this.panel);
$('<div>').attr('id', 'bagspace').appendTo(outfitting);
// Add the embark button
new Button.Button({
id: 'embarkButton',
text: "embark",
click: Path.embark,
width: '80px',
cooldown: World.DEATH_COOLDOWN
}).appendTo(this.panel);
Path.outfit = {};
Engine.updateSlider();
//subscribe to stateUpdates
$.Dispatch('stateUpdate').subscribe(Path.handleStateUpdates);
},
openPath: function() {
Path.init();
Engine.event('progress', 'path');
Notifications.notify(Room, 'the compass points ' + World.dir);
},
getWeight: function(thing) {
var w = Path.Weight[thing];
if(typeof w != 'number') w = 1;
return w;
},
getCapacity: function() {
if($SM.get('stores.convoy', true) > 0) {
return Path.DEFAULT_BAG_SPACE + 60;
} else if($SM.get('stores.wagon', true) > 0) {
return Path.DEFAULT_BAG_SPACE + 30;
} else if($SM.get('stores.rucksack', true) > 0) {
return Path.DEFAULT_BAG_SPACE + 10;
}
return Path.DEFAULT_BAG_SPACE;
},
getFreeSpace: function() {
var num = 0;
if(Path.outfit) {
for(var k in Path.outfit) {
var n = Path.outfit[k];
if(isNaN(n)) {
// No idea how this happens, but I will fix it here!
Path.outfit[k] = n = 0;
}
num += n * Path.getWeight(k);
}
}
return Path.getCapacity() - num;
},
updatePerks: function() {
if($SM.get('character.perks')) {
var perks = $('#perks');
var needsAppend = false;
if(perks.length == 0) {
needsAppend = true;
perks = $('<div>').attr('id', 'perks');
}
for(var k in $SM.get('character.perks')) {
var id = 'perk_' + k.replace(' ', '-');
var r = $('#' + id);
if($SM.get('character.perks["'+k+'"]') && r.length == 0) {
r = $('<div>').attr('id', id).addClass('perkRow').appendTo(perks);
$('<div>').addClass('row_key').text(k).appendTo(r);
$('<div>').addClass('tooltip bottom right').text(Engine.Perks[k].desc).appendTo(r);
}
}
if(needsAppend && perks.children().length > 0) {
perks.appendTo(Path.panel);
}
if(Engine.activeModule === Path) {
$('#storesContainer').css({top: perks.height() + 26 + 'px'});
}
}
},
updateOutfitting: function() {
var outfit = $('div#outfitting');
if(!Path.outfit) {
Path.outfit = {};
}
// Add the armour row
var armour = "none";
if($SM.get('stores["s armour"]', true) > 0)
armour = "steel";
else if($SM.get('stores["i armour"]', true) > 0)
armour = "iron";
else if($SM.get('stores["l armour"]', true) > 0)
armour = "leather";
var aRow = $('#armourRow');
if(aRow.length == 0) {
aRow = $('<div>').attr('id', 'armourRow').addClass('outfitRow').prependTo(outfit);
$('<div>').addClass('row_key').text('armour').appendTo(aRow);
$('<div>').addClass('row_val').text(armour).appendTo(aRow);
$('<div>').addClass('clear').appendTo(aRow);
} else {
$('.row_val', aRow).text(armour);
}
// Add the water row
var wRow = $('#waterRow');
if(wRow.length == 0) {
wRow = $('<div>').attr('id', 'waterRow').addClass('outfitRow').insertAfter(aRow);
$('<div>').addClass('row_key').text('water').appendTo(wRow);
$('<div>').addClass('row_val').text(World.getMaxWater()).appendTo(wRow);
$('<div>').addClass('clear').appendTo(wRow);
} else {
$('.row_val', wRow).text(World.getMaxWater());
}
var space = Path.getFreeSpace();
var total = 0;
// Add the non-craftables to the craftables
var carryable = $.extend({
'cured meat': { type: 'tool' },
'bullets': { type: 'tool' },
'grenade': {type: 'weapon' },
'bolas': {type: 'weapon' },
'laser rifle': {type: 'weapon' },
'energy cell': {type: 'tool' },
'bayonet': {type: 'weapon' },
'charm': {type: 'tool'},
'medicine': {type: 'tool'}
}, Room.Craftables);
for(var k in carryable) {
var store = carryable[k];
var have = $SM.get('stores["'+k+'"]');
var num = Path.outfit[k];
num = typeof num == 'number' ? num : 0;
var numAvailable = $SM.get('stores["'+k+'"]', true);
var row = $('div#outfit_row_' + k.replace(' ', '-'), outfit);
if((store.type == 'tool' || store.type == 'weapon') && have > 0) {
total += num * Path.getWeight(k);
if(row.length == 0) {
row = Path.createOutfittingRow(k, num);
var curPrev = null;
outfit.children().each(function(i) {
var child = $(this);
if(child.attr('id').indexOf('outfit_row_') == 0) {
var cName = child.attr('id').substring(11).replace('-', ' ');
if(cName < k && (curPrev == null || cName > curPrev)) {
curPrev = cName;
}
}
});
if(curPrev == null) {
row.insertAfter(wRow);
}
else
{
row.insertAfter(outfit.find('#outfit_row_' + curPrev.replace(' ', '-')));
}
} else {
$('div#' + row.attr('id') + ' > div.row_val > span', outfit).text(num);
$('div#' + row.attr('id') + ' .tooltip .numAvailable', outfit).text(numAvailable - num);
}
if(num == 0) {
$('.dnBtn', row).addClass('disabled');
$('.dnManyBtn', row).addClass('disabled');
} else {
$('.dnBtn', row).removeClass('disabled');
$('.dnManyBtn', row).removeClass('disabled');
}
if(num >= numAvailable || space < Path.getWeight(k)) {
$('.upBtn', row).addClass('disabled');
$('.upManyBtn', row).addClass('disabled');
} else if(space >= Path.getWeight(k)) {
$('.upBtn', row).removeClass('disabled');
$('.upManyBtn', row).removeClass('disabled');
}
} else if(have == 0 && row.length > 0) {
row.remove();
}
}
// Update bagspace
$('#bagspace').text('free ' + Math.floor(Path.getCapacity() - total) + '/' + Path.getCapacity());
if(Path.outfit['cured meat'] > 0) {
Button.setDisabled($('#embarkButton'), false);
} else {
Button.setDisabled($('#embarkButton'), true);
}
},
createOutfittingRow: function(name, num) {
var row = $('<div>').attr('id', 'outfit_row_' + name.replace(' ', '-')).addClass('outfitRow');
$('<div>').addClass('row_key').text(name).appendTo(row);
var val = $('<div>').addClass('row_val').appendTo(row);
$('<span>').text(num).appendTo(val);
$('<div>').addClass('upBtn').appendTo(val).click([1], Path.increaseSupply);
$('<div>').addClass('dnBtn').appendTo(val).click([1], Path.decreaseSupply);
$('<div>').addClass('upManyBtn').appendTo(val).click([10], Path.increaseSupply);
$('<div>').addClass('dnManyBtn').appendTo(val).click([10], Path.decreaseSupply);
$('<div>').addClass('clear').appendTo(row);
var numAvailable = $SM.get('stores["'+name+'"]', true);
var tt = $('<div>').addClass('tooltip bottom right').appendTo(row);
$('<div>').addClass('row_key').text('weight').appendTo(tt);
$('<div>').addClass('row_val').text(Path.getWeight(name)).appendTo(tt);
$('<div>').addClass('row_key').text('available').appendTo(tt);
$('<div>').addClass('row_val').addClass('numAvailable').text(numAvailable).appendTo(tt);
return row;
},
increaseSupply: function(btn) {
var supply = $(this).closest('.outfitRow').children('.row_key').text().replace('-', ' ');
Engine.log('increasing ' + supply + ' by up to ' + btn.data);
var cur = Path.outfit[supply];
cur = typeof cur == 'number' ? cur : 0;
if(Path.getFreeSpace() >= Path.getWeight(supply) && cur < $SM.get('stores["'+supply+'"]', true)) {
var maxExtraByWeight = Math.floor(Path.getFreeSpace() / Path.getWeight(supply));
var maxExtraByStore = $SM.get('stores["'+supply+'"]', true) - cur;
var maxExtraByBtn = btn.data;
Path.outfit[supply] = cur + Math.min(maxExtraByBtn, Math.min(maxExtraByWeight, maxExtraByStore));
Path.updateOutfitting();
}
},
decreaseSupply: function(btn) {
var supply = $(this).closest('.outfitRow').children('.row_key').text().replace('-', ' ');
Engine.log('decreasing ' + supply + ' by up to ' + btn.data);
var cur = Path.outfit[supply];
cur = typeof cur == 'number' ? cur : 0;
if(cur > 0) {
Path.outfit[supply] = Math.max(0, cur - btn.data);
Path.updateOutfitting();
}
},
onArrival: function(transition_diff) {
Path.setTitle();
Path.updateOutfitting();
Path.updatePerks();
Engine.moveStoresView($('#perks'), transition_diff);
},
setTitle: function() {
document.title = 'A Dusty Path';
},
embark: function() {
for(var k in Path.outfit) {
$SM.add('stores["'+k+'"]', -Path.outfit[k]);
}
World.onArrival();
$('#outerSlider').animate({left: '-700px'}, 300);
Engine.activeModule = World;
},
handleStateUpdates: function(e){
if(e.category == 'character' && e.stateName.indexOf('character.perks') == 0 && Engine.activeModule == Path){
Path.updatePerks();
};
}
};
var Path = {
DEFAULT_BAG_SPACE: 10,
_STORES_OFFSET: 0,
// Everything not in this list weighs 1
Weight: {
'bone spear': 2,
'iron sword': 3,
'steel sword': 5,
'rifle': 5,
'bullets': 0.1,
'energy cell': 0.2,
'laser rifle': 5,
'bolas': 0.5
},
name: 'Path',
options: {}, // Nuthin'
init: function(options) {
this.options = $.extend(
this.options,
options
);
// Init the World
World.init();
// Create the path tab
this.tab = Header.addLocation(_("A Dusty Path"), "path", Path);
// Create the Path panel
this.panel = $('<div>').attr('id', "pathPanel")
.addClass('location')
.appendTo('div#locationSlider');
// Add the outfitting area
var outfitting = $('<div>').attr({'id': 'outfitting', 'data-legend': _('supplies:')}).appendTo(this.panel);
$('<div>').attr('id', 'bagspace').appendTo(outfitting);
// Add the embark button
new Button.Button({
id: 'embarkButton',
text: _("embark"),
click: Path.embark,
width: '80px',
cooldown: World.DEATH_COOLDOWN
}).appendTo(this.panel);
Path.outfit = $SM.get('outfit');
Engine.updateSlider();
//subscribe to stateUpdates
$.Dispatch('stateUpdate').subscribe(Path.handleStateUpdates);
},
openPath: function() {
Path.init();
Engine.event('progress', 'path');
Notifications.notify(Room, _('the compass points ' + World.dir));
},
getWeight: function(thing) {
var w = Path.Weight[thing];
if(typeof w != 'number') w = 1;
return w;
},
getCapacity: function() {
if($SM.get('stores.convoy', true) > 0) {
return Path.DEFAULT_BAG_SPACE + 60;
} else if($SM.get('stores.wagon', true) > 0) {
return Path.DEFAULT_BAG_SPACE + 30;
} else if($SM.get('stores.rucksack', true) > 0) {
return Path.DEFAULT_BAG_SPACE + 10;
}
return Path.DEFAULT_BAG_SPACE;
},
getFreeSpace: function() {
var num = 0;
if(Path.outfit) {
for(var k in Path.outfit) {
var n = Path.outfit[k];
if(isNaN(n)) {
// No idea how this happens, but I will fix it here!
Path.outfit[k] = n = 0;
}
num += n * Path.getWeight(k);
}
}
return Path.getCapacity() - num;
},
updatePerks: function(ignoreStores) {
if($SM.get('character.perks')) {
var perks = $('#perks');
var needsAppend = false;
if(perks.length === 0) {
needsAppend = true;
perks = $('<div>').attr({'id': 'perks', 'data-legend': _('perks:')});
}
for(var k in $SM.get('character.perks')) {
var id = 'perk_' + k.replace(' ', '-');
var r = $('#' + id);
if($SM.get('character.perks["'+k+'"]') && r.length === 0) {
r = $('<div>').attr('id', id).addClass('perkRow').appendTo(perks);
$('<div>').addClass('row_key').text(_(k)).appendTo(r);
$('<div>').addClass('tooltip bottom right').text(Engine.Perks[k].desc).appendTo(r);
}
}
if(needsAppend && perks.children().length > 0) {
perks.prependTo(Path.panel);
}
if(!ignoreStores && Engine.activeModule === Path) {
$('#storesContainer').css({top: perks.height() + 26 + Path._STORES_OFFSET + 'px'});
}
}
},
updateOutfitting: function() {
var outfit = $('div#outfitting');
if(!Path.outfit) {
Path.outfit = {};
}
// Add the armour row
var armour = _("none");
if($SM.get('stores["s armour"]', true) > 0)
armour = _("steel");
else if($SM.get('stores["i armour"]', true) > 0)
armour = _("iron");
else if($SM.get('stores["l armour"]', true) > 0)
armour = _("leather");
var aRow = $('#armourRow');
if(aRow.length === 0) {
aRow = $('<div>').attr('id', 'armourRow').addClass('outfitRow').prependTo(outfit);
$('<div>').addClass('row_key').text(_('armour')).appendTo(aRow);
$('<div>').addClass('row_val').text(armour).appendTo(aRow);
$('<div>').addClass('clear').appendTo(aRow);
} else {
$('.row_val', aRow).text(armour);
}
// Add the water row
var wRow = $('#waterRow');
if(wRow.length === 0) {
wRow = $('<div>').attr('id', 'waterRow').addClass('outfitRow').insertAfter(aRow);
$('<div>').addClass('row_key').text(_('water')).appendTo(wRow);
$('<div>').addClass('row_val').text(World.getMaxWater()).appendTo(wRow);
$('<div>').addClass('clear').appendTo(wRow);
} else {
$('.row_val', wRow).text(World.getMaxWater());
}
var space = Path.getFreeSpace();
var total = 0;
// Add the non-craftables to the craftables
var carryable = $.extend({
'cured meat': { type: 'tool' },
'bullets': { type: 'tool' },
'grenade': {type: 'weapon' },
'bolas': {type: 'weapon' },
'laser rifle': {type: 'weapon' },
'energy cell': {type: 'tool' },
'bayonet': {type: 'weapon' },
'charm': {type: 'tool'},
'medicine': {type: 'tool'}
}, Room.Craftables);
for(var k in carryable) {
var lk = _(k);
var store = carryable[k];
var have = $SM.get('stores["'+k+'"]');
var num = Path.outfit[k];
num = typeof num == 'number' ? num : 0;
if (have < num) { num = have; }
var numAvailable = $SM.get('stores["'+k+'"]', true);
var row = $('div#outfit_row_' + k.replace(' ', '-'), outfit);
if((store.type == 'tool' || store.type == 'weapon') && have > 0) {
total += num * Path.getWeight(k);
if(row.length === 0) {
row = Path.createOutfittingRow(k, num, store.name);
var curPrev = null;
outfit.children().each(function(i) {
var child = $(this);
if(child.attr('id').indexOf('outfit_row_') === 0) {
var cName = child.children('.row_key').text();
if(cName < lk) {
curPrev = child.attr('id');
}
}
});
if(curPrev == null) {
row.insertAfter(wRow);
} else {
row.insertAfter(outfit.find('#' + curPrev));
}
} else {
$('div#' + row.attr('id') + ' > div.row_val > span', outfit).text(num);
$('div#' + row.attr('id') + ' .tooltip .numAvailable', outfit).text(numAvailable - num);
}
if(num === 0) {
$('.dnBtn', row).addClass('disabled');
$('.dnManyBtn', row).addClass('disabled');
} else {
$('.dnBtn', row).removeClass('disabled');
$('.dnManyBtn', row).removeClass('disabled');
}
if(num >= numAvailable || space < Path.getWeight(k)) {
$('.upBtn', row).addClass('disabled');
$('.upManyBtn', row).addClass('disabled');
} else if(space >= Path.getWeight(k)) {
$('.upBtn', row).removeClass('disabled');
$('.upManyBtn', row).removeClass('disabled');
}
} else if(have === 0 && row.length > 0) {
row.remove();
}
}
// Update bagspace
$('#bagspace').text(_('free {0}/{1}', Math.floor(Path.getCapacity() - total) , Path.getCapacity()));
if(Path.outfit['cured meat'] > 0) {
Button.setDisabled($('#embarkButton'), false);
} else {
Button.setDisabled($('#embarkButton'), true);
}
},
createOutfittingRow: function(key, num, name) {
if(!name) name = _(key);
var row = $('<div>').attr('id', 'outfit_row_' + key.replace(' ', '-')).addClass('outfitRow').attr('key',key);
$('<div>').addClass('row_key').text(name).appendTo(row);
var val = $('<div>').addClass('row_val').appendTo(row);
$('<span>').text(num).appendTo(val);
$('<div>').addClass('upBtn').appendTo(val).click([1], Path.increaseSupply);
$('<div>').addClass('dnBtn').appendTo(val).click([1], Path.decreaseSupply);
$('<div>').addClass('upManyBtn').appendTo(val).click([10], Path.increaseSupply);
$('<div>').addClass('dnManyBtn').appendTo(val).click([10], Path.decreaseSupply);
$('<div>').addClass('clear').appendTo(row);
var numAvailable = $SM.get('stores["'+key+'"]', true);
var tt = $('<div>').addClass('tooltip bottom right').appendTo(row);
$('<div>').addClass('row_key').text(_('weight')).appendTo(tt);
$('<div>').addClass('row_val').text(Path.getWeight(key)).appendTo(tt);
$('<div>').addClass('row_key').text(_('available')).appendTo(tt);
$('<div>').addClass('row_val').addClass('numAvailable').text(numAvailable).appendTo(tt);
return row;
},
increaseSupply: function(btn) {
var supply = $(this).closest('.outfitRow').attr('key');
Engine.log('increasing ' + supply + ' by up to ' + btn.data);
var cur = Path.outfit[supply];
cur = typeof cur == 'number' ? cur : 0;
if(Path.getFreeSpace() >= Path.getWeight(supply) && cur < $SM.get('stores["'+supply+'"]', true)) {
var maxExtraByWeight = Math.floor(Path.getFreeSpace() / Path.getWeight(supply));
var maxExtraByStore = $SM.get('stores["'+supply+'"]', true) - cur;
var maxExtraByBtn = btn.data;
Path.outfit[supply] = cur + Math.min(maxExtraByBtn, Math.min(maxExtraByWeight, maxExtraByStore));
$SM.set('outfit['+supply+']', Path.outfit[supply]);
Path.updateOutfitting();
}
},
decreaseSupply: function(btn) {
var supply = $(this).closest('.outfitRow').attr('key');
Engine.log('decreasing ' + supply + ' by up to ' + btn.data);
var cur = Path.outfit[supply];
cur = typeof cur == 'number' ? cur : 0;
if(cur > 0) {
Path.outfit[supply] = Math.max(0, cur - btn.data);
$SM.set('outfit['+supply+']', Path.outfit[supply]);
Path.updateOutfitting();
}
},
onArrival: function(transition_diff) {
Path.setTitle();
Path.updateOutfitting();
Path.updatePerks(true);
$SM.set('outfit', Path.outfit);
Engine.moveStoresView($('#perks'), transition_diff);
},
setTitle: function() {
document.title = _('A Dusty Path');
},
embark: function() {
for(var k in Path.outfit) {
$SM.add('stores["'+k+'"]', -Path.outfit[k]);
}
$SM.remove('outfit');
World.onArrival();
$('#outerSlider').animate({left: '-700px'}, 300);
Engine.activeModule = World;
},
handleStateUpdates: function(e){
if(e.category == 'character' && e.stateName.indexOf('character.perks') === 0 && Engine.activeModule == Path){
Path.updatePerks();
};
},
scrollSidebar: function(direction, reset){
if( typeof reset != "undefined" ){
$('#perks').css('top', '0px');
$('#storesContainer').css('top', '206px');
Path._STORES_OFFSET = 0;
return;
}
var momentum = 10;
if( direction == 'up' )
momentum = momentum * -1
if( direction == 'down' && inView( direction, $('#perks') ) ){
return false;
}else if( direction == 'up' && inView( direction, $('#storesContainer') ) ){
return false;
}
scrollByX( $('#perks'), momentum );
scrollByX( $('#storesContainer'), momentum );
Path._STORES_OFFSET += momentum;
}
};
+81 -84
View File
@@ -7,100 +7,97 @@ var Prestige = {
init: function(options) {
this.options = $.extend(this.options, options);
},
save: function() {
var prevStores = [ //g = goods, w = weapons, a = ammo
Math.floor($SM.get('stores["wood"]') / Prestige.randGen('g')),
Math.floor($SM.get('stores["fur"]') / Prestige.randGen('g')),
Math.floor($SM.get('stores["meat"]') / Prestige.randGen('g')),
Math.floor($SM.get('stores["iron"]') / Prestige.randGen('g')),
Math.floor($SM.get('stores["coal"]') / Prestige.randGen('g')),
Math.floor($SM.get('stores["sulphur"]') / Prestige.randGen('g')),
Math.floor($SM.get('stores["steel"]') / Prestige.randGen('g')),
Math.floor($SM.get('stores["cured meat"]') / Prestige.randGen('g')),
Math.floor($SM.get('stores["scales"]') / Prestige.randGen('g')),
Math.floor($SM.get('stores["teeth"]') / Prestige.randGen('g')),
Math.floor($SM.get('stores["leather"]') / Prestige.randGen('g')),
Math.floor($SM.get('stores["bait"]') / Prestige.randGen('g')),
Math.floor($SM.get('stores["torch"]') / Prestige.randGen('g')),
Math.floor($SM.get('stores["cloth"]') / Prestige.randGen('g')),
Math.floor($SM.get('stores["bone spear"]') / Prestige.randGen('w')),
Math.floor($SM.get('stores["iron sword"]') / Prestige.randGen('w')),
Math.floor($SM.get('stores["steel sword"]') / Prestige.randGen('w')),
Math.floor($SM.get('stores["bayonet"]') / Prestige.randGen('w')),
Math.floor($SM.get('stores["rifle"]') / Prestige.randGen('w')),
Math.floor($SM.get('stores["laser rifle"]') / Prestige.randGen('w')),
Math.floor($SM.get('stores["bullets"]') / Prestige.randGen('a')),
Math.floor($SM.get('stores["energy cell"]') / Prestige.randGen('a')),
Math.floor($SM.get('stores["grenade"]') / Prestige.randGen('a')),
Math.floor($SM.get('stores["bolas"]') / Prestige.randGen('a'))
];
for (var n = 0; n <= 23; n++) {
if (isNaN(prevStores[n])) {
prevStores[n] = 0;
}
storesMap: [
{ store: 'wood', type: 'g' },
{ store: 'fur', type: 'g' },
{ store: 'meat', type: 'g' },
{ store: 'iron', type: 'g' },
{ store: 'coal', type: 'g' },
{ store: 'sulphur', type: 'g' },
{ store: 'steel', type: 'g' },
{ store: 'cured meat', type: 'g' },
{ store: 'scales', type: 'g' },
{ store: 'teeth', type: 'g' },
{ store: 'leather', type: 'g' },
{ store: 'bait', type: 'g' },
{ store: 'torch', type: 'g' },
{ store: 'cloth', type: 'g' },
{ store: 'bone spear', type: 'w' },
{ store: 'iron sword', type: 'w' },
{ store: 'steel sword', type: 'w' },
{ store: 'bayonet', type: 'w' },
{ store: 'rifle', type: 'w' },
{ store: 'laser rifle', type: 'w' },
{ store: 'bullets', type: 'a' },
{ store: 'energy cell', type: 'a' },
{ store: 'grenade', type: 'a' },
{ store: 'bolas', type: 'a' }
],
getStores: function(reduce) {
var stores = [];
for(var i in this.storesMap) {
var s = this.storesMap[i];
stores.push(Math.floor($SM.get('stores["' + s.store + '"]', true) /
(reduce ? this.randGen(s.type) : 1)));
}
$SM.set('previous.stores', prevStores);
return prevStores;
return stores;
},
populateNewSave : function(newstate) {
State = {
previous : {
stores : newstate
}
get: function() {
return {
stores: $SM.get('previous.stores'),
score: $SM.get('previous.score')
};
Engine.init({
state : State
});
return State;
},
set: function(prestige) {
$SM.set('previous.stores', prestige.stores);
$SM.set('previous.score', prestige.score);
},
save: function() {
$SM.set('previous.stores', this.getStores(true));
$SM.set('previous.score', Score.totalScore());
},
load : function() {
collectStores : function() {
var prevStores = $SM.get('previous.stores');
$SM.add('stores["wood"]', prevStores[0]);
$SM.add('stores["fur"]', prevStores[1]);
$SM.add('stores["meat"]', prevStores[2]);
$SM.add('stores["iron"]', prevStores[3]);
$SM.add('stores["coal"]', prevStores[4]);
$SM.add('stores["sulphur"]', prevStores[5]);
$SM.add('stores["steel"]', prevStores[6]);
$SM.add('stores["cured meat"]', prevStores[7]);
$SM.add('stores["scales"]', prevStores[8]);
$SM.add('stores["teeth"]', prevStores[9]);
$SM.add('stores["leather"]', prevStores[10]);
$SM.add('stores["bait"]', prevStores[11]);
$SM.add('stores["torch"]', prevStores[12]);
$SM.add('stores["cloth"]', prevStores[13]);
$SM.add('stores["bone spear"]', prevStores[14]);
$SM.add('stores["iron sword"]', prevStores[15]);
$SM.add('stores["steel sword"]', prevStores[16]);
$SM.add('stores["bayonet"]', prevStores[17]);
$SM.add('stores["rifle"]', prevStores[18]);
$SM.add('stores["laser rifle"]', prevStores[19]);
$SM.add('stores["bullets"]', prevStores[20]);
$SM.add('stores["energy cell"]', prevStores[21]);
$SM.add('stores["grenade"]', prevStores[22]);
$SM.add('stores["bolas"]', prevStores[23]);
return prevStores;
if(prevStores != null) {
var toAdd = {};
for(var i in this.storesMap) {
var s = this.storesMap[i];
toAdd[s.store] = prevStores[i];
}
$SM.addM('stores', toAdd);
// Loading the stores clears em from the save
prevStores.length = 0;
}
},
randGen : function(storeType) {
if (storeType == 'g') {
divisor = Math.floor(Math.random() * 10);
} else if (storeType == 'w') {
divisor = Math.floor(Math.floor(Math.random() * 10) / 2);
} else if (storeType == 'a') {
divisor = Math.ceil(Math.random() * 10
* Math.ceil(Math.random() * 10));
} else {
divisor = 1;
var amount;
switch(storeType) {
case 'g':
amount = Math.floor(Math.random() * 10);
break;
case 'w':
amount = Math.floor(Math.floor(Math.random() * 10) / 2);
break;
case 'a':
amount = Math.ceil(Math.random() * 10 * Math.ceil(Math.random() * 10));
break;
default:
return 1;
}
if (divisor === 0) {
divisor = 1;
if (amount !== 0) {
return amount;
}
return divisor;
return 1;
}
};
};

Some files were not shown because too many files have changed in this diff Show More