Pointless

#mobile games #unity 2d #android
Description
Overview

Pointless is a minimalist survival game for Android in which the player controls a white ball navigating a black-and-white arena. The objective is simple yet relentless: dodge incoming black spheres and survive as long as possible. There are no levels, no checkpoints, no power-ups to collect. Every run is a pure test of reflexes, spatial awareness, and composure under pressure

Motivation & Inspiration

Pointless was born from a personal challenge. As a developer with no prior experience in mobile game development, the project was an opportunity to dive headfirst into the world of Unity and Android publishing. The goal was not just to ship a game, but to learn the entire pipeline from concept to Play Store listing, tackling every problem along the way. The result is a game that reflects that spirit: stripped to its essentials, honest, and unapologetically direct.

Core Gameplay

The player moves a white ball around a responsive arena using a virtual joystick. Black enemy balls spawn at increasing rates and with escalating complexity. Survival time is the only metric that matters. The game area itself is dynamic and can shrink during gameplay, forcing the player into tighter spaces and more dangerous situations.

Enemy Types

Pointless features seven distinct enemy types, each introducing a unique mechanical challenge:

  • Standard Enemy — A simple black ball that moves toward the player. The foundation of the game’s threat.
  • Time Reverser — When it appears, all other enemies on screen rewind their positions back in time, creating unpredictable movement patterns.
  • Color Inverter — Flips the color scheme of the arena. During inversion, the player gains the ability to destroy enemies on contact, turning defense into offense for a brief moment.
  • Area Shrinker — Reduces the playable area, compressing the player into a smaller and more dangerous space.
  • Charger — Remains passive for a set duration, then locks onto the player and launches itself at high speed.
  • Shielded Enemy — Protected by a shield that must be broken before the enemy can be destroyed.
  • Square Enemy — Takes on a square shape and is completely invulnerable while in that form. Cannot be destroyed until it transforms.

Player Trait Analysis

At the end of each run, Pointless analyzes how the player behaved during the game and assigns a personality trait. The system tracks patterns such as movement tendencies, risk-taking behavior, and reactions to threats, then summarizes them in a single word with a brief description. Traits are displayed on the death screen, giving each run a personal touch beyond just a time score. The trait system supports both English and Italian localization and is designed to be expanded with additional behaviors and traits over time.

How I made it
Introduction

Pointless was built as a solo project using Unity 6 with C# scripting, targeting Android via the Google Play Store. The game was developed entirely from scratch with no prior mobile game development experience, which meant every system—from physics to publishing—was a learning exercise. This document covers the major technical decisions, systems, and challenges encountered during development.

Engine & Architecture

The project is built on Unity 6 and structured around a centralized GameManager singleton that coordinates game state, scoring, in-app purchase status, and inter-system communication. Individual systems—enemy spawning, trait tracking, audio, UI—are managed by dedicated manager classes that register with the GameManager at initialization.

Data-Driven Enemy Spawn System

Enemy spawning is governed by an EnemySpawnRule struct that defines, for each enemy type, its spawn weight, the minimum survival time before it can appear, and any cooldown between spawns. The spawn manager evaluates all active rules every spawn cycle, builds a weighted probability pool, and selects the next enemy type via weighted random sampling. This makes balancing straightforward: tuning the difficulty curve is a matter of adjusting data, not rewriting logic.

Responsive Game Area & UI Toolkit

One of the most significant technical challenges was the dynamic game area system. The playable arena needed to resize smoothly during gameplay (triggered by the Area Shrinker enemy) while remaining fully responsive across all Android screen sizes and aspect ratios. The area system is integrated with Unity’s UI Toolkit, which handles layout and scaling. A custom lerp-based coroutine manages the smooth transitions between area sizes, carefully avoiding asymptotic behavior where the area would approach its target size infinitely without ever reaching it. Getting this right required multiple iterations and precise threshold tuning to ensure the animation felt clean and the physics boundaries stayed in sync with the visual representation.

Physics & Enemy Behaviors

Each of the seven enemy types has its own physics behavior implemented through dedicated C# scripts. Specific challenges included: synchronizing the time-reversal effect with enemy position histories, managing the color-inversion state transition cleanly across all active enemies, and handling edge cases like enemy freeze behavior during time-stop effects. Physics tuning was performed iteratively, with each bug addressed through concrete log evidence before making changes.

TraitManager — Behavioral Analysis

