Skip to content

QoL Field Moves

psf edited this page May 6, 2024 · 27 revisions

QoL Field Moves Header

Introduction

Demo of QoL Field Moves Features

This branch allows developers to make the use of Field Moves more convenient.

This is a combination of the features "Surfboard instead of HM Surf" by Pyredrid, and "HM Items" by NobodySociety.

Thank you very much to Archie for their contribution. Please read more about their contributions and support their projects!

Features

Relevant Field Moves

This branch provides the following functionality for the following moves: Cut, Fly, Surf, Strength, Flash, Rock Smash, Waterfall, Dive, Teleport, and Sweet Scent. This branch does not support Milk Drink, Soft-Boiled, or Secret Power.

Tools

Gif of the player using the Sweet Scent Tool from the bag and a registered Key Item.

Developers can give players items that allow them to use Field Moves without a Pokémon or the required Gym Badge.

Can Learn

Gif of the player using Rock Smash without a Pokémon in the party that knows the move, but rather, a Pokémon that can learn it.

Players can use Field Moves as long as a Pokémon in their party can learn that field move.

Automatic and Silent Use

Gif of the player using Surf automatically.

Players do not need to interact with overworld objects or metatiles to activate Field Moves - they will automatically execute when relevant. Once a field move has been used, the game will not display a message for each subsequent use until the player leaves a dungeon.

Installation

These instructions assume that you can build pokeemerald, have a basic understanding of C, and are familiar with using the in-game scripting language. If you do not, please watch the tutorials series from Team Aqua's Hideout.

git merge (recommended)

From the root directory of your project, run the following commands in your terminal program of choice:

git remote add psf-emerald https://github.com/PokemonSanFran/pokeemerald/ # This adds our team's pokeemerald branch as a remote repo.
git pull psf-emerald qol_field_moves # This pulls in the qol_field_moves feature branch

Manual merge

If your project is:

  • Too far behind pokeemerald
  • Using a different base (pokeemerald-expansion or pokefirered)
  • Some other reason that I can't think of

You can manually implement the features using the diff between this branch and vanilla pokeemerald as a guide. You will need to manually edit or create each of these files in your project to properly recreate the feature.

Warnings

Usage

Tools

Tools can be used from the Bag or as a Registered Key Item. When a player has a Tool, they are able to use the associated Field move without any restrictions.

Can Learn

When the player meets all of the requirements when interacting with a field obstacle, the game will allow the player to use the relevant field move.

  1. Player meets the specific requirement for that obstacle, such as facing water, or standing in a dark cave.
  2. Player has a Pokémon in their party that can learn the field move via one of the following methods
    • its associated Technical Machine or Hidden Machine in pokeemerald
    • learns via Level-Up
    • learns via Move Tutor

NOTE: This does not show the relevant Field Move in the action list on the Pokémon Party Menu.

Automatic and Silent Use

If a player has met the requirements for Tools OR Can Learn, when the player approaches a relevant obstacle, the player will automatically perform them. If the player has used them more than once in a given location, the effect will automatically start without informing the player first.

