Elin Decompiled Documentation EA 23.306 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 != 0 && (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 != 0 && 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.blockList[this.cell._roofBlock];
1126 SourceMaterial.Row row2 = Cell.matList[this.cell._roofBlockMat];
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.rows[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 shadow2 = shadowPref.shadow;
1199 passShadow.AddShadow(param.x + renderData.offsetShadow.x, param.y + renderData.offsetShadow.y, param.z + renderData.offsetShadow.z, ShadowData.Instance.items[shadow2], 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 != 0 && sourceBlock.tileType.IsFullBlock;
1215 if (!(!isSeen || flag4))
1216 {
1217 goto IL_16bd;
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)
1271 {
1272 return;
1273 }
1274 }
1275 else
1276 {
1277 if (isRoomEdge)
1278 {
1279 goto IL_16bd;
1280 }
1281 if (detail == null || !EMono.pc.hasTelepathy)
1282 {
1283 if (noRoofMode || detail == null)
1284 {
1285 return;
1286 }
1287 fogged = true;
1288 }
1289 }
1290 goto IL_7eb8;
1291 IL_7327:
1292 int num3;
1293 if (!showRoof || !roof || this.cell.room == null || this.cell.Front.room == null || this.cell.Right.room == null)
1294 {
1295 param.tile = num3;
1297 }
1298 goto IL_7387;
1299 IL_7387:
1300 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)))
1301 {
1302 snowed = true;
1303 }
1304 if (this.cell.effect != null)
1305 {
1306 if (this.cell.effect.IsLiquid)
1307 {
1308 SourceCellEffect.Row sourceEffect = this.cell.sourceEffect;
1309 SourceMaterial.Row defaultMaterial = sourceEffect.DefaultMaterial;
1310 tile = 4 + Rand.bytes[index % Rand.MaxBytes] % 4;
1311 param.tile = tile + this.cell.sourceEffect._tiles[0];
1312 param.mat = defaultMaterial;
1313 param.matColor = ((this.cell.effect.color == 0) ? GetColorInt(ref defaultMaterial.matColor, sourceEffect.colorMod) : this.cell.effect.color);
1314 sourceEffect.renderData.Draw(param);
1315 }
1316 else
1317 {
1318 param.tile = this.cell.effect.source._tiles[0];
1319 SourceCellEffect.Row sourceEffect2 = this.cell.sourceEffect;
1320 if (sourceEffect2.anime.Length != 0)
1321 {
1322 if (sourceEffect2.anime.Length > 2)
1323 {
1324 float num4 = Time.realtimeSinceStartup * 1000f / (float)sourceEffect2.anime[1] % (float)sourceEffect2.anime[2];
1325 if (!(num4 >= (float)sourceEffect2.anime[0]))
1326 {
1327 param.tile += num4;
1328 }
1329 }
1330 else
1331 {
1332 float num5 = Time.realtimeSinceStartup * 1000f / (float)sourceEffect2.anime[1] % (float)sourceEffect2.anime[0];
1333 param.tile += num5;
1334 }
1335 }
1336 if (this.cell.effect.IsFire)
1337 {
1339 }
1340 else
1341 {
1342 this.cell.effect.source.renderData.Draw(param);
1343 }
1344 }
1345 }
1346 param.color = floorLight;
1347 if (this.cell.critter != null)
1348 {
1349 Critter critter = this.cell.critter;
1350 int snowTile = critter.tile;
1351 if (snowed && critter.SnowTile != 0)
1352 {
1353 critter.x = 0.06f;
1354 critter.y = -0.06f;
1355 snowTile = critter.SnowTile;
1356 }
1357 else
1358 {
1359 critter.Update();
1360 }
1361 pass = passObjSS;
1363 batch.matrices[pass.idx].m03 = param.x + (float)(int)(critter.x * 100f) * 0.01f;
1364 batch.matrices[pass.idx].m13 = param.y + (float)(int)(critter.y * 100f) * 0.01f;
1365 batch.matrices[pass.idx].m23 = param.z;
1366 batch.tiles[pass.idx] = snowTile * ((!critter.reverse) ? 1 : (-1));
1368 pass.idx++;
1369 if (pass.idx == pass.batchSize)
1370 {
1371 pass.NextBatch();
1372 }
1373 }
1374 if (detail != null)
1375 {
1376 TransAnime anime3 = detail.anime;
1377 if (anime3 != null && !anime3.animeBlock)
1378 {
1379 TransAnime anime4 = detail.anime;
1380 param.x += anime4.v.x;
1381 param.y += anime4.v.y;
1382 param.z += anime4.v.z;
1383 }
1384 }
1385 if (this.cell.obj != 0 && !this.cell.sourceObj.renderData.SkipOnMap)
1386 {
1387 SourceObj.Row sourceObj = this.cell.sourceObj;
1388 if (!snowed || sourceObj.snowTile <= 0)
1389 {
1390 param.snow = snowed;
1391 param.mat = this.cell.matObj;
1392 orgY = param.y;
1393 if (param.liquidLv > 0)
1394 {
1395 if (sourceObj.pref.Float)
1396 {
1397 param.y += 0.01f * floatY;
1398 if (liquidLv > 10)
1399 {
1400 liquidLv = TileType.FloorWaterShallow.LiquidLV * 10;
1401 }
1402 liquidLv -= (int)(floatY * 0.5f);
1403 param.liquidLv = liquidLv;
1404 }
1405 if (sourceObj.tileType.IsWaterTop)
1406 {
1407 param.liquidLv = 0;
1408 }
1409 else
1410 {
1411 param.liquidLv += sourceObj.pref.liquidMod;
1412 if (param.liquidLv < 1)
1413 {
1414 param.liquid = 1f;
1415 }
1416 else if (param.liquidLv > 99 + sourceObj.pref.liquidModMax)
1417 {
1418 param.liquidLv = 99 + sourceObj.pref.liquidModMax;
1419 }
1420 }
1421 }
1422 if (sourceObj.useAltColor)
1423 {
1424 param.matColor = ((sourceObj.colorMod == 0) ? 104025 : GetColorInt(ref param.mat.altColor, sourceObj.colorMod));
1425 }
1426 else
1427 {
1428 param.matColor = ((sourceObj.colorMod == 0) ? 104025 : GetColorInt(ref param.mat.matColor, sourceObj.colorMod));
1429 }
1430 if (sourceObj.HasGrowth)
1431 {
1432 this.cell.growth.OnRenderTileMap(param);
1433 }
1434 else
1435 {
1436 if (this.cell.autotileObj != 0)
1437 {
1438 param.tile = sourceObj._tiles[0] + this.cell.autotileObj;
1439 }
1440 else if (sourceObj.tileType.IsUseBlockDir)
1441 {
1442 param.tile = sourceObj._tiles[this.cell.blockDir % sourceObj._tiles.Length];
1443 }
1444 else
1445 {
1446 param.tile = sourceObj._tiles[this.cell.objDir % sourceObj._tiles.Length];
1447 }
1448 if (_lowblock && sourceObj.tileType.IsSkipLowBlock)
1449 {
1450 param.tile += ((param.tile > 0f) ? 1 : (-1)) * 3000000;
1451 }
1452 orgY = param.y;
1453 orgZ = param.z;
1454 param.y += sourceObj.pref.y;
1455 param.z += sourceObj.pref.z;
1456 sourceObj.renderData.Draw(param);
1457 param.y = orgY;
1458 param.z = orgZ;
1459 int shadow3 = sourceObj.pref.shadow;
1460 if (shadow3 > 1 && !this.cell.ignoreObjShadow)
1461 {
1462 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);
1463 }
1464 param.y = orgY;
1465 }
1466 }
1467 }
1468 if (this.cell.decal != 0 && sourceFloor.tileType.AllowBlood)
1469 {
1470 passDecal.Add(param, (int)this.cell.decal, floorLight);
1471 }
1472 if (highlightCells)
1473 {
1474 switch (ActionMode.FlagCell.mode)
1475 {
1476 case AM_FlagCell.Mode.flagWallPillar:
1477 if (this.cell.isToggleWallPillar)
1478 {
1479 passArea.Add(param, 34f, 0f);
1480 }
1481 break;
1482 case AM_FlagCell.Mode.flagSnow:
1483 if (this.cell.isClearSnow)
1484 {
1485 passArea.Add(param, 34f, 0f);
1486 }
1487 break;
1488 case AM_FlagCell.Mode.flagFloat:
1489 if (this.cell.isForceFloat)
1490 {
1491 passArea.Add(param, 34f, 0f);
1492 }
1493 break;
1494 case AM_FlagCell.Mode.flagClear:
1495 if (this.cell.isClearArea)
1496 {
1497 passArea.Add(param, 34f, 0f);
1498 }
1499 break;
1500 }
1501 }
1502 if (detail == null)
1503 {
1504 return;
1505 }
1506 if (highlightArea && detail.area != null)
1507 {
1508 passArea.Add(param, (int)detail.area.GetTile(index) - ((!subtleHighlightArea) ? 1 : 0), 0f);
1509 }
1510 if (detail.footmark != null && sourceFloor.id != 0)
1511 {
1512 param.tile = detail.footmark.tile;
1513 param.mat = matFloor;
1514 param.matColor = 104025f;
1516 }
1517 goto IL_7eb8;
1518 IL_16bd:
1519 if (this.cell.isSlopeEdge)
1520 {
1521 float num6 = (float)height * _heightMod.y;
1522 orgY = param.y;
1523 orgZ = param.z;
1524 param.dir = this.cell.blockDir;
1525 if (snowed)
1526 {
1527 param.color = floorLight;
1528 }
1529 SourceBlock.Row defBlock;
1530 if (sourceBlock.tileType.IsFullBlock)
1531 {
1532 defBlock = sourceBlock;
1533 param.mat = matBlock;
1534 param.tile = sourceBlock._tiles[this.cell.blockDir % sourceBlock._tiles.Length];
1535 param.matColor = ((sourceBlock.colorMod == 0) ? 104025 : GetColorInt(ref matBlock.matColor, sourceBlock.colorMod));
1536 }
1537 else
1538 {
1539 defBlock = sourceFloor._defBlock;
1540 param.mat = matFloor;
1541 param.tile = defBlock._tiles[this.cell.blockDir % defBlock._tiles.Length];
1542 if (defBlock.id != 1)
1543 {
1544 param.matColor = ((sourceFloor.colorMod == 0) ? 104025 : GetColorInt(ref matFloor.matColor, sourceFloor.colorMod));
1545 }
1546 else
1547 {
1548 param.matColor = 104025f;
1549 }
1550 }
1551 for (int j = 0; (float)j < num6 / heightBlockSize; j++)
1552 {
1553 param.y += ugFix.y;
1554 param.z += ugFix.z + slopeFixZ * (float)j;
1555 defBlock.renderData.Draw(param);
1556 if (this.cell.pcSync && EMono.player.lightPower > 0f)
1557 {
1558 float num7 = param.tile;
1559 param.tile = 0f;
1561 param.tile = num7;
1562 }
1563 }
1564 param.y = orgY;
1565 param.z = orgZ;
1566 }
1567 param.color = floorLight;
1568 if (!isWater && (this.cell.Front.sourceFloor.tileType.IsWater || this.cell.Right.sourceFloor.tileType.IsWater) && this.cell.sourceBlock.tileType.RenderWaterBlock && !flag)
1569 {
1570 orgY = param.y;
1571 orgZ = param.z;
1572 int num8 = 0;
1573 if (sourceBlock.tileType.IsFullBlock)
1574 {
1576 num8 = sourceBlock._tiles[this.cell.blockDir % sourceBlock._tiles.Length];
1577 }
1578 else
1579 {
1580 SourceBlock.Row row3 = sourceFloor._defBlock;
1581 num8 = row3._tiles[this.cell.blockDir % row3._tiles.Length];
1582 }
1583 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)
1584 {
1585 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;
1586 param.z = 1000f + param.x * screen.tileWeight.x + param.y * screen.tileWeight.z;
1587 param.tile = num8 + ((!this.cell.Front.sourceFloor.tileType.IsDeepWater) ? 3000000 : 0);
1589 }
1590 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)
1591 {
1592 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;
1593 param.z = 1000f + param.x * screen.tileWeight.x + param.y * screen.tileWeight.z;
1594 param.tile = num8 + ((!this.cell.Right.sourceFloor.tileType.IsDeepWater) ? 3000000 : 0);
1596 }
1597 param.y = orgY;
1598 param.z = orgZ;
1599 }
1600 if (showBorder && !this.cell.outOfBounds)
1601 {
1602 param.matColor = 104025f;
1603 if (cx == EMono._map.bounds.x)
1604 {
1605 renderBorder.Draw(param, 12 + (EMono.world.date.IsNight ? 4 : 0));
1606 }
1607 else if (cx == EMono._map.bounds.maxX)
1608 {
1609 renderBorder.Draw(param, 13 + (EMono.world.date.IsNight ? 4 : 0));
1610 }
1611 if (cz == EMono._map.bounds.z)
1612 {
1613 renderBorder.Draw(param, 14 + (EMono.world.date.IsNight ? 4 : 0));
1614 }
1615 else if (cz == EMono._map.bounds.maxZ)
1616 {
1617 renderBorder.Draw(param, 15 + (EMono.world.date.IsNight ? 4 : 0));
1618 }
1619 }
1620 if (this.cell.isSkyFloor || (detail != null && detail.anime != null && detail.anime.drawBlock))
1621 {
1622 orgY = param.y;
1623 orgZ = param.z;
1624 SourceBlock.Row defBlock2 = sourceFloor._defBlock;
1625 param.mat = matFloor;
1626 param.tile = defBlock2._tiles[this.cell.blockDir % defBlock2._tiles.Length];
1627 if (defBlock2.id != 1)
1628 {
1629 param.matColor = ((sourceFloor.colorMod == 0) ? 104025 : GetColorInt(ref matFloor.matColor, sourceFloor.colorMod));
1630 }
1631 else
1632 {
1633 param.matColor = 104025f;
1634 }
1635 for (int k = 0; k < ((!this.cell.isSkyFloor) ? 1 : EMono._map.config.skyBlockHeight); k++)
1636 {
1637 param.y += ugFix.y;
1638 param.z += ugFix.z + slopeFixZ * (float)k;
1639 defBlock2.renderData.Draw(param);
1640 }
1641 param.y = orgY;
1642 param.z = orgZ;
1643 }
1644 if (!sourceFloor.tileType.IsSkipFloor)
1645 {
1646 if ((hasBridge && sourceBridge.tileType.CastShadowSelf) || this.cell.castFloorShadow)
1647 {
1648 floorLight2 = _lightMod * light * 0.2f + _baseBrightness + _shadowStrength * floorShadowStrength * (isWater ? 0.7f : (hasBridge ? 1f : (0.6f * (1f - nightRatio))));
1649 if (snowed)
1650 {
1651 floorLight2 = (int)((double)floorLight2 * 0.85 * 50.0) * 262144 + snowColorToken;
1652 }
1653 else
1654 {
1655 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);
1656 }
1657 param.color = floorLight2;
1658 if (this.cell.lotShade)
1659 {
1661 }
1662 }
1663 floorMatColor = ((sourceFloor.colorMod == 0) ? 104025 : GetColorInt(ref matFloor.matColor, sourceFloor.colorMod));
1664 if (isWater && flag)
1665 {
1666 param.y -= 0.01f * floatY;
1667 }
1668 if (!sourceBlock.tileType.IsSkipFloor || sourceBlock.transparent || hasBridge || this.cell.hasDoor || this.cell.skipRender)
1669 {
1670 param.mat = matFloor;
1671 param.tile = sourceFloor._tiles[floorDir % sourceFloor._tiles.Length];
1672 param.matColor = floorMatColor;
1673 param.snow = snowed;
1674 if (sourceFloor.anime.Length != 0)
1675 {
1676 int num9 = (int)(Time.realtimeSinceStartup * 1000f / (float)sourceFloor.anime[1] % (float)sourceFloor.anime[0]);
1677 param.tile += num9;
1678 }
1679 if (this.cell.isDeck)
1680 {
1681 param.z += 1f;
1682 if ((bool)sourceFloor.renderData.subData)
1683 {
1684 sourceFloor.renderData.subData.Draw(param);
1685 }
1686 sourceFloor.renderData.Draw(param);
1687 param.z -= 1f;
1688 }
1689 else
1690 {
1691 if ((bool)sourceFloor.renderData.subData)
1692 {
1693 sourceFloor.renderData.subData.Draw(param);
1694 }
1695 sourceFloor.renderData.Draw(param);
1696 }
1697 int num10 = 0;
1698 if (isSnowCovered && sourceFloor == FLOOR.sourceSnow && !this.cell.hasDoor)
1699 {
1700 if (!this.cell.Right.IsSnowTile && this.cell.Right.topHeight == this.cell.topHeight)
1701 {
1702 num10++;
1703 }
1704 if (!this.cell.Front.IsSnowTile && this.cell.Front.topHeight == this.cell.topHeight)
1705 {
1706 num10 += 2;
1707 }
1708 if (num10 != 0)
1709 {
1710 param.tile = 448 + num10 + 12;
1711 param.z -= 0.1f;
1712 sourceFloor.renderData.Draw(param);
1713 param.z += 0.1f;
1714 }
1715 }
1716 if (this.cell.shadow != 0 && !hasBridge && !this.cell.skipRender)
1717 {
1718 if (snowed)
1719 {
1721 {
1722 param.tile = 448 + this.cell.shadow + 8 + (this.cell.HasFence ? 4 : 0);
1723 param.z -= 0.01f;
1724 sourceFloor.renderData.Draw(param);
1725 }
1726 }
1727 else
1728 {
1729 pass = passEdge;
1731 batch.matrices[pass.idx].m03 = param.x + ambientShadowFix[this.cell.shadow].x;
1732 batch.matrices[pass.idx].m13 = param.y + ambientShadowFix[this.cell.shadow].y;
1733 batch.matrices[pass.idx].m23 = param.z + ambientShadowFix[this.cell.shadow].z;
1734 batch.tiles[pass.idx] = 448 + this.cell.shadow;
1736 batch.matColors[pass.idx] = 104025f;
1737 pass.idx++;
1738 if (pass.idx == pass.batchSize)
1739 {
1740 pass.NextBatch();
1741 }
1742 }
1743 if (!sourceFloor.ignoreTransition && !snowed)
1744 {
1745 Cell back = this.cell.Back;
1746 if (back.sourceBlock.transition[0] != -1 && back.isSeen && !back.hasDoor)
1747 {
1748 pass = passFloor;
1750 batch.matrices[pass.idx].m03 = param.x + transitionFix[0].x;
1751 batch.matrices[pass.idx].m13 = param.y + transitionFix[0].y;
1752 batch.matrices[pass.idx].m23 = param.z + transitionFix[0].z;
1753 batch.tiles[pass.idx] = 480 + back.sourceBlock.transition[0] + Rand.bytes[index % Rand.MaxBytes] % back.sourceBlock.transition[1];
1755 batch.matColors[pass.idx] = GetColorInt(ref back.matBlock.matColor, back.sourceBlock.colorMod);
1756 pass.idx++;
1757 if (pass.idx == pass.batchSize)
1758 {
1759 pass.NextBatch();
1760 }
1761 }
1762 back = this.cell.Left;
1763 if (back.sourceBlock.transition[0] != -1 && back.isSeen && !back.hasDoor)
1764 {
1765 pass = passFloor;
1767 batch.matrices[pass.idx].m03 = param.x + transitionFix[1].x;
1768 batch.matrices[pass.idx].m13 = param.y + transitionFix[1].y;
1769 batch.matrices[pass.idx].m23 = param.z + transitionFix[1].z;
1770 batch.tiles[pass.idx] = 512 + back.sourceBlock.transition[0] + Rand.bytes[index % Rand.MaxBytes] % back.sourceBlock.transition[1];
1772 batch.matColors[pass.idx] = GetColorInt(ref back.matBlock.matColor, back.sourceBlock.colorMod);
1773 pass.idx++;
1774 if (pass.idx == pass.batchSize)
1775 {
1776 pass.NextBatch();
1777 }
1778 }
1779 }
1780 }
1781 if (this.cell.autotile != 0 && sourceFloor.autotile != 0 && (!hasBridge || this.cell.bridgeHeight - this.cell.height > 3) && !this.cell.skipRender && num10 == 0)
1782 {
1783 pass = (isWater ? passAutoTileWater : passAutoTile);
1785 batch.matrices[pass.idx].m03 = param.x;
1786 batch.matrices[pass.idx].m13 = param.y;
1787 batch.matrices[pass.idx].m23 = param.z + ((hasBridge || this.cell._block != 0) ? 0.8f : 0f);
1788 batch.tiles[pass.idx] = (26 + sourceFloor.autotile / 2) * 32 + sourceFloor.autotile % 2 * 16 + this.cell.autotile;
1789 batch.colors[pass.idx] = param.color + (float)((int)(sourceFloor.autotileBrightness * 100f) * 262144);
1791 pass.idx++;
1792 if (pass.idx == pass.batchSize)
1793 {
1794 pass.NextBatch();
1795 }
1796 }
1797 }
1798 if (isWater)
1799 {
1800 int num11 = 12;
1801 int num12 = this.cell.shore / num11;
1802 int num13 = this.cell.shore % num11;
1803 bool isShoreSand = this.cell.isShoreSand;
1804 if (this.cell.shore != 0)
1805 {
1806 Cell cell = ((((uint)num12 & (true ? 1u : 0u)) != 0) ? this.cell.Back : ((((uint)num12 & 2u) != 0) ? this.cell.Right : ((((uint)num12 & 4u) != 0) ? this.cell.Front : this.cell.Left)));
1807 if (isShoreSand && !cell.sourceFloor.isBeach)
1808 {
1809 cell = ((((uint)num12 & 8u) != 0) ? this.cell.Left : ((((uint)num12 & 4u) != 0) ? this.cell.Front : ((((uint)num12 & 2u) != 0) ? this.cell.Right : this.cell.Back)));
1810 }
1811 if (!cell.IsSnowTile)
1812 {
1813 param.matColor = GetColorInt(ref cell.matFloor.matColor, cell.sourceFloor.colorMod);
1814 if (isShoreSand)
1815 {
1816 pass = passShore;
1818 batch.matrices[pass.idx].m03 = param.x;
1819 batch.matrices[pass.idx].m13 = param.y;
1820 batch.matrices[pass.idx].m23 = param.z;
1821 batch.tiles[pass.idx] = 768 + this.cell.shore / num11;
1824 pass.idx++;
1825 if (pass.idx == pass.batchSize)
1826 {
1827 pass.NextBatch();
1828 }
1829 num13 = 2;
1830 }
1831 else
1832 {
1833 num13 = cell.sourceFloor.edge;
1834 }
1835 param.tile = (24 + num13 / 2) * 32 + num13 % 2 * 16 + num12;
1837 }
1838 }
1839 if (this.cell.Back.isShoreSand && ((uint)(this.cell.Back.shore / num11) & 8u) != 0 && this.cell.Left.isShoreSand && ((uint)(this.cell.Left.shore / num11) & (true ? 1u : 0u)) != 0)
1840 {
1841 param.tile = 785f;
1842 param.matColor = GetColorInt(ref this.cell.BackLeft.matFloor.matColor, this.cell.BackLeft.sourceFloor.colorMod);
1844 Draw(60);
1845 }
1846 if (this.cell.Back.isShoreSand && ((uint)(this.cell.Back.shore / num11) & 2u) != 0 && this.cell.Right.isShoreSand && ((uint)(this.cell.Right.shore / num11) & (true ? 1u : 0u)) != 0)
1847 {
1848 param.tile = 786f;
1849 param.matColor = GetColorInt(ref this.cell.BackRight.matFloor.matColor, this.cell.BackRight.sourceFloor.colorMod);
1851 Draw(56);
1852 }
1853 if (this.cell.Front.isShoreSand && ((uint)(this.cell.Front.shore / num11) & 2u) != 0 && this.cell.Right.isShoreSand && ((uint)(this.cell.Right.shore / num11) & 4u) != 0)
1854 {
1855 param.tile = 787f;
1856 param.matColor = GetColorInt(ref this.cell.FrontRight.matFloor.matColor, this.cell.FrontRight.sourceFloor.colorMod);
1858 Draw(48);
1859 }
1860 if (this.cell.Front.isShoreSand && ((uint)(this.cell.Front.shore / num11) & 8u) != 0 && this.cell.Left.isShoreSand && ((uint)(this.cell.Left.shore / num11) & 4u) != 0)
1861 {
1862 param.tile = 788f;
1863 param.matColor = GetColorInt(ref this.cell.FrontLeft.matFloor.matColor, this.cell.FrontLeft.sourceFloor.colorMod);
1865 Draw(52);
1866 }
1867 if (this.cell._bridge != 0 && this.cell.isBridgeEdge && this.cell.bridgePillar != byte.MaxValue)
1868 {
1869 pass = passEdge;
1871 batch.matrices[pass.idx].m03 = param.x + waterEdgeBridgeFix.x;
1872 batch.matrices[pass.idx].m13 = param.y + waterEdgeBridgeFix.y;
1873 batch.matrices[pass.idx].m23 = param.z + waterEdgeBridgeFix.z;
1874 batch.tiles[pass.idx] = 616 + waterAnimeIndex % 4;
1876 batch.matColors[pass.idx] = 104025f;
1877 pass.idx++;
1878 if (pass.idx == pass.batchSize)
1879 {
1880 pass.NextBatch();
1881 }
1882 }
1883 bool flag6 = false;
1884 if (isShoreSand)
1885 {
1886 if (((uint)num12 & (true ? 1u : 0u)) != 0)
1887 {
1888 if (((uint)num12 & 8u) != 0)
1889 {
1890 if ((num12 & 2) == 0 && (num12 & 4) == 0)
1891 {
1892 Draw(16);
1893 }
1894 flag6 = true;
1895 }
1896 if (((uint)num12 & 2u) != 0)
1897 {
1898 if ((num12 & 8) == 0 && (num12 & 4) == 0)
1899 {
1900 Draw(20);
1901 }
1902 flag6 = true;
1903 }
1904 }
1905 if (((uint)num12 & 4u) != 0)
1906 {
1907 if (((uint)num12 & 8u) != 0)
1908 {
1909 if ((num12 & 2) == 0 && (num12 & 1) == 0)
1910 {
1911 Draw(24);
1912 }
1913 flag6 = true;
1914 }
1915 if (((uint)num12 & 2u) != 0)
1916 {
1917 if ((num12 & 8) == 0 && (num12 & 1) == 0)
1918 {
1919 Draw(28);
1920 }
1921 flag6 = true;
1922 }
1923 }
1924 if (!flag6)
1925 {
1926 if (!this.cell.Front.sourceFloor.tileType.IsWater && !this.cell.Front.isDeck)
1927 {
1928 Draw(8);
1929 }
1930 if (!this.cell.Right.sourceFloor.tileType.IsWater && !this.cell.Right.isDeck)
1931 {
1932 Draw(12);
1933 }
1934 }
1935 }
1936 if (!flag6)
1937 {
1938 if (!this.cell.Back.sourceFloor.tileType.IsWater && !this.cell.Back.isDeck)
1939 {
1940 pass = passEdge;
1942 batch.tiles[pass.idx] = 608 + waterAnimeIndex % 4;
1943 batch.matColors[pass.idx] = 104025f;
1944 if (((uint)(this.cell.shore / num11) & (true ? 1u : 0u)) != 0)
1945 {
1946 if (isShoreSand)
1947 {
1948 param.matColor = GetColorInt(ref this.cell.Back.matFloor.matColor, this.cell.Back.sourceFloor.colorMod);
1949 batch.matrices[pass.idx].m03 = param.x + waterEdgeFixShoreSand.x;
1950 batch.matrices[pass.idx].m13 = param.y + waterEdgeFixShoreSand.y;
1951 batch.matrices[pass.idx].m23 = param.z + waterEdgeFixShoreSand.z;
1954 }
1955 else
1956 {
1957 batch.matrices[pass.idx].m03 = param.x;
1958 batch.matrices[pass.idx].m13 = param.y;
1959 batch.matrices[pass.idx].m23 = param.z + waterEdgeFixShore.z;
1960 }
1961 }
1962 else
1963 {
1964 batch.matrices[pass.idx].m03 = param.x;
1965 batch.matrices[pass.idx].m13 = param.y;
1966 batch.matrices[pass.idx].m23 = param.z + waterEdgeFix.z;
1967 batch.tiles[pass.idx] += 12f;
1968 }
1970 pass.idx++;
1971 if (pass.idx == pass.batchSize)
1972 {
1973 pass.NextBatch();
1974 }
1975 }
1976 if (!this.cell.Left.sourceFloor.tileType.IsWater && !this.cell.Left.isDeck)
1977 {
1978 pass = passEdge;
1980 batch.tiles[pass.idx] = 612 + waterAnimeIndex % 4;
1981 batch.matColors[pass.idx] = 104025f;
1982 if (((uint)(this.cell.shore / num11) & 8u) != 0)
1983 {
1984 if (isShoreSand)
1985 {
1986 param.matColor = GetColorInt(ref this.cell.Left.matFloor.matColor, this.cell.Left.sourceFloor.colorMod);
1987 batch.matrices[pass.idx].m03 = param.x + waterEdgeFixShoreSand.x;
1988 batch.matrices[pass.idx].m13 = param.y + waterEdgeFixShoreSand.y;
1989 batch.matrices[pass.idx].m23 = param.z + waterEdgeFixShoreSand.z;
1992 }
1993 else
1994 {
1995 batch.matrices[pass.idx].m03 = param.x;
1996 batch.matrices[pass.idx].m13 = param.y;
1997 batch.matrices[pass.idx].m23 = param.z + waterEdgeFixShore.z;
1998 }
1999 }
2000 else
2001 {
2002 batch.matrices[pass.idx].m03 = param.x;
2003 batch.matrices[pass.idx].m13 = param.y;
2004 batch.matrices[pass.idx].m23 = param.z + waterEdgeFix.z;
2005 batch.tiles[pass.idx] += 12f;
2006 }
2008 pass.idx++;
2009 if (pass.idx == pass.batchSize)
2010 {
2011 pass.NextBatch();
2012 }
2013 }
2014 }
2015 if (flag)
2016 {
2017 param.y += 0.01f * floatY;
2018 }
2019 }
2020 if (flag)
2021 {
2022 param.z -= 1f;
2023 }
2024 }
2025 if (this.cell.skipRender)
2026 {
2027 if (this.cell.pcSync)
2028 {
2029 param.tile = 0f;
2031 }
2032 return;
2033 }
2034 if (hasBridge)
2035 {
2036 param.y = (float)(cz - cx) * screen.tileAlign.y + (float)(int)this.cell.bridgeHeight * _heightMod.y;
2037 param.z = 1000f + param.x * screen.tileWeight.x + param.y * screen.tileWeight.z + (float)(int)this.cell.bridgeHeight * _heightMod.z;
2038 if (flag)
2039 {
2040 param.y += 0.01f * floatY;
2041 }
2042 param.color = floorLight;
2043 param.mat = matBridge;
2044 floorMatColor = ((sourceBridge.colorMod == 0) ? 104025 : GetColorInt(ref matBridge.matColor, sourceBridge.colorMod));
2045 param.dir = this.cell.floorDir;
2046 param.tile = sourceBridge._tiles[this.cell.floorDir % sourceBridge._tiles.Length];
2047 param.matColor = floorMatColor;
2048 sourceBridge.renderData.Draw(param);
2049 if (this.cell.autotileBridge != 0 && sourceBridge.autotile != 0)
2050 {
2053 batch.matrices[pass.idx].m03 = param.x;
2054 batch.matrices[pass.idx].m13 = param.y;
2055 batch.matrices[pass.idx].m23 = param.z + ((this.cell._block != 0) ? 0.8f : 0f);
2056 batch.tiles[pass.idx] = (26 + sourceBridge.autotile / 2) * 32 + sourceBridge.autotile % 2 * 16 + this.cell.autotileBridge;
2057 batch.colors[pass.idx] = param.color + (float)((int)(sourceBridge.autotileBrightness * 100f) * 262144);
2059 pass.idx++;
2060 if (pass.idx == pass.batchSize)
2061 {
2062 pass.NextBatch();
2063 }
2064 }
2065 if (this.cell.shadow != 0)
2066 {
2068 {
2069 param.tile = 448 + this.cell.shadow + 8 + (this.cell.HasFence ? 4 : 0);
2070 param.z -= 0.01f;
2071 sourceBridge.renderData.Draw(param);
2072 }
2073 else
2074 {
2075 pass = passEdge;
2077 batch.matrices[pass.idx].m03 = param.x + ambientShadowFix[this.cell.shadow].x;
2078 batch.matrices[pass.idx].m13 = param.y + ambientShadowFix[this.cell.shadow].y;
2079 batch.matrices[pass.idx].m23 = param.z + ambientShadowFix[this.cell.shadow].z;
2080 batch.tiles[pass.idx] = 448 + this.cell.shadow;
2082 batch.matColors[pass.idx] = 104025f;
2083 pass.idx++;
2084 if (pass.idx == pass.batchSize)
2085 {
2086 pass.NextBatch();
2087 }
2088 }
2089 }
2090 if (this.cell.isBridgeEdge && this.cell.bridgeHeight - this.cell.height >= 3 && this.cell.bridgePillar != byte.MaxValue && !noSlopMode)
2091 {
2092 orgY = param.y;
2093 orgZ = param.z;
2094 param.y += bridgeFix.y;
2095 param.z += bridgeFix.z;
2096 param.dir = 0;
2097 SourceBlock.Row row4 = sourceBridge._bridgeBlock;
2098 float num14 = (float)(this.cell.bridgeHeight - this.cell.height) * _heightMod.y;
2099 if (this.cell.sourceFloor.tileType == TileType.Sky)
2100 {
2101 num14 += (float)EMono._map.config.skyBlockHeight;
2102 }
2103 int num15 = (int)(num14 / heightBlockSize) + 2;
2104 if (this.cell.bridgePillar != 0)
2105 {
2106 row4 = EMono.sources.blocks.rows[this.cell.bridgePillar];
2107 param.tile = row4._tiles[0] + ((num15 == 2) ? 32 : 0);
2108 param.mat = ((sourceBridge.DefaultMaterial == row4.DefaultMaterial) ? sourceBridge.DefaultMaterial : row4.DefaultMaterial);
2109 param.matColor = ((row4.colorMod == 0) ? 104025 : GetColorInt(ref param.mat.matColor, row4.colorMod));
2110 }
2111 else
2112 {
2113 param.mat = matBlock;
2114 param.tile = row4._tiles[0] + 32;
2115 param.matColor = ((row4.colorMod == 0) ? 104025 : GetColorInt(ref matBridge.matColor, row4.colorMod));
2116 }
2117 param.y += ugFixBridgeTop.y;
2118 param.z += ugFixBridgeTop.z;
2119 for (int l = 0; l < num15; l++)
2120 {
2121 if (l == num15 - 1)
2122 {
2123 param.y = (float)(cz - cx) * screen.tileAlign.y + (float)height * _heightMod.y + ugFixBridgeBottom.y;
2124 param.z = 1000f + param.x * screen.tileWeight.x + param.y * screen.tileWeight.z + (float)height * _heightMod.z + ugFixBridgeBottom.z;
2125 }
2126 else
2127 {
2128 param.y += ugFixBridge.y;
2129 param.z += ugFixBridge.z;
2130 }
2131 row4.renderData.Draw(param);
2132 }
2133 param.y = orgY;
2134 param.z = orgZ;
2135 }
2136 }
2137 if (this.cell._deco != 0)
2138 {
2139 param.mat = matFloor;
2140 param.tile = sourceDeco._tiles[floorDir % sourceDeco._tiles.Length];
2141 param.matColor = ((sourceDeco.colorMod == 0) ? 104025 : GetColorInt(ref matDeco.matColor, sourceDeco.colorMod));
2142 param.snow = snowed;
2143 if (sourceDeco.autotile != 0)
2144 {
2145 if (this.cell.autotileDeco != 0)
2146 {
2149 batch.matrices[pass.idx].m03 = param.x;
2150 batch.matrices[pass.idx].m13 = param.y;
2151 batch.matrices[pass.idx].m23 = param.z + ((hasBridge || this.cell._block != 0) ? 0.8f : 0f);
2152 batch.tiles[pass.idx] = (26 + sourceDeco.autotile / 2) * 32 + sourceDeco.autotile % 2 * 16 + this.cell.autotileDeco;
2153 batch.colors[pass.idx] = param.color + (float)((int)(sourceFloor.autotileBrightness * 100f) * 262144);
2155 pass.idx++;
2156 if (pass.idx == pass.batchSize)
2157 {
2158 pass.NextBatch();
2159 }
2160 }
2161 }
2162 else
2163 {
2164 sourceDeco.renderData.Draw(param);
2165 }
2166 }
2167 if (!buildMode && this.cell.highlight != 0)
2168 {
2169 if (this.cell._block != 0 && !this.cell.hasDoor)
2170 {
2171 screen.guide.DrawWall(this.cell.GetPoint(), EMono.Colors.blockColors.MapHighlight, useMarkerPass: true);
2172 }
2173 else
2174 {
2175 passGuideFloor.Add(this.cell.GetPoint(), (int)this.cell.highlight);
2176 }
2177 }
2178 param.color = blockLight;
2179 if (isSnowCovered && (sourceBlock.id != 0 || this.cell.hasDoor) && (snowed || this.cell.isClearSnow) && (this.cell.Front.HasRoof || this.cell.Right.HasRoof))
2180 {
2181 snowed = false;
2182 }
2183 num3 = 0;
2184 if (sourceBlock.id != 0)
2185 {
2186 this.tileType = sourceBlock.tileType;
2187 roomHeight = 0f;
2188 int blockDir = this.cell.blockDir;
2189 bool num16 = this.tileType.blockRenderMode == BlockRenderMode.Floor;
2190 bool flag7 = false;
2191 if (!num16)
2192 {
2193 switch (wallClipMode)
2194 {
2195 case WallClipMode.ByRoom:
2196 if (!this.tileType.RepeatBlock)
2197 {
2198 break;
2199 }
2200 if (currentRoom == null || showFullWall)
2201 {
2202 this.room = this.room ?? this.cell.Front.room ?? this.cell.Right.room ?? this.cell.FrontRight.room;
2204 }
2205 else if (this.room != this.cell.Front.room && (this.cell.Front.room == currentRoom || (this.room?.lot != currentLot && this.cell.Front.room?.lot == currentLot)))
2206 {
2207 this.room = this.cell.Front.room;
2208 _lowblock = !this.cell.Front.lotWall && !this.cell.Front.fullWall;
2209 }
2210 else if (this.room != this.cell.Right.room && (this.cell.Right.room == currentRoom || (this.room?.lot != currentLot && this.cell.Right.room?.lot == currentLot)))
2211 {
2212 this.room = this.cell.Right.room;
2213 _lowblock = !this.cell.Right.lotWall && !this.cell.Right.fullWall;
2214 }
2215 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)))
2216 {
2217 this.room = this.cell.FrontRight.room;
2218 _lowblock = !this.cell.FrontRight.lotWall && !this.cell.FrontRight.fullWall;
2219 }
2220 else
2221 {
2222 this.room = this.room ?? this.cell.Front.room ?? this.cell.Right.room ?? this.cell.FrontRight.room;
2223 _lowblock = true;
2224 if (!this.tileType.IsFullBlock)
2225 {
2226 if (this.cell.lotWall)
2227 {
2228 _lowblock = false;
2229 }
2230 else if (this.room == currentRoom)
2231 {
2232 _lowblock = !this.cell.fullWall;
2233 }
2234 }
2235 }
2236 flag7 = (this.room != null && this.room.data.atrium) || (this.cell.room != null && this.cell.room.data.atrium);
2237 if (flag7)
2238 {
2239 _lowblock = false;
2240 }
2241 if (this.room == null && alwaysLowblock)
2242 {
2243 _lowblock = true;
2244 roomHeight = 0f;
2245 }
2246 if (this.room != null)
2247 {
2248 maxHeight = (float)(cz - cx) * screen.tileAlign.y + (float)this.room.lot.mh * _heightMod.y;
2249 if (showRoof)
2250 {
2251 roomHeight = this.room.lot.realHeight;
2252 break;
2253 }
2254 if ((noRoofMode && currentRoom == null) || (_lowblock && !this.tileType.ForceRpeatBlock))
2255 {
2256 roomHeight = 0f;
2257 break;
2258 }
2259 int num17 = ((this.room.data.maxHeight == 0) ? 2 : this.room.data.maxHeight);
2260 roomHeight = EMono.setting.render.roomHeightMod * (float)((this.room.lot.height < num17) ? this.room.lot.height : num17) + 0.01f * (float)this.room.lot.heightFix;
2261 }
2262 break;
2263 case WallClipMode.ByLot:
2264 if (defaultBlockHeight > 0f || isIndoor)
2265 {
2266 _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);
2267 if (!_lowblock)
2268 {
2270 maxHeight = (float)(cz - cx) * screen.tileAlign.y + (float)(int)this.cell.TopHeight * _heightMod.y;
2271 }
2272 break;
2273 }
2274 if (showFullWall)
2275 {
2276 _lowblock = this.room != null;
2277 if (_lowblock)
2278 {
2279 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)
2280 {
2281 _lowblock = false;
2282 }
2283 }
2284 else if (this.cell.Back.room != null && this.cell.Back.room.lot == (this.cell.Front.room ?? this.cell.Right.room)?.lot)
2285 {
2286 _lowblock = true;
2287 }
2288 }
2289 else
2290 {
2292 }
2293 if (this.tileType.RepeatBlock)
2294 {
2295 this.room = this.room ?? this.cell.Front.room ?? this.cell.Right.room ?? this.cell.FrontRight.room;
2296 if (this.room != null && (!noRoofMode || currentRoom != null) && (!showFullWall || currentRoom == null || this.room.lot == currentRoom.lot))
2297 {
2298 roomHeight = ((_lowblock && !this.tileType.ForceRpeatBlock) ? 0f : this.room.lot.realHeight);
2299 maxHeight = (float)(cz - cx) * screen.tileAlign.y + (float)this.room.lot.mh * _heightMod.y;
2300 }
2301 }
2302 break;
2303 }
2304 }
2305 if (!_lowblock && (double)roomHeight > 1.2 && this.tileType.RepeatBlock)
2306 {
2307 num3 = 1;
2308 }
2309 else if (lowBlock)
2310 {
2311 num3 = 2;
2312 }
2313 param.mat = matBlock;
2314 param.dir = this.cell.blockDir;
2315 param.snow = snowed;
2316 switch (this.tileType.blockRenderMode)
2317 {
2318 case BlockRenderMode.FullBlock:
2319 {
2320 bool invisible = sourceBlock.tileType.Invisible;
2321 if (invisible && (!buildMode || ActionMode.Cinema.IsActive))
2322 {
2323 break;
2324 }
2325 if (this.cell.isSurrounded)
2326 {
2327 switch (innerMode)
2328 {
2329 case InnerMode.InnerBlock:
2330 case InnerMode.BuildMode:
2332 param.color = (int)(50f * blockLight) * 262144;
2333 param.matColor = 104025f;
2334 param.tile = (buildMode ? 1 : 2) + ((_lowblock || defaultBlockHeight > 0f) ? 3000000 : 0);
2336 return;
2337 case InnerMode.None:
2338 case InnerMode.Height:
2339 param.color = blockLight;
2340 break;
2341 }
2342 }
2343 if (snowed)
2344 {
2345 param.color = floorLight;
2346 }
2347 param.color -= (int)(_shadowStrength * 0.8f * 50f) * 262144;
2348 if (currentRoom != null && !showFullWall)
2349 {
2350 _lowblock = true;
2351 roomHeight = 0f;
2352 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))
2353 {
2354 _lowblock = false;
2355 }
2356 if (!_lowblock)
2357 {
2358 int num19 = ((currentRoom.data.maxHeight == 0) ? 2 : currentRoom.data.maxHeight);
2359 roomHeight = EMono.setting.render.roomHeightMod * (float)((currentRoom.lot.height < num19) ? currentRoom.lot.height : num19) + 0.01f * (float)currentRoom.lot.heightFix;
2360 }
2361 }
2362 if (flag7)
2363 {
2364 _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);
2365 if (_lowblock)
2366 {
2367 roomHeight = 0f;
2368 }
2369 }
2370 if (invisible)
2371 {
2372 roomHeight = 0f;
2373 _lowblock = false;
2374 }
2375 if (this.cell.Things.Count > 0)
2376 {
2377 _lowblock = false;
2378 }
2379 param.tile = sourceBlock._tiles[this.cell.blockDir % sourceBlock._tiles.Length] + (_lowblock ? 3000000 : 0);
2380 param.matColor = ((sourceBlock.colorMod == 0) ? 104025 : GetColorInt(ref matBlock.matColor, sourceBlock.colorMod));
2381 if (roomHeight == 0f)
2382 {
2383 if (!this.cell.hasDoor)
2384 {
2385 sourceBlock.renderData.Draw(param);
2386 }
2387 }
2388 else
2389 {
2390 sourceBlock.renderData.DrawRepeatTo(param, maxHeight, roomHeight, ref renderSetting.peakFixBlock, this.cell.hasDoor, this.cell.effect?.FireAmount ?? 0, isBlock: true);
2391 }
2392 Room room = this.cell.Front.room ?? this.cell.room;
2393 if (room == null && this.cell.Right.room != null)
2394 {
2395 room = this.cell.Right.room;
2396 }
2397 if (!invisible && room != null)
2398 {
2399 if (room.lot.idDeco != 0 && !this.cell.hasDoor)
2400 {
2401 param.tile = EMono.sources.blocks.rows[0].ConvertTile(1000 + room.lot.idDeco);
2402 param.matColor = room.lot.colDeco;
2403 float y = param.y;
2404 param.y += (float)room.lot.decoFix * 0.01f;
2406 param.y = y;
2407 }
2408 if (room.lot.idDeco2 != 0 && roomHeight != 0f && (float)room.lot.decoFix2 * 0.01f + heightLimitDeco < roomHeight + maxHeight - param.y)
2409 {
2410 param.tile = EMono.sources.blocks.rows[0].ConvertTile(1000 + room.lot.idDeco2);
2411 param.matColor = room.lot.colDeco2;
2412 float y2 = param.y;
2413 float num20 = param.z;
2414 param.y += (float)room.lot.decoFix2 * 0.01f;
2415 param.z += (float)room.lot.decoFix2 * 0.01f * heightModDeco;
2417 param.y = y2;
2418 param.z = num20;
2419 }
2420 }
2421 room = this.cell.Right.room ?? this.cell.room;
2422 if (room == null && this.cell.Front.room != null)
2423 {
2424 room = this.cell.Front.room;
2425 }
2426 if (!invisible && room != null)
2427 {
2428 if (room.lot.idDeco != 0 && !this.cell.hasDoor)
2429 {
2430 param.tile = EMono.sources.blocks.rows[0].ConvertTile(1000 + room.lot.idDeco) * -1;
2431 param.matColor = room.lot.colDeco;
2432 float y3 = param.y;
2433 param.y += (float)room.lot.decoFix * 0.01f;
2435 param.y = y3;
2436 }
2437 if (room.lot.idDeco2 != 0 && roomHeight != 0f && (float)room.lot.decoFix2 * 0.01f + heightLimitDeco < roomHeight + maxHeight - param.y)
2438 {
2439 param.tile = EMono.sources.blocks.rows[0].ConvertTile(1000 + room.lot.idDeco2) * -1;
2440 param.matColor = room.lot.colDeco2;
2441 float y4 = param.y;
2442 float num21 = param.z;
2443 param.y += (float)room.lot.decoFix2 * 0.01f;
2444 param.z += (float)room.lot.decoFix2 * 0.01f * heightModDeco;
2446 param.y = y4;
2447 param.z = num21;
2448 }
2449 }
2450 break;
2451 }
2452 case BlockRenderMode.WallOrFence:
2453 {
2455 {
2456 showFullWall = true;
2457 _lowblock = false;
2458 }
2459 orgY = param.y;
2460 orgZ = param.z;
2461 param.color = (this.tileType.IsFence ? (floorLight - (float)((int)(_shadowStrength * 0.8f * 50f) * 262144)) : blockLight);
2462 bool flag8 = blockDir == 1 || _lowblock || flag7;
2463 bool flag9 = blockDir == 0 || _lowblock || flag7;
2464 if (!showFullWall && currentRoom != null)
2465 {
2466 if (!flag8)
2467 {
2468 if (currentRoom == this.cell.room || (this.cell.lotWall && this.cell.room?.lot == currentLot && this.cell.Front.room != currentRoom))
2469 {
2470 if (!this.cell.IsRoomEdge || (this.cell.Front.room != this.cell.room && this.cell.FrontRight.room != this.cell.room))
2471 {
2472 flag8 = true;
2473 }
2474 }
2475 else if ((!this.cell.Front.lotWall || this.cell.Front.room?.lot != currentLot) && this.cell.Front.room != currentRoom)
2476 {
2477 flag8 = true;
2478 }
2479 }
2480 if (!flag9)
2481 {
2482 if (currentRoom == this.cell.room || (this.cell.lotWall && this.cell.room?.lot == currentLot && this.cell.Right.room != currentRoom))
2483 {
2484 if (!this.cell.IsRoomEdge || (this.cell.Right.room != this.cell.room && this.cell.FrontRight.room != this.cell.room))
2485 {
2486 flag9 = true;
2487 }
2488 }
2489 else if ((!this.cell.Right.lotWall || this.cell.Right.room?.lot != currentLot) && this.cell.Right.room != currentRoom)
2490 {
2491 flag9 = true;
2492 }
2493 }
2494 }
2495 if (blockDir == 0 || blockDir == 2)
2496 {
2497 param.dir = 0;
2498 Room room2 = this.cell.Front.room ?? this.cell.room;
2499 if (room2 != null && this.tileType.IsWall)
2500 {
2501 if (room2.lot.idDeco != 0 && !this.cell.hasDoor)
2502 {
2503 param.tile = EMono.sources.blocks.rows[0].ConvertTile(1000 + room2.lot.idDeco);
2504 param.matColor = room2.lot.colDeco;
2505 param.y += (float)room2.lot.decoFix * 0.01f;
2507 param.y = orgY;
2508 }
2509 if (room2.lot.idDeco2 != 0 && roomHeight != 0f && !flag8 && (float)room2.lot.decoFix2 * 0.01f + heightLimitDeco < roomHeight + maxHeight - param.y)
2510 {
2511 param.tile = EMono.sources.blocks.rows[0].ConvertTile(1000 + room2.lot.idDeco2);
2512 param.matColor = room2.lot.colDeco2;
2513 param.y += (float)room2.lot.decoFix2 * 0.01f;
2514 param.z += (float)room2.lot.decoFix2 * 0.01f * heightModDeco;
2516 param.y = orgY;
2517 param.z = orgZ;
2518 }
2519 }
2520 Cell left = this.cell.Left;
2521 if (blockDir == 2 && left.sourceBlock.tileType.IsWallOrFence && !this.cell.crossWall)
2522 {
2523 _sourceBlock = left.sourceBlock;
2524 param.mat = left.matBlock;
2525 }
2526 else
2527 {
2529 param.mat = matBlock;
2530 }
2531 this.tileType = _sourceBlock.tileType;
2532 param.tile = (tile = _sourceBlock._tiles[0] + ((flag8 && this.tileType.UseLowBlock) ? 32 : 0));
2533 if (_sourceBlock.useAltColor)
2534 {
2535 param.matColor = ((_sourceBlock.colorMod == 0) ? 104025 : GetColorInt(ref param.mat.altColor, _sourceBlock.colorMod));
2536 }
2537 else
2538 {
2539 param.matColor = ((_sourceBlock.colorMod == 0) ? 104025 : GetColorInt(ref param.mat.matColor, _sourceBlock.colorMod));
2540 }
2541 if (roomHeight == 0f || flag8 || !this.tileType.RepeatBlock)
2542 {
2543 if (!this.cell.hasDoor)
2544 {
2545 _sourceBlock.renderData.Draw(param);
2546 }
2547 }
2548 else
2549 {
2550 _sourceBlock.renderData.DrawRepeatTo(param, maxHeight, roomHeight, ref renderSetting.peakFix, this.cell.hasDoor, this.cell.effect?.FireAmount ?? 0);
2551 }
2552 param.z += cornerWallFix2.z;
2553 if ((blockDir == 2 || (this.cell.Front.HasWallOrFence && this.cell.Front.blockDir != 0)) != this.cell.isToggleWallPillar)
2554 {
2555 if (this.cell.Back.IsSnowTile && this.cell.Right.IsSnowTile)
2556 {
2557 param.snow = true;
2558 }
2559 param.tile = _sourceBlock._tiles[0] + ((flag8 && flag9 && this.tileType.UseLowBlock && !flag7) ? 32 : 0) + (this.tileType.IsFence ? 32 : 64);
2560 if (roomHeight == 0f || !this.tileType.RepeatBlock || (flag8 && flag9 && !flag7))
2561 {
2562 _sourceBlock.renderData.Draw(param);
2563 }
2564 else
2565 {
2566 _sourceBlock.renderData.DrawRepeatTo(param, maxHeight, roomHeight, ref renderSetting.peakFix);
2567 }
2568 }
2569 if (!flag8 && !showRoof && this.cell.Left.HasWallOrFence && this.cell.Left.blockDir != 0 && !this.cell.Left.isToggleWallPillar)
2570 {
2571 orgX = param.x;
2572 param.tile = _sourceBlock._tiles[0] + ((flag8 && this.tileType.UseLowBlock && !flag7) ? 32 : 0) + (this.tileType.IsFence ? 32 : 64);
2573 param.x += cornerWallFix3.x;
2574 param.y += cornerWallFix3.y;
2575 param.z += cornerWallFix3.z;
2576 if (!flag7 && (roomHeight == 0f || flag8))
2577 {
2578 _sourceBlock.renderData.Draw(param);
2579 }
2580 else
2581 {
2582 _sourceBlock.renderData.DrawRepeatTo(param, maxHeight, roomHeight + cornerWallFix.y, ref renderSetting.peakFix);
2583 }
2584 param.x = orgX;
2585 }
2586 else if (this.cell.FrontLeft.HasWallOrFence && this.cell.FrontLeft.blockDir != 0 && (!flag8 || !this.cell.Left.HasWall) && !this.cell.isToggleWallPillar)
2587 {
2588 orgX = param.x;
2589 param.tile = _sourceBlock._tiles[0] + ((flag8 && this.tileType.UseLowBlock && !flag7) ? 32 : 0) + (this.tileType.IsFence ? 32 : 64);
2590 param.x += cornerWallFix.x;
2591 param.y += cornerWallFix.y;
2592 param.z += cornerWallFix.z;
2593 if (!flag7 && (roomHeight == 0f || flag8))
2594 {
2595 _sourceBlock.renderData.Draw(param);
2596 }
2597 else
2598 {
2599 _sourceBlock.renderData.DrawRepeatTo(param, maxHeight, roomHeight + cornerWallFix.y, ref renderSetting.peakFix);
2600 }
2601 param.x = orgX;
2602 }
2603 }
2604 if (blockDir == 1 || blockDir == 2)
2605 {
2606 param.y = orgY;
2607 param.z = orgZ;
2608 param.dir = 1;
2609 Room room3 = this.cell.Right.room ?? this.cell.room;
2610 if (room3 != null && this.tileType.IsWall)
2611 {
2612 if (room3.lot.idDeco != 0 && !this.cell.hasDoor)
2613 {
2614 param.tile = -EMono.sources.blocks.rows[0].ConvertTile(1000 + room3.lot.idDeco);
2615 param.matColor = room3.lot.colDeco;
2616 param.y += (float)room3.lot.decoFix * 0.01f;
2618 param.y = orgY;
2619 }
2620 if (room3.lot.idDeco2 != 0 && roomHeight != 0f && !flag9 && (float)room3.lot.decoFix2 * 0.01f + heightLimitDeco < roomHeight + maxHeight - param.y)
2621 {
2622 param.tile = -EMono.sources.blocks.rows[0].ConvertTile(1000 + room3.lot.idDeco2);
2623 param.matColor = room3.lot.colDeco2;
2624 param.y += (float)room3.lot.decoFix2 * 0.01f;
2625 param.z += (float)room3.lot.decoFix2 * 0.01f * heightModDeco;
2627 param.y = orgY;
2628 param.z = orgZ;
2629 }
2630 }
2631 if (blockDir == 2 && this.cell.room == null && this.cell.Right.room != null)
2632 {
2633 Room room4 = this.cell.Right.room;
2634 maxHeight = (float)(cz - cx) * screen.tileAlign.y + (float)room4.lot.mh * _heightMod.y;
2635 if (showRoof)
2636 {
2637 roomHeight = room4.lot.realHeight;
2638 }
2639 else if ((noRoofMode && currentRoom == null) || (_lowblock && !this.tileType.ForceRpeatBlock))
2640 {
2641 roomHeight = 0f;
2642 }
2643 else
2644 {
2645 int num22 = ((room4.data.maxHeight == 0) ? 2 : room4.data.maxHeight);
2646 roomHeight = EMono.setting.render.roomHeightMod * (float)((room4.lot.height < num22) ? room4.lot.height : num22) + 0.01f * (float)room4.lot.heightFix;
2647 }
2648 }
2649 Cell back2 = this.cell.Back;
2650 if (blockDir == 2 && back2.sourceBlock.tileType.IsWallOrFence && !this.cell.crossWall)
2651 {
2652 _sourceBlock = back2.sourceBlock;
2653 param.mat = back2.matBlock;
2654 }
2655 else
2656 {
2658 param.mat = matBlock;
2659 }
2660 this.tileType = _sourceBlock.tileType;
2661 param.tile = (tile = -_sourceBlock._tiles[0] + ((flag9 && this.tileType.UseLowBlock) ? (-32) : 0));
2662 if (_sourceBlock.useAltColor)
2663 {
2664 param.matColor = ((_sourceBlock.colorMod == 0) ? 104025 : GetColorInt(ref param.mat.altColor, _sourceBlock.colorMod));
2665 }
2666 else
2667 {
2668 param.matColor = ((_sourceBlock.colorMod == 0) ? 104025 : GetColorInt(ref param.mat.matColor, _sourceBlock.colorMod));
2669 }
2670 param.color += _rightWallShade;
2671 if (roomHeight == 0f || flag9 || !this.tileType.RepeatBlock)
2672 {
2673 if (!this.cell.hasDoor)
2674 {
2675 _sourceBlock.renderData.Draw(param);
2676 }
2677 }
2678 else
2679 {
2680 _sourceBlock.renderData.DrawRepeatTo(param, maxHeight, roomHeight, ref renderSetting.peakFix, this.cell.hasDoor, this.cell.effect?.FireAmount ?? 0);
2681 }
2682 if ((this.cell.Right.HasWallOrFence && this.cell.Right.blockDir != 1) != this.cell.isToggleWallPillar && (blockDir != 2 || !this.cell.isToggleWallPillar))
2683 {
2684 if (this.cell.Left.IsSnowTile && this.cell.Front.IsSnowTile)
2685 {
2686 param.snow = true;
2687 }
2688 orgX = param.x;
2689 param.tile = _sourceBlock._tiles[0] + ((flag9 && this.tileType.UseLowBlock && !flag7) ? 32 : 0) + (this.tileType.IsFence ? 32 : 64);
2690 if (!flag7 && (roomHeight == 0f || !this.tileType.RepeatBlock || flag9))
2691 {
2692 _sourceBlock.renderData.Draw(param);
2693 }
2694 else
2695 {
2696 _sourceBlock.renderData.DrawRepeatTo(param, maxHeight, roomHeight, ref renderSetting.peakFix);
2697 }
2698 param.x = orgX;
2699 }
2700 }
2701 param.y = orgY;
2702 param.z = orgZ;
2703 break;
2704 }
2705 case BlockRenderMode.HalfBlock:
2706 param.color = floorLight;
2707 _sourceBlock = ((sourceBlock.id == 5) ? EMono.sources.blocks.rows[matBlock.defBlock] : sourceBlock);
2708 param.tile = _sourceBlock._tiles[0];
2709 param.matColor = ((_sourceBlock.colorMod == 0) ? 104025 : GetColorInt(ref matBlock.matColor, _sourceBlock.colorMod));
2710 param.tile2 = _sourceBlock.sourceAutoFloor._tiles[0];
2711 param.halfBlockColor = ((_sourceBlock.sourceAutoFloor.colorMod == 0) ? 104025 : GetColorInt(ref matBlock.matColor, _sourceBlock.sourceAutoFloor.colorMod));
2712 sourceBlock.renderData.Draw(param);
2713 break;
2714 case BlockRenderMode.Pillar:
2715 {
2716 RenderData renderData2 = sourceBlock.renderData;
2717 param.tile = sourceBlock._tiles[this.cell.blockDir % sourceBlock._tiles.Length];
2718 param.matColor = ((sourceBlock.colorMod == 0) ? 104025 : GetColorInt(ref matBlock.matColor, sourceBlock.colorMod));
2719 int num18 = this.cell.objDir + ((this.cell.objDir >= 7) ? this.cell.objDir : 0) + 1;
2720 if (num18 == 0)
2721 {
2722 renderData2.Draw(param);
2723 }
2724 else
2725 {
2726 renderData2.DrawRepeat(param, num18, sourceBlock.tileType.RepeatSize);
2727 }
2728 param.tile = renderData2.idShadow;
2729 SourcePref shadowPref2 = renderData2.shadowPref;
2730 int shadow4 = shadowPref2.shadow;
2731 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);
2732 break;
2733 }
2734 case BlockRenderMode.Floor:
2735 param.color = floorLight;
2736 param.tile = sourceBlock._tiles[this.cell.blockDir % sourceBlock._tiles.Length];
2737 param.matColor = ((sourceBlock.colorMod == 0) ? 104025 : GetColorInt(ref matBlock.matColor, sourceBlock.colorMod));
2738 sourceBlock.renderData.Draw(param);
2739 break;
2740 default:
2741 param.color = floorLight;
2742 param.tile = sourceBlock._tiles[this.cell.blockDir % sourceBlock._tiles.Length] + ((_lowblock && this.tileType.UseLowBlock) ? 3000000 : 0);
2743 param.matColor = ((sourceBlock.colorMod == 0) ? 104025 : GetColorInt(ref matBlock.matColor, sourceBlock.colorMod));
2744 if (roomHeight == 0f)
2745 {
2746 sourceBlock.renderData.Draw(param);
2747 }
2748 else
2749 {
2750 sourceBlock.renderData.DrawRepeatTo(param, maxHeight, roomHeight, ref renderSetting.peakFixBlock);
2751 }
2752 break;
2753 }
2754 }
2755 if (this.cell.pcSync && EMono.player.lightPower > 0f && !cinemaMode)
2756 {
2757 if (this.cell.room != null || !this.cell.IsRoomEdge || !showRoof)
2758 {
2759 goto IL_7327;
2760 }
2761 if (this.cell._block == 0 || !this.cell.sourceBlock.tileType.RepeatBlock)
2762 {
2763 Room obj = this.cell.FrontRight.room;
2764 if (obj == null || !obj.HasRoof)
2765 {
2766 goto IL_7327;
2767 }
2768 }
2769 }
2770 goto IL_7387;
2771 IL_7eb8:
2772 if (detail.things.Count == 0 && detail.charas.Count == 0)
2773 {
2774 return;
2775 }
2776 int num23 = 0;
2777 thingPos.x = 0f;
2778 thingPos.y = 0f;
2779 thingPos.z = 0f;
2780 freePos.x = (freePos.y = (freePos.z = 0f));
2781 if (this.cell.HasRamp)
2782 {
2783 Vector3 rampFix = sourceBlock.tileType.GetRampFix(this.cell.blockDir);
2784 param.x += rampFix.x;
2785 param.y += rampFix.y;
2786 param.z += rampFix.z;
2787 freePos.x += rampFix.x;
2788 freePos.y += rampFix.y;
2789 freePos.z += rampFix.z;
2790 }
2791 param.y += (flag ? 0f : ((this.cell._bridge != 0) ? this.cell.sourceBridge.tileType.FloorHeight : sourceFloor.tileType.FloorHeight));
2792 orgPos.x = (orgX = param.x);
2793 orgPos.y = (orgY = param.y);
2794 orgPos.z = (orgZ = param.z);
2795 if (flag && liquidLv > 0)
2796 {
2797 if (liquidLv > 10)
2798 {
2799 liquidLv = TileType.FloorWaterShallow.LiquidLV * 10;
2800 }
2801 liquidLv -= (int)(floatY * 0.5f);
2802 param.liquidLv = liquidLv;
2804 }
2805 Thing thing = null;
2806 bool shadow = liquidLv == 0;
2807 float num24 = 0f;
2808 float num25 = 0f;
2809 float num26 = 0f;
2810 float num27 = 0f;
2811 bool flag10 = false;
2812 float num28 = 0f;
2813 bool flag11 = false;
2814 float num29 = 0f;
2815 if (detail.things.Count > 0 && isSeen)
2816 {
2817 _ = zSetting.max1;
2818 float num30 = 0f;
2819 for (int m = 0; m < detail.things.Count; m++)
2820 {
2821 Thing t = detail.things[m];
2822 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))
2823 {
2824 continue;
2825 }
2827 bool isInstalled = t.IsInstalled;
2828 SourcePref pref = t.Pref;
2829 if (!isInstalled && t.category.tileDummy != 0)
2830 {
2832 }
2833 float num31 = ((tileType.UseMountHeight && isInstalled) ? 0f : ((pref.height < 0f) ? 0f : ((pref.height == 0f) ? 0.1f : pref.height)));
2834 if (t.ignoreStackHeight)
2835 {
2836 thingPos.y -= num24;
2837 thingPos -= altitudeFix * num25;
2838 }
2839 shadow = thingPos.y < 0.16f && num29 < 0.16f;
2840 _ = pref.bypassShadow;
2841 param.shadowFix = 0f - thingPos.y;
2842 param.liquidLv = ((thingPos.y + (float)t.altitude < 0.1f) ? liquidLv : 0);
2843 if (t.isRoofItem)
2844 {
2845 param.snow = isSnowCovered && !this.cell.isClearSnow;
2846 SetRoofHeight(param, this.cell, cx, cz);
2847 _actorPos.x = param.x;
2848 _actorPos.y = param.y;
2849 _actorPos.z = param.z + num30;
2850 if (this.room != null)
2851 {
2852 param.color = GetRoofLight(this.room.lot);
2853 }
2854 shadow = false;
2855 param.liquidLv = 0;
2856 }
2857 else
2858 {
2859 param.snow = snowed;
2860 _actorPos.x = orgX + num27;
2861 _actorPos.y = orgY;
2862 _actorPos.z = orgZ + num30 + thingPos.z;
2863 if (tileType.CanStack || !isInstalled)
2864 {
2865 if (thing?.id != t.id)
2866 {
2867 _actorPos.x += thingPos.x;
2868 }
2869 _actorPos.y += thingPos.y;
2870 if (t.trait.IgnoreLastStackHeight && (thing == null || !thing.trait.IgnoreLastStackHeight))
2871 {
2872 thingPos.y -= num24;
2873 if (thing != null)
2874 {
2875 _actorPos.z -= 0.2f;
2876 thingPos.z -= 0.2f;
2877 }
2878 _actorPos.y -= num24;
2879 }
2880 _actorPos.z += renderSetting.thingZ + (float)m * -0.01f + zSetting.mod1 * thingPos.y;
2881 }
2882 if (isInstalled)
2883 {
2884 if (t.TileType.IsRamp)
2885 {
2886 Vector3 rampFix2 = t.TileType.GetRampFix(t.dir, pref);
2887 orgX += rampFix2.x;
2888 orgY += rampFix2.y;
2889 orgZ += rampFix2.z;
2890 freePos.x += rampFix2.x;
2891 freePos.y += rampFix2.y;
2892 freePos.z += rampFix2.z;
2893 if (!this.cell.IsTopWater || t.altitude > 0)
2894 {
2895 num29 += rampFix2.y;
2896 }
2897 liquidLv -= (int)(rampFix2.y * 150f);
2898 if (liquidLv < 0)
2899 {
2900 liquidLv = 0;
2901 }
2902 }
2903 else if (!flag11 && t.trait.IsChangeFloorHeight && !t.ignoreStackHeight)
2904 {
2905 orgY += num31 + (float)t.altitude * altitudeFix.y;
2906 orgZ += (float)t.altitude * altitudeFix.z;
2907 freePos.y += num31 + (float)t.altitude * altitudeFix.y;
2908 if (!this.cell.IsTopWater || t.altitude > 0)
2909 {
2910 num29 += num31 + (float)t.altitude * altitudeFix.y;
2911 }
2912 _actorPos.x += pref.x * (float)((!t.flipX) ? 1 : (-1));
2913 _actorPos.z += pref.z;
2914 thingPos.z += pref.z;
2915 liquidLv -= (int)(num31 * 150f);
2916 if (liquidLv < 0)
2917 {
2918 liquidLv = 0;
2919 }
2920 }
2921 else
2922 {
2923 thingPos.y += num31;
2925 {
2926 if ((tileType != TileType.Illumination || !this.cell.HasObj) && !tileType.AlwaysShow)
2927 {
2929 {
2930 continue;
2931 }
2932 if (hideHang && (this.cell.room?.lot != currentLot || (!this.cell.lotWall && this.cell.room != currentRoom)))
2933 {
2934 Room room5 = ((t.dir == 0) ? this.cell.Back.room : this.cell.Left.room);
2936 {
2937 if (room5 == null || !room5.data.showWallItem)
2938 {
2939 continue;
2940 }
2941 }
2942 else if (t.altitude >= lowWallObjAltitude)
2943 {
2944 continue;
2945 }
2946 }
2947 }
2949 {
2950 flag10 = true;
2951 }
2953 shadow = false;
2954 param.liquidLv = 0;
2955 if (t.freePos)
2956 {
2957 _actorPos.x += t.fx;
2958 _actorPos.y += t.fy;
2959 }
2960 }
2961 else
2962 {
2963 thingPos.y += (float)t.altitude * altitudeFix.y;
2964 thingPos.z += (float)t.altitude * altitudeFix.z;
2965 }
2966 _actorPos.x += pref.x * (float)((!t.flipX) ? 1 : (-1));
2967 _actorPos.z += pref.z;
2968 if (pref.height >= 0f)
2969 {
2970 thingPos.z += pref.z;
2971 }
2972 }
2973 if (!tileType.UseMountHeight && m > 10)
2974 {
2975 flag11 = true;
2976 }
2977 }
2978 else
2979 {
2980 thingPos.y += num31;
2981 _actorPos.x += pref.x * (float)((!t.flipX) ? 1 : (-1));
2982 _actorPos.z += pref.z;
2983 thingPos.z += pref.z;
2984 }
2985 if (t.isFloating && isWater && !hasBridge && !flag)
2986 {
2987 flag = true;
2988 float num32 = ((this.cell._bridge != 0) ? sourceBridge.tileType.FloorHeight : sourceFloor.tileType.FloorHeight);
2989 orgY += 0.01f * floatY - num32;
2991 {
2992 num28 = num31;
2993 }
2994 _actorPos.y += 0.01f * floatY - num32;
2995 if (liquidLv > 10)
2996 {
2997 liquidLv = TileType.FloorWaterShallow.LiquidLV * 10;
2998 }
2999 liquidLv -= (int)(floatY * 0.5f);
3000 if (liquidLv < 0)
3001 {
3002 liquidLv = 0;
3003 }
3004 param.liquidLv = liquidLv;
3005 }
3006 num24 = num31;
3007 if (t.sourceCard.multisize && !t.trait.IsGround)
3008 {
3009 num30 += zSetting.multiZ;
3010 }
3011 orgZ += t.renderer.data.stackZ;
3012 if (param.liquidLv > 0)
3013 {
3014 param.liquidLv += pref.liquidMod;
3015 if (param.liquidLv < 1)
3016 {
3017 param.liquidLv = 1;
3018 }
3019 else if (param.liquidLv > 99 + pref.liquidModMax)
3020 {
3021 param.liquidLv = 99 + pref.liquidModMax;
3022 }
3023 }
3024 }
3025 if (!isInstalled || !tileType.UseMountHeight)
3026 {
3027 if (t.altitude != 0)
3028 {
3030 if (!t.isRoofItem)
3031 {
3032 num26 += (float)t.altitude;
3033 num25 = t.altitude;
3034 }
3035 }
3036 if (num26 >= 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)))
3037 {
3038 continue;
3039 }
3040 if (t.freePos)
3041 {
3042 if (t.isRoofItem)
3043 {
3044 _actorPos.x += t.fx;
3045 _actorPos.y += t.fy - (float)t.altitude * altitudeFix.y;
3046 }
3047 else
3048 {
3049 _actorPos.x = orgX + t.fx - freePos.x;
3050 _actorPos.y = orgY + t.fy - freePos.y;
3051 }
3052 }
3053 if (t.trait is TraitDoor && (t.trait as TraitDoor).IsOpen())
3054 {
3055 _actorPos.z += -0.5f;
3056 }
3057 }
3058 if (!t.sourceCard.multisize || (t.pos.x == cx && t.pos.z == cz))
3059 {
3060 if (iconMode != 0)
3061 {
3062 int num33 = 0;
3063 switch (iconMode)
3064 {
3065 case CardIconMode.Visibility:
3066 if (t.isMasked)
3067 {
3068 num33 = 17;
3069 }
3070 break;
3071 case CardIconMode.State:
3072 if (t.placeState == PlaceState.installed)
3073 {
3074 num33 = 18;
3075 }
3076 break;
3077 case CardIconMode.Deconstruct:
3078 if (t.isDeconstructing)
3079 {
3080 num33 = 14;
3081 }
3082 break;
3083 }
3085 {
3086 num33 = 13;
3087 }
3088 if (num33 != 0)
3089 {
3090 passGuideBlock.Add(_actorPos.x, _actorPos.y, _actorPos.z - 10f, num33);
3091 }
3092 }
3094 if (_lowblock && t.trait.UseLowblock && !this.cell.HasFullBlock)
3095 {
3096 param.tile += ((param.tile < 0f) ? (-64) : 64);
3097 }
3098 if (t.trait is TraitTrolley && EMono.pc.ai is AI_Trolley aI_Trolley && aI_Trolley.trolley.owner == t)
3099 {
3100 RenderParam _param = new RenderParam(param);
3101 EMono.core.actionsLateUpdate.Add(delegate
3102 {
3103 t.SetRenderParam(_param);
3104 _actorPos.x = EMono.pc.renderer.position.x;
3105 _actorPos.y = EMono.pc.renderer.position.y - pref.height;
3106 _actorPos.z = EMono.pc.renderer.position.z + 0.02f;
3107 t.renderer.Draw(_param, ref _actorPos, !t.noShadow && (shadow || tileType.AlwaysShowShadow));
3108 });
3109 }
3110 else
3111 {
3112 t.renderer.Draw(param, ref _actorPos, !t.noShadow && (shadow || tileType.AlwaysShowShadow));
3113 }
3114 }
3115 if (isInstalled)
3116 {
3117 num27 += pref.stackX * (float)((!t.flipX) ? 1 : (-1));
3118 }
3119 param.x = orgX;
3120 param.y = orgY;
3121 param.z = orgZ;
3122 param.color = floorLight;
3123 thing = t;
3124 if (pref.Float)
3125 {
3126 liquidLv = 0;
3127 }
3128 }
3129 }
3130 orgY += num28;
3131 if (detail.charas.Count <= 0)
3132 {
3133 return;
3134 }
3135 param.shadowFix = 0f - num29;
3136 param.color += 1310720f;
3137 float max = zSetting.max2;
3138 for (int n = 0; n < detail.charas.Count; n++)
3139 {
3140 Chara chara = detail.charas[n];
3141 if (chara.host != null)
3142 {
3143 continue;
3144 }
3145 if (chara != EMono.pc && chara != LayerDrama.alwaysVisible)
3146 {
3147 if (chara.mimicry != null && chara.mimicry.IsThing)
3148 {
3149 if (flag3 || fogged || !this.cell.isSeen)
3150 {
3151 continue;
3152 }
3153 }
3154 else if (flag3 || fogged || (!showAllCards && !EMono.player.CanSee(chara)))
3155 {
3156 continue;
3157 }
3158 }
3159 _actorPos.x = orgX;
3160 _actorPos.y = orgY;
3161 _actorPos.z = orgZ;
3162 chara.SetRenderParam(param);
3163 _ = chara.IsAliveInCurrentZone;
3164 if (chara.isRestrained)
3165 {
3166 TraitShackle restrainer = chara.GetRestrainer();
3167 if (restrainer != null)
3168 {
3169 Vector3 getRestrainPos = restrainer.GetRestrainPos;
3170 if (getRestrainPos != default(Vector3))
3171 {
3172 Vector3 position = restrainer.owner.renderer.position;
3173 float defCharaHeight = EMono.setting.render.defCharaHeight;
3174 float num34 = getRestrainPos.y + defCharaHeight - ((chara.Pref.height == 0f) ? defCharaHeight : chara.source.pref.height);
3175 _actorPos.x = position.x + getRestrainPos.x * (float)((restrainer.owner.dir % 2 == 0) ? 1 : (-1));
3176 _actorPos.y = position.y + num34;
3177 _actorPos.z = position.z + getRestrainPos.z;
3178 param.liquidLv = 0;
3179 param.shadowFix = orgY - _actorPos.y;
3180 chara.renderer.SetFirst(first: true);
3181 chara.renderer.Draw(param, ref _actorPos, drawShadow: true);
3182 param.shadowFix = 0f;
3183 continue;
3184 }
3185 }
3186 }
3187 if (!chara.sourceCard.multisize || (chara.pos.x == cx && chara.pos.z == cz))
3188 {
3189 if (chara.IsDeadOrSleeping && chara.IsPCC)
3190 {
3191 float num35 = chara.renderer.data.size.y * 0.3f;
3192 if (thingPos.y > max)
3193 {
3194 thingPos.y = max;
3195 }
3196 float num36 = thingPos.y + num35;
3197 float num37 = (float)n * -0.01f;
3198 if (num36 > zSetting.thresh1)
3199 {
3200 num37 = zSetting.mod1;
3201 }
3202 _actorPos.x += thingPos.x;
3203 _actorPos.y += thingPos.y;
3204 _actorPos.z += renderSetting.laydownZ + num37;
3205 param.liquidLv = ((thingPos.y == 0f && liquidLv > 0) ? 90 : 0);
3206 thingPos.y += num35 * 0.8f;
3207 chara.renderer.Draw(param, ref _actorPos, liquidLv == 0);
3208 }
3209 else
3210 {
3211 param.liquidLv = liquidLv;
3212 if (isUnderwater)
3213 {
3214 if (chara.Pref.FloatUnderwater)
3215 {
3216 float num38 = ((this.cell._bridge != 0) ? sourceBridge.tileType.FloorHeight : sourceFloor.tileType.FloorHeight);
3217 float num39 = floatYs[chara.uid % 10] + 10f + (float)(chara.uid % 30);
3218 orgY += 0.01f * num39 - num38;
3219 _actorPos.y += 0.01f * num39 - num38;
3220 param.shadowFix -= 0.01f * num39 - num38;
3221 }
3222 }
3223 else if (liquidLv > 0)
3224 {
3225 if (chara.Pref.Float && !flag && !hasBridge)
3226 {
3227 if (liquidLv > 20)
3228 {
3229 float num40 = ((this.cell._bridge != 0) ? sourceBridge.tileType.FloorHeight : sourceFloor.tileType.FloorHeight);
3230 orgY += 0.01f * floatY - num40;
3231 _actorPos.y += 0.01f * floatY - num40;
3232 int num41 = TileType.FloorWaterShallow.LiquidLV * 10;
3233 num41 -= (int)(floatY * 0.5f);
3234 param.liquidLv = num41;
3235 }
3236 else
3237 {
3238 param.liquidLv -= 20;
3239 }
3240 }
3241 param.liquidLv += chara.Pref.liquidMod;
3242 if (param.liquidLv < 1)
3243 {
3244 param.liquidLv = 1;
3245 }
3246 else if (param.liquidLv > 99 + chara.Pref.liquidModMax)
3247 {
3248 param.liquidLv = 99 + chara.Pref.liquidModMax;
3249 }
3250 }
3251 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))
3252 {
3253 _actorPos += renderSetting.charaPos[1 + ((num23 < 4) ? num23 : 3)];
3254 }
3255 _actorPos.z += 0.01f * (float)n + renderSetting.charaZ;
3256 num23++;
3257 if (flag10)
3258 {
3259 _actorPos.z += chara.renderer.data.hangedFixZ;
3260 }
3261 chara.renderer.Draw(param, ref _actorPos, liquidLv == 0);
3262 }
3263 }
3264 param.x = orgX;
3265 param.y = orgY;
3266 param.z = orgZ;
3267 }
3268 void Draw(int tile)
3269 {
3270 pass = passEdge;
3273 batch.matrices[pass.idx].m03 = param.x + waterEdgeFixShoreSand.x;
3274 batch.matrices[pass.idx].m13 = param.y + waterEdgeFixShoreSand.y;
3275 batch.matrices[pass.idx].m23 = param.z + waterEdgeFixShoreSand.z;
3278 pass.idx++;
3279 if (pass.idx == pass.batchSize)
3280 {
3281 pass.NextBatch();
3282 }
3283 }
3284 }
3285
3286 public Vector3 GetThingPosition(Card tg, Point p)
3287 {
3288 Vector3 zero = Vector3.zero;
3289 float num = 0f;
3290 cell = p.cell;
3292 if (!tg.TileType.UseMountHeight)
3293 {
3295 {
3296 zero.z -= 1f;
3297 }
3298 else if (!tg.sourceCard.multisize)
3299 {
3300 float num2 = ((cell._bridge != 0) ? cell.sourceBridge.tileType.FloorHeight : sourceFloor.tileType.FloorHeight);
3301 zero.y += num2;
3302 zero.z -= num2 * heightMod.z;
3303 }
3304 if (cell.HasRamp)
3305 {
3306 Vector3 rampFix = cell.sourceBlock.tileType.GetRampFix(cell.blockDir);
3307 zero.x += rampFix.x;
3308 zero.y += rampFix.y;
3309 zero.z += rampFix.z;
3310 }
3311 }
3312 if (tg.sourceCard.multisize)
3313 {
3314 zero.z -= 1f;
3315 }
3316 SourcePref pref = tg.Pref;
3317 zero.x += pref.x * (float)((!tg.flipX) ? 1 : (-1));
3318 zero.z += pref.z;
3319 detail = cell.detail;
3320 if (tg.isChara)
3321 {
3322 return zero;
3323 }
3324 bool flag = false;
3326 {
3327 flag = true;
3328 }
3330 {
3331 if (tg.altitude != 0)
3332 {
3333 zero += altitudeFix * tg.altitude;
3334 }
3335 flag = true;
3336 }
3338 {
3339 return zero;
3340 }
3341 float num3 = 0f;
3342 if (detail != null && detail.things.Count > 0)
3343 {
3344 Card card = null;
3345 for (int i = 0; i < detail.things.Count; i++)
3346 {
3347 Thing thing = detail.things[i];
3348 SourcePref pref2 = thing.Pref;
3350 float num4 = (tileType.UseMountHeight ? 0f : ((pref2.height == 0f) ? 0.1f : pref2.height));
3351 if (!thing.IsInstalled || thing == ActionMode.Inspect.target)
3352 {
3353 continue;
3354 }
3355 if (thing.TileType.IsRamp)
3356 {
3357 Vector3 rampFix2 = thing.TileType.GetRampFix(thing.dir, pref2);
3358 zero.x += rampFix2.x;
3359 zero.y += rampFix2.y;
3360 zero.z += rampFix2.z;
3361 }
3362 if (!flag && tileType.CanStack)
3363 {
3364 if (thing.ignoreStackHeight)
3365 {
3366 zero.y -= num3;
3367 }
3368 zero.y += num4;
3369 zero.x += pref2.stackX * (float)((!thing.flipX) ? 1 : (-1));
3370 zero.z += pref2.z + thing.renderer.data.stackZ;
3371 if (!tileType.UseMountHeight && thing.altitude != 0)
3372 {
3373 zero += altitudeFix * thing.altitude;
3374 num4 += altitudeFix.y * (float)thing.altitude;
3375 }
3376 if (thing.trait.IgnoreLastStackHeight && (card == null || !card.trait.IgnoreLastStackHeight))
3377 {
3378 zero.y -= num3;
3379 }
3380 num3 = num4;
3381 zero.z += renderSetting.thingZ + num + (float)i * -0.01f + zSetting.mod1 * zero.y;
3382 if (!thing.TileType.IsRamp && thing.trait.IsChangeFloorHeight)
3383 {
3384 _ = thing.ignoreStackHeight;
3385 }
3386 if (thing.sourceCard.multisize)
3387 {
3388 num += zSetting.multiZ;
3389 }
3390 card = thing;
3391 }
3392 }
3393 }
3394 if (flag)
3395 {
3396 return zero;
3397 }
3398 if (tg.ignoreStackHeight)
3399 {
3400 zero.y -= num3;
3401 zero.z += (float)(detail?.things.Count ?? 0) * -0.01f;
3402 }
3403 if (tg.altitude != 0)
3404 {
3405 zero += altitudeFix * tg.altitude;
3406 }
3407 return zero;
3408 }
3409
3411 {
3412 float num = _baseBrightness + 0.25f;
3413 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)));
3414 return (int)num;
3415 }
3416
3417 public int GetRoofLight(Lot lot)
3418 {
3419 float num = Mathf.Sqrt(lot.light) * roofLightMod;
3420 if (num > lightLimit * roofLightLimitMod)
3421 {
3423 }
3424 if (isSnowCovered)
3425 {
3426 num += roofLightSnow * (1f - nightRatio);
3427 }
3428 int num2 = (int)(num * 50f) * 262144;
3429 if (isSnowCovered)
3430 {
3431 num2 += snowColorToken;
3432 }
3433 return num2;
3434 }
3435
3436 public void DrawRoof(Lot lot)
3437 {
3438 RoofStyle roofStyle = roofStyles[lot.idRoofStyle];
3439 if (roofStyle.type == RoofStyle.Type.None)
3440 {
3441 return;
3442 }
3443 bool reverse = lot.reverse;
3444 int num;
3445 int num2;
3446 int num3;
3447 int num4;
3448 if (reverse)
3449 {
3450 num = lot.z - roofStyle.h;
3451 num2 = lot.x - roofStyle.w;
3452 num3 = lot.mz + 1 + roofStyle.h;
3453 num4 = lot.mx + 1 + roofStyle.w;
3454 if (num2 > 1 && num > 0 && map.cells[num2 - 1, num].HasFullBlock)
3455 {
3456 num2--;
3457 }
3458 if (num3 < Size && num4 < Size && map.cells[num4 - 1, num3].HasFullBlock)
3459 {
3460 num3++;
3461 }
3462 }
3463 else
3464 {
3465 num = lot.x - roofStyle.w;
3466 num2 = lot.z - roofStyle.h;
3467 num3 = lot.mx + 1 + roofStyle.w;
3468 num4 = lot.mz + 1 + roofStyle.h;
3469 if (num2 > 0 && num > 1 && map.cells[num - 1, num2].HasFullBlock)
3470 {
3471 num--;
3472 }
3473 if (num3 < Size && num4 < Size && map.cells[num3 - 1, num4].HasFullBlock)
3474 {
3475 num4++;
3476 }
3477 }
3478 int num5;
3479 if (roofStyle.wing)
3480 {
3481 num5 = ((lot.height > 1) ? 1 : 0);
3482 if (num5 != 0)
3483 {
3484 num2--;
3485 num4++;
3486 }
3487 }
3488 else
3489 {
3490 num5 = 0;
3491 }
3492 int num6 = num4 + (reverse ? roofStyle.w : roofStyle.h) * 2 - num2;
3493 int idRoofTile = lot.idRoofTile;
3494 int num7 = lot.idBlock;
3495 int num8 = num7;
3496 if (num7 >= EMono.sources.blocks.rows.Count)
3497 {
3498 num7 = EMono.sources.blocks.rows.Count - 1;
3499 }
3500 if (num8 >= EMono.sources.floors.rows.Count)
3501 {
3502 num8 = EMono.sources.floors.rows.Count - 1;
3503 }
3504 int num9 = lot.idRamp;
3505 if (num9 >= EMono.sources.blocks.rows.Count)
3506 {
3507 num9 = EMono.sources.blocks.rows.Count - 1;
3508 }
3509 bool flag = false;
3510 int num10 = num6 / 2 - roofStyle.flatW;
3511 int num11 = num6 / 2 + roofStyle.flatW + ((num6 % 2 != 0) ? 1 : 0);
3512 SourceBlock.Row row = (roofStyle.useDefBlock ? cell.sourceFloor._defBlock : EMono.sources.blocks.rows[num7]);
3513 int num12 = 0;
3514 int num13 = ((num5 != 0) ? (-1) : 0);
3515 int num14 = 0;
3516 Vector3 vector = (lot.fullblock ? roofStyle.posFixBlock : roofStyle.posFix);
3517 switch (roofStyle.type)
3518 {
3519 case RoofStyle.Type.Default:
3520 flag = num6 % 2 == 1 && roofStyle.flatW == 0;
3521 break;
3522 case RoofStyle.Type.Flat:
3523 case RoofStyle.Type.FlatFloor:
3524 num10 = roofStyle.flatW;
3525 num11 = num6 - roofStyle.flatW;
3526 if (num10 == 0)
3527 {
3528 num14 = 1;
3529 }
3530 if (roofStyle.type != RoofStyle.Type.FlatFloor)
3531 {
3532 num--;
3533 num3++;
3534 num2--;
3535 num4++;
3536 }
3537 break;
3538 case RoofStyle.Type.Triangle:
3539 num10 = 999;
3540 num11 = 999;
3541 break;
3542 }
3543 for (cz = num2; cz < num4; cz++)
3544 {
3545 for (cx = num; cx < num3; cx++)
3546 {
3547 if (cx < 0 || cz < 0 || cx >= Size || cz >= Size)
3548 {
3549 continue;
3550 }
3551 int num15;
3552 int num16;
3553 if (reverse)
3554 {
3555 num15 = cz;
3556 num16 = cx;
3557 cell = map.cells[num15, num16];
3558 if (roofStyle.wing && cz == num4 - 1 && cell.Right.Right.room != null && cell.Right.Right.room.lot != lot)
3559 {
3560 continue;
3561 }
3562 }
3563 else
3564 {
3565 num15 = cx;
3566 num16 = cz;
3567 cell = map.cells[num15, num16];
3568 if (roofStyle.wing && cz == 0 && cell.Front.Front.room != null && cell.Front.Front.room.lot != lot)
3569 {
3570 continue;
3571 }
3572 }
3573 int num17 = num16 - num15;
3574 room = cell.room;
3575 if (room != null && room.lot != lot)
3576 {
3577 continue;
3578 }
3579 bool flag2 = false;
3580 if (roofStyle.type == RoofStyle.Type.Flat)
3581 {
3582 if (reverse)
3583 {
3584 if (!cell.HasFullBlock || cell.room != null)
3585 {
3586 num14 = ((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));
3587 }
3588 else if (cell.Left.room?.lot == lot && cell.Right.room != null)
3589 {
3590 num14 = 1;
3591 flag2 = true;
3592 }
3593 else if (cell.Front.room?.lot == lot)
3594 {
3595 num14 = ((cell.FrontRight.room?.lot == lot) ? 1 : 2);
3596 flag2 = true;
3597 }
3598 else if (cell.Right.room?.lot == lot || cell.FrontRight.room?.lot == lot)
3599 {
3600 num14 = 0;
3601 flag2 = true;
3602 }
3603 }
3604 else if (!cell.HasFullBlock || cell.room != null)
3605 {
3606 num14 = ((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));
3607 }
3608 else if (cell.Right.room?.lot == lot)
3609 {
3610 num14 = ((cell.FrontRight.room?.lot == lot) ? 1 : 0);
3611 flag2 = true;
3612 }
3613 else if (cell.Front.room?.lot == lot || cell.FrontRight.room?.lot == lot)
3614 {
3615 num14 = 2;
3616 flag2 = true;
3617 }
3618 num13 = 0;
3619 }
3620 bool flag3 = isSnowCovered && !cell.isClearSnow;
3621 if (room == null && !roofStyle.coverLot && !flag2 && !(cell.HasFullBlock && cell.IsRoomEdge && flag3))
3622 {
3623 continue;
3624 }
3625 index = cx + cz * Size;
3627 float num18 = (float)num17 * screen.tileAlign.y + (float)lot.mh * _heightMod.y + lot.realHeight + roofFix.y + vector.y;
3628 float num19 = 1000f + param.x * screen.tileWeight.x + (float)lot.mh * _heightMod.z + lot.realHeight * roofFix3.z + roofFix.z + vector.z;
3629 if (lot.height == 1 && lot.heightFix < 20)
3630 {
3631 num18 += roofStyle.lowRoofFix.y;
3632 num19 += roofStyle.lowRoofFix.z;
3633 }
3634 param.x = (float)(cx + cz) * screen.tileAlign.x + roofFix.x + (float)num13 * roofFix2.x + vector.x * (float)(reverse ? 1 : (-1));
3635 param.y = num18 + (float)num13 * roofFix2.y;
3636 param.z = num19 + param.y * screen.tileWeight.z + (float)num13 * roofFix2.z;
3637 param.color = GetRoofLight(lot);
3638 param.snow = idRoofTile == 0 && flag3;
3639 param.shadowFix = 0f;
3640 if (num14 == 1)
3641 {
3643 RenderRow renderRow;
3644 if (roofStyle.type == RoofStyle.Type.FlatFloor)
3645 {
3646 if (cell.HasFullBlock && cell.IsRoomEdge && !flag3)
3647 {
3648 continue;
3649 }
3650 renderRow = EMono.sources.floors.rows[num8];
3651 renderRow.SetRenderParam(param, mat, 0);
3652 param.matColor = lot.colRoof;
3653 }
3654 else
3655 {
3656 renderRow = row;
3657 renderRow.SetRenderParam(param, mat, 0);
3658 param.matColor = lot.colBlock;
3659 }
3660 renderRow.renderData.Draw(param);
3661 if (idRoofTile != 0)
3662 {
3663 renderRow = EMono.sources.blocks.rows[EMono.sources.objs.rows[idRoofTile].idRoof];
3664 int num20 = (reverse ? 1 : 0) + ((!flag) ? 2 : 0);
3665 renderRow.SetRenderParam(param, MATERIAL.sourceGold, num20);
3666 param.matColor = lot.colRoof;
3667 if (roofStyle.type == RoofStyle.Type.FlatFloor)
3668 {
3669 param.x += roofStyle.posFixBlock.x;
3670 param.y += roofStyle.posFixBlock.y;
3671 param.z += roofStyle.posFixBlock.z;
3672 }
3673 if (!flag)
3674 {
3675 param.z += 0.5f;
3676 }
3677 if (flag3)
3678 {
3679 param.matColor = 104025f;
3680 if (roofStyle.type != RoofStyle.Type.FlatFloor)
3681 {
3682 param.z += roofStyle.snowZ;
3683 }
3684 param.tile = renderRow.renderData.ConvertTile(renderRow.snowTile) + num20;
3685 renderRow.renderData.Draw(param);
3686 }
3687 else
3688 {
3689 renderRow.renderData.Draw(param);
3690 }
3691 }
3692 else if (flag3 && roofStyle.type == RoofStyle.Type.FlatFloor)
3693 {
3694 param.matColor = 104025f;
3695 param.tile = 10f;
3696 param.x += roofStyle.snowFix.x;
3697 param.y += roofStyle.snowFix.y;
3698 param.z += roofStyle.snowZ + roofStyle.snowFix.z;
3699 renderRow.renderData.Draw(param);
3700 }
3701 }
3702 else
3703 {
3704 if (idRoofTile != 0)
3705 {
3706 int num21 = ((!reverse) ? ((num14 != 0) ? 2 : 0) : ((num14 != 0) ? 1 : 3));
3707 if (lot.altRoof && !flag && (roofStyle.type == RoofStyle.Type.Default || roofStyle.type == RoofStyle.Type.DefaultNoTop))
3708 {
3709 param.shadowFix = num21 + 1;
3710 }
3711 RenderRow renderRow = EMono.sources.objs.rows[idRoofTile];
3712 renderRow.SetRenderParam(param, MATERIAL.sourceGold, num21);
3713 param.matColor = lot.colRoof;
3714 if (flag3)
3715 {
3716 param.matColor = 104025f;
3717 param.z += roofStyle.snowZ;
3718 param.tile = renderRow.renderData.ConvertTile(renderRow.snowTile) + num21 + (lot.altRoof ? 8 : 0);
3719 renderRow.renderData.Draw(param);
3720 }
3721 else
3722 {
3723 param.tile += (lot.altRoof ? 8 : 0);
3724 renderRow.renderData.Draw(param);
3725 }
3726 param.shadowFix = 0f;
3727 }
3728 if (num13 >= 0)
3729 {
3730 param.y += roofRampFix.y;
3731 param.z += roofRampFix.z;
3732 RenderRow renderRow = EMono.sources.blocks.rows[num9];
3733 renderRow.SetRenderParam(param, MATERIAL.sourceGold, (!reverse) ? ((num14 != 0) ? 2 : 0) : ((num14 != 0) ? 1 : 3));
3734 param.matColor = lot.colBlock;
3735 renderRow.renderData.Draw(param);
3736 }
3737 }
3738 CellEffect effect = cell.effect;
3739 if (effect != null && effect.FireAmount > 0)
3740 {
3742 }
3743 if (num13 < 1)
3744 {
3745 continue;
3746 }
3747 if (roofStyle.type != RoofStyle.Type.Flat)
3748 {
3749 param.snow = false;
3750 }
3751 for (int i = 0; i < num13; i++)
3752 {
3753 param.x = (float)(cx + cz) * screen.tileAlign.x + roofFix.x + (float)i * roofFix2.x + vector.x * (float)(reverse ? 1 : (-1));
3754 param.y = num18 + (float)i * roofFix2.y;
3755 param.z = num19 + param.y * screen.tileWeight.z + (float)i * roofFix2.z;
3756 RenderRow renderRow = row;
3757 renderRow.SetRenderParam(param, MATERIAL.sourceGold, 0);
3758 param.matColor = lot.colBlock;
3759 renderRow.renderData.Draw(param);
3760 index++;
3761 CellEffect effect2 = cell.effect;
3762 if (effect2 != null && effect2.FireAmount > 0 && Rand.bytes[index % Rand.MaxBytes] % 3 == 0)
3763 {
3765 }
3766 }
3767 }
3768 num12++;
3769 if (roofStyle.type != RoofStyle.Type.Flat)
3770 {
3771 if (num12 == num10)
3772 {
3773 num14 = 1;
3774 }
3775 if (num12 == num11)
3776 {
3777 num14 = 2;
3778 num13++;
3779 }
3780 num13 += num14 switch
3781 {
3782 1 => 0,
3783 0 => 1,
3784 _ => -1,
3785 };
3786 }
3787 }
3788 }
3789
3790 public static int GetColorInt(ref Color matColor, int p)
3791 {
3792 if (p == 0)
3793 {
3794 return 104025;
3795 }
3796 return p * 262144 + (int)(matColor.r * 50f) * 4096 + (int)(matColor.g * 50f) * 64 + (int)(matColor.b * 50f);
3797 }
3798
3799 public void SetRoofHeight(MeshPassParam _param, Cell _cell, int _cx, int _cz, int h = 0, int altitude = 0, int dirWall = -1, bool ignoreAltitudeY = false)
3800 {
3801 Room room = _cell.room;
3802 if (room == null && dirWall != -1)
3803 {
3804 if (dirWall == 0 && _cell.Front.room != null)
3805 {
3806 room = _cell.Front.room;
3807 _cell = _cell.Front;
3808 }
3809 else if (_cell.Right.room != null)
3810 {
3811 room = _cell.Right.room;
3812 _cell = _cell.Right;
3813 }
3814 }
3815 if (room != null)
3816 {
3817 Lot lot = room.lot;
3818 RoofStyle roofStyle = roofStyles[lot.idRoofStyle];
3819 float num = (float)(_cz - _cx) * screen.tileAlign.y + (float)lot.mh * _heightMod.y + lot.realHeight + roofFix.y;
3820 float num2 = 1000f + param.x * screen.tileWeight.x + (float)lot.mh * _heightMod.z + lot.realHeight * roofFix3.z + roofFix.z + roofStyle.posFix.z;
3821 if (lot.height == 1)
3822 {
3823 num += roofStyle.lowRoofFix.y;
3824 num2 += roofStyle.lowRoofFix.z;
3825 }
3826 _param.x = (float)(_cx + _cz) * screen.tileAlign.x + roofFix.x + (float)h * roofFix2.x;
3827 _param.y = num + (float)h * roofFix2.y;
3828 _param.z = num2 + _param.y * screen.tileWeight.z + (float)h * roofFix2.z + heightModRoofBlock.y;
3829 }
3830 if (!ignoreAltitudeY || room != null)
3831 {
3832 _param.y += (float)altitude * _heightMod.y;
3833 }
3834 _param.z += (float)altitude * heightModRoofBlock.z;
3835 }
3836}
AreaHighlightMode
BlockRenderMode
PlaceState
Definition: PlaceState.cs:2
TraitTrolley trolley
Definition: AI_Trolley.cs:24
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:2177
virtual SourcePref Pref
Definition: Card.cs:2147
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:2423
virtual bool isChara
Definition: Card.cs:2123
TraitShackle GetRestrainer()
Definition: Card.cs:7467
int dir
Definition: Card.cs:149
virtual CardRow sourceCard
Definition: Card.cs:2171
bool noShadow
Definition: Card.cs:821
SourceCategory.Row category
Definition: Card.cs:2089
bool freePos
Definition: Card.cs:521
CardRenderer renderer
Definition: Card.cs:64
virtual bool flipX
Definition: Card.cs:2156
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 _block
Definition: Cell.cs:32
byte autotileDeco
Definition: Cell.cs:70
Room room
Definition: Cell.cs:110
byte TopHeight
Definition: Cell.cs:125
bool HasWallOrFence
Definition: Cell.cs:839
static List< SourceBlock.Row > blockList
Definition: Cell.cs:14
SourceBlock.Row sourceBlock
Definition: Cell.cs:1062
Cell BackRight
Definition: Cell.cs:209
bool lotShade
Definition: Cell.cs:542
bool IsSnowTile
Definition: Cell.cs:790
bool castFloorShadow
Definition: Cell.cs:530
SourceMaterial.Row matBlock
Definition: Cell.cs:1038
byte autotile
Definition: Cell.cs:68
bool HasBlock
Definition: Cell.cs:651
byte shadow
Definition: Cell.cs:78
SourceFloor.Row sourceFloor
Definition: Cell.cs:1064
CellEffect effect
Definition: Cell.cs:102
byte _bridge
Definition: Cell.cs:48
bool isDeck
Definition: Cell.cs:518
SourceMaterial.Row matDeco
Definition: Cell.cs:1042
Cell Back
Definition: Cell.cs:161
bool lotWall
Definition: Cell.cs:494
bool IsBridgeWater
Definition: Cell.cs:778
byte decal
Definition: Cell.cs:46
Critter critter
Definition: Cell.cs:104
bool isClearSnow
Definition: Cell.cs:458
bool isFloating
Definition: Cell.cs:482
Cell Front
Definition: Cell.cs:137
SourceMaterial.Row matObj
Definition: Cell.cs:1046
byte _deco
Definition: Cell.cs:58
List< Thing > Things
Definition: Cell.cs:994
SourceMaterial.Row matBridge
Definition: Cell.cs:1044
bool IsFloorWater
Definition: Cell.cs:735
bool pcSync
Definition: Cell.cs:112
bool UseLowBlock
Definition: Cell.cs:869
byte shore
Definition: Cell.cs:76
bool skipRender
Definition: Cell.cs:278
ushort lightG
Definition: Cell.cs:96
byte _roofBlock
Definition: Cell.cs:52
bool IsTopWater
Definition: Cell.cs:708
byte height
Definition: Cell.cs:80
byte autotileObj
Definition: Cell.cs:74
GrowSystem growth
Definition: Cell.cs:233
ushort lightB
Definition: Cell.cs:98
bool isWatered
Definition: Cell.cs:350
SourceFloor.Row sourceBridge
Definition: Cell.cs:1066
bool isClearArea
Definition: Cell.cs:614
CellDetail detail
Definition: Cell.cs:100
bool isShadowed
Definition: Cell.cs:254
byte _roofBlockDir
Definition: Cell.cs:56
bool HasFloodBlock
Definition: Cell.cs:1025
byte autotileBridge
Definition: Cell.cs:72
bool isToggleWallPillar
Definition: Cell.cs:566
bool HasRoof
Definition: Cell.cs:656
Cell Left
Definition: Cell.cs:173
bool isSkyFloor
Definition: Cell.cs:602
SourceMaterial.Row matFloor
Definition: Cell.cs:1040
int floorDir
Definition: Cell.cs:930
byte _roofBlockMat
Definition: Cell.cs:54
bool isSeen
Definition: Cell.cs:290
byte obj
Definition: Cell.cs:40
bool isSlopeEdge
Definition: Cell.cs:362
bool isShoreSand
Definition: Cell.cs:554
SourceObj.Row sourceObj
Definition: Cell.cs:1084
byte highlight
Definition: Cell.cs:92
int objDir
Definition: Cell.cs:918
Cell BackLeft
Definition: Cell.cs:221
bool isForceFloat
Definition: Cell.cs:314
SourceCellEffect.Row sourceEffect
Definition: Cell.cs:1082
bool isSurrounded
Definition: Cell.cs:242
bool isWallEdge
Definition: Cell.cs:434
bool outOfBounds
Definition: Cell.cs:422
Point GetPoint()
Definition: Cell.cs:1113
Cell Right
Definition: Cell.cs:149
Cell FrontLeft
Definition: Cell.cs:197
bool HasRamp
Definition: Cell.cs:845
bool ignoreObjShadow
Definition: Cell.cs:386
byte bridgeHeight
Definition: Cell.cs:82
bool fullWall
Definition: Cell.cs:470
int liquidLv
Definition: Cell.cs:954
bool isBridgeEdge
Definition: Cell.cs:374
bool hasDoor
Definition: Cell.cs:266
int blockDir
Definition: Cell.cs:906
static List< SourceMaterial.Row > matList
Definition: Cell.cs:12
bool IsRoomEdge
Definition: Cell.cs:876
bool HasFullBlock
Definition: Cell.cs:825
SourceDeco.Row sourceDeco
Definition: Cell.cs:1080
Cell FrontRight
Definition: Cell.cs:185
ushort lightR
Definition: Cell.cs:94
byte bridgePillar
Definition: Cell.cs:90
Definition: Chara.cs:10
override SourcePref Pref
Definition: Chara.cs:801
override bool IsAliveInCurrentZone
Definition: Chara.cs:563
AIAct ai
Definition: Chara.cs:204
override bool IsPC
Definition: Chara.cs:626
Chara host
Definition: Chara.cs:33
override bool IsDeadOrSleeping
Definition: Chara.cs:575
SourceChara.Row source
Definition: Chara.cs:160
override bool IsMoving
Definition: Chara.cs:622
override CardRow sourceCard
Definition: Chara.cs:452
bool IsInActiveZone
Definition: Chara.cs:852
override void SetRenderParam(RenderParam p)
Definition: Chara.cs:6907
ConBaseTransmuteMimic mimicry
Definition: Chara.cs:106
override bool IsPCC
Definition: Chara.cs:696
bool hasTelepathy
Definition: Chara.cs:142
BlockColors blockColors
new GameConfig game
Definition: CoreConfig.cs:613
bool godBuild
Definition: CoreDebug.cs:319
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 ColorProfile Colors
Definition: EMono.cs:35
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:299
RenderSetting render
Definition: GameSetting.cs:301
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:207
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:56
bool fullWallHeight
Definition: MapConfig.cs:32
int skyBlockHeight
Definition: MapConfig.cs:92
float blockHeight
Definition: MapConfig.cs:71
bool reverseRoof
Definition: MapConfig.cs:47
Definition: Map.cs:13
bool IsIndoor
Definition: Map.cs:131
int SizeXZ
Definition: Map.cs:133
RoomManager rooms
Definition: Map.cs:31
Cell[,] cells
Definition: Map.cs:85
MapConfig config
Definition: Map.cs:37
static HashSet< int > sunMap
Definition: Map.cs:14
MapBounds bounds
Definition: Map.cs:52
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:2542
CinemaConfig cinemaConfig
Definition: Player.cs:1179
float lightPower
Definition: Player.cs:1267
int lightRadius
Definition: Player.cs:1259
Definition: Point.cs:9
static Point shared
Definition: Point.cs:20
ref Vector3 Position(int height)
Definition: Point.cs:548
Point Set(int _x, int _z)
Definition: Point.cs:503
int x
Definition: Point.cs:36
int z
Definition: Point.cs:39
bool IsValid
Definition: Point.cs:88
Point Clamp(bool useBounds=false)
Definition: Point.cs:1009
Cell cell
Definition: Point.cs:51
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:398
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:86
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
void DrawWall(Point point, int color, bool useMarkerPass=false, float offsetZ=0f)
Definition: ScreenGuide.cs:42
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:28
bool bypassShadow
Definition: SourcePref.cs:315
int liquidModMax
Definition: SourcePref.cs:75
bool FloatUnderwater
Definition: SourcePref.cs:332
float height
Definition: SourcePref.cs:51
int liquidMod
Definition: SourcePref.cs:63
bool Float
Definition: SourcePref.cs:328
int shadow
Definition: SourcePref.cs:39
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:1512
override SourcePref Pref
Definition: Thing.cs:50
override CardRow sourceCard
Definition: Thing.cs:47
int id
Definition: TileRow.cs:8
virtual bool IsUseBlockDir
Definition: TileType.cs:139
virtual bool UseHangZFix
Definition: TileType.cs:229
static TileTypeSky Sky
Definition: TileType.cs:75
virtual bool CanStack
Definition: TileType.cs:131
virtual void GetMountHeight(ref Vector3 v, Point p, int d, Card target=null)
Definition: TileType.cs:391
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:153
virtual bool AlwaysShow
Definition: TileType.cs:261
virtual bool AlwaysShowShadow
Definition: TileType.cs:259
virtual bool UseLowBlock
Definition: TileType.cs:231
virtual bool IsFullBlock
Definition: TileType.cs:175
virtual bool IsWall
Definition: TileType.cs:143
virtual bool ForceRpeatBlock
Definition: TileType.cs:265
virtual bool IsSkipLowBlock
Definition: TileType.cs:135
virtual bool UseMountHeight
Definition: TileType.cs:227
virtual bool IsFence
Definition: TileType.cs:177
virtual BlockRenderMode blockRenderMode
Definition: TileType.cs:285
Vector3 GetRampFix(int dir, SourcePref pref=null)
Definition: TileType.cs:396
virtual bool IsWaterTop
Definition: TileType.cs:185
virtual bool RepeatBlock
Definition: TileType.cs:263
virtual bool IsOpen()
Definition: TraitDoor.cs:99
virtual Vector3 GetRestrainPos
Definition: TraitShackle.cs:5
virtual bool IgnoreLastStackHeight
Definition: Trait.cs:121
virtual bool AlwaysHideOnLowWall
Definition: Trait.cs:365
virtual bool UseLowblock
Definition: Trait.cs:453
virtual TileType tileType
Definition: Trait.cs:50
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:269
void RefreshBGM()
Definition: Zone.cs:3103
virtual bool UseFog
Definition: Zone.cs:393
virtual bool AlwaysLowblock
Definition: Zone.cs:397
virtual bool IsUnderwater
Definition: Zone.cs:271
Map map
Definition: Zone.cs:63