Ananias Roguelike 1.78 released. Bigger rooms, more animations, keyboard commands and more!

Another awesome update is available! This one was delayed a bit by issues with my main dev macbook laptop, which decided to stop working properly and I haven’t been able to fix completely even after using all the spells I know. At least I now have a legit¬†excuse for not releasing the iOS version ūüôā
  • Standard Edition
  • Fellowship Edition

I also did an initial full pixel-art version of the new trailer, since my macbook is no longer operational (I’m not even sure the current¬†work on the trailer is safe), that will take a little bit more.I intend again for this version to be the final way feature wise for the release on iOS and Steam. But that doesn’t mean much… I have had the same intent for about a year.Check the full changes log below!

entrance
The entrance to the Temple of Ananias
test
Bigger rooms
password2
Resetting password via email

User Experience

  • Animation for player!
  • Add dungeon entrance
  • Make monsters and player shake when hit
  • Replace integrity with description for weapons and armor
  • Allow moving by tapping any floor tile
  • Allow switching weapons using Tab
  • Allow throwing items with keyboard (“T”)
  • Allow switching targets (Tab)¬†and confirming (Enter) or cancelling actions(Esc) with keyboard.
  • Reduce 1 minute of dungeon silence

Online

  • Allow recovering password via email

Gameplay

  • Implement two handed weapons (Can’t wear shield at the same time)
  • Add two handed bonus for some weapons. (Staffs, spears, etc)
  • Increase size of rooms
  • Generate rocks and reagents as a separate item group (more reagents to play with)
  • Multiple types of room per level
  • Remove “No spells used” Conduct when using a scroll
  • Remove “Could use carbine”¬†“skill”
  • Make altars and wells not block ranged attacks

Fixes

  • Always hit with melee wands if wand expert
  • Invisible invisible player sprite
  • Enemy attack check for required min range
  • Tweaks on 2.5D walls generation.
  • Add new¬†monster images on manual
  • Fix issue with boots ground sprites

Enhanced process for hybrid apps

Some months ago I wrote about the pain that it was to create a new build, I’d like to update that with my current setup which is much better tho not still super optimal.

I have reduced the manual steps prone to failure as well as the bandwidth cost. The release and announcement part is still manual tho, so I still don’t¬†to release for all platforms and forget to announce thru all channels.

The cocoon.io parts have been removed in favor of a pure Cordova/Crosswalk approach, which have made possible lots of automatisation.

Still, what takes more time is the manual process to be done for each different storefront via its own web interface. Each one requires different info, and all uploads have to be started and monitored manually. It’s pretty uncommon for a store to supply a command line tool.

This is the current process executed for each new release of Ananias:

Packaging

  • Mark the new version in the source code (client and server)
  • Execute the packaging script for each platform, it does the following:
    • Generate a new JS bundle using browserify
    • Generate the player’s manual
    • Copy the required assets based on the platform
    • Do platform specific things like using cordova/crosswalk, nw.js, signing and zipaligning APKs, etc.
    • These are currently shell scripts, no fancy gulp or grunt for now
  • Rename and zip the executable packages for Windows, Mac and Linux (Should add this to the script)
  • Execute the cordova build for iOS
  • Build changes log from git commit messages

Distribution

  • Upload new build to web (ananiasgame.com/play) (About 15MB) (Only Standard edition)
  • Deploy new server version and restart (About 1MB) (including executing migration database scripts)
  • Upload to itch.io via web interface (About 200MB )
  • Sign in to google play developers console
  • Summarize change log for Google Play
  • Upload both x86 and arm APKs (About 100 MB)
  • Upload both APKs to Amazon via web interface (About 100MB)
  • Upload to indiegamestand via web interface (About 200MB)
  • Upload to gamejolt¬†via web interface (About 200MB) (Only Standard Edition)
  • Upload to IndieDB¬†via web interface (About 200MB) (Only Standard Edition)
  • Open xcarchive in xcode organizer
  • Submit package to App Store
  • Wait for processing
  • Go to iTunes Connect
  • Go to Testflight / External Testing
  • Select new build to test
  • Wait for beta review
  • Go back to¬†Testflight / External Testing
  • Set the new build as active.

The process should be executed twice, once for the Standard Edition and then again for the Fellowship edition.

The dream of having a single web endpoint, and have all the clients deal with the updating is still far from happening.

 

