Sign in to follow this  
Followers 0

World Of Warcraft Advnced Machinima Tool

46 posts in this topic

Posted (edited)

WOW Machinima Tool

ALPHA DEMO VIDEO: Here

ALPHA DEMO waklthrough VIDEO: HERE

MAIN DEVELOPMENT BLOG: HERE

Posted Image

Introduction

It's been a while since I was diggin hard into the wow code to expand my programming knowledge in the World Of Warcraft Development Thread

But there was a tool that I have wanted to make for quite some time now, but really haven't had the time to start a such project.

Here yesterday I finally sat down in 6 hours lining out a rough alpha of the World Of Warcraft Machinima tool.

The idea behind this project is that World of Warcraft Machinima authors have had some great tools for machinima making.

After the release of the Burning Crusade expansion the WoWMapviewer have not been the same as it used to be and with the introduction of Wrath Of The Lich King it might be totally dead in some areas.

Also, Blizzard recently nurfed a method that allowed players to play around with their camera in a much more advanced way than just the normal mouse turn functions.

So this is a really good time to start on a project like this and I know many machinima authors that would take great advantage using this tool.

The Tool

With use of memory modification this tool takes control over many of World Of Warcraft's functions even enabling functions that you normally can't use.

The too allows you to add new camera's to the came and then toggle between them like if you had a little film crew inside the game. It also allows you to go into spectate mode to do even more advanced camera setups. You can Zoom, Pan change the Field Of View uniquely for each camera and if it works out well detailed animations will also be added.

I have added a bunch of extra features like time change, so you can record at Day or Night no matter what the clock is. Change the Toon Scale, Animations, Transparency etc etc.

Current Features

  • You have 10 cameras which can be plased anywhere in the world and you can easily toggle between them by clicking their name in the GUI or pressing Shift + CTRL + 1 (or any other number)
  • Spectator mode allows you get full control over the camera you have selected and move it away from your toon without having your toon to follow it.
  • Sliders with control of Zoom, FOV(Field Of View) and AutoPan features. To use the sliders hold down ALT while draging them.
  • Each slider is also saved with each camera, so you can have different values for each camera
Command Functions

Camera Related

CamZ - Camera 'Zoom' (z alt)

CamFOV - Camera Field Of View

CamRotZ - Camera Z Rotation

CamRotY - Camera Altitude

CamAutoPanX - Automatic Pan in X

CamYawX - Yaw Camera Angle

CamAutoRotCY - Automatic Rotation Around Cam Center

CamWalkRotTY - Walk Rotation Around Toon Center

CamRotTY - Camera Rotation Around Toon Center

CamRotZ - Camera Rotation around Z (debricated?)

CamPanX - Camera Pan in X

Spectate Related

Spectate - Toggels Spectate Mode

SpecSeed - Changes the Spectate Mode Speed

SpecZoom - Changes the Spectate Mode zoom

Other

animation - Toon Play a animation

Time - Set the time (updated every 1 minute of ingame time, so can be set by changing the speed also... will be fixed soon)

TimeSpeed - Set the speed of time.

CharScale - Changes the Scale of your toon

CharRotSpeed - Changes your rotation speed

CharRemove - Removes your toon leaving only equipment

Drunk - Toggle Drunk Mode (shader)

Die - Simulated dead body.

Opensource and easy to modify

Unlike my other projects which have mainly been show-off's and proof of concepts, this tool will from the start be a end user item and will be easy to modify.

I have used my own console UDF which is very very easy to handle and easy to add new features and modify commands etc.

All offset data can be stored both online and offline and i have included a little PHP login script so people with interest in general Weblogin systems can take a peek.

Looking for help

As said this is just a rough 6 hour outline and the userinterface is just there for the controls sake.

I want to make a totally new UI with easy controls for great user expired and add as many machinima related commands as possible.

So I wonder if anyone with World Of Warcraft programming or memory knowledge would want to join up for this project?

SourceCode:

www.madx.dk/files/wmt.rar

To retrive data use:

User: testclient

Password: 3D6D40013A462CFF

Full 2.4.2.8278 support.

Full 3.0.1.8471 support.

Any wow version beyond those two are not supported at all.

Edited by malu05

Share this post


Link to post
Share on other sites



Posted

Looks very promising. I like your work with WoW.

Share this post


Link to post
Share on other sites

Posted

Hello Malu05! Smee again! I love your work! Have my Babies? :)

Share this post


Link to post
Share on other sites

Posted

