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