Giter VIP home page Giter VIP logo

imprimis's People

Contributors

10010101001 avatar b-sharman avatar dependabot[bot] avatar duskhorn avatar no-lex avatar theegghead27 avatar

Stargazers

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

Watchers

 avatar

imprimis's Issues

Remove remnants of local server

With the game pivoting to having the server managed by a standalone application, keeping singleplayer code (which does not have to connect to any server at all) is a recipe for having to maintain separate, nearly identical codebases. No client functionality should be lost by instead having a dedicated server always spooled up on 127.0.0.1 to takes the local server's place.

Remove melee attacks

Melee is useless in gameplay and unwieldy to use, so the game should drop it.

Add CI for Windows Builds

Is your feature request related to a problem? Please describe.
The Windows version of Imprimis has previously been prone to being unbuildable due to the solution project not being maintained properly. Adding continuous integration will make it easier to find and fix Windows build errors.

Describe the solution you'd like
Using Github CI, Windows builds can be automated

Describe alternatives you've considered
Manually building has been what Imprimis has historically done, but it is prone to human error and wastes valuable contributor time.
Other CI providers tend to not have Windows options available or cost a decent amount.

Additional context
N/A

Client may become unable to deal damage

Player may suddenly find themselves unable to do damage despite hitting opponents.
It appears to be a problem with networking, the solution is to restart the game.

Remove the notepad

The notepad/text editor is a bloated feature that has no place in a project whose goal is to simplify and concentrate the building blocks of a game.

It and the files that create it should be destroyed.

HUD weapon indicator persists after spectating

Describe the issue
After spectating, for example, choosing the "Spectate" button from the main menu during a game, the weapon indicator in the HUD's bottom-right does not disappear.
Screenshot from 2021-03-21 14-56-19

Expected behavior
The weapon indicator should be hidden while spectating because the spectator is not holding any weapons. Alternatively, it could show the currently selected weapon when the spectating mode is set to follow a specific player.

Engineer can enter geometry while building.

The engineer is able to partially or fully trap himself within newly built geometry.

In this example, on a new map, I was able to completely enter the mesh with first person camera by building just three cubes while walking towards them:
2020-12-20_09 52 02

Partially embedding the player character in the wall does not allow walking further into it, but the model/weapon nonetheless clips into it.

It looks like the game so far only relies on the weapon's push-back to prevent this.
It should instead check whether the player is standing where the new cube will appear in relation to the player, either pushing them further, refusing to build, or building it up as if someone was extruding the face (animated to provide a visual cue for the pushing effect, or simply stopping when the player is reached leaving behind a partial cube).

CI dependencies are out of date

Describe the issue
GitHub Actions is currently emitting warnings about outdated dependencies using Node 12 instead of 16, and pending sunsetting of a feature a dependency seems to use.

Expected behavior
We should be regularly updating our actions dependencies.

Important Information:
Dependabot has a feature for this, perhaps we can automate CI updates?

Improving readability (contrast) of the UI

Since the game's current theme means rather bright colors on the maps, the white UI can be hard to read at a glance. To improve this, we could:

  • put drop shadows behind all the elements,

    • alternatively put a simple outline around them;
      dropsh1
      dropsh2
  • add gradient bars (I personally find this option to be least intrusive),

    • here shown only on the bottom, but a matching or even symmetrical bar on top may be desirable as well (for chat and system messages, this would also allow a redesign of the score bar);
      gradient bar1
      gradient bar2
  • add permanent vignette, and only color it red when receiving damage,

    • currently only a red vignette appears briefly after receiving damage.
      vignette1
      vignette2

How exactly they should look is up for debate (sizing, gamma…).
Apologies for small glitches in the images, I didn't notice them when working in a smaller window.

Material and texturing issues on tdm1e

During today's playtest I discovered an incontinuity in water material layer (in addition to the inside of geometry lacking textures) on the tdm1e map.
2021-02-28_23 28 47
2021-02-28_23 39 47

Add CI for Linux Builds

Is your feature request related to a problem? Please describe.
The Linux platform should receive the same amount of continuous integration build support as the Windows platform, preferably hosted on the same platform (GitHub Actions)

Describe the solution you'd like
Add a build workflow for Linux builds

Describe alternatives you've considered
Semaphore CI currently exists, but build artifacts are not made available afterwards, reducing the convenience of this feature.

Additional context
#47 and #48 are both my fault lol

Update imprimis.bat

Describe the issue
The launcher script for Imprimis on Windows refers to the executable as tesseract.exe, even though a new build of the game produces imprimis.exe.

Expected behavior
The script should launch the executable under its new name.

Important Information:

  • OS: Windows 10

