IS vs. MQ2 development

Discussion of Inner Space

Moderators: Lavish Software Team, Moderators

Post Reply
jabon
Non-Subscriber
Posts: 17
Joined: Tue Aug 31, 2004 8:19 pm

IS vs. MQ2 development

Post by jabon » Thu Jan 27, 2005 4:35 pm

Do the recent EQ1 network changes (and probably other stuff, what do I know?) affect Inner Space in the same way they affect MQ2? I'm wondering this because it seems that IS is under active development still while MQ2 is in maintenance and a fix is more likely for IS. If so it would probably be a huge push for community support around IS if fixing MQ2 is not only difficult but annoying because it's a legacy codebase. I realize that EQ specific functionality comes from plugins, I was just wondering if it was IS or a plugin implementing MQ2's functions that determines if I get my leet haxxor skillz* back.

* jargon added for humor

P.S. I couldn't think of the proper programming way to word this basic question: Where should my (our) resources be? IS or MQ2?

Lax
Owner
Posts: 6634
Joined: Fri Jun 18, 2004 6:08 pm

Post by Lax » Thu Jan 27, 2005 8:37 pm

Well.. there isnt a real easy answer for this one ;) MQ2 is free and popular, though yes its codebase is now legacy and the overall architecture wont be updated, and in my opinion won't really need to be updated before its use runs out. I requested some time ago in the MQ2 VIP forum for interested people to begin converting various EQ stuff from MQ2 to ISX form. Lavish subscribers that use MacroQuest would definitely benefit from having things converted.

Also, any IS extension for EQ1 can use most of the same stuff, including source files, from MQ2. In fact, the memory protection plugin example uses eqgame.h from MQ2.

Stuff that would have to change:
Command functions: MQ2 commands had to do their own parameter parsing. IS's interpreter does that, and uses the same function prototype for commands as is used in console programs -- int main(int argc, char *argv[]) -- with standard shell support (e.g. pipelining, redirection)
MQ2Data functions: MQ2Data also had to do their own parameter parsing. IS's Data parser does that, and also uses argc, char *argv[] instead of the old character array sent to the data functions (this applies equally to the top-level object retrieval function and the type member retrieval function).

Stuff that should be changed but dont have to be:
Detours: Add services for each detour so custom extensions can take advantage

Past that, an ISX project for MQ2 can basically be kept alongside it and use the same code for EQ-specific stuff

Oh. and the answer to "which should i spend time on" I would say converting to IS. I'm not just saying that to be bias, because theyre both my projects and IS isn't likely to solicit subscriptions from MQ2 users... I believe for the current subscribers that use MQ2, IS would benefit greatly.

eqjoe
GamingTools Subscriber
Posts: 221
Joined: Wed Oct 13, 2004 2:34 pm

Post by eqjoe » Thu Jan 27, 2005 10:58 pm

MQ2 can be used by anyone, which is too bad because it is a powerfull tool. Stupid players use and abuse that software to the point where I wish it would simply go away. Ok, that is not gonna happen, but if MQ2 did go away and with it all the freeloaders that abuse that software, IS would have a lot more support from the community of suporters that have kept MQ2 a viable working project for years.

The one thing that IS has going for it is simply the fact that it is not free. That makes all of us contributors. That is how it should be.


-j

jabon
Non-Subscriber
Posts: 17
Joined: Tue Aug 31, 2004 8:19 pm

Post by jabon » Fri Jan 28, 2005 4:18 am

It seems easier to setup offset hacks with IS than with MQ2, at least with MQ2 the pre-programmed featres block most people from messing with the memory directly. Nevertheless, IS is obviously more powerful.

Does the memory protection plugin do what is currently broken in MQ2 (the memcheckers)? Are the UI plugins (map, HUD, etc) dependant on those command changes? Is the MQ2 VIP forum the only place work on IS migration is being tracked? (this last bit is important as I hate hate duplicate work)

jabon
Non-Subscriber
Posts: 17
Joined: Tue Aug 31, 2004 8:19 pm

Post by jabon » Fri Jan 28, 2005 4:22 am

Something I forgot to add, you kept mentioning MQ2 subscribers specifically. As I'm not an MQ2 subsrcriber is there something I should know about what they get relative to the proletariat?

Lax
Owner
Posts: 6634
Joined: Fri Jun 18, 2004 6:08 pm

Post by Lax » Fri Jan 28, 2005 4:31 am

No, there are no MQ2 subscribers only Lavish subscribers. However, I did mention "Lavish subscribers that use MacroQuest". People that donate to MacroQuest are VIPs and the only mention of that was about the MQ2 VIP forum request. There's nothing in the MQ2 VIP forum about IS other than that request. Everything for IS is here or on ismods.com

