Group Details Private


  • hyperPad 1.40 is here! 🎉

    It’s here 🎉 hyperPad Version 1.40
    In the latest update, hyperPad introduces a range of exciting new features, including the ability to convert objects into different types, rescale bullets in shoot behaviors, and collapse entire behavior trees into single bundles. Additionally, numerous bug fixes ensure smoother performance and enhanced user experience across iOS devices.
    Here’s the list! Share your favorite new update on the hyperPad forum today.

    New Features

    • list itemYou can now convert objects into objects of another type.
    • Empty objects are now converted into graphics when choosing a graphic for them.
    • The Hit by Bullet behavior now outputs hit position and the shooter object.
    • Bullets can now be rescaled in shoot behaviors.
    • Added a Random Seed behavior that can define a set seed and algorithm for Random Number behaviors.
    • Added the ability to move objects between scenes and layers.
    • You can now mirror multiple objects at once.
    • Added the ability to collapse behavior bundle behaviors, allowing an entire behavior tree to be compressed into a single behavior.
    • Added a “Disable Antialiasing” toggle in the Draw behavior.
    • Added “Add Entries” mode in the Modify Dictionary behavior.
    • Added “Remove Duplicates” and “Intersect” modes in the Modify Array behavior.
    • Updated branding logo inside the app.

    Bug Fixes

    • Fixed crashing when changing the scene background on iOS 17.
    • Fixed many unexpected UI-related crashes on iOS 17.
    • Fixed objects displaying in the wrong position in overlays.
    • Fixed performance issues with the Get Pixel behavior.
    • Fixed the Preserve Transform property in the Set Graphic behavior miscalculating position for objects in relative position mode.
    • Fixed crashes when effect parameters were set outside their intended range.
    • Fixed 16:9 aspect ratio not completely fitting the screen.
    • Fixed numeric input fields displaying Int32 despite the behavior being stored as doubles.
    • Fixed the Edit Text Field behavior causing a crash after triggering the Alert behavior.
    • Fixed assets displaying as being selected despite the multi-select mode being disabled.
    • Fixed the Keyboard Event behavior not displaying character sequence.
    • Fixed the Swipe Gesture behaviors activating when swiping in the wrong direction.
    • Fixed the screen resetting to the wrong position in the editor when pressing “defaults” in screen settings.
    • Fixed occasional flickering in graphics when playing various animations.
    • Fixed clipping of some UI in the main menu.
    posted in Announcements
  • In App Purchase Tutorial on Exported Projects

    In App purchase swift code for exported projects:

    first add pod 'SwiftyStoreKit' to the list of pods in Podfile in a text editor.

    Then in terminal, run pod install. If you don't have cocoapods installed on your mac, follow the instructions here:

    Replace the contents of HPSwift.swift with the following file

    //  HPSwift.swift
    //  hyperPad-Project
    //  Created by Hamed Saadat on 2019-08-07.
    import Foundation
    import SwiftyStoreKit
    @objc class HPSwift: NSObject {
        fileprivate var _behaviours: HPBehaviours? = nil
        @objc var behaviours: HPBehaviours? {
            get {
                return _behaviours
            set(behaviours) {
                _behaviours = behaviours
                SwiftyStoreKit.completeTransactions(atomically: true) { purchases in
                    for purchase in purchases {
                        switch purchase.transaction.transactionState {
                        case .purchased, .restored:
                            if purchase.needsFinishTransaction {
                                // Deliver content from server, then:
                            // Unlock content
                            behaviours?.broadcastValue(purchase.productId as NSString, withKey: "purchaseComplete")
                        case .failed, .purchasing, .deferred:
                            behaviours?.broadcastValue(purchase.productId as NSString, withKey: "purchaseError")
                            break // do nothing
                        @unknown default:
                behaviours?.addReceiveKey("restorePurchases", onReceive: { (receiveValue) in
                    SwiftyStoreKit.restorePurchases(atomically: true) { results in
                        if results.restoreFailedPurchases.count > 0 {
                            behaviours?.broadcastValue("Restore Failed: \(results.restoreFailedPurchases)" as NSString, withKey: "purchaseError")
                        else if results.restoredPurchases.count > 0 {
                            results.restoredPurchases.forEach { (purchase) in
                                behaviours?.broadcastValue(purchase.productId as NSString, withKey: "purchaseComplete")
                        else {
                            print("Nothing to Restore")
                 Add Behaviour functionality here
                behaviours?.addReceiveKey("purchase", onReceive: { (recieveValue) in
                     // handle in app purchase logic! //
                        SwiftyStoreKit.purchaseProduct("INSERT_PURCHASE_IDENTIFIER_HERE_OR_USE_recieveValue", quantity: 1, atomically: true) { result in
                            switch result {
                            case .success(let purchase):
                                behaviours?.broadcastValue(purchase.productId as NSString, withKey: "purchaseComplete")
                            case .error(let error):
                                var message = ""
                                switch error.code {
                                case .unknown: message = "Unknown error. Please contact support"
                                case .clientInvalid: message = "Not allowed to make the payment"
                                case .paymentCancelled: break
                                case .paymentInvalid: message = "The purchase identifier was invalid"
                                case .paymentNotAllowed: message = "The device is not allowed to make the payment"
                                case .storeProductNotAvailable: message = "The product is not available in the current storefront"
                                case .cloudServicePermissionDenied: message = "Access to cloud service information is not allowed"
                                case .cloudServiceNetworkConnectionFailed: message = "Could not connect to the network"
                                case .cloudServiceRevoked: message = "User has revoked permission to use this cloud service"
                                default: message = ((error as NSError).localizedDescription)
                                behaviours?.broadcastValue(message as NSString, withKey: "purchaseFailed")

    Some key points:

    behaviours?.addReceiveKey("restorePurchases", onReceive: { (receiveValue) in
                    // add your code here

    Will get triggered when you trigger a broadcast behaviour with the restorePurchases key

    behaviours?.broadcastValue(purchase.productId as NSString, withKey: "purchaseComplete")

    Will trigger a receive message behaviour with the purchaseComplete key

    INSERT_PURCHASE_IDENTIFIER_HERE_OR_USE_recieveValue can be replaced with either the identifier of your purchase from AppStoreConnect. OR the receiveValue parameter. If you use receiveValue make sure in your broadcast behaviour, you're sending the identifier from App Store Connect.

    posted in Help and Support
  • RE: a puzzle game with sliding tiles

    This is definitely possible. We don't have any tutorials on it, but its doable.
    There have been some similar projects on the hub before.
    We don't have a hub search (it's coming), but if you search google and add hyperpad hub to your search term you can find things.

    posted in General Discussion
  • RE: Problem testing game in viewer app


    Thats odd, the Viewer app has been updated a few times since this post.

    We're currently getting another update ready and conducting testing now. You can sign up here for the testflight beta:

    See if that helps!

    posted in Help and Support
  • RE: BrickBuster soon on the Hub!


    Project is great! I left a comment on the hub as well.

    I referenced this video in my comment:

    posted in WIP and Showcase
  • RE: Carrying values between scenes?


    Another way you can do it is to place an object on your UI layer, and store the value on that object. It should then exist in all scenes.

    posted in Help and Support
  • RE: Basic logic help

    @Aceboss If you add a second if and put it beside the first if. It will snap together and turn into an ELSE

    posted in Help and Support
  • RE: Community / Userbase - Active?

    I agree. I much prefer forums than the discord my self.

    posted in General Discussion
  • RE: Cant seem to make animations work

    Can you be more specific on your issue?
    How are you trying to play animations? What is your current behaviour logic set up.

    posted in Help and Support
  • RE: Community / Userbase - Active?

    Hey, yeah the forum seems to have died down a bit. We're hoping to aim more focus to the forum. But as of the community is mostly active on our "unoffical" discord channel created by our ambassador @RobinsonX.

    posted in General Discussion