Jump to content
UEZ

[GAME] AUTOITEROIDS v1.019 Build 2016-01-14 Final

Recommended Posts

UEZ

Here my 1st game ever.

 

A try to remake of the arcade classical 2D game Asteroids® by Atari (1979). :D

 

More information about Asteroids® here or here!

 

Play online here :idea:

 

 

Please don't link to file below directly from other websites!

 

Downloads (2263 previously):  AUTOITEROIDS v1.019 Build 2016-01-14.7z (use e.g. 7-Zip to extract archive)

 

Only compiled version incl. needed files here: <4shared.com> or <MediaFire.com>

 

 

post-29844-1242504010_thumb.png

 

 

 

LEGAL NOTICE:

 

This game is an unoffical clone of the original Asteroids®

game and is not endorsed by the registered trademark

and copyright owners Atari Interactive, Inc.

 

 

 

Short description:

 

AUTOITEROIDS is a remake of the video arcade game released in 1979 by Atari, Inc.

It was one of the most popular and influential games of the Golden Age of Arcade Games.

The player controls a spaceship in an asteroid field which is periodically traversed by flying saucers.

The object of the game is to shoot and destroy asteroids and saucers while not colliding with either,

or being hit by the saucers' counter-fire.

 

 

Keys:

 

ctrl - shoot,

up - thrust,

left - turn left,

right - turn right,

space - hyper jump

 

 

Game details:

 

game is starting with 3 asteroids

every 10.000 points increase of level (among other things amount of asteroids + 1)

every 30.000 points extra live

biggest asteroid = 20 points

medium asteroid = 50 points

smallest asteroid = 100 points

big alien spaceship = 200 points

small alien spaceship = 1000 point

 

 

Credits:

 

Main code: UEZ

Bass UDF: BrettF

Bass DLL: www.un4seen.com

GDI+ font loader code: Yashied

Menu item code: rasim

Sound + sound code modifications: Spiff59

Font: ck! [Freaky Fonts]

GetKeyboardState code: eukalyptus

Atari for the original game concept

AutoIt forum for all the help and the source of knowledge :P

 

Have fun :party:

UEZ

:D

 

 

Change log:

2009-05-16 release of the game AUTOITEROIDS

2009-05-17 thanks to Spiff59 for modification of the sound part -> now the sound is much smoother

2009-05-18 adjusted collision parameters -> now much better collision detection

2009-05-24 added highscore feature and fixed several bugs (RC1)

2009-05-31 pre final version released (only credit intro left)

2009-06-09 some bugs fixed and made some game setting modifications -> game play now smoother; also collision detection adjusted again; credit intro still in building phase :-(

2009-06-11 fixed some wrong game settings and change highscore file format -> now encrypted to avoid highscore manipulation ;-). Old score will be overwritten!

2009-06-13 display of level in GUI title menu was not working properly -> fixed

2009-06-14 released final version but without a credit part (will come later, if I find more time)

2009-06-16 minor: forgot to calculate font size when you change the window resolution (720x480 is optimized for collision detection - other window resolutions may not working properly for collision detection)

2009-06-17 minor: still overlooked font size parameteres and alien spaceship shoot parameters when windows sizes <> 720x480

2009-06-18 minor: some game settings added (will wait a few seconds after all asteroids have been destroyed) and added shadow at Asteroids label in About window

2009-07-01 minor: last update of the game code -> explosion of human spaceship fixed (copy/paste bug), change routine for copy bmp to GUI and added fps display counter

2009-12-21 minor: fixed some small bugs, replaced IsPressed() with WinAPI_GetKeyboardState function (thanks Eukalyptus), added latest Bass.dll, made game play specific modifications and changed code to be compatible with AutoIt v3.3.2.0!

2009-12-29 minor: forgot to undo silly modifications and added faster GDI+ backbuffer technique (thanks to AndyG for the idea)!

2011-04-12 minor: made small modifications, tried some optimizations (it is very hard to remember what I did in the code after a very long time of absence) :)

2011-04-29 minor: GUIRegisterMsg($WM_ERASEBKGND, "WM_ERASEBKGND") caused About window to look awful and added check for aero to place game graphic window to GUI more precise using _WinAPI_BitBlt()

