Compare commits

45 Commits

Author SHA1 Message Date
Douwe Ravers
1859662e94 update 2025-09-21 11:37:03 +02:00
douwe
eea9e7d69f added the maintainer and changed some naming. 2025-08-26 16:34:49 +02:00
douwe
0c693354e6 Remove the old js code 2025-08-25 02:21:47 +02:00
douwe
40ab8b289a Divided harveste into 3 jobs 2025-08-25 02:20:58 +02:00
douwe
67f0afae4c Updated the code in screepsxx 2025-08-24 22:10:22 +02:00
douwe
cc0de10471 Improved walking system. 2025-08-24 12:08:22 +02:00
douwe
98b123ee0d Added custom move behaviour to creeps 2025-08-23 18:15:27 +02:00
douwe
6ee67eac47 Creeps extract memory completly 2025-08-22 03:11:44 +02:00
douwe
cd1464cc94 Added structure handling in engine as well. 2025-08-22 01:13:09 +02:00
douwe
0381ea6873 Fixed some bugs in harvester. 2025-08-22 00:13:32 +02:00
douwe
0c8da1d472 Finished revision harvester behaviour. Added Some metrics for every loop. 2025-08-21 23:35:00 +02:00
douwe
1ede4cce47 Improved harvester source detection. 2025-08-21 21:01:00 +02:00
douwe
1e9e696b1e Created a base engine class and let it handle all creeps. 2025-08-21 14:13:32 +02:00
douwe
c9ce09ba1a Updated screepsxx module to original url 2025-08-20 17:42:37 +02:00
Douwe Ravers
1a74743e4f Merge pull request #9 from DouweRavers/develop
Develop
2025-08-13 21:14:16 +02:00
douwe
fa5d75fca3 Update with gitignore 2025-08-13 21:12:38 +02:00
Douwe Ravers
b61743fa52 Create .gitignore 2025-08-13 21:11:09 +02:00
Douwe Ravers
009853665d Merge pull request #8 from DouweRavers/develop
Develop
2025-08-13 21:09:51 +02:00
douwe
257cf85695 Minor bug fixes 2025-08-13 21:08:26 +02:00
douwe
9a1682a857 First working version of colony.
Harversters and spawn work.
2025-08-13 20:43:26 +02:00
Douwe Ravers
8a39526580 Update README.md 2025-08-13 00:01:45 +02:00
douwe
5ed1329d2e Basic setup for Cpp based screeping. 2025-08-12 23:56:10 +02:00
unknown
7c1a84a5ca Changed miner search functions 2023-08-31 19:19:41 +02:00
unknown
bde8a2309f Changed miner movement; 2023-08-31 19:13:22 +02:00
unknown
8d67dcb8b8 Minor changes 2023-08-31 19:04:10 +02:00
unknown
29aa48dc3b Changed spawn checktime to 100 2023-08-30 23:57:38 +02:00
unknown
5cfea80b19 Changed update function of spawn to only check every 300 ticks. 2023-08-30 23:53:35 +02:00
unknown
eda20c2dce Removed the harvester. Introduced the cleaner (not active yet) spawners use full room capacity now. 2023-08-30 23:37:04 +02:00
unknown
112c3c3a97 Created supplier and builder functions 2023-08-29 20:43:10 +02:00
Douwe Ravers
523a2e0005 Merge pull request #2 from DouweRavers/develop
fixed wrong vacancy generation bug.
2023-08-26 21:32:06 +02:00
Douwe Ravers
91448edc0a fixed wrong vacancy generation bug. 2023-08-26 21:31:29 +02:00
Douwe Ravers
cab2c3fd25 Merge pull request #1 from DouweRavers/develop
Develop
2023-08-26 20:49:17 +02:00
Douwe Ravers
e294ad29fe Created miner, made harvester pick resources and added reset commands. 2023-08-26 16:57:38 +02:00
Douwe Ravers
76650e22ac Improved harvester behaviour, reworked the job register system and added auto roadbuilding. 2023-08-25 17:30:27 +02:00
Douwe Ravers
8c3528419a Implemented upgrader, source refill and builder functions to harvester. 2023-08-25 08:48:57 +02:00
Douwe Ravers
ccd0557339 Basic setup new system. 2023-08-24 01:48:31 +02:00
unknown
ae3812aa83 Simplyfied the code. Ready to rebuild on top of. 2023-08-20 16:31:21 +02:00
Gebruiker
15c86d3c14 reverse previous commit 2022-10-23 01:26:06 +02:00
Gebruiker
90448c79e4 changed git root 2022-10-23 01:23:27 +02:00
Gebruiker
ef9159260b Chanded some filenames
Removed automatic path placement.
Started command section.
2022-10-23 01:19:58 +02:00
DouweRavers
1806935c50 Slight improvements to movement. Started using regions. 2022-05-03 20:28:24 +02:00
DouweRavers
4e3ad07fff Improved performance of walking.
Switches to manual walking when close to target.
2022-05-01 00:52:48 +02:00
DouweRavers
744b4a2478 First working version of new system. 2022-04-30 14:23:44 +02:00
DouweRavers
3e962ed04a Rewriting from scratch. Fixing old code is just less fun. 2022-04-29 01:45:27 +02:00
DouweRavers
5494f6fb17 Reimplemented 5/7 roles. 2022-04-15 23:05:03 +02:00
56 changed files with 1778 additions and 759 deletions

1
.gitignore vendored Normal file
View File

@@ -0,0 +1 @@
build

6
.gitmodules vendored Normal file
View File

@@ -0,0 +1,6 @@
[submodule "emsdk"]
path = emsdk
url = git@github.com:emscripten-core/emsdk.git
[submodule "screepsxx"]
path = screepsxx
url = git@github.com:DouweRavers/screepsxx.git

8
.idea/.gitignore generated vendored Normal file
View File

@@ -0,0 +1,8 @@
# Default ignored files
/shelf/
/workspace.xml
# Editor-based HTTP Client requests
/httpRequests/
# Datasource local storage ignored files
/dataSources/
/dataSources.local.xml

1
.idea/.name generated Normal file
View File

@@ -0,0 +1 @@
douwco_hivemind

2
.idea/Screeps.iml generated Normal file
View File

@@ -0,0 +1,2 @@
<?xml version="1.0" encoding="UTF-8"?>
<module classpath="CMake" type="CPP_MODULE" version="4" />

344
.idea/editor.xml generated Normal file
View File

