Jump to content

Recommended Posts

  • Honorable Member
10 hours ago, Denizeri24 said:

Is it still mandatory for the files to be located on the D drive?

You can mount d: from folder (check mount_d.bat)

 @cd %~dp0
 @subst d: .
 @pause

You can also load the files via pack (Index + eix epk required). If you do this, keep textureset/ and property/ unpacked.

  • Love 3
Link to comment
https://metin2.dev/topic/2747-worldeditor-remix/page/16/#findComment-173802
Share on other sites

i have the problem that it says that the program cant load the assasin_novice.gr2 and the whole program works but there is not even a texture and i have to load them manually. Is this a problem with the files that i have or there is another way around it to validate my files?

 

Link to comment
https://metin2.dev/topic/2747-worldeditor-remix/page/16/#findComment-173813
Share on other sites

  • 2 weeks later...
  • Active+ Member

Dont know if anyone ever encountered this, but this was my main problem since day1 when I tried to bring together assets from vicecity to recreate the map in metin2. 

Overall, when placing a model, when its placed it gets a little bit down on its Z axis than the preview. 

The video below should be more explanatory. 

https://metin2.download/video/9gYrUUBUDKjr1QT5zkVes840GDOYSWjD/.mp4 -
WorldEditor V49

 

 

 

Not a hate or smth like that, mostly posting to see any workaround about this or to start a discussion. 

Edited by Metin2 Dev International
Core X - External 2 Internal
Link to comment
https://metin2.dev/topic/2747-worldeditor-remix/page/16/#findComment-173974
Share on other sites

  • Active Member
On 12/15/2025 at 9:52 PM, martysama0134 said:

V49 out!

List of python functions and constants:

  Reveal hidden contents
WorldEditor Functions and Constants
=====================================

FUNCTIONS
=========

Map General
-----------
WorldEditor.IsMapReady() -> int
WorldEditor.GetSceneType() -> int
WorldEditor.GetBaseXY() -> (int, int)
WorldEditor.GetTerrainCount() -> (int, int)
WorldEditor.GetMapType() -> int
WorldEditor.GetEnvironmentDataName() -> str

Property
--------
WorldEditor.GetPropertyType(ext: int) -> str
WorldEditor.GetPropertyExtension(type: str) -> int
WorldEditor.GetObjectList() -> tuple

Camera
------
WorldEditor.GetTargetPosition() -> (float, float)
WorldEditor.UpdateTargetPosition(x: int, y: int) -> None
WorldEditor.GetCameraPosition() -> (float, float, float)
WorldEditor.GetCameraTarget() -> (float, float, float)
WorldEditor.SetCameraPosition(x: float, y: float, z: float) -> None
WorldEditor.SetCameraTarget(x: float, y: float, z: float) -> None

Map Draw
--------
WorldEditor.GetHeightPixel(x: int, y: int) -> int
WorldEditor.DrawHeightPixel(x: int, y: int, height: int) -> None

Terrain Utilities
-----------------
WorldEditor.GetHeightAt(x: float, y: float) -> int
WorldEditor.SetHeightAt(x: float, y: float, height: int) -> None
WorldEditor.GetTerrainSize() -> int
WorldEditor.WorldToTerrainCoords(x: float, y: float) -> (int, int, int, int)
WorldEditor.TerrainToWorldCoords(terrainNumX: int, terrainNumY: int, cellX: int, cellY: int) -> (int, int)

Map Information
--------------
WorldEditor.GetMapName() -> str
WorldEditor.IsMapLoaded() -> int
WorldEditor.GetMapBounds() -> (int, int, int, int)

Batch Operations
----------------
WorldEditor.DrawHeightRegion(x1: int, y1: int, x2: int, y2: int, height: int) -> None
WorldEditor.GetHeightRegion(x1: int, y1: int, x2: int, y2: int) -> list

Object Selection
----------------
WorldEditor.GetSelectedObjectCount() -> int
WorldEditor.GetSelectedObjectName() -> str
WorldEditor.SelectObject(index: int) -> None
WorldEditor.SelectObjectsByRect(x1: float, y1: float, x2: float, y2: float) -> int
WorldEditor.CancelSelect() -> None
WorldEditor.IsObjectSelected(index: int) -> int
WorldEditor.GetPickedObjectIndex() -> int

Object Manipulation
-------------------
WorldEditor.GetObjectCount() -> int
WorldEditor.GetObjectData(index: int) -> (float, float, float, int, float, float, float)
WorldEditor.MoveSelectedObject(x: float, y: float) -> None
WorldEditor.MoveSelectedObjectHeight(height: float) -> None
WorldEditor.ResetSelectedObjectHeightToTerrain() -> None
WorldEditor.RotateSelectedObject(yaw: float, pitch: float, roll: float) -> None
WorldEditor.SetSelectedObjectRotation(yaw: float, pitch: float, roll: float) -> None
WorldEditor.RotateSelectedObjectAroundPivot(rollDeg: float) -> None
WorldEditor.DeleteSelectedObject() -> None
WorldEditor.DeleteObjectsByCRCList(crcList: list, scope: int = 1) -> int
WorldEditor.ReplaceObjectsByCRC(sourceCrc: int, targetCrc: int, scope: int = 1) -> int
WorldEditor.InsertObject(x: float, y: float, z: float, yaw: float, pitch: float, roll: float, scale: int, crc: int) -> None
WorldEditor.PlaceGrassPropsByTexture(textureIds: list, grassCrcs: list, minDistanceMeters: float = 10.0) -> (int, int)
WorldEditor.GetSelectionPivot() -> (float, float, float)

