Jump to content

Monoman1

Contributor
  • Posts

    7141
  • Joined

  • Days Won

    1

Recent Profile Visitors

The recent visitors block is disabled and is not being shown to other users.

  1. Monoman1

    Events

    MGF broadcasts a number of useful events. Game Events: Location Events: Collision Events: Pregnancy Event (See also blog section 'Pregnancy Fork'): Crafting: Reference Load: Actors Meet Event: Service Events: More....
  2. Monoman1

    Load Order Monitor

    I've often wondered how many OnPlayerLoadGame events are fired when you load a save. A huge chunk of these would be compatibility checks. Event OnPlayerLoadGame() If Game.GetModByName("CoolMod.esp") != 255 ; CoolMod is installed. ; Do Stuff. Else ; CoolMod is not installed. ; Do other stuff. EndIf EndEvent Inefficient - How many of these checks end up doing nothing really? - Yup 'CoolMod.esp' still IS or is NOT installed. What percentage of save loads has your load order actually changed? And it leads to a huge spike in papyrus activity right when you kind of don't want it. Alternatively you can register with MGF for load order change events and it will let you know when you need to check for real. Usage: Event OnInit() RegisterForModEvent("_MGF_LoadOrderChanged", "On_MGF_LoadOrderChanged") EndEvent Now any time mods: are added. removed. the order of mods changed (nothing was necessarily added or removed). the modified timestamp has changed on a plugin file. Something's actually changed. You'll get this event: Event On_MGF_LoadOrderChanged(Bool OrderChanged, Bool ModsAdded, Bool ModsRemoved, Bool ModsModified) ; OrderChanged - The order has simply changed since last load. ; ModsAdded - Mods were added since the last load. ; ModsRemoved - Mods were removed since last load. ; ModsModified - At least one of the plugin files has been modified since the last load. ; All these flags are set individually -> ModsAdded and ModsRemoved could both be true! EndFunction You can use these functions to pull a list of what's changed: ; Returns a string array of the mods added since last load. String[] Function GetAddedMods() Global Native ; Returns a string array of the mods removed since last load. String[] Function GetRemovedMods() Global Native ; Returns a string array of the mods modifed (time modified check) since last load. ; Note this detects changes to the esp. And not changes to scripts (unless properties were changed). String[] Function GetModifiedMods() Global Native Additional functions that might be useful: ; Returns a string array of the current load order. String[] Function GetCurrentLoadOrder() Global Native ; Returns a string array of the previous load order. String[] Function GetPreviousLoadOrder() Global Native Example usage: Event On_MGF_LoadOrderChanged(Bool OrderChanged, Bool ModsAdded, Bool ModsRemoved, Bool ModsModified) If ModsAdded String[] AddedMods = _MGF_Util.GetAddedMods() If AddedMods.Find("CoolArmorMod.esp") > -1 ; Cool armor mod added. Add it's armors to my shop! EndIf EndIf If ModsRemoved String[] RemovedMods = _MGF_Util.GetRemovedMods() Debug.Notification("Removed " + RemovedMods.Length + " mods") EndIf If ModsModified String[] ModifiedMods = _MGF_Util.GetModifiedMods() If ModifiedMods.Find("CoolArmorMod.esp") > -1 ; Check if CoolArmorMod.esp added a new armor set for my shop! EndIf EndIf If OrderChanged Debug.Notification("Load order was rearranged") HandleOrderChange() EndIf EndEvent This load order event is used extensively in MGF's interface scripts.
  3. Monoman1

    LocOps

    LocOps - Location Operations - The yellow pages of Skyrim. Get information about the area you're in. The system is data driven and can be expanded via Json. I've already got one for JK's Skyrim. Multiple jsons are 'rolled together' for a complete picture. Highlights: Look up people by roles/location, Jarl's, Stewards, House carls, Court wizards, Inn keepers, blacksmiths, shop keepers, etc. Respects civil war status. Location agnostic. You don't need to know where the player is. MGF will figure that out for you. Layered area, hold, world scripts/functions. Slaverun status. Vanilla home ownership. Thane status. Custom roles. You can expand the lookup with custom roles (not Jarl, Blacksmith etc) via Json. Eg: 'Tailor'. Again duplicate roles will be rolled together. Coming soon: Get the closest whatever - Example in LocOpsWorld. 2 'Points Of Interest' quests - (Area / Hold) with aliases that are automatically populated on area/hold change: Some of these I'm still cleaning up. LocOpsArea: LocOpsHold: LocOpsWorld:
  4. A pretty comprehensive array of ConstructibleObject functions. Highlights: Crafting event. Other mods have crafting events. This one includes the exact recipe used. Find every recipe for an item or ingredient. Recursively calculate what your ingredients can ultimately produce. Iron Ore -> Iron Ingot -> Iron Dagger. Check craftability (what you can actually craft right now with what's in your inventory), includes perk and condition checks. Calculate material costs, output values, profits and profit margins. Find the most profitable recipes. Built in token compatibility system for mods like CACO that represent items like flour via hidden inventory tokens. Surface thus far:
  5. Monoman1

    Room Mapping System

    This system uses the navmesh to build a picture of what kind of shape an interior cell takes. This allows you to ask questions like: How many rooms in this cell? What room am I in? Who's in this room with me? What kind of things are in this room? What rooms are adjacent to this room? How many exits does this room have? Where are the exits from this room? Where are the exits from this cell? Roughly what size is a room? And by extension which room is the biggest/smallest? Roughly where is the center? How far is the actual path between two actors? (They may be physically close but there might also be a wall in the way). Any actor or object ref can be tracked for room change events. If Belethor room == 1 & Player room == 1 then Belethor and the player are in the same room. If Player room changes to 2. Should Belethor follow the player? I hope to eventually be able to give you an idea of the purpose of the room though this could never be absolutely definitive. Here's a video of me plodding around a couple of cells. The player is tracked for room change events. Every time the player changes room we get an event to tell you which room I was in and which room I'm in now. AutoRoomMap is turned on so every time I change room the system maps out the current room with soul gems - It's a visual debugging functionality to make sure the map is right. API surface thus far:
  6. Monoman1

    LocTrack

    Mcgufin's player location tracking system has several layers: Cell: Area / Hold / World Tracking: Area Proximity:
  7. Monoman1

    Fork Pregnancy

    Pregnancy Fork is an interoperability adapter layer that presents a single unified surface for modders to use. Single surface interface to 2/3 backend pregnancy mods. Modders don't need to know anything about the underlying pregnancy mod a user has installed. Another great feature of this approach is that expanding the system to include another pregnancy mod simply involves authoring a new backend interface. Once that backend interface is in place then any mod accessing pregnancy functions via MGF is automatically compatible with the new pregnancy mod without any changes on their end! Structure: Highlights: Unified pregnancy events - _MGF_Preg_Conceived, _MGF_Preg_LaborStarted, _MGF_Preg_Birthed, _MGF_Preg_Aborted. Query functions - IsPregnant(), GetFathers(), GetFatherRaces(), GetPregnancyPercent(), GetTrimester(), GetCyclePhase(). 'Action' functions - Impregnate(), ForceLabor(), Abort(). Faction Data: MGF_PregStatusFact. Rank -1/0 - Not pregnant. 1 -> First trimester. 2 -> Second trimester. 3 -> Third trimester. _MGF_PregActiveWithPcFact - This Npc is the Father of the player's current pregnancy. _MGF_PregConceivedWithPcFact - This Npc has conceived with a female player <FactionRank> times. _MGF_PregBirthedWithPcFact - This Npc has Fathered <FactionRank> babies with a female player. Mods: Fertility Mode v3 Fixes and Tweaks - Built, tested. Beeing Female NG - Built, requires testing currently. Fertility Mode Reloaded - In process. Fertility Mode (base) and Beeing Female (base) - Unsupported. _MGF_ForkPregnancy:
  8. Monoman1

    Fork Needs

    Fork Needs is similar to ForkPregnancy - A interoperability adapter layer that presents a single unified surface for modders to integrate with. ForkNeeds grants seamless access to Rnd, iNeed, Last Seed & Sunhelm without the modder needing to know or understand the underlying mod. Expanding the system to include another needs mod simply involves authoring a new backend interface. Once that backend interface is in place then any mod accessing Needs functions via MGF is automatically compatible with the new needs mod without any changes on their end. Very handy! Highlights: GetHungerPercent(), ModHungerPercent(), SetHungerPercent(), GetHungerLevelString() Same as above but for thirst and fatigue. There are additional forks for pregnancy, warmth (Frostfall, Sunhelm) and some others but I don't want to commit on those just yet. _MGF_ForkNeeds:
  9. Monoman1

    Array Utilites

    Massive library of native array functions and I'm still fleshing out types and adding new function types. There's so many now that I recently had to split _MGF_Array to _MGF_ArrayCreate, _MGF_ArrayEdit, _MGF_ArrayQuery due to function declaration overload... Super boring but also extremely useful. _MGF_ArrayCreate: _MGF_ArrayEdit: _MGF_ArrayQuery:
  10. Monoman1

    Find

    Find/filter functions with practically every filtering parameter you could ever want. Find: Actors around the player or any other (loaded) reference. Actors 'in' a location, or sublocations of that location. Actors who were placed in the editor at a certain location. Actors who were placed in the editor within a specific cell. ObjectReferences around the player or another ref. Armor records. Forms. Locations. Filter actors by: Distance. Faction. Race. Mod. Gender. Dead. Unique. Child. In a scene. In combat. Hostile to the player. Searching (Sneaking player searching) Alarmed (Actor approaching the player for crime) Actor. Filter armors by: Keywords. Name. Slot. Enchantment. Filter forms by: Form type (Armor, spell, basically anything - https://ck.uesp.net/wiki/GetType_-_Form) Keywords. Mod. Name. EditorID. Most of these function have both a direct array return, or if you're expecting a lot of results, a formlist filling version. Take a deep breath before opening the spoiler... This is not as bad as it looks. And once you understand one, the rest will fall into place pretty quickly.
  11. Monoman1

    MGF

    Ha. Yep, that pretty much an idea I've had for the system. Right down to the panty stealing. And it's pretty doable right now. Dynamically even. ObjectReference[] akBeds = _MGF_Util.GetActorBeds(akActor) ; Confidence sorted list of beds. If akBeds.Length ; Found at least one bed used by akActor Int akRoom = _MGF_Util.RoomGetIndexForRef(akBeds[0]) ; Which room their bed is in. ObjectReference[] akContainers = _MGF_Util.RoomGetRefsOfType(RoomIndex = akRoom, FormType = 28, ExpandOverOpenBoundary = false) ; Find all containers in the room. If akContainers.Length ; Found at least one container in akActors room - Place in container ObjectReference akCont = akContainers[Utility.RandomInt(0, akContainers.Length - 1)] ; Pick a random container ObjRef akActorsPanties = akCont.PlaceAtMe(PantyForm) ; Spawn a panty object akActorsPanties.SetDisplayName(akActor.GetDisplayName() + "'s Panties") ; Set an identifying name on your prize. SomeAlias.ForceRefTo(akActorsPanties) ; For persistence and container change (pick up) events. akCont.AddItem(akActorPanties) ; Add panty ref to container. ; Done. Your panty hunt is ready to begin. Else ; Place on the floor/bed maybe EndIf EndIf As for designating areas off-limits - sub areas of cells. Yes, also one of the intentions I've had for the system. Probably have to place invisible markers in rooms the player shouldn't be in. Possibly two different types of markers. 1 - A sort of soft, trespassing marker. 2 - A hard "WTF are you doing in here!" type marker. Designating RoomIndexes would be too fragile I think. If I ever get the dynamic room classification system working well, some of it could be done dynamically. "What are you doing in my bedroom?". Can also be used for context awareness, stealth, sound, AI etc.
  12. Link to "Fertility Mode Reloaded" please ? I can't seem to find it...
  13. Monoman1

    MGF

    Just wanted to show off a little something I've been working on. This is the Room Mapping system in MGF. Does what you think it does. What you see is the ActorRoomChange event being received which triggers a RoomMap() for the current room using static soul gems as navmesh vertex markers to visually define the room (for debugging purposes). API surface thus far:
  14. Blink - Short Range Teleportation Spells View File Blink - Short Range Teleportation Spells with a 'Dishonored' style snappy destination indicator + ledge climbing detection (SKSE plugin). Great for reaching difficult to get to places, evasion, thieving & assassining. 5 Teleportation spells. 0 - Blinkstep - Novice - Very short range. 1 - Smokestep - Apprentice - Short range. 2 - Shadowstep - Adept - Modest range, silent. 3 - Ghoststep - Expert - Long range, silent, targeting an actor places you behind that actor. 4 - Wraithstep - Master - Very long range, silent, assassin targeting like Ghoststep. Dual casting extends the range of teleportation. Ledge detection: Targeting near the top of a ledge places the destination indicator on top of the ledge. It's not perfect but pretty good. Aim more perpendicular to a wall is best. And sometimes aiming lower on a ledge wall can give better results. Lower tier spells are shorter range and take longer to cast. Higher tier spells have longer range and are quicker to cast. Spell tomes automatically added to leveled lists on game load. Configurable via json. AE only. (Maybe SE & VR - don't know). Definitely not LE. To do: Combat disengagement. Possibly more effects for higher level spells, especially when in combat. Better visuals/sounds. Warnings: Tested but BETA. Use at your own risk. Should be obvious, but I'll say it anyway, don't be a dumbass with the spell. There's probably a million ways you could break quests with it by teleporting over obstacles etc. Just don't be stupid. Submitter Monoman1 Submitted 11/16/2025 Category Regular Mods Requirements Skyrim AE Regular Edition Compatible No Install Instructions  
×
×
  • Create New...