@@ -0,0 +1,344 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="BackendCodeEditorSettings">
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CDeclarationWithImplicitIntType/@EntryIndexedValue" value="WARNING" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CommentTypo/@EntryIndexedValue" value="DO_NOT_SHOW" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=ConstevalIfIsAlwaysConstant/@EntryIndexedValue" value="WARNING" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppAbstractClassWithoutSpecifier/@EntryIndexedValue" value="WARNING" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppAbstractFinalClass/@EntryIndexedValue" value="WARNING" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppAbstractVirtualFunctionCallInCtor/@EntryIndexedValue" value="ERROR" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppAccessSpecifierWithNoDeclarations/@EntryIndexedValue" value="SUGGESTION" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppAwaiterTypeIsNotClass/@EntryIndexedValue" value="WARNING" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppBooleanIncrementExpression/@EntryIndexedValue" value="WARNING" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppBoostFormatBadCode/@EntryIndexedValue" value="WARNING" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppBoostFormatLegacyCode/@EntryIndexedValue" value="SUGGESTION" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppBoostFormatMixedArgs/@EntryIndexedValue" value="ERROR" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppBoostFormatTooFewArgs/@EntryIndexedValue" value="ERROR" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppBoostFormatTooManyArgs/@EntryIndexedValue" value="WARNING" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppCStyleCast/@EntryIndexedValue" value="SUGGESTION" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppCVQualifierCanNotBeAppliedToReference/@EntryIndexedValue" value="WARNING" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppClassCanBeFinal/@EntryIndexedValue" value="HINT" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppClassIsIncomplete/@EntryIndexedValue" value="WARNING" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppClassNeedsConstructorBecauseOfUninitializedMember/@EntryIndexedValue" value="WARNING" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppClassNeverUsed/@EntryIndexedValue" value="WARNING" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppCompileTimeConstantCanBeReplacedWithBooleanConstant/@EntryIndexedValue" value="SUGGESTION" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppConceptNeverUsed/@EntryIndexedValue" value="WARNING" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppConditionalExpressionCanBeSimplified/@EntryIndexedValue" value="SUGGESTION" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppConstParameterInDeclaration/@EntryIndexedValue" value="SUGGESTION" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppConstValueFunctionReturnType/@EntryIndexedValue" value="SUGGESTION" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppCoroutineCallResolveError/@EntryIndexedValue" value="WARNING" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppDFAArrayIndexOutOfBounds/@EntryIndexedValue" value="WARNING" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppDFAConstantConditions/@EntryIndexedValue" value="WARNING" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppDFAConstantFunctionResult/@EntryIndexedValue" value="WARNING" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppDFAConstantParameter/@EntryIndexedValue" value="WARNING" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppDFADeletedPointer/@EntryIndexedValue" value="WARNING" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppDFAEndlessLoop/@EntryIndexedValue" value="WARNING" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppDFAInfiniteRecursion/@EntryIndexedValue" value="WARNING" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppDFAInvalidatedMemory/@EntryIndexedValue" value="WARNING" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppDFALocalValueEscapesFunction/@EntryIndexedValue" value="WARNING" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppDFALocalValueEscapesScope/@EntryIndexedValue" value="WARNING" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppDFALoopConditionNotUpdated/@EntryIndexedValue" value="WARNING" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppDFAMemoryLeak/@EntryIndexedValue" value="WARNING" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppDFANotInitializedField/@EntryIndexedValue" value="WARNING" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppDFANullDereference/@EntryIndexedValue" value="WARNING" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppDFATimeOver/@EntryIndexedValue" value="HINT" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppDFAUnreachableCode/@EntryIndexedValue" value="WARNING" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppDFAUnreachableFunctionCall/@EntryIndexedValue" value="WARNING" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppDFAUnreadVariable/@EntryIndexedValue" value="WARNING" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppDFAUnusedValue/@EntryIndexedValue" value="WARNING" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppDeclarationHidesLocal/@EntryIndexedValue" value="WARNING" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppDeclarationHidesUncapturedLocal/@EntryIndexedValue" value="HINT" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppDeclarationSpecifierWithoutDeclarators/@EntryIndexedValue" value="WARNING" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppDeclaratorDisambiguatedAsFunction/@EntryIndexedValue" value="WARNING" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppDeclaratorNeverUsed/@EntryIndexedValue" value="WARNING" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppDeclaratorUsedBeforeInitialization/@EntryIndexedValue" value="ERROR" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppDefaultCaseNotHandledInSwitchStatement/@EntryIndexedValue" value="WARNING" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppDefaultInitializationWithNoUserConstructor/@EntryIndexedValue" value="WARNING" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppDefaultIsUsedAsIdentifier/@EntryIndexedValue" value="WARNING" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppDefaultedSpecialMemberFunctionIsImplicitlyDeleted/@EntryIndexedValue" value="WARNING" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppDeletingVoidPointer/@EntryIndexedValue" value="WARNING" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppDependentTemplateWithoutTemplateKeyword/@EntryIndexedValue" value="WARNING" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppDependentTypeWithoutTypenameKeyword/@EntryIndexedValue" value="WARNING" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppDeprecatedEntity/@EntryIndexedValue" value="WARNING" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppDeprecatedOverridenMethod/@EntryIndexedValue" value="WARNING" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppDeprecatedRegisterStorageClassSpecifier/@EntryIndexedValue" value="WARNING" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppDereferenceOperatorLimitExceeded/@EntryIndexedValue" value="WARNING" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppDiscardedPostfixOperatorResult/@EntryIndexedValue" value="SUGGESTION" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppDoxygenSyntaxError/@EntryIndexedValue" value="WARNING" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppDoxygenUndocumentedParameter/@EntryIndexedValue" value="SUGGESTION" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppDoxygenUnresolvedReference/@EntryIndexedValue" value="WARNING" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppEmptyDeclaration/@EntryIndexedValue" value="WARNING" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppEnforceCVQualifiersOrder/@EntryIndexedValue" value="DO_NOT_SHOW" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppEnforceCVQualifiersPlacement/@EntryIndexedValue" value="DO_NOT_SHOW" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppEnforceDoStatementBraces/@EntryIndexedValue" value="DO_NOT_SHOW" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppEnforceForStatementBraces/@EntryIndexedValue" value="DO_NOT_SHOW" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppEnforceFunctionDeclarationStyle/@EntryIndexedValue" value="DO_NOT_SHOW" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppEnforceIfStatementBraces/@EntryIndexedValue" value="DO_NOT_SHOW" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppEnforceNestedNamespacesStyle/@EntryIndexedValue" value="HINT" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppEnforceOverridingDestructorStyle/@EntryIndexedValue" value="SUGGESTION" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppEnforceOverridingFunctionStyle/@EntryIndexedValue" value="SUGGESTION" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppEnforceTypeAliasCodeStyle/@EntryIndexedValue" value="DO_NOT_SHOW" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppEnforceWhileStatementBraces/@EntryIndexedValue" value="DO_NOT_SHOW" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppEntityAssignedButNoRead/@EntryIndexedValue" value="WARNING" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppEntityUsedOnlyInUnevaluatedContext/@EntryIndexedValue" value="WARNING" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppEnumeratorNeverUsed/@EntryIndexedValue" value="WARNING" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppEqualOperandsInBinaryExpression/@EntryIndexedValue" value="WARNING" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppEvaluationFailure/@EntryIndexedValue" value="ERROR" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppExplicitSpecializationInNonNamespaceScope/@EntryIndexedValue" value="WARNING" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppExpressionWithoutSideEffects/@EntryIndexedValue" value="WARNING" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppFinalFunctionInFinalClass/@EntryIndexedValue" value="SUGGESTION" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppFinalNonOverridingVirtualFunction/@EntryIndexedValue" value="SUGGESTION" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppForLoopCanBeReplacedWithWhile/@EntryIndexedValue" value="SUGGESTION" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppForwardEnumDeclarationWithoutUnderlyingType/@EntryIndexedValue" value="WARNING" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppFunctionDoesntReturnValue/@EntryIndexedValue" value="WARNING" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppFunctionIsNotImplemented/@EntryIndexedValue" value="WARNING" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppFunctionResultShouldBeUsed/@EntryIndexedValue" value="HINT" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppFunctionalStyleCast/@EntryIndexedValue" value="SUGGESTION" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppHeaderHasBeenAlreadyIncluded/@EntryIndexedValue" value="HINT" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppHiddenFunction/@EntryIndexedValue" value="WARNING" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppHidingFunction/@EntryIndexedValue" value="WARNING" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppIdenticalOperandsInBinaryExpression/@EntryIndexedValue" value="WARNING" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppIfCanBeReplacedByConstexprIf/@EntryIndexedValue" value="SUGGESTION" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppImplicitDefaultConstructorNotAvailable/@EntryIndexedValue" value="WARNING" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppIncompatiblePointerConversion/@EntryIndexedValue" value="WARNING" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppIncompleteSwitchStatement/@EntryIndexedValue" value="WARNING" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppInconsistentNaming/@EntryIndexedValue" value="DO_NOT_SHOW" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppIntegralToPointerConversion/@EntryIndexedValue" value="WARNING" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppInvalidLineContinuation/@EntryIndexedValue" value="WARNING" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppJoinDeclarationAndAssignment/@EntryIndexedValue" value="SUGGESTION" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppLambdaCaptureNeverUsed/@EntryIndexedValue" value="WARNING" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppLocalVariableMayBeConst/@EntryIndexedValue" value="HINT" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppLocalVariableMightNotBeInitialized/@EntryIndexedValue" value="WARNING" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppLocalVariableWithNonTrivialDtorIsNeverUsed/@EntryIndexedValue" value="DO_NOT_SHOW" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppLongFloat/@EntryIndexedValue" value="WARNING" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppMemberFunctionMayBeConst/@EntryIndexedValue" value="SUGGESTION" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppMemberFunctionMayBeStatic/@EntryIndexedValue" value="SUGGESTION" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppMemberInitializersOrder/@EntryIndexedValue" value="SUGGESTION" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppMismatchedClassTags/@EntryIndexedValue" value="WARNING" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppMissingIncludeGuard/@EntryIndexedValue" value="WARNING" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppMissingKeywordThrow/@EntryIndexedValue" value="WARNING" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppModulePartitionWithSeveralPartitionUnits/@EntryIndexedValue" value="WARNING" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppMsExtAddressOfClassRValue/@EntryIndexedValue" value="WARNING" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppMsExtBindingRValueToLvalueReference/@EntryIndexedValue" value="WARNING" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppMsExtCopyElisionInCopyInitDeclarator/@EntryIndexedValue" value="WARNING" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppMsExtDoubleUserConversionInCopyInit/@EntryIndexedValue" value="WARNING" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppMsExtNotInitializedStaticConstLocalVar/@EntryIndexedValue" value="WARNING" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppMsExtReinterpretCastFromNullptr/@EntryIndexedValue" value="WARNING" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppMultiCharacterLiteral/@EntryIndexedValue" value="WARNING" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppMultiCharacterWideLiteral/@EntryIndexedValue" value="WARNING" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppMustBePublicVirtualToImplementInterface/@EntryIndexedValue" value="WARNING" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppMutableSpecifierOnReferenceMember/@EntryIndexedValue" value="WARNING" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppNoDiscardExpression/@EntryIndexedValue" value="WARNING" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppNodiscardFunctionWithoutReturnValue/@EntryIndexedValue" value="WARNING" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppNonExceptionSafeResourceAcquisition/@EntryIndexedValue" value="HINT" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppNonExplicitConversionOperator/@EntryIndexedValue" value="HINT" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppNonExplicitConvertingConstructor/@EntryIndexedValue" value="HINT" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppNonInlineFunctionDefinitionInHeaderFile/@EntryIndexedValue" value="WARNING" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppNonInlineVariableDefinitionInHeaderFile/@EntryIndexedValue" value="WARNING" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppNotAllPathsReturnValue/@EntryIndexedValue" value="WARNING" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppObjectMemberMightNotBeInitialized/@EntryIndexedValue" value="WARNING" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppOutParameterMustBeWritten/@EntryIndexedValue" value="WARNING" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppParameterMayBeConst/@EntryIndexedValue" value="HINT" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppParameterMayBeConstPtrOrRef/@EntryIndexedValue" value="SUGGESTION" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppParameterNamesMismatch/@EntryIndexedValue" value="HINT" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppParameterNeverUsed/@EntryIndexedValue" value="HINT" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppPassValueParameterByConstReference/@EntryIndexedValue" value="SUGGESTION" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppPointerConversionDropsQualifiers/@EntryIndexedValue" value="WARNING" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppPointerToIntegralConversion/@EntryIndexedValue" value="WARNING" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppPolymorphicClassWithNonVirtualPublicDestructor/@EntryIndexedValue" value="WARNING" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppPossiblyErroneousEmptyStatements/@EntryIndexedValue" value="WARNING" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppPossiblyUninitializedMember/@EntryIndexedValue" value="WARNING" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppPossiblyUnintendedObjectSlicing/@EntryIndexedValue" value="WARNING" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppPrecompiledHeaderIsNotIncluded/@EntryIndexedValue" value="ERROR" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppPrecompiledHeaderNotFound/@EntryIndexedValue" value="ERROR" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppPrintfBadFormat/@EntryIndexedValue" value="WARNING" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppPrintfExtraArg/@EntryIndexedValue" value="WARNING" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppPrintfMissedArg/@EntryIndexedValue" value="ERROR" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppPrintfRiskyFormat/@EntryIndexedValue" value="WARNING" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppPrivateSpecialMemberFunctionIsNotImplemented/@EntryIndexedValue" value="WARNING" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppRangeBasedForIncompatibleReference/@EntryIndexedValue" value="WARNING" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppRedefinitionOfDefaultArgumentInOverrideFunction/@EntryIndexedValue" value="WARNING" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppRedundantAccessSpecifier/@EntryIndexedValue" value="HINT" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppRedundantBaseClassAccessSpecifier/@EntryIndexedValue" value="HINT" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppRedundantBaseClassInitializer/@EntryIndexedValue" value="SUGGESTION" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppRedundantBooleanExpressionArgument/@EntryIndexedValue" value="WARNING" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppRedundantCastExpression/@EntryIndexedValue" value="HINT" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppRedundantComplexityInComparison/@EntryIndexedValue" value="SUGGESTION" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppRedundantConditionalExpression/@EntryIndexedValue" value="SUGGESTION" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppRedundantConstSpecifier/@EntryIndexedValue" value="HINT" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppRedundantControlFlowJump/@EntryIndexedValue" value="HINT" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppRedundantDereferencingAndTakingAddress/@EntryIndexedValue" value="SUGGESTION" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppRedundantElaboratedTypeSpecifier/@EntryIndexedValue" value="HINT" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppRedundantElseKeyword/@EntryIndexedValue" value="HINT" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppRedundantElseKeywordInsideCompoundStatement/@EntryIndexedValue" value="HINT" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppRedundantEmptyDeclaration/@EntryIndexedValue" value="HINT" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppRedundantEmptyStatement/@EntryIndexedValue" value="HINT" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppRedundantExportKeyword/@EntryIndexedValue" value="WARNING" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppRedundantFwdClassOrEnumSpecifier/@EntryIndexedValue" value="SUGGESTION" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppRedundantInlineSpecifier/@EntryIndexedValue" value="HINT" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppRedundantLambdaParameterList/@EntryIndexedValue" value="HINT" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppRedundantMemberInitializer/@EntryIndexedValue" value="SUGGESTION" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppRedundantNamespaceDefinition/@EntryIndexedValue" value="SUGGESTION" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppRedundantParentheses/@EntryIndexedValue" value="HINT" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppRedundantQualifier/@EntryIndexedValue" value="HINT" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppRedundantQualifierADL/@EntryIndexedValue" value="DO_NOT_SHOW" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppRedundantStaticSpecifierOnMemberAllocationFunction/@EntryIndexedValue" value="HINT" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppRedundantStaticSpecifierOnThreadLocalLocalVariable/@EntryIndexedValue" value="HINT" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppRedundantTemplateArguments/@EntryIndexedValue" value="HINT" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppRedundantTemplateKeyword/@EntryIndexedValue" value="WARNING" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppRedundantTypenameKeyword/@EntryIndexedValue" value="WARNING" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppRedundantVoidArgumentList/@EntryIndexedValue" value="SUGGESTION" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppRedundantZeroInitializerInAggregateInitialization/@EntryIndexedValue" value="SUGGESTION" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppReinterpretCastFromVoidPtr/@EntryIndexedValue" value="SUGGESTION" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppRemoveRedundantBraces/@EntryIndexedValue" value="DO_NOT_SHOW" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppReplaceMemsetWithZeroInitialization/@EntryIndexedValue" value="SUGGESTION" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppReplaceTieWithStructuredBinding/@EntryIndexedValue" value="SUGGESTION" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppReturnNoValueInNonVoidFunction/@EntryIndexedValue" value="WARNING" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppSmartPointerVsMakeFunction/@EntryIndexedValue" value="SUGGESTION" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppSomeObjectMembersMightNotBeInitialized/@EntryIndexedValue" value="WARNING" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppSpecialFunctionWithoutNoexceptSpecification/@EntryIndexedValue" value="WARNING" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppStaticAssertFailure/@EntryIndexedValue" value="ERROR" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppStaticDataMemberInUnnamedStruct/@EntryIndexedValue" value="WARNING" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppStaticSpecifierOnAnonymousNamespaceMember/@EntryIndexedValue" value="SUGGESTION" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppStringLiteralToCharPointerConversion/@EntryIndexedValue" value="WARNING" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppTabsAreDisallowed/@EntryIndexedValue" value="DO_NOT_SHOW" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppTemplateArgumentsCanBeDeduced/@EntryIndexedValue" value="HINT" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppTemplateParameterNeverUsed/@EntryIndexedValue" value="HINT" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppTemplateParameterShadowing/@EntryIndexedValue" value="WARNING" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppThrowExpressionCanBeReplacedWithRethrow/@EntryIndexedValue" value="WARNING" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppTooWideScope/@EntryIndexedValue" value="SUGGESTION" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppTooWideScopeInitStatement/@EntryIndexedValue" value="HINT" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppTypeAliasNeverUsed/@EntryIndexedValue" value="WARNING" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppUninitializedDependentBaseClass/@EntryIndexedValue" value="WARNING" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppUninitializedNonStaticDataMember/@EntryIndexedValue" value="WARNING" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppUnionMemberOfReferenceType/@EntryIndexedValue" value="WARNING" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppUnmatchedPragmaEndRegionDirective/@EntryIndexedValue" value="WARNING" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppUnmatchedPragmaRegionDirective/@EntryIndexedValue" value="WARNING" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppUnnamedNamespaceInHeaderFile/@EntryIndexedValue" value="WARNING" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppUnnecessaryWhitespace/@EntryIndexedValue" value="DO_NOT_SHOW" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppUnsignedZeroComparison/@EntryIndexedValue" value="WARNING" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppUnusedIncludeDirective/@EntryIndexedValue" value="WARNING" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppUseAlgorithmWithCount/@EntryIndexedValue" value="SUGGESTION" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppUseAssociativeContains/@EntryIndexedValue" value="SUGGESTION" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppUseAuto/@EntryIndexedValue" value="HINT" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppUseAutoForNumeric/@EntryIndexedValue" value="HINT" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppUseElementsView/@EntryIndexedValue" value="SUGGESTION" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppUseEraseAlgorithm/@EntryIndexedValue" value="SUGGESTION" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppUseFamiliarTemplateSyntaxForGenericLambdas/@EntryIndexedValue" value="SUGGESTION" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppUseRangeAlgorithm/@EntryIndexedValue" value="SUGGESTION" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppUseStdSize/@EntryIndexedValue" value="SUGGESTION" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppUseStructuredBinding/@EntryIndexedValue" value="HINT" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppUseTypeTraitAlias/@EntryIndexedValue" value="SUGGESTION" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppUserDefinedLiteralSuffixDoesNotStartWithUnderscore/@EntryIndexedValue" value="WARNING" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppUsingResultOfAssignmentAsCondition/@EntryIndexedValue" value="WARNING" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppVariableCanBeMadeConstexpr/@EntryIndexedValue" value="SUGGESTION" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppVirtualFunctionCallInsideCtor/@EntryIndexedValue" value="WARNING" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppVirtualFunctionInFinalClass/@EntryIndexedValue" value="WARNING" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppVolatileParameterInDeclaration/@EntryIndexedValue" value="SUGGESTION" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppWarningDirective/@EntryIndexedValue" value="WARNING" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppWrongIncludesOrder/@EntryIndexedValue" value="HINT" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppWrongSlashesInIncludeDirective/@EntryIndexedValue" value="HINT" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppZeroConstantCanBeReplacedWithNullptr/@EntryIndexedValue" value="SUGGESTION" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppZeroValuedExpressionUsedAsNullPointer/@EntryIndexedValue" value="WARNING" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=IdentifierTypo/@EntryIndexedValue" value="DO_NOT_SHOW" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=IfStdIsConstantEvaluatedCanBeReplaced/@EntryIndexedValue" value="SUGGESTION" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=StdIsConstantEvaluatedWillAlwaysEvaluateToConstant/@EntryIndexedValue" value="WARNING" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=StringLiteralTypo/@EntryIndexedValue" value="DO_NOT_SHOW" type="string" />
<option name="/Default/CodeStyle/CodeFormatting/CppClangFormat/EnableClangFormatSupport/@EntryValue" value="false" type="bool" />
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/ALIGN_MULTILINE_ARGUMENT/@EntryValue" value="true" type="bool" />
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/ALIGN_MULTILINE_BINARY_EXPRESSIONS_CHAIN/@EntryValue" value="true" type="bool" />
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/ALIGN_MULTILINE_CALLS_CHAIN/@EntryValue" value="false" type="bool" />
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/ALIGN_MULTILINE_EXPRESSION/@EntryValue" value="false" type="bool" />
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/ALIGN_MULTILINE_EXTENDS_LIST/@EntryValue" value="true" type="bool" />
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/ALIGN_MULTILINE_FOR_STMT/@EntryValue" value="true" type="bool" />
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/ALIGN_MULTILINE_PARAMETER/@EntryValue" value="true" type="bool" />
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/ALIGN_MULTILINE_TYPE_ARGUMENT/@EntryValue" value="false" type="bool" />
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/ALIGN_MULTILINE_TYPE_PARAMETER/@EntryValue" value="false" type="bool" />
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/ALIGN_MULTIPLE_DECLARATION/@EntryValue" value="false" type="bool" />
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/ALIGN_TERNARY/@EntryValue" value="ALIGN_ALL" type="string" />
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/ANONYMOUS_METHOD_DECLARATION_BRACES/@EntryValue" value="END_OF_LINE" type="string" />
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/BLANK_LINES_AROUND_CLASS_DEFINITION/@EntryValue" value="1" type="int" />
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/BLANK_LINES_AROUND_DECLARATIONS/@EntryValue" value="0" type="int" />
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/BLANK_LINES_AROUND_FUNCTION_DECLARATION/@EntryValue" value="1" type="int" />
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/BLANK_LINES_AROUND_FUNCTION_DEFINITION/@EntryValue" value="1" type="int" />
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/BREAK_TEMPLATE_DECLARATION/@EntryValue" value="LINE_BREAK" type="string" />
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/CASE_BLOCK_BRACES/@EntryValue" value="END_OF_LINE" type="string" />
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/CONTINUOUS_LINE_INDENT/@EntryValue" value="Double" type="string" />
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/INDENT_ACCESS_SPECIFIERS_FROM_CLASS/@EntryValue" value="false" type="bool" />
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/INDENT_CASE_FROM_SWITCH/@EntryValue" value="true" type="bool" />
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/INDENT_CLASS_MEMBERS_FROM_ACCESS_SPECIFIERS/@EntryValue" value="true" type="bool" />
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/INDENT_COMMENT/@EntryValue" value="true" type="bool" />
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/INDENT_SIZE/@EntryValue" value="4" type="int" />
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/INDENT_STYLE/@EntryValue" value="Space" type="string" />
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/INITIALIZER_BRACES/@EntryValue" value="END_OF_LINE_NO_SPACE" type="string" />
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/INT_ALIGN_EQ/@EntryValue" value="false" type="bool" />
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/INVOCABLE_DECLARATION_BRACES/@EntryValue" value="END_OF_LINE" type="string" />
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/KEEP_BLANK_LINES_IN_CODE/@EntryValue" value="2" type="int" />
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/KEEP_BLANK_LINES_IN_DECLARATIONS/@EntryValue" value="2" type="int" />
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/KEEP_USER_LINEBREAKS/@EntryValue" value="true" type="bool" />
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/LINE_BREAK_AFTER_COLON_IN_MEMBER_INITIALIZER_LISTS/@EntryValue" value="ON_SINGLE_LINE" type="string" />
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/MEMBER_INITIALIZER_LIST_STYLE/@EntryValue" value="DO_NOT_CHANGE" type="string" />
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/NAMESPACE_DECLARATION_BRACES/@EntryValue" value="END_OF_LINE" type="string" />
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/NAMESPACE_INDENTATION/@EntryValue" value="All" type="string" />
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/OTHER_BRACES/@EntryValue" value="END_OF_LINE" type="string" />
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/PLACE_CATCH_ON_NEW_LINE/@EntryValue" value="false" type="bool" />
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/PLACE_ELSE_ON_NEW_LINE/@EntryValue" value="false" type="bool" />
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/PLACE_NAMESPACE_DEFINITIONS_ON_SAME_LINE/@EntryValue" value="false" type="bool" />
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/PLACE_WHILE_ON_NEW_LINE/@EntryValue" value="false" type="bool" />
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/SIMPLE_BLOCK_STYLE/@EntryValue" value="DO_NOT_CHANGE" type="string" />
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/SPACE_AFTER_CAST_EXPRESSION_PARENTHESES/@EntryValue" value="true" type="bool" />
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/SPACE_AFTER_COLON_IN_BITFIELD_DECLARATOR/@EntryValue" value="true" type="bool" />
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/SPACE_AFTER_COMMA_IN_TEMPLATE_ARGS/@EntryValue" value="true" type="bool" />
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/SPACE_AFTER_COMMA_IN_TEMPLATE_PARAMS/@EntryValue" value="true" type="bool" />
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/SPACE_AFTER_EXTENDS_COLON/@EntryValue" value="true" type="bool" />
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/SPACE_AFTER_FOR_COLON/@EntryValue" value="true" type="bool" />
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/SPACE_AFTER_FOR_SEMICOLON/@EntryValue" value="true" type="bool" />
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/SPACE_AFTER_PTR_IN_DATA_MEMBER/@EntryValue" value="false" type="bool" />
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/SPACE_AFTER_PTR_IN_DATA_MEMBERS/@EntryValue" value="false" type="bool" />
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/SPACE_AFTER_PTR_IN_METHOD/@EntryValue" value="false" type="bool" />
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/SPACE_AFTER_PTR_IN_NESTED_DECLARATOR/@EntryValue" value="false" type="bool" />
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/SPACE_AFTER_REF_IN_DATA_MEMBER/@EntryValue" value="false" type="bool" />
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/SPACE_AFTER_REF_IN_DATA_MEMBERS/@EntryValue" value="false" type="bool" />
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/SPACE_AFTER_REF_IN_METHOD/@EntryValue" value="false" type="bool" />
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/SPACE_AFTER_UNARY_OPERATOR/@EntryValue" value="false" type="bool" />
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/SPACE_BEFORE_COLON_IN_BITFIELD_DECLARATOR/@EntryValue" value="false" type="bool" />
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/SPACE_BEFORE_EXTENDS_COLON/@EntryValue" value="true" type="bool" />
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/SPACE_BEFORE_FOR_COLON/@EntryValue" value="false" type="bool" />
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/SPACE_BEFORE_FOR_SEMICOLON/@EntryValue" value="false" type="bool" />
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/SPACE_BEFORE_PTR_IN_ABSTRACT_DECL/@EntryValue" value="true" type="bool" />
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/SPACE_BEFORE_PTR_IN_DATA_MEMBER/@EntryValue" value="true" type="bool" />
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/SPACE_BEFORE_PTR_IN_DATA_MEMBERS/@EntryValue" value="true" type="bool" />
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/SPACE_BEFORE_PTR_IN_METHOD/@EntryValue" value="true" type="bool" />
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/SPACE_BEFORE_REF_IN_ABSTRACT_DECL/@EntryValue" value="true" type="bool" />
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/SPACE_BEFORE_REF_IN_DATA_MEMBER/@EntryValue" value="true" type="bool" />
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/SPACE_BEFORE_REF_IN_DATA_MEMBERS/@EntryValue" value="true" type="bool" />
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/SPACE_BEFORE_REF_IN_METHOD/@EntryValue" value="true" type="bool" />
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/SPACE_BEFORE_TEMPLATE_ARGS/@EntryValue" value="false" type="bool" />
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/SPACE_BEFORE_TEMPLATE_PARAMS/@EntryValue" value="false" type="bool" />
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/SPACE_BETWEEN_CLOSING_ANGLE_BRACKETS_IN_TEMPLATE_ARGS/@EntryValue" value="true" type="bool" />
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/SPACE_WITHIN_ARRAY_ACCESS_BRACKETS/@EntryValue" value="false" type="bool" />
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/SPACE_WITHIN_CAST_EXPRESSION_PARENTHESES/@EntryValue" value="false" type="bool" />
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/SPACE_WITHIN_DECLARATION_PARENTHESES/@EntryValue" value="false" type="bool" />
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/SPACE_WITHIN_EMPTY_BLOCKS/@EntryValue" value="false" type="bool" />
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/SPACE_WITHIN_EMPTY_INITIALIZER_BRACES/@EntryValue" value="false" type="bool" />
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/SPACE_WITHIN_EMPTY_METHOD_PARENTHESES/@EntryValue" value="false" type="bool" />
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/SPACE_WITHIN_EMPTY_TEMPLATE_PARAMS/@EntryValue" value="false" type="bool" />
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/SPACE_WITHIN_INITIALIZER_BRACES/@EntryValue" value="false" type="bool" />
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/SPACE_WITHIN_TEMPLATE_ARGS/@EntryValue" value="false" type="bool" />
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/SPACE_WITHIN_TEMPLATE_PARAMS/@EntryValue" value="false" type="bool" />
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/SPECIAL_ELSE_IF_TREATMENT/@EntryValue" value="true" type="bool" />
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/TAB_WIDTH/@EntryValue" value="4" type="int" />
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/TYPE_DECLARATION_BRACES/@EntryValue" value="END_OF_LINE" type="string" />
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/WRAP_AFTER_BINARY_OPSIGN/@EntryValue" value="true" type="bool" />
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/WRAP_AFTER_DECLARATION_LPAR/@EntryValue" value="false" type="bool" />
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/WRAP_AFTER_INVOCATION_LPAR/@EntryValue" value="false" type="bool" />
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/WRAP_ARGUMENTS_STYLE/@EntryValue" value="WRAP_IF_LONG" type="string" />
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/WRAP_BEFORE_DECLARATION_LPAR/@EntryValue" value="false" type="bool" />
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/WRAP_BEFORE_DECLARATION_RPAR/@EntryValue" value="false" type="bool" />
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/WRAP_BEFORE_INVOCATION_LPAR/@EntryValue" value="false" type="bool" />
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/WRAP_BEFORE_INVOCATION_RPAR/@EntryValue" value="false" type="bool" />
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/WRAP_BEFORE_TERNARY_OPSIGNS/@EntryValue" value="true" type="bool" />
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/WRAP_PARAMETERS_STYLE/@EntryValue" value="WRAP_IF_LONG" type="string" />
<option name="/Default/CodeStyle/EditorConfig/EnableClangFormatSupport/@EntryValue" value="false" type="bool" />
</component>
</project>