Object Portal
-------------
WorldEditor.SetSelectedObjectPortalNumber(portalID: int) -> None
WorldEditor.DelSelectedObjectPortalNumber(portalID: int) -> None
WorldEditor.GetSelectedObjectPortalNumbers() -> list

Attribute Manipulation
----------------------
WorldEditor.GetAttrAt(x: float, y: float) -> int
WorldEditor.SetAttrAt(x: float, y: float, attrFlag: int) -> None
WorldEditor.IsAttrOn(x: float, y: float, attrFlag: int) -> int
WorldEditor.DrawAttrBrush(x: float, y: float, attrFlag: int, brushSize: int, erase: int) -> None
WorldEditor.GetSelectedAttrFlag() -> int
WorldEditor.SetSelectedAttrFlag(attrFlag: int) -> None
WorldEditor.ResetToDefaultAttr() -> int

Refresh Functions
-----------------
WorldEditor.RefreshArea() -> None
WorldEditor.RefreshSelectedInfo() -> None
WorldEditor.RefreshObjectHeight(x: float, y: float, halfSize: float) -> None
WorldEditor.RefreshTerrain() -> None
WorldEditor.RefreshEnvironment() -> None
WorldEditor.ReloadMap() -> int

Save Functions
----------------
WorldEditor.SaveMap(mapName: str = None) -> int
WorldEditor.SaveMapProperty() -> int
WorldEditor.SaveMapSetting() -> int
WorldEditor.SaveTerrains() -> int
WorldEditor.SaveAreas() -> int

Utility Functions
-----------------
WorldEditor.GetObjectDataCount() -> int
WorldEditor.GetEditArea() -> (int, int, int, int, int, int)
WorldEditor.SetBrushSize(size: int) -> None
WorldEditor.GetBrushSize() -> int
WorldEditor.SetBrushStrength(strength: int) -> None
WorldEditor.GetBrushStrength() -> int
WorldEditor.CopySelectedObjects() -> None
WorldEditor.PasteObjects(x: float, y: float, z: float) -> None
WorldEditor.SetWireframe(enabled: int) -> None
WorldEditor.IsWireframe() -> int

Water Functions
---------------
WorldEditor.GetWaterHeight(x: float, y: float) -> int
WorldEditor.DrawWaterBrush(x: float, y: float, waterHeight: int, brushSize: int, erase: int) -> None
WorldEditor.SetAllWaterHeight(height: int) -> None
WorldEditor.GetBrushWaterHeight() -> int
WorldEditor.SetBrushWaterHeight(height: int) -> None
WorldEditor.SetEraseWater(enabled: int) -> None
WorldEditor.PreviewEditWater() -> None

Height Brush Functions
----------------------
WorldEditor.DrawHeightBrush(x: float, y: float, brushShape: int, brushType: int, brushSize: int, brushStrength: int) -> None
WorldEditor.SetBrushShape(shape: int) -> None
WorldEditor.GetBrushShape() -> int
WorldEditor.SetBrushType(type: int) -> None
WorldEditor.GetBrushType() -> int
WorldEditor.SetBrushSizeY(size: int) -> None
WorldEditor.GetBrushSizeY() -> int
WorldEditor.SetMaxBrushSize(size: int) -> None
WorldEditor.SetMaxBrushStrength(strength: int) -> None

Texture Brush Functions
-----------------------
WorldEditor.DrawTextureBrush(x: float, y: float, textureList: list, brushSize: int, erase: int, drawOnlyOnBlankTile: int) -> None
WorldEditor.SetEraseTexture(enabled: int) -> None
WorldEditor.SetDrawOnlyOnBlankTile(enabled: int) -> None
WorldEditor.AddTerrainTexture(filename: str) -> int
WorldEditor.RemoveTerrainTexture(texNum: int) -> int
WorldEditor.ResetTerrainTexture() -> None
WorldEditor.InitBaseTexture(mapName: str = None) -> int

Environment and Lighting Functions
----------------------------------
WorldEditor.SetLightDirection(x: float, y: float, z: float) -> None
WorldEditor.SetLightDiffuseColor(r: float, g: float, b: float) -> None
WorldEditor.SetLightAmbientColor(r: float, g: float, b: float) -> None
WorldEditor.EnableLight(enabled: int) -> None
WorldEditor.SetFogColor(r: float, g: float, b: float) -> None
WorldEditor.SetFogNearDistance(distance: float) -> None
WorldEditor.SetFogFarDistance(distance: float) -> None
WorldEditor.EnableFog(enabled: int) -> None
WorldEditor.SetWindStrength(strength: float) -> None
WorldEditor.SetWindRandom(random: float) -> None
WorldEditor.EnableWind(enabled: int) -> None

