185 Commits
Author SHA1 Message Date
Waterdish 4ee3f23df8 Fix c buttons not having a default binding 2024-11-23 19:24:23 -08:00
Waterdish cb1378429f Touch Controls 2024-11-23 18:45:19 -08:00
Waterdish 5cadb5923d Modern Menu GUI Scaling Hacks 2024-11-14 23:12:27 -08:00
Waterdish f51b428de4 Bump version in config files 2024-11-14 21:18:02 -08:00
Waterdish 7fb49b5e01 1.1.1 Update 2024-11-14 20:59:31 -08:00
ArchezandGitHub 5a735395da Merge pull request #853 from HarbourMasters/develop-satoko
develop-satoko -> develop
2024-11-13 23:49:02 -05:00
ArchezandGitHub dda4e4b5c9 Bump Satoko Bravo (#852) 2024-11-13 22:10:44 -05:00
ArchezandGitHub 6d76ce9f5e Fix crashing with modern menu and UIWidgets with no tooltips (#851)
* Fix crashing with modern menu and UIWidgets when null is passed for tooltips

* move to shiputils
2024-11-13 20:13:54 -05:00
ArchezandGitHub e0ed28543b Improve extended culling options and account for song cutscene fading (#850)
* Improve extended culling options and account for song cutscene fading

* unify actor distance sliders into one
2024-11-13 17:49:47 -05:00
ArchezandGitHub 1afe496fed Fix clock spinning violently from undefined behavior with bad casting (#849) 2024-11-13 14:18:47 -05:00
ArchezandGitHub 31685557d2 Fix linux auto rom detection for built-in extractor (#842) 2024-11-12 11:13:44 -05:00
ArchezandGitHub cf92349436 Fix skip intro and skip first cycle logic running when it shouldn't (#846) 2024-11-12 11:00:45 -05:00
MalkierianandGitHub 8a74695a74 Cleanup Controller Navigation Option in Menu (#847)
* Change references of menubar in controller navigation option to menu, and change SOH to 2s2h.

* 2s2h to 2Ship
2024-11-12 10:50:19 -05:00
ArchezandGitHub ebb9e3fc8e Fix modern menu not interacting properly with some mouse events (#844) 2024-11-12 10:39:29 -05:00
ArchezandGitHub 01b127b7f3 Fix GfxPrint for Japanese UTF8 characters (#843) 2024-11-12 10:30:27 -05:00
ArchezandGitHub 422839dea4 Fix linux crash with KeepExpressMail (#840) 2024-11-12 10:15:30 -05:00
ArchezandGitHub a2e93687f6 Fix crash when toggling alt assets while paused (#839) 2024-11-12 10:06:35 -05:00
ArchezandGitHub fab4340461 Various fixes for spelling and save editor time change lightning state (#841)
* Set lightning off when changing save time

* various typo fixes
2024-11-12 10:01:16 -05:00
Garrett CoxandGitHub b7a607b765 Fix some issues caused by the extended scene geometry enhancement by patching DLs (#830) 2024-11-11 22:43:03 -06:00
MalkierianandGitHub 4669337a3f Bump LUS to OpenGL Patch commit. (#837) 2024-11-11 23:06:50 -05:00
EbloandGitHub 7b11b129f7 Use global player for sword magic form check hook (#828) 2024-11-11 10:19:07 -05:00
EbloandGitHub b18eb6b649 Use correct CVar name for modern menu climb speed (#833) 2024-11-10 23:19:18 -05:00
Waterdish 0879154432 Bump Version to 1.1.0 2024-11-10 18:19:45 -08:00
Waterdish f1698ae721 Merge Upstream 2024-11-10 17:45:18 -08:00
Garrett CoxandGitHub ad50070aba Bump for Satoko Alfa (#825) 2024-11-09 20:43:03 -06:00
ArchezandGitHub 449a2ebc70 Archive version checking and regeneration (#822)
* Add archive version checking and regeneration

* update building docs and copy assets for visual studio
2024-11-09 20:15:10 -06:00
be70a5a123 Item tracker (#707)
* Core tracker code mostly done.

* Format

* Clean up enums.

* Format

* Header cleanup

* Update

* use CVars

* format

* Add editor to modern menu

* format

* Fix item tracker cvar loading/saving and add item tracker button for modern menu

* update button label

---------

Co-authored-by: Archez <archez39@me.com>
2024-11-08 11:51:58 -05:00
ArchezandGitHub d1bbba626d Add alt assets toggle to menus (#824)
* Add alt assets toggle to menus

* Add toggle to control alt asset hotkey
2024-11-07 18:08:37 -05:00
ArchezandGitHub 2141922ee3 Fix authentic overflowed textures (#794)
* fix authentic overflow textures

* Add overflow assets and enable patching them
2024-11-05 23:25:31 -05:00
ArchezandGitHub c2ec2f2cc3 Fix installed macports detection for github runner (#821) 2024-11-05 23:17:14 -05:00
EbloandGitHub 207df24ffd Fix bug with two-handed sword magic and dance (#819) 2024-11-03 15:13:09 -06:00
Garrett CoxandGitHub 0966633d2a Implement simple notifications system (#816)
* Implement simple notifications system

* Remove demoWindow call

* Fix initializer order
2024-11-02 15:44:21 -05:00
50bc007d46 Adds an option to the save editor to invert Stone Tower (#812)
* add option to invert st in save editor

* only allow inverting in stone tower scenes

* change tooltip to disabledTooltip

Co-authored-by: Archez <Archez@users.noreply.github.com>

---------

Co-authored-by: Archez <Archez@users.noreply.github.com>
2024-10-31 00:37:24 -04:00
Garrett CoxandGitHub 941b48b802 Add swordsman school options (#779) 2024-10-26 14:28:08 +09:00
louist103andGitHub cbc89b8af4 Fix item id type (#813)
* fix wrong type

* Update z_kaleido_item.c
2024-10-21 10:51:47 -05:00
MegaMechandGitHub 9cd2f6e784 Update BUILDING.md (#810) 2024-10-15 17:39:07 +00:00
EbloandGitHub 64ebfa222e [Enhancement] Two-handed sword spin attacks (#679)
* Enhancement to enable magic for 2-handed swords

Create a new magic charge size for the two-handed swords
Add utility method for determining if the held item's button is being pressed, not just B

* Clean up two-handed sword spin attacks

Add hook for thunder matrix transformation, move that logic into TwoHandedSwordSpinAttack
Move held item button press function into TwoHandedSwordSpinAttack.cpp
Add enhancement to the searchable menu
Clean up logic for magic spin attack form check
Use variadic args for hooks

* Remove redundant includes from TwoHandedSwordSpinAttack.cpp

* Use extern on TwoHandedSwordSpinAttack structs
2024-10-10 14:38:51 -05:00
Garrett CoxandGitHub 0129959d7b Fix fairy container and seahorse rendering (#804) 2024-10-10 13:38:58 -05:00
EbloandGitHub 3ebfdb3928 [Enhancement] Skip the scarecrow song (#723)
* Add enhancement to skip the scarecrow song

* Update SkipScarecrowSong to use variadic args
2024-10-10 10:51:05 -05:00
bb386e25a0 [Enhancement] Enable putaway as Fierce Deity (#717)
* Add enhancement to enable putaway as Fierce Deity

* Fix hooks for putaway and FD sword wield

---------

Co-authored-by: Garrett Cox <garrettjcox@gmail.com>
2024-10-10 07:51:05 -05:00
balloondude2andGitHub 4d3c39224c [Enhancement] Add First Cycle Skip (#716)
* add option to skip first cycle

* nest cycle skip in intro skip

* set persistant flags from first cycle

* better comments

* missed a flag

* add modern menu option

* clang format

* add entrance cutscene flags
2024-10-09 23:48:21 -05:00
EbloandGitHub 0b16bced84 [Cheat] Allow Elegy of Emptiness anywhere (#712)
* Add cheat to allow Elegy of Emptiness anywhere

* Use modern menu for Elegy Anywhere, rename VB

Removed redundant null from Elegy scene check
Moved ElegyAnywhere enhancement's menu order

* Remove extraneous widgets from ElegyAnywhere menu
2024-10-09 23:46:05 -05:00
balloondude2andGitHub b7d7a2d9bf [Enhancement] Add option to always get the Cremia Hug Cutscene after completing the milk run (#688)
* Cremia always gives hugs after getting Romani Mask. Adds enhancement option but the option doesn't change anything yet

* moved cremia enhancement out of cutscene files

* hook works now

* change enhancement to picklist

* cleaned conditional

* move to minigame section and add modern menu item

* clang format
2024-10-08 23:26:13 -05:00
ArchezandGitHub fa702ed90c Extract pause maps and minimaps, support alt assets, fix pause map icons (#780)
* extract pause maps and minimaps and support alt assets

* Fix missing door transitions on pause menu map
2024-10-07 13:05:17 -04:00
mckinleeandGitHub 7e10b1315e [Enhancement] Disable Takkuri Steal (#776)
* simple and works

* implement proxy's feedback
Co-authored-by: Garrett Joe Cox <garrettjcox@gmail.com>

* forgot to remove unneeded check from testing

* remove null arg

* simple and works

* implement proxy's feedback
Co-authored-by: Garrett Joe Cox <garrettjcox@gmail.com>

* forgot to remove unneeded check from testing

* remove null arg

* changes

* bump lus

* add checkbox to modern menu

* clang

* archez feedback

* proxy feedback
2024-10-07 11:02:36 -05:00
ArchezandGitHub cae9c27c62 Add HD support for Igos room curtains (#783) 2024-10-07 10:25:34 -05:00
Garrett CoxandGitHub cd4ee56d48 Implement faster song playback enhancement (#801) 2024-10-07 10:25:09 -05:00
Garrett CoxandGitHub 790d36bfbc Add options for first person aiming (#596) 2024-10-06 20:55:16 -05:00
MalkierianandGitHub da793a5bf2 Fix Sidebar Search (#796)
* Ensures the sidebar search gets added if on at boot.
Searches the sidebar entries to find an entry with a label that matches the searchSidebarEntry label to delete when disabling sidebar search, just in case something goes wrong and it's not actually where it's supposed to be (sidebarSearchIndex).

* ... clang...
2024-10-05 12:54:23 -04:00
ArchezandGitHub 69edc89292 [Enhancement] Keep Express Mail in the same cycle (#791)
* Add enhancement for reusing letter to mama in one cycle

* add menu widget item for express mail
2024-10-05 12:54:00 -04:00
Garrett CoxandGitHub a93f011253 Move GameInteractor & NameTag src up to root of 2s2h (#799) 2024-10-05 10:33:10 -05:00
4c670ad342 Use glob_recurse across all of 2s2h/ (#797)
* Use glob_recurse across all of 2s2h/

* Update mm/CMakeLists.txt

Co-authored-by: Archez <Archez@users.noreply.github.com>

* Remove old source_group calls

---------

Co-authored-by: Archez <Archez@users.noreply.github.com>
2024-10-05 10:13:31 -05:00
Garrett CoxandGitHub d9d6dbdf51 Remove unnecessary headers in favor of directory headers (#800) 2024-10-05 10:06:49 -05:00
Garrett CoxandGitHub da04b7f859 Change GI_VB_ to VB_ (#798) 2024-10-05 10:02:53 -05:00
Garrett CoxandGitHub 8e0b482b23 Fix crash when search contains only spaces (#795) 2024-10-05 10:25:10 -04:00
ArchezandGitHub d3933591b5 Simplify Pause Warp confirming logic and message handling (#793) 2024-10-04 15:30:10 -04:00
Garrett CoxandGitHub f31674a12e Add fix for ikana great fairy fountain color (#788) 2024-10-03 16:02:51 -04:00
c474a82a94 Mirror Mode (#535)
* Mirror mode initial version

* Update mm/src/code/z_actor.c

Co-authored-by: Archez <Archez@users.noreply.github.com>

* mirror mode support for minimaps and dungeon pause map

* mirror mode support overworld pause map and song of soaring

* mirror mode support for various remaining things

* mirror mode support pause warp enhancement

* Add searchable menu item

---------

Co-authored-by: Archez <Archez@users.noreply.github.com>
Co-authored-by: Archez <archez39@me.com>
2024-10-02 23:44:36 -04:00
71c2c94ece Modern menu (#701)
* Start the framework.

* Start header bar.

* Header buttons now toggle. Sections show accordingly.
Basic audio section done. Needs subdividing for sane widget widths.

* Add fonts and multiple sizes.
Add graphics settings to menu.

* Finalized fonts, more sizes.

* Modularized the menu structure. Has an errant EndChild somewhere.

* Finished first step modularization.
Parameterized menu height.

* Some adaptive menu size.

* Moved all enhancements over and organized.
Tried to add button option for sidebar entries.

* Finished Enhancements Menu.
Sidebar window button still broken (can't reference window variables properly, not drawing in the right place).

* Developer Tools header started.
Menu now pops out with a checkbox in Developer Tools.
Menu sizing works for smaller game sizes.
Popout docking disabled.
Port bool added for disallowing popout regardless of cvar.

* Better auto-sizing. Columns collapse to 1 below 800 window width, and scroll.

* Move inside of HudEditorWindow::DrawElement to DrawContents, and call DrawContents from DrawElement.

* Menu resizability complete.
Menu popout complete.
Menu popout position/size is retained when popped in.
Apply HUD editor changes, draw contents in menu if window is closed.
All child sizes properly calculated.
SidebarEntry drawing separated into its own custom element.

* Split header entries into separate widget.
Header now dynamically sized and shows scrollbar when necessary.

* Modify EventLog to be drawable with the DrawContents setup.
Prevent menu from covering other windows (always in back).

* Add reset, close menu, and quit buttons to the header.

* Fix reset and quit button placement.

* Swap Actor Viewer, Collision Viewer, Save Editor to DrawContents concept.
Change reset icon to FA_ICON_UNDO (single arrow) and quit icon to FA_ICON_POWER_OFF.
Add button to close menu button tooltip, add parentheses to button for reset tooltip.

* Custom InputEditorWindow to work with menu.
Fix LUS references in Menu.cpp for Window backend changes.
Implement gamepad navigation and forced cursor visibility checkboxes.
Toggle cursor visibility according to menu status and forced visibility CVar.

* clang-format

* Swap std for fmt (runner build error).
Ensure cursor visibility is restored if started in full screen with the menu open.

* Oops, still had #include <format>

* Swap to LUS GetMenu() functionality.
Add option to hide "F1 to open enhancements menu" text at startup if menus aren't open.

* Remove last vestiges of pre-LUS-menu functionality.

* cleanup

* Adapt to GuiElement, GuiWindow changes on the menu support PR.

* LUS PR bump.
Adapt to cursor visibility changes in LUS.
Adapt to menu toggle changes in LUS.
Fix input editor not hiding in menu when popped out.

* Add new enhancements and cheats to Modern Menu from rebase.

* clang

* Apply Graphics Menu Lag Fix to Menu structure.

* Remove unnecessary window children to simplify controller navigation.

* clang

* Add `UpdateWindowBackendObjects()` call to backend combobox.

* Rebase to latest develop. Remove redundant window backend stuff that exists now in BenMenuBar.

* Search Enhancement (#2)

* 90% complete, Commit for review.

* Updated remaining Menu Entries, Reverted Backends and other Window Buttons for now.

Motion Blur copied to Search Menu.

* Did I mention I dislike this clang thing? lol

* Updating MotionBlur options and reverting soem things.

* Integrates .disabled and .disabledTooltip to the constructors. Allows for multiple qualifications to be checked against for disabling widgets and for setting the tooltip accordingly.

* Updated Disabled Reasoning

* Better Disabled State registration system

* Clean up from testing

* Expand WidgetOptions to be able to handle string and float values. bool and uint32_t are handled through int32_t.
Numerous renames.
Added several data structures to allow for dynamic updating of CVars for DisableOptions, as well as dynamic evaluation of status with enumerated conditions (less than, greater than, equal to).
Added menuThemeIndex variable to store state of menu theme selection instead of having all the individual calls to CVarGetInteger for it. Updated once per frame.

* Changed color vector to map with enum as key and UIWidget::Colors as the value.
More renames.
Moved float slider values into case block.

* Add Color_RGB8 and Color_RGBA8 to CVarVariant in preparation for adding color widgets to menu item system.
Not happy it required comparison operator overrides, but it is what it is.

* Changed disable conditions to lambdas.

* Convert Stats and Collision Viewer to menu item system.
Swap out DisableOption vector for activeDisables and a lambda function for evaluating disabled and hidden. Set the precedent to still use the DisableInfo system.

* Add DisableOption for both camera settings being off.
Put Debug Camera in Free Look column, disable common widgets for both cameras, hide widgets specific to either if off.

* Moved more widgets to MenuItem system. Some need proper initialization routines because of Ship::Context references.

* Convert menu items to nested vector setup.
Remove MenuItem enum.
Add menu item location display to search results.

* Partial removal of SidebarEntryIndex enum.

* Finish removing SidebarEntryIndex.
Rework drawing code to handle the change back to direct vector access.
Add tooltips to search.

* Fix Graphics enhancements section title.

* Copy added menu items to modern menu system.

* clang

* Add some documentation for the menu system components.

* Revert change to std::map

* `size_t` because GCC has to be happy

* Fixed HUD Editor Widescreen mode not displaying the sliders properly.
Changed all windows to full-section-width display.

* Revert changes to MotionBlur.cpp

* Add non-CVar variants of checkbox, combobox, and the sliders.
Fix motion blur functionality with new non-CVar widgets.

* Add non-CVar variants of checkbox, combobox, and the sliders.
Fix motion blur functionality with those non-CVar widgets.
Add size and labelPosition to widgetOptions, implemented on button and checkbox/combobox/sliders.
Change window popout buttons to inline size type.

* Rename SearchMenu.h to SearchableMenuItems.h and move to BenGui folder.

* Forgot to change the include XD

* Change `modifierFunc` to `preFunc`, updated documentation for that and including `postFunc`.

* Modify code to require variable for non-CVar widget initialization when necessary. Check for `valuePointer` being nullptr, and preventing widget drawing with a debug assert and error log entry.
Remove all `has_variant` calls and wrap entire widget type switch in `SearchMenuGetItem` with a try/catch on `std::bad_variant_access` with another error log and debug assert.

* More review changes.

* Implement `isPercentage`, `format`, and `showButtons` for sliders.
Pull values of those over from menubar.
Add documentation on `widgetOptions` for those and others added for previous review changes.
Move Fast Magic Arrow and Instant Fin Recall to Gameplay section.

* Modify header and sidebar "buttons" to match theming of regular buttons.

* Add precision clamping to SliderFloat value. At least 1.0 seems to be consistent at "100%".
Change IR slider to be percentage.

* Mention weirdness with SDL and pad menu button in controller nav tooltip.

* Move Menu files to 2s2h/BenGui.

* Add Warp Points to Developer Tools.
Make "Press F1" prompt show only when a menu isn't registered.

* clang

* Make search input take focus when search menu is open.

* Forgot include.

* Global search (#3)

* Restore Sidebar search entry, but lock it behind a checkbox in Settings. Dynamically adds or removes the sidebar entry, and header search is toggled inversely.

* Make menu toggle its visibility when using the button in the menu to close. Couldn't handle Alt+F4 without a hook I didn't want to add.
Remove unneeded commented code.

---------

Co-authored-by: Caladius <Caladius@users.noreply.github.com>
Co-authored-by: Garrett Cox <garrettjcox@gmail.com>
2024-10-02 20:25:26 -04:00
ArchezandGitHub 75bc685360 Fix pr-artifacts fetch script after version update (#786) 2024-10-01 15:32:03 -04:00
ArchezandGitHub 200aaf7be8 bump lus (#782) 2024-10-01 12:15:30 -04:00
Garrett CoxandGitHub f33f994adc Update pr-artifacts for node20 (#784) 2024-10-01 12:15:16 -04:00
ArchezandGitHub b1eea9ca76 Use variadic arguments with GameInteractor_Should (#766)
* PoC of using variadic arguments with GameInteractor_Should

* va_list boilerplate in SHOULD macro

* drop opt arg in favor of variadic arg changes

* account for default type promotion

* remove demo code
2024-09-26 12:39:05 -04:00
ArchezandGitHub 1475e6af7b Fix 3ds clock fill texture position (#772) 2024-09-19 18:47:28 -07:00
ArchezandGitHub 25887952c9 [Enhancement] Actor Nametags (#746)
* add new GI hooks

* move collision viewer to draw hook

* actor viewer tweaks; prevent crash when actors are killed

* add ShipUtils

* add actor name tags

* add debug name tags to actor viewer

* fixes

* headers?

* cleanup actor viewer

* Add more options for actor name tags

* headers

* headers

* ditch fmt::join cause linux package managers use old spdlog/fmt

* just a little more cleanup
2024-09-13 10:10:59 -04:00
ArchezandGitHub 137ca0de12 fix zora magic shield alpha (#768) 2024-09-12 16:32:19 -04:00
ArchezandGitHub a5059beaeb fix enum value for woodfall restoration (#769) 2024-09-12 14:32:09 -04:00
balloondude2andGitHub 4d1ddff798 Fix some Fierce Diety interactions in Clock Town (#730)
* fix fd town archery softlock

* allow FD to leave town
2024-09-08 19:01:02 -04:00
ArchezandGitHub bbfa903a99 fix more incorrect dpad handling for hud updates (#764) 2024-09-08 18:54:11 -04:00
ArchezandGitHub 6ff3be97de fix some actor shadow textures not updating (#758) 2024-09-08 18:45:54 -04:00
ArchezandGitHub 466a716222 Add restoration for woodfall mountain cleared state (#765)
* Add restoration for woodfall mountain cleared state

* enum
2024-09-08 18:27:36 -04:00
185e761f78 [Enhancement] Fierce Deity Anchored Backwalk Animation (#670)
* Add Fierce Deity anchored backwalk enhancement

* adjust ztarget hook to clamp speed instead of modifying animation frame logic

---------

Co-authored-by: Archez <archez39@me.com>
2024-09-03 23:00:11 -04:00
balloondude2andGitHub ea8809ddd0 Allow non-ascii characters in filepath on Windows (#743) 2024-09-03 22:41:16 -04:00
MalkierianandGitHub 13035d72a4 Change recommended build tools from 142 to 143, minimum VS to 2022. (#762) 2024-08-30 14:46:04 -04:00
MothsteryandGitHub 136a928883 [Enhancement] Custom Zora Egg Count (#624)
* initial commit of relevant files

* attempt to appease clang formatting

* fix edge case of marine researcher dialogue being wrong with low egg counts

* refactored to better use hooks and no longer touch main mm code directly

* undo GameInteractor.h changes

* removed useless egg checks, only need the researcher

* trigger remote build

* removing useless includes leftover from the old approach.

* move UIWidgets for egg into existing section
2024-08-24 12:22:30 -04:00
ArchezandGitHub 0c2a51c9f4 Various custom asset support (#756)
* use asset paths for better custom asset support

* fix keyframe animation timings

* display title cards as a full texture

* asset support for gfxprint

* support pause menu overworld map

* fix more resources that need to be loaded

* pr feedback
2024-08-23 17:19:41 -04:00
d74699740e [Enhancement] Instant Recall (#589)
* Instant Recall

* clang it

* Moved to Category "Equipment"

* pr review feedback

---------

Co-authored-by: Archez <archez39@me.com>
2024-08-18 23:24:14 -04:00
ArchezandGitHub 542feb038e Implement save backups and better invalid json detection (#749) 2024-08-18 18:04:25 -04:00
HoeloeandGitHub b0ca99f18c [Enhancement] MM3D style clock (#713) 2024-08-18 17:55:02 -04:00
Garrett CoxandGitHub 53faf37dc1 Add persistent bunny mask enhancement (#537) 2024-08-18 11:41:17 -04:00
ArchezandGitHub 63ffddb67b Bump LUS (#754) 2024-08-14 18:41:31 -04:00
Garrett CoxandGitHub 4a57bdbc5f Add widescreen actor culling option (#652) 2024-08-09 16:42:34 -04:00
mckinleeandGitHub 0ec23b34ba [Enhancement] Pause Owl Warp (#620)
* Add Pause Owl Warp Enhancement

- **mm/2s2h/BenGui/BenMenuBar.cpp**: Updated menu to include new enhancement options.
- **mm/2s2h/Enhancements/Enhancements.cpp**: Registered the new Pause Owl Warp enhancement.
- **mm/2s2h/Enhancements/Enhancements.h**: Declared functions for the new enhancement.
- **mm/2s2h/Enhancements/Songs/PauseOwlWarp.cpp**: Implemented the Pause Owl Warp functionality.
- **mm/2s2h/Enhancements/Songs/PauseOwlWarp.h**: Header file for the Pause Owl Warp implementation.
- **mm/include/functions.h**: Added function declarations related to the new enhancement.
- **mm/src/overlays/kaleido_scope/ovl_kaleido_map.c**: Modified to support the new enhancement.
- **mm/src/overlays/kaleido_scope/ovl_kaleido_scope_NES.c**: Modified to support the new enhancement.

* ran clang-format script

* Additional logic and bug fixes

* Fix PauseOwlWarp cursor logic triggering on dungeon map
-Added a check to ensure PauseOwlWarp's cursor logic is only triggered when not in a dungeon.

* Add Song of Soaring check
- To make it more in line with vanilla, you are now required to have the Song of Soaring to use this enhancement.

* bug fix and ran clang-format script
-My previous commit had a extra condition that wasn't needed that caused a bug where the world map points locations pointed to activated owl statues.

* added more checks

* Simplified complex conditional statements

* possibly fix macos build issue?

* index warping logic added

* implement feedback from Archez

* shot in the dark macos build fix?

* how bout now?

* revert back to previous commit

* if this fixed the macos build issue it'll be thanks to cclark25... let's pray

* add debugeditor check - thanks archez!

* Moved debugEditor check to prevent triggering ALL pauseOwlWarp logic. wtf was I thinking earlier
2024-08-05 15:18:52 -04:00
d0caa0f78c [Cheat] Stop time in Temples and Dungeons (#700)
* add cheat to stop time in temples

* better tooltip

* adds option to stop time in dungeons

* clean up

* add other pirate fortress scenes

* add new hook

* update tooltips

* rename hook

* add clarification

Co-authored-by: Archez <Archez@users.noreply.github.com>

* clean combobox

---------

Co-authored-by: Archez <Archez@users.noreply.github.com>
2024-08-05 15:12:08 -04:00
51af06463f Item drops 3D! (#633)
* Initial 3D Item Drops Toggle

* Use generic hooks and other tweaks

* 3d drop fixes and changes

* move slime item draw to VB hook; fix arrow GID

* whitespacing

---------

Co-authored-by: Garrett Cox <garrettjcox@gmail.com>
Co-authored-by: Archez <archez39@me.com>
2024-07-23 21:39:25 -04:00
Waterdish 17dd587241 Bump 1.0.2 2024-07-14 12:14:10 -07:00
ArchezandGitHub 57cb5d2b51 Merge develop-rika -> develop
Merge develop-rika -> develop
2024-07-11 22:36:55 -04:00
Archez 24d8d47ab2 Merge remote-tracking branch 'origin/develop' into merge-develop-rika 2024-07-11 22:05:15 -04:00
aa1b0108f4 [Enhancement] Preseve time speed during cycle reset (#658)
* preseve time speed during cycle reset enhancement

* clang format

* update variable assignment

Co-authored-by: Archez <Archez@users.noreply.github.com>

* add default value

* better initial value

---------

Co-authored-by: Archez <Archez@users.noreply.github.com>
2024-07-11 21:44:08 -04:00
ArchezandGitHub e0731a194c Bump Rika Charlie (#739) 2024-07-11 15:08:32 -04:00
ArchezandGitHub 0455c0f053 Fixes for cycle reset, fairy bottle, auto save, and save editor equips (#740)
* fixes for cycle reset, fairy bottle, and save editor equips

* prevent auto save during minigames

* prevent crash with fast mask transform
2024-07-10 13:02:02 -04:00
ArchezandGitHub 5984bdea19 Fix crash with graphics menu index out of bounds (#738) 2024-07-08 23:47:42 -04:00
ArchezandGitHub 2bb149b367 Tweak: Improve Save Editor time options (#729)
* improve save editor time options

* set gPlayState after early returns to avoid dangling ptr

* avoid crash with day 0 on daytelop
2024-07-08 17:57:17 -04:00
ArchezandGitHub 7458760c75 Fix rumble lasting too long (#736) 2024-07-08 17:50:03 -04:00
MalkierianandGitHub dcc38678a6 Eliminate Graphics Menu Lag (#733)
* Moved non-dynamic window backend data to external variables and update function called on init and combobox change.

* clang
2024-07-05 23:33:05 -04:00
ArchezandGitHub f201a494d2 Fix: Clean up flags when using debug warp (#728)
* Fix: Clean up flags when using debug warp

* comments
2024-06-28 17:48:24 -04:00
ArchezandGitHub 6af9227293 Fix: Add reset func for cucco storm (#725) 2024-06-28 12:02:26 -04:00
ArchezandGitHub 36f31463f3 add reset func for EnBats actor (#724) 2024-06-28 11:01:00 -04:00
ArchezandGitHub da76b32433 Fix incorrect flag setting in save editor (#722) 2024-06-27 09:19:20 -04:00
ArchezandGitHub 00403e452f Tweak FreeLock reset logic (#721) 2024-06-26 18:37:21 -04:00
ArchezandGitHub 03a33628cb fix skybox textures not reloading (#719) 2024-06-26 17:45:50 -04:00
ArchezandGitHub 60673fac35 Fix: Prevent crash on loading OOB info panel textures in kaleido (#720) 2024-06-26 10:36:05 -04:00
ArchezandGitHub 72f6fd158c Fix Dawn Of screen crashing with 4th glitch (#718) 2024-06-25 23:40:51 -04:00
2e4710c6c2 Tweaks to warp point (#666)
* Tweaks to warp point

* wait for console logo exit

---------

Co-authored-by: Archez <Archez@users.noreply.github.com>
2024-06-25 00:16:10 -04:00
MalkierianandGitHub 1f3ca038a8 PowerShell clang fix (#714)
* Fixes script running in commandline mode by adding System.Net inclusion at the top.
Also adds clang-format.exe to gitignore.

* Change System.Net namespace to System.
2024-06-24 23:42:12 -04:00
791064e870 Add Basic README (#664)
* Add basic readme

* Update README.md

---------

Co-authored-by: Archez <Archez@users.noreply.github.com>
2024-06-24 23:17:36 -04:00
balloondude2andGitHub 3ef3e7a239 [Enhancement] Fix Fierce Deity interactions with Bombers (#674)
* Allow FD to talk to Bomber Jim. Adds comments to unknown data.

* fd works with blue bombers and guard bomber

* clang format
2024-06-24 20:46:58 -04:00
louist103andGitHub 0d4e554ac6 Save editor temple clear fix (#709) 2024-06-24 09:34:40 -04:00
louist103andGitHub a933d73589 Fix the check for preventing a HESS crash. (#710)
* Fix the check

* Change style

* Another fix in SKelanime.

* Format
2024-06-23 17:11:21 -04:00
ArchezandGitHub a38b9daa6d Add HUD Editor support for horse carrots (#704) 2024-06-23 15:19:33 -04:00
ArchezandGitHub 120562952c bump lus with color combiner fixes (#711) 2024-06-23 14:51:57 -04:00
ArchezandGitHub fc309f5eaa bump lus with ucode change (#708) 2024-06-22 15:05:32 -04:00
inspectredcandGitHub e87d7c6954 Delete z_message_tables.inc (#685) 2024-06-18 20:01:17 -04:00
ArchezandGitHub 8b2b12dbe8 Bump latest lus and bring over Array resource (#689)
* bump latest lus and bring over array resource

* use upstream otrexporter
2024-06-18 20:00:16 -04:00
ArchezandGitHub c2199dddcf Fix: Add reset func for moon crash giants cutscene (#694) 2024-06-15 15:52:42 -04:00
justawayofthesamuraiandGitHub cc3e015f12 Added a fix for the moonjump so it doesn't crash the game when changing the day. (#693) 2024-06-15 15:02:30 -04:00
inspectredcandGitHub a383b4b330 Fix Fast Text Not Working on Instant Textboxes (#662)
* Fix Fast Text Not Working on Instant Textboxes

* format
2024-06-14 20:55:24 -04:00
inspectredcandGitHub df81f97e43 Add Free Look Camera Reset (#663) 2024-06-14 20:55:05 -04:00
inspectredcandGitHub e60ca15ae6 Merge pull request #683 from HarbourMasters/develop-rika
`develop-rika` -> `develop`
2024-06-10 11:51:48 +01:00
briaguyaandGitHub 84b9b4218a ci: wget sdl from gh release (#677)
fix that worked from https://github.com/HarbourMasters/2ship2harkinian/pull/676 but pointing to the right branch
2024-06-08 21:53:14 +01:00
Garrett CoxandGitHub 6fd7fc3a9d Merge pull request #659 from HarbourMasters/develop-rika
`develop-rika` -> `develop`
2024-06-04 07:42:49 -05:00
51a6d9d926 [Enhancement] Fast Deku Flower Launch (#549)
* Add fast deku flower launch enhancement

Co-authored-by: Patrick12115 <115201185+Patrick12115@users.noreply.github.com>

* Migrate to a hook

---------

Co-authored-by: Garrett Cox <garrettjcox@gmail.com>
2024-06-04 01:58:32 -05:00
ArchezandGitHub 4b36181ee2 Fix dungeon map palette loading (#653) 2024-06-04 01:57:47 -05:00
5e17828cc4 [Cheat] Longer Deku Flower Gliding (#548)
* Add Longer Flower Glide enhancement

Co-authored-by: Patrick12115 <115201185+Patrick12115@users.noreply.github.com>

* Tweak to just modify an array

* Update mm/2s2h/Enhancements/Cheats/LongerFlowerGlide.cpp

---------

Co-authored-by: Garrett Cox <garrettjcox@gmail.com>
2024-06-04 00:02:48 -05:00
d2a11f1476 [Enhancement] Instant Putaway (#547)
* Instant Putaway Enhancement

Co-authored-by: Patrick12115 <115201185+Patrick12115@users.noreply.github.com>

* Tweak some things and merge with Player Movement

---------

Co-authored-by: Garrett Cox <garrettjcox@gmail.com>
2024-06-03 22:38:29 -05:00
Garrett CoxandGitHub f8f00e6d9b Add draw distance enhancements for actors and scene geometry (#539) 2024-06-02 23:15:33 -05:00
2d8bc175fe [Enhancement] Blast Mask with Powder Keg (#642)
* Blast Mask adds Powder Keg explosive property.

* Alphabetical Menu Listing + clang

* Apply suggestions from code review

---------

Co-authored-by: Garrett Cox <garrettjcox@gmail.com>
2024-06-02 22:27:33 -05:00
5de6a9ac8f Add 2ship-specific BUILDING.md and supportedHashes.json. (#551)
* Add 2ship-specific BUILDING.md and supportedHashes.json.

* Somehow missed N64 hash.
Shipwright -> 2ship2harkinian
Ship.sln -> 2s2h.sln

* Mac dependencies

Co-authored-by: inspectredc <78732756+inspectredc@users.noreply.github.com>

---------

Co-authored-by: inspectredc <78732756+inspectredc@users.noreply.github.com>
2024-06-02 21:54:36 -05:00
03a597d44c [Enhancement] Banker - Adds Min Max Functionality (#591)
* Adds min and max functionality by pressing the R and Z buttons while the Deposit Rupees dialogue box is opened.

* Place functionality behind a cvar.

* clangified

* I slished when i shoulda slashed!

* removal of src/

* Typo in tooltip

* Updated to dynamic hook registration and fix sfx spam.

* clang

* Remove double assignment.

* Update to HOOK_ID and adds Withdrawal functionaility.

* Updated currentTextId's to actual format.

* Clangs

* Move to dialogue menu

---------

Co-authored-by: Garrett Cox <garrettjcox@gmail.com>
2024-06-02 21:52:30 -05:00
139a240ed3 [Graphics] Disable Black Bar Letterboxes (#590)
* Black Bars be gone

* Move it to draw/apply functions

Updates in real time now

* Added return instead

* added space

* Update mm/2s2h/Enhancements/Enhancements.cpp

* Update mm/2s2h/Enhancements/Enhancements.cpp

---------

Co-authored-by: Garrett Cox <garrettjcox@gmail.com>
2024-06-02 21:32:19 -05:00
26321c9a17 Adds Dungeon Items to the Save Editor (#585)
* Adds Dungeon Items to the Save Editor

* clang'd up

* Update mm/include/z64save.h

Co-authored-by: Garrett Cox <garrettjcox@gmail.com>

* Move a few static arrays

---------

Co-authored-by: Garrett Cox <garrettjcox@gmail.com>
2024-06-02 21:18:17 -05:00
888b8fe24a Skip Magic Arrow Equip Animation (#546)
* Recreate Magic Equip Animation Skip PR for new Fork.

* After Running Clang Powershell Script

* Delete clang-format.exe

* Apply suggestions from code review

---------

Co-authored-by: Garrett Cox <garrettjcox@gmail.com>
2024-06-02 20:18:16 -05:00
Garrett CoxandGitHub 53e76c5aeb Add time-moves-when-you-move mode (#536) 2024-06-02 20:10:08 -05:00
Waterdish f64cf9d56d 1.0.1 Update app values 2024-06-02 15:34:41 -07:00
Waterdish 43ebcd0305 Update to 2S2H 1.0.1 2024-06-02 15:18:22 -07:00
WaterdishandGitHub 07ac8c2a1b Update README.md 2024-06-02 14:36:26 -07:00
Waterdish 891fcafa57 Update 1.0.0.1 2024-06-02 14:27:08 -07:00
Waterdish 8e3a447798 F1 toggle button 2024-06-02 14:27:08 -07:00
Waterdish 41ace195cd Prepare for future gyro support 2024-06-02 14:27:08 -07:00
Waterdish c0593af8db ImGui fixes in LUS 2024-06-02 14:27:08 -07:00
Waterdish 4770f538a9 Ignore release folder 2024-06-02 14:27:08 -07:00
Waterdish 5dedbc45c1 Copy asset files during build 2024-06-02 14:27:08 -07:00
Waterdish bb6c6f5995 SDL cleanup 2024-06-02 14:27:08 -07:00
Waterdish d0dd8c2786 Bump min version to Android 7. Rest in peace Android 6 users 2024-06-02 14:27:08 -07:00
Garrett CoxandGitHub b54542494e Add various tweaks and a warning to debug mode toggle (#643) 2024-06-02 12:50:32 -05:00
ArchezandGitHub eae50e33e3 Fix the PRNG not being seeded when opening intro is skipped (#640) 2024-06-02 12:23:06 -05:00
Garrett CoxandGitHub 04e5ac449d Merge pull request #631 from HarbourMasters/develop-rika
`develop-rika` -> `develop`
2024-05-31 23:36:54 -05:00
inspectredcandGitHub 50b06bff0b lus fix metal crash (#628) 2024-05-31 23:36:17 -05:00
Garrett CoxandGitHub 3a86bdf2dc Version bump Rika Bravo (#626) 2024-05-31 19:51:23 -05:00
Garrett CoxandGitHub 78f0525ec0 Bump LUS (#625) 2024-05-31 19:50:36 -05:00
inspectredcandGitHub a3add6092b Fix Dpad Ocarina L Btn & GI Dpad Stuff (#578) 2024-05-31 19:21:57 -05:00
Jacob ErlyandGitHub a39a9a58e9 Adds sanity checks for bottle duping over items and prevents the issue causing Big Goron to not give the player the Keg License. (#605)
* Update Infinite.cpp

Adds sanity checks for bottle duping and prevents the issue causing Big Goron to not give the player the Keg License.

* Update Infinite.cpp

Formatting.

* Update Infinite.cpp

* Update Infinite.cpp

More formatting trying to work around this Clang stuff while working from Github.
2024-05-31 18:13:42 -04:00
ArchezandGitHub 7bf60f6771 fix hud editor position bugs (#622) 2024-05-31 17:39:26 -04:00
MalkierianandGitHub 63c293f78a Implement Alt Assets Variable LUS (#619)
* Bump LUS to `94b755b77c0c0f566686c9d23fa4c15e23473a0c`.
Remove `CVAR_ALT_ASSETS` from LUS cvars cmake.
Change all pertinent `CVarGetInteger` calls for `CVAR_ALT_ASSETS` to `ResourceManager::IsAltAssetsEnabled`.
Implement frame-end toggle of `mAltAssetsEnabled`.

* Remove `ShouldClearTextureCacheAtEndOfFrame`.
Move prevAltAssets check to end of `Gfx_ProcessGfxCommands`.

* Missed initial `mAltAssetsEnabled` set.
2024-05-31 17:26:04 -04:00
Garrett CoxandGitHub 57d4e62ed0 Fix issue where skipping clock tower cutscene would not return you correctly (#618) 2024-05-30 23:21:18 -05:00
Reinhardt R. GamingandGitHub 877d7f732b Display a MSAA value of 1x as "Off" (#597)
* Change terminology for MSAA setting + tooltip

* Update BenMenuBar.cpp
2024-05-30 22:46:41 -05:00
inspectredcandGitHub 47e98e8ee9 Fix GC Warning Labels (#529) 2024-05-30 22:46:07 -05:00
briaguyaandGitHub 65870f3c07 update to latest lus main (#614)
* update to latest lus main

* upstream otrexporter and zapdtr submodules

* upstream LUS submodule
2024-05-30 23:30:05 -04:00
Garrett CoxandGitHub 464c55fcbb Tweaks to autosaves and pause saves to always persist them, along with preventing saves when it's too early or late in the game (#616) 2024-05-30 23:20:29 -04:00
Garrett CoxandGitHub 8ac7dc6b7d Fix play as kafei by swapping out resources later (#617) 2024-05-30 23:10:45 -04:00
QloneverandGitHub e484e0ba82 fix control code logic (#586) 2024-05-30 22:36:14 -04:00
briaguyaandGitHub f32bccc5b9 ci(linux): install libzip without crypto, bump sdl from 2.28.5 -> 2.30.3 (#588)
* ci(linux): install libzip without crypto, bump sdl from 2.28.5 -> 2.30.3

* just install libzip with apt for otr gen

* copy the .so to a place linuxdeploy looks for it

* but do it in the right place
2024-05-30 22:21:24 -04:00
ArchezandGitHub c7aafb65fd Fix o2r file copy (#592)
* fix o2r file copy script

* move script to cmake folder
2024-05-30 22:12:14 -04:00
ArchezandGitHub 6ff53d4827 fix taking transformation mask off setting unexpected flags (#612) 2024-05-30 22:03:29 -04:00
ArchezandGitHub 73c468d5cf Fix Skybox star colors (#608)
* Fix Skybox star colors

* switch to Color_RGBA8 solution
2024-05-30 21:56:08 -04:00
Garrett CoxandGitHub 74afca9bf7 Remove path sanitize for file drops (#611) 2024-05-30 15:01:55 -05:00
AltoXorgandGitHub 3590cfa118 Append appShortName in savesFolderPath for non-portable builds (#593) 2024-05-29 23:42:17 -04:00
WaterdishandGitHub 9a81e3eac9 Update README.md 2024-05-29 10:40:44 -07:00
WaterdishandGitHub 6b9276847e Update README.md 2024-05-29 10:40:31 -07:00
WaterdishandGitHub cf3b18a7ab Update README.md 2024-05-29 10:01:18 -07:00
WaterdishandGitHub 6a5a5cf201 Update README.md 2024-05-29 09:55:48 -07:00
Waterdish a61cf53f22 Add android project 2024-05-29 09:33:50 -07:00
Waterdish 343e072924 GUI Scaling fixes 2024-05-29 09:33:20 -07:00
ArchezandGitHub c2e1c56413 Fix crash with Deku King during credits (#601) 2024-05-29 17:01:52 +01:00
MalkierianandGitHub e2fb954d99 Disabled checkbox fix (#498)
* Prevent style change and toggle when disabled.

* Fix performance issues for disabled elements being drawn.

* Move `BeginDisabled` to after visible window check to avoid potential mismatch issues.
2024-05-29 12:33:55 +01:00
inspectredcandGitHub 63def6f8df Display GC Version String On Title (#579)
* Display GC Version String On Title

* remove uncompressed case
2024-05-28 23:50:03 -05:00
Waterdish 0ba35fe6a4 Android Fixes 2024-05-28 17:50:08 -07:00
inspectredcandGitHub eb208233e2 Fix Free Look On Woodfall Lilypads/Water (#587) 2024-05-28 19:37:26 -05:00
inspectredcandGitHub 291973fffe Use HOOK_ID typedef (#581) 2024-05-28 13:14:39 -05:00
Garrett CoxandGitHub 01ae001de5 Merge pull request #564 from HarbourMasters/develop-rika
develop-rika -> develop THIRD TIMES THE CHARM
2024-05-27 21:19:23 -05:00
Garrett CoxandGitHub 788c74a19e Fix PR artifacts (#563) 2024-05-27 21:18:14 -05:00
ArchezandGitHub 711b02be55 Merge pull request #554 from HarbourMasters/develop-rika
develop-rika -> develop
2024-05-27 20:47:57 -04:00
ArchezandGitHub 41e35ff3ee Fix macports cache (#543)
* fix macports cache

* cache key obey os version

* more tweaks

* fix sccache and try mac gtar replacement

* oh a custom gtar wrapper..

* comments and different test

* update

* soh otr after main build

* cache bust

* 2ship o2r builder

* change install path

* bust cache

* sccache cmake fixes

* dont list 2ship.o2r in pr artifacts
2024-05-27 17:58:30 -05:00
Garrett CoxandGitHub 513e89c073 Merge pull request #540 from HarbourMasters/develop-rika
develop-rika -> develop
2024-05-27 11:40:47 -05:00
ArchezandGitHub 0eaa533f25 Use GH artifacts (#511)
* use gh artifacts

* update nightly links
2024-05-27 00:01:54 -05:00
356 changed files with 22876 additions and 4092 deletions
+1 -1
View File
@@ -1 +1 @@
libusb-dev libusb-1.0-0-dev libsdl2-dev libsdl2-net-dev libpng-dev libglew-dev libzip-dev zipcmp zipmerge ziptool nlohmann-json3-dev libtinyxml2-dev libspdlog-dev ninja-build
libusb-dev libusb-1.0-0-dev libsdl2-dev libsdl2-net-dev libpng-dev libglew-dev nlohmann-json3-dev libtinyxml2-dev libspdlog-dev ninja-build
+4
View File
@@ -0,0 +1,4 @@
#!/bin/sh
# Call the original gtar executable with sudo for macports cache restoration to root folder
exec sudo /opt/homebrew/bin/gtar.orig "$@"
+182 -218
View File
@@ -98,74 +98,8 @@ jobs:
# source-dir: _packages
# destination-dir: ./
# generate-2ship-otr:
# runs-on: ubuntu-22.04
# steps:
# - uses: actions/checkout@v4
# with:
# submodules: true
# - name: ccache
# uses: hendrikmuhs/ccache-action@v1.2.11
# with:
# key: ${{ runner.os }}-otr-ccache-${{ github.ref }}-${{ github.sha }}
# restore-keys: |
# ${{ runner.os }}-otr-ccache-${{ github.ref }}
# ${{ runner.os }}-otr-ccache
# - name: Install dependencies
# run: |
# sudo apt-get update
# sudo apt-get install -y $(cat .github/workflows/apt-deps.txt)
# - name: Cache build folders
# uses: actions/cache@v4
# with:
# key: ${{ runner.os }}-otr-build-${{ github.ref }}-${{ github.sha }}
# restore-keys: |
# ${{ runner.os }}-otr-build-${{ github.ref }}
# ${{ runner.os }}-otr-build
# path: |
# build-cmake
# SDL2-2.28.5
# tinyxml2-10.0.0
# - name: Install latest SDL
# run: |
# export PATH="/usr/lib/ccache:/usr/local/opt/ccache/libexec:$PATH"
# if [ ! -d "SDL2-2.28.5" ]; then
# wget https://www.libsdl.org/release/SDL2-2.28.5.tar.gz
# tar -xzf SDL2-2.28.5.tar.gz
# fi
# cd SDL2-2.28.5
# ./configure --enable-hidapi-libusb
# make -j 10
# sudo make install
# sudo cp -av /usr/local/lib/libSDL* /lib/x86_64-linux-gnu/
# - name: Install latest tinyxml2
# run: |
# sudo apt-get remove libtinyxml2-dev
# export PATH="/usr/lib/ccache:/usr/local/opt/ccache/libexec:$PATH"
# if [ ! -d "tinyxml2-10.0.0" ]; then
# wget https://github.com/leethomason/tinyxml2/archive/refs/tags/10.0.0.tar.gz
# tar -xzf 10.0.0.tar.gz
# fi
# cd tinyxml2-10.0.0
# mkdir -p build
# cd build
# cmake ..
# make
# sudo make install
# - name: Generate 2ship.o2r
# run: |
# export PATH="/usr/lib/ccache:/usr/local/opt/ccache/libexec:$PATH"
# cmake --no-warn-unused-cli -H. -Bbuild-cmake -GNinja -DCMAKE_BUILD_TYPE:STRING=Release
# cmake --build build-cmake --config Release --target Generate2ShipOtr -j3
# - uses: actions/upload-artifact@v4
# with:
# name: 2ship.o2r
# path: 2ship.o2r
# retention-days: 1
build-macos:
# needs: generate-2ship-otr
runs-on: macos-14
generate-2ship-otr:
runs-on: ubuntu-22.04
steps:
- uses: actions/checkout@v4
with:
@@ -173,105 +107,30 @@ jobs:
- name: ccache
uses: hendrikmuhs/ccache-action@v1.2.13
with:
create-symlink: true
key: ${{ runner.os }}-14-ccache-${{ github.ref }}-${{ github.sha }}
key: ${{ runner.os }}-otr-ccache-${{ github.ref }}-${{ github.sha }}
restore-keys: |
${{ runner.os }}-14-ccache-${{ github.ref }}
${{ runner.os }}-14-ccache
- name: Cache MacPorts
id: cache-macports
uses: actions/cache@v4
with:
path: /opt/local/
key: ${{ runner.os }}-macports-${{ hashFiles('.github/workflows/macports-deps.txt') }}
restore-keys: |
${{ runner.os }}-macports
- name: Install MacPorts (if necessary)
run: |
if [ -d /opt/local/ ]; then
echo "MacPorts already installed"
else
wget https://github.com/macports/macports-base/releases/download/v2.9.3/MacPorts-2.9.3-14-Sonoma.pkg
sudo installer -pkg ./MacPorts-2.9.3-14-Sonoma.pkg -target /
fi
echo "/opt/local/bin:/opt/local/sbin" >> $GITHUB_PATH
- name: Install dependencies
run: |
brew uninstall --ignore-dependencies libpng
sudo port install $(cat .github/workflows/macports-deps.txt)
brew install ninja
# - name: Download 2ship.o2r
# uses: actions/download-artifact@v4
# with:
# name: 2ship.o2r
# path: build-cmake/mm
- name: Build 2Ship
run: |
export PATH="/usr/lib/ccache:/usr/local/opt/ccache/libexec:$PATH"
cmake --no-warn-unused-cli -H. -Bbuild-cmake -GNinja -DCMAKE_BUILD_TYPE:STRING=Release -DCMAKE_OSX_ARCHITECTURES="x86_64;arm64"
cmake --build build-cmake --config Release --target Generate2ShipOtr --parallel 10
cmake --build build-cmake --config Release --parallel 10
(cd build-cmake && cpack)
mv _packages/*.dmg 2Ship.dmg
mv README.md readme.txt
# - name: Upload build
# if: ${{ startsWith(github.ref, 'refs/heads/develop') }}
# uses: actions/upload-artifact@v4
# with:
# name: 2ship-mac
# path: |
# 2Ship.dmg
# readme.txt
- name: Zip build
run: |
mkdir -p _release
zip -qq _release/2ship-mac.zip 2ship.dmg readme.txt
- name: Upload build
if: ${{ startsWith(github.ref, 'refs/heads/develop') }}
uses: ryand56/r2-upload-action@latest
with:
r2-account-id: ${{ secrets.R2_ACCOUNT_ID }}
r2-access-key-id: ${{ secrets.R2_ACCESS_KEY_ID }}
r2-secret-access-key: ${{ secrets.R2_SECRET_ACCESS_KEY }}
r2-bucket: ${{ secrets.R2_BUCKET }}
source-dir: _release
destination-dir: ./
build-linux:
# needs: generate-2ship-otr
runs-on: ubuntu-22.04
steps:
- uses: actions/checkout@v4
with:
submodules: true
${{ runner.os }}-otr-ccache-${{ github.ref }}
${{ runner.os }}-otr-ccache-
- name: Install dependencies
run: |
sudo apt-get update
sudo apt-get install -y $(cat .github/workflows/apt-deps.txt)
- name: ccache
uses: hendrikmuhs/ccache-action@v1.2.11
with:
key: linux-ccache-${{ github.ref }}-${{ github.sha }}
restore-keys: |
linux-ccache-${{ github.ref }}
linux-ccache
sudo apt-get install -y $(cat .github/workflows/apt-deps.txt) libzip-dev zipcmp zipmerge ziptool
- name: Cache build folders
uses: actions/cache@v4
with:
key: linux-build-${{ github.ref }}-${{ github.sha }}
key: ${{ runner.os }}-otr-build-${{ github.ref }}-${{ github.sha }}
restore-keys: |
linux-build-${{ github.ref }}
linux-build
${{ runner.os }}-otr-build-${{ github.ref }}
${{ runner.os }}-otr-build-
path: |
build-cmake
SDL2-2.28.5
SDL2_net-2.2.0
tinyxml2-10.0.0
- name: Install latest SDL
run: |
export PATH="/usr/lib/ccache:/usr/local/opt/ccache/libexec:$PATH"
if [ ! -d "SDL2-2.28.5" ]; then
wget https://www.libsdl.org/release/SDL2-2.28.5.tar.gz
wget https://github.com/libsdl-org/SDL/releases/download/release-2.28.5/SDL2-2.28.5.tar.gz
tar -xzf SDL2-2.28.5.tar.gz
fi
cd SDL2-2.28.5
@@ -293,28 +152,162 @@ jobs:
cmake ..
make
sudo make install
- name: Install latest SDL_net
- name: Generate 2ship.o2r
run: |
export PATH="/usr/lib/ccache:/usr/local/opt/ccache/libexec:$PATH"
if [ ! -d "SDL2_net-2.2.0" ]; then
wget https://www.libsdl.org/projects/SDL_net/release/SDL2_net-2.2.0.tar.gz
tar -xzf SDL2_net-2.2.0.tar.gz
cmake --no-warn-unused-cli -H. -Bbuild-cmake -GNinja -DCMAKE_BUILD_TYPE:STRING=Release
cmake --build build-cmake --config Release --target Generate2ShipOtr -j3
- uses: actions/upload-artifact@v4
with:
name: 2ship.o2r
path: 2ship.o2r
retention-days: 1
build-macos:
needs: generate-2ship-otr
runs-on: macos-14
steps:
- uses: actions/checkout@v4
with:
submodules: true
- name: ccache
uses: hendrikmuhs/ccache-action@v1.2.13
with:
create-symlink: true
key: ${{ runner.os }}-14-ccache-${{ github.ref }}-${{ github.sha }}
restore-keys: |
${{ runner.os }}-14-ccache-${{ github.ref }}
${{ runner.os }}-14-ccache-
# Needed to apply sudo for macports cache restore
- name: Install gtar wrapper
run: |
sudo mv /opt/homebrew/bin/gtar /opt/homebrew/bin/gtar.orig
sudo cp .github/workflows/gtar /opt/homebrew/bin/gtar
sudo chmod +x /opt/homebrew/bin/gtar
- name: Cache MacPorts
id: cache-macports
uses: actions/cache@v4
with:
path: /opt/local/
key: ${{ runner.os }}-14-macports-${{ hashFiles('.github/workflows/macports-deps.txt') }}
restore-keys: |
${{ runner.os }}-14-macports-
# Updated PATH applies to the next step and onwards
- name: Install MacPorts (if necessary)
run: |
if command -v /opt/local/bin/port 2>&1 >/dev/null; then
echo "MacPorts already installed"
else
echo "Installing MacPorts"
wget https://github.com/macports/macports-base/releases/download/v2.9.3/MacPorts-2.9.3-14-Sonoma.pkg
sudo installer -pkg ./MacPorts-2.9.3-14-Sonoma.pkg -target /
fi
cd SDL2_net-2.2.0
./configure
echo "/opt/local/bin:/opt/local/sbin" >> "$GITHUB_PATH"
- name: Install dependencies
run: |
brew uninstall --ignore-dependencies libpng
sudo port install $(cat .github/workflows/macports-deps.txt)
brew install ninja
- name: Download 2ship.o2r
uses: actions/download-artifact@v4
with:
name: 2ship.o2r
path: build-cmake/mm
- name: Build 2Ship
run: |
export PATH="/usr/lib/ccache:/usr/local/opt/ccache/libexec:$PATH"
cmake --no-warn-unused-cli -H. -Bbuild-cmake -GNinja -DCMAKE_BUILD_TYPE:STRING=Release -DCMAKE_OSX_ARCHITECTURES="x86_64;arm64"
cmake --build build-cmake --config Release --parallel 10
(cd build-cmake && cpack)
mv _packages/*.dmg 2Ship.dmg
mv README.md readme.txt
- name: Upload build
uses: actions/upload-artifact@v4
with:
name: 2ship-mac
path: |
2Ship.dmg
readme.txt
build-linux:
needs: generate-2ship-otr
runs-on: ubuntu-22.04
steps:
- uses: actions/checkout@v4
with:
submodules: true
- name: Install dependencies
run: |
sudo apt-get update
sudo apt-get install -y $(cat .github/workflows/apt-deps.txt)
- name: ccache
uses: hendrikmuhs/ccache-action@v1.2.13
with:
key: linux-ccache-${{ github.ref }}-${{ github.sha }}
restore-keys: |
linux-ccache-${{ github.ref }}
linux-ccache-
- name: Cache build folders
uses: actions/cache@v4
with:
key: linux-build-${{ github.ref }}-${{ github.sha }}
restore-keys: |
linux-build-${{ github.ref }}
linux-build-
path: |
SDL2-2.30.3
tinyxml2-10.0.0
libzip-1.10.1
- name: Install latest SDL
run: |
export PATH="/usr/lib/ccache:/usr/local/opt/ccache/libexec:$PATH"
if [ ! -d "SDL2-2.30.3" ]; then
wget https://github.com/libsdl-org/SDL/releases/download/release-2.30.3/SDL2-2.30.3.tar.gz
tar -xzf SDL2-2.30.3.tar.gz
fi
cd SDL2-2.30.3
./configure --enable-hidapi-libusb
make -j 10
sudo make install
sudo cp -av /usr/local/lib/libSDL* /lib/x86_64-linux-gnu/
# - name: Download 2ship.o2r
# uses: actions/download-artifact@v4
# with:
# name: 2ship.o2r
# path: build-cmake/mm
- name: Install latest tinyxml2
run: |
sudo apt-get remove libtinyxml2-dev
export PATH="/usr/lib/ccache:/usr/local/opt/ccache/libexec:$PATH"
if [ ! -d "tinyxml2-10.0.0" ]; then
wget https://github.com/leethomason/tinyxml2/archive/refs/tags/10.0.0.tar.gz
tar -xzf 10.0.0.tar.gz
fi
cd tinyxml2-10.0.0
mkdir -p build
cd build
cmake ..
make
sudo make install
- name: Install libzip without crypto
run: |
export PATH="/usr/lib/ccache:/usr/local/opt/ccache/libexec:$PATH"
if [ ! -d "libzip-1.10.1" ]; then
wget https://github.com/nih-at/libzip/releases/download/v1.10.1/libzip-1.10.1.tar.gz
tar -xzf libzip-1.10.1.tar.gz
fi
cd libzip-1.10.1
mkdir -p build
cd build
cmake .. -DENABLE_COMMONCRYPTO=OFF -DENABLE_GNUTLS=OFF -DENABLE_MBEDTLS=OFF -DENABLE_OPENSSL=OFF
make
sudo make install
sudo cp -av /usr/local/lib/libzip* /lib/x86_64-linux-gnu/
- name: Download 2ship.o2r
uses: actions/download-artifact@v4
with:
name: 2ship.o2r
path: build-cmake/mm
- name: Build 2Ship
run: |
export PATH="/usr/lib/ccache:/usr/local/opt/ccache/libexec:$PATH"
cmake --no-warn-unused-cli -H. -Bbuild-cmake -GNinja -DCMAKE_BUILD_TYPE:STRING=Release -DBUILD_REMOTE_CONTROL=1
cmake --build build-cmake --config Release --target Generate2ShipOtr -j3
cmake --build build-cmake --config Release -j3
(cd build-cmake && cpack -G External)
@@ -323,32 +316,16 @@ jobs:
env:
CC: gcc-12
CXX: g++-12
# Temporarily replaced with an upload to R2 until we go public
# - name: Upload build
# uses: actions/upload-artifact@v4
# with:
# name: 2ship-linux
# path: |
# 2ship.appimage
# readme.txt
# Remove Zip step when uploading directly to GH artifactory
- name: Zip build
run: |
mkdir -p _release
zip -qq _release/2ship-linux.zip 2ship.appimage readme.txt
- name: Upload build
if: ${{ startsWith(github.ref, 'refs/heads/develop') }}
uses: ryand56/r2-upload-action@latest
uses: actions/upload-artifact@v4
with:
r2-account-id: ${{ secrets.R2_ACCOUNT_ID }}
r2-access-key-id: ${{ secrets.R2_ACCESS_KEY_ID }}
r2-secret-access-key: ${{ secrets.R2_SECRET_ACCESS_KEY }}
r2-bucket: ${{ secrets.R2_BUCKET }}
source-dir: _release
destination-dir: ./
name: 2ship-linux
path: |
2ship.appimage
readme.txt
build-windows:
# needs: generate-2ship-otr
needs: generate-2ship-otr
runs-on: windows-latest
steps:
- name: Install dependencies
@@ -359,60 +336,47 @@ jobs:
with:
submodules: true
- name: ccache
uses: hendrikmuhs/ccache-action@v1.2.11
uses: hendrikmuhs/ccache-action@v1.2.13
with:
variant: sccache
max-size: "1G"
key: ${{ runner.os }}-ccache-${{ github.ref }}-${{ github.sha }}
key: ${{ runner.os }}-ccache1-${{ github.ref }}-${{ github.sha }}
restore-keys: |
${{ runner.os }}-ccache-${{ github.ref }}
${{ runner.os }}-ccache
${{ runner.os }}-ccache1-${{ github.ref }}
${{ runner.os }}-ccache1-
- name: Cache build folder
uses: actions/cache@v4
with:
save-always: true
key: ${{ runner.os }}-build-${{ github.ref }}-${{ github.sha }}
key: ${{ runner.os }}-build1-${{ github.ref }}-${{ github.sha }}
restore-keys: |
${{ runner.os }}-build-${{ github.ref }}
${{ runner.os }}-build
${{ runner.os }}-build1-${{ github.ref }}
${{ runner.os }}-build1-
path: |
build-windows
vcpkg
- name: Configure Developer Command Prompt
uses: ilammy/msvc-dev-cmd@v1
# - name: Download 2ship.o2r
# uses: actions/download-artifact@v4
# with:
# name: 2ship.o2r
# path: build-windows/mm
- name: Download 2ship.o2r
uses: actions/download-artifact@v4
with:
name: 2ship.o2r
path: build-windows/mm
- name: Build 2Ship
env:
env:
VCPKG_ROOT: ${{github.workspace}}/vcpkg
run: |
set $env:PATH="$env:USERPROFILE/.cargo/bin;$env:PATH"
cmake -S . -B build-windows -G Ninja -DCMAKE_MAKE_PROGRAM=ninja -DCMAKE_BUILD_TYPE:STRING=Release
cmake --build build-windows --config Release --target Generate2ShipOtr --parallel 10
cmake -S . -B build-windows -G Ninja -DCMAKE_MAKE_PROGRAM=ninja -DCMAKE_BUILD_TYPE:STRING=Release -DCMAKE_C_COMPILER_LAUNCHER=sccache -DCMAKE_CXX_COMPILER_LAUNCHER=sccache
cmake --build build-windows --config Release --parallel 10
(cd build-windows && cpack)
cd ..
mv _packages/*.zip _packages/2ship-windows.zip
# Temporarily replaced with an upload to R2 until we go public
# - name: Unzip package
# run: Expand-Archive -Path _packages/2ship-windows.zip -DestinationPath 2ship-windows
# - name: Upload build
# if: ${{ startsWith(github.ref, 'refs/heads/develop') }}
# uses: actions/upload-artifact@v4
# with:
# name: 2ship-windows
# path: 2ship-windows
- name: Unzip package
run: Expand-Archive -Path _packages/2ship-windows.zip -DestinationPath 2ship-windows
- name: Upload build
if: ${{ startsWith(github.ref, 'refs/heads/develop') }}
uses: ryand56/r2-upload-action@latest
uses: actions/upload-artifact@v4
with:
r2-account-id: ${{ secrets.R2_ACCOUNT_ID }}
r2-access-key-id: ${{ secrets.R2_ACCESS_KEY_ID }}
r2-secret-access-key: ${{ secrets.R2_SECRET_ACCESS_KEY }}
r2-bucket: ${{ secrets.R2_BUCKET }}
source-dir: _packages
destination-dir: ./
name: 2ship-windows
path: 2ship-windows
+8 -6
View File
@@ -12,7 +12,7 @@ jobs:
if: ${{ github.event.workflow_run.event == 'pull_request' }}
steps:
- id: 'pr-number'
uses: actions/github-script@v6
uses: actions/github-script@v7
with:
result-encoding: string
script: |
@@ -20,8 +20,9 @@ jobs:
const pullHeadSHA = '${{github.event.workflow_run.head_sha}}';
const pullUserId = ${{github.event.sender.id}};
const prNumber = await (async () => {
const pulls = await github.rest.pulls.list({owner, repo});
for await (const {data} of github.paginate.iterator(pulls)) {
for await (const { data } of github.paginate.iterator(
github.rest.pulls.list, { owner, repo }
)) {
for (const pull of data) {
if (pull.head.sha === pullHeadSHA && pull.user.id === pullUserId) {
return pull.number;
@@ -36,7 +37,7 @@ jobs:
return prNumber;
- id: 'artifacts-text'
uses: actions/github-script@v6
uses: actions/github-script@v7
with:
result-encoding: string
script: |
@@ -48,12 +49,13 @@ jobs:
return allArtifacts.data.artifacts.reduce((acc, item) => {
if (item.name === "assets") return acc;
if (item.name === "2ship.o2r") return acc;
acc += `
- [${item.name}.zip](https://nightly.link/${context.repo.owner}/${context.repo.repo}/actions/artifacts/${item.id}.zip?h=20a00267c7ffeb2eb80ab31f356f2ba5f120f43c)`;
- [${item.name}.zip](https://nightly.link/${context.repo.owner}/${context.repo.repo}/actions/artifacts/${item.id}.zip)`;
return acc;
}, '### Build Artifacts');
- id: 'add-to-pr'
uses: garrettjoecox/pr-section@3.1.0
uses: garrettjoecox/pr-section@4.0.0
with:
repo-token: '${{ secrets.GITHUB_TOKEN }}'
pr-number: ${{ steps.pr-number.outputs.result }}
+1
View File
@@ -66,3 +66,4 @@ _packages/
/mm/src/boot/build.c
/mm/windows/properties.h
/clang-format.exe
+3 -3
View File
@@ -1,9 +1,9 @@
[submodule "libultraship"]
path = libultraship
url = https://github.com/kenix3/libultraship.git
url = https://github.com/Waterdish/libultraship.git
[submodule "OTRExporter"]
path = OTRExporter
url = https://github.com/louist103/OTRExporter.git
url = https://github.com/Waterdish/OTRExporter.git
[submodule "ZAPDTR"]
path = ZAPDTR
url = https://github.com/louist103/ZAPDTR.git
url = https://github.com/Waterdish/ZAPDTR.git
+34
View File
@@ -0,0 +1,34 @@
# Gradle files
.gradle/
build/
# Local configuration file (sdk path, etc)
local.properties
# Log/OS Files
*.log
# Android Studio generated files and folders
captures/
.externalNativeBuild/
.cxx/
*.apk
output.json
app/release/
# IntelliJ
*.iml
.idea/
misc.xml
deploymentTargetDropDown.xml
render.experimental.xml
# Keystore files
*.jks
*.keystore
# Google Services (e.g. APIs or Firebase)
google-services.json
# Android Profiling
*.hprof
+86
View File
@@ -0,0 +1,86 @@
def buildAsLibrary = project.hasProperty('BUILD_AS_LIBRARY');
def buildAsApplication = !buildAsLibrary
if (buildAsApplication) {
apply plugin: 'com.android.application'
}
else {
apply plugin: 'com.android.library'
}
android {
ndkPath "/home/waterdish/Android/Sdk/ndk/26.0.10792818" // Point to your own NDK
compileSdkVersion 31
defaultConfig {
if (buildAsApplication) {
applicationId "com.dishii.mm"
}
minSdkVersion 24
targetSdkVersion 31
versionCode 4
versionName "1.1.1"
externalNativeBuild {
//ndkBuild {
// arguments "APP_PLATFORM=android-23"
// abiFilters 'armeabi-v7a', 'arm64-v8a', 'x86', 'x86_64'
//}
cmake {
arguments "-DSDL_SHARED=ON", "-DANDROID_STL=c++_static", "-DHAVE_LD_VERSION_SCRIPT=OFF",'-DUSE_OPENGLES=ON'
abiFilters 'armeabi-v7a', 'arm64-v8a', 'x86', 'x86_64'
//abiFilters 'arm64-v8a'
}
}
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
applicationVariants.all { variant ->
tasks["merge${variant.name.capitalize()}Assets"]
.dependsOn("externalNativeBuild${variant.name.capitalize()}")
}
if (!project.hasProperty('EXCLUDE_NATIVE_LIBS')) {
sourceSets.main {
jniLibs.srcDir 'libs'
}
externalNativeBuild {
//ndkBuild {
// path 'jni/Android.mk'
//}
cmake {
path '../../CMakeLists.txt'
version "3.25.1"
}
}
}
lintOptions {
abortOnError false
}
if (buildAsLibrary) {
libraryVariants.all { variant ->
variant.outputs.each { output ->
def outputFile = output.outputFile
if (outputFile != null && outputFile.name.endsWith(".aar")) {
def fileName = "org.libsdl.app.aar";
output.outputFile = new File(outputFile.parent, fileName);
}
}
}
}
}
dependencies {
implementation fileTree(include: ['*.jar'], dir: 'libs')
implementation 'androidx.core:core:1.7.0' // Use the latest version
implementation 'androidx.constraintlayout:constraintlayout:2.1.4'
}
task wrapper(type: Wrapper) {
gradleVersion = '7.0.3'
}
task prepareKotlinBuildScriptModel {
}
Binary file not shown.
+5
View File
@@ -0,0 +1,5 @@
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-7.3-bin.zip
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
Vendored Executable
+234
View File
@@ -0,0 +1,234 @@
#!/bin/sh
#
# Copyright © 2015-2021 the original authors.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# https://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#
##############################################################################
#
# Gradle start up script for POSIX generated by Gradle.
#
# Important for running:
#
# (1) You need a POSIX-compliant shell to run this script. If your /bin/sh is
# noncompliant, but you have some other compliant shell such as ksh or
# bash, then to run this script, type that shell name before the whole
# command line, like:
#
# ksh Gradle
#
# Busybox and similar reduced shells will NOT work, because this script
# requires all of these POSIX shell features:
# * functions;
# * expansions «$var», «${var}», «${var:-default}», «${var+SET}»,
# «${var#prefix}», «${var%suffix}», and «$( cmd )»;
# * compound commands having a testable exit status, especially «case»;
# * various built-in commands including «command», «set», and «ulimit».
#
# Important for patching:
#
# (2) This script targets any POSIX shell, so it avoids extensions provided
# by Bash, Ksh, etc; in particular arrays are avoided.
#
# The "traditional" practice of packing multiple parameters into a
# space-separated string is a well documented source of bugs and security
# problems, so this is (mostly) avoided, by progressively accumulating
# options in "$@", and eventually passing that to Java.
#
# Where the inherited environment variables (DEFAULT_JVM_OPTS, JAVA_OPTS,
# and GRADLE_OPTS) rely on word-splitting, this is performed explicitly;
# see the in-line comments for details.
#
# There are tweaks for specific operating systems such as AIX, CygWin,
# Darwin, MinGW, and NonStop.
#
# (3) This script is generated from the Groovy template
# https://github.com/gradle/gradle/blob/master/subprojects/plugins/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt
# within the Gradle project.
#
# You can find Gradle at https://github.com/gradle/gradle/.
#
##############################################################################
# Attempt to set APP_HOME
# Resolve links: $0 may be a link
app_path=$0
# Need this for daisy-chained symlinks.
while
APP_HOME=${app_path%"${app_path##*/}"} # leaves a trailing /; empty if no leading path
[ -h "$app_path" ]
do
ls=$( ls -ld "$app_path" )
link=${ls#*' -> '}
case $link in #(
/*) app_path=$link ;; #(
*) app_path=$APP_HOME$link ;;
esac
done
APP_HOME=$( cd "${APP_HOME:-./}" && pwd -P ) || exit
APP_NAME="Gradle"
APP_BASE_NAME=${0##*/}
# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"'
# Use the maximum available, or set MAX_FD != -1 to use that value.
MAX_FD=maximum
warn () {
echo "$*"
} >&2
die () {
echo
echo "$*"
echo
exit 1
} >&2
# OS specific support (must be 'true' or 'false').
cygwin=false
msys=false
darwin=false
nonstop=false
case "$( uname )" in #(
CYGWIN* ) cygwin=true ;; #(
Darwin* ) darwin=true ;; #(
MSYS* | MINGW* ) msys=true ;; #(
NONSTOP* ) nonstop=true ;;
esac
CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar
# Determine the Java command to use to start the JVM.
if [ -n "$JAVA_HOME" ] ; then
if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
# IBM's JDK on AIX uses strange locations for the executables
JAVACMD=$JAVA_HOME/jre/sh/java
else
JAVACMD=$JAVA_HOME/bin/java
fi
if [ ! -x "$JAVACMD" ] ; then
die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME
Please set the JAVA_HOME variable in your environment to match the
location of your Java installation."
fi
else
JAVACMD=java
which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
Please set the JAVA_HOME variable in your environment to match the
location of your Java installation."
fi
# Increase the maximum file descriptors if we can.
if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then
case $MAX_FD in #(
max*)
MAX_FD=$( ulimit -H -n ) ||
warn "Could not query maximum file descriptor limit"
esac
case $MAX_FD in #(
'' | soft) :;; #(
*)
ulimit -n "$MAX_FD" ||
warn "Could not set maximum file descriptor limit to $MAX_FD"
esac
fi
# Collect all arguments for the java command, stacking in reverse order:
# * args from the command line
# * the main class name
# * -classpath
# * -D...appname settings
# * --module-path (only if needed)
# * DEFAULT_JVM_OPTS, JAVA_OPTS, and GRADLE_OPTS environment variables.
# For Cygwin or MSYS, switch paths to Windows format before running java
if "$cygwin" || "$msys" ; then
APP_HOME=$( cygpath --path --mixed "$APP_HOME" )
CLASSPATH=$( cygpath --path --mixed "$CLASSPATH" )
JAVACMD=$( cygpath --unix "$JAVACMD" )
# Now convert the arguments - kludge to limit ourselves to /bin/sh
for arg do
if
case $arg in #(
-*) false ;; # don't mess with options #(
/?*) t=${arg#/} t=/${t%%/*} # looks like a POSIX filepath
[ -e "$t" ] ;; #(
*) false ;;
esac
then
arg=$( cygpath --path --ignore --mixed "$arg" )
fi
# Roll the args list around exactly as many times as the number of
# args, so each arg winds up back in the position where it started, but
# possibly modified.
#
# NB: a `for` loop captures its iteration list before it begins, so
# changing the positional parameters here affects neither the number of
# iterations, nor the values presented in `arg`.
shift # remove old arg
set -- "$@" "$arg" # push replacement arg
done
fi
# Collect all arguments for the java command;
# * $DEFAULT_JVM_OPTS, $JAVA_OPTS, and $GRADLE_OPTS can contain fragments of
# shell script including quotes and variable substitutions, so put them in
# double quotes to make sure that they get re-expanded; and
# * put everything else in single quotes, so that it's not re-expanded.
set -- \
"-Dorg.gradle.appname=$APP_BASE_NAME" \
-classpath "$CLASSPATH" \
org.gradle.wrapper.GradleWrapperMain \
"$@"
# Use "xargs" to parse quoted args.
#
# With -n1 it outputs one arg per line, with the quotes and backslashes removed.
#
# In Bash we could simply go:
#
# readarray ARGS < <( xargs -n1 <<<"$var" ) &&
# set -- "${ARGS[@]}" "$@"
#
# but POSIX shell has neither arrays nor command substitution, so instead we
# post-process each arg (as a line of input to sed) to backslash-escape any
# character that might be a shell metacharacter, then use eval to reverse
# that process (while maintaining the separation between arguments), and wrap
# the whole thing up as a single "set" statement.
#
# This will of course break if any of these variables contains a newline or
# an unmatched quote.
#
eval "set -- $(
printf '%s\n' "$DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS" |
xargs -n1 |
sed ' s~[^-[:alnum:]+,./:=@_]~\\&~g; ' |
tr '\n' ' '
)" '"$@"'
exec "$JAVACMD" "$@"
+89
View File
@@ -0,0 +1,89 @@
@rem
@rem Copyright 2015 the original author or authors.
@rem
@rem Licensed under the Apache License, Version 2.0 (the "License");
@rem you may not use this file except in compliance with the License.
@rem You may obtain a copy of the License at
@rem
@rem https://www.apache.org/licenses/LICENSE-2.0
@rem
@rem Unless required by applicable law or agreed to in writing, software
@rem distributed under the License is distributed on an "AS IS" BASIS,
@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
@rem See the License for the specific language governing permissions and
@rem limitations under the License.
@rem
@if "%DEBUG%" == "" @echo off
@rem ##########################################################################
@rem
@rem Gradle startup script for Windows
@rem
@rem ##########################################################################
@rem Set local scope for the variables with windows NT shell
if "%OS%"=="Windows_NT" setlocal
set DIRNAME=%~dp0
if "%DIRNAME%" == "" set DIRNAME=.
set APP_BASE_NAME=%~n0
set APP_HOME=%DIRNAME%
@rem Resolve any "." and ".." in APP_HOME to make it shorter.
for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi
@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m"
@rem Find java.exe
if defined JAVA_HOME goto findJavaFromJavaHome
set JAVA_EXE=java.exe
%JAVA_EXE% -version >NUL 2>&1
if "%ERRORLEVEL%" == "0" goto execute
echo.
echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
echo.
echo Please set the JAVA_HOME variable in your environment to match the
echo location of your Java installation.
goto fail
:findJavaFromJavaHome
set JAVA_HOME=%JAVA_HOME:"=%
set JAVA_EXE=%JAVA_HOME%/bin/java.exe
if exist "%JAVA_EXE%" goto execute
echo.
echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%
echo.
echo Please set the JAVA_HOME variable in your environment to match the
echo location of your Java installation.
goto fail
:execute
@rem Setup the command line
set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar
@rem Execute Gradle
"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %*
:end
@rem End local scope for the variables with windows NT shell
if "%ERRORLEVEL%"=="0" goto mainEnd
:fail
rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of
rem the _cmd.exe /c_ return code!
if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1
exit /b 1
:mainEnd
if "%OS%"=="Windows_NT" endlocal
:omega
+17
View File
@@ -0,0 +1,17 @@
# Add project specific ProGuard rules here.
# By default, the flags in this file are appended to flags specified
# in [sdk]/tools/proguard/proguard-android.txt
# You can edit the include path and order by changing the proguardFiles
# directive in build.gradle.
#
# For more details, see
# http://developer.android.com/guide/developing/tools/proguard.html
# Add any project specific keep options here:
# If your project uses WebView with JS, uncomment the following
# and specify the fully qualified class name to the JavaScript interface
# class:
#-keepclassmembers class fqcn.of.javascript.interface.for.webview {
# public *;
#}
+114
View File
@@ -0,0 +1,114 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Replace com.test.game with the identifier of your game below, e.g.
com.gamemaker.game
-->
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.dishii.mm"
android:versionCode="4"
android:versionName="1.1.1"
android:installLocation="auto">
<!-- OpenGL ES 3.0 -->
<uses-feature android:glEsVersion="0x00030000"/>
<!-- Touchscreen support -->
<uses-feature
android:name="android.hardware.touchscreen"
android:required="false" />
<!-- Game controller support -->
<uses-feature
android:name="android.hardware.bluetooth"
android:required="false" />
<uses-feature
android:name="android.hardware.gamepad"
android:required="false" />
<uses-feature
android:name="android.hardware.usb.host"
android:required="false" />
<!-- External mouse input events -->
<uses-feature
android:name="android.hardware.type.pc"
android:required="false" />
<!-- Gyroscope support -->
<uses-feature
android:name="android.hardware.sensor.gyroscope"
android:required="false"/>
<!-- Audio recording support -->
<!-- if you want to capture audio, uncomment this. -->
<!-- <uses-feature
android:name="android.hardware.microphone"
android:required="false" /> -->
<!-- Allow downloading to the external storage on Android 5.1 and older -->
<!-- <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" android:maxSdkVersion="22" /> -->
<!-- Allow access to Bluetooth devices -->
<!-- Currently this is just for Steam Controller support and requires setting SDL_HINT_JOYSTICK_HIDAPI_STEAM -->
<!-- <uses-permission android:name="android.permission.BLUETOOTH" android:maxSdkVersion="30" /> -->
<!-- <uses-permission android:name="android.permission.BLUETOOTH_CONNECT" /> -->
<!-- Allow access to the vibrator -->
<uses-permission android:name="android.permission.VIBRATE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<!-- if you want to capture audio, uncomment this. -->
<!-- <uses-permission android:name="android.permission.RECORD_AUDIO" /> -->
<!-- Create a Java class extending SDLActivity and place it in a
directory under app/src/main/java matching the package, e.g. app/src/main/java/com/gamemaker/game/MyGame.java
then replace "SDLActivity" with the name of your class (e.g. "MyGame")
in the XML below.
An example Java class can be found in README-android.md
-->
<application android:label="@string/app_name"
android:icon="@mipmap/ic_launcher"
android:allowBackup="true"
android:theme="@android:style/Theme.NoTitleBar.Fullscreen"
android:hardwareAccelerated="true"
android:appCategory="game" >
<!-- Example of setting SDL hints from AndroidManifest.xml:
<meta-data android:name="SDL_ENV.SDL_ACCELEROMETER_AS_JOYSTICK" android:value="0"/>
-->
<meta-data android:name="SDL_ENV.SDL_ANDROID_TRAP_BACK_BUTTON" android:value="1"/>
<meta-data android:name="SDL_ENV.SDL_IOS_ORIENTATIONS" android:value="LandscapeLeft LandscapeRight"/>
<activity android:name="MainActivity"
android:label="@string/app_name"
android:alwaysRetainTaskState="true"
android:launchMode="singleInstance"
android:configChanges="layoutDirection|locale|orientation|uiMode|screenLayout|screenSize|smallestScreenSize|keyboard|keyboardHidden|navigation"
android:preferMinimalPostProcessing="true"
android:exported="true"
android:screenOrientation="landscape"
>
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
<!-- Let Android know that we can handle some USB devices and should receive this event -->
<intent-filter>
<action android:name="android.hardware.usb.action.USB_DEVICE_ATTACHED" />
</intent-filter>
<!-- Drop file event -->
<!--
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<data android:mimeType="*/*" />
</intent-filter>
-->
</activity>
</application>
</manifest>
+2
View File
@@ -0,0 +1,2 @@
# Extractor Assets Copied by CMake during buildtime
assets/
File diff suppressed because it is too large Load Diff
Binary file not shown.

After

Width:  |  Height:  |  Size: 90 KiB

@@ -0,0 +1,61 @@
package com.dishii.mm;
import android.content.Context;
import android.content.res.AssetManager;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
public class AssetCopyUtil {
public static void copyAssetsToExternal(Context context, String assetsFolderPath, String externalFolderPath) throws IOException {
AssetManager assetManager = context.getAssets();
String[] assetFiles = assetManager.list(assetsFolderPath);
for (String assetFile : assetFiles) {
String assetPath = assetsFolderPath + File.separator + assetFile;
String externalPath = externalFolderPath + File.separator + assetFile;
if (assetManager.list(assetPath).length > 0) {
// It's a directory
// Check if the directory exists in the external storage
File externalDir = new File(externalPath);
if (!externalDir.exists()) {
externalDir.mkdirs(); // Create the directory if it doesn't exist
}
// Recursively copy contents of the directory
copyAssetsToExternal(context, assetPath, externalPath);
} else {
// It's a file
File externalFile = new File(externalPath);
if (!externalFile.exists()) {
// Check if the file exists in the external storage
InputStream in = null;
OutputStream out = null;
try {
in = assetManager.open(assetPath);
out = new FileOutputStream(externalPath);
byte[] buffer = new byte[1024];
int read;
while ((read = in.read(buffer)) != -1) {
out.write(buffer, 0, read);
}
} finally {
if (in != null) {
in.close();
}
if (out != null) {
out.close();
}
}
}
}
}
}
}
@@ -0,0 +1,26 @@
package com.dishii.mm;
public class ControllerButtons {
// Xbox Buttons
public static final int BUTTON_A = 0;
public static final int BUTTON_B = 1;
public static final int BUTTON_X = 2;
public static final int BUTTON_Y = 3;
public static final int BUTTON_LB = 9; // Left Bumper
public static final int BUTTON_RB = -5; // Right Bumper
public static final int BUTTON_BACK = 4;
public static final int BUTTON_START = 6;
public static final int BUTTON_DPAD_UP = 11;
public static final int BUTTON_DPAD_DOWN = 12;
public static final int BUTTON_DPAD_LEFT = 13;
public static final int BUTTON_DPAD_RIGHT = 14;
// Xbox Axis (Joysticks and Triggers)
public static final int AXIS_LX = 0; // Left stick X
public static final int AXIS_LY = 1; // Left stick Y
public static final int AXIS_RX = 2; // Right stick X
public static final int AXIS_RY = 3; // Right stick Y
public static final int AXIS_LT = -2; // Left Trigger (negative axis)
public static final int AXIS_RT = -4; // Right Trigger (negative axis)
}
@@ -0,0 +1,474 @@
package com.dishii.mm;
import org.libsdl.app.SDLActivity;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.net.Uri;
import android.os.Bundle;
import android.os.Environment;
import android.provider.Settings;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.FileOutputStream;
import android.Manifest;
import android.content.pm.PackageManager;
import androidx.core.app.ActivityCompat;
import androidx.core.content.ContextCompat;
import android.util.Log;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.FrameLayout;
import android.view.LayoutInflater;
import android.view.MotionEvent;
import android.view.View;
import android.widget.ImageView;
//This class is the main SDLActivity and just sets up a bunch of default files and the input overlay
public class MainActivity extends SDLActivity{
private static final int STORAGE_PERMISSION_REQUEST_CODE = 1;
SharedPreferences preferences;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
preferences = getSharedPreferences("com.dishii.mm.prefs",Context.MODE_PRIVATE);
setupControllerOverlay();
// Check if storage permissions are granted
if (hasStoragePermission()) {
doVersionCheck();
setupFiles();
} else {
requestStoragePermission();
}
attachController();
}
private void doVersionCheck(){
int currentVersion = BuildConfig.VERSION_CODE; // Use your app's version code
int storedVersion = preferences.getInt("appVersion", 1);
if (currentVersion > storedVersion) {
deleteOutdatedAssets();
preferences.edit().putInt("appVersion", currentVersion).apply();
}
}
private void deleteOutdatedAssets(){
File externalSohFile = new File(getExternalFilesDir(null), "2ship.o2r");
externalSohFile.delete();
File externalOotFile = new File(getExternalFilesDir(null), "mm.o2r");
externalOotFile.delete();
File externalAssetsFolder = new File(getExternalFilesDir(null), "assets");
deleteRecursive(externalAssetsFolder);
}
private void deleteRecursive(File fileOrDirectory) {
if (fileOrDirectory.isDirectory()) {
for (File child : fileOrDirectory.listFiles()) {
deleteRecursive(child);
}
}
fileOrDirectory.delete();
}
// Check if storage permission is granted
private boolean hasStoragePermission() {
return ContextCompat.checkSelfPermission(this, Manifest.permission.READ_EXTERNAL_STORAGE)
== PackageManager.PERMISSION_GRANTED &&
ContextCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE)
== PackageManager.PERMISSION_GRANTED;
}
// Request storage permission
private void requestStoragePermission() {
ActivityCompat.requestPermissions(this,
new String[]{Manifest.permission.READ_EXTERNAL_STORAGE,
Manifest.permission.WRITE_EXTERNAL_STORAGE},
STORAGE_PERMISSION_REQUEST_CODE);
}
// Handle permission request result
@Override
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
if (requestCode == STORAGE_PERMISSION_REQUEST_CODE) {
if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
setupFiles();
} else {
// Permission denied, handle accordingly (e.g., show a message)
}
}
}
private void setupFiles(){
//Copy assets folder for rom extraction
File externalAssetsDir = new File(getExternalFilesDir(null), "assets");
if (!externalAssetsDir.exists()) {
try {
externalAssetsDir.mkdirs();
AssetCopyUtil.copyAssetsToExternal(this, "assets", externalAssetsDir.getAbsolutePath());
} catch (IOException e) {
e.printStackTrace();
}
}
//Create empty mods folder
File externalModsDir = new File(getExternalFilesDir(null), "mods");
externalModsDir.mkdirs();
//Copy 2ship.o2r
File externalSohOtrFile = new File(getExternalFilesDir(null), "2ship.o2r");
if (!externalSohOtrFile.exists()) {
try {
InputStream in = getAssets().open("2ship.o2r");
OutputStream out = new FileOutputStream(externalSohOtrFile);
byte[] buffer = new byte[1024];
int read;
while ((read = in.read(buffer)) != -1) {
out.write(buffer, 0, read);
}
in.close();
out.close();
} catch (IOException e) {
e.printStackTrace();
}
}
File configFile = new File(getExternalFilesDir(null), "2ship2harkinian.json");
if (!configFile.exists()) {
try {
InputStream in = getAssets().open("2ship2harkinian.json");
OutputStream out = new FileOutputStream(configFile);
byte[] buffer = new byte[1024];
int read;
while ((read = in.read(buffer)) != -1) {
out.write(buffer, 0, read);
}
in.close();
out.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
private native void nativeHandleSelectedFile(String filePath);
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == 0 && resultCode == RESULT_OK) {
Uri selectedFileUri = data.getData();
String fileName = "MM.z64";
File destinationDirectory = getExternalFilesDir(null); // The second argument can specify a subdirectory, or you can pass null to use the root directory.
File destinationFile = new File(destinationDirectory, fileName);
if (destinationDirectory != null) {
try {
InputStream in = getContentResolver().openInputStream(selectedFileUri);
OutputStream out = new FileOutputStream(destinationFile);
byte[] buffer = new byte[4096];
int bytesRead;
while ((bytesRead = in.read(buffer)) != -1) {
out.write(buffer, 0, bytesRead);
}
in.close();
out.close();
} catch (IOException e) {
e.printStackTrace();
}
}
nativeHandleSelectedFile(destinationFile.getPath());
}
}
public void openFilePicker() {
// Create an Intent to open the file picker dialog
Intent intent = new Intent(Intent.ACTION_OPEN_DOCUMENT);
intent.setType("*/*");
// Start the file picker dialog
startActivityForResult(intent, 0);
}
// Check if external storage is available and writable
private boolean isExternalStorageWritable() {
String state = Environment.getExternalStorageState();
return Environment.MEDIA_MOUNTED.equals(state);
}
public native void attachController();
// Native method for setting button state
public native void setButton(int button, boolean value);
public native void setCameraState(int axis, float value);
// Native method for setting joystick axis value
public native void setAxis(int axis, short value);
private Button button1, button2, button3, button4;
private Button buttonA, buttonB, buttonX, buttonY;
private Button buttonDpadUp, buttonDpadDown, buttonDpadLeft, buttonDpadRight;
private Button buttonLB, buttonRB, buttonZ, buttonStart, buttonBack;
private Button buttonToggle;
private FrameLayout leftJoystick;
private ImageView leftJoystickKnob;
private View overlayView;
// Function to set up the controller overlay (inflate layout and initialize buttons)
private void setupControllerOverlay() {
// Inflate the touchcontrol_overlay layout
LayoutInflater inflater = (LayoutInflater) getSystemService(LAYOUT_INFLATER_SERVICE);
overlayView = inflater.inflate(R.layout.touchcontrol_overlay, null);
// Set layout params for overlayView to control positioning and sizing
FrameLayout.LayoutParams layoutParams = new FrameLayout.LayoutParams(
FrameLayout.LayoutParams.MATCH_PARENT,
FrameLayout.LayoutParams.MATCH_PARENT
);
overlayView.setLayoutParams(layoutParams);
// Add overlay view to the main layout (you may need to add it to a container like FrameLayout)
ViewGroup view = (ViewGroup) getContentView();
view.addView(overlayView);
final ViewGroup buttonGroup = overlayView.findViewById(R.id.button_group);
buttonA = overlayView.findViewById(R.id.buttonA);
buttonB = overlayView.findViewById(R.id.buttonB);
buttonX = overlayView.findViewById(R.id.buttonX);
buttonY = overlayView.findViewById(R.id.buttonY);
buttonDpadUp = overlayView.findViewById(R.id.buttonDpadUp);
buttonDpadDown = overlayView.findViewById(R.id.buttonDpadDown);
buttonDpadLeft = overlayView.findViewById(R.id.buttonDpadLeft);
buttonDpadRight = overlayView.findViewById(R.id.buttonDpadRight);
buttonLB = overlayView.findViewById(R.id.buttonLB);
buttonRB = overlayView.findViewById(R.id.buttonRB);
buttonZ = overlayView.findViewById(R.id.buttonZ);
buttonStart = overlayView.findViewById(R.id.buttonStart);
buttonBack = overlayView.findViewById(R.id.buttonBack);
buttonToggle = overlayView.findViewById(R.id.buttonToggle);
// Initialize joysticks and joystick knobs from the inflated layout
leftJoystick = overlayView.findViewById(R.id.left_joystick);
leftJoystickKnob = overlayView.findViewById(R.id.left_joystick_knob);
FrameLayout rightScreenArea = overlayView.findViewById(R.id.right_screen_area);
// Set OnTouchListeners for the Xbox controller buttons
addTouchListener(buttonA, ControllerButtons.BUTTON_A); // SDL Button 0 (A)
addTouchListener(buttonB, ControllerButtons.BUTTON_B); // SDL Button 1 (B)
addTouchListener(buttonX, ControllerButtons.BUTTON_X); // SDL Button 2 (X)
addTouchListener(buttonY, ControllerButtons.BUTTON_Y); // SDL Button 3 (Y)
addTouchListener(buttonDpadUp, ControllerButtons.BUTTON_DPAD_UP); // SDL Button 10 (D-Pad Up)
addTouchListener(buttonDpadDown, ControllerButtons.BUTTON_DPAD_DOWN); // SDL Button 11 (D-Pad Down)
addTouchListener(buttonDpadLeft, ControllerButtons.BUTTON_DPAD_LEFT); // SDL Button 12 (D-Pad Left)
addTouchListener(buttonDpadRight, ControllerButtons.BUTTON_DPAD_RIGHT); // SDL Button 13 (D-Pad Right)
addTouchListener(buttonLB, ControllerButtons.BUTTON_LB); // SDL Button 4 (LB)
addTouchListener(buttonRB, ControllerButtons.BUTTON_RB); // SDL Button 5 (RB)
addTouchListener(buttonZ, ControllerButtons.AXIS_RT); // SDL Button 5 (Z)
addTouchListener(buttonStart, ControllerButtons.BUTTON_START); // SDL Button 7 (Start)
addTouchListener(buttonBack, ControllerButtons.BUTTON_BACK); // SDL Button 6 (Back)
// Setup joystick movement
setupJoystick(leftJoystick, leftJoystickKnob, true); // Left joystick
setupLookAround(rightScreenArea);
setupToggleButton(buttonToggle,buttonGroup);
}
private void setupToggleButton(Button button, ViewGroup uiGroup){
boolean isHidden = preferences.getBoolean("controlsVisible", false); // Default to 'false' (visible)
uiGroup.setVisibility(isHidden ? View.INVISIBLE : View.VISIBLE); // Set the initial visibility based on the saved state
button.setOnClickListener(new View.OnClickListener() {
boolean isHidden = false;
@Override
public void onClick(View v) {
if (isHidden) {
uiGroup.setVisibility(View.VISIBLE); // Show UI elements
} else {
uiGroup.setVisibility(View.INVISIBLE); // Hide UI elements
}
preferences.edit().putBoolean("controlsVisible", !isHidden).apply();
isHidden = !isHidden; // Toggle state
}
});
}
// Function to set a touch listener for each button
private void addTouchListener(Button button, int buttonNum) {
button.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
setButton(buttonNum, true);
button.setPressed(true);
return true;
case MotionEvent.ACTION_UP:
setButton(buttonNum, false);
button.setPressed(false);
return true;
case MotionEvent.ACTION_CANCEL:
setButton(buttonNum, false);
return true;
}
return false;
}
});
}
boolean TouchAreaEnabled = true;
void DisableTouchArea(){
TouchAreaEnabled = false;
}
void EnableTouchArea(){
TouchAreaEnabled = true;
}
private void setupLookAround(FrameLayout rightScreenArea) {
rightScreenArea.setOnTouchListener(new View.OnTouchListener() {
private float lastX = 0;
private float lastY = 0;
private boolean isTouching = false;
@Override
public boolean onTouch(View v, MotionEvent event) {
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
// Start tracking the finger's position
lastX = event.getX();
lastY = event.getY();
isTouching = true;
break;
case MotionEvent.ACTION_MOVE:
if (isTouching) {
// Calculate the change in position (delta)
float deltaX = event.getX() - lastX;
float deltaY = event.getY() - lastY;
// Update the last position
lastX = event.getX();
lastY = event.getY();
// Increase sensitivity by using a larger multiplier
// Adjust these multipliers to suit your needs
float sensitivityMultiplier = 15; // Higher value for more sensitivity
float rx = (deltaX * sensitivityMultiplier);
float ry = (deltaY * sensitivityMultiplier);
// Send the mapped values to the joystick axes
setCameraState(0, rx); // Right stick X axis
setCameraState(1, ry); // Right stick Y axis
}
break;
case MotionEvent.ACTION_UP:
case MotionEvent.ACTION_CANCEL:
// Stop tracking the finger's position and reset joystick input
isTouching = false;
setCameraState(0, 0.0f); // Reset right stick X axis
setCameraState(1, 0.0f); // Reset right stick Y axis
break;
}
return TouchAreaEnabled; // Event full handled
}
});
}
// Function to set joystick movement with reset to center when not touched
private void setupJoystick(FrameLayout joystickLayout, ImageView joystickKnob, boolean isLeft) {
joystickLayout.post(() -> {
// Calculate the joystick center once, before any events
final float joystickCenterX = joystickLayout.getWidth() / 2f;
final float joystickCenterY = joystickLayout.getHeight() / 2f;
joystickLayout.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
case MotionEvent.ACTION_MOVE:
// Calculate the joystick movement and move the knob
float deltaX = event.getX() - joystickCenterX;
float deltaY = event.getY() - joystickCenterY;
// Clamp the joystick movement to prevent it from going outside the area
float maxRadius = joystickLayout.getWidth() / 2f - joystickKnob.getWidth() / 2f;
float distance = (float) Math.sqrt(deltaX * deltaX + deltaY * deltaY);
if (distance > maxRadius) {
float scale = maxRadius / distance;
deltaX *= scale;
deltaY *= scale;
}
joystickKnob.setX(joystickCenterX + deltaX - joystickKnob.getWidth() / 2f);
joystickKnob.setY(joystickCenterY + deltaY - joystickKnob.getHeight() / 2f);
// Send joystick values to native C code
short x = (short) (deltaX / maxRadius * Short.MAX_VALUE);
short y = (short) (deltaY / maxRadius * Short.MAX_VALUE);
// Send X-axis and Y-axis values
setAxis(isLeft ? ControllerButtons.AXIS_LX : ControllerButtons.AXIS_RX, x); // X-axis
setAxis(isLeft ? ControllerButtons.AXIS_LY : ControllerButtons.AXIS_RY, y); // Y-axis
break;
case MotionEvent.ACTION_UP:
case MotionEvent.ACTION_CANCEL:
// Reset joystick knob to the center position (ensure it's placed correctly)
joystickKnob.setX(joystickCenterX - joystickKnob.getWidth() / 2f);
joystickKnob.setY(joystickCenterY - joystickKnob.getHeight() / 2f);
// Reset joystick values to 0 when released or canceled
setAxis(isLeft ? ControllerButtons.AXIS_LX : ControllerButtons.AXIS_RX, (short) 0); // X-axis
setAxis(isLeft ? ControllerButtons.AXIS_LY : ControllerButtons.AXIS_RY, (short) 0); // Y-axis
break;
}
return true;
}
});
});
}
}

Some files were not shown because too many files have changed in this diff Show More