Televangelist's Forum Posts

  • Heiach, we now have a Google discussion group specifically for discussion of C2 multiplayer development -- challenges we face, best practices, comparing different approaches to aspects of C2 multiplayer development, that sort of thing. Any interest in being added on? No obligations to it whatsoever, just a Google group. PM me if you're interested!

  • Try Construct 3

    Develop games in your browser. Powerful, performant & highly capable.

    Try Now Construct 3 users don't see these ads
  • Televangelist

    Since firebase is a database, point a) is possible. For point b), it is also possible because that firebase allows users to monitor the changing of values.

    But these features would not be easy to put into project directly. Maybe it needs some custom plugins for specific application.

    My plan is to build social features (friend lists, private messages, message board, etc...) first, since these might be general for most multiplay games.

    BTW, firebase is one of possible backend solutions, so it might have another better solution than firebase. Surveying these solutions is another important work, IMO.

    Understood. I'm still searching for a guide out there that breaks down which database types are suitable for which sorts of games... if I can't find one, I'll probably create one.

  • Hope someone can provide some enlightenment on this, it's a question a lot of us newbies face I know it's been solved in various C2 games I've seen, wondering how...

  • You could use a common layout for all the common stuff, and then outside of that have a spawn event that's unique to each?

  • Very interesting, CV!

    rexrainbow -- I'm curious, for building a persistent world, do you think Firebase would be well-suited for:

    a) the database of player characters' statistics and inventories

    b) tracking all the various events going on in the world -- which NPCs are happy, which ones are angry, what time of day is it, etc. etc.

    ...or c) both of those?

    Looking at your example and trying it out on multiple PCs I was impressed with how well it worked for that purpose.

    Just trying to make the right decisions early on in my project so I don't end up having to redo major things down the road.

  • These testing/samples lack of documents. I am busy in making new plugins or fixing bugs of existed plugins. I only could provide basic document for each plugin.

    Fortunately, jomo would like to help me to pack my plugins into templates with full documents and supporting, sold in scirra store in the future. ( Supporting is much harder than making plugins, IMO. )

    ----

    Yes, I come from Taiwan. Since we are in scirra forums, it is better using english only.

    Makes sense! I'll probably pay someone who understands your plugins better to teach me.

    (Very cool that Construct 2 users are all over the world! I was just in Taipei a few months ago, my first time in Taiwan and it was an amazing country.)

  • Wonderful! Thanks so much for that.

  • I'm also curious about this. I set my items up as sprites though, and they go in itemslots, which are also sprites. I'm a little wary of this setup, as I'm not sure what kind of problems I might run into down the road. I admit its a little odd to keep them as physical objects instead of abstractions.

    Anyway I can see a multiplayer scenario where the host has dozens of ItemSlots, all associated with different players, invisible and not synced with each client. The "paperdoll" sprites, as well as any attacks etc., will of course be synced to each client.

    It seems like only your Option 2 is really secure? It seems like using a player's own data in a multiplayer scenario is likely to be subject to manipulation of some kind.

    Option 1 can be secure as well as long as you occasionally sanity-check against the saved character data on the server... there are various ways you could 'append' security onto something functional after the fact. Option 1 might be the better bet, though.

    Edit: I worry about setting up your items as sprites, because then that would create all sorts of limits on what you can do with that information; seems easier to set your items as data stored somehow (an array? a series of simple variables?) and then set the item slots to be sprites that display a different image (using animation frames perhaps?) to visually indicate what's in that slot according to the variable it's set to.

  • Oh Rex... it's always so bittersweet when I get a reply seeing you've built something. Because I can always count on two things to be true:

    1. What you've built will be awesome, and at the leading edge of C2 development in a given area;

    and

    2. As a layperson I will have virtually no idea what you've done or how to adapt it into my projects, because it only provides the explanation an expert user will require.

    If only there were a 'noob whisperer' who followed behind you and explained your great works to the masses.

    (By the way, I noticed your online filehosting is set to the Chinese language... 你说汉语吗?)

  • ...I can't be the only one?

    Yes, there are limitations, but it feels eminently doable with what we've already got. Real-time interaction handled by the multiplayer object and peer-to-peer hosting of each part of the world, simple AJAX calls to a database of saved character data and world-state variables to provide persistence. Add them together and you have the most powerful tools for building a persistent world ever placed in the hands of an indie dev.

    I'm encountering difficulties as I go, albeit very surmountable ones. But ideally I'd like to get a sense of who else is building the same sort of project, so that perhaps we could all share lessons learned.

  • Say I'm building a persistent-world RPG with standard 'paper doll' equipment layered over the base player form. Some of this equipment is merely visual; some of it affects player stats. Generally, I would imagine the best way to store what equipment the player is using is via global variables, since my game will take place non-linearly across a large number of layouts.

    However, that would be a problem when it comes time to connect to another peer and 'go multiplayer'; the host (another player, not a central host) has values of their own for these variables.

    I can imagine two ways of handling this:

    1. Have instance variables on the player object that mirror the relevant data from the global variables upon entering the layout, then copy this information over when the player enters the multiplayer space as a peer.

    2. Transmit only the player's 'user ID'. The host then uses that user ID to contact the central character database and retrieve the relevant stats/information about each player.

    Or perhaps there's a third and better way I haven't thought of yet?

    Let me know what you think of this plan!

    Best,

    Joe

  • So would I!

  • Events can have more than one condition. So the value of Flying becomes an additional condition required to trigger the event... and then you can have an "Else" that gives a "your flying is too low" message if their skill isn't high enough.

  • Nick, that's a very interesting solution! The only issue is that it measures who's scored the biggest hit, not who did the most damage overall. But it does have the major virtue of elegance!

    If storing the damage of each player is difficult, here's a solution that could work well, perhaps: a slight modification of your plan so that if a player hits and he's already the 'top damager', the new damage he's done is added to his total, creating a progressively higher 'bar' for other players to clear. This would even work well to discourage kill-stealing, and should be possible to do with an easy additional comparison of name variables! Exciting, thanks.

  • This is gameplay that would be simple in a single-player context; you kill a monster, the monster drops loot, you pick up the loot.

    In multiplayer, it's tougher if you want only the highest-damage-dealing player to get the loot. My best guess is that the monster object needs to create an instance variable for every player connected, which increases when that player damages it; when the monster dies, it compares all such variables, selects the player associated with the highest number, and then when that player interacts with the corpse of the monster they get the loot.

    ...is that possible with the C2 multiplayer object? If so, how?