FRESteamWorks is an Adobe native extension to access the SteamWorks API. Using this extension is possible to manage achievements, set/get stats values and write/read files in the cloud.

The stats and achievements methods are an easy way to provide persistent, roaming achievement and statistics tracking for users in the Steam platform.

Sample

package
{
	import com.amanitadesign.steam.FRESteamWorks;
	import com.amanitadesign.steam.SteamConstants;
	import com.amanitadesign.steam.SteamEvent;

	import flash.display.SimpleButton;
	import flash.display.Sprite;
	import flash.events.MouseEvent;
	import flash.text.TextField;
	import flash.utils.ByteArray;

	public class FRESteamWorksTest extends Sprite
	{
		public var Steamworks:FRESteamWorks = new FRESteamWorks();
		public var tf:TextField;
		public function FRESteamWorksTest()
		{
			tf = new TextField();
			tf.width = stage.stageWidth;
			tf.height = stage.stageHeight;
			addChild(tf);

			tf.addEventListener(MouseEvent.MOUSE_DOWN, onClick);

			Steamworks.addEventListener(SteamEvent.STEAM_RESPONSE, onSteamResponse);

			if(Steamworks.init()){
				log("STEAMWORKS API is available\n");

				//comment.. current stats and achievement ids are from steam example app which is provided with their SDK
				log("isAchievement('ACH_WIN_ONE_GAME') == "+Steamworks.isAchievement("ACH_WIN_ONE_GAME"));
				log("isAchievement('ACH_TRAVEL_FAR_SINGLE') == "+Steamworks.isAchievement("ACH_TRAVEL_FAR_SINGLE"));
				log("setStatFloat('FeetTraveled') == "+Steamworks.setStatFloat('FeetTraveled', 21.3));
				log("setStatInt('NumGames', 2) == "+Steamworks.setStatInt('NumGames', 2));
				Steamworks.storeStats();
				log("getStatInt('NumGames') == "+Steamworks.getStatInt('NumGames'));
				log("getStatFloat('FeetTraveled') == "+Steamworks.getStatFloat('FeetTraveled'));

				log("setCloudEnabledForApp(false) == "+Steamworks.setCloudEnabledForApp(false) );
				log("setCloudEnabledForApp(true) == "+Steamworks.setCloudEnabledForApp(true) );
				log("isCloudEnabledForApp() == "+Steamworks.isCloudEnabledForApp() );
				log("getFileCount() == "+Steamworks.getFileCount() );
				log("fileExists('test.txt') == "+Steamworks.fileExists('test.txt') );

				//comment.. writing to app with id 480 is somehow not working, but works with our real appId
				log("writeFileToCloud('test.txt','hello steam') == "+writeFileToCloud('test.txt','hello steam'));
				log("readFileFromCloud('test.txt') == "+readFileFromCloud('test.txt') );
				//-----------

				//Steamworks.requestStats();
				Steamworks.resetAllStats(true);
			}else {
				tf.appendText("STEAMWORKS API is NOT available\n");
			}

		}
		private function log(value:String):void{
			tf.appendText(value+"\n");
			tf.scrollV = tf.maxScrollV;
		}
		public function writeFileToCloud(fileName:String, data:String):Boolean {
			var dataOut:ByteArray = new ByteArray();
			dataOut.writeUTFBytes(data);
			return Steamworks.fileWrite(fileName, dataOut);
		}

		public function readFileFromCloud(fileName:String):String {
			var dataIn:ByteArray = new ByteArray();
			var result:String;
			dataIn.position = 0;
			dataIn.length = Steamworks.getFileSize(fileName);

			if(dataIn.length>0 && Steamworks.fileRead(fileName,dataIn)){
				result = dataIn.readUTFBytes(dataIn.length);
			}
			return result;
		}

		public function onClick(e:MouseEvent):void{
			log("--click--");
			if(Steamworks.isReady){
				if(!Steamworks.isAchievement("ACH_WIN_ONE_GAME")) {
					log("setAchievement('ACH_WIN_ONE_GAME') == "+Steamworks.setAchievement("ACH_WIN_ONE_GAME"));
				} else {
					log("clearAchievement('ACH_WIN_ONE_GAME') == "+Steamworks.clearAchievement("ACH_WIN_ONE_GAME"));
				}
				if(Steamworks.fileExists('test.txt')){
					log("readFileFromCloud('test.txt') == "+readFileFromCloud('test.txt') );
					log("Steamworks.fileDelete('test.txt') == "+Steamworks.fileDelete('test.txt'));
				} else {
					log("writeFileToCloud('test.txt','click') == "+writeFileToCloud('test.txt','click'));
				}
				//Steamworks.storeStats();
			} else {
				log("not able to set achievement\n");
			}
		}

		public function onSteamResponse(e:SteamEvent):void{
			switch(e.req_type){
				case SteamConstants.RESPONSE_OnUserStatsStored:
					log("RESPONSE_OnUserStatsStored: "+e.response);
					break;
				case SteamConstants.RESPONSE_OnUserStatsReceived:
					log("RESPONSE_OnUserStatsReceived: "+e.response);
					break;
				case SteamConstants.RESPONSE_OnAchievementStored:
					log("RESPONSE_OnAchievementStored: "+e.response);
					break;
				default:
					log("STEAMresponse type:"+e.req_type+" response:"+e.response);
			}
		}
	}
}
Air Native Extension, Mac, Windows . URL.