Field Move Can Learn Tools Automatic
Cut Gif that shows the player using Cut without a Pokémon in their party that knows the move Gif that shows the player using Cut with the ITEM_CUT_TOOL from the bag and from a registered Key Item Gif that shows the player using Cut by just approaching the obstacle
Fly n/a Gif that shows the player using Fly with the ITEM_FLY_TOOL from the bag and from a registered Key Item n/a
Surf Gif that shows the player using Surf without a Pokémon in their party that knows the move Gif that shows the player using Surf with the ITEM_SURF_TOOL from the bag and from a registered Key Item Gif that shows the player using Surf by just approaching the obstacle
Strength Gif that shows the player using Strength without a Pokémon in their party that knows the move Gif that shows the player using Strength with the ITEM_STRENGTH_TOOL from the bag and from a registered Key Item Gif that shows the player using Strength by just approaching the obstacle
Flash Gif that shows the player using Flash without a Pokémon in their party that knows the move Gif that shows the player using Flash with the ITEM_FLASH_TOOL from the bag and from a registered Key Item n/a
Rock Smash Gif that shows the player using Rock Smash without a Pokémon in their party that knows the move Gif that shows the player using Rock Smash with the ITEM_ROCKSMASH_TOOL from the bag and from a registered Key Item Gif that shows the player using Rock Smash by just approaching the obstacle
Waterfall Gif that shows the player using Waterfall without a Pokémon in their party that knows the move Gif that shows the player using Waterfall with the ITEM_WATERFALL_TOOL from the bag and from a registered Key Item Gif that shows the player using Waterfall by just approaching the obstacle
Dive Gif that shows the player using Dive without a Pokémon in their party that knows the move Gif that shows the player using Dive with the ITEM_DIVE_TOOL from the bag and from a registered Key Item n/a
Sweet Scent n/a Gif that shows the player using Sweet Scent with the ITEM_SWEETSCENT_TOOL from the bag and from a registered Key Item n/a
Teleport n/a Gif that shows the player using Teleport with the ITEM_TELEPORT_TOOL from the bag and from a registered Key Item) n/a

Developer Options

These are enabled by uncommenting the relevant lines in include/qol_field_moves.h.

Option Name Description Example
QOL_NO_MESSAGING When this is enabled, when the player uses a Field Move automatically for the first time on a map, a message or animation does not appear. Gif showing the player walking up to a tree on a new map and automatically cutting it

Known Issues

I would love any and all PRs or advice to help solve these issues!

Player Does Not Lock

Gif showing the player pushing a boulder and then walking when field controls are locked

If the player holds a direction after using the Strength Tool, they will continue to walk forward, even if the controls are locked.

Secret Power

I did not have the patience to implement Secret Power, but I will happily accept a PR if somebody else manages to add the appropriate Tool and Automatic behavior.

PartyHasMonLearnsKnowsFieldMove

PartyHasMonLearnsKnowsFieldMove takes the HM or TM constant as an input, instead of the move itself. If different moves have been assigned to those machines, then it will not appropriately check the move.

Support

Frequently Asked Questions (FAQ)

n/a

Other Questions

If you have read all of the documentation here and still have questions, please ask a good question in the pokeemerald channel of the pret Discord server. You can tag pkmnsnfrn and we will try to help if we can.

Donations

If you got some use out of this feature, please consider donating. We are currently not taking any donations, so please donate to some of our favorite charities.

Contributors

  • Suggested to only check for FIELD_MOVE_FAIL to reduce conflicts with community branches
  • Updated branch to properly build when using modern compiler
  • Helped give a code review of the feature
  • Introduced ForcePlayerToPerformMovementAction

CHANGELOG

All changes to this project will be documented in this section. The format is based on Keep a Changelog, and this project tries to adhere to Semantic Versioning.

Unreleased

  • A constant has been introduced to include/qol_field_moves.h which impacts the Field Move related animations in object_event_anims.h which will allow developers to control the speed at which each Field Move occurs.
  • Secret Power now has Tool, Can Learn and Automatic Use functionality.

[1.1.2] - 2024-05-06

Added

  • Updated CheckForObjectEventCollision to explicitly look for FIELD_MOVE_FAIL. (Zatsu) · (a9977922d)

[1.1.1] - 2024-04-03

Added

[1.1.0] - 2024-01-15

Added

  • ForcePlayerToPerformMovementAction is added to UseSurf which allows the player to instantly start using Surf without waiting for the walking animation to finish. (devolov) · (e3b81e52b)
  • Fixed mixing of tabs and spaces (devolov) · (48cc36c9b)

[1.0.2] - 2023-12-06

Fixed

  • PartyHasMonLearnsKnowsFieldMove was not properly returning TRUE, causing the player to stutter every step. Return cases have been added when success is found. (ardorin) · (300332d)

[1.0.1] - 2023-11-13

Fixed

  • If the player used a Field Move while the Map Name Popup was visible, the popup would behave strangely. HideMapNamePopUpWindow was added to the beginning of every Field Move, which hides the Map Name Popup before executing the Field Move. (archie#5000) · (9cf4e45)
Clone this wiki locally