Skip to content

Commit

Permalink
Merge pull request #38 from thecodeflayer/required-items
Browse files Browse the repository at this point in the history
Required items
  • Loading branch information
thecodeflayer authored Jul 28, 2020
2 parents 3302e27 + ed8809d commit fa9eea3
Show file tree
Hide file tree
Showing 37 changed files with 904 additions and 815 deletions.
20 changes: 17 additions & 3 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,4 +1,20 @@
# What's New in Version 1.1.0
# What's New in Version 1.1.1

### Location Item Requirements Modal
Required items for locations can now be shown by "long pressing" on the location.

- From the Maps, this works for locations, shops and dungeons.
- From the Location Lists this works by long pressing the location title.

### Enhancements and Bug Fixes

- Fixed issue with chest saves in Dungeons screen where chest counts set to zero would be reset to max value when reloading the save.
- Fixed issue with item counts in various item shuffle modes. Items should now add up correctly.
- Location list views now have a sleeker UI.

---

## What's New in Version 1.1.0

### Retro Game Mode
Retro mode harkens back to the original Legend of Zelda.
Expand All @@ -21,8 +37,6 @@ For the tracker the following features have been added:
- App now stays in Portrait mode (Landscape mode never worked correctly)
- Fixed a bug with maps where position, scale and view mode were not getting saved.

---

## What's New in Version 1.0.0

### Logic Fixes and Testing
Expand Down
7 changes: 3 additions & 4 deletions FAQ.md
Original file line number Diff line number Diff line change
Expand Up @@ -39,10 +39,9 @@ That said, there still may be placed that have been missed and I welcome your fe

#### There should be 216 items. Where are the missing items?