The memory protection plugin is not updated for the latest patches (yesterday or today).

HUD support is built into IS already, so that's not something that needs to be converted.

The map would be dependent on command change yes, as would anything else that provides a command in MQ2. Also, the map system does provide data items that would have to be converted as well.

ieatacid
Non-Subscriber
Posts: 17
Joined: Wed Jul 07, 2004 7:25 pm

Post by ieatacid » Fri Jan 28, 2005 6:41 pm

I'd love to convert the project to work with IS, but I don't know where I'd begin. A couple other things I wouldn't be sure about are things like:

- Would it be one singular extension? Like an ISXMQ2 or would it have to be multiple exensions? Maybe an ISXMQ2Main and then the rest as seperate extensions?

- How extensions (if multiple) would use services of other extensions (if they would need to).

- Loading. Load a Main extension that loads the rest or loads a set based on what's specified in an ini file (like Macroquest.ini)?

- Injection. Since we wouldn't be using macroquest.exe

- Where to start. Which plugin or specific file to start with for conversion? Like maybe first concentrate on getting MQ2Main to work, then work from there.

ieatacid
Non-Subscriber
Posts: 17
Joined: Wed Jul 07, 2004 7:25 pm

Post by ieatacid » Fri Jan 28, 2005 6:42 pm

Edit:
I did mention "Lavish subscribers that use MacroQuest"
That includes me Image

Lax
Owner
Posts: 6634
Joined: Fri Jun 18, 2004 6:08 pm

Post by Lax » Fri Jan 28, 2005 7:58 pm

- Would it be one singular extension? Like an ISXMQ2 or would it have to be multiple exensions? Maybe an ISXMQ2Main and then the rest as seperate extensions?
It could be a single extension, but it should be many in the same way MQ2 is many .. one main one, and other plugins/extensions. MQ2Map, etc can just be turned into IS extensions. ISXMQ2 is kind of silly, you'd want to call it ISX-EQ or something.
- How extensions (if multiple) would use services of other extensions (if they would need to).
They would definitely want to. Services provide a line of communication between extensions. When a client connects to or disconnects from a service, the master receives notifications and that information can be used to clean up stuff that the client failed to (for example, the detour service will automatically un-detour anything you forgot to). From there it's just a matter of having a header file with information about the service, just like is in ISXDK.h with the system services. Extensions that provide services can even provide functions or define macros to access them easily, also as seen in ISXDK.h

Code: Select all

// System Service "HTTP"
#define HTTPSERVICE_REQUEST							((ISXSERVICE_MSG)+1)
#define HTTPSERVICE_FAILURE							((ISXSERVICE_MSG)+2)
#define HTTPSERVICE_SUCCESS							((ISXSERVICE_MSG)+3)


struct HttpRequest
{
	char *URL;
	void *pData;
};

struct HttpFile
{
	char *URL;
	char *pBuffer;
	unsigned long Size;
	void *pData;
};

static bool IS_HttpRequest(ISXInterface *pClient, ISInterface *pISInterface, HISXSERVICE hHttpService, const char *URL, void *pData)
{
	HttpRequest Temp;
	Temp.URL=(char*)URL;
	Temp.pData=pData;
   return pISInterface->ServiceRequest(pClient,hHttpService,HTTPSERVICE_REQUEST,&Temp);
}
Both the client and the service master have callbacks to receive requests or notifications.
- Loading. Load a Main extension that loads the rest or loads a set based on what's specified in an ini file (like Macroquest.ini)?
Sort of the second part. You really dont need to worry about the loading (nor do you have to worry about the MQ2 "plugin" handling), that can be 100% up to the user. Inner Space provides a system that the user can run commands automatically at startup, via autoexec.ice and other methods. Your autoexec.ice can contain the following, for example:

Code: Select all

ext isxeq
ext isxeqmap
ext isxeqlabels
and so on
- Injection. Since we wouldn't be using macroquest.exe
Inner Space takes care of that for you
- Where to start. Which plugin or specific file to start with for conversion? Like maybe first concentrate on getting MQ2Main to work, then work from there
Really doesnt matter to be honest. As long as ISXEQMemory is updated to work with your patch, you have access to detours with memory protection.
MQ2Main would probably be the best place to start, and you really dont need to do an "all or nothing". For example, use a couple header files and you can convert half the commands in a matter of minutes. What's more, you dont even need most of the MQ2 commands, particularly not scripting ones.

