├── MuConfig
├── errs9112221
├── main.rc
├── mu.ico
├── lcc
│ ├── muKonfig.err
│ ├── main.res
│ ├── muKonfig.exe
│ ├── mukonfig.obj
│ ├── muKonfig.dep
│ └── Makefile
├── muConfig.exe
├── muConfig.layout
├── muKonfig.prj
├── Makefile.win
├── muConfig.dev
└── muKonfig.c
├── .gitignore
├── MuMapEdit
├── fp.dir
├── RGBHead.bmp
├── menu.rc
├── menu.res
├── fpc-res.or
├── MonoHead.bmp
├── bmpheads.res
├── fpc-res.res
├── mumapedit.exe
├── bmpheads.rc
├── MuMapEditTMP
│ ├── Terrain.att
│ ├── Terrain.map
│ ├── TileGrass01.bmp
│ ├── TileGrass02.bmp
│ ├── TileRock01.bmp
│ ├── TileRock02.bmp
│ ├── TileWater01.bmp
│ ├── TileWood01.bmp
│ ├── TerrainHeight.ozb
│ ├── TerrainLight.bmp
│ ├── TileGround01.bmp
│ ├── TileGround02.bmp
│ └── TileGround03.bmp
├── example
│ ├── World3
│ │ ├── borken.bmp
│ │ ├── Terrain.att
│ │ ├── Terrain.map
│ │ ├── TileGrass01.bmp
│ │ ├── TileGrass02.bmp
│ │ ├── TileRock01.bmp
│ │ ├── TileRock02.bmp
│ │ ├── TileRock03.bmp
│ │ ├── TileRock04.bmp
│ │ ├── TileRock05.bmp
│ │ ├── TileRock06.bmp
│ │ ├── TileRock07.bmp
│ │ ├── TileWater01.bmp
│ │ ├── TileWood01.bmp
│ │ ├── TerrainHeight.ozb
│ │ ├── TerrainLight.bmp
│ │ ├── TileGround01.bmp
│ │ ├── TileGround02.bmp
│ │ └── TileGround03.bmp
│ └── World1
│ │ ├── Terrain.att
│ │ ├── Terrain.map
│ │ ├── TileGrass01.bmp
│ │ ├── TileGrass02.bmp
│ │ ├── TileRock01.bmp
│ │ ├── TileRock02.bmp
│ │ ├── TileWater01.bmp
│ │ ├── TileWood01.bmp
│ │ ├── TerrainHeight.OZB
│ │ ├── TerrainLight.bmp
│ │ ├── TileGround01.bmp
│ │ ├── TileGround02.bmp
│ │ └── TileGround03.bmp
└── mumapedit.pas
├── MuThreeJs
├── style.css
├── world0
│ ├── TerrainLight.jpg
│ ├── TileGrass01.jpg
│ ├── TileGrass01.tga
│ ├── TileGrass02.jpg
│ ├── TileGround01.jpg
│ ├── TileGround02.jpg
│ ├── TileGround03.jpg
│ ├── TileRock01.jpg
│ ├── TileRock02.jpg
│ ├── TileWater01.jpg
│ ├── TileWood01.jpg
│ ├── _TileGrass01.jpg
│ └── TerrainHeight.bmp
├── imgLoader.js
├── index.html
├── input.js
└── main.js
├── MuBmd
├── 0.74
│ ├── Gate.bmd
│ ├── Item.txt
│ ├── Text.bmd
│ ├── item.bmd
│ ├── skill.bmd
│ ├── Filter.bmd
│ ├── NpcName(Kor).txt
│ └── skill_dexor.bmd
├── 0.78
│ ├── Text.bmd
│ ├── item.bmd
│ └── skill.bmd
├── mobius
│ ├── Item.bmd
│ ├── Quest.bmd
│ ├── Skill.bmd
│ ├── Text.bmd
│ ├── Text.txt
│ ├── Movereq.bmd
│ ├── skill_dexor.bmd
│ └── NpcName(Eng).txt
├── 0.74_fixed
│ ├── Text.txt
│ ├── item.bmd
│ ├── text.bmd
│ ├── filter.bmd
│ ├── skill.bmd
│ ├── Skill.txt
│ ├── NpcName(kor).txt
│ └── Item.txt
├── 0.78_fixed
│ ├── Item.bmd
│ ├── Text.bmd
│ ├── Text.txt
│ ├── Skill.bmd
│ └── Skill.txt
├── defBMD.php
├── _defBMD
│ ├── filterAll.php
│ ├── textAll.php
│ ├── skill074.php
│ ├── skill100.php
│ ├── item074.php
│ └── item100.php
└── index.php
├── MuMapConv
├── mumapconv.exe
└── mumapconv.pas
├── MuTexConv
├── mutexconv.exe
└── mutexconv.pas
├── wtf2txt
├── pascal
│ ├── wtf2txt.exe
│ └── wtf2txt.pas
├── sample files
│ ├── message.txt
│ ├── message.wtf
│ ├── message_kor.txt
│ ├── message_kor.wtf
│ └── New folder
│ │ ├── message_kor.txt
│ │ └── message_kor.wtf
└── php
│ └── wtf2txt.php
├── MuClientAssemble
└── clientAssemble.php
├── LICENSE.md
├── README.md
└── mulogo.svg
/MuConfig/errs9112221:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 |
2 | \.vscode/
3 |
--------------------------------------------------------------------------------
/MuConfig/main.rc:
--------------------------------------------------------------------------------
1 | 888 ICON "mu.ico"
2 |
--------------------------------------------------------------------------------
/MuMapEdit/fp.dir:
--------------------------------------------------------------------------------
1 | Comment=Do NOT delete this file!!!
2 |
--------------------------------------------------------------------------------
/MuMapEdit/RGBHead.bmp:
--------------------------------------------------------------------------------
1 | BM6 6 (
--------------------------------------------------------------------------------
/MuThreeJs/style.css:
--------------------------------------------------------------------------------
1 | HTML, BODY {
2 | margin: 0;
3 | padding: 0;
4 | }
5 |
--------------------------------------------------------------------------------
/MuConfig/mu.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tehKaiN/muonline-appz/HEAD/MuConfig/mu.ico
--------------------------------------------------------------------------------
/MuMapEdit/menu.rc:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tehKaiN/muonline-appz/HEAD/MuMapEdit/menu.rc
--------------------------------------------------------------------------------
/MuMapEdit/menu.res:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tehKaiN/muonline-appz/HEAD/MuMapEdit/menu.res
--------------------------------------------------------------------------------
/MuBmd/0.74/Gate.bmd:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tehKaiN/muonline-appz/HEAD/MuBmd/0.74/Gate.bmd
--------------------------------------------------------------------------------
/MuBmd/0.74/Item.txt:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tehKaiN/muonline-appz/HEAD/MuBmd/0.74/Item.txt
--------------------------------------------------------------------------------
/MuBmd/0.74/Text.bmd:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tehKaiN/muonline-appz/HEAD/MuBmd/0.74/Text.bmd
--------------------------------------------------------------------------------
/MuBmd/0.74/item.bmd:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tehKaiN/muonline-appz/HEAD/MuBmd/0.74/item.bmd
--------------------------------------------------------------------------------
/MuBmd/0.74/skill.bmd:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tehKaiN/muonline-appz/HEAD/MuBmd/0.74/skill.bmd
--------------------------------------------------------------------------------
/MuBmd/0.78/Text.bmd:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tehKaiN/muonline-appz/HEAD/MuBmd/0.78/Text.bmd
--------------------------------------------------------------------------------
/MuBmd/0.78/item.bmd:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tehKaiN/muonline-appz/HEAD/MuBmd/0.78/item.bmd
--------------------------------------------------------------------------------
/MuBmd/0.78/skill.bmd:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tehKaiN/muonline-appz/HEAD/MuBmd/0.78/skill.bmd
--------------------------------------------------------------------------------
/MuConfig/lcc/muKonfig.err:
--------------------------------------------------------------------------------
1 | Warning d:\prg\__c\muconfig\mukonfig.c: 70 missing return value
2 |
--------------------------------------------------------------------------------
/MuMapEdit/fpc-res.or:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tehKaiN/muonline-appz/HEAD/MuMapEdit/fpc-res.or
--------------------------------------------------------------------------------
/MuBmd/0.74/Filter.bmd:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tehKaiN/muonline-appz/HEAD/MuBmd/0.74/Filter.bmd
--------------------------------------------------------------------------------
/MuBmd/mobius/Item.bmd:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tehKaiN/muonline-appz/HEAD/MuBmd/mobius/Item.bmd
--------------------------------------------------------------------------------
/MuBmd/mobius/Quest.bmd:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tehKaiN/muonline-appz/HEAD/MuBmd/mobius/Quest.bmd
--------------------------------------------------------------------------------
/MuBmd/mobius/Skill.bmd:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tehKaiN/muonline-appz/HEAD/MuBmd/mobius/Skill.bmd
--------------------------------------------------------------------------------
/MuBmd/mobius/Text.bmd:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tehKaiN/muonline-appz/HEAD/MuBmd/mobius/Text.bmd
--------------------------------------------------------------------------------
/MuBmd/mobius/Text.txt:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tehKaiN/muonline-appz/HEAD/MuBmd/mobius/Text.txt
--------------------------------------------------------------------------------
/MuConfig/lcc/main.res:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tehKaiN/muonline-appz/HEAD/MuConfig/lcc/main.res
--------------------------------------------------------------------------------
/MuConfig/muConfig.exe:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tehKaiN/muonline-appz/HEAD/MuConfig/muConfig.exe
--------------------------------------------------------------------------------
/MuMapConv/mumapconv.exe:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tehKaiN/muonline-appz/HEAD/MuMapConv/mumapconv.exe
--------------------------------------------------------------------------------
/MuMapEdit/MonoHead.bmp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tehKaiN/muonline-appz/HEAD/MuMapEdit/MonoHead.bmp
--------------------------------------------------------------------------------
/MuMapEdit/bmpheads.res:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tehKaiN/muonline-appz/HEAD/MuMapEdit/bmpheads.res
--------------------------------------------------------------------------------
/MuMapEdit/fpc-res.res:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tehKaiN/muonline-appz/HEAD/MuMapEdit/fpc-res.res
--------------------------------------------------------------------------------
/MuMapEdit/mumapedit.exe:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tehKaiN/muonline-appz/HEAD/MuMapEdit/mumapedit.exe
--------------------------------------------------------------------------------
/MuTexConv/mutexconv.exe:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tehKaiN/muonline-appz/HEAD/MuTexConv/mutexconv.exe
--------------------------------------------------------------------------------
/MuBmd/0.74_fixed/Text.txt:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tehKaiN/muonline-appz/HEAD/MuBmd/0.74_fixed/Text.txt
--------------------------------------------------------------------------------
/MuBmd/0.74_fixed/item.bmd:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tehKaiN/muonline-appz/HEAD/MuBmd/0.74_fixed/item.bmd
--------------------------------------------------------------------------------
/MuBmd/0.74_fixed/text.bmd:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tehKaiN/muonline-appz/HEAD/MuBmd/0.74_fixed/text.bmd
--------------------------------------------------------------------------------
/MuBmd/0.78_fixed/Item.bmd:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tehKaiN/muonline-appz/HEAD/MuBmd/0.78_fixed/Item.bmd
--------------------------------------------------------------------------------
/MuBmd/0.78_fixed/Text.bmd:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tehKaiN/muonline-appz/HEAD/MuBmd/0.78_fixed/Text.bmd
--------------------------------------------------------------------------------
/MuBmd/0.78_fixed/Text.txt:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tehKaiN/muonline-appz/HEAD/MuBmd/0.78_fixed/Text.txt
--------------------------------------------------------------------------------
/MuBmd/mobius/Movereq.bmd:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tehKaiN/muonline-appz/HEAD/MuBmd/mobius/Movereq.bmd
--------------------------------------------------------------------------------
/MuConfig/lcc/muKonfig.exe:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tehKaiN/muonline-appz/HEAD/MuConfig/lcc/muKonfig.exe
--------------------------------------------------------------------------------
/MuConfig/lcc/mukonfig.obj:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tehKaiN/muonline-appz/HEAD/MuConfig/lcc/mukonfig.obj
--------------------------------------------------------------------------------
/MuBmd/0.74/NpcName(Kor).txt:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tehKaiN/muonline-appz/HEAD/MuBmd/0.74/NpcName(Kor).txt
--------------------------------------------------------------------------------
/MuBmd/0.74/skill_dexor.bmd:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tehKaiN/muonline-appz/HEAD/MuBmd/0.74/skill_dexor.bmd
--------------------------------------------------------------------------------
/MuBmd/0.74_fixed/filter.bmd:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tehKaiN/muonline-appz/HEAD/MuBmd/0.74_fixed/filter.bmd
--------------------------------------------------------------------------------
/MuBmd/0.74_fixed/skill.bmd:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tehKaiN/muonline-appz/HEAD/MuBmd/0.74_fixed/skill.bmd
--------------------------------------------------------------------------------
/MuBmd/0.78_fixed/Skill.bmd:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tehKaiN/muonline-appz/HEAD/MuBmd/0.78_fixed/Skill.bmd
--------------------------------------------------------------------------------
/MuBmd/mobius/skill_dexor.bmd:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tehKaiN/muonline-appz/HEAD/MuBmd/mobius/skill_dexor.bmd
--------------------------------------------------------------------------------
/wtf2txt/pascal/wtf2txt.exe:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tehKaiN/muonline-appz/HEAD/wtf2txt/pascal/wtf2txt.exe
--------------------------------------------------------------------------------
/MuBmd/mobius/NpcName(Eng).txt:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tehKaiN/muonline-appz/HEAD/MuBmd/mobius/NpcName(Eng).txt
--------------------------------------------------------------------------------
/MuMapEdit/bmpheads.rc:
--------------------------------------------------------------------------------
1 | RGBHead RCDATA "C:\prg\MuMapEdit\RGBHead.bmp"
2 | MonoHead RCDATA "C:\prg\MuMapEdit\MonoHead.bmp"
--------------------------------------------------------------------------------
/MuThreeJs/world0/TerrainLight.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tehKaiN/muonline-appz/HEAD/MuThreeJs/world0/TerrainLight.jpg
--------------------------------------------------------------------------------
/MuThreeJs/world0/TileGrass01.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tehKaiN/muonline-appz/HEAD/MuThreeJs/world0/TileGrass01.jpg
--------------------------------------------------------------------------------
/MuThreeJs/world0/TileGrass01.tga:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tehKaiN/muonline-appz/HEAD/MuThreeJs/world0/TileGrass01.tga
--------------------------------------------------------------------------------
/MuThreeJs/world0/TileGrass02.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tehKaiN/muonline-appz/HEAD/MuThreeJs/world0/TileGrass02.jpg
--------------------------------------------------------------------------------
/MuThreeJs/world0/TileGround01.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tehKaiN/muonline-appz/HEAD/MuThreeJs/world0/TileGround01.jpg
--------------------------------------------------------------------------------
/MuThreeJs/world0/TileGround02.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tehKaiN/muonline-appz/HEAD/MuThreeJs/world0/TileGround02.jpg
--------------------------------------------------------------------------------
/MuThreeJs/world0/TileGround03.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tehKaiN/muonline-appz/HEAD/MuThreeJs/world0/TileGround03.jpg
--------------------------------------------------------------------------------
/MuThreeJs/world0/TileRock01.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tehKaiN/muonline-appz/HEAD/MuThreeJs/world0/TileRock01.jpg
--------------------------------------------------------------------------------
/MuThreeJs/world0/TileRock02.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tehKaiN/muonline-appz/HEAD/MuThreeJs/world0/TileRock02.jpg
--------------------------------------------------------------------------------
/MuThreeJs/world0/TileWater01.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tehKaiN/muonline-appz/HEAD/MuThreeJs/world0/TileWater01.jpg
--------------------------------------------------------------------------------
/MuThreeJs/world0/TileWood01.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tehKaiN/muonline-appz/HEAD/MuThreeJs/world0/TileWood01.jpg
--------------------------------------------------------------------------------
/MuThreeJs/world0/_TileGrass01.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tehKaiN/muonline-appz/HEAD/MuThreeJs/world0/_TileGrass01.jpg
--------------------------------------------------------------------------------
/wtf2txt/sample files/message.txt:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tehKaiN/muonline-appz/HEAD/wtf2txt/sample files/message.txt
--------------------------------------------------------------------------------
/wtf2txt/sample files/message.wtf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tehKaiN/muonline-appz/HEAD/wtf2txt/sample files/message.wtf
--------------------------------------------------------------------------------
/MuClientAssemble/clientAssemble.php:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tehKaiN/muonline-appz/HEAD/MuClientAssemble/clientAssemble.php
--------------------------------------------------------------------------------
/MuMapEdit/MuMapEditTMP/Terrain.att:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tehKaiN/muonline-appz/HEAD/MuMapEdit/MuMapEditTMP/Terrain.att
--------------------------------------------------------------------------------
/MuMapEdit/MuMapEditTMP/Terrain.map:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tehKaiN/muonline-appz/HEAD/MuMapEdit/MuMapEditTMP/Terrain.map
--------------------------------------------------------------------------------
/MuMapEdit/example/World3/borken.bmp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tehKaiN/muonline-appz/HEAD/MuMapEdit/example/World3/borken.bmp
--------------------------------------------------------------------------------
/MuThreeJs/world0/TerrainHeight.bmp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tehKaiN/muonline-appz/HEAD/MuThreeJs/world0/TerrainHeight.bmp
--------------------------------------------------------------------------------
/MuMapEdit/MuMapEditTMP/TileGrass01.bmp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tehKaiN/muonline-appz/HEAD/MuMapEdit/MuMapEditTMP/TileGrass01.bmp
--------------------------------------------------------------------------------
/MuMapEdit/MuMapEditTMP/TileGrass02.bmp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tehKaiN/muonline-appz/HEAD/MuMapEdit/MuMapEditTMP/TileGrass02.bmp
--------------------------------------------------------------------------------
/MuMapEdit/MuMapEditTMP/TileRock01.bmp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tehKaiN/muonline-appz/HEAD/MuMapEdit/MuMapEditTMP/TileRock01.bmp
--------------------------------------------------------------------------------
/MuMapEdit/MuMapEditTMP/TileRock02.bmp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tehKaiN/muonline-appz/HEAD/MuMapEdit/MuMapEditTMP/TileRock02.bmp
--------------------------------------------------------------------------------
/MuMapEdit/MuMapEditTMP/TileWater01.bmp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tehKaiN/muonline-appz/HEAD/MuMapEdit/MuMapEditTMP/TileWater01.bmp
--------------------------------------------------------------------------------
/MuMapEdit/MuMapEditTMP/TileWood01.bmp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tehKaiN/muonline-appz/HEAD/MuMapEdit/MuMapEditTMP/TileWood01.bmp
--------------------------------------------------------------------------------
/MuMapEdit/example/World1/Terrain.att:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tehKaiN/muonline-appz/HEAD/MuMapEdit/example/World1/Terrain.att
--------------------------------------------------------------------------------
/MuMapEdit/example/World1/Terrain.map:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tehKaiN/muonline-appz/HEAD/MuMapEdit/example/World1/Terrain.map
--------------------------------------------------------------------------------
/MuMapEdit/example/World3/Terrain.att:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tehKaiN/muonline-appz/HEAD/MuMapEdit/example/World3/Terrain.att
--------------------------------------------------------------------------------
/MuMapEdit/example/World3/Terrain.map:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tehKaiN/muonline-appz/HEAD/MuMapEdit/example/World3/Terrain.map
--------------------------------------------------------------------------------
/wtf2txt/sample files/message_kor.txt:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tehKaiN/muonline-appz/HEAD/wtf2txt/sample files/message_kor.txt
--------------------------------------------------------------------------------
/wtf2txt/sample files/message_kor.wtf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tehKaiN/muonline-appz/HEAD/wtf2txt/sample files/message_kor.wtf
--------------------------------------------------------------------------------
/MuMapEdit/MuMapEditTMP/TerrainHeight.ozb:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tehKaiN/muonline-appz/HEAD/MuMapEdit/MuMapEditTMP/TerrainHeight.ozb
--------------------------------------------------------------------------------
/MuMapEdit/MuMapEditTMP/TerrainLight.bmp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tehKaiN/muonline-appz/HEAD/MuMapEdit/MuMapEditTMP/TerrainLight.bmp
--------------------------------------------------------------------------------
/MuMapEdit/MuMapEditTMP/TileGround01.bmp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tehKaiN/muonline-appz/HEAD/MuMapEdit/MuMapEditTMP/TileGround01.bmp
--------------------------------------------------------------------------------
/MuMapEdit/MuMapEditTMP/TileGround02.bmp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tehKaiN/muonline-appz/HEAD/MuMapEdit/MuMapEditTMP/TileGround02.bmp
--------------------------------------------------------------------------------
/MuMapEdit/MuMapEditTMP/TileGround03.bmp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tehKaiN/muonline-appz/HEAD/MuMapEdit/MuMapEditTMP/TileGround03.bmp
--------------------------------------------------------------------------------
/MuMapEdit/example/World1/TileGrass01.bmp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tehKaiN/muonline-appz/HEAD/MuMapEdit/example/World1/TileGrass01.bmp
--------------------------------------------------------------------------------
/MuMapEdit/example/World1/TileGrass02.bmp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tehKaiN/muonline-appz/HEAD/MuMapEdit/example/World1/TileGrass02.bmp
--------------------------------------------------------------------------------
/MuMapEdit/example/World1/TileRock01.bmp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tehKaiN/muonline-appz/HEAD/MuMapEdit/example/World1/TileRock01.bmp
--------------------------------------------------------------------------------
/MuMapEdit/example/World1/TileRock02.bmp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tehKaiN/muonline-appz/HEAD/MuMapEdit/example/World1/TileRock02.bmp
--------------------------------------------------------------------------------
/MuMapEdit/example/World1/TileWater01.bmp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tehKaiN/muonline-appz/HEAD/MuMapEdit/example/World1/TileWater01.bmp
--------------------------------------------------------------------------------
/MuMapEdit/example/World1/TileWood01.bmp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tehKaiN/muonline-appz/HEAD/MuMapEdit/example/World1/TileWood01.bmp
--------------------------------------------------------------------------------
/MuMapEdit/example/World3/TileGrass01.bmp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tehKaiN/muonline-appz/HEAD/MuMapEdit/example/World3/TileGrass01.bmp
--------------------------------------------------------------------------------
/MuMapEdit/example/World3/TileGrass02.bmp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tehKaiN/muonline-appz/HEAD/MuMapEdit/example/World3/TileGrass02.bmp
--------------------------------------------------------------------------------
/MuMapEdit/example/World3/TileRock01.bmp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tehKaiN/muonline-appz/HEAD/MuMapEdit/example/World3/TileRock01.bmp
--------------------------------------------------------------------------------
/MuMapEdit/example/World3/TileRock02.bmp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tehKaiN/muonline-appz/HEAD/MuMapEdit/example/World3/TileRock02.bmp
--------------------------------------------------------------------------------
/MuMapEdit/example/World3/TileRock03.bmp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tehKaiN/muonline-appz/HEAD/MuMapEdit/example/World3/TileRock03.bmp
--------------------------------------------------------------------------------
/MuMapEdit/example/World3/TileRock04.bmp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tehKaiN/muonline-appz/HEAD/MuMapEdit/example/World3/TileRock04.bmp
--------------------------------------------------------------------------------
/MuMapEdit/example/World3/TileRock05.bmp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tehKaiN/muonline-appz/HEAD/MuMapEdit/example/World3/TileRock05.bmp
--------------------------------------------------------------------------------
/MuMapEdit/example/World3/TileRock06.bmp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tehKaiN/muonline-appz/HEAD/MuMapEdit/example/World3/TileRock06.bmp
--------------------------------------------------------------------------------
/MuMapEdit/example/World3/TileRock07.bmp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tehKaiN/muonline-appz/HEAD/MuMapEdit/example/World3/TileRock07.bmp
--------------------------------------------------------------------------------
/MuMapEdit/example/World3/TileWater01.bmp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tehKaiN/muonline-appz/HEAD/MuMapEdit/example/World3/TileWater01.bmp
--------------------------------------------------------------------------------
/MuMapEdit/example/World3/TileWood01.bmp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tehKaiN/muonline-appz/HEAD/MuMapEdit/example/World3/TileWood01.bmp
--------------------------------------------------------------------------------
/MuMapEdit/example/World1/TerrainHeight.OZB:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tehKaiN/muonline-appz/HEAD/MuMapEdit/example/World1/TerrainHeight.OZB
--------------------------------------------------------------------------------
/MuMapEdit/example/World1/TerrainLight.bmp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tehKaiN/muonline-appz/HEAD/MuMapEdit/example/World1/TerrainLight.bmp
--------------------------------------------------------------------------------
/MuMapEdit/example/World1/TileGround01.bmp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tehKaiN/muonline-appz/HEAD/MuMapEdit/example/World1/TileGround01.bmp
--------------------------------------------------------------------------------
/MuMapEdit/example/World1/TileGround02.bmp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tehKaiN/muonline-appz/HEAD/MuMapEdit/example/World1/TileGround02.bmp
--------------------------------------------------------------------------------
/MuMapEdit/example/World1/TileGround03.bmp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tehKaiN/muonline-appz/HEAD/MuMapEdit/example/World1/TileGround03.bmp
--------------------------------------------------------------------------------
/MuMapEdit/example/World3/TerrainHeight.ozb:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tehKaiN/muonline-appz/HEAD/MuMapEdit/example/World3/TerrainHeight.ozb
--------------------------------------------------------------------------------
/MuMapEdit/example/World3/TerrainLight.bmp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tehKaiN/muonline-appz/HEAD/MuMapEdit/example/World3/TerrainLight.bmp
--------------------------------------------------------------------------------
/MuMapEdit/example/World3/TileGround01.bmp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tehKaiN/muonline-appz/HEAD/MuMapEdit/example/World3/TileGround01.bmp
--------------------------------------------------------------------------------
/MuMapEdit/example/World3/TileGround02.bmp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tehKaiN/muonline-appz/HEAD/MuMapEdit/example/World3/TileGround02.bmp
--------------------------------------------------------------------------------
/MuMapEdit/example/World3/TileGround03.bmp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tehKaiN/muonline-appz/HEAD/MuMapEdit/example/World3/TileGround03.bmp
--------------------------------------------------------------------------------
/wtf2txt/sample files/New folder/message_kor.txt:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tehKaiN/muonline-appz/HEAD/wtf2txt/sample files/New folder/message_kor.txt
--------------------------------------------------------------------------------
/wtf2txt/sample files/New folder/message_kor.wtf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tehKaiN/muonline-appz/HEAD/wtf2txt/sample files/New folder/message_kor.wtf
--------------------------------------------------------------------------------
/MuThreeJs/imgLoader.js:
--------------------------------------------------------------------------------
1 | textureLoader = function() {
2 | this.toLoad = [];
3 | this.loadState = 0;
4 | }
5 |
6 | textureLoader.prototype.add = function(img) {
7 | this.toLoad =
8 | }
--------------------------------------------------------------------------------
/MuConfig/muConfig.layout:
--------------------------------------------------------------------------------
1 | [Editor_0]
2 | CursorCol=1
3 | CursorRow=1
4 | TopLine=1
5 | LeftChar=1
6 | Open=1
7 | Top=1
8 | [Editors]
9 | Order=0
10 | Focused=0
11 | [Editor_1]
12 | Open=0
13 | Top=0
14 |
--------------------------------------------------------------------------------
/MuBmd/defBMD.php:
--------------------------------------------------------------------------------
1 | [],
5 | 'skill' => [],
6 | 'item' => [],
7 | 'filter' => [],
8 | );
9 |
10 | $defFiles = scanDir('_defBMD');
11 | forEach($defFiles as $file) {
12 | if($file != '.' && $file != '..')
13 | require('_defBMD/'.$file);
14 | }
15 |
16 | ?>
--------------------------------------------------------------------------------
/MuBmd/_defBMD/filterAll.php:
--------------------------------------------------------------------------------
1 | 20,
8 | 'groupSize' => 0,
9 | 'header' => 0,
10 | 'footer' => 0,
11 | 'translateField' => 'Phrase',
12 | 'fields' => [
13 | ['Phrase', 'txt', 20],
14 | ],
15 | ];
16 |
17 | ?>
--------------------------------------------------------------------------------
/MuBmd/_defBMD/textAll.php:
--------------------------------------------------------------------------------
1 | 300,
8 | 'groupSize' => 0,
9 | 'header' => 0,
10 | 'footer' => 0,
11 | 'translateField' => 'Content',
12 | 'fields' => [
13 | ['Content', 'txt', 300],
14 | ],
15 | ];
16 |
17 | ?>
--------------------------------------------------------------------------------
/MuBmd/_defBMD/skill074.php:
--------------------------------------------------------------------------------
1 | 36,
8 | 'groupSize' => 0,
9 | 'header' => 0,
10 | 'footer' => 0,
11 | 'translateField' => 'Name',
12 | 'fields' => [
13 | ['Name', 'txt', 32], // 32
14 | ['Lvl', 'int', 1], // 33
15 | ['Dmg', 'int', 1], // 34
16 | ['Mana', 'int', 1], // 35
17 | ['Range', 'int', 1], // 36
18 | ],
19 | ];
20 |
21 | ?>
--------------------------------------------------------------------------------
/MuThreeJs/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | Lulz
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
--------------------------------------------------------------------------------
/MuConfig/lcc/muKonfig.dep:
--------------------------------------------------------------------------------
1 | [main.rc]
2 | [mukonfig.c]
3 | D:\kompilatory\lcc\include\windows.h
4 | D:\kompilatory\lcc\include\stdlib.h
5 | D:\kompilatory\lcc\include\stddef.h
6 | D:\kompilatory\lcc\include\_syslist.h
7 | D:\kompilatory\lcc\include\safelib.h
8 | D:\kompilatory\lcc\include\string.h
9 | D:\kompilatory\lcc\include\safelib.h
10 | D:\kompilatory\lcc\include\win.h
11 | D:\kompilatory\lcc\include\limits.h
12 | D:\kompilatory\lcc\include\stdarg.h
13 | D:\kompilatory\lcc\include\ctype.h
14 | D:\kompilatory\lcc\include\basetsd.h
15 |
--------------------------------------------------------------------------------
/MuConfig/muKonfig.prj:
--------------------------------------------------------------------------------
1 | ; Wedit project file. Syntax: Name = value
2 | [muKonfig]
3 | PrjFiles=2
4 | File1=main.rc
5 | ProjectFlags=0
6 | Frame=154 154 960 750
7 | StatusBar=0,0,0,0
8 | Name=muKonfig
9 | CurrentFile=D:\prg\__C\muConfig\muKonfig.c
10 | OpenFiles=1
11 | OpenFile1="D:\prg\__C\muConfig\muKonfig.c" 39 22 22 974 675
12 | ProjectPath=d:\prg\__c\muconfig
13 | SourcesDir=D:\prg\__C\muConfig
14 | Defines=
15 | IncludeFilesCount=2
16 | IncludeFile0=D:\kompilatory\lcc\include
17 | Libraries=
18 | LinkerArgs=
19 | ProjectTime=9731
20 | MakeName=D:\kompilatory\lcc\bin\make.exe
21 | MakeDir=D:\prg\__C\muConfig\lcc
22 | Exe=d:\prg\__c\muconfig\lcc\mukonfig.exe
23 | DebuggerArguments=
24 | DbgExeName=mukonfig.exe
25 | DbgDir=d:\prg\__c\muconfig\lcc
26 | CompilerFlags=10485829
27 | Useframework=0
28 | NumberOfBreakpoints=0
29 | ErrorFile=D:\prg\__C\muConfig\lcc\muKonfig.err
30 | NrOfFileProcessors=0
31 | File2=mukonfig.c
32 |
--------------------------------------------------------------------------------
/MuBmd/_defBMD/skill100.php:
--------------------------------------------------------------------------------
1 | 52,
8 | 'groupSize' => 0,
9 | 'header' => 0,
10 | 'footer' => 4,
11 | 'translateField' => 'Name',
12 | 'fields' => [
13 | ['Name', 'txt', 32], // 32
14 | ['unk2', 'int', 1], // 33
15 | ['unk3', 'int', 1], // 34
16 | ['unk4', 'int', 1], // 35
17 | ['unk5', 'int', 1], // 36
18 | ['unk6', 'int', 1], // 37
19 | ['unk7', 'int', 1], // 38
20 | ['unk8', 'int', 1], // 39
21 | ['unk9', 'int', 1], // 40
22 | ['unk10', 'int', 1], // 41
23 | ['unk11', 'int', 1], // 42
24 | ['unk12', 'int', 1], // 43
25 | ['unk13', 'int', 1], // 44
26 | ['unk14', 'int', 1], // 45
27 | ['unk15', 'int', 1], // 46
28 | ['unk16', 'int', 1], // 47
29 | ['unk17', 'int', 1], // 48
30 | ['unk18', 'int', 1], // 49
31 | ['unk19', 'int', 1], // 50
32 | ['unk20', 'int', 1], // 51
33 | ['unk21', 'int', 1], // 52
34 | ],
35 | ];
36 |
37 | ?>
--------------------------------------------------------------------------------
/MuConfig/Makefile.win:
--------------------------------------------------------------------------------
1 | # Project: muConfig
2 | # Makefile created by Dev-C++ 4.9.9.2
3 |
4 | CPP = g++.exe
5 | CC = gcc.exe
6 | WINDRES = windres.exe
7 | RES = muConfig_private.res
8 | OBJ = muKonfig.o $(RES)
9 | LINKOBJ = muKonfig.o $(RES)
10 | LIBS = -L"D:/kompilatory/Dev-Cpp/lib" -mwindows -s -march=pentium2
11 | INCS = -I"D:/kompilatory/Dev-Cpp/include"
12 | CXXINCS = -I"D:/kompilatory/Dev-Cpp/lib/gcc/mingw32/3.4.2/include" -I"D:/kompilatory/Dev-Cpp/include/c++/3.4.2/backward" -I"D:/kompilatory/Dev-Cpp/include/c++/3.4.2/mingw32" -I"D:/kompilatory/Dev-Cpp/include/c++/3.4.2" -I"D:/kompilatory/Dev-Cpp/include"
13 | BIN = muConfig.exe
14 | CXXFLAGS = $(CXXINCS) -O3 -march=pentium2
15 | CFLAGS = $(INCS) -O3 -march=pentium2
16 | RM = rm -f
17 |
18 | .PHONY: all all-before all-after clean clean-custom
19 |
20 | all: all-before muConfig.exe all-after
21 |
22 |
23 | clean: clean-custom
24 | ${RM} $(OBJ) $(BIN)
25 |
26 | $(BIN): $(OBJ)
27 | $(CC) $(LINKOBJ) -o "muConfig.exe" $(LIBS)
28 |
29 | muKonfig.o: muKonfig.c
30 | $(CC) -c muKonfig.c -o muKonfig.o $(CFLAGS)
31 |
32 | muConfig_private.res: muConfig_private.rc main.rc
33 | $(WINDRES) -i muConfig_private.rc --input-format=rc -o muConfig_private.res -O coff
34 |
--------------------------------------------------------------------------------
/LICENSE.md:
--------------------------------------------------------------------------------
1 |
2 | This is free and unencumbered software released into the public domain.
3 |
4 | Anyone is free to copy, modify, publish, use, compile, sell, or
5 | distribute this software, either in source code form or as a compiled
6 | binary, for any purpose, commercial or non-commercial, and by any
7 | means.
8 |
9 | In jurisdictions that recognize copyright laws, the author or authors
10 | of this software dedicate any and all copyright interest in the
11 | software to the public domain. We make this dedication for the benefit
12 | of the public at large and to the detriment of our heirs and
13 | successors. We intend this dedication to be an overt act of
14 | relinquishment in perpetuity of all present and future rights to this
15 | software under copyright law.
16 |
17 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
18 | EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
19 | MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
20 | IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR
21 | OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
22 | ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
23 | OTHER DEALINGS IN THE SOFTWARE.
24 |
25 | For more information, please refer to
26 |
--------------------------------------------------------------------------------
/MuConfig/muConfig.dev:
--------------------------------------------------------------------------------
1 | [Project]
2 | FileName=muConfig.dev
3 | Name=muConfig
4 | UnitCount=2
5 | Type=0
6 | Ver=1
7 | ObjFiles=
8 | Includes=
9 | Libs=
10 | PrivateResource=muConfig_private.rc
11 | ResourceIncludes=
12 | MakeIncludes=
13 | Compiler=
14 | CppCompiler=
15 | Linker=
16 | IsCpp=0
17 | Icon=
18 | ExeOutput=
19 | ObjectOutput=
20 | OverrideOutput=0
21 | OverrideOutputName=muConfig.exe
22 | HostApplication=
23 | Folders=
24 | CommandLine=
25 | UseCustomMakefile=0
26 | CustomMakefile=
27 | IncludeVersionInfo=0
28 | SupportXPThemes=0
29 | CompilerSet=0
30 | CompilerSettings=00000000000010000001g0
31 |
32 | [Unit1]
33 | FileName=muKonfig.c
34 | CompileCpp=0
35 | Folder=
36 | Compile=1
37 | Link=1
38 | Priority=1000
39 | OverrideBuildCmd=0
40 | BuildCmd=
41 |
42 | [VersionInfo]
43 | Major=0
44 | Minor=1
45 | Release=1
46 | Build=1
47 | LanguageID=1033
48 | CharsetID=1252
49 | CompanyName=
50 | FileVersion=
51 | FileDescription=Developed using the Dev-C++ IDE
52 | InternalName=
53 | LegalCopyright=
54 | LegalTrademarks=
55 | OriginalFilename=
56 | ProductName=
57 | ProductVersion=
58 | AutoIncBuildNr=0
59 |
60 | [Unit2]
61 | FileName=main.rc
62 | Folder=muConfig
63 | Compile=1
64 | Link=0
65 | Priority=1000
66 | OverrideBuildCmd=0
67 | BuildCmd=
68 |
69 |
--------------------------------------------------------------------------------
/MuBmd/_defBMD/item074.php:
--------------------------------------------------------------------------------
1 | 55,
8 | 'groupSize' => 16,
9 | 'header' => 0,
10 | 'footer' => 0,
11 | 'translateField' => 'Name',
12 | 'fields' => [
13 | ['Name', 'txt', 30], // 30
14 | ['Hands', 'int', 1], // 31
15 | ['Lvl', 'int', 1], // 32
16 | ['X', 'int', 1], // 33
17 | ['Y', 'int', 1], // 34
18 | ['DmgMin', 'int', 1], // 35
19 | ['DmgMax', 'int', 1], // 36
20 | ['DefRate', 'int', 1], // 37
21 | ['Def', 'int', 1], // 38
22 | ['unk10', 'int', 1], // 39
23 | ['att/swSpeed', 'int', 1], // 40
24 | ['walkSpeed', 'int', 1], // 41
25 | ['Dur', 'int', 1], // 42
26 | ['reqSTR', 'int', 1], // 43
27 | ['reqAGI', 'int', 1], // 44
28 | ['reqENE', 'int', 1], // 45
29 | ['reqLVL', 'int', 1], // 46
30 | ['Value', 'int', 1], // 47
31 | ['DW', 'int', 1], // 48
32 | ['DK', 'int', 1], // 49
33 | ['Elf', 'int', 1], // 50
34 | ['MG', 'int', 1], // 51
35 | ['resIce', 'int', 1], // 52
36 | ['resPoison', 'int', 1], // 53
37 | ['resLightning', 'int', 1], // 54
38 | ['resFire', 'int', 1], // 55
39 | ],
40 | ];
41 |
42 | ?>
--------------------------------------------------------------------------------
/MuConfig/lcc/Makefile:
--------------------------------------------------------------------------------
1 | # Wedit Makefile for project muKonfig
2 | SRCDIR=d:\prg\__c\muconfig
3 | CFLAGS=-I"D:\kompilatory\lcc\include" -O -p6 -unused
4 | CC=$(LCCROOT)\bin\lcc.exe
5 | LINKER=$(LCCROOT)\bin\lcclnk.exe
6 | OBJS=\
7 | main.res \
8 | mukonfig.obj
9 |
10 | LIBS=
11 | EXE=mukonfig.exe
12 |
13 | $(EXE): $(OBJS) Makefile
14 | $(LINKER) -s -subsystem windows -o $(SRCDIR)\lcc\mukonfig.exe $(OBJS) $(LIBS)
15 |
16 | # Build main.res
17 | MAIN_RC=\
18 |
19 | main.res: $(MAIN_RC) $(SRCDIR)\main.rc
20 | $(LCCROOT)\bin\lrc.exe -I$(SRCDIR) -I"D:\kompilatory\lcc\include" $(SRCDIR)\main.rc
21 |
22 | # Build mukonfig.c
23 | MUKONFIG_C=\
24 | D:\kompilatory\lcc\include\windows.h\
25 | D:\kompilatory\lcc\include\stdlib.h\
26 | D:\kompilatory\lcc\include\stddef.h\
27 | D:\kompilatory\lcc\include\_syslist.h\
28 | D:\kompilatory\lcc\include\safelib.h\
29 | D:\kompilatory\lcc\include\string.h\
30 | D:\kompilatory\lcc\include\safelib.h\
31 | D:\kompilatory\lcc\include\win.h\
32 | D:\kompilatory\lcc\include\limits.h\
33 | D:\kompilatory\lcc\include\stdarg.h\
34 | D:\kompilatory\lcc\include\ctype.h\
35 | D:\kompilatory\lcc\include\basetsd.h\
36 |
37 | mukonfig.obj: $(MUKONFIG_C) $(SRCDIR)\mukonfig.c
38 | $(CC) -c $(CFLAGS) $(SRCDIR)\mukonfig.c
39 |
40 | link:
41 | $(LINKER) -s -subsystem windows -o $(SRCDIR)\lcc\mukonfig.exe $(OBJS) $(LIBS)
42 |
43 | clean:
44 | del $(OBJS) mukonfig.exe
45 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # MuOnline editors and misc apps
2 |
3 | This repo contains minor stuff I've written during my MuOnline private server dev years (around 2006 - 2014). Most of Pascal sources are written and commented in Polish. If your translator won't help you enough, just start an issue - I'll translate them if needed. Don't expect any further updates though.
4 |
5 | This repo consists of:
6 |
7 | - **MuTexConv** - my first ever app for MuOnline - CLI tool which converts OZJ, OZB and OZT to JPG, BMP and TGA respectively. Converting back to game files works too.
8 | - **MuMapConv** - converts between .map and .bmp.
9 | - **MuMapEdit** - my final project for programming class from 2007. Partially done 2D map viwer & editor. Doesn't support JPG, so you need to convert all textures to BMP. Written in FreePascal and WinAPI.
10 | - **wtf2txt** - Converts between WTF and TXT files. There are 2 versions of this app: one is written in Pascal, the newer one is in PHP.
11 | - **MuBmd** - my attempt at finally make somewhat complete text BMD editor for all client versions. Allows defining fields for each BMD version.
12 | - **MuClientAssemble** - allows assembling patch from any source version to any destination version, based on game's update server FTP dump. So if you've done one just like me you're in huge luck ;)
13 | - **MuThreeJs** - game map previewer - incomplete, but works as a Proof-of-concept. Mouse handling has rotten apparently.
14 |
15 | And some stuff, which might interest even non-coders:
16 |
17 | - **MuConfig** - smallest game client's resolution/audio/auto login settings app you'll ever find on the Internet. Written in C & WinAPI using DevC++.
18 | - **mulogo.svg** - a logo I traced for making icons and some minor gfx.
19 |
20 | ## Further development
21 |
22 | If you feel like contributing to those apps and/or maintaining them in some way, feel free to do so - the source code is yours if you can understand it. ;) Should you make some nice progress be sure to notify me - I'll link your repo in this readme.
23 |
--------------------------------------------------------------------------------
/MuBmd/_defBMD/item100.php:
--------------------------------------------------------------------------------
1 | 76,
8 | 'groupSize' => 32,
9 | 'header' => 0,
10 | 'footer' => 4,
11 | 'translateField' => 'Name',
12 | 'fields' => [
13 | ['Name', 'txt', 30], // 30
14 | ['Hands', 'int', 1], // 31
15 | ['Lvl', 'int', 1], // 32
16 | ['EqSlot', 'int', 1], // 33
17 | ['SkillID', 'int', 1], // 34
18 | ['X', 'int', 1], // 35
19 | ['Y', 'int', 1], // 36
20 | ['DmgMin', 'int', 1], // 37
21 | ['DmgMax', 'int', 1], // 38
22 | ['DefRate', 'int', 1], // 39
23 | ['Def', 'int', 1], // 40
24 | ['unk12', 'int', 1], // 41
25 | ['att/swSpeed', 'int', 1], // 42
26 | ['walkSpeed', 'int', 1], // 43
27 | ['Dur', 'int', 1], // 44
28 | ['unk16', 'int', 1], // 45
29 | ['unk17', 'int', 1], // 46
30 | ['reqSTR', 'int', 2], // 48
31 | ['reqAGI', 'int', 2], // 50
32 | ['reqENE', 'int', 2], // 52
33 | ['reqCMD', 'int', 2], // 54
34 | ['reqLVL', 'int', 1], // 55
35 | ['Value', 'int', 1], // 56
36 | ['unk28', 'int', 1], // 57
37 | ['unk29', 'int', 1], // 58
38 | ['unk30', 'int', 1], // 59
39 | ['unk31', 'int', 1], // 60
40 | ['ArmType', 'int', 1], // 61
41 | ['DW', 'int', 1], // 62
42 | ['DK', 'int', 1], // 63
43 | ['Elf', 'int', 1], // 64
44 | ['MG', 'int', 1], // 65
45 | ['DL', 'int', 1], // 66
46 | ['resIce', 'int', 1], // 67
47 | ['resPoison', 'int', 1], // 68
48 | ['resLightning', 'int', 1], // 69
49 | ['resFire', 'int', 1], // 70
50 | ['resEarth', 'int', 1], // 71
51 | ['resWind', 'int', 1], // 72
52 | ['resWater', 'int', 1], // 73
53 | ['unk45', 'int', 1], // 74
54 | ['unk46', 'int', 1], // 75
55 | ['unk47', 'int', 1], // 76
56 | ],
57 | ];
58 |
59 | ?>
--------------------------------------------------------------------------------
/wtf2txt/php/wtf2txt.php:
--------------------------------------------------------------------------------
1 | ';
18 | echo 'Version: 0x',dechex(ord(fRead($hIn, 1))), '
';
19 |
20 | $caption = fRead($hIn, 22);
21 | $caption = str_replace("\0", '0', $caption);
22 | echo 'Caption: ',$caption,'
';
23 |
24 | $stringCount = fReadUWord($hIn);
25 | echo 'Expected string count: ',$stringCount,'
';
26 |
27 | $unk = fReadUWord($hIn);
28 | echo 'Unk1: ',dechex(ord($unk)),'
';
29 |
30 | while($stringCount--) {
31 | $num = fReadUWord($hIn);
32 | $len = fReadUWord($hIn);
33 | echo 'Decoded string no ',$num,', length:',$len,'
';
34 | if($len) {
35 | $bfr = fRead($hIn, $len);
36 | for($j = strLen($bfr); $j--;) {
37 | $bfr[$j] = chr(ord($bfr[$j]) ^ 0xCA);
38 | }
39 | $wtfStrings[$num] = $bfr;
40 |
41 | } else {
42 | $wtfStrings[$num] = '';
43 | }
44 | }
45 |
46 | $tail = fRead($hIn, 4096);
47 | $tail = str_replace("\0", '0', $tail);
48 | echo 'Tail: ',$tail,'
';
49 | var_dump($tail);
50 |
51 | fClose($hIn);
52 | ksort($wtfStrings);
53 | // var_dump($wtfStrings);
54 | // var_dump($wtfStrings[110]);
55 |
56 | // for($i = 0; $i != strLen($wtfStrings[110]); ++$i) {
57 | // echo ord($wtfStrings[110][$i]),' ';
58 | // }
59 |
60 | $hOut = fOpen(substr($fName, 0, -3).'txt', 'w');
61 | forEach($wtfStrings as $idx => $txt) {
62 | fWrite($hOut, $idx."\t".$txt."\n");
63 | }
64 | fClose($hOut);
65 |
66 | ?>
--------------------------------------------------------------------------------
/wtf2txt/pascal/wtf2txt.pas:
--------------------------------------------------------------------------------
1 | program wtf2txt;
2 |
3 | uses crt;
4 |
5 | var
6 | wtf,txt: file of byte; {pliki deklarujemy jako skladajace sie z bajtow
7 | i o tyle czytamy}
8 | bufor: byte; //bufor do ktorego czytamy zawartosc pliku
9 | i,j,len,lenstr,numer: integer; {i,j to do forow, len to ilosc linii,
10 | lenstr to dlugosc linii, numer to jej numer}
11 | numerstr: string; {uzyte do konwersji numeru linii na lancuch ascii
12 | zeby to sobie zapisac w outpucie}
13 |
14 | BEGIN
15 |
16 | assign(wtf,'c:\plik.wtf'); //przypisujemy pliki do sciezek i je otwieramy
17 | reset(wtf);
18 | assign(txt,'c:\plik.txt');
19 | rewrite(txt);
20 |
21 | seek(wtf,$18); //idziemy do offsetu w .wtf liczonego od 0, 0x18
22 | read(wtf,bufor); {czytamy sobie podwojna liczbe, liczba calkowita
23 | linii = len}
24 | len:= bufor;
25 | read(wtf,bufor);
26 | len:=len+bufor shl 8; {shl to przesuniecie wartosci w lewo o dana ilosc
27 | bitow, x shl 8 = x *FF, to jest po to by bylo
28 | parami od tylu czytane}
29 |
30 | seek(wtf,$1C); //idziemy do offsetu wlasciwego, 0x1c
31 |
32 | for j:=1 to len do //czytamy tyle razy ile jest linii
33 | begin
34 | read(wtf,bufor); //czytamy pierwsze 2 bajty jako numer linii
35 | numer:= bufor;
36 | read(wtf,bufor);
37 | numer:=numer+bufor shl 8;
38 |
39 | read(wtf,bufor); //czytamy nast. 2 bajty jako dl. linii = lenstr
40 | lenstr:= bufor;
41 | read(wtf,bufor);
42 | lenstr:=lenstr+bufor shl 8;
43 | str(numer,numerstr); //konwersja numeru z liczby int na string
44 | for i:=1 to byte(numerstr[0]) do write(txt,byte(numerstr[i]));
45 | {w stringu na pozycji 0 zawsze jest podany rozmiar, od 1 zaczyna sie
46 | str wlasciwy, for do pisania kolejnych cyfr numeru}
47 |
48 | write(txt,32); //po numerze spacja zeby oddzielic nr od linii
49 |
50 | for i:=1 to lenstr do {czytaj i zapisz kolejne bajty przez dlugosc
51 | linii = lenstr}
52 | begin
53 | read(wtf,bufor);
54 | write(txt,bufor xor $CA); //oczywiscie z odpowiednim xorem
55 | end;
56 |
57 | write(txt,13,10); // NL CR
58 |
59 | end;
60 |
61 | close(txt); //zamykamy pliki
62 | close(wtf);
63 | readkey; //czekamy na nacisniecie klawisza
64 | END.
65 |
66 |
--------------------------------------------------------------------------------
/MuTexConv/mutexconv.pas:
--------------------------------------------------------------------------------
1 | program multikonwerter;
2 |
3 | {$RESOURCE kain.res}
4 | {bmp4, jpg24, tga4}
5 |
6 | var
7 | sciezka1, sciezka2: string;
8 | plik1, plik2: file of byte;
9 | i, j, bufor: byte;
10 |
11 | procedure encrypt(ilosc: byte;ext: string); {dodaje okreslona ilosc
12 | bajtow z przodu pliku}
13 | begin
14 | for j:=0 to 2 do sciezka2[i-j]:=ext[3-j]; {zmieniamy rozszerzenie
15 | w sciezce 2}
16 | assign(plik2,sciezka2);
17 | rewrite(plik2);
18 |
19 | for i:=1 to ilosc do
20 | begin
21 | read(plik1,bufor);
22 | write(plik2,bufor); {przepisujemy okreslona w parametrze ilosc bajtow
23 | z poczatku pliku}
24 | end;
25 |
26 | reset(plik1); {i czytamy plik od nowa zeby napisac je jeszcze raz}
27 |
28 | repeat
29 | read(plik1,bufor); {i teraz dalej czytamy}
30 | write(plik2,bufor); {i zapisujemy}
31 | until eof(plik1); {az do konca pliku}
32 | end;
33 |
34 | procedure decrypt(ilosc: byte;ext: string); {omija okreslona ilosc
35 | bajtow z przodu pliku}
36 | begin
37 | for j:=0 to 2 do sciezka2[i-j]:=ext[3-j]; {zmieniamy rozszerzenie
38 | w sciezce 2}
39 | assign(plik2,sciezka2);
40 | rewrite(plik2);
41 | seek(plik1,ilosc); {omija pierwsze bajty ktore sa powtorzone}
42 | repeat
43 | read(plik1,bufor); {reszte czytamy}
44 | write(plik2,bufor); {i zapisujemy}
45 | until eof(plik1); {poki nie dojdziemy do konca pliku}
46 | end;
47 |
48 | BEGIN
49 |
50 | if paramstr(1) = '' then
51 | begin
52 | writeln('Sciezka pliku do konwersji (ozb, ozj, ozt, bmp, jpg, tga): ');
53 | readln(sciezka1);
54 | end
55 | else sciezka1:=paramstr(1);
56 |
57 | assign(plik1,sciezka1);
58 | {$I-}reset(plik1);{$I+}
59 | if (IOResult <> 0) or (sciezka1 = '') then
60 | begin
61 | writeln('Nieprawidlowa sciezka');
62 | halt;
63 | end;
64 |
65 | sciezka2:=sciezka1; {sciezka drugiego pliku jest taka sama}
66 | i:= length(sciezka2); {liczymy dlugosc sciezki do sprawdzenia rozszerzenia}
67 |
68 | case upcase(sciezka1[i]) of
69 | 'P': encrypt(4,'ozb'); {jak rozszerzenie to bmP to robimy bmp->ozb}
70 | 'B': decrypt(4,'bmp'); {jaka ozB to ozb->bmp}
71 | 'J': decrypt(24,'jpg'); {jak ozJ to ozj->jpg}
72 | 'G': encrypt(24,'ozj'); {jak jpG to jpg->ozj}
73 | 'T': decrypt(4,'tga'); {jak ozT to ozt->tga}
74 | 'A': encrypt(4,'ozt'); {jak tgA to tga->ozt}
75 | end;
76 |
77 | writeln('Zrobione');
78 | close(plik1); {zamykamy odczyt plikow}
79 | close(plik2);
80 | END.
81 |
82 |
--------------------------------------------------------------------------------
/MuBmd/0.74_fixed/Skill.txt:
--------------------------------------------------------------------------------
1 | // ------------------
2 | // BMD exported by
3 | // KaiN client toolz
4 | // ------------------
5 |
6 | // Idx Name Lvl Dmg Mana Range
7 | 0 0 0 0 0
8 | 1 Poison 30 12 42 6
9 | 2 Meteorite 21 21 12 6
10 | 3 Lightning 13 17 15 6
11 | 4 Fire Ball 5 8 3 6
12 | 5 Flame 35 25 50 6
13 | 6 Teleport 17 0 30 6
14 | 7 Ice 25 10 38 6
15 | 8 Twister 40 35 60 6
16 | 9 Evil Spirits 50 45 90 6
17 | 10 Hell Fire 60 120 160 0
18 | 11 Power Wave 9 14 5 6
19 | 12 Aqua Beam 74 80 140 6
20 | 13 0 0 0 0
21 | 14 0 0 0 0
22 | 15 0 0 0 0
23 | 16 0 0 0 0
24 | 17 Energy Ball 2 3 1 6
25 | 18 Defend 0 0 30 0
26 | 19 Falling Slash 0 0 10 3
27 | 20 Lunge 0 0 9 2
28 | 21 Uppercut 0 0 8 2
29 | 22 Cyclone Slash 0 0 9 2
30 | 23 Slash 0 0 12 2
31 | 24 Triple Shot 0 0 5 6
32 | 25 Piercing Arrow 0 0 5 6
33 | 26 Heal 8 0 20 6
34 | 27 Greater Defense 13 0 30 6
35 | 28 Greater Damage 18 0 40 6
36 | 29 0 0 0 0
37 | 30 Summon Goblin 0 0 40 0
38 | 31 Summom Stone Golem 0 0 70 0
39 | 32 Summon Assassin 0 0 110 0
40 | 33 Summon Elder Yeti 0 0 160 0
41 | 34 Summon Dark Knight 0 0 200 0
42 | 35 Summon Bali 0 0 250 0
43 | 36 0 0 0 0
44 | 37 0 0 0 0
45 | 38 0 0 0 0
46 | 39 0 0 0 0
47 | 40 0 0 0 0
48 | 41 0 0 0 0
49 | 42 0 0 0 0
50 | 43 0 0 0 0
51 | 44 0 0 0 0
52 | 45 0 0 0 0
53 | 46 0 0 0 0
54 | 47 0 0 0 0
55 | 48 0 0 0 0
56 | 49 0 0 0 0
57 | 50 Flame of Evil 60 120 160 0
58 | 51 0 0 0 0
59 | 52 0 0 0 0
60 | 53 0 0 0 0
61 | 54 0 0 0 0
62 | 55 0 0 0 0
63 | 56 0 0 0 0
64 | 57 0 0 0 0
65 | 58 0 0 0 0
66 | 59 0 0 0 0
67 | 60 0 0 0 0
68 | 61 0 0 0 0
69 | 62 0 0 0 0
70 | 63 0 0 0 0
71 | end
72 |
73 |
--------------------------------------------------------------------------------
/MuBmd/0.78_fixed/Skill.txt:
--------------------------------------------------------------------------------
1 | // ------------------
2 | // BMD exported by
3 | // KaiN client toolz
4 | // ------------------
5 |
6 | // Idx Name Lvl Dmg Mana Range
7 | 0 0 0 0 0
8 | 1 Poison 30 12 42 6
9 | 2 Meteorite 21 21 12 6
10 | 3 Lightning 13 17 15 6
11 | 4 Fire Ball 5 8 3 6
12 | 5 Flame 35 25 50 6
13 | 6 Teleport 17 0 30 6
14 | 7 Ice 25 10 38 6
15 | 8 Twister 40 35 60 6
16 | 9 Evil Spirits 50 45 90 6
17 | 10 Hell Fire 60 120 160 0
18 | 11 Power Wave 9 14 5 6
19 | 12 Aqua Beam 74 80 140 6
20 | 13 0 0 0 0
21 | 14 0 0 0 0
22 | 15 0 0 0 0
23 | 16 0 0 0 0
24 | 17 Energy Ball 2 3 1 6
25 | 18 Defend 0 0 30 0
26 | 19 Falling Slash 0 0 10 3
27 | 20 Lunge 0 0 9 2
28 | 21 Uppercut 0 0 8 2
29 | 22 Cyclone Slash 0 0 9 2
30 | 23 Slash 0 0 12 2
31 | 24 Triple Shot 0 0 5 6
32 | 25 Piercing Arrow 0 0 5 6
33 | 26 Heal 8 0 20 6
34 | 27 Greater Defense 13 0 30 6
35 | 28 Greater Damage 18 0 40 6
36 | 29 0 0 0 0
37 | 30 Summon Goblin 0 0 40 0
38 | 31 Summom Stone Golem 0 0 70 0
39 | 32 Summon Assassin 0 0 110 0
40 | 33 Summon Elder Yeti 0 0 160 0
41 | 34 Summon Dark Knight 0 0 200 0
42 | 35 Summon Bali 0 0 250 0
43 | 36 0 0 0 0
44 | 37 0 0 0 0
45 | 38 0 0 0 0
46 | 39 0 0 0 0
47 | 40 0 0 0 0
48 | 41 Twisting Slash 0 0 10 2
49 | 42 0 0 0 0
50 | 43 0 0 0 0
51 | 44 0 0 0 0
52 | 45 0 0 0 0
53 | 46 0 0 0 0
54 | 47 0 0 0 0
55 | 48 0 0 0 0
56 | 49 0 0 0 0
57 | 50 Flame of Evil 60 120 160 0
58 | 51 0 0 0 0
59 | 52 0 0 0 0
60 | 53 0 0 0 0
61 | 54 0 0 0 0
62 | 55 0 0 0 0
63 | 56 0 0 0 0
64 | 57 0 0 0 0
65 | 58 0 0 0 0
66 | 59 0 0 0 0
67 | 60 0 0 0 0
68 | 61 0 0 0 0
69 | 62 0 0 0 0
70 | 63 0 0 0 0
71 | end
72 |
73 |
--------------------------------------------------------------------------------
/MuThreeJs/input.js:
--------------------------------------------------------------------------------
1 | var keyboard = {
2 | init: function(e) {
3 | e.onkeydown = keyboard.keydown;
4 | e.onkeyup = keyboard.keyup;
5 |
6 | setInterval(keyboard.process, 10);
7 | },
8 |
9 | process: function() {
10 | var sin = Math.sin(g_camera.rotation.y);
11 | var cos = Math.cos(g_camera.rotation.y);
12 | if(keyboard.keys.w) {
13 | g_camera.position.x -= 0.1 * sin;
14 | g_camera.position.z -= 0.1 * cos;
15 | // TODO: fly - y
16 | }
17 | if(keyboard.keys.s) {
18 | g_camera.position.x += 0.1 * sin;
19 | g_camera.position.z += 0.1 * cos;
20 | }
21 | if(keyboard.keys.a) {
22 | g_camera.position.x -= 0.1 * cos;
23 | g_camera.position.z += 0.1 * sin;
24 | }
25 | if(keyboard.keys.d) {
26 | g_camera.position.x += 0.1 * cos;
27 | g_camera.position.z -= 0.1 * sin;
28 | }
29 | if(keyboard.keys.space)
30 | g_camera.position.y += 0.1;
31 | if(keyboard.keys.ctrl)
32 | g_camera.position.y -= 0.1;
33 | },
34 |
35 | keydown: function(e) {
36 | var pressed = 1;
37 | switch(e.keyCode) {
38 | case 17:
39 | keyboard.keys.ctrl = 1;
40 | break;
41 | case 32:
42 | keyboard.keys.space = 1;
43 | break;
44 | case 65:
45 | keyboard.keys.a = 1;
46 | break;
47 | case 68:
48 | keyboard.keys.d = 1;
49 | break;
50 | case 83:
51 | keyboard.keys.s = 1;
52 | break;
53 | case 87:
54 | keyboard.keys.w = 1;
55 | break;
56 | default:
57 | pressed = 0;
58 | // $('keyCode').innerHTML = e.keyCode;
59 | }
60 | if(pressed)
61 | return false;
62 | },
63 |
64 | keyup: function(e) {
65 | var pressed = 1;
66 | switch(e.keyCode) {
67 | case 17:
68 | keyboard.keys.ctrl = 0;
69 | break;
70 | case 32:
71 | keyboard.keys.space = 0;
72 | break;
73 | case 65:
74 | keyboard.keys.a = 0;
75 | break;
76 | case 68:
77 | keyboard.keys.d = 0;
78 | break;
79 | case 83:
80 | keyboard.keys.s = 0;
81 | break;
82 | case 87:
83 | keyboard.keys.w = 0;
84 | break;
85 | default:
86 | pressed = 0;
87 | // $('keyCode').innerHTML = e.keyCode;
88 | }
89 | if(pressed)
90 | return false;
91 | },
92 |
93 | keys: {}
94 | };
95 |
96 | var mouse = {
97 | element: null,
98 |
99 | init: function(e) {
100 | if(document.pointerLockElement || document.mozPointerLockElement)
101 | return;
102 | mouse.element = e;
103 | e.requestPointerLock = e.requestPointerLock || e.mozRequestPointerLock;
104 | document = document.onpointerlockerror = document.onmozpointerlockerror = mouse.hookRetry;
105 | e.onmousemove = mouse.process;
106 | e.requestPointerLock();
107 | },
108 |
109 | hookRetry: function() {
110 | console.log('err ' + document.mozPointerLockElement);
111 | // mouse.element.requestPointerLock();
112 | },
113 |
114 | process: function(evt) {
115 | var dx = evt.movementY || evt.mozMovementY;
116 | var dy = evt.movementX || evt.mozMovementX;
117 |
118 | var dAngX = Math.PI/2*(dx/mouse.element.height);
119 | var dAngY = Math.PI/2*(dy/mouse.element.width);
120 |
121 | // g_camera.rotation.x += 0.0.1;
122 | // g_camera.rotation.y = (g_camera.rotation.y + dAngY) % (Math.PI*2);
123 | // console.log(mouse.element.height);
124 | g_camera.rotation.order = "YXZ";
125 | g_camera.rotation.y -= dAngY;
126 | g_camera.rotation.x -= dAngX;
127 | // $('dx').innerHTML = g_camera.rot.x;
128 | // $('dy').innerHTML = g_camera.rot.y;
129 | }
130 | }
--------------------------------------------------------------------------------
/MuBmd/0.74_fixed/NpcName(kor).txt:
--------------------------------------------------------------------------------
1 | // Idx Show Name
2 | 0 1 "Bull Fighter"
3 | 1 1 "Hell Hound"
4 | 2 1 "Budge Dragon"
5 | 3 1 "Spider"
6 | 4 1 "Elite Bull Fighter"
7 | 5 1 "Hell Hound"
8 | 6 1 "Lich"
9 | 7 1 "Giant"
10 | 8 1 "Poison Bull Fighter"
11 | 9 1 "Thunder Lich"
12 | 10 1 "Dark Knight"
13 | 11 1 "Ghost"
14 | 12 1 "Larva"
15 | 13 1 "Hell Spider"
16 | 14 1 "Skeleton"
17 | 15 1 "Skeleton Archer"
18 | 16 1 "Elite skeleton"
19 | 17 1 "Cyclops"
20 | 18 1 "Gorgon"
21 | 19 1 "Yeti"
22 | 20 1 "Elite Yeti"
23 | 21 1 "Assassin"
24 | 22 1 "Ice Monster"
25 | 23 1 "Hommerd"
26 | 24 1 "Worm"
27 | 25 1 "Ice Queen"
28 | 26 1 "Goblin"
29 | 27 1 "Chain Scorpion"
30 | 28 1 "Beetle Monster"
31 | 29 1 "Hunter"
32 | 30 1 "Forest Monster"
33 | 31 1 "Agon"
34 | 32 1 "Stone Golem"
35 | 33 1 "Elite Goblin"
36 | 34 1 "Cursed Wizard"
37 | 35 1 "Death Gorgon"
38 | 36 1 "Shadow"
39 | 37 1 "Devil"
40 | 38 1 "Balrog"
41 | 39 1 "Poison Shadow"
42 | 40 1 "Death Knight"
43 | 41 1 "Death Cow"
44 | 43 1 "Golden Budge Dragon"
45 | 44 1 "Dragon"
46 | 45 1 "Bahamut"
47 | 46 1 "Vepar"
48 | 47 1 "Valkyrie"
49 | 48 1 "Lizard King"
50 | 49 1 "Hydra"
51 | 50 1 "Sea Worm"
52 | 51 1 "Great Bahamut"
53 | 52 1 "Silver Valkyrie"
54 | 53 1 "Golden Titan"
55 | 54 1 "Golden Soldier"
56 | 55 1 "Death King"
57 | 56 1 "Death Bone"
58 | 100 1 "Lance"
59 | 101 1 "Iron Stick"
60 | 102 1 "Fire"
61 | 103 1 "meteorite"
62 | 150 1 "Bali"
63 | 200 1 ""
64 | 238 1 "Chaos Goblin"
65 | 239 1 "Arena Guard"
66 | 240 1 "Baz the Vault Keeper"
67 | 241 1 "Guild Master"
68 | 242 1 "Elf Lala"
69 | 243 1 "Eo the Craftsman"
70 | 244 1 "Lumen the Barmaid"
71 | 245 1 "Wizard"
72 | 246 1 "Zienna the Weapon Merchant"
73 | 247 1 "Guard"
74 | 248 1 "Wandering Merchant"
75 | 249 1 "Guard"
76 | 250 1 "Wandering Merchant"
77 | 251 1 "Hanzo the Blacksmith"
78 | 252 1 ""
79 | 253 1 "Potion Girl"
80 | 254 1 "Pasi the Mage"
81 | 255 1 "Lumen the Barmaid"
82 |
--------------------------------------------------------------------------------
/MuThreeJs/main.js:
--------------------------------------------------------------------------------
1 | var g_scene, g_camera, g_renderer;
2 |
3 | var g_plane;
4 |
5 | function renderLoop() {
6 | requestAnimationFrame( renderLoop );
7 | g_renderer.render(g_scene, g_camera);
8 |
9 | // g_plane.rotation.y += 0.01;
10 | }
11 |
12 | window.onload = function() {
13 | $ = document.getElementById;
14 | g_scene = new THREE.Scene();
15 | g_camera = new THREE.PerspectiveCamera(
16 | 75, // fov
17 | window.innerWidth / window.innerHeight, // ratio
18 | 0.1, 1000 // zmin, zmax
19 | );
20 | g_renderer = new THREE.WebGLRenderer();
21 | g_renderer.setSize(window.innerWidth, window.innerHeight);
22 |
23 | document.body.appendChild(g_renderer.domElement);
24 |
25 | // geometry
26 | geometry = new THREE.PlaneGeometry(100, 100, 256, 256);
27 | for(y = 0; y != 256; ++y) {
28 | for(x = 0; x != 256; ++x) {
29 | geometry.vertices[257*y+x].z = g_height[y][x]/255 * 5;
30 | geometry.faces[(256*y+x)*2].materialIndex = g_textures[255-y][x];
31 | geometry.faces[(256*y+x)*2+1].materialIndex = g_textures[255-y][x];
32 | }
33 | }
34 |
35 | // materials
36 | var materials = [];
37 | materials.push(new THREE.MeshBasicMaterial({ map: THREE.ImageUtils.loadTexture('world0/TileGrass01.jpg')}));
38 | materials.push(new THREE.MeshBasicMaterial({ map: THREE.ImageUtils.loadTexture('world0/TileGrass02.jpg')}));
39 | materials.push(new THREE.MeshBasicMaterial({ map: THREE.ImageUtils.loadTexture('world0/TileGround01.jpg')}));
40 | materials.push(new THREE.MeshBasicMaterial({ map: THREE.ImageUtils.loadTexture('world0/TileGround02.jpg')}));
41 | materials.push(new THREE.MeshBasicMaterial({ map: THREE.ImageUtils.loadTexture('world0/TileGround03.jpg')}));
42 | materials.push(new THREE.MeshBasicMaterial({ map: THREE.ImageUtils.loadTexture('world0/TileWater01.jpg')}));
43 | materials.push(new THREE.MeshBasicMaterial({ map: THREE.ImageUtils.loadTexture('world0/TileWood01.jpg')}));
44 | materials.push(new THREE.MeshBasicMaterial({ map: THREE.ImageUtils.loadTexture('world0/TileRock01.jpg')}));
45 | materials.push(new THREE.MeshBasicMaterial({ map: THREE.ImageUtils.loadTexture('world0/TileRock02.jpg')}));
46 | materials.push(new THREE.MeshBasicMaterial({ map: THREE.ImageUtils.loadTexture('world0/TileRock03.jpg')}));
47 | materials.push(new THREE.MeshBasicMaterial({ map: THREE.ImageUtils.loadTexture('world0/TileRock04.jpg')}));
48 | materials.push(new THREE.MeshBasicMaterial({ map: THREE.ImageUtils.loadTexture('world0/TileRock05.jpg')}));
49 | materials.push(new THREE.MeshBasicMaterial({ map: THREE.ImageUtils.loadTexture('world0/TileRock06.jpg')}));
50 | materials.push(new THREE.MeshBasicMaterial({ map: THREE.ImageUtils.loadTexture('world0/TileRock07.jpg')}));
51 |
52 | // Add materialIndex to face
53 | var l = geometry.faces.length/2;
54 | var bok = Math.sqrt(geometry.faces.length/2);
55 | for (var i = 0; i < l; i++) {
56 | j = i*2;
57 | // geometry.faces[j].materialIndex = 0;
58 | // geometry.faces[j+1].materialIndex = 0;
59 |
60 | geometry.faceVertexUvs[0][j][0] = new THREE.Vector2(0.0, 1.0);
61 | geometry.faceVertexUvs[0][j][1] = new THREE.Vector2(0.0, 0.0)
62 | geometry.faceVertexUvs[0][j][2] = new THREE.Vector2(1.0, 1.0)
63 |
64 | geometry.faceVertexUvs[0][j+1][0] = new THREE.Vector2(0.0, 0.0)
65 | geometry.faceVertexUvs[0][j+1][1] = new THREE.Vector2(1.0, 0.0)
66 | geometry.faceVertexUvs[0][j+1][2] = new THREE.Vector2(1.0, 1.0)
67 | }
68 |
69 | // plane mesh
70 | g_plane = new THREE.Mesh( geometry, new THREE.MeshFaceMaterial(materials));
71 | g_plane.rotation.x = -Math.PI/2;
72 | g_plane.position.y = -10;
73 | // g_plane.rotation.y = Math.PI/8;
74 | g_scene.add(g_plane);
75 |
76 | document.body.onclick = function() {mouse.init(document.getElementsByTagName('canvas')[0]);};
77 | keyboard.init(window);
78 | renderLoop();
79 | }
--------------------------------------------------------------------------------
/MuConfig/muKonfig.c:
--------------------------------------------------------------------------------
1 | #include
2 | #define quit 801
3 | #define save 802
4 | #define windowMode 803
5 | #define music 804
6 | #define sound 805
7 | #define resolution 806
8 | #define ikona 888
9 |
10 | HWND hMain,hQuit,hSave,hWindowMode,hMusic,hSound,hRes,hId,hIdD;
11 | DWORD vWndMode = 0, vMusic = 0, vSound = 0, vRes = 0;
12 | LPSTR vId;
13 | HKEY hk;
14 |
15 | void chgState(WPARAM *btn,DWORD *state)
16 | {
17 | CheckDlgButton(hMain,*btn,(*state == 0?BST_CHECKED:BST_UNCHECKED));
18 | *state = ! *state;
19 | }
20 | void initCb(LPSTR opt,DWORD *v,int btn)
21 | {
22 | DWORD sBuf1 = sizeof(DWORD);
23 | DWORD tBuf1 = REG_DWORD;
24 | RegQueryValueEx(hk,opt,NULL,&tBuf1,(LPBYTE)v,&sBuf1);
25 | if(btn != 0)
26 | CheckDlgButton(hMain,btn,(*v == 0?BST_UNCHECKED:BST_CHECKED));
27 | }
28 |
29 | LRESULT CALLBACK wpMain(HWND hWnd,UINT msg, WPARAM wPar, LPARAM lPar)
30 | {
31 | switch(msg)
32 | {
33 | case WM_CREATE:
34 | break;
35 | case WM_DESTROY:
36 | PostQuitMessage(0);
37 | break;
38 | case WM_CLOSE:
39 | DestroyWindow(hWnd);
40 | break;
41 | case WM_COMMAND:
42 | switch(LOWORD(wPar))
43 | {
44 | case quit:
45 | DestroyWindow(hWnd);
46 | break;
47 | case save:
48 | vRes = SendMessage(hRes,LB_GETCURSEL,0,0);
49 | RegSetValueEx(hk,"Resolution",0,REG_DWORD,(LPBYTE)&vRes,sizeof(DWORD));
50 | RegSetValueEx(hk,"WindowMode",0,REG_DWORD,(LPBYTE)&vWndMode,sizeof(DWORD));
51 | RegSetValueEx(hk,"MusicOnOff",0,REG_DWORD,(LPBYTE)&vMusic,sizeof(DWORD));
52 | RegSetValueEx(hk,"SoundOnOff",0,REG_DWORD,(LPBYTE)&vSound,sizeof(DWORD));
53 | GetWindowText(hId,vId,10);
54 | RegSetValueEx(hk,"ID",0,REG_SZ,vId,10);
55 | break;
56 | case windowMode:
57 | chgState(&wPar,&vWndMode);
58 | break;
59 | case music:
60 | chgState(&wPar,&vMusic);
61 | break;
62 | case sound:
63 | chgState(&wPar,&vSound);
64 | break;
65 | }
66 | break;
67 | default:
68 | return DefWindowProc(hWnd,msg,wPar,lPar);
69 | }
70 | }
71 |
72 | int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpPar, int cmdShow)
73 | {
74 | WNDCLASSEX wcMain;
75 | wcMain.cbSize = sizeof(WNDCLASSEX);
76 | wcMain.style = 0;
77 | wcMain.lpfnWndProc = wpMain;
78 | wcMain.cbClsExtra = 0;
79 | wcMain.cbWndExtra = 0;
80 | wcMain.hInstance = hInstance;
81 | wcMain.hIcon = LoadIcon(hInstance,MAKEINTRESOURCE(ikona));
82 | wcMain.hCursor = LoadCursor(NULL,IDC_ARROW);
83 | wcMain.hbrBackground = (HBRUSH)COLOR_WINDOW;
84 | wcMain.lpszMenuName = NULL;
85 | wcMain.lpszClassName = "muKonfig";
86 | wcMain.hIconSm = LoadIcon(hInstance,MAKEINTRESOURCE(ikona));
87 |
88 | RegisterClassEx(&wcMain);
89 |
90 | hMain = CreateWindowEx(WS_EX_WINDOWEDGE,"muKonfig",
91 | "muConfig 0.1 for DarkMuBat",WS_OVERLAPPEDWINDOW ^ WS_MAXIMIZEBOX ^ WS_THICKFRAME ^ WS_MINIMIZEBOX,
92 | CW_USEDEFAULT,CW_USEDEFAULT,
93 | 300,120,
94 | 0,NULL,
95 | hInstance,NULL);
96 | hQuit = CreateWindowEx(0,"BUTTON",
97 | "quit",WS_CHILD | WS_VISIBLE,
98 | 200,60,
99 | 65,25,
100 | hMain,(HMENU)quit,
101 | hInstance,NULL);
102 | hSave = CreateWindowEx(0,"BUTTON",
103 | "save",WS_CHILD | WS_VISIBLE,
104 | 120,60,
105 | 65,25,
106 | hMain,(HMENU)save,
107 | hInstance,NULL);
108 | hWindowMode = CreateWindowEx(0,"BUTTON",
109 | "windowed",WS_CHILD|WS_VISIBLE|BS_CHECKBOX,
110 | 5,5,
111 | 85,16,
112 | hMain,(HMENU)windowMode,
113 | hInstance,NULL);
114 | hMusic = CreateWindowEx(0,"BUTTON",
115 | "music",WS_CHILD|WS_VISIBLE|BS_CHECKBOX,
116 | 100,5,
117 | 60,16,
118 | hMain,(HMENU)music,
119 | hInstance,NULL);
120 | hSound = CreateWindowEx(0,"BUTTON",
121 | "sound",WS_CHILD|WS_VISIBLE|BS_CHECKBOX,
122 | 165,5,
123 | 60,16,
124 | hMain,(HMENU)sound,
125 | hInstance,NULL);
126 | hRes = CreateWindowEx(WS_EX_CLIENTEDGE,"LISTBOX",
127 | "resolution",WS_CHILD|WS_VISIBLE|LBS_NOTIFY,
128 | 5,25,
129 | 100,80,
130 | hMain,(HMENU)resolution,
131 | hInstance,NULL);
132 | hId = CreateWindowEx(WS_EX_CLIENTEDGE,"EDIT",
133 | NULL,WS_CHILD|WS_VISIBLE,
134 | 190,25,
135 | 100,24,
136 | hMain,(HMENU)0,
137 | hInstance,NULL);
138 | hIdD = CreateWindowEx(0,"STATIC",
139 | "Auto Login:",WS_CHILD|WS_VISIBLE,
140 | 110,30,
141 | 80,24,
142 | hMain,0,
143 | hInstance,NULL);
144 | LPSTR tRes[4] = {"640x480","800x600","1024x768","1280x1024"};
145 | BYTE i;
146 | for(i = 0; i != 4; ++i)
147 | SendMessage(hRes,LB_ADDSTRING,0,(LPARAM)tRes[i]);
148 |
149 | RegCreateKeyEx(HKEY_CURRENT_USER,"Software\\Webzen\\Mu\\Config",
150 | 0,NULL,
151 | REG_OPTION_NON_VOLATILE,KEY_ALL_ACCESS,
152 | NULL,&hk,NULL);
153 |
154 | initCb("WindowMode",&vWndMode,windowMode);
155 | initCb("MusicOnOff",&vMusic,music);
156 | initCb("SoundOnOff",&vSound,sound);
157 | initCb("Resolution",&vRes,0);
158 | DWORD sBuf1 = 10;
159 | DWORD tBuf1 = REG_SZ;
160 | vId = malloc(11);
161 | if(RegQueryValueEx(hk,"ID",NULL,&tBuf1,(LPBYTE)vId,&sBuf1) == ERROR_SUCCESS)
162 | SetWindowText(hId,vId);
163 |
164 | SendMessage(hRes,LB_SETCURSEL,vRes,0);
165 |
166 | ShowWindow(hMain,SW_SHOW);
167 | UpdateWindow(hMain);
168 | MSG msg;
169 | while(GetMessage(&msg,NULL,0,0))
170 | {
171 | TranslateMessage(&msg);
172 | DispatchMessage(&msg);
173 | }
174 | return msg.wParam;
175 | }
176 |
--------------------------------------------------------------------------------
/mulogo.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
61 |
--------------------------------------------------------------------------------
/MuBmd/index.php:
--------------------------------------------------------------------------------
1 | ';
42 | return null;
43 | }
44 | $blockCount = $size/$def['blockSize'];
45 | // Read blocks
46 | $xor = [0xFC, 0xCF, 0xAB];
47 | $out['blocks'] = [];
48 | for($j = 0; $j != $blockCount; ++$j) {
49 | $block = fRead($hIn, $def['blockSize']);
50 | // deXOR
51 | for($i = 0; $i != $def['blockSize']; ++$i) {
52 | $block[$i] = chr(ord($block[$i]) ^ $xor[$i%sizeOf($xor)]);
53 | }
54 | // Slice to fields
55 | $fieldOffset = 0;
56 | $blockOut = [];
57 | forEach($def['fields'] as $field) {
58 | $fieldVal = subStr($block, $fieldOffset, $field[2]);
59 | $fieldOffset += $field[2];
60 | if($field[1] == 'int' ) {
61 | if($field[2] == 1) {
62 | $fieldVal = ord($fieldVal);
63 | }
64 | elseif($field[2] == 2) {
65 | $fieldVal = (ord($fieldVal[1])<<8)+ord($fieldVal[0]);
66 | }
67 | }
68 | else if($field[1] == 'txt') {
69 | $fieldVal = substr($fieldVal, 0, strPos($fieldVal, "\0"));
70 | }
71 | $blockOut[] = $fieldVal;
72 | }
73 | if($def['groupSize']) {
74 | @$out['blocks'][floor($j/$def['groupSize'])][$j%$def['groupSize']] = $blockOut;
75 | } else {
76 | $out['blocks'][] = $blockOut;
77 | }
78 | }
79 | // Footer
80 | if($def['footer']) {
81 | $bmdContent['footer'] = fRead($hIn, $def['footer']);
82 | }
83 | fClose($hIn);
84 | return $out;
85 | }
86 |
87 | function writeTXTgroup($h, &$def, $items) {
88 | // Prepare group header and fmt
89 | $header = '// Idx';
90 | $fmt = '%6u';
91 | forEach($def['fields'] as $fieldIdx => $field) {
92 | $colWidth = strLen($field[0]);
93 | // var_dump($colWidth);
94 | forEach($items as $item) {
95 | $colWidth = max($colWidth, strLen($item[$fieldIdx].''));
96 | }
97 | $fmt .= ' %'.$colWidth;
98 | if($field[1] == 'txt')
99 | $fmt .= 's';
100 | elseif($field[1] == 'int')
101 | $fmt .= 'd';
102 | $header .= sprintf(' %'.$colWidth.'s', $field[0]);
103 | }
104 | $header .= EOL;
105 | $fmt .= EOL;
106 | // Write group
107 | fWrite($h, $header);
108 | forEach($items as $itemIdx => $item) {
109 | $ln = vsprintf($fmt, array_merge([$itemIdx], $item));
110 | fWrite($h, $ln);
111 | }
112 | fWrite($h, 'end'.EOL.EOL);
113 | }
114 |
115 | function writeTXT($fName, &$def, $in) {
116 | $hOut = fOpen($fName.'.txt', 'wb');
117 | fWrite($hOut, '// ------------------'.EOL.'// BMD exported by'.EOL.'// KaiN client toolz'.EOL.'// ------------------'.EOL.EOL);
118 | // Footer
119 | if($def['header']) {
120 | // ...
121 | }
122 | // Write blocks
123 | if($def['groupSize']) {
124 | forEach($in['blocks'] as $groupIdx => $group) {
125 | fWrite($hOut, $groupIdx.EOL);
126 | writeTXTgroup($hOut, $def, $group);
127 | }
128 | }
129 | else {
130 | writeTXTgroup($hOut, $def, $in['blocks']);
131 | }
132 | // Footer
133 | if($def['footer']) {
134 | // ...
135 | }
136 | fClose($hOut);
137 | }
138 |
139 | function writeBMDgroup($h, &$def, $items) {
140 | $xor = [0xFC, 0xCF, 0xAB];
141 | forEach($items as $item) {
142 | $block = '';
143 | // merge fields
144 | forEach($def['fields'] as $fieldIdx => $field) {
145 | if($field[1] == 'txt')
146 | $block .= str_pad($item[$fieldIdx], $field[2], "\0");
147 | elseif($field[1] == 'int') {
148 | if($field[2] == 1)
149 | $block .= chr($item[$fieldIdx]);
150 | elseif($field[2] == 2)
151 | $block .= chr($item[$fieldIdx] & 0xFF) . chr($item[$fieldIdx] >> 8);
152 | }
153 | }
154 | $d = strLen($block);
155 | if($d != $def['blockSize']) {
156 | echo 'Wrong block size!';
157 | return 0;
158 | }
159 | // XOR
160 | for($i = 0; $i != $d; ++$i)
161 | $block[$i] = chr(ord($block[$i]) ^ $xor[$i % sizeOf($xor)]);
162 | // write
163 | fWrite($h, $block);
164 | }
165 | }
166 |
167 | function writeBMD($fName, &$def, $in) {
168 | $hOut = fOpen($fName.'.bmd', 'wb');
169 | // Header
170 | if($def['header']) {
171 | // ...
172 | }
173 | // Write groups
174 | if($def['groupSize']) {
175 | forEach($in['blocks'] as $group)
176 | writeBMDgroup($hOut, $def, $group);
177 | }
178 | else
179 | writeBMDgroup($hOut, $def, $in['blocks']);
180 | // Footer
181 | if($def['footer']) {
182 | // ...
183 | }
184 | fClose($hOut);
185 | }
186 |
187 | function translateBMD(&$destDef, &$src, &$dest) {
188 | forEach($destDef['fields'] as $fieldIdx => $field)
189 | if($field[0] == $destDef['translateField']) {
190 | $tIdx = $fieldIdx;
191 | break;
192 | }
193 | if($destDef['groupSize']) {
194 | forEach($dest['blocks'] as $groupIdx => $group)
195 | forEach($group as $itemIdx => $item) {
196 | $destName = &$dest['blocks'][$groupIdx][$itemIdx][$tIdx];
197 | $srcName = &$src['blocks'][$groupIdx][$itemIdx][$tIdx];
198 | if(strLen($srcName) && strLen($destName))
199 | $destName = $srcName;
200 | }
201 | }
202 | else {
203 | forEach($dest['blocks'] as $itemIdx => $item) {
204 | $destName = &$dest['blocks'][$itemIdx][$tIdx];
205 | $srcName = &$src['blocks'][$itemIdx][$tIdx];
206 | if(strLen($srcName) && strLen($destName))
207 | $destName = $srcName;
208 | }
209 | }
210 | }
211 |
212 | // ------ NPCNAME ------
213 |
214 | function readNpcNameTXT($fName) {
215 | $names = [];
216 | $lines = file($fName.'.txt');
217 | forEach($lines as &$line) {
218 | $line = trim($line);
219 | $line = str_replace("\t", ' ', $line);
220 | $line = str_replace(' ', '', $line);
221 | $qStart = strPos($line, '"');
222 | if($qStart !== false) {
223 | $no = subStr($line, 0, strPos($line, ' '));
224 | $name = subStr($line, $qStart+1, strPos($line, '"', $qStart+1)-($qStart+1));
225 | $names[$no] = $name;
226 | }
227 | }
228 | ksort($names);
229 | return $names;
230 | }
231 |
232 | function translateNpcName(&$srcNames, &$destNames) {
233 | forEach($destNames as $idx => &$name) {
234 | if(@strLen($srcNames[$idx]) && @strLen($name)) {
235 | $name = $srcNames[$idx];
236 | }
237 | }
238 | }
239 |
240 | function writeNpcNameTXT($fName, $names) {
241 | $hOut = fOpen($fName.'.txt', 'wb');
242 | $nameLength = 0;
243 | forEach($names as &$name) {
244 | $name = '"'.$name.'"';
245 | $nameLength = max($nameLength, strLen($name));
246 | }
247 | $head = sprintf('// Idx Show %'.$nameLength.'s'."\n", 'Name');
248 | $fmt = ' %3u 1 %'.$nameLength.'s'."\n";
249 | fWrite($hOut, $head);
250 | forEach($names as $idx => &$name) {
251 | fPrintf($hOut, $fmt, $idx, $name);
252 | }
253 | fClose($hOut);
254 | }
255 |
256 | // ------ META ------ //
257 |
258 | function convertDir_BMD2TXT($dir) {
259 | convertText_BMD2TXT($dir.'/text');
260 | }
261 |
262 | function fixDir($dir) {
263 | global $defs;
264 | @mkDir($dir.'_fixed');
265 |
266 | // translate Text.BMD
267 | if(file_exists($dir.'/Text.bmd')) {
268 | echo 'Text.bmd
';
269 | $translateSrc = readBMD('mobius/Text', $defs['text']['all']); // TODO: txt
270 | $translateDest = readBMD($dir.'/Text', $defs['text']['all']);
271 | translateBMD($defs['text']['all'], $translateSrc, $translateDest);
272 | writeBMD($dir.'_fixed/Text', $defs['text']['all'], $translateDest);
273 | writeTXT($dir.'_fixed/Text', $defs['text']['all'], $translateDest);
274 | }
275 |
276 | // clear Filter.BMD
277 | if(file_exists($dir.'/Filter.bmd')) {
278 | echo 'Filter.bmd
';
279 | // clearFilter($dir.'/filter', $dir.'_fixed/Filter');
280 | }
281 |
282 | // translate Item.BMD
283 | if(file_exists($dir.'/Item.bmd')) {
284 | echo 'Item.bmd
';
285 | $translateSrc = readBMD('mobius/Item', $defs['item']['100']); // TODO: txt
286 | $translateDest = readBMD($dir.'/Item', $defs['item']['074']);
287 | translateBMD($defs['item']['074'], $translateSrc, $translateDest);
288 | writeBMD($dir.'_fixed/Item', $defs['item']['074'], $translateDest);
289 | writeTXT($dir.'_fixed/Item', $defs['item']['074'], $translateDest);
290 | }
291 |
292 | // translate Skill.BMD
293 | if(file_exists($dir.'/Skill.bmd')) {
294 | echo 'Skill.bmd
';
295 | $translateSrc = readBMD('mobius/skill', $defs['skill']['100']); // TODO: txt
296 | $translateDest = readBMD($dir.'/skill', $defs['skill']['074']);
297 | translateBMD($defs['skill']['074'], $translateSrc, $translateDest);
298 | writeBMD($dir.'_fixed/Skill', $defs['skill']['074'], $translateDest);
299 | writeTXT($dir.'_fixed/Skill', $defs['skill']['074'], $translateDest);
300 | }
301 |
302 | // translate NpcName(kor).txt
303 | if(file_exists($dir.'/NpcName(kor).txt')) {
304 | echo 'NpcName(kor).txt
';
305 | $translateSrc = readNpcNameTXT('mobius/NpcName(eng)');
306 | $translateDest = readNpcNameTXT($dir.'/NpcName(kor)');
307 | translateNpcName($translateSrc, $translateDest);
308 | writeNpcNameTXT($dir.'_fixed/NpcName(kor)', $translateDest);
309 | }
310 | }
311 |
312 | fixDir('0.74');
313 |
314 | // deXOR('0.74/skill');
315 | // deXOR('mobius/skill');
316 |
317 | // $item = readBMD('0.74_fixed/item', $defs['item']['074']);
318 | // writeBMD('0.74_fixed/item2', $defs['item']['074'], $item);
319 | // writeTXT('0.74_fixed/item', $defs['item']['074'], $item);
320 |
321 | // $item = readBMD('mobius/item', $defs['item']['100']);
322 | // writeTXT('mobius/item', $defs['item']['100'], $item);
323 |
324 | ?>
--------------------------------------------------------------------------------
/MuMapConv/mumapconv.pas:
--------------------------------------------------------------------------------
1 | {$RESOURCE kain.res}
2 |
3 | //COMPILER: FPC OR COMPATIBLE
4 |
5 | program mapconv;
6 |
7 | var
8 | sciezka: string;
9 | input, output: file of byte;
10 | bufor: byte;
11 | i: integer;
12 |
13 | procedure map2bmp;
14 |
15 | //w bardzo lamerski sposob wsadzony header dla pliku bmp
16 | const header: array [$00..$0435] of byte = ( 66, 77, 54, 4, 3, 0, 0, 0,
17 | 0, 0, 54, 4, 0, 0, 40, 0,
18 | 0, 0, 0, 1, 0, 0, 0, 3,
19 | 0, 0, 1, 0, 8, 0, 0, 0,
20 | 0, 0, 0, 0, 3, 0, 19, 11,
21 | 0, 0, 19, 11, 0, 0, 0, 1,
22 | 0, 0, 0, 1, 0, 0, 0,100,
23 | 0, 0, 0,175, 0, 0, 0, 75,
24 | 150, 0, 50,125,200, 0,100,175,
25 | 250, 0,255, 0, 0, 0,255,255,
26 | 0, 0, 94, 94, 94, 0,117,117,
27 | 117, 0,140,140,140, 0,163,163,
28 | 163, 0,186,186,186, 0,209,209,
29 | 209, 0,232,232,232, 0, 14, 14,
30 | 14, 0, 15, 15, 15, 0, 16, 16,
31 | 16, 0, 17, 17, 17, 0, 18, 18,
32 | 18, 0, 19, 19, 19, 0, 20, 20,
33 | 20, 0, 21, 21, 21, 0, 22, 22,
34 | 22, 0, 23, 23, 23, 0, 24, 24,
35 | 24, 0, 25, 25, 25, 0, 26, 26,
36 | 26, 0, 27, 27, 27, 0, 28, 28,
37 | 28, 0, 29, 29, 29, 0, 30, 30,
38 | 30, 0, 31, 31, 31, 0, 32, 32,
39 | 32, 0, 33, 33, 33, 0, 34, 34,
40 | 34, 0, 35, 35, 35, 0, 36, 36,
41 | 36, 0, 37, 37, 37, 0, 38, 38,
42 | 38, 0, 39, 39, 39, 0, 40, 40,
43 | 40, 0, 41, 41, 41, 0, 42, 42,
44 | 42, 0, 43, 43, 43, 0, 44, 44,
45 | 44, 0, 45, 45, 45, 0, 46, 46,
46 | 46, 0, 47, 47, 47, 0, 48, 48,
47 | 48, 0, 49, 49, 49, 0, 50, 50,
48 | 50, 0, 51, 51, 51, 0, 52, 52,
49 | 52, 0, 53, 53, 53, 0, 54, 54,
50 | 54, 0, 55, 55, 55, 0, 56, 56,
51 | 56, 0, 57, 57, 57, 0, 58, 58,
52 | 58, 0, 59, 59, 59, 0, 60, 60,
53 | 60, 0, 61, 61, 61, 0, 62, 62,
54 | 62, 0, 63, 63, 63, 0, 64, 64,
55 | 64, 0, 65, 65, 65, 0, 66, 66,
56 | 66, 0, 67, 67, 67, 0, 68, 68,
57 | 68, 0, 69, 69, 69, 0, 70, 70,
58 | 70, 0, 71, 71, 71, 0, 72, 72,
59 | 72, 0, 73, 73, 73, 0, 74, 74,
60 | 74, 0, 75, 75, 75, 0, 76, 76,
61 | 76, 0, 77, 77, 77, 0, 78, 78,
62 | 78, 0, 79, 79, 79, 0, 80, 80,
63 | 80, 0, 81, 81, 81, 0, 82, 82,
64 | 82, 0, 83, 83, 83, 0, 84, 84,
65 | 84, 0, 85, 85, 85, 0, 86, 86,
66 | 86, 0, 87, 87, 87, 0, 88, 88,
67 | 88, 0, 89, 89, 89, 0, 90, 90,
68 | 90, 0, 91, 91, 91, 0, 92, 92,
69 | 92, 0, 93, 93, 93, 0, 94, 94,
70 | 94, 0, 95, 95, 95, 0, 96, 96,
71 | 96, 0, 97, 97, 97, 0, 98, 98,
72 | 98, 0, 99, 99, 99, 0,100,100,
73 | 100, 0,101,101,101, 0,102,102,
74 | 102, 0,103,103,103, 0,104,104,
75 | 104, 0,105,105,105, 0,106,106,
76 | 106, 0,107,107,107, 0,108,108,
77 | 108, 0,109,109,109, 0,110,110,
78 | 110, 0,111,111,111, 0,112,112,
79 | 112, 0,113,113,113, 0,114,114,
80 | 114, 0,115,115,115, 0,116,116,
81 | 116, 0,117,117,117, 0,118,118,
82 | 118, 0,119,119,119, 0,120,120,
83 | 120, 0,121,121,121, 0,122,122,
84 | 122, 0,123,123,123, 0,124,124,
85 | 124, 0,125,125,125, 0,126,126,
86 | 126, 0,127,127,127, 0,128,128,
87 | 128, 0,129,129,129, 0,130,130,
88 | 130, 0,131,131,131, 0,132,132,
89 | 132, 0,133,133,133, 0,134,134,
90 | 134, 0,135,135,135, 0,136,136,
91 | 136, 0,137,137,137, 0,138,138,
92 | 138, 0,139,139,139, 0,140,140,
93 | 140, 0,141,141,141, 0,142,142,
94 | 142, 0,143,143,143, 0,144,144,
95 | 144, 0,145,145,145, 0,146,146,
96 | 146, 0,147,147,147, 0,148,148,
97 | 148, 0,149,149,149, 0,150,150,
98 | 150, 0,151,151,151, 0,152,152,
99 | 152, 0,153,153,153, 0,154,154,
100 | 154, 0,155,155,155, 0,156,156,
101 | 156, 0,157,157,157, 0,158,158,
102 | 158, 0,159,159,159, 0,160,160,
103 | 160, 0,161,161,161, 0,162,162,
104 | 162, 0,163,163,163, 0,164,164,
105 | 164, 0,165,165,165, 0,166,166,
106 | 166, 0,167,167,167, 0,168,168,
107 | 168, 0,169,169,169, 0,170,170,
108 | 170, 0,171,171,171, 0,172,172,
109 | 172, 0,173,173,173, 0,174,174,
110 | 174, 0,175,175,175, 0,176,176,
111 | 176, 0,177,177,177, 0,178,178,
112 | 178, 0,179,179,179, 0,180,180,
113 | 180, 0,181,181,181, 0,182,182,
114 | 182, 0,183,183,183, 0,184,184,
115 | 184, 0,185,185,185, 0,186,186,
116 | 186, 0,187,187,187, 0,188,188,
117 | 188, 0,189,189,189, 0,190,190,
118 | 190, 0,191,191,191, 0,192,192,
119 | 192, 0,193,193,193, 0,194,194,
120 | 194, 0,195,195,195, 0,196,196,
121 | 196, 0,197,197,197, 0,198,198,
122 | 198, 0,199,199,199, 0,200,200,
123 | 200, 0,201,201,201, 0,202,202,
124 | 202, 0,203,203,203, 0,204,204,
125 | 204, 0,205,205,205, 0,206,206,
126 | 206, 0,207,207,207, 0,208,208,
127 | 208, 0,209,209,209, 0,210,210,
128 | 210, 0,211,211,211, 0,212,212,
129 | 212, 0,213,213,213, 0,214,214,
130 | 214, 0,215,215,215, 0,216,216,
131 | 216, 0,217,217,217, 0,218,218,
132 | 218, 0,219,219,219, 0,220,220,
133 | 220, 0,221,221,221, 0,222,222,
134 | 222, 0,223,223,223, 0,224,224,
135 | 224, 0,225,225,225, 0,226,226,
136 | 226, 0,227,227,227, 0,228,228,
137 | 228, 0,229,229,229, 0,230,230,
138 | 230, 0,231,231,231, 0,232,232,
139 | 232, 0,233,233,233, 0,234,234,
140 | 234, 0,235,235,235, 0,236,236,
141 | 236, 0,237,237,237, 0,238,238,
142 | 238, 0,239,239,239, 0,240,240,
143 | 240, 0,241,241,241, 0,242,242,
144 | 242, 0,243,243,243, 0,244,244,
145 | 244, 0,245,245,245, 0,246,246,
146 | 246, 0,247,247,247, 0,248,248,
147 | 248, 0,249,249,249, 0,250,250,
148 | 250, 0,251,251,251, 0,252,252,
149 | 252, 0,253,253,253, 0,254,254,
150 | 254, 0,255,255,255, 0);
151 |
152 |
153 | begin
154 | sciezka[i-2]:='b'; //w bardzo lamerski sposob zmieniamy ext dla outputu
155 | sciezka[i-1]:='m';
156 | sciezka[i]:='p';
157 | assign(output,sciezka);
158 | rewrite(output);
159 |
160 | for i:= $00 to $0434 do //przepisz caly header
161 | write(output,header[i]);
162 | while not eof(input) do //i potem caly plik map
163 | begin
164 | read(input,bufor);
165 | write(output,bufor);
166 | end;
167 | end;
168 |
169 | procedure bmp2map;
170 | begin
171 | sciezka[i-2]:='m'; //w bardzo lamerski sposob zmieniamy ext dla outputu
172 | sciezka[i-1]:='a';
173 | sciezka[i]:='p';
174 | assign(output,sciezka);
175 | rewrite(output);
176 |
177 | seek(input,$0435); //idziemy za header bmp
178 |
179 | while not eof(input) do //do konca pliku przepisujemy
180 | begin
181 | read(input,bufor);
182 | write(output,bufor);
183 | end;
184 | end;
185 |
186 | BEGIN
187 |
188 | if paramstr(1) = '' then
189 | begin
190 | writeln('Sciezka pliku do konwersji (bmp, map): ');
191 | readln(sciezka);
192 | end
193 | else sciezka:=paramstr(1);
194 |
195 | assign(input,sciezka);
196 | {$I-}reset(input);{$I+}
197 | if (IOResult <> 0) or (sciezka = '') then
198 | begin
199 | writeln('Nieprawidlowa sciezka');
200 | halt;
201 | end;
202 |
203 | i:= length(sciezka); {liczymy dlugosc sciezki do sprawdzenia rozszerzenia}
204 |
205 | case upcase(sciezka[i-2]) of {wybierz procedure wg pierwszej litery
206 | rozszerzenia}
207 | 'M': map2bmp; {jak rozszerzenie to Map to robimy map -> bmp}
208 | 'B': bmp2map; {jak rozszerzenie to Bmp to robimy bmp -> map}
209 | else begin write('zle rozszerzenie!'); halt; end;
210 | end;
211 |
212 | writeln('Zrobione');
213 | close(input); {zamykamy odczyt plikow}
214 | close(output);
215 |
216 | END.
217 |
218 |
--------------------------------------------------------------------------------
/MuMapEdit/mumapedit.pas:
--------------------------------------------------------------------------------
1 | {$APPTYPE GUI}
2 | {$r menu.res}
3 | {$r bmpheads.res}
4 | program MuMapEdit;
5 |
6 | uses
7 | Windows,
8 | Messages,
9 | Strings;
10 |
11 | type
12 | TPos = packed record
13 | x: longint;
14 | y: longint;
15 | end;
16 | TTex = record
17 | handle: hBitmap;
18 | szer: word;
19 | wys: word;
20 | hThumb: hBitmap;
21 | substc: longint;
22 | end;
23 | var
24 | /////////////////////////////////////////////////zmienne do okna glownego
25 | Wnd: WndClass; //klasa okna glownego
26 | wymiaryokna: RECT; //wymiary okna glownego bez belki gornej itd.
27 | WspRect: RECT; //pole odswiezane przy odmalowaniu wspolrzednych
28 | hOkna: HWND; // uchwyt do okna
29 | hdcOkna: HDC; // uchwyt do rysowania po oknie
30 | TextProp: TEXTMETRIC;
31 |
32 | ///////////////////////////////////////////////////////zmienne do planszy
33 | plansza: WndClass; // klasa okna planszy
34 | hPlanszy: HWND; // uchwyt do okna planszy
35 | hdcPlanszy: HDC; // uchwyt do rysowania po planszy
36 | szerPlanszy,wysPlanszy: word; //mierzona w ilosci pol
37 | kp,wp,kk,wk: byte; {numery pol poczatkowych i koncowych aktualnie
38 | wyswietlanych na planszy}
39 | skala: byte = 64; //dlugosc boku pola w pikselach i wartosc domyslna
40 | pozycja: TPos; //aktualne x i y na mapie
41 | xscroll,yscroll : longint; //wymiary x i y suwaka
42 | war: byte; //obecnie wyswietlana warstwa na planszy
43 | RefPole: RECT; //pole wymagane do odswiezania przy rysowaniu
44 |
45 | //////////////////////////////////////////////////////operacje na plikach
46 | hPlik: HWND; //uchwyt do okna
47 | przeczyt:LongWord; //ilosc przeczytanych/zapisanych bajtow podczas operacji
48 | otworz,zapisz: OPENFILENAME; //dane do dialogow otworz/zapisz plik
49 | folder: BROWSEINFO; //dane do dialogu wybierania katalogu
50 | FilePath: array [0..MAX_PATH] of char; {sciezka do czytanego/zapisywanego
51 | pliku}
52 | WorldPath: array [0..MAX_PATH] of char; //sciezka do folderu z worldem
53 | przesuw: integer; //offset do czytania niektorych plikow
54 | tempdir: pchar; //sciezka do folderu tymczasowego
55 | znaleziony: win32_find_data; //dane znalezionych po wyszukiwaniu plikow
56 |
57 | ////////////////////////////////////////////////////////////////dane mapy
58 | MAP: array [0..7,0..255,0..255] of byte; {wartosci warstw, uporzadkowanie:
59 | warstwa,x,y}
60 | tekstury: array [0..$0E] of TTex; {tablica z uchwytami do tekstur,
61 | ostatnia dla nieprawidlowych wartosci}
62 |
63 | //////////////////////////////////////////////////////////kontrolka RYSUJ
64 | rysuj: boolean; //rysujemy albo nie
65 | hPrzycisk: HWND; //uchwyt do przycisku rysuj
66 |
67 | //////////////////////////////////////////////////////////kontrolka SKALA
68 | hSkala: HWND; // uchwyt do comboboxa skali
69 |
70 | ////////////////////////////////////////////////////////kontrolka WARSTWA
71 | hWar: HWND; //uchwyt do comboboxa warstw
72 |
73 | /////////////////////////////////////////////////kontrolka WYBOR TEKSTURY
74 | hSelTex: HWND; //uchwyt do okna wyboru
75 | SelTex: WndClass; //klasa okna wyboru
76 | hdcSelTex: HDC; //uchwyt do rysowania po oknie wyboru
77 | valSelTex: byte; //wybrana przez uzytkownika tekstura
78 |
79 | /////////////////////////////////////////////kontrolka WARTOSC POJEDYNCZA
80 | hSel1: HWND; //uchwyt do okna wpisywania wartosci
81 | sSel1: string; //lancuch przechowujacy tymczasowo wartosc z pola hSel1
82 | dSel1: word; {wartosc liczbowa otrzymana z konwersji sSel1. Typ word
83 | dla sprawdzania przekroczenia dozwolonych wartosci}
84 |
85 | ////////////////////////////////////////////////////////////////////ROZNE
86 | Msg: TMsg;
87 | w,k: byte;
88 | ps: PAINTSTRUCT;
89 | bufor: PCHAR = '';
90 | defPen,polePen: HPEN;
91 | defBrush,poleBrush: HBRUSH;
92 | hbmOld: HBITMAP; // poprzednia, domyslna wartosc bitmapy dla hdcNowy
93 | hdcNowy: HDC; // uchwyt dla bitmapy przy BitBlt
94 | BelkaMenu: HMENU; //uchwyt do belki gornego menu
95 | i,tex:byte;
96 |
97 | nazwy: array [$00..$12] of pchar = ('\TileGrass01.bmp',
98 | '\TileGrass02.bmp',
99 | '\TileGround01.bmp',
100 | '\TileGround02.bmp',
101 | '\TileGround03.bmp',
102 | '\TileWater01.bmp',
103 | '\TileWood01.bmp',
104 | '\TileRock01.bmp',
105 | '\TileRock02.bmp',
106 | '\TileRock03.bmp',
107 | '\TileRock04.bmp',
108 | '\TileRock05.bmp',
109 | '\TileRock06.bmp',
110 | '\TileRock07.bmp',
111 | '\borken.bmp',
112 | '\Terrain.map',
113 | '\Terrain.att',
114 | '\TerrainHeight.ozb',
115 | '\TerrainLight.bmp');
116 |
117 | procedure loadtex(nr: byte; src: pchar);
118 | var
119 | sciezka: pchar;
120 | info: bitmap;
121 | begin
122 | sciezka:=stralloc(max_path);
123 | strmove(sciezka,tempdir,max_path);
124 | strcat(sciezka,nazwy[nr]);
125 |
126 | if src <> '' then
127 | begin
128 | deletefile(sciezka);
129 | copyfile(src,sciezka,false);
130 | end;
131 | with tekstury[nr] do
132 | begin
133 | handle:= loadimage(0,sciezka,IMAGE_BITMAP,0,0,LR_LOADFROMFILE);
134 | if handle <> 0 then
135 | begin
136 | hThumb:= loadimage(0,sciezka,IMAGE_BITMAP,48,48,LR_LOADFROMFILE);
137 | GetObject(handle,sizeof(info),@info);
138 | szer:= info.bmWidth;
139 | wys:= info.bmHeight;
140 | if skala <> 64 then
141 | begin
142 | handle:= loadimage(0,sciezka,IMAGE_BITMAP,szer div 64 * skala, wys div 64 * skala,LR_LOADFROMFILE);
143 | GetObject(handle,sizeof(info),@info);
144 | szer:= info.bmWidth;
145 | wys:= info.bmHeight;
146 | end;
147 | end
148 | else hThumb:=0;
149 | end;
150 | end;
151 |
152 | procedure PrepOpen(listatypow,rozszerzenie:pchar);
153 | begin
154 | fillchar(otworz,sizeof(otworz),0);
155 | with otworz do
156 | begin
157 | lstructsize:=sizeof(TOPENFILENAME);
158 | lpstrFilter:= listatypow;
159 | nMaxFile:= MAX_PATH;
160 | lpstrFile:= pchar(FilePath);
161 | lpstrDefExt:= rozszerzenie;
162 | flags:= ofn_filemustexist or ofn_hidereadonly
163 | end;
164 | end;
165 |
166 | procedure PrepSave(listatypow,rozszerzenie:pchar);
167 | begin
168 | fillchar(zapisz,sizeof(zapisz),0);
169 | with zapisz do
170 | begin
171 | lstructsize:=sizeof(TOPENFILENAME);
172 | lpstrFilter:= listatypow;
173 | nMaxFile:= MAX_PATH;
174 | lpstrFile:= pchar(FilePath);
175 | lpstrDefExt:= rozszerzenie;
176 | flags:= ofn_hidereadonly
177 | end;
178 | end;
179 |
180 | procedure WriteLayer(war: byte);
181 | begin
182 | for w:=255 downto 0 do //256 wierszy, czytane od tylu
183 | for k:=0 to 255 do
184 | begin
185 | writefile(hPlik,map[war,k,w],1,przeczyt,poverlapped(0));
186 | if przeczyt = 0 then messagebox(hOkna,'Blad zapisu!','',MB_OK);
187 | end;
188 | end;
189 |
190 | procedure frOpen(src: pchar; defname: byte);
191 | var
192 | fpath: pchar;
193 | begin
194 | fpath:=stralloc(max_path);
195 | strmove(fpath,tempdir,max_path);
196 | strcat(fpath,nazwy[defname]);
197 |
198 | if src <> '' then
199 | copyfile(src,fpath,false);
200 |
201 | hPlik:= CreateFile(fpath,generic_read,
202 | file_share_read,lpsecurity_attributes(0),
203 | open_always,file_flag_sequential_scan,
204 | 0);
205 | end;
206 |
207 |
208 | procedure AttMapRead(wmin,wmax,offs: byte);
209 | begin
210 | if hPlik <> INVALID_HANDLE_VALUE then
211 | begin
212 | setfilepointer(hPlik,offs,plong(0),file_begin);
213 | for i:= wmin to wmax do
214 | for w:=255 downto 0 do //256 wierszy, czytane od tylu
215 | for k:=0 to 255 do
216 | begin
217 | readfile(hPlik,map[i,k,w],1,przeczyt,poverlapped(0));
218 | if przeczyt = 0 then
219 | begin
220 | messagebox(hOkna,'Blad odczytu!','',MB_OK);
221 | Closehandle(hPlik);
222 | exit;
223 | end;
224 | end;
225 | if (war >= wmin) and (war <= wmax) then
226 | invalidaterect(hPlanszy,lprect(0),true);
227 | end;
228 | Closehandle(hPlik);
229 | end;
230 |
231 | procedure HeightRead(lwar: byte);
232 | begin
233 | if hPlik <> INVALID_HANDLE_VALUE then
234 | begin
235 | setfilepointer(hPlik,14,plong(0),file_begin);
236 | //4 dla ominiecia powtorzonych bajtow + 10 dla adresu danych
237 | readfile(hPlik,przesuw,2,przeczyt,poverlapped(0));
238 | inc(przesuw,4);
239 | if przeczyt = 0 then
240 | begin
241 | messagebox(hOkna,'Blad odczytu!','',MB_OK);
242 | Closehandle(hPlik);
243 | exit;
244 | end;
245 | setfilepointer(hPlik,przesuw,plong(0),file_begin);
246 | for w:=255 downto 0 do //256 wierszy, czytane od tylu
247 | for k:=0 to 255 do
248 | begin
249 | readfile(hPlik,map[lwar,k,w],1,przeczyt,poverlapped(0));
250 | if przeczyt = 0 then
251 | begin
252 | messagebox(hOkna,'Blad odczytu!','',MB_OK);
253 | Closehandle(hPlik);
254 | exit;
255 | end;
256 | end;
257 | if war = lwar then
258 | invalidaterect(hPlanszy,lprect(0),true);
259 | end;
260 | Closehandle(hPlik);
261 | end;
262 |
263 | procedure LightRead(wmin,wmax: byte);
264 | begin
265 | if hPlik <> INVALID_HANDLE_VALUE then
266 | begin
267 | setfilepointer(hPlik,10,plong(0),file_begin);
268 | readfile(hPlik,przesuw,2,przeczyt,poverlapped(0));
269 | if przeczyt = 0 then
270 | begin
271 | messagebox(hOkna,'Blad odczytu!','',MB_OK);
272 | Closehandle(hPlik);
273 | exit;
274 | end;
275 | setfilepointer(hPlik,przesuw,plong(0),file_begin);
276 | for w:=255 downto 0 do //256 wierszy, czytane od tylu
277 | for k:=0 to 255 do
278 | for i:=wmax downto wmin do //zeby BGR obrocic na RGB
279 | begin
280 | readfile(hPlik,map[i,k,w],1,przeczyt,poverlapped(0));
281 | if przeczyt = 0 then
282 | begin
283 | messagebox(hOkna,'Blad odczytu!','',MB_OK);
284 | Closehandle(hPlik);
285 | exit;
286 | end;
287 | end;
288 | if (war >= wmin) and (war <=wmax) then
289 | invalidaterect(hPlanszy,lprect(0),true);
290 | end;
291 | Closehandle(hPlik);
292 | end;
293 |
294 | procedure fwTempOpen(defname: byte);
295 | var
296 | fpath: pchar;
297 | begin
298 | fpath:=stralloc(max_path);
299 | strmove(fpath,tempdir,max_path);
300 | strcat(fpath,nazwy[defname]);
301 | hPlik:= CreateFile(fpath,generic_write,
302 | 0,lpsecurity_attributes(0),
303 | open_existing, file_flag_random_access,
304 | 0);
305 | end;
306 |
307 | procedure fwTemp(value: byte;offs: dword);
308 | begin
309 | setfilepointer(hPlik,offs,plong(0),file_begin);
310 | WriteFile(hPlik,value,1,przeczyt,poverlapped(0));
311 | if przeczyt = 0 then
312 | messagebox(hOkna,'Blad Zapisu!','',mb_ok);
313 | end;
314 |
315 | procedure AttMapSave(wmin,wmax: byte; sciezka: pchar; header:shortstring);
316 | begin
317 | hPlik:= CreateFile(sciezka,generic_write,
318 | 0,lpsecurity_attributes(0),
319 | create_always, file_flag_sequential_scan,
320 | 0);
321 | for i:= 1 to byte(header[0]) do
322 | begin
323 | writefile(hPlik,header[i],1,przeczyt,poverlapped(0));
324 | if przeczyt = 0 then
325 | begin
326 | messagebox(hOkna,'Blad zapisu!','',MB_OK);
327 | Closehandle(hPlik);
328 | exit;
329 | end;
330 | end;
331 | for i:= wmin to wmax do
332 | for w:=255 downto 0 do //256 wierszy, czytane od tylu
333 | for k:=0 to 255 do
334 | begin
335 | writefile(hPlik,map[i,k,w],1,przeczyt,poverlapped(0));
336 | if przeczyt = 0 then
337 | begin
338 | messagebox(hOkna,'Blad zapisu!','',MB_OK);
339 | Closehandle(hPlik);
340 | exit;
341 | end;
342 | end;
343 | Closehandle(hPlik);
344 | end;
345 |
346 | procedure BmpWrite(wmin,wmax: byte; sciezka: pchar);
347 | var
348 | hHeader: LongWord;
349 | begin
350 | if wmin<> wmax then
351 | hHeader:= FindResource(hInstance,'RGBHead',RT_RCDATA)
352 | else
353 | hHeader:= FindResource(hInstance,'MonoHead',RT_RCDATA);
354 |
355 | hPlik:= CreateFile(sciezka,generic_write,
356 | 0,lpsecurity_attributes(0),
357 | create_always, file_flag_sequential_scan,
358 | 0);
359 | writefile(hPlik,LockResource(LoadResource(hInstance,hHeader))^,SizeOfResource(hInstance,hHeader),przeczyt,poverlapped(0));
360 | if przeczyt <> SizeOfResource(hInstance,hHeader) then
361 | begin
362 | messagebox(hOkna,'Blad zapisu!','',MB_OK);
363 | Closehandle(hPlik);
364 | exit;
365 | end;
366 | for w:= 255 downto 0 do
367 | for k:= 0 to 255 do
368 | for i:=wmax downto wmin do
369 | begin
370 | writefile(hPlik,map[i,k,w],1,przeczyt,poverlapped(0));
371 | if przeczyt = 0 then
372 | begin
373 | messagebox(hOkna,'Blad zapisu!','',MB_OK);
374 | Closehandle(hPlik);
375 | exit;
376 | end;
377 | end;
378 |
379 | CloseHandle(hPlik);
380 | end;
381 |
382 | procedure odrysujSelTex(nrTex: byte);
383 | begin
384 | SelectObject(hdcNowy,tekstury[nrTex].hThumb);
385 | w:=nrTex div 2;
386 | k:=nrTex mod 2;
387 |
388 | if nrTex = valSelTex then
389 | begin
390 | polePen:= createpen(ps_solid,1,RGB(255,0,0));
391 | defPen:= selectobject(hdcSelTex,polePen);
392 | if tekstury[nrTex].hthumb = 0 then
393 | poleBrush:= createsolidbrush(tekstury[nrTex].substc)
394 | else
395 | poleBrush:= createpatternbrush(tekstury[nrTex].hThumb);
396 | defBrush:= selectobject(hdcSelTex,poleBrush);
397 |
398 | rectangle(hdcSelTex,k*48,w*48,k*48+48,w*48+48);
399 |
400 | selectobject(hdcSelTex,defBrush);
401 | deleteobject(poleBrush);
402 | selectobject(hdcSelTex,defpen);
403 | deleteobject(polePen);
404 | end
405 | else
406 | if tekstury[nrTex].hthumb = 0 then
407 | begin
408 | polePen:= createpen(ps_solid,1,tekstury[nrTex].substc);
409 | defPen:= selectobject(hdcSelTex,polePen);
410 | poleBrush:= createsolidbrush(tekstury[nrTex].substc);
411 | defBrush:= selectobject(hdcSelTex,poleBrush);
412 |
413 | rectangle(hdcSelTex,k*48,w*48,k*48+48,w*48+48);
414 |
415 | selectobject(hdcSelTex,defBrush);
416 | deleteobject(poleBrush);
417 | selectobject(hdcSelTex,defpen);
418 | deleteobject(polePen);
419 | end
420 | else
421 | BitBlt(hdcSelTex,k*48,w*48,48,48,hdcNowy,0,0,srccopy);
422 |
423 | end;
424 |
425 |
426 | (*******************FUNKCJE SELTEX*******************************************)
427 |
428 | function funkcjeSelTex(hSelTex: hwnd; umsg: uint; wpar: wparam; lpar: lparam):lresult; stdcall;
429 | begin
430 | funkcjeSelTex:=0;
431 | case uMsg of
432 | WM_CREATE:
433 | begin
434 | end;
435 | WM_PAINT:
436 | begin
437 | hdcSelTex:= beginpaint(hSelTex,ps);
438 | hdcSelTex:= getdc(hSelTex);
439 | hdcNowy:= createcompatibleDC(hdcSelTex);
440 | hbmOld:= SelectObject(hdcNowy,tekstury[0].hThumb);
441 |
442 | for i:= $00 to $0E do
443 | odrysujSelTex(i);
444 |
445 | SelectObject(hdcNowy,hbmOld);
446 | deleteDC(hdcNowy);
447 | releasedc(hSelTex,hdcSelTex);
448 | endpaint(hSelTex,ps);
449 | end;
450 | WM_LBUTTONUP:
451 | begin
452 | valSelTex:= loWord(lPar) div 48 + 2* (hiWord(lPar) div 48);
453 | if valSelTex > $0E then valSelTex:= $0E;
454 | sendmessage(hSelTex,wm_paint,0,0);
455 | end;
456 | else funkcjeSelTex:=defwindowproc(hSeltex,umsg,wpar,lpar);
457 | end;
458 | end;
459 |
460 | (*******************FUNKCJE PLANSZY******************************************)
461 |
462 | function funkcjeplanszy(hPlanszy: hwnd; umsg: uint; wpar: wparam; lpar: lparam):lresult; stdcall;
463 | begin
464 | funkcjeplanszy:=0;
465 | case uMsg of
466 | WM_CREATE:
467 | begin
468 | setscrollrange(hPlanszy,sb_horz,0,255-szerplanszy+1,true);
469 | setscrollrange(hPlanszy,sb_vert,0,255-wysplanszy+1,true);
470 | end;
471 | WM_SIZE:
472 | begin
473 | setscrollrange(hPlanszy,sb_horz,0,255-szerplanszy+1,true);
474 | setscrollrange(hPlanszy,sb_vert,0,255-wysplanszy+1,true);
475 | end;
476 | WM_PAINT:
477 | begin
478 | hdcPlanszy:= beginpaint(hPlanszy,ps);
479 | hdcPlanszy:= getdc(hplanszy);
480 |
481 | if wp+wysplanszy > $FF then wk:= $FF else wk:= wp+wysplanszy;
482 | if kp+szerplanszy > $FF then kk:= $FF else kk:= kp+szerplanszy;
483 | case war of
484 | 0,1: /////////////TEX 1, 2
485 | begin
486 | if war=1 then
487 | i:=i;
488 | hdcNowy:= createcompatibleDC(hdcPlanszy);
489 | hbmOld:= selectobject(hdcNowy,tekstury[0].handle);
490 | for w:=wp to wk do
491 | for k:=kp to kk do
492 | begin
493 | if map[war,k,w] <= $0D then
494 | tex:=map[war,k,w]
495 | else
496 | tex:=$0E;
497 | selectobject(hdcnowy,tekstury[tex].handle);
498 |
499 | if tekstury[tex].handle = 0 then
500 | begin
501 | polePen:= createpen(ps_solid,1,tekstury[tex].substc);
502 | defPen:= selectobject(hdcPlanszy,polePen);
503 | poleBrush:= createsolidbrush(tekstury[tex].substc);
504 | defBrush:= selectobject(hdcPlanszy,poleBrush);
505 |
506 | rectangle(hdcPlanszy,(k-kp)*skala,(w-wp)*skala,(k-kp)*skala+skala,(w-wp)*skala+skala);
507 |
508 | selectobject(hdcPlanszy,defPen);
509 | deleteobject(polePen);
510 | selectobject(hdcPlanszy,defBrush);
511 | deleteobject(poleBrush);
512 | end
513 | else
514 | bitblt(hdcPlanszy,(k-kp)*skala,(w-wp)*skala,skala,skala,hdcnowy,(k mod (tekstury[tex].szer div skala))*skala, (w mod (tekstury[tex].wys div skala))*skala,srccopy);
515 | end;
516 | selectobject(hdcNowy,hbmOld);
517 | deletedc(hdcNowy);
518 | end;
519 | 2,4,5,6,7: ////TEXATR, SWIATLO R, G, B, HEIGHT
520 | for w:=wp to wk do
521 | for k:=kp to kk do
522 | begin
523 | polePen:= createpen(ps_solid,1,RGB(map[war,k,w],map[war,k,w],map[war,k,w]));
524 | defPen:= selectobject(hdcPlanszy,polePen);
525 | poleBrush:= createsolidbrush(RGB(map[war,k,w],map[war,k,w],map[war,k,w]));
526 | defBrush:= selectobject(hdcPlanszy,poleBrush);
527 |
528 | rectangle(hdcPlanszy,(k-kp)*skala,(w-wp)*skala,(k-kp)*skala+skala,(w-wp)*skala+skala);
529 |
530 | selectobject(hdcPlanszy,defPen);
531 | deleteobject(polePen);
532 | selectobject(hdcPlanszy,defBrush);
533 | deleteobject(poleBrush);
534 | end;
535 | 3: /////////////ATT
536 | for w:=wp to wk do
537 | for k:=kp to kk do
538 | begin
539 | polePen:= createpen(ps_solid,1,RGB(map[war,k,w]*20,map[war,k,w]*20,map[war,k,w]*20));
540 | defPen:= selectobject(hdcPlanszy,polePen);
541 | poleBrush:= createsolidbrush(RGB(map[war,k,w]*20,map[war,k,w]*20,map[war,k,w]*20));
542 | defBrush:= selectobject(hdcPlanszy,poleBrush);
543 |
544 | rectangle(hdcPlanszy,(k-kp)*skala,(w-wp)*skala,(k-kp)*skala+skala,(w-wp)*skala+skala);
545 |
546 | selectobject(hdcPlanszy,defPen);
547 | deleteobject(polePen);
548 | selectobject(hdcPlanszy,defBrush);
549 | deleteobject(poleBrush);
550 | end;
551 | 8: //////SWIATLO RGB
552 | for w:=wp to wk do
553 | for k:=kp to kk do
554 | begin
555 | polePen:= createpen(ps_solid,1,RGB(map[4,k,w],map[5,k,w],map[6,k,w]));
556 | defPen:= selectobject(hdcPlanszy,polePen);
557 | poleBrush:= createsolidbrush(RGB(map[4,k,w],map[5,k,w],map[6,k,w]));
558 | defBrush:= selectobject(hdcPlanszy,poleBrush);
559 |
560 | rectangle(hdcPlanszy,(k-kp)*skala,(w-wp)*skala,(k-kp)*skala+skala,(w-wp)*skala+skala);
561 |
562 | selectobject(hdcPlanszy,defPen);
563 | deleteobject(polePen);
564 | selectobject(hdcPlanszy,defBrush);
565 | deleteobject(poleBrush);
566 | end;
567 | end;
568 |
569 | releasedc(hplanszy,hdcPlanszy);
570 | endpaint(hplanszy,ps);
571 | end;
572 | WM_HSCROLL:
573 | begin
574 | case wpar of
575 | sb_lineleft:
576 | begin
577 | if kp > 0 then dec(kp);
578 | setscrollpos(hPlanszy,sb_horz,kp,true);
579 | invalidaterect(hPlanszy,lprect(0),true);
580 | end;
581 | sb_lineright:
582 | begin
583 | if kp <= $FF-szerplanszy then inc(kp);
584 | setscrollpos(hPlanszy,sb_horz,kp,true);
585 | invalidaterect(hPlanszy,lprect(0),true);
586 | end;
587 | sb_pageright:
588 | begin
589 | if kp <= $FF-szerplanszy+1 then kp:=kp+szerplanszy
590 | else kp:=$FF-szerplanszy+1;
591 | setscrollpos(hPlanszy,sb_horz,kp,true);
592 | invalidaterect(hPlanszy,lprect(0),true);
593 | end;
594 | sb_pageleft:
595 | begin
596 | if kp >szerplanszy then kp:=kp-szerplanszy
597 | else kp:=0;
598 | setscrollpos(hPlanszy,sb_horz,kp,true);
599 | invalidaterect(hPlanszy,lprect(0),true);
600 | end;
601 | end;
602 | end;
603 | WM_VSCROLL:
604 | begin
605 | case wpar of
606 | sb_lineup:
607 | begin
608 | if wp > 0 then dec(wp);
609 | setscrollpos(hPlanszy,sb_vert,wp,true);
610 | invalidaterect(hPlanszy,lprect(0),true);
611 | end;
612 | sb_linedown:
613 | begin
614 | if wp <= $FF-wysplanszy then inc(wp);
615 | setscrollpos(hPlanszy,sb_vert,wp,true);
616 | invalidaterect(hPlanszy,lprect(0),true);
617 | end;
618 | sb_pageup:
619 | begin
620 | if wp > wysplanszy then wp:=wp-wysplanszy
621 | else wp:=0;
622 | setscrollpos(hPlanszy,sb_vert,wp,true);
623 | invalidaterect(hPlanszy,lprect(0),true);
624 | end;
625 | sb_pagedown:
626 | begin
627 | if wp <= $FF-wysplanszy+1 then wp:=wp+wysplanszy
628 | else wp:=$FF - wysplanszy+1;
629 | setscrollpos(hPlanszy,sb_vert,wp,true);
630 | invalidaterect(hPlanszy,lprect(0),true);
631 | end;
632 | end;
633 | end;
634 | WM_MOUSEMOVE:
635 | begin
636 | if loword(lpar) div skala +kp <= $FF then
637 | pozycja.x:= loword(lpar) div skala +kp;
638 | if (hiword(lpar) div skala +wp) <= $FF then
639 | pozycja.y:= (hiword(lpar) div skala +wp) xor $FF;
640 | wvsprintf(bufor,'x: %d, y: %d',@pozycja);
641 | invalidaterect(hOkna,@wspRect,true);
642 |
643 | if rysuj and (wpar = mk_lbutton) then
644 | begin
645 | case war of
646 | 0,1:
647 | if map[war,pozycja.x,pozycja.y xor $FF] <> valSelTex then
648 | begin
649 | map[war,pozycja.x,pozycja.y xor $FF]:= valSelTex;
650 | with RefPole do
651 | begin
652 | left:= (LoWord(lpar) div skala) * skala;
653 | right:= left+skala;
654 | top:= (HiWord(lpar) div skala) * skala;
655 | bottom:= top+skala;
656 | end;
657 | fwTemp(valSelTex,1+(war shl 16) + pozycja.x + (pozycja.y shl 8));
658 | invalidaterect(hPlanszy,RefPole,true);
659 | end;
660 |
661 |
662 | 2,4,5,6,7:
663 | begin
664 | fillchar(sSel1,256,0);
665 | sSel1[0]:= char(getwindowtext(hSel1,@sSel1[1],getwindowtextlength(hSel1)+1));
666 | val(sSel1,dSel1,i);
667 | if dSel1 > $FF then
668 | begin
669 | dSel1:= $FF;
670 | str(dSel1,sSel1);
671 | SetWindowText(hSel1,@sSel1[1]);
672 | end;
673 | if map[war,pozycja.x,pozycja.y xor $FF] <> dSel1 then
674 | begin
675 | map[war,pozycja.x, pozycja.y xor $FF]:= dSel1;
676 | case war of
677 | 2: fwTemp(dSel1,1+(war shl 16) + pozycja.x + (pozycja.y shl 8));
678 | 4,5,6: fwTemp(dSel1,54+((pozycja.x*3)+2-(war-4))+(pozycja.y*3) shl 8);
679 | 7: fwTemp(dSel1,1082+pozycja.x+(pozycja.y shl 8));
680 | end;
681 | with RefPole do
682 | begin
683 | left:= (LoWord(lpar) div skala) * skala;
684 | right:= left+skala;
685 | top:= (HiWord(lpar) div skala) * skala;
686 | bottom:= top+skala;
687 | end;
688 | invalidaterect(hPlanszy,RefPole,true);
689 | end;
690 | end;
691 | end;
692 | end;
693 | end;
694 | WM_LBUTTONDOWN:
695 | begin
696 | if rysuj then
697 | case war of
698 | 0,1:
699 | begin
700 | fwTempOpen($0F);
701 | if map[war,pozycja.x,pozycja.y xor $FF] <> valSelTex then
702 | begin
703 | map[war,pozycja.x,pozycja.y xor $FF]:= valSelTex;
704 | with RefPole do
705 | begin
706 | left:= (LoWord(lpar) div skala) * skala;
707 | right:= left+skala;
708 | top:= (HiWord(lpar) div skala) * skala;
709 | bottom:= top+skala;
710 | end;
711 | fwTemp(valSelTex,1+(war shl 16) + pozycja.x + (pozycja.y shl 8));
712 | invalidaterect(hPlanszy,RefPole,true);
713 | end;
714 | end;
715 |
716 | 2,4,5,6,7:
717 | begin
718 | case war of
719 | 2: fwTempOpen($0F);
720 | 4,5,6: fwTempOpen($12);
721 | 7: fwTempOpen($11);
722 | end;
723 | fillchar(sSel1,256,0);
724 | sSel1[0]:= char(getwindowtext(hSel1,@sSel1[1],getwindowtextlength(hSel1)+1));
725 | val(sSel1,dSel1,i);
726 | if dSel1 > $FF then
727 | begin
728 | dSel1:= $FF;
729 | str(dSel1,sSel1);
730 | SetWindowText(hSel1,@sSel1[1]);
731 | end;
732 | if map[war,pozycja.x,pozycja.y xor $FF] <> dSel1 then
733 | begin
734 | map[war,pozycja.x, pozycja.y xor $FF]:= dSel1;
735 | case war of
736 | 2: fwTemp(dSel1,1+(war shl 16) + pozycja.x + (pozycja.y shl 8));
737 | 4,5,6: fwTemp(dSel1,54+((pozycja.x*3)+2-(war-4))+(pozycja.y*3) shl 8);
738 | 7: fwTemp(dSel1,1082+pozycja.x+(pozycja.y shl 8));
739 | end;
740 | with RefPole do
741 | begin
742 | left:= LoWord(lpar);
743 | right:= left+skala;
744 | top:= HiWord(lpar);
745 | bottom:= top+skala;
746 | end;
747 | invalidaterect(hPlanszy,RefPole,true);
748 | end;
749 | end;
750 | end;
751 | end;
752 | WM_LBUTTONUP:
753 | closehandle(hPlik);
754 | else funkcjeplanszy:=defwindowproc(hplanszy,umsg,wpar,lpar);
755 | end;
756 | end;
757 |
758 | (***************FUNKCJE OKNA*************************************************)
759 |
760 | function FunkcjeOkna(hOkna: HWND; uMsg: UINT; wPar: WPARAM; lPar: LPARAM): LRESULT; stdcall;
761 | begin
762 | funkcjeokna := 0;
763 | case uMsg of
764 | WM_DESTROY: PostQuitMessage(0);
765 |
766 | WM_PAINT:
767 | begin
768 | hdcOkna:= beginpaint(hOkna,ps);
769 | case war of
770 | 0,1:
771 | begin
772 | showwindow(hSelTex,sw_show);
773 | showwindow(hSel1,sw_hide);
774 | end;
775 | 2,4,5,6,7:
776 | begin
777 | showwindow(hSel1,sw_show);
778 | showwindow(hSelTex,sw_hide);
779 | end;
780 | else
781 | begin
782 | showwindow(hSel1,sw_hide);
783 | showwindow(hSelTex,sw_hide);
784 | end;
785 | end;
786 |
787 | setbkmode(hdcOkna,transparent);
788 | textout(hdcOkna,5,wymiaryokna.bottom-20,bufor,length(bufor));
789 |
790 | endpaint(hOkna,ps);
791 | end;
792 |
793 | WM_CREATE:
794 | begin
795 | hdcOkna:= getdc(hOkna);
796 | GetTextMetrics(hdcOkna,@TextProp);
797 | releasedc(hOkna,hdcOkna);
798 |
799 | tempdir:=stralloc(max_path);
800 | getcurrentdirectory(max_path,tempdir);
801 | strcat(tempdir,pchar('\MuMapEditTMP'));
802 | createdirectory(tempdir,lpsecurity_attributes(0));
803 | xscroll:= getsystemmetrics(sm_cxhthumb)+getsystemmetrics(sm_cxedge);
804 | yscroll:= getsystemmetrics(sm_cyvthumb)+getsystemmetrics(sm_cyedge);
805 | getclientrect(hOkna,wymiaryokna);
806 |
807 | with wspRect do
808 | begin
809 | left:=5;
810 | right:=100;
811 | top:=wymiaryokna.bottom-20;
812 | bottom:=top + TextProp.tmHeight;
813 | end;
814 | szerPlanszy:= (wymiaryokna.right-100-xscroll) div skala;
815 | wysPlanszy:= (wymiaryokna.bottom-yscroll) div skala;
816 | hPlanszy:= CreateWindow('Plansza','',
817 | WS_CHILD or WS_VISIBLE or WS_BORDER or
818 | WS_HSCROLL or WS_VSCROLL,
819 | 100,0,
820 | wymiaryokna.right-100, wymiaryokna.bottom,
821 | hOkna,1,hInstance,nil);
822 | hSkala:= CreateWindow('COMBOBOX','',
823 | WS_CHILD or WS_VISIBLE or WS_BORDER or
824 | CBS_DROPDOWNLIST,
825 | 1,wymiaryokna.bottom-50,
826 | 98,200,
827 | hOkna,50,hInstance,nil);
828 | hWar:= CreateWindow('COMBOBOX','',
829 | WS_CHILD or WS_VISIBLE or WS_BORDER or
830 | CBS_DROPDOWNLIST,
831 | 1,wymiaryokna.bottom-80,
832 | 98,200,
833 | hOkna,100,hinstance,nil);
834 | hPrzycisk:= Createwindow('BUTTON','Rysuj',
835 | WS_CHILD or WS_VISIBLE or BS_CHECKBOX,
836 | 1,0,
837 | 98,TextProp.tmHeight+6,
838 | hOkna,150,hInstance,nil);
839 | hSelTex:= Createwindow('Seltex','',
840 | WS_CHILD or WS_BORDER,
841 | 1,20,
842 | 98,386,
843 | hOkna,2,hInstance,nil);
844 | hSel1:= Createwindow('EDIT','',
845 | WS_CHILD or WS_BORDER,
846 | 1,20,
847 | TextProp.tmMaxCharWidth*3+6,TextProp.tmHeight+6,
848 | hOkna,2,hInstance,nil);
849 |
850 | sendmessage(hSkala,cb_addstring,0,lparam(lpctstr('64x64')));
851 | sendmessage(hSkala,cb_addstring,0,lparam(lpctstr('32x32')));
852 | sendmessage(hSkala,cb_addstring,0,lparam(lpctstr('16x16')));
853 | sendmessage(hSkala,cb_addstring,0,lparam(lpctstr('8x8')));
854 | sendmessage(hSkala,cb_addstring,0,lparam(lpctstr('4x4')));
855 | sendmessage(hSkala,cb_addstring,0,lparam(lpctstr('2x2')));
856 | sendmessage(hSkala,cb_setcursel,0,0);
857 |
858 | sendmessage(hWar,cb_addstring,0,lparam(lpctstr('Tekstury1')));
859 | sendmessage(hWar,cb_addstring,0,lparam(lpctstr('Tekstury2')));
860 | sendmessage(hWar,cb_addstring,0,lparam(lpctstr('Atr teks2')));
861 | sendmessage(hWar,cb_addstring,0,lparam(lpctstr('Att')));
862 | sendmessage(hWar,cb_addstring,0,lparam(lpctstr('Swiatlo R')));
863 | sendmessage(hWar,cb_addstring,0,lparam(lpctstr('Swiatlo G')));
864 | sendmessage(hWar,cb_addstring,0,lparam(lpctstr('Swiatlo B')));
865 | sendmessage(hWar,cb_addstring,0,lparam(lpctstr('Wysokosci')));
866 | sendmessage(hWar,cb_addstring,0,lparam(lpctstr('Swiatlo RGB')));
867 | sendmessage(hWar,cb_setcursel,0,0);
868 | end;
869 |
870 | WM_SIZE:
871 | begin
872 | getwindowrect(hOkna,wymiaryokna);
873 | if wymiaryokna.bottom-wymiaryokna.top < 535 then
874 | begin
875 | setwindowpos(hOkna,hwnd_top,
876 | 0,0,
877 | wymiaryokna.right,535,
878 | swp_nomove or swp_drawframe or swp_nozorder);
879 | sendmessage(hOkna,WM_PAINT,0,0);
880 | end;
881 | getclientrect(hOkna,wymiaryokna);
882 | invalidaterect(hOkna,@wspRect,true);
883 | with wspRect do
884 | begin
885 | left:=5;
886 | right:=100;
887 | top:=wymiaryokna.bottom-20;
888 | bottom:=wymiaryokna.bottom-4;
889 | end;
890 |
891 | szerPlanszy:= (wymiaryokna.right-100-xscroll) div skala;
892 | wysPlanszy:= (wymiaryokna.bottom-yscroll) div skala;
893 | setwindowpos(hPlanszy,hwnd_top,
894 | 0,0,
895 | wymiaryokna.right-100, wymiaryokna.bottom,
896 | swp_nomove or swp_noownerzorder);
897 | setwindowpos(hSkala,hwnd_top,
898 | 1,wymiaryokna.bottom -50,
899 | 0,0,
900 | swp_nosize or swp_noownerzorder);
901 | setwindowpos(hWar,hwnd_top,
902 | 1,wymiaryokna.bottom -80,
903 | 0,0,
904 | swp_nosize or swp_noownerzorder);
905 | setscrollrange(hPlanszy,sb_horz,0,255-szerplanszy+1,true);
906 | setscrollrange(hPlanszy,sb_vert,0,255-wysplanszy+1,true);
907 | if wysplanszy > $FF then wp:=0
908 | else if wp > $FF - wysplanszy then wp:= $FF -wysplanszy+1;
909 | if szerplanszy > $FF then kp:=0
910 | else if kp > $FF - szerplanszy then kp:= $FF -szerplanszy+1;
911 | sendmessage(hOkna,WM_PAINT,0,0);
912 | end;
913 | WM_COMMAND:
914 | begin
915 | if lpar = hSkala then ////////////////////SKALA
916 | begin
917 | i:= 64 shr sendmessage(hSkala,cb_getcursel,0,0);
918 | if skala <> i then
919 | begin
920 | skala:= i;
921 | szerPlanszy:= (wymiaryokna.right-100-xscroll) div skala;
922 | wysPlanszy:= (wymiaryokna.bottom-yscroll) div skala;
923 | setscrollrange(hPlanszy,sb_horz,0,255-szerplanszy+1,true);
924 | setscrollrange(hPlanszy,sb_vert,0,255-wysplanszy+1,true);
925 | if wysplanszy > $FF then wp:=0
926 | else if wp > $FF - wysplanszy then wp:= $FF -wysplanszy+1;
927 | if szerplanszy > $FF then kp:=0
928 | else if kp > $FF - szerplanszy then kp:= $FF -szerplanszy+1;
929 | for i:= $00 to $0E do
930 | loadtex(i,'');
931 |
932 | invalidaterect(hPlanszy,lprect(0),true);
933 | end;
934 | end
935 |
936 | else if lpar =hWar then /////////////WARSTWY
937 | begin
938 | i:=sendmessage(hWar,cb_getcursel,0,0);
939 | if i <> war then
940 | begin
941 | war:= i;
942 | sendmessage(hPlanszy,WM_PAINT,0,0);
943 | sendmessage(hOkna,WM_PAINT,0,0);
944 | end;
945 | end
946 |
947 | else if lpar =hPrzycisk then ///////////'RYSUJ' BUTTON
948 | begin
949 | if IsDlgButtonChecked(hOkna,150) = bst_checked then
950 | begin
951 | checkdlgbutton(hOkna,150,bst_unchecked);
952 | rysuj:=false;
953 | end
954 | else
955 | begin
956 | checkdlgbutton(hOkna,150,bst_checked);
957 | rysuj:=true;
958 | end;
959 | end
960 |
961 | else
962 | case loword(wpar) of
963 | 101: ///////////////////////MAP READ
964 | begin
965 | PrepOpen(pchar('Pliki map'#00'*.map'#00),'map');
966 | if GetOpenFileName(@otworz) then
967 | frOpen(pchar(FilePath),$0F);
968 | AttMapRead(0,2,1);
969 | end;
970 | 102: //////////////ATT READ
971 | begin
972 | PrepOpen(pchar('Pliki att'#00'*.att'#00),'att');
973 | if getopenfilename(@otworz) then
974 | frOpen(pchar(FilePath),$10);
975 | AttMapRead(3,3,3);
976 | end;
977 | 103: /////////////////LIGHT READ
978 | begin
979 | PrepOpen(pchar('Pliki bmp'#00'*.bmp'#00),'bmp');
980 | if getopenfilename(@otworz) then
981 | frOpen(pchar(FilePath),$12);
982 | LightRead(4,6);
983 | end;
984 | 104: ////////////////HEIGHT READ
985 | begin
986 | PrepOpen(pchar('Pliki ozb'#00'*.ozb'#00),'ozb');
987 | if getopenfilename(@otworz) then
988 | frOpen(pchar(FilePath),$11);
989 | HeightRead(7);
990 |
991 | end;
992 | 112..126: ///////////////SINGLE TEX READ
993 | begin
994 | PrepOpen(pchar('Pliki bmp'#00'*.bmp'#00),'bmp');
995 | if getopenfilename(@otworz) then
996 | begin
997 | LoadTex(loword(wpar)-112,pchar(FilePath));
998 | sendmessage(hSelTex,WM_PAINT,0,0);
999 | sendmessage(hPlanszy,WM_PAINT,0,0);
1000 | end;
1001 | end;
1002 | 127: ///////////////ALL TEX READ
1003 | begin
1004 | folder.hwndOwner:= hOkna;
1005 | if SHGetPathFromIdList(SHBrowseForFolder(@folder),WorldPath) then
1006 | begin
1007 | for i:=$0 to $0D do
1008 | begin
1009 | strcopy(FilePath,WorldPath);
1010 | strcat(FilePath,nazwy[i]);
1011 | LoadTex(i,FilePath);
1012 | end;
1013 | sendmessage(hSelTex,WM_PAINT,0,0);
1014 | sendmessage(hPlanszy,WM_PAINT,0,0);
1015 | end;
1016 |
1017 | end;
1018 | 105: //////////////ALL READ
1019 | begin
1020 | folder.hwndOwner:= hOkna;
1021 | if SHGetPathFromIdList(SHBrowseForFolder(@folder),WorldPath) then
1022 | begin
1023 | strcopy(FilePath,WorldPath);
1024 | strcat(FilePath,'\*.map');
1025 | FindFirstFile(FilePath,znaleziony); //*.MAP
1026 | strcopy(FilePath,WorldPath);
1027 | strcat(FilePath,'\');
1028 | strcat(FilePath,znaleziony.cfilename);
1029 | frOpen(FilePath,$0F);
1030 | AttMapRead(0,2,1);
1031 |
1032 | strcopy(FilePath,WorldPath);
1033 | strcat(FilePath,'\*.att');
1034 | FindFirstFile(FilePath,znaleziony); //*.ATT
1035 | strcopy(FilePath,WorldPath);
1036 | strcat(FilePath,'\');
1037 | strcat(FilePath,znaleziony.cfilename);
1038 | frOpen(FilePath,$10);
1039 | AttMapRead(3,3,3);
1040 |
1041 | strcopy(FilePath,WorldPath);
1042 | strcat(FilePath,'\Terrainlight.bmp'); //TERRAINLIGHT.BMP
1043 | frOpen(FilePath,$12);
1044 | LightRead(4,6);
1045 |
1046 | strcopy(FilePath,WorldPath);
1047 | strcat(FilePath,nazwy[$11]); //TERRAINHEIGHT.OZB
1048 | frOpen(FilePath,$11);
1049 | HeightRead(7);
1050 |
1051 | for i:=$0 to $0D do
1052 | begin
1053 | strcopy(FilePath,WorldPath);
1054 | strcat(FilePath,nazwy[i]); //TEKSTURY
1055 | LoadTex(i,FilePath);
1056 | end;
1057 | sendmessage(hSelTex,WM_PAINT,0,0);
1058 | sendmessage(hPlanszy,WM_PAINT,0,0);
1059 | end;
1060 | end;
1061 | 106: //////////////MAP SAVE
1062 | begin
1063 | PrepSave(pchar('Pliki map'#00'*.map'#00),'map');
1064 | if getsavefilename(@zapisz) then
1065 | AttMapSave(0,2,filepath,#00);
1066 | end;
1067 | 107: //////////////ATT SAVE
1068 | begin
1069 | PrepSave(pchar('Pliki att'#00'*.att'#00),'att');
1070 | if getsavefilename(@zapisz) then
1071 | AttMapSave(3,3,filepath,#00#255#255);
1072 | end;
1073 | 108: /////////////LIGHT SAVE
1074 | begin
1075 | PrepSave(pchar('Pliki bmp'#00'*.bmp'#00),'bmp');
1076 | if getsavefilename(@zapisz) then
1077 | BmpWrite(4,6,filepath);
1078 | end;
1079 | 109: /////////////HEIGT SAVE
1080 | begin
1081 | PrepSave(pchar('Pliki ozb'#00'*.ozb'#00),'ozb');
1082 | if getsavefilename(@zapisz) then
1083 | BmpWrite(7,7,filepath);
1084 | end;
1085 | 110: /////////////ALL SAVE
1086 | begin
1087 | folder.hwndOwner:= hOkna;
1088 | if SHGetPathFromIdList(SHBrowseForFolder(@folder),WorldPath) then
1089 | begin
1090 | strcopy(FilePath,WorldPath);
1091 | strcat(FilePath,nazwy[$0F]); //MAP
1092 | AttMapSave(0,2,filepath,#00);
1093 |
1094 | strcopy(FilePath,WorldPath);
1095 | strcat(FilePath,nazwy[$10]); //ATT
1096 | AttMapSave(0,2,filepath,#00);
1097 |
1098 | strcopy(FilePath,WorldPath);
1099 | strcat(FilePath,nazwy[$12]); //LIGHT
1100 | BmpWrite(4,6,filepath);
1101 |
1102 | strcopy(FilePath,WorldPath);
1103 | strcat(FilePath,nazwy[$11]); //HEIGHT
1104 | BmpWrite(7,7,filepath);
1105 | end;
1106 | end;
1107 | 128: ///////////SESSION LOAD
1108 | begin
1109 | for i:= 0 to 14 do
1110 | loadtex(i,'');
1111 | frOpen('',$0F);
1112 | AttMapRead(0,2,1);
1113 | frOpen('',$10);
1114 | AttMapRead(3,3,3);
1115 | frOpen('',$11);
1116 | HeightRead(7);
1117 | frOpen('',$12);
1118 | LightRead(4,6);
1119 | sendmessage(hSelTex,WM_PAINT,0,0);
1120 | end;
1121 | 111: //////////EXIT
1122 | begin
1123 | postquitmessage(0);
1124 | end;
1125 | end;
1126 | end;
1127 | else funkcjeokna := DefWindowProc(hOkna, uMsg, wPar, lPar);
1128 | end;
1129 | end;
1130 |
1131 | BEGIN
1132 | with Wnd do
1133 | begin
1134 | lpfnWndProc := @FunkcjeOkna;
1135 | hInstance := hInstance;
1136 | lpszClassName := 'Glowne';
1137 | hbrBackground := COLOR_WINDOW;
1138 | hcursor:= loadcursor(0,idc_arrow);
1139 | end;
1140 |
1141 | with plansza do
1142 | begin
1143 | style:= cs_bytealignclient;
1144 | lpfnWndProc:= @FunkcjePlanszy;
1145 | hInstance:= hInstance;
1146 | lpszClassName:= 'Plansza';
1147 | hbrBackground:= color_window;
1148 | hcursor:= loadcursor(0,idc_arrow);
1149 | end;
1150 |
1151 | with seltex do
1152 | begin
1153 | style:= cs_bytealignclient;
1154 | lpfnWndProc:= @FunkcjeSelTex;
1155 | hInstance:= hInstance;
1156 | lpszClassName:= 'Seltex';
1157 | hbrBackground:= color_window;
1158 | hcursor:= loadcursor(0,idc_arrow);
1159 | end;
1160 |
1161 | RegisterClass(Wnd); // zarejestruj nowa klase
1162 | RegisterClass(plansza);
1163 | RegisterClass(seltex);
1164 |
1165 | // stworz forme...
1166 | BelkaMenu:= Loadmenu(hinstance,makeintresource(200));
1167 | hOkna:= CreateWindow('glowne', 'MuMapEdit Alpha 8',
1168 | WS_VISIBLE or WS_TILEDWINDOW,
1169 | 20, 20, cw_usedefault, cw_usedefault,
1170 | 0, BelkaMenu, hInstance, NIL);
1171 |
1172 | tekstury[$0].substc:= $006400;
1173 | tekstury[$1].substc:= $00AF00;
1174 | tekstury[$2].substc:= $004B96;
1175 | tekstury[$3].substc:= $317DC8;
1176 | tekstury[$4].substc:= $64AFFA;
1177 | tekstury[$5].substc:= $FF0000;
1178 | tekstury[$6].substc:= $00FFFF;
1179 | tekstury[$7].substc:= $5E5E5E;
1180 | tekstury[$8].substc:= $757575;
1181 | tekstury[$9].substc:= $8C8C8C;
1182 | tekstury[$A].substc:= $A3A3A3;
1183 | tekstury[$B].substc:= $BABABA;
1184 | tekstury[$C].substc:= $D1D1D1;
1185 | tekstury[$D].substc:= $E8E8E8;
1186 | tekstury[$E].substc:= $000000;
1187 |
1188 | while GetMessage(msg, 0, 0, 0) do
1189 | begin
1190 | TranslateMessage(msg);
1191 | DispatchMessage(msg);
1192 | end;
1193 | END.
1194 |
--------------------------------------------------------------------------------
/MuBmd/0.74_fixed/Item.txt:
--------------------------------------------------------------------------------
1 | // ------------------
2 | // BMD exported by
3 | // KaiN client toolz
4 | // ------------------
5 |
6 | 0
7 | // Idx Name Hands Lvl X Y DmgMin DmgMax DefRate Def unk10 att/swSpeed walkSpeed Dur reqSTR reqAGI reqENE reqLVL Value DW DK Elf MG resIce resPoison resLightning resFire
8 | 0 Kris 0 6 1 2 6 9 0 0 0 50 0 1 4 4 0 0 0 1 1 1 1 0 0 0 0
9 | 1 Short Sword 0 3 1 3 3 5 0 0 0 20 0 1 6 0 0 0 0 1 1 1 1 0 0 0 0
10 | 2 Rapier 0 9 1 3 9 10 0 0 0 40 0 2 5 4 0 0 0 0 1 1 1 0 0 0 0
11 | 3 Katana 0 16 1 3 16 18 0 0 0 35 0 2 8 4 0 0 0 0 1 0 1 0 0 0 0
12 | 4 Sword of Assassin 0 12 1 3 12 20 0 0 0 30 0 2 6 4 0 0 0 0 1 0 1 0 0 0 0
13 | 5 Blade 0 36 1 3 36 40 0 0 0 30 0 2 8 5 0 0 0 1 1 1 1 0 0 0 0
14 | 6 Gladius 0 20 1 3 20 24 0 0 0 20 0 3 11 0 0 0 0 0 1 1 1 0 0 0 0
15 | 7 Falchion 0 24 1 3 24 30 0 0 0 25 0 3 12 0 0 0 0 0 1 0 1 0 0 0 0
16 | 8 Serpent Sword 0 28 1 3 28 36 0 0 0 20 0 2 13 0 0 0 0 0 1 0 1 0 0 0 0
17 | 9 Sword of Salamander 1 32 2 3 32 52 0 0 0 30 0 3 13 0 0 0 0 0 1 0 1 0 0 0 0
18 | 10 Light Saber 1 40 2 4 40 60 0 0 0 25 0 4 8 6 0 0 0 0 1 1 1 0 0 0 0
19 | 11 Legendary Sword 1 44 2 3 44 69 0 0 0 20 0 3 12 0 0 0 0 0 1 0 1 0 0 0 0
20 | 12 Heliacal Sword 1 56 2 3 56 86 0 0 0 25 0 4 14 0 0 0 0 0 1 0 1 0 0 0 0
21 | 13 Double Blade 0 48 1 3 48 52 0 0 0 30 0 4 7 7 0 0 0 0 1 1 1 0 0 0 0
22 | 14 Lightning Sword 0 59 1 3 59 64 0 0 0 30 0 3 9 5 0 0 0 0 1 1 1 0 0 0 0
23 | 15 Giant Sword 1 52 2 3 52 84 0 0 0 20 0 3 14 0 0 0 0 0 1 0 1 0 0 0 0
24 | end
25 |
26 | 1
27 | // Idx Name Hands Lvl X Y DmgMin DmgMax DefRate Def unk10 att/swSpeed walkSpeed Dur reqSTR reqAGI reqENE reqLVL Value DW DK Elf MG resIce resPoison resLightning resFire
28 | 0 Small Axe 0 1 1 3 1 6 0 0 0 20 0 1 5 0 0 0 0 1 1 1 1 0 0 0 0
29 | 1 Hand Axe 0 4 1 3 4 9 0 0 0 30 0 1 7 0 0 0 0 1 1 1 1 0 0 0 0
30 | 2 Double Axe 0 14 1 3 14 20 0 0 0 20 0 1 9 0 0 0 0 0 1 0 1 0 0 0 0
31 | 3 Tomahawk 0 18 1 3 18 24 0 0 0 30 0 2 10 0 0 0 0 0 1 0 1 0 0 0 0
32 | 4 Elven Axe 0 26 1 3 26 36 0 0 0 40 0 2 5 7 0 0 0 1 0 1 1 0 0 0 0
33 | 5 Battle Axe 1 30 2 3 30 50 0 0 0 20 0 2 12 0 0 0 0 0 1 1 1 0 0 0 0
34 | 6 Nikea Axe 1 34 2 3 34 56 0 0 0 30 0 2 13 0 0 0 0 0 1 1 1 0 0 0 0
35 | 7 Larkan Axe 1 44 2 3 44 72 0 0 0 25 0 3 14 0 0 0 0 0 1 0 1 0 0 0 0
36 | 8 Crescent Axe 1 53 2 3 53 82 0 0 0 30 0 3 10 4 0 0 0 1 1 0 1 0 0 0 0
37 | 9 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
38 | 10 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
39 | 11 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
40 | 12 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
41 | 13 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
42 | 14 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
43 | 15 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
44 | end
45 |
46 | 2
47 | // Idx Name Hands Lvl X Y DmgMin DmgMax DefRate Def unk10 att/swSpeed walkSpeed Dur reqSTR reqAGI reqENE reqLVL Value DW DK Elf MG resIce resPoison resLightning resFire
48 | 0 Mace 0 7 1 3 7 14 0 0 0 15 0 1 10 0 0 0 0 0 1 0 1 0 0 0 0
49 | 1 Morning Star 0 13 1 3 13 26 0 0 0 15 0 1 10 0 0 0 0 0 1 0 1 0 0 0 0
50 | 2 Flail 0 22 1 3 22 44 0 0 0 15 0 2 8 5 0 0 0 0 1 0 1 0 0 0 0
51 | 3 Warhammer 1 38 2 3 38 74 0 0 0 15 0 2 15 0 0 0 0 0 1 0 1 0 0 0 0
52 | 4 Crystal Morning Star 1 66 2 3 66 90 0 0 0 30 0 3 13 0 0 0 0 1 1 1 1 0 0 0 0
53 | 5 Crystal Sword 1 72 2 4 72 110 0 0 0 40 0 3 13 7 0 0 0 1 1 1 1 0 0 0 0
54 | 6 Chaos Dragon Axe 1 75 2 4 75 120 0 0 0 35 0 3 14 5 0 0 0 0 1 0 1 0 0 0 0
55 | 7 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
56 | 8 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
57 | 9 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
58 | 10 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
59 | 11 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
60 | 12 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
61 | 13 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
62 | 14 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
63 | 15 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
64 | end
65 |
66 | 3
67 | // Idx Name Hands Lvl X Y DmgMin DmgMax DefRate Def unk10 att/swSpeed walkSpeed Dur reqSTR reqAGI reqENE reqLVL Value DW DK Elf MG resIce resPoison resLightning resFire
68 | 0 Light Spear 1 42 2 4 42 54 0 0 0 25 0 2 6 7 0 0 0 0 1 1 1 0 0 0 0
69 | 1 Spear 1 23 2 4 23 34 0 0 0 30 0 4 7 5 0 0 0 0 1 1 1 0 0 0 0
70 | 2 Dragon Lance 1 15 2 4 15 28 0 0 0 30 0 3 7 5 0 0 0 0 1 1 1 0 0 0 0
71 | 3 Great Trident 1 29 2 4 29 40 0 0 0 25 0 3 9 3 0 0 0 0 1 1 1 0 0 0 0
72 | 4 Serpent Spear 1 46 2 4 46 64 0 0 0 20 0 2 9 3 0 0 0 0 1 1 1 0 0 0 0
73 | 5 Double Poleaxe 1 13 2 4 13 25 0 0 0 30 0 2 7 5 0 0 0 0 1 1 1 0 0 0 0
74 | 6 Halberd 1 19 2 4 19 32 0 0 0 30 0 3 7 5 0 0 0 0 1 1 1 0 0 0 0
75 | 7 Berdysh 1 37 2 4 37 46 0 0 0 30 0 4 8 5 0 0 0 0 1 1 1 0 0 0 0
76 | 8 Great Scythe 1 54 2 4 54 78 0 0 0 20 0 2 9 5 0 0 0 0 1 1 1 0 0 0 0
77 | 9 Bill of Balrog 1 63 2 4 63 90 0 0 0 20 0 2 8 5 0 0 0 0 1 1 1 0 0 0 0
78 | 10 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
79 | 11 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
80 | 12 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
81 | 13 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
82 | 14 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
83 | 15 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
84 | end
85 |
86 | 4
87 | // Idx Name Hands Lvl X Y DmgMin DmgMax DefRate Def unk10 att/swSpeed walkSpeed Dur reqSTR reqAGI reqENE reqLVL Value DW DK Elf MG resIce resPoison resLightning resFire
88 | 0 Short Bow 1 2 2 3 2 5 0 0 0 30 0 2 2 8 0 0 0 0 0 1 0 0 0 0 0
89 | 1 Bow 1 8 2 3 8 15 0 0 0 30 0 2 3 9 0 0 0 0 0 1 0 0 0 0 0
90 | 2 Elven Bow 1 16 2 3 16 24 0 0 0 30 0 3 3 9 0 0 0 0 0 1 0 0 0 0 0
91 | 3 Battle Bow 1 26 2 3 26 35 0 0 0 30 0 2 3 9 0 0 0 0 0 1 0 0 0 0 0
92 | 4 Tiger Bow 1 40 2 4 40 50 0 0 0 30 0 2 3 10 0 0 0 0 0 1 0 0 0 0 0
93 | 5 Silver Bow 1 56 2 4 56 68 0 0 0 40 0 2 3 10 0 0 0 0 0 1 0 0 0 0 0
94 | 6 Chaos Nature Bow 1 75 2 4 75 94 0 0 0 35 0 2 4 15 0 0 0 0 0 1 0 0 0 0 0
95 | 7 Bolt 0 0 1 2 0 0 0 0 0 0 0 250 0 0 0 0 0 0 0 1 0 0 0 0 0
96 | 8 Crossbow 1 4 2 2 4 8 0 0 0 40 0 2 2 9 0 0 0 0 0 1 0 0 0 0 0
97 | 9 Golden Crossbow 1 12 2 2 12 17 0 0 0 40 0 3 3 9 0 0 0 0 0 1 0 0 0 0 0
98 | 10 Arquebus 1 20 2 2 20 26 0 0 0 40 0 2 3 9 0 0 0 0 0 1 0 0 0 0 0
99 | 11 Crossbow of Light 1 32 2 3 32 40 0 0 0 40 0 3 3 9 0 0 0 0 0 1 0 0 0 0 0
100 | 12 Serpent Crossbow 1 48 2 3 48 56 0 0 0 40 0 2 3 10 0 0 0 0 0 1 0 0 0 0 0
101 | 13 Blue Wing Crossbow 1 68 2 3 68 80 0 0 0 40 0 2 4 11 0 0 0 0 0 1 0 0 0 0 0
102 | 14 Aqua Gold Crossbow 1 72 2 3 72 90 0 0 0 30 0 2 5 13 0 0 0 0 0 1 0 0 0 0 0
103 | 15 Arrows 0 0 1 2 0 0 0 0 0 0 0 250 0 0 0 0 0 0 0 1 0 0 0 0 0
104 | end
105 |
106 | 5
107 | // Idx Name Hands Lvl X Y DmgMin DmgMax DefRate Def unk10 att/swSpeed walkSpeed Dur reqSTR reqAGI reqENE reqLVL Value DW DK Elf MG resIce resPoison resLightning resFire
108 | 0 Skull Staff 0 6 1 3 6 8 0 0 0 20 0 2 4 0 0 0 0 1 0 0 1 0 0 0 0
109 | 1 Angelic Staff 1 18 2 3 18 20 0 0 0 20 0 3 5 0 0 0 0 1 0 0 1 0 0 0 0
110 | 2 Serpent Staff 1 30 2 3 30 32 0 0 0 20 0 3 5 0 0 0 0 1 0 0 1 0 0 0 0
111 | 3 Thunder Staff 1 42 2 4 42 44 0 0 0 20 0 4 4 1 0 0 0 1 0 0 1 0 0 0 0
112 | 4 Staff of Gorgon 1 52 2 4 52 54 0 0 0 20 0 4 5 0 0 0 0 1 0 0 1 0 0 0 0
113 | 5 Legendary Staff 0 59 1 4 59 62 0 0 0 20 0 4 5 0 0 0 0 1 0 0 1 0 0 0 0
114 | 6 Staff of Resurrection 0 70 1 4 70 78 0 0 0 20 0 4 6 1 0 0 0 1 0 0 1 0 0 0 0
115 | 7 Chaos Lightning Staff 1 75 2 4 75 80 0 0 0 20 0 4 6 1 0 0 0 1 0 0 1 0 0 0 0
116 | 8 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117 | 9 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118 | 10 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119 | 11 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120 | 12 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121 | 13 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122 | 14 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123 | 15 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124 | end
125 |
126 | 6
127 | // Idx Name Hands Lvl X Y DmgMin DmgMax DefRate Def unk10 att/swSpeed walkSpeed Dur reqSTR reqAGI reqENE reqLVL Value DW DK Elf MG resIce resPoison resLightning resFire
128 | 0 Light Plate Shield 0 3 2 2 0 0 3 1 0 0 0 2 7 0 0 0 0 1 1 1 1 0 0 0 0
129 | 1 Horn Shield 0 9 2 2 0 0 9 3 0 0 0 2 10 0 0 0 0 0 1 0 1 0 0 0 0
130 | 2 Kite Shield 0 12 2 2 0 0 12 4 0 0 0 2 11 0 0 0 0 0 1 0 1 0 0 0 0
131 | 3 Elven Shield 0 21 2 2 0 0 21 8 0 0 0 2 3 10 0 0 0 0 0 1 1 0 0 0 0
132 | 4 Buckler 0 6 2 2 0 0 6 2 0 0 0 2 8 0 0 0 0 1 1 1 1 0 0 0 0
133 | 5 Shield of Dragon Slayer 0 35 2 2 0 0 35 10 0 0 0 3 10 4 0 0 0 0 1 0 1 0 0 0 0
134 | 6 Skull Shield 0 15 2 2 0 0 15 5 0 0 0 2 11 0 0 0 0 1 1 1 1 0 0 0 0
135 | 7 Spiked Shield 0 30 2 2 0 0 30 9 0 0 0 2 13 0 0 0 0 0 1 0 1 0 0 0 0
136 | 8 Tower Shield 0 40 2 2 0 0 40 11 0 0 0 3 13 0 0 0 0 0 1 1 1 0 0 0 0
137 | 9 Plate Shield 0 25 2 2 0 0 25 8 0 0 0 3 12 0 0 0 0 0 1 0 1 0 0 0 0
138 | 10 Large Round Shield 0 18 2 2 0 0 18 6 0 0 0 4 12 0 0 0 0 0 1 0 1 0 0 0 0
139 | 11 Serpent Shield 0 45 2 2 0 0 45 12 0 0 0 3 13 0 0 0 0 0 1 1 1 0 0 0 0
140 | 12 Bronze Shield 0 54 2 2 0 0 54 13 0 0 0 3 14 0 0 0 0 0 1 0 1 0 0 0 0
141 | 13 Dragon Shield 0 60 2 2 0 0 60 14 0 0 0 3 12 4 0 0 0 0 1 0 1 0 0 0 0
142 | 14 Legendary Shield 0 48 2 3 0 0 48 7 0 0 0 3 10 3 0 0 0 1 0 1 1 0 0 0 0
143 | 15 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
144 | end
145 |
146 | 7
147 | // Idx Name Hands Lvl X Y DmgMin DmgMax DefRate Def unk10 att/swSpeed walkSpeed Dur reqSTR reqAGI reqENE reqLVL Value DW DK Elf MG resIce resPoison resLightning resFire
148 | 0 Bronze Helm 0 16 2 2 0 0 0 9 0 0 0 4 8 2 0 0 0 0 1 0 0 0 0 0 0
149 | 1 Dragon Helm 0 57 2 2 0 0 0 24 0 0 0 3 12 3 0 0 0 0 1 0 0 0 0 0 0
150 | 2 Pad Helm 0 5 2 2 0 0 0 4 0 0 0 1 2 0 0 0 0 1 0 0 0 0 0 0 0
151 | 3 Legendary Helm 0 50 2 2 0 0 0 18 0 0 0 3 3 0 0 0 0 1 0 0 0 0 0 0 0
152 | 4 Bone Helm 0 18 2 2 0 0 0 9 0 0 0 0 3 0 0 0 0 1 0 0 0 0 0 0 0
153 | 5 Leather Helm 0 6 2 2 0 0 0 5 0 0 0 2 8 0 0 0 0 0 1 0 0 0 0 0 0
154 | 6 Scale Helm 0 26 2 2 0 0 0 12 0 0 0 3 11 0 0 0 0 0 1 0 0 0 0 0 0
155 | 7 Sphinx Helm 0 32 2 2 0 0 0 13 0 0 0 4 3 0 0 0 0 1 0 0 0 0 0 0 0
156 | 8 Brass Helm 0 36 2 2 0 0 0 17 0 0 0 2 10 3 0 0 0 0 1 0 0 0 0 0 0
157 | 9 Plate Helm 0 46 2 2 0 0 0 20 0 0 0 2 13 0 0 0 0 0 1 0 0 0 0 0 0
158 | 10 Vine Helm 0 6 2 2 0 0 0 4 0 0 0 3 3 6 0 0 0 0 0 1 0 0 0 0 0
159 | 11 Silk Helm 0 16 2 2 0 0 0 8 0 0 0 3 3 7 0 0 0 0 0 1 0 0 0 0 0
160 | 12 Helm of Wind 0 28 2 2 0 0 0 12 0 0 0 3 3 8 0 0 0 0 0 1 0 0 0 0 0
161 | 13 Helm of Spirit 0 40 2 2 0 0 0 16 0 0 0 3 4 8 0 0 0 0 0 1 0 0 0 0 0
162 | 14 Helm of Guardian 0 53 2 2 0 0 0 20 0 0 0 3 4 8 0 0 0 0 0 1 0 0 0 0 0
163 | 15 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
164 | end
165 |
166 | 8
167 | // Idx Name Hands Lvl X Y DmgMin DmgMax DefRate Def unk10 att/swSpeed walkSpeed Dur reqSTR reqAGI reqENE reqLVL Value DW DK Elf MG resIce resPoison resLightning resFire
168 | 0 Bronze Armor 0 18 2 2 0 0 0 14 0 0 0 4 8 2 0 0 0 0 1 0 1 0 0 0 0
169 | 1 Dragon Armor 0 59 2 3 0 0 0 37 0 0 0 3 12 3 0 0 0 0 1 0 1 0 0 0 0
170 | 2 Pad Armor 0 10 2 2 0 0 0 7 0 0 0 2 3 0 0 0 0 1 0 0 1 0 0 0 0
171 | 3 Legendary Armor 0 56 2 2 0 0 0 22 0 0 0 3 4 0 0 0 0 1 0 0 1 0 0 0 0
172 | 4 Bone Armor 0 22 2 2 0 0 0 13 0 0 0 2 4 0 0 0 0 1 0 0 1 0 0 0 0
173 | 5 Leather Armor 0 10 2 3 0 0 0 10 0 0 0 2 8 0 0 0 0 0 1 0 1 0 0 0 0
174 | 6 Scale Armor 0 28 2 2 0 0 0 18 0 0 0 3 11 0 0 0 0 0 1 0 1 0 0 0 0
175 | 7 Sphinx Armor 0 38 2 3 0 0 0 17 0 0 0 4 4 0 0 0 0 1 0 0 1 0 0 0 0
176 | 8 Brass Armor 0 38 2 2 0 0 0 22 0 0 0 2 10 3 0 0 0 0 1 0 1 0 0 0 0
177 | 9 Plate Armor 0 48 2 2 0 0 0 30 0 0 0 2 13 0 0 0 0 0 1 0 1 0 0 0 0
178 | 10 Vine Armor 0 10 2 2 0 0 0 8 0 0 0 3 3 6 0 0 0 0 0 1 0 0 0 0 0
179 | 11 Silk Armor 0 20 2 2 0 0 0 12 0 0 0 3 3 7 0 0 0 0 0 1 0 0 0 0 0
180 | 12 Armor of Wind 0 32 2 2 0 0 0 16 0 0 0 3 3 8 0 0 0 0 0 1 0 0 0 0 0
181 | 13 Armor of Spirit 0 44 2 2 0 0 0 21 0 0 0 3 4 8 0 0 0 0 0 1 0 0 0 0 0
182 | 14 Armor of Guardian 0 57 2 3 0 0 0 26 0 0 0 3 4 8 0 0 0 0 0 1 0 0 0 0 0
183 | 15 Armor of Storm crow 0 76 2 3 0 0 0 42 0 0 0 3 15 7 0 0 0 0 0 0 1 0 0 0 0
184 | end
185 |
186 | 9
187 | // Idx Name Hands Lvl X Y DmgMin DmgMax DefRate Def unk10 att/swSpeed walkSpeed Dur reqSTR reqAGI reqENE reqLVL Value DW DK Elf MG resIce resPoison resLightning resFire
188 | 0 Bronze Pants 0 15 2 2 0 0 0 10 0 0 0 4 8 2 0 0 0 0 1 0 1 0 0 0 0
189 | 1 Dragon Pants 0 55 2 2 0 0 0 26 0 0 0 3 12 3 0 0 0 0 1 0 1 0 0 0 0
190 | 2 Pad Pants 0 8 2 2 0 0 0 5 0 0 0 1 3 0 0 0 0 1 0 0 1 0 0 0 0
191 | 3 Legendary Pants 0 53 2 2 0 0 0 20 0 0 0 3 4 0 0 0 0 1 0 0 1 0 0 0 0
192 | 4 Bone Pants 0 20 2 2 0 0 0 10 0 0 0 0 4 0 0 0 0 1 0 0 1 0 0 0 0
193 | 5 Leather Pants 0 8 2 2 0 0 0 7 0 0 0 2 8 0 0 0 0 0 1 0 1 0 0 0 0
194 | 6 Scale Pants 0 25 2 2 0 0 0 14 0 0 0 3 11 0 0 0 0 0 1 0 1 0 0 0 0
195 | 7 Sphinx Pants 0 34 2 2 0 0 0 15 0 0 0 4 4 0 0 0 0 1 0 0 1 0 0 0 0
196 | 8 Brass Pants 0 35 2 2 0 0 0 18 0 0 0 2 10 3 0 0 0 0 1 0 1 0 0 0 0
197 | 9 Plate Pants 0 45 2 2 0 0 0 22 0 0 0 2 13 0 0 0 0 0 1 0 1 0 0 0 0
198 | 10 Vine Pants 0 8 2 2 0 0 0 6 0 0 0 3 3 6 0 0 0 0 0 1 0 0 0 0 0
199 | 11 Silk Pants 0 18 2 2 0 0 0 10 0 0 0 3 3 7 0 0 0 0 0 1 0 0 0 0 0
200 | 12 Pants of Wind 0 30 2 2 0 0 0 14 0 0 0 3 3 8 0 0 0 0 0 1 0 0 0 0 0
201 | 13 Pants of Spirit 0 42 2 2 0 0 0 18 0 0 0 3 4 8 0 0 0 0 0 1 0 0 0 0 0
202 | 14 Pants of Guardian 0 54 2 2 0 0 0 22 0 0 0 3 4 8 0 0 0 0 0 1 0 0 0 0 0
203 | 15 Pants of Storm crow 0 74 2 2 0 0 0 32 0 0 0 3 15 7 0 0 0 0 0 0 1 0 0 0 0
204 | end
205 |
206 | 10
207 | // Idx Name Hands Lvl X Y DmgMin DmgMax DefRate Def unk10 att/swSpeed walkSpeed Dur reqSTR reqAGI reqENE reqLVL Value DW DK Elf MG resIce resPoison resLightning resFire
208 | 0 Bronze Gauntlets 0 12 2 2 0 0 0 4 0 4 0 4 8 2 0 0 0 0 1 0 1 0 0 0 0
209 | 1 Dragon Gauntlets 0 52 2 2 0 0 0 14 0 6 0 3 12 3 0 0 0 0 1 0 1 0 0 0 0
210 | 2 Pad Gloves 0 3 2 2 0 0 0 2 0 0 0 1 2 0 0 0 0 1 0 0 1 0 0 0 0
211 | 3 Legendary Gauntlets 0 44 2 2 0 0 0 11 0 0 0 3 2 0 0 0 0 1 0 0 1 0 0 0 0
212 | 4 Bone Gloves 0 14 2 2 0 0 0 5 0 0 0 0 2 0 0 0 0 1 0 0 1 0 0 0 0
213 | 5 Leather Gloves 0 4 2 2 0 0 0 2 0 8 0 2 8 0 0 0 0 0 1 0 1 0 0 0 0
214 | 6 Scale Gauntlets 0 22 2 2 0 0 0 7 0 10 0 3 11 0 0 0 0 0 1 0 1 0 0 0 0
215 | 7 Sphinx Gauntlets 0 28 2 2 0 0 0 8 0 0 0 4 2 0 0 0 0 1 0 0 1 0 0 0 0
216 | 8 Brass Gauntlets 0 32 2 2 0 0 0 9 0 8 0 2 10 3 0 0 0 0 1 0 1 0 0 0 0
217 | 9 Plate Gauntlets 0 42 2 2 0 0 0 12 0 4 0 2 13 0 0 0 0 0 1 0 1 0 0 0 0
218 | 10 Vine Gloves 0 4 2 2 0 0 0 2 0 4 0 3 3 6 0 0 0 0 0 1 0 0 0 0 0
219 | 11 Silk Gloves 0 14 2 2 0 0 0 4 0 8 0 3 3 7 0 0 0 0 0 1 0 0 0 0 0
220 | 12 Gauntlets of Wind 0 26 2 2 0 0 0 6 0 10 0 3 3 8 0 0 0 0 0 1 0 0 0 0 0
221 | 13 Gauntlets of Spirit 0 38 2 2 0 0 0 9 0 4 0 3 4 8 0 0 0 0 0 1 0 0 0 0 0
222 | 14 Gauntlets of Guardian 0 50 2 2 0 0 0 12 0 6 0 3 4 8 0 0 0 0 0 1 0 0 0 0 0
223 | 15 Gauntlets of Storm crow 0 70 2 2 0 0 0 18 0 6 0 3 15 7 0 0 0 0 0 0 1 0 0 0 0
224 | end
225 |
226 | 11
227 | // Idx Name Hands Lvl X Y DmgMin DmgMax DefRate Def unk10 att/swSpeed walkSpeed Dur reqSTR reqAGI reqENE reqLVL Value DW DK Elf MG resIce resPoison resLightning resFire
228 | 0 Bronze Boots 0 12 2 2 0 0 0 4 0 0 10 4 8 2 0 0 0 0 1 0 1 0 0 0 0
229 | 1 Dragon Boots 0 54 2 2 0 0 0 15 0 0 2 3 12 3 0 0 0 0 1 0 1 0 0 0 0
230 | 2 Pad Boots 0 4 2 2 0 0 0 3 0 0 10 1 2 0 0 0 0 1 0 0 1 0 0 0 0
231 | 3 Legendary Boots 0 46 2 2 0 0 0 12 0 0 0 3 3 0 0 0 0 1 0 0 1 0 0 0 0
232 | 4 Bone Boots 0 16 2 2 0 0 0 6 0 0 6 0 3 0 0 0 0 1 0 0 1 0 0 0 0
233 | 5 Leather Boots 0 5 2 2 0 0 0 2 0 0 12 2 8 0 0 0 0 0 1 0 1 0 0 0 0
234 | 6 Scale Boots 0 22 2 2 0 0 0 8 0 0 8 3 11 0 0 0 0 0 1 0 1 0 0 0 0
235 | 7 Sphinx Boots 0 30 2 2 0 0 0 9 0 0 8 4 3 0 0 0 0 1 0 0 1 0 0 0 0
236 | 8 Brass Boots 0 32 2 2 0 0 0 10 0 0 6 2 10 3 0 0 0 0 1 0 1 0 0 0 0
237 | 9 Plate Boots 0 42 2 2 0 0 0 12 0 0 4 2 13 0 0 0 0 0 1 0 1 0 0 0 0
238 | 10 Vine Boots 0 5 2 2 0 0 0 2 0 0 0 3 3 6 0 0 0 0 0 1 0 0 0 0 0
239 | 11 Silk Boots 0 15 2 2 0 0 0 4 0 0 0 3 3 7 0 0 0 0 0 1 0 0 0 0 0
240 | 12 Boots of Wind 0 27 2 2 0 0 0 7 0 0 0 3 3 8 0 0 0 0 0 1 0 0 0 0 0
241 | 13 Boots of Spirit 0 40 2 2 0 0 0 10 0 0 0 3 4 8 0 0 0 0 0 1 0 0 0 0 0
242 | 14 Boots of Guardian 0 52 2 2 0 0 0 13 0 0 0 3 4 9 0 0 0 0 0 1 0 0 0 0 0
243 | 15 Boots of Storm crow 0 72 2 2 0 0 0 20 0 0 2 3 15 7 0 0 0 0 0 0 1 0 0 0 0
244 | end
245 |
246 | 12
247 | // Idx Name Hands Lvl X Y DmgMin DmgMax DefRate Def unk10 att/swSpeed walkSpeed Dur reqSTR reqAGI reqENE reqLVL Value DW DK Elf MG resIce resPoison resLightning resFire
248 | 0 Elven Wings 0 100 3 2 0 0 0 10 0 0 0 0 0 0 0 180 0 0 0 1 0 0 0 0 0
249 | 1 Angel Wings 0 100 5 3 0 0 0 10 0 0 0 0 0 0 0 180 0 1 0 0 1 0 0 0 0
250 | 2 Devil Wings 0 100 5 2 0 0 0 20 0 0 0 0 0 0 0 180 0 0 1 0 1 0 0 0 0
251 | 3 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
252 | 4 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
253 | 5 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
254 | 6 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
255 | 7 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
256 | 8 Healing Orb 0 8 1 1 0 0 0 0 0 0 0 0 0 0 10 0 0 0 0 1 0 0 0 0 0
257 | 9 Orb of Greater Defense 0 13 1 1 0 0 0 0 0 0 0 0 0 0 10 0 0 0 0 1 0 0 0 0 0
258 | 10 Orb of Greater Damage 0 18 1 1 0 0 0 0 0 0 0 0 0 0 10 0 0 0 0 1 0 0 0 0 0
259 | 11 Summoning Orb 0 3 1 1 0 0 0 0 0 0 0 0 0 0 10 0 0 0 0 1 0 0 0 0 0
260 | 12 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
261 | 13 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
262 | 14 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
263 | 15 Jewel of Chaos 0 12 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 0 0 0 0
264 | end
265 |
266 | 13
267 | // Idx Name Hands Lvl X Y DmgMin DmgMax DefRate Def unk10 att/swSpeed walkSpeed Dur reqSTR reqAGI reqENE reqLVL Value DW DK Elf MG resIce resPoison resLightning resFire
268 | 0 Angel 0 23 1 1 0 0 0 0 0 0 0 255 0 0 0 23 0 1 1 1 1 0 0 0 0
269 | 1 Imp 0 28 1 1 0 0 0 0 0 0 0 255 0 0 0 28 0 1 1 1 1 0 0 0 0
270 | 2 Unicorn 0 33 1 1 0 0 0 0 0 0 0 255 0 0 0 33 0 1 1 1 1 0 0 0 0
271 | 3 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
272 | 4 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
273 | 5 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
274 | 6 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
275 | 7 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
276 | 8 Ring of Ice 0 20 1 1 0 0 0 0 0 0 0 50 0 0 0 20 0 1 1 1 1 1 0 0 0
277 | 9 Ring of Poison 0 17 1 1 0 0 0 0 0 0 0 50 0 0 0 17 0 1 1 1 1 0 1 0 0
278 | 10 Ring of Transformation 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 0 0 0 0
279 | 11 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
280 | 12 Pendant of Lightning 0 21 1 1 0 0 0 0 0 0 0 50 0 0 0 21 0 1 1 1 1 0 0 1 0
281 | 13 Pendant of Fire 0 13 1 1 0 0 0 0 0 0 0 50 0 0 0 13 0 1 1 1 1 0 0 0 1
282 | 14 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
283 | 15 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
284 | end
285 |
286 | 14
287 | // Idx Name Hands Lvl X Y DmgMin DmgMax DefRate Def unk10 att/swSpeed walkSpeed Dur reqSTR reqAGI reqENE reqLVL Value DW DK Elf MG resIce resPoison resLightning resFire
288 | 0 Apple 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 5 0 0 0 0 0 0 0 0
289 | 1 Small Healing Potion 0 10 1 1 0 0 0 0 0 0 0 0 0 0 0 0 10 0 0 0 0 0 0 0 0
290 | 2 Healing Potion 0 25 1 1 0 0 0 0 0 0 0 0 0 0 0 0 20 0 0 0 0 0 0 0 0
291 | 3 Large Healing Potion 0 40 1 1 0 0 0 0 0 0 0 0 0 0 0 0 30 0 0 0 0 0 0 0 0
292 | 4 Small Mana Potion 0 10 1 1 0 0 0 0 0 0 0 0 0 0 0 0 10 0 0 0 0 0 0 0 0
293 | 5 Mana Potion 0 25 1 1 0 0 0 0 0 0 0 0 0 0 0 0 20 0 0 0 0 0 0 0 0
294 | 6 Large Mana Potion 0 40 1 1 0 0 0 0 0 0 0 0 0 0 0 0 30 0 0 0 0 0 0 0 0
295 | 7 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
296 | 8 Antidote 0 10 1 1 0 0 0 0 0 0 0 0 0 0 0 0 10 0 0 0 0 0 0 0 0
297 | 9 Ale 0 15 1 2 0 0 0 0 0 0 0 0 0 0 0 0 30 0 0 0 0 0 0 0 0
298 | 10 Town Portal Scroll 0 30 1 2 0 0 0 0 0 0 0 0 0 0 0 0 30 0 0 0 0 0 0 0 0
299 | 11 Box of Luck 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
300 | 12 Heart 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
301 | 13 Jewel of Bless 0 25 1 1 0 0 0 0 0 0 0 0 0 0 0 0 150 0 0 0 0 0 0 0 0
302 | 14 Jewel of Soul 0 30 1 1 0 0 0 0 0 0 0 0 0 0 0 0 150 0 0 0 0 0 0 0 0
303 | 15 Zen 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
304 | end
305 |
306 | 15
307 | // Idx Name Hands Lvl X Y DmgMin DmgMax DefRate Def unk10 att/swSpeed walkSpeed Dur reqSTR reqAGI reqENE reqLVL Value DW DK Elf MG resIce resPoison resLightning resFire
308 | 0 Scroll of Poison 0 30 1 2 30 45 0 0 0 0 0 0 0 0 10 0 0 1 0 0 1 0 0 0 0
309 | 1 Scroll of Meteorite 0 21 1 2 21 31 0 0 0 0 0 0 0 0 10 0 0 1 0 0 1 0 0 0 0
310 | 2 Scroll of Lightning 0 13 1 2 13 19 0 0 0 0 0 0 0 0 10 0 0 1 0 0 1 0 0 0 0
311 | 3 Scroll of Fire Ball 0 5 1 2 5 7 0 0 0 0 0 0 0 0 10 0 0 1 0 0 1 0 0 0 0
312 | 4 Scroll of Flame 0 35 1 2 35 52 0 0 0 0 0 0 0 0 10 0 0 1 0 0 1 0 0 0 0
313 | 5 Scroll of Teleport 0 17 1 2 17 25 0 0 0 0 0 0 0 0 10 0 0 1 0 0 0 0 0 0 0
314 | 6 Scroll of Ice 0 25 1 2 25 37 0 0 0 0 0 0 0 0 10 0 0 1 0 0 1 0 0 0 0
315 | 7 Scroll of Twister 0 40 1 2 40 60 0 0 0 0 0 0 0 0 10 0 0 1 0 0 1 0 0 0 0
316 | 8 Scroll of Evil Spirits 0 50 1 2 50 75 0 0 0 0 0 0 0 0 10 0 0 1 0 0 1 0 0 0 0
317 | 9 Scroll of Hell Fire 0 60 1 2 60 90 0 0 0 0 0 0 0 0 10 0 0 1 0 0 1 0 0 0 0
318 | 10 Scroll of Power Wave 0 9 1 2 9 13 0 0 0 0 0 0 0 0 10 0 0 1 0 0 1 0 0 0 0
319 | 11 Scroll of Aqua Beam 0 74 1 2 74 111 0 0 0 0 0 0 0 0 10 0 0 1 0 0 1 0 0 0 0
320 | 12 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
321 | 13 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
322 | 14 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
323 | 15 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
324 | end
325 |
326 |
--------------------------------------------------------------------------------