Giter Site home page Giter Site logo

mmaulwurff / typist.pk3 Goto Github PK

View Code? Open in Web Editor NEW
22.0 3.0 2.0 2.11 MB

typing tutor mod for GZDoom

Home Page: https://forum.zdoom.org/viewtopic.php?f=43&t=66042

License: GNU General Public License v3.0

Shell 74.80% Python 25.20%
typing mod gzdoom zscript doom heretic

typist.pk3's Introduction

Typist.pk3

YouTube

Typist.pk3 is a mod for Doom engine games that turns them into typing exercises.

There are several lessons, including user-defined lessons.

How To Play

Load it with GZDoom.

There are two game modes: Combat and Exploration. They are switched automatically.

Exploration Mode (blue)

Your familiar mode. You can walk, open doors, turn switches, etc.

Combat Mode (red)

This mode is for fighting enemies. Instead of aiming and shooting, you type answers for your targets. When the answer is ready, press Space or Enter, or hold for continuous fire.

  • press Ctrl+Backspace to erase the whole answer.
  • press Escape to force Exploration mode. After this, you can return to automatic mode switching with Unlock Game Mode key assigned in Typist options.

Because you cannot move normally in Combat mode, the following commands are available:

  • dl - dash to the left,
  • dr - dash to the right,
  • df - dash forward,
  • db - dash backward.
  • rl - reload weapon (if it has reloading).

Commands are configurable.

Key setup

The mod doesn't require any special key setup. However, for smoother experience, it may be worth playing keyboard-only with the following assigned keys:

  • E - move forward
  • S - strafe left
  • D - move backward
  • F - strafe right
  • I - center view
  • J - turn left
  • K - turn around
  • L - turn right

This way, you'll waste no time switching from mouse to keyboard and back, and your fingers are almost at the right typing position!

How To Set Up Custom Text Lesson

  1. Find any text or book in ASCII .txt file (UTF-8 may also work).
  2. If a file is supposed to be in ASCII but actually is not, use grep -P "[^\x00-\x7F]" file.txt to find non-ASCII characters.
  3. Rename text file to typist_custom_text.txt.
  4. Load typist_custom_text.txt with GZDoom alongside Typist.pk3.
  5. Select Custom Text in Typist options menu.

Incompatible Mods

  • Guncaster. Reason: Guncaster reads player input directly from player, so weapon firing cannot be emulated like for other mods. Guncaster support cannot be added without modifications in Guncaster or GZDoom.
  • Guncaster Vindicated. Reason: the same as Guncaster.

Compilation

Actually, you don't need to compile this. The repository contains everything that is needed to run this mod. But if you want to develop Typist.pk3 with maximum comfort, set up the compilation.

Linux

Required tools:

  • Git
  • Bash
  • Python 3
  • pylint3
  • aspell with English (UK) dictionaries
  • ShellCheck
./scripts/build.sh

To run tests:

./scripts/test.sh

(Test script also builds.)

Windows

It may be possible to compile this on Windows. Install Msys or something. You're on your own :)

Software Used

Acknowledgments

Credits

Thanks

typist.pk3's People

Contributors

mmaulwurff avatar paulfioravanti avatar

Stargazers

 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

typist.pk3's Issues

add a question source selector

  • add an integer variable for selecting a question source.
  • add a menu entry for this variable.
  • add SelectedQuestionSource that implements QuestionSource by calling the question source according to the aforementioned variable.
  • add SelectedQuestionSource to supervisor.
  • reset supervisor on question source change.

add a shortcut to erase all text

Candidate shortcut: Ctrl-Backspace.

To do:

  • add isCtrl parameter and CTRL_BACKSPACE type to Character class.
  • add handling of this new type to PlayerInput class.

add vertical aiming

To do:

  • Rename AimerImpl to HorizontalAimer.
  • Add AimerHub class that implements Aimer interrface by accumulating and applying several aimers.
  • Add VerticalAimer class that implements Aimer interface by aiming vertically. Vertical aim is disabled if vertical autoaim is max.
  • Add AimerHub and VerticalAimer to Supervisor.

projectiles design

To do:

  • remove shootable projectiles
  • slow down projectiles that fly towards the player (take code from danger-o-meter)
  • add dash commands (right + left)
  • add crouch command
  • add Jarewill to bug reporter list

Gameplay test: E2M8 must be finishable and fun.

add Command Dispatcher

