Compare commits

...

759 Commits

Author SHA1 Message Date
briaguya 8888fb2ec1 Master Quest (#3) (#1632)
Co-authored-by: PurpleHato <linkvssangoku.jr@gmail.com>
Co-authored-by: GaryOderNichts <12049776+GaryOderNichts@users.noreply.github.com>

Co-authored-by: louist103 <35883445+louist103@users.noreply.github.com>
Co-authored-by: PurpleHato <linkvssangoku.jr@gmail.com>
Co-authored-by: GaryOderNichts <12049776+GaryOderNichts@users.noreply.github.com>
2022-09-29 19:07:48 -04:00
louist103 dc3c0dd9c8 disable crit wiggle (#1629)
* disable crit wiggle

* Set to zero in default preset
2022-09-28 20:27:07 -04:00
aMannus 08915e5684 Update description for CC (#1626) 2022-09-28 02:40:29 -04:00
David Chavez 083ceb4423 Feature: Crowd Control Integration (#1568)
* Start effects

* Disable input to game when typing in console

* Add gravity support

* noUI placeholder

* Add rest of effects to console

* Remove z_play code

* Add rupee modification

* Add OneHit KO (#27)

* few fix and paper Link

* Better method and now use the reset flag

* Revert "Better method and now use the reset flag"

This reverts commit 2aafcc1df2.

* Revert "few fix and paper Link"

This reverts commit 65e76dcfee.

* Paper Link & few fixes (#28)

* Implement pacifist mode (#30)

* Implement cucco storm (#31)

* Add no UI functionality (#32)

* Enable CrowdControl on windows (#33)

* Use std::format and implement wallmaster

* Implement defense modifier

* Implement no_z and clean up

* Implement reverse controls

* Some fixes while testing CC connection

* Implement speed modifier and fix defese modifier

* Fail magic effects if magic is not acquired

* Fix queue system

* Implement rainstorm

* Some cleanup

* Use IS_ZERO to handle very low near zero values

* Split some effects

* Fix emptying magic

* Don’t run cucco on pre-rendered backgrounds

* Use correct method for updating ruppees

* Fix decreasing speed

* Remove old SDL stuff

* Remove old fixes

* Enable Crowd Control for both debug and release

* Add missing returns

* Cleanup event firing

* Further clean up on event firing

* Fix some bugs

* CC fixes and enemy spawning (#35)

* Fix icetraps

* Fix title screen

* Fix pause screen

* Fix death screen timer & Code cleanup

* Fix timer during textboxes

* Code cleanup

* Add: Multiple enemy spawning

* More enemies + more code cleanup (#36)

* Enums for returning effect states

* Add more enemies

* Update CrowdControl.cpp

* Remove enums from enemies

* Fix up flow for events (#37)

# Conflicts:
#	soh/soh/Enhancements/crowd-control/CrowdControl.cpp

* Fix spawn position of likelike

* CC temp enemy fixes (#38)

* Check for pause in pacifist and allow button presses (#39)

* Fix Pacifist mode (#41)

* First attempt pacifier fix

* Real fix for pacifist mode

* Comment

* Remove cutscene and long delay from cucco_storm (#40)

* Some PR Fixes

* Use standard types

* Handle JSON parsing error and free memory

* Add CC configuration file

* Add: Giving deku shield option. Fix: Giant Lonk (#42)

* Small stalfos fix (#43)

* Syntax Improvements (#44)

* Revert bools to uint32_t

* Add comment about bools

* Fix cucco storm, fix empty heart (#45)

* Protect commands vector with mutex

* prefix effects with chaosEffect (#46)

Co-authored-by: briaguya <briaguya@alice>

Co-authored-by: Baoulettes <perlouzerie@hotmail.fr>
Co-authored-by: aMannus <mannusmenting@gmail.com>
Co-authored-by: briaguya <70942617+briaguya-ai@users.noreply.github.com>
Co-authored-by: briaguya <briaguya@alice>
2022-09-27 22:41:17 -04:00
PurpleHato 87125ae334 FIX: Sword Trail not appearing when using custom color (#1625)
This was caused by the trail duration not being init properly until we change the duration manually.

cf this video: https://streamable.com/a9u4fm

- Also changed Lengh to Duration for clarity
2022-09-27 20:58:25 -04:00
Garrett Cox c487e4ba0b Shopsanity - fix regression from removing BUY_BOMBCHU_5 (#1624) 2022-09-27 19:56:25 -04:00
PurpleHato 1b141fd68c FIX: Missing custom colors on ENTER NAME (#1623) 2022-09-27 19:33:01 -04:00
PurpleHato 694c6c9832 FIX: Set back default comportment of some Views (#1615)
* FIX: Set back default comportment of some Views

- Renamed Auto-Center First Person View to Disable Auto-Centering in First Person View and make it necessary to be checked to take effect and not being active by default

- Disable gInvertYAxis being enabled by default (which it not vanilla)

* Tweak: small whoopsie
2022-09-27 19:32:28 -04:00
GaryOderNichts c6a875eb5c Change precision of float sliders (#1609)
* Change precision of float sliders

* Formatting

* Don't round non-percentage sliders
2022-09-27 19:30:50 -04:00
GaryOderNichts 677c4845f6 Wii U: Several fixes and improvements (#1608)
* WiiU: fix more scaling issues

* Wii U: batch depth reads

* Wii U: remove file buffering
Doesn't seem to to do much anymore

* Remove "missing_gcc_functions.c" to avoid conflicts

* Wii U: Fix random_device usage
random_device will always be seeded with a constant seed and will return the same number sequence every time

* Wii U: Improve software keyboard

* Wii U: Fix console input text width
2022-09-27 19:29:55 -04:00
Garrett Cox 7fb8902e7f [#1613] Resolve double message issue for gold skulltula tokens after you've spoken to skulltula parent (#1616) 2022-09-27 19:44:52 +02:00
louist103 58c097cfb9 Add a few meme hints (#1544)
* Add a few meme hints

* more
2022-09-26 23:07:57 -04:00
Garrett Cox 6265613bc7 Correct default value of gInvertYAxis and change default trials required to vanilla (#1610) 2022-09-26 20:09:01 -04:00
louist103 c21b2e8f00 Crash Handler 2.0 (#1466)
* Linux side done

* Win V2. need to fix message box.

* Fix message box.
2022-09-26 19:54:25 -04:00
Garrett Cox b3c7edcf76 [#1603] Ensure gFasterHeavyBlockLift only affects large silver rocks (#1607) 2022-09-26 19:51:19 -04:00
Garrett Cox c2ff12c3e8 [#1584] Undo the special rotation done for spiritual stones after they are purchased so the sold out sign isn't sideways (#1606) 2022-09-26 19:50:49 -04:00
David Chavez dbc4d8199e Feature: Allow choosing audio backend (#1588)
* Fix X11 being searched for on macOS

* Add ability to switch audio backends

* Fix issues with c arrays of std dynamic size items

* Fix old uses of sizeof()

* Remove current selected option from list

* Don’t show items if we only have one option
2022-09-26 19:48:47 -04:00
Garrett Cox 0e1248f840 [#1602] Fix crash when attempting to render a non-randomized item in bombchu bowling (#1604) 2022-09-27 00:24:19 +02:00
Garrett Cox 7a516c72c3 [#1597] Remove Buy Bombchu (5) from pool, 3ds-only shop item (#1605) 2022-09-27 00:23:49 +02:00
Christopher Leggett a927a881fc Fixes Happy Mask shop on the Switch. (#1591) 2022-09-27 00:05:46 +02:00
amekusa ac1a87730e [macOS] Fix launcher code in case with 'sysctl.proc_translated' returning empty (#1598) 2022-09-26 22:12:45 +02:00
Rozelette cf881d7d25 Fix Gohma disintegration (#1593) 2022-09-26 17:53:22 +02:00
Christopher Leggett 41eb6c585d Excludes the master sword in the Ganon Battle from triggering autosave. (#1594) 2022-09-26 17:52:53 +02:00
Christopher Leggett ee505fc47d Fixes ocarina textbox flashing (#1589) 2022-09-26 09:01:58 +02:00
aMannus 7758749770 Removed d-pad support for pause in preset (#1592) 2022-09-26 08:45:59 +02:00
GaryOderNichts da893a5b86 Fix save corruption on switch (#1585) 2022-09-25 12:19:53 -04:00
David Chavez e412a8b55e Only attempt to compile PulseAudioPlayer on Linux (#1581) 2022-09-25 12:18:26 -04:00
Rozelette 5a0b854c5c Fix Phantom Ganon not disintegrating (#1579) 2022-09-25 12:18:06 -04:00
Rozelette bf2420f7d3 Fix Ganondorf texture issues (#1578) 2022-09-25 12:16:16 -04:00
RaelCappra 50d6836b4a assert __THROW fix for Linux (#1575)
* assert __THROW fix for Linux

* Add check for Linux in changed definition
2022-09-25 12:15:36 -04:00
Garrett Cox da677682cd Don't disable keyboard when menuBar is shown and gControlNav is true (#1566) 2022-09-25 12:14:46 -04:00
David Chavez 11b6ce819d Update version in other remaining spots (#1558) 2022-09-25 12:13:23 -04:00
David Chavez 5ee86cb558 Remove obsolete and outdated xcode project (#1557) 2022-09-25 12:13:00 -04:00
David Chavez 3a2fcc9604 Handle window closing event to stop SoH (#1556)
* Handle window closing event to stop app

* Address PR comments
2022-09-25 12:12:38 -04:00
Jeffrey Crowell fde05e65c0 [macOS] Force native architecture to launch (#1554) 2022-09-22 13:30:47 +02:00
David Chavez 00fb12134a Fix macOS minimum deployment target (#1551) 2022-09-22 07:58:42 +02:00
David Chavez fa8d64ec3a Disable game input when typing into a textfield (#1398)
* Disable game input when typing into a textfield

* Only block keyboard input when typing in textfield

* Address PR comments

* Fix spacing

* Generalize check on input device

Co-authored-by: Garrett Cox <garrettjcox@gmail.com>
2022-09-21 21:32:27 -04:00
Adam Bird b4740d131f reset gyro drift when gyro is turned off (#1542) 2022-09-21 21:29:35 -04:00
Garrett Cox ec2222347e Fix issue with 'auto' controller setting (#1548)
* Fix issue with 'auto' controller setting

* Combine inputs rather than overwrite for auto setting

* Swap condition checking for zeroed pads
2022-09-21 21:29:16 -04:00
Josh Bodner 3d0d97d6b5 Fix crash when creating rando files and autosave is enabled (#1550) 2022-09-22 00:28:07 +02:00
briaguya 2b78bea475 Randomizer v2 (#1065)
* Revert changes to GetItemFromGet

* Fixes Ganon's Boss Key shuffled while regular boss Keys aren't.

* Enum + combo box

* Add obtainability checks correctly

* combobox title rename + no number tracking

* Fix repeatable purchases and bottles rendering incorrectly

* Move shopsanity option in GUI

* Struct instead of ImVec + basic comportment for all case

* Attempt to fix odd build issue

* Cast randoGet for ganons boss key

* Remove redundancy in KD room

* Update logic Cvar names

* Fix Ganons Trials coming from old save files. Fixes #1365

* Fixes crash when entering Ganon's Castle lobby on linux.

* Makes `Item_Give` safe to use with a NULL globalCtx.

This should allow it's use for giving items to Link's Pocket
during rando save initialization.

* Converts Song from Impa to use `Item_Give`

* Adds more options for Link's starting item.

* Removes unneeded `GiveLinkItem` functions.

* and make it build

* bring back new rando dropdown

* gSaveContext access in GameMenuBar.cpp

* Implement Skip Scarecrow's Song

* Reimplement progressive Bombchus

* Rando-next: Deku Nut and Seed ammo gives a blue rupee
Fixes #1390

* Fixes Link starting with BGS

* Persist item tracker notes

* Adjust Hooks include

* Use SohImGui::RequestCvarSaveOnNextTick

* Fix issues from LUS refactor

* Fix for overriding deku scrub messages

* Fix mistake from merge

oops

* Restore checkboxes to enhancements menu

These got lost in the merge

* Update location access logic

Including MQ locations in Spirit and GC now

* Implement rando bombchu drops

* Missing break

* Simplify mudwall collision check

There was no need to have a second collider specifically for Ice Arrow hits

* Update settings.cpp

* Simplify mudwall collision check

* Restore checkboxes in menu

Accidentally lost these during merge

* Clean up bool

* Update logic Cvar name

* Fixed capacity on ammmo tracking

* Fix for beans obtainability

* Hook into file delete and clear notes

* Incorporate magic arrows in rando settings

* Update tooltip

To inform the player that they might have to reload the room if they're enabling this for the first time.

* Update tooltip

* Add line break in tooltip

* Tooltip wording + line break

* tweak on main logic

* All color logic for all types

* Fix: changes to please new LUS

* Ensure itemTrackerNotes vector is not fully empty

* Implement's Tycoon Wallet.

* Refactor DrawItemCount and Use EnhancementCombobox for tracker capacity options

* small tweaks and rename

* always display XX/YY when in ammo/capacity mode

* Move all merchant messages to be generated on file load

* added hovertext for the number display

* Swap german and french translations for shop messages

* Set key colors to be on by default

* Add another flag to skip mask shop

* Fix Sold Out bug

* Fix gerudo keys, add disabled checkbox

* tooltip line break

* Add trials required and merchant prices to save file instead of loading from active spoiler log

* Remove trialsRequired persisting in save manager

* Adds slotIndex to girla (shop item actor) and uses that for IdentifyShopItem.

* Fix issue when merchantPrices is empty

* Fix for a single zeroed merchantPrice entry

* Fix #1417

* Implements items selling out and fixes issues with purchasing some items.

* Fixes order of operations so Rupees will be spent.

* Fixes sold out items not getting overwritten by the randomized info.

* Clarify var names and comments

Also preserve chain platform cutscene in spirit based on Link's position

* Remove !=0 from cvar check

* Clarify var names and comments

* Rename randomizerMerchantPrices to merchantPrices

* Handle shop items in SaveManager

* Fix merge mistake

* Base whats in the bazaar shop on entranceIndex instead of age

* Tidy up chain platform cutscene check

* Fix merge error

Didn't mean to have Zhora changes in here yet

* Use 3drando item table for parsing spoiler names

* Use another nested method instead of one at the top level to fetch the table

* Add missing newline

* Remove log

* Respect custom draw functions

* Fix issues with rendering songs

* Fix localized item names for shopsanity

* Implements a larger array of Sprites for the Icon Hash.

* Uses the hash instead of seed for spoilerfile name and icons.

* Removes some unused functions and variables in `spoiler_log.cpp`

* Prevents leading 0s added to hash from being in file name

* Changes filename format to icon indexes separated by dashes

* Hopefully makes Jenkins happy

* Hopefully makes Jenkins happy

* [Rando] Child Gerudo Fortress 37th Heartpiece randomized
Fixes #1071

* Add descriptions to save editor flags editor, and added randomizer flags (#1386)

* Add descriptions to save editor flags editor, and added randomizer flags

* Hide randomizer flags when not on a randomizer save

* Move flag descriptions to header file

* Update soh/soh/Enhancements/debugger/debugSaveEditor.h

* Update soh/soh/Enhancements/debugger/debugSaveEditor.h

* Fix merge error

* crash on pause menu on linux (only in appimage)
Fixes #1437

* Applies fix to Song from Impa as well.

* Allow buying tunics as child when shopsanity is on

* Fix for custom draw methods overriding sold out sign

* Simplify logic around shopsanity and fix some issues

* Fix dungeon reward stone rotation and add particles

* Fix some issues with ice traps

* Fix adult wallet having its own max capacity

* Fix amount of keys given for BotW

* format

* Use EnGirlAShopItem enum instead of raw hex values

* [#1434] Renders non-warp songs more consistently with warp songs

* A few changes around merchant messages

* Various changes from PR feedback

* Rando: Junk Hint missing french translation

* Typo

* Fix free scrub being at 0 instead of TEXT_SCRUB_RANDOM

* Replace magic numbers in message handler

* Update soh/src/overlays/actors/ovl_En_Ossan/z_en_ossan.c

Co-authored-by: briaguya <70942617+briaguya-ai@users.noreply.github.com>

* Update soh/src/overlays/actors/ovl_En_Ossan/z_en_ossan.c

Co-authored-by: briaguya <70942617+briaguya-ai@users.noreply.github.com>

* Fix BGS softlock for shopsanity

* Support tycoon wallet on tracker

* Revert "Fix BGS softlock for shopsanity"

This reverts commit 5fdb961ea4.

* [#1053] Resolves an issue with shop items and bombchu bowling where BGS would display two message boxes

* Implements some necessary plumbing and resolves several Ice Trap Softlocks.

Adds a way for an item entry to tell what type of check it came from (NPC vs Chest vs Freestanding, etc.)
Sets this value from chests and item00 actors.

Relocates pendingIceTraps to save context so it can persist through cutscenes and get stored on save init for Link's Pocket and Song from Impa.

Restructures pendingIceTraps into a counter rather than a true or false, so that we can be frozen multiple times in a row if applicable (atm that should only be at the start of a run if Link's Pocket and Song from Impa were both Ice Traps).

Adds a textbox for Ice Traps and a special case of holding up nothing in the get item process. This fixes all the cases where Ice Traps would softlock due to the actor giving the item expecting a closing textbox. After holding the item above his head Link increments the pendingIceTraps counter by one and sets whatever flag he has pending.

None of the above plumbing applies to Ice Traps from chests, those work exactly the same as before, as do freestanding item00 ice traps (thanks to the additional check for ITEM_FROM_FREESTANDING.

OoT and Ruto's Letter count as NPC's, so they get the FOWL text box and set a pending ice trap rather than immediately freezing, since Link weill be in the water. Link will get frozen the next time he touches land, which in the case of OoT is after the fade to white and right before the Song of Time check.

Fixes all the other softlocks I'm aware of, including Fishing, Bombchu Bowling, Skull Kid, and losing the second Gerudo Archery check.

* fix bgs check in player

* move bgs logic for tokensanity into MOD_NONE check

* set bgs flag before `Item_Give`ing

* move bgs flag into `MOD_NONE` check in girla

* use existing check in `z_player`

* Adds comment explaining the decision to default ITEM_FROM_NPC.

* Rename pendingIceTraps to pendingIceTrapCount

* Adds some RANDOTODO comments about cleaning up a couple things.

* Merge branch 'develop-zhora' into ztornn

* manually restore changes to `z_player.c`

* Fix after some ice trap prepwork from earlier

* Actual fix

* Woops

* More rupee names

* Actually fix it

* Add back comment

* Fix Skip Scarecrow Song

* Fix ruto's letter and LH sun stick rendering

* Also fixes it for treasure chest game

* Tweak: Rando French Wallet

* ADD: French Tycoon

* Hide dungeon items/notes by default

* [#1301] Fix issue with UI not restoring after getting an item from biggoron

* Update soh/src/overlays/actors/ovl_En_Go2/z_en_go2.c

* Update soh/src/overlays/actors/ovl_En_Go2/z_en_go2.c

* Fix random crash that only affected one person for some reason

Co-authored-by: Garrett Cox <garrettjcox@gmail.com>
Co-authored-by: Christopher Leggett <chris@leggett.dev>
Co-authored-by: PurpleHato <linkvssangoku.jr@gmail.com>
Co-authored-by: Sarge-117 <adam_branston@outlook.com>
Co-authored-by: briaguya <briaguya@alice>
Co-authored-by: aMannus <mannusmenting@gmail.com>
Co-authored-by: lil David <1337lilDavid@gmail.com>
Co-authored-by: Sarge-117 <108380086+Sarge-117@users.noreply.github.com>
Co-authored-by: louist103 <35883445+louist103@users.noreply.github.com>
2022-09-21 00:50:22 -04:00
louist103 28b7f23769 Update extractor.cpp (#1541) 2022-09-21 00:38:54 -04:00
Christopher Leggett 784cb98d7f Cosmetics editor fixes (#1538)
* Fixes randomize all and randomize section buttons.

* Fixes individual randomize cosmetics buttons

* Fixes Navi Colors

* Inits srand(time(NULL)) for each individual randomize buttons
2022-09-21 00:17:04 -04:00
Garrett Cox d47746eab1 Fix issue with simulated input lag (#1535) 2022-09-20 23:25:01 -04:00
Garrett Cox 936c493b9e Add cheat for easy pause buffering (#1439)
* Add cheat for easy pause buffering

* Add pause input buffering

* Fix pause input buffering

* Changes from feedback

* Convert frame to bool

* Handle when pad is nullptr

* Add newline

* Split input buffering into it's own CVAR

* Split SetShouldBlockGameInput up into to methods
2022-09-20 23:24:06 -04:00
Kenix3 d628bafe29 Removes console from Windows release builds. (#1536) 2022-09-20 23:23:47 -04:00
MoriyaFaith d83c6f1753 [Bugfix + Enhancement] Sword Trail fixes and enhancements (#1473)
* Fix Trails, add more Trail Customization

* 3d Bombs; Bombchu now glow custom trail colors

* 3D Seed/Nut Model, Separate Sword Slash Colors

* Removed 3D Seeds/Nuts; Don't work properly

* restored previous removal of sword blur code

* Remove things not related to Trails

* Remove fix to random color code
2022-09-20 22:49:31 -04:00
Christopher Leggett e1b83b6eb4 Fixes crash on Switch/WiiU when attempting to show the ImGui menubar. (#1534)
* Fixes crash on Switch/WiiU when attempting to show the ImGui menubar.

* Fixes weird indentaion on GitHub?
2022-09-20 21:15:15 -04:00
Christopher Leggett d2153d601c Fixes Restore Old GS Cutscene to only trigger on Gold Skulltulas. (#1529) 2022-09-20 21:11:10 -04:00
aMannus 98be9a8472 Fix vanilla sun's song grave bug (#1532) 2022-09-20 20:09:23 -04:00
Josh Bodner 5d2b5559c8 Autosave improvements (#1247)
* Autosave improvements

* Update soh/src/code/z_play.c

* Removes a line break in building.md

Co-authored-by: Kenix3 <kenixwhisperwind@gmail.com>
2022-09-20 20:08:43 -04:00
Josh Bodner b54f6daa27 Consolidate D-pad CVars and clean up presets (#1298)
* Consolidate D-pad CVars

* Update other tooltip

* Clean up presets

* Fix incorrect preset value

* Undo crouch
2022-09-20 08:15:07 +02:00
Christopher Leggett c5acef2957 Fixes laggy text boxes in Switch (#1527)
* Refactors message texture invalidation to remove lag on Switch.

* Removes unneeded commented out function calls.
2022-09-20 08:12:31 +02:00
Dan Lilja b5b5a58302 Bugfix/version file creation (#1475)
* Added creation of version file to OTRExporter

* Removed creation of version file from other places

* Made path to version file portable

* Changed spaces to tabs in OTRExporter/Main.cpp
2022-09-19 23:36:34 -04:00
Kenix3 d6d7ffd3da Update README.md 2022-09-19 23:27:16 -04:00
Rozelette 66c2fdaacd Fix unused dynamic link shadow for possible future enhancement (#1495)
* Fix unused dynamic link shadow for possible future enhancement

* No longer removing pritns

Co-authored-by: Kenix3 <kenixwhisperwind@gmail.com>
2022-09-19 23:24:13 -04:00
MoriyaFaith f6fa3c74c7 Main commit (#1369) 2022-09-19 23:13:59 -04:00
MoriyaFaith 22c963c0a0 only change (#1474) 2022-09-19 23:06:51 -04:00
Josh Bodner e97ba37a5e Port Dampe behavior to vanilla (#1364)
* Port Dampe behavior to vanilla

* Add Dampe winning to Enhanced preset
2022-09-19 22:58:10 -04:00
briaguya b18cc9d628 Temporary Fishing Fixes for rando (#1525)
Co-authored-by: aMannus <mannusmenting@gmail.com>
Co-authored-by: briaguya <briaguya@alice>
2022-09-19 22:55:46 -04:00
Christopher Leggett 978b325a30 Fixes save lag on Switch (#1499)
* Greatly improves saving speed on the Switch.

* Fixes build on non-switch platforms.
2022-09-19 22:53:38 -04:00
qurious-pixel 006506240f [APPIMAGE] Disable AppImageLauncher integration (#1469) 2022-09-19 22:53:05 -04:00
Garrett Cox f712068a17 [579] Add simulated input lag option (#1438)
* [579] Add simulated input lag option

* Continue to clear buffer when inputs are blocked

* Changes from feedback
2022-09-19 22:49:13 -04:00
Josh Bodner 55e79cd9d2 Add ability to disable fish randomly escaping 2022-09-19 22:31:40 -04:00
Rozelette c9aafcf7c5 Add hack to load bss texture in ovl_En_Jsjutan (fixes #69) (#1482)
* Add hack to load bss texture in ovl_En_Jsjutan

* Remove (debug?) reference to jsjutanShadowTex in LUS
2022-09-19 22:30:27 -04:00
Garrett Cox 34d6212ab2 [#1336] Fix issues with gFasterHeavyBlockLift (#1476) 2022-09-19 20:08:47 -04:00
louist103 e76890a796 Update XMLs from upstream (#1448)
* litle less than half way

* done?

* revert ganon for now

* anime1

* anime 2-3

* object_ganon

* rest of gaBon

* missed some changes

* player
2022-09-18 23:29:24 -04:00
Christopher Leggett e2e0a070ea Fixes copying save files on the switch (#1478) 2022-09-16 18:23:31 +02:00
aMannus d53c8588e2 Fix: Unbreak Wii U sliders (#1486)
* Unbreak Wii U sliders

* #elseif -> #elif
2022-09-15 16:48:51 -04:00
briaguya 941cf65227 use strnlen for c string empty check (#1352)
* use strcmp for c string compare

* Update z_file_choose.c

Co-authored-by: briaguya <briaguya@alice>
2022-09-13 21:12:03 -04:00
aMannus e1f95a5ad9 ImGui Switch/Wii U slider fixes (#1371)
* Switch/Wii U slider fixes

* Attempt at better spacing

* Updated after ImGui merge
2022-09-13 20:47:00 -04:00
lilDavid 18a26b480e Use Color_RGB8 CVars in z_message_PAL (#1372) 2022-09-13 20:45:51 -04:00
Christopher Leggett 67bbeca809 Another fix for getting items near critters. (#1332) 2022-09-13 20:45:23 -04:00
Josh Bodner eda5a6ac91 Fix blocks not being pushed all the way (#1363) 2022-09-13 20:38:26 -04:00
Kenix3 a2d4f4766d Fixes crash handler for jenkins builds. (#1445)
* Fixes crash handler for jenkins builds.

We must include the pdb in redistributables.

* Properly selects PDB file path for inclusion

Co-authored-by: Christopher Leggett <chris@leggett.dev>
2022-09-11 23:15:10 -04:00
Sarge-117 a9f3aedf8e Enhanced Magic Arrows (non-rando) (#1376)
* Add magic arrow enhancements, non-rando

Changes to red ice actor, sun switch actor, and mudwall actor to adjust their collision

* Update tooltip

* Simplify mudwall collision check

* Restore checkboxes in menu

Accidentally lost these during merge

* Update tooltip

* Add line break in tooltip

* Clarify var names and comments

Also preserve chain platform cutscene in spirit based on Link's position

* Remove !=0 from cvar check

* Missed a couple

* Clean up chain platform cutscene check
2022-09-08 22:58:08 -04:00
lilDavid 9686a7ca4c Add Items submenu to Enhancements > Gameplay (#1410) 2022-09-08 22:57:09 -04:00
GaryOderNichts e80e3440e1 wiiu: package SoH as a homebrew bundle (#1427) 2022-09-08 22:55:55 -04:00
Kenix3 4cda92462a Lowers severity of resource manager logging. 2022-09-08 20:25:44 -04:00
Kenix3 4a0269b3b1 Increment version 2022-09-08 19:10:03 -04:00
louist103 4d81c28738 boxes (#1428) 2022-09-08 19:05:16 -04:00
aMannus 3b844375b7 Add missing pendingFlags (#1414) 2022-09-06 11:27:26 +02:00
aMannus f1dc980de8 Fixed autobreak after ImGui cleanup 2022-09-03 05:52:01 -04:00
briaguya 6daf357fd9 fix include fix build (#1385)
Co-authored-by: briaguya <briaguya@alice>
2022-09-03 02:13:20 -04:00
Baoulettes d2fa0d6485 Rando: Fix Fast File Select seed loading (#1252)
* FixRandoLoading

* better methode
2022-09-03 01:33:24 -04:00
Ada b14fb37b81 Update libultraship/libultraship/Lib/Fast3D/gfx_pc.cpp
Co-authored-by: David Chavez <david@dcvz.io>
2022-09-03 01:33:24 -04:00
Ada edb5261b07 Fixes ToT Fog 2022-09-03 01:33:24 -04:00
louist103 8118947ab0 Windows crash handler. (#1383)
* Windows crash handler.

* Fix naming convention.
2022-09-03 01:15:43 -04:00
David Chavez 0ce0ab1260 Phase 1: Separate ImGui Drawing From LUS (#1310)
* Update LUS imported paths

* Introduce GameMenuBar

* Fix imports after LUS import paths change

* Move Randomizer

* Replace needs_save

* Migrate Developer Tools

* Migrate Cheats

* Migrate Enhancements

* Separate UIWidgets

* Add missing Hooks.cpp file

* Migrate Settings

* Remove UI methods from LUS

* Cleanup imports and exposed properties

* Cleanup more methods

* Fix project generation

* Fix CI compilation

* Remove resolved TODO
2022-09-03 00:00:04 -04:00
Christopher Leggett 64aca78450 Fixes Switch/Wii U crashes with Wonder Rupees and Bottleable Entities (#1360)
* Reorders switch statement to prevent some code that shouldn't execute.

* Potentially fixes bottleable entities crash

* Solves lack of ItemEntry for GI_MAX

* Adds comment clarifying new GetItemEntry
2022-09-02 19:19:12 +02:00
louist103 584a4ad818 Linux crash handler (#1209)
* crash handler linux

* cleanups

* missing underscore

* more cleanups

* cleanups

* 32 bit
2022-08-31 22:59:38 -04:00
Christopher Leggett bf505dba5c Fixes keys, maps, and compasses on develop-zhora rando (#1338)
* Fixes keys, maps, and compasses on develop-zhora rando.

* Adds randotodo comment as a note to adapt for the keysanity situation.
2022-08-31 15:25:58 +02:00
Christopher Leggett 776219fb52 Backports a fix for sheik checks from rando-next (#1340)
* Fixes some Sheik checks I had accidentally set the wrong flag for.

* Removes duplicate switch case from cherry-pick
2022-08-31 15:25:47 +02:00
Christopher Leggett a572c11f4f Fixes ice trap gidata not getting cleared after trap is sprung. (#1322) 2022-08-27 09:27:20 +02:00
Christopher Leggett 05136c13b7 Fixes Link getting Song as pocket item (#1326) 2022-08-27 02:46:19 +02:00
Christopher Leggett c2fed1a382 Fixes Lost Woods Bridge Ice Trap in Rando (#1313) 2022-08-25 20:16:43 +02:00
Christopher Leggett 90067be132 Fixes Dungeon Rewards from Song from Impa (#1311) 2022-08-25 17:19:17 +02:00
Kenix3 80863fc7f2 Moves class member functions from headers to compilation units. 2022-08-24 23:06:23 -04:00
Baoulettes c0b9171f98 Cosmetics Editor Fixes (#1287) 2022-08-25 01:28:27 +02:00
Ada b70ad81f57 Add platform specific OTR instructions to readme (#1291) 2022-08-24 22:02:20 +02:00
Kenix3 0573a1b2ac Adds const to DirtyDirectory std::string 2022-08-23 20:38:22 -04:00
Kenix3 b774252f0c ResourceMgr now decreases priority of load messages to trace. 2022-08-23 20:38:22 -04:00
Kenix3 3792b03a7d Cleans up InputEditor class. 2022-08-23 20:38:22 -04:00
Jake Edvenson 927ffd0b8b Enhancement: Scarecrow song skip (#1183)
* Added Skip Scarecrow Song

Added in the option for if the user has the time saver for Scarecrow song enabled and has their Ocarina pulled out in range of Pierre.
Added Skip Scarecrow Song
New enhancement under time-savers that allows the user to only pull out their ocarina to summon Pierre.

* Added Default for Scarecrow summon

The scarecrow summon option now defaults to 0 and can be turned on individually. I haven't included it in any other presets so people don't feel like they're cheating.

* Checks if scarecrow song is in possession

* Fixed positional Scarecrow logic

* Fixed style
2022-08-23 20:30:06 -04:00
Baoulettes d6ebce068d fixes only (#1255) 2022-08-23 20:20:56 -04:00
lilDavid 4680641514 Add bombchu drops (#1257)
* Add bombchu drops

* Force 3D bombchu drops

* Move bombchu drop conditions for better clarity

* Fix grouping on chu drop condition
2022-08-23 20:14:17 -04:00
aMannus ca08680a12 Add: Ability to disable ImGui checkboxes (#1272)
* Added ability to disable checkboxes

* Renamed args, added disabledGraphic option

* Moved checkbox out of ImGui source
2022-08-23 20:13:15 -04:00
David Chavez 70d7d66d0c Add multiviewport support for SDL (#1275) 2022-08-23 20:12:40 -04:00
Ada d735616020 Adds game specific camera options (#1212)
* Adds inversion options

* Fixes compilation

* Adds options to new detailed control editor

* Fixes inversion on C-Up view

* Fixes right stick aiming

* Fixes right stick aiming again

* Adds tooltip function + tooltips to gamecontroleditor.cpp

* Fixes tooltip for X axis

* Uses LUS tooltip function instead of new one

* Adds padding to camera control editor

To fit more in line with other enhancement checkboxes
2022-08-23 20:12:14 -04:00
Christopher Leggett 168e84498f Rework Get Item Table to be more flexible for adding custom items (#1050)
* Adds ItemTableManager class.

* Implements new getItem table in game.

* Adds rando item table and way to differentiate tables in GetItemEntry.

* Adds rough ability to differentiate between rando and vanilla items.merge stashed changes from before develop-zhora merge

* Change ItemTableID to be uint16_t so we can use ModIndex for it.

* Should fix switch build

* Should fix switch build pt 2

* Adds new files to CMakeLists.

* Implements fixes for competing getItem calls.

* Correctly renders freestanding items

Particle effects are probably broken, need to fix them still, I pretty
much know how I would do that.

* Fixed Particle effects in the new getItem system.

* Fixes item fanfares

* Partially fixes Ice Traps

Obtaining a freestanding Ice Trap causes link to slide forward
and receiving one from an NPC plays the sound effect and damage
animation but doesn't freeze link.

* Some more partial ice trap fixing that wasn't pushed earlier

* Removes unused function override

* Replaces ::find with ::at and adds exception handling

* Removes some commented out code.

* Refactors rando's GetItemEntry array into two arrays.

One array is for the vanilla items that don't have GetItemEntries in
vanilla, the other is for rando exclusive items. They are stored in
separate arrays before getting added to the table so that we can apply
different modIndexes. The items in the first table have are handled
by the vanilla Item_Give, and the second table needed a custom
`Randomizer_Item_Give` function.

* Renames, relocates, and implements ModIndex enum.

* Removes now unused ItemIDs and GetItemIDs

Also makes all the necessary changes to other code that was still
using them indirectly through the GI to GID map that was removed.
There's quite a lot of changes here and I haven't had time to test them
yet.

* Re-implements GIMESSAGE_UNTRANSLATED as macro

* Removes commented out function.

* Throws exception if an invalid itemID is used

Addresses https://github.com/HarbourMasters/Shipwright/pull/1050#discussion_r943694857

* Removes ARRAY_SIZE in favor of ARRAY_COUNT

ARRAY_COUNT already exists in `macros.h`, I just didn't find it before.

Addresses https://github.com/HarbourMasters/Shipwright/pull/1050#discussion_r943153833

* Inverts CheckContainsRandoItem to CheckContainsVanillaItem.

Addresses https://github.com/HarbourMasters/Shipwright/pull/1050#discussion_r940895135

* Cleanup, bugfixes, removing the `- 1`s from `z_player.c`

* Fixes some funky formatting that got committed earlier.

* Adds else if to added fanfare sound cases.

Addresses https://github.com/HarbourMasters/Shipwright/pull/1050#discussion_r940112924 and https://github.com/HarbourMasters/Shipwright/pull/1050#discussion_r940113492

* Extends GetItemEntry to include getItemId

Also adapts some existing calls for both the entry and the id to only
get the entry.

* Extends GetItemEntry to include GID.

This allows for using it later when drawing freestanding items.

Addresses https://github.com/HarbourMasters/Shipwright/pull/1050#discussion_r943168136

* Rando-specific items use new textId again.

This got lost when merging develop-zhora in because I didn't have custom
messages merged when I started this.

* Sets global modIndex to MOD_NONE on scene load

Fixes a crash when buying items in shops due to them
not triggering the rando code that normally sets these items.
May have also been crashing vanilla playthroughs.

* Realized I had the bgm conditions wrong.

* Fixes "static drops" (i.e. sticks from withered babas)

* Fixes LACS/Prelude situation... again.

* Fixes too many arguments error.

Not sure why this didn't fail to build on Windows before.

* Fixes Link's Pocket items.

* Simplifies sram init for rando-specific items

* Fixes issues with approaching bottleable items.

* Fixes Ruto's Letter.

It was accidentally getting classified as a rando item.

* Should re-fix freestanding ice traps

* Makes freestanding items set player->getItemEntry.

This prevents freestanding items from setting the global modIndex.
This is part of a larger transition that needs to happen to switch
to setting getItemEntries for all of the rando items. This prevents
some things that set getItemId of GI_MAX from granting a Fire Medallion
when the global modIndex is MOD_RANDOMIZER.

* Makes sure we aren't using getItemEntry when not randoed.

* Replace Randomizer_GetRandomizedItemId with Randomizer_GetRandomizedItem and Randomizer_GetItemIdFromKnownCheck with Randomizer_GetItemFromKnownCheck

* Introduce some new methods and migrate most actors to them

* Fixes ocarina game skull kids to set player->getItemEntry

* Sets `z_en_box.c` to set `player->getItemEntry`

* Fix logical errors and migrate most of the rest of the rando checks to GiveItemEntryFromActor

* Use GiveItemEntryFromActorWithFixedRange in item00

* Fixes Anju to set player->getItemEntry.

* Add a few missing cases

* Additional fix for Skull Kid

* Fixes vanilla ice traps and randomized ice smoke

* Fixes rendering of treasure chest game items.

* Removes unused `Randomizer_GetItemIdFromGetItemId`.

* Cleans up an if statement for item00.

* Cleans up another if statement in item00

* This should fix a bug with the Gerudo Archery minigame.

I wasn't able to get the bug to happen after making this change.

* Documents our new GiveItemEntry fuctions.

* Uses more descriptive type name for ItemIDs for creating custom messages.

* Fixes potential issue with if statement.

* Fixes missed type change.

Co-authored-by: Garrett Cox <garrettjcox@gmail.com>
2022-08-23 20:11:38 -04:00
th-2021 ed1708508a add SHIP_HOME (Linux) (#1210) 2022-08-23 22:29:28 +02:00
Christopher Leggett e12e1d67c6 Prevents optimizations for debug configuration on Windows. (#1270) 2022-08-23 09:32:49 +02:00
th-2021 d39a1a0bdf [macos] Embed dependencies for ZAPD in bundle (#1271) 2022-08-22 10:43:50 +02:00
InfoManiac742 f87f636828 Update BUILDING.md (#1228) 2022-08-21 22:14:05 -04:00
louist103 eed3942b81 Restore Gold skulltula CS from the "0.9" version (#1217)
* GS CS

* add to defaults
2022-08-21 22:11:23 -04:00
Ralphie Morell f5112a709a Add'l Console Commands (#1207)
* Added console commands

* Style conformance
2022-08-21 22:01:51 -04:00
PurpleHato f6bb46a0dc FIX: Disable Draw Distance, Miniboss music could still play in DC with Lizalfos under certain conditions (#1170)
Thanks @jbodner09 for the report 💯
2022-08-21 21:57:55 -04:00
Kenix3 51e4485966 LUS Cleanup: Merge Window and GlobalCtx2 classes. (#1259)
* Merges GlobalCtx2 and Window classes.

* Includes condition variable in File.

* add mac specific include

* sstream to get past "implicit instantiation of undefined template" error

* switch/wiiu includes

* that file doesn't exist

* more wii u globalctx2 stuff

Co-authored-by: briaguya <briaguya@alice>
2022-08-21 21:08:01 -04:00
briaguya ad8179287e Fix controller nav on WiiU (#1258)
Co-authored-by: briaguya <briaguya@alice>
2022-08-20 02:03:28 +02:00
briaguya 0971b9aa78 only toggle menu with controller when controller nav enabled (#1043) 2022-08-19 15:46:11 +02:00
qurious-pixel 9bc6aac81e MacOS OTR (#973) 2022-08-18 19:40:41 +02:00
Kenix3 ad3efccb88 Merge pull request #1241 from GaryOderNichts/fix/wiiu-stick-input
Fix Wii U stick input
2022-08-17 17:54:33 -04:00
GaryOderNichts f4c1332159 Fix Wii U stick input 2022-08-17 17:27:33 +02:00
Kenix3 72981221ad Merge pull request #1226 from HarbourMasters/develop-rachael
rachael -> zhora
2022-08-16 23:40:06 -04:00
Kenix3 6723f4c7c2 Archive.createArchive error now passes in the error to SPDLOG. 2022-08-16 23:30:20 -04:00
Kenix3 f9621dcc17 Cleans up Window class. 2022-08-16 23:30:20 -04:00
Kenix3 10ce3c88fb Remove TestApp from LUS 2022-08-16 23:30:20 -04:00
Kenix3 ea92a2e123 Makes data in OverlayCommand private. 2022-08-16 22:45:33 -04:00
Kenix3 b43eb2d0bd Renames Camera Stick to Right Stick 2022-08-16 22:45:33 -04:00
Kenix3 d09172d74d LUS Cleanup: Fixes SDL axis handling. (#1220)
* Fixes SDL axis handling.

* Removes sensitivities from LUS

Should be a game specific feature.

* Updates Wii U Controllers to remove sensitivity

Also loads legacy controller profiles.

* Fixes memory leak in gfx_dxgi_get_key_name

Also fixes issue where wchars would be returned in dxgi when getting a key name.
2022-08-16 21:53:45 -04:00
David Chavez 6b0338a37d [zret] Port some documentation changes (#1164)
* zret: Documentation pass on scene/room commands #1226

* Update OTR scene

* zret: Document the lens system #1079

* zret: Misc. doc/cleanup 4 #1093

* zret: Fix misc 8 #1150

* zret: Document Distortions from z_camera and z_view #1102
2022-08-16 21:53:28 -04:00
briaguya 6206cd7db0 add ActorResetFunc for courtyard guards (#1213)
Co-authored-by: briaguya <briaguya@alice>
2022-08-16 21:50:52 -04:00
briaguya 01b7fedc35 clean up a few epochs that were missed (#1204)
Co-authored-by: briaguya <briaguya@alice>
2022-08-16 21:50:37 -04:00
briaguya 71b1db1fb6 volvagia interpolation fix (#1203)
Co-authored-by: briaguya <briaguya@alice>
2022-08-16 21:50:12 -04:00
aMannus b4614acf70 Update Enhancement Presets with new options (#1114) 2022-08-16 22:18:44 +02:00
aMannus cd37a56161 Rando: Fix being able to get Sun's Song check multiple times (#1185) 2022-08-16 22:16:44 +02:00
Josh Bodner eb632ccb50 Adjustable push speed (#1190) 2022-08-16 22:09:11 +02:00
Christopher Leggett 0f2e7db8e0 Fix Ice Traps on Windows and Mac (#1216) 2022-08-16 21:49:52 +02:00
GaryOderNichts a3d0962054 Fix ocarina right stick controls (#1211) 2022-08-16 13:47:41 +02:00
lilDavid 46a421f933 Add window to customize specific controls (#1122) 2022-08-16 09:43:09 +02:00
Zaxus125 b7f9960a60 [cmake] Improve OTRExporter asset extraction script, Lower required CMake to 3.16 (#1196)
* supply ZAPD.out path as an argument to extract_assets.py rather than regenerating the script

Generating an entirely new script file to change a string is excessive.
Instead, extract_assets.py takes in one optional positional argument that
contains the path to ZAPD.out, the original purpose for the string
replacement.

This also removes the need for the file(CHMOD ...) command, which bumps
the minimum cmake version all the way up to 3.19.

Additionally, there was an extra script being generated in
OTRExporter/CMakeLists.txt that used the same CHMOD logic, but did not
accurately declare its minimum version to 3.19, this removes that unused
logic.

* OTRExporter: accept a rom path as an argument to extract_assets.py
2022-08-16 09:34:30 +02:00
th-2021 b46c7a0607 [cmake] Use SDL2, GLEW and GLFW from vcpkg (Windows) (#1194) 2022-08-16 09:29:45 +02:00
briaguya ee9ea3f2bd add 3drando license (#1206)
Co-authored-by: briaguya <briaguya@alice>
2022-08-15 21:17:58 -04:00
briaguya a31256d956 controller menu cleanup (#1166) 2022-08-15 23:02:45 +02:00
Jeff Manian 7a9160ed78 Clarify how to build and run on Mac (#1195) 2022-08-14 23:21:16 -04:00
briaguya 42bce9d33e don't abuse epochs (#1179)
* don't abuse epochs

* update bongo hand trails

Co-authored-by: briaguya <briaguya@alice>
2022-08-14 23:18:12 -04:00
aMannus fabe051d3d Fix lost woods leading music in rando (#1155) 2022-08-14 23:04:40 -04:00
Julien Lemay 8945b2ed48 Fix Save Editor Event Check Inf "A" Row flags (#1138)
Fix Save Editor Event Check Inf Flags "A" Row flags not working. It was set to "eci1" instead of "eci10".
2022-08-14 23:02:14 -04:00
aMannus d575a3dda6 Fixed rotation of freestanding key checks in rando (#1135) 2022-08-14 23:01:30 -04:00
aMannus 37dd045bd2 Rando: Fix bomb/bombchu shops (#1134)
* Fix bomb shops in rando

* Addressed review comments
2022-08-14 23:01:00 -04:00
aMannus 651e0ddad4 Fixed 2 incorrect needs_save instances (#1115) 2022-08-14 22:59:12 -04:00
GaryOderNichts 68e7f2e6c1 Wii U support (#1097)
* Wii U support

* [WiiU] Combined Dockerfile

* [WiiU] Combined Dockerfile

* [WiiU] Combined Dockerfile

* Add Jenkins support

* wiiu: fix scissor clamp

* wiiu: improve button remapping

* wiiu: fix scaling issues

* Update Dockerfile after merge

* Pull assets before build

* Only stop container once

* Adjust logging sinks

* wiiu: Change button mapping to match PC version

* wiiu: Implement controller changes

* wiiu: Update BUILDING.md

Co-authored-by: qurious-pixel <62252937+qurious-pixel@users.noreply.github.com>
Co-authored-by: David Chavez <david@dcvz.io>
2022-08-14 22:57:24 -04:00
KiritoDev b989ef4f7f Fixed error screen (#1184) 2022-08-14 12:41:15 -04:00
sholdee 789cf13aae [ci] move asset gen timeout to steps block (#1163) 2022-08-12 18:59:20 +02:00
Kenix3 86faa42acf Make libultra OSContPad struct consistent with the one from libultraship 2022-08-11 19:41:53 -04:00
Kenix3 d623ac5918 Copy over right stick Y axis sensitivity in the UI when the X sensitivity is changed. 2022-08-11 19:41:53 -04:00
Kenix3 4a3e43f73f VirtualController -> DummyController in CMake 2022-08-11 19:41:53 -04:00
Kenix3 094388187f Cleans up Controllers
Renames VirtualController to DummyController.
Makes controller axis treated the same as buttons.
Made Controller class members private or protected
Made Controller class treat deadzones, sensitivities, and press thresholds consistently.
2022-08-11 19:41:53 -04:00
th-2021 791f7774a5 [cmake] Split OTRGui into it's own target (#1116) 2022-08-11 10:05:54 +02:00
sholdee e88000aeb0 [ci] asset stage tweaks (#1120) 2022-08-11 10:05:26 +02:00
Kenix3 d34a6d7666 Fixes error in LUS where there were multiple Vertex classes declared. 2022-08-10 23:14:29 -04:00
Kenix3 3bcc9514ab Cleanup ControlDeck class 2022-08-10 20:21:36 -04:00
Kenix3 15fba97949 Fixes some missed conversions of Console class singleton within the class itself. 2022-08-10 00:38:56 -04:00
Kenix3 6766719969 Fixes issue in Apple builds where imgui was referring directly to Console.Commands 2022-08-10 00:38:56 -04:00
Kenix3 6484d9354d Fixes incorrect command string when adding basic console commands. 2022-08-10 00:38:56 -04:00
Kenix3 23fb885e09 Console class is now a proper object oriented class. 2022-08-10 00:38:56 -04:00
Kenix3 81cd594704 Console now exposes commands with a reference to itself. 2022-08-10 00:38:56 -04:00
Kenix3 797d9fab7c GameOverlay command handler no longer uses SPDLOG and prints to console. 2022-08-10 00:38:56 -04:00
briaguya 96c2033361 fix linux release mode crash (#1124)
Co-authored-by: briaguya <briaguya@alice>
2022-08-09 22:50:25 -04:00
Kenix3 7b11509010 Fixes missed Switch specific invocation of old Console logging macros. 2022-08-09 22:34:16 -04:00
Kenix3 a4804d7290 No longer passing in C strings to SendInfoMessage formatted overload. 2022-08-09 22:34:16 -04:00
Kenix3 5751b5c278 debugconsole now uses console output functions. 2022-08-09 22:34:16 -04:00
Kenix3 f97f9ae422 Sets default value of ConsoleLine channel to "Console" 2022-08-09 22:34:16 -04:00
Kenix3 c7ccd6dbff LUS Cleanup: Strips out the logging system created for the console
Properly routes SPDLog to the console.
Creates an API to be able to send command responses back to the console.
Cleans up the console UI, hiding options when not needed.
Removes stdout console sink for Windows.
2022-08-09 22:34:16 -04:00
Kenix3 1f351418e1 Removes a couple printf in favour of SPDLOG calls. 2022-08-09 22:34:16 -04:00
aMannus e4b58e5a0c TWEAK: Layout/styling overhaul for the F1 menu (#1026)
* First pass of UX changes

* More padding/styling/layout

* More styling

* Moar styling

* Some more styling

* Implemented padding helpers

* More styling, added closing buttons to windows

* Fixed merge conflict mistake

* Fixed new enhancements

* Hopefully fix jenkins errors

* Changed button behaviour, more styling

* Tiny code cleanup

* Change buttons from close/open to > when open

* Small button spacing fix

* Small styling changes after merge

* Small fix after merge mistake
2022-08-09 02:16:45 -04:00
Kenix3 0d9c390526 Removes no longer desired commented code. (#1105) 2022-08-08 21:53:36 -04:00
Kenix3 b924831eba Merge pull request #1104 from briaguya-ai/rachael-to-zhora
rachael -> zhora
2022-08-08 21:53:04 -04:00
briaguya 317de33a8b Merge branch 'develop-rachael' into rachael-to-zhora 2022-08-08 21:43:04 -04:00
briaguya fa090c51f6 Merge pull request #831 from leggettc18/custom-messages
System for Creating and Storing Custom Messages
2022-08-08 21:24:48 -04:00
Christopher Leggett e63d84bd7d Adapts this branch for cmake building. 2022-08-08 21:14:29 -04:00
Kenix3 5581f45050 Adds instructions for Visuals Studio 2019 2022-08-08 21:01:46 -04:00
Josh Bodner b6934b34db Re-add Windows dependencies to build instructions (#1102) 2022-08-08 20:04:55 -04:00
sholdee 5453c68399 [ci] docker improvements (#1101) 2022-08-08 19:59:43 -04:00
aMannus 4ea7f8371f Rando: Zelda sequence fixes (#1095)
* Fixed zelda sequence oddities

* Fixed code inconsistency

* Adressed review comments

* Adressed review comments, removed unneccesary entrance skip

* Addressed some more review comments

* tiny cleanup
2022-08-08 19:59:06 -04:00
th-2021 c803ff65ce fix path to ZAPD (#1092) 2022-08-08 19:58:43 -04:00
InfoManiac742 0e10b59307 Update z_kaleido_item.c (#1046) 2022-08-08 19:58:01 -04:00
InfoManiac742 4bf4ad3359 Update z_en_ru1.c (#1042) 2022-08-08 19:56:56 -04:00
lilDavid f80ba4102a Add instant boomerang recall (#1006) 2022-08-08 19:55:07 -04:00
KiritoDev a4334ecb02 Changed input disable to only be forced on switch (#941)
* Changed input disable to only be forced on switch

* Inverted if

* Finally fixed validation

* Removed enhancement if its a switch build

* Input now only gets blocked when the device is not a keyboard or its on switch

* Input gets blocked when the controller view is opened

* gControlNav is enabled by default on switch

* Fixed compilation issues
2022-08-08 19:53:43 -04:00
aMannus a8fea61bda ADD: Enhancement presets (#926)
* Proof of concept

* Finished default preset

* Added v1 presets

* Overhauled implementation

Function has been moved out of ImGuilmpl.cpp, and all presets have been put in their own functions so they can be applied in a cascading manner.

Also did some slight changes to the presets themselves.

* Fixed link animation settings

* Deleted unneccesary change

* Fixed missing newlines

* Moved functions back to ImGuilmpl.cpp

* Removed Ironman preset
2022-08-08 19:52:34 -04:00
Dog 1f5d323d89 Randomizer: Skip Cutscenes (#846)
* Skip Jabu Jabu's fishy feeding time if rando is enabled Issue #757

Also skip the ganon tower fall cutscene if you died to ganon during the ganon fight for issue #773

* Immediately give control back to player when talon running cutscene starts.

* Fix case of not skipping Gannon
2022-08-08 19:48:53 -04:00
briaguya cf639b1d51 SDL/OpenGL - actually use the window resolution from the json (#1082)
* actually use the window resolution from the json

* switch fix

Co-authored-by: briaguya <briaguya@alice>
2022-08-08 19:46:37 -04:00
Christopher Leggett 59baf24dc6 Merge branch 'develop-zhora' of https://github.com/HarbourMasters/Shipwright into custom-messages 2022-08-08 19:46:09 -04:00
David Chavez 9b33827d02 [ci] Share Generated Assets Across All Platforms (#1074) 2022-08-09 00:02:35 +02:00
David Chavez 9afbe42720 Use -O2 for Release config builds (#1083) 2022-08-08 12:01:45 +02:00
Christopher Leggett 7f233de502 Fixes CMake to explicity launch python interpreter on Windows. (#1089) 2022-08-08 10:31:47 +02:00
th-2021 ed9378375d [cmake] Use static libraries with vcpkg on Windows (#1079) 2022-08-07 18:23:20 +02:00
th-2021 e51e7f3d45 [cmake] Fix Switch icon (#1084)
* Update CMakeLists.txt

* fix switch icon

* Update soh/CMakeLists.txt

* Update soh/CMakeLists.txt

Co-authored-by: David Chavez <david@dcvz.io>
2022-08-07 16:47:16 +02:00
GaryOderNichts cb2410d9c5 Handle audio thread properly 2022-08-06 21:52:42 -04:00
qurious-pixel b2ac01bc98 [CI] Link Updated SDL2 version (#1078) 2022-08-07 03:52:22 +02:00
David Chavez 1794683d3a Ignore build.c 2022-08-06 21:06:40 -04:00
David Chavez c70e3f38b1 Enable SPD logging in libultra 2022-08-06 21:06:40 -04:00
David Chavez aadabe1ecd Better instructions for VS solutions 2022-08-06 21:06:40 -04:00
briaguya 7f58ef14ee add a command to copy the otr to the build dir 2022-08-06 21:06:21 -04:00
briaguya 8efeceb236 formatting 2022-08-06 21:05:51 -04:00
briaguya 9a126dec4e add version requirements in building.md 2022-08-06 21:05:51 -04:00
th-2021 7ef3fff869 add soh icon for Windows (#1060) 2022-08-06 22:19:06 +02:00
th-2021 1ebca42f46 Move to cmake across all platforms (#363) 2022-08-05 07:59:19 +02:00
Kenix3 93d0d7443a LUS Cleanup: Removes GameSettings class. Moves code to Imgui. (#1036)
* LUS Cleanup: Removes GameSettings class. Moves code to Imgui.

* Fixes more strdup problems and finalized removal of GameSetting.

* Reverts changes to Directory.h

* Update Directory.h

* Fixes PR.

* Update Directory.h

* Update rando_main.cpp
2022-08-05 01:03:11 -04:00
Josh Bodner c23457d666 Automatically save after every scene transition (#984)
* Automatically save after every scene transition

* Refactor and don't save in grottos

* Don't save in cutscenes

* Save after getting items as well

* Fix paren
2022-08-05 00:15:49 -04:00
Kenix3 d397c1d871 Increment version 2022-08-04 17:35:49 -04:00
Kenix3 2f5f089e7f Increment version 2022-08-04 17:35:32 -04:00
briaguya facd1723f8 don't use signed ints for epochs (#1044)
Co-authored-by: briaguya <briaguya@alice>
2022-08-04 17:32:23 -04:00
Kenix3 5f913cb9bf Merge pull request #1037 from briaguya-ai/rachael-to-zhora
Rachael to zhora
2022-08-03 23:18:24 -04:00
briaguya 739434e3e4 Merge branch 'develop-rachael' into rachael-to-zhora 2022-08-03 23:01:11 -04:00
vaguerant 78ad282056 Fix Navi HUD text regression (#1020)
* Fix Navi HUD text regression

* Fix the fix
2022-08-03 22:47:54 -04:00
Baoulettes d61d4e508a fix same name controller entry being unselectable (#1031)
This fix being unable to select both entry of controller that has same ID and Name (for example Mayflash mf103 in my tests got two port both ports has same name and ID.
2022-08-03 22:45:02 -04:00
Ada bd86c792c3 Moves release version text (#1028) 2022-08-03 22:44:43 -04:00
Christopher Leggett dffcbb035e Fixes glitchy dungeon maps. (#1032) 2022-08-03 22:43:55 -04:00
Kenix3 0f7a88bd5a This should fix (all?) 60fps interpolation issues left. (#938)
* This should fix (all?) 60fps interpolation issues left.

Resolves #631 #917

* Update z_fishing.c

* Re-adds Emil's interpolation in certain places.

* move open/close disps out of if statments checking timer based vars, revert fishing to use recordopen/closed child

* move disps out of ifs for morpha

* use recordopen/recordclose for volv

* recordopen/recordclose for ganondorf

* switch back to recordopen/recordclose for ganondorf floor

* Frame interpolation now uses a 64bit parameter rather than 32.

* More 60fps fixes

* Fix close child typo

* add todo calls to recordopen/recordclose

* fix build

* revert long long frame interpolation

* add some epochs

* add more epochs

* bongo epochs

* the rest of the epochs

* fix the typo fix the build

* interpolation fixes pr cleanup

* init/cleanup bongo epochs

* bongo hand trails

* Fixes niw feathers

* Fixes bongo bongo hands, and replaces epoch * i with epoch + i

* don't update epochs

Co-authored-by: briaguya <briaguya@alice>
2022-08-03 22:36:13 -04:00
Kenix3 97adc4a7f2 Changes string.h include in CVar.cpp 2022-08-03 21:48:51 -04:00
Kenix3 6190388164 Now using posix strdrup on non-msvc builds. 2022-08-03 21:48:51 -04:00
Kenix3 8c9d067657 LUS Cleanup: CVars functions are now consistent 2022-08-03 21:48:51 -04:00
Kenix3 6d3d5e7da5 LUS Cleanup: Removes unnecessary ModManager class. 2022-08-03 21:48:39 -04:00
Kenix3 212d774613 Clean up unnecessary compiler checks. 2022-08-03 21:12:51 -04:00
Kenix3 e68fac14c8 Uses correct audio player per platform now. 2022-08-03 21:12:51 -04:00
Kenix3 7675309e3f Moves specific audio player header file include to after the definition of AudioPlayer class in AudioPlayer.h 2022-08-03 21:12:51 -04:00
Kenix3 4ce19e1448 LUS Cleanup: Only including the correct audio player header file. 2022-08-03 21:12:51 -04:00
Kenix3 fd379896d6 LUS Cleanup: Clean up hooks system. 2022-08-03 21:12:51 -04:00
Kenix3 8431cddb14 LUS Cleanup: GameOverlay and moves various GUI related files to it's own filter. 2022-08-03 20:10:39 -04:00
Kenix3 2d60c772bf LUS Cleanup: Controllers cleanup (#1016) 2022-08-03 00:07:52 -04:00
Garrett Cox 6d0d608e38 Unrestricted warping in randomizer (#951) 2022-08-02 23:51:07 -04:00
Christopher Leggett fe02818d51 Randomizer: Ocarina of Time Ice Trap Fix (#964)
* Fixes Ice Trap on OoT check from preventing SoT check

* Removes unneeded GlobalContext argument.
2022-08-02 23:48:51 -04:00
Nycz db33604171 added Cheat Sync Time (#957)
* added Cheat Sync Time

This syncs the ingame time with the real world time.
I wasnt quite sure where to put the code so im sorry if this is bad i just wanted to contribute to this project.

* Update soh/src/code/z_play.c

Co-authored-by: Christopher Leggett <chris@leggett.dev>

* Update z_play.c

added suggestions from leggettc18

* Update z_play.c

Co-authored-by: Christopher Leggett <chris@leggett.dev>
2022-08-02 23:48:41 -04:00
InfoManiac742 27e0f19dac Remember save location (#980)
* Remember save location

* Clarified grotto caveat

* Update ImGuiImpl.cpp
2022-08-02 23:47:57 -04:00
aMannus b89cc25df3 Fixed deku stick on B and horse swordless (#995) 2022-08-02 23:46:39 -04:00
Kenix3 7267b60a26 gfxFramebuffer is now only compared or set to 0 rather than NULL 2022-08-02 23:31:50 -04:00
Kenix3 67d5ba08ab Converts gfxFramebuffer to be a pointer. 2022-08-02 23:31:50 -04:00
Kenix3 1de525900d Removes unnecessary Environment.cpp file. 2022-08-02 23:31:50 -04:00
Kenix3 352b46c1f5 LUS Cleanup: Console class is now in the Ship namespace 2022-08-02 22:54:38 -04:00
Kenix3 1bf7771981 LUS Cleanup: Utils.cpp is now in namespace Ship. 2022-08-02 22:38:01 -04:00
Kenix3 c1659d3dcf Adds a function for grabbing physical device from virtual slot. 2022-08-02 22:37:42 -04:00
Kenix3 b3c3882b12 LUS Cleanup: Make ControlDeck a member of Window 2022-08-02 22:37:42 -04:00
Christopher Leggett d80742d882 Adds documentation comments to CustomMessageManager.h 2022-08-02 19:32:59 -04:00
Christopher Leggett a007bfd14a Merge changes from develop-zhora 2022-08-02 19:17:08 -04:00
Christopher Leggett 7eba85c3b4 Prevents blocking Song of Time check by shielding. (#1001) 2022-08-02 18:09:53 -04:00
David Chavez d9443d98f0 Store RGBA Cvar as JSON object (#996)
* Store RGBA Cvar as JSON object

* Use existing split string method

* Extract key setting to var
2022-08-02 18:09:33 -04:00
Christopher Leggett 73447f05ab Revert Goron Spin Fix (#1003)
* Fixes Goron Wakeup animations

* Cleanup of some unneeded code.

* Fixes comment spacing

* Revert goron's back to spinny behavior with smooth transitions.
2022-08-02 18:09:02 -04:00
aMannus 85c4cd3863 Re-added ImStrdup around string value (#1009) 2022-08-02 23:47:39 +02:00
David Chavez cec0bc6fca Merge pull request #999 from dcvz/rachael-zhora
Rachael -> Zhora
2022-08-02 20:15:26 +02:00
David Chavez 53229f0905 Merge branch 'develop-rachael' into rachael-zhora
# Conflicts:
#	libultraship/libultraship/ImGuiImpl.cpp
2022-08-02 20:05:40 +02:00
Josh Bodner 18013e1ae0 Do this in Rachael instead 2022-08-02 13:57:34 -04:00
David Chavez 61c68666d6 Closer align Makefiles & Dockerfiles (#748) 2022-08-02 16:22:20 +02:00
Christopher Leggett bb8152b376 Replaces string literal for BaseGameOverrides with const variable. 2022-08-01 23:16:16 -04:00
Christopher Leggett 480053dfaa Exposes FormatCustomMessage and uses it in FormatJsonHintText. 2022-08-01 23:05:29 -04:00
Christopher Leggett eae97cff79 Addresses most of bria's comments. 2022-08-01 21:44:28 -04:00
Christopher Leggett 4d30cc50a1 Adds newlines to the ends of some files. 2022-08-01 21:21:29 -04:00
David Chavez 4ed82c71dc Fix c++20 clang issue 2022-08-01 17:16:03 -04:00
Garrett Cox 9389ceb8c1 Speed up lifting silver rocks and obelisks by 5x (#953)
* Speed up lifting silver rocks and obelisks by 3x

* Increase rock lifting speed to 5x

* Fix bug that sped up picking up small rocks, grass, bombflowers

* Add enhancement checkbox for faster block lifting and reduced speed to 3x
2022-07-31 22:09:30 -04:00
David Chavez b4f4e36acb [macos] Disable buggy resolution scaling (#982) 2022-07-31 22:08:10 -04:00
Christopher Leggett d332c3d9d6 Randomizer Allows Skull Kid to accept Mask after receiving an ice trap. (#963)
* Allows Skull Kid to accept Mask after receiving an ice trap.

* Extracts obscure rando check into a clearly named function.

* Fixes missing semicolon...
2022-07-31 21:58:13 -04:00
Christopher Leggett b59c9cdf02 Randomizer: Fixes LACS and Prelude checks under certain conditions (#961)
* Prevents LACS flag from getting set when it shouldn't be.

* Fixes Prelude and LACS checks so they apply immediately if missed.

* Refactors the scene-flag-setting code into its own function.

* Renames new enums and props to be clearer and not specific to scene flags.

* Refactors pendingFlag data into a separate struct.
2022-07-31 21:57:30 -04:00
aMannus 8c25e9a992 Added line break (#958) 2022-07-31 21:54:26 -04:00
Kenix3 4f29833476 Adds beta quest Gameshark cheat. (#975)
* Adds beta quest Gameshark cheat.

* Fixes issue where lus was including a function from soh.

* Limits beta quest to 0-8
2022-07-31 21:52:10 -04:00
Garrett Cox d648c7275c Hide Dpad in minimal UI (#955) 2022-07-31 21:51:36 -04:00
KiritoDev a1ed35e5bd Fixed slowdown on dodongo (#945)
* Fixed slowdown on dodongo

* Invalidate only works on pc

* Added todo comment
2022-07-31 21:49:54 -04:00
InfoManiac742 206f63f9e6 Fix build link in README (#944)
Currently leads to a 404 page since there's no longer a branch called "develop", I've just sent it to the main page for the builds site
2022-07-31 21:48:43 -04:00
Josh Bodner 7a45380123 Automatically break long tooltip lines (#925)
* Remove manual newlines from the middle of sentences in tooltips and automatically break long lines instead

* Move split functionality into header so randomizer tooltips can use it

* Rewrite logic to be O(n)

* Found another typo

* Move helper function to libultraship to (hopefully) get Jenkins happy

* Fix typo I made when fixing the typo before

* Remove unneeded header

* Parameterize line length in case variable line length is desired in the future
2022-07-31 21:40:26 -04:00
GaryOderNichts 99ecccfaab Save scarecrow songs as OcarinaNotes (#918) 2022-07-31 21:39:24 -04:00
PurpleHato 7dd6f59b8b TWEAK: added 360hz support (#896)
* FIX: Increased the maximum actor limit for draw distance

Fix issue #529

* TWEAK: added 360hz support

Has been asked by an user who have a fancy 360hz laptop refresh rate
https://www.androidauthority.com/asus-rog-ces-2021-1191928/

* TWEAK: Forgot one value
2022-07-31 21:38:40 -04:00
vaguerant 361a986b8e Add bottle swipes to Fast Drops; rename to Skip Pickup Messages (#847)
* Add bottle-swipes to Fast Drops; rename to Fast Pickups

* More freecam friendly

* Resolve freecam interaction

* Rename to "Skip Pickup Messages"
2022-07-31 21:37:47 -04:00
Sarge-117 b98c8b4abb Minor enhancement: Allow toggling on equipment screen (#813)
* Allow Equipment Toggle

Allow player to toggle equipment on/off on the equipment subscreen.  For tunics and boots, this will revert them to Kokiri Tunic/Kokiri Boots.  For shields, it will un-equip the shield entirely.  For swords, only BGS/Giant's Knife is affected, and it will revert to Master Sword.

* Set up Cvar and check for MS

Set up the cvar/imgui and add a check that we own the Master Sword (in case we're in the Ganon fight)
2022-07-31 21:35:05 -04:00
David Chavez 582f084973 Use tex sizes from texture rather than hardcoded values (#610)
* Use tex sizes from texture rather than hardcoded values

* Dynamic do action tex sizes

* Remove unused minimap texture keys

* Restore MESSAGE_STATIC_TEX_SIZE

* Use dynamic offsets

* MACRO it up

* Enable SPDLOG in Xcode

* Handle non-existent texture
2022-07-31 21:32:40 -04:00
Christopher Leggett 2f9874c68f Cleanup. 2022-07-31 19:31:22 -04:00
Nicholas Estelami 47ad3bdc47 Fixed linux compile issue 2022-07-31 16:57:04 -04:00
Nicholas Estelami 9d12813282 Fixed merge/rebase issues 2022-07-31 16:57:04 -04:00
Nicholas Estelami 3bb234e6a6 Fixed merge issues. 2022-07-31 16:57:04 -04:00
Nicholas Estelami 44bf5af33a Fixed up merge issues and crash 2022-07-31 16:57:04 -04:00
Nicholas Estelami 0193489b00 RGBA8 CVar Support Added 2022-07-31 16:57:04 -04:00
Nicholas Estelami a6092c21d4 Merge with develop 2022-07-31 16:57:04 -04:00
aMannus 02c50cd0c4 Fix all VS filters for rando files 2022-07-29 21:49:01 -04:00
aMannus fa0a66695c Skips time travel cutscene in rando (#956) 2022-07-27 22:18:27 -04:00
GaryOderNichts 6818247317 Big-endian support (#909) 2022-07-27 23:50:56 +02:00
Christopher Leggett e8d2b0cceb Hopefully fixes build errors on Linux-CI. 2022-07-26 20:46:49 -04:00
Christopher Leggett 5a97e9f0de Factors away some raw textIDs into an enum with descriptive names. 2022-07-26 20:11:17 -04:00
Christopher Leggett d0968a99c1 Removes some unneeded function definitions (some of which were already commented out). 2022-07-26 19:25:17 -04:00
Christopher Leggett 0ed8c277e8 Renames some variables for clarity 2022-07-26 19:07:54 -04:00
PurpleHato 477cf7f6ec ADD: Rando Spiritual Stones Power (#910)
* ADD: Try to use Spiritual Stone alpha on altar

Not super advanced but it kinda work, n eeds to figure out why the gSaveContext.inventory.questItems doesn't seems to care

* TWEAK: Full working + added on child link side

* TWEAK: added else with comment

* frogot a }
2022-07-26 18:46:02 -04:00
Christopher Leggett 59dc52f394 Moves the NOGDI define to CustomMessageManager.h 2022-07-26 18:44:52 -04:00
Christopher Leggett 822476373b Renames CustomMessage to CustomMessageManager 2022-07-25 22:33:38 -04:00
Christopher Leggett 4c9e4b2d84 Puts CustomMessage files in filters in Visual Studio 2022-07-25 22:04:53 -04:00
Christopher Leggett 2ff5d54592 Merge in develop-zhora 2022-07-25 21:33:19 -04:00
Christopher Leggett cd01e8b778 Moves deku scrub messages into CustomMessageTable. 2022-07-25 21:31:17 -04:00
David Chavez 8bdc4458c7 Improve string split performance (#933) 2022-07-25 21:12:25 -04:00
KiritoDev 5f718932e6 Nintendo switch support (#935)
* Moved gfx effects to the gpu and removed loadtexbyname on some textures

* Readded empty if

* Added nintendo switch support

* Fixed compilation errors and window closing issue on linux

* Fixed kaleido on 64 bit

* Fixed audio on nintendo switch

* Implemented performance mode switcher

* Added suggestions from pr review

* Fixed ftruncate errors

* Fixed compilation errors

* Added missing include rule

* Fixed libstorm path

* Removed ftruncate extern to use a correct posix version

* Merge branch 'develop' from HarbourMasters into znx (#3)

* Add Support for macOS (#441)

* Fixed soh filters

* add more makefile changes

* almost ready

* more updates

* update

* update

* Update Makefiles to handle both platforms

* Allow for overriding the CXX and CC executables

* Restore original structure while supporting custom CXX flags

* Remove some platform specific libs

* Dynamic target name

* Make X11 paths package-agnostic

* Remove changes to `gfx_opengl.cpp`

* Use OpenGL2 on MacOS instead of OpenGL3

* make it actually render something

* render at least the first texture, still need to figure out the second
one

* Let’s use OpenGL 3 again

* maybe this works to get the right texture? link's eyes still look off a bit

* did this work?

* set the platform to macos

* actual numbers are right, but logic is ugly XXX/TODO, i know

* add zlib to ldflags for ZAPDUtils

* A bit of cleanup

* Revert unneeded changes

* Remove GL_CHECK

* Fix issues with z64 branch

* use an std::map instead of a giant array

* three point filter fix (#2)

* Fix mac compilation

* fix audio for 64 bit

* revert audio heap size, keep bigger pools

* Add more Apple specific checks to our modifications

* Add building instructions for macOS

* Remove unecessary step from building instructions

* Add missing SDL2 & GLEW to Linux LDLIBS

* Update BUILDING.md

Co-authored-by: BountyChocolate123456 <101743444+BountyChocolate123456@users.noreply.github.com>

* Update soh/.gitignore to include other arch binaries

Co-authored-by: BountyChocolate123456 <101743444+BountyChocolate123456@users.noreply.github.com>

* Use right platform name for debugging window

Co-authored-by: BountyChocolate123456 <101743444+BountyChocolate123456@users.noreply.github.com>

* Fix stormlib on macos (arm64)

* Simplify some of the ifdef checks

* Revert an older no longer necessary fix

* Remove remaining unecessary deviations

* Update building instructions after StormLib changes

* Feature: Use OpenGL 4.1 (#1)

* Further tweak the BUILDING

* Tidy up

* reword -j message

* Add Jenkins CI Support (#2)

* Fix type issues

* add target <appbundle> and <filledappbundle>

add makefile targets to create an .app
`filledappbundle` creates the target with the .otr included

this should perhaps be moved to Application Support though

* pull gcc's rpath from otool output

* move make target to the end so it's not default

* Add Jenkins and make exe in par with other platforms

* Actually save build artefacts

* Fix artefact path

* Remove x11 mentions and linking (not used)

* Update building instructions for generating app

* use appsupport directory

* Add new app icon

* Update target to match macOS types

* Update more audio types

* fix null deref in Audio_PlayFanfare

* Remove old import from z64

* address final nit with apple ifdefs

Co-authored-by: KiritoDev <36680385+KiritoDv@users.noreply.github.com>
Co-authored-by: Jeffrey Crowell <github@crowell.biz>
Co-authored-by: BountyChocolate123456 <101743444+BountyChocolate123456@users.noreply.github.com>

* Move macOS to parallel stage

* fix linux crash

* Ignore all named saves

Necessary after new save format

* DPad items

* Move UI location arrays from static to global to accomodate customizable UI

* FIX: Increased the maximum actor limit for draw distance

Fix issue #529

* FIX: Remove duplicates of gNewDrops from the enhancements menu

* Get rid of erroneous int casts

* casts jya_cobra's shadowTexture pointer to uintptr_t instead of s32.

* Fix ability to assign equipment you don't own

* Fix title cards for market potion shop and bombchu shop

* Invalidate message item icon texture before drawing

* Add margins for dpad

* Fixed some instances where the original OOT save is erroneously preserved or recreated, leading to another conversion next time you launched the game

* Headphones setting in game should now work.
Resolves #13

* Map Select name fixes

* Change Power to Upgrades

* Rename Soh* files

* Update names

* Add more files

* Add more files

* Add toggles for disabling heart drops and random drops (#507)

* Adds toggles for disabling random drops and fixed heart drops

* Changed the "No Fixed Heart Drops" toggle to the more useful "No Random Heart Drops" toggle

* Adds an explanation that the no heart drops option is similar to Hero Mode

* Moved difficulty options into their own sub-menu
Moved time saver options into their own sub-menu
Moved clutter reducing options into their own sub-menu

* fixed the tag name of mweep speed

* Moved Skip Text to Experimental

* Fix testing masks of DPad

* Fix audio, boot commands, and save staes.

* add menu from https://github.com/PurpleHato/Shipwright/tree/ResetMenu

* implement reset

* Update README.md

* command on mac

* special char doesn't work with default imgui font

* change name based on PR comment

* missed a couple spots

* change sunset in save editor so dampe is out

* Update to latest `docking` imgui (#582)

* Update to latest `docking` imgui

commit: 67410d53f739b6a0df138e2252f0e5136b42062f

* Fix modified import for SDL

* Update imgui_impl_sdl.cpp

* Add Imgui include path for better imports

* Controller Navigation Fix-Up (#544)

* Controller Navigation Fix-Up

* [MISC] Fix typo

* Use Macro for __FILE__ & __LINE__ when possible (#559)

* First batch some overlay

* Almost all overlay

* effect & gamestate

* kaleido stuffs

* more overlay

* more left over from code folder

* remaining hardcoded line and file

* Open & Close _DISP __FILE__ & __LINE__ clean up

* Some if (1) {} remove

* LOG_xxxx __FILE__ , __LINE__ cleaned

* ASSERT macro __FILE__ __LINE__

* mtx without line/file in functions

* " if (1) {} " & "if (0) {}" and tab/white place

* LogUtils as macro

* GameState_, GameAlloc_, SystemArena_ & ZeldaArena_

* Revert "GameState_, GameAlloc_, SystemArena_ & ZeldaArena_"

This reverts commit 0d85caaf7e.

* Like last commit but as macro

* Fix matrix not using macros

* use function not macro

* DebugArena_* functions
GameAlloc_MallocDebug
BgCheck_PosErrorCheck as macros
removed issues with ; in macro file

* MM Bunny Hood enhancements: no age restrictions & wear across entrances (#560)

* Remove age restriction on MM Bunny Hood

* Handle mask slot changing; init Link wearing mask

* Reset mask state after selling

* Use unordered maps in some hot paths (#566)

* Use unordered maps in some hot paths

* Address PR comments

* Cheat: Infinite Epona Boost (#577)

* Cheat: Infinite Epona Boost

* Edit for readability

* update pulseaudio for 44.1khz audio (#587)

* use pulseaudio defaults

* spaces/tabs

* pulseaudio values tuned for n64 audio at 44.1khz

* update tlength

* remove one hardcoded samplerate

Co-authored-by: briaguya <briaguya@alice>

* Restoration Item Sliders (#595)

* Allows players to set custom restoration values for potions and milk

* Fixed a dumb oversight

* implemented fairy sliders

* use ini window resolution (#410)

* use ini window resolution

* use arguments for directx window size

* default 640x480 not 320x240

* kick off a build

* and revert

* default config 640x480 not 320x240

* add todo

Co-authored-by: briaguya <briaguya@alice>

* 3D Drops & Projectiles update (#548)

* Fix remaining rupee and keys

* fix tabs -> spaces

* more fix about tabs -> spaces

* Better up <-> down mouvement for hearts

* remove useless comment

* Cosmetics menu rework (#589)

* -

* DPad/some margin fix(left side)

* various ImGui stuff and fixes

* disabled kaleido menu (non working)

* fix win being dumb

* same for C btn this time

* Fix windows build

* Beating hearts fix

* Default win size and some placement fix

* Fix Dpad Ammo & C notes, Kaleido, white dog

* some texts fix and tab move

* Add stone of agony, some fixes and build correctly

* precise item place with Dpad

* Gamecube -> GameCube

Co-authored-by: Baoulettes <iMacWin10>

* [CI] Create an Appimage for 64bit builds (#570)

* [CI] Create AppImage file

* [CI] Updated Jenkinsfile

* [MISC] fix indentation

* [MISC] Fix indentation

* [MISC] Fix indentation

* [CI] 7z appimage and readme

* [CI] AppImage icon file (#597)

* [CI] Add patchelf

* [BUILD] Include Hi-Res icon

* Fix portability use of std::clamp (#596)

* Add N64 weird frames and OOB Bombchus cvars (#602)

* Add gN64WeirdFrames and gBombchuOOB cvars

* Rename gBombchuOOB to gBombchusOOB

* Fix pipeline

* [BUILD] Do not strip ZAPD (#598)

* [BUILD] Do not strip ZAPD

* [BUILD] Reuse Icon Asset

* [APPIMAGE] Handle paths with spaces

* [macos] Distribute optimized builds (#599)

* Cosmetics texts fixes (#604)

* branch init + few fixes

* Reset button

* Several texts fixes and default color to GameCube

* space issues

* some more extra space that was not needed.

* space yes last time ...

* Arrows being able to be rainbow some more texts fixes

* more texts fixes

* c-buttons some plurial fix

* Fixes bug in demo effect due to removed display list set.

* King dodongo room crash (#613)

* first attempt

* force camera setting to be at least 0 (dirty!)

* -

* reverted something to just include fix

* Invalidate text box icon before drawing (#607)

* [APPIMAGE] Set lib path for ZAPD (#611)

* New drop runtime fix (#614)

* inital rework

* fixed default rotation for 2D sprites

* fix tab/space issues

* Fix Ganon's Castle title cards (#606)

* Checkered room crash workaround (#615)

* Increase poly and vertex count for dyna actors

* Add TODO

* Only apply fix in Forest Temple

* Enable globally

* Match case of 'Shipwright' in Linux build (#619)

* Fix 0xabababab crash (#617)

* Unconditionally setup the normal skybox

* Only call Skybox_Setup once ever

* Equipment upgrade text fix and any pause slot enhancement fix (#620)

* Fix upgrade name text not rendering

* Use cvar and don't render equip help for empty item slots

* Fix rendering logic

* Fix incorrect item name rendered for one frame

* Reorder comparison

* Remove extra indent

* Remove accidental changes

* ImGui grammer, consistency, and clarity fixes (#625)

* ImGui grammer, consistency, and clarity fixes

Co-Authored-By: Stormghetti <56653191+Stormghetti@users.noreply.github.com>

* Adds more new lines for users on smaller displays

Co-Authored-By: Stormghetti <56653191+Stormghetti@users.noreply.github.com>

Co-authored-by: Stormghetti <56653191+Stormghetti@users.noreply.github.com>

* New drops shadows & rotation fixes (#627)

* fixes

* forgot to add heart pieces in rotation logic

* Dodongo's Cavern blue warp crash fix (#622)

* Doodong's Cavern blue warp crash fix

* >= not >

* Don't waste a line of space

* add support for clang compiler (#592)

* hacks to align strings for clang... wow just wow

* start work to getting built with clang

* fix issues with struct constructors, all builds, doesn't link still

* fix some narrowing issues that clang complains about

* fix compliation of zapd

* fix null deref in VersionInfo

* builds with clang

* make stringbuilding use StringHelper instead of addition

* fix linking

* add CLANG SHIP overlay on clang built versions

* doesn't need to be volatile

* mark unknown strings as extern

* rename some stuff

* can't align extern

* hopefully fix compilation for everythign

* expandtab

* allow setting LD

* Revert "allow setting LD"

This reverts commit 711aba6db2.

maybe to use lld it should be a LDFLAG?

* -Wno-deprecated-declarations is required for newer versions of clang

on macOS 13 beta sdk, the version of apple clang requires this

* Add jenkins support for clang

* Forward CXX flags to stormlib compilation

* Move GCC only flags to check

* use exports to set multiarch setup

* Fix Jenkins forever

* use make instead of cmake --build

add some flags to build with clang-11 as well

* address review coments

- rework extraction to allow multi thread
- misc readability cleanup

* update makefile to add WARN on linux+clang

Co-authored-by: David Chavez <david@dcvz.io>

* Fix develop

* Fixes grey screen issue + tooltip for 2 handed shield

* Don't close controller after SDL has quit (#642)

* Don't close controller after SDL has quit

* Don't check if controller can rumble if null

* Fixes Barinade's set whenever boss fight is reloaded (#639)

* Reimplements unused Barinade reset function.

* Removes the Jellyfish from Barinade's body on reset.

* add the ability to pull graves during the day (#637)

* change max internal res multiplier to 3x, use float and % instead of int (#638)

* change max internal res multiplier to 3x, use float and % instead of int

* Update libultraship/libultraship/ImGuiImpl.cpp

Co-authored-by: Kenix3 <kenixwhisperwind@gmail.com>

Co-authored-by: briaguya <briaguya@alice>
Co-authored-by: Kenix3 <kenixwhisperwind@gmail.com>

* Fixes crash on Biggoron trade failure screen wipe

Resolves #621

* fixes center docking (#652)

* testing out item replacement (#416)

* skip learning song of storms

* don't set flag when getting goron tunic as child

* Initiates prelude check when master sword unloads.

Not quite how N64 rando does it but so far it's the only way I've found to make it trigger without also triggering the time travel again.

* Stops Shadow Temple lore prompts from appearing in rando.

* Skips cutscene of royal tomb explosion in rando.

Explosion sound doesn't play correctly and I think the debris appears in the wrong place, but the functionality is here.

* Improves visual of exploding gravestone.

* Adds some comments explaining the rando differences

* Skip ruto text box in jabu blue warp

For rando

* skip intro cutscene in dodongo's cavern

* load spoiler files on boot, fix spoilerfile existing check when making new saves

* name entry dropped spoiler logic

* make sure to actually init the cvar

* no chime on load

* uncomment

* Skip ganondrof cutscene

Skip to scream part of the death animation, skipping the text boxes etc. For rando

* Update z_boss_ganondrof.c

* skip owl flight cutscenes in rando

* Fixes skipped text so it only applies to shadow temple.

Earlier fix inadvertently applied to some other text as well, changed logic so that only specified sceneNums and textIds can have this enabled, and text skipped by sceneNum can have the skip overriden by textId if needed. Currently there are no overrides so the textId section of the logic is commented out to avoid compilation errors.

* Adds a default to the switch case statements that leaves the randoSkipText variable unchanged, just in case.

* TEST: Text for item

* Adding ganon flavor text

* ADD: AMMO Count

* format ganon text/hint text

* Autoskip the tower cutscene if settings call for tower collapse.

* ganon hint text logic

* Improved prelude after time travel fix

* swapped the sizes between ganon hint text and ganon text, as they were set to the wrong things.

* this is all i did

* not the cleanest code ever but it's working

* ADD: GS Count

* ADD: Wallter (crash for now)

* TWEAK: Wallet check

* FIX: Use DrawItem instread of DrawUpgrade... b-baka!

* Fixes some vanilla bugs introduced by rando code.

* Added cutscene skip for zelda escaping

Using the debug cutscene skipping function. Also added a conditional so the bridge doesn't spawn closed when cutscene is ready to trigger

* ADD: X Spacing + Placeholders for song

* ADD: default case for items

* TWEAK: Spacing

* FIX: Light Arrow

* ADD: Ammo Option

* use groups instead

* ADD: More spacing logic

* songs and names

* TWEAK: Color on wallet

* colors

* Added flags cutscene before nabooru fight

* ADD: ChromaKey text

* First attempt skip cs after nabooru defeat

* Better implementation for specific rando cutscene skips

* use pulseaudio defaults

* spaces/tabs

* move color push/pop to stop crash

* make the colors work again

* the real bottle fix

* pulseaudio values tuned for n64 audio at 44.1khz

* update tlength

* remove one hardcoded samplerate

* Cleaned up and fixed zelda escape skip

The if statement is a freaking monster, but unless we want to skip more cutscenes in the same way later, this is the most compact way of doing it that I know of.

* Revert one line to match original

nothing functional

* another hint line that breaks autonewline logic

* don't autospawn epona if we don't have the song/ocarina

* Trying to use iron knuckle death effects

not working yet

* Streamlined OoT cutscene skip for future additions

Also cleaned up if statement in general

* Made if statement more readable

Also added clarity for what cutscene was skipped

* Fixed typo in comment

* Janky nabooru defeat cs skip

* altar text formatting (gonna need help shortening some of the french ones)

* more altar text formatting

* english altar text formatting complete

* make gtg blocking guard check for card not bridge

* FIX: Typo!

* FIX: Uppercases

* FIX: Typo

* TWEAK: Alter + some names

* TWEAK: More caps!

* ADD: Missing string

TWEAK more uppercases and namefixe
s

* Hide nabooru death by covering her in flames

* bandaid fix for death crash issue

* Twinrova defeat cs skip

Skips the animation and manually calls the function to show the "beam" around the sisters

* fix crash

* fix caps to match

* fix great fairy reward mashing/shielding issue

* TWEAK : Typo clé to Clé

* TWEAK: Some Altar hints

TWEAK: Some capitals

* TWEAK: Unmatching text + some cap again

* TWEAK: More tweaks

* fix build

* remove extra json.hpp, add hint

* Update randomizer_item_tracker.cpp

* TWEAK: Double Defense with RedParticles instead of white

* make sure we don't optimize out the check to ensure a spoilerfile exists

* vanilla ganon boss key hint formatting

* TWEAK: FR- better way of the hero text

* fix

* and again

* Initializes dungeonsDone items in gSaveContext to 0.

* Replaces sizeof calculation with a NUM_DUNGEONS constant.

* Fixes Saria's Gift on the LW Bridge from getting killed when holding shield.

* More airtight fix for Saria's Gift on the Bridge.

* Lifts one of the conditions in the if statement a little higher to prevent unnecessary lookups of getItemId.

* Invalidate text box icon before drawing

* Fixes the case where Saria's gift is an Ice Trap.

We still get the Ice Trap once, but never again. This does mean you can now hold R while walking in to avoid the ice trap, but everything else seems to work fine.

* Initial commit

Might need changing when we change the settings in the future

* Fixes Door of Time opening cutscene after warping with prelude.

* Initial waterfall skip

Very rudimentary way of doing things but it seems to work so 🤷

* inital rework

* fixed default rotation for 2D sprites

* fix tab/space issues

* 3d drops rando merge fix again

* Allows Impa to appear in the Lullaby check post drawbridge escape.

* Changes Ganon's Trials Count setting to a checkbox

The checkbox is whether or not to skip all of them. Leaving the box unchecked will mean doing all of them. Eventually this will be switched back to a slider once we implement the logic for which trials start out completed.

* Sets all Ganon's Trials to incomplete in new saves.

Fixes https://github.com/briaguya-ai/rando-issue-tracker/issues/131

* fix castle guards when oot throw cutscene has already played in rando

* Properly removes the beams when trials are cleared.

* Removes Question Mark from Skip Ganon's Trials UI.

* Adds a todo comment about when to change back to slider.

* make deku seeds check for bullet bag

* Various tweaks

TWEAK: Altar Text
TWEAK: Hint names
TWEAK: Replace more problematic œ to oe

* upgrade ocarina on both child and adult equips

* FIX: Jabu Item

* update equipped hookshot/longshot when obtained as other age

* add hint

* don't give the bgs check without the claim check

* Skips Darunia Cutscene in Fire Temple

* Added a TODO note about not skipping the cutscene.

There is a setting we will want to have eventually that will require this cutscene to not be skipped since it is used during a glitch.

* remove todo

* restore fast ocarina option in imgui that was lost in merge

* Fixes grey screen issue + tooltip for 2 handed shield

* update to use dg instead of g for textures in item tracker

* TWEAK: Default color for cosmetic RAND button was not the corect one

* fix texture crash, remove unused item tracker code

* don't open mask shop until we get zelda's letter

* Update README.md

* Prevents "correct" chime under incorrect conditions.

* Fixes typo in conditional and adds "bonk" sound effect.

"Bonk" sound is NA_SE_SY_OCARINA_ERROR and it plays when conditions for the Door of Time have not been met after playing Song of Time. This is only possible in rando's "Intended" Door of Time option, in which the Ocarina of Time and all 3 spritual stones are required to open the door, instead of the vanilla requirements of just having the song of time.

* remove modify dpad equips toggle, replace with checks for dpad menu

* remove extra check

* add ability to hold c-up to assign to dpad when dpad menuing is enabled

* disable d-pad navigation on item menu when holding c-up to equip

* dpad+c-up stuff for equipment menu

* ADD: Checbox for songs colors

* TWEAK: RandoColors for normal songs

* kind of quick and dirty but it works

* TWEAK: Clarity of the tooltip

Co-authored-by: briaguya <briaguya@alice>
Co-authored-by: Christopher Leggett <chris@leggett.dev>
Co-authored-by: aMannus <mannusmenting@gmail.com>
Co-authored-by: PurpleHato <linkvssangoku.jr@gmail.com>
Co-authored-by: Dog <5172592+Dog@users.noreply.github.com>
Co-authored-by: Vague Rant <vaguerant@users.noreply.github.com>
Co-authored-by: Baoulettes <perlouzerie@hotmail.fr>
Co-authored-by: Ada <60364512+GreatArgorath@users.noreply.github.com>

* Cosmetics hotfixes (#640)

* Initial branch creation

* Revert Main Game so it do not conflict later

* should fix window build, made namespace for Cosmetics

* forgot to edit one title

* Ability to add hidden window (usefull for Rainbow)
Fix building issues

* Line break, unused bool remove

* add descriptive todo for death crash bandaid (#655)

Co-authored-by: briaguya <briaguya@alice>

* Removed legacy audio mode and fixed ganon sound bug (#657)

* Free Camera (#337)

* wip free cam

* Almost done, needs collision still

* Added free cam behind cvar

* added WIP collision

* Fixed & implemented "Manual mode" from WW & TP

* Fixed camera not rotating when Link is moving

* fixed initialized camera rotation

* Fixed camera getting stuck + made it smoother

* reduced deadzone

* fixed epona camera height + added WW z-target free camera

* Adjusted player camera height & fixed fov

* Fixed camera roll

* fixed fov when moving the camera while in z-target

* Camera resets to Auto when going through doors or changing maps

* Fixed building

* touch

* more touch work

* Added WIP mouse support to the free cam

* gui stuff

* fixed building

* fixed building error

* ok fixed building for real this time

* oops

* Fix compilation issues

* removed mouse stuff that magically appeared in this branch

* smoothed out stick values & removed remains of mouse support

* re-added manual camera when pressing Z

* reduced minimum Y position of camera

* Addressed dcsv's nitpicks

* part 2

* oops

Co-authored-by: David Chavez <david@dcvz.io>

* Rando: Allows Malon's Item Check to be obtained by pulling out the Ocarina. [FIXED PR] (#672)

* Fixes using the Ocarina to get the check from Malon.

Still some cleanup to do here. For some reason the player can shield before receiving the check. It doesn't set the flag if the player does that so they can still try again, but would prefer a different solution if possible.

* Prevents Shielding from blocking the Item_Give from happening.

* Code Cleanup and comments explaining the new rando flow.

* Removes inventory check when pulling out Ocarina

This allows OI to properly give the check, which is important for Glitched logic later down the line. Talking to Malon still requires the Ocarina in your inventory.

* Prevents non-malon textboxes from triggering the check.

Also adds a comment explaining the condtional for getting the check from talking to Malon since it got pretty long.

* Actually fixes checking for text boxes.

* Relocates a comment for improved clarity.

* Fix Rando Water Temple Softlock (#665)

We use 3DS logic to generate item placement, but didn't have this specific door in Water Temple unlocked from the beginning like 3DS does.

This meant that if people took specific paths through the temple, they could softlock themselves by missing a key.

* Rando: GtG and carpenter prompts skip (#663)

* Skip gtg and carpenter prompt

For rando. Tested and just works.

* Fixed missing break

* Hide debug overlay behind gDebugEnabled (#660)

* Introduce App Directory Path (#572)

* Introduce app directory path concept

* macos: Remove hacky way of using applicaiton directory

* Update the new SaveManager

* Address stack user after return

* Remove unecessary property

* Use std::string for filepath

* Improve clang specific detections

* Use new path system for imgui files

* Improve helper for getting relative paths

* fix hidden wnd (#744)

* Split damage multiplication into its own PR (#656)

* Split damage multiplication into its own PR

* Found a more elegant implementation of the powers char*[]

* Fixes Maps, Compasses, and Boss Keys in Vanilla. (#751)

* .xiF slebaL

* Update Keese labels

* Fixed soundfont issues

* Skip warp song cutscenes in rando (#664)

Does it by skipping to the last part of the cutscene data. Tested on all songs, both adult and child.

* don't spawn blocking mido after we've already shown him the sword/shield (#675)

Co-authored-by: briaguya <briaguya@alice>

* Controller Configuration UI and JSON Config (#760)

* Initial controller hud ui

* Reverted fbdemo changes

* Moved config to json and implemented controller config

* fix build on linux, gitignore new config file

* fix build

* Fix compilation and file directory paths

* Call save on cvar save

* Fixed cvar loading and added deck slots to the config

* Changed control deck port 0 to use a physical device by default

* Added gyro and rumble & fixed loading errors

* Save config on toggle menubar

* fix linux build

* Fixed drift calculation

* Controller config now saves when pressing F1

* Removed ExitGame hook from ImGuiImpl

* Moved mappings to a map

* Added GetKeyName

* untranslate scancodes

* Fixed hud layout on keyboard device

* Fixed keyboard read on hud

* Fixed crash when reloading controllers

* Removed ConfigFile and changed file extension

* Changed Dummy to Disconnected and fixed filters

* Removed function leftover

* Changed ControllerHud to InputEditor

Co-authored-by: briaguya <briaguya@alice>
Co-authored-by: David Chavez <david@dcvz.io>

* Enough! My ship sails in the morning.

* Fixed menubar items position (#763)

* Fixed menubar items position

* Reverted tooltip tab position

* Fixes macOS randomizer functionality with App Directory (#761)

* Fixes macOS randomizer functionality with App Directory

* Fix windows build

* Update soh/soh/Enhancements/randomizer/3drando/rando_main.cpp

* Update soh/soh/Enhancements/randomizer/3drando/spoiler_log.cpp

* Revert band-aid fix

Co-authored-by: Kenix3 <kenixwhisperwind@gmail.com>

* Fix migration cvar deletion path (#765)

* Various controller fixes (#771)

* Fix controller

* Also fix rumble strength being a bool

* Remove ControllerHud.cpp

* Downgrade platform toolset back to previous version

* Fix gyro

* Fix bug that makes binding axes difficult and clear buttons before reading

* Exaggerate gyro display and adjust stick binding threshold

* Initialize drift thresholds

* git subrepo push soh

subrepo:
  subdir:   "soh"
  merged:   "75ccbade8"
upstream:
  origin:   "https://github.com/HarbourMasters/soh.git"
  branch:   "master"
  commit:   "75ccbade8"
git-subrepo:
  version:  "0.4.1"
  origin:   "???"
  commit:   "???"

* One more change from PR review

* Fix some paths

* Fix merge conflict messup

* More merge conflict fixes

* And another conflict fix

* And another fix

* Remove reference to removed build files

* Add full path to switch cmake

Co-authored-by: David Chavez <david@dcvz.io>
Co-authored-by: KiritoDev <36680385+KiritoDv@users.noreply.github.com>
Co-authored-by: Jeffrey Crowell <github@crowell.biz>
Co-authored-by: BountyChocolate123456 <101743444+BountyChocolate123456@users.noreply.github.com>
Co-authored-by: sholdee <102821812+sholdee@users.noreply.github.com>
Co-authored-by: briaguya <briaguya@alice>
Co-authored-by: rozlette <Rozelette@users.noreply.github.com>
Co-authored-by: PurpleHato <linkvssangoku.jr@gmail.com>
Co-authored-by: Christopher Leggett <chris@leggett.dev>
Co-authored-by: Kenix3 <kenixwhisperwind@gmail.com>
Co-authored-by: vaguerant <vaguerant@users.noreply.github.com>
Co-authored-by: earthcrafterman <banddstudios@gmail.com>
Co-authored-by: louist103 <35883445+louist103@users.noreply.github.com>
Co-authored-by: briaguya <70942617+briaguya-ai@users.noreply.github.com>
Co-authored-by: qurious-pixel <62252937+qurious-pixel@users.noreply.github.com>
Co-authored-by: Baoulettes <perlouzerie@hotmail.fr>
Co-authored-by: Sirius902 <10891979+Sirius902@users.noreply.github.com>
Co-authored-by: modestposer <modestposer@gmail.com>
Co-authored-by: Ada <60364512+GreatArgorath@users.noreply.github.com>
Co-authored-by: Stormghetti <56653191+Stormghetti@users.noreply.github.com>
Co-authored-by: Sirius902 <3645979-Sirius902@users.noreply.gitlab.com>
Co-authored-by: MelonSpeedruns <melonspeedruns@outlook.com>
Co-authored-by: aMannus <mannusmenting@gmail.com>
Co-authored-by: Dog <5172592+Dog@users.noreply.github.com>
Co-authored-by: Nicholas Estelami <NEstelami@users.noreply.github.com>
Co-authored-by: ChristopherJTrent <ChristopherJTrent@outlook.com>
Co-authored-by: agamache <aaroncgamache@gmail.com>
Co-authored-by: M4xw <m4x@m4xw.net>

* Fixed switch compilation

* Fixed responsive on switch imgui

* Remove config save hook

* Added physical slots into controller name

* Add `ifdef` for switch specific code

* Add `ifdef` for switch specific code

* Added applet mode detection

* Replaced homebrew icon

* Fixed randomness on applet mode view

* Fixed clkrst initialization

* Switch profiles cleanup

* Cleaned code based on dcvz comments

* Remove unused hooks in Mercury

* Fixed compilation

* Use IMGUI_IMPL_OPENGL_LOADER_CUSTOM

* Fix up StormLib modifications

* Handle touch events at ImGui/SDL level

* Enable opening menu with -

* Load Nintendo Switch font

* Updates to window initiation

* Handle virtual keyboard via SDL

* Print OTR missing message to screen

* Rename makefile for Switch

* Some more additional fixes

* Branch creation plus edit

Changed ItemWidth & made label invisible (else issues)
Added a submit button next to the text field

* Removed set_texture_filter on imgui draw

* Readded nintendo switch font

* Fixed randomizer crash

* Fix issue with strdup windows

* [SWITCH] Update Jenkins file (#9)

* [SWITCH] Update Jenkins file

* [SWITCH] Dockerfile.switch

Can be combined with other Dockerfile

* [SWITCH] Add entrypoint file

* Update Jenkinsfile

* [SWITCH] Dockerfile mtab link 

link `/proc/self/mounts /etc/mtab`

Co-authored-by: David Chavez <david@dcvz.io>

* Cleaned code based on PR comments

* Fixed switch compilation

* Cleaned full texture cache instead of doing it per char

* Randomizer only saves when its not a vanilla save

* Disabled input when menubar is opened

* Removed return from SetupFont

* Cleaned code based on comments

* Cleaned up random texts on switch error screen

* Killed

* Removed debug and changed compilation flags

Co-authored-by: KiritoDv <nohomoboi01@gmail.com>
Co-authored-by: Felipe Guaycuru <guaycuru@gmail.com>
Co-authored-by: David Chavez <david@dcvz.io>
Co-authored-by: Jeffrey Crowell <github@crowell.biz>
Co-authored-by: BountyChocolate123456 <101743444+BountyChocolate123456@users.noreply.github.com>
Co-authored-by: sholdee <102821812+sholdee@users.noreply.github.com>
Co-authored-by: briaguya <briaguya@alice>
Co-authored-by: rozlette <Rozelette@users.noreply.github.com>
Co-authored-by: PurpleHato <linkvssangoku.jr@gmail.com>
Co-authored-by: Christopher Leggett <chris@leggett.dev>
Co-authored-by: Kenix3 <kenixwhisperwind@gmail.com>
Co-authored-by: vaguerant <vaguerant@users.noreply.github.com>
Co-authored-by: earthcrafterman <banddstudios@gmail.com>
Co-authored-by: louist103 <35883445+louist103@users.noreply.github.com>
Co-authored-by: briaguya <70942617+briaguya-ai@users.noreply.github.com>
Co-authored-by: qurious-pixel <62252937+qurious-pixel@users.noreply.github.com>
Co-authored-by: Baoulettes <perlouzerie@hotmail.fr>
Co-authored-by: Sirius902 <10891979+Sirius902@users.noreply.github.com>
Co-authored-by: modestposer <modestposer@gmail.com>
Co-authored-by: Ada <60364512+GreatArgorath@users.noreply.github.com>
Co-authored-by: Stormghetti <56653191+Stormghetti@users.noreply.github.com>
Co-authored-by: Sirius902 <3645979-Sirius902@users.noreply.gitlab.com>
Co-authored-by: MelonSpeedruns <melonspeedruns@outlook.com>
Co-authored-by: aMannus <mannusmenting@gmail.com>
Co-authored-by: Dog <5172592+Dog@users.noreply.github.com>
Co-authored-by: Nicholas Estelami <NEstelami@users.noreply.github.com>
Co-authored-by: ChristopherJTrent <ChristopherJTrent@outlook.com>
Co-authored-by: agamache <aaroncgamache@gmail.com>
Co-authored-by: M4xw <m4x@m4xw.net>
2022-07-25 21:11:53 -04:00
Kenix3 3fc783b832 Merge branch 'develop-zhora' of https://github.com/HarbourMasters/Shipwright into develop-zhora 2022-07-25 19:10:34 -04:00
Jeffrey Crowell c36b891d9b add pkgconfig to the list of dependencies for mac (#923)
* add pkgconfig to the list of dependencies for mac

lots of people are trying to build and they don't have pkg-config in
their paths. hopefully this removes some confusion.

* add cmake to mac deps
2022-07-25 19:07:35 -04:00
Nickelbawker fb64a11d38 Update README.md (#882)
Just trying to prevent people asking what version and where to get the game. I got 2 other copies before finding the right one & I agree with the attitude of some of the people on discord it's not that much effort it didn't take me all that long to do I still think that this will save the world and people helping the project some times not to mention bans.
2022-07-25 19:07:35 -04:00
PurpleHato 26a4622982 ADD: Rando particles on NUTS and STICK Upgrade (#907)
* ADD: Rando particles on NUTS and STICK Upgrade

(Completely forgot they were a thing...)

* TWEAK:  spacing comment
2022-07-25 19:07:35 -04:00
TheLegendOfLame 257cd92208 Adds new features to the Equipment menu Link (#806)
* All features are for the equipment menu:
Added ability to use the right stick for rotate Link enhancement.
Added ability to have analog control on rotating Link.
Added ability to zoom into Link with right stick.
Added ability to have Link do random animations Idle only.

* Added RotationSpeed as a multiplier rather than a hardcoded 2.5
    -Allows for more custom control
    -Also gives purpose for the slider to still be present w/ RStick

* Specifically for the RStick, divided RotationSpeed by 150
    -Even at RotationSpeed 1 it was way too fast

* Added logic to play animations based on what Link has equipped & his age
 - If has sword and shield, all animations
    - Unless he's a kid with the Hylian shield equipped
 - If has sword no shield, all anims but shield anim
 - If has shield no sword, all anims but sword anim
    - Unless he's a kid with the Hylian shield equipped
 - If he has no sword or shield equipped no sword or shield anims

* Casted RotationSpeed to float for RStick and divded by 600.0f
    - Did this instead of dividing by 150, as at RotationSpeed of 20
        the rotation was so fast it was almost nauseating.
        I noticed at RotationSpeed of 5, it was still very quick.
        Logically, another division of 4 was necessary.

* Changed the spacing
2022-07-25 19:07:34 -04:00
Josh Bodner 2d9129084e Add an option to always win the Goron spinning pot jackpot (#913) 2022-07-25 19:07:34 -04:00
lilDavid d6ce37ce7e Add option to allow the ocarina to be played faster (#903)
* Add the ability to play the ocarina really fast like in MM3D

* Clean up CVar condition

* Rename Unlimited Ocarina Speed to Prevent Dropped Ocarina Inputs
2022-07-25 19:07:33 -04:00
GaryOderNichts 6da8ffae11 Controller: zero-initialize wCam values (#902) 2022-07-25 19:07:33 -04:00
vaguerant 62f56a4791 Bug fix: Water Temple gate & bootcommands.c cleanup (#618)
* Vanilla bug fix: child Water Temple gate

* Clean up bootcommands.c
2022-07-25 19:07:32 -04:00
vaguerant 294684213a Timer Savers: Mask Select in Inventory (#670)
* Timer Savers: Mask Select in Inventory

* Merge derp

* Implement suggestions per @briaguya-ai

* Fix cut & paste derp
2022-07-25 19:06:06 -04:00
vaguerant ab691e64db L-button cheats disable minimap toggle (#514)
* L-button cheats disable minimap toggle

* Add debug mode to exclusion list

per @briaguya-ai
2022-07-25 19:06:06 -04:00
earthcrafterman 3a9dd95abc Added a time saver option to allow players to instantly put items away (#600)
* Added a time saver option to allow players to instantly put items away

Expanded the range of damage multiplication to 80 (20 hearts of damage for each quarter heart) so players can play a sudden death challenge

* The damage sliders are now comboboxes
Damage multiplication is now exponential instead of incremental

The FPS slider is now a text input

* Splitting into solely being a quick putaway PR

* Removed some leftover code from the split
2022-07-25 19:06:06 -04:00
David Chavez 706e57dd7b Adds Xcode project (#769)
* Add Xcode project

Add dynamic lib paths

Generate resources scripts

Fix after rebase

tweak targets

Set min deployment target

* remove project

* readd project with correct gitignore
2022-07-25 19:06:06 -04:00
KiritoDev d180b8a299 Added 'Auto' controller backend (#850) 2022-07-25 19:06:05 -04:00
Baoulettes 50bc5de2da Cosmetics editor - Feature requested (#841)
* Precise positionning, reset margin and pos

* Fix big hearts issues

* add + and - to the editor

* add const to the char*

* Fix labels issues
2022-07-25 19:06:05 -04:00
lilDavid 4a15e113f7 Add fixes for power crouch stab to the Enhancements menu (#874)
* Add optional fixes for power crouch stab

* Add line break in "Fix Megaton Hammer" tooltip

Co-authored-by: PurpleHato <linkvssangoku.jr@gmail.com>

Co-authored-by: PurpleHato <linkvssangoku.jr@gmail.com>
2022-07-25 19:06:05 -04:00
vaguerant 1160fb2b15 Controller option: Navi on L (#861) 2022-07-25 19:06:05 -04:00
Christopher Leggett 27b3644335 Fixes naming discrepancy of textbox positions. (#854)
Equivalent to https://github.com/zeldaret/oot/pull/1329
2022-07-25 19:06:05 -04:00
Jeffrey Crowell b6af684583 allow roms with spaces to be extracted (#868)
using subprocess instead of os.system() is a little safer, and allows
for roms with spaces to be extraced.

i've noticed this is somewhat common in people reporting issues on
discord.
2022-07-25 19:06:05 -04:00
Jeffrey Crowell 1ca64b1fdf add pkgconfig to the list of dependencies for mac (#923)
* add pkgconfig to the list of dependencies for mac

lots of people are trying to build and they don't have pkg-config in
their paths. hopefully this removes some confusion.

* add cmake to mac deps
2022-07-25 18:55:41 -04:00
Nickelbawker 3c1d28b081 Update README.md (#882)
Just trying to prevent people asking what version and where to get the game. I got 2 other copies before finding the right one & I agree with the attitude of some of the people on discord it's not that much effort it didn't take me all that long to do I still think that this will save the world and people helping the project some times not to mention bans.
2022-07-25 18:45:21 -04:00
PurpleHato 5d0452d1dc ADD: Rando particles on NUTS and STICK Upgrade (#907)
* ADD: Rando particles on NUTS and STICK Upgrade

(Completely forgot they were a thing...)

* TWEAK:  spacing comment
2022-07-25 18:44:38 -04:00
Christopher Leggett 87ed5fedfd Fixes Goron Wakeup animations (#897)
* Fixes Goron Wakeup animations

* Cleanup of some unneeded code.

* Fixes comment spacing
2022-07-25 18:30:40 -04:00
TheLegendOfLame d05295aad2 Adds new features to the Equipment menu Link (#806)
* All features are for the equipment menu:
Added ability to use the right stick for rotate Link enhancement.
Added ability to have analog control on rotating Link.
Added ability to zoom into Link with right stick.
Added ability to have Link do random animations Idle only.

* Added RotationSpeed as a multiplier rather than a hardcoded 2.5
    -Allows for more custom control
    -Also gives purpose for the slider to still be present w/ RStick

* Specifically for the RStick, divided RotationSpeed by 150
    -Even at RotationSpeed 1 it was way too fast

* Added logic to play animations based on what Link has equipped & his age
 - If has sword and shield, all animations
    - Unless he's a kid with the Hylian shield equipped
 - If has sword no shield, all anims but shield anim
 - If has shield no sword, all anims but sword anim
    - Unless he's a kid with the Hylian shield equipped
 - If he has no sword or shield equipped no sword or shield anims

* Casted RotationSpeed to float for RStick and divded by 600.0f
    - Did this instead of dividing by 150, as at RotationSpeed of 20
        the rotation was so fast it was almost nauseating.
        I noticed at RotationSpeed of 5, it was still very quick.
        Logically, another division of 4 was necessary.

* Changed the spacing
2022-07-25 12:36:06 +02:00
Christopher Leggett 9f2eb46663 Takes Ganondor's text & hint from CustomMessageTable 2022-07-24 19:43:11 -04:00
Christopher Leggett c1155bb08c Cleans up unused z_message_PAL code. 2022-07-24 19:35:24 -04:00
Christopher Leggett 661946b4f5 Pulls altar text from CustomMessageTable instead of gSaveContext. 2022-07-24 19:34:12 -04:00
Christopher Leggett 780e9f4669 Fixes storage of altar and ganon hints/text.
Only one language is stored in gSaveContext at the moment so store the one language in all 3 CustomMessageEntry languages.
2022-07-24 19:23:54 -04:00
Christopher Leggett a33c3d606a Fixes minor oversight from previous commit. 2022-07-24 18:54:05 -04:00
Christopher Leggett a21998c489 Does some refactoring of rando custom message registration
The goal was less verbosity when adding new get-item messages later.
2022-07-24 18:47:55 -04:00
Christopher Leggett dca922ade8 Merge branch 'develop-zhora' of https://github.com/HarbourMasters/Shipwright into custom-messages 2022-07-24 18:08:10 -04:00
Andrew Van Caem 5f6d0939bd Apply AA and resolution scale settings at startup (#911) 2022-07-24 22:01:28 +02:00
Josh Bodner ffb3523cb5 Add an option to always win the Goron spinning pot jackpot (#913) 2022-07-24 22:00:54 +02:00
Revo 01347dc9f9 Move Skulltula Debug functionality to its own checkbox option. (#912) 2022-07-24 18:12:34 +02:00
lilDavid 62d9390c9b Add option to allow the ocarina to be played faster (#903)
* Add the ability to play the ocarina really fast like in MM3D

* Clean up CVar condition

* Rename Unlimited Ocarina Speed to Prevent Dropped Ocarina Inputs
2022-07-24 09:48:06 -04:00
GaryOderNichts 44bdfe552c Fix height value for OptionsMenuSettings (#900) 2022-07-24 09:38:02 -04:00
GaryOderNichts d3c2c0ec7d Controller: zero-initialize wCam values (#902) 2022-07-24 09:37:17 -04:00
GaryOderNichts bd787719b8 Initialize staticSegment in Title_Init to NULL (#899) 2022-07-24 09:36:36 -04:00
Baoulettes d4bd953c0b Fix purple rupee issue (#895)
* moved few break to fix purple rupee issue

* fix breaks
2022-07-24 09:23:32 -04:00
briaguya 474eee5d98 set morpha reset function in initvars (#881)
Co-authored-by: briaguya <briaguya@alice>
2022-07-24 09:21:38 -04:00
vaguerant 38ecb6cfff Bug fix: Water Temple gate & bootcommands.c cleanup (#618)
* Vanilla bug fix: child Water Temple gate

* Clean up bootcommands.c
2022-07-24 09:15:33 -04:00
vaguerant ccf1bffd4f Timer Savers: Mask Select in Inventory (#670)
* Timer Savers: Mask Select in Inventory

* Merge derp

* Implement suggestions per @briaguya-ai

* Fix cut & paste derp
2022-07-24 09:14:36 -04:00
vaguerant 1de5b72802 L-button cheats disable minimap toggle (#514)
* L-button cheats disable minimap toggle

* Add debug mode to exclusion list

per @briaguya-ai
2022-07-24 09:13:43 -04:00
sholdee bd95fe616b Disable concurrent builds (#885) 2022-07-22 09:13:38 +02:00
David Chavez d299284751 Merge pull request #878 from dcvz/develop-zhora-merge
Rachael -> Zhora
2022-07-22 03:01:16 +02:00
David Chavez b3d3148383 Merge branch 'develop-rachael' into develop-zhora 2022-07-22 02:34:55 +02:00
earthcrafterman 2ad78887b9 Added a time saver option to allow players to instantly put items away (#600)
* Added a time saver option to allow players to instantly put items away

Expanded the range of damage multiplication to 80 (20 hearts of damage for each quarter heart) so players can play a sudden death challenge

* The damage sliders are now comboboxes
Damage multiplication is now exponential instead of incremental

The FPS slider is now a text input

* Splitting into solely being a quick putaway PR

* Removed some leftover code from the split
2022-07-22 02:31:49 +02:00
David Chavez 1ca12feaed Adds Xcode project (#769)
* Add Xcode project

Add dynamic lib paths

Generate resources scripts

Fix after rebase

tweak targets

Set min deployment target

* remove project

* readd project with correct gitignore
2022-07-21 20:15:45 -04:00
briaguya 84236e7ac3 stop floor under shadow statue opening immediately (#857)
* stop floor under shadow statue opening immediately

* use ActorResetFunc to reset sStatueRotY

Co-authored-by: briaguya <briaguya@alice>
2022-07-22 02:11:13 +02:00
KiritoDev 1cbaa592d0 Added 'Auto' controller backend (#850) 2022-07-22 01:36:28 +02:00
Baoulettes df756b2ce0 Cosmetics editor - Feature requested (#841)
* Precise positionning, reset margin and pos

* Fix big hearts issues

* add + and - to the editor

* add const to the char*

* Fix labels issues
2022-07-22 01:33:39 +02:00
lilDavid c7c16c39b0 Add fixes for power crouch stab to the Enhancements menu (#874)
* Add optional fixes for power crouch stab

* Add line break in "Fix Megaton Hammer" tooltip

Co-authored-by: PurpleHato <linkvssangoku.jr@gmail.com>

Co-authored-by: PurpleHato <linkvssangoku.jr@gmail.com>
2022-07-22 01:22:09 +02:00
vaguerant 059045481c Controller option: Navi on L (#861) 2022-07-22 01:21:18 +02:00
Christopher Leggett 44dbd3a8a9 Fixes naming discrepancy of textbox positions. (#854)
Equivalent to https://github.com/zeldaret/oot/pull/1329
2022-07-22 01:13:04 +02:00
Jeffrey Crowell 753031df17 allow roms with spaces to be extracted (#868)
using subprocess instead of os.system() is a little safer, and allows
for roms with spaces to be extraced.

i've noticed this is somewhat common in people reporting issues on
discord.
2022-07-22 01:12:43 +02:00
Sarge-117 52f22275e3 Fix Giant's Knife unexpected behaviours (#834)
* Giant's Knife Behaviour Fixes

Fixes a case where Giant's Knife (specifically, breaking and re-buying it) can behave unexpectedly if you don't have a Kokiri Sword in your inventory.  Also fixes the broken icon not showing up in inventory after you break it.

* less whitespace

* fix 0xE check

Accidentally committed with the wrong check

* Move the grayscale code up

Moved the grayscaling portion up higher in the function and renamed "bool not_acquired" to "bool age_restricted".  Thanks to @vaguerant for the suggestion!
2022-07-22 00:39:04 +02:00
Baoulettes c19beca980 Fast Save Loader crashes fixes (#848) 2022-07-22 00:36:46 +02:00
briaguya eb49053e73 Prevent unrestricted items camera crash (#852) 2022-07-22 00:35:30 +02:00
RaelCappra d08b1d277e Savestate crash fix on Ubuntu (#843) 2022-07-22 00:34:35 +02:00
RaelCappra e41873fff4 Savestate crash fix on Ubuntu (#843) 2022-07-22 00:34:04 +02:00
briaguya dfa929a16f Reset var for shadow boss key room spike walls (#860) 2022-07-22 00:31:26 +02:00
Christopher Leggett 880e3928cf Fixes odd rando interaction with malon after receiving her check. (#867) 2022-07-22 00:28:43 +02:00
Jeffrey Crowell 41d1bbe137 Fix nullptr dereference in morpha (#870)
reported on discord, i don't have the ability to reproduce this, but it
appears to be a benign fix, as the only time that the tent2 is checked
down later is guarded by a null check.
2022-07-22 00:27:44 +02:00
David Chavez e519caa554 Merge pull request #871 from jbodner09/fix-zelda-skip
Fix Child Zelda Skip rando setting always on
2022-07-22 00:23:53 +02:00
Josh Bodner 1d208c7dc2 Revert to using boolean in json 2022-07-21 11:04:37 -07:00
Josh Bodner 2edc81ee2d Attempt to restore formatting of randomizer.cpp 2022-07-21 11:03:28 -07:00
Christopher Leggett 21c585b2ce Removes randomizer_custom_messages, as I relocated its logic elsewhere. 2022-07-21 13:10:04 -04:00
Christopher Leggett b5dc097587 Cleanup and move most hint logic to CustomMessage.
Haven't removed where rando stores the hints for itself and the ganon and altar hints are still pulled from the randomizer class' local storage, but gossip stone hints are pulled from the custom message table now.
2022-07-21 13:05:15 -04:00
Josh Bodner cddca2700a Move Child Zelda spoiler write out of for loop so it's not repeatedly hit 2022-07-20 23:08:57 -07:00
Josh Bodner 17b3f65276 Fix the issue for real 2022-07-20 22:57:18 -07:00
Josh Bodner 75a4d2cf99 Actually use the same strings everywhere lol 2022-07-20 21:50:55 -07:00
Josh Bodner 795ee54f2b Remove use of std::format since Jenkins doesn't like it 2022-07-20 21:44:32 -07:00
Josh Bodner 3633bdeeaf Fix Child Zelda Skip rando setting always on 2022-07-20 19:57:38 -07:00
Christopher Leggett c5f66373c3 Adds ability to store and retrieve textbox size and position. 2022-07-19 22:51:39 -04:00
Christopher Leggett 2d1aa1d13a Merge in develop-zhora 2022-07-19 20:28:21 -04:00
Christopher Leggett 32abe61554 Implements a basic CreateMessage function for non-GetItem text. 2022-07-19 00:31:37 -04:00
PurpleHato 235cef6abf FIX: RetrictItem SunSong issue (#839)
Thanks @vaguerant
2022-07-18 22:47:37 -04:00
MelonSpeedruns e871b53afc Free cam collision v2 (#836) 2022-07-18 22:47:23 -04:00
qurious-pixel dabb83fccf [APPIMAGE] Use GUI dialog boxes (#829)
* [APPIMAGE] Use GUI dialog boxes

* [APPIMAGE] Adjust timing
2022-07-18 19:34:08 -04:00
GaryOderNichts 046b7e8949 Include game version in linux otr builds (#826) 2022-07-18 19:33:36 -04:00
GaryOderNichts 97d1f0e46c Fix ZAPDTR linking order for linux builds (#825)
* Fix ZAPDTR linking order for linux builds

* Fix linking on macos
2022-07-18 19:32:15 -04:00
Andrew Van Caem edfa369639 Add yShift position when displaying the positions of cylinders (#823) 2022-07-18 19:31:52 -04:00
Christopher Leggett 169f757954 Fixes ice trap chests to have short chest animations (#817) 2022-07-18 19:31:04 -04:00
David Chavez 4745f73655 [macOS] Bring support down to macOS 10.15 (#816)
* Pull out CC and CXX flags

* Set minimum deployment target

* Update version to 3.0.0
2022-07-18 19:30:29 -04:00
GaryOderNichts 660897ff63 Avoid UB on ocarinaAction shifts (#809) 2022-07-18 19:29:24 -04:00
David Chavez 37afdbd84c Fix: Respect Config Window Resolution (#807)
* Fix regression witn using config window res

* Fix fullscreen presets
2022-07-18 19:28:12 -04:00
Baoulettes 9679075cba - + button optionnal for Int and float sliders (#803) 2022-07-18 19:26:01 -04:00
Josh Bodner 5e5e57ea8f Add Windows x64 build instruction (#800) 2022-07-18 19:25:11 -04:00
PurpleHato 9118788149 ADD: SaveEditor Edit current D-Pad Item (#799)
* ADD: Dapd on "current Dpad equip

* TWEAK: Spelling

* TWEAK: Shows it only if gDpadEquips is enable

* TWEAK: Forgot one "D-pad"

* TWEAK: Spacing
2022-07-18 19:24:56 -04:00
Ada cc28a1444d Update README.md (#796) 2022-07-18 19:24:20 -04:00
Ada c65a40f432 Adds tooltip to free camera (#795) 2022-07-18 19:23:28 -04:00
briaguya 9e8335c1f0 fix non-rando non-3d-drops small key crash (#789)
Co-authored-by: briaguya <briaguya@alice>
2022-07-18 19:22:12 -04:00
qurious-pixel 10cb23ad74 [APPIMAGE] LibFuse removal fix (#780)
* [APPIMAGE] LibFuse removal fix

* [APPIMAGE] LibFuse 2 fix

Keep Original App name
2022-07-18 19:21:47 -04:00
KiritoDev 2daddd8a5a Added renderer api switch dropdown (#775)
* Added renderer api switch

* Joined backend api and names into a pair

* Added close button on input editor
2022-07-18 19:21:31 -04:00
briaguya d45968270a Address rando pr comments (#742)
* prefix randomizer methods with Randomizer_

* make filename a local var

* remove unused file, update malon to use new names

* move randomizertypes to randomizer directory

* rename to Randomizer_GetSettingValue

Co-authored-by: briaguya <briaguya@alice>
2022-07-18 19:20:07 -04:00
Christopher Leggett e04b2c80b6 Implements the custom text for gInjectSkulltulaCount.
Also auto-dissmisses the textbox when gSkulltulaFreeze is on. When gInjectSkulltulaCount is off, text is not auto-dismissed just like before, since that is base game text still.
2022-07-17 22:02:22 -04:00
Christopher Leggett 1ed45e1433 Implements adding message tables and retrieving by an ID.
Basically, some external code can choos a unique id and create a message table for itself. The idea is that modders can hook into this as well so they can get their own message table and don't have to worry about conflicting with the base game's textIDs. I have also implemented this setup for Randomizer so that the pre-filled bottles (which didn't exist in the original outside of Ruto's letter) have unique text as compared to the text for the item they are filled with.
2022-07-17 21:03:32 -04:00
Christopher Leggett ee1270f346 more cleanup 2022-07-17 15:29:02 -04:00
Christopher Leggett 98c771cf2c Simplifies the function signature of CustomMessage_RetrieveIfExists. 2022-07-17 15:11:16 -04:00
Christopher Leggett 69d2b5b3a3 Implements function to return custom message if one exists.
`CustomMessage_RetrieveIfExists` is placed at the very beginning of the z_message_PAL.c `Message_OpenText` if statement after any special changes to textIds are made. This function will either return either true or false and if true it will populate the necessary values of font and msgCtx to display said message. It's placement at the beginning also allows for overriding existing textIds to have new information, which will come in handy later.
2022-07-17 15:02:08 -04:00
Christopher Leggett f57a912ca1 Does some cleanup of unecessary code and cases of no string provided. 2022-07-17 13:31:38 -04:00
Christopher Leggett 4eaf70b859 Refactors CustomMessages to not be rando specific.
Pulls the Custom Message related code out into it's own class, which has an initialization phase where other enhancements / future features can create messages during an initialization phase to be stored and retrieved later. Along with this refactoring, the 4 bottle messages from the previous rando-specific system are now created and stored during intialization and retrieved by their getItemId.

Now that it isn't rando specific, the goal is to move anything text changes that are hard-coded into z_message_PAL.c and refactor it so that future text additions/overrides can be done without modifying that file.
2022-07-17 12:34:56 -04:00
Christopher Leggett 3f2111a3e6 Adds text for Bottle with Blue Fire as a demo. 2022-07-15 19:48:49 -04:00
Christopher Leggett 1165e70434 Merge branch 'develop' of https://github.com/HarbourMasters/Shipwright into rando-custom-messages 2022-07-15 19:18:45 -04:00
M4xw 93bea4c151 git subrepo push soh
subrepo:
  subdir:   "soh"
  merged:   "75ccbade8"
upstream:
  origin:   "https://github.com/HarbourMasters/soh.git"
  branch:   "master"
  commit:   "75ccbade8"
git-subrepo:
  version:  "0.4.1"
  origin:   "???"
  commit:   "???"
2022-07-14 20:47:48 -04:00
Christopher Leggett 46df17e29f Added an extra helper function and removed instant text control code from ITEM_OBTAINED 2022-07-14 11:17:43 -04:00
Christopher Leggett 9c57ed6642 Merge branch 'develop' of https://github.com/HarbourMasters/Shipwright into rando-custom-messages 2022-07-14 10:06:05 -04:00
Sirius902 8417db65c7 Various controller fixes (#771)
* Fix controller

* Also fix rumble strength being a bool

* Remove ControllerHud.cpp

* Downgrade platform toolset back to previous version

* Fix gyro

* Fix bug that makes binding axes difficult and clear buttons before reading

* Exaggerate gyro display and adjust stick binding threshold

* Initialize drift thresholds
2022-07-14 09:05:36 -04:00
Kenix3 16f52c03b9 Merge branch 'develop' of https://github.com/HarbourMasters/Shipwright into develop 2022-07-14 01:35:52 -04:00
David Chavez 1ed58c4a99 Fix migration cvar deletion path (#765) 2022-07-14 01:19:40 -04:00
Christopher Leggett cd096ce5e9 Fixes newline function to return correct character. 2022-07-14 00:56:47 -04:00
agamache 06338d864f Fixes macOS randomizer functionality with App Directory (#761)
* Fixes macOS randomizer functionality with App Directory

* Fix windows build

* Update soh/soh/Enhancements/randomizer/3drando/rando_main.cpp

* Update soh/soh/Enhancements/randomizer/3drando/spoiler_log.cpp

* Revert band-aid fix

Co-authored-by: Kenix3 <kenixwhisperwind@gmail.com>
2022-07-14 00:56:29 -04:00
Christopher Leggett 873995199b Merge branch 'develop' of https://github.com/HarbourMasters/Shipwright into rando-custom-messages 2022-07-14 00:56:17 -04:00
KiritoDev b2b7cf2374 Fixed menubar items position (#763)
* Fixed menubar items position

* Reverted tooltip tab position
2022-07-14 00:42:15 -04:00
Christopher Leggett 0ae5c4c0f2 Merge branch 'develop' of https://github.com/HarbourMasters/Shipwright into rando-custom-messages 2022-07-14 00:42:00 -04:00
Christopher Leggett a81ecfcfcc Renames the separated custom messages files to prevent conflict. 2022-07-14 00:41:04 -04:00
Kenix3 31511af130 Enough! My ship sails in the morning. 2022-07-13 23:41:22 -04:00
Christopher Leggett d9277530a2 Refactors custom message code to its own file 2022-07-13 23:35:45 -04:00
KiritoDev 219804cbe4 Controller Configuration UI and JSON Config (#760)
* Initial controller hud ui

* Reverted fbdemo changes

* Moved config to json and implemented controller config

* fix build on linux, gitignore new config file

* fix build

* Fix compilation and file directory paths

* Call save on cvar save

* Fixed cvar loading and added deck slots to the config

* Changed control deck port 0 to use a physical device by default

* Added gyro and rumble & fixed loading errors

* Save config on toggle menubar

* fix linux build

* Fixed drift calculation

* Controller config now saves when pressing F1

* Removed ExitGame hook from ImGuiImpl

* Moved mappings to a map

* Added GetKeyName

* untranslate scancodes

* Fixed hud layout on keyboard device

* Fixed keyboard read on hud

* Fixed crash when reloading controllers

* Removed ConfigFile and changed file extension

* Changed Dummy to Disconnected and fixed filters

* Removed function leftover

* Changed ControllerHud to InputEditor

Co-authored-by: briaguya <briaguya@alice>
Co-authored-by: David Chavez <david@dcvz.io>
2022-07-13 23:12:11 -04:00
briaguya cb6876792e don't spawn blocking mido after we've already shown him the sword/shield (#675)
Co-authored-by: briaguya <briaguya@alice>
2022-07-13 22:04:48 -04:00
aMannus f7db8868d0 Skip warp song cutscenes in rando (#664)
Does it by skipping to the last part of the cutscene data. Tested on all songs, both adult and child.
2022-07-13 22:04:19 -04:00
Nicholas Estelami 379649bead Fixed soundfont issues 2022-07-13 21:36:19 -04:00
Christopher Leggett 14a87f83b3 Makes sure custom get item textboxes match.
Specifically, they are all bottom of the screen and blue.
2022-07-13 21:24:20 -04:00
Christopher Leggett e9ba8f734f Early version of custom messages. 2022-07-13 20:35:42 -04:00
ChristopherJTrent 248f49b3bf Update Keese labels 2022-07-13 19:39:44 -04:00
Baoulettes 2b72b10356 .xiF slebaL 2022-07-13 19:39:25 -04:00
Christopher Leggett 7c6d8a6b9c Fixes Maps, Compasses, and Boss Keys in Vanilla. (#751) 2022-07-13 19:38:25 -04:00
earthcrafterman 4d65a5ff73 Split damage multiplication into its own PR (#656)
* Split damage multiplication into its own PR

* Found a more elegant implementation of the powers char*[]
2022-07-13 00:24:05 -04:00
Baoulettes cff73cccf0 fix hidden wnd (#744) 2022-07-13 00:23:22 -04:00
David Chavez 7b04f67884 Introduce App Directory Path (#572)
* Introduce app directory path concept

* macos: Remove hacky way of using applicaiton directory

* Update the new SaveManager

* Address stack user after return

* Remove unecessary property

* Use std::string for filepath

* Improve clang specific detections

* Use new path system for imgui files

* Improve helper for getting relative paths
2022-07-13 00:19:07 -04:00
vaguerant 97ad234c8c Hide debug overlay behind gDebugEnabled (#660) 2022-07-12 23:58:24 -04:00
aMannus 2159c006fc Rando: GtG and carpenter prompts skip (#663)
* Skip gtg and carpenter prompt

For rando. Tested and just works.

* Fixed missing break
2022-07-12 18:57:02 -04:00
aMannus c9fdf8a480 Fix Rando Water Temple Softlock (#665)
We use 3DS logic to generate item placement, but didn't have this specific door in Water Temple unlocked from the beginning like 3DS does.

This meant that if people took specific paths through the temple, they could softlock themselves by missing a key.
2022-07-12 18:55:01 -04:00
Christopher Leggett 3de58774ba Rando: Allows Malon's Item Check to be obtained by pulling out the Ocarina. [FIXED PR] (#672)
* Fixes using the Ocarina to get the check from Malon.

Still some cleanup to do here. For some reason the player can shield before receiving the check. It doesn't set the flag if the player does that so they can still try again, but would prefer a different solution if possible.

* Prevents Shielding from blocking the Item_Give from happening.

* Code Cleanup and comments explaining the new rando flow.

* Removes inventory check when pulling out Ocarina

This allows OI to properly give the check, which is important for Glitched logic later down the line. Talking to Malon still requires the Ocarina in your inventory.

* Prevents non-malon textboxes from triggering the check.

Also adds a comment explaining the condtional for getting the check from talking to Malon since it got pretty long.

* Actually fixes checking for text boxes.

* Relocates a comment for improved clarity.
2022-07-12 18:50:46 -04:00
MelonSpeedruns 66ec623542 Free Camera (#337)
* wip free cam

* Almost done, needs collision still

* Added free cam behind cvar

* added WIP collision

* Fixed & implemented "Manual mode" from WW & TP

* Fixed camera not rotating when Link is moving

* fixed initialized camera rotation

* Fixed camera getting stuck + made it smoother

* reduced deadzone

* fixed epona camera height + added WW z-target free camera

* Adjusted player camera height & fixed fov

* Fixed camera roll

* fixed fov when moving the camera while in z-target

* Camera resets to Auto when going through doors or changing maps

* Fixed building

* touch

* more touch work

* Added WIP mouse support to the free cam

* gui stuff

* fixed building

* fixed building error

* ok fixed building for real this time

* oops

* Fix compilation issues

* removed mouse stuff that magically appeared in this branch

* smoothed out stick values & removed remains of mouse support

* re-added manual camera when pressing Z

* reduced minimum Y position of camera

* Addressed dcsv's nitpicks

* part 2

* oops

Co-authored-by: David Chavez <david@dcvz.io>
2022-07-12 18:40:18 -04:00
Nicholas Estelami 3aa93b9855 Removed legacy audio mode and fixed ganon sound bug (#657) 2022-07-11 22:37:39 -04:00
briaguya eab3b5bd7f add descriptive todo for death crash bandaid (#655)
Co-authored-by: briaguya <briaguya@alice>
2022-07-11 21:58:31 -04:00
Baoulettes 37bf9b36ad Cosmetics hotfixes (#640)
* Initial branch creation

* Revert Main Game so it do not conflict later

* should fix window build, made namespace for Cosmetics

* forgot to edit one title

* Ability to add hidden window (usefull for Rainbow)
Fix building issues

* Line break, unused bool remove
2022-07-11 21:33:48 -04:00
briaguya c25089b98f testing out item replacement (#416)
* skip learning song of storms

* don't set flag when getting goron tunic as child

* Initiates prelude check when master sword unloads.

Not quite how N64 rando does it but so far it's the only way I've found to make it trigger without also triggering the time travel again.

* Stops Shadow Temple lore prompts from appearing in rando.

* Skips cutscene of royal tomb explosion in rando.

Explosion sound doesn't play correctly and I think the debris appears in the wrong place, but the functionality is here.

* Improves visual of exploding gravestone.

* Adds some comments explaining the rando differences

* Skip ruto text box in jabu blue warp

For rando

* skip intro cutscene in dodongo's cavern

* load spoiler files on boot, fix spoilerfile existing check when making new saves

* name entry dropped spoiler logic

* make sure to actually init the cvar

* no chime on load

* uncomment

* Skip ganondrof cutscene

Skip to scream part of the death animation, skipping the text boxes etc. For rando

* Update z_boss_ganondrof.c

* skip owl flight cutscenes in rando

* Fixes skipped text so it only applies to shadow temple.

Earlier fix inadvertently applied to some other text as well, changed logic so that only specified sceneNums and textIds can have this enabled, and text skipped by sceneNum can have the skip overriden by textId if needed. Currently there are no overrides so the textId section of the logic is commented out to avoid compilation errors.

* Adds a default to the switch case statements that leaves the randoSkipText variable unchanged, just in case.

* TEST: Text for item

* Adding ganon flavor text

* ADD: AMMO Count

* format ganon text/hint text

* Autoskip the tower cutscene if settings call for tower collapse.

* ganon hint text logic

* Improved prelude after time travel fix

* swapped the sizes between ganon hint text and ganon text, as they were set to the wrong things.

* this is all i did

* not the cleanest code ever but it's working

* ADD: GS Count

* ADD: Wallter (crash for now)

* TWEAK: Wallet check

* FIX: Use DrawItem instread of DrawUpgrade... b-baka!

* Fixes some vanilla bugs introduced by rando code.

* Added cutscene skip for zelda escaping

Using the debug cutscene skipping function. Also added a conditional so the bridge doesn't spawn closed when cutscene is ready to trigger

* ADD: X Spacing + Placeholders for song

* ADD: default case for items

* TWEAK: Spacing

* FIX: Light Arrow

* ADD: Ammo Option

* use groups instead

* ADD: More spacing logic

* songs and names

* TWEAK: Color on wallet

* colors

* Added flags cutscene before nabooru fight

* ADD: ChromaKey text

* First attempt skip cs after nabooru defeat

* Better implementation for specific rando cutscene skips

* use pulseaudio defaults

* spaces/tabs

* move color push/pop to stop crash

* make the colors work again

* the real bottle fix

* pulseaudio values tuned for n64 audio at 44.1khz

* update tlength

* remove one hardcoded samplerate

* Cleaned up and fixed zelda escape skip

The if statement is a freaking monster, but unless we want to skip more cutscenes in the same way later, this is the most compact way of doing it that I know of.

* Revert one line to match original

nothing functional

* another hint line that breaks autonewline logic

* don't autospawn epona if we don't have the song/ocarina

* Trying to use iron knuckle death effects

not working yet

* Streamlined OoT cutscene skip for future additions

Also cleaned up if statement in general

* Made if statement more readable

Also added clarity for what cutscene was skipped

* Fixed typo in comment

* Janky nabooru defeat cs skip

* altar text formatting (gonna need help shortening some of the french ones)

* more altar text formatting

* english altar text formatting complete

* make gtg blocking guard check for card not bridge

* FIX: Typo!

* FIX: Uppercases

* FIX: Typo

* TWEAK: Alter + some names

* TWEAK: More caps!

* ADD: Missing string

TWEAK more uppercases and namefixe
s

* Hide nabooru death by covering her in flames

* bandaid fix for death crash issue

* Twinrova defeat cs skip

Skips the animation and manually calls the function to show the "beam" around the sisters

* fix crash

* fix caps to match

* fix great fairy reward mashing/shielding issue

* TWEAK : Typo clé to Clé

* TWEAK: Some Altar hints

TWEAK: Some capitals

* TWEAK: Unmatching text + some cap again

* TWEAK: More tweaks

* fix build

* remove extra json.hpp, add hint

* Update randomizer_item_tracker.cpp

* TWEAK: Double Defense with RedParticles instead of white

* make sure we don't optimize out the check to ensure a spoilerfile exists

* vanilla ganon boss key hint formatting

* TWEAK: FR- better way of the hero text

* fix

* and again

* Initializes dungeonsDone items in gSaveContext to 0.

* Replaces sizeof calculation with a NUM_DUNGEONS constant.

* Fixes Saria's Gift on the LW Bridge from getting killed when holding shield.

* More airtight fix for Saria's Gift on the Bridge.

* Lifts one of the conditions in the if statement a little higher to prevent unnecessary lookups of getItemId.

* Invalidate text box icon before drawing

* Fixes the case where Saria's gift is an Ice Trap.

We still get the Ice Trap once, but never again. This does mean you can now hold R while walking in to avoid the ice trap, but everything else seems to work fine.

* Initial commit

Might need changing when we change the settings in the future

* Fixes Door of Time opening cutscene after warping with prelude.

* Initial waterfall skip

Very rudimentary way of doing things but it seems to work so 🤷

* inital rework

* fixed default rotation for 2D sprites

* fix tab/space issues

* 3d drops rando merge fix again

* Allows Impa to appear in the Lullaby check post drawbridge escape.

* Changes Ganon's Trials Count setting to a checkbox

The checkbox is whether or not to skip all of them. Leaving the box unchecked will mean doing all of them. Eventually this will be switched back to a slider once we implement the logic for which trials start out completed.

* Sets all Ganon's Trials to incomplete in new saves.

Fixes https://github.com/briaguya-ai/rando-issue-tracker/issues/131

* fix castle guards when oot throw cutscene has already played in rando

* Properly removes the beams when trials are cleared.

* Removes Question Mark from Skip Ganon's Trials UI.

* Adds a todo comment about when to change back to slider.

* make deku seeds check for bullet bag

* Various tweaks

TWEAK: Altar Text
TWEAK: Hint names
TWEAK: Replace more problematic œ to oe

* upgrade ocarina on both child and adult equips

* FIX: Jabu Item

* update equipped hookshot/longshot when obtained as other age

* add hint

* don't give the bgs check without the claim check

* Skips Darunia Cutscene in Fire Temple

* Added a TODO note about not skipping the cutscene.

There is a setting we will want to have eventually that will require this cutscene to not be skipped since it is used during a glitch.

* remove todo

* restore fast ocarina option in imgui that was lost in merge

* Fixes grey screen issue + tooltip for 2 handed shield

* update to use dg instead of g for textures in item tracker

* TWEAK: Default color for cosmetic RAND button was not the corect one

* fix texture crash, remove unused item tracker code

* don't open mask shop until we get zelda's letter

* Update README.md

* Prevents "correct" chime under incorrect conditions.

* Fixes typo in conditional and adds "bonk" sound effect.

"Bonk" sound is NA_SE_SY_OCARINA_ERROR and it plays when conditions for the Door of Time have not been met after playing Song of Time. This is only possible in rando's "Intended" Door of Time option, in which the Ocarina of Time and all 3 spritual stones are required to open the door, instead of the vanilla requirements of just having the song of time.

* remove modify dpad equips toggle, replace with checks for dpad menu

* remove extra check

* add ability to hold c-up to assign to dpad when dpad menuing is enabled

* disable d-pad navigation on item menu when holding c-up to equip

* dpad+c-up stuff for equipment menu

* ADD: Checbox for songs colors

* TWEAK: RandoColors for normal songs

* kind of quick and dirty but it works

* TWEAK: Clarity of the tooltip

Co-authored-by: briaguya <briaguya@alice>
Co-authored-by: Christopher Leggett <chris@leggett.dev>
Co-authored-by: aMannus <mannusmenting@gmail.com>
Co-authored-by: PurpleHato <linkvssangoku.jr@gmail.com>
Co-authored-by: Dog <5172592+Dog@users.noreply.github.com>
Co-authored-by: Vague Rant <vaguerant@users.noreply.github.com>
Co-authored-by: Baoulettes <perlouzerie@hotmail.fr>
Co-authored-by: Ada <60364512+GreatArgorath@users.noreply.github.com>
2022-07-11 20:11:07 -04:00
MelonSpeedruns 0fd779f002 fixes center docking (#652) 2022-07-11 18:13:01 -04:00
Kenix3 6b50b50a6c Fixes crash on Biggoron trade failure screen wipe
Resolves #621
2022-07-11 00:20:03 -04:00
briaguya c9497060e9 change max internal res multiplier to 3x, use float and % instead of int (#638)
* change max internal res multiplier to 3x, use float and % instead of int

* Update libultraship/libultraship/ImGuiImpl.cpp

Co-authored-by: Kenix3 <kenixwhisperwind@gmail.com>

Co-authored-by: briaguya <briaguya@alice>
Co-authored-by: Kenix3 <kenixwhisperwind@gmail.com>
2022-07-10 22:14:38 -04:00
louist103 a7c94bba8c add the ability to pull graves during the day (#637) 2022-07-10 21:42:35 -04:00
Christopher Leggett 4ccc2bb12f Fixes Barinade's set whenever boss fight is reloaded (#639)
* Reimplements unused Barinade reset function.

* Removes the Jellyfish from Barinade's body on reset.
2022-07-10 21:40:57 -04:00
Sirius902 e3267a4e9b Don't close controller after SDL has quit (#642)
* Don't close controller after SDL has quit

* Don't check if controller can rumble if null
2022-07-10 21:40:00 -04:00
Ada 926fd3f406 Fixes grey screen issue + tooltip for 2 handed shield 2022-07-10 16:07:22 -04:00
Sirius902 e04bc6037e Fix develop 2022-07-10 16:06:52 -04:00
Jeffrey Crowell d4c1c40c1d add support for clang compiler (#592)
* hacks to align strings for clang... wow just wow

* start work to getting built with clang

* fix issues with struct constructors, all builds, doesn't link still

* fix some narrowing issues that clang complains about

* fix compliation of zapd

* fix null deref in VersionInfo

* builds with clang

* make stringbuilding use StringHelper instead of addition

* fix linking

* add CLANG SHIP overlay on clang built versions

* doesn't need to be volatile

* mark unknown strings as extern

* rename some stuff

* can't align extern

* hopefully fix compilation for everythign

* expandtab

* allow setting LD

* Revert "allow setting LD"

This reverts commit 711aba6db2.

maybe to use lld it should be a LDFLAG?

* -Wno-deprecated-declarations is required for newer versions of clang

on macOS 13 beta sdk, the version of apple clang requires this

* Add jenkins support for clang

* Forward CXX flags to stormlib compilation

* Move GCC only flags to check

* use exports to set multiarch setup

* Fix Jenkins forever

* use make instead of cmake --build

add some flags to build with clang-11 as well

* address review coments

- rework extraction to allow multi thread
- misc readability cleanup

* update makefile to add WARN on linux+clang

Co-authored-by: David Chavez <david@dcvz.io>
2022-07-10 10:51:12 -04:00
Sirius902 89e07f8dbb Dodongo's Cavern blue warp crash fix (#622)
* Doodong's Cavern blue warp crash fix

* >= not >

* Don't waste a line of space
2022-07-10 09:30:19 -04:00
Baoulettes d1a2f98524 New drops shadows & rotation fixes (#627)
* fixes

* forgot to add heart pieces in rotation logic
2022-07-09 20:38:59 -04:00
Ada 24856a6e8c ImGui grammer, consistency, and clarity fixes (#625)
* ImGui grammer, consistency, and clarity fixes

Co-Authored-By: Stormghetti <56653191+Stormghetti@users.noreply.github.com>

* Adds more new lines for users on smaller displays

Co-Authored-By: Stormghetti <56653191+Stormghetti@users.noreply.github.com>

Co-authored-by: Stormghetti <56653191+Stormghetti@users.noreply.github.com>
2022-07-09 20:37:38 -04:00
Sirius902 42383a1fe1 Equipment upgrade text fix and any pause slot enhancement fix (#620)
* Fix upgrade name text not rendering

* Use cvar and don't render equip help for empty item slots

* Fix rendering logic

* Fix incorrect item name rendered for one frame

* Reorder comparison

* Remove extra indent

* Remove accidental changes
2022-07-08 23:06:11 -04:00
Sirius902 4371b58223 Fix 0xabababab crash (#617)
* Unconditionally setup the normal skybox

* Only call Skybox_Setup once ever
2022-07-08 17:39:50 -04:00
modestposer ef3dd96eb4 Match case of 'Shipwright' in Linux build (#619) 2022-07-08 17:39:21 -04:00
Sirius902 ee184b5a51 Checkered room crash workaround (#615)
* Increase poly and vertex count for dyna actors

* Add TODO

* Only apply fix in Forest Temple

* Enable globally
2022-07-07 22:21:14 -04:00
vaguerant a1f92d76ab Fix Ganon's Castle title cards (#606) 2022-07-07 22:19:41 -04:00
Baoulettes 60e713855a New drop runtime fix (#614)
* inital rework

* fixed default rotation for 2D sprites

* fix tab/space issues
2022-07-07 22:19:08 -04:00
qurious-pixel 0f34b991aa [APPIMAGE] Set lib path for ZAPD (#611) 2022-07-07 22:18:29 -04:00
vaguerant 1c9195373d Invalidate text box icon before drawing (#607) 2022-07-07 22:18:11 -04:00
Baoulettes c78d2828a7 King dodongo room crash (#613)
* first attempt

* force camera setting to be at least 0 (dirty!)

* -

* reverted something to just include fix
2022-07-07 22:17:57 -04:00
Kenix3 4515fac467 Fixes bug in demo effect due to removed display list set. 2022-07-07 22:17:20 -04:00
Baoulettes 260669f981 Cosmetics texts fixes (#604)
* branch init + few fixes

* Reset button

* Several texts fixes and default color to GameCube

* space issues

* some more extra space that was not needed.

* space yes last time ...

* Arrows being able to be rainbow some more texts fixes

* more texts fixes

* c-buttons some plurial fix
2022-07-06 19:50:59 -04:00
David Chavez 58f3786a35 [macos] Distribute optimized builds (#599) 2022-07-06 18:49:45 -04:00
qurious-pixel 38c7d66788 [BUILD] Do not strip ZAPD (#598)
* [BUILD] Do not strip ZAPD

* [BUILD] Reuse Icon Asset

* [APPIMAGE] Handle paths with spaces
2022-07-06 18:47:08 -04:00
Sirius902 e8bfa61fc2 Add N64 weird frames and OOB Bombchus cvars (#602)
* Add gN64WeirdFrames and gBombchuOOB cvars

* Rename gBombchuOOB to gBombchusOOB

* Fix pipeline
2022-07-06 18:46:01 -04:00
David Chavez 537722d57a Fix portability use of std::clamp (#596) 2022-07-05 23:53:42 -04:00
qurious-pixel a34b2b56fe [CI] AppImage icon file (#597)
* [CI] Add patchelf

* [BUILD] Include Hi-Res icon
2022-07-05 23:08:06 -04:00
qurious-pixel fd0fb25de1 [CI] Create an Appimage for 64bit builds (#570)
* [CI] Create AppImage file

* [CI] Updated Jenkinsfile

* [MISC] fix indentation

* [MISC] Fix indentation

* [MISC] Fix indentation

* [CI] 7z appimage and readme
2022-07-05 21:10:14 -04:00
Baoulettes a2d64864dd Cosmetics menu rework (#589)
* -

* DPad/some margin fix(left side)

* various ImGui stuff and fixes

* disabled kaleido menu (non working)

* fix win being dumb

* same for C btn this time

* Fix windows build

* Beating hearts fix

* Default win size and some placement fix

* Fix Dpad Ammo & C notes, Kaleido, white dog

* some texts fix and tab move

* Add stone of agony, some fixes and build correctly

* precise item place with Dpad

* Gamecube -> GameCube

Co-authored-by: Baoulettes <iMacWin10>
2022-07-05 20:52:01 -04:00
Baoulettes 2fbdd056ed 3D Drops & Projectiles update (#548)
* Fix remaining rupee and keys

* fix tabs -> spaces

* more fix about tabs -> spaces

* Better up <-> down mouvement for hearts

* remove useless comment
2022-07-05 20:46:21 -04:00
briaguya 1ad2931f80 use ini window resolution (#410)
* use ini window resolution

* use arguments for directx window size

* default 640x480 not 320x240

* kick off a build

* and revert

* default config 640x480 not 320x240

* add todo

Co-authored-by: briaguya <briaguya@alice>
2022-07-05 20:02:47 -04:00
earthcrafterman 306cfd0654 Restoration Item Sliders (#595)
* Allows players to set custom restoration values for potions and milk

* Fixed a dumb oversight

* implemented fairy sliders
2022-07-05 19:34:33 -04:00
briaguya 2b99e65d24 update pulseaudio for 44.1khz audio (#587)
* use pulseaudio defaults

* spaces/tabs

* pulseaudio values tuned for n64 audio at 44.1khz

* update tlength

* remove one hardcoded samplerate

Co-authored-by: briaguya <briaguya@alice>
2022-07-05 19:30:30 -04:00
vaguerant 0b7137b8b0 Cheat: Infinite Epona Boost (#577)
* Cheat: Infinite Epona Boost

* Edit for readability
2022-07-05 19:30:17 -04:00
David Chavez c5e84c17a5 Use unordered maps in some hot paths (#566)
* Use unordered maps in some hot paths

* Address PR comments
2022-07-05 19:29:57 -04:00
vaguerant f865db5444 MM Bunny Hood enhancements: no age restrictions & wear across entrances (#560)
* Remove age restriction on MM Bunny Hood

* Handle mask slot changing; init Link wearing mask

* Reset mask state after selling
2022-07-05 19:29:43 -04:00
Baoulettes a5df9dddf0 Use Macro for __FILE__ & __LINE__ when possible (#559)
* First batch some overlay

* Almost all overlay

* effect & gamestate

* kaleido stuffs

* more overlay

* more left over from code folder

* remaining hardcoded line and file

* Open & Close _DISP __FILE__ & __LINE__ clean up

* Some if (1) {} remove

* LOG_xxxx __FILE__ , __LINE__ cleaned

* ASSERT macro __FILE__ __LINE__

* mtx without line/file in functions

* " if (1) {} " & "if (0) {}" and tab/white place

* LogUtils as macro

* GameState_, GameAlloc_, SystemArena_ & ZeldaArena_

* Revert "GameState_, GameAlloc_, SystemArena_ & ZeldaArena_"

This reverts commit 0d85caaf7e.

* Like last commit but as macro

* Fix matrix not using macros

* use function not macro

* DebugArena_* functions
GameAlloc_MallocDebug
BgCheck_PosErrorCheck as macros
removed issues with ; in macro file
2022-07-05 19:29:34 -04:00
qurious-pixel a9c3c7541e Controller Navigation Fix-Up (#544)
* Controller Navigation Fix-Up

* [MISC] Fix typo
2022-07-04 21:30:50 -04:00
David Chavez a31be1f3d1 Update to latest docking imgui (#582)
* Update to latest `docking` imgui

commit: 67410d53f739b6a0df138e2252f0e5136b42062f

* Fix modified import for SDL

* Update imgui_impl_sdl.cpp

* Add Imgui include path for better imports
2022-07-04 10:54:09 -04:00
briaguya e5b59742ae change sunset in save editor so dampe is out 2022-07-04 10:53:12 -04:00
briaguya 8615418630 missed a couple spots 2022-07-04 10:48:39 -04:00
briaguya b8602994fb change name based on PR comment 2022-07-04 10:48:39 -04:00
briaguya 923bf3b0e4 special char doesn't work with default imgui font 2022-07-04 10:48:39 -04:00
briaguya 21142bdb26 command on mac 2022-07-04 10:48:39 -04:00
briaguya 5ce2ecd6c8 Update README.md 2022-07-04 10:48:39 -04:00
briaguya b730af5e8a implement reset 2022-07-04 10:48:39 -04:00
briaguya f9b831d5c0 add menu from https://github.com/PurpleHato/Shipwright/tree/ResetMenu 2022-07-04 10:48:39 -04:00
louist103 e7c2aff97e Fix audio, boot commands, and save staes. 2022-07-04 10:44:31 -04:00
rozlette 668f9bee10 Fix testing masks of DPad 2022-07-04 10:44:10 -04:00
earthcrafterman 818d5f90a8 Add toggles for disabling heart drops and random drops (#507)
* Adds toggles for disabling random drops and fixed heart drops

* Changed the "No Fixed Heart Drops" toggle to the more useful "No Random Heart Drops" toggle

* Adds an explanation that the no heart drops option is similar to Hero Mode

* Moved difficulty options into their own sub-menu
Moved time saver options into their own sub-menu
Moved clutter reducing options into their own sub-menu

* fixed the tag name of mweep speed

* Moved Skip Text to Experimental
2022-07-04 10:42:43 -04:00
rozlette d63c0077ee Add more files 2022-06-27 23:17:37 -04:00
rozlette c14e4f387c Add more files 2022-06-27 23:17:37 -04:00
rozlette 39a50a406b Update names 2022-06-27 23:17:37 -04:00
rozlette 9f5618def4 Rename Soh* files 2022-06-27 23:17:37 -04:00
vaguerant 82f790d082 Change Power to Upgrades 2022-06-27 23:17:16 -04:00
vaguerant a58ddd4f55 Map Select name fixes 2022-06-27 23:17:16 -04:00
Kenix3 cc22fe17bb Headphones setting in game should now work.
Resolves #13
2022-06-27 22:10:00 -04:00
rozlette 447e68a659 Fixed some instances where the original OOT save is erroneously preserved or recreated, leading to another conversion next time you launched the game 2022-06-26 12:08:39 -04:00
rozlette 0f84682bc0 Add margins for dpad 2022-06-26 12:06:31 -04:00
rozlette 284a7fba95 Invalidate message item icon texture before drawing 2022-06-26 12:06:19 -04:00
rozlette b96bd4ea9d Fix title cards for market potion shop and bombchu shop 2022-06-26 12:06:04 -04:00
rozlette 8535568f53 Fix ability to assign equipment you don't own 2022-06-26 12:05:28 -04:00
Christopher Leggett 1f1de82bb8 casts jya_cobra's shadowTexture pointer to uintptr_t instead of s32. 2022-06-25 11:00:56 -04:00
rozlette 65016499ab Get rid of erroneous int casts 2022-06-25 11:00:08 -04:00
PurpleHato efd4b26f3d FIX: Remove duplicates of gNewDrops from the enhancements menu 2022-06-23 20:10:53 -04:00
PurpleHato 0fc75bb873 FIX: Increased the maximum actor limit for draw distance
Fix issue #529
2022-06-23 20:10:39 -04:00
rozlette 375932f43b Move UI location arrays from static to global to accomodate customizable UI 2022-06-22 23:13:32 -04:00
rozlette fd06827e2b DPad items 2022-06-22 23:13:32 -04:00
David Chavez 57fb04accc Ignore all named saves
Necessary after new save format
2022-06-22 22:59:14 -04:00
briaguya ba74653f61 fix linux crash 2022-06-22 22:58:46 -04:00
sholdee bd22074ec8 Move macOS to parallel stage 2022-06-22 18:22:59 -04:00
David Chavez e42b18cf71 Add Support for macOS (#441)
* Fixed soh filters

* add more makefile changes

* almost ready

* more updates

* update

* update

* Update Makefiles to handle both platforms

* Allow for overriding the CXX and CC executables

* Restore original structure while supporting custom CXX flags

* Remove some platform specific libs

* Dynamic target name

* Make X11 paths package-agnostic

* Remove changes to `gfx_opengl.cpp`

* Use OpenGL2 on MacOS instead of OpenGL3

* make it actually render something

* render at least the first texture, still need to figure out the second
one

* Let’s use OpenGL 3 again

* maybe this works to get the right texture? link's eyes still look off a bit

* did this work?

* set the platform to macos

* actual numbers are right, but logic is ugly XXX/TODO, i know

* add zlib to ldflags for ZAPDUtils

* A bit of cleanup

* Revert unneeded changes

* Remove GL_CHECK

* Fix issues with z64 branch

* use an std::map instead of a giant array

* three point filter fix (#2)

* Fix mac compilation

* fix audio for 64 bit

* revert audio heap size, keep bigger pools

* Add more Apple specific checks to our modifications

* Add building instructions for macOS

* Remove unecessary step from building instructions

* Add missing SDL2 & GLEW to Linux LDLIBS

* Update BUILDING.md

Co-authored-by: BountyChocolate123456 <101743444+BountyChocolate123456@users.noreply.github.com>

* Update soh/.gitignore to include other arch binaries

Co-authored-by: BountyChocolate123456 <101743444+BountyChocolate123456@users.noreply.github.com>

* Use right platform name for debugging window

Co-authored-by: BountyChocolate123456 <101743444+BountyChocolate123456@users.noreply.github.com>

* Fix stormlib on macos (arm64)

* Simplify some of the ifdef checks

* Revert an older no longer necessary fix

* Remove remaining unecessary deviations

* Update building instructions after StormLib changes

* Feature: Use OpenGL 4.1 (#1)

* Further tweak the BUILDING

* Tidy up

* reword -j message

* Add Jenkins CI Support (#2)

* Fix type issues

* add target <appbundle> and <filledappbundle>

add makefile targets to create an .app
`filledappbundle` creates the target with the .otr included

this should perhaps be moved to Application Support though

* pull gcc's rpath from otool output

* move make target to the end so it's not default

* Add Jenkins and make exe in par with other platforms

* Actually save build artefacts

* Fix artefact path

* Remove x11 mentions and linking (not used)

* Update building instructions for generating app

* use appsupport directory

* Add new app icon

* Update target to match macOS types

* Update more audio types

* fix null deref in Audio_PlayFanfare

* Remove old import from z64

* address final nit with apple ifdefs

Co-authored-by: KiritoDev <36680385+KiritoDv@users.noreply.github.com>
Co-authored-by: Jeffrey Crowell <github@crowell.biz>
Co-authored-by: BountyChocolate123456 <101743444+BountyChocolate123456@users.noreply.github.com>
2022-06-22 14:59:21 -04:00
vaguerant 77e7080a8c Two-hand shield cheat fix: use 1-handed reflect anim (#504) 2022-06-21 22:27:13 -04:00
Kenix3 77fc202694 Merge pull request #413 from Baoulettes/3DProjectiles
[Mod]Enable 3D Projectiles for monsters
2022-06-21 22:24:29 -04:00
Kenix3 d3436fc1e4 Merge pull request #362 from GreatArgorath/ShortBiggoron
Adds option for shorter Biggoron quest
2022-06-21 22:22:41 -04:00
Kenix3 d5db4a86bd Merge pull request #431 from HarbourMasters/zelda64
Ship of Harkinian 64 bit compilation
2022-06-21 22:17:47 -04:00
David Chavez f8e3dcd7c0 Jenkins: Fix path to soh.exe 2022-06-21 22:10:24 -04:00
Kenix3 1435b5d314 Merge branch 'develop' into zelda64 2022-06-21 19:27:46 -04:00
Vague Rant abcf713cc1 Fix Anubis fireballs 2022-06-21 14:44:35 -04:00
louist103 5bf4128add Add all slots 2022-06-21 14:31:28 -04:00
Baoulettes 53fc151453 Update soh/src/overlays/actors/ovl_En_Okuta/z_en_okuta.c
Thanks I overlooked it :)

Co-authored-by: BountyChocolate123456 <101743444+BountyChocolate123456@users.noreply.github.com>
2022-06-20 22:33:31 +02:00
Baoulettes 14df96eacd Merge branch 'develop' into 3DProjectiles 2022-06-20 22:32:45 +02:00
Kenix3 a7ed748973 Update soh/src/code/audio_load.c 2022-06-20 16:03:03 -04:00
Kevin Alexis Contreras 43503ead83 Fixed audio_heap_size 2022-06-20 13:04:01 -05:00
Ian Drake 39d8b77b02 Added save filename and path to config file (#130)
* Added save filename and path to config file

Closes #110

* Moved FileIO to libultraship

* Moved OOT Specific Code to OTRGlobals and made libultraship for general file IO. Combined config options.

* Moved filesystem include into GlobalCtx2.h
2022-06-20 13:54:44 -04:00
earthcrafterman 36b9b9519d Added three sliders for multiplying damage (#478)
* Added three sliders for multiplying damage:
1) Generic Slider, includes everything not multiplied by other sliders
2) Fall Damage Slider, includes all fall damage
3) Void Damage Slider, includes all void out damage

* Included tooltips

* Modified func_80837B18 to handle the modified flag the same as Player_InflictDamage does

* hotfix of a dumb oversight

* Fixed an oversight that led to compile failure on Linux and probably more things that weren't noticeable in unit testing

* I keep missing dumb mistakes.
I keep missing dumb mistakes.
Is this the last dumb mistake I've missed?

* Oh crud it's because I declared func_80837B18_modified after func_80837B18 isn't it? I am the ultimate dumbus.
2022-06-20 13:51:59 -04:00
vaguerant 7d0af303ec Fix grayscale Biggoron's Sword (#485) 2022-06-20 13:50:57 -04:00
PurpleHato 5549ad9388 TWEAK: Kokiri Draw distance V2 (#486)
* ADD: Saria's logic

* TWEAK: Kokiri Draw Distance change doesn't need a reload anymore

* ADD: Mido's logic
2022-06-20 13:50:32 -04:00
ajanhallinta 950f954c89 Minor Actor Viewer tweaks and fixes (#491)
* Show new Actor description, fix window opening

* Play error sound when spawning invalid actor

* Add reset button, don't reset actor when changing scene
2022-06-20 13:50:23 -04:00
vaguerant b56426a67d Skip first-time pickup messages for consumable items (#495) 2022-06-20 13:50:06 -04:00
Ada 45cb350b7a Merge branch 'develop' into ShortBiggoron 2022-06-20 18:45:35 +01:00
Rozelette b4eebbbcd6 Versioned saves (#423)
* v1

* Cleanup

* Cleanup

* cleanup

* Organization

* Fixes

* Fix typos

* fixup merge

* use gLanguages

* Restore n64dd

* Fix bad merge

* Set ddflag
2022-06-20 13:41:43 -04:00
louist103 73ff7ef3da Guard vision (#466)
* Vision

* Wrap it in a CVAR

* Cleanup the code and fix a savestate bug
2022-06-20 13:39:06 -04:00
David Chavez a142d94c36 Extract StormLib building from soh to ZAPDTR (#505)
* Extract StormLib building from soh to ZAPDTR

ZAPDTR is currently where we have everything… though this might not make the most sense.

* Do not import storm as a relative
2022-06-20 13:38:08 -04:00
Kevin Alexis Contreras 4e75488567 Removed ifdefs for audio heap sizes 2022-06-20 12:33:38 -05:00
Kevin Alexis Contreras e945a86d46 Added fixes based on the reviews 2022-06-19 02:03:04 -05:00
Josh Bodner 5a872f85e1 Add checkbox to make holding the D-pad act like holding the joystick on the file and pause screens (#454)
* Add checkbox to make holding the D-pad act like holding the joystick on the file and pause screens.  Also fix unguarded debug camera action.

* Removed new cvar from UI, made it enabled by default and control the D-pad hold behavior with the existing cvar instead, changed cvar for debug check too
2022-06-19 00:09:31 -04:00
Kevin Alexis Contreras 8a6ee00a21 Fixed indentation caused because of tabs 2022-06-19 00:07:29 -04:00
Kevin Alexis Contreras b0278de3a8 Code cleanup 2022-06-19 00:07:29 -04:00
Kevin Alexis Contreras 3a65119267 Added mp3 support for samples 2022-06-19 00:07:29 -04:00
Kenix3 d6eb59d0af Update libultraship/libultraship/Lib/Fast3D/U64/PR/ultra64/gbi.h 2022-06-18 10:00:32 -04:00
David Chavez 1763d0bfce Enable parallel stages on Jenkins (#476) 2022-06-18 09:43:16 -04:00
Nicholas Estelami 029d7bcda3 Merge pull request #494 from briaguya-ai/z64-devmerge
Z64 devmerge
2022-06-17 17:41:23 -04:00
PurpleHato 8d4b15325a ADD: Color for the bottom text 2022-06-17 17:16:38 -04:00
PurpleHato f7bcbe3049 Batter space management
Semi-responsive logic for small resolution
2022-06-17 17:16:38 -04:00
PurpleHato e66c4751ea TWEAK: Forgot to push the sohimgui 2022-06-17 17:16:38 -04:00
PurpleHato 5dc5c85588 Interface Editor rework + File Choose customization
TWEAK: Entire rework of the Interface Editor GUI

ADD: File Choose customization
2022-06-17 17:16:38 -04:00
briaguya dd42cca2cf Merge branch 'develop' into z64-devmerge 2022-06-17 00:39:07 -04:00
Kevin Alexis Contreras bb90be6748 Merge branch 'zapd_audio_support' into zelda64 2022-06-16 23:09:50 -05:00
briaguya 3e6307bf96 No forced navi (Prevent forced Navi conversations) (#453)
* no forced navi

* imgui option for it

* remove double owl from sloppy merge

Co-authored-by: briaguya <briaguya@alice>
2022-06-16 21:43:46 -04:00
briaguya 36d37d97bd fix audioexporter signedness comparison issue 2022-06-16 21:23:10 -04:00
David Chavez 587c46cacf Enable High DPI mode in SDL (#490) 2022-06-16 21:08:47 -04:00
vaguerant ac8acaeba4 Cheat: shield with two-handed weapons (#487) 2022-06-16 21:08:32 -04:00
louist103 93e69c924d Add time. (#462) 2022-06-16 20:57:01 -04:00
sholdee 73ebcf2b1b Add failsafe in case of hang (#465)
Aborts stage if hung, which extract_assets.py seems to do on rare occasion
2022-06-16 20:55:26 -04:00
PurpleHato 72ebeaad3b Fix: SohImGui behavior and cleanup (#461)
* Fix: SohImGui behavior and cleanup

- FIX: Once Save Editor / Collision Viewer are closed, set their values back to 0 so they don't automatically open once we click on Developer Tools

- FIX: Same kind of fixes for every cosmetics editor

- FIX: Typo "gCosmticsEditor" to "gCosmeticEditor"

- TWEAK: Cleanup of useless stylizing options on Cosmetics

* TWEAK: Reset a pointer that I edited for some testing

* FIX: Typo from Assignable tunic / boots tooltip

* move cvar.h includes out of extern c block

* remove extra line

Co-authored-by: briaguya <briaguya@alice>
2022-06-16 20:48:42 -04:00
qurious-pixel f29fb01887 Add Controller Navigation (#429)
* Add Controller Navigation

- Apply Rainbow patch
- Add Controller Navigation
- Controller "Back" button opens F1 Menu
- Controller Rumble/Gyro settings at the bottom of the controller menu

* Restore changes from PR #306

Add back update from https://github.com/HarbourMasters/Shipwright/pull/306

* Add Tooltip of new functionality

Tooltip: 
Allows controller navigation of the menu bar
D-pad to move between items, A to select, and X to grab focus on the menu bar

* set & save check

* Fixes for switch port
2022-06-16 20:43:34 -04:00
getBrainError 3d24f3f595 Improved Collision Viewer (#435)
* Add fishing pole as sword in save editor

Adds fishing pole as a sword to the save editor under current equipment.

* Improve Collision Viewer

Made all the values of the collision viewer persistent.
Switched all color pickers to the EnhancementColor picker.
Added a checkbox to enable/disable collision viewer.

* Update SohImGuiImpl.cpp

Probably fixed linux build error

* Update colViewer.cpp

Hopefully fixed it this time. Lets wait for jenkins.

* Fixed colors

Some color values were wrong

* Update SohImGuiImpl.cpp &  SohImGuiImpl.h
2022-06-16 20:40:27 -04:00
Christopher Leggett bf0935a5a2 Gravedigging tour fix (#388)
* Fixes the Gravedigging Tour heartpiece bug.

Basically just causes Dampe's Gravedigging Tour Heart Piece to set a Collect flag on the Graveyard Scene when collected instead of a GetItemInf flag when it's spawned. I did this by simply the result of Item_DropCollectible to a variable called reward and running reward->collectibleFlag = 0x19 if the reward was a heartpiece.

There may be a better way to do this. This is unlike most of the other dropped items with collectible flags in the game, which have some binary operations performed on the item to be dropped before passing it into Item_DropCollectible. See z_en_geldb.c and z_bg_haka_tubo.c for examples of this. I tried to find some way to do something more like that here but I was unable to wrap my head around the binary operations being performed. I may revisit this in the future.

* Reimplements vanilla bug, adds cvar and checkbox for the fix.

* Adds some newlines to the Tooltip

* Shortens ImGui tooltip.

* Removes the hardcoded Purple Rupee/Heart Piece reward.

* Sets collectibleFlag whether cvar is on or not to prevent duping.

* Sets Gravedigging Tour Fix to enabled by default

* Simplifies logic for whether or not to spawn heart piece

* Adds TempClear flag set and check for heart piece.

This originally introduced a bug where the player could spawn multiple
heart pieces by simply not collecting the one that spawns and continuing
to dig up spots. This fixes that by checking a temp clear flag before
spawning the heart piece and setting it when the heart piece spawns.

Since this is a temp clear flag it will not stay set if the player
exits the scene, so this still does fix the bug of locking the
player out of the heart piece when spawning it and leaving without
picking it up.

As far as I can tell this temp clear flag isn't used anywhere else
in this scene. The only one used in this scene I could find is that
killing the first Poe in this scene sets flag 0x02 (or maybe it's
0x01, not sure if the flags start at 1 or 0).

* Replaces magic numbers with constants defined in z_en_tk.h

* Updates comment explaining changed code.

* Replaces another magic number I forgot to replace last commit.

* Replaces TempClear flag with local variable

* Removes TempClearFlag const and moves others out of .h to .c (felt like they made more sense there)
2022-06-16 20:36:13 -04:00
Nicholas Estelami 1f1b81ab40 Additional fixes 2022-06-16 20:35:52 -04:00
Nicholas Estelami b9a8118e33 Ready for round 2? 2022-06-16 20:35:52 -04:00
Nicholas Estelami f581e3e79f Let's try again 2022-06-16 20:35:52 -04:00
Nicholas Estelami 2a2ef17302 Fixed Linux issues (I think) 2022-06-16 20:35:52 -04:00
Nicholas Estelami 34ef1d2fd0 Updated resource types 2022-06-16 20:35:52 -04:00
Nicholas Estelami bb6f5abbbf Updated sequence file format and updated resource version to Rachael 2022-06-16 20:35:52 -04:00
Nicholas Estelami 960a29e513 Fixed StormLib Forward Slash BackSlash issues 2022-06-16 20:35:52 -04:00
Nicholas Estelami aeaaa54e0d GC PAL Audio XML 2022-06-16 20:35:52 -04:00
Nicholas Estelami 3f10195c0e Added XML attributes and fixed odd crash 2022-06-16 20:35:52 -04:00
Nicholas Estelami c930bd0138 Added names for the soundfonts. 2022-06-16 20:35:52 -04:00
Nicholas Estelami 0a629ea6e9 Fixed last remaining audio bugs 2022-06-16 20:35:52 -04:00
Nicholas Estelami 6c94c8690e Updated sample rate to 44100hz 2022-06-16 20:35:52 -04:00
Nicholas Estelami 510ef9b60c Fixed crackling issues 2022-06-16 20:35:52 -04:00
Nicholas Estelami 2b40e66fa4 Fixed resample and corrupt audio bug. Minor documentation updates. 2022-06-16 20:35:52 -04:00
Nicholas Estelami 28073fbb19 Commented out additional test code 2022-06-16 20:35:52 -04:00
Nicholas Estelami ef2f4f799c Commented out NTSC test 2022-06-16 20:35:52 -04:00
Nicholas Estelami c49cee3521 Audio support nearly complete. 2022-06-16 20:35:52 -04:00
Nicholas Estelami b3e299dbde Replaced StormLib .lib files with source code.
Some modifications to handle backslashes and forward slashes, along with some optimizations to speed up OTR generation.
2022-06-16 20:35:52 -04:00
Nicholas Estelami 941c19f2c3 Audio decompiled and WIP custom sample support 2022-06-16 20:35:52 -04:00
Nicholas Estelami bd68e29bfb Additional fixes 2022-06-16 20:13:33 -04:00
Nicholas Estelami 4c99fc497c Ready for round 2? 2022-06-16 20:00:38 -04:00
Nicholas Estelami b8334e5757 Let's try again 2022-06-16 19:46:07 -04:00
Nicholas Estelami ce36822c80 Fixed Linux issues (I think) 2022-06-16 19:24:18 -04:00
Nicholas Estelami 1ec0161247 Updated resource types 2022-06-16 19:09:07 -04:00
Nicholas Estelami dcb1b59c1b Updated sequence file format and updated resource version to Rachael 2022-06-15 16:09:22 -04:00
Nicholas Estelami 510a38a6bc Fixed StormLib Forward Slash BackSlash issues 2022-06-15 16:09:22 -04:00
Nicholas Estelami 7bca63a800 GC PAL Audio XML 2022-06-15 16:09:22 -04:00
Nicholas Estelami aa98408e00 Added XML attributes and fixed odd crash 2022-06-15 16:09:22 -04:00
Nicholas Estelami 416173fa79 Added names for the soundfonts. 2022-06-15 15:57:52 -04:00
Nicholas Estelami 99e3d9a899 Fixed last remaining audio bugs 2022-06-15 15:57:52 -04:00
Nicholas Estelami 5d3b21bd2b Updated sample rate to 44100hz 2022-06-15 15:57:52 -04:00
Nicholas Estelami a0e9ca9a9c Fixed crackling issues 2022-06-15 15:57:52 -04:00
Nicholas Estelami 262d067870 Fixed resample and corrupt audio bug. Minor documentation updates. 2022-06-15 15:57:52 -04:00
Nicholas Estelami 44874a0763 Commented out additional test code 2022-06-15 15:57:52 -04:00
Nicholas Estelami 9fe268abc7 Commented out NTSC test 2022-06-15 15:57:52 -04:00
Nicholas Estelami 114c6e01d9 Audio support nearly complete. 2022-06-15 15:57:52 -04:00
Nicholas Estelami 746c7a5303 Replaced StormLib .lib files with source code.
Some modifications to handle backslashes and forward slashes, along with some optimizations to speed up OTR generation.
2022-06-15 15:57:52 -04:00
Nicholas Estelami b8c9f7f1ce Audio decompiled and WIP custom sample support 2022-06-15 15:57:52 -04:00
Kevin Alexis Contreras 3cd5d75f6f Fixed x64 release compilation 2022-06-15 10:38:27 -05:00
Kevin Alexis Contreras 08bd76d25c Disabled ASAN on release 2022-06-15 10:28:15 -05:00
Kevin Alexis Contreras 5b43e4652f Updated zapd_audio_support into zelda64 2022-06-15 09:42:37 -05:00
KiritoDev d0ce76e5c6 Merge branch 'develop' into zelda64 2022-06-15 09:14:58 -05:00
Kevin Alexis Contreras 19ac30b918 Fixed Ganondorf's lair and Spirit Temple crashes on 64 bits 2022-06-15 09:09:17 -05:00
Nicholas Estelami b3396446af Fixed StormLib Forward Slash BackSlash issues 2022-06-14 18:56:17 -04:00
Kevin Alexis Contreras 3dc33b6f84 Added GetSampleRate function 2022-06-14 14:04:47 -05:00
Nicholas Estelami 008af18951 GC PAL Audio XML 2022-06-14 12:32:11 -04:00
louist103 5fcddaa066 Remove another unused thing. 2022-06-14 11:28:46 -04:00
louist103 15b28370fc Fix 2022-06-14 11:28:46 -04:00
Nicholas Estelami 9e313dd18b Added XML attributes and fixed odd crash 2022-06-14 01:29:52 -04:00
Nicholas Estelami bff206e30b Added names for the soundfonts. 2022-06-14 01:13:18 -04:00
Nicholas Estelami c5df54ae27 Fixed last remaining audio bugs 2022-06-14 01:13:18 -04:00
Nicholas Estelami c82df705a6 Updated sample rate to 44100hz 2022-06-14 01:13:18 -04:00
Nicholas Estelami 3e1cb17e22 Fixed crackling issues 2022-06-14 01:13:18 -04:00
Nicholas Estelami 83aee6d7e1 Fixed resample and corrupt audio bug. Minor documentation updates. 2022-06-14 01:13:18 -04:00
Nicholas Estelami b66174c3ec Commented out additional test code 2022-06-14 01:13:18 -04:00
Nicholas Estelami 919cad0e51 Commented out NTSC test 2022-06-14 01:13:18 -04:00
Nicholas Estelami 61760401bc Audio support nearly complete. 2022-06-14 01:13:18 -04:00
Nicholas Estelami b83cd172b2 Replaced StormLib .lib files with source code.
Some modifications to handle backslashes and forward slashes, along with some optimizations to speed up OTR generation.
2022-06-14 01:13:18 -04:00
Nicholas Estelami b889880cc7 Audio decompiled and WIP custom sample support 2022-06-14 01:13:18 -04:00
Kevin Alexis Contreras 9cf537eaff Fixed ocarina loop points 2022-06-13 21:53:26 -05:00
Nicholas Estelami 36eb47e631 Fixed last remaining audio bugs 2022-06-13 21:54:25 -04:00
Kevin Alexis Contreras 4ddb2d81b7 Merge branch 'zapd_audio_support' into zelda64 2022-06-13 17:10:34 -05:00
Nicholas Estelami 405e6019d2 Updated sample rate to 44100hz 2022-06-13 18:09:22 -04:00
Nicholas Estelami 4e9ef65967 Fixed crackling issues 2022-06-13 18:05:51 -04:00
PurpleHato 2a1145785e Tweak: Draw Distance Kokiri menu behavior (#459)
* ADDED: Draw Distance toggle under Experimental enhancement

* FIXED: Dark Link Apparition + Kokiri NPC spawn

* Added a Toggle for Kokiri NPC since they are mystics

* TWKEA: Desciription got the Kokiri draw distance

* FIXED: Horses behavior

Fixed Epona shout on title screen + Epona call from songFixed Zelda and Ganon horses that could still be seen on camera pan on the castle escape cinematic

* Tweak: Draw Distance: Kokiris menu behavior

Force the Kokiri Draw Distance to be set to 0 if the Draw Distance is disabled
2022-06-13 16:57:08 -04:00
PurpleHato 04bb9cd48e Tweak from @louist103 made true/flase back instead of 0 1 2022-06-13 16:40:47 -04:00
PurpleHato 45e18f9aca Tweak: Typo fixed 2022-06-13 16:40:47 -04:00
PurpleHato c927403fa5 Fixed: Kaleido Link Rotation
I made a fucksie woopsie while refactoring
2022-06-13 16:40:47 -04:00
PurpleHato fde3c8e98f Fix: Dualsense (PS5) Gyro
No needs to use the hacky stuff anymore :D
2022-06-13 16:38:34 -04:00
Kevin Alexis Contreras da724c0632 Changed audio freq from 32KHZ to 44KHZ on SDLAudioPlayer 2022-06-13 14:40:35 -05:00
David Chavez 1225a381ab Fix detection of arm64, fix warnings 2022-06-13 14:18:36 -05:00
Kevin Alexis Contreras a8a3516e59 Moved .o files to DebugObj - Debug 2022-06-13 11:55:13 -05:00
Kevin Alexis Contreras 129882c79f Moved .o files into x64/DebugObj 2022-06-13 11:49:19 -05:00
Kevin Alexis Contreras 8b63cf93d8 Updated zapd_audio_support on zelda64 2022-06-13 11:41:43 -05:00
KiritoDev 8a7aa5fa53 Merge branch 'develop' into zelda64 2022-06-13 10:18:38 -05:00
Kevin Alexis Contreras 9e851ebd93 Updated ResourceMgr to develop changes 2022-06-13 10:17:48 -05:00
Kevin Alexis Contreras aa66e01740 Fixed conflicts with develop 2022-06-13 10:12:56 -05:00
Kevin Alexis Contreras 394939347c Code cleanup and fixes on 64bits 2022-06-13 10:05:42 -05:00
rozlette bda5ba8cbc Restore VS filters 2022-06-12 22:29:28 -04:00
PurpleHato f00178e45d FIX: Remove duplicates of Disable Navi Call 2022-06-11 15:57:30 -04:00
vaguerant a46bee9535 Unfix dungeon map icon when bugfix CVar is off (#455)
* Unfix dungeon map icon when bugfix CVar is off

* Big brain optimization by @InfoManiac742
2022-06-11 12:13:09 -04:00
Ralphie Morell a7d8362787 Actor Viewer debug tool (#414)
* Added actor view

* Update buttons; cleanup

* Refactored; added windowing from save editor; added options to pull actors from targeting/holding/interaction

* Add description for all actors

* Update actor list when changing scene

* Remove whitespace

* Type conversion; added checks against global context being null; removed kill button (for now)

Co-authored-by: ajanhallinta <4janhallinta@gmail.com>
2022-06-11 12:09:26 -04:00
BountyChocolate123456 1cb3cd5509 #243 Add option to disable black bars letterboxes (#376)
* #243 Add option to disable black bars letterboxes

* #243 Add option to disable black bars letterboxes

* Update libultraship/libultraship/SohImGuiImpl.cpp

* Update libultraship/libultraship/SohImGuiImpl.cpp

* Update libultraship/libultraship/SohImGuiImpl.cpp

Co-authored-by: Ada <60364512+GreatArgorath@users.noreply.github.com>

* Add new line

Co-authored-by: Ada <60364512+GreatArgorath@users.noreply.github.com>
2022-06-11 12:07:13 -04:00
Josh Bodner 1feef9d5d6 Added slider to increase vine/ladder climbing speed (#375)
* Added slider to increase vine/ladder climbing speed

* moved to cheats menu and made steps more granular

* Fix granularity math

* back to the enhancements menu!
2022-06-11 12:07:00 -04:00
Ada f3dda92e78 Adds option to stop the game from freezing the player when picking up gold skulltula's (#365) 2022-06-11 12:06:42 -04:00
InfoManiac742 4f492e9f63 Add control/hotkey info to README (#193)
* Update README.md

* Added some default keyboard controls

Still need triggers though

* Update README.md

* Update README.md

* Update README.md

* Changed first table to a horizontal orientation

* Made wording changes

also fixed a grammatical error

* Update README.md
2022-06-11 12:05:51 -04:00
Nicholas Estelami 96a18391a8 Fixed resample and corrupt audio bug. Minor documentation updates. 2022-06-10 15:40:19 -04:00
Nicholas Estelami 35e15389ac Commented out additional test code 2022-06-10 13:53:03 -04:00
Nicholas Estelami 9bd225f3bf Commented out NTSC test 2022-06-10 13:50:16 -04:00
Nicholas Estelami f1b81b7f82 Audio support nearly complete. 2022-06-10 13:37:50 -04:00
Josh Bodner 257cc41d2b Stop the dropped item despawn timer on demand (#382)
* Stop the despawn timer on demand

* But do make them disappear once they're collected!
2022-06-09 17:28:58 -04:00
Kenix3 e39961dc4b Update README.md 2022-06-09 17:26:41 -04:00
Ada de86227d01 Update z_en_go2.c 2022-06-09 11:48:26 +01:00
Ada 00025f2318 Update z_en_go.c 2022-06-09 11:48:09 +01:00
Vague Rant e4fe289f70 Restore Hover Fishing bug from 1.0 2022-06-08 19:10:55 -04:00
Baoulettes 24567eeeb6 better conditions 2022-06-08 19:07:56 -04:00
Baoulettes b38e0a6b15 better conditions 2022-06-08 19:07:56 -04:00
Baoulettes 55fa1996ba Update SohImGuiImpl.cpp 2022-06-08 19:07:56 -04:00
Baoulettes 6478df046a Debug close update 2022-06-08 19:07:56 -04:00
Baoulettes ffc22fe8c4 Initial com. 2022-06-08 19:07:56 -04:00
briaguya 5b7dad1de2 fast chests 2022-06-08 18:32:12 -04:00
louist103 c6622e6c87 Update ResourceMgr.cpp 2022-06-08 18:30:54 -04:00
louist103 cf872d1e0d cleanups 2022-06-08 18:30:54 -04:00
PurpleHato ac2127094b ADDED: Draw Distance toggle under Experimental enhancement + Bugfix (#398)
* ADDED: Draw Distance toggle under Experimental enhancement

* FIXED: Dark Link Apparition + Kokiri NPC spawn

* Added a Toggle for Kokiri NPC since they are mystics

* TWKEA: Desciription got the Kokiri draw distance

* FIXED: Horses behavior

Fixed Epona shout on title screen + Epona call from songFixed Zelda and Ganon horses that could still be seen on camera pan on the castle escape cinematic
2022-06-08 18:00:10 -04:00
vaguerant 3444868b95 Add sound effects to tunic/boot equips (#446)
* Add sound effects to tunic/boot equips

* Use enums for assignable equip swaps
2022-06-06 19:27:03 -04:00
vaguerant d01d6ff3d1 Add Fireproof Deku Shield cheat (#440) 2022-06-06 19:26:16 -04:00
David Chavez 376860af9d Render song of storms effect correctly widescreen (#421) 2022-06-06 19:23:48 -04:00
briaguya e87921f6be https for cloning repo (#415)
if users don't have ssh keys set up "git clone git@github.com:HarbourMasters/ShipWright.git" fails. this makes it so copy/pasting the instructions should work for more users.
2022-06-06 19:23:29 -04:00
vaguerant 8cbc4d27eb Add GUI toggle for Ganon blood color, also fix minor unrelated typos in ImGui (#411)
* Add GUI toggle for Ganon blood color

* Move to new Restoration section

* rm accidental line break

* Simplify booleans
2022-06-06 19:21:06 -04:00
vaguerant 596d5b478b Fix Navi text HUD position (#406)
* Fix Navi text HUD position

* Force cvar to return 0 or 1

As suggested by Gary

* Disable all bug fixes by default

per Kenix
2022-06-06 19:16:47 -04:00
PurpleHato f9c86c9821 fix: inverted the array size valye 2022-06-06 14:26:47 -04:00
PurpleHato d87df5f670 Fixed from @louist103 and @Emill review 2022-06-06 14:26:47 -04:00
PurpleHato 6c34c03cdf FIX: EnhancementCombobox
It was returning the wrong value and could mess array sizes.
2022-06-06 14:26:47 -04:00
Vague Rant c08439a562 Implement Cow of Time enhancement 2022-06-06 13:57:27 -04:00
InfoManiac742 38ec6ea702 Changed "affirm" to "confirm"
"Confirm" seems to make more sense in this context instead of "affirm"
2022-06-06 13:56:55 -04:00
louist103 065291d2c7 sasatest 2022-06-05 16:35:49 -04:00
louist103 95cfce0ded cleanup 2022-06-05 16:35:49 -04:00
Random06457 af8c5ab978 fix Makefile typo 2022-06-04 10:09:50 -05:00
Random06457 b5d5930fed change OSMesg definition and fix memory corruptions 2022-06-04 10:09:50 -05:00
Random06457 72fcd19a9e fix compilation 2022-06-04 10:09:50 -05:00
MelonSpeedruns 3b1d82c3ca Merge pull request #437 from PurpleHato/FixNaviColor
FIX: Default Navi's colors have been altered recent merged PRs
2022-06-03 13:29:50 -04:00
MelonSpeedruns c92524a90e Merge pull request #387 from Baoulettes/ComboBox-Simplification
Combo box simplification
2022-06-03 13:29:37 -04:00
David Chavez 51e58b9e13 Add StormLib CMakeLists.txt for building on Linux/Mac 2022-06-03 09:34:00 -05:00
Kevin Alexis Contreras 5ec6c01a78 Disabled RTC on soh and lus 2022-06-03 14:24:39 -05:00
Kevin Alexis Contreras e0ff6311ef Increased initial audio pool size and fixed types 2022-06-03 14:22:48 -05:00
Kevin Alexis Contreras d42c0ca23f Fixed audio font loading 2022-06-02 17:52:58 -05:00
Kevin Alexis Contreras a4460c26ef Added missing function on OTRGlobals 2022-06-02 12:45:07 -05:00
David Chavez e1affbdf9a Fix function prototypes and types 2022-06-02 12:43:16 -05:00
PurpleHato 902b842bcb FIX: Default Navi's colors have been altered recent merged PRs
This fix restore Navi's original colors which have been altered with recent merged PRs
2022-06-02 19:14:14 +02:00
Baoulettes 23946d5798 Merge branch 'develop' into ComboBox-Simplification 2022-06-02 04:46:42 +02:00
getBrainError 05340a926a Add fishing pole as sword in save editor
Adds fishing pole as a sword to the save editor under current equipment.
2022-06-01 22:42:16 -04:00
Baoulettes 0bfe2fec67 fix win build crash (#425)
sizeof issue make it crash on windows.
Thanks Melon :)
2022-06-01 22:06:32 -04:00
Kevin Alexis Contreras 332f8f93fb Merge branch 'zapd_audio_support' into zelda64 2022-06-01 15:12:28 -05:00
Kevin Alexis Contreras 0320107fc0 Merge branch 'zapd_audio_support' into zelda64 2022-06-01 15:11:11 -05:00
Nicholas Estelami fc7da35054 Replaced StormLib .lib files with source code.
Some modifications to handle backslashes and forward slashes, along with some optimizations to speed up OTR generation.
2022-06-01 16:05:05 -04:00
Nicholas Estelami 6f5ce7d715 Audio decompiled and WIP custom sample support 2022-06-01 13:06:32 -04:00
Kevin Alexis Contreras 0067a69795 Merge develop into zelda64 2022-05-31 17:49:39 -05:00
Kevin Alexis Contreras ca6f8f8963 Fixed z_player_lib corruption on 64 bit 2022-05-30 21:48:19 -05:00
Kevin Alexis Contreras e4ce541fcf Uncommented item_24 print on z_message_PAL 2022-05-30 19:49:23 -05:00
Kevin Alexis Contreras 22a305028f Fixed oob crashes on 64 bit 2022-05-31 00:29:14 -05:00
Kevin Alexis Contreras fa21734a98 Merge branch 'zelda64' of https://github.com/HarbourMasters/Shipwright into zelda64 2022-05-30 11:19:12 -05:00
Kevin Alexis Contreras fca79ae92a Fixed camera and disabled sound 2022-05-30 11:19:08 -05:00
Baoulettes ea0ea0366b Merge branch 'develop' into 3DProjectiles 2022-05-29 23:02:19 +02:00
briaguya daec428cb3 call SDL_Quit() before exit(0) (linux window closing issue) (#408)
* use _Exit(0) on linux

* use SDL_Quit() instead of _Exit(0)

* remove unnecessary call, add bandaid comment

Co-authored-by: briaguya <briaguya@alice>
2022-05-29 16:45:27 -04:00
PurpleHato 08c161fd13 Enhancement: More options for Kaleido Link (#394)
* Enhancement: More options for Kaleido Link

ADDED:  14 animations to use
ADDED: 2 random mode
ADDED: Link rotation on the menu with DPAD-Left and Right
ADDED: Reset position with DPAD-Up and Down

* ADDED/ Choice to use C-Button or D-pad
2022-05-29 16:40:50 -04:00
Baoulettes 29d4cd27c4 Fix Radiobutton uniqueness issues (#397)
* Fix Radiobox uniqueness issues

* C++ ? and build fix I think

* To match the edit made in .c
2022-05-29 16:38:21 -04:00
Baoulettes 7913398110 EnhancementColor3 tweak SohImGui Clean (#400)
* HUD Logic fix and cleaning

* array revert it was just fo rme to read it better

* Fix tunic logic seem like my cleaning was not good

* I had declared default in CPP

It resulted to overwrite what user would make oof.
Also a ! was missing.

* There, Default here is better.

* magic bar and used bar what switched
while updating EnhancementColor

* hud mod update

* Update SohImGuiImpl.h

* should fix build
2022-05-29 12:57:09 -04:00
Emill ccab94c765 Implement AnyFPS + option to queue one rendered frame (#401) 2022-05-29 12:16:23 -04:00
GreenSwede 90a33e9756 [LINUX] Add compiler flags to fix floating point precision error (#399)
These flags are known to fix one known issue exclusive to Linux: the Volvagia boss battle sequence. The softlock that occurs points towards a possible floating point precision error, possibly tied to the camera/Volvagia movement. This does not occur for the Windows build. It's possible that there are more issues that gets fixed by these flags. These flags will ensure that the compiler follows the IEEE 754 standard, which so happens to be the same behaviour that Windows uses. For more details, read this informative stackoverflow post: https://stackoverflow.com/a/16395650
2022-05-29 12:14:46 -04:00
Baoulettes 14ca2ab377 Merge branch 'develop' into ComboBox-Simplification 2022-05-29 18:02:21 +02:00
Baoulettes aaa1fafd51 Init desired languages CVar on InitSram (#385)
* Properly init desired languages

* Fix typos
2022-05-29 11:55:50 -04:00
Martin Molina 83c07645f4 Fixed crash when showing Triforce during lore cutscene after defeating Ghoma (#384) 2022-05-29 11:55:00 -04:00
louist103 533c216ad3 Cleanup ImGui strings (#359)
* Cleanup

* Emills suggestion

* fixes
2022-05-29 11:47:09 -04:00
earthcrafterman 4669235f62 Spammable kaepora (#354)
* Players can now spam their way through Kaepora Gaebora dialogue

* Turned the Owl Text Inversion into a toggle
Instead of replacing the Kokiri Owl Text at boot, a new Text Entry is added for it

* Attempt to make it compile on Linux

* Added multilingual support

* Commented the code to clear up confusion
2022-05-29 11:46:47 -04:00
Baoulettes 78b3c1ae47 Return button translation for GER/FRA (#287) 2022-05-29 11:43:58 -04:00
Baoulettes 72125bbd1e Add 3D debris to Okuta actor (octorok) 2022-05-29 00:09:03 +02:00
Baoulettes a35c4abc30 fix nuts reflect, I mean Deku nuts... 2022-05-28 22:00:12 +02:00
Baoulettes fb270dbab9 use same Cvar than 3D drops item 2022-05-25 20:20:44 +02:00
Baoulettes 5fd0100ad0 initial submit 2022-05-25 03:22:00 +02:00
Ada 17e09d5fd3 Merge branch 'develop' into ShortBiggoron 2022-05-21 18:49:35 +01:00
GreenSwede 40f13ff2e6 Update BUILDING.md (#364)
Add -O2 flag to text instructions since it was fixed in #342 commit db2fa61
2022-05-21 13:37:46 -04:00
Baoulettes d1357b902d DEV Tool : Fast Save Loading (#369)
* Add the whole loading system there

* Add Cvar checkbox

* Add support for ID:0 = FileSelect

* Add 0 in range for slider.
2022-05-21 13:32:21 -04:00
mightypanders 0ce37a4126 Clarify recommended ROM Option in README.md (#321)
* Update README.md with ROM recommendation

* Clarify recommendation wording in README.md

* Revert auto formatting
2022-05-21 13:22:56 -04:00
Emill e56af6a7a3 Redesign hooks mechanism (#352)
* Redesign hooks mechanism

* Use reference instead of copy
2022-05-21 13:22:25 -04:00
briaguya b359d642f4 Fix nightly build link formatting (#345)
Not sure if "here" is good text for the link, but that can be easily changed before merging
2022-05-21 13:21:36 -04:00
Ada 2192ae0a25 Adds notification telling people how to activate menubar (#351)
* Adds notification telling people how to activate menubar

* Makes it longer and only show when menu bar isn't active
2022-05-21 13:21:14 -04:00
iheemskerk 0b2c264a60 Add toggle to disable navi call voice audio (#336)
Co-authored-by: genegrey <pulicave@gmail.com>
2022-05-21 13:16:48 -04:00
Baoulettes 0993337721 [Mod]HUD Editor - Color Scheme incl. N64 colors. (#202)
* Update SohImGuiImpl.cpp

* Add int variant of CVar_ Get/Set/Register

* Add variant of CVar_ Get/Set/Register

* Add LoadHUDColors()

* Added temporary menu for custom colors

* vars added

* added section load

* variables save/load

* register boolean for colors radiobox

* Minimap recolor

* Hearts (top left) color, incl. DD variant

* Add A/B/C/Start btn colors and rupee

* A & C button icon and save prompt cursor.

* A & C notes and cursor

* Some notes I forgot tbh was open since hours.

* Shops cursor color with included pulse

* Wrong section was added

* Fixed some logic there and removed an unused if

* Moved a condition to make it better.

* That what happen when you left it open for hours

* Update z_message_PAL.c

* Added color array for A button

* Get/Set/Register Int not needed anymore

* Update Cvar.h

* Update Cvar.cpp

* Removed HUDCOLOR_SECTION moved it to cosmetics

Updated Tunics and navi mod too.

* changed categorie name and updated

* Updated Cosmetics menu and add colors there

* Update GameSettings.cpp

* Update GameSettings.h

* A more generic name

* Update SohImGuiImpl.cpp

* Update bootcommands.c

* update var name

* var name update

* var name update (creative name I know...)

* Updated variables names to match gHudColors

* to lazy to name this one

* gHudColors renaming stuff there too

* guess what, variable renaming.

* Update Tunic/Navi mods with new variable name.

* Updated Links tunic variable names

* Fix condition for Right C button

* Add condition to check if the button is on

* Added system to check if color tunics is turned on.

* Added empty C button colors

* Add ability to move Hearts

* Ability to move minimap (incl. dgn one)

Add Dungeon icon fix requirement. once merged I will fix conflict with this one.

* Compass icon move with the minimap

* Added several button move function

* stone of agony folly the interface too.

* fix minimap alpha

* Fixes notes env color (was showing incorrectly)

* PR repo mass update, cleaning incoming

* Clean_PR stuff

* useless there ...

* Properly load the function.

Imagine creating a pseudo function to load load of colour and you actually forgot to add it, could not be me right , RIGHT ?

* fix conflict and useless edit

* Fix default color for A/B and C btns

* Fix Rupee default color in ImGUI

* Reworked Tunics handling, much better this way

* Fix minimap default color

* C button default color fix

* better behavior and default color fix

* Fixed every default color to match gamecube style

* Fix dungeon entrance icon n.2

it was not using margin and always show icon system

* This need a scene else it show everywhere oof
2022-05-21 13:16:28 -04:00
sholdee 6ccd3ede1a Update soh path for z64 branch (#344)
This check will fail on Windows before it gets merged btw
2022-05-21 13:16:12 -04:00
vaguerant a3cf852267 Fix vanilla Deku Nut upgrade bug (#333) 2022-05-21 13:15:41 -04:00
Baoulettes 226dd3a828 add gSPInvalidateTexCache(); (#274) 2022-05-21 13:14:53 -04:00
Baoulettes 2115111ea8 fix int type, removing default value, should build 2022-05-20 15:08:03 +02:00
Baoulettes c0cd3b5400 Changing int type 2022-05-20 15:07:15 +02:00
Baoulettes 49e15d342d Add definition 2022-05-20 02:44:37 +02:00
Baoulettes bb44350a8f Remove comment and stuff useless 2022-05-20 02:42:53 +02:00
Baoulettes 6229233b5f sizeof fix 2022-05-19 20:00:36 +02:00
Baoulettes d36b641bfb few things in comment needed fix 2022-05-19 19:52:30 +02:00
Baoulettes bc6def77a4 ComboBox Simplification 2022-05-19 19:48:49 +02:00
MelonSpeedruns 72bacabf45 Merge branch 'HarbourMasters:develop' into develop 2022-05-18 11:21:22 -04:00
Ada 52091c2912 Changes forge time into a slider, making it variable 2022-05-17 18:30:16 +01:00
Kenix d3c869871d Merge branch 'zelda64' of https://github.com/HarbourMasters/Shipwright into zelda64 2022-05-16 20:18:24 -04:00
Kenix 7a4da43d7b Audio code converted to uintptr_t 2022-05-16 20:16:56 -04:00
Ada 9f82457830 Adds option for shorter biggoron quest 2022-05-16 15:03:56 +01:00
KiritoDev 8bb988675d Fixed soh filters 2022-05-15 19:39:46 -05:00
PurpleHato 076887e71f TWEAK: Submenus for the enhancement menu (#343)
* TWEAK: Submenus for the enhancement menu

original PR was #322 closed it because I messed it

* Fix for Assignable Tunics and Boots
2022-05-15 15:51:58 -04:00
Emill d8d1388ec6 Optimize away memory allocations (#340) 2022-05-15 15:32:05 -04:00
MegaMech bd6e637fee Readme/building.md changes (#262)
* add python version requirement to BUILDING.md

extract_assets uses match statements which were added in python version 3.10

* update wording/version on python requirement

https://github.com/HarbourMasters/Shipwright/pull/251 removes the 3.10 specific match statements, dropping the python version requirement to 3.6.

* Update BUILDING.md

* Update BUILDING.md

* Update BUILDING.md

* Update BUILDING.md

* switch python link to download page

* Fixed SHA-1 for retail ROM

* Added discord link

Co-authored-by: briaguya <70942617+briaguya-ai@users.noreply.github.com>
Co-authored-by: InfoManiac742 <ryanjgabel@gmail.com>
2022-05-15 15:28:27 -04:00
Rozelette 6dbb085a82 Add equipable tunics/boots (#328) 2022-05-15 15:26:54 -04:00
Emill b9c5b34eba Fix strict aliasing issues (#342)
Should fix linux build on -O2.
2022-05-15 21:20:32 +02:00
Baoulettes a72ebbe84d ACTOR_EN_FLOORMAS splitting fix (#311)
* Fix infinite split

* Update z_en_floormas.c
2022-05-15 15:14:43 -04:00
earthcrafterman 3e01b25573 Add a toggle for muting the low HP alarm (#310)
* Removes the code that plays the low health alarm sound effect, by removing that instead of making HealthMeter_IsCritical always return false, Link will still play the tired animation when low on health.

* Made the low health alarm an enhancement toggle
2022-05-15 15:04:04 -04:00
Sirius902 f217b9bb97 Workaround for rumble duration being too long (#284) 2022-05-15 14:56:09 -04:00
KennyT 4e15f0b3d1 Add The Jenkins Link to the readme (#303)
* Update README.md

* Update README.md

* Update README.md

Fix Build
2022-05-15 14:55:37 -04:00
sholdee e6c959e500 Update platform for z64 branch (#338) 2022-05-15 14:53:00 -04:00
Emil Lenngren bc65a38a55 Fix VS stuff 2022-05-15 19:01:19 +02:00
Emil Lenngren 92c8ecb726 64-bit early draft - no audio yet 2022-05-15 01:19:02 +02:00
Ada 247360cbf0 Adds tooltip function and tooltips to various ImGui menu items (#306)
* Adds tooltip function and tooltips to various ImGui menu items

* Update SohImGuiImpl.cpp

* Adds more tooltips and changes input scale tooltip

Adds for anti-aliasing settings, cheats, and debug settings
Changes tooltip for input scale to be more clear

* Fixes typos, makes N64 mode more clear, and americanizes it

* Update SohImGuiImpl.cpp

* Standardises D-pad spelling

* Update SohImGuiImpl.cpp

* Fixes typo, changes dungeon entrances tooltip, and fixes tabs

* Clearer wording

* Removes full stop

* Removes spaces from new line

* Removes space after \n

* Makes Linux compile

* Fixes wording
2022-05-14 15:08:17 -04:00
PurpleHato 2478ed86eb Tweak: Don't make the fix enabled by default 2022-05-14 14:13:59 -04:00
PurpleHato 2e84a351b1 Used Cvars to make it part of the enhancements menu 2022-05-14 14:13:59 -04:00
PurpleHato 24fd3f1cdd Fixed idle animations for Two Handed Items
Nintendo messed up and used a 0 instead of a 1 which basically pulled the wrong animation to load.
2022-05-14 14:13:59 -04:00
MelonSpeedruns a3a65a1722 Merge branch 'HarbourMasters:develop' into develop 2022-05-12 16:40:15 -04:00
MelonSpeedruns 888662267f Merge branch 'HarbourMasters:develop' into develop 2022-05-11 19:01:38 -04:00
MelonSpeedruns e55dcfa0a0 Merge branch 'HarbourMasters:develop' into develop 2022-05-05 12:09:45 -04:00
MelonSpeedruns c99f10169e Fixed Gyroscopy Settings & Drift 2022-05-01 13:23:40 -04:00
2156 changed files with 266486 additions and 116048 deletions
+46 -2
View File
@@ -7,9 +7,9 @@ __pycache__/
.vscode/
.vs/
.idea/
CMakeLists.txt
cmake-build-debug
venv/
.cache/
# Project-specific ignores
build/
@@ -25,6 +25,10 @@ docs/doxygen/
*.map
*.dump
out.txt
*.sln
*.vcxproj
*.vcxproj.user
*.vcxproj.filters
# Tool artifacts
tools/mipspro7.2_compiler/
@@ -400,4 +404,44 @@ ZAPDUtils/build/
ZAPD/BuildInfo.h
DebugObj/*
ReleaseObj/*
ReleaseObj/*
.tags
tags
oot.otr
*.sav
shipofharkinian.ini
shipofharkinian.json
imgui.ini
# Switch Stuff
*.nro
*.nacp
ZAPDTR/ZAPDUtils/lib/*
!/soh/icon.jpg
# Xcode
xcuserdata/
*.xcconfig
*.xcodeproj/*
!*.xcodeproj/project.pbxproj
!*.xcodeproj/xcshareddata/
!*.xcworkspace/contents.xcworkspacedata
/*.gcno
**/xcshareddata/WorkspaceSettings.xcsettings
# cmake
CMakeLists.txt.user
CMakeCache.txt
CMakeFiles
CMakeScripts
Testing
Makefile
cmake_install.cmake
install_manifest.txt
compile_commands.json
CTestTestfile.cmake
_deps
*/extract_assets_cmake*
/build*
build.c
+186 -39
View File
@@ -2,48 +2,196 @@
## Windows
1. Install [Python](https://www.python.org/downloads/) >= 3.6.
2. Install [Visual Studio 2022 Community Edition](https://visualstudio.microsoft.com/vs/community/)
3. In the Visual Studio Installer, install `MSVC v142 - VS 2019 C++`.
4. Clone the Ship of Harkinian repository.
5. Place one or more [compatible](#compatible-roms) roms in the `OTRExporter` directory with namings of your choice.
6. Run `OTRExporter/OTRExporter.sln`.
7. Switch the solution to `Release x64`.
8. Build the solution.
9. Launching `OTRExporter/extract_assets.py` will generate an `oot.otr` archive file in `OTRExporter/oot.otr`.
10. Run `soh/soh.sln`
11. Switch the solution to `Release x86`.
12. Build the solution.
13. Copy the `OTRExporter/oot.otr` archive file to `soh/Release`.
14. Launch `soh.exe`.
Requires:
* At least 8GB of RAM (machines with 4GB have seen complier failures)
* Visual Studio 2022 Community Edition with the C++ feature set
* One of the Windows SDKs that comes with Visual Studio, for example the current Windows 10 version 10.0.19041.0
* The `MSVC v142 - VS 2019 C++ build tools` component of Visual Studio
* Python 3 (can be installed manually or as part of Visual Studio)
* Git (can be installed manually or as part of Visual Studio)
* Cmake (can be installed via chocolatey or manually)
During installation, check the "Desktop development with C++" feature set:
![image](https://user-images.githubusercontent.com/30329717/183511274-d11aceea-7900-46ec-acb6-3f2cc110021a.png)
Doing so should also check one of the Windows SDKs by default. Then, in the installation details in the right-hand column, make sure you also check the v142 toolset.
You can also find the v142 toolset by searching through the individual components tab:
![image](https://user-images.githubusercontent.com/30329717/183521169-ead6a73b-a1bf-4e99-aab8-441746d8f08e.png)
While you're there, you can also install Python 3 and Git if needed.
1. Clone the Ship of Harkinian repository
2. Place one or more [compatible](#compatible-roms) roms in the `OTRExporter` directory with namings of your choice
_Note: Instructions assume using powershell_
```powershell
# Navigate to the Shipwright repo within powershell. ie: cd "C:\yourpath\Shipwright"
cd Shipwright
# Setup cmake project
& 'C:\Program Files\CMake\bin\cmake' -S . -B "build/x64" -G "Visual Studio 17 2022" -T v142 -A x64 # -DCMAKE_BUILD_TYPE:STRING=Release (if you're packaging)
# or for VS2019
& 'C:\Program Files\CMake\bin\cmake' -S . -B "build/x64" -G "Visual Studio 16 2019" -T v142 -A x64
# Extract assets & generate OTR (run this anytime you need to regenerate OTR)
& 'C:\Program Files\CMake\bin\cmake.exe' --build .\build\x64 --target ExtractAssets # --config Release (if you're packaging)
# Compile project
& 'C:\Program Files\CMake\bin\cmake.exe' --build .\build\x64 # --config Release (if you're packaging)
# Now you can run the executable in .\build\x64
# If you need to clean the project you can run
& 'C:\Program Files\CMake\bin\cmake.exe' --build .\build\x64 --target clean
```
### Developing SoH
With the cmake build system you have two options for working on the project:
#### Visual Studio
To develop using Visual Studio you only need to use cmake to generate the solution file:
```powershell
# Generates Ship.sln at `build/x64` for Visual Studio 2022
& 'C:\Program Files\CMake\bin\cmake' -S . -B "build/x64" -G "Visual Studio 17 2022" -T v142 -A x64
# or for Visual Studio 2019
& 'C:\Program Files\CMake\bin\cmake' -S . -B "build/x64" -G "Visual Studio 16 2019" -T v142 -A x64
```
#### Visual Studio Code or another editor
To develop using Visual Studio Code or another editor you only need to open the repository in it.
To build you'll need to follow the instructions from the building section.
_Note: If you're using Visual Studio Code, the [cpack plugin](https://marketplace.visualstudio.com/items?itemName=ms-vscode.cmake-tools) makes it very easy to just press run and debug._
_Experimental: You can also use another build system entirely rather than MSVC like [Ninja](https://ninja-build.org/) for possibly better performance._
### Generating the distributable
After compiling the project you can generate the distributable by running:
```powershell
# Go to build folder
cd "build/x64"
# Generate
& 'C:\Program Files\CMake\bin\cpack.exe' -G ZIP
```
## Linux
Requires `gcc >= 10, x11, curl, python3, sdl2 >= 2.0.22, libpng, glew >= 2.2, ninja, cmake, lld`
**Important: For maximum performance make sure you have ninja build tools installed!**
_Note: If you're using Visual Studio Code, the [cpack plugin](https://marketplace.visualstudio.com/items?itemName=ms-vscode.cmake-tools) makes it very easy to just press run and debug._
```bash
# Clone the repo
git clone git@github.com:HarbourMasters/ShipWright.git
git clone https://github.com/HarbourMasters/Shipwright.git
cd Shipwright
# Copy the baserom to the OTRExporter folder
cp <path to your ROM> OTRExporter
# Generate Ninja project
cmake -H. -Bbuild-cmake -GNinja # -DCMAKE_BUILD_TYPE:STRING=Release (if you're packaging)
# Extract assets & generate OTR (run this anytime you need to regenerate OTR)
cmake --build build-cmake --target ExtractAssets
# Compile the project
cmake --build build-cmake # --config Release (if you're packaging)
# Now you can run the executable in ./build-cmake/soh/soh.elf
# To develop the project open the repository in VSCode (or your preferred editor)
# If you need to clean the project you can run
cmake --build build-cmake --target clean
```
### Generating a distributable
After compiling the project you can generate a distributable by running of the following:
```bash
# Go to build folder
cd build-cmake
# Generate
cpack -G DEB
cpack -G ZIP
cpack -G External (creates appimage)
```
## macOS
Requires Xcode (or xcode-tools) && `sdl2, libpng, glew, ninja, cmake` (can be installed via homebrew, macports, etc)
**Important: For maximum performance make sure you have ninja build tools installed!**
_Note: If you're using Visual Studio Code, the [cpack plugin](https://marketplace.visualstudio.com/items?itemName=ms-vscode.cmake-tools) makes it very easy to just press run and debug._
```bash
# Clone the repo
git clone https://github.com/HarbourMasters/Shipwright.git
cd ShipWright
# Copy the baserom to the OTRExporter folder
cp <path to your ROM> OTRExporter
# Build the docker image
sudo docker build . -t soh
# Run the docker image with the working directory mounted to /soh
sudo docker run --rm -it -v $(pwd):/soh soh /bin/bash
```
Inside the Docker container:
```bash
# Clone and build StormLib
git clone https://github.com/ladislav-zezula/StormLib external/StormLib
cmake -B external/StormLib/build -S external/StormLib
cmake --build external/StormLib/build
cp external/StormLib/build/libstorm.a external
cp /usr/local/lib/libGLEW.a external
# Generate Ninja project
cmake -H. -Bbuild-cmake -GNinja # -DCMAKE_BUILD_TYPE:STRING=Release (if you're packaging)
# Extract assets & generate OTR (run this anytime you need to regenerate OTR)
cmake --build build-cmake --target ExtractAssets
# Compile the project
cmake --build build-cmake # --config Release (if you're packaging)
cd soh
# Extract the assets/Compile the exporter/Run the exporter
make setup -j$(nproc) OPTFLAGS=-O0 DEBUG=0
# Compile the code
make -j $(nproc) OPTFLAGS=-O0 DEBUG=0
# Copy oot.otr into the Application Support directory
cp build-cmake/soh/oot.otr ~/Library/Application\ Support/com.shipofharkinian.soh/
# Now you can run the executable file:
./build-cmake/soh/soh-macos
# To develop the project open the repository in VSCode (or your preferred editor)
# If you need to clean the project you can run
cmake --build build-cmake --target clean
```
### Generating a distributable
After compiling the project you can generate a distributable by running of the following:
```bash
# Go to build folder
cd build-cmake
# Generate
cpack
```
## Switch
1. Requires that your build machine is setup with the tools necessary for your platform above
2. Requires that you have the switch build tools installed
3. Clone the Ship of Harkinian repository
4. Place one or more [compatible](#compatible-roms) roms in the `OTRExporter` directory with namings of your choice
```bash
cd Shipwright
# Setup cmake project for your host machine
cmake -H. -Bbuild-cmake -GNinja
# Extract assets & generate OTR (run this anytime you need to regenerate OTR)
cmake --build build-cmake --target ExtractAssets
# Setup cmake project for building for Switch
cmake -H. -Bbuild-switch -GNinja -DCMAKE_TOOLCHAIN_FILE=/opt/devkitpro/cmake/Switch.cmake
# Build project and generate nro
cmake --build build-switch --target soh_nro
# Now you can run the executable in ./build-switch/soh/soh.nro
# To develop the project open the repository in VSCode (or your preferred editor)
```
## Wii U
1. Requires that your build machine is setup with the tools necessary for your platform above
2. Requires that you have the Wii U build tools installed
3. Clone the Ship of Harkinian repository
4. Place one or more [compatible](#compatible-roms) roms in the `OTRExporter` directory with namings of your choice
```bash
cd Shipwright
# Setup cmake project for your host machine
cmake -H. -Bbuild-cmake -GNinja
# Extract assets & generate OTR (run this anytime you need to regenerate OTR)
cmake --build build-cmake --target ExtractAssets
# Setup cmake project for building for Wii U
cmake -H. -Bbuild-wiiu -GNinja -DCMAKE_TOOLCHAIN_FILE=/opt/devkitpro/cmake/WiiU.cmake # -DCMAKE_BUILD_TYPE:STRING=Release (if you're packaging)
# Build project and generate rpx
cmake --build build-wiiu --target soh # --target soh_wuhb (for building .wuhb)
# Now you can run the executable in ./build-wiiu/soh/soh.rpx or the Wii U Homebrew Bundle in ./build-wiiu/soh/soh.wuhb
# To develop the project open the repository in VSCode (or your preferred editor)
```
# Compatible Roms
@@ -57,10 +205,9 @@ OOT_PAL_GC_DBG1 checksum 0x871E1C92 (debug non-master quest)
The OTRExporter exports an `oot.otr` archive file which Ship of Harkinian requires to play.
Use the `extract_assets.py` script file to run the exporter using any of the following methods:
1) Double click on the script after placing one or more roms in the directory.
2) Drag & Drop a rom onto the script.
3) In a terminal run `python3 extract_assets.py` after placing one or more roms in the directory.
4) In a terminal run `python3 extract_assets.py <path_to_rom>`
1. Double click on the script after placing one or more roms in the directory.
2. Drag & Drop a rom onto the script.
3. In a terminal run `python3 extract_assets.py` after placing one or more roms in the directory.
4. In a terminal run `python3 extract_assets.py <path_to_rom>`
If the script finds multiple roms the user is prompted which to use. Selection is done using the number keys and then pressing the carriage return key.
If the script finds multiple roms the user is prompted which to use. Selection is done using the number keys and then pressing the carriage return key.
+65
View File
@@ -0,0 +1,65 @@
################################################################################
# Command for variable_watch. This command issues error message, if a variable
# is changed. If variable PROPERTY_READER_GUARD_DISABLED is TRUE nothing happens
# variable_watch(<variable> property_reader_guard)
################################################################################
function(property_reader_guard VARIABLE ACCESS VALUE CURRENT_LIST_FILE STACK)
if("${PROPERTY_READER_GUARD_DISABLED}")
return()
endif()
if("${ACCESS}" STREQUAL "MODIFIED_ACCESS")
message(FATAL_ERROR
" Variable ${VARIABLE} is not supposed to be changed.\n"
" It is used only for reading target property ${VARIABLE}.\n"
" Use\n"
" set_target_properties(\"<target>\" PROPERTIES \"${VARIABLE}\" \"<value>\")\n"
" or\n"
" set_target_properties(\"<target>\" PROPERTIES \"${VARIABLE}_<CONFIG>\" \"<value>\")\n"
" instead.\n")
endif()
endfunction()
################################################################################
# Create variable <name> with generator expression that expands to value of
# target property <name>_<CONFIG>. If property is empty or not set then property
# <name> is used instead. Variable <name> has watcher property_reader_guard that
# doesn't allow to edit it.
# create_property_reader(<name>)
# Input:
# name - Name of watched property and output variable
################################################################################
function(create_property_reader NAME)
set(PROPERTY_READER_GUARD_DISABLED TRUE)
set(CONFIG_VALUE "$<TARGET_GENEX_EVAL:${PROPS_TARGET},$<TARGET_PROPERTY:${PROPS_TARGET},${NAME}_$<UPPER_CASE:$<CONFIG>>>>")
set(IS_CONFIG_VALUE_EMPTY "$<STREQUAL:${CONFIG_VALUE},>")
set(GENERAL_VALUE "$<TARGET_GENEX_EVAL:${PROPS_TARGET},$<TARGET_PROPERTY:${PROPS_TARGET},${NAME}>>")
set("${NAME}" "$<IF:${IS_CONFIG_VALUE_EMPTY},${GENERAL_VALUE},${CONFIG_VALUE}>" PARENT_SCOPE)
variable_watch("${NAME}" property_reader_guard)
endfunction()
################################################################################
# Set property $<name>_${PROPS_CONFIG_U} of ${PROPS_TARGET} to <value>
# set_config_specific_property(<name> <value>)
# Input:
# name - Prefix of property name
# value - New value
################################################################################
function(set_config_specific_property NAME VALUE)
set_target_properties("${PROPS_TARGET}" PROPERTIES "${NAME}_${PROPS_CONFIG_U}" "${VALUE}")
endfunction()
################################################################################
create_property_reader("TARGET_NAME")
create_property_reader("OUTPUT_DIRECTORY")
set_config_specific_property("TARGET_NAME" "${PROPS_TARGET}")
set_config_specific_property("OUTPUT_NAME" "${TARGET_NAME}")
set_config_specific_property("ARCHIVE_OUTPUT_NAME" "${TARGET_NAME}")
set_config_specific_property("LIBRARY_OUTPUT_NAME" "${TARGET_NAME}")
set_config_specific_property("RUNTIME_OUTPUT_NAME" "${TARGET_NAME}")
set_config_specific_property("ARCHIVE_OUTPUT_DIRECTORY" "${OUTPUT_DIRECTORY}")
set_config_specific_property("LIBRARY_OUTPUT_DIRECTORY" "${OUTPUT_DIRECTORY}")
set_config_specific_property("RUNTIME_OUTPUT_DIRECTORY" "${OUTPUT_DIRECTORY}")
+12
View File
@@ -0,0 +1,12 @@
include("${CMAKE_CURRENT_LIST_DIR}/Default.cmake")
set_config_specific_property("OUTPUT_DIRECTORY" "${CMAKE_SOURCE_DIR}$<$<NOT:$<STREQUAL:${CMAKE_VS_PLATFORM_NAME},Win32>>:/${CMAKE_VS_PLATFORM_NAME}>/${PROPS_CONFIG}")
if(MSVC)
create_property_reader("DEFAULT_CXX_EXCEPTION_HANDLING")
create_property_reader("DEFAULT_CXX_DEBUG_INFORMATION_FORMAT")
set_target_properties("${PROPS_TARGET}" PROPERTIES MSVC_RUNTIME_LIBRARY "MultiThreaded$<$<CONFIG:Debug>:Debug>DLL")
set_config_specific_property("DEFAULT_CXX_EXCEPTION_HANDLING" "/EHsc")
set_config_specific_property("DEFAULT_CXX_DEBUG_INFORMATION_FORMAT" "/Zi")
endif()
+30
View File
@@ -0,0 +1,30 @@
set(CPACK_ARCHIVE_COMPONENT_INSTALL ON)
set(CPACK_COMPONENT_INCLUDE_TOPLEVEL_DIRECTORY 0)
set(CPACK_COMPONENTS_ALL "ship" "appimage")
if (NOT CPACK_GENERATOR STREQUAL "External")
list(REMOVE_ITEM CPACK_COMPONENTS_ALL "appimage")
endif()
if (CPACK_GENERATOR MATCHES "DEB|RPM")
# https://unix.stackexchange.com/a/11552/254512
set(CPACK_PACKAGING_INSTALL_PREFIX "/opt/ship/bin")#/${CMAKE_PROJECT_VERSION}")
set(CPACK_COMPONENT_INCLUDE_TOPLEVEL_DIRECTORY 0)
elseif (CPACK_GENERATOR MATCHES "ZIP")
set(CPACK_PACKAGING_INSTALL_PREFIX "")
endif()
if (CPACK_GENERATOR MATCHES "External")
set(CPACK_ARCHIVE_COMPONENT_INSTALL ON)
SET(CPACK_MONOLITHIC_INSTALL 1)
set(CPACK_PACKAGING_INSTALL_PREFIX "/usr/bin")
endif()
if (CPACK_GENERATOR MATCHES "Bundle")
set(CPACK_BUNDLE_NAME "soh")
set(CPACK_BUNDLE_PLIST "../soh/macosx/Info.plist")
set(CPACK_BUNDLE_ICON "macosx/soh.icns")
set(CPACK_BUNDLE_STARTUP_COMMAND "../soh/macosx/soh-macos.sh")
set(CPACK_BUNDLE_APPLE_CERT_APP "-")
endif()
+90
View File
@@ -0,0 +1,90 @@
# these are cache variables, so they could be overwritten with -D,
set(CPACK_PACKAGE_NAME "${PROJECT_NAME}"
CACHE STRING "The resulting package name"
)
set(CPACK_PACKAGE_DESCRIPTION_SUMMARY "Simple C++ application"
CACHE STRING "Package description for the package metadata"
)
set(CPACK_PACKAGE_VENDOR "Some Company")
set(CPACK_VERBATIM_VARIABLES YES)
set(CPACK_PACKAGE_INSTALL_DIRECTORY ${CPACK_PACKAGE_NAME})
SET(CPACK_OUTPUT_FILE_PREFIX "${CMAKE_SOURCE_DIR}/_packages")
set(CPACK_PACKAGE_VERSION_MAJOR ${PROJECT_VERSION_MAJOR})
set(CPACK_PACKAGE_VERSION_MINOR ${PROJECT_VERSION_MINOR})
set(CPACK_PACKAGE_VERSION_PATCH ${PROJECT_VERSION_PATCH})
set(CPACK_PACKAGE_VERSION "${CPACK_PACKAGE_VERSION_MAJOR}.${CPACK_PACKAGE_VERSION_MINOR}.${CPACK_PACKAGE_VERSION_PATCH}")
set(CPACK_PACKAGE_CONTACT "YOUR@E-MAIL.net")
set(CPACK_DEBIAN_PACKAGE_MAINTAINER "YOUR NAME")
#set(CPACK_RESOURCE_FILE_LICENSE "${CMAKE_CURRENT_SOURCE_DIR}/LICENSE")
set(CPACK_RESOURCE_FILE_README "${CMAKE_SOURCE_DIR}/README.md")
if (CMAKE_SYSTEM_NAME STREQUAL "Linux")
set(CPACK_SYSTEM_NAME ${LSB_RELEASE_CODENAME_SHORT})
# package name for deb
# if set, then instead of some-application-0.9.2-Linux.deb
# you'll get some-application_0.9.2_amd64.deb (note the underscores too)
#set(CPACK_DEBIAN_FILE_NAME DEB-DEFAULT)
execute_process(COMMAND dpkg --print-architecture OUTPUT_VARIABLE ARCHITECTURE OUTPUT_STRIP_TRAILING_WHITESPACE)
set( CPACK_DEBIAN_FILE_NAME ${CPACK_PACKAGE_NAME}-${CPACK_PACKAGE_VERSION}-${CPACK_SYSTEM_NAME}-${ARCHITECTURE}.deb )
# if you want every group to have its own package,
# although the same happens if this is not sent (so it defaults to ONE_PER_GROUP)
# and CPACK_DEB_COMPONENT_INSTALL is set to YES
set(CPACK_COMPONENTS_GROUPING ALL_COMPONENTS_IN_ONE)#ONE_PER_GROUP)
# without this you won't be able to pack only specified component
set(CPACK_DEB_COMPONENT_INSTALL YES)
set(CPACK_EXTERNAL_ENABLE_STAGING YES)
set(CPACK_EXTERNAL_PACKAGE_SCRIPT "${PROJECT_BINARY_DIR}/appimage-generate.cmake")
file(GENERATE
OUTPUT "${PROJECT_BINARY_DIR}/appimage-generate.cmake"
CONTENT [[
include(CMakePrintHelpers)
cmake_print_variables(CPACK_TEMPORARY_DIRECTORY)
cmake_print_variables(CPACK_TOPLEVEL_DIRECTORY)
cmake_print_variables(CPACK_PACKAGE_DIRECTORY)
cmake_print_variables(CPACK_PACKAGE_FILE_NAME)
find_program(LINUXDEPLOY_EXECUTABLE
NAMES linuxdeploy linuxdeploy-x86_64.AppImage
PATHS ${CPACK_PACKAGE_DIRECTORY}/linuxdeploy)
if (NOT LINUXDEPLOY_EXECUTABLE)
message(STATUS "Downloading linuxdeploy")
set(LINUXDEPLOY_EXECUTABLE ${CPACK_PACKAGE_DIRECTORY}/linuxdeploy/linuxdeploy)
file(DOWNLOAD
https://github.com/linuxdeploy/linuxdeploy/releases/download/continuous/linuxdeploy-x86_64.AppImage
${LINUXDEPLOY_EXECUTABLE}
INACTIVITY_TIMEOUT 10
LOG ${CPACK_PACKAGE_DIRECTORY}/linuxdeploy/download.log
STATUS LINUXDEPLOY_DOWNLOAD)
execute_process(COMMAND chmod +x ${LINUXDEPLOY_EXECUTABLE} COMMAND_ECHO STDOUT)
endif()
execute_process(
COMMAND
${CMAKE_COMMAND} -E env
OUTPUT=${CPACK_PACKAGE_FILE_NAME}.appimage
VERSION=$<IF:$<BOOL:${CPACK_PACKAGE_VERSION}>,${CPACK_PACKAGE_VERSION},0.1.0>
${LINUXDEPLOY_EXECUTABLE}
--appimage-extract-and-run
--appdir=${CPACK_TEMPORARY_DIRECTORY}
--executable=$<TARGET_FILE:soh>
$<$<BOOL:$<TARGET_PROPERTY:soh,APPIMAGE_DESKTOP_FILE>>:--desktop-file=$<TARGET_PROPERTY:soh,APPIMAGE_DESKTOP_FILE>>
$<$<BOOL:$<TARGET_PROPERTY:soh,APPIMAGE_ICON_FILE>>:--icon-file=$<TARGET_PROPERTY:soh,APPIMAGE_ICON_FILE>>
--output=appimage
# --verbosity=2
)
]])
endif()
include(CPack)
+248
View File
@@ -0,0 +1,248 @@
# utils file for projects came from visual studio solution with cmake-converter.
################################################################################
# Wrap each token of the command with condition
################################################################################
cmake_policy(PUSH)
cmake_policy(SET CMP0054 NEW)
macro(prepare_commands)
unset(TOKEN_ROLE)
unset(COMMANDS)
foreach(TOKEN ${ARG_COMMANDS})
if("${TOKEN}" STREQUAL "COMMAND")
set(TOKEN_ROLE "KEYWORD")
elseif("${TOKEN_ROLE}" STREQUAL "KEYWORD")
set(TOKEN_ROLE "CONDITION")
elseif("${TOKEN_ROLE}" STREQUAL "CONDITION")
set(TOKEN_ROLE "COMMAND")
elseif("${TOKEN_ROLE}" STREQUAL "COMMAND")
set(TOKEN_ROLE "ARG")
endif()
if("${TOKEN_ROLE}" STREQUAL "KEYWORD")
list(APPEND COMMANDS "${TOKEN}")
elseif("${TOKEN_ROLE}" STREQUAL "CONDITION")
set(CONDITION ${TOKEN})
elseif("${TOKEN_ROLE}" STREQUAL "COMMAND")
list(APPEND COMMANDS "$<$<NOT:${CONDITION}>:${DUMMY}>$<${CONDITION}:${TOKEN}>")
elseif("${TOKEN_ROLE}" STREQUAL "ARG")
list(APPEND COMMANDS "$<${CONDITION}:${TOKEN}>")
endif()
endforeach()
endmacro()
cmake_policy(POP)
################################################################################
# Transform all the tokens to absolute paths
################################################################################
macro(prepare_output)
unset(OUTPUT)
foreach(TOKEN ${ARG_OUTPUT})
if(IS_ABSOLUTE ${TOKEN})
list(APPEND OUTPUT "${TOKEN}")
else()
list(APPEND OUTPUT "${CMAKE_CURRENT_SOURCE_DIR}/${TOKEN}")
endif()
endforeach()
endmacro()
################################################################################
# Parse add_custom_command_if args.
#
# Input:
# PRE_BUILD - Pre build event option
# PRE_LINK - Pre link event option
# POST_BUILD - Post build event option
# TARGET - Target
# OUTPUT - List of output files
# DEPENDS - List of files on which the command depends
# COMMANDS - List of commands(COMMAND condition1 commannd1 args1 COMMAND
# condition2 commannd2 args2 ...)
# Output:
# OUTPUT - Output files
# DEPENDS - Files on which the command depends
# COMMENT - Comment
# PRE_BUILD - TRUE/FALSE
# PRE_LINK - TRUE/FALSE
# POST_BUILD - TRUE/FALSE
# TARGET - Target name
# COMMANDS - Prepared commands(every token is wrapped in CONDITION)
# NAME - Unique name for custom target
# STEP - PRE_BUILD/PRE_LINK/POST_BUILD
################################################################################
function(add_custom_command_if_parse_arguments)
cmake_parse_arguments("ARG" "PRE_BUILD;PRE_LINK;POST_BUILD" "TARGET;COMMENT" "DEPENDS;OUTPUT;COMMANDS" ${ARGN})
if(WIN32)
set(DUMMY "cd.")
elseif(UNIX)
set(DUMMY "true")
endif()
prepare_commands()
prepare_output()
set(DEPENDS "${ARG_DEPENDS}")
set(COMMENT "${ARG_COMMENT}")
set(PRE_BUILD "${ARG_PRE_BUILD}")
set(PRE_LINK "${ARG_PRE_LINK}")
set(POST_BUILD "${ARG_POST_BUILD}")
set(TARGET "${ARG_TARGET}")
if(PRE_BUILD)
set(STEP "PRE_BUILD")
elseif(PRE_LINK)
set(STEP "PRE_LINK")
elseif(POST_BUILD)
set(STEP "POST_BUILD")
endif()
set(NAME "${TARGET}_${STEP}")
set(OUTPUT "${OUTPUT}" PARENT_SCOPE)
set(DEPENDS "${DEPENDS}" PARENT_SCOPE)
set(COMMENT "${COMMENT}" PARENT_SCOPE)
set(PRE_BUILD "${PRE_BUILD}" PARENT_SCOPE)
set(PRE_LINK "${PRE_LINK}" PARENT_SCOPE)
set(POST_BUILD "${POST_BUILD}" PARENT_SCOPE)
set(TARGET "${TARGET}" PARENT_SCOPE)
set(COMMANDS "${COMMANDS}" PARENT_SCOPE)
set(STEP "${STEP}" PARENT_SCOPE)
set(NAME "${NAME}" PARENT_SCOPE)
endfunction()
################################################################################
# Add conditional custom command
#
# Generating Files
# The first signature is for adding a custom command to produce an output:
# add_custom_command_if(
# <OUTPUT output1 [output2 ...]>
# <COMMANDS>
# <COMMAND condition command1 [args1...]>
# [COMMAND condition command2 [args2...]]
# [DEPENDS [depends...]]
# [COMMENT comment]
#
# Build Events
# add_custom_command_if(
# <TARGET target>
# <PRE_BUILD | PRE_LINK | POST_BUILD>
# <COMMAND condition command1 [args1...]>
# [COMMAND condition command2 [args2...]]
# [COMMENT comment]
#
# Input:
# output - Output files the command is expected to produce
# condition - Generator expression for wrapping the command
# command - Command-line(s) to execute at build time.
# args - Command`s args
# depends - Files on which the command depends
# comment - Display the given message before the commands are executed at
# build time.
# PRE_BUILD - Run before any other rules are executed within the target
# PRE_LINK - Run after sources have been compiled but before linking the
# binary
# POST_BUILD - Run after all other rules within the target have been
# executed
################################################################################
function(add_custom_command_if)
add_custom_command_if_parse_arguments(${ARGN})
if(OUTPUT AND TARGET)
message(FATAL_ERROR "Wrong syntax. A TARGET and OUTPUT can not both be specified.")
endif()
if(OUTPUT)
add_custom_command(OUTPUT ${OUTPUT}
${COMMANDS}
DEPENDS ${DEPENDS}
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
COMMENT ${COMMENT})
elseif(TARGET)
if(PRE_BUILD AND NOT ${CMAKE_GENERATOR} MATCHES "Visual Studio")
add_custom_target(
${NAME}
${COMMANDS}
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
COMMENT ${COMMENT})
add_dependencies(${TARGET} ${NAME})
else()
add_custom_command(
TARGET ${TARGET}
${STEP}
${COMMANDS}
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
COMMENT ${COMMENT})
endif()
else()
message(FATAL_ERROR "Wrong syntax. A TARGET or OUTPUT must be specified.")
endif()
endfunction()
################################################################################
# Use props file for a target and configs
# use_props(<target> <configs...> <props_file>)
# Inside <props_file> there are following variables:
# PROPS_TARGET - <target>
# PROPS_CONFIG - One of <configs...>
# PROPS_CONFIG_U - Uppercase PROPS_CONFIG
# Input:
# target - Target to apply props file
# configs - Build configurations to apply props file
# props_file - CMake script
################################################################################
macro(use_props TARGET CONFIGS PROPS_FILE)
set(PROPS_TARGET "${TARGET}")
foreach(PROPS_CONFIG ${CONFIGS})
string(TOUPPER "${PROPS_CONFIG}" PROPS_CONFIG_U)
get_filename_component(ABSOLUTE_PROPS_FILE "${PROPS_FILE}" ABSOLUTE BASE_DIR "${CMAKE_CURRENT_LIST_DIR}")
if(EXISTS "${ABSOLUTE_PROPS_FILE}")
include("${ABSOLUTE_PROPS_FILE}")
else()
message(WARNING "Corresponding cmake file from props \"${ABSOLUTE_PROPS_FILE}\" doesn't exist")
endif()
endforeach()
endmacro()
################################################################################
# Add compile options to source file
# source_file_compile_options(<source_file> [compile_options...])
# Input:
# source_file - Source file
# compile_options - Options to add to COMPILE_FLAGS property
################################################################################
function(source_file_compile_options SOURCE_FILE)
if("${ARGC}" LESS_EQUAL "1")
return()
endif()
get_source_file_property(COMPILE_OPTIONS "${SOURCE_FILE}" COMPILE_OPTIONS)
if(COMPILE_OPTIONS)
list(APPEND COMPILE_OPTIONS ${ARGN})
else()
set(COMPILE_OPTIONS "${ARGN}")
endif()
set_source_files_properties("${SOURCE_FILE}" PROPERTIES COMPILE_OPTIONS "${COMPILE_OPTIONS}")
endfunction()
################################################################################
# Default properties of visual studio projects
################################################################################
set(DEFAULT_CXX_PROPS "${CMAKE_CURRENT_LIST_DIR}/DefaultCXX.cmake")
function(get_linux_lsb_release_information)
find_program(LSB_RELEASE_EXEC lsb_release)
if(NOT LSB_RELEASE_EXEC)
message(FATAL_ERROR "Could not detect lsb_release executable, can not gather required information")
endif()
execute_process(COMMAND "${LSB_RELEASE_EXEC}" --short --id OUTPUT_VARIABLE LSB_RELEASE_ID_SHORT OUTPUT_STRIP_TRAILING_WHITESPACE)
execute_process(COMMAND "${LSB_RELEASE_EXEC}" --short --release OUTPUT_VARIABLE LSB_RELEASE_VERSION_SHORT OUTPUT_STRIP_TRAILING_WHITESPACE)
execute_process(COMMAND "${LSB_RELEASE_EXEC}" --short --codename OUTPUT_VARIABLE LSB_RELEASE_CODENAME_SHORT OUTPUT_STRIP_TRAILING_WHITESPACE)
set(LSB_RELEASE_ID_SHORT "${LSB_RELEASE_ID_SHORT}" PARENT_SCOPE)
set(LSB_RELEASE_VERSION_SHORT "${LSB_RELEASE_VERSION_SHORT}" PARENT_SCOPE)
set(LSB_RELEASE_CODENAME_SHORT "${LSB_RELEASE_CODENAME_SHORT}" PARENT_SCOPE)
endfunction()
+191
View File
@@ -0,0 +1,191 @@
#------------------------------------------------------------------------------------------------------------
#
# Automate-VCPKG by Andre Taulien
# ===============================
#
# Project Repository: https://github.com/REGoth-project/Automate-VCPKG
# License ..........: MIT, see end of file.
#
# Based on: https://github.com/sutambe/cpptruths/blob/vcpkg_cmake_blog/cpp0x/vcpkg_test/CMakeLists.txt
#
#
# While [Vcpkg](https://github.com/microsoft/vcpkg) on it's own is awesome, it does add
# a little bit of complexity to getting a project to build. Even more if the one trying
# to compile your application is not too fond of the commandline. Additionally, CMake
# commands tend to get rather long with the toolchain path.
#
# To keep things simple for new users who just want to get the project to build, this
# script offers a solution.
#
# Lets assume your main `CMakelists.txt` looks something like this:
#
# cmake_minimum_required (VERSION 3.12.0)
# project (MyProject)
#
# add_executable(MyExecutable main.c)
#
# To integrate Vcpkg into that `CMakelists.txt`, simple put the following lines before the
# call to `project(MyProject)`:
#
# include(cmake/automate-vcpkg.cmake)
#
# vcpkg_bootstrap()
# vcpkg_install_packages(libsquish physfs)
#
# The call to `vcpkg_bootstrap()` will clone the official Vcpkg repository and bootstrap it.
# If it detected an existing environment variable defining a valid `VCPKG_ROOT`, it will
# update the existing installation of Vcpkg.
#
# Arguments to `vcpkg_install_packages()` are the packages you want to install using Vcpkg.
#
# If you want to keep the possibility for users to chose their own copy of Vcpkg, you can
# simply not run the code snippet mentioned above, something like this will work:
#
# option(SKIP_AUTOMATE_VCPKG "When ON, you will need to built the packages
# required by MyProject on your own or supply your own vcpkg toolchain.")
#
# if (NOT SKIP_AUTOMATE_VCPKG)
# include(cmake/automate-vcpkg.cmake)
#
# vcpkg_bootstrap()
# vcpkg_install_packages(libsquish physfs)
# endif()
#
# Then, the user has to supply the packages on their own, be it through Vcpkg or manually
# specifying their locations.
#------------------------------------------------------------------------------------------------------------
cmake_minimum_required (VERSION 3.12)
if(WIN32)
set(VCPKG_FALLBACK_ROOT ${CMAKE_CURRENT_BINARY_DIR}/vcpkg CACHE STRING "vcpkg configuration directory to use if vcpkg was not installed on the system before")
else()
set(VCPKG_FALLBACK_ROOT ${CMAKE_CURRENT_BINARY_DIR}/.vcpkg CACHE STRING "vcpkg configuration directory to use if vcpkg was not installed on the system before")
endif()
# On Windows, Vcpkg defaults to x86, even on x64 systems. If we're
# doing a 64-bit build, we need to fix that.
if (WIN32)
# Since the compiler checks haven't run yet, we need to figure
# out the value of CMAKE_SIZEOF_VOID_P ourselfs
include(CheckTypeSize)
enable_language(C)
check_type_size("void*" SIZEOF_VOID_P BUILTIN_TYPES_ONLY)
if (SIZEOF_VOID_P EQUAL 8)
message(STATUS "Using Vcpkg triplet 'x64-windows'")
set(VCPKG_TRIPLET x64-windows)
endif()
endif()
if(NOT DEFINED VCPKG_ROOT)
if(NOT DEFINED ENV{VCPKG_ROOT})
set(VCPKG_ROOT ${VCPKG_FALLBACK_ROOT})
else()
set(VCPKG_ROOT $ENV{VCPKG_ROOT})
endif()
endif()
# Installs a new copy of Vcpkg or updates an existing one
macro(vcpkg_bootstrap)
_install_or_update_vcpkg()
# Find out whether the user supplied their own VCPKG toolchain file
if(NOT DEFINED ${CMAKE_TOOLCHAIN_FILE})
# We know this wasn't set before so we need point the toolchain file to the newly found VCPKG_ROOT
set(CMAKE_TOOLCHAIN_FILE ${VCPKG_ROOT}/scripts/buildsystems/vcpkg.cmake CACHE STRING "")
# Just setting vcpkg.cmake as toolchain file does not seem to actually pull in the code
include(${VCPKG_ROOT}/scripts/buildsystems/vcpkg.cmake)
set(AUTOMATE_VCPKG_USE_SYSTEM_VCPKG OFF)
else()
# VCPKG_ROOT has been defined by the toolchain file already
set(AUTOMATE_VCPKG_USE_SYSTEM_VCPKG ON)
endif()
message(STATUS "Automate VCPKG status:")
message(STATUS " VCPKG_ROOT.....: ${VCPKG_ROOT}")
message(STATUS " VCPKG_EXEC.....: ${VCPKG_EXEC}")
message(STATUS " VCPKG_BOOTSTRAP: ${VCPKG_BOOTSTRAP}")
endmacro()
macro(_install_or_update_vcpkg)
if(NOT EXISTS ${VCPKG_ROOT})
message(STATUS "Cloning vcpkg in ${VCPKG_ROOT}")
execute_process(COMMAND git clone https://github.com/Microsoft/vcpkg.git ${VCPKG_ROOT})
# If a reproducible build is desired (and potentially old libraries are # ok), uncomment the
# following line and pin the vcpkg repository to a specific githash.
# execute_process(COMMAND git checkout 745a0aea597771a580d0b0f4886ea1e3a94dbca6 WORKING_DIRECTORY ${VCPKG_ROOT})
else()
# The following command has no effect if the vcpkg repository is in a detached head state.
message(STATUS "Auto-updating vcpkg in ${VCPKG_ROOT}")
execute_process(COMMAND git pull WORKING_DIRECTORY ${VCPKG_ROOT})
endif()
if(NOT EXISTS ${VCPKG_ROOT}/README.md)
message(FATAL_ERROR "***** FATAL ERROR: Could not clone vcpkg *****")
endif()
if(WIN32)
set(VCPKG_EXEC ${VCPKG_ROOT}/vcpkg.exe)
set(VCPKG_BOOTSTRAP ${VCPKG_ROOT}/bootstrap-vcpkg.bat)
else()
set(VCPKG_EXEC ${VCPKG_ROOT}/vcpkg)
set(VCPKG_BOOTSTRAP ${VCPKG_ROOT}/bootstrap-vcpkg.sh)
endif()
if(NOT EXISTS ${VCPKG_EXEC})
message("Bootstrapping vcpkg in ${VCPKG_ROOT}")
execute_process(COMMAND ${VCPKG_BOOTSTRAP} WORKING_DIRECTORY ${VCPKG_ROOT})
endif()
if(NOT EXISTS ${VCPKG_EXEC})
message(FATAL_ERROR "***** FATAL ERROR: Could not bootstrap vcpkg *****")
endif()
endmacro()
# Installs the list of packages given as parameters using Vcpkg
macro(vcpkg_install_packages)
# Need the given list to be space-separated
#string (REPLACE ";" " " PACKAGES_LIST_STR "${ARGN}")
message(STATUS "Installing/Updating the following vcpkg-packages: ${PACKAGES_LIST_STR}")
if (VCPKG_TRIPLET)
set(ENV{VCPKG_DEFAULT_TRIPLET} "${VCPKG_TRIPLET}")
endif()
execute_process(
COMMAND ${VCPKG_EXEC} install ${ARGN}
WORKING_DIRECTORY ${VCPKG_ROOT}
)
endmacro()
# MIT License
#
# Copyright (c) 2019 REGoth-project
#
# Permission is hereby granted, free of charge, to any person obtaining a copy
# of this software and associated documentation files (the "Software"), to deal
# in the Software without restriction, including without limitation the rights
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
# copies of the Software, and to permit persons to whom the Software is
# furnished to do so, subject to the following conditions:
#
# The above copyright notice and this permission notice shall be included in all
# copies or substantial portions of the Software.
#
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
# SOFTWARE.
+216
View File
@@ -0,0 +1,216 @@
cmake_minimum_required(VERSION 3.16.0 FATAL_ERROR)
set(CMAKE_SYSTEM_VERSION 10.0 CACHE STRING "" FORCE)
set(CMAKE_CXX_STANDARD 20 CACHE STRING "The C++ standard to use")
#set(CMAKE_C_STANDARD 11 CACHE STRING "The C standard to use") - issue with soh compile with MSVC
set(CMAKE_OSX_DEPLOYMENT_TARGET "10.15" CACHE STRING "Minimum OS X deployment version" FORCE)
project(Ship C CXX)
set(PROJECT_VERSION_MAJOR "4")
set(PROJECT_VERSION_MINOR "0")
set(PROJECT_VERSION_PATCH "0")
set_property(DIRECTORY ${CMAKE_SOURCE_DIR} PROPERTY VS_STARTUP_PROJECT soh)
add_compile_options($<$<CXX_COMPILER_ID:MSVC>:/MP>)
if (CMAKE_SYSTEM_NAME STREQUAL "Windows")
include(CMake/automate-vcpkg.cmake)
set(VCPKG_TRIPLET x64-windows-static)
set(VCPKG_TARGET_TRIPLET x64-windows-static)
vcpkg_bootstrap()
vcpkg_install_packages(zlib bzip2 libpng SDL2 SDL2-net GLEW glfw3)
endif()
################################################################################
# Set target arch type if empty. Visual studio solution generator provides it.
################################################################################
if (CMAKE_SYSTEM_NAME STREQUAL "Windows")
if(NOT CMAKE_VS_PLATFORM_NAME)
set(CMAKE_VS_PLATFORM_NAME "x64")
endif()
message("${CMAKE_VS_PLATFORM_NAME} architecture in use")
if(NOT ("${CMAKE_VS_PLATFORM_NAME}" STREQUAL "x64"
OR "${CMAKE_VS_PLATFORM_NAME}" STREQUAL "Win32"))
message(FATAL_ERROR "${CMAKE_VS_PLATFORM_NAME} arch is not supported!")
endif()
endif()
################################################################################
# Global configuration types
################################################################################
if (CMAKE_SYSTEM_NAME STREQUAL "NintendoSwitch")
set(CMAKE_C_FLAGS_DEBUG "-O3 -ffast-math")
set(CMAKE_CXX_FLAGS_DEBUG "-O3 -ffast-math")
set(CMAKE_C_FLAGS_RELEASE "-O3 -ffast-math -DNDEBUG")
set(CMAKE_CXX_FLAGS_RELEASE "-O3 -ffast-math -DNDEBUG")
else()
set(CMAKE_C_FLAGS_RELEASE "-O2 -DNDEBUG")
set(CMAKE_CXX_FLAGS_RELEASE "-O2 -DNDEBUG")
set(CMAKE_OBJCXX_FLAGS_RELEASE "-O2 -DNDEBUG")
endif()
if(NOT CMAKE_BUILD_TYPE )
set(CMAKE_BUILD_TYPE "Debug" CACHE STRING "Choose the type of build." FORCE)
endif()
################################################################################
# Global compiler options
################################################################################
if(MSVC)
# remove default flags provided with CMake for MSVC
set(CMAKE_C_FLAGS "")
set(CMAKE_C_FLAGS_DEBUG "")
set(CMAKE_C_FLAGS_RELEASE "")
set(CMAKE_CXX_FLAGS "")
set(CMAKE_CXX_FLAGS_DEBUG "")
set(CMAKE_CXX_FLAGS_RELEASE "")
endif()
################################################################################
# Global linker options
################################################################################
if(MSVC)
# remove default flags provided with CMake for MSVC
set(CMAKE_EXE_LINKER_FLAGS "")
set(CMAKE_MODULE_LINKER_FLAGS "")
set(CMAKE_SHARED_LINKER_FLAGS "")
set(CMAKE_STATIC_LINKER_FLAGS "")
set(CMAKE_EXE_LINKER_FLAGS_DEBUG "${CMAKE_EXE_LINKER_FLAGS}")
set(CMAKE_MODULE_LINKER_FLAGS_DEBUG "${CMAKE_MODULE_LINKER_FLAGS}")
set(CMAKE_SHARED_LINKER_FLAGS_DEBUG "${CMAKE_SHARED_LINKER_FLAGS}")
set(CMAKE_STATIC_LINKER_FLAGS_DEBUG "${CMAKE_STATIC_LINKER_FLAGS}")
set(CMAKE_EXE_LINKER_FLAGS_RELEASE "${CMAKE_EXE_LINKER_FLAGS}")
set(CMAKE_MODULE_LINKER_FLAGS_RELEASE "${CMAKE_MODULE_LINKER_FLAGS}")
set(CMAKE_SHARED_LINKER_FLAGS_RELEASE "${CMAKE_SHARED_LINKER_FLAGS}")
set(CMAKE_STATIC_LINKER_FLAGS_RELEASE "${CMAKE_STATIC_LINKER_FLAGS}")
endif()
################################################################################
# Common utils
################################################################################
include(CMake/Utils.cmake)
if(CMAKE_SYSTEM_NAME MATCHES "Linux")
get_linux_lsb_release_information()
message(STATUS "Linux ${LSB_RELEASE_ID_SHORT} ${LSB_RELEASE_VERSION_SHORT} ${LSB_RELEASE_CODENAME_SHORT}")
else()
message(STATUS ${CMAKE_SYSTEM_NAME})
endif()
################################################################################
# Additional Global Settings(add specific info there)
################################################################################
include(CMake/GlobalSettingsInclude.cmake OPTIONAL)
################################################################################
# Use solution folders feature
################################################################################
set_property(GLOBAL PROPERTY USE_FOLDERS ON)
################################################################################
# Sub-projects
################################################################################
add_subdirectory(libultraship/libultraship ${CMAKE_BINARY_DIR}/libultraship)
add_subdirectory(ZAPDTR/ZAPD ${CMAKE_BINARY_DIR}/ZAPD)
add_subdirectory(ZAPDTR/ZAPDUtils ${CMAKE_BINARY_DIR}/ZAPDUtils)
add_subdirectory(OTRExporter)
add_subdirectory(soh)
if(NOT CMAKE_SYSTEM_NAME MATCHES "Darwin|NintendoSwitch|CafeOS")
add_subdirectory(OTRGui)
endif()
set_property(TARGET soh PROPERTY APPIMAGE_DESKTOP_FILE_TERMINAL YES)
set_property(TARGET soh PROPERTY APPIMAGE_DESKTOP_FILE "${CMAKE_SOURCE_DIR}/scripts/linux/appimage/soh.desktop")
set_property(TARGET soh PROPERTY APPIMAGE_ICON_FILE "${CMAKE_BINARY_DIR}/sohIcon.png")
if("${CMAKE_SYSTEM_NAME}" STREQUAL "Linux")
install(PROGRAMS "${CMAKE_SOURCE_DIR}/scripts/linux/appimage/soh.sh" DESTINATION . COMPONENT appimage)
endif()
find_package(Python3 COMPONENTS Interpreter)
add_custom_target(
ExtractAssets
# CMake versions prior to 3.17 do not have the rm command, use remove instead for older versions
COMMAND ${CMAKE_COMMAND} -E $<IF:$<VERSION_LESS:${CMAKE_VERSION},3.17>,remove,rm> -f oot.otr
COMMAND ${Python3_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/OTRExporter/extract_assets.py -z "$<TARGET_FILE:ZAPD>"
COMMAND ${CMAKE_COMMAND} -E copy oot.otr ${CMAKE_SOURCE_DIR}
COMMAND ${CMAKE_COMMAND} -E copy oot.otr ${CMAKE_BINARY_DIR}/soh
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/OTRExporter
COMMENT "Running asset extraction..."
DEPENDS ZAPD
BYPRODUCTS oot.otr ${CMAKE_SOURCE_DIR}/oot.otr
)
if(CMAKE_SYSTEM_NAME MATCHES "Linux")
find_package(ImageMagick COMPONENTS convert)
if (ImageMagick_FOUND)
execute_process (
COMMAND ${ImageMagick_convert_EXECUTABLE} soh/macosx/sohIcon.png -resize 512x512 ${CMAKE_BINARY_DIR}/sohIcon.png
OUTPUT_VARIABLE outVar
)
endif()
endif()
if(CMAKE_SYSTEM_NAME MATCHES "Darwin")
add_custom_target(CreateOSXIcons
COMMAND mkdir -p ${CMAKE_BINARY_DIR}/macosx/soh.iconset
COMMAND sips -z 16 16 soh/macosx/sohIcon.png --out ${CMAKE_BINARY_DIR}/macosx/soh.iconset/icon_16x16.png
COMMAND sips -z 32 32 soh/macosx/sohIcon.png --out ${CMAKE_BINARY_DIR}/macosx/soh.iconset/icon_16x16@2x.png
COMMAND sips -z 32 32 soh/macosx/sohIcon.png --out ${CMAKE_BINARY_DIR}/macosx/soh.iconset/icon_32x32.png
COMMAND sips -z 64 64 soh/macosx/sohIcon.png --out ${CMAKE_BINARY_DIR}/macosx/soh.iconset/icon_32x32@2x.png
COMMAND sips -z 128 128 soh/macosx/sohIcon.png --out ${CMAKE_BINARY_DIR}/macosx/soh.iconset/icon_128x128.png
COMMAND sips -z 256 256 soh/macosx/sohIcon.png --out ${CMAKE_BINARY_DIR}/macosx/soh.iconset/icon_128x128@2x.png
COMMAND sips -z 256 256 soh/macosx/sohIcon.png --out ${CMAKE_BINARY_DIR}/macosx/soh.iconset/icon_256x256.png
COMMAND sips -z 512 512 soh/macosx/sohIcon.png --out ${CMAKE_BINARY_DIR}/macosx/soh.iconset/icon_256x256@2x.png
COMMAND sips -z 512 512 soh/macosx/sohIcon.png --out ${CMAKE_BINARY_DIR}/macosx/soh.iconset/icon_512x512.png
COMMAND cp soh/macosx/sohIcon.png ${CMAKE_BINARY_DIR}/macosx/soh.iconset/icon_512x512@2x.png
COMMAND iconutil -c icns -o ${CMAKE_BINARY_DIR}/macosx/soh.icns ${CMAKE_BINARY_DIR}/macosx/soh.iconset
WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
COMMENT "Creating OSX icons ..."
)
add_dependencies(soh CreateOSXIcons)
add_custom_target(Assets ALL
COMMAND ${CMAKE_COMMAND} -Dsrc_dir="${CMAKE_SOURCE_DIR}/OTRGui/assets/extractor" -Ddst_dir="${CMAKE_BINARY_DIR}/assets/extractor" -P "${CMAKE_SOURCE_DIR}/OTRGui/Overwrite.cmake"
COMMAND ${CMAKE_COMMAND} -Dsrc_dir="${CMAKE_SOURCE_DIR}/OTRExporter/assets" -Ddst_dir="${CMAKE_BINARY_DIR}/assets/game" -P "${CMAKE_SOURCE_DIR}/OTRGui/Overwrite.cmake"
COMMAND ${CMAKE_COMMAND} -Dsrc_dir="${CMAKE_SOURCE_DIR}/soh/assets/xml" -Ddst_dir="${CMAKE_BINARY_DIR}/assets/extractor/xmls" -P "${CMAKE_SOURCE_DIR}/OTRGui/Overwrite.cmake"
)
add_dependencies(soh Assets)
install(TARGETS ZAPD DESTINATION ${CMAKE_BINARY_DIR}/assets/extractor)
set(PROGRAM_PERMISSIONS_EXECUTE OWNER_EXECUTE OWNER_WRITE OWNER_READ GROUP_EXECUTE GROUP_READ WORLD_EXECUTE WORLD_READ)
install(DIRECTORY ${CMAKE_BINARY_DIR}/assets
DESTINATION .
PATTERN ZAPD.out
PERMISSIONS ${PROGRAM_PERMISSIONS_EXECUTE}
)
install(CODE "
include(BundleUtilities)
fixup_bundle(\"\${CMAKE_INSTALL_PREFIX}/soh-macos\" \"\" \"${dirs}\")
")
endif()
if(CMAKE_SYSTEM_NAME MATCHES "Windows|NintendoSwitch|CafeOS")
install(FILES ${CMAKE_SOURCE_DIR}/README.md DESTINATION . COMPONENT ship RENAME readme.txt )
endif()
if(CMAKE_SYSTEM_NAME MATCHES "Linux")
set(CPACK_GENERATOR "External")
elseif(CMAKE_SYSTEM_NAME MATCHES "Windows|NintendoSwitch|CafeOS")
set(CPACK_GENERATOR "ZIP")
elseif(CMAKE_SYSTEM_NAME MATCHES "Darwin")
set(CPACK_GENERATOR "Bundle")
endif()
set(CPACK_PROJECT_CONFIG_FILE ${CMAKE_SOURCE_DIR}/CMake/Packaging-2.cmake)
include(CMake/Packaging.cmake)
+60 -30
View File
@@ -1,38 +1,68 @@
FROM ubuntu:21.04 as build
FROM ubuntu:20.04 as build
ENV LANG C.UTF-8
ARG DEBIAN_FRONTEND=noninteractive
RUN dpkg --add-architecture i386 && \
apt-get update && \
apt-get upgrade -y && \
apt-get install -y \
binutils:i386 \
gcc-10:i386 \
g++-10:i386 \
python3.10 \
python \
make \
cmake \
git \
lld \
libsdl2-dev:i386 \
zlib1g-dev:i386 \
libbz2-dev:i386 \
libpng-dev:i386 \
libgles2-mesa-dev && \
ln -sf /usr/bin/python3.10 /usr/bin/python3 && \
ln -s /usr/bin/gcc-10 /usr/bin/gcc && \
ln -s /usr/bin/gcc-10 /usr/bin/cc && \
ln -s /usr/bin/g++-10 /usr/bin/g++ && \
ln -s /usr/bin/g++-10 /usr/bin/c++
ENV GCCVER=10
RUN apt-get update && \
apt-get upgrade -y && \
apt-get install -y \
binutils \
gcc-${GCCVER} \
g++-${GCCVER} \
patchelf \
p7zip-full \
python3 \
cmake \
make \
curl \
git \
lld \
libsdl2-dev \
zlib1g-dev \
libbz2-dev \
libpng-dev \
libgles2-mesa-dev \
wget \
gpg \
imagemagick \
ninja-build && \
apt-get install -y software-properties-common && \
wget -O - https://apt.kitware.com/keys/kitware-archive-latest.asc 2>/dev/null | gpg --dearmor - | tee /etc/apt/trusted.gpg.d/kitware.gpg >/dev/null && \
apt-add-repository "deb https://apt.kitware.com/ubuntu/ focal main" && \
apt-get update && \
apt-get upgrade -y && \
update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-${GCCVER} 10 && \
update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-${GCCVER} 10
RUN git clone https://github.com/Perlmint/glew-cmake.git && \
cmake glew-cmake && \
make -j$(nproc) && \
make install ARCH64=false
cmake glew-cmake && \
make -j$(nproc) && \
make install
ENV SDL2VER=2.0.22
RUN curl -sLO https://libsdl.org/release/SDL2-${SDL2VER}.tar.gz && \
tar -xzf SDL2-${SDL2VER}.tar.gz && \
cd SDL2-${SDL2VER} && \
./configure --build=x86_64-linux-gnu && \
make -j$(nproc) && make install && \
rm ../SDL2-${SDL2VER}.tar.gz && \
cp -av /usr/local/lib/libSDL* /lib/x86_64-linux-gnu/
RUN \
ln -sf /proc/self/mounts /etc/mtab && \
mkdir -p /usr/local/share/keyring/ && \
wget -O /usr/local/share/keyring/devkitpro-pub.gpg https://apt.devkitpro.org/devkitpro-pub.gpg && \
echo "deb [signed-by=/usr/local/share/keyring/devkitpro-pub.gpg] https://apt.devkitpro.org stable main" > /etc/apt/sources.list.d/devkitpro.list && \
apt-get update -y && \
apt-get install -y devkitpro-pacman && \
yes | dkp-pacman -Syu switch-dev switch-portlibs wiiu-dev wiiu-portlibs --noconfirm
ENV DEVKITPRO=/opt/devkitpro
ENV DEVKITARM=/opt/devkitpro/devkitARM
ENV DEVKITPPC=/opt/devkitpro/devkitPPC
ENV PATH=$PATH:/opt/devkitpro/portlibs/switch/bin/:$DEVKITPPC/bin
ENV WUT_ROOT=$DEVKITPRO/wut
RUN mkdir /soh
WORKDIR /soh
Vendored
+204 -91
View File
@@ -4,114 +4,227 @@ pipeline {
options {
timestamps()
skipDefaultCheckout(true)
disableConcurrentBuilds(abortPrevious: true)
}
stages {
stage ('Build Windows') {
environment {
MSBUILD='C:\\Program Files\\Microsoft Visual Studio\\2022\\Community\\Msbuild\\Current\\Bin\\msbuild.exe'
CONFIG='Release'
OTRPLATFORM='x64'
PLATFORM='x86'
ZIP='C:\\Program Files\\7-Zip\\7z.exe'
PYTHON='C:\\Users\\jenkins\\AppData\\Local\\Programs\\Python\\Python310\\python.exe'
CMAKE='C:\\Program Files\\CMake\\bin\\cmake.exe'
TOOLSET='v142'
}
stage('Generate Assets') {
agent {
label "SoH-Builders"
label "SoH-Asset-Builders"
}
steps {
checkout([
$class: 'GitSCM',
branches: scm.branches,
doGenerateSubmoduleConfigurations: scm.doGenerateSubmoduleConfigurations,
extensions: scm.extensions,
userRemoteConfigs: scm.userRemoteConfigs
])
catchError(buildResult: 'FAILURE', stageResult: 'FAILURE') {
bat """
"${env.MSBUILD}" ".\\OTRExporter\\OTRExporter.sln" -t:build -p:Configuration=${env.CONFIG};Platform=${env.OTRPLATFORM};PlatformToolset=${env.TOOLSET};RestorePackagesConfig=true /restore /nodeReuse:false /m
xcopy "..\\..\\ZELOOTD.z64" "OTRExporter\\"
cd "OTRExporter"
"${env.PYTHON}" ".\\extract_assets.py"
cd "..\\"
"${env.MSBUILD}" ".\\soh\\soh.sln" -t:build -p:Configuration=${env.CONFIG};Platform=${env.PLATFORM};PlatformToolset=${env.TOOLSET} /nodeReuse:false /m
cd OTRGui
mkdir build
cd build
"${env.CMAKE}" ..
"${env.CMAKE}" --build . --config Release
cd "..\\..\\"
move "soh\\Release\\soh.exe" ".\\"
move "OTRGui\\build\\assets" ".\\"
move ".\\OTRExporter\\x64\\Release\\ZAPD.exe" ".\\assets\\extractor\\"
move ".\\OTRGui\\build\\Release\\OTRGui.exe" ".\\"
rename README.md readme.txt
"${env.ZIP}" a soh.7z soh.exe OTRGui.exe assets readme.txt
"""
archiveArtifacts artifacts: 'soh.7z', followSymlinks: false, onlyIfSuccessful: true
timeout(time: 10) {
checkout([
$class: 'GitSCM',
branches: scm.branches,
doGenerateSubmoduleConfigurations: scm.doGenerateSubmoduleConfigurations,
extensions: scm.extensions,
userRemoteConfigs: scm.userRemoteConfigs
])
sh '''
cp ../../ZELOOTD.z64 OTRExporter/baserom_non_mq.z64
cmake --no-warn-unused-cli -H. -Bbuild-cmake -GNinja -DCMAKE_BUILD_TYPE:STRING=Release -DCMAKE_OSX_ARCHITECTURES="x86_64;arm64"
cmake --build build-cmake --target ExtractAssets --config Release
'''
stash includes: 'soh/assets/**/*', name: 'assets'
}
}
post {
always {
unsuccessful {
step([$class: 'WsCleanup']) // Clean workspace
}
}
}
stage ('Build Linux') {
agent {
label "SoH-Linux-Builders"
}
steps {
checkout([
$class: 'GitSCM',
branches: scm.branches,
doGenerateSubmoduleConfigurations: scm.doGenerateSubmoduleConfigurations,
extensions: scm.extensions,
userRemoteConfigs: scm.userRemoteConfigs
])
catchError(buildResult: 'FAILURE', stageResult: 'FAILURE') {
sh '''
cp ../../ZELOOTD.z64 OTRExporter/baserom_non_mq.z64
docker build . -t soh
docker run --name sohcont -dit --rm -v $(pwd):/soh soh /bin/bash
cp ../../buildsoh.bash soh
docker exec sohcont soh/buildsoh.bash
mkdir build
mv soh/soh.elf build/
mv OTRGui/build/OTRGui build/
mv OTRGui/build/assets build/
mv ZAPDTR/ZAPD.out build/assets/extractor/
mv README.md build/readme.txt
cd build
stage('Build SoH') {
parallel {
stage ('Build Windows') {
environment {
PLATFORM='x64'
PYTHON='C:\\Users\\jenkins\\AppData\\Local\\Programs\\Python\\Python310\\python.exe'
CMAKE='C:\\Program Files\\CMake\\bin\\cmake.exe'
CPACK='C:\\Program Files\\CMake\\bin\\cpack.exe'
TOOLSET='v142'
}
agent {
label "SoH-Builders"
}
steps {
checkout([
$class: 'GitSCM',
branches: scm.branches,
doGenerateSubmoduleConfigurations: scm.doGenerateSubmoduleConfigurations,
extensions: scm.extensions,
userRemoteConfigs: scm.userRemoteConfigs
])
catchError(buildResult: 'FAILURE', stageResult: 'FAILURE') {
unstash 'assets'
bat """
"${env.CMAKE}" -S . -B "build\\${env.PLATFORM}" -G "Visual Studio 17 2022" -T ${env.TOOLSET} -A ${env.PLATFORM} -D Python_EXECUTABLE=${env.PYTHON} -D CMAKE_BUILD_TYPE:STRING=Release
"${env.CMAKE}" --build ".\\build\\${env.PLATFORM}" --target OTRGui --config Release
"${env.CMAKE}" --build ".\\build\\${env.PLATFORM}" --config Release
cd ".\\build\\${env.PLATFORM}"
"${env.CPACK}" -G ZIP
cd "..\\..\\"
7z a soh-linux.7z soh.elf OTRGui assets readme.txt
mv soh-linux.7z ../
'''
move "_packages\\*.zip" "soh.zip"
"""
}
archiveArtifacts artifacts: 'soh.zip', followSymlinks: false, onlyIfSuccessful: true
}
post {
always {
step([$class: 'WsCleanup']) // Clean workspace
}
}
}
sh 'sudo docker container stop sohcont'
archiveArtifacts artifacts: 'soh-linux.7z', followSymlinks: false, onlyIfSuccessful: true
}
post {
always {
step([$class: 'WsCleanup']) // Clean workspace
stage ('Build Linux') {
agent {
label "SoH-Linux-Builders"
}
steps {
checkout([
$class: 'GitSCM',
branches: scm.branches,
doGenerateSubmoduleConfigurations: scm.doGenerateSubmoduleConfigurations,
extensions: scm.extensions,
userRemoteConfigs: scm.userRemoteConfigs
])
catchError(buildResult: 'FAILURE', stageResult: 'FAILURE') {
unstash 'assets'
sh '''
if docker ps -aq --filter "name=sohcont" | grep -q .; then docker rm -f sohcont; fi
docker build . -t soh
docker run --name sohcont -dit --rm -v $(pwd):/soh soh /bin/bash
docker exec sohcont scripts/linux/appimage/build.sh
mv README.md readme.txt
mv build-cmake/*.appimage soh.appimage
7z a soh-linux.7z soh.appimage readme.txt
'''
}
archiveArtifacts artifacts: 'soh-linux.7z', followSymlinks: false, onlyIfSuccessful: true
}
post {
always {
sh 'sudo docker container stop sohcont'
sh 'docker images --quiet --filter=dangling=true | xargs --no-run-if-empty docker rmi' // Clean dangling docker images
step([$class: 'WsCleanup']) // Clean workspace
}
}
}
stage ('Build macOS') {
agent {
label "SoH-Mac-Builders"
}
steps {
checkout([
$class: 'GitSCM',
branches: scm.branches,
doGenerateSubmoduleConfigurations: scm.doGenerateSubmoduleConfigurations,
extensions: scm.extensions,
userRemoteConfigs: scm.userRemoteConfigs
])
catchError(buildResult: 'FAILURE', stageResult: 'FAILURE') {
unstash 'assets'
sh '''
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 --
(cd build-cmake && cpack)
mv README.md readme.txt
mv _packages/*.dmg SoH.dmg
7z a soh-mac.7z SoH.dmg readme.txt
'''
}
archiveArtifacts artifacts: 'soh-mac.7z', followSymlinks: false, onlyIfSuccessful: true
}
post {
always {
step([$class: 'WsCleanup']) // Clean workspace
}
}
}
stage ('Build Switch') {
agent {
label "SoH-Linux-Builders"
}
steps {
checkout([
$class: 'GitSCM',
branches: scm.branches,
doGenerateSubmoduleConfigurations: scm.doGenerateSubmoduleConfigurations,
extensions: scm.extensions,
userRemoteConfigs: scm.userRemoteConfigs
])
catchError(buildResult: 'FAILURE', stageResult: 'FAILURE') {
unstash 'assets'
sh '''
if docker ps -aq --filter "name=sohswitchcont" | grep -q .; then docker rm -f sohswitchcont; fi
docker build . -t sohswitch
docker run --name sohswitchcont -dit --rm -v $(pwd):/soh sohswitch /bin/bash
docker exec sohswitchcont scripts/switch/build.sh
mv build-switch/soh/*.nro soh.nro
mv README.md readme.txt
7z a soh-switch.7z soh.nro readme.txt
'''
}
archiveArtifacts artifacts: 'soh-switch.7z', followSymlinks: false, onlyIfSuccessful: true
}
post {
always {
sh 'sudo docker container stop sohswitchcont'
sh 'docker images --quiet --filter=dangling=true | xargs --no-run-if-empty docker rmi' // Clean dangling docker images
step([$class: 'WsCleanup']) // Clean workspace
}
}
}
stage ('Build Wii U') {
agent {
label "SoH-Linux-Builders"
}
steps {
checkout([
$class: 'GitSCM',
branches: scm.branches,
doGenerateSubmoduleConfigurations: scm.doGenerateSubmoduleConfigurations,
extensions: scm.extensions,
userRemoteConfigs: scm.userRemoteConfigs
])
catchError(buildResult: 'FAILURE', stageResult: 'FAILURE') {
unstash 'assets'
sh '''
if docker ps -aq --filter "name=sohwiiucont" | grep -q .; then docker rm -f sohwiiucont; fi
docker build . -t sohwiiu
docker run --name sohwiiucont -dit --rm -v $(pwd):/soh sohwiiu /bin/bash
docker exec sohwiiucont scripts/wiiu/build.sh
mv build-wiiu/soh/*.rpx soh.rpx
mv build-wiiu/soh/*.wuhb soh.wuhb
mv README.md readme.txt
7z a soh-wiiu.7z soh.rpx soh.wuhb readme.txt
'''
}
archiveArtifacts artifacts: 'soh-wiiu.7z', followSymlinks: false, onlyIfSuccessful: true
}
post {
always {
sh 'sudo docker container stop sohwiiucont'
sh 'docker images --quiet --filter=dangling=true | xargs --no-run-if-empty docker rmi' // Clean dangling docker images
step([$class: 'WsCleanup']) // Clean workspace
}
}
}
}
}
}
}
+1
View File
@@ -341,6 +341,7 @@ build/
ZAPDUtils/build/
ZAPD/BuildInfo.h
baserom/
baserom_ntsc/
*.vtx.inc
*.otr
*.swp
+65
View File
@@ -0,0 +1,65 @@
################################################################################
# Command for variable_watch. This command issues error message, if a variable
# is changed. If variable PROPERTY_READER_GUARD_DISABLED is TRUE nothing happens
# variable_watch(<variable> property_reader_guard)
################################################################################
function(property_reader_guard VARIABLE ACCESS VALUE CURRENT_LIST_FILE STACK)
if("${PROPERTY_READER_GUARD_DISABLED}")
return()
endif()
if("${ACCESS}" STREQUAL "MODIFIED_ACCESS")
message(FATAL_ERROR
" Variable ${VARIABLE} is not supposed to be changed.\n"
" It is used only for reading target property ${VARIABLE}.\n"
" Use\n"
" set_target_properties(\"<target>\" PROPERTIES \"${VARIABLE}\" \"<value>\")\n"
" or\n"
" set_target_properties(\"<target>\" PROPERTIES \"${VARIABLE}_<CONFIG>\" \"<value>\")\n"
" instead.\n")
endif()
endfunction()
################################################################################
# Create variable <name> with generator expression that expands to value of
# target property <name>_<CONFIG>. If property is empty or not set then property
# <name> is used instead. Variable <name> has watcher property_reader_guard that
# doesn't allow to edit it.
# create_property_reader(<name>)
# Input:
# name - Name of watched property and output variable
################################################################################
function(create_property_reader NAME)
set(PROPERTY_READER_GUARD_DISABLED TRUE)
set(CONFIG_VALUE "$<TARGET_GENEX_EVAL:${PROPS_TARGET},$<TARGET_PROPERTY:${PROPS_TARGET},${NAME}_$<UPPER_CASE:$<CONFIG>>>>")
set(IS_CONFIG_VALUE_EMPTY "$<STREQUAL:${CONFIG_VALUE},>")
set(GENERAL_VALUE "$<TARGET_GENEX_EVAL:${PROPS_TARGET},$<TARGET_PROPERTY:${PROPS_TARGET},${NAME}>>")
set("${NAME}" "$<IF:${IS_CONFIG_VALUE_EMPTY},${GENERAL_VALUE},${CONFIG_VALUE}>" PARENT_SCOPE)
variable_watch("${NAME}" property_reader_guard)
endfunction()
################################################################################
# Set property $<name>_${PROPS_CONFIG_U} of ${PROPS_TARGET} to <value>
# set_config_specific_property(<name> <value>)
# Input:
# name - Prefix of property name
# value - New value
################################################################################
function(set_config_specific_property NAME VALUE)
set_target_properties("${PROPS_TARGET}" PROPERTIES "${NAME}_${PROPS_CONFIG_U}" "${VALUE}")
endfunction()
################################################################################
create_property_reader("TARGET_NAME")
create_property_reader("OUTPUT_DIRECTORY")
set_config_specific_property("TARGET_NAME" "${PROPS_TARGET}")
set_config_specific_property("OUTPUT_NAME" "${TARGET_NAME}")
set_config_specific_property("ARCHIVE_OUTPUT_NAME" "${TARGET_NAME}")
set_config_specific_property("LIBRARY_OUTPUT_NAME" "${TARGET_NAME}")
set_config_specific_property("RUNTIME_OUTPUT_NAME" "${TARGET_NAME}")
set_config_specific_property("ARCHIVE_OUTPUT_DIRECTORY" "${OUTPUT_DIRECTORY}")
set_config_specific_property("LIBRARY_OUTPUT_DIRECTORY" "${OUTPUT_DIRECTORY}")
set_config_specific_property("RUNTIME_OUTPUT_DIRECTORY" "${OUTPUT_DIRECTORY}")
+12
View File
@@ -0,0 +1,12 @@
include("${CMAKE_CURRENT_LIST_DIR}/Default.cmake")
set_config_specific_property("OUTPUT_DIRECTORY" "${CMAKE_SOURCE_DIR}$<$<NOT:$<STREQUAL:${CMAKE_VS_PLATFORM_NAME},Win32>>:/${CMAKE_VS_PLATFORM_NAME}>/${PROPS_CONFIG}")
if(MSVC)
create_property_reader("DEFAULT_CXX_EXCEPTION_HANDLING")
create_property_reader("DEFAULT_CXX_DEBUG_INFORMATION_FORMAT")
set_target_properties("${PROPS_TARGET}" PROPERTIES MSVC_RUNTIME_LIBRARY "MultiThreaded$<$<CONFIG:Debug>:Debug>DLL")
set_config_specific_property("DEFAULT_CXX_EXCEPTION_HANDLING" "/EHsc")
set_config_specific_property("DEFAULT_CXX_DEBUG_INFORMATION_FORMAT" "/Zi")
endif()
+233
View File
@@ -0,0 +1,233 @@
# utils file for projects came from visual studio solution with cmake-converter.
################################################################################
# Wrap each token of the command with condition
################################################################################
cmake_policy(PUSH)
cmake_policy(SET CMP0054 NEW)
macro(prepare_commands)
unset(TOKEN_ROLE)
unset(COMMANDS)
foreach(TOKEN ${ARG_COMMANDS})
if("${TOKEN}" STREQUAL "COMMAND")
set(TOKEN_ROLE "KEYWORD")
elseif("${TOKEN_ROLE}" STREQUAL "KEYWORD")
set(TOKEN_ROLE "CONDITION")
elseif("${TOKEN_ROLE}" STREQUAL "CONDITION")
set(TOKEN_ROLE "COMMAND")
elseif("${TOKEN_ROLE}" STREQUAL "COMMAND")
set(TOKEN_ROLE "ARG")
endif()
if("${TOKEN_ROLE}" STREQUAL "KEYWORD")
list(APPEND COMMANDS "${TOKEN}")
elseif("${TOKEN_ROLE}" STREQUAL "CONDITION")
set(CONDITION ${TOKEN})
elseif("${TOKEN_ROLE}" STREQUAL "COMMAND")
list(APPEND COMMANDS "$<$<NOT:${CONDITION}>:${DUMMY}>$<${CONDITION}:${TOKEN}>")
elseif("${TOKEN_ROLE}" STREQUAL "ARG")
list(APPEND COMMANDS "$<${CONDITION}:${TOKEN}>")
endif()
endforeach()
endmacro()
cmake_policy(POP)
################################################################################
# Transform all the tokens to absolute paths
################################################################################
macro(prepare_output)
unset(OUTPUT)
foreach(TOKEN ${ARG_OUTPUT})
if(IS_ABSOLUTE ${TOKEN})
list(APPEND OUTPUT "${TOKEN}")
else()
list(APPEND OUTPUT "${CMAKE_CURRENT_SOURCE_DIR}/${TOKEN}")
endif()
endforeach()
endmacro()
################################################################################
# Parse add_custom_command_if args.
#
# Input:
# PRE_BUILD - Pre build event option
# PRE_LINK - Pre link event option
# POST_BUILD - Post build event option
# TARGET - Target
# OUTPUT - List of output files
# DEPENDS - List of files on which the command depends
# COMMANDS - List of commands(COMMAND condition1 commannd1 args1 COMMAND
# condition2 commannd2 args2 ...)
# Output:
# OUTPUT - Output files
# DEPENDS - Files on which the command depends
# COMMENT - Comment
# PRE_BUILD - TRUE/FALSE
# PRE_LINK - TRUE/FALSE
# POST_BUILD - TRUE/FALSE
# TARGET - Target name
# COMMANDS - Prepared commands(every token is wrapped in CONDITION)
# NAME - Unique name for custom target
# STEP - PRE_BUILD/PRE_LINK/POST_BUILD
################################################################################
function(add_custom_command_if_parse_arguments)
cmake_parse_arguments("ARG" "PRE_BUILD;PRE_LINK;POST_BUILD" "TARGET;COMMENT" "DEPENDS;OUTPUT;COMMANDS" ${ARGN})
if(WIN32)
set(DUMMY "cd.")
elseif(UNIX)
set(DUMMY "true")
endif()
prepare_commands()
prepare_output()
set(DEPENDS "${ARG_DEPENDS}")
set(COMMENT "${ARG_COMMENT}")
set(PRE_BUILD "${ARG_PRE_BUILD}")
set(PRE_LINK "${ARG_PRE_LINK}")
set(POST_BUILD "${ARG_POST_BUILD}")
set(TARGET "${ARG_TARGET}")
if(PRE_BUILD)
set(STEP "PRE_BUILD")
elseif(PRE_LINK)
set(STEP "PRE_LINK")
elseif(POST_BUILD)
set(STEP "POST_BUILD")
endif()
set(NAME "${TARGET}_${STEP}")
set(OUTPUT "${OUTPUT}" PARENT_SCOPE)
set(DEPENDS "${DEPENDS}" PARENT_SCOPE)
set(COMMENT "${COMMENT}" PARENT_SCOPE)
set(PRE_BUILD "${PRE_BUILD}" PARENT_SCOPE)
set(PRE_LINK "${PRE_LINK}" PARENT_SCOPE)
set(POST_BUILD "${POST_BUILD}" PARENT_SCOPE)
set(TARGET "${TARGET}" PARENT_SCOPE)
set(COMMANDS "${COMMANDS}" PARENT_SCOPE)
set(STEP "${STEP}" PARENT_SCOPE)
set(NAME "${NAME}" PARENT_SCOPE)
endfunction()
################################################################################
# Add conditional custom command
#
# Generating Files
# The first signature is for adding a custom command to produce an output:
# add_custom_command_if(
# <OUTPUT output1 [output2 ...]>
# <COMMANDS>
# <COMMAND condition command1 [args1...]>
# [COMMAND condition command2 [args2...]]
# [DEPENDS [depends...]]
# [COMMENT comment]
#
# Build Events
# add_custom_command_if(
# <TARGET target>
# <PRE_BUILD | PRE_LINK | POST_BUILD>
# <COMMAND condition command1 [args1...]>
# [COMMAND condition command2 [args2...]]
# [COMMENT comment]
#
# Input:
# output - Output files the command is expected to produce
# condition - Generator expression for wrapping the command
# command - Command-line(s) to execute at build time.
# args - Command`s args
# depends - Files on which the command depends
# comment - Display the given message before the commands are executed at
# build time.
# PRE_BUILD - Run before any other rules are executed within the target
# PRE_LINK - Run after sources have been compiled but before linking the
# binary
# POST_BUILD - Run after all other rules within the target have been
# executed
################################################################################
function(add_custom_command_if)
add_custom_command_if_parse_arguments(${ARGN})
if(OUTPUT AND TARGET)
message(FATAL_ERROR "Wrong syntax. A TARGET and OUTPUT can not both be specified.")
endif()
if(OUTPUT)
add_custom_command(OUTPUT ${OUTPUT}
${COMMANDS}
DEPENDS ${DEPENDS}
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
COMMENT ${COMMENT})
elseif(TARGET)
if(PRE_BUILD AND NOT ${CMAKE_GENERATOR} MATCHES "Visual Studio")
add_custom_target(
${NAME}
${COMMANDS}
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
COMMENT ${COMMENT})
add_dependencies(${TARGET} ${NAME})
else()
add_custom_command(
TARGET ${TARGET}
${STEP}
${COMMANDS}
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
COMMENT ${COMMENT})
endif()
else()
message(FATAL_ERROR "Wrong syntax. A TARGET or OUTPUT must be specified.")
endif()
endfunction()
################################################################################
# Use props file for a target and configs
# use_props(<target> <configs...> <props_file>)
# Inside <props_file> there are following variables:
# PROPS_TARGET - <target>
# PROPS_CONFIG - One of <configs...>
# PROPS_CONFIG_U - Uppercase PROPS_CONFIG
# Input:
# target - Target to apply props file
# configs - Build configurations to apply props file
# props_file - CMake script
################################################################################
macro(use_props TARGET CONFIGS PROPS_FILE)
set(PROPS_TARGET "${TARGET}")
foreach(PROPS_CONFIG ${CONFIGS})
string(TOUPPER "${PROPS_CONFIG}" PROPS_CONFIG_U)
get_filename_component(ABSOLUTE_PROPS_FILE "${PROPS_FILE}" ABSOLUTE BASE_DIR "${CMAKE_CURRENT_LIST_DIR}")
if(EXISTS "${ABSOLUTE_PROPS_FILE}")
include("${ABSOLUTE_PROPS_FILE}")
else()
message(WARNING "Corresponding cmake file from props \"${ABSOLUTE_PROPS_FILE}\" doesn't exist")
endif()
endforeach()
endmacro()
################################################################################
# Add compile options to source file
# source_file_compile_options(<source_file> [compile_options...])
# Input:
# source_file - Source file
# compile_options - Options to add to COMPILE_FLAGS property
################################################################################
function(source_file_compile_options SOURCE_FILE)
if("${ARGC}" LESS_EQUAL "1")
return()
endif()
get_source_file_property(COMPILE_OPTIONS "${SOURCE_FILE}" COMPILE_OPTIONS)
if(COMPILE_OPTIONS)
list(APPEND COMPILE_OPTIONS ${ARGN})
else()
set(COMPILE_OPTIONS "${ARGN}")
endif()
set_source_files_properties("${SOURCE_FILE}" PROPERTIES COMPILE_OPTIONS "${COMPILE_OPTIONS}")
endfunction()
################################################################################
# Default properties of visual studio projects
################################################################################
set(DEFAULT_CXX_PROPS "${CMAKE_CURRENT_LIST_DIR}/DefaultCXX.cmake")
+96
View File
@@ -0,0 +1,96 @@
cmake_minimum_required(VERSION 3.16.0 FATAL_ERROR)
set(CMAKE_SYSTEM_VERSION 10.0 CACHE STRING "" FORCE)
set(CMAKE_CXX_STANDARD 20 CACHE STRING "The C++ standard to use")
#set(CMAKE_C_STANDARD 11 CACHE STRING "The C standard to use")
set(CMAKE_C_STANDARD 11)
project(OTRExporter C CXX)
################################################################################
# Set target arch type if empty. Visual studio solution generator provides it.
################################################################################
if (CMAKE_SYSTEM_NAME STREQUAL "Windows")
if(NOT CMAKE_VS_PLATFORM_NAME)
set(CMAKE_VS_PLATFORM_NAME "x64")
endif()
message("${CMAKE_VS_PLATFORM_NAME} architecture in use")
if(NOT ("${CMAKE_VS_PLATFORM_NAME}" STREQUAL "x64"
OR "${CMAKE_VS_PLATFORM_NAME}" STREQUAL "Win32"))
message(FATAL_ERROR "${CMAKE_VS_PLATFORM_NAME} arch is not supported!")
endif()
endif()
################################################################################
# Global configuration types
################################################################################
set(CMAKE_CONFIGURATION_TYPES
"Debug"
"Release"
CACHE STRING "" FORCE
)
################################################################################
# Global compiler options
################################################################################
if(MSVC)
# remove default flags provided with CMake for MSVC
set(CMAKE_C_FLAGS "")
set(CMAKE_C_FLAGS_DEBUG "")
set(CMAKE_C_FLAGS_RELEASE "")
set(CMAKE_CXX_FLAGS "")
set(CMAKE_CXX_FLAGS_DEBUG "")
set(CMAKE_CXX_FLAGS_RELEASE "")
endif()
################################################################################
# Global linker options
################################################################################
if(MSVC)
# remove default flags provided with CMake for MSVC
set(CMAKE_EXE_LINKER_FLAGS "")
set(CMAKE_MODULE_LINKER_FLAGS "")
set(CMAKE_SHARED_LINKER_FLAGS "")
set(CMAKE_STATIC_LINKER_FLAGS "")
set(CMAKE_EXE_LINKER_FLAGS_DEBUG "${CMAKE_EXE_LINKER_FLAGS}")
set(CMAKE_MODULE_LINKER_FLAGS_DEBUG "${CMAKE_MODULE_LINKER_FLAGS}")
set(CMAKE_SHARED_LINKER_FLAGS_DEBUG "${CMAKE_SHARED_LINKER_FLAGS}")
set(CMAKE_STATIC_LINKER_FLAGS_DEBUG "${CMAKE_STATIC_LINKER_FLAGS}")
set(CMAKE_EXE_LINKER_FLAGS_RELEASE "${CMAKE_EXE_LINKER_FLAGS}")
set(CMAKE_MODULE_LINKER_FLAGS_RELEASE "${CMAKE_MODULE_LINKER_FLAGS}")
set(CMAKE_SHARED_LINKER_FLAGS_RELEASE "${CMAKE_SHARED_LINKER_FLAGS}")
set(CMAKE_STATIC_LINKER_FLAGS_RELEASE "${CMAKE_STATIC_LINKER_FLAGS}")
endif()
################################################################################
# Common utils
################################################################################
include(CMake/Utils.cmake)
################################################################################
# Additional Global Settings(add specific info there)
################################################################################
include(CMake/GlobalSettingsInclude.cmake OPTIONAL)
################################################################################
# Use solution folders feature
################################################################################
set_property(GLOBAL PROPERTY USE_FOLDERS ON)
################################################################################
# Sub-projects
################################################################################
if (NOT TARGET libultraship)
add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/../libultraship/libultraship ${CMAKE_BINARY_DIR}/libultraship)
endif()
if (NOT TARGET ZAPD)
add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/../ZAPDTR/ZAPD ${CMAKE_BINARY_DIR}/ZAPD)
endif()
if (NOT TARGET ZAPDUtils)
add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/../ZAPDTR/ZAPDUtils ${CMAKE_BINARY_DIR}/ZAPDUtils)
endif()
add_subdirectory(OTRExporter)
-68
View File
@@ -1,68 +0,0 @@
Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio Version 16
VisualStudioVersion = 16.0.30320.27
MinimumVisualStudioVersion = 10.0.40219.1
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "OTRExporter", "OTRExporter\OTRExporter.vcxproj", "{A6103FD3-0709-4FC7-B066-1A6E056D6306}"
ProjectSection(ProjectDependencies) = postProject
{6DA9B521-65B7-41E2-8F8A-F0451CC18ED8} = {6DA9B521-65B7-41E2-8F8A-F0451CC18ED8}
EndProjectSection
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libultraship", "..\libultraship\libultraship\libultraship.vcxproj", "{6DA9B521-65B7-41E2-8F8A-F0451CC18ED8}"
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ZAPD", "..\ZAPDTR\ZAPD\ZAPD.vcxproj", "{B53F9E5B-0A58-4BAE-9AFE-856C8CBB8D36}"
ProjectSection(ProjectDependencies) = postProject
{6DA9B521-65B7-41E2-8F8A-F0451CC18ED8} = {6DA9B521-65B7-41E2-8F8A-F0451CC18ED8}
{A2E01C3E-D647-45D1-9788-043DEBC1A908} = {A2E01C3E-D647-45D1-9788-043DEBC1A908}
{A6103FD3-0709-4FC7-B066-1A6E056D6306} = {A6103FD3-0709-4FC7-B066-1A6E056D6306}
EndProjectSection
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ZAPDUtils", "..\ZAPDTR\ZAPDUtils\ZAPDUtils.vcxproj", "{A2E01C3E-D647-45D1-9788-043DEBC1A908}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|x64 = Debug|x64
Debug|x86 = Debug|x86
Release|x64 = Release|x64
Release|x86 = Release|x86
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{A6103FD3-0709-4FC7-B066-1A6E056D6306}.Debug|x64.ActiveCfg = Debug|x64
{A6103FD3-0709-4FC7-B066-1A6E056D6306}.Debug|x64.Build.0 = Debug|x64
{A6103FD3-0709-4FC7-B066-1A6E056D6306}.Debug|x86.ActiveCfg = Debug|Win32
{A6103FD3-0709-4FC7-B066-1A6E056D6306}.Debug|x86.Build.0 = Debug|Win32
{A6103FD3-0709-4FC7-B066-1A6E056D6306}.Release|x64.ActiveCfg = Release|x64
{A6103FD3-0709-4FC7-B066-1A6E056D6306}.Release|x64.Build.0 = Release|x64
{A6103FD3-0709-4FC7-B066-1A6E056D6306}.Release|x86.ActiveCfg = Release|Win32
{A6103FD3-0709-4FC7-B066-1A6E056D6306}.Release|x86.Build.0 = Release|Win32
{6DA9B521-65B7-41E2-8F8A-F0451CC18ED8}.Debug|x64.ActiveCfg = Debug|x64
{6DA9B521-65B7-41E2-8F8A-F0451CC18ED8}.Debug|x64.Build.0 = Debug|x64
{6DA9B521-65B7-41E2-8F8A-F0451CC18ED8}.Debug|x86.ActiveCfg = Debug|Win32
{6DA9B521-65B7-41E2-8F8A-F0451CC18ED8}.Debug|x86.Build.0 = Debug|Win32
{6DA9B521-65B7-41E2-8F8A-F0451CC18ED8}.Release|x64.ActiveCfg = Release|x64
{6DA9B521-65B7-41E2-8F8A-F0451CC18ED8}.Release|x64.Build.0 = Release|x64
{6DA9B521-65B7-41E2-8F8A-F0451CC18ED8}.Release|x86.ActiveCfg = Release|Win32
{6DA9B521-65B7-41E2-8F8A-F0451CC18ED8}.Release|x86.Build.0 = Release|Win32
{B53F9E5B-0A58-4BAE-9AFE-856C8CBB8D36}.Debug|x64.ActiveCfg = Debug|x64
{B53F9E5B-0A58-4BAE-9AFE-856C8CBB8D36}.Debug|x64.Build.0 = Debug|x64
{B53F9E5B-0A58-4BAE-9AFE-856C8CBB8D36}.Debug|x86.ActiveCfg = Debug|Win32
{B53F9E5B-0A58-4BAE-9AFE-856C8CBB8D36}.Debug|x86.Build.0 = Debug|Win32
{B53F9E5B-0A58-4BAE-9AFE-856C8CBB8D36}.Release|x64.ActiveCfg = Release|x64
{B53F9E5B-0A58-4BAE-9AFE-856C8CBB8D36}.Release|x64.Build.0 = Release|x64
{B53F9E5B-0A58-4BAE-9AFE-856C8CBB8D36}.Release|x86.ActiveCfg = Release|Win32
{B53F9E5B-0A58-4BAE-9AFE-856C8CBB8D36}.Release|x86.Build.0 = Release|Win32
{A2E01C3E-D647-45D1-9788-043DEBC1A908}.Debug|x64.ActiveCfg = Debug|x64
{A2E01C3E-D647-45D1-9788-043DEBC1A908}.Debug|x64.Build.0 = Debug|x64
{A2E01C3E-D647-45D1-9788-043DEBC1A908}.Debug|x86.ActiveCfg = Debug|Win32
{A2E01C3E-D647-45D1-9788-043DEBC1A908}.Debug|x86.Build.0 = Debug|Win32
{A2E01C3E-D647-45D1-9788-043DEBC1A908}.Release|x64.ActiveCfg = Release|x64
{A2E01C3E-D647-45D1-9788-043DEBC1A908}.Release|x64.Build.0 = Release|x64
{A2E01C3E-D647-45D1-9788-043DEBC1A908}.Release|x86.ActiveCfg = Release|Win32
{A2E01C3E-D647-45D1-9788-043DEBC1A908}.Release|x86.Build.0 = Release|Win32
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {DCE19FF1-37C0-49CD-915A-DD695E15F00B}
EndGlobalSection
EndGlobal
+192
View File
@@ -0,0 +1,192 @@
#include "AudioExporter.h"
#include "Main.h"
#include <Animation.h>
#include <Utils/MemoryStream.h>
#include <Globals.h>
#include <Utils/File.h>
#include "DisplayListExporter.h"
void OTRExporter_Audio::WriteSampleEntryReference(ZAudio* audio, SampleEntry* entry, std::map<uint32_t, SampleEntry*> samples, BinaryWriter* writer)
{
writer->Write((uint8_t)(entry != nullptr ? 1 : 0));
if (entry != nullptr)
{
if (audio->sampleOffsets[entry->bankId].find(entry->sampleLoopOffset) != audio->sampleOffsets[entry->bankId].end())
{
if (audio->sampleOffsets[entry->bankId][entry->sampleLoopOffset].find(entry->sampleDataOffset) != audio->sampleOffsets[entry->bankId][entry->sampleLoopOffset].end())
{
writer->Write(StringHelper::Sprintf("audio/samples/%s", audio->sampleOffsets[entry->bankId][entry->sampleLoopOffset][entry->sampleDataOffset].c_str()));
}
else
writer->Write(entry->fileName);
}
else
writer->Write(entry->fileName);
}
else
writer->Write("");
}
void OTRExporter_Audio::WriteSampleEntry(SampleEntry* entry, BinaryWriter* writer)
{
WriteHeader(nullptr, "", writer, Ship::ResourceType::AudioSample, Ship::Version::Rachael);
writer->Write(entry->codec);
writer->Write(entry->medium);
writer->Write(entry->unk_bit26);
writer->Write(entry->unk_bit25);
writer->Write((uint32_t)entry->data.size());
writer->Write((char*)entry->data.data(), entry->data.size());
writer->Write((uint32_t)(entry->loop.start));
writer->Write((uint32_t)(entry->loop.end));
writer->Write((uint32_t)(entry->loop.count));
writer->Write((uint32_t)entry->loop.states.size());
for (size_t i = 0; i < entry->loop.states.size(); i++)
writer->Write((entry->loop.states[i]));
writer->Write((uint32_t)(entry->book.order));
writer->Write((uint32_t)(entry->book.npredictors));
writer->Write((uint32_t)entry->book.books.size());
for (size_t i = 0; i < entry->book.books.size(); i++)
writer->Write((entry->book.books[i]));
}
void OTRExporter_Audio::WriteSoundFontEntry(ZAudio* audio, SoundFontEntry* entry, std::map<uint32_t, SampleEntry*> samples, BinaryWriter* writer)
{
writer->Write((uint8_t)(entry != nullptr ? 1 : 0));
if (entry != nullptr)
{
WriteSampleEntryReference(audio, entry->sampleEntry, samples, writer);
writer->Write(entry->tuning);
}
}
void OTRExporter_Audio::WriteEnvData(std::vector<AdsrEnvelope*> envelopes, BinaryWriter* writer)
{
writer->Write((uint32_t)envelopes.size());
for (auto env : envelopes)
{
writer->Write(env->delay);
writer->Write(env->arg);
}
}
void OTRExporter_Audio::Save(ZResource* res, const fs::path& outPath, BinaryWriter* writer)
{
ZAudio* audio = (ZAudio*)res;
WriteHeader(res, outPath, writer, Ship::ResourceType::Audio, Ship::Version::Rachael);
// Write Samples as individual files
for (auto pair : audio->samples)
{
MemoryStream* sampleStream = new MemoryStream();
BinaryWriter sampleWriter = BinaryWriter(sampleStream);
writer->Write((uint32_t)pair.first);
WriteSampleEntry(pair.second, &sampleWriter);
std::string basePath = "";
if (audio->sampleOffsets[pair.second->bankId].find(pair.second->sampleLoopOffset) != audio->sampleOffsets[pair.second->bankId].end())
{
if (audio->sampleOffsets[pair.second->bankId][pair.second->sampleLoopOffset].find(pair.second->sampleDataOffset) != audio->sampleOffsets[pair.second->bankId][pair.second->sampleLoopOffset].end())
basePath = StringHelper::Sprintf("samples/%s", audio->sampleOffsets[pair.second->bankId][pair.second->sampleLoopOffset][pair.second->sampleDataOffset].c_str());
else
basePath = StringHelper::Sprintf("samples/sample_%08X", pair.first);
}
else
basePath = StringHelper::Sprintf("samples/sample_%08X", pair.first);
std::string fName = OTRExporter_DisplayList::GetPathToRes(res, basePath);
AddFile(fName, sampleStream->ToVector());
}
// Write the soundfont table
for (size_t i = 0; i < audio->soundFontTable.size(); i++)
{
MemoryStream* fntStream = new MemoryStream();
BinaryWriter fntWriter = BinaryWriter(fntStream);
WriteHeader(nullptr, "", &fntWriter, Ship::ResourceType::AudioSoundFont, Ship::Version::Rachael);
fntWriter.Write((uint32_t)i);
fntWriter.Write(audio->soundFontTable[i].medium);
fntWriter.Write(audio->soundFontTable[i].cachePolicy);
fntWriter.Write(audio->soundFontTable[i].data1);
fntWriter.Write(audio->soundFontTable[i].data2);
fntWriter.Write(audio->soundFontTable[i].data3);
fntWriter.Write((uint32_t)audio->soundFontTable[i].drums.size());
fntWriter.Write((uint32_t)audio->soundFontTable[i].instruments.size());
fntWriter.Write((uint32_t)audio->soundFontTable[i].soundEffects.size());
for (size_t k = 0; k < audio->soundFontTable[i].drums.size(); k++)
{
fntWriter.Write(audio->soundFontTable[i].drums[k].releaseRate);
fntWriter.Write(audio->soundFontTable[i].drums[k].pan);
fntWriter.Write(audio->soundFontTable[i].drums[k].loaded);
WriteEnvData(audio->soundFontTable[i].drums[k].env, &fntWriter);
WriteSampleEntryReference(audio, audio->soundFontTable[i].drums[k].sample, audio->samples, &fntWriter);
fntWriter.Write(audio->soundFontTable[i].drums[k].tuning);
}
for (size_t k = 0; k < audio->soundFontTable[i].instruments.size(); k++)
{
fntWriter.Write((uint8_t)audio->soundFontTable[i].instruments[k].isValidInstrument);
fntWriter.Write(audio->soundFontTable[i].instruments[k].loaded);
fntWriter.Write(audio->soundFontTable[i].instruments[k].normalRangeLo);
fntWriter.Write(audio->soundFontTable[i].instruments[k].normalRangeHi);
fntWriter.Write(audio->soundFontTable[i].instruments[k].releaseRate);
WriteEnvData(audio->soundFontTable[i].instruments[k].env, &fntWriter);
WriteSoundFontEntry(audio, audio->soundFontTable[i].instruments[k].lowNotesSound, audio->samples, &fntWriter);
WriteSoundFontEntry(audio, audio->soundFontTable[i].instruments[k].normalNotesSound, audio->samples, &fntWriter);
WriteSoundFontEntry(audio, audio->soundFontTable[i].instruments[k].highNotesSound, audio->samples, &fntWriter);
}
for (size_t k = 0; k < audio->soundFontTable[i].soundEffects.size(); k++)
{
WriteSoundFontEntry(audio, audio->soundFontTable[i].soundEffects[k], audio->samples, &fntWriter);
}
//std::string fName = OTRExporter_DisplayList::GetPathToRes(res, StringHelper::Sprintf("fonts/font_%02X", i));
std::string fName = OTRExporter_DisplayList::GetPathToRes(res, StringHelper::Sprintf("fonts/%s", audio->soundFontNames[i].c_str()));
AddFile(fName, fntStream->ToVector());
}
// Write Sequences
for (size_t i = 0; i < audio->sequences.size(); i++)
{
auto seq = audio->sequences[i];
MemoryStream* seqStream = new MemoryStream();
BinaryWriter seqWriter = BinaryWriter(seqStream);
WriteHeader(nullptr, "", &seqWriter, Ship::ResourceType::AudioSequence, Ship::Version::Rachael);
seqWriter.Write((uint32_t)seq.size());
seqWriter.Write(seq.data(), seq.size());
seqWriter.Write((uint8_t)i);
seqWriter.Write((uint8_t)audio->sequenceTable[i].medium);
seqWriter.Write((uint8_t)audio->sequenceTable[i].cachePolicy);
seqWriter.Write((uint32_t)audio->fontIndices[i].size());
for (size_t k = 0; k < audio->fontIndices[i].size(); k++)
seqWriter.Write((uint8_t)audio->fontIndices[i][k]);
std::string fName = OTRExporter_DisplayList::GetPathToRes(res, StringHelper::Sprintf("sequences/%s", audio->seqNames[i].c_str()));
AddFile(fName, seqStream->ToVector());
}
}
+16
View File
@@ -0,0 +1,16 @@
#pragma once
#include "ZResource.h"
#include "ZAudio.h"
#include "Exporter.h"
#include <Utils/BinaryWriter.h>
class OTRExporter_Audio : public OTRExporter
{
public:
void WriteSampleEntry(SampleEntry* entry, BinaryWriter* writer);
void WriteSampleEntryReference(ZAudio* audio, SampleEntry* entry, std::map<uint32_t, SampleEntry*> samples, BinaryWriter* writer);
void WriteSoundFontEntry(ZAudio* audio, SoundFontEntry* entry, std::map<uint32_t, SampleEntry*> samples, BinaryWriter* writer);
void WriteEnvData(std::vector<AdsrEnvelope*> envelopes, BinaryWriter* writer);
virtual void Save(ZResource* res, const fs::path& outPath, BinaryWriter* writer) override;
};
+249
View File
@@ -0,0 +1,249 @@
set(PROJECT_NAME OTRExporter)
################################################################################
# Source groups
################################################################################
set(Header_Files
"AnimationExporter.h"
"ArrayExporter.h"
"AudioExporter.h"
"BackgroundExporter.h"
"BlobExporter.h"
"CollisionExporter.h"
"command_macros_base.h"
"CutsceneExporter.h"
"DisplayListExporter.h"
"Exporter.h"
"Main.h"
"MtxExporter.h"
"PathExporter.h"
"PlayerAnimationExporter.h"
"RoomExporter.h"
"SkeletonExporter.h"
"SkeletonLimbExporter.h"
"TextExporter.h"
"TextureExporter.h"
"VersionInfo.h"
"VtxExporter.h"
"z64cutscene.h"
"z64cutscene_commands.h"
)
source_group("Header Files" FILES ${Header_Files})
set(Source_Files
"AnimationExporter.cpp"
"ArrayExporter.cpp"
"AudioExporter.cpp"
"BackgroundExporter.cpp"
"BlobExporter.cpp"
"CollisionExporter.cpp"
"CutsceneExporter.cpp"
"DisplayListExporter.cpp"
"Exporter.cpp"
"Main.cpp"
"MtxExporter.cpp"
"PathExporter.cpp"
"PlayerAnimationExporter.cpp"
"RoomExporter.cpp"
"SkeletonExporter.cpp"
"SkeletonLimbExporter.cpp"
"TextExporter.cpp"
"TextureExporter.cpp"
"VersionInfo.cpp"
"VtxExporter.cpp"
)
source_group("Source Files" FILES ${Source_Files})
set(ALL_FILES
${Header_Files}
${Source_Files}
)
################################################################################
# Target
################################################################################
add_library(${PROJECT_NAME} STATIC ${ALL_FILES})
if (CMAKE_SYSTEM_NAME STREQUAL "Windows")
use_props(${PROJECT_NAME} "${CMAKE_CONFIGURATION_TYPES}" "${DEFAULT_CXX_PROPS}")
endif()
set(ROOT_NAMESPACE OTRExporter)
if (CMAKE_SYSTEM_NAME STREQUAL "Windows")
set_target_properties(${PROJECT_NAME} PROPERTIES
VS_GLOBAL_KEYWORD "Win32Proj"
)
if("${CMAKE_VS_PLATFORM_NAME}" STREQUAL "x64")
set_target_properties(${PROJECT_NAME} PROPERTIES
INTERPROCEDURAL_OPTIMIZATION_RELEASE "TRUE"
)
elseif("${CMAKE_VS_PLATFORM_NAME}" STREQUAL "x86")
set_target_properties(${PROJECT_NAME} PROPERTIES
INTERPROCEDURAL_OPTIMIZATION_RELEASE "TRUE"
)
endif()
endif()
################################################################################
# MSVC runtime library
################################################################################
if (CMAKE_SYSTEM_NAME STREQUAL "Windows")
get_property(MSVC_RUNTIME_LIBRARY_DEFAULT TARGET ${PROJECT_NAME} PROPERTY MSVC_RUNTIME_LIBRARY)
if("${CMAKE_VS_PLATFORM_NAME}" STREQUAL "x64")
string(CONCAT "MSVC_RUNTIME_LIBRARY_STR"
$<$<CONFIG:Debug>:
MultiThreadedDebug
>
$<$<CONFIG:Release>:
MultiThreaded
>
$<$<NOT:$<OR:$<CONFIG:Debug>,$<CONFIG:Release>>>:${MSVC_RUNTIME_LIBRARY_DEFAULT}>
)
endif()
set_target_properties(${PROJECT_NAME} PROPERTIES MSVC_RUNTIME_LIBRARY ${MSVC_RUNTIME_LIBRARY_STR})
endif()
################################################################################
# Compile definitions
################################################################################
if (CMAKE_SYSTEM_NAME STREQUAL "Windows")
if("${CMAKE_VS_PLATFORM_NAME}" STREQUAL "x64")
target_compile_definitions(${PROJECT_NAME} PRIVATE
"$<$<CONFIG:Debug>:"
"_DEBUG"
">"
"$<$<CONFIG:Release>:"
"NDEBUG"
">"
"_CONSOLE;"
"_CRT_SECURE_NO_WARNINGS;"
"UNICODE;"
"_UNICODE"
STORMLIB_NO_AUTO_LINK
)
elseif("${CMAKE_VS_PLATFORM_NAME}" STREQUAL "x86")
target_compile_definitions(${PROJECT_NAME} PRIVATE
"$<$<CONFIG:Debug>:"
"_DEBUG;"
"_CRT_SECURE_NO_WARNINGS"
">"
"$<$<CONFIG:Release>:"
"NDEBUG"
">"
"WIN32;"
"_CONSOLE;"
"UNICODE;"
"_UNICODE"
STORMLIB_NO_AUTO_LINK
)
endif()
endif()
if ("${CMAKE_CXX_COMPILER_ID}" MATCHES "GNU|Clang|AppleClang")
target_compile_definitions(${PROJECT_NAME} PRIVATE
"$<$<CONFIG:Debug>:"
"_DEBUG"
">"
"$<$<CONFIG:Release>:"
"NDEBUG"
">"
"_CONSOLE;"
"_CRT_SECURE_NO_WARNINGS;"
"UNICODE;"
"_UNICODE"
)
endif()
################################################################################
# Compile and link options
################################################################################
target_include_directories(${PROJECT_NAME} PRIVATE
${CMAKE_CURRENT_SOURCE_DIR}/../../ZAPDTR/ZAPD/
${CMAKE_CURRENT_SOURCE_DIR}/../../ZAPDTR/ZAPDUtils
${CMAKE_CURRENT_SOURCE_DIR}/../../ZAPDTR/lib/tinyxml2
${CMAKE_CURRENT_SOURCE_DIR}/../../libultraship/libultraship
${CMAKE_CURRENT_SOURCE_DIR}/../../libultraship/libultraship/Lib/spdlog/include
${CMAKE_CURRENT_SOURCE_DIR}/../../libultraship/libultraship/Lib/Fast3D/U64
${CMAKE_CURRENT_SOURCE_DIR}/../../StormLib/src
.
)
if(MSVC)
if("${CMAKE_VS_PLATFORM_NAME}" STREQUAL "x64")
target_compile_options(${PROJECT_NAME} PRIVATE
$<$<CONFIG:Release>:
/Oi;
/Gy
>
/permissive-;
/sdl;
/W3;
${DEFAULT_CXX_DEBUG_INFORMATION_FORMAT};
${DEFAULT_CXX_EXCEPTION_HANDLING}
)
elseif("${CMAKE_VS_PLATFORM_NAME}" STREQUAL "x86")
target_compile_options(${PROJECT_NAME} PRIVATE
$<$<CONFIG:Release>:
/Oi;
/Gy
>
/permissive-;
/sdl;
/W3;
${DEFAULT_CXX_DEBUG_INFORMATION_FORMAT};
${DEFAULT_CXX_EXCEPTION_HANDLING}
)
endif()
if("${CMAKE_VS_PLATFORM_NAME}" STREQUAL "x64")
target_link_options(${PROJECT_NAME} PRIVATE
$<$<CONFIG:Release>:
/OPT:REF;
/OPT:ICF
>
/SUBSYSTEM:CONSOLE
)
elseif("${CMAKE_VS_PLATFORM_NAME}" STREQUAL "x86")
target_link_options(${PROJECT_NAME} PRIVATE
$<$<CONFIG:Release>:
/DEBUG;
/OPT:REF;
/OPT:ICF;
/INCREMENTAL:NO
>
/SUBSYSTEM:CONSOLE
)
endif()
endif()
if ("${CMAKE_CXX_COMPILER_ID}" MATCHES "GNU|Clang|AppleClang")
target_compile_options(${PROJECT_NAME} PRIVATE
-Wall -Wextra -Wno-error
-Wno-unused-parameter
-Wno-unused-function
-Wno-unused-variable
-Wno-missing-field-initializers
-Wno-parentheses
-Wno-narrowing
$<$<COMPILE_LANGUAGE:CXX>:-Wno-deprecated-enum-enum-conversion>
)
endif()
################################################################################
# Dependencies
################################################################################
add_dependencies(${PROJECT_NAME}
libultraship
)
# Link with other targets.
if (CMAKE_SYSTEM_NAME STREQUAL "Windows")
if("${CMAKE_VS_PLATFORM_NAME}" STREQUAL "x64")
set(ADDITIONAL_LIBRARY_DEPENDENCIES
"$<$<CONFIG:Debug>:"
"ZAPDUtils;"
"OTRLib"
">"
)
endif()
endif()
target_link_libraries(${PROJECT_NAME} PUBLIC "${ADDITIONAL_LIBRARY_DEPENDENCIES}")
+48 -60
View File
@@ -96,14 +96,14 @@ void OTRExporter_DisplayList::Save(ZResource* res, const fs::path& outPath, Bina
{
case G_NOOP:
{
Gfx value = gsDPNoOp();
Gfx value = {gsDPNoOp()};
word0 = value.words.w0;
word1 = value.words.w1;
}
break;
case G_ENDDL:
{
Gfx value = gsSPEndDisplayList();
Gfx value = {gsSPEndDisplayList()};
word0 = value.words.w0;
word1 = value.words.w1;
}
@@ -114,7 +114,7 @@ void OTRExporter_DisplayList::Save(ZResource* res, const fs::path& outPath, Bina
int32_t nnnn = (data & 0x0000FFFF00000000ULL) >> 32;
int32_t vvvvvvvv = (data & 0x00000000FFFFFFFFULL);
Gfx value = gsSPModifyVertex(nnnn / 2, ww, vvvvvvvv);
Gfx value = {gsSPModifyVertex(nnnn / 2, ww, vvvvvvvv)};
word0 = value.words.w0;
word1 = value.words.w1;
}
@@ -131,35 +131,35 @@ void OTRExporter_DisplayList::Save(ZResource* res, const fs::path& outPath, Bina
int32_t cccccc = (data & 0x00FFFFFF00000000) >> 32;
int32_t ssssssss = (data & 0xFFFFFFFF);
Gfx value = gsSPGeometryMode(~cccccc, ssssssss);
Gfx value = {gsSPGeometryMode(~cccccc, ssssssss)};
word0 = value.words.w0;
word1 = value.words.w1;
}
break;
case G_RDPPIPESYNC:
{
Gfx value = gsDPPipeSync();
Gfx value = {gsDPPipeSync()};
word0 = value.words.w0;
word1 = value.words.w1;
}
break;
case G_RDPLOADSYNC:
{
Gfx value = gsDPLoadSync();
Gfx value = {gsDPLoadSync()};
word0 = value.words.w0;
word1 = value.words.w1;
}
break;
case G_RDPTILESYNC:
{
Gfx value = gsDPTileSync();
Gfx value = {gsDPTileSync()};
word0 = value.words.w0;
word1 = value.words.w1;
}
break;
case G_RDPFULLSYNC:
{
Gfx value = gsDPFullSync();
Gfx value = {gsDPFullSync()};
word0 = value.words.w0;
word1 = value.words.w1;
}
@@ -169,14 +169,14 @@ void OTRExporter_DisplayList::Save(ZResource* res, const fs::path& outPath, Bina
int32_t hhhhhh = (data & 0x00FFFFFF00000000) >> 32;
int32_t llllllll = (data & 0x00000000FFFFFFFF);
Gfx value = gsDPSetOtherMode(hhhhhh, llllllll);
Gfx value = {gsDPSetOtherMode(hhhhhh, llllllll)};
word0 = value.words.w0;
word1 = value.words.w1;
}
break;
case G_POPMTX:
{
Gfx value = gsSPPopMatrix(data);
Gfx value = {gsSPPopMatrix(data)};
word0 = value.words.w0;
word1 = value.words.w1;
}
@@ -188,7 +188,7 @@ void OTRExporter_DisplayList::Save(ZResource* res, const fs::path& outPath, Bina
uint8_t b = (uint8_t)((data & 0xFF00FF00) >> 8);
uint8_t a = (uint8_t)((data & 0x000000FF) >> 0);
Gfx value = gsDPSetEnvColor(r, g, b, a);
Gfx value = {gsDPSetEnvColor(r, g, b, a)};
word0 = value.words.w0;
word1 = value.words.w1;
}
@@ -204,7 +204,7 @@ void OTRExporter_DisplayList::Save(ZResource* res, const fs::path& outPath, Bina
mm = (mm & 0x0FFFFFFF) + 1;
Gfx value = gsSPMatrix(mm, pp);
Gfx value = {gsSPMatrix(mm, pp)};
word0 = value.words.w0;
word1 = value.words.w1;
}
@@ -214,7 +214,7 @@ void OTRExporter_DisplayList::Save(ZResource* res, const fs::path& outPath, Bina
uint32_t mm = (data & 0x00000000FFFFFFFF);
pp ^= G_MTX_PUSH;
Gfx value = gsSPMatrix(mm, pp);
Gfx value = {gsSPMatrix(mm, pp)};
word0 = value.words.w0;
word1 = value.words.w1;
@@ -253,7 +253,7 @@ void OTRExporter_DisplayList::Save(ZResource* res, const fs::path& outPath, Bina
int32_t xxx = (data & 0x0000000000FFF000) >> 12;
int32_t ddd = (data & 0x0000000000000FFF);
Gfx value = gsDPLoadBlock(i, sss, ttt, xxx, ddd);
Gfx value = {gsDPLoadBlock(i, sss, ttt, xxx, ddd)};
word0 = value.words.w0;
word1 = value.words.w1;
}
@@ -263,7 +263,7 @@ void OTRExporter_DisplayList::Save(ZResource* res, const fs::path& outPath, Bina
int32_t vvvv = (data & 0xFFFF00000000) >> 32;
int32_t wwww = (data & 0x0000FFFF);
Gfx value = gsSPCullDisplayList(vvvv / 2, wwww / 2);
Gfx value = {gsSPCullDisplayList(vvvv / 2, wwww / 2)};
word0 = value.words.w0;
word1 = value.words.w1;
}
@@ -279,7 +279,7 @@ void OTRExporter_DisplayList::Save(ZResource* res, const fs::path& outPath, Bina
uint32_t z = (data & 0x00000000FFFFFFFF) >> 0;
uint32_t h = (data & 0xFFFFFFFF);
Gfx value = gsSPBranchLessZraw3(h & 0x00FFFFFF);
Gfx value = {gsSPBranchLessZraw3(h & 0x00FFFFFF)};
word0 = value.words.w0;
word1 = value.words.w1;
}
@@ -292,7 +292,7 @@ void OTRExporter_DisplayList::Save(ZResource* res, const fs::path& outPath, Bina
break;
case G_RDPHALF_2:
{
Gfx value = gsDPWordLo(data & 0xFFFFFFFF);
Gfx value = {gsDPWordLo(data & 0xFFFFFFFF)};
word0 = value.words.w0;
word1 = value.words.w1;
}
@@ -305,7 +305,7 @@ void OTRExporter_DisplayList::Save(ZResource* res, const fs::path& outPath, Bina
int32_t XXX = (data & 0x0000000000FFF000) >> 12;
int32_t YYY = (data & 0x0000000000000FFF);
Gfx value = gsSPTextureRectangle2(XXX, YYY, xxx, yyy, i);
Gfx value = {gsSPTextureRectangle2(XXX, YYY, xxx, yyy, i)};
word0 = value.words.w0;
word1 = value.words.w1;
}
@@ -324,7 +324,7 @@ void OTRExporter_DisplayList::Save(ZResource* res, const fs::path& outPath, Bina
int bp = 0;
Gfx value = gsSPBranchLessZraw2(0xDEADABCD, (a / 5) | (b / 2), z);
Gfx value = {gsSPBranchLessZraw2(0xDEADABCD, (a / 5) | (b / 2), z)};
word0 = (value.words.w0 & 0x00FFFFFF) + (G_BRANCH_Z_OTR << 24);
word1 = value.words.w1;
@@ -362,18 +362,7 @@ void OTRExporter_DisplayList::Save(ZResource* res, const fs::path& outPath, Bina
BinaryWriter dlWriter = BinaryWriter(dlStream);
Save(dList->otherDLists[i], outPath, &dlWriter);
#ifdef _DEBUG
//if (otrArchive->HasFile(fName))
//otrArchive->RemoveFile(fName);
#endif
if (Globals::Instance->fileMode != ZFileMode::ExtractDirectory)
File::WriteAllBytes("Extract/" + fName, dlStream->ToVector());
else
files[fName] = dlStream->ToVector();
//otrArchive->AddFile(fName, (uintptr_t)dlStream->ToVector().data(), dlWriter.GetBaseAddress());
AddFile(fName, dlStream->ToVector());
}
}
else
@@ -400,9 +389,9 @@ void OTRExporter_DisplayList::Save(ZResource* res, const fs::path& outPath, Bina
u32 dListVal = (data & 0x0FFFFFFF) + 1;
if (pp != 0)
value = gsSPBranchList(dListVal);
value = {gsSPBranchList(dListVal)};
else
value = gsSPDisplayList(dListVal);
value = {gsSPDisplayList(dListVal)};
word0 = value.words.w0;
word1 = value.words.w1;
@@ -460,10 +449,7 @@ void OTRExporter_DisplayList::Save(ZResource* res, const fs::path& outPath, Bina
Save(dList->otherDLists[i], outPath, &dlWriter);
if (Globals::Instance->fileMode != ZFileMode::ExtractDirectory)
File::WriteAllBytes("Extract/" + fName, dlStream->ToVector());
else
files[fName] = dlStream->ToVector();
AddFile(fName, dlStream->ToVector());
}
}
else
@@ -483,7 +469,7 @@ void OTRExporter_DisplayList::Save(ZResource* res, const fs::path& outPath, Bina
int32_t ddd = (____ & 0x700) >> 8;
int32_t nnnnnnn = (____ & 0xFE) >> 1;
Gfx value = gsSPTexture(ssss, tttt, lll, ddd, nnnnnnn);
Gfx value = {gsSPTexture(ssss, tttt, lll, ddd, nnnnnnn)};
word0 = value.words.w0;
word1 = value.words.w1;
}
@@ -494,7 +480,7 @@ void OTRExporter_DisplayList::Save(ZResource* res, const fs::path& outPath, Bina
int32_t bb = ((data & 0x0000FF0000000000ULL) >> 40) / 2;
int32_t cc = ((data & 0x000000FF00000000ULL) >> 32) / 2;
Gfx test = gsSP1Triangle(aa, bb, cc, 0);
Gfx test = {gsSP1Triangle(aa, bb, cc, 0)};
word0 = test.words.w0;
word1 = test.words.w1;
}
@@ -508,7 +494,7 @@ void OTRExporter_DisplayList::Save(ZResource* res, const fs::path& outPath, Bina
int32_t ee = ((data & 0x0000000000FF00ULL) >> 8) / 2;
int32_t ff = ((data & 0x000000000000FFULL) >> 0) / 2;
Gfx test = gsSP2Triangles(aa, bb, cc, 0, dd, ee, ff, 0);
Gfx test = {gsSP2Triangles(aa, bb, cc, 0, dd, ee, ff, 0)};
word0 = test.words.w0;
word1 = test.words.w1;
}
@@ -520,7 +506,7 @@ void OTRExporter_DisplayList::Save(ZResource* res, const fs::path& outPath, Bina
int32_t cc = ((data & 0x000000FF00000000ULL) >> 32) / 2;
int32_t dd = ((data & 0x000000000000FFULL)) / 2;
Gfx test = gsSP1Quadrangle(aa, bb, cc, dd, 0);
Gfx test = {gsSP1Quadrangle(aa, bb, cc, dd, 0)};
word0 = test.words.w0;
word1 = test.words.w1;
}
@@ -534,7 +520,7 @@ void OTRExporter_DisplayList::Save(ZResource* res, const fs::path& outPath, Bina
int32_t bb = (data & 0x000000000000FF00) >> 8;
int32_t aa = (data & 0x00000000000000FF) >> 0;
Gfx value = gsDPSetPrimColor(mm, ff, rr, gg, bb, aa);
Gfx value = {gsDPSetPrimColor(mm, ff, rr, gg, bb, aa)};
word0 = value.words.w0;
word1 = value.words.w1;
}
@@ -548,7 +534,7 @@ void OTRExporter_DisplayList::Save(ZResource* res, const fs::path& outPath, Bina
// TODO: Output the correct render modes in data
Gfx value = gsSPSetOtherMode(0xE2, sft, len, dd);
Gfx value = {gsSPSetOtherMode(0xE2, sft, len, dd)};
word0 = value.words.w0;
word1 = value.words.w1;
}
@@ -566,11 +552,11 @@ void OTRExporter_DisplayList::Save(ZResource* res, const fs::path& outPath, Bina
if (sft == 14) // G_MDSFT_TEXTLUT
{
const char* types[] = { "G_TT_NONE", "G_TT_NONE", "G_TT_RGBA16", "G_TT_IA16" };
value = gsDPSetTextureLUT(dd >> 14);
value = {gsDPSetTextureLUT(dd >> 14)};
}
else
{
value = gsSPSetOtherMode(0xE3, sft, nn + 1, dd);
value = {gsSPSetOtherMode(0xE3, sft, nn + 1, dd)};
}
word0 = value.words.w0;
@@ -597,7 +583,7 @@ void OTRExporter_DisplayList::Save(ZResource* res, const fs::path& outPath, Bina
int32_t bbbb = (data & 0b0000000000000000000000000000000000000000000000000000000011110000) >> 4;
int32_t uuuu = (data & 0b0000000000000000000000000000000000000000000000000000000000001111);
Gfx value = gsDPSetTile(fff, ii, nnnnnnnnn, mmmmmmmmm, ttt, pppp, cc, aaaa, ssss, dd, bbbb, uuuu);
Gfx value = {gsDPSetTile(fff, ii, nnnnnnnnn, mmmmmmmmm, ttt, pppp, cc, aaaa, ssss, dd, bbbb, uuuu)};
word0 = value.words.w0;
word1 = value.words.w1;
}
@@ -621,7 +607,7 @@ void OTRExporter_DisplayList::Save(ZResource* res, const fs::path& outPath, Bina
int32_t ab1 = (data & 0b00000000000000000000000000000000000000000000000000000000111000) >> 3;
int32_t ad1 = (data & 0b00000000000000000000000000000000000000000000000000000000000111) >> 0;
Gfx value = gsDPSetCombineLERP2(a0, b0, c0, d0, aa0, ab0, ac0, ad0, a1, b1, c1, d1, aa1, ab1, ac1, ad1);
Gfx value = {gsDPSetCombineLERP2(a0, b0, c0, d0, aa0, ab0, ac0, ad0, a1, b1, c1, d1, aa1, ab1, ac1, ad1)};
word0 = value.words.w0;
word1 = value.words.w1;
}
@@ -634,7 +620,7 @@ void OTRExporter_DisplayList::Save(ZResource* res, const fs::path& outPath, Bina
int32_t vvv = (data & 0x0000000000000FFF);
int32_t i = (data & 0x000000000F000000) >> 24;
Gfx value = gsDPSetTileSize(i, sss, ttt, uuu, vvv);
Gfx value = {gsDPSetTileSize(i, sss, ttt, uuu, vvv)};
word0 = value.words.w0;
word1 = value.words.w1;
}
@@ -644,7 +630,7 @@ void OTRExporter_DisplayList::Save(ZResource* res, const fs::path& outPath, Bina
int32_t t = (data & 0x0000000007000000) >> 24;
int32_t ccc = (data & 0x00000000003FF000) >> 14;
Gfx value = gsDPLoadTLUTCmd(t, ccc);
Gfx value = {gsDPLoadTLUTCmd(t, ccc)};
word0 = value.words.w0;
word1 = value.words.w1;
}
@@ -657,7 +643,7 @@ void OTRExporter_DisplayList::Save(ZResource* res, const fs::path& outPath, Bina
int uuu = (data & 0x0000000000FFF000) >> 12;
int vvv= (data & 0x0000000000000FFF);
Gfx value = gsDPLoadTile(i, sss, ttt, uuu, vvv);
Gfx value = {gsDPLoadTile(i, sss, ttt, uuu, vvv)};
word0 = value.words.w0;
word1 = value.words.w1;
}
@@ -667,15 +653,20 @@ void OTRExporter_DisplayList::Save(ZResource* res, const fs::path& outPath, Bina
uint32_t seg = data & 0xFFFFFFFF;
int32_t texAddress = Seg2Filespace(data, dList->parent->baseAddress);
if (!Globals::Instance->HasSegment(GETSEGNUM(seg), res->parent->workerID))
if (!Globals::Instance->HasSegment(GETSEGNUM(seg), res->parent->workerID) || (res->GetName() == "sShadowMaterialDL"))
{
if (res->GetName() == "sShadowMaterialDL") {
// sShadowMaterialDL (In ovl_En_Jsjutan) has a texture in bss. This is a hack to override the reference to one
// to segment C. The actor has been modified to load the texture into segment C.
seg = 0x0C000000;
}
int32_t __ = (data & 0x00FF000000000000) >> 48;
int32_t www = (data & 0x00000FFF00000000) >> 32;
uint32_t fmt = (__ & 0xE0) >> 5;
uint32_t siz = (__ & 0x18) >> 3;
Gfx value = gsDPSetTextureImage(fmt, siz, www + 1, (seg & 0x0FFFFFFF) + 1);
Gfx value = {gsDPSetTextureImage(fmt, siz, www + 1, (seg & 0x0FFFFFFF) + 1)};
word0 = value.words.w0;
word1 = value.words.w1;
@@ -693,7 +684,7 @@ void OTRExporter_DisplayList::Save(ZResource* res, const fs::path& outPath, Bina
uint32_t fmt = (__ & 0xE0) >> 5;
uint32_t siz = (__ & 0x18) >> 3;
Gfx value = gsDPSetTextureImage(fmt, siz, www + 1, __);
Gfx value = {gsDPSetTextureImage(fmt, siz, www + 1, __)};
word0 = value.words.w0 & 0x00FFFFFF;
word0 += (G_SETTIMG_OTR << 24);
//word1 = value.words.w1;
@@ -736,7 +727,7 @@ void OTRExporter_DisplayList::Save(ZResource* res, const fs::path& outPath, Bina
int32_t aa = (data & 0x000000FF00000000ULL) >> 32;
int32_t nn = (data & 0x000FF00000000000ULL) >> 44;
Gfx value = gsSPVertex(data & 0xFFFFFFFF, nn, ((aa >> 1) - nn));
Gfx value = {gsSPVertex(data & 0xFFFFFFFF, nn, ((aa >> 1) - nn))};
word0 = value.words.w0;
word1 = value.words.w1 | 1;
@@ -759,7 +750,7 @@ void OTRExporter_DisplayList::Save(ZResource* res, const fs::path& outPath, Bina
{
uint32_t diff = segOffset - vtxDecl->address;
Gfx value = gsSPVertex(diff, nn, ((aa >> 1) - nn));
Gfx value = {gsSPVertex(diff, nn, ((aa >> 1) - nn))};
word0 = value.words.w0;
word0 &= 0x00FFFFFF;
@@ -827,10 +818,7 @@ void OTRExporter_DisplayList::Save(ZResource* res, const fs::path& outPath, Bina
}
}
if (Globals::Instance->fileMode != ZFileMode::ExtractDirectory)
File::WriteAllBytes("Extract/" + fName, vtxStream->ToVector());
else
files[fName] = vtxStream->ToVector();
AddFile(fName, vtxStream->ToVector());
auto end = std::chrono::steady_clock::now();
size_t diff = std::chrono::duration_cast<std::chrono::milliseconds>(end - start).count();
@@ -910,4 +898,4 @@ std::string OTRExporter_DisplayList::GetPrefix(ZResource* res)
prefix = "code";
return prefix;
}
}
+4 -3
View File
@@ -1,15 +1,16 @@
#include "Exporter.h"
#include "VersionInfo.h"
void OTRExporter::WriteHeader(ZResource* res, const fs::path& outPath, BinaryWriter* writer, Ship::ResourceType resType)
void OTRExporter::WriteHeader(ZResource* res, const fs::path& outPath, BinaryWriter* writer, Ship::ResourceType resType, Ship::Version resVersion)
{
writer->Write((uint8_t)Endianess::Little); // 0x00
writer->Write((uint8_t)Endianness::Little); // 0x00
writer->Write((uint8_t)0); // 0x01
writer->Write((uint8_t)0); // 0x02
writer->Write((uint8_t)0); // 0x03
writer->Write((uint32_t)resType); // 0x04
writer->Write((uint32_t)MAJOR_VERSION); // 0x08
//writer->Write((uint32_t)MAJOR_VERSION); // 0x08
writer->Write((uint32_t)resVersion); // 0x08
writer->Write((uint64_t)0xDEADBEEFDEADBEEF); // id, 0x0C
writer->Write((uint32_t)resourceVersions[resType]); // 0x10
writer->Write((uint64_t)0); // ROM CRC, 0x14
+2 -1
View File
@@ -4,9 +4,10 @@
//#include "OTRExporter.h"
#include <Utils/BinaryWriter.h>
#include <Resource.h>
#include "VersionInfo.h"
class OTRExporter : public ZResourceExporter
{
protected:
static void WriteHeader(ZResource* res, const fs::path& outPath, BinaryWriter* writer, Ship::ResourceType resType);
static void WriteHeader(ZResource* res, const fs::path& outPath, BinaryWriter* writer, Ship::ResourceType resType, Ship::Version resVersion = MAJOR_VERSION);
};
+42 -9
View File
@@ -15,6 +15,7 @@
#include "TextExporter.h"
#include "BlobExporter.h"
#include "MtxExporter.h"
#include "AudioExporter.h"
#include <Globals.h>
#include <Utils/File.h>
#include <Utils/Directory.h>
@@ -26,6 +27,7 @@ std::shared_ptr<Ship::Archive> otrArchive;
BinaryWriter* fileWriter;
std::chrono::steady_clock::time_point fileStart, resStart;
std::map<std::string, std::vector<char>> files;
std::mutex fileMutex;
void InitVersionInfo();
@@ -45,7 +47,7 @@ static void ExporterParseFileMode(const std::string& buildMode, ZFileMode& fileM
if (File::Exists(otrFileName))
otrArchive = std::shared_ptr<Ship::Archive>(new Ship::Archive(otrFileName, true));
else
otrArchive = Ship::Archive::CreateArchive(otrFileName, 65536 / 2);
otrArchive = Ship::Archive::CreateArchive(otrFileName, 40000);
auto lst = Directory::ListFiles("Extract");
@@ -61,13 +63,29 @@ static void ExporterProgramEnd()
{
if (Globals::Instance->fileMode == ZFileMode::ExtractDirectory)
{
printf("Generating OTR Archive...\n");
otrArchive = Ship::Archive::CreateArchive(otrFileName, 65536 / 2);
printf("Creating version file...\n");
for (auto item : files)
{
// Get crc from rom
std::string romPath = Globals::Instance->baseRomPath.string();
std::vector<uint8_t> romData = File::ReadAllBytes(romPath);
uint32_t crc = BitConverter::ToUInt32BE(romData, 0x10);
// Write crc to version file
fs::path versionPath("Extract/version");
std::ofstream versionFile(versionPath.c_str(), std::ios::out | std::ios::binary);
versionFile.write((char*)&crc, sizeof(crc));
versionFile.flush();
versionFile.close();
printf("Created version file.\n");
printf("Generating OTR Archive...\n");
otrArchive = Ship::Archive::CreateArchive(otrFileName, 40000);
for (auto item : files) {
auto fileData = item.second;
otrArchive->AddFile(item.first, (uintptr_t)fileData.data(), fileData.size());
otrArchive->AddFile(item.first, (uintptr_t)fileData.data(),
fileData.size());
}
// Add any additional files that need to be manually copied...
@@ -79,9 +97,9 @@ static void ExporterProgramEnd()
otrArchive->AddFile(StringHelper::Split(item, "Extract/")[1], (uintptr_t)fileData.data(), fileData.size());
}
otrArchive->AddFile("Audiobank", (uintptr_t)Globals::Instance->GetBaseromFile("Audiobank").data(), Globals::Instance->GetBaseromFile("Audiobank").size());
otrArchive->AddFile("Audioseq", (uintptr_t)Globals::Instance->GetBaseromFile("Audioseq").data(), Globals::Instance->GetBaseromFile("Audioseq").size());
otrArchive->AddFile("Audiotable", (uintptr_t)Globals::Instance->GetBaseromFile("Audiotable").data(), Globals::Instance->GetBaseromFile("Audiotable").size());
//otrArchive->AddFile("Audiobank", (uintptr_t)Globals::Instance->GetBaseromFile("Audiobank").data(), Globals::Instance->GetBaseromFile("Audiobank").size());
//otrArchive->AddFile("Audioseq", (uintptr_t)Globals::Instance->GetBaseromFile("Audioseq").data(), Globals::Instance->GetBaseromFile("Audioseq").size());
//otrArchive->AddFile("Audiotable", (uintptr_t)Globals::Instance->GetBaseromFile("Audiotable").data(), Globals::Instance->GetBaseromFile("Audiotable").size());
}
}
@@ -158,7 +176,10 @@ static void ExporterResourceEnd(ZResource* res, BinaryWriter& writer)
fName = StringHelper::Sprintf("%s/%s", oName.c_str(), rName.c_str());
if (Globals::Instance->fileMode == ZFileMode::ExtractDirectory)
{
std::unique_lock Lock(fileMutex);
files[fName] = strem->ToVector();
}
else
File::WriteAllBytes("Extract/" + fName, strem->ToVector());
}
@@ -178,6 +199,17 @@ static void ExporterXMLEnd()
{
}
void AddFile(std::string fName, std::vector<char> data)
{
if (Globals::Instance->fileMode != ZFileMode::ExtractDirectory)
File::WriteAllBytes("Extract/" + fName, data);
else
{
std::unique_lock Lock(fileMutex);
files[fName] = data;
}
}
static void ImportExporters()
{
// In this example we set up a new exporter called "EXAMPLE".
@@ -211,6 +243,7 @@ static void ImportExporters()
exporterSet->exporters[ZResourceType::Text] = new OTRExporter_Text();
exporterSet->exporters[ZResourceType::Blob] = new OTRExporter_Blob();
exporterSet->exporters[ZResourceType::Mtx] = new OTRExporter_MtxExporter();
exporterSet->exporters[ZResourceType::Audio] = new OTRExporter_Audio();
Globals::AddExporter("OTR", exporterSet);
+3 -1
View File
@@ -3,4 +3,6 @@
#include <Archive.h>
extern std::shared_ptr<Ship::Archive> otrArchive;
extern std::map<std::string, std::vector<char>> files;
extern std::map<std::string, std::vector<char>> files;
void AddFile(std::string fName, std::vector<char> data);
-70
View File
@@ -1,70 +0,0 @@
# Only used for standalone compilation, usually inherits these from the main makefile
CXX := g++
AR := ar
FORMAT := clang-format-11
ASAN ?= 0
DEBUG ?= 1
OPTFLAGS ?= -O0
LTO ?= 0
WARN := -Wall -Wextra -Werror \
-Wno-unused-parameter \
-Wno-unused-function \
-Wno-unused-variable
CXXFLAGS := $(WARN) -std=c++17
CPPFLAGS := -MMD
ifneq ($(DEBUG),0)
CXXFLAGS += -g
endif
ifneq ($(ASAN),0)
CXXFLAGS += -fsanitize=address
endif
ifneq ($(LTO),0)
CXXFLAGS += -flto
endif
SRC_DIRS := $(shell find -type d -not -path "*build*")
CXX_FILES := $(foreach dir,$(SRC_DIRS),$(wildcard $(dir)/*.cpp))
H_FILES := $(foreach dir,$(SRC_DIRS),$(wildcard $(dir)/*.h))
O_FILES := $(CXX_FILES:%.cpp=build/%.o)
D_FILES := $(O_FILES:%.o=%.d)
LIB := OTRExporter.a
INC_DIRS := $(addprefix -I, \
../../ZAPDTR/ZAPD \
../../ZAPDTR/lib/tinyxml2 \
../../ZAPDTR/lib/libgfxd \
../../ZAPDTR/ZAPDUtils \
../../libultraship/libultraship \
../../libultraship/libultraship/Lib/spdlog/include \
../../libultraship/libultraship/Lib/Fast3D/U64 \
)
# create build directories
$(shell mkdir -p $(SRC_DIRS:%=build/%))
all: $(LIB)
clean:
rm -rf build $(LIB)
format:
$(FORMAT) -i $(CXX_FILES) $(H_FILES)
.PHONY: all clean format
build/%.o: %.cpp
$(CXX) $(CXXFLAGS) $(CPPFLAGS) $(OPTFLAGS) $(INC_DIRS) -c $< -o $@
$(LIB): $(O_FILES)
$(AR) rcs $@ $^
-include $(D_FILES)
-220
View File
@@ -1,220 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup Label="ProjectConfigurations">
<ProjectConfiguration Include="Debug|Win32">
<Configuration>Debug</Configuration>
<Platform>Win32</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Release|Win32">
<Configuration>Release</Configuration>
<Platform>Win32</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Debug|x64">
<Configuration>Debug</Configuration>
<Platform>x64</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Release|x64">
<Configuration>Release</Configuration>
<Platform>x64</Platform>
</ProjectConfiguration>
</ItemGroup>
<ItemGroup>
<ClInclude Include="ArrayExporter.h" />
<ClInclude Include="BackgroundExporter.h" />
<ClInclude Include="BlobExporter.h" />
<ClInclude Include="CollisionExporter.h" />
<ClInclude Include="command_macros_base.h" />
<ClInclude Include="CutsceneExporter.h" />
<ClInclude Include="DisplayListExporter.h" />
<ClInclude Include="AnimationExporter.h" />
<ClInclude Include="Main.h" />
<ClInclude Include="Exporter.h" />
<ClInclude Include="MtxExporter.h" />
<ClInclude Include="SkeletonExporter.h" />
<ClInclude Include="SkeletonLimbExporter.h" />
<ClInclude Include="PathExporter.h" />
<ClInclude Include="PlayerAnimationExporter.h" />
<ClInclude Include="RoomExporter.h" />
<ClInclude Include="TextExporter.h" />
<ClInclude Include="TextureExporter.h" />
<ClInclude Include="VersionInfo.h" />
<ClInclude Include="VtxExporter.h" />
<ClInclude Include="z64cutscene.h" />
<ClInclude Include="z64cutscene_commands.h" />
</ItemGroup>
<ItemGroup>
<ClCompile Include="ArrayExporter.cpp" />
<ClCompile Include="BackgroundExporter.cpp" />
<ClCompile Include="BlobExporter.cpp" />
<ClCompile Include="CollisionExporter.cpp" />
<ClCompile Include="CutsceneExporter.cpp" />
<ClCompile Include="DisplayListExporter.cpp" />
<ClCompile Include="AnimationExporter.cpp" />
<ClCompile Include="Main.cpp" />
<ClCompile Include="Exporter.cpp" />
<ClCompile Include="MtxExporter.cpp" />
<ClCompile Include="SkeletonExporter.cpp" />
<ClCompile Include="SkeletonLimbExporter.cpp" />
<ClCompile Include="PathExporter.cpp" />
<ClCompile Include="PlayerAnimationExporter.cpp" />
<ClCompile Include="RoomExporter.cpp" />
<ClCompile Include="TextExporter.cpp" />
<ClCompile Include="TextureExporter.cpp" />
<ClCompile Include="VersionInfo.cpp" />
<ClCompile Include="VtxExporter.cpp" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\..\OTRGui\build\ZERO_CHECK.vcxproj">
<Project>{02d10590-9542-3f55-aaf8-6055677e2a2a}</Project>
<ReferenceOutputAssembly>false</ReferenceOutputAssembly>
</ProjectReference>
</ItemGroup>
<PropertyGroup Label="Globals">
<VCProjectVersion>16.0</VCProjectVersion>
<Keyword>Win32Proj</Keyword>
<ProjectGuid>{a6103fd3-0709-4fc7-b066-1a6e056d6306}</ProjectGuid>
<RootNamespace>OTRExporter</RootNamespace>
<WindowsTargetPlatformVersion>10.0</WindowsTargetPlatformVersion>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
<ConfigurationType>StaticLibrary</ConfigurationType>
<UseDebugLibraries>true</UseDebugLibraries>
<PlatformToolset>v142</PlatformToolset>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<UseDebugLibraries>false</UseDebugLibraries>
<PlatformToolset>v142</PlatformToolset>
<WholeProgramOptimization>true</WholeProgramOptimization>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
<ConfigurationType>StaticLibrary</ConfigurationType>
<UseDebugLibraries>true</UseDebugLibraries>
<PlatformToolset>v142</PlatformToolset>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
<ConfigurationType>StaticLibrary</ConfigurationType>
<UseDebugLibraries>false</UseDebugLibraries>
<PlatformToolset>v142</PlatformToolset>
<WholeProgramOptimization>true</WholeProgramOptimization>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
<ImportGroup Label="ExtensionSettings">
</ImportGroup>
<ImportGroup Label="Shared">
</ImportGroup>
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<PropertyGroup Label="UserMacros" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<LinkIncremental>true</LinkIncremental>
<IncludePath>$(SolutionDir)otrlib;$(SolutionDir)\ZAPD\ZAPD\;$(SolutionDir)\ZAPD\lib\tinyxml2;$(SolutionDir)\ZAPD\lib\libgfxd;$(SolutionDir)\ZAPD\lib\elfio;$(SolutionDir)\ZAPD\lib\assimp\include;$(SolutionDir)\ZAPD\lib\stb;$(ProjectDir);$(IncludePath)</IncludePath>
<CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
<CodeAnalysisRules />
<CodeAnalysisRuleAssemblies />
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<LinkIncremental>false</LinkIncremental>
<CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
<CodeAnalysisRules />
<CodeAnalysisRuleAssemblies />
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
<LinkIncremental>true</LinkIncremental>
<IncludePath>$(ProjectDir)..\..\ZAPDTR\ZAPD;$(ProjectDir)..\..\ZAPDTR\lib\tinyxml2;$(ProjectDir)..\..\ZAPDTR\lib\libgfxd;$(ProjectDir)..\..\ZAPDTR\ZAPDUtils;$(ProjectDir)..\..\libultraship\libultraship;$(ProjectDir)..\..\libultraship\libultraship\lib\spdlog\include;$(ProjectDir)..\..\libultraship\libultraship\Lib\Fast3D\U64;$(IncludePath)</IncludePath>
<LibraryPath>$(ProjectDir)..\..\libultraship\libultraship;$(LibraryPath)</LibraryPath>
<CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
<CodeAnalysisRules />
<CodeAnalysisRuleAssemblies />
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
<LinkIncremental>false</LinkIncremental>
<IncludePath>$(ProjectDir)..\..\ZAPDTR\ZAPD;$(ProjectDir)..\..\ZAPDTR\lib\tinyxml2;$(ProjectDir)..\..\ZAPDTR\lib\libgfxd;$(ProjectDir)..\..\ZAPDTR\ZAPDUtils;$(ProjectDir)..\..\libultraship\libultraship;$(ProjectDir)..\..\libultraship\libultraship\lib\spdlog\include;$(ProjectDir)..\..\libultraship\libultraship\Lib\Fast3D\U64;$(IncludePath)</IncludePath>
<LibraryPath>$(ProjectDir)..\..\libultraship\libultraship;$(LibraryPath)</LibraryPath>
<CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
<CodeAnalysisRules />
<CodeAnalysisRuleAssemblies />
</PropertyGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<ClCompile>
<WarningLevel>Level3</WarningLevel>
<SDLCheck>true</SDLCheck>
<PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<ConformanceMode>true</ConformanceMode>
<LanguageStandard>stdcpp17</LanguageStandard>
</ClCompile>
<Link>
<SubSystem>Console</SubSystem>
<GenerateDebugInformation>true</GenerateDebugInformation>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<ClCompile>
<WarningLevel>Level3</WarningLevel>
<FunctionLevelLinking>true</FunctionLevelLinking>
<IntrinsicFunctions>true</IntrinsicFunctions>
<SDLCheck>true</SDLCheck>
<PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<ConformanceMode>true</ConformanceMode>
</ClCompile>
<Link>
<SubSystem>Console</SubSystem>
<EnableCOMDATFolding>true</EnableCOMDATFolding>
<OptimizeReferences>true</OptimizeReferences>
<GenerateDebugInformation>true</GenerateDebugInformation>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
<ClCompile>
<WarningLevel>Level3</WarningLevel>
<SDLCheck>true</SDLCheck>
<PreprocessorDefinitions>_DEBUG;_CONSOLE;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<ConformanceMode>true</ConformanceMode>
<LanguageStandard>stdcpp17</LanguageStandard>
<LanguageStandard_C>stdc11</LanguageStandard_C>
<RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
</ClCompile>
<Link>
<SubSystem>Console</SubSystem>
<GenerateDebugInformation>true</GenerateDebugInformation>
<AdditionalDependencies>ZAPDUtils.lib;OTRLib.lib;%(AdditionalDependencies)</AdditionalDependencies>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
<ClCompile>
<WarningLevel>Level3</WarningLevel>
<FunctionLevelLinking>true</FunctionLevelLinking>
<IntrinsicFunctions>true</IntrinsicFunctions>
<SDLCheck>true</SDLCheck>
<PreprocessorDefinitions>NDEBUG;_CONSOLE;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<ConformanceMode>true</ConformanceMode>
<LanguageStandard>stdcpp17</LanguageStandard>
<LanguageStandard_C>stdc11</LanguageStandard_C>
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
</ClCompile>
<Link>
<SubSystem>Console</SubSystem>
<EnableCOMDATFolding>true</EnableCOMDATFolding>
<OptimizeReferences>true</OptimizeReferences>
<GenerateDebugInformation>true</GenerateDebugInformation>
</Link>
</ItemDefinitionGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
<ImportGroup Label="ExtensionTargets">
</ImportGroup>
</Project>
@@ -1,144 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup>
<Filter Include="Source Files">
<UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier>
<Extensions>cpp;c;cc;cxx;c++;cppm;ixx;def;odl;idl;hpj;bat;asm;asmx</Extensions>
</Filter>
<Filter Include="Header Files">
<UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier>
<Extensions>h;hh;hpp;hxx;h++;hm;inl;inc;ipp;xsd</Extensions>
</Filter>
<Filter Include="Resource Files">
<UniqueIdentifier>{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}</UniqueIdentifier>
<Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms</Extensions>
</Filter>
</ItemGroup>
<ItemGroup>
<ClInclude Include="CollisionExporter.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="RoomExporter.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="TextureExporter.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="DisplayListExporter.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="Main.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="PlayerAnimationExporter.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="BackgroundExporter.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="VtxExporter.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="ArrayExporter.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="Exporter.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="AnimationExporter.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="CutsceneExporter.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="z64cutscene.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="z64cutscene_commands.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="command_macros_base.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="PathExporter.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="SkeletonExporter.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="SkeletonLimbExporter.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="TextExporter.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="BlobExporter.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="MtxExporter.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="VersionInfo.h">
<Filter>Header Files</Filter>
</ClInclude>
</ItemGroup>
<ItemGroup>
<ClCompile Include="CollisionExporter.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="Main.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="RoomExporter.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="TextureExporter.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="DisplayListExporter.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="PlayerAnimationExporter.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="SkeletonExporter.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="SkeletonLimbExporter.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="BackgroundExporter.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="VtxExporter.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="ArrayExporter.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="Exporter.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="AnimationExporter.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="CutsceneExporter.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="PathExporter.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="TextExporter.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="BlobExporter.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="MtxExporter.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="VersionInfo.cpp">
<Filter>Source Files</Filter>
</ClCompile>
</ItemGroup>
</Project>
+2 -15
View File
@@ -453,13 +453,7 @@ void OTRExporter_Room::Save(ZResource* res, const fs::path& outPath, BinaryWrite
OTRExporter_Cutscene cs;
cs.Save(cmdSetCutscenes->cutscenes[0], "", &csWriter);
if (Globals::Instance->fileMode != ZFileMode::ExtractDirectory)
File::WriteAllBytes("Extract/" + fName, csStream->ToVector());
else
files[fName] = csStream->ToVector();
//std::string fName = OTRExporter_DisplayList::GetPathToRes(res, vtxDecl->varName);
//otrArchive->AddFile(fName, (uintptr_t)csStream->ToVector().data(), csWriter.GetBaseAddress());
AddFile(fName, csStream->ToVector());
}
break;
case RoomCommand::SetPathways:
@@ -480,14 +474,7 @@ void OTRExporter_Room::Save(ZResource* res, const fs::path& outPath, BinaryWrite
OTRExporter_Path pathExp;
pathExp.Save(&cmdSetPathways->pathwayList, outPath, &pathWriter);
if (Globals::Instance->fileMode != ZFileMode::ExtractDirectory)
File::WriteAllBytes("Extract/" + path, pathStream->ToVector());
else
files[path] = pathStream->ToVector();
//otrArchive->AddFile(path, (uintptr_t)pathStream->ToVector().data(), pathWriter.GetBaseAddress());
int bp = 0;
AddFile(path, pathStream->ToVector());
}
}
break;
+2 -2
View File
@@ -5,7 +5,7 @@ std::map<Ship::ResourceType, uint32_t> resourceVersions;
void InitVersionInfo()
{
resourceVersions = {
resourceVersions = std::map<Ship::ResourceType, uint32_t> {
{ Ship::ResourceType::Animation, 0 },
{ Ship::ResourceType::Model, 0 },
{ Ship::ResourceType::Texture, 0 },
@@ -24,4 +24,4 @@ void InitVersionInfo()
{ Ship::ResourceType::Text, 0 },
{ Ship::ResourceType::Blob, 0 },
};
}
}
+20 -7
View File
@@ -4,15 +4,22 @@ import os, sys, shutil
import shutil
from rom_info import Z64Rom
import rom_chooser
import struct
import subprocess
import argparse
def BuildOTR(xmlPath, rom):
def BuildOTR(xmlPath, rom, zapd_exe=None):
shutil.copytree("assets", "Extract/assets")
execStr = "x64\\Release\\ZAPD.exe" if sys.platform == "win32" else "../ZAPDTR/ZAPD.out"
execStr += " ed -i %s -b %s -fl CFG/filelists -o placeholder -osf placeholder -gsf 1 -rconf CFG/Config.xml -se OTR" % (xmlPath, rom)
if not zapd_exe:
zapd_exe = "x64\\Release\\ZAPD.exe" if sys.platform == "win32" else "../ZAPDTR/ZAPD.out"
print(execStr)
exitValue = os.system(execStr)
exec_cmd = [zapd_exe, "ed", "-i", xmlPath, "-b", rom, "-fl", "CFG/filelists",
"-o", "placeholder", "-osf", "placeholder", "-gsf", "1",
"-rconf", "CFG/Config.xml", "-se", "OTR"]
print(exec_cmd)
exitValue = subprocess.call(exec_cmd)
if exitValue != 0:
print("\n")
print("Error when building the OTR file...", file=os.sys.stderr)
@@ -20,13 +27,19 @@ def BuildOTR(xmlPath, rom):
print("\n")
def main():
rom_path = rom_chooser.chooseROM()
parser = argparse.ArgumentParser()
parser.add_argument("-z", "--zapd", help="Path to ZAPD executable", dest="zapd_exe", type=str)
parser.add_argument("rom", help="Path to the rom", type=str, nargs="?")
args = parser.parse_args()
rom_path = args.rom if args.rom else rom_chooser.chooseROM()
rom = Z64Rom(rom_path)
if (os.path.exists("Extract")):
shutil.rmtree("Extract")
BuildOTR("../soh/assets/xml/" + rom.version.xml_ver + "/", rom_path)
BuildOTR("../soh/assets/xml/" + rom.version.xml_ver + "/", rom_path, zapd_exe=args.zapd_exe)
if __name__ == "__main__":
main()
+1
View File
@@ -36,6 +36,7 @@ class RomVersion:
ROM_INFO_TABLE = dict()
ROM_INFO_TABLE[Checksums.OOT_PAL_GC] = RomVersion("CFG/filelists/gamecube_pal.txt", 0x7170, "GC_NMQ_PAL_F")
ROM_INFO_TABLE[Checksums.OOT_PAL_GC_DBG1] = RomVersion("CFG/filelists/dbg.txt", 0x12F70, "GC_NMQ_D")
ROM_INFO_TABLE[Checksums.OOT_PAL_GC_MQ_DBG] = RomVersion("CFG/filelists/dbg.txt", 0x12F70, "GC_MQ_D")
class RomDmaEntry:
def __init__(self, rom, i):
+65
View File
@@ -0,0 +1,65 @@
################################################################################
# Command for variable_watch. This command issues error message, if a variable
# is changed. If variable PROPERTY_READER_GUARD_DISABLED is TRUE nothing happens
# variable_watch(<variable> property_reader_guard)
################################################################################
function(property_reader_guard VARIABLE ACCESS VALUE CURRENT_LIST_FILE STACK)
if("${PROPERTY_READER_GUARD_DISABLED}")
return()
endif()
if("${ACCESS}" STREQUAL "MODIFIED_ACCESS")
message(FATAL_ERROR
" Variable ${VARIABLE} is not supposed to be changed.\n"
" It is used only for reading target property ${VARIABLE}.\n"
" Use\n"
" set_target_properties(\"<target>\" PROPERTIES \"${VARIABLE}\" \"<value>\")\n"
" or\n"
" set_target_properties(\"<target>\" PROPERTIES \"${VARIABLE}_<CONFIG>\" \"<value>\")\n"
" instead.\n")
endif()
endfunction()
################################################################################
# Create variable <name> with generator expression that expands to value of
# target property <name>_<CONFIG>. If property is empty or not set then property
# <name> is used instead. Variable <name> has watcher property_reader_guard that
# doesn't allow to edit it.
# create_property_reader(<name>)
# Input:
# name - Name of watched property and output variable
################################################################################
function(create_property_reader NAME)
set(PROPERTY_READER_GUARD_DISABLED TRUE)
set(CONFIG_VALUE "$<TARGET_GENEX_EVAL:${PROPS_TARGET},$<TARGET_PROPERTY:${PROPS_TARGET},${NAME}_$<UPPER_CASE:$<CONFIG>>>>")
set(IS_CONFIG_VALUE_EMPTY "$<STREQUAL:${CONFIG_VALUE},>")
set(GENERAL_VALUE "$<TARGET_GENEX_EVAL:${PROPS_TARGET},$<TARGET_PROPERTY:${PROPS_TARGET},${NAME}>>")
set("${NAME}" "$<IF:${IS_CONFIG_VALUE_EMPTY},${GENERAL_VALUE},${CONFIG_VALUE}>" PARENT_SCOPE)
variable_watch("${NAME}" property_reader_guard)
endfunction()
################################################################################
# Set property $<name>_${PROPS_CONFIG_U} of ${PROPS_TARGET} to <value>
# set_config_specific_property(<name> <value>)
# Input:
# name - Prefix of property name
# value - New value
################################################################################
function(set_config_specific_property NAME VALUE)
set_target_properties("${PROPS_TARGET}" PROPERTIES "${NAME}_${PROPS_CONFIG_U}" "${VALUE}")
endfunction()
################################################################################
create_property_reader("TARGET_NAME")
create_property_reader("OUTPUT_DIRECTORY")
set_config_specific_property("TARGET_NAME" "${PROPS_TARGET}")
set_config_specific_property("OUTPUT_NAME" "${TARGET_NAME}")
set_config_specific_property("ARCHIVE_OUTPUT_NAME" "${TARGET_NAME}")
set_config_specific_property("LIBRARY_OUTPUT_NAME" "${TARGET_NAME}")
set_config_specific_property("RUNTIME_OUTPUT_NAME" "${TARGET_NAME}")
set_config_specific_property("ARCHIVE_OUTPUT_DIRECTORY" "${OUTPUT_DIRECTORY}")
set_config_specific_property("LIBRARY_OUTPUT_DIRECTORY" "${OUTPUT_DIRECTORY}")
set_config_specific_property("RUNTIME_OUTPUT_DIRECTORY" "${OUTPUT_DIRECTORY}")
+12
View File
@@ -0,0 +1,12 @@
include("${CMAKE_CURRENT_LIST_DIR}/Default.cmake")
set_config_specific_property("OUTPUT_DIRECTORY" "${CMAKE_SOURCE_DIR}$<$<NOT:$<STREQUAL:${CMAKE_VS_PLATFORM_NAME},Win32>>:/${CMAKE_VS_PLATFORM_NAME}>/${PROPS_CONFIG}")
if(MSVC)
create_property_reader("DEFAULT_CXX_EXCEPTION_HANDLING")
create_property_reader("DEFAULT_CXX_DEBUG_INFORMATION_FORMAT")
set_target_properties("${PROPS_TARGET}" PROPERTIES MSVC_RUNTIME_LIBRARY "MultiThreaded$<$<CONFIG:Debug>:Debug>DLL")
set_config_specific_property("DEFAULT_CXX_EXCEPTION_HANDLING" "/EHsc")
set_config_specific_property("DEFAULT_CXX_DEBUG_INFORMATION_FORMAT" "/Zi")
endif()
+234
View File
@@ -0,0 +1,234 @@
# utils file for projects came from visual studio solution with cmake-converter.
################################################################################
# Wrap each token of the command with condition
################################################################################
cmake_policy(PUSH)
cmake_policy(SET CMP0054 NEW)
macro(prepare_commands)
unset(TOKEN_ROLE)
unset(COMMANDS)
foreach(TOKEN ${ARG_COMMANDS})
if("${TOKEN}" STREQUAL "COMMAND")
set(TOKEN_ROLE "KEYWORD")
elseif("${TOKEN_ROLE}" STREQUAL "KEYWORD")
set(TOKEN_ROLE "CONDITION")
elseif("${TOKEN_ROLE}" STREQUAL "CONDITION")
set(TOKEN_ROLE "COMMAND")
elseif("${TOKEN_ROLE}" STREQUAL "COMMAND")
set(TOKEN_ROLE "ARG")
endif()
if("${TOKEN_ROLE}" STREQUAL "KEYWORD")
list(APPEND COMMANDS "${TOKEN}")
elseif("${TOKEN_ROLE}" STREQUAL "CONDITION")
set(CONDITION ${TOKEN})
elseif("${TOKEN_ROLE}" STREQUAL "COMMAND")
list(APPEND COMMANDS "$<$<NOT:${CONDITION}>:${DUMMY}>$<${CONDITION}:${TOKEN}>")
elseif("${TOKEN_ROLE}" STREQUAL "ARG")
list(APPEND COMMANDS "$<${CONDITION}:${TOKEN}>")
endif()
endforeach()
endmacro()
cmake_policy(POP)
################################################################################
# Transform all the tokens to absolute paths
################################################################################
macro(prepare_output)
unset(OUTPUT)
foreach(TOKEN ${ARG_OUTPUT})
if(IS_ABSOLUTE ${TOKEN})
list(APPEND OUTPUT "${TOKEN}")
else()
list(APPEND OUTPUT "${CMAKE_CURRENT_SOURCE_DIR}/${TOKEN}")
endif()
endforeach()
endmacro()
################################################################################
# Parse add_custom_command_if args.
#
# Input:
# PRE_BUILD - Pre build event option
# PRE_LINK - Pre link event option
# POST_BUILD - Post build event option
# TARGET - Target
# OUTPUT - List of output files
# DEPENDS - List of files on which the command depends
# COMMANDS - List of commands(COMMAND condition1 commannd1 args1 COMMAND
# condition2 commannd2 args2 ...)
# Output:
# OUTPUT - Output files
# DEPENDS - Files on which the command depends
# COMMENT - Comment
# PRE_BUILD - TRUE/FALSE
# PRE_LINK - TRUE/FALSE
# POST_BUILD - TRUE/FALSE
# TARGET - Target name
# COMMANDS - Prepared commands(every token is wrapped in CONDITION)
# NAME - Unique name for custom target
# STEP - PRE_BUILD/PRE_LINK/POST_BUILD
################################################################################
function(add_custom_command_if_parse_arguments)
cmake_parse_arguments("ARG" "PRE_BUILD;PRE_LINK;POST_BUILD" "TARGET;COMMENT" "DEPENDS;OUTPUT;COMMANDS" ${ARGN})
if(WIN32)
set(DUMMY "cd.")
elseif(UNIX)
set(DUMMY "true")
endif()
prepare_commands()
prepare_output()
set(DEPENDS "${ARG_DEPENDS}")
set(COMMENT "${ARG_COMMENT}")
set(PRE_BUILD "${ARG_PRE_BUILD}")
set(PRE_LINK "${ARG_PRE_LINK}")
set(POST_BUILD "${ARG_POST_BUILD}")
set(TARGET "${ARG_TARGET}")
if(PRE_BUILD)
set(STEP "PRE_BUILD")
elseif(PRE_LINK)
set(STEP "PRE_LINK")
elseif(POST_BUILD)
set(STEP "POST_BUILD")
endif()
set(NAME "${TARGET}_${STEP}")
set(OUTPUT "${OUTPUT}" PARENT_SCOPE)
set(DEPENDS "${DEPENDS}" PARENT_SCOPE)
set(COMMENT "${COMMENT}" PARENT_SCOPE)
set(PRE_BUILD "${PRE_BUILD}" PARENT_SCOPE)
set(PRE_LINK "${PRE_LINK}" PARENT_SCOPE)
set(POST_BUILD "${POST_BUILD}" PARENT_SCOPE)
set(TARGET "${TARGET}" PARENT_SCOPE)
set(COMMANDS "${COMMANDS}" PARENT_SCOPE)
set(STEP "${STEP}" PARENT_SCOPE)
set(NAME "${NAME}" PARENT_SCOPE)
endfunction()
################################################################################
# Add conditional custom command
#
# Generating Files
# The first signature is for adding a custom command to produce an output:
# add_custom_command_if(
# <OUTPUT output1 [output2 ...]>
# <COMMANDS>
# <COMMAND condition command1 [args1...]>
# [COMMAND condition command2 [args2...]]
# [DEPENDS [depends...]]
# [COMMENT comment]
#
# Build Events
# add_custom_command_if(
# <TARGET target>
# <PRE_BUILD | PRE_LINK | POST_BUILD>
# <COMMAND condition command1 [args1...]>
# [COMMAND condition command2 [args2...]]
# [COMMENT comment]
#
# Input:
# output - Output files the command is expected to produce
# condition - Generator expression for wrapping the command
# command - Command-line(s) to execute at build time.
# args - Command`s args
# depends - Files on which the command depends
# comment - Display the given message before the commands are executed at
# build time.
# PRE_BUILD - Run before any other rules are executed within the target
# PRE_LINK - Run after sources have been compiled but before linking the
# binary
# POST_BUILD - Run after all other rules within the target have been
# executed
################################################################################
function(add_custom_command_if)
add_custom_command_if_parse_arguments(${ARGN})
if(OUTPUT AND TARGET)
message(FATAL_ERROR "Wrong syntax. A TARGET and OUTPUT can not both be specified.")
endif()
if(OUTPUT)
add_custom_command(OUTPUT ${OUTPUT}
${COMMANDS}
DEPENDS ${DEPENDS}
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
COMMENT ${COMMENT})
elseif(TARGET)
if(PRE_BUILD AND NOT ${CMAKE_GENERATOR} MATCHES "Visual Studio")
add_custom_target(
${NAME}
${COMMANDS}
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
COMMENT ${COMMENT})
add_dependencies(${TARGET} ${NAME})
else()
add_custom_command(
TARGET ${TARGET}
${STEP}
${COMMANDS}
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
COMMENT ${COMMENT})
endif()
else()
message(FATAL_ERROR "Wrong syntax. A TARGET or OUTPUT must be specified.")
endif()
endfunction()
################################################################################
# Use props file for a target and configs
# use_props(<target> <configs...> <props_file>)
# Inside <props_file> there are following variables:
# PROPS_TARGET - <target>
# PROPS_CONFIG - One of <configs...>
# PROPS_CONFIG_U - Uppercase PROPS_CONFIG
# Input:
# target - Target to apply props file
# configs - Build configurations to apply props file
# props_file - CMake script
################################################################################
macro(use_props TARGET CONFIGS PROPS_FILE)
set(PROPS_TARGET "${TARGET}")
foreach(PROPS_CONFIG ${CONFIGS})
string(TOUPPER "${PROPS_CONFIG}" PROPS_CONFIG_U)
get_filename_component(ABSOLUTE_PROPS_FILE "${PROPS_FILE}" ABSOLUTE BASE_DIR "${CMAKE_CURRENT_LIST_DIR}")
if(EXISTS "${ABSOLUTE_PROPS_FILE}")
include("${ABSOLUTE_PROPS_FILE}")
else()
message(WARNING "Corresponding cmake file from props \"${ABSOLUTE_PROPS_FILE}\" doesn't exist")
endif()
endforeach()
endmacro()
################################################################################
# Add compile options to source file
# source_file_compile_options(<source_file> [compile_options...])
# Input:
# source_file - Source file
# compile_options - Options to add to COMPILE_FLAGS property
################################################################################
function(source_file_compile_options SOURCE_FILE)
if("${ARGC}" LESS_EQUAL "1")
return()
endif()
get_source_file_property(COMPILE_OPTIONS "${SOURCE_FILE}" COMPILE_OPTIONS)
if(COMPILE_OPTIONS)
list(APPEND COMPILE_OPTIONS ${ARGN})
else()
set(COMPILE_OPTIONS "${ARGN}")
endif()
set_source_files_properties("${SOURCE_FILE}" PROPERTIES COMPILE_OPTIONS "${COMPILE_OPTIONS}")
endfunction()
################################################################################
# Default properties of visual studio projects
################################################################################
set(DEFAULT_CXX_PROPS "${CMAKE_CURRENT_LIST_DIR}/DefaultCXX.cmake")
set(DEFAULT_Fortran_PROPS "${CMAKE_CURRENT_LIST_DIR}/DefaultFortran.cmake")
+44 -10
View File
@@ -3,27 +3,61 @@ project(OTRGui)
set(PLATFORM "Desktop")
set(CMAKE_CXX_STANDARD 20)
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/build)
#set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/build)
set(APP_ICON_RESOURCE_WINDOWS ${CMAKE_CURRENT_SOURCE_DIR}/appicon.rc)
add_subdirectory(libs/raylib)
if (CMAKE_SYSTEM_NAME STREQUAL "Linux")
set(OpenGL_GL_PREFERENCE "GLVND")
endif()
include(CMake/Utils.cmake)
add_subdirectory(libs/raylib EXCLUDE_FROM_ALL)
include_directories(src)
include_directories(src/game)
include_directories(include)
include_external_msproject(ZAPD ../../ZAPDTR/ZAPD/ZAPD.vcproj)
include_external_msproject(ZAPDUtils ../../ZAPDTR/ZAPDUtils/ZAPDUtils.vcproj)
include_external_msproject(libultraship ../../libultraship/libultraship/libultraship.vcproj)
include_external_msproject(OTRExporter ../../OTRExporter/OTRExporter/OTRExporter.vcproj)
if (NOT TARGET libultraship)
add_subdirectory(../libultraship/libultraship ${CMAKE_BINARY_DIR}/libultraship)
endif()
if (NOT TARGET ZAPD)
add_subdirectory(../ZAPDTR/ZAPD ${CMAKE_BINARY_DIR}/ZAPD)
endif()
if (NOT TARGET ZAPDUtils)
add_subdirectory(../ZAPDTR/ZAPDUtils ${CMAKE_BINARY_DIR}/ZAPDUtils)
endif()
if (NOT TARGET OTRExporter)
add_subdirectory(../OTRExporter/OTRExporter ${CMAKE_BINARY_DIR}/OTRExporter)
endif()
if (NOT TARGET storm)
add_subdirectory(../StormLib ${CMAKE_BINARY_DIR}/StormLib)
endif()
file(GLOB_RECURSE HEADERS src/*.h)
file(GLOB_RECURSE SOURCES src/*.cpp)
file(GLOB_RECURSE C_SOURCES src/*.c)
add_executable(${PROJECT_NAME} ${SOURCES} ${C_SOURCES} ${HEADERS} ${APP_ICON_RESOURCE_WINDOWS})
add_custom_command(TARGET ${PROJECT_NAME} PRE_BUILD COMMAND ${CMAKE_COMMAND} -Dsrc_dir="${CMAKE_SOURCE_DIR}/assets" -Ddst_dir="${CMAKE_CURRENT_BINARY_DIR}/assets" -P "${CMAKE_CURRENT_SOURCE_DIR}/Overwrite.cmake")
add_custom_command(TARGET ${PROJECT_NAME} PRE_BUILD COMMAND ${CMAKE_COMMAND} -Dsrc_dir="${CMAKE_SOURCE_DIR}/../OTRExporter/assets" -Ddst_dir="${CMAKE_CURRENT_BINARY_DIR}/assets/game" -P "${CMAKE_CURRENT_SOURCE_DIR}/Overwrite.cmake")
add_custom_command(TARGET ${PROJECT_NAME} PRE_BUILD COMMAND ${CMAKE_COMMAND} -Dsrc_dir="${CMAKE_SOURCE_DIR}/../soh/assets/xml" -Ddst_dir="${CMAKE_CURRENT_BINARY_DIR}/assets/extractor/xmls" -P "${CMAKE_CURRENT_SOURCE_DIR}/Overwrite.cmake")
add_executable(${PROJECT_NAME} EXCLUDE_FROM_ALL ${SOURCES} ${C_SOURCES} ${HEADERS} ${APP_ICON_RESOURCE_WINDOWS})
if (CMAKE_SYSTEM_NAME STREQUAL "Windows")
use_props(${PROJECT_NAME} "${CMAKE_CONFIGURATION_TYPES}" "${DEFAULT_CXX_PROPS}")
endif()
add_custom_target(Assets ALL
COMMAND ${CMAKE_COMMAND} -Dsrc_dir="${CMAKE_CURRENT_SOURCE_DIR}/assets" -Ddst_dir="${CMAKE_CURRENT_BINARY_DIR}/assets" -P "${CMAKE_CURRENT_SOURCE_DIR}/Overwrite.cmake"
COMMAND ${CMAKE_COMMAND} -Dsrc_dir="${CMAKE_CURRENT_SOURCE_DIR}/../OTRExporter/assets" -Ddst_dir="${CMAKE_CURRENT_BINARY_DIR}/assets/game" -P "${CMAKE_CURRENT_SOURCE_DIR}/Overwrite.cmake"
COMMAND ${CMAKE_COMMAND} -Dsrc_dir="${CMAKE_CURRENT_SOURCE_DIR}/../soh/assets/xml" -Ddst_dir="${CMAKE_CURRENT_BINARY_DIR}/assets/extractor/xmls" -P "${CMAKE_CURRENT_SOURCE_DIR}/Overwrite.cmake"
)
add_dependencies(OTRGui Assets)
target_link_libraries(${PROJECT_NAME} PUBLIC raylib)
INSTALL(TARGETS OTRGui DESTINATION . COMPONENT ship)
install(DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/assets
DESTINATION .
COMPONENT ship
)
INSTALL(TARGETS ZAPD DESTINATION assets/extractor COMPONENT ship)
+9 -4
View File
@@ -1,10 +1,15 @@
file(GLOB_RECURSE _file_list RELATIVE "${src_dir}" "${src_dir}/*")
include(CMakePrintHelpers)
string(REPLACE "\\ " " " sources_dir "${src_dir}")
string(REPLACE "\\ " " " destination_dir "${dst_dir}")
file(GLOB_RECURSE _file_list RELATIVE "${sources_dir}" "${sources_dir}/*")
foreach( each_file ${_file_list} )
set(destinationfile "${dst_dir}/${each_file}")
set(sourcefile "${src_dir}/${each_file}")
set(destinationfile "${destination_dir}/${each_file}")
set(sourcefile "${sources_dir}/${each_file}")
if(NOT EXISTS ${destinationfile} OR ${sourcefile} IS_NEWER_THAN ${destinationfile})
get_filename_component(destinationdir ${destinationfile} DIRECTORY)
file(COPY ${sourcefile} DESTINATION ${destinationdir})
endif()
endforeach(each_file)
endforeach(each_file)
-1
View File
@@ -91,7 +91,6 @@ void ExtractRom()
//MoonUtils::copy("tmp/baserom/Audioseq", "Extract/Audioseq");
//MoonUtils::copy("tmp/baserom/Audiotable", "Extract/Audiotable");
//MoonUtils::copy("tmp/baserom/version", "Extract/version");
MoonUtils::write("Extract/version", (char*)&version.crc, sizeof(version.crc));
MoonUtils::copy("assets/game/", "Extract/assets/");
+3 -3
View File
@@ -29,7 +29,7 @@ std::string GetXMLVersion(RomVersion version)
switch (version.crc)
{
case OOT_PAL_GC_DBG1: return "GC_NMQ_D";
case OOT_PAL_GC_DBG2: return "GC_MQ_D";
case OOT_PAL_GC_MQ_DBG: return "GC_MQ_D";
case OOT_PAL_GC: return "GC_NMQ_PAL_F";
}
@@ -81,7 +81,7 @@ void startWorker(RomVersion version) {
path += GetXMLVersion(version);
Util::write("tmp/baserom/version", (char*)&version.crc, sizeof(version.crc));
// Util::write("tmp/baserom/version", (char*)&version.crc, sizeof(version.crc));
if (oldExtractMode)
{
@@ -144,4 +144,4 @@ void updateWorker(const std::string& output) {
std::thread otr(BuildOTR, output);
otr.detach();
}
}
}
+70 -12
View File
@@ -12,16 +12,25 @@ The Ship does not include assets and as such requires a prior copy of the game t
4) Launch `soh.exe`
### Supported Games
Ocarina of Time Debug (not Master Quest)
#### Ocarina of Time Debug PAL GC (not Master Quest)
> Currently the recommended option
```
Build team: `zelda@srd022j`
Build date: `03-02-21 00:49:18` (year-month-day)
sha1: cee6bc3c2a634b41728f2af8da54d9bf8cc14099
```
Ocarina of Time PAL GameCube
#### Ocarina of Time PAL GameCube
> May lead to crashes and instability
```
sha1: 0227d7c0074f2d0ac935631990da8ec5914597b4
```
#### Ocarina of Time Debug PAL GC MQ (Dungeons will be Master Quest)
```
Build team: `zelda@srd022j`
Build date: `03-02-21 00:16:31` (year-month-day)
sha1: 079b855b943d6ad8bd1eb026c0ed169ecbdac7da (Produced by decomp)
sha1: 50bebedad9e0f10746a52b07239e47fa6c284d03 (Alternate)
```
Congratulations, you are now sailing with the Ship of Harkinian! Have fun!
@@ -29,10 +38,10 @@ Congratulations, you are now sailing with the Ship of Harkinian! Have fun!
The Ship of Harkinian uses a proprietary versioning system consisting of a sci-fi film character followed by a phonetic alphabet code word. The film character represents a major release version which increments with the addition of many new features and bug fixes. The code word represents a minor release version which increments with small updates mainly comprised of bug fixes. For example, `DECKARD ALFA`.
### The Extraction Tool
### Windows Rom Extraction
* Open a rom to initiate generating the `oot.otr` archive file.
* If a second button exists then `oot.otr` already exists. To prevent overwriting the old `oot.otr` use this button to choose a new game directory. The new directory must not already contain an `oot.otr` to prevent an error.
* Open OTRGui.exe, and select one of the supported roms listed above, to generate the `oot.otr` archive file.
* If a second button already exits then `oot.otr` already exists. To prevent overwriting the old `oot.otr` use this button to choose a new game directory. The new directory must not already contain an `oot.otr` to prevent an error.
* When the process completes, place `oot.otr` beside `soh.exe` if it is not already.
This packaging process can take up to **5 minutes**.
@@ -40,13 +49,60 @@ This packaging process can take up to **5 minutes**.
Close the OTRGui when the `Done!` message appears.
If you get another message, then you might have selected the wrong rom. Make sure to use a rom consistent with the above checksum.
### Linux Rom Extraction
* Place one of the supported roms in the same folder as the appimage.
* When you run the soh appimage, it should begin generating the `oot.otr` archive file.
* When the process completes, place `oot.otr` in the same folder as the appimage, if it is not already, then run the appimage.
The packaging process can take up to **5 minutes**.
If you get any errors, then you might have selected the wrong rom. Make sure to use a rom consistent with the above checksum.
### MacOS Rom Extraction
* Run `soh.app`, and when prompted, select one of the supported roms listed above.
* You should see a notification saying `Processing OTR`, then, once the process is complete, you should get a notification saying `OTR Successfully Generated`, then the game should start.
The packing process can take up to **5 minutes**.
If you get an error saying `Incompatible ROM hash`, you have selected the wrong rom, make sure the checksum matches one of the ones listed above.
### Nintendo Switch Rom Extraction
* Download the latest PC release of the Ship of Harkinian, and follow the instructions above for generating the `oot.otr` archive on that platform.
* Place the `.nro` and the `oot.otr` archive into a folder called `soh` in your Switch folder on your Switch
### Nintendo Wii U Rom Extraction
* Download the latest PC release of the Ship of Harkinian, and follow the instructions above for generating the `oot.otr` archive on that platform.
* Copy the `.rpx` and the `oot.otr` archive to `wiiu/apps/soh`
---
If you still cannot get the tool to work, join our [Discord Server](https://discord.com/invite/BtBmd55HVH) and ask for help in the `#support` text channel. Keep-in-mind that we do not condone piracy in any way.
### Running The Ship of Harkinian
Launch the game. If the window immediately closes, or if there are visual artifacts, you may have selected the wrong rom in the OTRGui tool.
Currently, DirectX 11 and OpenGL is supported. Change the renderer by opening the `shipofharkinian.ini` configuration file in notepad and add `sdl` to `gfx backend` for OpenGL or leave blank for DirectX.
Default keyboard configuration:
| N64 | A | B | Z | Start | Analog stick | C buttons | D-Pad |
| - | - | - | - | - | - | - | - |
| Keyboard | X | C | Z | Space | WASD | Arrow keys | TFGH |
Other shortcuts:
| Keys | Action |
| - | - |
| F1 | Toggle menubar |
| F5 | Save state |
| F6 | Change state |
| F7 | Load state |
| F10 | Fullscreen (OpenGL) |
| Alt+Enter | Fullscreen (DirectX) |
| Ctrl+R | Reset |
Currently, DirectX 11 and OpenGL are supported. Change the renderer by opening the `shipofharkinian.json` configuration file in notepad and add `sdl` to the quotes in `"GfxBackend": ""` for OpenGL or leave blank for DirectX.
## Take The Survey
Want to use cartridge readers in tandem with the OTRGui?
@@ -61,8 +117,11 @@ Official Discord: https://discord.com/invite/BtBmd55HVH
Refer to the [building instructions](BUILDING.md) to compile SoH.
## Troubleshooting The Exporter
- Affirm that you have an `/assets` folder filled with XMLs in the same directory as OTRGui.exe
- Affirm that `zapd.exe` exists in the `/assets/extractor` folder
- Confirm that you have an `/assets` folder filled with XMLs in the same directory as OTRGui.exe
- Confirm that `zapd.exe` exists in the `/assets/extractor` folder
## Nightly Builds
Nightly builds of Ship of Harkinian are available [here](https://builds.shipofharkinian.com/)
## The Harbour Masters Are...
@@ -102,10 +161,9 @@ Refer to the [building instructions](BUILDING.md) to compile SoH.
## Video Credits
Kenix | Producer / Writer
rainbow_fash | Executive Producer
TheLegendOfXela | Editor
briaguya | Writer
rainbow_fash | Executive Producer
ReveriePass | Editor
MicTheMicrophone | Gwonam / The King
Amphibibro | Link
AceHeart | Zelda
###### Lemons
+168
View File
@@ -0,0 +1,168 @@
#################
## Eclipse
#################
*.pydevproject
.project
.metadata
bin/
tmp/
*.tmp
*.bak
*.swp
*~.nib
local.properties
.classpath
.settings/
.loadpath
# External tool builders
.externalToolBuilders/
# Locally stored "Eclipse launch configurations"
*.launch
# CDT-specific
.cproject
# PDT-specific
.buildpath
#################
## Visual Studio
#################
## Ignore Visual Studio temporary files, build results, and
## files generated by popular Visual Studio add-ons.
# User-specific files
*.suo
*.user
*.sln.docstates
# Build results
[Dd]ebug/
[Rr]elease/
*_i.c
*_p.c
*.ilk
*.meta
*.obj
*.pch
*.pdb
*.pgc
*.pgd
*.rsp
*.sbr
*.tlb
*.tli
*.tlh
*.tmp
*.vspscc
.builds
*.dotCover
*.o
*.dylib
## TODO: If you have NuGet Package Restore enabled, uncomment this
#packages/
# Visual C++ cache files
ipch/
*.aps
*.ncb
*.opensdf
*.sdf
# Visual Studio profiler
*.psess
*.vsp
# ReSharper is a .NET coding add-in
_ReSharper*
# Installshield output folder
[Ee]xpress
# DocProject is a documentation generator add-in
DocProject/buildhelp/
DocProject/Help/*.HxT
DocProject/Help/*.HxC
DocProject/Help/*.hhc
DocProject/Help/*.hhk
DocProject/Help/*.hhp
DocProject/Help/Html2
DocProject/Help/html
# Click-Once directory
publish
# Others
[Bb]in
[Oo]bj
sql
TestResults
*.Cache
ClientBin
stylecop.*
~$*
*.dbmdl
Generated_Code #added for RIA/Silverlight projects
# Backup & report files from converting an old project file to a newer
# Visual Studio version. Backup files are not needed, because we have git ;-)
_UpgradeReport_Files/
Backup*/
UpgradeLog*.XML
############
## Windows
############
# Windows image file caches
Thumbs.db
# Folder config file
Desktop.ini
#############
## Python
#############
*.py[co]
# Packages
*.egg
*.egg-info
dist
build
nxbuild
eggs
parts
bin
var
sdist
develop-eggs
.installed.cfg
# Installer logs
pip-log.txt
# Unit test / coverage reports
.coverage
.tox
#Translations
*.mo
#Mr Developer
.mr.developer.cfg
# Mac crap
.DS_Store
**/project.xcworkspace
**/xcuserdata
+479
View File
@@ -0,0 +1,479 @@
set(PROJECT_NAME StormLib)
#project(StormLib)
cmake_minimum_required(VERSION 3.10)
set(LIBRARY_NAME storm)
set(CMAKE_CXX_STANDARD 20)
set(CMAKE_CXX_EXTENSIONS OFF)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
include(CMakeDependentOption)
option(BUILD_SHARED_LIBS "Compile shared libraries" OFF)
option(STORM_SKIP_INSTALL "Skip installing files" OFF)
option(STORM_BUILD_TESTS
"Compile StormLib test application" OFF
# "BUILD_TESTING" OFF # Stay coherent with CTest variables
)
if (CMAKE_SYSTEM_NAME STREQUAL "Windows")
set(Source_Files__Windows
src/lzma/C/LzFindMt.c
src/lzma/C/Threads.c
)
endif()
set(SRC_FILES
src/adpcm/adpcm.cpp
src/huffman/huff.cpp
src/jenkins/lookup3.c
src/lzma/C/LzFind.c
src/lzma/C/LzmaDec.c
src/lzma/C/LzmaEnc.c
src/pklib/explode.c
src/pklib/implode.c
src/sparse/sparse.cpp
src/FileStream.cpp
src/SBaseCommon.cpp
src/SBaseDumpData.cpp
src/SBaseFileTable.cpp
src/SBaseSubTypes.cpp
src/SCompression.cpp
src/SFileAddFile.cpp
src/SFileAttributes.cpp
src/SFileCompactArchive.cpp
src/SFileCreateArchive.cpp
src/SFileExtractFile.cpp
src/SFileFindFile.cpp
src/SFileGetFileInfo.cpp
src/SFileListFile.cpp
src/SFileOpenArchive.cpp
src/SFileOpenFileEx.cpp
src/SFilePatchArchives.cpp
src/SFileReadFile.cpp
src/SFileVerify.cpp
src/libtomcrypt/src/pk/rsa/rsa_verify_simple.c
src/libtomcrypt/src/misc/crypt_libc.c
${Source_Files__Windows}
)
if(MSVC)
# This file is used to create a DLL on windows
# Use BUILD_SHARED_LIBS to create StormLib.dll
set(STORM_DEF_FILES
src/DllMain.def
)
endif()
set(TOMCRYPT_FILES
src/libtomcrypt/src/hashes/hash_memory.c
src/libtomcrypt/src/hashes/md5.c
src/libtomcrypt/src/hashes/sha1.c
src/libtomcrypt/src/math/ltm_desc.c
src/libtomcrypt/src/math/multi.c
src/libtomcrypt/src/math/rand_prime.c
src/libtomcrypt/src/misc/base64_decode.c
src/libtomcrypt/src/misc/crypt_argchk.c
src/libtomcrypt/src/misc/crypt_find_hash.c
src/libtomcrypt/src/misc/crypt_find_prng.c
src/libtomcrypt/src/misc/crypt_hash_descriptor.c
src/libtomcrypt/src/misc/crypt_hash_is_valid.c
src/libtomcrypt/src/misc/crypt_ltc_mp_descriptor.c
src/libtomcrypt/src/misc/crypt_prng_descriptor.c
src/libtomcrypt/src/misc/crypt_prng_is_valid.c
src/libtomcrypt/src/misc/crypt_register_hash.c
src/libtomcrypt/src/misc/crypt_register_prng.c
src/libtomcrypt/src/misc/zeromem.c
src/libtomcrypt/src/pk/asn1/der_decode_bit_string.c
src/libtomcrypt/src/pk/asn1/der_decode_boolean.c
src/libtomcrypt/src/pk/asn1/der_decode_choice.c
src/libtomcrypt/src/pk/asn1/der_decode_ia5_string.c
src/libtomcrypt/src/pk/asn1/der_decode_integer.c
src/libtomcrypt/src/pk/asn1/der_decode_object_identifier.c
src/libtomcrypt/src/pk/asn1/der_decode_octet_string.c
src/libtomcrypt/src/pk/asn1/der_decode_printable_string.c
src/libtomcrypt/src/pk/asn1/der_decode_sequence_ex.c
src/libtomcrypt/src/pk/asn1/der_decode_sequence_flexi.c
src/libtomcrypt/src/pk/asn1/der_decode_sequence_multi.c
src/libtomcrypt/src/pk/asn1/der_decode_short_integer.c
src/libtomcrypt/src/pk/asn1/der_decode_utctime.c
src/libtomcrypt/src/pk/asn1/der_decode_utf8_string.c
src/libtomcrypt/src/pk/asn1/der_encode_bit_string.c
src/libtomcrypt/src/pk/asn1/der_encode_boolean.c
src/libtomcrypt/src/pk/asn1/der_encode_ia5_string.c
src/libtomcrypt/src/pk/asn1/der_encode_integer.c
src/libtomcrypt/src/pk/asn1/der_encode_object_identifier.c
src/libtomcrypt/src/pk/asn1/der_encode_octet_string.c
src/libtomcrypt/src/pk/asn1/der_encode_printable_string.c
src/libtomcrypt/src/pk/asn1/der_encode_sequence_ex.c
src/libtomcrypt/src/pk/asn1/der_encode_sequence_multi.c
src/libtomcrypt/src/pk/asn1/der_encode_set.c
src/libtomcrypt/src/pk/asn1/der_encode_setof.c
src/libtomcrypt/src/pk/asn1/der_encode_short_integer.c
src/libtomcrypt/src/pk/asn1/der_encode_utctime.c
src/libtomcrypt/src/pk/asn1/der_encode_utf8_string.c
src/libtomcrypt/src/pk/asn1/der_length_bit_string.c
src/libtomcrypt/src/pk/asn1/der_length_boolean.c
src/libtomcrypt/src/pk/asn1/der_length_ia5_string.c
src/libtomcrypt/src/pk/asn1/der_length_integer.c
src/libtomcrypt/src/pk/asn1/der_length_object_identifier.c
src/libtomcrypt/src/pk/asn1/der_length_octet_string.c
src/libtomcrypt/src/pk/asn1/der_length_printable_string.c
src/libtomcrypt/src/pk/asn1/der_length_sequence.c
src/libtomcrypt/src/pk/asn1/der_length_utctime.c
src/libtomcrypt/src/pk/asn1/der_sequence_free.c
src/libtomcrypt/src/pk/asn1/der_length_utf8_string.c
src/libtomcrypt/src/pk/asn1/der_length_short_integer.c
src/libtomcrypt/src/pk/ecc/ltc_ecc_map.c
src/libtomcrypt/src/pk/ecc/ltc_ecc_mul2add.c
src/libtomcrypt/src/pk/ecc/ltc_ecc_mulmod.c
src/libtomcrypt/src/pk/ecc/ltc_ecc_points.c
src/libtomcrypt/src/pk/ecc/ltc_ecc_projective_add_point.c
src/libtomcrypt/src/pk/ecc/ltc_ecc_projective_dbl_point.c
src/libtomcrypt/src/pk/pkcs1/pkcs_1_mgf1.c
src/libtomcrypt/src/pk/pkcs1/pkcs_1_oaep_decode.c
src/libtomcrypt/src/pk/pkcs1/pkcs_1_pss_decode.c
src/libtomcrypt/src/pk/pkcs1/pkcs_1_pss_encode.c
src/libtomcrypt/src/pk/pkcs1/pkcs_1_v1_5_decode.c
src/libtomcrypt/src/pk/pkcs1/pkcs_1_v1_5_encode.c
src/libtomcrypt/src/pk/rsa/rsa_exptmod.c
src/libtomcrypt/src/pk/rsa/rsa_free.c
src/libtomcrypt/src/pk/rsa/rsa_import.c
src/libtomcrypt/src/pk/rsa/rsa_make_key.c
src/libtomcrypt/src/pk/rsa/rsa_sign_hash.c
src/libtomcrypt/src/pk/rsa/rsa_verify_hash.c
)
set(TOMMATH_FILES
src/libtommath/bncore.c
src/libtommath/bn_fast_mp_invmod.c
src/libtommath/bn_fast_mp_montgomery_reduce.c
src/libtommath/bn_fast_s_mp_mul_digs.c
src/libtommath/bn_fast_s_mp_mul_high_digs.c
src/libtommath/bn_fast_s_mp_sqr.c
src/libtommath/bn_mp_2expt.c
src/libtommath/bn_mp_abs.c
src/libtommath/bn_mp_add.c
src/libtommath/bn_mp_addmod.c
src/libtommath/bn_mp_add_d.c
src/libtommath/bn_mp_and.c
src/libtommath/bn_mp_clamp.c
src/libtommath/bn_mp_clear.c
src/libtommath/bn_mp_clear_multi.c
src/libtommath/bn_mp_cmp.c
src/libtommath/bn_mp_cmp_d.c
src/libtommath/bn_mp_cmp_mag.c
src/libtommath/bn_mp_cnt_lsb.c
src/libtommath/bn_mp_copy.c
src/libtommath/bn_mp_count_bits.c
src/libtommath/bn_mp_div.c
src/libtommath/bn_mp_div_2.c
src/libtommath/bn_mp_div_2d.c
src/libtommath/bn_mp_div_3.c
src/libtommath/bn_mp_div_d.c
src/libtommath/bn_mp_dr_is_modulus.c
src/libtommath/bn_mp_dr_reduce.c
src/libtommath/bn_mp_dr_setup.c
src/libtommath/bn_mp_exch.c
src/libtommath/bn_mp_exptmod.c
src/libtommath/bn_mp_exptmod_fast.c
src/libtommath/bn_mp_expt_d.c
src/libtommath/bn_mp_exteuclid.c
src/libtommath/bn_mp_fread.c
src/libtommath/bn_mp_fwrite.c
src/libtommath/bn_mp_gcd.c
src/libtommath/bn_mp_get_int.c
src/libtommath/bn_mp_grow.c
src/libtommath/bn_mp_init.c
src/libtommath/bn_mp_init_copy.c
src/libtommath/bn_mp_init_multi.c
src/libtommath/bn_mp_init_set.c
src/libtommath/bn_mp_init_set_int.c
src/libtommath/bn_mp_init_size.c
src/libtommath/bn_mp_invmod.c
src/libtommath/bn_mp_invmod_slow.c
src/libtommath/bn_mp_is_square.c
src/libtommath/bn_mp_jacobi.c
src/libtommath/bn_mp_karatsuba_mul.c
src/libtommath/bn_mp_karatsuba_sqr.c
src/libtommath/bn_mp_lcm.c
src/libtommath/bn_mp_lshd.c
src/libtommath/bn_mp_mod.c
src/libtommath/bn_mp_mod_2d.c
src/libtommath/bn_mp_mod_d.c
src/libtommath/bn_mp_montgomery_calc_normalization.c
src/libtommath/bn_mp_montgomery_reduce.c
src/libtommath/bn_mp_montgomery_setup.c
src/libtommath/bn_mp_mul.c
src/libtommath/bn_mp_mulmod.c
src/libtommath/bn_mp_mul_2.c
src/libtommath/bn_mp_mul_2d.c
src/libtommath/bn_mp_mul_d.c
src/libtommath/bn_mp_neg.c
src/libtommath/bn_mp_n_root.c
src/libtommath/bn_mp_or.c
src/libtommath/bn_mp_prime_fermat.c
src/libtommath/bn_mp_prime_is_divisible.c
src/libtommath/bn_mp_prime_is_prime.c
src/libtommath/bn_mp_prime_miller_rabin.c
src/libtommath/bn_mp_prime_next_prime.c
src/libtommath/bn_mp_prime_rabin_miller_trials.c
src/libtommath/bn_mp_prime_random_ex.c
src/libtommath/bn_mp_radix_size.c
src/libtommath/bn_mp_radix_smap.c
src/libtommath/bn_mp_rand.c
src/libtommath/bn_mp_read_radix.c
src/libtommath/bn_mp_read_signed_bin.c
src/libtommath/bn_mp_read_unsigned_bin.c
src/libtommath/bn_mp_reduce.c
src/libtommath/bn_mp_reduce_2k.c
src/libtommath/bn_mp_reduce_2k_l.c
src/libtommath/bn_mp_reduce_2k_setup.c
src/libtommath/bn_mp_reduce_2k_setup_l.c
src/libtommath/bn_mp_reduce_is_2k.c
src/libtommath/bn_mp_reduce_is_2k_l.c
src/libtommath/bn_mp_reduce_setup.c
src/libtommath/bn_mp_rshd.c
src/libtommath/bn_mp_set.c
src/libtommath/bn_mp_set_int.c
src/libtommath/bn_mp_shrink.c
src/libtommath/bn_mp_signed_bin_size.c
src/libtommath/bn_mp_sqr.c
src/libtommath/bn_mp_sqrmod.c
src/libtommath/bn_mp_sqrt.c
src/libtommath/bn_mp_sub.c
src/libtommath/bn_mp_submod.c
src/libtommath/bn_mp_sub_d.c
src/libtommath/bn_mp_toom_mul.c
src/libtommath/bn_mp_toom_sqr.c
src/libtommath/bn_mp_toradix.c
src/libtommath/bn_mp_toradix_n.c
src/libtommath/bn_mp_to_signed_bin.c
src/libtommath/bn_mp_to_signed_bin_n.c
src/libtommath/bn_mp_to_unsigned_bin.c
src/libtommath/bn_mp_to_unsigned_bin_n.c
src/libtommath/bn_mp_unsigned_bin_size.c
src/libtommath/bn_mp_xor.c
src/libtommath/bn_mp_zero.c
src/libtommath/bn_prime_tab.c
src/libtommath/bn_reverse.c
src/libtommath/bn_s_mp_add.c
src/libtommath/bn_s_mp_exptmod.c
src/libtommath/bn_s_mp_mul_digs.c
src/libtommath/bn_s_mp_mul_high_digs.c
src/libtommath/bn_s_mp_sqr.c
src/libtommath/bn_s_mp_sub.c
)
set(BZIP2_FILES
src/bzip2/blocksort.c
src/bzip2/bzlib.c
src/bzip2/compress.c
src/bzip2/crctable.c
src/bzip2/decompress.c
src/bzip2/huffman.c
src/bzip2/randtable.c
)
set(ZLIB_FILES
src/zlib/adler32.c
src/zlib/compress.c
src/zlib/crc32.c
src/zlib/deflate.c
src/zlib/inffast.c
src/zlib/inflate.c
src/zlib/inftrees.c
src/zlib/trees.c
src/zlib/zutil.c
)
set(TEST_SRC_FILES
test/StormTest.cpp
)
add_definitions(-D_7ZIP_ST -DBZ_STRICT_ANSI)
set(LINK_LIBS)
find_package(ZLIB)
if (ZLIB_FOUND)
set(LINK_LIBS ${LINK_LIBS} ZLIB::ZLIB)
add_definitions(-D__SYS_ZLIB)
else()
set(SRC_FILES ${SRC_FILES} ${ZLIB_FILES})
endif()
find_package(BZip2)
if (BZIP2_FOUND)
set(LINK_LIBS ${LINK_LIBS} BZip2::BZip2)
add_definitions(-D__SYS_BZLIB)
else()
set(SRC_FILES ${SRC_FILES} ${BZIP2_FILES})
endif()
if(WIN32)
set(SRC_ADDITIONAL_FILES ${TOMCRYPT_FILES} ${TOMMATH_FILES})
set(LINK_LIBS ${LINK_LIBS} wininet)
else()
option(WITH_LIBTOMCRYPT "Use system LibTomCrypt library" OFF)
if(WITH_LIBTOMCRYPT)
include(FindPkgConfig)
pkg_check_modules(PC_LIBTOMCRYPT libtomcrypt REQUIRED)
find_path(LIBTOMCRYPT_INCLUDE_DIR NAMES tomcrypt.h HINTS ${PC_LIBTOMCRYPT_INCLUDE_DIRS} REQUIRED)
find_library(LIBTOMCRYPT_LIBRARY NAMES tomcrypt HINTS ${PC_LIBTOMCRYPT_LIBRARY_DIRS} REQUIRED)
set(LINK_LIBS ${LINK_LIBS} ${LIBTOMCRYPT_LIBRARY})
include_directories(${LIBTOMCRYPT_INCLUDE_DIR})
else()
set(SRC_ADDITIONAL_FILES ${TOMCRYPT_FILES} ${TOMMATH_FILES})
endif()
endif()
if(${CMAKE_SYSTEM_NAME} STREQUAL FreeBSD)
message(STATUS "Using FreeBSD port")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DO_LARGEFILE=0 -Dstat64=stat -Dlstat64=lstat -Dlseek64=lseek -Doff64_t=off_t -Dfstat64=fstat -Dftruncate64=ftruncate")
endif()
if(NOT WIN32 AND NOT APPLE AND NOT ${CMAKE_SYSTEM_NAME} STREQUAL FreeBSD)
# Enable POSIX extensions such as `readlink` and `ftruncate`.
add_definitions(-D_POSIX_C_SOURCE=200809L)
endif()
add_library(${LIBRARY_NAME} ${LIB_TYPE} ${SRC_FILES} ${SRC_ADDITIONAL_FILES} ${STORM_DEF_FILES})
if(WIN32)
set_target_properties(${LIBRARY_NAME} PROPERTIES OUTPUT_NAME "StormLib")
endif()
if (CMAKE_SYSTEM_NAME STREQUAL "Windows")
use_props(${LIBRARY_NAME} "${CMAKE_CONFIGURATION_TYPES}" "${DEFAULT_CXX_PROPS}")
endif()
################################################################################
# Compile definitions
################################################################################
if (CMAKE_SYSTEM_NAME STREQUAL "Windows")
if("${CMAKE_VS_PLATFORM_NAME}" STREQUAL "x64")
target_compile_definitions(${LIBRARY_NAME} PRIVATE
"$<$<CONFIG:Debug>:"
"_DEBUG;"
"_CRT_SECURE_NO_WARNINGS;"
">"
"$<$<CONFIG:Release>:"
"NDEBUG"
">"
WIN32
_LIB
"UNICODE;"
"_UNICODE"
)
elseif("${CMAKE_VS_PLATFORM_NAME}" STREQUAL "Win32")
target_compile_definitions(${LIBRARY_NAME} PRIVATE
"$<$<CONFIG:Debug>:"
"_DEBUG;"
"_CRT_SECURE_NO_WARNINGS;"
">"
"$<$<CONFIG:Release>:"
"NDEBUG;"
">"
"WIN32;"
_LIB
"UNICODE;"
"_UNICODE"
)
endif()
endif()
################################################################################
# MSVC runtime library
################################################################################
if (CMAKE_SYSTEM_NAME STREQUAL "Windows")
get_property(MSVC_RUNTIME_LIBRARY_DEFAULT TARGET ${LIBRARY_NAME} PROPERTY MSVC_RUNTIME_LIBRARY)
if("${CMAKE_VS_PLATFORM_NAME}" STREQUAL "x64")
string(CONCAT "MSVC_RUNTIME_LIBRARY_STR"
$<$<CONFIG:Debug>:
MultiThreadedDebug
>
$<$<CONFIG:Release>:
MultiThreaded
>
$<$<NOT:$<OR:$<CONFIG:Debug>,$<CONFIG:Release>>>:${MSVC_RUNTIME_LIBRARY_DEFAULT}>
)
elseif("${CMAKE_VS_PLATFORM_NAME}" STREQUAL "Win32")
string(CONCAT "MSVC_RUNTIME_LIBRARY_STR"
$<$<CONFIG:Debug>:
MultiThreadedDebug
>
$<$<CONFIG:Release>:
MultiThreaded
>
$<$<NOT:$<OR:$<CONFIG:Debug>,$<CONFIG:Release>>>:${MSVC_RUNTIME_LIBRARY_DEFAULT}>
)
endif()
set_target_properties(${LIBRARY_NAME} PROPERTIES MSVC_RUNTIME_LIBRARY ${MSVC_RUNTIME_LIBRARY_STR})
endif()
target_link_libraries(${LIBRARY_NAME} ${LINK_LIBS})
target_compile_definitions(${LIBRARY_NAME} INTERFACE STORMLIB_NO_AUTO_LINK) #CMake will take care of the linking
target_include_directories(${LIBRARY_NAME} PUBLIC src/)
set_target_properties(${LIBRARY_NAME} PROPERTIES PUBLIC_HEADER "src/StormLib.h;src/StormPort.h")
if(BUILD_SHARED_LIBS)
message(STATUS "Linking against dependent libraries dynamically")
if(APPLE)
set_target_properties(${LIBRARY_NAME} PROPERTIES FRAMEWORK true)
set_target_properties(${LIBRARY_NAME} PROPERTIES LINK_FLAGS "-framework Carbon")
endif()
if(UNIX)
SET(VERSION_MAJOR "9")
SET(VERSION_MINOR "22")
SET(VERSION_PATCH "0")
SET(VERSION_STRING "${VERSION_MAJOR}.${VERSION_MINOR}.${VERSION_PATCH}")
set_target_properties(${LIBRARY_NAME} PROPERTIES VERSION "${VERSION_STRING}")
set_target_properties(${LIBRARY_NAME} PROPERTIES SOVERSION "${VERSION_MAJOR}")
endif()
else()
message(STATUS "Linking against dependent libraries statically")
endif()
if (NOT STORM_SKIP_INSTALL)
install(TARGETS ${LIBRARY_NAME}
RUNTIME DESTINATION bin
LIBRARY DESTINATION lib
ARCHIVE DESTINATION lib
FRAMEWORK DESTINATION /Library/Frameworks
PUBLIC_HEADER DESTINATION include
INCLUDES DESTINATION include)
#CPack configurtion
SET(CPACK_GENERATOR "DEB" "RPM")
SET(CPACK_PACKAGE_NAME ${PROJECT_NAME})
SET(CPACK_PACKAGE_DESCRIPTION_SUMMARY "MPQ manipulation library")
SET(CPACK_PACKAGE_VENDOR "Ladislav Zezula")
SET(CPACK_PACKAGE_DESCRIPTION_FILE "${CMAKE_CURRENT_SOURCE_DIR}/README.md")
SET(CPACK_RESOURCE_FILE_LICENSE "${CMAKE_CURRENT_SOURCE_DIR}/LICENSE")
SET(CPACK_PACKAGE_VERSION_MAJOR "${VERSION_MAJOR}")
SET(CPACK_PACKAGE_VERSION_MINOR "${VERSION_MINOR}")
SET(CPACK_PACKAGE_VERSION "${VERSION_MAJOR}.${VERSION_MINOR}")
#DEB configuration
SET(CPACK_DEBIAN_PACKAGE_SECTION "libs")
SET(CPACK_DEBIAN_PACKAGE_HOMEPAGE "http://www.zezula.net/en/mpq/stormlib.html")
SET(CPACK_DEBIAN_PACKAGE_MAINTAINER "imbacen@gmail.com")
SET(CPACK_DEBIAN_PACKAGE_ARCHITECTURE "amd64")
SET(CPACK_DEBIAN_PACKAGE_DEPENDS "zlib1g,bzip2")
#RPM configuration
SET(CPACK_RPM_PACKAGE_RELEASE 1)
SET(CPACK_RPM_PACKAGE_LICENSE "${CMAKE_CURRENT_SOURCE_DIR}/LICENSE")
SET(CPACK_RPM_PACKAGE_GROUP "${PROJECT_NAME}")
SET(CPACK_RPM_PACKAGE_URL "http://www.zezula.net/en/mpq/stormlib.html")
SET(CPACK_RPM_PACKAGE_REQUIRES "zlib,bzip2")
INCLUDE(CPack)
endif()
if(STORM_BUILD_TESTS)
add_executable(StormLib_test ${TEST_SRC_FILES})
target_link_libraries(StormLib_test ${LIBRARY_NAME})
install(TARGETS StormLib_test RUNTIME DESTINATION bin)
endif()
+22
View File
@@ -0,0 +1,22 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>CFBundleDevelopmentRegion</key>
<string>English</string>
<key>CFBundleExecutable</key>
<string>${EXECUTABLE_NAME}</string>
<key>CFBundleIdentifier</key>
<string>net.zezula.${PRODUCT_NAME:rfc1034Identifier}</string>
<key>CFBundleName</key>
<string>${PRODUCT_NAME}</string>
<key>CFBundleInfoDictionaryVersion</key>
<string>6.0</string>
<key>CFBundlePackageType</key>
<string>FMWK</string>
<key>CFBundleSignature</key>
<string>????</string>
<key>CFBundleVersion</key>
<string>8.01</string>
</dict>
</plist>
+21
View File
@@ -0,0 +1,21 @@
The MIT License (MIT)
Copyright (c) 1999-2013 Ladislav Zezula
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.
+34
View File
@@ -0,0 +1,34 @@
@echo off
rem Post-build batch for StormLib project
rem Called as PostBuild.bat $(ProjectName) $(PlatformName) $(ConfigurationName) [vs2008]
rem Example: PostBuild.bat StormLib_dll x64 Debug vs2008
rem Select build type
if "%1" == "StormLib_dll" goto PostBuild_DLL
if "%1" == "StormLib" goto PostBuild_LIB
goto:eof
:PostBuild_DLL
rem Build steps for the DLL. On 32-bit Release version, increment the build number
if not "x%2" == "xWin32" goto:eof
if not "x%3" == "xRelease" goto:eof
PostBuild.exe .\src\DllMain.rc
goto:eof
:PostBuild_LIB
rem Set target folders
if "x%2" == "xWin32" set TARGET_DIR_LEVEL2=lib32
if "x%2" == "xx64" set TARGET_DIR_LEVEL2=lib64
if "x%4" == "xvs2008" set TARGET_DIR_LEVEL3=vs2008
rem Check & create target folder structure
if not exist ..\aaa goto:eof
if not exist ..\aaa\%TARGET_DIR_LEVEL2% md ..\aaa\%TARGET_DIR_LEVEL2%
if not exist ..\aaa\%TARGET_DIR_LEVEL2%\%TARGET_DIR_LEVEL3% md ..\aaa\%TARGET_DIR_LEVEL2%\%TARGET_DIR_LEVEL3%
rem Copy include and LIB files to the target folder
copy /Y .\src\StormLib.h ..\aaa\inc >nul
copy /Y .\src\StormPort.h ..\aaa\inc >nul
copy /Y .\bin\%1\%2\%3\StormLib???.lib ..\aaa\%TARGET_DIR_LEVEL2%\%TARGET_DIR_LEVEL3% >nul
+132
View File
@@ -0,0 +1,132 @@
solution 'StormLib'
location 'build'
language 'C++'
configurations { 'Debug', 'Release', }
platforms { 'x32', 'x64' }
targetdir 'bin'
objdir 'bin'
files {
'src/**.h',
'src/**.c',
'src/**.cpp',
'doc/*.txt',
}
removefiles {
'src/adpcm/*_old.*',
'src/huffman/*_old.*',
'src/huffman/huff_patch.*',
'src/pklib/crc32.c',
'src/zlib/compress.c',
}
filter 'configurations:Debug*'
flags { 'Symbols' }
defines { '_DEBUG' }
optimize 'Debug'
filter 'configurations:Release*'
defines { 'NDEBUG' }
optimize 'Full'
filter 'system:windows'
links { 'wininet', }
defines { 'WINDOWS', '_WINDOWS' }
filter { 'system:windows', 'platforms:x32' }
defines { 'WIN32', '_WIN32' }
filter { 'system:windows', 'platforms:x64' }
defines { 'WIN64', '_WIN64' }
filter 'system:linux'
defines { '_7ZIP_ST', 'BZ_STRICT_ANSI' }
removefiles {
'src/lzma/C/LzFindMt.*',
'src/lzma/C/Threads.*',
}
--------------------------------------------------------------------------------
project 'StormLib'
kind 'StaticLib'
removefiles 'src/SBaseDumpData.cpp'
configurations {
'DebugAD', -- Debug Ansi Dynamic
'DebugAS', -- Debug Ansi Static
'DebugUD', -- Debug Unicode Dynamic
'DebugUS', -- Debug Unicode Static
'ReleaseAD', -- Release Ansi Dynamic
'ReleaseAS', -- Release Ansi Static
'ReleaseUD', -- Release Unicode Dynamic'
'ReleaseUS', -- Release Unicode Static
}
configmap {
['Debug'] = 'DebugUS',
['Release'] = 'ReleaseUS',
}
filter 'configurations:*S'
flags { 'StaticRuntime' }
filter { 'configurations:*U*', 'action:vs*' }
flags { 'Unicode' }
filter { 'configurations:*U*', 'not action:vs*' }
defines { 'UNICODE', '_UNICODE' }
filter 'DebugAD'
targetsuffix 'DAD'
filter 'ReleaseAD'
targetsuffix 'RAD'
filter 'DebugAS'
targetsuffix 'DAS'
filter 'ReleaseAS'
targetsuffix 'RAS'
filter 'DebugUD'
targetsuffix 'DUD'
filter 'ReleaseUD'
targetsuffix 'RUD'
filter 'DebugUS'
targetsuffix 'DUS'
filter 'ReleaseUS'
targetsuffix 'RUS'
--------------------------------------------------------------------------------
project 'StormLib_dll'
kind 'SharedLib'
targetname 'Stormlib'
files {
'stormlib_dll/DllMain.c',
'stormlib_dll/StormLib.def',
}
removefiles 'src/SBaseDumpData.cpp'
filter { 'system:windows', 'action:gmake' }
linkoptions {
'-Xlinker --enable-stdcall-fixup',
'../stormlib_dll/StormLib.def',
}
filter 'Debug'
targetsuffix '_d'
--------------------------------------------------------------------------------
project 'StormLib_test'
kind 'ConsoleApp'
files {
'test/StormTest.cpp',
}
+25
View File
@@ -0,0 +1,25 @@
@echo off
rem This BAT file updates the ZIP file that is to be uploaded to web
rem Only use when both 32-bit and 64-bit are properly compiled
set STORMLIB_NAME=stormlib-9.00
echo Creating %STORMLIB_NAME%.zip ...
cd \Ladik\Appdir
zip.exe -ur9 ..\WWW\web\download\%STORMLIB_NAME%.zip StormLib\doc\*
zip.exe -ur9 ..\WWW\web\download\%STORMLIB_NAME%.zip StormLib\src\*
zip.exe -ur9 ..\WWW\web\download\%STORMLIB_NAME%.zip StormLib\storm_dll\*
zip.exe -ur9 ..\WWW\web\download\%STORMLIB_NAME%.zip StormLib\StormLib.xcodeproj\*
zip.exe -ur9 ..\WWW\web\download\%STORMLIB_NAME%.zip StormLib\stormlib_dll\*
zip.exe -ur9 ..\WWW\web\download\%STORMLIB_NAME%.zip StormLib\test\*
zip.exe -u9 ..\WWW\web\download\%STORMLIB_NAME%.zip StormLib\CMakeLists.txt
zip.exe -u9 ..\WWW\web\download\%STORMLIB_NAME%.zip StormLib\makefile.*
zip.exe -u9 ..\WWW\web\download\%STORMLIB_NAME%.zip StormLib\Info.plist
zip.exe -u9 ..\WWW\web\download\%STORMLIB_NAME%.zip StormLib\*.bat
zip.exe -u9 ..\WWW\web\download\%STORMLIB_NAME%.zip StormLib\*.sln
zip.exe -u9 ..\WWW\web\download\%STORMLIB_NAME%.zip StormLib\*.vcproj
zip.exe -u9 ..\WWW\web\download\%STORMLIB_NAME%.zip StormLib\*.vcxproj
echo.
echo Press any key to exit ...
pause >nul
+39
View File
@@ -0,0 +1,39 @@
# StormLib
This is official repository for the StomLib library, an open-source project that can work with Blizzard MPQ archives.
## Installation and basic usage
### Linux
1. Download latest release
2. Install StormLib:
```
$ cd <path-to-StormLib>
$ cmake CMakeLists.txt
$ make
$ make install
```
3. Include StormLib in your project: `#include <StormLib.h>`
4. Make sure you compile your project with `-lstorm -lz -lbz2`
### Windows (Visual Studio 2008)
1. Download the latest release of StormLib
2. Open the solution file `StormLib_vs08.sln` in Visual Studio 2008
3. Choose "Build / Batch Build" and select every build of "StormLib"
4. Choose "Rebuild"
5. The result libraries are in `.\bin\Win32` and `.\bin\x64`
### Windows (Visual Studio 2017 or 2019)
0. Make sure you have SDK 10.0.17134.0 installed
1. Download the latest release of StormLib
2. Open the solution file `StormLib_vs19.sln` in Visual Studio 2017/2019
3. Choose "Build / Batch Build" and select every build of "StormLib"
4. Choose "Rebuild"
5. The result libraries are in `.\bin\Win32` and `.\bin\x64`
### Windows (Test Project)
1. Include the main StormLib header: `#include <StormLib.h>`
2. Set the correct library directory for StormLibXYZ.lib:
* X: D = Debug, R = Release
* Y: A = ANSI build, U = Unicode build
* Z: S = Using static CRT library, D = Using Dynamic CRT library
3. Rebuild
+3
View File
@@ -0,0 +1,3 @@
[Project]
Manager=KDevCMakeManager
Name=StormLib
File diff suppressed because it is too large Load Diff
+139
View File
@@ -0,0 +1,139 @@
Microsoft Visual Studio Solution File, Format Version 10.00
# Visual Studio 2008
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "StormLib", "StormLib_vs08.vcproj", "{78424708-1F6E-4D4B-920C-FB6D26847055}"
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "StormLib_dll", "StormLib_vs08_dll.vcproj", "{CB385198-50B1-4CF4-883B-11F042DED6AA}"
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "StormLib_test", "StormLib_vs08_test.vcproj", "{AA561A7B-26EA-49AF-90E8-C53C1FA2965D}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Win32 = Debug|Win32
Debug|x64 = Debug|x64
DebugAD|Win32 = DebugAD|Win32
DebugAD|x64 = DebugAD|x64
DebugAS|Win32 = DebugAS|Win32
DebugAS|x64 = DebugAS|x64
DebugUD|Win32 = DebugUD|Win32
DebugUD|x64 = DebugUD|x64
DebugUS|Win32 = DebugUS|Win32
DebugUS|x64 = DebugUS|x64
Release|Win32 = Release|Win32
Release|x64 = Release|x64
ReleaseAD|Win32 = ReleaseAD|Win32
ReleaseAD|x64 = ReleaseAD|x64
ReleaseAS|Win32 = ReleaseAS|Win32
ReleaseAS|x64 = ReleaseAS|x64
ReleaseUD|Win32 = ReleaseUD|Win32
ReleaseUD|x64 = ReleaseUD|x64
ReleaseUS|Win32 = ReleaseUS|Win32
ReleaseUS|x64 = ReleaseUS|x64
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{78424708-1F6E-4D4B-920C-FB6D26847055}.Debug|Win32.ActiveCfg = DebugUS|x64
{78424708-1F6E-4D4B-920C-FB6D26847055}.Debug|x64.ActiveCfg = DebugUS|x64
{78424708-1F6E-4D4B-920C-FB6D26847055}.Debug|x64.Build.0 = DebugUS|x64
{78424708-1F6E-4D4B-920C-FB6D26847055}.DebugAD|Win32.ActiveCfg = DebugAD|Win32
{78424708-1F6E-4D4B-920C-FB6D26847055}.DebugAD|Win32.Build.0 = DebugAD|Win32
{78424708-1F6E-4D4B-920C-FB6D26847055}.DebugAD|x64.ActiveCfg = DebugAD|x64
{78424708-1F6E-4D4B-920C-FB6D26847055}.DebugAD|x64.Build.0 = DebugAD|x64
{78424708-1F6E-4D4B-920C-FB6D26847055}.DebugAS|Win32.ActiveCfg = DebugAS|Win32
{78424708-1F6E-4D4B-920C-FB6D26847055}.DebugAS|Win32.Build.0 = DebugAS|Win32
{78424708-1F6E-4D4B-920C-FB6D26847055}.DebugAS|x64.ActiveCfg = DebugAS|x64
{78424708-1F6E-4D4B-920C-FB6D26847055}.DebugAS|x64.Build.0 = DebugAS|x64
{78424708-1F6E-4D4B-920C-FB6D26847055}.DebugUD|Win32.ActiveCfg = DebugUD|Win32
{78424708-1F6E-4D4B-920C-FB6D26847055}.DebugUD|Win32.Build.0 = DebugUD|Win32
{78424708-1F6E-4D4B-920C-FB6D26847055}.DebugUD|x64.ActiveCfg = DebugUD|x64
{78424708-1F6E-4D4B-920C-FB6D26847055}.DebugUD|x64.Build.0 = DebugUD|x64
{78424708-1F6E-4D4B-920C-FB6D26847055}.DebugUS|Win32.ActiveCfg = DebugUS|Win32
{78424708-1F6E-4D4B-920C-FB6D26847055}.DebugUS|Win32.Build.0 = DebugUS|Win32
{78424708-1F6E-4D4B-920C-FB6D26847055}.DebugUS|x64.ActiveCfg = DebugUS|x64
{78424708-1F6E-4D4B-920C-FB6D26847055}.DebugUS|x64.Build.0 = DebugUS|x64
{78424708-1F6E-4D4B-920C-FB6D26847055}.Release|Win32.ActiveCfg = ReleaseUS|x64
{78424708-1F6E-4D4B-920C-FB6D26847055}.Release|x64.ActiveCfg = ReleaseUS|x64
{78424708-1F6E-4D4B-920C-FB6D26847055}.Release|x64.Build.0 = ReleaseUS|x64
{78424708-1F6E-4D4B-920C-FB6D26847055}.ReleaseAD|Win32.ActiveCfg = ReleaseAD|Win32
{78424708-1F6E-4D4B-920C-FB6D26847055}.ReleaseAD|Win32.Build.0 = ReleaseAD|Win32
{78424708-1F6E-4D4B-920C-FB6D26847055}.ReleaseAD|x64.ActiveCfg = ReleaseAD|x64
{78424708-1F6E-4D4B-920C-FB6D26847055}.ReleaseAD|x64.Build.0 = ReleaseAD|x64
{78424708-1F6E-4D4B-920C-FB6D26847055}.ReleaseAS|Win32.ActiveCfg = ReleaseAS|Win32
{78424708-1F6E-4D4B-920C-FB6D26847055}.ReleaseAS|Win32.Build.0 = ReleaseAS|Win32
{78424708-1F6E-4D4B-920C-FB6D26847055}.ReleaseAS|x64.ActiveCfg = ReleaseAS|x64
{78424708-1F6E-4D4B-920C-FB6D26847055}.ReleaseAS|x64.Build.0 = ReleaseAS|x64
{78424708-1F6E-4D4B-920C-FB6D26847055}.ReleaseUD|Win32.ActiveCfg = ReleaseUD|Win32
{78424708-1F6E-4D4B-920C-FB6D26847055}.ReleaseUD|Win32.Build.0 = ReleaseUD|Win32
{78424708-1F6E-4D4B-920C-FB6D26847055}.ReleaseUD|x64.ActiveCfg = ReleaseUD|x64
{78424708-1F6E-4D4B-920C-FB6D26847055}.ReleaseUD|x64.Build.0 = ReleaseUD|x64
{78424708-1F6E-4D4B-920C-FB6D26847055}.ReleaseUS|Win32.ActiveCfg = ReleaseUS|Win32
{78424708-1F6E-4D4B-920C-FB6D26847055}.ReleaseUS|Win32.Build.0 = ReleaseUS|Win32
{78424708-1F6E-4D4B-920C-FB6D26847055}.ReleaseUS|x64.ActiveCfg = ReleaseUS|x64
{78424708-1F6E-4D4B-920C-FB6D26847055}.ReleaseUS|x64.Build.0 = ReleaseUS|x64
{CB385198-50B1-4CF4-883B-11F042DED6AA}.Debug|Win32.ActiveCfg = Debug|Win32
{CB385198-50B1-4CF4-883B-11F042DED6AA}.Debug|Win32.Build.0 = Debug|Win32
{CB385198-50B1-4CF4-883B-11F042DED6AA}.Debug|x64.ActiveCfg = Debug|x64
{CB385198-50B1-4CF4-883B-11F042DED6AA}.Debug|x64.Build.0 = Debug|x64
{CB385198-50B1-4CF4-883B-11F042DED6AA}.DebugAD|Win32.ActiveCfg = Debug|x64
{CB385198-50B1-4CF4-883B-11F042DED6AA}.DebugAD|x64.ActiveCfg = Debug|x64
{CB385198-50B1-4CF4-883B-11F042DED6AA}.DebugAD|x64.Build.0 = Debug|x64
{CB385198-50B1-4CF4-883B-11F042DED6AA}.DebugAS|Win32.ActiveCfg = Debug|x64
{CB385198-50B1-4CF4-883B-11F042DED6AA}.DebugAS|x64.ActiveCfg = Debug|x64
{CB385198-50B1-4CF4-883B-11F042DED6AA}.DebugAS|x64.Build.0 = Debug|x64
{CB385198-50B1-4CF4-883B-11F042DED6AA}.DebugUD|Win32.ActiveCfg = Debug|x64
{CB385198-50B1-4CF4-883B-11F042DED6AA}.DebugUD|x64.ActiveCfg = Debug|x64
{CB385198-50B1-4CF4-883B-11F042DED6AA}.DebugUD|x64.Build.0 = Debug|x64
{CB385198-50B1-4CF4-883B-11F042DED6AA}.DebugUS|Win32.ActiveCfg = Debug|x64
{CB385198-50B1-4CF4-883B-11F042DED6AA}.DebugUS|x64.ActiveCfg = Debug|x64
{CB385198-50B1-4CF4-883B-11F042DED6AA}.DebugUS|x64.Build.0 = Debug|x64
{CB385198-50B1-4CF4-883B-11F042DED6AA}.Release|Win32.ActiveCfg = Release|Win32
{CB385198-50B1-4CF4-883B-11F042DED6AA}.Release|Win32.Build.0 = Release|Win32
{CB385198-50B1-4CF4-883B-11F042DED6AA}.Release|x64.ActiveCfg = Release|x64
{CB385198-50B1-4CF4-883B-11F042DED6AA}.Release|x64.Build.0 = Release|x64
{CB385198-50B1-4CF4-883B-11F042DED6AA}.ReleaseAD|Win32.ActiveCfg = Release|x64
{CB385198-50B1-4CF4-883B-11F042DED6AA}.ReleaseAD|x64.ActiveCfg = Release|x64
{CB385198-50B1-4CF4-883B-11F042DED6AA}.ReleaseAD|x64.Build.0 = Release|x64
{CB385198-50B1-4CF4-883B-11F042DED6AA}.ReleaseAS|Win32.ActiveCfg = Release|x64
{CB385198-50B1-4CF4-883B-11F042DED6AA}.ReleaseAS|x64.ActiveCfg = Release|x64
{CB385198-50B1-4CF4-883B-11F042DED6AA}.ReleaseAS|x64.Build.0 = Release|x64
{CB385198-50B1-4CF4-883B-11F042DED6AA}.ReleaseUD|Win32.ActiveCfg = Release|x64
{CB385198-50B1-4CF4-883B-11F042DED6AA}.ReleaseUD|x64.ActiveCfg = Release|x64
{CB385198-50B1-4CF4-883B-11F042DED6AA}.ReleaseUD|x64.Build.0 = Release|x64
{CB385198-50B1-4CF4-883B-11F042DED6AA}.ReleaseUS|Win32.ActiveCfg = Release|x64
{CB385198-50B1-4CF4-883B-11F042DED6AA}.ReleaseUS|x64.ActiveCfg = Release|x64
{CB385198-50B1-4CF4-883B-11F042DED6AA}.ReleaseUS|x64.Build.0 = Release|x64
{AA561A7B-26EA-49AF-90E8-C53C1FA2965D}.Debug|Win32.ActiveCfg = Debug|Win32
{AA561A7B-26EA-49AF-90E8-C53C1FA2965D}.Debug|Win32.Build.0 = Debug|Win32
{AA561A7B-26EA-49AF-90E8-C53C1FA2965D}.Debug|x64.ActiveCfg = Debug|x64
{AA561A7B-26EA-49AF-90E8-C53C1FA2965D}.Debug|x64.Build.0 = Debug|x64
{AA561A7B-26EA-49AF-90E8-C53C1FA2965D}.DebugAD|Win32.ActiveCfg = Debug|x64
{AA561A7B-26EA-49AF-90E8-C53C1FA2965D}.DebugAD|x64.ActiveCfg = Debug|x64
{AA561A7B-26EA-49AF-90E8-C53C1FA2965D}.DebugAD|x64.Build.0 = Debug|x64
{AA561A7B-26EA-49AF-90E8-C53C1FA2965D}.DebugAS|Win32.ActiveCfg = Debug|x64
{AA561A7B-26EA-49AF-90E8-C53C1FA2965D}.DebugAS|x64.ActiveCfg = Debug|x64
{AA561A7B-26EA-49AF-90E8-C53C1FA2965D}.DebugAS|x64.Build.0 = Debug|x64
{AA561A7B-26EA-49AF-90E8-C53C1FA2965D}.DebugUD|Win32.ActiveCfg = Debug|x64
{AA561A7B-26EA-49AF-90E8-C53C1FA2965D}.DebugUD|x64.ActiveCfg = Debug|x64
{AA561A7B-26EA-49AF-90E8-C53C1FA2965D}.DebugUD|x64.Build.0 = Debug|x64
{AA561A7B-26EA-49AF-90E8-C53C1FA2965D}.DebugUS|Win32.ActiveCfg = Debug|x64
{AA561A7B-26EA-49AF-90E8-C53C1FA2965D}.DebugUS|x64.ActiveCfg = Debug|x64
{AA561A7B-26EA-49AF-90E8-C53C1FA2965D}.DebugUS|x64.Build.0 = Debug|x64
{AA561A7B-26EA-49AF-90E8-C53C1FA2965D}.Release|Win32.ActiveCfg = Release|Win32
{AA561A7B-26EA-49AF-90E8-C53C1FA2965D}.Release|Win32.Build.0 = Release|Win32
{AA561A7B-26EA-49AF-90E8-C53C1FA2965D}.Release|x64.ActiveCfg = Release|x64
{AA561A7B-26EA-49AF-90E8-C53C1FA2965D}.Release|x64.Build.0 = Release|x64
{AA561A7B-26EA-49AF-90E8-C53C1FA2965D}.ReleaseAD|Win32.ActiveCfg = Release|x64
{AA561A7B-26EA-49AF-90E8-C53C1FA2965D}.ReleaseAD|x64.ActiveCfg = Release|x64
{AA561A7B-26EA-49AF-90E8-C53C1FA2965D}.ReleaseAD|x64.Build.0 = Release|x64
{AA561A7B-26EA-49AF-90E8-C53C1FA2965D}.ReleaseAS|Win32.ActiveCfg = Release|x64
{AA561A7B-26EA-49AF-90E8-C53C1FA2965D}.ReleaseAS|x64.ActiveCfg = Release|x64
{AA561A7B-26EA-49AF-90E8-C53C1FA2965D}.ReleaseAS|x64.Build.0 = Release|x64
{AA561A7B-26EA-49AF-90E8-C53C1FA2965D}.ReleaseUD|Win32.ActiveCfg = Release|x64
{AA561A7B-26EA-49AF-90E8-C53C1FA2965D}.ReleaseUD|x64.ActiveCfg = Release|x64
{AA561A7B-26EA-49AF-90E8-C53C1FA2965D}.ReleaseUD|x64.Build.0 = Release|x64
{AA561A7B-26EA-49AF-90E8-C53C1FA2965D}.ReleaseUS|Win32.ActiveCfg = Release|x64
{AA561A7B-26EA-49AF-90E8-C53C1FA2965D}.ReleaseUS|x64.ActiveCfg = Release|x64
{AA561A7B-26EA-49AF-90E8-C53C1FA2965D}.ReleaseUS|x64.Build.0 = Release|x64
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
EndGlobal
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
+162
View File
@@ -0,0 +1,162 @@
Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio 15
VisualStudioVersion = 15.0.28010.2050
MinimumVisualStudioVersion = 10.0.40219.1
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "StormLib", "StormLib_vs19.vcxproj", "{78424708-1F6E-4D4B-920C-FB6D26847055}"
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "StormLib_dll", "StormLib_vs19_dll.vcxproj", "{CB385198-50B1-4CF4-883B-11F042DED6AA}"
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "StormLib_test", "StormLib_vs19_test.vcxproj", "{AA561A7B-26EA-49AF-90E8-C53C1FA2965D}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Win32 = Debug|Win32
Debug|x64 = Debug|x64
DebugAD|Win32 = DebugAD|Win32
DebugAD|x64 = DebugAD|x64
DebugAS|Win32 = DebugAS|Win32
DebugAS|x64 = DebugAS|x64
DebugUD|Win32 = DebugUD|Win32
DebugUD|x64 = DebugUD|x64
DebugUS|Win32 = DebugUS|Win32
DebugUS|x64 = DebugUS|x64
Release|Win32 = Release|Win32
Release|x64 = Release|x64
ReleaseAD|Win32 = ReleaseAD|Win32
ReleaseAD|x64 = ReleaseAD|x64
ReleaseAS|Win32 = ReleaseAS|Win32
ReleaseAS|x64 = ReleaseAS|x64
ReleaseUD|Win32 = ReleaseUD|Win32
ReleaseUD|x64 = ReleaseUD|x64
ReleaseUS|Win32 = ReleaseUS|Win32
ReleaseUS|x64 = ReleaseUS|x64
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{78424708-1F6E-4D4B-920C-FB6D26847055}.Debug|Win32.ActiveCfg = DebugUS|Win32
{78424708-1F6E-4D4B-920C-FB6D26847055}.Debug|Win32.Build.0 = DebugUS|Win32
{78424708-1F6E-4D4B-920C-FB6D26847055}.Debug|x64.ActiveCfg = DebugUS|x64
{78424708-1F6E-4D4B-920C-FB6D26847055}.Debug|x64.Build.0 = DebugUS|x64
{78424708-1F6E-4D4B-920C-FB6D26847055}.DebugAD|Win32.ActiveCfg = DebugAD|Win32
{78424708-1F6E-4D4B-920C-FB6D26847055}.DebugAD|Win32.Build.0 = DebugAD|Win32
{78424708-1F6E-4D4B-920C-FB6D26847055}.DebugAD|x64.ActiveCfg = DebugAD|x64
{78424708-1F6E-4D4B-920C-FB6D26847055}.DebugAD|x64.Build.0 = DebugAD|x64
{78424708-1F6E-4D4B-920C-FB6D26847055}.DebugAS|Win32.ActiveCfg = DebugAS|Win32
{78424708-1F6E-4D4B-920C-FB6D26847055}.DebugAS|Win32.Build.0 = DebugAS|Win32
{78424708-1F6E-4D4B-920C-FB6D26847055}.DebugAS|x64.ActiveCfg = DebugAS|x64
{78424708-1F6E-4D4B-920C-FB6D26847055}.DebugAS|x64.Build.0 = DebugAS|x64
{78424708-1F6E-4D4B-920C-FB6D26847055}.DebugUD|Win32.ActiveCfg = DebugUD|Win32
{78424708-1F6E-4D4B-920C-FB6D26847055}.DebugUD|Win32.Build.0 = DebugUD|Win32
{78424708-1F6E-4D4B-920C-FB6D26847055}.DebugUD|x64.ActiveCfg = DebugUD|x64
{78424708-1F6E-4D4B-920C-FB6D26847055}.DebugUD|x64.Build.0 = DebugUD|x64
{78424708-1F6E-4D4B-920C-FB6D26847055}.DebugUS|Win32.ActiveCfg = DebugUS|Win32
{78424708-1F6E-4D4B-920C-FB6D26847055}.DebugUS|Win32.Build.0 = DebugUS|Win32
{78424708-1F6E-4D4B-920C-FB6D26847055}.DebugUS|x64.ActiveCfg = DebugUS|x64
{78424708-1F6E-4D4B-920C-FB6D26847055}.DebugUS|x64.Build.0 = DebugUS|x64
{78424708-1F6E-4D4B-920C-FB6D26847055}.Release|Win32.ActiveCfg = ReleaseUS|Win32
{78424708-1F6E-4D4B-920C-FB6D26847055}.Release|Win32.Build.0 = ReleaseUS|Win32
{78424708-1F6E-4D4B-920C-FB6D26847055}.Release|x64.ActiveCfg = ReleaseUS|x64
{78424708-1F6E-4D4B-920C-FB6D26847055}.Release|x64.Build.0 = ReleaseUS|x64
{78424708-1F6E-4D4B-920C-FB6D26847055}.ReleaseAD|Win32.ActiveCfg = ReleaseAD|Win32
{78424708-1F6E-4D4B-920C-FB6D26847055}.ReleaseAD|Win32.Build.0 = ReleaseAD|Win32
{78424708-1F6E-4D4B-920C-FB6D26847055}.ReleaseAD|x64.ActiveCfg = ReleaseAD|x64
{78424708-1F6E-4D4B-920C-FB6D26847055}.ReleaseAD|x64.Build.0 = ReleaseAD|x64
{78424708-1F6E-4D4B-920C-FB6D26847055}.ReleaseAS|Win32.ActiveCfg = ReleaseAS|Win32
{78424708-1F6E-4D4B-920C-FB6D26847055}.ReleaseAS|Win32.Build.0 = ReleaseAS|Win32
{78424708-1F6E-4D4B-920C-FB6D26847055}.ReleaseAS|x64.ActiveCfg = ReleaseAS|x64
{78424708-1F6E-4D4B-920C-FB6D26847055}.ReleaseAS|x64.Build.0 = ReleaseAS|x64
{78424708-1F6E-4D4B-920C-FB6D26847055}.ReleaseUD|Win32.ActiveCfg = ReleaseUD|Win32
{78424708-1F6E-4D4B-920C-FB6D26847055}.ReleaseUD|Win32.Build.0 = ReleaseUD|Win32
{78424708-1F6E-4D4B-920C-FB6D26847055}.ReleaseUD|x64.ActiveCfg = ReleaseUD|x64
{78424708-1F6E-4D4B-920C-FB6D26847055}.ReleaseUD|x64.Build.0 = ReleaseUD|x64
{78424708-1F6E-4D4B-920C-FB6D26847055}.ReleaseUS|Win32.ActiveCfg = ReleaseUS|Win32
{78424708-1F6E-4D4B-920C-FB6D26847055}.ReleaseUS|Win32.Build.0 = ReleaseUS|Win32
{78424708-1F6E-4D4B-920C-FB6D26847055}.ReleaseUS|x64.ActiveCfg = ReleaseUS|x64
{78424708-1F6E-4D4B-920C-FB6D26847055}.ReleaseUS|x64.Build.0 = ReleaseUS|x64
{CB385198-50B1-4CF4-883B-11F042DED6AA}.Debug|Win32.ActiveCfg = Debug|Win32
{CB385198-50B1-4CF4-883B-11F042DED6AA}.Debug|Win32.Build.0 = Debug|Win32
{CB385198-50B1-4CF4-883B-11F042DED6AA}.Debug|x64.ActiveCfg = Debug|x64
{CB385198-50B1-4CF4-883B-11F042DED6AA}.Debug|x64.Build.0 = Debug|x64
{CB385198-50B1-4CF4-883B-11F042DED6AA}.DebugAD|Win32.ActiveCfg = Debug|Win32
{CB385198-50B1-4CF4-883B-11F042DED6AA}.DebugAD|Win32.Build.0 = Debug|Win32
{CB385198-50B1-4CF4-883B-11F042DED6AA}.DebugAD|x64.ActiveCfg = Debug|x64
{CB385198-50B1-4CF4-883B-11F042DED6AA}.DebugAD|x64.Build.0 = Debug|x64
{CB385198-50B1-4CF4-883B-11F042DED6AA}.DebugAS|Win32.ActiveCfg = Debug|Win32
{CB385198-50B1-4CF4-883B-11F042DED6AA}.DebugAS|Win32.Build.0 = Debug|Win32
{CB385198-50B1-4CF4-883B-11F042DED6AA}.DebugAS|x64.ActiveCfg = Debug|x64
{CB385198-50B1-4CF4-883B-11F042DED6AA}.DebugAS|x64.Build.0 = Debug|x64
{CB385198-50B1-4CF4-883B-11F042DED6AA}.DebugUD|Win32.ActiveCfg = Debug|Win32
{CB385198-50B1-4CF4-883B-11F042DED6AA}.DebugUD|Win32.Build.0 = Debug|Win32
{CB385198-50B1-4CF4-883B-11F042DED6AA}.DebugUD|x64.ActiveCfg = Debug|x64
{CB385198-50B1-4CF4-883B-11F042DED6AA}.DebugUD|x64.Build.0 = Debug|x64
{CB385198-50B1-4CF4-883B-11F042DED6AA}.DebugUS|Win32.ActiveCfg = Debug|Win32
{CB385198-50B1-4CF4-883B-11F042DED6AA}.DebugUS|Win32.Build.0 = Debug|Win32
{CB385198-50B1-4CF4-883B-11F042DED6AA}.DebugUS|x64.ActiveCfg = Debug|x64
{CB385198-50B1-4CF4-883B-11F042DED6AA}.DebugUS|x64.Build.0 = Debug|x64
{CB385198-50B1-4CF4-883B-11F042DED6AA}.Release|Win32.ActiveCfg = Release|Win32
{CB385198-50B1-4CF4-883B-11F042DED6AA}.Release|Win32.Build.0 = Release|Win32
{CB385198-50B1-4CF4-883B-11F042DED6AA}.Release|x64.ActiveCfg = Release|x64
{CB385198-50B1-4CF4-883B-11F042DED6AA}.Release|x64.Build.0 = Release|x64
{CB385198-50B1-4CF4-883B-11F042DED6AA}.ReleaseAD|Win32.ActiveCfg = Release|Win32
{CB385198-50B1-4CF4-883B-11F042DED6AA}.ReleaseAD|Win32.Build.0 = Release|Win32
{CB385198-50B1-4CF4-883B-11F042DED6AA}.ReleaseAD|x64.ActiveCfg = Release|x64
{CB385198-50B1-4CF4-883B-11F042DED6AA}.ReleaseAD|x64.Build.0 = Release|x64
{CB385198-50B1-4CF4-883B-11F042DED6AA}.ReleaseAS|Win32.ActiveCfg = Release|Win32
{CB385198-50B1-4CF4-883B-11F042DED6AA}.ReleaseAS|Win32.Build.0 = Release|Win32
{CB385198-50B1-4CF4-883B-11F042DED6AA}.ReleaseAS|x64.ActiveCfg = Release|x64
{CB385198-50B1-4CF4-883B-11F042DED6AA}.ReleaseAS|x64.Build.0 = Release|x64
{CB385198-50B1-4CF4-883B-11F042DED6AA}.ReleaseUD|Win32.ActiveCfg = Release|Win32
{CB385198-50B1-4CF4-883B-11F042DED6AA}.ReleaseUD|Win32.Build.0 = Release|Win32
{CB385198-50B1-4CF4-883B-11F042DED6AA}.ReleaseUD|x64.ActiveCfg = Release|x64
{CB385198-50B1-4CF4-883B-11F042DED6AA}.ReleaseUD|x64.Build.0 = Release|x64
{CB385198-50B1-4CF4-883B-11F042DED6AA}.ReleaseUS|Win32.ActiveCfg = Release|Win32
{CB385198-50B1-4CF4-883B-11F042DED6AA}.ReleaseUS|Win32.Build.0 = Release|Win32
{CB385198-50B1-4CF4-883B-11F042DED6AA}.ReleaseUS|x64.ActiveCfg = Release|x64
{CB385198-50B1-4CF4-883B-11F042DED6AA}.ReleaseUS|x64.Build.0 = Release|x64
{AA561A7B-26EA-49AF-90E8-C53C1FA2965D}.Debug|Win32.ActiveCfg = Debug|Win32
{AA561A7B-26EA-49AF-90E8-C53C1FA2965D}.Debug|Win32.Build.0 = Debug|Win32
{AA561A7B-26EA-49AF-90E8-C53C1FA2965D}.Debug|x64.ActiveCfg = Debug|x64
{AA561A7B-26EA-49AF-90E8-C53C1FA2965D}.Debug|x64.Build.0 = Debug|x64
{AA561A7B-26EA-49AF-90E8-C53C1FA2965D}.DebugAD|Win32.ActiveCfg = Debug|Win32
{AA561A7B-26EA-49AF-90E8-C53C1FA2965D}.DebugAD|Win32.Build.0 = Debug|Win32
{AA561A7B-26EA-49AF-90E8-C53C1FA2965D}.DebugAD|x64.ActiveCfg = Debug|x64
{AA561A7B-26EA-49AF-90E8-C53C1FA2965D}.DebugAD|x64.Build.0 = Debug|x64
{AA561A7B-26EA-49AF-90E8-C53C1FA2965D}.DebugAS|Win32.ActiveCfg = Debug|Win32
{AA561A7B-26EA-49AF-90E8-C53C1FA2965D}.DebugAS|Win32.Build.0 = Debug|Win32
{AA561A7B-26EA-49AF-90E8-C53C1FA2965D}.DebugAS|x64.ActiveCfg = Debug|x64
{AA561A7B-26EA-49AF-90E8-C53C1FA2965D}.DebugAS|x64.Build.0 = Debug|x64
{AA561A7B-26EA-49AF-90E8-C53C1FA2965D}.DebugUD|Win32.ActiveCfg = Debug|Win32
{AA561A7B-26EA-49AF-90E8-C53C1FA2965D}.DebugUD|Win32.Build.0 = Debug|Win32
{AA561A7B-26EA-49AF-90E8-C53C1FA2965D}.DebugUD|x64.ActiveCfg = Debug|x64
{AA561A7B-26EA-49AF-90E8-C53C1FA2965D}.DebugUD|x64.Build.0 = Debug|x64
{AA561A7B-26EA-49AF-90E8-C53C1FA2965D}.DebugUS|Win32.ActiveCfg = Debug|Win32
{AA561A7B-26EA-49AF-90E8-C53C1FA2965D}.DebugUS|Win32.Build.0 = Debug|Win32
{AA561A7B-26EA-49AF-90E8-C53C1FA2965D}.DebugUS|x64.ActiveCfg = Debug|x64
{AA561A7B-26EA-49AF-90E8-C53C1FA2965D}.DebugUS|x64.Build.0 = Debug|x64
{AA561A7B-26EA-49AF-90E8-C53C1FA2965D}.Release|Win32.ActiveCfg = Release|Win32
{AA561A7B-26EA-49AF-90E8-C53C1FA2965D}.Release|Win32.Build.0 = Release|Win32
{AA561A7B-26EA-49AF-90E8-C53C1FA2965D}.Release|x64.ActiveCfg = Release|x64
{AA561A7B-26EA-49AF-90E8-C53C1FA2965D}.Release|x64.Build.0 = Release|x64
{AA561A7B-26EA-49AF-90E8-C53C1FA2965D}.ReleaseAD|Win32.ActiveCfg = Release|Win32
{AA561A7B-26EA-49AF-90E8-C53C1FA2965D}.ReleaseAD|Win32.Build.0 = Release|Win32
{AA561A7B-26EA-49AF-90E8-C53C1FA2965D}.ReleaseAD|x64.ActiveCfg = Release|x64
{AA561A7B-26EA-49AF-90E8-C53C1FA2965D}.ReleaseAD|x64.Build.0 = Release|x64
{AA561A7B-26EA-49AF-90E8-C53C1FA2965D}.ReleaseAS|Win32.ActiveCfg = Release|Win32
{AA561A7B-26EA-49AF-90E8-C53C1FA2965D}.ReleaseAS|Win32.Build.0 = Release|Win32
{AA561A7B-26EA-49AF-90E8-C53C1FA2965D}.ReleaseAS|x64.ActiveCfg = Release|x64
{AA561A7B-26EA-49AF-90E8-C53C1FA2965D}.ReleaseAS|x64.Build.0 = Release|x64
{AA561A7B-26EA-49AF-90E8-C53C1FA2965D}.ReleaseUD|Win32.ActiveCfg = Release|Win32
{AA561A7B-26EA-49AF-90E8-C53C1FA2965D}.ReleaseUD|Win32.Build.0 = Release|Win32
{AA561A7B-26EA-49AF-90E8-C53C1FA2965D}.ReleaseUD|x64.ActiveCfg = Release|x64
{AA561A7B-26EA-49AF-90E8-C53C1FA2965D}.ReleaseUD|x64.Build.0 = Release|x64
{AA561A7B-26EA-49AF-90E8-C53C1FA2965D}.ReleaseUS|Win32.ActiveCfg = Release|Win32
{AA561A7B-26EA-49AF-90E8-C53C1FA2965D}.ReleaseUS|Win32.Build.0 = Release|Win32
{AA561A7B-26EA-49AF-90E8-C53C1FA2965D}.ReleaseUS|x64.ActiveCfg = Release|x64
{AA561A7B-26EA-49AF-90E8-C53C1FA2965D}.ReleaseUS|x64.Build.0 = Release|x64
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {04583FA5-D423-4B0D-A42B-F7D44C70991C}
EndGlobalSection
EndGlobal
File diff suppressed because it is too large Load Diff
+830
View File
@@ -0,0 +1,830 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup>
<Filter Include="Doc Files">
<UniqueIdentifier>{595d6bc1-89d0-4fb8-98f6-be35e73727c4}</UniqueIdentifier>
</Filter>
<Filter Include="Header Files">
<UniqueIdentifier>{721663d8-8692-476f-b0fd-71fdadf69929}</UniqueIdentifier>
</Filter>
<Filter Include="Source Files">
<UniqueIdentifier>{9cc24144-d198-4bd1-b941-b946bd61b982}</UniqueIdentifier>
</Filter>
<Filter Include="Source Files\adpcm">
<UniqueIdentifier>{be0080d3-fc04-4442-9e28-b4cc2641177d}</UniqueIdentifier>
</Filter>
<Filter Include="Source Files\bzip2">
<UniqueIdentifier>{adb84a97-8a0c-4988-9473-452326110dff}</UniqueIdentifier>
</Filter>
<Filter Include="Source Files\huffman">
<UniqueIdentifier>{87256d6a-e658-4f60-8759-6bff32a35eb2}</UniqueIdentifier>
</Filter>
<Filter Include="Source Files\libtomcrypt">
<UniqueIdentifier>{d730d7c1-2960-49d2-ba0d-d1a91dd08964}</UniqueIdentifier>
</Filter>
<Filter Include="Source Files\libtomcrypt\hashes">
<UniqueIdentifier>{13e5ccb1-06f1-4d10-bdc1-825b51c64dbf}</UniqueIdentifier>
</Filter>
<Filter Include="Source Files\libtomcrypt\math">
<UniqueIdentifier>{73f7f025-7366-4d76-8d60-4327e00b9d18}</UniqueIdentifier>
</Filter>
<Filter Include="Source Files\libtomcrypt\misc">
<UniqueIdentifier>{be21c641-7727-4d7b-919e-c895d801db17}</UniqueIdentifier>
</Filter>
<Filter Include="Source Files\libtomcrypt\pk">
<UniqueIdentifier>{694a7758-f909-4b8e-aa13-4d06a8c70eff}</UniqueIdentifier>
</Filter>
<Filter Include="Source Files\libtomcrypt\pk\asn1">
<UniqueIdentifier>{3f01cae6-5676-4f33-bb38-215341eedfc4}</UniqueIdentifier>
</Filter>
<Filter Include="Source Files\libtomcrypt\pk\ecc">
<UniqueIdentifier>{63d75851-c430-4c76-aa08-3398523aab4a}</UniqueIdentifier>
</Filter>
<Filter Include="Source Files\libtomcrypt\pk\pkcs1">
<UniqueIdentifier>{11175e9e-e9f1-405c-961b-933e72503cdd}</UniqueIdentifier>
</Filter>
<Filter Include="Source Files\libtomcrypt\pk\rsa">
<UniqueIdentifier>{e30512f4-bdf8-4460-823d-475bd8f08d28}</UniqueIdentifier>
</Filter>
<Filter Include="Source Files\libtommath">
<UniqueIdentifier>{d2889ef6-3f12-4a9b-8624-8d061748ff03}</UniqueIdentifier>
</Filter>
<Filter Include="Source Files\lzma">
<UniqueIdentifier>{02c6dfb8-4a58-46c5-bb35-69ba6215a3a6}</UniqueIdentifier>
</Filter>
<Filter Include="Source Files\pklib">
<UniqueIdentifier>{563829a0-aaa3-4af2-88a2-8c6445d2754b}</UniqueIdentifier>
</Filter>
<Filter Include="Source Files\sparse">
<UniqueIdentifier>{e82b0d03-77ff-46dc-b5a4-5b469224222a}</UniqueIdentifier>
</Filter>
<Filter Include="Source Files\zlib">
<UniqueIdentifier>{cb92df18-9435-4db9-997a-e0e7d532cd26}</UniqueIdentifier>
</Filter>
<Filter Include="Source Files\jenkins">
<UniqueIdentifier>{2920175c-439c-4fd5-b94e-8cf1d3aaadd3}</UniqueIdentifier>
</Filter>
</ItemGroup>
<ItemGroup>
<Text Include="doc\History.txt">
<Filter>Doc Files</Filter>
</Text>
<Text Include="doc\The MoPaQ File Format 0.9.txt">
<Filter>Doc Files</Filter>
</Text>
<Text Include="doc\The MoPaQ File Format 1.0.txt">
<Filter>Doc Files</Filter>
</Text>
</ItemGroup>
<ItemGroup>
<ClInclude Include="src\StormCommon.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="src\adpcm\adpcm.h">
<Filter>Source Files\adpcm</Filter>
</ClInclude>
<ClInclude Include="src\huffman\huff.h">
<Filter>Source Files\huffman</Filter>
</ClInclude>
<ClInclude Include="src\pklib\pklib.h">
<Filter>Source Files\pklib</Filter>
</ClInclude>
<ClInclude Include="src\sparse\sparse.h">
<Filter>Source Files\sparse</Filter>
</ClInclude>
<ClInclude Include="src\jenkins\lookup.h">
<Filter>Source Files\jenkins</Filter>
</ClInclude>
<ClInclude Include="src\StormLib.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="src\StormPort.h">
<Filter>Header Files</Filter>
</ClInclude>
</ItemGroup>
<ItemGroup>
<ClCompile Include="src\FileStream.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="src\SBaseCommon.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="src\SBaseFileTable.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="src\SCompression.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="src\SFileAddFile.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="src\SFileAttributes.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="src\SFileCompactArchive.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="src\SFileCreateArchive.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="src\SFileExtractFile.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="src\SFileFindFile.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="src\SFileGetFileInfo.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="src\SFileListFile.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="src\SFileOpenArchive.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="src\SFileOpenFileEx.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="src\SFilePatchArchives.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="src\SFileReadFile.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="src\SFileVerify.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="src\adpcm\adpcm.cpp">
<Filter>Source Files\adpcm</Filter>
</ClCompile>
<ClCompile Include="src\bzip2\blocksort.c">
<Filter>Source Files\bzip2</Filter>
</ClCompile>
<ClCompile Include="src\bzip2\bzlib.c">
<Filter>Source Files\bzip2</Filter>
</ClCompile>
<ClCompile Include="src\bzip2\compress.c">
<Filter>Source Files\bzip2</Filter>
</ClCompile>
<ClCompile Include="src\bzip2\crctable.c">
<Filter>Source Files\bzip2</Filter>
</ClCompile>
<ClCompile Include="src\bzip2\decompress.c">
<Filter>Source Files\bzip2</Filter>
</ClCompile>
<ClCompile Include="src\bzip2\huffman.c">
<Filter>Source Files\bzip2</Filter>
</ClCompile>
<ClCompile Include="src\bzip2\randtable.c">
<Filter>Source Files\bzip2</Filter>
</ClCompile>
<ClCompile Include="src\huffman\huff.cpp">
<Filter>Source Files\huffman</Filter>
</ClCompile>
<ClCompile Include="src\libtomcrypt\src\hashes\hash_memory.c">
<Filter>Source Files\libtomcrypt\hashes</Filter>
</ClCompile>
<ClCompile Include="src\libtomcrypt\src\hashes\md5.c">
<Filter>Source Files\libtomcrypt\hashes</Filter>
</ClCompile>
<ClCompile Include="src\libtomcrypt\src\hashes\sha1.c">
<Filter>Source Files\libtomcrypt\hashes</Filter>
</ClCompile>
<ClCompile Include="src\libtomcrypt\src\math\ltm_desc.c">
<Filter>Source Files\libtomcrypt\math</Filter>
</ClCompile>
<ClCompile Include="src\libtomcrypt\src\math\multi.c">
<Filter>Source Files\libtomcrypt\math</Filter>
</ClCompile>
<ClCompile Include="src\libtomcrypt\src\math\rand_prime.c">
<Filter>Source Files\libtomcrypt\math</Filter>
</ClCompile>
<ClCompile Include="src\libtomcrypt\src\misc\base64_decode.c">
<Filter>Source Files\libtomcrypt\misc</Filter>
</ClCompile>
<ClCompile Include="src\libtomcrypt\src\misc\crypt_argchk.c">
<Filter>Source Files\libtomcrypt\misc</Filter>
</ClCompile>
<ClCompile Include="src\libtomcrypt\src\misc\crypt_find_hash.c">
<Filter>Source Files\libtomcrypt\misc</Filter>
</ClCompile>
<ClCompile Include="src\libtomcrypt\src\misc\crypt_find_prng.c">
<Filter>Source Files\libtomcrypt\misc</Filter>
</ClCompile>
<ClCompile Include="src\libtomcrypt\src\misc\crypt_hash_descriptor.c">
<Filter>Source Files\libtomcrypt\misc</Filter>
</ClCompile>
<ClCompile Include="src\libtomcrypt\src\misc\crypt_hash_is_valid.c">
<Filter>Source Files\libtomcrypt\misc</Filter>
</ClCompile>
<ClCompile Include="src\libtomcrypt\src\misc\crypt_libc.c">
<Filter>Source Files\libtomcrypt\misc</Filter>
</ClCompile>
<ClCompile Include="src\libtomcrypt\src\misc\crypt_ltc_mp_descriptor.c">
<Filter>Source Files\libtomcrypt\misc</Filter>
</ClCompile>
<ClCompile Include="src\libtomcrypt\src\misc\crypt_prng_descriptor.c">
<Filter>Source Files\libtomcrypt\misc</Filter>
</ClCompile>
<ClCompile Include="src\libtomcrypt\src\misc\crypt_prng_is_valid.c">
<Filter>Source Files\libtomcrypt\misc</Filter>
</ClCompile>
<ClCompile Include="src\libtomcrypt\src\misc\crypt_register_hash.c">
<Filter>Source Files\libtomcrypt\misc</Filter>
</ClCompile>
<ClCompile Include="src\libtomcrypt\src\misc\crypt_register_prng.c">
<Filter>Source Files\libtomcrypt\misc</Filter>
</ClCompile>
<ClCompile Include="src\libtomcrypt\src\misc\zeromem.c">
<Filter>Source Files\libtomcrypt\misc</Filter>
</ClCompile>
<ClCompile Include="src\libtomcrypt\src\pk\asn1\der_decode_bit_string.c">
<Filter>Source Files\libtomcrypt\pk\asn1</Filter>
</ClCompile>
<ClCompile Include="src\libtomcrypt\src\pk\asn1\der_decode_boolean.c">
<Filter>Source Files\libtomcrypt\pk\asn1</Filter>
</ClCompile>
<ClCompile Include="src\libtomcrypt\src\pk\asn1\der_decode_choice.c">
<Filter>Source Files\libtomcrypt\pk\asn1</Filter>
</ClCompile>
<ClCompile Include="src\libtomcrypt\src\pk\asn1\der_decode_ia5_string.c">
<Filter>Source Files\libtomcrypt\pk\asn1</Filter>
</ClCompile>
<ClCompile Include="src\libtomcrypt\src\pk\asn1\der_decode_integer.c">
<Filter>Source Files\libtomcrypt\pk\asn1</Filter>
</ClCompile>
<ClCompile Include="src\libtomcrypt\src\pk\asn1\der_decode_object_identifier.c">
<Filter>Source Files\libtomcrypt\pk\asn1</Filter>
</ClCompile>
<ClCompile Include="src\libtomcrypt\src\pk\asn1\der_decode_octet_string.c">
<Filter>Source Files\libtomcrypt\pk\asn1</Filter>
</ClCompile>
<ClCompile Include="src\libtomcrypt\src\pk\asn1\der_decode_printable_string.c">
<Filter>Source Files\libtomcrypt\pk\asn1</Filter>
</ClCompile>
<ClCompile Include="src\libtomcrypt\src\pk\asn1\der_decode_sequence_ex.c">
<Filter>Source Files\libtomcrypt\pk\asn1</Filter>
</ClCompile>
<ClCompile Include="src\libtomcrypt\src\pk\asn1\der_decode_sequence_flexi.c">
<Filter>Source Files\libtomcrypt\pk\asn1</Filter>
</ClCompile>
<ClCompile Include="src\libtomcrypt\src\pk\asn1\der_decode_sequence_multi.c">
<Filter>Source Files\libtomcrypt\pk\asn1</Filter>
</ClCompile>
<ClCompile Include="src\libtomcrypt\src\pk\asn1\der_decode_short_integer.c">
<Filter>Source Files\libtomcrypt\pk\asn1</Filter>
</ClCompile>
<ClCompile Include="src\libtomcrypt\src\pk\asn1\der_decode_utctime.c">
<Filter>Source Files\libtomcrypt\pk\asn1</Filter>
</ClCompile>
<ClCompile Include="src\libtomcrypt\src\pk\asn1\der_decode_utf8_string.c">
<Filter>Source Files\libtomcrypt\pk\asn1</Filter>
</ClCompile>
<ClCompile Include="src\libtomcrypt\src\pk\asn1\der_length_bit_string.c">
<Filter>Source Files\libtomcrypt\pk\asn1</Filter>
</ClCompile>
<ClCompile Include="src\libtomcrypt\src\pk\asn1\der_length_boolean.c">
<Filter>Source Files\libtomcrypt\pk\asn1</Filter>
</ClCompile>
<ClCompile Include="src\libtomcrypt\src\pk\asn1\der_length_ia5_string.c">
<Filter>Source Files\libtomcrypt\pk\asn1</Filter>
</ClCompile>
<ClCompile Include="src\libtomcrypt\src\pk\asn1\der_length_integer.c">
<Filter>Source Files\libtomcrypt\pk\asn1</Filter>
</ClCompile>
<ClCompile Include="src\libtomcrypt\src\pk\asn1\der_length_object_identifier.c">
<Filter>Source Files\libtomcrypt\pk\asn1</Filter>
</ClCompile>
<ClCompile Include="src\libtomcrypt\src\pk\asn1\der_length_octet_string.c">
<Filter>Source Files\libtomcrypt\pk\asn1</Filter>
</ClCompile>
<ClCompile Include="src\libtomcrypt\src\pk\asn1\der_length_printable_string.c">
<Filter>Source Files\libtomcrypt\pk\asn1</Filter>
</ClCompile>
<ClCompile Include="src\libtomcrypt\src\pk\asn1\der_length_sequence.c">
<Filter>Source Files\libtomcrypt\pk\asn1</Filter>
</ClCompile>
<ClCompile Include="src\libtomcrypt\src\pk\asn1\der_length_short_integer.c">
<Filter>Source Files\libtomcrypt\pk\asn1</Filter>
</ClCompile>
<ClCompile Include="src\libtomcrypt\src\pk\asn1\der_length_utctime.c">
<Filter>Source Files\libtomcrypt\pk\asn1</Filter>
</ClCompile>
<ClCompile Include="src\libtomcrypt\src\pk\asn1\der_length_utf8_string.c">
<Filter>Source Files\libtomcrypt\pk\asn1</Filter>
</ClCompile>
<ClCompile Include="src\libtomcrypt\src\pk\asn1\der_sequence_free.c">
<Filter>Source Files\libtomcrypt\pk\asn1</Filter>
</ClCompile>
<ClCompile Include="src\libtomcrypt\src\pk\ecc\ltc_ecc_map.c">
<Filter>Source Files\libtomcrypt\pk\ecc</Filter>
</ClCompile>
<ClCompile Include="src\libtomcrypt\src\pk\ecc\ltc_ecc_mul2add.c">
<Filter>Source Files\libtomcrypt\pk\ecc</Filter>
</ClCompile>
<ClCompile Include="src\libtomcrypt\src\pk\ecc\ltc_ecc_mulmod.c">
<Filter>Source Files\libtomcrypt\pk\ecc</Filter>
</ClCompile>
<ClCompile Include="src\libtomcrypt\src\pk\ecc\ltc_ecc_points.c">
<Filter>Source Files\libtomcrypt\pk\ecc</Filter>
</ClCompile>
<ClCompile Include="src\libtomcrypt\src\pk\ecc\ltc_ecc_projective_add_point.c">
<Filter>Source Files\libtomcrypt\pk\ecc</Filter>
</ClCompile>
<ClCompile Include="src\libtomcrypt\src\pk\ecc\ltc_ecc_projective_dbl_point.c">
<Filter>Source Files\libtomcrypt\pk\ecc</Filter>
</ClCompile>
<ClCompile Include="src\libtomcrypt\src\pk\pkcs1\pkcs_1_mgf1.c">
<Filter>Source Files\libtomcrypt\pk\pkcs1</Filter>
</ClCompile>
<ClCompile Include="src\libtomcrypt\src\pk\pkcs1\pkcs_1_oaep_decode.c">
<Filter>Source Files\libtomcrypt\pk\pkcs1</Filter>
</ClCompile>
<ClCompile Include="src\libtomcrypt\src\pk\pkcs1\pkcs_1_pss_decode.c">
<Filter>Source Files\libtomcrypt\pk\pkcs1</Filter>
</ClCompile>
<ClCompile Include="src\libtomcrypt\src\pk\pkcs1\pkcs_1_v1_5_decode.c">
<Filter>Source Files\libtomcrypt\pk\pkcs1</Filter>
</ClCompile>
<ClCompile Include="src\libtomcrypt\src\pk\rsa\rsa_exptmod.c">
<Filter>Source Files\libtomcrypt\pk\rsa</Filter>
</ClCompile>
<ClCompile Include="src\libtomcrypt\src\pk\rsa\rsa_free.c">
<Filter>Source Files\libtomcrypt\pk\rsa</Filter>
</ClCompile>
<ClCompile Include="src\libtomcrypt\src\pk\rsa\rsa_import.c">
<Filter>Source Files\libtomcrypt\pk\rsa</Filter>
</ClCompile>
<ClCompile Include="src\libtomcrypt\src\pk\rsa\rsa_make_key.c">
<Filter>Source Files\libtomcrypt\pk\rsa</Filter>
</ClCompile>
<ClCompile Include="src\libtomcrypt\src\pk\rsa\rsa_verify_hash.c">
<Filter>Source Files\libtomcrypt\pk\rsa</Filter>
</ClCompile>
<ClCompile Include="src\libtomcrypt\src\pk\rsa\rsa_verify_simple.c">
<Filter>Source Files\libtomcrypt\pk\rsa</Filter>
</ClCompile>
<ClCompile Include="src\libtommath\bn_fast_mp_invmod.c">
<Filter>Source Files\libtommath</Filter>
</ClCompile>
<ClCompile Include="src\libtommath\bn_fast_mp_montgomery_reduce.c">
<Filter>Source Files\libtommath</Filter>
</ClCompile>
<ClCompile Include="src\libtommath\bn_fast_s_mp_mul_digs.c">
<Filter>Source Files\libtommath</Filter>
</ClCompile>
<ClCompile Include="src\libtommath\bn_fast_s_mp_mul_high_digs.c">
<Filter>Source Files\libtommath</Filter>
</ClCompile>
<ClCompile Include="src\libtommath\bn_fast_s_mp_sqr.c">
<Filter>Source Files\libtommath</Filter>
</ClCompile>
<ClCompile Include="src\libtommath\bn_mp_2expt.c">
<Filter>Source Files\libtommath</Filter>
</ClCompile>
<ClCompile Include="src\libtommath\bn_mp_abs.c">
<Filter>Source Files\libtommath</Filter>
</ClCompile>
<ClCompile Include="src\libtommath\bn_mp_add.c">
<Filter>Source Files\libtommath</Filter>
</ClCompile>
<ClCompile Include="src\libtommath\bn_mp_add_d.c">
<Filter>Source Files\libtommath</Filter>
</ClCompile>
<ClCompile Include="src\libtommath\bn_mp_addmod.c">
<Filter>Source Files\libtommath</Filter>
</ClCompile>
<ClCompile Include="src\libtommath\bn_mp_and.c">
<Filter>Source Files\libtommath</Filter>
</ClCompile>
<ClCompile Include="src\libtommath\bn_mp_clamp.c">
<Filter>Source Files\libtommath</Filter>
</ClCompile>
<ClCompile Include="src\libtommath\bn_mp_clear.c">
<Filter>Source Files\libtommath</Filter>
</ClCompile>
<ClCompile Include="src\libtommath\bn_mp_clear_multi.c">
<Filter>Source Files\libtommath</Filter>
</ClCompile>
<ClCompile Include="src\libtommath\bn_mp_cmp.c">
<Filter>Source Files\libtommath</Filter>
</ClCompile>
<ClCompile Include="src\libtommath\bn_mp_cmp_d.c">
<Filter>Source Files\libtommath</Filter>
</ClCompile>
<ClCompile Include="src\libtommath\bn_mp_cmp_mag.c">
<Filter>Source Files\libtommath</Filter>
</ClCompile>
<ClCompile Include="src\libtommath\bn_mp_cnt_lsb.c">
<Filter>Source Files\libtommath</Filter>
</ClCompile>
<ClCompile Include="src\libtommath\bn_mp_copy.c">
<Filter>Source Files\libtommath</Filter>
</ClCompile>
<ClCompile Include="src\libtommath\bn_mp_count_bits.c">
<Filter>Source Files\libtommath</Filter>
</ClCompile>
<ClCompile Include="src\libtommath\bn_mp_div.c">
<Filter>Source Files\libtommath</Filter>
</ClCompile>
<ClCompile Include="src\libtommath\bn_mp_div_2.c">
<Filter>Source Files\libtommath</Filter>
</ClCompile>
<ClCompile Include="src\libtommath\bn_mp_div_2d.c">
<Filter>Source Files\libtommath</Filter>
</ClCompile>
<ClCompile Include="src\libtommath\bn_mp_div_3.c">
<Filter>Source Files\libtommath</Filter>
</ClCompile>
<ClCompile Include="src\libtommath\bn_mp_div_d.c">
<Filter>Source Files\libtommath</Filter>
</ClCompile>
<ClCompile Include="src\libtommath\bn_mp_dr_is_modulus.c">
<Filter>Source Files\libtommath</Filter>
</ClCompile>
<ClCompile Include="src\libtommath\bn_mp_dr_reduce.c">
<Filter>Source Files\libtommath</Filter>
</ClCompile>
<ClCompile Include="src\libtommath\bn_mp_dr_setup.c">
<Filter>Source Files\libtommath</Filter>
</ClCompile>
<ClCompile Include="src\libtommath\bn_mp_exch.c">
<Filter>Source Files\libtommath</Filter>
</ClCompile>
<ClCompile Include="src\libtommath\bn_mp_expt_d.c">
<Filter>Source Files\libtommath</Filter>
</ClCompile>
<ClCompile Include="src\libtommath\bn_mp_exptmod.c">
<Filter>Source Files\libtommath</Filter>
</ClCompile>
<ClCompile Include="src\libtommath\bn_mp_exptmod_fast.c">
<Filter>Source Files\libtommath</Filter>
</ClCompile>
<ClCompile Include="src\libtommath\bn_mp_exteuclid.c">
<Filter>Source Files\libtommath</Filter>
</ClCompile>
<ClCompile Include="src\libtommath\bn_mp_fread.c">
<Filter>Source Files\libtommath</Filter>
</ClCompile>
<ClCompile Include="src\libtommath\bn_mp_fwrite.c">
<Filter>Source Files\libtommath</Filter>
</ClCompile>
<ClCompile Include="src\libtommath\bn_mp_gcd.c">
<Filter>Source Files\libtommath</Filter>
</ClCompile>
<ClCompile Include="src\libtommath\bn_mp_get_int.c">
<Filter>Source Files\libtommath</Filter>
</ClCompile>
<ClCompile Include="src\libtommath\bn_mp_grow.c">
<Filter>Source Files\libtommath</Filter>
</ClCompile>
<ClCompile Include="src\libtommath\bn_mp_init.c">
<Filter>Source Files\libtommath</Filter>
</ClCompile>
<ClCompile Include="src\libtommath\bn_mp_init_copy.c">
<Filter>Source Files\libtommath</Filter>
</ClCompile>
<ClCompile Include="src\libtommath\bn_mp_init_multi.c">
<Filter>Source Files\libtommath</Filter>
</ClCompile>
<ClCompile Include="src\libtommath\bn_mp_init_set.c">
<Filter>Source Files\libtommath</Filter>
</ClCompile>
<ClCompile Include="src\libtommath\bn_mp_init_set_int.c">
<Filter>Source Files\libtommath</Filter>
</ClCompile>
<ClCompile Include="src\libtommath\bn_mp_init_size.c">
<Filter>Source Files\libtommath</Filter>
</ClCompile>
<ClCompile Include="src\libtommath\bn_mp_invmod.c">
<Filter>Source Files\libtommath</Filter>
</ClCompile>
<ClCompile Include="src\libtommath\bn_mp_invmod_slow.c">
<Filter>Source Files\libtommath</Filter>
</ClCompile>
<ClCompile Include="src\libtommath\bn_mp_is_square.c">
<Filter>Source Files\libtommath</Filter>
</ClCompile>
<ClCompile Include="src\libtommath\bn_mp_jacobi.c">
<Filter>Source Files\libtommath</Filter>
</ClCompile>
<ClCompile Include="src\libtommath\bn_mp_karatsuba_mul.c">
<Filter>Source Files\libtommath</Filter>
</ClCompile>
<ClCompile Include="src\libtommath\bn_mp_karatsuba_sqr.c">
<Filter>Source Files\libtommath</Filter>
</ClCompile>
<ClCompile Include="src\libtommath\bn_mp_lcm.c">
<Filter>Source Files\libtommath</Filter>
</ClCompile>
<ClCompile Include="src\libtommath\bn_mp_lshd.c">
<Filter>Source Files\libtommath</Filter>
</ClCompile>
<ClCompile Include="src\libtommath\bn_mp_mod.c">
<Filter>Source Files\libtommath</Filter>
</ClCompile>
<ClCompile Include="src\libtommath\bn_mp_mod_2d.c">
<Filter>Source Files\libtommath</Filter>
</ClCompile>
<ClCompile Include="src\libtommath\bn_mp_mod_d.c">
<Filter>Source Files\libtommath</Filter>
</ClCompile>
<ClCompile Include="src\libtommath\bn_mp_montgomery_calc_normalization.c">
<Filter>Source Files\libtommath</Filter>
</ClCompile>
<ClCompile Include="src\libtommath\bn_mp_montgomery_reduce.c">
<Filter>Source Files\libtommath</Filter>
</ClCompile>
<ClCompile Include="src\libtommath\bn_mp_montgomery_setup.c">
<Filter>Source Files\libtommath</Filter>
</ClCompile>
<ClCompile Include="src\libtommath\bn_mp_mul.c">
<Filter>Source Files\libtommath</Filter>
</ClCompile>
<ClCompile Include="src\libtommath\bn_mp_mul_2.c">
<Filter>Source Files\libtommath</Filter>
</ClCompile>
<ClCompile Include="src\libtommath\bn_mp_mul_2d.c">
<Filter>Source Files\libtommath</Filter>
</ClCompile>
<ClCompile Include="src\libtommath\bn_mp_mul_d.c">
<Filter>Source Files\libtommath</Filter>
</ClCompile>
<ClCompile Include="src\libtommath\bn_mp_mulmod.c">
<Filter>Source Files\libtommath</Filter>
</ClCompile>
<ClCompile Include="src\libtommath\bn_mp_n_root.c">
<Filter>Source Files\libtommath</Filter>
</ClCompile>
<ClCompile Include="src\libtommath\bn_mp_neg.c">
<Filter>Source Files\libtommath</Filter>
</ClCompile>
<ClCompile Include="src\libtommath\bn_mp_or.c">
<Filter>Source Files\libtommath</Filter>
</ClCompile>
<ClCompile Include="src\libtommath\bn_mp_prime_fermat.c">
<Filter>Source Files\libtommath</Filter>
</ClCompile>
<ClCompile Include="src\libtommath\bn_mp_prime_is_divisible.c">
<Filter>Source Files\libtommath</Filter>
</ClCompile>
<ClCompile Include="src\libtommath\bn_mp_prime_is_prime.c">
<Filter>Source Files\libtommath</Filter>
</ClCompile>
<ClCompile Include="src\libtommath\bn_mp_prime_miller_rabin.c">
<Filter>Source Files\libtommath</Filter>
</ClCompile>
<ClCompile Include="src\libtommath\bn_mp_prime_next_prime.c">
<Filter>Source Files\libtommath</Filter>
</ClCompile>
<ClCompile Include="src\libtommath\bn_mp_prime_rabin_miller_trials.c">
<Filter>Source Files\libtommath</Filter>
</ClCompile>
<ClCompile Include="src\libtommath\bn_mp_prime_random_ex.c">
<Filter>Source Files\libtommath</Filter>
</ClCompile>
<ClCompile Include="src\libtommath\bn_mp_radix_size.c">
<Filter>Source Files\libtommath</Filter>
</ClCompile>
<ClCompile Include="src\libtommath\bn_mp_radix_smap.c">
<Filter>Source Files\libtommath</Filter>
</ClCompile>
<ClCompile Include="src\libtommath\bn_mp_rand.c">
<Filter>Source Files\libtommath</Filter>
</ClCompile>
<ClCompile Include="src\libtommath\bn_mp_read_radix.c">
<Filter>Source Files\libtommath</Filter>
</ClCompile>
<ClCompile Include="src\libtommath\bn_mp_read_signed_bin.c">
<Filter>Source Files\libtommath</Filter>
</ClCompile>
<ClCompile Include="src\libtommath\bn_mp_read_unsigned_bin.c">
<Filter>Source Files\libtommath</Filter>
</ClCompile>
<ClCompile Include="src\libtommath\bn_mp_reduce.c">
<Filter>Source Files\libtommath</Filter>
</ClCompile>
<ClCompile Include="src\libtommath\bn_mp_reduce_2k.c">
<Filter>Source Files\libtommath</Filter>
</ClCompile>
<ClCompile Include="src\libtommath\bn_mp_reduce_2k_l.c">
<Filter>Source Files\libtommath</Filter>
</ClCompile>
<ClCompile Include="src\libtommath\bn_mp_reduce_2k_setup.c">
<Filter>Source Files\libtommath</Filter>
</ClCompile>
<ClCompile Include="src\libtommath\bn_mp_reduce_2k_setup_l.c">
<Filter>Source Files\libtommath</Filter>
</ClCompile>
<ClCompile Include="src\libtommath\bn_mp_reduce_is_2k.c">
<Filter>Source Files\libtommath</Filter>
</ClCompile>
<ClCompile Include="src\libtommath\bn_mp_reduce_is_2k_l.c">
<Filter>Source Files\libtommath</Filter>
</ClCompile>
<ClCompile Include="src\libtommath\bn_mp_reduce_setup.c">
<Filter>Source Files\libtommath</Filter>
</ClCompile>
<ClCompile Include="src\libtommath\bn_mp_rshd.c">
<Filter>Source Files\libtommath</Filter>
</ClCompile>
<ClCompile Include="src\libtommath\bn_mp_set.c">
<Filter>Source Files\libtommath</Filter>
</ClCompile>
<ClCompile Include="src\libtommath\bn_mp_set_int.c">
<Filter>Source Files\libtommath</Filter>
</ClCompile>
<ClCompile Include="src\libtommath\bn_mp_shrink.c">
<Filter>Source Files\libtommath</Filter>
</ClCompile>
<ClCompile Include="src\libtommath\bn_mp_signed_bin_size.c">
<Filter>Source Files\libtommath</Filter>
</ClCompile>
<ClCompile Include="src\libtommath\bn_mp_sqr.c">
<Filter>Source Files\libtommath</Filter>
</ClCompile>
<ClCompile Include="src\libtommath\bn_mp_sqrmod.c">
<Filter>Source Files\libtommath</Filter>
</ClCompile>
<ClCompile Include="src\libtommath\bn_mp_sqrt.c">
<Filter>Source Files\libtommath</Filter>
</ClCompile>
<ClCompile Include="src\libtommath\bn_mp_sub.c">
<Filter>Source Files\libtommath</Filter>
</ClCompile>
<ClCompile Include="src\libtommath\bn_mp_sub_d.c">
<Filter>Source Files\libtommath</Filter>
</ClCompile>
<ClCompile Include="src\libtommath\bn_mp_submod.c">
<Filter>Source Files\libtommath</Filter>
</ClCompile>
<ClCompile Include="src\libtommath\bn_mp_to_signed_bin.c">
<Filter>Source Files\libtommath</Filter>
</ClCompile>
<ClCompile Include="src\libtommath\bn_mp_to_signed_bin_n.c">
<Filter>Source Files\libtommath</Filter>
</ClCompile>
<ClCompile Include="src\libtommath\bn_mp_to_unsigned_bin.c">
<Filter>Source Files\libtommath</Filter>
</ClCompile>
<ClCompile Include="src\libtommath\bn_mp_to_unsigned_bin_n.c">
<Filter>Source Files\libtommath</Filter>
</ClCompile>
<ClCompile Include="src\libtommath\bn_mp_toom_mul.c">
<Filter>Source Files\libtommath</Filter>
</ClCompile>
<ClCompile Include="src\libtommath\bn_mp_toom_sqr.c">
<Filter>Source Files\libtommath</Filter>
</ClCompile>
<ClCompile Include="src\libtommath\bn_mp_toradix.c">
<Filter>Source Files\libtommath</Filter>
</ClCompile>
<ClCompile Include="src\libtommath\bn_mp_toradix_n.c">
<Filter>Source Files\libtommath</Filter>
</ClCompile>
<ClCompile Include="src\libtommath\bn_mp_unsigned_bin_size.c">
<Filter>Source Files\libtommath</Filter>
</ClCompile>
<ClCompile Include="src\libtommath\bn_mp_xor.c">
<Filter>Source Files\libtommath</Filter>
</ClCompile>
<ClCompile Include="src\libtommath\bn_mp_zero.c">
<Filter>Source Files\libtommath</Filter>
</ClCompile>
<ClCompile Include="src\libtommath\bn_prime_tab.c">
<Filter>Source Files\libtommath</Filter>
</ClCompile>
<ClCompile Include="src\libtommath\bn_reverse.c">
<Filter>Source Files\libtommath</Filter>
</ClCompile>
<ClCompile Include="src\libtommath\bn_s_mp_add.c">
<Filter>Source Files\libtommath</Filter>
</ClCompile>
<ClCompile Include="src\libtommath\bn_s_mp_exptmod.c">
<Filter>Source Files\libtommath</Filter>
</ClCompile>
<ClCompile Include="src\libtommath\bn_s_mp_mul_digs.c">
<Filter>Source Files\libtommath</Filter>
</ClCompile>
<ClCompile Include="src\libtommath\bn_s_mp_mul_high_digs.c">
<Filter>Source Files\libtommath</Filter>
</ClCompile>
<ClCompile Include="src\libtommath\bn_s_mp_sqr.c">
<Filter>Source Files\libtommath</Filter>
</ClCompile>
<ClCompile Include="src\libtommath\bn_s_mp_sub.c">
<Filter>Source Files\libtommath</Filter>
</ClCompile>
<ClCompile Include="src\libtommath\bncore.c">
<Filter>Source Files\libtommath</Filter>
</ClCompile>
<ClCompile Include="src\lzma\C\LzFind.c">
<Filter>Source Files\lzma</Filter>
</ClCompile>
<ClCompile Include="src\lzma\C\LzFindMt.c">
<Filter>Source Files\lzma</Filter>
</ClCompile>
<ClCompile Include="src\lzma\C\LzmaDec.c">
<Filter>Source Files\lzma</Filter>
</ClCompile>
<ClCompile Include="src\lzma\C\LzmaEnc.c">
<Filter>Source Files\lzma</Filter>
</ClCompile>
<ClCompile Include="src\lzma\C\Threads.c">
<Filter>Source Files\lzma</Filter>
</ClCompile>
<ClCompile Include="src\pklib\explode.c">
<Filter>Source Files\pklib</Filter>
</ClCompile>
<ClCompile Include="src\pklib\implode.c">
<Filter>Source Files\pklib</Filter>
</ClCompile>
<ClCompile Include="src\sparse\sparse.cpp">
<Filter>Source Files\sparse</Filter>
</ClCompile>
<ClCompile Include="src\zlib\adler32.c">
<Filter>Source Files\zlib</Filter>
</ClCompile>
<ClCompile Include="src\zlib\crc32.c">
<Filter>Source Files\zlib</Filter>
</ClCompile>
<ClCompile Include="src\zlib\deflate.c">
<Filter>Source Files\zlib</Filter>
</ClCompile>
<ClCompile Include="src\zlib\inffast.c">
<Filter>Source Files\zlib</Filter>
</ClCompile>
<ClCompile Include="src\zlib\inflate.c">
<Filter>Source Files\zlib</Filter>
</ClCompile>
<ClCompile Include="src\zlib\inftrees.c">
<Filter>Source Files\zlib</Filter>
</ClCompile>
<ClCompile Include="src\zlib\trees.c">
<Filter>Source Files\zlib</Filter>
</ClCompile>
<ClCompile Include="src\zlib\zutil.c">
<Filter>Source Files\zlib</Filter>
</ClCompile>
<ClCompile Include="src\jenkins\lookup3.c">
<Filter>Source Files\jenkins</Filter>
</ClCompile>
<ClCompile Include="src\zlib\compress_zlib.c">
<Filter>Source Files\zlib</Filter>
</ClCompile>
<ClCompile Include="src\SBaseSubTypes.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="src\libtomcrypt\src\pk\asn1\der_encode_bit_string.c">
<Filter>Source Files\libtomcrypt\pk\asn1</Filter>
</ClCompile>
<ClCompile Include="src\libtomcrypt\src\pk\asn1\der_encode_boolean.c">
<Filter>Source Files\libtomcrypt\pk\asn1</Filter>
</ClCompile>
<ClCompile Include="src\libtomcrypt\src\pk\asn1\der_encode_ia5_string.c">
<Filter>Source Files\libtomcrypt\pk\asn1</Filter>
</ClCompile>
<ClCompile Include="src\libtomcrypt\src\pk\asn1\der_encode_integer.c">
<Filter>Source Files\libtomcrypt\pk\asn1</Filter>
</ClCompile>
<ClCompile Include="src\libtomcrypt\src\pk\asn1\der_encode_object_identifier.c">
<Filter>Source Files\libtomcrypt\pk\asn1</Filter>
</ClCompile>
<ClCompile Include="src\libtomcrypt\src\pk\asn1\der_encode_octet_string.c">
<Filter>Source Files\libtomcrypt\pk\asn1</Filter>
</ClCompile>
<ClCompile Include="src\libtomcrypt\src\pk\asn1\der_encode_printable_string.c">
<Filter>Source Files\libtomcrypt\pk\asn1</Filter>
</ClCompile>
<ClCompile Include="src\libtomcrypt\src\pk\asn1\der_encode_sequence_ex.c">
<Filter>Source Files\libtomcrypt\pk\asn1</Filter>
</ClCompile>
<ClCompile Include="src\libtomcrypt\src\pk\asn1\der_encode_sequence_multi.c">
<Filter>Source Files\libtomcrypt\pk\asn1</Filter>
</ClCompile>
<ClCompile Include="src\libtomcrypt\src\pk\asn1\der_encode_set.c">
<Filter>Source Files\libtomcrypt\pk\asn1</Filter>
</ClCompile>
<ClCompile Include="src\libtomcrypt\src\pk\asn1\der_encode_setof.c">
<Filter>Source Files\libtomcrypt\pk\asn1</Filter>
</ClCompile>
<ClCompile Include="src\libtomcrypt\src\pk\asn1\der_encode_short_integer.c">
<Filter>Source Files\libtomcrypt\pk\asn1</Filter>
</ClCompile>
<ClCompile Include="src\libtomcrypt\src\pk\asn1\der_encode_utctime.c">
<Filter>Source Files\libtomcrypt\pk\asn1</Filter>
</ClCompile>
<ClCompile Include="src\libtomcrypt\src\pk\asn1\der_encode_utf8_string.c">
<Filter>Source Files\libtomcrypt\pk\asn1</Filter>
</ClCompile>
<ClCompile Include="src\libtomcrypt\src\pk\pkcs1\pkcs_1_pss_encode.c">
<Filter>Source Files\libtomcrypt\pk\pkcs1</Filter>
</ClCompile>
<ClCompile Include="src\libtomcrypt\src\pk\pkcs1\pkcs_1_v1_5_encode.c">
<Filter>Source Files\libtomcrypt\pk\pkcs1</Filter>
</ClCompile>
<ClCompile Include="src\libtomcrypt\src\pk\rsa\rsa_sign_hash.c">
<Filter>Source Files\libtomcrypt\pk\rsa</Filter>
</ClCompile>
</ItemGroup>
</Project>
+537
View File
@@ -0,0 +1,537 @@
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup Label="ProjectConfigurations">
<ProjectConfiguration Include="Debug|Win32">
<Configuration>Debug</Configuration>
<Platform>Win32</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Debug|x64">
<Configuration>Debug</Configuration>
<Platform>x64</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Release|Win32">
<Configuration>Release</Configuration>
<Platform>Win32</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Release|x64">
<Configuration>Release</Configuration>
<Platform>x64</Platform>
</ProjectConfiguration>
</ItemGroup>
<PropertyGroup Label="Globals">
<ProjectName>StormLib_dll</ProjectName>
<ProjectGuid>{CB385198-50B1-4CF4-883B-11F042DED6AA}</ProjectGuid>
<RootNamespace>StormLib_dll</RootNamespace>
<Keyword>Win32Proj</Keyword>
<WindowsTargetPlatformVersion>10.0</WindowsTargetPlatformVersion>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
<ConfigurationType>DynamicLibrary</ConfigurationType>
<PlatformToolset>v142</PlatformToolset>
<CharacterSet>Unicode</CharacterSet>
<WholeProgramOptimization>true</WholeProgramOptimization>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
<ConfigurationType>DynamicLibrary</ConfigurationType>
<PlatformToolset>v142</PlatformToolset>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
<ConfigurationType>DynamicLibrary</ConfigurationType>
<PlatformToolset>v142</PlatformToolset>
<CharacterSet>Unicode</CharacterSet>
<WholeProgramOptimization>true</WholeProgramOptimization>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
<ConfigurationType>DynamicLibrary</ConfigurationType>
<PlatformToolset>v142</PlatformToolset>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
<ImportGroup Label="ExtensionSettings">
</ImportGroup>
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<PropertyGroup Label="UserMacros" />
<PropertyGroup>
<_ProjectFileVersion>14.0.25431.1</_ProjectFileVersion>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<OutDir>./bin/$(ProjectName)/$(Platform)/$(Configuration)\</OutDir>
<IntDir>./bin/$(ProjectName)/$(Platform)/$(Configuration)\</IntDir>
<LinkIncremental>true</LinkIncremental>
<TargetName>StormLib</TargetName>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
<OutDir>./bin/$(ProjectName)/$(Platform)/$(Configuration)\</OutDir>
<IntDir>./bin/$(ProjectName)/$(Platform)/$(Configuration)\</IntDir>
<LinkIncremental>true</LinkIncremental>
<TargetName>StormLib</TargetName>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<OutDir>./bin/$(ProjectName)/$(Platform)/$(Configuration)\</OutDir>
<IntDir>./bin/$(ProjectName)/$(Platform)/$(Configuration)\</IntDir>
<LinkIncremental>false</LinkIncremental>
<TargetName>StormLib</TargetName>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
<OutDir>./bin/$(ProjectName)/$(Platform)/$(Configuration)\</OutDir>
<IntDir>./bin/$(ProjectName)/$(Platform)/$(Configuration)\</IntDir>
<LinkIncremental>false</LinkIncremental>
<TargetName>StormLib</TargetName>
</PropertyGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<ClCompile>
<Optimization>Disabled</Optimization>
<PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;_USRDLL;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
<RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
<PrecompiledHeader />
<WarningLevel>Level1</WarningLevel>
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
</ClCompile>
<Link>
<OutputFile>$(OutDir)StormLib.dll</OutputFile>
<ModuleDefinitionFile>.\src\DllMain.def</ModuleDefinitionFile>
<GenerateDebugInformation>true</GenerateDebugInformation>
<SubSystem>Windows</SubSystem>
<RandomizedBaseAddress>false</RandomizedBaseAddress>
<DataExecutionPrevention />
<TargetMachine>MachineX86</TargetMachine>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
<Midl>
<TargetEnvironment>X64</TargetEnvironment>
</Midl>
<ClCompile>
<Optimization>Disabled</Optimization>
<PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;_USRDLL;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
<RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
<PrecompiledHeader />
<WarningLevel>Level1</WarningLevel>
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
</ClCompile>
<Link>
<OutputFile>$(OutDir)StormLib.dll</OutputFile>
<ModuleDefinitionFile>.\src\DllMain.def</ModuleDefinitionFile>
<GenerateDebugInformation>true</GenerateDebugInformation>
<SubSystem>Windows</SubSystem>
<RandomizedBaseAddress>false</RandomizedBaseAddress>
<DataExecutionPrevention />
<TargetMachine>MachineX64</TargetMachine>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<ClCompile>
<PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;_USRDLL;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
<PrecompiledHeader />
<WarningLevel>Level1</WarningLevel>
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
</ClCompile>
<Link>
<OutputFile>$(OutDir)StormLib.dll</OutputFile>
<ModuleDefinitionFile>.\src\DllMain.def</ModuleDefinitionFile>
<GenerateDebugInformation>true</GenerateDebugInformation>
<SubSystem>Windows</SubSystem>
<OptimizeReferences>true</OptimizeReferences>
<EnableCOMDATFolding>true</EnableCOMDATFolding>
<RandomizedBaseAddress>false</RandomizedBaseAddress>
<DataExecutionPrevention />
<TargetMachine>MachineX86</TargetMachine>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
<Midl>
<TargetEnvironment>X64</TargetEnvironment>
</Midl>
<ClCompile>
<PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;_USRDLL;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
<PrecompiledHeader />
<WarningLevel>Level1</WarningLevel>
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
</ClCompile>
<Link>
<OutputFile>$(OutDir)StormLib.dll</OutputFile>
<ModuleDefinitionFile>.\src\DllMain.def</ModuleDefinitionFile>
<GenerateDebugInformation>true</GenerateDebugInformation>
<SubSystem>Windows</SubSystem>
<OptimizeReferences>true</OptimizeReferences>
<EnableCOMDATFolding>true</EnableCOMDATFolding>
<RandomizedBaseAddress>false</RandomizedBaseAddress>
<DataExecutionPrevention />
<TargetMachine>MachineX64</TargetMachine>
</Link>
</ItemDefinitionGroup>
<ItemGroup>
<Text Include="doc\History.txt" />
<Text Include="doc\The MoPaQ File Format 0.9.txt" />
<Text Include="doc\The MoPaQ File Format 1.0.txt" />
</ItemGroup>
<ItemGroup>
<ClInclude Include="src\adpcm\adpcm.h" />
<ClInclude Include="src\huffman\huff.h" />
<ClInclude Include="src\jenkins\lookup.h" />
<ClInclude Include="src\pklib\pklib.h" />
<ClInclude Include="src\sparse\sparse.h" />
<ClInclude Include="src\StormCommon.h" />
<ClInclude Include="src\StormLib.h" />
<ClInclude Include="src\StormPort.h" />
</ItemGroup>
<ItemGroup>
<ClCompile Include="src\adpcm\adpcm.cpp" />
<ClCompile Include="src\bzip2\blocksort.c" />
<ClCompile Include="src\bzip2\bzlib.c" />
<ClCompile Include="src\bzip2\compress.c" />
<ClCompile Include="src\bzip2\crctable.c" />
<ClCompile Include="src\bzip2\decompress.c" />
<ClCompile Include="src\bzip2\huffman.c" />
<ClCompile Include="src\bzip2\randtable.c" />
<ClCompile Include="src\FileStream.cpp">
<WarningLevel Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Level4</WarningLevel>
<WarningLevel Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Level4</WarningLevel>
<WarningLevel Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Level4</WarningLevel>
<WarningLevel Condition="'$(Configuration)|$(Platform)'=='Release|x64'">Level4</WarningLevel>
</ClCompile>
<ClCompile Include="src\huffman\huff.cpp" />
<ClCompile Include="src\jenkins\lookup3.c" />
<ClCompile Include="src\libtomcrypt\src\hashes\hash_memory.c" />
<ClCompile Include="src\libtomcrypt\src\hashes\md5.c" />
<ClCompile Include="src\libtomcrypt\src\hashes\sha1.c" />
<ClCompile Include="src\libtomcrypt\src\math\ltm_desc.c" />
<ClCompile Include="src\libtomcrypt\src\math\multi.c" />
<ClCompile Include="src\libtomcrypt\src\math\rand_prime.c" />
<ClCompile Include="src\libtomcrypt\src\misc\base64_decode.c" />
<ClCompile Include="src\libtomcrypt\src\misc\crypt_argchk.c" />
<ClCompile Include="src\libtomcrypt\src\misc\crypt_find_hash.c" />
<ClCompile Include="src\libtomcrypt\src\misc\crypt_find_prng.c" />
<ClCompile Include="src\libtomcrypt\src\misc\crypt_hash_descriptor.c" />
<ClCompile Include="src\libtomcrypt\src\misc\crypt_hash_is_valid.c" />
<ClCompile Include="src\libtomcrypt\src\misc\crypt_libc.c" />
<ClCompile Include="src\libtomcrypt\src\misc\crypt_ltc_mp_descriptor.c" />
<ClCompile Include="src\libtomcrypt\src\misc\crypt_prng_descriptor.c" />
<ClCompile Include="src\libtomcrypt\src\misc\crypt_prng_is_valid.c" />
<ClCompile Include="src\libtomcrypt\src\misc\crypt_register_hash.c" />
<ClCompile Include="src\libtomcrypt\src\misc\crypt_register_prng.c" />
<ClCompile Include="src\libtomcrypt\src\misc\zeromem.c" />
<ClCompile Include="src\libtomcrypt\src\pk\asn1\der_decode_bit_string.c" />
<ClCompile Include="src\libtomcrypt\src\pk\asn1\der_decode_boolean.c" />
<ClCompile Include="src\libtomcrypt\src\pk\asn1\der_decode_choice.c" />
<ClCompile Include="src\libtomcrypt\src\pk\asn1\der_decode_ia5_string.c" />
<ClCompile Include="src\libtomcrypt\src\pk\asn1\der_decode_integer.c" />
<ClCompile Include="src\libtomcrypt\src\pk\asn1\der_decode_object_identifier.c" />
<ClCompile Include="src\libtomcrypt\src\pk\asn1\der_decode_octet_string.c" />
<ClCompile Include="src\libtomcrypt\src\pk\asn1\der_decode_printable_string.c" />
<ClCompile Include="src\libtomcrypt\src\pk\asn1\der_decode_sequence_ex.c" />
<ClCompile Include="src\libtomcrypt\src\pk\asn1\der_decode_sequence_flexi.c" />
<ClCompile Include="src\libtomcrypt\src\pk\asn1\der_decode_sequence_multi.c" />
<ClCompile Include="src\libtomcrypt\src\pk\asn1\der_decode_short_integer.c" />
<ClCompile Include="src\libtomcrypt\src\pk\asn1\der_decode_utctime.c" />
<ClCompile Include="src\libtomcrypt\src\pk\asn1\der_decode_utf8_string.c" />
<ClCompile Include="src\libtomcrypt\src\pk\asn1\der_encode_bit_string.c" />
<ClCompile Include="src\libtomcrypt\src\pk\asn1\der_encode_boolean.c" />
<ClCompile Include="src\libtomcrypt\src\pk\asn1\der_encode_ia5_string.c" />
<ClCompile Include="src\libtomcrypt\src\pk\asn1\der_encode_integer.c" />
<ClCompile Include="src\libtomcrypt\src\pk\asn1\der_encode_object_identifier.c" />
<ClCompile Include="src\libtomcrypt\src\pk\asn1\der_encode_octet_string.c" />
<ClCompile Include="src\libtomcrypt\src\pk\asn1\der_encode_printable_string.c" />
<ClCompile Include="src\libtomcrypt\src\pk\asn1\der_encode_sequence_ex.c" />
<ClCompile Include="src\libtomcrypt\src\pk\asn1\der_encode_sequence_multi.c" />
<ClCompile Include="src\libtomcrypt\src\pk\asn1\der_encode_set.c" />
<ClCompile Include="src\libtomcrypt\src\pk\asn1\der_encode_setof.c" />
<ClCompile Include="src\libtomcrypt\src\pk\asn1\der_encode_short_integer.c" />
<ClCompile Include="src\libtomcrypt\src\pk\asn1\der_encode_utctime.c" />
<ClCompile Include="src\libtomcrypt\src\pk\asn1\der_encode_utf8_string.c" />
<ClCompile Include="src\libtomcrypt\src\pk\asn1\der_length_bit_string.c" />
<ClCompile Include="src\libtomcrypt\src\pk\asn1\der_length_boolean.c" />
<ClCompile Include="src\libtomcrypt\src\pk\asn1\der_length_ia5_string.c" />
<ClCompile Include="src\libtomcrypt\src\pk\asn1\der_length_integer.c" />
<ClCompile Include="src\libtomcrypt\src\pk\asn1\der_length_object_identifier.c" />
<ClCompile Include="src\libtomcrypt\src\pk\asn1\der_length_octet_string.c" />
<ClCompile Include="src\libtomcrypt\src\pk\asn1\der_length_printable_string.c" />
<ClCompile Include="src\libtomcrypt\src\pk\asn1\der_length_sequence.c" />
<ClCompile Include="src\libtomcrypt\src\pk\asn1\der_length_short_integer.c" />
<ClCompile Include="src\libtomcrypt\src\pk\asn1\der_length_utctime.c" />
<ClCompile Include="src\libtomcrypt\src\pk\asn1\der_length_utf8_string.c" />
<ClCompile Include="src\libtomcrypt\src\pk\asn1\der_sequence_free.c" />
<ClCompile Include="src\libtomcrypt\src\pk\ecc\ltc_ecc_map.c" />
<ClCompile Include="src\libtomcrypt\src\pk\ecc\ltc_ecc_mul2add.c" />
<ClCompile Include="src\libtomcrypt\src\pk\ecc\ltc_ecc_mulmod.c" />
<ClCompile Include="src\libtomcrypt\src\pk\ecc\ltc_ecc_points.c" />
<ClCompile Include="src\libtomcrypt\src\pk\ecc\ltc_ecc_projective_add_point.c" />
<ClCompile Include="src\libtomcrypt\src\pk\ecc\ltc_ecc_projective_dbl_point.c" />
<ClCompile Include="src\libtomcrypt\src\pk\pkcs1\pkcs_1_mgf1.c" />
<ClCompile Include="src\libtomcrypt\src\pk\pkcs1\pkcs_1_oaep_decode.c" />
<ClCompile Include="src\libtomcrypt\src\pk\pkcs1\pkcs_1_pss_decode.c" />
<ClCompile Include="src\libtomcrypt\src\pk\pkcs1\pkcs_1_pss_encode.c" />
<ClCompile Include="src\libtomcrypt\src\pk\pkcs1\pkcs_1_v1_5_decode.c" />
<ClCompile Include="src\libtomcrypt\src\pk\pkcs1\pkcs_1_v1_5_encode.c" />
<ClCompile Include="src\libtomcrypt\src\pk\rsa\rsa_exptmod.c" />
<ClCompile Include="src\libtomcrypt\src\pk\rsa\rsa_free.c" />
<ClCompile Include="src\libtomcrypt\src\pk\rsa\rsa_import.c" />
<ClCompile Include="src\libtomcrypt\src\pk\rsa\rsa_make_key.c" />
<ClCompile Include="src\libtomcrypt\src\pk\rsa\rsa_sign_hash.c" />
<ClCompile Include="src\libtomcrypt\src\pk\rsa\rsa_verify_hash.c" />
<ClCompile Include="src\libtomcrypt\src\pk\rsa\rsa_verify_simple.c" />
<ClCompile Include="src\libtommath\bncore.c" />
<ClCompile Include="src\libtommath\bn_fast_mp_invmod.c" />
<ClCompile Include="src\libtommath\bn_fast_mp_montgomery_reduce.c" />
<ClCompile Include="src\libtommath\bn_fast_s_mp_mul_digs.c" />
<ClCompile Include="src\libtommath\bn_fast_s_mp_mul_high_digs.c" />
<ClCompile Include="src\libtommath\bn_fast_s_mp_sqr.c" />
<ClCompile Include="src\libtommath\bn_mp_2expt.c" />
<ClCompile Include="src\libtommath\bn_mp_abs.c" />
<ClCompile Include="src\libtommath\bn_mp_add.c" />
<ClCompile Include="src\libtommath\bn_mp_addmod.c" />
<ClCompile Include="src\libtommath\bn_mp_add_d.c" />
<ClCompile Include="src\libtommath\bn_mp_and.c" />
<ClCompile Include="src\libtommath\bn_mp_clamp.c" />
<ClCompile Include="src\libtommath\bn_mp_clear.c" />
<ClCompile Include="src\libtommath\bn_mp_clear_multi.c" />
<ClCompile Include="src\libtommath\bn_mp_cmp.c" />
<ClCompile Include="src\libtommath\bn_mp_cmp_d.c" />
<ClCompile Include="src\libtommath\bn_mp_cmp_mag.c" />
<ClCompile Include="src\libtommath\bn_mp_cnt_lsb.c" />
<ClCompile Include="src\libtommath\bn_mp_copy.c" />
<ClCompile Include="src\libtommath\bn_mp_count_bits.c" />
<ClCompile Include="src\libtommath\bn_mp_div.c" />
<ClCompile Include="src\libtommath\bn_mp_div_2.c" />
<ClCompile Include="src\libtommath\bn_mp_div_2d.c" />
<ClCompile Include="src\libtommath\bn_mp_div_3.c" />
<ClCompile Include="src\libtommath\bn_mp_div_d.c" />
<ClCompile Include="src\libtommath\bn_mp_dr_is_modulus.c" />
<ClCompile Include="src\libtommath\bn_mp_dr_reduce.c" />
<ClCompile Include="src\libtommath\bn_mp_dr_setup.c" />
<ClCompile Include="src\libtommath\bn_mp_exch.c" />
<ClCompile Include="src\libtommath\bn_mp_exptmod.c" />
<ClCompile Include="src\libtommath\bn_mp_exptmod_fast.c" />
<ClCompile Include="src\libtommath\bn_mp_expt_d.c" />
<ClCompile Include="src\libtommath\bn_mp_exteuclid.c" />
<ClCompile Include="src\libtommath\bn_mp_fread.c" />
<ClCompile Include="src\libtommath\bn_mp_fwrite.c" />
<ClCompile Include="src\libtommath\bn_mp_gcd.c" />
<ClCompile Include="src\libtommath\bn_mp_get_int.c" />
<ClCompile Include="src\libtommath\bn_mp_grow.c" />
<ClCompile Include="src\libtommath\bn_mp_init.c" />
<ClCompile Include="src\libtommath\bn_mp_init_copy.c" />
<ClCompile Include="src\libtommath\bn_mp_init_multi.c" />
<ClCompile Include="src\libtommath\bn_mp_init_set.c" />
<ClCompile Include="src\libtommath\bn_mp_init_set_int.c" />
<ClCompile Include="src\libtommath\bn_mp_init_size.c" />
<ClCompile Include="src\libtommath\bn_mp_invmod.c" />
<ClCompile Include="src\libtommath\bn_mp_invmod_slow.c" />
<ClCompile Include="src\libtommath\bn_mp_is_square.c" />
<ClCompile Include="src\libtommath\bn_mp_jacobi.c" />
<ClCompile Include="src\libtommath\bn_mp_karatsuba_mul.c" />
<ClCompile Include="src\libtommath\bn_mp_karatsuba_sqr.c" />
<ClCompile Include="src\libtommath\bn_mp_lcm.c" />
<ClCompile Include="src\libtommath\bn_mp_lshd.c" />
<ClCompile Include="src\libtommath\bn_mp_mod.c" />
<ClCompile Include="src\libtommath\bn_mp_mod_2d.c" />
<ClCompile Include="src\libtommath\bn_mp_mod_d.c" />
<ClCompile Include="src\libtommath\bn_mp_montgomery_calc_normalization.c" />
<ClCompile Include="src\libtommath\bn_mp_montgomery_reduce.c" />
<ClCompile Include="src\libtommath\bn_mp_montgomery_setup.c" />
<ClCompile Include="src\libtommath\bn_mp_mul.c" />
<ClCompile Include="src\libtommath\bn_mp_mulmod.c" />
<ClCompile Include="src\libtommath\bn_mp_mul_2.c" />
<ClCompile Include="src\libtommath\bn_mp_mul_2d.c" />
<ClCompile Include="src\libtommath\bn_mp_mul_d.c" />
<ClCompile Include="src\libtommath\bn_mp_neg.c" />
<ClCompile Include="src\libtommath\bn_mp_n_root.c" />
<ClCompile Include="src\libtommath\bn_mp_or.c" />
<ClCompile Include="src\libtommath\bn_mp_prime_fermat.c" />
<ClCompile Include="src\libtommath\bn_mp_prime_is_divisible.c" />
<ClCompile Include="src\libtommath\bn_mp_prime_is_prime.c" />
<ClCompile Include="src\libtommath\bn_mp_prime_miller_rabin.c" />
<ClCompile Include="src\libtommath\bn_mp_prime_next_prime.c" />
<ClCompile Include="src\libtommath\bn_mp_prime_rabin_miller_trials.c" />
<ClCompile Include="src\libtommath\bn_mp_prime_random_ex.c" />
<ClCompile Include="src\libtommath\bn_mp_radix_size.c" />
<ClCompile Include="src\libtommath\bn_mp_radix_smap.c" />
<ClCompile Include="src\libtommath\bn_mp_rand.c" />
<ClCompile Include="src\libtommath\bn_mp_read_radix.c" />
<ClCompile Include="src\libtommath\bn_mp_read_signed_bin.c" />
<ClCompile Include="src\libtommath\bn_mp_read_unsigned_bin.c" />
<ClCompile Include="src\libtommath\bn_mp_reduce.c" />
<ClCompile Include="src\libtommath\bn_mp_reduce_2k.c" />
<ClCompile Include="src\libtommath\bn_mp_reduce_2k_l.c" />
<ClCompile Include="src\libtommath\bn_mp_reduce_2k_setup.c" />
<ClCompile Include="src\libtommath\bn_mp_reduce_2k_setup_l.c" />
<ClCompile Include="src\libtommath\bn_mp_reduce_is_2k.c" />
<ClCompile Include="src\libtommath\bn_mp_reduce_is_2k_l.c" />
<ClCompile Include="src\libtommath\bn_mp_reduce_setup.c" />
<ClCompile Include="src\libtommath\bn_mp_rshd.c" />
<ClCompile Include="src\libtommath\bn_mp_set.c" />
<ClCompile Include="src\libtommath\bn_mp_set_int.c" />
<ClCompile Include="src\libtommath\bn_mp_shrink.c" />
<ClCompile Include="src\libtommath\bn_mp_signed_bin_size.c" />
<ClCompile Include="src\libtommath\bn_mp_sqr.c" />
<ClCompile Include="src\libtommath\bn_mp_sqrmod.c" />
<ClCompile Include="src\libtommath\bn_mp_sqrt.c" />
<ClCompile Include="src\libtommath\bn_mp_sub.c" />
<ClCompile Include="src\libtommath\bn_mp_submod.c" />
<ClCompile Include="src\libtommath\bn_mp_sub_d.c" />
<ClCompile Include="src\libtommath\bn_mp_toom_mul.c" />
<ClCompile Include="src\libtommath\bn_mp_toom_sqr.c" />
<ClCompile Include="src\libtommath\bn_mp_toradix.c" />
<ClCompile Include="src\libtommath\bn_mp_toradix_n.c" />
<ClCompile Include="src\libtommath\bn_mp_to_signed_bin.c" />
<ClCompile Include="src\libtommath\bn_mp_to_signed_bin_n.c" />
<ClCompile Include="src\libtommath\bn_mp_to_unsigned_bin.c" />
<ClCompile Include="src\libtommath\bn_mp_to_unsigned_bin_n.c" />
<ClCompile Include="src\libtommath\bn_mp_unsigned_bin_size.c" />
<ClCompile Include="src\libtommath\bn_mp_xor.c" />
<ClCompile Include="src\libtommath\bn_mp_zero.c" />
<ClCompile Include="src\libtommath\bn_prime_tab.c" />
<ClCompile Include="src\libtommath\bn_reverse.c" />
<ClCompile Include="src\libtommath\bn_s_mp_add.c" />
<ClCompile Include="src\libtommath\bn_s_mp_exptmod.c" />
<ClCompile Include="src\libtommath\bn_s_mp_mul_digs.c" />
<ClCompile Include="src\libtommath\bn_s_mp_mul_high_digs.c" />
<ClCompile Include="src\libtommath\bn_s_mp_sqr.c" />
<ClCompile Include="src\libtommath\bn_s_mp_sub.c" />
<ClCompile Include="src\lzma\C\LzFind.c" />
<ClCompile Include="src\lzma\C\LzFindMt.c" />
<ClCompile Include="src\lzma\C\LzmaDec.c" />
<ClCompile Include="src\lzma\C\LzmaEnc.c" />
<ClCompile Include="src\lzma\C\Threads.c" />
<ClCompile Include="src\pklib\explode.c" />
<ClCompile Include="src\pklib\implode.c" />
<ClCompile Include="src\SBaseCommon.cpp">
<WarningLevel Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Level4</WarningLevel>
<WarningLevel Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Level4</WarningLevel>
<WarningLevel Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Level4</WarningLevel>
<WarningLevel Condition="'$(Configuration)|$(Platform)'=='Release|x64'">Level4</WarningLevel>
</ClCompile>
<ClCompile Include="src\SBaseFileTable.cpp">
<WarningLevel Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Level4</WarningLevel>
<WarningLevel Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Level4</WarningLevel>
<WarningLevel Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Level4</WarningLevel>
<WarningLevel Condition="'$(Configuration)|$(Platform)'=='Release|x64'">Level4</WarningLevel>
</ClCompile>
<ClCompile Include="src\SBaseSubTypes.cpp">
<WarningLevel Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Level4</WarningLevel>
<WarningLevel Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Level4</WarningLevel>
<WarningLevel Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Level4</WarningLevel>
<WarningLevel Condition="'$(Configuration)|$(Platform)'=='Release|x64'">Level4</WarningLevel>
</ClCompile>
<ClCompile Include="src\SCompression.cpp">
<WarningLevel Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Level4</WarningLevel>
<WarningLevel Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Level4</WarningLevel>
<WarningLevel Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Level4</WarningLevel>
<WarningLevel Condition="'$(Configuration)|$(Platform)'=='Release|x64'">Level4</WarningLevel>
</ClCompile>
<ClCompile Include="src\SFileAddFile.cpp">
<WarningLevel Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Level4</WarningLevel>
<WarningLevel Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Level4</WarningLevel>
<WarningLevel Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Level4</WarningLevel>
<WarningLevel Condition="'$(Configuration)|$(Platform)'=='Release|x64'">Level4</WarningLevel>
</ClCompile>
<ClCompile Include="src\SFileAttributes.cpp">
<WarningLevel Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Level4</WarningLevel>
<WarningLevel Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Level4</WarningLevel>
<WarningLevel Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Level4</WarningLevel>
<WarningLevel Condition="'$(Configuration)|$(Platform)'=='Release|x64'">Level4</WarningLevel>
</ClCompile>
<ClCompile Include="src\SFileCompactArchive.cpp">
<WarningLevel Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Level4</WarningLevel>
<WarningLevel Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Level4</WarningLevel>
<WarningLevel Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Level4</WarningLevel>
<WarningLevel Condition="'$(Configuration)|$(Platform)'=='Release|x64'">Level4</WarningLevel>
</ClCompile>
<ClCompile Include="src\SFileCreateArchive.cpp">
<WarningLevel Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Level4</WarningLevel>
<WarningLevel Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Level4</WarningLevel>
<WarningLevel Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Level4</WarningLevel>
<WarningLevel Condition="'$(Configuration)|$(Platform)'=='Release|x64'">Level4</WarningLevel>
</ClCompile>
<ClCompile Include="src\SFileExtractFile.cpp">
<WarningLevel Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Level4</WarningLevel>
<WarningLevel Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Level4</WarningLevel>
<WarningLevel Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Level4</WarningLevel>
<WarningLevel Condition="'$(Configuration)|$(Platform)'=='Release|x64'">Level4</WarningLevel>
</ClCompile>
<ClCompile Include="src\SFileFindFile.cpp">
<WarningLevel Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Level4</WarningLevel>
<WarningLevel Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Level4</WarningLevel>
<WarningLevel Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Level4</WarningLevel>
<WarningLevel Condition="'$(Configuration)|$(Platform)'=='Release|x64'">Level4</WarningLevel>
</ClCompile>
<ClCompile Include="src\SFileGetFileInfo.cpp">
<WarningLevel Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Level4</WarningLevel>
<WarningLevel Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Level4</WarningLevel>
<WarningLevel Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Level4</WarningLevel>
<WarningLevel Condition="'$(Configuration)|$(Platform)'=='Release|x64'">Level4</WarningLevel>
</ClCompile>
<ClCompile Include="src\SFileListFile.cpp">
<WarningLevel Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Level4</WarningLevel>
<WarningLevel Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Level4</WarningLevel>
<WarningLevel Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Level4</WarningLevel>
<WarningLevel Condition="'$(Configuration)|$(Platform)'=='Release|x64'">Level4</WarningLevel>
</ClCompile>
<ClCompile Include="src\SFileOpenArchive.cpp">
<WarningLevel Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Level4</WarningLevel>
<WarningLevel Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Level4</WarningLevel>
<WarningLevel Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Level4</WarningLevel>
<WarningLevel Condition="'$(Configuration)|$(Platform)'=='Release|x64'">Level4</WarningLevel>
</ClCompile>
<ClCompile Include="src\SFileOpenFileEx.cpp">
<WarningLevel Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Level4</WarningLevel>
<WarningLevel Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Level4</WarningLevel>
<WarningLevel Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Level4</WarningLevel>
<WarningLevel Condition="'$(Configuration)|$(Platform)'=='Release|x64'">Level4</WarningLevel>
</ClCompile>
<ClCompile Include="src\SFilePatchArchives.cpp">
<WarningLevel Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Level4</WarningLevel>
</ClCompile>
<ClCompile Include="src\SFileReadFile.cpp">
<WarningLevel Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Level4</WarningLevel>
<WarningLevel Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Level4</WarningLevel>
<WarningLevel Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Level4</WarningLevel>
<WarningLevel Condition="'$(Configuration)|$(Platform)'=='Release|x64'">Level4</WarningLevel>
</ClCompile>
<ClCompile Include="src\SFileVerify.cpp">
<WarningLevel Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Level4</WarningLevel>
<WarningLevel Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Level4</WarningLevel>
<WarningLevel Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Level4</WarningLevel>
<WarningLevel Condition="'$(Configuration)|$(Platform)'=='Release|x64'">Level4</WarningLevel>
</ClCompile>
<ClCompile Include="src\sparse\sparse.cpp" />
<ClCompile Include="src\zlib\adler32.c" />
<ClCompile Include="src\zlib\compress_zlib.c" />
<ClCompile Include="src\zlib\crc32.c" />
<ClCompile Include="src\zlib\deflate.c" />
<ClCompile Include="src\zlib\inffast.c" />
<ClCompile Include="src\zlib\inflate.c" />
<ClCompile Include="src\zlib\inftrees.c" />
<ClCompile Include="src\zlib\trees.c" />
<ClCompile Include="src\zlib\zutil.c" />
<ClCompile Include="src\DllMain.c">
<WarningLevel Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Level4</WarningLevel>
<WarningLevel Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Level4</WarningLevel>
<WarningLevel Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Level4</WarningLevel>
<WarningLevel Condition="'$(Configuration)|$(Platform)'=='Release|x64'">Level4</WarningLevel>
</ClCompile>
</ItemGroup>
<ItemGroup>
<ResourceCompile Include="src\DllMain.rc" />
</ItemGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
<ImportGroup Label="ExtensionTargets">
</ImportGroup>
</Project>
+838
View File
@@ -0,0 +1,838 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup>
<Filter Include="Doc Files">
<UniqueIdentifier>{b352ea2c-4169-4b60-85bc-82eadd5a9d2e}</UniqueIdentifier>
</Filter>
<Filter Include="Header Files">
<UniqueIdentifier>{9171b211-949a-4dc1-a028-edf0a2ed4605}</UniqueIdentifier>
</Filter>
<Filter Include="Source Files">
<UniqueIdentifier>{712a20a0-c7a8-4e56-947b-2cf030bbb287}</UniqueIdentifier>
</Filter>
<Filter Include="Source Files\adpcm">
<UniqueIdentifier>{83502600-f49c-43b1-afe6-038d3560a859}</UniqueIdentifier>
</Filter>
<Filter Include="Source Files\bzip2">
<UniqueIdentifier>{ea8b08a3-5c21-48e0-b75f-78eaa2adbc22}</UniqueIdentifier>
</Filter>
<Filter Include="Source Files\huffman">
<UniqueIdentifier>{593ac5e7-fe06-42b8-8025-e3bd725f95d8}</UniqueIdentifier>
</Filter>
<Filter Include="Source Files\libtomcrypt">
<UniqueIdentifier>{9887a885-78fa-4164-80b9-9db6b0c11f86}</UniqueIdentifier>
</Filter>
<Filter Include="Source Files\libtomcrypt\hashes">
<UniqueIdentifier>{7db62947-d38d-48e9-8b52-4cad226394a6}</UniqueIdentifier>
</Filter>
<Filter Include="Source Files\libtomcrypt\math">
<UniqueIdentifier>{b435fecf-9a65-4f2e-8d64-7dfc70de3137}</UniqueIdentifier>
</Filter>
<Filter Include="Source Files\libtomcrypt\misc">
<UniqueIdentifier>{d8ad7878-9e42-427a-b5b6-ae51d92b92cf}</UniqueIdentifier>
</Filter>
<Filter Include="Source Files\libtomcrypt\pk">
<UniqueIdentifier>{07806629-c061-49ed-8212-0585d25fae23}</UniqueIdentifier>
</Filter>
<Filter Include="Source Files\libtomcrypt\pk\asn1">
<UniqueIdentifier>{ca554d9f-b602-452a-971e-86b537ee2ad1}</UniqueIdentifier>
</Filter>
<Filter Include="Source Files\libtomcrypt\pk\ecc">
<UniqueIdentifier>{46e1697c-e6c2-4a8c-b4d2-0142311bb48b}</UniqueIdentifier>
</Filter>
<Filter Include="Source Files\libtomcrypt\pk\pkcs1">
<UniqueIdentifier>{99279e07-2e33-44c9-8f37-0b810ee4ba25}</UniqueIdentifier>
</Filter>
<Filter Include="Source Files\libtomcrypt\pk\rsa">
<UniqueIdentifier>{04fbcfe0-3023-4fa0-8e36-26ab024a4abf}</UniqueIdentifier>
</Filter>
<Filter Include="Source Files\libtommath">
<UniqueIdentifier>{4720c7a0-f4aa-4737-978c-9efe8b429906}</UniqueIdentifier>
</Filter>
<Filter Include="Source Files\lzma">
<UniqueIdentifier>{856c9964-4d85-40e9-8cbd-f4c672c07780}</UniqueIdentifier>
</Filter>
<Filter Include="Source Files\pklib">
<UniqueIdentifier>{7ad3c876-768a-45bc-85b1-38cd492814ea}</UniqueIdentifier>
</Filter>
<Filter Include="Source Files\sparse">
<UniqueIdentifier>{22e86a97-80e9-45a0-ac8e-70d7ea848f35}</UniqueIdentifier>
</Filter>
<Filter Include="Source Files\zlib">
<UniqueIdentifier>{7b2ea923-8454-4073-bb9c-85de0f66caa1}</UniqueIdentifier>
</Filter>
<Filter Include="Source Files\jenkins">
<UniqueIdentifier>{5404ec38-706a-47f8-97b7-941c2574ddf2}</UniqueIdentifier>
</Filter>
</ItemGroup>
<ItemGroup>
<Text Include="doc\History.txt">
<Filter>Doc Files</Filter>
</Text>
<Text Include="doc\The MoPaQ File Format 0.9.txt">
<Filter>Doc Files</Filter>
</Text>
<Text Include="doc\The MoPaQ File Format 1.0.txt">
<Filter>Doc Files</Filter>
</Text>
</ItemGroup>
<ItemGroup>
<ClInclude Include="src\StormCommon.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="src\StormLib.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="src\StormPort.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="src\adpcm\adpcm.h">
<Filter>Source Files\adpcm</Filter>
</ClInclude>
<ClInclude Include="src\huffman\huff.h">
<Filter>Source Files\huffman</Filter>
</ClInclude>
<ClInclude Include="src\pklib\pklib.h">
<Filter>Source Files\pklib</Filter>
</ClInclude>
<ClInclude Include="src\sparse\sparse.h">
<Filter>Source Files\sparse</Filter>
</ClInclude>
<ClInclude Include="src\jenkins\lookup.h">
<Filter>Source Files\jenkins</Filter>
</ClInclude>
</ItemGroup>
<ItemGroup>
<ClCompile Include="src\FileStream.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="src\SBaseCommon.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="src\SBaseFileTable.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="src\SBaseSubTypes.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="src\SCompression.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="src\SFileAddFile.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="src\SFileAttributes.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="src\SFileCompactArchive.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="src\SFileCreateArchive.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="src\SFileExtractFile.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="src\SFileFindFile.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="src\SFileGetFileInfo.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="src\SFileListFile.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="src\SFileOpenArchive.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="src\SFileOpenFileEx.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="src\SFilePatchArchives.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="src\SFileReadFile.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="src\SFileVerify.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="src\adpcm\adpcm.cpp">
<Filter>Source Files\adpcm</Filter>
</ClCompile>
<ClCompile Include="src\bzip2\blocksort.c">
<Filter>Source Files\bzip2</Filter>
</ClCompile>
<ClCompile Include="src\bzip2\bzlib.c">
<Filter>Source Files\bzip2</Filter>
</ClCompile>
<ClCompile Include="src\bzip2\compress.c">
<Filter>Source Files\bzip2</Filter>
</ClCompile>
<ClCompile Include="src\bzip2\crctable.c">
<Filter>Source Files\bzip2</Filter>
</ClCompile>
<ClCompile Include="src\bzip2\decompress.c">
<Filter>Source Files\bzip2</Filter>
</ClCompile>
<ClCompile Include="src\bzip2\huffman.c">
<Filter>Source Files\bzip2</Filter>
</ClCompile>
<ClCompile Include="src\bzip2\randtable.c">
<Filter>Source Files\bzip2</Filter>
</ClCompile>
<ClCompile Include="src\huffman\huff.cpp">
<Filter>Source Files\huffman</Filter>
</ClCompile>
<ClCompile Include="src\libtomcrypt\src\hashes\hash_memory.c">
<Filter>Source Files\libtomcrypt\hashes</Filter>
</ClCompile>
<ClCompile Include="src\libtomcrypt\src\hashes\md5.c">
<Filter>Source Files\libtomcrypt\hashes</Filter>
</ClCompile>
<ClCompile Include="src\libtomcrypt\src\hashes\sha1.c">
<Filter>Source Files\libtomcrypt\hashes</Filter>
</ClCompile>
<ClCompile Include="src\libtomcrypt\src\math\ltm_desc.c">
<Filter>Source Files\libtomcrypt\math</Filter>
</ClCompile>
<ClCompile Include="src\libtomcrypt\src\math\multi.c">
<Filter>Source Files\libtomcrypt\math</Filter>
</ClCompile>
<ClCompile Include="src\libtomcrypt\src\math\rand_prime.c">
<Filter>Source Files\libtomcrypt\math</Filter>
</ClCompile>
<ClCompile Include="src\libtomcrypt\src\misc\base64_decode.c">
<Filter>Source Files\libtomcrypt\misc</Filter>
</ClCompile>
<ClCompile Include="src\libtomcrypt\src\misc\crypt_argchk.c">
<Filter>Source Files\libtomcrypt\misc</Filter>
</ClCompile>
<ClCompile Include="src\libtomcrypt\src\misc\crypt_find_hash.c">
<Filter>Source Files\libtomcrypt\misc</Filter>
</ClCompile>
<ClCompile Include="src\libtomcrypt\src\misc\crypt_find_prng.c">
<Filter>Source Files\libtomcrypt\misc</Filter>
</ClCompile>
<ClCompile Include="src\libtomcrypt\src\misc\crypt_hash_descriptor.c">
<Filter>Source Files\libtomcrypt\misc</Filter>
</ClCompile>
<ClCompile Include="src\libtomcrypt\src\misc\crypt_hash_is_valid.c">
<Filter>Source Files\libtomcrypt\misc</Filter>
</ClCompile>
<ClCompile Include="src\libtomcrypt\src\misc\crypt_libc.c">
<Filter>Source Files\libtomcrypt\misc</Filter>
</ClCompile>
<ClCompile Include="src\libtomcrypt\src\misc\crypt_ltc_mp_descriptor.c">
<Filter>Source Files\libtomcrypt\misc</Filter>
</ClCompile>
<ClCompile Include="src\libtomcrypt\src\misc\crypt_prng_descriptor.c">
<Filter>Source Files\libtomcrypt\misc</Filter>
</ClCompile>
<ClCompile Include="src\libtomcrypt\src\misc\crypt_prng_is_valid.c">
<Filter>Source Files\libtomcrypt\misc</Filter>
</ClCompile>
<ClCompile Include="src\libtomcrypt\src\misc\crypt_register_hash.c">
<Filter>Source Files\libtomcrypt\misc</Filter>
</ClCompile>
<ClCompile Include="src\libtomcrypt\src\misc\crypt_register_prng.c">
<Filter>Source Files\libtomcrypt\misc</Filter>
</ClCompile>
<ClCompile Include="src\libtomcrypt\src\misc\zeromem.c">
<Filter>Source Files\libtomcrypt\misc</Filter>
</ClCompile>
<ClCompile Include="src\libtomcrypt\src\pk\asn1\der_decode_bit_string.c">
<Filter>Source Files\libtomcrypt\pk\asn1</Filter>
</ClCompile>
<ClCompile Include="src\libtomcrypt\src\pk\asn1\der_decode_boolean.c">
<Filter>Source Files\libtomcrypt\pk\asn1</Filter>
</ClCompile>
<ClCompile Include="src\libtomcrypt\src\pk\asn1\der_decode_choice.c">
<Filter>Source Files\libtomcrypt\pk\asn1</Filter>
</ClCompile>
<ClCompile Include="src\libtomcrypt\src\pk\asn1\der_decode_ia5_string.c">
<Filter>Source Files\libtomcrypt\pk\asn1</Filter>
</ClCompile>
<ClCompile Include="src\libtomcrypt\src\pk\asn1\der_decode_integer.c">
<Filter>Source Files\libtomcrypt\pk\asn1</Filter>
</ClCompile>
<ClCompile Include="src\libtomcrypt\src\pk\asn1\der_decode_object_identifier.c">
<Filter>Source Files\libtomcrypt\pk\asn1</Filter>
</ClCompile>
<ClCompile Include="src\libtomcrypt\src\pk\asn1\der_decode_octet_string.c">
<Filter>Source Files\libtomcrypt\pk\asn1</Filter>
</ClCompile>
<ClCompile Include="src\libtomcrypt\src\pk\asn1\der_decode_printable_string.c">
<Filter>Source Files\libtomcrypt\pk\asn1</Filter>
</ClCompile>
<ClCompile Include="src\libtomcrypt\src\pk\asn1\der_decode_sequence_ex.c">
<Filter>Source Files\libtomcrypt\pk\asn1</Filter>
</ClCompile>
<ClCompile Include="src\libtomcrypt\src\pk\asn1\der_decode_sequence_flexi.c">
<Filter>Source Files\libtomcrypt\pk\asn1</Filter>
</ClCompile>
<ClCompile Include="src\libtomcrypt\src\pk\asn1\der_decode_sequence_multi.c">
<Filter>Source Files\libtomcrypt\pk\asn1</Filter>
</ClCompile>
<ClCompile Include="src\libtomcrypt\src\pk\asn1\der_decode_short_integer.c">
<Filter>Source Files\libtomcrypt\pk\asn1</Filter>
</ClCompile>
<ClCompile Include="src\libtomcrypt\src\pk\asn1\der_decode_utctime.c">
<Filter>Source Files\libtomcrypt\pk\asn1</Filter>
</ClCompile>
<ClCompile Include="src\libtomcrypt\src\pk\asn1\der_decode_utf8_string.c">
<Filter>Source Files\libtomcrypt\pk\asn1</Filter>
</ClCompile>
<ClCompile Include="src\libtomcrypt\src\pk\asn1\der_encode_bit_string.c">
<Filter>Source Files\libtomcrypt\pk\asn1</Filter>
</ClCompile>
<ClCompile Include="src\libtomcrypt\src\pk\asn1\der_encode_boolean.c">
<Filter>Source Files\libtomcrypt\pk\asn1</Filter>
</ClCompile>
<ClCompile Include="src\libtomcrypt\src\pk\asn1\der_encode_ia5_string.c">
<Filter>Source Files\libtomcrypt\pk\asn1</Filter>
</ClCompile>
<ClCompile Include="src\libtomcrypt\src\pk\asn1\der_encode_integer.c">
<Filter>Source Files\libtomcrypt\pk\asn1</Filter>
</ClCompile>
<ClCompile Include="src\libtomcrypt\src\pk\asn1\der_encode_object_identifier.c">
<Filter>Source Files\libtomcrypt\pk\asn1</Filter>
</ClCompile>
<ClCompile Include="src\libtomcrypt\src\pk\asn1\der_encode_octet_string.c">
<Filter>Source Files\libtomcrypt\pk\asn1</Filter>
</ClCompile>
<ClCompile Include="src\libtomcrypt\src\pk\asn1\der_encode_printable_string.c">
<Filter>Source Files\libtomcrypt\pk\asn1</Filter>
</ClCompile>
<ClCompile Include="src\libtomcrypt\src\pk\asn1\der_encode_sequence_ex.c">
<Filter>Source Files\libtomcrypt\pk\asn1</Filter>
</ClCompile>
<ClCompile Include="src\libtomcrypt\src\pk\asn1\der_encode_sequence_multi.c">
<Filter>Source Files\libtomcrypt\pk\asn1</Filter>
</ClCompile>
<ClCompile Include="src\libtomcrypt\src\pk\asn1\der_encode_set.c">
<Filter>Source Files\libtomcrypt\pk\asn1</Filter>
</ClCompile>
<ClCompile Include="src\libtomcrypt\src\pk\asn1\der_encode_setof.c">
<Filter>Source Files\libtomcrypt\pk\asn1</Filter>
</ClCompile>
<ClCompile Include="src\libtomcrypt\src\pk\asn1\der_encode_short_integer.c">
<Filter>Source Files\libtomcrypt\pk\asn1</Filter>
</ClCompile>
<ClCompile Include="src\libtomcrypt\src\pk\asn1\der_encode_utctime.c">
<Filter>Source Files\libtomcrypt\pk\asn1</Filter>
</ClCompile>
<ClCompile Include="src\libtomcrypt\src\pk\asn1\der_encode_utf8_string.c">
<Filter>Source Files\libtomcrypt\pk\asn1</Filter>
</ClCompile>
<ClCompile Include="src\libtomcrypt\src\pk\asn1\der_length_bit_string.c">
<Filter>Source Files\libtomcrypt\pk\asn1</Filter>
</ClCompile>
<ClCompile Include="src\libtomcrypt\src\pk\asn1\der_length_boolean.c">
<Filter>Source Files\libtomcrypt\pk\asn1</Filter>
</ClCompile>
<ClCompile Include="src\libtomcrypt\src\pk\asn1\der_length_ia5_string.c">
<Filter>Source Files\libtomcrypt\pk\asn1</Filter>
</ClCompile>
<ClCompile Include="src\libtomcrypt\src\pk\asn1\der_length_integer.c">
<Filter>Source Files\libtomcrypt\pk\asn1</Filter>
</ClCompile>
<ClCompile Include="src\libtomcrypt\src\pk\asn1\der_length_object_identifier.c">
<Filter>Source Files\libtomcrypt\pk\asn1</Filter>
</ClCompile>
<ClCompile Include="src\libtomcrypt\src\pk\asn1\der_length_octet_string.c">
<Filter>Source Files\libtomcrypt\pk\asn1</Filter>
</ClCompile>
<ClCompile Include="src\libtomcrypt\src\pk\asn1\der_length_printable_string.c">
<Filter>Source Files\libtomcrypt\pk\asn1</Filter>
</ClCompile>
<ClCompile Include="src\libtomcrypt\src\pk\asn1\der_length_sequence.c">
<Filter>Source Files\libtomcrypt\pk\asn1</Filter>
</ClCompile>
<ClCompile Include="src\libtomcrypt\src\pk\asn1\der_length_short_integer.c">
<Filter>Source Files\libtomcrypt\pk\asn1</Filter>
</ClCompile>
<ClCompile Include="src\libtomcrypt\src\pk\asn1\der_length_utctime.c">
<Filter>Source Files\libtomcrypt\pk\asn1</Filter>
</ClCompile>
<ClCompile Include="src\libtomcrypt\src\pk\asn1\der_length_utf8_string.c">
<Filter>Source Files\libtomcrypt\pk\asn1</Filter>
</ClCompile>
<ClCompile Include="src\libtomcrypt\src\pk\asn1\der_sequence_free.c">
<Filter>Source Files\libtomcrypt\pk\asn1</Filter>
</ClCompile>
<ClCompile Include="src\libtomcrypt\src\pk\ecc\ltc_ecc_map.c">
<Filter>Source Files\libtomcrypt\pk\ecc</Filter>
</ClCompile>
<ClCompile Include="src\libtomcrypt\src\pk\ecc\ltc_ecc_mul2add.c">
<Filter>Source Files\libtomcrypt\pk\ecc</Filter>
</ClCompile>
<ClCompile Include="src\libtomcrypt\src\pk\ecc\ltc_ecc_mulmod.c">
<Filter>Source Files\libtomcrypt\pk\ecc</Filter>
</ClCompile>
<ClCompile Include="src\libtomcrypt\src\pk\ecc\ltc_ecc_points.c">
<Filter>Source Files\libtomcrypt\pk\ecc</Filter>
</ClCompile>
<ClCompile Include="src\libtomcrypt\src\pk\ecc\ltc_ecc_projective_add_point.c">
<Filter>Source Files\libtomcrypt\pk\ecc</Filter>
</ClCompile>
<ClCompile Include="src\libtomcrypt\src\pk\ecc\ltc_ecc_projective_dbl_point.c">
<Filter>Source Files\libtomcrypt\pk\ecc</Filter>
</ClCompile>
<ClCompile Include="src\libtomcrypt\src\pk\pkcs1\pkcs_1_mgf1.c">
<Filter>Source Files\libtomcrypt\pk\pkcs1</Filter>
</ClCompile>
<ClCompile Include="src\libtomcrypt\src\pk\pkcs1\pkcs_1_oaep_decode.c">
<Filter>Source Files\libtomcrypt\pk\pkcs1</Filter>
</ClCompile>
<ClCompile Include="src\libtomcrypt\src\pk\pkcs1\pkcs_1_pss_decode.c">
<Filter>Source Files\libtomcrypt\pk\pkcs1</Filter>
</ClCompile>
<ClCompile Include="src\libtomcrypt\src\pk\pkcs1\pkcs_1_pss_encode.c">
<Filter>Source Files\libtomcrypt\pk\pkcs1</Filter>
</ClCompile>
<ClCompile Include="src\libtomcrypt\src\pk\pkcs1\pkcs_1_v1_5_decode.c">
<Filter>Source Files\libtomcrypt\pk\pkcs1</Filter>
</ClCompile>
<ClCompile Include="src\libtomcrypt\src\pk\pkcs1\pkcs_1_v1_5_encode.c">
<Filter>Source Files\libtomcrypt\pk\pkcs1</Filter>
</ClCompile>
<ClCompile Include="src\libtomcrypt\src\pk\rsa\rsa_exptmod.c">
<Filter>Source Files\libtomcrypt\pk\rsa</Filter>
</ClCompile>
<ClCompile Include="src\libtomcrypt\src\pk\rsa\rsa_free.c">
<Filter>Source Files\libtomcrypt\pk\rsa</Filter>
</ClCompile>
<ClCompile Include="src\libtomcrypt\src\pk\rsa\rsa_import.c">
<Filter>Source Files\libtomcrypt\pk\rsa</Filter>
</ClCompile>
<ClCompile Include="src\libtomcrypt\src\pk\rsa\rsa_make_key.c">
<Filter>Source Files\libtomcrypt\pk\rsa</Filter>
</ClCompile>
<ClCompile Include="src\libtomcrypt\src\pk\rsa\rsa_sign_hash.c">
<Filter>Source Files\libtomcrypt\pk\rsa</Filter>
</ClCompile>
<ClCompile Include="src\libtomcrypt\src\pk\rsa\rsa_verify_hash.c">
<Filter>Source Files\libtomcrypt\pk\rsa</Filter>
</ClCompile>
<ClCompile Include="src\libtomcrypt\src\pk\rsa\rsa_verify_simple.c">
<Filter>Source Files\libtomcrypt\pk\rsa</Filter>
</ClCompile>
<ClCompile Include="src\libtommath\bn_fast_mp_invmod.c">
<Filter>Source Files\libtommath</Filter>
</ClCompile>
<ClCompile Include="src\libtommath\bn_fast_mp_montgomery_reduce.c">
<Filter>Source Files\libtommath</Filter>
</ClCompile>
<ClCompile Include="src\libtommath\bn_fast_s_mp_mul_digs.c">
<Filter>Source Files\libtommath</Filter>
</ClCompile>
<ClCompile Include="src\libtommath\bn_fast_s_mp_mul_high_digs.c">
<Filter>Source Files\libtommath</Filter>
</ClCompile>
<ClCompile Include="src\libtommath\bn_fast_s_mp_sqr.c">
<Filter>Source Files\libtommath</Filter>
</ClCompile>
<ClCompile Include="src\libtommath\bn_mp_2expt.c">
<Filter>Source Files\libtommath</Filter>
</ClCompile>
<ClCompile Include="src\libtommath\bn_mp_abs.c">
<Filter>Source Files\libtommath</Filter>
</ClCompile>
<ClCompile Include="src\libtommath\bn_mp_add.c">
<Filter>Source Files\libtommath</Filter>
</ClCompile>
<ClCompile Include="src\libtommath\bn_mp_add_d.c">
<Filter>Source Files\libtommath</Filter>
</ClCompile>
<ClCompile Include="src\libtommath\bn_mp_addmod.c">
<Filter>Source Files\libtommath</Filter>
</ClCompile>
<ClCompile Include="src\libtommath\bn_mp_and.c">
<Filter>Source Files\libtommath</Filter>
</ClCompile>
<ClCompile Include="src\libtommath\bn_mp_clamp.c">
<Filter>Source Files\libtommath</Filter>
</ClCompile>
<ClCompile Include="src\libtommath\bn_mp_clear.c">
<Filter>Source Files\libtommath</Filter>
</ClCompile>
<ClCompile Include="src\libtommath\bn_mp_clear_multi.c">
<Filter>Source Files\libtommath</Filter>
</ClCompile>
<ClCompile Include="src\libtommath\bn_mp_cmp.c">
<Filter>Source Files\libtommath</Filter>
</ClCompile>
<ClCompile Include="src\libtommath\bn_mp_cmp_d.c">
<Filter>Source Files\libtommath</Filter>
</ClCompile>
<ClCompile Include="src\libtommath\bn_mp_cmp_mag.c">
<Filter>Source Files\libtommath</Filter>
</ClCompile>
<ClCompile Include="src\libtommath\bn_mp_cnt_lsb.c">
<Filter>Source Files\libtommath</Filter>
</ClCompile>
<ClCompile Include="src\libtommath\bn_mp_copy.c">
<Filter>Source Files\libtommath</Filter>
</ClCompile>
<ClCompile Include="src\libtommath\bn_mp_count_bits.c">
<Filter>Source Files\libtommath</Filter>
</ClCompile>
<ClCompile Include="src\libtommath\bn_mp_div.c">
<Filter>Source Files\libtommath</Filter>
</ClCompile>
<ClCompile Include="src\libtommath\bn_mp_div_2.c">
<Filter>Source Files\libtommath</Filter>
</ClCompile>
<ClCompile Include="src\libtommath\bn_mp_div_2d.c">
<Filter>Source Files\libtommath</Filter>
</ClCompile>
<ClCompile Include="src\libtommath\bn_mp_div_3.c">
<Filter>Source Files\libtommath</Filter>
</ClCompile>
<ClCompile Include="src\libtommath\bn_mp_div_d.c">
<Filter>Source Files\libtommath</Filter>
</ClCompile>
<ClCompile Include="src\libtommath\bn_mp_dr_is_modulus.c">
<Filter>Source Files\libtommath</Filter>
</ClCompile>
<ClCompile Include="src\libtommath\bn_mp_dr_reduce.c">
<Filter>Source Files\libtommath</Filter>
</ClCompile>
<ClCompile Include="src\libtommath\bn_mp_dr_setup.c">
<Filter>Source Files\libtommath</Filter>
</ClCompile>
<ClCompile Include="src\libtommath\bn_mp_exch.c">
<Filter>Source Files\libtommath</Filter>
</ClCompile>
<ClCompile Include="src\libtommath\bn_mp_expt_d.c">
<Filter>Source Files\libtommath</Filter>
</ClCompile>
<ClCompile Include="src\libtommath\bn_mp_exptmod.c">
<Filter>Source Files\libtommath</Filter>
</ClCompile>
<ClCompile Include="src\libtommath\bn_mp_exptmod_fast.c">
<Filter>Source Files\libtommath</Filter>
</ClCompile>
<ClCompile Include="src\libtommath\bn_mp_exteuclid.c">
<Filter>Source Files\libtommath</Filter>
</ClCompile>
<ClCompile Include="src\libtommath\bn_mp_fread.c">
<Filter>Source Files\libtommath</Filter>
</ClCompile>
<ClCompile Include="src\libtommath\bn_mp_fwrite.c">
<Filter>Source Files\libtommath</Filter>
</ClCompile>
<ClCompile Include="src\libtommath\bn_mp_gcd.c">
<Filter>Source Files\libtommath</Filter>
</ClCompile>
<ClCompile Include="src\libtommath\bn_mp_get_int.c">
<Filter>Source Files\libtommath</Filter>
</ClCompile>
<ClCompile Include="src\libtommath\bn_mp_grow.c">
<Filter>Source Files\libtommath</Filter>
</ClCompile>
<ClCompile Include="src\libtommath\bn_mp_init.c">
<Filter>Source Files\libtommath</Filter>
</ClCompile>
<ClCompile Include="src\libtommath\bn_mp_init_copy.c">
<Filter>Source Files\libtommath</Filter>
</ClCompile>
<ClCompile Include="src\libtommath\bn_mp_init_multi.c">
<Filter>Source Files\libtommath</Filter>
</ClCompile>
<ClCompile Include="src\libtommath\bn_mp_init_set.c">
<Filter>Source Files\libtommath</Filter>
</ClCompile>
<ClCompile Include="src\libtommath\bn_mp_init_set_int.c">
<Filter>Source Files\libtommath</Filter>
</ClCompile>
<ClCompile Include="src\libtommath\bn_mp_init_size.c">
<Filter>Source Files\libtommath</Filter>
</ClCompile>
<ClCompile Include="src\libtommath\bn_mp_invmod.c">
<Filter>Source Files\libtommath</Filter>
</ClCompile>
<ClCompile Include="src\libtommath\bn_mp_invmod_slow.c">
<Filter>Source Files\libtommath</Filter>
</ClCompile>
<ClCompile Include="src\libtommath\bn_mp_is_square.c">
<Filter>Source Files\libtommath</Filter>
</ClCompile>
<ClCompile Include="src\libtommath\bn_mp_jacobi.c">
<Filter>Source Files\libtommath</Filter>
</ClCompile>
<ClCompile Include="src\libtommath\bn_mp_karatsuba_mul.c">
<Filter>Source Files\libtommath</Filter>
</ClCompile>
<ClCompile Include="src\libtommath\bn_mp_karatsuba_sqr.c">
<Filter>Source Files\libtommath</Filter>
</ClCompile>
<ClCompile Include="src\libtommath\bn_mp_lcm.c">
<Filter>Source Files\libtommath</Filter>
</ClCompile>
<ClCompile Include="src\libtommath\bn_mp_lshd.c">
<Filter>Source Files\libtommath</Filter>
</ClCompile>
<ClCompile Include="src\libtommath\bn_mp_mod.c">
<Filter>Source Files\libtommath</Filter>
</ClCompile>
<ClCompile Include="src\libtommath\bn_mp_mod_2d.c">
<Filter>Source Files\libtommath</Filter>
</ClCompile>
<ClCompile Include="src\libtommath\bn_mp_mod_d.c">
<Filter>Source Files\libtommath</Filter>
</ClCompile>
<ClCompile Include="src\libtommath\bn_mp_montgomery_calc_normalization.c">
<Filter>Source Files\libtommath</Filter>
</ClCompile>
<ClCompile Include="src\libtommath\bn_mp_montgomery_reduce.c">
<Filter>Source Files\libtommath</Filter>
</ClCompile>
<ClCompile Include="src\libtommath\bn_mp_montgomery_setup.c">
<Filter>Source Files\libtommath</Filter>
</ClCompile>
<ClCompile Include="src\libtommath\bn_mp_mul.c">
<Filter>Source Files\libtommath</Filter>
</ClCompile>
<ClCompile Include="src\libtommath\bn_mp_mul_2.c">
<Filter>Source Files\libtommath</Filter>
</ClCompile>
<ClCompile Include="src\libtommath\bn_mp_mul_2d.c">
<Filter>Source Files\libtommath</Filter>
</ClCompile>
<ClCompile Include="src\libtommath\bn_mp_mul_d.c">
<Filter>Source Files\libtommath</Filter>
</ClCompile>
<ClCompile Include="src\libtommath\bn_mp_mulmod.c">
<Filter>Source Files\libtommath</Filter>
</ClCompile>
<ClCompile Include="src\libtommath\bn_mp_n_root.c">
<Filter>Source Files\libtommath</Filter>
</ClCompile>
<ClCompile Include="src\libtommath\bn_mp_neg.c">
<Filter>Source Files\libtommath</Filter>
</ClCompile>
<ClCompile Include="src\libtommath\bn_mp_or.c">
<Filter>Source Files\libtommath</Filter>
</ClCompile>
<ClCompile Include="src\libtommath\bn_mp_prime_fermat.c">
<Filter>Source Files\libtommath</Filter>
</ClCompile>
<ClCompile Include="src\libtommath\bn_mp_prime_is_divisible.c">
<Filter>Source Files\libtommath</Filter>
</ClCompile>
<ClCompile Include="src\libtommath\bn_mp_prime_is_prime.c">
<Filter>Source Files\libtommath</Filter>
</ClCompile>
<ClCompile Include="src\libtommath\bn_mp_prime_miller_rabin.c">
<Filter>Source Files\libtommath</Filter>
</ClCompile>
<ClCompile Include="src\libtommath\bn_mp_prime_next_prime.c">
<Filter>Source Files\libtommath</Filter>
</ClCompile>
<ClCompile Include="src\libtommath\bn_mp_prime_rabin_miller_trials.c">
<Filter>Source Files\libtommath</Filter>
</ClCompile>
<ClCompile Include="src\libtommath\bn_mp_prime_random_ex.c">
<Filter>Source Files\libtommath</Filter>
</ClCompile>
<ClCompile Include="src\libtommath\bn_mp_radix_size.c">
<Filter>Source Files\libtommath</Filter>
</ClCompile>
<ClCompile Include="src\libtommath\bn_mp_radix_smap.c">
<Filter>Source Files\libtommath</Filter>
</ClCompile>
<ClCompile Include="src\libtommath\bn_mp_rand.c">
<Filter>Source Files\libtommath</Filter>
</ClCompile>
<ClCompile Include="src\libtommath\bn_mp_read_radix.c">
<Filter>Source Files\libtommath</Filter>
</ClCompile>
<ClCompile Include="src\libtommath\bn_mp_read_signed_bin.c">
<Filter>Source Files\libtommath</Filter>
</ClCompile>
<ClCompile Include="src\libtommath\bn_mp_read_unsigned_bin.c">
<Filter>Source Files\libtommath</Filter>
</ClCompile>
<ClCompile Include="src\libtommath\bn_mp_reduce.c">
<Filter>Source Files\libtommath</Filter>
</ClCompile>
<ClCompile Include="src\libtommath\bn_mp_reduce_2k.c">
<Filter>Source Files\libtommath</Filter>
</ClCompile>
<ClCompile Include="src\libtommath\bn_mp_reduce_2k_l.c">
<Filter>Source Files\libtommath</Filter>
</ClCompile>
<ClCompile Include="src\libtommath\bn_mp_reduce_2k_setup.c">
<Filter>Source Files\libtommath</Filter>
</ClCompile>
<ClCompile Include="src\libtommath\bn_mp_reduce_2k_setup_l.c">
<Filter>Source Files\libtommath</Filter>
</ClCompile>
<ClCompile Include="src\libtommath\bn_mp_reduce_is_2k.c">
<Filter>Source Files\libtommath</Filter>
</ClCompile>
<ClCompile Include="src\libtommath\bn_mp_reduce_is_2k_l.c">
<Filter>Source Files\libtommath</Filter>
</ClCompile>
<ClCompile Include="src\libtommath\bn_mp_reduce_setup.c">
<Filter>Source Files\libtommath</Filter>
</ClCompile>
<ClCompile Include="src\libtommath\bn_mp_rshd.c">
<Filter>Source Files\libtommath</Filter>
</ClCompile>
<ClCompile Include="src\libtommath\bn_mp_set.c">
<Filter>Source Files\libtommath</Filter>
</ClCompile>
<ClCompile Include="src\libtommath\bn_mp_set_int.c">
<Filter>Source Files\libtommath</Filter>
</ClCompile>
<ClCompile Include="src\libtommath\bn_mp_shrink.c">
<Filter>Source Files\libtommath</Filter>
</ClCompile>
<ClCompile Include="src\libtommath\bn_mp_signed_bin_size.c">
<Filter>Source Files\libtommath</Filter>
</ClCompile>
<ClCompile Include="src\libtommath\bn_mp_sqr.c">
<Filter>Source Files\libtommath</Filter>
</ClCompile>
<ClCompile Include="src\libtommath\bn_mp_sqrmod.c">
<Filter>Source Files\libtommath</Filter>
</ClCompile>
<ClCompile Include="src\libtommath\bn_mp_sqrt.c">
<Filter>Source Files\libtommath</Filter>
</ClCompile>
<ClCompile Include="src\libtommath\bn_mp_sub.c">
<Filter>Source Files\libtommath</Filter>
</ClCompile>
<ClCompile Include="src\libtommath\bn_mp_sub_d.c">
<Filter>Source Files\libtommath</Filter>
</ClCompile>
<ClCompile Include="src\libtommath\bn_mp_submod.c">
<Filter>Source Files\libtommath</Filter>
</ClCompile>
<ClCompile Include="src\libtommath\bn_mp_to_signed_bin.c">
<Filter>Source Files\libtommath</Filter>
</ClCompile>
<ClCompile Include="src\libtommath\bn_mp_to_signed_bin_n.c">
<Filter>Source Files\libtommath</Filter>
</ClCompile>
<ClCompile Include="src\libtommath\bn_mp_to_unsigned_bin.c">
<Filter>Source Files\libtommath</Filter>
</ClCompile>
<ClCompile Include="src\libtommath\bn_mp_to_unsigned_bin_n.c">
<Filter>Source Files\libtommath</Filter>
</ClCompile>
<ClCompile Include="src\libtommath\bn_mp_toom_mul.c">
<Filter>Source Files\libtommath</Filter>
</ClCompile>
<ClCompile Include="src\libtommath\bn_mp_toom_sqr.c">
<Filter>Source Files\libtommath</Filter>
</ClCompile>
<ClCompile Include="src\libtommath\bn_mp_toradix.c">
<Filter>Source Files\libtommath</Filter>
</ClCompile>
<ClCompile Include="src\libtommath\bn_mp_toradix_n.c">
<Filter>Source Files\libtommath</Filter>
</ClCompile>
<ClCompile Include="src\libtommath\bn_mp_unsigned_bin_size.c">
<Filter>Source Files\libtommath</Filter>
</ClCompile>
<ClCompile Include="src\libtommath\bn_mp_xor.c">
<Filter>Source Files\libtommath</Filter>
</ClCompile>
<ClCompile Include="src\libtommath\bn_mp_zero.c">
<Filter>Source Files\libtommath</Filter>
</ClCompile>
<ClCompile Include="src\libtommath\bn_prime_tab.c">
<Filter>Source Files\libtommath</Filter>
</ClCompile>
<ClCompile Include="src\libtommath\bn_reverse.c">
<Filter>Source Files\libtommath</Filter>
</ClCompile>
<ClCompile Include="src\libtommath\bn_s_mp_add.c">
<Filter>Source Files\libtommath</Filter>
</ClCompile>
<ClCompile Include="src\libtommath\bn_s_mp_exptmod.c">
<Filter>Source Files\libtommath</Filter>
</ClCompile>
<ClCompile Include="src\libtommath\bn_s_mp_mul_digs.c">
<Filter>Source Files\libtommath</Filter>
</ClCompile>
<ClCompile Include="src\libtommath\bn_s_mp_mul_high_digs.c">
<Filter>Source Files\libtommath</Filter>
</ClCompile>
<ClCompile Include="src\libtommath\bn_s_mp_sqr.c">
<Filter>Source Files\libtommath</Filter>
</ClCompile>
<ClCompile Include="src\libtommath\bn_s_mp_sub.c">
<Filter>Source Files\libtommath</Filter>
</ClCompile>
<ClCompile Include="src\libtommath\bncore.c">
<Filter>Source Files\libtommath</Filter>
</ClCompile>
<ClCompile Include="src\lzma\C\LzFind.c">
<Filter>Source Files\lzma</Filter>
</ClCompile>
<ClCompile Include="src\lzma\C\LzFindMt.c">
<Filter>Source Files\lzma</Filter>
</ClCompile>
<ClCompile Include="src\lzma\C\LzmaDec.c">
<Filter>Source Files\lzma</Filter>
</ClCompile>
<ClCompile Include="src\lzma\C\LzmaEnc.c">
<Filter>Source Files\lzma</Filter>
</ClCompile>
<ClCompile Include="src\lzma\C\Threads.c">
<Filter>Source Files\lzma</Filter>
</ClCompile>
<ClCompile Include="src\pklib\explode.c">
<Filter>Source Files\pklib</Filter>
</ClCompile>
<ClCompile Include="src\pklib\implode.c">
<Filter>Source Files\pklib</Filter>
</ClCompile>
<ClCompile Include="src\sparse\sparse.cpp">
<Filter>Source Files\sparse</Filter>
</ClCompile>
<ClCompile Include="src\zlib\adler32.c">
<Filter>Source Files\zlib</Filter>
</ClCompile>
<ClCompile Include="src\zlib\compress_zlib.c">
<Filter>Source Files\zlib</Filter>
</ClCompile>
<ClCompile Include="src\zlib\crc32.c">
<Filter>Source Files\zlib</Filter>
</ClCompile>
<ClCompile Include="src\zlib\deflate.c">
<Filter>Source Files\zlib</Filter>
</ClCompile>
<ClCompile Include="src\zlib\inffast.c">
<Filter>Source Files\zlib</Filter>
</ClCompile>
<ClCompile Include="src\zlib\inflate.c">
<Filter>Source Files\zlib</Filter>
</ClCompile>
<ClCompile Include="src\zlib\inftrees.c">
<Filter>Source Files\zlib</Filter>
</ClCompile>
<ClCompile Include="src\zlib\trees.c">
<Filter>Source Files\zlib</Filter>
</ClCompile>
<ClCompile Include="src\zlib\zutil.c">
<Filter>Source Files\zlib</Filter>
</ClCompile>
<ClCompile Include="src\jenkins\lookup3.c">
<Filter>Source Files\jenkins</Filter>
</ClCompile>
<ClCompile Include="src\DllMain.c">
<Filter>Source Files</Filter>
</ClCompile>
</ItemGroup>
<ItemGroup>
<ResourceCompile Include="src\DllMain.rc">
<Filter>Source Files</Filter>
</ResourceCompile>
</ItemGroup>
</Project>
+549
View File
@@ -0,0 +1,549 @@
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup Label="ProjectConfigurations">
<ProjectConfiguration Include="Debug|Win32">
<Configuration>Debug</Configuration>
<Platform>Win32</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Debug|x64">
<Configuration>Debug</Configuration>
<Platform>x64</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Release|Win32">
<Configuration>Release</Configuration>
<Platform>Win32</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Release|x64">
<Configuration>Release</Configuration>
<Platform>x64</Platform>
</ProjectConfiguration>
</ItemGroup>
<PropertyGroup Label="Globals">
<ProjectName>StormLib_test</ProjectName>
<ProjectGuid>{AA561A7B-26EA-49AF-90E8-C53C1FA2965D}</ProjectGuid>
<RootNamespace>StormLib_test</RootNamespace>
<Keyword>Win32Proj</Keyword>
<WindowsTargetPlatformVersion>10.0</WindowsTargetPlatformVersion>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<PlatformToolset>v142</PlatformToolset>
<CharacterSet>Unicode</CharacterSet>
<WholeProgramOptimization>true</WholeProgramOptimization>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<PlatformToolset>v142</PlatformToolset>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<PlatformToolset>v142</PlatformToolset>
<CharacterSet>Unicode</CharacterSet>
<WholeProgramOptimization>true</WholeProgramOptimization>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<PlatformToolset>v142</PlatformToolset>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
<ImportGroup Label="ExtensionSettings">
<Import Project="$(VCTargetsPath)\BuildCustomizations\masm.props" />
</ImportGroup>
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<PropertyGroup Label="UserMacros" />
<PropertyGroup>
<_ProjectFileVersion>14.0.25431.1</_ProjectFileVersion>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<OutDir>./bin/$(ProjectName)/$(Platform)/$(Configuration)\</OutDir>
<IntDir>./bin/$(ProjectName)/$(Platform)/$(Configuration)\</IntDir>
<LinkIncremental>true</LinkIncremental>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
<OutDir>./bin/$(ProjectName)/$(Platform)/$(Configuration)\</OutDir>
<IntDir>./bin/$(ProjectName)/$(Platform)/$(Configuration)\</IntDir>
<LinkIncremental>true</LinkIncremental>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<OutDir>./bin/$(ProjectName)/$(Platform)/$(Configuration)\</OutDir>
<IntDir>./bin/$(ProjectName)/$(Platform)/$(Configuration)\</IntDir>
<LinkIncremental>false</LinkIncremental>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
<OutDir>./bin/$(ProjectName)/$(Platform)/$(Configuration)\</OutDir>
<IntDir>./bin/$(ProjectName)/$(Platform)/$(Configuration)\</IntDir>
<LinkIncremental>false</LinkIncremental>
</PropertyGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<ClCompile>
<Optimization>Disabled</Optimization>
<PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;__STORMLIB_TEST__;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
<RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
<PrecompiledHeader />
<WarningLevel>Level1</WarningLevel>
<DebugInformationFormat>EditAndContinue</DebugInformationFormat>
<CompileAs>Default</CompileAs>
</ClCompile>
<Link>
<GenerateDebugInformation>true</GenerateDebugInformation>
<SubSystem>Console</SubSystem>
<RandomizedBaseAddress>false</RandomizedBaseAddress>
<DataExecutionPrevention />
<TargetMachine>MachineX86</TargetMachine>
<ImageHasSafeExceptionHandlers>false</ImageHasSafeExceptionHandlers>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
<Midl>
<TargetEnvironment>X64</TargetEnvironment>
</Midl>
<ClCompile>
<Optimization>Disabled</Optimization>
<PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;__STORMLIB_TEST__;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
<RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
<PrecompiledHeader />
<WarningLevel>Level1</WarningLevel>
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
<CompileAs>Default</CompileAs>
</ClCompile>
<Link>
<GenerateDebugInformation>true</GenerateDebugInformation>
<SubSystem>Console</SubSystem>
<RandomizedBaseAddress>false</RandomizedBaseAddress>
<DataExecutionPrevention />
<TargetMachine>MachineX64</TargetMachine>
<ImageHasSafeExceptionHandlers>false</ImageHasSafeExceptionHandlers>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<ClCompile>
<PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;__STORMLIB_TEST__;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
<PrecompiledHeader />
<WarningLevel>Level1</WarningLevel>
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
</ClCompile>
<Link>
<GenerateDebugInformation>true</GenerateDebugInformation>
<SubSystem>Console</SubSystem>
<OptimizeReferences>true</OptimizeReferences>
<EnableCOMDATFolding>true</EnableCOMDATFolding>
<RandomizedBaseAddress>false</RandomizedBaseAddress>
<DataExecutionPrevention />
<TargetMachine>MachineX86</TargetMachine>
<ImageHasSafeExceptionHandlers>false</ImageHasSafeExceptionHandlers>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
<Midl>
<TargetEnvironment>X64</TargetEnvironment>
</Midl>
<ClCompile>
<PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;__STORMLIB_TEST__;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
<PrecompiledHeader />
<WarningLevel>Level1</WarningLevel>
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
</ClCompile>
<Link>
<GenerateDebugInformation>true</GenerateDebugInformation>
<SubSystem>Console</SubSystem>
<OptimizeReferences>true</OptimizeReferences>
<EnableCOMDATFolding>true</EnableCOMDATFolding>
<RandomizedBaseAddress>false</RandomizedBaseAddress>
<DataExecutionPrevention />
<TargetMachine>MachineX64</TargetMachine>
<ImageHasSafeExceptionHandlers>false</ImageHasSafeExceptionHandlers>
</Link>
</ItemDefinitionGroup>
<ItemGroup>
<Text Include="doc\History.txt" />
<Text Include="doc\The MoPaQ File Format 0.9.txt" />
<Text Include="doc\The MoPaQ File Format 1.0.txt" />
</ItemGroup>
<ItemGroup>
<ClInclude Include="src\adpcm\adpcm.h" />
<ClInclude Include="src\FileStream.h" />
<ClInclude Include="src\huffman\huff.h" />
<ClInclude Include="src\jenkins\lookup.h" />
<ClInclude Include="src\pklib\pklib.h" />
<ClInclude Include="src\sparse\sparse.h" />
<ClInclude Include="src\StormCommon.h" />
<ClInclude Include="src\StormLib.h" />
<ClInclude Include="src\StormPort.h" />
</ItemGroup>
<ItemGroup>
<ClCompile Include="src\adpcm\adpcm.cpp">
<WarningLevel Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Level4</WarningLevel>
<WarningLevel Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Level4</WarningLevel>
</ClCompile>
<ClCompile Include="src\bzip2\blocksort.c" />
<ClCompile Include="src\bzip2\bzlib.c" />
<ClCompile Include="src\bzip2\compress.c" />
<ClCompile Include="src\bzip2\crctable.c" />
<ClCompile Include="src\bzip2\decompress.c" />
<ClCompile Include="src\bzip2\huffman.c" />
<ClCompile Include="src\bzip2\randtable.c" />
<ClCompile Include="src\FileStream.cpp">
<WarningLevel Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Level4</WarningLevel>
<WarningLevel Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Level4</WarningLevel>
<WarningLevel Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Level4</WarningLevel>
<WarningLevel Condition="'$(Configuration)|$(Platform)'=='Release|x64'">Level4</WarningLevel>
</ClCompile>
<ClCompile Include="src\huffman\huff.cpp">
<WarningLevel Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Level4</WarningLevel>
<WarningLevel Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Level4</WarningLevel>
</ClCompile>
<ClCompile Include="src\jenkins\lookup3.c">
<WarningLevel Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Level1</WarningLevel>
<WarningLevel Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Level1</WarningLevel>
</ClCompile>
<ClCompile Include="src\libtomcrypt\src\hashes\hash_memory.c" />
<ClCompile Include="src\libtomcrypt\src\hashes\md5.c" />
<ClCompile Include="src\libtomcrypt\src\hashes\sha1.c" />
<ClCompile Include="src\libtomcrypt\src\math\ltm_desc.c" />
<ClCompile Include="src\libtomcrypt\src\math\multi.c" />
<ClCompile Include="src\libtomcrypt\src\math\rand_prime.c" />
<ClCompile Include="src\libtomcrypt\src\misc\base64_decode.c" />
<ClCompile Include="src\libtomcrypt\src\misc\crypt_argchk.c" />
<ClCompile Include="src\libtomcrypt\src\misc\crypt_find_hash.c" />
<ClCompile Include="src\libtomcrypt\src\misc\crypt_find_prng.c" />
<ClCompile Include="src\libtomcrypt\src\misc\crypt_hash_descriptor.c" />
<ClCompile Include="src\libtomcrypt\src\misc\crypt_hash_is_valid.c" />
<ClCompile Include="src\libtomcrypt\src\misc\crypt_libc.c" />
<ClCompile Include="src\libtomcrypt\src\misc\crypt_ltc_mp_descriptor.c" />
<ClCompile Include="src\libtomcrypt\src\misc\crypt_prng_descriptor.c" />
<ClCompile Include="src\libtomcrypt\src\misc\crypt_prng_is_valid.c" />
<ClCompile Include="src\libtomcrypt\src\misc\crypt_register_hash.c" />
<ClCompile Include="src\libtomcrypt\src\misc\crypt_register_prng.c" />
<ClCompile Include="src\libtomcrypt\src\misc\zeromem.c" />
<ClCompile Include="src\libtomcrypt\src\pk\asn1\der_decode_bit_string.c" />
<ClCompile Include="src\libtomcrypt\src\pk\asn1\der_decode_boolean.c" />
<ClCompile Include="src\libtomcrypt\src\pk\asn1\der_decode_choice.c" />
<ClCompile Include="src\libtomcrypt\src\pk\asn1\der_decode_ia5_string.c" />
<ClCompile Include="src\libtomcrypt\src\pk\asn1\der_decode_integer.c" />
<ClCompile Include="src\libtomcrypt\src\pk\asn1\der_decode_object_identifier.c" />
<ClCompile Include="src\libtomcrypt\src\pk\asn1\der_decode_octet_string.c" />
<ClCompile Include="src\libtomcrypt\src\pk\asn1\der_decode_printable_string.c" />
<ClCompile Include="src\libtomcrypt\src\pk\asn1\der_decode_sequence_ex.c" />
<ClCompile Include="src\libtomcrypt\src\pk\asn1\der_decode_sequence_flexi.c" />
<ClCompile Include="src\libtomcrypt\src\pk\asn1\der_decode_sequence_multi.c" />
<ClCompile Include="src\libtomcrypt\src\pk\asn1\der_decode_short_integer.c" />
<ClCompile Include="src\libtomcrypt\src\pk\asn1\der_decode_utctime.c" />
<ClCompile Include="src\libtomcrypt\src\pk\asn1\der_decode_utf8_string.c" />
<ClCompile Include="src\libtomcrypt\src\pk\asn1\der_encode_bit_string.c" />
<ClCompile Include="src\libtomcrypt\src\pk\asn1\der_encode_boolean.c" />
<ClCompile Include="src\libtomcrypt\src\pk\asn1\der_encode_ia5_string.c" />
<ClCompile Include="src\libtomcrypt\src\pk\asn1\der_encode_integer.c" />
<ClCompile Include="src\libtomcrypt\src\pk\asn1\der_encode_object_identifier.c" />
<ClCompile Include="src\libtomcrypt\src\pk\asn1\der_encode_octet_string.c" />
<ClCompile Include="src\libtomcrypt\src\pk\asn1\der_encode_printable_string.c" />
<ClCompile Include="src\libtomcrypt\src\pk\asn1\der_encode_sequence_ex.c" />
<ClCompile Include="src\libtomcrypt\src\pk\asn1\der_encode_sequence_multi.c" />
<ClCompile Include="src\libtomcrypt\src\pk\asn1\der_encode_set.c" />
<ClCompile Include="src\libtomcrypt\src\pk\asn1\der_encode_setof.c" />
<ClCompile Include="src\libtomcrypt\src\pk\asn1\der_encode_short_integer.c" />
<ClCompile Include="src\libtomcrypt\src\pk\asn1\der_encode_utctime.c" />
<ClCompile Include="src\libtomcrypt\src\pk\asn1\der_encode_utf8_string.c" />
<ClCompile Include="src\libtomcrypt\src\pk\asn1\der_length_bit_string.c" />
<ClCompile Include="src\libtomcrypt\src\pk\asn1\der_length_boolean.c" />
<ClCompile Include="src\libtomcrypt\src\pk\asn1\der_length_ia5_string.c" />
<ClCompile Include="src\libtomcrypt\src\pk\asn1\der_length_integer.c" />
<ClCompile Include="src\libtomcrypt\src\pk\asn1\der_length_object_identifier.c" />
<ClCompile Include="src\libtomcrypt\src\pk\asn1\der_length_octet_string.c" />
<ClCompile Include="src\libtomcrypt\src\pk\asn1\der_length_printable_string.c" />
<ClCompile Include="src\libtomcrypt\src\pk\asn1\der_length_sequence.c" />
<ClCompile Include="src\libtomcrypt\src\pk\asn1\der_length_short_integer.c" />
<ClCompile Include="src\libtomcrypt\src\pk\asn1\der_length_utctime.c" />
<ClCompile Include="src\libtomcrypt\src\pk\asn1\der_length_utf8_string.c" />
<ClCompile Include="src\libtomcrypt\src\pk\asn1\der_sequence_free.c" />
<ClCompile Include="src\libtomcrypt\src\pk\ecc\ltc_ecc_map.c" />
<ClCompile Include="src\libtomcrypt\src\pk\ecc\ltc_ecc_mul2add.c" />
<ClCompile Include="src\libtomcrypt\src\pk\ecc\ltc_ecc_mulmod.c" />
<ClCompile Include="src\libtomcrypt\src\pk\ecc\ltc_ecc_points.c" />
<ClCompile Include="src\libtomcrypt\src\pk\ecc\ltc_ecc_projective_add_point.c" />
<ClCompile Include="src\libtomcrypt\src\pk\ecc\ltc_ecc_projective_dbl_point.c" />
<ClCompile Include="src\libtomcrypt\src\pk\pkcs1\pkcs_1_mgf1.c" />
<ClCompile Include="src\libtomcrypt\src\pk\pkcs1\pkcs_1_oaep_decode.c" />
<ClCompile Include="src\libtomcrypt\src\pk\pkcs1\pkcs_1_pss_decode.c" />
<ClCompile Include="src\libtomcrypt\src\pk\pkcs1\pkcs_1_pss_encode.c" />
<ClCompile Include="src\libtomcrypt\src\pk\pkcs1\pkcs_1_v1_5_decode.c" />
<ClCompile Include="src\libtomcrypt\src\pk\pkcs1\pkcs_1_v1_5_encode.c" />
<ClCompile Include="src\libtomcrypt\src\pk\rsa\rsa_exptmod.c" />
<ClCompile Include="src\libtomcrypt\src\pk\rsa\rsa_free.c" />
<ClCompile Include="src\libtomcrypt\src\pk\rsa\rsa_import.c" />
<ClCompile Include="src\libtomcrypt\src\pk\rsa\rsa_make_key.c" />
<ClCompile Include="src\libtomcrypt\src\pk\rsa\rsa_sign_hash.c" />
<ClCompile Include="src\libtomcrypt\src\pk\rsa\rsa_verify_hash.c" />
<ClCompile Include="src\libtomcrypt\src\pk\rsa\rsa_verify_simple.c" />
<ClCompile Include="src\libtommath\bncore.c" />
<ClCompile Include="src\libtommath\bn_fast_mp_invmod.c" />
<ClCompile Include="src\libtommath\bn_fast_mp_montgomery_reduce.c" />
<ClCompile Include="src\libtommath\bn_fast_s_mp_mul_digs.c" />
<ClCompile Include="src\libtommath\bn_fast_s_mp_mul_high_digs.c" />
<ClCompile Include="src\libtommath\bn_fast_s_mp_sqr.c" />
<ClCompile Include="src\libtommath\bn_mp_2expt.c" />
<ClCompile Include="src\libtommath\bn_mp_abs.c" />
<ClCompile Include="src\libtommath\bn_mp_add.c" />
<ClCompile Include="src\libtommath\bn_mp_addmod.c" />
<ClCompile Include="src\libtommath\bn_mp_add_d.c" />
<ClCompile Include="src\libtommath\bn_mp_and.c" />
<ClCompile Include="src\libtommath\bn_mp_clamp.c" />
<ClCompile Include="src\libtommath\bn_mp_clear.c" />
<ClCompile Include="src\libtommath\bn_mp_clear_multi.c" />
<ClCompile Include="src\libtommath\bn_mp_cmp.c" />
<ClCompile Include="src\libtommath\bn_mp_cmp_d.c" />
<ClCompile Include="src\libtommath\bn_mp_cmp_mag.c" />
<ClCompile Include="src\libtommath\bn_mp_cnt_lsb.c" />
<ClCompile Include="src\libtommath\bn_mp_copy.c" />
<ClCompile Include="src\libtommath\bn_mp_count_bits.c" />
<ClCompile Include="src\libtommath\bn_mp_div.c" />
<ClCompile Include="src\libtommath\bn_mp_div_2.c" />
<ClCompile Include="src\libtommath\bn_mp_div_2d.c" />
<ClCompile Include="src\libtommath\bn_mp_div_3.c" />
<ClCompile Include="src\libtommath\bn_mp_div_d.c" />
<ClCompile Include="src\libtommath\bn_mp_dr_is_modulus.c" />
<ClCompile Include="src\libtommath\bn_mp_dr_reduce.c" />
<ClCompile Include="src\libtommath\bn_mp_dr_setup.c" />
<ClCompile Include="src\libtommath\bn_mp_exch.c" />
<ClCompile Include="src\libtommath\bn_mp_exptmod.c" />
<ClCompile Include="src\libtommath\bn_mp_exptmod_fast.c" />
<ClCompile Include="src\libtommath\bn_mp_expt_d.c" />
<ClCompile Include="src\libtommath\bn_mp_exteuclid.c" />
<ClCompile Include="src\libtommath\bn_mp_fread.c" />
<ClCompile Include="src\libtommath\bn_mp_fwrite.c" />
<ClCompile Include="src\libtommath\bn_mp_gcd.c" />
<ClCompile Include="src\libtommath\bn_mp_get_int.c" />
<ClCompile Include="src\libtommath\bn_mp_grow.c" />
<ClCompile Include="src\libtommath\bn_mp_init.c" />
<ClCompile Include="src\libtommath\bn_mp_init_copy.c" />
<ClCompile Include="src\libtommath\bn_mp_init_multi.c" />
<ClCompile Include="src\libtommath\bn_mp_init_set.c" />
<ClCompile Include="src\libtommath\bn_mp_init_set_int.c" />
<ClCompile Include="src\libtommath\bn_mp_init_size.c" />
<ClCompile Include="src\libtommath\bn_mp_invmod.c" />
<ClCompile Include="src\libtommath\bn_mp_invmod_slow.c" />
<ClCompile Include="src\libtommath\bn_mp_is_square.c" />
<ClCompile Include="src\libtommath\bn_mp_jacobi.c" />
<ClCompile Include="src\libtommath\bn_mp_karatsuba_mul.c" />
<ClCompile Include="src\libtommath\bn_mp_karatsuba_sqr.c" />
<ClCompile Include="src\libtommath\bn_mp_lcm.c" />
<ClCompile Include="src\libtommath\bn_mp_lshd.c" />
<ClCompile Include="src\libtommath\bn_mp_mod.c" />
<ClCompile Include="src\libtommath\bn_mp_mod_2d.c" />
<ClCompile Include="src\libtommath\bn_mp_mod_d.c" />
<ClCompile Include="src\libtommath\bn_mp_montgomery_calc_normalization.c" />
<ClCompile Include="src\libtommath\bn_mp_montgomery_reduce.c" />
<ClCompile Include="src\libtommath\bn_mp_montgomery_setup.c" />
<ClCompile Include="src\libtommath\bn_mp_mul.c" />
<ClCompile Include="src\libtommath\bn_mp_mulmod.c" />
<ClCompile Include="src\libtommath\bn_mp_mul_2.c" />
<ClCompile Include="src\libtommath\bn_mp_mul_2d.c" />
<ClCompile Include="src\libtommath\bn_mp_mul_d.c" />
<ClCompile Include="src\libtommath\bn_mp_neg.c" />
<ClCompile Include="src\libtommath\bn_mp_n_root.c" />
<ClCompile Include="src\libtommath\bn_mp_or.c" />
<ClCompile Include="src\libtommath\bn_mp_prime_fermat.c" />
<ClCompile Include="src\libtommath\bn_mp_prime_is_divisible.c" />
<ClCompile Include="src\libtommath\bn_mp_prime_is_prime.c" />
<ClCompile Include="src\libtommath\bn_mp_prime_miller_rabin.c" />
<ClCompile Include="src\libtommath\bn_mp_prime_next_prime.c" />
<ClCompile Include="src\libtommath\bn_mp_prime_rabin_miller_trials.c" />
<ClCompile Include="src\libtommath\bn_mp_prime_random_ex.c" />
<ClCompile Include="src\libtommath\bn_mp_radix_size.c" />
<ClCompile Include="src\libtommath\bn_mp_radix_smap.c" />
<ClCompile Include="src\libtommath\bn_mp_rand.c" />
<ClCompile Include="src\libtommath\bn_mp_read_radix.c" />
<ClCompile Include="src\libtommath\bn_mp_read_signed_bin.c" />
<ClCompile Include="src\libtommath\bn_mp_read_unsigned_bin.c" />
<ClCompile Include="src\libtommath\bn_mp_reduce.c" />
<ClCompile Include="src\libtommath\bn_mp_reduce_2k.c" />
<ClCompile Include="src\libtommath\bn_mp_reduce_2k_l.c" />
<ClCompile Include="src\libtommath\bn_mp_reduce_2k_setup.c" />
<ClCompile Include="src\libtommath\bn_mp_reduce_2k_setup_l.c" />
<ClCompile Include="src\libtommath\bn_mp_reduce_is_2k.c" />
<ClCompile Include="src\libtommath\bn_mp_reduce_is_2k_l.c" />
<ClCompile Include="src\libtommath\bn_mp_reduce_setup.c" />
<ClCompile Include="src\libtommath\bn_mp_rshd.c" />
<ClCompile Include="src\libtommath\bn_mp_set.c" />
<ClCompile Include="src\libtommath\bn_mp_set_int.c" />
<ClCompile Include="src\libtommath\bn_mp_shrink.c" />
<ClCompile Include="src\libtommath\bn_mp_signed_bin_size.c" />
<ClCompile Include="src\libtommath\bn_mp_sqr.c" />
<ClCompile Include="src\libtommath\bn_mp_sqrmod.c" />
<ClCompile Include="src\libtommath\bn_mp_sqrt.c" />
<ClCompile Include="src\libtommath\bn_mp_sub.c" />
<ClCompile Include="src\libtommath\bn_mp_submod.c" />
<ClCompile Include="src\libtommath\bn_mp_sub_d.c" />
<ClCompile Include="src\libtommath\bn_mp_toom_mul.c" />
<ClCompile Include="src\libtommath\bn_mp_toom_sqr.c" />
<ClCompile Include="src\libtommath\bn_mp_toradix.c" />
<ClCompile Include="src\libtommath\bn_mp_toradix_n.c" />
<ClCompile Include="src\libtommath\bn_mp_to_signed_bin.c" />
<ClCompile Include="src\libtommath\bn_mp_to_signed_bin_n.c" />
<ClCompile Include="src\libtommath\bn_mp_to_unsigned_bin.c" />
<ClCompile Include="src\libtommath\bn_mp_to_unsigned_bin_n.c" />
<ClCompile Include="src\libtommath\bn_mp_unsigned_bin_size.c" />
<ClCompile Include="src\libtommath\bn_mp_xor.c" />
<ClCompile Include="src\libtommath\bn_mp_zero.c" />
<ClCompile Include="src\libtommath\bn_prime_tab.c" />
<ClCompile Include="src\libtommath\bn_reverse.c" />
<ClCompile Include="src\libtommath\bn_s_mp_add.c" />
<ClCompile Include="src\libtommath\bn_s_mp_exptmod.c" />
<ClCompile Include="src\libtommath\bn_s_mp_mul_digs.c" />
<ClCompile Include="src\libtommath\bn_s_mp_mul_high_digs.c" />
<ClCompile Include="src\libtommath\bn_s_mp_sqr.c" />
<ClCompile Include="src\libtommath\bn_s_mp_sub.c" />
<ClCompile Include="src\lzma\C\LzFind.c" />
<ClCompile Include="src\lzma\C\LzFindMt.c" />
<ClCompile Include="src\lzma\C\LzmaDec.c" />
<ClCompile Include="src\lzma\C\LzmaEnc.c" />
<ClCompile Include="src\lzma\C\Threads.c" />
<ClCompile Include="src\pklib\explode.c" />
<ClCompile Include="src\pklib\implode.c" />
<ClCompile Include="src\SBaseCommon.cpp">
<WarningLevel Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Level4</WarningLevel>
<WarningLevel Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Level4</WarningLevel>
<WarningLevel Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Level4</WarningLevel>
<WarningLevel Condition="'$(Configuration)|$(Platform)'=='Release|x64'">Level4</WarningLevel>
</ClCompile>
<ClCompile Include="src\SBaseDumpData.cpp">
<WarningLevel Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Level4</WarningLevel>
<WarningLevel Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Level4</WarningLevel>
<WarningLevel Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Level4</WarningLevel>
<WarningLevel Condition="'$(Configuration)|$(Platform)'=='Release|x64'">Level4</WarningLevel>
</ClCompile>
<ClCompile Include="src\SBaseFileTable.cpp">
<WarningLevel Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Level4</WarningLevel>
<WarningLevel Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Level4</WarningLevel>
<WarningLevel Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Level4</WarningLevel>
<WarningLevel Condition="'$(Configuration)|$(Platform)'=='Release|x64'">Level4</WarningLevel>
</ClCompile>
<ClCompile Include="src\SBaseSubTypes.cpp">
<WarningLevel Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Level4</WarningLevel>
<WarningLevel Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Level4</WarningLevel>
<WarningLevel Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Level4</WarningLevel>
<WarningLevel Condition="'$(Configuration)|$(Platform)'=='Release|x64'">Level4</WarningLevel>
</ClCompile>
<ClCompile Include="src\SCompression.cpp">
<WarningLevel Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Level4</WarningLevel>
<WarningLevel Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Level4</WarningLevel>
<WarningLevel Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Level4</WarningLevel>
<WarningLevel Condition="'$(Configuration)|$(Platform)'=='Release|x64'">Level4</WarningLevel>
</ClCompile>
<ClCompile Include="src\SFileAddFile.cpp">
<WarningLevel Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Level4</WarningLevel>
<WarningLevel Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Level4</WarningLevel>
<WarningLevel Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Level4</WarningLevel>
<WarningLevel Condition="'$(Configuration)|$(Platform)'=='Release|x64'">Level4</WarningLevel>
</ClCompile>
<ClCompile Include="src\SFileAttributes.cpp">
<WarningLevel Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Level4</WarningLevel>
<WarningLevel Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Level4</WarningLevel>
<WarningLevel Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Level4</WarningLevel>
<WarningLevel Condition="'$(Configuration)|$(Platform)'=='Release|x64'">Level4</WarningLevel>
</ClCompile>
<ClCompile Include="src\SFileCompactArchive.cpp">
<WarningLevel Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Level4</WarningLevel>
<WarningLevel Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Level4</WarningLevel>
<WarningLevel Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Level4</WarningLevel>
<WarningLevel Condition="'$(Configuration)|$(Platform)'=='Release|x64'">Level4</WarningLevel>
</ClCompile>
<ClCompile Include="src\SFileCreateArchive.cpp">
<WarningLevel Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Level4</WarningLevel>
<WarningLevel Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Level4</WarningLevel>
<WarningLevel Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Level4</WarningLevel>
<WarningLevel Condition="'$(Configuration)|$(Platform)'=='Release|x64'">Level4</WarningLevel>
</ClCompile>
<ClCompile Include="src\SFileExtractFile.cpp">
<WarningLevel Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Level4</WarningLevel>
<WarningLevel Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Level4</WarningLevel>
<WarningLevel Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Level4</WarningLevel>
<WarningLevel Condition="'$(Configuration)|$(Platform)'=='Release|x64'">Level4</WarningLevel>
</ClCompile>
<ClCompile Include="src\SFileFindFile.cpp">
<WarningLevel Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Level4</WarningLevel>
<WarningLevel Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Level4</WarningLevel>
<WarningLevel Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Level4</WarningLevel>
<WarningLevel Condition="'$(Configuration)|$(Platform)'=='Release|x64'">Level4</WarningLevel>
</ClCompile>
<ClCompile Include="src\SFileGetFileInfo.cpp">
<WarningLevel Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Level4</WarningLevel>
<WarningLevel Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Level4</WarningLevel>
<WarningLevel Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Level4</WarningLevel>
<WarningLevel Condition="'$(Configuration)|$(Platform)'=='Release|x64'">Level4</WarningLevel>
</ClCompile>
<ClCompile Include="src\SFileListFile.cpp">
<WarningLevel Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Level4</WarningLevel>
<WarningLevel Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Level4</WarningLevel>
<WarningLevel Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Level4</WarningLevel>
<WarningLevel Condition="'$(Configuration)|$(Platform)'=='Release|x64'">Level4</WarningLevel>
</ClCompile>
<ClCompile Include="src\SFileOpenArchive.cpp">
<WarningLevel Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Level4</WarningLevel>
<WarningLevel Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Level4</WarningLevel>
<WarningLevel Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Level4</WarningLevel>
<WarningLevel Condition="'$(Configuration)|$(Platform)'=='Release|x64'">Level4</WarningLevel>
</ClCompile>
<ClCompile Include="src\SFileOpenFileEx.cpp">
<WarningLevel Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Level4</WarningLevel>
<WarningLevel Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Level4</WarningLevel>
<WarningLevel Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Level4</WarningLevel>
<WarningLevel Condition="'$(Configuration)|$(Platform)'=='Release|x64'">Level4</WarningLevel>
</ClCompile>
<ClCompile Include="src\SFilePatchArchives.cpp">
<WarningLevel Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Level4</WarningLevel>
<WarningLevel Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Level4</WarningLevel>
<WarningLevel Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Level4</WarningLevel>
<WarningLevel Condition="'$(Configuration)|$(Platform)'=='Release|x64'">Level4</WarningLevel>
</ClCompile>
<ClCompile Include="src\SFileReadFile.cpp">
<WarningLevel Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Level4</WarningLevel>
<WarningLevel Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Level4</WarningLevel>
<WarningLevel Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Level4</WarningLevel>
<WarningLevel Condition="'$(Configuration)|$(Platform)'=='Release|x64'">Level4</WarningLevel>
</ClCompile>
<ClCompile Include="src\SFileVerify.cpp">
<WarningLevel Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Level4</WarningLevel>
<WarningLevel Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Level4</WarningLevel>
<WarningLevel Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Level4</WarningLevel>
<WarningLevel Condition="'$(Configuration)|$(Platform)'=='Release|x64'">Level4</WarningLevel>
</ClCompile>
<ClCompile Include="src\sparse\sparse.cpp" />
<ClCompile Include="src\zlib\adler32.c" />
<ClCompile Include="src\zlib\compress_zlib.c" />
<ClCompile Include="src\zlib\crc32.c" />
<ClCompile Include="src\zlib\deflate.c" />
<ClCompile Include="src\zlib\inffast.c" />
<ClCompile Include="src\zlib\inflate.c" />
<ClCompile Include="src\zlib\inftrees.c" />
<ClCompile Include="src\zlib\trees.c" />
<ClCompile Include="src\zlib\zutil.c" />
<ClCompile Include="test\StormTest.cpp">
<WarningLevel Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Level4</WarningLevel>
<WarningLevel Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Level4</WarningLevel>
<WarningLevel Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Level4</WarningLevel>
<WarningLevel Condition="'$(Configuration)|$(Platform)'=='Release|x64'">Level4</WarningLevel>
</ClCompile>
</ItemGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
<ImportGroup Label="ExtensionTargets">
<Import Project="$(VCTargetsPath)\BuildCustomizations\masm.targets" />
</ImportGroup>
</Project>
+839
View File
@@ -0,0 +1,839 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup>
<Filter Include="Doc Files">
<UniqueIdentifier>{1dbbb48c-9db9-4fdb-a903-223ed233cc21}</UniqueIdentifier>
</Filter>
<Filter Include="Header Files">
<UniqueIdentifier>{ab878eef-1074-4594-bac5-272c05774bd8}</UniqueIdentifier>
</Filter>
<Filter Include="Source Files">
<UniqueIdentifier>{640f063a-5028-4ba1-9007-96d98a634561}</UniqueIdentifier>
</Filter>
<Filter Include="Source Files\adpcm">
<UniqueIdentifier>{6e8cfdab-fca3-4737-8905-6154bc657e15}</UniqueIdentifier>
</Filter>
<Filter Include="Source Files\bzip2">
<UniqueIdentifier>{a810fdb6-0d21-4279-8e39-b2de644170c0}</UniqueIdentifier>
</Filter>
<Filter Include="Source Files\huffman">
<UniqueIdentifier>{7861b4fb-1471-4573-92ea-08c06dc14b93}</UniqueIdentifier>
</Filter>
<Filter Include="Source Files\libtomcrypt">
<UniqueIdentifier>{8ba6c5c7-3ad0-44e6-8829-5020fce13d49}</UniqueIdentifier>
</Filter>
<Filter Include="Source Files\libtomcrypt\hashes">
<UniqueIdentifier>{92cb0c1d-86f0-4735-9e4e-b07df664c359}</UniqueIdentifier>
</Filter>
<Filter Include="Source Files\libtomcrypt\math">
<UniqueIdentifier>{f7fb3d55-94af-4a6e-be7b-76cb909e7325}</UniqueIdentifier>
</Filter>
<Filter Include="Source Files\libtomcrypt\misc">
<UniqueIdentifier>{337159fe-94a7-45a8-a91b-fa8b9d06b2ae}</UniqueIdentifier>
</Filter>
<Filter Include="Source Files\libtomcrypt\pk">
<UniqueIdentifier>{359bb3d3-71d5-47e7-967a-1fada7882e4d}</UniqueIdentifier>
</Filter>
<Filter Include="Source Files\libtomcrypt\pk\asn1">
<UniqueIdentifier>{775dbb7e-ef06-4660-9d84-50ff2557ef54}</UniqueIdentifier>
</Filter>
<Filter Include="Source Files\libtomcrypt\pk\ecc">
<UniqueIdentifier>{2e5d39cc-482c-4775-8830-79f8314e72e4}</UniqueIdentifier>
</Filter>
<Filter Include="Source Files\libtomcrypt\pk\pkcs1">
<UniqueIdentifier>{1e0ef267-228e-4c59-8d88-e3b33aeaff49}</UniqueIdentifier>
</Filter>
<Filter Include="Source Files\libtomcrypt\pk\rsa">
<UniqueIdentifier>{98330deb-0b92-4f02-8016-8a33dc5f5d29}</UniqueIdentifier>
</Filter>
<Filter Include="Source Files\libtommath">
<UniqueIdentifier>{fa78c716-784a-43a0-a548-db413431973b}</UniqueIdentifier>
</Filter>
<Filter Include="Source Files\lzma">
<UniqueIdentifier>{5308566b-d3fd-4561-a7fb-982a63662793}</UniqueIdentifier>
</Filter>
<Filter Include="Source Files\pklib">
<UniqueIdentifier>{d5371a5f-1630-4e79-9e7e-1ef654a2ddec}</UniqueIdentifier>
</Filter>
<Filter Include="Source Files\sparse">
<UniqueIdentifier>{c2971fba-aff1-42ab-9f4f-71707edabf77}</UniqueIdentifier>
</Filter>
<Filter Include="Source Files\zlib">
<UniqueIdentifier>{4f4fe3d6-6f2b-4c83-9cf9-f1d108ecd854}</UniqueIdentifier>
</Filter>
<Filter Include="Source Files\jenkins">
<UniqueIdentifier>{5aaea51e-4b7c-4a35-b35c-96c2fc7750f1}</UniqueIdentifier>
</Filter>
</ItemGroup>
<ItemGroup>
<Text Include="doc\History.txt">
<Filter>Doc Files</Filter>
</Text>
<Text Include="doc\The MoPaQ File Format 0.9.txt">
<Filter>Doc Files</Filter>
</Text>
<Text Include="doc\The MoPaQ File Format 1.0.txt">
<Filter>Doc Files</Filter>
</Text>
</ItemGroup>
<ItemGroup>
<ClInclude Include="src\FileStream.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="src\StormCommon.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="src\StormLib.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="src\StormPort.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="src\adpcm\adpcm.h">
<Filter>Source Files\adpcm</Filter>
</ClInclude>
<ClInclude Include="src\huffman\huff.h">
<Filter>Source Files\huffman</Filter>
</ClInclude>
<ClInclude Include="src\pklib\pklib.h">
<Filter>Source Files\pklib</Filter>
</ClInclude>
<ClInclude Include="src\sparse\sparse.h">
<Filter>Source Files\sparse</Filter>
</ClInclude>
<ClInclude Include="src\jenkins\lookup.h">
<Filter>Source Files\jenkins</Filter>
</ClInclude>
</ItemGroup>
<ItemGroup>
<ClCompile Include="src\FileStream.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="src\SBaseCommon.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="src\SBaseDumpData.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="src\SBaseFileTable.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="src\SBaseSubTypes.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="src\SCompression.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="src\SFileAddFile.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="src\SFileAttributes.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="src\SFileCompactArchive.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="src\SFileCreateArchive.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="src\SFileExtractFile.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="src\SFileFindFile.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="src\SFileGetFileInfo.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="src\SFileListFile.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="src\SFileOpenArchive.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="src\SFileOpenFileEx.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="src\SFilePatchArchives.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="src\SFileReadFile.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="src\SFileVerify.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="test\StormTest.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="src\adpcm\adpcm.cpp">
<Filter>Source Files\adpcm</Filter>
</ClCompile>
<ClCompile Include="src\bzip2\blocksort.c">
<Filter>Source Files\bzip2</Filter>
</ClCompile>
<ClCompile Include="src\bzip2\bzlib.c">
<Filter>Source Files\bzip2</Filter>
</ClCompile>
<ClCompile Include="src\bzip2\compress.c">
<Filter>Source Files\bzip2</Filter>
</ClCompile>
<ClCompile Include="src\bzip2\crctable.c">
<Filter>Source Files\bzip2</Filter>
</ClCompile>
<ClCompile Include="src\bzip2\decompress.c">
<Filter>Source Files\bzip2</Filter>
</ClCompile>
<ClCompile Include="src\bzip2\huffman.c">
<Filter>Source Files\bzip2</Filter>
</ClCompile>
<ClCompile Include="src\bzip2\randtable.c">
<Filter>Source Files\bzip2</Filter>
</ClCompile>
<ClCompile Include="src\huffman\huff.cpp">
<Filter>Source Files\huffman</Filter>
</ClCompile>
<ClCompile Include="src\libtomcrypt\src\hashes\hash_memory.c">
<Filter>Source Files\libtomcrypt\hashes</Filter>
</ClCompile>
<ClCompile Include="src\libtomcrypt\src\hashes\md5.c">
<Filter>Source Files\libtomcrypt\hashes</Filter>
</ClCompile>
<ClCompile Include="src\libtomcrypt\src\hashes\sha1.c">
<Filter>Source Files\libtomcrypt\hashes</Filter>
</ClCompile>
<ClCompile Include="src\libtomcrypt\src\math\ltm_desc.c">
<Filter>Source Files\libtomcrypt\math</Filter>
</ClCompile>
<ClCompile Include="src\libtomcrypt\src\math\multi.c">
<Filter>Source Files\libtomcrypt\math</Filter>
</ClCompile>
<ClCompile Include="src\libtomcrypt\src\math\rand_prime.c">
<Filter>Source Files\libtomcrypt\math</Filter>
</ClCompile>
<ClCompile Include="src\libtomcrypt\src\misc\base64_decode.c">
<Filter>Source Files\libtomcrypt\misc</Filter>
</ClCompile>
<ClCompile Include="src\libtomcrypt\src\misc\crypt_argchk.c">
<Filter>Source Files\libtomcrypt\misc</Filter>
</ClCompile>
<ClCompile Include="src\libtomcrypt\src\misc\crypt_find_hash.c">
<Filter>Source Files\libtomcrypt\misc</Filter>
</ClCompile>
<ClCompile Include="src\libtomcrypt\src\misc\crypt_find_prng.c">
<Filter>Source Files\libtomcrypt\misc</Filter>
</ClCompile>
<ClCompile Include="src\libtomcrypt\src\misc\crypt_hash_descriptor.c">
<Filter>Source Files\libtomcrypt\misc</Filter>
</ClCompile>
<ClCompile Include="src\libtomcrypt\src\misc\crypt_hash_is_valid.c">
<Filter>Source Files\libtomcrypt\misc</Filter>
</ClCompile>
<ClCompile Include="src\libtomcrypt\src\misc\crypt_libc.c">
<Filter>Source Files\libtomcrypt\misc</Filter>
</ClCompile>
<ClCompile Include="src\libtomcrypt\src\misc\crypt_ltc_mp_descriptor.c">
<Filter>Source Files\libtomcrypt\misc</Filter>
</ClCompile>
<ClCompile Include="src\libtomcrypt\src\misc\crypt_prng_descriptor.c">
<Filter>Source Files\libtomcrypt\misc</Filter>
</ClCompile>
<ClCompile Include="src\libtomcrypt\src\misc\crypt_prng_is_valid.c">
<Filter>Source Files\libtomcrypt\misc</Filter>
</ClCompile>
<ClCompile Include="src\libtomcrypt\src\misc\crypt_register_hash.c">
<Filter>Source Files\libtomcrypt\misc</Filter>
</ClCompile>
<ClCompile Include="src\libtomcrypt\src\misc\crypt_register_prng.c">
<Filter>Source Files\libtomcrypt\misc</Filter>
</ClCompile>
<ClCompile Include="src\libtomcrypt\src\misc\zeromem.c">
<Filter>Source Files\libtomcrypt\misc</Filter>
</ClCompile>
<ClCompile Include="src\libtomcrypt\src\pk\asn1\der_decode_bit_string.c">
<Filter>Source Files\libtomcrypt\pk\asn1</Filter>
</ClCompile>
<ClCompile Include="src\libtomcrypt\src\pk\asn1\der_decode_boolean.c">
<Filter>Source Files\libtomcrypt\pk\asn1</Filter>
</ClCompile>
<ClCompile Include="src\libtomcrypt\src\pk\asn1\der_decode_choice.c">
<Filter>Source Files\libtomcrypt\pk\asn1</Filter>
</ClCompile>
<ClCompile Include="src\libtomcrypt\src\pk\asn1\der_decode_ia5_string.c">
<Filter>Source Files\libtomcrypt\pk\asn1</Filter>
</ClCompile>
<ClCompile Include="src\libtomcrypt\src\pk\asn1\der_decode_integer.c">
<Filter>Source Files\libtomcrypt\pk\asn1</Filter>
</ClCompile>
<ClCompile Include="src\libtomcrypt\src\pk\asn1\der_decode_object_identifier.c">
<Filter>Source Files\libtomcrypt\pk\asn1</Filter>
</ClCompile>
<ClCompile Include="src\libtomcrypt\src\pk\asn1\der_decode_octet_string.c">
<Filter>Source Files\libtomcrypt\pk\asn1</Filter>
</ClCompile>
<ClCompile Include="src\libtomcrypt\src\pk\asn1\der_decode_printable_string.c">
<Filter>Source Files\libtomcrypt\pk\asn1</Filter>
</ClCompile>
<ClCompile Include="src\libtomcrypt\src\pk\asn1\der_decode_sequence_ex.c">
<Filter>Source Files\libtomcrypt\pk\asn1</Filter>
</ClCompile>
<ClCompile Include="src\libtomcrypt\src\pk\asn1\der_decode_sequence_flexi.c">
<Filter>Source Files\libtomcrypt\pk\asn1</Filter>
</ClCompile>
<ClCompile Include="src\libtomcrypt\src\pk\asn1\der_decode_sequence_multi.c">
<Filter>Source Files\libtomcrypt\pk\asn1</Filter>
</ClCompile>
<ClCompile Include="src\libtomcrypt\src\pk\asn1\der_decode_short_integer.c">
<Filter>Source Files\libtomcrypt\pk\asn1</Filter>
</ClCompile>
<ClCompile Include="src\libtomcrypt\src\pk\asn1\der_decode_utctime.c">
<Filter>Source Files\libtomcrypt\pk\asn1</Filter>
</ClCompile>
<ClCompile Include="src\libtomcrypt\src\pk\asn1\der_decode_utf8_string.c">
<Filter>Source Files\libtomcrypt\pk\asn1</Filter>
</ClCompile>
<ClCompile Include="src\libtomcrypt\src\pk\asn1\der_encode_bit_string.c">
<Filter>Source Files\libtomcrypt\pk\asn1</Filter>
</ClCompile>
<ClCompile Include="src\libtomcrypt\src\pk\asn1\der_encode_boolean.c">
<Filter>Source Files\libtomcrypt\pk\asn1</Filter>
</ClCompile>
<ClCompile Include="src\libtomcrypt\src\pk\asn1\der_encode_ia5_string.c">
<Filter>Source Files\libtomcrypt\pk\asn1</Filter>
</ClCompile>
<ClCompile Include="src\libtomcrypt\src\pk\asn1\der_encode_integer.c">
<Filter>Source Files\libtomcrypt\pk\asn1</Filter>
</ClCompile>
<ClCompile Include="src\libtomcrypt\src\pk\asn1\der_encode_object_identifier.c">
<Filter>Source Files\libtomcrypt\pk\asn1</Filter>
</ClCompile>
<ClCompile Include="src\libtomcrypt\src\pk\asn1\der_encode_octet_string.c">
<Filter>Source Files\libtomcrypt\pk\asn1</Filter>
</ClCompile>
<ClCompile Include="src\libtomcrypt\src\pk\asn1\der_encode_printable_string.c">
<Filter>Source Files\libtomcrypt\pk\asn1</Filter>
</ClCompile>
<ClCompile Include="src\libtomcrypt\src\pk\asn1\der_encode_sequence_ex.c">
<Filter>Source Files\libtomcrypt\pk\asn1</Filter>
</ClCompile>
<ClCompile Include="src\libtomcrypt\src\pk\asn1\der_encode_sequence_multi.c">
<Filter>Source Files\libtomcrypt\pk\asn1</Filter>
</ClCompile>
<ClCompile Include="src\libtomcrypt\src\pk\asn1\der_encode_set.c">
<Filter>Source Files\libtomcrypt\pk\asn1</Filter>
</ClCompile>
<ClCompile Include="src\libtomcrypt\src\pk\asn1\der_encode_setof.c">
<Filter>Source Files\libtomcrypt\pk\asn1</Filter>
</ClCompile>
<ClCompile Include="src\libtomcrypt\src\pk\asn1\der_encode_short_integer.c">
<Filter>Source Files\libtomcrypt\pk\asn1</Filter>
</ClCompile>
<ClCompile Include="src\libtomcrypt\src\pk\asn1\der_encode_utctime.c">
<Filter>Source Files\libtomcrypt\pk\asn1</Filter>
</ClCompile>
<ClCompile Include="src\libtomcrypt\src\pk\asn1\der_encode_utf8_string.c">
<Filter>Source Files\libtomcrypt\pk\asn1</Filter>
</ClCompile>
<ClCompile Include="src\libtomcrypt\src\pk\asn1\der_length_bit_string.c">
<Filter>Source Files\libtomcrypt\pk\asn1</Filter>
</ClCompile>
<ClCompile Include="src\libtomcrypt\src\pk\asn1\der_length_boolean.c">
<Filter>Source Files\libtomcrypt\pk\asn1</Filter>
</ClCompile>
<ClCompile Include="src\libtomcrypt\src\pk\asn1\der_length_ia5_string.c">
<Filter>Source Files\libtomcrypt\pk\asn1</Filter>
</ClCompile>
<ClCompile Include="src\libtomcrypt\src\pk\asn1\der_length_integer.c">
<Filter>Source Files\libtomcrypt\pk\asn1</Filter>
</ClCompile>
<ClCompile Include="src\libtomcrypt\src\pk\asn1\der_length_object_identifier.c">
<Filter>Source Files\libtomcrypt\pk\asn1</Filter>
</ClCompile>
<ClCompile Include="src\libtomcrypt\src\pk\asn1\der_length_octet_string.c">
<Filter>Source Files\libtomcrypt\pk\asn1</Filter>
</ClCompile>
<ClCompile Include="src\libtomcrypt\src\pk\asn1\der_length_printable_string.c">
<Filter>Source Files\libtomcrypt\pk\asn1</Filter>
</ClCompile>
<ClCompile Include="src\libtomcrypt\src\pk\asn1\der_length_sequence.c">
<Filter>Source Files\libtomcrypt\pk\asn1</Filter>
</ClCompile>
<ClCompile Include="src\libtomcrypt\src\pk\asn1\der_length_short_integer.c">
<Filter>Source Files\libtomcrypt\pk\asn1</Filter>
</ClCompile>
<ClCompile Include="src\libtomcrypt\src\pk\asn1\der_length_utctime.c">
<Filter>Source Files\libtomcrypt\pk\asn1</Filter>
</ClCompile>
<ClCompile Include="src\libtomcrypt\src\pk\asn1\der_length_utf8_string.c">
<Filter>Source Files\libtomcrypt\pk\asn1</Filter>
</ClCompile>
<ClCompile Include="src\libtomcrypt\src\pk\asn1\der_sequence_free.c">
<Filter>Source Files\libtomcrypt\pk\asn1</Filter>
</ClCompile>
<ClCompile Include="src\libtomcrypt\src\pk\ecc\ltc_ecc_map.c">
<Filter>Source Files\libtomcrypt\pk\ecc</Filter>
</ClCompile>
<ClCompile Include="src\libtomcrypt\src\pk\ecc\ltc_ecc_mul2add.c">
<Filter>Source Files\libtomcrypt\pk\ecc</Filter>
</ClCompile>
<ClCompile Include="src\libtomcrypt\src\pk\ecc\ltc_ecc_mulmod.c">
<Filter>Source Files\libtomcrypt\pk\ecc</Filter>
</ClCompile>
<ClCompile Include="src\libtomcrypt\src\pk\ecc\ltc_ecc_points.c">
<Filter>Source Files\libtomcrypt\pk\ecc</Filter>
</ClCompile>
<ClCompile Include="src\libtomcrypt\src\pk\ecc\ltc_ecc_projective_add_point.c">
<Filter>Source Files\libtomcrypt\pk\ecc</Filter>
</ClCompile>
<ClCompile Include="src\libtomcrypt\src\pk\ecc\ltc_ecc_projective_dbl_point.c">
<Filter>Source Files\libtomcrypt\pk\ecc</Filter>
</ClCompile>
<ClCompile Include="src\libtomcrypt\src\pk\pkcs1\pkcs_1_mgf1.c">
<Filter>Source Files\libtomcrypt\pk\pkcs1</Filter>
</ClCompile>
<ClCompile Include="src\libtomcrypt\src\pk\pkcs1\pkcs_1_oaep_decode.c">
<Filter>Source Files\libtomcrypt\pk\pkcs1</Filter>
</ClCompile>
<ClCompile Include="src\libtomcrypt\src\pk\pkcs1\pkcs_1_pss_decode.c">
<Filter>Source Files\libtomcrypt\pk\pkcs1</Filter>
</ClCompile>
<ClCompile Include="src\libtomcrypt\src\pk\pkcs1\pkcs_1_pss_encode.c">
<Filter>Source Files\libtomcrypt\pk\pkcs1</Filter>
</ClCompile>
<ClCompile Include="src\libtomcrypt\src\pk\pkcs1\pkcs_1_v1_5_decode.c">
<Filter>Source Files\libtomcrypt\pk\pkcs1</Filter>
</ClCompile>
<ClCompile Include="src\libtomcrypt\src\pk\pkcs1\pkcs_1_v1_5_encode.c">
<Filter>Source Files\libtomcrypt\pk\pkcs1</Filter>
</ClCompile>
<ClCompile Include="src\libtomcrypt\src\pk\rsa\rsa_exptmod.c">
<Filter>Source Files\libtomcrypt\pk\rsa</Filter>
</ClCompile>
<ClCompile Include="src\libtomcrypt\src\pk\rsa\rsa_free.c">
<Filter>Source Files\libtomcrypt\pk\rsa</Filter>
</ClCompile>
<ClCompile Include="src\libtomcrypt\src\pk\rsa\rsa_import.c">
<Filter>Source Files\libtomcrypt\pk\rsa</Filter>
</ClCompile>
<ClCompile Include="src\libtomcrypt\src\pk\rsa\rsa_make_key.c">
<Filter>Source Files\libtomcrypt\pk\rsa</Filter>
</ClCompile>
<ClCompile Include="src\libtomcrypt\src\pk\rsa\rsa_sign_hash.c">
<Filter>Source Files\libtomcrypt\pk\rsa</Filter>
</ClCompile>
<ClCompile Include="src\libtomcrypt\src\pk\rsa\rsa_verify_hash.c">
<Filter>Source Files\libtomcrypt\pk\rsa</Filter>
</ClCompile>
<ClCompile Include="src\libtomcrypt\src\pk\rsa\rsa_verify_simple.c">
<Filter>Source Files\libtomcrypt\pk\rsa</Filter>
</ClCompile>
<ClCompile Include="src\libtommath\bn_fast_mp_invmod.c">
<Filter>Source Files\libtommath</Filter>
</ClCompile>
<ClCompile Include="src\libtommath\bn_fast_mp_montgomery_reduce.c">
<Filter>Source Files\libtommath</Filter>
</ClCompile>
<ClCompile Include="src\libtommath\bn_fast_s_mp_mul_digs.c">
<Filter>Source Files\libtommath</Filter>
</ClCompile>
<ClCompile Include="src\libtommath\bn_fast_s_mp_mul_high_digs.c">
<Filter>Source Files\libtommath</Filter>
</ClCompile>
<ClCompile Include="src\libtommath\bn_fast_s_mp_sqr.c">
<Filter>Source Files\libtommath</Filter>
</ClCompile>
<ClCompile Include="src\libtommath\bn_mp_2expt.c">
<Filter>Source Files\libtommath</Filter>
</ClCompile>
<ClCompile Include="src\libtommath\bn_mp_abs.c">
<Filter>Source Files\libtommath</Filter>
</ClCompile>
<ClCompile Include="src\libtommath\bn_mp_add.c">
<Filter>Source Files\libtommath</Filter>
</ClCompile>
<ClCompile Include="src\libtommath\bn_mp_add_d.c">
<Filter>Source Files\libtommath</Filter>
</ClCompile>
<ClCompile Include="src\libtommath\bn_mp_addmod.c">
<Filter>Source Files\libtommath</Filter>
</ClCompile>
<ClCompile Include="src\libtommath\bn_mp_and.c">
<Filter>Source Files\libtommath</Filter>
</ClCompile>
<ClCompile Include="src\libtommath\bn_mp_clamp.c">
<Filter>Source Files\libtommath</Filter>
</ClCompile>
<ClCompile Include="src\libtommath\bn_mp_clear.c">
<Filter>Source Files\libtommath</Filter>
</ClCompile>
<ClCompile Include="src\libtommath\bn_mp_clear_multi.c">
<Filter>Source Files\libtommath</Filter>
</ClCompile>
<ClCompile Include="src\libtommath\bn_mp_cmp.c">
<Filter>Source Files\libtommath</Filter>
</ClCompile>
<ClCompile Include="src\libtommath\bn_mp_cmp_d.c">
<Filter>Source Files\libtommath</Filter>
</ClCompile>
<ClCompile Include="src\libtommath\bn_mp_cmp_mag.c">
<Filter>Source Files\libtommath</Filter>
</ClCompile>
<ClCompile Include="src\libtommath\bn_mp_cnt_lsb.c">
<Filter>Source Files\libtommath</Filter>
</ClCompile>
<ClCompile Include="src\libtommath\bn_mp_copy.c">
<Filter>Source Files\libtommath</Filter>
</ClCompile>
<ClCompile Include="src\libtommath\bn_mp_count_bits.c">
<Filter>Source Files\libtommath</Filter>
</ClCompile>
<ClCompile Include="src\libtommath\bn_mp_div.c">
<Filter>Source Files\libtommath</Filter>
</ClCompile>
<ClCompile Include="src\libtommath\bn_mp_div_2.c">
<Filter>Source Files\libtommath</Filter>
</ClCompile>
<ClCompile Include="src\libtommath\bn_mp_div_2d.c">
<Filter>Source Files\libtommath</Filter>
</ClCompile>
<ClCompile Include="src\libtommath\bn_mp_div_3.c">
<Filter>Source Files\libtommath</Filter>
</ClCompile>
<ClCompile Include="src\libtommath\bn_mp_div_d.c">
<Filter>Source Files\libtommath</Filter>
</ClCompile>
<ClCompile Include="src\libtommath\bn_mp_dr_is_modulus.c">
<Filter>Source Files\libtommath</Filter>
</ClCompile>
<ClCompile Include="src\libtommath\bn_mp_dr_reduce.c">
<Filter>Source Files\libtommath</Filter>
</ClCompile>
<ClCompile Include="src\libtommath\bn_mp_dr_setup.c">
<Filter>Source Files\libtommath</Filter>
</ClCompile>
<ClCompile Include="src\libtommath\bn_mp_exch.c">
<Filter>Source Files\libtommath</Filter>
</ClCompile>
<ClCompile Include="src\libtommath\bn_mp_expt_d.c">
<Filter>Source Files\libtommath</Filter>
</ClCompile>
<ClCompile Include="src\libtommath\bn_mp_exptmod.c">
<Filter>Source Files\libtommath</Filter>
</ClCompile>
<ClCompile Include="src\libtommath\bn_mp_exptmod_fast.c">
<Filter>Source Files\libtommath</Filter>
</ClCompile>
<ClCompile Include="src\libtommath\bn_mp_exteuclid.c">
<Filter>Source Files\libtommath</Filter>
</ClCompile>
<ClCompile Include="src\libtommath\bn_mp_fread.c">
<Filter>Source Files\libtommath</Filter>
</ClCompile>
<ClCompile Include="src\libtommath\bn_mp_fwrite.c">
<Filter>Source Files\libtommath</Filter>
</ClCompile>
<ClCompile Include="src\libtommath\bn_mp_gcd.c">
<Filter>Source Files\libtommath</Filter>
</ClCompile>
<ClCompile Include="src\libtommath\bn_mp_get_int.c">
<Filter>Source Files\libtommath</Filter>
</ClCompile>
<ClCompile Include="src\libtommath\bn_mp_grow.c">
<Filter>Source Files\libtommath</Filter>
</ClCompile>
<ClCompile Include="src\libtommath\bn_mp_init.c">
<Filter>Source Files\libtommath</Filter>
</ClCompile>
<ClCompile Include="src\libtommath\bn_mp_init_copy.c">
<Filter>Source Files\libtommath</Filter>
</ClCompile>
<ClCompile Include="src\libtommath\bn_mp_init_multi.c">
<Filter>Source Files\libtommath</Filter>
</ClCompile>
<ClCompile Include="src\libtommath\bn_mp_init_set.c">
<Filter>Source Files\libtommath</Filter>
</ClCompile>
<ClCompile Include="src\libtommath\bn_mp_init_set_int.c">
<Filter>Source Files\libtommath</Filter>
</ClCompile>
<ClCompile Include="src\libtommath\bn_mp_init_size.c">
<Filter>Source Files\libtommath</Filter>
</ClCompile>
<ClCompile Include="src\libtommath\bn_mp_invmod.c">
<Filter>Source Files\libtommath</Filter>
</ClCompile>
<ClCompile Include="src\libtommath\bn_mp_invmod_slow.c">
<Filter>Source Files\libtommath</Filter>
</ClCompile>
<ClCompile Include="src\libtommath\bn_mp_is_square.c">
<Filter>Source Files\libtommath</Filter>
</ClCompile>
<ClCompile Include="src\libtommath\bn_mp_jacobi.c">
<Filter>Source Files\libtommath</Filter>
</ClCompile>
<ClCompile Include="src\libtommath\bn_mp_karatsuba_mul.c">
<Filter>Source Files\libtommath</Filter>
</ClCompile>
<ClCompile Include="src\libtommath\bn_mp_karatsuba_sqr.c">
<Filter>Source Files\libtommath</Filter>
</ClCompile>
<ClCompile Include="src\libtommath\bn_mp_lcm.c">
<Filter>Source Files\libtommath</Filter>
</ClCompile>
<ClCompile Include="src\libtommath\bn_mp_lshd.c">
<Filter>Source Files\libtommath</Filter>
</ClCompile>
<ClCompile Include="src\libtommath\bn_mp_mod.c">
<Filter>Source Files\libtommath</Filter>
</ClCompile>
<ClCompile Include="src\libtommath\bn_mp_mod_2d.c">
<Filter>Source Files\libtommath</Filter>
</ClCompile>
<ClCompile Include="src\libtommath\bn_mp_mod_d.c">
<Filter>Source Files\libtommath</Filter>
</ClCompile>
<ClCompile Include="src\libtommath\bn_mp_montgomery_calc_normalization.c">
<Filter>Source Files\libtommath</Filter>
</ClCompile>
<ClCompile Include="src\libtommath\bn_mp_montgomery_reduce.c">
<Filter>Source Files\libtommath</Filter>
</ClCompile>
<ClCompile Include="src\libtommath\bn_mp_montgomery_setup.c">
<Filter>Source Files\libtommath</Filter>
</ClCompile>
<ClCompile Include="src\libtommath\bn_mp_mul.c">
<Filter>Source Files\libtommath</Filter>
</ClCompile>
<ClCompile Include="src\libtommath\bn_mp_mul_2.c">
<Filter>Source Files\libtommath</Filter>
</ClCompile>
<ClCompile Include="src\libtommath\bn_mp_mul_2d.c">
<Filter>Source Files\libtommath</Filter>
</ClCompile>
<ClCompile Include="src\libtommath\bn_mp_mul_d.c">
<Filter>Source Files\libtommath</Filter>
</ClCompile>
<ClCompile Include="src\libtommath\bn_mp_mulmod.c">
<Filter>Source Files\libtommath</Filter>
</ClCompile>
<ClCompile Include="src\libtommath\bn_mp_n_root.c">
<Filter>Source Files\libtommath</Filter>
</ClCompile>
<ClCompile Include="src\libtommath\bn_mp_neg.c">
<Filter>Source Files\libtommath</Filter>
</ClCompile>
<ClCompile Include="src\libtommath\bn_mp_or.c">
<Filter>Source Files\libtommath</Filter>
</ClCompile>
<ClCompile Include="src\libtommath\bn_mp_prime_fermat.c">
<Filter>Source Files\libtommath</Filter>
</ClCompile>
<ClCompile Include="src\libtommath\bn_mp_prime_is_divisible.c">
<Filter>Source Files\libtommath</Filter>
</ClCompile>
<ClCompile Include="src\libtommath\bn_mp_prime_is_prime.c">
<Filter>Source Files\libtommath</Filter>
</ClCompile>
<ClCompile Include="src\libtommath\bn_mp_prime_miller_rabin.c">
<Filter>Source Files\libtommath</Filter>
</ClCompile>
<ClCompile Include="src\libtommath\bn_mp_prime_next_prime.c">
<Filter>Source Files\libtommath</Filter>
</ClCompile>
<ClCompile Include="src\libtommath\bn_mp_prime_rabin_miller_trials.c">
<Filter>Source Files\libtommath</Filter>
</ClCompile>
<ClCompile Include="src\libtommath\bn_mp_prime_random_ex.c">
<Filter>Source Files\libtommath</Filter>
</ClCompile>
<ClCompile Include="src\libtommath\bn_mp_radix_size.c">
<Filter>Source Files\libtommath</Filter>
</ClCompile>
<ClCompile Include="src\libtommath\bn_mp_radix_smap.c">
<Filter>Source Files\libtommath</Filter>
</ClCompile>
<ClCompile Include="src\libtommath\bn_mp_rand.c">
<Filter>Source Files\libtommath</Filter>
</ClCompile>
<ClCompile Include="src\libtommath\bn_mp_read_radix.c">
<Filter>Source Files\libtommath</Filter>
</ClCompile>
<ClCompile Include="src\libtommath\bn_mp_read_signed_bin.c">
<Filter>Source Files\libtommath</Filter>
</ClCompile>
<ClCompile Include="src\libtommath\bn_mp_read_unsigned_bin.c">
<Filter>Source Files\libtommath</Filter>
</ClCompile>
<ClCompile Include="src\libtommath\bn_mp_reduce.c">
<Filter>Source Files\libtommath</Filter>
</ClCompile>
<ClCompile Include="src\libtommath\bn_mp_reduce_2k.c">
<Filter>Source Files\libtommath</Filter>
</ClCompile>
<ClCompile Include="src\libtommath\bn_mp_reduce_2k_l.c">
<Filter>Source Files\libtommath</Filter>
</ClCompile>
<ClCompile Include="src\libtommath\bn_mp_reduce_2k_setup.c">
<Filter>Source Files\libtommath</Filter>
</ClCompile>
<ClCompile Include="src\libtommath\bn_mp_reduce_2k_setup_l.c">
<Filter>Source Files\libtommath</Filter>
</ClCompile>
<ClCompile Include="src\libtommath\bn_mp_reduce_is_2k.c">
<Filter>Source Files\libtommath</Filter>
</ClCompile>
<ClCompile Include="src\libtommath\bn_mp_reduce_is_2k_l.c">
<Filter>Source Files\libtommath</Filter>
</ClCompile>
<ClCompile Include="src\libtommath\bn_mp_reduce_setup.c">
<Filter>Source Files\libtommath</Filter>
</ClCompile>
<ClCompile Include="src\libtommath\bn_mp_rshd.c">
<Filter>Source Files\libtommath</Filter>
</ClCompile>
<ClCompile Include="src\libtommath\bn_mp_set.c">
<Filter>Source Files\libtommath</Filter>
</ClCompile>
<ClCompile Include="src\libtommath\bn_mp_set_int.c">
<Filter>Source Files\libtommath</Filter>
</ClCompile>
<ClCompile Include="src\libtommath\bn_mp_shrink.c">
<Filter>Source Files\libtommath</Filter>
</ClCompile>
<ClCompile Include="src\libtommath\bn_mp_signed_bin_size.c">
<Filter>Source Files\libtommath</Filter>
</ClCompile>
<ClCompile Include="src\libtommath\bn_mp_sqr.c">
<Filter>Source Files\libtommath</Filter>
</ClCompile>
<ClCompile Include="src\libtommath\bn_mp_sqrmod.c">
<Filter>Source Files\libtommath</Filter>
</ClCompile>
<ClCompile Include="src\libtommath\bn_mp_sqrt.c">
<Filter>Source Files\libtommath</Filter>
</ClCompile>
<ClCompile Include="src\libtommath\bn_mp_sub.c">
<Filter>Source Files\libtommath</Filter>
</ClCompile>
<ClCompile Include="src\libtommath\bn_mp_sub_d.c">
<Filter>Source Files\libtommath</Filter>
</ClCompile>
<ClCompile Include="src\libtommath\bn_mp_submod.c">
<Filter>Source Files\libtommath</Filter>
</ClCompile>
<ClCompile Include="src\libtommath\bn_mp_to_signed_bin.c">
<Filter>Source Files\libtommath</Filter>
</ClCompile>
<ClCompile Include="src\libtommath\bn_mp_to_signed_bin_n.c">
<Filter>Source Files\libtommath</Filter>
</ClCompile>
<ClCompile Include="src\libtommath\bn_mp_to_unsigned_bin.c">
<Filter>Source Files\libtommath</Filter>
</ClCompile>
<ClCompile Include="src\libtommath\bn_mp_to_unsigned_bin_n.c">
<Filter>Source Files\libtommath</Filter>
</ClCompile>
<ClCompile Include="src\libtommath\bn_mp_toom_mul.c">
<Filter>Source Files\libtommath</Filter>
</ClCompile>
<ClCompile Include="src\libtommath\bn_mp_toom_sqr.c">
<Filter>Source Files\libtommath</Filter>
</ClCompile>
<ClCompile Include="src\libtommath\bn_mp_toradix.c">
<Filter>Source Files\libtommath</Filter>
</ClCompile>
<ClCompile Include="src\libtommath\bn_mp_toradix_n.c">
<Filter>Source Files\libtommath</Filter>
</ClCompile>
<ClCompile Include="src\libtommath\bn_mp_unsigned_bin_size.c">
<Filter>Source Files\libtommath</Filter>
</ClCompile>
<ClCompile Include="src\libtommath\bn_mp_xor.c">
<Filter>Source Files\libtommath</Filter>
</ClCompile>
<ClCompile Include="src\libtommath\bn_mp_zero.c">
<Filter>Source Files\libtommath</Filter>
</ClCompile>
<ClCompile Include="src\libtommath\bn_prime_tab.c">
<Filter>Source Files\libtommath</Filter>
</ClCompile>
<ClCompile Include="src\libtommath\bn_reverse.c">
<Filter>Source Files\libtommath</Filter>
</ClCompile>
<ClCompile Include="src\libtommath\bn_s_mp_add.c">
<Filter>Source Files\libtommath</Filter>
</ClCompile>
<ClCompile Include="src\libtommath\bn_s_mp_exptmod.c">
<Filter>Source Files\libtommath</Filter>
</ClCompile>
<ClCompile Include="src\libtommath\bn_s_mp_mul_digs.c">
<Filter>Source Files\libtommath</Filter>
</ClCompile>
<ClCompile Include="src\libtommath\bn_s_mp_mul_high_digs.c">
<Filter>Source Files\libtommath</Filter>
</ClCompile>
<ClCompile Include="src\libtommath\bn_s_mp_sqr.c">
<Filter>Source Files\libtommath</Filter>
</ClCompile>
<ClCompile Include="src\libtommath\bn_s_mp_sub.c">
<Filter>Source Files\libtommath</Filter>
</ClCompile>
<ClCompile Include="src\libtommath\bncore.c">
<Filter>Source Files\libtommath</Filter>
</ClCompile>
<ClCompile Include="src\lzma\C\LzFind.c">
<Filter>Source Files\lzma</Filter>
</ClCompile>
<ClCompile Include="src\lzma\C\LzFindMt.c">
<Filter>Source Files\lzma</Filter>
</ClCompile>
<ClCompile Include="src\lzma\C\LzmaDec.c">
<Filter>Source Files\lzma</Filter>
</ClCompile>
<ClCompile Include="src\lzma\C\LzmaEnc.c">
<Filter>Source Files\lzma</Filter>
</ClCompile>
<ClCompile Include="src\lzma\C\Threads.c">
<Filter>Source Files\lzma</Filter>
</ClCompile>
<ClCompile Include="src\pklib\explode.c">
<Filter>Source Files\pklib</Filter>
</ClCompile>
<ClCompile Include="src\pklib\implode.c">
<Filter>Source Files\pklib</Filter>
</ClCompile>
<ClCompile Include="src\sparse\sparse.cpp">
<Filter>Source Files\sparse</Filter>
</ClCompile>
<ClCompile Include="src\zlib\adler32.c">
<Filter>Source Files\zlib</Filter>
</ClCompile>
<ClCompile Include="src\zlib\compress_zlib.c">
<Filter>Source Files\zlib</Filter>
</ClCompile>
<ClCompile Include="src\zlib\crc32.c">
<Filter>Source Files\zlib</Filter>
</ClCompile>
<ClCompile Include="src\zlib\deflate.c">
<Filter>Source Files\zlib</Filter>
</ClCompile>
<ClCompile Include="src\zlib\inffast.c">
<Filter>Source Files\zlib</Filter>
</ClCompile>
<ClCompile Include="src\zlib\inflate.c">
<Filter>Source Files\zlib</Filter>
</ClCompile>
<ClCompile Include="src\zlib\inftrees.c">
<Filter>Source Files\zlib</Filter>
</ClCompile>
<ClCompile Include="src\zlib\trees.c">
<Filter>Source Files\zlib</Filter>
</ClCompile>
<ClCompile Include="src\zlib\zutil.c">
<Filter>Source Files\zlib</Filter>
</ClCompile>
<ClCompile Include="src\jenkins\lookup3.c">
<Filter>Source Files\jenkins</Filter>
</ClCompile>
</ItemGroup>
</Project>
+78
View File
@@ -0,0 +1,78 @@
StormLib history
================
Version 9.11
- Fixed bug in processing HET table.
Version 9.10
- Support for weak-signing
- Anti-protector: New Spazzler
Version 9.00
- Support for streaming (master-mirror)
- Support for multi-file MPQs used by some WoW versions
- Opening maps protected by Spazzler protector
- Opening maps protected by BOBA protector
Version 8.02
- Support for UNICODE encoding for on-disk files
- Optimized file deleting
Version 8.01
- SFileFindFirstFile and SFileFindNextFile no longer find files that have
patch file in the oldest MPQ in the patch chain
- Write support for MPQs version 4
Version 8.00
- Updated support for protected maps from Warcraft III
Version 7.11
- Support for MPQs v 3.0 (WOW-Cataclysm BETA)
- StormLib now deals properly with files that have MPQ_SECTOR_CHECKSUM missing,
but have sector checksum entry present in the sector offset table
Version 7.10
- Support for partial MPQs ("interface.MPQ.part")
- The only operation that is externally allowed to do with internal files
("(listfile)", "(attributes)" and "(signature)") is reading. Attempt to modify any of the file
fails and GetLastError returns ERROR_INTERNAL_FILE
- Fixed memory leak that has occured when writing more than one sector to the file at once
Version 7.01
- Support for adding files from memory
- Fixed improper validation of handles to MPQ file and MPQ archive
- Fixed bug where StormLib didn't save CRC32 of the file when added to archive
Version 7.00
- Properly deals with MPQs protected by w3xMaster
- Major rewrite
- Fixed support for (attributes)
- Added file verification
- Added MPQ signature verification
Version 6.22
- Properly deals with MPQs protected by w3xMaster
Version 6.21
- SFileRenameFile now properly re-crypts the file if necessary.
- SFileFindFirstFile correctly deals with deleted files
Version 6.20
- Fixed lots of bugs when processing files with same names but different locales
- Fixed bugs when repeately extracts the same file with MPQ_FILE_SINGLE_UNIT flag
- Added SFileFlushArchive
- Fixed issue opening AVI files renamed to MPQ using SFileCreateArchiveEx
+318
View File
@@ -0,0 +1,318 @@
THE MOPAQ ARCHIVE FORMAT
v0.9 (Thursday, June 30, 2005)
by Justin Olbrantz(Quantam)
Distribution and reproduction of this specification are allowed without limitation, as long as it is not altered. Quoting
in other works is freely allowed, as long as the source and author of the quote is stated.
TABLE OF CONTENTS
1. Introduction to the MoPaQ Format
2. The MoPaQ Format
2.1 General Archive Layout
2.2 Archive Header
2.3 Block Table
2.4 Hash Table
2.5 File Data
2.6 Listfile
2.7 Extended Attributes
2.8 Weak (Old) Digital Signature
2.9 Strong (New) Digital Signature
3. Algorithm Source Code
3.1 Encryption/Decryption
3.2 Hashing
3.3 Conversion of FILETIME and time_t
1. INTRODUCTION TO THE MOPAQ FORMAT
The MoPaQ (or MPQ) format is an archive file format designed by Mike O'Brien (hence the name Mike O'brien PaCK) at Blizzard
Entertainment. The format has been used in all Blizzard games since (and including) Diablo. It is heavily optimized to be
a read-only game archive format, and excels at this role.
The Blizzard MoPaQ-reading functions are contained in the Storm module, which my be either statically or dynamically linked.
The Blizzard MoPaQ-writing functions are contained in the MPQAPI module, which is always statically linked.
2. THE MOPAQ FORMAT
All numbers in the MoPaQ format are in little endian. Data types are listed either as int (integer, the number of bits specified),
byte (8 bits), and char (bytes which contain ASCII characters). All sizes and offsets are in bytes, unless specified otherwise.
Structure members are listed in the following general form:
offset from the beginning of the structure: data type(array size) member name : member description
2.1 GENERAL ARCHIVE LAYOUT
- Archive Header
- File Data
- File Data - Special Files
- Hash Table
- Block Table
- Strong Digital signature
This is the usual archive format, and is not absolutely essential. Some archives have been observed placing the hash table
and file table after the archive header, and before the file data.
2.2 ARCHIVE HEADER
00h: char(4) Magic : Indicates that the file is a MoPaQ archive. Must be ASCII "MPQ" 1Ah.
04h: int32 HeaderSize : Size of the archive header. Should be 32.
08h: int32 ArchiveSize : Size of the whole archive, including the header. Does not include the strong digital signature, if present.
This size is used, among other things, for determining the region to hash in computing the digital signature.
0Ch: int16 Unknown : Unknown
0Eh: int8 SectorSizeShift : Power of two exponent specifying the number of 512-byte disk sectors in each logical sector
in the archive. The size of each logical sector the archive is 512 * 2^SectorSizeShift. Bugs in the Storm library dictate
that this should always be 3 (4096 byte sectors).
10h: int32 HashTableOffset : Offset to the beginning of the hash table, relative to the beginning of the archive.
14h: int32 BlockTableOffset : Offset to the beginning of the block table, relative to the beginning of the archive.
18h: int32 HashTableEntries : Number of entries in the hash table. Must be a power of two, and must be less than 2^16.
1Ch: int32 BlockTableEntries : Number of entries in the block table.
The archive header is the first structure in the archive, at archive offset 0, but the archive does not need to be at offset
0 of the containing file. The offset of the archive in the file is referred to here as ArchiveOffset. If the archive is not
at the beginning of the file, it must begin at a disk sector boundary (512 bytes). Early versions of Storm require that the
archive be at the end of the containing file (ArchiveOffset + ArchiveSize = file size), but this is not required in newer
versions (due to the strong digital signature not being considered a part of the archive).
2.3 BLOCK TABLE
The block table contains entries for each region in the archive. Regions may be either files or empty space, which may be
overwritten by new files (typically this space is from deleted file data). The block table is encrypted, using the hash
of "(block table)" as the key. Each entry is structured as follows:
00h: int32 BlockOffset : Offset of the beginning of the block, relative to the beginning of the archive. Meaningless if the block size is 0.
04h: int32 BlockSize : Size of the block in the archive.
08h: int32 FileSize : Size of the file data stored in the block. Only valid if the block is a file, otherwise meaningless, and should be 0. If the file is compressed, this is the size of the uncompressed file data.
0Ch: int32 Flags : Bit mask of the flags for the block. The following values are conclusively identified:
80000000h: Block is a file, and follows the file data format; otherwise, block is free space, and may be overwritten. If the block is not a file, all other flags should be cleared.
01000000h: File is stored as a single unit, rather than split into sectors.
00020000h: The file's encryption key is adjusted by the block offset and file size (explained in detail in the File Data section). File must be encrypted.
00010000h: File is encrypted.
00000200h: File is compressed. Mutually exclusive to file imploded.
00000100h: File is imploded. Mutually exclusive to file compressed.
2.4 HASH TABLE
Instead of storing file names, for quick access MoPaQs use a fixed, power of two-size hash table of files in the archive. A file is uniquely identified by its file path, its language, and its platform. The home entry for a file in the hash table is computed as a hash of the file path. In the event of a collision (the home entry is occupied by another file), progressive overflow is used, and the file is placed in the next available hash table entry. Searches for a desired file in the hash table proceed from the home entry for the file until either the file is found, the entire hash table is searched, or an empty hash table entry (FileBlockIndex of FFFFFFFFh) is encountered. The hash table is encrypted using the hash of "(hash table)" as the key. Each entry is structured as follows:
00h: int32 FilePathHashA : The hash of the file path, using method A.
04h: int32 FilePathHashB : The hash of the file path, using method B.
08h: int16 Language : The language of the file. This is a Windows LANGID data type, and uses the same values. 0 indicates the default language (American English), or that the file is language-neutral.
0Ah: int8 Platform : The platform the file is used for. 0 indicates the default platform. No other values have been observed.
0Ch: int32 FileBlockIndex : If the hash table entry is valid, this is the index into the block table of the file. Otherwise, one of the following two values:
FFFFFFFFh: Hash table entry is empty, and has always been empty. Terminates searches for a given file.
FFFFFFFEh: Hash table entry is empty, but was valid at some point (in other words, the file was deleted). Does not terminate searches for a given file.
2.5 FILE DATA
00h: int32(SectorsInFile + 1) SectorOffsetTable : Offsets to the start of each sector's data, relative to the beginning of the file data. Not present if this information is calculatable (see details below).
immediately following SectorOffsetTable: SectorData : Data of each sector in the file, packed end to end (see details below).
Normally, file data is split up into sectors, for simple streaming. All sectors, save for the last, will contain as many bytes of file data as specified in the archive header's SectorSizeShift; the last sector may be smaller than this, depending on the size of the file data. This sector size is the size of the raw file data; if the file is compressed, the compressed sector will be smaller or the same size as the uncompressed sector size. Individual sectors in a compressed file may be stored uncompressed; this occurs if and only if the sector could not be compressed by the algorithm used (if the compressed sector size was greater than or equal to the size of the raw data), and is indicated by the sector's compressed size in SectorOffsetTable being equal to the uncompressed size of the sector (which may be calculated from the FileSize).
If the sector is compressed (but not imploded), a bit mask byte of the compression algorithm(s) used to compress the sector is appended to the beginning of the compressed sector data. This additional byte counts towards the total size of the sector; if the size of the sector (including this byte) exceeds or matches the uncompressed size of the sector data, the sector will be stored uncompressed, and this byte omitted. Multiple compression algorithms may be used on the same sector; in this case, successive compression occurs in the order the algorithms are listed below, and decompression occurs in the opposite order. For implimentations of all of these algorithms, see StormLib.
40h: IMA ADPCM mono
80h: IMA ADPCM stereo
01h: Huffman encoded
02h: Deflated (see ZLib)
08h: Imploded (see PKWare Data Compression Library)
10h: BZip2 compressed (see BZip2)
If the file is stored as a single unit (indicated in the file's Flags), there is effectively only a single sector, which
contains the entire file.
If the file is encrypted, each sector (after compression and appendage of the compression type byte, if applicable)
is encrypted with the file's key. The base key for a file is determined by a hash of the file name stripped of the
directory (i.e. the key for a file named "directory\file" would be computed as the hash of "file"). If this key is
adjusted, as indicated in the file's Flags, the final key is calculated as ((base key + BlockOffset - ArchiveOffset)
XOR FileSize) (StormLib - an open-source implementation of the MoPaQ reading and writing functions,
by Ladislav Zezula - incorrectly uses an AND in place of the XOR). Each sector is encrypted using the key + the
0-based index of the sector in the file. The SectorOffsetTable, if present, is encrypted using the key - 1.
The SectorOffsetTable is omitted when the sizes and offsets of all sectors in the file are calculatable from the FileSize.
This can happen in several circumstances. If the file is not compressed/imploded, then the size and offset of all sectors
is known, based on the archive's SectorSizeShift. If the file is stored as a single unit compressed/imploded, then the
SectorOffsetTable is omitted, as the single file "sector" corresponds to BlockSize and FileSize, as mentioned previously.
Note that the SectorOffsetTable will always be present if the file is compressed/imploded and the file is not stored as
a single unit, even if there is only a single sector in the file (the size of the file is less than or equal to the
archive's sector size).
2.6 LISTFILE
The listfile is a very simple extension to the MoPaQ format that contains the file paths of (most) files in the archive.
The languages and platforms of the files are not stored in the listfile. The listfile is contained in the file "(listfile)",
and is simply a non-Unix-style text file with one file path on each line, lines terminated with the bytes 0Dh 0Ah. The file
"(listfile)" may not be listed in the listfile.
2.7 EXTENDED ATTRIBUTES
The extended attributes are optional file attributes for files in the block table. These attributes were added at times after
the MoPaQ format was already finalized, and it is not necessary for every archive to have all (or any) of the extended attributes.
If an archive contains a given attribute, there will be an instance of that attribute for every block in the block table, although
the attribute will be meaningless if the block is not a file. The order of the attributes for blocks correspond to the order of the
blocks in the block table, and are of the same number. The attributes are stored in parallel arrays in the "(attributes)" file,
in the archive. The attributes corresponding to this file need not be valid (and logically cannot be). Unlike all the other
structures in the MoPaQ format, entries in the extended attributes are NOT guaranteed to be aligned. Also note that in some
archives, malicious zeroing of the attributes has been observed, perhaps with the intent of breaking archive viewers. This
file is structured as follows:
00h: int32 Version : Specifies the extended attributes format version. For now, must be 100.
04h: int32 AttributesPresent : Bit mask of the extended attributes present in the archive:
00000001h: File CRC32s.
00000002h: File timestamps.
00000004h: File MD5s.
08h: int32(BlockTableEntries) CRC32s : CRC32s of the (uncompressed) file data for each block in the archive. Omitted if the
archive does not have CRC32s. immediately after CRC32s: FILETIME(BlockTableEntries) Timestamps : Timestamps for each block
in the archive. The format is that of the Windows FILETIME structure. Omitted if the archive does not have timestamps.
immediately after Timestamps: MD5(BlockTableEntries) MD5s : MD5s of the (uncompressed) file data for each block in the archive.
Omitted if the archive does not have MD5s.
2.8 WEAK DIGITAL SIGNATURE
The weak digital signature is a digital signature using Microsoft CryptoAPI. It is an implimentation of the RSASSA-PKCS1-v1_5
digital signature protocol, using the MD5 hashing algorithm and a 512-bit (weak) RSA key (for more information about this
protocol, see the RSA Labs PKCS1 specification). The public key and exponent are stored in a resource in Storm. The signature
is stored uncompressed, unencrypted in the file "(signature)" in the archive. The archive is hashed from the beginning of the
archive (ArchiveOffset in the containing file) to the end of the archive (the length indicated by ArchiveSize); the signature
file is added to the archive before signing, and the space occupied by the file is considered to be all binary 0s during
signing/verification. This file is structured as follows:
00h: int32 Unknown : Must be 0.
04h: int32 Unknown : must be 0.
08h: int512 Signature : The digital signature. Like all other numbers in the MoPaQ format, this is stored in little-endian order.
2.9 STRONG DIGITAL SIGNATURE
The strong digital signature uses a simple proprietary implementation of RSA signing, using the SHA-1 hashing algorithm and
a 2048-bit (strong) RSA key. The default public key and exponent are stored in Storm, but other keys may be used as well.
The strong digital signature is stored immediately after the archive, in the containing file; the entire archive (ArchiveSize
bytes, starting at ArchiveOffset in the containing file) is hashed as a single block. The signature has the following format:
00h: char(4) Magic : Indicates the presence of a digital signature. Must be "NGIS" ("SIGN" backwards).
04h: int2048 Signature : The digital signature, stored in little-endian format.
When the Signature field is decrypted with the public key and exponent, and the result stored in little-endian order, it is structured as follows:
00h: byte Padding : Must be 0Bh.
01h: byte(235) Padding : Must be BBh.
ECh: byte(20) SHA-1 : SHA-1 hash of the archive, in standard SHA-1 format.
3. ALGORITHM SOURCE CODE
3.1 ENCRYPTION/DECRYPTION
I believe this was derived at some point from code in StormLib. Assumes the long type to be 32 bits, and the machine to be little endian order.
unsigned long dwCryptTable[0x500];
void InitializeCryptTable()
{
unsigned long seed = 0x00100001;
unsigned long index1 = 0;
unsigned long index2 = 0;
int i;
for (index1 = 0; index1 < 0x100; index1++)
{
for (index2 = index1, i = 0; i < 5; i++, index2 += 0x100)
{
unsigned long temp1, temp2;
seed = (seed * 125 + 3) % 0x2AAAAB;
temp1 = (seed & 0xFFFF) << 0x10;
seed = (seed * 125 + 3) % 0x2AAAAB;
temp2 = (seed & 0xFFFF);
dwCryptTable[index2] = (temp1 | temp2);
}
}
}
void EncryptData(void *lpbyBuffer, unsigned long dwLength, unsigned long dwKey)
{
unsigned long *lpdwBuffer = (unsigned long *)lpbyBuffer;
unsigned long seed = 0xEEEEEEEE;
unsigned long ch;
assert(lpbyBuffer);
dwLength /= sizeof(unsigned long);
while(dwLength-- > 0)
{
seed += dwCryptTable[0x400 + (dwKey & 0xFF)];
ch = *lpdwBuffer ^ (dwKey + seed);
dwKey = ((~dwKey << 0x15) + 0x11111111) | (dwKey >> 0x0B);
seed = *lpdwBuffer + seed + (seed << 5) + 3;
*lpdwBuffer++ = ch;
}
}
void DecryptData(void *lpbyBuffer, unsigned long dwLength, unsigned long dwKey)
{
unsigned long *lpdwBuffer = (unsigned long *)lpbyBuffer;
unsigned long seed = 0xEEEEEEEE;
unsigned long ch;
assert(lpbyBuffer);
dwLength /= sizeof(unsigned long);
while(dwLength-- > 0)
{
seed += dwCryptTable[0x400 + (dwKey & 0xFF)];
ch = *lpdwBuffer ^ (dwKey + seed);
dwKey = ((~dwKey << 0x15) + 0x11111111) | (dwKey >> 0x0B);
seed = ch + seed + (seed << 5) + 3;
*lpdwBuffer++ = ch;
}
}
3.2 HASHING
Based on code from StormLib.
// Different types of hashes to make with HashString
#define MPQ_HASH_TABLE_OFFSET 0
#define MPQ_HASH_NAME_A 1
#define MPQ_HASH_NAME_B 2
#define MPQ_HASH_FILE_KEY 3
unsigned long HashString(const char *lpszString, unsigned long dwHashType)
{
unsigned long seed1 = 0x7FED7FED;
unsigned long seed2 = 0xEEEEEEEE;
int ch;
while (*lpszString != 0)
{
ch = toupper(*lpszString++);
seed1 = dwCryptTable[(dwHashType * 0xFF) + ch] ^ (seed1 + seed2);
seed2 = ch + seed1 + seed2 + (seed2 << 5) + 3;
}
return seed1;
}
3.3 CONVERSION OF FILETIME AND time_t
#define EPOCH_OFFSET 116444736000000000ULL // Number of 100 ns units between 01/01/1601 and 01/01/1970
bool GetTimeFromFileTime(FILETIME &fileTime, time_t &time)
{
// The FILETIME represents a 64-bit integer: the number of 100 ns units since January 1, 1601
unsigned long long nTime = ((unsigned long long)fileTime.dwHighDateTime << 32) + fileTime.dwLowDateTime;
if (nTime < EPOCH_OFFSET)
return false;
nTime -= EPOCH_OFFSET; // Convert the time base from 01/01/1601 to 01/01/1970
nTime /= 10000000ULL; // Convert 100 ns to sec
time = (time_t)nTime;
// Test for overflow (FILETIME is 64 bits, time_t is 32 bits)
if ((nTime - (unsigned long long)time) > 0)
return false;
return true;
}
void GetFileTimeFromTime(time_t &time, FILETIME &fileTime)
{
unsigned long long nTime = (unsigned long long)time;
nTime *= 10000000ULL;
nTime += EPOCH_OFFSET;
fileTime.dwLowDateTime = (DWORD)nTime;
fileTime.dwHighDateTime = (DWORD)(nTime >> 32);
}
+433
View File
@@ -0,0 +1,433 @@
THE MOPAQ ARCHIVE FORMAT
v1.0 (Friday, September 1, 2006)
by Justin Olbrantz(Quantam)
Distribution and reproduction of this specification are allowed without limitation, as long as it is not altered. Quotation in other works is freely allowed, as long as the source and author of the quote are stated.
TABLE OF CONTENTS
1. Introduction to the MoPaQ Format
2. The MoPaQ Format
2.1 General Archive Layout
2.2 Archive Header
2.3 Block Table
2.4 Extended Block Table
2.5 Hash Table
2.6 File Data
2.7 Listfile
2.8 Extended Attributes
2.9 Weak (Old) Digital Signature
2.10 Strong (New) Digital Signature
3. Algorithm Source Code
3.1 Encryption/Decryption
3.2 Hashing and File Key Computation
3.3 Finding Files
3.4 Deleting Files
3.5 Conversion of FILETIME and time_t
3.6 Forming a 64-bit Large Archive Offset from 32-bit and 16-bit Components
4. Revision History
1. INTRODUCTION TO THE MOPAQ FORMAT
The MoPaQ (or MPQ) format is an archive file format designed by Mike O'Brien (hence the name Mike O'brien PaCK) at Blizzard Entertainment. The format has been used in all Blizzard games since (and including) Diablo. It is heavily optimized to be a read-only game archive format, and excels at this role.
The Blizzard MoPaQ-reading functions are contained in the Storm module, which my be either statically or dynamically linked. The Blizzard MoPaQ-writing functions are contained in the MPQAPI module, which is always statically linked.
StormLib - mentioned several times in this specification - is an open-source MoPaQ reading and writing library written by Ladislav Zezula (no affiliation with Blizzard Entertainment). While it's a bit dated, and does not support all of the newer MoPaQ features, it contains source code to the more exotic compression methods used by MoPaQ, such as the PKWare implode algorithm, MoPaQ's huffman compression algorithm, and the IMA ADPCM compression used by MoPaQ.
2. THE MOPAQ FORMAT
All numbers in the MoPaQ format are in little endian byte order; signed numbers use the two's complement system. Data types are listed either as int (integer, the number of bits specified), byte (8 bits), or char (bytes which contain ASCII characters). All sizes and offsets are in bytes, unless specified otherwise. Structure members are listed in the following general form:
offset from the beginning of the structure: data type(array size) member name : member description
2.1 GENERAL ARCHIVE LAYOUT
- Archive Header
- File Data
- File Data - Special Files
- Hash Table
- Block Table
- Extended Block Table
- Strong Digital signature
This is the usual archive format, but it is not mandatory. Some archives have been observed placing the hash table and file table after the archive header, and before the file data.
2.2 ARCHIVE HEADER
00h: char(4) Magic : Indicates that the file is a MoPaQ archive. Must be ASCII "MPQ" 1Ah.
04h: int32 HeaderSize : Size of the archive header.
08h: int32 ArchiveSize : Size of the whole archive, including the header. Does not include the strong digital signature, if present. This size is used, among other things, for determining the region to hash in computing the digital signature. This field is deprecated in the Burning Crusade MoPaQ format, and the size of the archive is calculated as the size from the beginning of the archive to the end of the hash table, block table, or extended block table (whichever is largest).
0Ch: int16 FormatVersion : MoPaQ format version. MPQAPI will not open archives where this is negative. Known versions:
0000h: Original format. HeaderSize should be 20h, and large archives are not supported.
0001h: Burning Crusade format. Header size should be 2Ch, and large archives are supported.
0Eh: int8 SectorSizeShift : Power of two exponent specifying the number of 512-byte disk sectors in each logical sector in the archive. The size of each logical sector in the archive is 512 * 2^SectorSizeShift. Bugs in the Storm library dictate that this should always be 3 (4096 byte sectors).
10h: int32 HashTableOffset : Offset to the beginning of the hash table, relative to the beginning of the archive.
14h: int32 BlockTableOffset : Offset to the beginning of the block table, relative to the beginning of the archive.
18h: int32 HashTableEntries : Number of entries in the hash table. Must be a power of two, and must be less than 2^16 for the original MoPaQ format, or less than 2^20 for the Burning Crusade format.
1Ch: int32 BlockTableEntries : Number of entries in the block table.
Fields only present in the Burning Crusade format and later:
20h: int64 ExtendedBlockTableOffset : Offset to the beginning of the extended block table, relative to the beginning of the archive.
28h: int16 HashTableOffsetHigh : High 16 bits of the hash table offset for large archives.
2Ah: int16 BlockTableOffsetHigh : High 16 bits of the block table offset for large archives.
The archive header is the first structure in the archive, at archive offset 0; however, the archive does not need to be at offset 0 of the containing file. The offset of the archive in the file is referred to here as ArchiveOffset. If the archive is not at the beginning of the file, it must begin at a disk sector boundary (512 bytes). Early versions of Storm require that the archive be at the end of the containing file (ArchiveOffset + ArchiveSize = file size), but this is not required in newer versions (due to the strong digital signature not being considered a part of the archive).
2.3 BLOCK TABLE
The block table contains entries for each region in the archive. Regions may be either files, empty space, which may be overwritten by new files (typically this space is from deleted file data), or unused block table entries. Empty space entries should have BlockOffset and BlockSize nonzero, and FileSize and Flags zero; unused block table entries should have BlockSize, FileSize, and Flags zero. The block table is encrypted, using the hash of "(block table)" as the key. Each entry is structured as follows:
00h: int32 BlockOffset : Offset of the beginning of the block, relative to the beginning of the archive.
04h: int32 BlockSize : Size of the block in the archive.
08h: int32 FileSize : Size of the file data stored in the block. Only valid if the block is a file; otherwise meaningless, and should be 0. If the file is compressed, this is the size of the uncompressed file data.
0Ch: int32 Flags : Bit mask of the flags for the block. The following values are conclusively identified:
80000000h: Block is a file, and follows the file data format; otherwise, block is free space or unused. If the block is not a file, all other flags should be cleared, and FileSize should be 0.
01000000h: File is stored as a single unit, rather than split into sectors.
00020000h: The file's encryption key is adjusted by the block offset and file size (explained in detail in the File Data section). File must be encrypted.
00010000h: File is encrypted.
00000200h: File is compressed. File cannot be imploded.
00000100h: File is imploded. File cannot be compressed.
2.4 EXTENDED BLOCK TABLE
The extended block table was added to support archives larger than 4 gigabytes (2^32 bytes). The table contains the upper bits of the archive offsets for each block in the block table. It is simply an array of int16s, which become bits 32-47 of the archive offsets for each block, with bits 48-63 being zero. Individual blocks in the archive are still limited to 4 gigabytes in size. This table is only present in Burning Crusade format archives that exceed 4 gigabytes size.
As of the Burning Crusade Friends and Family beta, this table is not encrypted.
2.5 HASH TABLE
Instead of storing file names, for quick access MoPaQs use a fixed, power of two-size hash table of files in the archive. A file is uniquely identified by its file path, its language, and its platform. The home entry for a file in the hash table is computed as a hash of the file path. In the event of a collision (the home entry is occupied by another file), progressive overflow is used, and the file is placed in the next available hash table entry. Searches for a desired file in the hash table proceed from the home entry for the file until either the file is found, the entire hash table is searched, or an empty hash table entry (FileBlockIndex of FFFFFFFFh) is encountered. The hash table is encrypted using the hash of "(hash table)" as the key. Each entry is structured as follows:
00h: int32 FilePathHashA : The hash of the file path, using method A.
04h: int32 FilePathHashB : The hash of the file path, using method B.
08h: int16 Language : The language of the file. This is a Windows LANGID data type, and uses the same values. 0 indicates the default language (American English), or that the file is language-neutral.
0Ah: int8 Platform : The platform the file is used for. 0 indicates the default platform. No other values have been observed.
0Ch: int32 FileBlockIndex : If the hash table entry is valid, this is the index into the block table of the file. Otherwise, one of the following two values:
FFFFFFFFh: Hash table entry is empty, and has always been empty. Terminates searches for a given file.
FFFFFFFEh: Hash table entry is empty, but was valid at some point (in other words, the file was deleted). Does not terminate searches for a given file.
2.6 FILE DATA
The data for each file is composed of the following structure:
00h: int32(SectorsInFile + 1) SectorOffsetTable : Offsets to the start of each sector, relative to the beginning of the file data. The last entry contains the file size, making it possible to easily calculate the size of any given sector. This table is not present if this information can be calculated (see details below).
immediately following SectorOffsetTable: SECTOR Sectors(SectorsInFile) : Data of each sector in the file, packed end to end (see details below).
Normally, file data is split up into sectors, for simple streaming. All sectors, save for the last, will contain as many bytes of file data as specified in the archive header's SectorSizeShift; the last sector may contain less than this, depending on the size of the entire file's data. If the file is compressed or imploded, the sector will be smaller or the same size as the file data it contains. Individual sectors in a compressed or imploded file may be stored uncompressed; this occurs if and only if the file data the sector contains could not be compressed by the algorithm(s) used (if the compressed sector size was greater than or equal to the size of the file data), and is indicated by the sector's size in SectorOffsetTable being equal to the size of the file data in the sector (which may be calculated from the FileSize).
The format of each sector depends on the kind of sector it is. Uncompressed sectors are simply the the raw file data contained in the sector. Imploded sectors are the raw compressed data following compression with the implode algorithm (these sectors can only be in imploded files). Compressed sectors (only found in compressed - not imploded - files) are compressed with one or more compression algorithms, and have the following structure:
00h: byte CompressionMask : Mask of the compression types applied to this sector. If multiple compression types are used, they are applied in the order listed below, and decompression is performed in the opposite order. This byte counts towards the total sector size, meaning that the sector will be stored uncompressed if the data cannot be compressed by at least two bytes; as well, this byte is encrypted with the sector data, if applicable. The following compression types are defined (for implementations of these algorithms, see StormLib):
40h: IMA ADPCM mono
80h: IMA ADPCM stereo
01h: Huffman encoded
02h: Deflated (see ZLib)
08h: Imploded (see PKWare Data Compression Library)
10h: BZip2 compressed (see BZip2)
01h: byte(SectorSize - 1) SectorData : The compressed data for the sector.
If the file is stored as a single unit (indicated in the file's Flags), there is effectively only a single sector, which contains the entire file data.
If the file is encrypted, each sector (after compression/implosion, if applicable) is encrypted with the file's key. The base key for a file is determined by a hash of the file name stripped of the directory (i.e. the key for a file named "directory\file" would be computed as the hash of "file"). If this key is adjusted, as indicated in the file's Flags, the final key is calculated as ((base key + BlockOffset - ArchiveOffset) XOR FileSize) (StormLib incorrectly uses an AND in place of the XOR). Each sector is encrypted using the key + the 0-based index of the sector in the file. The SectorOffsetTable, if present, is encrypted using the key - 1.
The SectorOffsetTable is omitted when the sizes and offsets of all sectors in the file are calculatable from the FileSize. This can happen in several circumstances. If the file is not compressed/imploded, then the size and offset of all sectors is known, based on the archive's SectorSizeShift. If the file is stored as a single unit compressed/imploded, then the SectorOffsetTable is omitted, as the single file "sector" corresponds to BlockSize and FileSize, as mentioned previously. However, the SectorOffsetTable will be present if the file is compressed/imploded and the file is not stored as a single unit, even if there is only a single sector in the file (the size of the file is less than or equal to the archive's sector size).
2.7 LISTFILE
The listfile is a very simple extension to the MoPaQ format that contains the file paths of (most) files in the archive. The languages and platforms of the files are not stored in the listfile. The listfile is contained in the file "(listfile)" (default language and platform), and is simply a text file with file paths separated by ';', 0Dh, 0Ah, or some combination of these. The file "(listfile)" may not be listed in the listfile.
2.8 EXTENDED ATTRIBUTES
The extended attributes are optional file attributes for files in the block table. These attributes were added at times after the MoPaQ format was already finalized, and it is not necessary for every archive to have all (or any) of the extended attributes. If an archive contains a given attribute, there will be an instance of that attribute for every block in the block table, although the attribute will be meaningless if the block is not a file. The order of the attributes for blocks correspond to the order of the blocks in the block table, and are of the same number. The attributes are stored in parallel arrays in the "(attributes)" file (default language and platform), in the archive. The attributes corresponding to this file need not be valid (and logically cannot be). Unlike all the other structures in the MoPaQ format, entries in the extended attributes are NOT guaranteed to be aligned. Also note that in some archives, malicious zeroing of the attributes has been observed, perhaps with the intent of breaking archive viewers. This file is structured as follows:
00h: int32 Version : Specifies the extended attributes format version. For now, must be 100.
04h: int32 AttributesPresent : Bit mask of the extended attributes present in the archive:
00000001h: File CRC32s.
00000002h: File timestamps.
00000004h: File MD5s.
08h: int32(BlockTableEntries) CRC32s : CRC32s of the (uncompressed) file data for each block in the archive. Omitted if the archive does not have CRC32s.
immediately after CRC32s: FILETIME(BlockTableEntries) Timestamps : Timestamps for each block in the archive. The format is that of the Windows FILETIME structure. Omitted if the archive does not have timestamps.
immediately after Timestamps: MD5(BlockTableEntries) MD5s : MD5s of the (uncompressed) file data for each block in the archive. Omitted if the archive does not have MD5s.
2.9 WEAK DIGITAL SIGNATURE
The weak digital signature is a digital signature using Microsoft CryptoAPI. It is an implimentation
of the RSASSA-PKCS1-v1_5 digital signature protocol, using the MD5 hashing algorithm and a 512-bit (weak)
RSA key (for more information about this protocol, see the RSA Labs PKCS1 specification). The public key
and exponent are stored in a resource in Storm, the private key is stored in a separate file, whose filename
is passed to MPQAPI (the private key is not stored in MPQAPI). The signature is stored uncompressed,
unencrypted in the file "(signature)" (default language and platform) in the archive. The archive
is hashed from the beginning of the archive (ArchiveOffset in the containing file) to the end of
the archive (the length indicated by ArchiveSize, or calculated in the Burning Crusade MoPaQ format);
the signature file is added to the archive before signing, and the space occupied by the file is considered
to be all binary 0s during signing/verification. This file is structured as follows:
00h: int32 Unknown : Must be 0.
04h: int32 Unknown : Must be 0.
08h: int512 Signature : The digital signature. Like all other numbers in the MoPaQ format, this is stored
in little-endian order. The structure of this, when decrypted, follows the RSASSA-PKCS1-v1_5 specification;
this format is rather icky to work with (I wrote a program to verify this signature using nothing but an MD5
function and huge integer functions; it wasn't pleasant), and best left to an encryption library such as Cryto++.
2.10 STRONG DIGITAL SIGNATURE
The strong digital signature uses a simple proprietary implementation of RSA signing, using the SHA-1 hashing algorithm and a 2048-bit (strong) RSA key. The default public key and exponent are stored in Storm, but other keys may be used as well. The strong digital signature is stored immediately after the archive, in the containing file; the entire archive (ArchiveSize bytes, starting at ArchiveOffset in the containing file) is hashed as a single block. The signature has the following format:
00h: char(4) Magic : Indicates the presence of a digital signature. Must be "NGIS" ("SIGN" backwards).
04h: int2048 Signature : The digital signature, stored in little-endian format.
When the Signature field is decrypted with the public key and exponent, and the resulting large integer is stored in little-endian order, it is structured as follows:
00h: byte Padding : Must be 0Bh.
01h: byte(235) Padding : Must be BBh.
ECh: byte(20) SHA-1 : SHA-1 hash of the archive, in standard SHA-1 byte order.
3. ALGORITHM SOURCE CODE
All of the sample code here assumes little endian machine byte order, that the short type is 16 bits, that the long type is 32 bits, and that the long long type is 64 bits. Adjustments must be made if these assumptions are not correct on a given platform. All code not credited otherwise was written by myself in the writing of this specification.
3.1 ENCRYPTION/DECRYPTION
Based on code from StormLib.
unsigned long dwCryptTable[0x500];
// The encryption and hashing functions use a number table in their procedures. This table must be initialized before the functions are called the first time.
void InitializeCryptTable()
{
unsigned long seed = 0x00100001;
unsigned long index1 = 0;
unsigned long index2 = 0;
int i;
for (index1 = 0; index1 < 0x100; index1++)
{
for (index2 = index1, i = 0; i < 5; i++, index2 += 0x100)
{
unsigned long temp1, temp2;
seed = (seed * 125 + 3) % 0x2AAAAB;
temp1 = (seed & 0xFFFF) << 0x10;
seed = (seed * 125 + 3) % 0x2AAAAB;
temp2 = (seed & 0xFFFF);
dwCryptTable[index2] = (temp1 | temp2);
}
}
}
void EncryptData(void *lpbyBuffer, unsigned long dwLength, unsigned long dwKey)
{
assert(lpbyBuffer);
unsigned long *lpdwBuffer = (unsigned long *)lpbyBuffer;
unsigned long seed = 0xEEEEEEEE;
unsigned long ch;
dwLength /= sizeof(unsigned long);
while(dwLength-- > 0)
{
seed += dwCryptTable[0x400 + (dwKey & 0xFF)];
ch = *lpdwBuffer ^ (dwKey + seed);
dwKey = ((~dwKey << 0x15) + 0x11111111) | (dwKey >> 0x0B);
seed = *lpdwBuffer + seed + (seed << 5) + 3;
*lpdwBuffer++ = ch;
}
}
void DecryptData(void *lpbyBuffer, unsigned long dwLength, unsigned long dwKey)
{
assert(lpbyBuffer);
unsigned long *lpdwBuffer = (unsigned long *)lpbyBuffer;
unsigned long seed = 0xEEEEEEEEL;
unsigned long ch;
dwLength /= sizeof(unsigned long);
while(dwLength-- > 0)
{
seed += dwCryptTable[0x400 + (dwKey & 0xFF)];
ch = *lpdwBuffer ^ (dwKey + seed);
dwKey = ((~dwKey << 0x15) + 0x11111111L) | (dwKey >> 0x0B);
seed = ch + seed + (seed << 5) + 3;
*lpdwBuffer++ = ch;
}
}
3.2 HASHING AND FILE KEY COMPUTATION
These functions may have been derived from StormLib code at some point in the very distant past. It was so long ago that I don't remember for certain.
// Different types of hashes to make with HashString
#define MPQ_HASH_TABLE_OFFSET 0
#define MPQ_HASH_NAME_A 1
#define MPQ_HASH_NAME_B 2
#define MPQ_HASH_FILE_KEY 3
// Based on code from StormLib.
unsigned long HashString(const char *lpszString, unsigned long dwHashType)
{
assert(lpszString);
assert(dwHashType <= MPQ_HASH_FILE_KEY);
unsigned long seed1 = 0x7FED7FEDL;
unsigned long seed2 = 0xEEEEEEEEL;
int ch;
while (*lpszString != 0)
{
ch = toupper(*lpszString++);
seed1 = dwCryptTable[(dwHashType * 0x100) + ch] ^ (seed1 + seed2);
seed2 = ch + seed1 + seed2 + (seed2 << 5) + 3;
}
return seed1;
}
#define BLOCK_OFFSET_ADJUSTED_KEY 0x00020000L
unsigned long ComputeFileKey(const char *lpszFilePath, const BlockTableEntry &blockEntry, unsigned long nArchiveOffset)
{
assert(lpszFilePath);
// Find the file name part of the path
const char *lpszFileName = strrchr(lpszFilePath, '\\');
if (lpszFileName)
lpszFileName++; // Skip the \
else
lpszFileName = lpszFilePath;
// Hash the name to get the base key
unsigned long nFileKey = HashString(lpszFileName, MPQ_HASH_FILE_KEY);
// Offset-adjust the key if necessary
if (blockEntry.Flags & BLOCK_OFFSET_ADJUSTED_KEY)
nFileKey = (nFileKey + blockEntry.BlockOffset) ^ blockEntry.FileSize;
return nFileKey;
}
3.3 FINDING FILES
#define MPQ_HASH_ENTRY_EMPTY 0xFFFFFFFFL
#define MPQ_HASH_ENTRY_DELETED 0xFFFFFFFEL
bool FindFileInHashTable(const HashTableEntry *lpHashTable, unsigned long nHashTableSize, const char *lpszFilePath, unsigned short nLang, unsigned char nPlatform, unsigned long &iFileHashEntry)
{
assert(lpHashTable);
assert(nHashTableSize);
assert(lpszFilePath);
// Find the home entry in the hash table for the file
unsigned long iInitEntry = HashString(lpszFilePath, MPQ_HASH_TABLE_OFFSET) & (nHashTableSize - 1);
// Is there anything there at all?
if (lpHashTable[iInitEntry].FileBlockIndex == MPQ_HASH_ENTRY_EMPTY)
return false;
// Compute the hashes to compare the hash table entry against
unsigned long nNameHashA = HashString(lpszFilePath, MPQ_HASH_NAME_A),
nNameHashB = HashString(lpszFilePath, MPQ_HASH_NAME_B),
iCurEntry = iInitEntry;
// Check each entry in the hash table till a termination point is reached
do
{
if (lpHashTable[iCurEntry].FileBlockIndex != MPQ_HASH_ENTRY_DELETED)
{
if (lpHashTable[iCurEntry].FilePathHashA == nNameHashA
&& lpHashTable[iCurEntry].FilePathHashB == nNameHashB
&& lpHashTable[iCurEntry].Language == nLang
&& lpHashTable[iCurEntry].Platform == nPlatform)
{
iFileHashEntry = iCurEntry;
return true;
}
}
iCurEntry = (iCurEntry + 1) & (nHashTableSize - 1);
} while (iCurEntry != iInitEntry && lpHashTable[iCurEntry].FileBlockIndex != MPQ_HASH_ENTRY_EMPTY);
return false;
}
3.4 DELETING FILES
bool DeleteFile(HashTableEntry *lpHashTable, unsigned long nHashTableSize, BlockTableEntry *lpBlockTable, const char *lpszFilePath, unsigned short nLang, unsigned char nPlatform)
{
assert(lpHashTable);
assert(nHashTableSize);
assert(lpBlockTable);
// Find the file in the hash table
unsigned long iFileHashEntry;
if (!FindFileInHashTable(lpHashTable, nHashTableSize, lpszFilePath, nLang, nPlatform, iFileHashEntry))
return false;
// Get the block table index before we nuke the hash table entry
unsigned long iFileBlockEntry = lpHashTable[iFileHashEntry].FileBlockIndex;
// Delete the file's entry in the hash table
memset(&lpHashTable[iFileHashEntry], 0xFF, sizeof(HashTableEntry));
// If the next entry is empty, mark this one as empty; otherwise, mark this as deleted.
if (lpHashTable[(iFileHashEntry + 1) & (nHashTableSize - 1)].FileBlockIndex == MPQ_HASH_ENTRY_EMPTY)
lpHashTable[iFileHashEntry].FileBlockIndex = MPQ_HASH_ENTRY_EMPTY;
else
lpHashTable[iFileHashEntry].FileBlockIndex = MPQ_HASH_ENTRY_DELETED;
// If the block occupies space, mark the block as free space; otherwise, clear the block table entry.
if (lpBlockTable[iFileBlockEntry].BlockSize > 0)
{
lpBlockTable[iFileBlockEntry].FileSize = 0;
lpBlockTable[iFileBlockEntry].Flags = 0;
}
else
memset(&lpBlockTable[iFileBlockEntry], 0, sizeof(BlockTableEntry);
return true;
}
3.5 CONVERSION OF FILETIME AND time_t
This code assumes that the base ("zero") date for time_t is 01/01/1970. This is true on Windows, Unix System V systems, and Mac OS X. It is unknown whether this is true on all other platforms. You'll need to research this yourself, if you plan on porting it somewhere else.
#define EPOCH_OFFSET 116444736000000000ULL // Number of 100 ns units between 01/01/1601 and 01/01/1970
bool GetTimeFromFileTime(const FILETIME &fileTime, time_t &time)
{
// The FILETIME represents a 64-bit integer: the number of 100 ns units since January 1, 1601
unsigned long long nTime = ((unsigned long long)fileTime.dwHighDateTime << 32) + fileTime.dwLowDateTime;
if (nTime < EPOCH_OFFSET)
return false;
nTime -= EPOCH_OFFSET; // Convert the time base from 01/01/1601 to 01/01/1970
nTime /= 10000000ULL; // Convert 100 ns to sec
time = (time_t)nTime;
// Test for overflow (FILETIME is 64 bits, time_t is 32 bits)
if ((nTime - (unsigned long long)time) > 0)
return false;
return true;
}
void GetFileTimeFromTime(const time_t &time, FILETIME &fileTime)
{
unsigned long long nTime = (unsigned long long)time;
nTime *= 10000000ULL;
nTime += EPOCH_OFFSET;
fileTime.dwLowDateTime = (DWORD)nTime;
fileTime.dwHighDateTime = (DWORD)(nTime >> 32);
}
3.6 FORMING A 64-BIT LARGE ARCHIVE OFFSET FROM 32-BIT AND 16-BIT COMPONENTS
unsigned long long MakeLargeArchiveOffset(unsigned long nOffsetLow, unsigned short nOffsetHigh)
{
return ((unsigned long long)nOffsetHigh << 32) + (unsigned long long)nOffsetLow;
}
4. REVISION HISTORY
1.0
- Updated to include most of the changes found in the Burning Crusade Friends and Family beta
0.91.
- Updated several structure member descriptions
- Listed the full set of characters that can separate list file entries
- Noted that (attributes), (listfile), and (signature) use the default language and platform codes
- Redid part of the file data specs to clarify the format of sectors
- Enhanced descriptions of the different kinds of block table entries
- Added ComputeFileKey, FindFileInHashTable, and DeleteFile source
@@ -0,0 +1 @@
UCMXF6EJY352EFH4XFRXCFH2XC9MQRZK
@@ -0,0 +1 @@
MMKVHY48RP7WXP4GHYBQ7SL9J9UNPHBP
@@ -0,0 +1 @@
8MXLWHQ7VGGLTZ9MQZQSFDCLJYET3CPP
@@ -0,0 +1 @@
EJ2R5TM6XFE2GUNG5QDGHKQ9UAKPWZSZ
@@ -0,0 +1 @@
PBGFBE42Z6LNK65UGJQ3WZVMCLP4HQQT
@@ -0,0 +1 @@
X7SEJJS9TSGCW5P28EBSC47AJPEY8VU2
@@ -0,0 +1 @@
5KVBQA8VYE6XRY3DLGC5ZDE4XS4P7YA2
@@ -0,0 +1 @@
478JD2K56EVNVVY4XX8TDWYT5B8KB254
@@ -0,0 +1 @@
8TS4VNFQRZTN6YWHE9CHVDH9NVWD474A
@@ -0,0 +1 @@
LJ52Z32DF4LZ4ZJJXVKK3AZQA6GABLJB
@@ -0,0 +1 @@
K6BDHY2ECUE2545YKNLBJPVYWHE7XYAG
@@ -0,0 +1 @@
6VWCQTN8V3ZZMRUCZXV8A8CGUX2TAA8H
@@ -0,0 +1 @@
S48B6CDTN5XEQAKQDJNDLJBJ73FDFM3U
@@ -0,0 +1 @@
Y45MD3CAK4KXSSXHYD9VY64Z8EKJ4XFX
@@ -0,0 +1 @@
G8MN8UDG6NA2ANGY6A3DNY82HRGF29ZH
@@ -0,0 +1 @@
3DH5RE5NVM5GTFD85LXGWT6FK859ETR5
@@ -0,0 +1 @@
8WLKUAXE94PFQU4Y249PAZ24N4R4XKTQ
@@ -0,0 +1 @@
A34DXX3VHGGXSQBRFE5UFFDXMF9G4G54
@@ -0,0 +1 @@
ZG7J9K938HJEFWPQUA768MA2PFER6EAJ
@@ -0,0 +1 @@
NE7CUNNNTVAPXV7E3G2BSVBWGVMW8BL2
@@ -0,0 +1 @@
3V9E2FTMBM9QQWK7U6MAMWAZWQDB838F
@@ -0,0 +1 @@
2NSFB8MELULJ83U6YHA3UP6K4MQD48L6
@@ -0,0 +1 @@
QA2TZ9EWZ4CUU8BMB5WXCTY65F9CSW4E
@@ -0,0 +1 @@
VHB378W64BAT9SH7D68VV9NLQDK9YEGT
@@ -0,0 +1 @@
U3NFQJV4M6GC7KBN9XQJ3BRDN3PLD9NE
+60
View File
@@ -0,0 +1,60 @@
:: Build file for Visual Studio 2008 and 2017
@echo off
:: Save the values of INCLUDE, LIB and PATH
set SAVE_INCLUDE=%INCLUDE%
set SAVE_LIB=%LIB%
set SAVE_PATH=%PATH%
set LIB_NAME=StormLib
:: Determine where the program files are, both for 64-bit and 32-bit Windows
if exist "%ProgramFiles%" set PROGRAM_FILES_DIR=%ProgramFiles%
if exist "%ProgramFiles(x86)%" set PROGRAM_FILES_DIR=%ProgramFiles(x86)%
:: Determine the installed version of Visual Studio (Prioritize Enterprise over Professional)
if exist "%PROGRAM_FILES_DIR%\Microsoft Visual Studio 9.0\VC\vcvarsall.bat" set VCVARS_2008=%PROGRAM_FILES_DIR%\Microsoft Visual Studio 9.0\VC\vcvarsall.bat
if exist "%PROGRAM_FILES_DIR%\Microsoft Visual Studio\2017\Community\VC\Auxiliary\Build\vcvarsall.bat" set VCVARS_2017=%PROGRAM_FILES_DIR%\Microsoft Visual Studio\2017\Community\VC\Auxiliary\Build\vcvarsall.bat
if exist "%PROGRAM_FILES_DIR%\Microsoft Visual Studio\2017\Professional\VC\Auxiliary\Build\vcvarsall.bat" set VCVARS_2017=%PROGRAM_FILES_DIR%\Microsoft Visual Studio\2017\Professional\VC\Auxiliary\Build\vcvarsall.bat
if exist "%PROGRAM_FILES_DIR%\Microsoft Visual Studio\2017\Enterprise\VC\Auxiliary\Build\vcvarsall.bat" set VCVARS_2017=%PROGRAM_FILES_DIR%\Microsoft Visual Studio\2017\Enterprise\VC\Auxiliary\Build\vcvarsall.bat
if exist "%PROGRAM_FILES_DIR%\Microsoft Visual Studio\2019\Community\VC\Auxiliary\Build\vcvarsall.bat" set VCVARS_2019=%PROGRAM_FILES_DIR%\Microsoft Visual Studio\2019\Community\VC\Auxiliary\Build\vcvarsall.bat
if exist "%PROGRAM_FILES_DIR%\Microsoft Visual Studio\2019\Professional\VC\Auxiliary\Build\vcvarsall.bat" set VCVARS_2019=%PROGRAM_FILES_DIR%\Microsoft Visual Studio\2019\Professional\VC\Auxiliary\Build\vcvarsall.bat
if exist "%PROGRAM_FILES_DIR%\Microsoft Visual Studio\2019\Enterprise\VC\Auxiliary\Build\vcvarsall.bat" set VCVARS_2019=%PROGRAM_FILES_DIR%\Microsoft Visual Studio\2019\Enterprise\VC\Auxiliary\Build\vcvarsall.bat
::Build all libraries using Visual Studio 2008 and 2017
call :BuildLibs "%VCVARS_2008%" x86 %LIB_NAME%_vs08.sln
call :BuildLibs "%VCVARS_2008%" x64 %LIB_NAME%_vs08.sln
call :BuildLibs "%VCVARS_2019%" x86 %LIB_NAME%_vs19.sln
call :BuildLibs "%VCVARS_2019%" x64 %LIB_NAME%_vs19.sln
goto:eof
::-----------------------------------------------------------------------------
:: Build all 8 configurations of the library
::
:: Parameters:
::
:: %1 Full path to the VCVARS.BAT file
:: %2 Target build platform (x86 or x64)
:: %3 Plain name of the /sln solution file
::
:BuildLibs
::set VSCMD_DEBUG=1
call %1 %2
if "%2" == "x86" set SLN_TRG=Win32
if "%2" == "x64" set SLN_TRG=x64
devenv.com %3 /project "%LIB_NAME%" /rebuild "DebugAD|%SLN_TRG%"
devenv.com %3 /project "%LIB_NAME%" /rebuild "DebugAS|%SLN_TRG%"
devenv.com %3 /project "%LIB_NAME%" /rebuild "DebugUD|%SLN_TRG%"
devenv.com %3 /project "%LIB_NAME%" /rebuild "DebugUS|%SLN_TRG%"
devenv.com %3 /project "%LIB_NAME%" /rebuild "ReleaseAD|%SLN_TRG%"
devenv.com %3 /project "%LIB_NAME%" /rebuild "ReleaseAS|%SLN_TRG%"
devenv.com %3 /project "%LIB_NAME%" /rebuild "ReleaseUD|%SLN_TRG%"
devenv.com %3 /project "%LIB_NAME%" /rebuild "ReleaseUS|%SLN_TRG%"
:: Restore environment variables to the old level
set INCLUDE=%SAVE_INCLUDE%
set LIB=%SAVE_LIB%
set PATH=%SAVE_PATH%
set VSINSTALLDIR=
set VCINSTALLDIR=
set DevEnvDir=
+46
View File
@@ -0,0 +1,46 @@
@echo off
if not "x%WDKDIR%" == "x" goto SELECT_LIB
echo The WDKDIR environment variable is not set
echo Set this variable to your WDK directory (without ending backslash)
echo Example: set WDKDIR C:\WinDDK\6001
pause
goto:eof
:SELECT_LIB
set PROJECT_DIR=%~dp0
set LIBRARY_NAME=StormLibWDK
:PREPARE_SOURCES
echo Preparing sources ...
copy .\src\wdk\sources-cpp.cpp . >nul
copy .\src\wdk\sources-wdk-* . >nul
echo.
:BUILD_LIB_32
echo Building %LIBRARY_NAME%.lib (32-bit) ...
set DDKBUILDENV=
call %WDKDIR%\bin\setenv.bat %WDKDIR%\ fre w2k
cd %PROJECT_DIR%
build.exe -czgw
del buildfre_w2k_x86.log
echo.
:BUILD_LIB_64
echo Building %LIBRARY_NAME%.lib (64-bit) ...
set DDKBUILDENV=
call %WDKDIR%\bin\setenv.bat %WDKDIR%\ fre x64 WLH
cd %PROJECT_DIR%
build.exe -czgw
del buildfre_wlh_amd64.log
echo.
:COPY_LIBS
copy /Y .\objfre_wlh_amd64\amd64\%LIBRARY_NAME%.lib ..\aaa\lib64\%LIBRARY_NAME%.lib >nul
copy /Y .\objfre_w2k_x86\i386\%LIBRARY_NAME%.lib ..\aaa\lib32\%LIBRARY_NAME%.lib >nul
copy /Y .\src\StormPort.h ..\aaa\inc >nul
copy /Y .\src\StormLib.h ..\aaa\inc >nul
:CLEANUP
if exist sources-cpp.cpp del sources-cpp.cpp
if exist sources-wdk-* del sources-wdk-*
if exist build.bat del build.bat
+14
View File
@@ -0,0 +1,14 @@
TARGETNAME=StormLibWDK
TARGETTYPE=LIBRARY
USE_MSVCRT=1
C_DEFINES=$(C_DEFINES) -DUNICODE -D_UNICODE -DWDK_BUILD
SOURCES=sources-cpp.cpp \
sources-wdk-bzip2.c \
sources-wdk-ltc.c \
sources-wdk-lzma.c \
sources-wdk-misc.c \
sources-wdk-tomcrypt.c \
sources-wdk-tommath.c \
sources-wdk-zlib.c
+24
View File
@@ -0,0 +1,24 @@
/*****************************************************************************/
/* DllMain.c Copyright (c) Ladislav Zezula 2006 */
/*---------------------------------------------------------------------------*/
/* Description: DllMain for the StormLib.dll library */
/*---------------------------------------------------------------------------*/
/* Date Ver Who Comment */
/* -------- ---- --- ------- */
/* 23.11.06 1.00 Lad The first version of DllMain.c */
/*****************************************************************************/
#define WIN32_LEAN_AND_MEAN
#include <windows.h>
//-----------------------------------------------------------------------------
// DllMain
BOOL WINAPI DllMain(HINSTANCE hInst, DWORD dwReason, LPVOID lpReserved)
{
UNREFERENCED_PARAMETER(hInst);
UNREFERENCED_PARAMETER(dwReason);
UNREFERENCED_PARAMETER(lpReserved);
return TRUE;
}
+79
View File
@@ -0,0 +1,79 @@
;
; Export file for Windows
; Copyright (c) 2007-2010 Ladislav Zezula
; ladik@zezula.net
;
LIBRARY StormLib.dll
EXPORTS
SFileSetLocale
SFileGetLocale
SFileOpenArchive
SFileCreateArchive
SFileCreateArchive2
SFileFlushArchive
SFileCloseArchive
SFileAddListFile
SFileSetCompactCallback
SFileCompactArchive
SFileGetMaxFileCount
SFileSetMaxFileCount
SFileGetAttributes
SFileSetAttributes
SFileUpdateFileAttributes
SFileOpenPatchArchive
SFileIsPatchedArchive
SFileOpenFileEx
SFileGetFileSize
SFileSetFilePointer
SFileReadFile
SFileCloseFile
SFileHasFile
SFileGetFileName
SFileGetFileInfo
SFileExtractFile
SFileVerifyFile
SFileVerifyRawData
SFileVerifyArchive
SFileFindFirstFile
SFileFindNextFile
SFileFindClose
SListFileFindFirstFile
SListFileFindNextFile
SListFileFindClose
SFileEnumLocales
SFileCreateFile
SFileWriteFile
SFileFinishFile
SFileAddFileEx
SFileAddFile
SFileAddWave
SFileRemoveFile
SFileRenameFile
SFileSetFileLocale
SFileSetDataCompression
SFileSetAddFileCallback
SCompImplode
SCompExplode
SCompCompress
SCompDecompress
GetLastError=Kernel32.GetLastError
SetLastError=Kernel32.SetLastError
+114
View File
@@ -0,0 +1,114 @@
// Microsoft Visual C++ generated resource script.
//
#include "resource.h"
#define APSTUDIO_READONLY_SYMBOLS
/////////////////////////////////////////////////////////////////////////////
//
// Generated from the TEXTINCLUDE 2 resource.
//
#include "afxres.h"
/////////////////////////////////////////////////////////////////////////////
#undef APSTUDIO_READONLY_SYMBOLS
/////////////////////////////////////////////////////////////////////////////
// Neutral resources
#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_NEU)
#ifdef _WIN32
LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL
#pragma code_page(1250)
#endif //_WIN32
/////////////////////////////////////////////////////////////////////////////
//
// Version
//
VS_VERSION_INFO VERSIONINFO
FILEVERSION 9,22,0,3
PRODUCTVERSION 9,22,0,3
FILEFLAGSMASK 0x17L
#ifdef _DEBUG
FILEFLAGS 0x1L
#else
FILEFLAGS 0x0L
#endif
FILEOS 0x4L
FILETYPE 0x0L
FILESUBTYPE 0x0L
BEGIN
BLOCK "StringFileInfo"
BEGIN
BLOCK "040504b0"
BEGIN
VALUE "Comments", "http://www.zezula.net/mpq.html"
VALUE "FileDescription", "StormLib library for reading Blizzard MPQ archives"
VALUE "FileVersion", "9, 22, 0, 3\0"
VALUE "InternalName", "StormLib"
VALUE "LegalCopyright", "Copyright (c) 2014 - 2020 Ladislav Zezula"
VALUE "OriginalFilename", "StormLib.dll"
VALUE "ProductName", "StormLib"
VALUE "ProductVersion", "9, 22, 0, 3\0"
END
END
BLOCK "VarFileInfo"
BEGIN
VALUE "Translation", 0x405, 1200
END
END
#endif // Neutral resources
/////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////
// Czech resources
#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_CSY)
#ifdef _WIN32
LANGUAGE LANG_CZECH, SUBLANG_DEFAULT
#pragma code_page(1250)
#endif //_WIN32
#ifdef APSTUDIO_INVOKED
/////////////////////////////////////////////////////////////////////////////
//
// TEXTINCLUDE
//
2 TEXTINCLUDE
BEGIN
"#include ""afxres.h""\r\n"
"\0"
END
3 TEXTINCLUDE
BEGIN
"\r\n"
"\0"
END
1 TEXTINCLUDE
BEGIN
"resource.h\0"
END
#endif // APSTUDIO_INVOKED
#endif // Czech resources
/////////////////////////////////////////////////////////////////////////////
#ifndef APSTUDIO_INVOKED
/////////////////////////////////////////////////////////////////////////////
//
// Generated from the TEXTINCLUDE 3 resource.
//
/////////////////////////////////////////////////////////////////////////////
#endif // not APSTUDIO_INVOKED
File diff suppressed because it is too large Load Diff
+217
View File
@@ -0,0 +1,217 @@
/*****************************************************************************/
/* FileStream.h Copyright (c) Ladislav Zezula 2012 */
/*---------------------------------------------------------------------------*/
/* Description: Definitions for FileStream object */
/*---------------------------------------------------------------------------*/
/* Date Ver Who Comment */
/* -------- ---- --- ------- */
/* 14.04.12 1.00 Lad The first version of FileStream.h */
/*****************************************************************************/
#ifndef __FILESTREAM_H__
#define __FILESTREAM_H__
//-----------------------------------------------------------------------------
// Function prototypes
typedef void (*STREAM_INIT)(
struct TFileStream * pStream // Pointer to an unopened stream
);
typedef bool (*STREAM_CREATE)(
struct TFileStream * pStream // Pointer to an unopened stream
);
typedef bool (*STREAM_OPEN)(
struct TFileStream * pStream, // Pointer to an unopened stream
const TCHAR * szFileName, // Pointer to file name to be open
DWORD dwStreamFlags // Stream flags
);
typedef bool (*STREAM_READ)(
struct TFileStream * pStream, // Pointer to an open stream
ULONGLONG * pByteOffset, // Pointer to file byte offset. If NULL, it reads from the current position
void * pvBuffer, // Pointer to data to be read
DWORD dwBytesToRead // Number of bytes to read from the file
);
typedef bool (*STREAM_WRITE)(
struct TFileStream * pStream, // Pointer to an open stream
ULONGLONG * pByteOffset, // Pointer to file byte offset. If NULL, it writes to the current position
const void * pvBuffer, // Pointer to data to be written
DWORD dwBytesToWrite // Number of bytes to read from the file
);
typedef bool (*STREAM_RESIZE)(
struct TFileStream * pStream, // Pointer to an open stream
ULONGLONG FileSize // New size for the file, in bytes
);
typedef bool (*STREAM_GETSIZE)(
struct TFileStream * pStream, // Pointer to an open stream
ULONGLONG * pFileSize // Receives the file size, in bytes
);
typedef bool (*STREAM_GETPOS)(
struct TFileStream * pStream, // Pointer to an open stream
ULONGLONG * pByteOffset // Pointer to store current file position
);
typedef void (*STREAM_CLOSE)(
struct TFileStream * pStream // Pointer to an open stream
);
typedef bool (*BLOCK_READ)(
struct TFileStream * pStream, // Pointer to a block-oriented stream
ULONGLONG StartOffset, // Byte offset of start of the block array
ULONGLONG EndOffset, // End offset (either end of the block or end of the file)
LPBYTE BlockBuffer, // Pointer to block-aligned buffer
DWORD BytesNeeded, // Number of bytes that are really needed
bool bAvailable // true if the block is available
);
typedef bool (*BLOCK_CHECK)(
struct TFileStream * pStream, // Pointer to a block-oriented stream
ULONGLONG BlockOffset // Offset of the file to check
);
typedef void (*BLOCK_SAVEMAP)(
struct TFileStream * pStream // Pointer to a block-oriented stream
);
//-----------------------------------------------------------------------------
// Local structures - partial file structure and bitmap footer
#define ID_FILE_BITMAP_FOOTER 0x33767470 // Signature of the file bitmap footer ('ptv3')
#define DEFAULT_BLOCK_SIZE 0x00004000 // Default size of the stream block
#define DEFAULT_BUILD_NUMBER 10958 // Build number for newly created partial MPQs
typedef struct _PART_FILE_HEADER
{
DWORD PartialVersion; // Always set to 2
char GameBuildNumber[0x20]; // Minimum build number of the game that can use this MPQ
DWORD Flags; // Flags (details unknown)
DWORD FileSizeLo; // Low 32 bits of the contained file size
DWORD FileSizeHi; // High 32 bits of the contained file size
DWORD BlockSize; // Size of one file block, in bytes
} PART_FILE_HEADER, *PPART_FILE_HEADER;
// Structure describing the block-to-file map entry
typedef struct _PART_FILE_MAP_ENTRY
{
DWORD Flags; // 3 = the block is present in the file
DWORD BlockOffsLo; // Low 32 bits of the block position in the file
DWORD BlockOffsHi; // High 32 bits of the block position in the file
DWORD LargeValueLo; // 64-bit value, meaning is unknown
DWORD LargeValueHi;
} PART_FILE_MAP_ENTRY, *PPART_FILE_MAP_ENTRY;
typedef struct _FILE_BITMAP_FOOTER
{
DWORD Signature; // 'ptv3' (ID_FILE_BITMAP_FOOTER)
DWORD Version; // Unknown, seems to always have value of 3 (version?)
DWORD BuildNumber; // Game build number for that MPQ
DWORD MapOffsetLo; // Low 32-bits of the offset of the bit map
DWORD MapOffsetHi; // High 32-bits of the offset of the bit map
DWORD BlockSize; // Size of one block (usually 0x4000 bytes)
} FILE_BITMAP_FOOTER, *PFILE_BITMAP_FOOTER;
//-----------------------------------------------------------------------------
// Structure for file stream
union TBaseProviderData
{
struct
{
ULONGLONG FileSize; // Size of the file
ULONGLONG FilePos; // Current file position
ULONGLONG FileTime; // Last write time
HANDLE hFile; // File handle
} File;
struct
{
ULONGLONG FileSize; // Size of the file
ULONGLONG FilePos; // Current file position
ULONGLONG FileTime; // Last write time
LPBYTE pbFile; // Pointer to mapped view
} Map;
struct
{
ULONGLONG FileSize; // Size of the file
ULONGLONG FilePos; // Current file position
ULONGLONG FileTime; // Last write time
HANDLE hInternet; // Internet handle
HANDLE hConnect; // Connection to the internet server
} Http;
};
struct TFileStream
{
// Stream provider functions
STREAM_READ StreamRead; // Pointer to stream read function for this archive. Do not use directly.
STREAM_WRITE StreamWrite; // Pointer to stream write function for this archive. Do not use directly.
STREAM_RESIZE StreamResize; // Pointer to function changing file size
STREAM_GETSIZE StreamGetSize; // Pointer to function returning file size
STREAM_GETPOS StreamGetPos; // Pointer to function that returns current file position
STREAM_CLOSE StreamClose; // Pointer to function closing the stream
// Block-oriented functions
BLOCK_READ BlockRead; // Pointer to function reading one or more blocks
BLOCK_CHECK BlockCheck; // Pointer to function checking whether the block is present
// Base provider functions
STREAM_CREATE BaseCreate; // Pointer to base create function
STREAM_OPEN BaseOpen; // Pointer to base open function
STREAM_READ BaseRead; // Read from the stream
STREAM_WRITE BaseWrite; // Write to the stream
STREAM_RESIZE BaseResize; // Pointer to function changing file size
STREAM_GETSIZE BaseGetSize; // Pointer to function returning file size
STREAM_GETPOS BaseGetPos; // Pointer to function that returns current file position
STREAM_CLOSE BaseClose; // Pointer to function closing the stream
// Base provider data (file size, file position)
TBaseProviderData Base;
// Stream provider data
TFileStream * pMaster; // Master stream (e.g. MPQ on a web server)
TCHAR * szFileName; // File name (self-relative pointer)
ULONGLONG StreamSize; // Stream size (can be less than file size)
ULONGLONG StreamPos; // Stream position
DWORD BuildNumber; // Game build number
DWORD dwFlags; // Stream flags
// Followed by stream provider data, with variable length
};
//-----------------------------------------------------------------------------
// Structures for block-oriented stream
struct TBlockStream : public TFileStream
{
SFILE_DOWNLOAD_CALLBACK pfnCallback; // Callback for downloading
void * FileBitmap; // Array of bits for file blocks
void * UserData; // User data to be passed to the download callback
DWORD BitmapSize; // Size of the file bitmap (in bytes)
DWORD BlockSize; // Size of one block, in bytes
DWORD BlockCount; // Number of data blocks in the file
DWORD IsComplete; // If nonzero, no blocks are missing
DWORD IsModified; // nonzero if the bitmap has been modified
};
//-----------------------------------------------------------------------------
// Structure for encrypted stream
#define MPQE_CHUNK_SIZE 0x40 // Size of one chunk to be decrypted
struct TEncryptedStream : public TBlockStream
{
BYTE Key[MPQE_CHUNK_SIZE]; // File key
};
#endif // __FILESTREAM_H__
File diff suppressed because it is too large Load Diff
+183
View File
@@ -0,0 +1,183 @@
/*****************************************************************************/
/* SBaseDumpData.cpp Copyright (c) Ladislav Zezula 2011 */
/*---------------------------------------------------------------------------*/
/* Description : */
/*---------------------------------------------------------------------------*/
/* Date Ver Who Comment */
/* -------- ---- --- ------- */
/* 26.01.11 1.00 Lad The first version of SBaseDumpData.cpp */
/*****************************************************************************/
#define __STORMLIB_SELF__
#include "StormLib.h"
#include "StormCommon.h"
#ifdef __STORMLIB_DUMP_DATA__
void DumpMpqHeader(TMPQHeader * pHeader)
{
printf("== MPQ Header =================================\n");
printf("DWORD dwID = %08X\n", pHeader->dwID);
printf("DWORD dwHeaderSize = %08X\n", pHeader->dwHeaderSize);
printf("DWORD dwArchiveSize = %08X\n", pHeader->dwArchiveSize);
printf("USHORT wFormatVersion = %04X\n", pHeader->wFormatVersion);
printf("USHORT wSectorSize = %04X\n", pHeader->wSectorSize);
printf("DWORD dwHashTablePos = %08X\n", pHeader->dwHashTablePos);
printf("DWORD dwBlockTablePos = %08X\n", pHeader->dwBlockTablePos);
printf("DWORD dwHashTableSize = %08X\n", pHeader->dwHashTableSize);
printf("DWORD dwBlockTableSize = %08X\n", pHeader->dwBlockTableSize);
printf("ULONGLONG HiBlockTablePos64 = %016llX\n", pHeader->HiBlockTablePos64);
printf("USHORT wHashTablePosHi = %04X\n", pHeader->wHashTablePosHi);
printf("USHORT wBlockTablePosHi = %04X\n", pHeader->wBlockTablePosHi);
printf("ULONGLONG ArchiveSize64 = %016llX\n", pHeader->ArchiveSize64);
printf("ULONGLONG BetTablePos64 = %016llX\n", pHeader->BetTablePos64);
printf("ULONGLONG HetTablePos64 = %016llX\n", pHeader->HetTablePos64);
printf("ULONGLONG HashTableSize64 = %016llX\n", pHeader->HashTableSize64);
printf("ULONGLONG BlockTableSize64 = %016llX\n", pHeader->BlockTableSize64);
printf("ULONGLONG HiBlockTableSize64 = %016llX\n", pHeader->HiBlockTableSize64);
printf("ULONGLONG HetTableSize64 = %016llX\n", pHeader->HetTableSize64);
printf("ULONGLONG BetTableSize64 = %016llX\n", pHeader->BetTableSize64);
printf("DWORD dwRawChunkSize = %08X\n", pHeader->dwRawChunkSize);
printf("-----------------------------------------------\n\n");
}
void DumpHashTable(TMPQHash * pHashTable, DWORD dwHashTableSize)
{
DWORD i;
if(pHashTable == NULL || dwHashTableSize == 0)
return;
printf("== Hash Table =================================\n");
for(i = 0; i < dwHashTableSize; i++)
{
printf("[%08x] %08X %08X %04X %02X %08X\n", i,
pHashTable[i].dwName1,
pHashTable[i].dwName2,
pHashTable[i].lcLocale,
pHashTable[i].Platform,
pHashTable[i].dwBlockIndex);
}
printf("-----------------------------------------------\n\n");
}
void DumpHetAndBetTable(TMPQHetTable * pHetTable, TMPQBetTable * pBetTable)
{
DWORD i;
if(pHetTable == NULL || pBetTable == NULL)
return;
printf("== HET Header =================================\n");
printf("ULONGLONG AndMask64 = %016llX\n", pHetTable->AndMask64);
printf("ULONGLONG OrMask64 = %016llX\n", pHetTable->OrMask64);
printf("DWORD dwEntryCount = %08X\n", pHetTable->dwEntryCount);
printf("DWORD dwTotalCount = %08X\n", pHetTable->dwTotalCount);
printf("DWORD dwNameHashBitSize = %08X\n", pHetTable->dwNameHashBitSize);
printf("DWORD dwIndexSizeTotal = %08X\n", pHetTable->dwIndexSizeTotal);
printf("DWORD dwIndexSizeExtra = %08X\n", pHetTable->dwIndexSizeExtra);
printf("DWORD dwIndexSize = %08X\n", pHetTable->dwIndexSize);
printf("-----------------------------------------------\n\n");
printf("== BET Header =================================\n");
printf("DWORD dwTableEntrySize = %08X\n", pBetTable->dwTableEntrySize);
printf("DWORD dwBitIndex_FilePos = %08X\n", pBetTable->dwBitIndex_FilePos);
printf("DWORD dwBitIndex_FileSize = %08X\n", pBetTable->dwBitIndex_FileSize);
printf("DWORD dwBitIndex_CmpSize = %08X\n", pBetTable->dwBitIndex_CmpSize);
printf("DWORD dwBitIndex_FlagIndex = %08X\n", pBetTable->dwBitIndex_FlagIndex);
printf("DWORD dwBitIndex_Unknown = %08X\n", pBetTable->dwBitIndex_Unknown);
printf("DWORD dwBitCount_FilePos = %08X\n", pBetTable->dwBitCount_FilePos);
printf("DWORD dwBitCount_FileSize = %08X\n", pBetTable->dwBitCount_FileSize);
printf("DWORD dwBitCount_CmpSize = %08X\n", pBetTable->dwBitCount_CmpSize);
printf("DWORD dwBitCount_FlagIndex = %08X\n", pBetTable->dwBitCount_FlagIndex);
printf("DWORD dwBitCount_Unknown = %08X\n", pBetTable->dwBitCount_Unknown);
printf("DWORD dwBitTotal_NameHash2 = %08X\n", pBetTable->dwBitTotal_NameHash2);
printf("DWORD dwBitExtra_NameHash2 = %08X\n", pBetTable->dwBitExtra_NameHash2);
printf("DWORD dwBitCount_NameHash2 = %08X\n", pBetTable->dwBitCount_NameHash2);
printf("DWORD dwEntryCount = %08X\n", pBetTable->dwEntryCount);
printf("DWORD dwFlagCount = %08X\n", pBetTable->dwFlagCount);
printf("-----------------------------------------------\n\n");
printf("== HET & Bet Table ======================================================================\n\n");
printf("HetIdx HetHash BetIdx BetHash ByteOffset FileSize CmpSize FlgIdx Flags \n");
printf("------ ------- ------ ---------------- ---------------- -------- -------- ------ --------\n");
for(i = 0; i < pHetTable->dwTotalCount; i++)
{
ULONGLONG ByteOffset = 0;
ULONGLONG BetHash = 0;
DWORD dwFileSize = 0;
DWORD dwCmpSize = 0;
DWORD dwFlagIndex = 0;
DWORD dwFlags = 0;
DWORD dwBetIndex = 0;
GetMPQBits(pHetTable->pBetIndexes, i * pHetTable->dwIndexSizeTotal,
pHetTable->dwIndexSize,
&dwBetIndex, 4);
if(dwBetIndex < pHetTable->dwTotalCount)
{
DWORD dwEntryIndex = pBetTable->dwTableEntrySize * dwBetIndex;
GetMPQBits(pBetTable->pNameHashes, dwBetIndex * pBetTable->dwBitTotal_NameHash2,
pBetTable->dwBitCount_NameHash2,
&BetHash, 8);
GetMPQBits(pBetTable->pFileTable, dwEntryIndex + pBetTable->dwBitIndex_FilePos,
pBetTable->dwBitCount_FilePos,
&ByteOffset, 8);
GetMPQBits(pBetTable->pFileTable, dwEntryIndex + pBetTable->dwBitIndex_FileSize,
pBetTable->dwBitCount_FileSize,
&dwFileSize, 4);
GetMPQBits(pBetTable->pFileTable, dwEntryIndex + pBetTable->dwBitIndex_CmpSize,
pBetTable->dwBitCount_CmpSize,
&dwCmpSize, 4);
GetMPQBits(pBetTable->pFileTable, dwEntryIndex + pBetTable->dwBitIndex_FlagIndex,
pBetTable->dwBitCount_FlagIndex,
&dwFlagIndex, 4);
dwFlags = pBetTable->pFileFlags[dwFlagIndex];
}
printf(" %04X %02lX %04X %016llX %016llX %08X %08X %04X %08X\n", i,
pHetTable->pNameHashes[i],
dwBetIndex,
BetHash,
ByteOffset,
dwFileSize,
dwCmpSize,
dwFlagIndex,
dwFlags);
}
printf("-----------------------------------------------------------------------------------------\n");
}
void DumpFileTable(TFileEntry * pFileTable, DWORD dwFileTableSize)
{
DWORD i;
if(pFileTable == NULL || dwFileTableSize == 0)
return;
printf("== File Table =================================\n");
for(i = 0; i < dwFileTableSize; i++, pFileTable++)
{
printf("[%04u] %08X-%08X %08X-%08X %08X-%08X 0x%08X 0x%08X 0x%08X %s\n", i,
(DWORD)(pFileTable->FileNameHash >> 0x20),
(DWORD)(pFileTable->FileNameHash & 0xFFFFFFFF),
(DWORD)(pFileTable->ByteOffset >> 0x20),
(DWORD)(pFileTable->ByteOffset & 0xFFFFFFFF),
(DWORD)(pFileTable->FileTime >> 0x20),
(DWORD)(pFileTable->FileTime & 0xFFFFFFFF),
pFileTable->dwFileSize,
pFileTable->dwCmpSize,
pFileTable->dwFlags,
pFileTable->szFileName != NULL ? pFileTable->szFileName : "");
}
printf("-----------------------------------------------\n\n");
}
#endif // __STORMLIB_DUMP_DATA__

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