Merge branch 'master' of https://github.com/Anuken/Mindustry into tileable-logic-displays
# Conflicts: # core/assets/icons/icons.properties # core/assets/logicids.dat
2
.github/workflows/deployment.yml
vendored
@@ -73,7 +73,7 @@ jobs:
|
||||
cd ../MindustryBuilds
|
||||
echo "Updating version to ${RELEASE_VERSION:1}"
|
||||
BNUM=$(($GITHUB_RUN_NUMBER + 1000))
|
||||
echo versionName=7-fdroid-${RELEASE_VERSION:1}$'\n'versionCode=${BNUM} > version_fdroid.txt
|
||||
echo versionName=8-fdroid-${RELEASE_VERSION:1}$'\n'versionCode=${BNUM} > version_fdroid.txt
|
||||
git add .
|
||||
git commit -m "Updating to build ${RELEASE_VERSION:1}"
|
||||
git push https://Anuken:${{ secrets.API_TOKEN_GITHUB }}@github.com/Anuken/MindustryBuilds
|
||||
|
||||
4
.gitignore
vendored
@@ -23,6 +23,7 @@ ios/libs/
|
||||
/tools/build/
|
||||
/tests/build/
|
||||
/server/build/
|
||||
ios/libs/
|
||||
changelog
|
||||
saves/
|
||||
/core/assets-raw/fontgen/out/
|
||||
@@ -167,3 +168,6 @@ android/libs/
|
||||
|
||||
# ignored due to frequent branch conflicts.
|
||||
core/assets/logicids.dat
|
||||
|
||||
# project files for the sectors
|
||||
core/assets-raw/sprites/ui/sectors/*.json
|
||||
@@ -13,11 +13,13 @@ If you are submitting a new block, make sure it has a name and description, and
|
||||
|
||||
### Do not make large changes before discussing them first.
|
||||
If you are interested in adding a large mechanic/feature or changing large amounts of code, first contact me (Anuken) via [Discord](https://discord.gg/mindustry) - either via PM or by posting in the `#pulls` channel.
|
||||
For most changes, this should not be necessary. I just want to know if you're doing something big so I can offer advice and/or make sure you're not wasting your time on it.
|
||||
For most changes, this should not be necessary. I just want to know if you're doing something big, so I can offer advice and/or make sure you're not wasting your time on it.
|
||||
|
||||
### Do not make formatting PRs.
|
||||
### Do not make formatting or "cleanup" PRs.
|
||||
Yes, there are occurrences of trailing spaces, extra newlines, empty indents, and other tiny errors. No, I don't want to merge, view, or get notified by your 1-line PR fixing it. If you're implementing a PR with modification of *actual code*, feel free to fix formatting in the general vicinity of your changes, but please don't waste everyone's time with pointless changes.
|
||||
|
||||
I **especially** do not want to see PRs that apply any kind of automated analysis to the source code to "optimize" anything - my IDE can do that already. If the PR doesn't actually change anything useful, I'm not going to review or merge it.
|
||||
|
||||
## Style Guidelines
|
||||
|
||||
### Follow the formatting guidelines.
|
||||
@@ -34,7 +36,7 @@ This means:
|
||||
|
||||
Import [this style file](.github/Mindustry-CodeStyle-IJ.xml) into IntelliJ to get correct formatting when developing Mindustry.
|
||||
|
||||
### Do not use incompatible Java features (java.util.function, java.awt).
|
||||
### Do not use incompatible Java features (java.util.function, java.awt, java.lang.Objects).
|
||||
Android and RoboVM (iOS) do not support many of Java 8's features, such as the packages `java.util.function`, `java.util.stream` or `forEach` in collections. Do not use these in your code.
|
||||
If you need to use functional interfaces, use the ones in `arc.func`, which are more or less the same with different naming schemes.
|
||||
|
||||
@@ -66,7 +68,7 @@ Otherwise, use the `Tmp` variables for things like vector/shape operations, or c
|
||||
If using a list, make it a static variable and clear it every time it is used. Re-use as much as possible.
|
||||
|
||||
### Avoid bloated code and unnecessary getters/setters.
|
||||
This is situational, but in essence what it means is to avoid using any sort of getters and setters unless absolutely necessary. Public or protected fields should suffice for most things.
|
||||
This is situational, but in essence, what it means is to avoid using any sort of getters and setters unless absolutely necessary. Public or protected fields should suffice for most things.
|
||||
If something needs to be encapsulated in the future, IntelliJ can handle it with a few clicks.
|
||||
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
# Note: Server list review is currently on pause. No new servers will be merged until v8 is released!
|
||||
# Note: The v7 server list is frozen. No new servers will be accepted. All v8 server PRs should be made [here](https://github.com/Anuken/MindustryServerList/blob/main/servers_v8.json).
|
||||
|
||||
*PRs to edit addresses of existing servers will still be accepted, although very infrequently.*
|
||||
|
||||
|
||||
@@ -17,7 +17,8 @@
|
||||
android:usesCleartextTraffic="true"
|
||||
android:appCategory="game"
|
||||
android:label="@string/app_name"
|
||||
android:fullBackupContent="@xml/backup_rules">
|
||||
android:fullBackupContent="@xml/backup_rules"
|
||||
android:largeHeap="true">
|
||||
<meta-data android:name="android.max_aspect" android:value="2.1"/>
|
||||
<activity
|
||||
android:name="mindustry.android.AndroidLauncher"
|
||||
|
||||
@@ -54,6 +54,8 @@ public class Annotations{
|
||||
/** Whether to generate a base class for this components.
|
||||
* An entity cannot have two base classes, so only one component can have base be true. */
|
||||
boolean base() default false;
|
||||
/** Whether to generate a proper interface for this component class. */
|
||||
boolean genInterface() default true;
|
||||
}
|
||||
|
||||
/** Indicates that a method is implemented by the annotation processor. */
|
||||
@@ -182,18 +184,16 @@ public class Annotations{
|
||||
|
||||
/** A set of two booleans, one specifying server and one specifying client. */
|
||||
public enum Loc{
|
||||
/** Method can only be invoked on the client from the server. */
|
||||
/** Server only. */
|
||||
server(true, false),
|
||||
/** Method can only be invoked on the server from the client. */
|
||||
/** Client only. */
|
||||
client(false, true),
|
||||
/** Method can be invoked from anywhere */
|
||||
/** Both server and client. */
|
||||
both(true, true),
|
||||
/** Neither server nor client. */
|
||||
none(false, false);
|
||||
|
||||
/** If true, this method can be invoked ON clients FROM servers. */
|
||||
public final boolean isServer;
|
||||
/** If true, this method can be invoked ON servers FROM clients. */
|
||||
public final boolean isClient;
|
||||
|
||||
Loc(boolean server, boolean client){
|
||||
@@ -222,16 +222,16 @@ public class Annotations{
|
||||
@Target(ElementType.METHOD)
|
||||
@Retention(RetentionPolicy.SOURCE)
|
||||
public @interface Remote{
|
||||
/** Specifies the locations from which this method can be invoked. */
|
||||
/** Specifies the locations from which this method can cause remote invocations (This -> Remote) [Default: Server -> Client]. */
|
||||
Loc targets() default Loc.server;
|
||||
|
||||
/** Specifies which methods are generated. Only affects server-to-client methods. */
|
||||
/** Specifies which methods are generated. Only affects server-to-client methods (Server -> Client(s)) [Default: Server -> Client & Server -> All Clients]. */
|
||||
Variant variants() default Variant.all;
|
||||
|
||||
/** The local locations where this method is called locally, when invoked. */
|
||||
/** The locations where this method is called locally, when invoked locally (This -> This) [Default: No local invocations]. */
|
||||
Loc called() default Loc.none;
|
||||
|
||||
/** Whether to forward this packet to all other clients upon receival. Client only. */
|
||||
/** Whether the server should forward this packet to all other clients upon receival from a client (Client -> Server -> Other Clients). [Default: Don't Forward Client Invocations] */
|
||||
boolean forward() default false;
|
||||
|
||||
/**
|
||||
|
||||
@@ -19,6 +19,7 @@ import javax.annotation.processing.*;
|
||||
import javax.lang.model.element.*;
|
||||
import javax.lang.model.type.*;
|
||||
import java.lang.annotation.*;
|
||||
import java.util.*;
|
||||
|
||||
@SupportedAnnotationTypes({
|
||||
"mindustry.annotations.Annotations.EntityDef",
|
||||
@@ -97,6 +98,8 @@ public class EntityProcess extends BaseProcessor{
|
||||
|
||||
//create component interfaces
|
||||
for(Stype component : allComponents){
|
||||
|
||||
|
||||
TypeSpec.Builder inter = TypeSpec.interfaceBuilder(interfaceName(component))
|
||||
.addModifiers(Modifier.PUBLIC).addAnnotation(EntityInterface.class);
|
||||
|
||||
@@ -116,45 +119,47 @@ public class EntityProcess extends BaseProcessor{
|
||||
inter.addSuperinterface(ClassName.get(packageName, interfaceName(type)));
|
||||
}
|
||||
|
||||
ObjectSet<String> signatures = new ObjectSet<>();
|
||||
if(component.annotation(Component.class).genInterface()){
|
||||
ObjectSet<String> signatures = new ObjectSet<>();
|
||||
|
||||
//add utility methods to interface
|
||||
for(Smethod method : component.methods()){
|
||||
//skip private methods, those are for internal use.
|
||||
if(method.isAny(Modifier.PRIVATE, Modifier.STATIC)) continue;
|
||||
//add utility methods to interface
|
||||
for(Smethod method : component.methods()){
|
||||
//skip private methods, those are for internal use.
|
||||
if(method.isAny(Modifier.PRIVATE, Modifier.STATIC)) continue;
|
||||
|
||||
//keep track of signatures used to prevent dupes
|
||||
signatures.add(method.e.toString());
|
||||
//keep track of signatures used to prevent dupes
|
||||
signatures.add(method.e.toString());
|
||||
|
||||
inter.addMethod(MethodSpec.methodBuilder(method.name())
|
||||
.addJavadoc(method.doc() == null ? "" : method.doc())
|
||||
.addExceptions(method.thrownt())
|
||||
.addTypeVariables(method.typeVariables().map(TypeVariableName::get))
|
||||
.returns(method.ret().toString().equals("void") ? TypeName.VOID : method.retn())
|
||||
.addParameters(method.params().map(v -> ParameterSpec.builder(v.tname(), v.name())
|
||||
.build())).addModifiers(Modifier.PUBLIC, Modifier.ABSTRACT).build());
|
||||
}
|
||||
|
||||
//generate interface getters and setters for all "standard" fields
|
||||
for(Svar field : component.fields().select(e -> !e.is(Modifier.STATIC) && !e.is(Modifier.PRIVATE) && !e.has(Import.class))){
|
||||
String cname = field.name();
|
||||
|
||||
//getter
|
||||
if(!signatures.contains(cname + "()")){
|
||||
inter.addMethod(MethodSpec.methodBuilder(cname).addModifiers(Modifier.ABSTRACT, Modifier.PUBLIC)
|
||||
.addAnnotations(Seq.with(field.annotations()).select(a -> a.toString().contains("Null") || a.toString().contains("Deprecated")).map(AnnotationSpec::get))
|
||||
.addJavadoc(field.doc() == null ? "" : field.doc())
|
||||
.returns(field.tname()).build());
|
||||
inter.addMethod(MethodSpec.methodBuilder(method.name())
|
||||
.addJavadoc(method.doc() == null ? "" : method.doc())
|
||||
.addExceptions(method.thrownt())
|
||||
.addTypeVariables(method.typeVariables().map(TypeVariableName::get))
|
||||
.returns(method.ret().toString().equals("void") ? TypeName.VOID : method.retn())
|
||||
.addParameters(method.params().map(v -> ParameterSpec.builder(v.tname(), v.name())
|
||||
.build())).addModifiers(Modifier.PUBLIC, Modifier.ABSTRACT).build());
|
||||
}
|
||||
|
||||
//setter
|
||||
if(!field.is(Modifier.FINAL) && !signatures.contains(cname + "(" + field.mirror().toString() + ")") &&
|
||||
!field.annotations().contains(f -> f.toString().equals("@mindustry.annotations.Annotations.ReadOnly"))){
|
||||
inter.addMethod(MethodSpec.methodBuilder(cname).addModifiers(Modifier.ABSTRACT, Modifier.PUBLIC)
|
||||
.addJavadoc(field.doc() == null ? "" : field.doc())
|
||||
.addParameter(ParameterSpec.builder(field.tname(), field.name())
|
||||
.addAnnotations(Seq.with(field.annotations())
|
||||
.select(a -> a.toString().contains("Null") || a.toString().contains("Deprecated")).map(AnnotationSpec::get)).build()).build());
|
||||
//generate interface getters and setters for all "standard" fields
|
||||
for(Svar field : component.fields().select(e -> !e.is(Modifier.STATIC) && !e.is(Modifier.PRIVATE) && !e.has(Import.class))){
|
||||
String cname = field.name();
|
||||
|
||||
//getter
|
||||
if(!signatures.contains(cname + "()")){
|
||||
inter.addMethod(MethodSpec.methodBuilder(cname).addModifiers(Modifier.ABSTRACT, Modifier.PUBLIC)
|
||||
.addAnnotations(Seq.with(field.annotations()).select(a -> a.toString().contains("Null") || a.toString().contains("Deprecated")).map(AnnotationSpec::get))
|
||||
.addJavadoc(field.doc() == null ? "" : field.doc())
|
||||
.returns(field.tname()).build());
|
||||
}
|
||||
|
||||
//setter
|
||||
if(!field.is(Modifier.FINAL) && !signatures.contains(cname + "(" + field.mirror().toString() + ")") &&
|
||||
!field.annotations().contains(f -> f.toString().equals("@mindustry.annotations.Annotations.ReadOnly"))){
|
||||
inter.addMethod(MethodSpec.methodBuilder(cname).addModifiers(Modifier.ABSTRACT, Modifier.PUBLIC)
|
||||
.addJavadoc(field.doc() == null ? "" : field.doc())
|
||||
.addParameter(ParameterSpec.builder(field.tname(), field.name())
|
||||
.addAnnotations(Seq.with(field.annotations())
|
||||
.select(a -> a.toString().contains("Null") || a.toString().contains("Deprecated")).map(AnnotationSpec::get)).build()).build());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -416,19 +421,34 @@ public class EntityProcess extends BaseProcessor{
|
||||
|
||||
//add all methods from components
|
||||
for(ObjectMap.Entry<String, Seq<Smethod>> entry : methods){
|
||||
if(entry.value.contains(m -> m.has(Replace.class))){
|
||||
//check replacements
|
||||
if(entry.value.count(m -> m.has(Replace.class)) > 1){
|
||||
err("Type " + type + " has multiple components replacing method " + entry.key + ".");
|
||||
}
|
||||
Smethod base = entry.value.find(m -> m.has(Replace.class));
|
||||
entry.value.clear();
|
||||
entry.value.add(base);
|
||||
}
|
||||
|
||||
//check multi return
|
||||
if(entry.value.count(m -> !m.isAny(Modifier.NATIVE, Modifier.ABSTRACT) && !m.isVoid()) > 1){
|
||||
err("Type " + type + " has multiple components implementing non-void method " + entry.key + ".");
|
||||
//there are multiple @Replace implementations, or multiple non-void implementations.
|
||||
if(entry.value.size > 1 && (entry.value.contains(m -> m.has(Replace.class)) || entry.value.count(m -> !m.isAny(Modifier.NATIVE, Modifier.ABSTRACT) && !m.isVoid()) > 1)){
|
||||
|
||||
//remove clutter
|
||||
entry.value.removeAll(s -> s.is(Modifier.ABSTRACT));
|
||||
|
||||
Comparator<Smethod> comp = Structs.comps(
|
||||
Structs.comps(
|
||||
//highest priority first
|
||||
Structs.comparingFloat(m -> m.has(MethodPriority.class) ? m.annotation(MethodPriority.class).value() : 0f),
|
||||
//replacement means priority
|
||||
Structs.comparingBool(m -> m.has(Replace.class))
|
||||
),
|
||||
|
||||
//otherwise, the 'highest' subclass (most dependencies)
|
||||
Structs.comparingInt(m -> getDependencies(m.type()).size)
|
||||
);
|
||||
|
||||
Smethod best = entry.value.max(comp);
|
||||
|
||||
if(entry.value.contains(s -> best != s && comp.compare(s, best) == 0)){
|
||||
err("Type " + type + " has multiple components implementing method " + entry.value.first() + " in an ambiguous way. Use MethodPriority to designate which one should be used. Implementations: " +
|
||||
entry.value.map(s -> s.descString()));
|
||||
}
|
||||
|
||||
entry.value.clear();
|
||||
entry.value.add(best);
|
||||
}
|
||||
|
||||
entry.value.sort(Structs.comps(Structs.comparingFloat(m -> m.has(MethodPriority.class) ? m.annotation(MethodPriority.class).value() : 0), Structs.comparing(s -> s.up().getSimpleName().toString())));
|
||||
|
||||
@@ -28,6 +28,10 @@ public class Stype extends Selement<TypeElement>{
|
||||
return interfaces().flatMap(s -> s.allInterfaces().add(s)).distinct();
|
||||
}
|
||||
|
||||
public boolean isInterface(){
|
||||
return e.getKind() == ElementKind.INTERFACE;
|
||||
}
|
||||
|
||||
public Seq<Stype> superclasses(){
|
||||
return Seq.with(BaseProcessor.typeu.directSupertypes(mirror())).map(Stype::of);
|
||||
}
|
||||
|
||||
11
build.gradle
@@ -26,8 +26,8 @@ buildscript{
|
||||
}
|
||||
|
||||
plugins{
|
||||
id "org.jetbrains.kotlin.jvm" version "1.6.0"
|
||||
id "org.jetbrains.kotlin.kapt" version "1.6.0"
|
||||
id "org.jetbrains.kotlin.jvm" version "2.1.10"
|
||||
id "org.jetbrains.kotlin.kapt" version "2.1.10"
|
||||
}
|
||||
|
||||
allprojects{
|
||||
@@ -37,8 +37,8 @@ allprojects{
|
||||
group = 'com.github.Anuken'
|
||||
|
||||
ext{
|
||||
versionNumber = '7'
|
||||
if(!project.hasProperty("versionModifier")) versionModifier = 'release'
|
||||
versionNumber = '8'
|
||||
if(!project.hasProperty("versionModifier")) versionModifier = 'beta'
|
||||
if(!project.hasProperty("versionType")) versionType = 'official'
|
||||
appName = 'Mindustry'
|
||||
steamworksVersion = '0b86023401880bb5e586bc404bedbaae9b1f1c94'
|
||||
@@ -309,7 +309,7 @@ project(":core"){
|
||||
task assetsJar(type: Jar, dependsOn: ":tools:pack"){
|
||||
archiveClassifier = 'assets'
|
||||
from files("assets"){
|
||||
exclude "config", "cache", "music", "sounds"
|
||||
exclude "config", "cache", "music", "sounds", "sprites/fallback"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -366,7 +366,6 @@ project(":core"){
|
||||
//these are completely unnecessary
|
||||
tasks.kaptGenerateStubsKotlin.onlyIf{ false }
|
||||
tasks.compileKotlin.onlyIf{ false }
|
||||
tasks.inspectClassesForKotlinIC.onlyIf{ false }
|
||||
}
|
||||
|
||||
//comp** classes are only used for code generation
|
||||
|
||||
|
After Width: | Height: | Size: 187 B |
|
After Width: | Height: | Size: 1.2 KiB |
BIN
core/assets-raw/sprites/blocks/campaign/advanced-launch-pad.png
Normal file
|
After Width: | Height: | Size: 2.7 KiB |
BIN
core/assets-raw/sprites/blocks/campaign/landing-pad.png
Normal file
|
After Width: | Height: | Size: 2.8 KiB |
BIN
core/assets-raw/sprites/blocks/environment/basalt-vent1.png
Normal file
|
After Width: | Height: | Size: 1.6 KiB |
BIN
core/assets-raw/sprites/blocks/environment/basalt-vent2.png
Normal file
|
After Width: | Height: | Size: 1.5 KiB |
BIN
core/assets-raw/sprites/blocks/environment/stone-vent1.png
Normal file
|
After Width: | Height: | Size: 1.5 KiB |
BIN
core/assets-raw/sprites/blocks/environment/stone-vent2.png
Normal file
|
After Width: | Height: | Size: 1.5 KiB |
BIN
core/assets-raw/sprites/effects/select-arrow-small.png
Normal file
|
After Width: | Height: | Size: 193 B |
|
Before Width: | Height: | Size: 525 B After Width: | Height: | Size: 398 B |
|
Before Width: | Height: | Size: 508 B After Width: | Height: | Size: 335 B |
|
Before Width: | Height: | Size: 483 B After Width: | Height: | Size: 378 B |
BIN
core/assets-raw/sprites/ui/sectors/sector-aegis.png
Normal file
|
After Width: | Height: | Size: 604 B |
BIN
core/assets-raw/sprites/ui/sectors/sector-atlas.png
Normal file
|
After Width: | Height: | Size: 509 B |
BIN
core/assets-raw/sprites/ui/sectors/sector-atolls.png
Normal file
|
After Width: | Height: | Size: 701 B |
BIN
core/assets-raw/sprites/ui/sectors/sector-basin.png
Normal file
|
After Width: | Height: | Size: 660 B |
BIN
core/assets-raw/sprites/ui/sectors/sector-biomassFacility.png
Normal file
|
After Width: | Height: | Size: 652 B |
BIN
core/assets-raw/sprites/ui/sectors/sector-caldera-erekir.png
Normal file
|
After Width: | Height: | Size: 660 B |
BIN
core/assets-raw/sprites/ui/sectors/sector-coastline.png
Normal file
|
After Width: | Height: | Size: 759 B |
BIN
core/assets-raw/sprites/ui/sectors/sector-craters.png
Normal file
|
After Width: | Height: | Size: 660 B |
BIN
core/assets-raw/sprites/ui/sectors/sector-crevice.png
Normal file
|
After Width: | Height: | Size: 637 B |
BIN
core/assets-raw/sprites/ui/sectors/sector-crossroads.png
Normal file
|
After Width: | Height: | Size: 535 B |
BIN
core/assets-raw/sprites/ui/sectors/sector-cruxscape.png
Normal file
|
After Width: | Height: | Size: 695 B |
BIN
core/assets-raw/sprites/ui/sectors/sector-desolateRift.png
Normal file
|
After Width: | Height: | Size: 529 B |
BIN
core/assets-raw/sprites/ui/sectors/sector-extractionOutpost.png
Normal file
|
After Width: | Height: | Size: 676 B |
BIN
core/assets-raw/sprites/ui/sectors/sector-facility32m.png
Normal file
|
After Width: | Height: | Size: 676 B |
BIN
core/assets-raw/sprites/ui/sectors/sector-frontier.png
Normal file
|
After Width: | Height: | Size: 616 B |
BIN
core/assets-raw/sprites/ui/sectors/sector-frozenForest.png
Normal file
|
After Width: | Height: | Size: 702 B |
BIN
core/assets-raw/sprites/ui/sectors/sector-fungalPass.png
Normal file
|
After Width: | Height: | Size: 497 B |
|
After Width: | Height: | Size: 774 B |
BIN
core/assets-raw/sprites/ui/sectors/sector-groundZero.png
Normal file
|
After Width: | Height: | Size: 640 B |
BIN
core/assets-raw/sprites/ui/sectors/sector-impact0078.png
Normal file
|
After Width: | Height: | Size: 626 B |
BIN
core/assets-raw/sprites/ui/sectors/sector-infestedCanyons.png
Normal file
|
After Width: | Height: | Size: 714 B |
BIN
core/assets-raw/sprites/ui/sectors/sector-intersect.png
Normal file
|
After Width: | Height: | Size: 618 B |
BIN
core/assets-raw/sprites/ui/sectors/sector-karst.png
Normal file
|
After Width: | Height: | Size: 654 B |
BIN
core/assets-raw/sprites/ui/sectors/sector-lake.png
Normal file
|
After Width: | Height: | Size: 469 B |
BIN
core/assets-raw/sprites/ui/sectors/sector-marsh.png
Normal file
|
After Width: | Height: | Size: 666 B |
BIN
core/assets-raw/sprites/ui/sectors/sector-mycelialBastion.png
Normal file
|
After Width: | Height: | Size: 629 B |
BIN
core/assets-raw/sprites/ui/sectors/sector-navalFortress.png
Normal file
|
After Width: | Height: | Size: 848 B |
BIN
core/assets-raw/sprites/ui/sectors/sector-nuclearComplex.png
Normal file
|
After Width: | Height: | Size: 661 B |
BIN
core/assets-raw/sprites/ui/sectors/sector-onset.png
Normal file
|
After Width: | Height: | Size: 631 B |
BIN
core/assets-raw/sprites/ui/sectors/sector-origin.png
Normal file
|
After Width: | Height: | Size: 887 B |
BIN
core/assets-raw/sprites/ui/sectors/sector-overgrowth.png
Normal file
|
After Width: | Height: | Size: 732 B |
BIN
core/assets-raw/sprites/ui/sectors/sector-peaks.png
Normal file
|
After Width: | Height: | Size: 608 B |
BIN
core/assets-raw/sprites/ui/sectors/sector-planetaryTerminal.png
Normal file
|
After Width: | Height: | Size: 831 B |
BIN
core/assets-raw/sprites/ui/sectors/sector-ravine.png
Normal file
|
After Width: | Height: | Size: 636 B |
BIN
core/assets-raw/sprites/ui/sectors/sector-ruinousShores.png
Normal file
|
After Width: | Height: | Size: 633 B |
BIN
core/assets-raw/sprites/ui/sectors/sector-saltFlats.png
Normal file
|
After Width: | Height: | Size: 597 B |
BIN
core/assets-raw/sprites/ui/sectors/sector-seaPort.png
Normal file
|
After Width: | Height: | Size: 808 B |
BIN
core/assets-raw/sprites/ui/sectors/sector-siege.png
Normal file
|
After Width: | Height: | Size: 722 B |
BIN
core/assets-raw/sprites/ui/sectors/sector-split.png
Normal file
|
After Width: | Height: | Size: 631 B |
BIN
core/assets-raw/sprites/ui/sectors/sector-stainedMountains.png
Normal file
|
After Width: | Height: | Size: 611 B |
BIN
core/assets-raw/sprites/ui/sectors/sector-stronghold.png
Normal file
|
After Width: | Height: | Size: 648 B |
BIN
core/assets-raw/sprites/ui/sectors/sector-taintedWoods.png
Normal file
|
After Width: | Height: | Size: 842 B |
BIN
core/assets-raw/sprites/ui/sectors/sector-tarFields.png
Normal file
|
After Width: | Height: | Size: 750 B |
BIN
core/assets-raw/sprites/ui/sectors/sector-testingGrounds.png
Normal file
|
After Width: | Height: | Size: 711 B |
BIN
core/assets-raw/sprites/ui/sectors/sector-weatheredChannels.png
Normal file
|
After Width: | Height: | Size: 675 B |
BIN
core/assets-raw/sprites/ui/sectors/sector-windsweptIslands.png
Normal file
|
After Width: | Height: | Size: 774 B |
|
After Width: | Height: | Size: 230 B |
BIN
core/assets-raw/sprites/units/weapons/scathe-missile-phase.png
Normal file
|
After Width: | Height: | Size: 1.2 KiB |
|
After Width: | Height: | Size: 236 B |
|
After Width: | Height: | Size: 236 B |
|
After Width: | Height: | Size: 789 B |
BIN
core/assets-raw/sprites/units/weapons/scathe-missile-surge.png
Normal file
|
After Width: | Height: | Size: 1.4 KiB |
@@ -1,2 +1,3 @@
|
||||
mschxœE<C593><EFBFBD>
|
||||
ƒ0„¯¦þÀ`{Ž>T¦Aµ–*Œ½ûÀõg°@øÂå.<2E>Æ =o‚n)Õãv쎣 ìÅA¯lºMü,ý“ÏSâã&ÓÊÞNìÌs¸/‘ÃjO1!Êq`ûK¢ñû,&<26>[ÀÿR Œ¤(O€®»6EÖ *?»Ê».¡šëº>hRSÉ–-êTQBTP5PýAÙù–Ø(¢
|
||||
mschxœE<C593>Á
|
||||
ƒ0DÇ$FA(úù¢Òê‹
|
||||
1Jb)ý÷R›J÷ò–™a–…B- -=žm©c n÷MX-y³‘c5Ñl¡v{Tí;ûÚ…û‰ÜÜ“5ƒŸÅeô´MóÎfóÚm}²7nØÄº‘ÑDs1a}øž\ñŸ"CäMžTË$œQ$¡H‘”<E28098>žŽÐñ!q¼<71>ãøDGüÊJ䲌"ã¼!ó
|
||||
2
core/assets/baseparts/a single large power node.msch
Normal file
@@ -0,0 +1,2 @@
|
||||
mschxœËA
|
||||
€ Fá_‹Ú´m7ðDÑÂraRÑ ë—¾õ÷ ¡ŒÑÞŒÍR
|
||||
2
core/assets/baseparts/a single surge tower.msch
Normal file
@@ -0,0 +1,2 @@
|
||||
mschxœ%ÊA
|
||||
€ @Á§Em;€èDÑÂê#‚i¨Ñõ£šõ Ñ
|
||||
BIN
core/assets/baseparts/antumbra.msch
Normal file
BIN
core/assets/baseparts/arkyid.msch
Normal file
BIN
core/assets/baseparts/atraxBaseOne.msch
Normal file
4
core/assets/baseparts/battery node.msch
Normal file
@@ -0,0 +1,4 @@
|
||||
mschxœ-‹Ñ
|
||||
@0F<>
|
||||
)”GðžH.Æþ¤fÓ¬äíQúÎÕé|hMîÍ.4³IIâÝû`…ÚʹÄíH[ð@éÌ,îD<C3AE>“¢ýËÁ™¸
|
||||
Ý.‰Ãwû
|
||||
BIN
core/assets/baseparts/daggersBunker.msch
Normal file
4
core/assets/baseparts/daggersBunkerFour.msch
Normal file
@@ -0,0 +1,4 @@
|
||||
mschxśMQË’Ó0śÄ/ŮΓĺqŕ’Ŕ7Žś(ލâHqĐÚZÇ‹"Ąd;a?…oŕ«ř¸pŰbMŹ”ĄHĘę‘Ô3ꞡm"ŠŤ<(zů^š¦3íî<C3AD>lvďdŰ*·{;š/€×T6ŞŻ]w:k<>(ŐňZéž–ź~}űţęŁrÇQŰĎ/(éĄ>YZ{ëşńPťĄÖ´jťMSÝČz°î޶˝ŐŇUGi”®µŠâĆZGëÎś”TSőŕ(E"ă
|
||||
éĘÝh{®Z9(µó)b4ÚJ\RĽ—ť¦ô <C3B4>Jëk×5Şţ×g$şJ}ś—AĹŃžq`l<>z·Ł©˝µôňrÖ×rŕ`sPő^š®–şj\;Ą}‚<>†®,ăü¤ŞŁł·Ę—.ű¦Ş<C2A6> ˛Ô†FW+tî
|
||||
>š‘˙E!J¤DsÂ_F–>śGWĚ™15¤‡ `ź#qÎ˙*
|
||||
@LCBQH=« ®C%`N~ňKś5ČZbň
|
||||
BIN
core/assets/baseparts/daggersBunkerThree.msch
Normal file
BIN
core/assets/baseparts/daggersBunkerTwo.msch
Normal file
BIN
core/assets/baseparts/diffGen.msch
Normal file
BIN
core/assets/baseparts/flareBaseOne.msch
Normal file
BIN
core/assets/baseparts/foundationBlast.msch
Normal file
BIN
core/assets/baseparts/foundationFortress.msch
Normal file
BIN
core/assets/baseparts/foundationHeavyDefense.msch
Normal file
BIN
core/assets/baseparts/foundationQuasar.msch
Normal file
BIN
core/assets/baseparts/foundationSpiroct.msch
Normal file
BIN
core/assets/baseparts/fourDaggersFour.msch
Normal file
3
core/assets/baseparts/fourDaggersOne.msch
Normal file
@@ -0,0 +1,3 @@
|
||||
mschxœM‘MnÛ0…Dz~h1qíÚˆv=AÑeº,º %FP “%9õQz†žª]tÛ1û†T‹–çq8óøqDW´[SjÔQÓ›<C393>Ê4<C38A>i÷ŸT³·ÿ ÚV»‘d£ÇÚuÃÔYCDy¯ºéí—?ßÜÖn˜{{ÿ^<5E>zPnúzKÅX«iÒŽn®kZ]ÕÖœôÙ:ÿLL<4C>’mëìlšêAÕ“ugºm¯\5(£û
|
||||
ªÕT‚Û™ò£6
|
||||
Û>)¬+ýmr¡‹ÊÁ>!al£I<Φ¤ùhSÈC¯Æ©j\×÷$ûxEœÐÐ<C390>=i‡üIWƒ³<C692>:˜ÉqÆ©ÕÄ–$»I«Ñήָz…—VáGëÂ{çýå7%X¦È d¬V$¸‚–2ÊrÛ×!Á&9:
|
||||