{"id":1273,"date":"2012-04-08T17:42:37","date_gmt":"2012-04-08T17:42:37","guid":{"rendered":"http:\/\/www.drmop.com\/?p=1273"},"modified":"2012-04-15T18:36:36","modified_gmt":"2012-04-15T18:36:36","slug":"iwgame-engine-tutorial-basic-introduction","status":"publish","type":"post","link":"http:\/\/www.drmop.com\/index.php\/2012\/04\/08\/iwgame-engine-tutorial-basic-introduction\/","title":{"rendered":"IwGame Engine Tutorial \u2013 Basic introduction"},"content":{"rendered":"<h2>What is the IwGame Engine?<\/h2>\n<p>Welcome to the home of IwGame, the free open source cross platform mobile 2D game engine for smart phones, tablets and emerging technologies developed by <a href=\"http:\/\/www.pocketeers.co.uk\">Pocketeers Limited<\/a>. IwGame is designed and written on top of the\u00a0Marmalade SDK the ultimate \u00a0cross platform SDK for smart phones tablets and emerging technologies. In order to use the IwGame game engine you will need to download and install the Marmalade SDK.<br \/>\nIwGame supports the\u00a0following\u00a0platforms:<\/p>\n<ul>\n<li>iPhone, iPod and iPad<\/li>\n<li>Android phones and tablets (1.5+ including Ice Cream\u00a0Sandwich)<\/li>\n<li>Samsung Bada 1.0 \/ 2.0<\/li>\n<li>Blackberry BBX (Playbook)<\/li>\n<li>Symbian<\/li>\n<li>WebOS<\/li>\n<li>Windows Mobile<\/li>\n<li>Mobile Linux<\/li>\n<li>LG-TV<\/li>\n<li>Windows Desktop<\/li>\n<li>Mac OSX<\/li>\n<\/ul>\n<p>IwGame is free to use at your own discretion and the code base is open source . You do not need to\u00a0submit bug fixes or improvements, but we would be very happy if you did.<\/p>\n<p>You can find out more and download the IwGame Engine from the IwGame Engine home<\/p>\n<p>The IwGame engine has been in development since November 2011 and has had 14 releases to date<\/p>\n<p>The original IwGame concept set out to achieve the following:<\/p>\n<ul>\n<li>Create a game layer on top of the Marmalade SDK allowing developers to get game code up and running incredibly quickly without having to learn the ins and outs of the Marmalade SDK<\/li>\n<li>Create a solid feature rich gaming SDK that does not rely on the underlying platform<\/li>\n<li>Enable developers and designers to create content without writing any code<\/li>\n<\/ul>\n<p>In around 6 months time we achieved all three of the above aims and more:<\/p>\n<ul>\n<li>IwGame now supports a wealth of features that enable developers to create 2D games quickly and efficiently<\/li>\n<li>IwGame boasts a vast array of features, including all the basic game development features such as scenes, sprites, actors, animation, audio, input, mark-up language. IwGame also supports advanced features such as HTTP communications, unified Ads API, Facebook API and unified in-app purchasing.<\/li>\n<li>We wanted to put the IwGame engine into the hands of designers as well as programmers. We also wanted a way to separate game and UI layout design from code. We accomplished both of these aims by introducing the XOML mark-up language into the IwGame engine, allowing programmers and designers to not only design the layout and general interaction of games and apps but also define animations, resources, variables, conditions, events and actions. We also made the whole system extensible allowing developers to extend the language to fit whatever needs they may have.<\/li>\n<\/ul>\n<h2>Platform Independence<\/h2>\n<p>The IwGame engine strives to provide platform independence, so the developer has to deal less with the differences that separate platform from platform and spend more time dealing with creating a game. Because IwGame is built atop of the Marmalade SDK, this platform independence is mostly catered for, although there are a number of areas where the Marmalade SDK falls short:<\/p>\n<ul>\n<li>Screen size independence \u2013 IwGame uses a virtual canvas system, allowing each scene to specify a working resolution that the developer can rely on not changing from device to device. The scene will scale all its content to fit the target display resolution with no extra effort on the developers part<\/li>\n<li>Frame rate independence \u2013 Regardless of the target platform speed, all transient variables within a game are scaled by time to ensure that animations and movement etc do not suffere slow down or speed up on different platforms<\/li>\n<li>In-app purchasing \u2013 IwGame allows the developer to set-up and utilise in-app purchasing in a platform independent manner<\/li>\n<li>Unified Ads \u2013 IwGame provides a mediated unified Ad API that allows the developer to serve ads to their apps regardless of platform and from a number of different ad providers<\/li>\n<\/ul>\n<h2>Scene \/ Actor Concept<\/h2>\n<p>The most important concept behind the IwGame engine is the Scene \/ Actor system. IwGame uses scenes to hold collections of Actors. A game can be made up of a single scene or more usually a collection of scenes. For example, your main game can be built up of the following scenes:<\/p>\n<ul>\n<li>Game world background scene<\/li>\n<li>Game world foreground scene<\/li>\n<li>In-game HUD scene<\/li>\n<li>In-game menu scene<\/li>\n<li>End of level dialog<\/li>\n<\/ul>\n<p>Actors represent the game objects that live and work in your gaming world. An actor has logical, visual and physical components associated with them. The logical component is the game logic that gives the actor its purpose in the game world, the visual component is how the actor will appear on screen, usually some kind of sprite and finally the physical component tells the system how the actor will behave under physics (this component is optional). Actors can be defined hierarchically, allowing the developer to create complex objects that consist of multiple actors that are all connected with each actor having its own independent logic and visual but sharing the parents visual transform. Actors also support functionality components that can be stacked allowing the creation of vastly complex game objects from many smaller independent modules.<\/p>\n<p>Scenes can be hidden, moved and animated, all actors contained within a scene will obey the scenes visibility, colour and transforms.<\/p>\n<p>Creating a game is a case of creating scenes that represent the different components of a game then creating and adding actors that define the games behaviour.<\/p>\n<h2>Resource Management<\/h2>\n<p>IwGame supports resource management on a local per scene and a global basis. The resource management system will take care of cleaning up resources at the correct time. For example, all resources that are local to a scene will be destroyed when the scene has been destroyed. Global resources will remain present throughout the duration of the game, unless removed manually. The resource manager handles many different types of resources including images, animations, timelines, shapes, materials, fonts etc..<\/p>\n<h2>Animation<\/h2>\n<p>IwGame supports a very powerful key frame based animation system supports the following features:<\/p>\n<ul>\n<li>Time based frame and interpolated named animations<\/li>\n<li>Delayed and looped animations<\/li>\n<li>Support for boolean, float, vectors (2d, 3d and 4d), rect (for image frames), string and custom frame data types<\/li>\n<li>Resource manager that tracks and manages sets of animations (scene local and global)<\/li>\n<li>Animation data re-use using animation instances<\/li>\n<li>Animation time lines to support multiple simultaneous animations that can target object specific properties such as the colour of a scene or the position of an actor<\/li>\n<li>Time line manager that tracks and manages sets of animation time lines<\/li>\n<li>Callback notifications for animation instance started, stopped and looped events<\/li>\n<li>Animations and animation time lines can be defined and attached to actors and scenes using XOML<\/li>\n<li>Support for OnStart, OnEnd and OnRepeat events in code and in XOML<\/li>\n<li>Linear, quadratic, quartic and cubic in and out easing<\/li>\n<\/ul>\n<p>Scenes and actors can contain an animation timeline that will be applied to the scene or actors properties. For example, you may set up a timeline that contains animations that target position, scale, rotation and colour then attach that to a group of actors. The group of actors will all take on the animation properties of the timeline.<\/p>\n<h2>XOML Mark-up Language<\/h2>\n<p>By far the best feature of the IwGame engine is its built-in XML mark-up language (can be thought of as HTML for game development). XOML enables designers and developers to both create interactive content. XOML is a little more than a simple mark-up language as it allows the definition of variables, conditions, actions and events. Its entirely possible to create a complete interactive presentation, app or game using XOML. XOML also contains features to help create styled content using styles and templates.<\/p>\n<p>Lets take a look at a typical piece of XOML:<\/p>\n<pre><span style=\"color: #008000;\">&lt;!-- Create a scene to contain our logo actors --&gt;<\/span>\r\n&lt;<span style=\"color: #0000ff;\">Scene<\/span> Name=\"IntroScene\" Style=\"GenericSceneStyle\" Camera=\"IntroCam\" Timeline=\"camera_zoom\" Current=\"true\" OnGainedFocus=\"GainedFocus\" Batch=\"false\"&gt;\r\n\r\n    &lt;<span style=\"color: #0000ff;\">Actions<\/span> Name=\"GainedFocus\"&gt;\r\n        &lt;<span style=\"color: #0000ff;\">Action<\/span> Method=\"SetBGColour\" Param1=\"64, 128, 200, 255\" \/&gt;\r\n    &lt;\/<span style=\"color: #0000ff;\">Actions<\/span>&gt;\r\n\r\n    <span style=\"color: #008000;\">&lt;!-- End of logo actions --&gt;<\/span>\r\n    &lt;<span style=\"color: #0000ff;\">Actions<\/span> Name=\"NextScene\"&gt;\r\n        &lt;<span style=\"color: #0000ff;\">Action<\/span> Method=\"LoadXOML\" Param1=\"Menu.xml\" \/&gt;\r\n        &lt;<span style=\"color: #0000ff;\">Action<\/span> Method=\"KillScene\" Param1=\"IntroScene\" \/&gt;\r\n    &lt;\/<span style=\"color: #0000ff;\">Actions<\/span>&gt;\r\n\r\n   <span style=\"color: #008000;\"> &lt;!-- Create a camera--&gt;<\/span>\r\n    &lt;<span style=\"color: #0000ff;\">Camera<\/span> Name=\"IntroCam\" Position=\"0, 0\" Angle=\"0\" Scale=\"1.0\" \/&gt;\r\n\r\n    <span style=\"color: #008000;\">&lt;!-- Create delayed fade out animation --&gt;<\/span>\r\n    &lt;<span style=\"color: #0000ff;\">Animation<\/span> Name=\"fade_out\" Type=\"vec4\" Duration=\"5\" &gt;\r\n        &lt;<span style=\"color: #0000ff;\">Frame<\/span> Value=\"255, 255, 255, 255\" Time=\"3\" \/&gt;\r\n        &lt;<span style=\"color: #0000ff;\">Frame<\/span> Value=\"64, 128, 200, 0\"  Time=\"5\"\/&gt;\r\n    &lt;\/<span style=\"color: #0000ff;\">Animation<\/span>&gt;\r\n\r\n    <span style=\"color: #008000;\">&lt;!-- Create a zoom animation for the camera --&gt;<\/span>\r\n    &lt;<span style=\"color: #0000ff;\">Animation<\/span> Name=\"camera_zoom\" Type=\"float\" Duration=\"5\" &gt;\r\n        &lt;<span style=\"color: #0000ff;\">Frame<\/span> Value=\"2\"  Time=\"0.0\" Easing=\"quadout\" \/&gt;\r\n        &lt;<span style=\"color: #0000ff;\">Frame<\/span> Value=\"0.75\" Time=\"2.0\" \/&gt;\r\n    &lt;\/<span style=\"color: #0000ff;\">Animation<\/span>&gt;\r\n    &lt;<span style=\"color: #0000ff;\">Timeline<\/span> Name=\"camera_zoom\" AutoPlay=\"true\"&gt;\r\n        &lt;<span style=\"color: #0000ff;\">Animation<\/span> Anim=\"camera_zoom\" Target=\"Scale\" Repeat=\"1\" StartAtTime=\"0\" OnEnd=\"NextScene\" \/&gt;\r\n        &lt;<span style=\"color: #0000ff;\">Animation<\/span> Anim=\"fade_out\" Target=\"Colour\" Repeat=\"1\" StartAtTime=\"0\" \/&gt;\r\n    &lt;\/<span style=\"color: #0000ff;\">Timeline<\/span>&gt;\r\n\r\n    <span style=\"color: #008000;\">&lt;!-- Define logo image --&gt;<\/span>\r\n    &lt;<span style=\"color: #0000ff;\">Image<\/span> Name=\"logo\" Location=\"logo.png\" Preload=\"true\" \/&gt;\r\n\r\n    <span style=\"color: #008000;\">&lt;!-- Create animations for the logo pieces --&gt;<\/span>\r\n    &lt;<span style=\"color: #0000ff;\">Animation<\/span> Name=\"x_axis\" Type=\"vec2\" Duration=\"4\" &gt;\r\n        &lt;<span style=\"color: #0000ff;\">Frame<\/span> Value=\"500, 0\"  Time=\"0.0\" Easing=\"quadout\" \/&gt;\r\n        &lt;<span style=\"color: #0000ff;\">Frame<\/span> Value=\"0, 0\" Time=\"2.0\" \/&gt;\r\n    &lt;\/<span style=\"color: #0000ff;\">Animation<\/span>&gt;\r\n    &lt;<span style=\"color: #0000ff;\">Animation<\/span> Name=\"x_axis2\" Type=\"vec2\" Duration=\"4\" &gt;\r\n        &lt;<span style=\"color: #0000ff;\">Frame<\/span> Value=\"600, 0\"  Time=\"0.0\" Easing=\"quadout\" \/&gt;\r\n        &lt;<span style=\"color: #0000ff;\">Frame<\/span> Value=\"0, 0\" Time=\"2.25\" \/&gt;\r\n    &lt;\/<span style=\"color: #0000ff;\">Animation<\/span>&gt;\r\n    &lt;<span style=\"color: #0000ff;\">Animation<\/span> Name=\"scale_axis\" Type=\"float\" Duration=\"4\" &gt;\r\n        &lt;<span style=\"color: #0000ff;\">Frame<\/span> Value=\"1\"  Time=\"0.0\" Easing=\"quadout\" \/&gt;\r\n        &lt;<span style=\"color: #0000ff;\">Frame<\/span> Value=\"1.25\" Time=\"2.0\" \/&gt;\r\n    &lt;\/<span style=\"color: #0000ff;\">Animation<\/span>&gt;\r\n    &lt;<span style=\"color: #0000ff;\">Animation<\/span> Name=\"spin_axis\" Type=\"float\" Duration=\"4\" &gt;\r\n        &lt;<span style=\"color: #0000ff;\">Frame<\/span> Value=\"180\"  Time=\"0.0\" Easing=\"quadin\" \/&gt;\r\n        &lt;<span style=\"color: #0000ff;\">Frame<\/span> Value=\"90\"  Time=\"1.0\" Easing=\"quadout\" \/&gt;\r\n        &lt;<span style=\"color: #0000ff;\">Frame<\/span> Value=\"0\" Time=\"2.0\" \/&gt;\r\n    &lt;\/<span style=\"color: #0000ff;\">Animation<\/span>&gt;\r\n    &lt;<span style=\"color: #0000ff;\">Timeline<\/span> Name=\"orbit1\" AutoPlay=\"true\"&gt;\r\n        &lt;<span style=\"color: #0000ff;\">Animation<\/span> Anim=\"x_axis\" Target=\"Position\" Repeat=\"1\" \/&gt;\r\n        &lt;<span style=\"color: #0000ff;\">Animation<\/span> Anim=\"scale_axis\" Target=\"ScaleY\" Repeat=\"1\" \/&gt;\r\n    &lt;\/<span style=\"color: #0000ff;\">Timeline<\/span>&gt;\r\n    &lt;<span style=\"color: #0000ff;\">Timeline<\/span> Name=\"orbit2\" AutoPlay=\"true\"&gt;\r\n        &lt;<span style=\"color: #0000ff;\">Animation<\/span> Anim=\"x_axis\" Target=\"Position\" Repeat=\"1\" \/&gt;\r\n        &lt;<span style=\"color: #0000ff;\">Animation<\/span> Anim=\"scale_axis\" Target=\"ScaleY\" Repeat=\"1\" \/&gt;\r\n        &lt;<span style=\"color: #0000ff;\">Animation<\/span> Anim=\"spin_axis\" Target=\"Angle\" Repeat=\"1\" \/&gt;\r\n    &lt;\/<span style=\"color: #0000ff;\">Timeline<\/span>&gt;\r\n    &lt;<span style=\"color: #0000ff;\">Timeline<\/span> Name=\"orbit3\" AutoPlay=\"true\"&gt;\r\n        &lt;<span style=\"color: #0000ff;\">Animation<\/span> Anim=\"x_axis2\" Target=\"Position\" Repeat=\"1\" \/&gt;\r\n        &lt;<span style=\"color: #0000ff;\">Animation<\/span> Anim=\"scale_axis\" Target=\"ScaleY\" Repeat=\"1\" \/&gt;\r\n    &lt;\/<span style=\"color: #0000ff;\">Timeline<\/span>&gt;\r\n\r\n    <span style=\"color: #008000;\">&lt;!-- Define the logo actors --&gt;<\/span>\r\n    &lt;<span style=\"color: #0000ff;\">InertActor<\/span> Name=\"logo\" Position=\"0, 0\" Size=\"1024, 300\" Angle=\"0\" SrcRect=\"0, 0, 1024, 300\" Image=\"logo\" Timeline=\"orbit1\" \/&gt;\r\n    &lt;<span style=\"color: #0000ff;\">InertActor<\/span> Name=\"logo\" Position=\"0, 0\" Size=\"1024, 300\" Angle=\"0\" SrcRect=\"0, 0, 1024, 300\" Image=\"logo\" Timeline=\"orbit2\" Colour=\"255, 255, 255, 128\" \/&gt;\r\n    &lt;<span style=\"color: #0000ff;\">InertActor<\/span> Name=\"logo\" Position=\"0, 0\" Size=\"1024, 300\" Angle=\"0\" SrcRect=\"0, 0, 1024, 300\" Image=\"logo\" Timeline=\"orbit3\" Colour=\"255, 255, 255, 64\" \/&gt;\r\n\r\n    &lt;<span style=\"color: #0000ff;\">ActorText<\/span> Name=\"Text1\" Position=\"0, -260\" Rect=\"-400, -50, 800, 100\" Angle=\"0\" Font=\"trebuchet_12\" AngularVelocity=\"0\" Text=\"Developed By Pocketeers Limited\" Colour=\"255, 255, 255, 255\" Scale=\"1.5\" \/&gt;\r\n    &lt;<span style=\"color: #0000ff;\">ActorText<\/span> Name=\"Text2\" Position=\"0, 250\" Rect=\"-200, -50, 400, 100\" Angle=\"0\" Font=\"trebuchet_12\" AngularVelocity=\"0\" Text=\"www.drmop.com\" Colour=\"255, 255, 255, 255\" Italic=\"true\" Scale=\"1.5\" \/&gt;\r\n\r\n&lt;\/<span style=\"color: #0000ff;\">Scene<\/span>&gt;<\/pre>\n<p>This XOML defines the complete animation sequence that can be seen in the Puzzle Friends \/ cOnnecticOns game. Three logos spin onto the screen and 2 lines of text zoom into place.<\/p>\n<p>XOML also now supports data binding, which allows developers to bind variables to properties of actors or scenes. Any changes to bound variables will be reflected in object that they are bound to.<\/p>\n<p>Lastly, XOML is extensible allowing the developer to extend the language to support their own needs.<\/p>\n<h2>Input and Audio<\/h2>\n<p>IwGame provides access to the various input devices on the device including:<\/p>\n<ul>\n<li>Single and multi-touch input<\/li>\n<li>Button and key states (including support for Android back and menu)<\/li>\n<li>On screen keyboard input<\/li>\n<li>Accelerometer<\/li>\n<li>Compass<\/li>\n<\/ul>\n<p>Actors handle events that deal directly with touch events, including OnTapped, OnBeginTouch and EndTouch. These events can be handled directly in code or actions can be attached in XOML.<\/p>\n<p>Scenes also handle menu and back button presses using the OnBackKey and OnMenuKey events<\/p>\n<p>IwGame provides an API that provides access to the devices audio playback systems<\/p>\n<ul>\n<li>Compressed WAV software sound effect playback<\/li>\n<li>MP3 playback via the devices media engine<\/li>\n<li>Support for multiple simultaneous sound effects<\/li>\n<li>Control over volume and pitch<\/li>\n<\/ul>\n<p>Music and sound effects can be played directly in XOML via actions, allowing the developer to tie music and sound effect playback to specific events declaratively.<\/p>\n<h2>Physics<\/h2>\n<p>The Box2D physics engine is integrated into the IwGame engine allowing physics to be attached to any actor. IwGame supports shapes, joints (distance, revolute, prismatic, pulley and wheel) and physics materials that can be defined and attached to actors, putting them under control of the Box2D physics system. Actors will also receive collision events from the Box2D collision system, allowing the actor to respond to collisions.<\/p>\n<p>Gravity and world scale can be set on a per scene basis.<\/p>\n<h2>Facebook API<\/h2>\n<p>IwGame currently supports basic Facebook interaction providing log-in and allowing the developer to post information to the users wall stream.<\/p>\n<h2>Unified In-App Purchasing<\/h2>\n<p>IwGame provides unified in-app purchasing for both iOS and Android. A single easy to set-up API can be used to track products and purchase them regardless of platform.<\/p>\n<h2>Unified Ads API<\/h2>\n<p>IwGame provides a platform independent ad collection, display and processing system called IwGameAds. The whole system is automated and once set-up will collect ads from a variety of ad providers using ad mediation and display them using a slick animation system. The system also handles ad clicks directing the user to the target URL.<\/p>\n<p>The following ad providers are currently supported:<\/p>\n<ul>\n<li>Inner-active<\/li>\n<li>AdFonic<\/li>\n<li>Vserv \u2013 Also provides support for InMobi, BuzzCity, JumpTap, ZestAdz \/ Komli Mobile and Inner-active<\/li>\n<li>Mojiva<\/li>\n<li>Millennial Media \u2013 Also provides support for AdMob, Amobee, JumpTap and Mojiva<\/li>\n<\/ul>\n<h2>So why use IwGame Engine?<\/h2>\n<p>IwGame was designed by game developers for game developers. IwGame is built on many years of game development experience, using tried and tested game development techniques. IwGame provides a mass of out-of-the-box features that would take many months to develop and test from scratch. Above all else, using XOML enables the developer to create games insanely quickly (our recent game cOnnecticOns took just 3 days to create from scratch). Lastly, using separation of coding and game layout \/ design, XOML encourages easy and smart game development, where designers can take care of the design \/ layouts and programmers can take of the gaming logic.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>What is the IwGame Engine? Welcome to the home of IwGame, the free open source cross platform mobile 2D game engine for smart phones, tablets and emerging technologies developed by Pocketeers Limited. IwGame is designed and written on top of the\u00a0Marmalade SDK the ultimate \u00a0cross platform SDK for smart phones tablets and emerging technologies. In [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[13,43,118,44,42,181,28,148,3,45],"tags":[364],"class_list":["post-1273","post","type-post","status-publish","format-standard","hentry","category-android-app-development","category-blackberry-playbook-app-development","category-c-programming","category-game-and-app-development","category-ios-app-development","category-iwgame-engine","category-marmalade-sdk","category-pocketeers-limited","category-programming","category-samsung-bada-development","tag-iwgame-engine-tutorial"],"_links":{"self":[{"href":"http:\/\/www.drmop.com\/index.php\/wp-json\/wp\/v2\/posts\/1273","targetHints":{"allow":["GET"]}}],"collection":[{"href":"http:\/\/www.drmop.com\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/www.drmop.com\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/www.drmop.com\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/www.drmop.com\/index.php\/wp-json\/wp\/v2\/comments?post=1273"}],"version-history":[{"count":6,"href":"http:\/\/www.drmop.com\/index.php\/wp-json\/wp\/v2\/posts\/1273\/revisions"}],"predecessor-version":[{"id":1284,"href":"http:\/\/www.drmop.com\/index.php\/wp-json\/wp\/v2\/posts\/1273\/revisions\/1284"}],"wp:attachment":[{"href":"http:\/\/www.drmop.com\/index.php\/wp-json\/wp\/v2\/media?parent=1273"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/www.drmop.com\/index.php\/wp-json\/wp\/v2\/categories?post=1273"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/www.drmop.com\/index.php\/wp-json\/wp\/v2\/tags?post=1273"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}