Dynamic Updates for Videogames Seamless and Transparent Integration of Content and Engine Update in Online and Connected Videogames by Thomas Bousquet & Edouard Kieffer
Motivations & Existings Products However none of them provides transparent update of both content and code
Architecture & Technologies Technologies : SOA Server (JBoss application) Back-end : Hibernate, Spring, XFire Front End : Flex Client JNotify, Webservice
Architecture: Back-End
Architecture: Client API
Dynamic Classes: How Do We Update?
Dynamic Classes: Three Suspects "Automagically" Managed Leave the migration process to us! Migrate to new version using field reflection The dynamic class needs to implement an interface Custom Dynamic Class You control the migration process May also apply the automatic process beforehand The dynamic class needs to implement "ICustomMigration" Implicit Dynamic Class The most flexible implementation Doesn't need to conform to an interface Need only extend ImplicitDynamicClass ... But rather ugly for now
Dynamic Classes: Back – Client Interactions Two channels Client may request through RMI Data push emulated by JMS On initial connection, client requests up- to-date report of dynamic classes If an administrator changes current class revisions, client notified through JMS
Content Update – Main Concept
Content Update – 1 Interface, 2 Classes IupdatableResource Provide renewing method for considered resource New implementation for each 'type' of resource (texture, model, sound, XML file) ResourceListener Listen to a particular file Contains a list of registered IUpdatableResource New implementation for each 'type' of resource (texture, model, sound, XML file) UpdatableResource Manager Manage the listeners and act as a middleman for registering IUpdatableResource New class inheriting from this for each new application
Demonstration Time ! Proof of concept of the applicability of our framework to existing solution Java Monkey Engine AirCarrier showcase application What we will demonstrate Administration Interface Dynamic texture update Dynamic update of AI Manager Behavior
Evaluation Dynamic code : Dynamic content constant overhead for calling dynamic : calls 6 to 8 times slower => only use on computationnaly intensive methods Dynamic content Disk access and content renewal creates 'acceptable' stutter.
Limitation of this demo & extension With more time and/or a better architecture: Use AMF instead of web services for back / front communication Describe ressources used by object with XML file and listen to this files. Extend the existing resource manager to integrate smart cache management
What happened to C++ ? C++ is still the leading language for videogame application Too complicated for the scope of this project (lack of existing framework) Advantages : Function parameters as reference SWIG enables to automatically create wrapper for other languages ranging from Java to Python, Lisp and C#
Extensions - Code Features : Tools : Plugin eclipse to enable traditionnal function call for dynamic code EJB 3.0 (abstraction of persistence)
Extensions – Content Features : Tools : Intercept message containing data written from memory to disk to suppress disk access. Tools : Model Oriented Programming : provide tools to create implementation of IUpdatableResource and IresourceListener at once.
Conclusion Features : Tools : Intercept message containing data written from memory to disk to suppress disk access. Tools : Model Oriented Programming : provide tools to create implementation of IUpdatableResource and IresourceListener at once.
Thanks for your attention QUESTIONS ?