-
Posts
259 -
Joined
-
Last visited
-
Days Won
1
Content Type
Profiles
Forums
Calendar
Posts posted by Mohenjo Daro
-
-
I'm not sure when the release date will be at this point. I was hoping for the summer, but my job burned me out from programming. However, I got laid off, so I'm back to working on the update.
I can't really give a time frame right now, so we'll see how things progress. -
I'll fix this in the next update, but it's an issue with the form resizing throwing the cursor location off
-
Try this first:
1) Open the `.vbp` file in a text editor (notepad is fine)
2) Find the line with `mscomctl.ocx` (it should look similar to this `Object={831FDD16-0C5C-11D2-A9FC-0000F8754DA1}#2.0#0; MSCOMCTL32.OCX`)
3) Change the `2.0` or `2.1` and change it the the other value (2.0 -> 2.1 and 2.1 -> 2.0)
4) Save and try opening it with VB6 again
***
If that doesn't work, try running the following command in an Admin Command Prompt
`regsvr32 mscomctl.ocxregsvr32 mscomctl32.ocx`
***
If that doesn't work, try installing VB6 SP6
https://www.microsoft.com/en-us/download/details.aspx?id=5721
***
If that doesn't work, try reinstalling the runtimes
http://www.mediafire.com/file/ll0jbjg0zs132tn/Run_First%2521_%2528Runtime_Files_-_If_Needed%2529.exe/file -
I fixed one of the links the updater uses, so it should be working again.
I'm also working on a new updater that should get rid of some of the other problems the current one has. -
Nope, I don't know of any released engines with pixel movement
-
@Newdev
There isn't a class editor built into the engine, but you can hcange the classes by editing the `server/data/classes.ini` file -
The engine was removed after the developer lost the data and got mad at the Eclipse community.
Here's a link to the latest version I have (I'm not sure if it's the latest version released or not): **REMOVED**
*The creator doesn't want his engine to be released again due to it being buggy or something like that. -
![alt text](http://i.imgur.com/jGWoUl3.png)
You may want to tweak some features in your game, or just add new features. You will need VB6 for this. `Visual Basic 6` will allow you to add in any custom features.
Learning VB6 will also help you gain programming knowledge in the other Basic languages (VB6, VB Net, VBS, etc.), and will teach you how to code if you're new to programming.
**Note `VB6` is discontinued and finding an official copy is hard to find/buy. The easiest way to obtain VB6 if to find a pirated copy on a torrent site, or you can ask a trusted member on the forums for a link.** (We don't condone pirating software).
***
***
This guide will assume you have successfully installed VB6. Please use google.com if you need help installing VB6 successfully.
***
Once opened, VB6 should look something like this (we'll be using `Andur Engine` -> `dev suite` for this guide)
![VB6 IDE](https://i.postimg.cc/522dhXKn/gNeZDh5.png)
On the right side you can see
* `Forms` (stores windows forms)
* `Modules` (stores the scripts)
* `Class Modules` (DX related scripts. You don't need to open this)
* `Related Document` (Includes misc scripts. You don't need to open this. Found in Andur Engine)
take a look around the code and explore the VB6 IDE. We can move on with the tutorial once you're more comfortable with the development environment.
***
***
First off, let's make a simple code that will display a text in the chatbox.
Go to `modInput`, press `Ctrl` + `F`, and search for `"/help"`
You should see something similar to this"
```
Case "/help"
Call AddText("Debug Commands: /info, /who, /fps, /fpslock", HelpColor)
Call AddText("/chatcommands - Chat commands", Blue)
Call AddText("For Chat room command help: /chathelp", BrightGreen)
Call AddText("Leave Party: /leaveparty - leave party/group", Yellow)
Call AddText("Bounty commands: /bountyhelp - Bounty commands", BrightRed)
Call AddText("Mail: /mail - Open the Mail window", Green)
```
After that block of code, add this:
```
Case “/HelloWorld”
Call AddText("Hello World", Blue)
```
Now, if you type `/HelloWorld` in the chat box in game, then a message should appear in the chat box with `Hello World` in blue text.
***
Let's go over what each part of that code does:
* `Case "/HelloWorld"` - Case is a conditional that activates the code inside if the condition is true. If you type `/HelloWorld` in chat, then the condition checks if what you type is the same as what's in the code.
* `Call AddText` - Shows message in the chat box (no one else will see this message)
***
***
Next, let's make a roll dice command:
Under the Hello World code we just added, add this code:
```
Case “/roll”
Dim rndNum As Byte
rndNum = Rand(1, 10)
AddText(rndNum, Red)
```
Let's go over what each part of that code does:
* `Case "/roll` - Case is a conditional that activates the code inside when the value is true. If you type `/roll` into chat, the condition will be true and the code will be activated.
* `Rand(lowNum, highNum)` is EO’s random number generator; it will return a value within the bounds given. In this case, the bounds are 1 and 10.
* `Dim` - This is used to declare a variable. In this case, we are declaring `randNum` as a `Byte`.
* `AddText(rndNum. Red)` ~ This shows the number we got from `Rand(1, 10)` in the chat (again, only you will see this message, no one else will).
And there you have it, you now have a dice roll feature in your engine. It's not too complex but it does show a few things you can do with the engine and is a good start.
***
Following the above code will only add the code to the source files, it's not actually added to the exe file. To add it to the exe so users can have the feature, go to `File -> Make *GAME NAME*.exe`.
For ER: `File -> Make Eclipse Renewal.exe`
For AE: `File -> Make Andure Engine.exe`
And that's your first feature in your engine! You have now learned some of the basics :D
***
***
[Tutorial Index](https://www.eclipseorigins.com/topic/86346/solid-and-mohenjo-s-tutorial-index)
Part 6: [Distributing the client](https://www.eclipseorigins.com/topic/86540/eclipse-origins-tutorial-part-6-sending-the-client-to-friends)
*** -
![alt text](https://i.imgur.com/0PN2AGU.png)
Eclipse Origins has a map editor that works similarly like RPG MAKER. It has 4 options: Tiles (Which can be used to edit the maps), Attributes (Which can be used to place special events) and events (Which can be used to place events you created).
Now all the engines work the same way but opening the map editor is different.
Eclipse Renewal
-
Once you are an admin, you can press the Insert key on your keyboard or type `/admin` in the chat to open the admin panel.
![Command](https://s26.postimg.cc/o6p1xb195/ER_-_Open_Admin_Panel.png)
You can then click on the `Development Panel` button and it will open the map editor along with other editors.
![Admin Panel](https://s26.postimg.cc/kagbepieh/ER_-_Dev_Panel_Button.png)
![Dev Panel](https://i.postimg.cc/T3FmzDY6/Dev-Panel.png)
***
The `Type` panel will allow you to chose whether you're placing tiles (Layers), Attributes, Blocks, or Events.
* Layers will add graphics to a map.
* Attributes can add things like Blocks (this is not the Type Block), Warps, Resources, and more to allow them to look better and have more going on.
* Blocks allow players to use a tile but limit where they can go from that tile. The Block attribute is much easier and faster to use, but sometimes you will need to use the Block type.
* Events hav etheir own editor and will allow you to do a lot more than a normal NPC. they can warp a player, have multiple dialogues to choose from, and change player and server variables.
![Placement Type](https://s26.postimg.cc/6tjcvy2yx/ER_-_Layer_Type.png)
***
The `Layers` panel has a list of layers that you can place tiles.
* The ground layer is the very botom layer and everything will be above it.
* The mask layer is just below the player's sprite and is used for this like rocks, the bases of trees, and the bases of houses.
* The fringe layers are above the player and are used for things like the tops of trees and houses.
The scroll bar is used to select the (auto) tile type. The `Clear` button will clear a layer of all tiles placed on it, and the `Fill` button will fill a layer will the tile you have selected.
![Layers](https://s26.postimg.cc/3motcbat5/ER_-_Layers.png)
***
The list in the middle of the editor is the Map Report. It shows you a list of all the maps and their names. You can use this when you want to link maps, place warps, or use events to send a player somewhere.
![alt text](https://s26.postimg.cc/51qe11rbt/ER_-_Map_Report.png)
***
***
Andur Engine
-
Once you are an admin, open up the developer suite (`dev suite.exe` or `AndurEngine.exe`) and log in with the admin account. Once you login you need to change to `Editor Mode`
![alt text](https://s26.postimg.cc/i7ydkfreh/AE_-_Editor_Mode.png)
This ill change the look of the dev suite quite a bit.
* `Map Editor` will be shown on the left side of the dev suite
![alt text](https://s26.postimg.cc/c8amh1eeh/AE_-_Map_Editor.png)
* The map Layers and Property buttons will be on the top of the screen under the menu strip.
![alt text](https://s26.postimg.cc/mtuhstfih/AE_-_Map_Properties.png)
![alt text](https://s26.postimg.cc/si0sjr9l5/AE_-_Layers.png)
* The other Editors buttons will be on the right side of the screen
![alt text](https://s26.postimg.cc/w1mq9i755/AE_-_Editors.png)
The `Map Editor` will have about the same tools as ER's, however, it has some that ER doesn't have and lacks other features ER has. The biggest difference is just the difference in the layouts. To see what a button does, just hover your mouse over it and it will show a text box with the button's name.
***
***
Some Additional Info
-
These engines all have Tilesets and other resources, but you can also import your own.
Clicking on the `Properties` can be used to set the map's name, map's fog and weather, map's overlay, map's NPCs, map's music, and sound.
The `Properties` button in AE looks like this
![alt text](https://s26.postimg.cc/mtuhstfih/AE_-_Map_Properties.png)
And once you are done, click on the "Send" Button in the bottom and the map will be saved by the server. **Any changes not saved will be lost for good!!***
***
***
[Tutorial Index](https://www.eclipseorigins.com/topic/86346/solid-and-mohenjo-s-tutorial-index)
Part 2: [Setting up the engine](https://www.eclipseorigins.com/topic/86167/eclipse-origins-tutorial-part-2-setting-up-the-engine)
Part 4: [NPC Editor](https://www.eclipseorigins.com/topic/86541/eclipse-origins-tutorial-part-4-using-the-npc-editor)
*** -
![alt text](https://i.imgur.com/0PN2AGU.png)
Eclipse Origins is an open source engine which can be used to easily create an MMORPG. No coding is necessary, however, to add unique features to your game, you must know VB6. If you don't know vb6, then you can download a custom engine pre-loaded with features. It is highly recommended to find an engine that is being actively supported and developed; not all engines on the site are developed and/or supported anymore.
Download the Engine, uncompress it, install the Runtimes, and make your game.
You can see the supported engines by going to the [Downloads Page](https://www.eclipseorigins.com/downloads). You will also find the Runtimes file by clicking [Step 2](https://www.eclipseorigins.com/downloads#step_two).
![alt text](https://s26.postimg.cc/sftrzhrnt/Finding_Runtimes.png)
If the links on the download page aren't working, try using the ones in [Mohenjo Daro's signature](https://www.eclipseorigins.com/user/mohenjo-daro).
***
***
Actively Developed and Supported Engines:
[Eclipse Renewal](https://drive.google.com/open?id=10uc3OumSUIRmkIW5Ugkjx5dblYi10z4P) - This is the updater file for the engine
~~[Andur Engine](https://drive.google.com/open?id=1tf8zG--BYxo6y-ULG6CFbW80hfZIapF_) - This is the updater file for the engine~~ **No longer supported nor available**
Atlas (C# MMORPG maker) (Coming soon)
***
Discontinued and Non-Supported Engines:
Dx8 Engines: [Final Frontier](http://www.mediafire.com/file/gx2tpskawft41j9/Eclipse-The+Final+Frontier.rar), [Dragon Eclipse 2.0](http://www.mediafire.com/file/6yiwb785kvf2s5m/Dragon+Eclipse+English+2.0+%5B4th+Relase%5D.zip), [Eclipse Worlds](https://hitsparkinteractive.com/resources/eclipse-worlds.2/), [Eclipse Origins 3.0](http://www.mediafire.com/file/o9gcrxmdlwsjqqx/Eclipse+-++3.0+-+Electrified+Events.rar)
Dx7 Engines: [SEB Engine (EBO)](http://www.mediafire.com/file/krdopnxt6kj5zsj/EBO_Engine.rar), [EVB](http://www.mediafire.com/download/z9t2vorzfrnbq4t), [Eclipse Renewal 1.6](http://www.mediafire.com/download/1uda29bd5z16jx9), [Eclipse Origins 2.3](http://www.mediafire.com/download/d1lsdi477g51gdi), [Eclipse Origins 2.0](http://www.mediafire.com/download/jpuhk9r4s93ea4j)
***
***
Once you chosen your engine, download and install the runtimes. You can also download and install Visual Basic 6 (there is no download for it on this site, you will have to find it on your own. It is also not supported by Microsoft and Visual Studios will **NOT** work instead).
And you're finished! Continue to part 2 to set up your game!
***
***
[Tutorial Index](https://www.eclipseorigins.com/topic/86346/solid-and-mohenjo-s-tutorial-index)
Part 2: [Setting up the engine](https://www.eclipseorigins.com/topic/86167/eclipse-origins-tutorial-part-2-setting-up-the-engine)
*** -
![alt text](https://i.imgur.com/0PN2AGU.png)
Every Eclipse engine has an NPC Editor and most of them are similar to the other engines. We are going to go through the ER's and Andur's NPC editor.
Eclipse Renewal
-
Eclipse Renewal has the most powerful NPC editor than other eclipse engines.
To make an NPC press the "Insert" button and click on the Development panel. Go to the NPCs tab and there you can set up the NPCs. After setting it up it should look something like this:
![NPC Editor](https://i.postimg.cc/5y8b2D8g/NPC-Editor.png)
ER NPCs have a few more advanced options such as `Hive Mind` (NPCs of the same type will help each other if one is in combat and range), and `Smart AI` and Dumb AI (it will be used is Smart AI isn't selected) for how they pathfind to their target.
**IMPORTANT:** ER NPCs are automatically calculated for you. The NPCs in the NPC Editor are a base level (level 0) and will scale based on the level you enter in the `Map Properties`:
![Map Properties](https://i.postimg.cc/gJXGfxJf/Map-Properties.png)
Once you set the map's properties, place in an NPC spawn attribute from the map editor (if you don't place their spawn, they will spawn randomly on the map).
***
***
Andur Engine
-
Andur's NPC editor is also similar to ER's editor, but there are differences.
First open the development suite, click on editors and click on the NPC button.
![alt text](https://s26.postimg.cc/6vls2odkp/AE_-_NPC_Editor.png)
The editor will then open in a separate window.
![NPC Editor](https://i.postimg.cc/wvC9H9R3/AE-NPC-Editor.png)
You can now set up the NPC the same way as ER, but **note that you set up the NPC level through the editor, not the Map Properties**.
AE NPCs have a few more advanced options
* `Is boss?` beside the behavior type if you want the NPC to be a boss and the event slider can be used to select an event for the NPC. Once you are done, set the NPC in a map through the map properties.
* Colors to change what the sprite looks like without needing a new graphic.
* `Factions` to make NPCs fight each other
***
***
And that's all it for the NPC editor. Now go and try the NPC editor out and make some NPCs. Just remember, you will improve over time: no one starts off perfect.
***
***
[Tutorial Index](https://www.eclipseorigins.com/topic/86346/solid-and-mohenjo-s-tutorial-index)
Part 3: [Map editor](https://www.eclipseorigins.com/topic/86543/eclipse-origins-tutorial-part-3-using-the-map-editor)
Part 5: [Animation Editor](https://www.eclipseorigins.com/topic/86172/eclipse-origins-tutorial-part-5-using-the-animation-editor)
*** -
![Eclipse](http://i.imgur.com/jGWoUl3.png)
When you build your game and want to send it to your friends or release it, you may have to keep in mind that you have to delete some files
***
When releasing your file, you have to make sure that you delete the following files or otherwise players will have access to the source!
![alt text](https://s26.postimg.cc/442ic44s9/AE_-_Release_Client.png)
Once you delete these, you can then make a zip/rar of your game and then send it.
If you want your game to have an Updater, you can check out [Mohenjo Daro's Updater](https://www.eclipseorigins.com/topic/86325/mohenjo-daro-s-updater).
***
If your game is port forwarded, make sure "your" version of the client is using the internal that is being used to port forward on your config file. If you are sending the client make sure to put in your public/external IP on the config file.
Also don't forget to remove your username and password on the config file!
***
You can use sites such as Google Drive, Dropbox, Mediafire etc. to host your game for players to download.
I recommend [Itch.io](https://itch.io/) if you decide to publically release your game.
***
If you're using Andur engine, you can use the dev suite to play the game, talk to other players, and work on it all at the same time.
Have fun :)
***
***
[Tutorial Index](https://www.eclipseorigins.com/topic/86346/solid-and-mohenjo-s-tutorial-index)
Part 5: [Animation Editor](https://www.eclipseorigins.com/topic/86172/eclipse-origins-tutorial-part-5-using-the-animation-editor)
Part 7: [Intro to VB6](https://www.eclipseorigins.com/topic/86544/eclipse-origins-tutorial-part-7-introduction-to-visual-basic-6)
*** -
All the engines here are written in VB6 (you will need the VB6 IDE if you plan on coding). There's quite a few you can choose from in my signature, I'd start with one of those
-
Do you have any images to show you have the images, and that the images will fit well in someone's game? I would suggest watermarks with your name to prevent them from being stolen
-
Unfortunately you can't easily get it legally (and it's pricey to buy). I sent you a PM with more info on how to get it
-
Yep, but it requires the VB6 IDE to do so. Just open the project, change the values in modConstants, save the project, and recompile the exe
As I said, you need the VB6 IDE to do this, and Visual Studio won't work -
Yep, but it requires the VB6 IDE to do so. Just open the project, change the values in modConstants, save the project, and recompile the exe
As I said, you need the VB6 IDE to do this, and Visual Studio won't work -
Here's the source for those who want it (I did compile the exe)
https://www.dropbox.com/s/socsi5d4btu339g/Eclipse Renewal Isomentric.rar?dl=0 -
![alt text](https://i.postimg.cc/yN5mWQ1k/isometric.gif)
***
I've only tested this code in ER 18., but porting it to other engines shouldn't be the hardest thing to do assuming you know what you're doing.
All changes made in this tutorial are client side only, you do not need to change the server code.
If you find and bugs, feel free to post them here and I will take a look when I have time.
For those who just want the source, here you go: https://www.dropbox.com/s/socsi5d4btu339g/Eclipse Renewal Isomentric.rar?dl=0
***
***
The following changes swapping constants and variables for other variables (eg. 32 -> PIC_X). Some of these may not be in other engines, or there may be more, so I suggest searching 32, 16, 40, 48, and 64 (the reasoning is because those are multiples of 32).
In general, use PIC_X or Y for 32s that are for the map; and SIZE_X or Y for anything else. Just look at the code and choose what to use based on that.
***
***
***
`frmDev`
Find
```
Private Sub MappicTileset_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
' If debug mode, handle error then exit out
If Options.Debug = 1 Then On Error GoTo ErrorHandler
X = X + (frmDev.scrlPictureX.value * 32)
Y = Y + (frmDev.scrlPictureY.value * 32)
```
Change it to
```
Private Sub MappicTileset_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
' If debug mode, handle error then exit out
If Options.Debug = 1 Then On Error GoTo ErrorHandler
X = X + (frmDev.scrlPictureX.value * PIC_X)
Y = Y + (frmDev.scrlPictureY.value * PIC_Y)
```
***
Find
```
Private Sub MappicTileset_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
' If debug mode, handle error then exit out
If Options.Debug = 1 Then On Error GoTo ErrorHandler
X = X + (frmDev.scrlPictureX.value * 32)
Y = Y + (frmDev.scrlPictureY.value * 32)
```
Change it to
```
Private Sub MappicTileset_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
' If debug mode, handle error then exit out
If Options.Debug = 1 Then On Error GoTo ErrorHandler
X = X + (frmDev.scrlPictureX.value * PIC_X)
Y = Y + (frmDev.scrlPictureY.value * PIC_Y)
```
***
***
`frmMain`
Find
```
Max_MapX_Orig = frmMain.ScaleWidth \ PIC_X
Max_MapY_Orig = frmMain.ScaleHeight \ PIC_Y
```
Change it to
```
Max_MapX_Orig = Sqr(CCur(frmMain.ScaleWidth ^ 2) + CCur(frmMain.ScaleHeight ^ 2)) \ PIC_X
Max_MapY_Orig = Sqr(CCur(frmMain.ScaleWidth ^ 2) + CCur(frmMain.ScaleHeight ^ 2)) \ PIC_Y
```
***
Find
```
.Top = GUI(GUI_SHOP).Y + ShopTop + ((ShopOffsetY + 32) * ((i - 1) \ ShopColumns))
.Bottom = .Top + PIC_Y
.Left = GUI(GUI_SHOP).X + ShopLeft + ((ShopOffsetX + 32) * (((i - 1) Mod ShopColumns)))
.Right = .Left + PIC_X
```
Change it to
```
.Top = GUI(GUI_SHOP).Y + ShopTop + ((ShopOffsetY + SIZE_Y) * ((I - 1) \ ShopColumns))
.Bottom = .Top + SIZE_Y
.Left = GUI(GUI_SHOP).X + ShopLeft + ((ShopOffsetX + SIZE_X) * (((I - 1) Mod ShopColumns)))
.Right = .Left + SIZE_X
```
***
Find
```
.Top = InvTop + ((InvOffsetY + 32) * ((i - 1) \ InvColumns)) + GUI(GUI_INVENTORY).Y
.Bottom = .Top + PIC_Y
.Left = InvLeft + ((InvOffsetX + 32) * (((i - 1) Mod InvColumns))) + GUI(GUI_INVENTORY).X
.Right = .Left + PIC_X
```
Change it to
```
.Top = InvTop + ((InvOffsetY + SIZE_Y) * ((I - 1) \ InvColumns)) + GUI(GUI_INVENTORY).Y
.Bottom = .Top + SIZE_Y
.Left = InvLeft + ((InvOffsetX + SIZE_X) * (((I - 1) Mod InvColumns))) + GUI(GUI_INVENTORY).X
.Right = .Left + SIZE_X
```
***
Find
```
.Top = SpellTop + ((SpellOffsetY + 32) * ((i - 1) \ SpellColumns)) + GUI(GUI_SKILLS).Y
.Bottom = .Top + PIC_Y
.Left = SpellLeft + ((SpellOffsetX + 32) * (((i - 1) Mod SpellColumns))) + GUI(GUI_SKILLS).X
.Right = .Left + PIC_X
```
Change it to
```
.Top = SpellTop + ((SpellOffsetY + SIZE_Y) * ((I - 1) \ SpellColumns)) + GUI(GUI_SKILLS).Y
.Bottom = .Top + SIZE_Y
.Left = SpellLeft + ((SellOffsetX + SIZE_X) * (((I - 1) Mod SpellColumns))) + GUI(GUI_SKILLS).X
.Right = .Left + SIZE_X
```
***
Find
```
.Top = GUI(GUI_TRADE).Y + TrdTop + ((TrdOffsetY + 32) * ((i - 1) \ TrdColumns))
.Bottom = .Top + PIC_Y
.Left = GUI(GUI_TRADE).X + TrdLeft + ((TrdOffsetX + 32) * (((i - 1) Mod TrdColumns)))
.Right = .Left + PIC_X
```
Change it to
```
.Top = GUI(GUI_TRADE).Y + TrdTop + ((TrdOffsetY + SIZE_Y) * ((I - 1) \ TrdColumns))
.Bottom = .Top + SIZE_Y
.Left = GUI(GUI_TRADE).X + TrdLeft + ((TrdOffsetX + SIZE_X) * (((I - 1) Mod TrdColumns)))
.Right = .Left + SIZE_X
```
***
Find
```
.Top = GUI(GUI_TRADE).Y + TrdTop + ((TrdOffsetY + 32) * ((i - 1) \ TrdColumns))
.Bottom = .Top + PIC_Y
.Left = GUI(GUI_TRADE).X + (GUI(GUI_TRADE).Width * 0.5) - 6 + TrdLeft + ((TrdOffsetX + 32) * (((i - 1) Mod TrdColumns)))
.Right = .Left + PIC_X
```
Change it to
```
.Top = GUI(GUI_TRADE).Y + TrdTop + ((TrdOffsetY + SIZE_Y) * ((I - 1) \ TrdColumns))
.Bottom = .Top + SIZE_Y
.Left = GUI(GUI_TRADE).X + (GUI(GUI_TRADE).Width * 0.5) - 6 + TrdLeft + ((TrdOffsetX + SIZE_X) * (((I - 1) Mod TrdColumns)))
.Right = .Left + SIZE_X
```
***
Find
```
.Top = GUI(GUI_BANK).Y + BankTop + ((BankOffsetY + 32) * ((i - 1) \ BankColumns))
.Bottom = .Top + PIC_Y
.Left = GUI(GUI_BANK).X + BankLeft + ((BankOffsetX + 32) * (((i - 1) Mod BankColumns)))
.Right = .Left + PIC_X
```
Change it to
```
.Top = GUI(GUI_BANK).Y + BankTop + ((BankOffsetY + SIZE_Y) * ((I - 1) \ BankColumns))
.Bottom = .Top + SIZE_Y
.Left = GUI(GUI_BANK).X + BankLeft + ((BankOffsetX + SIZE_X) * (((I - 1) Mod BankColumns)))
.Right = .Left + SIZE_X
```
***
***
`modConstants`
Find
```
Public Const PIC_X As Long = 32
Public Const PIC_Y As Long = 32
```
Change it to
```
Public Const PIC_X As Long = 64
Public Const PIC_Y As Long = 32
```
This will change the size of the tiles to support isometric tiles
***
***
`modDirectDraw` / `modGraphics`
Find
```
Direct3D_Window.BackBufferWidth = frmMain.ScaleWidth 'Match the backbuffer width with the display width
Direct3D_Window.BackBufferHeight = frmMain.ScaleHeight 'Match the backbuffer height with the display height
```
Change it to
```
Direct3D_Window.BackBufferWidth = WindowWidth ' Match the backbuffer width with the display width
Direct3D_Window.BackBufferHeight = WindowHeight ' Match the backbuffer height with the display height
```
***
Find
```
rec.Right = rec.Left + 32
rec.Bottom = rec.Top + 32
RenderTexture Tex_Direction, ConvertMapX(X * PIC_X), ConvertMapY(Y * PIC_Y), rec.Left, rec.Top, rec.Right - rec.Left, rec.Bottom - rec.Top, rec.Right - rec.Left, rec.Bottom - rec.Top, D3DColorRGBA(255, 255, 255, 255)
```
Change it to
```
rec.Right = rec.Left + PIC_X
rec.Bottom = rec.Top + PIC_Y
RenderTexture Tex_Direction, ConvertMapIsoX(X * PIC_X, Y * PIC_Y), ConvertMapIsoY(Y * PIC_Y, X * PIC_X), rec.Left, rec.Top, rec.Right - rec.Left, rec.Bottom - rec.Top, rec.Right - rec.Left, rec.Bottom - rec.Top, D3DColorRGBA(255, 255, 255, 255)
```
***
Find
```
RenderTexture Tex_Direction, ConvertMapX(X * PIC_X) + DirArrowX(i), ConvertMapY(Y * PIC_Y) + DirArrowY(i), rec.Left, rec.Top, rec.Right - rec.Left, rec.Bottom - rec.Top, rec.Right - rec.Left, rec.Bottom - rec.Top, D3DColorRGBA(255, 255, 255, 255)
```
Change it to
```
RenderTexture Tex_Direction, ConvertMapIsoX(X * PIC_X, Y * PIC_Y) + DirArrowX(I), ConvertMapIsoY(Y * PIC_Y, X * PIC_X) + DirArrowY(I), rec.Left, rec.Top, rec.Right - rec.Left, rec.Bottom - rec.Top, rec.Right - rec.Left, rec.Bottom - rec.Top, D3DColorRGBA(255, 255, 255, 255)
```
***
Find (in both `Public Sub DrawTarget` and `Public Sub DrawHover`)
```
X = X - ((Width - 32) * 0.5)
Y = Y - (Height * 0.5)
X = ConvertMapX(X)
Y = ConvertMapY(Y)
```
Change it to
```
Dim tmpX As Long, tmpY As Long
tmpX = X - (Width * 0.5)
tmpY = Y - (Height * 0.5)
X = ConvertMapIsoX(tmpX, tmpY)
Y = ConvertMapIsoY(tmpY, tmpX)
```
***
Find
```
Public Sub DrawMapTile(ByVal X As Long, ByVal Y As Long)
Dim rec As RECT
Dim i As Long
' If debug mode, handle error then exit out
If Options.Debug = 1 Then On Error GoTo ErrorHandler
With Map.Tile(X, Y)
For i = MapLayer.Ground To MapLayer.Mask5
If Autotile(X, Y).Layer(i).renderState = RENDER_STATE_NORMAL Then
' Draw normally
RenderTexture Tex_Tileset(.Layer(i).Tileset), ConvertMapX(X * PIC_X), ConvertMapY(Y * PIC_Y), .Layer(i).X * 32, .Layer(i).Y * 32, 32, 32, 32, 32, -1
ElseIf Autotile(X, Y).Layer(i).renderState = RENDER_STATE_AUTOTILE Then
' Draw autotiles
DrawAutoTile i, ConvertMapX(X * PIC_X), ConvertMapY(Y * PIC_Y), 1, X, Y
DrawAutoTile i, ConvertMapX((X * PIC_X) + 16), ConvertMapY(Y * PIC_Y), 2, X, Y
DrawAutoTile i, ConvertMapX(X * PIC_X), ConvertMapY((Y * PIC_Y) + 16), 3, X, Y
DrawAutoTile i, ConvertMapX((X * PIC_X) + 16), ConvertMapY((Y * PIC_Y) + 16), 4, X, Y
End If
Next
End With
' Error handler
Exit Sub
ErrorHandler:
HandleError "DrawMapTile", "modGraphics", Err.Number, Err.Description, Err.Source, Err.HelpContext
Err.Clear
Exit Sub
End Sub
Public Sub DrawMapFringeTile(ByVal X As Long, ByVal Y As Long)
Dim rec As RECT
Dim i As Long
' If debug mode, handle error then exit out
If Options.Debug = 1 Then On Error GoTo ErrorHandler
With Map.Tile(X, Y)
For i = MapLayer.Fringe To MapLayer.Fringe5
If Autotile(X, Y).Layer(i).renderState = RENDER_STATE_NORMAL Then
' Draw normally
RenderTexture Tex_Tileset(.Layer(i).Tileset), ConvertMapX(X * PIC_X), ConvertMapY(Y * PIC_Y), .Layer(i).X * 32, .Layer(i).Y * 32, 32, 32, 32, 32, -1
ElseIf Autotile(X, Y).Layer(i).renderState = RENDER_STATE_AUTOTILE Then
' Draw autotiles
DrawAutoTile i, ConvertMapX(X * PIC_X), ConvertMapY(Y * PIC_Y), 1, X, Y
DrawAutoTile i, ConvertMapX((X * PIC_X) + 16), ConvertMapY(Y * PIC_Y), 2, X, Y
DrawAutoTile i, ConvertMapX(X * PIC_X), ConvertMapY((Y * PIC_Y) + 16), 3, X, Y
DrawAutoTile i, ConvertMapX((X * PIC_X) + 16), ConvertMapY((Y * PIC_Y) + 16), 4, X, Y
End If
Next
End With
' Error handler
Exit Sub
ErrorHandler:
HandleError "DrawMapFringeTile", "modGraphics", Err.Number, Err.Description, Err.Source, Err.HelpContext
Err.Clear
Exit Sub
End Sub
```
Change it to
```
Public Sub DrawMapTile(ByVal X As Long, ByVal Y As Long, ByVal layer As Byte)
Dim rec As RECT
' If debug mode, handle error then exit out
If Options.Debug = 1 Then On Error GoTo ErrorHandler
With Map.Tile(X, Y)
If Autotile(X, Y).layer(layer).renderState = RENDER_STATE_NORMAL Then
' Draw normally
RenderTexture Tex_Tileset(.layer(layer).Tileset), ConvertMapIsoX(X * PIC_X, Y * PIC_Y), ConvertMapIsoY(Y * PIC_Y, X * PIC_X), .layer(layer).X * PIC_X, .layer(layer).Y * PIC_Y, PIC_X, PIC_Y, PIC_X, PIC_Y, -1
ElseIf Autotile(X, Y).layer(layer).renderState = RENDER_STATE_AUTOTILE Then
' Draw autotiles
DrawAutoTile layer, ConvertMapIsoX(X * PIC_X, Y * PIC_Y), ConvertMapIsoY(Y * PIC_Y, X * PIC_X), 1, X, Y
DrawAutoTile layer, ConvertMapIsoX((X * PIC_X) + (PIC_X * 0.5), Y * PIC_Y), ConvertMapIsoY(Y * PIC_Y, (X * PIC_X) + (PIC_X * 0.5)), 2, X, Y
DrawAutoTile layer, ConvertMapIsoX(X * PIC_X, (Y * PIC_Y) + (PIC_Y * 0.5)), ConvertMapIsoY((Y * PIC_Y) + (PIC_Y * 0.5), X * PIC_X), 3, X, Y
DrawAutoTile layer, ConvertMapIsoX((X * PIC_X) + (PIC_X * 0.5), (Y * PIC_Y) + (PIC_Y * 0.5)), ConvertMapIsoY((Y * PIC_Y) + (PIC_Y * 0.5), (X * PIC_X) + (PIC_X * 0.5)), 4, X, Y
End If
End With
' Error handler
Exit Sub
ErrorHandler:
HandleError "DrawMapTile", "modGraphics", Err.Number, Err.Description, Err.Source, Err.HelpContext
Err.Clear
Exit Sub
End Sub
Public Sub DrawMapFringeTile(ByVal X As Long, ByVal Y As Long, ByVal layer As Byte)
Dim rec As RECT
'Dim layer As Long
' If debug mode, handle error then exit out
If Options.Debug = 1 Then On Error GoTo ErrorHandler
With Map.Tile(X, Y)
If Autotile(X, Y).layer(layer).renderState = RENDER_STATE_NORMAL Then
' Draw normally
RenderTexture Tex_Tileset(.layer(layer).Tileset), ConvertMapIsoX(X * PIC_X, Y * PIC_Y), ConvertMapIsoY(Y * PIC_Y, X * PIC_X), .layer(layer).X * PIC_X, .layer(layer).Y * PIC_Y, PIC_X, PIC_Y, PIC_X, PIC_Y, -1
ElseIf Autotile(X, Y).layer(layer).renderState = RENDER_STATE_AUTOTILE Then
' Draw autotiles
DrawAutoTile layer, ConvertMapIsoX(X * PIC_X, Y * PIC_Y), ConvertMapIsoY(Y * PIC_Y, X * PIC_X), 1, X, Y
DrawAutoTile layer, ConvertMapIsoX((X * PIC_X) + (PIC_X * 0.5), Y * PIC_Y), ConvertMapIsoY(Y * PIC_Y, (X * PIC_X) + (PIC_X * 0.5)), 2, X, Y
DrawAutoTile layer, ConvertMapIsoX(X * PIC_X, (Y * PIC_Y) + (PIC_Y * 0.5)), ConvertMapIsoY((Y * PIC_Y) + (PIC_Y * 0.5), X * PIC_X), 3, X, Y
DrawAutoTile layer, ConvertMapIsoX((X * PIC_X) + (PIC_X * 0.5), (Y * PIC_Y) + (PIC_Y * 0.5)), ConvertMapIsoY((Y * PIC_Y) + (PIC_Y * 0.5), (X * PIC_X) + (PIC_X * 0.5)), 4, X, Y
End If
End With
' Error handler
Exit Sub
ErrorHandler:
HandleError "DrawMapFringeTile", "modGraphics", Err.Number, Err.Description, Err.Source, Err.HelpContext
Err.Clear
Exit Sub
End Sub
```
This is changing the rendering so we can render layer by layer instead of tile by tile
***
Find
```
RenderTexture Tex_Door, ConvertMapX(x2), ConvertMapY(y2), rec.Left, rec.Top, rec.Right - rec.Left, rec.Bottom - rec.Top, rec.Right - rec.Left, rec.Bottom - rec.Top, D3DColorRGBA(255, 255, 255, 255)
'Call DDS_BackBuffer.DrawFast(ConvertMapX(X2), ConvertMapY(Y2), DDS_Door, rec, DDDrawFAST_WAIT Or DDDrawFAST_SRCCOLORKEY)
```
Change it to
```
RenderTexture Tex_Door, ConvertMapIsoX(x2, y2), ConvertMapIsoY(y2, x2), rec.Left, rec.Top, rec.Right - rec.Left, rec.Bottom - rec.Top, rec.Right - rec.Left, rec.Bottom - rec.Top, D3DColorRGBA(255, 255, 255, 255)
```
***
Find
```
BloodCount = Tex_Blood.Width / 32
```
Change it to
```
BloodCount = Tex_Blood.Width / SIZE_X
```
***
Find
```
RenderTexture Tex_Blood, ConvertMapX(.X * PIC_X), ConvertMapY(.Y * PIC_Y), rec.Left, rec.Top, rec.Right - rec.Left, rec.Bottom - rec.Top, rec.Right - rec.Left, rec.Bottom - rec.Top, D3DColorRGBA(255, 255, 255, 255)
```
Change it to
```
RenderTexture Tex_Blood, ConvertMapIsoX(.X * PIC_X, .Y * PIC_Y), ConvertMapIsoY(.Y * PIC_Y, .X * PIC_X), rec.Left, rec.Top, rec.Right - rec.Left, rec.Bottom - rec.Top, rec.Right - rec.Left, rec.Bottom - rec.Top, D3DColorRGBA(255, 255, 255, 255)
```
***
Find
```
' no lock, default x + y
X = (AnimInstance(Index).X * 32) + 16 - (Width * 0.5)
Y = (AnimInstance(Index).Y * 32) + 16 - (Height * 0.5)
End If
X = ConvertMapX(X)
Y = ConvertMapY(Y)
```
Change it to
```
' no lock, default x + y
X = (AnimInstance(Index).X * PIC_X) + (PIC_X * 0.5) - (Width * 0.5)
Y = (AnimInstance(Index).Y * PIC_Y) + (PIC_Y * 0.5) - (Height * 0.5)
End If
X = ConvertMapIsoX(X, Y)
Y = ConvertMapIsoY(Y, X)
```
***
Find
```
If Tex_Item(PicNum).Width > 64 Then ' has more than 1 frame
With rec
.Top = 0
.Bottom = 32
.Left = (MapItem(ItemNum).Frame * 32)
.Right = .Left + 32
```
Change it to
```
If Tex_Item(PicNum).Width > (SIZE_X * 2) Then ' has more than 1 frame
With rec
.Top = 0
.Bottom = SIZE_Y
.Left = (MapItem(ItemNum).Frame * SIZE_X)
.Right = .Left + SIZE_X
```
***
Find
```
RenderTexture Tex_Item(PicNum), ConvertMapX(MapItem(ItemNum).X * PIC_X), ConvertMapY(MapItem(ItemNum).Y * PIC_Y), rec.Left, rec.Top, rec.Right - rec.Left, rec.Bottom - rec.Top, rec.Right - rec.Left, rec.Bottom - rec.Top, D3DColorRGBA(255, 255, 255, 255)
```
Change it to
```
RenderTexture Tex_Item(PicNum), ConvertMapIsoX(MapItem(ItemNum).X * PIC_X, MapItem(ItemNum).Y * PIC_Y), ConvertMapIsoY(MapItem(ItemNum).Y * PIC_Y, MapItem(ItemNum).X * PIC_X), rec.Left, rec.Top, rec.Right - rec.Left, rec.Bottom - rec.Top, rec.Right - rec.Left, rec.Bottom - rec.Top, D3DColorRGBA(255, 255, 255, 255)
```
***
Find
```
' Set base x + y, then the offset due to size
X = (MapResource(Resource_num).X * PIC_X) - (Tex_Resource(Resource_sprite).Width * 0.5) + 16
Y = (MapResource(Resource_num).Y * PIC_Y) - Tex_Resource(Resource_sprite).Height + 32
For i = 1 To Player_HighIndex
If IsPlaying(i) And GetPlayerMap(i) = GetPlayerMap(MyIndex) Then
If ConvertMapY(GetPlayerY(i)) < ConvertMapY(MapResource(Resource_num).Y) And ConvertMapY(GetPlayerY(i)) > ConvertMapY(MapResource(Resource_num).Y) - (Tex_Resource(Resource_sprite).Height) / 32 Then
If ConvertMapX(GetPlayerX(i)) >= ConvertMapX(MapResource(Resource_num).X) - ((Tex_Resource(Resource_sprite).Width * 0.5) / 32) And ConvertMapX(GetPlayerX(i)) <= ConvertMapX(MapResource(Resource_num).X) + ((Tex_Resource(Resource_sprite).Width * 0.5) / 32) Then
```
Change it to
```
' Set base x + y, then the offset due to size
X = (MapResource(Resource_num).X * PIC_X) - (Tex_Resource(Resource_sprite).Width * 0.5) + (PIC_X * 0.5)
Y = (MapResource(Resource_num).Y * PIC_Y) - Tex_Resource(Resource_sprite).Height + PIC_Y
For I = 1 To Player_HighIndex
If IsPlaying(I) And GetPlayerMap(I) = GetPlayerMap(MyIndex) Then
If ConvertMapIsoY(GetPlayerY(I), GetPlayerX(I)) < ConvertMapIsoY(MapResource(Resource_num).Y, MapResource(Resource_num).X) And ConvertMapIsoY(GetPlayerY(I), GetPlayerX(I)) > ConvertMapIsoY(MapResource(Resource_num).Y, MapResource(Resource_num).X) - (Tex_Resource(Resource_sprite).Height) / PIC_Y Then
If ConvertMapIsoX(GetPlayerX(I), GetPlayerY(I)) >= ConvertMapIsoX(MapResource(Resource_num).X, MapResource(Resource_num).Y) - ((Tex_Resource(Resource_sprite).Width * 0.5) / PIC_X) And ConvertMapIsoX(GetPlayerX(I), GetPlayerY(I)) <= ConvertMapIsoX(MapResource(Resource_num).X, MapResource(Resource_num).Y) + ((Tex_Resource(Resource_sprite).Width * 0.5) / PIC_X) Then
```
***
Find
```
If Resource < 1 Or Resource > NumResources Then Exit Sub
X = ConvertMapX(dX)
Y = ConvertMapY(dY)
```
Change it to
```
If Resource < 1 Or Resource > NumResources Then Exit Sub
X = ConvertMapIsoX(dX, dY)
Y = ConvertMapIsoY(dY, dX)
```
***
Find
```
RenderTexture Tex_Bars, ConvertMapX(tmpX), ConvertMapY(tmpY), sRect.Left, sRect.Top, sRect.Right - sRect.Left, sRect.Bottom - sRect.Top, sRect.Right - sRect.Left, sRect.Bottom - sRect.Top, D3DColorRGBA(255, 255, 255, 255)
```
Change it to
```
RenderTexture Tex_Bars, ConvertMapIsoX(tmpX, tmpY), ConvertMapIsoY(tmpY, tmpX), sRect.Left, sRect.Top, sRect.Right - sRect.Left, sRect.Bottom - sRect.Top, sRect.Right - sRect.Left, sRect.Bottom - sRect.Top, D3DColorRGBA(255, 255, 255, 255)
```
***
Find
```
RenderTexture Tex_Bars, ConvertMapX(tmpX), ConvertMapY(tmpY), sRect.Left, sRect.Top, sRect.Right - sRect.Left, sRect.Bottom - sRect.Top, sRect.Right - sRect.Left, sRect.Bottom - sRect.Top, D3DColorRGBA(255, 255, 255, 255)
```
Change it to
```
RenderTexture Tex_Bars, ConvertMapIsoX(tmpX, tmpY), ConvertMapIsoY(tmpY, tmpX), sRect.Left, sRect.Top, sRect.Right - sRect.Left, sRect.Bottom - sRect.Top, sRect.Right - sRect.Left, sRect.Bottom - sRect.Top, D3DColorRGBA(255, 255, 255, 255)
```
***
Find
```
RenderTexture Tex_Bars, ConvertMapX(tmpX), ConvertMapY(tmpY), sRect.Left, sRect.Top, sRect.Right - sRect.Left, sRect.Bottom - sRect.Top, sRect.Right - sRect.Left, sRect.Bottom - sRect.Top, D3DColorRGBA(255, 255, 255, 255)
```
Change it to
```
RenderTexture Tex_Bars, ConvertMapIsoX(tmpX, tmpY), ConvertMapIsoY(tmpY, tmpX), sRect.Left, sRect.Top, sRect.Right - sRect.Left, sRect.Bottom - sRect.Top, sRect.Right - sRect.Left, sRect.Bottom - sRect.Top, D3DColorRGBA(255, 255, 255, 255)
```
***
Find
```
RenderTexture Tex_Bars, ConvertMapX(tmpX), ConvertMapY(tmpY), sRect.Left, sRect.Top, sRect.Right - sRect.Left, sRect.Bottom - sRect.Top, sRect.Right - sRect.Left, sRect.Bottom - sRect.Top, D3DColorRGBA(255, 255, 255, 255)
```
Change it to
```
RenderTexture Tex_Bars, ConvertMapIsoX(tmpX, tmpY), ConvertMapIsoY(tmpY, tmpX), sRect.Left, sRect.Top, sRect.Right - sRect.Left, sRect.Bottom - sRect.Top, sRect.Right - sRect.Left, sRect.Bottom - sRect.Top, D3DColorRGBA(255, 255, 255, 255)
```
***
Find
```
RenderTexture Tex_Bars, ConvertMapX(tmpX), ConvertMapY(tmpY), sRect.Left, sRect.Top, sRect.Right - sRect.Left, sRect.Bottom - sRect.Top, sRect.Right - sRect.Left, sRect.Bottom - sRect.Top, D3DColorRGBA(255, 255, 255, 255)
```
Change it to
```
RenderTexture Tex_Bars, ConvertMapIsoX(tmpX, tmpY), ConvertMapIsoY(tmpY, tmpX), sRect.Left, sRect.Top, sRect.Right - sRect.Left, sRect.Bottom - sRect.Top, sRect.Right - sRect.Left, sRect.Bottom - sRect.Top, D3DColorRGBA(255, 255, 255, 255)
```
***
Find
```
RenderTexture Tex_Bars, ConvertMapX(tmpX), ConvertMapY(tmpY), sRect.Left, sRect.Top, sRect.Right - sRect.Left, sRect.Bottom - sRect.Top, sRect.Right - sRect.Left, sRect.Bottom - sRect.Top, D3DColorRGBA(255, 255, 255, 255)
```
Change it to
```
RenderTexture Tex_Bars, ConvertMapIsoX(tmpX, tmpY), ConvertMapIsoY(tmpY, tmpX), sRect.Left, sRect.Top, sRect.Right - sRect.Left, sRect.Bottom - sRect.Top, sRect.Right - sRect.Left, sRect.Bottom - sRect.Top, D3DColorRGBA(255, 255, 255, 255)
```
***
Find
```
RenderTexture Tex_Bars, ConvertMapX(tmpX), ConvertMapY(tmpY), sRect.Left, sRect.Top, sRect.Right - sRect.Left, sRect.Bottom - sRect.Top, sRect.Right - sRect.Left, sRect.Bottom - sRect.Top, D3DColorRGBA(255, 255, 255, 255)
```
Change it to
```
RenderTexture Tex_Bars, ConvertMapIsoX(tmpX, tmpY), ConvertMapIsoY(tmpY, tmpX), sRect.Left, sRect.Top, sRect.Right - sRect.Left, sRect.Bottom - sRect.Top, sRect.Right - sRect.Left, sRect.Bottom - sRect.Top, D3DColorRGBA(255, 255, 255, 255)
```
***
Find
```
RenderTexture Tex_Bars, ConvertMapX(tmpX), ConvertMapY(tmpY), sRect.Left, sRect.Top, sRect.Right - sRect.Left, sRect.Bottom - sRect.Top, sRect.Right - sRect.Left, sRect.Bottom - sRect.Top, D3DColorRGBA(255, 255, 255, 255)
```
Change it to
```
RenderTexture Tex_Bars, ConvertMapIsoX(tmpX, tmpY), ConvertMapIsoY(tmpY, tmpX), sRect.Left, sRect.Top, sRect.Right - sRect.Left, sRect.Bottom - sRect.Top, sRect.Right - sRect.Left, sRect.Bottom - sRect.Top, D3DColorRGBA(255, 255, 255, 255)
```
***
Find
```
With dRect
.Top = HotbarTop + GUI(GUI_HOTBAR).Y
.Left = HotbarLeft + ((HotbarOffsetX + 32) * ((i - 1) Mod MAX_HOTBAR)) + GUI(GUI_HOTBAR).X
.Bottom = .Top + 32
.Right = .Left + 32
End With
With destRect
.Top = HotbarTop
.Left = HotbarLeft + (HotbarOffsetX + 32) * ((i - 1) Mod MAX_HOTBAR)
.Bottom = .Top + 32
.Right = .Left + 32
End With
With sRect
.Top = 0
.Left = 0
.Bottom = 32
.Right = 32
End With
```
Change it to
```
With dRect
.Top = HotbarTop + GUI(GUI_HOTBAR).Y
.Left = HotbarLeft + ((HotbarOffsetX + SIZE_X) * ((I - 1) Mod MAX_HOTBAR)) + GUI(GUI_HOTBAR).X
.Bottom = .Top + SIZE_Y
.Right = .Left + SIZE_Y
End With
With destRect
.Top = HotbarTop
.Left = HotbarLeft + (HotbarOffsetX + 32) * ((i - 1) Mod MAX_HOTBAR)
.Left = HotbarLeft + (HotbarOffsetX + SIZE_X) * ((I - 1) Mod MAX_HOTBAR)
.Bottom = .Top + SIZE_Y
.Right = .Left + SIZE_Y
End With
With sRect
.Top = 0
.Left = 0
.Bottom = SIZE_Y
.Right = SIZE_X
End With
```
***
Find
```
With sRect
.Top = 0
.Left = 0
.Bottom = 32
.Right = 32
End With
If Len(Spell(Hotbar(i).Slot).Name) > 0 Then
If Spell(Hotbar(i).Slot).Icon > 0 Then
```
Change it to
```
With sRect
.Top = 0
.Left = 0
.Bottom = SIZE_Y
.Right = SIZE_X
End With
If Len(Spell(Hotbar(i).Slot).Name) > 0 Then
If Spell(Hotbar(i).Slot).Icon > 0 Then
```
***
Find
```
For n = 1 To MAX_PLAYER_SPELLS
If PlayerSpells(n) = Hotbar(i).Slot Then
' has spell
If Not SpellCD(i) = 0 Then
sRect.Left = 32
sRect.Right = 64
End If
End If
Next
```
Change it to
```
For n = 1 To MAX_PLAYER_SPELLS
If PlayerSpells(n) = Hotbar(i).Slot Then
' has spell
If Not SpellCD(I) = 0 Then
sRect.Left = SIZE_X
sRect.Right = SIZE_X * 2
End If
End If
Next
```
***
Find
```
' Calculate the X
X = GetPlayerX(Index) * PIC_X + Player(Index).xOffset - ((Tex_Character(Sprite).Width / 4 - 32) * 0.5)
' Is the player's height more than 32..?
If (Tex_Character(Sprite).Height) > 32 Then
' Create a 32 pixel offset for larger sprites
Y = GetPlayerY(Index) * PIC_Y + Player(Index).yOffset - ((Tex_Character(Sprite).Height / 4) - 32)
Else
' Proceed as normal
Y = GetPlayerY(Index) * PIC_Y + Player(Index).yOffset
End If
' render the actual sprite
Call DrawSprite(Sprite, X, Y, rec)
```
Change it to
```
' Calculate the X
X = GetPlayerX(Index) * PIC_X + Player(Index).xOffset - ((Tex_Character(Sprite).Width / 4 - PIC_X) * 0.5)
' Is the player's height more than PIC_Y..?
If (Tex_Character(Sprite).Height) > PIC_Y Then
' Create a 32 pixel offset for larger sprites
Y = GetPlayerY(Index) * PIC_Y + Player(Index).yOffset - ((Tex_Character(Sprite).Height / 4) - PIC_Y)
Else
' Proceed as normal
Y = GetPlayerY(Index) * PIC_Y + Player(Index).yOffset
End If
X = X - (PIC_X * 0.75)
Y = Y - (PIC_Y * 0.5)
' render the actual sprite
Call DrawSprite(Sprite, X, Y, rec)
```
***
Find
```
' Calculate the X
X = MapNpc(MapNpcNum).X * PIC_X + MapNpc(MapNpcNum).xOffset - ((Tex_Character(Sprite).Width / 4 - 32) * 0.5)
' Is the player's height more than 32..?
If (Tex_Character(Sprite).Height / 4) > 32 Then
' Create a 32 pixel offset for larger sprites
Y = MapNpc(MapNpcNum).Y * PIC_Y + MapNpc(MapNpcNum).yOffset - ((Tex_Character(Sprite).Height / 4) - 32)
Else
' Proceed as normal
Y = MapNpc(MapNpcNum).Y * PIC_Y + MapNpc(MapNpcNum).yOffset
End If
Call DrawSprite(Sprite, X, Y, rec)
```
Change it to
```
' Calculate the X
X = MapNpc(MapNpcNum).X * PIC_X + MapNpc(MapNpcNum).xOffset - ((Tex_Character(Sprite).Width / 4 - PIC_X) * 0.5)
' Is the player's height more than 32..?
If (Tex_Character(Sprite).Height / 4) > PIC_Y Then
' Create a 32 pixel offset for larger sprites
Y = MapNpc(MapNpcNum).Y * PIC_Y + MapNpc(MapNpcNum).yOffset - ((Tex_Character(Sprite).Height / 4) - PIC_Y)
Else
' Proceed as normal
Y = MapNpc(MapNpcNum).Y * PIC_Y + MapNpc(MapNpcNum).yOffset
End If
X = X - (PIC_X * 0.75)
Y = Y - (PIC_Y * 0.5)
Call DrawSprite(Sprite, X, Y, rec)
```
***
Find
```
' clipping
X = ConvertMapX(x2)
Y = ConvertMapY(y2)
Width = (rec.Right - rec.Left)
Height = (rec.Bottom - rec.Top)
```
Change it to
```
' clipping
X = ConvertMapIsoX(x2, y2)
Y = ConvertMapIsoY(y2, x2)
Width = (rec.Right - rec.Left)
Height = (rec.Bottom - rec.Top)
```
***
Find
```
If Sprite < 1 Or Sprite > NumCharacters Then Exit Sub
X = ConvertMapX(x2)
Y = ConvertMapY(y2)
Width = (rec.Right - rec.Left)
Height = (rec.Bottom - rec.Top)
```
Change it to
```
If Sprite < 1 Or Sprite > NumCharacters Then Exit Sub
X = ConvertMapIsoX(x2, y2)
Y = ConvertMapIsoY(y2, x2)
Width = (rec.Right - rec.Left)
Height = (rec.Bottom - rec.Top)
```
***
Find
```
For X = 0 To ((Map.MaxX * 32) / 256) + 1
For Y = 0 To ((Map.MaxY * 32) / 256) + 1
RenderTexture Tex_Fog(fogNum), ConvertMapX((X * 256) + fogOffsetX), ConvertMapY((Y * 256) + fogOffsetY), 0, 0, 256, 256, 256, 256, color
```
Change it to
```
For X = 0 To ((Map.MaxX * PIC_X) / 256) + 1
For Y = 0 To ((Map.MaxY * PIC_Y) / 256) + 1
RenderTexture Tex_Fog(fogNum), ConvertMapIsoX((X * 256) + fogOffsetX, (Y * 256) + fogOffsetY), ConvertMapIsoY((Y * 256) + fogOffsetY, (X * 256) + fogOffsetX), 0, 0, 256, 256, 256, 256, color
```
***
Find
```
RenderTexture Tex_White, 0, 0, 0, 0, frmMain.ScaleWidth, frmMain.ScaleHeight, 32, 32, color
```
Change it to
```
RenderTexture Tex_White, ScreenX, ScreenY, 0, 0, ScreenWidth, ScreenHeight, 32, 32, color
```
***
Find
```
If itempic < 1 Or itempic > numitems Then Exit Sub
MaxFrames = (Tex_Item(itempic).Width * 0.5) / 32 ' Work out how many frames there are. /2 because of inventory icons as well as ingame
If MapItem(i).Frame < MaxFrames - 1 Then
MapItem(i).Frame = MapItem(i).Frame + 1
```
Change it to
```
MaxFrames = (Tex_Item(itempic).Width * 0.5) / SIZE_X ' Work out how many frames there are. /2 because of inventory icons as well as ingame
If MapItem(I).Frame < MaxFrames - 1 Then
MapItem(I).Frame = MapItem(I).Frame + 1
```
***
Find
```
If itempic > 0 And itempic <= numitems Then
If Tex_Item(itempic).Width > 64 Then
MaxFrames = (Tex_Item(itempic).Width * 0.5) / 32 ' Work out how many frames there are. /2 because of inventory icons as well as ingame
If InvItemFrame(i) < MaxFrames - 1 Then
InvItemFrame(i) = InvItemFrame(i) + 1
Else
InvItemFrame(i) = 1
End If
With rec
.Top = 0
.Bottom = 32
.Left = (Tex_Item(itempic).Width * 0.5) + (InvItemFrame(i) * 32) ' middle to get the start of inv gfx, then +32 for each frame
.Right = .Left + 32
End With
With rec_pos
.Top = InvTop + ((InvOffsetY + 32) * ((i - 1) \ InvColumns))
.Bottom = .Top + PIC_Y
.Left = InvLeft + ((InvOffsetX + 32) * (((i - 1) Mod InvColumns)))
.Right = .Left + PIC_X
End With
' We'll now re-Draw the item, and place the currency value over it again 😛
```
Change it to
```
If itempic > 0 And itempic <= numitems Then
If Tex_Item(itempic).Width > 64 Then
MaxFrames = (Tex_Item(itempic).Width * 0.5) / SIZE_X ' Work out how many frames there are. /2 because of inventory icons as well as ingame
If InvItemFrame(I) < MaxFrames - 1 Then
InvItemFrame(I) = InvItemFrame(I) + 1
Else
InvItemFrame(i) = 1
End If
With rec
.Top = 0
.Bottom = SIZE_Y
.Left = (Tex_Item(itempic).Width * 0.5) + (InvItemFrame(I) * SIZE_X) ' middle to get the start of inv gfx, then +32 for each frame
.Right = .Left + SIZE_X
End With
With rec_pos
.Top = InvTop + ((InvOffsetY + SIZE_Y) * ((I - 1) \ InvColumns))
.Bottom = .Top + SIZE_Y
.Left = InvLeft + ((InvOffsetX + SIZE_X) * (((I - 1) Mod InvColumns)))
.Right = .Left + SIZE_X
End With
' We'll now re-Draw the item, and place the currency value over it again 😛
```
***
Find
```
With rec
.Top = 0
.Bottom = 32
.Left = 32
.Right = 64
End With
With rec_pos
.Top = InvTop + ((InvOffsetY + 32) * ((i - 1) \ InvColumns))
.Bottom = .Top + PIC_Y
.Left = InvLeft + ((InvOffsetX + 32) * (((i - 1) Mod InvColumns)))
.Right = .Left + PIC_X
End With
RenderTextureByRects Tex_Item(itempic), rec, rec_pos, GuiTrans
```
Change it to
```
With rec
.Top = 0
.Bottom = SIZE_Y
.Left = SIZE_X
.Right = SIZE_X * 2
End With
With rec_pos
.Top = InvTop + ((InvOffsetY + SIZE_Y) * ((I - 1) \ InvColumns))
.Bottom = .Top + SIZE_Y
.Left = InvLeft + ((InvOffsetX + SIZE_X) * (((I - 1) Mod InvColumns)))
.Right = .Left + SIZE_X
End With
RenderTextureByRects Tex_Item(itempic), rec, rec_pos, GuiTrans
```
***
Find
```
If itempic > 0 And itempic <= numitems Then
With rec
.Top = 0
.Bottom = 32
.Left = 32
.Right = 64
End With
With rec_pos
.Top = GUI(GUI_TRADE).Y + TrdTop + ((TrdOffsetY + 32) * ((i - 1) \ TrdColumns))
.Bottom = .Top + PIC_Y
.Left = GUI(GUI_TRADE).X + TrdLeft + ((TrdOffsetX + 32) * (((i - 1) Mod TrdColumns)))
.Right = .Left + PIC_X
End With
RenderTextureByRects Tex_Item(itempic), rec, rec_pos, GuiTrans
```
Change it to
```
If itempic > 0 And itempic <= numitems Then
With rec
.Top = 0
.Bottom = SIZE_Y
.Left = SIZE_X
.Right = SIZE_X * 2
End With
With rec_pos
.Top = GUI(GUI_TRADE).Y + TrdTop + ((TrdOffsetY + SIZE_Y) * ((I - 1) \ TrdColumns))
.Bottom = .Top + SIZE_Y
.Left = GUI(GUI_TRADE).X + TrdLeft + ((TrdOffsetX + SIZE_X) * (((I - 1) Mod TrdColumns)))
.Right = .Left + SIZE_X
End With
RenderTextureByRects Tex_Item(itempic), rec, rec_pos, GuiTrans
```
***
Find
```
If itempic > 0 And itempic <= numitems Then
With rec
.Top = 0
.Bottom = 32
.Left = 32
.Right = 64
End With
With rec_pos
.Top = GUI(GUI_TRADE).Y + TrdTop + ((TrdOffsetY + 32) * ((i - 1) \ TrdColumns))
.Bottom = .Top + PIC_Y
.Left = GUI(GUI_TRADE).X + (GUI(GUI_TRADE).Width * 0.5) - 6 + TrdLeft + ((TrdOffsetX + 32) * (((i - 1) Mod TrdColumns)))
.Right = .Left + PIC_X
End With
RenderTextureByRects Tex_Item(itempic), rec, rec_pos, GuiTrans
```
Change it to
```
If itempic > 0 And itempic <= numitems Then
With rec
.Top = 0
.Bottom = SIZE_Y
.Left = SIZE_X
.Right = SIZE_X * 2
End With
With rec_pos
.Top = GUI(GUI_TRADE).Y + TrdTop + ((TrdOffsetY + SIZE_Y) * ((I - 1) \ TrdColumns))
.Bottom = .Top + SIZE_Y
.Left = GUI(GUI_TRADE).X + (GUI(GUI_TRADE).Width * 0.5) - 6 + TrdLeft + ((TrdOffsetX + SIZE_X) * (((I - 1) Mod TrdColumns)))
.Right = .Left + SIZE_X
End With
RenderTextureByRects Tex_Item(itempic), rec, rec_pos, GuiTrans
```
***
Find
```
With rec
.Top = 0
.Bottom = 32
.Left = 0
.Right = 32
End With
If Not SpellCD(i) = 0 Then
rec.Left = 32
rec.Right = 64
End If
With rec_pos
.Top = SpellTop + ((SpellOffsetY + 32) * ((i - 1) \ SpellColumns)) + GUI(GUI_SKILLS).Y
.Bottom = .Top + PIC_Y
.Left = SpellLeft + ((SpellOffsetX + 32) * (((i - 1) Mod SpellColumns))) + GUI(GUI_SKILLS).X
.Right = .Left + PIC_X
End With
RenderTextureByRects Tex_SpellIcon(SpellIcon), rec, rec_pos, GuiTrans
```
Change it to
```
With rec
.Top = 0
.Bottom = SIZE_Y
.Left = 0
.Right = SIZE_X
End With
If Not SpellCD(I) = 0 Then
rec.Left = SIZE_X
rec.Right = SIZE_X * 2
End If
With rec_pos
.Top = SpellTop + ((SpellOffsetY + SIZE_Y) * ((I - 1) \ SpellColumns)) + GUI(GUI_SKILLS).Y
.Bottom = .Top + SIZE_Y
.Left = SpellLeft + ((SpellOffsetX + SIZE_X) * (((I - 1) Mod SpellColumns))) + GUI(GUI_SKILLS).X
.Right = .Left + SIZE_X
End With
RenderTextureByRects Tex_SpellIcon(SpellIcon), rec, rec_pos, GuiTrans
```
***
Find
```
With rec
.Top = 0
.Bottom = 32
.Left = 0
.Right = 32
End With
With rec_pos
.Top = GUI(GUI_SHOP).Y + ShopTop + ((ShopOffsetY + 32) * ((i - 1) \ ShopColumns))
.Bottom = .Top + PIC_Y
.Left = GUI(GUI_SHOP).X + ShopLeft + ((ShopOffsetX + 32) * (((i - 1) Mod ShopColumns)))
.Right = .Left + PIC_X
End With
RenderTextureByRects Tex_Item(itempic), rec, rec_pos, GuiTrans
```
Change it to
```
With rec
.Top = 0
.Bottom = SIZE_Y
.Left = 0
.Right = SIZE_X
End With
With rec_pos
.Top = GUI(GUI_SHOP).Y + ShopTop + ((ShopOffsetY + SIZE_Y) * ((I - 1) \ ShopColumns))
.Bottom = .Top + SIZE_Y
.Left = GUI(GUI_SHOP).X + ShopLeft + ((ShopOffsetX + SIZE_X) * (((I - 1) Mod ShopColumns)))
.Right = .Left + SIZE_X
End With
RenderTextureByRects Tex_Item(itempic), rec, rec_pos, GuiTrans
```
***
Find
```
With rec
.Top = 0
.Bottom = 32
.Left = 0
.Right = 32
End With
With rec_pos
.Top = InvTop + ((InvOffsetY + 32) * ((i - 1) \ InvColumns)) + GUI(GUI_INVENTORY).Y
.Bottom = .Top + PIC_Y
.Left = InvLeft + ((InvOffsetX + 32) * (((i - 1) Mod InvColumns))) + GUI(GUI_SKILLS).X
.Right = .Left + PIC_X
End With
If UsedIngredients(i) = True Then RenderTexture Tex_GUI(GUI_DRAGBOX), rec_pos.Left, rec_pos.Top, 0, 0, PIC_X, PIC_Y, PIC_X + 4, PIC_Y + 4, D3DColorRGBA(255, 255, 255, GuiTrans * 0.25)
```
Change it to
```
With rec
.Top = 0
.Bottom = SIZE_Y
.Left = 0
.Right = SIZE_X
End With
With rec_pos
.Top = InvTop + ((InvOffsetY + SIZE_Y) * ((I - 1) \ InvColumns)) + GUI(GUI_INVENTORY).Y
.Bottom = .Top + SIZE_Y
.Left = InvLeft + ((InvOffsetX + SIZE_X) * (((I - 1) Mod InvColumns))) + GUI(GUI_SKILLS).X
.Right = .Left + SIZE_X
End With
If UsedIngredients(i) = True Then RenderTexture Tex_GUI(GUI_DRAGBOX), rec_pos.Left, rec_pos.Top, 0, 0, PIC_X, PIC_Y, PIC_X + 4, PIC_Y + 4, D3DColorRGBA(255, 255, 255, GuiTrans * 0.25)
```
***
Find
```
With destRect
.x1 = (EditorTileX * 32) - sRect.Left
.x2 = (EditorTileWidth * 32) + .x1
.y1 = (EditorTileY * 32) - sRect.Top
.y2 = (EditorTileHeight * 32) + .y1
End With
DrawSelectionBox destRect
```
Change it to
```
With destRect
.x1 = (EditorTileX * PIC_X) - sRect.Left
.x2 = (EditorTileWidth * PIC_X) + .x1
.y1 = (EditorTileY * PIC_Y) - sRect.Top
.y2 = (EditorTileHeight * PIC_Y) + .y1
End With
DrawSelectionBox destRect
```
***
Find
```
If frmDev.optBlock.value Then Exit Sub
With rec
.Top = 0
.Bottom = .Top + PIC_Y
.Left = 0
.Right = .Left + PIC_X
End With
RenderTexture Tex_Misc, ConvertMapX(CurX * PIC_X), ConvertMapY(CurY * PIC_Y), rec.Left, rec.Top, rec.Right - rec.Left, rec.Bottom - rec.Top, rec.Right - rec.Left, rec.Bottom - rec.Top, D3DColorRGBA(255, 255, 255, 255)
```
Change it to
```
If frmDev.optBlock.value Then Exit Sub
With drec
.Top = ConvertMapIsoY(CurY * PIC_Y, CurX * PIC_X)
.Bottom = .Top + PIC_Y
.Left = ConvertMapIsoX(CurX * PIC_X, CurY * PIC_Y)
.Right = .Left + PIC_X
End With
With srec
.Top = 0
.Bottom = .Top + SIZE_Y
.Left = 0
.Right = .Left + SIZE_X
End With
RenderTextureByRects Tex_Misc, srec, drec, 255
```
***
Find
```
' blit lower tiles
If NumTileSets > 0 Then
For X = TileView.Left To TileView.Right
For Y = TileView.Top To TileView.Bottom
If IsValidMapPoint(X, Y) Then
Call DrawMapTile(X, Y)
End If
Next
Next
End If
```
Change it to
```
' blit lower tiles
If NumTileSets > 0 Then
For indLayer = MapLayer.Ground To MapLayer.Mask5
For X = TileView.Left To TileView.Right
For Y = TileView.Top To TileView.Bottom
If IsValidMapPoint(X, Y) Then
Call DrawMapTile(X, Y, indLayer)
End If
Next
Next
Next
End If
```
***
Find
```
' blit out upper tiles
If NumTileSets > 0 Then
For X = TileView.Left To TileView.Right
For Y = TileView.Top To TileView.Bottom
If IsValidMapPoint(X, Y) Then
Call DrawMapFringeTile(X, Y)
End If
Next
Next
End If
```
Change it to
```
' blit out upper tiles
If NumTileSets > 0 Then
For indLayer = MapLayer.Fringe To MapLayer.Fringe5
For X = TileView.Left To TileView.Right
For Y = TileView.Top To TileView.Bottom
If IsValidMapPoint(X, Y) Then
Call DrawMapFringeTile(X, Y, indLayer)
End If
Next
Next
Next
End If
```
***
Find
```
' Draw the target icon
If myTarget > 0 Then
If myTargetType = TARGET_TYPE_PLAYER Then
DrawTarget (Player(myTarget).X * 32) + Player(myTarget).xOffset, (Player(myTarget).Y * 32) + Player(myTarget).yOffset
ElseIf myTargetType = TARGET_TYPE_NPC Then
DrawTarget (MapNpc(myTarget).X * 32) + MapNpc(myTarget).xOffset, (MapNpc(myTarget).Y * 32) + MapNpc(myTarget).yOffset
End If
End If
```
Change it to
```
' Draw the target icon
If myTarget > 0 Then
If myTargetType = TARGET_TYPE_PLAYER Then
DrawTarget (Player(myTarget).X * PIC_X) + Player(myTarget).xOffset, (Player(myTarget).Y * PIC_Y) + Player(myTarget).yOffset
ElseIf myTargetType = TARGET_TYPE_NPC Then
DrawTarget (MapNpc(myTarget).X * PIC_X) + MapNpc(myTarget).xOffset, (MapNpc(myTarget).Y * PIC_Y) + MapNpc(myTarget).yOffset
End If
End If
```
***
Find
```
DrawHover TARGET_TYPE_PLAYER, i, (Player(i).X * 32) + Player(i).xOffset, (Player(i).Y * 32) + Player(i).yOffset
```
Change it to
```
DrawHover TARGET_TYPE_PLAYER, I, (Player(I).X * PIC_X) + Player(I).xOffset, (Player(I).Y * PIC_Y) + Player(I).yOffset
```
***
Find
```
If myTargetType = TARGET_TYPE_NPC And myTarget = i Then
' dont render lol
Else
DrawHover TARGET_TYPE_NPC, i, (MapNpc(i).X * 32) + MapNpc(i).xOffset, (MapNpc(i).Y * 32) + MapNpc(i).yOffset
End If
End If
End If
Next
If DrawThunder > 0 Then RenderTexture Tex_White, 0, 0, 0, 0, frmMain.ScaleWidth, frmMain.ScaleHeight, 32, 32, D3DColorRGBA(255, 255, 255, 160): DrawThunder = DrawThunder - 1
' rec_pos
With rec_pos
.Bottom = screenY
.Right = screenX
End With
With srcRect
.x1 = 0
.x2 = (MAX_MAPX + 1) * PIC_X ' frmMain.ScaleWidth
.y1 = 0
.y2 = (MAX_MAPY + 1) * PIC_Y ' frmMain.ScaleHeight
End With
With destRect
.x1 = 0
.x2 = .x1 + screenX
.y1 = 0
.y2 = .y1 + screenY
End With
```
Change it to
```
If myTargetType = TARGET_TYPE_NPC And myTarget = i Then
' dont render lol
Else
DrawHover TARGET_TYPE_NPC, I, (MapNpc(I).X * PIC_X) + MapNpc(I).xOffset, (MapNpc(I).Y * PIC_Y) + MapNpc(I).yOffset
End If
End If
End If
Next
If DrawThunder > 0 Then RenderTexture Tex_White, ScreenX, ScreenY, 0, 0, ScreenWidth, ScreenHeight, PIC_X, PIC_Y, D3DColorRGBA(255, 255, 255, 160): DrawThunder = DrawThunder - 1
' rec_pos
With rec_pos
.Bottom = WindowHeight
.Right = WindowWidth
End With
With srcRect
.x1 = 0
.x2 = WindowWidth
.y1 = 0
.y2 = WindowHeight
End With
With destRect
.x1 = 0
.x2 = WindowWidth
.y1 = 0
.y2 = WindowHeight
End With
```
***
Find
```
If FadeAmount > 0 Then RenderTexture Tex_Fade, 0, 0, 0, 0, screenX, screenY, 32, 32, D3DColorRGBA(255, 255, 255, FadeAmount)
If FlashTimer > GetTick Then RenderTexture Tex_White, 0, 0, 0, 0, screenX, screenY, 32, 32, -1
```
Change it to
```
If FadeAmount > 0 Then RenderTexture Tex_Fade, ScreenX, ScreenY, 0, 0, ScreenWidth, ScreenHeight, SIZE_X, SIZE_Y, D3DColorRGBA(255, 255, 255, FadeAmount)
If FlashTimer > GetTick Then RenderTexture Tex_White, ScreenX, ScreenY, 0, 0, ScreenWidth, ScreenHeight, SIZE_X, SIZE_Y, -1
```
***
Find
```
Direct3D_Window.BackBufferWidth = frmMain.ScaleWidth 'Match the backbuffer width with the display width
Direct3D_Window.BackBufferHeight = frmMain.ScaleHeight 'Match the backbuffer height with the display height
```
Change it to
```
Direct3D_Window.BackBufferWidth = WindowWidth 'Match the backbuffer width with the display width
Direct3D_Window.BackBufferHeight = WindowHeight 'Match the backbuffer height with the display height
```
***
Find
```
Public Sub UpdateCamera()
Dim offsetX As Long
Dim offsetY As Long
Dim StartX As Long
Dim StartY As Long
Dim EndX As Long
Dim EndY As Long
' If debug mode, handle error then exit out
If Options.Debug = 1 Then On Error GoTo ErrorHandler
If MyIndex = 0 Then Exit Sub
offsetX = 0 ' Player(MyIndex).xOffset + PIC_X
offsetY = 0 ' Player(MyIndex).yOffset + PIC_Y
StartX = GetPlayerX(MyIndex) - StartXValue
StartY = GetPlayerY(MyIndex) - StartYValue
If Player(MyIndex).Dir = DIR_RIGHT Then StartX = StartX - 1
If Player(MyIndex).Dir = DIR_DOWN Then StartY = StartY - 1
If Player(MyIndex).Dir = DIR_LEFT Then
offsetX = offsetX
End If
If StartX >= 0 Then
If StartX + MAX_MAPX < Map.MaxX Then
If Player(MyIndex).Dir = DIR_LEFT Then
offsetX = Player(MyIndex).xOffset
ElseIf Player(MyIndex).Dir = DIR_RIGHT Then
offsetX = PIC_X + Player(MyIndex).xOffset
End If
End If
End If
If StartY >= 0 Then
If StartY + MAX_MAPY < Map.MaxY Then
If Player(MyIndex).Dir = DIR_UP Then
offsetY = Player(MyIndex).yOffset
ElseIf Player(MyIndex).Dir = DIR_DOWN Then
offsetY = PIC_Y + Player(MyIndex).yOffset
End If
End If
End If
If StartX < 0 Then StartX = 0
If StartY < 0 Then StartY = 0
If MAX_MAPX >= Map.MaxX Then StartX = (Map.MaxX * 0.5) - (MAX_MAPX * 0.5)
If MAX_MAPY >= Map.MaxY Then StartY = (Map.MaxY * 0.5) - (MAX_MAPY * 0.5)
EndX = StartX + MAX_MAPX
EndY = StartY + MAX_MAPY
If MAX_MAPX < Map.MaxX Then
If EndX > Map.MaxX Then StartX = Map.MaxX - MAX_MAPX: EndX = StartX + MAX_MAPX
End If
If MAX_MAPY < Map.MaxY Then
If EndY > Map.MaxY Then StartY = Map.MaxY - MAX_MAPY: EndY = StartY + MAX_MAPY
End If
With TileView
.Top = StartY
.Bottom = EndY + 2
.Left = StartX
.Right = EndX + 2
End With
With Camera
.Top = offsetY
.Bottom = .Top + screenY
.Left = offsetX
.Right = .Left + screenX
End With
UpdateDrawMapName
' Error handler
Exit Sub
ErrorHandler:
HandleError "UpdateCamera", "modGraphics", Err.Number, Err.Description, Err.Source, Err.HelpContext
Err.Clear
Exit Sub
End Sub
```
Change it to
```
Public Sub UpdateCamera()
Dim startX As Long
Dim startY As Long
Dim EndX As Long
Dim EndY As Long
Dim X As Long, Y As Long
X = GetPlayerX(MyIndex)
Y = GetPlayerY(MyIndex)
startX = (X - MAX_MAPX) ' (X - (StartXValue * 2))
startY = (Y - MAX_MAPY) ' (Y - (StartYValue * 2))
If Player(MyIndex).Dir = DIR_RIGHT Then startX = startX - 1
If Player(MyIndex).Dir = DIR_DOWN Then startY = startY - 1
If startX < 0 Then startX = 0
If startY < 0 Then startY = 0
If MAX_MAPX >= Map.MaxX Then startX = (Map.MaxX * 0.5) - (MAX_MAPX * 0.5)
If MAX_MAPY >= Map.MaxY Then startY = (Map.MaxY * 0.5) - (MAX_MAPY * 0.5)
EndX = (X + MAX_MAPX) ' (X + (StartXValue * 2))
EndY = (Y + MAX_MAPY) ' (Y + (StartYValue * 2))
With TileView
.Top = startY
.Bottom = EndY + 2
.Left = startX
.Right = EndX + 2
End With
Dim offsetX As Long, offsetY As Long
With Player(MyIndex)
offsetX = ((X * PIC_X) - HalfX) + .xOffset
offsetY = ((Y * PIC_Y) - HalfY) + .yOffset
End With
' Convert Cartesian Offset to Isometric
Dim tmpOffsetX As Long, tmpOffsetY As Long
tmpOffsetX = offsetX - (offsetY * 2)
tmpOffsetY = offsetY + (offsetX * 0.5)
offsetX = tmpOffsetX * 0.5
offsetY = tmpOffsetY * 0.5
With Camera
.Top = offsetY
.Bottom = .Top + ScreenHeight
.Left = offsetX
.Right = .Left + ScreenWidth
End With
UpdateDrawMapName
' Error handler
Exit Sub
ErrorHandler:
HandleError "UpdateCamera", "modGraphics", Err.Number, Err.Description, Err.Source, Err.HelpContext
Err.Clear
Exit Sub
End Sub
```
***
Remove
```
Public Function ConvertMapX(ByVal X As Long) As Long
' If debug mode, handle error then exit out
If Options.Debug = 1 Then On Error GoTo ErrorHandler
ConvertMapX = X - (TileView.Left * PIC_X) - Camera.Left
' Error handler
Exit Function
ErrorHandler:
HandleError "ConvertMapX", "modGraphics", Err.Number, Err.Description, Err.Source, Err.HelpContext
Err.Clear
Exit Function
End Function
Public Function ConvertMapY(ByVal Y As Long) As Long
' If debug mode, handle error then exit out
If Options.Debug = 1 Then On Error GoTo ErrorHandler
ConvertMapY = Y - (TileView.Top * PIC_Y) - Camera.Top
' Error handler
Exit Function
ErrorHandler:
HandleError "ConvertMapY", "modGraphics", Err.Number, Err.Description, Err.Source, Err.HelpContext
Err.Clear
Exit Function
End Function
```
***
Find
```
With dRect
.Top = GUI(GUI_BANK).Y + BankTop + ((BankOffsetY + 32) * ((i - 1) \ BankColumns))
.Bottom = .Top + PIC_Y
.Left = GUI(GUI_BANK).X + BankLeft + ((BankOffsetX + 32) * (((i - 1) Mod BankColumns)))
.Right = .Left + PIC_X
End With
RenderTextureByRects Tex_Item(Sprite), sRect, dRect, GuiTrans
```
Change it to
```
With dRect
.Top = GUI(GUI_BANK).Y + BankTop + ((BankOffsetY + SIZE_Y) * ((I - 1) \ BankColumns))
.Bottom = .Top + SIZE_Y
.Left = GUI(GUI_BANK).X + BankLeft + ((BankOffsetX + SIZE_X) * (((I - 1) Mod BankColumns)))
.Right = .Left + SIZE_X
End With
RenderTextureByRects Tex_Item(Sprite), sRect, dRect, GuiTrans
```
***
**NOTE:** For the events, I'm not entirely sure which variable to use in all the cases (some things need PIC_X/Y and some need SIZE_X/Y). I didn't test the events, I just looked at the code and guessed which variable to switch in at 2am, so don't be surprised if some of the variables need to be swapped.
Find
```
For i = 1 To Map.EventCount
If Map.Events(i).pageCount <= 0 Then
sRect.Top = 0
sRect.Bottom = 32
sRect.Left = 0
sRect.Right = 32
RenderTexture Tex_Selection, ConvertMapX(X), ConvertMapY(Y), sRect.Left, sRect.Right, sRect.Right - sRect.Left, sRect.Bottom - sRect.Top, sRect.Right - sRect.Left, sRect.Bottom - sRect.Top, D3DColorRGBA(255, 255, 255, 255)
GoTo nextevent
End If
Width = 32
Height = 32
X = Map.Events(i).X * 32
Y = Map.Events(i).Y * 32
X = ConvertMapX(X)
Y = ConvertMapY(Y)
```
Change it to
```
For i = 1 To Map.EventCount
If Map.Events(i).pageCount <= 0 Then
sRect.Top = 0
sRect.Bottom = SIZE_Y
sRect.Left = 0
sRect.Right = SIZE_X
RenderTexture Tex_Selection, ConvertMapIsoX(X, Y), ConvertMapIsoY(Y, X), sRect.Left, sRect.Right, sRect.Right - sRect.Left, sRect.Bottom - sRect.Top, sRect.Right - sRect.Left, sRect.Bottom - sRect.Top, D3DColorRGBA(255, 255, 255, 255)
GoTo nextevent
End If
Width = PIC_X
Height = PIC_Y
Dim tmpX As Long, tmpY As Long
tmpX = Map.Events(I).X * PIC_X
tmpY = Map.Events(I).Y * PIC_Y
X = ConvertMapIsoX(tmpX, tmpY)
Y = ConvertMapIsoY(tmpY, tmpX)
```
***
Find
```
Select Case Map.Events(i).Pages(1).GraphicType
Case 0
sRect.Top = 0
sRect.Bottom = 32
sRect.Left = 0
sRect.Right = 32
RenderTexture Tex_Selection, X, Y, sRect.Left, sRect.Top, sRect.Right - sRect.Left, sRect.Bottom - sRect.Top, sRect.Right - sRect.Left, sRect.Bottom - sRect.Top, D3DColorRGBA(255, 255, 255, 255)
Case 1
If Map.Events(i).Pages(1).Graphic > 0 And Map.Events(i).Pages(1).Graphic <= NumCharacters Then
sRect.Top = (Map.Events(i).Pages(1).GraphicY * (Tex_Character(Map.Events(i).Pages(1).Graphic).Height / 4))
sRect.Left = (Map.Events(i).Pages(1).GraphicX * (Tex_Character(Map.Events(i).Pages(1).Graphic).Width / 4))
sRect.Bottom = sRect.Top + 32
sRect.Right = sRect.Left + 32
RenderTexture Tex_Character(Map.Events(i).Pages(1).Graphic), X, Y, sRect.Left, sRect.Top, sRect.Right - sRect.Left, sRect.Bottom - sRect.Top, sRect.Right - sRect.Left, sRect.Bottom - sRect.Top, D3DColorRGBA(255, 255, 255, 255)
sRect.Top = 0
sRect.Bottom = 32
sRect.Left = 0
sRect.Right = 32
RenderTexture Tex_Selection, X, Y, sRect.Left, sRect.Top, sRect.Right - sRect.Left, sRect.Bottom - sRect.Top, sRect.Right - sRect.Left, sRect.Bottom - sRect.Top, D3DColorRGBA(255, 255, 255, 255)
Else
sRect.Top = 0
sRect.Bottom = 32
sRect.Left = 0
sRect.Right = 32
RenderTexture Tex_Selection, X, Y, sRect.Left, sRect.Top, sRect.Right - sRect.Left, sRect.Bottom - sRect.Top, sRect.Right - sRect.Left, sRect.Bottom - sRect.Top, D3DColorRGBA(255, 255, 255, 255)
End If
Case 2
If Map.Events(i).Pages(1).Graphic > 0 And Map.Events(i).Pages(1).Graphic < NumTileSets Then
sRect.Top = Map.Events(i).Pages(1).GraphicY * 32
sRect.Left = Map.Events(i).Pages(1).GraphicX * 32
sRect.Bottom = sRect.Top + 32
sRect.Right = sRect.Left + 32
RenderTexture Tex_Tileset(Map.Events(i).Pages(1).Graphic), X, Y, sRect.Left, sRect.Top, sRect.Right - sRect.Left, sRect.Bottom - sRect.Top, sRect.Right - sRect.Left, sRect.Bottom - sRect.Top, D3DColorRGBA(255, 255, 255, 255)
sRect.Top = 0
sRect.Bottom = 32
sRect.Left = 0
sRect.Right = 32
RenderTexture Tex_Selection, X, Y, sRect.Left, sRect.Top, sRect.Right - sRect.Left, sRect.Bottom - sRect.Top, sRect.Right - sRect.Left, sRect.Bottom - sRect.Top, D3DColorRGBA(255, 255, 255, 255)
Else
sRect.Top = 0
sRect.Bottom = 32
sRect.Left = 0
sRect.Right = 32
RenderTexture Tex_Selection, X, Y, sRect.Left, sRect.Top, sRect.Right - sRect.Left, sRect.Bottom - sRect.Top, sRect.Right - sRect.Left, sRect.Bottom - sRect.Top, D3DColorRGBA(255, 255, 255, 255)
End If
End Select
```
Change it to
```
Select Case Map.Events(i).Pages(1).GraphicType
Case 0
sRect.Top = 0
sRect.Bottom = SIZE_Y
sRect.Left = 0
sRect.Right = SIZE_X
RenderTexture Tex_Selection, X, Y, sRect.Left, sRect.Top, sRect.Right - sRect.Left, sRect.Bottom - sRect.Top, sRect.Right - sRect.Left, sRect.Bottom - sRect.Top, D3DColorRGBA(255, 255, 255, 255)
Case 1
If Map.Events(i).Pages(1).Graphic > 0 And Map.Events(i).Pages(1).Graphic <= NumCharacters Then
sRect.Top = (Map.Events(I).Pages(1).GraphicY * (Tex_Character(Map.Events(I).Pages(1).Graphic).Height / 4))
sRect.Left = (Map.Events(I).Pages(1).GraphicX * (Tex_Character(Map.Events(I).Pages(1).Graphic).Width / 4))
sRect.Bottom = sRect.Top + SIZE_Y
sRect.Right = sRect.Left + SIZE_X
RenderTexture Tex_Character(Map.Events(I).Pages(1).Graphic), X, Y, sRect.Left, sRect.Top, sRect.Right - sRect.Left, sRect.Bottom - sRect.Top, sRect.Right - sRect.Left, sRect.Bottom - sRect.Top, D3DColorRGBA(255, 255, 255, 255)
sRect.Top = 0
sRect.Bottom = SIZE_Y
sRect.Left = 0
sRect.Right = SIZE_X
RenderTexture Tex_Selection, X, Y, sRect.Left, sRect.Top, sRect.Right - sRect.Left, sRect.Bottom - sRect.Top, sRect.Right - sRect.Left, sRect.Bottom - sRect.Top, D3DColorRGBA(255, 255, 255, 255)
Else
sRect.Top = 0
sRect.Bottom = SIZE_Y
sRect.Left = 0
sRect.Right = SIZE_X
RenderTexture Tex_Selection, X, Y, sRect.Left, sRect.Top, sRect.Right - sRect.Left, sRect.Bottom - sRect.Top, sRect.Right - sRect.Left, sRect.Bottom - sRect.Top, D3DColorRGBA(255, 255, 255, 255)
End If
Case 2
If Map.Events(I).Pages(1).Graphic > 0 And Map.Events(I).Pages(1).Graphic < NumTileSets Then
sRect.Top = Map.Events(I).Pages(1).GraphicY * 32
sRect.Left = Map.Events(I).Pages(1).GraphicX * 32
sRect.Bottom = sRect.Top + SIZE_Y
sRect.Right = sRect.Left + SIZE_X
RenderTexture Tex_Tileset(Map.Events(I).Pages(1).Graphic), X, Y, sRect.Left, sRect.Top, sRect.Right - sRect.Left, sRect.Bottom - sRect.Top, sRect.Right - sRect.Left, sRect.Bottom - sRect.Top, D3DColorRGBA(255, 255, 255, 255)
sRect.Top = 0
sRect.Bottom = SIZE_Y
sRect.Left = 0
sRect.Right = SIZE_X
RenderTexture Tex_Selection, X, Y, sRect.Left, sRect.Top, sRect.Right - sRect.Left, sRect.Bottom - sRect.Top, sRect.Right - sRect.Left, sRect.Bottom - sRect.Top, D3DColorRGBA(255, 255, 255, 255)
Else
sRect.Top = 0
sRect.Bottom = SIZE_Y
sRect.Left = 0
sRect.Right = SIZE_X
RenderTexture Tex_Selection, X, Y, sRect.Left, sRect.Top, sRect.Right - sRect.Left, sRect.Bottom - sRect.Top, sRect.Right - sRect.Left, sRect.Bottom - sRect.Top, D3DColorRGBA(255, 255, 255, 255)
End If
End Select
```
***
Find
```
With destRect
.x1 = (GraphicSelX * 32) - sRect.Left
.x2 = ((GraphicSelX2 - GraphicSelX) * 32) + .x1
.y1 = (GraphicSelY * 32) - sRect.Top
.y2 = ((GraphicSelY2 - GraphicSelY) * 32) + .y1
End With
End If
DrawSelectionBox destRect
```
Change it to
```
With destRect
.x1 = (GraphicSelX * SIZE_X) - sRect.Left
.x2 = ((GraphicSelX2 - GraphicSelX) * SIZE_X) + .x1
.y1 = (GraphicSelY * SIZE_Y) - sRect.Top
.y2 = ((GraphicSelY2 - GraphicSelY) * SIZE_Y) + .y1
End With
End If
DrawSelectionBox destRect
```
***
Find
```
RenderTextureByRects Tex_Tileset(frmEditor_Events.scrlGraphic.value), sRect, dRect, 255
If (GraphicSelX2 < GraphicSelX Or GraphicSelY2 < GraphicSelY) Or (GraphicSelX2 = 0 And GraphicSelY2 = 0) Then
With destRect
.x1 = (GraphicSelX * 32) - sRect.Left
.x2 = PIC_X + .x1
.y1 = (GraphicSelY * 32) - sRect.Top
.y2 = PIC_Y + .y1
End With
Else
With destRect
.x1 = (GraphicSelX * 32) - sRect.Left
.x2 = ((GraphicSelX2 - GraphicSelX) * 32) + .x1
.y1 = (GraphicSelY * 32) - sRect.Top
.y2 = ((GraphicSelY2 - GraphicSelY) * 32) + .y1
End With
End If
```
Change it to
```
RenderTextureByRects Tex_Tileset(frmEditor_Events.scrlGraphic.value), sRect, dRect, 255
If (GraphicSelX2 < GraphicSelX Or GraphicSelY2 < GraphicSelY) Or (GraphicSelX2 = 0 And GraphicSelY2 = 0) Then
With destRect
.x1 = (GraphicSelX * SIZE_X) - sRect.Left
.x2 = PIC_X + .x1
.y1 = (GraphicSelY * SIZE_Y) - sRect.Top
.y2 = PIC_Y + .y1
End With
Else
With destRect
.x1 = (GraphicSelX * SIZE_X) - sRect.Left
.x2 = ((GraphicSelX2 - GraphicSelX) * SIZE_X) + .x1
.y1 = (GraphicSelY * SIZE_Y) - sRect.Top
.y2 = ((GraphicSelY2 - GraphicSelY) * SIZE_Y) + .y1
End With
End If
```
***
Find
```
Case 2
If tmpEvent.Pages(curPageNum).Graphic > 0 And tmpEvent.Pages(curPageNum).Graphic <= NumTileSets Then
If tmpEvent.Pages(curPageNum).GraphicX2 = 0 Or tmpEvent.Pages(curPageNum).GraphicY2 = 0 Then
sRect.Top = tmpEvent.Pages(curPageNum).GraphicY * 32
sRect.Left = tmpEvent.Pages(curPageNum).GraphicX * 32
sRect.Bottom = sRect.Top + 32
sRect.Right = sRect.Left + 32
With dRect
dRect.Top = (193 * 0.5) - ((sRect.Bottom - sRect.Top) * 0.5)
dRect.Bottom = dRect.Top + (sRect.Bottom - sRect.Top)
```
Change it to
```
Case 2
If tmpEvent.Pages(curPageNum).Graphic > 0 And tmpEvent.Pages(curPageNum).Graphic <= NumTileSets Then
If tmpEvent.Pages(curPageNum).GraphicX2 = 0 Or tmpEvent.Pages(curPageNum).GraphicY2 = 0 Then
sRect.Top = tmpEvent.Pages(curPageNum).GraphicY * SIZE_Y
sRect.Left = tmpEvent.Pages(curPageNum).GraphicX * SIZE_X
sRect.Bottom = sRect.Top + SIZE_Y
sRect.Right = sRect.Left + SIZE_X
With dRect
dRect.Top = (193 * 0.5) - ((sRect.Bottom - sRect.Top) * 0.5)
dRect.Bottom = dRect.Top + (sRect.Bottom - sRect.Top)
```
***
Find
```
Direct3D_Device.Present destRect, destRect, frmEditor_Events.picGraphic.hwnd, ByVal (0)
Else
sRect.Top = tmpEvent.Pages(curPageNum).GraphicY * 32
sRect.Left = tmpEvent.Pages(curPageNum).GraphicX * 32
sRect.Bottom = sRect.Top + ((tmpEvent.Pages(curPageNum).GraphicY2 - tmpEvent.Pages(curPageNum).GraphicY) * 32)
sRect.Right = sRect.Left + ((tmpEvent.Pages(curPageNum).GraphicX2 - tmpEvent.Pages(curPageNum).GraphicX) * 32)
With dRect
dRect.Top = (193 * 0.5) - ((sRect.Bottom - sRect.Top) * 0.5)
dRect.Bottom = dRect.Top + (sRect.Bottom - sRect.Top)
```
Change it to
```
Direct3D_Device.Present destRect, destRect, frmEditor_Events.picGraphic.hwnd, ByVal (0)
Else
sRect.Top = tmpEvent.Pages(curPageNum).GraphicY * SIZE_Y
sRect.Left = tmpEvent.Pages(curPageNum).GraphicX * SIZE_X
sRect.Bottom = sRect.Top + ((tmpEvent.Pages(curPageNum).GraphicY2 - tmpEvent.Pages(curPageNum).GraphicY) * SIZE_Y)
sRect.Right = sRect.Left + ((tmpEvent.Pages(curPageNum).GraphicX2 - tmpEvent.Pages(curPageNum).GraphicX) * SIZE_X)
With dRect
dRect.Top = (193 * 0.5) - ((sRect.Bottom - sRect.Top) * 0.5)
dRect.Bottom = dRect.Top + (sRect.Bottom - sRect.Top)
```
***
Find
```
' Calculate the X
X = Map.MapEvents(id).X * PIC_X + Map.MapEvents(id).xOffset - ((Width - 32) * 0.5)
' Is the player's height more than 32..?
If (Height * 4) > 32 Then
' Create a 32 pixel offset for larger sprites
Y = Map.MapEvents(id).Y * PIC_Y + Map.MapEvents(id).yOffset - ((Height) - 32)
Else
' Proceed as normal
Y = Map.MapEvents(id).Y * PIC_Y + Map.MapEvents(id).yOffset
```
Change it to
```
' Calculate the X
X = Map.MapEvents(id).X * PIC_X + Map.MapEvents(id).xOffset - ((Width - SIZE_X) * 0.5)
' Is the player's height more than 32..?
If (Height * 4) > SIZE_Y Then
' Create a 32 pixel offset for larger sprites
Y = Map.MapEvents(id).Y * PIC_Y + Map.MapEvents(id).yOffset - ((Height) - SIZE_Y)
Else
' Proceed as normal
Y = Map.MapEvents(id).Y * PIC_Y + Map.MapEvents(id).yOffset
```
***
Find
```
If Map.MapEvents(id).GraphicY2 > 0 Or Map.MapEvents(id).GraphicX2 > 0 Then
With sRect
.Top = Map.MapEvents(id).GraphicY * 32
.Bottom = .Top + ((Map.MapEvents(id).GraphicY2 - Map.MapEvents(id).GraphicY) * 32)
.Left = Map.MapEvents(id).GraphicX * 32
.Right = .Left + ((Map.MapEvents(id).GraphicX2 - Map.MapEvents(id).GraphicX) * 32)
End With
Else
With sRect
.Top = Map.MapEvents(id).GraphicY * 32
.Bottom = .Top + 32
.Left = Map.MapEvents(id).GraphicX * 32
.Right = .Left + 32
End With
End If
X = Map.MapEvents(id).X * 32
Y = Map.MapEvents(id).Y * 32
X = X - ((sRect.Right - sRect.Left) * 0.5)
Y = Y - (sRect.Bottom - sRect.Top) + 32
If Map.MapEvents(id).GraphicY2 > 0 Then
RenderTexture Tex_Tileset(Map.MapEvents(id).GraphicNum), ConvertMapX(Map.MapEvents(id).X * 32), ConvertMapY((Map.MapEvents(id).Y - ((Map.MapEvents(id).GraphicY2 - Map.MapEvents(id).GraphicY) - 1)) * 32), sRect.Left, sRect.Top, sRect.Right - sRect.Left, sRect.Bottom - sRect.Top, sRect.Right - sRect.Left, sRect.Bottom - sRect.Top, D3DColorRGBA(255, 255, 255, 255)
Else
RenderTexture Tex_Tileset(Map.MapEvents(id).GraphicNum), ConvertMapX(Map.MapEvents(id).X * 32), ConvertMapY(Map.MapEvents(id).Y * 32), sRect.Left, sRect.Top, sRect.Right - sRect.Left, sRect.Bottom - sRect.Top, sRect.Right - sRect.Left, sRect.Bottom - sRect.Top, D3DColorRGBA(255, 255, 255, 255)
End If
End Select
End Sub
```
Change it to
```
If Map.MapEvents(id).GraphicY2 > 0 Or Map.MapEvents(id).GraphicX2 > 0 Then
With sRect
.Top = Map.MapEvents(id).GraphicY * SIZE_Y
.Bottom = .Top + ((Map.MapEvents(id).GraphicY2 - Map.MapEvents(id).GraphicY) * SIZE_Y)
.Left = Map.MapEvents(id).GraphicX * SIZE_X
.Right = .Left + ((Map.MapEvents(id).GraphicX2 - Map.MapEvents(id).GraphicX) * SIZE_X)
End With
Else
With sRect
.Top = Map.MapEvents(id).GraphicY * SIZE_Y
.Bottom = .Top + SIZE_Y
.Left = Map.MapEvents(id).GraphicX * SIZE_X
.Right = .Left + SIZE_X
End With
End If
X = Map.MapEvents(id).X * PIC_X
Y = Map.MapEvents(id).Y * PIC_Y
X = X - ((sRect.Right - sRect.Left) * 0.5)
Y = Y - (sRect.Bottom - sRect.Top) + PIC_Y
Dim tmpX As Long, tmpY As Long
If Map.MapEvents(id).GraphicY2 > 0 Then
tmpX = Map.MapEvents(id).X * PIC_X
tmpY = (Map.MapEvents(id).Y - ((Map.MapEvents(id).GraphicY2 - Map.MapEvents(id).GraphicY) - 1)) * PIC_Y
RenderTexture Tex_Tileset(Map.MapEvents(id).GraphicNum), ConvertMapIsoX(tmpX, tmpY), ConvertMapIsoY(tmpY, tmpX), sRect.Left, sRect.Top, sRect.Right - sRect.Left, sRect.Bottom - sRect.Top, sRect.Right - sRect.Left, sRect.Bottom - sRect.Top, D3DColorRGBA(255, 255, 255, 255)
Else
tmpX = Map.MapEvents(id).X * PIC_X
tmpY = Map.MapEvents(id).Y * PIC_Y
RenderTexture Tex_Tileset(Map.MapEvents(id).GraphicNum), ConvertMapIsoX(tmpX, tmpY), ConvertMapIsoY(tmpY, tmpX), sRect.Left, sRect.Top, sRect.Right - sRect.Left, sRect.Bottom - sRect.Top, sRect.Right - sRect.Left, sRect.Bottom - sRect.Top, D3DColorRGBA(255, 255, 255, 255)
End If
End Select
End Sub
```
***
Find
```
Dim btnEnabled() As Byte, btnCount As Byte
Dim guiScreenX As Long, guiScreenY As Long
If MAX_MAPX = 0 Then
guiScreenX = screenX
Else
guiScreenX = screenX * (((MAX_MAPX + 1) * PIC_X) / screenX)
End If
If MAX_MAPY = 0 Then
guiScreenY = screenY
Else
guiScreenY = screenY * (((MAX_MAPY + 1) * PIC_Y) / screenY)
End If
'Loading Interface.ini data
'Dim filename As String
```
Change it to
```
Dim btnEnabled() As Byte, btnCount As Byte
Dim guiScreenX As Long, guiScreenY As Long
guiScreenX = WindowWidth
guiScreenY = WindowHeight
'Loading Interface.ini data
'Dim filename As String
```
***
Find
```
' Inner tiles (Top right subtile region)
' NW - a
autoInner(1).X = 32
autoInner(1).Y = 0
' NE - b
autoInner(2).X = 48
autoInner(2).Y = 0
' SW - c
autoInner(3).X = 32
autoInner(3).Y = 16
' SE - d
autoInner(4).X = 48
autoInner(4).Y = 16
' Outer Tiles - NW (bottom subtile region)
' NW - e
autoNW(1).X = 0
autoNW(1).Y = 32
' NE - f
autoNW(2).X = 16
autoNW(2).Y = 32
' SW - g
autoNW(3).X = 0
autoNW(3).Y = 48
' SE - h
autoNW(4).X = 16
autoNW(4).Y = 48
' Outer Tiles - NE (bottom subtile region)
' NW - i
autoNE(1).X = 32
autoNE(1).Y = 32
' NE - g
autoNE(2).X = 48
autoNE(2).Y = 32
' SW - k
autoNE(3).X = 32
autoNE(3).Y = 48
' SE - l
autoNE(4).X = 48
autoNE(4).Y = 48
' Outer Tiles - SW (bottom subtile region)
' NW - m
autoSW(1).X = 0
autoSW(1).Y = 64
' NE - n
autoSW(2).X = 16
autoSW(2).Y = 64
' SW - o
autoSW(3).X = 0
autoSW(3).Y = 80
' SE - p
autoSW(4).X = 16
autoSW(4).Y = 80
' Outer Tiles - SE (bottom subtile region)
' NW - q
autoSE(1).X = 32
autoSE(1).Y = 64
' NE - r
autoSE(2).X = 48
autoSE(2).Y = 64
' SW - s
autoSE(3).X = 32
autoSE(3).Y = 80
' SE - t
autoSE(4).X = 48
autoSE(4).Y = 80
```
Change it to
```
' Inner tiles (Top right subtile region)
' NW - a
autoInner(1).X = PIC_X
autoInner(1).Y = 0
' NE - b
autoInner(2).X = PIC_X * 1.5 ' 48
autoInner(2).Y = 0
' SW - c
autoInner(3).X = PIC_X ' 32
autoInner(3).Y = PIC_Y * 0.5 ' 16
' SE - d
autoInner(4).X = PIC_X * 1.5 ' 48
autoInner(4).Y = PIC_Y * 0.5 ' 16
' Outer Tiles - NW (bottom subtile region)
' NW - e
autoNW(1).X = 0
autoNW(1).Y = PIC_Y ' 32
' NE - f
autoNW(2).X = PIC_X * 0.5 ' 16
autoNW(2).Y = PIC_Y ' 32
' SW - g
autoNW(3).X = 0
autoNW(3).Y = PIC_Y * 1.5 ' 48
' SE - h
autoNW(4).X = PIC_X * 0.5 ' 16
autoNW(4).Y = PIC_Y * 1.5 ' 48
' Outer Tiles - NE (bottom subtile region)
' NW - i
autoNE(1).X = PIC_X ' 32
autoNE(1).Y = PIC_Y ' 32
' NE - g
autoNE(2).X = PIC_X * 1.5 ' 48
autoNE(2).Y = PIC_Y ' 32
' SW - k
autoNE(3).X = PIC_X ' 32
autoNE(3).Y = PIC_Y * 1.5 ' 48
' SE - l
autoNE(4).X = PIC_X * 1.5 ' 48
autoNE(4).Y = PIC_Y * 1.5 ' 48
' Outer Tiles - SW (bottom subtile region)
' NW - m
autoSW(1).X = 0
autoSW(1).Y = PIC_Y * 2 ' 64
' NE - n
autoSW(2).X = PIC_X * 0.5 ' 16
autoSW(2).Y = PIC_Y * 2 ' 64
' SW - o
autoSW(3).X = 0
autoSW(3).Y = PIC_Y * 2.5 ' 80
' SE - p
autoSW(4).X = PIC_X * 0.5 ' 16
autoSW(4).Y = PIC_Y * 2.5 ' 80
' Outer Tiles - SE (bottom subtile region)
' NW - q
autoSE(1).X = PIC_X ' 32
autoSE(1).Y = PIC_Y * 2 ' 64
' NE - r
autoSE(2).X = PIC_X * 1.5 ' 48
autoSE(2).Y = PIC_Y * 2 ' 64
' SW - s
autoSE(3).X = PIC_X ' 32
autoSE(3).Y = PIC_Y * 2.5 ' 80
' SE - t
autoSE(4).X = PIC_X * 1.5 ' 48
autoSE(4).Y = PIC_Y * 2.5 ' 80
```
***
Find
```
Autotile(X, Y).Layer(layerNum).renderState = RENDER_STATE_AUTOTILE
' cache tileset positioning
For quarterNum = 1 To 4
Autotile(X, Y).Layer(layerNum).srcX(quarterNum) = (Map.Tile(X, Y).Layer(layerNum).X * 32) + Autotile(X, Y).Layer(layerNum).QuarterTile(quarterNum).X
Autotile(X, Y).Layer(layerNum).srcY(quarterNum) = (Map.Tile(X, Y).Layer(layerNum).Y * 32) + Autotile(X, Y).Layer(layerNum).QuarterTile(quarterNum).Y
Next
```
Change it to
```
Autotile(X, Y).Layer(layerNum).renderState = RENDER_STATE_AUTOTILE
' cache tileset positioning
For quarterNum = 1 To 4
Autotile(X, Y).layer(layerNum).srcX(quarterNum) = (Map.Tile(X, Y).layer(layerNum).X * PIC_X) + Autotile(X, Y).layer(layerNum).QuarterTile(quarterNum).X
Autotile(X, Y).layer(layerNum).srcY(quarterNum) = (Map.Tile(X, Y).layer(layerNum).Y * PIC_Y) + Autotile(X, Y).layer(layerNum).QuarterTile(quarterNum).Y
Next
```
***
Find
```
' calculate the offset
Select Case Map.Tile(X, Y).Autotile(layerNum)
Case AUTOTILE_WATERFALL
yOffset = (waterfallFrame - 1) * 32
Case AUTOTILE_ANIM
xOffset = autoTileFrame * 64
Case AUTOTILE_CLIFF
yOffset = -32
End Select
' Draw the quarter
'EngineRenderRectangle Tex_Tileset(Map.Tile(x, y).Layer(layerNum).Tileset), destX, destY, Autotile(x, y).Layer(layerNum).srcX(quarterNum) + xOffset, Autotile(x, y).Layer(layerNum).srcY(quarterNum) + yOffset, 16, 16, 16, 16, 16, 16
RenderTexture Tex_Tileset(Map.Tile(X, Y).Layer(layerNum).Tileset), destX, destY, Autotile(X, Y).Layer(layerNum).srcX(quarterNum) + xOffset, Autotile(X, Y).Layer(layerNum).srcY(quarterNum) + yOffset, 16, 16, 16, 16, -1
End Sub
```
Change it to
```
' calculate the offset
Select Case Map.Tile(X, Y).Autotile(layerNum)
Case AUTOTILE_WATERFALL
yOffset = (waterfallFrame - 1) * PIC_Y
Case AUTOTILE_ANIM
xOffset = autoTileFrame * PIC_X * 2
Case AUTOTILE_CLIFF
yOffset = PIC_Y * -1
End Select
' Draw the quarter
'EngineRenderRectangle Tex_Tileset(Map.Tile(x, y).Layer(layerNum).Tileset), destX, destY, Autotile(x, y).Layer(layerNum).srcX(quarterNum) + xOffset, Autotile(x, y).Layer(layerNum).srcY(quarterNum) + yOffset, 16, 16, 16, 16, 16, 16
RenderTexture Tex_Tileset(Map.Tile(X, Y).layer(layerNum).Tileset), destX, destY, Autotile(X, Y).layer(layerNum).srcX(quarterNum) + xOffset, Autotile(X, Y).layer(layerNum).srcY(quarterNum) + yOffset, PIC_X * 0.5, PIC_Y * 0.5, PIC_X * 0.5, PIC_Y * 0.5, -1
End Sub
```
***
Find
```
' Draw
color = D3DColorARGB(alpha, rcolor, gcolor, bcolor)
RenderTexture Tex_Lightmap, ConvertMapX(GetPlayerX(MyIndex) * 32) + Player(MyIndex).xOffset - (Tex_Lightmap.Width * 0.5) + (PIC_X * 0.5), ConvertMapY(GetPlayerY(MyIndex) * 32) + Player(MyIndex).yOffset - (Tex_Lightmap.Height * 0.5) - (PIC_Y * 0.5), 0, 0, Tex_Lightmap.Width, Tex_Lightmap.Height, Tex_Lightmap.Width, Tex_Lightmap.Height, color
```
Change it to
```
' Draw
color = D3DColorARGB(alpha, rcolor, gcolor, bcolor)
RenderTexture Tex_Lightmap, ConvertMapIsoX(GetPlayerX(MyIndex) * PIC_X, GetPlayerY(MyIndex) * PIC_Y) + Player(MyIndex).xOffset - (Tex_Lightmap.Width * 0.5) + (PIC_X * 0.5), ConvertMapIsoY(GetPlayerY(MyIndex) * PIC_Y, GetPlayerX(MyIndex) * PIC_X) + Player(MyIndex).yOffset - (Tex_Lightmap.Height * 0.5) - (PIC_Y * 0.5), 0, 0, Tex_Lightmap.Width, Tex_Lightmap.Height, Tex_Lightmap.Width, Tex_Lightmap.Height, color
End Sub
```
***
***
`modGameEditors`
Find
```
y2 = 0 ' starting tile for y axis
For Y = CurY To CurY + EditorTileHeight - 1
x2 = 0 ' re-set x count every y loop
For X = CurX To CurX + EditorTileWidth - 1
If X >= 0 And X <= Map.MaxX Then
If Y >= 0 And Y <= Map.MaxY Then
With Map.Tile(X, Y)
.Layer(CurLayer).X = EditorTileX + x2
.Layer(CurLayer).Y = EditorTileY + y2
.Layer(CurLayer).Tileset = frmDev.scrlTileSet.value
.Autotile(CurLayer) = 0
CacheRenderState X, Y, CurLayer
End With
End If
End If
x2 = x2 + 1
Next
y2 = y2 + 1
Next
```
Change it to
```
Dim tmpX As Long, tmpY As Long
Dim startTileX As Long, startTileY As Long
Dim TileX As Long, TileY As Long
startTileX = X: startTileY = Y
TileX = startTileX: TileY = startTileY
For tmpY = 0 To EditorTileHeight - 1
For tmpX = 0 To EditorTileWidth - 1
If TileX >= 0 And TileX <= Map.MaxX Then
If TileY >= 0 And TileY <= Map.MaxY Then
With Map.Tile(TileX, TileY)
.layer(CurLayer).X = EditorTileX + tmpX
.layer(CurLayer).Y = EditorTileY + tmpY
.layer(CurLayer).Tileset = frmDev.scrlTileSet.value
.Autotile(CurLayer) = 0
CacheRenderState TileX, TileY, CurLayer
End With
End If
End If
TileX = TileX + 1
TileY = TileY - 1
Next
startTileY = startTileY + 1
TileY = startTileY
startTileX = startTileX + 1
TileX = startTileX
Next
```
***
Find
```
tempX = PIC_X * 0.5
tempY = PIC_Y * 0.5
X = X Mod 32
Y = Y Mod 32
If X > tempX Then
If Y > tempY Then ' Quadrant 4
If (X - PIC_X) / (Y - PIC_Y) > (tempX - PIC_X) / (tempY - PIC_Y) Then ' 2
i = 2
Else ' 4
i = 4
End If
Else ' Quadrant 1
If (X - PIC_X) / Y < (tempX - PIC_X) / tempY Then ' 1
i = 1
Else ' 4
i = 4
End If
End If
Else
If Y > tempY Then ' Quadrant 3
If X / (Y - PIC_Y) > tempX / (tempY - PIC_Y) Then ' 3
i = 3
Else ' 2
i = 2
End If
Else ' Quadrant 2
X = X
Y = Y
If X / Y > tempX / tempY Then ' 1
i = 1
Else ' 3
i = 3
End If
End If
End If
```
Change it to
```
Dim tmpX As Long, tmpY As Long
tmpX = X - ConvertMapIsoX((CurX * PIC_X), (CurY * PIC_Y))
tmpY = Y - ConvertMapIsoY((CurY * PIC_Y), (CurX * PIC_X))
X = (tmpX Mod PIC_X)
Y = (tmpY Mod PIC_Y)
If X >= (PIC_X * 0.5) Then
If Y >= (PIC_Y * 0.5) Then ' Quadrant 4
I = 4
Else ' Quadrant 1
I = 1
End If
Else
If Y >= (PIC_Y * 0.5) Then ' Quadrant 3
I = 2
Else ' Quadrant 2
I = 3
End If
End If
```
This will allow you to click tiles to directionally block them
***
Find
```
If frmDev.optMapAttribute(15).value Then
If movedMouse Then Exit Sub
X = X - (CurX * 32)
Y = Y - (CurY * 32)
```
Change it to
```
If frmDev.optMapAttribute(15).value Then
If movedMouse Then Exit Sub
X = X - (CurX * PIC_X)
Y = Y - (CurY * PIC_Y)
```
***
***
`modGameLogic`
Find
```
Sub ProcessMovement(ByVal Index As Long)
Dim MovementSpeed As Long
```
Change it to
```
Dim MovementSpeedX As Long, MovementSpeedY As Long
```
***
Find
```
Select Case Player(Index).Moving
Case MOVING_WALKING
PlayerMovement(Index) = 1
MovementSpeed = ((ElapsedTime / 1000) * (WALK_SPEED * SIZE_X))
Case MOVING_RUNNING
PlayerMovement(Index) = 2
MovementSpeed = ((ElapsedTime / 1000) * ((WALK_SPEED + ((GetPlayerStat(Index, Agility) + (Player(Index).Level / 25)) ^ 0.4)) * SIZE_X))
Case Else
PlayerMovement(Index) = 0
Exit Sub
End Select
```
Change it to
```
Select Case Player(Index).Moving
Case MOVING_WALKING
PlayerMovement(Index) = 1
MovementSpeedX = ((ElapsedTime * 0.001) * (WALK_SPEED * PIC_X))
MovementSpeedY = ((ElapsedTime * 0.001) * (WALK_SPEED * PIC_Y))
Case MOVING_RUNNING
PlayerMovement(Index) = 2
MovementSpeedX = ((ElapsedTime * 0.001) * ((WALK_SPEED + ((GetPlayerStat(Index, Agility) + (Player(Index).Level * 0.04)) ^ 0.4)) * PIC_X))
MovementSpeedY = ((ElapsedTime * 0.001) * ((WALK_SPEED + ((GetPlayerStat(Index, Agility) + (Player(Index).Level * 0.04)) ^ 0.4)) * PIC_Y))
Case Else
PlayerMovement(Index) = 0
Exit Sub
End Select
If (MovementSpeedX Mod 2) = 1 Then
MovementSpeedX = MovementSpeedX - 1
End If
If (MovementSpeedY Mod 2) = 1 Then
MovementSpeedY = MovementSpeedY - 1
End If
```
Moving now uses two directions instead of one, and the bit at the bottom is to help prevent camera shaking
***
Find
```
Select Case GetPlayerDir(Index)
Case DIR_UP
Player(Index).yOffset = Player(Index).yOffset - MovementSpeed
If Player(Index).yOffset < 0 Then Player(Index).yOffset = 0
Case DIR_DOWN
Player(Index).yOffset = Player(Index).yOffset + MovementSpeed
If Player(Index).yOffset > 0 Then Player(Index).yOffset = 0
Case DIR_LEFT
Player(Index).xOffset = Player(Index).xOffset - MovementSpeed
If Player(Index).xOffset < 0 Then Player(Index).xOffset = 0
Case DIR_RIGHT
Player(Index).xOffset = Player(Index).xOffset + MovementSpeed
If Player(Index).xOffset > 0 Then Player(Index).xOffset = 0
End Select
```
Change it to
```
Select Case GetPlayerDir(Index)
Case DIR_UP
Player(Index).yOffset = Player(Index).yOffset - MovementSpeedY
If Player(Index).yOffset < 0 Then Player(Index).yOffset = 0
Case DIR_DOWN
Player(Index).yOffset = Player(Index).yOffset + MovementSpeedY
If Player(Index).yOffset > 0 Then Player(Index).yOffset = 0
Case DIR_LEFT
Player(Index).xOffset = Player(Index).xOffset - MovementSpeedX
If Player(Index).xOffset < 0 Then Player(Index).xOffset = 0
Case DIR_RIGHT
Player(Index).xOffset = Player(Index).xOffset + MovementSpeedX
If Player(Index).xOffset > 0 Then Player(Index).xOffset = 0
End Select
```
***
Find
```
DrawMapNameX = (frmMain.ScaleWidth - getWidth(Font_Default, Trim$(Map.Name))) * 0.5
```
Change it to
```
DrawMapNameX = (ScreenWidth - getWidth(Font_Default, Trim$(Map.Name))) * 0.5
```
***
Find
```
' check for off-screen
If Y + GUI(GUI_DESCRIPTION_SPELL).Height > frmMain.ScaleHeight Then
Y = frmMain.ScaleHeight - GUI(GUI_DESCRIPTION_SPELL).Height
End If
If X + GUI(GUI_DESCRIPTION_SPELL).Width > frmMain.ScaleWidth Then
X = frmMain.ScaleWidth - GUI(GUI_DESCRIPTION_SPELL).Width
End If
```
Change it to
```
' check for off-screen
If Y + GUI(GUI_DESCRIPTION_SPELL).Height > WindowHeight Then
Y = WindowHeight - GUI(GUI_DESCRIPTION_SPELL).Height
End If
If X + GUI(GUI_DESCRIPTION_SPELL).Width > WindowWidth Then
X = WindowWidth - GUI(GUI_DESCRIPTION_SPELL).Width
End If
```
***
Find
```
' check for off-screen
If Y + GUI(GUI_DESCRIPTION_ITEM).Height > frmMain.ScaleHeight Then
Y = frmMain.ScaleHeight - GUI(GUI_DESCRIPTION_ITEM).Height
End If
If X + GUI(GUI_DESCRIPTION_ITEM).Width > frmMain.ScaleWidth Then
X = frmMain.ScaleWidth - GUI(GUI_DESCRIPTION_ITEM).Width
End If
```
Change it to
```
' check for off-screen
If Y + GUI(GUI_DESCRIPTION_ITEM).Height > WindowHeight Then
Y = WindowHeight - GUI(GUI_DESCRIPTION_ITEM).Height
End If
If X + GUI(GUI_DESCRIPTION_ITEM).Width > WindowWidth Then
X = WindowWidth - GUI(GUI_DESCRIPTION_ITEM).Width
End If
```
***
Find
```
Left = GUI(GUI_HOTBAR).X + ((HotbarOffsetX + 32) * (((i - 1) Mod MAX_HOTBAR)))
```
Change it to
```
Left = GUI(GUI_HOTBAR).X + ((HotbarOffsetX + SIZE_X) * (((I - 1) Mod MAX_HOTBAR)))
```
***
Find
```
.Top = GUI(GUI_BANK).Y + BankTop + ((BankOffsetY + 32) * ((i - 1) \ BankColumns))
.Bottom = .Top + PIC_Y
.Left = GUI(GUI_BANK).X + BankLeft + ((BankOffsetX + 32) * (((i - 1) Mod BankColumns)))
.Right = .Left + PIC_X
```
Change it to
```
.Top = GUI(GUI_BANK).Y + BankTop + ((BankOffsetY + SIZE_Y) * ((I - 1) \ BankColumns))
.Bottom = .Top + SIZE_Y
.Left = GUI(GUI_BANK).X + BankLeft + ((BankOffsetX + SIZE_X) * (((I - 1) Mod BankColumns)))
.Right = .Left + SIZE_X
```
***
Find
```
- .Top = InvTop + ((InvOffsetY + 32) * ((i - 1) \ InvColumns)) + GUI(GUI_INVENTORY).Y
- .Bottom = .Top + PIC_Y
- .Left = InvLeft + ((InvOffsetX + 32) * (((i - 1) Mod InvColumns))) + GUI(GUI_SKILLS).X
- .Right = .Left + PIC_X
```
Change it to
```
.Top = InvTop + ((InvOffsetY + SIZE_Y) * ((I - 1) \ InvColumns)) + GUI(GUI_INVENTORY).Y
.Bottom = .Top + SIZE_Y
.Left = InvLeft + ((InvOffsetX + SIZE_X) * (((I - 1) Mod InvColumns))) + GUI(GUI_SKILLS).X
.Right = .Left + SIZE_X
```
***
Find
```
.Top = SpellTop + ((SpellOffsetY + 32) * ((i - 1) \ SpellColumns)) + GUI(GUI_SKILLS).Y
.Bottom = .Top + PIC_Y
.Left = SpellLeft + ((SpellOffsetX + 32) * (((i - 1) Mod SpellColumns))) + GUI(GUI_SKILLS).X
.Right = .Left + PIC_X
```
Change it to
```
.Top = SpellTop + ((SpellOffsetY + SIZE_Y) * ((I - 1) \ SpellColumns)) + GUI(GUI_SKILLS).Y
.Bottom = .Top + SIZE_Y
.Left = SpellLeft + ((SpellOffsetX + SIZE_X) * (((I - 1) Mod SpellColumns))) + GUI(GUI_SKILLS).X
.Right = .Left + SIZE_X
```
***
Find
```
WeatherParticle(numLayer, i).X = (TileView.Left * 32) - 32
WeatherParticle(numLayer, i).Y = (TileView.Top * 32) + Rand(-32, frmMain.ScaleHeight)
```
Change it to
```
WeatherParticle(numLayer, I).X = (TileView.Left * PIC_X) - PIC_X
WeatherParticle(numLayer, I).Y = (TileView.Top * PIC_Y) + Rand(PIC_Y * -1, ScreenHeight)
```
***
Find
```
WeatherParticle(numLayer, i).X = (TileView.Left * 32) + Rand(-32, frmMain.ScaleWidth)
WeatherParticle(numLayer, i).Y = (TileView.Top * 32) - 32
```
Change it to
```
WeatherParticle(numLayer, I).X = (TileView.Left * PIC_X) + Rand(PIC_X * -1, ScreenWidth)
WeatherParticle(numLayer, I).Y = (TileView.Top * PIC_Y) - PIC_Y
```
***
Find
```
For i = 1 To MAX_WEATHER_PARTICLES
If WeatherParticle(numLayer, i).InUse Then
If WeatherParticle(numLayer, i).X > TileView.Right * 32 Or WeatherParticle(numLayer, i).Y > TileView.Bottom * 32 Then
WeatherParticle(numLayer, i).InUse = False
```
Change it to
```
For I = 1 To MAX_WEATHER_PARTICLES
If WeatherParticle(numLayer, I).InUse Then
If WeatherParticle(numLayer, I).X > TileView.Right * PIC_X Or WeatherParticle(numLayer, I).Y > TileView.Bottom * PIC_Y Then
WeatherParticle(numLayer, I).InUse = False
```
***
***
`modGeneral`
Find
```
' set loading screen
loadGUI True
frmLoad.Visible = True
```
Add above it
```
' Set Screen Size
Call ResizeForm
```
This will set the form sizes before things are drawn so they don't cause errors
***
Find
```
' set values for directional blocking arrows
DirArrowX(1) = 12 ' up
DirArrowY(1) = 0
DirArrowX(2) = 12 ' down
DirArrowY(2) = 23
DirArrowX(3) = 0 ' left
DirArrowY(3) = 12
DirArrowX(4) = 23 ' right
DirArrowY(4) = 12
```
Change it to
```
' set values for directional blocking arrows
DirArrowX(1) = ((PIC_X - 😎 * 0.75) - 1 ' up
DirArrowY(1) = (PIC_Y * 0.25) + 1
DirArrowX(2) = ((PIC_X - 😎 * 0.25) + 1 ' down
DirArrowY(2) = ((PIC_Y - 😎 * 0.75) - 1
DirArrowX(3) = (PIC_X * 0.25) + 1 ' left
DirArrowY(3) = ((PIC_Y - 😎 * 0.25) + 1
DirArrowX(4) = ((PIC_X - 😎 * 0.75) - 1 ' right
DirArrowY(4) = ((PIC_Y - 😎 * 0.75) - 1
```
This will change where the directional blocking arrows are placed on the tiles
***
Find
```
Public Sub ResizeForm()
...
End Sub
```
Replace the whole sub with the following
```
Public Sub ResizeForm()
If Not frmMain.Visible Then Exit Sub ' Make sure Game is Visible
If frmMain.WindowState = 1 Then Exit Sub ' Check if Minimized
Dim bdrOffsetX As Long, bdrOffsetY As Long
bdrOffsetX = (GetSystemMetrics(SM_CXFRAME) * 2)
bdrOffsetY = GetSystemMetrics(SM_CYCAPTION) + (GetSystemMetrics(SM_CYFRAME) * 2)
' Set Window Size
WindowWidth = frmMain.ScaleWidth
WindowHeight = frmMain.ScaleHeight
' Set the Game Screen Size
ScreenX = 0
ScreenY = 0
ScreenWidth = WindowWidth - ScreenOffsetX
ScreenHeight = WindowHeight - ScreenOffsetY
ScreenHyp = Sqr((CCur(ScreenWidth) * CCur(ScreenWidth)) + (CCur(ScreenHeight) * CCur(ScreenHeight)))
' Set Map size
If screenStretch Then
MAX_MAPX = START_MAX_MAPX ' Set Map Size X
MAX_MAPY = START_MAX_MAPY ' Set Map Size Y
Else
MAX_MAPX = (ScreenHyp \ PIC_X) ' Get Map Size X
MAX_MAPY = (ScreenHyp \ PIC_Y) ' Get Map Size Y
End If
If Not ScreenStretchX = 0 Then
If MAX_MAPX > Max_MapX_Orig Then MAX_MAPX = (Max_MapX_Orig + ((MAX_MAPX - Max_MapX_Orig) * (ScreenStretchX / 100))) ' 100 is the modifier
End If
If Not ScreenStretchY = 0 Then
If MAX_MAPY > Max_MapY_Orig Then MAX_MAPY = (Max_MapY_Orig + ((MAX_MAPY - Max_MapY_Orig) * (ScreenStretchY / 100))) ' 100 is the modifier
End If
' Make sure Size is Big Enough
' If Screen is too Small then Resize it (Prevents Crashing)
If MAX_MAPY <= 0 Then
frmMain.Height = frmMain.Height + (PIC_Y * Screen.TwipsPerPixelY)
MAX_MAPY = 1
End If
If MAX_MAPX <= 0 Then
frmMain.Width = frmMain.Width + (PIC_X * Screen.TwipsPerPixelX)
MAX_MAPX = 1
End If
HalfX = ScreenWidth * 0.5 ' (MAX_MAPX * 0.5) * PIC_X
HalfY = ScreenHeight * 0.5 ' (MAX_MAPY * 0.5) * PIC_Y
StartXValue = MAX_MAPX * 0.5
StartYValue = MAX_MAPY * 0.5
EndXValue = (ScreenX / PIC_X) + 1
EndYValue = (ScreenY / PIC_Y) + 1
MAX_MAPX = MAX_MAPX - 1
MAX_MAPY = MAX_MAPY - 1
Direct3D_Window.BackBufferWidth = frmMain.ScaleWidth
Direct3D_Window.BackBufferHeight = frmMain.ScaleHeight
'Reset the device
Direct3D_Device.Reset Direct3D_Window
DirectX_ReInit
GuiLocation
UpdateCamera
End Sub
```
We have to change the resizing to use the hypotenuse for the visible map size since isometric uses that.
***
Add to the bottom of the file
```
' Isometric Formulas
Public Function ConvertMapIsoX(ByVal X As Long, ByVal Y As Long) As Long
' If debug mode, handle error then exit out
If Options.Debug = 1 Then On Error GoTo ErrorHandler
' Isometric Changes
ConvertMapIsoX = ConvertToIsoX(X, Y) + ((ScreenWidth * 0.5) - Camera.Left + ScreenX)
' Error handler
Exit Function
ErrorHandler:
HandleError "ConvertMapIsoX", "modGraphics", Err.Number, Err.Description, Err.Source, Err.HelpContext
Err.Clear
Exit Function
End Function
Public Function ConvertMapIsoY(ByVal Y As Long, ByVal X As Long) As Long
' If debug mode, handle error then exit out
If Options.Debug = 1 Then On Error GoTo ErrorHandler
' Isometric Changes
ConvertMapIsoY = ConvertToIsoY(X, Y) - Camera.Top + ScreenY
' Error handler
Exit Function
ErrorHandler:
HandleError "ConvertMapIsoY", "modGraphics", Err.Number, Err.Description, Err.Source, Err.HelpContext
Err.Clear
Exit Function
End Function
Public Function ConvertToIsoX(ByVal X As Long, ByVal Y As Long)
ConvertToIsoX = (Int(X * 0.5) - Y)
End Function
Public Function ConvertToIsoY(ByVal X As Long, ByVal Y As Long)
ConvertToIsoY = ((Int(X * 0.5) + Y) * 0.5)
End Function
Public Function ConvertMapOrthX(ByVal X As Long, ByVal Y As Long) As Long
' If debug mode, handle error then exit out
If Options.Debug = 1 Then On Error GoTo ErrorHandler
' Isometric Changes
Dim cntOffset As Long
cntOffset = (ScreenWidth * 0.5) - Camera.Left + ScreenX
ConvertMapOrthX = ConvertToOrthX(X, Y) - cntOffset
' Error handler
Exit Function
ErrorHandler:
HandleError "ConvertMapIsoX", "modGraphics", Err.Number, Err.Description, Err.Source, Err.HelpContext
Err.Clear
Exit Function
End Function
Public Function ConvertMapOrthY(ByVal X As Long, ByVal Y As Long) As Long
' If debug mode, handle error then exit out
If Options.Debug = 1 Then On Error GoTo ErrorHandler
' Isometric Changes
ConvertMapOrthY = ConvertToOrthY(X, Y) + Camera.Top - ScreenY
' Error handler
Exit Function
ErrorHandler:
HandleError "ConvertMapIsoY", "modGraphics", Err.Number, Err.Description, Err.Source, Err.HelpContext
Err.Clear
Exit Function
End Function
Public Function ConvertToOrthX(ByVal X As Long, ByVal Y As Long)
ConvertToOrthX = (Y * 2) + X ' (X - Y) * Half_PIC_X
End Function
Public Function ConvertToOrthY(ByVal X As Long, ByVal Y As Long)
ConvertToOrthY = Y - (X * 0.5) ' (X + Y) * Half_PIC_Y
End Function
```
These functions will be used to find he screen position of stuff an things (mouse and map)
***
***
`modGlobals`
Remove both
```
Public screenX As Integer
Public screenY As Integer
```
and
```
Public screenStartX As Long
Public screenStartY As Long
```
***
Add to the bottom of the file
```
Public WindowWidth As Integer
Public WindowHeight As Integer
Public ScreenX As Integer
Public ScreenWidth As Integer
Public ScreenY As Integer
Public ScreenHeight As Integer
Public ScreenHyp As Currency
Public START_MAX_MAPX As Long
Public START_MAX_MAPY As Long
```
This will be used to change how the screen is drawn/sized
***
***
`modInput`
Find
```
CurX = TileView.Left + (((X + Camera.Left) * ((MAX_MAPX * PIC_X) / screenX)) \ PIC_X)
CurY = TileView.Top + (((Y + Camera.Top) * ((MAX_MAPY * PIC_Y) / screenY)) \ PIC_Y)
```
Replace it with
```
Dim tmpX As Long, tmpY As Long
tmpX = X + Camera.Left - (ScreenWidth * 0.5) - (PIC_X * 0.5)
tmpY = Y + Camera.Top
CurX = (ConvertToOrthX(tmpX, tmpY) \ PIC_X)
CurY = (ConvertToOrthY(tmpX, tmpY) \ PIC_Y)
```
This converts the mouse position to a map tile
***
***
`modText`
Find
```
Name = Trim$(Player(Index).Name)
' calc pos
TextX = ConvertMapX(GetPlayerX(Index) * PIC_X) + Player(Index).xOffset + (PIC_X \ 2) - (getWidth(Font_Default, (Trim$(Name))) * 0.5)
If GetPlayerSprite(Index) < 1 Or GetPlayerSprite(Index) > NumCharacters Then
TextY = ConvertMapY(GetPlayerY(Index) * PIC_Y) + Player(Index).yOffset - 16
Else
' Determine location for text
TextY = ConvertMapY(GetPlayerY(Index) * PIC_Y) + Player(Index).yOffset - (Tex_Character(GetPlayerSprite(Index)).Height / 4) + 16
End If
```
Change it to
```
Name = Trim$(Player(Index).Name)
' calc pos
TextX = ConvertMapIsoX(GetPlayerX(Index) * PIC_X, GetPlayerY(Index) * PIC_Y) + Player(Index).xOffset + (PIC_X \ 2) - (getWidth(Font_Default, (Trim$(Name))) * 0.5)
' Isometric Changes
Dim tmpX As Long, tmpY As Long
tmpX = (GetPlayerX(Index) * PIC_X) + Player(Index).xOffset - (getWidth(Font_Default, (Trim$(Name))) * 2)
tmpY = (GetPlayerY(Index) * PIC_Y) + Player(Index).yOffset '- (Tex_Character(GetPlayerSprite(Index)).Height / 4)
If GetPlayerSprite(Index) < 1 Or GetPlayerSprite(Index) > NumCharacters Then
tmpY = tmpY - (SIZE_Y * 0.5)
Else
' Determine location for text
tmpY = tmpY - (Tex_Character(GetPlayerSprite(Index)).Height / 4)
End If
TextX = ConvertMapIsoX(tmpX, tmpY)
TextY = ConvertMapIsoY(tmpY, tmpX)
```
***
Find
```
Name = Trim$(NPC(npcNum).Name) & " [" & NPCLevel(npcNum, Player(MyIndex).Map) & "]" ' NPC Name
TextX = ConvertMapX(MapNpc(Index).X * PIC_X) + MapNpc(Index).xOffset + (PIC_X \ 2) - (getWidth(Font_Default, (Trim$(Name))) * 0.5)
If NPC(npcNum).Sprite < 1 Or NPC(npcNum).Sprite > NumCharacters Then
TextY = ConvertMapY(MapNpc(Index).Y * PIC_Y) + MapNpc(Index).yOffset - 16
Else
' Determine location for text
TextY = ConvertMapY(MapNpc(Index).Y * PIC_Y) + MapNpc(Index).yOffset - (Tex_Character(NPC(npcNum).Sprite).Height / 4) + 16
End If
' Draw name
'Call DrawText(TexthDC, TextX, TextY, Name, Color)
RenderText Font_Default, Name, TextX, TextY, color
Dim i As Long
For i = 1 To MAX_QUESTS
'check if the npc is the next task to any quest: [?] symbol
If Not LenB(Quest(i).Name) = 0 Then
If Player(MyIndex).PlayerQuest(i).Status = QUEST_STARTED Then
If Trim$(NPC_Editor(Quest(i).Task(Player(MyIndex).PlayerQuest(i).ActualTask).NPC).Name) = Trim$(NPC(npcNum).Name) Then ' npcNum Then
Name = "[?]"
TextX = ConvertMapX(MapNpc(Index).X * PIC_X) + MapNpc(Index).xOffset + (PIC_X * 0.5) - (getWidth(Font_Default, (Trim$(Name))) * 0.5)
If NPC(npcNum).Sprite < 1 Or NPC(npcNum).Sprite > NumCharacters Then
TextY = ConvertMapY(MapNpc(Index).Y * PIC_Y) + MapNpc(Index).yOffset - 16
Else
TextY = ConvertMapY(MapNpc(Index).Y * PIC_Y) + MapNpc(Index).yOffset - (Tex_Character(NPC(npcNum).Sprite).Height / 4)
End If
RenderText Font_Default, Name, TextX, TextY, Yellow
Exit For
End If
End If
'check if the npc is the starter to any quest: [!] symbol
'can accept the quest as a new one?
If Player(MyIndex).PlayerQuest(i).Status = QUEST_NOT_STARTED Or Player(MyIndex).PlayerQuest(i).Status = QUEST_COMPLETED_BUT Then
'the npc gives this quest?
If NPC(npcNum).questNum = i Then
Name = "[!]"
TextX = ConvertMapX(MapNpc(Index).X * PIC_X) + MapNpc(Index).xOffset + (PIC_X \ 2) - (getWidth(Font_Default, (Trim$(Name))) * 0.5)
If NPC(npcNum).Sprite < 1 Or NPC(npcNum).Sprite > NumCharacters Then
TextY = ConvertMapY(MapNpc(Index).Y * PIC_Y) + MapNpc(Index).yOffset - 16
Else
TextY = ConvertMapY(MapNpc(Index).Y * PIC_Y) + MapNpc(Index).yOffset - (Tex_Character(NPC(npcNum).Sprite).Height / 4)
End If
RenderText Font_Default, Name, TextX, TextY, Yellow
Exit For
End If
End If
End If
Next
```
Change it to
```
Dim tmpX As Long, tmpY As Long
tmpX = MapNpc(Index).X * PIC_X
tmpY = MapNpc(Index).Y * PIC_Y
Name = Trim$(NPC(npcNum).Name) & " [" & NPCLevel(npcNum, Player(MyIndex).Map) & "]" ' NPC Name
TextX = ConvertMapIsoX(tmpX, tmpY) + MapNpc(Index).xOffset + (PIC_X \ 2) - (getWidth(Font_Default, (Trim$(Name))) * 0.5)
If NPC(npcNum).Sprite < 1 Or NPC(npcNum).Sprite > NumCharacters Then
TextY = ConvertMapIsoY(tmpY, tmpX) + MapNpc(Index).yOffset - (SIZE_Y * 0.5)
Else
' Determine location for text
TextY = ConvertMapIsoY(tmpY, tmpX) + MapNpc(Index).yOffset - (Tex_Character(NPC(npcNum).Sprite).Height / 4) + (SIZE_Y * 0.5)
End If
' Draw name
'Call DrawText(TexthDC, TextX, TextY, Name, Color)
RenderText Font_Default, Name, TextX, TextY, color
Dim I As Long
For I = 1 To MAX_QUESTS
'check if the npc is the next task to any quest: [?] symbol
If Not LenB(Quest(I).Name) = 0 Then
If Player(MyIndex).PlayerQuest(I).Status = QUEST_STARTED Then
If Trim$(NPC_Editor(Quest(I).Task(Player(MyIndex).PlayerQuest(I).ActualTask).NPC).Name) = Trim$(NPC(npcNum).Name) Then ' npcNum Then
Name = "[?]"
TextX = ConvertMapIsoX(tmpX, tmpY) + MapNpc(Index).xOffset + (PIC_X * 0.5) - (getWidth(Font_Default, (Trim$(Name))) * 0.5)
If NPC(npcNum).Sprite < 1 Or NPC(npcNum).Sprite > NumCharacters Then
TextY = ConvertMapIsoY(tmpY, tmpX) + MapNpc(Index).yOffset - (SIZE_Y * 0.5)
Else
TextY = ConvertMapIsoY(tmpY, tmpX) + MapNpc(Index).yOffset - (Tex_Character(NPC(npcNum).Sprite).Height / 4)
End If
RenderText Font_Default, Name, TextX, TextY, Yellow
Exit For
End If
End If
'check if the npc is the starter to any quest: [!] symbol
'can accept the quest as a new one?
If Player(MyIndex).PlayerQuest(I).Status = QUEST_NOT_STARTED Or Player(MyIndex).PlayerQuest(I).Status = QUEST_COMPLETED_BUT Then
'the npc gives this quest?
If NPC(npcNum).questNum = I Then
Name = "[!]"
TextX = ConvertMapIsoX(tmpX, tmpY) + MapNpc(Index).xOffset + (PIC_X \ 2) - (getWidth(Font_Default, (Trim$(Name))) * 0.5)
If NPC(npcNum).Sprite < 1 Or NPC(npcNum).Sprite > NumCharacters Then
TextY = ConvertMapIsoY(tmpY, tmpX) + MapNpc(Index).yOffset - (SIZE_Y * 0.5)
Else
TextY = ConvertMapIsoY(tmpY, tmpX) + MapNpc(Index).yOffset - (Tex_Character(NPC(npcNum).Sprite).Height / 4)
End If
RenderText Font_Default, Name, TextX, TextY, Yellow
Exit For
End If
End If
End If
Next
```
***
Find
```
For Y = TileView.Top To TileView.Bottom
If IsValidMapPoint(X, Y) Then
With Map.Tile(X, Y)
tx = ((ConvertMapX(X * PIC_X)) - 4) + (PIC_X * 0.5)
ty = ((ConvertMapY(Y * PIC_Y)) - 7) + (PIC_Y * 0.5)
Select Case .Type
Case TILE_TYPE_BLOCKED
```
Change it to
```
For Y = TileView.Top To TileView.Bottom
If IsValidMapPoint(X, Y) Then
With Map.Tile(X, Y)
tx = ((ConvertMapIsoX(X * PIC_X, Y * PIC_Y)) - 4) + (PIC_X * 0.5)
ty = ((ConvertMapIsoY(Y * PIC_Y, X * PIC_X)) - 7) + (PIC_Y * 0.5)
Select Case .Type
Case TILE_TYPE_BLOCKED
```
***
Find
```
End Select
X = ConvertMapX(X)
Y = ConvertMapY(Y)
If GetTick < ActionMsg(Index).Created + Time Then
RenderText Font_Default, ActionMsg(Index).Message, X, Y, ActionMsg(Index).color
```
Change it to
```
End Select
X = ConvertMapIsoX(X, Y)
Y = ConvertMapIsoY(Y, X)
If GetTick < ActionMsg(Index).Created + Time Then
RenderText Font_Default, ActionMsg(Index).Message, X, Y, ActionMsg(Index).color
```
***
Find
```
Name = Trim$(Map.MapEvents(Index).Name)
' calc pos
TextX = ConvertMapX(Map.MapEvents(Index).X * PIC_X) + Map.MapEvents(Index).xOffset + (PIC_X \ 2) - (getWidth(Font_Default, (Trim$(Name))) * 0.5)
If Map.MapEvents(Index).GraphicType = 0 Then
TextY = ConvertMapY(Map.MapEvents(Index).Y * PIC_Y) + Map.MapEvents(Index).yOffset - 16
ElseIf Map.MapEvents(Index).GraphicType = 1 Then
If Map.MapEvents(Index).GraphicNum < 1 Or Map.MapEvents(Index).GraphicNum > NumCharacters Then
TextY = ConvertMapY(Map.MapEvents(Index).Y * PIC_Y) + Map.MapEvents(Index).yOffset - 16
Else
' Determine location for text
TextY = ConvertMapY(Map.MapEvents(Index).Y * PIC_Y) + Map.MapEvents(Index).yOffset - (Tex_Character(Map.MapEvents(Index).GraphicNum).Height / 4) + 16
End If
ElseIf Map.MapEvents(Index).GraphicType = 2 Then
If Map.MapEvents(Index).GraphicY2 > 0 Then
TextY = ConvertMapY(Map.MapEvents(Index).Y * PIC_Y) + Map.MapEvents(Index).yOffset - ((Map.MapEvents(Index).GraphicY2 - Map.MapEvents(Index).GraphicY) * 32) + 16
Else
TextY = ConvertMapY(Map.MapEvents(Index).Y * PIC_Y) + Map.MapEvents(Index).yOffset - 32 + 16
End If
End If
' Draw name
RenderText Font_Default, Name, TextX, TextY, color
```
Change it to
```
Name = Trim$(Map.MapEvents(Index).Name)
' calc pos
Dim tmpX As Long, tmpY As Long
tmpX = Map.MapEvents(Index).X * PIC_X
tmpY = Map.MapEvents(Index).Y * PIC_Y
TextX = ConvertMapIsoX(tmpX, tmpY) + Map.MapEvents(Index).xOffset + (PIC_X \ 2) - (getWidth(Font_Default, (Trim$(Name))) * 0.5)
If Map.MapEvents(Index).GraphicType = 0 Then
TextY = ConvertMapIsoY(tmpY, tmpX) + Map.MapEvents(Index).yOffset - (SIZE_Y * 0.5)
ElseIf Map.MapEvents(Index).GraphicType = 1 Then
If Map.MapEvents(Index).GraphicNum < 1 Or Map.MapEvents(Index).GraphicNum > NumCharacters Then
TextY = ConvertMapIsoY(tmpY, tmpX) + Map.MapEvents(Index).yOffset - (SIZE_Y * 0.5)
Else
' Determine location for text
TextY = ConvertMapIsoY(tmpY, tmpX) + Map.MapEvents(Index).yOffset - (Tex_Character(Map.MapEvents(Index).GraphicNum).Height / 4) + (SIZE_Y * 0.5)
End If
ElseIf Map.MapEvents(Index).GraphicType = 2 Then
If Map.MapEvents(Index).GraphicY2 > 0 Then
TextY = ConvertMapIsoY(tmpY, tmpX) + Map.MapEvents(Index).yOffset - ((Map.MapEvents(Index).GraphicY2 - Map.MapEvents(Index).GraphicY) * PIC_Y) + (SIZE_Y * 0.5)
Else
TextY = ConvertMapIsoY(tmpY, tmpX) + Map.MapEvents(Index).yOffset - (SIZE_Y * 0.5)
End If
End If
tmpX = TextX
tmpY = TextY
TextX = ConvertMapIsoX(tmpX, tmpY)
TextY = ConvertMapIsoY(tmpY, tmpX)
' Draw name
RenderText Font_Default, Name, TextX, TextY, color
```
***
Find
```
With chatBubble(Index)
If .targetType = TARGET_TYPE_PLAYER Then
' it's a player
If GetPlayerMap(.target) = GetPlayerMap(MyIndex) Then
' it's on our map - get co-ords
X = ConvertMapX((Player(.target).X * 32) + Player(.target).xOffset) + 16
Y = ConvertMapY((Player(.target).Y * 32) + Player(.target).yOffset) - 40
End If
ElseIf .targetType = TARGET_TYPE_NPC Then
' it's on our map - get co-ords
X = ConvertMapX((MapNpc(.target).X * 32) + MapNpc(.target).xOffset) + 16
Y = ConvertMapY((MapNpc(.target).Y * 32) + MapNpc(.target).yOffset) - 40
ElseIf .targetType = TARGET_TYPE_EVENT Then
X = ConvertMapX((Map.MapEvents(.target).X * 32) + Map.MapEvents(.target).xOffset) + 16
Y = ConvertMapY((Map.MapEvents(.target).Y * 32) + Map.MapEvents(.target).yOffset) - 40
End If
```
Change it to
```
With chatBubble(Index)
If .targetType = TARGET_TYPE_PLAYER Then
tmpX = (Player(.target).X * PIC_X) + Player(.target).xOffset
tmpY = (Player(.target).Y * PIC_Y) + Player(.target).yOffset
' it's a player
If GetPlayerMap(.target) = GetPlayerMap(MyIndex) Then
' it's on our map - get co-ords
X = ConvertMapIsoX(tmpX, tmpY) + (PIC_X * 0.5)
Y = ConvertMapIsoY(tmpY, tmpX) - (PIC_Y * 1.25) ' 40
End If
ElseIf .targetType = TARGET_TYPE_NPC Then
tmpX = (MapNpc(.target).X * PIC_X) + MapNpc(.target).xOffset
tmpY = (MapNpc(.target).Y * PIC_Y) + MapNpc(.target).yOffset
' it's on our map - get co-ords
X = ConvertMapIsoX(tmpX, tmpY) + (PIC_X * 0.5)
Y = ConvertMapIsoY(tmpY, tmpX) - (PIC_Y * 1.25) ' 40
ElseIf .targetType = TARGET_TYPE_EVENT Then
tmpX = (Map.MapEvents(.target).X * PIC_X) + Map.MapEvents(.target).xOffset
tmpY = (Map.MapEvents(.target).Y * PIC_Y) + Map.MapEvents(.target).yOffset
X = ConvertMapIsoX(tmpX, tmpY) + (PIC_X * 0.5)
Y = ConvertMapIsoY(tmpY, tmpX) - (PIC_Y * 1.25) ' 40
End If
``` -
If the runtimes are installed, then make sure you have the latest version of ER (there's a link in my signature). It should be a launcher, just use that and update the files, then you'll be able to launch it.
-
I'm guessing you don't have the runtines, so go to the Downloads page and download the Runtime Libraries (under Step 1), or download them from here: http://www.mediafire.com/file/ll0jbjg0zs132tn/Run+First%21+%28Runtime+Files+-+If+Needed%29.exe
-
EO4 gold was discontinued due to change in site ownership. There is a EO 4.2 (I think that's the right version) that was released, but it lacks most of the larger features and can be unstable.
-
Glad to see you're doing well :)
-
@TheLegend87
Item images go in `client\data files\graphics\items`
Be sure the images are in the same layout/format, extension, and number, naming system.
Cursor Location is off
in Help and Bugs
Posted
Don't worry, I'm good lol, I had some money saved up for this sort of thing.
Most of the data won't be transferable without converters, but I'm willing to make those for things that aren't easy to redo (either because you have a lot like items, or because they're complex like maps), so don't worry too much about using an earlier version, you'll just need to let me know what converters are needed after 1.9 is released :)