CluckFox
Active member
I've been re-watching the main tutorials to refresh my memory on all of the core concepts they cover. I took notes so I could quickly revisit any particular concept I might need. Hopefully others will find this information helpful too.
The Beginner modules follow the same sequence:
The Intermediate modules similarly cover sprite construction, pixel editing, and AI steps; followed by module-specific enhancements of the Basic module by writing code.
Common Concepts
All Beginner and Intermediate tutorials cover the essential functions of NESMaker - creating and opening projects, editing pixels, assembling sprite animations, and designing levels.The Beginner modules follow the same sequence:
- Load tutorial tilesets
- Load tutorial palettes
- Load tutorial game objects
- Load tutorial monsters
- Load tutorial monster palettes
- Load community sound file
- Import input links
The Intermediate modules similarly cover sprite construction, pixel editing, and AI steps; followed by module-specific enhancements of the Basic module by writing code.
Maze Game - Beginner
- Watch this first to learn NESMaker GUI concepts
- Q W E R keys change subpalette of a background tile in level editor
- hold 1 2 3 4 keys to draw a path
- Set path group to use in Screen Info dialog
Maze Game - Intermediate
- Change the labels in Project Settings to suit your needs. Labels do not affect engine or game behavior at all
- Script Settings - Subroutines is a good starting point for places to insert custom code
- imported graphics usually need to be recolored
- check in TutorialAssets folder for additional graphics and sound ideas
- Deep dive into constructing Animations
- Paths are disabled in scrolling games and take up a lot of ROM
- First taste of code - Tiles
- Use Special Screens for directly placing 8x8 tiles
Maze Game - Advanced
- Create a 1UP game object
- Monster Flags determine what part of collision code will run when player hits object
- JMP RESET is a good first-line debugging tool
- Create a "power pellet" game object that makes monsters vulnerable
- Use a loop to find all active monsters and change their action step
- modify player/monster collision code to change collision behavior while in "vulnerable" action step
Top Down Adventure - Beginner
- Monster groups with NPCs
- NPC text and text groups
- Text and HUD Boxes
- HUD Elements
- Monster groups with Monsters
- Brief look at enemy AI to "chase" player with 8-direction movement
- Monster Blocks
- Screen Types
Top Down Adventure - Intermediate
- Pixel Editor
- Community HUD assets
- Inputs for Actions vs. Inputs for Motion
- Weapon construction, animation, AI
- Background HUD construction
- Unlockable spells and weapons
- Spawning weapons based on facing direction
- Multiple weapon selection
- Initialization code to enable GUI features
- Pseudo-hit-box for talking NPCs
- Monsters dropping random powerups
- Single pickup script handling multiple types of items
- monster blocks changed in doHandleHurtMonster script
- Relationship of NPC Monster Group and Text Group positions
- Sprite pre-draw script for custom tiles on Background HUD
- Input script for weapon cycling
- Suggestion for secondary weapon behavior
Top Down Adventure - Advanced
- Zoom level editor out to see adjacent screens
- Create new type of tile
- Examining sprite pre-draw
- Inputs to change to an "attack" action step
- Copy and paste entire frames of sprite animation
- Flipping tiles in sprites
- Making "player weapon" hurt monsters
- Custom Script definition
- Customizing Bank18.asm
- How to backup X and Y registers
- Defining custom tile behavior
- Tiles with multiple states of behavior
- Examining Lock Block behavior
- Examining code that rewrites background tiles
- How to correct "Branch out of range" compiler errors
- Triggering the screen type
- Customizing Extra Screen Load script to replace tiles and collisions
Simple Shmup (Shooter) - Beginner
- Full-screen playable area with Sprite HUD
- Only Screen Info for first screen of a scrolling "hallway" is loaded
- Screen Flags are still loaded on each screen
- Scroll Edge and Boss screen flags to conditionally stop scrolling
- Examining Boss Blocks
- Storing boss health in User Variable
- Warp Tiles
Simple Shmup (Shooter) - Intermediate
- Code to update tiles by writing to memory registers
- Adjusting enemy shooting patterns with Action Steps
- Static Objects
- Cooldown timer for player shooting
- Rationale for boss-tile behavior
- Change monsters by warping
- Examining motion speed & direction vs. scroll speed
- Foreshadowing slowdown
Simple Shmup (Shooter) - Advanced
- Slowing down because of many sprites on screen at once
- Controlling max sprites with the Object Variables tab in Project Settings
- Plan level design to avoid hitting max object count
- GUI integration comes at expense of computing cycles
- Examining DrawSprites subroutine
- Examining DrawSprite macro
- Using X register for object lookups
- Using PPU Viewer for finding tile coordinates for sprite-drawing
- Search your soul
- using vBlankTimer variable as a lightweight animation timer
Basic Brawler - Beginner
- Assets - collections of preset background+collision data+subpalette selection
- Only warp-in screen of a scrolling hallway loads warp-out coordinates
- sprite dead zone half screen to the right of warp-in screen
- Change Hurt action from Null to StopMoving to mitigate recoil
Basic Brawler - Intermediate
- borrow skills learned from previous module tutorials
- Low bounding boxes create illusion of depth
- Level editor treats all black as transparent, even black assigned to palette positions 1-3
- Create illusion of depth with Up/Down movement but retaining Left/Right facing
- inputs - stop motion, punch, resume motion while d-pad still held down
- inputs - changes to movement imputs may have side-effects with scrolling
- scrolling - camera position very slightly lags player position at edge of scroll boundary
- Monster AI in Brawler Module makes it a Brawler Game
- AI - trigger action steps based on player position on screen
- AI - action step flags change whether or not to "chase" player while moving
- AI - trigger action steps based on player proximity to monster hitbox
- AI - achieve complex behaviors by chaining action steps into a "sentence"
- Code can spawn sprites based on monster tileset of active monster group
- Object type numbers correspond to their position in the Project Hierarchy
Basic Brawler - Advanced
- Create illusion of depth with sprite ordering. PPU draws sprites over each other based on sprite ordering.
- Default sprite order is X-register order, player is at 0, subsequent sprites get incrementing ID
- Zero Page tab of Project Settings shows how much user variable space is used up
- Handle Objects script is run once per frame to perform computations & actions based on Object_ X-indexed variables
- How to construct a loop in assembly
- Handle Objects is a candidate for optimization once you reach that point in the game's lifecycle
- INXS. How to reorder the apparent order of a loop by replacing X temporarily in loop body
- Create a new subroutine after the last RTS of the script file
- A sorting algorithm
- Edit Initialization script to set up initial values of new Zero Page variables
Mega-Metro-Vania - Intermediate
- Using multiple sub-palettes in a sprite
- Flipping entire animations
- Controlling animations conditionally
- Scrolling is agony
- Watch scrolling in action using PPU Viewer
- Modify Sprite HUD
- Sprite HUD rationale (vs. older Sprite Zero Hit method)
- Spawning projectiles conditionally
- Only warp-in screen data is loaded, only Flags are loaded on screens you scroll onto
- User Variables for health and and ammo
- Examine double-spawn quirk of scrolling back-and-forth quickly
- Size of the Playable Area box affects player's initial Y position when "falling" into another screen
Mega-Metro-Vania - Advanced
- Create new tile types
- Borrow post-screen-load routine from Adventure module to rewrite tiles
- Using memory registers to push index of tile to draw to PPU
- Manual screen triggering with GUI and the Initialization code to enable to use it
- Placing screen trigger code in tile behavior
Edits
19 March 2021 - added Brawler and Maze notes
Last edited: