Releases: mchlnix/SMB3-Foundry
nightly: +39 commits
CAUTION: Nightlies are untested alpha releases. Most users should use '1.3.1'! Michael Nix: don't hide level loading error, making things break later #189 (825e299) Michael Nix: adds method to draw screen coordinates for screens (2d6ba14) Michael Nix: make coordinates togglable #188 (564fc8c) Michael Nix: update dev requirements (1baacfd) Michael Nix: update sources based on updated static checkers (b224037) Michael Nix: switch flake8 with ruff for linting (78cc4d0) Michael Nix: update qt darkstyle import to support pyside6 (43ca743) Michael Nix: adds option to draw potential mario positions in level (3532c5f) Michael Nix: add helper functions for mario start positions (72b45e9) Michael Nix: make mario start position draggable if visible (136045d) Michael Nix: introduce props to LevelView (e20d8fd) Michael Nix: offset cursor when moving mario by half a block (5f18129) Michael Nix: lessen opacity of potential marios when dragging him around, fixes #187 (79a63da) Michael Nix: show nightly commits from old to new (80551b4) Michael Nix: adds command line option to skip auto save recovery (c2aff05) Michael Nix: make error dialog work when start of foundry fails (3b1d2aa) Michael Nix: adds load-m3l command line argument (2d490b2) Michael Nix: fix a situation when two applications were started on error (a3cc892) Michael Nix: make desert boxes resizable, fixes #182 (851ae95) Michael Nix: add clamp util function (e8d65d5) Michael Nix: remove mirroring from blocks and tiles. why was that a thing? (35839a1) Michael Nix: documenting and cleaning Block and Tile classes a bit (d6e9714) Michael Nix: some palettegroup cleanup (71c47e0) Michael Nix: rename the border tiles for the world map view (6f88142) Michael Nix: scroll items into LevelView, when selected from the ObjectList fixes #194 (931fafb) Michael Nix: adds support to change global offsets using FNS files, fixes #196 (2276b1e) Michael Nix: adds reset_global_offset function to clean up on rom load (4b52909) Michael Nix: fixes missing FNS import icon (bdf05d5) Michael Nix: fix FNS file not being able to be opened (3741c72) Michael Nix: adds command line option to load a level directly (1784346) Michael Nix: make offset constants changable by loading new addresses (cd02fae) Michael Nix: fix crash when not loading a ROM on startup (979c163) Michael Nix: adds custom fns and smb3.asm loading dialog (a6dfa72) Michael Nix: make fns labels absolute in editor (d8f3e30) Michael Nix: add fns and smb3.asm paths to ROM (5507af2) Michael Nix: show automatic level management dialog centered (bb9669a) Michael Nix: round out fns dialog behaviour and save fns and asm path (bc20ee8) Michael Nix: give hints, if fns and asm files are not valid (adff756)
1.3.1: Bugfix Release
Foundry
Fixes:
- Let user select but not open Mushroom and Spade Levels #172
- Don't show Super Mario Allstar Objects in Object Toolbar #174
- When opening a level from Found Level List, remember which world the
level came from - Fix Jump Destination not being setable in Headereditor
- Restore Cut Object shortcut Ctrl + X #181
- Fix Autosave Dialog Buttons doing the opposite, because of GUI
Framework weirdness - Adds a timeout on level parsing, when using the emulated parser;
corrupted levels would parse infinitely - Fix gui elements being enabled/disabled when no level or no rom is
present - Fix selection via Object List #159
- Make pyramid object rendering more stable #168
- Fix Save As not actually saving
Features:
- When level testing, skip world info box to speed up time to level
- Set white mushroom house coin limit in Other Level Settings
Scribe
Fixes:
- Changed Overworld music resetting after first death #176
- Attribute error, when changing worlds in Scribe
1.3 Kawaguchiko
Thanks to to CC, XenoStar54 and especially Dario for the numerous Bug Reports this time around
Foundry
Fixes
- Off by One error, when selecting jump destination through Level
Selector - Trying to load enemy data, when enemy address is 0x0
- Stock "Lost Levels" couldn't be played with instaplay
- Level Selector wasnt sized properly to show the full height of the
World Map (Windows) - Two identical objects on top of each other would always be selected
together, when clicked on, making them "stuck together" - Graphic data would not be reloaded when a new ROM was opened, leading
to problems when custom graphics are used - Dragging an object from the Object Toolbar would not select it as the
current placable object - Object Toolbar resizing after dragging an object sometimes
- Being able to place an object with middle click, while dragging
others/selecting others - ROM didn't save properly, when jump destination had 0x0 as either address
- Recent Objects Toolbar not being scrollable, but extending the Main
Window when full - Closing a level would not ask if you wanteed to save
- 3 items were accessible in the Object Toolbar and Dropdown, that were
not drawn in the Level View. They change properties, that can be
changed using the Editor UI
Features
- Adds tab for parsed Found Levels in Level Selector (thx @withthelove)
- Makes folder paths more robust under the hood (thx @TomaSajt)
- Adds Game Property Editor from Workshop, letting users change certain
ROM values, without patches and adds new values for Big Bertha - Adds toolbar button for Level Selector
- Skip most of the curtian animation and all of the start screen, when
using instaplay, starting right in the Overworld - Adds right click option to "grab" an object in a level, to be able to
place it with middle-click; like a Pipette - Level Viewer shows Levels and gaps as Blocks
- Level Viewer shows Enemy Address as well now
- Level Viewer shows Level Preview in Thumbnails
- Adds indicator for vertical flight path of Red Paratroopas
- Adds Editor Option to show/hide outlines of Level Pointers in Level
Selector - Toggle additional Starman for instaplay Powerup in Editor Settings
- Switch from changing addresses to offset in Level Header, which now
preserves the offset, when changing Object Sets - Adds Test Level entry in Level Menu, to make the feature more discoverable
- Shortcut Ctrl+S to save the ROM (How was that not a thing already?)
Scribe
Fixes
- World Object Palette would not update/save, when changing it in the
World Info Dialog - Map Objects being able to be moved out of the map area (onto the black border)
- New Level Pointers spawning outside the world map
- Level Menu not keeping track of the current world number, if you
change the order in the World Info dialogue
Features
- If ROM was parsed and has saved Level Data, mark it as dirty, if
Scribe moved the Levels around. This causes Foundry to reparse the ROM
making sure no Levels are lost
1.2 Enoshima
Automatic Level Management
This update changes saving, so be careful and report any bugs, please
Up until now users were choosing vanilla levels and edit them, either being careful to stay within the bounds of the original level and enemy count to not overwrite any other levels in memory, or deliberately overwriting those (helped by Foundries overwrite warning).
Even more hardcore would be to map out the position of levels by themselves and typing in the memory location manually using the "Place a Level" function.
With this update, the editor is now able to parse the Rom for levels, first those accessible from the Overworlds and then any level those ones jump to.
With this knowledge, any gaps of unused data between the levels can be detected and flagged as 'free'.
By remembering how the Rom got to a specific level, it also allows Foundry to move levels around and update all the positions in the Rom that point to those levels.
Therefore, any level can now utilize the entire free space in its Rom bank and is no longer bound by the position of the level, following it
in the Rom.
If a level is larger than it was before, any level following it is simply bumped up in memory, with no data lost. The pointers to that
level, be it in the world map or in other levels through jumps are updated automatically.
This feature is opt-in and still experimental, so please file bug reports, if something fails. Remembering the order of operations that
lead to the error is key..
Other new features
- Further Extended Rom support, by streamlining normalized and raw
addresses under the hood - Started adding support for Japanese ROMs by trying to find Palette Data at their location, too
- Enable changing the overworld theme in Scribe
- Adds button to close level directly
- Now closes old level when opening a new ROM
- Button to ignore update messages for a major version
- Updated to Python 3.11 in prebuilds for a big speed boost
Fixes
- animated tiles in world viewer kept wrong palette, when switching
world - Fix wrong enemy address being parsed out for world specific levels
(eg Coinship) - fixed instaplay not saving enemy data correctly (bug might not have
reached users)
1.2_alpha
1.1: Bunkyo
Foundry
- Adds option to show animated Level Objects (e.g. coins spin) !
- Adds LevelViewer, that lets you see Level Data positions in the Rom (very early stage)
- Enables automatic check for updates on startup (no nightlies, asks first)
- Rename "Object" menu to "Rom" Menu, to better reflect its options
- Scroll to beginning of level, when opening a new one
- Determine Spade and Mushroom levels by object set, rather than tile in LevelSelector
- Fix level header byte label not updating when changing Jump Destination
Scribe
- Enables automatic check for updates on startup (no nightlies, asks first)
- Fix opening a new Rom not reloading graphics data
- Fix being able to choose invalid Lock Index
- Fix Scribe closing, when wanting to open a new Rom, but cancelling
- Fix Save Icon in the Toolbar only updating, when opening the File menu
- Fix world order and screen count not being saved (probably only a bug in nightlies)
smb3parse
- Adds Parser, that emulates the NES' CPU to parse levels using the Rom itself !
- Adds code that goes through the Rom and find all accessible Levels
- Better support for expanded Roms (#142 & #143), thanks @fortenbt
- Adds Generic Exit, Coin Ship and other special level data to WorldMap data point
- Lots of documentation to all Datapoint classes
- Remove all Foundry imports, making the package standalone
Under the Hood
- Fixes some wrong stock level addresses in levels.dat
- Updated README a bit, with direct download links
- Adds dependency "py65"
1.0: Ueno
Might as well, right?
Foundry
- Allows editing Pipe Exits in the Level Settings Dialog, by clicking on
a position in the world map - The Macros from Southbirds Disassembly are now parsed, when loading
one of his ASM Level Files - recolors Warning icon in Toolbar to red, when Warnings exist
Scribe
- When the Grid is active, if the Map doesn't scroll between two Screens, the color of the divider line is different
Under the Hood
- Removing Win32 support, GUI framework doesn't support it anymore
- Builds manuals automatically in GitHub CI
- When choosing not to save the current level, the whole rom is reloaded
from file
1.0_beta24: Narita
There will be bugs
Scribe
New Overworld Editor, built from scratch.
Visuals:
- Select Tiles from a Tool Window, Cursor changes to that tile (Put mode)
- Click to place or click and drag to "draw" that tile across the Map
- Middle click a tile to enter Put mode (like a pipette)
- Shift-Click to fill/replace sections of the same tile with the one selected (in Put Mode)
- Ctrl-Click to select multiple Tiles and move/copy/paste them around
- Show accurate Border around World Map
- Show animated World Tiles
- Can show level preview in tooltip, when hovering over level pointer
World Settings:
- Change how many screens the overworld has
- Change if a world map scrolls between screens where possible
- Change how many levels the overworld can have
- Change World order (e. g. turn World 5 into World 1)
- Change the animation speed of World Tiles where possible (or turn animations off)
- Change the color palette the world uses
- Change the Tile used for the bottom of the Border
Overworld Objects:
- Change the object set, addresses and position of level pointers
- Change the Sprite, Item and position of Map Objects, like Hammer Bros
- Change Index, Position and replacement tile of Locks/Bridges after clearing a Fortress
- Change the Paths the Airship travels independently from each other
- Move Marios Starting Position
- (Selecting Pipe exits is done in Foundry on a level per level basis)
Foundry
General:
- When using instaplay, put the level into the correct Worldmap, if known
- Adds "New Level" function, letting you start with a blank slate
- Feature to let you place your level anywhere on a Worldmap, like you had to do for M3L files
- Placing a level onto an existing one on a World Map no longer has to have the same object set
Rom Interaction:
- Parse iNES header of a Rom to handle PRG Sizes correctly, enabling Expanded Rom support (thanks @fortenbt)
- Export Level and Enemy Data as ASM files and open/import those ASM files (can't parse Macros from Southbird Disassembly)
- Set a default folder in the Settings, to point Open and Save Dialogs there
- Suggests a rom name in Save As dialog
Level Settings:
- Renamed "Edit Autoscroll" to Other Level Settings and add additional settings to be set additionally
- Select which Lock/Bridge a BoomBoom clears through Level Settings, instead of moving it in the level (far past the level bounds)
- Select which Pipe Exits Pair (if any) is used in this level, e.g. Pipe Levels, Sky Tower etc. Editing the positions tbd
- Allow setting "chest ends level" and the item you get through level settings
Level View:
- Additive/Subtractive Selection using Ctrl + Click added
- Cache Tiles and Blocks for rendering speedup
- Show items over blocks and invisible items (like coins) in the left object toolbar
- Special background tiles (like Dungeon) can be toggled in the View Menu
- Don't show autoscroll or pipe exit special objects in level view anymore, configure them through Level Settings
- You can move BoomBooms in levels, like you would normally (above y=16 causes a Warning, though)
Level Selector:
- Now always opens on a world map
- When the current level has a world set (from M3L, or loaded from a World Map), this world map is shown
- When cursor is over a level, tooltip shows a preview of what the level looks like
- Shows Border and animated Tiles
- Single click now fills level data into input fields, double click goes right to level
- Fixes some World Maps not using their correct color palette (e.g. World 5)
Palette Editor:
- Adds preliminary Palette Editor (double click a palette color on the right)
- Updates immediately, asks you separately, if you want to save it
Miscellaneous:
- Give instaplay Rom the .nes extension, instead of .rom
- More Warnings for problematic objects
- Preserve World Number when loading M3L file
- Fixes Centering on some Enemies/Items
- Fixes Downward Piranha Sprites
- Fixes enemies being able to be resized
- Fixes object dropdown sometimes not appearing
- Reworks Undo-Framework and Settings system under the hood
smb3parse
- Parse basically everything world map related; levels, sprites, locks, pipes...
1.0_beta23: Sapporo
Fixes: - Saving an m3l file sometimes damaging the first few bytes of a rom, making it unreadable - restored auto save level length not being set correctly - rendering of vertical vine and pole when next to another block (thanks @PiJoKra) Added: - Scroll to and select objects/enemies, when hovering over a warning - Dark theme (thanks @fortenbt) - Option to show object/enemy name and position tooltip on mouse over
1.0_beta22: Tokyo
Fixed: - Typos in manual - cursor was not reset to arrow, when version check failed - use python3.8 in windows and linux build stages Added: - Enemy Compatibility warnings, based on Spinzig's work - Auto save and restore session, when editor is not closed normally - Buttons under Jump list for easier use - use Ctrl + L to get into object dropdown text box - Jump indicators on Note blocks - focus OK button in level selector - Installation steps in manual