Elin Decompiled Documentation EA 23.356.1 Nightly
Loading...
Searching...
No Matches
BaseTileMap.cs
Go to the documentation of this file.
1using System;
2using NoiseSystem;
3using UnityEngine;
4
5public class BaseTileMap : EMono
6{
7 public enum WallClipMode
8 {
9 ByRoom,
10 ByLot
11 }
12
13 public enum InnerMode
14 {
15 None,
17 Height,
19 }
20
21 public enum CardIconMode
22 {
23 None,
24 Inspect,
26 State,
28 }
29
30 public enum ScreenHighlight
31 {
32 None,
33 SunMap
34 }
35
36 public static bool forceShowHang;
37
38 public int count;
39
40 [Header("Mouse Hit")]
41 public Collider2D mouseCollider;
42
43 public Vector3 colliderFix;
44
45 public int maxColliderCheck;
46
47 [Header("Height")]
48 public float heightBlockSize;
49
50 public float slopeFixZ;
51
52 public float heightModDeco;
53
54 public float heightLimitDeco;
55
56 public Vector3 heightMod;
57
58 public Vector3 ugFix;
59
60 public Vector3 ugFixBridge;
61
62 public Vector3 ugFixBridgeBottom;
63
64 public Vector3 ugFixBridgeTop;
65
66 public Vector3 heightModRoofBlock;
67
68 [Header("Room")]
69 public float rightWallShade;
70
71 public Vector3 roofRampFix;
72
73 public Vector3 roofFix;
74
75 public Vector3 roofFix2;
76
77 public Vector3 roofFix3;
78
79 public float roofLightMod;
80
81 public float lotLight;
82
83 public float lotLight2;
84
85 public float roofLightSnow;
86
87 [Header("Other")]
89
91
92 public Vector3 edgeBlockFix;
93
94 public Vector3 bridgeFix;
95
96 public Vector3 cornerWallFix;
97
98 public Vector3 cornerWallFix2;
99
100 public Vector3 cornerWallFix3;
101
102 public Vector3 altitudeFix;
103
104 public Vector3 waterEdgeFix;
105
106 public Vector3 waterEdgeBridgeFix;
107
108 public Vector3 waterEdgeFixShore;
109
110 public Vector3 waterEdgeFixShoreSand;
111
112 public Vector3[] ambientShadowFix;
113
114 public Vector3[] transitionFix;
115
116 public Vector3[] wallHangFix;
117
118 public Vector3[] waterEdgeBlockFix;
119
120 public int fogTile;
121
122 public float floatSpeed;
123
124 public float shadowModStrength;
125
126 public int maxFloat;
127
128 public int[] seaAnimeIndexes;
129
130 [Header("References")]
131 public NoiseLayer layerGroundLights;
132
134
136
138
140
142
144
146
148
150
152
154
156
158
160
162
164
166
168
170
172
174
176
178
180
182
184
186
188
190
192
194
196
198
200
202
204
206
208
210
212
214
216
218
220
222
224
226
228
230
231 public Point TestPoint = new Point();
232
234
235 [NonSerialized]
236 public int Size;
237
238 [NonSerialized]
239 public int SizeXZ;
240
241 [NonSerialized]
242 public int mx;
243
244 [NonSerialized]
245 public int mz;
246
247 [NonSerialized]
248 public int x;
249
250 [NonSerialized]
251 public int z;
252
253 [NonSerialized]
254 public int cx;
255
256 [NonSerialized]
257 public int cz;
258
259 [NonSerialized]
260 public int activeCount;
261
262 [NonSerialized]
263 public int floatV = 1;
264
265 [NonSerialized]
266 public byte[] groundLights;
267
268 [NonSerialized]
269 public bool lowBlock;
270
271 [NonSerialized]
272 public bool lowObj;
273
274 [NonSerialized]
275 public bool highlightArea;
276
277 [NonSerialized]
279
280 [NonSerialized]
281 public bool hideRoomFog;
282
283 [NonSerialized]
284 public bool showRoof;
285
286 [NonSerialized]
287 public bool showFullWall;
288
289 [NonSerialized]
290 public bool hideHang;
291
292 [NonSerialized]
293 public bool usingHouseBoard;
294
295 [NonSerialized]
296 public bool noRoofMode;
297
298 [NonSerialized]
299 public bool fogged;
300
301 [NonSerialized]
302 public int[] floatVs = new int[10] { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 };
303
304 [NonSerialized]
305 public float[] lightLookUp;
306
307 [NonSerialized]
308 public float[] floatYs = new float[10] { 0f, 1f, 2f, 3f, 4f, 5f, 6f, 7f, 8f, 9f };
309
310 [NonSerialized]
311 public float _lightMod;
312
313 [NonSerialized]
314 public float _baseBrightness;
315
316 [NonSerialized]
317 public float lowblockTimer;
318
319 [NonSerialized]
320 public float heightLightMod;
321
322 [NonSerialized]
323 public float _rightWallShade;
324
325 [NonSerialized]
326 public float roofLightLimitMod;
327
328 [NonSerialized]
329 public float floatY;
330
331 [NonSerialized]
333
334 [NonSerialized]
335 public Vector3 _heightMod;
336
337 [NonSerialized]
339
340 protected RaycastHit2D[] rays = new RaycastHit2D[1];
341
343
344 protected bool isMining;
345
346 protected bool buildMode;
347
348 protected bool hasBridge;
349
350 protected bool _lowblock;
351
352 protected bool isIndoor;
353
355
356 protected Map map;
357
358 protected MeshPass pass;
359
361
363
365
366 protected int liquidLv;
367
368 protected int index;
369
370 protected int totalFire;
371
372 protected int snowColorToken;
373
374 protected int waterAnimeIndex;
375
376 protected int lowWallObjAltitude;
377
379
381
383
385
386 protected float blockLight;
387
388 protected float floorLight;
389
390 protected float floorLight2;
391
392 protected float light;
393
394 protected float pcMaxLight;
395
396 protected float orgX;
397
398 protected float orgY;
399
400 protected float orgZ;
401
402 protected float roomHeight;
403
404 protected float maxHeight;
405
406 protected float snowLight;
407
408 protected float waterAnimeTimer;
409
410 protected float floatTimer;
411
412 protected float destBrightness;
413
414 protected float lightLimit;
415
416 protected float modSublight1;
417
418 protected float modSublight2;
419
420 protected float shadowStrength;
421
422 protected float _shadowStrength;
423
424 protected float fogBrightness;
425
426 protected float defaultBlockHeight;
427
428 protected float snowLimit;
429
430 protected float snowColor;
431
432 protected float snowColor2;
433
434 protected float nightRatio;
435
436 protected RenderParam param = new RenderParam();
437
438 protected MeshBatch batch;
439
440 protected Vector3 _actorPos;
441
442 protected Vector3 freePos;
443
444 protected int tile;
445
446 protected int floorMatColor;
447
448 protected int height;
449
450 protected int currentHeight;
451
452 protected int pcX;
453
454 protected int pcZ;
455
456 protected int floorDir;
457
458 protected bool roof;
459
460 protected bool isSeen;
461
462 protected bool showAllCards;
463
464 protected bool fogBounds;
465
466 protected bool snowed;
467
468 protected bool isSnowCovered;
469
470 protected bool highlightCells;
471
472 protected bool cinemaMode;
473
474 protected bool alwaysLowblock;
475
476 protected bool showBorder;
477
478 protected bool isUnderwater;
479
480 protected bool darkenOuter;
481
482 protected Vector3 thingPos;
483
484 protected Vector3 orgPos;
485
486 protected Cell cell;
487
489
491
493
495
497
498 protected Room currentRoom;
499
500 protected Room lastRoom;
501
502 protected Room room;
503
504 protected Lot currentLot;
505
507
509
511
512 private bool noSlopMode;
513
515
516 public const int DefColor = 104025;
517
518 public const int BlocklightToken = 262144;
519
520 public const int BlocklightMTP = 50;
521
523
524 public void OnActivate(BaseGameScreen _screen)
525 {
526 screen = _screen;
527 if (lightLookUp == null)
528 {
529 lightLookUp = new float[256];
530 for (int i = 0; i < 256; i++)
531 {
532 lightLookUp[i] = EMono.scene.profile.global.lightLookupCurve.Evaluate((float)i / 255f);
533 }
534 }
537 zSetting = renderSetting.zSetting;
538 RenderObject.syncList = EMono.scene.syncList;
539 RenderObject.altitudeFix = altitudeFix.y;
540 if (Rand.bytes == null)
541 {
542 Rand.InitBytes(1);
543 }
545 }
546
547 public virtual void Draw()
548 {
549 Zone zone = EMono._zone;
550 map = zone.map;
551 Size = map.Size;
552 SizeXZ = map.SizeXZ;
554 count = 0;
555 totalFire = 0;
556 pcX = EMono.pc.pos.x;
557 pcZ = EMono.pc.pos.z;
560 lightSetting = profile.light;
563 {
564 buildMode = false;
565 }
567 isMining = EMono.scene.actionMode == ActionMode.Mine;
572 subtleHighlightArea = EMono.scene.actionMode.AreaHihlight != AreaHighlightMode.None && (EMono.scene.actionMode.AreaHihlight == AreaHighlightMode.Build || EMono.scene.actionMode.AreaHihlight != AreaHighlightMode.Edit);
573 highlightArea = EMono.scene.actionMode.AreaHihlight == AreaHighlightMode.Edit || subtleHighlightArea;
575 _rightWallShade = (int)(50f * rightWallShade) * 262144;
578 showBorder = (EMono.core.config.game.showBorder == 1 && EMono._zone is Zone_Field && !EMono._zone.IsPlayerFaction) || (EMono.core.config.game.showBorder == 2 && !EMono._zone.map.IsIndoor && !EMono._zone.IsSkyLevel && !EMono._zone.IsRegion);
579 snowLimit = profile.global.snowLimit.Evaluate(EMono.scene.timeRatio);
580 snowLight = profile.global.snowLight;
581 snowColor = profile.global.snowColor;
582 snowColor2 = profile.global.snowColor2;
583 snowColorToken = (int)((float)profile.global.snowRGB.x * nightRatio) * 4096 + (int)((float)profile.global.snowRGB.y * nightRatio) * 64 + (int)((float)profile.global.snowRGB.z * nightRatio);
586 {
588 }
589 roofLightLimitMod = profile.global.roofLightLimitMod.Evaluate(EMono.scene.timeRatio);
590 fogBounds = (EMono._map.config.forceHideOutbounds && (!EMono.debug.godBuild || !buildMode)) || (EMono.core.config.game.dontRenderOutsideMap && !buildMode);
591 heightLightMod = ((EMono._map.config.heightLightMod == 0f) ? 0.005f : EMono._map.config.heightLightMod);
592 modSublight1 = profile.global.modSublight1;
593 modSublight2 = profile.global.modSublight2 * nightRatio;
594 pcMaxLight = EMono.player.lightPower * 2f * (float)(EMono.player.lightRadius - 2);
597 _lightMod = lightSetting.lightMod * lightSetting.lightModCurve.Evaluate(EMono.scene.timeRatio);
598 destBrightness = lightSetting.baseBrightness * lightSetting.baseBrightnessCurve.Evaluate(EMono.scene.timeRatio);
599 float num = destBrightness;
600 destBrightness = destBrightness * lightSetting.dynamicBrightnessCurve2.Evaluate(EMono.scene.timeRatio) + lightSetting.dynamicBrightnessCurve.Evaluate(EMono.scene.timeRatio) * (float)(int)EMono.pc.pos.cell.light + ((EMono.pc.pos.cell.light == 0) ? 0f : lightSetting.dynamicBrightnessLightBonus);
601 if (destBrightness > num)
602 {
603 destBrightness = num;
604 }
605 if (!Mathf.Approximately(_baseBrightness, destBrightness))
606 {
608 }
609 if (activeCount == 0)
610 {
612 }
613 activeCount++;
615 {
616 _baseBrightness = 0.7f;
617 }
618 Fov.nonGradientMod = profile.global.fovModNonGradient;
621 float num2 = Core.delta * (float)EMono.game.config.animeSpeed * 0.01f;
622 floatTimer += num2;
624 {
626 for (int i = 0; i < floatYs.Length; i++)
627 {
628 floatYs[i] += floatVs[i];
629 if (floatYs[i] >= (float)maxFloat)
630 {
631 floatVs[i] = -1;
632 }
633 if (floatYs[i] < 0f)
634 {
635 floatVs[i] = 1;
636 }
637 }
638 }
639 floatY = floatYs[0];
640 floatV = floatVs[0];
641 waterAnimeTimer += num2;
642 if (waterAnimeTimer > 0.5f)
643 {
644 waterAnimeTimer = 0f;
646 }
647 if (cinemaMode)
648 {
649 CinemaConfig cinemaConfig = EMono.player.cinemaConfig;
650 profile = ActionMode.Cinema.profile;
651 lightSetting = profile.light;
653 _lightMod += lightSetting.lightMod * lightSetting.lightModCurve.Evaluate(EMono.scene.timeRatio) * (0.01f * (float)cinemaConfig.light);
654 destBrightness += 0.01f * (float)cinemaConfig.brightness;
655 EMono.scene.camSupport.grading.cinemaBrightness = 0.01f * (float)cinemaConfig.brightness;
656 EMono.scene.camSupport.grading.SetGrading();
657 heightLightMod = 0f;
658 }
659 map.rooms.Refresh();
664 {
667 }
668 else
669 {
670 currentHeight = 0;
671 currentRoom = null;
672 }
673 lowObj = false;
675 noRoofMode = false;
676 bool flag = !isIndoor || EMono._zone is Zone_Tent;
678 {
679 flag = !flag;
680 }
682 {
683 lowBlock = (hideRoomFog = (hideHang = false));
684 showRoof = (showFullWall = flag);
686 {
687 fogBounds = false;
688 }
689 }
690 else if (buildMode)
691 {
693 if (HitPoint.IsValid)
694 {
696 }
697 hideRoomFog = true;
702 if (cinemaMode)
703 {
705 }
706 }
707 else if (ActionMode.IsAdv)
708 {
709 noRoofMode = EMono.game.config.noRoof || screen.focusOption != null;
711 {
712 if (!EMono.pc.IsMoving)
713 {
714 lowblockTimer = 0.1f;
715 }
716 }
717 else if (!EInput.rightMouse.pressing)
718 {
719 lowblockTimer = 0f;
720 }
721 x = EMono.pc.pos.x;
722 z = EMono.pc.pos.z;
723 Room room = null;
724 if (room != null)
725 {
727 }
728 if (currentRoom != null)
729 {
730 currentRoom.data.visited = true;
731 }
732 if (room != null)
733 {
734 room.data.visited = true;
735 }
736 lowBlock = lowblockTimer > 0f;
737 hideRoomFog = currentRoom != null && (currentRoom.HasRoof || isIndoor);
738 if (hideRoomFog)
739 {
740 lowBlock = true;
741 }
742 if (noRoofMode && (currentRoom == null || currentRoom.lot.idRoofStyle == 0))
743 {
744 hideRoomFog = true;
745 showRoof = (showFullWall = false);
746 }
747 else
748 {
749 showRoof = (showFullWall = flag && !lowBlock && !hideRoomFog);
750 }
752 EMono.game.config.showRoof = !hideRoomFog;
753 if (forceShowHang)
754 {
755 hideHang = false;
756 forceShowHang = false;
757 }
758 }
759 else
760 {
761 lowBlock = (hideRoomFog = (hideHang = false));
762 showRoof = (showFullWall = true);
763 }
764 darkenOuter = !cinemaMode && !ActionMode.Bird.IsActive && !ActionMode.ViewMap.IsActive;
765 currentLot = currentRoom?.lot ?? null;
766 Vector3 mposWorld = EInput.mposWorld;
767 mposWorld.z = 0f;
768 Vector3Int vector3Int = screen.grid.WorldToCell(mposWorld);
769 mx = -vector3Int.y;
770 mz = vector3Int.x - 1;
771 HitPoint.Set(mx, mz);
772 bool isAltDown = EInput.isAltDown;
773 for (int num3 = maxColliderCheck + EMono.core.config.test.screenExtraHeight; num3 >= 0; num3--)
774 {
775 TestPoint.x = mx + num3;
776 TestPoint.z = mz - num3;
777 if (TestPoint.x >= 0 && TestPoint.x < Size && TestPoint.z >= 0 && TestPoint.z < Size)
778 {
779 mouseCollider.transform.position = (isAltDown ? TestPoint.Position(TestPoint.cell.height) : TestPoint.Position()) + colliderFix;
780 Physics2D.SyncTransforms();
781 if (Physics2D.RaycastNonAlloc(mposWorld, Vector2.zero, rays) > 0)
782 {
784 break;
785 }
786 }
787 TestPoint.x = mx + num3 - 1;
788 TestPoint.z = mz - num3;
789 if (TestPoint.x >= 0 && TestPoint.x < Size && TestPoint.z >= 0 && TestPoint.z < Size)
790 {
791 mouseCollider.transform.position = (isAltDown ? TestPoint.Position(TestPoint.cell.height) : TestPoint.Position()) + colliderFix;
792 Physics2D.SyncTransforms();
793 if (Physics2D.RaycastNonAlloc(mposWorld, Vector2.zero, rays) > 0)
794 {
796 break;
797 }
798 }
799 TestPoint.x = mx + num3;
800 TestPoint.z = mz - num3 + 1;
801 if (TestPoint.x >= 0 && TestPoint.x < Size && TestPoint.z >= 0 && TestPoint.z < Size)
802 {
803 mouseCollider.transform.position = (isAltDown ? TestPoint.Position(TestPoint.cell.height) : TestPoint.Position()) + colliderFix;
804 Physics2D.SyncTransforms();
805 if (Physics2D.RaycastNonAlloc(mposWorld, Vector2.zero, rays) > 0)
806 {
808 break;
809 }
810 }
811 }
812 HitPoint.Clamp();
813 bool flag2 = EMono._zone.UseFog && !EMono.scene.bg.wall;
814 for (z = 0; z < screen.height; z++)
815 {
816 for (x = 0; x < screen.width; x++)
817 {
818 cx = screen.scrollX - screen.scrollY + x - (z + 1) / 2;
819 cz = screen.scrollY + screen.scrollX + x + z / 2;
820 if (((cz < 0 && cx >= -cz && cx > 0 && cx < Size - cz) || (cx >= Size && cx < Size * 2 - cz - 1 && cz >= -cx && cz < Size - 1)) && EMono.scene.bg.wall)
821 {
822 param.x = (float)(cx + cz) * screen.tileAlign.x + edgeBlockFix.x;
823 param.y = (float)(cz - cx) * screen.tileAlign.y + edgeBlockFix.y;
824 param.z = 1000f + param.x * screen.tileWeight.x + param.y * screen.tileWeight.z + (float)z * edgeBlockFix.z;
825 blockLight = 10485760f;
826 pass = passInner;
828 batch.matrices[pass.idx].m03 = param.x;
829 batch.matrices[pass.idx].m13 = param.y;
830 batch.matrices[pass.idx].m23 = param.z;
831 batch.tiles[pass.idx] = 4 + ((cx >= Size) ? 1 : 0);
833 batch.matColors[pass.idx] = 104025f;
834 pass.idx++;
835 if (pass.idx == pass.batchSize)
836 {
837 pass.NextBatch();
838 }
839 }
840 else if (cx < 0 || cz < 0 || cx >= Size || cz >= Size)
841 {
842 if (flag2)
843 {
844 param.x = (float)(cx + cz) * screen.tileAlign.x;
845 param.y = (float)(cz - cx) * screen.tileAlign.y + (float)height * _heightMod.y;
846 param.z = 1000f + param.x * screen.tileWeight.x + param.y * screen.tileWeight.z + (float)height * _heightMod.z;
847 param.tile = 0f;
849 }
850 }
851 else
852 {
853 DrawTile();
854 }
855 }
856 }
857 if (showRoof)
858 {
859 foreach (Lot item in map.rooms.listLot)
860 {
861 if (item.sync)
862 {
863 DrawRoof(item);
864 item.sync = false;
865 item.light = 0f;
866 }
867 }
868 }
869 else
870 {
871 foreach (Lot item2 in map.rooms.listLot)
872 {
873 item2.sync = false;
874 item2.light = 0f;
875 }
876 }
877 EMono.scene.sfxFire.SetVolume(Mathf.Clamp(0.1f * (float)totalFire + ((totalFire != 0) ? 0.2f : 0f), 0f, 1f));
878 this.room = EMono.pc.pos.cell.room;
879 int valueOrDefault = (this.room?.lot?.idBGM).GetValueOrDefault();
880 if (valueOrDefault == 0)
881 {
882 goto IL_172c;
883 }
884 if (!(EMono.Sound.currentPlaylist != EMono.Sound.plLot))
885 {
886 BGMData data = EMono.Sound.plLot.list[0].data;
887 if ((object)data != null && data.id == valueOrDefault)
888 {
889 goto IL_172c;
890 }
891 }
892 goto IL_174b;
893 IL_1755:
894 if (this.room != lastRoom)
895 {
897 lastRoom = this.room;
898 }
899 SoundManager.bgmVolumeMod = ((!LayerDrama.maxBGMVolume && !EMono._map.IsIndoor && this.room != null && !this.room.data.atrium && this.room.HasRoof) ? (-0.6f) : 0f);
901 return;
902 IL_172c:
903 if (valueOrDefault == 0 && EMono.Sound.currentPlaylist == EMono.Sound.plLot)
904 {
905 goto IL_174b;
906 }
907 goto IL_1755;
908 IL_174b:
910 goto IL_1755;
911 }
912
913 public void RefreshHeight()
914 {
915 if (EMono.game != null)
916 {
917 float num = (noSlopMode ? 0f : ((float)EMono.game.config.slopeMod * 0.01f));
919 _heightMod.x = num;
920 _heightMod.y *= num;
921 _heightMod.z *= num;
922 }
923 }
924
925 public virtual void DrawTile()
926 {
927 count++;
928 index = cx + cz * Size;
929 this.cell = (param.cell = map.cells[cx, cz]);
930 detail = this.cell.detail;
931 isSeen = this.cell.isSeen;
932 this.room = this.cell.room;
933 roof = this.cell.HasRoof;
934 matBlock = this.cell.matBlock;
935 matDeco = this.cell.matDeco;
936 sourceBlock = this.cell.sourceBlock;
937 sourceDeco = this.cell.sourceDeco;
938 bool flag = this.cell.isFloating;
939 snowed = isSnowCovered && !roof && !this.cell.isClearSnow && !this.cell.isDeck && !flag;
941 floorDir = this.cell.floorDir;
942 if (snowed && !this.cell.sourceFloor.ignoreSnow)
943 {
944 if (this.cell.IsFloorWater)
945 {
947 matFloor = this.cell.matFloor;
948 }
949 else
950 {
951 if (this.cell.sourceObj.snowTile > 0)
952 {
954 floorDir = this.cell.sourceObj.snowTile - 1;
955 }
956 else if (index % 3 == 0 && Rand.bytes[index % Rand.MaxBytes] < 8 && !this.cell.HasObj && this.cell.FirstThing == null)
957 {
960 }
961 else
962 {
964 }
966 }
967 }
968 else
969 {
970 sourceFloor = this.cell.sourceFloor;
971 matFloor = this.cell.matFloor;
972 }
973 bool isWater = sourceFloor.tileType.IsWater;
974 light = (this.cell.pcSync ? this.cell.light : (this.cell.light / 3 * 2));
976 height = this.cell.height;
977 hasBridge = this.cell._bridge != 0;
979 if (hasBridge)
980 {
981 if (this.cell.bridgeHeight < currentHeight)
982 {
983 blockLight -= heightLightMod * (float)(currentHeight - this.cell.bridgeHeight);
984 }
985 if (snowed && !this.cell.sourceBridge.ignoreSnow)
986 {
987 if (this.cell.IsBridgeWater)
988 {
990 matBridge = this.cell.matBridge;
991 }
992 else
993 {
996 }
997 }
998 else
999 {
1000 sourceBridge = this.cell.sourceBridge;
1001 matBridge = this.cell.matBridge;
1002 }
1003 }
1004 else if (height < currentHeight)
1005 {
1007 }
1008 if (blockLight < 0f)
1009 {
1010 blockLight = 0f;
1011 }
1012 liquidLv = (param.liquidLv = ((!flag && !isUnderwater) ? (((this.cell.liquidLv + this.cell._bridge != 0) ? this.cell.sourceBridge.tileType.LiquidLV : sourceFloor.tileType.LiquidLV) * 10) : 0));
1013 if (this.cell.shore != 0 && liquidLv > 20)
1014 {
1015 liquidLv = (param.liquidLv = 20);
1016 }
1017 if (liquidLv > 99)
1018 {
1019 liquidLv = (param.liquidLv = 99);
1020 }
1021 CellEffect effect = this.cell.effect;
1022 if (effect != null && effect.IsFire)
1023 {
1024 blockLight += 0.2f;
1025 totalFire++;
1026 }
1027 if (blockLight > lightLimit)
1028 {
1030 }
1031 blockLight += shadowModStrength * (float)(int)this.cell.shadowMod * _heightMod.x * _shadowStrength;
1032 if (this.room != null)
1033 {
1034 this.room.lot.sync = true;
1035 if (this.room.lot.light < blockLight)
1036 {
1037 this.room.lot.light = blockLight;
1038 }
1039 }
1040 if (currentLot != null && currentLot.idRoofStyle != 0)
1041 {
1042 bool flag2 = this.cell.IsRoomEdge && (this.cell.Front.room?.lot == currentLot || this.cell.Right.room?.lot == currentLot || this.cell.FrontRight.room?.lot == currentLot);
1043 if (!buildMode)
1044 {
1045 if ((this.room != null && this.room.lot == currentLot) || flag2)
1046 {
1048 }
1049 else
1050 {
1051 blockLight += (isSnowCovered ? (-0.02f) : lotLight2);
1052 }
1053 }
1054 }
1055 if (this.cell.outOfBounds && darkenOuter)
1056 {
1057 blockLight -= 0.1f;
1058 if (fogBounds)
1059 {
1060 isSeen = false;
1061 }
1062 }
1064 param.color = (blockLight = (int)(blockLight * 50f) * 262144 + ((this.cell.lightR >= 64) ? 63 : this.cell.lightR) * 4096 + ((this.cell.lightG >= 64) ? 63 : this.cell.lightG) * 64 + ((this.cell.lightB >= 64) ? 63 : this.cell.lightB));
1065 if (snowed)
1066 {
1069 {
1071 }
1072 floorLight = (int)(floorLight * 50f) * 262144 + (int)((float)((this.cell.lightR >= 50) ? 50 : this.cell.lightR) * snowColor) * 4096 + (int)((float)((this.cell.lightG >= 50) ? 50 : this.cell.lightG) * snowColor) * 64 + (int)((float)((this.cell.lightB >= 50) ? 50 : this.cell.lightB) * snowColor) + snowColorToken;
1073 }
1074 else if (isSnowCovered && !roof)
1075 {
1076 floorLight = (int)(floorLight * 50f) * 262144 + (int)((float)((this.cell.lightR >= 50) ? 50 : this.cell.lightR) * snowColor2) * 4096 + (int)((float)((this.cell.lightG >= 50) ? 50 : this.cell.lightG) * snowColor2) * 64 + (int)((float)((this.cell.lightB >= 50) ? 50 : this.cell.lightB) * snowColor2) + snowColorToken;
1077 }
1078 else
1079 {
1081 }
1082 bool num = this.room != null && sourceBlock.tileType.CastShadowSelf && !this.cell.hasDoor;
1083 bool flag3 = this.room != null && showRoof && this.room.lot.idRoofStyle != 0 && !this.room.data.atrium && !sourceBlock.tileType.Invisible;
1084 if (flag3 && this.cell.hasDoor && this.cell.IsLotEdge)
1085 {
1086 flag3 = false;
1087 }
1088 if (num || !isSeen || flag3)
1089 {
1090 floorLight += -3145728f;
1091 }
1092 if (this.cell.isWatered && !snowed)
1093 {
1094 floorLight += -2359296f;
1095 }
1096 param.snow = false;
1097 param.x = (float)(cx + cz) * screen.tileAlign.x;
1098 param.y = (float)(cz - cx) * screen.tileAlign.y + (float)height * _heightMod.y;
1099 param.z = 1000f + param.x * screen.tileWeight.x + param.y * screen.tileWeight.z + (float)height * _heightMod.z;
1100 if (flag)
1101 {
1102 param.y += 0.01f * floatY;
1103 }
1104 if (detail != null)
1105 {
1106 TransAnime anime = detail.anime;
1107 if (anime != null && anime.animeBlock)
1108 {
1109 TransAnime anime2 = detail.anime;
1110 param.x += anime2.v.x;
1111 param.y += anime2.v.y;
1112 param.z += anime2.v.z;
1113 }
1114 if (detail.designation != null)
1115 {
1117 }
1118 }
1119 if (screenHighlight != ScreenHighlight.None && screenHighlight == ScreenHighlight.SunMap && Map.sunMap.Contains(index))
1120 {
1122 }
1123 if (this.cell._roofBlock != 0 && (isSeen || !EMono._zone.UseFog) && showRoof && !lowBlock)
1124 {
1125 SourceBlock.Row row = Cell.blockSource[this.cell._roofBlock];
1127 this.tileType = row.tileType;
1128 param.mat = row2;
1129 param.dir = this.cell._roofBlockDir % 4;
1130 param.snow = isSnowCovered && !this.cell.isClearSnow;
1131 orgX = param.x;
1132 orgY = param.y;
1133 orgZ = param.z;
1134 SetRoofHeight(param, this.cell, cx, cz, 0, this.cell._roofBlockDir / 4, this.tileType.IsWallOrFence ? param.dir : (-1));
1135 switch (this.tileType.blockRenderMode)
1136 {
1137 case BlockRenderMode.FullBlock:
1138 param.color -= (int)(_shadowStrength * 50f) * 262144;
1139 param.tile = row._tiles[param.dir % row._tiles.Length];
1140 param.matColor = ((row.colorMod == 0) ? 104025 : GetColorInt(ref row2.matColor, row.colorMod));
1141 row.renderData.Draw(param);
1142 break;
1143 case BlockRenderMode.WallOrFence:
1144 {
1145 _lowblock = true;
1146 int dir = param.dir;
1147 if (dir == 0 || dir == 2)
1148 {
1149 param.dir = 0;
1150 _sourceBlock = row;
1151 this.tileType = _sourceBlock.tileType;
1152 if (_sourceBlock.useAltColor)
1153 {
1154 param.matColor = ((_sourceBlock.colorMod == 0) ? 104025 : GetColorInt(ref param.mat.altColor, _sourceBlock.colorMod));
1155 }
1156 else
1157 {
1158 param.matColor = ((_sourceBlock.colorMod == 0) ? 104025 : GetColorInt(ref param.mat.matColor, _sourceBlock.colorMod));
1159 }
1160 param.tile = (tile = _sourceBlock._tiles[0] + ((_lowblock && !this.tileType.IsFence) ? 32 : 0));
1161 _sourceBlock.renderData.Draw(param);
1162 param.z -= 0.01f;
1163 }
1164 if (dir == 1 || dir == 2)
1165 {
1166 param.dir = 1;
1167 _sourceBlock = row;
1168 this.tileType = _sourceBlock.tileType;
1169 if (_sourceBlock.useAltColor)
1170 {
1171 param.matColor = ((_sourceBlock.colorMod == 0) ? 104025 : GetColorInt(ref param.mat.altColor, _sourceBlock.colorMod));
1172 }
1173 else
1174 {
1175 param.matColor = ((_sourceBlock.colorMod == 0) ? 104025 : GetColorInt(ref param.mat.matColor, _sourceBlock.colorMod));
1176 }
1177 param.tile = (tile = -_sourceBlock._tiles[0] + ((_lowblock && !this.tileType.IsFence) ? (-32) : 0));
1178 _sourceBlock.renderData.Draw(param);
1179 }
1180 break;
1181 }
1182 case BlockRenderMode.HalfBlock:
1183 _sourceBlock = ((row.id == 5) ? EMono.sources.blocks[row2.defBlock] : row);
1184 param.tile = _sourceBlock._tiles[0];
1185 param.matColor = ((_sourceBlock.colorMod == 0) ? 104025 : GetColorInt(ref row2.matColor, _sourceBlock.colorMod));
1186 param.tile2 = _sourceBlock.sourceAutoFloor._tiles[0];
1187 param.halfBlockColor = ((_sourceBlock.sourceAutoFloor.colorMod == 0) ? 104025 : GetColorInt(ref row2.matColor, _sourceBlock.sourceAutoFloor.colorMod));
1188 row.renderData.Draw(param);
1189 break;
1190 case BlockRenderMode.Pillar:
1191 {
1192 RenderData renderData = row.renderData;
1193 param.tile = row._tiles[param.dir % row._tiles.Length];
1194 param.matColor = ((row.colorMod == 0) ? 104025 : GetColorInt(ref row2.matColor, row.colorMod));
1195 renderData.Draw(param);
1196 param.tile = renderData.idShadow;
1197 SourcePref shadowPref = renderData.shadowPref;
1198 int shadow = shadowPref.shadow;
1199 passShadow.AddShadow(param.x + renderData.offsetShadow.x, param.y + renderData.offsetShadow.y, param.z + renderData.offsetShadow.z, ShadowData.Instance.items[shadow], shadowPref, 0, param.snow);
1200 break;
1201 }
1202 default:
1203 param.tile = row._tiles[param.dir % row._tiles.Length];
1204 param.matColor = ((row.colorMod == 0) ? 104025 : GetColorInt(ref row2.matColor, row.colorMod));
1205 row.renderData.Draw(param);
1206 break;
1207 }
1208 param.x = orgX;
1209 param.y = orgY;
1210 param.z = orgZ;
1211 param.color = blockLight;
1212 }
1213 fogged = false;
1214 bool flag4 = this.cell.isSurrounded && innerMode != InnerMode.None && sourceBlock.tileType.IsFullBlock;
1215 if (!(!isSeen || flag4))
1216 {
1217 goto IL_16be;
1218 }
1219 bool isRoomEdge = this.cell.IsRoomEdge;
1220 orgY = param.y;
1221 orgZ = param.z;
1222 param.color = (int)(50f * (_baseBrightness + fogBrightness)) * 262144;
1223 param.matColor = 104025f;
1224 if (hasBridge)
1225 {
1226 param.y = (float)(cz - cx) * screen.tileAlign.y + (float)(int)this.cell.bridgeHeight * _heightMod.y + ugFixBridgeBottom.x;
1227 param.z = 1000f + param.x * screen.tileWeight.x + param.y * screen.tileWeight.z + (float)(int)this.cell.bridgeHeight * _heightMod.z;
1228 }
1229 bool flag5 = (!isSeen && EMono._zone.UseFog) || flag4;
1230 if (flag5)
1231 {
1232 param.tile = 7f;
1234 param.tile = 0f;
1236 }
1237 else if (this.cell.HasFloodBlock && isRoomEdge)
1238 {
1239 param.tile = 9f;
1241 }
1242 else
1243 {
1244 param.tile = 8f;
1246 }
1247 if ((this.cell.isSlopeEdge || hasBridge) && (flag5 || !isRoomEdge))
1248 {
1249 float num2 = (float)(int)this.cell.TopHeight * _heightMod.y;
1250 param.tile = 0f;
1251 for (int i = 0; (float)i < num2 / heightBlockSize; i++)
1252 {
1253 param.y += ugFix.y;
1254 param.z += ugFix.z + slopeFixZ * (float)i;
1255 if (flag5)
1256 {
1258 }
1259 else
1260 {
1262 }
1263 }
1264 }
1265 param.y = orgY;
1266 param.z = orgZ;
1267 param.color = blockLight;
1268 if (flag5)
1269 {
1270 if (detail == null || !(EMono.pc.hasTelepathy || flag4))
1271 {
1272 return;
1273 }
1274 }
1275 else
1276 {
1277 if (isRoomEdge)
1278 {
1279 goto IL_16be;
1280 }
1281 if (detail == null || !(EMono.pc.hasTelepathy || flag4))
1282 {
1283 if (noRoofMode || detail == null)
1284 {
1285 return;
1286 }
1287 fogged = true;
1288 }
1289 }
1290 goto IL_7d54;
1291 IL_7d54:
1292 if (detail.things.Count == 0 && detail.charas.Count == 0)
1293 {
1294 return;
1295 }
1296 int num3 = 0;
1297 thingPos.x = 0f;
1298 thingPos.y = 0f;
1299 thingPos.z = 0f;
1300 freePos.x = (freePos.y = (freePos.z = 0f));
1301 if (this.cell.HasRamp)
1302 {
1303 Vector3 rampFix = sourceBlock.tileType.GetRampFix(this.cell.blockDir);
1304 param.x += rampFix.x;
1305 param.y += rampFix.y;
1306 param.z += rampFix.z;
1307 freePos.x += rampFix.x;
1308 freePos.y += rampFix.y;
1309 freePos.z += rampFix.z;
1310 }
1311 param.y += (flag ? 0f : ((this.cell._bridge != 0) ? this.cell.sourceBridge.tileType.FloorHeight : sourceFloor.tileType.FloorHeight));
1312 orgPos.x = (orgX = param.x);
1313 orgPos.y = (orgY = param.y);
1314 orgPos.z = (orgZ = param.z);
1315 if (flag && liquidLv > 0)
1316 {
1317 if (liquidLv > 10)
1318 {
1319 liquidLv = TileType.FloorWaterShallow.LiquidLV * 10;
1320 }
1321 liquidLv -= (int)(floatY * 0.5f);
1322 param.liquidLv = liquidLv;
1324 }
1325 Thing thing = null;
1326 bool shadow2 = liquidLv == 0;
1327 float num4 = 0f;
1328 float num5 = 0f;
1329 float num6 = 0f;
1330 float num7 = 0f;
1331 bool flag6 = false;
1332 float num8 = 0f;
1333 bool flag7 = false;
1334 float num9 = 0f;
1335 if (detail.things.Count > 0 && isSeen)
1336 {
1337 _ = zSetting.max1;
1338 float num10 = 0f;
1339 for (int j = 0; j < detail.things.Count; j++)
1340 {
1341 Thing t = detail.things[j];
1342 if ((fogged && !t.isRoofItem) || ((t.isHidden || t.trait.HideInAdv || t.isMasked) && !EMono.scene.actionMode.ShowMaskedThings) || (t.isRoofItem && ((this.room == null && !sourceBlock.tileType.IsFullBlock && !EMono._zone.IsPCFaction && !buildMode) || (lowBlock && !showFullWall && this.room != null) || (noRoofMode && currentRoom == null))) || (flag3 && !t.isRoofItem))
1343 {
1344 continue;
1345 }
1347 bool isInstalled = t.IsInstalled;
1348 SourcePref pref = t.Pref;
1349 if (!isInstalled && t.category.tileDummy != 0)
1350 {
1352 }
1353 float num11 = ((tileType.UseMountHeight && isInstalled) ? 0f : ((pref.height < 0f) ? 0f : ((pref.height == 0f) ? 0.1f : pref.height)));
1354 if (t.ignoreStackHeight)
1355 {
1356 thingPos.y -= num4;
1357 thingPos -= altitudeFix * num5;
1358 }
1359 shadow2 = thingPos.y < 0.16f && num9 < 0.16f && t.altitude >= 0;
1360 if (flag6 && t.altitude > 0)
1361 {
1362 shadow2 = false;
1363 }
1364 _ = pref.bypassShadow;
1365 param.shadowFix = 0f - thingPos.y;
1366 param.liquidLv = ((thingPos.y + (float)t.altitude < 0.1f) ? liquidLv : 0);
1367 if (t.isRoofItem)
1368 {
1369 param.snow = isSnowCovered && !this.cell.isClearSnow;
1370 SetRoofHeight(param, this.cell, cx, cz);
1371 _actorPos.x = param.x;
1372 _actorPos.y = param.y;
1373 _actorPos.z = param.z + num10;
1374 if (this.room != null)
1375 {
1376 param.color = GetRoofLight(this.room.lot);
1377 }
1378 shadow2 = false;
1379 param.liquidLv = 0;
1380 }
1381 else
1382 {
1383 param.snow = snowed;
1384 _actorPos.x = orgX + num7;
1385 _actorPos.y = orgY;
1386 _actorPos.z = orgZ + num10 + thingPos.z;
1387 if (tileType.CanStack || !isInstalled)
1388 {
1389 if (thing?.id != t.id)
1390 {
1391 _actorPos.x += thingPos.x;
1392 }
1393 _actorPos.y += thingPos.y;
1394 if (t.trait.IgnoreLastStackHeight && (thing == null || !thing.trait.IgnoreLastStackHeight))
1395 {
1396 thingPos.y -= num4;
1397 if (thing != null)
1398 {
1399 _actorPos.z -= 0.2f;
1400 thingPos.z -= 0.2f;
1401 }
1402 _actorPos.y -= num4;
1403 }
1404 _actorPos.z += renderSetting.thingZ + (float)j * -0.01f + zSetting.mod1 * thingPos.y;
1405 }
1406 if (isInstalled)
1407 {
1408 if (t.TileType.IsRamp)
1409 {
1410 Vector3 rampFix2 = t.TileType.GetRampFix(t.dir, pref);
1411 orgX += rampFix2.x;
1412 orgY += rampFix2.y;
1413 orgZ += rampFix2.z;
1414 freePos.x += rampFix2.x;
1415 freePos.y += rampFix2.y;
1416 freePos.z += rampFix2.z;
1417 if (!this.cell.IsTopWater || t.altitude > 0)
1418 {
1419 num9 += rampFix2.y;
1420 }
1421 liquidLv -= (int)(rampFix2.y * 150f);
1422 if (liquidLv < 0)
1423 {
1424 liquidLv = 0;
1425 }
1426 }
1427 else if (!flag7 && t.trait.IsChangeFloorHeight && !t.ignoreStackHeight)
1428 {
1429 orgY += num11 + (float)t.altitude * altitudeFix.y;
1430 orgZ += (float)t.altitude * altitudeFix.z;
1431 freePos.y += num11 + (float)t.altitude * altitudeFix.y;
1432 if (!this.cell.IsTopWater || t.altitude > 0)
1433 {
1434 num9 += num11 + (float)t.altitude * altitudeFix.y;
1435 }
1436 _actorPos.x += pref.x * (float)((!t.flipX) ? 1 : (-1));
1437 _actorPos.z += pref.z;
1438 thingPos.z += pref.z;
1439 liquidLv -= (int)(num11 * 150f);
1440 if (liquidLv < 0)
1441 {
1442 liquidLv = 0;
1443 }
1444 }
1445 else
1446 {
1447 thingPos.y += num11;
1449 {
1450 if ((tileType != TileType.Illumination || !this.cell.HasObj) && !tileType.AlwaysShow && !this.cell.toggleOcclusion)
1451 {
1453 {
1454 continue;
1455 }
1456 if (hideHang && (this.cell.room?.lot != currentLot || (!this.cell.lotWall && this.cell.room != currentRoom)))
1457 {
1458 Room room = ((t.dir == 0) ? this.cell.Back.room : this.cell.Left.room);
1460 {
1461 if (room == null || !room.data.showWallItem)
1462 {
1463 continue;
1464 }
1465 }
1466 else if (t.altitude >= lowWallObjAltitude)
1467 {
1468 continue;
1469 }
1470 }
1471 }
1473 {
1474 flag6 = true;
1475 }
1477 shadow2 = false;
1478 param.liquidLv = 0;
1479 if (t.freePos)
1480 {
1481 _actorPos.x += t.fx;
1482 _actorPos.y += t.fy;
1483 }
1484 }
1485 else
1486 {
1487 if ((tileType != TileType.Illumination || !this.cell.HasObj) && !tileType.AlwaysShow && !this.cell.toggleOcclusion && noRoofMode && currentRoom == null && t.altitude >= lowWallObjAltitude && tileType != TileType.ObjFloat)
1488 {
1489 continue;
1490 }
1491 thingPos.y += (float)t.altitude * altitudeFix.y;
1492 thingPos.z += (float)t.altitude * altitudeFix.z;
1493 }
1494 _actorPos.x += pref.x * (float)((!t.flipX) ? 1 : (-1));
1495 _actorPos.z += pref.z;
1496 if (pref.height >= 0f)
1497 {
1498 thingPos.z += pref.z;
1499 }
1500 }
1501 if (!tileType.UseMountHeight && j > 10)
1502 {
1503 flag7 = true;
1504 }
1505 }
1506 else
1507 {
1508 thingPos.y += num11;
1509 _actorPos.x += pref.x * (float)((!t.flipX) ? 1 : (-1));
1510 _actorPos.z += pref.z;
1511 thingPos.z += pref.z;
1512 }
1513 if (t.isFloating && isWater && !hasBridge && !flag)
1514 {
1515 flag = true;
1516 float num12 = ((this.cell._bridge != 0) ? sourceBridge.tileType.FloorHeight : sourceFloor.tileType.FloorHeight);
1517 orgY += 0.01f * floatY - num12;
1519 {
1520 num8 = num11;
1521 }
1522 _actorPos.y += 0.01f * floatY - num12;
1523 if (liquidLv > 10)
1524 {
1525 liquidLv = TileType.FloorWaterShallow.LiquidLV * 10;
1526 }
1527 liquidLv -= (int)(floatY * 0.5f);
1528 if (liquidLv < 0)
1529 {
1530 liquidLv = 0;
1531 }
1532 param.liquidLv = liquidLv;
1533 }
1534 num4 = num11;
1535 if (t.sourceCard.multisize && !t.trait.IsGround)
1536 {
1537 num10 += zSetting.multiZ;
1538 }
1539 orgZ += t.renderer.data.stackZ;
1540 if (param.liquidLv > 0)
1541 {
1542 param.liquidLv += pref.liquidMod;
1543 if (param.liquidLv < 1)
1544 {
1545 param.liquidLv = 1;
1546 }
1547 else if (param.liquidLv > 99 + pref.liquidModMax)
1548 {
1549 param.liquidLv = 99 + pref.liquidModMax;
1550 }
1551 }
1552 }
1553 if (!isInstalled || !tileType.UseMountHeight)
1554 {
1555 if (t.altitude != 0)
1556 {
1558 if (!t.isRoofItem)
1559 {
1560 num6 += (float)t.altitude;
1561 num5 = t.altitude;
1562 }
1563 }
1564 if (num6 >= 2f && ((this.cell.Back.room != null && this.cell.Back.IsRoomEdge) || (this.cell.Left.room != null && this.cell.Left.IsRoomEdge)) && hideHang && (this.cell.room?.lot != currentLot || (!this.cell.lotWall && this.cell.room != currentRoom)))
1565 {
1566 continue;
1567 }
1568 if (t.freePos)
1569 {
1570 if (t.isRoofItem)
1571 {
1572 _actorPos.x += t.fx;
1573 _actorPos.y += t.fy - (float)t.altitude * altitudeFix.y;
1574 }
1575 else
1576 {
1577 _actorPos.x = orgX + t.fx - freePos.x;
1578 _actorPos.y = orgY + t.fy - freePos.y;
1579 }
1580 }
1581 if (t.trait is TraitDoor && (t.trait as TraitDoor).IsOpen())
1582 {
1583 _actorPos.z += -0.5f;
1584 }
1585 }
1586 if (!t.sourceCard.multisize || (t.pos.x == cx && t.pos.z == cz))
1587 {
1588 if (iconMode != CardIconMode.None)
1589 {
1590 int num13 = 0;
1591 switch (iconMode)
1592 {
1593 case CardIconMode.Visibility:
1594 if (t.isMasked)
1595 {
1596 num13 = 17;
1597 }
1598 break;
1599 case CardIconMode.State:
1600 if (t.placeState == PlaceState.installed)
1601 {
1602 num13 = 18;
1603 }
1604 break;
1605 case CardIconMode.Deconstruct:
1606 if (t.isDeconstructing)
1607 {
1608 num13 = 14;
1609 }
1610 break;
1611 }
1613 {
1614 num13 = 13;
1615 }
1616 if (num13 != 0)
1617 {
1618 passGuideBlock.Add(_actorPos.x, _actorPos.y, _actorPos.z - 10f, num13);
1619 }
1620 }
1622 if (_lowblock && t.trait.UseLowblock && !this.cell.HasFullBlock)
1623 {
1624 param.tile += ((param.tile < 0f) ? (-64) : 64);
1625 }
1626 if (t.trait is TraitTrolley && EMono.pc.ai is AI_Trolley aI_Trolley && aI_Trolley.trolley.owner == t)
1627 {
1628 RenderParam _param = new RenderParam(param);
1629 EMono.core.actionsLateUpdate.Add(delegate
1630 {
1631 t.SetRenderParam(_param);
1632 _actorPos.x = EMono.pc.renderer.position.x;
1633 _actorPos.y = EMono.pc.renderer.position.y - pref.height;
1634 _actorPos.z = EMono.pc.renderer.position.z + 0.02f;
1635 t.renderer.Draw(_param, ref _actorPos, !t.noShadow && (shadow2 || tileType.AlwaysShowShadow));
1636 });
1637 }
1638 else
1639 {
1640 if (t.trait.UsePositionFix)
1641 {
1643 }
1644 t.renderer.Draw(param, ref _actorPos, !t.noShadow && (shadow2 || tileType.AlwaysShowShadow));
1645 }
1646 }
1647 if (isInstalled)
1648 {
1649 num7 += pref.stackX * (float)((!t.flipX) ? 1 : (-1));
1650 }
1651 param.x = orgX;
1652 param.y = orgY;
1653 param.z = orgZ;
1654 param.color = floorLight;
1655 thing = t;
1656 if (pref.Float)
1657 {
1658 liquidLv = 0;
1659 }
1660 }
1661 }
1662 orgY += num8;
1663 if (detail.charas.Count <= 0)
1664 {
1665 return;
1666 }
1667 param.shadowFix = 0f - num9;
1668 param.color += 1310720f;
1669 float max = zSetting.max2;
1670 for (int num14 = 0; num14 < detail.charas.Count; num14++)
1671 {
1672 Chara chara = detail.charas[num14];
1673 if (chara.host != null)
1674 {
1675 continue;
1676 }
1677 if (chara != EMono.pc && chara != LayerDrama.alwaysVisible)
1678 {
1679 if (chara.mimicry != null && chara.mimicry.IsThing)
1680 {
1681 if (flag3 || fogged || !this.cell.isSeen)
1682 {
1683 continue;
1684 }
1685 }
1686 else if (flag3 || fogged || (!showAllCards && !EMono.player.CanSee(chara)))
1687 {
1688 continue;
1689 }
1690 }
1691 _actorPos.x = orgX;
1692 _actorPos.y = orgY;
1693 _actorPos.z = orgZ;
1694 if (this.cell.IsBlocked && chara.IsAstralBody)
1695 {
1696 _actorPos.z += EMono.setting.render.astralBodyFixZ;
1697 }
1698 chara.SetRenderParam(param);
1699 _ = chara.IsAliveInCurrentZone;
1700 if (chara.isRestrained)
1701 {
1702 TraitShackle restrainer = chara.GetRestrainer();
1703 if (restrainer != null)
1704 {
1705 Vector3 getRestrainPos = restrainer.GetRestrainPos;
1706 if (getRestrainPos != default(Vector3))
1707 {
1708 Vector3 position = restrainer.owner.renderer.position;
1709 float defCharaHeight = EMono.setting.render.defCharaHeight;
1710 float num15 = getRestrainPos.y + defCharaHeight - ((chara.Pref.height == 0f) ? defCharaHeight : chara.source.pref.height);
1711 _actorPos.x = position.x + getRestrainPos.x * (float)((restrainer.owner.dir % 2 == 0) ? 1 : (-1));
1712 _actorPos.y = position.y + num15;
1713 _actorPos.z = position.z + getRestrainPos.z;
1714 param.liquidLv = 0;
1715 param.shadowFix = orgY - _actorPos.y;
1716 chara.renderer.SetFirst(first: true);
1717 chara.renderer.Draw(param, ref _actorPos, drawShadow: true);
1718 param.shadowFix = 0f;
1719 continue;
1720 }
1721 }
1722 }
1723 if (!chara.sourceCard.multisize || (chara.pos.x == cx && chara.pos.z == cz))
1724 {
1725 if (chara.IsDeadOrSleeping && chara.IsPCC)
1726 {
1727 float num16 = chara.renderer.data.size.y * 0.3f;
1728 if (thingPos.y > max)
1729 {
1730 thingPos.y = max;
1731 }
1732 float num17 = thingPos.y + num16;
1733 float num18 = (float)num14 * -0.01f;
1734 if (num17 > zSetting.thresh1)
1735 {
1736 num18 = zSetting.mod1;
1737 }
1738 _actorPos.x += thingPos.x;
1739 _actorPos.y += thingPos.y;
1740 _actorPos.z += renderSetting.laydownZ + num18;
1741 param.liquidLv = ((thingPos.y == 0f && liquidLv > 0) ? 90 : 0);
1742 thingPos.y += num16 * 0.8f;
1743 chara.renderer.Draw(param, ref _actorPos, liquidLv == 0);
1744 }
1745 else
1746 {
1747 param.liquidLv = liquidLv;
1748 if (isUnderwater)
1749 {
1750 if (chara.Pref.FloatUnderwater)
1751 {
1752 float num19 = ((this.cell._bridge != 0) ? sourceBridge.tileType.FloorHeight : sourceFloor.tileType.FloorHeight);
1753 float num20 = floatYs[chara.uid % 10] + 10f + (float)(chara.uid % 30);
1754 orgY += 0.01f * num20 - num19;
1755 _actorPos.y += 0.01f * num20 - num19;
1756 param.shadowFix -= 0.01f * num20 - num19;
1757 }
1758 }
1759 else if (liquidLv > 0)
1760 {
1761 if (chara.Pref.Float && !flag && !hasBridge)
1762 {
1763 if (liquidLv > 20)
1764 {
1765 float num21 = ((this.cell._bridge != 0) ? sourceBridge.tileType.FloorHeight : sourceFloor.tileType.FloorHeight);
1766 orgY += 0.01f * floatY - num21;
1767 _actorPos.y += 0.01f * floatY - num21;
1768 int num22 = TileType.FloorWaterShallow.LiquidLV * 10;
1769 num22 -= (int)(floatY * 0.5f);
1770 param.liquidLv = num22;
1771 }
1772 else
1773 {
1774 param.liquidLv -= 20;
1775 }
1776 }
1777 param.liquidLv += chara.Pref.liquidMod;
1778 if (param.liquidLv < 1)
1779 {
1780 param.liquidLv = 1;
1781 }
1782 else if (param.liquidLv > 99 + chara.Pref.liquidModMax)
1783 {
1784 param.liquidLv = 99 + chara.Pref.liquidModMax;
1785 }
1786 }
1787 if (!chara.IsPC && EMono.pc.host != chara && !chara.renderer.IsMoving && detail.charas.Count > 1 && (detail.charas.Count != 2 || !detail.charas[0].IsDeadOrSleeping || !detail.charas[0].IsPCC))
1788 {
1789 _actorPos += renderSetting.charaPos[1 + ((num3 < 4) ? num3 : 3)];
1790 }
1791 _actorPos.z += 0.01f * (float)num14 + renderSetting.charaZ;
1792 num3++;
1793 if (flag6)
1794 {
1795 _actorPos.z += chara.renderer.data.hangedFixZ;
1796 }
1797 chara.renderer.Draw(param, ref _actorPos, liquidLv == 0);
1798 }
1799 }
1800 param.x = orgX;
1801 param.y = orgY;
1802 param.z = orgZ;
1803 }
1804 return;
1805 IL_71ea:
1806 if (isSnowCovered && (sourceBlock.id != 0 || this.cell.hasDoor) && !snowed && !this.cell.isClearSnow && ((!this.cell.Front.HasRoof && !this.cell.Front.HasBlock) || (!this.cell.Right.HasRoof && !this.cell.Right.HasBlock)))
1807 {
1808 snowed = true;
1809 }
1810 if (this.cell.effect != null)
1811 {
1812 if (this.cell.effect.IsLiquid)
1813 {
1814 SourceCellEffect.Row sourceEffect = this.cell.sourceEffect;
1815 SourceMaterial.Row defaultMaterial = sourceEffect.DefaultMaterial;
1816 tile = 4 + Rand.bytes[index % Rand.MaxBytes] % 4;
1817 param.tile = tile + this.cell.sourceEffect._tiles[0];
1818 param.mat = defaultMaterial;
1819 param.matColor = ((this.cell.effect.color == 0) ? GetColorInt(ref defaultMaterial.matColor, sourceEffect.colorMod) : this.cell.effect.color);
1820 sourceEffect.renderData.Draw(param);
1821 }
1822 else
1823 {
1824 param.tile = this.cell.effect.source._tiles[0];
1825 SourceCellEffect.Row sourceEffect2 = this.cell.sourceEffect;
1826 if (sourceEffect2.anime.Length != 0)
1827 {
1828 if (sourceEffect2.anime.Length > 2)
1829 {
1830 float num23 = Time.realtimeSinceStartup * 1000f / (float)sourceEffect2.anime[1] % (float)sourceEffect2.anime[2];
1831 if (!(num23 >= (float)sourceEffect2.anime[0]))
1832 {
1833 param.tile += num23;
1834 }
1835 }
1836 else
1837 {
1838 float num24 = Time.realtimeSinceStartup * 1000f / (float)sourceEffect2.anime[1] % (float)sourceEffect2.anime[0];
1839 param.tile += num24;
1840 }
1841 }
1842 if (this.cell.effect.IsFire)
1843 {
1845 }
1846 else
1847 {
1848 this.cell.effect.source.renderData.Draw(param);
1849 }
1850 }
1851 }
1852 param.color = floorLight;
1853 if (this.cell.critter != null)
1854 {
1855 Critter critter = this.cell.critter;
1856 int snowTile = critter.tile;
1857 if (snowed && critter.SnowTile != 0)
1858 {
1859 critter.x = 0.06f;
1860 critter.y = -0.06f;
1861 snowTile = critter.SnowTile;
1862 }
1863 else
1864 {
1865 critter.Update();
1866 }
1867 pass = passObjSS;
1869 batch.matrices[pass.idx].m03 = param.x + (float)(int)(critter.x * 100f) * 0.01f;
1870 batch.matrices[pass.idx].m13 = param.y + (float)(int)(critter.y * 100f) * 0.01f;
1871 batch.matrices[pass.idx].m23 = param.z;
1872 batch.tiles[pass.idx] = snowTile * ((!critter.reverse) ? 1 : (-1));
1874 pass.idx++;
1875 if (pass.idx == pass.batchSize)
1876 {
1877 pass.NextBatch();
1878 }
1879 }
1880 if (detail != null)
1881 {
1882 TransAnime anime3 = detail.anime;
1883 if (anime3 != null && !anime3.animeBlock)
1884 {
1885 TransAnime anime4 = detail.anime;
1886 param.x += anime4.v.x;
1887 param.y += anime4.v.y;
1888 param.z += anime4.v.z;
1889 }
1890 }
1891 if (this.cell.obj != 0 && !this.cell.sourceObj.renderData.SkipOnMap)
1892 {
1893 SourceObj.Row sourceObj = this.cell.sourceObj;
1894 if (!snowed || sourceObj.snowTile <= 0)
1895 {
1896 param.snow = snowed;
1897 param.mat = this.cell.matObj;
1898 orgY = param.y;
1899 if (param.liquidLv > 0)
1900 {
1901 if (sourceObj.pref.Float)
1902 {
1903 param.y += 0.01f * floatY;
1904 if (liquidLv > 10)
1905 {
1906 liquidLv = TileType.FloorWaterShallow.LiquidLV * 10;
1907 }
1908 liquidLv -= (int)(floatY * 0.5f);
1909 param.liquidLv = liquidLv;
1910 }
1911 if (sourceObj.tileType.IsWaterTop)
1912 {
1913 param.liquidLv = 0;
1914 }
1915 else
1916 {
1917 param.liquidLv += sourceObj.pref.liquidMod;
1918 if (param.liquidLv < 1)
1919 {
1920 param.liquid = 1f;
1921 }
1922 else if (param.liquidLv > 99 + sourceObj.pref.liquidModMax)
1923 {
1924 param.liquidLv = 99 + sourceObj.pref.liquidModMax;
1925 }
1926 }
1927 }
1928 if (sourceObj.useAltColor)
1929 {
1930 param.matColor = ((sourceObj.colorMod == 0) ? 104025 : GetColorInt(ref param.mat.altColor, sourceObj.colorMod));
1931 }
1932 else
1933 {
1934 param.matColor = ((sourceObj.colorMod == 0) ? 104025 : GetColorInt(ref param.mat.matColor, sourceObj.colorMod));
1935 }
1936 if (sourceObj.HasGrowth)
1937 {
1938 this.cell.growth.OnRenderTileMap(param);
1939 }
1940 else
1941 {
1942 if (this.cell.autotileObj != 0)
1943 {
1944 param.tile = sourceObj._tiles[0] + this.cell.autotileObj;
1945 }
1946 else if (sourceObj.tileType.IsUseBlockDir)
1947 {
1948 param.tile = sourceObj._tiles[this.cell.blockDir % sourceObj._tiles.Length];
1949 }
1950 else
1951 {
1952 param.tile = sourceObj._tiles[this.cell.objDir % sourceObj._tiles.Length];
1953 }
1954 if (_lowblock && sourceObj.tileType.IsSkipLowBlock)
1955 {
1956 param.tile += ((param.tile > 0f) ? 1 : (-1)) * 3000000;
1957 }
1958 orgY = param.y;
1959 orgZ = param.z;
1960 param.y += sourceObj.pref.y;
1961 param.z += sourceObj.pref.z;
1962 sourceObj.renderData.Draw(param);
1963 param.y = orgY;
1964 param.z = orgZ;
1965 int shadow3 = sourceObj.pref.shadow;
1966 if (shadow3 > 1 && !this.cell.ignoreObjShadow)
1967 {
1968 passShadow.AddShadow(param.x + sourceObj.renderData.offsetShadow.x, param.y + sourceObj.renderData.offsetShadow.y, param.z + sourceObj.renderData.offsetShadow.z, ShadowData.Instance.items[shadow3], sourceObj.pref, 0, param.snow);
1969 }
1970 param.y = orgY;
1971 }
1972 }
1973 }
1974 if (this.cell.decal != 0 && sourceFloor.tileType.AllowBlood)
1975 {
1976 passDecal.Add(param, (int)this.cell.decal, floorLight);
1977 }
1978 if (highlightCells)
1979 {
1980 switch (ActionMode.FlagCell.mode)
1981 {
1982 case AM_FlagCell.Mode.flagWallPillar:
1983 if (this.cell.isToggleWallPillar)
1984 {
1985 passArea.Add(param, 34f, 0f);
1986 }
1987 break;
1988 case AM_FlagCell.Mode.flagOcclusion:
1989 if (this.cell.toggleOcclusion)
1990 {
1991 passArea.Add(param, 34f, 0f);
1992 }
1993 break;
1994 case AM_FlagCell.Mode.flagSnow:
1995 if (this.cell.isClearSnow)
1996 {
1997 passArea.Add(param, 34f, 0f);
1998 }
1999 break;
2000 case AM_FlagCell.Mode.flagFloat:
2001 if (this.cell.isForceFloat)
2002 {
2003 passArea.Add(param, 34f, 0f);
2004 }
2005 break;
2006 case AM_FlagCell.Mode.flagClear:
2007 if (this.cell.isClearArea)
2008 {
2009 passArea.Add(param, 34f, 0f);
2010 }
2011 break;
2012 }
2013 }
2014 if (detail == null)
2015 {
2016 return;
2017 }
2018 if (highlightArea && detail.area != null)
2019 {
2020 passArea.Add(param, (int)detail.area.GetTile(index) - ((!subtleHighlightArea) ? 1 : 0), 0f);
2021 }
2022 if (detail.footmark != null && sourceFloor.id != 0)
2023 {
2024 param.tile = detail.footmark.tile;
2025 param.mat = matFloor;
2026 param.matColor = 104025f;
2028 }
2029 goto IL_7d54;
2030 IL_16be:
2031 if (this.cell.isSlopeEdge)
2032 {
2033 float num25 = (float)height * _heightMod.y;
2034 orgY = param.y;
2035 orgZ = param.z;
2036 param.dir = this.cell.blockDir;
2037 if (snowed)
2038 {
2039 param.color = floorLight;
2040 }
2041 SourceBlock.Row defBlock;
2042 if (sourceBlock.tileType.IsFullBlock)
2043 {
2044 defBlock = sourceBlock;
2045 param.mat = matBlock;
2046 param.tile = sourceBlock._tiles[this.cell.blockDir % sourceBlock._tiles.Length];
2047 param.matColor = ((sourceBlock.colorMod == 0) ? 104025 : GetColorInt(ref matBlock.matColor, sourceBlock.colorMod));
2048 }
2049 else
2050 {
2051 defBlock = sourceFloor._defBlock;
2052 param.mat = matFloor;
2053 param.tile = defBlock._tiles[this.cell.blockDir % defBlock._tiles.Length];
2054 if (defBlock.id != 1)
2055 {
2056 param.matColor = ((sourceFloor.colorMod == 0) ? 104025 : GetColorInt(ref matFloor.matColor, sourceFloor.colorMod));
2057 }
2058 else
2059 {
2060 param.matColor = 104025f;
2061 }
2062 }
2063 for (int num26 = 0; (float)num26 < num25 / heightBlockSize; num26++)
2064 {
2065 param.y += ugFix.y;
2066 param.z += ugFix.z + slopeFixZ * (float)num26;
2067 defBlock.renderData.Draw(param);
2068 if (this.cell.pcSync && EMono.player.lightPower > 0f)
2069 {
2070 float num27 = param.tile;
2071 param.tile = 0f;
2073 param.tile = num27;
2074 }
2075 }
2076 param.y = orgY;
2077 param.z = orgZ;
2078 }
2079 param.color = floorLight;
2080 if (!isWater && (this.cell.Front.sourceFloor.tileType.IsWater || this.cell.Right.sourceFloor.tileType.IsWater) && this.cell.sourceBlock.tileType.RenderWaterBlock && !flag)
2081 {
2082 orgY = param.y;
2083 orgZ = param.z;
2084 int num28 = 0;
2085 if (sourceBlock.tileType.IsFullBlock)
2086 {
2088 num28 = sourceBlock._tiles[this.cell.blockDir % sourceBlock._tiles.Length];
2089 }
2090 else
2091 {
2092 SourceBlock.Row row3 = sourceFloor._defBlock;
2093 num28 = row3._tiles[this.cell.blockDir % row3._tiles.Length];
2094 }
2095 if (((this.cell.Front.shore / 12) & 1) == 0 && this.cell.Front.sourceFloor.tileType.IsWater && this.cell.Front.height <= height && this.cell.Front.sourceBlock.tileType.RenderWaterBlock)
2096 {
2097 param.y = (float)(cz - cx) * screen.tileAlign.y - (this.cell.Front.sourceFloor.tileType.IsDeepWater ? 0.6f : 0.4f) + (float)(int)this.cell.Front.height * _heightMod.y;
2098 param.z = 1000f + param.x * screen.tileWeight.x + param.y * screen.tileWeight.z;
2099 param.tile = num28 + ((!this.cell.Front.sourceFloor.tileType.IsDeepWater) ? 3000000 : 0);
2101 }
2102 if (((this.cell.Right.shore / 12) & 8) == 0 && this.cell.Right.sourceFloor.tileType.IsWater && this.cell.Right.height <= height && this.cell.Right.sourceBlock.tileType.RenderWaterBlock)
2103 {
2104 param.y = (float)(cz - cx) * screen.tileAlign.y - (this.cell.Right.sourceFloor.tileType.IsDeepWater ? 0.6f : 0.4f) + (float)(int)this.cell.Right.height * _heightMod.y;
2105 param.z = 1000f + param.x * screen.tileWeight.x + param.y * screen.tileWeight.z;
2106 param.tile = num28 + ((!this.cell.Right.sourceFloor.tileType.IsDeepWater) ? 3000000 : 0);
2108 }
2109 param.y = orgY;
2110 param.z = orgZ;
2111 }
2112 if (showBorder && !this.cell.outOfBounds)
2113 {
2114 param.matColor = 104025f;
2115 if (cx == EMono._map.bounds.x)
2116 {
2117 renderBorder.Draw(param, 12 + (EMono.world.date.IsNight ? 4 : 0));
2118 }
2119 else if (cx == EMono._map.bounds.maxX)
2120 {
2121 renderBorder.Draw(param, 13 + (EMono.world.date.IsNight ? 4 : 0));
2122 }
2123 if (cz == EMono._map.bounds.z)
2124 {
2125 renderBorder.Draw(param, 14 + (EMono.world.date.IsNight ? 4 : 0));
2126 }
2127 else if (cz == EMono._map.bounds.maxZ)
2128 {
2129 renderBorder.Draw(param, 15 + (EMono.world.date.IsNight ? 4 : 0));
2130 }
2131 }
2132 if (this.cell.isSkyFloor || (detail != null && detail.anime != null && detail.anime.drawBlock))
2133 {
2134 orgY = param.y;
2135 orgZ = param.z;
2136 SourceBlock.Row defBlock2 = sourceFloor._defBlock;
2137 param.mat = matFloor;
2138 param.tile = defBlock2._tiles[this.cell.blockDir % defBlock2._tiles.Length];
2139 if (defBlock2.id != 1)
2140 {
2141 param.matColor = ((sourceFloor.colorMod == 0) ? 104025 : GetColorInt(ref matFloor.matColor, sourceFloor.colorMod));
2142 }
2143 else
2144 {
2145 param.matColor = 104025f;
2146 }
2147 for (int num29 = 0; num29 < ((!this.cell.isSkyFloor) ? 1 : EMono._map.config.skyBlockHeight); num29++)
2148 {
2149 param.y += ugFix.y;
2150 param.z += ugFix.z + slopeFixZ * (float)num29;
2151 defBlock2.renderData.Draw(param);
2152 }
2153 param.y = orgY;
2154 param.z = orgZ;
2155 }
2156 if (!sourceFloor.tileType.IsSkipFloor)
2157 {
2158 if ((hasBridge && sourceBridge.tileType.CastShadowSelf) || this.cell.castFloorShadow)
2159 {
2160 floorLight2 = _lightMod * light * 0.2f + _baseBrightness + _shadowStrength * floorShadowStrength * (isWater ? 0.7f : (hasBridge ? 1f : (0.6f * (1f - nightRatio))));
2161 if (snowed)
2162 {
2163 floorLight2 = (int)((double)floorLight2 * 0.85 * 50.0) * 262144 + snowColorToken;
2164 }
2165 else
2166 {
2167 floorLight2 = (int)(floorLight2 * 50f) * 262144 + ((this.cell.lightR >= 64) ? 63 : this.cell.lightR) * 4096 + ((this.cell.lightG >= 64) ? 63 : this.cell.lightG) * 64 + ((this.cell.lightB >= 64) ? 63 : this.cell.lightB);
2168 }
2169 param.color = floorLight2;
2170 if (this.cell.lotShade)
2171 {
2173 }
2174 }
2175 floorMatColor = ((sourceFloor.colorMod == 0) ? 104025 : GetColorInt(ref matFloor.matColor, sourceFloor.colorMod));
2176 if (isWater && flag)
2177 {
2178 param.y -= 0.01f * floatY;
2179 }
2180 if (!sourceBlock.tileType.IsSkipFloor || sourceBlock.transparent || hasBridge || this.cell.hasDoor || this.cell.skipRender)
2181 {
2182 param.mat = matFloor;
2183 param.tile = sourceFloor._tiles[floorDir % sourceFloor._tiles.Length];
2184 param.matColor = floorMatColor;
2185 param.snow = snowed;
2186 if (sourceFloor.anime.Length != 0)
2187 {
2188 int num30 = (int)(Time.realtimeSinceStartup * 1000f / (float)sourceFloor.anime[1] % (float)sourceFloor.anime[0]);
2189 param.tile += num30;
2190 }
2191 if (this.cell.isDeck)
2192 {
2193 param.z += 1f;
2194 if ((bool)sourceFloor.renderData.subData)
2195 {
2196 sourceFloor.renderData.subData.Draw(param);
2197 }
2198 sourceFloor.renderData.Draw(param);
2199 param.z -= 1f;
2200 }
2201 else
2202 {
2203 if ((bool)sourceFloor.renderData.subData)
2204 {
2205 sourceFloor.renderData.subData.Draw(param);
2206 }
2207 sourceFloor.renderData.Draw(param);
2208 }
2209 int num31 = 0;
2210 if (isSnowCovered && sourceFloor == FLOOR.sourceSnow && !this.cell.hasDoor)
2211 {
2212 if (!this.cell.Right.IsSnowTile && this.cell.Right.topHeight == this.cell.topHeight)
2213 {
2214 num31++;
2215 }
2216 if (!this.cell.Front.IsSnowTile && this.cell.Front.topHeight == this.cell.topHeight)
2217 {
2218 num31 += 2;
2219 }
2220 if (num31 != 0)
2221 {
2222 param.tile = 448 + num31 + 12;
2223 param.z -= 0.1f;
2224 sourceFloor.renderData.Draw(param);
2225 param.z += 0.1f;
2226 }
2227 }
2228 if (this.cell.shadow != 0 && !hasBridge && !this.cell.skipRender)
2229 {
2230 if (snowed)
2231 {
2233 {
2234 param.tile = 448 + this.cell.shadow + 8 + (this.cell.HasFence ? 4 : 0);
2235 param.z -= 0.01f;
2236 sourceFloor.renderData.Draw(param);
2237 }
2238 }
2239 else
2240 {
2241 pass = passEdge;
2243 batch.matrices[pass.idx].m03 = param.x + ambientShadowFix[this.cell.shadow].x;
2244 batch.matrices[pass.idx].m13 = param.y + ambientShadowFix[this.cell.shadow].y;
2245 batch.matrices[pass.idx].m23 = param.z + ambientShadowFix[this.cell.shadow].z;
2246 batch.tiles[pass.idx] = 448 + this.cell.shadow;
2248 batch.matColors[pass.idx] = 104025f;
2249 pass.idx++;
2250 if (pass.idx == pass.batchSize)
2251 {
2252 pass.NextBatch();
2253 }
2254 }
2255 if (!sourceFloor.ignoreTransition && !snowed)
2256 {
2257 Cell back = this.cell.Back;
2258 if (back.sourceBlock.transition[0] != -1 && back.isSeen && !back.hasDoor)
2259 {
2260 pass = passFloor;
2262 batch.matrices[pass.idx].m03 = param.x + transitionFix[0].x;
2263 batch.matrices[pass.idx].m13 = param.y + transitionFix[0].y;
2264 batch.matrices[pass.idx].m23 = param.z + transitionFix[0].z;
2265 batch.tiles[pass.idx] = 480 + back.sourceBlock.transition[0] + Rand.bytes[index % Rand.MaxBytes] % back.sourceBlock.transition[1];
2267 batch.matColors[pass.idx] = GetColorInt(ref back.matBlock.matColor, back.sourceBlock.colorMod);
2268 pass.idx++;
2269 if (pass.idx == pass.batchSize)
2270 {
2271 pass.NextBatch();
2272 }
2273 }
2274 back = this.cell.Left;
2275 if (back.sourceBlock.transition[0] != -1 && back.isSeen && !back.hasDoor)
2276 {
2277 pass = passFloor;
2279 batch.matrices[pass.idx].m03 = param.x + transitionFix[1].x;
2280 batch.matrices[pass.idx].m13 = param.y + transitionFix[1].y;
2281 batch.matrices[pass.idx].m23 = param.z + transitionFix[1].z;
2282 batch.tiles[pass.idx] = 512 + back.sourceBlock.transition[0] + Rand.bytes[index % Rand.MaxBytes] % back.sourceBlock.transition[1];
2284 batch.matColors[pass.idx] = GetColorInt(ref back.matBlock.matColor, back.sourceBlock.colorMod);
2285 pass.idx++;
2286 if (pass.idx == pass.batchSize)
2287 {
2288 pass.NextBatch();
2289 }
2290 }
2291 }
2292 }
2293 if (this.cell.autotile != 0 && sourceFloor.autotile != 0 && (!hasBridge || this.cell.bridgeHeight - this.cell.height > 3) && !this.cell.skipRender && num31 == 0)
2294 {
2295 pass = (isWater ? passAutoTileWater : passAutoTile);
2297 batch.matrices[pass.idx].m03 = param.x;
2298 batch.matrices[pass.idx].m13 = param.y;
2299 batch.matrices[pass.idx].m23 = param.z + ((hasBridge || this.cell._block != 0) ? 0.8f : 0f);
2300 batch.tiles[pass.idx] = (26 + sourceFloor.autotile / 2) * 32 + sourceFloor.autotile % 2 * 16 + this.cell.autotile;
2301 batch.colors[pass.idx] = param.color + (float)((int)(sourceFloor.autotileBrightness * 100f) * 262144);
2303 pass.idx++;
2304 if (pass.idx == pass.batchSize)
2305 {
2306 pass.NextBatch();
2307 }
2308 }
2309 }
2310 if (isWater)
2311 {
2312 int num32 = 12;
2313 int num33 = this.cell.shore / num32;
2314 int num34 = this.cell.shore % num32;
2315 bool isShoreSand = this.cell.isShoreSand;
2316 if (this.cell.shore != 0)
2317 {
2318 Cell cell = (((num33 & 1) != 0) ? this.cell.Back : (((num33 & 2) != 0) ? this.cell.Right : (((num33 & 4) != 0) ? this.cell.Front : this.cell.Left)));
2319 if (isShoreSand && !cell.sourceFloor.isBeach)
2320 {
2321 cell = (((num33 & 8) != 0) ? this.cell.Left : (((num33 & 4) != 0) ? this.cell.Front : (((num33 & 2) != 0) ? this.cell.Right : this.cell.Back)));
2322 }
2323 if (!cell.IsSnowTile)
2324 {
2325 param.matColor = GetColorInt(ref cell.matFloor.matColor, cell.sourceFloor.colorMod);
2326 if (isShoreSand)
2327 {
2328 pass = passShore;
2330 batch.matrices[pass.idx].m03 = param.x;
2331 batch.matrices[pass.idx].m13 = param.y;
2332 batch.matrices[pass.idx].m23 = param.z;
2333 batch.tiles[pass.idx] = 768 + this.cell.shore / num32;
2336 pass.idx++;
2337 if (pass.idx == pass.batchSize)
2338 {
2339 pass.NextBatch();
2340 }
2341 num34 = 2;
2342 }
2343 else
2344 {
2345 num34 = cell.sourceFloor.edge;
2346 }
2347 param.tile = (24 + num34 / 2) * 32 + num34 % 2 * 16 + num33;
2349 }
2350 }
2351 if (this.cell.Back.isShoreSand && ((this.cell.Back.shore / num32) & 8) != 0 && this.cell.Left.isShoreSand && ((this.cell.Left.shore / num32) & 1) != 0)
2352 {
2353 param.tile = 785f;
2354 param.matColor = GetColorInt(ref this.cell.BackLeft.matFloor.matColor, this.cell.BackLeft.sourceFloor.colorMod);
2356 Draw(60);
2357 }
2358 if (this.cell.Back.isShoreSand && ((this.cell.Back.shore / num32) & 2) != 0 && this.cell.Right.isShoreSand && ((this.cell.Right.shore / num32) & 1) != 0)
2359 {
2360 param.tile = 786f;
2361 param.matColor = GetColorInt(ref this.cell.BackRight.matFloor.matColor, this.cell.BackRight.sourceFloor.colorMod);
2363 Draw(56);
2364 }
2365 if (this.cell.Front.isShoreSand && ((this.cell.Front.shore / num32) & 2) != 0 && this.cell.Right.isShoreSand && ((this.cell.Right.shore / num32) & 4) != 0)
2366 {
2367 param.tile = 787f;
2368 param.matColor = GetColorInt(ref this.cell.FrontRight.matFloor.matColor, this.cell.FrontRight.sourceFloor.colorMod);
2370 Draw(48);
2371 }
2372 if (this.cell.Front.isShoreSand && ((this.cell.Front.shore / num32) & 8) != 0 && this.cell.Left.isShoreSand && ((this.cell.Left.shore / num32) & 4) != 0)
2373 {
2374 param.tile = 788f;
2375 param.matColor = GetColorInt(ref this.cell.FrontLeft.matFloor.matColor, this.cell.FrontLeft.sourceFloor.colorMod);
2377 Draw(52);
2378 }
2379 if (this.cell._bridge != 0 && this.cell.isBridgeEdge && !this.cell.hidePillar)
2380 {
2381 pass = passEdge;
2383 batch.matrices[pass.idx].m03 = param.x + waterEdgeBridgeFix.x;
2384 batch.matrices[pass.idx].m13 = param.y + waterEdgeBridgeFix.y;
2385 batch.matrices[pass.idx].m23 = param.z + waterEdgeBridgeFix.z;
2386 batch.tiles[pass.idx] = 616 + waterAnimeIndex % 4;
2388 batch.matColors[pass.idx] = 104025f;
2389 pass.idx++;
2390 if (pass.idx == pass.batchSize)
2391 {
2392 pass.NextBatch();
2393 }
2394 }
2395 bool flag8 = false;
2396 if (isShoreSand)
2397 {
2398 if ((num33 & 1) != 0)
2399 {
2400 if ((num33 & 8) != 0)
2401 {
2402 if ((num33 & 2) == 0 && (num33 & 4) == 0)
2403 {
2404 Draw(16);
2405 }
2406 flag8 = true;
2407 }
2408 if ((num33 & 2) != 0)
2409 {
2410 if ((num33 & 8) == 0 && (num33 & 4) == 0)
2411 {
2412 Draw(20);
2413 }
2414 flag8 = true;
2415 }
2416 }
2417 if ((num33 & 4) != 0)
2418 {
2419 if ((num33 & 8) != 0)
2420 {
2421 if ((num33 & 2) == 0 && (num33 & 1) == 0)
2422 {
2423 Draw(24);
2424 }
2425 flag8 = true;
2426 }
2427 if ((num33 & 2) != 0)
2428 {
2429 if ((num33 & 8) == 0 && (num33 & 1) == 0)
2430 {
2431 Draw(28);
2432 }
2433 flag8 = true;
2434 }
2435 }
2436 if (!flag8)
2437 {
2438 if (!this.cell.Front.sourceFloor.tileType.IsWater && !this.cell.Front.isDeck)
2439 {
2440 Draw(8);
2441 }
2442 if (!this.cell.Right.sourceFloor.tileType.IsWater && !this.cell.Right.isDeck)
2443 {
2444 Draw(12);
2445 }
2446 }
2447 }
2448 if (!flag8)
2449 {
2450 if (!this.cell.Back.sourceFloor.tileType.IsWater && !this.cell.Back.isDeck)
2451 {
2452 pass = passEdge;
2454 batch.tiles[pass.idx] = 608 + waterAnimeIndex % 4;
2455 batch.matColors[pass.idx] = 104025f;
2456 if (((this.cell.shore / num32) & 1) != 0)
2457 {
2458 if (isShoreSand)
2459 {
2460 param.matColor = GetColorInt(ref this.cell.Back.matFloor.matColor, this.cell.Back.sourceFloor.colorMod);
2461 batch.matrices[pass.idx].m03 = param.x + waterEdgeFixShoreSand.x;
2462 batch.matrices[pass.idx].m13 = param.y + waterEdgeFixShoreSand.y;
2463 batch.matrices[pass.idx].m23 = param.z + waterEdgeFixShoreSand.z;
2466 }
2467 else
2468 {
2469 batch.matrices[pass.idx].m03 = param.x;
2470 batch.matrices[pass.idx].m13 = param.y;
2471 batch.matrices[pass.idx].m23 = param.z + waterEdgeFixShore.z;
2472 }
2473 }
2474 else
2475 {
2476 batch.matrices[pass.idx].m03 = param.x;
2477 batch.matrices[pass.idx].m13 = param.y;
2478 batch.matrices[pass.idx].m23 = param.z + waterEdgeFix.z;
2479 batch.tiles[pass.idx] += 12f;
2480 }
2482 pass.idx++;
2483 if (pass.idx == pass.batchSize)
2484 {
2485 pass.NextBatch();
2486 }
2487 }
2488 if (!this.cell.Left.sourceFloor.tileType.IsWater && !this.cell.Left.isDeck)
2489 {
2490 pass = passEdge;
2492 batch.tiles[pass.idx] = 612 + waterAnimeIndex % 4;
2493 batch.matColors[pass.idx] = 104025f;
2494 if (((this.cell.shore / num32) & 8) != 0)
2495 {
2496 if (isShoreSand)
2497 {
2498 param.matColor = GetColorInt(ref this.cell.Left.matFloor.matColor, this.cell.Left.sourceFloor.colorMod);
2499 batch.matrices[pass.idx].m03 = param.x + waterEdgeFixShoreSand.x;
2500 batch.matrices[pass.idx].m13 = param.y + waterEdgeFixShoreSand.y;
2501 batch.matrices[pass.idx].m23 = param.z + waterEdgeFixShoreSand.z;
2504 }
2505 else
2506 {
2507 batch.matrices[pass.idx].m03 = param.x;
2508 batch.matrices[pass.idx].m13 = param.y;
2509 batch.matrices[pass.idx].m23 = param.z + waterEdgeFixShore.z;
2510 }
2511 }
2512 else
2513 {
2514 batch.matrices[pass.idx].m03 = param.x;
2515 batch.matrices[pass.idx].m13 = param.y;
2516 batch.matrices[pass.idx].m23 = param.z + waterEdgeFix.z;
2517 batch.tiles[pass.idx] += 12f;
2518 }
2520 pass.idx++;
2521 if (pass.idx == pass.batchSize)
2522 {
2523 pass.NextBatch();
2524 }
2525 }
2526 }
2527 if (flag)
2528 {
2529 param.y += 0.01f * floatY;
2530 }
2531 }
2532 if (flag)
2533 {
2534 param.z -= 1f;
2535 }
2536 }
2537 if (this.cell.skipRender)
2538 {
2539 if (this.cell.pcSync)
2540 {
2541 param.tile = 0f;
2543 }
2544 return;
2545 }
2546 if (hasBridge)
2547 {
2548 param.y = (float)(cz - cx) * screen.tileAlign.y + (float)(int)this.cell.bridgeHeight * _heightMod.y;
2549 param.z = 1000f + param.x * screen.tileWeight.x + param.y * screen.tileWeight.z + (float)(int)this.cell.bridgeHeight * _heightMod.z;
2550 if (flag)
2551 {
2552 param.y += 0.01f * floatY;
2553 }
2554 param.color = floorLight;
2555 param.mat = matBridge;
2556 floorMatColor = ((sourceBridge.colorMod == 0) ? 104025 : GetColorInt(ref matBridge.matColor, sourceBridge.colorMod));
2557 param.dir = this.cell.floorDir;
2558 param.tile = sourceBridge._tiles[this.cell.floorDir % sourceBridge._tiles.Length];
2559 param.matColor = floorMatColor;
2560 sourceBridge.renderData.Draw(param);
2561 if (this.cell.autotileBridge != 0 && sourceBridge.autotile != 0)
2562 {
2565 batch.matrices[pass.idx].m03 = param.x;
2566 batch.matrices[pass.idx].m13 = param.y;
2567 batch.matrices[pass.idx].m23 = param.z + ((this.cell._block != 0) ? 0.8f : 0f);
2568 batch.tiles[pass.idx] = (26 + sourceBridge.autotile / 2) * 32 + sourceBridge.autotile % 2 * 16 + this.cell.autotileBridge;
2569 batch.colors[pass.idx] = param.color + (float)((int)(sourceBridge.autotileBrightness * 100f) * 262144);
2571 pass.idx++;
2572 if (pass.idx == pass.batchSize)
2573 {
2574 pass.NextBatch();
2575 }
2576 }
2577 if (this.cell.shadow != 0)
2578 {
2580 {
2581 param.tile = 448 + this.cell.shadow + 8 + (this.cell.HasFence ? 4 : 0);
2582 param.z -= 0.01f;
2583 sourceBridge.renderData.Draw(param);
2584 }
2585 else
2586 {
2587 pass = passEdge;
2589 batch.matrices[pass.idx].m03 = param.x + ambientShadowFix[this.cell.shadow].x;
2590 batch.matrices[pass.idx].m13 = param.y + ambientShadowFix[this.cell.shadow].y;
2591 batch.matrices[pass.idx].m23 = param.z + ambientShadowFix[this.cell.shadow].z;
2592 batch.tiles[pass.idx] = 448 + this.cell.shadow;
2594 batch.matColors[pass.idx] = 104025f;
2595 pass.idx++;
2596 if (pass.idx == pass.batchSize)
2597 {
2598 pass.NextBatch();
2599 }
2600 }
2601 }
2602 if (this.cell.isBridgeEdge && this.cell.bridgeHeight - this.cell.height >= 3 && !this.cell.hidePillar && !noSlopMode)
2603 {
2604 orgY = param.y;
2605 orgZ = param.z;
2606 param.y += bridgeFix.y;
2607 param.z += bridgeFix.z;
2608 param.dir = 0;
2609 SourceBlock.Row row4 = sourceBridge._bridgeBlock;
2610 float num35 = (float)(this.cell.bridgeHeight - this.cell.height) * _heightMod.y;
2611 if (this.cell.sourceFloor.tileType == TileType.Sky)
2612 {
2613 num35 += (float)EMono._map.config.skyBlockHeight;
2614 }
2615 int num36 = (int)(num35 / heightBlockSize) + 2;
2616 if (this.cell.bridgePillar != 0)
2617 {
2618 row4 = EMono.sources.blocks[this.cell.bridgePillar];
2619 param.tile = row4._tiles[0] + ((num36 == 2) ? 32 : 0);
2620 param.mat = ((sourceBridge.DefaultMaterial == row4.DefaultMaterial) ? sourceBridge.DefaultMaterial : row4.DefaultMaterial);
2621 param.matColor = ((row4.colorMod == 0) ? 104025 : GetColorInt(ref param.mat.matColor, row4.colorMod));
2622 }
2623 else
2624 {
2625 param.mat = matBlock;
2626 param.tile = row4._tiles[0] + 32;
2627 param.matColor = ((row4.colorMod == 0) ? 104025 : GetColorInt(ref matBridge.matColor, row4.colorMod));
2628 }
2629 param.y += ugFixBridgeTop.y;
2630 param.z += ugFixBridgeTop.z;
2631 for (int num37 = 0; num37 < num36; num37++)
2632 {
2633 if (num37 == num36 - 1)
2634 {
2635 param.y = (float)(cz - cx) * screen.tileAlign.y + (float)height * _heightMod.y + ugFixBridgeBottom.y;
2636 param.z = 1000f + param.x * screen.tileWeight.x + param.y * screen.tileWeight.z + (float)height * _heightMod.z + ugFixBridgeBottom.z;
2637 }
2638 else
2639 {
2640 param.y += ugFixBridge.y;
2641 param.z += ugFixBridge.z;
2642 }
2643 row4.renderData.Draw(param);
2644 }
2645 param.y = orgY;
2646 param.z = orgZ;
2647 }
2648 }
2649 if (this.cell._deco != 0)
2650 {
2651 param.mat = matFloor;
2652 param.matColor = ((sourceDeco.colorMod == 0) ? 104025 : GetColorInt(ref matDeco.matColor, sourceDeco.colorMod));
2653 param.snow = snowed;
2654 if (sourceDeco.autotile != 0)
2655 {
2656 if (this.cell.autotileDeco != 0)
2657 {
2658 param.tile = (26 + sourceDeco.autotile / 2) * 32 + sourceDeco.autotile % 2 * 16 + this.cell.autotileDeco;
2659 sourceDeco.renderData.Draw(param);
2660 param.z = orgZ;
2661 }
2662 }
2663 else
2664 {
2665 param.tile = sourceDeco._tiles[floorDir % sourceDeco._tiles.Length];
2666 sourceDeco.renderData.Draw(param);
2667 }
2668 }
2669 if (!buildMode && this.cell.highlight != 0)
2670 {
2671 passGuideFloor.Add(this.cell.GetPoint(), (int)this.cell.highlight);
2672 }
2673 param.color = blockLight;
2674 if (isSnowCovered && (sourceBlock.id != 0 || this.cell.hasDoor) && (snowed || this.cell.isClearSnow) && (this.cell.Front.HasRoof || this.cell.Right.HasRoof))
2675 {
2676 snowed = false;
2677 }
2678 int num38 = 0;
2679 if (sourceBlock.id != 0)
2680 {
2681 this.tileType = sourceBlock.tileType;
2682 roomHeight = 0f;
2683 int blockDir = this.cell.blockDir;
2684 bool num39 = this.tileType.blockRenderMode == BlockRenderMode.Floor;
2685 bool flag9 = false;
2686 if (!num39)
2687 {
2688 switch (wallClipMode)
2689 {
2690 case WallClipMode.ByRoom:
2691 if (!this.tileType.RepeatBlock)
2692 {
2693 break;
2694 }
2695 if (currentRoom == null || showFullWall)
2696 {
2697 this.room = this.room ?? this.cell.Front.room ?? this.cell.Right.room ?? this.cell.FrontRight.room;
2699 }
2700 else if (this.room != this.cell.Front.room && (this.cell.Front.room == currentRoom || (this.room?.lot != currentLot && this.cell.Front.room?.lot == currentLot)))
2701 {
2702 this.room = this.cell.Front.room;
2703 _lowblock = !this.cell.Front.lotWall && !this.cell.Front.fullWall;
2704 }
2705 else if (this.room != this.cell.Right.room && (this.cell.Right.room == currentRoom || (this.room?.lot != currentLot && this.cell.Right.room?.lot == currentLot)))
2706 {
2707 this.room = this.cell.Right.room;
2708 _lowblock = !this.cell.Right.lotWall && !this.cell.Right.fullWall;
2709 }
2710 else if (this.tileType.IsFullBlock && this.room != this.cell.FrontRight.room && (this.cell.FrontRight.room == currentRoom || (this.room?.lot != currentLot && this.cell.FrontRight.room?.lot == currentLot)))
2711 {
2712 this.room = this.cell.FrontRight.room;
2713 _lowblock = !this.cell.FrontRight.lotWall && !this.cell.FrontRight.fullWall;
2714 }
2715 else
2716 {
2717 this.room = this.room ?? this.cell.Front.room ?? this.cell.Right.room ?? this.cell.FrontRight.room;
2718 _lowblock = true;
2719 if (!this.tileType.IsFullBlock)
2720 {
2721 if (this.cell.lotWall)
2722 {
2723 _lowblock = false;
2724 }
2725 else if (this.room == currentRoom)
2726 {
2727 _lowblock = !this.cell.fullWall;
2728 }
2729 }
2730 }
2731 flag9 = (this.room != null && this.room.data.atrium) || (this.cell.room != null && this.cell.room.data.atrium);
2732 if (flag9)
2733 {
2734 _lowblock = false;
2735 }
2736 if (this.room == null && alwaysLowblock)
2737 {
2738 _lowblock = true;
2739 roomHeight = 0f;
2740 }
2741 if (this.room != null)
2742 {
2743 maxHeight = (float)(cz - cx) * screen.tileAlign.y + (float)this.room.lot.mh * _heightMod.y;
2744 if (showRoof)
2745 {
2746 roomHeight = this.room.lot.realHeight;
2747 break;
2748 }
2749 if ((noRoofMode && currentRoom == null) || (_lowblock && !this.tileType.ForceRpeatBlock))
2750 {
2751 roomHeight = 0f;
2752 break;
2753 }
2754 int num40 = ((this.room.data.maxHeight == 0) ? 2 : this.room.data.maxHeight);
2755 roomHeight = EMono.setting.render.roomHeightMod * (float)((this.room.lot.height < num40) ? this.room.lot.height : num40) + 0.01f * (float)this.room.lot.heightFix;
2756 }
2757 break;
2758 case WallClipMode.ByLot:
2759 if (defaultBlockHeight > 0f || isIndoor)
2760 {
2761 _lowblock = cx != 0 && cz != Size - 1 && ((!this.cell.Back.HasBlock && !this.cell.Back.isWallEdge) || (!this.cell.Left.HasBlock && !this.cell.Left.isWallEdge) || !this.cell.Back.Left.HasBlock);
2762 if (!_lowblock)
2763 {
2765 maxHeight = (float)(cz - cx) * screen.tileAlign.y + (float)(int)this.cell.TopHeight * _heightMod.y;
2766 }
2767 break;
2768 }
2769 if (showFullWall)
2770 {
2771 _lowblock = this.room != null;
2772 if (_lowblock)
2773 {
2774 if (this.cell.Back.IsRoomEdge && this.cell.Right.IsRoomEdge && this.cell.Back.room == null && this.cell.Right.room == null && this.cell.Right.Front.room?.lot == this.room?.lot)
2775 {
2776 _lowblock = false;
2777 }
2778 }
2779 else if (this.cell.Back.room != null && this.cell.Back.room.lot == (this.cell.Front.room ?? this.cell.Right.room)?.lot)
2780 {
2781 _lowblock = true;
2782 }
2783 }
2784 else
2785 {
2787 }
2788 if (this.tileType.RepeatBlock)
2789 {
2790 this.room = this.room ?? this.cell.Front.room ?? this.cell.Right.room ?? this.cell.FrontRight.room;
2791 if (this.room != null && (!noRoofMode || currentRoom != null) && (!showFullWall || currentRoom == null || this.room.lot == currentRoom.lot))
2792 {
2793 roomHeight = ((_lowblock && !this.tileType.ForceRpeatBlock) ? 0f : this.room.lot.realHeight);
2794 maxHeight = (float)(cz - cx) * screen.tileAlign.y + (float)this.room.lot.mh * _heightMod.y;
2795 }
2796 }
2797 break;
2798 }
2799 }
2800 if (!_lowblock && (double)roomHeight > 1.2 && this.tileType.RepeatBlock)
2801 {
2802 num38 = 1;
2803 }
2804 else if (lowBlock)
2805 {
2806 num38 = 2;
2807 }
2808 param.mat = matBlock;
2809 param.dir = this.cell.blockDir;
2810 param.snow = snowed;
2811 switch (this.tileType.blockRenderMode)
2812 {
2813 case BlockRenderMode.FullBlock:
2814 {
2815 bool invisible = sourceBlock.tileType.Invisible;
2816 if (invisible && (!buildMode || ActionMode.Cinema.IsActive))
2817 {
2818 break;
2819 }
2820 if (this.cell.isSurrounded)
2821 {
2822 switch (innerMode)
2823 {
2824 case InnerMode.InnerBlock:
2825 case InnerMode.BuildMode:
2827 param.color = (int)(50f * blockLight) * 262144;
2828 param.matColor = 104025f;
2829 param.tile = (buildMode ? 1 : 2) + ((_lowblock || defaultBlockHeight > 0f) ? 3000000 : 0);
2831 return;
2832 case InnerMode.None:
2833 case InnerMode.Height:
2834 param.color = blockLight;
2835 break;
2836 }
2837 }
2838 if (snowed)
2839 {
2840 param.color = floorLight;
2841 }
2842 param.color -= (int)(_shadowStrength * 0.8f * 50f) * 262144;
2843 if (currentRoom != null && !showFullWall)
2844 {
2845 _lowblock = true;
2846 roomHeight = 0f;
2847 if (this.cell.room != currentRoom && (this.cell.Front.room == currentRoom || this.cell.Right.room == currentRoom || this.cell.FrontRight.room == currentRoom) && (this.cell.Back.room != currentRoom || this.cell.Right.room != currentRoom) && (this.cell.Front.room != currentRoom || this.cell.Left.room != currentRoom))
2848 {
2849 _lowblock = false;
2850 }
2851 if (!_lowblock)
2852 {
2853 int num42 = ((currentRoom.data.maxHeight == 0) ? 2 : currentRoom.data.maxHeight);
2854 roomHeight = EMono.setting.render.roomHeightMod * (float)((currentRoom.lot.height < num42) ? currentRoom.lot.height : num42) + 0.01f * (float)currentRoom.lot.heightFix;
2855 }
2856 }
2857 if (flag9)
2858 {
2859 _lowblock = (!this.cell.Front.HasFullBlock || !this.cell.Right.HasFullBlock) && (!this.cell.Front.HasFullBlock || !this.cell.Left.HasFullBlock) && (!this.cell.Back.HasFullBlock || !this.cell.Right.HasFullBlock) && (!this.cell.Back.HasFullBlock || !this.cell.Left.HasFullBlock);
2860 if (_lowblock)
2861 {
2862 roomHeight = 0f;
2863 }
2864 }
2865 if (invisible)
2866 {
2867 roomHeight = 0f;
2868 _lowblock = false;
2869 }
2870 if (this.cell.Things.Count > 0)
2871 {
2872 _lowblock = false;
2873 }
2874 param.tile = sourceBlock._tiles[this.cell.blockDir % sourceBlock._tiles.Length] + (_lowblock ? 3000000 : 0);
2875 param.matColor = ((sourceBlock.colorMod == 0) ? 104025 : GetColorInt(ref matBlock.matColor, sourceBlock.colorMod));
2876 if (roomHeight == 0f)
2877 {
2878 if (!this.cell.hasDoor)
2879 {
2880 sourceBlock.renderData.Draw(param);
2881 }
2882 }
2883 else
2884 {
2885 sourceBlock.renderData.DrawRepeatTo(param, maxHeight, roomHeight, ref renderSetting.peakFixBlock, this.cell.traitDoor?.height ?? 0, this.cell.effect?.FireAmount ?? 0, isBlock: true);
2886 }
2887 Room room2 = this.cell.Front.room ?? this.cell.room;
2888 if (room2 == null && this.cell.Right.room != null)
2889 {
2890 room2 = this.cell.Right.room;
2891 }
2892 if (!invisible && room2 != null)
2893 {
2894 if (room2.lot.idDeco != 0 && !this.cell.hasDoor)
2895 {
2896 param.tile = EMono.sources.blocks[0].ConvertTile(1000 + room2.lot.idDeco);
2897 param.matColor = room2.lot.colDeco;
2898 float y = param.y;
2899 param.y += (float)room2.lot.decoFix * 0.01f;
2901 param.y = y;
2902 }
2903 if (room2.lot.idDeco2 != 0 && roomHeight != 0f && (float)room2.lot.decoFix2 * 0.01f + heightLimitDeco < roomHeight + maxHeight - param.y)
2904 {
2905 param.tile = EMono.sources.blocks[0].ConvertTile(1000 + room2.lot.idDeco2);
2906 param.matColor = room2.lot.colDeco2;
2907 float y2 = param.y;
2908 float num43 = param.z;
2909 param.y += (float)room2.lot.decoFix2 * 0.01f;
2910 param.z += (float)room2.lot.decoFix2 * 0.01f * heightModDeco;
2912 param.y = y2;
2913 param.z = num43;
2914 }
2915 }
2916 room2 = this.cell.Right.room ?? this.cell.room;
2917 if (room2 == null && this.cell.Front.room != null)
2918 {
2919 room2 = this.cell.Front.room;
2920 }
2921 if (!invisible && room2 != null)
2922 {
2923 if (room2.lot.idDeco != 0 && !this.cell.hasDoor)
2924 {
2925 param.tile = EMono.sources.blocks[0].ConvertTile(1000 + room2.lot.idDeco) * -1;
2926 param.matColor = room2.lot.colDeco;
2927 float y3 = param.y;
2928 param.y += (float)room2.lot.decoFix * 0.01f;
2930 param.y = y3;
2931 }
2932 if (room2.lot.idDeco2 != 0 && roomHeight != 0f && (float)room2.lot.decoFix2 * 0.01f + heightLimitDeco < roomHeight + maxHeight - param.y)
2933 {
2934 param.tile = EMono.sources.blocks[0].ConvertTile(1000 + room2.lot.idDeco2) * -1;
2935 param.matColor = room2.lot.colDeco2;
2936 float y4 = param.y;
2937 float num44 = param.z;
2938 param.y += (float)room2.lot.decoFix2 * 0.01f;
2939 param.z += (float)room2.lot.decoFix2 * 0.01f * heightModDeco;
2941 param.y = y4;
2942 param.z = num44;
2943 }
2944 }
2945 break;
2946 }
2947 case BlockRenderMode.WallOrFence:
2948 {
2950 {
2951 showFullWall = true;
2952 _lowblock = false;
2953 }
2954 orgY = param.y;
2955 orgZ = param.z;
2956 param.color = (this.tileType.IsFence ? (floorLight - (float)((int)(_shadowStrength * 0.8f * 50f) * 262144)) : blockLight);
2957 bool flag10 = blockDir == 1 || _lowblock || flag9;
2958 bool flag11 = blockDir == 0 || _lowblock || flag9;
2959 if (!showFullWall && currentRoom != null)
2960 {
2961 if (!flag10)
2962 {
2963 if (currentRoom == this.cell.room || (this.cell.lotWall && this.cell.room?.lot == currentLot && this.cell.Front.room != currentRoom))
2964 {
2965 if (!this.cell.IsRoomEdge || (this.cell.Front.room != this.cell.room && this.cell.FrontRight.room != this.cell.room))
2966 {
2967 flag10 = true;
2968 }
2969 }
2970 else if ((!this.cell.Front.lotWall || this.cell.Front.room?.lot != currentLot) && this.cell.Front.room != currentRoom)
2971 {
2972 flag10 = true;
2973 }
2974 }
2975 if (!flag11)
2976 {
2977 if (currentRoom == this.cell.room || (this.cell.lotWall && this.cell.room?.lot == currentLot && this.cell.Right.room != currentRoom))
2978 {
2979 if (!this.cell.IsRoomEdge || (this.cell.Right.room != this.cell.room && this.cell.FrontRight.room != this.cell.room))
2980 {
2981 flag11 = true;
2982 }
2983 }
2984 else if ((!this.cell.Right.lotWall || this.cell.Right.room?.lot != currentLot) && this.cell.Right.room != currentRoom)
2985 {
2986 flag11 = true;
2987 }
2988 }
2989 }
2990 if (blockDir == 0 || blockDir == 2)
2991 {
2992 param.dir = 0;
2993 Room room3 = this.cell.Front.room ?? this.cell.room;
2994 if (room3 != null && this.tileType.IsWall)
2995 {
2996 if (room3.lot.idDeco != 0 && !this.cell.hasDoor)
2997 {
2998 param.tile = EMono.sources.blocks[0].ConvertTile(1000 + room3.lot.idDeco);
2999 param.matColor = room3.lot.colDeco;
3000 param.y += (float)room3.lot.decoFix * 0.01f;
3002 param.y = orgY;
3003 }
3004 if (room3.lot.idDeco2 != 0 && roomHeight != 0f && !flag10 && (float)room3.lot.decoFix2 * 0.01f + heightLimitDeco < roomHeight + maxHeight - param.y)
3005 {
3006 param.tile = EMono.sources.blocks[0].ConvertTile(1000 + room3.lot.idDeco2);
3007 param.matColor = room3.lot.colDeco2;
3008 param.y += (float)room3.lot.decoFix2 * 0.01f;
3009 param.z += (float)room3.lot.decoFix2 * 0.01f * heightModDeco;
3011 param.y = orgY;
3012 param.z = orgZ;
3013 }
3014 }
3015 Cell left = this.cell.Left;
3016 if (blockDir == 2 && left.sourceBlock.tileType.IsWallOrFence && !this.cell.crossWall)
3017 {
3018 _sourceBlock = left.sourceBlock;
3019 param.mat = left.matBlock;
3020 }
3021 else
3022 {
3024 param.mat = matBlock;
3025 }
3026 this.tileType = _sourceBlock.tileType;
3027 param.tile = (tile = _sourceBlock._tiles[0] + ((flag10 && this.tileType.UseLowBlock) ? 32 : 0));
3028 if (_sourceBlock.useAltColor)
3029 {
3030 param.matColor = ((_sourceBlock.colorMod == 0) ? 104025 : GetColorInt(ref param.mat.altColor, _sourceBlock.colorMod));
3031 }
3032 else
3033 {
3034 param.matColor = ((_sourceBlock.colorMod == 0) ? 104025 : GetColorInt(ref param.mat.matColor, _sourceBlock.colorMod));
3035 }
3036 if (roomHeight == 0f || flag10 || !this.tileType.RepeatBlock)
3037 {
3038 if (!this.cell.hasDoor)
3039 {
3040 _sourceBlock.renderData.Draw(param);
3041 }
3042 }
3043 else
3044 {
3045 _sourceBlock.renderData.DrawRepeatTo(param, maxHeight, roomHeight, ref renderSetting.peakFix, this.cell.traitDoor?.height ?? 0, this.cell.effect?.FireAmount ?? 0);
3046 }
3047 param.z += cornerWallFix2.z;
3048 if ((blockDir == 2 || (this.cell.Front.HasWallOrFence && this.cell.Front.blockDir != 0)) != this.cell.isToggleWallPillar)
3049 {
3050 if (this.cell.Back.IsSnowTile && this.cell.Right.IsSnowTile)
3051 {
3052 param.snow = true;
3053 }
3054 param.tile = _sourceBlock._tiles[0] + ((flag10 && flag11 && this.tileType.UseLowBlock && !flag9) ? 32 : 0) + (this.tileType.IsFence ? 32 : 64);
3055 if (roomHeight == 0f || !this.tileType.RepeatBlock || (flag10 && flag11 && !flag9))
3056 {
3057 _sourceBlock.renderData.Draw(param);
3058 }
3059 else
3060 {
3061 _sourceBlock.renderData.DrawRepeatTo(param, maxHeight, roomHeight, ref renderSetting.peakFix);
3062 }
3063 }
3064 if (!flag10 && !showRoof && this.cell.Left.HasWallOrFence && this.cell.Left.blockDir != 0 && !this.cell.Left.isToggleWallPillar)
3065 {
3066 orgX = param.x;
3067 param.tile = _sourceBlock._tiles[0] + ((flag10 && this.tileType.UseLowBlock && !flag9) ? 32 : 0) + (this.tileType.IsFence ? 32 : 64);
3068 param.x += cornerWallFix3.x;
3069 param.y += cornerWallFix3.y;
3070 param.z += cornerWallFix3.z;
3071 if (!flag9 && (roomHeight == 0f || flag10))
3072 {
3073 _sourceBlock.renderData.Draw(param);
3074 }
3075 else
3076 {
3077 _sourceBlock.renderData.DrawRepeatTo(param, maxHeight, roomHeight + cornerWallFix.y, ref renderSetting.peakFix);
3078 }
3079 param.x = orgX;
3080 }
3081 else if (this.cell.FrontLeft.HasWallOrFence && this.cell.FrontLeft.blockDir != 0 && (!flag10 || !this.cell.Left.HasWall) && !this.cell.isToggleWallPillar && !this.cell.Left.isToggleWallPillar)
3082 {
3083 orgX = param.x;
3084 param.tile = _sourceBlock._tiles[0] + ((flag10 && this.tileType.UseLowBlock && !flag9) ? 32 : 0) + (this.tileType.IsFence ? 32 : 64);
3085 param.x += cornerWallFix.x;
3086 param.y += cornerWallFix.y;
3087 param.z += cornerWallFix.z;
3088 if (!flag9 && (roomHeight == 0f || flag10))
3089 {
3090 _sourceBlock.renderData.Draw(param);
3091 }
3092 else
3093 {
3094 _sourceBlock.renderData.DrawRepeatTo(param, maxHeight, roomHeight + cornerWallFix.y, ref renderSetting.peakFix);
3095 }
3096 param.x = orgX;
3097 }
3098 }
3099 if (blockDir == 1 || blockDir == 2)
3100 {
3101 param.y = orgY;
3102 param.z = orgZ;
3103 param.dir = 1;
3104 Room room4 = this.cell.Right.room ?? this.cell.room;
3105 if (room4 != null && this.tileType.IsWall)
3106 {
3107 if (room4.lot.idDeco != 0 && !this.cell.hasDoor)
3108 {
3109 param.tile = -EMono.sources.blocks[0].ConvertTile(1000 + room4.lot.idDeco);
3110 param.matColor = room4.lot.colDeco;
3111 param.y += (float)room4.lot.decoFix * 0.01f;
3113 param.y = orgY;
3114 }
3115 if (room4.lot.idDeco2 != 0 && roomHeight != 0f && !flag11 && (float)room4.lot.decoFix2 * 0.01f + heightLimitDeco < roomHeight + maxHeight - param.y)
3116 {
3117 param.tile = -EMono.sources.blocks[0].ConvertTile(1000 + room4.lot.idDeco2);
3118 param.matColor = room4.lot.colDeco2;
3119 param.y += (float)room4.lot.decoFix2 * 0.01f;
3120 param.z += (float)room4.lot.decoFix2 * 0.01f * heightModDeco;
3122 param.y = orgY;
3123 param.z = orgZ;
3124 }
3125 }
3126 if (blockDir == 2 && this.cell.room == null && this.cell.Right.room != null)
3127 {
3128 Room room5 = this.cell.Right.room;
3129 maxHeight = (float)(cz - cx) * screen.tileAlign.y + (float)room5.lot.mh * _heightMod.y;
3130 if (showRoof)
3131 {
3132 roomHeight = room5.lot.realHeight;
3133 }
3134 else if ((noRoofMode && currentRoom == null) || (_lowblock && !this.tileType.ForceRpeatBlock))
3135 {
3136 roomHeight = 0f;
3137 }
3138 else
3139 {
3140 int num45 = ((room5.data.maxHeight == 0) ? 2 : room5.data.maxHeight);
3141 roomHeight = EMono.setting.render.roomHeightMod * (float)((room5.lot.height < num45) ? room5.lot.height : num45) + 0.01f * (float)room5.lot.heightFix;
3142 }
3143 }
3144 Cell back2 = this.cell.Back;
3145 if (blockDir == 2 && back2.sourceBlock.tileType.IsWallOrFence && !this.cell.crossWall)
3146 {
3147 _sourceBlock = back2.sourceBlock;
3148 param.mat = back2.matBlock;
3149 }
3150 else
3151 {
3153 param.mat = matBlock;
3154 }
3155 this.tileType = _sourceBlock.tileType;
3156 param.tile = (tile = -_sourceBlock._tiles[0] + ((flag11 && this.tileType.UseLowBlock) ? (-32) : 0));
3157 if (_sourceBlock.useAltColor)
3158 {
3159 param.matColor = ((_sourceBlock.colorMod == 0) ? 104025 : GetColorInt(ref param.mat.altColor, _sourceBlock.colorMod));
3160 }
3161 else
3162 {
3163 param.matColor = ((_sourceBlock.colorMod == 0) ? 104025 : GetColorInt(ref param.mat.matColor, _sourceBlock.colorMod));
3164 }
3165 param.color += _rightWallShade;
3166 if (roomHeight == 0f || flag11 || !this.tileType.RepeatBlock)
3167 {
3168 if (!this.cell.hasDoor)
3169 {
3170 _sourceBlock.renderData.Draw(param);
3171 }
3172 }
3173 else
3174 {
3175 _sourceBlock.renderData.DrawRepeatTo(param, maxHeight, roomHeight, ref renderSetting.peakFix, this.cell.traitDoor?.height ?? 0, this.cell.effect?.FireAmount ?? 0);
3176 }
3177 if ((this.cell.Right.HasWallOrFence && this.cell.Right.blockDir != 1) != this.cell.isToggleWallPillar && (blockDir != 2 || !this.cell.isToggleWallPillar))
3178 {
3179 if (this.cell.Left.IsSnowTile && this.cell.Front.IsSnowTile)
3180 {
3181 param.snow = true;
3182 }
3183 orgX = param.x;
3184 param.tile = _sourceBlock._tiles[0] + ((flag11 && this.tileType.UseLowBlock && !flag9) ? 32 : 0) + (this.tileType.IsFence ? 32 : 64);
3185 if (!flag9 && (roomHeight == 0f || !this.tileType.RepeatBlock || flag11))
3186 {
3187 _sourceBlock.renderData.Draw(param);
3188 }
3189 else
3190 {
3191 _sourceBlock.renderData.DrawRepeatTo(param, maxHeight, roomHeight, ref renderSetting.peakFix);
3192 }
3193 param.x = orgX;
3194 }
3195 }
3196 param.y = orgY;
3197 param.z = orgZ;
3198 break;
3199 }
3200 case BlockRenderMode.HalfBlock:
3201 param.color = floorLight;
3202 _sourceBlock = ((sourceBlock.id == 5) ? EMono.sources.blocks[matBlock.defBlock] : sourceBlock);
3203 param.tile = _sourceBlock._tiles[0];
3204 param.matColor = ((_sourceBlock.colorMod == 0) ? 104025 : GetColorInt(ref matBlock.matColor, _sourceBlock.colorMod));
3205 param.tile2 = _sourceBlock.sourceAutoFloor._tiles[0];
3206 param.halfBlockColor = ((_sourceBlock.sourceAutoFloor.colorMod == 0) ? 104025 : GetColorInt(ref matBlock.matColor, _sourceBlock.sourceAutoFloor.colorMod));
3207 sourceBlock.renderData.Draw(param);
3208 break;
3209 case BlockRenderMode.Pillar:
3210 {
3211 RenderData renderData2 = sourceBlock.renderData;
3212 param.tile = sourceBlock._tiles[this.cell.blockDir % sourceBlock._tiles.Length];
3213 param.matColor = ((sourceBlock.colorMod == 0) ? 104025 : GetColorInt(ref matBlock.matColor, sourceBlock.colorMod));
3214 int num41 = this.cell.objDir + ((this.cell.objDir >= 7) ? this.cell.objDir : 0) + 1;
3215 if (num41 == 0)
3216 {
3217 renderData2.Draw(param);
3218 }
3219 else
3220 {
3221 renderData2.DrawRepeat(param, num41, sourceBlock.tileType.RepeatSize);
3222 }
3223 param.tile = renderData2.idShadow;
3224 SourcePref shadowPref2 = renderData2.shadowPref;
3225 int shadow4 = shadowPref2.shadow;
3226 passShadow.AddShadow(param.x + renderData2.offsetShadow.x, param.y + renderData2.offsetShadow.y, param.z + renderData2.offsetShadow.z, ShadowData.Instance.items[shadow4], shadowPref2, 0, param.snow);
3227 break;
3228 }
3229 case BlockRenderMode.Floor:
3230 param.color = floorLight;
3231 param.tile = sourceBlock._tiles[this.cell.blockDir % sourceBlock._tiles.Length];
3232 param.matColor = ((sourceBlock.colorMod == 0) ? 104025 : GetColorInt(ref matBlock.matColor, sourceBlock.colorMod));
3233 sourceBlock.renderData.Draw(param);
3234 break;
3235 default:
3236 param.color = floorLight;
3237 param.tile = sourceBlock._tiles[this.cell.blockDir % sourceBlock._tiles.Length] + ((_lowblock && this.tileType.UseLowBlock) ? 3000000 : 0);
3238 param.matColor = ((sourceBlock.colorMod == 0) ? 104025 : GetColorInt(ref matBlock.matColor, sourceBlock.colorMod));
3239 if (roomHeight == 0f)
3240 {
3241 sourceBlock.renderData.Draw(param);
3242 }
3243 else
3244 {
3245 sourceBlock.renderData.DrawRepeatTo(param, maxHeight, roomHeight, ref renderSetting.peakFixBlock);
3246 }
3247 break;
3248 }
3249 }
3250 if (this.cell.pcSync && EMono.player.lightPower > 0f && !cinemaMode)
3251 {
3252 if (this.cell.room != null || !this.cell.IsRoomEdge || !showRoof)
3253 {
3254 goto IL_718a;
3255 }
3256 if (this.cell._block == 0 || !this.cell.sourceBlock.tileType.RepeatBlock)
3257 {
3258 Room obj = this.cell.FrontRight.room;
3259 if (obj == null || !obj.HasRoof)
3260 {
3261 goto IL_718a;
3262 }
3263 }
3264 }
3265 goto IL_71ea;
3266 IL_718a:
3267 if (!showRoof || !roof || this.cell.room == null || this.cell.Front.room == null || this.cell.Right.room == null)
3268 {
3269 param.tile = num38;
3271 }
3272 goto IL_71ea;
3273 void Draw(int tile)
3274 {
3275 pass = passEdge;
3278 batch.matrices[pass.idx].m03 = param.x + waterEdgeFixShoreSand.x;
3279 batch.matrices[pass.idx].m13 = param.y + waterEdgeFixShoreSand.y;
3280 batch.matrices[pass.idx].m23 = param.z + waterEdgeFixShoreSand.z;
3283 pass.idx++;
3284 if (pass.idx == pass.batchSize)
3285 {
3286 pass.NextBatch();
3287 }
3288 }
3289 }
3290
3291 public Vector3 GetThingPosition(Card tg, Point p)
3292 {
3293 Vector3 zero = Vector3.zero;
3294 float num = 0f;
3295 cell = p.cell;
3297 if (!tg.TileType.UseMountHeight)
3298 {
3300 {
3301 zero.z -= 1f;
3302 }
3303 else if (!tg.sourceCard.multisize)
3304 {
3305 float num2 = ((cell._bridge != 0) ? cell.sourceBridge.tileType.FloorHeight : sourceFloor.tileType.FloorHeight);
3306 zero.y += num2;
3307 zero.z -= num2 * heightMod.z;
3308 }
3309 if (cell.HasRamp)
3310 {
3311 Vector3 rampFix = cell.sourceBlock.tileType.GetRampFix(cell.blockDir);
3312 zero.x += rampFix.x;
3313 zero.y += rampFix.y;
3314 zero.z += rampFix.z;
3315 }
3316 }
3317 if (tg.sourceCard.multisize)
3318 {
3319 zero.z -= 1f;
3320 }
3321 SourcePref pref = tg.Pref;
3322 zero.x += pref.x * (float)((!tg.flipX) ? 1 : (-1));
3323 zero.z += pref.z;
3324 detail = cell.detail;
3325 if (tg.isChara)
3326 {
3327 return zero;
3328 }
3329 bool flag = false;
3331 {
3332 flag = true;
3333 }
3335 {
3336 if (tg.altitude != 0)
3337 {
3338 zero += altitudeFix * tg.altitude;
3339 }
3340 flag = true;
3341 }
3343 {
3344 return zero;
3345 }
3346 float num3 = 0f;
3347 if (detail != null && detail.things.Count > 0)
3348 {
3349 Card card = null;
3350 for (int i = 0; i < detail.things.Count; i++)
3351 {
3352 Thing thing = detail.things[i];
3353 SourcePref pref2 = thing.Pref;
3355 float num4 = (tileType.UseMountHeight ? 0f : ((pref2.height == 0f) ? 0.1f : pref2.height));
3356 if (!thing.IsInstalled || thing == ActionMode.Inspect.target)
3357 {
3358 continue;
3359 }
3360 if (thing.TileType.IsRamp)
3361 {
3362 Vector3 rampFix2 = thing.TileType.GetRampFix(thing.dir, pref2);
3363 zero.x += rampFix2.x;
3364 zero.y += rampFix2.y;
3365 zero.z += rampFix2.z;
3366 }
3367 if (!flag && tileType.CanStack)
3368 {
3369 if (thing.ignoreStackHeight)
3370 {
3371 zero.y -= num3;
3372 }
3373 zero.y += num4;
3374 zero.x += pref2.stackX * (float)((!thing.flipX) ? 1 : (-1));
3375 zero.z += pref2.z + thing.renderer.data.stackZ;
3376 if (!tileType.UseMountHeight && thing.altitude != 0)
3377 {
3378 zero += altitudeFix * thing.altitude;
3379 num4 += altitudeFix.y * (float)thing.altitude;
3380 }
3381 if (thing.trait.IgnoreLastStackHeight && (card == null || !card.trait.IgnoreLastStackHeight))
3382 {
3383 zero.y -= num3;
3384 }
3385 num3 = num4;
3386 zero.z += renderSetting.thingZ + num + (float)i * -0.01f + zSetting.mod1 * zero.y;
3387 if (!thing.TileType.IsRamp && thing.trait.IsChangeFloorHeight)
3388 {
3389 _ = thing.ignoreStackHeight;
3390 }
3391 if (thing.sourceCard.multisize)
3392 {
3393 num += zSetting.multiZ;
3394 }
3395 card = thing;
3396 }
3397 }
3398 }
3399 if (flag)
3400 {
3401 return zero;
3402 }
3403 if (tg.ignoreStackHeight)
3404 {
3405 zero.y -= num3;
3406 zero.z += (float)(detail?.things.Count ?? 0) * -0.01f;
3407 }
3408 if (tg.altitude != 0)
3409 {
3410 zero += altitudeFix * tg.altitude;
3411 }
3412 return zero;
3413 }
3414
3416 {
3417 float num = _baseBrightness + 0.25f;
3418 num = ((!cell.IsSnowTile) ? ((float)((int)(num * 50f) * 262144 + ((cell.lightR >= 64) ? 63 : cell.lightR) * 4096 + ((cell.lightG >= 64) ? 63 : cell.lightG) * 64 + ((cell.lightB >= 64) ? 63 : cell.lightB))) : ((float)((int)(num * 50f) * 262144 + (int)((float)((cell.lightR >= 50) ? 50 : cell.lightR) * snowColor) * 4096 + (int)((float)((cell.lightG >= 50) ? 50 : cell.lightG) * snowColor) * 64 + (int)((float)((cell.lightB >= 50) ? 50 : cell.lightB) * snowColor) + snowColorToken)));
3419 return (int)num;
3420 }
3421
3422 public int GetRoofLight(Lot lot)
3423 {
3424 float num = Mathf.Sqrt(lot.light) * roofLightMod;
3425 if (num > lightLimit * roofLightLimitMod)
3426 {
3428 }
3429 if (isSnowCovered)
3430 {
3431 num += roofLightSnow * (1f - nightRatio);
3432 }
3433 int num2 = (int)(num * 50f) * 262144;
3434 if (isSnowCovered)
3435 {
3436 num2 += snowColorToken;
3437 }
3438 return num2;
3439 }
3440
3441 public void DrawRoof(Lot lot)
3442 {
3443 RoofStyle roofStyle = roofStyles[lot.idRoofStyle];
3444 if (roofStyle.type == RoofStyle.Type.None)
3445 {
3446 return;
3447 }
3448 bool reverse = lot.reverse;
3449 int num;
3450 int num2;
3451 int num3;
3452 int num4;
3453 if (reverse)
3454 {
3455 num = lot.z - roofStyle.h;
3456 num2 = lot.x - roofStyle.w;
3457 num3 = lot.mz + 1 + roofStyle.h;
3458 num4 = lot.mx + 1 + roofStyle.w;
3459 if (num2 > 1 && num > 0 && map.cells[num2 - 1, num].HasFullBlock)
3460 {
3461 num2--;
3462 }
3463 if (num3 < Size && num4 < Size && map.cells[num4 - 1, num3].HasFullBlock)
3464 {
3465 num3++;
3466 }
3467 }
3468 else
3469 {
3470 num = lot.x - roofStyle.w;
3471 num2 = lot.z - roofStyle.h;
3472 num3 = lot.mx + 1 + roofStyle.w;
3473 num4 = lot.mz + 1 + roofStyle.h;
3474 if (num2 > 0 && num > 1 && map.cells[num - 1, num2].HasFullBlock)
3475 {
3476 num--;
3477 }
3478 if (num3 < Size && num4 < Size && map.cells[num3 - 1, num4].HasFullBlock)
3479 {
3480 num4++;
3481 }
3482 }
3483 int num5;
3484 if (roofStyle.wing)
3485 {
3486 num5 = ((lot.height > 1) ? 1 : 0);
3487 if (num5 != 0)
3488 {
3489 num2--;
3490 num4++;
3491 }
3492 }
3493 else
3494 {
3495 num5 = 0;
3496 }
3497 int num6 = num4 + (reverse ? roofStyle.w : roofStyle.h) * 2 - num2;
3498 int idRoofTile = lot.idRoofTile;
3499 int idBlock = lot.idBlock;
3500 int idRamp = lot.idRamp;
3501 bool flag = false;
3502 int num7 = num6 / 2 - roofStyle.flatW;
3503 int num8 = num6 / 2 + roofStyle.flatW + ((num6 % 2 != 0) ? 1 : 0);
3504 SourceBlock.Row row = (roofStyle.useDefBlock ? cell.sourceFloor._defBlock : EMono.sources.blocks[idBlock]);
3505 int num9 = 0;
3506 int num10 = ((num5 != 0) ? (-1) : 0);
3507 int num11 = 0;
3508 Vector3 vector = (lot.fullblock ? roofStyle.posFixBlock : roofStyle.posFix);
3509 switch (roofStyle.type)
3510 {
3511 case RoofStyle.Type.Default:
3512 flag = num6 % 2 == 1 && roofStyle.flatW == 0;
3513 break;
3514 case RoofStyle.Type.Flat:
3515 case RoofStyle.Type.FlatFloor:
3516 num7 = roofStyle.flatW;
3517 num8 = num6 - roofStyle.flatW;
3518 if (num7 == 0)
3519 {
3520 num11 = 1;
3521 }
3522 if (roofStyle.type != RoofStyle.Type.FlatFloor)
3523 {
3524 num--;
3525 num3++;
3526 num2--;
3527 num4++;
3528 }
3529 break;
3530 case RoofStyle.Type.Triangle:
3531 num7 = 999;
3532 num8 = 999;
3533 break;
3534 }
3535 for (cz = num2; cz < num4; cz++)
3536 {
3537 for (cx = num; cx < num3; cx++)
3538 {
3539 if (cx < 0 || cz < 0 || cx >= Size || cz >= Size)
3540 {
3541 continue;
3542 }
3543 int num12;
3544 int num13;
3545 if (reverse)
3546 {
3547 num12 = cz;
3548 num13 = cx;
3549 cell = map.cells[num12, num13];
3550 if (roofStyle.wing && cz == num4 - 1 && cell.Right.Right.room != null && cell.Right.Right.room.lot != lot)
3551 {
3552 continue;
3553 }
3554 }
3555 else
3556 {
3557 num12 = cx;
3558 num13 = cz;
3559 cell = map.cells[num12, num13];
3560 if (roofStyle.wing && cz == 0 && cell.Front.Front.room != null && cell.Front.Front.room.lot != lot)
3561 {
3562 continue;
3563 }
3564 }
3565 int num14 = num13 - num12;
3566 room = cell.room;
3567 if (room != null && room.lot != lot)
3568 {
3569 continue;
3570 }
3571 bool flag2 = false;
3572 if (roofStyle.type == RoofStyle.Type.Flat)
3573 {
3574 if (reverse)
3575 {
3576 if (!cell.HasFullBlock || cell.room != null)
3577 {
3578 num11 = ((cell.Left.room != null && cell.Left.room.lot == lot) ? ((cell.Right.room != null && cell.Right.room.lot == lot) ? 1 : ((cell.HasFullBlock && cell.Right.HasFullBlock && cell.Right.room != null) ? 1 : 2)) : (cell.Left.HasFullBlock ? 1 : 0));
3579 }
3580 else if (cell.Left.room?.lot == lot && cell.Right.room != null)
3581 {
3582 num11 = 1;
3583 flag2 = true;
3584 }
3585 else if (cell.Front.room?.lot == lot)
3586 {
3587 num11 = ((cell.FrontRight.room?.lot == lot) ? 1 : 2);
3588 flag2 = true;
3589 }
3590 else if (cell.Right.room?.lot == lot || cell.FrontRight.room?.lot == lot)
3591 {
3592 num11 = 0;
3593 flag2 = true;
3594 }
3595 }
3596 else if (!cell.HasFullBlock || cell.room != null)
3597 {
3598 num11 = ((cell.Front.room != null && cell.Front.room.lot == lot) ? ((cell.Back.room != null && cell.Back.room.lot == lot) ? 1 : (cell.Back.HasFullBlock ? 1 : 2)) : ((cell.HasFullBlock && cell.Front.HasFullBlock && cell.Front.room != null) ? 1 : 0));
3599 }
3600 else if (cell.Right.room?.lot == lot)
3601 {
3602 num11 = ((cell.FrontRight.room?.lot == lot) ? 1 : 0);
3603 flag2 = true;
3604 }
3605 else if (cell.Front.room?.lot == lot || cell.FrontRight.room?.lot == lot)
3606 {
3607 num11 = 2;
3608 flag2 = true;
3609 }
3610 num10 = 0;
3611 }
3612 bool flag3 = isSnowCovered && !cell.isClearSnow;
3613 if (room == null && !roofStyle.coverLot && !flag2 && !(cell.HasFullBlock && cell.IsRoomEdge && flag3))
3614 {
3615 continue;
3616 }
3617 index = cx + cz * Size;
3619 float num15 = (float)num14 * screen.tileAlign.y + (float)lot.mh * _heightMod.y + lot.realHeight + roofFix.y + vector.y;
3620 float num16 = 1000f + param.x * screen.tileWeight.x + (float)lot.mh * _heightMod.z + lot.realHeight * roofFix3.z + roofFix.z + vector.z;
3621 if (lot.height == 1 && lot.heightFix < 20)
3622 {
3623 num15 += roofStyle.lowRoofFix.y;
3624 num16 += roofStyle.lowRoofFix.z;
3625 }
3626 param.x = (float)(cx + cz) * screen.tileAlign.x + roofFix.x + (float)num10 * roofFix2.x + vector.x * (float)(reverse ? 1 : (-1));
3627 param.y = num15 + (float)num10 * roofFix2.y;
3628 param.z = num16 + param.y * screen.tileWeight.z + (float)num10 * roofFix2.z;
3629 param.color = GetRoofLight(lot);
3630 param.snow = idRoofTile == 0 && flag3;
3631 param.shadowFix = 0f;
3632 if (num11 == 1)
3633 {
3635 RenderRow renderRow;
3636 if (roofStyle.type == RoofStyle.Type.FlatFloor)
3637 {
3638 if (cell.HasFullBlock && cell.IsRoomEdge && !flag3)
3639 {
3640 continue;
3641 }
3642 renderRow = EMono.sources.floors[idBlock];
3643 renderRow.SetRenderParam(param, mat, 0);
3644 param.matColor = lot.colRoof;
3645 }
3646 else
3647 {
3648 renderRow = row;
3649 renderRow.SetRenderParam(param, mat, 0);
3650 param.matColor = lot.colBlock;
3651 }
3652 renderRow.renderData.Draw(param);
3653 if (idRoofTile != 0)
3654 {
3655 renderRow = EMono.sources.blocks[EMono.sources.objs[idRoofTile].idRoof];
3656 int num17 = (reverse ? 1 : 0) + ((!flag) ? 2 : 0);
3657 renderRow.SetRenderParam(param, MATERIAL.sourceGold, num17);
3658 param.matColor = lot.colRoof;
3659 if (roofStyle.type == RoofStyle.Type.FlatFloor)
3660 {
3661 param.x += roofStyle.posFixBlock.x;
3662 param.y += roofStyle.posFixBlock.y;
3663 param.z += roofStyle.posFixBlock.z;
3664 }
3665 if (!flag)
3666 {
3667 param.z += 0.5f;
3668 }
3669 if (flag3)
3670 {
3671 param.matColor = 104025f;
3672 if (roofStyle.type != RoofStyle.Type.FlatFloor)
3673 {
3674 param.z += roofStyle.snowZ;
3675 }
3676 param.tile = renderRow.renderData.ConvertTile(renderRow.snowTile) + num17;
3677 renderRow.renderData.Draw(param);
3678 }
3679 else
3680 {
3681 renderRow.renderData.Draw(param);
3682 }
3683 }
3684 else if (flag3 && roofStyle.type == RoofStyle.Type.FlatFloor)
3685 {
3686 param.matColor = 104025f;
3687 param.tile = 10f;
3688 param.x += roofStyle.snowFix.x;
3689 param.y += roofStyle.snowFix.y;
3690 param.z += roofStyle.snowZ + roofStyle.snowFix.z;
3691 renderRow.renderData.Draw(param);
3692 }
3693 }
3694 else
3695 {
3696 if (idRoofTile != 0)
3697 {
3698 int num18 = ((!reverse) ? ((num11 != 0) ? 2 : 0) : ((num11 != 0) ? 1 : 3));
3699 if (lot.altRoof && !flag && (roofStyle.type == RoofStyle.Type.Default || roofStyle.type == RoofStyle.Type.DefaultNoTop))
3700 {
3701 param.shadowFix = num18 + 1;
3702 }
3703 RenderRow renderRow = EMono.sources.objs[idRoofTile];
3704 renderRow.SetRenderParam(param, MATERIAL.sourceGold, num18);
3705 param.matColor = lot.colRoof;
3706 if (flag3)
3707 {
3708 param.matColor = 104025f;
3709 param.z += roofStyle.snowZ;
3710 param.tile = renderRow.renderData.ConvertTile(renderRow.snowTile) + num18 + (lot.altRoof ? 8 : 0);
3711 renderRow.renderData.Draw(param);
3712 }
3713 else
3714 {
3715 param.tile += (lot.altRoof ? 8 : 0);
3716 renderRow.renderData.Draw(param);
3717 }
3718 param.shadowFix = 0f;
3719 }
3720 if (num10 >= 0)
3721 {
3722 param.y += roofRampFix.y;
3723 param.z += roofRampFix.z;
3724 RenderRow renderRow = EMono.sources.blocks[idRamp];
3725 renderRow.SetRenderParam(param, MATERIAL.sourceGold, (!reverse) ? ((num11 != 0) ? 2 : 0) : ((num11 != 0) ? 1 : 3));
3726 param.matColor = lot.colBlock;
3727 renderRow.renderData.Draw(param);
3728 }
3729 }
3730 CellEffect effect = cell.effect;
3731 if (effect != null && effect.FireAmount > 0)
3732 {
3734 }
3735 if (num10 < 1)
3736 {
3737 continue;
3738 }
3739 if (roofStyle.type != RoofStyle.Type.Flat)
3740 {
3741 param.snow = false;
3742 }
3743 for (int i = 0; i < num10; i++)
3744 {
3745 param.x = (float)(cx + cz) * screen.tileAlign.x + roofFix.x + (float)i * roofFix2.x + vector.x * (float)(reverse ? 1 : (-1));
3746 param.y = num15 + (float)i * roofFix2.y;
3747 param.z = num16 + param.y * screen.tileWeight.z + (float)i * roofFix2.z;
3748 RenderRow renderRow = row;
3749 renderRow.SetRenderParam(param, MATERIAL.sourceGold, 0);
3750 param.matColor = lot.colBlock;
3751 renderRow.renderData.Draw(param);
3752 index++;
3753 CellEffect effect2 = cell.effect;
3754 if (effect2 != null && effect2.FireAmount > 0 && Rand.bytes[index % Rand.MaxBytes] % 3 == 0)
3755 {
3757 }
3758 }
3759 }
3760 num9++;
3761 if (roofStyle.type != RoofStyle.Type.Flat)
3762 {
3763 if (num9 == num7)
3764 {
3765 num11 = 1;
3766 }
3767 if (num9 == num8)
3768 {
3769 num11 = 2;
3770 num10++;
3771 }
3772 num10 += num11 switch
3773 {
3774 1 => 0,
3775 0 => 1,
3776 _ => -1,
3777 };
3778 }
3779 }
3780 }
3781
3782 public static int GetColorInt(ref Color matColor, int p)
3783 {
3784 if (p == 0)
3785 {
3786 return 104025;
3787 }
3788 return p * 262144 + (int)(matColor.r * 50f) * 4096 + (int)(matColor.g * 50f) * 64 + (int)(matColor.b * 50f);
3789 }
3790
3791 public void SetRoofHeight(MeshPassParam _param, Cell _cell, int _cx, int _cz, int h = 0, int altitude = 0, int dirWall = -1, bool ignoreAltitudeY = false)
3792 {
3793 Room room = _cell.room;
3794 if (room == null && dirWall != -1)
3795 {
3796 if (dirWall == 0 && _cell.Front.room != null)
3797 {
3798 room = _cell.Front.room;
3799 _cell = _cell.Front;
3800 }
3801 else if (_cell.Right.room != null)
3802 {
3803 room = _cell.Right.room;
3804 _cell = _cell.Right;
3805 }
3806 }
3807 if (room != null)
3808 {
3809 Lot lot = room.lot;
3810 RoofStyle roofStyle = roofStyles[lot.idRoofStyle];
3811 float num = (float)(_cz - _cx) * screen.tileAlign.y + (float)lot.mh * _heightMod.y + lot.realHeight + roofFix.y;
3812 float num2 = 1000f + param.x * screen.tileWeight.x + (float)lot.mh * _heightMod.z + lot.realHeight * roofFix3.z + roofFix.z + roofStyle.posFix.z;
3813 if (lot.height == 1)
3814 {
3815 num += roofStyle.lowRoofFix.y;
3816 num2 += roofStyle.lowRoofFix.z;
3817 }
3818 _param.x = (float)(_cx + _cz) * screen.tileAlign.x + roofFix.x + (float)h * roofFix2.x;
3819 _param.y = num + (float)h * roofFix2.y;
3820 _param.z = num2 + _param.y * screen.tileWeight.z + (float)h * roofFix2.z + heightModRoofBlock.y;
3821 }
3822 if (!ignoreAltitudeY || room != null)
3823 {
3824 _param.y += (float)altitude * _heightMod.y;
3825 }
3826 _param.z += (float)altitude * heightModRoofBlock.z;
3827 }
3828}
AreaHighlightMode
BlockRenderMode
if(!match.Success)
PlaceState
Definition: PlaceState.cs:2
TraitTrolley trolley
Definition: AI_Trolley.cs:23
SceneProfile profile
Definition: AM_Cinema.cs:5
static AM_Inspect Inspect
Definition: ActionMode.cs:23
virtual bool IsRoofEditMode(Card c=null)
Definition: ActionMode.cs:311
static bool IsAdv
Definition: ActionMode.cs:117
static AM_ViewMap ViewMap
Definition: ActionMode.cs:63
virtual BaseTileMap.CardIconMode cardIconMode
Definition: ActionMode.cs:229
virtual bool ShowMaskedThings
Definition: ActionMode.cs:221
bool IsActive
Definition: ActionMode.cs:121
static AM_FlagCell FlagCell
Definition: ActionMode.cs:77
virtual bool IsBuildMode
Definition: ActionMode.cs:181
static AM_Cinema Cinema
Definition: ActionMode.cs:73
static AM_Bird Bird
Definition: ActionMode.cs:31
static AM_Mine Mine
Definition: ActionMode.cs:33
bool showWallItem
Definition: AreaData.cs:54
bool atrium
Definition: AreaData.cs:66
int maxHeight
Definition: AreaData.cs:30
virtual byte GetTile(int index)
Definition: Area.cs:75
AreaData data
Definition: BaseArea.cs:29
List< Action > actionsLateUpdate
Definition: BaseCore.cs:29
ScreenGuide guide
Vector3 tileWeight
BaseTileSelector tileSelector
virtual void RefreshWeather()
MeshPass passArea
Definition: BaseTileMap.cs:141
SourceDeco.Row sourceDeco
Definition: BaseTileMap.cs:496
SourceMaterial.Row matDeco
Definition: BaseTileMap.cs:384
Vector3 roofFix2
Definition: BaseTileMap.cs:75
MeshPass passFog
Definition: BaseTileMap.cs:169
Vector3 cornerWallFix
Definition: BaseTileMap.cs:96
const int BlocklightToken
Definition: BaseTileMap.cs:518
float maxHeight
Definition: BaseTileMap.cs:404
MeshPass passFloor
Definition: BaseTileMap.cs:145
virtual void Draw()
Definition: BaseTileMap.cs:547
int GetRoofLight(Lot lot)
float[] floatYs
Definition: BaseTileMap.cs:308
MeshPass passIcon
Definition: BaseTileMap.cs:185
int floorMatColor
Definition: BaseTileMap.cs:446
RenderData rendererInnerBlock
Definition: BaseTileMap.cs:203
Vector3[] wallHangFix
Definition: BaseTileMap.cs:116
float heightModDeco
Definition: BaseTileMap.cs:52
SourceFloor.Row sourceBridge
Definition: BaseTileMap.cs:494
Collider2D mouseCollider
Definition: BaseTileMap.cs:41
MeshPass passFloorEx
Definition: BaseTileMap.cs:163
float blockLight
Definition: BaseTileMap.cs:386
MeshPass passObj
Definition: BaseTileMap.cs:153
bool showAllCards
Definition: BaseTileMap.cs:462
Vector3 roofFix3
Definition: BaseTileMap.cs:77
bool highlightArea
Definition: BaseTileMap.cs:275
int maxColliderCheck
Definition: BaseTileMap.cs:45
float slopeFixZ
Definition: BaseTileMap.cs:50
InnerMode defaultInnerMode
Definition: BaseTileMap.cs:90
Point HitPoint
Definition: BaseTileMap.cs:522
Vector3 cornerWallFix2
Definition: BaseTileMap.cs:98
ScreenHighlight screenHighlight
Definition: BaseTileMap.cs:338
SourceMaterial.Row matBridge
Definition: BaseTileMap.cs:382
MeshPass passFloorMarker
Definition: BaseTileMap.cs:181
byte[] groundLights
Definition: BaseTileMap.cs:266
RenderData rendererFogRoomSolid
Definition: BaseTileMap.cs:217
float snowLight
Definition: BaseTileMap.cs:406
const int BlocklightMTP
Definition: BaseTileMap.cs:520
InnerMode innerMode
Definition: BaseTileMap.cs:233
int[] floatVs
Definition: BaseTileMap.cs:302
MeshPass passChara
Definition: BaseTileMap.cs:187
float modSublight2
Definition: BaseTileMap.cs:418
MeshPass passRamp
Definition: BaseTileMap.cs:143
RenderData rendererWaterBlock
Definition: BaseTileMap.cs:225
Vector3 waterEdgeFixShoreSand
Definition: BaseTileMap.cs:110
int GetApproximateBlocklight(Cell cell)
MeshPass passGuideBlock
Definition: BaseTileMap.cs:137
float waterAnimeTimer
Definition: BaseTileMap.cs:408
MeshPass passShadow
Definition: BaseTileMap.cs:133
bool showBorder
Definition: BaseTileMap.cs:476
bool isSnowCovered
Definition: BaseTileMap.cs:468
float floatY
Definition: BaseTileMap.cs:329
int lowWallObjAltitude
Definition: BaseTileMap.cs:376
RenderData renderBorder
Definition: BaseTileMap.cs:211
bool cinemaMode
Definition: BaseTileMap.cs:472
bool alwaysLowblock
Definition: BaseTileMap.cs:474
Vector3 waterEdgeFixShore
Definition: BaseTileMap.cs:108
bool hideRoomFog
Definition: BaseTileMap.cs:281
static int GetColorInt(ref Color matColor, int p)
float _lightMod
Definition: BaseTileMap.cs:311
Vector3 roofRampFix
Definition: BaseTileMap.cs:71
float[] lightLookUp
Definition: BaseTileMap.cs:305
TileType tileType
Definition: BaseTileMap.cs:508
float lightLimit
Definition: BaseTileMap.cs:414
int snowColorToken
Definition: BaseTileMap.cs:372
float modSublight1
Definition: BaseTileMap.cs:416
bool showFullWall
Definition: BaseTileMap.cs:287
SceneLightProfile lightSetting
Definition: BaseTileMap.cs:510
bool isUnderwater
Definition: BaseTileMap.cs:478
const int DefColor
Definition: BaseTileMap.cs:516
void OnActivate(BaseGameScreen _screen)
Definition: BaseTileMap.cs:524
bool fogBounds
Definition: BaseTileMap.cs:464
RenderParam param
Definition: BaseTileMap.cs:436
Vector3 ugFix
Definition: BaseTileMap.cs:58
float floorLight
Definition: BaseTileMap.cs:388
MeshPass passWaterBlock
Definition: BaseTileMap.cs:183
float lotLight2
Definition: BaseTileMap.cs:83
bool noRoofMode
Definition: BaseTileMap.cs:296
MeshPass passAutoTileWater
Definition: BaseTileMap.cs:177
new BaseGameScreen screen
Definition: BaseTileMap.cs:354
RenderData rendererFov
Definition: BaseTileMap.cs:205
WallClipMode wallClipMode
Definition: BaseTileMap.cs:88
Vector3 edgeBlockFix
Definition: BaseTileMap.cs:92
MeshPass passFov
Definition: BaseTileMap.cs:171
Vector3 heightMod
Definition: BaseTileMap.cs:56
bool usingHouseBoard
Definition: BaseTileMap.cs:293
Vector3 altitudeFix
Definition: BaseTileMap.cs:102
Vector3 thingPos
Definition: BaseTileMap.cs:482
MeshPass passDecal
Definition: BaseTileMap.cs:157
float floorShadowStrength
Definition: BaseTileMap.cs:332
RenderData rendererFov2
Definition: BaseTileMap.cs:207
Vector3[] transitionFix
Definition: BaseTileMap.cs:114
float _baseBrightness
Definition: BaseTileMap.cs:314
Vector3 waterEdgeFix
Definition: BaseTileMap.cs:104
virtual void DrawTile()
Definition: BaseTileMap.cs:925
void RefreshHeight()
Definition: BaseTileMap.cs:913
Room currentRoom
Definition: BaseTileMap.cs:498
bool noSlopMode
Definition: BaseTileMap.cs:512
MeshPass passFloorWater
Definition: BaseTileMap.cs:165
float rightWallShade
Definition: BaseTileMap.cs:69
RenderData rendererFloorMarker
Definition: BaseTileMap.cs:201
float lotLight
Definition: BaseTileMap.cs:81
Vector3 _actorPos
Definition: BaseTileMap.cs:440
bool darkenOuter
Definition: BaseTileMap.cs:480
GameSetting.RenderSetting renderSetting
Definition: BaseTileMap.cs:362
MeshPass passAutoTile
Definition: BaseTileMap.cs:175
Vector3 _heightMod
Definition: BaseTileMap.cs:335
float _shadowStrength
Definition: BaseTileMap.cs:422
float floatTimer
Definition: BaseTileMap.cs:410
float pcMaxLight
Definition: BaseTileMap.cs:394
float lowblockTimer
Definition: BaseTileMap.cs:317
RenderData rendererShore
Definition: BaseTileMap.cs:209
Vector3 bridgeFix
Definition: BaseTileMap.cs:94
Vector3 orgPos
Definition: BaseTileMap.cs:484
void DrawRoof(Lot lot)
float _rightWallShade
Definition: BaseTileMap.cs:323
float snowLimit
Definition: BaseTileMap.cs:428
float fogBrightness
Definition: BaseTileMap.cs:424
float floatSpeed
Definition: BaseTileMap.cs:122
Vector3 ugFixBridgeBottom
Definition: BaseTileMap.cs:62
SourceMaterial.Row matBlock
Definition: BaseTileMap.cs:378
RenderDataEffect rendererEffect
Definition: BaseTileMap.cs:229
bool hasBridge
Definition: BaseTileMap.cs:348
float nightRatio
Definition: BaseTileMap.cs:434
SourceBlock.Row _sourceBlock
Definition: BaseTileMap.cs:506
float heightBlockSize
Definition: BaseTileMap.cs:48
float destBrightness
Definition: BaseTileMap.cs:412
bool buildMode
Definition: BaseTileMap.cs:346
RenderData renderFootmark
Definition: BaseTileMap.cs:197
Vector3[] waterEdgeBlockFix
Definition: BaseTileMap.cs:118
Vector3 roofFix
Definition: BaseTileMap.cs:73
Vector3 freePos
Definition: BaseTileMap.cs:442
float defaultBlockHeight
Definition: BaseTileMap.cs:426
bool subtleHighlightArea
Definition: BaseTileMap.cs:278
MeshPass passGuideFloor
Definition: BaseTileMap.cs:139
MeshBatch batch
Definition: BaseTileMap.cs:438
MeshPass passEdge
Definition: BaseTileMap.cs:173
Vector3 ugFixBridgeTop
Definition: BaseTileMap.cs:64
RenderData rendererBlockMarker
Definition: BaseTileMap.cs:199
Point TestPoint
Definition: BaseTileMap.cs:231
MeshPass passCharaL
Definition: BaseTileMap.cs:189
MeshPass passLiquid
Definition: BaseTileMap.cs:135
float snowColor2
Definition: BaseTileMap.cs:432
Vector3[] ambientShadowFix
Definition: BaseTileMap.cs:112
float heightLimitDeco
Definition: BaseTileMap.cs:54
float heightLightMod
Definition: BaseTileMap.cs:320
MeshPass passObjSS
Definition: BaseTileMap.cs:151
float shadowModStrength
Definition: BaseTileMap.cs:124
RenderData rendererFogRoomBlockSolid
Definition: BaseTileMap.cs:219
MeshPass passShore
Definition: BaseTileMap.cs:195
float snowColor
Definition: BaseTileMap.cs:430
SourceMaterial.Row matFloor
Definition: BaseTileMap.cs:380
bool highlightCells
Definition: BaseTileMap.cs:470
float roofLightSnow
Definition: BaseTileMap.cs:85
Vector3 ugFixBridge
Definition: BaseTileMap.cs:60
Vector3 cornerWallFix3
Definition: BaseTileMap.cs:100
RenderData rendererWallDeco
Definition: BaseTileMap.cs:223
MeshPass passRoof
Definition: BaseTileMap.cs:159
CellDetail detail
Definition: BaseTileMap.cs:488
RaycastHit2D[] rays
Definition: BaseTileMap.cs:340
MeshPass passCharaLL
Definition: BaseTileMap.cs:193
SourceBlock.Row sourceBlock
Definition: BaseTileMap.cs:490
int[] seaAnimeIndexes
Definition: BaseTileMap.cs:128
MeshPass passCharaLW
Definition: BaseTileMap.cs:191
Vector3 waterEdgeBridgeFix
Definition: BaseTileMap.cs:106
float roofLightMod
Definition: BaseTileMap.cs:79
RenderData rendererFogRoomWallSolid
Definition: BaseTileMap.cs:221
RoofStyle[] roofStyles
Definition: BaseTileMap.cs:514
MeshPass passObjL
Definition: BaseTileMap.cs:155
RenderData rendererFogFloorSolid
Definition: BaseTileMap.cs:215
int waterAnimeIndex
Definition: BaseTileMap.cs:374
float roomHeight
Definition: BaseTileMap.cs:402
MeshPass passBlockMarker
Definition: BaseTileMap.cs:179
Vector3 colliderFix
Definition: BaseTileMap.cs:43
void SetRoofHeight(MeshPassParam _param, Cell _cell, int _cx, int _cz, int h=0, int altitude=0, int dirWall=-1, bool ignoreAltitudeY=false)
static bool forceShowHang
Definition: BaseTileMap.cs:36
RenderDataObjDummy rendererObjDummy
Definition: BaseTileMap.cs:227
BaseTileSelector selector
Definition: BaseTileMap.cs:360
MeshPass passObjS
Definition: BaseTileMap.cs:149
Vector3 heightModRoofBlock
Definition: BaseTileMap.cs:66
NoiseLayer layerGroundLights
Definition: BaseTileMap.cs:131
RenderData rendererFogBlockSolid
Definition: BaseTileMap.cs:213
float roofLightLimitMod
Definition: BaseTileMap.cs:326
GameSetting.RenderSetting.ZSetting zSetting
Definition: BaseTileMap.cs:364
MeshPass pass
Definition: BaseTileMap.cs:358
float shadowStrength
Definition: BaseTileMap.cs:420
bool _lowblock
Definition: BaseTileMap.cs:350
MeshPass passInner
Definition: BaseTileMap.cs:167
MeshPass passBlockEx
Definition: BaseTileMap.cs:161
SourceFloor.Row sourceFloor
Definition: BaseTileMap.cs:492
MeshPass passBlock
Definition: BaseTileMap.cs:147
CardIconMode iconMode
Definition: BaseTileMap.cs:342
float floorLight2
Definition: BaseTileMap.cs:390
Vector3 GetThingPosition(Card tg, Point p)
int currentHeight
Definition: BaseTileMap.cs:450
bool pressing
Definition: ButtonState.cs:35
ScreenGrading grading
override void Draw(RenderParam p)
Definition: CardRenderer.cs:49
Vector3 position
Definition: CardRenderer.cs:21
virtual bool IsMoving
Definition: CardRenderer.cs:31
virtual void SetFirst(bool first, Vector3 pos)
Definition: Card.cs:11
bool isMasked
Definition: Card.cs:593
string id
Definition: Card.cs:36
bool isNPCProperty
Definition: Card.cs:557
bool isFloating
Definition: Card.cs:653
bool isRoofItem
Definition: Card.cs:581
bool isRestrained
Definition: Card.cs:569
float fy
Definition: Card.cs:269
float fx
Definition: Card.cs:257
PlaceState placeState
Definition: Card.cs:86
TileType TileType
Definition: Card.cs:2189
virtual SourcePref Pref
Definition: Card.cs:2159
Point pos
Definition: Card.cs:60
int uid
Definition: Card.cs:125
Trait trait
Definition: Card.cs:54
int altitude
Definition: Card.cs:233
bool isDeconstructing
Definition: Card.cs:449
bool IsInstalled
Definition: Card.cs:2451
virtual bool isChara
Definition: Card.cs:2135
TraitShackle GetRestrainer()
Definition: Card.cs:7641
int dir
Definition: Card.cs:149
virtual CardRow sourceCard
Definition: Card.cs:2183
bool noShadow
Definition: Card.cs:821
SourceCategory.Row category
Definition: Card.cs:2101
bool freePos
Definition: Card.cs:521
CardRenderer renderer
Definition: Card.cs:64
virtual bool flipX
Definition: Card.cs:2168
bool ignoreStackHeight
Definition: Card.cs:641
TaskDesignation designation
Definition: CellDetail.cs:19
List< Thing > things
Definition: CellDetail.cs:11
TransAnime anime
Definition: CellDetail.cs:21
List< Chara > charas
Definition: CellDetail.cs:13
Area area
Definition: CellDetail.cs:15
Footmark footmark
Definition: CellDetail.cs:17
int FireAmount
Definition: CellEffect.cs:162
bool IsFire
Definition: CellEffect.cs:147
bool IsLiquid
Definition: CellEffect.cs:150
SourceCellEffect.Row source
Definition: CellEffect.cs:145
Definition: Cell.cs:7
byte autotileDeco
Definition: Cell.cs:84
Room room
Definition: Cell.cs:122
byte TopHeight
Definition: Cell.cs:139
bool IsBlocked
Definition: Cell.cs:931
bool HasWallOrFence
Definition: Cell.cs:867
SourceBlock.Row sourceBlock
Definition: Cell.cs:1090
Cell BackRight
Definition: Cell.cs:223
bool lotShade
Definition: Cell.cs:546
bool IsSnowTile
Definition: Cell.cs:818
bool castFloorShadow
Definition: Cell.cs:534
SourceMaterial.Row matBlock
Definition: Cell.cs:1066
byte autotile
Definition: Cell.cs:82
static SourceMaterial matSource
Definition: Cell.cs:24
bool HasBlock
Definition: Cell.cs:679
byte shadow
Definition: Cell.cs:92
SourceFloor.Row sourceFloor
Definition: Cell.cs:1092
CellEffect effect
Definition: Cell.cs:114
bool isDeck
Definition: Cell.cs:522
SourceMaterial.Row matDeco
Definition: Cell.cs:1070
Cell Back
Definition: Cell.cs:175
bool lotWall
Definition: Cell.cs:498
bool toggleOcclusion
Definition: Cell.cs:666
bool IsBridgeWater
Definition: Cell.cs:806
byte decal
Definition: Cell.cs:70
int obj
Definition: Cell.cs:50
Critter critter
Definition: Cell.cs:116
bool isClearSnow
Definition: Cell.cs:462
bool isFloating
Definition: Cell.cs:486
Cell Front
Definition: Cell.cs:151
SourceMaterial.Row matObj
Definition: Cell.cs:1074
List< Thing > Things
Definition: Cell.cs:1022
SourceMaterial.Row matBridge
Definition: Cell.cs:1072
bool IsFloorWater
Definition: Cell.cs:763
int _roofBlock
Definition: Cell.cs:58
bool pcSync
Definition: Cell.cs:126
bool UseLowBlock
Definition: Cell.cs:897
int bridgePillar
Definition: Cell.cs:74
byte shore
Definition: Cell.cs:90
bool skipRender
Definition: Cell.cs:282
ushort lightG
Definition: Cell.cs:108
bool IsTopWater
Definition: Cell.cs:736
byte height
Definition: Cell.cs:94
byte autotileObj
Definition: Cell.cs:88
GrowSystem growth
Definition: Cell.cs:247
ushort lightB
Definition: Cell.cs:110
bool isWatered
Definition: Cell.cs:354
SourceFloor.Row sourceBridge
Definition: Cell.cs:1094
bool isClearArea
Definition: Cell.cs:618
CellDetail detail
Definition: Cell.cs:112
int _roofBlockMat
Definition: Cell.cs:60
bool isShadowed
Definition: Cell.cs:268
byte _roofBlockDir
Definition: Cell.cs:72
bool HasFloodBlock
Definition: Cell.cs:1053
byte autotileBridge
Definition: Cell.cs:86
bool isToggleWallPillar
Definition: Cell.cs:570
bool HasRoof
Definition: Cell.cs:684
Cell Left
Definition: Cell.cs:187
static SourceBlock blockSource
Definition: Cell.cs:26
bool isSkyFloor
Definition: Cell.cs:606
SourceMaterial.Row matFloor
Definition: Cell.cs:1068
int floorDir
Definition: Cell.cs:958
bool isSeen
Definition: Cell.cs:294
bool isSlopeEdge
Definition: Cell.cs:366
bool isShoreSand
Definition: Cell.cs:558
SourceObj.Row sourceObj
Definition: Cell.cs:1112
byte highlight
Definition: Cell.cs:104
int objDir
Definition: Cell.cs:946
Cell BackLeft
Definition: Cell.cs:235
bool isForceFloat
Definition: Cell.cs:318
SourceCellEffect.Row sourceEffect
Definition: Cell.cs:1110
bool isSurrounded
Definition: Cell.cs:256
bool isWallEdge
Definition: Cell.cs:438
bool outOfBounds
Definition: Cell.cs:426
Point GetPoint()
Definition: Cell.cs:1141
Cell Right
Definition: Cell.cs:163
Cell FrontLeft
Definition: Cell.cs:211
bool HasRamp
Definition: Cell.cs:873
bool ignoreObjShadow
Definition: Cell.cs:390
byte bridgeHeight
Definition: Cell.cs:96
bool fullWall
Definition: Cell.cs:474
int liquidLv
Definition: Cell.cs:982
bool isBridgeEdge
Definition: Cell.cs:378
bool hasDoor
Definition: Cell.cs:279
int blockDir
Definition: Cell.cs:934
bool IsRoomEdge
Definition: Cell.cs:904
int _bridge
Definition: Cell.cs:54
bool HasFullBlock
Definition: Cell.cs:853
SourceDeco.Row sourceDeco
Definition: Cell.cs:1108
Cell FrontRight
Definition: Cell.cs:199
ushort lightR
Definition: Cell.cs:106
int _deco
Definition: Cell.cs:62
int _block
Definition: Cell.cs:42
Definition: Chara.cs:10
override SourcePref Pref
Definition: Chara.cs:807
override bool IsAliveInCurrentZone
Definition: Chara.cs:569
AIAct ai
Definition: Chara.cs:208
override bool IsPC
Definition: Chara.cs:632
Chara host
Definition: Chara.cs:35
bool IsAstralBody
Definition: Chara.cs:508
override bool IsDeadOrSleeping
Definition: Chara.cs:581
SourceChara.Row source
Definition: Chara.cs:164
override bool IsMoving
Definition: Chara.cs:628
override CardRow sourceCard
Definition: Chara.cs:456
bool IsInActiveZone
Definition: Chara.cs:887
override void SetRenderParam(RenderParam p)
Definition: Chara.cs:7178
ConBaseTransmuteMimic mimicry
Definition: Chara.cs:108
override bool IsPCC
Definition: Chara.cs:702
bool hasTelepathy
Definition: Chara.cs:144
new GameConfig game
Definition: CoreConfig.cs:629
bool godBuild
Definition: CoreDebug.cs:320
Definition: Core.cs:14
static float delta
Definition: Core.cs:17
CoreConfig config
Definition: Core.cs:70
bool reverse
Definition: Critter.cs:23
void Update()
Definition: Critter.cs:102
virtual int SnowTile
Definition: Critter.cs:33
int tile
Definition: Critter.cs:7
bool IsNight
Definition: Date.cs:112
Definition: EInput.cs:8
static bool isAltDown
Definition: EInput.cs:276
static bool isShiftDown
Definition: EInput.cs:272
static ButtonState rightMouse
Definition: EInput.cs:362
static Vector3 mposWorld
Definition: EInput.cs:350
Definition: EMono.cs:4
static GameSetting setting
Definition: EMono.cs:31
static Core core
Definition: EMono.cs:5
static Chara pc
Definition: EMono.cs:13
static World world
Definition: EMono.cs:37
static Player player
Definition: EMono.cs:11
static Zone _zone
Definition: EMono.cs:19
static Game game
Definition: EMono.cs:7
static Scene scene
Definition: EMono.cs:27
static SoundManager Sound
Definition: EMono.cs:39
static Map _map
Definition: EMono.cs:17
static CoreDebug debug
Definition: EMono.cs:45
static SourceManager sources
Definition: EMono.cs:41
Definition: FLOOR.cs:2
static SourceFloor.Row sourceSnow
Definition: FLOOR.cs:31
static SourceFloor.Row sourceSnow2
Definition: FLOOR.cs:33
static SourceFloor.Row sourceIce
Definition: FLOOR.cs:35
int tile
Definition: Footmark.cs:7
EffectSetting effect
Definition: GameSetting.cs:346
RenderSetting render
Definition: GameSetting.cs:348
int slopeMod
Definition: Game.cs:61
bool buildLight
Definition: Game.cs:37
int animeSpeed
Definition: Game.cs:85
bool showRoof
Definition: Game.cs:13
bool showWall
Definition: Game.cs:16
int lowWallObjAltitude
Definition: Game.cs:88
bool reverseSnow
Definition: Game.cs:49
bool slope
Definition: Game.cs:25
Config config
Definition: Game.cs:219
virtual void OnRenderTileMap(RenderParam p, bool drawShadow=true)
Definition: GrowSystem.cs:212
static Card alwaysVisible
Definition: LayerDrama.cs:22
Definition: Lot.cs:5
int colDeco2
Definition: Lot.cs:36
bool altRoof
Definition: Lot.cs:46
int colBlock
Definition: Lot.cs:32
int decoFix
Definition: Lot.cs:38
int idRamp
Definition: Lot.cs:24
int decoFix2
Definition: Lot.cs:40
int colRoof
Definition: Lot.cs:30
int mh
Definition: Lot.cs:58
int colDeco
Definition: Lot.cs:34
int idRoofStyle
Definition: Lot.cs:14
int heightFix
Definition: Lot.cs:18
float realHeight
Definition: Lot.cs:64
float light
Definition: Lot.cs:66
int idBlock
Definition: Lot.cs:22
int height
Definition: Lot.cs:12
int idDeco2
Definition: Lot.cs:28
int idDeco
Definition: Lot.cs:26
int idRoofTile
Definition: Lot.cs:20
bool reverse
Definition: Lot.cs:42
int idBGM
Definition: Lot.cs:16
static SourceMaterial.Row sourceSnow
Definition: MATERIAL.cs:41
static SourceMaterial.Row sourceGold
Definition: MATERIAL.cs:45
int Size
Definition: MapBounds.cs:20
int maxZ
Definition: MapBounds.cs:17
int maxX
Definition: MapBounds.cs:14
int x
Definition: MapBounds.cs:8
float heightLightMod
Definition: MapConfig.cs:59
bool fullWallHeight
Definition: MapConfig.cs:32
int skyBlockHeight
Definition: MapConfig.cs:95
float blockHeight
Definition: MapConfig.cs:74
bool reverseRoof
Definition: MapConfig.cs:47
Definition: Map.cs:13
bool IsIndoor
Definition: Map.cs:136
int SizeXZ
Definition: Map.cs:138
RoomManager rooms
Definition: Map.cs:34
Cell[,] cells
Definition: Map.cs:88
MapConfig config
Definition: Map.cs:40
static HashSet< int > sunMap
Definition: Map.cs:14
MapBounds bounds
Definition: Map.cs:55
float[] matColors
Definition: MeshBatch.cs:11
Matrix4x4[] matrices
Definition: MeshBatch.cs:5
float[] tiles
Definition: MeshBatch.cs:7
float[] colors
Definition: MeshBatch.cs:9
int batchIdx
Definition: MeshPass.cs:60
void Add(Point point, float tile=0f, float color=0f)
Definition: MeshPass.cs:122
void NextBatch()
Definition: MeshPass.cs:417
int batchSize
Definition: MeshPass.cs:63
void AddShadow(MeshPassParam p, ref Vector3 fix)
Definition: MeshPass.cs:195
List< MeshBatch > batches
Definition: MeshPass.cs:66
int idx
Definition: MeshPass.cs:57
bool CanSee(Chara c)
Definition: Player.cs:2568
CinemaConfig cinemaConfig
Definition: Player.cs:1182
float lightPower
Definition: Player.cs:1270
int lightRadius
Definition: Player.cs:1262
Definition: Point.cs:9
static Point shared
Definition: Point.cs:20
ref Vector3 Position(int height)
Definition: Point.cs:549
Point Set(int _x, int _z)
Definition: Point.cs:499
int x
Definition: Point.cs:36
int z
Definition: Point.cs:39
bool IsValid
Definition: Point.cs:84
Point Clamp(bool useBounds=false)
Definition: Point.cs:1010
Cell cell
Definition: Point.cs:47
Definition: Rand.cs:4
static int MaxBytes
Definition: Rand.cs:5
static byte[] bytes
Definition: Rand.cs:11
static void InitBytes(int a)
Definition: Rand.cs:13
new void Draw(RenderParam p, int tile=0)
void Draw(RenderParam p, int tile)
Definition: RenderData.cs:129
Vector3 offsetShadow
Definition: RenderData.cs:23
void DrawRepeat(RenderParam p, int count, float size, bool skipFirst=false)
Definition: RenderData.cs:215
float stackZ
Definition: RenderData.cs:45
int ConvertTile(int tile)
Definition: RenderData.cs:111
SourcePref shadowPref
Definition: RenderData.cs:49
int idShadow
Definition: RenderData.cs:15
float hangedFixZ
Definition: RenderData.cs:43
RenderData data
Definition: RenderObject.cs:34
SourceMaterial.Row mat
Definition: RenderParam.cs:17
int liquidLv
Definition: RenderParam.cs:7
void SetRenderParam(RenderParam p, SourceMaterial.Row mat, int dir)
Definition: RenderRow.cs:413
bool multisize
Definition: RenderRow.cs:64
RenderData renderData
Definition: RenderRow.cs:71
SourcePref pref
Definition: RenderRow.cs:68
bool useAltColor
Definition: RenderRow.cs:80
TileType tileType
Definition: RenderRow.cs:77
int[] _tiles
Definition: RenderRow.cs:12
SourceMaterial.Row DefaultMaterial
Definition: RenderRow.cs:89
int colorMod
Definition: RenderRow.cs:16
int snowTile
Definition: RenderRow.cs:28
Vector3 lowRoofFix
Definition: RoofStyle.cs:39
Vector3 posFix
Definition: RoofStyle.cs:35
int flatW
Definition: RoofStyle.cs:23
float snowZ
Definition: RoofStyle.cs:43
bool coverLot
Definition: RoofStyle.cs:33
Vector3 posFixBlock
Definition: RoofStyle.cs:37
bool wing
Definition: RoofStyle.cs:29
Vector3 snowFix
Definition: RoofStyle.cs:41
Type type
Definition: RoofStyle.cs:17
List< Lot > listLot
Definition: RoomManager.cs:20
void Refresh()
Definition: RoomManager.cs:52
Definition: Room.cs:4
bool HasRoof
Definition: Room.cs:29
Lot lot
Definition: Room.cs:21
AnimationCurve baseBrightnessCurve
AnimationCurve shadowCurveFloor
AnimationCurve dynamicBrightnessCurve2
float dynamicBrightnessLightBonus
AnimationCurve lightLimit
AnimationCurve fogBrightness
AnimationCurve dynamicBrightnessCurve
AnimationCurve shadowCurve
AnimationCurve nightRatioCurve
AnimationCurve lightModCurve
SceneGlobalProfile global
Definition: SceneProfile.cs:6
SceneLightProfile light
Definition: SceneProfile.cs:10
Definition: Scene.cs:8
List< ISyncScreen > syncList
Definition: Scene.cs:137
static Point HitPoint
Definition: Scene.cs:21
float timeRatio
Definition: Scene.cs:130
CameraSupport camSupport
Definition: Scene.cs:41
GameSetting.RenderSetting.MapBGSetting bg
Definition: Scene.cs:124
SoundSource sfxFire
Definition: Scene.cs:89
ActionMode actionMode
Definition: Scene.cs:79
SceneProfile profile
Definition: Scene.cs:75
MeshPass passGuideFloor
Definition: ScreenGuide.cs:7
List< Item > items
Definition: ShadowData.cs:101
static ShadowData Instance
Definition: ShadowData.cs:99
SourceObj objs
SourceBlock blocks
SourceFloor floors
bool HasGrowth
Definition: SourceObj.cs:29
bool bypassShadow
Definition: SourcePref.cs:354
int liquidModMax
Definition: SourcePref.cs:77
bool FloatUnderwater
Definition: SourcePref.cs:371
float height
Definition: SourcePref.cs:53
int liquidMod
Definition: SourcePref.cs:65
bool Float
Definition: SourcePref.cs:367
int shadow
Definition: SourcePref.cs:41
bool IsPlayerFaction
Definition: Spatial.cs:455
virtual bool IsRegion
Definition: Spatial.cs:515
virtual bool IsSnowCovered
Definition: Spatial.cs:545
virtual void Draw(int x, int z, RenderParam p)
Definition: Thing.cs:8
override void SetRenderParam(RenderParam p)
Definition: Thing.cs:1557
override SourcePref Pref
Definition: Thing.cs:50
override CardRow sourceCard
Definition: Thing.cs:47
int id
Definition: TileRow.cs:9
virtual bool IsUseBlockDir
Definition: TileType.cs:141
virtual bool UseHangZFix
Definition: TileType.cs:243
static TileTypeSky Sky
Definition: TileType.cs:75
virtual bool CanStack
Definition: TileType.cs:133
virtual void GetMountHeight(ref Vector3 v, Point p, int d, Card target=null)
Definition: TileType.cs:409
static TileTypeIllumination Illumination
Definition: TileType.cs:93
static TileTypeWaterShallow FloorWaterShallow
Definition: TileType.cs:65
static TileTypeObjFloat ObjFloat
Definition: TileType.cs:85
bool IsRamp
Definition: TileType.cs:155
virtual bool AlwaysShowShadow
Definition: TileType.cs:273
virtual bool UseLowBlock
Definition: TileType.cs:245
virtual bool IsFullBlock
Definition: TileType.cs:177
virtual bool IsWall
Definition: TileType.cs:145
virtual bool ForceRpeatBlock
Definition: TileType.cs:279
virtual bool IsSkipLowBlock
Definition: TileType.cs:137
virtual bool UseMountHeight
Definition: TileType.cs:241
virtual bool IsFence
Definition: TileType.cs:179
virtual BlockRenderMode blockRenderMode
Definition: TileType.cs:299
Vector3 GetRampFix(int dir, SourcePref pref=null)
Definition: TileType.cs:414
virtual bool IsWaterTop
Definition: TileType.cs:187
virtual bool RepeatBlock
Definition: TileType.cs:277
virtual bool IsOpen()
Definition: TraitDoor.cs:101
virtual Vector3 GetRestrainPos
Definition: TraitShackle.cs:5
virtual bool IgnoreLastStackHeight
Definition: Trait.cs:121
virtual void PositionFix(ref Vector3 v)
Definition: Trait.cs:1335
virtual bool AlwaysHideOnLowWall
Definition: Trait.cs:365
virtual bool UseLowblock
Definition: Trait.cs:455
virtual TileType tileType
Definition: Trait.cs:50
virtual bool UsePositionFix
Definition: Trait.cs:453
virtual bool IsChangeFloorHeight
Definition: Trait.cs:74
virtual bool IsGround
Definition: Trait.cs:68
Card owner
Definition: Trait.cs:28
Vector3 v
Definition: TransAnime.cs:5
bool animeBlock
Definition: TransAnime.cs:21
bool drawBlock
Definition: TransAnime.cs:25
GameDate date
Definition: World.cs:6
Definition: Zone.cs:12
virtual bool IsSkyLevel
Definition: Zone.cs:274
void RefreshBGM()
Definition: Zone.cs:3321
virtual bool UseFog
Definition: Zone.cs:398
virtual bool AlwaysLowblock
Definition: Zone.cs:402
virtual bool IsUnderwater
Definition: Zone.cs:276
Map map
Definition: Zone.cs:66