Skip to content

Commit

Permalink
Update: How to Become an Achievement Developer overhaul (#203)
Browse files Browse the repository at this point in the history
* How to become a developer overhaul

* TMO update - "less popular"

* scatter and boom inputs

* misc clean up

* pt dead link removal
  • Loading branch information
suspect15 authored Feb 8, 2025
1 parent e2c7591 commit d193d30
Show file tree
Hide file tree
Showing 11 changed files with 53 additions and 211 deletions.
4 changes: 0 additions & 4 deletions docs/.vitepress/config/en.ts
Original file line number Diff line number Diff line change
Expand Up @@ -325,10 +325,6 @@ function sidebarDeveloperDocs(): DefaultTheme.SidebarItem[] {
text: "Real Examples",
link: "/developer-docs/real-examples",
},
{
text: "Set Development Roadmap",
link: "/developer-docs/set-development-roadmap",
},
{
text: "Achievement Templates",
link: "/developer-docs/achievement-templates",
Expand Down
4 changes: 0 additions & 4 deletions docs/.vitepress/config/es.ts
Original file line number Diff line number Diff line change
Expand Up @@ -337,10 +337,6 @@ function sidebarDeveloperDocs(): DefaultTheme.SidebarItem[] {
text: "Ejemplos reales",
link: "/es/developer-docs/real-examples",
},
{
text: "Establecer un plan de desarrollo",
link: "/es/developer-docs/set-development-roadmap",
},
{
text: "Plantillas de logros",
link: "/es/developer-docs/achievement-templates",
Expand Down
4 changes: 0 additions & 4 deletions docs/.vitepress/config/pt.ts
Original file line number Diff line number Diff line change
Expand Up @@ -337,10 +337,6 @@ function sidebarDeveloperDocs(): DefaultTheme.SidebarItem[] {
text: "Exemplos Reais",
link: "/pt/developer-docs/real-examples",
},
{
text: "Roteiro de Desenvolvimento de Conjuntos",
link: "/pt/developer-docs/set-development-roadmap",
},
{
text: "Modelos de Conquistas",
link: "/pt/developer-docs/achievement-templates",
Expand Down
97 changes: 37 additions & 60 deletions docs/developer-docs/how-to-become-an-achievement-developer.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,29 +5,35 @@ description: A step-by-step guide on how to become a RetroAchievements developer

# How to Become an Achievement Developer

This document describes all the steps that any aspiring achievement developer must follow before getting Developer status. These requirement are also a checklist for Code Reviewers (developers who inspect the code of new developers).
The purpose of this document is to provide guidance on how to [join the Junior Developer program](/developer-docs/jr-dev-rules) and explain some helpful information to assist in development of an achievement set.

**Anyone can become a RetroAchievements developer if they put in the effort.**

**Strongly recommended**: join our Discord server so you can get in contact with other achievement developers who can show you the ropes and help you along. If you already know what game you want to work on, go ahead and ask for the `Jr-Dev` role in `#role-request` forum by creating a post tagged as `Jr-Dev`, posting your set plan for the game (you can use one of these [templates](https://docs.google.com/spreadsheets/d/1VC2phJ9AUcZK5Ll4bVuMpJXED8QdM_nw8OdSAuLc3bI/edit)), and pinging `@QA-Maintainer` (Make sure to first get your account verified by following instructions in `#welcome` if you haven't already). This gives you access to the `#jr-devs` channel, where you can talk to code reviewers and ask any development related questions.
Junior Developers are **required** to join the RetroAchievements Discord server. The server is where the Junior Developer program is administered. If you already know what game you want to work on, go ahead and ask for the `Jr-Dev` role in `#role-request` forum by creating a post tagged as `Jr-Dev`, posting your set plan for the game (you can use one of these [templates](https://docs.google.com/spreadsheets/d/1VC2phJ9AUcZK5Ll4bVuMpJXED8QdM_nw8OdSAuLc3bI/edit)), and pinging `@Code-Reviewer` role for set plan approval and Junior Developer program indoc.

## Finding a Game to Work on
Make sure to first get your account verified by following instructions in `#welcome` if you haven't already.

Follow the [guidelines on the Developer's Code of Conduct](/guidelines/developers/code-of-conduct#working-on-empty-sets) to find a game. Ensure the game complies with the [Rules and Restrictions](/developer-docs/jr-dev-rules#rules-and-restrictions) before working on achievements. To claim a game, it must have a forum topic. If it doesn't have one already, you can ask a Code Reviewer to make one in the `#jr-dev-forum` in our Discord server. Feel free to declare your plans to work on the game in the topic, and post updates as you proceed.
## Finding a Game to Work on

**Tip**: for your first achievement set it's recommended to choose a game that doesn't yet have achievements **and** is not very popular.
Follow the [guidelines on the Developer's Code of Conduct](/guidelines/developers/code-of-conduct#working-on-empty-sets) to find a game. Ensure the game complies with the [Rules and Restrictions](/developer-docs/jr-dev-rules#rules-and-restrictions) before working on achievements.

## Planning your Achievement Set

Once you find a game to work on you need to plan your Achievement Set.
Once you find a game to work on you need to plan your Achievement Set. Before claiming a game on site, Junior Developers must submit a set plan for approval in the `#jr-dev-forum`.

Be sure you know enough about the game to make a good set. Check the GameFAQs or something, try to learn more about the game, its secrets and details. Here is a good guide to help you with this: [Set Development Roadmap](/developer-docs/set-development-roadmap).
Be sure you know enough about the game to make a good set. Check the GameFAQs, wikias, watch longplay videos and try to learn more about the game, its secrets and details.

It's recommended that you post your plans on the official game's forum topic, so the community can leave suggestions and provide feedback.

**IMPORTANT!: be open to receive feedback and suggestions.**

**See also**: [Achievement Design](/developer-docs/achievement-design), it's an extensive guide on how to design good and interesting achievements. It's not about the technical side but the conceptual.
**See also**: [Achievement Design](/developer-docs/achievement-design). It's an extensive guide on how to design good and interesting achievements. It's not about the technical side but the conceptual.

## Claiming a Game and Beginning Development

Once a set plan has been approved by a Code Reviewer, Junior Developers may claim the game and begin development. To claim a game, it must have a forum topic. If it doesn't have one already, you can ask a Code Reviewer to make one in the `#jr-dev-forum` in our Discord server.

We recommend developing your first achievement set with a game that has 10 or fewer set requests. This allows you to focus on the learning process and refine your skills, as initial achievement sets often benefit from iteration. A smaller audience also helps manage initial support requests, preventing a sudden influx of tickets.

## Required Knowledge

Expand All @@ -36,78 +42,49 @@ Every developer must know at least the basic concepts and techniques shown in th
1. [Getting Started as an Achievement Developer](/developer-docs/getting-started-as-an-achievement-developer)
2. [Achievement Logic Features](/orphaned/achievement-logic-features)

Any aspiring dev must demonstrate understanding of the following concepts:
Junior Developer program graduates must demonstrate proficiency in the following concepts:

- Strong [set design](/developer-docs/achievement-design)
- RAM digging with the [Memory Inspector](/developer-docs/memory-inspector)
- Proper set presentation and [writing](/guidelines/content/writing-policy)
- Producing high quality, stable sets with limited supervision

- Basic RAM digging (be familiar with the [Memory Inspector](/developer-docs/memory-inspector))
Helpful initial topics to study:
- [Hexadecimal notation](/developer-docs/memory-inspector#decimal-binary-and-hexadecimal-notations)
- [Delta values](/developer-docs/delta-values)
- [Mem/Delta relationships](/developer-docs/delta-values)
- Various memory sizes
- [Hit counts](/developer-docs/hit-counts)
- [`PauseIf`](/developer-docs/flags/pauseif)
- [`ResetIf`](/developer-docs/flags/resetif)
- [Alt Groups](/developer-docs/alt-groups)
- Memory sizes: [8-bit](/developer-docs/memory-inspector#8-bit-mode) and [single bit](/developer-docs/memory-inspector#single-bits)
- [`PauseIf`](/developer-docs/flags/pauseif)
- Achievement logic comparisons besides `=`, such as `>`, `<`, `!=`
- [Adding badges to an achievement](/general/ways-to-contribute)
- [Creating accurate descriptions for achievements](/guidelines/developers/code-of-conduct#basic-achievement-design-guidelines)
- Add appropriate [protections](/developer-docs/getting-started-as-an-achievement-developer#important-tips)
- Make a [stable achievement set](/developer-docs/getting-started-as-an-achievement-developer#important-tips)

**Note**: You do not need mastery of all these concepts to have a set published, but you do need them to have the full Developer role.

### Advanced Concepts

Here is a list of some advanced concepts/techniques. **They are not required to become a Developer**, but are listed here to let the jr-dev know the possibilities of the Achievement's logic.

- Hit count as timer (like in [this example](/developer-docs/real-examples/using-hit-counts-as-a-timer) and [this one](/developer-docs/real-examples/creating-a-timer-with-reset-if-hits-based-on-the-speed-of-the-game))
- [ResetIf Checkpoints](/developer-docs/achievement-templates#finish-level-n-without-dying)
- [ResetIf with Hitcount](/developer-docs/flags/resetif#resetif-with-hit-counts)
- [PauseIf with Hitcount](/developer-docs/flags/pauseif#pauseif-with-hit-counts)
- Hit count as a timer (like in [this example](/developer-docs/real-examples/using-hit-counts-as-a-timer) and [this one](/developer-docs/real-examples/creating-a-timer-with-reset-if-hits-based-on-the-speed-of-the-game))
- [ResetIf checkpoints](/developer-docs/achievement-templates#finish-level-n-without-dying)
- [AddSource](/developer-docs/flags/addsource) and [SubSource](/developer-docs/flags/subsource) Flags
- [AddHits and SubHits Flag](/developer-docs/flags/addhits-subhits)
- [Increment counter (`Mem > Delta` Counter)](/developer-docs/real-examples/using-delta-values-and-hit-counts-to-detect-an-increment)
- [Increment counter (`Mem > Delta` counter)](/developer-docs/real-examples/using-delta-values-and-hit-counts-to-detect-an-increment)
- [Delta Hit Counter, pause technique](/developer-docs/achievement-templates#check-for-a-specific-value-changing-to-another-specific-value-ten-times)
- [Little endianness](/developer-docs/memory-inspector#endianness)
- Memory size: [Lower4, Upper4](/developer-docs/memory-inspector#upper4-and-lower4), and [16-bit, 32-bit](/developer-docs/memory-inspector#_16-and-32-bit-mode)
- Dynamic [Rich Presence](/developer-docs/rich-presence)
- [Leaderboards](/developer-docs/leaderboards)
- [Pausable Resets](/developer-docs/achievement-templates#conditional-resets)
- [SubSource increment counter](/developer-docs/flags/subsource#using-subsource-to-count-specific-increments)

The [Real Examples](/developer-docs/real-examples) and [Achievement Templates](/developer-docs/achievement-templates) pages are useful resources to see how those techniques work.

## Code Notes

Junior developers can create and delete code notes that they have created, but they cannot delete or edit any notes created by others. Developers CAN edit and remove notes by other users, and these changes are site-wide.

## Practicing

In order to become familiar to those techniques you must practice. **You can use any game to practice**, even those that already have achievements. Just be aware about these rules:

- Do **NOT** delete/overwrite any existing Code Note.

- On this **practicing** phase, keep your work in local and do **NOT** upload any achievement. You'll do it later when you find a game to actually work on.

## Get your work reviewed

After creating some achievements, upload them to Unofficial and then create a post in `#jr-dev-forum` on our Discord server (if you don't use Discord, send a message to [RAdmin](http://retroachievements.org/user/RAdmin)) and ask them to find someone to review your work.

Do **NOT** ask another developer to promote your achievements to the Core without a proper review.

Again, **it's extremely important that you are open to receive constructive criticism and helpful advice from the community at any time**.

## Am I ready to get the Developer status?
## Requesting a Code Review

Once the Code Reviewers have inspected your achievement's code and concepts, they and the admin will use the ["Required Knowledge" checklist above](#required-knowledge) to determine if you're ready. If you're not fully qualified to be a developer yet, but your set is complete and stable, the set will get published. You can then ask which concepts you still need to demonstrate proficiency in to be given developer status.
After creating the achievement set, publish it to Unofficial and then create a post in `#jr-dev-forum`. Follow all of the requirements for [requesting a Code Review.](/developer-docs/jr-dev-rules.html#code-review-requests)

The merit of a jr-dev receiving developer status depends on:
## When Will I Be Promoted to Developer?

- their ability to publish work that meets the standards of the [Developer's Code of Conduct](/guidelines/developers/code-of-conduct);
- demonstration of [required knowledge](#required-knowledge) and [advanced concepts](#advanced-techniques);
- the quality and complexity of their work;
- the time and thought they put into planning and working on achievements;
- showing the will to use the Developer status with care and responsibility;
- the extent to which the points above reflect their capabilities as a developer.
Code Reviewers are charged with ensuring that graduates of the Junior Developer program will be value-added RetroAchievements developers. Being a developer is not a right nor an entitlement. It is important for the health of the project that developers be skilled, trustworthy, good teammates, and able to produce high quality achievement sets with little to no supervision.

## Developer's Code of Conduct
The Code Reviewer team will consider a Junior Developer for graduation largely based on their assessment of the following criteria:

Once you get your Developer status, you **MUST** adhere to the [Developer's Code of Conduct](/guidelines/developers/code-of-conduct). That is extremely important to create a fair environment between the Achievement Developers.
- Their ability to publish work that meets or exceeds the standards of the [Developer's Code of Conduct](/guidelines/developers/code-of-conduct)
- The quality and complexity of their work
- High quality is defined as strong set design, writing, badges, code notes and achievement logic
- The time and thought they put into planning and working on achievements
- Showing the will to use the Developer status with care and responsibility
22 changes: 10 additions & 12 deletions docs/developer-docs/index.md
Original file line number Diff line number Diff line change
Expand Up @@ -28,24 +28,22 @@ Now a brief description some pages you'll see in this section.

11. [Achievement Design](/developer-docs/achievement-design): a guide on how to think about and design good achievements, not the technical side but the conceptual.

12. [Set Development Roadmap](/developer-docs/set-development-roadmap): suggestions of steps to take in order to create a really neat achievement set.
12. [Achievement Set Revisions](/guidelines/content/achievement-set-revisions): information on revisions, rescores, and the icon gauntlet.

13. [Achievement Set Revisions](/guidelines/content/achievement-set-revisions): information on revisions, rescores, and the icon gauntlet.
13. [Subsets](/guidelines/content/subsets): an advanced topic on creating special challenge sets and how to release them.

14. [Subsets](/guidelines/content/subsets): an advanced topic on creating special challenge sets and how to release them.
14. [Badge and Icon Creation](/guidelines/content/badge-and-icon-guidelines): some guidelines and tips about badge/icon creation.

15. [Badge and Icon Creation](/guidelines/content/badge-and-icon-guidelines): some guidelines and tips about badge/icon creation.
15. [Leaderboards](/developer-docs/leaderboards): instructions on how to create Leaderboards for a game.

16. [Leaderboards](/developer-docs/leaderboards): instructions on how to create Leaderboards for a game.
16. [Rich Presence](/developer-docs/rich-presence): how to write Rich Presence Scripts.

17. [Rich Presence](/developer-docs/rich-presence): how to write Rich Presence Scripts.
17. [Working with the Right ROM](/guidelines/content/working-with-the-right-rom): information on using correct ROMs and hashes.

18. [Working with the Right ROM](/guidelines/content/working-with-the-right-rom): information on using correct ROMs and hashes.
18. [Game Identification](/developer-docs/game-identification): details on the hashing methods used for each system.

19. [Game Identification](/developer-docs/game-identification): details on the hashing methods used for each system.
19. [Unsupported Emulators](/developer-docs/unsupported-emulators-and-cores): details on unsupported emulators and cores, testing progress, etc.

20. [Unsupported Emulators](/developer-docs/unsupported-emulators-and-cores): details on unsupported emulators and cores, testing progress, etc.
20. [Achievements for ROM Hacks](/guidelines/content/achievements-for-rom-hacks): a detailed guide for developers on the proper inclusion (and approval) of ROM Hacks.

21. [Achievements for ROM Hacks](/guidelines/content/achievements-for-rom-hacks): a detailed guide for developers on the proper inclusion (and approval) of ROM Hacks.

22. [Console Specific Tips](/developer-docs/console-specific-tips): knowing the peculiarities of your favorite console can help you with memory digging.
21. [Console Specific Tips](/developer-docs/console-specific-tips): knowing the peculiarities of your favorite console can help you with memory digging.
2 changes: 1 addition & 1 deletion docs/developer-docs/jr-dev-rules.md
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ description: Comprehensive guidelines for the Junior Developer Program, includin

## Overview

The purpose of the Junior Developer Program is to assist interested people with learning how to create and maintain high quality achievement sets for RetroAchievements. Junior Developers are required to understand and abide by the [Developer Code of Conduct](/guidelines/users/code-of-conduct) except where specifically addressed by this document.
The purpose of the Junior Developer Program is to assist interested people with learning how to create and maintain high quality achievement sets for RetroAchievements. Junior Developers are required to understand and abide by the [Developer Code of Conduct](/guidelines/users/code-of-conduct) except where specifically addressed by this document. This program is for people who intend to pursue graduation and become full fledged developers.

### Entry Requirements

Expand Down
Loading

0 comments on commit d193d30

Please sign in to comment.