Albeoris / Memoria

Final Fantasy IX tools
MIT License
378 stars 49 forks source link

Alternate Fantasy - Cannot Steal #526

Closed IFireflyl closed 5 months ago

IFireflyl commented 5 months ago

I'm not sure if this is something anyone can look into, or something specifically for @Tirlititi. I started a new game with Moguri Mod and Alternate Fantasy. It is the first time I have used the Alternate Fantasy mod, and I am excited to see what it does. In the very first battle against Baku, I get a DLL error when I try to steal, and it tells me to check the Memoria log. This is what the log shows:

10.06.2024 10:22:09 |M| [SteamSdkWrapper] Initialized: True 10.06.2024 10:22:10 |M| [Initialization] Memoria version: 2024-06-09 10.06.2024 10:22:10 |M| [Initialization] OS version: Microsoft Windows NT 10.0.22631.0 10.06.2024 10:22:10 |M| [FontInterceptor] Dynamic font initialization. 10.06.2024 10:22:10 |M| [FontInterceptor] Pass through {Configuration.Font.Enabled = 0}. 10.06.2024 10:22:10 |M| [FontInterceptor] Loading font [Original: TBUDGoStd-Bold (UnityEngine.Font)] 10.06.2024 10:22:10 |M| [Soloud] backend: MiniAudio samplerate:48000 10.06.2024 10:22:10 |M| [UIRoot] Changing a clip region of the UI root. 10.06.2024 10:22:10 |M| [GameLoopManager] RaiseStartEvent 10.06.2024 10:22:10 |M| InitializeItemText 10.06.2024 10:22:10 |M| InitializeImportantItemText 10.06.2024 10:22:10 |M| InitializeAbilityText 10.06.2024 10:22:10 |M| InitializeCommandText 10.06.2024 10:22:10 |M| InitializeBattleText 10.06.2024 10:22:10 |M| InitializeLocationText 10.06.2024 10:22:10 |M| InitializeEtcText 10.06.2024 10:22:10 |M| InitializeEtcText 10.06.2024 10:22:11 |M| [ResourceExporter] Pass through {Configuration.Export.Enabled = 0}. 10.06.2024 10:22:11 |M| [ResourceImporter] Pass through {Configuration.Import.Enabled = 0}. 10.06.2024 10:22:11 |M| InitializeItemText 10.06.2024 10:22:11 |M| InitializeImportantItemText 10.06.2024 10:22:11 |M| InitializeAbilityText 10.06.2024 10:22:11 |M| InitializeCommandText 10.06.2024 10:22:11 |M| InitializeBattleText 10.06.2024 10:22:11 |M| InitializeLocationText 10.06.2024 10:22:11 |M| InitializeEtcText 10.06.2024 10:22:11 |M| InitializeEtcText 10.06.2024 10:22:11 |M| [AudioResourceExporter] Pass through {Configuration.Export.Audio = 0}. 10.06.2024 10:22:12 |M| [SteamSdkWrapper] Request stats: True 10.06.2024 10:22:16 |M| [AssetManager] Memoria asset not found: FieldMaps/invalidFieldMapID/atlas 10.06.2024 10:22:16 |M| [AssetManager] Memoria asset not found: FieldMaps/invalidFieldMapID/0000.tim 10.06.2024 10:22:16 |M| [AssetManager] Memoria asset not found: FieldMaps/invalidFieldMapID/invalidFieldMapID.bgs 10.06.2024 10:22:16 |M| [AssetManager] Memoria asset not found: FieldMaps/invalidFieldMapID/spt.tcb 10.06.2024 10:22:16 |W| Could not find the Music with Id 136 10.06.2024 10:22:22 |M| [AssetManager] Memoria asset not found: EmbeddedAsset/GeoTexAnimIndex/GEO_SUB_F0_BLN.csv 10.06.2024 10:22:22 |M| [AssetManager] Memoria asset not found: EmbeddedAsset/GeoTexAnimIndex/GEO_SUB_F0_MRC.csv 10.06.2024 10:22:22 |M| [AssetManager] Memoria asset not found: EmbeddedAsset/GeoTexAnimIndex/GEO_SUB_F2_BAK.csv 10.06.2024 10:22:22 |M| [AssetManager] Memoria asset not found: EmbeddedAsset/GeoTexAnimIndex/GEO_SUB_F0_BAK.csv 10.06.2024 10:22:34 |M| Map: 50 | Scenario counter: 1000 10.06.2024 10:23:09 |M| InitializeBattleText 10.06.2024 10:23:22 |E| [Memoria.Scripts.dll] Error when using the spell Steal 10.06.2024 10:23:22 |E| The spell script 58 loaded from 'AlternateFantasy/StreamingAssets/Scripts/Memoria.Scripts.dll' is incompatible with the current version of Memoria 10.06.2024 10:23:22 |E| Field 'Memoria.CalcContext.HitRate' not found. 10.06.2024 10:23:22 |E| Try to update both Memoria (https://github.com/Albeoris/Memoria/releases) and the mod AlternateFantasy (from the Mod Manager) 10.06.2024 10:23:22 |E| Your current version of Memoria dates from June, 2024 10.06.2024 10:23:22 |E|
10.06.2024 10:23:27 |M| [GameLoopManager] RaiseQuitEvent

This is using the latest version of Memoria that was released a couple of days ago, although I also had the issue with the previous version of Memoria before patching it to see if this resolved the issue. I'm not sure if those missing Memoria assets are an issue or not, although if they are I would imagine they have nothing to do with the Steal issue I am having.

In case it is necessary or helpful, this is my Memoria.ini:

[Battle] ; SFXRework (default 1) Use the reworked system of battle SFX (required for Speed types 3 and above) ; Speed (default 0) 0 = Default / 1 = Fast / 2 = Turn-based / 3 = Simultaneous, targets can't attack, turn-order respected / 4 = Simultaneous, targets can't attack / 5 = Simultaneous ; NoAutoTrance (default 0) Disable automatic trance ; EncounterInterval (default 960) The distance to travel between random encounter checks ; EncounterInitial (default -1440) -1440 = Default / Negative numbers give some walk time with no encounter check when entering a field ; PersistentDangerValue (default 0) 0 = Default / 1 = Random encounter danger value doesn't reset on field transitions ; PSXEncounterMethod (default 0) When enabled, the change in the random encounter method that makes them less frequent than for the PSX version is reverted ; AutoPotionOverhealLimit (default -1) Maximum overheal in percents, -1 to disable a new behaviour ; GarnetConcentrate (default 0) 0 = Default / 1 = Disable "Garnet can't concerntrate" ; SelectBestTarget (default 1) 0 - Original / 1 = Estimate the best target via IEstimateBattleScript ; BreakDamageLimit (default 0) When enabled, damage are not capped at 9999 anymore ; ViviAutoAttack (default 0) 0 = Default attack / 1 = One basic elemental spell (cost-free MP) ; CountersBetterTarget (default 0) 0 = Default / 1 = Return Magic is multi-target if the original was multi-target and Counter's target gets re-targeted if the attacker gets untargetable ; LockEquippedAbilities (default 0) 0 = Default / 1 = Supporting abilities are used if and only if they are on an equipped weapon or armor / 2 = Active abilities are available if and only if they are on an equipped weapon or armor / 3 = Same for both supporting and active abilities ; FloatEvadeBonus (default 0) Give a bonus evasion with float against non-floating attacks ; also change the "Miss" repositioning of enemies having Auto-Float when positive ; AccessMenus (default 0) 0 = Can't access the menu in battle / 1 = Using the menu takes a turn / 2 = Using the menu can only be done on characters' turn / 3 = Menus can be opened party-wide at any time in battles ; AvailableMenus (default "Equip", "SupportingAbility") The different sub-menus that can be accessed in battle, among "Item", "ActiveAbility", "SupportingAbility", "Ability", "Equip", "Status", "Order", "Card" and "Config" (all are enabled if the option is left empty) ; CustomBattleFlagsMeaning (default 0) 0 = Default (unused flags are unused) / 1 = Alternate Fantasy usage (Abilities have "Contact attack", "Use weapon's properties" and "Can critical" flags ; enemies have a "10000 HP script trigger" flag) ; StatusDurationFormula (default: ContiCnt (IsNegativeStatus ? 8 (60 - TargetSpirit) : (IsPositiveStatus ? 8 TargetSpirit : 4 (60 - TargetSpirit)))) Formula for the duration of statuses that are not permanent ; StatusTickFormula (default: OprCnt (IsNegativeStatus ? 4 TargetSpirit : 4 (60 - TargetSpirit))) Formula for the delay between each tick of Poison, Venom and Regen ; SpeedStatFormula (default: Min(50, SpeedBase + Level / 10 + (SpeedBonus / 32))) Formula for the level progression of player character speed ; StrengthStatFormula (default: Min(99, StrengthBase + Level 3 / 10 + (StrengthBonus / 32))) Formula for the level progression of player character strength ; MagicStatFormula (default: Min(99, MagicBase + Level 3 / 10 + (MagicBonus / 32))) Formula for the level progression of player character magic ; SpiritStatFormula (default: Min(50, SpiritBase + Level 3 / 20 + (SpiritBonus / 32))) Formula for the level progression of player character spirit ; MagicStoneStockFormula (default: Min(99, MagicStoneBase + Level 4 / 10 + (MagicStoneBonus / 32))) Formula for the level progression of player character magic stones ; TranceDecreaseFormula (default: (300 - Level) / Spirit 10) Formula for the trance decrease after each turn spent in trance (the full gauge corresponds to 255) Enabled = 1 AccessMenus = 0 AutoPotionOverhealLimit = -1 AvailableMenus = "Equip", "SupportingAbility" BreakDamageLimit = 0 CountersBetterTarget = 1 CurseUseWeaponElement = 1 CustomBattleFlagsMeaning = 1 EncounterInitial = -1440 EncounterInterval = 960 FloatEvadeBonus = 0 GarnetConcentrate = 1 LockEquippedAbilities = 0 MagicStatFormula = Min(99, MagicBase + Level 3 / 10 + (MagicBonus >> 5)) MagicStoneStockFormula = Min(99, MagicStoneBase + Level 4 / 10 + (MagicStoneBonus >> 5)) NoAutoTrance = 1 PersistentDangerValue = 0 PSXEncounterMethod = 0 SelectBestTarget = 1 SFXRework = 1 SpareChangeGilSpentFormula = Power Gil / 100 Speed = 2 SpeedStatFormula = Min(50, SpeedBase + Level / 10 + (SpeedBonus >> 5)) SpiritStatFormula = Min(50, SpiritBase + Level 3 / 20 + (SpiritBonus >> 5)) StrengthStatFormula = Min(99, StrengthBase + Level 3 / 10 + (StrengthBonus >> 5)) SummonPriorityCount = 0 TranceDecreaseFormula = (300 - Level) / Spirit 10 ViviAutoAttack = 0 StatusDurationFormula = ContiCnt (IsNegativeStatus ? 8 (60 - TargetSpirit) : (IsPositiveStatus ? 8 TargetSpirit : 4 (60 - TargetSpirit))) StatusTickFormula = OprCnt (IsNegativeStatus ? 4 TargetSpirit : 4 (60 - TargetSpirit)) [Icons] ; HideCursor (default 0) Hides "I'm here" hand ; HideCards (default 0) Hides card speech bubbles ; HideExclamation (default 0) Hides "!" Speech bubble ; HideQuestion (default 0) Hides "?" Speech bubble ; HideBeach (default 0) Hides "~~" speech bubbles ; HideSteam (default 0) Hides speech bubbles added by the Steam version (compared to the PSX version) Enabled = 1 HideBeach = 0 HideCards = 0 HideCursor = 0 HideExclamation = 0 HideQuestion = 0 HideSteam = 0 [Cheats] ; "Boosters" included in the steam version ; Rotation (default 1) ? ; Perspective (default 1) ? ; SpeedMode (default 1) F1 - Speed mode ; SpeedFactor (default 3) Speed mode multiplier ; SpeedTimer (default 0) Speed up Hot & Cold and other timed mini-games when Speed mode is activate ; BattleAssistance (default 0) F2 - Gives transe to your characters ; Attack9999 (default 0) F3 - All your attacks inflict 9999 ; NoRandomEncounter (default 1) F4 - Removes random battles ; MasterSkill (default 0) F5 - irreversible - Characters learn skills upon equipping ; LvMax (default 0) F6 - irreversible - All characters lvl 99 ; GilMax (default 0) F7 - irreversible - Unlimited gils Enabled = 1 Attack9999 = 1 BattleAssistance = 1 GilMax = 0 LvMax = 0 MasterSkill = 0 NoRandomEncounter = 1 Perspective = 1 Rotation = 1 SpeedFactor = 3 SpeedMode = 1 SpeedTimer = 0 [Export] ; no effect in game ; TextFileFormat: determines in what format the text resources will be exported; possible values: .strings, .resjson Enabled = 0 Audio = 1 Battle = 0 Field = 0 Graphics = 1 Languages = "US", "UK", "JP", "ES", "FR", "GR", "IT" Path = %StreamingAssets% Text = 1 TextFileFormat = .strings [Hacks] ; Memoria cheats ; AllCharactersAvailable (default 0) 1 = All characters are available / 2 = All characters are available and characters are not removed or swapped because of the scenario. Be careful: the option 2 soft-locks the game in some situations. ; RopeJumpingIncrement (default 1) Number of points per jump ; FrogCatchingIncrement (default 1) Number of frogs per catch ; HippaulRacingViviSpeed (default 33) Vivi's speed in the hippaul racing ; StealingAlwaysWorks (default 0) 1 = Always steals when move succeeds / 2 = Stealing has a 100% success rate (bandit ability) ; DisableNameChoice (default 0) Skip the character renaming windows ; ExcaliburIINoTimeLimit (default 0) Give Excalibur II even when time is over Enabled = 1 AllCharactersAvailable = 0 DisableNameChoice = 1 ExcaliburIINoTimeLimit = 0 FrogCatchingIncrement = 5 HippaulRacingViviSpeed = 99 RopeJumpingIncrement = 10 StealingAlwaysWorks = 2 [TetraMaster] ; TripleTriad (defaut 0) 0 = Tetra Master / 1 = "Tetra Triad" (a mix with both card games!) / 2 = Triple Triad (like FF8!) ; ReduceRandom (default 0) Changes the calculation method of card battles ; MaxCardCount (default 100) The maximum number of cards the player can have Simultaneously ; DiscardAutoButton (default 1) Adds "Auto" button to the discard card dialog ; DiscardAssaultCards (default 0) Enable to auto discard Assault cards (?A??) ; DiscardFlexibleCards (default 1) Enable to auto discard Flexible cards (?X??) ; DiscardMaxAttack (default 224) Maximum attack power for auto discard (number on the card 16) ; DiscardMaxPDef (default 255) Maximum physical defence for auto discard (number on the card 16) ; DiscardMaxMDef (default 255) Maximum magical defence for auto discard (number on the card 16) ; DiscardMaxSum (default 480) Maximum sum of attack power, physical and magical defence for auto discard (numbers on the card * 16) ; DiscardMinDeckSize (default 10) Minimum number of cards in the deck for auto discard ; DiscardKeepSameType (default 1) Minimum number of cards with the same type in the deck for auto discard ; DiscardKeepSameArrow (default 0) Minimum number of cards with the arrows in the deck for auto discard ; DiscardExclusions (default 56, 75, 76, 77, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 98, 99, 100) Disable auto discard for these cards Enabled = 1 DiscardFlexibleCards = 0 DiscardAssaultCards = 0 DiscardAutoButton = 1 DiscardExclusions = 56, 75, 76, 77, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 98, 99, 100 DiscardKeepSameArrow = 0 DiscardKeepSameType = 1 DiscardMaxAttack = 224 DiscardMaxMDef = 255 DiscardMaxPDef = 255 DiscardMaxSum = 480 DiscardMinDeckSize = 10 MaxCardCount = 500 ReduceRandom = 1 TripleTriad = 0 [Import] Enabled = 0 Audio = 1 Field = 0 Graphics = 1 Path = %StreamingAssets% Text = 1 [Audio] ; PriorityToOGG (default 0) When enabled, ".ogg" audio files are used instead of the ".akb.bytes" counterpart when both exist; the AKB header is then generated again at each usage ; Backend (default 1) Choose the audio backend. 0 = SdLib, legacy backend (not recommended) / 1 = Soloud, new better sounding backend Backend = 1 MovieVolume = 100 MusicVolume = 100 PriorityToOGG = 1 SoundVolume = 100 [Graphics] ; BattleFPS (default 60) Controls the fluidity of battle graphics (frame per second) ; BattleTPS (default 15) Controls the speed of battles (tick per second) ; FieldFPS (default 60) Controls the fluidity of field graphics ; FieldTPS (default 30) Controls the speed in fields ; WorldFPS (default 60) Controls the fluidity of world map graphics ; WorldTPS (default 20) Controls the speed in world maps ; MenuFPS (default 60) Controls the fluidity of other modules ; BattleSwirlFrames (default 0 / PSX 115) is the number of frames "swirling" before a battle ; WidescreenSupport (default 1) activate Widescreen for 16:9 screens ; SkipIntros (default 0) 0 = Don't skip / 1 = Skip logos / 2 = Skip logos and movie / 3 = Don't loop at the title ; GarnetHair (default 0) 0 = Default / 1 = Long / 2 = Short ; TileSize (default 32) Vanilla 32 / Moguri Mod 64 ; AntiAliasing (default 8) Must be either 0, 2, 4 or 8: enable Unity's anti-aliasing algorithm to improve the render of 3D model edges ; CameraStabilizer (0 to 99, default 85) Adds a smooth delay on the camera following the player. Value represents "stickiness" of camera to its original position, each frame. Enabled = 1 AntiAliasing = 8 BattleFPS = 120 BattleTPS = 15 BattleSwirlFrames = 0 CameraStabilizer = 85 FieldFPS = 120 FieldTPS = 30 GarnetHair = 1 MenuFPS = 120 MenuTPS = 60 SkipIntros = 3 TileSize = 64 UseGarnetFont = 1 WidescreenSupport = 1 WorldFPS = 120 WorldTPS = 20 [Fixes] Enabled = 1 KeepRestTimeInBattle = 1 [Font] Enabled = 0 Size = 24 Names = "Garnet", "Times Bold" [Debug] ; StartModelViewer: open a model and animation viewer, use with cautious ; StartFieldCreator: open an editor to create new fields ; RenderWalkmeshes: show the path geometry on which the characters walk in-game Enabled = 0 SigningEventObjects = 0 StartModelViewer = 0 StartFieldCreator = 0 RenderWalkmeshes = 0 [AnalogControl] ; StickThreshold (default 10) 0->100, threshold under which there is no movement ; MinimumSpeed (default 5) Minimum walking move speed (can't exceed 30) ; UseAbsoluteOrientation (default 0) 0 = Have movement orientation adapted to walkpath (WO) / 1 = Absolute orientation (AO) / 2 = WO for analog sticks, AO for D-pad and keys / 3 = WO for D-pad and keys, AO for analog sticks (behaviour of the PSX version) Enabled = 1 MinimumSpeed = 5 StickThreshold = 10 UseAbsoluteOrientation = 0 [Mod] ; Custom configurations and/or assets are loaded from custom folders inside the "FINAL FANTASY IX" root folder ; The "Priorities" field is only a hint for the Launcher's Mod Manager; mod priorities in-game are still defined by their order in "FolderNames" ; UseFileList (default 1) 0 = Don't use mod file lists / 1 = Do not generate the missing file lists of Mod Folders when launching the game but use it if it exists / 2 = Generate "ModFileList.txt" of active mods FolderNames = "AlternateFantasy", "HDChocographs", "MoguriFiles", "MoguriSoundtrack", "MoguriVideo" Priorities = "AlternateFantasy", "HDChocographs", "MoguriFiles", "MoguriSoundtrack", "MoguriVideo" UseFileList = 1 [SaveFile] ; DisableAutoSave (default 0) No auto-save is done during field transitions ; AutoSaveOnlyAtMoogle (default 0) Auto-saves are done only when entering places that natively have a save point (moogle or a save sphere in Memoria) and when entering the World Map ; SaveOnCloud (default 0) When saving to a moogle save, a copy is uploaded to the cloud, overwriting the (unique) Steam Cloud FF9 save DisableAutoSave = 0 AutoSaveOnlyAtMoogle = 0 SaveOnCloud = 0 [Control] ; DisableMouse (default 0) 0 = Can use the mouse to navigate in menus and move on the fields / 7 = Disable the mouse completly / 1 = Disable mouse for field menus and dialogs / 2 = Disable mouse for field movements / 4 = Disable mouse for battle menus ; DialogProgressButtons (default "Confirm") A list of buttons that can be used to progress in cutscene dialogs; the PSX version used "Confirm", "Special" ; WrapSomeMenus (default 1) 0 = Don't wrap selection in menu that don't natively wrap it / 1 = Wrap selection for easing menu navigation ; BattleAutoConfirm (default 1) 0 = Confirm needs to be pressed repeatedly / 1 = Holding Confirm will automatically validate commands during battle and progress the battle result screen ; TurboDialog (default 1) F9 - Toggles the automatic skipping of basic dialogs. Alternatively Holding Shift + Confirm or Right Bumper + Confirm also skips dialogs automatically. ; PSXScrollingMethod (default 1) 0 = Use the native Steam scrolling pattern / 1 = Scroll lists with the same behaviour as the PSX version ; PSXMovementMethod (default 1) 0 = Use the native Steam move pathing method, which makes movements faster on sloping paths / 1 = Use the PSX move pathing method ; AlwaysCaptureGamepad (default 1) 0 = Gamepad inputs are ignored when the game windows doesn't have focus / 1 = Gamepad inputs are always in effect Enabled = 1 AlwaysCaptureGamepad = 1 BattleAutoConfirm = 1 DialogProgressButtons = "Confirm" DisableMouse = 0 PSXMovementMethod = 0 PSXScrollingMethod = 1 TurboDialog = 1 WrapSomeMenus = 1 [Interface] ; Setup UI parameters by pressing Alt+F1 in-game ; PSXBattleMenu (default 0) 0 = Command menu is disposed as a 2x3 table / 1 = Command menu is disposed in a column with Change/Defend accessible with left/right keys ; ScanDisplay (default 1) 0 = Informations given by Scan are displayed as successive messages / 1 = Scan opens an information panel ; BattleCommandTitleFormat (default empty) Custom format string for displaying the ability names on cast; use eg. CommandTitle + ' ([FFCC00]' + CasterName + '[FFFFFF])' to append the caster's name in yellow ; BattleDamageTextFormat (default empty) Custom format string of the damage display in-battle; use eg. '[FF6600]' + BaseText for a custom hexa RGB color ; BattleRestoreTextFormat (default empty) Same as above for HP heal ; BattleMPDamageTextFormat (default empty) Same as above for MP damage ; BattleMPRestoreTextFormat (default empty) Same as above for MP heal ; FadeDuration (default 40, original game 300) Duration of the fade between interface transitions in milliseconds, navigation cannot occur during transition. Setting it to 0 will allow instant navigation. BattleColumnCount = 1 BattleCommandTitleFormat = BattleDamageTextFormat = BattleDetailHeight = 230 BattleDetailPosX = 345 BattleDetailPosY = -380 BattleDetailWidth = 796 BattleMenuHeight = 236 BattleMenuPosX = -400 BattleMenuPosY = -362 BattleMenuWidth = 630 BattleMPDamageTextFormat = BattleMPRestoreTextFormat = BattleRestoreTextFormat = BattleRowCount = 5 MenuAbilityRowCount = 6 MenuChocographRowCount = 5 MenuEquipRowCount = 5 MenuItemRowCount = 8 FadeDuration = 40 PSXBattleMenu = 0 ScanDisplay = 1 [Speedrun] ; SplitSettingsPath: A path to a text file defining splits with their trigger conditions ; LogGameTimePath: A path to a file in which the game timer will be written in real time Enabled = 0 SplitSettingsPath = LogGameTimePath =

IFireflyl commented 5 months ago

I am closing this. I completely uninstalled Final Fantasy IX and uninstalled the Moguri Mod. Then I deleted all remaining files in the Final Fantasy IX Steam folder and I reinstalled everything. I am no longer getting the error message. My only thought is that old files were conflicting with the newer updates. I have had Final Fantasy IX installed for years, and I have only updated Moguri Mod/Memoria Patcher when an update is available.

Tirlititi commented 5 months ago

Yes, the Alternate Fantasy's version that you had installed was an old one. That's what you had to update. Glad to see you got it fixed.

IFireflyl commented 4 months ago

How do I update this inside of the Memoria Mod Manager? Is there an update button that I am missing? Do you have to delete and reinstall the mod to update it?

snouz commented 4 months ago

How do I update this inside of the Memoria Mod Manager? Is there an update button that I am missing? Do you have to delete and reinstall the mod to update it?

When you download a mod from Mod manager, if the folder exists, it prompts you if you want it to delete the old folder to put the new one. So to update one, just re-download