Ananias 1.77 released – Animations for monsters, portrait mode back

The changelog may look small, but a lot of work went into this one. I decided to jump into it, put on the pixel artist hat and make the animations for monsters myself… the game looks much more alive now! The last version was also a bit too easy, so I had to address that. Finally, attack spells are much much cheaper now, so I hope the magic-user classes are more powerful now.

nov-07-2016-0227

Another visible change is the return of the “Portrait” mode for mobile, it seems a lot of people liked it,¬†since it allows seeing the map and the object inspector all the time, and it can be used with a single hand. I still like more the more compact Chibi UI, but I understand it’s a valid choice if your screen is big enough!

screen-shot-2016-11-07-at-1-17-13-pm

 

Gameplay

  • Reduce MP costs for spells GREATLY.
  • Remove intrinsic “noise” penalty for Paladin and Barbarian
  • Reduce chance of enemies alerting nearby monsters
  • Reduce strength of alerts by enemies (their cries for help now reach less rooms)
  • Increase HP for deep enemies and bosses
  • Add more enemies per floor on deep floors

User Experience

  • Idle animations for all enemies and monsters!
  • Added back portrait mode for mobile

Bugfixes

  • Fix crash when using brewed potions while hallucinating
  • Fix issue with some actions breaking the flow when on chemistry mode

Steam and iOS versions

I keep shortening the list in order to make this happen more quickly. Right now it’s down to two items:

  • Idle animation for player. This isn’t simple since it requires building the animation frames dynamically based on what the player is wearing.
  • A new trailer,¬†I will remove the animation sequence and replace it all with pixel art footage from the game.

Merchandise

Production of Dumeril statues and the new t-shirts is still halted. I haven’t been able to push neither of these forward, I’m investing whatever little time I have directly into the game development.

Professor Slash’s Energy Radar, my own location based monster hunting game

Pokemon Go recaptured the people’s imagination of what could be done in a game mixing reality and virtuality. However, after the initial joy, many people started complaining about¬†the lost potential and how they¬†screwed up by not adding some features that could have made the game a more complete experience…

I myself continue playing, but I agree the experience has degraded over time into grinding endlessly for candy in order to evolve my Pokemon, and rarely finding a new one even tho my Pokedex is still fairly empty.

But complaining is too easy, how about actually going ahead and trying to fill these gaps?

I couldn’t get the idea off my head, so even in times like now when I have very little spare time, I jumped into it.¬†This is my very own effort to create a location based monster training game: Professor Slash’s Energy Radar

screenshot_20161017-141103
Professor Slash’s Pokemon radar is able to detect different sources of Pokemon energy around you.
screenshot_20161017-193927
A wild Rattata appears…. Go Charmander!

Gameplay

Use your phone to track different kinds of “energy sources”. Walk to them and once you are close enough you will be attacked by a¬†wild Pokemon, then you have to weaken it¬†by fighting using the Pokemon in your team… the wild Pokemon won’t just stay there dancing for you tho, it¬†will attack back using its¬†own techniques. You can switch Pokemon on your team anytime to take advantage of their skills and types.

Once the Pokemon is weak enough you can try catching it¬†by throwing a Pokeball, your chances of capturing it depend on how weak it is. If all your Pokemon are defeated, you will lose your chance to capture it and won’t be able to face other wild Pokemon until they have recovered (they will recover their hit points with time or you can take them to a Pokemon center by walking close enough to one of the towns in the fantasy world).

The energy sources around you are based on your location in the fantasy world (Kanto in this case). The game map is overlaid on the real world as a 8km x 8km area (approximately), so you have to walk around your city in order to find different types of Pokemon. Even without connecting to a server, all players find themselves around the same in-game location and get to see the same energy sources .

You can train your Pokemon by fighting wild Pokemon or another trainers via Bluetooth. Stronger Pokemon stand a change against powerful wild Pokemon you want to catch.

Creating a working prototype

Creating a full game following this design would be a huge enterprise, beyond what my limited time and resources currently allow. However these ideas haunted me, and I set myself to create a working minimal product which could at least be used to validate them in real life.