2011-05-13 minor: cleaned up WinAPI display settings and forgot to undo About window settings.

2011-05-31 minor: speeded up game play by adding bitmaps instead of using one _WinAPI_CreateCompatibleBitmap(). I don't know why this is faster :P

2011-06-09 minor: changed FPS code because old code displayed too high FPS values

2012-07-30 minor: changed drawline function from integer to float to avoid wobbling of asteroids and spaceship

2016-01-14 minor: fixed code to run on AutoIt v3.3.14.2 when no highscore exists and changed GDI+ variable

Edited by UEZ
  • Like 3

Please don't send me any personal message and ask for support! I will not reply!

Selection of finest graphical examples at Codepen.io

The own fart smells best!
Her 'sikim hıyar' diyene bir avuç tuz alıp koşma!
¯\_(ツ)_/¯  ٩(●̮̮̃•̃)۶ ٩(-̮̮̃-̃)۶ૐ

Share this post


Link to post
Share on other sites
Valuater

REALLY GOOD UEZ!!!

It's just like the real game... movement, sounds, feel-of-control, visuals.

I can even fly through the screen. I used to line up 2 rows of space ships on the pay-to-play game.

I do miss the ability to shoot 4 times in a row though. I used to lay-out a blanket of bullets for the ships.

Can this be added?

Thanks

8)

Edited by Valuater

NEWHeader1.png

Share this post


Link to post
Share on other sites
UEZ

REALLY GOOD UEZ!!!

It's just like the real game.

I can even fly through the screen. I used to line up 2 rows of space ships on the pay-to-play game.

I do miss the ability to shoot 4 times in a row though. Can this be added?

Thanks

8)

Thanks Valuater.

Yes, you are right - the code is not working properly ($amount_of_shoots_max = 4 is already set) :)

I put it also to my to do list :party:

UEZ


Please don't send me any personal message and ask for support! I will not reply!

Selection of finest graphical examples at Codepen.io

The own fart smells best!
Her 'sikim hıyar' diyene bir avuç tuz alıp koşma!
¯\_(ツ)_/¯  ٩(●̮̮̃•̃)۶ ٩(-̮̮̃-̃)۶ૐ

Share this post


Link to post
Share on other sites
oMBRa

Well Done UEZ!!, very nice game, I like the realistic movements

Share this post


Link to post
Share on other sites
UEZ

Well Done UEZ!!, very nice game, I like the realistic movements

Thanks, the human ship movement was a lot easier than the other parts.

UEZ


Please don't send me any personal message and ask for support! I will not reply!

Selection of finest graphical examples at Codepen.io

The own fart smells best!
Her 'sikim hıyar' diyene bir avuç tuz alıp koşma!
¯\_(ツ)_/¯  ٩(●̮̮̃•̃)۶ ٩(-̮̮̃-̃)۶ૐ

Share this post


Link to post
Share on other sites
Yashied
Skizmata

Amazing! 100% Amazing

Thank you so much lots of great work very much to be learned from the source. An amazing demonstration!


AutoIt changed my life.

Share this post


Link to post
Share on other sites
UEZ

UEZ, good job!

Posted Image

Thanks.

Amazing! 100% Amazing

Thank you so much lots of great work very much to be learned from the source. An amazing demonstration!

Thanks for the feedback - currently I lost the overview over my code :)

UEZ


Please don't send me any personal message and ask for support! I will not reply!

Selection of finest graphical examples at Codepen.io

The own fart smells best!
Her 'sikim hıyar' diyene bir avuç tuz alıp koşma!
¯\_(ツ)_/¯  ٩(●̮̮̃•̃)۶ ٩(-̮̮̃-̃)۶ૐ

Share this post


Link to post
Share on other sites
corgano

you should remove bullet limit to make it more authentic


0x616e2069646561206973206c696b652061206d616e20776974686f7574206120626f64792c20746f206669676874206f6e6520697320746f206e657665722077696e2e2e2e2e

Share this post


Link to post
Share on other sites
UEZ

you should remove bullet limit to make it more authentic

