 Good afternoon, everybody. My name is Salvador Vanderas. I came from Funerver, which is a university network and I'm the head of educational technology and translation, but that's probably many of you I have been in every role in Moodle. So I've been a developer. I've been an instructional designer a teacher and administrator everything So I'm really glad that you're here today. I sure wasn't expecting this many people. So excuse my trembling And well, I'm going to talk to you about gamification. So I hope all of you know what gamification needs I hope so because this is a technical presentation. So okay But just for the sake of the conversation Does anyone not know what gamification is? Perfect. I'm gonna explain it either way So as you know, you'll know gamification is the application of Elements from the game playing into non-regulatory fields like I don't know marketing others education So in the case of education at least it's not new. I mean Learning by playing it's something that has been done like forever like the dawn of existence. So It's not new gamification So the the question is why now why so much fast about it now? because if you look at the trends in Education year after year gamification is there among other buzzwords like I don't know artificial intelligence micro-learning Whatever comes to mind extended reality for example. So so why gamification keeps on Keeps on appearing year after year in trends well Mainly I think it's because it's proven to be a really effective way of engaging users in the in the learning processes, but also because Nowadays there's a rising need to boost disengagement disengagement for both learners and teachers Not just in the learning process itself, but also in the in the environment where it happens and in our case It's the virtual platform. It's more I think this may be related to to the Consumption habits of of the younger generations, but also to the to the situation that we have been living lately Going forcefully to from face-to-face education to virtual education Has been hard for so many Institutions, so they're looking for any way of engaging the users in the user's platform. So Gamification is one of the best ones. So Okay, Moodle being the best LMS out there as you know Already has some gamification a Alternatives there's a number of plugins in the in the plug-in database that were wonderful and that and that Gives some gamification experience to the to the model platform I personally have been a fan of level up and stash since I've discovered discovered them in a previous model mood They they are they are really nice the others too, but I mean I'm a fan of these too But when you look at out of the books out of the books Moodle Okay You see that if you don't install any additional plugins, there's not much about gamification in fact the only real Gamification that I can think of Feature is the baddest feature And to some extent some of the capabilities that the H5p Content creation allows well and also Any way that you as teachers or developers or technologies can think of by using other type of Plugins or components that are not necessarily means for gamification So seeing this lack of gamification features in in core. I thought okay, why not Create a core gamification subsystem and that's why we're here today. Okay, so If you see on screen there's a number of words of terms that in this case belong to the To the world of role-playing by role-playing video games Most of them are shared You may have heard that not in video games, but in education itself when talking about gamification So you can see I don't know points letterboards levels quest skills inventory Man, there's there's typical from video games, but I'm pretty sure you have been listening to Hearing them when talking about gamification sometime But okay, so we're trying to create a subsystem So subsystem needs to be something simple something that Can be implemented by any other developer that can be extended that can apply to multiple scenarios or context so we can just Make all of this to happen in the subsystem So we need to find the common ground for gamification to to happen. Okay, remember. This is my approach. It's not the approach so This is what I think we can do. So let's try and find Which of these terms could be minimum the lowest common denominator for the for the subsystem anyone has any guess About which term I have chosen among all of those to to to be there the the Essence of the gamification subsystem Points yeah Points yeah, I mean we wanted to keep it simple. So points is everywhere I mean if you look at card games for example, like I don't know Remigio the card game Remigio You need a certain number of points to show your deck If you look at the sports Group sports especially you need to score points and if you look at be at video games For example, you have arcade games Which the goal is to to get the number the most the maximum number of points or other Generous of video games where you need to get experience points ability points. So points. Yeah, why not? Okay, so having points in mind What will be the basics for the subsystem So what What's shot the the subsystem alone the shot? No, well, it's bull a low obtaining points Where within an active game instance, I will talk about that in a bit But just so you know Like like the press start to start a new game that kind of game so so game instance Who of course the player but we don't have players in model. We have users so users we search capabilities When or how if you prefer is how you get points when you get the points And for example when carrying out certain actions, we'll see about it later and why Well, I as a developer actually don't care much don't get me wrong But that's up to the to the interested users to the teachers to the pedagogues How they use the subsystem is up to them actually So I don't have an answer for the why So before be we go on as I said, this is an approach. It's not the approach. It's the approach and saying I'm proposing Very main that I'm not talking about an existing plugin not something that is in production Again, it's an approach that I have made up and that I want to show you by using existing model components and features and even so and even though there are some prototypes that I plan on make Available in the near future. They were developed we as a proof of concept So they are not they are they are really far from ready to be in a in a production setting So if you ever get to them in my github or something, please don't use them in your production settings Okay, so with that said, let's start with at the what with the where the game instance So the game instance is to where the game happens Okay, where do we want the game to happen? So the most common context in model where the Action happens. Let's say action R3 context is the system context for the whole site the course category setting a Context sorry, which contains a number of courses and The course context which is the day by date of teachers and students So I choose to keep only these three contexts. There are other contexts as you know context user context module context block But probably they were just too specific about what to what I wanted to achieve So I just kept these three contexts system course cat and course oops, sorry So Gamification with this approach can happen in any of these three contexts so if you see the graph there you see that there's a bottom up here key meaning that the lower context has greatest priority over the others so if Gaming stands in set in the course context It will not be affected by the course cat or the system context, but if the course context Chooses to inherit the game instance from the higher context It can also be done because of the inheritance property of the of the game systems So This is where the action happens so any points a user gets will be linked to the Context to the game instance of the context where the action happens. Yep Okay Okay, so how do we define that really simple we just when when when the game instance is triggered We check the context level we see if it's System course cat or course if it's other we try to get the pattern context There's actually a function a model a method in model called get pattern context So we try to get the pattern context and we go again So if it's system if it's course cat or course We check if it's inheriting the game instance from the higher context or if it has its own Game instance so if it inherits we go back and check the pattern context but if not we follow we follow up same for in for our system and the final check that we would do if The the gamification is disabled because of course you can choose to disable gamification in a lower context or in a higher context We just finish but if not well we enable gamification for that context and then any action that happens will be counted to the To the gamification instance. Yeah Okay, so for that I created two classes the Game manager is not a factory class. It's more or less It's a single tone actually that handles the construction destruction and management of the instances it also handles the context checking that we have seen just now and Also, I created the game class which is There's one for each of the of the instances Which contains the the methods the core API if you API if you want to If you want to call it that way and the properties for the current game instance So some methods that includes but not limited get points of that user in that game instance Add points to that user Substract points from that user because maybe you want to subtract from points from a user and raise the whole game instance for for for a user so One of the first things I did is create a global settings The pieces of code is you you will see in the in the presentation. They are just Strikes they are not the whole file So if you copy this it won't work directly. They are just fragments from them from the pie so The first thing I did is create a settings PHP for the module in this case I forgot to tell that my first approach was to do a local plug-in instead of a core gamification subsystem, so I started with a with a local plug-in many of the of the Functions component methods that I'm showing will work either way with as a subsystem But bear in mind that some of the things you'll see here are just for local modules or any kind of modules so in this case the settings PHP for the for the gamification subsystem it allows enabling or disabling gamification for the whole site it in a allows to enable the global game instance in in context system, so you may have the Gamification enabled for the site, but you don't want the whole site to to play okay, so you can it's two different states and Finally the set the falls for local settings So for example if you add a new event, I will talk about the later in a lower context Instance, so how many points by default it will award a certain action okay so also local settings for the for the context itself especially when dealing with a course the course can be Any course or the site course so There will be users with the right capabilities that could that will be able to manage each of the game instances so in the three contexts system course cat and course So what I wanted to do was to extend the settings of the course of the course category or whenever I mean, okay So what I found there's no standard mode and there's no standard functions to Extend the settings so I tried different things like modifying directly the edit form and the edit category form I didn't want to do that. I tried to develop the course standard elements and course category standard element hooks And I tried to implement the custom fields happy, but what I ended up doing was just a Extending the navigation and creating an static page with the local settings and what can anyone do in the local setting? So they can disable the gamification for that context So maybe the gamification is enabled for the whole site, but you don't want it in a certain course and And maybe you want to inherit it from a pairing context or you want it An instance for just that course. Okay, I'm gonna rush it a bit. Sorry So that's how I extended it Actually, that's a mock-up since I haven't found the way to put it right there with model 4.0, but I'll try my best So capabilities I declared some capabilities so like manage game instances participate view the points for other users at points and remove points really simple actually and So how this is the important part? How can a user obtain points so different ways when an action is carried out events? When an activity or course has been completed completion when another user awards them I mean manual and when an action is carried out on your external application or service for example, so If you were yesterday on the hackathon, I talk about event and event observers It's mainly my my whole work nowadays So what I did was to create an another singleton event manager, which handles the event filtering It has a method that is based in an existing method for the Event list report from core. It just filters some kind some events that will be Observed by the gamification plugin. I I just used the label participating and the level teaching events And I excluded the completion since they are they belong to another process Okay, so what we do so what I do is Using event manager I get the list of all events and I create an observer for all of them So creating an observer is just Declaring a variable in DV Slash events dot PHP And what I did is a simple hacky way I I loop through the list of events and I declare an observer for each one of them So what it's happening here is all of the filtered events are being triggered But they are all Getting getting getting getting back to a to a common callback, which is tracked events of course beware of observers Both for performance and because they are catch they are in the catch So really really be really careful when working with with events Okay, and then Among all of that list the user with capabilities can filter which of these events They won and how many points they they can achieve they do that in the local settings that we have seen before and and they Can they need to set this the event name the points that it gives and the maximum frequency For example one time every two weeks Ten times a day. So for example, if you are tracking Form post event Okay, you can achieve you can get points For a maximum of ten point ten point ten post a day. Yeah Okay, important here, I didn't want to use the The standard log table. So I created a different table because of performance issues But I'm still thinking about the best way to do that Really really quick for completion. There's a separate observer So we observe them when an activity or a course has been completed that has a different set of points. It's not It's not it's a part from the from the rest of the events Okay, so you can see here that I added Gamification section to the activity settings So manual giveaway a teacher can Give points to a well as a user with capabilities can give points to another user But I haven't implemented this yet. And finally, there's a whole set of External API functions that allow an external system to give points to the game instance So these points are are tacked as external and Then I don't know an example So if I created a gaming unit, it's a mock-up, of course I can call the local game at points in model and the points will go to the to the to the gaming This is the model I won't speak about it Okay, and just to finish but to switch to a course subsystem because I already told you that this is a Local plugin by now There's some of course some things that need to be done The first one is that the game folder should be at the road directory Then you have to declare some The course subsystem and the subplugging definition because I haven't told that but it allows subplugins in the leap component Jason many of the callbacks that I have shown you can be done in a more direct way And well, I was gonna tell you some examples of subplugins, but weird of time So maybe in another moment That's all the game will be a the game know the plug-in when it's more or less ready will be Available at that link. Also, there's a plug-ins, but again, they won't be ready for production So if you try them in a development setting, please. Thank you Thank you very much any questions for Salvador I Personally, I'm a huge fan about Moodle and gaming And it plan about embedding VR or AR or like including We are in the AR in gamification in Moodle Sorry, yeah VR and AR virtual reality and augmented reality and a plan about embedding those one with gamification I'm thinking about Pokemon Go for example Any chance we can embed like the same concept with like in Moodle with gaming Sorry, I don't get the question. It's like like a plain as extended reality or augmented reality I haven't thought about it. I mean it was not the scope Hope so someday because in my head there's these virtual walls like persistent walls using Moodle And a repository for for activity for grades and stuff But of course not in my plans actually but since This plug-in has an external library It's really easy to implement from from any external service may it be another web application Maybe a video game a video game may be a phone application with augmented reality capabilities So Yeah, not on my plans, but achievable. Yeah. Thank you Any other questions on the side? Thank you Hi, thanks a lot. This was very interesting Maybe I didn't get it Completely so I'm just gonna ask maybe a dumb question But how did you imagine the points to be shown to the end user like in what way is the experience like going forward? Yeah Okay, that's a thing that I haven't mentioned yet, but since this is a work in progress. There's no From then yet How do you imagine it? How do I how do you imagine it? Oh, how do I imagine it? Yeah? Actually, actually I had some more caps at home. One of the first thing was Like this banner on the user profile saying okay, you have these many points in the in the game instance, but also since one of the Not so plugins, but one of the plugins in the ecosystem is a block it's blocked Well, I can I can use block game because it's already being used but block whatever I Imagine them like entering there and seeing having an option like I don't know my game My my game stats something like that and then seeing their their points. Remember that this is just the smallest feature ever so If you wanted anything else like a leather board or like I don't know competition between users or stuff That needs to be developed apart and actually it's one of the experience that I made I have this leather board plug-in which just orders the The users buy points on the game instance and show it to the user in a in a block Yep for your presentation Would you like to to try? This Mozilla haps for example Why not You you made my day I mean my first option was Develop something in unity or stuff, but I mean existing platforms or virtual walls. Yeah, of course I haven't of course not yet, but I will be really willing to okay, but I'm gonna Set for you now, okay Hi, you mentioned like users gonna get their own points and I'm afraid like the future is going towards like more collaborative ways like is there Something in your mind where like a group of users work towards a goal Actually one of the sub plugins that I imagine was this game team it's like dropping people depending on Many criteria like for example if this is in the system context There there will be groups like the course categories if this it's in the course category Maybe the courses and if it's a course maybe using groups. So that way They they will be able to earn points not only from theirs for themselves, but also for the team but When I was developing this experiment, I had to stop on thing because there are many concerns about for example equity So how does everyone? Get the same Possibilities like the other if for example a group is has a higher number of students and the other group What if not everybody has the time so? It can become really fast Unfair to some people so it's something that needs to be Made really quick it happens the same for the competitive version of course, but if you're facing great number of people the the problem it just multiplies so But yeah, I imagine like like this I don't know a course using groups and these groups Corporating between themselves and competing which is order for example Can this is game mentality? So winning is always there, but We can find a way that winning meaning like getting the maximum number of points. It's not the high-end We can find something else to do with the points. Oh Yeah, hello I was wondering if there was some other gamification Plug-in that wanted to add points back into your system Would they use the web services that you provided that for the external? Is that the best way to actually? There's a whole library of Functions like a core API. So if it's an another plugin, you don't you don't need to use external web services you can use the This plug in this component and library You you Haven't thought I haven't really thought about it It's difficult because you need to declare the game instance first from your plug-in So there's a lot of logic that doesn't belong to the other plug-in, but for the for the communication plug-in So I don't think it's ready yet for something like that But the idea is just that that all the plugins can implement the subsistence for anything for giving points maybe tagging it with a Custom tag instead of an event name or a completion activity or something like that, but not in the current state. No Thank you. That's super interesting Just my question because I come from the UNESCO world and working with the officials and ministers and all that Gamification is a big no-no or a bit of a taboo and people don't want to talk about Competitiveness and you know bringing this into the world So I'm always thinking how to use this Not as a winning not as a competition, but to feed back to the learning experience and I want to ask if you have thought of Way because I can see that for example it's the capability to restrict access to resources or maybe give access to more resources based on On the leaderboard or whatever you're progressing But I'm thinking how to help and feed back to the learners and help them maintain for example their engagement in a way That is not necessarily competitive like I'm thinking of Applications, maybe I don't know them but that tell you like oh you're in this Category which means that you are progressing or if you drop a category It means like like I don't know 30% of the learners being here like Basically feeding back and giving information on their experience and they're learning rather than how they're doing compared to Others or if there is anything there about that. Thank you I'm actually at funeral some years ago We had this project that get nowhere got nowhere because we hadn't had the time of the resources We wanted to do something like this like Not points, but something else So the the most active users for example the the the users that Take the most time on the platform because remember this is for engaging the platform not really the learning process itself We wanted to to compare them to to to make them like some kind of big brothers and sisters like I Know nothing a competitive way like saying okay This is the people that knows more about the course that Interacts most with each other something like that So they can be used as a reference for the rest of the users to ask questions to whatever It's the farther. I think we we we at funeral at least have thought of something like that, but again The I have to confess the idea for this was really competitive. So Not not on the initial scope, but again this is a work in progress. I don't think it will be ready soon So if anyone From wherever can make or wants to make any suggestion They are all welcome and we can even work together to achieve something like that Yeah My question is because I'm trying Does competitiveness work and in if so in what settings because in our case like a bit of research that we did showed that It didn't so we dropped it, but is there any specific? Sector area have you tested it and so that it actually like improved engagement or really worked for the learners or there is no data on this I don't have any testing data right now the first sample group we wanted to To apply it to was a university in Spain in Santander, which is part of our network and we wanted to apply it to to the extent of the whole academic year as an as a transversal activities or transversal project for the remember a university so a higher education a course but I don't have any data right now because it's it's I mean it's it's it's not even finished. So no, I'm sorry