From 82d5a5b59dff4699f2457f19a4917e38427a5a04 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9=20N=2E=20Darcie?= Date: Tue, 8 Oct 2024 00:24:01 -0300 Subject: [PATCH] Initial commit --- .github/workflows/deploy.yml | 2 +- css/normalize.css | 349 ++++++++++++++++++++++++++++ css/style.css | 238 +++++++++++++++++++ img/characters/girl.jpg | Bin 0 -> 3188 bytes img/characters/kid.jpg | Bin 0 -> 3333 bytes img/characters/man.jpg | Bin 0 -> 3474 bytes img/characters/woman.jpg | Bin 0 -> 3158 bytes img/forest.jpg | Bin 0 -> 58550 bytes img/house.jpg | Bin 0 -> 40338 bytes img/icons/icon-128x128.png | Bin 0 -> 3294 bytes img/icons/icon-144x144.png | Bin 0 -> 3880 bytes img/icons/icon-152x152.png | Bin 0 -> 4095 bytes img/icons/icon-192x192.png | Bin 0 -> 5360 bytes img/icons/icon-384x384.png | Bin 0 -> 12856 bytes img/icons/icon-512x512.png | Bin 0 -> 13977 bytes img/icons/icon-72x72.png | Bin 0 -> 1678 bytes img/icons/icon-96x96.png | Bin 0 -> 2394 bytes img/wolf.jpg | Bin 0 -> 22993 bytes index.html | 206 ++++++++++++++++ src/Game.ts | 227 ++++++++++++++++++ src/entities/Character.ts | 225 ++++++++++++++++++ src/entities/Clock.ts | 33 +++ src/entities/Dice.ts | 11 + src/entities/Enemy.ts | 32 +++ src/entities/Event.ts | 87 +++++++ src/entities/Item.ts | 90 +++++++ src/entities/Status.ts | 17 ++ src/enums/Difficulties.ts | 8 + src/enums/GameStates.ts | 13 ++ src/enums/Skills.ts | 6 + src/hello.ts | 1 - src/index.html | 11 - src/index.ts | 4 + src/localization/en-us.json | 16 ++ src/localization/pt-br.json | 16 ++ src/managers/AudioManager.ts | 115 +++++++++ src/managers/BagManager.ts | 190 +++++++++++++++ src/managers/CharacterManager.ts | 132 +++++++++++ src/managers/DialogManager.ts | 12 + src/managers/DiceManager.ts | 138 +++++++++++ src/managers/EventManager.ts | 136 +++++++++++ src/managers/GameOverManager.ts | 27 +++ src/managers/ItemPickerManager.ts | 169 ++++++++++++++ src/managers/LocalizationManager.ts | 29 +++ src/managers/LogManager.ts | 142 +++++++++++ src/managers/MapManager.ts | 12 + src/managers/RipManager.ts | 53 +++++ src/managers/SkillCheckManager.ts | 196 ++++++++++++++++ src/managers/SkillUpManager.ts | 12 + src/managers/StateManager.ts | 71 ++++++ src/managers/TravelManager.ts | 291 +++++++++++++++++++++++ src/seeds/AfflictionSeeds.ts | 28 +++ src/seeds/EnemySeeds.ts | 56 +++++ src/seeds/EventSeeds.ts | 289 +++++++++++++++++++++++ src/seeds/ItemSeeds.ts | 49 ++++ 55 files changed, 3726 insertions(+), 13 deletions(-) create mode 100644 css/normalize.css create mode 100644 css/style.css create mode 100644 img/characters/girl.jpg create mode 100644 img/characters/kid.jpg create mode 100644 img/characters/man.jpg create mode 100644 img/characters/woman.jpg create mode 100644 img/forest.jpg create mode 100644 img/house.jpg create mode 100644 img/icons/icon-128x128.png create mode 100644 img/icons/icon-144x144.png create mode 100644 img/icons/icon-152x152.png create mode 100644 img/icons/icon-192x192.png create mode 100644 img/icons/icon-384x384.png create mode 100644 img/icons/icon-512x512.png create mode 100644 img/icons/icon-72x72.png create mode 100644 img/icons/icon-96x96.png create mode 100644 img/wolf.jpg create mode 100644 index.html create mode 100644 src/Game.ts create mode 100644 src/entities/Character.ts create mode 100644 src/entities/Clock.ts create mode 100644 src/entities/Dice.ts create mode 100644 src/entities/Enemy.ts create mode 100644 src/entities/Event.ts create mode 100644 src/entities/Item.ts create mode 100644 src/entities/Status.ts create mode 100644 src/enums/Difficulties.ts create mode 100644 src/enums/GameStates.ts create mode 100644 src/enums/Skills.ts delete mode 100644 src/hello.ts delete mode 100644 src/index.html create mode 100644 src/index.ts create mode 100644 src/localization/en-us.json create mode 100644 src/localization/pt-br.json create mode 100644 src/managers/AudioManager.ts create mode 100644 src/managers/BagManager.ts create mode 100644 src/managers/CharacterManager.ts create mode 100644 src/managers/DialogManager.ts create mode 100644 src/managers/DiceManager.ts create mode 100644 src/managers/EventManager.ts create mode 100644 src/managers/GameOverManager.ts create mode 100644 src/managers/ItemPickerManager.ts create mode 100644 src/managers/LocalizationManager.ts create mode 100644 src/managers/LogManager.ts create mode 100644 src/managers/MapManager.ts create mode 100644 src/managers/RipManager.ts create mode 100644 src/managers/SkillCheckManager.ts create mode 100644 src/managers/SkillUpManager.ts create mode 100644 src/managers/StateManager.ts create mode 100644 src/managers/TravelManager.ts create mode 100644 src/seeds/AfflictionSeeds.ts create mode 100644 src/seeds/EnemySeeds.ts create mode 100644 src/seeds/EventSeeds.ts create mode 100644 src/seeds/ItemSeeds.ts diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml index 88c79e6..618d22c 100644 --- a/.github/workflows/deploy.yml +++ b/.github/workflows/deploy.yml @@ -41,7 +41,7 @@ jobs: # Constrói o projeto usando Parcel - name: Build project with Parcel - run: npx parcel build src/index.html --public-url ./ + run: npx parcel build index.html --public-url ./ # Faz upload dos artefatos para serem usados no job de deploy - name: Upload artifact diff --git a/css/normalize.css b/css/normalize.css new file mode 100644 index 0000000..b6eb821 --- /dev/null +++ b/css/normalize.css @@ -0,0 +1,349 @@ +/*! normalize.css v8.0.1 | MIT License | github.com/necolas/normalize.css */ + +/* Document + ========================================================================== */ + +/** + * 1. Correct the line height in all browsers. + * 2. Prevent adjustments of font size after orientation changes in iOS. + */ + + html { + line-height: 1.15; /* 1 */ + -webkit-text-size-adjust: 100%; /* 2 */ +} + +/* Sections + ========================================================================== */ + +/** + * Remove the margin in all browsers. + */ + +body { + margin: 0; +} + +/** + * Render the `main` element consistently in IE. + */ + +main { + display: block; +} + +/** + * Correct the font size and margin on `h1` elements within `section` and + * `article` contexts in Chrome, Firefox, and Safari. + */ + +h1 { + font-size: 2em; + margin: 0.67em 0; +} + +/* Grouping content + ========================================================================== */ + +/** + * 1. Add the correct box sizing in Firefox. + * 2. Show the overflow in Edge and IE. + */ + +hr { + box-sizing: content-box; /* 1 */ + height: 0; /* 1 */ + overflow: visible; /* 2 */ +} + +/** + * 1. Correct the inheritance and scaling of font size in all browsers. + * 2. Correct the odd `em` font sizing in all browsers. + */ + +pre { + font-family: monospace, monospace; /* 1 */ + font-size: 1em; /* 2 */ +} + +/* Text-level semantics + ========================================================================== */ + +/** + * Remove the gray background on active links in IE 10. + */ + +a { + background-color: transparent; +} + +/** + * 1. Remove the bottom border in Chrome 57- + * 2. Add the correct text decoration in Chrome, Edge, IE, Opera, and Safari. + */ + +abbr[title] { + border-bottom: none; /* 1 */ + text-decoration: underline; /* 2 */ + text-decoration: underline dotted; /* 2 */ +} + +/** + * Add the correct font weight in Chrome, Edge, and Safari. + */ + +b, +strong { + font-weight: bolder; +} + +/** + * 1. Correct the inheritance and scaling of font size in all browsers. + * 2. Correct the odd `em` font sizing in all browsers. + */ + +code, +kbd, +samp { + font-family: monospace, monospace; /* 1 */ + font-size: 1em; /* 2 */ +} + +/** + * Add the correct font size in all browsers. + */ + +small { + font-size: 80%; +} + +/** + * Prevent `sub` and `sup` elements from affecting the line height in + * all browsers. + */ + +sub, +sup { + font-size: 75%; + line-height: 0; + position: relative; + vertical-align: baseline; +} + +sub { + bottom: -0.25em; +} + +sup { + top: -0.5em; +} + +/* Embedded content + ========================================================================== */ + +/** + * Remove the border on images inside links in IE 10. + */ + +img { + border-style: none; +} + +/* Forms + ========================================================================== */ + +/** + * 1. Change the font styles in all browsers. + * 2. Remove the margin in Firefox and Safari. + */ + +button, +input, +optgroup, +select, +textarea { + font-family: inherit; /* 1 */ + font-size: 100%; /* 1 */ + line-height: 1.15; /* 1 */ + margin: 0; /* 2 */ +} + +/** + * Show the overflow in IE. + * 1. Show the overflow in Edge. + */ + +button, +input { /* 1 */ + overflow: visible; +} + +/** + * Remove the inheritance of text transform in Edge, Firefox, and IE. + * 1. Remove the inheritance of text transform in Firefox. + */ + +button, +select { /* 1 */ + text-transform: none; +} + +/** + * Correct the inability to style clickable types in iOS and Safari. + */ + +button, +[type="button"], +[type="reset"], +[type="submit"] { + -webkit-appearance: button; +} + +/** + * Remove the inner border and padding in Firefox. + */ + +button::-moz-focus-inner, +[type="button"]::-moz-focus-inner, +[type="reset"]::-moz-focus-inner, +[type="submit"]::-moz-focus-inner { + border-style: none; + padding: 0; +} + +/** + * Restore the focus styles unset by the previous rule. + */ + +button:-moz-focusring, +[type="button"]:-moz-focusring, +[type="reset"]:-moz-focusring, +[type="submit"]:-moz-focusring { + outline: 1px dotted ButtonText; +} + +/** + * Correct the padding in Firefox. + */ + +fieldset { + padding: 0.35em 0.75em 0.625em; +} + +/** + * 1. Correct the text wrapping in Edge and IE. + * 2. Correct the color inheritance from `fieldset` elements in IE. + * 3. Remove the padding so developers are not caught out when they zero out + * `fieldset` elements in all browsers. + */ + +legend { + box-sizing: border-box; /* 1 */ + color: inherit; /* 2 */ + display: table; /* 1 */ + max-width: 100%; /* 1 */ + padding: 0; /* 3 */ + white-space: normal; /* 1 */ +} + +/** + * Add the correct vertical alignment in Chrome, Firefox, and Opera. + */ + +progress { + vertical-align: baseline; +} + +/** + * Remove the default vertical scrollbar in IE 10+. + */ + +textarea { + overflow: auto; +} + +/** + * 1. Add the correct box sizing in IE 10. + * 2. Remove the padding in IE 10. + */ + +[type="checkbox"], +[type="radio"] { + box-sizing: border-box; /* 1 */ + padding: 0; /* 2 */ +} + +/** + * Correct the cursor style of increment and decrement buttons in Chrome. + */ + +[type="number"]::-webkit-inner-spin-button, +[type="number"]::-webkit-outer-spin-button { + height: auto; +} + +/** + * 1. Correct the odd appearance in Chrome and Safari. + * 2. Correct the outline style in Safari. + */ + +[type="search"] { + -webkit-appearance: textfield; /* 1 */ + outline-offset: -2px; /* 2 */ +} + +/** + * Remove the inner padding in Chrome and Safari on macOS. + */ + +[type="search"]::-webkit-search-decoration { + -webkit-appearance: none; +} + +/** + * 1. Correct the inability to style clickable types in iOS and Safari. + * 2. Change font properties to `inherit` in Safari. + */ + +::-webkit-file-upload-button { + -webkit-appearance: button; /* 1 */ + font: inherit; /* 2 */ +} + +/* Interactive + ========================================================================== */ + +/* + * Add the correct display in Edge, IE 10+, and Firefox. + */ + +details { + display: block; +} + +/* + * Add the correct display in all browsers. + */ + +summary { + display: list-item; +} + +/* Misc + ========================================================================== */ + +/** + * Add the correct display in IE 10+. + */ + +template { + display: none; +} + +/** + * Add the correct display in IE 10. + */ + +[hidden] { + display: none; +} \ No newline at end of file diff --git a/css/style.css b/css/style.css new file mode 100644 index 0000000..b87130f --- /dev/null +++ b/css/style.css @@ -0,0 +1,238 @@ +html, body { + font-family: Verdana, Geneva, Tahoma, sans-serif; + font-size: 0.8em; + margin: auto; + padding: 0; + justify-content: center; + align-items: center; + background-color: black; +} + +h1 { + margin: 0; +} + +h2 { + margin: 5%; +} + +#container { + color: #ffffff; + padding: 0.7em; + max-width: 300px; + max-height: 750px; + margin: auto; + background-color: #000000; + display: flex; + flex-direction: column; + justify-content: center; + align-items: center; + position: relative; + box-shadow: 0 0 10px rgba(0, 0, 0, 0.5); /* Adiciona uma sombra para destaque */ +} + +#core { + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; + height: 100%; + width: 100%; +} + +#core > div { + display: flex; + flex-direction: column; + justify-content: space-between; + width: 100%; + height: 100%; +} + +#core > div#game-over-page { + align-items: center; + justify-content: center; +} + +#core > div#game-over-page > #game-over-message { + position: absolute; + bottom: 20px; +} + +#core > div > .page-actions { + justify-self: flex-end; +} + +#core > div > .travel-content { + display: flex; + flex-direction: column; + justify-content: space-between; + margin: 10px 0; + overflow-y: auto; +} + +#core > div > .stats-content, +#core > div > .bag-content, +#core > div > .log-content { + padding: 20px; + max-height: 400px; + overflow-y: auto; +} + +button { + position: relative; + width: 100%; + height: 40px; + color: #ffffff; + border: 2px solid #2c3e50; + border-radius: 3px; + background-color: #000000; + cursor: pointer; +} + +img#event-page-image { + width: 100%; +} + +img { + border: 2px solid #2c3e50; +} + +.photography-border { + width: 100%; + height: 300px; + padding: 10px; + padding-bottom: 30px; + border-radius: 1px; + background-color: white; +} + +.photography { + filter:sepia(100%); + border: none; +} + +button + button { + margin-top: 10px; +} + +button.loading::after { + content: ''; + position: absolute; + top: 0; + left: 0; + background-color: rgba(255, 255, 255, 0.1); + width: 100%; + height: 100%; + animation: fill 2s; +} + +p { + margin: 10px 0; +} + +@keyframes fill { + from { + width: 0; + } + to { + width: 100%; + } +} + +.line { + text-decoration: line-through; +} + +button:disabled { + color: #2c3e50; +} + +.green-color { + color: green; +} + +.red-color { + color: red; +} + +.yellow-color { + color: yellow; +} + +.green-color-border { + color: #27ae60; +} + +.red-color-border { + color: #c0392b; +} + +.yellow-color-border { + color:#f1c40f; +} + +.character-atributes-box { + display: inline-block; margin-top: 8px; position: absolute; padding-left: 10px; +} + +.character-content { + position: relative; + height: 7.5em; +} + +.character-afflictions-field { + color: #e74c3c; +} + +.bag-item { + height: 6em; +} + +button { + height: 3.5em; +} + +#log-list-result { + height: 10em; +} + +#log-list-status-change { + height: 9em; +} + +.fade-in { + animation: fadeIn ease 5s; + -webkit-animation: fadeIn ease 5s; + -moz-animation: fadeIn ease 5s; + -o-animation: fadeIn ease 5s; + -ms-animation: fadeIn ease 5s; +} +@keyframes fadeIn { + 0% {opacity:0;} + 100% {opacity:1;} +} + +@-moz-keyframes fadeIn { + 0% {opacity:0;} + 100% {opacity:1;} +} + +@-webkit-keyframes fadeIn { + 0% {opacity:0;} + 100% {opacity:1;} +} + +@-o-keyframes fadeIn { + 0% {opacity:0;} + 100% {opacity:1;} +} + +@-ms-keyframes fadeIn { + 0% {opacity:0;} + 100% {opacity:1;} +} + +.character-name-field { + padding: 0.3em; + font-size: larger; +} \ No newline at end of file diff --git a/img/characters/girl.jpg b/img/characters/girl.jpg new file mode 100644 index 0000000000000000000000000000000000000000..058ec92f9f5c84f4c578d6d62d7269b224753af7 GIT binary patch literal 3188 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 KR{9mjee+L8rP& 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 literal 0 HcmV?d00001 diff --git a/img/characters/man.jpg b/img/characters/man.jpg new file mode 100644 index 0000000000000000000000000000000000000000..7089fe3c69d5e4a03103276b2f7bc32a900cc450 GIT binary patch literal 3474 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 literal 0 HcmV?d00001 diff --git a/img/forest.jpg b/img/forest.jpg new file mode 100644 index 0000000000000000000000000000000000000000..39b556523e3b2cb355d112ccf58e53baaa82fca3 GIT binary patch literal 58550 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 PkMqB%{{XTd?d$*9T{slm literal 0 HcmV?d00001 diff --git a/img/house.jpg b/img/house.jpg new file mode 100644 index 0000000000000000000000000000000000000000..3f3d1b36e50a3eb63653a9779d62c07127b1efe5 GIT binary patch literal 40338 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 literal 0 HcmV?d00001 diff --git a/img/icons/icon-144x144.png b/img/icons/icon-144x144.png new file mode 100644 index 0000000000000000000000000000000000000000..faa393a7994aa6b7d88343d5437c88420d05bf93 GIT binary patch literal 3880 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 IO4T~@KO|FGH~;_u literal 0 HcmV?d00001 diff --git a/img/icons/icon-152x152.png b/img/icons/icon-152x152.png new file mode 100644 index 0000000000000000000000000000000000000000..2d619953ccd75096f32acb2d00c1b7b768921da3 GIT binary patch literal 4095 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 literal 0 HcmV?d00001 diff --git a/img/icons/icon-192x192.png b/img/icons/icon-192x192.png new file mode 100644 index 0000000000000000000000000000000000000000..15704d13ca1c1cb3fe63b9b0f1f8557dcabb1146 GIT binary patch literal 5360 zcmeHrWnWZZ*fk;s)1JWHLAt4NnLk|og%}`Q*kZx(DyK7KFy1PqZ7`kKb z^L&Em1KjtEbI#r`&TsF1?Q5-Ttt(PnQ;86t79RrxgHT0T{sZvs{(lcHCh%VAywk?O zAa7EUfB(@d6Pf8ft+BI))>5ENOtAWvkyt8gr`P9XDNr7rR!qUFV8yKx@(q!fP%3Xk z!1N){PR2&SHrq+CCF$G8y(^=;TdBFau04=#PRH2ZvRU@*-bJ`aCRF3Db#=~m{%-MV zhe?4X7xROBNgz4Nn^y{Od}Wd!|4XN6|0gr$pP-k>1qv?x_W7qR+s&tcxRj!)`F*dC zkqdQZ$QqNM+k@Y2_eQfeT&{u9N}Ffbd~Zwr-^oI?dGO8Y&ebw>>^H+G>)=+LG{YmK z&1j}~O*jjq442AfU$Z09fDD8j$I(GX5v-4_uC;^p7&RC9g zT&QMw7WW|CWMRZo+tETD`@cgo*n+izi7PhaFz9hFCm>-}fh`F8Px9N0o6PKN|J(C_ zzZO;GWm?>J{=_r)@1&Udqn2Ch>xI~OYC6#b_cwbvyH7)w+r6Qr#+|$A5OGh`a;^2y zK~-0FANujm`SN5;8m&IiVDbAKFu0#C)m1_A{JTFi2QiAdtpA)KRk&yCJ zuZ-tYEz8Rc(>7Rx{S+JLiZyA|vfI$(!`+CT^yBr`@L{?C!>ypru$b#6JS(?1oXB~l zb;e)NVV=+T%K(40ncoG)+Bs@P0@}YFrqrn#!!l7SoIGDhC0=aLp?2kD8>Uv(9dDj=#^vi~;8$Hx=(^$+|vrEFs5oOae}a z{Y6OC!$vq`G&c~YIN0H$H+i4U_w%%!7ONxaj_b`R8}?@CjMXF%Vgf3jaU3R}rAEgN z0?SHAwqT7`d3DjUPQN>tqOf^423WVl=R$xgLJ9?>>hh`ZmuWs)i%TGfxR6qU=0tpw zo5c4jr^dWS^&CMj=@onk1SB%#hCQ6smbB*>_kKQKRWoJW@pd84T6Y2T zxo*m<8)S)lMC2R?qRh$+s#br<;qauz6DQUEXCk3PzQeAbO5E_Cry@@dSbrpS!UUj; zPnLB0-+bRoQViaw{?gCWld7whfG&iVq*_QuA- zI89rH7{^7eU7$b$WeQk-TeB{#jii)*IG>VfwdpKT__^7I&v}wA43Yd`@%qYh%`b)N z_m`lzLx?5iHM-|-NYu;C=Bmub$`$GZrZhy;aK1!i(fvbDu8&F_NkVs@d-TUK9zAwK z_eN{NdZ;7%^BeW^?F~$GM^~uE2On_=~Z!TK)vI&If!n8m)@K$OOO9HvkBKD1A zYQ>Rs;e3(bJP67DpA;Tmz}>3<8SW0oCJ+$cO6hmJNYKa)8p8-nGLItcf@qzlw2 zGJJvKPYd$BUTlCc|H)$xJe=a-dY&>+`QGtsWeBISO81j+_+;>u{~)Gy`3c^ZYzC5Wg(B@`-E- z&lk2nt3l{maWPO4$J@7rYllOjdX**%@=U2~*M(@Z?=+WxCzzcE?~c0G{FX)#`>4f+ zsOd=I*jA#;qcwE*QzH5LK2a}s%E;25$GW-5zKE}V(KMD^q-x+}4#j$TnGpW`0#366 z<@nu^45b)W`zaQ(wE(o=ILAz&P)rB-aAj@nuQ@s+J^f3?P%n`*vd$F&`YJKUA%MwK z{i)6duHnE3I^+G^{JFzNJ`(_b9rSThjTdZplbr}Ms5B|6=G0o5tuQ9Dyy;j6cn_ZS ztH&9e3T`y*cRI-45yfAd#ATpJp#<;}jZl;-2vJnu^m!S%(l)mT#S>sNhOBo7;hE?F zaT>|0j@Ti>`kF#n?Z`kwx%a?~{EhXJ3UoqxXnkCQp6i+w)T+lw8l!iDXTTMen zMMX1;rn}4V&=`iCCppocB^1~+*wpq+0%*_26W;&cwuo;vh?pg4BK_{+mmz!~?_-mC zx)3MQ+i8gUC>L{+wjvM!{SmqbuO(R63kwW_ShLhhBSdRw-x@c*6mxmCq1f>rpJYE% z!js24Jbdbx*a@WSbH{klL#=U>(`s1CAnO``P8#>u`d(?^N`&R4+_rJw+l}u#4ZAj~ zOBHDUkPR&vOV3M?@N~-fPL{;JY+n%gAK#MS!E8mEyT~^M;j1cc2iH8)yqso_6D7!O zc@0`YYE>c$QsbGUldZyq+4GV3zmuRuM8yggUlYuMEr%v|;{4n_C$!Fb$Ob#Hd$v}- zh{7tt`)qdwz!&1JPw&q*XS{@njYyZi)rRJelnEx0)58yboxV4|mqVxQd>U3NY+I}+ zjr~=mz0Z>p4JRW+w^?^ZRJ9X0Uu6oxmiFw$q2DpkZh)!)YKpmZes&Ak*zit^WutQh zpfQz4wP^b;@Q9NO-<6HJco^d#z^f4Ac;&Og{^RHn(HvgrF;vGX72mR#SbMzHiMr9- zJgtkYHDubU010xWCFhu{&h21b2i;qQ_3^Y_;2BvB`01x6AiK>|Ce-{=o9n z!?i9nPzl?&NEIc)2&@7{SjY=%VlWxRdAl9Dr-{jlh^?=$2li`OC>y)GKUa0+wCxrS zS306EnW$|rbb@R%N(STcv1*;ljoO=A2I218t8yrbUbd!g$P`zvG)e}g-K@c0KRWN0 zIV{v#|4EFbo3C^?PZ5;hh{I+M$q;cgdc3~@fY=5osfg3mlIiJ>anE92Ehh-<#!x4# zC)D!sD-vm~*baoM&Pr&bn?JiL(2X%OqeOYJDYn@sDVq1-N{v<_tjkZJPDp}Q%tCfK*EY{h^ zm4>Rm(fbKkrR4n_{mF(!P{Inv{97ax+`eab9RKNJqoBUy># zLM^Ku!LzRf-$s&`$tnv~lLSO}(pqIO-6V8Xf@wH&ojY%yb%n4hn|INw-;-asn!-!v zi%eVHBYmi%!19hS=?mTw8~mon6Y0f|&z330wv|ZDSEOq|HR+ZZAU9hz=JU&NOc=bO06cTHzb~B{RRpuLzb^^D^xp zi2OLv7f=RN^6{WGu13{~RtX;$BI2?x!*VmNs}&Ds9e>TkP0rl2%ifs#z>6yPySv15 z-yk~;Xd63Da>a(P-(DOvxopT@4VDAwq8ZaG(f)xI+rL#U4nx{4&jJ^h!edHXA8NRs zi}Re?oR`n;l|znV-R9lpVU%$vkOD_tXiyyqx`vBc(01MsiFIiL=n6#5TJU=M%2=Jt z5)tS+7v0DIO)mTetLD|&Y`C|TcC^{#^m`Y}=?zzXAzbzwHne za{oKt!+^QrCK)T(b-4&Z{Wb*9|4UcPIPh7H|E;}rJ~jeF5Q9>pa>tXP#A&6Kfi=F( z`(bVbfckxx>hH;B(P11$U*a+=0DL3fE>BhWSK69*b!|swLPIipU#oWimu_^;7I!v{ zf_~=nKD9dH-_ZMdv2Q(A1*eZAz8VynvKq@LsqVjJwgw7fV=LTxD4FEBLL!p|aOM(D znZUn$8twZtWf>jvb0Zm|amN0$<)2{B;ZJJ5?Tlnx)s2A&Y+qG|M&$x^`0`#7Y*uao z*oivRYWp1TU79X>;)hgS2|!3*TGkJx@S*`@*veZ9tWkq+=`f-L9ilSxB{_(*0>4=K z4oMYr&C8*Cqa}F)uR!cYW8=yma&5ZYU!NFO1rQS$*Tq54L4RTl5C0W5Z=`_tr%Pef zIz+``nYvN1C|U<pdH8Y+@L#F!b|V!48vxOqUX%RU%as@-nni6 zU23Y5T9@=hnUICV(FpeCyTV$e@T|M-_#+1fUf%a*3)@e^odr4vWaT%{O057kK>lQW z=Vmou4Mz3beyX(sd#prFl2Mu=Jf7)yl3n`h zRwy7OkT_2@=?%OFp0uj~emWIA$``I*J(=4Wu}Z>6&ZR$m*e>F{ zibNxO(cv6k1OG9>n#HL^NhQOeH{uQR+I{;yD8B7>f0~FGW4ydxnK_ z-sq0%GeT2542f$B7~q*IGwG{RopQO&fI{*}!-HD$9!z!X7+PVYCa0KB0!RMFHp8i4 zk-|@cvdPT>tu=s7Kn<|*upGZPOYhSsb6XgpCxGwl>AZtQ48|-O&GYNL4_C$Cv=upi z+;tFET(o5I%4t4}3v&pjAqbPdCH*U#=Pn3TAH$;scox|R9QX1`6<#-B$iJVkc0^Z) z7?c~5c+OVOARpmzw#$B3E2%hnLZ0mo-Th#J4p9h}$=vzBseB%W3b4;o10-essW0R- zzt;EWv`8akF&WP!^~Nw1kL$rpEBIX_f1bLU+K}CT#P;<}zE5B{g_T|mohaM;^$;2w zkz^N~-XVw9G17v9f@pdP7+{3F@TK1}M*(rO`0lzSW>n`oNL}N?u9<1r27CKCAz;Lk z6VLr)vkSOgf}is8ncl<@W;m8nFSe!NpCm3NnXseY4B`!eX#j?7_beniOZiGfd0L34 zk~Z^$nI~*W{@t@B=dKtrDP;#$yZH35`U`AS*y;Qs*?Oi^m=LZrJvlx8WB?vyT(?rx;JB~-e*yF2&2-#_D>`OU}< z!_3Ov&pqckPaMLO6=kr{$_+8Saopo>Ev$Pjs0Y;ua%e`U~ID;rBY z{+6~lrq*&oF^&JVT+a`7y_C1s?@4L5d;9yJ?{+dv<_=dn#8_EN#QhLPgfAkTr)2ln z615DQyr10TqU@HM<+LL6^jX!5d}}{Ic|ZM*@>&ZbM$o~>mMpZJueT+qpg6py5nkvC z!FjhYrHXtsUpE}j6#eYP|Lb=&6>1G5L6*A0*?M28dT|cyaWI~VfO;J*Z-=wvvBsq2 z>-C{duY_M2CNeW2J{g%6|1=_#%gJ(E=S)Z*I_^WK<7H;}Ejzk0>o(NqL9f|)?=o|x z-Roh#&f2dMM~=|!&(GJ)%(5_nG|kn&!3YW82h#+8Wy38sIshmTj-`=8Y25J3cJ72bV-p(01-kes!DIZEIDxa;P#Lk)DY$fW& z=hJ#nLQX?{uaj^Ox69qJOrPhw+p|wd4t&sM1qB6R_siW1gBI%I+eDin*c;b3sZKlp zveOauli|>mv57;U#tWWi2u;iy?3M&Qu3v?G@Iq<3>!X%$Ctv=iOdVa&$wY}? zBI=WxBNu5`o35>`1)&p`sN|w}zT}Z5r2dJwN%YTlszf84m{U>HJ+>}5I9M`o%q41C zfDry_>^Jf)7Y&U>j^N5zhp5h(kRu;ke6zo2bc3P zmG`BXx3Hif84>A#humNSyWaKbT94fk8Vg?<1w96Z5;*YopJc=XzJ?Gp3IDllDbzi3 z`M%Cr=v+--xkhYMt;LvRv(egvk7!5%NhH6DmLTTdlHdxT)WYzBoa{VWr+2w17lDbF^4|?>Dy{{WRI&UEj(SVO2ei2E2gG2ZpR`FVh-w}!Bjrz^W)u= ziZ3SVo8I2u$ub?M{mJ5RB6igaPtR<<2D=h28i)M3V*NIEjm&07Mn+M$bLl)$cinm$ z0h4Z|CsRCju84z~N+U-mOg^CRM5qP@@ z$mpK;dxgRK7rSG*6NO4Av(=vl;}{$q9BxilIyNLpQ+;1|Zgnz!9!e;-7|XGpuSLVb z38A$7;9J)Udw#f;?C^fd(uZ%(??8_sCkea$?72#8GK=WwK|gE=2R(znlFJL3%E#IKMLh}VZOyi07Os<}% zg28B$04m7&>>>{TtpCFq5q)^IzE#c&67iY2bUP*+K&pI#ZGUwfa9q1r;;Zj`WV4`wOOI-tMkNokHVpzGc^*F(LV{ zk54B)GRnogc-|F89qrEf&vHo|2AIE7*DO4ug=j)@q8i!L-t_ZQr~aHY08%WWVY= z@7n-fsZhxccFu1_>I%Jglt(5TYyN8O^F4@9DleDlb~5Ok`_+j3&pp^1S+nb-g+gB9 zn$(Z`EFtEWn}S_s=cZtTv;mEKX8PW8tr+vib_C!Pme zO_jV9b{+i-iE#lpHarp+Tj%w3H4}<yu$gjr=(?V$T+USq8!k36R-x=Z5%kPgQ zm$F{WSgNz0u~EnboznW{FPZIKXi^9c)iEzin(KP9c}6lHG-KW!fSDYc-!Bb+e}5uQ z!^1Bokfx)dXvgh8pb6yL;6A1cPW?EC$v3_eKSf8zAR;Kk(LeA<##p4JSRDLKk?ZG5g6 zv!;*y(kPLmQ(^BhFfbPCtdp*Fxxf5Tp1Id%;^!xcChU&%`Sp4D2a8$(zytBQGpAzJ ze0v!#lm#}ZEWk7q%gVOvl!;1r@TQ`dh~3=&!z1ZJ4Y|Z`dk+ec^F1Gq8tS4+$G*az zpJ1;zJzxW77(JR3(paJH#e zo4(VBy!qaKvD$^W2(j|s8)pz!yUYR?vwm!>JKx5Gm)5<_q?k5auE%!~V%UjHcGO2~ zB%MBHVPzbS?YK2WsQv&@Y?|%RKs{nR;I(CsWuRnCShiFMa6(pf<>zph z!?E1on}hL3ZQqHI_#wxj$F0T)SHmcUTx@QRm$=RU^>(-%Z5uS$8O*{fAoXufCp&}* zeLL=qh?!h9fdRIZot=H3#y0qt8N(}3GlSnjGPyadmoz894sLijjsfEsuK;HU+E}lc zEGh_)jwJso1+WFr`C7~Qx5ofnaeKv{Z+pTYZcrBc00r_dl6XQI)2x9e(9zPm-yCBV zOGbR!Vs#z*n8G75b5-xIO!R01M%Z^^&M3<8A6-oQ(6gVT*`twlRIHgel*0UsjQyq7 zUB>omiELWIKbzSt{dqcVR%^3lAjDZR0#4h3uNw`Bsb5LH$NAO8&i0S;1zKuX(%2+3 z5iDoSm^Xv*W-Y9TA%c{XkHeOk|}-Y@2Hoe(lbO70qeT+ z$#{l-JIzizibe0UC4(M|QEZ%hL-BYklI0y4KBEs-pic)>yua;fJ*z8M#0B-}k+<`w$MZ60;C;gE%4fy7Tw z#bM?+T(Wh0+K~G`(vdzqkkwko2e*>eq89cBRshhdWSL#Ns?${I^hZ?{SD>!wrILs& z`lxh!8&0s=J-8#=;^0UykEhmKzso1GHeoHS#Y(7pS)f;nFP6Og=j%m_d&;xARHnoI z@0EH>1qTpuCb6tJIQXe6>kyD4nYSr!#HxM;?gr@y~{-ZK(L z6(xoO1ZmXhxbd;WX|Z` z52J`n1uxxFIDm{n}x@_d6lmyxyx9&nN8$+21b=>`>!Q3AzoXHs zx4AAbZcInRXCz=&?(Bb4CoL^a{Y#2E1+Z?mmFVbbE#6#Nl|Mjh0JIwPE?3EY-}jwR z4dwy3tmQ<3z@@kH2!OUa4|;&Ug#T1wb%1JhTWExjJAz{ZQq*G!U8w&%;esKz-0?-l z5Ss6Rg}8B7Vc15NVYxe+-T1@63$;$(k38-bILlbhJI!{>uiC`h`3CGY&=paAYB-{T z_QEPHukM~6pW8Lmo(W4^dVo)pMJg78X0Hd2>r*$$#MzD7ThEQ05uG=NlQ`*al{R!+ z1DFx9;Vg@xAN@k|4{x4#$LKCmKZ{u+CCXLUk^+vNbLgAhPSA71^f841AO8~rhtzY? zlumCspd2^ZaqWJox`2)?HGfSkf^YDh#fPzeEc^^+k5n)wVE#CV=zLLW-!8WQp5hnT zo0`&&=j%5)(jpsksszv!aUegip5&cWpxdWkXYrS!o|MSyB z?(6b|lOQ5uO2cV-`fr5bJW@rsIN2GNDiZc_S+!`h7ezI#s30m2W7*EYB^fNgZ zfDDND9j|mmAAre%zW*a8rV1cNpKTEXTb8|gonpG+-&8&s^f0lzs~Mxj2HnABI?P;9 z0`rAVx2J1xP-wgTS~sZMl95{Juoo8jpn{vcu(14P!~hprgvMDTWSpzMd+NTs*ojR{ z0)rTE_U8q1N!^~?vtW$cacIXAuluD%ZHAZ@semK>dRcc629>a@J($iAl%+o?1qe7Q zVBpj$MNtUEtZa>Bu5ew;6pA`+V{X28Gx51ToNH|4C&AHGoy!DrmrK%loQPc)Xc(e) z^y-n@vyH3q6XM2xph_m!7$#Y`+8Vr{?)OV*h1m}{89xsEd`)*>uf<7xCJZKa?JTlj z74$^Nd?ds6tS$KK>1{0SUL`UgAt|ZlNu7dt&0hVjb*C>p{Bkq7A_-c;b!^+iaf@iu z_4C8Y!3{yM>a4a2VWSI@yxojsFg)LC?-s%HLB}&V)-J(IAs6T4oM7$mzFArGO@yGw zgdElbKWW_Kgeuw^Y2XqPPPKb^94sO7g%={jtM+5Z6lTdo1a%wiBDI&A3u>)ruoXE4 z1?T%|dg2&9bRX@Cg`B*h*t3Ux{*iu--;2ll(7EY*669eqQ4skC6^G*&;83DT!Or8^ z0#xo%FNNyOM<^SpAy?n*-Uh#rIS`W>CA)27U`NBHEFr6+DGB8MR`s52yx?Q$yq_T1 zI!>r0XnX6Yr|xL6=g<>t1}TAI8$g0U(}i&Kd=eikE9-v8^?1Di-QZ}yUB_tY|CbdI z9AD4bShe+H&_A^1eI(iZ@plqR_m@9Qt>*wW0(5t33^z{&%(%;J8Jf}H8dL?}@y5f& zBmB=ox*;4|RmKuM?D(s-f09o4{qi+~?~6E&2V&_^u_^3pp=S8R0Q#$pW{4iVc$0vBZZMMN^6Zo5Q-Ue=wF^kGDt5CT74F4Oe}Z zU1t`!A1NGMS~CdcI?c|-%``qm7*s=O7#L2@?&XwE#uH8)6wMTW`cH3@*}!*2Os~*z z*FC@LE&nBuEv9;7JU2TD}Mbs(rZydGSPD~|gC z30|X4%*1=X<=xc;irSam=SCVBMd=I95^m`wFp6pN+uY>;E-dc_L-!7JzLv#!PlUty zbX7thFFPhv=5N+B=)Jne?Dgd~55R$heV#oJnp7nvyFu{}C9>TBd!*c;WqK3mLn7Li|0BC|@jvJ&Dp&3L1ojK?vus(P(qXT>oJ1wW6h8)D?*C?C9kEHf%C#D6Fx zFpyuJA8Eke7mX&*0HdV*lbr7;(f4dAx{dX9ii$Y8$qIvop{RG?PL^MCe^CG>p2V)V z-J?N0I#KZPU^F|Rret_xM%lY37|V;<2qPoZBmw&fL;E(qpFv#L`u!$zoKNv;7YpL4 z1qHpD=qqCv)4u42PB9uRXN!Q}c`%qbWukaWr2IL;<>9Z95>h%FwnTJgz?kEfJk|hB z7ID7}jf%RypyV`cCBerJcpRG`R>lwfx7c#XVz6sa z!a>JJ5dGN`u9x+HGKft8uk_PT!z@gcRIA$lo5~h1KbD)epf@2< zV?I(*aXNVc%%YPH*mAZX`)tgh+_lfc!b;lDqmnXcO`En9u2yrTR9NMo;DXXm;>q0R z_56E0`S1eTfU#5G%qjmcMLKk39c-oRyztmc)Jl-pwVtU6L$dUKK}7WBT#)GXQi(?C zVVfzi*T5%<7xQ^$)hPKH!9yoxPmAo)A9U15=1;+tA4JmRw4+%XsLag6!()8$#TKbL zI#Ixa_l4}QvA77h?1LX{T8ejfKnBuJ{7!49aSWC(8S=SZ@* z3Wi!VeMRcUFK8vyF+ck0u9;5?Gc!Y;#nLenPI`LX@{FI$ZsZ(~7}qW`h2Rm)=3Z0J zz95jf+H_?O<|b4XJq`a4OA^w?|1grmt72QKd26~f)E#tx-Jc|VVcGjr z7V#FkC;%W~)NY=ZBQKrcv_I%FU1QlD>0lRC57_xbpR zHP4<}9NV@i@c2j0JiQydDyqD#{>zYm_@t!8cGaQYyD-0QEOK57G4IyY6>;J^uVM2R z@tad~T(auawKz$Myna0O+R_3-)ydcOL~@QVxsR0BcHRG#|GM!rLy~Qwc@MxLno3O6 z<;AKoe1wzjee|<~AVQvwZ zo9X5pJ)fWPTwfE(`O=`{QtXg`)kbHWN*cP+C!Y*@1Dk^XbUgn1;K7*y*Sc<gy3$Of-^kWFxlVTz^WpLb+43u?C< zpB1#c{sxXXG=Y!A($t?T6a7Ad)q82_Syd$_-=quk=h#BHeE`_=+*WDt zg-)YSm&2wIr@N+>P|#I_P?~}w0UOK6V)`XP&sGxwZra~R>Tj(|n3TDe+k7t+0PEHM zl$xSWms8EN-HRW@l$6Kj&xw~O>1`rj5(3v$bpl%Wua1@YhK_?VS2BF(g<;>;pe|p()MGJ{U z?8ts0m^7HDvm^W7m&2$%LfGhUX=1|?ykT@n+P|_Q-zz_RB2IHuh2b2(ONC&w zpdwOts4*I@=M0_Ey#=3Nul|*)$`*f;?Ls{;glHfBbIt~P0^kxk49Et*_#q%?g@x{& zRss89cZYEY!iSmUj_OFyKll})yyTtColO$G+eZa@R{j##~b1Ll=KKc}57$ZrXTcPvo zy;oc0Vb9)#^p!FMv_6mo|8zoMo*AMtR&EBcB`G{!15Ha{mBq zMC+*%!YXuT>htl;k3i79lQsEHNG;q2TE;TER?~sQ{sZt?f4tJU%*>@r1I~1IcuI_? zIZ)LXKolls#!lAS%#EL-q#+9CR7|`>F>}yHwHyHHfE62I&F5*3B4VoIczFSUvzjn6);Px^#_jpmo{v;-ilU|cs3?El(C zh9s{6(|hXZe4*A7pPZb00Ik4+OvBf4bHKzQoJF|%_SQ9Cndr^_?pnMeVhEI39Gn<^ zvj92t4LJ8Yk<(k-d7c=Fn04Z%^GXm6Q29Knm}PzncRrZ@Yo95+HES5calanUNk)0i zQWyO_-}wvZE>IuphFG+4dy~cZ2@7lApHTU=uU_J}mR@aPFezp5gt2C4`@kMn;+L2O z`&9E}@t!nEaQy=Vky<$Xq_cq3Xmh{%?>`0ElS!i^mT3bR8o<4`77J|Ls6?n&%>(dY z$GJM@2dvW2OD-v?kVm*&Q$)J-0+r<<4MtxhBv z=+U8-Uk|416O2I0)fY}&in^9-rt~{GJN-W+SQFo@5#&YH`Hb7tw7|7*UYJ^QRdC7X zE(Ak4c-nMh?lflG?PA;Q&4;{5QHpJoSRmds=jt>uYSMsdIjbs~;sx}W?9YTa2X?U= zQ5Z2~Ax6cTO$3Azoi>daVmJ?)x>&(m8q1SaCQ_f1OqJ639lH0XN`OhX;&ro>B@s}f zS#FhNKAgaUzu5BZvijRb=i&OF&`HsFu5arq(7~6NUW>W=^y;T!4SHm^;=piqhCa#Un)v-#@*g&+}OMRz$d+hU^wV*j4c9Y7or(Bpb*Vo#UxFa}sW z@IowxgZy}{r~hQ+eC+DE-HcZ<)@a-Xf;W~x8>Z(P2b|HqiFi#A`T02wBJhySl{(VM znkXnluv^FC>67SkQKAdxWd?Ns8921a#s{X3ag8PX^FH7K^CwcjsF4(Hgi1kF#{){Q z!JSgnb2jsrc{)*6RaMo0zG5#m$QVwP(WgNh0k3<%GE|+Km33&O+sNanuD4g(YYn*Z z#p=azSamWn1x3E-ZkV}~uLjx!-wLhVSVgQVl<|Kfuo~|%BxMs4r1Ge$4 z8kN(kEBf?P!X<2>en2{x-!k?Z7DBH!pJy zCws9!*Y4Faa>8sqS>%^CnU@`N_#c;^$fR=!NNIT*1i#PAY`eNieDgI3owpo5YZ@p7(!rk}M(H1c`60igBIl4(`tv$^wk&lVb>N13i#<&D%PYh{T81F{V&8tk~p{HWyC%S9@5Qde@03~%aNDZht> zIXIz|Fub)}oDD&U4Qa+&w+IUlmx8_K%m$Pb7}Db~_RFQxSRuA7@hgq+As{xN#PWM+ z;3b{+w&g{DM=31^?FwvIb|24 zkIj$2LDchjx+c}2=O2A#8>a_QNmN4FuZp(pwBw(JwRCE5t^>O3BUmoDfJwTYZ_d@* zrnY-7(ybFfKd>3Kdx8mFD7c}eNq`h<2?R!>o3kA_D6&J55}y^Eq_Ec?5FC5M_^v;0 z==iojUF&5IOOM;Cc&#D|x*YDp3|tWmz5<^#IO+LvLaB|N9kdA};(ijRkv9m!Y}?`K z^*f&LORwJmujz{2mHYQZ3(1P0HrdScDC36DF0ZWk<01WkDeg~_b_-<*<~10JGFj3% z&6lyl%SMUGuF@R;fPloeYQfZbH5uI9!rl)@d|ot=>9P}gb46L%0RXj2Lo%ryXZ_^$ z3D6d}w)_3kjBXPVkPJ1vd;iflfG0wyKZ0~aLjasnD%DlKebr(uk|J4YwAIb&b8Iz& z)hTej7d*m1USnZI*>v`oZ{=3=RZcL-{8ELVVNWYCAk^!jL0U!1CTrb6!IrT^(&sKO zx3zMl(Vh;;xj;}|IV2HNme!Pq>KKf*1W zx>Z543%2LTj_@tPITu^QeBO_)@%m_G1}(fm(zGWURp>VbpyH$uMDae|A5>z^Fni=E zXGF}a7o#z$Xt+PZ;yW|5yfx-0pd!J0bDxQ^ zH9Nx6z8aHe7}6A{3A;JYR+)g6jO}+c`eZy7$~E~cX#!6D*Tt!!g_p#V3h3V=mrWZD z6)?tCwOb3(GX=l0&Jl4TIl|%3pav9?9QHN{H-Nh3LiAz)vC&~-gDg?)V57qZCO1Z7 zh1u_u)v(y=e<^Q=%`A8a6Rl{Vqvi)d`CM!cucdzY@ygQiU*lKNyG{Ha-L92Yl%DSH zKg0smND}8;EVCVsTi=~H3!c>iZk9cigwmo=>wydZZP|?pJWo*q?MC}G*z*Z&`il!I zh^c@v92pj-BIdVp%DpBto^9i9{4WTDIEG}Si_Ifjf_5y^BnuA@4+xy!6OMXF#t7|u zu!V0TV0_nmry0WYg(Cgkj3lu`N)9hH#>Z&@<6d;<)P4ifjrAcox>&EF;;M;Y7c*V( z>l<}9=T8eeN_h_Nf--_PO>#h=Spx%l?ZfIO-X0P%au?3m-BFX%)vnOK)kl%Pbt(d$ zx2IrmM_}qg14AiPZZAf}Dt}TOVikMY*c^g6a;9|}jw>PjR&3|0YrfYAy(&_RZ+WbCmBP5_G%*K@O~1Zg_!n&q?im%c>bJOj)ZtmI{v>nc z6tr`*_PO;3JR-_ZCU@4|ehi{l+O-yVri!x+3Zv^(C9B7WI&p=F2qulJ8lQotOk~xN zw2N-c1&QQa>uKqLjSdKngBti)Yl^tYw>o^Tj+1{+U+lVqdG)?S1LxTV@g;c}yVY|3 zhoq~68FF5J;drOQj0g&WanEzsS5zorJm>~^Q{2gr4HP>W9dB)rS4(k*jsp%|2c`&k zmm~(}&ikz4Tc>Zk8GyRHDW&`X)t=>%C}2J3w6$B8z=Hrg*ldY+1vo$J`GJ3{*&d)2Fs0t+deO#AK>qhC~G; ze~efT+C{@&F*6(oQEZy)O$kD^OX|&uSYtW>li~$|1Wu!6c@jHFMsen^_otp$Ef5Qd z-}*IXXp}MM{s`G{_u<~<#Y77eYny)aUYBDs_x9M&@NJSEA31ACAioPUz3%~K^>Dw) zfrAwo?2Li2cr+pDxVhkI#165Gekt_hapD@Wu?EiOZz3PmP^mf?=ke?}mHjuDDXa{X zf78K>g`Q0eqh!n|_wv>yEjo($c;4OtqUH*p#atO!{?5#|-1-~ApZw6q< zG%IHvahl@FPhF@~+L_RGG$i@`w~llyl$7EssFm=u+=a&CI$|#DqmF8Um7l!+iZD6C@eZ!hN41g1?(kl@Mdu9Q!IHMiPXZ>73 zmjzZ?XqK;ea%`{>(m)vFIz$r?5KzZK;Pt0JvKMT5gq?Q%P=-{$jx)dH$$RIbF`{R` z2NWJK)$c)MKj2hu!B!$-IZj_lh;Psg(pr2*g+|Z2ny-B_fCRK>LbK6mvzV(LVcGT=#&# z=0qh!*lpQ$BNA*>0KTQC!x(&f)Ue_$Rj9Fj<$g~_xigwA1#*8+;N%n)6@eIiUiZKU z`vYu)3T81`gy;Fz-!nYmZdZ0!5g73O9e_LO0MG9EBTeB`>uEPeRY_(tS!NiEp2(Z!-UduMO(Pr!jLcqiMy3()Tf?f$R zGJXMKnW*Cg5#-3il*#}T*4Rh!lm`J7>#;Ew<08*D`cJ4B!tY}apP6%8qK-rcmiJr& zDTF9gs#%`mt@aZp$Z3O6M@ z+C55EBw)qhs2q_2R#4l|huDDBCrQNqZ7h%oqL#5gw16H0sW*b#X&w;-*D91Lag$7Kr2(1=^Wwrqo$2n7kO?PX z@&CyzEKKncGdHB;of@T>H-+lHhNXmrgfd4+NeSwFw4#4|$*uWgxG<>;TvHbgd?^av z&YXFsMxZJhDuIWuznJ$U$(uD;antDAUgF)&Q6c>gaw>$Mqz3I>d6#5{Xh)gM>0U{0 zNbyFUXQD>lIqk}*o3{Ny3=|dprz#q>+ z&Y%4j%%)ldfk;_BdGx?AAbE8v@Cys><-Vr`1E1C_!FPGrs9xsP?Ebuc^Va2;Hw65W zZ!o>5;<_tk^YeDZd7H-}7eA%9^0fYKfn0i&a8Kxxni`ebja$xPt5Jmy%g<}uNJ~VK zPjUn|LN|gF2?fE<&VBpa;Y`!(O}=hZ221`rxO@XvV@k-i2=E}Pmmm-;KJZ8v)gX`; z-_JuJVpk|2khixWkRQ5K5XiO2|NW=`9l`&q;QzT1u){^>{?iSC_Wh|-)$Rx+5;@jR z@k-2dwrwaEiX!ihw!UScuNP7YxU2mwYXsZS()F2F{UgV9zX%A5fm_MKXsTelfaKnE zm{a$_nw9SSpTEsvT3T8?bIG#ac8kBheqfWNt9N)ITIat}{1FwBa=JI^&MIs+T<5z| z5=BFmXWNrtUhO6fT^PEh%GnN6ZaQ_;`79byDPTXc$wChR%PG%`bHiIpzH- z^4HbW)E*?zp8pZXq~tJEE*nUkZwftrB^0en1yLBuH^@a7*L5$l`iM~(U%LURt*zDm zCQ*9$2AqKVRGnlAQAQo|!$uk(Qclw#h4onfQ~QICk}5rLdodC2_qA8_QB@x^WYYwk zl=E<&^)`L*{yIaUm+@kQbd^US2N9f>IA_Yip}F6z4o< z-o#5}{ceEhet^7KTD3n)ll6WJ`4O1&AdE&TbGqEVpG($@=jYiI+|a#q=T5!<24npd z6_4)jZojn&7C(Od+mQeAW@l%G&8uF+>2ApAt?!Jb6jLks{~P%3&==lgIaTL-yuWce zW)m&xIG6=K#A@O3U{!r#VIey^8;?9LIte8mY-OrPrz!+`b$;XwXX3VO3JHAhpc$NW ztDp=?Eti(&x-v4Pn|)T8nOEmx{fnl5lhqr0Ym>OP$&fvt9a!Y+!|kR0l~K{v{+CZ1 zHe2XzZEcsE@Nei@-@<=XWO&i>iHf?fj+OQ#2v64gyL)nQUPFXzwIfc5i6m0U2o8O@ zFGW6AGmWU83r+jD>htb>rQ4L5>%KFlF$dHP1}{s--AS|<{H{vNd5)HmO z%)tLUc$dK9N71$AwVq563f7FUgFEY@pAhyZbqGaW3*c?Ny=B~-@EhmFZ42| zdw;y7gcX`ti#wEkzvgj}MJ-7td`pq_evGPg9u>K2%kVf&DO4v}CWcr)v?=n<`IcR} zP3K3naZ&ebax^nIW^lTU#|AAi+@}Yf;4+}2mid%yeiWGxMl}{p-uUu%QRP zb2l7@aca8(#YRV*$C-efrfRvPSsV`)W{tAR@xf*v)qturle&ogke%!@yeh> zM-eD84u)78D^*pstUPDmmt2Z8toK`!-)Pt#)Dm@_s92U9wb-88K#ndBmLjt>i#=6N zPsq#yvbXL`H8w5b3u$wQ|3Om~#^tEpRmnb;2cSM;L#1=|G9QBrQ3^TmAj+>!Hy(cv z=ZZXC;7to5Cb>67oTeD$>L~92@m4}TBc%i#bs-GmmFT72rxlL3(30^6Q$J=}!|U0I zD~akK*eY#%t{!`9M&dvLAMaDdWZ$#tFxke>F0(Xp`TcH5AHfdVZSfw+JTZvC!BTy_)o%Am=`YpWTX`Ax0d^Wf$ z$1h0>#u9e$3Wpf&aL2WY%4GUTAz!!4T(97k?edCW4OWy#hhn88pE2G}`gvI!o-Ui9nQXAe!^Na&H^x-mrN{8(*BdJ#-}YDEP1qU@_}Gi@)|EB4 zih#Pcx!kcB`MN!dwLe8(`lKC#J5HH-hTUN^nbAsg^%lhpTnaLQe9Q(G7774A zm8;M;k5b5S*VE~g!PO~CMG6&}RSL}XOq5uwj=iBvkegUGLvac-y8rdc9^5W3bH^*K zQ!#!iK(JL?F#6whBSi?9a|v!S+&BqbwN>QrI$vjBL~M_)nVDR` z=3lFBNcb-XND@7^`6A4Sq=xz>#TIleKF3#+HP+zhv|4O-~p%GJ=Ty_tnajej^ z{72+V%{%@<84dqcB&MQH4&!*OKXS_NwJ}4f4BoC!)${f%lqSn~W}r?_ny*me1}&)e zHe&Oaf_DCS0u+q%<&Wz+03|e8<7xBo$t#2%@tEb+pA2R&rJVqXjAb7nx>#TCa(-Z! z7FqQ=6q>3m`MTs`)(rzy#BGz%} zMDh?WQ)oeAKp>7{qv_bKdqlYnjiIEus8Lhf_$Tv$N}>pSSc_d5Nn&TQ1mq$&HK+ha z?OQNW<%&lAQ>jYW_%JN{p`oGSy13mH78cj(2HBlv-EJM|j`)wT$`=3@FdOhl!oY%`x#>4NsI<_T^J?x$G$HM^>zvhO6k%JTH z%Yq{h7o?|r48j>XC7zd>{aTx>7B#PO8O(YjcP>n{e30Bs%WcTCGU1FVLSUPWyxMWi zVYFx?1^gBm10yZkL0hd%%EMM#7`*Q&98X^N|BTn>-u!Bx+SS!{SdBWC<~1MPSfR(2 zP8Aplh8DpPp}r|{zJ_mKw|f`9@lOykC8nJorcJ<1k6Suc_?_uf)0x&JRDbG$$^3m>grkVleL_?r= z<7sxH7tyK^$}L>Hig{D!^cPZk;qGPDCt# zus0`Jik$8fH{(U3o~ueiUDrV+TNEY7d;l!WNoKY)qw`3}2?G$M_{6TT-0}MT=Rf24 z4GL*n zQxsGa{@ua4UKyErQargJf^k>e8Bhi6tj~)HUAjlOz#Ejdn#TC7i z#qUIuVU2~QrQrHB@y}%ejP>*JB2M$kurNpxFMnNpZ*QuUv%4WnGgRjok@@(8rVRd; zR)Ww4|32H6D<4a8(wNvJ_@@w?tt? zj1sB)`T5lwt)e|Zs^|7FL?W@ce!cEBD-*X8>1YKLY*_392<_9gfR-r0I6@9)!q-kc zetx=n#=&9jc`(d06m?{PneJuwB@8nI#PB%{ zvwhY7L2FH}C?i65jZDm8>;-$XTb|jEswS>Fl^5%16JW`ug+Z`um8Kjf;zX_SeqzjQ^A`%U=TK~R#I|yzrKLs7JkAL#3`$tBt_mhJ=u86z%KCV&&gqeu=#LY+lIu- z!SFu2vyTL^el}9jX*lmvJ#(k`#0WSjv{CXasLb5=GD(Mlbnv(%Q{ER)lEHhc0DkN| zSO|Uc8&7M}v;EDRLTZo8j@_DHQ3F-+UKwIUd>z~t+qgI3Tn1*0Pgf`xlsC`(M)>pK-THap;l*}8w%AMuE`YAA~ z4wU{{a%^mDOH0ex_)W5*yoIk)?MR>+d*xyjHyDdRs9aFSjo{jcN0`@N4R4^1mUGF+ z`}i8qOenRM_0i7q7Hc|=9Id0yKa;v@mD=@pzLbih$7SjbIEB6>X=qwDV4J-_#y9mQ zi;%rGrW+Ap+ySDsF;x%y@NT=F*3jPPef}qTzg3e;r+BB~w3D4&%f=wz<-vAqy``KC3&+L%gD*{WHIw zaC(N(GF2rk4EOcNoLQv<2+LMwWDYJX|qD;Q3auMi6xEzWZa0yNe8?8usp)Eo#n!9C76U; zQ9Erkc|yrAb6OhbCrcb&A?s`1DqqVF25GpVbvaeFOwC=KM;KV;*u7a^;jB2aDWh*#ShI>g#OPWkDTLOZ`*3VTl6wPmt zlSdd6TC9H79!VmRfV^8;Sa1yaB(~prQ?j#Pao@rU{ZrC?`i~uzA9215s8AY%%i;Q5 zjU#O4-{U&JgQMb53XwU92Mrq(eEmkC_0-P-%f`A&V+TI73I}WNx4EEZZ@;+FGiPy^ z;y;A&a5%g%sB%(vv}vNuHcHc$Y##1OBTXfng|VRcw6)emO-)TmlIOVAm#SFryE4M0 zu=!%ok4A9_+%(~EDUHdlmhZz47duN9R@P2@_9g1-DL-?sr7h4~K%vrQD=<2arRY{0 zu_(Hf0XZ4e${-!E>$W7#FyLy}rdBe!8WmTxHP>k_F6VO* znk3bWMW;iR$vz#N#Q@)dBC1go&MR%<^#8LJg&?&A{mnpQ&omH_`pR`jpMP0^{*zM1 zsWUD#(?~U)k~es{8&^g#(ZdnFaT1Rs(r%+)CWc?fgL{LF+~0~k;^>MVKmVT4pq-mr zQBhG+BKDJbz&B$J)eE=^MRyV>^CJrC&U@(iW9!zg2EP_D z`3?ieDH(sNxauVvD`qg%`o?5<^4;J4gBE(xEb|K4LR)Thb`YCKgOy!|eaG(kbR_v` zYbyKIt5+H+rx%{$n?l*8-IANRx#ay^fQ2*;?KvAvR~p%Jq2DBy54PrXPUbVBM2>P% zN4c7?kG~!R2Vo5s5itQzoCxn)`Y2fpF3*>5!P6PAf~_c0fDGj=>m0<6t)D_r%L!36 zZll(d zb6CXzb&}^64v)M7rub#QOM_mV5LwyNjSbdSl( zXa-Oo*$@a3NTRi&K~7eaC7-^++UGom@GuK00mzY^s>P+77Mknx zOSW%C%6TPeI(#8*>;8NqB8*#IQPz6<_?ev=wWzDqe~w`2Yg94~+qI8But^E-9n7ze zmp2vvig`Jo@?UdY*>6AuUSGwZJZ{)FvFm@dlSBw1&Yt|95rLcu=ar&rv(t}6vxpPD z&hajW@T2a|5A3YnM<_5_vuW((Prd~;HPfmL^AtMSMp$XqUY?DWnVA4qHQ>X{e*6X3 z{3$knP%^cdec;1S{pDUr`@F5pF6DB5W#-_`n>S0HVN;X?d3u=zNVWOz$oU*qSYgyh8UOh%)r<>|u)t|2Zwot-Z94O13kC?BF|)TI!}#|`lD=M)^)v&( zKbdX}MlYc|V6NyUyWQW$#TKR(78bg?>7EE+LUHGNoHecjtxh-@=>Jvs7^A3F9*AM8 zw7_%Y*dPBvmR`=|@V^=wP{98#B$am>(yez?4}K;eN3YIUVvlL+wle zfP|(FzdTXt4B`f|AmuB6&~yTdwpE}6x}b>j`^z=o^9IrWuY210)2Rxcw}vxeSIc_J zP*o9)dMtAO>wka)zj8Qreg9rhcQ+%q5=Z?#OifL|QeR4eB0!52pmNCgX@7j^(s({D zujm&?1B;;XBUfL2*zA(+mqMqh22TF3v?`U6w&zc`xKBNSZ$hDPWtB{a6L{MQ;Bo+k z!JZtM0m6(yAm&8XS^&j&@zzldZH!>%6+qvw5B(0x6u7st{W@-9&KYLyJI$|Q!?{gI z1hgvudvpFYJD2nVt(*3%q72mV}2+E{Nsq#SIz)&^wu3~ z&%Y3m`1wsK^ayx4r1CWKFSPV3;PpO>r+Jzw;IB7lTD$P?e1~3qE71fL5?+5sZJOds zyU(oJ7D0jm+Me^V=^w|*s=qnKX%`R{Hj=Ll+9d#@E^1oV)+M~bmM|5( z(RkM38#Qx`yUaiYvZGEk;jzGdJ}&*D9-qXhXJYcj0_s+~aCNQpov7bnff4$^{^j*q z;Ea8k24uNI`0uLoHy#{{_e1>RPy7$~%6Z!Czi9==+n0LkI z)jGll;oL|EeBnHxcNO2?9s?n+3|z_#wWu7O6el>zLk-_EPd9Q3LWaHNA@!Jar8$r) zpmx!S!wL`0FdBw}kx&Rf_t;d8=NvdOr+!)l*Aj=w(_p1#(8AqXo*;9&*|(_gnh(ZF zY81o-NbIAcEra)!_|NJCm%e|0LMr7PYm-^~Oih1Pf%x0r&VlkZ;yeKM7l?L3u^0_tiXv~nCiH} z`ueB7mGitCz6nlV$&>WHq-SQv_J$+UzL!!bU<I-PtOUOE6r3L%^wA39l+7dX+yKzc4#kM11};Q{2NY`54Ttj(X;0Jtak>URQ_g!)d8QKR1 z=eF8wI|u?XZ_{C(Pmt&+`zn&%=O{t>_bd+Tj(=`geHO(vKlpKG4wV^Bw1Q|yM+abF^^4z}UB2~{m6gTunm?>|885?<*WCGG?4)KUoF)2 zVDYTSjXnfaLlFd|f1~CFaeVC_&l45&b2}H^E~xq+#>2j6F03!extd~)eCSmD# z(xP+>LD2EbWo5BKAfQ3{-$zyhveBOKsXRBV9Ga$d-91mUe&#K^%X*?Q*T$b(@fXi_ zRz}@HQU=C;L59;vibBe%DC$tFTRqtlnA6~n!Bb{4wf`Cb3CK6%V}!4+U4Lqk7=4pQ zQxK4o?zIaEC0a4YkK`1=wI)eAC$!{LR2cdqmj|;?+%N!K2+tBbf2(ued-fV@?)&6+ zJOK1|O&MS?yG*YQL6wF5bJEjqbc>%Siv#`d8#uU@;5u1#*l2#Vw^k26{`!8QS!H(@ z9%PyKnyT886@!ggx<;SL=W^D7usg0ErpVw z2f{vCbXv?HFwB9nA~;jX`K{)$fhY(!)ZN>=>xpJN;B&pKRCMb>^WQmRIN?uidELv> z*?icS-um4Q{ApVRbNomo8+R^ONI*p&^ z*PQ;1fD}*j)S_O?)uFD{L{SJqzcD~B+VF`ePEaHNoOD&Y37HPr?v2am(6rXq$2R9! zB}uswcN=~Vd{>Q%iuzoQ{=N69#)v`+gB_wlNh z;g5*MV1BNEL3dnZBz^fYWSl7qaFNYkX}nB+OvblMv$b=tyT9LE1@_Z^rGgWF&Hr5! zeVQHJSj9ifUzy(e4OF#!kh9raVi;lA;%lYbbOb^E&AT zA^Lu==9bg9ZPfDPXanw}oLwHC%5}`}!?1S{O8PvEz@_e~Hd5DrFk51IG`dvzUHC2{ zwe(<=`;w7QlHiZ4{pJke>JJ0k-(2Sn&oI+xm^5fot+AJ>Tn0tSjRoL`bh+0C`Pttu zDj?uRtTY4PGA`vW6%g9{QmL+tn^Xm20PA+PE?d>vD787?zt{CyZU>wCbZH<-W;H2U z&X-WTl-h%g>f_%WErvTA@bG%y63-mQ?7T0kW_~F^F1c5bEyp-n>AW=W>MFA0=<%u7 zd*OaU@q-=7&nZN7D*+U^Fh{att)2pY&iY zBUG0~xX-Mpacpf9B|}|G2*puq$4Aa2@>Nd#Fq5-8k_}0@ppDWkNgCp_2@EAj#oD4JGH&zlE(^d3t(cEE^jp{=B<% z+eN_sJ!9)aPvS95`Xp^B4W+bjee6G43MpR)03WF?ErGo4`_5aZiA}4T=BLEM+=t@; z4wH`LrOfv?tvmt}RA_T2uj>-($C8cdP9EvjeO8uR_t`nDp889vqQ0J+h9r~(v(I&2 zF@f3YNC%H?&l<`7?#tjj3mRVBMdhwAhD)9=;l8zo$DRT%TguDsC3E}dM&@wFH){mF z4Jozn%etRH6l|%DL+4Ug`fhcWv$ybrzVn*?5%Mp-=2OtVU=xxwcLR^6;#O6b=(gvv znnWZ>sJJ|<{-6Rv=Q^&>nC+&a(lmwiyJzbP7wydNu?Zdo@tcHNA0z$W!(b0wc<{H@ z)hX^i{i3^^IvSH+tYX)S(R5eY-TkBWzW2^LgzmrRkUVZOu#M~ojuL50Rv*|7bC#x^ zTk86{QrTC0c_gCWl2B6C4%&%%|&%D1bp1jkkxKS(9U}pq^@Sq(BCJe35 z>X;|kfa;UiewosM-1)8U%J$D{y>o9~$K^QcS5xXAutG8gj5-51>5?~(S1Es>FTeq6 zdrQuVzpS=7dcUx^2uOiA{AM|px^i%tWr2mo>tJ)nGW6DH>~ZMJsVg}F7QhQ{%^BFX zjkVD3G1^WH8Xv7yl1opVI27UII=Tm!G zQe66+YqM>-7t8HYuHp*b)r*~vQp!^{rBOA)u|%DA$U{e9 z`!DysaLxsbLbtyYIFykMU?fi`G#{>MEU+-0hgZ3n+TBafK?tX}QtQuBH%P_wHs7GX zD)h7Pf_DIscWxhQm$r_S=mcZ5;_LFI`Rmh~!BTST_t|IBx9@u|J`GpAhIZ7F=At7? zgf#*~Z!#qEJyb(Z;gET~MI4pr)$!_WZuSZMEqCheu~M7(wm#>g)^gX>{q8lasXMFb zU`(u+r+S)_S++omuce{kJgF@QDXgrFprq#&9~UMx_I|miiu$r1634g%?tH=>cKgJV z1;k+_c7<`w8%xWW#Lv7?V_z>MP0Nf?2cMAQp+Emp|8o4RSLc{U?~EW1qfZZ_fyR>` z=LZIo245_6h{mGG^75p(W_~zV5Z?lOf$8sm?lUcK2t<3S2N?|+yWFx~S=?!(Z(C){ z`kcP8r<_%6Sthz7gnwGDII_Hx1sB!W&7_GZ_zDZRKE;!8FDGF(n zGh2@JW{VIptKbV04<-zQWiZ^yLx*>81>T;igPSwIUXocHIsX!#>3qGfral0|h}|A3 zL;_0is=Niy<74mPJiR@49Ds2!o#lZ58I!!3yUNNl;F;m6OLJ%B-wcqm3Lbw|vgPkI z&FL0BGky1(w)Q~UJAH7sIV?-n0eGg!kf-7GEi)v(%22j;G+O5Q&;M|XEiDf@8wrLV zxfIQ8_Ml3KZ8MDqA1S*9A8JfRfr3QOFHfsWnsWPr4iJPDD(4aMkxUMw>%cx9DYa22|D5TX_OK(vx{(~| zqlv=iiy@CSu}Cto6aINbJ17^-ygT*gbh)r(WCVfQMP$wIJ$nI_U}LZL1TGG5^PQZITa;;3gHEbJ8t0l`1#l{v=aCoKBFw>azwX4(&s%% zsAZXtNl(q6tP~Kh0&vI|63xh)@w|W0^13_akI{v&KhvpSzn+I5R9cIx4`m?9Akzm) z@TTQyq7n{RgS(;fX#%>IzdZ-i9CqR?-o{b zgw*v+ynV~YwtRdK#jdDr((X{z<70;vIHK~DlnX5b4!+_+c%?^a_d8(rT1>QJ`J zhLN19crcxLk|b7t`U_!Slia*>?y^aFQO1x{+mPIFU4Sr-s|v2`;Y&-t~f)8do0(aJl773dWD>jCU{E$qpm8U2>9lq!y*c$`m{KjoU)+Z-bYwH=1rzry?Z53=F zeQ92*6lr|!eSh4EoLPeQ_Vy0Hcs*mH%x}$XmvJpO+_XCCXh&j$o)lofJA8Mq(4$AV z8ia$LU1@pyTh%}q#=|Vn^8LwPe#+r)3$V7prbSQzMn>lGtzeb3qZoCr!!9T?0~!ie zHdewA9uF1}4+7QFV6@W!Duzk>LDq5_*?-m`jbgRK&evHph)3EyQgVdsuaF+U^$rMBtmHytaK@XEKm9L zuphwYPrDV6`RV7L#T{TL$KwPh@B8~AsQ0Fc2J5=e@XTkWjojbF>k z?&GGxz8sn$P>x$iV`p85`Jdq&DqJT=ChFK2T;c3S=HJr_ppB?gq;Grz*!HpZ-wD2W zAn&}(&JZanVJr!jnYOh=8?S89CxO>HRE)f=$EYEY*J1yA*W-Whdi?KQkN@X)J^nv< heJbyi83H*yonv)7`Qv>}6*M;FiJH!%;)hnR{tx%7O?m(T literal 0 HcmV?d00001 diff --git a/img/icons/icon-72x72.png b/img/icons/icon-72x72.png new file mode 100644 index 0000000000000000000000000000000000000000..bc7cff3c685f2b4b6cbb4137795c946566d1d574 GIT binary patch literal 1678 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 literal 0 HcmV?d00001 diff --git a/img/wolf.jpg b/img/wolf.jpg new file mode 100644 index 0000000000000000000000000000000000000000..cc986608d8aa9c079015c9ae5eff7f088e3452fc GIT binary patch literal 22993 zcmV)yK$5@z*#F=F5K2Z#MgRc;0RUhCU;qIB;Q%5A5L z000310RR9100030+W+~~0RO}Q9smFV1Oov9 z0RR9100000000C71qKHJ0tg8J3jf3aO%MPA0RjXB0|o;H1O^BN1pom80|XHO1ri|! z6EQ&tB2fqwGGTFnBSMiCQlYW%Bx1qQ2^KR`;qez#R+5vHmD3p|LvqwKRac_Y|Jncu z0RaF2KLG9xFrsXVdvxoB(sdsQwZDc4iml7;%)s^{!wUeC9rxd^HE30K^!3AiO(vng z=D$z28tO9rZOwnDOeG#wx1WC4Qar6v;T3w@rU*(EQf|6%T2bh=)9LfU5z*@SlYWD2 zD7ktt)1%FN6Bb$pyuW=oHE1Jb3CbVkjDF5h@F5u0vh*i?t$ZamUa^f@b{4(H8|xu` zAMEXJ!)!OSD9h-6o8tnGC0=W_`|r_yewf}W7}>Qtd?WN2+$c!2pKq-rc`lvC{s_9@m-gv+WLP!w;7<**14rwY3cexxB?dqSv;fO2!7@ z0308SQu5g9Z?e?&T z*~f!p;QkD(jQEShuoj`x!2ZaiB&n@&*~@BJNAD}Q!n#||-voRQ&N%9<@vj*q$1Ims zLd#Vro~iD@$#Zf*JKXF|&Bz{W+m31|rQsyuejkcDT(>KTCb*QOFhm89EGRD0Fa=jd z*y?++3~wR-07bs6tBCwi;mW!xVW^REs-;H&Xh3Q#rBslvLn~W-g^v4UzUtw>uGnj- ziOU}*o%`XoSlD{+jWs{7@Hn3s9oNj(U*(OXg&-Gyg!b!vX(e1?v<2S>Q59{!<&E7N zbJpV6N!L}?6R5XLB-D34ar`l|()Rg+TQ0-P*B>kvKM!0l92=Ye02~tyJQv5gg2g1D%{4kDfn9}5VWZ9)*(@#$mNhv*$3zPkK zwa6DE$UkmAHK*|x#mMuln>33t$toz7=qG|e>cA3`DIHbTL}e;%wU`SqC!G^7nx;=I zeZ|jUP9O5l8-}geQd3DYEK*MBfU#KMgv&GA&?38%b{00hv59FZit1f9BmxuC{Q)Aw zrGY-3JK-w0qcS8h#*V;|$R*8+WU6H zhDDokc1=2FJTX_B(9XK16;v`jZZ|4iGT7V_MyuQ#*!9Kx;WxIwj64ndCnBh=Q^PrQ zNl)&yP^glcok%iBfsLe)F1rS0TeYsY488T>m$xT{J|Y#MtpZ|y_k{cjfW)@e3p zJCv%;s@&#T_LzH8LzvM4JQ(02&ZjC;$Kk ztA*+5h(1|S9(5xIjX;}Kmq{#G+-xnY>D2eI0~7CInhM;b+RKip1wbiR!X~P!HBiM} zYbiqAuYHTXz$A1ek_Ef^u0Fn)Yp97sZ-8Wl59xd-?!)`PrX_}EWEM74*B>#KbhpE{ z+v8ND(r&4@&jvy{L(_iPDJD{PKMzlyGy}{}Mfzh#8c%$DqUYpJ2m;BZ?~J5(_1~rn zSg=$HZSY)ZbnmtPTj69)n%aK2QI-BLE}@NBNLKwYn#ZPTwzVX4abN5x}v z>-NG8Nptyrm%!B!qMbVt^6iSx#<@c94s#VXT_hC-nZgR1hJq$0=R-)0uNgZ4;OuRW z7`Tros-KCom(70$Na`nfK$a;3Fm3$t0J0J_9ZCkR&imn$IIpFQs^xZcS8yaNZLSF? zU=6_r)&N)w5n@7_i#thKPsv$Tsw34KT0y8ODSe1iB-~$gZOPa*%RJU5M{AoBqo5r? zA1;_qH=0d>3ZD+fy)ucL0ixH_oRvUsWK^NQ*NZ9TVOPNnrr?N&umrKYa zTPP;Pn**|&07)jw0WGld=4PqpsGdu+GdmSxEPDag_dRcOu(`d-))sh_NRt?>9Y9wg z?xY@@*r^Ni1cQ5#jcWLxi6Uqz;m&gil9_ZWd(4AEkzk--$}MmJw^OjW!-oL)YsB6o z=Tx~yLqcUU%#bVC=v_n1Nf#$bu^?}_9l*zb_t3TDQ2EtX{B+e z$~6;pJB=V%65H6^5>H!L0d0E~aJ=>2(mo<_fl}1@UP(ukC{T2BW|y72ZVRfwwy_4z zNd)S*aMhDz)1e~Wu+dU3epmudt@OfQfByin#L1|18}2(_A0!|Xe@rT2a5r3hAh_>) z-v0pQj1kKt$==w^En(;1zWBk`?bg^64CTGM{@Ke0<$l5}ZN{gIuPqs(2Z9J5fTn)onic2)$MKpuVsS7Ct0s*sb zHw1OuSl=88nP!~zXdzpw>bcc@fFSq!k}qON``FwS;2#+AMq8Oy%Rww6oGdXyRP$x1 z63nJFL2}MbG^=B4y4$g|`!V)O;%e;oILmVEy`lY&lOw#W-d}v4ZhI}o^_Xd;RBbwq z`C`^0^mmF}DVA_|6&@a;sgg&fh8CZh)JV~WvE16qR9fWhNhbCYNaO*Of3)0%^|wor z-?qoo>x?Xc5oV2-nyhWFf4JJ)8=Ly{=rCMx#}Y>rwEWg3hzfUaF|a?F4X?NjZTe}m z+k>eZR{>=K3jUZ;a7v)IpLoQ(eT9$GM5GBt*B$= zo}-kjES+wuZ2m!E<|BKYNjQ^LEjda^Ayx}{q?%abjvj?UW@S*;C9d1uZlP=#@%M;X zj|?vpRLMgsR64jN;#ovt?|&`I0!ipXw`&$760Zzk_u6-v<79~!LWVj(OLPlwD%g&r zQMuRye0ArtPXUe(@bfUw>Rn$j;@sMN-l34*(Va0sg5|6PaVhP&>5GP{TLb!Gs%bpu z`Cu1yJ-XvfPw0PKSq?Rgh4G-LTkLyV3al%q;rab=jD=CXR|v=v#@$H2OeETX^0^(( zHjEo|{c*Ckm;2z3Vq3O0l@dhT>wIlbAWfU{o8XwL(D@n1+X^)34X=CcjJ{xyrk#Fk z+zViFTPCZP>U!Y#D|wnx?8ex%t8(gU?e<}0) z`oB8PU7Ds>lBPkCSN#|o_c>w7U1FeB7n^~=IE_1Bnw>-^ibIiu4-YY9-l6r=H zg~{Jxu-%QUb_2H86ms>D95`?9X;Qn`A5QoA1HV&)z2PQB5Q=q=NezD~bGFw5eeGa2 zTdC~LhbkweqEyTrqf7BbkLE)VW2udDK$%6t$EE7Gg_cA;yZ;RYszfuTQx~l0wru-{X*O7WWna*bTQgx;!z!oJ+)% zvgR2iNJMP0-<+t|cUbnh8(u+nHUI`ajy*W=Z#v@sBy7EX>Y7*+C8VsHepaM4^P=lK zv0zpocOb`L8b(FgRe_apeFq0+*;M}kwN_lfKnvA7RHreET$v@1vZA?QPPTLmNV{wX zD5WTqkzfdxMFm4_1%t{7AO>Nimz={o$~X^)IkHbr4OGfR zG|?b=G=65#EC2(2M#@Utt(P6g;gqy>d;yZw(SNa)jwui*3$a1lQT;FW2W&aj!M4r% z_QPdFU54cR@Yzr_9qc~1PnrGY{{X#g;CQ=+>3f)3b?^up>W)@ zTgl$|-&!!$gru6qw?BM*m0Ioc^}?m@w->)lVO6ZqfD8Ix7!`=?@r&EOG!xp)9dzK0tvVTAQNVCZu$YTHe}!v%(RRlnxLc4HMo zd6E*$H~RWvuw<0#J@+wqqJRS<7CTs8Qw}b1lxlMrlTw0}CAr1%U?j4~Co*nCARvlG9BBH#(x4RRn8N60nC12E%$QzO{i>(pA^6am)OB>agUSaHW3aaV~PPg%vBM^`0QWmzVvSYFYs*2;sTs`*FU zci#*P3(d=d1x-ZW;D9b#!^};)jmfq&K+bu4qYJA5Isw|>ZvOz`f}qrlf~o-NVxv=$ z%D&+I>_{XV++1vT4rt91EXuJ|EDNSSbxSVix}YJ(*WToGHytqHmsi0dhOd<*l5=Ev zBU+Xrh#pgYL5`8?*EZPid`~jW!!FNqrN}cJt0$-CGRqER?IlMfmLTg1A&pR(K-5=e zur?&xGvS{IW;Geg!6ie(Nl{VByfN#za8+AKHa&*NrmnpYp&kRr!~7S*lTb^V$rS=r zJjP7Mwj(Q{ViTDtRg5UnrBDKv2E%P_zldJZejQ};oUbm0IEOHV-Igf-0JBo65$5MG zAP_eSh)Fs}msggrlf@&)S(i79c&48uh1XnB2|#Bgkf|JfbdTR)Ighex3dBmQxO>CZ z6USegQY7w-UFV+CO1s|s>Hyq=e5CEzW30Rl&m_#aHinpLk{F}qLhGO_qU@}sJDoNI zs2#^^3l6TH%6zBqhMJmVxIeBKD(NM6)uXoGJY(GC{{VOVKjVuU8z{41ZS9TPV#dtZ z`D0Ss`j6+0Ihx0tPuyXuwYhR#aiY(0jV67L{{Y7t#UKsw;J$i=Hf#*_L*e*tb~w^G z9_9DKq`3!8&rxh<0e7*u{{S2r9ReTTKWq@0cf;jvyPsSa?okn?`uxrcijo+UUfRA` z`Q!-wb^{-K+OX)S6mN`tWtnkBR$<}a3{M<1siHjItz`1q!7UVSr{W^ZCG1A8RUq>o zckHE?K2el4!fYcj&IQCHO%bw;YB zNRc`LVdev!C>Q8f>$x`QPB`N1kHbC@%rpGXT@<->JIri6&1={Vj^^4&UD$mw<=2Z@ z*NA>GabNn~o#i!RDyNQ`hA63+s_Q7Q!lQjm%>2STypj#=V-U}H8#BqM`Lor-JxkI@ zS5%P57*fW>kY{pitk(rY9YjckDGsL*Fb17_XUI7{eE3H!Sq6zTzk%$DUF{*YWhj^@{y$U z7vE!XeXw;D6Xq2SOHV3^)Q@!%l|`{V)cHUlZg$+n<}k`%J*TXa%<|G(>kZj+c$?XsufbPKK5LPYwX2as2#RF z0Ub8Pm&5KXtjPGLhlys%>GQd$=I4lOqcf{8{Q5~ci0jzgb=z*S_CWTH${_I`vn87* zqev^IX=8IVbStT(EExIHAU_jG3|YwT-3O;IW;E3qbafGE3d?&en(gxa5Zh>zyKUf3>a)+G*%-=+b4$%(f6V`RYPOccd;x^jXu4_{WtX(lJM0!(9+6?;M7Yu zHc|$iKL`Mh-cWZgs61|MeOW4Gh>fEp!_?p;R)KOHp)#!1vFgP zXyA+_F|$Z68N;kdK`x<#Jn}Z8>MUIHUU!(qHAJrz6Tn=ZB_ddY08YwVQ(D*9IQn6x zHj&(zW719B62LG36W7+)*mXZ_DGUa7A$7Z0=~Yccf!AU3-{?M=I-VI1pWYah8~I2p zxGF)o2KLx>Jpd%(!71tr$3+}<3$4QyoTOvo(i=%X2sZ_Z+j32>iN_1kRphcRcD1zf zR#QoST|xi~p&F2~xV^(E4I8YAMysF!gM0B08*pZ9x#tW|T_rh^MTsJkM~KBThms&H z3KAJhsZdF?ZY<4T@dp;>S;bt_ERPIxJ4(?8xYob|*Xl_M0Vi?>=L~VlBEKEogi*W9Mu6qsHAb-IjWSG(5qjJU`eVVl%z6I+4AJHaY8c53ZOoQb zm6#Lr(9-DEG)OfWpyx^XxtOid<9RJ>6dVEwOu0!{{Ro5^}`&~v}Lv2dSO}`jZ6j{ zmR2@zHVuQ6;eAJ3C<3nG$I#(gc=?aDuzSxQbDt4XHp*X@E} zjT~&Dm~`8y!7)^|C&%!dYoGC3H>NaS!7!X`c`HA3puDnbzi2)k_MR zdK4=KIneE@QpJD_!N683Lj^z#V6zy$XYCQeo-^bVaNiU`mZa6QN|f;}B+C**$k(jS zIjRV`AyzU#j2F0OTu^>1`!`h3&s)Tt6OoGCmS-|7@XHlMDn_FxE@(4_4rFfl9h9Sz6uz}hY50?X^vVMs!&T!KLEEO9pByvCz0 zsP~Mru3)jKaL~q~kdBN+p2QyGe@kp}Bc-m*-m;T58I4UXJv7n8)ihLVEcC<+jfjXj z0_+B*xfayM4ar@p|-32a6}c!%R2s7 z!Ey2>9~jm3!ZOk!VSm>NJWm>)>(izgYv`6%@~FA_VYpH~JCo>l+Z!2eeS zw)T()UtRoI=+ra2qhABlLs#Eu|u4}2}+sVL4;zWbZVQWBw5hDvj2 z%*)Im3#%r??r&quz8?Dv@dja>{{XB$DAx&+tTeJg9IW*%F0er?+gXOI-sa>JZSmS1 zH9?ectqNtx)X=3Ie7NC=Dx^_>0;-On4=4lY@)+U|ZT|ogX!wS&_C{Y?wF^v*8z_+e z8yPGPl610_xmE)D!|!GD(4HE2wN=2mHFjFlv%y(R^x`H{Dk!;O_Z7Wjnc_s$ZycrrsKCm`FbGU=rr9qEb z5=b>E2TNFbfN#`Z+kCH&sVi2NWNE2VRU}zuU9Ww}0>h@(Hyiy3`blA$O>t5P%M*T{ zVoBHq00C{S)9tWvq0OrDrc%huWjaYg(2w0<$ZjpUQ*DT`7r-^^9Gc>SGs?EBtLx|q z-(ha2rH1|b-~$38mX1*B8rCCAeS7}^U#2p#$sF9dJglclQno5V?lC#YxMG7jSZI!a z1TQOwkDBWlEpQZSJFUsMu>J0&3^{Q(3FiDOUmXQ*Ze^^M3e1tqQ?y%LxnKcXh8y30 zwid^6dlKZC{5&qr!k!^z99hGq(n{Q>rKX0rE1ZqN1iVdeGJ~cvz=E<6G-I{tE2_mh ztE{Oajn+a~uiW+e_rVmos7+k{y?4gHw3GLLh901=f}$s@F}QyW!4yf zo(f1Mkgm7+1BWQ`_j+e-T7s)F2epR(0M85@WSNBY66D!Dl#tCR(T-S( z<4_j3APev4E$Vx32jeas;tnLCnv7-xEJrL9$2TpBH?p%UtNc5iBoSk4pEfvO#~)`7 zJ;)u~Da+=~VVEh^1S6PSma-^fWMN>(Vs;*2S&ljUaK?K{FoLRy<5Ezxj+#VzuW-ct zBmmb3rk3qeRiJuGj{o#3m?Q)b?fF5%uk$> zS+_fjQXbLX9Aw;A?(^h%PG6T#Q9t(D+KL&((zd}sltZPB^#ZBoB!U*hYWIQtk>KLY z>XR!>`j|~ls`Yf@MuJ9Lk#NQr0Nq#=I$FZ|M?uo^dlvXnPs7J9qL(nDs4$pksG_Nf zdDgkJDMkbh&X7YLu1$f*IPp)h4ijl0-6L~QG!^s98$ZNB?scq*fZoRU&QD@zzuc^QL5bt7tBECt8~ zPM|;z+Xk}qb=?G!)x4(N;t!cygR2Um1Ue4 zQ5^6tnI~!LrjB>8+^s+pM8i$NR$e~Z#81>75XRpn2Dr&b}&4EQA*7EfcZu{%MZ!jNAVeWjh-c^%JIs>Ga5-m9Wb7cHev} z6<(wDJ#T~JsBpWTuDIIKZ zVo+&s#69r5`DOQA&s%l28|p-~$INbiW41MlbZZ3f*5B9i!?g^OxU_53*zM&%310d(8DREK$TQeK&2(4!2NjFW7HP@qdUsO%!y;hw{3d(Q_A#TD=Jr z!3hA!Wnut8r%~=k${3KPpDg04I-2>RD?N2wKqQiw$cc4trGI!Ek1!=ozb%Nwo{pn1 ztBKYs6HFUsEQJ)4@oX0TM&zF7ZLnKqgu6>oHnPIT!IT?pI`tb3t!}=!2RF&+D#0~0 zF}N21FaqF=;c9V|2p8x(6w6c07X-08#GWB#RFtWi!(Q(}5-F&W>K&S*dwD=AQ(FMzNIF*RSX`}zWySRzMZ|$* zE1Xmb?$osi%+CaOX1Kgc7gH83Vnwc?vkMzvz^QWpiYqc^p@I+@gp18*Cvw4gYov?Y z$uzov1cfHT_pX(shu%`HS({?!<4*p+BiN7A8bBtJpIS>!BsxmnT{U#KeZHWMy|EAR z4<*WLp{LKY-W;Z`pDrdya|&$gnufNNsSL71B+*zBdaF2AHUyErI1j|X4>H`th+&T_ z&FJKcs%dGGbDYpb%1aJhlUlB7atUF1BAb_Ea_SdoRadi*j8y*cXW&f8#ZNLq^)Vru zon&wsRo)=#g_ME|5DJh%BYamG)=`;c8HCwZaYrQ`WjiuW1jtfI*b)dg^dS7N(+}JW zoaC8pQ?_xDOPHxcrBI@>6V#1L!0mpP-rM!WhN`zOe2^Ohn&wYq^gZ|H=5mW#aWO?98A%+-9@m_fW%4@YaRYrJ_&9- z{+%#fa&9!=YYnjdmRBndT%8Z8!g1rSv9W>i*utc=FyurvmpFAK< zLK|Cdm%cQsg=dKDFW06S9v^p;^8u>E`nEZ%+q2q3#7_qJdm-Te017ioe5*R*m?~tf z%~ij*K}H=S(@A@Ta@@l5t=$wUO(yO<=&a)YDa&bPmZLV7wpr?n&b5wZ=gM^#cMM5l zNVzAi#rFV(xO2uXDdCF9B+4_~)|e&MNIl>b2zF&lgJ4125!3^Gb&rL9*!(ZVd8H0Z zo5J)Ng!-e6T}eiL$=v|EkhTqAcJhE20n=G$7M#{7>M3-~Pbz?pu84(xL|j_H*o}qz z;pJVDU-z_m5WyipslB>p1+ZZ{zI{WjR_I^aHLxin1~ zEo*9P-|lw5({B5on0cg<9$t+@O}7`d?a+bzt_b;Wh_@DaRluBLOu5EOOw|qv!sCDWzX(+c}GWkid1Agk!r1o6S zWUT`*&&Yyz9O-B#mKJ1Ur%Nz$Rjvij;D7-J z!zIeIn5ie2mK9aisA%)h#VNt!odiHH9LkI$zgq z`r*=ouADlifDb@M7Os;_yS|klKDZ`@Vx4qr2K{^A7_G=DCsugMhCOU8hOgLF5T7rY zZ_s0ENbGrKJiw4a?SoxkZd!J~Oc?~#e7z^rx$A-{)ukT>_rMu~RZ}r_Q>OwYV-vb> z>5W{=DxEro{RSKBU}5pAZN1xYzplghW0<|MxL1Vu*CC*#;!0!{`83hbl+}Pk)4R

