• Content Count

  • Joined

  • Last visited

  • Days Won


Everything posted by b10b

  1. b10b

    Park The Taxi

    It certainly is difficult parking taxis!? Nicely presented but too frustrating for me to be able to enjoy the challenge. I'm open minded and would appreciate reading comments from someone who likes this genre explain the fun.
  2. And for every illusion there's always new angles to consider ... Iirc there is a solution for this involving scenery being broken into top, bottom, front, back (or vertical columns?) ... but perhaps at that point moving away from pseudo 3D to mesh or voxel geometry might be simpler? I keep telling myself that.
  3. Sorry to hear this, it's frustrating and not uncommon for quality games. Locking a game will have limited benefit, don't blame yourself. Practical advice is don't spend more than 5 minutes worrying about it (a DMCA takedown should take less than 5 mins once you've done it a couple of times). Some additional takeaways are: 1) brand future games in multiple ways so stolen traffic still promotes the author and proper licensing channels, 2) develop server-authoritative or partner-publishing strategies for monetization, 3) offer paying customers more value than what they could achieve by stealing, 4) remember a sequel is quicker for the original author to make - and everyone prefers to play the latest greatest - so if stolen games get traction cash in later.
  4. @James432213 hi, many issues here, all solvable. 1) The function named "canvas" rename this and avoid some confusion, call it "init" or similar 2) doKeyDown function has parameter "e" but references "event" in the switch - be consistent. 3) the functions doKeyDown, updateCanvas, drawPlayer are scoped "above" the "init" function, so they can have no easy reference to the "canvas" variable defined within "init". Notice also the name collision of "canvas" if we ignore step 1. Easy fix is to move these function declarations inside the "init" function. 4) There's nothing wrong with ctx.clearRect Some basics in how to debug your code will be beneficial, in particular the developer console (F12) is great, and using "console.log" can send helpful messages there from your code. Use that as a start towards watching the flow of your code when it runs, and where things are not actually working as might be expected on a first draft of code. This will lead to more advanced debugging techniques and more elaborate (and working) code.
  5. With Pixi API EventEmitter.on is a straight alias to EventEmitter.addEventListener. Yes, "event" is a simple, singular key with no implied ability to be multiple. That's a good thing because it implies a particular type of Event with specific meta data (e.g. what the mouse did vs what the keyboard did are probably quite different?). Whereas allowing a semi-magical string that may represent comma (or space, or comma+space) delimitation is an inferior interface because it is vague and must abstract the returned Event data as a result. If multi-event binding is a desired behavior for a project then it's quite trivial to override, overload or add a helper function to handle that. And probably better to use something other than a string if doing multiplies? But don't. Instead be very specific about Events, use them minimally and remember to be fastidious about clean-up afterwards. About those shoes ... Pixi is the sole, it's minimal and optimal. Use it as a core that can be extended as and when needed - such extension is often better achieved by the developers who are close to their specific design requirements. Good luck!
  6. I don't know your catalog, but whatever comes to mind to you ... Perhaps the engines can be enhanced, rethemed, sequelled, turned inside-out or back-to-front? It might be trivial to make "HD" versions or add a new difficulty level and call it "Master Edition"? There may be potential to rebrand all the games under a single theme, introduce a character or story arc across them all that binds them into one super sized game? Just ideas ... validate them with your customers.
  7. Also ask yourself what might you realistically expect to gain with a plan of "putting ads on all of the games, and then put them on as many platforms as possible"? Revenue-split eCPMs for in-game ads are trending below $1, so expectation should be pretty low even for decent games. Plus it's not going to solve short-term cashflow crunch because of delays in seeing such money (time to implement APIs, 30+ days before the games launch, 30++ days before revenues are invoiceable, 30+++ days to collect). Plus there's the real risk of seeing neither traffic nor money Instead, if you've got trusted relationships already it might be wiser to leverage them than risk them? Perhaps repurpose the existing catalog rather than republish it? I don't wish to discourage pursuit of royalty income, as it's truly awesome when it happens. Just be realistic about timescales, cashflow and be wise to know that even when "achieved" it can all end very abruptly.
  8. Cool game, although I felt the turning circle to be frustrating and the upgrade path to be a bit slow? I returned later but my game progress / upgrades weren't saved so I abandoned But ... sadly CrazyGames.com keeps reloading their adverts so frequently that the induced page stutter makes playing a painful experience. I wonder if they've tested their own site from a critical user perspective? Driving away players due to bad experience is not smart, and for what benefit - pointless ads around a game drives down eCPM as they aren't meaningful or engaging and any stray click won't count with today's level of auditing. As a game developer partnering with them I recommend you ask for a higher level of service from their end of the bargain! Whereas after enabling AdGuard their site runs much better. Crazy.
  9. The core issue is that clones often don't make as much money as the "genuine" article (but do provide equivalent utility to the customer). So it's in a distributor's interest to cull their numbers periodically. Such culling is usually programmatic, it's not personal.
  10. Level design ... aka the retro-engineered steps needed to get the Player to the game mechanics worth playing?
  11. There are many options. Easiest of which is the generic Leaderboard functions ("setScoreAsync") - by posting scores the platform will often let other Connected Players know. For custom messages the "updateAsync" method offers decent control. If the Player is in a Context (group play) this works really well, but I'm unsure if this works at all if the Player is Solo? Then there is the old school "shareAsync" method. However, since the recent Facebook beatdown, this method is crippled - for example it's no longer possible to pre-populate the message!?! You may still be able to attach a custom image generated from the game as a sort of workaround - but it will require the Player to type a message and make the post. Lastly you have Bots, subscribing, custom backend, proactive pushes, etc ... but that's probably overkill and can't reach outside of your subscribed Players.
  12. @mattstyles thanks for explaining, is this because of stateless / functional reactive? Interesting, to me it feels almost like turning the same problem inside out ... with data needing to become another function (to abstract away from array directly)?
  13. Yeh, I think the disgust is warranted Sweep it under the carpet - I prefer Object Oriented for map data structures. Adding the interface and hiding the 2D array adds value soon enough. A simple example getCell(x,y) avoids that common gotcha of cells[y][x]. Another example might be something like getCellAbove(x,y) where all the range checking can be neatly concealed. More elaborate examples might return a Cell object with such relationships prebaked, or allow partitioning or redimensioning of the data set. And that's the upside, the interface can evolve with the requirements. Whether the underlying data structure is a 2D array, vs a 1D array, vs a string, vs another structure can be changed or upgraded later based on performance tests (these could even be determined per device). All this being said I prefer to save myself minutes of coding rather than a ms at runtime, so I favour patterns over performance for the majority of tasks - I understand that's not everyone's preference or appropriate for certain projects.
  14. b10b

    Scope of HTML5

    We don't know your story, but my thoughts are that - generally - internships are a great opportunity ... IF: 1) the experience is aligned with the individual's long term goals, 2) the lack of income is sustainable short-term and the upside warranted longer-term. So, survival aside, if your goals are to be a hero in the games industry ANY experience in the games industry is better than none. It doesn't matter if you'll end up making the must-buy games for PS6 built on Unreal Engine 5, many of the the principles of the industry are just as true for small web games. I might even be so bold as to say that it's a good thing to be in a casual generalist team for as long as you can - because it will allow you to round out and explore more skills than if you joined a AAA team (where roles can easily become microscopically specialist). But I'm a bit biased on that, so explore more opinions.
  15. I understand the purpose of the post is to promote a use case for Codeguppy - which looks like a very interesting tool, well done. I think serious games have significant merit - but only if done well. Half the battle for gamification is influencing the initial engagement with a sense of trust and willingness from the Player. After that the fun can start with conventional game mechanics coming into play. Therefore I doubt this example would be effective for its goal (professional influence) because it doesn't resolve an immediate problem faced by the typical Linkedin visitor? Simply putting a game between a User and a claimed Reward does not automatically generate value for either party (it could be perceived as a loss of time or other value). Instead serious games should avoid cookie-cutter approaches. We can try gamifying a unique information-exchange, increasing the value of that network as a result of the interplays - e.g. a quiz about the business issues faced by a User, and revealing what books were recommended by other players who faced such issues in the past. Present these outcomes as a unique reading list per User which can be easily shared via Linkedin posts for others to see (and understand why it was relevant to their associate). Replace "quiz" with more compelling game mechanics once the core value exchange is proven, and replace "reading list" with something more instant when the internal quality of data reaches a tipping point.
  16. @Noel are you referring to a an IP lookup?
  17. @fredriksthlm Anything wrong with using a GeoIP third party API / service for such data? If using a backend for your multiplayer it could be resolved (invisibly) server-side.
  18. Also, from a pragmatic view any good rendering library can easily be bolted on to, so beyond the load time there is little disadvantage in adopting one? For example with CreateJS any DisplayObject can be "cached", which then allows direct access to "cacheCanvas", which can then be directly manipulated (as if it were any other canvas). An advantage of such a mix-and-match strategy is you decide when to keep inside the library and when to venture beyond ... e.g. in many of my games I utilise library capabilities for basic scene-graph, UI, text etc but will often create a custom renderer (at canvas or shader level) for elaborate HUD components or performance critical game-world graphics. I try to pick the best library for the project, my preference is CreateJS for non-WebGL lightweight work, and PixiJS for heavier games that can target WebGL or need Spine animation or shaders.
  19. Get the token from the request auth credentials. Then create an appsecret_proof (using your client secret) and include that in the payload too. Simple right
  20. @komali2 it's possible, but perhaps not readily so via the Esoteric pipeline. I don't think it needs to be so complicated as to weld different skeletons together (unless different hats do very different things)? Just swapping the Texture should achieve your original ask. e.g. crudely: animations.skeleton.findSlot($YourSlot).sprites.$YourAttachment.texture = new Texture( ... );
  21. Consider that at runtime pixi-spine is mostly dealing with DisplayObjects / Sprites / Textures. So one option might be to interrogate the scene graph and swap them out as needed (after the Spine Skeleton has been loaded and put together). Such a strategy could mean a fairly simple Spine export (a barebones skeleton with a single placeholder skin) which then has its textures replaced on-demand (from any of the thousands assets that may be available from alternative resources). This does assume one "hat" works in the same way as another. Performance optimisations and efficient texture packing would still need some thought - coupling with some server-side logic might be warranted.
  22. b10b

    Mini Switcher

    I enjoyed it. However I didn't find the levels became consistently harder? I got hung up on one earlier level (took a couple of dozen attempts?) then free sailing to the end without another defeat. Perhaps some analytics can reveal if this is a common scenario?
  23. @Beawer26 might be worth considering using pixi-sound: https://github.com/pixijs/pixi-sound
  24. I'm not sure how CrossCode is being ported but there is this runtime (focused on Construct and Fusion to consoles including Switch): http://mp2.dk/chowdren/
  25. Yeh, I'd agree - like @mattstyles said it went against expectation. But it made more sense over time when the rewards were higher and hoarding paid off (so I didn't mention it). I think permanent is the better choice.