Material Functions
-----------------
WorldEditor.SetMaterialDiffuseColor(r: float, g: float, b: float) -> None
WorldEditor.SetMaterialAmbientColor(r: float, g: float, b: float) -> None
WorldEditor.SetMaterialEmissiveColor(r: float, g: float, b: float) -> None

Filtering Functions
-------------------
WorldEditor.SetFilteringColor(r: float, g: float, b: float) -> None
WorldEditor.SetFilteringAlpha(alpha: float) -> None
WorldEditor.SetFilteringAlphaSrc(src: int) -> None
WorldEditor.SetFilteringAlphaDest(dest: int) -> None
WorldEditor.EnableFiltering(enabled: int) -> None

Editing Mode Functions
----------------------
WorldEditor.SetHeightEditing(enabled: int) -> None
WorldEditor.IsHeightEditing() -> int
WorldEditor.SetTextureEditing(enabled: int) -> None
WorldEditor.IsTextureEditing() -> int
WorldEditor.SetWaterEditing(enabled: int) -> None
WorldEditor.IsWaterEditing() -> int
WorldEditor.SetAttrEditing(enabled: int) -> None
WorldEditor.IsAttrEditing() -> int
WorldEditor.SetMonsterAreaInfoEditing(enabled: int) -> None
WorldEditor.IsMonsterAreaInfoEditing() -> int
WorldEditor.EditingStart() -> None
WorldEditor.EditingEnd() -> None
WorldEditor.SetEraseAttr(enabled: int) -> None

Undo/Redo Functions
-------------------
WorldEditor.BackupObject() -> None
WorldEditor.BackupTerrain() -> None
WorldEditor.BackupObjectCurrent() -> None
WorldEditor.BackupTerrainCurrent() -> None
WorldEditor.Undo() -> None
WorldEditor.Redo() -> None
WorldEditor.CanUndo() -> int
WorldEditor.CanRedo() -> int
WorldEditor.GetUndoCount() -> int
WorldEditor.GetRedoCount() -> int
WorldEditor.ClearUndoBuffer() -> None

Map Creation Functions
---------------------
WorldEditor.NewMap(mapName: str) -> int
WorldEditor.CreateNewOutdoorMap() -> int
WorldEditor.SetNewMapName(name: str) -> None
WorldEditor.SetNewMapSizeX(size: int) -> None
WorldEditor.SetNewMapSizeY(size: int) -> None
WorldEditor.GetTerrainNum(x: float, y: float) -> int
WorldEditor.GetEditTerrainNum() -> int

Shadow Functions
----------------
WorldEditor.UpdateTerrainShadowMap() -> None
WorldEditor.ReloadTerrainShadowTexture() -> None
WorldEditor.DestroyShadowTexture() -> None
WorldEditor.RecreateShadowTexture() -> None

Minimap Functions
-----------------
WorldEditor.SaveMiniMap() -> None
WorldEditor.SaveAtlas() -> None

Monster Area Functions
----------------------
WorldEditor.ShowAllMonsterAreaInfo(enabled: int) -> None
WorldEditor.IsShowAllMonsterAreaInfo() -> int
WorldEditor.SaveMonsterAreaInfo() -> int
WorldEditor.GetMonsterAreaInfoCount() -> int
WorldEditor.GetSelectedMonsterAreaInfo() -> int
WorldEditor.SelectNextMonsterAreaInfo(forward: int = 1) -> None
WorldEditor.SelectMonsterAreaInfoStart() -> None
WorldEditor.SelectMonsterAreaInfoEnd() -> None
WorldEditor.IsSelectMonsterAreaInfoStarted() -> int
WorldEditor.AddNewMonsterAreaInfo(originX: int, originY: int, sizeX: int, sizeY: int, type: int, vid: int, count: int, dir: int) -> int
WorldEditor.RemoveMonsterAreaInfoPtr(index: int) -> int
WorldEditor.SetMonsterNames() -> None

Cursor Functions
----------------
WorldEditor.SetEditingCursorPosition(x: float, y: float, z: float) -> None
WorldEditor.GetEditingCursorPosition() -> (float, float, float)
WorldEditor.GetPickingCoordinate() -> (float, float, float, int, int, int, int, int, int) or tuple
WorldEditor.GetPickingCoordinateWithRay(rayOriginX: float, rayOriginY: float, rayOriginZ: float, rayDirX: float, rayDirY: float, rayDirZ: float) -> (float, float, float, int, int, int, int, int, int) or tuple

Auto-Save Functions
-------------------
WorldEditor.SetAutoSave(enabled: int) -> None
WorldEditor.IsAutoSave() -> int
WorldEditor.SetAutoBackup(enabled: int) -> None
WorldEditor.IsAutoBackup() -> int
WorldEditor.GetTimeSave() -> int
WorldEditor.SetNextTimeSave() -> None

