Sunday, January 13, 2013

Voyage Games Terms of Use

Last modified: January 15, 2015

Welcome to Voyage Games!

Thanks for using our products and services (“Services”). The Services are provided by Voyage Games LLC (“Voyage Games”).
By using our Services, you are agreeing to these terms. Please read them carefully.
Our Services are very diverse, so sometimes additional terms or product requirements (including age requirements) may apply. Additional terms will be available with the relevant Services, and those additional terms become part of your agreement with us if you use those Services.

Using our Services

You must follow any policies made available to you within the Services.
Don’t misuse our Services. For example, don’t interfere with our Services or try to access them using a method other than the interface and the instructions that we provide. You may use our Services only as permitted by law, including applicable export and re-export control laws and regulations. We may suspend or stop providing our Services to you if you do not comply with our terms or policies or if we are investigating suspected misconduct.
Using our Services does not give you ownership of any intellectual property rights in our Services or the content you access. You may not use content from our Services unless you obtain permission from its owner or are otherwise permitted by law. These terms do not grant you the right to use any branding or logos used in our Services. Don’t remove, obscure, or alter any legal notices displayed in or along with our Services.
Our Services display some content that is not Voyage Games'. This content is the sole responsibility of the entity that makes it available. We may review content to determine whether it is illegal or violates our policies, and we may remove or refuse to display content that we reasonably believe violates our policies or the law. But that does not necessarily mean that we review all content, so please don’t assume that we do.
In connection with your use of the Services, we may send you service announcements, administrative messages, and other information. You may opt out of some of those communications.
Additionally, some Services may make use of third-party content and applications. Such cases will be cited at their presentation and may be governed by third-party License, Terms of Use, and Privacy Policies. Third-party services may include, but are not limited to:
  • MapQuest Services and MapQuest Content (click here for their Terms of Use)

Privacy and Copyright Protection

Voyage Games' privacy policies explain how we treat your personal data and protect your privacy when you use our Services. By using our Services, you agree that Voyage Games can use such data in accordance with our privacy policies.
We respond to notices of alleged copyright infringement and terminate accounts of repeat infringers according to the process set out in the U.S. Digital Millennium Copyright Act.

Your Content in our Services

Some of our Services allow you to submit content. You retain ownership of any intellectual property rights that you hold in that content. In short, what belongs to you stays yours.
When you upload or otherwise submit content to our Services, you give Voyage Games (and those we work with) a worldwide license to use, host, store, reproduce, modify, create derivative works (such as those resulting from translations, adaptations or other changes we make so that your content works better with our Services), communicate, publish, publicly perform, publicly display and distribute such content. The rights you grant in this license are for the limited purpose of operating, promoting, and improving our Services, and to develop new ones. This license continues even if you stop using our Services. Some Services may offer you ways to access and remove content that has been provided to that Service. Also, in some of our Services, there are terms or settings that narrow the scope of our use of the content submitted in those Services. Make sure you have the necessary rights to grant us this license for any content that you submit to our Services.
You can find more information about how Voyage Games uses and stores content in the privacy policy or additional terms for particular Services. If you submit feedback or suggestions about our Services, we may use your feedback or suggestions without obligation to you.

About Software in our Services

When a Service requires or includes downloadable software, this software may update automatically on your device once a new version or feature is available. Some Services may let you adjust your automatic update settings.
Voyage Games gives you a personal, worldwide, royalty-free, non-assignable and non-exclusive license to use the software provided to you by Voyage Games as part of the Services. This license is for the sole purpose of enabling you to use and enjoy the benefit of the Services as provided by Voyage Games, in the manner permitted by these terms. You may not copy, modify, distribute, sell, or lease any part of our Services or included software, nor may you reverse engineer or attempt to extract the source code of that software, unless laws prohibit those restrictions or you have our written permission.
Open source software is important to us. Some software used in our Services may be offered under an open source license that we will make available to you. There may be provisions in the open source license that expressly override some of these terms.

Modifying and Terminating our Services

We are constantly changing and improving our Services. We may add or remove functionality or features, and we may suspend or stop a Service altogether.
You can stop using our Services at any time, although we’ll be sorry to see you go. Voyage Games may also stop providing Services to you, or add or create new limits to our Services at any time.
We believe that you own your data and preserving your access to such data is important. If we discontinue a Service, where reasonably possible, we will give you reasonable advance notice and a chance to get information out of that Service.

Our Warranties and Disclaimers