The result is a huge mess of code which works pretty decently for the time I was able to invest. An obvious next step in case I continue pursuing this development is doing some massive refactors (all game logic is currently implemented as a single huge monolithic 747 LOC JavaScript module) and optimizations (basically I didn’t care about the CPU for this version so I do lots of redundant calculations, and I don’t really want to talk about the rendering strategy ūüėõ )

BUT, it works… I managed to have something to experiment with!

Overall Architecture

One of the things I am going for is being completely server-less while still allowing social interaction between players. This is of course to allow infinite scalability and not having to worry about server loads (One of the main headaches Niantic had/has)

I chose to create an hybrid JS Cordova app just because it would allow for much quicker prototyping while at the same time giving me access to the device services I knew I was going to require:

  • GPS sensor
  • Compass
  • Accelerometer
  • Camera
  • Vibration

Server-less social interactions

This, I think, is the core of the app. I used the seedramdom module from David Bau which contains seedable PRNGs that¬†I could seed using a combination of the different locations, time of the day and other parameters. All this in order to make the same energy sources show up at a given time for two players being on the same location, this way there could be social interaction (Hey! There’s a Dragonite near me, come and get it!)

Also, everything is local here. You don’t even have to create an account, all your progress in saved in your device.

Geo tracking

This one is of course one of the main features, since you need to move around in order to interact with the world. The cordova-plugin-geolocation provides you latitude, longitude, and even altitude, along with a precision value.

A lot of processing is then done to convert from geospatial references to physical distances in meters. It is a pretty interesting topic I had already visited back on the times of Expedition. This answer, derived from the Wikipedia article, was super useful.

Of course, GPS is still far from precise (and I’m not sure if that’s ever going to change!), some postprocessing and filtering is needed to smooth the sensor readings and eliminate noise.

Current GPS support is awesome, but its accuracy limits make some kind of interactions people are dreaming with impossible. I can understand why Niantic had to force some design choices around the restrictions of current technology.

 

Walking detection

Used the cordova-plugin-device-motion to get the x, y and z acceleration values using the phone’s accelerometer in order to try to find out if the player is walking, main goal was not having wild battles triggered while phone is lying on a table or you are holding in your hands without moving.

In the end after some experimentation I was able to provide a fairly accurate approximation via a Kalman filter¬†(I don’t know what that is, I just followed this answer from StackOverflow ūüôā )

Directional radar

In order to make it easier to get to the energy sources, the radar rotates based on the direction you are heading.

I used the cordova-plugin-device-orientation plugin for this, it gives you a 0 to 360 degrees value for orientation, then I applied a simple transformation to the position of the energy sources in the radar.

Pokemon Combat rules

As someone who loved the original Pokemon games, one of the main things I wanted was having Pokemon battles be an important factor in the game; here’s some of the differences.

  • Catching Pokemon
    • Pokemon Go: Using a razz-berry in order to get the Pokemon to love you, then throwing the Pokeball (with a finger gesture, slight skill involved) and hope it doesn’t break free.
    • My own: Weaken them in battle (risking losing the battle or killing them), then throwing a Pokeball (catch chance based on how weak and how rare)
  • Training Pokemon
    • Pokemon Go: Feed them candy and stardust. Get more Pokemon of the same time in order to grind them into candy and repeat the process.
    • My own: Battle wild Pokemon and other trainers to get experience and level up.
  • Battling Pokemons
    • Pokemon Go: Pokemon have a simple and a special attack. Tap the screen as fast as you can to use the simple attack and accumulate energy for the special attack.
    • My own: Turn based, select the best attack to do based on your advantages and the status of the fight. Pokemon have a max of 4 attacks including status effects.

I implemented a veeeery basic combat system, implementing the full combat rules would of course be a lot of work. I would initially target for the first generation rule set, I did some research around and found some already existing JavaScript games which could be useful. The alternative would be having a simplified system.

Bluetooth P2P Connectivity

An obvious social feature is allowing players to combat each other; following the server-less approach, I picked basic Bluetooth communication to establish a peer to peer link.

Used cordova-plugin-networking-bluetooth from Franco Bugnano, who has some interesting blog posts on the topic. This only seems to work on Android, which is good enough for me ūüôā

Some samples of the current bluetooth connection flow, for now I’m just establishing the connection and sending a simple message from a player to another and back, future work would be establishing the complete battle flow.

Vibration feedback

Used when starting a battle and when the pokemon are hit. Just a small detail that the cordova-plugin-vibration plugin allows to do very easily ūüėČ