Portal Functions
----------------
WorldEditor.EnablePortal(enabled: int) -> None
WorldEditor.IsSelected() -> int

Object Ambience Functions
-------------------------
WorldEditor.AddSelectedAmbienceScale(addScale: int) -> None
WorldEditor.AddSelectedAmbienceMaxVolumeAreaPercentage(percentage: float) -> None

Environment Script Functions
-----------------------------
WorldEditor.LoadEnvironmentScript(filename: str) -> None
WorldEditor.SaveEnvironmentScript(filename: str) -> None
WorldEditor.InitializeEnvironmentData() -> None
WorldEditor.RefreshScreenFilter() -> None
WorldEditor.RefreshSkyBox() -> None
WorldEditor.RefreshLensFlare() -> None

Skybox Functions
----------------
WorldEditor.SetSkyBoxTextureRenderMode(enabled: int) -> None
WorldEditor.IsSkyBoxTextureRenderMode() -> int
WorldEditor.SetSkyBoxFaceTexture(filename: str, faceIndex: int) -> None
WorldEditor.GetSkyBoxFaceTexture(faceIndex: int) -> str
WorldEditor.GetSkyBoxScale() -> (float, float, float)
WorldEditor.SetSkyBoxScale(x: float, y: float, z: float) -> None
WorldEditor.GetSkyBoxCloudScale() -> (float, float)
WorldEditor.SetSkyBoxCloudScale(x: float, y: float) -> None
WorldEditor.GetSkyBoxCloudTextureScale() -> (float, float)
WorldEditor.SetSkyBoxCloudTextureScale(x: float, y: float) -> None
WorldEditor.GetSkyBoxCloudSpeed() -> (float, float)
WorldEditor.SetSkyBoxCloudSpeed(x: float, y: float) -> None
WorldEditor.GetSkyBoxCloudHeight() -> float
WorldEditor.SetSkyBoxCloudHeight(height: float) -> None
WorldEditor.GetSkyBoxCloudTextureFileName() -> str
WorldEditor.SetSkyBoxCloudTextureFileName(filename: str) -> None
WorldEditor.GetSkyBoxGradientUpper() -> int
WorldEditor.SetSkyBoxGradientUpper(value: int) -> None
WorldEditor.GetSkyBoxGradientLower() -> int
WorldEditor.SetSkyBoxGradientLower(value: int) -> None
WorldEditor.InsertGradientUpper() -> None
WorldEditor.InsertGradientLower() -> None
WorldEditor.DeleteGradient(index: int) -> None

Lensflare Functions
-------------------
WorldEditor.GetLensFlareEnable() -> int
WorldEditor.SetLensFlareEnable(enabled: int) -> None
WorldEditor.GetLensFlareBrightnessColor() -> (float, float, float, float)
WorldEditor.SetLensFlareBrightnessColor(r: float, g: float, b: float, a: float) -> None
WorldEditor.GetLensFlareMaxBrightness() -> float
WorldEditor.SetLensFlareMaxBrightness(brightness: float) -> None
WorldEditor.GetMainFlareEnable() -> int
WorldEditor.SetMainFlareEnable(enabled: int) -> None
WorldEditor.GetMainFlareTextureFileName() -> str
WorldEditor.SetMainFlareTextureFileName(filename: str) -> None
WorldEditor.GetMainFlareSize() -> float
WorldEditor.SetMainFlareSize(size: float) -> None

