Jump to content
Search In
  • More options...
Find results that contain...
Find results in...

Mohenjo Daro

Members
  • Posts

    259
  • Joined

  • Last visited

  • Days Won

    1

Everything posted by Mohenjo Daro

  1. 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.
  2. I'll fix this in the next update, but it's an issue with the form resizing throwing the cursor location off
  3. 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
  4. 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.
  5. Nope, I don't know of any released engines with pixel movement
  6. @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
  7. 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.
  8. ![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) ***
  9. ![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) ***
  10. ![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) ***
  11. ![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) ***
  12. ![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) ***
  13. 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
  14. 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
  15. 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
  16. 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
  17. 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
  18. ![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 ```
  19. 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.
  20. 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
  21. 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.
  22. Glad to see you're doing well :)
  23. @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.
  24. Can you say what you did to fix it, or was there too many things done at once? Lol
  25. @SirZaphod Yep, pretty much all the engines on the site are still VB6 and open source.
×
×
  • Create New...