Augmented Reality on battles

As a final touch, I used the com.ezartech.ezar.videooverlay plugin from EzarTech in order to show the video in the background while on battle. Future work: Use accelerometer to relocate monster, allow snapping pictures.

More stuff?

Some other things I think may fit the game:

  • Adding some activities you can do without walking around (say once you are home). Playing around with your Pokemon or making them train by fighting each other could be an option.

Why bother doing this?

Obviously, I don’t have the license to the Pokemon franchise so I¬†can’t release this game as one my own so.. why bother doing this?

  • For my personal enjoyment (and my friend’s), I want to¬†provide¬†a different (better?) experience for a location-based Pokemon game.
  • I want to know how far is it possible to go today with hybrid apps and Cordova with regards of extended smarphone functions.
  • I always wanted to make use of some features that modern smartphones have and apply them into something fun.
  • I’m creating this as an engine, in the future I may actually use it to release a game under one of my IPs.
  • I needed to get it off my list, after building this prototype now I can live a peaceful life at last.

If you would be interested on giving this a shot, drop me a line ūüôā

The Kramora Times #4 – Ananias 1.76 released

TL;DR – Get the new version from Play Storeitch.io or play online

This is the fourth edition of The Kramora Times, you favorite and more reliable source for all Ananias-related information. You can now subscribe to receive this newsletter in your email too!

Ananias Version 1.76 released!

It’s been over two months since the last release of Ananias. I had set myself the goal of the next version going straight into Steam.

Alas, I have to change plans again… I jumped into some projects and I don’t feel I can handle the workload of the release and all that is related to it while responding to these other projects responsibly.

screen-shot-2016-10-01-at-12-09-39-am

However, I have to say this is very close to the scope I have planned for Steam. May be next version will finally be it? I have been saying this for months now.

screen-shot-2016-10-01-at-12-07-38-am
Conduct Tracking

There were some important internal changes, specially in the packaging system (Using Cordova and Crosswalk without passing thru cocoon.io for much quicker development and release). They are likely to break things so I hope players are patient.

I also added an in-game manual (also accessible from the website, here). Bits of it are generated directly from the game source code, in order to keep it up to date! The wiki was also updated, with data generated from the game.

screen-shot-2016-10-01-at-12-04-58-am
Sample of the manual 

Another big thing is that you can now also generate tombstones for your characters and share them with your friends. See this one for example!

screen-shot-2016-10-01-at-12-06-17-am

So, with all the work that went into this one,  and given that I won’t be able to work back on the game for the following one or two months, I’m releasing this version. Check out the list of exciting changes below!!

Gameplay

  • Allow unloading weapons
  • Add conduct tracking:
    • No scrolls used
    • No spells used
    • No potions used
    • No bandages used
    • No weapons used
    • No armor used
    • No kills
    • No room unexplored
  • Add Zinc potion to recover from paralysis, blind, confusion and hallucination
  • Grant upgrade bonuses if 100% level explored
  • Make deep level enemies stronger
  • Tweaks on fleeing AI
  • Add Sir Glenn NPC, guaranteed crossbow at level 7

Social

  • Generate tombstone page with player info on death
  • Allow sharing tombstone page on twitter and facebook

User Experience

  • Add in-game manual you can check anytime, including bestiary
  • Change UX for mixing reagents
  • Play random dungeon music instead of tied to level
  • Remove Dungeon Crawl Stone Soup title
  • Make better use of space in dialogs in small screens
  • Prevent unselecting pet when cycling thru shepherd
  • Added extended title theme
  • Add option to Exit Game on desktop
  • Show stats when dying or winning
  • Show level summary on completion
  • Mouse movement in desktop with invisible arrows

Bugfixes

  • Prevent issue when throwing potions only 1 shot spent
  • Prevent keyboard actions when modal dialog present