Additional Utility Functions
-----------------------------
WorldEditor.GetMapID() -> int
WorldEditor.SetMapID(id: int) -> None
WorldEditor.ToggleWireframe() -> None
WorldEditor.RenderSelectedObject() -> None
WorldEditor.RenderAttr() -> None
WorldEditor.RenderObjectCollision() -> None
WorldEditor.UpdateEditing() -> None
WorldEditor.PreloadAllTerrainsAndAreas() -> int
WorldEditor.UpdateMapInfo() -> None
WorldEditor.UpdateBaseMapInfo(baseX: int, baseY: int) -> int
WorldEditor.CloseMap() -> None
WorldEditor.GetEditTerrain() -> int
WorldEditor.SetTerrainModified() -> None
WorldEditor.GetLastPickedAreaIndex() -> int
WorldEditor.SetLastPickedAreaIndex(index: int) -> None
WorldEditor.IsIntersectingSelection(index: int) -> int
WorldEditor.GetNumWater() -> int
WorldEditor.SetNumWater(num: int) -> None
WorldEditor.GetWaterHeightArray() -> list
WorldEditor.SetWaterHeightArray(waterList: list) -> None
WorldEditor.GetSplatValue() -> float
WorldEditor.SetSplatValue(value: float) -> None
WorldEditor.PreloadTerrainAndArea(terrainCoordX: int, terrainCoordY: int) -> None
WorldEditor.ArrangeTerrainHeight() -> None
WorldEditor.GetTerrainNumFromCoord(terrainNumX: int, terrainNumY: int) -> int
WorldEditor.RAW_ResetTextures() -> None
WorldEditor.GetTerrainTextureFilename(texIndex: int) -> str
WorldEditor.GetTerrainUsedTextures(terrainNumX: int, terrainNumY: int) -> list
WorldEditor.GetTerrainWorldBounds(terrainNumX: int, terrainNumY: int) -> (int, int, int, int)
WorldEditor.GetTileValueAt(x: float, y: float) -> int
WorldEditor.SetAttrAtWorld(x: float, y: float, attrFlag: int) -> None
WorldEditor.ApplyAttrToTerrainByTile(terrainNumX: int, terrainNumY: int, textureIds: list, attrFlag: int) -> int
WorldEditor.RefreshAllTerrainAttrs() -> int
WorldEditor.CleanupWaterWithoutAttr() -> (int, int, int, int, int, int, int)
WorldEditor.GetLastSelectedObjectData() -> dict
WorldEditor.AccumulateSelectionPivot() -> (float, float, float)
WorldEditor.CollectPortalNumber() -> list
WorldEditor.ClearSelectedPortalNumber() -> None
WorldEditor.SetSelectedObjectName(name: str) -> None
WorldEditor.CopySelectedObjectsToClipboard() -> None
WorldEditor.PasteObjectsFromClipboard(x: float, y: float, z: float) -> None
WorldEditor.GetSelectedObjectPortalVectorRef() -> list
WorldEditor.RenderAccessorTerrain(renderMode: int, attrFlag: int) -> None
WorldEditor.RenderToShadowMap() -> None
WorldEditor.RenderShadow() -> None
WorldEditor.RenderMiniMap() -> None
WorldEditor.SetTextureBrushVector(textureList: list) -> None
WorldEditor.SetInitTextureBrushVector(textureList: list) -> None
WorldEditor.ReloadTerrainTextures() -> None
WorldEditor.ReloadBuildingTexture() -> None


CONSTANTS
=========

Scene Type Constants
--------------------
WorldEditor.SCENE_MAP
WorldEditor.SCENE_OBJECT
WorldEditor.SCENE_EFFECT
WorldEditor.SCENE_FLY
WorldEditor.SCENE_MAX

Map Type Constants
------------------
WorldEditor.MAPTYPE_INVALID
WorldEditor.MAPTYPE_INDOOR
WorldEditor.MAPTYPE_OUTDOOR

Property Type Constants
-----------------------
WorldEditor.PROPERTY_TYPE_NONE
WorldEditor.PROPERTY_TYPE_TREE
WorldEditor.PROPERTY_TYPE_BUILDING
WorldEditor.PROPERTY_TYPE_EFFECT
WorldEditor.PROPERTY_TYPE_AMBIENCE
WorldEditor.PROPERTY_TYPE_DUNGEON_BLOCK
WorldEditor.PROPERTY_TYPE_MAX_NUM

Terrain Constants
-----------------
WorldEditor.TERRAIN_SIZE
WorldEditor.TERRAIN_PATCHSIZE
WorldEditor.TERRAIN_PATCHCOUNT
WorldEditor.MAXTERRAINTEXTURES
WorldEditor.MAPBASE

Brush Shape Constants
---------------------
WorldEditor.BRUSH_SHAPE_NONE
WorldEditor.BRUSH_SHAPE_CIRCLE
WorldEditor.BRUSH_SHAPE_SQUARE
WorldEditor.BRUSH_SHAPE_MAX

Brush Type Constants
--------------------
WorldEditor.BRUSH_TYPE_NONE
WorldEditor.BRUSH_TYPE_UP
WorldEditor.BRUSH_TYPE_DOWN
WorldEditor.BRUSH_TYPE_PLATEAU
WorldEditor.BRUSH_TYPE_NOISE
WorldEditor.BRUSH_TYPE_SMOOTH
WorldEditor.BRUSH_TYPE_MAX

Boundary Load Constants
---------------------
WorldEditor.BOUNDARY_LOAD_INVALID
WorldEditor.BOUNDARY_LOAD_NOBOUNDARY
WorldEditor.BOUNDARY_LOAD_TOPLEFT
WorldEditor.BOUNDARY_LOAD_TOP
WorldEditor.BOUNDARY_LOAD_TOPRIGHT
WorldEditor.BOUNDARY_LOAD_LEFT
WorldEditor.BOUNDARY_LOAD_RIGHT
WorldEditor.BOUNDARY_LOAD_BOTTOMLEFT
WorldEditor.BOUNDARY_LOAD_BOTTOM
WorldEditor.BOUNDARY_LOAD_BOTTOMRIGHT
WorldEditor.BOUNDARY_LOAD_ALLBOUNDARY

Monster Area Type Constants
----------------------------
WorldEditor.MONSTERAREAINFOTYPE_INVALID
WorldEditor.MONSTERAREAINFOTYPE_MONSTER
WorldEditor.MONSTERAREAINFOTYPE_GROUP