We provide our Services using a commercially reasonable level of skill and care and we hope that you will enjoy using them. But there are certain things that we don’t promise about our Services.
OTHER THAN AS EXPRESSLY SET OUT IN THESE TERMS OR ADDITIONAL TERMS, NEITHER VOYAGE GAMES NOR ITS SUPPLIERS OR DISTRIBUTORS MAKE ANY SPECIFIC PROMISES ABOUT THE SERVICES. FOR EXAMPLE, WE DON’T MAKE ANY COMMITMENTS ABOUT THE CONTENT WITHIN THE SERVICES, THE SPECIFIC FUNCTION OF THE SERVICES, OR THEIR RELIABILITY, AVAILABILITY, OR ABILITY TO MEET YOUR NEEDS. WE PROVIDE THE SERVICES “AS IS”.
SOME JURISDICTIONS PROVIDE FOR CERTAIN WARRANTIES, LIKE THE IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. TO THE EXTENT PERMITTED BY LAW, WE EXCLUDE ALL WARRANTIES.

Liability for our Services

WHEN PERMITTED BY LAW, VOYAGE GAMES, AND VOYAGE GAMES S SUPPLIERS AND DISTRIBUTORS, WILL NOT BE RESPONSIBLE FOR LOST PROFITS, REVENUES, OR DATA, FINANCIAL LOSSES OR INDIRECT, SPECIAL, CONSEQUENTIAL, EXEMPLARY, OR PUNITIVE DAMAGES.
TO THE EXTENT PERMITTED BY LAW, THE TOTAL LIABILITY OF VOYAGE GAMES  AND ITS SUPPLIERS AND DISTRIBUTORS, FOR ANY CLAIM UNDER THESE TERMS, INCLUDING FOR ANY IMPLIED WARRANTIES, IS LIMITED TO THE AMOUNT YOU PAID US TO USE THE SERVICES (OR, IF WE CHOOSE, TO SUPPLYING YOU THE SERVICES AGAIN).
IN ALL CASES, VOYAGE GAMES  AND ITS SUPPLIERS AND DISTRIBUTORS, WILL NOT BE LIABLE FOR ANY LOSS OR DAMAGE THAT IS NOT REASONABLY FORESEEABLE.

Business uses of our Services

If you are using our Services on behalf of a business, that business accepts these terms. It will hold harmless and indemnify Voyage Games and its affiliates, officers, agents, and employees from any claim, suit or action arising from or related to the use of the Services or violation of these terms, including any liability or expense arising from claims, losses, damages, suits, judgments, litigation costs and attorneys’ fees.

About these Terms

We may modify these terms or any additional terms that apply to a Service to, for example, reflect changes to the law or changes to our Services. You should look at the terms regularly. We’ll post notice of modifications to these terms on this page. We’ll post notice of modified additional terms in the applicable Service. Changes will not apply retroactively and will become effective no sooner than fourteen days after they are posted. However, changes addressing new functions for a Service or changes made for legal reasons will be effective immediately. If you do not agree to the modified terms for a Service, you should discontinue your use of that Service.
If there is a conflict between these terms and the additional terms, the additional terms will control for that conflict.
These terms control the relationship between Voyage Games and you. They do not create any third party beneficiary rights.
If you do not comply with these terms, and we don’t take action right away, this doesn’t mean that we are giving up any rights that we may have (such as taking action in the future).
If it turns out that a particular term is not enforceable, this will not affect any other terms.
The laws of Nevada, U.S.A. will apply to any disputes arising out of or relating to these terms or the Services. All claims arising out of or relating to these terms or the Services will be litigated exclusively in the federal or state courts of Reno, Nevada, USA, and you and Voyage Games consent to personal jurisdiction in those courts.

Contact

To contact Voyage Games, email us at: voyagegamesllc [at] gmail [dot] com

Friday, December 28, 2012

Texture Manager for libgdx

Problem

Managing Texture objects in libgdx can be surprisingly annoying. On the one hand, libgdx does some useful optimizing under the hood. On the other hand, you may run into race conditions with garbage collection that manifests as native code errors.

For example:
  • You're using a Texture before a scene change.
  • When you're exiting the scene, you dispose of the Texture objects used.
  • You create a new scene that just happens to use the same Texture.
  • GC finally fires to fully dispose of the Texture.
  • When you go to render the new scene, you hit a native error.
These problems can be difficult to debug, as the stack trace and error output often make no mention of the Texture; in development of Monkey Match, the last piece of our code was somewhere in the render method, before calling into libgdx's Stage object.

