| 1 |
# Green Room |
| 2 |
# A room for playing out moves against a chromakey background |
| 3 |
# Recommended viewing size: |
| 4 |
# |--------------------------------------------------------------------------| |
| 5 |
|
| 6 |
var int chose_yes = 0; |
| 7 |
var int countdown = 10; |
| 8 |
|
| 9 |
func void main(void) |
| 10 |
{ |
| 11 |
# Set up environment |
| 12 |
sky_show_sky = 0; # hide skybox |
| 13 |
gs_show_ui = 0; # do not show UI |
| 14 |
m3_clear_color = 38400; # set background color to green |
| 15 |
#gs_show_particles = 0; # hide particles |
| 16 |
ui_suppress_prompt = 1; # turn off objective/help prompts |
| 17 |
|
| 18 |
fork DrawMainMenu(); |
| 19 |
fork WatchForYes(); |
| 20 |
} |
| 21 |
|
| 22 |
# Allow user to choose an anim showcase or just free-run |
| 23 |
func void DrawMainMenu(void) |
| 24 |
{ |
| 25 |
# XXX - also allow third option of fixed camera setup within free-run mode so user can perform his own moves from a fixed vantage point |
| 26 |
dmsg("Welcome to Green Room"); |
| 27 |
dmsg("Want to run the animation showcase?"); |
| 28 |
dmsg("Press [jump] for 'yes' in the next"); |
| 29 |
dmsg("10 seconds. After that, you can"); |
| 30 |
dmsg("just free-run..."); |
| 31 |
sleep(300); |
| 32 |
countdown = 5; |
| 33 |
fork CountDown(); |
| 34 |
} |
| 35 |
|
| 36 |
# Count down while user has not made a choice in WatchForYes() yet |
| 37 |
func void CountDown(void) |
| 38 |
{ |
| 39 |
if (countdown eq 5) |
| 40 |
dmsg("5..."); |
| 41 |
else if (countdown eq 4) |
| 42 |
dmsg("4..."); |
| 43 |
else if (countdown eq 3) |
| 44 |
dmsg("3..."); |
| 45 |
else if (countdown eq 2) |
| 46 |
dmsg("2..."); |
| 47 |
else if (countdown eq 1) |
| 48 |
dmsg("1..."); |
| 49 |
if ((countdown > 0) and (chose_yes eq 0)) |
| 50 |
{ |
| 51 |
sleep(60); |
| 52 |
countdown = countdown - 1; |
| 53 |
fork CountDown(); |
| 54 |
} |
| 55 |
else |
| 56 |
{ |
| 57 |
dmsg(" "); |
| 58 |
dmsg(" "); |
| 59 |
dmsg(" "); |
| 60 |
dmsg(" "); |
| 61 |
dmsg(" "); |
| 62 |
} |
| 63 |
} |
| 64 |
|
| 65 |
# Allow user to jump to choose to run an anim showcase |
| 66 |
func void WatchForYes(void) |
| 67 |
{ |
| 68 |
chr_wait_animtype(0, jump); |
| 69 |
if ((countdown > 0) and (chose_yes eq 0)) |
| 70 |
{ |
| 71 |
chose_yes = 1; |
| 72 |
chr_animate(0, KONOKOact_yes1); |
| 73 |
sleep(20); |
| 74 |
DrawShowcaseMenu(); |
| 75 |
} |
| 76 |
} |
| 77 |
|
| 78 |
# XXX - break this out into functions for the menus described within |
| 79 |
func void DrawShowcaseMenu(void) |
| 80 |
{ |
| 81 |
# XXX - faction menu: pick faction |
| 82 |
# XXX - 1. Konoko |
| 83 |
# XXX - 2. Syndicate |
| 84 |
# XXX - 3. TCTF |
| 85 |
# XXX - 4. Civilian |
| 86 |
# XXX - 5. Exit (free-run mode) |
| 87 |
|
| 88 |
# XXX - MELE menu: where needed, pick specific MELE ID under above faction -- see "Melee IDs by faction.rtf"; print name of MELE ID once it is selected |
| 89 |
|
| 90 |
# XXX - character variant menu: allow user to pick exact appearance of char |
| 91 |
|
| 92 |
# XXX - angle menu: allow user to pick angle to view char from -- at least offer left side and right side, but other options would be front, rear, top, 3/4 left side and 3/4 right side |
| 93 |
# XXX - consider making these choices "checkboxes", i.e. you can choose to see moves from multiple angles, which will play the move successively from each angle |
| 94 |
|
| 95 |
# XXX - anim type menu: pick type -- attack, victim (hit, thrown, blownup, KOed, etc.), maneuver (dodge, jump, walk, run, crouch-walk, etc.) |
| 96 |
|
| 97 |
# XXX - variant menu: pick anim variant -- melee, RIF or PIS |
| 98 |
|
| 99 |
# XXX - change room color to a preset value that is suitable for this class, taking into account colors on char and colors of their particle effects |
| 100 |
|
| 101 |
# XXX - final menu: change color or start |
| 102 |
# XXX - 1. Change Color (leads to color menu) |
| 103 |
# XXX - 2. Run Showcase |
| 104 |
|
| 105 |
# XXX - color menu (if chosen) |
| 106 |
# XXX - 1. Green |
| 107 |
# XXX - 2. Blue |
| 108 |
# XXX - 3. Black |
| 109 |
# XXX - 4. White |
| 110 |
# XXX - 5. Run Showcase |
| 111 |
|
| 112 |
PrepKonoko(); |
| 113 |
|
| 114 |
# XXX - call specific RunShowcase_XXX() function |
| 115 |
} |
| 116 |
|
| 117 |
# Set up Konoko for the showcase |
| 118 |
func void PrepKonoko(void) |
| 119 |
{ |
| 120 |
# Make Konoko invisible |
| 121 |
chr_mini_me = 1; |
| 122 |
chr_mini_me_amount = 0.0; |
| 123 |
# XXX - pin Konoko so that user input doesn't have a chance of moving the camera or causing a sound effect to play |
| 124 |
} |
| 125 |
|
| 126 |
# XXX - make 45 MELE-specific functions named like this, where "ID" = MELE ID |
| 127 |
func void RunShowcase_ID(void) |
| 128 |
{ |
| 129 |
# XXX - spawn chosen char and set focus to them or point camera at their spawn flag |
| 130 |
# XXX - run through all anims for this combination of MELE ID, anim type (the attack / victim / maneuver option) and TRAC variant (COM / PIS / RIF) |
| 131 |
# XXX - note: use table on https://wiki.oni2.net/Combat_moves as reference for TRAM names, etc. |
| 132 |
# XXX - step 1: print each anim name (e.g. "Spinning Suplex"), TRAM name, and the input to trigger the move in-game |
| 133 |
# XXX - step 2: clear this text after one second and play the anim |
| 134 |
# XXX - step 3: wait some time after anim finishes for any particle effects to subside |
| 135 |
# XXX - step 4: move char back to spawn flag and reset their facing |
| 136 |
# XXX - note: put pistol or rifle in hand for PIS/RIF anims |
| 137 |
# XXX - note: spawn dummy for throw anims so char can throw him or be thrown by him |
| 138 |
# XXX - note: knock down char before playing getup anims |
| 139 |
} |