Less annoying hit sound

I replaced the clipped-to-hell hit sound, but I think its harmonics are too strong and its fundamental frequency is too high. A replacement would make it easier on the ears while making hits obvious.

Snaps do not have a working home directory

Due to the inability to cd into the execution directory, as a workaround, snaps must use the snap directory as their home directory for now. Because snaps are read only, nobody can actually save settings or screenshots if they are using the snap version of the game. The solution to this is to allow setting a media and home directory separately, rather than the hardcoded path currently used of .

Minor README discrepancy

Describe the issue
In the installation instructions, the user is told to clone the libprimis repository when it appears that cloning the imprimis repository is what is actually intended.

Expected behavior
The provided clone command should refer to the imprimis repository instead.

Important Information:

Weapon overheating mechanic persists after respawn

found in 865d305

Describe the issue
When a player dies with their weapon hot and respawns shortly after, their rate of fire is still inhibited.

How to reproduce

  • Spawn in an empty deathmatch as demo
  • Jump to the top of a structure (so water doesn't interfere)
  • Look down and fire repeatedly until you kill yourself
  • Respawn immediately and try to fire rapidly

Expected behavior
Physically, it does not seem natural for your weapon to retain the characteristics of the previous one, especially since you can often see your ragdoll carrying that weapon, implying you are provided a new one every time you respawn. If this behavior is an intentional gameplay mechanic, perhaps the user should be presented with a different death scheme visualization for consistency.

Heat indicator and general crosshair improvements

Currently there's the normal crosshair, additional hit marker, and a circle to indicate weapon heat. Unfortunately they all look different and the heat indicator is not easily readable.

current state

My suggestion is to:

  • make the hit marker (diagonal lines) thinner to match the reticle
    • only retain the inner lines of it (close to the center)
  • repurpose the outer lines as overheating indicators (possibly adding horizontal and vertical ones in a circle or square as well for a total of eight
    • have them show up and/or change color starting from the bottom one clockwise
    • firing is impossible when they're all shown on screen
    • if the weapon needs to cool down before firing, only half of each bar would be removed until it's possible to fire again (that could be calibrated at the halfway point for example)
      • other possible mechanisms include rendering the bars white and sharply turning red once the weapon is too hot, etc. It's up for discussion
    • the bars may disappear faster the more of them is shown
      • in real world higher temperature delta results in faster heat transfer
      • this'll increase granularity for higher heat values where it's more important for the player

Remove auth system

The current authentication system has numerous architectural flaws and needs to be addressed from scratch. This change includes aspects of the master, client, and server sides of the program.

Waypoint AI Segmentation Fault

Occurs when bots begin to move.

Imprimis vers.:
commit 30d787e

Libprimis vers.:
commit a1033bb8e7686e31571b00edc3a8407c25bf8219

gdb output:
Starting program: /home/doudmg/imprimis/native_client
[Thread debugging using libthread_db enabled]
Using host libthread_db library "/lib/x86_64-linux-gnu/libthread_db.so.1".
[New Thread 0x7ffff5a32640 (LWP 14729)]
[New Thread 0x7fffe98c8640 (LWP 14732)]
[New Thread 0x7fffe8f86640 (LWP 14733)]
[New Thread 0x7fffe3fff640 (LWP 14734)]
[New Thread 0x7fffe37fe640 (LWP 14735)]
[New Thread 0x7fffe2ffd640 (LWP 14736)]
[Thread 0x7fffe2ffd640 (LWP 14736) exited]
[New Thread 0x7fffe2ffd640 (LWP 14737)]
[Thread 0x7fffe2ffd640 (LWP 14737) exited]
[New Thread 0x7fffe8185640 (LWP 14739)]
[New Thread 0x7fffe2ffd640 (LWP 14740)]
[Thread 0x7fffe2ffd640 (LWP 14740) exited]
[New Thread 0x7fffe2ffd640 (LWP 14741)]
[New Thread 0x7fffe21f9640 (LWP 14742)]
[Thread 0x7fffe8185640 (LWP 14739) exited]
[New Thread 0x7fffcffff640 (LWP 14743)]
[New Thread 0x7fffcf7fe640 (LWP 14744)]
[New Thread 0x7fffceffd640 (LWP 14745)]
[New Thread 0x7fffce7fc640 (LWP 14746)]
[New Thread 0x7fffcdffb640 (LWP 14747)]
[New Thread 0x7fffcd7fa640 (LWP 14748)]
[New Thread 0x7fffccff9640 (LWP 14749)]
[New Thread 0x7fffaffff640 (LWP 14750)]
[New Thread 0x7fffaf7fe640 (LWP 14751)]
[New Thread 0x7fffaeffd640 (LWP 14752)]
[New Thread 0x7fffae3fc640 (LWP 14761)]

Thread 1 "native_client" received signal SIGSEGV, Segmentation fault.
0x00005555555c1cd0 in ai::waypointai::hasrange(gameent*, int) ()

System information:
AMD® Ryzen 7 5825u with radeon graphics × 16
RENOIR (renoir, LLVM 15.0.6, DRM 3.42, 5.15.0-60-generic)
Ubuntu 22.04.1 LTS 64-bit
Gnome vers. 42.5
Wayland
Dell Inc. Inspiron 14 7425 2-in-1 16.0 GiB

Remove obsolete UI/UX for removed entities

Four entities have been removed since the project forked from Tesseract, and three .cfg files need to be updated to no longer show dialogs for these obsolete entities.

Line numbers were created as of commit 9246716.
Keep in mind that if you delete lines, the subsequent line numbers will be inaccurate, so it would be advisable to work from the bottom of each file up to the top.

  • default.cfg
    • Remove line 66, which binds r to drop the flag
  • fkey.cfg
    • Delete code for each of these entities (line numbers provided in parentheses):
      • jumppad (28, 124–157)
      • teleport and teledest (31–32, 173–211)
      • flag(38, 39)
    • Remove these names from looplist call (53)
  • stedit.cfg
    • Remove lines 42 and 43 which reference the deleted entities
    • Remove teledest from line 150
    • Remove the corresponding 0 in line 151

Remove remnants of item code

The game does not have real support for on-world items, so the remnants of code (kept around from the engine's legacy as an arena shooter platform) implementing world entities no longer need to be there. The realtime modification of the world makes the existing support untenable, anyways.

Functions to remove include:

entities.cpp: spawnitems() putitems()
ai.cpp itemspawned() dointerest()
cserver.cpp canspawnitem()

game::spawnbouncer takes an unused `vec` for velocity

The function game::spawnbouncer takes a vector vel which presumably encodes velocity, but it doesn't get used for anything. The intended purpose of this argument should be found if possible, but if not, the argument should be removed to prevent confusion.

Convert AI code to OOP paradigm

The AI code is an ideal choice for object orientation, as its functions are only used by a limited part of the program (making the bot do bot things) and is used in multiple instantiations (one AI for each bot).

Players outside the map are invisible

Players who leave the playable area (most notably by flying out of it using a parachute) become invisible while still being able to attack.
Possible solutions include making an invisible wall on the map's perimeter, as well as making the water area much larger (that is already planned for other maps).

Flatpak build dependencies can be cached

Is your feature request related to a problem? Please describe.
As of right now, on every iteration of the CI flow, the flatpak builder has to re-download and re-build all dependencies, including SDL and GLEW. Due to the fact that we are not frequently updating these libraries, we are wasting compile time on cacheable artifacts.

Describe the solution you'd like
We can have GitHub actions cache flatpak build artifacts, so libraries can be reused.

Describe alternatives you've considered
None

Additional context
Sorry for forgetting to file an issue until after it was done - I had been pondering this for a few months but only got around to implementing just now

Engineer gameplay improvements.

As-is, the engineer does not propose very interesting or enjoyable gameplay. In particular:

It's quite hard to build walls properly quickly, especially from cover. My suggestion would be to, instead of just gluing a cube to the face hit, have it follow some simple physics-like rules, such as:

  • when a wall is hit the cube would "climb" one block in the direction it was flying (so the player does not have to aim on the top face);
  • otherwise falls down one block if there's resting ground available there.
    Those rules would make it easy to quickly build walls for cover aiming roughly at constant height, but not interfere with e.g. building bridges.

The weapon does not seem to affect enemies. If it's not supposed to have actual damage, I'd suggest knocking enemies back (perhaps causing damage if they hit a wall).

Weapon effects do not deactivate on death

Describe the issue
After a user dies with the engineer Block Layer equipped, a wireframe cube still appears where the camera is "aimed."
image

Expected behavior
The game should not display effects for a weapon that cannot be used (in this case because the player is dead).

Important Information:

  • OS: Void Linux
  • Commit hash [further investigation needed]

Visibility suffers on lowest settings.

For example here it's impossible to guess the geometry of the wall without any depth information, e.g. as provided by ambient occlusion.

Solution might be to enforce certain settings as the lowest.

'findplayerspawn' was not declared in this scope

Describe the issue
Upon compilation using make, it fails with the following:

game/game.h: In member function 'virtual void game::clientmode::pickspawn(gameent*)':
game/game.h:791:46: error: 'findplayerspawn' was not declared in this scope
  791 |         virtual void pickspawn(gameent *d) { findplayerspawn(d, -1, modecheck(gamemode, Mode_Team) ? d->team : 0); }
      |                                              ^~~~~~~~~~~~~~~
In file included from game/cserver.cpp:1:
game/game.h: In member function 'virtual void game::clientmode::pickspawn(gameent*)':
game/game.h:791:46: error: 'findplayerspawn' was not declared in this scope
  791 |         virtual void pickspawn(gameent *d) { findplayerspawn(d, -1, modecheck(gamemode, Mode_Team) ? d->team : 0); }
      |                                              ^~~~~~~~~~~~~~~
In file included from game/edit.cpp:1:
game/game.h: In member function 'virtual void game::clientmode::pickspawn(gameent*)':
game/game.h:791:46: error: 'findplayerspawn' was not declared in this scope
  791 |         virtual void pickspawn(gameent *d) { findplayerspawn(d, -1, modecheck(gamemode, Mode_Team) ? d->team : 0); }
      |                                              ^~~~~~~~~~~~~~~
In file included from game/client.cpp:3:
game/game.h: In member function 'virtual void game::clientmode::pickspawn(gameent*)':
game/game.h:791:46: error: 'findplayerspawn' was not declared in this scope
  791 |         virtual void pickspawn(gameent *d) { findplayerspawn(d, -1, modecheck(gamemode, Mode_Team) ? d->team : 0); }
      |                                              ^~~~~~~~~~~~~~~

Inspecting the code, it seems like the function is declared in "entities.cpp" but not added to the correct header files, thus causing the error.
I'd fix this myself but I have no idea what to touch

Important Information:

  • OS: Void Linux (btw)
  • commit: current Head in master branch

Remove magic numbers in Cubescript UIs

The current UI system utilizes many magic constants in its padding and object sizes which should be standardized to modifiable constants. Using proper constants for this behavior should make it possible to clearly standardize UI forms and make uniform UX design simpler.

Alternate language support

One of the ways that Imprimis can reach a broader audience is by having support for multiple languages in its UIs and interfaces.

There are two main distinct parts of the game that need to be handled separately, and they are as follows:

  • The CubeScript based UIs, which needs:

    • A list of aliases with values for each language, in individual files
    • All inline strings to be replaced with aliases
    • A UI menu for changing locale
    • Saving of locale options to config
  • The C++ based console interfaces, which needs:

    • A list of CubeScript string var builtins corresponding to messages sent to players via the console
    • A list of alias redefinitions for each language, in individual files

In the long term, revisions to tessfont may be needed to expand language support beyond the Latin-based alphabets currently supported. However, without this, it is still possible to add support for most Romance and Germanic languages.

Crash when pasting geometry in edit mode

How to reproduce

  1. Join the Imprimis editing server and enter edit mode.
  2. Make a selection with the mouse.
  3. Press c to copy it.
  4. Press v to paste the geometry.

Game crashes and console says:

inconsistent msg size for 45 (14 != 15)

This appears to come from the following:

imprimis/game/gameclient.cpp

Lines 1177 to 1180 in 2af7aa8

if(msgsize && num!=msgsize)
{
fatal("inconsistent msg size for %d (%d != %d)", type, num, msgsize);
}

Expected behavior
Whatever geometry was in the selection when copying should be duplicated in the selection when pasting.

Important Information:

  • OS: Arch Linux with kernel 5.18.1.arch1-1 and nvidia 515.43.04-7
  • Commit hash: 2af7aa8

Update Visual Studio Solution

Describe the issue
For a long time, the Visual Studio solution file has failed to build due to the fact that many files were not registered as source code files.

Expected behavior
The files should be registered in the solution.

Important Information:

  • OS: Windows 10
  • Commit hash multiple

Weapon recoil animation can play without the weapon actually firing

Describe the issue
The weapon recoil animation seems to be played whenever the attack button is pressed, not whenever the weapon actually shoots. This leads to visual inconsistency and even confusion if playing without sound.

How to reproduce

  • Use any weapon until it overheats (demo is the most noticeable)
  • Click/press whatever attack button you have bound as fast as you can
  • The weapon fires at the correct rate, but not the animation

Expected behavior
Recoil animation only plays when the weapon fires.

could reproduce on 865d305

Client drops when switching teletypewriter terminals

When switching away from the standard display window to another teletypewriter, the game times out and disconnects. This may be caused by the networking update code being tied to the refresh rate, which is not happening because the X environment is not being shown.

This is an incredibly niche issue and should affect almost nobody, since using the teletypewriters is fairly uncommon and usually completely avoidable.
Of course, since only Linux installations even have teletypewriter terminals, this issue only affects Linux users.

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.