Glad to see you're still sticking with some coding stuff :) Been a huge fan since you started up here and after watching some of your stuff you did over at wowdev. Keep up the good work it's greatly appreciated ^^

Share this post


Link to post
Share on other sites

Posted

malu05.. I was working on an Age of Conan Bot (or at least, intending to) and was wondering what was a good resource for you when you started doing memory hacking and such.

I have only done enough in this area to be at little dangerous, and mostly in other RPGs to make mules where I can store stuff. I'd like to be able to use my bot with the macro system to be able to do better combat logging, which is pitiful currently in the game. (and often inaccurate). Plus, I want to be able to do realtime recording of my health/stamina/mana so if it gets too low it'll play an mp3.

Anyway, I figure the best way to get the info I was looking for is to read it from memory, so please let me know what resources helped you out the most when you got started in doing this. I'm confident I can do this.

Share this post


Link to post
Share on other sites

Posted

Development day 2

Didn't really have any time to work on this project yesterday but here tonight I decided to give it some more attention.

My primary concern was a issue with the camera selection. As you might see in the video, sometimes it automaticlly added FOV or ZOOM to cameras without any of those settings, and id did take some time for me to discover that I had switched the 2 values when they were saved so the FOV slider would save to the Zoom slider and vice versa. After I got that problem fixed the app could be ready for release. I mean, its very stable , and everything works as it is supposed too.

I wrote down a little list of things I wanted to add first, one of them was HotSpots.

When you are in spectator mode you can easily fly around and since you can control the camera speed you can also do it quite fast.

However sometimes it is quite frustrating flying to a certain location just to make one shot and then move on so the idea of HotSpots where move the camera instantly to a location would be a great addition to the tool.

So I added 3 commands:

SHS or SaveHotSpot - [Name]

This command will save the current position of the camera into a "hotspots.ini" file and name it with the entered name

Dublicates == Overwrites

HS or HotSpot - [Name]

Go to the defined hotspot.

Hslist or HotspotList

List all hotspots saved in the Hotspots.ini

I really want to explain how easy it is to add new commands to this app even tho its around 4000 lines and without messing around with any part of the code.

The app consists of 3 core elements.

1 - MainFunction.au3

This is the main operational code

2 - WoWCamToolFunc.au3

This is the main functions code

3 - Commands.au3

This is the command code for the command line editor

Now in case I want to add this new function.

In the Command() function in the Commands.au3 i can add the parameter.

Case $commandinput[1] = "hotspot"
Action_Hotspot()

So, if someone types in "hotspot" in the command line it will execute the Action_Hotspot function

Then i just need to write the hotspot function.

(over documented for explain purpose

;;--------------------------------------------------------------------------------
;;Action_Hotspot
;;--------------------------------------------------------------------------------
func Action_Hotspot()
    If String($commandinput[$commandinput[0]]) = "hotspot" Then ; If the User only types "hotspot" without any prefix the following message will be returned "Please define a hotspot to goto ie: 'hotspot DunMorogh"
        _report("Please define a hotspot to goto ie: 'hotspot DunMorogh'") ;_report() is the funciton to return a message, you can also use _report($msg,list_d), this will add time stamps to the text you return
    elseIf String($commandinput[$commandinput[0]]) = "hs" Then ;Same incase he writes "hs"
        _report("Please define a hotspot to goto ie: 'hotspot DunMorogh'")
    Elseif String($commandinput[$commandinput[0]]) = "?" Then ;each command got a help text, so if the user writes "hotspot ?" the following message will be returned
        _report("Use this command to move to a predefined hotspot, hotspots can be used to instantly move the camera to a certain position to avoid travel and location times. You can save hotspots with the 'SaveHotSpot' command")
    Else
        $hotspot = IniRead("Hotspots.ini","Hotspots",$commandinput[2],"No Hotspot") ;now incase non of the above happens the function will start. Here it collects the hotspots
        if @error then _report("Error - unable to acces hotspots.ini") ;return error if the file can not be accesed
        If $spectatemode = 0 Then ;make sure that the person is in spectate mode since the camera won't move if he's not.
            _report("Error - Unable to move to hotspot in toon mode, please activate spectate mode to move to a hotspot")
        Else
            if $hotspot = "No Hotspot" then ;if the hotspot he types in does not exist
                _report("Error - No such hotspot exists (" &$commandinput[2]&")")
            Else
                $HotspotToggle = StringSplit($hotspot,"#")  ;split the formated hotspot, (uses # as seperator)
                _MemoryWrite($Static_SpectateCam, $DllInformation, $HotspotToggle[1], 'float') ;patch memory with new coordinates
                _MemoryWrite($Static_SpectateCam + 0x4, $DllInformation, $HotspotToggle[2], 'float')
                _MemoryWrite($Static_SpectateCam + 0x8, $DllInformation, $HotspotToggle[3], 'float')
            EndIf
        EndIf
    EndIf
endfunc   ;==>Action_HotspotoÝ÷ Ú) Ûiÿø¦oyf zÈZrK¬þ) ÛÞ÷¿xþ-²-²{´?h
£¥ÛezènW¦¡Ç(º·Â§Ø¶¬1¬zÊ&zÞêÞq©ázZfy8^R¦eËe¢,)¶¬jëh×6;;--------------------------------------------------------------------------------
;;Action_Hotspot
;;--------------------------------------------------------------------------------
func Action_Hotspotlist()
    
    $HSlist = IniReadSection ( "hotspots.ini", "Hotspots" )
    if @error then 
        _report("Unable to acces hotspots.ini")
    Else
        _ArraySort( $HSlist) ;<<----THIS CAUSES THE ERROR!!!!!
        _report("==LIST OF ALL HOTSPOTS==")
        For $i = 1 to $HSlist[0][0] Step +1
            _report($HSlist[$i][0])
        next
    EndIf
endfunc   ;==>Action_Hotspot

I want to sort out the hotspot Location names.

When i do a _ArrayDisplay($HSlist, "Sort Ascending" )

I get a fine list with names and locations however running the code above results in this error

C:\Program Files\AutoIt3\Include\Array.au3 (666) : ==> Array variable has incorrect number of subscripts or subscript dimension range exceeded.: 
$t = $array[$i] 
$t = ^ ERROR

What did I do wrong?

Share this post


Link to post
Share on other sites

Posted (edited)

Hi Mad great to hear again from you, of course i will try to help you. :-)

