Skip to content

2.55.0

Compare
Choose a tag to compare
@github-actions github-actions released this 20 Feb 00:55

The one that is official.

Download from the website, or at the bottom of this page.

View a summary of what's new in 2.55.

Full Changelog: 2.55-alpha-120...2.55.0

Features

  • Allow disabling resizability of windows (setting in launcher only) 90085dd84
  • add 'Script1'-'Script10' shield blockflags, to block specific scripted weapons. de1cb2b66
  • add burn-based light radii for items, to change the glow radius when lit on fire. 5f829d628
  • LW_REFARROW, LW_REFFIRE, LW_REFFIRE2 (reflected arrows, fire, fire2) 27c41e1f2

Player

  • Custom mirrors can 'block' instead of reflect per-direction 9ce509792
  • option to show game time in the corner, for all those speedrunners out there 05449497b

Editor

  • Add warnings to combo editor (can detect problems and warn you about them) 05188bddf
  • Merge 'Favorite Command' and 'Hotkey' systems cbb1ee991
     

    Any 'Hotkey' can now be set to a favorite command, and all old favorite commands now have 'Hotkey's. Favorite command buttons will clear upon this update, as the configs have changed.

  • Hotkey cheatsheet, open with Shift+? 2f0f07d43
  • Item Wizard (Shields) bcf109db2
  • support multiple palettes in map preview/image export f207fda3f
  • various updates to default.qst (File->New) 0a53ec393
     
    • Add sideview swimming tiles
    • Add charge-swimming sprites
    • Add Bunny Link - this required expanding the pages per LTM from 1 to 2
    • Add BS/Z3 swimming tiles
    • Add the missing enemy tiles from Outlands
    • Magic Pols Voice now uses CSet 10, to make room for ...
    • Add Whistle Pols Voice: blocks arrows like a Magic Pols Voice, but is
      a One-Hit Kill via the whistle. Uses CSet 7
    • Improve the lifting and holding sprites
    • Improve Z3 Octorok tiles (Slow Fire and Bomb Octorok)
    • Update credits on page 109
    • Convert Bug Net to use 4-bit colour
    • Fix enemy bombs using CSet 6
    • Delete unused scripts in the tiles
    • Delete unimplemented Sprite 088 (Firework)
  • set test_mode_record option in test dialog directly 356066ed5
  • export/import strings to .tsv text file 1e1af9db1
     

    Allows for exporting strings to a spreadsheet, text editor, or other program for modification, then importing them back to ZC.

    The first row of the .tsv (tab separated values) file are the column names, followed by an example row to designate where the first three lines begin and end for each string (but you can add more lines than that).

    For best results in a spreadsheet, "Freeze" the first two rows and use a monospace font for the "message" column.

    Example: https://docs.google.com/spreadsheets/d/197-NSvNQJ174Ri9GVlxYDX4oFp8w1SZbmOXuDohKZZk/edit?usp=sharing

  • fix some tiles in default.qst (File->New) e342a0335
     
    • Fix wrong assignment of lava drown tiles
    • Delete redundant diving tiles in Z3 player tile pages

ZLauncher

  • set save folder 0269d0102
  • add options for window size, and cap max default window size 47b273d89
     

    [ZLAUNCH] window_width, window_height in zcl.cfg

    Cap max default size to 2x

