• Content Count

  • Joined

  • Last visited

  • Days Won


sbat last won the day on November 9 2013

sbat had the most liked content!

About sbat

  • Rank
    Advanced Member

Contact Methods

  • Twitter

Recent Profile Visitors

2814 profile views
  1. 1) Check out this Hiring and Freelancer section . Even on this forum alone plenty of opportunities are available. Making $2-6K a month with custom H5 game development is not particularly challenging. 2) I am not actively persuing licensing market. But every once in a while it happens that I retain rights to the "code" of the game that I built for a customer. And you know, I sold licenses this year for *all* of them one way or the other. Either non-exclusive license, or exclusive reskin, or totally custom game built on top of the existing product. 3) Don't underestimate the effect of good online presense. I have shitty website, did zero job on my online promotion, but in 2013 (!) I was lucky to win Samsung competition. And you know even this summer I got email like: "We found your html5 game in Samsung competiton winners list, is this game available for licensing and are you open for collab?". I think anyone appearing high enough in Google with html5 gaming categories have to pass on offers like this almost daily.
  2. 0) Because this is what Typescript recommends. . Now that "import" is part of ECMA script, this is recommended approach for the future projects. Surprisingly, this even works in all major modern browsers, so some of our customers' project are conditionally loading ES6 code in newer browsers and old ES3/5 code on older ones. 1) You can manage versioned third-party libs with NPM or Yarn. This was in fact #1 reason for me to make a switch. 2) Modules are more powerful than /// comments + namespaces. It is just much easier to encapsulate things with zero global pollution this way. 3) Most of major libraries, tools and actual games I've seen at various companies are built like that. You are at slightly advantageous position if your code is built like that and you know this stack. 4) Webpack can make JSON, SVN, images modules. This is quite powerful and convinient to be able to load game designer CSV setup with a simple require/import statement.
  3. Thing that worked best for me so far is mochajs running in browser window: This way, on dev machine one can simply open tests.html. On CI server the challenge then is to run this HTML page and capture bugs. My approach is to do that with Selenium (which is quite easy nowadays with docker images This way you'll also get integration smoke test. Other things to consider: 1) If you don't want to test any PIXI visual aspects, then just running mochajs test with any node-based runner works just fine. 2) is more lightweight than Selenium, but making it work in docker env might be quite a pain. 3) You may check how PIXI does their unit testing. AFAIR they have some Electron-based framework for that.
  4. Quick copy-paste from our Tech Stack document. Hope this helps, and feel free to ask any questions in the areas, which are of interest. JS Libraries Tool URL Usage howlerjs Sound support (web audio, html audio tag fallback) pixi Rendering tweenjs Tweens (we do not use Greensock/GSAP due to license restrictions) Dev Tools Tool URL Usage VSCode Our IDE of choice Great typescript support, autocomplete Reasonably good refactoring Free TexturePacker Build texture atlases (spritesheets) from individual sprite PNGs, provided by artist ffmpeg Convert WAV from sound engineer to MP3 sound files (we use MP3 as patents seem to expire around the world, and it is the easiest/widely supported format) Build Tools Tool URL Usage typescript Code for our games nodejs Our build is based on nodejs npm (included with nodejs) Handle dependencies to third-party modules (PIXI, Howler, etc) shelljs We develop custom build tools as “npm run” scripts (javascript files, located in tools/build project folder) shelljs provides crossplaform cd, rm, mkdir, etc webpack 2.0 Support ES6 modules Build single minified javascript file from typescript sources and non-JS modules (JSON, images, spritesheets, sounds) However, we DO NOT use webpack for everything. We package static assets, upload to server with shelljs-based build tools. Bitbucket/Mercurial Our private projects/modules are Mercurial repositories at [this is for historical reasons, I am not sure there are good reasons not to use git in 2018] tslint Enforce coding style of our choice putty/pagent (windows) Our upload scripts expect on Windows that SSH keys to our webserver are stored with pagent (in memory)
  5. Finally, #VR done properly

  6. > 2. i can use gulp to compile all ts. But how can i compile only one ts file when i make mofidy? Webstorm comes with Typescript file watch/transpiler: Every time you change a file, it will be automatically transpiled. However, you are probably using typescript "-out" (or equivalent gulp/grunt task) to combine everything to one javascript file. In this case you are out of luck, and can really do one of two things:1. (this is what I do for now) Just disable file watch, and compile everything with gulp/grunt, even if you change a single file. Typescript compiler is relatively fast, it compiles in <2 seconds for me.2. Generate separate javascript files with webstorm (and gulp for consistency). Then build your final game or load individual JS files with some external package manager (, which you can also invoke with gulp. I have not tried this path, but want to do that one day.
  7. 1. This is source map file. It maps JS file lines to TS lines, so that you can debug TS directly in the browser or IDE. See more details here: If you don't need that, it is safe to ignore the files or disable their generation.
  8. Ilya did sound fx and music for Dino Lab (game we built for the customer, video above), and also for our upcoming html/native title. I'll definitely work with Ilya again. He quickly delivered high quality sounds, was always open for feedback. Definitely recommend!
  9. I ask artists to create large (or tall) backgrounds (4000x1280 in fact for my latest game). Not paying too much attention to details on the edges, but keeping them decent (like continuing mountains, sky, etc). This is usually not affecting efforts/budget too much. Normally I do games at 640x960 (or similar landscape if requested by customer). But if native port is required or customer wants border-less experience on iphone 5s with browsers controls on, big backs come to rescue.
  10. I have zero experience with Panda.js . But if it really does not have explicit init function, nothing stops you from dynamically loading any scripts after device ready event. Quick googling suggests there are no issues with creating SCRIPT tags at runtime under Cordova:
  11. Maybe if you have full control it is easier to just put everything under single domain with proper DNS setup? (if your site is, point your image buckets as Have you checked actual HTTP request and response? Do you see proper CORS exchange? One thing as I noted might be that you are setting CORS attribute on image tag too late, and simply not firing a request. > I'm struggling to understand. The key here is that there are three parties in a potential malicious scenario: A: Secret server to what you now have access (in your local network, for example, or by acquired authentication token/cookie, or by your IP address). B: Public server with potentially malicious script. C: Your browser Your browser C has access both to A and B. Web page served from server B is free to load images from anywhere and display them in browser window C. There is no harm in showing you the images, that you have legit access to. But if browser C ever allow page from server B to access pixel data of the loaded images, this page can parse and submit your secret image to server B. Therefore browser C requires you to ask server A: "Is it ok that someone sees the data that you are about to give without requesting user consent?!". And server can respond: - No, this is private nude photos . - Sure, this is public anyway, anyone can see. - Yes, but this is private image, only can manipulate images
  12. I think you should investigate status of CORS requests and responses in the Network tab of your browser. Let's look on what happens here... "By default" in most general case what you are trying to do is impossible and prohibited by browser (no matter what fancy attributes you add). Imagine that you could do something like this without server permission. In such case, if I could somehow learn that your top-secret future game is hosted at (local private URL), I can send you a link to my own site. And when you visit it, javascript on such page will pull things from your local server (which you have access to), and post them to my site. Neat, right? Moreover, in such an unlimited world I could still you personal photos in the background, querying them from your facebook page (as your browser carries all needed authorization cookies), and posting to my website. Therefore, browser needs to ask in the request "can I please use this images any way I want". And, what is important, server has to respond: "Sure, this is public info, go ahead". So two things to double check: - Set crossOrigin attribute BEFORE setting src attribute. If request is made, it might be too late to ask permission. - Check that server indeed responded with CORS approval. If not, you are out of luck, and simply can't do anything. You cannot prevent tainting, if "foreign" server does not allow you to do this.
  13. If you want to change bunny into frog "on the fly" without creating new sprite, yes. For example, if you are creating fireworks with green, red and yellow rockets, and just using same 100 sprites for the entire course of animation as recommended (just changing their frames as they "expire"). If you need to just create a bunny, a frog and a kangaroo - no. All attributes will be loaded initially (and whenever list of children is updated).
  14. I'm coming! Please post a date and a place, and I'll be sure to join!
  15. I'm trying Cocos2d-JS for the upcoming game. Big thing about it: "native bindings" for native applications. I.e. when you create a sprite, it is implemented natively in C/OpenGL on Android/iOS and with canvas/webgl in html5 browser. Wrapping arbitrary html5 code into apps is still HUGE pain, thus Cocos2d JS is really promising here. However, this is relatively new player in html5 world. So, you will probably find issues, smaller community, etc. For example, my immediate finding was that there are no solid bindings for TypeScript. If both native apps AND html5 version is not a priority for you, I would suggest you look at more mature HTML5 players: - Phaser as solid well-supported end-to-end game engine (or Pixi JS if you just need rendering) - CreateJS as a collection of rendering, preloading, sound and tweening libs