Just give me something to work on.

Edited by JRSmile

Share this post


Link to post
Share on other sites

Posted

Hi Mad great to hear again from you, of course i will try to help you. :-)

Just give me something to work on.

Hehe, sure.. Going to release a public alpha the 30th along with the source code.

Share this post


Link to post
Share on other sites

Posted

Hehe, sure.. Going to release a public alpha the 30th along with the source code.

That's a good news, do you wish to develop further in this direction, may i help you with guis or something?

Share this post


Link to post
Share on other sites

Posted

That's a good news, do you wish to develop further in this direction, may i help you with guis or something?

Yes, i would love some help in the development. The GUI is a thing i would love to have replaced with sometihng more thrilling.

There are also some basic programming chalanges which drives me crazy at times one of them is a new features im working on, which is "chasecam".

Which bassicly is a toggle button that will make the camera always looking towards a certain point, for example your char, this is awsome for flyby shots etc.

Now for this to work i need the camera to Sync with the game faster than your frame rate. Which in movie recording conditions will be 25-40 fps (usually 30)

But for some reason, and im not sure why autoIt can not keep up with the game at times even tho both GPU and CPU are running quite low.

I added a CPS counter to the app name so i can monitor the Cycles Per Sec which is around 100-1000 so it should be able to keep up, but it just doesn't.

Another thing with this feature is that i have to calculate the 3D rotation based on the WoWCamera rotaiton model.

The X-axis camera is a 0-6 rotation method, which means its 60 times smaller than a normal 360 rotation, and its also Counter Clock wice like the game object rotation so after finding the rotation needed you need to inverse it and devide it by 60. That is no problem and this was also used in Thermo Prime and Binary to calculate rotation to next waypoint.

However the camera Z-axis rotation is -3 to 3 and is not counter clockvice. And for some wierd reason i just can't get the math right.

Currently i have found a formula that gives the right result in a 320degree angle, however there is still a 40 degree andgle where the camera is completely off.

I know this is kinda hard to understand when you don't have to code yet, but ill introduce you to the problems when i upload it.

Another problem is that the Bullettime feature i have added uses DLL injection to speed down the process. The problem is that i dunno how to de-inject it so people have to restart wow if they want to relog. (not if they use EMU servers)

I really want to add stuff like Weather Controll, basic animation controll and stuff like that.

Share this post


Link to post
Share on other sites

Posted (edited)

everyday you manage to make more interested :)

i had a spontanious thought with the z axis problem, maybe blizzard does not use the last 40 degrees but to fire some events like diving into the water instead of running ontop of it... or it is simply not implemented cause in the real world you have to reach the camera setting you want in the 320° angle with a combination of other angles...

i know im hard to understand but my english is not as good as my german. :P