~Vki#7FN~rJe8r$ArXrnB`Xu2}606dDM+!YhLNG|Eh_nPUFa!Y~{L10dj zb{bV!Ew?u+2rfy%6?~+qSy~5(2P#}fpvl+1pl&~rIMHN@rRFa%9bRH1wa(*lsQ&;R zuzXbipYrpsVzwklp2-k~Mj?V(bm@RXjbtr{>!<8Tia_`%>$71i-Pm6X|y6tz{3O%yUk z4KM8%3JHm0iX}*@2(jgb>8{~Q0Nl@-(7BQ4SgIu=&gOMxmNLK{ttp>@F?6 z9|h*MbkXK_1<{OIexsEHAgd#NKy z#b*%F(&qFzwnI}O*U(Bc^i6$z?%Bs%nM&o}ocI_h!%7Q$>2gPG%_=vY#VI6V*0M(cN z_95*tyFRaocft)n@Av6(jp=Lj%(`E{>4z$*nx-_+cOO2uTP?17d33i<`{CAl=`;yZ z{{TabQ|6B;DCX*ZSS=orWDNG}h2C0FJeE7)c^Sd-=_wS;%#%Ii^rdv5* z(*S#oEVp%ko;Hq^RQVsj>y2viwW^Qc)&14)^zHXQ%WP9V(EbN!J|b`}RVG~^6{SB6 zAQnwNVAru4K>#+_D(8FY1IjNDa?cX@2Z)Cb@$N@BnCV1X__WI)TZQGyPoBVN7A(G9 z01${46DRhyd8eg#AZHBmEV{X*fI_ium$IJc;@ZGk?eKp*%c!TPS~_SNpt>z6nFU!_ z45W<%N~j@N>ULnHY72cXdgp@RHIxfYntO{0DJ5@n%N|ii)a_Db1S1fx=EGAkQpcJU zSh+R?IfU}eV2L4w6K6KkNFZExWgwRIC#}WsLd+uyjdrmCn6bTw_l^2@uqU`s_4)q*lBzkZy!KWg+?dFN$;3)LZlKdojYze>A$brzsmtWe^09X z#&%PGC?wxu{{RlSQ}*7!FD^vd{{Y=TYY}g*_}u4XN8mxZ*b;P&U55Vv=eMQ?o=n(z4!=7lOvmQZ|&C_Nl>MjdZ*mfupSZ9LoU z6UCH8bFLDeqx*Tw&17ekuOdecr01v`x+qp@0$#{weKIs#KmcHRYWkXbQ4pQuXxp0v=;umoe6}4y*jV(ny>Yf_o5h-}9Ozvn zr6h9Dg$%oHqv1k(g%-KJuwvI`@a1ySh-5IzM=E&ROrqbvW2N+i+y?l13*j8Ha~q4y z9V1}ix&x_hEvW_mTW`MIZHd*;Jc#h9x_=N*5BH>9gl(>TLJ;%lO#yR?Y>my&U%Ns?Q&ixZsp7{By+Drccjsljbp|-Qq_|-F6kXuA&NmQyXP0G3CV zPKAmkU%ZEgGa&>ijFkk9Wj3=n2~c=ToACB~#GC`iS&+~28QP8vhc%v=C(Q(t#<9r` zmQgCRNp|?p;rW883~#t8IGcyKhyIQ;4l1S0b85Vn9QElMkjF@2M>NgKRb{=M74%(K z&wVO9qAi+xRdAmJXL+Venq+y@wHZZJnPjEiNqHib(bM~;=t$BxVxq$p-xPawaW!_j zejdqbXy9XHsSA0PNg!RC;GH3Q1hk5NBsLZHL&hFBc(0w-?CcaDi9x!TC$0T2Z`198yny}rk;G?Knpe+mq?t>Of! zk}oMyw|yY`8*C3^dSh{!K{~wBPS7k$ty0Ug#HUE+JXbp_b!D(1*nnS5`$_5da9Pnqp?P><^SRhW=0m>^HyD4Wdb@ zoar_o*p8}q?m8Zr_)AV@5*Tc{g}`o}xLO!RT#fEfOXdZPYK4N@+ux`FpXG^14rT36 z5@xk@bF3*c1gTa0BE(-qNVYKo0sPh@Rfx65+(pcSCZw#PY7k{$)zs0kjwEiRLU~Q#Gy!D|`IN>IV2PlUM%$R*(Mx6@Skj+=H#{{x~TqDkcgc zO<&`Uy~d`V+}K%um@W+fs=udx*v(Wbsu^~+1V@lU@!P@G@6FQ6B!*f4n3vg z=6u#1!;d&ahWNs0d9Y0-b2T+g#m3T0DzFas1c@10t_dU!ICji<$A|J4;oRGTxCe&# zcQVNqReGqa=FE*~a=^(VAHnFw3G-cFqZJlu&b(pcyvvShd|Q`{`J78c(Ug&rG+-7! zTSv-85r~c5bbetWHoGyx*?c@_!5vU2S5weNEJKHza+Hu!=QOO~|wej&z1;SO&jyw&&%9rJ1OU%F3@3 z8}nj=R*w6s@7v-FYXft(7p1C{Q>3ufQWEF_OANq<9l;{R3;fFLeK(462NCe_t)_=M z%_5_mNKy$}Xws!zfpCd+c>^Pxs7WrjB}$t&DR}kcfUB#fpv$W$-nT9lnMAyq7z&yi z)rBp%QV?><5W3#Q$phhDT$eXDD`{9g7)WDD8t_O7(x&&i*Z@DcK)7LX9a}pElHf4e zfVjT){c);9zH(*q4T)XI`P8JEsp$@!cJ7ZN;&OscI?T zlPVB?L#`vq#EWmxcO$<3bWm4&GWeZb*;j}eOgt6D z!H2y)Jcb%sX1sTh=)7@~WU~hf!$AjfpvT zsUs^M%GB|qE8fkuy5C6qpOwPZx!z+f(=TyP9BeKkj4keV9SP~U+WYht-%36vty9XI zX1KBI^C#`Ut^H4P+ccG?jdosg5LDZ1dj7xFuxwL2o<{gsU0H^p51}8!`WR9fn_EQB zcSf+j+Qo-MZT&6sILyD=ByE8^5TVZFZ&G&jw%EiXfJLmyD#a<~I(b+P?_;QG9kyZ( z{_NtD8Se@}*UzNey0xUm-6h@qj@ZY*<*_TK@n{H`nHL^H&<0 z803x?CeaqYgK|cbxe5um1d=XA&%|1bU5Nm&JKLwv1XIz^P_j(0Nh(B!M|jbXFRh8U zP4>CPmB35Gw0X8y`&zE2F5#@{(j!qp*0HVZPn)&Xbq&?d3n${IGQL}@FkH~lW;0b6VmQ&?j{#a?uIDML5?Do=n?S^{%qIy%RV08C3>40RUC`ZrN z0!u{d8Pl)x#?-Rev>vzpaO+F~k$d6LQ$}K0I&IK>u$Ze@TS|Vv*V_hC=W@j3SS-Cw zw*Gb)aH^_`x*?@e81HkrA1iJ8gZ9J^#T=hCtKmAKmQ+F{c$_CXG?XJ1BKjJ^!1N@1 zt?^^T?-VHo4;g1UQq;#Ln#mw((jG!E5*z7^GX(_cKM}T`rwy_3EmcNuQC?nDT8XM% zRw)YT6PMNi-q#Of^4Q-UZS38iR2n*H^SWr`r-CpM=9I9}sgIRJU~2Oa0c-Ueg0|^l zH7JZqvNI92kuPf=gR$?|rT$oNda2;4Z7NbVy|uoheuR^-1EuYKfydO2APpoaX-kv(hZfcQDAZG9c8>8skVk$<*8I0k=?8m;A3ZgE^yGifzFH z;@hJz1AFiBAFvp4GxOhC>DL$%I^6sxR^FXJH|=kh9VwTa8hg8|>S9nED_mHS^7{1_ zJ(S_1zIZ8KTHvgZvX*9G0;P`n`+zq(k4u}I3t}_HJbOXI`2}rH5|K$w8k^1_=Tk_m z#YM)gl(AK0_860Gr%^4+~~|Pgk2#Wt=mc$5S3&+D#s4!xPOvj;cC_dXIy0KjVYYWxUQ?>D0UY?~Q9^r-gOIbp85_1i9p} zZyb%+*QOSaizdNzS@g5Xzveq(?Wy9-Daf15&9&`_)@72_K;Bhiy^a%uA)cjt=ELWP z{KF!bESX>8M(^lx^e0OEhWIiH)^8@R_UnaKIHVWcHSdAZnPugEV0~~y%PLtTx!)UR zG?Y1(S1mqo%H&&qY+^vCrSz~n{RQ#kSG8Xalv+&7(4(dE?HO?7Q-AS>0^%^r}##O|YD z4xO678(QalbllvEdQ&Y;M0!Gk7BQsl*bT`YJARkB42jYG_IM_fT8$B+UfbMS=dXSH zU%mtsY}tfbr+7@39H4H(`;BA+<~Ae&<~F}e;p&!-mFXK!f~$Ad7&hOO+*-rRNZ<50 zu50+dpMiMNnj=z>Wwmb6RLLV*7Rba9wzwWv8m;E_vfmc%IOc24ARO&c76LQW6L6!o zy8ZrG-dChpCd^W1g@Z9<))i5b<~RfiODuNnA*oflpq&1GBahDdG}=ko?o0X+dXzr;`GH;58ND4E!> zM=AjXf;x+ym=VJjEpwoquiN^z5F1=yYjpYJ5#Ly`&~N#M*Tt*A+-V;Px@Nfur;@6s zHl@unisa@~)&MW3cKqLzs8>^Ab_D898TiAAYN~TyAE2kqq&1N=aS$6YrgNyOM$Al% zpsOyBN%#Q=PzGDWULEkq6TV%X#)$xLm+!eqF~#;H0#K%P9Ye=aO51lG#qjF|Hkrh=Dp&2-d_6{Jh}EaJrU%Rxnc{e( zmq>Lh<=EK#@x`9i9?SV>7{ybcWN<;3R3IWLCap?%>&dkQZ4FgbbJM*p< zmxinA=cdiFsf86>bc+*ABsDsNmXTI3sn>2L_X-%$?Z7`W!IBZ58)uBV}7 z4AN9ir%s?$eqDg_gVgk}xw*x44~6`9T`CSV%qVk+L`9>9C1^=EzM#x>s03KGfnZ4U z91~gXCztq5!<5`F#cf1yEuD;vy6|2sNj;RD1?&9Q6J#~^z_WSX5Zof2*tr9 zY^$}bU3l9o;Hk2SGfa}c3U@?RiPeuWYJ#kwhd^~O*AkKlH%GWO$2)Of8Rk>fw9QuL zvOQ3Pg=C3gdmTv|)<{8QalgwSpqhN{6@x>)*lluf-)0WfoScFUnG_xFZSF z(@f6V;<{SnZkXPVC|NYWl=R;LX1Q>NK_ok?b+$aP_Qdv>@f(PIL*h;XgFZAIA(Q7) z{%oO@X4Nz)94v;Xn*D8Z|r$E)L#c2vQBlVYT{UIO3>9jv*~*r?D5O zj50<#1Lh#FUZe#cy#p+A`syepnwGiYh(4laXvlO1{nbUr<$|1bKLha%j>H$ zytn%^F^ykSB(edhY6{AVeAa7%29R&4khtTo9I`GZe|OEZY_Q8oRUZZS~iRnyCs)8)A~Sd_7>e~Qt@q2G4jUH7($?rhfs%{w6kq(p|b{d;|JEcZtL0QOps{QBeC1D%v|jLI$je_u=yPn*o- za-97yjLVt0YfWVAN!tGad@W9#&opndA6}R;30j=lkHmJi1p zY19W|Fa3AMt(-*LD|Ph1(&kjD_>Fx>Yg->Ka`TN51GRuR>xCrEXM#UF=?8zV*ea5) zvb0{E8J`anS(as&OBz(GEw|qjjIWF-xnU;LtJe>7xzrVl)qLBF{O~I!72isfd}R~j~Mu8E|0|D8S41Yh^gpcpsCMl zbK0tC$2KiePFzN)_hN;K9)HX8-yJQ)Ifh63IYm7TalivC4;rGig4)CKs@MT@xEBKb zMMK0n1TW02hKG?Bn>?x14_$Y?$kHwe=m6=kz8Lt;#Qqi5S7rQTm`^T1Ri&ey?<4CQ zM@+gm)p83G-wJK2#`Z=}?L)$K_4Q(-Ijd-)r%!aFsDVRN&d!Jn4NL~|3$4^BSGjE? zOxK9KZ{duRhAD&7NzAA)Q^q9nxl}fltz)3JpcDbNrqlx5*SRmXHxFmk%aPILxt?WR zS1G51FP=rFRvMP(LJI{@g`LX~HqsQ3#}@u!;+MHl(9#M_zMSSu9I%-r|k+}jj? z6Zjdz^X8mYnDCZym(Nd?Q@^}9VDZtHjr61FT?)x&({GC4D7Xb_zAx~1BH=m}sm?f} zj!No+(|d%sj;r0Z0Ldz-u#sGJ>KK7yTEY|Vc?~pmG<0#zok<*JC0G|*d%=w?A8Uo? zET}eKif(Rh`~I&GAYEG!6p0BS78cmv*D^ep!${zxsjJGO zB9oj{D)bWDUYBc~!h*u&n*c@aV;2;OMV<)WnvaJ8c01XI%+gm7;!HdhSa5|xO0YN1E zv1IsLl2_)r#5q*d)XuXnDm1E&GJq0q{?M(yB1O8|-7$H8(B}<*yr};G)9C*I{ET`9 z3bga`TsN7IO~0xK?2%+b)SPN0Kw1|GO)Fb67+oLQM}t+pI0YpLID zVEs<#47tP0G-H(~QEs=#)EqeZj7xfUCc|^K9HZehiNF0T3w1WYxt|TjN1iKKkDeRl zr=X*Q@a?HZ&&vSN<<(i;Nk(o}JzSxLOR(s+j1OLbm=meao{diLYmC{LUbL)P5$P3%n1{ zGb)<7{o^-{a*8y8%FJGCsbnC67$&yW+fDl09$)Y$iFAA;PgzgHoX3iJ42ua5DO+49 zFME$tS95WDY%yqMylI?fDFrP=l!(*Csb*&c?XuZ5>E>OnW3bJ~t; zC4m5f3pR#w&1DeaHM`G@nWBbefp6ycs=T7 zifSopO{TN6O(+s02D-Uns4*HuWNEVEna+Gk;wrqwID)4(bD5WCotXKm7F(o>j&E{O zRs`Gv8O^S4(Y`9;`u-*n%`J6IvLWd$jhf=_2sgPPT=hEwO|D|HB;v(`f*6s0*WU?l zF1k&RP5S+@vaFn^U@sl|4&I+k4I4${63Zh$rcA zPeHyqr@)RG&(@u5XgFIc%qn!+7~TY>mSzpVE>FWQ+gzY+M#P(5_`CTWZT|pZ-~Rwg zsQ&=+G1v0tlvL7aST5Jw%do>fX_Qp7n$VD>Tg|p3b=)$tNM3f;V{$*Outgj`>k7cP zvY*rX+X>5)W;IiXiOQoL@c#glWOVw^zDcRqdmf__NNVDwDzU2Ba98bEB~j#Fo7`cC zKWSx&xf}Uz0N&WG(Q2PDXzNH+2Hg@02Vm3G2VJWy)ilta{e-SspkjB|? z6o|fXZEJ3E!=LFL@ftSFxPQZxn2B=w6P{JJ_tzuxpg@`XwIq6Ippop!5!@^8pKH+M195X z0N4Nph$i54+!-A8aSz&W1wAneSt-H%Ks100kPBa^0?G$s1<5n;%vq^v>LFF9Uow_( zE}-qucKt4TlZ2}HUJ!yBYHfE4nnC5FukrGW8x7c>OWzH$@TybtO3}x9Q~*rZAs10% zY)QWR?fP^kj?TT6IAW@mSUBk}cDHkLge2Rd$q;>BfYm*8tjq^nc$-Ln4ui_+0{m%2)I-OaCI=b zz3jVnvyA5a8r2oqb$kY-%2B13BHxDbw<)9^UYNgxqmmKOxJDom>~TA4V5Kg{TjEWs-fo^t9HEW>g~mDD=M0c$fB zkp{sp&YWMF%TvWeiD{~2pDcz^EjkcSDOetWs*fT7jnh%nYu{)lZ(5ZS8VFSu2-uVe z&7=}7+yV`N>^gL|!xXd?ElM1zA~v}l`u6m-{V}~{3;0uz3d!aRs^ecm5AN;`-90uK z9ia~+1iGNPQhpG9524!F4xp-yRwCOCE&YCckSR9AD(Z;QdA&@|bFt zt{CIgWMir(jlgALxFGs&HXELuan)W5_^A&D!wz4@0%|IHxEWJ3hLJh2sM^lah71*f zAjuODKXh&{Kl*FnAO8TFc#r=86D`Mb=5#JuWr77}`kY{7t5*>BjVi{(3*dU55uygo z(YD{V1fPW{;#=tjMXkRB%EYDG>7!khxu;)b-%$nsSt;?GK)?$9ndnYY|Z<@ ztSz=Gy1bgMqOIDJ711Jz(wYgmjRa(pA}sdZ1&2$LLGCXs@TWL~EY72>2r1RI^6Do* zHdWM0>L6<(_64nSEEx6f4iwGd%<}4Grly*r(V-JgytNk_8xmV#+v#vR2}{VT5?Li) zNJ?=I#hX(#^lqx4 z?Xe_*y0ukFM@Y^Bu&#e&}E+F}_;iTN~{D#2M>K2@8gJ5-q_OA2WqgvY5QAOKZk za;k1is)bO-&q4T;$GJQ3{#BDh!u8ocdji$IahOwPzlE9^CYn_%5JIplW@4H_d!mLK zSl<=CRmJr!mra&cw#+ZDNH+5Z+V>-S{DCK6IydF?25P0LzfG;S z9xJl-x9o! zEP>={(ut~|7JVxrNk?;_o}^gpY1i3WjMkek%xw-;n!4FwmNhKY@<_MP zLE6j-APW@)VtM|f!T$hV;r{^q{TKe$JuIQ(7nt%Y-$A{Bz8od4iAu&L^ETk#*j?q6 z#;YOK=udoPO1c#vOKKPjsUibNhz{6pmZFL#_f0Cw-3SwAs1>5AJw%W9gisii(+b#>@)9$mtDjb31p)kUH$ zK!$GP`t`)TaHTF?IF&vj-rwQthng9xV_sZeiRe8reIwOKb-E2+hYwKIX+>A3*qat# z@x>ACvBkAs8TbRmyh}$=BC5=3*CnH3%p03l!X{-S^DJ#6i+<;(*z$vc_Jr7_kK3FtX!5m7ls)=<3Tbq#A7QV-zzSix0JVhLF(yL3V<}gfRqq>@Xy2+gGa>u+lf*xP2e zO``et806FCCooLX2B8qkQOl))%SlZbkQQYsNE%RrG>a~xLIuT7#~g8))zIbKLzR?R zYL&=|q|zys8BuBP*?}an8jhtmB~&WYd5?fS*MaJ>J5PVh0vu2iuL^U+f&&^n)Iz`$?cX-)C`G}BgLDFN`*sdxZ+cZqdO>r!R zQM|g`vk_}v=b^Q>8(Zixw+~S?l`+T=IOd`<#?YXfx`jP2|lvyN}(ds9#9=MR?d_MV|9bI)i zYapdnX%UZ@T!E-q1E%D3y{-ZECPOTA5)(=q(?&|G04_ERH|lN%)+B62tPVRDz}(h~ zqk!X*o@z*zwpi3dR=S+jsTPl2%PSIC#v5Y91@kc1D*pgivk&_-k$>X1{>D2}SeB#- z9aJ}{!4wiH9`8_^!jYtoqYjNJjtva#!=T1eMS_uex}>s#zbs}c#Pp2v>NY!A*o-z; z@aMde(A6}1_up)3{;z4I^H^ff* zSBriR@c#hp+1i3MhQR2!_!OJD9mydZsp>}Kw*JffF_~r2`-Nt2Bf`v0B|L5Taj77? z6Jd8GjqGpou*XTgJWvEh)LLfJg!Lp|+K*dr+XaXqm~x#p@(qrm<+<(`r(1RT_348l z$!TMhk-Nkhn&ZpVUvBq4zh1a9nh>s9XC(!}u(=@qpVjb1b$vAjB~4VZIZ9YL@&vW? z4fL-~_W6GzC~p)zYpKdBWyxjBLkfzxX#hZ{P+)Y1bGQY9lV!LXm&^^ZRpcJK#%~k$Osp;z!$k9uj0J(GU6<t@WN9l$s>ZB-in>AbqZX4%*xK0SlMkWW!4cG&@-q#Hq)$ literal 0 HcmV?d00001 diff --git a/index.html b/index.html new file mode 100644 index 0000000..9ad38ca --- /dev/null +++ b/index.html @@ -0,0 +1,206 @@ + + + + + + Get Out Game Teste + + + + + + + + + + + + + +

