EA 23.186 Nyaightly
August 22, 2025
24 files modified. 3 new files created.
Important Changes
Possible breaking changes. Click the filename to view the chunk.
TraitDrink (2)
public static void BlendLove(Chara c, Thing t, bool dream = false)
public static void BlendLove(Chara c, Thing t, Card source, bool dream = false)
public static void BlendPoison(Chara c, Thing t)
public static void BlendPoison(Chara c, Thing t, Card source)
Zone (1)
public void ClaimZone(bool debug = false)
public void ClaimZone(bool debug = false, Point pos = null)
CTAG
fairy,
god,
dragon,
plant
plant,
antiSpider
}
CardRenderer
public override void Draw(RenderParam p, ref Vector3 v, bool drawShadow)
}
else
{
if (EClass.core.config.game.antiSpider && row.race == "spider" && row._tiles.Length > 1)
if (EClass.core.config.game.antiSpider && row.skinAntiSpider != 0)
{
owner.refVal = 1;
owner.refVal = row.skinAntiSpider;
}
p.tile = row._tiles[owner.refVal % row._tiles.Length] * ((owner.dir % 2 == 0) ? 1 : (-1));
p.matColor = traitFigure.GetMatColor();
Chara
EClass.player.returnInfo.turns--;
if (EClass.player.returnInfo.turns <= 0)
{
if (EClass.pc.burden.GetPhase() != 4 || EClass.debug.ignoreWeight)
if (EClass.game.Prologue.type == GameType.Survival && EClass._zone is Zone_StartSiteSky)
{
int uidDest = EClass.player.returnInfo.uidDest;
Zone zone = null;
if (uidDest != 0)
{
zone = EClass.game.spatials.map.TryGetValue(uidDest) as Zone;
}
if (zone == null || zone.destryoed)
{
zone = EClass.world.region;
}
if (zone == EClass.game.activeZone || EClass.game.activeZone.IsRegion)
{
Msg.Say("returnFail");
}
else
Msg.SayNothingHappen();
}
else
{
if (EClass.pc.burden.GetPhase() != 4 || EClass.debug.ignoreWeight)
{
Msg.Say("returnComplete");
EClass.player.uidLastTravelZone = 0;
EClass.pc.MoveZone(zone, ZoneTransition.EnterState.Return);
EClass.player.lastZonePos = null;
int uidDest = EClass.player.returnInfo.uidDest;
Zone zone = null;
if (uidDest != 0)
{
zone = EClass.game.spatials.map.TryGetValue(uidDest) as Zone;
}
if (zone == null || zone.destryoed)
{
zone = EClass.world.region;
}
if (zone == EClass.game.activeZone || EClass.game.activeZone.IsRegion)
{
Msg.Say("returnFail");
}
else
{
Msg.Say("returnComplete");
EClass.player.uidLastTravelZone = 0;
EClass.pc.MoveZone(zone, ZoneTransition.EnterState.Return);
EClass.player.lastZonePos = null;
}
EClass.player.returnInfo = null;
return;
}
EClass.player.returnInfo = null;
return;
Msg.Say("returnOverweight");
}
EClass.player.returnInfo = null;
Msg.Say("returnOverweight");
}
}
if ((HasNoGoal || !ai.IsRunning) && !WillConsumeTurn())
public override CardRenderer _CreateRenderer()
{
CardRenderer cardRenderer = renderer;
CharaRenderer charaRenderer = new CharaRenderer();
if (race.id == "spider" && source.tiles.Length > 1)
if (source.skinAntiSpider != 0 && EClass.core.config.game.antiSpider)
{
base.idSkin = (EClass.core.config.game.antiSpider ? 1 : 0);
base.idSkin = source.skinAntiSpider;
}
if (host != null)
{
ContentCodex
{
b.icon.transform.localScale = new Vector3(1f / EClass.core.uiScale, 1f / EClass.core.uiScale, 1f);
}
int idSkin = ((EClass.core.config.game.antiSpider && a.source.race == "spider" && a.source.tiles.Length > 1) ? 1 : 0);
int idSkin = ((EClass.core.config.game.antiSpider && a.source.skinAntiSpider != 0) ? a.source.skinAntiSpider : 0);
a.SetImage(b.icon, idSkin);
},
onList = delegate
SourceChara.Row source = codexCreature.source;
uINote.Clear();
UIItem uIItem = uINote.AddHeader("HeaderCodex", codexCreature.Name.Replace("『", Environment.NewLine + "『"));
int idSkin = ((EClass.core.config.game.antiSpider && codexCreature.source.race == "spider" && codexCreature.source.tiles.Length > 1) ? 1 : 0);
int idSkin = ((EClass.core.config.game.antiSpider && codexCreature.source.skinAntiSpider != 0) ? codexCreature.source.skinAntiSpider : 0);
codexCreature.SetImage(uIItem.image1, idSkin);
uIItem.text2.text = "Lv." + source.LV + Environment.NewLine + EClass.sources.races.map[source.race].GetName().ToTitleCase(wholeText: true) + Environment.NewLine + EClass.sources.jobs.map[source.job].GetName().ToTitleCase(wholeText: true);
uIItem.image1.rectTransform.pivot = pivot;
ContentConfigTest
public class ContentConfigTest : ContentConfig
public UIButton toggleToolNoPick;
public UIButton toggleCompressSave;
public Slider sliderBrightness;
public override void OnInstantiate()
public override void OnInstantiate()
{
base.config.test.toolNoPick = on;
});
toggleCompressSave.SetToggle(base.config.test.compressSave, delegate(bool on)
{
base.config.test.compressSave = on;
});
toggleAlwaysRun.SetToggle(base.config.test.alwaysRun, delegate(bool on)
{
base.config.test.alwaysRun = on;
CoreConfig
public bool toolNoPick;
public bool compressSave;
public float brightnessNight;
}
public int maxPlayedHours;
public bool compressSave;
public bool ignoreParallelsWarning;
public bool ignoreLinuxModWarning;
CoreDebug
public enum StartScene
{
Title,
Survival,
Zone,
Home,
Home_Cave,
case StartScene.Home:
EClass.game.world.date.hour = EClass.debug.startHour;
break;
case StartScene.Survival:
EClass.game.idPrologue = 3;
break;
case StartScene.Home_Cave:
EClass.game.idPrologue = 2;
break;
break;
case StartLoadout.FewItem:
{
if (startScene == StartScene.Survival)
{
AddHotbar("pickaxe").ChangeMaterial(0);
break;
}
Thing thing = ThingGen.Create("backpack");
thing.AddCard(ThingGen.Create("rp_food", -1, 10).SetNum(30));
thing.AddCard(ThingGen.Create("rp_block", -1, 10).SetNum(30));
DramaManager
public bool CheckIF(string IF)
string[] array = IF.Split(',');
switch (array[0])
{
case "survival":
return EMono.game.Prologue.type == GameType.Survival;
case "fromBook":
return LayerDrama.fromBook;
case "!fromBook":
EffectMeteor
public static void Create(Point center, int radius, int count, Action<int, Point
int num = 0;
if (num < 1000)
{
Point randomSurface = EMono._map.GetRandomSurface(center.x, center.z, radius);
Point point = ((radius == 0) ? center : EMono._map.GetRandomSurface(center.x, center.z, radius));
foreach (Point item in list)
{
randomSurface.Equals(item);
point.Equals(item);
}
p.Set(randomSurface);
list.Add(randomSurface);
p.Set(point);
list.Add(point);
}
}
int _i = i;
Game
private void _OnDeserialized(StreamingContext context)
[JsonProperty]
public GamePrincipal principal = new GamePrincipal();
[JsonProperty]
public SurvivalManager survival;
public int gameSpeedIndex = 1;
public int lastGameSpeedIndex = 1;
EClass.pc.SetGlobal();
parties.Create(EClass.pc);
Prologue prologue = EClass.game.Prologue;
CharaGen.Create("fiama").SetGlobal(EClass.game.StartZone, prologue.posFiama.x, prologue.posFiama.y);
CharaGen.Create("ashland").SetGlobal(EClass.game.StartZone, prologue.posAsh.x, prologue.posAsh.y);
if (prologue.type == GameType.Survival)
{
survival = new SurvivalManager();
}
else
{
CharaGen.Create("fiama").SetGlobal(EClass.game.StartZone, prologue.posFiama.x, prologue.posFiama.y);
CharaGen.Create("ashland").SetGlobal(EClass.game.StartZone, prologue.posAsh.x, prologue.posAsh.y);
}
if ((bool)LayerTitle.actor)
{
world.date.hour = EClass.game.Prologue.hour;
z = EClass.game.Prologue.startZ
};
break;
case CoreDebug.StartScene.Survival:
EClass.game.idPrologue = 3;
zone5 = EClass.game.spatials.Find(EClass.game.Prologue.idStartZone);
transition = new ZoneTransition
{
state = ZoneTransition.EnterState.Exact,
x = EClass.game.Prologue.startX,
z = EClass.game.Prologue.startZ
};
break;
case CoreDebug.StartScene.Home_Cave:
EClass.game.idPrologue = 2;
zone5 = EClass.game.spatials.Find(EClass.game.Prologue.idStartZone);
GameIO
public static int NumBackup => (int)MathF.Max(5f, EClass.core.config.game.numBackup);
public static bool compressSave
{
get
{
if (EClass.core.config.compressSave)
{
return !EClass.debug.dontCompressSave;
}
return false;
}
}
public static bool compressSave => EClass.core.config.test.compressSave;
public static void ResetTemp()
{
+GameType
File Created
public enum GameType
{
Default,
Survival
}
Map
public void Save(string path, ZoneExportData export = null, PartialMap partial =
num6++;
}
}
compression = IO.Compression.None;
IO.WriteLZ4(path + "objVals", array);
IO.WriteLZ4(path + "blocks", array2);
IO.WriteLZ4(path + "blockMats", array3);
IO.WriteLZ4(path + "floors", array4);
IO.WriteLZ4(path + "floorMats", array5);
IO.WriteLZ4(path + "objs", array6);
IO.WriteLZ4(path + "objMats", array7);
IO.WriteLZ4(path + "decal", array8);
IO.WriteLZ4(path + "flags", array10);
IO.WriteLZ4(path + "flags2", array11);
IO.WriteLZ4(path + "dirs", array9);
IO.WriteLZ4(path + "heights", array12);
IO.WriteLZ4(path + "bridges", array13);
IO.WriteLZ4(path + "bridgeMats", array14);
IO.WriteLZ4(path + "bridgeHeights", array15);
IO.WriteLZ4(path + "bridgePillars", array16);
IO.WriteLZ4(path + "roofBlocks", array18);
IO.WriteLZ4(path + "roofBlockMats", array19);
IO.WriteLZ4(path + "roofBlockDirs", array17);
compression = ((!EClass.core.config.test.compressSave) ? IO.Compression.None : IO.Compression.LZ4);
Write(path + "objVals", array);
Write(path + "blocks", array2);
Write(path + "blockMats", array3);
Write(path + "floors", array4);
Write(path + "floorMats", array5);
Write(path + "objs", array6);
Write(path + "objMats", array7);
Write(path + "decal", array8);
Write(path + "flags", array10);
Write(path + "flags2", array11);
Write(path + "dirs", array9);
Write(path + "heights", array12);
Write(path + "bridges", array13);
Write(path + "bridgeMats", array14);
Write(path + "bridgeHeights", array15);
Write(path + "bridgePillars", array16);
Write(path + "roofBlocks", array18);
Write(path + "roofBlockMats", array19);
Write(path + "roofBlockDirs", array17);
things.Sort((Thing a, Thing b) => a.stackOrder - b.stackOrder);
if (export == null)
{
public void Save(string path, ZoneExportData export = null, PartialMap partial =
things = list;
}
serializedCharas.Clear();
void Write(string _path, byte[] bytes)
{
IO.WriteLZ4(_path, bytes, compression);
}
}
public byte[] TryLoadFile(string path, string s, int size)
public void MineObj(Point point, Task task = null, Chara c = null)
{
MineBlock(point, recoverBlock: false, c, mineObj: false);
}
if (EClass.game.Prologue.type == GameType.Survival && EClass._zone is Zone_StartSiteSky && !EClass.scene.actionMode.IsBuildMode)
{
if (TrySpawnSurvivalItem(point))
{
Rand.SetSeed();
return;
}
Rand.SetSeed();
}
switch (sourceObj.alias)
{
case "nest_bird":
public void MineObjSound(Point point)
point.PlaySound(point.cell.matObj.GetSoundDead(point.cell.sourceObj));
}
public bool TrySpawnSurvivalItem(Point point)
{
SourceObj.Row sourceObj = point.cell.sourceObj;
int searchWreck = EClass.game.survival.flags.searchWreck;
string[] array = new string[6] { "log", "rock", "branch", "bone", "grass", "vine" };
int chanceChange = 25;
int num = searchWreck / 50 + 3;
switch (sourceObj.alias)
{
case "nest_bird":
chanceChange = 100;
return Pop(ThingGen.Create((EClass.rnd(10) == 0) ? "egg_fertilized" : "_egg").TryMakeRandomItem(num));
case "wreck_wood":
array = new string[5] { "log", "log", "branch", "grass", "vine" };
break;
case "wreck_junk":
chanceChange = 50;
return Pop(ThingGen.CreateFromFilter("shop_junk", num));
case "wreck_stone":
array = new string[4] { "rock", "rock", "stone", "bone" };
break;
case "wreck_scrap":
chanceChange = 75;
array = new string[1] { "scrap" };
break;
case "wreck_cloth":
chanceChange = 75;
array = new string[1] { "fiber" };
break;
case "wreck_precious":
chanceChange = 100;
return Pop(ThingGen.CreateFromFilter("shop_magic", num));
default:
return false;
}
if (EClass.rnd(3) == 0 && EClass.game.survival.flags.spawnedFloor < 4)
{
EClass.game.survival.flags.spawnedFloor++;
return Pop(ThingGen.CreateFloor(40, 45).SetNum(3));
}
if (EClass.rnd(20) == 0)
{
return Pop(TraitSeed.MakeRandomSeed());
}
if (EClass.rnd(12) == 0)
{
return Pop(ThingGen.Create("money2"));
}
if (EClass.rnd(12) == 0)
{
Point pos = point.GetNearestPoint(allowBlock: false, allowChara: false, allowInstalled: false, ignoreCenter: true) ?? point;
if (searchWreck < 50 || EClass.rnd(3) != 0)
{
EClass._zone.SpawnMob(pos, SpawnSetting.HomeWild(num));
}
else
{
EClass._zone.SpawnMob(pos, SpawnSetting.HomeEnemy(Mathf.Max(num - 5, 1)));
}
}
return Pop(ThingGen.Create(array.RandomItem()).SetNum(1 + EClass.rnd(3)));
bool Next()
{
EClass.game.survival.flags.searchWreck++;
Point pos2 = point.GetNearestPoint(allowBlock: false, allowChara: false, allowInstalled: false, ignoreCenter: true) ?? point;
if (EClass.game.survival.flags.searchWreck == 20)
{
EffectMeteor.Create(pos2, 0, 1, delegate
{
EClass._zone.AddCard(ThingGen.CreateRecipe("container_shipping"), pos2);
});
}
NextObj();
return true;
}
void NextObj()
{
if (EClass.rnd(100) < chanceChange)
{
string[] source = new string[11]
{
"nest_bird", "wreck_wood", "wreck_wood", "wreck_wood", "wreck_wood", "wreck_stone", "wreck_stone", "wreck_scrap", "wreck_junk", "wreck_cloth",
"wreck_precious"
};
SetObj(point.x, point.z, EClass.sources.objs.alias[source.RandomItem()].id);
}
}
bool Pop(Thing t)
{
TrySmoothPick(point, t, EClass.pc);
Next();
return true;
}
}
public PlantData TryGetPlant(Point p)
{
return plants.TryGetValue(p.index);
Prologue
[Serializable]
public class Prologue
{
public GameType type;
public string idStartZone;
public int startX;
SourceChara
public int[] _tiles_snow;
public int skinAntiSpider;
[NonSerialized]
public SourceRace.Row _race_row;
public override void SetTiles()
{
base.SetTiles();
staticSkin = HasTag(CTAG.staticSkin);
if ((bool)renderData && (bool)renderData.pass && (_tiles_snow == null || _tiles_snow.Length != tiles_snow.Length))
if (!renderData || !renderData.pass)
{
return;
}
if (_tiles_snow == null || _tiles_snow.Length != tiles_snow.Length)
{
_tiles_snow = new int[tiles_snow.Length];
for (int i = 0; i < tiles_snow.Length; i++)
public override void SetTiles()
_tiles_snow[i] = tiles_snow[i] / 100 * (int)renderData.pass.pmesh.tiling.x + tiles_snow[i] % 100;
}
}
skinAntiSpider = ((staticSkin && HasTag(CTAG.antiSpider)) ? 1 : 0);
}
public override string GetName()
+SurvivalManager
File Created
using System.Runtime.Serialization;
using Newtonsoft.Json;
public class SurvivalManager : EClass
{
public class Flags : EClass
{
[JsonProperty]
public int[] ints = new int[50];
public BitArray32 bits;
public int spawnedFloor
{
get
{
return ints[3];
}
set
{
ints[3] = value;
}
}
public int floors
{
get
{
return ints[4];
}
set
{
ints[4] = value;
}
}
public int searchWreck
{
get
{
return ints[5];
}
set
{
ints[5] = value;
}
}
[OnSerializing]
private void _OnSerializing(StreamingContext context)
{
ints[0] = (int)bits.Bits;
}
[OnDeserialized]
private void _OnDeserialized(StreamingContext context)
{
bits.Bits = (uint)ints[0];
}
}
[JsonProperty]
public Flags flags = new Flags();
}
TaskBuild
public override void OnProgressComplete()
_ = (item.trait as TraitNewZone).IsDownstairs;
}
}
if (ActionMode.Build.IsActive && ActionMode.Build.IsRoofEditMode())
if (!ActionMode.Build.IsActive || !ActionMode.Build.IsRoofEditMode())
{
pos.ForeachMultiSize(recipe.W, recipe.H, delegate(Point p, bool center)
{
if (p.IsBlocked && p.HasChara)
{
foreach (Chara item2 in p.ListCharas())
{
EClass.pc.Kick(item2, ignoreSelf: true, karmaLoss: false, show: false);
}
}
});
}
if (EClass.game.Prologue.type != GameType.Survival || !(EClass._zone is Zone_StartSiteSky))
{
return;
}
pos.ForeachMultiSize(recipe.W, recipe.H, delegate(Point p, bool center)
int i = 0;
EClass._map.ForeachCell(delegate(Cell c)
{
if (p.IsBlocked && p.HasChara)
if (!c.sourceFloor.tileType.IsSkipFloor)
{
foreach (Chara item2 in p.ListCharas())
{
EClass.pc.Kick(item2, ignoreSelf: true, karmaLoss: false, show: false);
}
i++;
}
});
if (EClass.game.survival.flags.floors < 9 && i >= 9)
{
EffectMeteor.Create(pos, 0, 1, delegate
{
EClass._zone.ClaimZone(debug: false, pos);
});
EClass.game.survival.flags.floors = 9;
}
else if (EClass.game.survival.flags.floors < 15 && i >= 15)
{
EffectMeteor.Create(pos, 0, 1, delegate
{
EClass.pc.homeBranch.AddMemeber(EClass._zone.AddCard(CharaGen.Create("fiama"), pos.x, pos.z).Chara);
});
EClass.game.survival.flags.floors = 15;
}
else if (EClass.game.survival.flags.floors < 25 && i >= 25)
{
EffectMeteor.Create(pos, 0, 1, delegate
{
EClass.pc.homeBranch.AddMemeber(EClass._zone.AddCard(CharaGen.Create("nino"), pos.x, pos.z).Chara);
});
EClass.game.survival.flags.floors = 25;
}
else if (EClass.game.survival.flags.floors < 40 && i >= 40)
{
EffectMeteor.Create(pos, 0, 1, delegate
{
EClass.pc.homeBranch.AddMemeber(EClass._zone.AddCard(CharaGen.Create("loytel"), pos.x, pos.z).Chara);
});
EClass.game.survival.flags.floors = 40;
}
else if (EClass.game.survival.flags.floors < 50 && i >= 50)
{
EffectMeteor.Create(pos, 0, 1, delegate
{
EClass._zone.AddCard(ThingGen.Create("core_defense"), pos).Install();
});
EClass.game.survival.flags.floors = 50;
}
}
public override void OnDestroy()
TaskHarvest
public override bool IsHostileAct
}
}
public override bool Loop
{
get
{
if (EClass.game.Prologue.type == GameType.Survival && EClass._zone is Zone_StartSite)
{
return CanProgress();
}
return false;
}
}
public override bool CanManualCancel()
{
return true;
TraitDreamBug
public override bool CanBlend(Thing t)
public override void OnBlend(Thing t, Chara c)
{
TraitDrink.BlendLove(EClass.pc, t, dream: true);
TraitDrink.BlendLove(EClass.pc, t, owner, dream: true);
owner.ModNum(-1);
}
}
TraitDrink
public override void OnBlend(Thing t, Chara c)
switch (IdEffect)
{
case EffectId.Love:
BlendLove(c, t);
BlendLove(c, t, owner);
break;
case EffectId.Poison:
BlendPoison(c, t);
BlendPoison(c, t, owner);
break;
case EffectId.Acidproof:
c.Say("coated", t, c);
public override void OnBlend(Thing t, Chara c)
owner.ModNum(-1);
}
public static void BlendLove(Chara c, Thing t, bool dream = false)
public static void BlendLove(Chara c, Thing t, Card source, bool dream = false)
{
Msg.Say("blend_love", t);
Thing thing = t.Split(1);
thing.elements.ModBase(dream ? 704 : 703, t.IsBlessed ? 15 : (t.IsCursed ? 5 : 10));
thing.elements.ModBase(dream ? 704 : 703, source.IsBlessed ? 15 : (source.IsCursed ? 5 : 10));
c.Pick(thing);
}
public static void BlendPoison(Chara c, Thing t)
public static void BlendPoison(Chara c, Thing t, Card source)
{
Msg.Say("blend_poison", t);
Thing thing = t.Split(1);
thing.elements.ModBase(702, t.IsBlessed ? 5 : (t.IsCursed ? 15 : 10));
thing.elements.ModBase(702, source.IsBlessed ? 5 : (source.IsCursed ? 15 : 10));
c.Pick(thing);
}
TraitFakeBlock
public override void OnCreate(int lv)
public override void OnCrafted(Recipe recipe, List<Thing> ings)
{
if (ings == null || ings.Count == 0)
{
owner.refVal = 1;
return;
}
TraitBlock traitBlock = ings[0].trait as TraitBlock;
owner.refVal = traitBlock.source.id;
}
TraitFigure
public override void OnSetCardGrid(ButtonGrid b)
{
SourceChara.Row row = EClass.sources.charas.map.TryGetValue(owner.c_idRefCard) ?? EClass.sources.charas.map["putty"];
Transform transform = b.Attach<Transform>("figure", rightAttach: false);
int idSkin = ((EClass.core.config.game.antiSpider && row.race == "spider" && row.tiles.Length > 1) ? 1 : 0);
int idSkin = ((EClass.core.config.game.antiSpider && row.skinAntiSpider != 0) ? row.skinAntiSpider : 0);
row.SetImage(transform.GetChild(0).GetComponent<Image>(), null, 0, setNativeSize: false, 0, idSkin);
}
}
TraitMapBoard
public override void TrySetAct(ActPlan p)
uIContextMenu3.Show();
return false;
}, owner);
p.TrySetAct("actChangeSkyBlockHeight", delegate
if (EClass._zone.IsSkyLevel)
{
UIContextMenu uIContextMenu2 = EClass.ui.CreateContextMenuInteraction();
uIContextMenu2.AddSlider("adjustment", (float a) => a.ToString() ?? "", EClass._map.config.skyBlockHeight, delegate(float b)
p.TrySetAct("actChangeSkyBlockHeight", delegate
{
EClass._map.config.skyBlockHeight = (int)b;
}, 1f, 20f, isInt: true, hideOther: false);
uIContextMenu2.Show();
return false;
}, owner);
UIContextMenu uIContextMenu2 = EClass.ui.CreateContextMenuInteraction();
uIContextMenu2.AddSlider("adjustment", (float a) => a.ToString() ?? "", EClass._map.config.skyBlockHeight, delegate(float b)
{
EClass._map.config.skyBlockHeight = (int)b;
}, 1f, 20f, isInt: true, hideOther: false);
uIContextMenu2.Show();
return false;
}, owner);
}
p.TrySetAct("actChangeMapBG", delegate
{
LayerList layerList2 = EClass.ui.AddLayer<LayerList>().SetSize(400f);
TraitWaystone
public override void TrySetAct(ActPlan p)
}
else
{
if (!EClass._zone.parent.IsRegion || (EClass._zone.IsInstance && !EClass._zone.IsUserZone) || EClass._zone is Zone_Dungeon)
if (!EClass._zone.parent.IsRegion || (EClass._zone.IsInstance && !EClass._zone.IsUserZone) || EClass._zone is Zone_Dungeon || EClass._zone is Zone_StartSiteSky)
{
return;
}
Zone
Debug.Log("Unloaded Map:" + this);
}
public void ClaimZone(bool debug = false)
public void ClaimZone(bool debug = false, Point pos = null)
{
EClass._map.RevealAll();
SetMainFaction(EClass.pc.faction);
public void ClaimZone(bool debug = false)
EClass.Branch.Log("claimedZone");
EClass.Sound.Play("jingle_embark");
EClass.pc.PlaySound("build");
Effect.Get("aura_heaven").Play(EClass.pc.pos);
Point nearestPoint = EClass.pc.pos.GetNearestPoint(allowBlock: false, allowChara: true, allowInstalled: false);
EClass._zone.AddCard(ThingGen.Create("core_zone"), nearestPoint).SetPlaceState(PlaceState.installed);
if (pos == null)
{
pos = EClass.pc.pos.GetNearestPoint(allowBlock: false, allowChara: true, allowInstalled: false);
}
Effect.Get("aura_heaven").Play(pos);
EClass._zone.AddCard(ThingGen.Create("core_zone"), pos).SetPlaceState(PlaceState.installed);
}
base.idPrefix = 0;
if (EClass._zone == EClass.game.StartZone)
+Zone_StartSiteSky
File Created
public class Zone_StartSiteSky : Zone_StartSite
{
public override bool UseFog => false;
public override bool IsSkyLevel => true;
public override string IDBaseLandFeat => "bfPlain,bfFertile,bfStart";
public override bool BlockBorderExit => true;
}
Zone_VernisMine
using UnityEngine;
public class Zone_VernisMine : Zone_QuestDungeon
{
public const int LvBoss = -8;
public bool IsBossLv => base.lv == -8;
public override int DangerLv => base.DangerLv + 5;
public override int DangerLv => 5 + Mathf.Abs(base.lv);
public override bool LockExit
{