7
.idea/misc.xml generated Normal file
View File

@@ -0,0 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="CMakePythonSetting">
<option name="pythonIntegrationState" value="YES" />
</component>
<component name="CMakeWorkspace" PROJECT_DIR="$PROJECT_DIR$" />
</project>

8
.idea/modules.xml generated Normal file
View File

@@ -0,0 +1,8 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ProjectModuleManager">
<modules>
<module fileurl="file://$PROJECT_DIR$/.idea/Screeps.iml" filepath="$PROJECT_DIR$/.idea/Screeps.iml" />
</modules>
</component>
</project>

8
.idea/vcs.xml generated Normal file
View File

@@ -0,0 +1,8 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="VcsDirectoryMappings">
<mapping directory="" vcs="Git" />
<mapping directory="$PROJECT_DIR$/emsdk" vcs="Git" />
<mapping directory="$PROJECT_DIR$/screepsxx" vcs="Git" />
</component>
</project>

2
.sync
View File

@@ -1,2 +0,0 @@
1650024834746
5ce5d401e947ee7ab16cc8db

119
.vscode/settings.json vendored
View File

@@ -1,7 +1,116 @@
{
"files.exclude": {
".*": true,
"LICENSE": true,
"*.md": true
}
"files.associations": {
"__hash_table": "cpp",
"__string": "cpp",
"algorithm": "cpp",
"functional": "cpp",
"locale": "cpp",
"utility": "cpp",
"mutex": "cpp",
"shared_mutex": "cpp",
"stop_token": "cpp",
"cassert": "cpp",
"vector": "cpp",
"optional": "cpp",
"*.inc": "cpp",
"thread": "cpp",
"atomic": "cpp",
"__config": "cpp",
"__debug": "cpp",
"__errc": "cpp",
"__functional_03": "cpp",
"__mutex_base": "cpp",
"__nullptr": "cpp",
"__split_buffer": "cpp",
"__tree": "cpp",
"any": "cpp",
"array": "cpp",
"bit": "cpp",
"bitset": "cpp",
"cctype": "cpp",
"charconv": "cpp",
"chrono": "cpp",
"clocale": "cpp",
"cmath": "cpp",
"codecvt": "cpp",
"compare": "cpp",
"complex": "cpp",
"condition_variable": "cpp",
"cstdarg": "cpp",
"cstddef": "cpp",
"cstdint": "cpp",
"cstdio": "cpp",
"cstdlib": "cpp",
"cstring": "cpp",
"ctime": "cpp",
"cwchar": "cpp",
"cwctype": "cpp",
"deque": "cpp",
"exception": "cpp",
"filesystem": "cpp",
"forward_list": "cpp",
"iterator": "cpp",
"list": "cpp",
"map": "cpp",
"memory_resource": "cpp",
"regex": "cpp",
"set": "cpp",
"string": "cpp",
"type_traits": "cpp",
"unordered_map": "cpp",
"unordered_set": "cpp",
"fstream": "cpp",
"future": "cpp",
"initializer_list": "cpp",
"iomanip": "cpp",
"ios": "cpp",
"iosfwd": "cpp",
"iostream": "cpp",
"istream": "cpp",
"limits": "cpp",
"memory": "cpp",
"new": "cpp",
"numeric": "cpp",
"ostream": "cpp",
"queue": "cpp",
"random": "cpp",
"ratio": "cpp",
"span": "cpp",
"sstream": "cpp",
"stack": "cpp",
"stdexcept": "cpp",
"streambuf": "cpp",
"string_view": "cpp",
"strstream": "cpp",
"system_error": "cpp",
"tuple": "cpp",
"typeinfo": "cpp",
"valarray": "cpp",
"variant": "cpp",
"cerrno": "cpp",
"cfloat": "cpp",
"climits": "cpp",
"concepts": "cpp",
"format": "cpp",
"numbers": "cpp",
"semaphore": "cpp",
"cfenv": "cpp",
"cinttypes": "cpp",
"__bit_reference": "cpp",
"__functional_base": "cpp",
"__locale": "cpp",
"__node_handle": "cpp",
"__sso_allocator": "cpp",
"__std_stream": "cpp",
"__threading_support": "cpp",
"__tuple": "cpp",
"csignal": "cpp",
"coroutine": "cpp",
"source_location": "cpp",
"stdfloat": "cpp",
"typeindex": "cpp",
"version": "cpp",
"__functional_base_03": "cpp",
"__memory": "cpp"
}
}

