Open source Star Ruler 2 source code!

This commit is contained in:
Lucas de Vries
2018-07-17 14:15:37 +02:00
commit cc307720ff
4342 changed files with 2365070 additions and 0 deletions
@@ -0,0 +1,43 @@
#include "include/region_effect_spec.as"
class _Type : RegionEffectType {
_Type() {
ident = "GrantVision";
implementationClass = "GrantVision";
}
};
class GrantVision : RegionEffect {
double timer = 0.0;
GrantVision(Empire@ emp, double timer) {
@this.forEmpire = emp;
this.timer = timer;
@this.type = definition;
}
#section server
void save(SaveFile& file) override {
file << timer;
}
void load(SaveFile& file) override {
file >> timer;
}
bool tick(Region& region, double time) override {
timer -= time;
if(timer <= 0)
return false;
return true;
}
void start(Region& region) override {
region.grantVision(forEmpire);
}
void end(Region& region) override {
region.revokeVision(forEmpire);
}
#section all
};
@@ -0,0 +1,24 @@
#include "include/region_effect_spec.as"
class _Type : RegionEffectType {
_Type() {
ident = "ProtectedZone";
implementationClass = "ProtectedZone";
}
};
class ProtectedZone : RegionEffect {
bool tick(Region& region, double time) override {
region.ProtectedMask |= forEmpire.mask;
return true;
}
void changeEffectOwner(Region& region, Empire@ prevOwner, Empire@ newOwner) override {
region.ProtectedMask &= ~prevOwner.mask;
region.ProtectedMask |= newOwner.mask;
}
void end(Region& region) override {
region.ProtectedMask &= ~forEmpire.mask;
}
};
@@ -0,0 +1,82 @@
#include "include/region_effect_spec.as"
export ZealotRegion, ZealotRegionEffect, createZealotRegionEffect;
const RegionEffectType@ get_ZealotRegion() {
return definition;
}
ZealotRegionEffect@ createZealotRegionEffect(Empire@ empire, Empire@ other) {
ZealotRegionEffect eff;
@eff.type = definition;
@eff.forEmpire = empire;
@eff.other = other;
return eff;
}
class _Type : RegionEffectType {
_Type() {
ident = "ZealotRegion";
implementationClass = "ZealotRegionEffect";
}
};
const uint MAX_PER_TICK = 100;
const double STR_FACTOR = 0.5 / (6.0 * 60.0);
class ZealotRegionEffect : RegionEffect {
Empire@ other;
double accStr = 0.0;
double storedTime = 0.0;
#section server
void save(SaveFile& file) override {
file << other;
file << accStr;
file << storedTime;
}
void load(SaveFile& file) override {
file >> other;
file >> accStr;
file >> storedTime;
}
bool tick(Region& region, double time) override {
storedTime += time;
if(storedTime < 1.0)
return true;
double str = region.getStrength(other) * STR_FACTOR * storedTime;
accStr += str;
storedTime = 0.0;
if(accStr > 1.0) {
uint objCount = region.objectCount;
uint index = randomi(0, objCount-1);
uint cnt = min(objCount, MAX_PER_TICK);
for(uint i = 0; i < cnt; ++i) {
Ship@ obj = cast<Ship>(region.objects[i]);
if(obj !is null && obj.owner is other) {
//Check if we can take over this ship
if(!obj.hasLeaderAI || obj.supportCount == 0) {
double size = obj.blueprint.design.size;
double chance = accStr / size;
chance *= chance;
if(chance > 1.0 || randomd() < chance) {
@obj.owner = forEmpire;
accStr -= size;
if(accStr < 1.0)
break;
}
}
}
index = (index+1) % cnt;
}
}
return true;
}
#section all
};