Solution

To resolve this, a Texture manager class can be very handy. There are two elements to this:
  1. A bundled texture object that contains a reference to both a Texture and a TextureRegion.
  2. The texture manager itself.
The bundled texture is handy because you'll often find yourself referencing both Texture objects and TextureRegion objects for rendering purposes.

Implementation

First, let's build ourselves the BundledTexture class:


public class BundledTexture {
 
 public final Texture       texture;
 public final TextureRegion region;
 
 public BundledTexture(final Texture texture, int offsetX, int offsetY, int width, int height) {
  this.texture = texture;
  this.region = new TextureRegion(this.texture, offsetX, offsetY, width, height);
 }
 
 public float width() {
  return region.getRegionWidth();
 }
 
 public float height() {
  return region.getRegionHeight();
 }
 
}

The width() and height() methods are just helper methods. libgdx defines many different width/height methods and it's not always clear which version you want. This was used as a shortcut to make the code more clear.

The rest should be pretty clear: We store the Texture object and create a TextureRegion based on the offset and height/width passed in.

Now, for the TextureManager class:



public class TextureManager {
 
 private final Map<String, BundledTexture> mDict = new HashMap<String, BundledTexture>();
 
 public void add(final String key, final BundledTexture texture) {
  if (mDict.containsKey(key)) {
   return;
  }
  
  mDict.put(key, texture);
 }
 
 public BundledTexture get(final String key) {
  return mDict.get(key);
 }
 
 public void dispose(final String key) {
  if (!mDict.containsKey(key)) {
   return;
  }
  
  final BundledTexture t = mDict.get(key);
  t.texture.dispose();
  mDict.remove(key);
 }
 
 public void disposeAll() {
  for (final BundledTexture t : mDict.values()) {
   t.texture.dispose();
  }
  
  mDict.clear();
 }

}