39
CMakeLists.txt Normal file
View File

@@ -0,0 +1,39 @@
cmake_minimum_required(VERSION 3.16)
project(douwco_hivemind CXX)
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED TRUE)
# set(COMPILE_FLAGS --cache ${CMAKE_BINARY_DIR}/cache)
set(LINK_FLAGS -sASSERTIONS=0 -sMALLOC=emmalloc)
add_compile_options(${COMPILE_FLAGS})
add_link_options(${COMPILE_FLAGS} ${LINK_FLAGS})
add_subdirectory(screepsxx)
# If you change TARGET_NAME, please, make corresponding changes in main.js.
set(TARGET_NAME douwco_hivemind)
include_directories(${CMAKE_SOURCE_DIR}/douwco_hivemind/include)
file(GLOB SRC_FILES ${CMAKE_SOURCE_DIR}/douwco_hivemind/src/*.cpp)
add_executable(${TARGET_NAME} ${SRC_FILES})
target_link_libraries(${TARGET_NAME} screepsxx)
target_link_options(${TARGET_NAME} PUBLIC -sMODULARIZE=1 --no-entry --bind -sEXPORT_ES6=0)
# Collect all artifacts in 'dist' directory
# WASM-module and corresponding JS-module must have different base names in order to use them in Screeps, so we add suffixes.
add_custom_command(TARGET ${TARGET_NAME} POST_BUILD COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_BINARY_DIR}/${TARGET_NAME}.wasm ${CMAKE_SOURCE_DIR}/dist/${TARGET_NAME}_module.wasm)
add_custom_command(TARGET ${TARGET_NAME} POST_BUILD COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_BINARY_DIR}/${TARGET_NAME}.js ${CMAKE_SOURCE_DIR}/dist/${TARGET_NAME}_loader.js)
add_custom_command(TARGET ${TARGET_NAME} POST_BUILD COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_SOURCE_DIR}/js/main.js ${CMAKE_SOURCE_DIR}/dist/main.js)
add_custom_command(TARGET ${TARGET_NAME} POST_BUILD COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_SOURCE_DIR}/js/wasm_loader.js ${CMAKE_SOURCE_DIR}/dist/wasm_loader.js)
# Following post-build step will automatically upload artifacts to
# official Screeps server. If you want to use it, please,
# set SCREEPS_TOKEN environment variable to your Screeps API token
# (https://docs.screeps.com/auth-tokens.html).
# If you don't want to use this script, please, remove following lines.
#find_package(Python COMPONENTS Interpreter REQUIRED)
#add_custom_command(TARGET ${TARGET_NAME} POST_BUILD COMMAND ${Python_EXECUTABLE} ${screepsxx_SOURCE_DIR}/tools/upload.py ${CMAKE_SOURCE_DIR}/dist $ENV{SCREEPS_TOKEN})

View File

@@ -1,15 +0,0 @@
module.exports = {
// JOBS
JOB_HARVESTER: 0,
JOB_MINER: 1,
JOB_SUPPLIER: 2,
JOB_BUILDER:3,
JOB_UPGRADER: 4,
JOB_DEFENDER: 5,
JOB_RESERVER: 6,
JOB_RESERVED_HARVESTER: 7
// OTHER
};

View File

@@ -1,5 +1,34 @@
# screeps
My source code for the MMO-programming game: Screeps.
# Douwco Hivemind
This is the sourcecode of my hivemind implementation for the MMO-programming game Screeps. This is mainly designed to learn programming with C++. This is possible throught the work done in the screepxx project, which I will and try to expand as well.
# Status
To those interested in this code. I wrote the main body of the source code when just learning programming so its kind of a mess. I'm now slowly rewriting the code base to a more SOLID version. :)
# Running the project
All commands are run starting from the root directory.
## Emsdk setup
Screeps only supports ES5 js syntax which can only be guaranteed by using emsdk 2.0.0.
```
cd emsdk && \
./emsdk install 2.0.0 && \
./emsdk activate 2.0.0 && \
source ./emsdk_env.sh && \
cd ..
```
## Cmake setup
Create the makefiles using cmake. For more info look at the readme in screepsxx.
```
mkdir build
cd build
cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_TOOLCHAIN_FILE=emsdk/upstream/emscripten/cmake/Modules/Platform/Emscripten.cmake ..
```
# Build
To build the project run the following. In the dist folder the "screeps ready" project is copied.
```
cd build
cmake --build .
```

View File

@@ -1,65 +0,0 @@
/* ###########################
# Cross room managment AI #
########################### */
var GLOBAL = require("GLOBAL_VARIABLES");
module.exports = {
run_front: function()
{
if(Memory.AImain == null) Memory.AImain = {};
if(Memory.AImain.MainHub == null) Memory.AImain.MainHub = "insert name"
for(var n_flag in Game.flags){
var flag = Game.flags[n_flag];
if(flag.color == COLOR_YELLOW){
if(flag.room != undefined && flag.room.find(FIND_MY_CREEPS).length != flag.room.find(FIND_CREEPS).length){
Game.spawns[Memory.AImain.MainHub].spawnCreep([TOUGH, TOUGH, TOUGH, TOUGH, TOUGH, TOUGH, TOUGH, ATTACK, ATTACK, ATTACK, MOVE],
"Defender", { memory: { role:GLOBAL.JOB_DEFENDER , flag: flag.name }});
break;
}
if(flag.room == undefined || flag.room.controller.reservation == undefined || (
flag.room.controller.reservation.username == "DouweRavers" && flag.room.controller.reservation.ticksToEnd < 3500))
{
if(Memory.AImain.MainHub != "insert name") Game.spawns[Memory.AImain.MainHub].spawnCreep([MOVE, CLAIM, CLAIM], "columbus", { memory: { role:GLOBAL.JOB_RESERVER, target: flag.name, home: Memory.AImain.MainHub}});
}
if(flag.room != undefined && flag.room.controller.reservation != undefined && flag.room.controller.reservation.username == "DouweRavers")
{
var containers = flag.room.find(FIND_STRUCTURES, { filter:(s) => ( s.structureType == STRUCTURE_CONTAINER )});
if(containers.length > 0){
var has_miner = false;
console.log("test");
var creeps = flag.room.find(FIND_CREEPS);
for(var cp in creeps){
console.log(creeps[cp]);
var creep = creeps[cp];
if(creep.memory.role == GLOBAL.JOB_MINER){
has_miner = true;
}
}
if(!has_miner) {
console.log("needs new miner")
Game.spawns[Memory.AImain.MainHub].spawnCreep([ WORK, WORK, WORK, WORK, WORK, MOVE ], "ForeignMiner", { memory: { role:GLOBAL.JOB_MINER, container_id: containers[0].id}});
}
}
var harvs = flag.room.find(FIND_MY_CREEPS).length;
var source_id = flag.room.find(FIND_SOURCES)[0].id;
if(harvs < 4){
var spawn = Game.spawns[Memory.AImain.MainHub];
var body = [];
for(let i=0;i<Math.floor(spawn.room.energyAvailable/200);i++){
body.push(WORK);
body.push(CARRY);
body.push(MOVE);
}
var name = "ForeignHarvy"+spawn.memory.creep_iterate;
spawn.spawnCreep( body, name, { memory:
{role: GLOBAL.JOB_RESERVED_HARVESTER, source_id: source_id}});
}
}
}
}
},
run_back: function(){}
};

View File

@@ -1,41 +0,0 @@
/* #######################################
# Controls the jobs of all the creeps #
#######################################*/
var GLOBAL = require("GLOBAL_VARIABLES");
var job_harvester = require("job_harvester");
var job_miner = require("job_miner");
var job_supplier = require("job_supplier");
var job_builder = require("job_builder");
var job_upgrader = require("job_upgrader");
var job_defender = require("job_defender");
var job_reserver = require("job_reserver");
var job_reserved_harvester = require("job_reserved_harvester");
module.exports = {
run: function(){
for(var cr in Game.creeps){
cr = Game.creeps[cr];
switch(cr.memory.role){
case GLOBAL.JOB_HARVESTER: job_harvester.do(cr);
break;
case GLOBAL.JOB_MINER: job_miner.do(cr);
break;
case GLOBAL.JOB_SUPPLIER: job_supplier.do(cr);
break;
case GLOBAL.JOB_BUILDER: job_builder.do(cr);
break;
case GLOBAL.JOB_UPGRADER: job_upgrader.do(cr);
break;
case GLOBAL.JOB_DEFENDER: job_defender.do(cr);
break;
case GLOBAL.JOB_RESERVER: job_reserver.do(cr);
break;
case GLOBAL.JOB_RESERVED_HARVESTER: job_reserved_harvester.do(cr);
break;
}
}
}
};

View File

@@ -1,171 +0,0 @@
/* #####################################
# Controls the way creeps are spawn #
#####################################*/
var GLOBAL = require("GLOBAL_VARIABLES");
module.exports = {
run: function(){
for(var sp in Game.spawns){
sp = Game.spawns[sp]
// values
var creep_count = 0
for(var cr in Game.creeps){
if(Game.creeps[cr].room.name == sp.room.name) creep_count += 1;
}
var source_count = 0;
if(sp.memory.sources_ids != undefined) source_count = sp.memory.sources_ids.length;
// Memory setup
if(sp.memory.creep_iterate == undefined) sp.memory.creep_iterate = 0;
if(sp.memory.sources_ids == undefined){
sp.memory.sources_ids = [];
var sources = sp.room.find(FIND_SOURCES);
for(var source in sources){
source = sources[source];
sp.memory.sources_ids.push(source.id);
}
source_count = sp.memory.sources_ids.length;
}
if(sp.memory.containers_ids == undefined || sp.memory.containers_ids.length != source_count){
sp.memory.containers_ids = [];
var containers = sp.room.find(FIND_STRUCTURES, { filter:{ structureType: STRUCTURE_CONTAINER }});
if(containers.length > 0){
for(let i=0;i<containers.length;i+=1){
sp.memory.containers_ids.push(containers[i].id);
}
}
}
// Different spawning configurations
// Add improved versions at top of if-else statement
if(sp.memory.containers_ids.length >= source_count && sp.room.energyCapacityAvailable >= 550 && creep_count > source_count ){ // Miner method: Miners fille containers rest picks up from them
// Check current creep_jobs
var jobs = { miner: 0, supplier: 0, builder: 0, upgrader: 0, defender: 0};
var container_id = sp.memory.containers_ids[0];
for(var creep in Game.creeps){
var creep = Game.creeps[creep];
if(creep.room.name != sp.room.name) continue;
switch (creep.memory.role) {
case GLOBAL.JOB_MINER:
jobs.miner += 1;
for(let i=0;i<sp.memory.containers_ids.length;i++){
if(creep.memory.container_id != sp.memory.containers_ids[i]) container_id = sp.memory.containers_ids[i];
}
break;
case GLOBAL.JOB_SUPPLIER:
jobs.supplier += creep.body.length;
break;
case GLOBAL.JOB_BUILDER:
jobs.builder += creep.body.length;
break;
case GLOBAL.JOB_UPGRADER:
jobs.upgrader += creep.body.length;
break;
case GLOBAL.JOB_DEFENDER:
jobs.defender += 1;
break;
default:
break;
}
}
if(jobs.miner < source_count){
if(sp.room.energyAvailable >= 550) create_miner(sp, container_id);
}
else if(jobs.supplier < source_count * 15 && sp.room.energyAvailable >= 300 && jobs.miner > 0) create_supplier(sp);
else if(jobs.builder < source_count * 5 && sp.room.energyAvailable >= 300 && jobs.miner > 0) create_builder(sp);
else if(jobs.upgrader < source_count * 5 && sp.room.energyAvailable >= 300 && jobs.miner > 0) create_upgrader(sp);
else if(jobs.defender < 0 && sp.room.energyAvailable >= sp.room.energyCapacityAvailable*0.8 && jobs.miner > 0) create_defender(sp);
} else { // Harvesting method: everybody mines own sources
if (sp.room.find(FIND_MY_CREEPS).length < source_count * 5 && sp.room.energyAvailable >= 300){
var source_id = sp.memory.sources_ids[sp.memory.creep_iterate % source_count];
create_harvester(sp, source_id);
}
}
}
}
};
function create_harvester(sp, source_id){
var body = [];
for(let i=0;i<Math.floor(sp.room.energyAvailable/200);i++){
body.push(WORK);
body.push(CARRY);
body.push(MOVE);
}
var name = "Harvy"+sp.memory.creep_iterate;
sp.spawnCreep( body, name, { memory:
{role: GLOBAL.JOB_HARVESTER, source_id: source_id}});
sp.memory.creep_iterate += 1;
}
function create_miner(sp, container_id){
var body = [ WORK, WORK, WORK, WORK, WORK, MOVE ]; // (creep)5*work(2energy/tick)=10energy/tick -> (source)3000energy/300tick=10energy/tick
var name = "Mindy"+sp.memory.creep_iterate;
sp.spawnCreep( body, name, { memory:
{role: GLOBAL.JOB_MINER, container_id: container_id}});
sp.memory.creep_iterate += 1;
}
function create_supplier(sp){
var body = [WORK];
for(let i=0;i<Math.floor(sp.room.energyAvailable/100)-1 && i < 8;i++){ // as big as possible
body.push(CARRY);
body.push(MOVE);
}
var name = "Suppry"+sp.memory.creep_iterate;
sp.spawnCreep( body, name, { memory:
{role: GLOBAL.JOB_SUPPLIER}});
sp.memory.creep_iterate += 1;
}
function create_builder(sp){
var body = [];
for(let i=0;i<Math.floor(sp.room.energyAvailable/200);i++){ // as big as possible
body.push(CARRY);
body.push(MOVE);
body.push(WORK);
}
var name = "Bobby"+sp.memory.creep_iterate;
sp.spawnCreep( body, name, { memory:
{role: GLOBAL.JOB_BUILDER}});
sp.memory.creep_iterate += 1;
}
function create_upgrader(sp){
var body = [];
for(let i=0;i<Math.floor(sp.room.energyAvailable/300);i++){ // as big as possible
body.push(CARRY);
body.push(MOVE);
body.push(WORK);
body.push(WORK);
}
var name = "Undy"+sp.memory.creep_iterate;
sp.spawnCreep( body, name, { memory:
{role: GLOBAL.JOB_UPGRADER}});
sp.memory.creep_iterate += 1;
}
function create_defender(sp){
var body = [];
for(let i=0;i<Math.floor(sp.room.energyAvailable/150);i++){ // as big as possible
body.push(TOUGH);
body.push(TOUGH);
body.push(ATTACK);
body.push(MOVE);
}
var name = "Destroyer CODE"+sp.memory.creep_iterate;
sp.spawnCreep( body, name, { memory:
{role: GLOBAL.JOB_DEFENDER}});
sp.memory.creep_iterate += 1;
}

View File

@@ -1,37 +0,0 @@
module.exports = {
run: function(){
for(var spawn in Game.spawns){
var room = Game.spawns[spawn].room;
var towers = room.find(FIND_MY_STRUCTURES,
{filter: (s)=>(s.structureType == STRUCTURE_TOWER)});
for(var tower in towers){
tower = towers[tower];
var enemy = tower.pos.findClosestByRange(FIND_HOSTILE_CREEPS);
if(enemy != null) tower.attack(enemy);
else {
var healt_creep = false;
for(var creep in Game.creeps){
creep = Game.creeps[creep];
if(creep.hits < creep.hitsMax) {
tower.heal(creep);
healt_creep = true;
}
}
if(!healt_creep && 500 < tower.energy){
var structure = tower.pos.findClosestByPath(FIND_STRUCTURES,
{filter: (s)=>( (s.structureType != STRUCTURE_RAMPART && s.structureType != STRUCTURE_WALL && s.hits < s.hitsMax )
|| ( s.structureType == STRUCTURE_RAMPART && s.hits < 10000 ))});
if(structure == null) structure = tower.pos.findClosestByRange(FIND_STRUCTURES,
{filter: (s)=>((s.structureType == STRUCTURE_RAMPART) && s.hits < 1000)});
if(structure == null) structure = tower.pos.findClosestByRange(FIND_STRUCTURES,
{filter: (s)=>((s.structureType == STRUCTURE_WALL) && s.hits < 1000)});
tower.repair(structure);
}
}
}
}
}
};

22
dist/douwco_hivemind_loader.js vendored Normal file

File diff suppressed because one or more lines are too long

BIN
dist/douwco_hivemind_module.wasm vendored Normal file

Binary file not shown.

14
dist/main.js vendored Normal file
View File

@@ -0,0 +1,14 @@
'use strict';
const wasm_loader = require('wasm_loader')
var mod;
wasm_loader('douwco_hivemind_loader', 'douwco_hivemind_module').then((instance) => {
console.log("WASM module loaded.");
mod = instance;
});
module.exports.loop = function () {
if (mod !== undefined)
mod.loop();
}

24
dist/wasm_loader.js vendored Normal file
View File

@@ -0,0 +1,24 @@
'use strict';
module.exports = ((mod_js, mod_wasm, opts) => {
const mod_file = require(mod_js);
const bin_file = require(mod_wasm);
opts = opts || {};
opts.wasmBinary = bin_file;
opts.print = opts.print || ((text) => console.log(text));
opts.printErr = opts.printErr || ((text) => console.log(`error: ${text}`));
opts.onAbort = opts.onAbort || (() => console.log('WASM aborted!!!'));
// == don't call main()
if (typeof opts.noInitialRun === "undefined")
opts.noInitialRun = true;
// == don't terminate after returning from main()
if (typeof opts.noExitRuntime === "undefined")
opts.noExitRuntime = true;
return mod_file(opts);
});

View File

@@ -0,0 +1,22 @@
#ifndef DOUWCO_HIVEMIND_BUILDER_HPP
#define DOUWCO_HIVEMIND_BUILDER_HPP
#include "Creeps/Worker.hpp"
namespace DouwcoHivemind
{
class Builder : public Worker
{
public:
Builder(Screeps::Creep creep) : Worker(creep) {}
protected:
void depositEnergy() override;
private:
std::unique_ptr<Screeps::ConstructionSite> getConstructionSiteTarget();
void searchConstructionSite();
};
}
#endif // DOUWCO_HIVEMIND_BUILDER_HPP

View File

@@ -0,0 +1,49 @@
#ifndef DOUWCO_HIVEMIND_CREEPBASE_HPP
#define DOUWCO_HIVEMIND_CREEPBASE_HPP
#include <Screeps/Creep.hpp>
namespace Screeps{
class RoomPosition;
class RoomObject;
class PathStep;
}
namespace DouwcoHivemind
{
enum CreepRole
{
UNEMPLOYED,
SUPPLIER,
UPGRADER,
BUILDER,
MAINTAINER
};
class CreepBase
{
public:
CreepRole role;
std::string target_id;
protected:
Screeps::Creep creep;
JSON memory;
public:
CreepBase(Screeps::Creep crp);
virtual ~CreepBase();
virtual void loop() {}
bool isNearTo(const Screeps::RoomPosition &pos, int dist);
protected:
void moveToTarget(int dist = 1);
std::unique_ptr<Screeps::RoomObject> getRoomObjectTarget();
};
}
#endif // DOUWCO_HIVEMIND_CREEPBASE_HPP

View File

@@ -0,0 +1,22 @@
#ifndef DOUWCO_HIVEMIND_MAINTAINER_HPP
#define DOUWCO_HIVEMIND_MAINTAINER_HPP
#include "Creeps/Worker.hpp"
namespace DouwcoHivemind
{
class Maintainer : public Worker
{
public:
Maintainer(Screeps::Creep creep) : Worker(creep) {}
protected:
void depositEnergy() override;
private:
std::unique_ptr<Screeps::Structure> getDamagedStructureTarget();
void searchDamagedStructure();
};
}
#endif // DOUWCO_HIVEMIND_MAINTAINER_HPP

View File

@@ -0,0 +1,22 @@
#ifndef DOUWCO_HIVEMIND_SUPPLIER_HPP
#define DOUWCO_HIVEMIND_SUPPLIER_HPP
#include "Creeps/Worker.hpp"
namespace DouwcoHivemind
{
class Supplier : public Worker
{
public:
Supplier(Screeps::Creep creep) : Worker(creep) {}
protected:
void depositEnergy() override;
private:
std::unique_ptr<Screeps::Structure> getEnergyStructureTarget();
void searchEnergyStructure();
};
}
#endif // DOUWCO_HIVEMIND_SUPPLIER_HPP

View File

@@ -0,0 +1,18 @@
#ifndef DOUWCO_HIVEMIND_HARVESTER_UPGRADER_HPP
#define DOUWCO_HIVEMIND_HARVESTER_UPGRADER_HPP
#include "Creeps/Worker.hpp"
namespace DouwcoHivemind
{
class Upgrader : public Worker
{
public:
Upgrader(Screeps::Creep creep) : Worker(creep) {}
protected:
void depositEnergy() override;
};
}
#endif // DOUWCO_HIVEMIND_HARVESTER_UPGRADER_HPP

View File

@@ -0,0 +1,29 @@
#ifndef DOUWCO_HIVEMIND_HARVESTER_HPP
#define DOUWCO_HIVEMIND_HARVESTER_HPP
#include "Creeps/CreepBase.hpp"
namespace DouwcoHivemind
{
class Worker : public CreepBase
{
private:
bool harvesting;
public:
Worker(Screeps::Creep crp);
~Worker() override;
void loop() override;
protected:
virtual void depositEnergy(){}
private:
void harvestSource();
std::unique_ptr<Screeps::Source> getSourceTarget();
void searchSource();
};
}
#endif // DOUWCO_HIVEMIND_HARVESTER_HPP

View File

@@ -0,0 +1,28 @@
#ifndef DOUWCO_HIVEMIND_ENGINE_HPP
#define DOUWCO_HIVEMIND_ENGINE_HPP
#include <vector>
#include "Creeps/CreepBase.hpp"
#include "Structures/StructureBase.hpp"
namespace DouwcoHivemind
{
class Engine
{
private:
std::vector<std::unique_ptr<CreepBase>> creeps;
std::vector<std::unique_ptr<StructureBase>> structures;
public:
Engine();
void loop();
private:
void ReadOutCreeps();
void ReadOutStructures();
void clearDeadCreepMemory();
};
}
#endif // DOUWCO_HIVEMIND_ENGINE_HPP

View File

@@ -0,0 +1,24 @@
#ifndef DOUWCO_HIVEMIND_SPAWN_HPP
#define DOUWCO_HIVEMIND_SPAWN_HPP
#include <Screeps/StructureSpawn.hpp>
#include "Structures/StructureBase.hpp"
namespace DouwcoHivemind
{
class Spawn : public StructureBase
{
private:
Screeps::StructureSpawn spawn;
public:
Spawn(Screeps::StructureSpawn spwn) : spawn(spwn),
StructureBase() {}
~Spawn() {}
void loop() override;
};
}
#endif // DOUWCO_HIVEMIND_SPAWN_HPP

View File

@@ -0,0 +1,15 @@
#ifndef DOUWCO_HIVEMIND_STRUCTURE_HPP
#define DOUWCO_HIVEMIND_STRUCTURE_HPP
#include <Screeps/Structure.hpp>
namespace DouwcoHivemind
{
class StructureBase
{
public:
virtual void loop(){}
};
}
#endif // DOUWCO_HIVEMIND_STRUCTURE_HPP

View File

@@ -0,0 +1,33 @@
#ifndef DOUWCO_HIVEMIND_JSON_TOOLS_HPP
#define DOUWCO_HIVEMIND_JSON_TOOLS_HPP
#include <nlohmann/json.hpp>
#include <vector>
namespace DouwcoHivemind
{
template <typename T>
std::vector<T> jsonToVector(const nlohmann::json &json)
{
std::vector<T> vector;
for (const auto &item : json)
{
vector.emplace_back(item.get<T>());
}
return vector;
};
template <typename T>
nlohmann::json vectorToJson(const std::vector<T> &vector)
{
nlohmann::json json;
for (const auto &item : vector)
{
json.emplace_back(item);
}
return json;
};
}
#endif // DOUWCO_HIVEMIND_JSON_TOOLS_HPP

View File

@@ -0,0 +1,19 @@
#ifndef DOUWCO_HIVEMIND_MEASURE_TOOL_HPP
#define DOUWCO_HIVEMIND_MEASURE_TOOL_HPP
#include <Screeps/RoomPosition.hpp>
namespace DouwcoHivemind
{
static bool isNearTo(const Screeps::RoomPosition &pos1, const Screeps::RoomPosition &pos2, int dist)
{
int dx = pos1.x() - pos2.x();
int dy = pos1.y() - pos2.y();
int dist2 = dist * dist;
return dx * dx <= dist2 &&
dy * dy <= dist2 &&
pos1.roomName() == pos2.roomName();
}
} // namespace Screeps
#endif // DOUWCO_HIVEMIND_MEASURE_TOOL_HPP

View File

@@ -0,0 +1,40 @@
#ifndef DOUWCO_HIVEMIND_PATH_TOOL_HPP
#define DOUWCO_HIVEMIND_PATH_TOOL_HPP
#include <vector>
#include <Screeps/Room.hpp>
namespace DouwcoHivemind
{
static std::vector<int> flattenPathSteps(const std::vector<Screeps::Room::PathStep> &pathSteps)
{
std::vector<int> flattened;
for (const auto &step : pathSteps)
{
flattened.push_back(step.x);
flattened.push_back(step.y);
flattened.push_back(step.dx);
flattened.push_back(step.dy);
flattened.push_back(step.direction);
}
return flattened;
}
static std::vector<Screeps::Room::PathStep> unflattenPathSteps(const std::vector<int> &flattened)
{
std::vector<Screeps::Room::PathStep> pathSteps;
for (size_t i = 0; i < flattened.size(); i += 5)
{
Screeps::Room::PathStep step;
step.x = flattened[i];
step.y = flattened[i+1];
step.dx = flattened[i+2];
step.dy = flattened[i+3];
step.direction = flattened[i+4];
pathSteps.emplace_back(step);
}
return pathSteps;
}
} // namespace Screeps
#endif // DOUWCO_HIVEMIND_PATH_TOOL_HPP

View File

@@ -0,0 +1,83 @@
#include <vector>
#include <optional>
#include <emscripten.h>
#include <Screeps/Game.hpp>
#include <Screeps/Creep.hpp>
#include <Screeps/Source.hpp>
#include <Screeps/Room.hpp>
#include <Screeps/RoomPosition.hpp>
#include <Screeps/RoomObject.hpp>
#include <Screeps/Structure.hpp>
#include <Screeps/StructureController.hpp>
#include <Screeps/StructureSpawn.hpp>
#include <Screeps/StructureExtension.hpp>
#include <Screeps/StructureTower.hpp>
#include <Screeps/Constants.hpp>
#include <Screeps/Store.hpp>
#include <Screeps/ConstructionSite.hpp>
#include "Creeps/Builder.hpp"
void DouwcoHivemind::Builder::depositEnergy()
{
auto constructionSite = getConstructionSiteTarget();
if (!constructionSite)
return;
if (isNearTo(constructionSite->pos(), 1))
{
int resp = creep.build(*constructionSite);
}
else
{
moveToTarget();
}
}
std::unique_ptr<Screeps::ConstructionSite> DouwcoHivemind::Builder::getConstructionSiteTarget()
{
auto roomObj = getRoomObjectTarget();
if (!roomObj)
{
searchConstructionSite();
return nullptr;
}
auto constructionSite = std::unique_ptr<Screeps::ConstructionSite>(dynamic_cast<Screeps::ConstructionSite *>(roomObj.release()));
if (!constructionSite)
{
searchConstructionSite();
return nullptr;
}
return std::move(constructionSite);
}
void DouwcoHivemind::Builder::searchConstructionSite()
{
int leastProgressLeft = INT16_MAX;
Screeps::ConstructionSite *selectedConstructionSite;
auto constructionSites = creep.room().find(Screeps::FIND_MY_CONSTRUCTION_SITES);
for (auto &constructionSiteObject : constructionSites)
{
auto constructionSite = dynamic_cast<Screeps::ConstructionSite *>(constructionSiteObject.get());
if (!constructionSite)
continue;
int progressLeft = constructionSite->progressTotal() - constructionSite->progress();
if(constructionSite->structureType() == Screeps::STRUCTURE_ROAD) progressLeft *= 100;
if (progressLeft < leastProgressLeft)
{
leastProgressLeft = progressLeft;
selectedConstructionSite = constructionSite;
}
}
if (selectedConstructionSite)
target_id = selectedConstructionSite->id();
else
target_id.clear();
}

View File

@@ -0,0 +1,143 @@
#include <algorithm>
#include <Screeps/Game.hpp>
#include <Screeps/Room.hpp>
#include <Screeps/RoomPosition.hpp>
#include "Creeps/CreepBase.hpp"
#include "Tools/JsonTool.hpp"
#include "Tools/PathTool.hpp"
#include "Tools/MeasureTool.hpp"
DouwcoHivemind::CreepBase::CreepBase(Screeps::Creep crp) : creep(crp),
memory(crp.memory())
{
role = memory.contains("role") ? static_cast<CreepRole>(memory["role"]) : CreepRole::UNEMPLOYED;
target_id = memory.contains("target_id") ? static_cast<std::string>(memory["target_id"]) : std::string();
}
DouwcoHivemind::CreepBase::~CreepBase()
{
memory["target_id"] = target_id;
creep.setMemory(memory);
}
void DouwcoHivemind::CreepBase::moveToTarget(int dist)
{
// Is move required?
auto target = getRoomObjectTarget();
if (isNearTo(target->pos(), dist))
{
memory.erase("path");
return;
}
// Is wating?
if (memory.contains("wait") && memory["wait"] > 0)
{
memory["wait"] = memory["wait"].get<int>() - 1;
creep.say("Waiting..");
return;
}
// Is there a path to walk?
if (!memory.contains("path") || memory["path"].empty())
{
creep.say("Searching route!");
auto target_pos = target->pos();
auto path = creep.room().findPath(creep.pos(), target_pos);
auto last = path.back();
if (last.x - target_pos.x() > dist || last.y - target_pos.y() > dist)
{
creep.say("No possible path");
memory["wait"] = rand() % 20;
return;
}
memory["path"] = vectorToJson(flattenPathSteps(path));
}
// JS::console.log(std::string("creep pos: [") +
// std::to_string(creep.pos().x()) +
// std::string(",") +
// std::to_string(creep.pos().y()) +
// std::string("]"));
// Get step from memory
int pathStepData[5] = {0};
if (memory["path"].size() > 5)
{
for (int i = 0; i < 5; i++)
{
pathStepData[i] = memory["path"][i];
}
}
else
{
memory.erase("path");
return;
}
// Is the move of last tick executed?
int x = creep.pos().x();
int y = creep.pos().y();
Screeps::Room::PathStep step;
step.x = pathStepData[0];
step.y = pathStepData[1];
step.dx = pathStepData[2];
step.dy = pathStepData[3];
step.direction = pathStepData[4];
if (memory.contains("last_pos"))
{
int last_x = memory["last_pos"]["x"];
int last_y = memory["last_pos"]["y"];
memory.erase("last_pos");
if (x == last_x && y == last_y)
{
creep.say("I'm stuck!");
memory["wait"] = rand() % 5;
return;
}
}
// Is the creep on the place intended by the path?
if (!(x == step.x - step.dx && y == step.y - step.dy))
{
creep.say("I'm lost!");
memory["wait"] = rand() % 5;
memory.erase("path");
return;
}
// Lets move forward
int resp = creep.move(step.direction);
if (resp == Screeps::OK)
{
memory["last_pos"]["x"] = x;
memory["last_pos"]["y"] = y;
for (int i = 0; i < 5; i++)
{
memory["path"].erase(0);
}
}
}
std::unique_ptr<Screeps::RoomObject> DouwcoHivemind::CreepBase::getRoomObjectTarget()
{
// Check if game can find target
auto roomObj = Screeps::Game.getObjectById(target_id);
if (!roomObj)
{
JS::console.log(creep.name() + ": Game can\'t find target id");
return nullptr;
}
return std::move(roomObj);
}
bool DouwcoHivemind::CreepBase::isNearTo(const Screeps::RoomPosition &pos, int dist)
{
return DouwcoHivemind::isNearTo(creep.pos(), pos, dist);
}

View File

@@ -0,0 +1,88 @@
#include <Screeps/Game.hpp>
#include <Screeps/Memory.hpp>
#include "Engine.hpp"
#include "Creeps/Supplier.hpp"
#include "Creeps/Upgrader.hpp"
#include "Creeps/Builder.hpp"
#include "Creeps/Maintainer.hpp"
#include "Structures/Spawn.hpp"
DouwcoHivemind::Engine::Engine()
{
ReadOutCreeps();
ReadOutStructures();
}
void DouwcoHivemind::Engine::loop()
{
JS::console.log(std::string("Iterating over creeps"));
for (auto &creep : creeps)
creep->loop();
JS::console.log(std::string("Iterating over structures"));
for (auto &structure : structures)
structure->loop();
if (Screeps::Game.time() % 1000 == 0)
{
clearDeadCreepMemory();
}
}
void DouwcoHivemind::Engine::ReadOutCreeps()
{
JS::console.log(std::string("Reading out creeps"));
auto src_creeps = Screeps::Game.creeps();
for (auto &creep : src_creeps)
{
CreepRole role = creep.second.memory()["role"];
if (role == CreepRole::SUPPLIER)
creeps.push_back(std::make_unique<Supplier>(creep.second));
else if (role == CreepRole::UPGRADER)
creeps.push_back(std::make_unique<Upgrader>(creep.second));
else if (role == CreepRole::BUILDER)
creeps.push_back(std::make_unique<Builder>(creep.second));
else if (role == CreepRole::MAINTAINER)
creeps.push_back(std::make_unique<Maintainer>(creep.second));
}
}
void DouwcoHivemind::Engine::ReadOutStructures()
{
JS::console.log(std::string("Reading out structures"));
auto spawns = Screeps::Game.spawns();
for (auto &spawn : spawns)
{
structures.push_back(std::make_unique<Spawn>(spawn.second));
}
}
void DouwcoHivemind::Engine::clearDeadCreepMemory()
{
auto creepMemory = Screeps::Memory["creeps"];
auto creepsMap = Screeps::Game.creeps();
int iterator = 0;
for (auto [name, creep] : creepMemory.items())
{
// avoid cpu overload
iterator++;
if (iterator == 100)
break;
bool containsname = false;
for (auto creepObject : creepsMap)
{
if (creepObject.first == name)
{
containsname = true;
break;
}
}
if (!containsname)
creepMemory.erase(name);
}
Screeps::Memory.set("creeps", creepMemory);
}

View File

@@ -0,0 +1,32 @@
#include <Screeps/Context.hpp>
#include <Screeps/Creep.hpp>
#include <Screeps/StructureSpawn.hpp>
#include <emscripten.h>
#include <emscripten/bind.h>
#include <emscripten/val.h>
#include "Engine.hpp"
#include "Structures/Spawn.hpp"
EMSCRIPTEN_KEEPALIVE
extern "C" void loop()
{
Screeps::Context::update();
JS::console.log(std::string("\n\n\n\n\n\n\n\n\n"));
JS::console.log(std::string("Processing tick:\t") + std::to_string(Screeps::Game.time()));
{
DouwcoHivemind::Engine engine;
engine.loop();
}
JS::console.log("Used CPU:\t" + std::to_string(Screeps::Game.cpuGetUsed()));
JS::console.log("Bucket:\t" + std::to_string(static_cast<int>(Screeps::Game.cpu()["bucket"])));
}
EMSCRIPTEN_BINDINGS(loop)
{
emscripten::function("loop", &loop);
}

View File

@@ -0,0 +1,89 @@
#include <vector>
#include <optional>
#include <emscripten.h>
#include <Screeps/Game.hpp>
#include <Screeps/Creep.hpp>
#include <Screeps/Source.hpp>
#include <Screeps/Room.hpp>
#include <Screeps/RoomPosition.hpp>
#include <Screeps/RoomObject.hpp>
#include <Screeps/Structure.hpp>
#include <Screeps/StructureController.hpp>
#include <Screeps/StructureSpawn.hpp>
#include <Screeps/StructureExtension.hpp>
#include <Screeps/StructureTower.hpp>
#include <Screeps/Store.hpp>
#include "Creeps/Maintainer.hpp"
void DouwcoHivemind::Maintainer::depositEnergy()
{
auto structure = getDamagedStructureTarget();
if (!structure)
return;
if (isNearTo(structure->pos(), 1))
{
int resp = creep.repair(*structure);
}
else
{
moveToTarget();
}
}
std::unique_ptr<Screeps::Structure> DouwcoHivemind::Maintainer::getDamagedStructureTarget()
{
auto roomObj = getRoomObjectTarget();
if (!roomObj)
{
searchDamagedStructure();
return nullptr;
}
auto structure = std::unique_ptr<Screeps::Structure>(dynamic_cast<Screeps::Structure *>(roomObj.release()));
if (!structure)
{
searchDamagedStructure();
return nullptr;
}
// Check if the structure is still broken
int damage = structure->hitsMax() - structure->hits();
if (damage == 0)
{
searchDamagedStructure();
return nullptr;
}
return std::move(structure);
}
void DouwcoHivemind::Maintainer::searchDamagedStructure()
{
int lowestMaintaince = INT16_MAX;
Screeps::Structure *selectedStructure;
auto structures = creep.room().find(Screeps::FIND_STRUCTURES);
for (auto &structureObject : structures)
{
auto structure = dynamic_cast<Screeps::Structure *>(structureObject.get());
if (!structure)
continue;
int maintance = structure->hits();
auto structureType = structure->structureType();
if (structureType == Screeps::STRUCTURE_CONTROLLER)
continue;
if (maintance < lowestMaintaince)
{
lowestMaintaince = maintance;
selectedStructure = structure;
}
}
if (selectedStructure)
target_id = selectedStructure->id();
else
target_id.clear();
}

View File

@@ -0,0 +1,74 @@
#include <Screeps/Game.hpp>
#include <Screeps/Room.hpp>
#include "Creeps/CreepBase.hpp"
#include "Structures/Spawn.hpp"
void DouwcoHivemind::Spawn::loop()
{
// Only run every 50 ticks
if (Screeps::Game.time() % 50 != 0)
return;
int energyAvailable = spawn.room().energyAvailable();
int energyCapacityAvailable = spawn.room().energyCapacityAvailable();
int required_upgraders = 1;
int required_suppliers = 1;
int required_maintainers = spawn.room().find(Screeps::FIND_MY_STRUCTURES).size() <= 2 ? 0 : 1;;
int required_builders = spawn.room().find(Screeps::FIND_MY_CONSTRUCTION_SITES).size() == 0 ? 0 : 1;
for (auto &creep : Screeps::Game.creeps())
{
CreepRole role = creep.second.memory()["role"];
if (role == CreepRole::SUPPLIER)
required_suppliers--;
else if (role == CreepRole::UPGRADER)
required_upgraders--;
else if (role == CreepRole::MAINTAINER)
required_maintainers--;
else if (role == CreepRole::BUILDER)
required_builders--;
}
if (energyAvailable < energyCapacityAvailable && required_suppliers < 2)
return;
std::string name;
JSON opts;
if (required_suppliers > 0)
{
opts["memory"]["role"] = CreepRole::SUPPLIER;
name = "Supplier: ";
}
else if (required_upgraders > 0)
{
opts["memory"]["role"] = CreepRole::UPGRADER;
name = "Upgrader: ";
}
else if (required_builders > 0)
{
opts["memory"]["role"] = CreepRole::BUILDER;
name = "Builder: ";
}
else if (required_maintainers > 0)
{
opts["memory"]["role"] = CreepRole::MAINTAINER;
name = "Maintainer: ";
}
else
return;
std::vector<std::string> body;
for (int i = 0; i < energyAvailable / 200; i++)
{
body.push_back("work");
body.push_back("carry");
body.push_back("move");
}
spawn.spawnCreep(
body,
name + std::to_string(Screeps::Game.time()),
opts);
}

View File

@@ -0,0 +1,121 @@
#include <vector>
#include <optional>
#include <emscripten.h>
#include <Screeps/Game.hpp>
#include <Screeps/Creep.hpp>
#include <Screeps/Source.hpp>
#include <Screeps/Room.hpp>
#include <Screeps/RoomPosition.hpp>
#include <Screeps/RoomObject.hpp>
#include <Screeps/Structure.hpp>
#include <Screeps/StructureController.hpp>
#include <Screeps/StructureSpawn.hpp>
#include <Screeps/StructureExtension.hpp>
#include <Screeps/StructureTower.hpp>
#include <Screeps/Store.hpp>
#include "Creeps/Supplier.hpp"
void DouwcoHivemind::Supplier::depositEnergy()
{
auto structure = getEnergyStructureTarget();
if (!structure)
return;
if (isNearTo(structure->pos(), 1))
{
int resp = creep.transfer(*structure, Screeps::RESOURCE_ENERGY);
}
else
{
moveToTarget();
}
}
std::unique_ptr<Screeps::Structure> DouwcoHivemind::Supplier::getEnergyStructureTarget()
{
auto roomObj = getRoomObjectTarget();
if (!roomObj)
{
searchEnergyStructure();
return nullptr;
}
auto structure = std::unique_ptr<Screeps::Structure>(dynamic_cast<Screeps::Structure *>(roomObj.release()));
if (!structure)
{
searchEnergyStructure();
return nullptr;
}
// Check if the structure can receive energy to harvest
int energyCapacity;
auto structureType = structure->structureType();
if (structureType == Screeps::STRUCTURE_SPAWN)
{
auto spawn = dynamic_cast<Screeps::StructureSpawn *>(structure.get());
energyCapacity = spawn->store().getFreeCapacity(Screeps::RESOURCE_ENERGY).value();
}
else if (structureType == Screeps::STRUCTURE_EXTENSION)
{
auto extension = dynamic_cast<Screeps::StructureExtension *>(structure.get());
energyCapacity = extension->store().getFreeCapacity(Screeps::RESOURCE_ENERGY).value();
}
else if (structureType == Screeps::STRUCTURE_TOWER)
{
auto extension = dynamic_cast<Screeps::StructureTower *>(structure.get());
energyCapacity = extension->store().getFreeCapacity(Screeps::RESOURCE_ENERGY).value();
}
if (energyCapacity == 0)
{
searchEnergyStructure();
return nullptr;
}
return std::move(structure);
}
void DouwcoHivemind::Supplier::searchEnergyStructure()
{
int mostEnergyNeeded = 0;
Screeps::Structure *selectedStructure;
auto structures = creep.room().find(Screeps::FIND_MY_STRUCTURES);
for (auto &structureObject : structures)
{
auto structure = dynamic_cast<Screeps::Structure *>(structureObject.get());
if (!structure)
continue;
int energyRequired;
auto structureType = structure->structureType();
if (structureType == Screeps::STRUCTURE_SPAWN)
{
auto spawn = dynamic_cast<Screeps::StructureSpawn *>(structure);
energyRequired = spawn->store().getFreeCapacity(Screeps::RESOURCE_ENERGY).value();
}
else if (structureType == Screeps::STRUCTURE_EXTENSION)
{
auto extension = dynamic_cast<Screeps::StructureExtension *>(structure);
energyRequired = extension->store().getFreeCapacity(Screeps::RESOURCE_ENERGY).value();
}
else if (structureType == Screeps::STRUCTURE_TOWER)
{
auto extension = dynamic_cast<Screeps::StructureTower *>(structure);
energyRequired = extension->store().getFreeCapacity(Screeps::RESOURCE_ENERGY).value();
}
if (energyRequired > mostEnergyNeeded)
{
mostEnergyNeeded = energyRequired;
selectedStructure = structure;
}
}
if (selectedStructure)
target_id = selectedStructure->id();
else
target_id.clear();
}

View File

@@ -0,0 +1,33 @@
#include <vector>
#include <optional>
#include <emscripten.h>
#include <Screeps/Game.hpp>
#include <Screeps/Creep.hpp>
#include <Screeps/Source.hpp>
#include <Screeps/Room.hpp>
#include <Screeps/RoomPosition.hpp>
#include <Screeps/RoomObject.hpp>
#include <Screeps/Structure.hpp>
#include <Screeps/StructureController.hpp>
#include <Screeps/StructureSpawn.hpp>
#include <Screeps/StructureExtension.hpp>
#include <Screeps/StructureTower.hpp>
#include <Screeps/Constants.hpp>
#include <Screeps/Store.hpp>
#include "Creeps/Upgrader.hpp"
void DouwcoHivemind::Upgrader::depositEnergy()
{
auto controller = creep.room().controller().value();
target_id = controller.id();
if (isNearTo(controller.pos(), 3))
{
int resp = creep.upgradeController(controller);
}
else
{
moveToTarget();
}
}

View File

@@ -0,0 +1,123 @@
#include <vector>
#include <optional>
#include <emscripten.h>
#include <Screeps/Game.hpp>
#include <Screeps/Creep.hpp>
#include <Screeps/Source.hpp>
#include <Screeps/Room.hpp>
#include <Screeps/RoomPosition.hpp>
#include <Screeps/RoomObject.hpp>
#include <Screeps/Structure.hpp>
#include <Screeps/StructureController.hpp>
#include <Screeps/StructureSpawn.hpp>
#include <Screeps/StructureExtension.hpp>
#include <Screeps/StructureTower.hpp>
#include <Screeps/Constants.hpp>
#include <Screeps/Store.hpp>
#include "Creeps/Worker.hpp"
DouwcoHivemind::Worker::Worker(Screeps::Creep crp) : CreepBase(crp)
{
harvesting = memory.contains("harvesting") ? static_cast<bool>(memory["harvesting"]) : false;
}
DouwcoHivemind::Worker::~Worker()
{
memory["harvesting"] = harvesting;
}
void DouwcoHivemind::Worker::loop()
{
if (harvesting)
{
if (creep.store().getFreeCapacity(Screeps::RESOURCE_ENERGY) == 0)
{
harvesting = false;
target_id.clear();
}
harvestSource();
}
else
{
if (creep.store().getUsedCapacity(Screeps::RESOURCE_ENERGY) == 0)
{
harvesting = true;
target_id.clear();
}
depositEnergy();
}
}
void DouwcoHivemind::Worker::harvestSource()
{
auto source = getSourceTarget();
if (!source)
return;
if (isNearTo(source->pos(), 1))
{
int resp = creep.harvest(*source);
}
else
{
moveToTarget();
}
}
std::unique_ptr<Screeps::Source> DouwcoHivemind::Worker::getSourceTarget()
{
auto roomObj = getRoomObjectTarget();
if (!roomObj)
{
searchSource();
return nullptr;
}
// Check if found roomobject is an actual source
auto source = std::unique_ptr<Screeps::Source>(dynamic_cast<Screeps::Source *>(roomObj.release()));
if (!source)
{
// EM_ASM({console.log($0 + ': Can\'t cast target to Source')}, creep.name().c_str());
searchSource();
return nullptr;
}
// Check if the source still has energy to harvest
if (source->energy() == 0)
{
searchSource();
return nullptr;
}
return std::move(source);
}
void DouwcoHivemind::Worker::searchSource()
{
target_id.clear();
auto sources = creep.room().find(Screeps::FIND_SOURCES_ACTIVE);
if (sources.size() == 0)
return;
int x = creep.pos().x();
int y = creep.pos().y();
int closestDistance = INT16_MAX;
Screeps::Source *selectedSource;
for(auto &sourceObject : sources){
auto source =dynamic_cast<Screeps::Source *>(sourceObject.get());
if(source->energy()==0) continue;
int dx = source->pos().x() - x;
int dy = source->pos().y() - y;
int distance = dx*dx + dy*dy;
if(distance < closestDistance){
closestDistance = distance;
selectedSource = source;
}
}
if(!selectedSource) return;
target_id = selectedSource->id();
}

1
emsdk Submodule

Submodule emsdk added at f39e849eff

View File

@@ -1,57 +0,0 @@
/* #######################################################
# Deliver energy to spawns, controller and extencions #
####################################################### */
module.exports = {
do: function(creep){
//creep.memory.target = null;
// Memory creation
if(creep.memory.restock == undefined) creep.memory.restock = true;
if(creep.memory.target == undefined) creep.memory.target = null;
// Job implementation
if(creep.memory.restock){
if(creep.memory.target == null){
if(creep.room.storage != null && 1000 < creep.room.storage.store.getUsedCapacity(RESOURCE_ENERGY)) creep.memory.target = creep.room.storage.id;
else {
var container = creep.pos.findClosestByPath(FIND_STRUCTURES,
{filter: (s)=>(s.structureType == STRUCTURE_CONTAINER
&& 0 < s.store.getUsedCapacity(RESOURCE_ENERGY))});
if(container != null) creep.memory.target = container.id;
}
}
var target = Game.getObjectById(creep.memory.target);
if(creep.withdraw(target, RESOURCE_ENERGY) == ERR_NOT_IN_RANGE) creep.moveTo(target);
if(target != null && target.store.getUsedCapacity(RESOURCE_ENERGY) < creep.store.getFreeCapacity(RESOURCE_ENERGY)*0.4) creep.memory.target = null;
if(creep.store.getFreeCapacity(RESOURCE_ENERGY) == 0){
creep.memory.restock = false;
creep.memory.target = null;
}
} else {
if(creep.memory.target == null){ // aquire target
// constuction
var structure = creep.pos.findClosestByRange(FIND_MY_CONSTRUCTION_SITES);
// ramparts
if(structure == null){
var ramparts = creep.room.find(FIND_STRUCTURES,
{filter: (s)=>((s.structureType == STRUCTURE_RAMPART || s.structureType == STRUCTURE_WALL) && s.hits < s.hitsMax)});
for(var ramp in ramparts){
ramp = ramparts[ramp];
if(structure == null || structure.hits > ramp.hits) structure = ramp;
}
}
creep.memory.target = structure.id;
}
var target = Game.getObjectById(creep.memory.target);
if(target == null || target.hits == target.hitsMax) creep.memory.target = null;
if(creep.build(target) == ERR_NOT_IN_RANGE || creep.repair(target) == ERR_NOT_IN_RANGE) creep.moveTo(target);
if(creep.store.getUsedCapacity(RESOURCE_ENERGY) == 0){
creep.memory.restock = true;
creep.memory.target = null;
}
}
}
};

View File

@@ -1,22 +0,0 @@
/* #######################################################
# Deliver energy to spawns, controller and extencions #
####################################################### */
module.exports = {
do: function(creep){
if(creep.memory.flag != undefined && Game.flags[creep.memory.flag].room.name != creep.room.name) creep.moveTo(Game.flags[creep.memory.flag]);
if(creep.memory.target == undefined) creep.memory.target = null;
if(creep.memory.target == null){
var enemy = creep.pos.findClosestByPath(FIND_HOSTILE_CREEPS);
if(enemy != null) creep.memory.target = enemy.id;
}
var enemy = Game.getObjectById(creep.memory.target);
if(enemy != null){
creep.say("ATTACK");
if(creep.attack(enemy) == ERR_NOT_IN_RANGE) creep.moveTo(enemy);
} else {
creep.memory.target = null;
}
}
};

View File

@@ -1,92 +0,0 @@
/* ###########################################
# Mine energy and do all fundamental jobs #
###########################################*/
module.exports = {
do: function(creep){
//memory setup
if(creep.memory.harvesting == undefined) creep.memory.harvesting = true;
if(creep.memory.counter == undefined) creep.memory.counter = 0;
if(creep.memory.target == undefined) creep.memory.target = null;
if (creep.memory.harvesting){
var source = Game.getObjectById(creep.memory.source_id);
var result = creep.harvest(source);
if (result == ERR_NOT_IN_RANGE){
creep.moveTo(source);
}
if (result == ERR_NOT_ENOUGH_RESOURCES || creep.store.getFreeCapacity(RESOURCE_ENERGY) == 0){
creep.memory.harvesting = false;
creep.memory.target = null;
}
} else {
if(creep.memory.target == null){
switch(creep.memory.counter%10){
case 0: // upgrading
creep.memory.target = creep.room.controller.id;
break;
case 1: // suppling
case 2:
case 3:
case 4:
creep.memory.target = creep.pos.findClosestByRange(FIND_MY_STRUCTURES,{
filter:(s) => ( s.structureType == STRUCTURE_SPAWN || s.structureType == STRUCTURE_EXTENSION ) && s.store.getFreeCapacity(RESOURCE_ENERGY) > 0});
if(creep.memory.target != null) creep.memory.target = creep.memory.target.id;
else creep.memory.counter += 1;
break;
case 5:
case 6:
case 7:
case 8:
creep.memory.target = creep.pos.findClosestByRange(FIND_CONSTRUCTION_SITES);
if(creep.memory.target != null) creep.memory.target = creep.memory.target.id;
else creep.memory.counter += 1;
break;
case 9: // repairing (no walls or ramparts)
creep.memory.target = creep.pos.findClosestByRange(FIND_STRUCTURES,{
filter:(s) => ( s.structureType != STRUCTURE_WALL && s.structureType != STRUCTURE_RAMPART) && s.hits < s.hitsMax});
if(creep.memory.target != null) creep.memory.target = creep.memory.target.id;
else creep.memory.counter += 1;
break;
}
}
var target = Game.getObjectById(creep.memory.target);
var response = OK;
switch(creep.memory.counter%10){
case 0:
response = creep.transfer(target, RESOURCE_ENERGY);
break;
case 1:
case 2:
case 3:
case 4:
response = creep.transfer(target, RESOURCE_ENERGY);
if(target != null && target.store.getFreeCapacity(RESOURCE_ENERGY) == 0) creep.memory.target = null;
break;
case 5:
case 6:
case 7:
case 8:
response = creep.build(target);
if(target != null && target.progress == target.progressTotal) creep.memory.target = null;
break;
case 9:
response = creep.repair(target);
if(target != null && target.hits == target.hitsMax) creep.memory.target = null;
break;
}
if(response == ERR_NOT_IN_RANGE){
creep.moveTo(target);
} else if(response == ERR_FULL || response == ERR_INVALID_TARGET){
creep.memory.target = null;
}
if (creep.store.getUsedCapacity(RESOURCE_ENERGY) == 0){
creep.memory.harvesting = true;
creep.memory.target = null;
creep.memory.counter += 1;
}
}
}
};

View File

@@ -1,16 +0,0 @@
/* ########################################
# Mine energy and drop it in container #
########################################*/
module.exports = {
do: function(creep){
var container = Game.getObjectById(creep.memory.container_id);
if(container != null && creep.pos.isEqualTo(container.pos)){
if(creep.memory.source_id == undefined) creep.memory.source_id = creep.pos.findClosestByPath(FIND_SOURCES).id;
creep.harvest(Game.getObjectById(creep.memory.source_id));
} else {
creep.moveTo(Game.getObjectById(creep.memory.container_id));
}
}
};

View File

@@ -1,93 +0,0 @@
/* ###########################################
# Mine energy and do all fundamental jobs #
###########################################*/
module.exports = {
do: function(creep){
creep.memory.home = "Central"
//memory setup
if(creep.memory.harvesting == undefined) creep.memory.harvesting = true;
if(creep.memory.counter == undefined) creep.memory.counter = 0;
if(creep.memory.target == undefined) creep.memory.target = null;
if (creep.memory.harvesting){
var source = Game.getObjectById(creep.memory.source_id);
if(source != undefined && creep.room.name == source.room.name){
var container = creep.pos.findClosestByPath(FIND_STRUCTURES, { filter:(s) => ( s.structureType == STRUCTURE_CONTAINER && s.store.getUsedCapacity(RESOURCE_ENERGY) > creep.store.getFreeCapacity(RESOURCE_ENERGY))});
if(container == null) {
var source = Game.getObjectById(creep.memory.source_id);
result = creep.harvest(source);
if (result == ERR_NOT_IN_RANGE){
creep.moveTo(source);
}
} else {
var result = creep.withdraw(container, RESOURCE_ENERGY);
if (result == ERR_NOT_IN_RANGE){
creep.moveTo(container);
}
}
if (creep.store.getFreeCapacity(RESOURCE_ENERGY) == 0){
creep.memory.harvesting = false;
creep.memory.target = null;
}
} else {
creep.moveTo(source);
}
} else {
if(creep.memory.target == null){
switch(creep.memory.counter%3){
case 0: // building
creep.memory.target = creep.pos.findClosestByRange(FIND_CONSTRUCTION_SITES);
if(creep.memory.target != null) creep.memory.target = creep.memory.target.id;
else creep.memory.counter += 1;
break;
case 1: // repairing (no walls or ramparts)
creep.memory.target = creep.pos.findClosestByRange(FIND_STRUCTURES,{
filter:(s) => ( s.structureType != STRUCTURE_WALL && s.structureType != STRUCTURE_RAMPART) && s.hits < s.hitsMax-creep.store.getUsedCapacity(RESOURCE_ENERGY)*3/4});
if(creep.memory.target != null) creep.memory.target = creep.memory.target.id;
else creep.memory.counter += 1;
break;
case 2:
var home = Game.spawns[creep.memory.home];
if(creep.room.name == home.room.name){
creep.memory.target = creep.pos.findClosestByRange(FIND_MY_STRUCTURES,{
filter:(s) => ( s.structureType == STRUCTURE_SPAWN || s.structureType == STRUCTURE_EXTENSION || s.structureType == STRUCTURE_STORAGE ) && s.store.getFreeCapacity(RESOURCE_ENERGY) > 0});
if(creep.memory.target != null) creep.memory.target = creep.memory.target.id;
else creep.memory.counter += 1;
} else {
creep.moveTo(home);
}
break;
}
}
var target = Game.getObjectById(creep.memory.target);
var response = OK;
switch(creep.memory.counter%3){
case 0: // building
response = creep.build(target);
if(target != null && target.progress == target.progressTotal) creep.memory.target = null;
break;
case 1:
response = creep.repair(target);
if(target != null && target.hits == target.hitsMax) creep.memory.target = null;
break;
case 2:
response = creep.transfer(target, RESOURCE_ENERGY);
if(target != null && target.store.getFreeCapacity(RESOURCE_ENERGY) == 0) creep.memory.target = null;
break;
}
if(response == ERR_NOT_IN_RANGE){
creep.moveTo(target);
} else if(response == ERR_FULL || response == ERR_INVALID_TARGET){
creep.memory.target = null;
}
if (creep.store.getUsedCapacity(RESOURCE_ENERGY) == 0){
creep.memory.harvesting = true;
creep.memory.target = null;
creep.memory.counter += 1;
}
}
}
};

View File

@@ -1,16 +0,0 @@
/* ###########################################
# Go to a controller and reserve the room #
###########################################*/
module.exports = {
do: function(creep){
if(Game.flags[creep.memory.target].room != undefined && Game.flags[creep.memory.target].room == creep.room){
if(creep.reserveController(creep.room.controller) == ERR_NOT_IN_RANGE){
creep.moveTo(creep.room.controller);
}
} else {
creep.moveTo(Game.flags[creep.memory.target]);
}
}
};

View File

@@ -1,54 +0,0 @@
/* #######################################################
# Deliver energy to spawns, controller and extencions #
####################################################### */
module.exports = {
do: function(creep){
// Memory creation
if(creep.memory.restock == undefined) creep.memory.restock = true;
if(creep.memory.target == undefined) creep.memory.target = null;
// Job implementation
if(creep.memory.restock){
if(creep.memory.target == null){ // aquire target
var containers = creep.room.find(FIND_STRUCTURES,
{filter: (s)=>(s.structureType == STRUCTURE_CONTAINER
&& s.store.getUsedCapacity(RESOURCE_ENERGY) >= creep.store.getFreeCapacity(RESOURCE_ENERGY)/2)});
var container = containers[0];
for(var c in containers){
c = containers[c];
if(c.store.getUsedCapacity(RESOURCE_ENERGY) > container.store.getUsedCapacity(RESOURCE_ENERGY)) container = c;
}
if(container != null) creep.memory.target = container.id;
else creep.memory.target = creep.room.storage.id;
}
var target = Game.getObjectById(creep.memory.target);
if(creep.withdraw(target, RESOURCE_ENERGY) == ERR_NOT_IN_RANGE) creep.moveTo(target);
if(target != null && target.store.getUsedCapacity(RESOURCE_ENERGY) < creep.store.getFreeCapacity(RESOURCE_ENERGY)*0.4) creep.memory.target = null;
if(creep.store.getFreeCapacity(RESOURCE_ENERGY) == 0){
creep.memory.restock = false;
creep.memory.target = null;
}
} else {
if(creep.memory.target == null){ // aquire target
var structure = creep.pos.findClosestByPath(FIND_MY_STRUCTURES,
{filter: (s)=>(s.structureType == STRUCTURE_TOWER && s.store.getUsedCapacity(RESOURCE_ENERGY) < 900)});
if(structure == null) structure = creep.pos.findClosestByPath(FIND_MY_STRUCTURES,
{filter: (s)=>(( s.structureType == STRUCTURE_SPAWN || s.structureType == STRUCTURE_EXTENSION)
&& s.store.getFreeCapacity(RESOURCE_ENERGY) > s.store.getCapacity(RESOURCE_ENERGY)*0.1)});
if(structure == null) structure = creep.pos.findClosestByPath(FIND_MY_STRUCTURES,
{filter: (s)=>(( s.id == "5f3e44e1014017c66fc5df10") && s.store.getFreeCapacity() > 100)});
if(structure == null) structure = creep.room.storage;
if(structure == null) return;
creep.memory.target = structure.id;
}
var target = Game.getObjectById(creep.memory.target);
if(creep.transfer(target, RESOURCE_ENERGY) == ERR_NOT_IN_RANGE) creep.moveTo(target);
if(target != null && target.store.getFreeCapacity(RESOURCE_ENERGY) == 0) creep.memory.target = null;
if(creep.store.getUsedCapacity(RESOURCE_ENERGY) == 0){
creep.memory.restock = true;
creep.memory.target = null;
}
}
}
};

View File

@@ -1,43 +0,0 @@
/* #######################################################
# Deliver energy to spawns, controller and extencions #
####################################################### */
module.exports = {
do: function(creep){
// Memory creation
if(creep.memory.restock == undefined) creep.memory.restock = true;
if(creep.memory.target == undefined) creep.memory.target = null;
// Job implementation
if(creep.memory.restock){
if(creep.memory.target == null){
if(creep.room.storage != null && 1000 < creep.room.storage.store.getUsedCapacity(RESOURCE_ENERGY)) creep.memory.target = creep.room.storage.id;
else {
var container = creep.pos.findClosestByPath(FIND_STRUCTURES,
{filter: (s)=>(s.structureType == STRUCTURE_CONTAINER
&& 0 < s.store.getUsedCapacity(RESOURCE_ENERGY))});
if(container != null) creep.memory.target = container.id;
}
}
var target = Game.getObjectById(creep.memory.target);
if(creep.withdraw(target, RESOURCE_ENERGY) == ERR_NOT_IN_RANGE) creep.moveTo(target);
if(target != null && target.store.getUsedCapacity(RESOURCE_ENERGY) < creep.store.getFreeCapacity(RESOURCE_ENERGY)*0.4) creep.memory.target = null;
if(creep.store.getFreeCapacity(RESOURCE_ENERGY) == 0){
creep.memory.restock = false;
creep.memory.target = null;
}
} else {
if(creep.memory.target == null){ // aquire target
var structure = structure = creep.room.controller;
creep.memory.target = structure.id;
}
var target = Game.getObjectById(creep.memory.target);
if(creep.transfer(target, RESOURCE_ENERGY) == ERR_NOT_IN_RANGE) creep.moveTo(target);
if(creep.store.getUsedCapacity(RESOURCE_ENERGY) == 0){
creep.memory.restock = true;
creep.memory.target = null;
}
}
}
};

14
js/main.js Normal file
View File

@@ -0,0 +1,14 @@
'use strict';
const wasm_loader = require('wasm_loader')
var mod;
wasm_loader('douwco_hivemind_loader', 'douwco_hivemind_module').then((instance) => {
console.log("WASM module loaded.");
mod = instance;
});
module.exports.loop = function () {
if (mod !== undefined)
mod.loop();
}

24
js/wasm_loader.js Normal file
View File

@@ -0,0 +1,24 @@
'use strict';
module.exports = ((mod_js, mod_wasm, opts) => {
const mod_file = require(mod_js);
const bin_file = require(mod_wasm);
opts = opts || {};
opts.wasmBinary = bin_file;
opts.print = opts.print || ((text) => console.log(text));
opts.printErr = opts.printErr || ((text) => console.log(`error: ${text}`));
opts.onAbort = opts.onAbort || (() => console.log('WASM aborted!!!'));
// == don't call main()
if (typeof opts.noInitialRun === "undefined")
opts.noInitialRun = true;
// == don't terminate after returning from main()
if (typeof opts.noExitRuntime === "undefined")
opts.noExitRuntime = true;
return mod_file(opts);
});

26
main.js
View File

@@ -1,26 +0,0 @@
var controller_spawns = require("controller_spawns");
var controller_creeps = require("controller_creeps");
var controller_towers = require("controller_towers");
var ai_main = require("ai_main");
module.exports.loop = function () {
ai_main.run_front();
controller_creeps.run();
controller_towers.run();
controller_spawns.run();
if (Game.time % 60 == 30) clear_dead_creeps_from_memory();
ai_main.run_back();
}
/*
GLOBAL FUNCTIONS
*/
function clear_dead_creeps_from_memory() {
for (var cr in Memory.creeps) {
if (Game.creeps[cr] == null) {
delete (Memory.creeps[cr]);
}
}
}

1
screepsxx Submodule

Submodule screepsxx added at 3567060bf5