Monster Direction Constants
----------------------------
WorldEditor.MONSTER_DIR_RANDOM
WorldEditor.MONSTER_DIR_NORTH
WorldEditor.MONSTER_DIR_NORTHEAST
WorldEditor.MONSTER_DIR_EAST
WorldEditor.MONSTER_DIR_SOUTHEAST
WorldEditor.MONSTER_DIR_SOUTH
WorldEditor.MONSTER_DIR_SOUTHWEST
WorldEditor.MONSTER_DIR_WEST
WorldEditor.MONSTER_DIR_NORTHWEST

Additional Constants
--------------------
WorldEditor.AROUND_AREA_NUM
WorldEditor.MAX_WATER_NUM
WorldEditor.ENV_DIRLIGHT_BACKGROUND
WorldEditor.TILEMAP_RAW_XSIZE
WorldEditor.TILEMAP_RAW_YSIZE
WorldEditor.ATTRMAP_XSIZE
WorldEditor.ATTRMAP_YSIZE
WorldEditor.CELLSCALE_IN_METER
WorldEditor.HALF_CELLSCALE_IN_METER
WorldEditor.ATTRIBUTE_BLOCK
WorldEditor.ATTRIBUTE_WATER
WorldEditor.ATTRIBUTE_BANPK

 

 

 

Hello, Can someone explain me how grass and objects replacements works ? And where can I find that crc list?

! Important ! 

I think I found a bug, when I copy the selection and start working on the map , in some cases I use Undo option or sometimes when I do blocking or no pvp attr and press undo or redo the objects selected (sometimes random objects, not really copied) are going deep underneath the map and I have to reset the height many times and is quite bad when I have mde effects for example : lamps with mde because they are not fitting with the same heights. 

One problem : trees rotation and tilting doesn't work in v49. 

Second problem:  Often I use more folders with ymir work, because I have some clean world editors for some custom maps, and I try to move them with the new v49 but takes off all the WorldEditorRemix_MfcRelease_v49.exe files and keeps the WorldEditorRemix_MfcRelease_v49.exe just in the biggest WE. 

Edited by Metin2 Dev International
Core X - External 2 Internal
Link to comment
https://metin2.dev/topic/2747-worldeditor-remix/page/16/#findComment-174028
Share on other sites

  • 1 month later...

 spacer.png

 

When if i save map with attr 4, ingame my grass dont pop, i use this function

		enum
		{
			ATTRIBUTE_BLOCK = (1 << 0),
			ATTRIBUTE_WATER = (1 << 1),
			ATTRIBUTE_BANPK = (1 << 2),
			ATTRIBUTE_GRASS = (1 << 4),
		};


bool CInstanceBase::__Background_IsGrassPixelPosition(const TPixelPosition& c_rkPPos)
{
	return CPythonBackground::Instance().isAttrOn(c_rkPPos.x, c_rkPPos.y, CTerrainImpl::ATTRIBUTE_GRASS);
}



 

Link to comment
https://metin2.dev/topic/2747-worldeditor-remix/page/16/#findComment-174503
Share on other sites

16 hours ago, zMenyske said:

 spacer.png

 

When if i save map with attr 4, ingame my grass dont pop, i use this function

		enum
		{
			ATTRIBUTE_BLOCK = (1 << 0),
			ATTRIBUTE_WATER = (1 << 1),
			ATTRIBUTE_BANPK = (1 << 2),
			ATTRIBUTE_GRASS = (1 << 4),
		};


bool CInstanceBase::__Background_IsGrassPixelPosition(const TPixelPosition& c_rkPPos)
{
	return CPythonBackground::Instance().isAttrOn(c_rkPPos.x, c_rkPPos.y, CTerrainImpl::ATTRIBUTE_GRASS);
}



 

ediit, not bug, just my map

This is the hidden content, please

  • Metin2 Dev 3
  • Love 3
Link to comment
https://metin2.dev/topic/2747-worldeditor-remix/page/16/#findComment-174522
Share on other sites

  • Honorable Member

Updated IT / DE / FR / AE / TR translations for the v49.

Same repo as ever for the TL: 

This is the hidden content, please

e.g. AE arabic:

; the default value "EN" won't load any .dll and will use the internal binary resources
; future versions of the program could make the previous generated .dll files useless
LOCALE = "AE"

.png

  • Metin2 Dev 6
  • Flame 1
  • Dislove 1
  • muscle 1
  • Love 6
Link to comment
https://metin2.dev/topic/2747-worldeditor-remix/page/16/#findComment-174592
Share on other sites

  • Honorable Member

I'm sorting out some urls for the WorldEditorRemix on GitHub. Added Website + Docs under a new Org. The Releases page is just a mirror just in case. Roadmap+Issues still blank here.

 

  • Metin2 Dev 26
  • Flame 1
  • Good 2
  • muscle 1
  • Love 1
  • Love 19
Link to comment
https://metin2.dev/topic/2747-worldeditor-remix/page/16/#findComment-174664
Share on other sites

  • 2 weeks later...
  • Active+ Member