This is also pretty simple, but simple is always better, no? We add BundledTextures to our map with a String identifier, which we can later use to find the texture. We check for error conditions and silently fail (you could throw an exception, if so desired; I prefer not to obfuscate my code with them unless I'm dealing with asynchronous or otherwise truly "exceptional" conditions).

When we're ready to dispose of a Texture, we can either single it out individually, or we can dispose of the entire map. You could override the finalize() method, but with libgdx, we often find ourselves calling these methods on-demand.

Conclusion

That's it! Now, we just initialize our TextureManager, add textures to it, retrieve the desired texture when we want to use it, and dispose with the whole shebang when we're done.

You can find the source code for this example on bitbucket (git repository).

Update 1: Minor edits for clarity, to clean up Blogger formatting.

Monkey Match has arrived!

We've just launched our first Android app, Monkey Match! It's a fast-paced matching game that's fun for all ages. Conquer all the continents and defeat your high score!

Check out the free, ad-supported version here or go the full monty and buy the ad-free version for only 99 cents.

Thursday, December 27, 2012

Voyage Games Privacy Policy

Privacy Policy

There are many different ways you can use our services. When you share information with us, for example by installing a new Voyage Games app, we can make those services even better, more performant and responsive. As you use our services, we want you to be clear how we’re using information and the ways in which you can protect your privacy.

Our Privacy Policy explains:

What information we collect and why we collect it. How we use that information. The choices we offer, including how to access and update information. Your privacy matters to Voyage Games so whether you are new to Voyage Games or a long-time user, please do take the time to get to know our practices and if you have any questions contact us.

Information we collect

We may collect information about the services that you use and how you use them, like when you view and interact with our apps and content. This information includes:

Device information

We may collect device-specific information (such as your hardware model, operating system version, unique device identifiers, and mobile network information including phone number).

Log information

When you use our services or view content provided by Voyage Games, we may automatically collect and store certain information in app logs. This may include:
  • details of how you used our service, such as your how long you viewed specific screens and what content buttons you pressed.
  • device event information such as crashes, system activity, hardware settings, device type, language, the date and time of your actions.
Location information

When you use a location-enabled Voyage Games service, we may collect and process information about your actual location, like GPS signals sent by a mobile device. We may also use various technologies to determine location, such as sensor data from your device that may, for example, provide information on nearby Wi-Fi access points and cell towers.

Unique application numbers

Certain services include a unique application number. This number and information about your installation (for example, the operating system type and application version number) may be sent to Voyage Games when you install or uninstall that service or when that service periodically contacts our servers, such as for automatic updates.

Local storage

We may collect and store information (including personal information) locally on your device using mechanisms such as external device storage (for example, SD cards) and application data caches.

Anonymous identifiers

We use various technologies to collect and store information when you use a Voyage Games service, and this may include sending one or more anonymous identifiers to your device. We may also use anonymous identifiers when you interact with services we offer to our partners, such as advertising services or Voyage Games features that may appear on other sites.

How we use information we collect

We use the information we collect from all of our services to provide, maintain, protect and improve them, to develop new ones, and to protect Voyage Games and our users. We may also use this information to offer you tailored content like giving you more relevant app content.

When you contact Voyage Games, we may keep a record of your communication to help solve any issues you might be facing. We may use your email address to inform you about our services, such as letting you know about upcoming changes or improvements.

We use information collected to improve your user experience and the overall quality of our services. For example, by saving your language preferences, we’ll be able to have our services appear in the language you prefer. When showing you tailored ads, we will not associate an anonymous identifier with sensitive categories, such as those based on race, religion, sexual orientation or health.

We will ask for your consent before using information for a purpose other than those that are set out in this Privacy Policy.

Voyage Games processes personal information on our servers in many countries around the world. We may process your personal information on a server located outside the country where you live.

Accessing and updating your personal information

Whenever you use our services, we aim to provide you with access to your personal information. If that information is wrong, we strive to give you ways to update it quickly or to delete it unless we have to keep that information for legitimate business or legal purposes. When updating your personal information, we may ask you to verify your identity before we can act on your request.

We may reject requests that are unreasonably repetitive, require disproportionate technical effort (for example, developing a new system or fundamentally changing an existing practice), risk the privacy of others, or would be extremely impractical (for instance, requests concerning information residing on backup tapes).

Where we can provide information access and correction, we will do so for free, except where it would require a disproportionate effort. We aim to maintain our services in a manner that protects information from accidental or malicious destruction. Because of this, after you delete information from our services, we may not immediately delete residual copies from our active servers and may not remove information from our backup systems.

Information we share

We do not share personal information with companies, organizations and individuals outside of Voyage Games unless one of the following circumstances apply:

With your consent

We will share personal information with companies, organizations or individuals outside of Voyage Games when we have your consent to do so. We require opt-in consent for the sharing of any sensitive personal information.

For legal reasons

We will share personal information with companies, organizations or individuals outside of Voyage Games if we have a good-faith belief that access, use, preservation or disclosure of the information is reasonably necessary to:
  • meet any applicable law, regulation, legal process or enforceable governmental request.
  • enforce applicable Terms of Service, including investigation of potential violations.
  • detect, prevent, or otherwise address fraud, security or technical issues.
  • protect against harm to the rights, property or safety of Voyage Games, our users or the public as required or permitted by law.
We may share aggregated, non-personally identifiable information publicly and with our partners like publishers, advertisers or connected sites. For example, we may share information publicly to show trends about the general use of our services.

If Voyage Games is involved in a merger, acquisition or asset sale, we will continue to ensure the confidentiality of any personal information and give affected users notice before personal information is transferred or becomes subject to a different privacy policy.

Information security

We work hard to protect Voyage Games and our users from unauthorized access to or unauthorized alteration, disclosure or destruction of information we hold. In particular:

Our Privacy Policy applies to all of the services offered by Voyage Games LLC and its affiliates, including services offered on other sites (such as our advertising services), but excludes services that have separate privacy policies that do not incorporate this Privacy Policy.

Our Privacy Policy does not apply to services offered by other companies or individuals, including products or sites that may be displayed to you in ads, sites that may include Voyage Games services, or other sites linked from our services. Our Privacy Policy does not cover the information practices of other companies and organizations who advertise our services, and who may use cookies, pixel tags and other technologies to serve and offer relevant ads.

Enforcement

We regularly review our compliance with our Privacy Policy. We also adhere to several self regulatory frameworks. When we receive formal written complaints, we will contact the person who made the complaint to follow up. We work with the appropriate regulatory authorities, including local data protection authorities, to resolve any complaints regarding the transfer of personal data that we cannot resolve with our users directly.

Changes

Our Privacy Policy may change from time to time. We will not reduce your rights under this Privacy Policy without your explicit consent. We will post links to any privacy policy changes on this page and, if the changes are significant, we will provide a more prominent notice (including, for certain services, email notification of privacy policy changes). We will also keep prior versions of this Privacy Policy in an archive for your review.

Contact

To contact Voyage Games, email us at: voyagegamesllc [at] gmail [dot] com