Compare commits
14 Commits
Author | SHA1 | Date | |
---|---|---|---|
8e1566938a | |||
![]() |
570556f0a6 | ||
![]() |
4c2dbd7be5 | ||
![]() |
0a04a3c480 | ||
![]() |
c30b5204a6 | ||
![]() |
e0ff6013f0 | ||
![]() |
c24b967e2a | ||
752ec7d2fd | |||
![]() |
e2c4a0d97b | ||
![]() |
d7bd0b92bb | ||
![]() |
d03ef47489 | ||
37a798d272 | |||
![]() |
7c1b81ec92 | ||
9d167dee37 |
3
.github/workflows/build.yml
vendored
3
.github/workflows/build.yml
vendored
@ -10,12 +10,13 @@ on:
|
|||||||
- "tools/**"
|
- "tools/**"
|
||||||
- "LICENSE"
|
- "LICENSE"
|
||||||
- "README.md"
|
- "README.md"
|
||||||
|
- "*.json"
|
||||||
workflow_dispatch:
|
workflow_dispatch:
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
build:
|
build:
|
||||||
name: Build
|
name: Build
|
||||||
runs-on: ubuntu-22.04
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout Source Code
|
- name: Checkout Source Code
|
||||||
uses: actions/checkout@v4
|
uses: actions/checkout@v4
|
||||||
|
@ -1,13 +1,20 @@
|
|||||||
name = "PMC Simulator 3.0 Mod"
|
name = "FORGE Mod"
|
||||||
author = "IDSolutions"
|
author = "IDSolutions"
|
||||||
prefix = "pmcs"
|
prefix = "forge"
|
||||||
mainprefix = "z"
|
mainprefix = "z"
|
||||||
|
|
||||||
[files]
|
[files]
|
||||||
include = [
|
include = [
|
||||||
"pmcs_mod_version.json",
|
|
||||||
"*.paa",
|
"*.paa",
|
||||||
"userconfig/**/*"
|
"*.json",
|
||||||
|
"userconfig/**/*",
|
||||||
|
"mod.cpp",
|
||||||
|
"README.md",
|
||||||
|
"LICENSE",
|
||||||
|
"icon_64_ca.paa",
|
||||||
|
"icon_128_ca.paa",
|
||||||
|
"icon_128_highlight_ca.paa",
|
||||||
|
"title_co.paa"
|
||||||
]
|
]
|
||||||
|
|
||||||
[version]
|
[version]
|
||||||
|
50
README.md
50
README.md
@ -7,18 +7,52 @@
|
|||||||
<img src="https://gitea.innovativedevsolutions.org/IDSolutions/mod/actions/workflows/build.yml/badge.svg?branch=master" alt="build-status" /></a>
|
<img src="https://gitea.innovativedevsolutions.org/IDSolutions/mod/actions/workflows/build.yml/badge.svg?branch=master" alt="build-status" /></a>
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
Welcome to **SOF Mod**.
|
Arma 3 FORGE Mod: Modern Combat Interface\
|
||||||
|
Version: Alpha 0.1.0
|
||||||
|
|
||||||
This addon was designed for PMC Simulator 3.0.
|
[Development Status: Active]
|
||||||
|
|
||||||
If something is broken, contact **jschmidt92** or open a new issue on **[Gitea](https://gitea.innovativedevsolutions.org/IDSolutions/mod/issues)**.
|
---
|
||||||
|
|
||||||
</br>
|
Transform your battlefield communications with Arma 3 FORGE Mod, introducing next-generation mobile interfaces for modern warfare. Starting with an innovative phone and tablet system, this framework sets the foundation for future combat technology integration.
|
||||||
|
|
||||||
**For more information, [visit the Wiki.](https://innovativedevsolutions.org/knowledgebase)**
|
Key Features:
|
||||||
|
---
|
||||||
|
* Mobile Command: Access mission-critical information through sleek phone and tablet interfaces
|
||||||
|
* Tactical Communications: Coordinate with your team using modern mobile devices
|
||||||
|
* Modular Framework: Built for expansion with new devices and capabilities
|
||||||
|
* Clean Interface: Intuitive UI design focused on combat effectiveness
|
||||||
|
* Real-time Updates: Stay connected to your organization's operations
|
||||||
|
* Future-ready: Structured for continuous feature expansion
|
||||||
|
|
||||||
**For additional tools, [visit the Website.](https://innovativedevsolutions.org)**
|
Perfect for:
|
||||||
|
* Modern combat scenarios
|
||||||
|
* Team communications
|
||||||
|
* Strategic coordination
|
||||||
|
* Tactical planning
|
||||||
|
|
||||||
## Contributors
|
Coming Features:
|
||||||
|
* Advanced device capabilities
|
||||||
|
* Enhanced UI elements
|
||||||
|
* Expanded communication tools
|
||||||
|
* New technology integration
|
||||||
|
|
||||||
- **_Creedcoder_** for his help and input
|
Technical Features:
|
||||||
|
---
|
||||||
|
* Modern UI Framework
|
||||||
|
* Event-Driven Systems
|
||||||
|
* Expandable Device Architecture
|
||||||
|
* Developer-friendly Structure
|
||||||
|
|
||||||
|
Support & Development
|
||||||
|
---
|
||||||
|
* Regular Updates
|
||||||
|
* Developer Documentation
|
||||||
|
* Community Input Welcome
|
||||||
|
* Technical Support
|
||||||
|
|
||||||
|
License:
|
||||||
|
---
|
||||||
|
This mod is licensed under the [Arma Public License (APL-SA)](https://www.bohemia.net/community/licenses/arma-public-license-share-alike).
|
||||||
|
|
||||||
|
Experience the future of battlefield communications with FORGE Mod.
|
1
addons/audio/$PBOPREFIX$
Normal file
1
addons/audio/$PBOPREFIX$
Normal file
@ -0,0 +1 @@
|
|||||||
|
z\forge\addons\audio
|
19
addons/audio/CfgEventHandlers.hpp
Normal file
19
addons/audio/CfgEventHandlers.hpp
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
class Extended_PreStart_EventHandlers {
|
||||||
|
class ADDON {
|
||||||
|
init = QUOTE(call COMPILE_FILE(XEH_preStart));
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
class Extended_PreInit_EventHandlers {
|
||||||
|
class ADDON {
|
||||||
|
init = QUOTE(call COMPILE_FILE(XEH_preInit));
|
||||||
|
serverInit = QUOTE(call COMPILE_FILE(XEH_preInit_server));
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
class Extended_PostInit_EventHandlers {
|
||||||
|
class ADDON {
|
||||||
|
init = QUOTE(call COMPILE_FILE(XEH_postInit));
|
||||||
|
clientInit = QUOTE(call COMPILE_FILE(XEH_postInit_client));
|
||||||
|
};
|
||||||
|
};
|
1
addons/audio/CfgSentences.hpp
Normal file
1
addons/audio/CfgSentences.hpp
Normal file
@ -0,0 +1 @@
|
|||||||
|
class CfgSentences {};
|
24
addons/audio/CfgSounds.hpp
Normal file
24
addons/audio/CfgSounds.hpp
Normal file
@ -0,0 +1,24 @@
|
|||||||
|
class CfgSounds {
|
||||||
|
sounds[] = {};
|
||||||
|
class FORGE_timerBeep {
|
||||||
|
name = "FORGE_timerBeep";
|
||||||
|
sound[] = {QUOTE(PATHTOF(sounds\timerClick.wav)), 1, 3};
|
||||||
|
titles[] = {};
|
||||||
|
};
|
||||||
|
class FORGE_timerBeepShort {
|
||||||
|
name = "FORGE_timerBeepShort";
|
||||||
|
sound[] = {QUOTE(PATHTOF(sounds\timerClickShort.wav)), 1, 3};
|
||||||
|
titles[] = {};
|
||||||
|
};
|
||||||
|
class FORGE_timerEnd {
|
||||||
|
name = "FORGE_timerEnd";
|
||||||
|
sound[] = {QUOTE(PATHTOF(sounds\timerEnd.wav)), 1, 3};
|
||||||
|
titles[] = {};
|
||||||
|
};
|
||||||
|
class FORGE_defused {
|
||||||
|
name = "FORGE_defused";
|
||||||
|
sound[] = {QUOTE(PATHTOF(sounds\defused.wav)), 1, 3};
|
||||||
|
titles[] = {};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
class CfgSFX {};
|
16
addons/audio/CfgVehicles.hpp
Normal file
16
addons/audio/CfgVehicles.hpp
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
class CfgVehicles {
|
||||||
|
class All;
|
||||||
|
class Sound: All {
|
||||||
|
author = "FORGE";
|
||||||
|
mapSize = 1;
|
||||||
|
_generalMacro = "Sound";
|
||||||
|
scope = 0;
|
||||||
|
side = -1;
|
||||||
|
animated = 0;
|
||||||
|
vehicleClass = "Sounds";
|
||||||
|
icon = "iconSound";
|
||||||
|
faction = "none";
|
||||||
|
editorCategory = "forge";
|
||||||
|
editorSubcategory = "forge_audio";
|
||||||
|
};
|
||||||
|
};
|
0
addons/audio/XEH_PREP.hpp
Normal file
0
addons/audio/XEH_PREP.hpp
Normal file
1
addons/audio/XEH_postInit.sqf
Normal file
1
addons/audio/XEH_postInit.sqf
Normal file
@ -0,0 +1 @@
|
|||||||
|
#include "script_component.hpp"
|
1
addons/audio/XEH_postInit_client.sqf
Normal file
1
addons/audio/XEH_postInit_client.sqf
Normal file
@ -0,0 +1 @@
|
|||||||
|
#include "script_component.hpp"
|
8
addons/audio/XEH_preInit.sqf
Normal file
8
addons/audio/XEH_preInit.sqf
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
#include "script_component.hpp"
|
||||||
|
ADDON = false;
|
||||||
|
|
||||||
|
PREP_RECOMPILE_START;
|
||||||
|
#include "XEH_PREP.hpp"
|
||||||
|
PREP_RECOMPILE_END;
|
||||||
|
|
||||||
|
ADDON = true;
|
1
addons/audio/XEH_preInit_server.sqf
Normal file
1
addons/audio/XEH_preInit_server.sqf
Normal file
@ -0,0 +1 @@
|
|||||||
|
#include "script_component.hpp"
|
2
addons/audio/XEH_preStart.sqf
Normal file
2
addons/audio/XEH_preStart.sqf
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
#include "script_component.hpp"
|
||||||
|
#include "XEH_PREP.hpp"
|
19
addons/audio/config.cpp
Normal file
19
addons/audio/config.cpp
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
#include "script_component.hpp"
|
||||||
|
|
||||||
|
class CfgPatches {
|
||||||
|
class ADDON {
|
||||||
|
name = COMPONENT_NAME;
|
||||||
|
units[] = {};
|
||||||
|
weapons[] = {};
|
||||||
|
requiredVersion = REQUIRED_VERSION;
|
||||||
|
requiredAddons[] = {"forge_main"};
|
||||||
|
authors[] = {"J. Schmidt", "Creedcoder"};
|
||||||
|
author = "IDSolutions";
|
||||||
|
VERSION_CONFIG;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
#include "CfgEventHandlers.hpp"
|
||||||
|
#include "CfgSounds.hpp"
|
||||||
|
#include "CfgSentences.hpp"
|
||||||
|
#include "CfgVehicles.hpp"
|
16
addons/audio/script_component.hpp
Normal file
16
addons/audio/script_component.hpp
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
#define COMPONENT audio
|
||||||
|
#define COMPONENT_BEAUTIFIED Audio
|
||||||
|
#include "..\main\script_mod.hpp"
|
||||||
|
|
||||||
|
// #define DEBUG_MODE_FULL
|
||||||
|
// #define DISABLE_COMPILE_CACHE
|
||||||
|
|
||||||
|
#ifdef DEBUG_ENABLED_AUDIO
|
||||||
|
#define DEBUG_MODE_FULL
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef DEBUG_SETTINGS_AUDIO
|
||||||
|
#define DEBUG_SETTINGS DEBUG_SETTINGS_AUDIO
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#include "..\main\script_macros.hpp"
|
BIN
addons/audio/sounds/defused.wav
Normal file
BIN
addons/audio/sounds/defused.wav
Normal file
Binary file not shown.
BIN
addons/audio/sounds/timerClick.wav
Normal file
BIN
addons/audio/sounds/timerClick.wav
Normal file
Binary file not shown.
BIN
addons/audio/sounds/timerClickShort.wav
Normal file
BIN
addons/audio/sounds/timerClickShort.wav
Normal file
Binary file not shown.
BIN
addons/audio/sounds/timerEnd.wav
Normal file
BIN
addons/audio/sounds/timerEnd.wav
Normal file
Binary file not shown.
@ -1 +1 @@
|
|||||||
z\pmcs\addons\main
|
z\forge\addons\main
|
@ -1,7 +1,7 @@
|
|||||||
class CfgMods {
|
class CfgMods {
|
||||||
class PREFIX {
|
class PREFIX {
|
||||||
dir = "@pmcs";
|
dir = "@forge";
|
||||||
name = "PMC Simulator 3.0 Mod";
|
name = "FORGE Mod";
|
||||||
author = "IDSolutions";
|
author = "IDSolutions";
|
||||||
picture = "title_co.paa";
|
picture = "title_co.paa";
|
||||||
hideName = "false";
|
hideName = "false";
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
#define MAINPREFIX z
|
#define MAINPREFIX z
|
||||||
#define PREFIX sof
|
#define PREFIX forge
|
||||||
|
|
||||||
#include "script_version.hpp"
|
#include "script_version.hpp"
|
||||||
|
|
||||||
@ -9,7 +9,7 @@
|
|||||||
#define REQUIRED_VERSION 2.12
|
#define REQUIRED_VERSION 2.12
|
||||||
|
|
||||||
#ifdef COMPONENT_BEAUTIFIED
|
#ifdef COMPONENT_BEAUTIFIED
|
||||||
#define COMPONENT_NAME QUOTE(SOF Mod - COMPONENT_BEAUTIFIED)
|
#define COMPONENT_NAME QUOTE(FORGE Mod - COMPONENT_BEAUTIFIED)
|
||||||
#else
|
#else
|
||||||
#define COMPONENT_NAME QUOTE(SOF Mod - COMPONENT)
|
#define COMPONENT_NAME QUOTE(FORGE Mod - COMPONENT)
|
||||||
#endif
|
#endif
|
@ -1,4 +1,4 @@
|
|||||||
#define MAJOR 1
|
#define MAJOR 1
|
||||||
#define MINOR 0
|
#define MINOR 0
|
||||||
#define PATCH 0
|
#define PATCH 0
|
||||||
#define BUILD 1
|
#define BUILD 2
|
||||||
|
@ -1 +1 @@
|
|||||||
z\pmcs\addons\phone
|
z\forge\addons\phone
|
@ -1,6 +1,6 @@
|
|||||||
class CfgVehicles {
|
class CfgVehicles {
|
||||||
class Item_Base_F;
|
class Item_Base_F;
|
||||||
class PMCS_Item_Phone: Item_Base_F {
|
class FORGE_Item_Phone: Item_Base_F {
|
||||||
scope = 2;
|
scope = 2;
|
||||||
scopeCurator = 2;
|
scopeCurator = 2;
|
||||||
author = "IDSolutions";
|
author = "IDSolutions";
|
||||||
@ -8,7 +8,7 @@ class CfgVehicles {
|
|||||||
vehicleClass = "Items";
|
vehicleClass = "Items";
|
||||||
|
|
||||||
class TransportItems {
|
class TransportItems {
|
||||||
MACRO_ADDITEM(PMCS_Phone,1);
|
MACRO_ADDITEM(FORGE_Phone,1);
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
};
|
};
|
@ -1,15 +1,15 @@
|
|||||||
class CfgWeapons {
|
class CfgWeapons {
|
||||||
class ACE_ItemCore;
|
class ACE_ItemCore;
|
||||||
class CBA_MiscItem_ItemInfo;
|
class CBA_MiscItem_ItemInfo;
|
||||||
class PMCS_Phone: ACE_ItemCore {
|
class FORGE_Phone: ACE_ItemCore {
|
||||||
scope = 2;
|
scope = 2;
|
||||||
scopeArsenal = 2;
|
scopeArsenal = 2;
|
||||||
scopeCurator = 2;
|
scopeCurator = 2;
|
||||||
author = "IDSolutions";
|
author = "IDSolutions";
|
||||||
displayName = "Phone";
|
displayName = "Phone";
|
||||||
picture = QPATHTOF(images\mobile_frame.paa);
|
picture = QPATHTOF(images\mobile_frame.paa);
|
||||||
model = QPATHTOF(data\pmcs_mobile.p3d);
|
model = QPATHTOF(data\forge_mobile.p3d);
|
||||||
descriptionShort = "PMC Simulator 3.0 cell phone for text-messaging and more.";
|
descriptionShort = "FORGE cell phone for text-messaging and more.";
|
||||||
hiddenSelections[] = {};
|
hiddenSelections[] = {};
|
||||||
hiddenSelectionsTextures[] = {};
|
hiddenSelectionsTextures[] = {};
|
||||||
|
|
||||||
|
@ -3,10 +3,10 @@
|
|||||||
class CfgPatches {
|
class CfgPatches {
|
||||||
class ADDON {
|
class ADDON {
|
||||||
name = COMPONENT_NAME;
|
name = COMPONENT_NAME;
|
||||||
units[] = {"PMCS_Item_Phone"};
|
units[] = {"FORGE_Item_Phone"};
|
||||||
weapons[] = {"PMCS_Phone"};
|
weapons[] = {"FORGE_Phone"};
|
||||||
requiredVersion = REQUIRED_VERSION;
|
requiredVersion = REQUIRED_VERSION;
|
||||||
requiredAddons[] = {"pmcs_main"};
|
requiredAddons[] = {"forge_main"};
|
||||||
authors[] = {"J. Schmidt", "Creedcoder"};
|
authors[] = {"J. Schmidt", "Creedcoder"};
|
||||||
author = "IDSolutions";
|
author = "IDSolutions";
|
||||||
VERSION_CONFIG;
|
VERSION_CONFIG;
|
||||||
|
Binary file not shown.
@ -7,7 +7,7 @@ specularPower=0;
|
|||||||
PixelShaderID = "NormalMapDetailSpecularDIMap";
|
PixelShaderID = "NormalMapDetailSpecularDIMap";
|
||||||
VertexShaderID = "NormalMap";
|
VertexShaderID = "NormalMap";
|
||||||
class Stage1 {
|
class Stage1 {
|
||||||
texture = "z\pmcs\addons\phone\data\pmcs_mobile_nohq.paa";
|
texture = "z\forge\addons\phone\data\forge_mobile_nohq.paa";
|
||||||
uvSource = "tex";
|
uvSource = "tex";
|
||||||
class uvTransform {
|
class uvTransform {
|
||||||
aside[] = {1,0,0};
|
aside[] = {1,0,0};
|
||||||
@ -17,7 +17,7 @@ class Stage1 {
|
|||||||
};
|
};
|
||||||
};
|
};
|
||||||
class Stage2 {
|
class Stage2 {
|
||||||
texture = "z\pmcs\addons\phone\data\pmcs_mobile_dt.paa";
|
texture = "z\forge\addons\phone\data\forge_mobile_dt.paa";
|
||||||
uvSource = "tex";
|
uvSource = "tex";
|
||||||
class uvTransform {
|
class uvTransform {
|
||||||
aside[] = {1,0,0};
|
aside[] = {1,0,0};
|
||||||
@ -27,7 +27,7 @@ class Stage2 {
|
|||||||
};
|
};
|
||||||
};
|
};
|
||||||
class Stage3 {
|
class Stage3 {
|
||||||
texture = "z\pmcs\addons\phone\data\pmcs_mobile_smdi.paa";
|
texture = "z\forge\addons\phone\data\forge_mobile_smdi.paa";
|
||||||
uvSource = "tex";
|
uvSource = "tex";
|
||||||
class uvTransform {
|
class uvTransform {
|
||||||
aside[] = {1,0,0};
|
aside[] = {1,0,0};
|
@ -8,7 +8,8 @@
|
|||||||
#ifdef DEBUG_ENABLED_PHONE
|
#ifdef DEBUG_ENABLED_PHONE
|
||||||
#define DEBUG_MODE_FULL
|
#define DEBUG_MODE_FULL
|
||||||
#endif
|
#endif
|
||||||
#ifdef DEBUG_SETTINGS_PHONE
|
|
||||||
|
#ifdef DEBUG_SETTINGS_PHONE
|
||||||
#define DEBUG_SETTINGS DEBUG_SETTINGS_PHONE
|
#define DEBUG_SETTINGS DEBUG_SETTINGS_PHONE
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
22
addons/phone/userconfig/forge_phone.hpp
Normal file
22
addons/phone/userconfig/forge_phone.hpp
Normal file
@ -0,0 +1,22 @@
|
|||||||
|
class CfgPhone {
|
||||||
|
class themes {
|
||||||
|
class bg_dark01 {
|
||||||
|
themeName = "Dark"; // Name of theme
|
||||||
|
themeBackground = "\@forge\userconfig\backgrounds\bgdark_01.paa"; // Must be file type: PAA and size: 512x1024
|
||||||
|
};
|
||||||
|
class bg_dark02 {
|
||||||
|
themeName = "Alt Dark";
|
||||||
|
themeBackground = "\@forge\userconfig\backgrounds\bgdark_02.paa";
|
||||||
|
};
|
||||||
|
class bg_light01 {
|
||||||
|
themeName = "Light";
|
||||||
|
themeBackground = "\@forge\userconfig\backgrounds\bglight_01.paa";
|
||||||
|
};
|
||||||
|
class bg_light02 {
|
||||||
|
themeName = "Alt Light";
|
||||||
|
themeBackground = "\@forge\userconfig\backgrounds\bglight_02.paa";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
class notifications {};
|
||||||
|
class ringtones {};
|
||||||
|
};
|
@ -1,22 +0,0 @@
|
|||||||
class PMCS_CfgPhones {
|
|
||||||
class themes {
|
|
||||||
class bg_dark01 {
|
|
||||||
themeName = "Dark"; // Name of theme
|
|
||||||
themeBackground = "\@pmcs\userconfig\backgrounds\bgdark_01.paa"; // Must be file type: PAA and size: 512x1024
|
|
||||||
};
|
|
||||||
class bg_dark02 {
|
|
||||||
themeName = "Alt Dark";
|
|
||||||
themeBackground = "\@pmcs\userconfig\backgrounds\bgdark_02.paa";
|
|
||||||
};
|
|
||||||
class bg_light01 {
|
|
||||||
themeName = "Light";
|
|
||||||
themeBackground = "\@pmcs\userconfig\backgrounds\bglight_01.paa";
|
|
||||||
};
|
|
||||||
class bg_light02 {
|
|
||||||
themeName = "Alt Light";
|
|
||||||
themeBackground = "\@pmcs\userconfig\backgrounds\bglight_02.paa";
|
|
||||||
};
|
|
||||||
};
|
|
||||||
class notifications {};
|
|
||||||
class ringtones {};
|
|
||||||
};
|
|
@ -1 +1 @@
|
|||||||
z\pmcs\addons\tablet
|
z\forge\addons\tablet
|
@ -1,6 +1,6 @@
|
|||||||
class CfgVehicles {
|
class CfgVehicles {
|
||||||
class Item_Base_F;
|
class Item_Base_F;
|
||||||
class PMCS_Item_Tablet: Item_Base_F {
|
class FORGE_Item_Tablet: Item_Base_F {
|
||||||
scope = 2;
|
scope = 2;
|
||||||
scopeCurator = 2;
|
scopeCurator = 2;
|
||||||
author = "IDSolutions";
|
author = "IDSolutions";
|
||||||
@ -8,7 +8,7 @@ class CfgVehicles {
|
|||||||
vehicleClass = "Items";
|
vehicleClass = "Items";
|
||||||
|
|
||||||
class TransportItems {
|
class TransportItems {
|
||||||
MACRO_ADDITEM(PMCS_Tablet,1);
|
MACRO_ADDITEM(FORGE_Tablet,1);
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
};
|
};
|
@ -1,15 +1,15 @@
|
|||||||
class CfgWeapons {
|
class CfgWeapons {
|
||||||
class ACE_ItemCore;
|
class ACE_ItemCore;
|
||||||
class CBA_MiscItem_ItemInfo;
|
class CBA_MiscItem_ItemInfo;
|
||||||
class PMCS_Tablet: ACE_ItemCore {
|
class FORGE_Tablet: ACE_ItemCore {
|
||||||
scope = 2;
|
scope = 2;
|
||||||
scopeArsenal = 2;
|
scopeArsenal = 2;
|
||||||
scopeCurator = 2;
|
scopeCurator = 2;
|
||||||
author = "IDSolutions";
|
author = "IDSolutions";
|
||||||
displayName = "Tablet";
|
displayName = "Tablet";
|
||||||
picture = QPATHTOF(images\getac_f110.paa);
|
picture = QPATHTOF(images\getac_f110.paa);
|
||||||
model = QPATHTOF(data\pmcs_tablet.p3d);
|
model = QPATHTOF(data\forge_tablet.p3d);
|
||||||
descriptionShort = "PMC Simulator 3.0 tablet for navigation, communication, and more.";
|
descriptionShort = "FORGE tablet for navigation, communication, and more.";
|
||||||
hiddenSelections[] = {"camo1"};
|
hiddenSelections[] = {"camo1"};
|
||||||
hiddenSelectionsTextures[] = {QPATHTOF(data\getac_f110_co.paa)};
|
hiddenSelectionsTextures[] = {QPATHTOF(data\getac_f110_co.paa)};
|
||||||
|
|
||||||
|
@ -3,10 +3,10 @@
|
|||||||
class CfgPatches {
|
class CfgPatches {
|
||||||
class ADDON {
|
class ADDON {
|
||||||
name = COMPONENT_NAME;
|
name = COMPONENT_NAME;
|
||||||
units[] = {"PMCS_Item_Tablet"};
|
units[] = {"FORGE_Item_Tablet"};
|
||||||
weapons[] = {"PMCS_Tablet"};
|
weapons[] = {"FORGE_Tablet"};
|
||||||
requiredVersion = REQUIRED_VERSION;
|
requiredVersion = REQUIRED_VERSION;
|
||||||
requiredAddons[] = {"pmcs_main"};
|
requiredAddons[] = {"forge_main"};
|
||||||
authors[] = {"J. Schmidt", "Creedcoder"};
|
authors[] = {"J. Schmidt", "Creedcoder"};
|
||||||
author = "IDSolutions";
|
author = "IDSolutions";
|
||||||
VERSION_CONFIG;
|
VERSION_CONFIG;
|
||||||
|
BIN
addons/tablet/data/forge_tablet.p3d
Normal file
BIN
addons/tablet/data/forge_tablet.p3d
Normal file
Binary file not shown.
@ -4,16 +4,16 @@ class CfgSkeletons {
|
|||||||
skeletonInherit = "";
|
skeletonInherit = "";
|
||||||
skeletonBones[] = {};
|
skeletonBones[] = {};
|
||||||
};
|
};
|
||||||
class pmcs_tablet_skeleton: Default {
|
class forge_tablet_skeleton: Default {
|
||||||
isDiscrete = 1;
|
isDiscrete = 1;
|
||||||
skeletonInherit = "";
|
skeletonInherit = "";
|
||||||
skeletonBones[] = {
|
skeletonBones[] = {
|
||||||
"camo1",""
|
"camo1",""
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
class land_pmcs_tablet_skeleton: pmcs_tablet_skeleton {
|
class land_forge_tablet_skeleton: forge_tablet_skeleton {
|
||||||
isDiscrete = 1;
|
isDiscrete = 1;
|
||||||
skeletonInherit = "pmcs_tablet_skeleton";
|
skeletonInherit = "forge_tablet_skeleton";
|
||||||
skeletonBones[] = {
|
skeletonBones[] = {
|
||||||
"camo1",""
|
"camo1",""
|
||||||
};
|
};
|
||||||
@ -26,14 +26,14 @@ class CfgModels {
|
|||||||
skeletonName = "";
|
skeletonName = "";
|
||||||
class Animations {};
|
class Animations {};
|
||||||
};
|
};
|
||||||
class pmcs_tablet: Default {
|
class forge_tablet: Default {
|
||||||
skeletonName = "pmcs_tablet_skeleton";
|
skeletonName = "forge_tablet_skeleton";
|
||||||
sections[] = {
|
sections[] = {
|
||||||
"camo1"
|
"camo1"
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
class land_pmcs_tablet: pmcs_tablet {
|
class land_forge_tablet: forge_tablet {
|
||||||
skeletonName = "land_pmcs_tablet_skeleton";
|
skeletonName = "land_forge_tablet_skeleton";
|
||||||
sections[] = {
|
sections[] = {
|
||||||
"camo1"
|
"camo1"
|
||||||
};
|
};
|
||||||
|
Binary file not shown.
@ -8,7 +8,8 @@
|
|||||||
#ifdef DEBUG_ENABLED_TABLET
|
#ifdef DEBUG_ENABLED_TABLET
|
||||||
#define DEBUG_MODE_FULL
|
#define DEBUG_MODE_FULL
|
||||||
#endif
|
#endif
|
||||||
#ifdef DEBUG_SETTINGS_TABLET
|
|
||||||
|
#ifdef DEBUG_SETTINGS_TABLET
|
||||||
#define DEBUG_SETTINGS DEBUG_SETTINGS_TABLET
|
#define DEBUG_SETTINGS DEBUG_SETTINGS_TABLET
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
30
main.go
30
main.go
@ -1,6 +1,7 @@
|
|||||||
package main
|
package main
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"encoding/json"
|
||||||
"fmt"
|
"fmt"
|
||||||
"log"
|
"log"
|
||||||
"os"
|
"os"
|
||||||
@ -9,6 +10,10 @@ import (
|
|||||||
"code.gitea.io/sdk/gitea"
|
"code.gitea.io/sdk/gitea"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
type VersionInfo struct {
|
||||||
|
Version string `json:"version"`
|
||||||
|
}
|
||||||
|
|
||||||
func main() {
|
func main() {
|
||||||
client, err := createGiteaClient()
|
client, err := createGiteaClient()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@ -20,6 +25,10 @@ func main() {
|
|||||||
log.Fatalf("VERSION environment variable is not set")
|
log.Fatalf("VERSION environment variable is not set")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if err := updateVersionFile(version); err != nil {
|
||||||
|
log.Fatalf("Error updating version file: %v", err)
|
||||||
|
}
|
||||||
|
|
||||||
repoOwner := "IDSolutions"
|
repoOwner := "IDSolutions"
|
||||||
repoName := "mod"
|
repoName := "mod"
|
||||||
|
|
||||||
@ -29,14 +38,29 @@ func main() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Construct the filename using the version
|
// Construct the filename using the version
|
||||||
artifactFilename := fmt.Sprintf("pmcs-%s.zip", version)
|
artifactFilename := fmt.Sprintf("forge-%s.zip", version)
|
||||||
artifactPath := filepath.Join("releases", artifactFilename)
|
artifactPath := filepath.Join("releases", artifactFilename)
|
||||||
|
|
||||||
if err := uploadArtifact(client, repoOwner, repoName, release.ID, artifactPath); err != nil {
|
if err := uploadArtifact(client, repoOwner, repoName, release.ID, artifactPath); err != nil {
|
||||||
log.Fatalf("Error uploading release asset: %v", err)
|
log.Fatalf("Error uploading release asset: %v", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
fmt.Println("Release created and artifact uploaded successfully!")
|
fmt.Println("Release created, artifact uploaded, and version file updated successfully!")
|
||||||
|
}
|
||||||
|
|
||||||
|
func updateVersionFile(version string) error {
|
||||||
|
versionInfo := VersionInfo{Version: version}
|
||||||
|
jsonData, err := json.MarshalIndent(versionInfo, "", " ")
|
||||||
|
if err != nil {
|
||||||
|
return fmt.Errorf("error marshaling version info: %w", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
err = os.WriteFile("forge_mod_version.json", jsonData, 0644)
|
||||||
|
if err != nil {
|
||||||
|
return fmt.Errorf("error writing version file: %w", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func createGiteaClient() (*gitea.Client, error) {
|
func createGiteaClient() (*gitea.Client, error) {
|
||||||
@ -50,7 +74,7 @@ func createGiteaClient() (*gitea.Client, error) {
|
|||||||
func createRelease(client *gitea.Client, owner, repo, version string) (*gitea.Release, error) {
|
func createRelease(client *gitea.Client, owner, repo, version string) (*gitea.Release, error) {
|
||||||
release, _, err := client.CreateRelease(owner, repo, gitea.CreateReleaseOption{
|
release, _, err := client.CreateRelease(owner, repo, gitea.CreateReleaseOption{
|
||||||
TagName: version,
|
TagName: version,
|
||||||
Title: fmt.Sprintf("PMC Simulator 3.0 Mod v%s", version),
|
Title: fmt.Sprintf("FORGE Mod v%s", version),
|
||||||
Note: fmt.Sprintf("Release notes for version %s", version),
|
Note: fmt.Sprintf("Release notes for version %s", version),
|
||||||
})
|
})
|
||||||
return release, err
|
return release, err
|
||||||
|
10
mod.cpp
10
mod.cpp
@ -1,5 +1,5 @@
|
|||||||
dir = "@pmcs";
|
dir = "@forge";
|
||||||
name = "PMC Simulator 3.0";
|
name = "FORGE";
|
||||||
author = "IDSolutions";
|
author = "IDSolutions";
|
||||||
picture = "title_co.paa";
|
picture = "title_co.paa";
|
||||||
hideName = "false";
|
hideName = "false";
|
||||||
@ -8,9 +8,9 @@ logoSmall = "icon_64_ca.paa";
|
|||||||
logo = "icon_128_ca.paa";
|
logo = "icon_128_ca.paa";
|
||||||
logoOver = "icon_128_highlight_ca.paa";
|
logoOver = "icon_128_highlight_ca.paa";
|
||||||
tooltip = "Tip of the morning";
|
tooltip = "Tip of the morning";
|
||||||
tooltipOwned = "PMC Simulator 3.0";
|
tooltipOwned = "FORGE";
|
||||||
overview = "PMC Simulator 3.0 Official Modification";
|
overview = "FORGE Official Modification";
|
||||||
description = "It's unclear where this will show";
|
description = "FORGE Mod - Version 1.0.0";
|
||||||
action = "https://innovativedevsolutions.org/";
|
action = "https://innovativedevsolutions.org/";
|
||||||
actionName = "Website";
|
actionName = "Website";
|
||||||
dlcColor[] = {0.45, 0.47, 0.41, 1};
|
dlcColor[] = {0.45, 0.47, 0.41, 1};
|
@ -1,34 +0,0 @@
|
|||||||
import os
|
|
||||||
from zipfile import ZipFile, ZIP_LZMA
|
|
||||||
|
|
||||||
def createReleasePath():
|
|
||||||
dirName = '../x/sof/release'
|
|
||||||
|
|
||||||
if not os.path.exists(dirName):
|
|
||||||
os.makedirs(dirName)
|
|
||||||
print('Directory ', dirName, ' created.')
|
|
||||||
else:
|
|
||||||
print('Directory ', dirName, ' already exists!')
|
|
||||||
|
|
||||||
def getAllFilePaths(dirName):
|
|
||||||
filePaths = []
|
|
||||||
for root, directories, files in os.walk(dirName):
|
|
||||||
for fileName in files:
|
|
||||||
filePath = os.path.join(root, fileName)
|
|
||||||
filePaths.append(filePath)
|
|
||||||
return filePaths
|
|
||||||
|
|
||||||
def main():
|
|
||||||
dirName = '../sof'
|
|
||||||
filePaths = getAllFilePaths(dirName)
|
|
||||||
print('The following files will be zipped:')
|
|
||||||
for fileName in filePaths:
|
|
||||||
print(fileName)
|
|
||||||
with ZipFile('../x/sof/release/sof.zip', 'w', compression=ZIP_LZMA) as zip:
|
|
||||||
for file in filePaths:
|
|
||||||
zip.write(file)
|
|
||||||
print('All files zipped successfully!')
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
|
||||||
createReleasePath()
|
|
||||||
main()
|
|
22
userconfig/forge_phone.hpp
Normal file
22
userconfig/forge_phone.hpp
Normal file
@ -0,0 +1,22 @@
|
|||||||
|
class CfgPhone {
|
||||||
|
class themes {
|
||||||
|
class bg_dark01 {
|
||||||
|
themeName = "Dark"; // Name of theme
|
||||||
|
themeBackground = "\@forge\userconfig\backgrounds\bgdark_01.paa"; // Must be file type: PAA and size: 512x1024
|
||||||
|
};
|
||||||
|
class bg_dark02 {
|
||||||
|
themeName = "Alt Dark";
|
||||||
|
themeBackground = "\@forge\userconfig\backgrounds\bgdark_02.paa";
|
||||||
|
};
|
||||||
|
class bg_light01 {
|
||||||
|
themeName = "Light";
|
||||||
|
themeBackground = "\@forge\userconfig\backgrounds\bglight_01.paa";
|
||||||
|
};
|
||||||
|
class bg_light02 {
|
||||||
|
themeName = "Alt Light";
|
||||||
|
themeBackground = "\@forge\userconfig\backgrounds\bglight_02.paa";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
class notifications {};
|
||||||
|
class ringtones {};
|
||||||
|
};
|
@ -1,22 +0,0 @@
|
|||||||
class PMCS_CfgPhones {
|
|
||||||
class themes {
|
|
||||||
class bg_dark01 {
|
|
||||||
themeName = "Dark"; // Name of theme
|
|
||||||
themeBackground = "\@pmcs\userconfig\backgrounds\bgdark_01.paa"; // Must be file type: PAA and size: 512x1024
|
|
||||||
};
|
|
||||||
class bg_dark02 {
|
|
||||||
themeName = "Alt Dark";
|
|
||||||
themeBackground = "\@pmcs\userconfig\backgrounds\bgdark_02.paa";
|
|
||||||
};
|
|
||||||
class bg_light01 {
|
|
||||||
themeName = "Light";
|
|
||||||
themeBackground = "\@pmcs\userconfig\backgrounds\bglight_01.paa";
|
|
||||||
};
|
|
||||||
class bg_light02 {
|
|
||||||
themeName = "Alt Light";
|
|
||||||
themeBackground = "\@pmcs\userconfig\backgrounds\bglight_02.paa";
|
|
||||||
};
|
|
||||||
};
|
|
||||||
class notifications {};
|
|
||||||
class ringtones {};
|
|
||||||
};
|
|
Loading…
x
Reference in New Issue
Block a user