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