0% found this document useful (0 votes)
12 views63 pages

C# Game Programming Cookbook For Unity 3D 2nd Edition Jeff W. Murray PDF Download

The document is a promotional listing for the 'C# Game Programming Cookbook for Unity 3D 2nd Edition' by Jeff W. Murray, along with links to various related game programming resources. It includes details about the book's publication, dedication, and a brief overview of its contents, which cover essential programming concepts and practical game development techniques. The document also emphasizes the availability of additional learning materials for C# and Unity 3D programming.

Uploaded by

zgkuwxo6842
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
12 views63 pages

C# Game Programming Cookbook For Unity 3D 2nd Edition Jeff W. Murray PDF Download

The document is a promotional listing for the 'C# Game Programming Cookbook for Unity 3D 2nd Edition' by Jeff W. Murray, along with links to various related game programming resources. It includes details about the book's publication, dedication, and a brief overview of its contents, which cover essential programming concepts and practical game development techniques. The document also emphasizes the availability of additional learning materials for C# and Unity 3D programming.

Uploaded by

zgkuwxo6842
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 63

C# Game Programming Cookbook for Unity 3D 2nd

Edition Jeff W. Murray download

https://textbookfull.com/product/c-game-programming-cookbook-for-
unity-3d-2nd-edition-jeff-w-murray/

Download full version ebook from https://textbookfull.com


We believe these products will be a great fit for you. Click
the link to download now, or visit textbookfull.com
to discover even more!

Learning C# programming with Unity 3D Alex Okita

https://textbookfull.com/product/learning-c-programming-with-
unity-3d-alex-okita/

Game Programming in C Creating 3D Games Creating 3D


Games Sanjay Madhav

https://textbookfull.com/product/game-programming-in-c-
creating-3d-games-creating-3d-games-sanjay-madhav/

Unity Game Development: Programming C# in Unity Engine


, a guide book for beginners - 1nd edition - 2020
Kathleen Peterson

https://textbookfull.com/product/unity-game-development-
programming-c-in-unity-engine-a-guide-book-for-beginners-1nd-
edition-2020-kathleen-peterson/

Unity Game Development Cookbook Essentials for Every


Game 1 / converted Edition Paris Buttfield-Addison

https://textbookfull.com/product/unity-game-development-cookbook-
essentials-for-every-game-1-converted-edition-paris-buttfield-
addison/
3D Game Programming for Kids Create Interactive Worlds
with JavaScript 2nd Edition Chris Strom

https://textbookfull.com/product/3d-game-programming-for-kids-
create-interactive-worlds-with-javascript-2nd-edition-chris-
strom/

Beginning Game AI with Unity: Programming Artificial


Intelligence with C# Sebastiano M. Cossu

https://textbookfull.com/product/beginning-game-ai-with-unity-
programming-artificial-intelligence-with-c-sebastiano-m-cossu/

Developing 2D Games with Unity: Independent Game


Programming with C# 1st Edition Jared Halpern

https://textbookfull.com/product/developing-2d-games-with-unity-
independent-game-programming-with-c-1st-edition-jared-halpern/

Developing 2D Games with Unity: Independent Game


Programming with C# 1st Edition Jared Halpern

https://textbookfull.com/product/developing-2d-games-with-unity-
independent-game-programming-with-c-1st-edition-jared-halpern-2/

3D Game Programming for Kids Create Interactive Worlds


with JavaScript 1st Edition Chris Strom

https://textbookfull.com/product/3d-game-programming-for-kids-
create-interactive-worlds-with-javascript-1st-edition-chris-
strom/
C# Game Programming
Cookbook for Unity 3D
C# Game Programming
Cookbook for Unity 3D
Second Edition

Jeff W. Murray
Second Edition published 2021
by CRC Press
6000 Broken Sound Parkway NW, Suite 300, Boca Raton, FL 33487-2742
and by CRC Press
2 Park Square, Milton Park, Abingdon, Oxon, OX14 4RN
First Edition published by CRC Press 2014
CRC Press is an imprint of Taylor & Francis Group, LLC
© 2021 Taylor & Francis Group, LLC
The right of Jeff W. Murray to be identified as author of this work has been asserted by
him/ in accordance with sections 77 and 78 of the Copyright, Designs and Patents Act
1988.
Reasonable efforts have been made to publish reliable data and information, but the
author and publisher cannot assume responsibility for the validity of all materials or the
consequences of their use. The authors and publishers have attempted to trace the copy-
right holders of all material reproduced in this publication and apologize to copyright
holders if permission to publish in this form has not been obtained. If any copyright
material has not been acknowledged please write and let us know so we may rectify in any
future reprint.
Except as permitted under U.S. Copyright Law, no part of this book may be reprinted,
reproduced, transmitted, or utilized in any form by any electronic, mechanical, or other
means, now known or hereafter invented, including photocopying, microfilming, and
recording, or in any information storage or retrieval system, without written permission
from the publishers.
For permission to photocopy or use material electronically from this work, access www.
copyright.com or contact the Copyright Clearance Center, Inc. (CCC), 222 Rosewood
Drive, Danvers, MA 01923, 978-750-8400. For works that are not available on CCC please
contact [email protected]
Trademark notice: Product or corporate names may be trademarks or registered trade-
marks and are used only for identification and explanation without intent to infringe.
ISBN: 978-0-367-32170-3 (hbk)
ISBN: 978-0-367-32164-2 (pbk)
ISBN: 978-0-429-31713-2 (ebk)
Typeset in Minion
by SPi Global, India
This book is dedicated to my
amazing wife, Tori, and to
my boys, Ethan and William.
Boys, be nice to the cat and
the cat will be nice to you!
Contents

Acknowledgments xiii
Introduction xv
Prerequisites xvii

1. Making Games in a Modular Way 1


1.1 Important Programming Concepts . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1
1.1.1 Manager and Controller Scripts . . . . . . . . . . . . . . . . . . . . . . . 1
1.1.1.1 Managers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1
1.1.1.2 Controllers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .1
1.1.1.3 Communication between Classes . . . . . . . . . . . 2
1.1.1.4 Public Static . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2
1.1.1.5 Private Static . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
1.1.2 The Singleton . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
1.1.2.1 Using the Singleton in Unity . . . . . . . . . . . . . . . . 3
1.1.3 Inheritance . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .3
1.1.4 Coroutines . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
1.1.5 Namespaces . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
1.1.6 Finite State Machines (FSM) . . . . . . . . . . . . . . . . . . . . . . . . . . 7
1.2 Naming Conventions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
1.3 Where to Now? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8

vii
2. Making a 2D Infinite Runner Game 9
2.1 Anatomy of a Unity Project . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
2.2 Open Unity, Then the Example Project for This Chapter . . . . . . . . . . 10
2.2.1 A Few Notes on the Example Project . . . . . . . . . . . . . . . . . .12
2.2.2 Sprites . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
2.2.3 Animation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
2.3 Open the Main Game Scene . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
2.4 The Game Manager . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
2.5 Making Platforms to Run On . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
2.6 Building the Player, RunMan . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
2.6.1 Adding the RunMan Sprite . . . . . . . . . . . . . . . . . . . . . . . . . . 22
2.6.2 Adding Physics and Collisions to RunMan . . . . . . . . . . . . 23
2.6.3 Player Scripts . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
2.6.4 RunMan Sounds . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26
2.6.5 Animating RunMan . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
2.6.6 Scoring . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28
2.7 The Game Loop and the Game Manager . . . . . . . . . . . . . . . . . . . . . . . 28
2.7.1 Game States . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28
2.7.2 The Main Loop of RunMan_GameManager.cs . . . . . . . . . 29
2.7.3 Setting Up the RunMan_Game Manager
Component in the Editor . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
2.8 The Demise of RunMan . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36
2.9 Adding the User Interface . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37
2.9.1 Main Menu Setup . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47

3. Building the Core Game Framework 49


3.1 Controllers and Managers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50
3.1.1 Managers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50
3.1.2 Controllers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50
3.2 Core Framework Scripts . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50
3.2.1 BaseGameManager . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51
3.2.2 ExtendedCustomMonoBehaviour . . . . . . . . . . . . . . . . . . . . 56
3.2.3 BaseCameraController . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58

4. Player Structure 61
4.1 A Player Controller . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62
4.2 Dealing with Input . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63
4.3 User Data . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65
4.3.1 The UserData Class . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66
4.3.2 The BaseUserManager Class . . . . . . . . . . . . . . . . . . . . . . . . . 66
4.4 The BasePlayerStatsController Class . . . . . . . . . . . . . . . . . . . . . . . . . . . 70
4.5 Managing Players . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73

5. Recipes: Common Components 75


5.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75
5.2 AI . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 76

viii Contents
5.3 Camera . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 76
5.3.1 Third-Person Camera . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77
5.3.2 Top-Down Camera . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 80
5.4 Game Control . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 80
5.4.1 GlobalRaceManager . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 80
5.4.2 RaceController . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 80
5.5 Input . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81
5.5.1 Mouse Input . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81
5.6 Level Loading . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 82
5.7 ScriptableObjects . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83
5.7.1 ProfileScriptableObject . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83
5.8 Spawning . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83
5.8.1 A Spawner Component . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84
5.8.2 Trigger Spawning . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88
5.8.3 Timed Spawning . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 89
5.9 User Interface . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91
5.9.1 CanvasManager . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91
5.9.2 ScreenandAudioFader . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91
5.9.3 MenuWithProfiles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91
5.10 Utility . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91
5.10.1 AlignToGround . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91
5.10.2 AutomaticDestroyObject . . . . . . . . . . . . . . . . . . . . . . . . . . . . 93
5.10.3 AutoSpinObject . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 93
5.10.4 FaceCamera . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 94
5.10.5 LookAtCamera . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 94
5.10.6 PretendFriction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 94
5.10.7 TimerClass . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 96
5.10.7.1 Modifying the Timer to Update
Automatically����������������������������������������������������100
5.10.8 WaypointsController . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 100
5.11 Weapons . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 100

6. Player Movement Controllers 101


6.1 Humanoid Character . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 101
6.2 Wheeled Vehicle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 108
6.3 Wheel Alignment . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 115
6.4 2D Platform Character Controller . . . . . . . . . . . . . . . . . . . . . . . . . . . . 118

7. Weapon Systems 123


7.1 Building the Scripts . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 123
7.1.1 The BaseWeaponController Class . . . . . . . . . . . . . . . . . . . 124
7.1.2 BaseWeaponScript . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 130
7.1.3 Switching between Weapons . . . . . . . . . . . . . . . . . . . . . . . . 133

8. Waypoints Manager 137


8.1 Waypoint System . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 137

Contents ix
9. Recipe: Sound and Audio 145
9.1 Audio Mixers and Mixing Audio in Unity . . . . . . . . . . . . . . . . . . . . . 145
9.1.1 Mixing Audio . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 145
9.1.2 Exposing Mixer Properties to Modify Them with Scripts . . 146
9.1.3 Audio Effects . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 147
9.2 The BaseSoundManager Class . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 147
9.3 Adding Sound to Weapons . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 153

10. AI Manager 155