Really, it's just going to be a matter of cutting out major portions of MQ2Main, and then changing a few things to fit into Inner Space. Once there's a new MQ2 zip up, you could make a copy of all of the .cpp and .h files, rip out command api, data api, datavars, detours api, dinput, macrocommands, mouse, parse api, plugin handler.... that's about it.

ieatacid
Non-Subscriber
Posts: 17
Joined: Wed Jul 07, 2004 7:25 pm

Post by ieatacid » Fri Jan 28, 2005 8:39 pm

Nice. Thanks for the input. Can you elaborate on this?
use a couple header files and you can convert half the commands in a matter of minutes. What's more, you dont even need most of the MQ2 commands, particularly not scripting ones.
Obviously, I don't have such a grasp of the C++ language as you do, so I'm not sure what that would entail.

Lax
Owner
Posts: 6634
Joined: Fri Jun 18, 2004 6:08 pm

Post by Lax » Sat Jan 29, 2005 12:51 am

The header files I'm talking about are ones like the EQ data structures, inline functions to get a spell given the number, etc., that really have nothing to do with MQ2. Using those, you could easily duplicate half of MQ2's functionality for the game.

Lax
Owner
Posts: 6634
Joined: Fri Jun 18, 2004 6:08 pm

Post by Lax » Sat Jan 29, 2005 1:41 pm

The next MQ2 zip (I'll probably put one up in a minute) has a bunch of stuff in it for ISXEQ. I added a VS .net project file (ISXEQ.vcproj) and did a bunch of prep work. Currently it'll compile, but will not link, and does not have any datatypes, top-level objects, or commands. It DOES of course have all of the utility commands, EQ structs, classes, etc. The reason it doesn't link is some things have to be replaced or removed yet, but if you want to play with it you can certainly try to figure out what needs to happen to get it to link ;)

This way, ISXEQ can share most of the MQ2 code.

Omiime
GamingTools Subscriber
Posts: 27
Joined: Thu Aug 26, 2004 6:27 am

Post by Omiime » Tue Feb 01, 2005 6:45 am

besides all those other reasons you listed.

wineq/mq2 is easy to use.

Been trying to use IS since you first posted it. Your a good programmer, but your skills in 'help' and "easy to use" sucky :)
(I don't mean helping people, you do great job helping people on this site)

wasn't for Amadeus asking how to get to main command window, I would have never found it (` key, which alot people use that key to switch in wineq/eqwindows )

Oh well probly just me, being stupid, others got it working.

( I find it easier to manually search though eqgame.exe for all of mq's offsets, then trying to make IS work like wineq, profiles, fullscreen, and setting switch keys)

Lax
Owner
Posts: 6634
Joined: Fri Jun 18, 2004 6:08 pm

Post by Lax » Tue Feb 01, 2005 9:06 am

Thanks for the chuckle. ;)

WinEQ is easy to use because it is designed to be used by people who are not technically minded. Inner Space is designed to be easy to use by people who are technically minded, or are familiar with MQ2. That being said, if you have any experience whatsoever with MQ2 beyond simply loading it, Inner Space shouldn't be a long shot. In fact, it's almost identical to the user and to potential developers, aside from a few obvious differences.

With all that in mind, the main focus of Inner Space has been to get features developed and accessible, not necessarily to make it something as easy to use as WinEQ. If you'd like to make some requests for features that you think would make it easy to use for you, feel free to do so. Nearly all of the changes coming to Inner Space right now are from bug reports or feature requests -- the changes in 0.68 all came as a result of a single email I received. Inner Space is still in Beta, and the only reason it is not out of Beta is the documentation is not complete, and I have not yet addressed "ease of use".

The idea and function of the in-game console is derived from the consoles in nearly every first-person shooter (which all use the ` key), with emphasis on acting like a normal command shell (e.g. DOS, Linux, UNIX).
As far as finding it... Inner Space does have a manual, and as it says on the first page... please let me know if you need more information on a particular subject, and it will get filled in. The page in the manual referring to the console window is called "Console & Commands" and is found in Session->Systems->Console & Commands. If you don't know about something and dont care to read through the basic parts of the manual, what do you suggest I do to make the information more available to you? I have actually been planning on creating some sort of tutorial.

I'm a busy guy, and I put priority on things that people ask for... I appreciate the post saying that you don't find it easy, but it would be far more helpful to both of us if you could give specific things rather than tell me I suck at making it easy to use ;)

As far as WinEQ-type hotkeys, this is the thread you want: http://www.ismods.com/forums/viewtopic.php?t=25
I do plan on having the installer give you an option of automatically setting that stuff up for you.

Post Reply