Giter Site home page Giter Site logo

jake2's Introduction

  • ๐Ÿ‘‹ Hi, Iโ€™m @demoth
  • ๐Ÿ‘€ Iโ€™m interested in many things, including software engineering, game development, open source games, language learning, DIY, mechanical keyboards, etc...
  • ๐ŸŒฑ Iโ€™m currently learning cloud computing, machine learning and Svenska language
  • ๐Ÿ’ž๏ธ Iโ€™m looking to collaborate on the Jake2 project
  • ๐Ÿ“ซ You can reach me in discord: demoth, email: [email protected]

jake2's People

Contributors

cwei avatar demoth avatar denolia avatar hoz avatar kenrussell avatar samoylovfp avatar zackidalli avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar

jake2's Issues

Create thin client

create a application wrapper around client module (without game or server modules) that can connect to other servers

Move to nifty-gui

Replace existing ui code (the biggest class in project) with nifty-gui library

Create classes for network commands [Server] [Part1]

now network commands are constructed and parsed piece by piece on both sides
jake2.qcommon.network.NetworkCommands
create classes that can be serialized/deserialized easily from bytestream

without svc_spawnbaseline and svc_packetentities

Split mod (game) logic into pluggable minimods

Quake 2 mods are developed and distributed as one big chunk of logic, combining monster/weapon/item/coop/deathmatch rules, etc..

There are however many parts of the mod that don't interact with each other (like monster logic and weapon logic) and therefore could be isolated. Both code and resources.

This is just and idea and need more refinement

Type safe cvars

Implement type safe cvars (enum, bool, string, int, float) to avoid unnecessary casting and potential bugs

  • description

Support mods

Mods (without game.dll) should be supported via +game command

Get rid of linked lists

Linked lists are all over the place (look for next member of the same type)
For objects that have a unique id move to hashmap, and arraylists for everything else

MacOS, openJDK 13, couldn't exec default.cfg, did not execute cmd bind MWHEELUP weapnext

My setup:

^Cbash-3.2$ gradle -v

------------------------------------------------------------
Gradle 6.4
------------------------------------------------------------

Build time:   2020-05-05 19:18:55 UTC
Revision:     42f7c3d0c3066b7b38bd0726760d4881e86fd19f

JVM:          13.0.2 (Oracle Corporation 13.0.2+8)
OS:           Mac OS X 10.15.3 x86_64

The output:

couldn't exec default.cfg
did not execute cmd bind MWHEELUP weapnextdid not execute cmd bind MWHEELDOWN weapprevdid not execute cmd bind w +forwarddid not execute cmd bind s +backdid not execute cmd bind a +moveleftdid not execute cmd bind d +moverightcouldn't exec config.cfg
couldn't exec default.cfg
did not execute cmd bind MWHEELUP weapnextdid not execute cmd bind MWHEELDOWN weapprevdid not execute cmd bind w +forwarddid not execute cmd bind s +backdid not execute cmd bind a +moveleftdid not execute cmd bind d +moverightcouldn't exec config.cfg
did not execute cmd dedicated_start====== Quake2 Initialized ======

Add documentation to each module

What to highlight:

  • each module - add readme with high level description of functionality
  • quake file formats
  • network communication
  • game/server interface

Supertank does not explode after death

For some reason super tank does not call M_Supertank.BossExplode think function at the end of death frame mmove.
here jake2.game.M#M_MoveFrame if monster has a flag Defines.SVF_DEADMONSTER (which it does by the time end frame is reached) neither ai nor think functions are not called

Profile jake2

Run the game though a profiler and see what functionality is taking most cpu time, memory ets.
Do both for server and client

Try GraalVM

Run jake2 on graalvm to check performance improvement.
Try AOT compilation

Rework monster animation code

Move the enormous descriptions of the animation from the source code (for example in M_Soldier.java) into a resource file. For example json?

Upd. 2024: After reviewing of what is done and what is still achievable, it makes sense now to settle on what is already implemented in the scope of the animation rework and if necessary improve later.

The biggest understanding now is that the decision making solution (which was previously tied to the animation and monster logic) can be done outside of the initial scope of this task (moved to Rework monster decision code #109).

New approach:
Animation is controlled with the state machine. Each state is an animation sequence which can either loop or transition to another state. The transition rules govern which transitions are allowed. The character can interact with the game world (or with itself) via events, which are emitted in certain frames (for example sounds and firing projectiles).
An excerpt from the new animation definition:

        AnimationSequence(
            name = "fidget",
            type = StateType.IDLE,
            frames = (1..49).toList(),
            events = mapOf(0 to "sound-fidget"),
            loop = false,
            nextState = "stand"
        ),
        AnimationSequence(
            name="pain",
            type = StateType.PAIN,
            frames = (100..109).toList(),
            events = mapOf(1 to "sound-pain"),
            loop = false,
            nextState = "stand"
        ),

Split edict into compoments

The edict_t class is a junkyard of different fields used for different scenarios. Split into different components (not a full ECS)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.