As described in the [Item Shuffle Settings](#item-shuffle-settings), the tracker only counts relevant items and never counts Hyrule Castle items. The three Hyrule Castle items not counted are:
As described in the [Item Shuffle Settings](#item-shuffle-settings), the tracker only counts relevant items and never counts Hyrule Castle items. The two Hyrule Castle items not counted are:

- Hyrule Castle Map
- Hyrule Castle Big Key
- Hyrule Castle Small Key

If you feel there is an error in item counts, please file an [issue](https://github.com/thecodeflayer/alttp-tracker/issues).
Expand Down Expand Up @@ -85,7 +84,7 @@ To learn more about the randomizer options for item shuffle please read Item Set
**Standard**

In this mode, dungeon items (big keys, small keys, maps and compasses) are not counted in the overall item count.
The chest count for dungeons only reflects non-dungeon items. The overall item count in this mode is 155 items.
The chest count for dungeons only reflects non-dungeon items. The overall item count in this mode is 153 items.

In this mode small keys will decrement from their maximum number found in the dungeon.
This is to help newer players by making it more obvious how many total small keys are in each dungeon.
Expand All @@ -111,7 +110,7 @@ To increment item count when you find a small key in a chest you should click th

In this mode, maps, compasses, small keys and big keys (excluding Hyrule Castle) are added to the item pool.
The chest count for dungeons will be increased as in the Maps, Compasses and Small Keys option with the inclusion of big keys.
The overall item count in this mode is 213.
The overall item count in this mode is 214.

In this mode small keys will increment from zero. Note that, like the Maps, Compasses and Small Keys option, the small key counter does not affect the item count.
The small key counter reflects all the small keys in the dungeon whether they are in a chest, a drop or from pots.
Expand Down
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ First take a look at existing issues and make sure that it hasn't been filed bef
## Installation
In order to install on Android you will have to "side-load" the APK from Github. On most modern Android platforms you can follow these steps:
1. Navigate to the latest release page on the Android device you want to install the app on.
Current release is [1.1.0](https://github.com/thecodeflayer/alttp-tracker/releases/tag/1.1.0)
Current release is [1.1.1](https://github.com/thecodeflayer/alttp-tracker/releases/tag/1.1.1)
2. Under the Assets section, click on the APK file listed on the release page.
3. You will typically receive a warning about APK files harming your device. You will need to confirm download.
4. Once downloaded, click on the downloaded APK file.
Expand Down
4 changes: 2 additions & 2 deletions app/App_Resources/Android/src/main/AndroidManifest.xml
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="__PACKAGE__"
android:versionCode="10021"
android:versionName="1.1.0">
android:versionCode="10022"
android:versionName="1.1.1">

<supports-screens
android:smallScreens="true"
Expand Down
4 changes: 4 additions & 0 deletions app/app.scss
Original file line number Diff line number Diff line change
Expand Up @@ -60,6 +60,10 @@ Button:active{
color: $standard-font-color;
font-family: $font-ganon;
font-size: 20;
&.standard {
background-color: $standard-bg;
border-color: $standard-border;
}
&.danger {
background-color: $danger-bg;
border-color: $danger-border;
Expand Down
2 changes: 1 addition & 1 deletion app/components/GoalEditModal.vue
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
<template>
<ScrollView>
<StackLayout orientation="vertical" class="modal-dialog">
<StackLayout orientation="vertical" class="modal-dialog standard">
<StackLayout :visibility="game.goal === goalOptions.triforce.id ? 'visible':'collapsed'" orientation="vertical">
<Label :text="'Triforce Pieces Goal: '+game.triforceGoal" />
<GridLayout row="20" columns="20,*,20" style="margin:0;padding:0">
Expand Down
67 changes: 27 additions & 40 deletions app/components/map/DarkList.vue
Original file line number Diff line number Diff line change
Expand Up @@ -17,53 +17,36 @@
<StackLayout orientation="vertical" backgroundColor="black">
<GridLayout class="locale-wrapper" v-for="key in mapHandler.keys" v-bind:key="key"
:visibility="getVisible(key)"
columns="*,48" rows="60"
columns="36,*,36,36" rows="40"
:class="getBackgroundColor(mapHandler.locations[key])">
<StackLayout row="0" col="0" orientation="vertical" style="padding-left:5">
<StackLayout orientation="horizontal">
<Image
:src="mapHandler.locations[key].checked ? '~/img/checked.png' : '~/img/unchecked.png'"
width="32" height="32" @tap="clickCheck(key)" marginRight="5"/>
<Label class="list-title" :text="mapHandler.staticLocations[key].title"/>
</StackLayout>
<StackLayout orientation="horizontal" style="padding-right:4;padding-top:6;">
<Image v-for="img in mapHandler.staticLocations[key].req" v-bind:key="img"
height="16" :src="'~/img/'+img+'.png'"/>
</StackLayout>
</StackLayout>
<StackLayout row="0" col="1" orientation="vertical">
<Image row="0" col="1" src="~/img/dungeons/compass1.png" width="32" height="32"
@tap="clickCompass(key)" horizontalAlignment="center"/>
<StackLayout orientation="horizontal" style="margin-top:4;" horizontalAlignment="right">
<Image src="~/img/chest.png" height="16" width="16"/>
<Label class="list-title" fontSize="16"
:text="'x'+mapHandler.staticLocations[key].itemCount"/>
</StackLayout>

<Image col="0"
:src="mapHandler.locations[key].checked ? '~/img/checked.png' : '~/img/unchecked.png'"
width="36" height="36" @tap="clickCheck(key)" marginRight="5"/>
<Label col="1" :fontSize="mapHandler.staticLocations[key].title.length < 23 ? 20 : 18"
@longpress="onLongPress(key, 'location')"
class="list-title" :text="mapHandler.staticLocations[key].title" verticalAlignment="center"/>
<StackLayout col="2" orientation="vertical">
<Image src="~/img/chest.png" height="16" width="16"/>
<Label class="list-title" fontSize="16" textAlignment="center"
:text="'x'+mapHandler.staticLocations[key].itemCount"/>
</StackLayout>
<Image col="3" src="~/img/dungeons/compass1.png" width="32" height="32"
@tap="clickCompass(key)" horizontalAlignment="center"/>
</GridLayout>

<GridLayout class="locale-wrapper" v-for="key in shopHandler.keys" v-bind:key="key"
:visibility="getVisible(key, true)"
columns="*,48" rows="60"
columns="36,36,*,36" rows="40"
:class="getBackgroundColor(shopHandler.shops[key])">
<StackLayout row="0" col="0" orientation="vertical" style="padding-left:5">
<StackLayout orientation="horizontal">
<Image
:src="shopHandler.shops[key].checked ? '~/img/checked.png' : '~/img/unchecked.png'"
width="32" height="32" @tap="clickCheck(key, true)" marginRight="5"/>
<Label class="title" :text="shopHandler.staticLocations[key].title"/>
</StackLayout>
<StackLayout orientation="horizontal" style="padding-right:4;padding-top:6;">
<Image v-for="img in shopHandler.staticLocations[key].req" v-bind:key="img"
height="15" :src="'~/img/'+img+'.png'"/>
</StackLayout>
</StackLayout>
<StackLayout row="0" col="1" orientation="vertical">
<Image src="~/img/dungeons/compass1.png" width="32" height="32"
@tap="clickCompass(key, true)" horizontalAlignment="center"/>
<Image height="16" :src="shopHandler.staticLocations[key].takeAny ? '~/img/takeAny.png' : '~/img/shopDW.png'" marginTop="4"/>
</StackLayout>
<Image col="0"
:src="shopHandler.shops[key].checked ? '~/img/checked.png' : '~/img/unchecked.png'"
width="32" height="32" @tap="clickCheck(key, true)" marginRight="5"/>
<Image col="1" height="28" :src="shopHandler.staticLocations[key].takeAny ? '~/img/takeAny.png' : '~/img/shopDW.png'" marginRight="5" />
<Label col="2" :fontSize="shopHandler.staticLocations[key].title.length < 23 ? 20 : 18"
@longpress="onLongPress(key, 'shop')"
class="title" :text="shopHandler.staticLocations[key].title" verticalAlignment="center"/>
<Image col="3" src="~/img/dungeons/compass1.png" width="32" height="32"
@tap="clickCompass(key, true)" horizontalAlignment="center"/>
</GridLayout>
</StackLayout>
</ScrollView>
Expand All @@ -74,6 +57,7 @@
<script type="ts">
import {Component, Vue, Ref} from 'vue-property-decorator';
import DarkMap from '@/components/map/DarkMap.vue';
import LocaleModal from '@/components/map/LocaleModal.vue';
@Component
export default class DarkList extends Vue {
Expand Down Expand Up @@ -180,6 +164,9 @@
this.filterList = this.$modelManager.map.darkworld.filterList = val;
this.$modelManager.saveMap();
}
async onLongPress(key, type) {
await this.$showModal(LocaleModal, {props:{localeKey:key, world:'darkworld', type:type}});
}
}
</script>

Expand Down
3 changes: 3 additions & 0 deletions app/components/map/DarkMap.vue
Original file line number Diff line number Diff line change
Expand Up @@ -5,20 +5,23 @@
<AbsoluteLayout ref="mapWrapper" top="0" left="0" :scaleX="pinchHandler.currentScale" :scaleY="pinchHandler.currentScale">
<Image v-for="(tile, idx) in mapHandler.tiles" v-bind:key="idx" :top="tile.top" :left="tile.left" :width="tile.width" :height="tile.height" :src="tile.src" />
<Label v-for="dkey in mapHandler.dungeonKeys" v-bind:key="dkey" :visibility="pinchHandler.pinching ? 'collapsed' : 'visible'"
@longpress="onLongPress(dkey, 'dungeon')"
:class="(mapHandler.staticDungeonValues[dkey].maxChests === 0 ? (mapHandler.dungeonValues[dkey].boss) : mapHandler.dungeonValues[dkey].chests === 0) ? 'locale-gray' : mapHandler.dungeons[dkey].klass"
:width="Math.floor(46 * (1 / pinchHandler.localeScale))"
:height="Math.floor(46 * (1 / pinchHandler.localeScale))"
:left="Math.floor(mapHandler.staticDungeons[dkey].x - (23 * (1 / pinchHandler.localeScale)))"
:top="Math.floor(mapHandler.staticDungeons[dkey].y - (23 * (1 / pinchHandler.localeScale)))" />
<Label v-for="bkey in mapHandler.dungeonKeys" v-bind:key="bkey+'_boss'" :visibility="pinchHandler.pinching ? 'collapsed' : 'visible'"
style="border-width: 0"
@longpress="onLongPress(bkey, 'dungeon')"
:class="mapHandler.dungeonValues[bkey].boss ? 'locale-gray' : mapHandler.bosses[bkey].klass"
:width="Math.floor(30 * (1 / pinchHandler.localeScale))"
:height="Math.floor(30 * (1 / pinchHandler.localeScale))"
:left="Math.floor(mapHandler.staticDungeons[bkey].x - (15 * (1 / pinchHandler.localeScale)))"
:top="Math.floor(mapHandler.staticDungeons[bkey].y - (15 * (1 / pinchHandler.localeScale)))" />
<Image v-for="bkey in mapHandler.dungeonKeys" v-bind:key="bkey+'_img'" :visibility="pinchHandler.pinching ? 'collapsed' : 'visible'"
:src="'~/img/dungeons/'+bkey+'_boss0.png'"
@longpress="onLongPress(bkey, 'dungeon')"
:width="Math.floor(20 * (1 / pinchHandler.localeScale))"
:height="Math.floor(20 * (1 / pinchHandler.localeScale))"
:left="Math.floor(mapHandler.staticDungeons[bkey].x - (10 * (1 / pinchHandler.localeScale)))"
Expand Down
67 changes: 27 additions & 40 deletions app/components/map/LightList.vue
Original file line number Diff line number Diff line change
Expand Up @@ -17,53 +17,36 @@
<StackLayout orientation="vertical" backgroundColor="black">
<GridLayout class="locale-wrapper" v-for="key in mapHandler.keys" v-bind:key="key"
:visibility="getVisible(key)"
columns="*,48" rows="60"
columns="36,*,36,36" rows="40"
:class="getBackgroundColor(mapHandler.locations[key])">
<StackLayout row="0" col="0" orientation="vertical" style="padding-left:5">
<StackLayout orientation="horizontal">
<Image
:src="mapHandler.locations[key].checked ? '~/img/checked.png' : '~/img/unchecked.png'"
width="32" height="32" @tap="clickCheck(key)" marginRight="5"/>
<Label class="list-title" :text="mapHandler.staticLocations[key].title"/>
</StackLayout>
<StackLayout orientation="horizontal" style="padding-right:4;padding-top:6;">
<Image v-for="img in mapHandler.staticLocations[key].req" v-bind:key="img"
height="16" :src="'~/img/'+img+'.png'" />
</StackLayout>
</StackLayout>
<StackLayout row="0" col="1" orientation="vertical">
<Image row="0" col="1" src="~/img/dungeons/compass1.png" width="32" height="32"
@tap="clickCompass(key)" horizontalAlignment="center"/>
<StackLayout orientation="horizontal" style="margin-top:4;" horizontalAlignment="right">
<Image src="~/img/chest.png" height="16" width="16" />
<Label class="list-title" fontSize="16"
:text="'x'+mapHandler.staticLocations[key].itemCount"/>
</StackLayout>

<Image col="0"
:src="mapHandler.locations[key].checked ? '~/img/checked.png' : '~/img/unchecked.png'"
width="36" height="36" @tap="clickCheck(key)" marginRight="5"/>
<Label col="1" :fontSize="mapHandler.staticLocations[key].title.length < 23 ? 20 : 18"
@longpress="onLongPress(key, 'location')"
class="list-title" :text="mapHandler.staticLocations[key].title" verticalAlignment="center"/>
<StackLayout col="2" orientation="vertical">
<Image src="~/img/chest.png" height="16" width="16"/>
<Label class="list-title" fontSize="16" textAlignment="center"
:text="'x'+mapHandler.staticLocations[key].itemCount"/>
</StackLayout>
<Image col="3" src="~/img/dungeons/compass1.png" width="32" height="32"
@tap="clickCompass(key)" horizontalAlignment="center"/>
</GridLayout>

<GridLayout class="locale-wrapper" v-for="key in shopHandler.keys" v-bind:key="key"
:visibility="getVisible(key, true)"
columns="*,48" rows="60"
columns="36,36,*,36" rows="40"
:class="getBackgroundColor(shopHandler.shops[key])">
<StackLayout row="0" col="0" orientation="vertical" style="padding-left:5">
<StackLayout orientation="horizontal">
<Image
:src="shopHandler.shops[key].checked ? '~/img/checked.png' : '~/img/unchecked.png'"
width="32" height="32" @tap="clickCheck(key, true)" marginRight="5"/>
<Label class="title" :text="shopHandler.staticLocations[key].title"/>
</StackLayout>
<StackLayout orientation="horizontal" style="padding-right:4;padding-top:6;">
<Image v-for="img in shopHandler.staticLocations[key].req" v-bind:key="img"
height="15" :src="'~/img/'+img+'.png'"/>
</StackLayout>
</StackLayout>
<StackLayout row="0" col="1" orientation="vertical">
<Image row="0" col="1" src="~/img/dungeons/compass1.png" width="32" height="32"
@tap="clickCompass(key, true)" horizontalAlignment="center"/>
<Image height="16" :src="shopHandler.staticLocations[key].takeAny ? '~/img/takeAny.png' : '~/img/shopLW.png'" marginTop="4"/>
</StackLayout>
<Image col="0"
:src="shopHandler.shops[key].checked ? '~/img/checked.png' : '~/img/unchecked.png'"
width="32" height="32" @tap="clickCheck(key, true)" marginRight="5"/>
<Image col="1" height="28" :src="shopHandler.staticLocations[key].takeAny ? '~/img/takeAny.png' : '~/img/shopLW.png'" marginRight="5" />
<Label col="2" :fontSize="shopHandler.staticLocations[key].title.length < 23 ? 20 : 18"
@longpress="onLongPress(key, 'shop')"
class="title" :text="shopHandler.staticLocations[key].title" verticalAlignment="center"/>
<Image col="3" src="~/img/dungeons/compass1.png" width="32" height="32"
@tap="clickCompass(key, true)" horizontalAlignment="center"/>
</GridLayout>
</StackLayout>
</ScrollView>
Expand All @@ -74,6 +57,7 @@
<script type="ts">
import {Component, Vue, Ref} from 'vue-property-decorator';
import LightMap from '@/components/map/LightMap.vue';
import LocaleModal from '@/components/map/LocaleModal.vue';
@Component
export default class LightList extends Vue {
Expand Down Expand Up @@ -180,6 +164,9 @@
this.filterList = this.$modelManager.map.lightworld.filterList = val;
this.$modelManager.saveMap();
}
async onLongPress(key, type) {
await this.$showModal(LocaleModal, {props:{localeKey:key, world:'lightworld', type:type}});
}
}
</script>

Expand Down
Loading

0 comments on commit fa9eea3

Please sign in to comment.