Skip to content

SkyrimScripting/WIP_SKSE_StarterKit

Repository files navigation

⚠️ WORK IN PROGRESS ⚠️



📜 other templates available at https://github.com/SkyrimScripting/SKSE_Templates

Skyrim Scripting SKSE Starter Kit


A simple SKSE plugin for Skyrim using:

Because this uses CommonLibSSE NG, it supports Skyrim SSE, AE, GOG, and VR!

Features

  • Easy deployment to mods folder (or Data/ folder)
  • Easy SKSE event handlers!
  • Easy game event handlers!
  • Easy Papyrus script bindings! (with easy script deployment!)
  • Easy Save/Load data handlers!

What does it do?

  • It writes "Hello log from SKSE Starter Kit!" to a log file in My Games/Skyrim Special Edition/SKSE/
  • It writes "Hello console from SKSE Starter Kit!" to the ~ game console (viewable from the Main Menu)
  • Everytime any object in the game is activated, it logs details about the activation to the log file.

Read plugin.cpp for details on what it's doing!

Skyrim Scripting helper libraries

Whereas the other templates use the raw features provided by CommonLibSSE-NG, the Starter Kit uses Skyrim Scripting authored helpers to make your SKSE development easier!

// Simply #include Plugin.h in your main .cpp file
#include <SkyrimScripting/Plugin.h>

// Then you can use a variety of macros for registering code to run at different points
OnInit {
    logger::info("Hello, plugin!");
}

// This event is when all of the Forms have been loaded, but it is
// also *basically* the same time as the Main Menu (and console) become ready
OnDataLoaded {
    ConsoleLog("Hello, console!");
}

// If there are certain events that you want to listen to, it's easy as well:
EventHandlers {
    On<RE::TESActivateEvent>([](const RE::TESActivateEvent* event) {
        auto activated = event->objectActivated->GetBaseObject()->GetName();
        auto activator = event->actionRef->GetBaseObject()->GetName();
        // This will print things to the game console like:
        // Hod activated Mill
        // Hilde activated Door
        ConsoleLog("{} activated {}", activator, activated);
    });
}

See https://github.com/SkyrimScripting/Plugin for latest documentation.

# Load in your CMakeLists.txt
find_package(SkyrimScripting.CMake CONFIG REQUIRED)

# And simply define an "SKSE plugin"
# This is the magic which automatically deploys your mod to CMAKE_SKYRIM_MODS_FOLDER
add_skse_plugin(${PROJECT_NAME} SOURCES plugin.cpp)

# If you are using SkyrimScripting.Plugin, you currently need to manually link that:
find_package(SkyrimScripting.Plugin CONFIG REQUIRED)
target_link_libraries(${PROJECT_NAME} PRIVATE SkyrimScriptingPlugin::SkyrimScripting.Plugin)

See https://github.com/SkyrimScripting/CMake for latest documentation.

Requirements

  • Visual Studio 2022 (the free Community edition is fine!)
  • CMake 3.25.1+ (please install the Latest Release)
  • vcpkg
      1. Clone the repository using git OR download it as a .zip
      1. Go into the vcpkg folder and double-click on bootstrap-vcpkg.bat
      1. Edit your system or user Environment Variables and add a new one:
      • Name: VCPKG_ROOT
        Value: C:\path\to\wherever\your\vcpkg\folder\is

Once you have Visual Studio 2022 installed, you can open this folder in basically any C++ editor, e.g. VS Code or CLion or Visual Studio

  • for VS Code, if you are not automatically prompted to install the C++ and CMake Tools extensions, please install those and then close VS Code and then open this project as a folder in VS Code

You may need to click OK on a few windows, but the project should automatically run CMake!

It will automatically download CommonLibSSE NG and everything you need to get started making your new plugin!

Project setup

By default, when this project compiles it will output a .dll for your SKSE plugin into the build/ folder.

But you probably want to put the .dll into your Skyrim mods folder, e.g. the mods folder used by Mod Organizer 2 or Vortex.

You can configure this project to automatically output the SKSE plugin .dll into:

  • <your mods folder>\<name you give this project>\SKSE\Plugins\<your mod>.dll
    if you set the CMAKE_SKYRIM_MODS_FOLDER environment variable to the root of your mods folder (i.e. <your mods folder>)

  • Example:

    • Name: CMAKE_SKYRIM_MODS_FOLDER
      Value: C:\path\to\wherever\your\Skyrim\mods\are

If you would prefer to deploy mods directly to your Skyrim Data/ folder, you can set the CMAKE_SKYRIM_FOLDER to the path of your Skyrim folder. If the CMAKE_SKYRIM_MODS_FOLDER variable is no defined but CMAKE_SKYRIM_FOLDER contains a valid path to your Skyrim folder, your SKSE plugin will be output directly into your Data/SKSE/Plugins/ folder.

Setup your own repository

If you clone this template on GitHub, please:

  • Go into LICENSE and change the year and change <YOUR NAME HERE> to your name.
  • Go into CODE_OF_CONDUCT.md and change <YOUR CONTACT INFO HERE> to your contact information.

It's good to have a Code of Conduct and GitHub will show your project's CODE_OF_CONDUCT.md in the project sidebar.

If you'd like to know more about open source licenses, see:

If you use this template, PLEASE release your project as a public open source project. 💖

PLEASE DO NOT RELEASE YOUR SKSE PLUGIN ON NEXUS/ETC WITHOUT MAKING THE SOURCE CODE AVAILABLE