Posted (edited)

Hello! A suggestion if its possible and when / if a newer version of WE will be released: 

Can't we manually adjust the height / rotation, ambience and scale? like to be able to input values manually. 
for example, once you modify the height of an object, if you try to drag the height option scroll bar back to 0, you'll not be able to. the minimum / maximum value being -0.310 or 0.310. 

https://metin2.download/video/S5m6LiSEMN75BdgGmJ63QFeVrJ7ngSvu/.mp4 - attached media for refference


Also, as a feedback, the last changes made on WE are huge and nice AF! Are so usefull and I like them!

Edited by Metin2 Dev International
Core X - External 2 Internal
Link to comment
https://metin2.dev/topic/2747-worldeditor-remix/page/16/#findComment-174821
Share on other sites

  • Honorable Member
Posted (edited)

V50 out!

  • Migrated to DirectX 9Ex
  • Fixed crash when moving mouse over freed object attribute instance
  • Fixed crash in terrain texture preview when image data is null or has unexpected BPP
  • Fixed effects not rendering on Effect/Model tabs after loading a map
  • Fixed particle rendering skipping all remaining particles when one was out of frustum
  • Fixed object height bias lost during terrain undo/redo and terrain height editing
     
Edited by martysama0134
  • Metin2 Dev 4
  • Flame 2
  • Love 1
  • Love 3
Link to comment
https://metin2.dev/topic/2747-worldeditor-remix/page/16/#findComment-174835
Share on other sites

  • Honorable Member
1 hour ago, martysama0134 said:

V50 out!

  • Migrated to DirectX 9Ex
  • Fixed crash when moving mouse over freed object attribute instance
  • Fixed crash in terrain texture preview when image data is null or has unexpected BPP
  • Fixed effects not rendering on Effect/Model tabs after loading a map
  • Fixed particle rendering skipping all remaining particles when one was out of frustum
  • Fixed object height bias lost during terrain undo/redo and terrain height editing
     

1. Could you widen the World, MSM, Effect, and Flight panels by 50 pixels?
.gif

2. In Perspective Adjust, there is a noticeable lack of an option to restore the default Field of View value.

  • Think 1

GhwYizE.gif

Link to comment
https://metin2.dev/topic/2747-worldeditor-remix/page/16/#findComment-174836
Share on other sites

Hi everyone,

I’m trying to use WorldEditor Remix on a Windows VPS and I’m running into the following error:

CreateUtilData: Cannot create sphere primitive

Here’s some context about my environment:

OS: Windows Server 2025 Datacenter x64

Environment: VPS (no dedicated GPU, using virtualized graphics / default Microsoft drivers)

Access: Remote Desktop (RDP)

I’m wondering if the issue could be related to the lack of proper 3D hardware support, or possibly missing / limited DirectX or OpenGL features in a VPS environment.

Has anyone experienced something similar running WorldEditor in a virtualized setup?
 

Thanks in advance 🙏

  • Think 1
Link to comment
https://metin2.dev/topic/2747-worldeditor-remix/page/16/#findComment-174848
Share on other sites

  • Honorable Member
Posted (edited)

V51 Out!

  • New ENABLE_TREE_ROTATION option (default: false); prevents leaf billboard glitch when tree rotation is non-zero
  • MAI_IMAGE_WITHOUT_MONSTER_AREA_INFO now defaults to true; monster area info no longer rendered on MAI images by default
  • Fixed black shadowmap/minimap output after DX9Ex migration
  • Fixed shadowmap generation only capturing objects near the camera; now it renders all the loaded areas
  • Fixed trees and buildings missing from shadowmap when camera is too low
Edited by martysama0134
  • Metin2 Dev 3
  • Love 1
Link to comment
https://metin2.dev/topic/2747-worldeditor-remix/page/16/#findComment-174856
Share on other sites

  • Honorable Member

V52 Out!

  • New EXPORT_MAI_ATLAS_AS_PNG option (default: true); atlas/MAI images exported as PNG instead of BMP
  • Terrain texture preview now loads from pack files when not on disk
  • Removed DevIL (OpenIL) dependency entirely; all image operations use D3DX
  • Fixed black minimap.dds and atlas output after DX9Ex migration
  • Fixed memory leak in attr map initialization
  • Metin2 Dev 1
  • Love 2
Link to comment
https://metin2.dev/topic/2747-worldeditor-remix/page/16/#findComment-174870
Share on other sites

Hello,I have a suggestion for adding a new feature I’m not sure if it would work with WorldEditor or if it can even be added

It would be great if Marty could implement it We could create terrain and mountains much more easily and wouldn’t need to spend so much time on details

I really like this feature in Unreal Engine it allows me to create many maps without wasting a lot of time

I’m not very good at explaining, but the video will show the idea and the feature that designers might want in WE

 

 

  • Think 1
  • Good 1
  • Love 2
Link to comment
https://metin2.dev/topic/2747-worldeditor-remix/page/16/#findComment-174872
Share on other sites

  • Honorable Member