10.1 AI States . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 156
10.2 The BaseAIController Class – Base AI Control . . . . . . . . . . . . . . . . . 156
10.3 Enemy Stats . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 170
10.4 The AIBotController Class – Making an Enemy Bot Controller . . 171
10.5 The AISteeringController Class – An AI Steering Controller . . . . . 177
10.6 Adding Weapon Control to the AI Controller . . . . . . . . . . . . . . . . . . 181
10.6.1 Attack States . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 181
10.6.2 Base Enemy Weapon Controller . . . . . . . . . . . . . . . . . . . . .181

11. Menus and User Interface 187


11.1 Canvas Manager Class/Canvas Management . . . . . . . . . . . . . . . . . . . 187
11.2 The Main Menu . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 193
11.2.1 Designing the Main Menu . . . . . . . . . . . . . . . . . . . . . . . . . .194
11.2.2 The BaseMainMenuManager Script . . . . . . . . . . . . . . . . . . 195
11.2.3 Combining BaseMainMenuManager to Use the
ProfileManager Script for Saving and Loading Audio
Settings . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 198
11.3 In-Game User Interface . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 200

12. Saving and Loading Profiles 201


12.1 The Save Profile ScriptableObject . . . . . . . . . . . . . . . . . . . . . . . . . . . . 201
12.2 The BaseProfileManager Class . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 203

13. Loading Level Scenes 211


13.1 A Script for Loading Levels: LevelLoader.cs . . . . . . . . . . . . . . . . . . . . 212
13.2 Multiple Level Loading . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 215
13.3 Building a Multi-Scene Level Loader in Unity . . . . . . . . . . . . . . . . . . 216

14. Racing Game 219


14.1 Ingredients . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 221
14.2 Main Menu Scene Overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 223
14.3 Level Select Scene Overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 223
14.4 The Core Scene Overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 224
14.4.1 Game Manager – The RaceGameManager Class . . . . . . . 224
14.4.2 Race Control – The GlobalRaceManager Class . . . . . . . . 238
14.4.3 Race Control – The RaceController Class . . . . . . . . . . . . . 245
14.4.4 Race Control – RacePlayerController Class . . . . . . . . . . . 253

x Contents
14.4.5 Audio . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 259
14.4.5.1 Vehicle Audio����������������������������������������������������259
14.4.5.2 Incidental Sounds����������������������������������������������259
14.4.6 User Interface . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 260

15. Blaster Game Example 263


15.1 Ingredients . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 264
15.2 Main Menu Scene Overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 265
15.3 The Core Scene Overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 265
15.3.1 The BlasterGameManager Class . . . . . . . . . . . . . . . . . . . . . 265
15.3.2 The BlasterPlayer Class . . . . . . . . . . . . . . . . . . . . . . . . . . . . 274
15.3.3 Enemy Bots and the BlasterEnemyBot Class . . . . . . . . . . 277
15.3.4 Weapons and Projectiles . . . . . . . . . . . . . . . . . . . . . . . . . . . 278
15.3.5 User Interface . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 278
15.4 Level Scenes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 280
15.4.1 Spawning Enemies . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 280

Index 283

Contents xi
Acknowledgments

Thanks to all of my family, friends and everyone who has helped me with my
books, games and projects over the years: Brian Robbins, Chris Hanney,
Technicat, Molegato, NoiseCrime, Quantum Sheep, Mickael Laszlo, Juanita
Leatham, CoolPowers, Dave Brake, Sigurdur Gunnarsson, Kevin Godoy R.,
Lister, Wim Wouters, Edy (VehiclePhysics), IdeaFella, Liam Twose, RafaEnd,
Lynxie, Alistair Murphy, McFunkypants, Dani Moss, Malcolm Evans, Vinh,
Scott Wilson, Jon Keon, Dunky, Huck Z, Paradise Decay, Kryten, Silverware
Games, Pete Patterson, Dr. Not Oculus VR, Say Mistage, Andy Hatch, Lydia, RT
Warner, GermanRifter VR, Sylvain Demers, Kenneth Seward Jr, Dancer (Space
Dad), Steve Fulton, Paul Bettner, Derek Scottishgeeks, Jonny Gorden, Edward
Atkin, Ottawa Pete, Sam W., Dylan Stout, Shane McCafferty, Will Goldstone,
Sanborn VR, Gary Riches, J. Dakota Powell, Mayonnaise Boy, Stephen Parkes,
Ram Kanda, Alex Bethke, Itzik Goldman, Joachim Ante, Robert Scoble, Tony
Walsh, Andreas ‘BOLL’ Aronsson, Cat, Darrel Plant, Mike Baker, Rimsy, Cassie,
Christopher Brown, Phil Nolan, Pixel Hat Studio, Marcus Valles, Trev, Karyl,
Tami Quiring, Nadeem Rasool, Dwayne Dibley, Liz and Pete Smyth, Isaac and
Aiden, David Helgason, VR Martin, James Gamble, Vasanth Mohan, Simona
Ioffe, Alexander Kondratskiy, Tim and Paul, The Oliver Twins, Jeevan Aurol,
Rick King, Aldis Sipolins, Ric Lumb, Craig Taylor, Rob Hewson, Dani Moss,
Jayenkai (JNK), Matthew Kirubakaran, Elliot Mitchell, Ethan and William,
Pablo Rojo, Paul Bettner, AdrellaDev, Gordon Little, Ryan Evans, Sasha Boersma,
Matt Browning at Perfect Prototype, Hermit, Dirty Rectangles and the whole
Ottawa game dev community.

xiii
I would also like to sincerely thank Anya Hastwell, Thivya Vasudevan and
the team at SPI Global, the whole team at Routledge/CRC Press/AK Peters,
including Randi Cohen, Jessica Vega and Rick Adams, for making this book a
reality.
Thank you for buying this book and for wanting to do something as cool as
to make games. I wish I could tell you how awesome it feels to know that someone
else is reading this right now. I cannot wait to see your games and I sincerely hope
this book helps you in your game making adventures. Have fun making games!

xiv Acknowledgments
Introduction

The overall goal of this book is to provide a library of C# code with which to
jumpstart your projects and to help you with the overall structure of your games.
Many development cookbooks focus on only providing snippets of code, but,
here, we take a different approach. What you are holding in your hands right now
(or on your screen) is a cookbook for game development that has a highly flexible
core framework designed to speed up development of just about any type of Unity
project.
You might think of the framework as a base soup and the scripting compo-
nents as ingredients. We can mix and match script components and we can share
the same core scripts in many of them. The framework takes care of the essentials
and we add a little extra code to pull it all together the way we want it to work.
The framework is optional, however – you can use a lot the components indi-
vidually. If you intend on using the components in this book for your own games,
the framework could either serve as a base to build your games on or simply as a
tutorial test bed for you to rip apart and see how it all works. Perhaps you can
develop a better framework or maybe you already have a solid framework in
place. If you do find a way to develop your own framework, I say do it. The key to
game development is to do what works for you and your game projects – what-
ever it takes to cross the finish line.
I hope it helps you to make your games and tell your stories. I also hope you
remember to try to have fun doing it!

xv
Prerequisites

You can get up and running with the required software for the grand total of zero
dollars. Everything you need can be downloaded free of charge with no catches.
All you need is:

Unity Personal or Unity Pro version

C# programming knowledge.

This is not a book about learning how to program. You will need to know
some C# and there are several other books out there for that purpose, even if I
have tried to make the examples as simple as possible!

What this book doesn’t cover


This is not a book about learning to program from scratch. We assume that the
reader has some experience of the C# programming language. Know that I am a
self-taught programmer and I understand there may be better or alternative ways
to do things. Techniques and concepts offered in this book are meant to provide
foundation and ideation, not to be the final word on any subject.

xvii
1 Making Games in a
Modular Way

1.1  Important Programming Concepts


There are some things you will need to know to utilize this book fully. For a lot of
programmers, these concepts may be something you were taught in school. As a
self-taught coder who did not find out about a lot of these things until long after
I had been struggling on without them, I see this section as a compilation of
‘things I wish I’d known earlier’!

1.1.1 Manager and Controller Scripts


Sometimes, even I get confused about the difference between a manager and a
controller script. There is no established protocol for this, and it varies depending
on who you ask. Like some readers of the first edition of this book, I find it a little
confusing and I will try to clear that up.

1.1.1.1 Managers
Managers deal with overall management, in a similar way to how a Manager
would work in a workplace situation.

1.1.1.2 Controllers
Controllers deal with systems that the managers need to do their jobs. For exam-
ple, in the racing game example game for this book, we have race controller
scripts and a global race manager script. The race controller scripts are attached
to the players and track their positions on the track, waypoints, and other rele-
vant player-specific race information. The global race manager script talks to all

1
the race controller scripts attached to the players to determine who is winning
and when the race starts or finishes.

1.1.1.3 Communication between Classes


An important part of our modular structure is how scripts are going to commu-
nicate with each other. It is inevitable that we will need to access our scripts from
different areas of the game code, so you will need to know how to do that in Unity.

1. Direct referencing scripts via variables set in the editor by the Inspector
window.

The easiest way to have script Components talk to each other (that is, scripts
attached to GameObjects in the Scene as Components) is to have direct refer-
ences, in the form of public variables within your code. They can then be popu-
lated in the Inspector window of the Unity editor with a direct link to another
Component on another GameObject.

2. GameObject referencing using SendMessage.

SendMessage sends a message to a GameObject or Transform and calls a


function within any of its attached script Components. It only works one way, so
it is only useful when we do not need any kind of return result. For example:
someGameObject.SendMessage(“DoSomething”);

Above, this would call the function DoSomething() on any of the script
Components attached to the GameObject referenced by someGameObject.

3. Static variables.

The static variable type makes a variable accessible to other scripts without a
direct reference to the GameObject it is attached to. This is particularly useful
behavior where several different scripts may want to manipulate a variable to do
things like adding points to a score or set the number of lives of a player, and so on.
An example declaration of a static variable might be:
public static GameManager aManager;

You can have private or public static variables:

1.1.1.4 Public Static
A public static variable exists everywhere and may be accessed by any other
script.
For example, imagine a player script which needs to tell the Game Manager
to increase the current score by one:

1. In our GameManager.cs Game Manager script, we set up a variable,


public static typed:

public static gameScore;

2. In any other script, we can now access this static variable and alter the
score as needed:

GameController.gameScore++;

2 1.     Making Games in a Modular Way


1.1.1.5 Private Static
A private static variable is accessible only to any other instances of the same type
of class. Other types of class will not be able to access it.
As an example, imagine all players need to have a unique number when they
are first spawned into the game. The player class declares a variable named
uniqueNum like this:
Private static int uniqueNum;

When a player script is first created, it uses the value of uniqueNum for itself
and increases uniqueNum by one:
myUniqueNum = uniqueNum;
uniqueNum++;

The value of uniqueNum will be shared across all player scripts. The next
player to be spawned will run the same start up function, getting uniqueNum
again – only this time it has been increased by one, thanks to the player spawned
earlier. This player again gets its own unique number and increases the static
variable ready for the next one.

1.1.2 The Singleton
A singleton is a commonly used method for allowing access to an instance of a
class, accessible to all other scripts. This pattern is ideal for code that needs to
communicate with the entire game, such as a Game Manager.

1.1.2.1 Using the Singleton in Unity