To do:

  • Add Activatable interface with activate() and getCommands() methods.
  • Add Activatables class that wraps an array of Activatable.
  • Add Command Dispatcher class that inherits Activatable interface and takes Activatables and AnswerSource as a dependency. Algorithm: activate(): get an answer, activate all Activatable that match the command with answer; getCommands(): collect commands from all Activatables.
  • Add Command Dispatcher to Supervisor.

Create a design document

To do:

T1. Create a list of project goals.
T2. Based on T1, create a list of project features that help to reach the project goals.
T3. Make descriptions for the features.
T4. Describe the supposed feature implementations.

add GUI panel

it should display:

  • game mode (explore/combat)
  • answer
  • list of available commands

To do:

  • Add Views class that implements View interface and wraps an array of View.
  • Add Panel class that implements View interface and takes ModeSource, Activatable, and AnswerSource as dependencies.

add highlight of right/wrong characters in answers

To do:

  • rename Screen class to TargetOverlay.
  • add String getMatchedAnswer() method to Question class. For Match class, this method returns answer colored according to the question string.
  • print getMatchedAnswer() result instead of Answer in TargetOverlay.

make missiles shootable

To do:

  • Create GameTweaks class, put it into Supervisor. Wire WorldThingSpawned with GameTweaks.
  • Make missiles shootable.
  • Make missiles detected by TargetRadar.
  • Set missile health to 1.
  • Make missiles slower (scale velocity).

sort target widgets by distance

To do:

  • Add SorterByDistance class that implements TargetWidgetSource and takes TargetWidgetSource and OriginSource as dependencies. It sorts TargetWidgets from source by distance to origin.
  • Put SorterByDistance to Supervisor.

add damage multiplier

To do:

  • wire PlayerSpawned to GameTweaks class.
  • port player damage multiplier code from Ultimate Custom Doom.

make buddha optional

To do:

  • add a server cvar
  • add an option to menudef
  • use that cvar to game config class

plan 0.5

To do:

  • define the set of issues that will be completed in version 0.5.
  • add to do lists to issues.

plan 0.4

  • create issues.
  • Inspect class diagram, remove unnecessary parts.
  • write a to do list for each issue.

add top 1000 Russian words

To do:

  • add support for Cyrillic input
  • find 1000 top used Russian words
  • filter words
  • add a string challenge

add Score

ZikShadow » 07 Oct 2019 23:27:

A possible alternative, a score kind of deal with the health. Something like 100HP having the highest multiplier everytime you kill something and 1 having the least, encouraging players to do their best if they want the highest numbers but not getting them frustrated due to not being able to do complex dodges and stuff. Though I guess you have to get a score implementation done in the first place to possibly do any of that. Just throwing ideas for now, I suppose.

add a command to force leave combat mode

To do:

  • Add ModeSources class that wraps an array of ModeSource.
  • Add ModeCascade class that inherits from ModeSource and takes ModeSources as a dependency. Algorithm: iterate over ModeSources, take first mode that is not MODE_NONE.
  • Add ModeStorage interface that inherits ModeSource interface and adds setMode() method.
  • Add SettableMode class that implements ModeStorage.
  • Add ModeSwitcher class that implements Activatable interface and takes ModeStorage as a dependency.
  • Add ModeSwitcher to Supervisor.

add word-list question source

To do:

  • Add a lump with words.
  • Add StringSet class that implements Question Source by reading words from the lump.

increase readability of widgets

  • try bigger text. Text size should be customizable.
  • try slower movement on screen (widget position smoothing closer to original position).
  • make a border consistently colored (unlike build-in DrawFrame).
  • make sure there is a margin between a border and text.

make a video

To do:

  • Select a game/mod to load with Typist.
  • Record a video.
  • Upload the video to YouTube, put it in Typist playlist.

add Zen mode

infinite ammo
invulnerability
no health/ammo pickups
no HUD
no score

make an option for shootable projectiles

Shootable projectiles:
Pros:

  • a way to avoid damage.
  • cool.

Cons:

  • not everything that is detected as a projectile is a projectile. This may lead to aiming at wrong things and blocking;
  • projectile targets (closer) are drawn over monster targets, hard to target monster.

Currently shootable projectiles are present in the code, but are disabled.

Also, projectiles may by slowed down depending on if they are close to the player.
Projectiles may be given shorter questions.

add options menu

To do:

  • Add menudef lump with Typist.pk3 OptionsMenu.
  • Add language.enu lump with strings.
  • Make a script that puts Typist.pk3 version to menu title.

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.