but maybe i missunderstand your text and the axes are different arranged then in my mind. :P

With the gui i can try my luck and make something like a BOOM eyecandy gui out of it.

Edited by JRSmile

Share this post


Link to post
Share on other sites

Posted

everyday you manage to make more interested :)

i had a spontanious thought with the z axis problem, maybe blizzard does not use the last 40 degrees but to fire some events like diving into the water instead of running ontop of it... or it is simply not implemented cause in the real world you have to reach the camera setting you want in the 320° angle with a combination of other angles...

i know im hard to understand but my english is not as good as my german. :P

but maybe i missunderstand your text and the axes are different arranged then in my mind. :P

With the gui i can try my luck and make something like a BOOM eyecandy gui out of it.

Sorry, seems like im not comming home today. So can't update it for 2.4.2 today.

If you want i can get my GF to upload the code for me, then you can have a look, but you won't be able to use it since i only have the data for the latest Wrath Of The Lich King client mapped.

Share this post


Link to post
Share on other sites

Posted (edited)

sure im interested in it but if you think it isn't ready yet don't hurry.

i can work with both if you like.

and don't borther your gf with this stuff, i had some serious discussions with my "old" gf about doing something for me she had no clue of ... ;P

btw.: there is a typo in the threat topic :)

Edited by JRSmile

Share this post


Link to post
Share on other sites

Posted (edited)

gr8 job cant w8 till u finished it im not that tecnical so i cant help u with the codes and stuff,

BUT if ure willing to let me make a test machinima movie with it il be more then happy to,

keep up the good work

Edited by fobug

Share this post


Link to post
Share on other sites

Posted (edited)

Source Code Released! muttley

(check entry post)

I am sorry that it come so late but had a lot of stuff to do.

I will release some new code later today with a lot more comments in it so people can get a grip of what is going on.

My current recommendation is to avoid MainFunciton.au3 since its quite confusing and i have not yet cleaned it up.

Full 2.4.2.8278 support.

Full 3.0.1.8334 support.

Any wow version beyond those two are not supported at all.

Edited by malu05

Share this post


Link to post
Share on other sites

Posted (edited)

My current recommendation is to avoid MainFunciton.au3 since its quite confusing and i have not yet cleaned it up.

^^ i had to laugh loud on this while reading.

i think i can get through your code..

is this the final version?

so i can start turning it into a nice gui?

btw: i found an interresting link and registered myself.

but the login credentials don't work from Machinima forum, so i think i have to ask for another user pw combination, do i?

Edited by JRSmile

Share this post


Link to post
Share on other sites

Posted (edited)

^^ i had to laugh loud on this while reading.

i think i can get through your code..

is this the final version?

so i can start turning it into a nice gui?

No, its far from the final code but the base code is final so you can start make a new GUI.

And What part made you laugh? i must know! ^^

btw: i found an interresting link in the src code muttley

You should.

http://www.madx.dk/files/login.php is the login system.

Forgot to post the testcode.

User: testclient

Password: 3D6D40013A462CFF

Edited by malu05

Share this post


Link to post
Share on other sites

Posted (edited)

i got somethink like this back:

"2FCC633C1978F2FA8207E4B67A4BA3D189D119C1FB7C2700776DE2E4E1345B696832D0B536D6DB691F2153749A83117

CE316DB223042FFCC02D7E5F600A3145F29A6CF3F0F4F07BDFC702EBAAE6EE239F2AB3C44CC5FD5220619DC0B6A9FC0143A9

E7CC93CD25736A15F8374C624C8AB3CB499B517F18B45D8BF77B476BF81B9AD61A313216DFBF33AA351C67DE6C03D0FFABD6

FA55239BD7611EEEB54A4E860C8ED9C6B0E16A44A9446540874416E94AE0E382A574FB07DAEC3BC8F6C0A73580F65374BFD4

E707D3A6A5A371A451EF85491AE0E9A01F5A7C4D22E4A2C667BFF924336E0BE8C6CAB5E5454A8205FB41D2C192C7F91B3C24

60F276049C0B860E7C18DBB41CAF832F8B415183513D9CADC5D3B752798EB052BBF58BF8AC407323402094C67803B6ECD507

594A1DC2B7A3385E2EF7A692FA1621F2837E69B2BB050D826884B7DBFC6EF441682C5502094A43C590868980574F3060FDED

1F008E2696A9AE15D00B335DC04B09AC6A1847530EE6DCC101A127E87DF658DDF80BC2A495BC7DF577261D22C7FBC98A3286