The most straightforward way to achieve singleton-like behavior is to use a static
variable and, when Unity calls the Awake() function, set the instance variable to
become a reference to the script instance it represents. The keyword ‘this’ refers
to the instance of the script it is a part of.
For example:
public class MyScript : Monobehaviour
{
private static MySingleton instance;

void Awake()

{
if (instance != null)
Destroy(this);

instance = this;
}
}

The singleton instance of our script can be accessed anywhere, by practically


any script, with the following syntax:
MySingleton.Instance.SomeFunctionInTheSingleton();

1.1.3 Inheritance
Inheritance is a complex concept, which calls for some explanation here because
of its key role within the scripts provided by this book. Have a read through this
section but don’t worry if you don’t pick up inheritance right away. Once we get
to the programming it will probably become clearer.

1.1 Important Programming Concepts 3


The bottom line is that inheritance is used in programming to describe a method
of providing template scripts that may be overridden, or added to, by other scripts. As
a metaphor, imagine a car. All cars have four wheels and an engine. The types of
wheels may vary from car to car, as will the engine, so when we say ‘this is a car’ and
try to describe how our car behaves; we may also describe the engine and wheels.
These relationships may be shown in a hierarchical order:

Car–

–Wheels

–Engine

Now try to picture this as a C# script:

Car class.

Wheels function

Engine function

If we were building a game with lots of cars in it, having to rewrite the car class for
each type of car would be silly. A far more efficient method might be to write a base
class and populate it with virtual functions. When we need to create a car, rather
than use this base class, we build a new class, which inherits the base class. Because
our new class is inherited, it is optional whether we choose to override wheels or
engine functions to make them behave in ways specific to our new class. That is, we
can build ‘default’ functions into the base class and if we only need to use a default
behavior for an engine, our new class doesn’t need to override the engine function.
A base class might look something like this:
public class BaseCar : MonoBehaviour {

public virtual void Engine () {


Debug.Log(“Vroom”);
}

public virtual void Wheels () {


Debug.Log(“Four wheels”);
}
}

There are two key things to notice in the above script. One is the class declara-
tion itself and the fact that this class derives from MonoBehaviour. MonoBehaviour
is itself a class – the Unity documentation describes it as “the base class every
script derives from” – this MonoBehaviour class contains many engine-specific
functions and methods such as Start(), Update(), FixedUpdate(), and more. If our
script didn’t derive from MonoBehaviour it would not inherit those functions and
the engine wouldn’t automatically call functions like Update() for us to be able to
work with. Another point to note is that MonoBehaviour is a class that is built into
the engine and not something we can access to edit or change.
The second point to note is that our functions are both declared as virtual
functions. Both are public, both are virtual. Making virtual functions means that
the behavior in our base class may be overridden by any scripts that derive from it.
The behavior we define in this base class could be thought of as its default behav-
ior. We will cover overriding in full a little further on in this section.

4 1.     Making Games in a Modular Way


Let’s take a look at what this script actually does: if we were to call the
Engine() function of our BaseCar class, it would write to the console “Vroom.” If
we called Wheels, the console would read “Four wheels.”
Now that we have our BaseCar class, we can use this as a template and make
new versions of it like this:
public class OctoCar : BaseCar {
public override void Wheels () {
Debug.Log(“Eight wheels”);
}
}