Bug Fixes

  • prevent clock shifts from hanging the program b379a0ed9
     

    Allegro 5 doesn't use a monotonic clock that ignores suspended time, so day light saving shifts or even hibernating your computer can result in Allegro trying to do so much work to "catch up" that it hangs the program. See liballeg/allegro5#1511 for more.

  • shift key input no longer accidentally ignored c92f096a0
  • passive (non-button) items not respecting "Usable as a Bunny" flag 84d7f07e8
  • ZScript metadata fields cutting off at semicolons in strings ab92b22e7
  • 'box_out' popups sometimes appearing squished in the upper-left ced3bfb71
  • default bs patra has broken animation e846caa2f
  • newer hero movement ladder polish 172c7a5ef
  • fairy npc not despawning when picked up 45dfdd547
  • being able to carry objects while swimming, when lift glove isn't swim-capable d06f44a33
  • 'Push (Generic)' combos not properly locking into place on block triggers 80845040c
  • deleting subscreens resulting in invalid/crashy data a29918a05
  • arrow key navigation in menus not resepecting hidden items 883c2305c
  • prevent 1.90 qst load compat from setting first dmap cont/compass to bad value f1e3c5bcd
  • ZScript access to subscreen elements was missing a 'transparent' color option 96c306004
  • zasm metadata not clearing properly when assigning slots 33bb31162
  • implement set volume for GME music (spc,gbs,vgm,gym,nsf) 76091a598
  • Enemy Flames not reflecting off of shields, even with reflect flag set 2264bb083
  • issues with numbers between 0 and -1 1b44e3b2c
  • swords not updating properly, sometimes 915670436
  • old quest subscreen minimap titles overlapping dc548320e
  • placing flags on layers not marking the layer screen as "valid" 8c74b7296
  • ensure file is closed when qst fails to load c702f24fc
  • retain monitor resolution for fullscreen mode 981c6c1f9
     

    Previously, the maximum monitor resolution would be used when using fullscreen mode. That was bad because it messes up the window layout of anything else on that monitor. Now we create fullscreen displays without changing the resolution.

    Also, no longer destroy and recreate the display to change fullscreen/windowed mode. Switching between is much smoother now, and the code got a bit simpler and safer.

  • changer ffcs counting for trigger groups and similar effects (they shouldn't) e9d91d8fa

Player

  • Music not properly changing when using some warp types (ex. SCC warp) 0aef5384b
  • extra pushing allowed per screen 8a798d0dd
  • cheats menu being greyed out when it shouldn't be b24044c87
  • new respawn points not accounting for dmap offset d90410dcd
  • initialize fadevolume to avoid undefined behavior 437c27b25
     

    This fixes a bug where music would randomly be silent or extremely loud.

    Also, cap the volume used to play music to 255, to avoid ever playing it so loud again.

  • set volume correctly when music changes with only fading in or out 9274a675b
     

    For example, if the new music has a fade in frame duration of 0, and the old music has a fade out frame duration of >0, then the new music would incorrectly have its volume stuck at 0%.

  • menu bar unaligned with dropdown due to menu using int scaling f8222be89
  • Swim speeds not being saved to save file 2bbf51a02
  • spotlights with color setting '0,0,0' or tile setting '0,0' now function 8da01272a
  • Allow throwing lifted object without validating cost 498f70f46
  • thrown weapons now should hit enemies that they land on b11265992
  • all 'break on landing' weapons should hit enemies/the player that they land on fed7aab0b
  • correctly make qstpath relative to quests dir in "custom_game" dialog 019c880c6
  • use correct sav path for -standalone mode 9346ac6a8
  • prevent bad module path being set after exiting 3a4e16d4b
  • improve main menu responsiveness 5dd96666e
  • system menu not closing on reset/quit/etc 049532ccd
  • fix 'warp' SCC sometimes not closing the string 7601d2fb7
  • use more performant throttleFPS instead of rest in system menu 0de39b360
  • remove accidental double compilation for global scripts f30fd983f
  • draw to correct bitmap when showing button clear prompt 6e204d4fc
  • minor replay determinism bug for subscr_item_clk (selector animation) 825844706
  • only assign save path just before actually writing to disk 603e96444
  • call saves_do_first_time_stuff when changing slot qstpath db4cf98c2
  • handle edge case when changing unplayed save file qst 79564453f
  • prevent calling dmap script twice in scrolling dmap warp e8edc34e9
  • set previously unset save_t write_to_disk in all places adca2b376
  • not showing error dialogs in title screen, and unbreak -only switch c32a29d1d
  • clear spin state during screen scroll 7ca93107b
     

    This avoid a ghost sword visible during scrolling, and also prevents a nasty bug where the player's action state would be frozen until hit.

  • prevent crash in save creation by resetting global vars 2b3c4119d
     

    When a game is loaded, many global variables are initialized to a known state. These variables were not reset when the game ends and returns to the title screen. However, save creation happens to call code that checks the active subscreen pointer, which was invalidated. Accessing this could randomly crash or corrupt the program.

    Now, these global variables are reset also just before loading the title screen.

  • prevent failing to save after continue 870510c96
  • lift glove 'disable item use' not stopping sword SFX from playing 3e6fe6e05
  • remember last save slot position when returning to save select screen a3bc81309
  • [win32] invisible hero because of MSVC bug 511934cea
  • remember cheat on continue game 99675afa2
  • 'Custom Weapon' itemclasses rounding down step speed 8f4b63428
  • restore option to scale display to full window size b618eb983
     

    This broke when the display was fixed to only show at the correct aspect ratio. Default is still as before, but now the "Force Integer Values for Scale" option works again.

  • still allow for game area to be stretched, ignoring aspect ratio 381583118
  • ignore gamepad input when window is not active 646ef8f08
  • weird newer movement edge-case 0dd159abb
  • opening spacebar map triggering some secret effects on the current screen c1d9c1dca
  • lens unintentionally making enemies sometimes invisible 1a9273955
  • lens unintentionally making enemies sometimes invisible 111569113
  • Divine Escape particles sometimes flying in wrong directions d2472cceb
  • crash when running replay without any real saves f90cb0253
  • remove unnecessary absolute path check for standalone mode saves ed4afb985
  • show final game frame when opening/closing subscreen 07dddb5e9
     

    For older quests utilizing none of the QRs related to "cool scrolling", the subscreen open/close crawl would show a version of the game frame that was missing a few things, like enemy or player sprites.

    This should allow us to simplify the rendering (no need to render most things twice to a secondary bitmap), and just looks better.

  • do not stretch GUI fad67d962
  • tall grass on layers not applying its sfx/sprite 76f952fc9
  • fix snapshot with NOSUBSCR not supplying a palette and not accounting for NOSUBSCROFFSET 45bf325cb
  • set default volume to 100% instead of 25% 8a4f7cf2e
  • prevent grid aligning while jumping, which broke jumping for some old quests 2d8a18875
  • for replay mode, whistle sfx pauses game for number of frames proportional to sfx length instead of 0 frames 1f38de5b0
  • hero action "swimhit" incorrectly unset due to broken isSwimming() check 8b10722d8
  • combo cycling reset too early for animations with frame skips 601cba74f
     

    Turns out this never worked properly!

  • defer deletion of sprites to end of animate logic 548c3e15d
     

    This fixes a crash caused when a sprite deletes itself in middle of its animate logic.

  • prevent OOB access for darkroom ditherrectfill 07dfbbe3f
     

    When scrolling, this function could be told to grab a line of the bitmap memory outside its bounds, which resulted in a crash.

  • reset global variables on continue game for replays f3b34561f
  • actually stop mp3/ogg 994d743dc
     

    Due to a bug ogg and mp3 formats were really just "paused" when told to stop, so setting the volume afterwards would result in resuming music that was meant to be over.

  • ambient/background sfx volume not being set 52594bfc7
     

    The recent removal of "digi_volume" made all background sfx play at full volume. Fixed that.

    Additionally, fixed a bug in the sound dialog that skipped the first sfx when adjusting currently playing sounds to the new volume. That first sfx is often a background sfx.

  • various slope improvements, like fixing ffc slopes f80e024ca
  • fix mirror shield not resetting the last used mirror combo position 2c375403a
  • save select screen not showing new hp after save->reset 8d15352e5
  • load default quest for sfx when loading replay 4bc56aef2
     

    Quests before custom sfx rely on the default quest providing sfx, but that wasn't being loaded when playing back a replay. So it would either use whatever the last quest loaded, or have nothing, which was the case for the replay test script.

  • use correct graphic when holding up purchase from bottle shop 03d123012
  • apply BS swim sprites compat rule to Zelda 3000 qst 5f7ab3c23
     

    This QR is applied to all 1.90 quests, but Zelda 3000 was saved in 1.92 and this visual bug was overlooked.

  • consume button presses in subscreen menu 23f44b9f6
     

    The subscreen refactor ~6 months ago resulted in button presses not being eaten. One side effect of this was the item selection sfx playing for every frame the button was down, instead of the intended one time.

  • ZC menu options render/get disabled correctly 571460f7a

Editor

  • prevent flickering for minimap tooltip 69948f334
  • Tile editor checkboxes not clicking 983a17add
  • disable unpack cache to fix tile rotate/flip fed7b7732
  • tile page rclick "insert", "delete" was swapped 0b9bad2a6
  • disabling tooltips works again 409abe1ff
  • item editor candle text goof 17852c009
  • 'Go' in warp dialogs not rebuilding transparency table d41040b13
  • fixed warp ring dialog 1f05880ab
  • wrong button focused in zscript compile dialog 41a07b400
  • tile editor bugginess 87cd522a9
  • Polish numpick dialog, fix new gui focusing f9852b3f6
  • Crash on changing map count 92c190255
  • timeout of 0 for parser timeout now acts as "no timeout" 975602f22
  • 'File->Exit' not exiting 5db531ab7
  • 'Scroll to Combo' on screen rclick being offset 5497092dc
  • greyed out pasting in string list f2440669d
  • create test init data relative to qst init, not base init fadfe7d74
     

    This was originally done this way to avoid changing test init data when the quest's actual init data changed, but that maybe is not as useful as the other approach.

    Also very simply fixes the problem of screen data (and other init values) not being properly set.

  • autocombo/combo pool/combo alias pages RClick menus being offset d3e276c4d
  • 'Open Tile Page' on combos not using the ORIGINAL tile of the combo 7009db89b
  • disable tooltips when hotkey cheatsheet is open bcae99ea1
  • clean up several issues with the warp dialogs 378766362
  • options->fonts being broken/inconsistent, not saving changes cc2cb75cd
  • undefined memory write when applying modern quest ruleset 2ed538d97
  • lockblock/chest combo wizards not saving 'Use ExState' flag 2a3eb96fd
  • some more issues with warp dialogs e9ab158ae
  • warp dialogs not properly previewing negative xoffset dmap map-marked squares b593e46bf
  • solidity preview inaccuracies 723c58ebc
  • 'Tools->Combo Flags' bugging out when clicked 53f324ae6
  • crash related to 'Scroll to page' for aliases/pools/autocombos 7f8d8236c
  • midi edit dialog not showing in new rendering system 7ff03e46b
  • handle quest path/title with spaces in package export 432dfe42c
  • transparent tiles not drawing correctly in map preview 80f94a9ea
  • error message on failure to load enhanced music in the dmap editor 06cee90fa
  • skipy broken in combo preview animation 590e9f59c
  • combo animations not resetting after using combo selector in dialogs 99ab2ae95
  • weapon type names drop down being empty 53cdacc3d
     

    This broke from recent addition of reflected arrows/fire (e3b23aa)

  • hide unimplemented enemies 875589f19
  • handle error instead of crashing if package export fails 53f7a7253
  • stop clearing screen when editing palette 47aaddd62
     

    Since the render refactor, we haven't needed to clear the screen when changing palettes, since this dialog is rendered to a different bitmap than whats in the background.

  • 'Load Tileset' not applying compat fixes 0fdad2857

ZScript Standard Library (std.zh)

ZScript

  • 'subscreenwidget->PerContainer' not working 9d7c222dc
  • al_rest crashing when using debug feature 6058be2ba
  • parser configs not working 74a81247e
  • issues running destructors 7d0dc5299
  • handle rare COMPAREV2 for x64 jit 0fc3edd39
  • sprintf giving a wrong error message on %c 180b66fc9
  • 'Screen->SetExDoor()'/'mapdata->SetExDoor()' not opening matching doors 88f2ab405
  • grab correct value from stack for POPARGS JIT x64 504f87a71
     

    This didn't seem to break anything, but it showed up as a difference when comparing registers from JIT w/ non-JIT.

  • Hero->WarpEx not using dmap xoff when setting continue screen e21ba53d0
  • global var initializers not erroring when non-constant e1b10e2a0
  • escape character " not working properly in string literals a08d4a149
  • invalid character errors wrongly occurring for values 128-255 2cfe2e472
  • subscreen widgets not allowing SUB_COLOR_TRANSPARENT to be used 77346b0c8
  • class function params with same-name as class member not shadowing properly 5659c8ebd
  • class/object destructors stack being offset wrongly 79079c766
  • fix Audio->SetMusicLoop() truncating decimal values c6e7c0205
  • compiler crash related to invalid array indeces f3e3f7ecb
  • sanity check for bitmap->isValid() and bitmap->isAllocated() c07f28f80
  • stale data in destructors 6251b0f23
     

    scripted objects weren't clearing data used by the destructor when being cleared, leading to future objects referencing the stale data if they didn't have a destructor of their own to overwrite it.

  • generic script item collect event fix f53af5295
     

    Item Collect event will no longer be fired for items such as timeout items when they are not actually able to be collected. Due to timing changes, the "Combine when collected twice" now also occurs BEFORE the event.

  • clear jit-compiled scripts as intended when loading new quest ddf96eddd
  • fix crash when creating too many paldatas 83a3bc867
  • fix paldata->CopyCSet() referencing the wrong pointer 2a305c182
  • handle out of bounds for Game->LItems[] 6d260c7f3
     

    This fixes a crash in Panolpy when reading a specific sign.

  • return enemy x,y when getting fairy item x,y 6e60fe889
     

    Setting item->X,Y on fairy items additionally sets the position of the corresponding fairy enemy sprite. However, the getter returns the item coordinate. This resulted in unexpected behavior from something harmless like item->X = item->X causing the engine fairy movement to halt.

  • fix sideview sprites becoming unable to jump when on the ground 673eb859d
  • compat rule for old sprite jump behavior 2b7275305

Web

  • use zc-data.nyc3.digitaloceanspaces.com for now af524e98f
  • "Copy URL" in player now uses correct test params 8b5eaf56d
  • sync fs when writing save order txt file e006c07a7
  • quick save creation link working again 9e4c8a90f
     

    The quest gamedata field was inadvertently set to 0 because the save file was prematurely selected before being saved for the first time, which prevented anything in saves_do_first_time_stuff from sticking.

Documentation

  • add a couple missing subscreen widget script docs f55a272d0
  • document DrawTile '-777' rotation behavior 8bfb995e0
  • fix typo 9dc086113
  • update zstrings.txt to mention the "Insert SCC" button bd084e245
  • fix some issues with the webdocs 569adf358
  • fix 'subscreendata->PosDirs[]' being misdocumented as '->Poses[]' 4bee8e505

Build

  • fix missing libpng for web build a6c345e5a
  • fix missing libogg for web build a5254efa0
  • upgrade to latest asmjit 65ae72c6d
     

    Resolves MSVC release mode bug: asmjit/asmjit#427

  • add default file for compiler "signature" 26e8cd4db
     

    This is to make the build just work in a clean checkout until I get around to removing this pointless thing altogether.

Refactors

  • remove unused 'VSync' option (it didn't do anything) 74bbc05b7
  • key files d0864dc8d
     

    Now work from the folder the quest is in OR the exe is in, and saves to the folder the quest is in. Also cleaned up the code for handling reading key files.

  • remove unsupported color_depth option f827b35bb
  • load text files more efficiently 663e4dacf
  • don't tint behind dropdown lists (allow skipping dlgs tint) cb8f87135
  • Menus (new sleeker look, much cleaner backend) df3b5ab5b
  • remove scary and now pointless warnings when toggling fullscreen cf9942aca

Player

  • remove unused volume code in read_saves 244b8cad0
  • move x64 backend jit code to separate file f3d40e0b7
  • move global inits from init_game to new init_game_vars c4f5c11ae
  • make lamp_paid not static for replay determinism 534d82e91
  • remove ZASM debugger from menu 377981e09
     

    You may still activate this with [CONSOLE] print_ZASM = 1 in zc.cfg, but the option is no longer in the player menu. This will be removed entirely soon - it's so slow it can lock up a computer, and not useful enough to keep around.

    We may introduce a proper debugger in the future for ZScript to serve the purpose the ZASM debugger tried to.

  • remove extra draws to scrollbuf in draw_screen d57d0318b
  • remove digi_music volume control e426c5d1c
     

    digi_music is a global volume control for all allegro 4 music streams, which is only used for GME (so all those chiptune formats). But we already apply emusic_volume (enhanced music) to all non-MIDI music, so digi_music was at best redundant, and at worse a confusing knob that only modified some music formats.

    It's been removed from the Sound dialog, and now defaults to 255 (100%). It can still be modified via scripts, though this should be changed to just set/read emusic_volume sometime in the near future.

    BTW - ~6 months ago OGG was changed to use Allegro 5 instead of 4, which means at that point digi_music no longer had any effect on OGG volume.

  • remove music buffer setting 9a6ae020b
     

    This only applied to it/xm/s3m/mod music. There's no need to expose this to users. Instead, always use 128KB as a buffer size.

Editor

  • Clean up Tile/Side/Ring warp dialogs 34b7addff

ZScript

  • optimize script lookup by name 9ee5c4ba8
  • copy script entry to tempfile quicker 267bd5af2
  • manually parse config file, drop al_init 28fe49bc6
  • clean up ScriptEngineData for all script types ce8062e19

Tests

  • save replay result file when starting replay 62165c822
  • suppress timeout check on frame 0 487351025
  • update 'triggers.zplay' 218609b0b
  • add '--output' option for zscript tests ae45b645f
  • fix zscript subfolder tests not running (and update) 0e35a067e
  • update errors_2_expected.txt ce9e615a7
  • filter out expired test builds in bisect_builds.py 2bdc2354a
  • prevent infinite loop when zplayer exits before first frame a56646b40
  • add nargads_trail_crystal_crusades.zplay 08c75565d
  • fail replay test if jit cannot compile a script 9ca544889
  • fix local webserver when offline 804520e40
  • include js script in web replay test stdout/stderr 3c162e5b2
  • add umbral_cloud.zplay 0a0826577
  • add pageerror listener in run_replay.js ee98991df
  • fail on abort in web replay tests 3b0da67b4
  • stop on fatal errors in run_web_version.js d69ad2aaa
  • set write_to_disk in saves_test 297b5433e
  • add "frames" and "length" meta fields to zplay 35da8a5eb
  • use "latest" version for all playground.qst replays 42b94c785
     

    These replays should be trivial to update as needed, and using no replay compat code makes them far more useful for verifying specific features.

  • add link_to_the_heavens.zplay b1309cc47
  • add dinus.zplay 9807de3e7
  • add grassland_attack.zplay 8970b2cbd
  • make the editor File->New test do what it says it does f0b6972ea
  • add goriya_moblin_war.zplay bbce9f9fb
  • update test_compile_and_quick_assign to compile replays/scripting quests 1084e5c54
     

    This is the first of more planned script replay tests, which along with the playground.qst replays will be re-compiled with the latest zscript in CI and their replays re-verified. Should result in better test coverage for newer compiler features.

  • add 100_rooms_of_wisdom.zplay a59b6141e
  • add dragon_ball_z.zplay 27e215665
  • add new_beginnings.zplay 27424bb8b
  • add kriztles_3.zplay eb92a96b4
  • add final_fantasy.zplay 2b5572cce
  • add zelda_3000.zplay 145976d57
  • use original qst for combo rotator replay 3552ee8f5

CI

  • update vcpkg 00f89c2c7
     

    Apparently vcpkg has issues with retaining build assets long term. Being forced to update to latest as something we need expired.

    microsoft/vcpkg#30546 (comment)

  • set correct test results folder for web replays for upload 9413f492c
  • use improved lfs cache 69740f37c
  • use RelWithDebInfo for win32 tests 2eb360aa3

Misc.

  • Allow scrolling info popups 6fb7e9304
  • Remove '(Experimental)' label from FFC solidity 5a4663794
  • add 'peekkey()' / 'upeekkey()' local allegro edits 7022b0ee4
  • clean up menus, particularly the zc main menu 5ae6e3d64
  • Remove whistle delay for new replays ac0017e2a
  • update default fonts to be same between base_config and 'Default:' button e8b85365d
  • help text to indicate use of A1/A2 values on ffc/item editors 599d6f70c
  • remove noisy allocation logs 32bf8f42f
  • add qst.author sentry tag, so we can know who to reach out to for crashes in unpublished quests 22a5c9c73
  • remove tilesets/classic.qst 21bf6b417
     

    The default quest (File->New) makes this not necessary.

Player

  • show current frame count when recording and system menu is active 0f4e8a00c
  • improve error message when qst title does not match save file 069e15113
  • support "latest" for version field in zplay 5870d858b

Editor

  • Add hotkey for rebinding hotkeys af954f385
  • fix some text, add divine escape help text for warp types 1b058a4b7
  • clean up 'Door Combo Set' dialog/hotkeys and document them a4503c640
  • upgrade combo 'advanced paste' dialog, add 'Adv. Paste' to rclick menu 7ac1da426
  • disable auto save for new, unsaved quest cba0be860

ZScript

  • internal label errors now prevent compile 1b0d63bfa
  • add 'itemdata->LAttributes[]' to access attributes as a full 32-bit long value 83f9d2d03
  • add Region in anticipation of z3 scrolling 403c19750
     

    To enable scripts to work in 2.55 and in a future release with z3 scrolling, we are adding a non-functional Region:

    • Region->Width: width in pixels (today, always 256)
    • Region->Height: height in pixels (176)
    • Region->ScreenWidth: width in screens (1)
    • Region->ScreenHeight: height in screens (1)
    • Region->NumCombos: number of combo positions (176)
    • Region->ID: region id (0 - meaning just a normal 1x1 area)
    • Region->OriginScreen: top-left screen in the region
    • Region->GetScreenForComboPos(int pos): given a combo position, returns the screen index associated with it
    • Region->TriggerSecrets(int screen_index): trigger secrets for given screen. The screen must be in the region

     

    For example, if a script uses Region->NumCombos instead of 176 to iterate all the combos in the current area, it will work in both regions and non-regions. Additionally you should use ComboAt(x, y) rather than anything else to translate between pixel coordinates and a combo position.

  • mark combo->CSet deprecated, in favor for the better named ->CSet2 81cd99579