Description
Changelog
Reviews
Enhanced Save System
Overview
Enhanced Save System is a comprehensive save system plugin for Godot, providing a modular save solution with input remapping, auto-save, save screenshots, and encryption features.
Features
Core Features
- Pure JSON Storage :Fast, human-readable, no reference resolution overhead
- Modular Polymorphism :Each ISaveModule subclass manages its own data domain
- Dual-track Save :
- Global save (global.json):Settings, statistics, and other slot-independent data
- Slot save (slot_01.json … slot_N.json):Level progress, player state, etc.
- Writer Accumulation Mode :Collect all module changes first → write to disk once (reduce I/O)
- Auto-save :Configurable auto-save interval and slot
- Save Screenshots :Automatically capture screenshots when saving game state
- Save Encryption :Optional save file encryption
- Import/Export :Support for save file migration
- Input Remapping :Built-in input key customization system
Module System
- player_module :Player state management
- level_module :Level progress management
- settings_module :Game settings management
- stats_module :Game statistics management
- keybinding_module :Input key management
Installation
- Copy the addons/enhance_save_system directory to your Godot project's addons directory
- In Godot editor, go to Project > Project Settings > Plugins and enable "Enhanced Save System"
- The plugin will automatically register SaveSystem as an AutoLoad singleton
Quick Start
Basic Usage
# Save global + current slot
SaveSystem.quick_save()
# Load global + current slot
SaveSystem.quick_load()
# Save to specific slot
SaveSystem.save_slot(2)
# Load from specific slot
SaveSystem.load_slot(2)
# Export slot save
SaveSystem.export_slot(1, "user://
backup/slot1.json")
# Import slot save
SaveSystem.import_slot(1, "user://
backup/slot1.json")
Register Custom Modules
# Register custom module in scene's
_ready function
func _ready():
SaveSystem.register_module
(MyCustomModule.new())
Configuration Options
In Godot editor, select the SaveSystem node in AutoLoad, you can configure the following options in Inspector:
- max_slots :Maximum number of slots (1-based)
- auto_register :Whether to automatically scan and register modules in Modules/ directory
- auto_load_global :Whether to automatically load global save on startup
- auto_load_slot :Slot to automatically load on startup (0 = no auto load)
- game_version :Game version written to save metadata
- auto_save_enabled :Whether to enable auto-save
- auto_save_interval :Auto-save interval (seconds)
- auto_save_slot :Auto-save slot
- save_screenshots_enabled :Whether to enable save screenshots
- screenshot_width :Screenshot width
- screenshot_height :Screenshot height
- encryption_enabled :Whether to enable save encryption
- encryption_key :Encryption key
Signal List
- global_saved(ok) :Global save write completion
- global_loaded(ok) :Global save read completion
- slot_saved(slot, ok) :Specific slot write completion
- slot_loaded(slot, ok) :Specific slot read completion
- slot_deleted(slot) :Slot file deleted
- slot_changed(slot) :Current active slot changed
Directory Structure
enhance_save_system/
├── Components/ # UI components
│ └── InputRemapping/ # Input remapping components
├── Modules/ # Save modules
│ ├── keybinding_module.gd
│ ├── level_module.gd
│ ├── player_module.gd
│ ├── settings_module.gd
│ └── stats_module.gd
├── core/ # Core functionality
│ ├── i_save_module.gd
│ ├── resource_serializer.gd
│ ├── save_resource.gd
│ ├── save_system.gd
│ ├── save_writer.gd
│ └── slot_info.gd
├── demo/ # Example scenes
├── templates/ # Template files
├── plugin.cfg
└── save_plugin.gd
Custom Modules
Create Global Module
- Copy templates/custom_global_module.gd to your project
- Modify class name and module key
- Implement collect_data and apply_data methods
- Call SaveSystem.register_module() to register the module
Create Slot Module
- Copy templates/custom_slot_module.gd to your project
- Modify class name and module key
- Implement collect_data and apply_data methods
- Call SaveSystem.register_module() to register the module
Input Remapping
Usage
- Add keybinding_ui.tscn component to your scene
- Or create it with code:
var keybinding_ui = preload("res://
addons/enhance_save_system/
Components/InputRemapping/
keybinding_ui.tscn").instantiate()
add_child(keybinding_ui)
Example Scenes
The plugin includes the following example scenes:
- SaveDemo.tscn :Basic save functionality demo
- enhanced_save_demo.tscn :Enhanced features demo
- encryption_test.tscn :Encryption functionality test
- import_export_demo.tscn :Import/export functionality demo
Performance Optimization
- Reduce I/O Operations :Use Writer accumulation mode, write to disk once
- Asynchronous Operations :Save operations are executed in the main thread, but designed to minimize blocking
- Modular Design :Each module only handles its own data, improving maintainability
Compatibility
- Supports Godot 4.0 and above
- Pure GDScript implementation, no external dependencies
License
MIT License
Changelog for version v1.1
No changelog provided for this version.