F85878B036DAA0EF318854AF37D3A79A36F2A1AA3019E9CBB72267DF5B7B5537B65DB5A50E65486D616C76AAE8BF2E414349

7A0344F7BA89CB3090D7F3A21B1F42BB5C27311FB9218A0FDA0A905C32F374929A70BD206DB30E0BBFD916F327C054A108CA

4E498352561FA7FE7520B04EDF7F320CE6F80230EFEF15F63DEB205461A9EF4AC131897465B7C7AA1DFE1ED4FF100514EAAB

08D9FA86214F43D3292FB19B0DE64D754992DCEB772AC5BBE06DB198934E8C24170F73DCC84798ED693669D3148963E45B6F

BB9610C6EDBB52292CA18EE8042B536AEEF0AA3238ED8D919B5D23774A2B317FD212DE4B409B1BFF383C5D0CBCD5C5465F74

E73D52ACFDE8D8B3272840150AF583266655DE7945E18D111B7973904471DAB402E0556740CED06ADA70130E41B3ACB7B77A

F86F46173CA1E0D6D3DE6EB77087E36D26D40144FC09E6F9FD672263D87D1C9783B0657667D31A84548EB109152A253229EE

35150CDB4315451059407F046095AC95580B51CEC08BCCA3EC42729BFB81E16F058ACB6A3F0213C5C9EE5BF63BA29C126A64

E4C3F07B10A67F946B1D16B0EE9DC6463063A894180451525DDA4532E3BE24247FE2AA12D4D0874C4BA30555AF8B92C95DBD

54053D306A20A0CF6BE44D9DAF8DA825612ECEEEB42B74FA4A1AFA5BDDEFAB90B9F11C4B9785B0E8DA1A8C6D28EB48E2767B

ED65DC85DD15C701FF5EA51118B3BC60264D1A4E3518B33FBC9717DA861F5779B02E2E3734D200C891FDF62096FA1E41AE32

08E0D0C8E62D9844DAF6F33E7742C0603D3E67B450D724788A1BB25B8BAB655FF9F137BEEEEA20CCEE4784D22DAD2B842A24

CE304C292174FA618721B86AE2DDF32206E5113AD27717D54C5865DC4C6EA1A7CFFF89657A8C57B9D7BD38DAC1EA4AB45247

5D5C9E09B9637344A5B37D66093D4A51D623906309D80B2AAE41DAC502767C8BA037044F07DD3134278EDCB4CA8E804CDF00

540ECE416E3EF56AF4348CC478760041801DA699DB4672FBE31CD3D07F240D928846D921EB1AE981F9ACD1CF69B6295B9766

1D3B780C8AF018D2E221B5D2439DF24B56DC78D3E0E2A1D63DD5943DF272FED98F071EB1AB9E9883B436AA09F4B4B2E7A725

93AD8A8049BFC2C41C276BEE7F1F36CDAD6277712312CA87373769CBF254B6C4009D01995AADC3F70F6A9C6B77B052969A12

C943847ECAEAA20AA5F81F5AE5A2FB00E05232E0A3065C13F7825701EF1BD663564FEC136CC9D60CCB767BBE110A3B9AB4D1

83D21994FA15DC52EC29EEF383144A1DB3464F54C7A9D187595727E5F0630858ABA456A5903C01C52449B8F7BFA57D9F4554

87ECEC2FB155981B1F0FF96AB4B281945D2057350A304A1A3F01402"

^^^are here the offsets of the wow client included?

or in the strange patch.dat muttley

Edited by JRSmile

Share this post


Link to post
Share on other sites

Posted

As you might notice some of the code are scraps from some of my old code will most of it is fully rewritten.

The opening sequence was the most important since is was something that screw up most of my old code.

A. If you do not have World Of Warcraft open, a listbox will apear and when you open WoW it will appear in the list and then you can proceed.

B. If you have multiple copies of WoW running you can select between them so it doesn't automatically choose the first copy.

C. The application detects which version of wow you are running and compare it with the data you download. If the version is not supported it will tell you.

D. You cannot have 2 copies of the application running at the same time so if you try to, it will the copy you have already open and start the new one.

E. It will detect if you quit wow.

Share this post


Link to post
Share on other sites

Posted (edited)

it seems to me that it will be some kind of commercial, true?

and #include <Injectdll2.au3> is missing, if i want to recompile muttley

Edited by JRSmile

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!


Register a new account

Sign in

Already have an account? Sign in here.


Sign In Now
Sign in to follow this  
Followers 0

  • Recently Browsing   0 members

    No registered users viewing this page.