The first thing you may notice is that the OctoCar class derives from BaseCar
rather than MonoBehaviour. This means that OctoCar inherits functions and meth-
ods belonging to our BaseCar script. As the functions described by BaseCar were
virtual, they may be overridden. For OctoCar, we override Wheels with the line:
public override void Wheels () {

Let’s take a look at what this script actually does: In this case, if we were to
call the Engine() function on OctoCar, it would do the same as the BaseCar class;
it would write “Vroom” to the console. It would do this because we have inherited
the function but have not overridden it, which means we keep that default behav-
ior. In OctoCar, however, we have overridden the Wheels() function. The BaseCar
behavior of Wheels would print “Four wheels” to the console but if we call
Wheels() on OctoCar, the overridden behavior will write “Eight wheels,” instead.
Inheritance plays a huge part in how our core game framework is structured.
The idea is that we have basic object types and specific elaborated versions of
these objects inheriting the base methods, properties, and functions. By building
our games in this manner, the communication between the different game com-
ponents (such as game control scripts, weapon scripts, projectile controllers, etc.)
becomes universal without having to write out the same function declarations
over and over again for different variations of script. For the core framework, our
main goal is to make it as flexible and extensible as possible and this would be a
much more difficult if we were unable to use inheritance.

1.1.4 Coroutines
Unity lets you run a function known as a coroutine, outside of the regular built
in functions like Update, FixedUpdate, LateUpdate, and so on. A coroutine is
self-contained code that will just go off and do its own thing once you have told
it to run. As it is running on its own, you can do some cool stuff like pause it for
a set amount of time and then have it start again, and coroutines are ideally suited
to time-based actions like fade effects or animations.
Here is an example of a coroutine (this example code comes from the Unity
engine documentation):
IEnumerator Fade()
{
for (float ft = 1f; ft >= 0; ft -= 0.1f)
{
Color c = renderer.material.color;
c.a = ft;
renderer.material.color = c;
yield return null;
}
}

1.1 Important Programming Concepts 5


This code loops the value of ft from 1 to 0 and sets the alpha value of a color
on a material to that value. This will fade out whatever renderer this script is
attached to, fading more as the alpha channel gets closer to 0. Notice the strange
line:

yield return null;

Do not be alarmed by this odd code above! All it does is tell the engine that,
at this point, the coroutine is ready to end this update and go on to the next one.
You need this in your code, but don’t worry too much about why at this stage.
I will go into some more detail below, but for now let us continue by looking at
how you would start this coroutine running:
StartCoroutine("Fade");

StartCoroutine() takes the name of the coroutine as a string. Once called to


start, the coroutine will do its thing and you do not need to do anything else. It
will either run until we tell it to stop, or it will run until the object is destroyed.
A key thing to note here is that the function is declared as type IEnumerator.
At first, I found this confusing, but it turns out that Unity coroutines use C#’s
built in system for iterator blocks. IEnumerator (Iterator Enumerator) was
intended to be a method for iterating through collections of objects. Coroutines
instead use IEnumerator to iterate through your coroutine code, starting or stop-
ping it between updates.
Another key point is that statement:
yield return null;

You can think of IEnumerator like a cursor making its way through your
code. When the cursor hits a yield statement, that tells the engine that this update
is done and to move the cursor on to the next block.
Another thing you can do with coroutines is to pause the code inline for a
certain amount of time, like this:
yield return new WaitForSeconds(1.0f);

Using WaitForSeconds(), you can quite literally pause the coroutine script
execution inline. For example:
IEnumerator DebugStuff()
{
Debug.Log("Start.");
yield return new WaitForSeconds(1.0f);
Debug.Log("Now, it’s one second later!");

Earlier in this section, I mentioned that the yield statement is used to tell
Unity the current update is done and to move on to the next. In the code above,
rather than just telling Unity to move on to the next bit of code, it tells Unity to
wait for the specified number of seconds first.

1.1.5 Namespaces
Namespaces compartmentalize chunks of code away from each other. You can
think of a namespace as a box to put your own scripts in, so that they can stay
separated from other code or code libraries. This helps to prevent possible

6 1.     Making Games in a Modular Way


overlaps between code libraries (APIs and so on) and your own code, such as
duplicate function names or variables.
To use namespaces, you wrap the entire class in a namespace declaration
like this:

namespace MyNamespace
{
public class MyClass() : Monobehaviour
{
}

When you want to refer to the code from another class, you need to be either
wrapped in the same namespace or to have the using keyword at the top of the
script, like:

using MyNamespace;

1.1.6 Finite State Machines (FSM)


A finite state machine is a commonly used system for tracking states. In video
games, they are used to track game states. Example states might be GameLoaded,
GameStarting, LevelStarting, and so on. The term finite state machine sounds a
lot more complicated than it usually is. The actual code often takes the form of a
long case statement that will execute code or call functions based on the current
game state. For example:

Switch(currentGameState)
{
Case GameStates.GameLoaded:
GameLoaded();
Break;
Case GameStates.GameStarting:
GameStart();
Break;

Having code in each case statement can get unruly. To counter this, I like to
split all of the code out into individual functions. This keeps the code tidy, easier
to manage, and easier to debug when things do not go to plan.

1.2  Naming Conventions


Naming conventions vary from programmer to programmer and even between
companies. Some games companies have strict guidelines on how code is con-
structed and how to name variables, where they can and cannot be used, and so
on, which is mostly in place to make it easier for other programmers to be able to
understand the code and pick it up when they might need to. You may not need
to take it that far, but I do feel that some organization of your naming helps. In
this book, I follow a very loose set of rules for naming variables – just enough to
make it easier for me to know quickly what type of variable I am looking at or
what its purpose might be. Those are:
Object references (Transforms, Components, GameObjects, and so forth)
are prefixed by an underscore (_) symbol. For example, a variable to hold a

1.2 Naming Conventions 7


Random documents with unrelated
content Scribd suggests to you:
"Se voi olla parempi… Mutta miten siellä menetellään vankien
suhteen?"

"Heidät kiidätetään johonkin torin varrella olevaan taloon, mistä


voi tehdä vastarintaa uudelle kiinniotolle… Niin, yhä parempaa:
muutamissa sikäläisissä taloissa on kaksi ulospääsyä, — toinen torin
puolelle, ja toinen johtaa Rue de la Mortellerielle, Vannerielle tai
Tixeranderielle. Vangit voivat heti pujahtaa tiehensä takaovesta."

"Mutta siitä kohdasta on nimenomaan päätettävä haitallisten


sattumain välttämiseksi."

"Mikä niistä nyt olisi sopivin…"

"Minäpä tiedän", huudahti Fouquet ja teki Gourvillelle merkin,


jonka tämä näkyi oivaltavan. "Eräältä ystävältäni olen toisinaan
saanut lainaksi avaimen taloon, jonka hän on vuokrannut Baudoyer-
kadun varrelta. Sen tilava puutarha ulottuu erään Grève-torin
rakennuksen takarajaan."

"Siinä meidän suojamme", sanoi abbé. "Minkä rakennuksen?"

"Vilkasliikkeisen krouvin, jonka kyltti esittää Pyhää Neitsyttä."

"Se ei ole minulle outo", ilmoitti abbé.

"Ikkunat torin puolella. Takaovi johtaa pihalle, jonka aidassa


minun ystäväni puutarhan puolella on muistaakseni veräjä."

"Oivallista", sanoi abbé.

"Vangit toimitetaan krouviin ja sieltä takatietä pois Baudoyer-


kadun puutarhan kautta, sillaikaa kun krouvin etuovea puolustetaan
ensi hätään. Hyvinpä tunnetkin kaikki asiat!"

"Sen pitäisi onnistua äkillisenä temppuna. Paljonko tarvitset


räyhääjiesi juomahimon ja rahanahneuden tyydyttämiseen?

"Sitä puhetapaa! Kuulisivatpa tuon! Muutamat heistä ovat ylen


herkkäluontoisia."

"Tarkoitan vain olevan välttämätöntä saattaa heidät sellaiselle


päälle, että he uhmaavat maailmaa ja taivasta, sillä huomenna
taistelen kuningasta vastaan, ja minun täytyy voittaa, ymmärrätkö?"

"Tahtosi täytetään. Anna loput ohjeesi."

"Muu on sinun asiasi."

"Anna siis vain massisi."

"Lue abbélle satatuhatta livreä, Gourville."

"Mainiota… älkäämme säästäkö mitään kuluja, niinhän?"

"Oikein."

"Mutta varovaisuutta sentään tarvitaan, monseigneur", muistutti


Gourville. "Jos tämä tulee tietoon, niin menetämme päämme."

"Vastako sinua nyt jänistää, Gourville?" virkkoi Fouquet punehtuen


pahastuksesta.

"Ei, minun on voitettavana säälini eikä sinunkaan tarvitse olla


huolissasi. No niin, abbé, onko asia selvä?"
"Selvä on. Kello kahdeltatoista tulee joukkoni krouviin
valmistautumaan käsikähmää varten. En säästä viima enkä taloa:
minulla on suunnitelmani; kyllähän näet, kun käyn työhön."

"Missä sinä oleskelet?"

"Kaikkialla enkä missään."

"Miten saan tietoja?"

"Pikalähetin välityksellä, jonka ratsu pysytelköön juuri ystäväsi


puutarhassa. Mikä hänen nimensä onkaan?"

Fouquet katsahti Gourvilleen, joka kiirehti vastaamaan isäntänsä


puolesta:

"Talon kyllä tuntee. Pyhän Neitsyen kuvan kapakka edessä,


korttelin ainoa puutarha takana."

"Saattakaa häntä, Gourville", lopetti Fouquet, "ja lukekaa hänelle


rahat. Niin, mutta malttakaahan vielä… eikö tälle hankkeelle tosiaan
voi antaa erityistä uskottavalta tuntuvaa tekosyytä?"

"Se on varsin luonnollisesti katumellakka", sanoi abbé.

"Katumellakka millä perusteella? Sillä onhan asema sellainen, että


jos Pariisin väestö milloinkaan on tyytyväinen kuninkaan toimiin, niin
ainakin rahamiehiä hirtettäessä."

"Kyllä minä sen kohdan järjestän", lupasi abbé.

"Järjestät huonosti, ja silloin voi Gourvillellä olla syytä


huolestukseensa."
"En toki, en toki… aatos jo kypsyy aivoissani."

"Sano se."

"Mieheni huutakoot: 'Eläköön Colbert!' ja karatkoot käsiksi


vankeihin muka repiäkseen heidät kappaleiksi, koska hirsipuu on
verenimijöille liian lievä rangaistus."

"Hei, siinäpä tosiaan aatos!" ilahtui Gourville. "Lempo soikoon,


herra abbé, on teillä mielikuvitusta! Jotakin tällaista minä kaipasin."

"Monsieur, olen sukuni arvoinen", vastasi abbé ylpeästi.

"Narri!" jupisi Fouquet, lisäten ääneen: "Se on nerokasta!


Toteuttakaa homma vuodattamatta verta."

Gourville ja abbé läksivät yhdessä hyvin puuhakkaina.

Yli-intendentti heittäysi levolle, mutta pysyi vielä kauan valveilla,


puolittain hautoen huomispäivän kohtalokkaita toimenpiteitä ja
puolittain unelmoiden rakkaudesta.

61

Pyhän Neitsyen kuvan krouvi.

Seuraavana päivänä kellon lähetessä kahta oli Grève-torille


kokoontunut viisikymmentätuhatta katselijaa kahden hirsipuun
ympärille, jotka oli pystytetty Pelletierin rantalaiturin puoliselle
reunalle rintasuojusta vasten. Aamulla olivatkin kaikki Pariisin
viralliset julkihuutajat kiireesti kierrelleet sekä keskikortteleissa että
etenkin hallialueilla ja esikaupungeissa julistaen väsymättömillä,
käheillä äänillään sitä suurta oikeudentekoa, että kuningas oli
tuomituttanut kaksi petollista virkamiestä, kaksi kruunun varasta ja
kansan köyhdyttäjää. Ja tämä kansa, jonka parasta nyt näin
lämpimästi harrastettiin, ei tahtonut olla osoittamatta
kunnioitustansa kuninkaalle, vaan oli lähtenyt myymälöistään,
pajoistaan ja työhuoneistaan, hiukan todistaakseen kiitollisuuttansa
Ludvig XIV:lle, aivan kuin vieraat, jotka pelkäävät käyttäytyvänsä
epäkohteliaasti, elleivät noudata kutsua.

Kuuluttajain kovaäänisen, mutta kompastelevan lukemisen


mukaan sisälsi tuomio, että Grève-torilla saatettaisiin
kuolemanrangaistukseen kaksi veronkantajaa valtion varojen
anastamisesta ja hävittämisestä, laittomien verojen kiristämisestä ja
asiakirjain väärentämisestä, "nimitaulu yläpuolelleen naulattuna",
kuten sanat kuuluivat. Mutta näitä nimiä ei ilmaistu tuomiossa.
Pariisilaisten uteliaisuus oli senvuoksi äärimmäisilleen jännittynyt, ja
kuten jo mainitsimme, odotti tavaton ihmispaljous kuumeellisen
kärsimättömästi mestaushetkeä. Oli jo levinnyt tieto, että vangit oli
siirretty Vincennesin linnaan, sieltä tuotaviksi Grève-torille.
Sentähden kuhisi Saint-Antoinen esikaupunki ja sieltä johtava
samanniminen katu täynnä väkeä, sillä Pariisin asujaimisto jakautuu
suurina mestauspäivinä kahteen luokkaan: toiset tahtovat katsella
tuomittujen ohimenoa — säveinä ja arkasydämisinä, mutta elämän
kulkua tarkkailevina luonteina, — ja toiset taasen tunkeutuvat
katsomaan itse kuolemaa, kaivaten voimakkaita mielenliikutuksia.

D'Artagnan oli aamupäivällä saanut kuninkaalta viimeiset ohjeet ja


hyvästellyt ystävänsä, joita tällähaavaa ei ollutkaan tavattavissa
muita kuin Planchet. Hän suunnitteli nyt päiväjärjestyksensä kuten
jokaisen monipuuhaisen henkilön tulee tehdä, jotta hän osaisi
käyttää kalliit hetket oikealla vuorolla niiden parhaaksi tehoksi.

"Lähtö on määrätty kello kolmeksi aamulla", hän alkoi


puoleltapäivin laskeskella; "minulla on siis viisitoista tuntia
käytettävissäni. Vähentäkäämme siitä nukkumiseen kuusi tuntia, kun
en mukavasti tule toimeen lyhyemmällä unella; siis yksi tunti
aterioimiseen; saamme seitsemän. Tunti käyntiin Atoksen luona;
tullaan kahdeksaan. Kaksi tuntia sekalaiseen ajanhukkaan;
pääsemme kymmeneen. Jäljellä on siis viisi tuntia.

"Tunti rahain nostamiseen tai oikeastaan epäyksen saamiseen


herra Fouquetilta; toinen samaisten rahojen perimiseen herra
Colbertilta sekä hänen kysymystensä ja irvistystensä
vastaanottamiseen; kolmas aseitteni ja vaatekertaani katsastukseen
ja saappaitteni rasvauttamiseen. Vieläkin jää kaksi tuntia Mordioux,
kuinka rikas olenkaan!"

Ja sitä sanoessaan d'Artagnan tunsi outoa ilahdusta, nuoruuden


hurmaa, joka menneisyyden ihanain ja onnellisten vuosien
tuulahduksena nousi hänelle huumaavana päähän. "Näiksi kahdeksi
tunniksi", jatkoi muskettisoturi, "menenkin nostamaan ensimmäisen
neljännesvuokrani Pyhän neitsyen kuvasta. Se virkistää.
Kolmesataaseitsemänkymmentäviisi livreä! Voi pahus, onpa se
hämmästyttävää! Jos köyhä saisi ainoasta livrestään kaksitoista
denieriä kasvuksi, niin se olisi oikeutta, oivallista; mutta hänen täytyy
pitää se hedelmättömänä taskussaan. Rikas sitävastoin korjaa satoa
rahoistaan, joita hänen ei tarvitse käyttää… Tässäkin nyt saan
kolmesataaseitsemänkymmentäviisi livreä kuin taivaasta pudonneina.
Minä siis menen Pyhän Neitsyen kuvaan ja tyhjennän vuokralaiseni
kanssa lasillisen espanjalaista viiniä, jota hän ei voi olla minulle
tarjoamatta. Mutta järjestys kaikessa, d'Artagnan, järjestys olla
pitää! Järjestetäänpä nyt aika täsmällisiin vuoroihin: 1. Atos. 2.
Pyhän Neitsyen kuva. 3. Herra Fouquet. 4. Herra Colbert. 5.
Illallinen. 6. Vaatteet, saappaat, hevoset, matkareppu. 7. Ja
viimeiseksi. Uni."

Tämän järjestelyn mukaisesti d'Artagnan lähti suoraa päätä kreivi


de la Fèren luo, jolle hän vaatimattomasti ja teeskentelemättömästi
kertoi osan uudesta myötäkäymisestään.

Atos oli eilispäivästä asti ollut väkisinkin jonkun verran levoton


d'Artagnanin käynnistä kuninkaan luona, mutta pari sanaa riitti
selittämään kaikki. Hän neuvoi ystäväänsä säästämään itseään ja
varovasti tarjoutui saattamaan häntä siinä tapauksessa, että se kävi
päinsä.

"Mutta, rakas ystävä", virkkoi d'Artagnan, "enhän minä mihinkään


matkusta."

"Mitä! Tulet sanomaan jäähyväisiä etkä lähde minnekään?"

"Ka, kyllähän, kyllähän", vastasi d'Artagnan hiukan punastuen,


"pistäydyn katsomassa maatilaa ostaakseni."

"Se muuttaa asian. Siinä tapauksessa sovitan neuvoni toisin. Sen


sijaan, että sanoisin: 'älä anna surmata itseäsi', sanonkin: 'älä anna
puijata itseäsi'."

"Minä ilmoitan sinulle, veikkonen, jos joku tila on erityisesti


mieleiseni; silloin saanen käyttää hyväkseni sinun
asiantuntemustasi."
"Kyllä, kyllä", suostui Atos hienotuntoisena ehkäisten hymyänsä
pääsemästä näkyviin.

Raoul noudatti isänsä pidättyväisyyttä. D'Artagnan oivalsi olevan


liian salamyhkäistä poistua ystäviensä parista tekosyyllä, ellei edes
ilmaissut matkan suuntaa.

"Olen valinnut Mansin piirin", hän sanoi Atokselle. "Eiköhän siellä


ole hyvät maat?"

"Mainiot, ystäväiseni", vastasi kreivi huolimatta muistuttaa hänelle,


että Mans oli samalla taholla kuin Tourainen maakunta, joten hän
korkeintaan kaksi päivää odottamalla voisi saada ystävästään
seuralaisen.

Mutta d'Artagnan oli enemmän hämillään kuin kreivi ja sotkeusi


jokaisella huomautuksellaan yhä pahemmin.

"Lähden huomenna aamun valjetessa", sanoi hän lopuksi. "Suotko


minulle seurasi siihen asti, Raoul?"

"Kyllä, herra chevalier", vastasi nuorukainen, "jollei herra kreivi


tarvitse minua."

"En, Raoul; minulla on tänään puhelu Monsieurin, kuninkaan


veljen, luona."

Raoul pyysi Grimaudilta miekkaansa, jonka tämä heti toi.

"Hyvästi sitten, rakas ystävä!" lisäsi d'Artagnan avaten sylinsä


Atokselle.
Atos syleili häntä kauan, ja muskettisoturi, joka hyvin käsitti hänen
hienotuntoisuutensa, kuiskasi hänen korvaansa:

"Valtion asia!"

Atos vastasi ainoastaan merkitsevällä kädenpuristuksella, ja he


erosivat. Raoul pisti kätensä vanhan ystävänsä kainaloon, ja
d'Artagnan vei hänet Saint-Honoré-kadulle.

"Minä johdan sinut nyt Pluto-jumalan[38] luokse", sanoi


d'Artagnan nuorelle miehelle; "valmistaudu nyt koko päiväksi
katselemaan kultakolikkojen pinoamista. Taivasten tekijä, olenpa
minä muuttunut!"

"Mutta katsokaahan, kuinka ihmisiä tungeksii kaduilla", huomautti


Raoul.

"Onko tänään joku juhlakulkue liikkeellä?" kysyi d'Artagnan eräältä


kuljeksijalta.

"Ei, nyt hirtetään, monsieur", vastasi ohikulkija.

"Mitä! Hirtetään?" kertasi d'Artagnan; "Grèvelläkö?"

"Niin, monsieur."

"Lempo sellaisen vintiön periköön, joka laittautuu hirteen juuri


silloin kun minun pitää nostaa vuokraneljännekseni!" huudahti
d'Artagnan. "Oletko nähnyt ketään hirtettävän, Raoul?"

"En, monsieur… Jumalan kiitos!"

"Sellainen on nuoruus… Jos olisit ollut vartiopäällikön vuorolla


juoksuhaudassa, niinkuin minä monasti, ja joku vakooja… mutta suo
anteeksi, Raoul, minä höpöttelen. Sinä olet oikeassa, hirttäminen on
inhoittava näky… Mihin aikaan se tapahtuu, monsieur, jos saan luvan
kysyä?"

"Monsieur", vastasi kuljeksija kunnioittavasti, ihastuksissaan siitä,


että sai keskustella kahden sotilashenkilön kanssa, "se lienee
määrätty kello kolmeksi."

"Hoo, kello on vasta puoli kaksi; lisätkäämme vauhtia, niin


ehdimme ajoissa nostamaan kolmesataaseitsemänkymmentäviisi
livreäni ja poistua ennen kuin tuomittu tuodaan."

"Tuomitut, monsieur", oikaisi porvari, "sillä niitä on kaksi."

"Kiitän tuhannesti, monsieur", sanoi d'Artagnan, joka vanhemmalle


puolelle ikäänsä päästyään oli suennut erittäin kohteliaaksi
sävyltään. Vetäen Raoulia mukanaan hän riensi Grève-torille päin.
Muskettisoturi oli peräti tottunut väentungoksiin, ja hänen
vastustamatonta nyrkkiään tehosti hartiain harvinainen notkeus,
muutoin eivät kumppanukset olisikaan pitkään aikaan päässeet
perille. He seurasivat rantalaituria, jolle olivat poikenneet Saint-
Honoré-kadulta. D'Artagnan tunkeusi edellä; hänen kyynärpäänsä,
nyrkkinsä ja hartiansa raivasivat taitavasti tietä kolmena kiilana, jotka
puhkoivat ja hajoittivat ryhmiä kuin kapulakasoja. Vahvikkeena hän
usein käytti rautaista miekankahvaansa, jonka survaisi
itsepintaisimpien tungeksijain kylkien lomitse, ja pidellen sitä joko
vipukankena tai sorkkarautana hän eroitti mielensä mukaan miehen
vaimosta, sedän veljenpojasta tai veljen veljestä. Kaikki tämä
tapahtui niin luonnollisesti ja niin herttaisesti hymyillen, että vain
pronssikylkinen patsas olisi hetkisen vastustanut kahvan kutittelua ja
ainoastaan kivinen sydän jäänyt ihastumattomaksi myhäilystä, joka
leikki muskettisoturin huulilla. Ystäväänsä seuraten Raoul säästi
naisia, jotka ihailivat hänen kauneuttaan, ja hallitsi miehiä, jotka
tunsivat hänen lihaksiensa jäntevyyden, ja tällä tavoin nuo kaksi
halkoivat aaltoilevaa ihmismerta.

He pääsivät molempien hirsipuiden näkösälle, ja Raoul käänsi


tympeytyneenä katseensa niistä. D'Artagnan ei edes nähnyt niitä;
hänen talonsa hammaslaitainen pääty ikkunoineen, jotka olivat
täpösen täynnä uteliaita kasvoja, kiinnitti kokonaan hänen
huomionsa. Torilla ja talonsa ympärillä hän havaitsi melkoisen joukon
lomalle laskettuja muskettisotureita, jotka vaimoineen tai ystävineen
odottivat juhlallisen toimituksen hetkeä.

Enimmin ilahdutti häntä se huomio, että hänen vuokralaisellaan


kapakoitsijalla näkyi olevan enemmän vieraita kuin hän kykeni
palvelemaankaan. Kolme viinuria ei riittänyt tyydyttämään kaikkia
janoisia, joita kuhisi krouvisalissa, pikku huoneissa ja pihallakin.

D'Artagnan käänsi Raoulin huomion tähän vilkkaaseen


liikenteeseen ja virkkoi hänelle:

"Sillä veijarilla ei ole mitään veruketta vuokranmaksunsa


lykkäämiseen. Katsohan tuota ryyppääjien liutaa, Raoul, — ihan niitä
voisi luulla paremmiksi ihmisiksi. Mordioux, mutta täällähän ei ole
ollenkaan tilaa!"

D'Artagnanin onnistui kuitenkin siepata isäntä kiinni esiliinan


nurkasta ja tehdä itsensä tunnetuksi.

"Voi, herra chevalier", parpatti kapakoitsija päästään pyörällä,


"minä tulen minuutin kuluttua; minulla on täällä sata virmapäätä,
jotka mullistavat kellarini ylösalaisin."
"Kellarinne ehkä, mutta eivät rahalipastanne."

"Oh, monsieur, teidän kolmekymmentäseitsemän ja puoli


pistolianne ovat huoneessani valmiiksi laskettuina, mutta siellä on
kolmekymmentä huimapäätä, jotka ovat avauttaneet itselleen
kokonaisen portviini-nassakan ja tuskin jättävät siitä kimpejäkään
jäljelle. Suokaa minulle minuutti aikaa, vain minuutti."

"Olkoon menneeksi sitten!"

"Minä lähden täältä", sanoi Raoul hiljaa d'Artagnanille; "tämä


iloisuus on alhaista."

"Nuori mies", vastasi d'Artagnan vakavasti, "sinä jäät minun


luokseni tänne. Sotilaan tulee tottua kaikenlaisiin näytelmiin.
Nuorissa silmissä on karaistavia hermoja, ja ihminen ei ole
todellisesti ylevä ja hyvä, ennen kuin silmä on paatunut ja sydän silti
jäänyt pehmeäksi. Tahtoisitko sitäpaitsi jättää minut yksikseni, pikku
Raoulini? Siinä tekisit pahasti. Maltas, tuollahan on pihalla puu; tule
sen siimekseen, — siellä voimme hengittää vapaammin kuin täällä
viininhöyryjen kuumentamassa ilmassa."

Uuteen paikkaansa he kuulivat väkijoukkojen yhä yltyvää pauhua,


samalla kun heidän huomiotaan ei välttänyt ainoakaan huudahdus
tai liike niiden vieraiden keskuudessa, jotka istuivat pöytien ympärillä
krouvisalissa tai pikku huoneisiin hajaantuneina.

Jos d'Artagnan olisi tahtonut asettua etuvartioksi jotakin asetyötä


valmisteltaessa, ei hän olisi voinut valita edullisempaa sijaa. Puuta,
jonka alla Raoul ja hän istuivat, verhosi jo sankka lehvistö. Se oli
jykevärunkoinen riippakastanja, joka loi varjonsa niin ränstyneelle
pöydälle, etteivät vieraat olleet voineet käyttää sitä hyväkseen.
Tältä paikalta d'Artagnan saattoi pitää silmällä kaikkea, kuten
sanottu. Hän tarkkailikin viinurien juoksentelua edes takaisin, uusien
janoisten saapumista ja milloin ystävällistä, milloin ynseätä
vastaanottoa, jota tulokkaat kokivat entisten istujain taholta. Hän
yritti siten saada aikaansa kulumaan, sillä ikävöityjä rahoja ei
vieläkään kuulunut. Raoul jo muistuttikin siitä viivytyksestä.

"Monsieur", hän sanoi, "te ette hoputa vuokralaistanne, ja


tuomitut saapuvat kohtsiltään. Silloin syntyy sellainen tungos,
ettemme pääse täältä enää pois."

"Sinä olet oikeassa", myönsi muskettisoturi. "Haloo! Hei! Tänne


joku, mordioux!"

Mutta turhaan hän huusi ja takoi rikkinäistä pöytää, joka murtui


siruiksi hänen lujan nyrkkinsä iskuista; ketään ei tullut. D'Artagnan
aikoi itse lähteä tavoittamaan isäntää, kovistaakseen häneltä varman
selvyyden, kun takana olevaan puutarhaan johtava veräjä kirskahti
ruostuneilla saranoillaan ja ritariksi pukeutunut mies ilmestyi
puutarhasta, veräjää sulkematta astuen poikki pihan. Luotuaan
syrjäsilmäyksen d'Artagnaniin ja hänen seuralaiseensa suuntasi tulija
askeleensa krouviin, kävellessään tähdäten joka suunnalle katseita,
jotka tuntuivat kykenevän lävistämään sekä muureja että sieluja.

"Kas vain", sanoi d'Artagnan itsekseen, "vuokralaiseni pitävät


yhteyttä keskenään… No, hänkin varmaan on joku hirttämistä
harrastava utelija."

Samassa vieraitten melu ja rähinä taukosi krouvin huoneissa.


Tuollaisissa tilaisuuksissa on hiljaisuus yhtä huomattava kuin yltyvä
metelikin. D'Artagnan kurkoittausi tähyämään, mistä näin äkillinen
muutos johtui.
Hän näki ritariasuisen miehen ilmestyneen krouvin päähuoneeseen
ja pitävän siellä puhetta vieraille, jotka kaikin kuuntelivat häntä
tarkkaavasti. D'Artagnankin olisi kenties voinut kuulla, mitä hän
haastoi, ellei väenpaljouden huumaava sorina ulkopuolelta olisi
kaameasti säestänyt puhujan lauseita. Mutta hän lopetti pian, ja
kaikki läksivät kapakasta pikku ryhminä perätysten; vain kuusi
miestä jäi huoneeseen. Johtajaksi ilmaantunut vei nyt kapakoitsijan
syrjään ja pidätteli tätä enemmän tai vähemmän tärkeässä
haastelussa, sillaikaa kun toiset sytyttivät lieteen suuren tulen,
vaikka ilma oli keväinen ja aurinko paistoi.

"Merkillistä", virkahti d'Artagnan Raoulille, "minusta miehet


tuntuvat jotenkuten tutuilta!"

"Eikö täällä ole savun hajua?" sanoi Raoul.

"Pikemmin salaliiton", vastasi d'Artagnan.

Juuri silloin saapui miehistä neljä pihalle; näköjään ilman mitään


pahoja aikeita he asettuivat vartioksi puutarhan veräjän lähelle,
silloin tällöin luoden d'Artagnaniin paljonpuhuvia silmäyksiä.

"Hiisi vieköön", huomautti d'Artagnan hyvin hiljaa Raoulille, "täällä


on jotakin tekeillä. Oletko luonnostasi utelias, Raoul?"

"Miten sattuu, herra chevalier."

"Minä olen utelias kuin vanha akka. Tule hetkiseksi kadun puolelle,
niin vilkaisemme torille. Lyönpä vetoa, että tästä tulee erikoisempi
näky."

"Mutta tiedättehän, herra chevalier, etten tahdo olla toimettomana


ja välinpitämättömänä katselemassa kahden onnettoman kuolemaa."
"Entä minä sitten! Luuletko minua sellaiseksi raakalaiseksi? Me
käännymme takaisin, kun se aika tulee. Mennään!"

He siirtyivät päärakennukseen ja asettuivat ikkunan luo, jonka


eteen ei ollut jäänyt ketään, — mikä oli vielä merkillisempää kuin
kaikki muu. Kaksi viimeisiksi jäänyttä ryyppääjää hoiteli vain tulta,
ollenkaan tarkkailematta torille. Nähdessään d'Artagnanin ja hänen
ystävänsä astuvan sisälle he mutisivat: "Ahaa, apuvoimia!"

D'Artagnan töykkäsi Raoulia kyynärpäällään.

"Niin, veikkoset, apuvoimia", sanoi hän. "Cordieu, siinäpä aimo


roihu. Kenet aiotte siinä korventaa?"

Miehet purskahtivat iloiseen nauruun ja lisäsivät yhä puita tuleen,


mitään vastaamatta. D'Artagnan ei voinut pidättyä heitä
katselemasta. Tovin kuluttua toinen lämmittäjä virkkoi:

"Teidät kai lähetettiin tänne sanomaan meille, kun tulee oikea


hetki?"

"Niin juuri", vastasi d'Artagnan, joka olisi mielellään tahtonut


tietää, mitä ajatella asiasta. "Mitäs muutakaan varten täällä olisin?"

"Olkaa siis hyvä ja asettukaa ikkunaan, pitääksenne tarkoin


tilannetta silmällä." D'Artagnan hymyili partaansa, antoi Raoulille
merkin ja sijoittui sävyisästi ikkunan ääreen.

62.

Eläköön Colbert!
Kamalan näytelmän esitti Grève-tori katselijalle tänä hetkenä.
Kymmenettuhannet tältä matkalta yhteensulautuvat ihmispäät
kuvastuivat ikäänkuin laajana vainiotasankona, jonka tähkäpäitä tuuli
huojuttelee. Tuon tuostakin kuului etäältä jotakin käsittämätöntä
kohua, joka sai väkimeren aaltoilemaan entistä rajummin ja
tuhannet silmät siinä väläyttelemään salamoita, ja toisinaan
tungettiin ulkoreunoilta niin voimakkaasti keskelle päin, että
lainehtiva ahdinko valtameren hyökyjen tavoin hyrskehti
kaupunginvartion rivejä vasten, jotka olivat asettuneet hirsipuiden
ympärille. Silloin tapparakeihäiden varret mätkähtelivät etumaisten
tungeksijain päähän ja hartioihin, ja joskus käytettiin kärkiäkin,
jolloin vartion ympäri avautui laaja tyhjä kehä. Se ala vallattiin
reunimmaisten kustannuksella, jolloin nämä vuorostaan saivat kokea
äkillistä puristusta Seine-virran rintasuojuksia vasten. Ylhäältä
ikkunastaan d'Artagnan näki yli koko torin, ja hän havaitsi sisäiseksi
tyytyväisyydekseen, että ne muskettisoturit ja henkivartion miehet,
jotka olivat tulleet vedetyiksi tungokseen, kykenivät nyrkeillään ja
miekankahvoillaan raivaamaan itselleen tilaa. Huomasipa hän
myöskin, että heidän onnistui kaksinkertaisia voimia antavan
yhteishengen avulla liittyä koolle lähes viisikymmentä miestä
käsittäväksi ryhmäksi, joten joukon ydin oli saapuvilla ja hänen
äänensä ulottuvilla, ja ainoastaan kymmenisen eksynyttä näkyi enää
lentelehtivän edestakaisin tungosmainingeissa. Mutta eivät
ainoastaan muskettisoturit ja kaartilaiset kääntäneet puoleensa
d'Artagnanin huomiota. Hirsipuiden ja etenkin Saint-Jeanin
holvikäytävän lähistöllä liikehti rähisevä ja rauhaton pyörre, jossa
vilahteli rohkeita kasvoja ja päättäväisiä ilmeitä; yksinkertaisten
piirteiden ja välinpitämättömän ällistelyn keskeltä merkkejä
vaihdettiin ja toistensa käsiä puristeltiin. D'Artagnan keksi juuri
vilkkaimmissa ryhmissä liikuskelemassa sen ritarin, jonka oli nähnyt
tulevan puutarhansa veräjästä ja sitten pitävän puhetta krouvissa.
Hän jakoi nyt miehiä osastoiksi ja antoi heille määräyksiä.

"Mordioux!" jupisi d'Artagnan äkkiä; "minä en erehtynyt, tunnen


hänet, — siinä on Menneville. Mitä hittoa hän täällä tekee?"

Asteittain paisuva kumea hälinä keskeytti d'Artagnanin mietteet ja


veti hänen katseensa toisaalle. Sen kohun nostatti tuomittujen
saapuminen; runsaslukuinen osasto kaupunginvartiota marssi edellä
ja näkyi jo holvikäytävän kulmauksessa. Koko väenpaljous alkoi
päästellä äänekkäitä huutoja, josta syntyi hirvittävä rääkynä.
D'Artagnan näki Raoulin kalpenevan; hän löi nuorta miestä tukevasti
olalle. Pauhinan kuullessaan lämmittäjät kääntyivät kysymään,
kuinka pitkällä oltiin.

"Tuomitut ovat saapumassa", vastasi d'Artagnan.

"Hyvä", tuumivat miehet lisäten puita pesään.

D'Artagnan katseli heitä rauhattomana; ilmeisesti tarkoitettiin tällä


käsittämättömällä lämmittämisellä jotakin eriskummaista.

Kuolemaan määrätyt ilmestyivät torille. He kävelivät pyövelin


takana; viisikymmentä vartiomiestä kulki kujana heidän kummallakin
puolellaan. Molemmat olivat mustissa puvuissa; kasvot olivat
kalpeat, mutta päättäväiset. He kurkoittausivat kärsimättöminä
katselemaan ihmismeren yli, joka askeleella kohoten varpailleen.

D'Artagnan huomasi tuon liikkeen.

"Hitto vieköön!" sanoi hän; "ihan he ovat kiihkeitä näkemään


hirsipuunsa."
Raoul kavahti taaksepäin, silti kykenemättä kerrassaan poistumaan
ikkunasta. Kauhullakin on vetovoimansa.

"Kuolemaan! Kuolemaan!" kiljui viisikymmentätuhatta kurkkua.

"Niin, kuolemaan!" karjui satakunta raivopäätä ikäänkuin


väenpaljous olisi heiltä odottanut vastausta.

"Hirteen, hirteen!" mylvi suuri lauma; "eläköön kuningas!"

"Kah sepä omituista!" mutisi d'Artagnan; "minä luulin, että


hirttäminen on herra Colbertin ansiota."

Samassa syntyi tukalampi tungos, joka hetkeksi pysähdytti


tuomittujen kulun. Ne rohkeat ja päättäväiset miehet, joita
d'Artagnan oli pitänyt silmällä, olivat voimakkaasti raivaten tietä ja
ihmisten ylikin kavuten lähteneet vartiokujaa kohti. Vasta heidän
päästyään lähelle kykeni kulkue jälleen etenemään.

Mutta äkkiä nuo samaiset miehet alkoivat luikkailla "eläköön


Colbert!" ja tekivät vartiota vastaan hyökkäyksen, jota
kaupunginpalvelijat turhaan yrittivät vastustaa. Ahdistajain takana
työntyi rahvas päälle. Syntyi hirmuinen melu ja sekamelska. Nyt
eivät huudot enää ilmaisseet kärsimättömyyttä ja riemastusta, vaan
kajahtelivat tuskan parahduksina, sillä tapparakeihäät ja miekat
tekivät työtänsä, ja musketeillakin alettiin ampua.

Tästä kummallisesta myllerryksestä ei d'Artagnan ensin voinut


eroittaa mitään, mutta sitten sekasorrosta äkkiä selkisi ikäänkuin
näkyväinen tarkoitus, nimenomainen tahto.

Tuomitut oli riistetty vartijainsa käsistä, ja noita onnettomia


laahattiin nyt Pyhän Neitsyen kuvan krouviin päin. Heihin käsiksi
hyökänneet huusivat: "Eläköön Colbert!" Kansa epäröi; se ei tiennyt,
pitikö estellä kaupunginvartiota vai tämän ahdistajia, kunnes
Colbertin karjujat alkoivat selittää kantaansa toisilla huudoilla: "Ei
tarvita nuoraa! Alas hirsipuu! tuleen, tuleen! Polttakaamme varkaat!
roviolle kiristäjät!"

Tämä vankkojen kurkkujen julistama ohjelma herätti valtavaa


mieltymystä. Väestö oli tullut vain katsomaan tuomion
täytäntöönpanoa, mutta nyt sille tarjoutuikin tilaisuus olla itse siinä
osallisena, ja parempaa ei katurahvas pyytänytkään. Se lyöttäysikin
heti vartion hätyyttäjien puolelle ja kiljui vähemmistön mukana, josta
täten tuli koko yleisön suuri enemmistö: "Niin, niin, roviolle varkaat!
Eläköön Colbert!"

"Mordioux!" huudahti d'Artagnan; "tästä näkyy tulevan vakava


juttu!"

Toinen lieden luona hyörineistä miehistä lähestyi ikkunaa, palava


kekäle kädessään.

"Kas, kas", virkahti hän, "tulee jo kiire!" Sitten hän kääntyi


toveriinsa ja sanoi: "Tuo on merkki!"

Ja hän asetti roihuavan kekäleensä äkkiä seinälaudoitusta vasten.


Pyhän Neitsyen kuvan krouvirakennus oli vanhuuttaan kuiva, ja tuli
pääsi heti vauhtiin.

Sekunnissa alkavat ohuet sisustuslaudat rätistä, ja räiskyvä liekki


kohoaa korkealle. Murhapolttajien huutoihin vastaa mieletön ulvonta
ulkoa.
D'Artagnan on katsellut torille eikä tiedä kolttosesta mitään,
ennenkuin tuntee yhtaikaa savun ja kuumuuden.

"Hohhoi!" huudahtaa hän kääntyen; "onko tuli irti? Mitä hornaa!


Oletteko te järjiltänne vai raivopäitä, hyvät ihmiset?"

Miehet katselevat häntä hämmästyneinä.

"Mitä kummaa!" sanovat he; "sehän on sovittua!"

"Sovittuako, että te poltatte taloni!" ärjäisee d'Artagnan temmaten


murhapolttajalta kekäleen ja sohaisten sen hänen kasvoihinsa.
Toinen aikoo tulla toverinsa avuksi, mutta Raoul tarttuu häneen,
nostaa ilmaan ja heittää ulos ikkunasta, d'Artagnanin paiskatessa
toisen alas portaita.

Ensimmäiseksi vapautuneena vastustajastaan Raoul kiskaisee


laudoituksen irti ja heittää pirstaleet savuavina pitkin lattiaa. Yhdellä
silmäyksellä näkee d'Artagnan, että tulipalosta ei ole enää vaaraa, ja
hän juoksee ikkunaan.

Sekasorto on yltynyt äärimmäisilleen. Kiljutaan hellittämättömästi:


"Ampukaa! murhaa! hirteen! roviolle! Eläköön Colbert ja eläköön
kuningas!"

Ryhmä, joka on siepannut tuomitut kaupunginvartiolta, on


lähestynyt taloa, joka näyttää olevan heidän aikeittensa
määräpaikkana. Menneville on joukkueen etunenässä ja karjuu
kaikuvammin kuin yksikään:

"Polttakaa ne! Polttakaa ne! Eläköön Colbert!"


D'Artagnan alkaa käsittää. Tahdotaan polttaa tuomitut, ja hänen
talonsa on suunniteltu heidän roviokseen.

"Seis!" kiljaisee hän miekka kädessä ja toinen jalka ikkunalaudalla.


"Mitä tahdotte, Menneville?"

"Herra d'Artagnan!" huutaa tämä; "tilaa, tilaa!"

"Tuleen ne! Polttakaa varkaat! Eläköön Colbert!" luikkailee joukko.

Nämä huudot sisuttavat d'Artagnania.

"Lempo soikoon sitä alhaisuutta!" sanoo hän; "korvennettaviksiko


nuo viheliäiset raukat, jotka on tuomittu ainoastaan hirsipuuhun!"

Portin edustalla seinää vasten tungettu uteliasten joukko sulloutuu


sillävälin niin sankaksi parveksi, että se sulkee tien. Menneville ja
hänen miehensä, jotka laahaavat tuomittuja, ovat ainoastaan
kymmenen askeleen päässä portista. Menneville tekee äärimmäisen
ponnistuksen.

"Tilaa! Tilaa!" huutaa hän pistooli kädessä.

"Polttakaamme! Polttakaamme!" kertaa joukko. "Kapakkatalo on


tulessa. Polttakaamme varkaat! Polttakaamme kiristäjät Pyhän
Neitsyen kuvassa!"

Ei enää epäilystäkään; d'Artagnanin talo tosiaankin tahdotaan


tuhota.

D'Artagnan muistaa sen huudon, jolla aina ennen on ollut suurta


menestystä hänen seikkailuissaan.
"Tänne, muskettisoturit!…" hän karjaisee jylisevällä äänellä, joka
pauhaa kovemmin kuin kanuuna, meri tai myrsky; "tänne
muskettisoturit!…"

Ja laskeutuen käsivarsiensa varaan riipuksiin ulokkeelta hän


pudottautuu ihmisjoukkoon; tämä alkaa loitota talosta, josta sataa
ihmisiä. Raoul on maassa yhtä nopeasti. Kumpaisellakin on
paljastettu miekka kädessään. Kaikki lähistön muskettisoturit ovat
kuulleet kutsun, kääntyneet katsomaan ja tunteneet d'Artagnanin.

"Kapteenin luo! Kapteenin luo!" he luikkailevat, ja tungos avautuu


heidän edessään niinkuin laivan keula halkoo vedenpintaa. Samassa
d'Artagnan ja Menneville joutuvat vastatusten. "Tie auki!" huutaa
Menneville nähdessään, että hänen tarvitsee vain ojentaa kätensä
koskettaakseen ulko-ovea.

"Tästä ei pääse kukaan!" vastaa d'Artagnan.

"Vai niin", äännähtää Menneville laskien pistoolin d'Artagnanin


rintaa vasten. Mutta ennen kuin hän ehtii painaa liipasinta on
d'Artagnan miekkansa kahvalla iskenyt Menneville käden ylöspäin ja
survaissut terän hänen lävitseen.

"Sanoinhan sinulle, että sinun piti pysyä alallasi", hän lausuu


Mennevillen kierähtäessä jalkoihinsa.

"Antakaa tilaa! Raivatkaa pääsy!" huutavat Mennevillen toverit,


jotka aluksi ovat säikkyneet, mutta hetimiten taas tyyntyvät
huomatessaan, että heillä on vastassaan vain kaksi miestä. Mutta
nämä kaksi miestä ovat satakätisiä jättiläisiä; kalpa heiluu heillä kuin
arkkienkelin tulinen miekka. Se sohii kärjellä läimäyttelee lappeella,
iskee terällä. Jokainen heilautus kellistää miehensä. "Kuninkaan
puolesta!" huutaa d'Artagnan jokaisella surman viuhtaisullaan.
"Kuninkaan puolesta!" kertaa Raoul.

Se huuto on tunnussanana muskettisotureille, jotka sen


opastamina rientävät d'Artagnanin luo.

Kaupunginvartion miehet sillävälin tointuvat säikähdyksestään; he


karkaavat hätyyttäjäinsä niskaan, he ruhjovat ja lyövät maahan
järjestelmällisesti kuin muurinmurtaja kaikki tieltänsä. Nähdessään
miekkain välähtelevän ja veren roiskuvan väkijoukko hajaantuu
pakosalle, tallaten toisiansa ensi tungeksimisessa. Kuuluu viimeksi
epätoivoisia kirahduksia ja huudetaan armoa; se on voitettujen
esiintymisen loppuna.

Molemmat tuomitut ovat joutuneet takaisin vartiomiesten


huostaan. D'Artagnan lähestyy heitä ja sanoo nähdessään heidät
kalpeina ja kuolemantuskassa:

"Reipastautukaa, ihmisparat; te olette säästyneet siitä hirmusta,


jolla nuo kurjat teitä uhkasivat. Kuningas on tuominnut teidät
hirsipuuhun. Teidät hirtetään vain. No, viekää nyt heidät, ja sillä
hyvä."

Pyhän Neitsyen kuvalla ei ole enää mitään hätää. Tuli on veden


puutteessa sammutettu kahdella viinitynnyrillä. Eloonjääneet
salaliittolaiset ovat paenneet puutarhan kautta. Vartiomiehet
laahaavat tuomittuja hirsipuiden luo. Tuossa tuokiossa nyt
lopetetaankin koko homma. Pyöveli välittää hyvin vähän taiteensa
muodollisuuksista ja suoriutuu noista kahdesta onnettomasta
yhdessä minuutissa.
Sillävälin tungeksitaan d'Artagnanin ympärillä; häntä onnitellaan ja
ylistellään. Hän pyyhkii hikistä otsaansa ja hurmeista miekkaansa ja
kohauttaa hartioitaan, kun näkee jaloissaan Mennevillen, joka
vääntelehtii kuolonkamppauksen viimeisissä kouristuksissa. Ja
säälittelevän Raoulin kääntäessä katseensa toisaanne d'Artagnan
osoittaa muskettisotureille hirsipuiden kolkkoa taakkaa.

"Ihmispoloiset", hän sanoo; "toivoakseni he sentään siunasivat


minua kuolinhetkenään, kun pelastuivat julmista kärsimyksistä."

Nämä sanat sattuvat Mennevillen korvaan hänen juuri itse


vetäessään viimeisen henkäyksensä. Synkeä ivahymy väikkyy hänen
huulillaan; hän tahtoo vastata, mutta siihen ponnistukseen ehtyy
elinvoima. Hän heittää henkensä.

"Voi, tämä on ollut hirvittävä näytelmä!" jupisi Raoul;


"lähtekäämme, chevalier."

"Ethän liene haavoittunut?" kysyi d'Artagnan.

"En, Jumalan kiitos."

"Hyvä juttu! Hiisi vieköön, oletpa reipas urho! Sinulla on isäsi pää
ja Portoksen käsivarsi. Ah, olisipa Portos ollutkin täällä, niin olisi
vasta saatu nähdä ihmeitä!"

Ja ikäänkuin jotakin muistaen hän mutisi sitten:

"Mutta missähän hiidessä kunnon Portos voineekaan oleilla?"

"Tulkaa, chevalier, tulkaa!" pyyteli Raoul.


"Maltas nyt vielä vain minuutti, ystäväiseni, jotta ehdin periä
kolmekymmentäseitsemän ja puoli pistoliani; tulen heti takaisin. —
Talo tuottaa hyvin", tuumi d'Artagnan mennessään takaisin Pyhän
Neitsyen kuvaan, "mutta nyt silti mieluummin soisin sen olevan
jossakin toisessa osassa kaupunkia, vaikkapa saisin hiukan
vähemmänkin vuokraa."

63.

Miten herra d'Eymerisin timanttisormus siirtyi d'Artagnanille.

Edelläkuvatun verisen melskeen kehittyessä loppuun Grève-torilla


pistivät viimeiset puutarhaveräjän vartioksi jääneet miehet
miekkansa jälleen huotraan ja auttoivat erään joukostaan ratsun
selkään, joka valmiiksi satuloittuna odotti veräjän takana. Sitten he
pakenivat joka suunnalle kuin lentoon säikytetty lintuparvi, toiset
kavuten muurien yli ja toiset ilmeisesti hädissään syöksähtäen
etäisemmille porteille. Ratsaille noussut kannusti hevostaan niin
rajusti, että elukkaparka oli loikata yli muurin, ja karautti Baudoyer-
aukion poikki lähikaduille kuin salama, ihmisvilinässä kaataen ja
ruhjoen mitä tielle sattui, kunnes hän kymmenen minuutin kuluttua
pujahti sisälle yli-intendentin kaupunkitalon portista vielä enemmän
hengästyneenä kuin hevosensa.

Kavioiden kopseen kaikuessa katukiveykseltä ilmestyi abbé


Fouquet erääseen pihanpuoliseen ikkunaan, ja ratsastaja ei ehtinyt
hypätä maahankaan, kun hän puolittain ojentuen ulos ikkunasta
tiedusti:
"Miten ovat asiat, Danicamp?"

"Kaikki on päättynyt", vastasi ratsastaja.

"Päättynyt?" huusi abbé; "he ovat pelastuneet?"

"Ei, monsieur", vastasi ratsastaja, "heidät hirtettiin."

"Hirtettiin!" toisti abbé vaaleten.

Samassa avautui sivuovi, ja Fouquet astui huoneeseen kalpeana,


vääntynein kasvonpiirtein, huulet raollaan pidätellen tuskan ja
kiukustuksen huudahdusta. Hän pysähtyi kynnykselle kuuntelemaan,
mitä pihalta puhuttiin ikkunaan.

"Teitä kurjia!" ärjäisi abbé; "ette siis taistelleet?"

"Niinkuin jalopeurat."

"Pikemmin kuin jänishousut!"

"Monsieur!"

"Sata päättäväistä miekkamiestä vastaa yllätyksessä


kymmentätuhatta kaupunginpalkkalaista. Missä Menneville on, se
pöyhkeä kerskuri, joka ylvästeli palaavansa joko kuolleena tai
voittajana?"

"Hän on pitänyt sanansa, monsieur. Hän on hengetön."

"Hengetön! Kuka hänet on surmannut?"

"Hornanhenki ihmisen hahmossa, — kymmenellä tulisella säilällä


aseistautunut jättiläinen, joka yhdellä tempaisulla sammutti
tulipalon, taltutti mylläkän ja polkaisi Grève-torin kiveyksestä esille
sata muskettisoturia."

Fouquet kohotti otsaansa, jolla helmeili kylmä hiki.

"Oi, Lyodot ja d'Eymeris kuolleet, kuolleet, kuolleet!" mutisi hän;


"ja minä olen häväisty!"

Abbé kääntyi päin ja sanoi nähdessään veljensä murtuneena ja


kalmankalpeana:

"No, no, se on kohtalon isku; meidän ei sovi vaikerrella. Kun yritys


ei onnistunut, niin Jumalan tahto…"

"Vaikene, abbé, vaikene!" huusi Fouquet; "sinun puolustelusi ovat


herjausta. Tulkoon tuo mies sisälle kertomaan, millä tavoin se
kamaluus oikein tapahtui."

"Mutta, hyvä veli…"

"Tottele!"

Abbé antoi merkin, ja puolen minuutin kuluttua kuuluivat miehen


askeleet portaissa.

Samalla oli Gourville ilmestynyt yli-intendentin takaa kuin


isäntänsä suojelusenkelinä; hän nosti sormen huulilleen
muistutukseksi rahaministerille, että hänen tuli tuskansakin
kiihtymyksessä esiintyä varovasti. Fouquet jännittikin toimintaan
kaiken hillitsemistarmonsa, pakottautuen niin levolliseksi kuin
ihminen ikinä voi sydämensä ollessa pakahtumaisillaan
mielenahdistuksesta.
"Lausukaa tietonne", sanoi Gourville Danicampin tullessa
huoneeseen.

"Monsieur", aloitti sanansaattaja, "olimme saaneet määräyksen


siepata vangit ja huutaa: 'eläköön Colbert!' viedessämme heidät
pois."

"Elävältä poltettaviksi, eikö niin, abbé?" keskeytti Gourville.

"Niin, niin, sellaisen käskyn oli Menneville saanut. Menneville tiesi


mitä piti tehdä, mutta hän on nyt kuollut."

Tämä tieto näytti tyynnyttävän Gourvilleä sen sijaan että se olisi


häntä masentanut.

"Elävältä poltettaviksi?" toisti sanansaattaja ikäänkuin epäillen,


tokko tämä hänelle ja hänen kumppaneilleen ilmoitettu ainoa ohje oli
tarkoitettu toimeenpantavaksi.

"Niin, teidän piti laahata heidät suoraa päätä roviolle", uudisti abbé
raakaluontoisesti.

"Aivan oikein, monsieur, aivan oikein", myönteli mies koettaen


saada kahden puhuttelijansa kasvoista selville, olisiko hänen hyvä vai
paha selostaa tapauksia täysin totuudenmukaisesti.

"Kertokaahan siis", sanoi Gourville.

"Vankeja oltiin tuomassa Grève-torille", jatkoi Danicamp,


"raivostunut kansa tahtoi, että heidät pitikin polttaa eikä hirttää."

"Kansalla oli omat syynsä", huomautti abbé; "edelleen?"


"Mutta juuri kun kaupunginvartio oli hajoitettu ja rovioksi aiottu
talo torin varrella sytytetty, heitti äsken mainitsemani raivohenkinen
jättiläinen — jonka sanotaan olleen sen talon omistaja — erään
nuoren miehen avustamana ulos ikkunasta tulen hoitelijat, huusi
puolelleen ihmisjoukossa olleet muskettisoturit, hyppäsi itse alas
torille ensimmäisestä huonekerrasta ja huiteli niin hurjasti
miekallaan, että kaupunginvartio pääsi jälleen voitolle, vangit
siepattiin takaisin ja Menneville monen muun mukana surmattiin.
Uudestaan kiinni jouduttuaan tuomitut saivat kuolemansa kolmessa
minuutissa."

Kaikesta itsehillinnästään huolimatta ei Fouquet voinut olla


kumeasti voihkaisematta.

"Ja tuo talonomistaja", kysyi abbé, "mikä hän oli nimeltään?"

"Sitä en osaa sanoa, kun en häntä nähnytkään; minulle oli


määrätty puutarhassa vartiopaikka, jonne ilmoiteltiin aseman
kehityksestä. Ohjeenani oli kaiken päätyttyä rientää kiireimmän
kautta tuomaan teille tieto tuloksesta. Käskyn mukaan karautin
täyttä vauhtia liikkeelle, ja nyt olen tässä."

"Oikein tehty, monsieur; meillä ei ole enää muuta kysyttävää


teiltä", sanoi abbé yhä ahdistuneemmalla mielellä nähden sen
hetken lähenevän, jolloin hän joutuisi haastelemaan veljensä kanssa
kahden kesken.

"Oletteko saanut maksunne?" kysyi Gourville.

"Osasuorituksen, monsieur", vastasi Danicamp.


"Tässä on kaksikymmentä pistolia; menkää, monsieur, älkääkä
unohtako puoltaa aina kuninkaan todellisia etuja kuten tänäänkin."

"Kyllä muistan, monsieur", vastasi mies kumartaen ja pistäen rahat


taskuunsa. Hän poistui.

Fouquet oli tähän asti seisonut liikkumattomana, mutta nyt hän


nopeasti astahti abbén ja Gourvillen väliin. Kumpainenkin avasi
yhtaikaa suunsa puhuakseen.

"Ei mitään puolusteluja", kielsi rahaministeri, "eikä soimauksen


sanaakaan ketään vastaan! Jos minä en olisi ollut huono ystävä, niin
en olisi uskonut Lyodotin ja d'Eymerisin vapautusta kellekään
toiselle. Minä yksin olen syypää; vain minua siis kohtaavat moitteet
ja pahoittelut. Jätä minut, abbé."

"Et kuitenkaan", vastasi viimemainittu, "estäne minua


etsityttämästä sitä riiviötä, joka Colbertin puolesta sekaantui
hyvinsuunniteltuun hankkeeseemme, — sillä jos harras kiintymys
ystäviinsä on hyvää valtioviisautta, en luule huonoksi sitäkään
menettelyä, että hellittämättömästi ahdistaa vihollisiaan."

"Heitä sinä silleen valtioviisaus, abbé; mene nyt vain äläkä toimita
minulle kuulumisia itsestäsi ennen kuin määrään toisin, — minusta
tuntuu, että meidän on nyt asetuttava hyvin hiljaisiksi ja varovaisiksi.
Sinulla on kamala esimerkki edessäsi. Ei mitään kostotoimia sinun ja
väkesi taholta; sen kiellän jyrkästi."

"Ei mikään käsky", murisi abbé, "voi pidättää minua hyvittämästä


sukuni kärsimää rikollista häväistystä."
"Kuules nyt", huudahti Fouquet äänellä, jonka jyrkkä sävy ei enää
sallinut mitään vastaväitteitä, "jos haudot ainoatakaan ajatusta
pienimmäksikään poikkeukseksi minun tahdostani, niin heitätän sinut
Bastiljiin kahden tunnin kuluessa sen ilmenemisestä. Toimi sen
mukaan, abbé!"

Abbé kumarsi punastuen.

Fouquet viittasi Gourvilleä mukaansa ja suuntasi jo askeleensa


työhuonettaan kohti, kun kamaripalvelija korkealla äänellä ilmoitti:

"Chevalier d'Artagnan."

"Kuka se on?" kysyi Fouquet välinpitämättömästi Gourvilleltä.

"Muuan hänen majesteettinsa muskettisoturien entinen


luutnantti", vastasi tämä samaan tapaan.

Fouquet ei viitsinyt edes ajatella ilmoitetun käynnin tarkoitusta,


vaan astui vain edelleen.

"Suokaa anteeksi, monseigneur", sanoi Gourville, "mutta mieleeni


johtuu, että kun tuo urho on eronnut kuninkaan palveluksesta, hän
nyt luultavasti tuleekin nostamaan neljännesvuoden osuutta
eläkkeestä, joka hänelle lienee myönnetty."

"Menköön hiiteen!" huudahti Fouquet; "miksi valitseekin näin


pahan ajan!"

"Sallikaa minun siis lausua hänelle epäys sievässä muodossa, sillä


minä tiedän hänet mieheksi, joka nykyisissä olosuhteissamme on
parempi saada ystäväksi kuin vihamieheksi."
"Vastatkaa hänelle miten haluatte", sanoi Fouquet.

"Äh, mon Dieu", puuttui puheeseen abbé mielensä karvautta


nurkuakseen, "vastatkaa mutkattomasti, ettei ole rahoja, olletikaan
muskettisotureille."

Mutta abbé oli tuskin ehtinyt virkkaa varomattomia sanojaan, kun


raolleen jäänyt ovi ammahti selälleen ja d'Artagnan ilmestyi esiin.

"Niin, herra Fouquet", sanoi hän, "kyllä minä tiesinkin, ettei täällä
ole rahoja muskettisotureille. En tänne tullutkaan saamaan rahoja,
vaan ainoastaan kieltävän vastauksen. Se on nyt annettu; kiitos!
Sanon vain hyvästi ja menen nostamaan herra Colbertilta, mitä
muodon vuoksi pyysin teiltä."

Ja hän astui ulos kumarrettuaan jotensakin keveästi.

"Gourville", virkahti Fouquet, "riennä tuon miehen perässä ja tuo


hänet takaisin luokseni."

Gourville totteli, tavoittaen d'Artagnanin portaissa. Askeleita


kuullessaan tämä kääntyi ja huomasi Gourvillen.

"Mordioux, hyvä herraseni", hän sanoi, "teillä rahamiehillä on


ikävät tavat! Saavun herra Fouquetin luo nostamaan hänen
majesteettinsa myöntämää rahaerää ja minut otetaan vastaan kuin
almua ruinaava kerjäläinen tai hopeakaluja vaaniva veijari."

"Te mainitsitte herra Colbertia, hyvä herra d'Artagnan? Sanoitte


lähtevänne herra Colbertin luo?"

"Tietysti menen sinne, vaikkapa vain vaatimaan häneltä selvyyttä


miehistä, jotka tahtovat polttaa taloja huutaen: 'Eläköön Colbert!'"
Welcome to our website – the ideal destination for book lovers and
knowledge seekers. With a mission to inspire endlessly, we offer a
vast collection of books, ranging from classic literary works to
specialized publications, self-development books, and children's
literature. Each book is a new journey of discovery, expanding
knowledge and enriching the soul of the reade

Our website is not just a platform for buying books, but a bridge
connecting readers to the timeless values of culture and wisdom. With
an elegant, user-friendly interface and an intelligent search system,
we are committed to providing a quick and convenient shopping
experience. Additionally, our special promotions and home delivery
services ensure that you save time and fully enjoy the joy of reading.

Let us accompany you on the journey of exploring knowledge and


personal growth!

textbookfull.com

You might also like