The TraitManager system runs silently during gameplay, tracking a set of behavioral metrics: joystick reversal frequency, teleport usage, proximity to enemies, movement speed patterns, and more. At the end of each run, these metrics are evaluated against thresholds to assign a personality trait (e.g., “Impulsive”, “Calculated”). The system uses a priority-based evaluation order so that more distinctive behaviors take precedence. All trait names and descriptions are localized in English and Italian.

Google Play Services Integration

Pointless integrates several Google Play services through a centralized GoogleIntegration class:

  • Google Play Games Services — Handles player authentication, leaderboard submission, and a custom leaderboard display showing the top 3 players globally alongside the current player’s rank and time.
  • Unity Cloud Save — Syncs the player’s best survival time across devices. The implementation includes conflict resolution logic to handle account-switch scenarios and prevent data contamination between different player profiles.
  • Unity IAP — Provides a single non-consumable purchase (“Remove Ads”). The purchase state is managed through the centralized GameManager and persists across sessions. A centralized price display system ensures consistent pricing information throughout the UI.

Audio System

The game’s soundtrack consists of original music tracks generated with ElevenLabs, composed in a minimal piano-driven aesthetic with separate tracks for the menu, in-game, and death screen. Audio playback is managed by a custom AudioManager that supports crossfade transitions between tracks, ensuring smooth sonic continuity as the player moves between game states.

Advertising

Ads are served through Unity Ads and are displayed at natural break points (e.g., after a run ends). The ad system respects the IAP “Remove Ads” purchase and disables all ad calls once the purchase is confirmed.

Build & Publishing

The game is packaged as an Android APK/AAB under the package name com.error404.pointless and published on the Google Play Store under the developer name Gabriele Orlando. Build challenges included resolving package signing mismatches during APK installation and correctly configuring SHA-1 fingerprints and OAuth credentials for Google Play Games authentication.

Terms & Conditions
Acceptance of Terms

By downloading, installing, or using Pointless (“the Game”), you agree to be bound by these Terms and Conditions (“Terms”). If you do not agree to these Terms, please do not use the Game. The Game is published by Gabriele Orlando (“the Developer”).

Description of the Game

Pointless is a free-to-play mobile survival game available on Android via the Google Play Store. The Game includes optional advertising and a single in-app purchase to remove ads.

Eligibility

The Game is available to users of all ages. No age restriction is imposed. If you are under the age of 13, you should review these Terms with a parent or guardian before using the Game.

User Data & Privacy

The Game does not collect, store, or transmit any personal data. No analytics services, tracking tools, or third-party data collection SDKs are integrated into the Game beyond those required by the following services:

  • Google Play Games Services — Used for authentication, leaderboard functionality, and cloud save. Data handling for these services is governed by Google’s Privacy Policy.
  • Unity Ads — Used to display advertisements within the Game. Unity Ads may collect certain device and usage data as described in Unity’s Privacy Policy. Ad display ceases entirely if the user completes the “Remove Ads” in-app purchase.

The Developer does not independently collect, process, or store any user data beyond what these third-party services handle. For details, please refer to the respective privacy policies of Google and Unity.

In-App Purchases

The Game offers a single non-consumable in-app purchase (“Remove Ads”) that permanently disables all advertising within the Game. This purchase is processed through the Google Play Store and is subject to Google’s terms of service and refund policies. The Developer does not handle payment information directly.

Advertising

The Game displays advertisements provided by Unity Ads. Ads appear at natural break points during gameplay (e.g., between runs) and do not interrupt active gameplay. Users who purchase the “Remove Ads” option will no longer see any advertisements.

Intellectual Property

All content within the Game—including but not limited to code, visual design, music, sound effects, and text—is the intellectual property of Gabriele Orlando unless otherwise stated. You may not reproduce, distribute, modify, or create derivative works based on the Game or its assets without prior written permission from the Developer.

Disclaimer of Warranties

The Game is provided “as is” and “as available” without warranties of any kind, either express or implied. The Developer does not guarantee that the Game will be error-free, uninterrupted, or compatible with all devices. Use of the Game is at your own risk.

Limitation of Liability

To the maximum extent permitted by applicable law, the Developer shall not be liable for any indirect, incidental, special, consequential, or punitive damages arising out of or related to your use of the Game, including but not limited to loss of data, loss of profits, or device damage.

Changes to These Terms

The Developer reserves the right to update or modify these Terms at any time. Changes will be reflected by an updated “Last updated” date at the top of this document. Continued use of the Game after changes are posted constitutes acceptance of the revised Terms.

