Skip to content

Commit

Permalink
Merge pull request #42 from thecodeflayer/entrance-rando
Browse files Browse the repository at this point in the history
Entrance rando
  • Loading branch information
thecodeflayer authored Aug 12, 2020
2 parents cfa3586 + 848c495 commit 5c8fa97
Show file tree
Hide file tree
Showing 317 changed files with 3,580 additions and 117 deletions.
18 changes: 15 additions & 3 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,4 +1,18 @@
# What's New in Version 1.1.1
# What's New in Version 1.2.0

### Entrance Shuffle BETA
Entrance tracking has been added. This is a BETA release of the feature. As such, not everything has been tested and your feedback is encouraged.

When creating a new game you can select an option for Entrance Shuffle. You can find out more on the [FAQ page](https://github.com/thecodeflayer/alttp-tracker/blob/master/FAQ.md#entrance-shuffle-settings).

### Enhancements and Bug Fixes

- Game Edit settings UI has been updated.
- "Back History" is now cleared periodically when navigating to the maps. This should reduce some issues that can appear when the "Back History" gets too large.

---

## 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.
Expand All @@ -12,8 +26,6 @@ Required items for locations can now be shown by "long pressing" on the location
- 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
Expand Down
65 changes: 61 additions & 4 deletions FAQ.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ A compendium of Frequently Asked Questions and documentation about the tracker.

### Contents
- [General Questions](#general-questions)
- [Why do keys decrement (count down) on the Dungeons Screen?](#why-do-keys-decrement-count-down-on-the-dungeons-screen)
- [I clicked on items, but the item count doesn't increase. Why?](#i-clicked-on-items-but-the-item-count-doesnt-increase-why)
- [Can I quickly navigate between the light world and dark world maps?](#can-i-quickly-navigate-between-the-light-world-and-dark-world-maps)
- [How do I see what items are required for a location or dungeon access?](#how-do-i-see-what-items-are-required-for-a-location-or-dungeon-access)
Expand All @@ -14,13 +15,23 @@ A compendium of Frequently Asked Questions and documentation about the tracker.
- [New Game Settings](#new-game-settings)
- [Game Mode Settings](#game-mode-settings)
- [Item Shuffle Settings](#item-shuffle-settings)
- [Entrance Shuffle Settings](#entrance-shuffle-settings)
- [Goal Settings](#goal-settings)
- [Crystals for Ganon and Ganon's Tower](#crystals-for-ganon-and-ganons-tower)
- [Troubleshooting](#troubleshooting)
- [Help! I Upgraded and I can't click on Anything?!?](#help-i-upgraded-and-i-cant-click-on-anything)

## General Questions

#### Why do keys decrement (count down) on the Dungeons Screen?

In standard item shuffle mode, the default setting, key counts start with the maximum number of keys found in that dungeon and clicking decrements the count.
This is to help new randomizer players by making it obvious how many keys are available in each dungeon.

In other item shuffle modes, Keysanity for example, the key counter starts at zero and increments from there. You can set the item shuffle settings when creating a new game.

More information on item shuffle setting can be found [here](#item-shuffle-settings).

#### I clicked on items, but the item count doesn't increase. Why?

There are several items that contribute to the count that are not present on the items screen (rupees, hearts, arrows etc.).
Expand All @@ -37,7 +48,7 @@ Yes! You can double-tap the map to toggle between worlds at the same position an
#### A location should/should not be accessible with the items I have! What gives?

If you've found an issue with location logic please please submit an [issue](https://github.com/thecodeflayer/alttp-tracker/issues)!
In coding location logic I attempted to follow the randomizer logic as closely as possible. I have even done several runs to manuall test
In coding location logic I attempted to follow the randomizer logic as closely as possible. I have even done several runs to manually test
the logic and have implemented unit tests using the tests from the randomizer as a guide.

That said, there still may be placed that have been missed and I welcome your feedback.
Expand All @@ -54,7 +65,7 @@ If you feel there is an error in item counts, please file an [issue](https://git
#### Why are you not on the Play Store?
The short version is "I'm trying."

The Play Store has very strict policies regarding popular IPs. Navigating this has proven to be a challenge. I will continue to pursue publication on the play store. Meanwhile, I'm hosting here for immidiate access. I'll continue distributing from Github as the update process for the Play Store is also slow and will always be behind what I can distribute here.
The Play Store has very strict policies regarding popular IPs. Navigating this has proven to be a challenge. I will continue to pursue publication on the play store. Meanwhile, I'm hosting here for immediate access. I'll continue distributing from Github as the update process for the Play Store is also slow and will always be behind what I can distribute here.


## New Game Settings
Expand Down Expand Up @@ -84,7 +95,7 @@ The primary effect this has on the tracker is the number of available chests and
Additionally, the total number of items on the Items screen will change depending on the Item Shuffle option chosen.

**NOTE**
Location logic in the app assumes that you have the required big and small keys to access an area. There is an open question [here](https://github.com/thecodeflayer/alttp-tracker/issues/39) about whether to add big keys to the location logic. Feel free to add your opinion on the matter there.
Location logic in the app assumes that you have the required big and small keys to access an area. There is an open question [here](https://github.com/thecodeflayer/alttp-tracker/issues/39) about whether to add big keys to the location logic. Feel free to add your opinion on the matter.

To learn more about the randomizer options for item shuffle please read Item Settings > Dungeon Item Shuffle section of
[alttpr.com/en/options](https://alttpr.com/en/options).
Expand Down Expand Up @@ -124,6 +135,52 @@ In this mode small keys will increment from zero. Note that, like the Maps, Comp
The small key counter reflects all the small keys in the dungeon whether they are in a chest, a drop or from pots.
To increment item count when you find a small key in a chest you should click the chest icon to decrement the chest count.

### Entrance Shuffle Settings

Entrance shuffle adds the option of tracking how overworld entrances (and their underworld/interior counterparts) are linked.
You can link entrances a variety of ways and you have the option to quickly mark entrances as junk, dark caves or even add "pins" to the location
to help you remember to revisit the location later.

Learn about the randomizer's entrance shuffle options under the Entrance Shuffle section of [alttpr.com/en/options](https://alttpr.com/en/options)

_NOTE:_ This is a BETA feature and additional enhancements will be added in the future.

**None**

Entrances are not shuffled and have no effect on tracker functionality. Entrance tracking is disabled.

**Simple, Restricted, Full, Crossed**

Entrances are shuffled and the option to track entrances is enabled on the Light World and Dark World maps.
Tap the Map icon to toggle to tracking entrances, a Door icon will appear.
Tapping an entrance will open that entrance's links. Tap on the appropriate link text, then select the link you would like to create.

Example: You enter Blind's Hideout and discover it links to Eastern Palace. You can then follow these steps to track the link:

- Tap Blind's Hideout from the map
- Tap "Entering Blind's Hideout overworld door leads to ???"
- Tap Light World > Dungeons > Eastern Palace
- The link is now created. Additionally the corresponding links will also be created on the linked location.

Once links are created you can quickly navigate from the Entrance Links screen using the arrow icons.

Entrance options are dictated based on the entrance shuffle option selected and align with the available options for that mode.

For example, Simple mode will limit options based on several criteria, giving you limited options for each entrance type while Full will have quite a few more entrance options but require extra navigation steps to limit the selection.

There is also some automatic handling of entrance linking depending on the mode. For example, linking a hole entrance will automatically link the hole exit as well in all modes but Insanity.

**Insanity**

This mode functions the same way as the previous modes with the difference of how exit links are handled.
Since Insanity mode in the randomizer allows for exiting a location to take you to a different location than from where you entered, exit links are not automatically created.
The exception to this is single entrance caves, they will be linked back to the overworld entrance location since this is what the randomizer supports.

**Location Validation and Entrance Shuffle**

Location validation logic is currently disabled if Entrance Shuffle is set to any option other than None. All locations will appear as available.
In the future I may update the validation logic to support Entrance Shuffle but this will take some time.

### Goal Settings

Learn about the randomizer's game goals under the Goal section of [alttpr.com/en/options](https://alttpr.com/en/options)
Expand Down Expand Up @@ -152,7 +209,7 @@ Triforce count is displayed and can be incremented on the Items screen.

### Crystals for Ganon and Ganon's Tower

Sliders to set the Crystal requirement for Ganon's Tower and to access Ganon. The counts are displayed, and also editable on the Items screen.
Sliders to set the Crystal requirement for Ganon's Tower and to access Ganon. The counts are displayed and editable from the Items screen.

## Troubleshooting
Sometimes you run into problems. If the solution isn't here or doesn't work please file an [issue](https://github.com/thecodeflayer/alttp-tracker/issues).
Expand Down
6 changes: 4 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,10 @@
# alttp-tracker
A mobile app for tracking ALTTP randomizer runs. You can track items collected, dungeon items and bosses and view available locations on the Light World and Dark World maps.

The tracker currently supports Standard, Inverted and Retro modes and is geared towards new players who are learning.
A number of game goals are also supported such as Defeat Ganon, Triforce Hunt and Pedestal Goal to name a few.
The tracker currently supports [Standard, Inverted and Retro](https://github.com/thecodeflayer/alttp-tracker/blob/master/FAQ.md#game-mode-settings) modes and is geared towards new players who are learning.
[Game Goals](https://github.com/thecodeflayer/alttp-tracker/blob/master/FAQ.md#goal-settings) are also supported such as Defeat Ganon, Triforce Hunt and Pedestal Goal to name a few.

[Entrance Shuffle BETA](https://github.com/thecodeflayer/alttp-tracker/blob/master/FAQ.md#entrance-shuffle-settings) support has recently been added!

## Supported Platforms
Currently, I'm only building APKs for Android. I still need to figure out how to build for iOS.
Expand Down
6 changes: 5 additions & 1 deletion app/_global_vars.scss
Original file line number Diff line number Diff line change
Expand Up @@ -10,10 +10,14 @@ $empty-bg: #868585;
$empty-border: #616161;
$empty-btn-border: #4c4c4c;

$highlight-bg:forestgreen;
$highlight-bg: #228b22;
$highlight-border: #175c17;
$highlight-btn-border: #124912;

$ugly-bg: #b18400;
$ugly-border: #745700;
$ugly-btn-border: #5e3800;

$standard-font-color:#ffffff;
$clicked-font-color: #e3e3e3;

Expand Down
15 changes: 15 additions & 0 deletions app/app.scss
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,11 @@ Button:active{
border-color: $highlight-btn-border;
color: $standard-font-color;
}
&.ugly {
background-color: $ugly-border;
border-color: $ugly-btn-border;
color: $standard-font-color;
}
&.padded {
width:90%;
magin-top:5;
Expand Down Expand Up @@ -109,6 +114,16 @@ Button:active{
border-color: black;
background-color: red;
}
.locale-junk {
border-width: 3;
border-color:black;
background-color: #dede01;
}
.locale-dark {
border-width: 3;
border-color: black;
background-color: #929292;
}
.center-key {
border-width: 3;
border-color: black;
Expand Down
100 changes: 100 additions & 0 deletions app/components/entrance/EntranceEditor.vue
Original file line number Diff line number Diff line change
@@ -0,0 +1,100 @@
<template>
<Page backgroundColor="black">
<Navbar/>
<GridLayout columns="*" rows="86,*,70">
<StackLayout orientation="vertical" class="list-top-header">
<GridLayout rows="80" columns="50,*" margin="0 10">
<Image col="0" :src="actionImage" width="48" verticalAlignment="center"/>
<Label col="1" textWrap="true" margin="5" verticalAlignment="center">
<FormattedString>
<Span v-for="t in logicText" :text="t.text" :color="t.color"/>
</FormattedString>
</Label>
</GridLayout>
</StackLayout>
<ScrollView row="1">
<StackLayout orientation="vertical">
<GridLayout v-for="loc in availableLinks" columns="68,*" :rows="loc.isLink? '68':'48'" v-bind:key="loc.id"
@tap="loc.isLink ? doLink(loc.id) : doDrill(loc.id)" class="btn padded" :class="loc.klass" margin="2 0" padding="2">
<Image :src="(action === 'enterLink' && loc.intImg) ? loc.intImg : loc.extImg"
:visibility="loc.isLink ? 'visible':'collapsed'"
col="0" height="64" horizontalAlignment="center" verticalAlignment="center"/>
<Label :col="loc.isLink? '1' : '0'" :colSpan="loc.isLink ? '1':'2'" :text="loc.name"
:horizontalAlignment="loc.isLink ? 'left' : 'center'" verticalAlignment="center" textWrap="true"
:marginLeft="loc.isLink ? '10':'0'" :fontSize="loc.name.length>28? '18':'20'"/>
</GridLayout>
</StackLayout>
</ScrollView>
<GridLayout row="2" columns="*,5,*" class="list-top-header" margin="0 10 5 10">
<Button :visibility="this.path.length || this.showAlreadyLinked ? 'visible':'collapsed'" class="btn empty" @tap="onBackButton">Back</Button>
<Button :col="this.path.length || this.showAlreadyLinked ? '2':'0'" :colSpan="this.path.length || this.showAlreadyLinked ? '1':'3'" class="btn danger" @tap="closeEditor">Close</Button>
</GridLayout>
</GridLayout>
</Page>
</template>

<script type="ts">
import {Component, Prop, Vue} from 'vue-property-decorator';
import EntranceLanding from '@/components/entrance/EntranceLanding.vue';
import {EntranceHelper} from '@/utils/EntranceHelper';
@Component
export default class EntranceEditor extends Vue {
@Prop() entranceKey;
@Prop() action;
staticEntrance = {};
currentEntrance = {};
staticLink = {};
actionImage = '';
logicText = [];
entranceHelper = new EntranceHelper(this.$sol, this.$modelManager);
availableLinks = [];
path=[];
showAlreadyLinked = false;
mounted() {
this.staticEntrance = this.entranceHelper.getStaticEntrance(this.entranceKey);
this.currentEntrance = this.entranceHelper.getEntrance(this.entranceKey);
this.staticLink = this.entranceHelper.getStaticEntrance(this.currentEntrance[this.action]);
this.actionImage = (this.staticEntrance.isHole && this.action === 'enterLink') ? '~/img/enter-hole.png'
: this.action === 'enterLink' ? '~/img/enter-link-alt.png'
: this.action === 'exitLink' ? '~/img/exit-link-alt.png'
: (this.staticEntrance.isHole && this.action === 'enterLinkedTo') ? '~/img/enter-linked-hole.png'
: this.action === 'enterLinkedTo' ? '~/img/enter-linked-to-alt.png'
: '~/img/exit-linked-to-alt.png';
this.logicText = this.entranceHelper.getLogicText(this.staticEntrance, this.staticLink, this.action);
this.availableLinks = this.entranceHelper.getAvailableLinks(this.staticEntrance, this.entranceHelper.getReverseAction(this.action));
}
onBackButton() {
if(this.showAlreadyLinked) {
this.showAlreadyLinked = false;
} else if(this.path.length){
this.path.pop();
}
this.availableLinks = this.entranceHelper.getAvailableLinks(this.staticEntrance, this.entranceHelper.getReverseAction(this.action), this.path, false);
}
doLink(id){
this.currentEntrance[this.action] = this.entranceHelper.createLinkR(this.currentEntrance.id, id, this.action);
this.$modelManager.saveEntrances();
this.closeEditor();
}
doDrill(id) {
if(id === 'alreadyLinked') {
this.showAlreadyLinked = true;
this.availableLinks = this.entranceHelper.getAvailableLinks(this.staticEntrance, this.entranceHelper.getReverseAction(this.action), this.path, true);
} else {
this.showAlreadyLinked = false;
this.path.push(id);
this.availableLinks = this.entranceHelper.getAvailableLinks(this.staticEntrance, this.entranceHelper.getReverseAction(this.action), this.path, false);
}
}
closeEditor() {
this.$navigateTo(EntranceLanding, {props:{entranceKey:this.entranceKey}});
}
}
</script>

<style scoped lang="scss">
</style>
Loading

0 comments on commit 5c8fa97

Please sign in to comment.