+
+

+
+

Your Family

+
+
+
    +
  • + +
    +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +
  • +
+
+

+ +
+
+ + + +
+
+
+

Log

+
+

Result

+
    +

    Status Change

    +
      +
      +
      + +
      +
      +
      +
      +

      Skill Check

      +

      Strength - Medium

      +
      +
      +
      - Dices -
      +
      +
      +
      6
      +
      / 6
      +
      +
      +
      +
      +
      6
      +
      / 6
      +
      +
      +
      + Character Strength: 3
      +
      Expected: 10
      +
      Result:
      0
      +

      + SUCCESS +

      +
      +
      + +
      +
      +
      + +
      +
      + +
      +

      +
      +
      +
      +
      +
      +
      + +
      +
        +
        +
        + + +
        +
        +
        +

        Item picker

        +
        +

        Did you find something!

        +

        Items found

        +
          + +

          Your items

          +
            +
            +
            + +
            +
            +
            +

            Rest in peace

            +
            + +

            +

            +

            +

            +
            +
            + +
            +
            +
            +

            Game over

            +

            +
            + +
            +
            +
            +

            Dialog Page

            +
            +
            +
            +
            +
            +
            +

            Map Page

            +
            +
            +
            +
            +
            +
            +

            Skill Up Page

            +
            +
            +
            +
            +
            +
            + + + + +
            + + + \ No newline at end of file diff --git a/src/Game.ts b/src/Game.ts new file mode 100644 index 0000000..505d6f2 --- /dev/null +++ b/src/Game.ts @@ -0,0 +1,227 @@ +import { EventManager } from './managers/EventManager'; +import { GameOverManager } from './managers/GameOverManager'; +import { RipManager } from './managers/RipManager'; +import { TravelManager } from './managers/TravelManager'; +import { LogManager } from './managers/LogManager'; +import { BagManager } from './managers/BagManager'; +import { StateManager } from './managers/StateManager'; +import { GameStates } from './enums/GameStates'; +import { Character } from './entities/Character'; +import { CharacterManager } from './managers/CharacterManager'; +import { Language, LocalizationManager } from './managers/LocalizationManager'; +import { DialogManager } from './managers/DialogManager'; +import { MapManager } from './managers/MapManager'; +import { SkillUpManager } from './managers/SkillUpManager'; +import { Clock } from './entities/Clock'; +import { ItemSeeds, ItemsNames } from './seeds/ItemSeeds'; +import { DiceManager } from './managers/DiceManager'; +import { SkillCheckManager, SkillCheckResults } from './managers/SkillCheckManager'; +import { ItemPickerManager } from './managers/ItemPickerManager'; +import { AudioManager } from './managers/AudioManager'; + +export class Game { + private static _instance: Game; + private _currentDay = 1; + private _hours = 0; + private _clock: Clock; + private _distanceToTheBorder = 300; + + public travelPage: HTMLElement | null; + public logPage: HTMLElement | null; + public eventPage: HTMLElement | null; + public skillCheckPage: HTMLElement | null; + public gameOverPage: HTMLElement | null; + public ripPage: HTMLElement | null; + public bagPage: HTMLElement | null; + public itemPickerPage: HTMLElement | null; + public dialogPage: HTMLElement | null; + public mapPage: HTMLElement | null; + public skillUpPage: HTMLElement | null; + + public eventManager: EventManager; + public skillCheckManager: SkillCheckManager; + public gameOverManager: GameOverManager; + public ripManager: RipManager; + public travelManager: TravelManager; + public logManager: LogManager; + public bagManager: BagManager; + public characterManager: CharacterManager; + public stateManager: StateManager; + public itemPickerManager: ItemPickerManager; + public loc: LocalizationManager; + public dialogManager: DialogManager; + public mapManager: MapManager; + public skillUpManager: SkillUpManager; + public audioManager: AudioManager; + + private _currentTimeField: Element | null; + private playerGuid: string; + + public skillCheckResult: SkillCheckResults; + + private constructor() { + this.travelPage = document.getElementById("travel-page"); + this.logPage = document.getElementById("log-page"); + this.eventPage = document.getElementById("event-page"); + this.skillCheckPage = document.getElementById("skill-check-page"); + this.gameOverPage = document.getElementById("game-over-page"); + this.ripPage = document.getElementById("rip-page"); + this.bagPage = document.getElementById("bag-page"); + this.itemPickerPage = document.getElementById("item-picker-page"); + this.dialogPage = document.querySelector("#dialog-page"); + this.mapPage = document.querySelector("#map-page"); + this.skillUpPage = document.querySelector("#skill-up-page"); + + this._currentTimeField = document.querySelector("#current-time-field"); + this.playerGuid = this.generateGuid(); + } + + static getInstance(): Game { + if (!Game._instance) { + Game._instance = new Game(); + } + + return Game._instance; + } + + public start(): void { + this.loc = new LocalizationManager(Language.EnUs); + let dice = new DiceManager("dice-canvas"); + dice.start(); + + this.bagManager = new BagManager(); + //this.addItemsToBag(); + this.characterManager = new CharacterManager(); + this.characterManager.start(); + this.eventManager = new EventManager(); + this.gameOverManager = new GameOverManager(); + this.skillCheckManager = new SkillCheckManager(); + this.ripManager = new RipManager(); + this.travelManager = new TravelManager(); + this._clock = new Clock(8, true); + this.logManager = new LogManager(); + this.stateManager = new StateManager(); + this.itemPickerManager = new ItemPickerManager(); + this.dialogManager = new DialogManager(); + this.mapManager = new MapManager(); + this.skillUpManager = new SkillUpManager(); + this.audioManager = new AudioManager(); + + this.showDataTime(); + this.stateManager.goToState(GameStates.TRAVEL); + } + + get events() { + return this.eventManager; + } + + get log(): LogManager { + return this.logManager; + } + + get clock(): Clock { + return this._clock; + } + + get hours(): number { + return this._hours; + } + + set hours(hours: number) { + this._hours = hours; + } + + get currentDay(): number { + return this._currentDay; + } + + get distanceToTheBorder(): number { + return this._distanceToTheBorder; + } + + get characters(): Character[] { + return this.characterManager.characters; + } + + public decreaseTheDistanceToTheBorder(distanceToDecrease: number) { + this._distanceToTheBorder -= distanceToDecrease; + } + + public addDaysToCurrentDay (daysToAdd: number): void { + this._currentDay += daysToAdd; + } + + public addItemsToBag(): void { + for(let i = 0; i < 10; i++) { + this.bagManager.putItem(ItemSeeds.getOneRandomItem()); + } + } + + public showPage(page: HTMLElement): void { + page.style.display = 'flex'; + } + + public hidePage(page: HTMLElement): void { + page.style.display = "none"; + } + + public hideAllPages(): void { + this.hidePage(this.travelPage); + this.hidePage(this.logPage); + this.hidePage(this.eventPage); + this.hidePage(this.skillCheckPage); + this.hidePage(this.gameOverPage); + this.hidePage(this.bagPage); + this.hidePage(this.ripPage); + this.hidePage(this.itemPickerPage); + this.hidePage(this.skillUpPage); + this.hidePage(this.dialogPage); + this.hidePage(this.mapPage); + } + + showDataTime() { + this._currentTimeField.innerHTML = this._clock.showTime() + ' - day ' + this._currentDay; + + if (this.isDayLight()) { + this._currentTimeField.innerHTML += ' - daylight'; + } else { + this._currentTimeField.innerHTML += ' - night'; + } + } + + isDayLight(): boolean { + if (this._clock.anteMeridiem) { + if (this._clock.currentHour > 6 && this._clock.currentHour < 12) { + return true; + } else { + return false; + } + } else { + if (this._clock.currentHour > 6 && this._clock.currentHour < 12) { + return false; + } else { + return true; + } + } + } + + passOneHour(): void { + if (this._clock.currentHour == 12 && this._clock.anteMeridiem) { + this.addDaysToCurrentDay(1); + } + + this._clock.nextHour(); + this.showDataTime(); + } + + generateGuid(): string { + return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) { + var r = Math.random() * 16 | 0, v = c == 'x' ? r : (r & 0x3 | 0x8); + return v.toString(16); + }); + } + + getRandomArbitrary(max: number): number { + return Math.floor(Math.random() * max); + } +} diff --git a/src/entities/Character.ts b/src/entities/Character.ts new file mode 100644 index 0000000..fc60ee2 --- /dev/null +++ b/src/entities/Character.ts @@ -0,0 +1,225 @@ +import { Game } from '../Game'; +import { LogType } from '../managers/LogManager'; +import { GameStates } from '../enums/GameStates'; +import { Status } from './Status'; + +export class Character { + private _name: string; + private _kinship: string; + private _dateOfBirth: string; + private _imageURL: string; + private _health: number = 100; + private _stamina: number = 100; + private _hungry: number = 100; + private _status: Status[] = []; + + private _isDead: boolean = false; + private _buried: boolean = false; + private _sick: boolean = false; + + private readonly _game: Game; + + constructor(name: string, kinship: string, health: number = 100, stamina: number = 100, hungry: number = 100, dateOfBirth: string, isDead: boolean) { + this._name = name; + this._kinship = kinship; + this._health = health; + this._stamina = stamina; + this._hungry = hungry; + this._dateOfBirth = dateOfBirth; + this._isDead = isDead; + this._game = Game.getInstance(); + } + + get name() { + return this._name; + } + + get isDead() { + return this._isDead; + } + + get health() { + return this._health; + } + + get stamina() { + return this._stamina; + } + + get kinship() { + return this._game.loc.l(this._kinship); + } + + get hungry() { + return this._hungry; + } + + get buried() { + return this._buried; + } + + set buried(buried: boolean) { + this._buried = buried; + } + + get imageURL() { + return this._imageURL; + } + + set imageURL(imageURL: string) { + this._imageURL = imageURL; + } + + public walkOneHour(): void { + for (let affliction of this._status) { + this.looseHealth(affliction.healthPerHour); + this._game.logManager.addTempLog(this._name + ' has ' + affliction.name, LogType.Result); + } + } + + public showHealthLostPerHourDueToAllStatus(): number { + let totalHealth: number = 0; + for (let status of this._status) { + totalHealth += status.healthPerHour; + } + + return totalHealth; + } + + private checksIfAnStatusExists(statusName: string): boolean { + let existingStatusIndex = this._status.findIndex(status => status.name == statusName); + return existingStatusIndex != -1 ? true : false; + } + + public addStatus(affliction: Status) { + if (!this.checksIfAnStatusExists(affliction.name)) { + this._game.logManager.addTempLog(this._name + ' got: ' + affliction.name, LogType.Result); + this._status.push(affliction); + } + } + + public removeStatus(statusToRemove: Status) { + this._status = this._status.filter(status => status !== statusToRemove); + } + + public showAfflictions(): string { + if (this._status.length == 0) { + return ''; + } + + let afflictions: string = ''; + for (let affliction of this._status) { + if (affliction) { + afflictions += ' -' + affliction.name; + } + } + + return afflictions; + } + + increaseHungry() { + if (this._hungry <= 0) { + this.looseHealth(10); + + if (this._isDead) { + this._game.log.addTempLog(this._name + ' starved to death at day ' + this._game.currentDay, LogType.StatusChange); + } + } else { + this._hungry = this._hungry - 5; + } + } + + increaseStaminaToMax() { + this._stamina = 100; + } + + increaseStamina() { + this._stamina = 20; + } + + decreaseStamina(staminaToDecrease: number) { + if (staminaToDecrease <= 0) { + throw new Error('Stamina value must be greater than zero'); + } + + this._stamina = this._stamina - staminaToDecrease; + + if (this._stamina <= 0) { + this._stamina = 0; + + this.looseHealth(20); + + if (this._isDead) { + this._game.log.addTempLog(this._name + ' died of exhaustion at day ' + this._game.currentDay, LogType.StatusChange); + } else { + this._game.log.addTempLog(this._name + ' is dying of tiredness', LogType.Result); + } + } + } + + decreaseHungry(hungryToDecrease: number) { + if (hungryToDecrease < 0) { + throw new Error('Hungry to decrease value must be greater than zero'); + } + + if (this._hungry < 100) { + this._hungry = this._hungry + hungryToDecrease; + } + + if (this._hungry > 100) { + this._hungry = 100; + } + } + + getHungry(): string { + return '🥫' + this._hungry + '%'; + } + + getHealth(): string { + return '❤️' + this._health + '%'; + } + + getStamina(): string { + return '⚡' + this._stamina + '%'; + } + + getSickness(): string { + return this._sick ? 'Sick' : 'Not sick' + } + + getDateOfBirth(): string { + return this._dateOfBirth; + } + + + sicken(): void { + this._sick = true; + } + + looseHealth(healthToLoose: number): void { + if (healthToLoose < 0 || healthToLoose > 100) { + throw new Error('Invalid value for healthToLoose'); + } + + if (this._health > 0) { + this._health -= healthToLoose; + + if (this._health <= 0) { + this._health = 0; + this._isDead = true; + + if (this._kinship == 'you') { + this._game.stateManager.goToState(GameStates.GAME_OVER); + } + } + } + } + + increaseHealth(healthToIncrease: number): void { + this._health += healthToIncrease; + + if (this._health > 100) { + this._health = 100; + } + } +} \ No newline at end of file diff --git a/src/entities/Clock.ts b/src/entities/Clock.ts new file mode 100644 index 0000000..04e3ddc --- /dev/null +++ b/src/entities/Clock.ts @@ -0,0 +1,33 @@ +export class Clock { + private _anteMeridiem: boolean; + private _currentHour: number; + + constructor(currentHour: number, anteMediem: boolean) { + this._currentHour = currentHour; + this._anteMeridiem = anteMediem; + } + + get currentHour(): number { + return this._currentHour; + } + + get anteMeridiem(): boolean { + return this._anteMeridiem; + } + + nextHour() { + if (this._currentHour == 11) { + this._anteMeridiem = !this._anteMeridiem; + } + + if (this._currentHour == 12) { + this._currentHour = 1; + } else { + this._currentHour++; + } + } + + showTime(): string { + return (this._currentHour <= 9 ? '0' : '') + this._currentHour.toString() + ':00 ' + (this._anteMeridiem ? 'a.m' : 'p.m'); + } +} \ No newline at end of file diff --git a/src/entities/Dice.ts b/src/entities/Dice.ts new file mode 100644 index 0000000..e203a57 --- /dev/null +++ b/src/entities/Dice.ts @@ -0,0 +1,11 @@ +export class Dice { + constructor() { + + } + + public roll(): number { + let min = Math.ceil(1); + let max = Math.floor(6); + return Math.floor(Math.random() * (max - min + 1)) + min; + } +} \ No newline at end of file diff --git a/src/entities/Enemy.ts b/src/entities/Enemy.ts new file mode 100644 index 0000000..d65b439 --- /dev/null +++ b/src/entities/Enemy.ts @@ -0,0 +1,32 @@ +import { Difficulties } from "../enums/Difficulties"; +import { EnemyTypes } from "../seeds/EnemySeeds"; + +export class Enemy { + private _name: string; + private _type: EnemyTypes; + private _attack: Difficulties; + private _runAway: Difficulties; + private _timesThatAppears: number; + private _imageUrl: string; + + constructor(name: string, type: EnemyTypes, attack: Difficulties, runAway: Difficulties, timesThatAppears: number, imageUrl: string = '') { + this._name = name; + this._type = type; + this._attack = attack; + this._runAway = runAway; + this._timesThatAppears = timesThatAppears; + this._imageUrl = imageUrl; + } + + get name(): string { + return this._name; + } + + get attack(): Difficulties { + return this._attack; + } + + get runAway(): Difficulties { + return this._runAway; + } +} \ No newline at end of file diff --git a/src/entities/Event.ts b/src/entities/Event.ts new file mode 100644 index 0000000..d48647e --- /dev/null +++ b/src/entities/Event.ts @@ -0,0 +1,87 @@ +import { Item } from './Item'; +import { Skills } from '../enums/Skills'; +import { Difficulties } from '../enums/Difficulties'; +import { Difficult } from '../managers/DiceManager'; + +export enum EventType { + Exploration, + Combat, + Place +} + +export interface Choice { + buttonText: string; + skillCheck: boolean; + skillCheckFields: SkillCheckFields | null; + normalResultPath: any | null; +} + +export interface SkillCheckFields { + difficulty: Difficulties; + difficult?: Difficult; + skillToCheck: Skills; + canGiveItems: boolean; + resultPath: SkillCheckResult | null; +} + +interface SkillCheckResult { + success: any, + failure: any +} + +export class Event { + private _title: string; + private _subtitle: string; + private _description: string; + private _image: string; + private _choices: Choice[] = []; + private _type: EventType; + private _items: Item[] = []; + + constructor(title: string, subtitle: string, description: string, image: string, choices: Choice[], type: EventType, items?: Item[]) { + this._title = title; + this._subtitle = subtitle; + this._description = description; + this._image = image; + + if (choices.length > 4) { + throw new RangeError('Four is the limit of choices per event'); + } + + this._choices = choices; + this._type = type; + this._items = items; + } + + get title() { + return this._title; + } + + get subtitle() { + return this._subtitle; + } + + get description() { + return this._description; + } + + get image() { + return this._image; + } + + get choices() { + return this._choices; + } + + get type() { + return this._type; + } + + get items() { + return this._items; + } + + willGiveItems(): boolean { + return this._items ? this._items.length > 0 : false; + } +} \ No newline at end of file diff --git a/src/entities/Item.ts b/src/entities/Item.ts new file mode 100644 index 0000000..6cf0512 --- /dev/null +++ b/src/entities/Item.ts @@ -0,0 +1,90 @@ +import { Status } from './Status'; + +export enum ItemType { + FirstAid, + Food, + Drink +} + +export class Item { + private _name: string; + private _amount: number; + private _type: ItemType; + private _effectValue: number; + private _status: Status[] = []; + + constructor(name: string, type: ItemType, effectValue: number, status: Status[] = []) { + this._name = name; + this._type = type; + this._amount = 0; + this._effectValue = effectValue; + this._status = status; + } + + get name(): string { + return this._name; + } + + get amount(): number { + return this._amount; + } + + get type(): ItemType { + return this._type; + } + + get status(): Status[] { + return this._status; + } + + get effect(): string { + let effect: string = ''; + + switch(this._type) { + case ItemType.FirstAid: + effect += '❤️'; + break; + case ItemType.Food: + effect += '🥫'; + break; + } + + effect += ' +' + this.effectValue + '%'; + return effect; + } + + get effectValue(): number { + return this._effectValue; + } + + set amount(amount: number) { + this._amount = amount; + } + + showAmount(): string { + return (this._amount > 1 ? ' x ' + this._amount : '' ); + } + + decreaseAmount(): void { + this._amount--; + } + + increaseAmount(): void { + this._amount++; + } + + public showStatus(): string { + if (this._status.length == 0) { + return ''; + } + + let afflictions: string = ''; + for (let affliction of this._status) { + if (affliction) { + afflictions += ' -' + affliction.name; + } + } + + return afflictions; + } +} \ No newline at end of file diff --git a/src/entities/Status.ts b/src/entities/Status.ts new file mode 100644 index 0000000..ff2a7d1 --- /dev/null +++ b/src/entities/Status.ts @@ -0,0 +1,17 @@ +export class Status { + private _name: string; + private _healthPerHour: number; + + constructor(name: string, healthPerHour: number) { + this._name = name; + this._healthPerHour = healthPerHour; + } + + get name(): string { + return this._name; + } + + get healthPerHour(): number { + return this._healthPerHour; + } +} \ No newline at end of file diff --git a/src/enums/Difficulties.ts b/src/enums/Difficulties.ts new file mode 100644 index 0000000..1168213 --- /dev/null +++ b/src/enums/Difficulties.ts @@ -0,0 +1,8 @@ +export enum Difficulties { + TRIVIAL, + EASY, + MEDIUM, + CHALLENGING, + VERY_HARD, + IMPOSSIBILE +} \ No newline at end of file diff --git a/src/enums/GameStates.ts b/src/enums/GameStates.ts new file mode 100644 index 0000000..17f2eae --- /dev/null +++ b/src/enums/GameStates.ts @@ -0,0 +1,13 @@ +export enum GameStates { + TRAVEL, + EVENT, + SKILLCHECK, + GAME_OVER, + RIP, + LOG, + BAG, + ITEM_PICKER, + DIALOG, + MAP, + SKILL_UP +} \ No newline at end of file diff --git a/src/enums/Skills.ts b/src/enums/Skills.ts new file mode 100644 index 0000000..5cbd350 --- /dev/null +++ b/src/enums/Skills.ts @@ -0,0 +1,6 @@ +export enum Skills { + STRENGTH, + SPEAK, + STEALTH, + EXPLORATION +} \ No newline at end of file diff --git a/src/hello.ts b/src/hello.ts deleted file mode 100644 index ad86b2e..0000000 --- a/src/hello.ts +++ /dev/null @@ -1 +0,0 @@ -console.log("hello"); \ No newline at end of file diff --git a/src/index.html b/src/index.html deleted file mode 100644 index 93d49a9..0000000 --- a/src/index.html +++ /dev/null @@ -1,11 +0,0 @@ - - - - - My First Parcel App - - -

            Hello, World! 2

            - - - \ No newline at end of file diff --git a/src/index.ts b/src/index.ts new file mode 100644 index 0000000..ca65b60 --- /dev/null +++ b/src/index.ts @@ -0,0 +1,4 @@ +import { Game } from './Game'; + +const game = Game.getInstance(); +game.start(); diff --git a/src/localization/en-us.json b/src/localization/en-us.json new file mode 100644 index 0000000..241ae9f --- /dev/null +++ b/src/localization/en-us.json @@ -0,0 +1,16 @@ +{ + "walk-one-hour": "Walk (+1 hour)", + "your-family": "Your Family", + "miles-to-the-border": "miles to the border", + "you": "you", + "wife": "wife", + "son": "son", + "daughter": "daughter", + "day": "day", + "daylight": "daylight", + "strength": "Strength", + "speak": "Speak", + "stealth": "Stealth", + "exploration": "Exploration", + "bag-is-empty": "Bag is empty" +} \ No newline at end of file diff --git a/src/localization/pt-br.json b/src/localization/pt-br.json new file mode 100644 index 0000000..170ea4a --- /dev/null +++ b/src/localization/pt-br.json @@ -0,0 +1,16 @@ +{ + "walk-one-hour": "Andar (+1 hora)", + "your-family": "Sua Família", + "miles-to-the-border": "milhas até a fronteira", + "you": "você", + "wife": "esposa", + "son": "filho", + "daughter": "filha", + "day": "dia", + "daylight": "luz do dia", + "strength": "Força", + "speak": "Labia", + "stealth": "Furtividade", + "exploration": "Exploração", + "bag-is-empty": "A bolsa esta vazia" +} \ No newline at end of file diff --git a/src/managers/AudioManager.ts b/src/managers/AudioManager.ts new file mode 100644 index 0000000..afc5583 --- /dev/null +++ b/src/managers/AudioManager.ts @@ -0,0 +1,115 @@ +import { Game } from '../Game'; + +export class AudioManager { + private audioFiles: string[] = []; + private audioEffects: HTMLAudioElement; + private audioBackground: HTMLAudioElement; + private audioLoaded: number; + private noSound: boolean = false; + private readonly _game: Game; + + constructor() { + this._game = Game.getInstance(); + + this.audioFiles = [ + 'success.wav', + 'button1.wav', + 'dice.mp3', + 'fail.mp3', + 'take-item.wav', + 'write.wav', + 'throw.wav', + 'ding.wav', + 'walk.mpeg' + ]; + + this.audioEffects = new Audio(); + this.audioBackground = new Audio(); + + for (const i in this.audioFiles) { + this.preloadAudio(this.audioFiles[i]); + } + } + + private preloadAudio(url: string): void { + let audio = new Audio(); + audio.addEventListener('canplaythrough', this.loadedAudio, false); + audio.src = url; + } + + private loadedAudio() { + this.audioLoaded++; + if (this.audioLoaded == (this.audioFiles.length -1)){ + this.allAudioHaveBeenLoaded(); + } + } + + private allAudioHaveBeenLoaded() { + console.log('load all audios'); + } + + public playButtonSound(): void { + this.playAudioEffect('button1.wav'); + } + + public playDiceSound(): void { + this.playAudioEffect('dice.mp3'); + } + + public playSuccessSound(): void { + this.playAudioEffect('success.wav'); + } + + public playFailSound(): void { + this.playAudioEffect('fail.mp3'); + } + + public playTakeItemSound(): void { + this.playAudioEffect('take-item.wav'); + } + + public playWriteSound(): void { + this.playAudioEffect('write.wav'); + } + + public playThrowSound(): void { + this.playAudioEffect('throw.wav'); + } + + public playDingSound(): void { + this.playAudioEffect('ding.wav'); + } + + public playRainSound(): void { + this.playAudioLoop('walk.mpeg'); + } + + private playAudioEffect(soundName: string): void { + if (this.noSound) + return + + this.audioEffects.src = 'audio/' + soundName; + this.audioEffects.play(); + } + + private playAudioLoop(soundName: string): void { + if (this.noSound) + return + + this.audioBackground.src = 'audio/' + soundName; + this.audioBackground.volume = 0.2; + if (typeof this.audioBackground.loop == 'boolean') + { + this.audioBackground.loop = true; + } + else + { + this.audioBackground.addEventListener('ended', function() { + this.currentTime = 0; + this.play(); + console.log('loop'); + }, false); + } + this.audioBackground.play(); + } +} \ No newline at end of file diff --git a/src/managers/BagManager.ts b/src/managers/BagManager.ts new file mode 100644 index 0000000..45367b0 --- /dev/null +++ b/src/managers/BagManager.ts @@ -0,0 +1,190 @@ +import { Game } from '../Game'; +import { Item, ItemType } from '../entities/Item'; +import { Character } from '../entities/Character'; +import { GameStates } from '../enums/GameStates'; + +export class BagManager { + private _items: Item[] = []; + private _itemListElement: Element; + private _selectedItemElement: any; + private _selectedItemDescriptionElement: any; + private _selectedItem: Item; + private _bagCloseBtn: Element; + private _bagThrowAwayBtn: HTMLElement; + private readonly _game: Game; + + constructor() { + + this._game = Game.getInstance(); + + this._itemListElement = document.querySelector('#bag-item-list'); + this._selectedItemElement = document.getElementById('bag-selected-item'); + this._selectedItemDescriptionElement = document.getElementById('bag-selected-item-description'); + this._bagCloseBtn = document.querySelector('#bag-close-btn'); + this._bagThrowAwayBtn = document.getElementById('bag-throw-away-btn'); + + this._bagCloseBtn.addEventListener('click', () => { this.onClickBagClose() }); + this._bagThrowAwayBtn.addEventListener('click', () => { this.onClickThrowAway() }); + } + + start() { + this.hideSelectedItem(); + this.showItems(); + this._bagThrowAwayBtn.style.display = 'none'; + } + + private onClickBagClose() { + this._game.audioManager.playButtonSound(); + this._game.stateManager.goToState(GameStates.TRAVEL); + } + + private onClickThrowAway() { + this._game.audioManager.playButtonSound(); + this.removeOrDecreaseItem(); + this._itemListElement.innerHTML = ''; + this._selectedItemElement.style.display = 'none'; + this._selectedItemDescriptionElement.style.display = 'none'; + this.showItems(); + this._bagThrowAwayBtn.style.display = 'none'; + } + + private hideSelectedItem() { + this._selectedItemElement.innerHTML = ''; + this._selectedItemElement.style.display = 'none'; + this._selectedItemDescriptionElement.style.display = 'none'; + } + + private showSelectedItem() { + this._selectedItemElement.style.display = 'block'; + if (this._selectedItem.type == ItemType.FirstAid) { + this._selectedItemDescriptionElement.style.display = 'block'; + } + } + + private showItems() { + this._itemListElement.innerHTML = ''; + + if (this._items.length == 0) { + this._itemListElement.innerHTML = 'Empty'; + return; + } + + for (let item of this._items) { + const li = document.createElement("li"); + const button = document.createElement("button"); + button.appendChild(document.createTextNode(item.name + ' (' + item.effect + ') ' + item.showAmount())); + button.addEventListener('click', () => this.selectItem(item)); + li.appendChild(button); + this._itemListElement.appendChild(li); + } + } + + putItem(itemToPut: Item): void { + let existingItemIndex = this._items.findIndex(item => item.name == itemToPut.name); + + if (existingItemIndex >= 0) { + this._items[existingItemIndex].increaseAmount(); + } else { + this._items.push(itemToPut); + } + } + + private showCharacters() { + for (const character of this._game.characters) { + const li = document.createElement("li"); + const button = document.createElement("button"); + button.classList.add('bag-item'); + + let buttonText = character.name; + + var paragraph = document.createElement("p"); + + if (character.isDead) { + button.disabled = true; + paragraph.classList.add('line'); + paragraph.style.color = '#2c3e50'; + } else { + switch (this._selectedItem.type) { + case ItemType.FirstAid: + buttonText += character.getHealth(); + buttonText += character.showAfflictions(); + break; + case ItemType.Food: + buttonText += character.getHungry(); + break; + } + } + + paragraph.appendChild(document.createTextNode(buttonText)); + button.appendChild(paragraph); + + button.addEventListener('click', () => this.useItem(character) ); + li.appendChild(button); + this._itemListElement.appendChild(li); + } + } + + private selectItem(selectedItem: Item) { + this._selectedItem = selectedItem; + this._itemListElement.innerHTML = ''; + this._selectedItemElement.innerHTML = `Give ${this._selectedItem.name} ${this._selectedItem.effect} to:`; + if (this._selectedItem.type == ItemType.FirstAid) { + this._selectedItemDescriptionElement.innerHTML = 'Can help with ' + this._selectedItem.showStatus(); + } + this.showSelectedItem(); + this.showCharacters(); + this._bagThrowAwayBtn.style.display = 'block'; + } + + private useItem(character: Character) { + this.removeOrDecreaseItem(); + this.hideSelectedItem(); + this.showItems(); + + switch (this._selectedItem.type) { + case ItemType.FirstAid: + character.increaseHealth(this._selectedItem.effectValue); + break; + case ItemType.Food: + character.decreaseHungry(this._selectedItem.effectValue); + break; + } + + for (let status of this._selectedItem.status) { + character.removeStatus(status); + } + + this._bagThrowAwayBtn.style.display = 'none'; + } + + private removeOrDecreaseItem() { + if (this._selectedItem.amount > 1) { + this._selectedItem.decreaseAmount(); + } else { + this.removeItem(this._selectedItem.name); + } + } + + public removeItem(itemName: string): void { + this._items = this._items.filter(item => item.name !== itemName); + } + + public checksIfAnItemExists(itemName: string): boolean { + let existingItemIndex = this._items.findIndex(item => item.name == itemName); + return existingItemIndex != -1 ? true : false; + } + + isEmpty(): boolean { + return this._items.length <= 0; + } + + public showQuantityOfItems(): number { + let itemCount: number = 0; + + for (let i = 0; i < this._items.length; i++) { + itemCount += this._items[i].amount == 0 ? 1 : this._items[i].amount; + } + + return itemCount; + } +} \ No newline at end of file diff --git a/src/managers/CharacterManager.ts b/src/managers/CharacterManager.ts new file mode 100644 index 0000000..cd0f7de --- /dev/null +++ b/src/managers/CharacterManager.ts @@ -0,0 +1,132 @@ +import { Game } from '../Game'; +import { Character } from '../entities/Character'; +import { StatusSeeds } from '../seeds/AfflictionSeeds'; + +export class CharacterManager { + public previousCharacters: Character[] = []; + public characters: Character[] = []; + private readonly _game: Game; + + constructor() { + this._game = Game.getInstance(); + this.createAllCharacters(); + this.savePreviousCharacters(); + } + + start() { + for (let i = 0; i < this._game.characters.length; i++) { + this._game.characters[i].imageURL = (document.getElementById("rip-page-image-" + (i + 1)) as HTMLImageElement).src; + } + } + + private createAllCharacters(): void { + this.characters.push(new Character('Ethan', 'you', 100, 100, 100, '1985', false)); + this.characters.push(new Character('Olivia', 'wife', 100, 100, 100, '1988', false)); + this.characters.push(new Character('Michael', 'son', 100, 100, 100, '2003', false)); + this.characters.push(new Character('Sophia', 'daughter', 100, 100, 100, '2005', false)); + } + + public savePreviousCharacters() { + this.previousCharacters = []; + for (let character of this.characters) { + this.previousCharacters.push(new Character(character.name, + character.kinship, + character.health, + character.stamina, + character.hungry, + character.getDateOfBirth(), character.isDead)) + } + } + + increaseHungryOfAllCharacters() { + let characters = this.getCharactersAlive(); + for (let character of characters) { + character.increaseHungry(); + } + } + + decreaseStaminaOfAllCharacters(staminToDecrease: number) { + let characters = this.getCharactersAlive(); + for (let character of characters) { + character.decreaseStamina(staminToDecrease); + } + } + + increaseStaminaOfAllCharactersToMax() { + let characters = this.getCharactersAlive(); + for (let character of characters) { + character.increaseStaminaToMax(); + } + } + + increaseStaminaOfAllCharacters() { + let characters = this.getCharactersAlive(); + for (let character of characters) { + character.increaseStamina(); + } + } + + getNumberOfCharactersAlive(): number { + return this._game.characters.filter((character) => !character.isDead).length; + } + + getCharactersAlive(): Character[] { + return this._game.characters.filter((character) => !character.isDead); + } + + getCharactersDead(): Character[] { + return this._game.characters.filter((character) => character.isDead); + } + + getFirstCharacterDeadAndNotBuried(): Character { + return this._game.characters.find((character) => character.isDead && !character.buried); + } + + + isInDanger(): boolean { + let characters = this.getCharactersAlive(); + for (let character of characters) { + if (character.health <= 25 || character.stamina <= 25 || + character.hungry <= 25) + return true; + } + + return false; + } + + picksACharacterAtRandom(): Character { + let characters = this.getCharactersAlive(); + let randomNumber = this._game.getRandomArbitrary(characters.length - 1); + let character: Character = characters[randomNumber]; + return character; + } + + makeSomeoneInTheGroupGetStatus(status?: string): Character { + let character: Character = this.picksACharacterAtRandom(); + if (status != null) { + character.addStatus(StatusSeeds.getStatusByName(status)); + } else { + character.addStatus(StatusSeeds.getOneRandomStatus()); + } + return character; + } + + decreasesTheHealthOfSomeoneInTheGroup(): Character { + let character: Character = this.picksACharacterAtRandom(); + character.looseHealth(30); + return character; + } + + public statusOfTheCharactersChange(): boolean { + for (let i = 0; i < this.previousCharacters.length; i++) { + if(!this.previousCharacters[i].isDead && + (this.previousCharacters[i].health != this.characters[i].health || + this.previousCharacters[i].stamina != this.characters[i].stamina || + this.previousCharacters[i].hungry != this.characters[i].hungry)) { + this.previousCharacters = this.characters; + return true; + } + } + return false; + } +} \ No newline at end of file diff --git a/src/managers/DialogManager.ts b/src/managers/DialogManager.ts new file mode 100644 index 0000000..a6b492a --- /dev/null +++ b/src/managers/DialogManager.ts @@ -0,0 +1,12 @@ +import { Game } from '../Game'; + +export class DialogManager { + private readonly _game: Game; + + constructor() { + this._game = Game.getInstance(); + } + + public start(): void { + } +} \ No newline at end of file diff --git a/src/managers/DiceManager.ts b/src/managers/DiceManager.ts new file mode 100644 index 0000000..2fcdbed --- /dev/null +++ b/src/managers/DiceManager.ts @@ -0,0 +1,138 @@ +import { Game } from '../Game'; +import { Difficulties } from '../enums/Difficulties'; + +export interface Difficult { + value: number, + text: string, + class: string +} + +export class DiceManager { + private percentageTable: any; + + private canvas: HTMLCanvasElement; + private ctx: CanvasRenderingContext2D; + private diceSize: number; + private cornerRadius: number; + private dotRadius: number; + private positions: [number, number][][]; + + constructor(canvasId: string) { + this.percentageTable = { + '2': 97, + '3': 97, + '4': 92, + '5': 83, + '6': 73, + '7': 59, + '8': 42, + '9': 28, + '10': 17, + '11': 9, + '12': 3 + }; + + //this.canvas = document.getElementById(canvasId) as HTMLCanvasElement; + //this.ctx = this.canvas.getContext("2d") as CanvasRenderingContext2D; + + this.diceSize = 150; + this.cornerRadius = 20; + this.dotRadius = 10; + + // Definindo as posições das bolinhas para as faces do dado + this.positions = [ + [], // 0 - nunca usado + [[0, 0]], // 1 + [[-1, -1], [1, 1]], // 2 + [[-1, -1], [0, 0], [1, 1]], // 3 + [[-1, -1], [-1, 1], [1, -1], [1, 1]], // 4 + [[-1, -1], [-1, 1], [0, 0], [1, -1], [1, 1]], // 5 + [[-1, -1], [-1, 0], [-1, 1], [1, -1], [1, 0], [1, 1]] // 6 + ]; + } + + start() { + } + + public getDifficult(difficulty: Difficulties): Difficult { + switch(difficulty) { + case Difficulties.TRIVIAL: + return { value: this.getRandomNumber(3, 5), text: 'Trivial', class: 'green-color-border' }; + case Difficulties.EASY: + return { value: this.getRandomNumber(6, 8), text: 'Easy', class: 'green-color-border' }; + case Difficulties.MEDIUM: + return { value: this.getRandomNumber(9, 11), text: 'Medium', class: 'green-color-border' }; + case Difficulties.CHALLENGING: + return { value: this.getRandomNumber(12, 14), text: 'Challenging', class: 'yellow-color-border' }; + case Difficulties.VERY_HARD: + return { value: this.getRandomNumber(15, 17), text: 'Very Hard', class: 'red-color-border' }; + case Difficulties.IMPOSSIBILE: + return { value: this.getRandomNumber(18, 20), text: 'Impossibile', class: 'red-color-border' }; + } + } + + public calculateProbabilityFrom(value: number) { + if (value > 12) value = 12; + if (value <= 1) value = 2; + return this.percentageTable[value] + '%'; + } + + private getRandomNumber(start: number, end: number): number { + let min = Math.ceil(start); + let max = Math.floor(end); + return Math.floor(Math.random() * (max - min + 1)) + min; + } + + private drawRoundedRect(x: number, y: number, width: number, height: number, radius: number): void { + this.ctx.beginPath(); + this.ctx.moveTo(x + radius, y); + this.ctx.arcTo(x + width, y, x + width, y + height, radius); + this.ctx.arcTo(x + width, y + height, x, y + height, radius); + this.ctx.arcTo(x, y + height, x, y, radius); + this.ctx.arcTo(x, y, x + width, y, radius); + this.ctx.closePath(); + this.ctx.fillStyle = "black"; // Preenchendo o dado com preto + this.ctx.fill(); + this.ctx.lineWidth = 5; + this.ctx.strokeStyle = "white"; // Contorno branco para o dado + this.ctx.stroke(); + } + + private drawDots(diceValue: number): void { + const centerX: number = this.canvas.width / 2; + const centerY: number = this.canvas.height / 2; + const spacing: number = this.diceSize / 4; + + this.ctx.fillStyle = "white"; // Bolinhas brancas + this.positions[diceValue].forEach(([xPos, yPos]: [number, number]) => { + const x = centerX + xPos * spacing; + const y = centerY + yPos * spacing; + this.ctx.beginPath(); + this.ctx.arc(x, y, this.dotRadius, 0, Math.PI * 2); + this.ctx.fill(); + }); + } + + private drawDice(diceValue: number): void { + this.ctx.clearRect(0, 0, this.canvas.width, this.canvas.height); + + // Desenha o retângulo arredondado (o dado) + const x = (this.canvas.width - this.diceSize) / 2; + const y = (this.canvas.height - this.diceSize) / 2; + this.drawRoundedRect(x, y, this.diceSize, this.diceSize, this.cornerRadius); + + // Desenha as bolinhas de acordo com o valor do dado + this.drawDots(diceValue); + } + + private getRandomDiceValue(): number { + return Math.floor(Math.random() * 6) + 1; + } + + public animateDice(): void { + setInterval(() => { + const diceValue = this.getRandomDiceValue(); + this.drawDice(diceValue); + }, 1000); + } +} \ No newline at end of file diff --git a/src/managers/EventManager.ts b/src/managers/EventManager.ts new file mode 100644 index 0000000..53244f8 --- /dev/null +++ b/src/managers/EventManager.ts @@ -0,0 +1,136 @@ +import { Event, EventType, Choice } from '../entities/Event'; +import { Game } from '../Game'; +import { EventSeeds } from '../seeds/EventSeeds'; +import { GameStates } from '../enums/GameStates'; +import { DiceManager, Difficult } from './DiceManager'; + +export class EventManager { + private _titleElement: HTMLElement; + private _subtitleElement: HTMLElement; + private _descriptionElement: HTMLElement; + private _eventPageChoicesBtnListElement: HTMLElement; + private _photographyBorder: HTMLElement; + private _imageElement: HTMLImageElement; + private _currentEvent: Event; + public currentChoice: Choice; + private readonly _game: Game; + + constructor() { + this._titleElement = document.getElementById("event-page-title"); + this._descriptionElement = document.getElementById("event-page-description"); + this._photographyBorder = document.querySelector(".photography-border"); + this._eventPageChoicesBtnListElement = document.getElementById("event-page-choices-btn-list"); + this._subtitleElement = document.getElementById("event-page-subtitle"); + this._imageElement = document.getElementById("event-page-image") as HTMLImageElement; + this._game = Game.getInstance(); + } + + start(): void { + this._eventPageChoicesBtnListElement.innerHTML = ''; + const eventSeeds = new EventSeeds(); + eventSeeds.start(); + let events = eventSeeds.events; + + let randomEventType: number = this._game.getRandomArbitrary(2); + + if (this.checkForMileStone()) { + this._currentEvent = eventSeeds.getMileStoneEvent(); + } else if (randomEventType == 0) { + this._currentEvent = eventSeeds.getPlaceEvent(); + } else { + this._currentEvent = eventSeeds.getCombatEvent(); + } + + this.showWaitingMessage(); + } + + private showChoices() { + this._eventPageChoicesBtnListElement.innerHTML = ''; + let diceManager = new DiceManager(); + for (let choice of this.currentEvent.choices) { + const button = document.createElement("button"); + + if (choice.skillCheck) { + choice.skillCheckFields.difficult = diceManager.getDifficult(choice.skillCheckFields.difficulty); + + let buttonText: string = choice.buttonText + ' [' + + choice.skillCheckFields.difficult.text + ': ' + + choice.skillCheckFields.difficult.value + + ' - ' + diceManager.calculateProbabilityFrom((choice.skillCheckFields.difficult.value - 3)) + ']'; + + button.appendChild(document.createTextNode(buttonText)); + button.classList.add(choice.skillCheckFields.difficult.class); + } else { + button.appendChild(document.createTextNode(choice.buttonText)); + } + + + button.addEventListener('click', () => this.selectChoice(choice)); + this._eventPageChoicesBtnListElement.appendChild(button); + } + } + + private selectChoice(choice: Choice) { + this._game.audioManager.playButtonSound(); + this.currentChoice = choice; + + if (this.currentChoice.skillCheck) { + this._game.stateManager.goToState(GameStates.SKILLCHECK); + return; + } + + if (this.currentEvent.type == EventType.Place && choice.buttonText == 'Investigate') { + this._game.stateManager.goToState(GameStates.ITEM_PICKER); + return; + } + + this.currentChoice.normalResultPath(); + this.checkLogs(); + } + + get currentEvent(): Event { + return this._currentEvent; + } + + private checkForMileStone(): boolean { + return (this._game.distanceToTheBorder == 250 || + this._game.distanceToTheBorder == 200 || + this._game.distanceToTheBorder == 150 || + this._game.distanceToTheBorder == 100 || + this._game.distanceToTheBorder == 50); + } + + showWaitingMessage(): void { + this._titleElement.style.display = 'none'; + this._subtitleElement.style.display = 'none'; + this._photographyBorder.style.display = 'none'; + this._descriptionElement.innerHTML = 'Something happened!' + this._imageElement.style.display = 'none'; + + setTimeout(() => this.showEvent(), 1000); + } + + showEvent(): void { + this._titleElement.style.display = 'block'; + this._subtitleElement.style.display = 'block'; + this._photographyBorder.style.display = 'block'; + this._titleElement.innerHTML = this._currentEvent.title; + this._subtitleElement.innerHTML = this._currentEvent.subtitle; + this._descriptionElement.innerHTML = this._currentEvent.description; + + if (this._currentEvent.image != '') { + this._imageElement.src = 'img\\places\\' + this._currentEvent.image + '.jpg'; + } + + this._imageElement.style.display = 'block'; + this.showChoices(); + } + + checkLogs(): void { + if (this._game.log.isThereAnyTemporaryLog()) { + this._game.stateManager.goToState(GameStates.LOG); + } else { + this._game.stateManager.goToState(GameStates.TRAVEL); + } + } +} \ No newline at end of file diff --git a/src/managers/GameOverManager.ts b/src/managers/GameOverManager.ts new file mode 100644 index 0000000..361cf86 --- /dev/null +++ b/src/managers/GameOverManager.ts @@ -0,0 +1,27 @@ +import { Game } from '../Game'; + +export class GameOverManager { + private _gameOverMessage: Element; + private readonly _game: Game; + private _tryAgainBtn: Element; + + constructor() { + this._game = Game.getInstance(); + this._gameOverMessage = document.querySelector("#game-over-message"); + this._tryAgainBtn = document.querySelector('#try-again-btn'); + } + + start(): void { + this._tryAgainBtn.addEventListener('click', () => { this.onClickTryAgainBtn() }); + this.setGameOverMessage('You died with ' + this._game.distanceToTheBorder + ' miles to the border'); + } + + private onClickTryAgainBtn() { + this._game.audioManager.playButtonSound(); + location.reload(); + } + + setGameOverMessage(message: string): void { + this._gameOverMessage.innerHTML = message; + } +} \ No newline at end of file diff --git a/src/managers/ItemPickerManager.ts b/src/managers/ItemPickerManager.ts new file mode 100644 index 0000000..ec63250 --- /dev/null +++ b/src/managers/ItemPickerManager.ts @@ -0,0 +1,169 @@ +import { Game } from '../Game'; +import { Item } from '../entities/Item'; +import { ItemSeeds } from '../seeds/ItemSeeds' +import { GameStates } from '../enums/GameStates'; +import { LogType } from '../managers/LogManager'; +import { Character } from '../entities/Character'; + +export class ItemPickerManager { + private readonly _game: Game; + private _itemsToPickListElement: any; + private _myItemsListElement: any; + private _itemsToPick: Item[] = []; + private _myItems: Item[] = []; + private _itemsFoundTitle: HTMLElement; + private _yourItemsTitle: HTMLElement; + private _pageMessageElement: HTMLElement; + private _myItemsMax: number = 2; + private _takeAllBtn: HTMLButtonElement; + public itemsFound: number = 4; + private _continueBtn: HTMLButtonElement; + private character: Character; + + constructor() { + this._game = Game.getInstance(); + + this._continueBtn = document.querySelector('#item-picker-page-continue-btn'); + this._continueBtn.addEventListener('click', () => { this.onContinueBtn() }); + this._itemsToPickListElement = document.querySelector('#item-picker-page-items-to-pick'); + this._itemsFoundTitle = document.querySelector('#items-found-title'); + this._pageMessageElement = document.querySelector('#item-picker-page-message'); + this._myItemsListElement = document.querySelector('#item-picker-page-item-my-items'); + this._yourItemsTitle = document.querySelector('#your-items-title'); + this._takeAllBtn = document.querySelector('#item-picker-page-take-all-btn'); + } + + public start(): void { + this.showPageMessage(); + this._itemsToPick = []; + this._myItems = []; + + this.character = this._game.characterManager.picksACharacterAtRandom(); + + for (let i = 0; i < this.itemsFound; i++) { + let itemFounded: Item = ItemSeeds.getOneRandomItem(); + this.addItemToPick(itemFounded); + } + + this.showItems(); + } + + private showPageMessage() { + this._itemsFoundTitle.style.display = 'none'; + this._continueBtn.style.display = 'none'; + this._itemsToPickListElement.style.display = 'none'; + this._myItemsListElement.style.display = 'none'; + this._yourItemsTitle.style.display = 'none'; + this._takeAllBtn.style.display = 'none'; + + this._pageMessageElement.style.display = 'block'; + + setTimeout(() => this.showPageElements(), 1500); + } + + private showPageElements() { + this._itemsFoundTitle.style.display = 'block'; + this._continueBtn.style.display = 'block'; + this._itemsToPickListElement.style.display = 'block'; + this._myItemsListElement.style.display = 'block'; + this._yourItemsTitle.style.display = 'block'; + this._takeAllBtn.style.display = 'block'; + + this._pageMessageElement.style.display = 'none'; + } + + private showItems() { + if (this._itemsToPick.length <= (this._myItemsMax - this._myItems.length)) { + this._takeAllBtn.disabled = false; + } else { + this._takeAllBtn.disabled =true; + } + + this.showItemsToPick(); + this.showMyItems(); + } + + private showItemsToPick() { + this._itemsToPickListElement.innerHTML = ''; + + for (let item of this._itemsToPick) { + const li = document.createElement("li"); + const button = document.createElement("button"); + button.appendChild(document.createTextNode(item.name + ' (' + item.effect + ') ' + item.showAmount())); + button.addEventListener('click', () => this.selectItemToPick(item)); + + if (this._myItems.length >= this._myItemsMax) { + button.disabled = true; + } + + li.appendChild(button); + this._itemsToPickListElement.appendChild(li); + } + } + + private showMyItems() { + this._yourItemsTitle.innerHTML = 'Your items - (' + this._myItems.length + '/' + this._myItemsMax + ')'; + this._myItemsListElement.innerHTML = ''; + + for (let item of this._myItems) { + const li = document.createElement("li"); + const button = document.createElement("button"); + button.appendChild(document.createTextNode(item.name + ' (' + item.effect + ') ' + item.showAmount())); + button.addEventListener('click', () => this.selectItemMyItem(item)); + li.appendChild(button); + this._myItemsListElement.appendChild(li); + } + } + + private selectItemToPick(selectedItem: Item) { + this._game.audioManager.playTakeItemSound(); + this.removeItemToPick(selectedItem.name); + this.addMyItem(selectedItem); + this.showItems(); + } + + private selectItemMyItem(selectedItem: Item) { + this._game.audioManager.playThrowSound(); + this.removeMyItem(selectedItem.name); + this.addItemToPick(selectedItem); + this.showItems(); + } + + public removeItemToPick(itemName: string): void { + this._itemsToPick = this._itemsToPick.filter(item => item.name !== itemName); + } + + public removeMyItem(itemName: string): void { + this._myItems = this._myItems.filter(item => item.name !== itemName); + } + + addItemToPick(itemToPut: Item): void { + let existingItemIndex = this._itemsToPick.findIndex(item => item.name == itemToPut.name); + + if (existingItemIndex >= 0) { + this._itemsToPick[existingItemIndex].increaseAmount(); + } else { + this._itemsToPick.push(itemToPut); + } + } + + addMyItem(itemToPut: Item): void { + let existingItemIndex = this._myItems.findIndex(item => item.name == itemToPut.name); + + if (existingItemIndex >= 0) { + this._myItems[existingItemIndex].increaseAmount(); + } else { + this._myItems.push(itemToPut); + } + } + + private onContinueBtn() { + this._game.audioManager.playButtonSound(); + for (let i = 0; i < this._myItems.length; i++) { + this._game.bagManager.putItem(this._myItems[i]); + this._game.log.addTempLog(this.character.name + ' picked up ' + this._myItems[i].name, LogType.Result); + } + + this._game.stateManager.goToState(GameStates.LOG); + } +} \ No newline at end of file diff --git a/src/managers/LocalizationManager.ts b/src/managers/LocalizationManager.ts new file mode 100644 index 0000000..be7b992 --- /dev/null +++ b/src/managers/LocalizationManager.ts @@ -0,0 +1,29 @@ +import { Game } from '../Game'; +import * as EnUs from '../localization/en-us.json'; +import * as PtBr from '../localization/pt-br.json'; + +export enum Language { + EnUs, + PtBr +} + +export class LocalizationManager { + private _currentLanguage: Language; + private readonly _game: Game; + + constructor(language: Language) { + this._game = Game.getInstance(); + this._currentLanguage = language; + } + + public l(key: string): string { + switch(this._currentLanguage) { + case Language.EnUs: + return EnUs[key]; + case Language.PtBr: + return PtBr[key]; + default: + return 'Localization Error'; + } + } +} \ No newline at end of file diff --git a/src/managers/LogManager.ts b/src/managers/LogManager.ts new file mode 100644 index 0000000..7c280f7 --- /dev/null +++ b/src/managers/LogManager.ts @@ -0,0 +1,142 @@ +import { Character } from '../entities/Character'; +import { Game } from '../Game'; +import { GameStates } from '../enums/GameStates'; + +export enum LogType { + Result, + StatusChange +} + +export class LogManager { + private _logListResult: Element; + private _logListStatusChange: Element; + private _travelBtn: HTMLButtonElement; + private _tempResultLogs: string[] = []; + private _tempoStatusChangeLogs: string[] = []; + private _logs: string[] = []; + private readonly _game: Game; + + constructor() { + this._game = Game.getInstance(); + + this._logListResult = document.querySelector("#log-list-result"); + this._logListStatusChange = document.querySelector("#log-list-status-change"); + + this._travelBtn = document.querySelector("#log-back-character-btn"); + this._travelBtn.addEventListener('click', () => { this.onClickTravel() }); + } + + start(): void { + this._travelBtn.disabled = true; + this.showLogs(); + } + + showLogs(): void { + this._logs = this._tempoStatusChangeLogs; + this._tempoStatusChangeLogs = []; + this._logListResult.innerHTML = ''; + this._logListStatusChange.innerHTML = ''; + this.showResultLogs(); + } + + private showResultLogs(): void { + let count: number = 0; + let result_logs = ''; + + let stop = setInterval(() => { + if (count < this._tempResultLogs.length) { + this._game.audioManager.playWriteSound(); + result_logs += '
          • ' + this._tempResultLogs[count] + '
          • '; + this._logListResult.innerHTML = result_logs; + count++; + } else { + this._game.audioManager.playDingSound(); + clearInterval(stop); + this._logs = this._tempResultLogs; + this._tempResultLogs = []; + this._logListStatusChange.innerHTML = this.createLogsForStatusChange(); + this._game.characterManager.savePreviousCharacters(); + this._travelBtn.disabled = false; + } + }, 800); + } + + createLogsForStatusChange(): string { + let previousCharacters = this._game.characterManager.previousCharacters; + let currentCharacters = this._game.characterManager.characters; + + let status_change_logs = ''; + + for (let i = 0; i < previousCharacters.length; i++) { + let previousCharacter = previousCharacters[i]; + let currentCharacter = currentCharacters[i]; + + if (!currentCharacter.isDead) { + if (previousCharacter.health != currentCharacter.health || + previousCharacter.hungry != currentCharacter.hungry || + previousCharacter.stamina != currentCharacter.stamina) { + status_change_logs += '
          • ' + currentCharacter.name + ' '; + + if (previousCharacter.health != currentCharacter.health) { + if (previousCharacter.health > currentCharacter.health) { + status_change_logs += '❤️ -' + (previousCharacter.health - currentCharacter.health) + '% '; + } else { + status_change_logs += '❤️ +' + (currentCharacter.health - previousCharacter.health) + '% '; + } + } + + if (previousCharacter.hungry != currentCharacter.hungry) { + if (previousCharacter.hungry > currentCharacter.hungry) { + status_change_logs += '🥫 -' + (previousCharacter.hungry - currentCharacter.hungry) + '% '; + } else { + status_change_logs += '🥫 +' + (currentCharacter.hungry - previousCharacter.hungry) + '% '; + } + } + + if (previousCharacter.stamina != currentCharacter.stamina) { + if (previousCharacter.stamina > currentCharacter.stamina) { + status_change_logs += '⚡ -' + (previousCharacter.stamina - currentCharacter.stamina) + '% '; + } else { + status_change_logs += '⚡ +' + (currentCharacter.stamina - previousCharacter.stamina) + '% '; + } + } + + status_change_logs += '
          • '; + } + } + } + + return status_change_logs; + } + + clearLogs(): void { + this._logListResult.innerHTML = ''; + this._logListStatusChange.innerHTML = ''; + } + + onClickTravel() { + this._game.audioManager.playButtonSound(); + let characters: Character[] = this._game.characterManager.getCharactersDead(); + + for (let character of characters) { + if (character.isDead && !character.buried) { + this._game.stateManager.goToState(GameStates.RIP); + return; + } + } + + this._game.stateManager.goToState(GameStates.TRAVEL); + } + + isThereAnyTemporaryLog(): boolean { + return this._tempResultLogs.length > 0 || this._tempoStatusChangeLogs.length > 0; + } + + addTempLog(log: string, logType: LogType) { + if (logType == LogType.Result) { + this._tempResultLogs.push(log); + } else if (logType == LogType.StatusChange) { + this._tempoStatusChangeLogs.push(log); + } + } +} \ No newline at end of file diff --git a/src/managers/MapManager.ts b/src/managers/MapManager.ts new file mode 100644 index 0000000..bb228b5 --- /dev/null +++ b/src/managers/MapManager.ts @@ -0,0 +1,12 @@ +import { Game } from '../Game'; + +export class MapManager { + private readonly _game: Game; + + constructor() { + this._game = Game.getInstance(); + } + + public start(): void { + } +} \ No newline at end of file diff --git a/src/managers/RipManager.ts b/src/managers/RipManager.ts new file mode 100644 index 0000000..0cabb3a --- /dev/null +++ b/src/managers/RipManager.ts @@ -0,0 +1,53 @@ +import { Game } from '../Game'; +import { Character } from '../entities/Character'; +import { GameStates } from '../enums/GameStates'; + +export class RipManager { + private _ripPageImageElement: HTMLImageElement; + private _ripPageNameElement: Element; + private _ripPageDatesElement: Element; + private _ripPageQuoteElement: Element; + private _ripPageStatusElement: Element; + + private _travelBtn: HTMLButtonElement; + + private readonly _game: Game; + + constructor() { + this._game = Game.getInstance(); + + this._ripPageImageElement = document.querySelector("#rip-page-image") as HTMLImageElement; + this._ripPageNameElement = document.querySelector("#rip-page-name"); + this._ripPageDatesElement = document.querySelector("#rip-page-dates"); + this._ripPageQuoteElement = document.querySelector("#rip-page-quote"); + this._ripPageStatusElement = document.querySelector("#rip-page-status"); + + this._travelBtn = document.querySelector('#rip-page-back-btn'); + this._travelBtn.addEventListener('click', () => { this.onClickTravel() }); + } + + start(): void { + const character: Character = this._game.characterManager.getFirstCharacterDeadAndNotBuried(); + this.showCharater(character); + character.buried = true; + } + + showCharater(character: Character) { + this._ripPageImageElement.src = character.imageURL; + this._ripPageNameElement.innerHTML = character.name + ' Miller'; + this._ripPageDatesElement.innerHTML = '⭐ 02/02/1996 - 20/03/2020 ✝️'; + this._ripPageQuoteElement.innerHTML = 'I pray you find peace and rest wherever you are'; + this._ripPageStatusElement.innerHTML = 'Status: Starved to death'; + } + + onClickTravel() { + this._game.audioManager.playButtonSound(); + const character: Character = this._game.characterManager.getFirstCharacterDeadAndNotBuried(); + if (character != null) { + this.showCharater(character); + character.buried = true; + } else { + this._game.stateManager.goToState(GameStates.TRAVEL); + } + } +} diff --git a/src/managers/SkillCheckManager.ts b/src/managers/SkillCheckManager.ts new file mode 100644 index 0000000..71b48c8 --- /dev/null +++ b/src/managers/SkillCheckManager.ts @@ -0,0 +1,196 @@ +import { Dice } from '../entities/Dice'; +import { Game } from '../Game'; +import { GameStates } from '../enums/GameStates'; +import { Choice } from '../entities/Event'; +import { DiceManager } from './DiceManager'; + +export enum SkillCheckResults { + Success, + Failure +} + +export class SkillCheckManager { + private readonly _game: Game; + private _travelBtn: HTMLButtonElement; + private _firstDice: HTMLElement; + private _secondDice: HTMLElement; + private _skillCheckExpected: HTMLElement; + private _skillCheckResultValue: HTMLElement; + private _skillCheckResultValueLabel: HTMLElement; + public _resultLabel: HTMLElement; + private _diceTimer: any; + private _diceManager: DiceManager; + private _currentChoice: Choice; + + constructor() { + this._game = Game.getInstance(); + + this._resultLabel = document.querySelector("#skill-check-result-label"); + this._skillCheckResultValue = document.querySelector("#skill-check-result-value"); + this._skillCheckResultValueLabel = document.querySelector("#skill-check-result-value-label"); + + this._travelBtn = document.querySelector("#skill-check-back-btn"); + this._firstDice = document.querySelector("#first-dice"); + this._secondDice = document.querySelector("#second-dice"); + this._skillCheckExpected = document.querySelector("#skill-check-expected"); + + this._travelBtn.addEventListener('click', () => { this.onClickTravel() }); + this._diceManager = new DiceManager("teste"); + } + + start(): void { + this._travelBtn.disabled = true; + this._resultLabel.style.visibility = 'hidden'; + setTimeout(() => { this.startDiceRoll() }, 100); + } + + startDiceRoll() { + let dice = new Dice(); + this._game.audioManager.playDiceSound(); + this._diceTimer = setInterval(() => { this.shakeDice(dice) }, 50); + setTimeout(() => { this.stopShakeDice(dice) }, 500); + this._currentChoice = this._game.eventManager.currentChoice; + } + + onClickTravel() { + this._game.audioManager.playButtonSound(); + if (this._game.skillCheckResult == SkillCheckResults.Success) { + this._currentChoice.skillCheckFields.resultPath.success(); + + if (this._currentChoice.skillCheckFields.canGiveItems) { + this._game.stateManager.goToState(GameStates.ITEM_PICKER); + return; + } + + } else if (this._game.skillCheckResult == SkillCheckResults.Failure) { + this._currentChoice.skillCheckFields.resultPath.failure(); + } + + this._game.stateManager.goToState(GameStates.LOG); + } + + private shakeDice(dice: Dice): void { + let firstDiceValue = dice.roll(); + let secondDiceValue = dice.roll(); + this.showDiceValues(firstDiceValue, secondDiceValue); + } + + private stopShakeDice(dice: Dice): void { + clearInterval(this._diceTimer); + this._resultLabel.style.visibility = 'visible'; + + let firstDiceValue = dice.roll(); + let secondDiceValue = dice.roll(); + let characterStrength = 3; + let expectedValue = this._currentChoice.skillCheckFields.difficult.value; + let finalValue = firstDiceValue + secondDiceValue + characterStrength; + this.showDiceValues(firstDiceValue, secondDiceValue); + + this._skillCheckResultValue.style.textAlign = 'center'; + this._skillCheckResultValue.innerHTML = finalValue.toString(); + this._skillCheckExpected.innerHTML = 'Expected: ' + expectedValue.toString(); + + this._travelBtn.disabled = false; + + if (firstDiceValue + secondDiceValue == 12) { + this._game.audioManager.playSuccessSound(); + this.setCriticalSuccess(); + this._game.skillCheckResult = SkillCheckResults.Success; + return; + } + + if (firstDiceValue + secondDiceValue == 2) { + this._game.audioManager.playFailSound(); + this.setCriticalFailure(); + this._game.skillCheckResult = SkillCheckResults.Failure; + return; + } + + if (finalValue >= expectedValue) { + this._game.audioManager.playSuccessSound(); + this.setSuccess(); + this._game.skillCheckResult = SkillCheckResults.Success; + return; + } + + if (finalValue < expectedValue) { + this._game.audioManager.playFailSound(); + this.setFailure(); + this._game.skillCheckResult = SkillCheckResults.Failure; + return; + } + } + + private showDiceValues(firstDiceValue: number, secondDiceValue: number): void { + this._firstDice.innerHTML = firstDiceValue.toString(); + this._secondDice.innerHTML = secondDiceValue.toString(); + } + + public setCriticalSuccess(): void { + this._skillCheckResultValue.style.visibility = 'hidden'; + this._skillCheckResultValueLabel.style.visibility = 'hidden'; + this._skillCheckResultValue.classList.remove('red-color'); + this._skillCheckResultValue.classList.add('green-color'); + + this._firstDice.classList.add('green-color'); + this._secondDice.classList.add('green-color'); + this._firstDice.classList.remove('red-color'); + this._secondDice.classList.remove('red-color'); + + this._resultLabel.innerHTML = ' CRITICIAL SUCCESS '; + this._resultLabel.style.fontSize = '1.3em'; + this._resultLabel.classList.remove('red-color'); + this._resultLabel.classList.add('green-color'); + } + + public setSuccess(): void { + this._skillCheckResultValue.style.visibility = 'visible'; + this._skillCheckResultValueLabel.style.visibility = 'visible'; + this._skillCheckResultValue.classList.remove('red-color'); + this._skillCheckResultValue.classList.add('green-color'); + + this._firstDice.classList.remove('green-color'); + this._secondDice.classList.remove('green-color'); + this._firstDice.classList.remove('red-color'); + this._secondDice.classList.remove('red-color'); + + this._resultLabel.innerHTML = ' SUCCESS '; + this._resultLabel.style.fontSize = '2.5em'; + this._resultLabel.classList.remove('red-color'); + this._resultLabel.classList.add('green-color'); + } + + public setCriticalFailure(): void { + this._skillCheckResultValue.style.visibility = 'hidden'; + this._skillCheckResultValueLabel.style.visibility = 'hidden'; + this._skillCheckResultValue.classList.add('red-color'); + this._skillCheckResultValue.classList.remove('green-color'); + + this._firstDice.classList.remove('green-color'); + this._secondDice.classList.remove('green-color'); + this._firstDice.classList.add('red-color'); + this._secondDice.classList.add('red-color'); + + this._resultLabel.innerHTML = ' CRITICIAL FAILURE '; + this._resultLabel.style.fontSize = '1.3em'; + this._resultLabel.classList.add('red-color'); + this._resultLabel.classList.remove('green-color'); + } + + public setFailure(): void { + this._skillCheckResultValue.style.visibility = 'visible'; + this._skillCheckResultValueLabel.style.visibility = 'visible'; + this._skillCheckResultValue.classList.add('red-color'); + this._skillCheckResultValue.classList.remove('green-color'); + + this._firstDice.classList.remove('green-color'); + this._secondDice.classList.remove('green-color'); + this._firstDice.classList.remove('red-color'); + this._secondDice.classList.remove('red-color'); + + this._resultLabel.innerHTML = ' FAILURE '; + this._resultLabel.style.fontSize = '2.5em'; + this._resultLabel.classList.add('red-color'); + this._resultLabel.classList.remove('green-color'); + } +} \ No newline at end of file diff --git a/src/managers/SkillUpManager.ts b/src/managers/SkillUpManager.ts new file mode 100644 index 0000000..c6a82f4 --- /dev/null +++ b/src/managers/SkillUpManager.ts @@ -0,0 +1,12 @@ +import { Game } from '../Game'; + +export class SkillUpManager { + private readonly _game: Game; + + constructor() { + this._game = Game.getInstance(); + } + + public start(): void { + } +} \ No newline at end of file diff --git a/src/managers/StateManager.ts b/src/managers/StateManager.ts new file mode 100644 index 0000000..4a43903 --- /dev/null +++ b/src/managers/StateManager.ts @@ -0,0 +1,71 @@ +import { Game } from '../Game'; +import { GameStates } from '../enums/GameStates'; + +export class StateManager { + private readonly _game: Game; + public currentState: GameStates = GameStates.TRAVEL; + + constructor() { + this._game = Game.getInstance(); + } + + start(): void { + } + + public setState(): void { + this._game.hideAllPages(); + + switch(this.currentState) { + case GameStates.TRAVEL: + this._game.showPage(this._game.travelPage); + this._game.travelManager.start(); + break; + case GameStates.EVENT: + this._game.showPage(this._game.eventPage); + this._game.eventManager.start(); + break; + case GameStates.SKILLCHECK: + this._game.showPage(this._game.skillCheckPage); + this._game.skillCheckManager.start(); + break; + case GameStates.LOG: + this._game.showPage(this._game.logPage); + this._game.logManager.start(); + break; + case GameStates.GAME_OVER: + this._game.showPage(this._game.gameOverPage); + this._game.gameOverManager.start(); + break; + case GameStates.RIP: + this._game.showPage(this._game.ripPage); + this._game.ripManager.start(); + break; + case GameStates.BAG: + this._game.showPage(this._game.bagPage); + this._game.bagManager.start(); + break; + case GameStates.ITEM_PICKER: + this._game.showPage(this._game.itemPickerPage); + this._game.itemPickerManager.start(); + break; + case GameStates.SKILL_UP: + this._game.showPage(this._game.skillUpPage); + this._game.skillUpManager.start(); + break; + case GameStates.DIALOG: + this._game.showPage(this._game.dialogPage); + this._game.dialogManager.start(); + break; + case GameStates.MAP: + this._game.showPage(this._game.mapPage); + this._game.mapManager.start(); + } + } + + public goToState(state: GameStates): void { + if (this.currentState == GameStates.GAME_OVER) return; + + this.currentState = state; + this.setState(); + } +} \ No newline at end of file diff --git a/src/managers/TravelManager.ts b/src/managers/TravelManager.ts new file mode 100644 index 0000000..6d24768 --- /dev/null +++ b/src/managers/TravelManager.ts @@ -0,0 +1,291 @@ +import { Game } from '../Game'; +import { GameStates } from '../enums/GameStates'; +import { Character } from '../entities/Character'; +import { LogType } from '../managers/LogManager'; + +export class TravelManager { + private _travelledDistanceField: Element; + private _progressBarCanvasElement: HTMLCanvasElement; + private _progressBarCanvasContext: CanvasRenderingContext2D; + private _walkBtn: HTMLButtonElement; + private _campBtn: HTMLButtonElement; + private _yourFamily: HTMLButtonElement; + private _game: Game; + private _charactersList: any; + private _bagBtn: HTMLButtonElement; + private _hoursSleeping: number; + private _sleepIntervalId: any; + + constructor() { + this._game = Game.getInstance(); + + this._travelledDistanceField = document.querySelector("#travelled-distance"); + this._progressBarCanvasElement = document.getElementById("progress-bar") as HTMLCanvasElement; + this._walkBtn = document.querySelector("#walk-btn"); + this._campBtn = document.querySelector("#camp-btn"); + this._yourFamily = document.querySelector('#your-family'); + + this._walkBtn.addEventListener('click', () => { this.onClickWalkBtn() }); + this._campBtn.addEventListener('click', () => { this.onClickCampBtn() }); + + this.showTravelledDistance(); + + this._charactersList = []; + + this._bagBtn = document.querySelector('#bag-btn'); + this._bagBtn.addEventListener('click', () => { this.onClickBag() }); + this.getAtributesPageElements(); + } + + start(): void { + this.showProgressBarCanvas(); + this._walkBtn.innerHTML = this._game.loc.l('walk-one-hour'); + this._yourFamily.innerHTML = this._game.loc.l('your-family'); + /* + if (this._game.characterManager.isInDanger()) { + this._statsBtn.innerHTML = '⚠️Your Family'; + } else { + this._statsBtn.innerHTML = 'Your Family'; + }*/ + + if (this._game.bagManager.isEmpty()) { + this._bagBtn.innerHTML = this._game.loc.l('bag-is-empty'); + this._bagBtn.disabled = true; + } else { + this._bagBtn.disabled = false; + this._bagBtn.innerHTML = 'Open bag (' + this._game.bagManager.showQuantityOfItems() + ') '; + } + + this.showCharacters(); + this.checkCampBtn(); + } + + private showProgressBarCanvas(): void { + this._progressBarCanvasElement.width = 300; + this._progressBarCanvasElement.height = 8; + this._progressBarCanvasContext = this._progressBarCanvasElement.getContext("2d"); + this.drawBackground(); + console.log(this._game.distanceToTheBorder); + this.drawPlayerPositionOnProgressBarCanvas(300 - this._game.distanceToTheBorder); + } + + private drawBackground(): void { + this._progressBarCanvasContext.clearRect(0, 0, this._progressBarCanvasElement.width, this._progressBarCanvasElement.height); + this._progressBarCanvasContext.beginPath(); + + this._progressBarCanvasContext.fillStyle = 'black'; + this._progressBarCanvasContext.fillRect(0,0, this._progressBarCanvasElement.width, this._progressBarCanvasElement.height); + + this._progressBarCanvasContext.strokeStyle = "#2c3e50"; + this._progressBarCanvasContext.lineWidth = 1; + + this._progressBarCanvasContext.moveTo(10, this._progressBarCanvasElement.height / 2); + this._progressBarCanvasContext.lineTo(300 - 10, this._progressBarCanvasElement.height / 2); + this._progressBarCanvasContext.stroke(); + + this._progressBarCanvasContext.moveTo(10, (this._progressBarCanvasElement.height / 2) - 5); + this._progressBarCanvasContext.lineTo(10, (this._progressBarCanvasElement.height / 2) + 5); + this._progressBarCanvasContext.stroke(); + + this._progressBarCanvasContext.moveTo(this._progressBarCanvasElement.width / 2, (this._progressBarCanvasElement.height / 2) - 5); + this._progressBarCanvasContext.lineTo(this._progressBarCanvasElement.width / 2, (this._progressBarCanvasElement.height / 2) + 5); + this._progressBarCanvasContext.stroke(); + + this._progressBarCanvasContext.moveTo(this._progressBarCanvasElement.width / 4, (this._progressBarCanvasElement.height / 2) - 5); + this._progressBarCanvasContext.lineTo(this._progressBarCanvasElement.width / 4, (this._progressBarCanvasElement.height / 2) + 5); + this._progressBarCanvasContext.stroke(); + + this._progressBarCanvasContext.moveTo((this._progressBarCanvasElement.width / 4) * 3, (this._progressBarCanvasElement.height / 2) - 5); + this._progressBarCanvasContext.lineTo((this._progressBarCanvasElement.width / 4) * 3, (this._progressBarCanvasElement.height / 2) + 5); + this._progressBarCanvasContext.stroke(); + + this._progressBarCanvasContext.moveTo(this._progressBarCanvasElement.width - 10, (this._progressBarCanvasElement.height / 2) - 5); + this._progressBarCanvasContext.lineTo(this._progressBarCanvasElement.width - 10, (this._progressBarCanvasElement.height / 2) + 5); + this._progressBarCanvasContext.stroke(); + + this._progressBarCanvasContext.beginPath(); + this._progressBarCanvasContext.moveTo(this._progressBarCanvasElement.width - 10, (this._progressBarCanvasElement.height / 2) - 5); + this._progressBarCanvasContext.lineTo(this._progressBarCanvasElement.width - 10, (this._progressBarCanvasElement.height / 2) + 5); + this._progressBarCanvasContext.stroke(); + this._progressBarCanvasContext.closePath(); + } + + private drawPlayerPositionOnProgressBarCanvas(mile: number): void { + const lineSize = this._progressBarCanvasElement.width - 20; + const unit = lineSize / 300; + const unitsToWalk = mile * unit; + + this._progressBarCanvasContext.beginPath(); + this._progressBarCanvasContext.arc(unitsToWalk + 10, this._progressBarCanvasElement.height / 2, 3.5, 0, 2 * Math.PI); + this._progressBarCanvasContext.lineWidth = 0; + this._progressBarCanvasContext.fillStyle = "#27ae60"; + this._progressBarCanvasContext.fill(); + } + + onClickCampBtn(): void { + this._bagBtn.disabled = true; + this._campBtn.disabled = true; + this._walkBtn.disabled = true; + this._yourFamily.innerHTML = 'Camping...'; + this._hoursSleeping = 0; + this._sleepIntervalId = window.setInterval(() => this.sleeping(), 500); + } + + sleeping(): void { + if (this._hoursSleeping <= 6) { + let characters = this._game.characters; + + for (let i = 0; i < characters.length; i++){ + let character = characters[i]; + + if (!character.isDead) { + const randomNumber = this._game.getRandomArbitrary(3); + this._charactersList[i].atributesField.innerHTML = randomNumber == 0 ? "Zzz" : randomNumber == 1 ? "zZz" : "zzZ"; + } + } + + this._game.passOneHour(); + this._hoursSleeping++; + } else { + this._game.characterManager.increaseStaminaOfAllCharactersToMax(); + this.showCharacters(); + this._bagBtn.disabled = false; + this._campBtn.disabled = false; + this._walkBtn.disabled = false; + this._yourFamily.innerHTML = this._game.loc.l('your-family'); + clearInterval(this._sleepIntervalId); + } + } + + onClickWalkBtn(): void { + if (this._game.distanceToTheBorder == 300) { + this._game.audioManager.playRainSound(); + } + + this._game.audioManager.playButtonSound(); + this._game.passOneHour(); + this.walkOneHour(); + + let foundEvent = this.checkEvent(); + if (foundEvent) { + this._game.stateManager.goToState(GameStates.EVENT); + } else if (this._game.log.isThereAnyTemporaryLog()) { + + let randomCharacter = this._game.characterManager.picksACharacterAtRandom(); + let walkMessages = [ + randomCharacter.name + ' is feeling anxious...', + randomCharacter.name + ' is thoughtful...', + randomCharacter.name + ' feels a tightness in the heart...', + 'The family continued walking...', + 'The walk was smooth...', + 'Nothing different...' + ]; + + const message: string = walkMessages[this._game.getRandomArbitrary(walkMessages.length - 1)]; + + this._game.log.addTempLog(message, LogType.Result); + this._game.stateManager.goToState(GameStates.LOG); + } + + this.checkCampBtn(); + } + + checkCampBtn(): void { + if (this._game.isDayLight()) { + this._campBtn.disabled = true; + this._campBtn.innerHTML = "It's not safe to camp"; + } else { + this._campBtn.disabled = false; + this._campBtn.innerHTML = 'Camp (+6 hour)'; + } + } + + onClickBag() { + this._game.audioManager.playButtonSound(); + this._game.stateManager.goToState(GameStates.BAG); + } + + getAtributesPageElements(): void { + this._charactersList[0] = {}; + this._charactersList[0].nameField = document.querySelector("#first-character-name-field"); + this._charactersList[0].atributesField = document.querySelector("#first-character-atributes-field"); + this._charactersList[0].afflictionsField = document.querySelector("#first-character-afflictions-field"); + + this._charactersList[1] = {}; + this._charactersList[1].nameField = document.querySelector("#second-character-name-field"); + this._charactersList[1].atributesField = document.querySelector("#second-character-atributes-field"); + this._charactersList[1].afflictionsField = document.querySelector("#second-character-afflictions-field"); + + this._charactersList[2] = {}; + this._charactersList[2].nameField = document.querySelector("#third-character-name-field"); + this._charactersList[2].atributesField = document.querySelector("#third-character-atributes-field"); + this._charactersList[2].afflictionsField = document.querySelector("#third-character-afflictions-field"); + + this._charactersList[3] = {}; + this._charactersList[3].nameField = document.querySelector("#fourth-character-name-field"); + this._charactersList[3].atributesField = document.querySelector("#fourth-character-atributes-field"); + this._charactersList[3].afflictionsField = document.querySelector("#fourth-character-afflictions-field"); + } + + showCharacters(): void { + let characters = this._game.characters; + + for (let i = 0; i < characters.length; i++){ + let character = characters[i]; + + if (character.isDead) { + this._charactersList[i].nameField.innerHTML = character.name + ' - ' + character.kinship + ' 💀'; + this._charactersList[i].atributesField.innerHTML = character.getDateOfBirth() + ' - 2020'; + this._charactersList[i].afflictionsField.innerHTML = ''; + } else { + let healthPerHour: number = character.showHealthLostPerHourDueToAllStatus(); + this._charactersList[i].nameField.innerHTML = character.name + ' - ' + character.kinship; + this._charactersList[i].nameField.innerHTML += character.getSickness() == 'Sick' ? ' [ Sick ]' : ''; + this._charactersList[i].atributesField.innerHTML = character.getHealth() + + (healthPerHour == 0 ? ' ' : (' (-' + character.showHealthLostPerHourDueToAllStatus() + '%) ')) + + character.getStamina() + ' ' + + character.getHungry(); + this._charactersList[i].afflictionsField.innerHTML = character.showAfflictions(); + } + } + } + + checkEvent() { + return this.getRandomArbitrary(1, 100) <= 50; + } + + getRandomArbitrary(min: number, max: number): number { + return Math.random() * (max - min) + min; + } + + walkOneHour() { + this._game.characterManager.decreaseStaminaOfAllCharacters(5); + this._game.characterManager.increaseHungryOfAllCharacters(); + + const characters: Character[] = this._game.characterManager.getCharactersAlive(); + + for (let character of characters) { + character.walkOneHour(); + } + + this._game.decreaseTheDistanceToTheBorder(2); + + this.showTravelledDistance(); + + if(this._game.distanceToTheBorder <= 0) { + this.arrivedAtTheBorder(); + } + } + + getRandomCharacter() { + return Math.floor(Math.random() * (this._game.characters.length)); + } + + showTravelledDistance() { + this._travelledDistanceField.innerHTML = this._game.distanceToTheBorder + ' ' + this._game.loc.l('miles-to-the-border'); + } + + arrivedAtTheBorder() { + this._game.stateManager.goToState(GameStates.GAME_OVER); + } +} \ No newline at end of file diff --git a/src/seeds/AfflictionSeeds.ts b/src/seeds/AfflictionSeeds.ts new file mode 100644 index 0000000..1009ffc --- /dev/null +++ b/src/seeds/AfflictionSeeds.ts @@ -0,0 +1,28 @@ +import { Status } from '../entities/Status'; + +export class StatusSeeds { + public static items: Status[] = [ + new Status('Anxiety', 5), + new Status('Blood loss', 30), + new Status('Broken ribs', 25), + new Status('Depressed', 5), + new Status('Dysentery', 30), + new Status('Fear', 10), + new Status('Food poisoning', 20), + new Status('Infection', 10), + new Status('Pain', 5), + new Status('Wounds', 15) + ]; + + public static getStatusByName(name: string): Status { + return StatusSeeds.items.find(affliction => affliction.name == name); + } + + public static getOneRandomStatus(): Status { + return StatusSeeds.items[StatusSeeds.getRandomArbitrary(0, StatusSeeds.items.length)]; + } + + private static getRandomArbitrary(min: number, max: number) { + return Math.floor(Math.random() * (max - min) + min); + } +} \ No newline at end of file diff --git a/src/seeds/EnemySeeds.ts b/src/seeds/EnemySeeds.ts new file mode 100644 index 0000000..af008ea --- /dev/null +++ b/src/seeds/EnemySeeds.ts @@ -0,0 +1,56 @@ +import { Enemy } from '../entities/Enemy'; +import { Difficulties } from '../enums/Difficulties'; + +export enum EnemyTypes { + WildAnimal, + Human, + Supernatural +} + +export class EnemySeeds { + public static enemies: Enemy[] = [ + // Wild Animals + new Enemy('Angry dog', EnemyTypes.WildAnimal, Difficulties.CHALLENGING, Difficulties.VERY_HARD, 3, 'https://pixabay.com/photos/dog-angry-aggressive-white-black-5287546/'), + new Enemy('Wild dog', EnemyTypes.WildAnimal, Difficulties.MEDIUM, Difficulties.CHALLENGING, 3, 'https://pixabay.com/photos/dog-angry-rage-violent-furious-486550/'), + new Enemy('Hungry wild wolf', EnemyTypes.WildAnimal, Difficulties.VERY_HARD, Difficulties.CHALLENGING, 1, 'https://pixabay.com/photos/wolf-predator-hunter-canis-lupus-635063/'), + new Enemy('Swarm of bees', EnemyTypes.WildAnimal, Difficulties.IMPOSSIBILE, Difficulties.CHALLENGING, 1, 'https://pixabay.com/photos/bees-insects-macro-honey-bees-276190/'), + new Enemy('Cloud of insects', EnemyTypes.WildAnimal, Difficulties.IMPOSSIBILE, Difficulties.MEDIUM, 1), + new Enemy('Hungry fox', EnemyTypes.WildAnimal, Difficulties.CHALLENGING, Difficulties.MEDIUM, 1), + new Enemy('Brown bear', EnemyTypes.WildAnimal, Difficulties.VERY_HARD, Difficulties.VERY_HARD, 1), + new Enemy('Amur tiger', EnemyTypes.WildAnimal, Difficulties.IMPOSSIBILE, Difficulties.VERY_HARD, 1, 'https://pixabay.com/photos/tiger-animal-roar-fangs-angry-5946115/'), + new Enemy('Grey wolf', EnemyTypes.WildAnimal, Difficulties.VERY_HARD, Difficulties.CHALLENGING, 1), + new Enemy('White bear', EnemyTypes.WildAnimal, Difficulties.VERY_HARD, Difficulties.CHALLENGING, 1), + new Enemy('Wild boar', EnemyTypes.WildAnimal, Difficulties.MEDIUM, Difficulties.EASY, 1), + new Enemy('Northern viper', EnemyTypes.WildAnimal, Difficulties.MEDIUM, Difficulties.EASY, 1), + new Enemy('Eurasian Lynx', EnemyTypes.WildAnimal, Difficulties.CHALLENGING, Difficulties.MEDIUM, 1), + new Enemy('Deer', EnemyTypes.WildAnimal, Difficulties.MEDIUM, Difficulties.EASY, 3), + new Enemy('Siberian Tiger', EnemyTypes.WildAnimal, Difficulties.IMPOSSIBILE, Difficulties.VERY_HARD, 1), + new Enemy('Wild Boar', EnemyTypes.WildAnimal, Difficulties.VERY_HARD, Difficulties.MEDIUM, 3), + new Enemy('Deformed rats', EnemyTypes.WildAnimal, Difficulties.MEDIUM, Difficulties.EASY, 3), + new Enemy('Flock of crows', EnemyTypes.WildAnimal, Difficulties.VERY_HARD, Difficulties.EASY, 2), + new Enemy('Locust cloud', EnemyTypes.WildAnimal, Difficulties.IMPOSSIBILE, Difficulties.TRIVIAL, 2), + new Enemy('Swarm of flies', EnemyTypes.WildAnimal, Difficulties.IMPOSSIBILE, Difficulties.MEDIUM, 2), + new Enemy('Pigs with worms in the body', EnemyTypes.WildAnimal, Difficulties.VERY_HARD, Difficulties.CHALLENGING, 1), + // Humans + new Enemy('Sick human', EnemyTypes.Human, Difficulties.MEDIUM, Difficulties.EASY, 3), + new Enemy('Thief with ax', EnemyTypes.Human, Difficulties.VERY_HARD, Difficulties.CHALLENGING, 1), + new Enemy('Militia hunter', EnemyTypes.Human, Difficulties.IMPOSSIBILE, Difficulties.CHALLENGING, 1), + new Enemy('Man crawling with a knife', EnemyTypes.Human, Difficulties.VERY_HARD, Difficulties.MEDIUM, 1), + new Enemy('Two militia hunters', EnemyTypes.Human, Difficulties.IMPOSSIBILE, Difficulties.VERY_HARD, 1), + // Supernatural + new Enemy('Dark figure', EnemyTypes.Supernatural, Difficulties.IMPOSSIBILE, Difficulties.TRIVIAL, 2), + new Enemy('Woman with two faces', EnemyTypes.Supernatural, Difficulties.VERY_HARD, Difficulties.CHALLENGING, 1), + new Enemy('Eyeless creature', EnemyTypes.Supernatural, Difficulties.IMPOSSIBILE, Difficulties.MEDIUM, 1), + new Enemy('Anomaly', EnemyTypes.Supernatural, Difficulties.IMPOSSIBILE, Difficulties.MEDIUM, 3), + new Enemy('Ghost', EnemyTypes.Supernatural, Difficulties.IMPOSSIBILE, Difficulties.EASY, 4), + ]; + + public static getOneRandomEnemy(): Enemy { + // TODO + return EnemySeeds.enemies[EnemySeeds.getRandomArbitrary(0, EnemySeeds.enemies.length)]; + } + + private static getRandomArbitrary(min: number, max: number) { + return Math.floor(Math.random() * (max - min) + min); + } +} \ No newline at end of file diff --git a/src/seeds/EventSeeds.ts b/src/seeds/EventSeeds.ts new file mode 100644 index 0000000..8abf000 --- /dev/null +++ b/src/seeds/EventSeeds.ts @@ -0,0 +1,289 @@ +import { Event, EventType } from '../entities/Event'; +import { Game } from '../Game'; +import { LogType } from '../managers/LogManager'; +import { Skills } from '../enums/Skills'; +import { Difficulties } from '../enums/Difficulties'; +import { EnemySeeds } from './EnemySeeds'; +import { Enemy } from '../entities/Enemy'; + +export class EventSeeds { + private _events: Event[]; + private _game: Game; + + constructor() { + this._game = Game.getInstance(); + this._events = []; + } + + start() { + this.events.push(new Event( + 'Wild Wolf Appeared', + 'Something that catches your eye', + 'He jumps furiously wanting blood!', + '', + [{ + buttonText: 'Throw a stone', + skillCheck: false, + skillCheckFields: null, + normalResultPath: () => { + this._game.log.addTempLog('You hit the rock and killed the wolf!', LogType.Result); + } + }, + { + buttonText: 'Run like a chicken', + skillCheck: false, + skillCheckFields: null, + normalResultPath: () => { + this._game.log.addTempLog('Did you get away', LogType.Result); + } + }], + EventType.Combat, + null + )); + } + + get events() { + return this._events; + } + + public getPlaceEvent() { + const events: Event[] = [ + new Event( + 'Ferris wheel', + 'When you look up you feel a chill in your belly', + 'It seems like it’s not been used for a long time,' + + ' a time when having fun still made sense', + 'ferris-wheel', + [{ + buttonText: 'Take a deep breath', + skillCheck: false, + skillCheckFields: null, + normalResultPath: () => { + this._game.log.addTempLog("You don't find anything interesting", LogType.Result); + this._game.log.addTempLog("Just look at the ferris wheel for a while, take a deep breath and walk away", LogType.Result); + this._game.characterManager.makeSomeoneInTheGroupGetStatus(); + } + }, + { + buttonText: 'Investigate', + skillCheck: true, + skillCheckFields: { + difficulty: Difficulties.MEDIUM, + skillToCheck: Skills.STRENGTH, + canGiveItems: true, + resultPath: { + success: () => { + this._game.log.addTempLog('You found some things of value', LogType.Result); + }, + failure: () => { + this._game.log.addTempLog("You couldn't find anything", LogType.Result); + } + } + }, + normalResultPath: null + }, + { + buttonText: 'Continue the walk', + skillCheck: false, + skillCheckFields: null, + normalResultPath: () => { + this._game.log.addTempLog("You just go by the ferris wheel and go away, without looking back", LogType.Result); + } + }], + EventType.Combat, + null + ), + new Event( + 'Abandoned Barn', + 'Just a normal place', + 'There is something unsettling about this place', + 'barn-abandoned-farm-homestead', + [ + { + buttonText: 'Investigate', + skillCheck: true, + skillCheckFields: { + difficulty: Difficulties.CHALLENGING, + skillToCheck: Skills.STRENGTH, + canGiveItems: true, + resultPath: { + success: () => { + this._game.log.addTempLog('You found some things of value', LogType.Result); + }, + failure: () => { + this._game.log.addTempLog("You couldn't find anything", LogType.Result); + } + } + }, + normalResultPath: null + }, + { + buttonText: 'Continue', + skillCheck: false, + skillCheckFields: null, + normalResultPath: () => { + this._game.log.addTempLog("You just continue walking...", LogType.Result); + } + } + ], + EventType.Combat, + null + ), + new Event( + 'Theme Park', + 'Just a normal place', + 'This place brings you strange memories, about sad things', + 'theme-park', + [ + { + buttonText: 'Forget memory', + skillCheck: true, + skillCheckFields: { + difficulty: Difficulties.MEDIUM, + skillToCheck: Skills.STRENGTH, + canGiveItems: false, + resultPath: { + success: () => { + this._game.log.addTempLog('You managed to overcome the negative memories', LogType.Result); + }, + failure: () => { + this._game.characterManager.makeSomeoneInTheGroupGetStatus('Depressed'); + } + } + }, + normalResultPath: null + }, + { + buttonText: 'Just ignore.', + skillCheck: false, + skillCheckFields: null, + normalResultPath: () => { + this._game.log.addTempLog("You just continue walking...", LogType.Result); + } + } + ], + EventType.Combat, + null + ), + new Event( + 'Forest Fog', + 'Just a normal place', + 'There is something unsettling about this place', + 'forest-fog', + [ + { + buttonText: 'Continue', + skillCheck: false, + skillCheckFields: null, + normalResultPath: () => { + this._game.log.addTempLog("You just continue walking...", LogType.Result); + } + } + ], + EventType.Combat, + null + ), + new Event( + 'Geyser', + 'Just a normal place', + 'There is something unsettling about this place', + 'geyser', + [ + { + buttonText: 'Continue', + skillCheck: false, + skillCheckFields: null, + normalResultPath: () => { + this._game.log.addTempLog("You just continue walking...", LogType.Result); + } + } + ], + EventType.Combat, + null + ) + ]; + + return events[Math.floor(Math.random() * events.length)]; + //return events[1]; + } + + public getCombatEvent() { + const enemy: Enemy = EnemySeeds.getOneRandomEnemy(); + + const possibleQuotes = [ + 'Approaches more and more with an aggressive posture.', + 'Closer and closer, making avoiding conflict almost impossible', + 'Appears suddenly scaring everyone', + 'Appears from the dark in a sadistic way', + 'An inevitable encounter in this place', + 'Hard to avoid conflict' + ] + + const quote = possibleQuotes[Math.floor(Math.random() * possibleQuotes.length)]; + + return new Event( + enemy.name, + 'Conflict', + quote, + '2', + [{ + buttonText: 'Attack', + skillCheck: true, + skillCheckFields: { + difficulty: enemy.attack, + skillToCheck: Skills.STRENGTH, + canGiveItems: false, + resultPath: { + success: () => { + this._game.log.addTempLog('You managed to scare the ' + enemy.name.toLowerCase() + ' and run away.', LogType.Result); + }, + failure: () => { + this._game.characterManager.decreasesTheHealthOfSomeoneInTheGroup(); + this._game.characterManager.makeSomeoneInTheGroupGetStatus('Wounds'); + this._game.log.addTempLog('You were attacked but managed to escape.', LogType.Result); + }, + } + }, + normalResultPath: null + }, + { + buttonText: 'Run away', + skillCheck: true, + skillCheckFields: { + difficulty: enemy.runAway, + skillToCheck: Skills.STRENGTH, + canGiveItems: false, + resultPath: { + success: () => { + this._game.log.addTempLog('You managed to escape.', LogType.Result); + }, + failure: () => { + this._game.characterManager.decreasesTheHealthOfSomeoneInTheGroup(); + this._game.characterManager.makeSomeoneInTheGroupGetStatus('Fear'); + this._game.log.addTempLog('You escaped but got hurt by the ' + enemy.name.toLowerCase(), LogType.Result); + }, + } + }, + normalResultPath: null + }], + EventType.Combat, + null + ); + } + + public getMileStoneEvent(): Event { + return new Event('Milestone Reached! ', + 'Something that catches your eye', + this._game.distanceToTheBorder + ' miles to the border', + 'milestone', + [ + { + buttonText: 'Back to travel', + skillCheck: false, + skillCheckFields: null, + normalResultPath: () => {} + }], + EventType.Exploration, null + ); + } +} \ No newline at end of file diff --git a/src/seeds/ItemSeeds.ts b/src/seeds/ItemSeeds.ts new file mode 100644 index 0000000..ac1aeb4 --- /dev/null +++ b/src/seeds/ItemSeeds.ts @@ -0,0 +1,49 @@ +import { Item, ItemType } from '../entities/Item'; +import { StatusSeeds } from './AfflictionSeeds'; + +export enum ItemsNames { + FirstAid, + Food +} + +export class ItemSeeds { + public static items: Item[] = [ + new Item('Bandages', ItemType.FirstAid, 10, [StatusSeeds.getStatusByName('Blood ribs'), + StatusSeeds.getStatusByName('Broken ribs')]), + new Item('Herbal Meds', ItemType.FirstAid, 5, [StatusSeeds.getStatusByName('Anxiety')]), + new Item('Antibiotics', ItemType.FirstAid, 15, [StatusSeeds.getStatusByName('Infection'), + StatusSeeds.getStatusByName('Food poisoning'), + StatusSeeds.getStatusByName('Dysentery')]), + new Item('Antiseptic', ItemType.FirstAid, 15, [StatusSeeds.getStatusByName('Wounds')]), + new Item('Painkillers', ItemType.FirstAid, 15, [StatusSeeds.getStatusByName('Pain'), + StatusSeeds.getStatusByName('Broken ribs')]), + new Item('Raw Food', ItemType.Food, 10), + new Item('Vegetables', ItemType.Food, 5), + new Item('Canned Food', ItemType.Food, 10), + new Item('Cigarette', ItemType.Food, 15), + new Item('Beef jerky', ItemType.Food, 15), + new Item('Bear meat', ItemType.Food, 15), + new Item('Chocolate Bar', ItemType.Food, 20), + new Item('Condensed milk', ItemType.Food, 15), + new Item('Cup of coffee', ItemType.Food, 10), + new Item('Cup of herbal tea', ItemType.Food, 10), + new Item('Dog food', ItemType.Food, 15), + new Item('Energy bar', ItemType.Food, 25), + new Item('Water (unsafe)', ItemType.Food, 10), + new Item('Granola bar', ItemType.Food, 15), + new Item('Orange soda', ItemType.Food, 20) + ]; + + public static getItens(name: ItemsNames, amount: number): Item { + this.items[name].amount = amount; + return this.items[name]; + } + + public static getOneRandomItem(): Item { + return ItemSeeds.items[ItemSeeds.getRandomArbitrary(0, ItemSeeds.items.length)]; + } + + private static getRandomArbitrary(min: number, max: number) { + return Math.floor(Math.random() * (max - min) + min); + } +} \ No newline at end of file