I wanted to make it 1:1 as much as possible - keep it simple with all its limitations!

I forgot to implement the explosion of the human space which is not an explosion of 10 pixel but breaks in several parts!

I will implement it in the next release.

UEZ

Edited by UEZ

Please don't send me any personal message and ask for support! I will not reply!

Selection of finest graphical examples at Codepen.io

The own fart smells best!
Her 'sikim hıyar' diyene bir avuç tuz alıp koşma!
¯\_(ツ)_/¯  ٩(●̮̮̃•̃)۶ ٩(-̮̮̃-̃)۶ૐ

Share this post


Link to post
Share on other sites
Spiff59

This is absolutely fantastic!

Kudos, UEZ.

I wonder if this would speed collision detection?

;check space ship for border collision
                $z = $border_limes * $object_scale
                If $x < -$z Then $x = $width + $z
                If $x > $width + $z Then $x = -$z
                If $y < -$z Then $y = $height + $z
                If $y > $height + $z Then $y = -$z

Share this post


Link to post
Share on other sites
UEZ

This is absolutely fantastic!

Kudos, UEZ.

I wonder if this would speed collision detection?

;check space ship for border collision
                    $z = $border_limes * $object_scale
                    If $x < -$z Then $x = $width + $z
                    If $x > $width + $z Then $x = -$z
                    If $y < -$z Then $y = $height + $z
                    If $y > $height + $z Then $y = -$z
Thanks for feedback.

Btw, the check of the border is not the real problem but your are right :)

UEZ

Edited by UEZ

Please don't send me any personal message and ask for support! I will not reply!

Selection of finest graphical examples at Codepen.io

The own fart smells best!
Her 'sikim hıyar' diyene bir avuç tuz alıp koşma!
¯\_(ツ)_/¯  ٩(●̮̮̃•̃)۶ ٩(-̮̮̃-̃)۶ૐ

Share this post


Link to post
Share on other sites
Spiff59

Thanks for feedback.

Btw, the check of the border is not the real problem but your are right :)

UEZ

Yes, I noticed that's not the "collision" that I'd like to see happening more often :party:

That area just jumped out at me. I'm good at cleanup, but all this GDI+stuff is greek to me.

How long ago did you start this?

I just have to say, again, I'm flabberghasted. Extremely impressed.

Share this post


Link to post
Share on other sites
UEZ

Yes, I noticed that's not the "collision" that I'd like to see happening more often :)

That area just jumped out at me. I'm good at cleanup, but all this GDI+stuff is greek to me.

How long ago did you start this?

I just have to say, again, I'm flabberghasted. Extremely impressed.

I started it approx. 2 weeks ago but I had this in mind a long time ago (just dreamt of it).

Btw, how can I set up the music speed using bass.udf (_BASS_ChannelSetAttribute?)? Because the sound of the alien starship is too slow...

Thanks,

UEZ

Edited by UEZ

Please don't send me any personal message and ask for support! I will not reply!

Selection of finest graphical examples at Codepen.io

The own fart smells best!
Her 'sikim hıyar' diyene bir avuç tuz alıp koşma!
¯\_(ツ)_/¯  ٩(●̮̮̃•̃)۶ ٩(-̮̮̃-̃)۶ૐ

Share this post


Link to post
Share on other sites
WideBoyDixon

UEZ this is just totally awesome. Kudos to you my friend. Here comes 5* :)

WBD

Share this post


Link to post
Share on other sites
Valuater

UEZ this is just totally awesome. Kudos to you my friend. Here comes 5* :party:

WBD

Posted my 5 stars too! :)

8)


NEWHeader1.png

Share this post


Link to post
Share on other sites
gseller

Way Cool UEZ! Jumpy for me but looks just like the orig....

Share this post


Link to post
Share on other sites
Spiff59

The smaller files attached below seem to behave better...

Edit: I also tinkered with the definitions for the alien ship sounds to make them looping, then moved the Play() to the random statement that brings the ship out, so it's only called once. Then I put a ChannelStop in your alien_ship_reset routine. So it only starts the sound once when the ship appears and lets it loop until the ship is gone. Seems to sound real smooth with no pauses. I was playing with the control logic for the thump/thump game sounds too, so better make sure I didn;t screw it up. Anyway, it was easier to attach the changes in the whole file than paste them into this post. (Hope you don't mind me playing with your baby, I think it's pretty cool , and I guess I'm bored).