Governing Law

These Terms shall be governed by and construed in accordance with the laws of Italy, without regard to its conflict of law provisions.

Contact Information

If you have any questions or concerns about these Terms, please contact the Developer at:

Gabriele Orlando

info@orlandogabriele.com

Privacy Policy
1. Introduction

This Privacy Policy describes how Pointless ("the Game"), published by Gabriele Orlando ("the Developer"), handles user information. The Developer is committed to protecting your privacy and being transparent about what data is and is not collected when you use the Game.

By downloading and using the Game, you acknowledge that you have read and understood this Privacy Policy.

2. Data Controller

Gabriele Orlando — Email: info@orlandogabriele.com

For any questions or requests regarding this Privacy Policy or your data, please contact the Developer at the email address above.

3. Data Collected Directly by the Developer

The Developer does not directly collect, store, or process any personal data. The Game does not include any proprietary analytics, tracking systems, or data collection mechanisms. No account registration is required to play the Game. The only user-visible information associated with the Game is the player's public Google Play Games display name, which is used exclusively for leaderboard ranking purposes and is managed entirely by Google Play Games Services.

4. Third-Party Services

The Game integrates the following third-party services, each of which may collect data independently in accordance with their own privacy policies:

4.1 Google Play Games Services

The Game uses Google Play Games Services for player authentication (sign-in through your Google account), leaderboards (your best survival time and public display name are submitted to a global leaderboard), and Cloud Save (your best survival time is synced across devices linked to your Google account).

Data collected by Google Play Games Services is governed by Google's Privacy Policy: https://policies.google.com/privacy

4.2 Unity Ads

The Game displays advertisements through Unity Ads. Unity Ads may collect certain information from your device, including device identifiers (e.g., advertising ID), IP address, device type, operating system and version, and general interaction data with advertisements.

This data is used by Unity to serve and measure the effectiveness of advertisements. If you purchase the "Remove Ads" in-app purchase, all advertising functionality is disabled entirely, and Unity Ads will no longer collect any data.

Unity's Privacy Policy: https://unity.com/legal/privacy-policy

5. Advertising & Consent

Advertisements are displayed at natural break points (e.g., after a game run ends) and do not interrupt active gameplay. Ads are removed permanently upon completing the "Remove Ads" in-app purchase.

User consent for personalized advertising is managed directly by the Unity Ads SDK. For users located in the European Economic Area (EEA), the Unity Ads SDK automatically displays a consent prompt the first time an advertisement is shown. After the initial prompt, the user can manage their privacy preferences at any time by selecting the Unity Data Privacy icon displayed during ad playback.

If the user opts out of personalized advertising, Unity Ads will serve only contextual ads based on geographic location and in-app activity, without using personal data for targeting.

6. Children's Privacy

The Game is not specifically directed at children under the age of 13 and does not knowingly collect personal data from children. Since the Developer does not collect any data directly, no data from children is stored or processed by the Developer. However, the third-party services integrated in the Game may have their own policies regarding children's data.

7. Data Retention & Deletion

The Developer does not retain any user data. All data associated with the Game is managed exclusively by the third-party services described in Section 4.

If you wish to be removed from the global leaderboard, you may submit a request by sending an email to info@orlandogabriele.com. Cloud Save data associated with your Google account can be deleted by removing the Game from your Google Play Games profile through Google's settings.

8. Your Rights Under GDPR

If you are located in the European Economic Area (EEA), you have the following rights under the GDPR: right of access, right to rectification, right to erasure, right to restriction, right to data portability, and right to object.

Since the Developer does not collect personal data directly, most of these rights apply to the third-party services used by the Game. For leaderboard removal requests or any other questions, contact the Developer at info@orlandogabriele.com.

9. Device Permissions

The Game requires an internet connection to access leaderboards, cloud save, and to serve advertisements. The Game does not request access to your camera, microphone, location, contacts, storage, or any other sensitive device permissions.

10. Changes to This Privacy Policy

The Developer reserves the right to update this Privacy Policy at any time. Changes will be reflected by an updated "Last updated" date at the top of this document. Continued use of the Game after changes are posted constitutes acceptance of the revised Privacy Policy.

11. Contact

If you have any questions about this Privacy Policy, wish to exercise any of your data rights, or would like to request removal from the leaderboard, please contact:

Gabriele Orlando

info@orlandogabriele.com

Last updated: March 23, 2026

Screenshot 1
Screenshot 2
Screenshot 3