Other

  • Generate manual and wiki text automatically
  • Added build scripts for web, android and desktop, including different level of audio quality.

    Steam Version

    Pending things for the release:

    • Detailed GFX for weapons and armor. May be important, not sure if I’ll be able to get an artist for it.
    • Adding more plot and may be even random stories. After talking with Thomas Biskup on the Roguelike celebration, I have reconsidered this and I think I should invest a bit on it.
    • Stealth mechanics, make it so that monsters not always notice players (add fov) may be even add fov for players?
    • Berserk tactics, extreme attack bonus when naked for some classes.

    Also pending for this is the new trailer, preparing promotional material and setting up a Thunderclap campaign (probably). All these will require money so I hope I can get support for it from the hardcore Ananias believers!

      Roguelike Celebration 2016 – A missed chance?

      As described on a previous post, I went to this unique event on San Francisco last month. It was a great chance to meet roguelike developers and players.

      Sadly, I missed this chance to promote the game in what was possibly the best targeted event in the world for Ananias’ potential players. I should have brought some info about it or pitched the game more… however time was pretty short, and I’m glad I got to share time with the amazing devs there at least.

      Dumeril Sage statues: production halted 

      There have been some issues with the production of the Dumeril Sage statues… the process is just too hard for me to handle, I don’t have a partner who can take of all of it to deliver finished products and at a good pace. May be it’s not time yet for this. At least I have managed to deliver some of the statues to people I really esteem and I hope they are enjoying them.

      The latest batch of statues, no flame, no staff, sometime they’ll be complete

      An alternative I’m considering is having smaller statues and using 3d printing instead. It’s a bit expensive but may be much easier to handle.

      For the t-shirts I am thinking on having an alternate design that can be printed on higher quality shirts (more durable). Thanks to all who already pre-ordered for your patience, I’m hoping to deliver a good quality product.

      Cat Cafe 0.2.0 released

      The game is now available on the Play Store for Android, and is on the way to the AppStore. (Need some testflight testers!!!)

      Screen Shot 2016-08-03 at 12.25.37 AM

      Of course, the web version is completely playable on desktop and mobile… it’s been updated at itch.io

      Screen Shot 2016-08-02 at 11.40.22 PM

      List of changes

      • Added Help screen
      • Tweaks on mobile to cover all viewport and have a famicom controller background
      • Cordova+Crosswalk setup
      • Deployed on Android
      • Fix issue with Math.sign on mobile safari
      • Fix issue with subpixel rez on retina displays
      • Prevent losing hearts after day ends

      Co6Gc2tWEAAXsMJ

       

       

      Cat Cafe: Dessert Panic

      CatCafe is an arcade game where you have to fed the cats in the bar while avoiding other cats who jump at you. If you take too long to deliver the food, or if a cat makes you drop it, you will lose one heart.

      Each stage represents one day of work, and in order to complete it you have to survive until 5:00PM. Stages vary on their obstacles layout and the amount of cats you have to deal with at the same time.¬†There are two difficulty levels, survive for seven days and you’ll win.

      Play now on itch.io!

      Motivation

      • Learning more about real time / arcade games and physics systems.
      • I missed last year’s “A Game By Its Cover” jam and I really wanted to participate because I love Famicases and I have the power to develop games.
      • I wanted to make a fun, light game that anyone can play without instructions but is still challenging.
      • Everybody loves cats

      Design

      For this game I followed a process I rarely do: I had no idea how the game would play when I started developing! All I had was a couple of very rough ideas for gameplay, first off the famicase description:

      70

      Cat Cafe Dessert Panic! Is an action-adventure game where you, as Pera, are the waitress at a cafe for cats. The cats are excited to eat, and they’ll do anything to get in your way. Do not drop the desserts or it’s game over!

      And then, some ideas I got directly from the artist who drew the famicase:

      “[…] like frogger except you’re trying to avoid cats and not cars, and if they hit you you lose your food¬†[…]¬†instead of top-down view, it’s side scrolling (I guess jumping over cats).”

      So I just started¬†building a stage for it… an area where the waitress could move around, and cats would follow her and jump over her. It was only after playing around with it a bit, to get a feeling of what would be fun, that an actual “game” starting shaping up.

      All I knew is I wanted to make a simple game that could be controlled with only the directional keys. In that sense, I guess¬†the gameplay was defined in an “organic” way, without giving it too much thought¬†from the upstart.

      One of the things that got me thinking tho was whether having obstacles on the field was easier or harder. It was easier because it meant less cats would be chasing you around, but harder because you could get stuck on the obstacles and be savaged by the cats.

      I guess I could have gone the statistics way and just¬†play a lot of games (automatically?) and check the scores and lost hearts to draw a conclusion. In the end I opted to¬†make the number of obstacles increase with the levels, but having a level amidst each one where there’s a single obstacle. I made this to encourage approaching the solution to each level differently, as you need different tactics to survive on each (I think that, in the end, both are equally hard).

      Code

      Development of the game span from July 21 to July 31. I started by replicating the structure of other game I had made recently (Lorenzo), since I knew they were going to be similar.

      The game is made on Javascript and uses phaser.io with its arcade physics subsystem (making a lot more of use of it compared to Lorenzo, though still not FULL usage). Single characters like Pera, Shoey and Lali are represented as objects, while the rest of character types (Cats) are represented as classes. There is also a single object representing the game where all initialization is done, and it also acts as the main game controller.

      Being a game developed for a jam, the code is a bit messy as it just kept growing as I was defining the gameplay and refining the user experience, you can find it at github here.

      Art

      CatCafe was created for the “A Game By Its Cover” Game Jam, where developers were asked to pick a fictional famicase (From famiCase16) and create a game around it. This influenced the choice for aesthetics, to try to match the famicom/NES style (without being strict at all about it, specially regarding sprite color count limitations).¬†The¬†comic style depicted on the famicase also influenced the style for the in game characters.

      I contacted Diana Pacheco (okuroy), asking if she would be interested on working on the project… we had previously worked together in the development of Failure Pixal (back on 2008, the art she made for that project was never released sadly)¬†and kept in touch since then.¬†She made an awesome tileset with very fluid animations for both the cats and Pera, as well as an amazing pixel art rendition of the original famicase cover.

      walkingCat

      Meanwhile, I worked on the stage itself. It was a single stage, I based the design in this screen from Déjà Vu on the NES.

      Deja_Vu_-_NES_-_Wandering

      I expanded it a bit to get the initial stage

      bground-1

      I also read a bit on the Catnip Circle webcomic (read it!), to get a glimpse of the universe where Pera lives, it eventually evolved to include some of its elements, as well as to accommodate to the border-less sprites that Diana was making.

      bground-2

      Finally Diana complemented the stage with her pixelart skills, putting some fancy stuff around to make it look better.

      bground-3

      Music and Sounds

      Initially, I planned to do the music and sounds with a guy from the jam forums, unfortunately he wasn’t able to participate…

      Then Ashton came to the rescue! I had already worked with him in ArcherFire and Ananias, and he really liked how the game was shaping up. He created a couple of great tunes in a very short time, as well as lots of very fitting SFX.

      TV-like appearance and responsiveness

      In addition to constraining to a low resolution stage (256×240), additional processing is done in order to make the game appear more NES-like, this includes stretching the display so that it fits a 4:3 ratio (similar to a standard TV set) as well as rendering some scanlines over it.

      CowD1t8WcAAAfNe

      In order to do this, first thing I do is detecting if the current window dimensions allow for stretching¬†by increasing the width of it by 33% of the height. If not I just resort to phaser’s SHOW_ALL scaling option (and I hide the TV/Scanlines overlay, thus making it look like a standard phaser game).

      If it fits, I do a manual USER_SCALE, and relocate the TV overlay so it matches with the autopositioning and scaling of the canvas on viewport size change.

      Additional filters like simulating the round¬†“bulge” of a fat CRT TV were considered and even implemented but ultimately dismissed (at least for an initial version) because they would have required considerable additional effort. They were based on an article by Zachstronaut¬†which pointed out the idea to use webgl shaders via glfx.js to postprocess canvas frames on the fly. The main issue I had was that since the game canvas was very low resultion (256×240), and it was scaled by means of CSS instead of redrawing over a big canvas, the shader that did the bulge effect caused¬†a lot of aliasing on the pixel art… I think it would look much better if the effect was applied to a bigger canvas with most pixel data, but I didn’t have enough time to check.

      bulge

      Mobile

      I used¬†Photonstorm Virtual Joystick in order to allow input on mobile devices. At first I used the DPad implementation which worked but had the great issue of not allowing diagonal movement (which is critical to the game), so then I changed it to use one of the “stick” implementations, which worked pretty great.

      mobile

      Conclusion

      I made a fun, challenging game and got to work with Okuroy and Ashton around a theme that people loves.

      CozBUhjW8AA-Nll
      Pera and Shoey from Gatto Grosso – Image by Cassie Freire

      Credits