Edit: Deleted attachments to free up some disk space.

Edited by Spiff59

Share this post


Link to post
Share on other sites
UEZ

The smaller files attached below seem to behave better...

Edit: I also tinkered with the definitions for the alien ship sounds to make them looping, then moved the Play() to the random statement that brings the ship out, so it's only called once. Then I put a ChannelStop in your alien_ship_reset routine. So it only starts the sound once when the ship appears and lets it loop until the ship is gone. Seems to sound real smooth with no pauses. I was playing with the control logic for the thump/thump game sounds too, so better make sure I didn;t screw it up. Anyway, it was easier to attach the changes in the whole file than paste them into this post. (Hope you don't mind me playing with your baby, I think it's pretty cool , and I guess I'm bored).

Thanks Spiff59, the sound is really much smoother. I updated it (1st post)!

UEZ

Edited by UEZ

Please don't send me any personal message and ask for support! I will not reply!

Selection of finest graphical examples at Codepen.io

The own fart smells best!
Her 'sikim hıyar' diyene bir avuç tuz alıp koşma!
¯\_(ツ)_/¯  ٩(●̮̮̃•̃)۶ ٩(-̮̮̃-̃)۶ૐ

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

  • Similar Content

    • spikespaz
      By spikespaz
      The rule against game automation is misguided and unhelpful for the following reasons.
       
      I am a developer, using AutoIt to automate testing for a game that I am developing. Singleplayer games can be mundane and sometimes cheating can be overlooked. Multiplayer games usually have anticheat against repetitive robotic actions anyways. People want to override the control schemes of games with bad customization. Eg. Axiom Verge, Fortnite (Crouching). Game automation is not always bad. If the user feels the need to automate a singleplayer game for boring or mundane tasks, that is their choice. Similarly, if I wish to use scripts to automate testing, that is my choice.
      Game automation can be a problem for online multiplayer games, giving players a competitive advantage. This could be countered by common sense; ask OP what game they are automating, and is it an online game? What is this script for, and what does it seem to do?

      Please revise the rule as it seems very unnecessary and harmful to people seeking help with innocent attempts at game automation.
    • UEZ
      By UEZ
      AutoIt Windows Screenshooter
      Key Features:
      takes easily a screenshot from any visible window capture any region of the desktop incl. freehand capturing capture GUI controls and GUI menus separately capture a marked area every x seconds for a duration of y seconds create a GIF animation from saved frames (Vista or higher os required) capture to AVI file (without audio!) takes a screenshot from web sites (available only on Win7+ os and when Aero is enabled) put images to clipboard to paste to other applications easily color picker save image in different formats and also to PDF! add timestamp to saved images simple image editing options: greyscale, b&w, invert, rotate +-90° send image to printer and default email client preview of captured screens incl. zoom option multi monitor support display pixel color under mouse ruler basic image editor (paint, highlight, ellipse, rectangle, text and some graphic FX) watermark captured image no 3rd party tools or DLLs used - pure AutoIt! fully portable - no installation is needed multi language feature (Eng, Ger, Tur, Fra and Rus only) To do:
      capture content of scrollable window/control capture cascaded menus Due to DllCall("User32.dll", "int", "PrintWindow", "hwnd", $hWnd, "handle", $hMemDC, "int", 0) limitation some windows cannot be captured properly (GDI+, ProgDVB, etc.) but can take screenshots of hidden windows. One workaround is to use full screen capturing (F11/F12) or "Grab Screen" function! Or try double click with rmb on listview items (beta).
      Download source code (6006 downloads previously): AutoIt Windows Screenshooter v1.80 Build 2018-07-20.7z (version 3.3.12.0+ needed!)
      You are not allowed to sell this code or just parts of it in a commercial project or modify it and distribute it with a different name!
      Download compiled Exe only: 4shared / Media Fire / Softpedia (1.54mb)
      Distributing copies of the program in compiled format (exe) must be free of any fee!
      -----> click here to Donate!  
       
      (Current donators: 1. Cuong N.) 
      It is designed for Win7+ operating systems with AERO enabled! E.g. on WinXP machines some functions are not working properly and might crash the application!
      AV scanners may have a negative impact the execution of compiled exe and might report any malware. I guarantee that there is no malicious code in the source code / exe!!! 
      Main GUI:

       
       
      About Intro:

       
       
      Basic Image Editor:

       
       
      Watermark:

       
       
      Click link for an enhanced version of Watermark Image.
      Credits:
      main code by UEZ additional code (alphabetical order) by Authenticity, AutoItObject Team, Eemuli, Eukalyptus, funkey, _Kurt, martin, monoceres, ProgAndy, taietel, trancexx, Ward, wolf9228 and Yashied! mesale0077 for turkish translation wakillon for french translation AZJIO for russian translation Keys:
      Main GUI:
      User your mouse to scroll preview window or
      Numpad 8: Scroll preview window up
      Numpad 2: Scroll preview window down
      Numpad 4: Scroll preview window left
      Numpad 6: Scroll preview window right
      Numpad +: zoom in preview window or mousewheel down
      Numpad -: zoom out preview window or mousewheel up
      F1: capture again on last position
      F5: refresh Windows Name list
      PRINTSCREEN: take screenshot from whole screen
      ALT+PRINTSCR: take a screenshot from active window
      F10: Undo made changes with Image Editing function
      F11: take screenshot from whole screen incl mouse cursor
      F12: take screenshot from whole screen
      Ctrl+Alt+F9 start "Grab Screen" mode
      Ctrl+Alt+F12: take a screenshot from active window using alternative screenshot functionality (beta)!
      Ctrl+r: call ruler
      Ctrl+s: save current displayed image
      Ctrl+x: exit program
      ctrl+w: call web grab input field (availabe only when Aero is enabled)
      Ctrl+i: call image editor
      Ctrl+m: call watermark editor
      Ctrl+z: undo
      Only available on Vista+ os: double click with rmb on list items to use alternative screenshot functionality (beta)!
      When 'Grab Screen' is clicked you can hold down the ctrl key to switch to 'grab controls' mode. Control under mouse will be framed red.
      ctrl + shift will take the screenshot of appropriate control. To capture GUI menues you can press rmb which simulates the lmb. When a menu is opened press shift additionaly to capture it.
      Press and hold only the shift key to capture any region on the desktop using freehand capturing - release it so capture marked regions!
      Or just mark resizeable area which you want to grab. Press CTRL key to grab marked area or right mouse button to capture the marked area every x seconds for a duration of y seconds.
      When saving the image just enter the extension you whish to use (*.jpg;*.png;*.bmp;*.gif;*.tif;*.pdf). Big thanks to taietel for his PDF UDF!
      Image Editor:
      s: save
      c: copy
      n: send
      h: highlighter
      p: pen
      r: rectangle
      e: ellipse
      a: arrow
      o: color
      t: text
      g: text config
      Ctrl+z: undo
      Watermark editor:
      Ctrl+z: undo
       
      To start the app minimized just call it "Windows Screenshooter.exe /min"
      Maybe it is useful for someone...
      Any kind of comment is welcome.
      Br,
      UEZ
      Change log:
       
    • Barney
      By Barney
      Hi guys, I just finished a Connect 4 game by using MiniMax with Alpha Beta Pruning. I haven't written a program for a long time, but writing an
      AI program is always funny! I have to learn how the algorithm works and try to optimize the code to run faster. Let's play and have fun!

      Oops, I lost the game ...

      Thanks guys!
      Download: Connect 4.zip
    • c.haslam
      By c.haslam
      I think that _GDIPlus_ImageGetPropertyItem should return a Property Item that can readily be set as a property of another image. Why would one want to do this? A script might (as one of mine does) edit an image of a .jpg file then write the result to a .jpg file. In editing it, in my case, the number of horizontal and vertical pixels change, and the date/time edited should be set as a property. All other property items remain the same. Other GDI+ users may change other properties.
      So an approach is to copy all the property items from image1 to image2, then update a few properties.
      M$ provides a Property Item class (id, length, pointer to an array of values) but _GDIPlus_ImageGetPropertyItem returns something different.
      I think that, wherever reasonable, UDFs that are wrappers for M$ methods should work like M$'s methods. _GDIPlus_ImageGetPropertyItem does not do this:
      While M$ returns 2 values for a value that is a ratio of 2 numbers,  _GDIPlus_ImageGetPropertyItem returns numerator/denominator as a single value (often a Double). _GDIPlus_ImageSetPropertyItem (when included in GDIPlus.au3) will be unable to set ratio property items properly because it cannot know what the numerator and denominator are. So copying such property items will not work properly. M$ has a Void* buffer where the buffer is an array of values but _GDIPlus_ImageGetPropertyItem() returns the values in the same 1-d array as id, length and type. M$'s approach produces a 1-d array with the same number of elements for all property items while _GDIPlus_ImageGetPropertyItem produces a 1-d array with various numbers of elements. To me, this is not good programming practice. For a photo from a Sony camera, the worst case has 1-d array with 67 elements. When combined into a 2-d array with the property items of all properties, there are 66 rows and 67 columns, with many elements not used. So I suggest that _GDIPlus_ImageGetPropertyItem look like this:
      ; #FUNCTION# ==================================================================================================================== ; Name ..........: cGDIPlus_ImageGetPropertyItem ; Description ...: Gets a specified property item (piece of meta data) from an Image object ; Syntax ........: cGDIPlus_ImageGetPropertyItem($hImage, $iPropID) ; Parameters ....: $hImage - Pointer to an image object ; $iPropID - Identifier of the property item to be retrieved ; Return values .: Success: Array containing the values of the property item ; [0] - identifier ; [1] - size, in bytes, of the value array ; [2] - type of value(s) in the value array ; [3] - value array ; Failure: Sets the @error flag to non-zero, @extended may contain GPSTATUS error code ($GPID_ERR*). ; Author ........: Eukalyptus ; Modified ......: c.haslam ; Remarks .......: types: unsigned byte = 1, ASCII string = 2, unsigned short = 3, unsigned long = 4, ; unsinged rational = 5, undefined = 7, signed long = 9, signed rational = 10 ; Related .......: _GDIPlus_ImageGetPropertyIdList ; Link ..........: https://msdn.microsoft.com/en-us/library/windows/desktop/ms535390(v=vs.85).aspx, ; https://msdn.microsoft.com/en-us/library/windows/desktop/ms534493(v=vs.85).aspx, ; https://msdn.microsoft.com/en-us/library/windows/desktop/ms534414(v=vs.85).aspx ; Example .......: Yes ; =============================================================================================================================== Func cGDIPlus_ImageGetPropertyItem($hImage, $iPropID) Local $iSize = __GDIPlus_ImageGetPropertyItemSize($hImage, $iPropID) If @error Then Return SetError(@error, @extended, -1) Local $tBuffer = DllStructCreate("byte[" & $iSize & "];") Local $pBuffer = DllStructGetPtr($tBuffer) Local $aResult = DllCall($__g_hGDIPDll, "int", "GdipGetPropertyItem", "handle", $hImage, "uint", _ $iPropID, "uint", $iSize, "struct*", $tBuffer) If @error Then Return SetError(@error, @extended, -1) If $aResult[0] Then Return SetError(10, $aResult[0], False) Local $tPropertyItem = DllStructCreate("int id; int length; short type; ptr pvalue;", $pBuffer) Local $iBytes = DllStructGetData($tPropertyItem, "length") Local $pValue = DllStructGetData($tPropertyItem, "pvalue") Local $aRet[4] Local $type = DllStructGetData($tPropertyItem,'type') Local $tValues, $iValues Switch $type Case 2 ;ASCII String $iValues = 1 $tValues = DllStructCreate("char[" & $iBytes & "];", $pValue) Case 3 ;Array of UShort $iValues = Int($iBytes / 2) $tValues = DllStructCreate("ushort[" & $iValues & "];", $pValue) Case 4, 5 ;Array of UInt / Fraction $iValues = Int($iBytes / 4) $tValues = DllStructCreate("uint[" & $iValues & "];", $pValue) Case 9, 10 ;Array of Int / Fraction $iValues = Int($iBytes / 4) $tValues = DllStructCreate("int[" & $iValues & "];", $pValue) Case Else ;Array of Bytes $iValues = 1 $tValues = DllStructCreate("byte[" & $iBytes & "];", $pValue) EndSwitch $aRet[0] = DllStructGetData($tPropertyItem,'id') $aRet[1] = $iBytes $aRet[2] = $type Local $aVals[$iValues] If $type=2 Or $type=7 Then ; ASCII string or undefined $aVals[0] = DllStructGetData($tValues,1) Else For $i = 0 To $iValues-1 $aVals[$i] = DllStructGetData($tValues,1,$i+1) Next EndIf $aRet[3] = $aVals Return $aRet EndFunc And here is an example:
      #include <GDIPlus.au3> #include <Array.au3> Example() Func Example() _GDIPlus_Startup() Local $hImage = _GDIPlus_ImageLoadFromFile(RegRead((@AutoItX64 = True ? "HKLM\SOFTWARE\Wow6432Node\AutoIt v3\AutoIt" : "HKLM\SOFTWARE\AutoIt v3\AutoIt"), "InstallDir") & "\Examples\GUI\Torus.png") If @error Then _GDIPlus_Shutdown() MsgBox(16, "", "An error has occured - unable to load image!", 30) Return False EndIf Local $ar = _GDIPlus_ImageGetPropertyIdList($hImage) Local $vPropNbrs[UBound($ar,1)-1] ; Extract ID numbers For $i = 1 To UBound($ar,1)-1 $vPropNbrs[$i-1] = $ar[$i][0] Next ; Get all property items Local $aPropItems[UBound($vPropNbrs)][4],$vPropItem For $i = 0 To UBound($vPropNbrs)-1 $vPropItem = cGDIPlus_ImageGetPropertyItem($hImage,$vPropNbrs[$i]) For $j = 0 To 3 $aPropItems[$i][$j] = $vPropItem[$j] Next Next ; Collapse values arrays so _ArrayDisplay can display them Local $ar = $aPropItems For $i = 0 To UBound($aPropItems,1)-1 $ar[$i][0] = '0x'&Hex($ar[$i][0],4) $ar[$i][3] = '' For $j = 0 To UBound($aPropItems[$i][3])-1 $ar[$i][3] &= ($aPropItems[$i][3])[$j]&'|' Next $ar[$i][3] = StringTrimRight($ar[$i][3],1) Next _ArrayDisplay($ar) _GDIPlus_Shutdown() EndFunc Unfortunately this example (based on one now in the Help) does not exercise most of the item types, but I do not know of a file with EXIF metadata that is on most PCs. I have tested this code by updating and adding property items to torus.jpg and to a photo taken by a Sony camera. The code for implementing and calling _GDIPlus_ImageSetPropertyItem will be fairly simple [see below].
       
      Your thoughts?
       
    • c.haslam
      By c.haslam
      I have a strange symptom of a problem somewhere in my code, or in a UDF: when I add code to get all properties of a GDI+ image to a 6000-line script,  the variable type of a parameter is reported as a pointer when the caller clearly has this argument as a string. If I comment out my code that gets the properties, the function properly sees the parameter as a string.
      [Edit: The reporting as a pointer and getting image properties are miles apart, both in where they are in the script code and in where they are run.]
      At this point, I am looking for clues as to why this is happening, so the hunt is on!
      I have noticed one odd thing, in _GDIPlus_ImageGetPropertyIdList() I see a line that begins Local $sPropertyTagInfo = . This "line" is split into 2 lines. SCiTE shows that the first line is 2454 characters and the second 2400. Adding these numbers I get 4854 characters.
      But the Help for AutoIt3 Limits/defaults says that MAXLINESIZE, Maximum size for a line of script, is 4096 characters.
      The line would exceed the limit if AutoIt considers the subject line to be 1 line and not 2 lines.
      My question: is this line legal? Is buffer overun possible?
×