v53 out!

  • New PRELOAD_ALL_TERRAINS option (default: true); it preloads all the terrains at map load, and eliminates freezes when crossing adjacent areas (150ms → 1s)
  • SpeedTree leaf rendering moved to GPU-local memory for better performance
  • Improved MAI minimap tile save
  • Fixed memory leak in attr map initialization
  • Flame 1
  • Love 6
Link to comment
https://metin2.dev/topic/2747-worldeditor-remix/page/16/#findComment-174882
Share on other sites

  • Honorable Member

V54 out!

  • 64bit version available (shipped in a separate _x64 zip)
  • Miles dependency removed (switched to header-only miniaudio)
  • Granny2 dll dependency removed (now statically linked)
  • Flame 1
  • Love 6
Link to comment
https://metin2.dev/topic/2747-worldeditor-remix/page/16/#findComment-174908
Share on other sites

  • Honorable Member

v55 out!

  • Fixed height brush accidentally moving objects underground
  • Improved debug collision rendering; color-coded types, solid by default, wireframe when toggled
  • Added GPU/process memory trimming on map close/reload
  • Fixed 32-bit index buffer limit; high-poly models (>65K vertices) no longer silently corrupt

Wireframe toggled off

.png

 

Wireframe toggled on
.png


 

  • Flame 1
  • Love 5
Link to comment
https://metin2.dev/topic/2747-worldeditor-remix/page/16/#findComment-174926
Share on other sites

  • Active+ Member
8 hours ago, Tengrist said:

Marty can u enhance the shadow logic, current one is like pixels can be drawn like exact object

for what exactly? 

There are too many clients made and most of them have the default shadow logic due to different reasons. You can t make the the WE specific for a client. What i want to say is it is useless to rewrite the shadow logic to be dynamic or such if the client where you are implementing the map created have the default shadow system. 

Link to comment
https://metin2.dev/topic/2747-worldeditor-remix/page/16/#findComment-174934
Share on other sites

23 hours ago, KolenMG said:

Tam olarak ne için? 

Çok fazla istemci oluşturulmuş ve bunların çoğunda çeşitli nedenlerden dolayı varsayılan gölge mantığı bulunuyor. WE'yi istemciye özel hale getiremezsiniz. Demek istediğim, haritayı uyguladığınız istemci varsayılan gölge sistemine sahipse, gölge mantığını dinamik veya benzeri bir şekilde yeniden yazmanın hiçbir faydası yok. 

I do not mean dynamic. Just HD statick shadow

Link to comment
https://metin2.dev/topic/2747-worldeditor-remix/page/16/#findComment-174941
Share on other sites

 

28 minutes ago, Tengrist said:

I do not mean dynamic. Just HD statick shadow

Maybe source work could be done to have static map meshes considered to be movable (just like everything which receives dynamic shadows) and included in dynamic shadows. That would be a better 'fix' to have a consistent look overall. FPS cost in mind.

 

Edit: https://metin2.dev/topic/34033-c-dynamic-shadows-for-trees-objects-remove-static-shadowmap-logic/

 

 

Maybe Marty implements " DYN Sahdows " for the World Editor. 

Edited by Slyer1991
Link to comment
https://metin2.dev/topic/2747-worldeditor-remix/page/16/#findComment-174942
Share on other sites

  • Honorable Member
6 hours ago, Tengrist said:

I do not mean dynamic. Just HD statick shadow

In Martysama archive, you will find versions of the program that generate higher-quality shadows.

  • Good 1

GhwYizE.gif

Link to comment
https://metin2.dev/topic/2747-worldeditor-remix/page/16/#findComment-174947
Share on other sites

  • Honorable Member
Posted (edited)

V56 out!

  • Added color-coded attr overlay: block=red, water=blue, banpk=green; overlapping attrs blend additively
  • Added new config option ENABLE_MAP_ATTR_COLORED (default: true): color-coded attr overlay; set to false for legacy white
  • Added we.DrawHeightBrush optional refreshObjectHeight parameter for Python scripts
  • Fixed stale collision visuals persisting after loading a new map
  • Fixed attr overlay not refreshing when moving across cells
  • Fixed crash on high-poly models with 32-bit indices (x64 heap overflow)
  • Fixed minimap.dds missing from Export Map
  • Improved 32-bit index detection using GrannyGetMeshBytesPerIndex

 

Edited by martysama0134
  • Metin2 Dev 3
  • Flame 2
Link to comment
https://metin2.dev/topic/2747-worldeditor-remix/page/16/#findComment-174967
Share on other sites

Don't use any images from : imgur, turkmmop, freakgamers, inforge, hizliresim... Or your content will be deleted without notice...
Use : https://metin2.download/media/add/

Please use https://metin2.download/ when uploading files smaller than 100MB, otherwise the approval will take longer due to manual upload.

Please sign in to comment

You will be able to leave a comment after signing in



Sign In Now
×
×
  • Create New...

Important Information

Terms of Use / Privacy Policy / Guidelines / We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.